summaryrefslogtreecommitdiff
path: root/obsolete/macros
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /obsolete/macros
Initial commit
Diffstat (limited to 'obsolete/macros')
-rw-r--r--obsolete/macros/context/contrib/context-fixme/tex/context/third/fixme/t-fixme.mkii216
-rw-r--r--obsolete/macros/context/contrib/context-fixme/tex/context/third/fixme/t-fixme.mkiv263
-rw-r--r--obsolete/macros/context/contrib/context-games/doc/context/third/games/README26
-rw-r--r--obsolete/macros/context/contrib/context-games/doc/context/third/games/games-doc.pdfbin0 -> 36275 bytes
-rw-r--r--obsolete/macros/context/contrib/context-games/tex/context/third/games/games-go.lua537
-rw-r--r--obsolete/macros/context/contrib/context-games/tex/context/third/games/games-go.tex383
-rw-r--r--obsolete/macros/context/contrib/context-games/tex/context/third/games/games-hex.lua90
-rw-r--r--obsolete/macros/context/contrib/context-games/tex/context/third/games/games-hex.tex119
-rw-r--r--obsolete/macros/context/contrib/context-games/tex/context/third/games/holz280.jpgbin0 -> 4759 bytes
-rw-r--r--obsolete/macros/context/contrib/context-games/tex/context/third/games/t-games.tex110
-rw-r--r--obsolete/macros/context/contrib/context-lilypond/doc/context/third/lilypond/demo.pdfbin0 -> 74709 bytes
-rw-r--r--obsolete/macros/context/contrib/context-lilypond/doc/context/third/lilypond/t-lilypond.pdfbin0 -> 124275 bytes
-rw-r--r--obsolete/macros/context/contrib/context-lilypond/tex/context/third/lilypond/t-lilypond.tex432
-rw-r--r--obsolete/macros/context/contrib/context-sgf/doc/context/third/sgf/README7
-rw-r--r--obsolete/macros/context/contrib/context-sgf/doc/context/third/sgf/deadstone-lua.pdfbin0 -> 19927 bytes
-rw-r--r--obsolete/macros/context/contrib/context-sgf/doc/context/third/sgf/deadstone-mkii.pdfbin0 -> 81860 bytes
-rw-r--r--obsolete/macros/context/contrib/context-sgf/doc/context/third/sgf/deadstone-mkiv.pdfbin0 -> 69473 bytes
-rw-r--r--obsolete/macros/context/contrib/context-sgf/doc/context/third/sgf/t-deadstone.pdfbin0 -> 73226 bytes
-rw-r--r--obsolete/macros/context/contrib/context-sgf/doc/context/third/sgf/t-sgf.pdfbin0 -> 109898 bytes
-rw-r--r--obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/deadstone.lua224
-rw-r--r--obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/deadstone.mkii343
-rw-r--r--obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/deadstone.mkiv63
-rw-r--r--obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/go-view-test-1.tex27
-rw-r--r--obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/go-view-test-2.tex27
-rw-r--r--obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/go-view-test-3.tex21
-rw-r--r--obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/go-view-test-4.tex34
-rw-r--r--obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/go-view-test-5.tex21
-rw-r--r--obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/t-deadstone.tex90
-rw-r--r--obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/t-go.tex16
-rw-r--r--obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/t-sgf-generic.tex108
-rw-r--r--obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/t-sgf-library.tex163
-rw-r--r--obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/t-sgf.tex458
-rw-r--r--obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/t-weiqi.tex16
-rw-r--r--obsolete/macros/context/contrib/context-taspresent/doc/context/third/taspresent/demo.tex153
-rw-r--r--obsolete/macros/context/contrib/context-taspresent/doc/context/third/taspresent/hor.jpgbin0 -> 110718 bytes
-rw-r--r--obsolete/macros/context/contrib/context-taspresent/doc/context/third/taspresent/readme136
-rw-r--r--obsolete/macros/context/contrib/context-taspresent/doc/context/third/taspresent/taspresent-manual.pdfbin0 -> 1883027 bytes
-rw-r--r--obsolete/macros/context/contrib/context-taspresent/doc/context/third/taspresent/taspresent-manual.tex496
-rw-r--r--obsolete/macros/context/contrib/context-taspresent/doc/context/third/taspresent/vert.jpgbin0 -> 110690 bytes
-rw-r--r--obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-blackblue.tex145
-rw-r--r--obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-bluegray.tex271
-rw-r--r--obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-bluestripe.tex160
-rw-r--r--obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-darkshade.tex165
-rw-r--r--obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-doubleframe.tex278
-rw-r--r--obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-doubleshade.tex130
-rw-r--r--obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-embossed.tex154
-rw-r--r--obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-graybeams.tex172
-rw-r--r--obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-graysquare.tex145
-rw-r--r--obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-greenblue.tex209
-rw-r--r--obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-horizontalblue.tex150
-rw-r--r--obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-lightblue.tex162
-rw-r--r--obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-narrowstripe.tex188
-rw-r--r--obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-quadblue.tex163
-rw-r--r--obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-rainbowstripe.tex243
-rw-r--r--obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-redframe.tex187
-rw-r--r--obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-superellipse.tex139
-rw-r--r--obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-taspresent.tex684
-rw-r--r--obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-titleframe.tex158
-rw-r--r--obsolete/macros/context/contrib/context-taspresent/tpm/t-taspresent.tpm54
-rw-r--r--obsolete/macros/generic/diagrams/barr/diagdoc.tex422
-rw-r--r--obsolete/macros/generic/diagrams/barr/diagram.tex1048
-rw-r--r--obsolete/macros/generic/proofs/taylor/boxproof-old.tex142
-rw-r--r--obsolete/macros/generic/proofs/taylor/boxproof.tex424
l---------obsolete/macros/latex/contrib/ar/README1
-rw-r--r--obsolete/macros/latex/contrib/ar/ar.sty39
-rw-r--r--obsolete/macros/latex/contrib/ar/ar.txt125
-rw-r--r--obsolete/macros/latex/contrib/ar/ar10.mf142
-rw-r--r--obsolete/macros/latex/contrib/ar/ar12.mf143
-rw-r--r--obsolete/macros/latex/contrib/ar/ar5.mf145
-rw-r--r--obsolete/macros/latex/contrib/ar/ar6.mf144
-rw-r--r--obsolete/macros/latex/contrib/ar/ar7.mf145
-rw-r--r--obsolete/macros/latex/contrib/ar/ar8.mf143
-rw-r--r--obsolete/macros/latex/contrib/ar/ar9.mf144
-rw-r--r--obsolete/macros/latex/contrib/babel-contrib/bahasa/bahasa.dtx286
-rw-r--r--obsolete/macros/latex/contrib/babel-contrib/bahasa/bahasa.ins149
-rw-r--r--obsolete/macros/latex/contrib/babel-contrib/bahasa/bahasa.pdfbin0 -> 113271 bytes
-rw-r--r--obsolete/macros/latex/contrib/babel-contrib/bahasa/bahasam.dtx297
-rw-r--r--obsolete/macros/latex/contrib/babel-contrib/bahasa/bahasam.pdfbin0 -> 113330 bytes
-rw-r--r--obsolete/macros/latex/contrib/babeltools/README15
-rw-r--r--obsolete/macros/latex/contrib/babeltools/babeltools.pdfbin0 -> 108077 bytes
-rw-r--r--obsolete/macros/latex/contrib/babeltools/babeltools.sty314
-rw-r--r--obsolete/macros/latex/contrib/babeltools/babeltools.tex140
-rw-r--r--obsolete/macros/latex/contrib/backrefx/README58
-rw-r--r--obsolete/macros/latex/contrib/backrefx/doc/latex/backrefx/backrefx.pdfbin0 -> 142902 bytes
-rw-r--r--obsolete/macros/latex/contrib/backrefx/source/latex/backrefx/backrefx.dtx419
-rw-r--r--obsolete/macros/latex/contrib/backrefx/source/latex/backrefx/backrefx.ins81
-rw-r--r--obsolete/macros/latex/contrib/backrefx/tex/latex/backrefx/backrefx.sty66
-rw-r--r--obsolete/macros/latex/contrib/bitfield/bitfield.dtx659
-rw-r--r--obsolete/macros/latex/contrib/bitfield/bitfield.ins6
-rw-r--r--obsolete/macros/latex/contrib/camel/index.dtx1385
-rw-r--r--obsolete/macros/latex/contrib/camel/index.ins8
-rw-r--r--obsolete/macros/latex/contrib/cellwise/README4
-rw-r--r--obsolete/macros/latex/contrib/cellwise/cellwise.sty41
-rw-r--r--obsolete/macros/latex/contrib/cellwise/cellwise.tex73
-rw-r--r--obsolete/macros/latex/contrib/copypaste/README31
-rw-r--r--obsolete/macros/latex/contrib/copypaste/copypaste.dtx178
-rw-r--r--obsolete/macros/latex/contrib/copypaste/copypaste.ins47
-rw-r--r--obsolete/macros/latex/contrib/copypaste/copypaste.pdfbin0 -> 46099 bytes
-rw-r--r--obsolete/macros/latex/contrib/csvtools/README39
-rw-r--r--obsolete/macros/latex/contrib/csvtools/doc/CHANGES29
-rw-r--r--obsolete/macros/latex/contrib/csvtools/doc/csvtools.pdfbin0 -> 225188 bytes
-rw-r--r--obsolete/macros/latex/contrib/csvtools/doc/manual.html1615
-rw-r--r--obsolete/macros/latex/contrib/csvtools/script/csvtools.pl1995
-rw-r--r--obsolete/macros/latex/contrib/csvtools/source/csvtools.dtx2536
-rw-r--r--obsolete/macros/latex/contrib/csvtools/source/csvtools.ins23
-rw-r--r--obsolete/macros/latex/contrib/datetime/CHANGES117
-rw-r--r--obsolete/macros/latex/contrib/datetime/README55
-rw-r--r--obsolete/macros/latex/contrib/datetime/datetime-manual.css152
-rw-r--r--obsolete/macros/latex/contrib/datetime/datetime-manual.html2173
-rw-r--r--obsolete/macros/latex/contrib/datetime/datetime-manual.tex666
-rw-r--r--obsolete/macros/latex/contrib/datetime/datetime.dtx7434
-rw-r--r--obsolete/macros/latex/contrib/datetime/datetime.ins136
-rw-r--r--obsolete/macros/latex/contrib/datetime/datetime.pdfbin0 -> 307669 bytes
-rw-r--r--obsolete/macros/latex/contrib/datetime/samples/dt-lang.pdfbin0 -> 30762 bytes
-rw-r--r--obsolete/macros/latex/contrib/datetime/samples/dt-lang.tex64
-rw-r--r--obsolete/macros/latex/contrib/datetime/samples/dt-sampl.pdfbin0 -> 64239 bytes
-rw-r--r--obsolete/macros/latex/contrib/datetime/samples/dt-sampl.tex172
-rw-r--r--obsolete/macros/latex/contrib/fixocgx/ChangeLog28
-rw-r--r--obsolete/macros/latex/contrib/fixocgx/README43
-rw-r--r--obsolete/macros/latex/contrib/fixocgx/fixocgx.sty281
-rw-r--r--obsolete/macros/latex/contrib/getargs/README13
-rw-r--r--obsolete/macros/latex/contrib/getargs/getargs.pdfbin0 -> 402698 bytes
-rw-r--r--obsolete/macros/latex/contrib/getargs/getargs.sty56
-rw-r--r--obsolete/macros/latex/contrib/getargs/getargs.tex250
-rw-r--r--obsolete/macros/latex/contrib/glossary/CHANGES115
-rw-r--r--obsolete/macros/latex/contrib/glossary/README45
-rw-r--r--obsolete/macros/latex/contrib/glossary/glossary.dtx5915
-rw-r--r--obsolete/macros/latex/contrib/glossary/glossary.ins38
-rw-r--r--obsolete/macros/latex/contrib/glossary/glossary.pdfbin0 -> 418573 bytes
-rw-r--r--obsolete/macros/latex/contrib/glossary/manual.html3069
-rw-r--r--obsolete/macros/latex/contrib/gmeometric/README73
-rw-r--r--obsolete/macros/latex/contrib/gmeometric/gmeometric.pdfbin0 -> 86152 bytes
-rw-r--r--obsolete/macros/latex/contrib/gmeometric/gmeometric.sty432
-rw-r--r--obsolete/macros/latex/contrib/koma-script-obsolete/README65
-rw-r--r--obsolete/macros/latex/contrib/koma-script-obsolete/scrlettr.dtx2853
-rw-r--r--obsolete/macros/latex/contrib/koma-script-obsolete/scrlettr.ins104
-rw-r--r--obsolete/macros/latex/contrib/koma-script-obsolete/scrlettr.pdfbin0 -> 383993 bytes
-rw-r--r--obsolete/macros/latex/contrib/koma-script-obsolete/scrpage-obsolete.dtx1160
-rw-r--r--obsolete/macros/latex/contrib/koma-script-obsolete/scrpage.pdfbin0 -> 190276 bytes
-rw-r--r--obsolete/macros/latex/contrib/labelcas/README68
-rw-r--r--obsolete/macros/latex/contrib/labelcas/labelcas.dtx1908
-rw-r--r--obsolete/macros/latex/contrib/labelcas/labelcas.ins54
-rw-r--r--obsolete/macros/latex/contrib/labelcas/labelcas.pdfbin0 -> 292795 bytes
-rw-r--r--obsolete/macros/latex/contrib/labelcas/labelcas.sty217
-rw-r--r--obsolete/macros/latex/contrib/lgrx/README70
-rw-r--r--obsolete/macros/latex/contrib/lgrx/README.html787
-rw-r--r--obsolete/macros/latex/contrib/lgrx/lgrxenc-test.pdfbin0 -> 236572 bytes
-rw-r--r--obsolete/macros/latex/contrib/lgrx/lgrxenc-test.tex338
-rw-r--r--obsolete/macros/latex/contrib/lgrx/lgrxenc.def195
-rw-r--r--obsolete/macros/latex/contrib/lgrx/lgrxenc.def.html943
-rw-r--r--obsolete/macros/latex/contrib/marginal/marginal.dtx339
-rw-r--r--obsolete/macros/latex/contrib/marginal/marginal.pdfbin0 -> 89030 bytes
-rw-r--r--obsolete/macros/latex/contrib/mbenotes/README11
-rw-r--r--obsolete/macros/latex/contrib/mbenotes/mbenotes.pdfbin0 -> 344186 bytes
-rw-r--r--obsolete/macros/latex/contrib/mbenotes/mbenotes.sty1073
-rw-r--r--obsolete/macros/latex/contrib/mbenotes/mbenotes.tex1
-rw-r--r--obsolete/macros/latex/contrib/misc/askinclude.sty103
-rw-r--r--obsolete/macros/latex/contrib/misc/cea.sty116
-rw-r--r--obsolete/macros/latex/contrib/misc/ieeetrans.cls627
-rw-r--r--obsolete/macros/latex/contrib/misc/morefloats.sty55
-rw-r--r--obsolete/macros/latex/contrib/misc/raggedr.sty85
-rw-r--r--obsolete/macros/latex/contrib/misc/vpage.sty101
-rw-r--r--obsolete/macros/latex/contrib/numline/numline.sty405
-rw-r--r--obsolete/macros/latex/contrib/physymb/README39
-rw-r--r--obsolete/macros/latex/contrib/physymb/physymb.dtx1131
-rw-r--r--obsolete/macros/latex/contrib/physymb/physymb.ins46
-rw-r--r--obsolete/macros/latex/contrib/physymb/physymb.pdfbin0 -> 460546 bytes
-rw-r--r--obsolete/macros/latex/contrib/piff-ams/ams.dtx206
-rw-r--r--obsolete/macros/latex/contrib/piff-ams/ams.ins49
-rw-r--r--obsolete/macros/latex/contrib/piff/tensor.sty62
-rw-r--r--obsolete/macros/latex/contrib/ps4pdf/4-10-8.inl28
-rw-r--r--obsolete/macros/latex/contrib/ps4pdf/Makefile52
-rw-r--r--obsolete/macros/latex/contrib/ps4pdf/README25
-rwxr-xr-xobsolete/macros/latex/contrib/ps4pdf/create-eps6
-rw-r--r--obsolete/macros/latex/contrib/ps4pdf/penguin.eps7659
-rw-r--r--obsolete/macros/latex/contrib/ps4pdf/ps4pdf106
-rw-r--r--obsolete/macros/latex/contrib/ps4pdf/ps4pdf-test.tex141
-rw-r--r--obsolete/macros/latex/contrib/ps4pdf/ps4pdf.sty284
-rw-r--r--obsolete/macros/latex/contrib/psu-thesis/README414
-rw-r--r--obsolete/macros/latex/contrib/psu-thesis/manual.pdfbin0 -> 93709 bytes
-rw-r--r--obsolete/macros/latex/contrib/psu-thesis/manual.tex426
-rw-r--r--obsolete/macros/latex/contrib/psu-thesis/mssample.pdfbin0 -> 103509 bytes
-rw-r--r--obsolete/macros/latex/contrib/psu-thesis/mssample.tex180
-rw-r--r--obsolete/macros/latex/contrib/psu-thesis/phdsample.pdfbin0 -> 94925 bytes
-rw-r--r--obsolete/macros/latex/contrib/psu-thesis/phdsample.tex185
-rw-r--r--obsolete/macros/latex/contrib/psu-thesis/psu-thesis.sty799
-rw-r--r--obsolete/macros/latex/contrib/psu-thesis/psuthesis.bst1236
l---------obsolete/macros/latex/contrib/pzccal/README1
-rw-r--r--obsolete/macros/latex/contrib/pzccal/README.html126
-rw-r--r--obsolete/macros/latex/contrib/pzccal/README.txt104
-rw-r--r--obsolete/macros/latex/contrib/pzccal/pzccal-test.pdfbin0 -> 195752 bytes
-rw-r--r--obsolete/macros/latex/contrib/pzccal/pzccal-test.tex71
-rw-r--r--obsolete/macros/latex/contrib/pzccal/pzccal.sty116
-rw-r--r--obsolete/macros/latex/contrib/pzccal/pzccal.sty.html125
-rw-r--r--obsolete/macros/latex/contrib/revtex4-0/10pt.rtx163
-rw-r--r--obsolete/macros/latex/contrib/revtex4-0/11pt.rtx154
-rw-r--r--obsolete/macros/latex/contrib/revtex4-0/12pt.rtx154
-rw-r--r--obsolete/macros/latex/contrib/revtex4-0/DOWNLOAD75
-rw-r--r--obsolete/macros/latex/contrib/revtex4-0/README131
-rw-r--r--obsolete/macros/latex/contrib/revtex4-0/aps.rtx575
-rw-r--r--obsolete/macros/latex/contrib/revtex4-0/apsrev.bst2380
-rw-r--r--obsolete/macros/latex/contrib/revtex4-0/apsrmp.bst2359
-rw-r--r--obsolete/macros/latex/contrib/revtex4-0/docs/auguide.rty1
-rw-r--r--obsolete/macros/latex/contrib/revtex4-0/docs/auguide.tex1644
-rw-r--r--obsolete/macros/latex/contrib/revtex4-0/docs/differ.tex567
-rw-r--r--obsolete/macros/latex/contrib/revtex4-0/docs/docs.sty129
-rw-r--r--obsolete/macros/latex/contrib/revtex4-0/docs/summary.tex427
-rw-r--r--obsolete/macros/latex/contrib/revtex4-0/revsymb.sty157
-rw-r--r--obsolete/macros/latex/contrib/revtex4-0/revtex4.cls6020
-rw-r--r--obsolete/macros/latex/contrib/revtex4-0/rmp.rtx238
-rw-r--r--obsolete/macros/latex/contrib/revtex4-0/sample/apssamp.bib21
-rw-r--r--obsolete/macros/latex/contrib/revtex4-0/sample/apssamp.tex576
-rw-r--r--obsolete/macros/latex/contrib/revtex4-0/sample/fig_1.eps5
-rw-r--r--obsolete/macros/latex/contrib/revtex4-0/sample/fig_2.eps5
-rw-r--r--obsolete/macros/latex/contrib/revtex4-0/sample/template.aps176
-rw-r--r--obsolete/macros/latex/contrib/revtex4-0/src/ltxdocext.dtx1208
-rw-r--r--obsolete/macros/latex/contrib/revtex4-0/src/ltxdocext.pdfbin0 -> 58403 bytes
-rw-r--r--obsolete/macros/latex/contrib/revtex4-0/src/ltxgrid.dtx4815
-rw-r--r--obsolete/macros/latex/contrib/revtex4-0/src/ltxgrid.pdfbin0 -> 201241 bytes
-rw-r--r--obsolete/macros/latex/contrib/revtex4-0/src/ltxutil.dtx3534
-rw-r--r--obsolete/macros/latex/contrib/revtex4-0/src/ltxutil.pdfbin0 -> 246194 bytes
-rw-r--r--obsolete/macros/latex/contrib/revtex4-0/src/revtex4.dtx8728
-rw-r--r--obsolete/macros/latex/contrib/revtex4-0/src/revtex4.ins36
-rw-r--r--obsolete/macros/latex/contrib/revtex4-0/src/revtex4.pdf17354
-rw-r--r--obsolete/macros/latex/contrib/revtex4-0/src/textcase.dtx404
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/00readme.tex165
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/DOWNLOAD120
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/README212
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/bibtex/bst/revtex/aipauth4-1.bst3487
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/bibtex/bst/revtex/aipnum4-1.bst3477
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/bibtex/bst/revtex/apsrev4-1.bst3457
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/bibtex/bst/revtex/apsrmp4-1.bst3448
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/00readme.tex165
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/DOWNLOAD120
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/README212
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/aip/aipguide4-1.pdfbin0 -> 176321 bytes
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/aip/aipguide4-1.tex428
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/aip/docs.sty129
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/aps/apsguide4-1.pdfbin0 -> 135217 bytes
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/aps/apsguide4-1.tex429
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/auguide/auguide4-1.pdfbin0 -> 289085 bytes
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/auguide/auguide4-1.tex1737
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/auguide/docs.sty129
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/auguide/summary4-1.pdfbin0 -> 130853 bytes
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/auguide/summary4-1.tex370
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/auguide/whatsnew4-1.pdfbin0 -> 109132 bytes
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/auguide/whatsnew4-1.tex166
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aip/aipsamp.bib482
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aip/aipsamp.pdfbin0 -> 229288 bytes
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aip/aipsamp.tex613
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aip/aiptemplate.tex107
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aip/fig_1.eps5
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aip/fig_2.eps5
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aps/apssamp.bib484
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aps/apssamp.pdfbin0 -> 163288 bytes
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aps/apssamp.tex757
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aps/apstemplate.tex176
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aps/fig_1.eps5
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aps/fig_2.eps5
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aps/vid_1a.eps5
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aps/vid_1b.eps5
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/source/aip.pdfbin0 -> 403752 bytes
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/source/ltxdocext.pdfbin0 -> 178780 bytes
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/source/ltxfront.pdfbin0 -> 598984 bytes
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/source/ltxgrid.pdfbin0 -> 832819 bytes
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/source/ltxutil.pdfbin0 -> 610534 bytes
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/source/revtex4-1.pdf21270
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/source/latex/revtex/aip.dtx2062
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/source/latex/revtex/ltxdocext.dtx1257
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/source/latex/revtex/ltxfront.dtx3765
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/source/latex/revtex/ltxgrid.dtx6801
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/source/latex/revtex/ltxutil.dtx4326
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/source/latex/revtex/revtex4-1.dtx8297
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/aip4-1.rtx668
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/aps10pt4-1.rtx177
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/aps11pt4-1.rtx169
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/aps12pt4-1.rtx169
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/aps4-1.rtx641
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/apsrmp4-1.rtx274
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/ltxdocext.sty296
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/ltxfront.sty1163
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/ltxgrid.sty2722
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/ltxutil.sty2056
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/reftest4-1.tex205
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/revsymb4-1.sty158
-rw-r--r--obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/revtex4-1.cls7553
-rw-r--r--obsolete/macros/latex/contrib/rplain/rplain.dtx153
-rw-r--r--obsolete/macros/latex/contrib/rplain/rplain.ins40
-rw-r--r--obsolete/macros/latex/contrib/rplain/rplain.pdfbin0 -> 71662 bytes
-rw-r--r--obsolete/macros/latex/contrib/scratch/README21
-rw-r--r--obsolete/macros/latex/contrib/scratch/scratch-fr.pdfbin0 -> 497543 bytes
-rw-r--r--obsolete/macros/latex/contrib/scratch/scratch-fr.tex608
-rw-r--r--obsolete/macros/latex/contrib/scratch/scratch.sty616
-rw-r--r--obsolete/macros/latex/contrib/subfigure/Makefile123
-rw-r--r--obsolete/macros/latex/contrib/subfigure/README65
-rw-r--r--obsolete/macros/latex/contrib/subfigure/subfigure.dtx3940
-rw-r--r--obsolete/macros/latex/contrib/subfigure/subfigure.ins64
-rw-r--r--obsolete/macros/latex/contrib/subfigure/subfigure.pdfbin0 -> 384647 bytes
-rw-r--r--obsolete/macros/latex/contrib/subfigure/test.tex652
-rw-r--r--obsolete/macros/latex/contrib/subfigure/test2.tex95
-rw-r--r--obsolete/macros/latex/contrib/subfigure/test3.tex75
-rw-r--r--obsolete/macros/latex/contrib/subfigure/test4.tex45
-rw-r--r--obsolete/macros/latex/contrib/subfigure/test5.tex72
-rw-r--r--obsolete/macros/latex/contrib/switcheml/README4
-rw-r--r--obsolete/macros/latex/contrib/switcheml/switcheml.sty90
-rw-r--r--obsolete/macros/latex/contrib/texmate/README48
l---------obsolete/macros/latex/contrib/texmate/skak/mf1
-rw-r--r--obsolete/macros/latex/contrib/texmate/skak/skak.fd11
l---------obsolete/macros/latex/contrib/texmate/skak/special.map1
-rw-r--r--obsolete/macros/latex/contrib/texmate/skak/uskak.fd11
-rw-r--r--obsolete/macros/latex/contrib/texmate/texmate.dtx453
-rw-r--r--obsolete/macros/latex/contrib/texmate/texmate.ins21
-rw-r--r--obsolete/macros/latex/contrib/texmate/texmate.pdf1650
-rw-r--r--obsolete/macros/latex/contrib/texmate/texmatesample.pdf3242
-rw-r--r--obsolete/macros/latex/contrib/texmate/texmatesample.tex326
-rw-r--r--obsolete/macros/latex/contrib/vxu/README67
-rw-r--r--obsolete/macros/latex/contrib/vxu/actawex.dtx2259
-rw-r--r--obsolete/macros/latex/contrib/vxu/actawex.ins47
-rw-r--r--obsolete/macros/latex/contrib/vxu/actawex.pdfbin0 -> 466560 bytes
-rw-r--r--obsolete/macros/latex/contrib/vxu/rfmsi.dtx1086
-rw-r--r--obsolete/macros/latex/contrib/vxu/rfmsi.ins74
-rw-r--r--obsolete/macros/latex/contrib/vxu/rfmsi.pdfbin0 -> 414904 bytes
-rw-r--r--obsolete/macros/latex/contrib/vxu/vxulicentiate.cls383
-rw-r--r--obsolete/macros/latex/contrib/vxu/vxulicentiate.tex112
-rw-r--r--obsolete/macros/latex/contrib/vxu/vxusymbol.149
-rw-r--r--obsolete/macros/latex/contrib/vxu/vxutentamen.sty441
-rw-r--r--obsolete/macros/latex/contrib/vxu/vxutentamen.tex116
-rw-r--r--obsolete/macros/latex/contrib/xypdf/README29
-rw-r--r--obsolete/macros/latex/contrib/xypdf/xypdf.sty30
-rw-r--r--obsolete/macros/latex/exptl/si/README26
-rw-r--r--obsolete/macros/latex/exptl/si/si.dtx9274
-rw-r--r--obsolete/macros/latex/exptl/si/si.ins66
-rw-r--r--obsolete/macros/latex/exptl/si/si.pdfbin0 -> 751765 bytes
-rw-r--r--obsolete/macros/latex209/contrib/aaai/aaai-doc.tex384
-rw-r--r--obsolete/macros/latex209/contrib/aaai/aaai.sty135
-rw-r--r--obsolete/macros/latex209/contrib/aasmacros/Makefile96
-rw-r--r--obsolete/macros/latex209/contrib/aasmacros/README328
-rw-r--r--obsolete/macros/latex209/contrib/aasmacros/aasms.doc1152
-rw-r--r--obsolete/macros/latex209/contrib/aasmacros/aasms.sty416
-rw-r--r--obsolete/macros/latex209/contrib/aasmacros/aaspp.doc1153
-rw-r--r--obsolete/macros/latex209/contrib/aasmacros/aaspp.sty415
-rw-r--r--obsolete/macros/latex209/contrib/aasmacros/aaspptwo.doc1165
-rw-r--r--obsolete/macros/latex209/contrib/aasmacros/aaspptwo.sty398
-rw-r--r--obsolete/macros/latex209/contrib/aasmacros/aastex.tex1670
-rw-r--r--obsolete/macros/latex209/contrib/aasmacros/aj_pt.doc1172
-rw-r--r--obsolete/macros/latex209/contrib/aasmacros/aj_pt.sty409
-rw-r--r--obsolete/macros/latex209/contrib/aasmacros/apjpt.doc1166
-rw-r--r--obsolete/macros/latex209/contrib/aasmacros/apjpt.sty403
-rw-r--r--obsolete/macros/latex209/contrib/aasmacros/art8.doc369
-rw-r--r--obsolete/macros/latex209/contrib/aasmacros/art8.sty150
-rw-r--r--obsolete/macros/latex209/contrib/aasmacros/eqsecnum.sty16
-rw-r--r--obsolete/macros/latex209/contrib/aasmacros/flushrt.sty4
-rw-r--r--obsolete/macros/latex209/contrib/aasmacros/graphics.aux11
-rw-r--r--obsolete/macros/latex209/contrib/aasmacros/graphics.tex169
-rw-r--r--obsolete/macros/latex209/contrib/aasmacros/kspp.tex263
-rw-r--r--obsolete/macros/latex209/contrib/aasmacros/manual.tex798
-rw-r--r--obsolete/macros/latex209/contrib/aasmacros/mathsec.sty16
-rw-r--r--obsolete/macros/latex209/contrib/aasmacros/paper1.tex279
-rw-r--r--obsolete/macros/latex209/contrib/aasmacros/paper2.tex267
-rw-r--r--obsolete/macros/latex209/contrib/aasmacros/samp2tbl.tex138
-rw-r--r--obsolete/macros/latex209/contrib/aasmacros/sample1.tex54
-rw-r--r--obsolete/macros/latex209/contrib/aasmacros/sample2.aux37
-rw-r--r--obsolete/macros/latex209/contrib/aasmacros/sample2.tex503
-rw-r--r--obsolete/macros/latex209/contrib/aasmacros/samptbls.tex11
-rw-r--r--obsolete/macros/latex209/contrib/aasmacros/sgi9259.eps377
-rw-r--r--obsolete/macros/latex209/contrib/aasmacros/sgi9279.eps817
-rw-r--r--obsolete/macros/latex209/contrib/aasmacros/sgi9289.eps998
-rw-r--r--obsolete/macros/latex209/contrib/aasmacros/table1.tex299
-rw-r--r--obsolete/macros/latex209/contrib/aasmacros/table2.tex114
-rw-r--r--obsolete/macros/latex209/contrib/aasmacros/table3.tex106
-rw-r--r--obsolete/macros/latex209/contrib/aasmacros/tighten.sty15
-rw-r--r--obsolete/macros/latex209/contrib/aguplus/agu.bst1145
-rw-r--r--obsolete/macros/latex209/contrib/aguplus/agu2e.sty49
-rw-r--r--obsolete/macros/latex209/contrib/aguplus/aguplus.sty818
-rw-r--r--obsolete/macros/latex209/contrib/aguplus/aguplus.tex953
-rw-r--r--obsolete/macros/latex209/contrib/aguplus/changes.lis43
-rw-r--r--obsolete/macros/latex209/contrib/aguplus/readme.pwd64
-rw-r--r--obsolete/macros/latex209/contrib/aguplus/sample.bib51
-rw-r--r--obsolete/macros/latex209/contrib/aguplus/samplus.tex274
-rw-r--r--obsolete/macros/latex209/contrib/album/example.bum31
-rw-r--r--obsolete/macros/latex209/contrib/album/tapeman.tex243
-rw-r--r--obsolete/macros/latex209/contrib/bnf/bnf.README22
-rw-r--r--obsolete/macros/latex209/contrib/bnf/bnf.doc528
-rw-r--r--obsolete/macros/latex209/contrib/curves/curves.sty522
-rw-r--r--obsolete/macros/latex209/contrib/curves/curves.tex821
-rw-r--r--obsolete/macros/latex209/contrib/curves/curvesls.sty511
-rw-r--r--obsolete/macros/latex209/contrib/eclbip/eclbip.sty112
-rw-r--r--obsolete/macros/latex209/contrib/eclbip/eclbipsample.tex148
-rw-r--r--obsolete/macros/latex209/contrib/eclbip/ecltree.sty142
-rw-r--r--obsolete/macros/latex209/contrib/eclbip/ecltreesample.tex247
-rw-r--r--obsolete/macros/latex209/contrib/epsfig/README.unix43
-rw-r--r--obsolete/macros/latex209/contrib/epsfig/epsbb68
-rw-r--r--obsolete/macros/latex209/contrib/epsfig/epsfig62
-rw-r--r--obsolete/macros/latex209/contrib/epsfig/epsfig.2e1337
-rw-r--r--obsolete/macros/latex209/contrib/epsfig/epsfig.sty1137
-rw-r--r--obsolete/macros/latex209/contrib/epsfig/makefile28
-rw-r--r--obsolete/macros/latex209/contrib/exam/exam.sty759
-rw-r--r--obsolete/macros/latex209/contrib/exam/examdoc.dvibin0 -> 60052 bytes
-rw-r--r--obsolete/macros/latex209/contrib/exam/examdoc.tex1741
-rw-r--r--obsolete/macros/latex209/contrib/fac/fac.sty934
-rw-r--r--obsolete/macros/latex209/contrib/fac/facguide.tex836
-rw-r--r--obsolete/macros/latex209/contrib/lgraph/lgraph.p457
-rw-r--r--obsolete/macros/latex209/contrib/lgraph/lgraph.skel32
-rw-r--r--obsolete/macros/latex209/contrib/misc/10pt.sty7
-rw-r--r--obsolete/macros/latex209/contrib/misc/9pt.sty126
-rw-r--r--obsolete/macros/latex209/contrib/misc/a4wide.sty36
-rw-r--r--obsolete/macros/latex209/contrib/misc/a5.sty30
-rw-r--r--obsolete/macros/latex209/contrib/misc/algorithm.sty108
-rw-r--r--obsolete/macros/latex209/contrib/misc/alltt.sty32
-rw-r--r--obsolete/macros/latex209/contrib/misc/amsfonts.sty414
-rw-r--r--obsolete/macros/latex209/contrib/misc/amssymbols.sty292
-rw-r--r--obsolete/macros/latex209/contrib/misc/askinclude.sty96
-rw-r--r--obsolete/macros/latex209/contrib/misc/braille.sty49
-rw-r--r--obsolete/macros/latex209/contrib/misc/briefdoc.tex283
-rw-r--r--obsolete/macros/latex209/contrib/misc/captcont.sty16
-rw-r--r--obsolete/macros/latex209/contrib/misc/changebar.sty155
-rw-r--r--obsolete/macros/latex209/contrib/misc/chappg.sty15
-rw-r--r--obsolete/macros/latex209/contrib/misc/citesort.sty56
-rw-r--r--obsolete/macros/latex209/contrib/misc/doublespace.sty208
-rw-r--r--obsolete/macros/latex209/contrib/misc/endfloat.sty350
-rw-r--r--obsolete/macros/latex209/contrib/misc/endnote.sty34
-rw-r--r--obsolete/macros/latex209/contrib/misc/endnotes.sty325
-rw-r--r--obsolete/macros/latex209/contrib/misc/float.sty815
-rw-r--r--obsolete/macros/latex209/contrib/misc/fnpara.sty138
-rw-r--r--obsolete/macros/latex209/contrib/misc/index.doc1367
-rw-r--r--obsolete/macros/latex209/contrib/misc/nar.sty282
-rw-r--r--obsolete/macros/latex209/contrib/misc/natsci.sty61
-rw-r--r--obsolete/macros/latex209/contrib/misc/nofm.sty56
-rw-r--r--obsolete/macros/latex209/contrib/misc/preprint.sty149
-rw-r--r--obsolete/macros/latex209/contrib/misc/refman.sty502
-rw-r--r--obsolete/macros/latex209/contrib/misc/shadethm.sty187
-rw-r--r--obsolete/macros/latex209/contrib/misc/shadow.sty84
-rw-r--r--obsolete/macros/latex209/contrib/misc/showlabels.sty28
-rw-r--r--obsolete/macros/latex209/contrib/misc/spie.sty126
-rw-r--r--obsolete/macros/latex209/contrib/misc/subfigure.sty446
-rw-r--r--obsolete/macros/latex209/contrib/misc/texnames.sty13
-rw-r--r--obsolete/macros/latex209/contrib/misc/threepart.sty40
-rw-r--r--obsolete/macros/latex209/contrib/misc/twoup.sty20
-rw-r--r--obsolete/macros/latex209/contrib/misc/varioref.sty168
-rw-r--r--obsolete/macros/latex209/contrib/misc/xr.sty207
-rw-r--r--obsolete/macros/latex209/contrib/mitthesis/mitthesis-sample.tex135
-rw-r--r--obsolete/macros/latex209/contrib/mitthesis/mitthesis.sty186
-rw-r--r--obsolete/macros/latex209/contrib/ml/ascii.tcpbin0 -> 2624 bytes
-rw-r--r--obsolete/macros/latex209/contrib/ml/babel.com152
-rw-r--r--obsolete/macros/latex209/contrib/ml/babel.sty207
-rw-r--r--obsolete/macros/latex209/contrib/ml/babel.swi138
-rw-r--r--obsolete/macros/latex209/contrib/ml/cmcyr.sty277
-rw-r--r--obsolete/macros/latex209/contrib/ml/doc.sty741
-rw-r--r--obsolete/macros/latex209/contrib/ml/dutch.tex199
-rw-r--r--obsolete/macros/latex209/contrib/ml/english.tex174
-rw-r--r--obsolete/macros/latex209/contrib/ml/french.tex163
-rw-r--r--obsolete/macros/latex209/contrib/ml/german.tex222
-rw-r--r--obsolete/macros/latex209/contrib/ml/greek.tex205
-rw-r--r--obsolete/macros/latex209/contrib/ml/ibmkbd.sty315
-rw-r--r--obsolete/macros/latex209/contrib/ml/ipa.sty294
-rw-r--r--obsolete/macros/latex209/contrib/ml/logos.sty109
l---------obsolete/macros/latex209/contrib/ml/ltugboat.sty1
-rw-r--r--obsolete/macros/latex209/contrib/ml/minutes.sty181
-rw-r--r--obsolete/macros/latex209/contrib/ml/ml.bib454
-rw-r--r--obsolete/macros/latex209/contrib/ml/ml.doc970
-rw-r--r--obsolete/macros/latex209/contrib/ml/ml.sty496
-rw-r--r--obsolete/macros/latex209/contrib/ml/mldoc.tex52
-rw-r--r--obsolete/macros/latex209/contrib/ml/mlletter.sty570
-rw-r--r--obsolete/macros/latex209/contrib/ml/mlletter.tex33
-rw-r--r--obsolete/macros/latex209/contrib/ml/multicol.sty525
-rw-r--r--obsolete/macros/latex209/contrib/ml/newdoc.sty65
-rw-r--r--obsolete/macros/latex209/contrib/ml/places.sty63
-rw-r--r--obsolete/macros/latex209/contrib/ml/plainml.bst1272
-rw-r--r--obsolete/macros/latex209/contrib/ml/readme24
-rw-r--r--obsolete/macros/latex209/contrib/ml/rgreek.sty129
-rw-r--r--obsolete/macros/latex209/contrib/ml/rgreekma.tex151
-rw-r--r--obsolete/macros/latex209/contrib/ml/russian.tex176
-rw-r--r--obsolete/macros/latex209/contrib/ml/setspace.sty178
-rw-r--r--obsolete/macros/latex209/contrib/ml/swahili.tex219
l---------obsolete/macros/latex209/contrib/ml/tugboat.cmn1
-rw-r--r--obsolete/macros/latex209/contrib/mnras/README17
-rw-r--r--obsolete/macros/latex209/contrib/mnras/mn.sty1873
-rw-r--r--obsolete/macros/latex209/contrib/mnras/mnguide.tex1853
-rw-r--r--obsolete/macros/latex209/contrib/mnras/mnland.tex34
-rw-r--r--obsolete/macros/latex209/contrib/mnras/mnsample.tex743
-rw-r--r--obsolete/macros/latex209/contrib/multido/md-doc.dvibin0 -> 30332 bytes
-rw-r--r--obsolete/macros/latex209/contrib/multido/md-doc.tex459
-rw-r--r--obsolete/macros/latex209/contrib/multido/md-make.tex83
-rw-r--r--obsolete/macros/latex209/contrib/multido/md-read.me60
-rw-r--r--obsolete/macros/latex209/contrib/multido/multido.doc907
-rw-r--r--obsolete/macros/latex209/contrib/multido/multido.readme24
-rw-r--r--obsolete/macros/latex209/contrib/multido/multido.sty2
-rw-r--r--obsolete/macros/latex209/contrib/multido/multido.tex563
-rw-r--r--obsolete/macros/latex209/contrib/outline/outline.sty50
-rw-r--r--obsolete/macros/latex209/contrib/outline/outline.tex94
-rw-r--r--obsolete/macros/latex209/contrib/outline/outlineitems.sty51
-rw-r--r--obsolete/macros/latex209/contrib/resume/res-sample.tex83
-rw-r--r--obsolete/macros/latex209/contrib/resume/res-sample2.tex149
-rw-r--r--obsolete/macros/latex209/contrib/resume/res.sty781
-rw-r--r--obsolete/macros/latex209/contrib/resume/resume-sample.tex58
-rw-r--r--obsolete/macros/latex209/contrib/resume/resume.sty100
-rw-r--r--obsolete/macros/latex209/contrib/script/checkprt.tex104
-rw-r--r--obsolete/macros/latex209/contrib/script/dir.tex74
-rw-r--r--obsolete/macros/latex209/contrib/script/phone.tex31
-rw-r--r--obsolete/macros/latex209/contrib/script/script.dvibin0 -> 99792 bytes
-rw-r--r--obsolete/macros/latex209/contrib/script/script.sty673
-rw-r--r--obsolete/macros/latex209/contrib/script/script.tex1466
-rw-r--r--obsolete/macros/latex209/contrib/script/script10.sty39
-rw-r--r--obsolete/macros/latex209/contrib/script/script11.sty39
-rw-r--r--obsolete/macros/latex209/contrib/script/script12.sty39
-rw-r--r--obsolete/macros/latex209/contrib/script/script_l.sty514
-rw-r--r--obsolete/macros/latex209/contrib/script/script_s.sty602
-rw-r--r--obsolete/macros/latex209/contrib/script/sctitle.sty88
-rw-r--r--obsolete/macros/latex209/contrib/script/typearea.sty120
-rw-r--r--obsolete/macros/latex209/contrib/siam/fixup.sty167
-rw-r--r--obsolete/macros/latex209/contrib/siam/numinsec.sty16
-rw-r--r--obsolete/macros/latex209/contrib/siam/siam-doc.tex166
-rw-r--r--obsolete/macros/latex209/contrib/siam/siam.bib18
-rw-r--r--obsolete/macros/latex209/contrib/siam/siam.bst1035
-rw-r--r--obsolete/macros/latex209/contrib/siam/siam.sty340
-rw-r--r--obsolete/macros/latex209/contrib/siam/siam10.sty103
-rw-r--r--obsolete/macros/latex209/contrib/siam/siam11.sty104
-rw-r--r--obsolete/macros/latex209/contrib/siam/siam12.sty105
-rw-r--r--obsolete/macros/latex209/contrib/springer/jnsl/jns.sty801
-rw-r--r--obsolete/macros/latex209/contrib/springer/jnsl/jnsl.dem354
-rw-r--r--obsolete/macros/latex209/contrib/springer/jnsl/jnsl.doc1162
-rw-r--r--obsolete/macros/latex209/contrib/springer/jnsl/jnsldoc.sty39
-rw-r--r--obsolete/macros/latex209/contrib/springer/laa/laa.dem467
-rw-r--r--obsolete/macros/latex209/contrib/springer/laa/laa.doc1458
-rw-r--r--obsolete/macros/latex209/contrib/springer/laa/laa.sty855
-rw-r--r--obsolete/macros/latex209/contrib/springer/laa/laa.the364
-rw-r--r--obsolete/macros/latex209/contrib/springer/laa/laamt.sty996
-rw-r--r--obsolete/macros/latex209/contrib/springer/laa/read.me14
-rw-r--r--obsolete/macros/latex209/contrib/springer/ljour/amsfont.sty247
-rw-r--r--obsolete/macros/latex209/contrib/springer/ljour/amssymb.sty265
-rw-r--r--obsolete/macros/latex209/contrib/springer/ljour/cljour1.ini13
-rw-r--r--obsolete/macros/latex209/contrib/springer/ljour/flplain.tex20
-rw-r--r--obsolete/macros/latex209/contrib/springer/ljour/fontdef.tex1261
-rw-r--r--obsolete/macros/latex209/contrib/springer/ljour/linvmat.dem361
-rw-r--r--obsolete/macros/latex209/contrib/springer/ljour/ljour1.doc1791
-rw-r--r--obsolete/macros/latex209/contrib/springer/ljour/ljour1.mac1179
-rw-r--r--obsolete/macros/latex209/contrib/springer/ljour/ljour1.ref249
-rw-r--r--obsolete/macros/latex209/contrib/springer/ljour/lmatann.dem360
-rw-r--r--obsolete/macros/latex209/contrib/springer/ljour/lnummat.dem365
-rw-r--r--obsolete/macros/latex209/contrib/springer/ljour/pljour1.ini13
-rw-r--r--obsolete/macros/latex209/contrib/springer/ljour/preload.tex130
-rw-r--r--obsolete/macros/latex209/contrib/springer/ljour/read.me133
-rw-r--r--obsolete/macros/latex209/contrib/springer/ljour/xxxlfont.sty144
-rw-r--r--obsolete/macros/latex209/contrib/springer/llncs/llncs.dem434
-rw-r--r--obsolete/macros/latex209/contrib/springer/llncs/llncs.doc1117
-rw-r--r--obsolete/macros/latex209/contrib/springer/llncs/llncs.sty754
-rw-r--r--obsolete/macros/latex209/contrib/springer/llncs/llncsdoc.sty45
-rw-r--r--obsolete/macros/latex209/contrib/springer/llncs/read.me12
-rw-r--r--obsolete/macros/latex209/contrib/springer/lmamult/lmamudoc.sty34
-rw-r--r--obsolete/macros/latex209/contrib/springer/lmamult/lmamult.dem426
-rw-r--r--obsolete/macros/latex209/contrib/springer/lmamult/lmamult.doc1114
-rw-r--r--obsolete/macros/latex209/contrib/springer/lmamult/lmamult.sty775
-rw-r--r--obsolete/macros/latex209/contrib/springer/lmamult/read.me11
-rw-r--r--obsolete/macros/latex209/contrib/springer/mathsing/mathsing.dem651
-rw-r--r--obsolete/macros/latex209/contrib/springer/mathsing/mathsing.doc1145
-rw-r--r--obsolete/macros/latex209/contrib/springer/mathsing/mathsing.sty934
-rw-r--r--obsolete/macros/latex209/contrib/springer/mathsing/read.me45
-rw-r--r--obsolete/macros/latex209/contrib/springer/wics/wicread.me19
-rw-r--r--obsolete/macros/latex209/contrib/springer/wics/wicsadv.org97
-rw-r--r--obsolete/macros/latex209/contrib/springer/wics/wicsadv.tex107
-rw-r--r--obsolete/macros/latex209/contrib/springer/wics/wicsbook.org58
-rw-r--r--obsolete/macros/latex209/contrib/springer/wics/wicsbook.sty82
-rw-r--r--obsolete/macros/latex209/contrib/stmary/README10
l---------obsolete/macros/latex209/contrib/stmary/ltugboat.sty1
-rw-r--r--obsolete/macros/latex209/contrib/stmary/module.sty267
-rw-r--r--obsolete/macros/latex209/contrib/stmary/msam.sty285
-rw-r--r--obsolete/macros/latex209/contrib/stmary/msbm.sty253
-rw-r--r--obsolete/macros/latex209/contrib/stmary/stmaryrd.sty335
-rw-r--r--obsolete/macros/latex209/contrib/stmary/stmaryrd.tex701
l---------obsolete/macros/latex209/contrib/stmary/tugboat.cmn1
-rw-r--r--obsolete/macros/latex209/contrib/svlatex/svcon.sty412
-rw-r--r--obsolete/macros/latex209/contrib/svlatex/svlatex.doc186
-rw-r--r--obsolete/macros/latex209/contrib/svlatex/svmult.sty399
-rw-r--r--obsolete/macros/latex209/contrib/svlatex/svsing.sty346
-rw-r--r--obsolete/macros/latex209/contrib/tamueethesis/NOTE14
-rw-r--r--obsolete/macros/latex209/contrib/tamueethesis/READ.ME23
-rw-r--r--obsolete/macros/latex209/contrib/tamueethesis/abstract.tex47
-rw-r--r--obsolete/macros/latex209/contrib/tamueethesis/ack.tex8
-rw-r--r--obsolete/macros/latex209/contrib/tamueethesis/app.sty49
-rw-r--r--obsolete/macros/latex209/contrib/tamueethesis/append.tex6
-rw-r--r--obsolete/macros/latex209/contrib/tamueethesis/approve.tex9
-rw-r--r--obsolete/macros/latex209/contrib/tamueethesis/bib.tex17
-rw-r--r--obsolete/macros/latex209/contrib/tamueethesis/bibdata.bib113
-rw-r--r--obsolete/macros/latex209/contrib/tamueethesis/biblio.tex2
-rw-r--r--obsolete/macros/latex209/contrib/tamueethesis/ch1.tex117
-rw-r--r--obsolete/macros/latex209/contrib/tamueethesis/ch2.tex309
-rw-r--r--obsolete/macros/latex209/contrib/tamueethesis/ded.tex1
-rw-r--r--obsolete/macros/latex209/contrib/tamueethesis/eethe12.sty555
-rw-r--r--obsolete/macros/latex209/contrib/tamueethesis/eethesis.sty1338
-rw-r--r--obsolete/macros/latex209/contrib/tamueethesis/eethetitle.sty670
-rw-r--r--obsolete/macros/latex209/contrib/tamueethesis/file.c30
-rw-r--r--obsolete/macros/latex209/contrib/tamueethesis/lists.tex5
-rw-r--r--obsolete/macros/latex209/contrib/tamueethesis/manv4.ps3072
-rw-r--r--obsolete/macros/latex209/contrib/tamueethesis/manv4.tex1639
-rw-r--r--obsolete/macros/latex209/contrib/tamueethesis/subequation.sty224
-rw-r--r--obsolete/macros/latex209/contrib/tamueethesis/thesis.ps1625
-rw-r--r--obsolete/macros/latex209/contrib/tamueethesis/thesis.tex23
-rw-r--r--obsolete/macros/latex209/contrib/tamueethesis/title.tex6
-rw-r--r--obsolete/macros/latex209/contrib/tamueethesis/vita.tex5
-rw-r--r--obsolete/macros/latex209/contrib/vdm/.idx0
-rw-r--r--obsolete/macros/latex209/contrib/vdm/fnidx.idx0
-rw-r--r--obsolete/macros/latex209/contrib/vdm/moremath.ps550
-rw-r--r--obsolete/macros/latex209/contrib/vdm/pmmr.tfmbin0 -> 1648 bytes
-rw-r--r--obsolete/macros/latex209/contrib/vdm/typeidx.idx0
-rw-r--r--obsolete/macros/latex209/contrib/vdm/vdm.sty1413
-rw-r--r--obsolete/macros/latex209/contrib/vdm/vdm.tex1533
-rw-r--r--obsolete/macros/latex209/contrib/vdm/vdmindex17
-rw-r--r--obsolete/macros/latex209/contrib/vdm/vdmindex.sty78
-rw-r--r--obsolete/macros/luatex/generic/fontloader-luaotfload/README.md25
-rw-r--r--obsolete/macros/luatex/generic/fontloader-luaotfload/fontloader-2017-02-11-stix.lua21882
-rw-r--r--obsolete/macros/luatex/generic/fontloader-luaotfload/fontloader-luaotfload.pdfbin0 -> 62826 bytes
-rw-r--r--obsolete/macros/luatex/generic/fontloader-luaotfload/fontloader-luaotfload.tex164
-rw-r--r--obsolete/macros/luatex/generic/fontloader-luaotfload/fontloader-reference-2017-07-28.lua34685
-rw-r--r--obsolete/macros/luatex/generic/fontloader-luaotfload/fontloader-reference-2017-08-18.lua34366
-rw-r--r--obsolete/macros/luatex/generic/fontloader-luaotfload/luaotfload-letterspace.luax683
-rw-r--r--obsolete/macros/luatex/generic/fontloader-luaotfload/luaotfload.confx8
-rw-r--r--obsolete/macros/luatex/generic/fontloader-luaotfload/test-fontloader-2017-02-11-stix.pdfbin0 -> 9150 bytes
-rw-r--r--obsolete/macros/luatex/generic/fontloader-luaotfload/test-fontloader-2017-02-11-stix.tex15
-rw-r--r--obsolete/macros/luatex/generic/fontloader-luaotfload/test-fontloader-2017-07-28.pdfbin0 -> 24171 bytes
-rw-r--r--obsolete/macros/luatex/generic/fontloader-luaotfload/test-fontloader-2017-07-28.tex127
-rw-r--r--obsolete/macros/luatex/generic/fontloader-luaotfload/test-fontloader-2017-08-18.pdfbin0 -> 24463 bytes
-rw-r--r--obsolete/macros/luatex/generic/fontloader-luaotfload/test-fontloader-2017-08-18.tex26
-rw-r--r--obsolete/macros/musixtex/egler/systems/README.emx20
-rw-r--r--obsolete/macros/plain/contrib/fontch20/DSmac.tex5
-rw-r--r--obsolete/macros/plain/contrib/fontch20/README338
-rw-r--r--obsolete/macros/plain/contrib/fontch20/TS1mac.tex130
-rw-r--r--obsolete/macros/plain/contrib/fontch20/bsymbols.tex228
-rw-r--r--obsolete/macros/plain/contrib/fontch20/fontch.tex1201
-rw-r--r--obsolete/macros/plain/contrib/siam/READ.ME30
-rw-r--r--obsolete/macros/plain/contrib/siam/docuptex.tex361
-rw-r--r--obsolete/macros/plain/contrib/siam/pexample.tex523
-rw-r--r--obsolete/macros/plain/contrib/siam/siamptex.sty324
-rw-r--r--obsolete/macros/xetex/latex/xecolour/README16
-rw-r--r--obsolete/macros/xetex/latex/xecolour/doc/xecolour-user.pdfbin0 -> 94468 bytes
-rw-r--r--obsolete/macros/xetex/latex/xecolour/doc/xecolour-user.tex229
-rw-r--r--obsolete/macros/xetex/latex/xecolour/tex/xecolour.sty161
636 files changed, 426108 insertions, 0 deletions
diff --git a/obsolete/macros/context/contrib/context-fixme/tex/context/third/fixme/t-fixme.mkii b/obsolete/macros/context/contrib/context-fixme/tex/context/third/fixme/t-fixme.mkii
new file mode 100644
index 0000000000..4a3b898831
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-fixme/tex/context/third/fixme/t-fixme.mkii
@@ -0,0 +1,216 @@
+%D \module
+%D [ file=t-fixme,
+%D version=2013.03.03,
+%D title=\CONTEXT\ User Module,
+%D subtitle=FiXme,
+%D author=Wolfgang Schuster,
+%D date=\currentdate,
+%D copyright=Wolfgang Schuster,
+%D email=schuster.wolfgang@gmail.com,
+%D license=Public Domain]
+
+\writestatus{loading}{Context User Module / FiXme}
+
+\unprotect
+
+%D Logo
+
+\def\fixmelogo{{\ss FiXme}} \logo[FIXME]{\fixmelogo}
+
+\startinterface all
+ \setinterfaceconstant {version} {version}
+\stopinterface
+
+\startinterface all
+ \setinterfacevariable {fixme} {fixme}
+ \setinterfacevariable {fixmes} {fixmes}
+ \setinterfacevariable {fatal} {fatal}
+ \setinterfacevariable {note} {note}
+ \setinterfacevariable {warning} {warning}
+ \setinterfacevariable {error} {error}
+ \setinterfacevariable {total} {total}
+ \setinterfacevariable {draft} {draft}
+ \setinterfacevariable {fxnote} {fxnote}
+ \setinterfacevariable {fxwarning} {fxwarning}
+ \setinterfacevariable {fxerror} {fxerror}
+\stopinterface
+
+%D Messages
+
+\definemessageconstant {fixme}
+
+\startinterface all
+ \setinterfacemessage{fixme}{title}{FiXme}
+ \setinterfacemessage{fixme}{1} {Number of notes: --}
+ \setinterfacemessage{fixme}{2} {Number of warnings: --}
+ \setinterfacemessage{fixme}{3} {Number of errors: --}
+ \setinterfacemessage{fixme}{4} {Number of fatal errors: --}
+ \setinterfacemessage{fixme}{5} {Total: --}
+\stopinterface
+
+%D \macros
+%D {setupfixme}
+%D
+%D Namespace and setup command
+
+\def\????fx{@@@@fx} % FiXme
+
+\def\fixmeparameter#1{\csname\????fx\currentfixme#1\endcsname}
+
+\def\setupfixme
+ {\dodoubleempty\dosetupfixme}
+
+\def\dosetupfixme[#1][#2]%
+ {\ifsecondargument
+ \dodoubleargumentwithset\dodosetupfixme[#1][#2]%
+ \else
+ \dodosetupfixme[][#1]%
+ \fi}
+
+\def\dodosetupfixme[#1][#2]%
+ {\edef\currentfixme{#1}%
+ \getparameters[\????fx\currentfixme][#2]}
+
+%D Lists
+
+\definelist[\v!fixme][\c!width=\zeropoint]
+
+\setvalue{\e!place \e!listof\v!fixmes}{\placelist [\v!fixme]}
+\setvalue{\e!complete\e!listof\v!fixmes}{\completelist[\v!fixme]}
+
+%D \macros
+%D {fixme,fxnote,fxwarning,fxerror,
+%D definefixme,definefixmelocation}
+%D
+%D Commands
+
+\makecounter{\????fx\v!note } % \pluscounter is not so
+\makecounter{\????fx\v!warning} % clever as \increment
+\makecounter{\????fx\v!error } % and I have to define
+\makecounter{\????fx\v!fatal } % the counters before
+\makecounter{\????fx\v!total } % I can use them
+
+\def\dofixme[#1][#2]#3%
+ {\removeunwantedspaces
+ \bgroup
+ \setupfixme[#1][\c!location={#2}]
+ \expanded{\writetolist[\v!fixme]{}{\labeltext{fixme\fixmeparameter\c!type}#3}}%
+ \pluscounter{\????fx\v!total }%
+ \pluscounter{\????fx\fixmeparameter\c!type}%
+ \doif{\fixmeparameter\c!version}\v!draft
+ {\processcommacommand[\fixmeparameter\c!location]{\expanded{\dofixmelocation{\fixmeparameter\c!type}}{#3}}}%
+ \egroup}
+
+\def\dofixmelocation#1#2#3{\executeifdefined{@@fixme@@#3}\gobbleoneargument{\labeltext{fixme#1}#2}}
+
+\def\definefixmelocation
+ {\dodoubleargument\dodefinefixmelocation}
+
+\def\dodefinefixmelocation[#1][#2]%
+ {\setvalue{@@fixme@@#1}{#2}}
+
+\definefixmelocation [\v!text ] [\ifhmode\normalspace\fi]
+\definefixmelocation [\v!margin ] [\inright ]
+\definefixmelocation [\v!footnote] [\footnote ]
+\definefixmelocation [\v!left ] [\inleft ]
+\definefixmelocation [\v!right ] [\inright ]
+\definefixmelocation [\v!inner ] [\ininner ]
+\definefixmelocation [\v!outer ] [\inouter ]
+
+\def\dostartfixme[#1][#2]%
+ {\bgroup
+ \setupfixme[#1][\c!list=,#2]%
+ \doifelse{\fixmeparameter\c!version}\v!draft
+ {\doifsomething{\fixmeparameter\c!list}{\expanded{\writetolist[\v!fixme]{}{\labeltext{fixme\fixmeparameter\c!type}\fixmeparameter\c!list}}}%
+ \pluscounter{\????fx\v!total }%
+ \pluscounter{\????fx\fixmeparameter\c!type}%
+ \fixmeparameter\c!before}
+ {\egroup\@EA\gobbleuntil\csname\e!stop#1\endcsname}}
+
+\def\dostopfixme
+ {\fixmeparameter\c!after
+ \egroup}
+
+\def\definefixme
+ {\dodoubleargument\dodefinefixme}
+
+\def\dodefinefixme[#1][#2]%
+ {\getparameters
+ [\????fx#1]
+ [\c!before=\@@@@fxbefore,
+ \c!after=\@@@@fxafter,
+ \c!location=\@@@@fxlocation,
+ \c!version=\@@@@fxversion,
+ \c!type=\v!fatal,
+ #2]%
+ \setvalue {#1}{\dodoubleempty\dofixme [#1]}%
+ \setvalue{\e!start#1}{\dodoubleempty\dostartfixme[#1]}%
+ \setvalue{\e!stop #1}{\dostopfixme}}
+
+\definefixme [\v!fixme ] [\c!type=\v!fatal ]
+\definefixme [\v!fxnote ] [\c!type=\v!note ]
+\definefixme [\v!fxwarning] [\c!type=\v!warning]
+\definefixme [\v!fxerror ] [\c!type=\v!error ]
+
+\appendtoks
+ \showmessage\m!fixme{1}{\countervalue{\????fx\v!note }}%
+ \showmessage\m!fixme{2}{\countervalue{\????fx\v!warning}}%
+ \showmessage\m!fixme{3}{\countervalue{\????fx\v!error }}%
+ \showmessage\m!fixme{4}{\countervalue{\????fx\v!fatal }}%
+ \showmessage\m!fixme{5}{\countervalue{\????fx\v!total }}%
+\to \everynotabene
+
+%D Labels
+
+\setupheadtext[\s!en][fixme=List of Corrections]
+\setupheadtext[\s!de][fixme=Verzeichnis der Korrekturen]
+\setupheadtext[\s!fr][fixme=Liste des Corrections]
+\setupheadtext[\s!it][fixme=Corrigenda]
+\setupheadtext[\s!es][fixme=Lista de Correcciones]
+\setupheadtext[\s!da][fixme=Rettelser]
+\setupheadtext[\s!hr][fixme=Popis korekcija]
+
+\setuplabeltext[\s!en][fixmenote=\fixmelogo~Note: ]
+\setuplabeltext[\s!en][fixmewarning=\fixmelogo~Warning: ]
+\setuplabeltext[\s!en][fixmeerror=\fixmelogo~Error: ]
+\setuplabeltext[\s!en][fixmefatal=\fixmelogo: ]
+
+\setuplabeltext[\s!de][fixmenote=\fixmelogo~Anm.: ]
+\setuplabeltext[\s!de][fixmewarning=\fixmelogo~Warnung: ]
+\setuplabeltext[\s!de][fixmeerror=\fixmelogo~Fehler: ]
+\setuplabeltext[\s!de][fixmefatal=\fixmelogo]
+
+\setuplabeltext[\s!fr][fixmenote=\fixmelogo~Note: ]
+\setuplabeltext[\s!fr][fixmewarning=\fixmelogo~Attention: ]
+\setuplabeltext[\s!fr][fixmeerror=\fixmelogo~Erreur: ]
+\setuplabeltext[\s!fr][fixmefatal=\fixmelogo: ]
+
+\setuplabeltext[\s!it][fixmenote=\fixmelogo~Nota: ]
+\setuplabeltext[\s!it][fixmewarning=\fixmelogo~Avviso: ]
+\setuplabeltext[\s!it][fixmeerror=\fixmelogo~Errore: ]
+\setuplabeltext[\s!it][fixmefatal=\fixmelogo: ]
+
+\setuplabeltext[\s!es][fixmenote=\fixmelogo~Nota: ]
+\setuplabeltext[\s!es][fixmewarning=\fixmelogo~Aviso: ]
+\setuplabeltext[\s!es][fixmeerror=\fixmelogo~Error: ]
+\setuplabeltext[\s!es][fixmefatal=\fixmelogo: ]
+
+\setuplabeltext[\s!da][fixmenote=\fixmelogo~Note: ]
+\setuplabeltext[\s!da][fixmewarning=\fixmelogo~Advarsel: ]
+\setuplabeltext[\s!da][fixmeerror=\fixmelogo~Fejl: ]
+\setuplabeltext[\s!da][fixmefatal=\fixmelogo: ]
+
+\setuplabeltext[\s!hr][fixmenote=\fixmelogo~Poruka: ]
+\setuplabeltext[\s!hr][fixmewarning=\fixmelogo~Upozorenje: ]
+\setuplabeltext[\s!hr][fixmeerror=\fixmelogo~Gre\scaron ska: ]
+\setuplabeltext[\s!hr][fixmefatal=\fixmelogo: ]
+
+%D Defaults
+
+\setupfixme
+ [\c!before=\startquotation,
+ \c!after=\stopquotation,
+ \c!location=\v!margin,
+ \c!version=\v!draft]
+
+\protect \endinput
diff --git a/obsolete/macros/context/contrib/context-fixme/tex/context/third/fixme/t-fixme.mkiv b/obsolete/macros/context/contrib/context-fixme/tex/context/third/fixme/t-fixme.mkiv
new file mode 100644
index 0000000000..f770846ab6
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-fixme/tex/context/third/fixme/t-fixme.mkiv
@@ -0,0 +1,263 @@
+%D \module
+%D [ file=t-fixme,
+%D version=2013.03.03,
+%D title=\CONTEXT\ User Module,
+%D subtitle=FiXme,
+%D author=Wolfgang Schuster,
+%D date=\currentdate,
+%D copyright=Wolfgang Schuster,
+%D email=schuster.wolfgang@gmail.com,
+%D license=Public Domain]
+
+\writestatus{loading}{Context User Module / FiXme}
+
+\unprotect
+
+%D Logo
+
+\def\fixmelogo{{\ss FiXme}} \logo[FIXME]{\fixmelogo}
+
+\startinterface all
+ \setinterfaceconstant {version} {version}
+\stopinterface
+
+\startinterface all
+ \setinterfacevariable {fixme} {fixme}
+ \setinterfacevariable {fixmes} {fixmes}
+ \setinterfacevariable {fatal} {fatal}
+ \setinterfacevariable {note} {note}
+ \setinterfacevariable {warning} {warning}
+ \setinterfacevariable {error} {error}
+ \setinterfacevariable {total} {total}
+ \setinterfacevariable {draft} {draft}
+ \setinterfacevariable {fxnote} {fxnote}
+ \setinterfacevariable {fxwarning} {fxwarning}
+ \setinterfacevariable {fxerror} {fxerror}
+\stopinterface
+
+%D Messages
+
+\definemessageconstant {fixme}
+
+\startinterface all
+ \setinterfacemessage{fixme}{title}{FiXme}
+ \setinterfacemessage{fixme}{1} {Number of notes: --}
+ \setinterfacemessage{fixme}{2} {Number of warnings: --}
+ \setinterfacemessage{fixme}{3} {Number of errors: --}
+ \setinterfacemessage{fixme}{4} {Number of fatal errors: --}
+ \setinterfacemessage{fixme}{5} {Total: --}
+\stopinterface
+
+%D \macros
+%D {setupfixme}
+%D
+%D Namespace and setup command
+
+\installnamespace {fixme}
+\installnamespace {fixmecounter}
+\installnamespace {fixmelocation}
+\installnamespace {fixmerenderings}
+
+\installcommandhandler \????fixme {fixme} \????fixme
+\installcommandhandler \????fixmelocation {fixmelocation} \????fixmelocation
+
+%D \starttyping
+%D \def\setupfixme
+%D {\dosingleargument\dosetupfixme}
+%D
+%D \def\dosetupfixme[#1]%
+%D {\doifassignmentelse{#1}
+%D {\getparameters[\????fx][#1]}
+%D {\setvalue{\????fx\c!version}{#1}}}
+%D \stoptyping
+
+%D Lists
+
+\definelist[\v!fixme][\c!width=\zeropoint]
+
+\setvalue{\e!place \e!listof\v!fixmes}{\placelist [\v!fixme]}
+\setvalue{\e!complete\e!listof\v!fixmes}{\completelist[\v!fixme][\v!fixmes]}
+
+%D \macros
+%D {fixme,fxnote,fxwarning,fxerror,
+%D definefixme,definefixmelocation}
+%D
+%D Commands
+
+\appendtoks
+ \setuevalue {\currentfixme}{\fixme_direct{\currentfixme}}%
+ \setuevalue{\e!start\currentfixme}{\fixme_start {\currentfixme}}%
+ \setuevalue{\e!stop \currentfixme}{\fixme_stop }%
+\to \everydefinefixme
+
+\definecounter[\????fixmecounter\v!note ]
+\definecounter[\????fixmecounter\v!warning]
+\definecounter[\????fixmecounter\v!error ]
+\definecounter[\????fixmecounter\v!fatal ]
+\definecounter[\????fixmecounter\v!total ]
+
+\unexpanded\def\fixme_direct#1%
+ {\edef\currentfixme{#1}%
+ \dosingleempty\fixme_direct_indeed}
+
+\def\fixme_direct_indeed[#1]#2%
+ {\removeunwantedspaces
+ \begingroup
+ \setupcurrentfixme[\c!location={#1},\c!text={#2}]%
+ \edef\p_fixme_version {\fixmeparameter\c!version }%
+ \edef\p_fixme_type {\fixmeparameter\c!type }%
+ \edef\p_fixme_location{\fixmeparameter\c!location}%
+ \edef\p_fixme_text {\fixmeparameter\c!text }%
+ \ifx\p_fixme_location\empty
+ \let\p_fixme_location\v!margin
+ \fi
+ \ifx\p_fixme_version\v!draft
+ \normalexpanded{\writetolist[\v!fixme]{}{\fixmetext{\p_fixme_type}\p_fixme_text}}%
+ \incrementcounter[\????fixmecounter\v!total ]%
+ \incrementcounter[\????fixmecounter\p_fixme_type]%
+ \processcommacommand[\p_fixme_location]\fixme_location
+ \fi
+ \endgroup}
+
+\def\fixme_location#1%
+ {\edef\currentfixmelocation{#1}%
+ \ifcsname\currentfixmelocationhash\s!parent\endcsname \else
+ \let\currentfixmelocation\v!margin
+ \fi
+ \edef\p_fixme_renderingsetup{\fixmelocationparameter\c!renderingsetup}%
+ \texsetup\p_fixme_renderingsetup}
+
+\unexpanded\def\fixme_start#1%
+ {\begingroup
+ \edef\currentfixme{#1}%
+ \dosingleempty\fixme_start_indeed}
+
+\def\fixme_start_indeed[#1]%
+ {\iffirstargument
+ \setupcurrentfixme[#1]%
+ \fi
+ \grabbufferdatadirect\v!fixme{\e!start\currentfixme}{\e!stop\currentfixme}}
+
+\unexpanded\def\fixme_stop
+ {\edef\p_fixme_version{\fixmeparameter\c!version}%
+ \edef\p_fixme_list {\fixmeparameter\c!list }%
+ \edef\p_fixme_type {\fixmeparameter\c!type }%
+ \ifx\p_fixme_version\v!draft
+ \ifx\p_fixme_list\empty \else
+ \normalexpanded{\writetolist[\v!fixme]{}{\fixmetext\p_fixme_type\p_fixme_list}}%
+ \fi
+ \incrementcounter[\????fixmecounter\v!total ]%
+ \incrementcounter[\????fixmecounter\p_fixme_type]%
+ \fixmeparameter\c!before
+ \getbufferdata[\v!fixme]%
+ \fixmeparameter\c!after
+ \fi
+ \endgroup}
+
+\definefixmelocation [\v!text] [\c!renderingsetup=\????fixmerenderings:\v!text]
+
+\startsetups[\????fixmerenderings:\v!text]
+ \ifhmode\normalspace\fi
+ \fixmetext\p_fixme_type
+ \p_fixme_text
+\stopsetups
+
+\definefixmelocation [\v!command] [\c!renderingsetup=\????fixmerenderings:\v!command]
+\definefixmelocation [\v!margin] [\v!command] [\c!command=\inright]
+\definefixmelocation [\v!footnote] [\v!command] [\c!command=\footnote]
+\definefixmelocation [\v!left] [\v!command] [\c!command=\inleft]
+\definefixmelocation [\v!right] [\v!command] [\c!command=\inright]
+\definefixmelocation [\v!inner] [\v!command] [\c!command=\ininner]
+\definefixmelocation [\v!outer] [\v!command] [\c!command=\inouter]
+
+\startsetups[\????fixmerenderings:\v!command]
+ \edef\p_fixme_command{\fixmelocationparameter\c!command}%
+ \normalexpanded{\p_fixme_command{\fixmetext{\p_fixme_type}\p_fixme_text}}
+\stopsetups
+
+\definefixmelocation [\v!none] [\c!renderingsetup=\????fixmerenderings:\v!none]
+
+\startsetups[\????fixmerenderings:\v!none]
+ % EMPTY
+\stopsetups
+
+%D \starttyping
+%D \def\definefixme
+%D {\dodoubleargument\dodefinefixme}
+%D
+%D \def\dodefinefixme[#1][#2]%
+%D {\setvalue {#1}{\dodoubleempty\dofixme [#2]}%
+%D \setvalue{\e!start#1}{\dodoubleempty\dostartfixme[#2]}%
+%D \setvalue{\e!stop #1}{\dostopfixme}}
+%D \stoptyping
+
+\appendtoks
+ \showmessage\m!fixme{1}{\rawcountervalue[\????fixmecounter\v!note ]}%
+ \showmessage\m!fixme{2}{\rawcountervalue[\????fixmecounter\v!warning]}%
+ \showmessage\m!fixme{3}{\rawcountervalue[\????fixmecounter\v!error ]}%
+ \showmessage\m!fixme{4}{\rawcountervalue[\????fixmecounter\v!fatal ]}%
+ \showmessage\m!fixme{5}{\rawcountervalue[\????fixmecounter\v!total ]}%
+\to \everynotabene
+
+% Labels
+
+\definelabelclass[fixme]
+
+\setupheadtext [\s!en] [\v!fixme=List of Corrections]
+\setupheadtext [\s!de] [\v!fixme=Verzeichnis der Korrekturen]
+\setupheadtext [\s!fr] [\v!fixme=Liste des Corrections]
+\setupheadtext [\s!it] [\v!fixme=Corrigenda]
+\setupheadtext [\s!es] [\v!fixme=Lista de Correcciones]
+\setupheadtext [\s!da] [\v!fixme=Rettelser]
+\setupheadtext [\s!hr] [\v!fixme=Popis korekcija]
+
+\setupfixmetext [\s!en] [\v!note=\fixmelogo~Note: ]
+\setupfixmetext [\s!en] [\v!warning=\fixmelogo~Warning: ]
+\setupfixmetext [\s!en] [\v!error=\fixmelogo~Error: ]
+\setupfixmetext [\s!en] [\v!fatal=\fixmelogo: ]
+
+\setupfixmetext [\s!de] [\v!note=\fixmelogo~Anm.: ]
+\setupfixmetext [\s!de] [\v!warning=\fixmelogo~Warnung: ]
+\setupfixmetext [\s!de] [\v!error=\fixmelogo~Fehler: ]
+\setupfixmetext [\s!de] [\v!fatal=\fixmelogo]
+
+\setupfixmetext [\s!fr] [\v!note=\fixmelogo~Note: ]
+\setupfixmetext [\s!fr] [\v!warning=\fixmelogo~Attention: ]
+\setupfixmetext [\s!fr] [\v!error=\fixmelogo~Erreur: ]
+\setupfixmetext [\s!fr] [\v!fatal=\fixmelogo: ]
+
+\setupfixmetext [\s!it] [\v!note=\fixmelogo~Nota: ]
+\setupfixmetext [\s!it] [\v!warning=\fixmelogo~Avviso: ]
+\setupfixmetext [\s!it] [\v!error=\fixmelogo~Errore: ]
+\setupfixmetext [\s!it] [\v!fatal=\fixmelogo: ]
+
+\setupfixmetext [\s!es] [\v!note=\fixmelogo~Nota: ]
+\setupfixmetext [\s!es] [\v!warning=\fixmelogo~Aviso: ]
+\setupfixmetext [\s!es] [\v!error=\fixmelogo~Error: ]
+\setupfixmetext [\s!es] [\v!fatal=\fixmelogo: ]
+
+\setupfixmetext [\s!da] [\v!note=\fixmelogo~Note: ]
+\setupfixmetext [\s!da] [\v!warning=\fixmelogo~Advarsel: ]
+\setupfixmetext [\s!da] [\v!error=\fixmelogo~Fejl: ]
+\setupfixmetext [\s!da] [\v!fatal=\fixmelogo: ]
+
+\setupfixmetext [\s!hr] [\v!note=\fixmelogo~Poruka: ]
+\setupfixmetext [\s!hr] [\v!warning=\fixmelogo~Upozorenje: ]
+\setupfixmetext [\s!hr] [\v!error=\fixmelogo~Gre\scaron ska: ]
+\setupfixmetext [\s!hr] [\v!fatal=\fixmelogo: ]
+
+% Default commands and settings
+
+\definefixme [\v!fixme ] [\c!type=\v!fatal ]
+\definefixme [\v!fxnote ] [\c!type=\v!note ]
+\definefixme [\v!fxwarning] [\c!type=\v!warning]
+\definefixme [\v!fxerror ] [\c!type=\v!error ]
+
+\setupfixme
+ [ \c!before=\startquotation,
+ \c!after=\stopquotation,
+ \c!location=\v!margin,
+ \c!version=\v!draft,
+ \c!type=\v!fatal]
+
+\protect \endinput
diff --git a/obsolete/macros/context/contrib/context-games/doc/context/third/games/README b/obsolete/macros/context/contrib/context-games/doc/context/third/games/README
new file mode 100644
index 0000000000..b96a6e8966
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-games/doc/context/third/games/README
@@ -0,0 +1,26 @@
+Games Module for ConTeXt
+
+
+Introduction
+------------
+
+The games module provides the function to create static and interactive versions
+of board games. The first release has support for Go and Hex, more games follow
+in later releases.
+
+To use the module write \usemodule[games] in the preamble of your document.
+
+The module works only with MkIV (LuaTeX), it is not planned to add MkII support.
+
+
+License
+-------
+
+The module is copyrighted by Wolfgang Schuster and published under Public Domain.
+
+
+Revision History
+----------------
+
+2009-01-08
+Initial release \ No newline at end of file
diff --git a/obsolete/macros/context/contrib/context-games/doc/context/third/games/games-doc.pdf b/obsolete/macros/context/contrib/context-games/doc/context/third/games/games-doc.pdf
new file mode 100644
index 0000000000..000c874596
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-games/doc/context/third/games/games-doc.pdf
Binary files differ
diff --git a/obsolete/macros/context/contrib/context-games/tex/context/third/games/games-go.lua b/obsolete/macros/context/contrib/context-games/tex/context/third/games/games-go.lua
new file mode 100644
index 0000000000..fdf2c09bc3
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-games/tex/context/third/games/games-go.lua
@@ -0,0 +1,537 @@
+if not modules then modules = { } end modules ['games-go'] = {
+ version = 1.000,
+ comment = "Go",
+ author = "Wolfgang Schuster",
+ copyright = "Wolfgang Schuster",
+ email = "schuster.wolfgang@googlemail.com",
+ license = "Public Domain"
+}
+
+do
+
+thirddata = thirddata or { }
+thirddata.games = thirddata.games or { }
+thirddata.games.go = thirddata.games.go or { }
+thirddata.games.go.field = thirddata.games.go.field or { }
+thirddata.games.go.setup = thirddata.games.go.setup or { }
+thirddata.games.go.deadstone = thirddata.games.go.deadstone or { }
+
+local nx = function() return thirddata.games.go.setup.nx end
+local ny = function() return thirddata.games.go.setup.ny end
+local dx = function() return thirddata.games.go.setup.dx end
+local dy = function() return thirddata.games.go.setup.dy end
+local offset = function() return thirddata.games.go.setup.offset end
+local size = function() return thirddata.games.go.setup.stonesize end
+local board = function() return thirddata.games.go.setup.board end
+local distance = function() return thirddata.games.go.setup.labeldistance end
+local symbolset = function() return thirddata.games.go.setup.symbolset end
+local alternative = function() return thirddata.games.go.setup.alternative end
+local bp = function(value) return number.tobasepoints(value) end
+local sp = function(value) return value * 65536/(7227/7200) end
+local line = function(k,v,s) return bp(thirddata.games.go.lines [k][v]*s) end
+local arrow = function(k,v,s) return bp(thirddata.games.go.arrows[k][v]*s) end
+
+-- Drawing functions
+
+thirddata.games.go.lastcolor = 0
+thirddata.games.go.currentmove = 0
+
+function thirddata.games.go.move(color)
+ thirddata.games.go.lastcolor = color
+ thirddata.games.go.currentmove = thirddata.games.go.currentmove + 1
+end
+
+thirddata.games.go.linecount = 0
+thirddata.games.go.lines = { }
+
+function thirddata.games.go.line(x1,y1,x2,y2)
+ thirddata.games.go.linecount = thirddata.games.go.linecount + 1
+ thirddata.games.go.lines[thirddata.games.go.linecount] = { x1, y1, x2, y2 }
+end
+
+thirddata.games.go.arrowcount = 0
+thirddata.games.go.arrows = { }
+
+function thirddata.games.go.arrow(x1,y1,x2,y2)
+ thirddata.games.go.arrowcount = thirddata.games.go.arrowcount + 1
+ thirddata.games.go.arrows[thirddata.games.go.arrowcount] = { x1, y1, x2, y2 }
+end
+
+function thirddata.games.go.board_color()
+ if thirddata.games.go.setup['backgroundcolor'] ~= nil then
+ tex.sprint("board := currentpicture ;")
+ tex.sprint("currentpicture := nullpicture ;")
+ tex.sprint("fill unitsquare xyscaled (" .. bp((nx()-1)*dx()+2*offset()) .. "," .. bp((ny()-1)*dy()+2*offset()) .. ")")
+ tex.sprint("shifted (" .. bp(-offset()) .. "," .. bp(-offset()) .. ")")
+ tex.sprint("withcolor \\MPcolor{" .. thirddata.games.go.setup['backgroundcolor'] .. "} ;")
+ tex.sprint("addto currentpicture also board ;")
+ end
+end
+
+thirddata.games.go.setup.figurewidth = 0
+thirddata.games.go.setup.figureheight = 0
+
+function thirddata.games.go.board_figure()
+ local width = thirddata.games.go.setup.figurewidth
+ local height = thirddata.games.go.setup.figureheight
+ local columns = math.floor( ((nx()-1)*dx()+2*offset()) / width ) -- floor and not ceil because
+ local rows = math.floor( ((ny()-1)*dy()+2*offset()) / height ) -- I start from 0 and not 1
+ if thirddata.games.go.setup['backgroundimage'] ~= nil then
+ tex.sprint("board := currentpicture ;")
+ tex.sprint("currentpicture := nullpicture ;")
+ for row=0,rows do
+ for col=0,columns do
+ tex.sprint('externalfigure "' .. thirddata.games.go.setup['backgroundimage'] .. '"')
+ tex.sprint('xyscaled (' .. bp(width) .. ',' .. bp(height) .. ')')
+ tex.sprint('shifted (' .. bp(-offset()+row*width) .. ',' .. bp(-offset()+col*height) .. ') ;')
+ end
+ end
+ tex.sprint("mine := unitsquare xyscaled (" .. bp((nx()-1)*dx()+2*offset()) .. "," .. bp((ny()-1)*dy()+2*offset()) .. ")")
+ tex.sprint(" shifted (" .. bp(-offset()) .. "," .. bp(-offset()) .. ") ;")
+ tex.sprint("clip currentpicture to mine ;")
+ tex.sprint("addto currentpicture also board ;")
+ end
+end
+
+function thirddata.games.go.board_new()
+ local xy = 0
+ thirddata.games.go.field[0] = { }
+ for col=0,nx()+1 do
+ thirddata.games.go.field[0][col] = { }
+ for row=0,ny()+1 do
+ if col==0 then
+ xy = 3
+ elseif col==nx()+1 then
+ xy = 3
+ elseif row==0 then
+ xy = 3
+ elseif row==ny()+1 then
+ xy = 3
+ else
+ xy = 0
+ end
+ thirddata.games.go.field[0][col][row] = { color = xy, marker = nil, label = nil, move = nil }
+ end
+ end
+end
+
+function thirddata.games.go.board_copy(from,to)
+ thirddata.games.go.field[to] = { }
+ for k,v in pairs(thirddata.games.go.field[from]) do
+ thirddata.games.go.field[to][k] = { }
+ for x,y in pairs(thirddata.games.go.field[from][k]) do
+ thirddata.games.go.field[to][k][x] = { }
+ for a,b in pairs(thirddata.games.go.field[from][k][x]) do
+ thirddata.games.go.field[to][k][x][a] = thirddata.games.go.field[from][k][x][a]
+ end
+ end
+ end
+end
+
+function thirddata.games.go.board_lines_solid()
+ for col=1,nx() do
+ tex.sprint("draw (" .. bp((col-1)*dx()) .. ",0) -- (" .. bp((col-1)*dx()) .. "," .. bp((ny()-1)*dy()) .. ") ;")
+ end
+ for row=1,ny() do
+ tex.sprint("draw (0," .. bp((row-1)*dy()) .. ") -- (" .. bp((nx()-1)*dx()) .. "," .. bp((row-1)*dy()) .. ") ;")
+ end
+end
+
+function thirddata.games.go.board_lines_gap()
+ -- draw horizontal rules
+ for row=2,ny()-1 do
+ for col=1,nx()-1 do
+ if thirddata.games.go.field[0][col][row]['color'] == 0 then
+ tex.sprint("draw (" .. bp((col-1)*dx()) .. "," .. bp((row-1)*dy()) .. ") -- (" .. bp((col)*dx()) .. "," .. bp((row-1)*dy()) .. ") ;")
+ else
+ if thirddata.games.go.field[0][col+1][row]['color'] == 0 then
+ tex.sprint("draw (" .. bp((col-1)*dx()) .. "," .. bp((row-1)*dy()) .. ") -- (" .. bp((col)*dx()) .. "," .. bp((row-1)*dy()) .. ") ;")
+ end
+ end
+ end
+ end
+ -- draw vertical rules
+ for col=2,nx()-1 do
+ for row=1,ny()-1 do
+ if thirddata.games.go.field[0][col][row]['color'] == 0 then
+ tex.sprint("draw (" .. bp((col-1)*dx()) .. "," .. bp((row-1)*dy()) .. ") -- (" .. bp((col-1)*dx()) .. "," .. bp((row)*dy()) .. ") ;")
+ else
+ if thirddata.games.go.field[0][col][row+1]['color'] == 0 then
+ tex.sprint("draw (" .. bp((col-1)*dx()) .. "," .. bp((row-1)*dy()) .. ") -- (" .. bp((col-1)*dx()) .. "," .. bp((row)*dy()) .. ") ;")
+ end
+ end
+ end
+ end
+ -- draw border frame
+ tex.sprint("draw (0,0) -- (0," .. bp((ny()-1)*dy()) .. ") ;")
+ tex.sprint("draw (" .. bp((nx()-1)*dx()).. ",0) -- (" .. bp((nx()-1)*dx()).. "," .. bp((ny()-1)*dy()) .. ") ;")
+ tex.sprint("draw (0,0) -- (" .. bp((nx()-1)*dx()) .. ",0) ;")
+ tex.sprint("draw (0," .. bp((ny()-1)*dy()).. ") -- (" .. bp((nx()-1)*dx()).. "," .. bp((ny()-1)*dy()) .. ") ;")
+end
+
+-- Note: I need to define the alternatives before I can use the test
+
+thirddata.games.go.linestyles =
+ {
+ a = thirddata.games.go.board_lines_solid ,
+ b = thirddata.games.go.board_lines_gap ,
+ }
+
+function thirddata.games.go.board_lines()
+ if thirddata.games.go.linestyles[alternative()]==nil then
+ thirddata.games.go.board_lines_solid()
+ else
+ thirddata.games.go.linestyles[alternative()]()
+ end
+end
+
+function thirddata.games.go.board_hoshi()
+ for col=1,nx() do
+ for row=1,ny() do
+ tex.sprint("\\ifcsname go:hoshi:" .. row .. ":" .. col .. ":" .. board() .. "\\endcsname")
+ tex.sprint("\\csname go:marker:hoshi\\endcsname")
+ tex.sprint("{" .. bp(size()/5) .. "}")
+ tex.sprint("{" .. bp((col-1)*dx()) .. "}")
+ tex.sprint("{" .. bp((row-1)*dy()) .. "}")
+ tex.sprint("\\fi")
+ end
+ end
+end
+
+function thirddata.games.go.board_stones()
+ for col=1,nx() do
+ for row=1,ny() do
+ local color = thirddata.games.go.field[0][col][row]['color']
+ if color==1 then
+ tex.sprint("\\csname go:stone:" .. symbolset() .. ":black\\endcsname")
+ tex.sprint("{" .. bp(size()) .. "}")
+ tex.sprint("{" .. bp((col-1)*dx()) .. "}")
+ tex.sprint("{" .. bp((row-1)*dy()) .. "}")
+ elseif color==2 then
+ tex.sprint("\\csname go:stone:" .. symbolset() .. ":white\\endcsname")
+ tex.sprint("{" .. bp(size()) .. "}")
+ tex.sprint("{" .. bp((col-1)*dx()) .. "}")
+ tex.sprint("{" .. bp((row-1)*dy()) .. "}")
+ end
+ end
+ end
+end
+
+function thirddata.games.go.board_marker()
+ for col=1,nx() do
+ for row=1,ny() do
+ local marker = thirddata.games.go.field[0][col][row]['marker']
+ local label = thirddata.games.go.field[0][col][row]['label']
+ if marker==nil then
+ elseif marker=='label' then
+ tex.sprint("\\csname go:marker:label\\endcsname")
+ tex.sprint("{" .. label .. "}")
+ tex.sprint("{" .. bp((col-1)*dx()) .. "}")
+ tex.sprint("{" .. bp((row-1)*dy()) .. "}")
+ else
+ tex.sprint("\\ifcsname go:marker:" .. marker .. "\\endcsname")
+ tex.sprint("\\csname go:marker:" .. marker .. "\\endcsname")
+ tex.sprint("{" .. nx() .. "}")
+ tex.sprint("{" .. ny() .. "}")
+ tex.sprint("{" .. bp(dx()) .. "}")
+ tex.sprint("{" .. bp(dy()) .. "}")
+ tex.sprint("{" .. bp(size()) .. "}")
+ tex.sprint("{" .. bp((col-1)*dx()) .. "}")
+ tex.sprint("{" .. bp((row-1)*dy()) .. "}")
+ tex.sprint("{" .. bp(offset()) .. "}")
+ tex.sprint("\\fi")
+ end
+ end
+ end
+end
+
+function thirddata.games.go.board_label()
+ for col=1,nx() do
+ tex.sprint('label.bot(textext("\\doattributes{@@@@gmgo}{labelstyle}{labelcolor}{\\sgfchar{' .. col .. '}}"),%')
+ tex.sprint('(' .. bp((col-1)*dx()) .. ',' .. bp(-distance()) .. ')) ;')
+ end
+ for row=1,ny() do
+ tex.sprint('label.lft(textext("\\doattributes{@@@@gmgo}{labelstyle}{labelcolor}{' .. row .. '}"),%')
+ tex.sprint('(' .. bp(-distance()) .. ',' .. bp((row-1)*dy()) .. ')) ;')
+ end
+end
+
+function thirddata.games.go.board_markerlines()
+ for k, v in pairs(thirddata.games.go.lines) do
+ tex.sprint("draw (" .. line(k,1,dx()) .. "," .. line(k,2,dy()) .. ") -- ")
+ tex.sprint(" (" .. line(k,3,dx()) .. "," .. line(k,4,dy()) .. ") ; ")
+ end
+end
+
+function thirddata.games.go.board_markerarrows()
+ for k, v in pairs(thirddata.games.go.arrows) do
+ tex.sprint("drawarrow (" .. arrow(k,1,dx()) .. "," .. arrow(k,2,dy()) .. ") -- ")
+ tex.sprint(" (" .. arrow(k,3,dx()) .. "," .. arrow(k,4,dy()) .. ") ; ")
+ end
+end
+
+function thirddata.games.go.board_size()
+ tex.sprint("setbounds currentpicture to unitsquare %")
+ tex.sprint("xyscaled (" .. bp((nx()-1)*dx()+2*offset()) .. "," .. bp((ny()-1)*dy()+2*offset()) .. ")")
+ tex.sprint("shifted (" .. bp(-offset()) .. "," .. bp(-offset()) .. ") ;")
+ tex.sprint("draw boundingbox currentpicture withpen pensquare scaled 1.2 ;")
+end
+
+function thirddata.games.go.board_draw(name)
+ tex.sprint("\\startuseMPgraphic{" .. name .. "}{}")
+ tex.sprint("path mine ; picture board ;")
+ -- thirddata.games.go.board_figure() -- not here, I have to do this at the end
+ thirddata.games.go.board_lines()
+ thirddata.games.go.board_hoshi()
+ thirddata.games.go.board_stones()
+ thirddata.games.go.board_marker()
+ thirddata.games.go.board_markerlines()
+ thirddata.games.go.board_markerarrows()
+ thirddata.games.go.board_label()
+ thirddata.games.go.board_size()
+ thirddata.games.go.board_color()
+ thirddata.games.go.board_figure()
+ tex.sprint("\\stopuseMPgraphic")
+end
+
+
+-- Deadstone calculator
+
+local stone = function() return thirddata.games.go.deadstone.stone end
+local enemy = function() return thirddata.games.go.deadstone.enemy end
+local wall = function() return thirddata.games.go.deadstone.wall end
+local marked = function() return thirddata.games.go.deadstone.marked end
+local error = function() return thirddata.games.go.deadstone.error end
+local dead = function() return thirddata.games.go.deadstone.dead end
+
+function thirddata.games.go.deadstone.black()
+ thirddata.games.go.deadstone.stone = 1
+ thirddata.games.go.deadstone.enemy = 2
+ thirddata.games.go.deadstone.wall = 3
+ thirddata.games.go.deadstone.marked = 4
+ thirddata.games.go.deadstone.error = 6
+ thirddata.games.go.deadstone.dead = 7
+end
+
+function thirddata.games.go.deadstone.white()
+ thirddata.games.go.deadstone.stone = 2
+ thirddata.games.go.deadstone.enemy = 1
+ thirddata.games.go.deadstone.wall = 3
+ thirddata.games.go.deadstone.marked = 5
+ thirddata.games.go.deadstone.error = 6
+ thirddata.games.go.deadstone.dead = 7
+end
+
+thirddata.games.go.deadstone.deadcount = 2
+
+function thirddata.games.go.deadstone.doprocesstones()
+ for i=1,2 do -- for the moment, I have to check the code
+ thirddata.games.go.deadstone.markstones()
+ end
+ thirddata.games.go.deadstone.deadstones()
+ for n=1,thirddata.games.go.deadstone.deadcount do
+ thirddata.games.go.deadstone.checkstones()
+ end
+ thirddata.games.go.deadstone.revertstones()
+end
+
+function thirddata.games.go.deadstone.processtones()
+ -- we placed a black stone
+ if thirddata.games.go.lastcolor==1 then
+ thirddata.games.go.deadstone.process_white()
+ thirddata.games.go.deadstone.process_black()
+ -- we placed a white stone
+ elseif thirddata.games.go.lastcolor==2 then
+ thirddata.games.go.deadstone.process_black()
+ thirddata.games.go.deadstone.process_white()
+ end
+end
+
+function thirddata.games.go.deadstone.process_black()
+ thirddata.games.go.deadstone.black()
+ thirddata.games.go.deadstone.doprocesstones()
+end
+
+function thirddata.games.go.deadstone.process_white()
+ thirddata.games.go.deadstone.white()
+ thirddata.games.go.deadstone.doprocesstones()
+end
+
+local field = function(x,y) return thirddata.games.go.field[0][x][y]['color'] end
+-- local field_top = function(x,y) return thirddata.games.go.field[0][x][y+1]['color'] end
+-- local field_bottom = function(x,y) return thirddata.games.go.field[0][x][y-1]['color'] end
+local field_bottom = function(x,y) return thirddata.games.go.field[0][x][y+1]['color'] end
+local field_top = function(x,y) return thirddata.games.go.field[0][x][y-1]['color'] end
+local field_left = function(x,y) return thirddata.games.go.field[0][x-1][y]['color'] end
+local field_right = function(x,y) return thirddata.games.go.field[0][x+1][y]['color'] end
+
+--[[ldx--
+<p>The <ldx:function>markstones</ldx:function> mark the stones if they
+have the right stones on their sides or let them keep untouched.</p>
+--ldx]]--
+
+function thirddata.games.go.deadstone.markstones()
+ for col=1,nx() do
+ for row=1,ny() do
+ if field(col,row)==stone() then
+ if (field_left(col,row)==wall()
+ or field_left(col,row)==enemy()
+ or field_left(col,row)==marked())
+ and (field_right(col,row)==wall()
+ or field_right(col,row)==enemy()
+ or field_right(col,row)==stone())
+ and (field_bottom(col,row)==wall()
+ or field_bottom(col,row)==enemy()
+ or field_bottom(col,row)==marked())
+ and (field_top(col,row)==wall()
+ or field_top(col,row)==enemy()
+ or field_top(col,row)==stone())
+ then
+ thirddata.games.go.field[0][col][row]['color'] = marked()
+ end
+ end
+ end
+ end
+end
+
+--[[ldx--
+<p>The <ldx:function>deadstones</ldx:function> set stones with the value marked
+to dead if the conditions in the function are true.</p>
+--ldx]]--
+
+function thirddata.games.go.deadstone.deadstones()
+ for col=nx(),1,-1 do
+ for row=ny(),1,-1 do
+ if field(col,row)==marked() then
+ if (field_left(col,row)==wall()
+ or field_left(col,row)==enemy()
+ or field_left(col,row)==marked())
+ and (field_right(col,row)==enemy()
+ or field_right(col,row)==wall()
+ or field_right(col,row)==dead())
+ and (field_bottom(col,row)==enemy()
+ or field_bottom(col,row)==wall()
+ or field_bottom(col,row)==dead())
+ then
+ thirddata.games.go.field[0][col][row]['color'] = dead()
+ end
+ end
+ end
+ end
+end
+
+--[[ldx--
+<p>Because the <ldx:function>deadstones</ldx:function> can sometimes set
+already living stones to dead. To prevent this in the final result this
+function looks through all stones with a loop in reverse direction and
+reset the values to their original value if the stone is not dead and
+should remain on the board. The function is currently called twice within
+processtones but this can be changed with the counter deadcount.</p>
+--ldx]]--
+
+function thirddata.games.go.deadstone.checkstones()
+ for col=1,nx() do
+ for row=1,ny() do
+ if field(col,row)==marked() then
+ thirddata.games.go.field[0][col][row]['color'] = stone()
+ elseif thirddata.games.go.field[0][col][row]['color']==dead() then
+ if (field_left(col,row)==dead()
+ or field_left(col,row)==enemy()
+ or field_left(col,row)==wall())
+ and (field_right(col,row)==dead()
+ or field_right(col,row)==enemy()
+ or field_right(col,row)==wall())
+ and (field_bottom(col,row)==dead()
+ or field_bottom(col,row)==enemy()
+ or field_bottom(col,row)==wall())
+ and (field_top(col,row)==dead()
+ or field_top(col,row)==enemy()
+ or field_top(col,row)==wall())
+ then
+ thirddata.games.go.field[0][col][row]['color'] = dead()
+ else
+ thirddata.games.go.field[0][col][row]['color'] = stone()
+ end
+ end
+ end
+ end
+end
+
+--[[ldx--
+<p>The last thing to do after all dead stones are found on the board
+is to remove them and to reset all other stones which are still in a
+marked state or we will get wrong input for the next move.</p>
+--ldx]]--
+
+function thirddata.games.go.deadstone.revertstones()
+ for col=1,nx() do
+ for row=1,ny() do
+ if thirddata.games.go.field[0][col][row]['color']==marked() then
+ thirddata.games.go.field[0][col][row] = stone()
+ elseif thirddata.games.go.field[0][col][row]['color']==dead() then
+ thirddata.games.go.field[0][col][row]['color'] = 0
+ end
+ end
+ end
+end
+
+end
+
+
+-- SGF parser
+
+do
+
+ thirddata = thirddata or { }
+ thirddata.games = thirddata.games or { }
+ thirddata.games.sgf = thirddata.games.sgf or { }
+
+ local function command(name,x)
+ tex.sprint(string.format("\\csname sgf!%s\\endcsname{%s}",name,x))
+ end
+
+ local nodes = { }
+
+ function nodes.B (x) command("black" ,x) end
+ function nodes.W (x) command("white" ,x) end
+ function nodes.AW(x) command("addwhite" ,x) end
+ function nodes.C (x) command("comment" ,x) end
+
+ local function action(what,data)
+ local a = nodes[what]
+ if a then
+ for w in string.gmatch(data, "%b[]") do
+ a(string.sub(w,2,-2))
+ end
+ else
+ print("unknown action: " .. what)
+ end
+ end
+
+ local function nodecontent(str)
+ tex.sprint(string.format("\\csname sgf!node\\endcsname{%s}",string.sub(str,2)))
+ end
+
+ local space = lpeg.S(' \r\n')^1
+ local lcletter = lpeg.R("az")
+ local ucletter = lpeg.R("AZ")
+ local letter = lcletter + ucletter
+
+ local propindent = ucletter^1
+
+ local property = lpeg.C(propindent) * lpeg.C{ (lpeg.P("[") * (1 - lpeg.S"[]")^0 * lpeg.P("]"))^1} / action
+
+ local function nest(str)
+ tex.sprint(tex.ctxcatcodes,string.format("\\parsesgf{%s}",string.sub(str,2,-2)))
+ end
+
+ local node = lpeg.P{ ";" * (propindent * (lpeg.P("[") * (1 - lpeg.S"[]")^0 * lpeg.P("]"))^1)^1} / nodecontent
+ local branch = lpeg.P{ "(" * ((1 - lpeg.S"()") + lpeg.V(1))^0 * ")" } / nest
+
+ local parser = (branch + node + property + space)^0
+
+ function thirddata.games.sgf.parse(str)
+ parser:match(str)
+ end
+
+end
diff --git a/obsolete/macros/context/contrib/context-games/tex/context/third/games/games-go.tex b/obsolete/macros/context/contrib/context-games/tex/context/third/games/games-go.tex
new file mode 100644
index 0000000000..10e6ce9fe7
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-games/tex/context/third/games/games-go.tex
@@ -0,0 +1,383 @@
+%D \module
+%D [ file=games-go,
+%D version=2008.01.10,
+%D title=\CONTEXT\ User Module,
+%D subtitle=Go,
+%D author=Wolfgang Schuster,
+%D date=\currentdate,
+%D copyright=Wolfgang Schuster,
+%D email=schuster.wolfgang@googlemail.com,
+%D license=Public Domain]
+
+\writestatus{loading}{Context User Module / Games - Go}
+
+\unprotect
+
+%D The \type{\definegame} command creates the new goban environment, it is
+%D important to use the goban environment in a document and not the game
+%D environment itself because in sgf mode the content untill \type{\stopgoban}
+%D is read and \type{\endgame} is executed at the end of the parsing process.
+
+\definegame[\v!goban][\v!go] % not final
+%\definegame[\v!weiqi][\v!go]
+%\definegame[\v!baduk][\v!go]
+
+%D Convert number into labels for the board, could be replaced with \type{\ifcase} solution (faster?)
+
+\def\sgfchar#1%
+ {\ifnum#1<9
+ \char\number\numexpr#1+64\relax
+ \else\ifnum#1<26
+ \char\number\numexpr#1+65\relax
+ \fi\fi}
+
+%D List with the commands for the user interface
+
+\def\go!commands
+ {newboard,saveboard,useboard,drawboard,marker,stone,move,line,arrow}
+
+\def\go!copygamecommands
+ {\expanded{\copyparameters[][go!][\go!commands]}}
+
+\setvalue{\e!begin\????gm\????gm\v!go}%
+ {\go!copygamecommands
+ \go!backgroundcolor
+ \go!backgroundimage
+ \go!boardsize % should I set the size with \newboard?
+ \go!boardvalues
+ \go!inputtype} % input has to be the last command
+
+\def\go!inputtype
+ {\doif{\gameparameter\c!option}\v!sgf\go!inputtype!sgf}
+
+\def\go!inputtype!sgf
+ {\grabuntil{\if!!gameenvironment\e!stop\currentname\else\s!do\e!stop\v!game\fi}\dogo!inputtype!sgf}
+
+\def\dogo!inputtype!sgf#1%
+ {\newboard
+ \parsesgf{#1}%
+ \drawboard
+ \dostopgame}
+
+\defineoverlay[overlay:go][\overlaybutton{JS(Walk_Field{games!go})}]
+
+\setvalue{\e!end\????gm\????gm\v!go}%
+ {\doif{\gameparameter\c!interactive}\v!yes\go!fieldstack}
+
+\def\go!fieldstack
+ {\expanded{\definefieldstack[games!go][\go!list!symbols][\c!frame=\v!off]}%
+ \framed
+ [\c!frame=\v!off,
+ \c!background={foreground,overlay:go},
+ \c!offset=\v!overlay]
+ {\fieldstack[games!go]}}
+
+\def\go!backgroundcolor
+ {\doifsomethingelse{\gameparameter\c!backgroundcolor}
+ {\ctxlua{thirddata.games.go.setup['backgroundcolor'] = '\gameparameter\c!backgroundcolor' }}%
+ {\ctxlua{thirddata.games.go.setup['backgroundcolor'] = nil }}}
+
+\def\go!backgroundimage % use groups to keep the dimensions local
+ {\doifsomethingelse{\gameparameter\c!backgroundimage}
+ {\ctxlua{thirddata.games.go.setup['backgroundimage'] = '\gameparameter\c!backgroundimage' }%
+ \getfiguredimensions[\gameparameter\c!backgroundimage][scale=500]% I need a scale parameter
+ \ctxlua{thirddata.games.go.setup.figurewidth = \number\dimexpr\figurewidth \relax }%
+ \ctxlua{thirddata.games.go.setup.figureheight = \number\dimexpr\figureheight\relax }}%
+ {\ctxlua{thirddata.games.go.setup.backgroundimage = nil }}}
+
+\def\go!boardsize
+ {\assignvalue{\gameparameter\c!size}\go!board!size{9}{13}{19}% size is only used for hoshi points
+ \assignvalue{\gameparameter\c!nx }\go!board!nx {9}{13}{19}%
+ \assignvalue{\gameparameter\c!ny }\go!board!ny {9}{13}{19}%
+ \ctxlua{thirddata.games.go.setup.board = \number\go!board!size }%
+ \ctxlua{thirddata.games.go.setup.nx = \number\go!board!nx }%
+ \ctxlua{thirddata.games.go.setup.ny = \number\go!board!ny }}
+
+\def\go!boardvalues
+ {\startlua
+ thirddata.games.go.setup.dx = \number\dimexpr\gameparameter\c!dx\relax ;
+ thirddata.games.go.setup.dy = \number\dimexpr\gameparameter\c!dy\relax ;
+ thirddata.games.go.setup.offset = \number\dimexpr\gameparameter\c!frameoffset\relax ;
+ thirddata.games.go.setup.labeldistance = \number\dimexpr\gameparameter\c!labeldistance\relax ;
+ thirddata.games.go.setup.stonesize = \number\dimexpr\gameparameter\c!stonesize\relax ;
+ thirddata.games.go.setup.symbolset = '\gameparameter\c!symbolset' ;
+ thirddata.games.go.setup.alternative = '\gameparameter\c!alternative' ;
+ \stoplua}
+
+%D User command with protected names
+
+\def\go!newboard
+ {\ctxlua{thirddata.games.go.board_new()}%
+ \doif{\gameparameter\c!interactive}\v!yes\go!symbol} % too early, I should take care of \stone
+
+\def\go!saveboard#1%
+ {\ctxlua{thirddata.games.go.board_copy( 0, '#1' )}}
+
+\def\go!useboard#1%
+ {\ctxlua{thirddata.games.go.board_copy( '#1', 0 )}}
+
+\def\go!drawboard
+ {\doifnot{\gameparameter\c!interactive}\v!yes
+ {\go!setboard{0}%
+ \go!getboard{0}}}
+
+\def\go!setboard#1%
+ {\ctxlua{thirddata.games.go.board_draw("games:go:#1")}}
+
+\def\go!getboard#1%
+ {\useMPgraphic{games:go:#1}}
+
+\def\go!marker
+ {\dodoubleempty\dogo!marker}
+
+\def\dogo!marker[#1][#2]#3#4%
+ {\ifsecondargument % needed for labels
+ \ctxlua{thirddata.games.go.field[0][#3][#4]['label'] = '#2' }%
+ \fi
+ \ctxlua{thirddata.games.go.field[0][#3][#4]['marker'] = '#1' }}
+
+\def\go!stone[#1]#2#3%
+ {\bgroup % keep \stonecolor as local command, this is no problem because Lua calls are global
+ \processaction
+ [#1]
+ [\v!black=>\chardef\stonecolor\plusone,
+ \v!white=>\chardef\stonecolor\plustwo]%
+ \ctxlua{thirddata.games.go.field[0][#2][#3]['color'] = \number\stonecolor }%
+ \ctxlua{thirddata.games.go.lastcolor = \number\stonecolor }%
+ \doif{\gameparameter\c!calculate}\v!yes{\ctxlua{thirddata.games.go.deadstone.processtones()}}%
+ \egroup}
+
+\def\go!move
+ {\dosingleempty\dogo!move}
+
+\def\dogo!move[#1]#2#3%
+ {\iffirstargument
+ \go!stone[#1]{#2}{#3}%
+ \fi
+ \doif{\gameparameter\c!interactive}\v!yes\go!symbol}
+
+\newcount\go!count!symbols
+
+\let\go!list!symbols\empty
+
+\def\go!symbol
+ {\expanded{\advance\go!count!symbols\plusone}%
+ \expanded{\go!setboard{\number\go!count!symbols}}%
+ \expanded{\definesymbol[go!symbol!\number\go!count!symbols][\noexpand\go!getboard{\number\go!count!symbols}]}%
+ \expanded{\appendtocommalist{go!symbol!\number\go!count!symbols}}\go!list!symbols}
+
+\def\go!line#1#2#3#4%
+ {\ctxlua{thirddata.games.go.line(#1,#2,#3,#4)}}
+
+\def\go!arrow#1#2#3#4%
+ {\ctxlua{thirddata.games.go.arrow(#1,#2,#3,#4)}}
+
+%D Stones
+
+% simple/pure style
+
+\starttexdefinition go:stone:pure:black #1#2#3
+ fill fullcircle scaled #1 shifted (#2,#3) ;
+ draw fullcircle scaled #1 shifted (#2,#3) ;
+\stoptexdefinition
+
+\starttexdefinition go:stone:pure:white #1#2#3
+ fill fullcircle scaled (#1-.2) shifted (#2,#3) withcolor white ;
+ draw fullcircle scaled (#1-.2) shifted (#2,#3) ;
+\stoptexdefinition
+
+% complex/shade style
+
+\starttexdefinition go:stone:shade:black #1#2#3
+ circular_shade ( fullcircle scaled (#1+.4) shifted (#2,#3) , 4 , .8white , black ) ;
+\stoptexdefinition
+
+\starttexdefinition go:stone:shade:white #1#2#3
+ circular_shade ( fullcircle scaled (#1+.4) shifted (#2,#3) , 2 , .8white , white ) ;
+\stoptexdefinition
+
+%D Marker
+
+% #1 = nx
+% #2 = ny
+% #3 = dx
+% #4 = dy
+% #5 = stonesize
+% #6 = hoffset
+% #7 = voffset
+% #8 = frameoffset
+
+\starttexdefinition go:marker:circle #1#2#3#4#5#6#7#8
+ draw fullcircle scaled (0.6*#5) shifted (#6,#7) ;
+\stoptexdefinition
+
+\starttexdefinition go:marker:square #1#2#3#4#5#6#7#8
+ draw fullsquare scaled (sqrt(2)*(#5-.4)/2) shifted (#6,#7) ;
+\stoptexdefinition
+
+\starttexdefinition go:marker:cross #1#2#3#4#5#6#7#8
+ draw (((-(#5-.4)/2,0)--((#5-.4)/2,0)) rotated -45) shifted (#6,#7) ;
+ draw (((-(#5-.4)/2,0)--((#5-.4)/2,0)) rotated +45) shifted (#6,#7) ;
+\stoptexdefinition
+
+\starttexdefinition go:marker:triangle #1#2#3#4#5#6#7#8
+ draw (origin--((3*(#5-.4))/(2*sqrt(3)),0)--((3*(#5-.4))/(2*sqrt(3)),0) rotated 60--cycle) shifted (#6-(3*(#5-.4))/(2*sqrt(3))/2,#7-(#5-.4)/4) ;
+\stoptexdefinition
+
+\starttexdefinition go:marker:select #1#2#3#4#5#6#7#8
+ width := #1*#2+2*#8 ; % I have to do this
+ height := #2*#4+2*#8 ; % in a better way
+ board := currentpicture ;
+ currentpicture := nullpicture ;
+ mine := unitsquare xyscaled (width,height) shifted (-#8,-#8) -- reverse %
+ fullsquare scaled sqrt(5*4mm) shifted (#6,#7)--cycle ;
+ clip board to mine ;
+ currentpicture := board ;
+ fill fullsquare scaled sqrt(2.5*4mm) shifted (#6,#7) ;
+\stoptexdefinition
+
+\starttexdefinition go:marker:hash #1#2#3#4#5#6#7#8
+ % make a hole in the board, should only be done if no stone is on this position
+ width := #1*#3+2*#8 ; % I have to do this
+ height := #2*#4+2*#8 ; % in a better way
+ board := currentpicture ;
+ currentpicture := nullpicture ;
+ mine := unitsquare xyscaled (width,height) shifted (-#8,-#8) -- reverse %
+ fullsquare scaled sqrt(5*4mm) shifted (#6,#7) -- cycle ;
+ clip board to mine ;
+ currentpicture := board ;
+ % draw the pattern
+ board := currentpicture ;
+ currentpicture := nullpicture ;
+ for i=-5 upto 5:
+ draw ((sqrt((#2**2)/2)*i*.25,-5mm)--(sqrt((#2**2)/2)*i*.25,5mm)) rotated - 45 shifted (#6,#7) ;
+ endfor ; % why do I need a simikolon here, it worked in MPdrawing without them (related to obeylines in texdefintion?)
+ clip currentpicture to fullsquare xyscaled (#2,#4) shifted (#6,#7) ;
+ addto board also currentpicture ;
+ currentpicture := board ;
+\stoptexdefinition
+
+\starttexdefinition go:marker:label #1#2#3
+ label(textext("\doattributes{\????gm\currentgame}{style}{color}{#1}"),(#2,#3)) ;
+\stoptexdefinition
+
+\starttexdefinition go:marker:label #1#2#3
+ label(textext("\doattributes{\????gm\currentgame}{style}{color}{#1}"),(#2,#3)) ;
+\stoptexdefinition
+
+\starttexdefinition go:marker:hoshi #1#2#3
+ fill fullcircle scaled #1 shifted (#2,#3) ;
+\stoptexdefinition
+
+%D Hoshi points
+
+\def\definehoshi #1 #2 #3
+ {\resetvalue{go:hoshi:#2:#3:#1}}
+
+% #1 = boardsize
+% #1 = column
+% #3 = row
+
+%D small board: 9
+
+\definehoshi 9 3 3
+\definehoshi 9 3 7
+\definehoshi 9 5 5
+\definehoshi 9 7 3
+\definehoshi 9 7 7
+
+%D medium board: 13
+
+\definehoshi 13 4 4
+\definehoshi 13 4 10
+\definehoshi 13 7 7
+\definehoshi 13 10 4
+\definehoshi 13 10 10
+
+%D big board: 19
+
+\definehoshi 19 4 4
+\definehoshi 19 4 10
+\definehoshi 19 4 16
+\definehoshi 19 10 4
+\definehoshi 19 10 10
+\definehoshi 19 10 16
+\definehoshi 19 16 4
+\definehoshi 19 16 10
+\definehoshi 19 16 16
+
+%D Mapping from SGF code to TeX commands
+
+\def\sgfflush#1{\ctxlua{thirddata.games.sgf.parse("#1")}}
+
+\def\sgfnumber#1%
+ {\ifnum`#1>105
+ \number\numexpr`#1-97\relax
+ \else\ifnum`#1>96
+ \number\numexpr`#1-96\relax
+ \else\ifnum`#1<73
+ \number\numexpr`#1-39\relax
+ \else
+ \number\numexpr`#1-40\relax
+ \fi\fi\fi}
+
+\def\convertsgfnumber#1#2\relax
+ {\edef\valuea{\sgfnumber{#1}}%
+ \edef\valueb{\sgfnumber{#1}}}
+
+\starttexdefinition parsesgf #1
+ \sgfflush{#1}
+\stoptexdefinition
+
+\starttexdefinition sgf!node #1
+ \sgfflush{#1}
+\stoptexdefinition
+
+\starttexdefinition sgf!white #1
+ \expandafter\convertsgfnumber#1\relax
+ \move[white]\valuea\valueb
+\stoptexdefinition
+
+\starttexdefinition sgf!black #1
+ \expandafter\convertsgfnumber#1\relax
+ \move[black]\valuea\valueb
+\stoptexdefinition
+
+\starttexdefinition sgf!addwhite #1
+ \expandafter\convertsgfnumber#1\relax
+ \stone[white]\valuea\valueb
+\stoptexdefinition
+
+\starttexdefinition sgf!comment #1
+ % no output
+\stoptexdefinition
+
+%D Lua functions are saved in a separate file
+
+\ctxloadluafile{games-go}{}
+
+%D Setup for the default values
+
+\setupgame % \setupgame[go] == \setupgoban
+ [\v!go]
+ [\c!size=\v!medium,
+ \c!stonesize=.92\bodyfontsize,
+ \c!nx=\gameparameter\c!size,
+ \c!ny=\gameparameter\c!size,
+ \c!dx=\bodyfontsize,
+ \c!dy=\gameparameter\c!dx,
+ \c!style=\txx,
+ \c!color=,
+ \c!labelstyle=\txx,
+ \c!labelcolor=,
+ \c!symbolset=\v!pure, % \v!shade
+ \c!labeldistance=.25\bodyfontsize,
+ \c!frameoffset=2\bodyfontsize,
+ \c!interactive=\v!no,
+ \c!calculate=\v!no,
+ \c!option=\v!tex,
+ \c!alternative=\v!b,
+ \c!backgroundcolor=,
+ \c!backgroundimage=]
+
+\protect \endinput
diff --git a/obsolete/macros/context/contrib/context-games/tex/context/third/games/games-hex.lua b/obsolete/macros/context/contrib/context-games/tex/context/third/games/games-hex.lua
new file mode 100644
index 0000000000..b8aee372d4
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-games/tex/context/third/games/games-hex.lua
@@ -0,0 +1,90 @@
+if not modules then modules = { } end modules ['games-hex'] = {
+ version = 1.000,
+ comment = "Hex",
+ author = "Wolfgang Schuster",
+ copyright = "Wolfgang Schuster",
+ email = "schuster.wolfgang@googlemail.com",
+ license = "Public Domain"
+}
+
+do
+
+thirddata = thirddata or { }
+thirddata.games = thirddata.games or { }
+thirddata.games.hex = thirddata.games.hex or { }
+thirddata.games.hex.setup = thirddata.games.hex.setup or { }
+
+local nx = function() return thirddata.games.hex.setup.nx end
+local ny = function() return thirddata.games.hex.setup.ny end
+local dx = function() return thirddata.games.hex.setup.dx end
+local dy = function() return thirddata.games.hex.setup.dy end
+local offset = function() return thirddata.games.hex.setup.offset end
+local size = function() return thirddata.games.hex.setup.size end
+local distance = function() return thirddata.games.hex.setup.distance end
+local bp = function(value) return number.tobasepoints(value) end
+local sp = function(value) return value * 65536/(7227/7200) end
+
+function thirddata.games.hex.board_new()
+ thirddata.games.hex.field = { }
+ for col=1,nx() do
+ thirddata.games.hex.field[col] = { }
+ for row=1,ny() do
+ thirddata.games.hex.field[col][row] = { color = 0 }
+ end
+ end
+end
+
+function thirddata.games.hex.board_lines()
+ for row=1,ny() do
+ for col=1,ny() do
+ tex.sprint("draw (")
+ for rot=0,5 do
+ tex.sprint("(" .. bp(size()) .. ",0) rotated (" .. rot*60+90 .. ") --")
+ end
+ tex.sprint("cycle) shifted (" .. bp(math.cos(math.pi/6)*size()*(2*(col-1)+(row-1))) .. "," .. bp(-size()*1.5*(row-1)) .. ") ; ")
+ end
+ end
+end
+
+function thirddata.games.hex.board_labels()
+ for col=1,nx() do
+ tex.sprint('label.top(textext("\\doattributes{@@@@gmhex}{labelstyle}{labelcolor}{\\sgfchar{' .. col .. '}}"),%')
+ tex.sprint('(' .. bp(-(size()+distance())*math.tan(math.pi/6)+2*(col-1)*math.cos(math.pi/6)*size()) .. ',' .. bp(size()+distance()) .. ')) ;')
+ end
+ for row=1,ny() do
+ tex.sprint('label.lft(textext("\\doattributes{@@@@gmhex}{labelstyle}{labelcolor}{' .. row .. '}"),%')
+ tex.sprint('(' .. bp(-math.cos(math.pi/6)*size()-distance()+(row-1)*math.cos(math.pi/6)*size()) .. ',' .. bp(-1.5*(row-1)*size()) .. ')) ;')
+ end
+end
+
+function thirddata.games.hex.board_stones()
+ local color = function(x,y) return thirddata.games.hex.field[x][y]['color'] end
+ for col=1,nx() do
+ for row=1,ny() do
+ if color(col,row)==1 then
+ thirddata.games.hex.stone(math.cos(math.pi/6)*size()*(2*(col-1)+(row-1)),-size()*1.5*(row-1),"red")
+ elseif color(col,row)==2 then
+ thirddata.games.hex.stone(math.cos(math.pi/6)*size()*(2*(col-1)+(row-1)),-size()*1.5*(row-1),"blue")
+ end
+ end
+ end
+end
+
+function thirddata.games.hex.stone(x,y,color)
+ tex.sprint("fill (")
+ for rot=0,5 do
+ tex.sprint("(" .. bp(size()) .. ",0) rotated (" .. rot*60+90 .. ") --")
+ end
+ tex.sprint("cycle) shifted (" .. bp(x) .. "," .. bp(y) .. ")")
+ tex.sprint("withcolor \\MPcolor{" .. color .. "} ;")
+end
+
+function thirddata.games.hex.board_draw(name)
+ tex.sprint("\\startuniqueMPgraphic{" .. name .. "}{}")
+ thirddata.games.hex.board_stones()
+ thirddata.games.hex.board_lines()
+ thirddata.games.hex.board_labels()
+ tex.sprint("\\stopuniqueMPgraphic")
+end
+
+end
diff --git a/obsolete/macros/context/contrib/context-games/tex/context/third/games/games-hex.tex b/obsolete/macros/context/contrib/context-games/tex/context/third/games/games-hex.tex
new file mode 100644
index 0000000000..e03554a16f
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-games/tex/context/third/games/games-hex.tex
@@ -0,0 +1,119 @@
+%D \module
+%D [ file=games-hex,
+%D version=2008.10.29,
+%D title=\CONTEXT\ User Module,
+%D subtitle=Hex,
+%D author=Wolfgang Schuster,
+%D date=\currentdate,
+%D email=schuster.wolfgang@googlemail.com,
+%D copyright=Wolfgang Schuster]
+
+\writestatus{loading}{Context User Module / Games - Hex}
+
+\unprotect
+
+\definegame[\v!hexgame][\v!hex]
+
+\def\sgfchar#1%
+ {\ifnum#1<9
+ \char\number\numexpr#1+64\relax
+ \else\ifnum#1<26
+ \char\number\numexpr#1+65\relax
+ \fi\fi}
+
+\def\hex!commands
+ {newboard,drawboard,player}
+
+\def\hex!copygamecommands
+ {\expanded{\copyparameters[][hex!][\hex!commands]}}
+
+\setvalue{\e!begin\????gm\????gm\v!hex}%
+ {\hex!copygamecommands
+ \hex!boardsize
+ \hex!gamevalues}
+
+\defineoverlay[overlay:hex][\overlaybutton{JS(Walk_Field{games!hex})}]
+
+\setvalue{\e!end\????gm\????gm\v!hex}%
+ {\doif{\gameparameter\c!interactive}\v!yes\hex!fieldstack}
+
+\def\hex!fieldstack
+ {\expanded{\definefieldstack[games!hex][\hex!list!symbols][\c!frame=\v!off]}%
+ \framed
+ [\c!frame=\v!off,
+ \c!background={foreground,overlay:hex},
+ \c!offset=\v!overlay]
+ {\fieldstack[games!hex]}}
+
+\def\hex!boardsize % what are common values for hex
+ {\assignvalue{\gameparameter\c!nx}\hex!board!nx{11}{14}{19}%
+ \assignvalue{\gameparameter\c!ny}\hex!board!ny{11}{14}{19}%
+ \ctxlua{thirddata.games.hex.setup.nx = \number\hex!board!nx }%
+ \ctxlua{thirddata.games.hex.setup.ny = \number\hex!board!ny }}
+
+\def\hex!gamevalues
+ {\startlua
+ thirddata.games.hex.setup.size = \number\dimexpr\gameparameter\c!stonesize\relax ;
+ thirddata.games.hex.setup.dx = \number\dimexpr\gameparameter\c!dx\relax ;
+ thirddata.games.hex.setup.dy = \number\dimexpr\gameparameter\c!dy\relax ;
+ thirddata.games.hex.setup.offset = \number\dimexpr\gameparameter\c!frameoffset\relax ;
+ thirddata.games.hex.setup.distance = \number\dimexpr\gameparameter\c!labeldistance\relax ;
+ \stoplua}
+
+%D User commands
+
+\def\hex!newboard
+ {\ctxlua{thirddata.games.hex.board_new()}}
+
+\def\hex!drawboard
+ {\doifnot{\gameparameter\c!interactive}\v!yes
+ {\hex!setboard{0}%
+ \hex!getboard{0}}}
+
+\def\hex!setboard#1%
+ {\ctxlua{thirddata.games.hex.board_draw("games:hex:#1")}}
+
+\def\hex!getboard#1%
+ {\uniqueMPgraphic{games:hex:#1}}
+
+\def\hex!player[#1]#2#3%
+ {\bgroup
+ \processaction
+ [#1]
+ [ \v!red=>\chardef\stonecolor\plusone,
+ \v!blue=>\chardef\stonecolor\plustwo]%
+ \ctxlua{thirddata.games.hex.field[#2][#3] = { color = \number\stonecolor }}%
+ \egroup
+ \doif{\gameparameter\c!interactive}\v!yes\hex!symbol}
+
+\newcount\hex!count!symbols
+
+\let\hex!list!symbols\empty
+
+\def\hex!symbol
+ {\expanded{\advance\hex!count!symbols\plusone}%
+ \expanded{\hex!setboard{\number\hex!count!symbols}}%
+ \expanded{\definesymbol[hex!symbol!\number\hex!count!symbols][\noexpand\hex!getboard{\number\hex!count!symbols}]}%
+ \expanded{\appendtocommalist{hex!symbol!\number\hex!count!symbols}}\hex!list!symbols}
+
+%D Lua functions
+
+\ctxloadluafile{games-hex}{}
+
+%D Default values
+
+\setupgame
+ [\v!hex]
+ [\c!size=\v!small,
+ \c!nx=\gameparameter\c!size,
+ \c!ny=\gameparameter\c!size,
+ \c!stonesize=\bodyfontsize,
+ \c!dx=\gameparameter\c!stonesize,
+ \c!dy=\gameparameter\c!dx,
+ \c!frameoffset=0pt,
+ \c!labeldistance=0pt,
+ \c!labelstyle=\tx,
+ \c!labelcolor=,
+ \c!interaction=\v!no]
+
+\protect \endinput
diff --git a/obsolete/macros/context/contrib/context-games/tex/context/third/games/holz280.jpg b/obsolete/macros/context/contrib/context-games/tex/context/third/games/holz280.jpg
new file mode 100644
index 0000000000..9d7f23fc01
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-games/tex/context/third/games/holz280.jpg
Binary files differ
diff --git a/obsolete/macros/context/contrib/context-games/tex/context/third/games/t-games.tex b/obsolete/macros/context/contrib/context-games/tex/context/third/games/t-games.tex
new file mode 100644
index 0000000000..63dc6d4ca2
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-games/tex/context/third/games/t-games.tex
@@ -0,0 +1,110 @@
+%D \module
+%D [ file=t-games,
+%D version=2008.01.10,
+%D title=\CONTEXT\ User Module,
+%D subtitle=Games,
+%D author=Wolfgang Schuster,
+%D date=\currentdate,
+%D copyright=Wolfgang Schuster,
+%D email=schuster.wolfgang@googlemail.com,
+%D license=Public Domain]
+
+\writestatus{loading}{Context User Module / Games}
+
+\unprotect
+
+%D Constants
+
+\startinterface all
+ \setinterfaceconstant {labelstyle} {labelstyle}
+ \setinterfaceconstant {labelcolor} {labelcolor}
+ \setinterfaceconstant {labeldistance} {labeldistance}
+ \setinterfaceconstant {stonesize} {stonesize}
+ \setinterfaceconstant {backgroundimage} {backgroundimage}
+ \setinterfaceconstant {interactive} {interactive}
+\stopinterface
+
+%D Variables
+
+\startinterface all
+ \setinterfacevariable {game} {game}
+ \setinterfacevariable {black} {black}
+ \setinterfacevariable {white} {white}
+ \setinterfacevariable {go} {go}
+ \setinterfacevariable {hex} {hex}
+ \setinterfacevariable {goban} {goban}
+ \setinterfacevariable {hexgame} {hexgame}
+ \setinterfacevariable {red} {red}
+ \setinterfacevariable {blue} {blue}
+ \setinterfacevariable {weiqi} {weiqi}
+ \setinterfacevariable {baduk} {baduk}
+ \setinterfacevariable {pure} {pure}
+ \setinterfacevariable {shade} {shade}
+ \setinterfacevariable {tex} {tex}
+ \setinterfacevariable {sgf} {sgf}
+ \setinterfacevariable {chess} {chess}
+ \setinterfacevariable {pgn} {pgn}
+\stopinterface
+
+%D Namespace
+
+\def\????ga{@@@@ga}
+\def\????gm{@@@@gm}
+
+\def\gameparameter#1%
+ {\csname\????gm\currentgame#1\endcsname}
+
+%D Game environment, not more than a simple wrapper to load the real
+%D environments in the from \type {\????gm\????gm...}.
+
+\def\dostartgame
+ {\!!gameenvironmenttrue
+ \dotripleempty\dodostartgame}
+
+\def\dodostartgame[#1][#2][#3]%
+ {\bgroup
+ \edef\currentname{#1}% needed for the parser
+ \edef\currentgame{#2}% I should look for better names
+ \gameparameter\c!before
+ \ifsecondargument
+ \setupgame[#2][#3]%
+ \fi
+ \executeifdefined{\e!begin\????gm\????gm\currentgame}{\@EA\gobbleuntil\csname\e!stop\currentname\endcsname}}
+
+\def\dostopgame
+ {\executeifdefined{\e!end\????gm\????gm\currentgame}\donothing
+ \gameparameter\c!after
+ \egroup}
+
+\def\dogame
+ {\dotripleempty\dodogame}
+
+\newif\if!!gameenvironment
+
+\def\dodogame[#1][#2][#3]#4%
+ {\!!gameenvironmentfalse\dodostartgame[#1][#2][#3]{#4}\dostopgame}
+
+
+\def\definegame
+ {\dodoubleargument\dodefinegame}
+
+\def\dodefinegame[#1][#2]%
+ {\setvalue{\e!start#1}{\dostartgame[#1][#2]}%
+ \setvalue{\e!stop #1}{\dostopgame}%
+ \setvalue {#1}{\dogame[#1][#2]}%
+ \setvalue{\e!setup#1\e!endsetup}{\setupgame[#2]}}
+
+%D Setup command.
+
+\def\setupgame
+ {\dodoubleargument\dosetupgame}
+
+\def\dosetupgame[#1][#2]%
+ {\getparameters[\????gm#1][#2]}
+
+%D Load the games with their own macros.
+
+\input games-go
+\input games-hex
+
+\protect \endinput
diff --git a/obsolete/macros/context/contrib/context-lilypond/doc/context/third/lilypond/demo.pdf b/obsolete/macros/context/contrib/context-lilypond/doc/context/third/lilypond/demo.pdf
new file mode 100644
index 0000000000..3682e7c3b8
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-lilypond/doc/context/third/lilypond/demo.pdf
Binary files differ
diff --git a/obsolete/macros/context/contrib/context-lilypond/doc/context/third/lilypond/t-lilypond.pdf b/obsolete/macros/context/contrib/context-lilypond/doc/context/third/lilypond/t-lilypond.pdf
new file mode 100644
index 0000000000..15d5d3116e
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-lilypond/doc/context/third/lilypond/t-lilypond.pdf
Binary files differ
diff --git a/obsolete/macros/context/contrib/context-lilypond/tex/context/third/lilypond/t-lilypond.tex b/obsolete/macros/context/contrib/context-lilypond/tex/context/third/lilypond/t-lilypond.tex
new file mode 100644
index 0000000000..acde63655e
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-lilypond/tex/context/third/lilypond/t-lilypond.tex
@@ -0,0 +1,432 @@
+%D \module
+%D [ file=t-lilypond,
+%D version=2010.03.11,
+%D title=\CONTEXT\ User Modules,
+%D subtitle=LilyPond Bridge (Music Typesetting),
+%D author={Christopher Creutzig, H. Ramm et al.}, % , Mojca Miklavec, Wolfgang Schuster
+%D maintainer={Henning Hraban Ramm, hraban@fiee.net},
+%D date=\currentdate,
+%D copyright=the authors]
+%C
+%C This module is licensed under the GNU GPL.
+
+%D This module serves to include LilyPond music directly in the
+%D \CONTEXT\ source, just as \METAPOST\ code can be.
+%D
+%D It is supposed to work only with LilyPond's stable version 2.12 and \CONTEXT\ MkIV i.\,e. \LUATEX.
+%D
+%D {\bfa Complete list of options:}
+%D
+%D \starttabulate[|l|l|l|]
+%D \NC option\NC default\NC comment\NC\NR
+%D \HL
+%D \NC staffsize\NC 14\NC in pt \NC\NR
+%D \NC indent\NC 0pt\NC first line indent \NC\NR
+%D \NC time\NC yes\NC count time? (i.e. show time signature, set bars, split line) \NC\NR
+%D \NC clef\NC yes\NC show clef? \NC\NR
+%D \NC linewidth\NC \type{\localhsize}\NC \NC\NR
+%D \NC betweensystemspace\NC 54pt\NC space between systems \NC\NR
+%D \NC height\NC \type{\textheight}\NC \NR
+%D \NC align\NC ?\NC default depends on fragment=... \NC\NR
+%D \NC fragment\NC no\NC whole staff line or only snippet? \NC\NR
+%D \NC barnumbers\NC no\NC show numbers of measures? \NC\NR
+%D \NC showempty\NC no\NC drop empty staves? \NC\NR
+%D \NC seriffont\NC "TeX Gyre Schola"\NC font for e.g. lyrics \NC\NR
+%D \NC sansfont\NC "LMSans10"\NC font for e.g. chords \NC\NR
+%D \NC monofont\NC "LMTypewriter10" \NC normally not used \NC\NR
+%D \NC tmpdir\NC ./lilytemp \NC directory for temporary files \NC\NR
+%D \NC imgdir\NC ./lilypdfs \NC directory for image files (note PDFs) \NC\NR
+%D \stoptabulate
+%D
+%D {\bfa Todo list}
+%D
+%D \startitemize[packed,joinedup]
+%D \item Proper support for multipage results.
+%D \item Set LilyPond page size to remaining page space.
+%D \item Place instrument names in margin.
+%D \item Work with existing PDFs on systems where LilyPond isn't installed.
+%D \stopitemize
+%D
+%D {\bfa Commented Source}
+%D
+%D As usual, we use a prefix for buffers, \type{\getparameters} etc.:
+
+\writestatus{loading}{LilyPond module}
+
+\startmodule[lilypond]
+
+\unprotect
+
+\definesystemvariable{lily}
+
+%D Define the text snippets to be placed around fragments.
+%D Since LilyPond uses similar syntax to TeX, we must do some catcode fiddling.
+
+\bgroup
+
+\catcode`\/=\@@escape
+/catcode`/\=/@@other
+/catcode`/#=/@@other
+/catcode`/<=/@@begingroup
+/catcode`/>=/@@endgroup
+/catcode`/{=/@@other
+/catcode`/}=/@@other
+/catcode`/%=/@@other
+/catcode`/-=/@@letter
+
+/gdef/lily!fragmentprefix
+ </string^^J
+ /string^^J
+ {/string^^J
+ % ly snippet contents follows:/string^^J
+ >
+
+/gdef/lily!fragmentsuffix
+ </string^^J
+ % end ly snippet/string^^J
+ }/string^^J
+ >
+
+/gdef/lily!prefix
+ </string^^J
+ /string^^J
+ #(ly:set-option (quote no-point-and-click))/string^^J
+ #(ly:set-option (quote delete-intermediate-files))/string^^J
+ /string^^J
+ \version "2.12.0"/string^^J
+ #(define version-seen? #t)/string^^J
+ \layout {/string^^J
+ /iflily!showempty/else
+ % drop empty staves/string^^J
+ \context { \RemoveEmptyStaffContext } % MUST come first/string^^J
+ \context { \Score \override VerticalAxisGroup #'remove-first = ##t }/string^^J
+ /fi
+ /string^^J
+ /unless/iflily!time
+ % switch off time signature (i.e. only one line, no bars)/string^^J
+ ragged-last = ##t/string^^J
+ \context { \Score timing = ##f }/string^^J
+ \context { \Staff \remove "Time_signature_engraver" }/string^^J
+ /string^^J
+ /fi
+ /unless/iflily!barnumbers
+ % switch off bar numbers/string^^J
+ \context { \Score \remove "Bar_number_engraver" }/string^^J
+ /fi
+ /string^^J
+ /unless/iflily!clef
+ % switch off clef sign/string^^J
+ \context { \Staff \remove "Clef_engraver" }/string^^J
+ /fi
+ /string^^J
+ #(define fonts
+ (make-pango-font-tree
+ /@@lilyseriffont/space
+ /@@lilysansfont/space
+ /@@lilymonofont/space
+ (/letterslash/space/@@lilystaffsize/space 20)))/string^^J
+ /string^^J
+ }/string^^J
+ \paper {/string^^J
+ #(define dump-extents #t)/string^^J
+ ragged-right = /iflily!align ##f/else ##t/fi/string^^J
+ indent = /withoutpt/the/lily!indent\pt/string^^J
+ line-width = /withoutpt/the/lily!linewidth\pt/string^^J
+ vsize = /withoutpt/the/lily!vsize\pt/string^^J
+ printpagenumber = ##f/string^^J
+ oddFooterMarkup=##f/string^^J
+ oddHeaderMarkup=##f/string^^J
+ bookTitleMarkup = ##f/string^^J
+ scoreTitleMarkup = ##f/string^^J
+ ragged-bottom=##t/string^^J
+ ragged-last-bottom=##t/string^^J
+ between-system-padding = #0/string^^J
+ between-system-space = /withoutpt/the/lily!betweensystemspace\pt/string^^J
+ }/string^^J
+ >
+
+/egroup
+
+%D Here, we define our parameters:
+
+\newdimen\lily!linewidth
+\newdimen\lily!vsize
+\newdimen\lily!indent
+\newdimen\lily!betweensystemspace
+\newif\iflily!showempty
+\newif\iflily!align
+\newif\iflily!clef
+\newif\iflily!time
+\newif\iflily!barnumbers
+
+\newcounter\lily!figures
+
+%D Again, as usual, there is a \type{\setuplilypond} command
+%D that accepts the same parameters as \type{\lilypond} and
+%D \type{\startlilypond} do in their optional argument.
+
+\def\setuplilypond
+ {\bgroup
+ \catcode`\#=\@@other
+ \dosingleempty\dosetuplilypond}
+
+\def\dosetuplilypond[#1]%
+ {\egroup
+ \getparameters[\??lily][#1]}
+
+%D We set the following defaults:
+
+\setuplilypond
+ [staffsize=20,
+ indent=0pt,
+ betweensystemspace=54pt,
+ time=\v!yes,
+ clef=\v!yes,
+ align=?, % default depends on fragment=...
+ fragment=\v!no,
+ barnumbers=\v!no,
+ showempty=\v!no,
+ seriffont="TeX Gyre Schola", % LilyPond default font
+ sansfont="LMSans10",
+ monofont="LMTypewriter10",
+ tmpdir={./lilytemp},
+ imgdir={./lilypdfs}]
+%D
+%D If you want to know which fonts of your system LilyPond can see
+%D with which names, try \type{lilypond -dshow-available-fonts any}.
+%D (The 3rd parameter is necessary, but can be anything.)\par
+%D There are a lot of restrictions, e.g. no fonts from the \TeX\ tree (don't know why),
+%D only one face per font file etc.
+
+%D
+%D Check if temporary and image directories exist and create them if not:
+%D
+
+\def\tmpdir{\@@lilytmpdir} % for intermediate files
+\def\imgdir{\@@lilyimgdir} % for music PDFs
+
+\startluacode
+ if not lfs.isdir("\tmpdir") then
+ logs.report("LilyPond Warn ", "Temporary directory not found, trying to make '\tmpdir'")
+ lfs.mkdir("\tmpdir")
+ end
+ if not lfs.isdir("\imgdir") then
+ logs.report("LilyPond Warn ", "Image directory not found, trying to make '\imgdir'")
+ lfs.mkdir("\imgdir")
+ end
+\stopluacode
+
+%D
+%D \type{\startlilypond} is a multistage implementation, because
+%D end-of-line characters must be treated specially in the
+%D \type{\startlilypond} \dots\ \type{\stoplilypond} range.
+%D
+
+\def\startlilypond
+ {\bgroup
+ \catcode`\#=\@@other
+ \dosingleempty\dostartlilypond}
+
+\def\dostartlilypond[#1]%
+ {\obeylines
+ \dodostartlilypond[#1]}
+
+\long\def\dodostartlilypond[#1]#2\stoplilypond
+ {\egroup
+ \bgroup
+%D
+%D The default of the \type{linewidth} parameter is the local \type{\hsize}.
+%D
+ \setlocalhsize
+ \getparameters[\??lily][linewidth=\the\localhsize,height=\the\textheight,#1]%
+ \lily!linewidth\@@lilylinewidth
+ \lily!vsize\@@lilyheight
+ \lily!indent\@@lilyindent
+ \lily!betweensystemspace\@@lilybetweensystemspace
+%D
+%D The default of \type{align} depends on whether we typeset a fragment:
+%D
+ \doifelse\@@lilyalign\v!yes\lily!aligntrue\lily!alignfalse
+ \doif\@@lilyfragment\v!no{\doif\@@lilyalign{?}\lily!aligntrue}%
+ \doifelse\@@lilytime\v!yes\lily!timetrue\lily!timefalse
+ \doifelse\@@lilybarnumbers\v!yes\lily!barnumberstrue\lily!barnumbersfalse
+ \doifelse\@@lilyshowempty\v!yes\lily!showemptytrue\lily!showemptyfalse
+ \doifelse\@@lilyclef\v!yes\lily!cleftrue\lily!cleffalse
+%D
+%D We are using a counter to keep the different LilyPond pieces
+%D separate. This allows to typeset them only once, during the
+%D first run.
+%D
+%D TODO: This won't work any longer once we pass the remaining
+%D vertical space to LilyPond.
+%D
+ \doglobal\increment\lily!figures
+ \edef\lily!filename{\bufferprefix lilypond-\lily!figures}%
+ \edef\lily!tmpfilename{\tmpdir/\lily!filename.tmp}%
+ \edef\lily!img{\imgdir/\lily!filename.pdf}
+ \def\obeyedlines{\string^^J}%
+ \convertargument#2\to\ascii
+ \startexpanded
+ \noexpand\setbuffer[\lily!tmpfilename]%
+ \lily!prefix
+ \letterhash(set-global-staff-size \getvalue{\??lily staffsize})\string^^J%
+ \ifdefined\@@lilyfragment\lily!fragmentprefix\fi
+%D TODO: Option \quote{packed}
+ \ascii
+ \ifdefined\@@lilyfragment\lily!fragmentsuffix\fi
+ \noexpand\endbuffer
+ \stopexpanded
+%D
+%D In \LUATEX\ buffers are kept in memory
+%D in contrast to older flavours of \TeX\ where they're written to a
+%D file automatically. We have to require writing to a file explicitely
+%D with \type{\savebuffer}.
+%D
+ \writestatus{LilyPond}{\lily!filename}
+ \startluacode
+ buffers.save('\lily!tmpfilename')
+ if not lfs.isfile('\lily!tmpfilename') then
+ logs.report("LilyPond ERROR", "File '\lily!tmpfilename' was not written!")
+ end
+%D
+%D Generating a PDF directly previously created always a whole page, so we generate EPS first.
+%D In recent versions of LilyPond that gets converted to PDF immediately, but we check for that.
+%D
+%D It would be nice, if \type{-ddelete-intermediate-files} would delete all useless intermediate files.
+%D It would be even better, if mtxrun wouldn't declare non-existing files as \quotation{unchanged}. (Is that fixed now?)
+%D
+%D Remember: More possible options in \type{lily.scm}.
+%D
+ os.execute('mtxrun --ifchanged="\lily!tmpfilename" --exec bin:lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts -ddelete-intermediate-files -o"\tmpdir/\lily!filename" "\lily!tmpfilename"')
+ if not lfs.isfile('\tmpdir/\lily!filename.pdf') then
+ os.execute('mtxrun --ifchanged="\tmpdir/\lily!filename.eps" --exec bin:pstopdf "\tmpdir/\lily!filename.eps"')
+ end
+%D At least on Windows, Lua's \type{os.rename} won't overwrite existing files, so we need to remove them before.
+ if lfs.isfile('\lily!img') and lfs.isfile('\tmpdir/\lily!filename.pdf') then
+ os.remove('\lily!img')
+ end
+ os.rename('\tmpdir/\lily!filename.pdf', '\lily!img')
+ \stopluacode
+%D
+%D TODO: Get the relevant dimension directly from LilyPond,
+%D to place the instrument name into the left margin for
+%D short snippets as well. (Is that possible at all?)
+%D
+%D If we are not in the middle of some text, we have to check
+%D whether LilyPond created an image that is wider than requested:
+%D It places the instrument names in the left margin.
+%D
+ \ifvmode
+ \getfiguredimensions[\lily!img]%
+ \leavevmode
+ \!!dimenb\figurewidth
+ \ifdim\!!dimenb>\localhsize
+ \!!dimena=\localhsize
+ \advance\!!dimena-\!!dimenb
+ \noindent\hskip\!!dimena
+ \fi
+ \fi
+ \externalfigure[\lily!img]%
+ \egroup}
+
+%D For short snippets, we define an inline alternative to
+%D our start/stop pair:
+
+\def\lilypond {\dosingleempty\dolilypond}
+\def\dolilypond[#1]#2{\startlilypond[#1]#2\stoplilypond}
+
+\stopmodule
+
+\protect \doifnotmode{demo}{\endinput}
+
+
+%D End of file.
+%D
+%D Here follows a sample. (\type{context t-lilypond --mode=demo})
+
+\starttext
+
+\startbuffer[sample]
+\subject{Telemann, TWV 40:11}
+\startlilypond
+ \relative c' {
+ \set Staff.instrumentName = flute
+ \key fis \minor
+ \time 3/4
+ \partial 4
+ r8 fis'8 | fis4. cis8 a cis | fis, a cis fis a fis |
+ b, d fis b d b | eis,, gis cis eis gis b, |
+ a fis' gis, fis' cis eis | fis,4 r8
+ a' gis fis | e gis, a e' fis cis |
+ d fis, gis b e d | cis4 \trill r8
+ cis b a | b dis e gis cis, b |
+ a e' dis fis b, a | gis4 \trill r8
+ }
+\stoplilypond
+\stopbuffer
+
+The input
+\typebuffer[sample]
+is typeset as
+\getbuffer[sample]
+
+\type{\startlilypond} accepts options, as in\crlf
+\type{\startlilypond[staffsize=18, linewidth=14cm, indent=5cm, time=no, clef=no]}:
+\nobreak
+\startlilypond[staffsize=18,linewidth=14cm,indent=5cm,time=no,clef=no]
+ \relative c' {
+ \key fis \minor
+ \time 3/4
+ \partial 4
+ r8 fis'8 | fis4. cis8 a cis | fis, a cis fis a fis |
+ b, d fis b d b | eis,, gis cis eis gis b, |
+ a fis' gis, fis' cis eis | fis,4 r8
+ a' gis fis | e gis, a e' fis cis |
+ d fis, gis b e d | cis4 \trill r8
+ cis b a | b dis e gis cis, b |
+ a e' dis fis b, a | gis4 \trill r8
+ }
+\stoplilypond
+
+It is also possible to mix text and music:
+\lower 8.2pt\hbox{\lilypond[fragment=true,staffsize=16,time=no,clef=no]{g'}} is a g.
+
+TODO: The \type{\lower} in the example above should not be necessary.
+
+\subject{Starlight (round)}
+
+Here is a sample with lyrics:
+
+\startlilypond
+<<
+\context Staff = onlyone <<
+ \clef treble
+ \key a \major
+ \time 6/8
+ \context Voice = one {
+ \relative c'' {
+ a4.^\markup{1.} e' |
+ e8( d cis) b4. |
+ e4.^\markup{2.} d4 d8 |
+ cis( b) a b4 e,8 |
+ a4 a8 gis( a) b |
+ cis4 cis8 b( cis d) |
+ cis( d) e e4 e,8 |
+ fis4 fis8 gis4.
+ \bar ":|"
+ }
+ }
+>>
+\lyricsto one \new Lyrics {
+ \lyricmode {
+ Star -- light, star -- bright,
+ first star I see to -- night;
+ I wish I may, I wish I might
+ have the wish I wish to -- night.
+ }
+}
+>>
+
+\stoplilypond
+
+\stoptext
diff --git a/obsolete/macros/context/contrib/context-sgf/doc/context/third/sgf/README b/obsolete/macros/context/contrib/context-sgf/doc/context/third/sgf/README
new file mode 100644
index 0000000000..331ec51a16
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-sgf/doc/context/third/sgf/README
@@ -0,0 +1,7 @@
+Name of module: Go Module for ConTeXt
+Author: Wolfgang Schuster and Zhichu Chen
+
+Description: You can set go boards in your document.
+
+The module documentation is available in doc/context/third/go/t-go.pdf
+
diff --git a/obsolete/macros/context/contrib/context-sgf/doc/context/third/sgf/deadstone-lua.pdf b/obsolete/macros/context/contrib/context-sgf/doc/context/third/sgf/deadstone-lua.pdf
new file mode 100644
index 0000000000..44f33fafbe
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-sgf/doc/context/third/sgf/deadstone-lua.pdf
Binary files differ
diff --git a/obsolete/macros/context/contrib/context-sgf/doc/context/third/sgf/deadstone-mkii.pdf b/obsolete/macros/context/contrib/context-sgf/doc/context/third/sgf/deadstone-mkii.pdf
new file mode 100644
index 0000000000..db5ac6475f
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-sgf/doc/context/third/sgf/deadstone-mkii.pdf
Binary files differ
diff --git a/obsolete/macros/context/contrib/context-sgf/doc/context/third/sgf/deadstone-mkiv.pdf b/obsolete/macros/context/contrib/context-sgf/doc/context/third/sgf/deadstone-mkiv.pdf
new file mode 100644
index 0000000000..2602eaadb7
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-sgf/doc/context/third/sgf/deadstone-mkiv.pdf
Binary files differ
diff --git a/obsolete/macros/context/contrib/context-sgf/doc/context/third/sgf/t-deadstone.pdf b/obsolete/macros/context/contrib/context-sgf/doc/context/third/sgf/t-deadstone.pdf
new file mode 100644
index 0000000000..aecb9b7753
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-sgf/doc/context/third/sgf/t-deadstone.pdf
Binary files differ
diff --git a/obsolete/macros/context/contrib/context-sgf/doc/context/third/sgf/t-sgf.pdf b/obsolete/macros/context/contrib/context-sgf/doc/context/third/sgf/t-sgf.pdf
new file mode 100644
index 0000000000..d526398f5c
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-sgf/doc/context/third/sgf/t-sgf.pdf
Binary files differ
diff --git a/obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/deadstone.lua b/obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/deadstone.lua
new file mode 100644
index 0000000000..656de4e17c
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/deadstone.lua
@@ -0,0 +1,224 @@
+if not modules then modules = { } end modules ['deadstone'] = {
+ version = 0.100,
+ comment = "Dead stone calculator for go",
+ author = "Wolfgang Schuster",
+ copyright = "Public Domain",
+}
+
+--[[ldx--
+<p>This is the <l n='lua'/> version of my deadstone calculator.
+It is a nearly one to one copy of my original idea of my method,
+I developed to find the dead stones on the goban.</p>
+--ldx]]--
+
+laststone = 1
+
+--[[ldx--
+<p>The <ldx:function>clearboard</ldx:function> is called at the
+begin of a new board to initialize all fields with the value 0
+and the margins with the value 3. I need this values for the later
+calculations of the field states.</p>
+--ldx]]--
+
+function clearboard()
+ field = {}
+ for y=0,tex.count.boardsize+1 do
+ field[y] = {}
+ for x=0,tex.count.boardsize+1 do
+ if x==0 then
+ field[y][x] = { 3, 0 }
+ elseif x==tex.count.boardsize+1 then
+ field[y][x] = { 3, 0 }
+ elseif y==0 then
+ field[y][x] = { 3, 0 }
+ elseif y==tex.count.boardsize+1 then
+ field[y][x] = { 3, 0 }
+ else
+ field[y][x] = { 0, 0 }
+ end
+ end
+ end
+end
+
+--[[ldx--
+<p>To decide wheter I handle in the calculation a white or a black
+stone the state for stone and enemy depends of the current color.</p>
+<p>The value for marked depends also on the current stone color to
+reset already living stones in the last step back to the normal color.
+This could have been done also by checking the current stone color
+but two different values work without this test.</p>
+<p>The values for wall, error (should never happen) and dead is the
+same for both, black and white stones. There is no need to make a
+difference between them.</p>
+--ldx]]--
+
+function blackstone()
+ stone=1
+ enemy=2
+ wall=3
+ marked=4
+ error=6
+ dead=7
+end
+
+function whitestone()
+ stone=2
+ enemy=1
+ wall=3
+ marked=5
+ error=6
+ dead=7
+end
+
+--[[ldx--
+<p>The <ldx:function>doprocesstones</ldx:function> is used to call all
+subfunctions. It is called twice, once for the black stones and a second
+time for the white stones.</p>
+--ldx]]--
+
+function doprocesstones()
+ markstones()
+ deadstones()
+ -- for n=1,tex.count.deadcount
+ -- checkstones()
+ -- end
+ checkstones()
+ checkstones()
+ revertstones()
+end
+
+--[[ldx--
+<p>The order in which the last <ldx:function>doporocesstones</ldx:function>
+ist called depends on the current placed stones.</p>
+<p>This mean if the last stone was a black one, we look at the begin for
+dead white stone and reverse if the last stone was a white one.</p>
+<p>We could check the current stone color with the variable
+<ldx:variable>laststone</ldx:variable> and test for the numeric value.</p>
+--ldx]]--
+
+function processtones()
+ -- we placed a black stone
+ if laststone==1 then
+ processwhitetones()
+ processblackstones()
+ -- we placed a white stone
+ elseif laststone==2 then
+ processblackstones()
+ processwhitetones()
+ end
+end
+
+function processblackstones()
+ blackstone()
+ doprocesstones()
+end
+
+function processwhitetones()
+ whitestone()
+ doprocesstones()
+end
+
+--[[ldx--
+<p>The <ldx:function>markstones</ldx:function> mark the stones if they
+have the right stones on their sides or let them keep untouched.</p>
+--ldx]]--
+
+function markstones()
+ for y=1,tex.count.boardsize do
+ for x=1,tex.count.boardsize do
+ if field[y][x][1]==stone then
+ if (field[y][x-1][1]==wall or field[y][x-1][1]==enemy or field[y][x-1][1]==marked)
+ and (field[y][x+1][1]==wall or field[y][x+1][1]==enemy or field[y][x+1][1]==stone)
+ and (field[y-1][x][1]==wall or field[y-1][x][1]==enemy or field[y-1][x][1]==marked)
+ and (field[y+1][x][1]==wall or field[y+1][x][1]==enemy or field[y+1][x][1]==stone)
+ then
+ field[y][x] = { marked, field[y][x][2] }
+ end
+ end
+ end
+ end
+end
+
+--[[ldx--
+<p>The <ldx:function>deadstones</ldx:function> set stones with the value marked
+to dead if the conditions in the function are true.</p>
+--ldx]]--
+
+function deadstones()
+ for y=tex.count.boardsize,1,-1 do
+ for x=tex.count.boardsize,1,-1 do
+ if field[y][x][1]==marked then
+ if (field[y][x-1][1]==wall or field[y][x-1][1]==enemy or field[y][x-1][1]==marked)
+ and (field[y][x+1][1]==enemy or field[y][x+1][1]==wall or field[y][x+1][1]==dead)
+ and (field[y+1][x][1]==enemy or field[y+1][x][1]==wall or field[y+1][x][1]==dead)
+ then
+ field[y][x] = { dead, field[y][x][2] }
+ end
+ end
+ end
+ end
+end
+
+--[[ldx--
+<p>Because the <ldx:function>deadstones</ldx:function> can sometimes set
+already living stones to dead. To prevent this in the final result this
+function looks through all stones with a loop in reverse direction and
+reset the values to their original value if the stone is not dead and
+should remain on the board. The function is currently called twice within
+processtones but this can be changed with the counter deadcount.</p>
+--ldx]]--
+
+function checkstones()
+ for y=1,tex.count.boardsize do
+ for x=1,tex.count.boardsize do
+ if field[y][x][1]==marked then
+ field[y][x] = { stone, field[y][x][2] }
+ elseif field[y][x][1]==dead then
+ if (field[y][x-1][1]==dead or field[y][x-1][1]==enemy or field[y][x-1][1]==wall)
+ and (field[y][x+1][1]==dead or field[y][x+1][1]==enemy or field[y][x+1][1]==wall)
+ and (field[y-1][x][1]==dead or field[y-1][x][1]==enemy or field[y-1][x][1]==wall)
+ and (field[y+1][x][1]==dead or field[y+1][x][1]==enemy or field[y+1][x][1]==wall)
+ then
+ field[y][x] = { dead, field[y][x][2] }
+ else
+ field[y][x] = { stone, field[y][x][2] }
+ end
+ end
+ end
+ end
+end
+
+--[[ldx--
+<p>The last thing to do after all dead stones are found on the board
+is to remove them and to reset all other stones which are still in a
+marked state or we will get wrong input for the next move.</p>
+--ldx]]--
+
+function revertstones()
+ for y=1,tex.count.boardsize do
+ for x=1,tex.count.boardsize do
+ if field[y][x][1]==marked then
+ field[y][x] = { stone, field[y][x][2] }
+ elseif field[y][x][1]==dead then
+ appendtodeadstonelist(y,x,stone,field[y][x][2]) -- append to deadstonelist
+ field[y][x] = { 0, 0 } -- before reseting the field
+ end
+ end
+ end
+end
+
+--[[ldx--
+<p>To use the dead stones we found in this run on the board for later
+use they are saved in two commalist, one for white stones and another
+one for the black ones. They can be used by other macros, the only thing
+here is done is to append the removed stones in the current run to the
+already romved stones in one of the former calculations.</p>
+--ldx]]--
+
+function appendtodeadstonelist(row,column,color,count)
+ if color==1 then
+ tex.print("\\expanded{\\appendtocommalist{{" .. row .. ":" .. column .. ":1:" .. count .. "}}}\\deadblackstones")
+ elseif color==2 then
+ tex.print("\\expanded{\\appendtocommalist{{" .. row .. ":" .. column .. ":2:" .. count .. "}}}\\deadwhitestones")
+ end
+end
diff --git a/obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/deadstone.mkii b/obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/deadstone.mkii
new file mode 100644
index 0000000000..7698017a0b
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/deadstone.mkii
@@ -0,0 +1,343 @@
+%D \module
+%D [ file=deadstone,
+%D version=2007.07.31,
+%D title=\CONTEXT\ User Module,
+%D subtitle=Dead stone calculator for go,
+%D author=Wolfgang Schuster,
+%D email=schuster.wolfgang@googlemail.com,
+%D date=\currentdate,
+%D copyright=Public Domain]
+
+\writestatus{loading}{Context User Module / Dead stone calculator for go}
+
+\unprotect
+
+%D This is the \TEX\ version of the dead stone calculator for the
+%D go module. They are a copy of the original idea of the algorithm
+%D to find dead stones with a few modifications the author needed
+%D to make them work.
+
+%D \macros{clearboard}
+%D
+%D The \tex{clearboard} set all fields with a intial value of~0 for
+%D the empty fields and a value of~3 for the margins. The command
+%D can also be used to clear a board and remove all set values.
+
+\def\clearboard
+ {\dorecurse{\numexpr\boardsize+\plustwo\relax}
+ {\edef\boardrow{\the\numexpr\recurselevel-\plusone\relax}%
+ \dorecurse{\numexpr\boardsize+\plustwo\relax}
+ {\edef\boardcolumn{\the\numexpr\recurselevel-\plusone\relax}%
+ \presetcurrentstone
+ {\ifnum\boardrow=\zerocount
+ \plusthree
+ \else\ifnum\boardrow=\numexpr\boardsize+\plusone\relax
+ \plusthree
+ \else\ifnum\boardcolumn=\zerocount
+ \plusthree
+ \else\ifnum\boardcolumn=\numexpr\boardsize+\plusone\relax
+ \plusthree
+ \else
+ \zerocount
+ \fi\fi\fi\fi}}}}
+
+\let\laststone\plusone
+
+%D \macros{addstone}
+%D
+%D The \tex{addstone} is the used to place a stone on the board.
+%D The three arguments keeps the current row, the column and the
+%D stone color. The values for the row and the column have to be
+%D a number, the stone color has do be given with the two values
+%D \type{B} for black and \type{W} for white.
+
+\def\addstone(#1:#2:#3)%
+ {\global\advance\stonecount\plusone
+ \ifx#3B
+ \global\let\laststone\plusone
+ \else\ifx#3W
+ \global\let\laststone\plustwo
+ \fi\fi
+ \setevalue{field:\number#1:\number#2}%
+ {\ifx#3B
+ \plusone
+ \else\ifx#3W
+ \plustwo
+ \fi\fi:\number\stonecount}}
+
+\def\blackstone
+ {\let\stone \plusone
+ \let\enemy \plustwo
+ \let\wall \plusthree
+ \let\marked\plusfour
+ \let\dead \plusseven}
+
+\def\whitestone
+ {\let\stone \plustwo
+ \let\enemy \plusone
+ \let\wall \plusthree
+ \let\marked\plusfive
+ \let\dead \plusseven}
+
+\def\firstofcurrentstone #1:#2\relax{\number#1}
+\def\secondofcurrentstone#1:#2\relax{\number#2}
+
+\def\currentstone
+ {\@EA\@EA\@EA\@EA\@EA\@EA\@EA\firstofcurrentstone\getvalue{field:\boardrow:\boardcolumn}\relax}
+
+\def\currentstonenumber
+ {\@EA\@EA\@EA\@EA\@EA\@EA\@EA\secondofcurrentstone\getvalue{field:\boardrow:\boardcolumn}\relax}
+
+\def\leftstone
+ {\@EA\@EA\@EA\@EA\@EA\@EA\@EA\firstofcurrentstone\getvalue{field:\boardrow:\the\numexpr\boardcolumn-\plusone\relax}\relax}
+
+\def\rightstone
+ {\@EA\@EA\@EA\@EA\@EA\@EA\@EA\firstofcurrentstone\getvalue{field:\boardrow:\the\numexpr\boardcolumn+\plusone\relax}\relax}
+
+\def\topstone
+ {\@EA\@EA\@EA\@EA\@EA\@EA\@EA\firstofcurrentstone\getvalue{field:\the\numexpr\boardrow-\plusone\relax:\boardcolumn}\relax}
+
+\def\bottomstone
+ {\@EA\@EA\@EA\@EA\@EA\@EA\@EA\firstofcurrentstone\getvalue{field:\the\numexpr\boardrow+\plusone\relax:\boardcolumn}\relax}
+
+\newif\iftracingstones
+
+\def\doprocessstones
+ {\markstones
+ \iftracingstones\placeterminalboard\fi
+ \deadstones
+ \dorecurse\deadcount\checkstones
+ \revertstones}
+
+\def\processtones
+ {\ifcase\laststone
+ \or\processwhitetones\processblackstones
+ \or\processblackstones\processwhitetones
+ \fi}
+
+\def\processblackstones
+ {\blackstone
+ \doprocessstones}
+
+\def\processwhitetones
+ {\whitestone
+ \doprocessstones}
+
+\def\setstonemark
+ {\setcurrentstone{\ifcase\stone\or\plusfour\or\plusfive\else\plussix\fi}}
+
+%D \macros{markstones}
+%D
+%D The first internal command is \tex{markstones}, it set the stone value
+%D to marked if all consitions are true, otherwise the state will remain
+%D with the old value and we check the next one.
+
+\def\markbottomstone
+ {\ifcase\bottomstone
+ \or\setstonemark
+ \or\setstonemark
+ \or\setstonemark
+ \fi}
+
+\def\markrightstone
+ {\ifcase\rightstone
+ \or\markbottomstone
+ \or\markbottomstone
+ \or\markbottomstone
+ \fi}
+
+\def\marktopstone
+ {\ifcase\topstone
+ \or\ifnum\stone=\plusone\else\markrightstone\fi
+ \or\ifnum\stone=\plustwo\else\markrightstone\fi
+ \or\markrightstone
+ \or\ifnum\stone=\plusone\relax\markrightstone\fi
+ \or\ifnum\stone=\plustwo\relax\markrightstone\fi
+ \fi}
+
+\def\markstones
+ {\dorecurse\boardsize
+ {\edef\boardrow{\recurselevel}%
+ \dorecurse\boardsize
+ {\edef\boardcolumn{\recurselevel}%
+ \ifnum\currentstone=\stone
+ \ifcase\leftstone
+ \or\ifnum\stone=\plusone\else\marktopstone\fi
+ \or\ifnum\stone=\plustwo\else\marktopstone\fi
+ \or\marktopstone
+ \or\ifnum\stone=\plusone\relax\marktopstone\fi
+ \or\ifnum\stone=\plustwo\relax\marktopstone\fi
+ \fi
+ \fi}}}
+
+%D \macros{deadstones}
+%D
+%D The \tex{deadstones} macro check the marked stones from the last
+%D step for a dead state. We will now state from the right bottom and
+%D go to the left top corner.
+
+\def\deadleftstone
+ {\ifcase\leftstone
+ \or\ifnum\stone=\plusone\else\setdeadstone\fi
+ \or\ifnum\stone=\plustwo\else\setdeadstone\fi
+ \or\setdeadstone
+ \or\setdeadstone
+ \or\setdeadstone
+ \fi}
+
+\def\deadbottomstone
+ {\ifcase\bottomstone
+ \or\ifnum\stone=\plusone\else\deadleftstone\fi
+ \or\ifnum\stone=\plustwo\else\deadleftstone\fi
+ \or\deadleftstone
+ \or\resetdeadstone
+ \or\resetdeadstone
+ \or\resetdeadstone
+ \or\deadleftstone
+ \fi}
+
+\def\deadstones
+ {\dostepwiserecurse\boardsize\plusone\minusone
+ {\edef\boardrow{\recurselevel}%
+ \dostepwiserecurse\boardsize\plusone\minusone
+ {\edef\boardcolumn{\recurselevel}%
+ \ifnum\currentstone=\marked
+ \ifcase\rightstone
+ \or\ifnum\stone=\plusone\else\deadbottomstone\fi
+ \or\ifnum\stone=\plustwo\else\deadbottomstone\fi
+ \or\deadbottomstone
+ \or
+ \or
+ \or
+ \or\deadbottomstone
+ \fi
+ \fi}}}
+
+%D \macros{revertstones}
+%D
+%D The \tex{revertstones} is called after all dead stones are and we will
+%D make the board ready for the next move. There are still fields with the
+%D value marked on the board and we have to make sure they get their normal
+%D state with the values for stone and enemy.
+
+\def\revertstones
+ {\dorecurse\boardsize
+ {\edef\boardrow{\recurselevel}%
+ \dorecurse\boardsize
+ {\edef\boardcolumn{\recurselevel}%
+ \ifcase\currentstone
+ \or
+ \or
+ \or
+ \or\resetstone
+ \or\resetstone
+ \or
+ \or\removedeadstone
+ \fi}}}
+
+\def\presetcurrentstone#1%
+ {\setxvalue{field:\boardrow:\boardcolumn}{\number#1:0}}
+
+\def\setcurrentstone#1%
+ {\setxvalue{field:\boardrow:\boardcolumn}{\number#1:\number\currentstonenumber}}
+
+\def\setdeadstone
+ {\setcurrentstone{\plusseven}}
+
+\def\resetdeadstone
+ {\setcurrentstone{\ifcase\stone\or\plusone\or\plustwo\else\plussix\fi}}
+
+\let\resetstone\resetdeadstone
+
+\def\keepdeadstone
+ {\setcurrentstone{\ifcase\stone\or\plusseven\or\plusseven\else\plussix\fi}}
+
+\def\removedeadstone
+ {\appendtodeadstonelist
+ \setcurrentstone{\zerocount}}
+
+%D \macros{deadblackstones,deadwhitestones}
+%D
+%D The dead stones we found in one run are saved in two commalists, their names
+%D are \tex{deadblacktones} and \tex{deadwhitestones}. They can be used by users
+%D to their positions and numbers in their own macros.
+
+\def\appendtodeadstonelist
+ {\ifcase\stone
+ \or\expanded{\appendtocommalist{{\boardrow:\boardcolumn:\number\stone:\currentstonenumber}}}\deadblackstones
+ \or\expanded{\appendtocommalist{{\boardrow:\boardcolumn:\number\stone:\currentstonenumber}}}\deadwhitestones
+ \fi}
+
+\def\cleardeadstonelist
+ {\let\deadblackstones\empty
+ \let\deadwhitestones\empty}
+
+%D \macros{checkstones}
+%D
+%D As one of the first examples has shown sometimes still living stones
+%D get the value dead in the last step and we have to check for such
+%D a case. Tests has shown this need to be done at least two times and
+%D make sure this can be increased without problems users can change this
+%D with the counter \tex{deadcount} but you should also know increasing
+%D this counter will result in longer processing time.
+
+\def\checkdeadstones
+ {\ifcase\leftstone
+ \or\ifnum\stone=\plusone\relax\resetdeadstone\else\checktopdeadstone\fi
+ \or\ifnum\stone=\plustwo\relax\resetdeadstone\else\checktopdeadstone\fi
+ \or\checktopdeadstone
+ \or\resetdeadstone
+ \or\resetdeadstone
+ \or\resetdeadstone
+ \or\checktopdeadstone
+ \fi}
+
+\def\checktopdeadstone
+ {\ifcase\topstone
+ \or\ifnum\stone=\plusone\relax\resetdeadstone\else\checkrightdeadstone\fi
+ \or\ifnum\stone=\plustwo\relax\resetdeadstone\else\checkrightdeadstone\fi
+ \or\checkrightdeadstone
+ \or\resetdeadstone
+ \or\resetdeadstone
+ \or\resetdeadstone
+ \or\checkrightdeadstone
+ \fi}
+
+\def\checkrightdeadstone
+ {\ifcase\rightstone
+ \or\ifnum\stone=\plusone\relax\resetdeadstone\else\checkbottomdeadstone\fi
+ \or\ifnum\stone=\plustwo\relax\resetdeadstone\else\checkbottomdeadstone\fi
+ \or\checkbottomdeadstone
+ \or\resetdeadstone
+ \or\resetdeadstone
+ \or\resetdeadstone
+ \or\checkbottomdeadstone
+ \fi}
+
+\def\checkbottomdeadstone
+ {\ifcase\bottomstone
+ \or\ifnum\stone=\plusone\relax\resetdeadstone\else\keepdeadstone\fi
+ \or\ifnum\stone=\plustwo\relax\resetdeadstone\else\keepdeadstone\fi
+ \or\keepdeadstone
+ \or\resetdeadstone
+ \or\resetdeadstone
+ \or\resetdeadstone
+ \or\keepdeadstone
+ \fi}
+
+\def\checkstones
+ {\dorecurse\boardsize
+ {\edef\boardrow{\recurselevel}%
+ \dorecurse\boardsize
+ {\edef\boardcolumn{\recurselevel}%
+ \ifcase\currentstone
+ \or
+ \or
+ \or
+ \or\ifnum\stone=\plusone\relax\resetdeadstone\fi
+ \or\ifnum\stone=\plustwo\relax\resetdeadstone\fi
+ \or
+ \or\checkdeadstones
+ \fi}}}
+
+\protect \endinput
diff --git a/obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/deadstone.mkiv b/obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/deadstone.mkiv
new file mode 100644
index 0000000000..6b0513fb38
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/deadstone.mkiv
@@ -0,0 +1,63 @@
+%D \module
+%D [ file=deadstone,
+%D version=2007.07.31,
+%D title=\CONTEXT\ User Module,
+%D subtitle=Dead stone calculator for go,
+%D author=Wolfgang Schuster,
+%D email=schuster.wolfgang@googlemail.com,
+%D date=\currentdate,
+%D copyright=Public Domain]
+
+\unprotect
+
+%D This is the \MKIV\ part of the dead stone calculator, it was
+%D written to get rid of tex \TEX\ workarounds used in the \MKII\
+%D version. If you want to understand how the algoritm works you
+%D should use the \LUA\ implementation.
+%D
+%D The functions to calculate the current state of the stones are
+%D saved in a seperate \LUA\ file, loading this file is the first
+%D thing we do here.
+
+\ctxloadluafile{deadstone}{}
+
+%D The \tex{clearboard} command is only a call to the \LUA\
+%D implementation and no longer a \TEX\ loop as in the first version.
+
+\def\clearboard{\ctxlua{clearboard()}}
+
+\def\processtones{\ctxlua{processtones()}}
+
+%D \macros{addstone}
+%D
+%D The \tex{addstone} macro is shorter as in the \MKII\ version because
+%D I can now use \tex{doifelse} and can avoid the low level \tex{ifx}
+%D test as needed before. I can now also pass laststone as argument for
+%D \tex{ctxlua} and prevent a extra \tex{ifx} as before.
+
+\def\addstone(#1:#2:#3)%
+ {\global\advance\stonecount\plusone
+ \doifelse{#3}{B}
+ {\ctxlua{field[#1][#2] = { 1, tex.count.stonecount }; laststone = 1}}
+ {\doif{#3}{W}
+ {\ctxlua{field[#1][#2] = { 2, tex.count.stonecount }; laststone = 2}}}}
+
+\def\currentstone
+ {\ctxlua{tex.print(field[\boardrow][\boardcolumn][1])}}
+
+\def\currentstonenumber
+ {\ctxlua{tex.print(field[\boardrow][\boardcolumn][2])}}
+
+%D \macros{cleardeadstonelist}
+%D
+%D This is the only pure \TEX\ command I use in this module, all other
+%D commands are only wrappers for the \LUA\ part but I need this because
+%D the two commands \tex{deadblackstones} and \tex{deadwhitestones} can
+%D be used by other macros and this seems to be the best solution I found
+%D for the moment.
+
+\def\cleardeadstonelist
+ {\let\deadblackstones\empty
+ \let\deadwhitestones\empty}
+
+\protect
diff --git a/obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/go-view-test-1.tex b/obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/go-view-test-1.tex
new file mode 100644
index 0000000000..cbecb8ea35
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/go-view-test-1.tex
@@ -0,0 +1,27 @@
+\usemodule[go]
+
+\starttext
+
+\setupboard
+ [calculate=yes,
+ alternative=a]
+
+\startSGF
+;B[jj];W[ji];B[jh];W[ij];B[ii];W[jk];B[ki];W[kj];B[lj];W[ji];B[kk];W[lk]
+\stopSGF
+
+\setupboard
+ [alternative=b]
+
+\startSGF
+;B[jj];W[ji];B[jh];W[ij];B[ii];W[jk];B[ki];W[kj];B[lj];W[ji];B[kk];W[lk]
+\stopSGF
+
+\setupboard
+ [alternative=c]
+
+\startSGF
+;B[jj];W[ji];B[jh];W[ij];B[ii];W[jk];B[ki];W[kj];B[lj];W[ji];B[kk];W[lk]
+\stopSGF
+
+\stoptext
diff --git a/obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/go-view-test-2.tex b/obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/go-view-test-2.tex
new file mode 100644
index 0000000000..e01d7b3c2a
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/go-view-test-2.tex
@@ -0,0 +1,27 @@
+\usemodule[go]
+
+\starttext
+
+\setupboard
+ [calculate=yes]
+
+\startSGF
+;B[qd];W[cp];B[pp];W[dc];B[ep];W[od];B[cq];W[de];B[oc];W[nc]
+;B[pc];W[nd];B[qf];W[bq];B[dq];W[bo];B[iq];W[jd];B[dm];W[cn]
+;B[dn];W[nq];B[np];W[op];B[oo];W[oq];B[pq];W[po];B[qo];W[pn]
+;B[mp];W[qn];B[mq];W[ro];B[rq];W[qh];B[nn];W[nl];B[lb];W[mb]
+;B[lc];W[ic];B[le];W[pe];B[qe];W[og];B[kf];W[if];B[kh];W[lg]
+;B[jf];W[ig];B[jh];W[hi];B[mi];W[oi];B[mk];W[nj];B[mj];W[ch]
+;B[ei];W[hk];B[eg];W[fh];B[eh];W[cf];B[ci];W[cj];B[bi];W[dj]
+;B[ej];W[di];B[cg];W[bg];B[bh];W[dg];B[dh];W[cg];B[bk];W[bj]
+;B[dk];W[ah];B[nk];W[ok];B[ol];W[pl];B[hm];W[il];B[im];W[kl]
+;B[ml];W[fk];B[gj];W[fj];B[fi];W[gi];B[fl];W[jm];B[jk];W[jl]
+;B[ek];W[gk];B[br];W[ar];B[bs];W[do];B[bm];W[eo];B[bn];W[fo]
+;B[gp];W[hp];B[gq];W[go];B[fm];W[io];B[jn];W[hq];B[gr];W[hr]
+;B[jq];W[kq];B[kr];W[kp];B[jr];W[lr];B[lq];W[mr];B[kn];W[jp]
+;B[ls];W[nr];B[ns];W[os];B[ks];W[fp];B[fq];W[er];B[eq];W[dr]
+;B[cr];W[ds];B[fs];W[hs];B[gs];W[ho];B[es];W[in];B[ck];W[lm]
+;B[ln];W[mm];B[nm];W[mn];B[lo]
+\stopSGF
+
+\stoptext
diff --git a/obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/go-view-test-3.tex b/obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/go-view-test-3.tex
new file mode 100644
index 0000000000..9b53493f20
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/go-view-test-3.tex
@@ -0,0 +1,21 @@
+\usemodule[go]
+
+\starttext
+
+\setupboard
+ [calculate=yes,
+ alternative=b]
+
+\startSGF
+;B[jj];W[ji];B[jh];W[ij];B[ii];W[jk];B[ki];W[kj];B[lj];W[ji];B[kk];W[lk];B[jj]
+\stopSGF
+
+\setupboard
+ [conversion=stone 1,
+ size=small]
+
+\startSGF
+;B[de];B[ed];W[ee];B[ef];B[fe]
+\stopSGF
+
+\stoptext
diff --git a/obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/go-view-test-4.tex b/obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/go-view-test-4.tex
new file mode 100644
index 0000000000..644e7acac1
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/go-view-test-4.tex
@@ -0,0 +1,34 @@
+\usemodule[go]
+
+\starttext
+
+\setupboard
+ [calculate=yes]
+
+\startSGF
+;B[ji];W[jl];B[ij];W[ik];B[kj];W[kk];B[jk];W[jj]
+;B[jk];W[jj];B[jk];W[jj];B[jk];W[jj];B[jk];W[jj]
+;B[jk];W[jj];B[jk];W[jj];B[jk];W[jj];B[jk];W[jj]
+;B[jk];W[jj];B[jk];W[jj];B[jk];W[jj];B[jk];W[jj]
+;B[jk];W[jj];B[jk];W[jj];B[jk];W[jj];B[jk];W[jj]
+\stopSGF
+
+\setupboard
+ [alternative=b]
+
+\startSGF
+;B[ji];W[jl];B[ij];W[ik];B[kj];W[kk];B[jk];W[jj]
+;B[jk];W[jj];B[jk];W[jj];B[jk];W[jj];B[jk];W[jj]
+;B[jk];W[jj];B[jk];W[jj];B[jk];W[jj];B[jk];W[jj]
+;B[jk];W[jj];B[jk];W[jj];B[jk];W[jj];B[jk];W[jj]
+;B[jk];W[jj];B[jk];W[jj];B[jk];W[jj];B[jk];W[jj]
+;B[jk];W[jj];B[jk];W[jj];B[jk];W[jj];B[jk];W[jj]
+;B[jk];W[jj];B[jk];W[jj];B[jk];W[jj];B[jk];W[jj]
+;B[jk];W[jj];B[jk];W[jj];B[jk];W[jj];B[jk];W[jj]
+;B[jk];W[jj];B[jk];W[jj];B[jk];W[jj];B[jk];W[jj]
+;B[jk];W[jj];B[jk];W[jj];B[jk];W[jj];B[jk];W[jj]
+;B[jk];W[jj];B[jk];W[jj];B[jk];W[jj];B[jk];W[jj]
+;B[jk];W[jj];B[jk];W[jj];B[jk];W[jj];B[jk];W[jj]
+\stopSGF
+
+\stoptext
diff --git a/obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/go-view-test-5.tex b/obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/go-view-test-5.tex
new file mode 100644
index 0000000000..b7c55fd1de
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/go-view-test-5.tex
@@ -0,0 +1,21 @@
+\usemodule[go]
+
+\starttext
+
+\startSGF[printable=yes]
+;B[jj];W[ji];B[jh];W[ij];B[ii];W[jk];B[ki];W[kj];B[lj];W[ji];B[kk];W[lk];B[jj]
+\stopSGF
+
+\startSGF[printable=no]
+;B[jj];W[ji];B[jh];W[ij];B[ii];W[jk];B[ki];W[kj];B[lj];W[ji];B[kk];W[lk];B[jj]
+\stopSGF
+
+\startSGF[printable=no,calculate=yes]
+;B[jj];W[ji];B[jh];W[ij];B[ii];W[jk];B[ki];W[kj];B[lj];W[ji];B[kk];W[lk];B[jj]
+\stopSGF
+
+\startSGF
+;B[jj];W[ji];B[jh];W[ij];B[ii];W[jk];B[ki];W[kj];B[lj];W[ji];B[kk];W[lk];B[jj]
+\stopSGF
+
+\stoptext
diff --git a/obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/t-deadstone.tex b/obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/t-deadstone.tex
new file mode 100644
index 0000000000..dab8ad9f3d
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/t-deadstone.tex
@@ -0,0 +1,90 @@
+%D \module
+%D [ file=t-deadstone,
+%D version=2007.07.31,
+%D title=\CONTEXT\ User Module,
+%D subtitle=Dead stone calculator for go,
+%D author=Wolfgang Schuster,
+%D email=schuster.wolfgang@googlemail.com,
+%D date=\currentdate,
+%D copyright=Public Domain]
+
+
+\writestatus{loading}{Context User Module / Dead stone calculator for go}
+
+\unprotect
+
+\newcount\boardsize
+\newcount\deadcount
+\newcount\stonecount
+
+\chardef\plussix =6
+\chardef\plusseven=7
+
+\boardsize=19
+\deadcount=2
+
+%D \macros{placeboard,placeterminalboard}
+%D
+%D The following two commands can be used to draw a simple board with
+%D the current state, \tex{placeboard} is only used for testing the module
+%D and let me see the current values of every node.
+%D
+%D The second board is intended for tracing the output and calculations
+%D of my macros on the terminal and will also appear in the log file
+%D if the user has it enabled. It use a symbols instead of numeric values
+%D for the output.
+%D
+%D Only meant for my test files and not for real output. I need another
+%D name to prevent a clash with another modules.
+
+\def\intersctionfield{.} % was previously 0
+\def\blackfield {X} % was previously 1
+\def\whitefield {O} % was previously 2
+\def\fieldstyle {\tt}
+
+\def\placeboard
+ {\dorecurse{\the\boardsize}
+ {\edef\boardrow{\recurselevel}%
+ \hbox{\dorecurse{\the\boardsize}
+ {\edef\boardcolumn{\recurselevel}%
+ \hbox\!!to1em
+ {\hss\fieldstyle % switched from roman to mono
+ \ifcase\currentstone\relax
+ \intersctionfield\or
+ \blackfield \or
+ \whitefield \or
+ 3\ignorespaces \or
+ 4\ignorespaces \or
+ 5\ignorespaces \or
+ 6\ignorespaces \or
+ 7\ignorespaces \fi\hss}}}}}
+
+%D Todo:
+%D
+%D \startitemize[intro]
+%D \item header above every board
+%D \item empty line before and after every board
+%D \item frame for the baord on all four sides
+%D \stopitemize
+
+\def\placeterminalboard
+ {\newlinechar=`\^^J
+ \message{^^J}% start a new line before we place the board
+ \dorecurse{\the\boardsize}
+ {\edef\boardrow{\recurselevel}%
+ \edef\zahl{ }% put a space to the left of the line
+ \dorecurse{\the\boardsize}
+ {\edef\boardcolumn{\recurselevel}%
+ \edef\zahl
+ {\zahl
+ \ifcase\currentstone
+ \intersctionfield\space\or
+ \blackfield \space\or
+ \whitefield \space\fi}}
+ \message{\zahl^^J}}} % place the current line and move to the next
+
+%D Loading of the mkii and mkiv files.
+
+\loadmarkfile{deadstone}
+
+\protect \endinput
diff --git a/obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/t-go.tex b/obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/t-go.tex
new file mode 100644
index 0000000000..f527aacfd5
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/t-go.tex
@@ -0,0 +1,16 @@
+%D \module
+%D [ file=t-go,
+%D version=2007.09.09,
+%D title=\CONTEXT\ User Module,
+%D subtitle=Go Module,
+%D author={Zhichu Chen \& Wolfgang Schuster},
+%D date=\currentdate,
+%D copyright=Public Domain]
+
+\writestatus{loading}{Context User Module / Go Module}
+
+\unprotect
+
+\usemodule[sgf]
+
+\protect \endinput
diff --git a/obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/t-sgf-generic.tex b/obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/t-sgf-generic.tex
new file mode 100644
index 0000000000..c703e99061
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/t-sgf-generic.tex
@@ -0,0 +1,108 @@
+%D \module
+%D [ file=t-go-generic,
+%D version=2007.08.15,
+%D title=\CONTEXT\ User Module,
+%D subtitle=Go extensions,
+%D author={Zhichu Chen \& Wolfgang Schuster},
+%D date=\currentdate,
+%D copyright=Public Domain]
+
+\writestatus{loading}{Context User Module / Go extensions}
+
+\unprotect
+
+\startvariables all
+ game: game
+ stone: stone
+ black: black
+ white: white
+\stopvariables
+
+\startconstants all
+ printable: printable
+\stopconstants
+
+\def\????bd{@@@@bd} % BoarD
+
+\newif\ifhighlightlabel \highlightlabeltrue
+
+\def\dosetupboardsize[#1]%
+ {\assigndimension{#1}\boardsize{9}{13}{19}}
+
+\def\setupboardsize
+ {\dosingleargument\dosetupboardsize}
+
+\def\dosetupboard[#1][#2]%
+ {\ifsecondargument
+ \getparameters[\????bd#1][#2]%
+ \else
+ \getparameters[\????bd][#1]%
+ \setupboardsize[\@@@@bdsize]%
+ \fi}
+
+\def\setupboard
+ {\dodoubleempty\dosetupboard}
+
+\def\charactertonumber#1%
+ {\ifx#1a1\else
+ \ifx#1b2\else
+ \ifx#1c3\else
+ \ifx#1d4\else
+ \ifx#1e5\else
+ \ifx#1f6\else
+ \ifx#1g7\else
+ \ifx#1h8\else
+ \ifx#1i9\else
+ \ifx#1j10\else
+ \ifx#1k11\else
+ \ifx#1l12\else
+ \ifx#1m13\else
+ \ifx#1n14\else
+ \ifx#1o15\else
+ \ifx#1p16\else
+ \ifx#1q17\else
+ \ifx#1r18\else
+ \ifx#1s19\else
+ \ifx#1t20\else
+ \ifx#1u21\else
+ \ifx#1v22\else
+ \ifx#1w23\else
+ \ifx#1x24\else
+ \ifx#1y25\else
+ \ifx#1z26\fi\fi
+ \fi\fi\fi\fi\fi
+ \fi\fi\fi\fi\fi
+ \fi\fi\fi\fi\fi
+ \fi\fi\fi\fi\fi
+ \fi\fi\fi\fi}
+
+\def\sgfcharacter#1%
+ {\ifcase#1\unknowncharacter
+ \or A\or B\or C\or D\or E\or F\or G\or H\or J\or K\or L\or M\or N%
+ \or O\or P\or Q\or R\or S\or T\or U\or V\or W\or X\or Y\or Z\or
+ \else
+ \unknowncharacter
+ \fi}
+
+\setupboard
+ [\c!alternative=\v!a,
+ \c!calculate=\v!no,
+ \c!color=\v!black,
+ \c!conversion=stone 2,
+ \c!distance=\boardunit,
+ \c!n=3,
+ \c!printable=\v!no,
+ \c!size=\v!big,
+ \c!style=\v!sans]
+
+\setupboard
+ [\v!black]
+ [\c!style=\@@@@bdstyle,
+ \c!color=\v!white]
+
+\setupboard
+ [\v!white]
+ [\c!style=\@@@@bdstyle,
+ \c!color=\v!black]
+
+\protect \endinput
diff --git a/obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/t-sgf-library.tex b/obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/t-sgf-library.tex
new file mode 100644
index 0000000000..972f24e718
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/t-sgf-library.tex
@@ -0,0 +1,163 @@
+%D \module
+%D [ file=t-go-library,
+%D version=2007.08.15,
+%D title=\CONTEXT\ User Module,
+%D subtitle=Go extensions,
+%D author={Zhichu Chen \& Wolfgang Schuster},
+%D date=\currentdate,
+%D copyright=Public Domain]
+
+\writestatus{loading}{Context User Module / Go extensions}
+
+\unprotect
+
+\startMPinitializations
+ StoneUnit=\the\stoneunit ;
+ BoardSize=\the\boardsize ;
+ BoardUnit=\the\boardunit ;
+ BoardColumns=\@@@@bdn ;
+
+ GridWidth=.7pt ;
+
+ defaultfont := "cmss10" ;
+ defaultscale := .05*BoardUnit ;
+
+ vardef Alph (expr n) =
+ if (n = 1) : "A"
+ elseif (n = 2) : "B"
+ elseif (n = 3) : "C"
+ elseif (n = 4) : "D"
+ elseif (n = 5) : "E"
+ elseif (n = 6) : "F"
+ elseif (n = 7) : "G"
+ elseif (n = 8) : "H"
+ elseif (n = 9) : "J"
+ elseif (n = 10) : "K"
+ elseif (n = 11) : "L"
+ elseif (n = 12) : "M"
+ elseif (n = 13) : "N"
+ elseif (n = 14) : "O"
+ elseif (n = 15) : "P"
+ elseif (n = 16) : "Q"
+ elseif (n = 17) : "R"
+ elseif (n = 18) : "S"
+ elseif (n = 19) : "T"
+ fi
+ enddef ;
+\stopMPinitializations
+
+%D Stone set 1, simple black and white stones:
+
+\startreusableMPgraphic{blackstone pure}
+drawfill fullcircle scaled StoneUnit withcolor black ;
+\stopreusableMPgraphic
+
+\startreusableMPgraphic{whitestone pure}
+fill fullcircle scaled StoneUnit withcolor white ;
+draw fullcircle scaled StoneUnit withcolor black ;
+\stopreusableMPgraphic
+
+%D Stone set 2, shaded black and white stones:
+
+\startreusableMPgraphic{blackstone shade}
+circular_shade ( fullcircle scaled StoneUnit , 4 , \MPcolor{gray} , black ) ;
+\stopreusableMPgraphic
+
+\startreusableMPgraphic{whitestone shade}
+circular_shade ( fullcircle scaled StoneUnit , 2 , .8white , white ) ;
+\stopreusableMPgraphic
+
+%D The board, one for all stone sets.
+
+\startuseMPgraphic{board}
+numeric u , v ;
+if "\@@@@bdalternative"="a" :
+ u = OverlayWidth/(BoardSize+2) ;
+ v = (OverlayHeight-BoardColumns*2*BoardUnit)/(BoardSize+2) ;
+elseif "\@@@@bdalternative"="b":
+ u = (OverlayWidth-BoardColumns*4*BoardUnit)/(BoardSize+2) ;
+ v = OverlayHeight/(BoardSize+2) ;
+elseif "\@@@@bdalternative"="c":
+ u = OverlayWidth/(BoardSize+2) ;
+ v = OverlayHeight/(BoardSize+2) ;
+fi
+
+for i=3 upto BoardSize :
+ draw ((2u,-i*v)--((BoardSize+1)*u,-i*v))
+ if "\@@@@bdalternative"="a" :
+ shifted (-.5u,.5v)
+ elseif "\@@@@bdalternative"="b" :
+ shifted (BoardColumns*2*BoardUnit-.5u,.5v)
+ elseif "\@@@@bdalternative"="c" :
+ shifted (-.5u,.5v)
+ fi withpen pencircle scaled GridWidth ;
+ draw ((i*u,-2v)--(i*u,(BoardSize+1)*-v))
+ if "\@@@@bdalternative"="a" :
+ shifted (-.5u,.5v)
+ elseif "\@@@@bdalternative"="b" :
+ shifted (BoardColumns*2*BoardUnit-.5u,.5v)
+ elseif "\@@@@bdalternative"="c" :
+ shifted (-.5u,.5v)
+ fi withpen pencircle scaled GridWidth ;
+endfor
+
+draw if "\@@@@bdalternative"="b" : ( fi
+ (1.5u,-1.5v)--(1.5u,(-.5-BoardSize)*v)--
+ ((BoardSize+.5)*u,(-.5-BoardSize)*v)--
+ ((BoardSize+.5)*u,-1.5v)--cycle
+ if "\@@@@bdalternative"="b" : ) shifted (BoardColumns*2*BoardUnit,0) fi
+ withpen pencircle scaled (2*GridWidth) ;
+
+if BoardSize=19 :
+ for i=4,10,16 :
+ for j=4,10,16 :
+ drawdot ((i+.5)*u , -(j+.5)*v)
+ if "\@@@@bdalternative"="b" : shifted (BoardColumns*2*BoardUnit,0) fi
+ withpen pencircle scaled (6*GridWidth) ;
+ endfor
+ endfor
+elseif BoardSize=13 :
+ for i=4,7,10 :
+ for j=4,7,10 :
+ drawdot ((i+.5)*u , -(j+.5)*v)
+ if "\@@@@bdalternative"="b" : shifted (BoardColumns*2*BoardUnit,0) fi
+ withpen pencircle scaled (6*GridWidth) ;
+ endfor
+ endfor
+elseif BoardSize=9 :
+ for i=3,7 :
+ for j=3,7 :
+ drawdot ((i+.5)*u , -(j+.5)*v)
+ if "\@@@@bdalternative"="b" : shifted (BoardColumns*2*BoardUnit,0) fi
+ withpen pencircle scaled (6*GridWidth) ;
+ endfor
+ endfor
+ drawdot ((5.5)*u , -(5.5)*v)
+ if "\@@@@bdalternative"="b" : shifted (BoardColumns*2*BoardUnit,0) fi
+ withpen pencircle scaled (6*GridWidth) ;
+fi
+
+%D Draw labels on the edge of the board
+for i=1 upto BoardSize :
+ label ( Alph(i) , ( if "\@@@@bdalternative"="b" : (i+2.5)*u else : (i+.5)*u fi , -.5*v ) )
+ if "\@@@@bdalternative"="b" : shifted ((BoardColumns-1)*2*BoardUnit,0) fi ;
+ label ( decimal i, ( if "\@@@@bdalternative"="b" : 2.5*u else : .5*u fi , ( BoardSize - i + 1.5 ) * (-v) ) )
+ if "\@@@@bdalternative"="b" : shifted ((BoardColumns-1)*2*BoardUnit,0) fi ;
+endfor
+
+setbounds currentpicture to (0,0)--(OverlayWidth,0)--(OverlayWidth,-OverlayHeight)--(0,-OverlayHeight)--cycle;
+\stopuseMPgraphic
+
+%D Here we define a conversion set for our two stone sets.
+
+\defineconversion
+ [stone 1]
+ [\reuseMPgraphic{blackstone pure},
+ \reuseMPgraphic{whitestone pure}]
+
+\defineconversion
+ [stone 2]
+ [\reuseMPgraphic{blackstone shade},
+ \reuseMPgraphic{whitestone shade}]
+
+\protect \endinput
diff --git a/obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/t-sgf.tex b/obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/t-sgf.tex
new file mode 100644
index 0000000000..4909848d91
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/t-sgf.tex
@@ -0,0 +1,458 @@
+%D \module
+%D [ file=t-sgf,
+%D version=2007.09.09,
+%D title=\CONTEXT\ User Module,
+%D subtitle=Go Module,
+%D author={Zhichu Chen \& Wolfgang Schuster},
+%D date=\currentdate,
+%D copyright=Public Domain]
+
+\writestatus{loading}{Context User Module / Go Module}
+
+\unprotect
+
+%D The dead stone calculator, the board background and the
+%D stones are saved in two extra modules. The third module
+%D contains two extra conversion commands and the default setup.
+
+\usemodule[deadstone]
+\usemodule[sgf-generic]
+\usemodule[sgf-library]
+
+\useJSscripts[fld][FieldStack]
+
+\setuppagenumbering[\c!location=,\c!state=\v!stop]
+
+\setupcolors[\c!state=\v!start]
+\definecolor[boardbackground][r=1,g=.625,b=.0625]
+\definecolor[deadstonebackground][r=1,g=1,b=1]
+
+\setupinteraction
+ [\c!state=\v!start,
+ \c!focus=\v!height,
+ \c!page=\v!yes,
+ \c!openaction=\v!firstpage,
+ \c!click=\v!off]
+
+\newcounter\thegame
+\newcounter\thestep
+
+\definesymbol[\v!empty][]%
+
+\newdimen\stoneunit \stoneunit=.5632cm
+\newdimen\boardunit \boardunit=.6cm
+\newdimen\capturedunit \capturedunit=.4cm
+
+\defineoverlay[board][{\useMPgraphic{board}}]
+
+\setupinterlinespace
+ [\c!height=0,
+ \c!depth=1,
+ \c!top=0,
+ \c!bottom=0,
+ \c!line=\boardunit]
+
+%D \macros{drawboard}
+%D
+%D The main loop to draw the board with all stones and the
+%D stone numbers. The number color depends on the current
+%D stone color and on the currently placed stone.
+
+\def\drawboard
+ {\vbox{\dorecurse\boardsize
+ {\edef\boardrow{\recurselevel}%
+ \hbox{\dorecurse\boardsize
+ {\edef\boardcolumn{\recurselevel}%
+ \hbox\!!to\boardunit
+ {\hss\vbox\!!to\boardunit
+ {\vss
+ \ifcase\currentstone
+ \or\convertnumber\@@@@bdconversion\currentstone
+ \or\convertnumber\@@@@bdconversion\currentstone
+ \fi
+ \vss}\hss}%
+ \hskip-\boardunit
+ \hbox\!!to\boardunit
+ {\vbox\!!to\boardunit
+ {\hsize\boardunit
+ \vss
+ \ifhighlightlabel
+ \ifnum\currentstonenumber=\stonecount
+ \def\@@@@bdblackcolor{red}% I overload the preset values
+ \def\@@@@bdwhitecolor{red}% from the setupbaord settings!
+ \fi
+ \fi
+ \ifcase\currentstone
+ \or\hbox\!!to\hsize{\hss\doattributes{\????bd\v!black}\c!style\c!color\currentstonenumber\hss}
+ \or\hbox\!!to\hsize{\hss\doattributes{\????bd\v!white}\c!style\c!color\currentstonenumber\hss}
+ \fi
+ \vss}}}}}}}
+
+%D \macros{drawboarda,drawboardb,drawboardc}
+%D
+%D The next three macros take care of the three board alternatives
+%D and put the area for the removed stones on the left and right
+%D side or at the bottom.
+
+\def\drawboarda
+ {\increment\thestep
+ \definesymbol
+ [stone:\thegame:\thestep]
+ [{\vbox
+ {\offinterlineskip
+ \framed
+ [\c!offset=\boardunit,\c!frameoffset=\!!zeropoint,\c!strut=\v!no,
+ \c!top=\!!zeropoint,\c!bottom=\!!zeropoint,\c!depth=\!!zeropoint,
+ \c!frame=\v!off]
+ {\offinterlineskip
+ \drawboard}
+ \framed
+ [\c!frame=\v!off,
+ \c!width=\dimexpr\boardsize\boardunit+\plustwo\boardunit\relax,
+ \c!height=\numexpr\@@@@bdn*\plustwo\relax\boardunit,
+ \c!background=color,
+ \c!backgroundcolor=deadstonebackground]
+ {\vbox\!!to\vsize
+ {\vbox\!!to.5\vsize{\processdeadstones[\deadblackstones]\vfill}
+ \vbox\!!to.5\vsize{\processdeadstones[\deadwhitestones]\vfill}}}}}]}
+
+\def\drawboardb
+ {\increment\thestep
+ \definesymbol
+ [stone:\thegame:\thestep]
+ [{\hbox
+ {\framed
+ [\c!frame=\v!off,
+ \c!width=\numexpr\@@@@bdn*\plustwo\relax\boardunit,
+ \c!height=\dimexpr\boardsize\boardunit+\plustwo\boardunit\relax,
+ \c!background=color,
+ \c!backgroundcolor=deadstonebackground]%
+ {\vbox\!!to\vsize{\processdeadstones[\deadblackstones]\vfill}}%
+ \framed
+ [\c!offset=\boardunit,\c!frameoffset=\!!zeropoint,\c!strut=\v!no,
+ \c!top=\!!zeropoint,\c!bottom=\!!zeropoint,\c!depth=\!!zeropoint,
+ \c!frame=\v!off]%
+ {\offinterlineskip
+ \drawboard}%
+ \framed
+ [\c!frame=\v!off,
+ \c!width=\numexpr\@@@@bdn*\plustwo\relax\boardunit,
+ \c!height=\dimexpr\boardsize\boardunit+\plustwo\boardunit\relax,
+ \c!background=color,
+ \c!backgroundcolor=deadstonebackground]%
+ {\vbox\!!to\vsize
+ {\processdeadstones[\deadwhitestones]\vfill}}}}]}
+
+\def\drawboardc
+ {\increment\thestep
+ \definesymbol
+ [stone:\thegame:\thestep]
+ [{\framed
+ [\c!offset=\boardunit,\c!frameoffset=\!!zeropoint,\c!strut=\v!no,
+ \c!top=\!!zeropoint,\c!bottom=\!!zeropoint,\c!depth=\!!zeropoint,
+ \c!frame=\v!off]%
+ {\offinterlineskip
+ \drawboard}}]}
+
+%D \macros{processdeadstones}
+%D
+%D The removed stones in the interactive version are placed with
+%D the \tex{processdeadstones} command. It is called twice, once
+%D for the black stones and a second time for the white stones.
+
+\def\processdeadstones[#1]%
+ {\def\dodoprocessdeadstones##1:##2:##3:##4\relax
+ {\hbox\!!to\boardunit
+ {\hss\vbox\!!to\boardunit{\convertnumber\@@@@bdconversion{##3}}\hss}%
+ \hskip-\boardunit
+ \hbox\!!to\boardunit
+ {\vbox\!!to\boardunit
+ {\hsize\boardunit
+ \vss
+ \ifcase##3
+ \or\hbox\!!to\hsize{\hss\doattributes{\????bd\v!black}\c!style\c!color{##4}\hss}
+ \or\hbox\!!to\hsize{\hss\doattributes{\????bd\v!white}\c!style\c!color{##4}\hss}
+ \fi
+ \vss}}%
+ \hbox\!!to\boardunit
+ {\vbox\!!to\boardunit
+ {\vfill
+ \smallbodyfont % problems in mkiv
+ \hbox\!!to\hsize{\doattributes\????bd\c!style\c!color
+ {\sgfcharacter{##2}\Numbers{\numexpr\boardsize-##1+\plusone\relax}}\hss}
+ \vfill\vfill}}}%
+ \def\doprocessdeadstones##1%
+ {\ifdim\wd\scratchbox>\hsize
+ \hbox\!!to\hsize{\box\scratchbox\hss}%
+ \setbox\scratchbox\hbox
+ {\box\scratchbox\hbox\!!to\plustwo\boardunit{\@EA\dodoprocessdeadstones##1\relax}}%
+ \else
+ \setbox\scratchbox\hbox
+ {\box\scratchbox\hbox\!!to\plustwo\boardunit{\@EA\dodoprocessdeadstones##1\relax}}%
+ \fi}%
+ \processcommacommand[#1]\doprocessdeadstones
+ \hbox\!!to\hsize{\box\scratchbox\hss}}
+
+%D \macros{flushboard}
+%D
+%D After \tex{drawboard} with its three alternatives had drawn a board
+%D and saved it in a field we flush it with the \tex{flushboard} command.
+
+\def\flushboard
+ {\ifnum\thestep=\@@fdstart\relax
+ \definefield
+ [\v!game:\thegame:\thestep][\s!check][\v!game:\thegame]
+ [\v!stone:\thegame:\thestep,\v!empty]
+ [\v!stone:\thegame:\thestep]%
+ \else
+ \definefield
+ [\v!game:\thegame:\thestep][\s!check][\v!game:\thegame]
+ [\v!stone:\thegame:\thestep,\v!empty][\v!empty]%
+ \fi
+ \removeunwantedspaces
+ \vbox\!!to\!!zeropoint
+ {\vskip-\plusone\points\hbox\!!to\!!zeropoint{\fitfield[\v!game:\thegame:\thestep]\hss}\vss}%
+ \vskip-\baselineskip}
+
+\def\clearoverlapstatus
+ {\dorecurse\boardsize
+ {\edef\boardrow{\recurselevel}%
+ \dorecurse\boardsize
+ {\edef\boardcolumn{\recurselevel}%
+ \presetcurrentstatus{\zerocount}}}%
+ \global\let\overlaplist\empty}
+
+\def\presetcurrentstatus#1%
+ {\setxvalue{status:\boardrow:\boardcolumn}{#1}%
+ \resetvalue{overlap:\boardrow:\boardcolumn}}
+
+\def\makeoverlaplist#1%
+ {\appendtocommalist{#1}\overlaplist}
+
+\def\stonecolor#1%
+ {\@EA\@EA\@EA\@EA\@EA\@EA\@EA\firstofcurrentstone\getvalue{field:#1}\relax}
+
+\def\stonestep#1%
+ {\@EA\@EA\@EA\@EA\@EA\@EA\@EA\secondofcurrentstone\getvalue{field:#1}\relax}
+
+\def\currentstatus
+ {\getvalue{status:\boardrow:\boardcolumn}}
+
+\def\setstatus#1#2%
+ {\setevalue{status:\number#1:\number#2}}
+
+\def\setcurrentstatus
+ {\setstatus\boardrow\boardcolumn}
+
+\def\currentoverlap
+ {\getvalue{overlap:\boardrow:\boardcolumn}}
+
+\def\setoverlap#1#2%
+ {\setevalue{overlap:\number#1:\number#2}}
+
+\def\setcurrentoverlap
+ {\setoverlap\boardrow\boardcolumn}
+
+\def\dummystonebox
+ {\hbox\!!to\boardunit
+ {\hss\vbox\!!to\boardunit
+ {\vss
+ \ifcase\currentstone
+ \or\convertnumber\@@@@bdconversion\currentstone
+ \or\convertnumber\@@@@bdconversion\currentstone
+ \fi
+ \vss}%
+ \hss}%
+ \hskip-\boardunit
+ \hbox\!!to\boardunit
+ {\vbox\!!to\boardunit
+ {\hsize\boardunit
+ \vss
+ \ifcase\currentstone
+ \or\hbox\!!to\hsize{\hss\doattributes{\????bd\v!black}{\c!style}{\c!color}{\currentstonenumber}\hss}
+ \or\hbox\!!to\hsize{\hss\doattributes{\????bd\v!white}{\c!style}{\c!color}{\currentstonenumber}\hss}
+ \fi
+ \vss}}}
+
+%D \macros{adddummystone}
+%D
+%D This is a alternative for the \tex{addstone} command in the
+%D dead stone calculator. It saves only the position and states
+%D of every field in a macro and make a listentry if there is
+%D already a stone on the position and we replace it.
+
+\def\adddummystone(#1:#2:#3)%
+ {\global\advance\stonecount\plusone
+ \edef\boardrow{\number#1}%
+ \edef\boardcolumn{\number#2}%
+ \ifcase\currentstatus
+ \setcurrentstatus{\plusone}%
+ \or
+ \setcurrentstatus{\plustwo}%
+ \makeoverlaplist\currentstonenumber
+ \setvalue{overlaplist:\currentstonenumber}{\csname overlap:#1:#2\endcsname}%
+ \setcurrentoverlap{\dummystonebox}%
+ \else
+ \setcurrentstatus{\plusthree}%
+ \fi
+ \setevalue{field:\number#1:\number#2}%
+ {\ifx#3B
+ \plusone
+ \else\ifx#3W
+ \plustwo
+ \fi\fi:\number\stonecount}%
+ \ifcase\currentstatus\or\else
+ \setcurrentoverlap
+ {\hbox
+ {\currentoverlap
+ \vbox\!!to\boardunit{\vss\hbox\!!to\boardunit{\hss$\mathstrut{}={}$\hss}\vss}%
+ \dummystonebox}}%
+ \fi}
+
+%D \macros{processoverlappedstones}
+%D
+%D This is the alternative to \tex{processdeadstones} for the printable
+%D version. The stones are sorted from the lowest number to the highest.
+
+\def\processoverlappedstones
+ {\scratchdimen\hsize
+ \def\doprocessoverlappedstones##1%
+ {\setbox\globalscratchbox\hbox{\getvalue{overlaplist:##1}}%
+ \ifdim\wd\globalscratchbox>\scratchdimen
+ \scratchdimen\dimexpr\hsize-\wd\globalscratchbox\relax
+ \hbox\!!to\hsize{\box\scratchbox\hfill}%
+ \box\scratchbox\box\globalscratchbox
+ \else
+ \scratchdimen\dimexpr\scratchdimen-\wd\globalscratchbox-\@@@@bddistance\relax
+ \setbox\scratchbox\hbox{\box\scratchbox\box\globalscratchbox\hskip\@@@@bddistance}%
+ \fi}%
+ \sortcommacommand[\overlaplist]\donumericcompare
+ \processcommacommand[\sortedcommalist]\doprocessoverlappedstones
+ \hbox\!!to\hsize{\box\scratchbox\hss}}
+
+\bgroup
+\catcode`\;=13
+\gdef\dostartSGFbox
+ {\setupboard[\c!alternative=\v!c]%
+ \switchtobodyfont[\the\dimexpr.45\boardunit\relax]%
+ \doglobal\increment\thegame
+ \clearboard\clearoverlapstatus
+ \doglobal\let\thestep\zerocountervalue
+ \global\stonecount\!!zerocount
+ \def;##1[##2##3]%
+ {\adddummystone(\charactertonumber##2:\charactertonumber##3:##1)}%
+ \catcode`\^^M=\@@ignore}
+\egroup
+
+\def\stopSGFbox
+ {\framed
+ [\c!offset=\v!overlay,\c!strut=\v!no,
+ \c!top=\!!zeropoint,\c!bottom=\!!zeropoint,\c!depth=\!!zeropoint,
+ \c!frame=\v!on]
+ {\vbox
+ {\offinterlineskip
+ \framed
+ [\c!offset=\boardunit,\c!frameoffset=\!!zeropoint,\c!strut=\v!no,
+ \c!top=\!!zeropoint,\c!bottom=\!!zeropoint,\c!depth=\!!zeropoint,
+ \c!width=\dimexpr\boardsize\boardunit+2\boardunit\relax,
+ \c!frame=\v!on,\c!background={color,board},
+ \c!backgroundcolor=boardbackground]%
+ {\dontcomplain
+ \offinterlineskip
+ \highlightlabelfalse
+ \drawboard}
+ \framed
+ [\c!frame=\v!on,
+ \c!width=\dimexpr\boardsize\boardunit+\plustwo\boardunit\relax,
+ \c!height=\numexpr\@@@@bdn*\plustwo\relax\boardunit,
+ \c!offset=.2\boardunit]%
+ {\vbox\!!to\vsize{\processoverlappedstones}}}}}
+
+\bgroup
+\catcode`\;=13
+\gdef\dostartSGFpage
+ {\startTEXpage
+ [\c!width=\dimexpr\boardsize\boardunit
+ \if\@@@@bdalternative\v!a
+ +\plustwo\boardunit
+ \else\if\@@@@bdalternative\v!b
+ +\numexpr\@@@@bdn*\plusfour+\plustwo\relax\boardunit
+ \else
+ +\plustwo\boardunit
+ \fi\fi\relax,
+ \c!height=\dimexpr\boardsize\boardunit
+ \if\@@@@bdalternative\v!a
+ +\numexpr\@@@@bdn*\plustwo+\plustwo\relax\boardunit
+ \else\if\@@@@bdalternative\v!b
+ +\plustwo\boardunit
+ \else
+ +\plustwo\boardunit
+ \fi\fi\relax,
+ \c!background={color,board},
+ \c!backgroundcolor=boardbackground]%
+ \switchtobodyfont[\the\dimexpr.45\boardunit\relax]%
+ \doglobal\increment\thegame
+ \clearboard
+ \getparameters[\??fd][\c!start=1,\c!width=\v!fit,\c!height=\c!fit,\c!offset=\v!overlay,\c!frame=\v!off]%
+ \doglobal\let\thestep\zerocountervalue
+ \global\stonecount\!!zerocount
+ \setupfield
+ [\v!game:\thegame]
+ [\v!reset]%
+ \setupfield
+ [\v!game:\thegame]
+ [\c!option=\v!readonly,
+ \c!frameoffset=\!!zeropoint,
+ \c!strut=\v!no,
+ \c!top=\!!zeropoint,
+ \c!bottom=\!!zeropoint,
+ \c!depth=\!!zeropoint,
+ \c!width=\v!fit,
+ \c!height=\v!fit,
+ \c!offset=\v!overlay,
+ \c!frame=\v!off]%
+ \definefield
+ [\v!game:\thegame:\thestep][\s!check][\v!game:\thegame]
+ [\v!empty,\v!empty][\v!empty]%
+ \cleardeadstonelist
+ \executeifdefined{drawboard\@@@@bdalternative}\drawboarda
+ \flushboard
+ \def;##1[##2##3]%
+ {\addstone(\charactertonumber##2:\charactertonumber##3:##1)%
+ \doif\@@@@bdcalculate\v!yes\processtones
+ \executeifdefined{drawboard\@@@@bdalternative}\drawboarda
+ \flushboard}%
+ \catcode`\^^M=\@@ignore}
+\egroup
+
+%D \macros{starSGF,stopSGF}
+%D
+%D The two macros \tex{startSGF} and \tex{stopSGF} begin and end
+%D the parser for the go stones saved with the \type{sgf} syntax.
+
+\def\stopSGFpage
+ {\startoverlay{\overlaybutton{JS(Walk_Field{\v!game:\thegame})}}\stopoverlay
+ \stopTEXpage}
+
+\def\startSGF
+ {\bgroup
+ \catcode`\;=13
+ \dosingleempty\dostartSGF}
+
+\def\dostartSGF[#1]%
+ {\iffirstargument
+ \setupboard[#1]%
+ \fi
+ \doif\@@@@bdcalculate\v!no
+ {\setupboard[\c!alternative=\v!c]}%
+ \doifelse\@@@@bdprintable\v!no
+ \dostartSGFpage
+ \dostartSGFbox}
+
+\def\stopSGF
+ {\doifelse\@@@@bdprintable\v!no
+ \stopSGFpage
+ \stopSGFbox
+ \egroup}
+
+\protect \endinput
diff --git a/obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/t-weiqi.tex b/obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/t-weiqi.tex
new file mode 100644
index 0000000000..5c9ac0d79b
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-sgf/tex/context/third/sgf/t-weiqi.tex
@@ -0,0 +1,16 @@
+%D \module
+%D [ file=t-weiqi,
+%D version=2007.09.09,
+%D title=\CONTEXT\ User Module,
+%D subtitle=Go Module,
+%D author={Zhichu Chen \& Wolfgang Schuster},
+%D date=\currentdate,
+%D copyright=Public Domain]
+
+\writestatus{loading}{Context User Module / Go Module}
+
+\unprotect
+
+\usemodule[sgf]
+
+\protect \endinput
diff --git a/obsolete/macros/context/contrib/context-taspresent/doc/context/third/taspresent/demo.tex b/obsolete/macros/context/contrib/context-taspresent/doc/context/third/taspresent/demo.tex
new file mode 100644
index 0000000000..5f6988d7f5
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-taspresent/doc/context/third/taspresent/demo.tex
@@ -0,0 +1,153 @@
+\usemodule[taspresent][style=rules,font=MyriadPro,size=17pt,stylecolor=red]
+
+\setvariables [taspresent]
+ [author={Groucho Marx},
+ title={Marriage the Chief Cause of Divorce}]
+
+% \usetypescriptfile[type-gtamacfonts]
+% \definetypeface[MyFace][ss][sans][optima][default][encoding=ec]
+% %\usetypescript[LucidaSans][ec]
+% \setupbodyfont[MyFace,ss,\Normalsize]
+
+% \usesymbols[lucidasans]
+% \setupsymbolset[LucidaSans]
+% \definesymbol[1][{\symbol[Check2]}]
+
+% \showframe
+
+% \traceexternalfigurestrue
+
+\starttext
+
+\Maketitle
+
+\Slidetitle{Text}
+
+\lecback
+
+Thus, I came to the conclusion that the designer of a new
+system must not only be the implementer and first
+large||scale user; the designer should also write the first
+user manual.
+
+The separation of any of these four components would have
+hurt \TeX\ significantly. If I had not participated fully in
+all these activities, literally hundreds of improvements
+would never have been made, because I would never have
+thought of them or perceived why they were important.
+
+But a system cannot be successful if it is too strongly
+influenced by a single person. Once the initial design is
+complete and fairly robust, the real test begins as people
+with many different viewpoints undertake their own
+experiments.
+
+\Slidetitle{Itemization}
+
+\startitemize[1]
+\item Thus, I came to the conclusion that the designer of a new
+ system
+\item must not only be the implementer and first
+ large||scale user;
+\item the designer should also write the first
+ user manual.
+\item The separation of any of these four components would have
+ hurt \TeX\ significantly.
+\stopitemize
+
+\Slidetitle{Numbered Itemization}
+
+\startitemize[n]
+\item Thus, I came to the conclusion that the designer of a new
+ system
+\item must not only be the implementer and first
+ large||scale user;
+\item the designer should also write the first
+ user manual.
+\item The separation of any of these four components would have
+ hurt \TeX\ significantly.
+\stopitemize
+
+\Slidetitle{Picture in Horizontal Mode}
+
+\PicHoriz[hor][height=\NormalHeight]
+
+\page
+
+\picback
+
+\PicVert[vert][width=\NormalWidth]{Picture in \\ Vertical Mode}
+
+\page
+
+\CircVert[scale=22,x=23,y=25][vert][width=\NormalWidth]{Circle in \\ Vertical Mode}
+
+\page
+
+\ArrowVert[direction=90,x=7,y=23][vert][width=\NormalWidth]{Arrow in \\ Vertical Mode}
+
+\Slidetitle{Red Circle}
+
+\lecback
+
+\CircHoriz[scale=40,x=120,y=80][hor][height=\NormalHeight]
+
+\Slidetitle{Red Arrow}
+
+\ArrowHoriz[direction=135,x=105,y=15][hor][height=\NormalHeight]
+
+\Slidetitle{A MetaFun graphic}
+
+\placefigure[here]{none}{%
+\startMPcode
+pickup pencircle scaled 4pt ;
+draw unitsquare xyscaled (5cm,5cm) withcolor red ;
+\stopMPcode
+}
+
+\Slidetitle{Some Code Snippets}
+
+To set up a horizontal picture, simply type:
+
+\startTEX
+\PicHoriz[hor][height=\Normalheight]
+\stopTEX
+
+\blank[line]
+
+For vertical pictures:
+
+\startTEX
+\PicVert[vert][width=\NormalWidth]%
+{Text placed \\ opposite picture}
+\stopTEX
+
+\Slidetitle{Math}
+
+Since I know nothing about math, this example is copied from the wiki:
+
+\startformula
+ f(x) = \startmathcases
+ \NC x, \NC if $0 \le x \le \frac12$ \NR
+ \NC 1-x ,\NC if $\frac12 \le x \le 1$ \NR
+\stopmathcases
+\stopformula
+
+\Slidetitle{Your Own Ideas?}
+
+\null
+
+\vfill
+
+\midaligned{\tfd Go \color[red]{here!}}
+
+\vfill
+
+\page
+
+\stoptext
+
+%%% Local Variables:
+%%% mode: context
+%%% TeX-master: t
+%%% End:
diff --git a/obsolete/macros/context/contrib/context-taspresent/doc/context/third/taspresent/hor.jpg b/obsolete/macros/context/contrib/context-taspresent/doc/context/third/taspresent/hor.jpg
new file mode 100644
index 0000000000..892615f812
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-taspresent/doc/context/third/taspresent/hor.jpg
Binary files differ
diff --git a/obsolete/macros/context/contrib/context-taspresent/doc/context/third/taspresent/readme b/obsolete/macros/context/contrib/context-taspresent/doc/context/third/taspresent/readme
new file mode 100644
index 0000000000..cbbc956c4b
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-taspresent/doc/context/third/taspresent/readme
@@ -0,0 +1,136 @@
+Module for projector-based presentations
+-----------------------------------------
+
+This directory provides a module to produce presentations with ConTeXt. It
+contains the following files:
+
+doc/taspresent/readme (this file)
+doc/taspresent/demo.tex
+doc/taspresent/hor.jpg
+doc/taspresent/taspresent-manual.pdf
+doc/taspresent/vert.jpg
+texmf/tex/context/third/taspresent/rainbow.pdf
+texmf/tex/context/third/taspresent/t-blackblue.tex
+texmf/tex/context/third/taspresent/t-bluegray.tex
+texmf/tex/context/third/taspresent/t-bluestripe.tex
+texmf/tex/context/third/taspresent/t-darkshade.tex
+texmf/tex/context/third/taspresent/t-doubleframe.tex
+texmf/tex/context/third/taspresent/t-doubleshade.tex
+texmf/tex/context/third/taspresent/t-embossed.tex
+texmf/tex/context/third/taspresent/t-graybeams.tex
+texmf/tex/context/third/taspresent/t-graysquare.tex
+texmf/tex/context/third/taspresent/t-greenblue.tex
+texmf/tex/context/third/taspresent/t-horizontalblue.tex
+texmf/tex/context/third/taspresent/t-lightblue.tex
+texmf/tex/context/third/taspresent/t-narrowstripe.tex
+texmf/tex/context/third/taspresent/t-quadblue.tex
+texmf/tex/context/third/taspresent/t-rainbowstripe.tex
+texmf/tex/context/third/taspresent/t-redframe.tex
+texmf/tex/context/third/taspresent/t-taspresent.tex
+
+The two images hor.jpg and vert.jpg are copyright 2007 Patrick Gundlach and are
+published under the GNU General Public License v. 2.0. All other files are
+copyright 2007 by Thomas A. Schmitz; they are published under the GNU General
+Public License v. 2.0.
+
+
+Installation
+------------
+
+Simply move the module files t-* into a place where TeX can find them. The
+canonical location would be $TEXMF/tex/context/third, where you can create a
+subdiretory "presentations" to keep everything together. On most systems, you
+will have to run texhash after installing new packages. If you want to test the
+module before actually installing it, just leave everything in the original
+directory and typeset the demo file.
+
+
+Use
+---
+
+A full manual is included, Here is a very short version for the impatient:
+
+To use the module, include this line in your file:
+
+\usemodule[taspresent]
+[style=doubleframe,font=Helvetica,size=17pt,stylecolor=blue,stylebottom=sqaure]
+
+For the "style" parameter, there are currently sixteen options:
+
+blackblue
+bluegray
+bluestripe
+darkshade
+doubleframe
+doubleshade
+embossed
+graybeams
+graysquare
+greenblue
+horizontalblue
+lightblue
+narrowstripe
+quadblue
+rainbowstripe
+redframe
+
+This will modify the background of your slides and the placement of certain
+elements.
+
+For the "font" parameter, there are currently five options:
+
+LatinModern [typesets in LatinModern Serif]
+LatinModernSans [typesets in LatinModern Sans]
+Times [the free clone of TimesNew Roman]
+Helvetica [the free clone of Helvetica]
+Pagella [the tex-gyre clone of Palatino; only if you have the tex-gyre
+ fonts installed]
+User [this does not set a font; provide your own definitions]
+
+If you want to use your own typescripts, remember to use the bodyfont at
+\Normalsize like so:
+
+\usetypescriptfile[type-mytypescript]
+\usetypescript[myfont][ec]
+\setupbodyfont[MyFont,\Normalsize]
+
+And of course, invoke the typescript after the \usemodule part!
+
+The "size" can be set to 16pt, 17pt, 18pt, 19pt, 20pt, or 21pt ; the default is
+17pt for text and 27pt for titles.
+
+The easiest way to see what the module does and which macros it provides is
+looking at (and typesetting) the included file "demo.tex" with different
+options. If you want to know more about the way in which the module is set up,
+typeset the source of the different source files with the command texmfstart
+texexec --module. The source is annotated, so you should be able to see how it
+works even if you don't have too much experience with ConTeXt.
+
+Defining your own styles is easy: have a look at the style files which are
+included. Certain macros have to be defined. Roll your own definitions for
+these macros and for the background, write them into a file whatever.tex and
+use this new style by setting it as the value to the "style" key like so:
+\usemodule[taspresent][font=Times,size=17pt,style=whatever]
+
+
+Revision History
+----------------
+
+2008-08-11
+
+- Added still more styles;
+- cleaned up syntax for placing pictures and circles/arrows.
+
+2007-08-08
+- Added some new styles;
+- added the \setvariables and \Maketitle macros;
+- added the "stylecolor" and "stylebottom" options;
+- arrows and circles for vertical pictures.
+
+2007-07-24
+- Added new commands for arrows and circles in vertical pictures;
+- made syntax for picture placement more conform to ConTeXt use;
+- easier syntax for adding custom styles (suggestion by Peter Münster).
+
+2007-07-22
+Initial release
diff --git a/obsolete/macros/context/contrib/context-taspresent/doc/context/third/taspresent/taspresent-manual.pdf b/obsolete/macros/context/contrib/context-taspresent/doc/context/third/taspresent/taspresent-manual.pdf
new file mode 100644
index 0000000000..f2748c3019
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-taspresent/doc/context/third/taspresent/taspresent-manual.pdf
Binary files differ
diff --git a/obsolete/macros/context/contrib/context-taspresent/doc/context/third/taspresent/taspresent-manual.tex b/obsolete/macros/context/contrib/context-taspresent/doc/context/third/taspresent/taspresent-manual.tex
new file mode 100644
index 0000000000..609dece5dc
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-taspresent/doc/context/third/taspresent/taspresent-manual.tex
@@ -0,0 +1,496 @@
+%&latex
+
+\setupcolors[state=start]
+
+\setupbodyfontenvironment[default][em=italic]
+
+\definetype[typeTEX][option=color]
+\setuptype[option=TEX]
+
+%\setuphead[subsection][page=yes]
+
+\define[1]\MyStyle{\color[blue]{\bf #1}}
+
+\starttext
+
+\section{Introduction}
+
+The modules in the {\tt taspresent} directory aim to provide an
+easy|-|to|-|use, consistent interface for writing simple presentations in
+\CONTEXT. I had the idea to write this module when I was preparing my own
+presentations with \CONTEXT. I wanted to be able to achieve visually
+different results without changing my source files, so I wrote different
+styles that followed the same logic and provided the same macros. When I
+created this module, I had the following requirements in mind:
+
+\startitemize
+\item Most of the styles that are provided are rather sober in
+ appearance. I use them for my university lectures in the humanities. They
+ provide a nice but not too distracting background and a lot of space for
+ presentations with large amounts of text.
+\item The module is meant for presentations which will be shown with the
+ help of a digital projector. Hence, they have no interactive elements
+ (such as buttons) and no tools for navigation (such as a table of
+ contents).
+\item The module allows for user configurability. It comes with several
+ predefined styles and some predefined font options. The modular structure
+ makes it easy to add further styles.
+\item Picture placement and changing backgrounds is made easy by predefined
+ macros.
+\stopitemize
+
+The module provides a simple, basic structure; I think it will be best suited
+for beginners or intermediate users of \CONTEXT. It is definitely not meant
+to compete with Hans's fuller and fancier presentation modules, and it
+offers much less than the \LaTeX\ {\tt beamer} package. On the other hand,
+it is much easier to use; you should be able to write your first
+presentation after spending five minutes with this manual.
+
+\section{Installation}
+
+Installation is easy: just put the files {\tt t-<something>} into a
+directory where \TeX\ can see them. For \CONTEXT\ third|-|party modules,
+the canonical place would be in one of your {\tt TEXMF} trees, under {\tt
+ tex/context/third}. If you want to keep things tidy, place them in a
+subdirectory {\tt taspresent}. If you just unzip the archive {\tt
+ taspresent.zip} in a {\tt TEXMF} directory, things will be moved to the
+right place automatically. On many \TeX|-|systems, you will have to run
+{\tt texhash} after installing new files. To doublecheck whether the system
+finds your files, run {\tt kpsewhich t-taspresent.tex} from the command
+line; if all goes well, this should return the position of the file you
+have just installed.
+
+\section{Setting up the Module}
+
+To use the module, you put this line into your source file:
+
+\startTEX
+\usemodule[taspresent][style=,font=,size=,stylecolor=,stylebottom=]
+\stopTEX
+
+The values for the different keys will be explained in the following
+sections.
+
+\section{The {\tt style} Key}
+
+There are ten options for the {\tt style} key:
+
+\subsection{\MyStyle{blackblue}}
+
+This style was inspired by the \quotation{Copenhagen} theme of the \LaTeX\
+{\tt beamer} package. The narrow blue and black stripes at the top and the
+bottom of the slides display the date and slidenumber (top) and the title
+and author of the presentation.
+
+\placefigure[here]{The \MyStyle{blackblue}
+ style}{\externalfigure[blackblue][width=\textwidth]}
+
+\page
+
+\subsection{\MyStyle{bluegray}}
+
+The colors of this style are very subdued and quiet; the interesting thing
+is the pagenumber on the border of the margin and text area; this detail
+was inspired by Hans's \quotation{split} style ({\tt pre-14}).
+
+\placefigure[here]{The \MyStyle{bluegray}
+ style}{\externalfigure[bluegray][width=\textwidth]}
+
+\page
+
+\subsection{\MyStyle{bluestripe}}
+
+This theme is inspired by the \quotation{Berkeley} style of the \LaTeX\
+{\tt beamer} package. Apart from the blue sidebars, it has no ornaments.
+
+\placefigure[here]{The \MyStyle{bluestripe}
+ style}{\externalfigure[bluestripe][width=\textwidth]}
+
+\page
+
+\subsection{\MyStyle{darkshade}}
+
+The only ornament to this style is the dark shaded background; it has two
+style colors, {\tt stylecolor=blue} and {\tt stylecolor=green}; if you feel
+really adventurous, try {\tt stylecolor=bluered}! It uses \CONTEXT's {\tt
+ interactionbar} mechanism to show the progress of the presentation. It
+provides much space for text.
+
+\placefigure[here]{The \MyStyle{darkshade}
+ style with {\tt stylecolor=blue}}{\externalfigure[blueshade][width=\textwidth]}
+
+\page
+
+\subsection{\MyStyle{doubleframe}}
+
+This style was inspired by Hans's \quotation{green} style ({\tt s-pre-02}). It
+has a thick blue frame around the entire slide area and a thinner frame around
+the text area. The style has two options for the bottom area: {\tt
+stylebottom=stripe} will display a shaded blue area which will grow with each
+slide; {\tt stylebottom=square} displays a row of blue squares at the bottom
+which also measure the presentation's progress.
+
+\placefigure[here]{The \MyStyle{doubleframe}
+style with the {\tt stylebottom=stripe} option}{\externalfigure[blueframe][width=\textwidth]}
+
+\page
+
+\placefigure[here]{The \MyStyle{doubleframe}
+style with the {\tt stylebottom=square} option}{\externalfigure[squareframe][width=\textwidth]}
+
+\page
+
+\subsection{\MyStyle{doubleshade}}
+
+Similar to the \MyStyle{blueshade} style, but there is a differently shaded
+area on the left with a progress meter.
+
+\placefigure[here]{The \MyStyle{doubleshade}
+ style}{\externalfigure[doubleshade][width=\textwidth]}
+
+\page
+
+\subsection{\MyStyle{embossed}}
+
+Spread the word, don't be shy! Show your pride in using \CONTEXT. The color
+theme will probably look familiar; I copied it from the {\tt enattab}
+manual.
+
+\placefigure[here]{The \MyStyle{embossed}
+ style}{\externalfigure[embossed][width=\textwidth]}
+
+\page
+
+\subsection{\MyStyle{graybeams}}
+
+This design is inspired by the {\tt husky} theme for the \LaTeX\ package {\tt
+powerdot}, created by Jack Stalnaker.
+
+\placefigure[here]{The \MyStyle{graybeams}
+ style}{\externalfigure[graybeams][width=\textwidth]}
+
+\page
+
+\subsection{\MyStyle{graysquare}}
+
+This minimalistic design is inspired by a presentation Taco gave at EuroTeX
+2006.
+
+\placefigure[here]{The \MyStyle{graysquare}
+ style}{\externalfigure[graysquare][width=\textwidth]}
+
+\page
+
+\subsection{\MyStyle{greenblue}}
+
+This style has cool colors and lots of white space; it is probably best suited
+for presentations with relatively little text.
+
+\placefigure[here]{The \MyStyle{greenblue}
+ style}{\externalfigure[greenblue][width=\textwidth]}
+
+\page
+
+\subsection{\MyStyle{horizontalblue}}
+
+A sober style with an emphasis on horizontal lines, inspired by {\tt
+ beamer}'s \quotation{Szeged} theme.
+
+\placefigure[here]{The \MyStyle{horizontalblue}
+ style}{\externalfigure[horizontalblue][width=\textwidth]}
+
+\page
+
+\subsection{\MyStyle{lightblue}}
+
+This style emphasizes the title with its lively colors; the text area is
+delimited by a light blue, shaded margin.
+
+\placefigure[here]{The \MyStyle{lightblue}
+ style}{\externalfigure[lightblue][width=\textwidth]}
+
+\page
+
+\subsection{\MyStyle{narrowstripe}}
+
+A variation on the \MyStyle{bluestripe} style, with shaded narrow
+stripes. This style comes with two color options, which you set with the
+{\tt stylecolor} key; {\tt stylecolor=red}, {\tt stylecolor=green}, or {\tt
+ stylecolor=blue}.
+
+\placefigure[here]{The \MyStyle{narrowblue}
+style with {\tt stylecolor=blue}}{\externalfigure[narrowblue][width=\textwidth]}
+
+% \page
+%
+% \subsection{\MyStyle{narrowred}}
+%
+% Like the \MyStyle{narrowblue} style, but with a red theme color.
+%
+% \placefigure[here]{The \MyStyle{narrowred}
+% style}{\externalfigure[narrowred][width=\textwidth]}
+
+\page
+
+\subsection{\MyStyle{quadblue}}
+
+This style is inspired by the colors and corporate look of my
+university. It is very sober and offers much space for text and
+images. There is a rough progress meter built into the blue quadrangles.
+
+\placefigure[here]{The \MyStyle{quadblue}
+ style}{\externalfigure[quadblue][width=\textwidth]}
+
+\page
+
+
+\subsection{\MyStyle{rainbowstripe}}
+
+A colorful style for daring presenters. The black line which marks the
+progress is reminiscent of absorption lines in star spectra, so this style
+may be apt for astrophysical presentations?
+
+\placefigure[here]{The \MyStyle{rainbowstripe}
+ style}{\externalfigure[rainbowstripes][width=\textwidth]}
+
+\page
+
+\subsection{\MyStyle{redframe}}
+
+This style is inspired by the screen version of the Metafun manual. Watch
+the small gray circles at the bottom!
+
+\placefigure[here]{The \MyStyle{redframe}
+ style}{\externalfigure[redframe][width=\textwidth]}
+
+\subsection{Customization}
+
+The style parameter allows easy customization. If you want to develop your
+own theme, I would suggest copying one of the style files to another name,
+say {\tt MyStyle.tex}, and modifying it to your heart's content: you can
+change the colors or define a different background altogether, think of a
+different way of displaying titles, different margins, etc. Just be sure to
+define all the macros that are needed. After producing your own style,
+again, copy it to a place where \TeX\ can find it (such as the same
+directory where the source of your presentation resides) and instruct the
+module to use your file:
+
+\startTEX
+\usemodule[taspresent][style=MyStyle,font=Times,size=17pt]
+\stopTEX
+
+\section{The {\tt font} Key}
+
+There is a number of predefined fonts which can be selected by setting the
+{\tt font} key.
+
+\starttabulate[|l|p|]
+\NC {\tt LatinModern} \NC typesets in LatinModern Serif\NC \NR
+\NC {\tt LatinModernSans} \NC typesets in LatinModern Sans\NC \NR
+\NC {\tt Times} \NC the free clone of TimesNew Roman\NC \NR
+\NC {\tt Helvetica} \NC the free clone of Helvetica\NC \NR
+\NC {\tt Pagella} \NC the tex-gyre clone of Palatino; this will
+only work if you have the tex-gyre fonts installed\NC \NR
+\stoptabulate
+
+In addition, there is a value {\tt User}; this will not set a font but
+allow you to provide your own settings. If you set your own font, please
+remember to select the bodyfont at \typeTEX{\Normalsize} and to give your setup
+commands {\em after} loading the module (or \TeX\ will not know what
+\typeTEX{\Normalsize} means and complain about an \quotation{undefined control
+ sequence}). For example, for the samples included here, I have used my own
+typescript which defines the Adobe MyriadPro font:
+
+\startTEX
+\usetypescriptfile[type-myriadpro]
+\usetypescript[MyriadPro] [texnansi]
+\setupbodyfont[MyMyriadPro,ss,\Normalsize]
+\stopTEX
+
+\section{The {\tt size} Key}
+
+This selects the font size for the main text and defines a corresponding
+size for titles.
+
+\placefigure[here]{Text and title sizes}
+{\setupTABLE[column][width=3cm,align=middle]
+\bTABLE
+\bTR \bTD Value \eTD \bTD Normalsize \eTD \bTD Titlesize \eTD \eTR
+\bTR \bTD 16pt \eTD \bTD 16pt \eTD \bTD 25pt \eTD \eTR
+\bTR \bTD 17pt \eTD \bTD 17pt \eTD \bTD 27pt \eTD \eTR
+\bTR \bTD 18pt \eTD \bTD 18pt \eTD \bTD 28pt \eTD \eTR
+\bTR \bTD 19pt \eTD \bTD 19pt \eTD \bTD 30pt \eTD \eTR
+\bTR \bTD 20pt \eTD \bTD 20pt \eTD \bTD 30pt \eTD \eTR
+\bTR \bTD 21pt \eTD \bTD 21pt \eTD \bTD 30pt \eTD \eTR
+\eTABLE}
+
+\section{Macros}
+
+The module provides some macros to facilitate the preparation of
+presentations.
+
+\subsection{\typeTEX{\setvariables}}
+
+Begin your presentation by setting the name of the author(s) and the title
+with this macro:
+
+\startTEX
+
+\setvariables [taspresent]
+ [author={Groucho Marx},
+ title={Marriage the Chief Cause of Divorce}]
+\stopTEX
+
+\subsection{\typeTEX{\Maketitle}}
+
+This macro will produce a title page with the author and the title of the
+presentation; the look is of course determined by the style of your
+presentation.
+
+\placefigure[here]{A Title Page}{\externalfigure[titlepage][width=\textwidth]}
+
+\subsection{\typeTEX{\Slidetitle{}}}
+
+As the name suggests, this macro typesets its argument as the title of the
+slide. What the title looks like is determined by the selected presentation
+style.
+
+\subsection{\typeTEX{\PicHoriz}}
+
+This macro facilitates the placement of landscape images. It takes two
+arguments:
+
+\startTEX
+\PicHoriz[image][height=\NormalHeight]
+\stopTEX
+
+The first argument is the name of the image you want to place; the second
+argument determines the size. If your picture is not too broad, a height of
+\typeTEX{\NormalHeight} will make it fill up the entire text area. If your
+picture is too broad, you should set \typeTEX{width=\textwidth}.
+
+\placefigure[here]{Placement of a horizontal picture}{\externalfigure[horizontal][width=\textwidth]}
+
+\page
+
+\subsection{\typeTEX{\PicVert}}
+
+This macro facilitates the placement of portrait images. It takes three
+arguments:
+
+\startTEX
+\PicVert[image][width=\NormalWidth]{Text \\ to go \\ with the picture}
+\stopTEX
+
+Again, the first argument is the name of the image you want to place; the
+second argument determines the size. If your picture is not too high, a
+width of \typeTEX{\NormalWidth} will make it fill up the entire left half
+of the text area. If your picture is too hight, you should set
+\typeTEX{height=\textheight}. The third argument is the text that will be
+placed opposite the picture.
+
+\placefigure[here]{Placement of a vertical picture}{\externalfigure[vertical][width=\textwidth]}
+
+\page
+
+\subsection{\typeTEX{\CircHoriz}}
+
+This command works exactly like \typeTEX{\PicHoriz}, but takes an
+additional (third) argument. It places a red circle on top of the picture;
+the placement and size of this circle is determined by this third argument:
+
+\startTEX
+\CircHoriz[scale=40,x=120,y=80][image][height=\NormalHeight]
+\stopTEX
+
+The {\tt scale} key sets the diameter of the circle (in mm), {\tt x}
+and {\tt y} set horizontal and vertical position. You will probably
+have to fiddle with these keys to get the circle exactly where you want
+it.
+
+
+\placefigure[here]{A picture with a red circle}{\externalfigure[circle][width=\textwidth]}
+
+\page
+
+\subsection{\typeTEX{\ArrowHoriz}}
+
+This command works exactly like \typeTEX{\PicHoriz}, but takes an
+additional (third) argument. It places a red arrow on top of the picture;
+the direction and size of this arrow is determined by this third argument:
+
+\startTEX
+\CircHoriz[direction=135,x=120,y=80][image][height=\NormalHeight]
+\stopTEX
+
+The {\tt direction} key sets the direction into which the arrowhead points,
+{\tt x} and {\tt y} set its horizontal and vertical position. You will
+probably have to fiddle with these keys to get the circle exactly where you
+want it.
+
+\placefigure[here]{A picture with a red arrow}{\externalfigure[arrow][width=\textwidth]}
+
+\page
+
+\subsection{\typeTEX{\CircVert} and \typeTEX{ArrowVert}}
+
+Of course, there are also circles and arrows for \quotation{vertical}
+pictures; again, the first argument is the position of the circle/arrow:
+
+\startTEX
+\CircVert[scale=22,x=23,y=25]%
+[vert]%
+[width=\NormalWidth]%
+{Circle in \\ Vertical Mode}
+
+\ArrowVert[direction=90,x=7,y=23]%
+[vert]%
+[width=\NormalWidth]%
+{Arrow in \\ Vertical Mode}
+\stopTEX
+
+\placefigure[here]{Vertical picture with red circle}{\externalfigure[circvert][width=\textwidth]}
+
+\placefigure[here]{Vertical picture with red arrow}{\externalfigure[arrvert][width=\textwidth]}
+
+\subsection{Background}
+
+Some of the styles provide up to three backgrounds: for titles, for slides
+with vertical image, and for normal slides with text or horizontal
+images. Switching the backgrounds also adjusts parameters like margins or
+headers, where this is necessary. There are three commands for setting the
+background for title slides, \quotation{horizontal} slides and
+\quotation{vertical} slides respectively:
+
+\startTEX
+\titback
+\lecback
+\picback
+\stopTEX
+
+\section{Handouts}
+
+The easiest way to make handouts from your slides is post|-|processing the
+pdf|-|file of your presentation. If you want to make the handouts from the
+slides such as they appear, just run this command in the directory where
+your slides are located (of course, put the name of your own presentation
+where you see {\tt demo.pdf} in the example; the entire command has to go
+in one long line):
+
+{\tt texmfstart texexec --pdfcombine --combination='2*3' --nobanner
+
+ --result=handout demo.pdf}
+
+This way, you will get a handout with six slides typeset in two columns per
+page.
+
+If you prefer to have the handouts without the colored background, typeset
+your presentation and leave the {\em style} key unset; that way, you will
+get a default version without backgrounds and fancy frames.
+
+\stoptext
+
+%%% Local Variables:
+%%% mode: context
+%%% TeX-master: t
+%%% End:
diff --git a/obsolete/macros/context/contrib/context-taspresent/doc/context/third/taspresent/vert.jpg b/obsolete/macros/context/contrib/context-taspresent/doc/context/third/taspresent/vert.jpg
new file mode 100644
index 0000000000..ff9d234db1
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-taspresent/doc/context/third/taspresent/vert.jpg
Binary files differ
diff --git a/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-blackblue.tex b/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-blackblue.tex
new file mode 100644
index 0000000000..6e79488a9b
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-blackblue.tex
@@ -0,0 +1,145 @@
+%D \module
+%D [ file=t-blackblue,
+%D version=2007.07.17,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Module blackblue,
+%D author=Thomas A. Schmitz,
+%D date=\currentdate,
+%D copyright={Thomas A. Schmitz}]
+%C
+%C Copyright 2007 Thomas A. Schmitz.
+%C This file may be distributed under the GNU General Public License v. 2.0.
+
+%D This file provides the \quotation{blackblue} style for the presentation
+%D module. It is loaded at runtime. The look of this style was inspired by the
+%D \quotation{Copenhagen} theme of the \LaTeX\ {\tt beamer} package.
+
+\writestatus{loading}{module blackblue}
+
+\startmodule[blackblue]
+
+\unprotect
+
+%D The taspresentation module provides a skeleton into which different styles
+%D can be hooked. It uses a number of variables and macros which have to be set
+%D beforehand. Some parts are optional. We begin with the necessary definitions:
+
+%D We start colors:
+
+\setupcolors[state=start]
+
+%D These macros are used for placing figures/pictures:
+
+\define\NormalHeight{\textheight}
+\define\NormalWidth{.476\textwidth}
+\define\PictureFrameHeight{\textheight}
+\define\PictureFrameWidth{.476\textwidth}
+
+%D The page layout:
+
+\setuplayout [width=fit,
+ margin=0cm,
+ height=fit,
+ header=3.2cm,
+ footer=.5cm,
+ topspace=.6cm,
+ backspace=1cm,
+ location=singlesided]
+
+%D The macro for typesetting the Slidetitle; this is adapted from a sample
+%D document that Brooks Moses published on the wiki:
+
+\definelayer[slidetitle]
+ [width=\paperwidth,
+ height=\paperheight,
+ x=10mm,
+ y=12mm]
+
+\define[1]\Slidetitle{\page\setlayer[slidetitle]%
+ {\framed[corner=round,background=color,backgroundcolor=a,frame=off,width=\textwidth,height=2.1cm,offset=0pt,top=\vss,bottom=\vss]{\switchtobodyfont[\Titlesize]\color[b]{#1}}}}
+
+%D The macro \tex{Maketitle} produces a default title page with the author, the
+%D title of the presentation, and the date. Using it is not mandatory.
+
+\define\Maketitle{%
+\titback
+\null
+\vfill
+\framed[corner=round,background=color,backgroundcolor=a,frame=off,width=\textwidth,height=.75\textheight,top=\vss,bottom=\vss,align=middle]{\switchtobodyfont[\Titlesize]\color[b]{\getvariable{taspresent}{title}}\switchtobodyfont[\Normalsize]\blank[line]\color[b]{\getvariable{taspresent}{author}\blank[2*line]\currentdate}}
+\vfill
+\null}
+
+%D The following parts are optional; if you don't use backgrounds and are
+%D content with CONTEXT's default itemization, you don't have to set these
+%D macros.
+
+%D We define our colors:
+
+\definecolor [b] [s=.9]
+\definecolor [c] [s=0]
+\definecolor [a] [r=.2, g=.2, b=.72]
+\definecolor [Item] [r=.2, g=.2, b=.75]
+
+%D We let Metapost calculate the background:
+
+\startuseMPgraphic{slide}
+StartPage ;
+path p[] ;
+numeric a; a=.5cm ;
+fill Page withcolor \MPcolor{b} ;
+path Main ;
+z1 = ulcorner Page shifted (0,-a) ;
+z2 = urcorner Page shifted (0,-a) ;
+z3 = llcorner Page shifted (0,a) ;
+z4 = lrcorner Page shifted (0,a) ;
+z5 = 1/2[ulcorner Page,urcorner Page] ;
+z6 = 1/2[z1,z2] ;
+z7 = 1/2[llcorner Page,lrcorner Page] ;
+z8 = 1/2[z3,z4] ;
+p[1] = ulcorner Page -- urcorner Page -- z2 -- z1 -- cycle ;
+p[2] = ulcorner Page -- z5 -- z6 -- z1 -- cycle ;
+p[3] = llcorner Page -- lrcorner Page -- z4 -- z3 -- cycle ;
+p[4] = llcorner Page -- z7 -- z8 -- z3 -- cycle ;
+fill p[1] withcolor \MPcolor{a} ;
+fill p[2] withcolor \MPcolor{c} ;
+fill p[3] withcolor \MPcolor{c} ;
+fill p[4] withcolor \MPcolor{a} ;
+draw \sometxt{\framed[frame=off,offset=0pt,width=.5\textwidth,height=.5cm,align=left,top=\vss,bottom=\vss,strut=no]{\ix\color[b]{\currentdate \quad}}} shifted (1cm,y1) ;
+draw \sometxt{\framed[frame=off,offset=0pt,width=.5\textwidth,height=.5cm,align=right,top=\vss,bottom=\vss,strut=no]{\ix\color[b]{\quad \folio\ of \lastpage}}} shifted (x5,y1) ;
+draw \sometxt{\framed[frame=off,offset=0pt,width=.5\textwidth,height=.5cm,align=left,top=\vss,bottom=\vss,strut=no]{\ix\color[b]{\getvariable{taspresent}{author}\quad}}} shifted (1cm,0) ;
+draw \sometxt{\framed[frame=off,offset=0pt,width=.5\textwidth,height=.5cm,align=right,top=\vss,bottom=\vss,strut=no]{\ix\color[b]{\quad \getvariable{taspresent}{title}}}} shifted (x5,0) ;
+StopPage ;
+\stopuseMPgraphic
+
+%D We define these backgrounds as overlays:
+
+\defineoverlay
+[lecbackground]
+[\useMPgraphic{slide}]
+
+\defineoverlay
+[picbackground]
+[\useMPgraphic{slide}]
+
+%D These are shortcuts to switch backgrounds:
+
+\define\lecback{\setuplayout[header=3.2cm]\setupbackgrounds[page][background={lecbackground,bottom,slidetitle}]}
+\define\titback{\setuplayout[header=.5cm]\setupbackgrounds[page][background=lecbackground]}
+\define\picback{\setuplayout[header=.5cm]\setupbackgrounds[page][background={lecbackground,bottom}]}
+\define\noback{\setupbackgrounds[page][background=nobackground]}
+
+%D We use combinations for placing vertical pictures and text side by side, and
+%D we want a distance of 1.1 cm between both.
+
+\setupcombinations[distance=1.1cm]
+
+%D The symbol for the first level of itemizations.
+
+\definesymbol[1][\useMPgraphic{ItSquare}]
+\setupitemize[1][color=a]
+
+\protect
+\stopmodule
+
+\endinput
+
diff --git a/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-bluegray.tex b/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-bluegray.tex
new file mode 100644
index 0000000000..e83b3e6f0e
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-bluegray.tex
@@ -0,0 +1,271 @@
+%D \module
+%D [ file=t-bluegray,
+%D version=2007.07.17,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Module bluegray,
+%D author=Thomas A. Schmitz,
+%D date=\currentdate,
+%D copyright={Thomas A. Schmitz}]
+%C
+%C Copyright 2007 Thomas A. Schmitz.
+%C This file may be distributed under the GNU General Public License v. 2.0.
+
+%D This file provides the \quotation{bluegray} style for the presentation
+%D module. It is loaded at runtime.
+
+\writestatus{loading}{module bluegray}
+
+\startmodule[bluegray]
+
+\unprotect
+
+%D The taspresentation module provides a skeleton into which different styles
+%D can be hooked. It uses a number of variables and macros which have to be set
+%D beforehand. Some parts are optional. We begin with the necessary definitions:
+
+%D The bluegray module has parameters of its own; we set them up and use
+%D them:
+
+\setupmodule[color=blue]
+
+\processaction[\currentmoduleparameter{color}]
+ [ blue=>\def\colormode{bluemode},
+ red=>\def\colormode{redmode},
+ \v!unknown=>\def\colormode{bluemode},
+ \v!default=>\def\colormode{bluemode}]
+
+\enablemode[\colormode]
+
+%D We define our colors:
+
+\startmode[bluemode]
+\definecolor [outer] [r=0.8,g=0.8,b=0.9]
+\definecolor [inner] [s=.88]
+\definecolor [One] [r=.67, g=0, b=.04]
+\definecolor [tcolor] [s=0]
+\stopmode
+
+\startmode[redmode]
+\definecolor [outer] [r=0.45,]
+\definecolor [inner] [s=.18]
+\definecolor [One] [r=.67, g=0, b=.04]
+\definecolor [tcolor] [s=1]
+\stopmode
+
+%D We start colors:
+
+\setupcolors[state=start,textcolor=tcolor]
+
+%D These macros are used for placing figures/pictures:
+
+\define\NormalHeight{\textheight}
+\define\NormalWidth{.476\textwidth}
+\define\PictureFrameHeight{\textheight}
+\define\PictureFrameWidth{.476\textwidth}
+
+%D The page layout:
+
+\setuplayout [width=fit,
+ margin=2cm,
+ height=fit,
+ leftmargindistance=.8cm,
+ rightmargindistance=0cm,
+ header=18mm,
+ footer=0cm,
+ topspace=.8cm,
+ backspace=2cm,
+ location=singlesided]
+
+%D The macro for typesetting the Slidetitle; this is adapted from a sample
+%D document that Brooks Moses published on the wiki:
+
+\definelayer[slidetitle]
+ [width=\paperwidth,
+ height=\paperheight,
+ x=20mm]
+
+\define[1]\Slidetitle{\page\setlayer[slidetitle]%
+ {\framed[frame=off,height=2.5cm,width=\textwidth,offset=0pt,align=middle,top=\vss,bottom=\vss]{\switchtobodyfont[\Titlesize]#1}}}
+
+%D The macro \tex{Maketitle} produces a default title page with the author, the
+%D title of the presentation, and the date. Using it is not mandatory.
+
+\define\Maketitle{%
+\titback
+\null
+\vfill
+\midaligned{\switchtobodyfont[\Titlesize]\getvariable{taspresent}{title}}
+\blank[2*line]
+\midaligned{\getvariable{taspresent}{author}}
+\blank[3*line]
+\midaligned{\currentdate}
+\vfill
+\null}
+
+%D The following parts are optional; if you don't use backgrounds and are
+%D content with CONTEXT's default itemization, you don't have to set these
+%D macros.
+
+%D This is the font we will use to draw the numbers on the slides
+
+\beginOLDTEX
+\definefontsynonym [BigN] [uhvb8r]
+\definefont[NumberFont] [BigN at 30pt]
+
+%D We let Metapost calculate the background:
+
+\startuniqueMPgraphic{textslide}
+StartPage ;
+fill Page withcolor \MPcolor{outer} ;
+fill Field[Text][Text] enlarged.2cm withcolor \MPcolor{inner} ;
+StopPage ;
+\stopuniqueMPgraphic
+
+\startuniqueMPgraphic{vertpic}
+StartPage ;
+fill Page withcolor \MPcolor{outer} ;
+path Main ;
+z1 = urcorner Field[Text][Text] shifted (.2cm,0) ;
+z2 = lrcorner Field[Text][Text] shifted (.2cm,-.2cm) ;
+z3 = z1 shifted (-8.05cm,0) ;
+z4 = (x3,y2) ;
+Main := z1 -- z2 -- z4 -- z3 --cycle ;
+fill Main withcolor \MPcolor{inner} ;
+StopPage ;
+\stopuniqueMPgraphic
+
+\startuseMPgraphic{Bottomone}
+StartPage
+picture Left, Right ;
+%defaultfont := "texnansi-myros-MyriadProBold" ;
+%defaultfont := "texnansi-lmssbx10" ;
+%Left := Right := thelabel("\folio",origin) ysized 5cm ;
+if PageNumber < 10:
+ Left := \sometxt{\framed[width=1cm,offset=0pt,align=middle,frame=off]{\color[outer]{\NumberFont \folio}}} ysized 6cm;
+ Right := \sometxt{\framed[width=1cm,offset=0pt,align=middle,frame=off]{\color[inner]{\NumberFont \folio}}} ysized 6cm;
+ clip Right to boundingbox Right xyscaled(0,3cm) shifted (bbwidth(Right)/2,0) ;
+ draw Left shifted (16.34cm,-.3cm) ;
+ draw Right shifted (16.34cm,-.3cm) ;
+fi;
+StopPage
+\stopuseMPgraphic
+
+
+\startuseMPgraphic{Bottomten}
+StartPage
+picture Left, Right ;
+%defaultfont := "texnansi-myros-MyriadProBold" ;
+%defaultfont := "texnansi-lmssbx10" ;
+%Left := Right := thelabel("\folio",origin) ysized 5cm ;
+if PageNumber >= 10:
+ Left := \sometxt{\framed[width=1.7cm,offset=0pt,align=middle,frame=off]{\color[outer]{\NumberFont \folio}}} ysized 6cm ;
+ Right := \sometxt{\framed[width=1.7cm,offset=0pt,align=middle,frame=off]{\color[inner]{\NumberFont \folio}}} ysized 6cm ;
+ clip Right to boundingbox Right xyscaled(0,3cm) shifted (bbwidth(Right)/1.5,0) ;
+ draw Left shifted (12.61cm,-.3cm) withcolor \MPcolor{outer} ;
+ draw Right shifted (12.61cm,-.3cm) withcolor \MPcolor{inner} ;
+fi ;
+StopPage
+\stopuseMPgraphic
+\endOLDTEX
+
+\beginLUATEX
+\definefontfeature[intended][script=latn,language=dflt,liga=yes,kern=yes,tlig=yes,trep=yes,mode=node]
+\font\NumberFont=name:texgyreheros-bold*intended at 30pt
+
+%D We let Metapost calculate the background:
+
+\startuniqueMPgraphic{textslide}
+StartPage ;
+fill Page withcolor \MPcolor{outer} ;
+fill Field[Text][Text] enlarged.2cm withcolor \MPcolor{inner} ;
+StopPage ;
+\stopuniqueMPgraphic
+
+\startuniqueMPgraphic{vertpic}
+StartPage ;
+fill Page withcolor \MPcolor{outer} ;
+path Main ;
+z1 = urcorner Field[Text][Text] shifted (.2cm,0) ;
+z2 = lrcorner Field[Text][Text] shifted (.2cm,-.2cm) ;
+z3 = z1 shifted (-8.05cm,0) ;
+z4 = (x3,y2) ;
+Main := z1 -- z2 -- z4 -- z3 --cycle ;
+fill Main withcolor \MPcolor{inner} ;
+StopPage ;
+\stopuniqueMPgraphic
+
+\startuseMPgraphic{Bottomone}
+StartPage
+picture Left, Right ;
+%defaultfont := "texnansi-myros-MyriadProBold" ;
+%defaultfont := "texnansi-lmssbx10" ;
+%Left := Right := thelabel("\folio",origin) ysized 5cm ;
+if PageNumber < 10:
+ Left := \sometxt{\framed[width=1cm,offset=0pt,align=middle,frame=off]{\color[outer]{\NumberFont \folio}}} ysized 6cm;
+ Right := \sometxt{\framed[width=1cm,offset=0pt,align=middle,frame=off]{\color[inner]{\NumberFont \folio}}} ysized 6cm;
+ clip Right to boundingbox Right xyscaled(0,3cm) shifted (bbwidth(Right)/2,0) ;
+ draw Left shifted (16.34cm,-.3cm) ;
+ draw Right shifted (16.34cm,-.3cm) ;
+fi;
+StopPage
+\stopuseMPgraphic
+
+
+\startuseMPgraphic{Bottomten}
+StartPage
+picture Left, Right ;
+%defaultfont := "texnansi-myros-MyriadProBold" ;
+%defaultfont := "texnansi-lmssbx10" ;
+%Left := Right := thelabel("\folio",origin) ysized 5cm ;
+if PageNumber >= 10:
+ Left := \sometxt{\framed[width=1.7cm,offset=0pt,align=middle,frame=off]{\color[outer]{\NumberFont \folio}}} ysized 6cm ;
+ Right := \sometxt{\framed[width=1.7cm,offset=0pt,align=middle,frame=off]{\color[inner]{\NumberFont \folio}}} ysized 6cm ;
+ clip Right to boundingbox Right xyscaled(0,3cm) shifted (bbwidth(Right)/1.5,0) ;
+ draw Left shifted (12.61cm,-.3cm) withcolor \MPcolor{outer} ;
+ draw Right shifted (12.61cm,-.3cm) withcolor \MPcolor{inner} ;
+fi ;
+StopPage
+\stopuseMPgraphic
+\endLUATEX
+
+%D We define these backgrounds as overlays:
+
+\defineoverlay
+[lecbackground]
+[\useMPgraphic{textslide}]
+
+\defineoverlay
+[picbackground]
+[\useMPgraphic{vertpic}]
+
+\defineoverlay
+[bottomone]
+[\useMPgraphic{Bottomone}]
+
+\defineoverlay
+[bottomten]
+[\useMPgraphic{Bottomten}]
+
+%D These are shortcuts to switch backgrounds:
+
+\define\lecback{\setuplayout[header=18mm]\setupbackgrounds[page][background={lecbackground,bottomone,bottomten,slidetitle}]}
+\define\titback{\setupbackgrounds[page][background=lecbackground]}
+\define\picback{\setuplayout[header=0mm]\setupbackgrounds[page][background={picbackground,bottomone,bottom,bottomten,slidetitle}]}
+\define\noback{\setupbackgrounds[page][background=nobackground]}
+
+%D We use combinations for placing vertical pictures and text side by side, and
+%D we want a distance of 1.1 cm between both.
+
+\setupcombinations[distance=1.1cm]
+
+%D The symbol for the first level of itemizations.
+
+\definesymbol[1][$\square$]
+\setupitemize[1][inmargin]
+%\setupitemize[each][joinedup,unpacked]
+
+\protect
+\stopmodule
+
+\endinput
+
diff --git a/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-bluestripe.tex b/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-bluestripe.tex
new file mode 100644
index 0000000000..ef61796d38
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-bluestripe.tex
@@ -0,0 +1,160 @@
+%D \module
+%D [ file=t-bluestripe,
+%D version=2007.07.17,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Module bluestripe,
+%D author=Thomas A. Schmitz,
+%D date=\currentdate,
+%D copyright={Thomas A. Schmitz}]
+%C
+%C Copyright 2007 Thomas A. Schmitz.
+%C This file may be distributed under the GNU General Public License v. 2.0.
+
+%D This file provides the \quotation{bluestripe} style for the presentation
+%D module. It is loaded at runtime. The theme for this style is inspired by the
+%D \quotation{Berkeley} theme of the \LaTeX\ Beamer package.
+
+\writestatus{loading}{module bluestripe}
+
+\startmodule[bluestripe]
+
+\unprotect
+
+%D The taspresentation module provides a skeleton into which different styles
+%D can be hooked. It uses a number of variables and macros which have to be set
+%D beforehand. Some parts are optional. We begin with the necessary definitions:
+
+%D We start colors; textcolor is white:
+
+\setupcolors[state=start]
+
+%D These macros are used for placing figures/pictures:
+
+\define\NormalHeight{\textheight}
+\define\NormalWidth{.476\textwidth}
+\define\PictureFrameHeight{\textheight}
+\define\PictureFrameWidth{.476\textwidth}
+
+%D The page layout:
+
+\setuplayout [width=fit,
+ leftmargin=1.5cm,
+ rightmargin=0cm,
+ leftmargindistance=.9cm,
+ rightmargindistance=0pt,
+ height=fit,
+ header=2.5cm,
+ footer=0cm,
+ topspace=.4cm,
+ backspace=2.9cm,
+ cutspace=2.8cm,
+ bottomspace=0cm,
+ bottom=0pt,
+ location=singlesided]
+
+%D The macro for typesetting the Slidetitle; this is adapted from a sample
+%D document that Brooks Moses published on the wiki:
+
+\definelayer[slidetitle]
+ [width=\paperwidth,
+ height=\paperheight,
+ x=29mm]
+
+\define[1]\Slidetitle{\page\setlayer[slidetitle]%
+ {\framed[frame=off,height=2.5cm,offset=0pt,top=\vss,bottom=\vss]{\switchtobodyfont[\Titlesize]\color[a]{#1}}}}
+
+%D The macro \tex{Maketitle} produces a default title page with the author, the
+%D title of the presentation, and the date. Using it is not mandatory.
+
+\define\Maketitle{%
+\titback
+\null
+\vfill
+\midaligned{\switchtobodyfont[\Titlesize]\color[b]{\getvariable{taspresent}{title}}}
+\blank[2*line]
+\midaligned{\color[b]{\getvariable{taspresent}{author}}}
+\blank[3*line]
+\midaligned{\color[b]{\currentdate}}
+\vfill
+\null}
+
+%D The following parts are optional; if you don't use backgrounds and are
+%D content with CONTEXT's default itemization, you don't have to set these
+%D macros.
+
+%D We define our colors:
+
+\definecolor [Item] [s=.9]
+\definecolor [a] [s=.9]
+\definecolor [c] [r=.15,g=.15,b=.525]
+\definecolor [b] [r=.2,g=.2,b=.7]
+\definecolor [d] [s=.4]
+
+%D We let Metapost calculate the background:
+
+\startuseMPgraphic{stripe}
+StartPage ;
+numeric a, dur, now, before, proa, prob ;
+pair k[], F[] ;
+a = 2.5cm ;
+dur = 1.5cm ;
+k[1] = ulcorner Page shifted (a,0) ;
+k[2] = llcorner Page shifted (a,0) ;
+k[3] = ulcorner Page shifted (0,-a) ;
+k[4] = urcorner Page shifted (0,-a) ;
+k[5] = ulcorner Page shifted (a,-a) ;
+path p[] ;
+p[1] = ulcorner Page -- k[1] -- k[2] -- llcorner Page -- cycle ;
+p[2] = ulcorner Page -- urcorner Page -- k[4] -- k[3] -- cycle ;
+p[3] = ulcorner Page -- k[1] -- k[5] -- k[3] -- cycle ;
+fill Page withcolor \MPcolor{a} ;
+fill p[1] withcolor \MPcolor{b} ;
+fill p[2] withcolor \MPcolor{b} ;
+fill p[3] withcolor \MPcolor{c} ;
+pickup pencircle scaled 5pt ;
+if \realfolio > 1:
+ before = PageNumber - 1 ;
+ now = NOfPages - 1 ;
+ prob = before/now ;
+ p[4] = unitcircle scaled dur rotated 90 shifted (dur + ((a-dur)/2),(a-dur)/2) ;
+ fill p[4] withcolor \MPcolor{a} ;
+ F[0] = center p[4] ;
+ F[1] = point 1 along p[4] ;
+ F[2] = point -prob along p[4] ;
+ F[3] = point -prob/2 along p[4] ;
+ p[5] = F[0] -- F[1] .. F[3] .. F[2] -- cycle ;
+ fill p[5] withcolor \MPcolor{d} ;
+fi ;
+StopPage ;
+\stopuseMPgraphic
+
+%D We define these backgrounds as overlays:
+
+\defineoverlay
+[lecbackground]
+[\useMPgraphic{stripe}]
+
+%D We use combinations for placing vertical pictures and text side by side, and
+%D we want a distance of 1.1 cm between both.
+
+\setupcombinations[distance=1.1cm]
+
+%D These are shortcuts to switch backgrounds:
+
+\define\lecback{\setupbackgrounds[page][background={lecbackground,slidetitle}]}
+\define\titback{\setupbackgrounds[page][background=lecbackground]}
+\define\picback{\setupbackgrounds[page][background={lecbackground,slidetitle}]}
+\define\noback{\setupbackgrounds[page][background=nobackground]}
+
+\setupbackgrounds[page][background=lecbackground]
+
+%D The symbol for the first level of itemizations.
+
+\definesymbol[1][\useMPgraphic{ItTriangle}]
+\setupitemize[1][inmargin][color=a]
+
+\protect
+\stopmodule
+
+\endinput
+
diff --git a/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-darkshade.tex b/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-darkshade.tex
new file mode 100644
index 0000000000..e85473a068
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-darkshade.tex
@@ -0,0 +1,165 @@
+%D \module
+%D [ file=t-darkshade,
+%D version=2007.07.17,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Module darkshade,
+%D author=Thomas A. Schmitz,
+%D date=\currentdate,
+%D copyright={Thomas A. Schmitz}]
+%C
+%C Copyright 2007 Thomas A. Schmitz.
+%C This file may be distributed under the GNU General Public License v. 2.0.
+
+%D This file provides the \quotation{darkshade} style for the presentation
+%D module. It is loaded at runtime.
+
+\writestatus{loading}{module darkshade}
+
+\startmodule[darkshade]
+
+\unprotect
+
+%D The taspresentation module provides a skeleton into which different styles
+%D can be hooked. It uses a number of variables and macros which have to be set
+%D beforehand. Some parts are optional. We begin with the necessary definitions:
+
+%D We start colors; textcolor is white:
+
+\setupcolors[state=start,textcolor=white]
+
+%D The darkshade module has parameters of its own; we set them up and use
+%D them:
+
+\setupmodule[color=blue]
+
+\processaction[\currentmoduleparameter{color}]
+ [ blue=>\def\colormode{bluemode},
+ green=>\def\colormode{greenmode},
+ bluered=>\def\colormode{blueredmode},
+ \v!unknown=>\def\colormode{bluemode},
+ \v!default=>\def\colormode{bluemode}]
+
+\enablemode[\colormode]
+
+%D These macros are used for placing figures/pictures:
+
+\define\NormalHeight{.83\textheight}
+\define\NormalWidth{.476\textwidth}
+\define\PictureFrameHeight{.83\textheight}
+\define\PictureFrameWidth{.476\textwidth}
+
+%D The page layout:
+
+\setuplayout [width=fit,
+ margin=1.5cm,
+ leftmargindistance=0pt,
+ rightmargindistance=0pt,
+ height=fit,
+ header=0pt,
+ footer=5pt,
+ topspace=.8cm,
+ backspace=1.5cm,
+ bottomspace=.8cm,
+ bottom=12pt,
+ location=singlesided]
+
+%D The macro for typesetting the Slidetitle:
+
+\define[1]\Slidetitle{\page\midaligned{\switchtobodyfont[\Titlesize]#1}\blank[0.75cm]}
+
+%D The macro \tex{Maketitle} produces a default title page with the author, the
+%D title of the presentation, and the date. Using it is not mandatory.
+
+\define\Maketitle{%
+\titback
+\null
+\vfill
+\midaligned{\switchtobodyfont[\Titlesize]\getvariable{taspresent}{title}}
+\blank[2*line]
+\midaligned{\getvariable{taspresent}{author}}
+\blank[3*line]
+\midaligned{\currentdate}
+\vfill
+\null}
+
+%D The following parts are optional; if you don't use backgrounds and are
+%D content with CONTEXT's default itemization, you don't have to set these
+%D macros.
+
+%D We define our colors:
+
+\startmode[blueredmode]
+\definecolor [InteractionColor] [b=.2]
+\definecolor [ContrastColor] [b=.8]
+\definecolor [One] [s=.6]
+\definecolor [Item] [s=1]
+\definecolor [a] [r=0.5,g=0,b=0]
+\definecolor [b] [r=0,g=0,b=0.5]
+\stopmode
+
+
+\startmode[bluemode]
+\definecolor [InteractionColor] [b=.2]
+\definecolor [ContrastColor] [b=.8]
+\definecolor [One] [s=.6]
+\definecolor [Item] [s=1]
+\definecolor [a] [r=0,g=0,b=1]
+\definecolor [b] [r=0,g=0,b=0.05]
+\stopmode
+
+\startmode[greenmode]
+\definecolor [InteractionColor] [s=.2]
+\definecolor [ContrastColor] [s=.5]
+\definecolor [One] [s=.6]
+\definecolor [Item] [s=1]
+\definecolor [a] [r=0,g=.8,b=0]
+\definecolor [b] [r=0,g=0.05,b=0]
+\stopmode
+
+%D We let Metapost calculate the background:
+
+\startuniqueMPgraphic{LinearShade}
+path p ;
+p := unitsquare xscaled \overlaywidth yscaled \overlayheight ;
+linear_shade(p,6,\MPcolor{a},\MPcolor{b}) ;
+\stopuniqueMPgraphic
+
+%D We define these backgrounds as overlays:
+
+\defineoverlay
+[lecbackground]
+[\useMPgraphic{LinearShade}]
+
+%D These are shortcuts to switch backgrounds:
+
+\define\lecback{\setupbackgrounds[page][background=lecbackground]\setupinteractionbar[state=start]}
+\define\titback{\setupbackgrounds[page][background=lecbackground]\setupinteractionbar[state=stop]}
+\define\picback{\setupbackgrounds[page][background=lecbackground]\setupinteractionbar[state=start]}
+\define\noback{\setupbackgrounds[page][background=lecbackground]}
+
+\setupbackgrounds[page][background=lecbackground]
+
+%D The symbol for the first level of itemizations.
+
+\definesymbol[1][\useMPgraphic{ItSquare}]
+
+%D The \quotation{darkshade} style uses \CONTEXT's interactionbar:
+
+\setupsubpagenumber[way=bytext,state=start]
+
+\setupinteraction
+ [page=yes,
+ color=InteractionColor,
+ contrastcolor=ContrastColor,
+ menu=on,
+ state=start]
+
+\startinteractionmenu[bottom]
+{\interactionbar[alternative=f,width=\makeupwidth,height=1ex]}
+\stopinteractionmenu
+
+\protect
+\stopmodule
+
+\endinput
+
diff --git a/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-doubleframe.tex b/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-doubleframe.tex
new file mode 100644
index 0000000000..9dc579d0a6
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-doubleframe.tex
@@ -0,0 +1,278 @@
+%D \module
+%D [ file=t-doubleframe,
+%D version=2007.07.17,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Module doubleframe,
+%D author=Thomas A. Schmitz,
+%D date=\currentdate,
+%D copyright={Thomas A. Schmitz}]
+%C
+%C Copyright 2007 Thomas A. Schmitz.
+%C This file may be distributed under the GNU General Public License v. 2.0.
+
+%D This file provides the \quotation{doubleframe} style for the presentation
+%D module. It is loaded at runtime.
+
+\writestatus{loading}{module doubleframe}
+
+\startmodule[doubleframe]
+
+\unprotect
+
+%D The taspresentation module provides a skeleton into which different styles
+%D can be hooked. It uses a number of variables and macros which have to be set
+%D beforehand. Some parts are optional. We begin with the necessary definitions:
+
+%D We start colors:
+
+\setupcolors[state=start]
+
+%D The doubleframe module has parameters of its own; we set them up and use
+%D them:
+
+\setupmodule[bottom=square]
+
+\processaction[\currentmoduleparameter{bottom}]
+ [ square=>\def\bottommode{squaremode},
+ stripe=>\def\bottommode{stripemode},
+ \v!unknown=>\def\bottommode{squaremode},
+ \v!default=>\def\bottommode{squaremode}]
+
+\enablemode[\bottommode]
+
+%D These macros are used for placing figures/pictures:
+
+\define\NormalHeight{.98\textheight}
+\define\NormalWidth{.485\textwidth}
+\define\PictureFrameHeight{.98\textheight}
+\define\PictureFrameWidth{.485\textwidth}
+
+%D The page layout:
+
+\setuplayout [width=fit,
+ margin=0.6cm,
+ height=fit,
+ header=2.1cm,
+ footer=1.35cm,
+ footerdistance=0.5cm,
+ topspace=0.5cm,
+ backspace=1cm,
+ location=singlesided]
+
+%D The macro for typesetting the Slidetitle; this is adapted from a sample
+%D document that Brooks Moses published on the wiki:
+
+\definelayer[slidetitle]
+ [width=\paperwidth,
+ height=\paperheight,
+ x=10mm,
+ y=3mm]
+
+\define[1]\Slidetitle{\page\setlayer[slidetitle]%
+ {\framed[frame=off,width=\textwidth,height=2.1cm,offset=0pt,top=\vss,bottom=\vss]{\switchtobodyfont[\Titlesize]\color[One]{#1}}}}
+
+%D The macro \tex{Maketitle} produces a default title page with the author, the
+%D title of the presentation, and the date. Using it is not mandatory.
+
+\define\Maketitle{%
+\titback
+%\switchtobodyfont[\Titlesize]
+\null
+\vfill
+\midaligned{\color[One]{\tfc\getvariable{taspresent}{title}}}
+\blank[3*line]
+\midaligned{\tfa\getvariable{taspresent}{author}}
+\blank[2*line]
+\midaligned{\tfa\currentdate}
+\vfill
+\null\switchtobodyfont[\Normalsize]}
+
+%D The following parts are optional; if you don't use backgrounds and are
+%D content with CONTEXT's default itemization, you don't have to set these
+%D macros.
+
+%D We define our colors:
+
+\definecolor [BackgroundColor] [r=.85, g=.85, b=.85]
+\definecolor [MyFrameColor] [r=.42, g=.42, b=.7]
+\definecolor [Dark] [r=.9, g=.9, b=.9]
+\definecolor [One] [r=0, g=0, b=.5]
+\definecolor [Two] [r=0, g=0, b=.55]
+\definecolor [Three] [r=0, g=0, b=.6]
+\definecolor [Four] [r=0, g=0, b=.65]
+\definecolor [Five] [r=0, g=0, b=.7]
+\definecolor [Six] [r=0, g=0, b=.75]
+\definecolor [Seven] [r=0, g=0, b=.8]
+\definecolor [Eight] [r=0, g=0, b=.85]
+\definecolor [Nine] [r=0, g=0, b=.9]
+\definecolor [Ten] [r=0, g=0, b=.95]
+\definecolor [Eleven] [r=0, g=0, b=1]
+\definecolor [Item] [One]
+
+%D We let Metapost calculate the background:
+
+\startmode[squaremode]
+\startuseMPgraphic{Bottom09}
+StartPage
+numeric a; a = 0.955cm ;
+numeric b; b = 0.52cm ;
+numeric c; c = 0.8cm ;
+path p[] ;
+p[2] = unitsquare xyscaled (a,a) shifted (b, c) ;
+p[3] = unitsquare xyscaled (a,a) shifted (b+2*a, c) ;
+p[4] = unitsquare xyscaled (a,a) shifted (b+4*a, c) ;
+p[5] = unitsquare xyscaled (a,a) shifted (b+6*a, c) ;
+p[6] = unitsquare xyscaled (a,a) shifted (b+8*a, c) ;
+p[7] = unitsquare xyscaled (a,a) shifted (b+10*a, c) ;
+p[8] = unitsquare xyscaled (a,a) shifted (b+12*a, c) ;
+p[9] = unitsquare xyscaled (a,a) shifted (b+14*a, c) ;
+p[10] = unitsquare xyscaled (a,a) shifted (b+16*a, c) ;
+p[11] = unitsquare xyscaled (a,a) shifted (b+18*a, c) ;
+p[12] = unitsquare xyscaled (a,a) shifted (b+20*a, c) ;
+fill p[2] withcolor \MPcolor{One} ;
+fill p[3] withcolor \MPcolor{Two} ;
+fill p[4] withcolor \MPcolor{Three} ;
+fill p[5] withcolor \MPcolor{Four} ;
+fill p[6] withcolor \MPcolor{Five} ;
+fill p[7] withcolor \MPcolor{Six} ;
+fill p[8] withcolor \MPcolor{Seven} ;
+fill p[9] withcolor \MPcolor{Eight} ;
+fill p[10] withcolor \MPcolor{Nine} ;
+fill p[11] withcolor \MPcolor{Ten} ;
+fill p[12] withcolor \MPcolor{Eleven} ;
+pickup pencircle scaled 2pt ;
+if NOfPages = 12:
+ for j=2 upto 12:
+ if PageNumber=(j):
+ draw llcorner p[j] --urcorner p[j] withcolor \MPcolor{BackgroundColor} ;
+ fi ;
+ endfor ;
+fi ;
+numeric o; o = NOfPages - 1 ;
+numeric i; i = PageNumber - 1 ;
+numeric k; k = i/o ;
+if NOfPages > 12:
+ if i = 1:
+ draw llcorner p[2] -- urcorner p[2] withcolor \MPcolor{BackgroundColor} ;
+ elseif (k>0.01) and (k<=2/11):
+ draw llcorner p[3] -- urcorner p[3] withcolor \MPcolor{BackgroundColor} ;
+ elseif (k>2/11) and (k<=3/11):
+ draw llcorner p[4] -- urcorner p[4] withcolor \MPcolor{BackgroundColor} ;
+ elseif (k>3/11) and (k<=4/11):
+ draw llcorner p[5] -- urcorner p[5] withcolor \MPcolor{BackgroundColor} ;
+ elseif (k>4/11) and (k<=5/11):
+ draw llcorner p[6] -- urcorner p[6] withcolor \MPcolor{BackgroundColor} ;
+ elseif (k>5/111) and (k<6/11):
+ draw llcorner p[7] -- urcorner p[7] withcolor \MPcolor{BackgroundColor} ;
+ elseif (k>6/11) and (k<=7/11):
+ draw llcorner p[8] -- urcorner p[8] withcolor \MPcolor{BackgroundColor} ;
+ elseif (k>7/11) and (k<=8/11):
+ draw llcorner p[9] -- urcorner p[9] withcolor \MPcolor{BackgroundColor} ;
+ elseif (k>8/11) and (k<=9/11):
+ draw llcorner p[10] -- urcorner p[10] withcolor \MPcolor{BackgroundColor} ;
+ elseif (k>9/11) and (k<1):
+ draw llcorner p[11] -- urcorner p[11] withcolor \MPcolor{BackgroundColor} ;
+ elseif k=1:
+ draw llcorner p[12] -- urcorner p[12] withcolor \MPcolor{BackgroundColor} ;
+ fi ;
+fi
+StopPage
+\stopuseMPgraphic
+\stopmode
+
+\startmode[stripemode]
+\startuseMPgraphic{Bottom09}
+StartPage
+path p[] ;
+p[1] := unitsquare xyscaled(0.95*OverlayWidth,1cm) shifted (0.52cm,0.8cm) ;
+linear_shade(p[1],0,\MPcolor{BackgroundColor},\MPcolor{One}) ;
+numeric i; i = PageNumber/NOfPages ;
+p[2] = ulcorner p[1] -- urcorner p[1] ;
+p[3] = llcorner p[1] -- lrcorner p[1] ;
+pair o[] ;
+o[1] := point i along p[2] ;
+o[2] := point i along p[3] ;
+p[4] = ulcorner p[1] -- o[1] -- o[2] -- llcorner p[1] -- cycle ;
+clip currentpicture to p[4] ;
+StopPage
+\stopuseMPgraphic
+\stopmode
+
+\startuniqueMPgraphic{PicBackground09}
+StartPage ;
+fill Page withcolor \MPcolor{BackgroundColor} ;
+draw unitsquare
+xyscaled(OverlayWidth,OverlayHeight)
+enlarged (-.2cm)
+withpen pencircle scaled 4pt
+withcolor \MPcolor{MyFrameColor} ;
+draw unitsquare
+xyscaled(0.448*OverlayWidth,0.815*OverlayHeight)
+shifted (0.528*OverlayWidth, 0.15*OverlayHeight)
+withpen pencircle scaled 2pt
+withcolor \MPcolor{MyFrameColor} ;
+StopPage ;
+\stopuniqueMPgraphic
+
+\startuniqueMPgraphic{Background09}
+fill unitsquare
+xyscaled(OverlayWidth,OverlayHeight)
+withcolor \MPcolor{BackgroundColor} ;
+draw unitsquare
+xyscaled(OverlayWidth,OverlayHeight)
+enlarged (-.2cm)
+withpen pencircle scaled 4pt
+withcolor \MPcolor{MyFrameColor} ;
+draw unitsquare
+xyscaled(0.95*OverlayWidth,0.7*OverlayHeight)
+shifted (0.025*OverlayWidth, 0.15*OverlayHeight)
+withpen pencircle scaled 2pt
+withcolor \MPcolor{MyFrameColor} ;
+\stopuniqueMPgraphic
+
+\startuniqueMPgraphic{FancyFrame}
+draw unitsquare xyscaled(OverlayWidth-2pt,OverlayHeight-2pt)
+withpen pencircle scaled 2pt
+withcolor \MPcolor{MyFrameColor} ;
+\stopuniqueMPgraphic
+
+%D We define these backgrounds as overlays:
+
+\defineoverlay
+[bottom]
+[\useMPgraphic{Bottom09}]
+
+\defineoverlay
+[lecbackground]
+[\useMPgraphic{Background09}]
+
+\defineoverlay
+[picbackground]
+[\useMPgraphic{PicBackground09}]
+
+\defineoverlay
+[FrameFrame]
+[\uniqueMPgraphic{FancyFrame}]
+
+%D These are shortcuts to switch backgrounds:
+
+\define\lecback{\setupbackgrounds[page][background={lecbackground,bottom,slidetitle}]\setuplayout[backspace=1cm,header=2.1cm]}
+\define\titback{\setupbackgrounds[page][background=lecbackground]\setuplayout[backspace=1cm]}
+\define\picback{\setupbackgrounds[page][background={picbackground,bottom}]\setuplayout[backspace=0.5cm,header=0cm]}
+\define\noback{\setupbackgrounds[page][background=nobackground]}
+
+%D We use combinations for placing vertical pictures and text side by side, and
+%D we want a distance of 1.1 cm between both.
+
+\setupcombinations[distance=1.1cm]
+
+%D The symbol for the first level of itemizations.
+
+\definesymbol[1][\useMPgraphic{ItSquare}]
+\setupitemize[color=One]
+
+\protect
+\stopmodule
+
+\endinput
+
diff --git a/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-doubleshade.tex b/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-doubleshade.tex
new file mode 100644
index 0000000000..858540e9ef
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-doubleshade.tex
@@ -0,0 +1,130 @@
+%D \module
+%D [ file=t-doubleshade,
+%D version=2007.07.17,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Module doubleshade,
+%D author=Thomas A. Schmitz,
+%D date=\currentdate,
+%D copyright={Thomas A. Schmitz}]
+%C
+%C Copyright 2007 Thomas A. Schmitz.
+%C This file may be distributed under the GNU General Public License v. 2.0.
+
+%D This file provides the \quotation{doubleshade} style for the presentation
+%D module. It is loaded at runtime.
+
+\writestatus{loading}{module doubleshade}
+
+\startmodule[doubleshade]
+
+\unprotect
+
+%D The taspresentation module provides a skeleton into which different styles
+%D can be hooked. It uses a number of variables and macros which have to be set
+%D beforehand. Some parts are optional. We begin with the necessary definitions:
+
+%D We start colors; textcolor is white:
+
+\setupcolors[state=start,textcolor=white]
+
+%D These macros are used for placing figures/pictures:
+
+\define\NormalHeight{.88\textheight}
+\define\NormalWidth{.476\textwidth}
+\define\PictureFrameHeight{.88\textheight}
+\define\PictureFrameWidth{.476\textwidth}
+
+%D The page layout:
+
+\setuplayout [width=fit,
+ leftmargin=1.5cm,
+ rightmargin=0cm,
+ leftmargindistance=.7cm,
+ rightmargindistance=0pt,
+ height=fit,
+ header=0pt,
+ footer=5pt,
+ topspace=.8cm,
+ backspace=3.5cm,
+ cutspace=2.7cm,
+ bottomspace=0cm,
+ bottom=0pt,
+ location=singlesided]
+
+%D The macro for typesetting the Slidetitle:
+
+\define[1]\Slidetitle{\page\framed[frame=off,offset=0pt,height=1.1cm,width=\textwidth,align=middle]{\switchtobodyfont[\Titlesize]\color[c]{#1}}\blank[0.5cm]}
+
+%D The macro \tex{Maketitle} produces a default title page with the author, the
+%D title of the presentation, and the date. Using it is not mandatory.
+
+\define\Maketitle{%
+\titback
+\null
+\vfill
+\midaligned{\switchtobodyfont[\Titlesize]\color[c]{\getvariable{taspresent}{title}}}
+\blank[2*line]
+\midaligned{\color[c]{\getvariable{taspresent}{author}}}
+\blank[3*line]
+\midaligned{\color[c]{\currentdate}}
+\vfill
+\null}
+
+%D The following parts are optional; if you don't use backgrounds and are
+%D content with CONTEXT's default itemization, you don't have to set these
+%D macros.
+
+%D We define our colors:
+
+\definecolor [Item] [r=1,g=1,b=1]
+\definecolor [a] [r=0,g=0,b=1]
+\definecolor [c] [r=.63,g=.8,b=1]
+\definecolor [b] [r=0,g=0,b=0.05]
+
+%D We let Metapost calculate the background:
+
+\startuseMPgraphic{LinearShade}
+StartPage ;
+path p[] ;
+p[1] := ulcorner Page -- llcorner Page -- llcorner Page shifted (4cm,0) -- ulcorner Page shifted (4cm,0) -- cycle ;
+circular_shade(p[1],0,\MPcolor{a},\MPcolor{b}) ;
+numeric a; a = 2*NOfPages-1 ;
+numeric c; c = PaperHeight/a ;
+for i = 1 step 2 until a:
+ p[i] := unitsquare xyscaled (0.5cm,0.5cm) ;
+ fill p[i] shifted (0.75cm,c*i) withcolor \MPcolor{a} ;
+ if i=(2*PageNumber-3):
+ fill p[i] shifted (0.75cm,c*i) withcolor \MPcolor{c} ;
+ fi ;
+endfor ;
+p[3] := ulcorner Field[Text][Text] -- urcorner Page -- lrcorner Page -- llcorner Field[Text][Text] -- cycle ;
+p[3] := p[3] enlarged (.4cm,.4cm) ;
+linear_shade(p[3],6,\MPcolor{a},\MPcolor{b}) ;
+StopPage ;
+\stopuseMPgraphic
+
+%D We define these backgrounds as overlays:
+
+\defineoverlay
+[lecbackground]
+[\useMPgraphic{LinearShade}]
+
+%D These are shortcuts to switch backgrounds:
+
+\define\lecback{\setupbackgrounds[page][background=lecbackground]}
+\define\titback{\setupbackgrounds[page][background=lecbackground]}
+\define\picback{\setupbackgrounds[page][background=lecbackground]}
+\define\noback{\setupbackgrounds[page][background=lecbackground]}
+
+\setupbackgrounds[page][background=lecbackground]
+
+%D The symbol for the first level of itemizations.
+
+\definesymbol[1][\useMPgraphic{ItSquare}]
+\setupitemize[1][inmargin]
+
+\protect
+\stopmodule
+
+\endinput
+
diff --git a/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-embossed.tex b/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-embossed.tex
new file mode 100644
index 0000000000..efeb9aab5e
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-embossed.tex
@@ -0,0 +1,154 @@
+%D \module
+%D [ file=t-embossed,
+%D version=2007.07.17,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Module embossed,
+%D author=Thomas A. Schmitz,
+%D date=\currentdate,
+%D copyright={Thomas A. Schmitz}]
+%C
+%C Copyright 2007 Thomas A. Schmitz.
+%C This file may be distributed under the GNU General Public License v. 2.0.
+
+%D This file provides the \quotation{embossed} style for the presentation
+%D module. It is loaded at runtime.
+
+\writestatus{loading}{module embossed}
+
+\startmodule[embossed]
+
+\unprotect
+
+%D The taspresentation module provides a skeleton into which different styles
+%D can be hooked. It uses a number of variables and macros which have to be set
+%D beforehand. Some parts are optional. We begin with the necessary definitions:
+
+%D We start colors:
+
+\setupcolors[state=start]
+
+%D These macros are used for placing figures/pictures:
+
+\define\NormalHeight{.94\textheight}
+\define\NormalWidth{.476\textwidth}
+\define\PictureFrameHeight{.94\textheight}
+\define\PictureFrameWidth{.476\textwidth}
+
+%D The page layout:
+
+\setuplayout [width=fit,
+ margin=1.3cm,
+ height=fit,
+ header=1cm,
+ footer=1cm,
+ topspace=10mm,
+ backspace=2cm,
+ location=singlesided]
+
+%D The macro for typesetting the Slidetitle; this is adapted from a sample
+%D document that Brooks Moses published on the wiki:
+
+\definelayer[slidetitle]
+ [width=\paperwidth,
+ height=\paperheight,
+ x=20mm,
+ y=2mm]
+
+\define[1]\Slidetitle{\page\setlayer[slidetitle]%
+ {\framed[frame=off,height=2cm,width=\textwidth,offset=0pt,align=middle,top=\vss,bottom=\vss]{\switchtobodyfont[\Titlesize]\color[e]{#1}}}}
+
+%D The macro \tex{Maketitle} produces a default title page with the author, the
+%D title of the presentation, and the date. Using it is not mandatory.
+
+\define\Maketitle{%
+\titback
+\null
+\vfill
+\midaligned{\switchtobodyfont[\Titlesize]\color[e]{\getvariable{taspresent}{title}}}
+\blank[2*line]
+\midaligned{\getvariable{taspresent}{author}}
+\blank[3*line]
+\midaligned{\currentdate}
+\vfill
+\null}
+
+%D The following parts are optional; if you don't use backgrounds and are
+%D content with CONTEXT's default itemization, you don't have to set these
+%D macros.
+
+%D We define our colors:
+
+\definecolor [a] [r=1,g=1,b=.8]
+\definecolor [Item] [r=.2,b=.2,b=.5]
+\definecolor [b] [r=.6,g=.2,b=.2]
+\definecolor [c] [r=.7,g=.2,b=.2]
+\definecolor [d] [r=.4,g=.2,b=.2]
+\definecolor [e] [r=.2,g=.2,b=.5]
+\definecolor [f] [s=.4]
+
+\beginOLDTEX
+\definefontsynonym [BigBoss] [uhvb8r]
+\definefont[Emblem] [BigBoss at 30pt]
+\endOLDTEX
+
+\beginLUATEX
+\definefontsynonym [BigBoss] [name:TeXGyreHeros-Bold]
+\definefont[Emblem] [BigBoss at 30pt]
+\endLUATEX
+
+%D However, it seemed more portable to let Metapost calculate the background.
+%D The rainbow effect takes some lines of code, but it's not too bad:
+
+\startuseMPgraphic{redyellow}
+StartPage ;
+picture boss ;
+picture bboss ;
+pair zf[] ;
+fill Page withcolor \MPcolor{a} ;
+path gr[] ;
+numeric a; a = 2cm ;
+numeric b; b = 0.9cm ;
+z.f1 = llcorner Page shifted (0,a) ;
+z.f2 = lrcorner Page shifted (0,a) ;
+gr[1] = llcorner Page -- z.f1 -- z.f2 -- lrcorner Page -- cycle ;
+fill gr[1] withcolor \MPcolor{b} ;
+pickup pencircle scaled 6pt ;
+gr[2] = ulcorner Page -- urcorner Page -- lrcorner Page -- llcorner Page -- cycle ;
+gr[2] := gr[2] enlarged -2.8.pt ;
+draw gr[2] withcolor \MPcolor{f} ;
+draw z.f1 -- z.f2 withcolor \MPcolor{f} ;
+boss := \sometxt{\framed[width=\textwidth,height=2cm,offset=0pt,align=right,top=\vss,bottom=\vss,frame=off]{\Emblem \color[c]{Made with \CONTEXT\hfill \pagenumber\ of \lastpage}}} ;
+bboss := \sometxt{\framed[width=\textwidth,height=2cm,offset=0pt,align=right,top=\vss,bottom=\vss,frame=off]{\strut\Emblem \color[d]{Made with \CONTEXT\hfill \pagenumber\ of \lastpage}}} ;
+draw bboss shifted (1.96cm,0.04cm) ;
+draw boss shifted (2cm,0) ;
+StopPage ;
+\stopuseMPgraphic
+
+
+%D We define these backgrounds as overlays:
+
+\defineoverlay[yellowbg]
+[\useMPgraphic{redyellow}]
+
+%D These are shortcuts to switch backgrounds:
+
+\define\lecback{\setuplayout[header=10mm]\setupbackgrounds[page][background={yellowbg,slidetitle}]}
+\define\titback{\setuplayout[header=0mm]\setupbackgrounds[page][background={yellowbg}]}
+\define\picback{\setuplayout[header=0mm]\setupbackgrounds[page][background={yellowbg}]}
+\define\noback{\setupbackgrounds[page][background=nobackground]}
+
+%D We use combinations for placing vertical pictures and text side by side, and
+%D we want a distance of 1.1 cm between both.
+
+\setupcombinations[distance=1.1cm]
+
+%D The symbol for the first level of itemizations.
+
+\definesymbol[1][\useMPgraphic{ItSquare}]
+\setupitemize[1][inmargin][color=e]
+
+\protect
+\stopmodule
+
+\endinput
+
diff --git a/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-graybeams.tex b/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-graybeams.tex
new file mode 100644
index 0000000000..1388cc9335
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-graybeams.tex
@@ -0,0 +1,172 @@
+%D \module
+%D [ file=t-graybeams,
+%D version=2007.07.17,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Module graybeams,
+%D author=Thomas A. Schmitz,
+%D date=\currentdate,
+%D copyright={Thomas A. Schmitz}]
+%C
+%C Copyright 2007 Thomas A. Schmitz.
+%C This file may be distributed under the GNU General Public License v. 2.0.
+
+%D This file provides the \quotation{graybeams} style for the presentation
+%D module. It is loaded at runtime. The look of this style was inspired by the
+%D \quotation{Copenhagen} theme of the \LaTeX\ {\tt beamer} package.
+
+\writestatus{loading}{module graybeams}
+
+\startmodule[graybeams]
+
+\unprotect
+
+%D The taspresentation module provides a skeleton into which different styles
+%D can be hooked. It uses a number of variables and macros which have to be set
+%D beforehand. Some parts are optional. We begin with the necessary definitions:
+
+%D We start colors:
+
+\setupcolors[state=start]
+
+%D These macros are used for placing figures/pictures:
+
+\define\NormalHeight{.97\textheight}
+\define\NormalWidth{.476\textwidth}
+\define\PictureFrameHeight{.97\textheight}
+\define\PictureFrameWidth{.476\textwidth}
+
+%D The page layout:
+
+\setuplayout [width=fit,
+ margin=0cm,
+ height=14.7cm,
+ header=1.75cm,
+ footer=1.5cm,
+ topspace=1cm,
+ backspace=1cm,
+ location=singlesided]
+
+%D The macro for typesetting the Slidetitle; this is adapted from a sample
+%D document that Brooks Moses published on the wiki:
+
+\definelayer[slidetitle]
+ [width=\paperwidth,
+ height=\paperheight,
+ x=10mm]
+
+\define[1]\Slidetitle{\page\setlayer[slidetitle]%
+ {\framed[frame=off,width=\textwidth,height=2.25cm,offset=0pt,top=\vss,bottom=\vss]{\switchtobodyfont[\Titlesize]\color[c]{#1}}}}
+
+%D The macro \tex{Maketitle} produces a default title page with the author, the
+%D title of the presentation, and the date. Using it is not mandatory.
+
+\define\Maketitle{%
+\titback
+\null
+\vfill
+\framed[frame=off,width=\textwidth,height=.75\textheight,top=\vss,bottom=\vss,align=middle]{\switchtobodyfont[\Titlesize]\color[c]{\getvariable{taspresent}{title}}\switchtobodyfont[\Normalsize]\blank[line]\color[c]{\getvariable{taspresent}{author}\blank[2*line]\currentdate}}
+\vfill
+\null}
+
+%D The following parts are optional; if you don't use backgrounds and are
+%D content with CONTEXT's default itemization, you don't have to set these
+%D macros.
+
+%D We define our colors:
+
+\definecolor [a] [s=.97]
+\definecolor [b] [s=.88]
+\definecolor [c] [r=.75]
+\definecolor [Item] [r=.75]
+
+%D We let Metapost calculate the background:
+
+\startuniqueMPgraphic{beams}
+StartPage ;
+pair zd[] ;
+path pb[] ;
+numeric a; a=2.1cm ;
+numeric b; b=1.5cm ;
+fill Page withcolor \MPcolor{a} ;
+z.d1 = llcorner Page shifted (0,2*a) ;
+z.d2 = z.d1 shifted (0,2*a) ;
+z.d3 = lrcorner Page shifted (0,b) ;
+z.d4 = z.d3 shifted (0,b) ;
+z.d5 = z.d2 shifted (0,b) ;
+z.d6 = ulcorner Page shifted (.1cm,0) ;
+z.d7 = z.d4 shifted (0,b/2) ;
+z.d8 = z.d7 shifted (0,b) ;
+z.d9 = ulcorner Page shifted (.1cm+a,0) ;
+z.d10 = z.d9 shifted (3*a,0) ;
+z.d11 = z.d8 shifted (0,b/2) ;
+z.d12 = z.d11 shifted (0,b) ;
+z.d13 = z.d10 shifted (a,0) ;
+z.d14 = z.d13 shifted (3*a,0) ;
+z.d15 = z.d12 shifted (0,b/2) ;
+z.d16 = z.d15 shifted (0,b) ;
+z.d17 = llcorner Page shifted (0,b) ;
+pb[1] = z.d1 -- z.d2 -- z.d4 -- z.d3 -- cycle ;
+fill pb[1] withcolor \MPcolor{b} ;
+pb[2] = z.d5 -- ulcorner Page -- z.d6 -- z.d8 -- z.d7 -- cycle ;
+fill pb[2] withcolor \MPcolor{b} ;
+pb[3] = z.d9 -- z.d10 -- z.d12 -- z.d11 -- cycle ;
+fill pb[3] withcolor \MPcolor{b} ;
+pb[4] = z.d13 -- z.d14 -- z.d16 -- z.d15 -- cycle ;
+fill pb[4] withcolor \MPcolor{b} ;
+pb[5] = llcorner Page -- z.d17 -- z.d3 -- lrcorner Page -- cycle ;
+fill pb[5] withcolor \MPcolor{c} ;
+StopPage ;
+\stopuniqueMPgraphic
+
+\startuniqueMPgraphic{redstripes}
+StartPage ;
+path pb[] ;
+numeric b; b=1.5cm ;
+z.d18 = ulcorner Page shifted (0,-1.5*b) ;
+z.d19 = z.d18 shifted (0,-1pt) ;
+z.d20 = urcorner Page shifted (0,-1.5*b) ;
+z.d21 = z.d20 shifted (0,-1pt) ;
+pb[6] = z.d18 -- z.d19 -- z.d21 -- z.d20 -- cycle ;
+linear_shade(pb[6],0,\MPcolor{c},\MPcolor{a}) ;
+pb[7] = pb[6] shifted (0,-3pt) ;
+linear_shade(pb[7],0,\MPcolor{c},\MPcolor{a}) ;
+StopPage ;
+\stopuniqueMPgraphic
+
+%D We define these backgrounds as overlays:
+
+\defineoverlay
+[lecbackground]
+[\useMPgraphic{redstripes}]
+
+\defineoverlay
+[picbackground]
+[\useMPgraphic{beams}]
+
+%D We define the footer
+
+\setupfooter[color=a,style={\switchtobodyfont[10pt]},strut=yes]
+\setupfootertexts[{\framed[frame=off,height=1cm,width=\textwidth]{\getvariable{taspresent}{title}\hfill \pagenumber\ of \lastpage}}]
+
+%D These are shortcuts to switch backgrounds:
+
+\define\lecback{\setuplayout[header=1.75cm]\setupfooter[state=start]\setupbackgrounds[page][background={picbackground,lecbackground,slidetitle}]}
+\define\titback{\setuplayout[header=1.75cm]\setupfooter[state=stop]\setupbackgrounds[page][background={picbackground,lecbackground}]}
+\define\picback{\setuplayout[header=0cm]\setupfooter[state=start]\setupbackgrounds[page][background={picbackground}]}
+\define\noback{\setupbackgrounds[page][background=nobackground]}
+
+%D We use combinations for placing vertical pictures and text side by side, and
+%D we want a distance of 1.1 cm between both.
+
+\setupcombinations[distance=1.1cm]
+
+%D The symbol for the first level of itemizations.
+
+\definesymbol[1][\useMPgraphic{ItSquare}]
+\setupitemize[1][color=c]
+
+\protect
+\stopmodule
+
+\endinput
+
diff --git a/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-graysquare.tex b/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-graysquare.tex
new file mode 100644
index 0000000000..e02fd0a1af
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-graysquare.tex
@@ -0,0 +1,145 @@
+%D \module
+%D [ file=t-graysquare,
+%D version=2007.07.17,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Module graysquare,
+%D author=Thomas A. Schmitz,
+%D date=\currentdate,
+%D copyright={Thomas A. Schmitz}]
+%C
+%C Copyright 2007 Thomas A. Schmitz.
+%C This file may be distributed under the GNU General Public License v. 2.0.
+
+%D This file provides the \quotation{graysquare} style for the presentation
+%D module. It is loaded at runtime. This minimalistic design is inspired by a
+%D presentation Taco gave at EuroTeX 2006.
+
+\writestatus{loading}{module graysquare}
+
+\startmodule[graysquare]
+
+\unprotect
+
+%D The taspresentation module provides a skeleton into which different styles
+%D can be hooked. It uses a number of variables and macros which have to be set
+%D beforehand. Some parts are optional. We begin with the necessary definitions:
+
+%D We define our colors:
+
+\definecolor [a] [r=.95,g=.95,b=.95]
+\definecolor [b] [r=.7,g=.1,b=.3]
+\definecolor [c] [s=.3]
+\definecolor [Item] [r=.7,g=.1,b=.3]
+
+%D We start colors:
+
+\setupcolors[state=start]
+
+%D These macros are used for placing figures/pictures:
+
+\define\NormalHeight{\textheight}
+\define\NormalWidth{.5\textwidth}
+\define\PictureFrameHeight{\textheight}
+\define\PictureFrameWidth{.5\textwidth}
+
+%D The page layout:
+
+\setuplayout [width=fit,
+ height=middle,
+ margin=0cm,
+ height=fit,
+ margindistance=0cm,
+ header=0cm,
+ footer=0cm,
+ topspace=2cm,
+ backspace=1.5cm,
+ location=singlesided]
+
+%D The macro for typesetting the Slidetitle; this is adapted from a sample
+%D document that Brooks Moses published on the wiki:
+
+\definelayer[slidetitle]
+ [width=\paperwidth,
+ height=\paperheight,
+ x=15mm]
+
+\define[1]\Slidetitle{\page\setlayer[slidetitle]%
+ {\framed[framecolor=red,frame=off,width=\textwidth,height=3cm,offset=0pt,top=\vss,bottom=\vss,align=left]{\switchtobodyfont[\Titlesize]\color[b]{#1}}}}
+
+%D The macro \tex{Maketitle} produces a default title page with the author, the
+%D title of the presentation, and the date. Using it is not mandatory.
+
+\define\Maketitle{%
+\titback
+\null
+\vfill
+\midaligned{\switchtobodyfont[\Titlesize]\color[b]{\getvariable{taspresent}{title}}}
+\blank[2*line]
+\midaligned{\color[b]{\getvariable{taspresent}{author}}}
+\blank[3*line]
+\midaligned{\color[b]{\currentdate}}
+\vfill
+\null}
+
+%D The following parts are optional; if you don't use backgrounds and are
+%D content with CONTEXT's default itemization, you don't have to set these
+%D macros.
+
+%D We let Metapost calculate the background:
+
+\startuseMPgraphic{bottom}
+StartPage ;
+fill Page withcolor \MPcolor{a} ;
+z.b1 = llcorner Field[Text][Text] ;
+z.b2 = lrcorner Field[Text][Text] ;
+path wdt ;
+wdt = z.b1 -- z.b2 ;
+numeric diff; diff = .3cm ;
+numeric arc; arc = arclength (wdt) - diff ;
+numeric pages; pages = NOfPages - 1 ;
+numeric factor; factor = arc/pages ;
+path m[] ;
+m[0] = unitsquare xyscaled (diff,diff) shifted (x.b1,0.85cm) ;
+fill m[0] withcolor \MPcolor{c} ;
+if PageNumber = 1:
+ fill m[0] xyscaled (0,2) shifted (0,-diff-.85cm) withcolor \MPcolor{b} ;
+fi ;
+for i = 1 upto pages:
+ m[i] = m[0] shifted (i*factor,0) ;
+ fill m[i] withcolor \MPcolor{c} ;
+ if i+1 = PageNumber:
+% fill m[i] withcolor \MPcolor{b} ;
+ fill m[i] xyscaled (0,2) shifted (0,-diff-.85cm) withcolor \MPcolor{b} ;
+ fi ;
+endfor ;
+StopPage ;
+\stopuseMPgraphic
+
+%D We define these backgrounds as overlays:
+
+\defineoverlay
+[lecbackground]
+[\useMPgraphic{bottom}]
+
+%D These are shortcuts to switch backgrounds:
+
+\define\lecback{\setuplayout[header=1cm]\setupbackgrounds[page][background={lecbackground,slidetitle}]}
+\define\titback{\setuplayout[header=0cm]\setupbackgrounds[page][background=lecbackground]}
+\define\picback{\setuplayout[header=0cm]\setupbackgrounds[page][background={lecbackground,slidetitle}]}
+\define\noback{\setupbackgrounds[page][background=nobackground]}
+
+%D We use combinations for placing vertical pictures and text side by side, and
+%D we want a distance of 1.1 cm between both.
+
+\setupcombinations[distance=0cm]
+
+%D The symbol for the first level of itemizations.
+
+\definesymbol[1][\useMPgraphic{ItSquare}]
+\setupitemize[1][color=b]
+
+\protect
+\stopmodule
+
+\endinput
+
diff --git a/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-greenblue.tex b/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-greenblue.tex
new file mode 100644
index 0000000000..311fe74d71
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-greenblue.tex
@@ -0,0 +1,209 @@
+%D \module
+%D [ file=t-greenblue,
+%D version=2007.07.25,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Module greenblue,
+%D author=Thomas A. Schmitz,
+%D date=\currentdate,
+%D copyright={Thomas A. Schmitz}]
+%C
+%C Copyright 2007 Thomas A. Schmitz.
+%C This file may be distributed under the GNU General Public License v. 2.0.
+
+%D This file provides the \quotation{greenblue} style for the presentation
+%D module. It is loaded at runtime. The theme for this style is inspired by the
+%D \quotation{Berkeley} theme of the \LaTeX\ Beamer package.
+
+\writestatus{loading}{module greenblue}
+
+\startmodule[greenblue]
+
+\unprotect
+
+%D The taspresentation module provides a skeleton into which different styles
+%D can be hooked. It uses a number of variables and macros which have to be set
+%D beforehand. Some parts are optional. We begin with the necessary definitions:
+
+%D We define our colors:
+
+\definecolor [Item] [r=.09,g=.2,b=.41]
+\definecolor [a] [s=.95]
+\definecolor [b] [r=.58,g=.81,b=.58]
+\definecolor [c] [r=.09,g=.2,b=.41]
+\definecolor [d] [r=.04,g=.4,b=.4]
+
+%D We start colors; textcolor is white:
+
+\setupcolors[state=start,textcolor=c]
+
+%D These macros are used for placing figures/pictures:
+
+\define\NormalHeight{\textheight}
+\define\NormalWidth{.476\textwidth}
+\define\PictureFrameHeight{\textheight}
+\define\PictureFrameWidth{.476\textwidth}
+
+%D The page layout:
+
+\setuplayout [width=fit,
+ leftmargin=1.5cm,
+ rightmargin=0cm,
+ leftmargindistance=1.2cm,
+ rightmargindistance=0pt,
+ height=fit,
+ header=5.3cm,
+ footer=0cm,
+ topspace=.4cm,
+ backspace=2.5cm,
+ cutspace=3.2cm,
+ bottomspace=0cm,
+ bottom=0pt,
+ location=singlesided]
+
+%D The macro for typesetting the Slidetitle; this is adapted from a sample
+%D document that Brooks Moses published on the wiki:
+
+\definelayer[slidetitle]
+ [width=\paperwidth,
+ height=\paperheight,
+ x=25mm,
+ y=25mm]
+
+\define[1]\Slidetitle{\page\setlayer[slidetitle]%
+ {\framed[frame=off,width=\textwidth,height=2cm,offset=0pt,align=right,top=\vss,bottom=\vss]{\switchtobodyfont[\Titlesize]\color[d]{\bf #1}}}}
+
+%D The macro \tex{Maketitle} produces a default title page with the author, the
+%D title of the presentation, and the date. Using it is not mandatory.
+
+\definelayer[prestitle]
+ [width=\paperwidth,
+ height=\paperheight,
+ y=30mm]
+
+\definelayer[presauthor]
+ [width=.5\paperwidth,
+ height=.5\paperheight,
+ x=104mm,
+ y=118mm]
+
+\define\Maketitle{%
+\titback\null
+\setlayer[prestitle]%
+{\framed[frame=off,width=\paperwidth,height=4cm,offset=0pt,align=middle,top=\vss,bottom=\vss]{\switchtobodyfont[\Titlesize]\color[c]{\bf \getvariable{taspresent}{title}}}}
+\setlayer[presauthor]%
+{\framed[frame=off,width=.5\paperwidth,height=4cm,offset=0pt,align=middle,top=\vss,bottom=\vss]{\switchtobodyfont[\Normalsize]\color[c]{\getvariable{taspresent}{author}}}}}
+
+%D The following parts are optional; if you don't use backgrounds and are
+%D content with CONTEXT's default itemization, you don't have to set these
+%D macros.
+
+%D We let Metapost calculate the background:
+
+\startuseMPgraphic{greenframe}
+StartPage ;
+fill Page withcolor \MPcolor{a} ;
+numeric a ; a = 2cm ;
+numeric b ; b = 0.7cm ;
+numeric c ; c = 6cm ;
+numeric d ; d = .7cm ;
+pair zc[] ;
+zc1 = llcorner Page shifted (a,0) ;
+zc2 = ulcorner Page shifted (a,-a-b) ;
+zc3 = ulcorner Page shifted (a+b/4,-a-b/4) ;
+zc4 = ulcorner Page shifted (a+b,-a) ;
+zc5 = urcorner Page shifted (0,-a) ;
+zc6 = ulcorner Page shifted (c,0) ;
+zc7 = ulcorner Page shifted (c,-a) ;
+path pa[] ;
+pa[1] = llcorner Page -- zc1 -- zc2 .. zc3 .. zc4 -- zc7 -- zc6 -- ulcorner Page -- cycle ;
+fill pa[1] withcolor \MPcolor{b} ;
+draw \sometxt{\framed[frame=off,width=2cm,height=2cm]{\color[a]{\pagenumber}}} ;
+StopPage ;
+\stopuseMPgraphic
+
+\startuniqueMPgraphic{bluebeam}
+StartPage ;
+numeric a ; a = 2cm ;
+numeric b ; b = 0.7cm ;
+numeric c ; c = 6cm ;
+numeric d ; d = .7cm ;
+pair zc[] ;
+zc8 = ulcorner Page shifted (a/2,-2.2*a) ;
+zc9 = zc8 shifted (0,-d) ;
+zc10 = urcorner Page shifted (-a,-2.2*a-d) ;
+zc11 = zc10 shifted (0,d) ;
+zc12 = zc8 shifted (-d/2,-d/2) ;
+path pa[] ;
+pa[3] = zc8 .. zc12 .. zc9 -- zc10 -- zc11 -- cycle ;
+fill pa[3] withcolor \MPcolor{c} ;
+StopPage ;
+\stopuniqueMPgraphic
+
+\startuniqueMPgraphic{Titlebg}
+StartPage ;
+numeric a ; a = 4cm ;
+numeric b ; b = 3cm ;
+numeric c ; c = 8cm ;
+numeric d ; d = .7cm ;
+path pa[] ;
+pair zc [] ;
+fill Page withcolor \MPcolor{a} ;
+pa[1] = ulcorner Page -- ulcorner Page shifted (PaperWidth/2,0) -- llcorner Page shifted (PaperWidth/2,0) -- llcorner Page -- cycle ;
+fill pa[1] withcolor \MPcolor{b} ;
+zc1 = ulcorner Page shifted (PaperWidth/2,-b) ;
+zc2 = zc1 shifted (-c,0) ;
+zc3 = zc2 shifted (0,-a) ;
+zc4 = zc3 shifted (c,0) ;
+zc5 = zc2 shifted (-1.5cm,-a/2) ;
+pa[2] = zc1 -- zc2 .. zc5 .. zc3 -- zc4 -- cycle ;
+fill pa[2] withcolor \MPcolor{a} ;
+zc6 = llcorner Page shifted (PaperWidth/2,0) ;
+zc7 = 1/2[zc6,zc4] ;
+zc8 = zc7 shifted (-.75*b,d/2) ;
+zc9 = zc8 shifted (0,-d) ;
+zc10 = zc9 shifted (1.3*c,0) ;
+zc11 = zc10 shifted (0,d) ;
+zc12 = zc10 shifted (d/2,d/2) ;
+pa[3] = zc8 -- zc9 -- zc10 .. zc12 .. zc11 -- cycle ;
+fill pa[3] withcolor \MPcolor{c} ;
+StopPage ;
+\stopuniqueMPgraphic
+
+%D We define these backgrounds as overlays:
+
+\defineoverlay
+[picbackground]
+[\useMPgraphic{greenframe}]
+
+\defineoverlay
+[lecbackground]
+[\useMPgraphic{bluebeam}]
+
+\defineoverlay
+[titlebackground]
+[\useMPgraphic{Titlebg}]
+
+%D We use combinations for placing vertical pictures and text side by side, and
+%D we want a distance of 1.1 cm between both.
+
+\setupcombinations[distance=1.1cm]
+
+%D These are shortcuts to switch backgrounds:
+
+\define\lecback{\setuplayout[header=5.3cm]\setupbackgrounds[page][background={picbackground,lecbackground,slidetitle}]}
+\define\titback{\setuplayout[header=2.3cm]\setupbackgrounds[page][background={titlebackground,prestitle,presauthor}]}
+\define\picback{\setuplayout[header=2.3cm]\setupbackgrounds[page][background=picbackground]}
+\define\noback{\setupbackgrounds[page][background=nobackground]}
+
+\setupbackgrounds[page][background=lecbackground]
+
+%D The symbol for the first level of itemizations.
+
+\definesymbol[1][\useMPgraphic{ItSquare}]
+\setupitemize[1][inmargin][color=c]
+
+\protect
+\stopmodule
+
+\endinput
+
diff --git a/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-horizontalblue.tex b/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-horizontalblue.tex
new file mode 100644
index 0000000000..f586e05829
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-horizontalblue.tex
@@ -0,0 +1,150 @@
+%D \module
+%D [ file=t-horizontalblue,
+%D version=2007.07.17,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Module horizontalblue,
+%D author=Thomas A. Schmitz,
+%D date=\currentdate,
+%D copyright={Thomas A. Schmitz}]
+%C
+%C Copyright 2007 Thomas A. Schmitz.
+%C This file may be distributed under the GNU General Public License v. 2.0.
+
+%D This file provides the \quotation{horizontalblue} style for the presentation
+%D module. It is loaded at runtime. The look of this style was inspired by the
+%D \quotation{Copenhagen} theme of the \LaTeX\ {\tt beamer} package.
+
+\writestatus{loading}{module horizontalblue}
+
+\startmodule[horizontalblue]
+
+\unprotect
+
+%D The taspresentation module provides a skeleton into which different styles
+%D can be hooked. It uses a number of variables and macros which have to be set
+%D beforehand. Some parts are optional. We begin with the necessary definitions:
+
+%D We start colors:
+
+\setupcolors[state=start]
+
+%D These macros are used for placing figures/pictures:
+
+\define\NormalHeight{.97\textheight}
+\define\NormalWidth{.476\textwidth}
+\define\PictureFrameHeight{.97\textheight}
+\define\PictureFrameWidth{.476\textwidth}
+
+%D The page layout:
+
+\setuplayout [width=fit,
+ margin=0cm,
+ height=14.7cm,
+ header=1.75cm,
+ footer=1.2cm,
+ topspace=1cm,
+ backspace=1cm,
+ location=singlesided]
+
+%D The macro for typesetting the Slidetitle; this is adapted from a sample
+%D document that Brooks Moses published on the wiki:
+
+\definelayer[slidetitle]
+ [width=\paperwidth,
+ height=\paperheight,
+ x=10mm]
+
+\define[1]\Slidetitle{\page\setlayer[slidetitle]%
+ {\framed[frame=off,width=\textwidth,height=2.2cm,offset=0pt,top=\vss,bottom=\vss]{\switchtobodyfont[\Titlesize]\color[c]{#1}}}}
+
+%D The macro \tex{Maketitle} produces a default title page with the author, the
+%D title of the presentation, and the date. Using it is not mandatory.
+
+\define\Maketitle{%
+\titback
+\null
+\vfill
+\framed[frame=off,width=\textwidth,height=.75\textheight,top=\vss,bottom=\vss,align=middle]{\switchtobodyfont[\Titlesize]\color[c]{\bf \getvariable{taspresent}{title}}\switchtobodyfont[\Normalsize]\blank[line]\getvariable{taspresent}{author}\blank[2*line]\currentdate}
+\vfill
+\null}
+
+%D The following parts are optional; if you don't use backgrounds and are
+%D content with CONTEXT's default itemization, you don't have to set these
+%D macros.
+
+%D We define our colors:
+
+\definecolor [a] [s=.95]
+\definecolor [b] [r=.58,g=.58,b=.82]
+\definecolor [c] [r=.2,g=.2,b=.73]
+\definecolor [Item] [r=.2,g=.2,b=.73]
+
+%D We let Metapost calculate the background:
+
+\startuniqueMPgraphic{vertical}
+StartPage ;
+pair zd[] ;
+path pb[] ;
+fill Page withcolor \MPcolor{a} ;
+z.d1 = ulcorner Page shifted (0,-5pt) ;
+z.d2 = urcorner Page shifted (0,-5pt) ;
+pb[1] = ulcorner Page -- z.d1 -- z.d2 -- urcorner Page -- cycle ;
+z.d3 = llcorner Page shifted (0,5pt) ;
+z.d4 = lrcorner Page shifted (0,5pt) ;
+pb[3] = llcorner Page -- z.d3 -- z.d4 -- lrcorner Page -- cycle ;
+pb[4] = pb[3] shifted (0,.75cm) ;
+fill pb[1] withcolor \MPcolor{b} ;
+fill pb[3] withcolor \MPcolor{b} ;
+fill pb[4] withcolor \MPcolor{b} ;
+StopPage ;
+\stopuniqueMPgraphic
+
+\startuniqueMPgraphic{horizontal}
+StartPage ;
+pair zd[] ;
+path pb[] ;
+z.d1 = ulcorner Page shifted (0,-5pt) ;
+z.d2 = urcorner Page shifted (0,-5pt) ;
+pb[1] = ulcorner Page -- z.d1 -- z.d2 -- urcorner Page -- cycle ;
+pb[2] = pb[1] shifted (0,-2cm) ;
+fill pb[2] withcolor \MPcolor{b} ;
+StopPage ;
+\stopuniqueMPgraphic
+
+%D We define these backgrounds as overlays:
+
+\defineoverlay
+[lecbackground]
+[\useMPgraphic{horizontal}]
+
+\defineoverlay
+[picbackground]
+[\useMPgraphic{vertical}]
+
+%D We define the footer
+
+\setupfooter[color=c,style={\switchtobodyfont[10pt]},strut=yes]
+\setupfootertexts[{\framed[frame=off,height=.45cm,width=\textwidth]{\getvariable{taspresent}{title}\hfill \pagenumber \ of \lastpage}}]
+
+%D These are shortcuts to switch backgrounds:
+
+\define\lecback{\setuplayout[header=1.75cm]\setupfooter[state=start]\setupbackgrounds[page][background={picbackground,lecbackground,slidetitle}]}
+\define\titback{\setuplayout[header=1.75cm]\setupfooter[state=stop]\setupbackgrounds[page][background={picbackground,lecbackground}]}
+\define\picback{\setuplayout[header=0cm]\setupfooter[state=start]\setupbackgrounds[page][background={picbackground}]}
+\define\noback{\setupbackgrounds[page][background=nobackground]}
+
+%D We use combinations for placing vertical pictures and text side by side, and
+%D we want a distance of 1.1 cm between both.
+
+\setupcombinations[distance=1.1cm]
+
+%D The symbol for the first level of itemizations.
+
+\definesymbol[1][\useMPgraphic{ItSquare}]
+\setupitemize[1][color=c]
+
+\protect
+\stopmodule
+
+\endinput
+
diff --git a/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-lightblue.tex b/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-lightblue.tex
new file mode 100644
index 0000000000..2a5499a413
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-lightblue.tex
@@ -0,0 +1,162 @@
+%D \module
+%D [ file=t-lightblue,
+%D version=2007.07.17,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Module lightblue,
+%D author=Thomas A. Schmitz,
+%D date=\currentdate,
+%D copyright={Thomas A. Schmitz}]
+%C
+%C Copyright 2007 Thomas A. Schmitz.
+%C This file may be distributed under the GNU General Public License v. 2.0.
+
+%D This file provides the \quotation{lightblue} style for the presentation
+%D module. It is loaded at runtime.
+
+\writestatus{loading}{module lightblue}
+
+\startmodule[lightblue]
+
+\unprotect
+
+%D The taspresentation module provides a skeleton into which different styles
+%D can be hooked. It uses a number of variables and macros which have to be set
+%D beforehand. Some parts are optional. We begin with the necessary definitions:
+
+%D We start colors; textcolor is white:
+
+\setupcolors[state=start]
+
+%D These macros are used for placing figures/pictures:
+
+\define\NormalHeight{\textheight}
+\define\NormalWidth{.476\textwidth}
+\define\PictureFrameHeight{\textheight}
+\define\PictureFrameWidth{.476\textwidth}
+
+%D The page layout:
+
+\setuplayout [width=fit,
+ leftmargin=.5cm,
+ rightmargin=0cm,
+ leftmargindistance=1.5cm,
+ rightmargindistance=0pt,
+ height=fit,
+ header=2.5cm,
+ footer=0cm,
+ topspace=.2cm,
+ backspace=2.6cm,
+ cutspace=2.9cm,
+ bottomspace=.2cm,
+ bottomdistance=1.2cm,
+ bottom=1.2cm,
+ location=singlesided]
+
+%D We define our colors:
+
+\definecolor [Item] [r=0,g=.2,b=.4]
+\definecolor [a] [r=.58,g=.84,b=.97]
+\definecolor [b] [r=1,g=1,b=1]
+\definecolor [c] [r=0,g=.2,b=.4]
+\definecolor [d] [r=1,g=.6,b=0]
+
+%D The macro for typesetting the Slidetitle; this is adapted from a sample
+%D document that Brooks Moses published on the wiki:
+
+\definelayer[slidetitle]
+ [width=\paperwidth,
+ height=\paperheight,
+ x=2mm,
+ y=2mm]
+
+\define[1]\Slidetitle{%
+\page\setupheadertexts[{\framed[frame=off,background=color,backgroundcolor=c,height=1.2cm,offset=3pt,top=\vss,bottom=\vss]{\switchtobodyfont[\Titlesize]\color[d]{#1}}}]\setupheader[state=start]}
+
+\setupbottomtexts[{\framed[frame=off,background=color,backgroundcolor=c,height=1.2cm,offset=3pt,top=\vss,bottom=\vss]{\color[d]{\pagenumber}}}]
+
+\setupbottom[state=start]
+
+%D The macro \tex{Maketitle} produces a default title page with the author, the
+%D title of the presentation, and the date. Using it is not mandatory.
+
+\define\Maketitle{%
+\titback
+\null
+\vfill
+\midaligned{\framed[frame=off,background=color,backgroundcolor=c,height=1.2cm,offset=3pt,top=\vss,bottom=\vss]{\switchtobodyfont[\Titlesize]\color[d]{\getvariable{taspresent}{title}}}}
+\blank[2*line]
+\midaligned{\color[c]{\getvariable{taspresent}{author}}}
+\blank[3*line]
+\midaligned{\color[c]{\currentdate}}
+\vfill
+\null}
+
+%D The following parts are optional; if you don't use backgrounds and are
+%D content with CONTEXT's default itemization, you don't have to set these
+%D macros.
+
+%D We let Metapost calculate the background:
+
+\startuniqueMPgraphic{blue1}
+StartPage ;
+numeric a ;
+numeric b ;
+numeric c ;
+pair zk[] ;
+path bl[] ;
+a = 2cm ;
+b = .7cm ;
+c = .2 cm ;
+z.k1 = ulcorner Page shifted (a,-a) ;
+z.k2 = urcorner Page shifted (0,-a) ;
+z.k3 = llcorner Page shifted (a,a) ;
+z.k4 = lrcorner Page shifted (0,a) ;
+z.k5 = z.k1 shifted (c,-c) ;
+z.k6 = z.k2 shifted (0,-c) ;
+z.k7 = z.k6 shifted (0,b) ;
+z.k8 = z.k5 shifted (-b,b) ;
+z.k9 = z.k3 shifted (c,c) ;
+z.k10 = z.k4 shifted (0,c) ;
+z.k11 = z.k10 shifted (0,-b) ;
+z.k12 = z.k9 shifted (-b,-b) ;
+bl[1] = urcorner Page -- ulcorner Page -- llcorner Page -- lrcorner Page -- z.k4 -- z.k3 -- z.k1 -- z.k2 -- cycle ;
+bl[2] = z.k5 -- z.k6 -- z.k7 -- z.k8 -- cycle ;
+bl[3] = z.k9 -- z.k10 -- z.k11 -- z.k12 -- cycle ;
+bl[4] = z.k5 -- z.k9 -- z.k12 -- z.k8 --cycle ;
+fill bl[1] withcolor \MPcolor{a} ;
+linear_shade(bl[2],8,\MPcolor{a},\MPcolor{b}) ;
+linear_shade(bl[3],6,\MPcolor{a},\MPcolor{b}) ;
+linear_shade(bl[4],5,\MPcolor{a},\MPcolor{b}) ;
+StopPage ;
+\stopuniqueMPgraphic
+
+%D We define these backgrounds as overlays:
+
+\defineoverlay
+[lecbackground]
+[\useMPgraphic{blue1}]
+
+%D We use combinations for placing vertical pictures and text side by side, and
+%D we want a distance of 1.1 cm between both.
+
+\setupcombinations[distance=1.1cm]
+
+%D These are shortcuts to switch backgrounds:
+
+\define\lecback{\setupbackgrounds[page][background={lecbackground,slidetitle}]}
+\define\titback{\setupheader[state=stop]\setupbackgrounds[page][background=lecbackground]}
+\define\picback{\setupheader[state=stop]\setupbackgrounds[page][background={lecbackground,slidetitle}]}
+\define\noback{\setupbackgrounds[page][background=nobackground]}
+
+\setupbackgrounds[page][background=lecbackground]
+
+%D The symbol for the first level of itemizations.
+
+\definesymbol[1][\useMPgraphic{ItSquare}]
+\setupitemize[1][inmargin][color=c]
+
+\protect
+\stopmodule
+
+\endinput
+
diff --git a/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-narrowstripe.tex b/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-narrowstripe.tex
new file mode 100644
index 0000000000..52ca9d8b41
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-narrowstripe.tex
@@ -0,0 +1,188 @@
+%D \module
+%D [ file=t-narrowstripe,
+%D version=2007.07.25,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Module narrowstripe,
+%D author=Thomas A. Schmitz,
+%D date=\currentdate,
+%D copyright={Thomas A. Schmitz}]
+%C
+%C Copyright 2007 Thomas A. Schmitz.
+%C This file may be distributed under the GNU General Public License v. 2.0.
+
+%D This file provides the \quotation{narrowstripe} style for the presentation
+%D module. It is loaded at runtime. The theme for this style is inspired by the
+%D \quotation{Berkeley} theme of the \LaTeX\ Beamer package.
+
+\writestatus{loading}{module narrowstripe}
+
+\startmodule[narrowstripe]
+
+\unprotect
+
+%D The taspresentation module provides a skeleton into which different styles
+%D can be hooked. It uses a number of variables and macros which have to be set
+%D beforehand. Some parts are optional. We begin with the necessary definitions:
+
+%D We start colors:
+
+\setupcolors[state=start]
+
+%D The narrowframe module has parameters of its own; we set them up and use
+%D them:
+
+\setupmodule[color=blue]
+
+\processaction[\currentmoduleparameter{color}]
+ [ red=>\def\colormode{redmode},
+ blue=>\def\colormode{bluemode},
+ green=>\def\colormode{greenmode},
+ \v!unknown=>\def\colormode{bluemode},
+ \v!default=>\def\colormode{bluemode}]
+
+\enablemode[\colormode]
+
+%D These macros are used for placing figures/pictures:
+
+\define\NormalHeight{\textheight}
+\define\NormalWidth{.476\textwidth}
+\define\PictureFrameHeight{\textheight}
+\define\PictureFrameWidth{.476\textwidth}
+
+%D The page layout:
+
+\setuplayout [width=fit,
+ leftmargin=1.5cm,
+ rightmargin=0cm,
+ leftmargindistance=1.8cm,
+ rightmargindistance=0pt,
+ height=fit,
+ header=2.5cm,
+ footer=0cm,
+ topspace=.4cm,
+ backspace=3.2cm,
+ cutspace=3.7cm,
+ bottomspace=0cm,
+ bottom=0pt,
+ location=singlesided]
+
+%D The macro for typesetting the Slidetitle; this is adapted from a sample
+%D document that Brooks Moses published on the wiki:
+
+\definelayer[slidetitle]
+ [width=\paperwidth,
+ height=\paperheight,
+ x=32mm]
+
+\define[1]\Slidetitle{\page\setlayer[slidetitle]%
+ {\framed[framecolor=red,frame=off,width=\textwidth,height=2.25cm,offset=0pt,align=middle,top=\vss,bottom=\vss]{\switchtobodyfont[\Titlesize]\color[d]{#1}}}}
+
+%D The macro \tex{Maketitle} produces a default title page with the author, the
+%D title of the presentation, and the date. Using it is not mandatory.
+
+\define\Maketitle{%
+\titback
+\null
+\vfill
+\midaligned{\switchtobodyfont[\Titlesize]\color[d]{\getvariable{taspresent}{title}}}
+\blank[2*line]
+\midaligned{\color[d]{\getvariable{taspresent}{author}}}
+\blank[3*line]
+\midaligned{\color[d]{\currentdate}}
+\vfill
+\null}
+
+%D The following parts are optional; if you don't use backgrounds and are
+%D content with CONTEXT's default itemization, you don't have to set these
+%D macros.
+
+%D We define our colors, depending on the mode:
+
+\startmode[bluemode]
+\definecolor [Item] [b=.8]
+\definecolor [a] [s=.95]
+\definecolor [b] [r=0,g=0,b=1]
+\definecolor [c] [r=.69,g=.69,b=.97]
+\definecolor [d] [b=.8]
+\stopmode
+
+\startmode[redmode]
+\definecolor [Item] [r=.8]
+\definecolor [a] [s=.95]
+\definecolor [b] [r=1]
+\definecolor [c] [b=.69,g=.69,r=.97]
+\definecolor [d] [r=.8]
+\stopmode
+
+\startmode[greenmode]
+\definecolor [Item] [g=.4]
+\definecolor [a] [s=.95]
+\definecolor [b] [g=.4]
+\definecolor [c] [b=.68,r=.68,g=.79]
+\definecolor [d] [g=.4]
+\stopmode
+
+%D We let Metapost calculate the background:
+
+\startuseMPgraphic{narrow}
+StartPage ;
+numeric a ;
+numeric b ;
+numeric c ;
+c = PaperHeight - a/2 ;
+pair za[] ;
+path p[] ;
+a = 2.25cm ;
+b = 0.4 cm ;
+za1 = ulcorner Page shifted (0,-a) ;
+za2 = ulcorner Page shifted (0,-a-b) ;
+za3 = urcorner Page shifted (0,-a-b) ;
+za4 = urcorner Page shifted (0,-a) ;
+za5 = ulcorner Page shifted (a,0) ;
+za6 = ulcorner Page shifted (a+b,0) ;
+za7 = llcorner Page shifted (a+b,0) ;
+za8 = llcorner Page shifted (a,0) ;
+za9 = ulcorner Page shifted (a,-a) ;
+za10 = ulcorner Page shifted (a+b,-a) ;
+za11 = ulcorner Page shifted (a+b,-a-b) ;
+za12 = ulcorner Page shifted (a,-a-b) ;
+p[1] = za1 -- za2 -- za3 -- za4 -- cycle ;
+p[2] = za5 -- za6 -- za7 -- za8 -- cycle ;
+p[3] = za9 -- za10 --za11 -- za12 -- cycle ;
+linear_shade(p[1],1,\MPcolor{a},\MPcolor{b}) ;
+linear_shade(p[2],2,\MPcolor{b},\MPcolor{a}) ;
+fill p[3] withcolor \MPcolor{c} ;
+draw \sometxt{\framed[frame=off,width=2.25cm,height=2.25cm]{\color[d]{\tfx \folio}}} shifted (0,PaperHeight-a) ;
+StopPage ;
+\stopuseMPgraphic
+
+%D We define these backgrounds as overlays:
+
+\defineoverlay
+[lecbackground]
+[\useMPgraphic{narrow}]
+
+%D We use combinations for placing vertical pictures and text side by side, and
+%D we want a distance of 1.1 cm between both.
+
+\setupcombinations[distance=1.1cm]
+
+%D These are shortcuts to switch backgrounds:
+
+\define\lecback{\setupbackgrounds[page][background={lecbackground,slidetitle}]}
+\define\titback{\setupbackgrounds[page][background=lecbackground]}
+\define\picback{\setupbackgrounds[page][background={lecbackground,slidetitle}]}
+\define\noback{\setupbackgrounds[page][background=nobackground]}
+
+\setupbackgrounds[page][background=lecbackground]
+
+%D The symbol for the first level of itemizations.
+
+\definesymbol[1][\useMPgraphic{ItSquare}]
+\setupitemize[1][inmargin][color=d]
+
+\protect
+\stopmodule
+
+\endinput
+
diff --git a/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-quadblue.tex b/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-quadblue.tex
new file mode 100644
index 0000000000..4b79b79eb5
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-quadblue.tex
@@ -0,0 +1,163 @@
+%D \module
+%D [ file=t-quadblue,
+%D version=2007.07.17,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Module quadblue,
+%D author=Thomas A. Schmitz,
+%D date=\currentdate,
+%D copyright={Thomas A. Schmitz}]
+%C
+%C Copyright 2007 Thomas A. Schmitz.
+%C This file may be distributed under the GNU General Public License v. 2.0.
+
+%D This file provides the \quotation{quadblue} style for the presentation
+%D module. It is loaded at runtime.
+
+\writestatus{loading}{module quadblue}
+
+\startmodule[quadblue]
+
+\unprotect
+
+%D The taspresentation module provides a skeleton into which different styles
+%D can be hooked. It uses a number of variables and macros which have to be set
+%D beforehand. Some parts are optional. We begin with the necessary definitions:
+
+%D We define our colors:
+
+\definecolor[outer][r=0,g=0,b=.92]
+\definecolor[current][r=0,g=0,b=.4]
+\definecolor[inner][s=.98]
+
+%D We start colors:
+
+\setupcolors[state=start]
+
+%D These macros are used for placing figures/pictures:
+
+\define\NormalHeight{\textheight}
+\define\NormalWidth{.5\textwidth}
+\define\PictureFrameHeight{\textheight}
+\define\PictureFrameWidth{.5\textwidth}
+
+%D The page layout:
+
+\setuplayout [width=fit,
+ height=middle,
+ margin=1.5cm,
+ height=fit,
+ leftmargindistance=.4cm,
+ rightmargindistance=0cm,
+ header=1.5cm,
+ footer=0cm,
+ topspace=1cm,
+ backspace=2.5cm,
+ cutspace=1.5cm,
+ location=singlesided]
+
+%D The macro for typesetting the Slidetitle; this is adapted from a sample
+%D document that Brooks Moses published on the wiki:
+
+\definelayer[slidetitle]
+ [width=\paperwidth,
+ height=\paperheight,
+ x=25mm]
+
+\define[1]\Slidetitle{\page\setlayer[slidetitle]%
+ {\framed[frame=off,width=\textwidth,height=2.5cm,offset=0pt,top=\vss,bottom=\vss]{\switchtobodyfont[\Titlesize]\color[outer]{#1}}}}
+
+%D The macro \tex{Maketitle} produces a default title page with the author, the
+%D title of the presentation, and the date. Using it is not mandatory.
+
+\define\Maketitle{%
+\titback
+\null
+\vfill
+\midaligned{\switchtobodyfont[\Titlesize]\color[outer]{\getvariable{taspresent}{title}}}
+\blank[2*line]
+\midaligned{\color[outer]{\getvariable{taspresent}{author}}}
+\blank[3*line]
+\midaligned{\color[outer]{\currentdate}}
+\vfill
+\null}
+
+%D The following parts are optional; if you don't use backgrounds and are
+%D content with CONTEXT's default itemization, you don't have to set these
+%D macros.
+
+%D We let Metapost calculate the background:
+
+\startuseMPgraphic{left}
+StartPage ;
+fill Page withcolor \MPcolor{inner} ;
+z1 = ulcorner Page ;
+z5 = llcorner Page ;
+path q ;
+q = z1 -- z5 ;
+t := arclength (q) ;
+u := t/15 ;
+v := (PageNumber/NOfPages) ;
+z4 = (x1+1cm, y1-1cm) ;
+z3 = (x4, y1) ;
+z2 = (x1, y4) ;
+path m[] ;
+m[1] = z1 -- z2 -- z4 -- z3 -- cycle ;
+m[2] = m[1] shifted (0, -2*u) ;
+m[3] = m[1] shifted (0, -4*u) ;
+m[4] = m[1] shifted (0, -6*u) ;
+m[5] = m[1] shifted (0, -8*u) ;
+m[6] = m[1] shifted (0, -10*u) ;
+m[7] = m[1] shifted (0, -12*u) ;
+m[8] = m[1] shifted (0, (-14*u-0.5mm)) ;
+for i=1 upto 8:
+ fill m[i] withcolor\MPcolor{outer} ;
+endfor;
+if PageNumber=1:
+ fill m[1] withcolor \MPcolor{current} ;
+elseif (v>.001) and (v<.167) :
+ fill m[2] withcolor \MPcolor{current} ;
+elseif (v>.166) and (v<.334):
+ fill m[3] withcolor \MPcolor{current} ;
+elseif (v>.333) and (v<.501):
+ fill m[4] withcolor \MPcolor{current} ;
+elseif (v>.5) and (v<.667):
+ fill m[5] withcolor \MPcolor{current} ;
+elseif (v>.666) and (v<.834):
+ fill m[6] withcolor \MPcolor{current} ;
+elseif (v>.833) and (v<1):
+ fill m[7] withcolor \MPcolor{current} ;
+elseif v=1:
+ fill m[8] withcolor \MPcolor{current} ;
+fi ;
+StopPage ;
+
+\stopuseMPgraphic
+
+%D We define these backgrounds as overlays:
+
+\defineoverlay
+[lecbackground]
+[\useMPgraphic{left}]
+
+%D These are shortcuts to switch backgrounds:
+
+\define\lecback{\setuplayout[header=1.5cm]\setupbackgrounds[page][background={lecbackground,slidetitle}]}
+\define\titback{\setuplayout[header=0cm]\setupbackgrounds[page][background=lecbackground]}
+\define\picback{\setuplayout[header=0cm]\setupbackgrounds[page][background={lecbackground,slidetitle}]}
+\define\noback{\setupbackgrounds[page][background=nobackground]}
+
+%D We use combinations for placing vertical pictures and text side by side, and
+%D we want a distance of 1.1 cm between both.
+
+\setupcombinations[distance=0cm]
+
+%D The symbol for the first level of itemizations.
+
+\definesymbol[1][$\square$]
+\setupitemize[1][inmargin][color=outer]
+
+\protect
+\stopmodule
+
+\endinput
+
diff --git a/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-rainbowstripe.tex b/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-rainbowstripe.tex
new file mode 100644
index 0000000000..a139438c9e
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-rainbowstripe.tex
@@ -0,0 +1,243 @@
+%D \module
+%D [ file=t-bluegray,
+%D version=2007.07.17,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Module bluegray,
+%D author=Thomas A. Schmitz,
+%D date=\currentdate,
+%D copyright={Thomas A. Schmitz}]
+%C
+%C Copyright 2007 Thomas A. Schmitz.
+%C This file may be distributed under the GNU General Public License v. 2.0.
+
+%D This file provides the \quotation{bluegray} style for the presentation
+%D module. It is loaded at runtime.
+
+\writestatus{loading}{module bluegray}
+
+\startmodule[bluegray]
+
+\unprotect
+
+%D The taspresentation module provides a skeleton into which different styles
+%D can be hooked. It uses a number of variables and macros which have to be set
+%D beforehand. Some parts are optional. We begin with the necessary definitions:
+
+%D We start colors:
+
+\setupcolors[state=start]
+
+%D These macros are used for placing figures/pictures:
+
+\define\NormalHeight{\textheight}
+\define\NormalWidth{.476\textwidth}
+\define\PictureFrameHeight{\textheight}
+\define\PictureFrameWidth{.476\textwidth}
+
+%D The page layout:
+
+\setuplayout [width=fit,
+ margin=1.5cm,
+ height=fit,
+ header=11mm,
+ footer=0cm,
+ topspace=15mm,
+ backspace=2cm,
+ location=singlesided]
+
+%D The macro for typesetting the Slidetitle; this is adapted from a sample
+%D document that Brooks Moses published on the wiki:
+
+\definelayer[slidetitle]
+ [width=\paperwidth,
+ height=\paperheight,
+ x=20mm,
+ y=12mm]
+
+\define[1]\Slidetitle{\page\setlayer[slidetitle]%
+ {\framed[frame=off,height=1.5cm,width=\textwidth,offset=0pt,align=middle,top=\vss,bottom=\vss]{\switchtobodyfont[\Titlesize]#1}}}
+
+%D The macro \tex{Maketitle} produces a default title page with the author, the
+%D title of the presentation, and the date. Using it is not mandatory.
+
+\define\Maketitle{%
+\titback
+\null
+\vfill
+\midaligned{\switchtobodyfont[\Titlesize]\getvariable{taspresent}{title}}
+\blank[2*line]
+\midaligned{\getvariable{taspresent}{author}}
+\blank[3*line]
+\midaligned{\currentdate}
+\vfill
+\null}
+
+%D The following parts are optional; if you don't use backgrounds and are
+%D content with CONTEXT's default itemization, you don't have to set these
+%D macros.
+
+%D We define our colors:
+
+\definecolor [a] [s=.88]
+\definecolor [Item] [s=0]
+\definecolor [One] [r=.5,g=0,b=.5]
+\definecolor [Two] [b=1]
+\definecolor [Three] [g=1,b=1]
+\definecolor [Four] [g=1]
+\definecolor [Five] [r=1,g=1]
+\definecolor [Six] [r=1]
+
+%D In a first attempt to avhieve the rainbow effect, I produced the rainbow
+%D background with asymptote and then converted it to a pdf file which was then
+%D used as a background. In that case, it was necessary to instruct \CONTEXT\
+%D to look in the default \TeX\ input paths for figures. The background spans
+%D the entire height of the page and the width of the text area; the gray
+%D background was then calculated so that the two stripes at the top and at the
+%D bottom were left unfilled so the rainbow background would then be visible.
+%D Here is the code:
+
+%\setupexternalfigures[location={global}]
+
+%\defineoverlay[rainb][{\externalfigure[rainbow.pdf][width=1.05\textwidth,height=1.4\textheight]}]
+
+% \startuniqueMPgraphic{gray}
+% StartPage ;
+% pair zf[] ;
+% path gr[] ;
+% numeric a; a = 2cm ;
+% numeric b; b = 0.8cm ;
+% z.f1 = ulcorner Page shifted (a,0) ;
+% z.f2 = urcorner Page shifted (-a,0) ;
+% z.f3 = lrcorner Page shifted (-a,0) ;
+% z.f4 = llcorner Page shifted (a,0) ;
+% z.f5 = z.f1 shifted (0,-b) ;
+% z.f6 = z.f2 shifted (0,-b) ;
+% z.f7 = z.f3 shifted (0,b) ;
+% z.f8 = z.f4 shifted (0,b) ;
+% z.f9 = z.f5 shifted (0,-b) ;
+% z.f10 = z.f6 shifted (0,-b) ;
+% z.f11 = z.f7 shifted (0,b) ;
+% z.f12 = z.f8 shifted (0,b) ;
+% gr[1] = ulcorner Page -- urcorner Page -- lrcorner Page -- llcorner Page -- z.f8 -- z.f7 -- z.f6 -- z.f5 -- z.f4 -- llcorner Page -- cycle ;
+% gr[2] = z.f9 -- z.f10 -- z.f11 -- z.f12 -- cycle ;
+% gr[2] := gr[2] enlarged (.5cm,0cm) ;
+% fill gr[1] withcolor \MPcolor{a} ;
+% fill gr[2] withcolor \MPcolor{a} ;
+% StopPage ;
+% \stopuniqueMPgraphic
+
+%D However, it seemed more portable to let Metapost calculate the background.
+%D The rainbow effect takes some lines of code, but it's not too bad:
+
+\startuniqueMPgraphic{gray}
+StartPage ;
+pair zf[] ;
+fill Page withcolor \MPcolor{a} ;
+path gr[] ;
+numeric a; a = 2cm ;
+numeric b; b = 0.4cm ;
+numeric c; c = 0.7cm ;
+z.f1 = ulcorner Page shifted (a,-c) ;
+z.f2 = urcorner Page shifted (-a,-c) ;
+z.f3 = z.f2 shifted (0,-b) ;
+z.f4 = z.f1 shifted (0,-b) ;
+gr[1] = z.f1 -- z.f2 ;
+gr[2] = z.f4 -- z.f3 ;
+z.f5 = point .2 along gr[1] ;
+z.f6 = point .2 along gr[2] ;
+z.f7 = point .4 along gr[1] ;
+z.f8 = point .4 along gr[2] ;
+z.f9 = point .6 along gr[1] ;
+z.f10 = point .6 along gr[2] ;
+z.f11 = point .8 along gr[1] ;
+z.f12 = point .8 along gr[2] ;
+gr[3] = z.f1 -- z.f5 -- z.f6 -- z.f4 -- cycle ;
+gr[4] = z.f7 -- z.f5 -- z.f6 -- z.f8 -- cycle ;
+gr[4] := gr[4] enlarged (.02cm,0) ;
+gr[5] = z.f9 -- z.f7 -- z.f8 -- z.f10 -- cycle ;
+gr[5] := gr[5] enlarged (.02cm,0) ;
+gr[6] = z.f11 -- z.f9 -- z.f10 -- z.f12 -- cycle ;
+gr[6] := gr[6] enlarged (.02cm,0) ;
+gr[7] = z.f11 -- z.f2 -- z.f3 -- z.f12 -- cycle ;
+linear_shade(gr[3],0,\MPcolor{One},\MPcolor{Two}) ;
+linear_shade(gr[4],0,\MPcolor{Two},\MPcolor{Three}) ;
+linear_shade(gr[5],0,\MPcolor{Three},\MPcolor{Four}) ;
+linear_shade(gr[6],0,\MPcolor{Four},\MPcolor{Five}) ;
+linear_shade(gr[7],0,\MPcolor{Five},\MPcolor{Six}) ;
+z.f21 = llcorner Page shifted (a,c) ;
+z.f22 = lrcorner Page shifted (-a,c) ;
+z.f23 = z.f22 shifted (0,b) ;
+z.f24 = z.f21 shifted (0,b) ;
+gr[21] = z.f21 -- z.f22 ;
+gr[22] = z.f24 -- z.f23 ;
+z.f25 = point .2 along gr[21] ;
+z.f26 = point .2 along gr[22] ;
+z.f27 = point .4 along gr[21] ;
+z.f28 = point .4 along gr[22] ;
+z.f29 = point .6 along gr[21] ;
+z.f30 = point .6 along gr[22] ;
+z.f31 = point .8 along gr[21] ;
+z.f32 = point .8 along gr[22] ;
+gr[23] = z.f21 -- z.f25 -- z.f26 -- z.f24 -- cycle ;
+gr[24] = z.f27 -- z.f25 -- z.f26 -- z.f28 -- cycle ;
+gr[24] := gr[24] enlarged (.02cm,0) ;
+gr[25] = z.f29 -- z.f27 -- z.f28 -- z.f30 -- cycle ;
+gr[25] := gr[25] enlarged (.02cm,0) ;
+gr[26] = z.f31 -- z.f29 -- z.f30 -- z.f32 -- cycle ;
+gr[26] := gr[26] enlarged (.02cm,0) ;
+gr[27] = z.f31 -- z.f22 -- z.f23 -- z.f32 -- cycle ;
+linear_shade(gr[23],0,\MPcolor{One},\MPcolor{Two}) ;
+linear_shade(gr[24],0,\MPcolor{Two},\MPcolor{Three}) ;
+linear_shade(gr[25],0,\MPcolor{Three},\MPcolor{Four}) ;
+linear_shade(gr[26],0,\MPcolor{Four},\MPcolor{Five}) ;
+linear_shade(gr[27],0,\MPcolor{Five},\MPcolor{Six}) ;
+StopPage ;
+\stopuniqueMPgraphic
+
+\startuseMPgraphic{progress}
+StartPage
+path p[] ;
+p[1] := unitsquare xyscaled(MakeupWidth,.4cm) shifted (2cm,0.7cm) ;
+numeric i; i = (PageNumber - 1)/(NOfPages - 1) ;
+p[2] = ulcorner p[1] -- urcorner p[1] ;
+p[3] = llcorner p[1] -- lrcorner p[1] ;
+pair o[] ;
+o[1] := point i along p[2] ;
+o[2] := point i along p[3] ;
+p[4] = o[1] -- o[2] ;
+p[4] := p[4] enlarged (0,-1pt) ;
+pickup pensquare scaled 2pt ;
+draw p[4] ;
+StopPage
+\stopuseMPgraphic
+
+%D We define these backgrounds as overlays:
+
+\defineoverlay[graybg]
+[\useMPgraphic{gray}]
+
+\defineoverlay[bar]
+[\useMPgraphic{progress}]
+
+%D These are shortcuts to switch backgrounds:
+
+\define\lecback{\setuplayout[header=11mm]\setupbackgrounds[page][background={graybg,bar,slidetitle}]}
+\define\titback{\setuplayout[header=0mm]\setupbackgrounds[page][background={graybg}]}
+\define\picback{\setuplayout[header=0mm]\setupbackgrounds[page][background={graybg,bar}]}
+\define\noback{\setupbackgrounds[page][background=nobackground]}
+
+%D We use combinations for placing vertical pictures and text side by side, and
+%D we want a distance of 1.1 cm between both.
+
+\setupcombinations[distance=1.1cm]
+
+%D The symbol for the first level of itemizations.
+
+\definesymbol[1][\useMPgraphic{ItSquare}]
+\setupitemize[1][inmargin]
+
+\protect
+\stopmodule
+
+\endinput
+
diff --git a/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-redframe.tex b/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-redframe.tex
new file mode 100644
index 0000000000..9538360af8
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-redframe.tex
@@ -0,0 +1,187 @@
+%D \module
+%D [ file=t-redframe,
+%D version=2007.07.17,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Module redframe,
+%D author=Thomas A. Schmitz,
+%D date=\currentdate,
+%D copyright={Thomas A. Schmitz}]
+%C
+%C Copyright 2007 Thomas A. Schmitz.
+%C This file may be distributed under the GNU General Public License v. 2.0.
+
+%D This file provides the \quotation{redframe} style for the presentation
+%D module. It is loaded at runtime. The look of this style was inspired by the
+%D screen version of the Metafun manual.
+
+\writestatus{loading}{module redframe}
+
+\startmodule[redframe]
+
+\unprotect
+
+%D The taspresentation module provides a skeleton into which different styles
+%D can be hooked. It uses a number of variables and macros which have to be set
+%D beforehand. Some parts are optional. We begin with the necessary definitions:
+
+%D We start colors:
+
+\setupcolors[state=start]
+
+%D These macros are used for placing figures/pictures:
+
+\define\NormalHeight{.95\textheight}
+\define\NormalWidth{.476\textwidth}
+\define\PictureFrameHeight{.95\textheight}
+\define\PictureFrameWidth{.476\textwidth}
+
+%D The page layout:
+
+\setuplayout [width=fit,
+ margin=2cm,
+ height=fit,
+ leftmargindistance=1cm,
+ rightmargindistance=0cm,
+ header=2.8cm,
+ footer=1cm,
+ topspace=.7cm,
+ backspace=2cm,
+ location=singlesided]
+
+%D The macro for typesetting the Slidetitle; this is adapted from a sample
+%D document that Brooks Moses published on the wiki:
+
+\definelayer[slidetitle]
+ [width=\paperwidth,
+ height=\paperheight,
+ x=20mm,
+ y=16mm]
+
+\define[1]\Slidetitle{\page\setlayer[slidetitle]%
+ {\framed[frame=off,width=\textwidth,height=2.3cm,offset=0pt,top=\vss,bottom=\vss]{\switchtobodyfont[\Titlesize]\color[FrameColor]{#1}}}}
+
+%D The macro \tex{Maketitle} produces a default title page with the author, the
+%D title of the presentation, and the date. Using it is not mandatory.
+
+\define\Maketitle{%
+\titback
+\null
+\vfill
+\midaligned{\switchtobodyfont[\Titlesize]\color[FrameColor]{\getvariable{taspresent}{title}}}
+\blank[2*line]
+\midaligned{\color[FrameColor]{\getvariable{taspresent}{author}}}
+\blank[3*line]
+\midaligned{\color[FrameColor]{\currentdate}}
+\vfill
+\null}
+
+%D The following parts are optional; if you don't use backgrounds and are
+%D content with CONTEXT's default itemization, you don't have to set these
+%D macros.
+
+%D We define our colors:
+
+\definecolor [lightb] [s=.75]
+\definecolor [darkb] [s=.2]
+\definecolor [BackgroundColor] [s=.6]
+\definecolor [FrameColor] [r=.55, g=0, b=.04]
+\definecolor [Item] [r=.55, g=0, b=.04]
+\definecolor [DarkYellow] [s=.6]%[r=.73, g=.61, b=.25] % gray looks better?
+
+%D We let Metapost calculate the background:
+
+\startuniqueMPgraphic{slide}
+StartPage ;
+path p[] ;
+a=1.5cm ;
+fill Page withcolor \MPcolor{lightb} ;
+path Main ;
+z1 = ulcorner Page shifted (a,0) ;
+z2 = urcorner Page shifted (-a,0) ;
+z3 = urcorner Page shifted (0,-a) ;
+z4 = lrcorner Page shifted (0,a) ;
+z5 = (x2,0) ;
+z6 = (x1,0) ;
+z7 = (0,y4) ;
+z8 = (0,y3) ;
+z9 = (x1,y3) ;
+z10 = (x2,y3) ;
+z11 = (x2,y4) ;
+z12 = (x1,y4) ;
+p[1] = z9 -- z12 -- z7 -- z8 -- cycle ;
+p[2] = z10 -- z3 -- z4 -- z11 --cycle ;
+p[3] = z12 -- z11 -- z5 -- z6 --cycle ;
+p[4] = z9 -- z10 -- z2 -- z1 -- cycle ;
+fill p[1] withcolor \MPcolor{darkb} ;
+fill p[2] withcolor \MPcolor{darkb} ;
+fill p[3] withcolor \MPcolor{darkb} ;
+fill p[4] withcolor \MPcolor{darkb} ;
+pickup pencircle scaled 8 pt ;
+draw z1 -- z6 withcolor \MPcolor{FrameColor} ;
+draw z2 -- z5 withcolor \MPcolor{FrameColor} ;
+draw z7 -- z4 withcolor \MPcolor{FrameColor} ;
+draw z8 -- z3 withcolor \MPcolor{FrameColor} ;
+StopPage ;
+\stopuniqueMPgraphic
+
+\startuseMPgraphic{Bottombg}
+StartPage
+path Q[] ;
+path R[] ;
+z4 = llcorner Page shifted (2cm,0.75cm) ;
+z5 = lrcorner Page shifted (-2cm,0.75cm) ;
+Q[1] = z4 -- z[5] ;
+oa = NOfPages - 2 ;
+ob = PageNumber - 2 ;
+oc = arclength(Q[1]) ;
+od = oc/oa ;
+oe = oc/oa ;
+Q[2] = fullcircle scaled .4 cm shifted (2cm,0.65cm) ;
+fill Q[2] withcolor \MPcolor{DarkYellow} ;
+for i = 1 upto NOfPages-2:
+ R[i] = Q[2] shifted (i*od,0) ;
+ fill R[i] withcolor \MPcolor{DarkYellow} ;
+endfor ;
+if PageNumber > 1 :
+ Q[2] := Q[2] shifted (od*ob,0) ;
+ fill Q[2] withcolor yellow ;
+fi ;
+StopPage
+\stopuseMPgraphic
+
+%D We define these backgrounds as overlays:
+
+\defineoverlay
+[lecbackground]
+[\useMPgraphic{slide}]
+
+\defineoverlay
+[picbackground]
+[\useMPgraphic{slide}]
+
+\defineoverlay
+[bottom]
+[\useMPgraphic{Bottombg}]
+
+%D These are shortcuts to switch backgrounds:
+
+\define\lecback{\setuplayout[header=2.8cm]\setupbackgrounds[page][background={lecbackground,bottom,slidetitle}]}
+\define\titback{\setuplayout[header=1cm]\setupbackgrounds[page][background=lecbackground]}
+\define\picback{\setuplayout[header=1cm]\setupbackgrounds[page][background={lecbackground,bottom}]}
+\define\noback{\setupbackgrounds[page][background=nobackground]}
+
+%D We use combinations for placing vertical pictures and text side by side, and
+%D we want a distance of 1.1 cm between both.
+
+\setupcombinations[distance=1.1cm]
+
+%D The symbol for the first level of itemizations.
+
+\definesymbol[1][\useMPgraphic{ItSquare}]
+\setupitemize[1][inmargin][color=FrameColor]
+
+\protect
+\stopmodule
+
+\endinput
+
diff --git a/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-superellipse.tex b/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-superellipse.tex
new file mode 100644
index 0000000000..ad4e93c1ab
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-superellipse.tex
@@ -0,0 +1,139 @@
+%D \module
+%D [ file=t-superellipse,
+%D version=2007.12.20,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Module quadblue,
+%D author=Thomas A. Schmitz,
+%D date=\currentdate,
+%D copyright={Thomas A. Schmitz}]
+%C
+%C Copyright 2007 Thomas A. Schmitz.
+%C This file may be distributed under the GNU General Public License v. 2.0.
+
+%D This file provides the \quotation{superellipse} style for the presentation
+%D module. The design is inspired by Hans's "funny" presentation module
+%D (s-pre-03). It is loaded at runtime.
+
+\writestatus{loading}{module superellipse}
+
+\startmodule[superellipse]
+
+\unprotect
+
+%D The taspresentation module provides a skeleton into which different styles
+%D can be hooked. It uses a number of variables and macros which have to be set
+%D beforehand. Some parts are optional. We begin with the necessary definitions:
+
+%D We define our colors:
+
+\definecolor[outer][s=0]
+\definecolor[inner][s=.8]
+\definecolor[ellipse][r=.5,g=0,b=0]
+\definecolor[contrast][r=.9,g=0,b=0]
+\definecolor[Item] [r=.5]
+
+%D We start colors:
+
+\setupcolors[state=start]
+
+%D These macros are used for placing figures/pictures:
+
+\define\NormalHeight{\textheight}
+\define\NormalWidth{.5\textwidth}
+\define\PictureFrameHeight{\textheight}
+\define\PictureFrameWidth{.5\textwidth}
+
+%D The page layout:
+
+\setuplayout [width=fit,
+ height=fit,
+ margin=0cm,
+ header=1.2cm,
+ footer=0cm,
+ topspace=1.8cm,
+ backspace=1.5cm,
+ location=singlesided]
+
+%D The macro for typesetting the Slidetitle; this is adapted from a sample
+%D document that Brooks Moses published on the wiki:
+
+\definelayer[slidetitle]
+ [width=\paperwidth,
+ height=\paperheight,
+ y=10mm,
+ x=15mm]
+
+\define[1]\Slidetitle{\page\setlayer[slidetitle]%
+ {\framed[frame=off,width=\textwidth,height=2.5cm,offset=0pt,top=\vss,bottom=\vss]{\switchtobodyfont[\Titlesize]\color[ellipse]{#1}}}}
+
+%D The macro \tex{Maketitle} produces a default title page with the author, the
+%D title of the presentation, and the date. Using it is not mandatory.
+
+\define\Maketitle{%
+\titback
+\null
+\vfill
+\midaligned{\switchtobodyfont[\Titlesize]\color[ellipse]{\getvariable{taspresent}{title}}}
+\blank[2*line]
+\midaligned{\color[ellipse]{\getvariable{taspresent}{author}}}
+\blank[3*line]
+\midaligned{\color[ellipse]{\currentdate}}
+\vfill
+\null}
+
+%D The following parts are optional; if you don't use backgrounds and are
+%D content with CONTEXT's default itemization, you don't have to set these
+%D macros.
+
+%D We let Metapost calculate the background:
+
+\startuseMPgraphic{left}
+StartPage ;
+ fill Page withcolor \MPcolor{outer} ;
+ path p ; pair pa ; pair pb ;
+ p := Page enlarged (-15pt,-15pt) superellipsed .9 ;
+ fill p withcolor \MPcolor{inner} ;
+ pickup pencircle scaled 20pt ;
+ draw p withcolor \MPcolor{ellipse} ;
+ if PageNumber>1:
+ pa := point (3 + (6*PageNumber) / NOfPages) of p ;
+ pb := point (3 + (6*(PageNumber-1)) / NOfPages) of p ;
+ draw (p cutafter pa) cutbefore pb withcolor \MPcolor{contrast} ;
+ fi ;
+% draw point 1 of p withcolor \MPcolor{contrast} ;
+% draw point 8 of p withcolor blue ;
+% draw point 4 of p withcolor green ;
+% draw point 3 of p withcolor yellow ;
+% draw point 2 of p withcolor cyan ;
+% draw point 7 of p withcolor white ;
+StopPage ;
+\stopuseMPgraphic
+
+%D We define these backgrounds as overlays:
+
+\defineoverlay
+[lecbackground]
+[\useMPgraphic{left}]
+
+%D These are shortcuts to switch backgrounds:
+
+\define\lecback{\setuplayout[header=1.5cm]\setupbackgrounds[page][background={lecbackground,slidetitle}]}
+\define\titback{\setuplayout[header=0cm]\setupbackgrounds[page][background=lecbackground]}
+\define\picback{\setuplayout[header=0cm]\setupbackgrounds[page][background={lecbackground,slidetitle}]}
+\define\noback{\setupbackgrounds[page][background=nobackground]}
+
+%D We use combinations for placing vertical pictures and text side by side, and
+%D we want a distance of 1.1 cm between both.
+
+\setupcombinations[distance=0cm]
+
+%D The symbol for the first level of itemizations.
+
+\definesymbol[1][\useMPgraphic{ItSquare}]
+\setupitemize[1][color=ellipse]
+
+\protect
+\stopmodule
+
+\endinput
+
diff --git a/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-taspresent.tex b/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-taspresent.tex
new file mode 100644
index 0000000000..5b3f51e95d
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-taspresent.tex
@@ -0,0 +1,684 @@
+%D \module
+%D [ file=t-taspresent,
+%D version=2007.07.15,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Module taspresent,
+%D author=Thomas A. Schmitz,
+%D date=\currentdate,
+%D copyright={Thomas A. Schmitz}]
+%C
+%C Copyright 2007 Thomas A. Schmitz.
+%C This file may be distributed under the GNU General Public License v. 2.0.
+
+%D This module is meant to facilitate writing presentations in \CONTEXT. It
+%D provides a consistent interface and macros; there are different styles
+%D which give different output. The module has been written for
+%D projector||based presentations, so elements which are typical for screen
+%D presentations (such as interactive hyperlinks or tables of contents) are not
+%D included. The module is meant for an academic environment, specifically in
+%D the humanities. Hence, it has the following characteristics:
+%D
+%D \startitemize
+%D
+%D \item The look is rather sober. In academia, presentations are not meant to
+%D showcase fancy \TeX\ effects; nothing should divert the audience's attention
+%D from the content.
+%D
+%D \item The module is written for slides which exhibit text and/or images.
+%D From my own experience with \TeX||based presentations, I have provided a
+%D setup for horizontal (landscape) pictures and for vertical (portrait)
+%D pictures, which are accompanied by an area for explanatory text.
+%D
+%D \item A simple switch in the module setup command will produce different
+%D output.
+%D
+%D \item It is easy to customize the module or to add more styles.
+%D
+%D \stopitemize
+%D
+%D The macros are commented rather extensively to give users (especially users
+%D relatively new to \CONTEXT) the chance to unserstand the mechanisms and
+%D create their own styles. Of course, I did not invent this code on my own. My
+%D thanks are due, as always, to Hans Hagen, whose presentation modules in the
+%D \CONTEXT\ core have been a wonderful source of inspiration, and to Mojca
+%D Miklavec, who provided help with Metapost.
+
+\writestatus{loading}{module taspresent}
+
+\startmodule[taspresent]
+
+\unprotect
+
+%D First, we provide default setups for the module. These setups will be used
+%D to choose the different styles; user input will overwrite the defaults. The
+%D different styles are defined in additional modules which will be called in
+%D turn.
+
+\setupmodule[style=doubleframe,font=LatinModernSans,size=17pt,stylecolor=blue,stylebottom=square]
+
+%D We collect author and title of the presentation in variables in the
+%D namespace {\tt taspresent}; they will be used to typeset the title page and
+%D in some headers and footers. The defaults are empty.
+
+\setvariables [taspresent] [ author=]
+\setvariables [taspresent] [ title=]
+
+%D The fontsize is set via the \type{size}||key; it will be used in
+%D numerous setup||commands. We use the \tex{processaction} mechanism to define
+%D our \tex{Normalsize} and \tex{Titlesize}.
+
+
+\processaction[\currentmoduleparameter{size}]
+ [ 16pt=>\def\Normalsize{16pt}\def\Titlesize{25pt},
+ 17pt=>\def\Normalsize{17pt}\def\Titlesize{27pt},
+ 18pt=>\def\Normalsize{18pt}\def\Titlesize{28pt},
+ 19pt=>\def\Normalsize{19pt}\def\Titlesize{30pt},
+ 20pt=>\def\Normalsize{20pt}\def\Titlesize{30pt},
+ 21pt=>\def\Normalsize{21pt}\def\Titlesize{30pt},
+ \v!unknown=>\def\Normalsize{17pt}\def\Titlesize{27pt},
+ \v!default=>\def\Normalsize{17pt}\def\Titlesize{27pt}]
+
+%D Next, we define the different styles. The fallback is a style without
+%D background which is defined in the module itself; it is included as a
+%D \type{mode}. All other styles are defined in external files which are
+%D called in turn.
+
+\beginOLDTEX
+\setupencoding[default=ec]
+\endOLDTEX
+
+\def\DefMode{\enablemode[defaultmode]}
+
+\processaction[\currentmoduleparameter{stylebottom}]
+ [ square=>\def\modbottom{square},
+ stripe=>\def\modbottom{stripe},
+ \v!unknown=>\def\modbottom{square},
+ \v!default=>\def\modbottom{square}]
+
+\processaction[\currentmoduleparameter{stylecolor}]
+ [ red=>\def\modcolor{red},
+ blue=>\def\modcolor{blue},
+ green=>\def\modcolor{green},
+ bluered=>\def\modcolor{bluered},
+ \v!unknown=>\def\modcolor{blue},
+ \v!default=>\def\modcolor{blue}]
+
+\processaction[\currentmoduleparameter{style}]
+ [ blackblue=>{\usemodule[blackblue]},
+ bonn=>{\usemodule[bonn]},
+ bluegray=>{\usemodule[bluegray][color=\modcolor]},
+ bluestripe=>{\usemodule[bluestripe]},
+ bluewhite=>{\usemodule[bluewhite]},
+ darkshade=>{\usemodule[darkshade][color=\modcolor]},
+ doubleframe=>{\usemodule[doubleframe][bottom=\modbottom]},
+ doubleshade=>{\usemodule[doubleshade]},
+ embossed=>{\usemodule[embossed]},
+ graybeams=>{\usemodule[graybeams]},
+ graysquare=>{\usemodule[graysquare]},
+ greenblue=>{\usemodule[greenblue]},
+ horizontalblue=>{\usemodule[horizontalblue]},
+ lightblue=>{\usemodule[lightblue]},
+ quadblue=>{\usemodule[quadblue]},
+ rainbowstripe=>{\usemodule[rainbowstripe]},
+ superellipse=>{\usemodule[superellipse]},
+ titleframe=>{\usemodule[titleframe]},
+ narrowstripe=>{\usemodule[narrowstripe][color=\modcolor]},
+ redframe=>{\usemodule[redframe]},
+ \v!unknown=>\doiffileelse{\currentmoduleparameter{style}}{\input \currentmoduleparameter{style}}{\DefMode},
+ \v!default=>\DefMode]
+
+%D We set up the bodyfont
+
+\processaction[\currentmoduleparameter{font}]
+ [ LatinModern=>\def\fontmode{latinmodern},
+ LatinModernSans=>\def\fontmode{latinmodernsans},
+ Pagella=>\def\fontmode{pagella},
+ Times=>\def\fontmode{times},
+ MyriadPro=>\def\fontmode{myriadpro},
+ Helvetica=>\def\fontmode{helvetica},
+ User=>\def\fontmode{},
+ \v!unknown=>\def\fontmode{latinmodernsans},
+ \v!default=>\def\fontmode{latinmodernsans}]
+
+\enablemode[\fontmode]
+
+%D We begin by setting up the tolerance. Presentations have relatively dense
+%D lines, we do not care about underfull lines, but allow emergeny stretch.
+
+\setuptolerance[verytolerant,stretch]
+
+\setupbodyfontenvironment[default][em=italic]
+
+%D Next, the page layout. S6 has the ratio of a usual computer screen. We do
+%D not want page numbers, but we sometimes want to use the pagenumbering
+%D mechanism, so we make sure pages are counted, but the numbers are not
+%D displayed. As for the page layout: most of the numbers have been reached by
+%D trial and error; I have just taken what seemed to produce the best output.
+
+\setuppapersize[S6][S6]
+
+\setuppagenumbering[location=]
+
+\startmode[defaultmode]
+\setupcolors[state=start]
+\stopmode
+
+\startmode[defaultmode]
+\setuplayout [width=fit,
+ margin=0.6cm,
+ height=fit,
+ header=0.15cm,
+ footer=1.35cm,
+ footerdistance=0.5cm,
+ topspace=0.5cm,
+ backspace=1cm,
+ location=singlesided]
+\stopmode
+
+%D The bodyfont needs to be defined so \CONTEXT\ can calculate size switches,
+%D math formulas, etc.
+
+\starttypescript [serif] [default] [size]
+\definebodyfont [14pt,15pt,16pt,17pt,20pt,25pt,\Normalsize,\Titlesize] [rm] [default]
+\stoptypescript
+
+\starttypescript [sans] [default] [size]
+\definebodyfont [14pt,15pt,16pt,17pt,20pt,25pt,\Normalsize,\Titlesize] [ss] [default]
+\stoptypescript
+
+%D Modes define which font will be used.
+
+\definebodyfontenvironment[\Normalsize]
+\definebodyfontenvironment[\Titlesize]
+
+\startmode[latinmodern]
+\setupbodyfont[\Normalsize]
+\stopmode
+
+\startmode[latinmodernsans]
+\setupbodyfont[ss,\Normalsize]
+\stopmode
+
+\beginLUATEX
+\usetypescriptfile[type-otf]
+
+\startmode[helvetica]
+\usetypescript[times]
+\setupbodyfont[times,ss,\Normalsize]
+\stopmode
+
+\startmode[pagella]
+\usetypescript[palatino]
+\setupbodyfont[palatino,\Normalsize]
+\stopmode
+
+\startmode[times]
+\usetypescript[times]
+\setupbodyfont[times,\Normalsize]
+\stopmode
+\endLUATEX
+
+\beginOLDTEX
+\startmode[helvetica]
+\definetypeface [SlideFace] [rm] [serif] [times] [default]
+\definetypeface [SlideFace] [ss] [sans] [helvetica] [default] [rscale=.9]
+\definetypeface [SlideFace] [tt] [mono] [courier] [default] [rscale=1.1]
+\setupbodyfont[SlideFace,ss,\Normalsize]
+\stopmode
+
+\startmode[times]
+\definetypeface [SlideFace] [rm] [serif] [times] [default]
+\definetypeface [SlideFace] [ss] [sans] [helvetica] [default] [rscale=.9]
+\definetypeface [SlideFace] [tt] [mono] [courier] [default] [rscale=1.1]
+\setupbodyfont[SlideFace,\Normalsize]
+\stopmode
+
+\startmode[pagella]
+\definebodyfontenvironment[\Normalsize]
+\usetypescriptfile[type-gyr]
+\definetypeface [SlideFace] [rm] [serif] [palatino] [default] [encoding=texnansi]
+\definetypeface [SlideFace] [tt] [mono] [modern] [default] [encoding=texnansi]
+\setupbodyfont[SlideFace,\Normalsize]
+\stopmode
+
+\startmode[myriadpro]
+\usetypescriptfile[type-myriadpro]
+\usetypescript[MyriadPro] [texnansi]
+\setupbodyfont[MyMyriadPro,ss,\Normalsize]
+\stopmode
+\endOLDTEX
+
+\beginXETEX
+\startmode[times]
+\starttypescript [serif] [sliter]
+ \definefontsynonym [Termes-Roman] [file:texgyretermes-regular]
+ \definefontsynonym [Termes-Bold] [file:texgyretermes-bold]
+ \definefontsynonym [Termes-Italic] [file:texgyretermes-italic]
+ \definefontsynonym [Termes-Bold-Italic] [file:texgyretermes-bolditalic]
+ \stoptypescript
+
+\starttypescript [serif] [sliter] [name]
+ \definefontsynonym [Serif] [Termes-Roman] [features=default]
+ \definefontsynonym [SerifItalic] [Termes-Italic] [features=default]
+ \definefontsynonym [SerifBold] [Termes-Bold] [features=default]
+ \definefontsynonym [SerifBoldItalic] [Termes-Bold-Italic] [features=default]
+ \definefontsynonym [SerifCaps] [Serif]
+ \definefontsynonym [OldStyle] [Serif]
+\stoptypescript
+\definetypeface [SlideFace] [rm] [serif] [sliter] [default]
+\setupbodyfont[SlideFace,\Normalsize]
+\stopmode
+
+\startmode[helvetica]
+\starttypescript [sans] [slihe]
+ \definefontsynonym [Helvetica-Roman] [file:texgyreheros-regular]
+ \definefontsynonym [Helvetica-Bold] [file:texgyreheros-bold]
+ \definefontsynonym [Helvetica-Italic] [file:texgyreheros-italic]
+ \definefontsynonym [Helvetica-Bold-Italic] [file:texgyreheros-bolditalic]
+ \stoptypescript
+
+\starttypescript [sans] [slihe] [name]
+ \definefontsynonym [Sans] [Helvetica-Roman] [features=default]
+ \definefontsynonym [SansItalic] [Helvetica-Italic] [features=default]
+ \definefontsynonym [SansBold] [Helvetica-Bold] [features=default]
+ \definefontsynonym [SansBoldItalic] [Helvetica-Bold-Italic] [features=default]
+ \definefontsynonym [SansCaps] [Sans]
+ \definefontsynonym [OldStyle] [Sans]
+\stoptypescript
+\definetypeface [SlideFace] [rm] [sans] [slihe] [default]
+\setupbodyfont[SlideFace,ss,\Normalsize]
+\stopmode
+
+\startmode[pagella]
+\definebodyfontenvironment[\Normalsize]
+\starttypescript [serif] [slipa]
+ \definefontsynonym [Pagella-Roman] [file:texgyrepagella-regular]
+ \definefontsynonym [Pagella-Bold] [file:texgyrepagella-bold]
+ \definefontsynonym [Pagella-Italic] [file:texgyrepagella-italic]
+ \definefontsynonym [Pagella-Bold-Italic] [file:texgyrepagella-bolditalic]
+ \stoptypescript
+
+\starttypescript [serif] [slipa] [name]
+ \definefontsynonym [Serif] [Pagella-Roman] [features=default]
+ \definefontsynonym [SerifItalic] [Pagella-Italic] [features=default]
+ \definefontsynonym [SerifBold] [Pagella-Bold] [features=default]
+ \definefontsynonym [SerifBoldItalic] [Pagella-Bold-Italic] [features=default]
+ \definefontsynonym [SerifCaps] [Serif]
+ \definefontsynonym [OldStyle] [Serif]
+\stoptypescript
+\definetypeface [SlideFace] [rm] [serif] [slipa] [default]
+\setupbodyfont[SlideFace,\Normalsize]
+\stopmode
+
+\startmode[myriadpro]
+\usetypescriptfile[type-myriadpro]
+\usetypescript[MyriadPro]
+\setupbodyfont[MyMyriadPro,\Normalsize]
+
+\endXETEX
+
+%D This is a definition for Metapost pictures and \tex{sometxt} which I use in
+%D my own presentations.
+
+\def\MyFramedText#1%
+{\framed[offset=.5ex,frame=off,width=0.5cm]{#1}}
+\definetextext[MF]{\MyFramedText}
+
+%D For code snippets, we want colored output.
+
+\definetype[typeTEX][option=color]
+
+%D We define a \quotation{normal} height and width for images.
+
+\startmode[defaultmode]
+\define\NormalHeight{.83\textheight}
+\define\NormalWidth{.476\textwidth}
+\define\PictureFrameHeight{.83\textheight}
+\define\PictureFrameWidth{.476\textwidth}
+\stopmode
+
+%D This is a small square which will be used for \tex{itemize}; it will be
+%D placed in the margin.
+
+\startuniqueMPgraphic{ItTriangle}
+fill (0,0) -- (0,0.4cm) -- (0.6cm,0.2cm) -- cycle withcolor \MPcolor{Item} ;
+\stopuniqueMPgraphic
+
+\startuniqueMPgraphic{ItSquare}
+fill unitsquare xyscaled(0.4cm,0.4cm) withcolor \MPcolor{Item} ;
+\stopuniqueMPgraphic
+
+%D I had thought about this method for including pictures, but in the end
+%D decided against it.
+
+\definefloat[MyMargin]
+ [figure]
+
+\setupfloat[MyMargin]
+ [leftmargindistance=-0.5cm,
+ default={left,none,high}]
+
+\defineparagraphs[ShowPictures][n=2,distance=1cm]
+\setupparagraphs[ShowPictures][1][width=.5\textwidth]
+
+%D The code for red circles and arrows which can be placed on top of a picture.
+%D I use them quite often in my presentations. Again, they are Metapost
+%D graphics which are then used as overlays.
+
+\setupMPvariables[CircleSomething][scale=20,x=3,y=3]
+\startuseMPgraphic{CircleSomething}{scale,x,y}
+picture bboxpicture ;
+draw unitsquare xyscaled (OverlayWidth,OverlayHeight) ;
+bboxpicture := currentpicture ;
+currentpicture := nullpicture ;
+for i=1 upto 18:
+ pickup pencircle scaled (i*0.333pt) ;
+ draw fullcircle scaled \MPvar{scale}mm shifted (\MPvar{x}mm + 1.5mm,\MPvar{y}mm - 1.5mm) withcolor transparent (1,0.025,black) ;
+ endfor ;
+pickup pencircle scaled 5pt ;
+draw fullcircle scaled \MPvar{scale}mm shifted (\MPvar{x}mm,\MPvar{y}mm) withcolor red ;
+setbounds currentpicture to boundingbox bboxpicture;
+\stopuseMPgraphic
+
+%D This code has been contributed by Wolfgang Schuster and Peter Rolf. It puts
+%D a transparent gray layer over the picture, with one round area being
+%D completely transparent. This looks very neat for emphasizing areas of a
+%D picture.
+
+\setupMPvariables[GraySomething][opacity=30,scale=20,x=10,y=10]
+\startuseMPgraphic{GraySomething}{opacity,scale,x,y}
+op := \MPvar{opacity}/100 ;
+path p, q ;
+p := unitsquare xyscaled(OverlayWidth,OverlayHeight) ;
+q := fullcircle scaled \MPvar{scale}mm shifted (\MPvar{x}mm,\MPvar{y}mm) ;
+fill p--reverse q--cycle withcolor transparent (1,op,black) ;
+\stopuseMPgraphic
+
+%D The next macro allows users a simple interface for placing an image with a
+%D red circle on top. The macro \tex{CircHoriz} takes three arguments: the size
+%D and placement of the red circle, which are given as variables in the form
+%D \type{[scale=,xshift,yshift]}, the name of the picture, and the size for the
+%D picture.
+
+\def\CircHoriz{\dotripleargument\doCircHoriz}
+\def\doCircHoriz[#1][#2][#3]{%
+\defineoverlay[Red_Circle][\useMPgraphic{CircleSomething}{#1}]
+\midaligned{\framed[frame=off,width=\textwidth,height=\PictureFrameHeight,align=middle,top=\vss,bottom=\vss,strut=no,offset=0pt,background={foreground,Red_Circle}]{\externalfigure[#2][#3]}}}
+
+%D This macro makes use of the gray layer; again, it takes three arguments:
+%D opacity, scale and placement of the transparent circle (the rest of the
+%D image is transparent gray), name of the picture, size of picture.
+
+\def\GrayHoriz{\dotripleargument\doGrayHoriz}
+\def\doGrayHoriz[#1][#2][#3]{%
+\defineoverlay[Gray_Background][\useMPgraphic{GraySomething}{#1}]
+\framed[frame=off,width=\textwidth,height=\textheight,align=middle,top=\vss,bottom=\vss,strut=no,offset=0pt]{\framed[frame=off,width=fit,height=fit,strut=no,offset=0pt,background={foreground,Gray_Background}]{\externalfigure[#2][#3]}}}
+
+
+\def\CircVert{\dotripleargument\doCircVert}
+\def\doCircVert[#1][#2][#3]#4{%
+\defineoverlay[Red_Circle][\useMPgraphic{CircleSomething}{#1}]%
+\startcombination%
+\framed[frame=off,height=\textheight,width=\PictureFrameWidth,top=\vss,bottom=\vss,align=middle,strut=no,offset=0pt,background={foreground,Red_Circle}]{\externalfigure[#2][#3]}{}%
+\framed[frame=off,height=\textheight,width=\PictureFrameWidth,top=\vss,bottom=\vss,align=middle,strut=no]{#4}{}%
+\stopcombination%
+}
+
+\setupMPvariables[ArrowSomething][direction=45,x=20,y=20]
+\startuseMPgraphic{ArrowSomething}{direction,x,y}
+picture bboxpicture ;
+draw unitsquare xyscaled (OverlayWidth,OverlayHeight) withcolor blue ;
+z1 = (\MPvar{x}mm,\MPvar{y}mm) ;
+z2 = z1 + 2.5cm*dir(\MPvar{direction}) ;
+z3 = z1 shifted (1.5mm,-1.5mm) ;
+z4 = z2 shifted (1.5mm,-1.5mm) ;
+bboxpicture := currentpicture ;
+currentpicture := nullpicture ;
+for i=1 upto 18:
+ ahlength := (i*0.833pt) ;
+ pickup pencircle scaled (i*0.277pt) ;
+ drawarrow z4--z3 withcolor transparent (1,0.025,black) ;
+endfor ;
+ahlength := 15pt ;
+pickup pencircle scaled 5pt ;
+drawarrow z2--z1 withcolor red;
+setbounds currentpicture to boundingbox bboxpicture;
+\stopuseMPgraphic
+
+%D The code for inclusion of a red arrow is similar: again, it takes three
+%D arguments: the placement and direction of the arrow given in the form
+%D \type{[direction=45,x=20,y=20]}, the name of the picture, and the size of
+%D the picture.
+
+\def\ArrowHoriz{\dotripleargument\doArrowHoriz}
+\def\doArrowHoriz[#1][#2][#3]{%
+\defineoverlay[Red_Arrow][\useMPgraphic{ArrowSomething}{#1}]
+\midaligned{\framed[frame=off,width=\textwidth,height=\PictureFrameHeight,align=middle,top=\vss,bottom=\vss,strut=no,offset=0pt,background={foreground,Red_Arrow}]{\externalfigure[#2][#3]}}}
+
+\def\ArrowVert{\dotripleargument\doArrowVert}
+\def\doArrowVert[#1][#2][#3]#4{%
+\defineoverlay[Red_Arrow][\useMPgraphic{ArrowSomething}{#1}]%
+\startcombination%
+\framed[frame=off,height=\textheight,width=\PictureFrameWidth,top=\vss,bottom=\vss,align=middle,strut=no,offset=0pt,background={foreground,Red_Arrow}]{\externalfigure[#2][#3]}{}%
+\framed[frame=off,height=\textheight,width=\PictureFrameWidth,top=\vss,bottom=\vss,align=middle,strut=no]{#4}{}%
+\stopcombination%
+}
+
+\beginLUATEX
+\define{\married}%
+{\getglyph{name:TeXGyreHeros-Regular}{\char"26AD}}
+
+\define{\hanky}%
+{\getglyph{name:TeXGyreHeros-Regular}{\char"26AE}}
+\endLUATEX
+
+\beginOLDTEX
+\loadmapfile[ts1-lm.map]
+
+\startencoding[comp]
+\definecharacter textmarried 109
+\definecharacter texthanky 126
+\stopencoding
+
+\definefontsynonym[l@tinss][ts1-lmss10][encoding=comp]
+\definefont[tsf@nt][l@tinss sa 1.4]
+
+\def\married{\begingroup\tsf@nt\textmarried\endgroup}
+\def\hanky{\begingroup\tsf@nt\texthanky\endgroup}
+\endOLDTEX
+
+%D Now the real user macros. \tex{Slidetitle}: well, the name says it all. Ths
+%D argument is typeset as the title, but the implementation and the result
+%D (alignment, size, distance to text, color etc.) vary from module to module.
+
+\startmode[defaultmode]
+\define[1]\Slidetitle{\page\midaligned{\switchtobodyfont[\Titlesize]#1}\blank[0.75cm]}
+\stopmode
+
+%D The macro \tex{Maketitle} produces a default title page with the author, the
+%D title of the presentation, and the date. Using it is not mandatory.
+
+\startmode[defaultmode]
+\define\Maketitle{%
+\titback
+\null
+\vfill
+\midaligned{\switchtobodyfont[\Titlesize]\getvariable{taspresent}{title}}
+\blank[2*line]
+\midaligned{\getvariable{taspresent}{author}}
+\blank[3*line]
+\midaligned{\currentdate}
+\vfill
+\null}
+\stopmode
+
+%D The macros for placing horizontal and vertical pictures. They take a similar
+%D form to the inclusion of arrows and circles. The macro for horizontal
+%D pictures \tex{PicHoriz} takes two arguments: the name of the picture and its
+%D size in the form \type{height=} or \type{width=}; the macro for vertical
+%D pictures \tex{PicVert} takes three arguments: the name of the picture, its
+%D size, and the text which will be placed opposite the picture.
+
+\def\PicHoriz{\dodoubleargument\doPicHoriz}
+\def\doPicHoriz[#1][#2]{%
+\framed[frame=off,width=\textwidth,height=\PictureFrameHeight,align=middle,top=\vss,bottom=\vss,strut=no,offset=0pt]{\externalfigure[#1][#2]}}
+
+\def\PicVert{\dodoubleargument\doPicVert}
+\def\doPicVert[#1][#2]#3{\startcombination%
+\framed[frame=off,height=\textheight,width=\PictureFrameWidth,top=\vss,bottom=\vss,align=middle,strut=no,offset=0pt]{\externalfigure[#1][#2]}{}%
+\framed[frame=off,height=\textheight,width=\PictureFrameWidth,top=\vss,bottom=\vss,align=middle,strut=no]{#3}{}%
+\stopcombination}
+
+%D finally, a few macros for switching the background.
+
+\startmode[defaultmode]
+\define\lecback{\relax}
+\define\titback{\relax}
+\define\picback{\relax}
+\define\noback{\relax}
+\stopmode
+
+%D The rest is the demo section.
+
+\protect
+\stopmodule
+
+\doifnotmode{demo}{\endinput}
+
+\setvariables [taspresent]
+ [author={Groucho Marx},
+ title={Marriage the Chief Cause of Divorce}]
+
+\starttext
+
+\Maketitle
+
+\Slidetitle{Text}
+
+\lecback
+
+Thus, I came to the conclusion that the designer of a new
+system must not only be the implementer and first
+large||scale user; the designer should also write the first
+user manual.
+
+The separation of any of these four components would have
+hurt \TeX\ significantly. If I had not participated fully in
+all these activities, literally hundreds of improvements
+would never have been made, because I would never have
+thought of them or perceived why they were important.
+
+But a system cannot be successful if it is too strongly
+influenced by a single person. Once the initial design is
+complete and fairly robust, the real test begins as people
+with many different viewpoints undertake their own
+experiments.
+
+\Slidetitle{Itemization}
+
+\startitemize[1]
+\item Thus, I came to the conclusion that the designer of a new
+ system
+\item must not only be the implementer and first
+ large||scale user;
+\item the designer should also write the first
+ user manual.
+\item The separation of any of these four components would have
+ hurt \TeX\ significantly.
+\stopitemize
+
+\Slidetitle{Numbered Itemization}
+
+\startitemize[n]
+\item Thus, I came to the conclusion that the designer of a new
+ system
+\item must not only be the implementer and first
+ large||scale user;
+\item the designer should also write the first
+ user manual.
+\item The separation of any of these four components would have
+ hurt \TeX\ significantly.
+\stopitemize
+
+\Slidetitle{Picture in Horizontal Mode}
+
+\PicHoriz[hor][height=\NormalHeight]
+
+\page
+
+\picback
+
+\PicVert[vert][width=\NormalWidth]{Picture in \\ Vertical Mode}
+
+\page
+
+\CircVert[scale=22,x=23,y=25][vert][width=\NormalWidth]{Circle in \\ Vertical Mode}
+
+\page
+
+\ArrowVert[direction=90,x=7,y=23][vert][width=\NormalWidth]{Arrow in \\ Vertical Mode}
+
+\Slidetitle{Red Circle}
+
+\lecback
+
+\CircHoriz[scale=40,x=120,y=80][hor][height=\NormalHeight]
+
+\Slidetitle{Red Arrow}
+
+\ArrowHoriz[direction=135,x=105,y=15][hor][height=\NormalHeight]
+
+\Slidetitle{A MetaFun graphic}
+
+\placefigure[here]{none}{%
+\startMPcode
+pickup pencircle scaled 4pt ;
+draw unitsquare xyscaled (5cm,5cm) withcolor red ;
+\stopMPcode
+}
+
+\Slidetitle{Some Code Snippets}
+
+To set up a horizontal picture, simply type:
+
+\startTEX
+\PicHoriz[hor][height=\Normalheight]
+\stopTEX
+
+\blank[line]
+
+For vertical pictures:
+
+\startTEX
+\PicVert[vert][width=\NormalWidth]%
+{Text placed \\ opposite picture}
+\stopTEX
+
+\Slidetitle{Math}
+
+Since I know nothing about math, this example is copied from the wiki:
+
+\startformula
+ f(x) = \startmathcases
+ \NC x, \NC if $0 \le x \le \frac12$ \NR
+ \NC 1-x ,\NC if $\frac12 \le x \le 1$ \NR
+\stopmathcases
+\stopformula
+
+\Slidetitle{Your Own Ideas?}
+
+\null
+
+\vfill
+
+\midaligned{\tfd Go \color[red]{here!}}
+
+\vfill
+
+\null
+
+\page
+
+\null
+
+\stoptext
diff --git a/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-titleframe.tex b/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-titleframe.tex
new file mode 100644
index 0000000000..b3df934da7
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-taspresent/tex/context/third/taspresent/t-titleframe.tex
@@ -0,0 +1,158 @@
+%D \module
+%D [ file=t-titleframe,
+%D version=2007.12.20,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Module blackblue,
+%D author=Thomas A. Schmitz,
+%D date=\currentdate,
+%D copyright={Thomas A. Schmitz}]
+%C
+%C Copyright 2007 Thomas A. Schmitz.
+%C This file may be distributed under the GNU General Public License v. 2.0.
+
+%D This file provides the \quotation{titleframe} style for the presentation
+%D module. It is loaded at runtime. The most interesting part is the scratch
+%D counter at the bottom of the page, which is explained in the metafun manual.
+
+\writestatus{loading}{module titleframe}
+
+\startmodule[titleframe]
+
+\unprotect
+
+%D The taspresentation module provides a skeleton into which different styles
+%D can be hooked. It uses a number of variables and macros which have to be set
+%D beforehand. Some parts are optional. We begin with the necessary definitions:
+
+%D We start colors:
+
+\setupcolors[state=start]
+
+%D These macros are used for placing figures/pictures:
+
+\define\NormalHeight{\textheight}
+\define\NormalWidth{.476\textwidth}
+\define\PictureFrameHeight{\textheight}
+\define\PictureFrameWidth{.476\textwidth}
+
+%D The page layout:
+
+\setuplayout [width=fit,
+ margin=0cm,
+ height=fit,
+ header=2.2cm,
+ footer=1cm,
+ topspace=.6cm,
+ backspace=1cm,
+ location=singlesided]
+
+%D The macro for typesetting the Slidetitle; this is adapted from a sample
+%D document that Brooks Moses published on the wiki:
+
+\definelayer[slidetitle]
+ [width=\paperwidth,
+ height=\paperheight,
+ x=10mm,
+ y=2mm]
+
+\define[1]\Slidetitle{\page\setlayer[slidetitle]%
+ {\framed[corner=round,background=color,backgroundcolor=myred,frame=off,width=\textwidth,height=2.1cm,offset=0pt,top=\vss,bottom=\vss]{\switchtobodyfont[\Titlesize]\color[background]{#1}}}}
+
+%D The macro \tex{Maketitle} produces a default title page with the author, the
+%D title of the presentation, and the date. Using it is not mandatory.
+
+\define\Maketitle{%
+\titback
+\null
+\vfill
+\framed[corner=round,background=color,backgroundcolor=myred,frame=off,width=\textwidth,height=.75\textheight,top=\vss,bottom=\vss,align=middle]{\switchtobodyfont[\Titlesize]\color[background]{\getvariable{taspresent}{title}}\switchtobodyfont[\Normalsize]\blank[line]\color[background]{\getvariable{taspresent}{author}\blank[2*line]\currentdate}}
+\vfill
+\null}
+
+%D The following parts are optional; if you don't use backgrounds and are
+%D content with CONTEXT's default itemization, you don't have to set these
+%D macros.
+
+%D We define our colors:
+
+\definecolor [background] [s=.9]
+\definecolor [darkgray] [s=.3]
+\definecolor [lightgray] [s=.7]
+\definecolor [myred] [r=.5]
+\definecolor [Item] [r=.5]
+
+%D We let Metapost calculate the background:
+
+\startuniqueMPgraphic{slide}
+StartPage ;
+fill Page withcolor \MPcolor{background} ;
+StopPage ;
+\stopuniqueMPgraphic
+
+\startuseMPgraphic{counter}
+StartPage ;
+numeric a ;
+numeric b ;
+b = PaperWidth/2 - NOfPages * 2.5pt ;
+a = 7mm ;
+% z1 = (0,0) ;
+% z2 = (x1+2pt,y1+a) ;
+% numeric a; a=.5cm ;
+pickup pencircle scaled 3pt ;
+for i := 1 upto NOfPages:
+ path p ;
+ path q ;
+ p = (0,5mm) -- (1mm,11mm) ;
+ p := p shifted (b,0) ;
+ q = (-8mm,5mm) -- (0,11mm) ;
+ q := q shifted (b,0) ;
+ if (i mod 5<>0):
+ draw p shifted (i*5pt,0pt) withcolor \MPcolor{lightgray} ;
+ if (i <= PageNumber):
+ draw p shifted (i*5pt,0pt) ;
+ fi ;
+ else:
+ draw q shifted (i*5pt,0pt) withcolor \MPcolor{lightgray} ;
+ if (i <= PageNumber):
+ draw q shifted (i*5pt,0pt) ;
+ fi ;
+ fi ;
+endfor ;
+StopPage ;
+\stopuseMPgraphic
+
+%\setupfootertexts[{\framed[frame=on,framecolor=red,height=9mm,width=\textwidth]{\useMPgraphic{counter}}}]
+%\setupfootertexts[some random text]
+
+%D We define these backgrounds as overlays:
+
+\defineoverlay
+[lecbackground]
+[\useMPgraphic{slide}]
+
+\defineoverlay
+[scratchcounter]
+[\useMPgraphic{counter}]
+
+%D These are shortcuts to switch backgrounds:
+
+\define\lecback{\setuplayout[header=2.2cm]\setupbackgrounds[page][background={lecbackground,scratchcounter,slidetitle}]}
+\define\titback{\setuplayout[header=.5cm]\setupbackgrounds[page][background=lecbackground]}
+\define\picback{\setuplayout[header=.5cm]\setupbackgrounds[page][background={lecbackground,scratchcounter}]}
+\define\noback{\setupbackgrounds[page][background=nobackground]}
+
+%D We use combinations for placing vertical pictures and text side by side, and
+%D we want a distance of 1.1 cm between both.
+
+\setupcombinations[distance=1.1cm]
+
+%D The symbol for the first level of itemizations.
+
+\definesymbol[1][\useMPgraphic{ItSquare}]
+\setupitemize[1][color=myred]
+
+\protect
+\stopmodule
+
+\endinput
+
diff --git a/obsolete/macros/context/contrib/context-taspresent/tpm/t-taspresent.tpm b/obsolete/macros/context/contrib/context-taspresent/tpm/t-taspresent.tpm
new file mode 100644
index 0000000000..e6acc63a87
--- /dev/null
+++ b/obsolete/macros/context/contrib/context-taspresent/tpm/t-taspresent.tpm
@@ -0,0 +1,54 @@
+<!DOCTYPE rdf:RDF SYSTEM "tpm.dtd">
+<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:TPM="http://texlive/dante.de/">
+ <rdf:Description
+ about="http://dl.contextgarden.net/modules/taspresent-2008-08-11.zip">
+ <TPM:Name>t-taspresent</TPM:Name>
+ <TPM:Type>Package</TPM:Type>
+ <TPM:Date>2008/08/11 21:00:00</TPM:Date>
+ <TPM:Version>2008.08.11</TPM:Version>
+ <TPM:Creator>Thomas A. Schmitz</TPM:Creator>
+ <TPM:Title>taspresent</TPM:Title>
+ <TPM:Description>
+ taspresentation is a module to prepare projector-based presentations
+ with ConTeXt
+ </TPM:Description>
+ <TPM:Author>Thomas A. Schmitz</TPM:Author>
+ <TPM:Size>2255176</TPM:Size>
+ <TPM:Build/>
+ <TPM:RunFiles size="125944">
+ tex/context/third/taspresent/t-blackblue.tex
+ tex/context/third/taspresent/t-bluegray.tex
+ tex/context/third/taspresent/t-bluestripe.tex
+ tex/context/third/taspresent/t-darkshade.tex
+ tex/context/third/taspresent/t-doubleframe.tex
+ tex/context/third/taspresent/t-doubleshade.tex
+ tex/context/third/taspresent/t-embossed.tex
+ tex/context/third/taspresent/t-graybeams.tex
+ tex/context/third/taspresent/t-graysquare.tex
+ tex/context/third/taspresent/t-greenblue.tex
+ tex/context/third/taspresent/t-horizontalblue.tex
+ tex/context/third/taspresent/t-lightblue.tex
+ tex/context/third/taspresent/t-narrowstripe.tex
+ tex/context/third/taspresent/t-quadblue.tex
+ tex/context/third/taspresent/t-rainbowstripe.tex
+ tex/context/third/taspresent/t-redframe.tex
+ tex/context/third/taspresent/t-superellipse.tex
+ tex/context/third/taspresent/t-taspresent.tex
+ tex/context/third/taspresent/t-titleframe.tex
+ tpm/t-taspresent.tpm
+ </TPM:RunFiles>
+ <TPM:DocFiles size="2129232">
+ doc/context/third/taspresent/readme
+ doc/context/third/taspresent/taspresent-manual.tex
+ doc/context/third/taspresent/taspresent-manual.pdf
+ doc/context/third/taspresent/hor.jpg
+ doc/context/third/taspresent/vert.jpg
+ doc/context/third/taspresent/demo.tex
+ </TPM:DocFiles>
+ <TPM:Requires>
+ <TPM:Package name="context"/>
+ </TPM:Requires>
+ <TPM:Provides>Package/taspresent</TPM:Provides>
+ </rdf:Description>
+</rdf:RDF>
diff --git a/obsolete/macros/generic/diagrams/barr/diagdoc.tex b/obsolete/macros/generic/diagrams/barr/diagdoc.tex
new file mode 100644
index 0000000000..5dd69eb2c5
--- /dev/null
+++ b/obsolete/macros/generic/diagrams/barr/diagdoc.tex
@@ -0,0 +1,422 @@
+\documentstyle[12pt]{article}
+\input diagram
+\textheight=9in \topmargin=0pt\headheight=0pt\headsep=0pt
+\textwidth=6.5in \oddsidemargin=0pt
+\begin{document}
+{\catcode`\ =13\global\let =\ \catcode`\^^M=13
+\gdef^^M{\par\noindent}}
+\def\verbatim{\tt
+\catcode`\^^M=13
+\catcode`\ =13
+\catcode`\\=12
+\catcode`\{=12
+\catcode`\}=12
+\catcode`\_=12
+\catcode`\^=12
+\catcode`\&=12
+\catcode`\~=12
+\catcode`\#=12
+\catcode`\%=12
+\catcode`\$=12
+\catcode`|=0
+}
+
+All commercial rights reserved. May be freely distributed
+and used with the following exceptions:\\
+1. No commercial use without explicit permission.\\
+2. It may not be distributed without this notice.
+
+\def\\{{\tt \char 92}}
+
+\section*{The diagram macros}
+The file diagram includes a number of macros for drawing commutative
+diagrams in special shapes as well as more flexible macros to paste
+together more complicated diagrams.
+
+In general, there are two kinds of macros. The first kind has the
+following form
+{\tt \\shape\-name[shape\_\-parameters]} and is intended to be used in
+the following way:
+{\verbatim
+$$
+\shapename[shape_parameters]
+$$
+|egroup
+
+This will create a shape with the given parameters. It operates by
+building its own picture environment.
+
+The second kind of procedure must be used inside a picture environment
+and allows the user to put a diagram of a given size and shape at a
+given place. The usual way in which this is used is:
+
+{\verbatim
+$$
+\bfig
+\putshape1<optional parameters>(x1,y1)[shape_parameters1]
+|dots
+\putshape(xn,yn)<optional parameters>[shape_parametersn]
+\efig
+$$
+|egroup
+
+Here is an example of the first kind of macro. I will have to explain a
+few details before giving examples of the second. The code
+{\verbatim
+$$
+\square[A`B`C`D;f`g`h`k]
+$$
+|egroup
+produces the diagram
+$$
+\square[A`B`C`D;f`g`h`k]
+$$
+and the code
+{\verbatim
+$$
+\Atriangle[A`B`C;f`g`h]
+$$
+|egroup
+produces the diagram
+$$
+\Atriangle[A`B`C;f`g`h]
+$$
+The reason for the shape name will be explained later.
+
+If an arrow label extends especially high or low, the space
+automatically expands to match. For example,
+{\verbatim
+$$
+\square[A`B`C`D;\sum_{i=1}^{\infty}`g`h`\Psi^A_k]
+$$
+|egroup
+will get the diagram
+$$
+\square[A`B`C`D;\sum_{i=1}^{\infty}`g`h`\Psi^A_k]
+$$
+and so on.
+
+Before going on, I will explain about the parameters. Any shape will
+have one or two parameters for height and/or length as well as one
+parameter for each arrow in the diagram. These are in addition to the
+parameters used in the actual procedures. For example, the procedure
+{\verbatim
+$$
+\square<-1`0`2`-3;1000`700>[A`B`C`D;f`g`h`k]
+$$
+|egroup
+gives the square:
+$$
+\square<-1`0`2`-3;1000`700>[A`B`C`D;f`g`h`k]
+$$
+The meaning is as follows. The first four parameters refer to four
+arrows in linguistic order (top, left, right, bottom). A negative
+number gives a backward arrow, while a zero causes it to be omitted. A
+parameter with an absolute value of 1 is ordinary, while 2 gives an
+arrow with a tail (monomorphism) and 3 a double headed arrow
+(epimorphism). The last two parameters determine the width and height,
+respectively, in units of 0.01 em (an em is the width of an M, the
+widest letter in a font). It should be noted that it is not
+possible to give only some of the optional parameters; either all
+must be given or none is.
+
+Here are the shapes. We have already seen the shape {\tt \\square}.
+There are eight different triangles, all isoceles right triangles in
+different orientations. The names all have the form {\tt
+\\xtriangle}, where x is the letter that most closely resembles the
+actual shape of the triangle.
+
+Here are the names, followed by a sample of each one:
+\begin{list}{}{}
+\item{\tt \\btriangle}\samepage
+$$
+\btriangle[A`B`C;f`g`h]
+$$
+\pagebreak[0]
+\item{\tt \\dtriangle}\samepage
+$$
+\dtriangle[A`B`C;f`g`h]
+$$
+\pagebreak[0]
+\item{\tt \\ptriangle}\samepage
+$$
+\ptriangle[A`B`C;f`g`h]
+$$
+\pagebreak[0]
+\item{\tt \\qtriangle}\samepage
+$$
+\qtriangle[A`B`C;f`g`h]
+$$
+\pagebreak[0]
+\item{\tt \\Atriangle}\samepage
+$$
+\Atriangle[A`B`C;f`g`h]
+$$
+\pagebreak[0]
+\item{\tt \\Vtriangle}\samepage
+$$
+\Vtriangle[A`B`C;f`g`h]
+$$
+\pagebreak[0]
+\item{\tt \\Ctriangle}\samepage
+$$
+\Ctriangle[A`B`C;f`g`h]
+$$
+\pagebreak[0]
+\item{\tt \\Dtriangle}\samepage
+$$
+\Dtriangle[A`B`C;f`g`h]
+$$
+\end{list}
+
+In addition, there are two special diagrams that come up often enough to
+be worth having a special macros for.
+\begin{list}{}{}
+\item{\tt \\Atrianglepair}\samepage
+$$
+\Atrianglepair[A`B`C`D;f`g`h`k`l]
+$$
+\item{\tt \\Vtrianglepair}\samepage
+$$
+\Vtrianglepair[A`B`C`D;f`g`h`k`l]
+$$
+\end{list}
+Finally, there is one special shape that is probably not used by very
+many mathematicians. Still I have it and the user might as well share
+it.
+
+{\verbatim
+\recurse[A`B`R`C;s`f_0`f`t_0`t]
+|egroup
+$$
+\recurse[A`B`R`C;s`f_0`f`t_0`t]
+$$
+
+Notice what happens if the first parameter is empty:
+{\verbatim
+\recurse[`B`R`C;s`f_0`f`t_0`t]
+|egroup
+$$
+\recurse[`B`R`C;s`f_0`f`t_0`t]
+$$
+
+This takes care of the simple procedures. The remaining procedures are
+there as building blocks for more complicated diagrams.
+
+These take the form
+\vskip0pt\noindent
+{\tt \\putshape(xpos,ypos)[shape\_parameters]}
+\vskip0pt\noindent
+where
+shape is one of the 11 shapes (excluding {\tt \\recurse}) described
+above
+and the parms are as described there. The parameters {\tt xpos} and
+{\tt ypos} are the offsets from the lower left corner of the picture
+measured in umits of .01 em in the usual \LaTeX\ fashion.
+
+There is one
+more shape which is simply an arrow with an attached label. This is
+called {\tt \\putmorphism} and it is used with the syntax
+\vskip0pt\noindent
+{\tt
+\\putmorphism(xpos,ypos)(run,rise)[node1`node2`label]\{dist\}\{type\}\{loc\}}
+\vskip0pt\noindent
+Here the parameters {\tt xpos} and
+{\tt ypos} are as above. The slope is {\tt rise/run} where {\tt rise}
+and {\tt run} are two numbers that give the slope in accordance with the
+\LaTeX\ rules. That is rise and run must have no common divisor and
+must not exceed 4 in absolute value. In addition, these procedures are
+defined so that rise must not be positive and if it is zero, then run
+must be positive. In other words, all arrows must go in the linguistic
+direction, downwards or to the right. Arrows can be made to go in the
+reverse direction as explained below.
+
+The next three parameters are the node that appears first (in linguistic
+order), the one that appears second and the arrow label. The next
+paramater is the distance in the sense of \LaTeX\ between the centers of
+the nodes. This means it is the horizontal component of the distance,
+unless that is negative, in which case it is the vertical distance. The
+second parameter is the code for the arrowtype, an integer between -3
+and 3 with the same meaning as explained above. Using negative values
+of this parameter allows one to draw an arrow that goes upwards or left.
+Note, however, that node1 is always the node that is above or to the
+left of node2. The last parameter should have the value a,b,l,r or m.
+The values a and b are used only for horizontal arrows and direct the
+arrow label to be placed above or below the arrow. The values l and r
+are used for all other arrows and direct the label to be left or right
+of the arrow. Finally, a vertical arrow only can be given the parameter
+m, in which case the arrow will be gapped and the label placed in the
+middle of the gap.
+
+In general, the simple macros are designed to be used as indicated
+either in the display
+environment or in one of the others, usually
+{\verbatim
+\begin{equation}\begin{array}{c}
+|dots
+\end{array}\end{equation}|egroup
+
+The \\putshape macros must be used inside a picture environment that is
+normally placed inside a display or similar environment. The
+reference point for the positioning parameters is determined as the
+lower left corner of the smallest rectangle with sides parallel to the
+coordinate axes that includes the center points of all nodes on its
+border. This rectangle will be degenerate in the case of a horizontal
+or vertical morphism. The reference point may either be on or outside
+the actual figure. For example, in the case of the btriangle, it is the
+center of the lower left node, while for a qtriangle it is outside the
+triangle itself being the fourth corner of the enclosing square.
+
+The macros are made so that they fit together well. That is why all
+distances are from node centers to node centers. If a vertex is part of
+two shapes, it is probably best not to repeat it, since it is
+conceivable that round-off errors will cause its two appearances to be
+slightly offset. It can either be omitted or, since the width is used
+to determine the amount to shorten horizontal arrows, replaced by {\tt
+\\phantom} versions. Both methods are illustrated in the example given
+at the end.
+
+A somewhat baroque (but taken from an actual text) example illustrates
+most of these points.
+{\verbatim
+$$
+\bfig
+\putmorphism(0,2100)(0,-1)[``T\eta'T]{1400}1l
+\putmorphism(0,2100)(1,0)[TT`T`\mu]{700}1a
+\putmorphism(0,2100)(1,-1)[`TTT'`TT\eta']{700}1l
+\putmorphism(700,2100)(1,-1)[`TT'`T\eta]{700}1r
+\put(700,1750){\makebox(0,0){1}}
+\putmorphism(700,1420)(1,0)[\phantom{TTT'}`\phantom{TT'}`\mu
+ T']{700}1a
+\putmorphism(700,1380)(1,0)[\phantom{TTT'}`%
+ \phantom{TT'}`T\sigma]{700}1b
+\putsquare<0`1`1`1;700`700>(700,700)[TTT'`TT'`TT'TT'`TT'T';`T\eta'TT'``]
+\putmorphism(700,700)(1,0)[\phantom{TT'TT'}`%
+ \phantom{TT'T'}`TT'\sigma]{700}1a
+\put(300,1400){\makebox(0,0){2}}
+\put(950,1050){\makebox(0,0){3}}
+\putbtriangle<0`1`0;700>(1400,700)[``TT';T\eta'T'`id`]
+\putmorphism(1400,700)(1,0)[\phantom{TT'T'}`%
+ \phantom{TT'}`T\mu']{700}1a
+\put(1600,1050){\makebox(0,0){6}}
+\putsquare<1`1`0`1;700`700>(0,0)[TT'T`\phantom{TT'TT'}`T'T`T'TT';%
+ TT'T\eta'`\sigma T``T'T\eta']
+\putmorphism(700,0)(1,0)[\phantom{T'TT'}`%
+ \phantom{T'T'}`T'\sigma]{700}1b
+\putsquare<0`0`1`1;700`700>(1400,0)[``T'T'`T';``\sigma`\mu']
+\putmorphism(700,700)(0,-1)[``\sigma TT']{700}1m
+\putmorphism(1400,700)(0,-1)[``\sigma T']{700}1m
+\put(300,350){\makebox(0,0){4}}
+\put(1050,350){\makebox(0,0){5}}
+\put(1750,350){\makebox(0,0){7}}
+\efig
+$$
+|egroup
+which produces
+$$
+\bfig
+\putmorphism(0,2100)(0,-1)[``T\eta'T]{1400}1l
+\putmorphism(0,2100)(1,0)[TT`T`\mu]{700}1a
+\putmorphism(0,2100)(1,-1)[`TTT'`TT\eta']{700}1l
+\putmorphism(700,2100)(1,-1)[`TT'`T\eta]{700}1r
+\put(700,1750){\makebox(0,0){1}}
+\putmorphism(700,1420)(1,0)[\phantom{TTT'}`\phantom{TT'}`\mu
+ T']{700}1a
+\putmorphism(700,1380)(1,0)[\phantom{TTT'}`%
+ \phantom{TT'}`T\sigma]{700}1b
+\putsquare<0`1`1`1;700`700>(700,700)[TTT'`TT'`TT'TT'`TT'T';`T\eta'TT'``]
+\putmorphism(700,700)(1,0)[\phantom{TT'TT'}`%
+ \phantom{TT'T'}`TT'\sigma]{700}1a
+\put(300,1400){\makebox(0,0){2}}
+\put(950,1050){\makebox(0,0){3}}
+\putbtriangle<0`1`0;700>(1400,700)[``TT';T\eta'T'`id`]
+\putmorphism(1400,700)(1,0)[\phantom{TT'T'}`%
+ \phantom{TT'}`T\mu']{700}1a
+\put(1600,1050){\makebox(0,0){6}}
+\putsquare<1`1`0`1;700`700>(0,0)[TT'T`\phantom{TT'TT'}`T'T`T'TT';%
+ TT'T\eta'`\sigma T``T'T\eta']
+\putmorphism(700,0)(1,0)[\phantom{T'TT'}`%
+ \phantom{T'T'}`T'\sigma]{700}1b
+\putsquare<0`0`1`1;700`700>(1400,0)[``T'T'`T';``\sigma`\mu']
+\putmorphism(700,700)(0,-1)[``\sigma TT']{700}1m
+\putmorphism(1400,700)(0,-1)[``\sigma T']{700}1m
+\put(300,350){\makebox(0,0){4}}
+\put(1050,350){\makebox(0,0){5}}
+\put(1750,350){\makebox(0,0){7}}
+\efig
+$$
+
+Here is a page of samples of the results from the various
+{\tt\\putshapes}. The code
+{\verbatim
+$$
+\bfig
+\putsquare(0,0)[A`B`C`D;f`g`h`k]
+\putbtriangle(0,1500)[A`B`C;f`g`h]
+\putdtriangle(2200,1500)[A`B`C;f`g`h]
+\putptriangle(0,3000)[A`B`C;f`g`h]
+\putqtriangle(1000,500)[A`B`C;f`g`h]
+\putCtriangle(1500,750)[A`B`C;f`g`h]
+\putDtriangle(700,1000)[A`B`C;f`g`h]
+\putAtriangle(2000,2200)[A`B`C;f`g`h]
+\putAtrianglepair(0,2500)[A`B`C`D;f`g`h`k`l]
+\putVtriangle(2000,3000)[A`B`C;f`g`h]
+\putVtrianglepair(1000,2500)[A`B`C`D;f`g`h`k`l]
+\efig
+$$
+|egroup
+produces the diagram:
+$$
+\bfig
+\putsquare(0,0)[A`B`C`D;f`g`h`k]
+\putbtriangle(0,1500)[A`B`C;f`g`h]
+\putdtriangle(2200,1500)[A`B`C;f`g`h]
+\putptriangle(0,3000)[A`B`C;f`g`h]
+\putqtriangle(1000,500)[A`B`C;f`g`h]
+\putCtriangle(1500,750)[A`B`C;f`g`h]
+\putDtriangle(700,1000)[A`B`C;f`g`h]
+\putAtriangle(2000,2200)[A`B`C;f`g`h]
+\putAtrianglepair(0,2500)[A`B`C`D;f`g`h`k`l]
+\putVtriangle(2000,3000)[A`B`C;f`g`h]
+\putVtrianglepair(1000,2500)[A`B`C`D;f`g`h`k`l]
+\efig
+$$
+
+Added: For horizontal and vertical lines only, arrow parameters of
+$\pm4$, $\pm5$ and $\pm6$ will give dashed lines.
+
+Here is a double cube:
+{\verbatim
+$$
+\bfig
+\putsquare(0,750)[A`B`C`D;```]
+\putsquare(0,250)[\phantom{C}`\phantom{D}`E`F;```]
+\putsquare(250,500)[A'`B'`C'`D';```]
+\putsquare(250,0)[\phantom{C'}`\phantom{D'}`E'`F';```]
+\putmorphism(0,1250)(1,-1)[```]{250}1a
+\putmorphism(500,1250)(1,-1)[```]{250}1a
+\putmorphism(0,750)(1,-1)[```]{250}1a
+\putmorphism(500,750)(1,-1)[```]{250}1a
+\putmorphism(0,250)(1,-1)[```]{250}1a
+\putmorphism(500,250)(1,-1)[```]{250}1a
+\efig
+$$
+|egroup
+$$
+\bfig
+\putsquare(0,750)[A`B`C`D;```]
+\putsquare(0,250)[\phantom{C}`\phantom{D}`E`F;```]
+\putsquare(250,500)[A'`B'`C'`D';```]
+\putsquare(250,0)[\phantom{C'}`\phantom{D'}`E'`F';```]
+\putmorphism(0,1250)(1,-1)[```]{250}1a
+\putmorphism(500,1250)(1,-1)[```]{250}1a
+\putmorphism(0,750)(1,-1)[```]{250}1a
+\putmorphism(500,750)(1,-1)[```]{250}1a
+\putmorphism(0,250)(1,-1)[```]{250}1a
+\putmorphism(500,250)(1,-1)[```]{250}1a
+\efig
+$$
+
+
+
+\end{document}
diff --git a/obsolete/macros/generic/diagrams/barr/diagram.tex b/obsolete/macros/generic/diagrams/barr/diagram.tex
new file mode 100644
index 0000000000..2a322759d3
--- /dev/null
+++ b/obsolete/macros/generic/diagrams/barr/diagram.tex
@@ -0,0 +1,1048 @@
+% This should appear in a file named diagram.tex
+% Copyright 1988,1989 Michael Barr
+% Department of Mathematics and Statistics
+% McGill University
+% 805 Sherbrooke St., W
+% Montreal, Quebec, Canada
+% H3P 1S4
+%
+% barr@triples.math.mcgill.ca
+%
+% All commercial rights reserved. May be freely distributed
+% and used with the following exceptions:
+% 1. No commercial use without explicit permission.
+% 2. It may not be used by any employee of a telephone
+% company.
+% 3. It may not be distributed without this notice.
+%
+% Last revised 91-05-04
+
+% Ascii character test:
+% 32: 33: ! 34: " 35: # 36: $ 37: % 38: & 39: '
+% 40: ( 41: ) 42: * 43: + 44: , 45: - 46: . 47: /
+% 48: 0 49: 1 50: 2 51: 3 52: 4 53: 5 54: 6 55: 7
+% 56: 8 57: 9 58: : 59: ; 60: < 61: = 62: > 63: ?
+% 64: @ 65: A 66: B 67: C 68: D 69: E 70: F 71: G
+% 72: H 73: I 74: J 75: K 76: L 77: M 78: N 79: O
+% 80: P 81: Q 82: R 83: S 84: T 85: U 86: V 87: W
+% 88: X 89: Y 90: Z 91: [ 92: \ 93: ] 94: ^ 95: _
+% 96: ` 97: a 98: b 99: c 100: d 101: e 102: f 103: g
+% 104: h 105: i 106: j 107: k 108: l 109: m 110: n 111: o
+% 112: p 113: q 114: r 115: s 116: t 117: u 118: v 119: w
+% 120: x 121: y 122: z 123: { 124: | 125: } 126: ~
+
+
+\makeatletter
+
+\def\diagram{\m@th\leftwidth=\z@ \rightwidth=\z@ \topheight=\z@
+\botheight=\z@ \setbox\@picbox\hbox\bgroup}
+
+\def\enddiagram{\egroup\wd\@picbox\rightwidth\unitlength
+\ht\@picbox\topheight\unitlength \dp\@picbox\botheight\unitlength
+\hskip\leftwidth\unitlength\box\@picbox}
+
+\def\bfig{\begin{diagram}}
+\def\efig{\end{diagram}}
+\newcount\wideness \newcount\leftwidth \newcount\rightwidth
+\newcount\highness \newcount\topheight \newcount\botheight
+
+\def\ratchet#1#2{\ifnum#1<#2 \global #1=#2 \fi}
+
+\def\putbox(#1,#2)#3{%
+\horsize{\wideness}{#3} \divide\wideness by 2
+{\advance\wideness by #1 \ratchet{\rightwidth}{\wideness}}
+{\advance\wideness by -#1 \ratchet{\leftwidth}{\wideness}}
+\vertsize{\highness}{#3} \divide\highness by 2
+{\advance\highness by #2 \ratchet{\topheight}{\highness}}
+{\advance\highness by -#2 \ratchet{\botheight}{\highness}}
+\put(#1,#2){\makebox(0,0){$#3$}}}
+
+\def\putlbox(#1,#2)#3{%
+\horsize{\wideness}{#3}
+{\advance\wideness by #1 \ratchet{\rightwidth}{\wideness}}
+{\ratchet{\leftwidth}{-#1}}
+\vertsize{\highness}{#3} \divide\highness by 2
+{\advance\highness by #2 \ratchet{\topheight}{\highness}}
+{\advance\highness by -#2 \ratchet{\botheight}{\highness}}
+\put(#1,#2){\makebox(0,0)[l]{$#3$}}}
+
+\def\putrbox(#1,#2)#3{%
+\horsize{\wideness}{#3}
+{\ratchet{\rightwidth}{#1}}
+{\advance\wideness by -#1 \ratchet{\leftwidth}{\wideness}}
+\vertsize{\highness}{#3} \divide\highness by 2
+{\advance\highness by #2 \ratchet{\topheight}{\highness}}
+{\advance\highness by -#2 \ratchet{\botheight}{\highness}}
+\put(#1,#2){\makebox(0,0)[r]{$#3$}}}
+
+
+\def\adjust[#1]{} % For compatibility
+
+\newcount \coefa
+\newcount \coefb
+\newcount \coefc
+\newcount\tempcounta
+\newcount\tempcountb
+\newcount\tempcountc
+\newcount\tempcountd
+\newcount\xext
+\newcount\yext
+\newcount\xoff
+\newcount\yoff
+\newcount\gap%
+\newcount\arrowtypea
+\newcount\arrowtypeb
+\newcount\arrowtypec
+\newcount\arrowtyped
+\newcount\arrowtypee
+\newcount\height
+\newcount\width
+\newcount\xpos
+\newcount\ypos
+\newcount\run
+\newcount\rise
+\newcount\arrowlength
+\newcount\halflength
+\newcount\arrowtype
+\newdimen\tempdimen
+\newdimen\xlen
+\newdimen\ylen
+\newsavebox{\tempboxa}%
+\newsavebox{\tempboxb}%
+\newsavebox{\tempboxc}%
+
+\newdimen\w@dth
+
+\def\setw@dth#1#2{\setbox\z@\hbox{\m@th$#1$}\w@dth=\wd\z@
+\setbox\@ne\hbox{\m@th$#2$}\ifnum\w@dth<\wd\@ne \w@dth=\wd\@ne \fi
+\advance\w@dth by 1.2em}
+
+%The definitions below look more elaborate than they need to be.
+%The reason is that an empty asscript will still cause extra vertical
+%spacing and the only way to avoid ugly extra space seems to be using
+%some such method as this.
+
+\def\t@^#1_#2{\allowbreak\def\n@one{#1}\def\n@two{#2}\mathrel
+{\setw@dth{#1}{#2}
+\mathop{\hbox to \w@dth{\rightarrowfill}}\limits
+\ifx\n@one\empty\else ^{\box\z@}\fi
+\ifx\n@two\empty\else _{\box\@ne}\fi}}
+%\def\t@^#1_#2{\mathrel{\mathop{\hbox{\rightarrowfill}}\limits
+%^{\mkern12mu#1\mkern12mu}_{\mkern12mu#2\mkern12mu}}}
+\def\t@@^#1{\@ifnextchar_{\t@^{#1}}{\t@^{#1}_{}}}
+\def\to{\@ifnextchar^{\t@@}{\t@@^{}}}
+
+\def\t@left^#1_#2{\def\n@one{#1}\def\n@two{#2}\mathrel{\setw@dth{#1}{#2}
+\mathop{\hbox to \w@dth{\leftarrowfill}}\limits
+\ifx\n@one\empty\else ^{\box\z@}\fi
+\ifx\n@two\empty\else _{\box\@ne}\fi}}
+%\def\t@left^#1_#2{\mathrel{\mathop{\hbox{\leftarrowfill}}\limits
+%^{\mkern12mu#1\mkern12mu}_{\mkern12mu#2\mkern12mu}}}
+\def\t@@left^#1{\@ifnextchar_{\t@left^{#1}}{\t@left^{#1}_{}}}
+\def\toleft{\@ifnextchar^{\t@@left}{\t@@left^{}}}
+
+\def\two@^#1_#2{\allowbreak
+\def\n@one{#1}\def\n@two{#2}\mathrel{\setw@dth{#1}{#2}
+\mathop{\vcenter{\lineskip\z@\baselineskip\z@
+ \hbox to \w@dth{\rightarrowfill}%
+ \hbox to \w@dth{\rightarrowfill}}%
+ }\limits
+\ifx\n@one\empty\else ^{\box\z@}\fi
+\ifx\n@two\empty\else _{\box\@ne}\fi}}
+\def\tw@@^#1{\@ifnextchar _{\two@^{#1}}{\two@^{#1}_{}}}
+\def\two{\@ifnextchar ^{\tw@@}{\tw@@^{}}}
+
+\def\tofr@^#1_#2{\def\n@one{#1}\def\n@two{#2}\mathrel{\setw@dth{#1}{#2}
+\mathop{\vcenter{\hbox to \w@dth{\rightarrowfill}\kern-1.7ex
+ \hbox to \w@dth{\leftarrowfill}}%
+ }\limits
+\ifx\n@one\empty\else ^{\box\z@}\fi
+\ifx\n@two\empty\else _{\box\@ne}\fi}}
+\def\t@fr@^#1{\@ifnextchar_ {\tofr@^{#1}}{\tofr@^{#1}_{}}}
+\def\tofro{\@ifnextchar^ {\t@fr@}{\t@fr@^{}}}
+
+\def\epi{\mathop{\mathchar"221\mkern -12mu\mathchar"221}\limits}
+\def\leftepi{\mathop{\mathchar"220\mkern -12mu\mathchar"220}\limits}
+\def\mon{\mathop{\m@th\hbox to
+ 14.6\P@{\lasyb\char'51\hskip-2.1\P@$\arrext$\hss
+$\mathord\rightarrow$}}\limits} % width of \epi
+\def\leftmono{\mathrel{\m@th\hbox to
+14.6\P@{$\mathord\leftarrow$\hss$\arrext$\hskip-2.1\P@\lasyb\char'50%
+}}\limits} % width of \epi
+\mathchardef\arrext="0200 % amr minus for arrow extension (see \into)
+
+
+\setlength{\unitlength}{.01em}%
+\def\settypes(#1,#2,#3){\arrowtypea#1 \arrowtypeb#2 \arrowtypec#3}
+\def\settoheight#1#2{\setbox\@tempboxa\hbox{#2}#1\ht\@tempboxa\relax}%
+\def\settodepth#1#2{\setbox\@tempboxa\hbox{#2}#1\dp\@tempboxa\relax}%
+\def\settokens`#1`#2`#3`#4`{%
+ \def\tokena{#1}\def\tokenb{#2}\def\tokenc{#3}\def\tokend{#4}}
+\def\setsqparms[#1`#2`#3`#4;#5`#6]{%
+\arrowtypea #1
+\arrowtypeb #2
+\arrowtypec #3
+\arrowtyped #4
+\width #5
+\height #6
+}
+\def\setpos(#1,#2){\xpos=#1 \ypos#2}
+
+
+
+\def\settriparms[#1`#2`#3;#4]{\settripairparms[#1`#2`#3`1`1;#4]}%
+
+\def\settripairparms[#1`#2`#3`#4`#5;#6]{%
+\arrowtypea #1
+\arrowtypeb #2
+\arrowtypec #3
+\arrowtyped #4
+\arrowtypee #5
+\width #6
+\height #6
+}
+
+\def\resetparms{\settripairparms[1`1`1`1`1;500]\width 500}%default values%
+
+\resetparms
+
+\def\mvector(#1,#2)#3{%%
+\put(0,0){\vector(#1,#2){#3}}%
+\put(0,0){\vector(#1,#2){26}}%
+}
+\def\evector(#1,#2)#3{{%%
+\arrowlength #3
+\put(0,0){\vector(#1,#2){\arrowlength}}%
+\advance \arrowlength by-30
+\put(0,0){\vector(#1,#2){\arrowlength}}%
+}}
+
+\def\horsize#1#2{%
+\settowidth{\tempdimen}{$#2$}%
+#1=\tempdimen
+\divide #1 by\unitlength
+}
+
+\def\vertsize#1#2{%
+\settoheight{\tempdimen}{$#2$}%
+#1=\tempdimen
+\settodepth{\tempdimen}{$#2$}%
+\advance #1 by\tempdimen
+\divide #1 by\unitlength
+}
+
+\def\putvector(#1,#2)(#3,#4)#5#6{{%
+\ifnum3<\arrowtype
+\putdashvector(#1,#2)(#3,#4)#5\arrowtype
+\else
+\ifnum\arrowtype<-3
+\putdashvector(#1,#2)(#3,#4)#5\arrowtype
+\else
+\xpos=#1
+\ypos=#2
+\run=#3
+\rise=#4
+\arrowlength=#5
+\ifnum \arrowtype<0
+ \ifnum \run=0
+ \advance \ypos by-\arrowlength
+ \else
+ \tempcounta \arrowlength
+ \multiply \tempcounta by\rise
+ \divide \tempcounta by\run
+ \ifnum\run>0
+ \advance \xpos by\arrowlength
+ \advance \ypos by\tempcounta
+ \else
+ \advance \xpos by-\arrowlength
+ \advance \ypos by-\tempcounta
+ \fi
+ \fi
+ \multiply \arrowtype by-1
+ \multiply \rise by-1
+ \multiply \run by-1
+\fi
+\ifcase \arrowtype
+\or \put(\xpos,\ypos){\vector(\run,\rise){\arrowlength}}%
+\or \put(\xpos,\ypos){\mvector(\run,\rise)\arrowlength}%
+\or \put(\xpos,\ypos){\evector(\run,\rise){\arrowlength}}%
+\fi\fi\fi
+}}
+
+\def\putsplitvector(#1,#2)#3#4{%%
+\xpos #1
+\ypos #2
+\arrowtype #4
+\halflength #3
+\arrowlength #3
+\gap 140
+\advance \halflength by-\gap
+\divide \halflength by2
+\ifnum\arrowtype>0
+ \ifcase \arrowtype
+ \or \put(\xpos,\ypos){\line(0,-1){\halflength}}%
+ \advance\ypos by-\halflength
+ \advance\ypos by-\gap
+ \put(\xpos,\ypos){\vector(0,-1){\halflength}}%
+ \or \put(\xpos,\ypos){\line(0,-1)\halflength}%
+ \put(\xpos,\ypos){\vector(0,-1)3}%
+ \advance\ypos by-\halflength
+ \advance\ypos by-\gap
+ \put(\xpos,\ypos){\vector(0,-1){\halflength}}%
+ \or \put(\xpos,\ypos){\line(0,-1)\halflength}%
+ \advance\ypos by-\halflength
+ \advance\ypos by-\gap
+ \put(\xpos,\ypos){\evector(0,-1){\halflength}}%
+ \fi
+\else \arrowtype=-\arrowtype
+ \ifcase\arrowtype
+ \or \advance \ypos by-\arrowlength
+ \put(\xpos,\ypos){\line(0,1){\halflength}}%
+ \advance\ypos by\halflength
+ \advance\ypos by\gap
+ \put(\xpos,\ypos){\vector(0,1){\halflength}}%
+ \or \advance \ypos by-\arrowlength
+ \put(\xpos,\ypos){\line(0,1)\halflength}%
+ \put(\xpos,\ypos){\vector(0,1)3}%
+ \advance\ypos by\halflength
+ \advance\ypos by\gap
+ \put(\xpos,\ypos){\vector(0,1){\halflength}}%
+ \or \advance \ypos by-\arrowlength
+ \put(\xpos,\ypos){\line(0,1)\halflength}%
+ \advance\ypos by\halflength
+ \advance\ypos by\gap
+ \put(\xpos,\ypos){\evector(0,1){\halflength}}%
+ \fi
+\fi
+}
+
+\def\putmorphism(#1)(#2,#3)[#4`#5`#6]#7#8#9{{%
+\run #2
+\rise #3
+\ifnum\rise=0
+ \puthmorphism(#1)[#4`#5`#6]{#7}{#8}#9%
+\else\ifnum\run=0
+ \putvmorphism(#1)[#4`#5`#6]{#7}{#8}#9%
+\else
+\setpos(#1)%
+\arrowlength #7
+\arrowtype #8
+\ifnum\run=0
+\else\ifnum\rise=0
+\else
+\ifnum\run>0
+ \coefa=1
+\else
+ \coefa=-1
+\fi
+\ifnum\arrowtype>0
+ \coefb=0
+ \coefc=-1
+\else
+ \coefb=\coefa
+ \coefc=1
+ \arrowtype=-\arrowtype
+\fi
+\width=2
+\multiply \width by\run
+\divide \width by\rise
+\ifnum \width<0 \width=-\width\fi
+\advance\width by60
+\if l#9 \width=-\width\fi
+\putbox(\xpos,\ypos){#4}% %node 1
+{\multiply \coefa by\arrowlength% %node 2
+\advance\xpos by\coefa
+\multiply \coefa by\rise
+\divide \coefa by\run
+\advance \ypos by\coefa
+\putbox(\xpos,\ypos){#5} }%
+{\multiply \coefa by\arrowlength% %label
+\divide \coefa by2
+\advance \xpos by\coefa
+\advance \xpos by\width
+\multiply \coefa by\rise
+\divide \coefa by\run
+\advance \ypos by\coefa
+\if l#9%
+ \putrbox(\xpos,\ypos){#6}%
+\else\if r#9%
+ \putlbox(\xpos,\ypos){#6}%
+\fi\fi }%
+{\multiply \rise by-\coefc% %arrow
+\multiply \run by-\coefc
+\multiply \coefb by\arrowlength
+\advance \xpos by\coefb
+\multiply \coefb by\rise
+\divide \coefb by\run
+\advance \ypos by\coefb
+\multiply \coefc by70
+\advance \ypos by\coefc
+\multiply \coefc by\run
+\divide \coefc by\rise
+\advance \xpos by\coefc
+\multiply \coefa by140
+\multiply \coefa by\run
+\divide \coefa by\rise
+\advance \arrowlength by\coefa
+\ifcase\arrowtype
+\or \put(\xpos,\ypos){\vector(\run,\rise){\arrowlength}}%
+\or \put(\xpos,\ypos){\mvector(\run,\rise){\arrowlength}}%
+\or \put(\xpos,\ypos){\evector(\run,\rise){\arrowlength}}%
+\fi}\fi\fi\fi\fi}}
+
+
+\newcount\numbdashes \newcount\lengthdash \newcount\increment
+
+\def\howmanydashes{% Actually returns both number and length
+\numbdashes=\arrowlength \lengthdash=40
+\divide\numbdashes by \lengthdash
+\lengthdash=\arrowlength
+\divide\lengthdash by \numbdashes
+%This futzing around is to minimize round-off error.
+\increment=\lengthdash
+\multiply\lengthdash by 3
+\divide\lengthdash by 5
+}
+
+\def\putdashvector(#1)(#2,#3)#4#5{%
+\ifnum#3=0 \putdashhvector(#1){#4}#5
+\else
+\ifnum#2=0
+\putdashvvector(#1){#4}#5\fi\fi}
+
+\def\putdashhvector(#1,#2)#3#4{{%
+\arrowlength=#3 \howmanydashes
+\multiput(#1,#2)(\increment,0){\numbdashes}%
+{\vrule height .4pt width \lengthdash\unitlength}
+\arrowtype=#4 \xpos=#1
+\ifnum\arrowtype<0 \advance\arrowtype by 7 \fi
+\ifcase\arrowtype
+\or \advance\xpos by 10
+ \put(\xpos,#2){\vector(-1,0){\lengthdash}}
+ \advance\xpos by 40
+ \put(\xpos,#2){\vector(-1,0){\lengthdash}}
+\or \advance \xpos by 10
+ \put(\xpos,#2){\vector(-1,0){\lengthdash}}
+ \advance\xpos by \arrowlength
+ \advance\xpos by -50
+ \put(\xpos,#2){\vector(-1,0){\lengthdash}}
+\or \advance\xpos by 10
+ \put(\xpos,#2){\vector(-1,0){\lengthdash}}
+\or \advance\xpos by \arrowlength
+ \advance\xpos by -\lengthdash
+ \put(\xpos,#2){\vector(1,0){\lengthdash}}
+\or {\advance\xpos by 10
+ \put(\xpos,#2){\vector(1,0){\lengthdash}}}
+ \advance\xpos by \arrowlength
+ \advance\xpos by -\lengthdash
+ \put(\xpos,#2){\vector(1,0){\lengthdash}}
+\or \advance\xpos by \arrowlength
+ \advance\xpos by -\lengthdash
+ \put(\xpos,#2){\vector(1,0){\lengthdash}}
+ \advance\xpos by -40
+ \put(\xpos,#2){\vector(1,0){\lengthdash}}
+ \fi
+}}
+
+\def\putdashvvector(#1,#2)#3#4{{%
+\arrowlength=#3 \howmanydashes
+\ypos=#2 \advance\ypos by -\arrowlength
+\multiput(#1,#2)(0,\increment){\numbdashes}%
+ {\vrule width .4pt height \lengthdash\unitlength}
+\arrowtype=#4 \ypos=#2
+\ifnum\arrowtype<0 \advance\arrowtype by 7 \fi
+\ifcase\arrowtype
+\or \advance\ypos by \arrowlength \advance\ypos by -40
+ \put(#1,\ypos){\vector(0,1){\lengthdash}}
+ \advance\ypos by -40
+ \put(#1,\ypos){\vector(0,1){\lengthdash}}
+\or \advance\ypos by 10
+ \put(#1,\ypos){\vector(0,1){\lengthdash}}
+ \advance\ypos by \arrowlength \advance\ypos by -40
+ \put(#1,\ypos){\vector(0,1){\lengthdash}}
+\or \advance\ypos by \arrowlength \advance\ypos by -40
+ \put(#1,\ypos){\vector(0,1){\lengthdash}}
+\or \advance\ypos by 10
+ \put(#1,\ypos){\vector(0,-1){\lengthdash}}
+\or \advance\ypos by 10
+ \put(#1,\ypos){\vector(0,-1){\lengthdash}}
+ \advance\ypos by \arrowlength \advance\ypos by -40
+ \put(#1,\ypos){\vector(0,-1){\lengthdash}}
+\or \advance\ypos by 10
+ \put(#1,\ypos){\vector(0,-1){\lengthdash}}
+ \advance\ypos by 40
+ \put(#1,\ypos){\vector(0,-1){\lengthdash}}
+\fi
+}}
+
+\def\puthmorphism(#1,#2)[#3`#4`#5]#6#7#8{{%
+\xpos #1
+\ypos #2
+\width #6
+\arrowlength #6
+\arrowtype=#7
+\putbox(\xpos,\ypos){#3\vphantom{#4}}%
+{\advance \xpos by\arrowlength
+\putbox(\xpos,\ypos){\vphantom{#3}#4}}%
+\horsize{\tempcounta}{#3}%
+\horsize{\tempcountb}{#4}%
+\divide \tempcounta by2
+\divide \tempcountb by2
+\advance \tempcounta by30
+\advance \tempcountb by30
+\advance \xpos by\tempcounta
+\advance \arrowlength by-\tempcounta
+\advance \arrowlength by-\tempcountb
+\putvector(\xpos,\ypos)(1,0)\arrowlength\arrowtype
+\divide \arrowlength by2
+\advance \xpos by\arrowlength
+\vertsize{\tempcounta}{#5}%
+\divide\tempcounta by2
+\advance \tempcounta by20
+\if a#8 %
+ \advance \ypos by\tempcounta
+ \putbox(\xpos,\ypos){#5}%
+\else
+ \advance \ypos by-\tempcounta
+ \putbox(\xpos,\ypos){#5}%
+\fi}}
+
+\def\putvmorphism(#1,#2)[#3`#4`#5]#6#7#8{{%
+\xpos #1
+\ypos #2
+\arrowlength #6
+\arrowtype #7
+\settowidth{\xlen}{$#5$}%
+\putbox(\xpos,\ypos){#3}%
+{\advance \ypos by-\arrowlength
+\putbox(\xpos,\ypos){#4}}%
+{\advance\arrowlength by-140
+\advance \ypos by-70
+\ifdim\xlen>0pt
+ \if m#8%
+ \putsplitvector(\xpos,\ypos)\arrowlength\arrowtype
+ \else
+ \putvector(\xpos,\ypos)(0,-1)\arrowlength\arrowtype
+ \fi
+\else
+ \putvector(\xpos,\ypos)(0,-1)\arrowlength\arrowtype
+\fi}%
+\ifdim\xlen>0pt
+ \divide \arrowlength by2
+ \advance\ypos by-\arrowlength
+ \if l#8%
+ \advance \xpos by-40
+ \putrbox(\xpos,\ypos){#5}%
+ \else\if r#8%
+ \advance \xpos by40
+ \putlbox(\xpos,\ypos){#5}%
+ \else
+ \putbox(\xpos,\ypos){#5}%
+ \fi\fi
+\fi
+}}
+
+\def\putsquarep<#1>(#2)[#3;#4`#5`#6`#7]{{%
+\setsqparms[#1]%
+\setpos(#2)%
+\settokens`#3`%
+\puthmorphism(\xpos,\ypos)[\tokenc`\tokend`{#7}]{\width}{\arrowtyped}b%
+\advance\ypos by \height
+\puthmorphism(\xpos,\ypos)[\tokena`\tokenb`{#4}]{\width}{\arrowtypea}a%
+\putvmorphism(\xpos,\ypos)[``{#5}]{\height}{\arrowtypeb}l%
+\advance\xpos by \width
+\putvmorphism(\xpos,\ypos)[``{#6}]{\height}{\arrowtypec}r%
+}}
+
+\def\putsquare{\@ifnextchar <{\putsquarep}{\putsquarep%
+ <\arrowtypea`\arrowtypeb`\arrowtypec`\arrowtyped;\width`\height>}}
+\def\square{\@ifnextchar< {\squarep}{\squarep
+ <\arrowtypea`\arrowtypeb`\arrowtypec`\arrowtyped;\width`\height>}}
+ % #6
+\def\squarep<#1>[#2`#3`#4`#5;#6`#7`#8`#9]{{% % #2------>#3
+\setsqparms[#1]% % | |
+\diagram% % | |
+\putsquarep<\arrowtypea`\arrowtypeb`\arrowtypec`% % #7| |#8
+\arrowtyped;\width`\height>% % | |
+(0,0)[#2`#3`#4`{#5};#6`#7`#8`{#9}]% % | |
+\enddiagram% % v v
+}} % #4------>#5
+ % #9
+\def\putptrianglep<#1>(#2,#3)[#4`#5`#6;#7`#8`#9]{{%
+\settriparms[#1]%
+\xpos=#2 \ypos=#3
+\advance\ypos by \height
+\puthmorphism(\xpos,\ypos)[#4`#5`{#7}]{\height}{\arrowtypea}a%
+\putvmorphism(\xpos,\ypos)[`#6`{#8}]{\height}{\arrowtypeb}l%
+\advance\xpos by\height
+\putmorphism(\xpos,\ypos)(-1,-1)[``{#9}]{\height}{\arrowtypec}r%
+}}
+
+\def\putptriangle{\@ifnextchar <{\putptrianglep}{\putptrianglep
+ <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
+\def\ptriangle{\@ifnextchar <{\ptrianglep}{\ptrianglep
+ <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
+ % #5
+\def\ptrianglep<#1>[#2`#3`#4;#5`#6`#7]{{%% % #2----->#3
+\settriparms[#1]% % | /
+\diagram% % | /
+\putptrianglep<\arrowtypea`\arrowtypeb`% % #6| /#7
+\arrowtypec;\height>% % | /
+(0,0)[#2`#3`#4;#5`#6`{#7}]% % | /
+\enddiagram%% % v v
+}} % #4
+
+\def\putqtrianglep<#1>(#2,#3)[#4`#5`#6;#7`#8`#9]{{%
+\settriparms[#1]%
+\xpos=#2 \ypos=#3
+\advance\ypos by\height
+\puthmorphism(\xpos,\ypos)[#4`#5`{#7}]{\height}{\arrowtypea}a%
+\putmorphism(\xpos,\ypos)(1,-1)[``{#8}]{\height}{\arrowtypeb}l%
+\advance\xpos by\height
+\putvmorphism(\xpos,\ypos)[`#6`{#9}]{\height}{\arrowtypec}r%
+}}
+
+\def\putqtriangle{\@ifnextchar <{\putqtrianglep}{\putqtrianglep
+ <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
+\def\qtriangle{\@ifnextchar <{\qtrianglep}{\qtrianglep
+ <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
+ % #5
+\def\qtrianglep<#1>[#2`#3`#4;#5`#6`#7]{{%% % #2----->#3
+\settriparms[#1]% % \ |
+\width=\height % \ |
+\diagram% % #6\ |#7
+\putqtrianglep<\arrowtypea`\arrowtypeb`% % \ |
+\arrowtypec;\height>% % \ |
+(0,0)[#2`#3`#4;#5`#6`{#7}]% % v v
+\enddiagram%% % #4
+}}
+
+\def\putdtrianglep<#1>(#2,#3)[#4`#5`#6;#7`#8`#9]{{%
+\settriparms[#1]%
+\xpos=#2 \ypos=#3
+\puthmorphism(\xpos,\ypos)[#5`#6`{#9}]{\height}{\arrowtypec}b%
+\advance\xpos by \height \advance\ypos by\height
+\putmorphism(\xpos,\ypos)(-1,-1)[``{#7}]{\height}{\arrowtypea}l%
+\putvmorphism(\xpos,\ypos)[#4``{#8}]{\height}{\arrowtypeb}r%
+}}
+
+\def\putdtriangle{\@ifnextchar <{\putdtrianglep}{\putdtrianglep
+ <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
+\def\dtriangle{\@ifnextchar <{\dtrianglep}{\dtrianglep
+ <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
+ % #2
+\def\dtrianglep<#1>[#2`#3`#4;#5`#6`#7]{{%% % / |
+\settriparms[#1]% % / |
+\width=\height % #5/ |#6
+\diagram% % / |
+\putdtrianglep<\arrowtypea`\arrowtypeb`% % / |
+\arrowtypec;\height>% % v v
+(0,0)[#2`#3`#4;#5`#6`{#7}]% % #3----->#4
+\enddiagram%% % #7
+}}
+
+\def\putbtrianglep<#1>(#2,#3)[#4`#5`#6;#7`#8`#9]{{%
+\settriparms[#1]%
+\xpos=#2 \ypos=#3
+\puthmorphism(\xpos,\ypos)[#5`#6`{#9}]{\height}{\arrowtypec}b%
+\advance\ypos by\height
+\putmorphism(\xpos,\ypos)(1,-1)[``{#8}]{\height}{\arrowtypeb}r%
+\putvmorphism(\xpos,\ypos)[#4``{#7}]{\height}{\arrowtypea}l%
+}}
+
+\def\putbtriangle{\@ifnextchar <{\putbtrianglep}{\putbtrianglep
+ <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
+\def\btriangle{\@ifnextchar <{\btrianglep}{\btrianglep
+ <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
+ % #2
+\def\btrianglep<#1>[#2`#3`#4;#5`#6`#7]{{%% % | \
+\settriparms[#1]% % | \
+\width=\height % #5| \#6
+\diagram% % | \
+\putbtrianglep<\arrowtypea`\arrowtypeb`% % | \
+\arrowtypec;\height>% % v v
+(0,0)[#2`#3`#4;#5`#6`{#7}]% % #3----->#4
+\enddiagram%% % #7
+}}
+
+\def\putAtrianglep<#1>(#2,#3)[#4`#5`#6;#7`#8`#9]{{%
+\settriparms[#1]%
+\xpos=#2 \ypos=#3
+{\multiply \height by2
+\puthmorphism(\xpos,\ypos)[#5`#6`{#9}]{\height}{\arrowtypec}b}%
+\advance\xpos by\height \advance\ypos by\height
+\putmorphism(\xpos,\ypos)(-1,-1)[#4``{#7}]{\height}{\arrowtypea}l%
+\putmorphism(\xpos,\ypos)(1,-1)[``{#8}]{\height}{\arrowtypeb}r%
+}}
+
+\def\putAtriangle{\@ifnextchar <{\putAtrianglep}{\putAtrianglep
+ <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
+\def\Atriangle{\@ifnextchar <{\Atrianglep}{\Atrianglep
+ <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
+ % #2
+\def\Atrianglep<#1>[#2`#3`#4;#5`#6`#7]{{%% % / \
+\settriparms[#1]% % / \
+\width=\height % #5/ \#6
+\diagram% % / \
+\putAtrianglep<\arrowtypea`\arrowtypeb`% % / \
+\arrowtypec;\height>% % v v
+(0,0)[#2`#3`#4;#5`#6`{#7}]% % #3------------>#4
+\enddiagram%% % #7
+}}
+
+\def\putAtrianglepairp<#1>(#2)[#3;#4`#5`#6`#7`#8]{{%
+\settripairparms[#1]%
+\setpos(#2)%
+\settokens`#3`%
+\puthmorphism(\xpos,\ypos)[\tokenb`\tokenc`{#7}]{\height}{\arrowtyped}b%
+\advance\xpos by\height
+\puthmorphism(\xpos,\ypos)[\phantom{\tokenc}`\tokend`{#8}]%
+{\height}{\arrowtypee}b%
+\advance\ypos by\height
+\putmorphism(\xpos,\ypos)(-1,-1)[\tokena``{#4}]{\height}{\arrowtypea}l%
+\putvmorphism(\xpos,\ypos)[``{#5}]{\height}{\arrowtypeb}m%
+\putmorphism(\xpos,\ypos)(1,-1)[``{#6}]{\height}{\arrowtypec}r%
+}}
+
+\def\putAtrianglepair{\@ifnextchar <{\putAtrianglepairp}{\putAtrianglepairp%
+ <\arrowtypea`\arrowtypeb`\arrowtypec`\arrowtyped`\arrowtypee;\height>}}
+\def\Atrianglepair{\@ifnextchar <{\Atrianglepairp}{\Atrianglepairp%
+ <\arrowtypea`\arrowtypeb`\arrowtypec`\arrowtyped`\arrowtypee;\height>}}
+
+\def\Atrianglepairp<#1>[#2;#3`#4`#5`#6`#7]{{% % #2a
+\settripairparms[#1]% % / | \
+\settokens`#2`% % / | \
+\width=\height % #3/ #4 \#5
+\diagram% % / | \
+\putAtrianglepairp % / | \
+<\arrowtypea`\arrowtypeb`\arrowtypec`% % v v v
+\arrowtyped`\arrowtypee;\height>% % #2b---->#2c---->#2d
+(0,0)[{#2};#3`#4`#5`#6`{#7}]% % #6 #7
+\enddiagram%%
+}}
+
+\def\putVtrianglep<#1>(#2,#3)[#4`#5`#6;#7`#8`#9]{{%
+\settriparms[#1]%
+\xpos=#2 \ypos=#3
+\advance\ypos by\height
+{\multiply\height by2
+\puthmorphism(\xpos,\ypos)[#4`#5`{#7}]{\height}{\arrowtypea}a}%
+\putmorphism(\xpos,\ypos)(1,-1)[`#6`{#8}]{\height}{\arrowtypeb}l%
+\advance\xpos by\height
+\advance\xpos by\height
+\putmorphism(\xpos,\ypos)(-1,-1)[``{#9}]{\height}{\arrowtypec}r%
+}}
+
+\def\putVtriangle{\@ifnextchar <{\putVtrianglep}{\putVtrianglep
+ <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
+\def\Vtriangle{\@ifnextchar <{\Vtrianglep}{\Vtrianglep
+ <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
+ % #5
+\def\Vtrianglep<#1>[#2`#3`#4;#5`#6`#7]{{%% % #2------------->#3
+\settriparms[#1]% % \ /
+\width=\height % \ /
+\diagram% % #6\ /#7
+\putVtrianglep<\arrowtypea`\arrowtypeb`% % \ /
+\arrowtypec;\height>% % \ /
+(0,0)[#2`#3`#4;#5`#6`{#7}]% % v v
+\enddiagram%% % #4
+}}
+
+\def\putVtrianglepairp<#1>(#2)[#3;#4`#5`#6`#7`#8]{{
+\settripairparms[#1]%
+\setpos(#2)%
+\settokens`#3`%
+\advance\ypos by\height
+\putmorphism(\xpos,\ypos)(1,-1)[`\tokend`{#6}]{\height}{\arrowtypec}l%
+\puthmorphism(\xpos,\ypos)[\tokena`\tokenb`{#4}]{\height}{\arrowtypea}a%
+\advance\xpos by\height
+\puthmorphism(\xpos,\ypos)[\phantom{\tokenb}`\tokenc`{#5}]%
+{\height}{\arrowtypeb}a%
+\putvmorphism(\xpos,\ypos)[``{#7}]{\height}{\arrowtyped}m%
+\advance\xpos by\height
+\putmorphism(\xpos,\ypos)(-1,-1)[``{#8}]{\height}{\arrowtypee}r%
+}}
+
+\def\putVtrianglepair{\@ifnextchar <{\putVtrianglepairp}{\putVtrianglepairp%
+ <\arrowtypea`\arrowtypeb`\arrowtypec`\arrowtyped`\arrowtypee;\height>}}
+\def\Vtrianglepair{\@ifnextchar <{\Vtrianglepairp}{\Vtrianglepairp%
+ <\arrowtypea`\arrowtypeb`\arrowtypec`\arrowtyped`\arrowtypee;\height>}}
+ % #3 #4
+\def\Vtrianglepairp<#1>[#2;#3`#4`#5`#6`#7]{{% % #2a---->#2b---->#2c
+\settripairparms[#1]% % \ | /
+\settokens`#2`% % \ | /
+\diagram% % #5\ #6 /#7
+\putVtrianglepairp % \ | /
+<\arrowtypea`\arrowtypeb`\arrowtypec`% % \ | /
+\arrowtyped`\arrowtypee;\height>% % v v v
+(0,0)[{#2};#3`#4`#5`#6`{#7}]% % #2d
+\enddiagram%%
+}}
+
+
+\def\putCtrianglep<#1>(#2,#3)[#4`#5`#6;#7`#8`#9]{{%
+\settriparms[#1]%
+\xpos=#2 \ypos=#3
+\advance\ypos by\height
+\putmorphism(\xpos,\ypos)(1,-1)[``{#9}]{\height}{\arrowtypec}l%
+\advance\xpos by\height
+\advance\ypos by\height
+\putmorphism(\xpos,\ypos)(-1,-1)[#4`#5`{#7}]{\height}{\arrowtypea}l%
+{\multiply\height by 2
+\putvmorphism(\xpos,\ypos)[`#6`{#8}]{\height}{\arrowtypeb}r}%
+}}
+
+\def\putCtriangle{\@ifnextchar <{\putCtrianglep}{\putCtrianglep
+ <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
+\def\Ctriangle{\@ifnextchar <{\Ctrianglep}{\Ctrianglep
+ <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
+ % #2
+\def\Ctrianglep<#1>[#2`#3`#4;#5`#6`#7]{{%% % / |
+\settriparms[#1]% % #5/ |
+\width=\height % / |
+\diagram% % v |
+\putCtrianglep<\arrowtypea`\arrowtypeb`% % #3 |#6
+\arrowtypec;\height>% % \ |
+(0,0)[#2`#3`#4;#5`#6`{#7}]% % #7\ |
+\enddiagram%% % \ |
+}} % v v
+ % #4
+\def\putDtrianglep<#1>(#2,#3)[#4`#5`#6;#7`#8`#9]{{%
+\settriparms[#1]%
+\xpos=#2 \ypos=#3
+\advance\xpos by\height \advance\ypos by\height
+\putmorphism(\xpos,\ypos)(-1,-1)[``{#9}]{\height}{\arrowtypec}r%
+\advance\xpos by-\height \advance\ypos by\height
+\putmorphism(\xpos,\ypos)(1,-1)[`#5`{#8}]{\height}{\arrowtypeb}r%
+{\multiply\height by 2
+\putvmorphism(\xpos,\ypos)[#4`#6`{#7}]{\height}{\arrowtypea}l}%
+}}
+
+\def\putDtriangle{\@ifnextchar <{\putDtrianglep}{\putDtrianglep
+ <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
+\def\Dtriangle{\@ifnextchar <{\Dtrianglep}{\Dtrianglep
+ <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
+ % #2
+\def\Dtrianglep<#1>[#2`#3`#4;#5`#6`#7]{{%% % | \
+\settriparms[#1]% % | \#6
+\width=\height % | \
+\diagram% % | v
+\putDtrianglep<\arrowtypea`\arrowtypeb`% % #5| #3
+\arrowtypec;\height>% % | /
+(0,0)[#2`#3`#4;#5`#6`{#7}]% % | /#7
+\enddiagram%% % | /
+}} % v v
+ % #4
+\def\setrecparms[#1`#2]{\width=#1 \height=#2}%
+% #4
+% #3b<-------#3a x #3b
+% ^ | |
+% / | |
+% #5/ | |
+% / | |
+% / | |
+% / | |
+% #3c |#6 |#3a x #5
+% \ | |
+% \ | |
+% #8\ | |
+% \ | |
+% \ | |
+% v v v
+% #3d<-------#3a x #3d
+% #8
+
+\def\recursep<#1`#2>[#3;#4`#5`#6`#7`#8]{{\m@th
+\width=#1 \height=#2
+\settokens`#3`
+\settowidth{\tempdimen}{$\tokena$}
+\ifdim\tempdimen=0pt
+ \savebox{\tempboxa}{\hbox{$\tokenb$}}%
+ \savebox{\tempboxb}{\hbox{$\tokend$}}%
+ \savebox{\tempboxc}{\hbox{$#6$}}%
+\else
+ \savebox{\tempboxa}{\hbox{$\hbox{$\tokena$}\times\hbox{$\tokenb$}$}}%
+ \savebox{\tempboxb}{\hbox{$\hbox{$\tokena$}\times\hbox{$\tokend$}$}}%
+ \savebox{\tempboxc}{\hbox{$\hbox{$\tokena$}\times\hbox{$#6$}$}}%
+\fi
+\ypos=\height
+\divide\ypos by 2
+\xpos=\ypos
+\advance\xpos by \width
+\bfig
+\putCtrianglep<-1`1`1;\ypos>(0,0)[`\tokenc`;#5`#6`{#7}]%
+\puthmorphism(\ypos,0)[\tokend`\usebox{\tempboxb}`{#8}]{\width}{-1}b%
+\puthmorphism(\ypos,\height)[\tokenb`\usebox{\tempboxa}`{#4}]{\width}{-1}a%
+\advance\ypos by \width
+\putvmorphism(\ypos,\height)[``\usebox{\tempboxc}]{\height}1r%
+\efig
+}}
+
+\def\recurse{\@ifnextchar <{\recursep}{\recursep<\width`\height>}}
+
+\def\puttwohmorphisms(#1,#2)[#3`#4;#5`#6]#7#8#9{{%
+% 1 and 2 are position, 3 and 4 are the nodes, 5 and 6 the labels,
+% 7 the distance between node centers and 8 & 9 are the arrow types.
+% #5
+% #3 ===========> #4
+% #6
+%
+\puthmorphism(#1,#2)[#3`#4`]{#7}0a
+\ypos=#2
+\advance\ypos by 20
+\puthmorphism(#1,\ypos)[\phantom{#3}`\phantom{#4}`#5]{#7}{#8}a
+\advance\ypos by -40
+\puthmorphism(#1,\ypos)[\phantom{#3}`\phantom{#4}`#6]{#7}{#9}b
+}}
+
+\def\puttwovmorphisms(#1,#2)[#3`#4;#5`#6]#7#8#9{{%
+% 1 and 2 are position, 3 and 4 are the nodes, 5 and 6 the labels,
+% 7 the distance between node centers and 8 & 9 are the arrow types.
+%
+% #3
+% ||
+% ||
+% #5 || #6
+% ||
+% ||
+% vv
+% #4
+%
+\putvmorphism(#1,#2)[#3`#4`]{#7}0a
+\xpos=#1
+\advance\xpos by -20
+\putvmorphism(\xpos,#2)[\phantom{#3}`\phantom{#4}`#5]{#7}{#8}l
+\advance\xpos by 40
+\putvmorphism(\xpos,#2)[\phantom{#3}`\phantom{#4}`#6]{#7}{#9}r
+}}
+
+\def\puthcoequalizer(#1)[#2`#3`#4;#5`#6`#7]#8#9{{%
+% #1 is (\xpos,\ypos), the next 6 are the nodes and arrow labels
+% #8 is the distance between each pair of nodes and #9 is the pos of #7
+% either a (above) or b (below)
+% #5 #7
+% #2 ===========> #3 --------> #4
+% #6
+%
+\setpos(#1)%
+\puttwohmorphisms(\xpos,\ypos)[#2`#3;#5`#6]{#8}11%
+\advance\xpos by #8
+\puthmorphism(\xpos,\ypos)[\phantom{#3}`#4`#7]{#8}1{#9}
+}}
+
+\def\putvcoequalizer(#1)[#2`#3`#4;#5`#6`#7]#8#9{{%
+% #1 is (\xpos,\ypos), the next 6 are the nodes and arrow labels
+% #8 is the distance between each pair of nodes and #9 is the pos of #7
+% either l (left) or r (right)
+%
+% #2
+% | |
+% | |
+% #5 | | #6
+% | |
+% | |
+% v v
+% #3
+% |
+% |
+% #7 |
+% |
+% v
+% #4
+%
+\setpos(#1)%
+\puttwovmorphisms(\xpos,\ypos)[#2`#3;#5`#6]{#8}11%
+\advance\ypos by -#8
+\putvmorphism(\xpos,\ypos)[\phantom{#3}`#4`#7]{#8}1{#9}
+}}
+
+\def\putthreehmorphisms(#1)[#2`#3;#4`#5`#6]#7(#8)#9{{%
+% Use: \putthreehmorphisms(xpos,ypos)[lnode`rnode;toplabel`midlabel%
+% botlabel]{distance}(toparrowtype,midarrowtype,botarrowtype){position}
+\setpos(#1) \settypes(#8)
+\if a#9 %
+ \vertsize{\tempcounta}{#5}%
+ \vertsize{\tempcountb}{#6}%
+ \ifnum \tempcounta<\tempcountb \tempcounta=\tempcountb \fi
+\else
+ \vertsize{\tempcounta}{#4}%
+ \vertsize{\tempcountb}{#5}%
+ \ifnum \tempcounta<\tempcountb \tempcounta=\tempcountb \fi
+\fi
+\advance \tempcounta by 60
+\puthmorphism(\xpos,\ypos)[#2`#3`#5]{#7}{\arrowtypeb}{#9}
+\advance\ypos by \tempcounta
+\puthmorphism(\xpos,\ypos)[\phantom{#2}`\phantom{#3}`#4]{#7}{\arrowtypea}{#9}
+\advance\ypos by -\tempcounta \advance\ypos by -\tempcounta
+\puthmorphism(\xpos,\ypos)[\phantom{#2}`\phantom{#3}`#6]{#7}{\arrowtypec}{#9}
+}}
+
+\def\setarrowtoks[#1`#2`#3`#4`#5`#6]{%
+\def\toka{#1}
+\def\tokb{#2}
+\def\tokc{#3}
+\def\tokd{#4}
+\def\toke{#5}
+\def\tokf{#6}
+}
+\def\hex{\@ifnextchar <{\hexp}{\hexp<1000`400>}}
+\def\hexp<#1`#2>[#3`#4`#5`#6`#7`#8;#9]{%
+\setarrowtoks[#9]
+\yext=#2 \advance \yext by #2
+\xext=#1 \advance\xext by \yext
+\bfig
+\putCtriangle<-1`0`1;#2>(0,0)[`#5`;\tokb``\tokd]
+\xext=#1 \yext=#2 \advance \yext by #2
+\putsquare<1`0`0`1;\xext`\yext>(#2,0)[#3`#4`#7`#8;\toka```\tokf]
+\advance \xext by #2
+\putDtriangle<0`1`-1;#2>(\xext,0)[`#6`;`\tokc`\toke]
+\efig
+}
+%\def\doublecomplex[#1`#2`#3`#4`#5`#6`#7`#8`#9]{%
+%\bfig
+%\putsquare<0`0`1`1;500`500>(0,1700)[`\vdots`\cdots`{#1};```]
+%\puthmorphism(500,1700)[\ph{#1}`\cdots`]{500}1a
+%\puthmorphism(1000,1700)[\ph{\cdots}`\ph{#2}`]{500}1a
+%\putsquare<0`1`1`1;700`500>(1500,1700)[\vdots`\vdots`{#2}`{#3};```]
+%\puthmorphism(2200,1700)[\ph{#3}`0`]{500}1a
+%\putvmorphism(500,1700)[`\vdots`]{400}1a \putvmorphism(500,1300)[``]{400}1a
+%\putvmorphism(1500,1700)[`\vdots`]{400}1a \putvmorphism(1500,1300)[``]{400}1a
+%\putvmorphism(2200,1700)[`\vdots`]{400}1a \putvmorphism(2200,1300)[``]{400}1a
+%\putsquare<1`0`1`1;500`500>(0,400)[\cdots`{#4}`\cdots`{#7};```]
+%\puthmorphism(500,900)[\ph{#1}`\cdots`]{500}1a
+%\puthmorphism(1000,900)[\ph{\cdots}`\ph{#2}`]{500}1a
+%\puthmorphism(500,400)[\ph{#1}`\cdots`]{500}1a
+%\puthmorphism(1000,400)[\ph{\cdots}`\ph{#2}`]{500}1a
+%\putsquare<1`1`1`1;700`500>(1500,400)[{#5}`{#6}`{#8}`{#9};```]
+%\puthmorphism(2200,900)[\ph{#6}`0`]{500}1a
+%\puthmorphism(2200,400)[\ph{#9}`0`]{500}1a
+%\putvmorphism(500,400)[`0`]{400}1a
+%\putvmorphism(1500,400)[`0`]{400}1a
+%\putvmorphism(2200,400)[`0`]{400}1a
+%\efig
+%}
+%
+%\def\doublecocomplex[#1`#2`#3`#4`#5`#6`#7`#8`#9]{%
+%\bfig
+%\putsquare<0`0`-1`-1;500`500>(0,1700)[`\vdots`\cdots`{#1};```]
+%\puthmorphism(500,1700)[\ph{#1}`\cdots`]{500}{-1}a
+%\puthmorphism(1000,1700)[\ph{\cdots}`\ph{#2}`]{500}{-1}a
+%\putsquare<0`-1`-1`-1;500`500>(1500,1700)[\vdots`\vdots`{#2}`{#3};```]
+%\puthmorphism(2000,1700)[\ph{#3}`0`]{500}{-1}a
+%\putvmorphism(500,1700)[`\vdots`]{400}{-1}a \putvmorphism(500,1300)[``]{400}{-1}a
+%\putvmorphism(1500,1700)[`\vdots`]{400}{-1}a \putvmorphism(1500,1300)[``]{400}{-1}a
+%\putvmorphism(2000,1700)[`\vdots`]{400}{-1}a \putvmorphism(2000,1300)[``]{400}{-1}a
+%\putsquare<-1`0`-1`-1;500`500>(0,400)[\cdots`{#4}`\cdots`{#7};```]
+%\puthmorphism(500,900)[\ph{#1}`\cdots`]{500}{-1}a
+%\puthmorphism(1000,900)[\ph{\cdots}`\ph{#2}`]{500}{-1}a
+%\puthmorphism(500,400)[\ph{#1}`\cdots`]{500}{-1}a
+%\puthmorphism(1000,400)[\ph{\cdots}`\ph{#2}`]{500}{-1}a
+%\putsquare<-1`-1`-1`-1;500`500>(1500,400)[{#5}`{#6}`{#8}`{#9};```]
+%\puthmorphism(2000,900)[\ph{#6}`0`]{500}{-1}a
+%\puthmorphism(2000,400)[\ph{#9}`0`]{500}{-1}a
+%\putvmorphism(500,400)[`0`]{400}{-1}a
+%\putvmorphism(1500,400)[`0`]{400}{-1}a
+%\putvmorphism(2000,400)[`0`]{400}{-1}a
+%\efig
+%}
+\makeatother
diff --git a/obsolete/macros/generic/proofs/taylor/boxproof-old.tex b/obsolete/macros/generic/proofs/taylor/boxproof-old.tex
new file mode 100644
index 0000000000..e42924bb08
--- /dev/null
+++ b/obsolete/macros/generic/proofs/taylor/boxproof-old.tex
@@ -0,0 +1,142 @@
+% mangletex (11 May 1992) run at 19:39 BST Monday 29 June 1992
+\message{<Paul Taylor's Proof Boxes, 29 June 1992>}%%
+%%=======================================================
+%% There is now a PROTOTYPE proof-box macro mackage for TRIAL only.
+%% The syntax and implementation may change.
+%% It is "boxproof.tex" in the TeX system (so just "\input boxproof").
+%% There are some examples in ~pt/utilities/misctex/proofboxeg.tex and
+%% proofboxeg1.tex.
+%%
+%% Syntax as follows:
+%% each line is of the form
+%% <all/exists_variables> <latex_label> \: <formula> \= <reason> \\
+%% where
+%% <all/exists_variables> is something like "x,y" - its for variables
+%% declared at the beginning of all-intro and exists-elim boxes
+%% <latex_label> is a command "\label{fred}" which defines "fred" to
+%% be the label text, which may be used anywhere as "\ref{fred}"
+%% - see LaTeX book.
+%% <formula> is the proposition being asserted
+%% <reason> is "\intro\land(\ref{john},\ref{mary})"
+%%% note that the parts are separated by "\:", "\=" and "\\"; these correspond
+%% to "let identifier = expression : type" in a declarative language.
+%%
+%% Proof boxes are "wrapped up" as follows:
+%% the whole proof in "\begin{proofbox}...\end{proofbox}"
+%% single-column boxes (all-intro, implies-intro, exists-elim) in "\[...\]"
+%% double-column boxes are of two kinds:
+%% separate (and-intro) "\(...\*...\)"
+%% stuck together (or-elim) "\(...\+...\)"
+%%
+%%% At the moment you may only have pairs of parallel boxes, and the width is
+%%% split in two; later there will be options for mutiple boxes and adjustable
+%% widths.
+%%
+%% Comments please.
+%%
+%% WARNING: this is for temporary use only at the moment.
+%%=======================================================
+\catcode`\@=11 \let\plaint@bplus\+\let\+\relax\newcount\prooflineinbox
+\newcount\prooflineinnextbox\newcount\prooflinetotal\newcount\pr@@flinetotal
+\newcount\pr@@flinemax\newcount\proofboxesacross\newdimen\prooflinenowidth
+\newdimen\proofboxformulawidth\newdimen\proofboxrulebreadth\newdimen
+\proofboxrulespace\newdimen\proofboxsurround\newdimen\proofboxmargin\newdimen
+\pr@@fboxhadjust\newdimen\proofboxintercol\newif\ifinproofbox\newif
+\ifleftmostproofbox\newif\ifparallelisand\newskip\proofboxlefttabskip\newskip
+\proofboxrighttabskip\newskip\proofboxbaselineskip\def\runningproofline{%
+\number\prooflinetotal}\def\nestedproofline{\ifinproofbox\enclosingproofline.%
+\fi\number\prooflineinbox}\def\enclosingproofline{}\prooflinenowidth=1em
+\proofboxformulawidth=15em \proofboxrulebreadth=.03em \proofboxrulespace=.2em
+\proofboxsurround=.5em \proofboxlefttabskip=1em \proofboxrighttabskip=1em plus
+1 fil \proofboxbaselineskip=1.8em \proofboxmargin=5em \proofboxintercol=3em
+\def\proofboxleftside{\leaders\hrule width\proofboxrulebreadth\vfill}\def
+\proofboxrightside{\leaders\hrule width\proofboxrulebreadth\vfill}\def
+\proofboxorseparator{\leaders\hrule width\proofboxrulebreadth\vfill}\def
+\proofboxtopside{\leaders\vrule height\proofboxrulebreadth depth\z@\hfill}%
+\def\proofboxbottomside{\leaders\vrule height\proofboxrulebreadth depth\z@
+\hfill}\let\theproofline\runningproofline\def\proofboxmakelabel#1{{%
+\ifleftmostproofbox\setbox0=\hbox{\hss\the\scriptfont1 #1}\ifdim\wd0<%
+\prooflinenowidth\setbox0=\hbox to\prooflinenowidth{\unhbox0}\fi\box0 \fi}}%
+\def\proofboxnonumbers{\def\proofboxmakelabel##1{}} \def\proofbox{\global
+\prooflinetotal=0 \ifvmode\else\vtop\fi\bgroup\let\[\intofullpr@@fbox\let\(%
+\intohalfpr@@fbox\let\:\pr@@fboxcolon\let\=\pr@@fboxequals\let\proofbox
+\intofullpr@@fbox\proofboxesacross=1 \pr@@fb@x}\let\pr@@fb@x\csname\let
+\endpr@@fb@x\endcsname\def\endproofbox{\endpr@@fb@x\proofboxmargin\z@\vskip1%
+ex \unvbox9 \vskip1ex \egroup}\def\intofullpr@@fbox{\pr@@ffirst\pr@@fb@x}\def
+\+#1{<"7C#1}\def\outofpr@@fbox{\endpr@@fb@x\z@\z@\endpr@@ffirst
+\proofboxleftside\pr@@fvalign\putpr@@fedge\proofboxleftside\putpr@@f
+\putpr@@fedge\proofboxrightside\endpr@@fvalign}\def\intohalfpr@@fbox{%
+\pr@@ffirst\advance\proofboxformulawidth-\proofboxintercol\advance
+\proofboxformulawidth-\proofboxsurround\divide\proofboxformulawidth2 \pr@@fb@x
+}\def\pr@@fvalign{m}\def\orpr@@ffirst{\endpr@@fb@x\z@{.5\proofboxintercol}%
+\endpr@@ffirst\proofboxleftside\advance\proofboxformulawidth-%
+\proofboxintercol\advance\proofboxformulawidth-\proofboxsurround\divide
+\proofboxformulawidth2 \let\*\orpr@@fmore\let\+\orpr@@fmore\let\]\orpr@@flast
+\let\)\orpr@@flast\let\endproof\orpr@@flast\pr@@fvalign\putpr@@fedge
+\proofboxleftside\putpr@@f\putpr@@forsep\proofboxorseparator\pr@@fb@x}\def
+\putpr@@forsep{o}\def\orpr@@fmore{\endpr@@fb@x{.5\proofboxintercol}{.5%
+\proofboxintercol}\putpr@@f\putpr@@forsep\proofboxorseparator\pr@@fb@x}\def
+\putpr@@fedge{n}\def\orpr@@flast{\endpr@@fb@x{.5\proofboxintercol}\z@
+\putpr@@f\putpr@@fedge\proofboxrightside\endpr@@fvalign}\def\putpr@@f{t}\def
+\endpr@@fvalign{h}\def\andpr@@ffirst{\endpr@@fb@x\z@\z@\endpr@@ffirst
+\proofboxleftside\advance\proofboxformulawidth-\proofboxintercol\advance
+\proofboxformulawidth-\proofboxsurround\divide\proofboxformulawidth2 \let\*%
+\andpr@@fmore\let\+\andpr@@fmore\let\]\andpr@@flast\let\)\andpr@@flast\let
+\endproof\andpr@@flast\pr@@fvalign\putpr@@fedge\proofboxleftside\putpr@@f
+\putpr@@fedge\proofboxrightside\pr@@fboxhadjust=\proofboxintercol\advance
+\pr@@fboxhadjust-\dimen8 \advance\pr@@fboxhadjust-2\dimen2 \pr@@fb@x}\def
+\la@math{a}\def\andpr@@fmore{\endpr@@fb@x\z@\z@\hadjustandpr@@f\putpr@@fedge
+\proofboxleftside\putpr@@f\putpr@@fedge\proofboxrightside\pr@@fboxhadjust=%
+\proofboxintercol\advance\pr@@fboxhadjust-\dimen8 \advance\pr@@fboxhadjust-2%
+\dimen2 \pr@@fb@x}\def\la@ket{r}\def\andpr@@flast{\endpr@@fb@x\z@\z@
+\hadjustandpr@@f\putpr@@fedge\proofboxleftside\putpr@@f\putpr@@fedge
+\proofboxrightside\endpr@@fvalign}\def\hadjustandpr@@f{\advance
+\pr@@fboxhadjust-\dimen6 \ifdim\pr@@fboxhadjust<\proofboxsurround
+\pr@@fboxhadjust=\proofboxsurround\fi\hrule width\pr@@fboxhadjust height\z@
+depth\z@\cr}\def\pr@@fboxcr{\cr}\def\pr@@fboxequals{&}\def\pr@@fboxcolon{&}%
+\ifnum\pr@@fb@x\pr@@fvalign\putpr@@forsep\putpr@@fedge\putpr@@f
+\endpr@@fvalign\endpr@@fb@x<13\let\pr@@fmtb\relax\else\def\pr@@fmtb#1{}\fi
+\def\pr@@ffirst{\omit\prooflineinnextbox=\prooflineinbox\edef
+\enclosingproofline{\theproofline}%% its line label
+\pr@@flinetotal=\prooflinetotal\let\endproofbox\outofpr@@fbox
+\proofboxesacross=1 \let\+\orpr@@ffirst\let\*\andpr@@ffirst\let\)%
+\outofpr@@fbox\let\]\outofpr@@fbox\inproofboxtrue}\def\la@bra{y}\def
+\endpr@@ffirst#1{\setbox0=\vbox{#1}\global\advance\dimen6\wd0 \advance\dimen6%
+\proofboxsurround\hskip\dimen6 plus 1fil \global\count@=\pr@@flinetotal&\omit
+\setbox8=\hbox\bgroup\pr@@flinetotal=\count@\hskip-\dimen6 \pr@@flinemax=%
+\prooflinetotal\global\prooflinetotal=\pr@@flinetotal\leftmostproofboxfalse
+\inproofboxtrue}\def\pr@@fvalign{\valign\bgroup\vfil##&##&##\vfil&##&##\vfil
+\cr}\def\endpr@@fvalign{\vfil&\vfil&\vfil&\vfil&\vfil\cr\egroup\setbox0=%
+\lastbox\setbox0=\vbox{\unvbox0\unskip\setbox5=\lastbox\unskip\setbox4=%
+\lastbox\unskip\setbox3=\lastbox\unskip\setbox2=\lastbox\unskip\setbox1=%
+\lastbox\global\dimen9=\ht5 \global\advance\dimen9\dp5\global\advance\dimen9%
+\ht4\global\advance\dimen9\dp4\global\dimen4=\ht1 \global\advance\dimen4\dp1%
+\global\advance\dimen4\ht2\global\advance\dimen4\dp1}\global\advance\dimen8%
+\dimen2\kern-\dimen8 \global\prooflinetotal=\pr@@flinemax\egroup\dimen0=\dp8
+\advance\dimen0-\dimen4 \vtop{\setbox0=\null\ht0=\dimen4 \dp0=-\dimen4 \box0%
+\nointerlineskip\box8}\ifdim\dimen0<\z@\dimen0\z@\fi\advance\dimen0-\dimen9
+\vadjust{\vskip-\dimen0}&\omit\global\advance\dimen8\proofboxsurround\hskip
+\dimen8 plus 1 fil \cr}\def\putpr@@fedge#1{\span\omit\span\omit\span\omit
+\span\omit\setbox0=\vbox{#1}\global\dimen2=\wd0 \unvbox0\vfil\cr}\def
+\la@displ{e}\def\putpr@@forsep#1{&\multispan3 \setbox0=\vbox{#1}\global\dimen
+2=\wd0 \unvbox0 &\vfil\cr\noalign{\kern-\dimen2}}\def\putpr@@f{\hbox to\dimen
+5{\proofboxtopside}&\advance\dimen4\proofboxrulespace\vskip\dimen4 plus 1fil&%
+\vskip-\dimen4 \unvbox9 \vskip-\dimen9&\advance\dimen9\proofboxrulespace
+\vskip\dimen9 plus 1 fil&\hbox to\dimen5{\proofboxbottomside}\cr}\ifnum
+\pr@@fb@x\la@bra\la@displ\la@math\la@ket\endpr@@fb@x\+A\let\pr@@fytb\relax
+\else\def\pr@@fytb#1{}\fi\def\pr@@fb@x{\global\setbox9=\vtop\bgroup
+\nointerlineskip\global\prooflineinbox=0 \baselineskip=\proofboxbaselineskip
+\tabskip=\z@\let\\\pr@@fboxcr\halign\bgroup\hskip\proofboxrulespace plus 1fil%
+\let\(\la@math\let\[\la@displ\global\advance\prooflineinbox1 \global\advance
+\prooflinetotal1 \edef\@currentlabel{\theproofline}$##\proofboxmakelabel
+\@currentlabel$&\hskip\proofboxlefttabskip\let\(\la@math\let\[\la@displ$%
+\displaystyle##$\hskip\proofboxrighttabskip&\let\(\la@math\let\[\la@displ$##$%
+\hskip\proofboxrulespace plus1fil \cr}\def\endpr@@fb@x#1#2{\crcr\omit\hskip#1
+plus 1 fil&\omit\hskip\proofboxformulawidth plus 1fil&\omit\hskip#2 plus 1fil%
+\cr\egroup\setbox0=\lastbox\unskip\global\dimen5=\wd0 \setbox0=\hbox{\unhbox0%
+\unskip\setbox0=\lastbox\global\dimen8=\wd0\unskip\setbox0=\lastbox\global
+\dimen7=\wd0\unskip\setbox0=\lastbox\global\dimen6=\wd0\unskip}\setbox0=%
+\lastbox\global\dimen9=\dp0 \nointerlineskip\pr@@fytb{\box0}\egroup\global
+\dimen4=\ht9 }\inproofboxfalse\leftmostproofboxtrue\let\la@bra\(\let\la@ket\)%
+\def\la@math{\la@bra\let\)\la@ket}\def\la@displ{\la@bra\displaystyle\let\]%
+\la@ket}\let\+\plaint@bplus\catcode`\@=12 \ No newline at end of file
diff --git a/obsolete/macros/generic/proofs/taylor/boxproof.tex b/obsolete/macros/generic/proofs/taylor/boxproof.tex
new file mode 100644
index 0000000000..d95d0a58c1
--- /dev/null
+++ b/obsolete/macros/generic/proofs/taylor/boxproof.tex
@@ -0,0 +1,424 @@
+% mangletex (11 May 1992) run at 22:09 GMT Monday 08 November 1993
+%%\title {\TeX\ macros for proof boxes}
+%%\author {Paul Taylor\\
+%% Department of Computing,\\
+%% Imperial College,\\
+%% London SW7 2BZ\\
+%% +44 71 589 5111 {\em ext.} 5057\\
+%% {\tt<pt@doc.ic.ac.uk>}}
+%%\date{8 November 1993}
+%% % to get the provisional user documentation do
+%% % grep ^%% boxproof.tex | sed 's/^%*//' > boxproof-manual.tex
+%%\documentstyle{article}
+%%\input boxproof.tex
+%%\def\meta#1{\mbox{$\langle\hbox{#1}\rangle$}}
+%%\def\macrowitharg#1#2{{\tt\string#1\bra\meta{#2}\ket}}
+%%{\escapechar-1 \xdef\bra{\string\{}\xdef\ket{\string\}}}
+%%\let\subsection\section
+%%\begin{document}
+%%\maketitle
+%%
+%% \subsection{Introduction}
+%% The proof
+%%\begin{proofbox}
+%% \(\"1"\:\alpha\leftrightarrow\psi(x,\top)\=\\
+%% \:\Some\beta.\psi(x,\beta)\=\mathsf{total}\\
+%% \[\exists\beta\kern-1em\:\psi(x,\beta)\\
+%% \(\:\beta\=\\
+%% \:\beta=\top\=(*)\\
+%% \:\psi(x,\!\top)\=\mathsf{subs}\\
+%% \:\alpha\=\elim\leftrightarrow(\ref{1})\\
+%% \*\:\alpha\=\\
+%% \:\psi(x,\!\top)\=\elim\leftrightarrow(\ref{1})\\
+%% \:\beta=\top\=\mathsf{func}\\
+%% \:\beta\=(*)\\
+%% \)\:\alpha=\beta\=\intro\leftrightarrow\\
+%% \:\psi(x,\alpha)\=\mathsf{subs}\\
+%% \] \:\psi(x,\alpha)\=\elim\exists\\
+%% \* \:\psi(x,\alpha)\=\\
+%% \(\:\alpha\=\\
+%% \:\alpha=\top\=(*)\\
+%% \:\phi(x,\!\top)\=\mathsf{subs}\\
+%% \*\:\psi(x,\!\top)\=\\
+%% \:\alpha=\top\=\mathsf{func}\\
+%% \:\alpha\=(*)\\
+%% \)\:\alpha\leftrightarrow\psi(x,\!\top)\=\intro\leftrightarrow\\
+%%% \) \:\psi(x,\alpha)\leftrightarrow(\alpha\leftrightarrow\psi(x,\!\top))
+%% \=\intro\leftrightarrow\\
+%%\end{proofbox}
+%% is produced by
+%%\begin{verbatim}
+%%\begin{proofbox}
+%% \(\"1"\:\alpha\leftrightarrow\psi(x,\top)\\
+%% \:\Some\beta.\psi(x,\beta) \=\mathsf{total}\\
+%% \[\exists\beta\kern-1em\:\psi(x,\beta)\\
+%% \(\:\beta\\
+%% \:\beta=\top \=(*)\\
+%% \:\psi(x,\!\top) \=\mathsf{subs}\\
+%% \:\alpha \=\elim\leftrightarrow(\ref{1})\\
+%% \*\:\alpha\\
+%% \:\psi(x,\!\top) \=\elim\leftrightarrow(\ref{1})\\
+%% \:\beta=\top \=\mathsf{func}\\
+%% \:\beta\=(*)\\
+%% \)\:\alpha=\beta \=\intro\leftrightarrow\\
+%% \:\psi(x,\alpha) \=\mathsf{subs}\\
+%% \] \:\psi(x,\alpha) \=\elim\exists\\
+%% \* \:\psi(x,\alpha)\\
+%% \(\:\alpha\\
+%% \:\alpha=\top \=(*)\\
+%% \:\phi(x,\!\top) \=\mathsf{subs}\\
+%% \*\:\psi(x,\!\top)\\
+%% \:\alpha=\top \=\mathsf{func}\\
+%% \:\alpha \=(*)\\
+%% \)\:\alpha\leftrightarrow\psi(x,\!\top) \=\intro\leftrightarrow\\
+%% \) \:\psi(x,\alpha)\leftrightarrow
+%% (\alpha\leftrightarrow\psi(x,\!\top)) \=\intro\leftrightarrow\\
+%%\end{proofbox}
+%%\end{verbatim}
+%%
+%% Syntax as follows:
+%% each line is of the form
+%% \begin{center}
+%% \meta{variables}
+%% \meta{name}
+%% \verb/\:/ \meta{formula}
+%% \verb/\=/ \meta{reason}
+%% \verb/\-/ \meta{use}
+%% \verb/\\/
+%% \end{center}
+%% where
+%% \begin{itemize}
+%% \item \meta{variables} is something like ``$x,y$'' ---
+%% it's for variables declared at the beginning of $\intro\forall$- and
+%% $\elim\exists$-boxes.
+%% \item \meta{name} is a command \verb/\label{fred}/ which
+%% defines \verb/fred/ to be the label text, which may be used anywhere
+%% as \verb/\ref{fred}/ --- see {\em The \LaTeX book.}
+%% Local labels are also available, using \macrowitharg\lbl{name}
+%% or \verb/\"/\meta{name}\verb/"/; these obey the scoping rules of
+%% the boxes.
+%% You may also refer to the previous line as \verb/\ref{-}/.
+%% \item \meta{formula} is the proposition being asserted.
+%% \item \meta{reason} is \verb/\intro\land(\ref{john},\ref{mary})/
+%% or \verb/\elim\forall(\ref{jim})/.
+%% \item \meta{use} is provided for linear logic, to record the step
+%%% which uses this one. How this accords with theory I don't yet know.
+%% \end{itemize}
+%% Note that the parts are separated by \verb/\:/, \verb/\=/ and \verb/\\/;
+%% these correspond to
+%% \begin{center}
+%% {\bf let } \meta{name} = \meta{expression} : \meta{type}
+%% \end{center}
+%% in a declarative language.
+%% The \verb/\:/, \verb/\=/ and \verb/\-/ fields are optional and may occur
+%% in any order. If any of them is repeated the last is taken.
+%% If none of them is present the \meta{variables} field is also ignored.
+%%
+%% Proof {\em boxes\/} are ``wrapped up'' as follows:
+%% \begin{itemize}
+%%% \item the whole proof in \verb/\begin{proofbox}/...\verb/\end{proofbox}/;
+%%% \item single-column boxes ($\intro\forall$, $\intro\imp$, $\elim\exists$),
+%% in \verb/\[/...\verb/\]/.
+%% \item multiple-column boxes are of two kinds:
+%% \begin{itemize}
+%%% \item separate ($\intro\land$) boxes: \verb/\(/...\verb/\*/...\verb/\)/.
+%% \item stuck together ($\elim\lor$) boxes:
+%% \verb/\(/...\verb/\+/...\verb/\)/.
+%% \end{itemize}
+%% \end{itemize}
+%% You may put more than two columns in \verb/\(/...\verb/\)/ and even mix
+%% the \verb/\+/ and \verb/\*/ separators.
+%%
+%% The whole proof is enclosed in \verb/\proofbox/...\verb/\endproofbox/
+%% or \verb/\begin{proofbox}/...\verb/\end{proofbox}/, but the \LaTeX\
+%% environment form {\em must not\/} be used for nested boxes.
+%%
+%% If the proof occurs in paragraph mode (ie in vertical or
+%% unrestricted horizontal mode) then it is set as a display, using the
+%% full width of the page. Otherwise it uses only the required width.
+%%
+%% A lot of the internals are potentially configurable, but there is not
+%% yet a user interface suitable for doing this. This will be provided
+%% in the next version.
+%%
+%% This is a {\em prototype\/} proof-box macro package;
+%% the syntax and implementation may change.
+%% It is {\tt boxproof.tex} in the \TeX\ system
+%% (so just \verb/\input boxproof/).
+%%
+%% There are some examples in
+%% \verb+~pt/utilities/proofs/proofboxeg.tex+ and
+%% \verb+proofboxeg1.tex+.
+%%
+%% The prototype version was begun on 2 August 1991, the new one on
+%% 4 June 1993.
+%%
+%%
+\message{<Paul Taylor's Proof Boxes, 8 November 1993>}\edef\proofboxrestoreat
+{\noexpand\catcode`\noexpand\@\the\catcode`\@}\catcode`\@=11
+\let\pb@A\+\let\+\relax\let\pb@B\(\let\pb@C\)\def\pb@D{\pb@B
+\let\)\pb@C}\def\pb@E{\pb@B\displaystyle\let\]\pb@C}%%
+%% The following are user-settable dimensions.
+%%
+\newdimen\prooflinenowidth\prooflinenowidth1em \newdimen\proofboxfullwidth
+\newdimen\proofboxleftmargin\proofboxleftmargin3em \newdimen
+\proofboxrightmargin\newdimen\proofboxrulebreadth\proofboxrulebreadth.4pt
+\newdimen\proofboxseparation\proofboxseparation.2em \newdimen
+\proofboxbaselineskip\proofboxbaselineskip4ex %%
+%%
+%% The following are user-accessible numbers.
+%%
+\newcount\proofcolumns\newcount\prooflinetotal\newcount\prooflineinbox%%
+%%
+%% These boxes receive the fields of the proof steps.
+%% They are used in \verb/\proofboxmakeleftcolumn/ {\em etc}.
+%%
+\newbox\proofboxproposition\newbox\proofboxreason\newbox\proofboxuse\newbox
+\proofboxvariables%%
+%% The left-most switch is used by
+%%% \verb/\proofboxmakelabel/ to suppress the label in all but the first column.
+%% On the outside it is true.
+\newif\ifleftmostproofbox\leftmostproofboxtrue%%
+%%
+%% The following are obsolete: they are only included for reverse
+%% compatibility with the prototype version.
+\newdimen\proofboxintercol\newdimen\proofboxsurround\newdimen
+\proofboxformulawidth\newdimen\proofboxmargin\newskip\proofboxlefttabskip
+\newskip\proofboxrighttabskip%%
+%%
+%% \subsection{Redefinable macros}
+%% WARNING: most of these commands will be hidden and replaced with
+%% optional arguments to \verb/\proofbox/ in a future version.
+%% Do not rely on them.
+%%
+%% We provide three different ways of numbering the lines of the proof:
+%% \begin{itemize}
+%% \item \verb/\runningproofline/: a global running sequence (default),
+%%
+\def\runningproofline{\number\prooflinetotal}%%
+%% \item \verb/\nestedproofline/: a hierarchical system with dots,
+%%
+\def\nestedproofline{\relax\ifx\enclosingproofline\empty\else
+\enclosingproofline{.}\fi\number\prooflineinbox}\def\enclosingproofline{}%%
+%% \item \verb/\nestedproofline/: a fully hierarchical system which
+%% also includes the column number
+%% (\verb/\proof@columns/) as a letter (ASCII quote plus number).
+%%
+\def\proofboxcolumn{\ifnum\proofcolumns>\z@{\count@96\advance\count@
+\proofcolumns\char\count@}\fi}\def\fullynestedproofline{\relax\ifx
+\enclosingproofline\empty\enclosingproofline\proofboxcolumn.\else
+\proofboxcolumn\fi\number\prooflineinbox}%%
+%% \end{itemize}
+%% \verb/\theproofline/ is the default.
+%%
+\let\theproofline\runningproofline%%
+%% The macro \verb/\proofboxmakelabel#1/ is used to print the line label.
+%% We only put it in the leftmost box.
+%% It is printed in small non-ranging Arabic numerals
+%% ({\the\scriptfont1 0123456789}).
+%% Right-justify it in \verb/\prooflinenowidth/ if it will fit,
+%% otherwise let it stick out on the right, {\em i.e.}~left-justify it.
+%%
+\def\proofboxmakelabel#1{{\relax\ifleftmostproofbox\setbox\z@\hbox{\hss\the
+\scriptfont\@ne#1}\ifdim\wd\z@<\prooflinenowidth\setbox\z@\hbox to%
+\prooflinenowidth{\unhbox\z@}\fi\box\z@\quad\fi}}%%
+%% Kill the numbers altogether with \verb/\proofboxnonumbers/.
+%%
+\def\proofboxnonumbers{\def\proofboxmakelabel##1{}}%%
+%% How to make the left column of the proof box:
+%% use the variables field, a space if necessary and the line label.
+%%
+\def\proofboxmakeleftcolumn{\kern\proofboxseparation\hfil\dimen@\wd
+\proofboxvariables\unhbox\proofboxvariables\ifdim\dimen@>\z@\quad\fi
+\proofboxmakelabel\@currentlabel}%%
+%% How to make the middle column of the proof box:
+%% left justify the formula field.
+%%
+\def\proofboxmakemiddlecolumn{\unhbox\proofboxproposition\hfil\quad}%%
+%% How to make the right column of the proof box:
+%% use the reason and use fields.
+%%
+\def\proofboxmakerightcolumn{\box\proofboxreason\box\proofboxuse\hfil\kern
+\proofboxseparation}%%
+%%
+%% Make the four edges of a rectangular box and the separator
+%% between \verb/\+/ columns.
+%%
+\def\proofboxleftside{\leaders\hrule width\proofboxrulebreadth\vfill}\def
+\proofboxrightside{\leaders\hrule width\proofboxrulebreadth\vfill}\def
+\proofboxorseparator{\leaders\hrule width\proofboxrulebreadth\vfill}\def
+\proofboxtopside{\leaders\vrule height\proofboxrulebreadth depth\z@\hfill}%
+\def\proofboxbottomside{\leaders\vrule height\proofboxrulebreadth depth\z@
+\hfill}%%
+%%
+%% Use dotted lines: \verb/\dottedproofbox/.
+%%
+\def\dottedproofbox{\def\proofboxleftside{\leaders\pb@F\vfill} \def
+\proofboxrightside{\leaders\pb@F\vfill} \def\proofboxorseparator{\leaders
+\pb@F\vfill} \def\proofboxtopside{\leaders\pb@F\hfill}\def\proofboxbottomside
+{\leaders\pb@F\hfill}%%
+}\def\pb@F{\vbox to 5pt{\vss\hbox to 5pt{\hss.\hss}\vss}}%%
+%% Leave the boxes open at the bottom: \verb/\openproofbox/
+%%
+\def\openproofbox{\def\proofboxbottomside{\hfill}} %%
+%% \subsection{Miscellaneous logical notations}
+%%
+%% Print the names of the introduction and elimination rules, for example:
+%% \begin{quote}
+%% \verb/\elim\forall/ $\elim\forall$ \qquad
+%% \verb/\intro\land/ $\intro\land$ \qquad
+%% \end{quote}
+\def\intro#1{{{#1}{\cal I}}}\def\elim#1{{{#1}{\cal E}}}%%
+%% Recall that in \TeX\ the logical connectives and quantifiers are called
+%% \begin{center}
+%% \verb/\lor/ $\lor$\quad
+%% \verb/\land/ $\land$\quad
+%% \verb/\lnot/ $\lnot$\quad
+%% \verb/\forall/ $\forall$\quad
+%% \verb/\exists/ $\exists$
+%% \end{center}
+%% The following provide macros for the \verb/\implies/ {\em relation\/}
+%% and for the binary {\em operation\/} which yields the abstract
+%% \verb/\implic/ation between formulae.
+%% The point is that \TeX\ spaces them and breaks the lines differently:
+%% \begin{center}
+%% \verb/A\implies B/ $A\implies B$\quad{\em versus\/}\quad
+%% \verb/A\implic B/ $A\implic B$
+%% \end{center}
+%% There are forward and reverse, single and Double versions.
+%%
+\mathchardef\implies="3221 \mathchardef\impliedby="3220 \mathchardef\Implies=%
+"3229 \mathchardef\Impliedby="3228 \mathchardef\implic="2221 \mathchardef
+\implicby="2220 \mathchardef\Implic="2229 \mathchardef\Implicby="2228 \let
+\imp\to%%
+%% Handle the spacing after a variable (and optionally its type)
+%% bound by a quantifier symbol. For example
+%% \begin{quote}
+%% \verb/\All x:X. \phi(x)/\quad prints as\quad $\All x:X.\phi(x)$\quad
+%% instead of\quad $\forall x:X.\phi(x)$
+%% \end{quote}
+\def\Quantifier#1#2.{\pb@G{#1}#2::.}\def\pb@G#1#2:#3:#4.{{{#1}{#2}\def\next{#%
+3}\ifx\next\empty{.}\mkern1mu \else\mkern1mu{\colon}\mkern1mu{#3}\mkern.5mu{.%
+}\mkern3mu \fi}}%
+%% We provide some commonly used forms; \verb/\iota/ ($\iota$) is Russell's
+%% description operator and should really be inverted.
+\def\All{\Quantifier\forall}\def\Some{\Quantifier\exists}\def\Function{%
+\Quantifier\lambda}\def\Product{\Quantifier\Pi}\def\Sum{\Quantifier\Sigma}%
+\def\TheOne{\Quantifier\iota}\def\Least{\Quantifier\mu}\def\Greatest{%
+\Quantifier\nu}%%
+%% There are several notations for substitution.
+%% After writing $a[x:=b]$ throughout my book I~thought I~might change to
+%% $[b/x]^*a$.
+%% This macro reads the source in the first form and prints in the second.
+%% If you use it you can, like me, defer the decision about
+%% which notation to use until the final stages, doing
+%% \begin{quote}
+%% \verb/\renewcommand{\Subst}{\plainsubstitution}/
+%% \end{quote}
+%% if you finally decide on making substitution act on the right.
+%% This is already an improvement on the literal text, because it
+%% automatically enlarges the brackets according to the text inside.
+%% \verb/\Subst/ itself is (following my book)
+%% defined in terms of the action of a context morphism (\verb/\CtxtMor/)
+%% on a term. Again you can do
+%% \begin{quote}
+%% \verb/\renewcommand{\CtxtMor}{\plaincontextmorphism}/
+%% \end{quote}
+%% for something simpler.
+%% This macro interprets its argument as a comma-separated list
+%% of items in the form $x:=b$, which it switches to $b/x$.
+\def\swappingsubstitution#1[#2]{{\CtxtMor[#2]^*{#1}}}\def
+\swappingcontextmorphism[#1]{{\let\pb@J\empty\left[\pb@H#1,[],\/\right]}}\def
+\pb@H#1,{\def\next{#1}\ifx\next\pb@K\else\pb@J\let\pb@J,\pb@I#1:=:=,%
+\expandafter\pb@H\fi}\def\pb@I#1:=#2:=#3,{{\def\next{#2}\ifx\next\empty\else{%
+#2}/\fi{#1} }}\def\pb@K{[]}\def\Subst{\swappingsubstitution}\def\CtxtMor{%
+\swappingcontextmorphism}%%
+%% The simple versions.
+\def\plainsubstitution#1#2{{#1}{\left[{#2}\right]}}\def\plaincontextmorphism#%
+1{{\left[#1\right]}}\newbox\pb@L\newdimen\pb@T\newdimen\pb@U\newdimen\pb@M
+\newdimen\pb@N\newdimen\pb@O\newdimen\pb@P\newdimen\pb@Q\newdimen\pb@R
+\newdimen\pb@S\def\pb@V#1#2{\relax\ifdim#1<#2\relax#1=#2\relax\fi}\count@
+\year\multiply\count@12 \advance\count@\month\ifnum\count@> 23966 \message{%
+because this one has expired and will no longer work!}\endinput\fi%%
+\def\proofbox{\relax\ifmmode\let\next\pb@a\else\let\next\pb@b\ifhmode\ifinner
+\let\next\pb@a\fi\fi\fi\next\global\prooflinetotal\@ne\boxmaxdepth\maxdimen
+\def\[{\pb@w\pb@f\pb@W}\def\({\pb@w\pb@f\pb@X}\def\proofbox{\[}\let\lbl\pb@y
+\def\"##1"{\pb@y{##1}}\def\:{\pb@v\proofboxproposition\displaystyle}\def\={%
+\pb@v\proofboxreason}\def\-{\pb@v\proofboxuse}\def\\{\pb@w\pb@u}\let\+\pb@c
+\let\*\pb@c\let\]\pb@c\pb@p\pb@s}\def\endproofbox{\pb@q\pb@IA\box\pb@L\egroup
+}\def\pb@W{\let\+\pb@d\let\*\pb@d\def\){\pb@e\[\)}\let\]\pb@Y\proofcolumns\z@
+}\def\pb@X{\proofcolumns\@ne\def\+{\pb@j\pb@l}\def\*{\pb@j\pb@m}\def\]{\pb@e
+\(\]}\let\)\pb@Y}\def\pb@Y{\pb@o\pb@u}\def\pb@a{\hbox\bgroup}\def\pb@b{$$%
+\kern-\displayindent\hbox to\hsize\bgroup\proofboxfullwidth\hsize\aftergroup$%
+\aftergroup$}\def\pb@c{\errmessage{Box proofs: \string\+, \string\*, \string
+\) and \string\] may not be used at the top level}}\def\pb@d{\errmessage{Box
+proofs: enclose \string\+ and \string\* in \string\(\string\), not \string\[%
+\string\]}}\def\pb@e#1#2{\errmessage{Box proofs: \string#1 closed by \string#%
+2}\pb@Y}\def\pb@f#1{\setbox\pb@L\hbox\bgroup#1\let\pb@g\pb@n\let
+\enclosingproofline\@currentlabel\edef\pb@h{\the\prooflinetotal}\let\pb@i
+\pb@h\pb@O\z@\pb@M\z@\pb@N-\maxdimen\pb@P\z@\pb@p\pb@t}\def\pb@j#1{\pb@q\pb@k
+\let\pb@g#1\advance\proofcolumns\@ne\global\prooflinetotal\pb@h
+\leftmostproofboxfalse\pb@p\pb@t}\def\pb@k{\pb@g\pb@V\pb@M{\wd\pb@L}\advance
+\pb@O\wd\pb@L\ifnum\pb@i<\prooflinetotal\edef\pb@i{\the\prooflinetotal}\fi
+\ifdim\pb@N<\dp\pb@L\pb@N\dp\pb@L\pb@P\pb@Q\fi\setbox\z@\hbox{%
+\proofboxtopside}\wd\z@\z@\box\z@\setbox\z@\hbox{\proofboxbottomside}\wd\z@
+\z@\box\z@\kern\pb@R\box\pb@L\kern\pb@S}\def\pb@l{\vtop{\proofboxorseparator}%
+\penalty\thr@@}\def\pb@m{\vtop{\proofboxrightside}\kern\proofboxseparation
+\vtop{\proofboxleftside}\penalty\tw@}\def\pb@n{\pb@T\pb@R\setbox\z@\vtop{%
+\proofboxleftside}\dimen@\wd\z@\advance\pb@T\dimen@\advance\pb@T
+\proofboxseparation\kern-\pb@T\kern\proofboxseparation\box\z@\penalty\@ne}%
+\def\pb@o{\pb@q\pb@k\setbox\z@\vtop{\proofboxrightside}\global\advance\pb@S
+\wd\z@\box\z@\global\advance\pb@S\proofboxseparation\kern\proofboxseparation
+\global\prooflinetotal\pb@i\global\pb@R\pb@T\global\pb@Q\pb@P\ifnum
+\proofcolumns<\@ne\proofcolumns\@ne\fi\penalty\proofcolumns\kern-\pb@M\kern
+\pb@M\kern-\pb@O\kern\pb@O\kern-\pb@S\penalty\@ne\egroup\pb@r}\def\pb@p#1{%
+\setbox\pb@L\vtop\bgroup\baselineskip\proofboxbaselineskip\prooflineinbox\@ne
+\pb@T\z@\pb@U\z@#1\pb@u}\def\pb@q{\pb@w\global\pb@R\pb@T\global\pb@S\pb@U
+\egroup}\def\pb@r{\pb@V\pb@T\pb@R\pb@V\pb@U\pb@S\box\pb@L\prevdepth\pb@Q}\def
+\pb@s{}\def\pb@t{}\def\pb@u{\edef\@currentlabel{\theproofline}\let\label@name
+\@currentlabel\setbox\proofboxproposition\box\voidb@x\setbox\proofboxreason
+\box\voidb@x\setbox\proofboxuse\box\voidb@x\setbox\proofboxvariables\hbox
+\bgroup\let\pb@z\pb@AA\let\pb@w\pb@x$}\def\pb@v#1{$\egroup\setbox#1\hbox
+\bgroup\let\pb@z\pb@AA$}\def\pb@w{$\egroup\global\advance\prooflinetotal\@ne
+\advance\prooflineinbox\@ne\setbox\pb@L\hbox{\setbox\z@\hbox{%
+\proofboxmakeleftcolumn}\global\pb@R\wd\z@\kern-\pb@R\box\z@\hbox{%
+\proofboxmakemiddlecolumn}\setbox\z@\hbox{\proofboxmakerightcolumn}\global
+\pb@S\wd\z@\box\z@\kern-\pb@S\penalty\tw@}\global\pb@Q\dp\pb@L\pb@r}\def\pb@x
+{$\egroup}\def\pb@y#1{\aftergroup\pb@z\expandafter\aftergroup\csname r@#1%
+\endcsname}\def\pb@z#1{\edef#1{{\@currentlabel}{}}\expandafter\pb@@A\string#1%
+\\}\expandafter\def\expandafter\pb@@A\string\r@#1\\{\def\label@name{#1}}\def
+\pb@AA#1{\aftergroup\pb@z\aftergroup#1}\expandafter\def\csname r@-\endcsname{%
+{\previous@label}{}}\dimendef\pb@BA=\@ne\dimendef\pb@CA=\tw@\dimendef\pb@DA=%
+\thr@@\dimendef\pb@EA=4 \dimendef\pb@FA=5 \dimendef\pb@GA=6 \chardef\pb@HA=9
+\def\pb@IA{\pb@GA\proofboxfullwidth\pb@T\proofboxleftmargin\pb@V\pb@T\pb@R
+\advance\pb@GA-\pb@T\pb@U\proofboxrightmargin\pb@V\pb@U\pb@S\advance\pb@GA-%
+\pb@U\pb@V\pb@GA{\wd\pb@L}\pb@JA}\def\pb@JA{\setbox\pb@L\vtop{\unvbox\pb@L
+\loop\skip@\lastskip\unskip\setbox\pb@HA\lastbox\ifhbox\pb@HA\pb@KA\repeat
+\unvbox\pb@L\unskip}}\def\pb@KA{\pb@DA\dp\pb@HA\pb@EA\ht\pb@HA\pb@CA\wd\pb@HA
+\setbox\pb@HA\hbox{\unhbox\pb@HA\count@\lastpenalty\unpenalty\unkern\ifodd
+\count@\pb@LA\else\setbox\thr@@\lastbox\setbox\tw@\lastbox\setbox\@ne\lastbox
+\unkern\hbox to\pb@T{\unhbox\@ne}\hbox to\pb@GA{\unhbox\tw@}\hbox to\pb@U{%
+\unhbox\thr@@}\fi}\dp\pb@HA\pb@DA\ht\pb@HA\pb@EA\setbox\pb@L\vtop{\box\pb@HA
+\nointerlineskip\vskip\skip@\unvbox\pb@L}}\def\pb@LA{\pb@O\lastkern\unkern
+\unkern\pb@M\lastkern\unkern\unkern\proofcolumns\lastpenalty\unpenalty\pb@FA
+\pb@T\ifnum\@ne=\proofcolumns\let\pb@MA\pb@NA\else\advance\pb@GA-\pb@CA\pb@BA
+\pb@GA\advance\pb@GA\pb@O\ifdim\pb@GA<\proofcolumns\pb@M\divide\pb@BA
+\proofcolumns\let\pb@MA\pb@PA\else\divide\pb@GA\proofcolumns\let\pb@MA\pb@OA
+\fi\fi\dimen@\lastkern\unkern\setbox\@ne\lastbox\pb@RA\setbox\pb@HA\hbox{\box
+\@ne\kern\dimen@}\advance\pb@U-\wd\pb@HA\unkern\loop\setbox\pb@L\lastbox\pb@T
+\lastkern\unkern\setbox\tw@\lastbox\setbox\thr@@\lastbox\count@\lastpenalty
+\unpenalty\pb@MA\pb@JA\setbox\@ne\vbox{\offinterlineskip\pb@QA\thr@@\vfil
+\pb@QA\tw@}\pb@RA\pb@TA{\box\@ne\box\pb@L}\ifnum\count@>\@ne\pb@SA\pb@U
+\lastkern\unkern\repeat\unhbox\pb@HA}\def\pb@NA{\pb@T\pb@FA\setbox\@ne
+\lastbox\advance\pb@T-\wd\@ne\dimen@\lastkern\unkern\unkern\kern\dimen@\pb@RA
+\box\@ne\advance\pb@T-\dimen@}\def\pb@OA{\ifnum\@ne=\count@\pb@NA\fi}\def
+\pb@PA{\pb@GA\wd\pb@L\advance\pb@GA\pb@BA\pb@OA}\def\pb@QA#1{\setbox#1\hbox to%
+\wd\pb@L{\unhbox#1}\wd#1\z@\box#1\relax}\def\pb@RA{\setbox\@ne\vbox to\pb@EA{%
+\offinterlineskip\vskip-\proofboxseparation\unvbox\@ne\vskip-%
+\proofboxseparation\setbox\z@\null\ht\z@-\pb@DA\dp\z@\pb@DA\box\z@}}\def
+\pb@SA{\setbox\@ne\lastbox\pb@RA\pb@TA{\box\@ne}\ifodd\count@\else\dimen@
+\lastkern\unkern\setbox\@ne\lastbox\pb@RA\pb@TA{\box\@ne\kern\dimen@}\fi}\def
+\pb@TA#1{\setbox\pb@HA\hbox{#1\unhbox\pb@HA}}\let\+\pb@A\proofboxrestoreat
+\endinput\def\x{}%%
+%% \end{document}
+% \fi
diff --git a/obsolete/macros/latex/contrib/ar/README b/obsolete/macros/latex/contrib/ar/README
new file mode 120000
index 0000000000..7270a26076
--- /dev/null
+++ b/obsolete/macros/latex/contrib/ar/README
@@ -0,0 +1 @@
+ar.txt \ No newline at end of file
diff --git a/obsolete/macros/latex/contrib/ar/ar.sty b/obsolete/macros/latex/contrib/ar/ar.sty
new file mode 100644
index 0000000000..7b0d5e065a
--- /dev/null
+++ b/obsolete/macros/latex/contrib/ar/ar.sty
@@ -0,0 +1,39 @@
+%
+% This package is for using the aspect ratio symbol in math mode and in
+% text mode by means of the command \AR.
+%
+% It is supposed to work both with LaTeX209 and LaTeXe
+% It requires the METAFONT files ar5.mf, ar6.mf, ar7.mf, ar8.mf, ar9.mf,
+% ar10.mf, ar12.mf
+%
+\ifx\documentclass\undefined
+% With LaTeX209 the symbol is available in just one size (by default)
+% but the user can edit the next line in order to get the size s/he wants
+ \newfont{\ar}{ar10 at 10pt}
+ \load{\normalsize}{\ar}
+ \def\AR{\mbox{\ar A}}
+\else
+% While with LaTeXe all standard sizes are available
+% (no bold version available...sorry!)
+ \DeclareFontFamily{U}{ar}{}
+ \DeclareFontShape{U}{ar}{m}{it}%
+ {<5><6><7><8><9>gen*ar%
+ <10><10.95>ar10%
+ <12><14.4><17.28><20.74><24.88>ar12%
+ }{}
+ \DeclareFontShape{U}{ar}{b}{it}%
+ {<->ssub*ar/m/it}{}
+ \DeclareFontShape{U}{ar}{bx}{it}%
+ {<->ssub*ar/m/it}{}
+ \DeclareMathAlphabet{\mar}{U}{ar}{m}{it}%
+ \SetMathAlphabet{\mar}{normal}{U}{ar}{m}{it}%
+ \SetMathAlphabet{\mar}{bold}{U}{ar}{bx}{it}% actually uses medium series
+ \if@compatibility
+ \def\tar{\fontencoding{U}\fontfamily{ar}\itshape}
+ \DeclareRobustCommand{\ar}{\ifmmode\let\cf@ar\mar\else\let\cf@ar\tar\fi\cf@ar}
+ \else
+ \DeclareOldFontCommand{\ar}{\fontencoding{U}\fontfamily{ar}\itshape}{\mar}%
+ \fi
+ \DeclareRobustCommand{\AR}{{\ar A}}
+\fi
+\endinput
diff --git a/obsolete/macros/latex/contrib/ar/ar.txt b/obsolete/macros/latex/contrib/ar/ar.txt
new file mode 100644
index 0000000000..d7d11397e2
--- /dev/null
+++ b/obsolete/macros/latex/contrib/ar/ar.txt
@@ -0,0 +1,125 @@
+File: ar.txt
+Purpose: Description of the ar font and package bundle
+Author: Claudio Beccari, Politecnico di Torino, Turin, Italy
+E-mail: beccari@polito.it
+Date: 21 april 1998 (on the 2751st anniversary of Rome)
+
+
+Copyright 1998,1999,2000 Claudio Beccari
+
+The programs contained in this bundle can be redistributed and/or
+modified under the terms of the LaTeX Project Public License Distributed
+from CTAN archives in directory macros/latex/base/lppl.txt; either
+version 1 of the License, or any later version.
+
+
+
+The ar font and package bundle is used to insert the "aspect ratio" symbol
+in any text and formula dealing with (presumably) aeronautics. The "aspect
+ratio" symbol is a ligature among a capital A and a capital R, much as the
+\AE command produces a ligature among a capital A and a capital E. The
+ligature AR as a means of indicating the "aspect ratio" is meaningful only
+in mathematics, so that only the inclined (italic) form is available,
+although the METAFONT source statements were written in such a way as to
+produce the symbol in any font family, series and shape.
+
+The .mf files are for the generation of the AR ligature in the same sizes as
+the standard math-italic fonts; the ar.sty package (or option in terms of
+the old LaTeX209 terminology) is for the necessary definitions. In practice
+as a final user you should start your LaTeXe document with:
+
+\documentclass[...]{book}% or whatever other document class
+\usepackage{ar}
+...
+\begin{document}
+...
+\end{document}
+
+If you prefer to use LaTeX in its 209 version or in compatibility mode, you
+start with:
+
+\documentstyle[...,ar]{book}% or whatever other document style
+...
+\begin{document}
+...
+\end{document}
+
+The "aspect ratio" symbol is simply obtained by using the command
+
+\AR
+
+indifferently in math mode or in text mode.
+
+Remember, though, that with true LaTeX209 the \AR command produces a single
+sized symbol (by default 10pt), and if you want another size you have to
+edit ar.sty and change the string
+
+at 10pt
+
+with, say,
+
+at 12pt
+
+This is so rudimentary that you'd better start using LaTeXe, where all the
+size changes are correctly dealt with by the New Font Selection Scheme
+(NFSS) without your intervention.
+
+
+The bundle contains the following files:
+ ar5.mf
+ ar6.mf
+ ar7.mf
+ ar8.mf
+ ar9.mf
+ ar10.mf
+ ar12.mf
+ ar.sty
+ ar.txt
+
+Move the .mf file somewhere where METAFONT can find them; this depends on
+the TeX-METAFONT system you are using, but if you cope with the official
+TDS directory scheme, you might place them in
+
+\texmf\fonts\source\local\ar
+
+(you should probably create/add the "branch" local\ar).
+
+Similarly move ar.sty in a directory searched by LaTeX, possibly, with the
+official TDS system, in
+
+\texmf\tex\latex\misc
+
+If your system requires it (as with MikTeX, for instance) you might choose
+to run such an application as
+
+configure -u
+
+in order to let the executables know about the files you added and where
+they are.
+
+Depending on the system you are using, at this point you might need to
+generate the font .tfm and .pk files, but if you are using a modern system
+such as MikTeX, for example, you need not worry any more and you can
+directly use the ar.sty package. As soon as the latex executable finds a
+reference to \AR, it controls the existance of the suitable .tfm file, and,
+should it be missing (not yet generated), it shells out to another
+application, maketfm, that produces the necessary file and moves it in the
+proper subdirectory. Similarly when you preview and/or print your document,
+the accompanying drivers (yap, dvips, etc.) run the application that
+produces the .pk files suited for the screen and/or the printer pixel
+density.
+
+If you do not have such modern tools, it is necessary to run METAFONT by
+hand or by means of a script or batch or command file in order to produce
+the fundamental .tfm files and the pixel files suited to your printer and/or
+screen; your scripts should move the .tfm files where they belong, and the
+.pk files where your drivers can find them. Please read the relevant
+documentation that acompanies your software; it is difficult to give error
+free instructions valid for any operating system, any system configuration,
+and any software.
+
+
+Happy LaTeXing!
+
+
+
diff --git a/obsolete/macros/latex/contrib/ar/ar10.mf b/obsolete/macros/latex/contrib/ar/ar10.mf
new file mode 100644
index 0000000000..201a8fadd5
--- /dev/null
+++ b/obsolete/macros/latex/contrib/ar/ar10.mf
@@ -0,0 +1,142 @@
+% Computer Modern Roman 10 point
+if unknown cmbase: input cmbase fi
+
+font_identifier:="AR"; font_size 10pt#;
+
+u#:=20/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; % height of tallest characters
+asc_height#:=250/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+fig_height#:=232/36pt#; % height of numerals
+x_height#:=155/36pt#; % height of lowercase without ascenders
+math_axis#:=90/36pt#; % axis of symmetry for math symbols
+bar_height#:=87/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=70/36pt#; % depth of lowercase descenders
+
+crisp#:=0pt#; % diameter of serif corners
+tiny#:=8/36pt#; % diameter of rounded corners
+fine#:=7/36pt#; % diameter of sharply rounded corners
+thin_join#:=7/36pt#; % width of extrafine details
+hair#:=9/36pt#; % lowercase hairline breadth
+stem#:=25/36pt#; % lowercase stem breadth
+curve#:=30/36pt#; % lowercase curve breadth
+ess#:=27/36pt#; % breadth in middle of lowercase s
+flare#:=33/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=38/36pt#; % diameter of dots
+cap_hair#:=11/36pt#; % uppercase hairline breadth
+cap_stem#:=32/36pt#; % uppercase stem breadth
+cap_curve#:=37/36pt#; % uppercase curve breadth
+cap_ess#:=35/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.4pt#; % thickness of lines in math symbols
+
+dish#:=1/36pt#; % amount erased at top or bottom of serifs
+bracket#:=20/36pt#; % vertical distance from serif base to tangent
+jut#:=28/36pt#; % protrusion of lowercase serifs
+cap_jut#:=37/36pt#; % protrusion of uppercase serifs
+beak_jut#:=10/36pt#; % horizontal protrusion of beak serifs
+beak#:=70/36pt#; % vertical protrusion of beak serifs
+vair#:=8/36pt#; % vertical diameter of hairlines
+notch_cut#:=10pt#; % maximum breadth above or below notches
+bar#:=11/36pt#; % lowercase bar thickness
+slab#:=11/36pt#; % serif and arm thickness
+cap_bar#:=11/36pt#; % uppercase bar thickness
+cap_band#:=11/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=10pt#; % max breadth above/below uppercase notches
+serif_drop#:=4/36pt#; % vertical drop of sloped serifs
+stem_corr#:=1/36pt#; % for small refinements of stem breadth
+vair_corr#:=1/36pt#; % for small refinements of hairline height
+apex_corr#:=0pt#; % extra width at diagonal junctions
+
+o#:=8/36pt#; % amount of overshoot for curves
+apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=0.25; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+beak_darkness:=11/30; % fraction of triangle inside beak serifs
+ligs:=2; % level of ligatures to be included
+
+square_dots:=false; % should dots be square?
+hefty:=false; % should we try hard not to be overweight?
+serifs:=true; % should serifs and bulbs be attached?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+low_asterisk:=false; % should the asterisk be centered at the axis?
+math_fitting:=true; % should math-mode spacing be used?
+
+mode_setup; font_setup;
+
+
+cmchar "The ligature AR";
+beginchar("A",if serifs: 12u#+.5max(2u#,cap_curve#)
+ else:12.5u#-.5width_adj# fi,cap_height#,0);
+italcorr .75cap_height#*slant- if serifs: 1.75 else: .5 fi\\ u#;
+adjust_fit(6u#+cap_serif_fit#,0);
+pickup tiny.nib; pos1(cap_stem',0); pos2(cap_stem',0);
+lft x1l=lft x2l=hround max(2u,3u-.5cap_stem'); top y1=h; bot y2=0;
+filldraw stroke z1e--z2e; % stem
+penpos3(cap_band,90); penpos4(cap_band,90);
+penpos5(cap_curve if hefty:-3stem_corr fi,0);
+penpos6(vair,-90); penpos7(vair,-90);
+z3r=top z1; y4=y3; y5=.5[y4l,y6l]; y6=y7;
+x7=x2; y7l=vround(.5h+.5vair); x4=x6;
+if serifs: x4=.5w-.5u; x5r=hround(w-2.25u);
+else: x4=.5w+.5u; x5r=hround(w-u); fi
+x4l:=x6l:=x4-.125cap_curve;
+fill stroke z3e..pulled_arc.e(4,5) & pulled_arc.e(5,6)..z7e; % lobe
+if serifs: pos6'(vair,-90); pos0(cap_stem,180);
+ pos8(cap_curve,180); pos9(vair,-90); pos10(hair,0);
+ z6'=z6; lft x0r=lft x8r=hround(x5-2/3u-.5cap_curve);
+ y8=1/3[y2,y7]; y0=3/5[y2,y7]; x9=.5[x8l,x10r];
+ bot y9r=-o; rt x10r=hround(w-.05u); y10=1/4[y2,y7];
+ filldraw stroke z6'e{right}..z0e---z8e....z9e{right}..z10e{up}; % tail
+ dish_serif(2,1,c,1/3,cap_jut,d,1/3,cap_jut); % lower serif
+else: penpos8(cap_stem-2stem_corr,0); penpos9(cap_stem,0);
+ x8=x6+.5u; y8=y6; x9r=hround(w-.5u); y9=0;
+ fill z8l--diag_end(8l,9l,.5,1,9r,8r)--z8r--cycle; fi % tail
+left_stem=if monospace:fudged.hair else: cap_hair fi if hefty: -3stem_corr fi;
+outer_jut=.8cap_jut; x11l=l+letter_fit+outer_jut+.5u; y11=0;
+x12=x1l-apex_corr-if monospace:2 fi\\u; y12=h;
+alpha=diag_ratio(1,.5left_stem,y12-y11,x12-x11l);
+penpos11(alpha*left_stem,0); penpos12(alpha*left_stem,0);
+fill diag_end(12l,11l,1,1,11r,12r)
+ --diag_end(11r,12r,1,1,12l,11l)--cycle; % diagonal
+y15=h-slab; z15=whatever[z11,z12];
+fill z15--(x1,y15)--(x1,h)--z12--cycle; % link
+penpos13(whatever,angle(z2-z1)); z13=whatever[z11,z12];
+penpos14(cap_band,90); x14=x7; y13l=y14l; y13r=y14r;
+if hefty: y14r=.4h; else: y14=y7; fi
+penstroke z13e--z14e; % bar line
+if serifs: numeric inner_jut; pickup tiny.nib;
+ prime_points_inside(11,12);
+ if rt x11'r+cap_jut+.5u+1<=lft x2l-.75cap_jut:
+ inner_jut=cap_jut;
+ else:
+ rt x11'r+inner_jut+.5u+1=lft x2l-.75inner_jut;
+ fi
+ dish_serif(11',12,i,1/2,outer_jut,j,.6,inner_jut)(dark); % lower left serif
+ nodish_serif(1,2,a,1/3,cap_jut+x1l-x12,b,1/3,.5cap_jut); % upper serif
+fi
+math_fit(0,.75ic#);
+penlabels(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); endchar;
+
+font_slant slant; font_x_height x_height#;
+if monospace: font_normal_space 9u#; % no stretching or shrinking
+ font_quad 18u#;
+ font_extra_space 9u#;
+else: font_normal_space 6u#+2letter_fit#;
+ font_normal_stretch 3u#; font_normal_shrink 2u#;
+ font_quad 18u#+4letter_fit#;
+ font_extra_space 2u#;
+fi
+
+bye.
+
diff --git a/obsolete/macros/latex/contrib/ar/ar12.mf b/obsolete/macros/latex/contrib/ar/ar12.mf
new file mode 100644
index 0000000000..1a3e7e82fa
--- /dev/null
+++ b/obsolete/macros/latex/contrib/ar/ar12.mf
@@ -0,0 +1,143 @@
+% Computer Modern Roman 12 point
+if unknown cmbase: input cmbase fi
+
+font_identifier:="AR"; font_size 12pt#;
+
+u#:=23.5/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=5.8/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=324/36pt#; % height of tallest characters
+asc_height#:=300/36pt#; % height of lowercase ascenders
+cap_height#:=295.2/36pt#; % height of caps
+fig_height#:=278.4/36pt#; % height of numerals
+x_height#:=186/36pt#; % height of lowercase without ascenders
+math_axis#:=108/36pt#; % axis of symmetry for math symbols
+bar_height#:=104.4/36pt#; % height of crossbar in lowercase e
+comma_depth#:=84/36pt#; % depth of comma below baseline
+desc_depth#:=84/36pt#; % depth of lowercase descenders
+
+crisp#:=8/36pt#; % diameter of serif corners
+tiny#:=8/36pt#; % diameter of rounded corners
+fine#:=7/36pt#; % diameter of sharply rounded corners
+thin_join#:=7.5/36pt#; % width of extrafine details
+hair#:=9.5/36pt#; % lowercase hairline breadth
+stem#:=27/36pt#; % lowercase stem breadth
+curve#:=32/36pt#; % lowercase curve breadth
+ess#:=30/36pt#; % breadth in middle of lowercase s
+flare#:=35/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=42/36pt#; % diameter of dots
+cap_hair#:=11.5/36pt#; % uppercase hairline breadth
+cap_stem#:=33/36pt#; % uppercase stem breadth
+cap_curve#:=38/36pt#; % uppercase curve breadth
+cap_ess#:=32/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.44pt#; % thickness of lines in math symbols
+
+dish#:=1/36pt#; % amount erased at top or bottom of serifs
+bracket#:=24/36pt#; % vertical distance from serif base to tangent
+jut#:=35/36pt#; % protrusion of lowercase serifs
+cap_jut#:=41/36pt#; % protrusion of uppercase serifs
+beak_jut#:=11.4/36pt#; % horizontal protrusion of beak serifs
+beak#:=84/36pt#; % vertical protrusion of beak serifs
+vair#:=8.5/36pt#; % vertical diameter of hairlines
+notch_cut#:=12pt#; % maximum breadth above or below notches
+bar#:=12.5/36pt#; % lowercase bar thickness
+slab#:=12.5/36pt#; % serif and arm thickness
+cap_bar#:=12.5/36pt#; % uppercase bar thickness
+cap_band#:=12.5/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=12pt#; % max breadth above/below uppercase notches
+serif_drop#:=4.8/36pt#; % vertical drop of sloped serifs
+stem_corr#:=1/36pt#; % for small refinements of stem breadth
+vair_corr#:=1/36pt#; % for small refinements of hairline height
+apex_corr#:=0pt#; % extra width at diagonal junctions
+
+o#:=9/36pt#; % amount of overshoot for curves
+apex_o#:=9/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=.25; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=-0.2; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+beak_darkness:=11/30; % fraction of triangle inside beak serifs
+ligs:=2; % level of ligatures to be included
+
+square_dots:=false; % should dots be square?
+hefty:=false; % should we try hard not to be overweight?
+serifs:=true; % should serifs and bulbs be attached?
+monospace:=false; % should all characters have the same width?
+variant_g:=true; % should an italic-style g be used?
+low_asterisk:=false; % should the asterisk be centered at the axis?
+math_fitting:=true; % should math-mode spacing be used?
+
+mode_setup; font_setup;
+
+
+cmchar "The ligature AR";
+beginchar("A",if serifs: 12u#+.5max(2u#,cap_curve#)
+ else:12.5u#-.5width_adj# fi,cap_height#,0);
+italcorr .75cap_height#*slant- if serifs: 1.75 else: .5 fi\\ u#;
+adjust_fit(6u#+cap_serif_fit#,0);
+pickup tiny.nib; pos1(cap_stem',0); pos2(cap_stem',0);
+lft x1l=lft x2l=hround max(2u,3u-.5cap_stem'); top y1=h; bot y2=0;
+filldraw stroke z1e--z2e; % stem
+penpos3(cap_band,90); penpos4(cap_band,90);
+penpos5(cap_curve if hefty:-3stem_corr fi,0);
+penpos6(vair,-90); penpos7(vair,-90);
+z3r=top z1; y4=y3; y5=.5[y4l,y6l]; y6=y7;
+x7=x2; y7l=vround(.5h+.5vair); x4=x6;
+if serifs: x4=.5w-.5u; x5r=hround(w-2.25u);
+else: x4=.5w+.5u; x5r=hround(w-u); fi
+x4l:=x6l:=x4-.125cap_curve;
+fill stroke z3e..pulled_arc.e(4,5) & pulled_arc.e(5,6)..z7e; % lobe
+if serifs: pos6'(vair,-90); pos0(cap_stem,180);
+ pos8(cap_curve,180); pos9(vair,-90); pos10(hair,0);
+ z6'=z6; lft x0r=lft x8r=hround(x5-2/3u-.5cap_curve);
+ y8=1/3[y2,y7]; y0=3/5[y2,y7]; x9=.5[x8l,x10r];
+ bot y9r=-o; rt x10r=hround(w-.05u); y10=1/4[y2,y7];
+ filldraw stroke z6'e{right}..z0e---z8e....z9e{right}..z10e{up}; % tail
+ dish_serif(2,1,c,1/3,cap_jut,d,1/3,cap_jut); % lower serif
+else: penpos8(cap_stem-2stem_corr,0); penpos9(cap_stem,0);
+ x8=x6+.5u; y8=y6; x9r=hround(w-.5u); y9=0;
+ fill z8l--diag_end(8l,9l,.5,1,9r,8r)--z8r--cycle; fi % tail
+left_stem=if monospace:fudged.hair else: cap_hair fi if hefty: -3stem_corr fi;
+outer_jut=.8cap_jut; x11l=l+letter_fit+outer_jut+.5u; y11=0;
+x12=x1l-apex_corr-if monospace:2 fi\\u; y12=h;
+alpha=diag_ratio(1,.5left_stem,y12-y11,x12-x11l);
+penpos11(alpha*left_stem,0); penpos12(alpha*left_stem,0);
+fill diag_end(12l,11l,1,1,11r,12r)
+ --diag_end(11r,12r,1,1,12l,11l)--cycle; % diagonal
+y15=h-slab; z15=whatever[z11,z12];
+fill z15--(x1,y15)--(x1,h)--z12--cycle; % link
+penpos13(whatever,angle(z2-z1)); z13=whatever[z11,z12];
+penpos14(cap_band,90); x14=x7; y13l=y14l; y13r=y14r;
+if hefty: y14r=.4h; else: y14=y7; fi
+penstroke z13e--z14e; % bar line
+if serifs: numeric inner_jut; pickup tiny.nib;
+ prime_points_inside(11,12);
+ if rt x11'r+cap_jut+.5u+1<=lft x2l-.75cap_jut:
+ inner_jut=cap_jut;
+ else:
+ rt x11'r+inner_jut+.5u+1=lft x2l-.75inner_jut;
+ fi
+ dish_serif(11',12,i,1/2,outer_jut,j,.6,inner_jut)(dark); % lower left serif
+ nodish_serif(1,2,a,1/3,cap_jut+x1l-x12,b,1/3,.5cap_jut); % upper serif
+fi
+math_fit(0,.75ic#);
+penlabels(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); endchar;
+
+font_slant slant; font_x_height x_height#;
+if monospace: font_normal_space 9u#; % no stretching or shrinking
+ font_quad 18u#;
+ font_extra_space 9u#;
+else: font_normal_space 6u#+2letter_fit#;
+ font_normal_stretch 3u#; font_normal_shrink 2u#;
+ font_quad 18u#+4letter_fit#;
+ font_extra_space 2u#;
+fi
+
+bye.
+
+
diff --git a/obsolete/macros/latex/contrib/ar/ar5.mf b/obsolete/macros/latex/contrib/ar/ar5.mf
new file mode 100644
index 0000000000..6701004183
--- /dev/null
+++ b/obsolete/macros/latex/contrib/ar/ar5.mf
@@ -0,0 +1,145 @@
+% Computer Modern Roman 5 point
+if unknown cmbase: input cmbase fi
+
+font_identifier:="AR"; font_size 5pt#;
+
+
+u#:=12.5/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=2/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=10/36pt#; % extra space added to all sidebars
+
+body_height#:=135/36pt#; % height of tallest characters
+asc_height#:=125/36pt#; % height of lowercase ascenders
+cap_height#:=123/36pt#; % height of caps
+fig_height#:=116/36pt#; % height of numerals
+x_height#:=77.5/36pt#; % height of lowercase without ascenders
+math_axis#:=45/36pt#; % axis of symmetry for math symbols
+bar_height#:=43.5/36pt#; % height of crossbar in lowercase e
+comma_depth#:=35/36pt#; % depth of comma below baseline
+desc_depth#:=35/36pt#; % depth of lowercase descenders
+
+crisp#:=6/36pt#; % diameter of serif corners
+tiny#:=6/36pt#; % diameter of rounded corners
+fine#:=5/36pt#; % diameter of sharply rounded corners
+thin_join#:=5/36pt#; % width of extrafine details
+hair#:=7.5/36pt#; % lowercase hairline breadth
+stem#:=15.5/36pt#; % lowercase stem breadth
+curve#:=17.5/36pt#; % lowercase curve breadth
+ess#:=12/36pt#; % breadth in middle of lowercase s
+flare#:=18.5/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=22/36pt#; % diameter of dots
+cap_hair#:=8/36pt#; % uppercase hairline breadth
+cap_stem#:=18.5/36pt#; % uppercase stem breadth
+cap_curve#:=20.5/36pt#; % uppercase curve breadth
+cap_ess#:=13.5/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.28pt#; % thickness of lines in math symbols
+
+dish#:=.7/36pt#; % amount erased at top or bottom of serifs
+bracket#:=10/36pt#; % vertical distance from serif base to tangent
+jut#:=17/36pt#; % protrusion of lowercase serifs
+cap_jut#:=20/36pt#; % protrusion of uppercase serifs
+beak_jut#:=6/36pt#; % horizontal protrusion of beak serifs
+beak#:=35/36pt#; % vertical protrusion of beak serifs
+vair#:=6/36pt#; % vertical diameter of hairlines
+notch_cut#:=5pt#; % maximum breadth above or below notches
+bar#:=8/36pt#; % lowercase bar thickness
+slab#:=8/36pt#; % serif and arm thickness
+cap_bar#:=8/36pt#; % uppercase bar thickness
+cap_band#:=8/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=5pt#; % max breadth above/below uppercase notches
+serif_drop#:=2/36pt#; % vertical drop of sloped serifs
+stem_corr#:=.7/36pt#; % for small refinements of stem breadth
+vair_corr#:=.5/36pt#; % for small refinements of hairline height
+apex_corr#:=0pt#; % extra width at diagonal junctions
+
+o#:=4/36pt#; % amount of overshoot for curves
+apex_o#:=4/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=.25; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=1; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+beak_darkness:=11/30; % fraction of triangle inside beak serifs
+ligs:=1; % level of ligatures to be included
+
+square_dots:=false; % should dots be square?
+hefty:=false; % should we try hard not to be overweight?
+serifs:=true; % should serifs and bulbs be attached?
+monospace:=false; % should all characters have the same width?
+variant_g:=true; % should an italic-style g be used?
+low_asterisk:=false; % should the asterisk be centered at the axis?
+math_fitting:=true; % should math-mode spacing be used?
+
+
+mode_setup; font_setup;
+
+
+cmchar "The ligature AR";
+beginchar("A",if serifs: 12u#+.5max(2u#,cap_curve#)
+ else:12.5u#-.5width_adj# fi,cap_height#,0);
+italcorr .75cap_height#*slant- if serifs: 1.75 else: .5 fi\\ u#;
+adjust_fit(6u#+cap_serif_fit#,0);
+pickup tiny.nib; pos1(cap_stem',0); pos2(cap_stem',0);
+lft x1l=lft x2l=hround max(2u,3u-.5cap_stem'); top y1=h; bot y2=0;
+filldraw stroke z1e--z2e; % stem
+penpos3(cap_band,90); penpos4(cap_band,90);
+penpos5(cap_curve if hefty:-3stem_corr fi,0);
+penpos6(vair,-90); penpos7(vair,-90);
+z3r=top z1; y4=y3; y5=.5[y4l,y6l]; y6=y7;
+x7=x2; y7l=vround(.5h+.5vair); x4=x6;
+if serifs: x4=.5w-.5u; x5r=hround(w-2.25u);
+else: x4=.5w+.5u; x5r=hround(w-u); fi
+x4l:=x6l:=x4-.125cap_curve;
+fill stroke z3e..pulled_arc.e(4,5) & pulled_arc.e(5,6)..z7e; % lobe
+if serifs: pos6'(vair,-90); pos0(cap_stem,180);
+ pos8(cap_curve,180); pos9(vair,-90); pos10(hair,0);
+ z6'=z6; lft x0r=lft x8r=hround(x5-2/3u-.5cap_curve);
+ y8=1/3[y2,y7]; y0=3/5[y2,y7]; x9=.5[x8l,x10r];
+ bot y9r=-o; rt x10r=hround(w-.05u); y10=1/4[y2,y7];
+ filldraw stroke z6'e{right}..z0e---z8e....z9e{right}..z10e{up}; % tail
+ dish_serif(2,1,c,1/3,cap_jut,d,1/3,cap_jut); % lower serif
+else: penpos8(cap_stem-2stem_corr,0); penpos9(cap_stem,0);
+ x8=x6+.5u; y8=y6; x9r=hround(w-.5u); y9=0;
+ fill z8l--diag_end(8l,9l,.5,1,9r,8r)--z8r--cycle; fi % tail
+left_stem=if monospace:fudged.hair else: cap_hair fi if hefty: -3stem_corr fi;
+outer_jut=.8cap_jut; x11l=l+letter_fit+outer_jut+.5u; y11=0;
+x12=x1l-apex_corr-if monospace:2 fi\\u; y12=h;
+alpha=diag_ratio(1,.5left_stem,y12-y11,x12-x11l);
+penpos11(alpha*left_stem,0); penpos12(alpha*left_stem,0);
+fill diag_end(12l,11l,1,1,11r,12r)
+ --diag_end(11r,12r,1,1,12l,11l)--cycle; % diagonal
+y15=h-slab; z15=whatever[z11,z12];
+fill z15--(x1,y15)--(x1,h)--z12--cycle; % link
+penpos13(whatever,angle(z2-z1)); z13=whatever[z11,z12];
+penpos14(cap_band,90); x14=x7; y13l=y14l; y13r=y14r;
+if hefty: y14r=.4h; else: y14=y7; fi
+penstroke z13e--z14e; % bar line
+if serifs: numeric inner_jut; pickup tiny.nib;
+ prime_points_inside(11,12);
+ if rt x11'r+cap_jut+.5u+1<=lft x2l-.75cap_jut:
+ inner_jut=cap_jut;
+ else:
+ rt x11'r+inner_jut+.5u+1=lft x2l-.75inner_jut;
+ fi
+ dish_serif(11',12,i,1/2,outer_jut,j,.6,inner_jut)(dark); % lower left serif
+ nodish_serif(1,2,a,1/3,cap_jut+x1l-x12,b,1/3,.5cap_jut); % upper serif
+fi
+math_fit(0,.75ic#);
+penlabels(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); endchar;
+
+font_slant slant; font_x_height x_height#;
+if monospace: font_normal_space 9u#; % no stretching or shrinking
+ font_quad 18u#;
+ font_extra_space 9u#;
+else: font_normal_space 6u#+2letter_fit#;
+ font_normal_stretch 3u#; font_normal_shrink 2u#;
+ font_quad 18u#+4letter_fit#;
+ font_extra_space 2u#;
+fi
+
+bye.
+
+
diff --git a/obsolete/macros/latex/contrib/ar/ar6.mf b/obsolete/macros/latex/contrib/ar/ar6.mf
new file mode 100644
index 0000000000..d79cfe3de1
--- /dev/null
+++ b/obsolete/macros/latex/contrib/ar/ar6.mf
@@ -0,0 +1,144 @@
+% Computer Modern Roman 6 point
+if unknown cmbase: input cmbase fi
+
+font_identifier:="AR"; font_size 6pt#;
+
+u#:=14/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=2.8/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=6/36pt#; % extra space added to all sidebars
+
+body_height#:=162/36pt#; % height of tallest characters
+asc_height#:=150/36pt#; % height of lowercase ascenders
+cap_height#:=147.6/36pt#; % height of caps
+fig_height#:=139.2/36pt#; % height of numerals
+x_height#:=93/36pt#; % height of lowercase without ascenders
+math_axis#:=54/36pt#; % axis of symmetry for math symbols
+bar_height#:=52.2/36pt#; % height of crossbar in lowercase e
+comma_depth#:=42/36pt#; % depth of comma below baseline
+desc_depth#:=42/36pt#; % depth of lowercase descenders
+
+crisp#:=6.5/36pt#; % diameter of serif corners
+tiny#:=6.5/36pt#; % diameter of rounded corners
+fine#:=6/36pt#; % diameter of sharply rounded corners
+thin_join#:=6/36pt#; % width of extrafine details
+hair#:=8/36pt#; % lowercase hairline breadth
+stem#:=17.5/36pt#; % lowercase stem breadth
+curve#:=20/36pt#; % lowercase curve breadth
+ess#:=17/36pt#; % breadth in middle of lowercase s
+flare#:=20.5/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=26/36pt#; % diameter of dots
+cap_hair#:=8.5/36pt#; % uppercase hairline breadth
+cap_stem#:=21/36pt#; % uppercase stem breadth
+cap_curve#:=23.5/36pt#; % uppercase curve breadth
+cap_ess#:=18.5/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.31pt#; % thickness of lines in math symbols
+
+dish#:=.8/36pt#; % amount erased at top or bottom of serifs
+bracket#:=12/36pt#; % vertical distance from serif base to tangent
+jut#:=19/36pt#; % protrusion of lowercase serifs
+cap_jut#:=23/36pt#; % protrusion of uppercase serifs
+beak_jut#:=6.8/36pt#; % horizontal protrusion of beak serifs
+beak#:=42/36pt#; % vertical protrusion of beak serifs
+vair#:=7/36pt#; % vertical diameter of hairlines
+notch_cut#:=6pt#; % maximum breadth above or below notches
+bar#:=8.5/36pt#; % lowercase bar thickness
+slab#:=8.5/36pt#; % serif and arm thickness
+cap_bar#:=8.5/36pt#; % uppercase bar thickness
+cap_band#:=8.5/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=6pt#; % max breadth above/below uppercase notches
+serif_drop#:=2.4/36pt#; % vertical drop of sloped serifs
+stem_corr#:=.8/36pt#; % for small refinements of stem breadth
+vair_corr#:=.7/36pt#; % for small refinements of hairline height
+apex_corr#:=0pt#; % extra width at diagonal junctions
+
+o#:=4.5/36pt#; % amount of overshoot for curves
+apex_o#:=4.5/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=.25; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=.8; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+beak_darkness:=11/30; % fraction of triangle inside beak serifs
+ligs:=2; % level of ligatures to be included
+
+square_dots:=false; % should dots be square?
+hefty:=false; % should we try hard not to be overweight?
+serifs:=true; % should serifs and bulbs be attached?
+monospace:=false; % should all characters have the same width?
+variant_g:=true; % should an italic-style g be used?
+low_asterisk:=false; % should the asterisk be centered at the axis?
+math_fitting:=true; % should math-mode spacing be used?
+
+mode_setup; font_setup;
+
+
+cmchar "The ligature AR";
+beginchar("A",if serifs: 12u#+.5max(2u#,cap_curve#)
+ else:12.5u#-.5width_adj# fi,cap_height#,0);
+italcorr .75cap_height#*slant- if serifs: 1.75 else: .5 fi\\ u#;
+adjust_fit(6u#+cap_serif_fit#,0);
+pickup tiny.nib; pos1(cap_stem',0); pos2(cap_stem',0);
+lft x1l=lft x2l=hround max(2u,3u-.5cap_stem'); top y1=h; bot y2=0;
+filldraw stroke z1e--z2e; % stem
+penpos3(cap_band,90); penpos4(cap_band,90);
+penpos5(cap_curve if hefty:-3stem_corr fi,0);
+penpos6(vair,-90); penpos7(vair,-90);
+z3r=top z1; y4=y3; y5=.5[y4l,y6l]; y6=y7;
+x7=x2; y7l=vround(.5h+.5vair); x4=x6;
+if serifs: x4=.5w-.5u; x5r=hround(w-2.25u);
+else: x4=.5w+.5u; x5r=hround(w-u); fi
+x4l:=x6l:=x4-.125cap_curve;
+fill stroke z3e..pulled_arc.e(4,5) & pulled_arc.e(5,6)..z7e; % lobe
+if serifs: pos6'(vair,-90); pos0(cap_stem,180);
+ pos8(cap_curve,180); pos9(vair,-90); pos10(hair,0);
+ z6'=z6; lft x0r=lft x8r=hround(x5-2/3u-.5cap_curve);
+ y8=1/3[y2,y7]; y0=3/5[y2,y7]; x9=.5[x8l,x10r];
+ bot y9r=-o; rt x10r=hround(w-.05u); y10=1/4[y2,y7];
+ filldraw stroke z6'e{right}..z0e---z8e....z9e{right}..z10e{up}; % tail
+ dish_serif(2,1,c,1/3,cap_jut,d,1/3,cap_jut); % lower serif
+else: penpos8(cap_stem-2stem_corr,0); penpos9(cap_stem,0);
+ x8=x6+.5u; y8=y6; x9r=hround(w-.5u); y9=0;
+ fill z8l--diag_end(8l,9l,.5,1,9r,8r)--z8r--cycle; fi % tail
+left_stem=if monospace:fudged.hair else: cap_hair fi if hefty: -3stem_corr fi;
+outer_jut=.8cap_jut; x11l=l+letter_fit+outer_jut+.5u; y11=0;
+x12=x1l-apex_corr-if monospace:2 fi\\u; y12=h;
+alpha=diag_ratio(1,.5left_stem,y12-y11,x12-x11l);
+penpos11(alpha*left_stem,0); penpos12(alpha*left_stem,0);
+fill diag_end(12l,11l,1,1,11r,12r)
+ --diag_end(11r,12r,1,1,12l,11l)--cycle; % diagonal
+y15=h-slab; z15=whatever[z11,z12];
+fill z15--(x1,y15)--(x1,h)--z12--cycle; % link
+penpos13(whatever,angle(z2-z1)); z13=whatever[z11,z12];
+penpos14(cap_band,90); x14=x7; y13l=y14l; y13r=y14r;
+if hefty: y14r=.4h; else: y14=y7; fi
+penstroke z13e--z14e; % bar line
+if serifs: numeric inner_jut; pickup tiny.nib;
+ prime_points_inside(11,12);
+ if rt x11'r+cap_jut+.5u+1<=lft x2l-.75cap_jut:
+ inner_jut=cap_jut;
+ else:
+ rt x11'r+inner_jut+.5u+1=lft x2l-.75inner_jut;
+ fi
+ dish_serif(11',12,i,1/2,outer_jut,j,.6,inner_jut)(dark); % lower left serif
+ nodish_serif(1,2,a,1/3,cap_jut+x1l-x12,b,1/3,.5cap_jut); % upper serif
+fi
+math_fit(0,.75ic#);
+penlabels(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); endchar;
+
+font_slant slant; font_x_height x_height#;
+if monospace: font_normal_space 9u#; % no stretching or shrinking
+ font_quad 18u#;
+ font_extra_space 9u#;
+else: font_normal_space 6u#+2letter_fit#;
+ font_normal_stretch 3u#; font_normal_shrink 2u#;
+ font_quad 18u#+4letter_fit#;
+ font_extra_space 2u#;
+fi
+
+bye.
+
+
+
diff --git a/obsolete/macros/latex/contrib/ar/ar7.mf b/obsolete/macros/latex/contrib/ar/ar7.mf
new file mode 100644
index 0000000000..64f449adbb
--- /dev/null
+++ b/obsolete/macros/latex/contrib/ar/ar7.mf
@@ -0,0 +1,145 @@
+% Computer Modern Roman 7 point
+if unknown cmbase: input cmbase fi
+
+font_identifier:="AR"; font_size 7pt#;
+
+u#:=15.5/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=3.5/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=4/36pt#; % extra space added to all sidebars
+
+body_height#:=189/36pt#; % height of tallest characters
+asc_height#:=175/36pt#; % height of lowercase ascenders
+cap_height#:=172.2/36pt#; % height of caps
+fig_height#:=162.4/36pt#; % height of numerals
+x_height#:=108.5/36pt#; % height of lowercase without ascenders
+math_axis#:=63/36pt#; % axis of symmetry for math symbols
+bar_height#:=60.9/36pt#; % height of crossbar in lowercase e
+comma_depth#:=49/36pt#; % depth of comma below baseline
+desc_depth#:=49/36pt#; % depth of lowercase descenders
+
+crisp#:=7/36pt#; % diameter of serif corners
+tiny#:=7/36pt#; % diameter of rounded corners
+fine#:=6/36pt#; % diameter of sharply rounded corners
+thin_join#:=6/36pt#; % width of extrafine details
+hair#:=8.5/36pt#; % lowercase hairline breadth
+stem#:=19.5/36pt#; % lowercase stem breadth
+curve#:=22.5/36pt#; % lowercase curve breadth
+ess#:=21/36pt#; % breadth in middle of lowercase s
+flare#:=23.5/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=29/36pt#; % diameter of dots
+cap_hair#:=9/36pt#; % uppercase hairline breadth
+cap_stem#:=23.5/36pt#; % uppercase stem breadth
+cap_curve#:=26.5/36pt#; % uppercase curve breadth
+cap_ess#:=22.5/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.34pt#; % thickness of lines in math symbols
+
+dish#:=.9/36pt#; % amount erased at top or bottom of serifs
+bracket#:=14/36pt#; % vertical distance from serif base to tangent
+jut#:=21/36pt#; % protrusion of lowercase serifs
+cap_jut#:=26/36pt#; % protrusion of uppercase serifs
+beak_jut#:=7.6/36pt#; % horizontal protrusion of beak serifs
+beak#:=49/36pt#; % vertical protrusion of beak serifs
+vair#:=7/36pt#; % vertical diameter of hairlines
+notch_cut#:=7pt#; % maximum breadth above or below notches
+bar#:=9/36pt#; % lowercase bar thickness
+slab#:=9/36pt#; % serif and arm thickness
+cap_bar#:=9/36pt#; % uppercase bar thickness
+cap_band#:=9/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=7pt#; % max breadth above/below uppercase notches
+serif_drop#:=2.8/36pt#; % vertical drop of sloped serifs
+stem_corr#:=.9/36pt#; % for small refinements of stem breadth
+vair_corr#:=.9/36pt#; % for small refinements of hairline height
+apex_corr#:=0pt#; % extra width at diagonal junctions
+
+o#:=5/36pt#; % amount of overshoot for curves
+apex_o#:=5/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=.25; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=.6; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+beak_darkness:=11/30; % fraction of triangle inside beak serifs
+ligs:=2; % level of ligatures to be included
+
+square_dots:=false; % should dots be square?
+hefty:=false; % should we try hard not to be overweight?
+serifs:=true; % should serifs and bulbs be attached?
+monospace:=false; % should all characters have the same width?
+variant_g:=true; % should an italic-style g be used?
+low_asterisk:=false; % should the asterisk be centered at the axis?
+math_fitting:=true; % should math-mode spacing be used?
+
+mode_setup; font_setup;
+
+
+cmchar "The ligature AR";
+beginchar("A",if serifs: 12u#+.5max(2u#,cap_curve#)
+ else:12.5u#-.5width_adj# fi,cap_height#,0);
+italcorr .75cap_height#*slant- if serifs: 1.75 else: .5 fi\\ u#;
+adjust_fit(6u#+cap_serif_fit#,0);
+pickup tiny.nib; pos1(cap_stem',0); pos2(cap_stem',0);
+lft x1l=lft x2l=hround max(2u,3u-.5cap_stem'); top y1=h; bot y2=0;
+filldraw stroke z1e--z2e; % stem
+penpos3(cap_band,90); penpos4(cap_band,90);
+penpos5(cap_curve if hefty:-3stem_corr fi,0);
+penpos6(vair,-90); penpos7(vair,-90);
+z3r=top z1; y4=y3; y5=.5[y4l,y6l]; y6=y7;
+x7=x2; y7l=vround(.5h+.5vair); x4=x6;
+if serifs: x4=.5w-.5u; x5r=hround(w-2.25u);
+else: x4=.5w+.5u; x5r=hround(w-u); fi
+x4l:=x6l:=x4-.125cap_curve;
+fill stroke z3e..pulled_arc.e(4,5) & pulled_arc.e(5,6)..z7e; % lobe
+if serifs: pos6'(vair,-90); pos0(cap_stem,180);
+ pos8(cap_curve,180); pos9(vair,-90); pos10(hair,0);
+ z6'=z6; lft x0r=lft x8r=hround(x5-2/3u-.5cap_curve);
+ y8=1/3[y2,y7]; y0=3/5[y2,y7]; x9=.5[x8l,x10r];
+ bot y9r=-o; rt x10r=hround(w-.05u); y10=1/4[y2,y7];
+ filldraw stroke z6'e{right}..z0e---z8e....z9e{right}..z10e{up}; % tail
+ dish_serif(2,1,c,1/3,cap_jut,d,1/3,cap_jut); % lower serif
+else: penpos8(cap_stem-2stem_corr,0); penpos9(cap_stem,0);
+ x8=x6+.5u; y8=y6; x9r=hround(w-.5u); y9=0;
+ fill z8l--diag_end(8l,9l,.5,1,9r,8r)--z8r--cycle; fi % tail
+left_stem=if monospace:fudged.hair else: cap_hair fi if hefty: -3stem_corr fi;
+outer_jut=.8cap_jut; x11l=l+letter_fit+outer_jut+.5u; y11=0;
+x12=x1l-apex_corr-if monospace:2 fi\\u; y12=h;
+alpha=diag_ratio(1,.5left_stem,y12-y11,x12-x11l);
+penpos11(alpha*left_stem,0); penpos12(alpha*left_stem,0);
+fill diag_end(12l,11l,1,1,11r,12r)
+ --diag_end(11r,12r,1,1,12l,11l)--cycle; % diagonal
+y15=h-slab; z15=whatever[z11,z12];
+fill z15--(x1,y15)--(x1,h)--z12--cycle; % link
+penpos13(whatever,angle(z2-z1)); z13=whatever[z11,z12];
+penpos14(cap_band,90); x14=x7; y13l=y14l; y13r=y14r;
+if hefty: y14r=.4h; else: y14=y7; fi
+penstroke z13e--z14e; % bar line
+if serifs: numeric inner_jut; pickup tiny.nib;
+ prime_points_inside(11,12);
+ if rt x11'r+cap_jut+.5u+1<=lft x2l-.75cap_jut:
+ inner_jut=cap_jut;
+ else:
+ rt x11'r+inner_jut+.5u+1=lft x2l-.75inner_jut;
+ fi
+ dish_serif(11',12,i,1/2,outer_jut,j,.6,inner_jut)(dark); % lower left serif
+ nodish_serif(1,2,a,1/3,cap_jut+x1l-x12,b,1/3,.5cap_jut); % upper serif
+fi
+math_fit(0,.75ic#);
+penlabels(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); endchar;
+
+font_slant slant; font_x_height x_height#;
+if monospace: font_normal_space 9u#; % no stretching or shrinking
+ font_quad 18u#;
+ font_extra_space 9u#;
+else: font_normal_space 6u#+2letter_fit#;
+ font_normal_stretch 3u#; font_normal_shrink 2u#;
+ font_quad 18u#+4letter_fit#;
+ font_extra_space 2u#;
+fi
+
+bye.
+
+
+
+
diff --git a/obsolete/macros/latex/contrib/ar/ar8.mf b/obsolete/macros/latex/contrib/ar/ar8.mf
new file mode 100644
index 0000000000..36a2fc8e3f
--- /dev/null
+++ b/obsolete/macros/latex/contrib/ar/ar8.mf
@@ -0,0 +1,143 @@
+% Computer Modern Roman 8 point
+if unknown cmbase: input cmbase fi
+
+font_identifier:="AR"; font_size 8pt#;
+
+u#:=17/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=4.1/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=216/36pt#; % height of tallest characters
+asc_height#:=200/36pt#; % height of lowercase ascenders
+cap_height#:=196.8/36pt#; % height of caps
+fig_height#:=185.6/36pt#; % height of numerals
+x_height#:=124/36pt#; % height of lowercase without ascenders
+math_axis#:=72/36pt#; % axis of symmetry for math symbols
+bar_height#:=69.6/36pt#; % height of crossbar in lowercase e
+comma_depth#:=56/36pt#; % depth of comma below baseline
+desc_depth#:=56/36pt#; % depth of lowercase descenders
+
+crisp#:=8/36pt#; % diameter of serif corners
+tiny#:=8/36pt#; % diameter of rounded corners
+fine#:=7/36pt#; % diameter of sharply rounded corners
+thin_join#:=7/36pt#; % width of extrafine details
+hair#:=9/36pt#; % lowercase hairline breadth
+stem#:=21.5/36pt#; % lowercase stem breadth
+curve#:=25/36pt#; % lowercase curve breadth
+ess#:=23/36pt#; % breadth in middle of lowercase s
+flare#:=26.5/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=32/36pt#; % diameter of dots
+cap_hair#:=9.5/36pt#; % uppercase hairline breadth
+cap_stem#:=25.5/36pt#; % uppercase stem breadth
+cap_curve#:=29/36pt#; % uppercase curve breadth
+cap_ess#:=26/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.36pt#; % thickness of lines in math symbols
+
+dish#:=1/36pt#; % amount erased at top or bottom of serifs
+bracket#:=16/36pt#; % vertical distance from serif base to tangent
+jut#:=24/36pt#; % protrusion of lowercase serifs
+cap_jut#:=29/36pt#; % protrusion of uppercase serifs
+beak_jut#:=8.4/36pt#; % horizontal protrusion of beak serifs
+beak#:=56/36pt#; % vertical protrusion of beak serifs
+vair#:=8/36pt#; % vertical diameter of hairlines
+notch_cut#:=8pt#; % maximum breadth above or below notches
+bar#:=9.5/36pt#; % lowercase bar thickness
+slab#:=9.5/36pt#; % serif and arm thickness
+cap_bar#:=9.5/36pt#; % uppercase bar thickness
+cap_band#:=9.5/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=8pt#; % max breadth above/below uppercase notches
+serif_drop#:=3.2/36pt#; % vertical drop of sloped serifs
+stem_corr#:=1/36pt#; % for small refinements of stem breadth
+vair_corr#:=1/36pt#; % for small refinements of hairline height
+apex_corr#:=0pt#; % extra width at diagonal junctions
+
+o#:=6/36pt#; % amount of overshoot for curves
+apex_o#:=6/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=.25; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=.4; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+beak_darkness:=11/30; % fraction of triangle inside beak serifs
+ligs:=2; % level of ligatures to be included
+
+square_dots:=false; % should dots be square?
+hefty:=false; % should we try hard not to be overweight?
+serifs:=true; % should serifs and bulbs be attached?
+monospace:=false; % should all characters have the same width?
+variant_g:=true; % should an italic-style g be used?
+low_asterisk:=false; % should the asterisk be centered at the axis?
+math_fitting:=true; % should math-mode spacing be used?
+
+mode_setup; font_setup;
+
+
+cmchar "The ligature AR";
+beginchar("A",if serifs: 12u#+.5max(2u#,cap_curve#)
+ else:12.5u#-.5width_adj# fi,cap_height#,0);
+italcorr .75cap_height#*slant- if serifs: 1.75 else: .5 fi\\ u#;
+adjust_fit(6u#+cap_serif_fit#,0);
+pickup tiny.nib; pos1(cap_stem',0); pos2(cap_stem',0);
+lft x1l=lft x2l=hround max(2u,3u-.5cap_stem'); top y1=h; bot y2=0;
+filldraw stroke z1e--z2e; % stem
+penpos3(cap_band,90); penpos4(cap_band,90);
+penpos5(cap_curve if hefty:-3stem_corr fi,0);
+penpos6(vair,-90); penpos7(vair,-90);
+z3r=top z1; y4=y3; y5=.5[y4l,y6l]; y6=y7;
+x7=x2; y7l=vround(.5h+.5vair); x4=x6;
+if serifs: x4=.5w-.5u; x5r=hround(w-2.25u);
+else: x4=.5w+.5u; x5r=hround(w-u); fi
+x4l:=x6l:=x4-.125cap_curve;
+fill stroke z3e..pulled_arc.e(4,5) & pulled_arc.e(5,6)..z7e; % lobe
+if serifs: pos6'(vair,-90); pos0(cap_stem,180);
+ pos8(cap_curve,180); pos9(vair,-90); pos10(hair,0);
+ z6'=z6; lft x0r=lft x8r=hround(x5-2/3u-.5cap_curve);
+ y8=1/3[y2,y7]; y0=3/5[y2,y7]; x9=.5[x8l,x10r];
+ bot y9r=-o; rt x10r=hround(w-.05u); y10=1/4[y2,y7];
+ filldraw stroke z6'e{right}..z0e---z8e....z9e{right}..z10e{up}; % tail
+ dish_serif(2,1,c,1/3,cap_jut,d,1/3,cap_jut); % lower serif
+else: penpos8(cap_stem-2stem_corr,0); penpos9(cap_stem,0);
+ x8=x6+.5u; y8=y6; x9r=hround(w-.5u); y9=0;
+ fill z8l--diag_end(8l,9l,.5,1,9r,8r)--z8r--cycle; fi % tail
+left_stem=if monospace:fudged.hair else: cap_hair fi if hefty: -3stem_corr fi;
+outer_jut=.8cap_jut; x11l=l+letter_fit+outer_jut+.5u; y11=0;
+x12=x1l-apex_corr-if monospace:2 fi\\u; y12=h;
+alpha=diag_ratio(1,.5left_stem,y12-y11,x12-x11l);
+penpos11(alpha*left_stem,0); penpos12(alpha*left_stem,0);
+fill diag_end(12l,11l,1,1,11r,12r)
+ --diag_end(11r,12r,1,1,12l,11l)--cycle; % diagonal
+y15=h-slab; z15=whatever[z11,z12];
+fill z15--(x1,y15)--(x1,h)--z12--cycle; % link
+penpos13(whatever,angle(z2-z1)); z13=whatever[z11,z12];
+penpos14(cap_band,90); x14=x7; y13l=y14l; y13r=y14r;
+if hefty: y14r=.4h; else: y14=y7; fi
+penstroke z13e--z14e; % bar line
+if serifs: numeric inner_jut; pickup tiny.nib;
+ prime_points_inside(11,12);
+ if rt x11'r+cap_jut+.5u+1<=lft x2l-.75cap_jut:
+ inner_jut=cap_jut;
+ else:
+ rt x11'r+inner_jut+.5u+1=lft x2l-.75inner_jut;
+ fi
+ dish_serif(11',12,i,1/2,outer_jut,j,.6,inner_jut)(dark); % lower left serif
+ nodish_serif(1,2,a,1/3,cap_jut+x1l-x12,b,1/3,.5cap_jut); % upper serif
+fi
+math_fit(0,.75ic#);
+penlabels(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); endchar;
+
+font_slant slant; font_x_height x_height#;
+if monospace: font_normal_space 9u#; % no stretching or shrinking
+ font_quad 18u#;
+ font_extra_space 9u#;
+else: font_normal_space 6u#+2letter_fit#;
+ font_normal_stretch 3u#; font_normal_shrink 2u#;
+ font_quad 18u#+4letter_fit#;
+ font_extra_space 2u#;
+fi
+
+bye.
+
+
diff --git a/obsolete/macros/latex/contrib/ar/ar9.mf b/obsolete/macros/latex/contrib/ar/ar9.mf
new file mode 100644
index 0000000000..f060f00467
--- /dev/null
+++ b/obsolete/macros/latex/contrib/ar/ar9.mf
@@ -0,0 +1,144 @@
+% Computer Modern Roman 9 point
+if unknown cmbase: input cmbase fi
+
+font_identifier:="AR"; font_size 9pt#;
+
+u#:=18.5/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=4.6/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=243/36pt#; % height of tallest characters
+asc_height#:=225/36pt#; % height of lowercase ascenders
+cap_height#:=221.4/36pt#; % height of caps
+fig_height#:=208.8/36pt#; % height of numerals
+x_height#:=139.5/36pt#; % height of lowercase without ascenders
+math_axis#:=81/36pt#; % axis of symmetry for math symbols
+bar_height#:=78.3/36pt#; % height of crossbar in lowercase e
+comma_depth#:=63/36pt#; % depth of comma below baseline
+desc_depth#:=63/36pt#; % depth of lowercase descenders
+
+crisp#:=8/36pt#; % diameter of serif corners
+tiny#:=8/36pt#; % diameter of rounded corners
+fine#:=7/36pt#; % diameter of sharply rounded corners
+thin_join#:=7/36pt#; % width of extrafine details
+hair#:=9/36pt#; % lowercase hairline breadth
+stem#:=23/36pt#; % lowercase stem breadth
+curve#:=27/36pt#; % lowercase curve breadth
+ess#:=25/36pt#; % breadth in middle of lowercase s
+flare#:=29/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=35/36pt#; % diameter of dots
+cap_hair#:=10/36pt#; % uppercase hairline breadth
+cap_stem#:=28/36pt#; % uppercase stem breadth
+cap_curve#:=32/36pt#; % uppercase curve breadth
+cap_ess#:=30/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.38pt#; % thickness of lines in math symbols
+
+dish#:=1/36pt#; % amount erased at top or bottom of serifs
+bracket#:=18/36pt#; % vertical distance from serif base to tangent
+jut#:=27/36pt#; % protrusion of lowercase serifs
+cap_jut#:=33/36pt#; % protrusion of uppercase serifs
+beak_jut#:=9.2/36pt#; % horizontal protrusion of beak serifs
+beak#:=63/36pt#; % vertical protrusion of beak serifs
+vair#:=8/36pt#; % vertical diameter of hairlines
+notch_cut#:=9pt#; % maximum breadth above or below notches
+bar#:=10/36pt#; % lowercase bar thickness
+slab#:=10/36pt#; % serif and arm thickness
+cap_bar#:=10/36pt#; % uppercase bar thickness
+cap_band#:=10/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=9pt#; % max breadth above/below uppercase notches
+serif_drop#:=3.6/36pt#; % vertical drop of sloped serifs
+stem_corr#:=1/36pt#; % for small refinements of stem breadth
+vair_corr#:=1/36pt#; % for small refinements of hairline height
+apex_corr#:=0pt#; % extra width at diagonal junctions
+
+o#:=7/36pt#; % amount of overshoot for curves
+apex_o#:=7/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=.25; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=.2; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+beak_darkness:=11/30; % fraction of triangle inside beak serifs
+ligs:=2; % level of ligatures to be included
+
+square_dots:=false; % should dots be square?
+hefty:=false; % should we try hard not to be overweight?
+serifs:=true; % should serifs and bulbs be attached?
+monospace:=false; % should all characters have the same width?
+variant_g:=true; % should an italic-style g be used?
+low_asterisk:=false; % should the asterisk be centered at the axis?
+math_fitting:=true; % should math-mode spacing be used?
+
+mode_setup; font_setup;
+
+
+cmchar "The ligature AR";
+beginchar("A",if serifs: 12u#+.5max(2u#,cap_curve#)
+ else:12.5u#-.5width_adj# fi,cap_height#,0);
+italcorr .75cap_height#*slant- if serifs: 1.75 else: .5 fi\\ u#;
+adjust_fit(6u#+cap_serif_fit#,0);
+pickup tiny.nib; pos1(cap_stem',0); pos2(cap_stem',0);
+lft x1l=lft x2l=hround max(2u,3u-.5cap_stem'); top y1=h; bot y2=0;
+filldraw stroke z1e--z2e; % stem
+penpos3(cap_band,90); penpos4(cap_band,90);
+penpos5(cap_curve if hefty:-3stem_corr fi,0);
+penpos6(vair,-90); penpos7(vair,-90);
+z3r=top z1; y4=y3; y5=.5[y4l,y6l]; y6=y7;
+x7=x2; y7l=vround(.5h+.5vair); x4=x6;
+if serifs: x4=.5w-.5u; x5r=hround(w-2.25u);
+else: x4=.5w+.5u; x5r=hround(w-u); fi
+x4l:=x6l:=x4-.125cap_curve;
+fill stroke z3e..pulled_arc.e(4,5) & pulled_arc.e(5,6)..z7e; % lobe
+if serifs: pos6'(vair,-90); pos0(cap_stem,180);
+ pos8(cap_curve,180); pos9(vair,-90); pos10(hair,0);
+ z6'=z6; lft x0r=lft x8r=hround(x5-2/3u-.5cap_curve);
+ y8=1/3[y2,y7]; y0=3/5[y2,y7]; x9=.5[x8l,x10r];
+ bot y9r=-o; rt x10r=hround(w-.05u); y10=1/4[y2,y7];
+ filldraw stroke z6'e{right}..z0e---z8e....z9e{right}..z10e{up}; % tail
+ dish_serif(2,1,c,1/3,cap_jut,d,1/3,cap_jut); % lower serif
+else: penpos8(cap_stem-2stem_corr,0); penpos9(cap_stem,0);
+ x8=x6+.5u; y8=y6; x9r=hround(w-.5u); y9=0;
+ fill z8l--diag_end(8l,9l,.5,1,9r,8r)--z8r--cycle; fi % tail
+left_stem=if monospace:fudged.hair else: cap_hair fi if hefty: -3stem_corr fi;
+outer_jut=.8cap_jut; x11l=l+letter_fit+outer_jut+.5u; y11=0;
+x12=x1l-apex_corr-if monospace:2 fi\\u; y12=h;
+alpha=diag_ratio(1,.5left_stem,y12-y11,x12-x11l);
+penpos11(alpha*left_stem,0); penpos12(alpha*left_stem,0);
+fill diag_end(12l,11l,1,1,11r,12r)
+ --diag_end(11r,12r,1,1,12l,11l)--cycle; % diagonal
+y15=h-slab; z15=whatever[z11,z12];
+fill z15--(x1,y15)--(x1,h)--z12--cycle; % link
+penpos13(whatever,angle(z2-z1)); z13=whatever[z11,z12];
+penpos14(cap_band,90); x14=x7; y13l=y14l; y13r=y14r;
+if hefty: y14r=.4h; else: y14=y7; fi
+penstroke z13e--z14e; % bar line
+if serifs: numeric inner_jut; pickup tiny.nib;
+ prime_points_inside(11,12);
+ if rt x11'r+cap_jut+.5u+1<=lft x2l-.75cap_jut:
+ inner_jut=cap_jut;
+ else:
+ rt x11'r+inner_jut+.5u+1=lft x2l-.75inner_jut;
+ fi
+ dish_serif(11',12,i,1/2,outer_jut,j,.6,inner_jut)(dark); % lower left serif
+ nodish_serif(1,2,a,1/3,cap_jut+x1l-x12,b,1/3,.5cap_jut); % upper serif
+fi
+math_fit(0,.75ic#);
+penlabels(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); endchar;
+
+font_slant slant; font_x_height x_height#;
+if monospace: font_normal_space 9u#; % no stretching or shrinking
+ font_quad 18u#;
+ font_extra_space 9u#;
+else: font_normal_space 6u#+2letter_fit#;
+ font_normal_stretch 3u#; font_normal_shrink 2u#;
+ font_quad 18u#+4letter_fit#;
+ font_extra_space 2u#;
+fi
+
+bye.
+
+
+
diff --git a/obsolete/macros/latex/contrib/babel-contrib/bahasa/bahasa.dtx b/obsolete/macros/latex/contrib/babel-contrib/bahasa/bahasa.dtx
new file mode 100644
index 0000000000..51e20f9571
--- /dev/null
+++ b/obsolete/macros/latex/contrib/babel-contrib/bahasa/bahasa.dtx
@@ -0,0 +1,286 @@
+% \iffalse meta-comment
+%
+% Copyright 1989-2008 Johannes L. Braams and any individual authors
+% listed elsewhere in this file. All rights reserved.
+%
+% This file is part of the Babel system.
+% --------------------------------------
+%
+% It may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2003/12/01 or later.
+%
+% This work has the LPPL maintenance status "maintained".
+%
+% The Current Maintainer of this work is Johannes Braams.
+%
+% The list of all files belonging to the Babel system is
+% given in the file `manifest.bbl. See also `legal.bbl' for additional
+% information.
+%
+% The list of derived (unpacked) files belonging to the distribution
+% and covered by LPPL is defined by the unpacking scripts (with
+% extension .ins) which are part of the distribution.
+% \fi
+% \CheckSum{148}
+%\iffalse
+% Tell the \LaTeX\ system who we are and write an entry on the
+% transcript.
+%<*dtx>
+\ProvidesFile{bahasa.dtx}
+%</dtx>
+%<code>\ProvidesLanguage{bahasa}
+%\fi
+%\ProvidesFile{bahasa.dtx}
+ [2008/03/15 v1.0l Bahasa Indonesia support from the babel system]
+%\iffalse
+%% File `bahasa.dtx'
+%% Babel package for LaTeX version 2e
+%% Copyright (C) 1989 - 2008
+%% by Johannes Braams, TeXniek
+%
+%% Bahasa Language Definition File
+%% Copyright (C) 1994 - 2008
+%% by J"org Knappen, (joerg.knappen at alpha.ntp.springer.de)
+% Terry Mart (mart at vkpmzd.kph.uni-mainz.de)
+% Institut f\"ur Kernphysik
+% Johannes Gutenberg-Universit\"at Mainz
+% D-55099 Mainz
+% Germany
+%
+%% Please report errors to: J"org Knappen
+%% knappen at alpha.ntp.springer.de
+%% J.L. Braams
+%% babel at braams.xs4all.nl
+%
+% This file is part of the babel system, it provides the source
+% code for the bahasa indonesia / bahasa melayu language definition
+% file. The original version of this file was written by Terry
+% Mart (mart@vkpmzd.kph.uni-mainz.de) and J"org Knappen
+% (knappen@vkpmzd.kph.uni-mainz.de).
+%<*filedriver>
+\documentclass{ltxdoc}
+\newcommand*\TeXhax{\TeX hax}
+\newcommand*\babel{\textsf{babel}}
+\newcommand*\langvar{$\langle \it lang \rangle$}
+\newcommand*\note[1]{}
+\newcommand*\Lopt[1]{\textsf{#1}}
+\newcommand*\file[1]{\texttt{#1}}
+\begin{document}
+ \DocInput{bahasa.dtx}
+\end{document}
+%</filedriver>
+%\fi
+% \GetFileInfo{bahasa.dtx}
+%
+% \changes{bahasa-0.9c}{1994/06/26}{Removed the use of \cs{filedate}
+% and moved identification after the loading of \file{babel.def}}
+% \changes{bahasa-1.0d}{1996/07/10}{Replaced \cs{undefined} with
+% \cs{@undefined} and \cs{empty} with \cs{@empty} for consistency
+% with \LaTeX}
+% \changes{bahasa-1.0e}{1996/10/10}{Moved the definition of
+% \cs{atcatcode} right to the beginning.}
+%
+% \section{The Bahasa Indonesian language}
+%
+% The file \file{\filename}\footnote{The file described in this
+% section has version number \fileversion\ and was last revised on
+% \filedate.} defines all the language definition macros for the
+% Bahasa Indonesia / Bahasa Melayu language. Bahasa just means
+% `language' in Bahasa Indonesia / Bahasa Melayu. Since both
+% national versions of the language use the same writing, although
+% differing in pronounciation, this file can be used for both
+% languages.
+%
+% For this language currently no special definitions are needed or
+% available.
+%
+% \StopEventually{}
+%
+% The macro |\LdfInit| takes care of preventing that this file is
+% loaded more than once, checking the category code of the
+% \texttt{@} sign, etc.
+% \changes{bahasa-1.0e}{1996/11/02}{Now use \cs{LdfInit} to perform
+% initial checks}
+% \changes{bahasa-v1.0k}{2005/11/23}{Make it possible that this file
+% is loaded by variuos options}
+% \begin{macrocode}
+%<*code>
+\LdfInit\CurrentOption{date\CurrentOption}
+% \end{macrocode}
+%
+% When this file is read as an option, i.e. by the |\usepackage|
+% command, \texttt{bahasa} could be an `unknown' language in which
+% case we have to make it known. So we check for the existence of
+% |\l@bahasa| to see whether we have to do something here.
+%
+% For both Bahasa Indonesia and Bahasa Malaysia the same set of
+% hyphenation patterns can be used which are available in the file
+% \file{inhyph.tex}. However it could be loaded using any of the
+% possible Babel options fot the Indonesian and Malaysian
+% languase. So first we try to find out whether this is the case.
+%
+% \changes{bahasa-0.9c}{1994/06/26}{Now use \cs{@patterns} to produce
+% the warning}
+% \begin{macrocode}
+\ifx\l@bahasa\@undefined
+ \ifx\l@bahasai\@undefined
+ \ifx\l@indon\@undefined
+ \ifx\l@indonesian\@undefined
+ \ifx\l@bahasam\@undefined
+ \ifx\l@malay\@undefined
+ \ifx\l@meyalu\@undefined
+ \@nopatterns{Bahasa Indonesia}
+ \adddialect\l@bahasa0\relax
+ \else
+ \let\l@bahasa\l@meyalu
+ \fi
+ \else
+ \let\l@bahasa\l@malay
+ \fi
+ \else
+ \let\l@bahasa\l@bahasam
+ \fi
+ \else
+ \let\l@bahasa\l@indonesian
+ \fi
+ \else
+ \let\l@bahasa\l@indon
+ \fi
+ \else
+ \let\l@bahasa\l@bahasai
+ \fi
+\fi
+% \end{macrocode}
+%
+% Now that we are sure the |\l@bahasa| has some valid definition we
+% need to make sure that a name to access the hyphenation patterns,
+% corresponding to the option used, is available.
+% \begin{macrocode}
+\expandafter\expandafter\expandafter\let
+ \expandafter\csname
+ \expandafter l\expandafter @\CurrentOption\endcsname
+ \l@bahasa
+% \end{macrocode}
+%
+% The next step consists of defining commands to switch to (and
+% from) the Bahasa language.
+%
+% \begin{macro}{\captionsbahasa}
+% The macro |\captionsbahasa| defines all strings used in the four
+% standard documentclasses provided with \LaTeX.
+% \changes{bahasa-1.0b}{1995/07/04}{Added \cs{proofname} for
+% AMS-\LaTeX}
+% \changes{bahasa-1.0d}{1996/07/09}{Replaced `Proof' by `Bukti'
+% (PR2214)}
+% \changes{bahasa-1.0h}{2000/09/19}{Added \cs{glossaryname}}
+% \changes{bahasa-1.0i}{2003/11/17}{Inserted translation for Glossary}
+% \begin{macrocode}
+\@namedef{captions\CurrentOption}{%
+ \def\prefacename{Pendahuluan}%
+ \def\refname{Pustaka}%
+ \def\abstractname{Ringkasan}% (sometime it's called 'intisari'
+ % or 'ikhtisar')
+ \def\bibname{Bibliografi}%
+ \def\chaptername{Bab}%
+ \def\appendixname{Lampiran}%
+ \def\contentsname{Daftar Isi}%
+ \def\listfigurename{Daftar Gambar}%
+ \def\listtablename{Daftar Tabel}%
+ \def\indexname{Indeks}%
+ \def\figurename{Gambar}%
+ \def\tablename{Tabel}%
+ \def\partname{Bagian}%
+% Subject: Subyek
+% From: Dari
+ \def\enclname{Lampiran}%
+ \def\ccname{cc}%
+ \def\headtoname{Kepada}%
+ \def\pagename{Halaman}%
+% Notes (Endnotes): Catatan
+ \def\seename{lihat}%
+ \def\alsoname{lihat juga}%
+ \def\proofname{Bukti}%
+ \def\glossaryname{Daftar Istilah}%
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\datebahasa}
+% The macro |\datebahasa| redefines the command |\today| to produce
+% Bahasa Indonesian dates.
+% \changes{bahasa-1.0f}{1997/10/01}{Use \cs{edef} to define \cs{today}}
+% \changes{bahasa~1.0f}{1998/03/28}{use \cs{def} instead of \cs{edef}
+% to save memory}
+% \changes{bahasa-1.0g}{1999/03/12}{Februari should be spelled as
+% Pebruari}
+% \begin{macrocode}
+\@namedef{date\CurrentOption}{%
+ \def\today{\number\day~\ifcase\month\or
+ Januari\or Pebruari\or Maret\or April\or Mei\or Juni\or
+ Juli\or Agustus\or September\or Oktober\or Nopember\or Desember\fi
+ \space \number\year}}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\extrasbahasa}
+% \begin{macro}{\noextrasbahasa}
+% The macro |\extrasbahasa| will perform all the extra definitions
+% needed for the Bahasa language. The macro |\extrasbahasa| is used
+% to cancel the actions of |\extrasbahasa|. For the moment these
+% macros are empty but they are defined for compatibility with the
+% other language definition files.
+%
+% \begin{macrocode}
+\@namedef{extras\CurrentOption}{}
+\@namedef{noextras\CurrentOption}{}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\bahasahyphenmins}
+% The bahasa hyphenation patterns should be used with
+% |\lefthyphenmin| set to~2 and |\righthyphenmin| set to~2.
+% \changes{bahasa-1.0e}{1996/08/07}{use \cs{bahasahyphenmins} to store
+% the correct values}
+% \changes{bahasa-1.0h}{2000/09/22}{Now use \cs{providehyphenmins} to
+% provide a default value}
+% \begin{macrocode}
+\providehyphenmins{\CurrentOption}{\tw@\tw@}
+% \end{macrocode}
+% \end{macro}
+%
+% The macro |\ldf@finish| takes care of looking for a
+% configuration file, setting the main language to be switched on
+% at |\begin{document}| and resetting the category code of
+% \texttt{@} to its original value.
+% \changes{bahasa-1.0e}{1996/11/02}{Now use \cs{ldf@finish} to wrap up}
+% \begin{macrocode}
+\ldf@finish{\CurrentOption}
+%</code>
+% \end{macrocode}
+%
+% \Finale
+%%
+%% \CharacterTable
+%% {Upper-case \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
+%% Lower-case \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
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%
+\endinput
diff --git a/obsolete/macros/latex/contrib/babel-contrib/bahasa/bahasa.ins b/obsolete/macros/latex/contrib/babel-contrib/bahasa/bahasa.ins
new file mode 100644
index 0000000000..954122314c
--- /dev/null
+++ b/obsolete/macros/latex/contrib/babel-contrib/bahasa/bahasa.ins
@@ -0,0 +1,149 @@
+%%
+%% This file will generate fast loadable files and documentation
+%% driver files from the doc files in this package when run through
+%% LaTeX or TeX.
+%%
+%% Copyright 1989-2008 Johannes L. Braams and any individual authors
+%% listed elsewhere in this file. All rights reserved.
+%%
+%% This file is part of the Babel system.
+%% --------------------------------------
+%%
+%% It may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2003/12/01 or later.
+%%
+%% This work has the LPPL maintenance status "maintained".
+%%
+%% The Current Maintainer of this work is Johannes Braams.
+%%
+%% The list of all files belonging to the LaTeX base distribution is
+%% given in the file `manifest.bbl. See also `legal.bbl' for additional
+%% information.
+%%
+%% The list of derived (unpacked) files belonging to the distribution
+%% and covered by LPPL is defined by the unpacking scripts (with
+%% extension .ins) which are part of the distribution.
+%%
+%% --------------- start of docstrip commands ------------------
+%%
+\def\filedate{2005/11/23}
+\def\batchfile{bahasa.ins}
+\input docstrip.tex
+
+{\ifx\generate\undefined
+\Msg{**********************************************}
+\Msg{*}
+\Msg{* This installation requires docstrip}
+\Msg{* version 2.3c or later.}
+\Msg{*}
+\Msg{* An older version of docstrip has been input}
+\Msg{*}
+\Msg{**********************************************}
+\errhelp{Move or rename old docstrip.tex.}
+\errmessage{Old docstrip in input path}
+\batchmode
+\csname @@end\endcsname
+\fi}
+
+\declarepreamble\mainpreamble
+This is a generated file.
+
+Copyright 1989-2008 Johannes L. Braams and any individual authors
+listed elsewhere in this file. All rights reserved.
+
+This file was generated from file(s) of the Babel system.
+---------------------------------------------------------
+
+It may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.3
+of this license or (at your option) any later version.
+The latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+and version 1.3 or later is part of all distributions of LaTeX
+version 2003/12/01 or later.
+
+This work has the LPPL maintenance status "maintained".
+
+The Current Maintainer of this work is Johannes Braams.
+
+This file may only be distributed together with a copy of the Babel
+system. You may however distribute the Babel system without
+such generated files.
+
+The list of all files belonging to the Babel distribution is
+given in the file `manifest.bbl'. See also `legal.bbl for additional
+information.
+
+The list of derived (unpacked) files belonging to the distribution
+and covered by LPPL is defined by the unpacking scripts (with
+extension .ins) which are part of the distribution.
+\endpreamble
+
+\declarepreamble\fdpreamble
+This is a generated file.
+
+Copyright 1989-2008 Johannes L. Braams and any individual authors
+listed elsewhere in this file. All rights reserved.
+
+This file was generated from file(s) of the Babel system.
+---------------------------------------------------------
+
+It may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.3
+of this license or (at your option) any later version.
+The latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+and version 1.3 or later is part of all distributions of LaTeX
+version 2003/12/01 or later.
+
+This work has the LPPL maintenance status "maintained".
+
+The Current Maintainer of this work is Johannes Braams.
+
+This file may only be distributed together with a copy of the Babel
+system. You may however distribute the Babel system without
+such generated files.
+
+The list of all files belonging to the Babel distribution is
+given in the file `manifest.bbl'. See also `legal.bbl for additional
+information.
+
+In particular, permission is granted to customize the declarations in
+this file to serve the needs of your installation.
+
+However, NO PERMISSION is granted to distribute a modified version
+of this file under its original name.
+
+\endpreamble
+
+\keepsilent
+
+\usedir{tex/generic/babel}
+
+\usepreamble\mainpreamble
+\generate{\file{bahasai.ldf}{\from{bahasa.dtx}{code}}
+ \file{bahasam.ldf}{\from{bahasam.dtx}{code}}
+ }
+\usepreamble\fdpreamble
+
+\ifToplevel{
+\Msg{***********************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the following}
+\Msg{* files into a directory searched by TeX:}
+\Msg{*}
+\Msg{* \space\space All *.def, *.fd, *.ldf, *.sty}
+\Msg{*}
+\Msg{* To produce the documentation run the files ending with}
+\Msg{* '.dtx' and `.fdd' through LaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing}
+\Msg{***********************************************************}
+}
+
+\endinput
diff --git a/obsolete/macros/latex/contrib/babel-contrib/bahasa/bahasa.pdf b/obsolete/macros/latex/contrib/babel-contrib/bahasa/bahasa.pdf
new file mode 100644
index 0000000000..4311498071
--- /dev/null
+++ b/obsolete/macros/latex/contrib/babel-contrib/bahasa/bahasa.pdf
Binary files differ
diff --git a/obsolete/macros/latex/contrib/babel-contrib/bahasa/bahasam.dtx b/obsolete/macros/latex/contrib/babel-contrib/bahasa/bahasam.dtx
new file mode 100644
index 0000000000..6b55a39774
--- /dev/null
+++ b/obsolete/macros/latex/contrib/babel-contrib/bahasa/bahasam.dtx
@@ -0,0 +1,297 @@
+% \iffalse meta-comment
+%
+% Copyright 1989-2008 Johannes L. Braams and any individual authors
+% listed elsewhere in this file. All rights reserved.
+%
+% This file is part of the Babel system.
+% --------------------------------------
+%
+% It may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2003/12/01 or later.
+%
+% This work has the LPPL maintenance status "maintained".
+%
+% The Current Maintainer of this work is Johannes Braams.
+%
+% The list of all files belonging to the Babel system is
+% given in the file `manifest.bbl. See also `legal.bbl' for additional
+% information.
+%
+% The list of derived (unpacked) files belonging to the distribution
+% and covered by LPPL is defined by the unpacking scripts (with
+% extension .ins) which are part of the distribution.
+% \fi
+% \CheckSum{148}
+%\iffalse
+% Tell the \LaTeX\ system who we are and write an entry on the
+% transcript.
+%<*dtx>
+\ProvidesFile{bahasam.dtx}
+%</dtx>
+%<code>\ProvidesLanguage{bahasam}
+%\fi
+%\ProvidesFile{bahasam.dtx}
+ [2008/01/27 v1.0k Bahasa Malaysia support from the babel system]
+%\iffalse
+%% File `bahasam.dtx'
+%% Babel package for LaTeX version 2e
+%% Copyright (C) 1989 - 2008
+%% by Johannes Braams, TeXniek
+%
+%% Bahasa Malaysia Language Definition File
+%% Copyright (C) 1994 - 2008
+%% by J"org Knappen, (joerg.knappen at alpha.ntp.springer.de)
+% Terry Mart (mart at vkpmzd.kph.uni-mainz.de)
+% Institut f\"ur Kernphysik
+% Johannes Gutenberg-Universit\"at Mainz
+% D-55099 Mainz
+% Germany
+%
+%% Copyright (C) 2005, 2008
+%% by Bob Margolis, (bob.margolis at ntlworld.com)
+% derived from J"ork Knappen's work - see above.
+%% [With help from Awangku Merali Pengiran Mohamed (Sarawak)]
+% gratefully acknowledged.
+% Yateley,
+% UK
+%
+%% Please report errors to: Bob Margolis
+%% bob.margolis at ntlworld.com
+%% J.L. Braams
+%% babel at braams.xs4all.nl
+%
+% This file is part of the babel system, it provides the source
+% code for the Bahasa Malaysia language definition
+% file. The original version of this file was written by Terry
+% Mart (mart@vkpmzd.kph.uni-mainz.de) and J"org Knappen
+% (knappen@vkpmzd.kph.uni-mainz.de).
+%<*filedriver>
+\documentclass{ltxdoc}
+\newcommand*\TeXhax{\TeX hax}
+\newcommand*\babel{\textsf{babel}}
+\newcommand*\langvar{$\langle \it lang \rangle$}
+\newcommand*\note[1]{}
+\newcommand*\Lopt[1]{\textsf{#1}}
+\newcommand*\file[1]{\texttt{#1}}
+\begin{document}
+ \DocInput{bahasam.dtx}
+\end{document}
+%</filedriver>
+%\fi
+% \GetFileInfo{bahasam.dtx}
+%
+% \changes{bahasa-0.9c}{1994/06/26}{Removed the use of \cs{filedate}
+% and moved identification after the loading of \file{babel.def}}
+% \changes{bahasa-1.0d}{1996/07/10}{Replaced \cs{undefined} with
+% \cs{@undefined} and \cs{empty} with \cs{@empty} for consistency
+% with \LaTeX}
+% \changes{bahasa-1.0e}{1996/10/10}{Moved the definition of
+% \cs{atcatcode} right to the beginning.}
+% \changes{bahasam-0.9f}{2005/11/22}{A number of changes to make this
+% specific to Bahasa Mayasia}
+%
+% \section{The Bahasa Malaysia language}
+%
+% The file \file{\filename}\footnote{The file described in this
+% section has version number \fileversion\ and was last revised on
+% \filedate.} defines all the language definition macros for the
+% Bahasa Malaysia language. Bahasa just means
+% `language' in Bahasa Malaysia. A number of terms differ from those used
+% in bahasa indonesia.
+%
+% For this language currently no special definitions are needed or
+% available.
+%
+% \StopEventually{}
+%
+% The macro |\LdfInit| takes care of preventing that this file is
+% loaded more than once, checking the category code of the
+% \texttt{@} sign, etc.
+% \changes{bahasa-1.0e}{1996/11/02}{Now use \cs{LdfInit} to perform
+% initial checks}
+% \changes{bahasam-v1.0j}{2005/11/23}{Make it possible that this file
+% is loaded by variuos options}
+% \begin{macrocode}
+%<*code>
+\LdfInit\CurrentOption{date\CurrentOption}
+% \end{macrocode}
+%
+% When this file is read as an option, i.e. by the |\usepackage|
+% command, \texttt{bahasa} could be an `unknown' language in which
+% case we have to make it known. So we check for the existence of
+% |\l@bahasa| to see whether we have to do something here.
+%
+% For both Bahasa Malaysia and Bahasa Indonesia the same set of
+% hyphenation patterns can be used which are available in the file
+% \file{inhyph.tex}. However it could be loaded using any of the
+% possible Babel options fot the Malaysian and Indonesian
+% languase. So first we try to find out whether this is the case.
+%
+% \changes{bahasa-0.9c}{1994/06/26}{Now use \cs{@patterns} to produce
+% the warning}
+% \begin{macrocode}
+\ifx\l@malay\@undefined
+ \ifx\l@meyalu\@undefined
+ \ifx\l@bahasam\@undefined
+ \ifx\l@bahasa\@undefined
+ \ifx\l@bahasai\@undefined
+ \ifx\l@indon\@undefined
+ \ifx\l@indonesian\@undefined
+ \@nopatterns{Bahasa Malaysia}
+ \adddialect\l@malay0\relax
+ \else
+ \let\l@malay\l@indonesian
+ \fi
+ \else
+ \let\l@malay\l@indon
+ \fi
+ \else
+ \let\l@malay\l@bahasai
+ \fi
+ \else
+ \let\l@malay\l@bahasa
+ \fi
+ \else
+ \let\l@malay\l@bahasam
+ \fi
+ \else
+ \let\l@malay\l@meyalu
+ \fi
+\fi
+% \end{macrocode}
+%
+% Now that we are sure the |\l@malay| has some valid definition we
+% need to make sure that a name to access the hyphenation patterns,
+% corresponding to the option used, is available.
+% \begin{macrocode}
+\expandafter\expandafter\expandafter\let
+ \expandafter\csname
+ \expandafter l\expandafter @\CurrentOption\endcsname
+ \l@malay
+% \end{macrocode}
+%
+% The next step consists of defining commands to switch to (and
+% from) the Bahasa language.
+%
+% \begin{macro}{\captionsbahasam}
+% The macro |\captionsbahasam| defines all strings used in the four
+% standard documentclasses provided with \LaTeX.
+% \changes{bahasa-1.0b}{1995/07/04}{Added \cs{proofname} for
+% AMS-\LaTeX}
+% \changes{bahasa-1.0d}{1996/07/09}{Replaced `Proof' by `Bukti'
+% (PR2214)}
+% \changes{bahasa-1.0h}{2000/09/19}{Added \cs{glossaryname}}
+% \changes{bahasa-1.0i}{2003/11/17}{Inserted translation for Glossary}
+% \changes{bahasam-1.0k}{2008/01/27}{Inserted changes from Awangku Merali }
+% \begin{macrocode}
+\@namedef{captions\CurrentOption}{%
+ \def\prefacename{Prakata}%
+ \def\refname{Rujukan}%
+ \def\abstractname{Abstrak}% (sometime it's called 'intisari'
+ % or 'ikhtisar')
+ \def\bibname{Bibliografi}%
+ \def\chaptername{Bab}%
+ \def\appendixname{Lampiran}%
+ \def\contentsname{Kandungan}%
+ \def\listfigurename{Senarai Gambar}%
+ \def\listtablename{Senarai Jadual}%
+ \def\indexname{Indeks}%
+ \def\figurename{Gambar}%
+ \def\tablename{Jadual}%
+ \def\partname{Bahagian}%
+% Subject: Perkara
+% From: Dari
+ \def\enclname{Lampiran}%
+ \def\ccname{sk}% (short form for 'Salinan Kepada')
+ \def\headtoname{Kepada}%
+ \def\pagename{Halaman}%
+% Notes (Endnotes): Catatan
+ \def\seename{sila rujuk}%
+ \def\alsoname{rujuk juga}%
+ \def\proofname{Bukti}%
+ \def\glossaryname{Istilah}%
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\datebahasam}
+% The macro |\datebahasam| redefines the command |\today| to produce
+% Bahasa Malaysian dates.
+% \changes{bahasa-1.0f}{1997/10/01}{Use \cs{edef} to define \cs{today}}
+% \changes{bahasa~1.0f}{1998/03/28}{use \cs{def} instead of \cs{edef}
+% to save memory}
+% \changes{bahasa-1.0g}{1999/03/12}{Februari should be spelled as
+% Pebruari}
+% \changes{bahasam-1.0k}{2008/01/27}{Februari restored to BM spelling;
+% see Collins Kamus Dwibahasa 2005}
+% \begin{macrocode}
+\@namedef{date\CurrentOption}{%
+ \def\today{\number\day~\ifcase\month\or
+ Januari\or Februari\or Mac\or April\or Mei\or Jun\or
+ Julai\or Ogos\or September\or Oktober\or November\or Disember\fi
+ \space \number\year}}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\extrasbahasam}
+% \begin{macro}{\noextrasbahasam}
+% The macro |\extrasbahasa| will perform all the extra definitions
+% needed for the Bahasa language. The macro |\extrasbahasa| is used
+% to cancel the actions of |\extrasbahasa|. For the moment these
+% macros are empty but they are defined for compatibility with the
+% other language definition files.
+%
+% \begin{macrocode}
+\@namedef{extras\CurrentOption}{}
+\@namedef{noextras\CurrentOption}{}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\bahasamhyphenmins}
+% The bahasam hyphenation patterns should be used with
+% |\lefthyphenmin| set to~2 and |\righthyphenmin| set to~2.
+% \changes{bahasa-1.0e}{1996/08/07}{use \cs{bahasamhyphenmins} to store
+% the correct values}
+% \changes{bahasa-1.0h}{2000/09/22}{Now use \cs{providehyphenmins} to
+% provide a default value}
+% \begin{macrocode}
+\providehyphenmins{\CurrentOption}{\tw@\tw@}
+% \end{macrocode}
+% \end{macro}
+%
+% The macro |\ldf@finish| takes care of looking for a
+% configuration file, setting the main language to be switched on
+% at |\begin{document}| and resetting the category code of
+% \texttt{@} to its original value.
+% \changes{bahasa-1.0e}{1996/11/02}{Now use \cs{ldf@finish} to wrap up}
+% \begin{macrocode}
+\ldf@finish{\CurrentOption}
+%</code>
+% \end{macrocode}
+%
+% \Finale
+%%
+%% \CharacterTable
+%% {Upper-case \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
+%% Lower-case \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
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%
+\endinput
diff --git a/obsolete/macros/latex/contrib/babel-contrib/bahasa/bahasam.pdf b/obsolete/macros/latex/contrib/babel-contrib/bahasa/bahasam.pdf
new file mode 100644
index 0000000000..a59fa706f3
--- /dev/null
+++ b/obsolete/macros/latex/contrib/babel-contrib/bahasa/bahasam.pdf
Binary files differ
diff --git a/obsolete/macros/latex/contrib/babeltools/README b/obsolete/macros/latex/contrib/babeltools/README
new file mode 100644
index 0000000000..798415d78b
--- /dev/null
+++ b/obsolete/macros/latex/contrib/babeltools/README
@@ -0,0 +1,15 @@
+
+babeltools
+~~~~~~~~~~
+Deprecated. Fixed some babel annoyances.
+
+Manual: babeltools.tex/.pdf
+
+
+_______________________________________________________
+Javier Bezos | http://www.texnia.com
+.......................................................
+
+
+
+
diff --git a/obsolete/macros/latex/contrib/babeltools/babeltools.pdf b/obsolete/macros/latex/contrib/babeltools/babeltools.pdf
new file mode 100644
index 0000000000..d4cfd47a98
--- /dev/null
+++ b/obsolete/macros/latex/contrib/babeltools/babeltools.pdf
Binary files differ
diff --git a/obsolete/macros/latex/contrib/babeltools/babeltools.sty b/obsolete/macros/latex/contrib/babeltools/babeltools.sty
new file mode 100644
index 0000000000..a01d72e46f
--- /dev/null
+++ b/obsolete/macros/latex/contrib/babeltools/babeltools.sty
@@ -0,0 +1,314 @@
+%
+% Copyright (C) 2010-2019 Javier Bezos http://www.texnia.com
+%
+% This file may be distributed and/or modified under the conditions of
+% the MIT License. A version can be found at the end of this file.
+%
+% TODO:
+% noshorthands -> shorthands=off, nocitations, nocrossrefs
+
+\ProvidesPackage{babeltools}[2010/10/14 v1.1 Tools for the babel system (beta)]
+
+\edef\bbtl@savedcatcodes{%
+ \catcode`\noexpand\~=\the\catcode`\~
+ \catcode`\noexpand\:=\the\catcode`\:
+ \catcode`\noexpand\"=\the\catcode`\"}
+\catcode`\~=\active
+\catcode`\"=12
+\catcode`\:=12
+
+\def\bbtl@meaning{\expandafter\strip@prefix\meaning}
+
+\def\bbtl@ifshorthand#1{%
+ \@expandtwoargs\in@{#1}{\bbtl@o@shorthands}%
+ \ifin@
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+
+\let\bbtl@afterbabelhook\@empty
+\newcommand\AfterBabel[1]{%
+ \g@addto@macro\bbtl@afterbabelhook{#1}}
+
+\let\bbtl@atendofbabelhook\@empty
+\newcommand\AtEndOfBabel[1]{%
+ \g@addto@macro\bbtl@atendofbabelhook{#1}}
+
+\let\bbtl@beforebabelhook\@empty
+\newcommand\BeforeBabel[1]{%
+ \g@addto@macro\bbtl@beforebabelhook{#1}}
+
+
+% Citations and cross refs
+% ~~~~~~~~~~~~~~~~~~~~~~~~
+
+\let\bbtl@ignorepackages\@empty
+
+\DeclareOption{nocitations}
+ {\g@addto@macro\bbtl@ignorepackages{,cite,natbib,}%
+ \AfterBabel{%
+ \bbtl@restore@org{nocite}%
+ \bbtl@restore@org{bibcite}%
+ \bbtl@restore@org{@bibitem}%S
+ \bbtl@restore@org{@citex}}}
+
+\DeclareOption{nocrossrefs}
+ {\g@addto@macro\bbtl@ignorepackages{,varioref,}%
+ \BeforeBabel{%
+ \bbtl@save@org{@newl@bel}}% babel DOESN'T save it!
+ \AfterBabel{%
+ \bbtl@restore@org{@newl@bel}%
+ \bbtl@restore@org{ref}% Robust
+ \bbtl@restore@org{pageref}}}% Robust
+
+% Shorthands
+% ~~~~~~~~~~
+%
+% New shorthands
+% --------------
+
+\DeclareOption{adaptive}%
+ {\AfterBabel{%
+ \let\bbtl@initiate@active@char\initiate@active@char
+ \let\initiate@active@char\bbtl@set@shorthand
+ \let\bbtl@declare@shorthand\declare@shorthand
+ \let\declare@shorthand\bbtl@declare
+ \let\bbl@activate\bbtl@activate
+ \let\bbtl@deactivate\bbl@deactivate
+ \let\bbl@deactivate\bbtl@restore}}
+
+% Do \bbtl@initiate@active@char but don't make the char active.
+% Not necessary and a source of bugs.
+
+\def\bbtl@set@shorthand#1{%
+ \expandafter\edef\csname bbtl@savecat\string#1\endcsname
+ {\the\catcode`#1}%
+ \bbtl@initiate@active@char{#1}%
+ \catcode`#1=\csname bbtl@savecat\string#1\endcsname\relax
+ \addto\bbtl@select{\shorthandon{#1}}}
+
+\def\bbtl@use@shorthand{%
+ \if@safe@actives
+ \bbl@afterelse
+ \string
+ \else
+ \bbl@afterfi
+ {\ifx\thepage\relax
+ \bbl@afterelse
+ \string
+ \else
+ \bbl@afterfi
+ \bbtl@use@sh
+ \fi}%
+ \fi}
+
+\def\bbtl@use@sh#1{%
+ \ifx\protect\@unexpandable@protect
+ \bbl@afterelse
+ \noexpand#1%
+ \else%
+ \bbl@afterfi
+ \textormath
+ {\csname active@char\string#1\endcsname}%
+ {\csname normal@char\string#1\endcsname}%
+ \fi}
+
+\gdef\bbtl@activate#1{%
+ \begingroup
+ \lccode`\~=`#1
+ \lowercase{%
+ \endgroup
+ \def~{\bbtl@use@shorthand~}}}
+
+\def\bbtl@restore#1{%
+ \shorthandon{#1}%
+ \begingroup
+ \lccode`\~=`#1
+ \lowercase{%
+ \endgroup
+ \bbtl@deactivate{~}}}
+
+\def\bbtl@declare#1#2{%
+ \@ifundefined{bbtl@savecat\expandafter\string\@firstoftwo#2\@empty}%
+ {\@gobble}%
+ {\bbtl@declare@shorthand{#1}{#2}}}
+
+% No shorthands
+% -------------
+
+% This is done after 'adaptive', if present.
+
+\DeclareOption{shorthands=off}%
+ {\AfterBabel{\bbl@doshorthands}}
+
+\def\babelshorthand#1{%
+ \def\bbtl@tempa{#1}%
+ \@ifundefined{bbtl@@\languagename @@\bbtl@meaning\bbtl@tempa}%
+ {#1}%
+ {\@nameuse{bbtl@@\languagename @@\bbtl@meaning\bbtl@tempa}}}
+
+% No config
+% ~~~~~~~~~
+% Make sure an unexpected local config doesn't spoil your document.
+% Use of config files is strongly discouraged, but some sites
+% use them
+
+\DeclareOption{noconfig}
+ {\PassOptionToPackage{babel}{noconfig}}
+
+% Captions
+% ~~~~~~~~
+
+% redefining names. Somewhat experimental.
+
+\def\bbtl@captions{%
+ \bbtl@elt\prefacename\bbtl@elt\refname\bbtl@elt\abstractname
+ \bbtl@elt\bibname\bbtl@elt\chaptername\bbtl@elt\appendixname
+ \bbtl@elt\contentsname\bbtl@elt\listfigurename
+ \bbtl@elt\listtablename\bbtl@elt\indexname
+ \bbtl@elt\figurename\bbtl@elt\tablename\bbtl@elt\partname
+ \bbtl@elt\enclname\bbtl@elt\ccname\bbtl@elt\headtoname
+ \bbtl@elt\pagename\bbtl@elt\seename\bbtl@elt\alsoname
+ \bbtl@elt\proofname\bbtl@elt\glossaryname}
+
+% 1: \captions... expanded #2 repl fun bbtl@f #3 \...name
+% \lang...name
+\def\bbtl@rep#1\@@\@@#2#3#4{%
+ \in@{#3}{#1}%
+ \ifin@
+ #2#1\@@\@@#3#4%
+ \else
+ \PackageWarningNoLine{babeltools}%
+ {No \string#3 in \bbtl@l}%
+ \fi}
+
+% \bbtl@f is a helper macro:
+% 1 \...name
+% bbtl@f:
+% #1 prev, #2 def of \...name, #3 after
+% #4 \...name, #5 \lang...name
+\DeclareOption{langcaptions}
+ {\def\bbtl@repdef#1{%
+ \def\bbtl@f##1#1##2##3\@@\@@##4##5{%
+ \def##5{##2}%
+ \@namedef{captions\bbtl@l}{##1##4{##5}##3}}}%
+ \def\bbtl@elt#1{%
+ \bbtl@repdef#1%
+ \@temptokena\expandafter\expandafter\expandafter{%
+ \csname captions\bbtl@l\endcsname}%
+ % If \lang...name undefined
+ \edef\bbtl@t{%
+ \noexpand\bbtl@rep
+ \the\@temptokena
+ \noexpand\@@\noexpand\@@
+ \noexpand\bbtl@f
+ \noexpand#1
+ \expandafter\noexpand
+ \csname\bbtl@l\expandafter\@gobble\string#1\endcsname}%
+ \bbtl@t}%
+ \def\bbtl@repdo{%
+ \@for\bbtl@l:=\bbtl@options\do{%
+ \@ifundefined{captions\bbtl@l}{}{%
+ \bbtl@captions}}}%
+ \AtEndOfBabel{\bbtl@repdo}}
+
+% Key=value package options
+% ~~~~~~~~~~~~~~~~~~~~~~~~~
+
+\def\bbtl@process#1=#2\bbtl@process#3{%
+ \expandafter\ifx\csname bbtl@o@#1\endcsname\@empty
+ \expandafter\edef\csname bbtl@o@#1\endcsname{#2}%
+ \DeclareOption{\CurrentOption}{}%
+ \fi}
+
+\DeclareOption*{%
+ \@expandtwoargs\in@{\string=}{\CurrentOption}%
+ \ifin@
+ \expandafter\bbtl@process\CurrentOption\bbtl@process\CurrentOption
+ \fi}
+
+% Process options
+% ~~~~~~~~~~~~~~~~
+
+\ProcessOptions
+
+% shorthands=... option is handled here.
+
+\ifx\bbtl@o@shorthands\@empty\else
+ \edef\bbtl@o@shorthands{\bbtl@meaning\bbtl@o@shorthands}%
+ \bbtl@ifshorthand{'}%
+ {\PassOptionsToPackage{activeacute}{babel}}{}
+ \bbtl@ifshorthand{`}%
+ {\PassOptionsToPackage{activegrave}{babel}}{}
+ \bbtl@ifshorthand{:}{}%
+ {\g@addto@macro\bbtl@ignorepackages{,hhline,}}
+% After any redefinition, the shorthand mechanism comes.
+ \AfterBabel{\bbl@doshorthands}
+\fi
+
+% The first \LdfInit loads the babel core (the sty file doesn't!)
+% That means babeltools is not compatible with classes loading
+% a language:
+
+\@ifundefined{ldf@finish}%
+ {\def\LdfInit{%
+ \expandafter\let\expandafter\bbtl@options
+ \csname opt@babel.sty\endcsname
+ \bbtl@beforebabelhook
+ \AtBeginDocument{%
+ \let\bbtl@ifpackageloaded\@ifpackageloaded
+ \def\@ifpackageloaded##1{%
+ \@expandtwoargs\in@{,##1,}{\bbtl@ignorepackages}%
+ \ifin@
+ \expandafter\@gobbletwo
+ \else
+ \expandafter\bbtl@ifpackageloaded
+ \fi
+ {##1}}}%
+ \chardef\atcatcode =\catcode`\@
+ \catcode`\@=11\relax
+ \input babel.def\relax
+ \catcode`\@ =\atcatcode
+ \let\atcatcode\relax
+ \bbtl@afterbabelhook
+ \AtEndOfPackage{\bbtl@atendofbabelhook}%
+ \LdfInit}}
+ {\PackageError{babeltools}%
+ {Too late -- babel has been loaded}%
+ {babeltools can be used only before babel.\MessageBreak
+ Very likely a package or the class has loaded it.}}
+
+\AtEndOfBabel{%
+ \AtBeginDocument{\let\@ifpackageloaded\bbtl@ifpackageloaded}}
+
+\bbtl@savedcatcodes
+
+\endinput
+
+MIT License
+-----------
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+
+
+
diff --git a/obsolete/macros/latex/contrib/babeltools/babeltools.tex b/obsolete/macros/latex/contrib/babeltools/babeltools.tex
new file mode 100644
index 0000000000..ddeb899ca2
--- /dev/null
+++ b/obsolete/macros/latex/contrib/babeltools/babeltools.tex
@@ -0,0 +1,140 @@
+%
+% Copyright (C) 2010-2019 Javier Bezos http://www.texnia.com
+%
+% This file may be distributed and/or modified under the conditions of
+% the MIT License. A version can be found at the end of this file.
+%
+
+\documentclass{article}
+
+\author{Javier Bezos}
+\title{\textsf{babeltools}\\%
+\Large Fixing (some) \textsf{babel} annoyances}
+
+\begin{document}
+
+\maketitle
+
+\begin{center}
+\fbox{\textbf{This package is deprecated. Use babel 3.9 and later instead.}}
+\end{center}
+
+The \textsf{babel} package introduces some changes in the \LaTeX{}
+kernel which are not strictly necessary (perhaps just convenient), but
+have some unwanted side-effects. Oddly enough, most of these changes
+cannot be disabled, with a few exceptions (eg, \texttt{activeacute}
+and \texttt{activegrave}, but note there are not \texttt{activecaret}
+or \texttt{activetilde}).
+
+With \textsf{babeltools} you can modify the \textsf{babel} behaviour
+by means of a set of package options, with a few macros serving as
+tools for specific purposes. This package must be loaded
+\textbf{before} \textsf{babel}.
+
+\section{Package options}
+
+\begin{description}
+\item[shorthands=off] The shorthands mechanism is turned off.
+As some languages use this mechanism for tools not available
+otherwise, a macro \verb|\babelshorthand| is defined, which allows
+using them; see below.
+
+\item[shortands=...] The shorthands mechanism is on, but the only
+shorthands activated are those given, like, eg:
+\begin{verbatim}
+\usepackage[shorthands=:;!?]{babeltools}
+\end{verbatim}
+
+If \verb|'| is included, \texttt{activeacute} is passed to
+\textsf{babel}; if \verb|`| is included, \texttt{activegrave} is
+passed. Active characters (like \verb|~|) should be preceded by
+\verb|\string| (otherwise they will be expanded by \LaTeX{} before
+they are passed to the package and therefore they will not be
+recognized).
+
+\item[adaptive] By default, all \textsf{babel} shorthands are active
+and live from start to end of documents. You can deactivate them by
+hand with \verb|\shorthandoff|, but this is cumbersome and you cannot
+use it ``just in case'' (if the character is not a shorthands an error
+is raised, instead of ignoring silently the redundant setting). That
+means you have to accept a character like : is active in an English
+document even if you need it for just a few quotations in French. The
+default engine may be replaced by a new one which adapts the
+shorthands behaviour to the context in the following way:
+\begin{enumerate}
+\item In math mode, while still shorthands, they behave always like the
+corresponding normal char. Things like \verb|$a \mathrel{x'} b$|
+work as expected.
+
+\item When the language is switched, shorthands chars are made normal or
+active, as appropriate. Thus, \texttt{:} or \texttt{?} are active only in
+\texttt{french}.
+\end{enumerate}
+
+% This option is useful when there are, say, short quotations in French
+% inside a German text or when there are whole chapter in either French
+% or German.
+
+\item[nocrossrefs] newlabel, ref and pageref are not redefined. You
+cannot use shorthands in labels.
+
+\item[nocitations] nocite, bibcite and bibitem are not redefined. You
+cannot use shorthands in labels.
+
+\item[langcaptions] Captions are redefined if possible so that an
+intermediate macro \verb|\lang...name| is used, eg,
+\verb|\germanchaptername|. Somewhat experimental.
+
+\item[noconfig] Config files are not loaded, so you can make sure your
+document is not spoilt by an unexpected \texttt{.cfg} file.
+\end{description}
+
+Babel tweaks several packages for shorthands to be accepted. At the
+time of this writing they are \textsf{cite}, \textsf{natbib},
+\textsf{varioref} and \textsf{hhline} (the latter for the colon). If
+you don't use shorthands, these redefinitions are unnecessary and
+inconvenient. If you give a list of shorthands and it doesn't include
+\verb|:|, then \verb|hhline| is left untouched. The other packages
+are handled by \texttt{nocrossrefs} and \texttt{nocitations}, as
+appropriate.
+
+\section{Macros}
+
+\begin{description}
+\item[\ttfamily\string\babelshorthand] Use a shorthand, even with
+\texttt{shorthands=off} or not listed in it, eg,
+\verb|\babelshorthand{"u}| or \verb|\babelshorthand{:}|. You can
+conveniently define your own macros.
+\end{description}
+
+\section{Known limitations}
+
+If a class loads \textsf{babel} with a language, you cannot use
+\textsf{babeltools}. However, if a class loads babel without loading
+any language, you can use it. Languages given in
+\verb|\documentclass| work as expected (provided the class doesn't
+load it, of course).
+
+\end{document}
+
+MIT License
+-----------
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file
diff --git a/obsolete/macros/latex/contrib/backrefx/README b/obsolete/macros/latex/contrib/backrefx/README
new file mode 100644
index 0000000000..ad90c5fdfe
--- /dev/null
+++ b/obsolete/macros/latex/contrib/backrefx/README
@@ -0,0 +1,58 @@
+ The backrefx package
+ (for bibliography back references)
+
+ Author: Danie Els
+ Copyright (c) 2002-2004 Danie Els
+ Licence: LaTeX Project Public License
+
+ ===============================================================
+ The backrefx package is now obsolete after the release of
+ backref v1.23, because all the functionality are now provided
+ by backref. This release of backrefx is only provided for
+ backward compatibility of existing documents.
+ ===============================================================
+
+
+DESCRIPTION
+
+ The backrefx package enhances the backref package of David
+ Carlisle and Sebastian Rahtz. It enables backref to print
+ the bibliographic back references in a more typographical
+ sound manner (similar to the back references in TeX Unbound
+ of Hoenig)
+
+INSTALLATION
+
+ The most basic installation is to copy backrefx.sty to your
+ working directory or to a directory where TeX can find it.
+
+ For a full installation, copy the following files to you
+ (local) TEXMF tree and into the specified directories.
+
+ STYLE FILES:
+
+ <texmf>\tex\latex\backrefx\backrefx.sty
+
+ The style file was obtain by running "latex backrefx.ins"
+
+ SOURCE FILES:
+
+ <texmf>\source\latex\backrefx\backrefx.dtx
+ backrefx.ins
+ brefxtest.tex
+
+ The sample file brefxtest.tex was obtain by running
+ "latex backrefx.ins"
+
+ USER DOCUMENTATION:
+
+ <texmf>\doc\latex\backrefx\backrefx.pdf
+
+ The user manual for backrefx package was produced by executing:
+
+ pdflatex backrefx.dtx
+ pdflatex backrefx.dtx
+ makeindex -s gglo.ist -o backrefx.gls backrefx.glo
+ makeindex -s gind.ist -o backrefx.ind backrefx.idx
+ pdflatex backrefx.dtx
+ pdflatex backrefx.dtx
diff --git a/obsolete/macros/latex/contrib/backrefx/doc/latex/backrefx/backrefx.pdf b/obsolete/macros/latex/contrib/backrefx/doc/latex/backrefx/backrefx.pdf
new file mode 100644
index 0000000000..36c272f1ae
--- /dev/null
+++ b/obsolete/macros/latex/contrib/backrefx/doc/latex/backrefx/backrefx.pdf
Binary files differ
diff --git a/obsolete/macros/latex/contrib/backrefx/source/latex/backrefx/backrefx.dtx b/obsolete/macros/latex/contrib/backrefx/source/latex/backrefx/backrefx.dtx
new file mode 100644
index 0000000000..5fc73bce80
--- /dev/null
+++ b/obsolete/macros/latex/contrib/backrefx/source/latex/backrefx/backrefx.dtx
@@ -0,0 +1,419 @@
+% \iffalse (meta-comment)
+% -----------------------------------------------------------------
+% File: backrefx.dtx
+% Author: Danie Els (dnjels@sun.ac.za)
+%
+% This file is part of the SIstyle package.
+%
+% Copyright 2004 by Danie Els. All rights reserved.
+%
+% This work may be distributed and/or modified under the conditions
+% of the LaTeX Project Public License, either version 1.3 of this
+% license or (at your option) any later version. The latest version
+% of the license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2003/12/01 or later.
+%
+% This work has the LPPL maintenance status "author-maintained".
+%
+% -----------------------------------------------------------------
+% This file contains the documentations and source code for the
+% Backrefx package for use with LaTeX2e. See the file 'readme.txt'
+% for a list of all the files as well as directions for the
+% installation of this package.
+% -----------------------------------------------------------------
+% \fi
+%
+% \CheckSum{81}
+%
+% \CharacterTable
+% {Upper-case \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
+% Lower-case \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
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+% \iffalse
+%<*dtx>
+\ProvidesFile{backrefx.dtx}
+%</dtx>
+%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+%<package>\ProvidesPackage{backrefx}
+%<testfile>\ProvidesFile{brefxtest.tex}
+%<driver>\ProvidesFile{backrefx.drv}
+%\ProvidesFile{backrefx.dtx}
+ [2004/07/10 v2.0 Backref enhancements (DNJ Els)]
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage{calc}
+\EnableCrossrefs
+%\DisableCrossrefs % say \DisableCrossrefs if index is ready
+\CodelineIndex
+\RecordChanges % gather update information
+%\OnlyDescription % comment out for implementation details
+%\OldMakeindex % use if your MakeIndex is pre-v2.9
+\setlength\hfuzz{15pt} % dont make so many
+\hbadness=7000 % over and under full box warnings
+\begin{document}
+ \DocInput{backrefx.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+%
+%
+% \changes{v1.0}{2002/05/30}{Initial version}
+% \changes{v2.0}{2004/07/10}{Update for backref v1.23}
+%
+%
+% \GetFileInfo{backrefx.dtx}
+%
+% \title{Package \textsf{backrefx}\thanks{%
+% This file has version number
+% \fileversion, last revised \filedate.}\\[.75ex]
+% \normalsize(Enhancements for \textsf{backref})}
+%
+% \author{Danie Els\\
+% \small Department of Mechanical Engineering\\
+% \small University of Stellenbosch, South Africa\\
+% e-mail: \texttt{dnjels@sun.ac.za}}
+%
+% \date{\filedate}
+%
+% \maketitle
+% \noindent\fbox{\parbox{\textwidth-2\fboxsep}{\small%
+% The \textsf{backrefx} package is now obsolete after the
+% release of \textsf{backref} v1.23, because all the functionality
+% are now provided by \textsf{backref}. This release of \textsf{backrefx}
+% is only provided for backward compatibility of existing documents.}}
+% \bigskip
+%
+% \begin{abstract}
+%
+% \noindent
+% The \textsf{backrefx} package enhances the \textsf{backref}
+% package of David Carlisle and Sebastian Rahtz. It enables
+% \textsf{backref} to print the bibliographic back
+% references in a more typographical sound manner (similar to
+% the back references in \TeX\ Unbound of Hoenig), for example:
+% \begin{tabbing}
+% \hspace*{2em}\=\kill
+% \>(Cited on page 10.)\\
+% \>(Cited on pages 10 and 12.)\\
+% \>(Cited on pages 10, 12 and 15.)
+% \end{tabbing}
+% \end{abstract}
+%
+% \tableofcontents
+% \clearpage
+%
+% \section{Using \textsf{backref} package}
+%
+% \subsection*{With \textsf{hyperref}:}
+%
+% For back references with hyper-links, the \textsf{backref}
+% package is loaded internally by the \textsf{hyperref} package
+% and all the options are set within \textsf{hyperref}:
+% \begin{quote}\small
+% \begin{tabbing}
+% \textsf{hyperref} options:~
+% \=|pagebackref|\= | = [true]| or |false|\\
+% \>|backref| \> | = [section]|, |slide|, |page|, |none| or |false|.
+% \end{tabbing}
+% \begin{tabbing}
+% |\usepackage[backref=section]{hyperref}|~\=\kill
+% |\usepackage[backref]{hyperref} | \>$\rightarrow$~~Refer to sections of citations.\\
+% |\usepackage[backref=section]{hyperref}| \>$\rightarrow$~~Refer to sections of citations.\\
+% |\usepackage[backref=slide]{hyperref} | \>$\rightarrow$~~Refer to sections of citations.\\
+% |\usepackage[backref=page]{hyperref} | \>$\rightarrow$~~Refer to page numbers of citations.\\
+% |\usepackage[pagebackref]{backref} | \>$\rightarrow$~~Refer to page numbers of citations.
+% \end{tabbing}
+% \end{quote}
+% Note that the back reference options must be loaded as part of the
+% \textsf{hyperref} package and not as part of the \cmd{\hypersetup}
+% options.
+%
+% \subsection*{Without \textsf{hyperref}:}
+%
+% To activate back references without any hyper-links, the package
+% \textsf{backref} can be loaded with options:
+% \begin{quote}\small
+% \begin{tabbing}
+% |\usepackage[pageref]{backref}|~\=$\rightarrow$~ In terms of sections of reference\kill
+% |\usepackage[ref]{hyperref}| \>$\rightarrow$~Refer to sections of citations.\\
+% |\usepackage[pageref]{backref}| \>$\rightarrow$~Refer to page numbers of citations.
+% \end{tabbing}
+% \end{quote}
+%
+% \subsection*{Redefinition of \cmd{\backrefalt}:}
+%
+% The redefinition of the output to a more typographical sound
+% manner can be accomplished with the \cmd{\backrefalt} command
+% (see \textsf{backref} documentation). A typical preamble
+% with a switch for hyper-links is:
+%
+% \begin{quote}\small
+% |\iftrue |\\
+% | \usepackage[backref=page,|\meta{hyperref options} |]{hyperref}|\\
+% | % hyperref dependent packages, e.g. memhfixc|\\
+% |\else |\\
+% | \usepackage{nohyperref} |\\
+% | \usepackage[pageref]{backref}|\\
+% |\fi |\\
+% |\renewcommand*{\backref}[1]{} |\\
+% |\renewcommand*{\backrefalt}[4]{%|\\
+% | \ifcase #1 % |\\
+% | (Not cited.)% |\\
+% | \or |\\
+% | (Cited on page~#2.)% |\\
+% | \else |\\
+% | (Cited on pages~#2.)% |\\
+% | \fi} |\\
+% \verb*|\renewcommand*{\backrefsep}{, }|\\
+% \verb*|\renewcommand*{\backreftwosep}{ and~}|\\
+% \verb*|\renewcommand*{\backreflastsep}{ and~}|
+% \end{quote}
+% This will give output in the bibliography
+% \begin{quote}
+% (Cited on page 10.)\\
+% (Cited on pages 10 and 12.)\\
+% (Cited on pages 10, 12 and 15.)
+% \end{quote}
+%
+% \section{Usage of \textsf{backrefx} package}
+%
+% The \textsf{backrefx} package is only provided for backward
+% compatibility of existing document. Please do not use it
+% for any new documents.
+% The \textsf{backrefx} package requires the \textsf{backref}
+% packages and only redefines the output formatting.
+%
+% \subsection*{With \textsf{hyperref}}
+% The \textsf{backref} package is loaded internally by
+% \textsf{hyperref} and all options are set by \textsf{hyperref}.
+% \textsf{Backrefx} must be loaded after \textsf{hyperref} and
+% the output format is redefined. This results in hyper-links for
+% all the good looking back references.
+%
+% \begin{quote}
+% |\usepackage[|\meta{options}|]{hyperref}|\\
+% |\usepackage{backrefx}|\\
+% | \renewcommand*{\backrefpagesname}{...|\\
+% | :|
+% \end{quote}
+% \begin{quote}
+% \begin{tabbing}
+% \textsf{hyperref} options:~
+% \=|pagebackref|\= | = [true]| or |false|\\
+% \>|backref| \> | = [section]|, |page|, |slide|, |none| or |false|.\\
+% \end{tabbing}
+% \end{quote}
+%
+%
+% \subsection*{Without \textsf{hyperref}}
+% The \textsf{backrefx} can be used without \textsf{hyperref}
+% if hyper-links is not required.
+% \begin{quote}
+% |\usepackage[|\meta{options}|]{backrefx}|\\
+% | \renewcommand*{\backrefpagesname}{...|\\
+% | :|
+% \end{quote}
+% \begin{quote}
+% \begin{tabbing}
+% \textsf{backrefx} options:~
+% \=|pageref|\quad\= --- refer to page numbers of citations.\\
+% \>|ref| \> --- refer to sections of citations.\\
+% \end{tabbing}
+% \end{quote}
+%
+% \subsection*{Language specific commands}
+% The user can redefine the language specific commands to
+% suit his or her needs. For example:
+% \begin{quote}
+% |\renewcommand{\backrefpagesname}{Cited on page~}|\\
+% |\renewcommand{\backrefpagesnames}{Cited on pages~}|\\
+% |\renewcommand{\backrefsectionsname}{Cited in section~}|\\
+% |\renewcommand{\backrefsectionsnames}{Cited in sections~}|\\
+% |\renewcommand{\backreflist}{\space and~}|\\
+% |\renewcommand{\backrefformat}[1]{(#1.)}|\\
+% |\renewcommand{\backrefnocite}{}|
+% \end{quote}
+%
+%
+% \section{A test file for \textsf{backrefx}}
+%
+% \begin{macrocode}
+%<*testfile>
+\documentclass{book}
+\usepackage{natbib}
+\iftrue
+ \usepackage[backref=page]{hyperref}
+ \usepackage{backrefx}
+\else
+ \usepackage[pageref]{backrefx}
+\fi
+\renewcommand*{\backrefpagesname}{Cited on page~}
+\renewcommand*{\backrefpagesnames}{Cited on pages~}
+\renewcommand*{\backrefsectionsname}{Cited in chapter~}
+\renewcommand*{\backrefsectionsnames}{Cited in chapters~}
+\renewcommand*{\backreflist}{\space and~}
+\renewcommand*{\backrefformat}[1]{\textit{(#1.)}}
+\renewcommand*{\backrefnocite}{not cited}
+
+\listfiles
+\begin{document}
+\mainmatter
+\chapter{First Chapter}
+ It was shown by \citet{els,smith,murphy} that ...\clearpage
+\chapter{Second Chapter}
+ It was shown \citep{smith,murphy} that ... \clearpage
+\appendix
+\chapter{First Appendix}
+ It was shown by \citet*{murphy} that ...
+
+ \nocite{Jones}
+
+%Remember open lines in bibliography!!!!
+\begin{thebibliography}{999}
+ \bibitem[Jones(2003)]{Jones}
+ Jones, J., (2003),
+ \textsl{Test I.}
+
+ \bibitem[Els(1990)]{els}
+ Els, D.N.J., (1990),
+ \textsl{Test II.}
+
+ \bibitem[Smith(1990)]{smith}
+ Smith, J., (1993),
+ \textsl{Test III.}
+
+ \bibitem[Murphy et.al.(2000)Murphy and Els]{murphy}
+ Murphy, K. and Els, D.N.J., (2000),
+ \textsl{Test IV.}
+
+\end{thebibliography}
+\end{document}
+%</testfile>
+% \end{macrocode}
+%
+% \StopEventually{}
+% \clearpage
+% \section{The implementation}
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+%
+% \subsection{Options}
+%
+% If \textsf{backref} is already loaded (e.g.\ by \textsf{hyperref}), then
+% suppress all local options to prevent conflicts. Otherwise load it
+% with all the local options.
+% \begin{macrocode}
+\@ifpackageloaded{backref}%
+ {\DeclareOption*{}%
+ \ProcessOptions}%
+ {\RequirePackageWithOptions{backref}}
+% \end{macrocode}
+%
+% \noindent Try to figure out the options \textsf{backref} was loaded with
+% (especially when loaded with \textsf{hyperref}).
+%
+% Options that can be used without package \textsf{hyperref}.
+% \begin{macrocode}
+\ifx\backrefxxx\page@backref% (pageref)
+ \def\x@backref{\backrefpagesname}%
+ \def\x@backrefs{\backrefpagesnames}%
+\fi
+% \end{macrocode}
+% \begin{macrocode}
+\ifx\backrefxxx\section@backref% (ref)
+ \def\x@backref{\backrefsectionsname}%
+ \def\x@backrefs{\backrefsectionsnames}%
+\fi
+% \end{macrocode}
+% Back-referencing to be hyper links,
+% by page or section.
+% \begin{macrocode}
+\ifx\backrefxxx\hyper@section@backref% (hyperref)
+ \def\x@backref{\backrefsectionsname}%
+ \def\x@backrefs{\backrefsectionsnames}%
+\fi
+% \end{macrocode}
+% \begin{macrocode}
+\ifx\backrefxxx\hyper@page@backref% (hyperpageref)
+ \def\x@backref{\backrefpagesname}%
+ \def\x@backrefs{\backrefpagesnames}%
+\fi
+% \end{macrocode}
+%
+% \subsection{Local definitions}
+%
+% \begin{macro}{\backrefpagesname}
+% \begin{macro}{\backrefpagesnames}
+% \begin{macro}{\backrefsectionsname}
+% \begin{macro}{\backrefsectionsnames}
+% \begin{macro}{\backreflist}
+% \begin{macro}{\backrefformat}
+% \begin{macro}{\backrefnocite}
+% The following text strings commands can be redefined by the
+% user for language or format requirements.
+% \begin{macrocode}
+\def\backrefpagesname{Cited on page~}
+\def\backrefpagesnames{Cited on pages~}
+\def\backrefsectionsname{Cited in section~}
+\def\backrefsectionsnames{Cited in sections~}
+\def\backreflist{\space and~}
+\def\backrefformat#1{(#1.)}
+\def\backrefnocite{Not cited}
+% \end{macrocode}
+% (Maybe we need to load a config file?)
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Redefining \textsf{backref} commands}
+%
+% \begin{macrocode}
+\renewcommand*{\backref}[1]{}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\renewcommand*{\backrefalt}[4]{%
+ \ifcase #1 %
+ \backrefformat{\backrefnocite}%
+ \or
+ \backrefformat{\x@backref~#2}%
+ \else
+ \backrefformat{\x@backrefs~#2}%
+ \fi}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\renewcommand*{\backrefsep}{, }
+\renewcommand*{\backreftwosep}{\backreflist}
+\renewcommand*{\backreflastsep}{\backreflist}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%
+% \Finale
+%
+\endinput
diff --git a/obsolete/macros/latex/contrib/backrefx/source/latex/backrefx/backrefx.ins b/obsolete/macros/latex/contrib/backrefx/source/latex/backrefx/backrefx.ins
new file mode 100644
index 0000000000..800a0dc37d
--- /dev/null
+++ b/obsolete/macros/latex/contrib/backrefx/source/latex/backrefx/backrefx.ins
@@ -0,0 +1,81 @@
+%% -----------------------------------------------------------------
+%% File: backref.ins
+%% Author: Danie Els (dnjels@sun.ac.za)
+%%
+%% This file is part of the SIstyle package.
+%%
+%% Copyright 2004 by Danie Els. All rights reserved.
+%%
+%% This work may be distributed and/or modified under the conditions
+%% of the LaTeX Project Public License, either version 1.3 of this
+%% license or (at your option) any later version. The latest version
+%% of the license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2003/12/01 or later.
+%%
+%% This work has the LPPL maintenance status "author-maintained".
+%%
+%%-----------------------------------------------------------------
+%% This file will generate fast loadable files and documentation
+%% driver files from the doc files in this package when run through
+%% LaTeX or TeX.
+%%
+%% The file 'readme.txt' contains a list of all the files as well
+%% directions for installation of this package.
+%%-----------------------------------------------------------------
+
+\def\batchfile{backrefx.ins}
+\def\filedate{2004/07/10}
+\input docstrip.tex
+\keepsilent
+
+\declarepreamble\DNJEpreamble
+Author: Danie Els (dnjels@sun.ac.za)
+
+Copyright 2004 by Danie Els. All rights reserved.
+
+This work may be distributed and/or modified under the conditions of
+the LaTeX Project Public License, either version 1.3 of this license
+or (at your option) any later version. The latest version of the
+license is in
+ http://www.latex-project.org/lppl.txt
+and version 1.3 or later is part of all distributions of LaTeX
+version 2003/12/01 or later.
+
+This work has the LPPL maintenance status "author-maintained".
+-----------------------------------------------------------------
+\endpreamble
+
+\generate{%
+ \askforoverwritefalse
+ \usepreamble\DNJEpreamble
+ \file{backrefx.sty}{\from{backrefx.dtx}{package}}
+}
+
+
+\generate{%
+ \askforoverwritefalse
+ \usepreamble\empty
+ \file{brefxtest.tex}{\from{backrefx.dtx}{testfile}}
+}
+
+
+{\obeyspaces
+ \ifToplevel{
+ \Msg{**********************************************************}
+ \Msg{* To finish the installation you have to move the *}
+ \Msg{* following file into a directory searched by TeX: *}
+ \Msg{* *}
+ \Msg{* backrefx.sty *}
+ \Msg{* *}
+ \Msg{* To produce the documentation run the file backrefx.dtx *}
+ \Msg{* through LaTeX. *}
+ \Msg{* *}
+ \Msg{* The file `brefxtest.tex' contains an example text. *}
+ \Msg{* *}
+ \Msg{* Happy TeXing! *}
+ \Msg{**********************************************************}}}
+\endbatchfile
+
+\endinput
diff --git a/obsolete/macros/latex/contrib/backrefx/tex/latex/backrefx/backrefx.sty b/obsolete/macros/latex/contrib/backrefx/tex/latex/backrefx/backrefx.sty
new file mode 100644
index 0000000000..9f105564d8
--- /dev/null
+++ b/obsolete/macros/latex/contrib/backrefx/tex/latex/backrefx/backrefx.sty
@@ -0,0 +1,66 @@
+%%
+%% This is file `backrefx.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% backrefx.dtx (with options: `package')
+%% Author: Danie Els (dnjels@sun.ac.za)
+%%
+%% Copyright 2004 by Danie Els. All rights reserved.
+%%
+%% This work may be distributed and/or modified under the conditions of
+%% the LaTeX Project Public License, either version 1.3 of this license
+%% or (at your option) any later version. The latest version of the
+%% license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2003/12/01 or later.
+%%
+%% This work has the LPPL maintenance status "author-maintained".
+%% -----------------------------------------------------------------
+\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+\ProvidesPackage{backrefx}
+ [2004/07/10 v2.0 Backref enhancements (DNJ Els)]
+\@ifpackageloaded{backref}%
+ {\DeclareOption*{}%
+ \ProcessOptions}%
+ {\RequirePackageWithOptions{backref}}
+\ifx\backrefxxx\page@backref% (pageref)
+ \def\x@backref{\backrefpagesname}%
+ \def\x@backrefs{\backrefpagesnames}%
+\fi
+\ifx\backrefxxx\section@backref% (ref)
+ \def\x@backref{\backrefsectionsname}%
+ \def\x@backrefs{\backrefsectionsnames}%
+\fi
+\ifx\backrefxxx\hyper@section@backref% (hyperref)
+ \def\x@backref{\backrefsectionsname}%
+ \def\x@backrefs{\backrefsectionsnames}%
+\fi
+\ifx\backrefxxx\hyper@page@backref% (hyperpageref)
+ \def\x@backref{\backrefpagesname}%
+ \def\x@backrefs{\backrefpagesnames}%
+\fi
+\def\backrefpagesname{Cited on page~}
+\def\backrefpagesnames{Cited on pages~}
+\def\backrefsectionsname{Cited in section~}
+\def\backrefsectionsnames{Cited in sections~}
+\def\backreflist{\space and~}
+\def\backrefformat#1{(#1.)}
+\def\backrefnocite{Not cited}
+\renewcommand*{\backref}[1]{}
+\renewcommand*{\backrefalt}[4]{%
+ \ifcase #1 %
+ \backrefformat{\backrefnocite}%
+ \or
+ \backrefformat{\x@backref~#2}%
+ \else
+ \backrefformat{\x@backrefs~#2}%
+ \fi}
+\renewcommand*{\backrefsep}{, }
+\renewcommand*{\backreftwosep}{\backreflist}
+\renewcommand*{\backreflastsep}{\backreflist}
+\endinput
+%%
+%% End of file `backrefx.sty'.
diff --git a/obsolete/macros/latex/contrib/bitfield/bitfield.dtx b/obsolete/macros/latex/contrib/bitfield/bitfield.dtx
new file mode 100644
index 0000000000..43291f8f65
--- /dev/null
+++ b/obsolete/macros/latex/contrib/bitfield/bitfield.dtx
@@ -0,0 +1,659 @@
+% \iffalse
+%%
+%% File `bitfield.dtx'.
+%% Copyright (C) 1997-2001 Reuben Thomas (rrt@sc3d.org)
+%% Copyright (C) 2001 Roland Illig
+%% This file is distributed under the LaTeX Project Public License,
+%% and comes with no warranty.
+%%
+%
+%<*dtx>
+\ProvidesFile{bitfield.dtx}
+%</dtx>
+%<driver> \ProvidesFile{bitfield.drv}
+% \fi
+%
+% \iffalse
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage{url,dashbox,bitfield}
+\begin{document}
+\DocInput{bitfield.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \GetFileInfo{bitfield.dtx}
+% \CheckSum{243}
+%
+% \MakeShortVerb{\|}
+%
+% \changes{v1.00}{1 Mar 97}{First version (unreleased)}
+% \changes{v1.17}{2 Jun 99}{Dashed boxes, stacks and sub-columns
+% added; various bugs fixed}
+% \changes{v1.18}{28 Jul 01}{Made into a doc package; documentation
+% added. At signs inserted into private macro names. Tidied up some
+% infelicities.}
+% \changes{v1.19}{8 Aug 01}{Changed some references to dashbox that
+% should be to bitfield, and changed ``dashdbox'' refs to ``dashbox''
+% to cope with the renaming of that package. Uncommented the commands
+% starting |\NeedsTeXFormat| so they are copied into the package.}
+% \changes{v2.00}{12 Dec 01}{Added the option to have a plain label
+% above the box rather than a rule (thanks to Roland Illig); changed
+% the bit field commands to take a style string rather than having
+% variants of the commands, renamed internal and external commands to
+% start with |bit| rather than |bits|, to avoid confusion. Corrected
+% description of package in |\ProvidesPackage| (it was using that for
+% dashbox!). Made the package require calc 4.1b (to avoid a bug in
+% 4.1a), and the most recent version of dashbox.}
+%
+% \title{Bit field diagrams}
+% \author{Reuben Thomas\\\url{rrt@sc3d.org}\and Roland Illig}
+% \date{12th December 2001}
+% \maketitle
+%
+% \begin{abstract}
+% |bitfield| provides an environment and commands for drawing
+% bit field diagrams, which can be used to describe instruction sets,
+% object code formats, and other bit field based data structures.
+% \end{abstract}
+%
+% \section{User interface}
+%
+% \subsection{Bit field environment}
+%
+% \DescribeEnv{bitfield}
+% Bit field diagrams are drawn in the |bitfield| environment, which
+% takes two arguments. The first, optional argument gives the width of
+% a word (default 4in), and the second the number of bits per word.
+% Each word comprises a number of bit fields, and the words are drawn
+% as a column. Words are ended by |\\|.
+%
+% \DescribeEnv{xbitfield}
+% The |bitfield| environment is actually written in terms of the
+% |xbitfield| environment, which has an extra parameter (the second),
+% giving the left and right margin (the |bitfield| environment uses
+% |\layersize|).
+%
+% \DescribeMacro{\bits}
+% The basic bit field command is |\bits|.
+% |\bits[|\textit{style}|]{|\textit{label}|}{|\textit{bits}|}{|\textit{contents}|}|
+% draws a bit field with the given label, number of bits and contents.
+% The optional argument gives the bit field style, which is a string of
+% flag letters. |d| draws the box dashed, useful for indicating
+% optional structures. and |r| puts the label text in a rule
+% which spans the box.
+%
+% \DescribeMacro{\bitstack}
+% To indicate plurals, for example, where a particular word or data
+% structure may be repeated, |\bitstack| can be used, which produces
+% the appearance of a stack of bit fields. It may only be used once
+% per word (i.e.\ once per line).
+% |\bitstack[|\textit{style}|]{|\textit{label}|}{|\textit{bits}|}{|\textit{contents}|}|
+% draws a stack of width \textit{bits}. The first three arguments are
+% as for |\bits|. The \textit{contents} will typically be a |\bits|
+% command; |\bitstack| itself only draws the stack effect. The
+% enclosed |\bits| should not have a label.
+%
+% For technical reasons, the first bit field on each line is
+% |\fboxrule| narrower than it should be; this should not be
+% noticeable for typical values of |\fboxrule|. (See
+% section~\ref{fudge} for the full story.)
+%
+% \subsection{Alternatives}
+%
+% \DescribeMacro{\bitsub}
+% Sometimes a data structure may have its bit fields divided in
+% different ways according to circumstances, or a particular field may
+% hold one of a small range of values. To show these sorts of
+% alternatives, you can use |\bitsub|, which produces a sub-column of
+% bit fields, vertically centred on the current word.
+% |\bitsub[|\textit{style}|]{|\textit{label}|}{|\textit{bits}|}{|\textit{contents}|}|
+% makes a sub-column of width \textit{bits}. The first three arguments
+% are as for |\bits|, and \textit{contents} is the series of bit
+% fields to go in the column, as if in a |bitfield| environment,
+% separated by |\\|.
+%
+% \DescribeMacro{\bitsubspaced}
+% |\bitsub| draws the alternative bit fields contiguously; to make
+% room for a label on each bit field, use |\bitsubspaced|.
+% |\bitsubspaced| is the same as |\bitsub|, except that the second
+% argument is omitted; a label can be given as that of the top-most
+% bit field in the contents.
+%
+% \subsection{Helper commands}
+%
+% Some other commands are provided to help draw bit field diagrams.
+% \DescribeMacro{\bitdots} |\bitdots| draws a vertical ellipsis,
+% like |\vdots|, but centred on the column of words.
+% \DescribeMacro{\bittext} |\bittext{|\textit{text}|}| allows text
+% to be inserted between words in a column, adding appropriate
+% vertical spacing.
+%
+% \subsection{Style parameters}
+%
+% There are many style parameters that allow the layout of bit field
+% diagrams to be customised:
+%
+% \begin{itemize}
+% \item[]\hskip-\leftmargin
+% \DescribeMacro{\bitalign}
+% |\bitalign| gives the alignment within the |bitfield|
+% environment; defaults to |\centering|.
+% \item[]\hskip-\leftmargin
+% \DescribeMacro{\bitboxsep}
+% |\bitboxsep| is the width of the left and right margins of the
+% bit field box; defaults to |\fboxsep|.
+% \item[]\hskip-\leftmargin
+% \DescribeMacro{\bitboxdepth}
+% |\bitboxdepth| is the depth of a bit field box; defaults to
+% 0.9ex.
+% \item[]\hskip-\leftmargin
+% \DescribeMacro{\bitboxheight}
+% |\bitboxheight| is the height of bit field box; defaults to
+% 3.2ex.
+% \item[]\hskip-\leftmargin
+% \DescribeMacro{\bitskip}
+% |\bitskip| is the vertical space between words; defaults to
+% 0.8ex.
+% \item[]\hskip-\leftmargin
+% \DescribeMacro{\bitrule}
+% |\bitrule| is the thickness of the label rule; defaults to
+% |\fboxrule|.
+% \item[]\hskip-\leftmargin
+% \DescribeMacro{\bitlabellift}
+% |\bitlabellift| is the lift of the label above the top of
+% the box; defaults to 0.4ex.
+% \item[]\hskip-\leftmargin
+% \DescribeMacro{\bitruleheight}
+% |\bitruleheight| is the height of the label rule above the
+% baseline (top of the box); defaults to 0.6ex.
+% \item[]\hskip-\leftmargin
+% \DescribeMacro{\bitruleendlift}
+% |\bitruleendlift| is the height of the ends of the label
+% rule above the baseline; defaults to 0.2ex.
+% \end{itemize}
+% \StopEventually{}
+%
+%
+% \section{Example}
+%
+% Here is an example showing most of the features of the |bitfield|
+% package:
+%
+% \begin{center}
+% \begin{bitfield}{32}
+% \bits{31}{1}{s}
+% \bits{30 \hfill 23}{8}{eeeeeeee}
+% \bits{22 \hfill 0}{23}{mmmmmmmmmmmmmmmmmmmmmm} \\
+% \end{bitfield}
+% \end{center}
+%
+% \begin{center}
+% \begin{bitfield}{16}
+% \bits[r]{sixteen}{16}{16 bits wide}\\
+% \bits[d]{}{4}{optional}\bitstack{}{4}{\bits{}{4}{many}}\\
+% \bits[r]{}{8}{fixed}%
+% \bitsubspaced{8}{\bits{}{8}{optional 1}\\\bits{}{8}{optional 2}}\\
+% \end{bitfield}
+% \end{center}
+%
+%
+% \section{Implementation}
+%
+% \subsection{Preliminaries}
+%
+% Make sure we've got what we need, and announce the package.
+%
+% \begin{macrocode}
+%<*package>
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{bitfield}[2001/12/12 v2.00 Bit field diagrams]
+\RequirePackage{dashbox}[2001/12/11]
+\RequirePackage{calc}[1998/07/07]
+\RequirePackage{ifthen}
+% \end{macrocode}
+%
+% \subsection{Style parameters}
+%
+% Define and give the default values of the style parameters.
+%
+% \begin{macro}{\bitalign}
+% \begin{macrocode}
+\newcommand{\bitalign}{\centering}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\bitboxsep}
+% \begin{macrocode}
+\newlength{\bitboxsep} \setlength{\bitboxsep}{\fboxsep}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\bitboxdepth}
+% \begin{macrocode}
+\newlength{\bitboxdepth} \setlength{\bitboxdepth}{0.9ex}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\bitboxheight}
+% \begin{macrocode}
+\newlength{\bitboxheight} \setlength{\bitboxheight}{3.2ex}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\bitskip}
+% \begin{macrocode}
+\newlength{\bitskip} \setlength{\bitskip}{0.8ex}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\bitrule}
+% \begin{macrocode}
+\newlength{\bitrule} \setlength{\bitrule}{\fboxrule}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\bitlabellift}
+% \begin{macrocode}
+\newlength{\bitlabellift} \setlength{\bitlabellift}{0.4ex}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\bitruleheight}
+% \begin{macrocode}
+\newlength{\bitruleheight} \setlength{\bitruleheight}{0.6ex}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\bitruleendlift}
+% \begin{macrocode}
+\newlength{\bitruleendlift} \setlength{\bitruleendlift}{0.2ex}
+% \end{macrocode}
+% \end{macro}
+%
+% In addition, define some private variables:
+%
+% \begin{itemize}
+% \item[]\hskip-\leftmargin
+% \DescribeMacro{\bitw@dth}
+% |\bitw@dth| is the width of a bit in the current word.
+% \item[]\hskip-\leftmargin
+% \DescribeMacro{\bitb@xwidth}
+% |\bitb@xwidth| is the width of the current field, excluding
+% margins.
+% \item[]\hskip-\leftmargin
+% \DescribeMacro{\bitw@dthwidth}
+% |\bitw@dthwidth| is the width of the label rule.
+% \item[]\hskip-\leftmargin
+% \DescribeMacro{\bitruled@pth}
+% |\bitruled@pth| is the depth of the label rule, which is
+% the thickness minus the height.
+% \item[]\hskip-\leftmargin
+% \DescribeMacro{\bitrule@ndheight}
+% |\bitrule@ndheight| is the height of the ends of the rule.
+% \item[]\hskip-\leftmargin
+% \DescribeMacro{bitb@xfirst}
+% |bitb@xfirst| is a boolean that is true when the first bit field
+% in a word is being set.
+% \item[]\hskip-\leftmargin
+% \DescribeMacro{\bitb@x}
+% |\bitb@x| is a save box used to hold a bitfield while the rule
+% is being added.
+% \end{itemize}
+%
+% \begin{macro}{\bitw@dth}
+% \begin{macrocode}
+\newlength{\bitw@dth}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\bitb@xwidth}
+% \begin{macrocode}
+\newlength{\bitb@xwidth}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\bitw@dthwidth}
+% \begin{macrocode}
+\newlength{\bitw@dthwidth}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\bitruled@pth}
+% \begin{macrocode}
+\newlength{\bitruled@pth}
+ \setlength{\bitruled@pth}{\bitrule-\bitruleheight}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\bitrule@ndheight}
+% \begin{macrocode}
+\newlength{\bitrule@ndheight}
+ \setlength{\bitrule@ndheight}%
+ {\bitruleheight*2-\bitrule-\bitruleendlift*2}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{bitb@xfirst}
+% \begin{macrocode}
+\newboolean{bitb@xfirst}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\bitb@x}
+% \begin{macrocode}
+\newsavebox{\bitb@x}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Internal commands}
+%
+% Some internal helper commands are defined first.
+%
+% \begin{macro}{\bitdec@destyle}
+% |\bitdec@destyle| decodes a style string. Three commands are set
+% up: |\bitb@xcmd|, to draw the box, |\bitst@ckcmd|, to draw a bit
+% stack box, and |\bitl@belcmd|, to draw a label.
+%
+% \begin{macrocode}
+\newcommand{\bitb@xcmd}{\framebox}%
+\newcommand{\bitst@ckcmd}{\lbox}%
+\newcommand{\bitl@belcmd}{\bitl@bel}%
+\newcommand{\bitdec@destyle}[1]{%
+% \end{macrocode}
+%
+% First, the commands are initialised with their default values.
+%
+% \begin{macrocode}
+ \renewcommand{\bitb@xcmd}{\framebox}%
+ \renewcommand{\bitst@ckcmd}{\lbox}%
+ \renewcommand{\bitl@belcmd}{\bitpl@inlabel}%
+% \end{macrocode}
+%
+% The style string is then scanned, and the commands altered
+% accordingly. The code here is adapted from that for the
+% picture version of |\makebox|.
+%
+% \begin{macrocode}
+ \@tfor\reserved@a :=#1\do{%
+ \if d\reserved@a
+ \renewcommand{\bitb@xcmd}{\dashbox}%
+ \renewcommand{\bitst@ckcmd}{\dlbox}%
+ \else
+ \if r\reserved@a%
+ \renewcommand{\bitl@belcmd}{\bitrulel@bel}%
+ \fi
+ \fi}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bitle@der}
+% |\bitle@der| produces the middle sections of label rules.
+%
+% \begin{macrocode}
+\newcommand{\bitle@der}{%
+ \cleaders\hrule height \bitruleheight depth \bitruled@pth%
+ \hfill}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bitpl@inlabel}
+% |\bitpl@inlabel| draws a label over a bit field box. The first argument
+% gives the width of the label, and the second the label text. The
+% label text is set at |\footnotesize|.
+%
+% \begin{macrocode}
+\newcommand{\bitpl@inlabel}[2]{%
+ \makebox[#1]{\footnotesize #2}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bitrulel@bel}
+% |\bitrulel@bel| draws a label with a rule. The first argument gives
+% the width, and the second the text to go in the middle.
+%
+% \begin{macrocode}
+\newcommand{\bitrulel@bel}[2]{%
+% \end{macrocode}
+%
+% The rule is typeset in a box of the given width
+%
+% \begin{macrocode}
+ \makebox[#1]{%
+% \end{macrocode}
+%
+% The label text is set at |\footnotesize|; the left-hand end is drawn,
+% followed by the left-hand horizontal, then a thin space, the
+% contents, another thin space, the right-hand horizontal, and finally
+% the right-hand end.
+%
+% \begin{macrocode}
+ \footnotesize%
+ \rule[\bitruleendlift]{\bitrule}{\bitrule@ndheight}%
+ \bitle@der\,#2\,\bitle@der%
+ \rule[\bitruleendlift]{\bitrule}{\bitrule@ndheight}}%
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bitl@bel}
+% |\bitl@bel| labels a bit field box. The first, optional, argument
+% gives an increment to add to the width of the label; this is used
+% for drawing stacks. The second argument gives the label text; the
+% third is the width of the box in bits, and the fourth is the box
+% itself.
+%
+% \begin{macrocode}
+\newcommand{\bitl@bel}[4][0pt]{%
+% \end{macrocode}
+%
+% The bit field box is saved.
+%
+% \begin{macrocode}
+ \sbox{\bitb@x}{#4}%
+% \end{macrocode}
+%
+% |\bitw@dthwidth| is calculated from the size of the box; the first
+% argument, if any, is added to it.
+%
+% \begin{macrocode}
+ \setlength{\bitw@dthwidth}{\wd\bitb@x-\bitboxsep*2-\fboxrule*2}%
+ \addtolength{\bitw@dthwidth}{#1}%
+% \end{macrocode}
+%
+% The label is drawn in a zero-width box, so that it takes up no space,
+% to avoid formatting problems.
+%
+% \begin{macrocode}
+ \ifthenelse{\equal{#2}{}}{\relax}{\makebox[0pt][l]{%
+% \end{macrocode}
+%
+% The label is raised by |\bitlabellift|, and the given horizontal
+% margin is left.
+%
+% \begin{macrocode}
+ \raisebox{\ht\bitb@x}{\raisebox{\bitlabellift}{%
+ {\hspace*{\fboxrule}\hspace*{\bitboxsep}%
+% \end{macrocode}
+%
+% The label is drawn.
+%
+% \begin{macrocode}
+ \bitl@belcmd{\bitw@dthwidth}{#2}%
+ }}}}}%
+% \end{macrocode}
+%
+% The box is now drawn underneath.
+%
+% \begin{macrocode}
+ \usebox{\bitb@x}%
+ }%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\m@kebits}
+% |\m@kebits| draws a bit field box. The arguments are the label
+% text, the number of bits in the field, and the contents of the field.
+%
+% \begin{macrocode}
+\newcommand{\m@kebits}[3]{%
+% \end{macrocode}
+%
+% |\bitb@xwidth| is set; the length is incremented by |\fboxrule| if
+% this box is not the first on the current line. This is because the
+% first box has two sides drawn; the rest only have the right-hand
+% side (subsequent box's left-hand sides overlap with the previous
+% box's right-hand side). |bitb@xfirst| is set to |false|, as the
+% next box cannot be the first!
+%
+% \begin{macrocode}
+ \setlength{\bitb@xwidth}{\bitw@dth*#2}%
+ \ifthenelse{\boolean{bitb@xfirst}}%
+ {}%
+ {\addtolength{\bitb@xwidth}{\fboxrule}}%
+ \setboolean{bitb@xfirst}{false}%
+% \end{macrocode}
+%
+% |\fboxsep| is locally set to 0pt, and the label and box are drawn.
+% The contents of the box is centred, and a margin of |\bitboxsep| is
+% left around it.
+%
+% \begin{macrocode}
+ \setlength{\fboxsep}{0pt}%
+ \bitl@bel{#1}{#2}{\bitb@xcmd[\bitb@xwidth]%
+ {\rule[-\bitboxdepth]{0pt}{\bitboxheight}%
+ \hspace*{\bitboxsep}\hfill#3\hfill\hspace*{\bitboxsep}}%
+% \end{macrocode}
+%
+% A negative space is left so that the next box's left-hand side
+% overlaps with this box's right-hand side.
+%
+% \begin{macrocode}
+ \hspace*{-\fboxrule}}%
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\m@kestack}
+% |\m@kestack| draws a bit field stack; it takes the same arguments as
+% |\m@kebits|.
+%
+% \begin{macrocode}
+\newcommand{\m@kestack}[3]{%
+ \setlength{\fboxsep}{0pt}%
+ \bitl@bel[-2\layersize]{#1}{#2}{\bitst@ckcmd{#3\hspace*{\fboxrule}}}%
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{User commands}
+%
+% Most of the user commands are just wrappers for the internal
+% commands.
+%
+% \begin{macro}{\bits}
+% \begin{macrocode}
+\newcommand{\bits}[4][]{%
+ \bitdec@destyle{#1}%
+ \m@kebits{#2}{#3}{#4}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\bitstack}
+% \begin{macrocode}
+\newcommand{\bitstack}[4][]{%
+ \bitdec@destyle{#1}%
+ \m@kestack{#2}{#3}{#4}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bitsubspaced}
+% |\bitsubspaced| sets its third argument in an |xbitfield|
+% environment with 0pt margins and no alignment, and ends with the
+% same negative kern as |\bits|.
+%
+% \begin{macrocode}
+\newcommand{\bitsubspaced}[3][]{%
+ \bitdec@destyle{#1}%
+ \renewcommand{\bitalign}{\relax}%
+ \begin{xbitfield}[#2\bitw@dth]{0pt}{#2}#3\end{xbitfield}%
+ \hspace*{-\fboxrule}}
+% \end{macrocode}
+% \end{macro}
+%
+% \label{fudge}
+% \begin{macro}{\bitsub}
+% |\bitsub| is written using |\bitsubspaced| by changing |\bitskip| to
+% $-$|\fboxrule|, so that the boxes overlap vertically in the same way
+% that bit fields normally do horizontally. Note the extra level of
+% bracketing so that the |\setlength| has only a local effect.
+%
+% \begin{macrocode}
+\newcommand{\bitsub}[4][]{%
+ {\setlength{\bitskip}{-\fboxrule}%
+ \bitl@bel{#2}{#3}{\bitsubspaced[#1]{#3}{#4}}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bitdots}
+% |\bitdots| simply draws a centred vertical ellipsis, 2.5ex high,
+% centred in a parbox of width |\textwidth|.
+%
+% \begin{macrocode}
+\newcommand{\bitdots}{%
+ \parbox{\textwidth}{%
+ \centering\vbox to 2.5ex{%
+ \cleaders\vbox to 0.8ex{\vfill.\vfill}\vfill}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bittext}
+% |\bittext| draws a zero-width rule of the correct height and depth
+% for a box next to the given text.
+%
+% \begin{macrocode}
+\newcommand{\bittext}[1]{%
+ \rule[-\bitboxdepth]{0pt}{\bitboxheight}#1}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{The environments}
+%
+% \begin{environment}{xbitfield}
+% The |xbitfield| environment provides the innards of the |bitfield|
+% environment. It provides a little extra customization, by means of
+% its second argument, which gives the left and right margin. The
+% other two arguments are as for the |bitfield| environment.
+%
+% \begin{macrocode}
+\newenvironment{xbitfield}[3][4in]%
+% \end{macrocode}
+%
+% First, |\bitw@dth| is calculated.
+%
+% \begin{macrocode}
+ {\setlength{\bitw@dth}{(#1-#2*2)/#3}%
+% \end{macrocode}
+%
+% The words are set in a minipage; the alignment is set according to
+% |\bitalign|, and inter-line spacing is turned off, so that only the
+% bit field layout parameters affect the result. |\endlinechar| is set
+% to $-1$ so that blank lines do not start a new paragraph. |\\| is
+% redefined to set |bitb@xfirst| to |true| as well as ending the
+% line, and |bitb@xfirst| is set to |true|.
+%
+% \begin{macrocode}
+ \begin{minipage}{#1}\bitalign%
+ \offinterlineskip%
+ \endlinechar=-1%
+ \renewcommand{\\}%
+ {\par\vspace{\bitskip}\setboolean{bitb@xfirst}{true}}%
+ \setboolean{bitb@xfirst}{true}%
+ }%
+% \end{macrocode}
+%
+% At the end of the environment, the minipage is closed, and
+% |bitb@xfirst| is set to |false| in case a |\bits| command is used
+% outside a |bitfield| environment (though that is not recommended).
+% \begin{macrocode}
+ {\end{minipage}%
+ \setboolean{bitb@xfirst}{false}}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{environment}{bitfield}
+% The |bitfield| environment simply invokes the |xbitfield|
+% environment with a margin of |\layersize|.
+%
+% \begin{macrocode}
+\newenvironment{bitfield}[2][4in]%
+ {\begin{xbitfield}[#1]{\layersize}{#2}}%
+ {\end{xbitfield}}
+% \end{macrocode}
+% \end{environment}
diff --git a/obsolete/macros/latex/contrib/bitfield/bitfield.ins b/obsolete/macros/latex/contrib/bitfield/bitfield.ins
new file mode 100644
index 0000000000..bc105407bc
--- /dev/null
+++ b/obsolete/macros/latex/contrib/bitfield/bitfield.ins
@@ -0,0 +1,6 @@
+\def\batchfile{bitfield.ins}
+\input docstrip.tex
+\preamble
+ Dashed and layered boxes.
+\endpreamble
+\generateFile{bitfield.sty} {t}{\from{bitfield.dtx}{package}}
diff --git a/obsolete/macros/latex/contrib/camel/index.dtx b/obsolete/macros/latex/contrib/camel/index.dtx
new file mode 100644
index 0000000000..2de849d0b6
--- /dev/null
+++ b/obsolete/macros/latex/contrib/camel/index.dtx
@@ -0,0 +1,1385 @@
+% \iffalse
+% ====================================================================
+% @LaTeX-style-file{
+% filename = "index.dtx",
+% version = "4.01beta",
+% date = "28 September 1995",
+% time = "22:45:34 EDT",
+% author = "David M. Jones",
+% address = "MIT Laboratory for Computer Science
+% Room NE43-316
+% 545 Technology Square
+% Cambridge, MA 02139
+% USA",
+% telephone = "(617) 253-5936",
+% FAX = "(617) 253-3480",
+% checksum = "44708 1384 5936 50287",
+% email = "dmjones@theory.lcs.mit.edu",
+% codetable = "ISO/ASCII",
+% keywords = "LaTeX, index",
+% supported = "yes",
+% docstring = "This is a reimplementation of LaTeX's
+% indexing macros to provide better support
+% for indexing in LaTeX. For example, it
+% supports multiple indexes in a single
+% document and provides a more robust \index
+% command.
+%
+% The checksum field above contains a CRC-16
+% checksum as the first value, followed by
+% the equivalent of the standard UNIX wc
+% (word count) utility output of lines,
+% words, and characters. This is produced
+% by Robert Solovay's checksum utility.",
+%
+% }
+% ====================================================================
+%
+% CAUTION: Use only as directed. Do not take internally. May cause
+% rash if applied directly to skin. Federal law prohibits distributing
+% without a proscription.
+%
+% \fi
+%
+%% \CheckSum{755}
+%% \CharacterTable
+%% {Upper-case \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
+%% Lower-case \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
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%
+% \iffalse
+% \begin{macrocode}
+%<*driver>
+\ProvidesFile{index.dtx}[1995/09/28 v4.1beta Improved index support (dmj)]
+%</driver>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*driver>
+\documentclass{ltxdoc}
+\def\docdate {7 March 1994}
+% \end{macrocode}
+% We don't want everything to appear in the index
+% \begin{macrocode}
+\DoNotIndex{\!,\/,\?,\@,\^,\_}
+\DoNotIndex{\@@par,\@M,\@auxout,\@bsphack,\@esphack,\@depth,\@ehc}
+\DoNotIndex{\@for,\@flushglue,\@gobble,\@gobbletwo,\@height,\@idxitem}
+\DoNotIndex{\@ifnextchar,\@ifstar,\@ifundefined,\@input,\@latexerr}
+\DoNotIndex{\@makeschapterhead,\@namedef,\@nameuse,\@nil}
+\DoNotIndex{\@nobreakfalse,\@restonecolfalse,\@restonecoltrue}
+\DoNotIndex{\@tempa,\@tempf,\@temptokena,\@themark,\@width}
+\DoNotIndex{\active,\aindex,\baselineskip,\begin,\begingroup,\box}
+\DoNotIndex{\c@page,\catcode,\chapter,\char,\chardef,\closeout}
+\DoNotIndex{\CodelineIndex,\sp,\sb,\label,\leavevmode,\mark}
+\DoNotIndex{\mark,\newinsert,\newwrite,\newtoks,\xdef}
+\DoNotIndex{\columnsep,\columnseprule,\columnwidth,\csname,\def}
+\DoNotIndex{\dimen,\do,\DocInput,\documentstyle,\edef,\em}
+\DoNotIndex{\EnableCrossrefs,\end,\endcsname,\endgroup,\endinput}
+\DoNotIndex{\everypar,\expandafter,\filedate,\fileversion}
+\DoNotIndex{\footnotesize,\gdef,\global,\glossary,\hangindent}
+\DoNotIndex{\if@filesw,\else,\fi}
+\DoNotIndex{\if@nobreak,\if@twocolumn,\if@twoside,\fi,\fi,\fi}
+\DoNotIndex{\hsize,\hskip}
+\DoNotIndex{\ifhmode,\ifmmode,\ifodd,\ifvmode,\ifx,\fi,\fi,\fi,\fi,\fi}
+\DoNotIndex{\immediate,\insert,\item,\jobname,\long}
+\DoNotIndex{\let,\lineskip,\marginparsep,\marginparwidth,\maxdimen}
+\DoNotIndex{\makeatletter,\noexpand,\openout,\protect,\rlap}
+\DoNotIndex{\min,\newpage,\nobreak,\normalbaselineskip}
+\DoNotIndex{\normallineskip,\p@,\par,\parfillskip,\parindent,\parskip}
+\DoNotIndex{\penalty,\relax,\section,\sin,\sloppy,\space,\string}
+\DoNotIndex{\tableofcontents,\the,\thepage,\thispagestyle,\toks,\tt}
+\DoNotIndex{\twocolumn,\uppercase,\vbox,\vrule,\vskip,\vss}
+\DoNotIndex{\write,\z@,\z@skip}
+% \end{macrocode}
+% Some useful macros and parameter settings:
+% \begin{macrocode}
+
+\setcounter{StandardModuleDepth}{1}
+
+\GetFileInfo{index.dtx}
+
+\newcommand*{\email}[1]{$\langle$\texttt{#1}$\rangle$}
+\newcommand*{\vdate}[1]{$\langle$#1$\rangle$}
+\newcommand*{\bundle}[1]{\texttt{#1}}
+\newcommand*{\program}[1]{\textsf{#1}}
+\newcommand*{\Ltag}[1]{\texttt{\bslash#1}}
+\newcommand*{\Lopt}[1]{\textsf {#1}}
+\newcommand*{\Lenv}[1]{\texttt {#1}}
+\newcommand*{\cls}[1]{\texttt {#1}}
+\newcommand*{\pck}[1]{\texttt {#1}}
+\newcommand*{\file}[1]{\texttt {#1}}
+\CodelineIndex
+% \end{macrocode}
+% And the document itself:
+% \begin{macrocode}
+\begin{document}
+\OnlyDescription
+\DocInput{index.dtx}
+\PrintIndex
+% ^^A\PrintChanges
+\end{document}
+%</driver>
+% \end{macrocode}
+%
+% \fi
+%
+% \title{A new implementation of \LaTeX's indexing
+% commands\thanks{This file has version number \fileversion,
+% last revised \filedate, documentation dated \docdate. The
+% definitive version of this file is at
+% \file{ftp://theory.lcs.mit.edu/pub/tex/index/}.}}
+%
+% \author{David M. Jones}
+%
+% \date{\filedate}
+%
+% \maketitle
+%
+% \section{Introduction}
+%
+% This style file reimplements \LaTeX's indexing macros to provide
+% better and more robust support for indexes. In particular, it
+% provides the following features:\footnote{Earlier versions of
+% this package provided a ``shortindexing'' feature (see below for
+% description). This feature is now deprecated and will be removed
+% in a future release of this package.}
+% \begin{enumerate}
+%
+% \item
+% Support for multiple indexes.
+%
+% \item
+% Indexing of items by counters other than the page number.
+%
+% \item
+% A $*$-variant of the \cs{index} command that, in addition to
+% putting it's argument in the index, also typesets it in the
+% running text.
+%
+% \item
+% The \bundle{showidx} style option has been merged into this file.
+% The command \cs{proofmodetrue} can be used to enable the printing
+% of index entries in the margin of pages. The size and style of
+% font can be controlled with the \cs{indexproofstyle} command.
+%
+% \item
+% A two-stage process, similar to that used to create tables of
+% contents, for creating the raw index files. This means that when
+% processing a portion of a document using the \cs{includeonly}
+% command, the index entries from the rest of the document are not
+% lost.
+%
+% \item
+% A more robust \cs{index} command. In particular, it no longer
+% depends on \cs{catcode} changes to work properly, so the new
+% \cs{index} command can be used in places that the original
+% couldn't, such as inside the arguments of other macros.
+%
+% \end{enumerate}
+%
+%
+% \section{Creating an index with \LaTeX}
+%
+% Conceptually, there are four stages to creating an index. First,
+% \LaTeX\ must be informed of your intention to include an index in
+% your document. Second, you must add appropriate markup commands
+% to your document to tell \LaTeX\ what to put in the index.
+% Third, after \LaTeX\ has been run on your document, the raw index
+% information must be processed and turned into a form that \LaTeX\
+% can process to typeset the index. Finally, the finished index
+% must be inserted at the appropriate point in your document.
+%
+% In \LaTeX, these steps are accomplished with the commands
+% \cs{makeindex}, \cs{index}, \cs{printindex}, and (typically) with
+% the auxiliary program \program{MakeIndex}. For example, assuming
+% that your main file is called \file{foo.tex}, \cs{makeindex}
+% opens the file \file{foo.idx} and initializes it for holding the
+% raw index entries, and \cs{index} is used to add raw index
+% entries into \file{foo.idx}. Then the raw index file is
+% processed by \program{MakeIndex}, which puts the finished index
+% in \file{foo.ind}. Finally, the \cs{printindex} command is used
+% in your \LaTeX\ document to indicate where the file
+% \file{foo.idx} should be inserted, i.e., where the index should
+% appear in your document.
+%
+% The \bundle{index} package modifies the \cs{makeindex},
+% \cs{index}, and \cs{printindex} commands, as described below.
+%
+%
+% \section{The user interface}
+%
+% There are four pieces of information associated with each index:
+% \begin{enumerate}
+%
+% \item
+% A short, unique tag that identifies the index.
+%
+% \item
+% The extension of the output file where the raw index information
+% will be put by \LaTeX.
+%
+% \item
+% The extension of the input file where the processed information
+% created by \program{MakeIndex} will be stored to be read in later
+% by \LaTeX.
+%
+% \item
+% The title of the index.
+%
+% \end{enumerate}
+%
+% \DescribeMacro{\newindex}
+% Correspondingly, the \cs{newindex} command has four required
+% arguments. For example, to declare an author index, you might
+% use the following:
+% \begin{verbatim}
+% \newindex{aut}{adx}{and}{Name Index}\end{verbatim}
+% Here, \texttt{aut} is the tag used to identify the author index,
+% and ``Name Index'' is the title of the index. If the name of
+% your main file is \file{root.tex}, then \LaTeX\ will write the
+% raw index entries to the file \file{root.adx}, and you will
+% execute the following \program{MakeIndex} command to process the
+% author index:
+% \begin{verbatim}
+% makeindex -o root.and root.adx\end{verbatim}
+%
+% By default, the \cs{index} tags its argument with the page number
+% (i.e., the value of \cs{thepage}), but occasionaly you may want
+% to index items according to a different counter. For example,
+% you may want an index that contains figure numbers instead of
+% page numbers. To accomodate, this, the \cs{newindex} command
+% takes an optional argument, which is the name of the command that
+% generates the number that should be included in the index. For
+% instance, to include the number of a figure, you might say
+% \begin{verbatim}
+% \newindex[thefigure]{fig}{fdx}{fnd}{Figures}\end{verbatim}
+%
+% However, this introduces a new technicality: When creating an
+% index with page numbers, the choice of which page number is to be
+% written to the \texttt{aux} file should be deferred until the
+% page containing the entry is shipped out to the \texttt{dvi}
+% file, otherwise the wrong number will sometimes be chosen.
+% However, when using counters other than the page counter, one
+% normally wants the opposite behaviour: the number written to the
+% \texttt{aux} file should be chosen immediately, otherwise every
+% item on a given page will be tagged with the number of the last
+% item on that page. So, when a counter is specified using the
+% optional argument of \cs{newindex}, it is assumed that the
+% counter should be evaluated immediately. If for some reason you
+% need the choice to be deferred until the page is written to the
+% \texttt{dvi} file, you can force this behaviour by putting a $*$
+% {\em after\/} the optional argument:
+% \begin{verbatim}
+% \newindex[thefigure]*{fig}{fdx}{fnd}{Figures}\end{verbatim}
+% (One consequence of this scheme is that if, for some reason, you
+% need the choice of page number to be made immediately instead of
+% being deferred until a page is shipped out to the \texttt{dvi}
+% file, you can acomplish this by beginning your index declaration
+% with
+% \begin{verbatim}
+% \newindex[thepage]*\end{verbatim}
+%
+%
+% \DescribeMacro{\renewindex}
+% The \cs{renewindex} command takes the same arguments as the
+% \cs{newindex} command and can be used to redefine indexes that
+% have been previously declared.
+%
+%
+% \DescribeMacro{\makeindex}
+% For backwards compatibility, the \cs{makeindex} command is
+% redefined to use \cs{newindex}. It is essentially equivalent to
+% \begin{verbatim}
+% \newindex{default}{idx}{ind}{Index}\end{verbatim}
+% The index labeled \texttt{default} is special: it is the one that
+% will be used by \cs{index} and \cs{printindex} unless another
+% index is specified (see below).
+%
+%
+% \DescribeMacro{\printindex}
+% The \cs{printindex} command is modified by the addition of an
+% optional argument, which is the tag of the index that should be
+% printed.
+%
+%
+% \DescribeMacro{\index}
+% The \cs{index} command is modified in two ways. First, there is
+% a $*$-variant of the command that, in addition to putting its
+% argument into an index, also typesets it on the page. Second,
+% \cs{index} now takes an optional argument to indicate which index
+% the new entry should be added to. If given, the optional
+% argument should be the identifying tag of a previously-defined
+% index. If no such tag is supplied, the \texttt{default} index
+% (such as that opened by \cs{makeindex} above) is used.
+%
+%
+% \DescribeMacro{\shortindexingon}
+% \DescribeMacro{\shortindexingoff}
+% Perhaps the most dubious feature of \bundle{index.sty} is that it
+% allows you to define the characters |^| and |_| to be
+% abbreviations for \cs{index*} and \cs{index} outside of math
+% mode. These abbreviations are enabled by the
+% \cs{shortindexingon} command and disabled by the
+% \cs{shortindexingoff} command. The scope of both of these latter
+% commands is local to the current group. (This might be useful,
+% for example, if you wanted the abbreviations turned on throughout
+% most of the documentation, but turned off in one particular
+% environment.) In addition,
+% \DescribeEnv{shortindexingon}\Lenv{shortindexingon} can be used
+% as an environment if that seems appropriate. \textbf{Warning:
+% This feature is deprecated and will disappear in a future release
+% of this package.}
+%
+%
+% \DescribeMacro{\proofmodetrue}
+% \DescribeMacro{\proofmodefalse}
+% \DescribeMacro{\indexproofstyle}
+% As mentioned above, the \bundle{showidx} document-style option
+% has been merged into \bundle{index.sty}. It can be turned on
+% with \cs{proofmodetrue} and turned off with \cs{proofmodefalse}.
+% When it is turned on, all index entries\footnote{Well, most, at
+% least. There are some circumstances under which the index
+% entries won't show up in the proofs, although they will show up
+% in the index.} will be put in the margin of the page where they
+% appear. By default, they appear in the typewriter font at
+% \cs{footnotesize}, but the user can override this with the
+% \cs{indexproofstyle} command; for example,
+% \begin{verbatim}
+% \indexproofstyle{\footnotesize\it}\end{verbatim}
+% will cause them to be put in italics instead.
+%
+%
+% \DescribeMacro{\disableindex}
+% There are some circumstances where it might be helpful to
+% suppress the writing of a particular index. The
+% \cs{disableindex} command is provided for this purpose. It takes
+% one argument, a comma-separated list of tags of the indexes that
+% should be disabled. This command should come {\em before\/} the
+% declarations for the indexes that are being
+% disabled\footnote{This limits its usefulness somewhat, but since
+% the output file for an index is opened when the index is
+% declared, the damage has already been done. We could close the
+% file, but we can't prevent a new output stream from being
+% allocated and we can't keep the old file from being truncated.}.
+% One situation where the \cs{disableindex} command might be useful
+% is if there are so many indexes that you are exhausting \TeX's
+% supply of output streams\footnote{\TeX\ only has 16 output
+% streams, which are allocated with the {\tt\string\newwrite}
+% command. The standard \LaTeX\ styles use from 3 to 7 of these,
+% which should leave room for up to 9 indexes. Of course, if you
+% have extra output files, then there will be fewer output streams
+% left for indexes.}. For example, suppose you have 10 indexes,
+% but only 5 output streams available for indexes. Then you could
+% add a \cs{disableindex} command to the top of your file to
+% suppress the writing of all but 5 of the indexes. (Note that the
+% index entries would still get written to the \texttt{aux} file;
+% they just wouldn't get copied to the individual raw index files
+% at the end of the run.) At the end of the run, you could then
+% re-run your main file a couple of times with different indexes
+% disabled until you had created all of the raw index files. This
+% is somewhat clumsy, but safer than any alternative I've come up
+% with\footnote{A less clumsy (for the user, at least) solution
+% would be to read the \texttt{aux} file multiple times at the end
+% of the run, each time writing just one of the raw index files.
+% The main disadvantage of this scheme at present is that it would
+% require a modification of {\tt\string\enddocument}.}.
+%
+%
+% \section{Caveats}
+%
+% In order to implement this style file, it's been necessary to
+% modify a number of \LaTeX\ commands seemingly unrelated to
+% indexing, namely, \cs{@starttoc}, \cs{raggedbottom},
+% \cs{flushbottom}, \cs{addcontents}, \cs{markboth}, and
+% \cs{markright}. Naturally, this could cause incompatibilities
+% between \bundle{index.sty} and any style files that either
+% redefine these same commands or make specific assumptions about
+% how they operate. See Section~\ref{sec:thecode} for explanations
+% of why these various commands needed modification.
+%
+% The redefinition of \cs{@starttoc} is particularly bad, since it
+% introduces an incompatibility with the AMS document classes.
+% This will be addressed soon.
+%
+% Unfortunately, it's also been necessary to modify the
+% \Lenv{theindex} environment, so if you don't like the default
+% \LaTeX\ definition, you'll need copy the definition of
+% \Lenv{theindex} from this file and modify it appropriately.
+%
+% In the current implementation, \bundle{index.sty} uses one output
+% stream for each index. Since there are a limited number of
+% output indexes, this means that there is a limit on the number of
+% indexes you can have in a document. See the description of
+% \cs{disableindex} for a fuller discussion of this problem and one
+% way around it.
+%
+%
+% \section{To do's}
+%
+% It might be nice if the \cs{index*} command parsed its argument
+% so that, for example, instead of writing
+% `|\index{sin@$\sin$}$\sin$|', one could write
+% `|index*{sin@$\sin$}|'. However, this is fraught with numerous
+% dangers, and I'm both too lazy and too cowardly to undertake it
+% now.
+%
+% It would be reasonable to add support for \cs{makeglossary} and
+% similar things, if they were well-defined enough to decide what
+% the general syntax for defining them should be.
+%
+% The documentation should be carefully read, edited, and finished,
+% especially since it's still based on the 2.09 version, even
+% though a few substantial changes have been made for the \LaTeXe\
+% version.
+%
+% For some truly outlandish ideas, see the file \file{TODO} in the
+% distribution.
+%
+% \StopEventually{}
+%
+% \section{The code}
+% \label{sec:thecode}
+%
+% As is customary, identify this as a \LaTeXe\ package.
+% \begin{macrocode}
+%<*style>
+\NeedsTeXFormat{LaTeX2e}[1995/06/01]
+
+\ProvidesPackage{index}[1995/09/28 v4.1beta Improved index support (dmj)]
+% \end{macrocode}
+%
+% \begin{macro}{\disableindex}
+% The \cs{disableindex} should come before the declarations of the
+% indexes it refers to. (Question: If an index has been disabled,
+% should it show up in index proofs? Maybe there should be a
+% separate command to disable index proofs on and index-by-index
+% basis.)
+% \begin{macrocode}
+\def\disableindex#1{%
+ \@for\@tempa:=#1\do{%
+ \@namedef{disable@\@tempa}{}%
+ \@ifundefined{tf@\@tempa}{}{%
+ \PackageWarningNoLine{index}{It's too late to disable
+ the `\@tempa' index;\MessageBreak
+ \jobname.\@tempa\space has already
+ been opened for output. You \MessageBreak
+ should put the \string\disableindex\space command
+ before\MessageBreak
+ the declaration of the `\@tempa' index}%
+ }%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\if@newindex}
+% \begin{macro}{\newindex}
+% \begin{macro}{\renewindex}
+% The \cs{newindex} and \cs{renewindex} commands are defined on
+% analogy with the \cs{[re]newcommand} macros. Each index is
+% identified by a unique tag, which is specified in the first
+% required argument of \cs{newindex}. Much of the information
+% about the index labeled \meta{tag} is kept in the macro
+% \cs{idx@}\meta{tag}, so we can check to see if a particular index
+% has already been defined by checking whether \cs{idx@}\meta{tag}
+% is defined. \cs{newindex} and \cs{renewindex} both check to see
+% if their first argument is already associated with an index and
+% then either issue an appropriate error message or call
+% \cs{def@index}.
+%
+% The \cs{if@newindex} flag will be used to keep \cs{renewindex}
+% from re-allocating \cs{write} and \cs{toks} registers later. The
+% \cs{if@tempswa} switch will be used to determine whether the
+% \cs{write}s for this index should be done \cs{immediate}ly or
+% not.
+% \begin{macrocode}
+\newif\if@newindex
+
+\def\newindex{%
+ \@tempswafalse
+ \@ifnextchar[{\@tempswatrue\x@newindex}{\x@newindex[thepage]}%
+}
+
+\def\x@newindex[#1]{%
+ \@ifstar {\@tempswafalse\y@newindex{#1}}
+ {\y@newindex{#1}}%
+}
+
+\def\y@newindex#1#2{%
+ \@ifundefined{idx@#2}%
+ {\@newindextrue\def@index{#1}{#2}}%
+ {%
+ \@latexerr{Index type `\string#2' already defined}\@ehc
+ \expandafter\@gobble\@gobbletwo
+ }%
+}
+
+\def\renewindex{%
+ \@tempswafalse
+ \@ifnextchar[{\@tempswatrue\x@renewindex}{\x@renewindex[thepage]}%
+}
+
+\def\x@renewindex[#1]{%
+ \@ifstar {\@tempswafalse\y@renewindex{#1}}
+ {\y@renewindex{#1}}%
+}
+
+\def\y@renewindex#1#2{%
+ \@ifundefined{idx@#2}%
+ {%
+ \@newindextrue
+ \@latexerr{Index type `\string#2' not defined}\@ehc
+ }%
+ {\@newindexfalse}%
+ \def@index{#1}{#2}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@preamblecmds}
+% Neither \cs{newindex}, \cs{renewindex}, nor \cs{disableindex}
+% should be used anywhere except inside style files or in the
+% preamble of a document, so we add them to the \cs{@preamblecmds}
+% list.
+% \begin{macrocode}
+\@onlypreamble\newindex
+\@onlypreamble\renewindex
+\@onlypreamble\disableindex
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\def@index}
+% \cs{def@index} does most of the work. First, it picks up the
+% first three arguments of the \cs{[re]newindex} command and stores
+% the second two in an appropriate \cs{idx@} macro. The title of
+% the index is treated differently, however, since it is
+% potentially fragile in a particularly odd way. To prevent
+% mishaps, it is stored in a token register. In addition to
+% stashing away the information about the index, \cs{def@index}
+% also opens an appropriate output file if we are writing auxiliary
+% files (i.e., unless \cs{nofiles} is in effect).
+%
+% \begin{macrocode}
+\def\def@index#1#2#3#4{%
+ \@namedef{idx@#2}{#3:#4:#1}%
+ \expandafter\let\csname if@immediate@#2\endcsname\if@tempswa
+ \if@filesw
+ \if@newindex
+ \expandafter\newtoks\csname idxtitle@#2\endcsname
+ \fi
+ \@ifundefined{disable@#2}{%
+ \if@newindex
+ \expandafter\newwrite\csname tf@#2\endcsname
+ \else
+ \immediate\closeout\@nameuse{tf@#2}%
+ \fi
+ \immediate\openout\@nameuse{tf@#2}\jobname.#3 %
+ \PackageInfo{index}{Writing index file \jobname.#3}%
+ }
+ {\PackageInfo{index}{Index `#2' disabled -- not opening
+ \jobname.#3}}%
+ \fi
+ \expandafter\csname idxtitle@#2\endcsname
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@second}
+% \begin{macro}{\@third}
+% These are useful macros for retrieving the second and third field
+% of an index specification.
+% \begin{macrocode}
+\def\@second#1:#2:#3\@nil{#2}
+
+\def\@third#1:#2:#3\@nil{#3}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@nearverbatim}
+% |\@nearverbatim\foo| is much like |\meaning\foo|,
+% except that it suppresses the ``\texttt{macro ->}'' string
+% produced when \cs{meaning} expands a macro. It is used by
+% \cs{@wrindex} to produce an ``almost verbatim'' copy of their
+% arguments. This method replaces the use of \cs{@sanitize} from
+% latex.tex and allows indexing macros to be used in places (such
+% as inside macro arguments) where the original \cs{index} command
+% could not. Thanks to Donald Arseneau
+% \email{asnd@erich.triumf.ca} for pointing out this trick to me.
+% (For more information on this trick, see Dirty Trick \#3 of the
+% \TeX book, page 382).
+%
+% As defined, \@nearverbatim only works on macros. It would be
+% nice if it could work with other tokens, but it's more important
+% that it work only by expansion, which means we can't put in tests
+% to see what the next token is.
+% \begin{macrocode}
+\def\@nearverbatim{\expandafter\strip@prefix\meaning}
+% \end{macrocode}
+% \end{macro}
+%
+% Now we define the \cs{index} macro itself. The following
+% definitions are adapted from \bundle{latex.tex} v2.09 \vdate{25
+% March 1992}.
+%
+% \begin{macro}{\makeindex}
+% First we redefine \cs{makeindex} to define the default index
+% using \cs{newindex}. We use \cs{edef} to make sure that
+% \cs{indexname} gets expanded here. Otherwise we'll get into an
+% infinite loop later on when we try to redefine \cs{indexname}
+% inside the \cs{theindex} environment.
+%
+% Unfortunately, this means that if the user changes \cs{indexname}
+% in the preamble, the index will come out with the wrong heading.
+% \begin{macrocode}
+\edef\makeindex{%
+ \noexpand\newindex{default}{idx}{ind}{\indexname}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\if@silentindex}
+% \begin{macro}{\if@addtoindex}
+% \begin{macro}{\if@proofmode}
+% We need three new flags. The first, \cs{if@silentindex},
+% indicates whether the entry should be typeset in running text, as
+% well as written out to the index; this is used to implement the
+% \cs{index*} command. The second, \cs{if@addtoindex}, indicates
+% whether entries should be written to the index; this is used to
+% disable the \cs{index} command inside of page headings and tables
+% of contents. The third, \cs{ifproofmode}, indicates whether
+% index entries should be put in the margin of the page for
+% proofing purposes.
+% \begin{macrocode}
+\newif\if@silentindex\@silentindextrue
+
+\newif\if@addtoindex\@addtoindextrue
+
+\newif\ifproofmode\proofmodefalse
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\index}
+% \begin{macro}{\p@index}
+% \begin{macro}{\x@index}
+% \cs{index} will be made self-protecting (a la \cs{em}, etc.) so
+% it can be used inside, for example, sectioning commands.
+% Unfortunately, to really make \cs{index} robust, we have to
+% redefine some of \LaTeX's commands for dealing with tables of
+% contents and page headings. (See below.) $*$sigh$*$
+% \begin{macrocode}
+\def\index{\protect\p@index}
+
+\def\p@index{%
+ \if@silentindex\@bsphack\fi
+ \@ifstar{\@silentindexfalse\@xindex}{\@silentindextrue\@xindex}%
+}
+
+\def\@xindex{\@ifnextchar[{\@index}{\@index[default]}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@index}
+% \begin{macro}{\@@index}
+% \begin{macro}{\@wrindex}
+% The following is much more complicated than it should have to be.
+% First, note the check to see if \cs{index} is equal to
+% \cs{@gobble}. This is so I don't have to redefine
+% \cs{@outputpage}, which temporarily disables \cs{label},
+% \cs{index}, and \cs{glossary} by \cs{let}'ing them equal to
+% \cs{@gobble}. (For this reason, we have to be very careful to
+% make sure that \cs{index} has expanded to \cs{p@index} before it
+% gets to \cs{@outputpage}.) Second, note that if
+% \cs{if@addtoindex} is false, we don't complain about undefined
+% index types. This is because if your page headings, for example,
+% are being typeset in all uppercase, you might end up with
+% something like \cs{index[AUT]{...}} instead of
+% \cs{index[aut]{...}}.
+% \begin{macrocode}
+\def\@index[#1]{%
+ \ifx\index\@gobble
+ \@addtoindexfalse
+ \fi
+ \def\@tempf{%
+ \begingroup
+ \@sanitize
+ \@@index{#1}%
+ }%
+ \if@addtoindex
+ \@ifundefined{idx@#1}%
+ {%
+ \def\@tempf{%
+ \@latexerr{Index type `\string#1' undefined}%
+ \@ehc
+ \@silentindextrue
+ \@gobble
+ }%
+ }%
+ {}%
+ \fi
+ \@tempf
+}
+
+\def\@@index#1#2{%
+ \endgroup
+ \if@addtoindex
+ \if@filesw\@wrindex{#1}{#2}\fi
+ \ifproofmode\@showidx{#2}\fi
+ \fi
+ \if@silentindex
+ \expandafter\@esphack
+ \else
+ \@silentindextrue#2%
+ \fi
+}
+
+\def\@wrindex#1#2{%
+ \begingroup
+ \def\@tempa{#2}%
+ \edef\@tempb{\@nameuse{idx@#1}}%
+ \edef\@tempb{\expandafter\@third\@tempb\@nil}%
+ \csname if@immediate@#1\endcsname \else
+ \expandafter\let\csname\@tempb\endcsname\relax
+ \fi
+ \edef\@tempa{%
+ \write\@auxout{%
+ \string\@writefile{#1}{%
+ \string\indexentry{\@nearverbatim\@tempa}%
+ {\@nameuse{\@tempb}}%
+ }%
+ }%
+ }%
+ \expandafter\endgroup\@tempa
+ \if@nobreak\ifvmode\nobreak\fi\fi
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\seename}
+% \begin{macro}{\see}
+% \begin{macro}{\printindex}
+% \begin{macro}{\@printindex}
+% The following are adapted from \bundle{makeidx.sty}, v2.09
+% \vdate{21 Oct 91}. \cs{index@prologue} adapted from
+% \bundle{doc.dtx}. \Lenv{theindex} based on version from
+% \bundle{classes.dtx}, v1.3g, 26 June 1995.
+% \begin{macrocode}
+\providecommand{\seename}{see}
+
+\providecommand*{\see}[2]{\emph{\seename} #1}
+
+\@ifclassloaded{article}{%
+
+ \renewenvironment{theindex}{%
+ \edef\indexname{\the\@nameuse{idxtitle@\@indextype}}%
+ \if@twocolumn
+ \@restonecolfalse
+ \else
+ \@restonecoltrue
+ \fi
+ \columnseprule \z@
+ \columnsep 35\p@
+ \twocolumn[%
+ \section*{\indexname}%
+ \ifx\index@prologue\@empty\else
+ \index@prologue
+ \bigskip
+ \fi
+ ]%
+ \@mkboth{\MakeUppercase\indexname}%
+ {\MakeUppercase\indexname}%
+ \thispagestyle{plain}%
+ \parindent\z@
+ \parskip\z@ \@plus .3\p@\relax
+ \let\item\@idxitem
+ }{%
+ \if@restonecol
+ \onecolumn
+ \else
+ \clearpage
+ \fi
+ }
+}{%
+ \renewenvironment{theindex}{%
+ \edef\indexname{\the\@nameuse{idxtitle@\@indextype}}%
+ \if@twocolumn
+ \@restonecolfalse
+ \else
+ \@restonecoltrue
+ \fi
+ \columnseprule \z@
+ \columnsep 35\p@
+ \twocolumn[%
+ \@makeschapterhead{\indexname}%
+ \ifx\index@prologue\@empty\else
+ \index@prologue
+ \bigskip
+ \fi
+ ]%
+ \@mkboth{\MakeUppercase\indexname}%
+ {\MakeUppercase\indexname}%
+ \thispagestyle{plain}%
+ \parindent\z@
+ \parskip\z@ \@plus .3\p@\relax
+ \let\item\@idxitem
+ }{%
+ \if@restonecol
+ \onecolumn
+ \else
+ \clearpage
+ \fi
+ }
+}
+
+\def\printindex{\@ifnextchar[{\@printindex}{\@printindex[default]}}
+
+\def\@printindex[#1]{%
+ \@ifnextchar[{\@print@index[#1]}{\@print@index[#1][]}%
+}
+
+\long\def\@print@index[#1][#2]{%
+ \def\@indextype{#1}%
+ \long\def\index@prologue{#2}%
+ \@ifundefined{idx@#1}%
+ {\@latexerr{Index type `\string#1' undefined}\@ehc}%
+ {%
+ \edef\@tempa{\@nameuse{idx@#1}}%
+ \edef\@tempa{%
+ \noexpand\@input@{\jobname.\expandafter\@second\@tempa\@nil}%
+ }%
+ \@tempa
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@indexstar@}
+% Now we set things up for
+% \cs{shortindexing}.\footnote{\textbf{Warning:} This feature is
+% deprecated and will be removed entirely in a future release of
+% this package.} First, we define a one-token shorthand for
+% \cs{index*}. This will be needed in the definition of
+% \cs{idx@activehat}.
+% \begin{macrocode}
+\def\@indexstar@{\index*}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\idx@activehat}
+% \begin{macro}{\idx@activebar}
+% Next, we define the values that |^| and |_| will have when
+% shortindexing is turned on.
+% \begin{macrocode}
+\def\idx@activehat{%
+ \relax
+ \ifmmode\expandafter\sp\else\expandafter\@indexstar@\fi
+}
+
+\def\idx@activebar{%
+ \relax
+ \ifmmode\expandafter\sb\else\expandafter\index\fi
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\shortindexingon}
+% \begin{macro}{\shortindexingoff}
+% Now we define the \cs{shortindexingon} and \cs{shortindexinoff}
+% commands to turn shortindexing on and off (surprise!).
+% \cs{shortindexingon} saves the old definitions and \cs{catcode}'s
+% of |^| and |_| so they can later be restored by
+% \cs{shortindexingoff}. Both of these make their changes local to
+% any enclosing group, so they can be used as declarations to
+% disable or enable shortindexing temporarily. In addition,
+% \Lenv{shortindexingon} can also be used as an environment.
+%
+% This is potentially very confusing. My basic rationale (if it
+% can be described as such) was that under normal circumstances,
+% one would put \cs{shortindexingon} in the preamble of one's
+% document, and never want to turn it off. \cs{shortindexingoff}
+% is an attempt to make allowance for the contingency that someone
+% might want to turn shortindexing off, either permanently or
+% temporarily.
+% \begin{macrocode}
+\newif\if@shortindexing
+
+\begingroup
+
+ \catcode`\^\active
+ \catcode`\_\active
+
+ \gdef\shortindexingon{%
+ \@shortindexingtrue
+ \chardef\old@idxhatcode\catcode`\^\relax
+ \chardef\old@idxbarcode\catcode`\_\relax
+ \catcode`\^\active
+ \catcode`\_\active
+ \let\old@idxhat ^%
+ \let\old@idxbar _%
+ \let^\idx@activehat
+ \let_\idx@activebar
+ }
+
+ \gdef\shortindexingoff{%
+ \if@shortindexing
+ \@shortindexingfalse
+ \let^\old@idxhat
+ \let_\old@idxbar
+ \catcode`\^\old@idxhatcode
+ \catcode`\_\old@idxbarcode
+ \fi
+ }
+
+\endgroup
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% Now we take some code from \bundle{showidx.sty} and merge it into
+% our new system. There are four reasons for redefining the
+% commands here rather than just inputting \bundle{showidx.sty} (or
+% requiring the user to do so). First, \bundle{showidx.sty} ends
+% with a call to \cs{flushbottom}, which I want to avoid. Second,
+% the instructions for successfully using \bundle{showidx.sty}
+% along with \bundle{index.sty} would be somewhat tricky. This
+% way, I can just tell users not to use \bundle{showidx.sty} at
+% all. Third, I need to make some alterations to \cs{@showidx}
+% anyway. In particular, (a) I need to add the \cs{@sanitizeat}
+% command so this works correctly with AMS-\LaTeX\ and (b) I want
+% to add the \cs{indexproofstyle} command so the user can customize
+% the size and font used for the index proofs. Finally,
+% \bundle{showidx.sty} has at least two annoying bugs in it. See
+% the edit-history for version 2.01 for a description.
+%
+% \begin{macro}{\@indexbox}
+% This code is adapted from \bundle{showidx.sty}, v2.09 \vdate{16
+% Jun 1991}.
+% \begin{macrocode}
+\newinsert\@indexbox
+
+\dimen\@indexbox\maxdimen
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@sanitizeat}
+% The definition of \cs{@sanitizeat} is slightly tricky, since we
+% need |@| to be active when this macro is defined, but we also
+% need it to be part of the control sequence name.
+% \begin{macrocode}
+\begingroup
+ \catcode`\@\active
+ \expandafter\gdef\csname\string @sanitizeat\endcsname
+ {\def @{\char`\@}}
+\endgroup
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\indexproofstyle}
+% \begin{macro}{\@showidx}
+% \begin{macro}{\@leftidx}
+% \begin{macro}{\@rightidx}
+% \begin{macro}{\@mkidx}
+% \begin{macro}{\raggedbottom}
+% \begin{macro}{\flushbottom}
+% \begin{macro}{\@texttop}
+% \begin{macrocode}
+\newtoks\indexproofstyle
+
+\indexproofstyle{\footnotesize\reset@font\ttfamily}
+
+\def\@showidx#1{%
+ \insert\@indexbox{%
+ \@sanitizeat
+ \the\indexproofstyle
+ \hsize\marginparwidth
+ \hangindent\marginparsep \parindent\z@
+ \everypar{}\let\par\@@par \parfillskip\@flushglue
+ \lineskip\normallineskip
+ \baselineskip .8\normalbaselineskip\sloppy
+ \raggedright \leavevmode
+ \vrule \@height .7\normalbaselineskip \@width \z@\relax#1\relax
+ \vrule \@height\z@ \@depth.3\normalbaselineskip \@width\z@\relax
+ }%
+ \ifhmode\penalty\@M \hskip\z@skip\fi
+}
+
+\def\@leftidx{\hskip-\marginparsep \hskip-\marginparwidth}
+
+\def\@rightidx{\hskip\columnwidth \hskip\marginparsep}
+
+\def\@mkidx{%
+ \vbox to \z@{%
+ \rlap{%
+ \if@twocolumn
+ \if@firstcolumn \@leftidx \else \@rightidx \fi
+ \else
+ \if@twoside
+ \ifodd\c@page \@rightidx \else \@leftidx \fi
+ \else
+ \@rightidx
+ \fi
+ \fi
+ \box\@indexbox
+ }%
+ \vss
+ }%
+}
+
+\def\raggedbottom{%
+ \def\@textbottom{\vskip\z@ plus.0001fil}%
+ \let\@texttop\@mkidx
+}
+
+\def\flushbottom{\let\@textbottom\relax \let\@texttop\@mkidx}
+
+\let\@texttop\@mkidx
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% Now, this next bit really gets up my nose. The only way to make
+% sure that the \cs{index} command gets handled correctly when used
+% inside of sectioning commands is to redefine a bunch of \LaTeX's
+% table of contents and running-heads macros. $*$blech$*$ Fragility
+% rears its ugly head again.
+%
+% These are based on \bundle{latex.tex} 2.09 \vdate{25 March 1992}.
+%
+% \begin{macro}{\addcontentsline}
+% We need to redefine \cs{addcontentsline} to keep it from
+% expanding \cs{index} commands too far. In particular, we have
+% removed \cs{index} from the list of macros that are set equal to
+% \cs{@gobble} and we substitute \cs{@vwritefile} for
+% \cs{@writefile}. This latter change also means that we can
+% simplify the definition of \cs{protect} somewhat.
+% \begin{macrocode}
+\CheckCommand\addtocontents[2]{%
+ \protected@write\@auxout
+ {\let\label\@gobble \let\index\@gobble \let\glossary\@gobble}%
+ {\string\@writefile{#1}{#2}}%
+}
+
+\renewcommand{\addtocontents}[2]{%
+ \protected@write\@auxout
+ {\let\label\@gobble \let\glossary\@gobble}%
+ {\string\@writefile{#1}{#2}}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@starttoc}
+% We need to redefine \cs{@starttoc} to \cs{@addtoindexfalse} so
+% that items don't get written to the index from within tables of
+% contents. The only change here is the addition of
+% \cs{@addtoindexfalse}.
+%
+% Unfortunately, this will break pretty badly with the AMS document
+% classes, since they redefine \cs{@starttoc} to take two arguments
+% rather than one. This must be addressed.
+%
+% \begin{macrocode}
+\let\old@starttoc\@starttoc
+
+\renewcommand{\@starttoc}[1]{%
+ \begingroup
+ \@addtoindexfalse
+ \old@starttoc{#1}%
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\markboth}
+% \begin{macro}{\markright}
+% Finally, we have to redefine \cs{markboth} and \cs{markright} to
+% keep them from disabling the expansion of \cs{index} while
+% putting section heads into the \cs{mark}. Otherwise, we'd end up
+% with ``\cs{index}'' in the mark, which would cause problems when
+% \cs{@outputpage} redefines \cs{index} to be equal to
+% \cs{@gobble}. Instead, we want \cs{index} to expand to
+% \cs{p@index} in the \cs{mark}, so we retain control over what
+% happens in \cs{@outputpage}.
+%
+% This time, the only change is to remove \cs{index} from the list
+% of macros that are \cs{let} equal to \cs{relax}.
+% \begin{macrocode}
+\CheckCommand*{\markboth}[2]{\gdef\@themark{{#1}{#2}}{%
+ \let\protect\@unexpandable@protect
+ \let\label\relax \let\index\relax \let\glossary\relax
+ \mark{\@themark}}\if@nobreak\ifvmode\nobreak\fi\fi}
+\CheckCommand*{\markright}[1]{{\let\protect\@unexpandable@protect
+ \let\label\relax \let\index\relax \let\glossary\relax
+ \expandafter\@markright\@themark
+ {#1}\mark{\@themark}}\if@nobreak\ifvmode\nobreak\fi\fi}
+
+\renewcommand{\markboth}[2]{%
+ \gdef\@themark{{#1}{#2}}%
+ \begingroup
+ \let\protect\@unexpandable@protect
+ \let\label\relax
+ \let\glossary\relax
+ \mark{\@themark}%
+ \endgroup
+ \if@nobreak\ifvmode\nobreak\fi\fi
+}
+
+\renewcommand{\markright}[1]{%
+ \begingroup
+ \let\protect\@unexpandable@protect
+ \let\label\relax
+ \let\glossary\relax
+ \expandafter\@markright\@themark{#1}%
+ \mark{\@themark}%
+ \endgroup
+ \if@nobreak\ifvmode\nobreak\fi\fi
+}
+%</style>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \section{Edit history}
+%
+% \begin{description}
+%
+% \item[v1.00 (4 Mar 1993)]
+% initial version, posted to comp.text.tex.
+%
+% \item[v1.01 (4 Mar 1993)]
+% added \cs{renewindex} command and checking to make sure index is
+% (or is not) defined in \cs{newindex}, \cs{index} and
+% \cs{printindex}. Also tightened up the code in various places
+% and added check to make sure file is only loaded once.
+%
+% \item[v2.00 (24 Mar 1993)]
+% added support for \cs{index*}, proofmode, \cs{shortindexingon}
+% and \cs{shortindexingoff}.
+%
+% \item[v2.01 (24 Jun 1993)]
+% Fixed 3 bugs. (1) If proofmode was turned on, then something
+% like ``\cs{index{WORD}WORD}'' would suppress the hyphenation of
+% WORD. This was fixed by adding ``|\penalty\@M\hskip\z@skip|'' to
+% the end of \cs{@showidx}. (This is just the definition of
+% \cs{allowhyphens} borrowed from \bundle{german.sty}, v2 \vdate{4
+% Nov 1988}). (2) The \cs{hbox} in \cs{@mkidx} was being set at
+% its natural width, which had a tendency to interfere with the
+% width of the page. The \cs{hbox} is now replaced by \cs{rlap}.
+% (3) If the title of an index (i.e., the fourth argument of
+% \cs{newindex}) contained a particularly fragile command
+% like~\cs{d}, havoc would ensue when \cs{theindex} tried to
+% extract the title. Titles are now kept in token registers to
+% prevent such unpleasantness. Bugs (2) and (3) were reported by
+% Dominik Wujastyk \email{D.Wujastyk@ucl.ac.uk} on 24 June 1993.
+% Note that bugs (1) and (2) are actually bugs in showidx.sty,
+% v2.09 \vdate{16 Jun 1991}.
+%
+% \item[v2.02 (25 Jun 1993)]
+% Rewrote the code that implements the short indexing commands (|^|
+% and |_|) to make index.sty compatible with other style files that
+% need to make |^| and |^| active in some contexts. See the code
+% for more details.
+%
+% \item[v2.03 (30 Jun 1993)]
+% Once again rewrote the code that implements the short indexing
+% commands. Dumped the shortindexing environment and rewrote the
+% \cs{shortindexingon} and \cs{shortindxingoff} commands to save
+% and restore the \cs{catcode}'s and meanings of |^| and |^| in the
+% safest possible (I hope) order. Also added the
+% \cs{if@shortindexing} flag to keep \cs{shortindexingoff} from
+% doing anything if it is called outside of the scope of a
+% \cs{shortindexingon} command. (Question: Should
+% \cs{shortindexingon} check that flag before doing anything?)
+%
+% \item[v2.04 (beta) (14 Jul 1993)]
+% Added \cs{disableindex} command. Added \cs{newindex} and
+% \cs{renewindex} to \cs{@preamblecmds}. Added \cs{if@newindex}
+% flag to \cs{@newindex} to prevent \cs{renewindex} from
+% re-allocating new \cs{write} and \cs{toks} registers. Rewrote
+% using \bundle{doc.sty} and \program{DocStrip}. Also cleaned up
+% the code somewhat.
+%
+% \item[v3.00 (15 Jul 1993)]
+% Made further minor tweaks to code and internal documentation.
+% Booted version number up to 3.00 and released on the world.
+%
+% \item[v3.01 (19 Jul 1993)]
+% Fixed \program{DocStrip} CheckSum.
+%
+% \item[v3.02 (15 Sep 1993)]
+% Corrected spelling of \cs{@shortindexingfalse} in definition of
+% \cs{shortindexingoff}. Thanks to Hendrik G. Seliger
+% \email{hank@Blimp.automat.uni-essen.de} for this bug report.
+% Also added redefinitions of \cs{@leftmark} and \cs{@rightmark} to
+% fix a bug reported by Dominik Wujastyk
+% \email{D.Wujastyk@ucl.ac.uk}.
+%
+% \item[v3.03 (beta) (20 Feb 1994)]
+% Added \cs{long} to the definition of \cs{@ifundefined} to cover
+% the unlikely contingency that someone wanted to use, for example,
+% |\string\par| in the middle of a control sequence name. Added an
+% optional argument to \cs{newindex} to specify which counter to
+% use in place of \cs{thepage}. The first change was suggested by
+% Martin Schr\"oder \email{l15d@zfn.uni-bremen.de}; the second was
+% suggested independently by Schr\"oder and Stefan Heinrich
+% H\"oning \email{hoening@pool.informatik.rwth-aachen.de}. The
+% \cs{@newindex} command was renamed \cs{def@index}. Also fixed
+% the \cs{disableindex} command.
+%
+% \item[v3.04 (7 Mar 1994)]
+% Rewrote the user documentation (Sections 1--5) and released on
+% the world. Also deleted some extraneous spaces that had crept
+% into some macros.
+%
+% \item[v4.00beta, (20 Feb 1995)]
+% Preliminary conversion to a native \LaTeXe\ package. Fixed
+% \cs{@printindex} to work under \LaTeXe\ (bug reported by Carsten
+% Folkertsma \email{cai@butler.fee.uva.nl}). Removed much code
+% that had been put in to work around various ancient versions of
+% \LaTeX~2.09. Added \cs{index@prologue} support (modelled on
+% \bundle{doc.sty}) at suggestion of Nick Higham
+% \email{higham@ma.man.ac.uk}.
+%
+% \item[v4.01beta (28 Sep 1995)]
+% Rewrote as a \LaTeXe\ package (finally!). Changes too numerous
+% to list, but in general deleted some now-superfluous code,
+% replaced some tricks by tricks from the \LaTeXe\ kernel, and
+% added some bullet-proofing. Much still remains to be done, but
+% this should be good enough for testing.
+%
+% Changed definition of \cs{protect} in \cs{markright} and
+% \cs{markboth} to fix bug reported by Dominik Wujastyk.
+%
+%
+% \end{description}
+%
+% \DisableCrossrefs
+%
+% \section{The sample file}
+%
+% \begin{macrocode}
+%<*sample>
+%% latex sample.tex
+%% makeindex sample
+%% makeindex -o sample.and sample.adx
+%% makeindex -o sample.nnd sample.ndx
+%% makeindex -o sample.lnd sample.ldx
+%% latex sample.tex
+
+\documentclass{book}
+\usepackage{index}
+
+\listfiles
+
+\makeindex
+\newindex{aut}{adx}{and}{Name Index}
+\newindex{not}{ndx}{nnd}{List of Notation}
+
+\newindex[theenumi]{list}{ldx}{lnd}{Items}
+
+\shortindexingon
+
+\proofmodetrue
+
+\def\aindex{\index*[aut]}
+
+\begin{document}
+
+\tableofcontents
+
+\newpage
+
+\chapter{Here is a ^[aut]{chapter} title}
+
+\section{Section header\index[aut]{section}}
+
+Here is some text.\index{subject}
+
+Here is \index[not]{notation}some more \index[not]{sin@$\sin$}
+text.
+
+\newpage
+
+Here is some ^{more} _[not]{notation} text.
+
+Here is yet more \aindex{text}.
+
+\section{Another Section header _[aut]{section2}}
+
+And here is some math: $x^1_b$.
+
+Here is an ^[aut]{index} entry \fbox{inside an
+\index[not]{min@$\min$}fbox}
+
+\fbox{Here is an ^[aut]{entry} in a box.}
+
+\section{An indexed list environment}
+
+\begin{enumerate}
+
+\item
+First item
+
+\item
+Second item\index[list]{second item}
+
+\item
+Third item
+
+\newpage
+
+\item
+Fourth item
+
+\item
+Fifth item\index[list]{fifth item}
+
+\item
+Sixth item
+
+\end{enumerate}
+
+\printindex[not]
+
+\printindex[aut][Here is a prologue for the author index.
+Note that it is set in a single column at the top of the
+first page of the index.]
+
+\printindex[list]
+
+\printindex
+
+\end{document}
+%</sample>
+% \end{macrocode}
+%
+% \Finale
+%
+\endinput
diff --git a/obsolete/macros/latex/contrib/camel/index.ins b/obsolete/macros/latex/contrib/camel/index.ins
new file mode 100644
index 0000000000..84d221a5b7
--- /dev/null
+++ b/obsolete/macros/latex/contrib/camel/index.ins
@@ -0,0 +1,8 @@
+\def\batchfile{index.ins}
+\input docstrip.tex
+
+\generateFile{index.sty}{t}{\from{index.dtx}{style}}
+
+\generateFile{sample.tex}{t}{\from{index.dtx}{sample}}
+
+\endinput
diff --git a/obsolete/macros/latex/contrib/cellwise/README b/obsolete/macros/latex/contrib/cellwise/README
new file mode 100644
index 0000000000..7e8a482f4c
--- /dev/null
+++ b/obsolete/macros/latex/contrib/cellwise/README
@@ -0,0 +1,4 @@
+A pure TeX macro to build tables cellwise, passing formats and commands to tables, cells, lines or columns, enhanced by a simple notes-function to add notes to every cell.
+
+
+
diff --git a/obsolete/macros/latex/contrib/cellwise/cellwise.sty b/obsolete/macros/latex/contrib/cellwise/cellwise.sty
new file mode 100644
index 0000000000..0ad440cdcd
--- /dev/null
+++ b/obsolete/macros/latex/contrib/cellwise/cellwise.sty
@@ -0,0 +1,41 @@
+\def\cellwise{\centerline{CELLWISE - a \TeX{}-macro }\centerline{Matthias Borck-Elsner matthias at kleinesnetzwerk.net}\vskip\baselineskip }%The
+ %title
+\newdimen\cellnotesize
+\newdimen\cellwidth
+\newdimen\cellheight
+\newdimen\cellwall
+\newcount\cells
+\newcount\cellfloors
+\newcount\cellblocks
+\newcount\jails
+\newcount\cellnotes
+\def\cellnotefont{cmr8}
+\def\jailcmds{}
+\def\cellblockcmds{}
+\def\cellfloorcmds{}
+\def\cellcmds{}
+\def\cellno{}
+\newwrite\cntnotes
+\immediate\openout\cntnotes=\jobname.cnt\relax
+ \font\cellnotesize=\cellnotefont
+ \def\cellnote#1{\global\advance\cellnotes by 1
+ $^{\the\cellnotes}$\immediate\write\cntnotes{
+\cellnotesize{\cellno $^{\the\cellnotes}$ #1 \hfill\vskip0.1\baselineskip }}}%
+\def\thecellnotes[#1]{#1 \vskip\baselineskip \immediate\closeout\cntnotes \input\jobname.cnt \relax}%
+
+\cellwidth=4cm \cellheight=4cm \cellwall=10pt
+\def\cellrag#1{#1}
+\def\jailname#1{#1 \vskip1.0\baselineskip}
+\def\jail#1{\advance\jails by 1 \cellblocks=0 \cellfloors=0 \cells=0
+ \parindent=0pt \jailcmds \vskip0.5\baselineskip #1}%
+%
+\def\cellblock#1{\advance\cellblocks by 1 \parindent=0pt \cellblockcmds #1 \vskip0.5\baselineskip }%
+%
+\def\cellfloor#1{\advance\cellfloors by 1 \parindent=0pt \hbox{\cellfloorcmds #1} \vskip0.5\baselineskip }
+%
+\def\cell#1{ \parindent=0pt %
+\advance\cells by 1 \vtop{\hsize=\cellwidth \cellnoshow \cellcmds
+ \vskip0.5\baselineskip \cellrag #1 \vfill
+ \vskip0.5\baselineskip}\hskip\cellwall}
+
+
diff --git a/obsolete/macros/latex/contrib/cellwise/cellwise.tex b/obsolete/macros/latex/contrib/cellwise/cellwise.tex
new file mode 100644
index 0000000000..0563b16055
--- /dev/null
+++ b/obsolete/macros/latex/contrib/cellwise/cellwise.tex
@@ -0,0 +1,73 @@
+
+\input cellwise.sty
+\cellwise
+\def\jailcmds{\ifnum \the\jails=1 \rm \else\fi}
+\def\cellblockcmds{\ifnum \the\cellblocks=1 \sl \else\fi}
+\def\cellfloorcmds{\ifnum \the\cellfloors=1 \it \else\fi}
+\def\cellcmds{\ifnum\the\cellfloors=1 \ifnum \the\cells=3 \tt \else \fi\fi}
+\def\cellno{\the\jails.\the\cellblocks.\the\cellfloors.\the\cells}
+\parindent=0pt
+This is a pure \TeX{} macro. The macro enables you to define jails (= tables),
+cellblocks(= tablesegments),cellfloors (=tablelines) and cells (= single
+cells) and to pass commands to them.Columns are represented by a series of
+cells(= all cells having the No. 3 make a column). Includes a simple notes function to place notes in a cell. Examples
+below. The code has not more than 38 lines, I think there is no need to
+comment it. \vskip\baselineskip
+
+\vbox{
+Example 1: The command $\backslash jailcmds \{\backslash ifnum \backslash
+the \backslash jails=2 \backslash rm \backslash else \backslash fi\}$
+tells \TeX{} to type the whole jail (=table) rm as long as no other
+command is given at a lower level.}
+\vskip\baselineskip
+\vbox{Example 2: The command $\backslash cellblockcmds \{\backslash
+ifnum \backslash the \backslash cellblocks=2 \backslash sl \backslash else \backslash fi\}$
+tells \TeX{} to type the whole cellblock (=tablesegment) slanted as long as no other
+command is given at a lower level.}
+\vskip\baselineskip
+
+\vbox{Example 3: The command $\backslash cellfloorcmds \{\backslash ifnum \backslash
+the \backslash cellfloors=2 \backslash it \backslash else \backslash fi\}$
+tells \TeX{} to type the whole cellfloor (=tableline) italic as long as no
+other command is given at a lower level.}
+\vbox{Example 4: The command $\backslash cellcmds \{\backslash ifnum \backslash
+the \backslash cells=2 \backslash tt \backslash else \backslash fi\}$
+tells \TeX{} to type the second cell in every jail/block/floor with boldface.}
+Commands maybe combined by the $\backslash if \backslash fi$ routines.
+Next feature will be, to let a text flow through the jails, blocks, floors and
+cells, but this is not worked out yet. The command will be defined
+as $\backslash$ cellchain.
+\cellrag{\raggedright}
+\def\cellnoshow{}
+\jail{\jailname{\centerline{Example 5: JAILHOUSE ROCK}}%
+\cellblock{%
+\cellfloor{%
+\cell{Spider Murphy\cellnote{Tenor Saxophone}}
+\cell{Little Joe \cellnote{Slide Trombone}}
+\cell{Escaped \cellnote{none}}
+}%
+\cellfloor{%
+\cell{Purple Gang \cellnote{Rhythm Section}}
+\cell{Escaped \cellnote{none}}
+\cell{Escaped \cellnote{none}}
+}%
+\cellfloor{%
+\cell{No.47}
+\cell{No.3}
+\cell{Escaped \cellnote{none}}
+}%
+\cellfloor{%
+\cell{Shifty Henry \cellnote{Wants to make a break}}
+\cell{Bugs\cellnote{Says:``Nix Nix''}}
+\cell{Escaped \cellnote{none}}
+}%
+}%
+}%
+
+\cellblock{
+\cellfloor{\cell{}}
+\cellfloor{
+\cell{}\cell{}
+}}
+{\thecellnotes[Instruments]}%
+\bye
diff --git a/obsolete/macros/latex/contrib/copypaste/README b/obsolete/macros/latex/contrib/copypaste/README
new file mode 100644
index 0000000000..26b4f39c60
--- /dev/null
+++ b/obsolete/macros/latex/contrib/copypaste/README
@@ -0,0 +1,31 @@
+Package: copypaste
+Description: Copy and paste
+
+This package is obsolete and has been superseded by the clipboard package.
+It provides a basic framework for copying and pasting.
+
+2013/01/11 v0.1
+ Initial version
+
+--------------------------------------------------------------------------------
+Installation:
+
+*Run: (This will generate copypaste.sty)
+ latex copypaste.ins
+
+*Copy copypaste.sty to a location where LaTeX will find it.
+ See http://www.tex.ac.uk/faq
+
+--------------------------------------------------------------------------------
+Usage:
+
+*See copypaste.pdf
+
+--------------------------------------------------------------------------------
+Copyright (C) 2013 Eduardo C. Lourenço de Lima
+
+This material is subject to the LaTeX Project Public License. See
+http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html
+for the details of that license
+
+This work has the LPPL maintenance status "author-maintained"
diff --git a/obsolete/macros/latex/contrib/copypaste/copypaste.dtx b/obsolete/macros/latex/contrib/copypaste/copypaste.dtx
new file mode 100644
index 0000000000..6d7b27d039
--- /dev/null
+++ b/obsolete/macros/latex/contrib/copypaste/copypaste.dtx
@@ -0,0 +1,178 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2013 Eduardo C. Lourenço de Lima
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either
+% version 1.3 of this license or (at your option) any later
+% version. The latest version of this license is in
+%
+% http://www.latex-project.org/lppl.txt
+%
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% \fi
+% \iffalse
+%
+%<package>\NeedsTeXFormat{LaTeX2e}[1996/06/01]
+%<package>\ProvidesPackage{copypaste}[2013/01/11 v0.1 Copy and paste]
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage{copypaste}
+\usepackage{color}
+\definecolor{orange}{rgb}{0.8,0.4,0.2}
+\newcommand\announcement[1]{\begin{center}\color{orange}#1\end{center}}
+\newenvironment{Description}
+ {\par\medskip\noindent\ignorespaces}{}
+\newenvironment{synopsis}
+ {\begin{list}{}
+ {\setlength\parsep{0pt}
+ \setlength\itemsep{0pt}}}
+ {\end{list}}
+\newenvironment{Example}[1]
+ {\if#1\else\paragraph{Example.}#1\fi}
+ {}
+\newenvironment{page}
+ {\begin{center}\begin{minipage}[t]{0.5\linewidth}}
+ {\end{minipage}\end{center}}
+\newcommand\TODO{\texttt{Todo:}}
+\begin{document}
+ \DocInput{copypaste.dtx}
+\end{document}
+%</driver>
+% \fi
+% \changes{0.1}{2013/01/11}{Initial version}
+% \GetFileInfo{copypaste.sty}
+% \CheckSum{199}
+% \DoNotIndex{\,,\@addtoreset,\begin,\closeout,\csname,\end,\endcsname}
+% \DoNotIndex{\expandafter}
+% \DoNotIndex{\@ifundefined,\immediate,\input,\jobname,\label}
+% \DoNotIndex{\@makebox,\makebox,\mbox,\MessageBreak,\@namedef,\@nameuse}
+% \DoNotIndex{\newcommand,\newcounter,\newenvironment,\newwrite,\noindent}
+% \DoNotIndex{\normalfont,\openout,\PackageError, \par,\parskip,\ref}
+% \DoNotIndex{\relax,\renewcommand,\setlength,\string}
+% \DoNotIndex{\write}
+% \title{The \textsf{copypaste} package\thanks{This document
+% corresponds to \textsf{copypaste}~\fileversion,
+% dated~\filedate.}}
+% \author{Eduardo C. Louren\c{c}o de Lima \\ \texttt{elourenco@phi.pro.br}}
+% \maketitle
+%
+%
+% \announcement{This package is obsolete and has been superseded by the |clipboard| package.}
+%
+% \section*{Introduction}
+%
+% This package provides a basic framework for copying and pasting content
+% into a single document, or across different documents.
+%
+% \section{Basic Usage}
+% \begin{synopsis}
+% \item |\savecopypaste| \marg{basename}
+% \item |\yank| \marg{key} \marg{content}
+% \item |\paste| \marg{key}
+% \item |\opencopypaste| \marg{basename}
+% \end{synopsis}
+%
+%
+% \begin{Description}
+% \DescribeMacro{\savecopypaste}
+% The first step is to create a copy-and-paste apparatus.
+% \begin{synopsis}
+% \item |\savecopypaste| \marg{basename}
+% \end{synopsis}
+% \end{Description}
+%
+% \begin{Description}
+% \DescribeMacro{\yank}
+% The command |\yank| typesets \meta{content} and identifies it as \meta{key}.\footnote
+% {\texttt{copy} is already defined in {\TeX}.}
+% \begin{synopsis}
+% \item |\yank| \marg{key} \marg{content}
+% \end{synopsis}
+% \end{Description}
+%
+% \begin{Description}
+% \DescribeMacro{\paste}
+% And |\paste| just typesets the content identified by \meta{key}.
+% \begin{synopsis}
+% \item |\paste| \marg{key}
+% \end{synopsis}
+% \end{Description}
+%
+% \begin{Description}
+% \DescribeMacro{\opencopypaste}
+% Finally, |\opencopypaste| makes available content from |doc1.tex| to |doc2.tex|. In that way, you can paste into |doc2.tex| content from |doc1.tex|. Make sure to use the same \meta{basename} in both documents.
+% \begin{synopsis}
+% \item |\opencopypaste| \marg{basename}
+% \end{synopsis}
+% \end{Description}
+%
+% \section{Example}
+%
+% This is how to copy |bar| from |doc1.tex| and paste it into |doc2.tex|:\bigskip
+%
+% \noindent |doc1.tex|:
+% \iffalse
+%<*example>
+% \fi
+\begin{verbatim}
+\documentclass{article}
+\usepackage{copypaste}
+\savecopypaste{myfoo}
+\begin{document}
+\yank{foo}{bar}
+\end{document}
+\end{verbatim}
+% \iffalse
+%</example>
+% \fi
+%
+% \noindent |doc2.tex|:
+% \iffalse
+%<*example>
+% \fi
+\begin{verbatim}
+\documentclass{article}
+\usepackage{copypaste}
+\opencopypaste{myfoo}
+\begin{document}
+\paste{foo}
+\end{document}
+\end{verbatim}
+% \iffalse
+%</example>
+% \fi
+%
+% \noindent Now, running:
+%
+% |$ latex doc1|
+%
+% |$ latex doc2|
+%
+% \noindent outputs 2 documents with the same content, namely, |bar|.
+%
+% \StopEventually
+%
+% \section{Implementation}
+% \begin{macrocode}
+\newwrite\@copypaste
+
+\newcommand\savecopypaste[1]{%
+ \immediate\openout\@copypaste=#1.cpy}
+
+\newcommand\opencopypaste[1]{%
+ \input{#1.cpy}}
+
+\newcommand\yank[2]{%
+ \defcopy{#1}{#2}%
+ \immediate\write\@copypaste{\noexpand\defcopy{#1}{\unexpanded{#2}}}%
+ #2}
+
+\newcommand\defcopy[2]{%
+ \@namedef{@copypaste@#1}{#2}}
+
+\newcommand\paste[1]{%
+ \@nameuse{@copypaste@#1}}
+% \end{macrocode}
diff --git a/obsolete/macros/latex/contrib/copypaste/copypaste.ins b/obsolete/macros/latex/contrib/copypaste/copypaste.ins
new file mode 100644
index 0000000000..16bc0b92c9
--- /dev/null
+++ b/obsolete/macros/latex/contrib/copypaste/copypaste.ins
@@ -0,0 +1,47 @@
+%% copypaste.ins
+%%
+%% Copyright (C) 2013 Eduardo C. Lourenço de Lima
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+\input docstrip.tex
+\keepsilent
+\preamble
+
+Copyright (C) 2013 Eduardo C. Lourenço de Lima
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either
+version 1.3 of this license or (at your option) any later
+version. The latest version of this license is in
+
+ http://www.latex-project.org/lppl.txt
+
+and version 1.3 or later is part of all distributions of LaTeX
+version 2005/12/01 or later.
+
+\endpreamble
+\generate{\file{copypaste.sty}{\from{copypaste.dtx}{package}}}
+\obeyspaces
+\Msg{****************************************************}
+\Msg{* *}
+\Msg{* To finish the installation you have to move the *}
+\Msg{* following file into a directory searched by TeX: *}
+\Msg{* *}
+\Msg{* copypaste.sty *}
+\Msg{* *}
+\Msg{* To produce the documentation run the file *}
+\Msg{* copypaste.dtx through LaTeX. *}
+\Msg{* *}
+\Msg{* Happy TeXing! *}
+\Msg{* *}
+\Msg{****************************************************}
+\endbatchfile
diff --git a/obsolete/macros/latex/contrib/copypaste/copypaste.pdf b/obsolete/macros/latex/contrib/copypaste/copypaste.pdf
new file mode 100644
index 0000000000..5439b1c44a
--- /dev/null
+++ b/obsolete/macros/latex/contrib/copypaste/copypaste.pdf
Binary files differ
diff --git a/obsolete/macros/latex/contrib/csvtools/README b/obsolete/macros/latex/contrib/csvtools/README
new file mode 100644
index 0000000000..d0e9175ea0
--- /dev/null
+++ b/obsolete/macros/latex/contrib/csvtools/README
@@ -0,0 +1,39 @@
+LaTeX Package : csvtools v 1.24
+
+Last Modified : 3 July 2007
+
+Author : Nicola Talbot
+
+Files : csvtools.dtx - documented source file
+ csvtools.ins - installation script
+ csvtools.pl - Perl script
+
+The csvtools package allows you to repeatedly perform
+a set of LaTeX commands on data in each row
+of a comma separated variable (CSV) file.
+This can be used for mail merging, generating
+tables etc. Examples given in documentation.
+
+To extract the code, do:
+
+latex csvtools.ins
+
+This will create the files csvtools.sty, csvpie.sty and csvsort.sty.
+These files should be place somewhere on TeX's search path.
+
+To extract the documentation, do:
+
+latex csvtools.dtx
+latex csvtools.dtx
+
+(If you want the documented source code as well, remove the command
+\OnlyDescription from csvtools.dtx)
+
+Alternatively, if you use pdflatex instead of latex, the documentation will
+have hyperlinks.
+
+This material is subject to the LaTeX Project Public License.
+See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html for
+details of that license.
+
+http://theoval.cmp.uea.ac.uk/~nlct
diff --git a/obsolete/macros/latex/contrib/csvtools/doc/CHANGES b/obsolete/macros/latex/contrib/csvtools/doc/CHANGES
new file mode 100644
index 0000000000..9e3d1a5284
--- /dev/null
+++ b/obsolete/macros/latex/contrib/csvtools/doc/CHANGES
@@ -0,0 +1,29 @@
+Version 1.24:
+Added csvsort.sty (requires xfor package and \'Eamonn McManus'
+compare.tex)
+
+Version 1.23:
+\par can now be used in entries (but all entries for a given
+row must be on the same line, so you can't use a blank line
+to indicate a paragraph break.)
+
+Version 1.22:
+\applyCSVfile now resets each field to nothing before scanning each
+row so that if a column is missing for a given row, that entry will
+be blank. (Note that this does not apply to the starred version, as
+the header row is used to determine the maximum number of columns.)
+\csvSaveEntry has an additional optional argument to supply text if
+that entry is omitted.
+
+Version 1.21:
+ Fixed problem caused when first field starts with repeated
+character
+
+Version 1.2:
+ added csvpie.sty
+ data separator can now be user defined
+ entries enclosed within double quotes are now parsed correctly
+
+Version 1.1 has the new command \CSVtolongtable (analogous to \CSVtotabular)
+and a Perl script. See documentation for details.
+
diff --git a/obsolete/macros/latex/contrib/csvtools/doc/csvtools.pdf b/obsolete/macros/latex/contrib/csvtools/doc/csvtools.pdf
new file mode 100644
index 0000000000..3e05495d31
--- /dev/null
+++ b/obsolete/macros/latex/contrib/csvtools/doc/csvtools.pdf
Binary files differ
diff --git a/obsolete/macros/latex/contrib/csvtools/doc/manual.html b/obsolete/macros/latex/contrib/csvtools/doc/manual.html
new file mode 100644
index 0000000000..ad8a6fe939
--- /dev/null
+++ b/obsolete/macros/latex/contrib/csvtools/doc/manual.html
@@ -0,0 +1,1615 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002 (1.67)
+original version by: Nikos Drakos, CBLU, University of Leeds
+* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+ Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>csvtools v1.24 : A LaTeX2e Package Providing Access to Data Saved in a CSV File</TITLE>
+<META NAME="description" CONTENT="csvtools v1.24 : A LaTeX2e Package Providing Access to Data Saved in a CSV File">
+<META NAME="keywords" CONTENT="manual">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+
+</HEAD>
+
+<BODY >
+
+
+ <H1 ALIGN="CENTER">csvtools v1.24 : A LaTeX2e Package Providing Access to Data Saved in a CSV File</H1>
+<P ALIGN="CENTER"><STRONG>Nicola Talbot</STRONG></P>
+<P ALIGN="CENTER"><STRONG>26th June 2007</STRONG></P>
+ <BR>
+
+<H2><A NAME="SECTION00010000000000000000">
+Contents</A>
+</H2>
+<!--Table of Contents-->
+
+<UL>
+<LI><A NAME="tex2html49"
+ HREF="manual.html#SECTION00030000000000000000">Introduction</A>
+<LI><A NAME="tex2html50"
+ HREF="manual.html#SECTION00040000000000000000">Mail Merging and Similar Applications</A>
+<LI><A NAME="tex2html51"
+ HREF="manual.html#SECTION00050000000000000000">Converting data in a CSV file into a tabular environment</A>
+<LI><A NAME="tex2html52"
+ HREF="manual.html#SECTION00060000000000000000">Converting CSV file into longtable environment</A>
+<LI><A NAME="tex2html53"
+ HREF="manual.html#SECTION00070000000000000000">Associated Counters</A>
+<LI><A NAME="tex2html54"
+ HREF="manual.html#SECTION00080000000000000000">Cross-Referencing</A>
+<LI><A NAME="tex2html55"
+ HREF="manual.html#SECTION00090000000000000000">Saving Entries</A>
+<LI><A NAME="tex2html56"
+ HREF="manual.html#SECTION000100000000000000000">Pie Charts (csvpie.sty)</A>
+<LI><A NAME="tex2html57"
+ HREF="manual.html#SECTION000110000000000000000">Sorting Data (csvsort.sty)</A>
+<LI><A NAME="tex2html58"
+ HREF="manual.html#SECTION000120000000000000000">The csvtools.pl Perl Script</A>
+<UL>
+<LI><A NAME="tex2html59"
+ HREF="manual.html#SECTION000122000000000000000">Notes</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html60"
+ HREF="manual.html#SECTION000130000000000000000">Bugs/Drawbacks/``Features''</A>
+<LI><A NAME="tex2html61"
+ HREF="manual.html#SECTION000140000000000000000">Contact Details</A>
+</UL>
+<!--End of Table of Contents-->
+<P>
+
+<H1><A NAME="SECTION00020000000000000000">
+List of Examples</A>
+</H1>
+
+<P>
+
+
+<OL>
+<LI><A HREF="manual.html#ex:mail">Mail Merging</A>
+</LI>
+<LI><A HREF="manual.html#ex:ps">Multiple Figures</A>
+</LI>
+<LI><A HREF="manual.html#ex:field">Mail Merging using <TT>&#92;field</TT></A>
+</LI>
+<LI><A HREF="manual.html#ex:tab1">Aligning Data from a CSV file</A>
+</LI>
+<LI><A HREF="manual.html#ex:tab2">Adding Lines</A>
+</LI>
+<LI><A HREF="manual.html#ex:tab3">Added Complexity</A>
+</LI>
+<LI><A HREF="manual.html#ex:long">Using a longtable environment</A>
+</LI>
+<LI><A HREF="manual.html#ex:stripy">Stripy Table</A>
+</LI>
+<LI><A HREF="manual.html#ex:mailref">More Mail Merging</A>
+</LI>
+<LI><A HREF="manual.html#ex:ref1">Labelling within <TT>&#92;applyCSVfile</TT></A>
+</LI>
+<LI><A HREF="manual.html#ex:ref2">Labelling within <TT>&#92;applyCSVfile</TT></A>
+</LI>
+<LI><A HREF="manual.html#ex:timetogrowth">Labelling within <TT>&#92;CSVtotabular</TT></A>
+</LI>
+<LI><A HREF="manual.html#ex:tablabel">Labelling within <TT>&#92;CSVtotabular</TT></A>
+</LI>
+<LI><A HREF="manual.html#ex:index">Saving Entries</A>
+</LI>
+<LI><A HREF="manual.html#ex:piechart">A Pie Chart</A>
+</LI>
+<LI><A HREF="manual.html#ex:perl">csvtools.pl -- Aligning Data</A>
+</LI>
+</OL>
+
+<P>
+
+<H1><A NAME="SECTION00030000000000000000">
+Introduction</A>
+</H1>
+ The <TT>csvtools</TT> package allows you to repeatedly perform
+ a set of LaTeX commands on data in each row
+ of a comma separated variable (CSV) file.
+ This can be used for mail merging, generating
+ tables etc.
+
+<P>
+As from version 1.2, you can specify a different separator.
+To change the separator, use the command:
+<BR>
+<BR><TT>&#92;setcsvseparator</TT>{<I>separator</I>}
+<BR>
+<BR>
+For example, if your data is separated by colons instead of
+commas, do:
+<PRE>
+\setcsvseparator{:}
+</PRE>
+If your separator occurs within an entry, the entry must be
+enclosed in double quotes, for example:
+<PRE>
+Name,Address,Telephone
+A.N. Other,"1 The Street,The Town",0123456789
+</PRE>
+Be careful of T<SMALL>E</SMALL>X special characters occuring within a CSV
+file, for example:
+<PRE>
+Name,Address,Telephone
+Jack \&amp; Jill,"2 The Street,The Town",0123456789
+</PRE>
+
+<P>
+
+<H1><A NAME="SECTION00040000000000000000">
+Mail Merging and Similar Applications</A>
+</H1>
+
+<P>
+
+ <TT>&#92;applyCSVfile</TT>[<I>n</I>]{<I>filename</I>}{<I>text</I>}
+<BR> <TT>&#92;applyCSVfile*</TT>[<I>n</I>]{<I>filename</I>}{<I>text</I>}
+<BR>
+<BR>
+Letters can be generated using data given in
+ each line from <I>filename</I>.
+ If the CSV file contains a header row, the
+ unstarred version of <TT>&#92;applyCSVfile</TT> should
+ be used, otherwise the starred version <TT>&#92;applyCSVfile*</TT>
+ should be used. The optional argument <I>n</I>
+ specifies on which line the actual data (not header line)
+ starts. The unstarred version defaults to line 2
+ (the header row is always assumed to be on line 1)
+ and the starred version defaults to 1.
+
+<P>
+With the unstarred version, the entries in the header row
+ are used to generate commands of the form
+ <TT>&#92;insert</TT><I>identifier</I><A NAME="tex2html1"
+ HREF="#foot869"><SUP>1</SUP></A> to access corresponding elements
+ in the row currently being processed. For example,
+ suppose the first line of the CSV file looks like:
+<PRE>
+Name,Address,Time,Date
+</PRE>
+ then the commands <TT>&#92;insertName</TT>, <TT>&#92;insertAddress</TT>,
+ <TT>&#92;insertTime</TT> and <TT>&#92;insertDate</TT> are
+ created, allowing you to use the entries in the first,
+ second, third and fourth columns of the current row.
+ If the header text contains non-alphabetical characters,
+ e.g. <TT>Full Name</TT>, then you will need to use
+ <TT>&#92;insertbyname{</TT><I>text</I><TT>}</TT>,
+ e.g. <code>\insertbyname{Full Name}</code>.
+
+<P>
+Alternatively, you can use the
+<TT>&#92;field</TT>{<I>col</I>} command, where
+<I>col</I> is the column number of the entry, so <code>\field{1}</code>
+indicates the first entry in the current row and <code>\field{2}</code>
+indicates the second entry in the current row.
+
+<P>
+<A NAME="ex:mail"></A>
+<H2><A NAME="SECTION00041000000000000000">
+Example 1 (Mail Merging)</A>
+</H2>
+ Suppose there is a file called <TT>details.csv</TT> that has the
+ following contents:
+<PRE>
+Name,Address,Time,Date
+Miss A. Person,1 The Road\\The Town\\AB1 2XY,15.00,4th May 2004
+Mr A. N. Other,2 The Road\\The Town\\AB1 2XY,15.30,11th May 2004
+</PRE>
+then the following code can be used to generate a letter for each
+person in the CSV file<A NAME="tex2html2"
+ HREF="#foot150"><SUP>2</SUP></A>:
+<PRE>
+\applyCSVfile{details.csv}{%
+\begin{letter}{\insertName\\\insertAddress}
+\opening{Dear \insertName}
+
+You are invited to an interview at \insertTime\ on the \insertDate.
+
+\closing{Yours Sincerely}
+\end{letter}}
+</PRE>
+ Note that you could also use <code>\insertbyname{Name}</code> etc instead
+ of <TT>&#92;insertName</TT> etc. Also note that you need to specify the
+ file extension when specifying the filename.
+<P>
+<DIV ALIGN="CENTER">
+</DIV>
+
+<P>
+
+<P>
+<A NAME="ex:ps"></A>
+<H2><A NAME="SECTION00042000000000000000">
+Example 2 (Multiple Figures)</A>
+</H2>
+ Suppose <TT>sample3.csv</TT> looks like:
+<PRE>
+File,Caption
+circle.ps,A Circle
+rectangle.ps,A Rectangle
+triangle.ps,A Triangle
+</PRE>
+ Assuming that the files <TT>circle.ps</TT>, <TT>rectangle.ps</TT>
+ and <TT>triangle.ps</TT> exist, then the following code will
+ generate a figure for each graphics file<A NAME="tex2html3"
+ HREF="#foot870"><SUP>3</SUP></A>:
+<PRE>
+\applyCSVfile{sample3.csv}{
+\begin{figure}
+\centerline{\includegraphics{\insertFile}}
+\caption{\insertCaption}
+\end{figure}}
+</PRE>
+ Note that in this example, you can't use <code>\insertbyname{File}</code>.
+ (See Note&nbsp;<A HREF="manual.html#itm:psbyname">3</A> in Section&nbsp;<A HREF="manual.html#sec:drawbacks">11</A>.)
+<P>
+<DIV ALIGN="CENTER">
+</DIV>
+
+<P>
+
+<P>
+<A NAME="ex:field"></A>
+<H2><A NAME="SECTION00043000000000000000">
+Example 3 (Mail Merging using <TT>&#92;field</TT>)</A>
+</H2>
+ Suppose there is a file called <TT>details.csv</TT> that has the
+ following contents:
+<PRE>
+Miss A. Person,1 The Road\\The Town\\AB1 2XY,15.00,4th May 2004
+Mr A. N. Other,2 The Road\\The Town\\AB1 2XY,15.30,11th May 2004
+</PRE>
+In this case the data has no header file, so the starred version
+of <TT>&#92;applyCSVfile</TT> must be used. Since there is no header
+file, you must use <TT>&#92;field</TT> to access the entries:
+<PRE>
+\applyCSVfile*{details.csv}{%
+\begin{letter}{\field{1}\\\field{2}}
+\opening{Dear \field{1}}
+
+You are invited to an interview at \field{3}\ on the \field{4}.
+
+\closing{Yours Sincerely}
+\end{letter}}
+</PRE>
+<P>
+<DIV ALIGN="CENTER">
+</DIV>
+
+<P>
+
+<P>
+
+<H1><A NAME="SECTION00050000000000000000">
+Converting data in a CSV file into a tabular environment</A>
+</H1>
+
+ <TT>&#92;CSVtotabular</TT>{<I>filename</I>}{<I>col-align</I>}{<I>first</I>}{<I>middle</I>}{<I>last</I>}
+<BR>
+<BR> <I>filename</I> is the name of the CSV file which must have a header row on line&nbsp;1,
+ <I>col-align</I> is the column alignment argument that gets passed
+ to the <TT>tabular</TT> environment, <I>first</I>
+ is the code for the first line, <I>middle</I> is the code
+ for the middle lines and <I>last</I> is the code for the last line.
+ This is best demonstrated with an example.
+
+<P>
+<A NAME="ex:tab1"></A>
+<H2><A NAME="SECTION00051000000000000000">
+Example 4 (Aligning Data from a CSV file)</A>
+</H2>
+ Suppose the file <TT>sample.csv</TT> looks like:
+<PRE>
+Name,Assignment 1,Assignment 2,Total
+A. Smith,80,70,150
+B. Jones,60,80,140
+J. Doe,85,75,160
+,75,75,150
+</PRE>
+ then the following code can be used to align the data:
+<PRE>
+\CSVtotabular{sample.csv}{lccc}{%
+\bfseries Name &amp;
+\bfseries Assignment 1&amp;
+\bfseries Assignment 2&amp;
+\bfseries Total\\}{%
+\insertName &amp;
+\insertbyname{Assignment 1} &amp;
+\insertbyname{Assignment 2} &amp;
+\insertTotal\\}{%
+ &amp;
+\insertbyname{Assignment 1} &amp;
+\insertbyname{Assignment 2} &amp;
+\insertTotal}
+</PRE>
+ The result of this code is shown in
+ Table&nbsp;<A HREF="manual.html#tab:ex1">1</A><A NAME="tex2html4"
+ HREF="#foot872"><SUP>4</SUP></A>.
+<BR><P></P>
+<DIV ALIGN="CENTER">
+
+<A NAME="tab:ex1"></A>
+<BR>
+<BR>
+<DIV ALIGN="CENTER">
+<A NAME="873"></A>
+<TABLE CELLPADDING=3>
+<CAPTION><STRONG>Table 1:</STRONG>
+Example&nbsp;<A HREF="manual.html#ex:tab1">4</A></CAPTION>
+<TR><TH ALIGN="LEFT"><B>Name </B></TH>
+<TH ALIGN="CENTER"><B>Assignment 1 </B></TH>
+<TH ALIGN="CENTER"><B>Assignment 2 </B></TH>
+<TH ALIGN="CENTER"><B>Total</B></TH>
+</TR>
+<TR><TD ALIGN="LEFT">A. Smith</TD>
+<TD ALIGN="CENTER">80</TD>
+<TD ALIGN="CENTER">70</TD>
+<TD ALIGN="CENTER">150</TD>
+</TR>
+<TR><TD ALIGN="LEFT">B. Jones</TD>
+<TD ALIGN="CENTER">60</TD>
+<TD ALIGN="CENTER">80</TD>
+<TD ALIGN="CENTER">140</TD>
+</TR>
+<TR><TD ALIGN="LEFT">J. Doe</TD>
+<TD ALIGN="CENTER">85</TD>
+<TD ALIGN="CENTER">75</TD>
+<TD ALIGN="CENTER">160</TD>
+</TR>
+<TR><TD ALIGN="LEFT">&nbsp;</TD>
+<TD ALIGN="CENTER">75</TD>
+<TD ALIGN="CENTER">75</TD>
+<TD ALIGN="CENTER">150</TD>
+</TR>
+</TABLE></DIV>
+
+</DIV>
+<BR>
+<P>
+<DIV ALIGN="CENTER">
+</DIV>
+
+<P>
+
+<P>
+<BR>
+<BR>
+
+ <TT>&#92;ifnextrowlast</TT>{<I>last-code</I>}{<I>not-last-code</I>}
+<BR>
+<BR>
+The command <TT>&#92;ifnextrowlast</TT> can be used to vary what happens
+ on the last but one row. The following example illustrates
+ this by placing <TT>&#92;hline&#92;hline</TT> after the penultimate row.
+
+<P>
+<A NAME="ex:tab2"></A>
+<H2><A NAME="SECTION00052000000000000000">
+Example 5 (Adding Lines)</A>
+</H2>
+<PRE>
+\CSVtotabular{sample.csv}{|l|ccc|}{%
+\hline\bfseries Name &amp;
+\bfseries Assignment 1&amp;
+\bfseries Assignment 2&amp;
+\bfseries Total\\\hline\hline}{%
+\insertName &amp;
+\insertbyname{Assignment 1} &amp;
+\insertbyname{Assignment 2} &amp;
+\insertTotal
+\ifnextrowlast{\\\hline\hline}{\\}}{%
+ &amp;
+\insertbyname{Assignment 1} &amp;
+\insertbyname{Assignment 2} &amp;
+\insertTotal\\\hline}
+</PRE>
+See the PDF version (<TT><A NAME="tex2html7"
+ HREF="csvtools.pdf">csvtools.pdf</A></TT>) of this
+documentation for an illustration of the results.
+<P>
+<DIV ALIGN="CENTER">
+</DIV>
+
+<P>
+
+<P>
+<A NAME="ex:tab3"></A>
+<H2><A NAME="SECTION00053000000000000000">
+Example 6 (Added Complexity)</A>
+</H2>
+ In this example, <TT>&#92;multicolumn</TT> is used to override
+ the column specifier for the first column in the
+ last row.
+<PRE>
+\CSVtotabular{sample2.csv}{|l|ccc|}{%
+\hline\bfseries Name &amp;
+\bfseries Assignment 1 &amp;
+\bfseries Assignment 2 &amp;
+\bfseries Total\\\hline\hline
+}{%
+\insertName &amp;
+\insertbyname{Assignment 1} &amp;
+\insertbyname{Assignment 2} &amp;
+\insertTotal
+\ifnextrowlast{\\\hline\multicolumn{1}{l|}{}}{\\}
+}{%
+ &amp;
+\insertbyname{Assignment 1} &amp;
+\insertbyname{Assignment 2} &amp;
+\insertTotal\\\cline{2-4}
+}
+</PRE>
+ Notice that instead of placing <code>\multicolumn{1}{l|}{}</code>
+ at the start of the final argument, it is instead
+ placed in the first argument to <TT>&#92;ifnextrowlast</TT><A NAME="tex2html8"
+ HREF="#foot877"><SUP>5</SUP></A>.
+See the PDF version (<TT><A NAME="tex2html10"
+ HREF="csvtools.pdf">csvtools.pdf</A></TT>) of this
+manual for an illustration of the results.
+<P>
+<DIV ALIGN="CENTER">
+</DIV>
+
+<P>
+
+<P>
+
+<H1><A NAME="SECTION00060000000000000000">
+Converting CSV file into longtable environment</A>
+</H1>
+
+The command <TT>&#92;CSVtolongtable</TT> works in the same way as <TT>&#92;CSVtotabular</TT> but
+ creates a <TT>longtable</TT> environment instead of a <TT>tabular</TT> environment.
+
+<P>
+<A NAME="ex:long"></A>
+<H2><A NAME="SECTION00061000000000000000">
+Example 7 (Using a longtable environment)</A>
+</H2>
+Suppose the CSV file in the previous example, contains, say, 100 entries.
+This will no longer fit onto one page, so it would be better to use
+<TT>CSVtolongtable</TT> instead. For example:
+<PRE>
+\CSVtolongtable{sample.csv}{|l|ccc|}{%
+\caption{Student Marks}\label{tab:students}\\
+\hline
+\bfseries Name &amp;
+\bfseries Assignment 1 &amp;
+\bfseries Assignment 2 &amp;
+\bfseries Total\\\hline
+\endfirsthead
+\caption[]{Student Marks}\\
+\hline
+\bfseries Name &amp;
+\bfseries Assignment 1 &amp;
+\bfseries Assignment 2 &amp;
+\bfseries Total\\\hline
+\endhead
+\hline
+\multicolumn{3}{r}{\em Continued on next page}
+\endfoot
+\hline
+\endlastfoot}{%
+\insertName &amp;
+\insertbyname{Assignment 1} &amp;
+\insertbyname{Assignment 2} &amp;
+\insertTotal
+\ifnextrowlast{\\\hline\hline}{\\}}{%
+ &amp; \insertbyname{Assignment 1} &amp;
+ \insertbyname{Assignment 2} &amp;
+\insertTotal\\}
+</PRE>
+<P>
+<DIV ALIGN="CENTER">
+</DIV>
+
+<P>
+
+<P>
+
+<H1><A NAME="SECTION00070000000000000000">
+Associated Counters</A>
+</H1>
+
+<P>
+Within the <TT>&#92;CSVtotabular</TT>, <TT>&#92;CSVtolongtable</TT> and
+<TT>&#92;applyCSVfile</TT> commands, there are two
+ counters, <TT>csvlinenum</TT> and <TT>csvrownumber</TT>.
+ The former, <TT>csvlinenum</TT>, is the current line number in the CSV
+ file, whereas the latter, <TT>csvrownumber</TT>, is the current
+ data row. Of the two counters, <TT>csvrownumber</TT> is likely to be
+ the most useful.
+
+<P>
+<A NAME="ex:stripy"></A>
+<H2><A NAME="SECTION00071000000000000000">
+Example 8 (Stripy Table)</A>
+</H2>
+David&nbsp;Carlisle's <TT>colortbl</TT> package defines the command
+<TT>&#92;rowcolor</TT> which enables you to specify the row colour.
+Suppose you want a stripy table<A NAME="tex2html11"
+ HREF="#foot297"><SUP>6</SUP></A>,
+ this can be achieved as follows:
+<PRE>
+\CSVtotabular{sample2.csv}{lccc}{%
+\rowcolor{green}\bfseries Name &amp;
+\bfseries Assignment 1 &amp;
+\bfseries Assignment 2 &amp;
+\bfseries Total\\\rowcolor{blue}
+}{%
+\insertName &amp;
+\insertbyname{Assignment 1} &amp;
+\insertbyname{Assignment 2} &amp;
+\insertTotal
+\ifthenelse{\isodd{\value{csvrownumber}}}{%
+\\\rowcolor{green}}{\\\rowcolor{blue}}
+}{%
+ &amp;
+\insertbyname{Assignment 1} &amp;
+\insertbyname{Assignment 2} &amp;
+\insertTotal
+}
+</PRE>
+See the PDF version (<TT><A NAME="tex2html13"
+ HREF="csvtools.pdf">csvtools.pdf</A></TT>)
+for an illustration of the resulting table.
+<P>
+<DIV ALIGN="CENTER">
+</DIV>
+
+<P>
+
+<P>
+<A NAME="ex:mailref"></A>
+<H2><A NAME="SECTION00072000000000000000">
+Example 9 (More Mail Merging)</A>
+</H2>
+This is an example of mail merging where the letter reference
+is generated from the value of <TT>csvrownumber</TT>. The CSV file
+is as used in Example&nbsp;<A HREF="manual.html#ex:mail">1</A>.
+<PRE>
+\applyCSVfile{details.csv}{%
+\begin{letter}{\insertName\\\insertAddress}
+\opening{Dear \insertName}
+
+\textbf{Ref : } interview.\thecsvrownumber
+
+You are invited to an interview at \insertTime\ on the \insertDate.
+
+\closing{Yours Sincerely}
+\end{letter}}
+</PRE>
+<P>
+<DIV ALIGN="CENTER">
+</DIV>
+
+<P>
+
+<P>
+
+<H1><A NAME="SECTION00080000000000000000">
+Cross-Referencing</A>
+</H1>
+
+<P>
+Labels can be generated using the standard
+ <TT>&#92;label</TT> command, but you will need some way
+ to make each label unique. Example&nbsp;<A HREF="manual.html#ex:ref1">10</A>
+ does this by using <TT>&#92;thecsvrownumber</TT>,
+ whereas Example&nbsp;<A HREF="manual.html#ex:ref2">11</A> uses <TT>&#92;insert</TT><I>identifier</I>.
+
+<P>
+<A NAME="ex:ref1"></A>
+<H2><A NAME="SECTION00081000000000000000">
+Example 10 (Labelling within <TT>&#92;applyCSVfile</TT>)</A>
+</H2>
+ Example&nbsp;<A HREF="manual.html#ex:ps">2</A> can be modified to
+ label each figure:
+<PRE>
+\applyCSVfile{sample3.csv}{
+\begin{figure}
+\centerline{\includegraphics{\insertFile}}
+\caption{\insertCaption}
+\label{fig:pic\thecsvrownumber}
+\end{figure}}
+</PRE>
+ This example uses
+ <code>\label{fig:pic\thecsvrownumber}</code>, so the first figure
+generated by this <TT>&#92;applyCSVfile</TT> command will have the
+label <TT>fig:pic1</TT>, the second <TT>fig:pic2</TT> etc.
+<P>
+<DIV ALIGN="CENTER">
+</DIV>
+
+<P>
+
+<P>
+<A NAME="ex:ref2"></A>
+<H2><A NAME="SECTION00082000000000000000">
+Example 11 (Labelling within <TT>&#92;applyCSVfile</TT>)</A>
+</H2>
+ Modifying the previous example, we now have:
+<PRE>
+\applyCSVfile{sample3.csv}{
+\begin{figure}
+\centerline{\includegraphics{\insertFile}}
+\caption{\insertCaption}
+\label{fig:\insertFile}
+\end{figure}}
+</PRE>
+ The labels for each figure are now:
+ <TT>fig:circle.ps</TT>, <TT>fig:rectangle.ps</TT>
+ and <TT>fig:triangle.ps</TT>, respectively.
+<P>
+<DIV ALIGN="CENTER">
+</DIV>
+
+<P>
+
+<P>
+<A NAME="ex:timetogrowth"></A>
+<H2><A NAME="SECTION00083000000000000000">
+Example 12 (Labelling within <TT>&#92;CSVtotabular</TT>)</A>
+</H2>
+ This example is slightly more complicated.
+ The CSV file, <TT>data.csv</TT> looks like:
+<PRE>
+Incubation Temperature,Incubation Time,Time to Growth
+40,120,40
+40,90,60
+35,180,20
+</PRE>
+The following code generates a table using the data
+ with an additional column that generates the experiment
+ number. (See note&nbsp;<A HREF="manual.html#itm:csvrownumber">8</A>.)
+<PRE>
+\begin{table}
+\caption{Time to Growth Experiments}
+\label{tab:exp}
+\vspace{10pt}
+\centering
+\CSVtotabular{data.csv}{cccc}{%
+ % Header Row
+\bfseries Experiment &amp;
+\bfseries \begin{tabular}{c}Incubation\\Temperature\end{tabular} &amp;
+\bfseries \begin{tabular}{c}Incubation\\Time\end{tabular} &amp;
+\bfseries \begin{tabular}{c}Time\\to\\Growth\end{tabular}\\}{%
+ % Middle Rows
+\label{exp:\insertbyname{Incubation Temperature}:\insertbyname{Incubation Time}}
+\thecsvrownumber &amp;
+\insertbyname{Incubation Temperature} &amp;
+\insertbyname{Incubation Time} &amp;
+\insertbyname{Time to Growth} \\}{%
+ % Final Row
+\label{exp:\insertbyname{Incubation Temperature}:\insertbyname{Incubation Time}}
+\thecsvrownumber &amp;
+\insertbyname{Incubation Temperature} &amp;
+\insertbyname{Incubation Time} &amp;
+\insertbyname{Time to Growth}}
+\par
+\end{table}
+
+It can be seen from Table~\ref{tab:exp}, that
+Experiment~\ref{exp:35:180} had the shortest time to growth.
+</PRE>
+ In this example, each experiment has the corresponding label
+ <TT>exp:</TT><I>Incubation Temperature</I><TT>:</TT><I>Incubation Time</I>
+ so the first experiment has label <TT>exp:40:120</TT>, the
+ second experiment has the label <TT>exp:40:90</TT> and the
+ third experiment has the label <TT>exp:35:180</TT>.
+
+<P>
+Table&nbsp;<A HREF="manual.html#tab:timetogrowth">2</A> shows the resulting table for
+ this example.
+ <BR><P></P>
+<DIV ALIGN="CENTER">
+
+<A NAME="tab:timetogrowth"></A>
+<BR>
+<BR>
+<DIV ALIGN="CENTER"><A NAME="384"></A>
+<TABLE CELLPADDING=3>
+<CAPTION><STRONG>Table 2:</STRONG>
+Time to Growth Experiments</CAPTION>
+<TR><TH ALIGN="CENTER"><B>Experiment </B></TH>
+<TH ALIGN="CENTER"><B><TABLE CELLPADDING=3>
+<TR><TH ALIGN="CENTER">Incubation</TH>
+</TR>
+<TR><TH ALIGN="CENTER">Temperature</TH>
+</TR>
+</TABLE> </B></TH>
+<TH ALIGN="CENTER"><B><TABLE CELLPADDING=3>
+<TR><TH ALIGN="CENTER">Incubation</TH>
+</TR>
+<TR><TH ALIGN="CENTER">Time</TH>
+</TR>
+</TABLE> </B></TH>
+<TH ALIGN="CENTER"><B><TABLE CELLPADDING=3>
+<TR><TH ALIGN="CENTER">Time</TH>
+</TR>
+<TR><TH ALIGN="CENTER">to</TH>
+</TR>
+<TR><TH ALIGN="CENTER">Growth</TH>
+</TR>
+</TABLE></B></TH>
+</TR>
+<TR><TD ALIGN="CENTER">1</TD>
+<TD ALIGN="CENTER">40</TD>
+<TD ALIGN="CENTER">120</TD>
+<TD ALIGN="CENTER">40</TD>
+</TR>
+<TR><TD ALIGN="CENTER">2</TD>
+<TD ALIGN="CENTER">40</TD>
+<TD ALIGN="CENTER">90</TD>
+<TD ALIGN="CENTER">60</TD>
+</TR>
+<TR><TD ALIGN="CENTER">3</TD>
+<TD ALIGN="CENTER">35</TD>
+<TD ALIGN="CENTER">180</TD>
+<TD ALIGN="CENTER">20</TD>
+</TR>
+</TABLE>
+</DIV>
+<P>
+<DIV ALIGN="CENTER"></DIV>
+</DIV>
+<BR>
+<P>
+<DIV ALIGN="CENTER">
+</DIV>
+
+<P>
+
+<P>
+The following example is more refined in that it
+ takes advantage of the fact that the time to growth data consists
+ of integers only, so the experiment with the maximum growth can be
+ determined by LaTeX.
+
+<P>
+<A NAME="ex:tablabel"></A>
+<H2><A NAME="SECTION00084000000000000000">
+Example 13 (Labelling within <TT>&#92;CSVtotabular</TT>)</A>
+</H2>
+<PRE>
+\newcounter{maxgrowth}
+\newcounter{incT} % incubation temperature
+\newcounter{inct} % incubation time
+
+\begin{table}
+\caption{Time to Growth Experiments}
+\label{tab:exp}
+\vspace{10pt}
+\centering
+\CSVtotabular{data.csv}{cccc}{%
+ % Header row
+\bfseries Experiment &amp;
+\bfseries \begin{tabular}{c}Incubation\\Temperature\end{tabular} &amp;
+\bfseries \begin{tabular}{c}Incubation\\Time\end{tabular} &amp;
+\bfseries \begin{tabular}{c}Time\\to\\Growth\end{tabular}\\}{%
+ % Middle rows
+\label{exp:\insertbyname{Incubation Temperature}:\insertbyname{Incubation Time}}
+\thecsvrownumber &amp;
+\insertbyname{Incubation Temperature} &amp;
+\insertbyname{Incubation Time} &amp;
+\insertbyname{Time to Growth}%
+\ifthenelse{\value{maxgrowth}&lt;\insertbyname{Time to Growth}}{%
+\setcounter{maxgrowth}{\insertbyname{Time to Growth}}%
+\setcounter{incT}{\insertbyname{Incubation Temperature}}%
+\setcounter{inct}{\insertbyname{Incubation Time}}}{}%
+\\}{%
+ % Last row
+\label{exp:\insertbyname{Incubation Temperature}:\insertbyname{Incubation Time}}
+\thecsvrownumber &amp;
+\insertbyname{Incubation Temperature} &amp;
+\insertbyname{Incubation Time} &amp;
+\insertbyname{Time to Growth}%
+\ifthenelse{\value{maxgrowth}&lt;\insertbyname{Time to Growth}}{%
+\setcounter{maxgrowth}{\insertbyname{Time to Growth}}%
+\setcounter{incT}{\insertbyname{Incubation Temperature}}%
+\setcounter{inct}{\insertbyname{Incubation Time}}}{}%
+}
+\par
+\end{table}
+
+As can be seen from Table~\ref{tab:exp},
+Experiment~\ref{exp:\theincT:\theinct}
+had the maximum time to growth, with
+incubation time \theinct,
+incubation temperature \theincT\ and
+time to growth, \themaxgrowth.
+</PRE>
+
+<P>
+<DIV ALIGN="CENTER">
+</DIV>
+
+<P>
+
+<P>
+
+<H1><A NAME="SECTION00090000000000000000">
+Saving Entries</A>
+</H1>
+ Entries can be saved using the command:
+<BR>
+<BR>
+
+ <TT>&#92;csvSaveEntry</TT>[<I>counter</I>]{<I>identifier</I>}[<I>empty text</I>]
+<BR>
+<BR>
+where <I>counter</I> is a LaTeX counter, by default
+<TT>csvrownumber</TT>,
+ and <I>identifier</I> is the header entry. The entry
+ can then be used with the command:
+<BR>
+<BR>
+ <TT>&#92;csvGetEntry</TT>{<I>counter</I>}{<I>identifier</I>}
+<BR>
+<BR>
+The final optional argument <I>empty text</I> to
+<TT>&#92;csvSaveEntry</TT> is the text to use if the entry is blank.
+For example, <code>\csvSaveEntry{Time}[MISSING DATA]</code> will
+print MISSING DATA if the Time field is blank.
+
+<P>
+The following example illustrates the use of these commands.
+
+<P>
+<A NAME="ex:index"></A>
+<H2><A NAME="SECTION00091000000000000000">
+Example 14 (Saving Entries)</A>
+</H2>
+ This example illustrates how you can use one CSV
+ file to access data in other CSV files.
+ This example has several CSV files:
+<BR>
+<BR>
+File <TT>index.csv</TT>:
+<PRE>
+File,Temperature,NaCl,pH
+exp25a.csv,25,4.7,0.5
+exp25b.csv,25,4.8,1.5
+exp30a.csv,30,5.12,4.5
+</PRE>
+ File <TT>exp25a.csv</TT>:
+<PRE>
+Time,Logcount
+0,3.75
+23,3.9
+45,4.0
+</PRE>
+ File <TT>exp25b.csv</TT>:
+<PRE>
+Time,Logcount
+0,3.6
+60,3.8
+120,4.0
+</PRE>
+ File <TT>exp30a.csv</TT>:
+<PRE>
+Time,Logcount
+0,3.73
+23,3.67
+60,4.9
+</PRE>
+
+<P>
+It is not possible to nest <TT>&#92;CSVtotabular</TT>,
+<TT>&#92;CSVtolongtable</TT> and <TT>&#92;applyCSVfile</TT>,
+ so if you need to go through <TT>index.csv</TT> and use each file
+ named in there, you can first go through <TT>index.csv</TT>
+storing the information using <TT>&#92;csvSaveEntry</TT> as follows:
+<PRE>
+\newcounter{maxexperiments}
+\applyCSVfile{sample5.csv}{%
+\stepcounter{maxexperiments}
+\csvSaveEntry{File}
+\csvSaveEntry{Temperature}
+\csvSaveEntry{NaCl}
+\csvSaveEntry{pH}
+}
+</PRE>
+ The counter <TT>maxexperiments</TT> simply counts the number of
+ entries in <TT>index.csv</TT>.
+ The entries can now be used to generate a table for each
+ file listed in <TT>index.csv</TT> (the <TT>&#92;whiledo</TT> command
+is defined in the <TT>ifthen</TT> package):
+<PRE>
+\newcounter{experiment}
+\whiledo{\value{experiment}&lt;\value{maxexperiments}}{%
+\stepcounter{experiment}
+\begin{table}
+\caption{Temperature = \protect\csvGetEntry{experiment}{Temperature},
+NaCl = \protect\csvGetEntry{experiment}{NaCl},
+pH = \protect\csvGetEntry{experiment}{pH}}
+\vspace{10pt}
+\centering
+\CSVtotabular{\csvGetEntry{experiment}{File}}{ll}{%
+Time &amp; Log Count\\}{%
+\insertTime &amp; \insertLogcount\\}{%
+\insertTime &amp; \insertLogcount}
+
+\end{table}
+}
+</PRE>
+ Note that <TT>&#92;csvGetEntry</TT> needs to be <TT>&#92;protect</TT>ed
+within the <TT>&#92;caption</TT> command.
+
+<P>
+This example can be modified if, say, you only want the
+ tables where the temperature is 25:
+<PRE>
+\setcounter{experiment}{0}
+\whiledo{\value{experiment}&lt;\value{maxexperiments}}{%
+\stepcounter{experiment}
+\ifthenelse{\equal{\csvGetEntry{experiment}{Temperature}}{25}}{%
+\begin{table}
+\caption{Temperature = \protect\csvGetEntry{experiment}{Temperature},
+NaCl = \protect\csvGetEntry{experiment}{NaCl},
+pH = \protect\csvGetEntry{experiment}{pH}}
+\vspace{10pt}
+\centering
+\CSVtotabular{\csvGetEntry{experiment}{File}}{ll}{%
+Time &amp; Log Count\\}{%
+\insertTime &amp; \insertLogcount\\}{%
+\insertTime &amp; \insertLogcount}\par
+\end{table}}{}
+}
+</PRE>
+
+<P>
+<DIV ALIGN="CENTER">
+</DIV>
+
+<P>
+
+<P>
+
+<H1><A NAME="SECTION000100000000000000000">
+Pie Charts (csvpie.sty)</A>
+</H1>
+
+<P>
+If you want to create a pie chart from data stored in a CSV file,
+you can use the <TT>csvpie</TT> package, distributed with the
+<TT>csvtools</TT> package. A basic pie chart can be created
+using the command:
+<BR>
+<BR>
+<TT>&#92;csvpiechart</TT>[<I>options</I>]{<I>variable</I>}{<I>filename</I>}
+<BR>
+<BR>
+where <I>filename</I> is the name of the CSV file containing the
+data, and <I>variable</I> is the command indicating the entry that
+contains the value for the given segment.
+The starred version of <TT>&#92;csvpiechart</TT> should be used if
+the CSV file has no header row.
+
+<P>
+The pie charts have ``inner'' labels on the segment, and
+``outer'' labels outside the chart. The labels are given by the
+commands <TT>&#92;csvpieinnerlabel</TT>
+and <TT>&#92;csvpieouterlabel</TT>.
+The default definitions are:
+<PRE>
+\newcommand{\csvpieouterlabel}{\field{1}}
+\newcommand{\csvpieinnerlabel}{\field{2}\%}
+</PRE>
+This assumes that the second column contains the data, and the
+first column contains a description, but can be redefined
+as necessary.
+
+<P>
+The pie chart display can be modified using the optional
+argument to <TT>&#92;csvpiechart</TT>.
+This argument should be a <I>key</I>=<I>value</I> list.
+The available keys are as follows:
+<DL>
+<DT><STRONG>start</STRONG></DT>
+<DD>This should be an integer specifying the starting angle
+of the first segment. This is 0 by default.
+
+<P>
+</DD>
+<DT><STRONG>total</STRONG></DT>
+<DD>This should be an integer specifying the sum of all
+the segment values. This is 100 by default.
+
+<P>
+</DD>
+<DT><STRONG>radius</STRONG></DT>
+<DD>This should be a length specifying the radius of the
+pie chart. (Default: 2cm)
+
+<P>
+</DD>
+<DT><STRONG>inner</STRONG></DT>
+<DD>This should be a fraction specifying the relative distance
+along the radius to start the inner label. (Default: 0.25)
+
+<P>
+</DD>
+<DT><STRONG>outer</STRONG></DT>
+<DD>This should be a fraction specifying the relative distance
+along the radius to start the outer label. (Default: 1.25)
+
+<P>
+</DD>
+<DT><STRONG>cutaway</STRONG></DT>
+<DD>This should be a comma-separated list of numbers
+corresponding to the segments that should be cut away from the
+rest of the pie chart. Since the value may contain commas, the value
+should always be enclosed in braces. Ranges may also be used.
+If a range is used, all the segments in the given range are
+kept together, so, for example, <code>cutaway={1,2}</code> will separate
+the first two segments from the pie chart, and the two segments
+will also be separated from each other, whereas <code>cutaway={1-2}</code>
+will separate the first two segments from the pie chart, but will
+keep the two segments together.
+
+<P>
+</DD>
+<DT><STRONG>offset</STRONG></DT>
+<DD>This should be a fraction specifying the
+relative distance along the radius to shift the cut away
+segments. (Default: 0.1)
+
+<P>
+</DD>
+<DT><STRONG>firstrow</STRONG></DT>
+<DD>This should be the number of the first row
+containing the actual data. This is equivalent to the optional
+argument of <TT>&#92;applyCSVfile</TT> or <TT>&#92;applyCSVfile*</TT>.
+</DD>
+</DL>
+
+<P>
+Note that T<SMALL>E</SMALL>X performs integer arithmetic. Although the CSV
+file may contain decimal numbers, rounding will occur when
+constructing the pie charts.
+
+<P>
+The colours for the pie chart segments can be set using the
+command:
+<BR>
+<BR><TT>&#92;csvpiesegmentcol</TT>{<I>n</I>}{<I>colour</I>}
+<BR>
+<BR>
+where <I>n</I> is the segment number, and <I>colour</I> is a
+defined colour name. For example, if you want the first segment
+in the pie chart to be yellow, do:
+<PRE>
+\csvpiesegmentcol{1}{yellow}
+</PRE>
+There are 8 predefined segment colours, if your pie chart has
+more than 8 segments, you will need to specify the remainder.
+
+<P>
+You can obtain the colour name for a given segment
+using:
+<BR>
+<BR><TT>&#92;csvpiesegcolname</TT>{<I>n</I>}
+<BR>
+<BR>
+where <I>n</I> is the segment number. The <TT>&#92;csvpiechart</TT>
+command uses <TT>&#92;applyCSVfile</TT>, so the <TT>csvrownumber</TT>
+counter can be used. This means that you can change the text
+colour of the outer label to match the segment. For example:
+<PRE>
+\renewcommand{\csvpieouterlabel}{%
+\color{\csvpiesegcolname{\value{csvrownumber}}}\field{2}}
+</PRE>
+Note that <TT>&#92;value</TT> must be used since <I>n</I> has to be
+a number.
+
+<P>
+If you want grey pie charts, either use the <TT>monochrome</TT>
+package option:
+<PRE>
+\usepackage[monochrome]{csvpie}
+</PRE>
+or use the command <TT>&#92;colorpiechartfalse</TT> prior to using <TT>&#92;csvpiechart</TT>.
+To switch back to colour pie charts, use
+<TT>&#92;colorpiecharttrue</TT>.
+
+<P>
+<A NAME="ex:piechart"></A>
+<H2><A NAME="SECTION000101000000000000000">
+Example 15 (A Pie Chart)</A>
+</H2>
+Given a CSV file
+(called <TT>fruit.csv</TT>) containing:
+<PRE>
+Name,Value
+Apples,20
+Pears,15
+"lemons,limes",30.5
+Peaches,24.5
+Cherries,10
+</PRE>
+Then the value for each segment is given by the second column, so
+<I>variable</I> should be <code>\field{2}</code> or <code>\insertValue</code>.
+The following code creates a figure containing two
+pie charts from the above data (for an image, see the
+PDF version of the manual, <TT><A NAME="tex2html15"
+ HREF="csvtools.pdf">csvtools.pdf</A></TT>):
+<PRE>
+ % Change the way the labels are displayed
+\renewcommand{\csvpieinnerlabel}{\sffamily\insertValue\%}
+\renewcommand{\csvpieoutlabel}{%
+\color{\csvpiesegcolname{\value{csvrownumber}}}\sffamily\insertName}
+
+\begin{figure}
+\begin{center}
+\begin{tabular}{cc}
+\csvpiechart[start=45,cutaway={1,2}]{\insertValue}{fruit.csv} &amp;
+\csvpiechart[start=45,cutaway={1-2}]{\insertValue}{fruit.csv} \\
+(a) &amp; (b)
+\end{tabular}
+\end{center}
+\caption{Pie Chart Example (a) cutaway=\{1,2\} (b) cutaway=\{1-2\}}
+\end{figure}
+</PRE>
+The inner and outer labels have been
+redefined to use a sans-serif font, and the outer label is in
+the same colour as its corresponding segment.
+Both pie charts have a starting angle of 45 degrees, and they
+have the first two segments cutaway, but in (a)
+the first two segments are separated from each other, whereas in
+(b), the first two segments are joined, although separated
+from the rest of the pie chart.
+
+<P>
+If the CSV file has no header row, the starred version should be
+used, e.g.:
+<PRE>
+\csvpiechart*[cutaway={1-2}]{\field{2}}{fruit.csv}
+</PRE>
+
+<P>
+
+<P>
+<DIV ALIGN="CENTER">
+</DIV>
+
+<P>
+
+<P>
+
+<H1><A NAME="SECTION000110000000000000000">
+Sorting Data (csvsort.sty)</A>
+</H1>
+
+<P>
+The <TT>csvsort</TT> package (which forms part of the
+<TT>csvtools</TT> bundle) provides analogous commands to
+those provided by <TT>csvtools</TT>, but the data is first
+sorted. The <TT>csvsort</TT> package needs to be loaded
+separately in order to access the necessary commands. The package
+options should be a list of key=value pairs, where the available
+keys are:
+<DL>
+<DT><STRONG>verbose</STRONG></DT>
+<DD>Verbose mode. This is a boolean key. If set, the
+comparisons performed by the insertion sort code are printed to
+the screen. (Default: <TT>verbose=true</TT>.)
+
+<P>
+</DD>
+<DT><STRONG>sort</STRONG></DT>
+<DD>This key specifies how to sort the data. It may take
+one of the following values:
+
+<UL>
+<LI><TT>alphabetical ascending</TT> (or just <TT>alphabetical</TT>)
+</LI>
+<LI><TT>alphabetical descending</TT>
+</LI>
+<LI><TT>numerical ascending</TT> (or just <TT>numerical</TT>)
+</LI>
+<LI><TT>numerical descending</TT>
+</LI>
+</UL>
+(Default: <TT>sort=alphabetical ascending</TT>)
+
+<P>
+</DD>
+<DT><STRONG>variable</STRONG></DT>
+<DD>The sort variable. (Default: <code>sort=\field{1}</code>)
+
+<P>
+</DD>
+<DT><STRONG>sfirstdataline</STRONG></DT>
+<DD>The line on which the data starts in a data
+file without a header row. (Default: <TT>sfirstdataline=1</TT>.)
+
+<P>
+</DD>
+<DT><STRONG>firstdataline</STRONG></DT>
+<DD>The line on which the data starts in a data
+file with a header row. (Default: <TT>firstdataline=2</TT>.)
+</DD>
+</DL>
+
+<P>
+Note that the <TT>csvsort</TT> package requires &#201;amonn McManus'
+<TT>compare.tex</TT> file. The <TT>csvsort</TT> package uses
+an insertion sort method to sort the data, so large amounts of data
+may slow processing time. The following commands are provided
+by <TT>csvsort</TT>:
+
+<P>
+
+ <TT>&#92;sortapplyCSVfile</TT>optionsfilenametext
+<P>
+<TT>&#92;sortapplyCSVfile*</TT>optionsfilenametext
+<BR>
+<BR>
+These commands are analogous to <TT>&#92;applyCSVfile</TT> and
+<TT>&#92;applyCSVfile*</TT>, except that the data is first sorted.
+The optional argument is a key=value list. The keys are the same
+as those used in the package options, described above. These options
+only apply to the given instance of the command, whereas the
+package options apply to all <TT>csvsort</TT> commands, unless
+overridden in <I>options</I>. Example, suppose you have a file
+called <TT>unsorted.csv</TT> which looks like:
+<PRE>
+First Name,Surname,Age
+Zephram,Lang,60
+Fred,Lang,10
+Barney,Langley,25
+Jane,Brown,5
+Adam,Smith,24
+Bert,Jones,18
+</PRE>
+Then
+<PRE>
+\sortapplyCSVfile[sort=alphabetical,variable=\insertSurname]{unsorted.csv}{%
+\insertSurname, \insertbyname{First Name}. Age: \insertAge\par}
+</PRE>
+will produce the following output:
+<P>
+Brown, Jane. Age:5
+<P>
+Jones, Bart. Age:18
+<P>
+Lang, Zephram. Age:60
+<P>
+Lang, Fred. Age:10
+<P>
+Langley, Barney. Age:25
+<P>
+Smith, Adam. Age: 24
+<P>
+Note that the data has only been sorted according to the surname.
+To sort first by surname, then by first name, you can
+do something like:
+<PRE>
+\sortapplyCSVfile[sort=alphabetical,
+variable={\insertSurname,\insertbyname{First Name}}]{unsorted.csv}{%
+\insertSurname, \insertbyname{First Name}. Age: \insertAge\par}
+</PRE>
+As with <TT>&#92;applyCSVfile</TT>, you must use <TT>&#92;field</TT> if
+you use the starred version:
+<PRE>
+\sortapplyCSVfile*[sort=alphabetical,
+variable={\field{2},\field{1}}]{unsorted.csv}{%
+\field{2}, \field{1}. Age: \field{3}\par}
+</PRE>
+
+<P>
+The commands:
+<BR>
+<BR>
+<TT>&#92;sortCSVtotabular</TT>optionsfilenamecol-specfirst rowall but last rowlast row
+<BR>
+<TT>&#92;sortCSVtolongtable</TT>optionsfilenamecol-specfirst rowall but last rowlast row
+<BR>
+Are analogous to <TT>&#92;CSVtotabular</TT> and <TT>&#92;CSVtolongtable</TT>,
+where, again, <I>options</I> is a list of key=value pairs, the same
+as <TT>&#92;sortapplyCSVfile</TT>. Using the same example data as above,
+the following command will sort the data according to age (in
+numerical order) and place in a tabular environment:
+<PRE>
+\sortCSVtotabular[sort=numerical,variable=\insertAge]{unsorted.csv}{llr}{%
+\bfseries Surname &amp; \bfseries First Name &amp; \bfseries Age\\}{%
+\insertSurname &amp; \insertbyname{First Name} &amp; \insertAge\\}{%
+\insertSurname &amp; \insertbyname{First Name} &amp; \insertAge}
+</PRE>
+
+<P>
+Note that the counter <TT>csvlinenum</TT> has no meaning in the
+commands provided by the <TT>csvsort</TT> package. The
+<TT>csvrownumber</TT> counter corresponds to the sorted data row.
+
+<P>
+
+<H1><A NAME="SECTION000120000000000000000">
+The csvtools.pl Perl Script</A>
+</H1>
+
+<P>
+Suppose you have several large CSV files, and you have included
+the information into your document using <TT>&#92;applyCSVfile</TT>,
+<TT>&#92;CSVtolongtable</TT>, <TT>&#92;CSVtotabular</TT> or
+<TT>&#92;csvpiechart</TT>, which has
+made life so much easier for you, but you are now required by a
+journal to submit your source code in a single <TT>.tex</TT> file.
+ They don't want all your CSV files, so what do you do? If you
+have Perl installed on your system you can use the
+<TT>csvtools.pl</TT> Perl script. This has the following syntax:
+<BR>
+<BR> <TT>csvtools.pl</TT> <I>in-file</I> <I>out-file</I>
+<BR>
+<BR>
+where <I>in-file</I> is the name of your file that contains the
+<TT>&#92;applyCSVfile</TT>, <TT>&#92;CSVtotabular</TT> etc
+ commands, and <I>out-file</I> is a new file which will be created by <TT>csvtools.pl</TT>. This new
+ file will be the same as <I>in-file</I> except that all
+occurances of <TT>&#92;applyCSVfile</TT>, <TT>&#92;CSVtolongtable</TT>,
+<TT>&#92;CSVtotabular</TT> and <TT>&#92;csvpiechart</TT> will be replaced
+by the relevant data extracted from the named CSV files.
+
+<P>
+<A NAME="ex:perl"></A>
+<H2><A NAME="SECTION000121000000000000000">
+Example 16 (csvtools.pl -- Aligning Data)</A>
+</H2>
+ Suppose the file <TT>mydoc.tex</TT> contains the code given in
+Example&nbsp;<A HREF="manual.html#ex:tab1">4</A>, with the associated CSV file
+<TT>sample.csv</TT> also given in that example. Then if you do:
+<PRE>
+csvtools.pl mydoc.tex mydocnew.tex
+</PRE>
+the file <TT>mydocnew.tex</TT> will be created which will be
+identical to <TT>mydoc.tex</TT> except the lines
+ containing the code <code>\CSVtotabular{sample.csv}{lccc}{</code>...<code>}{</code>...<code>}{</code>...<code>}</code> will be replaced
+with the lines:
+<PRE>
+ % \CSVtotabular{sample.csv}... converted using csvtools.pl
+ %&gt;&gt; START INSERT
+ \begin{tabular}{lccc}
+ \bfseries Name &amp;
+ \bfseries Assignment 1 &amp;
+ \bfseries Assignment 2 &amp;
+ \bfseries Total\\
+ A. Smith&amp;80&amp;70&amp;150\\
+ B. Jones&amp;60&amp;80&amp;140\\
+ J. Doe&amp;85&amp;75&amp;160\\
+ &amp;75&amp;75&amp;150
+ \end{tabular}%&lt;&lt; END INSERT
+</PRE>
+<P>
+<DIV ALIGN="CENTER">
+</DIV>
+
+<P>
+
+<P>
+Similarly, <TT>csvtools.pl</TT> will substitute all occurrances
+of <TT>&#92;CSVtolongtable</TT>, <TT>&#92;applyCSVfile</TT>
+and <TT>&#92;csvpiechart</TT>.
+
+<P>
+
+<H2><A NAME="SECTION000122000000000000000">
+Notes</A>
+</H2>
+
+<OL>
+<LI>If perl is located in a directory other than <TT>/usr/bin/</TT>
+you will need to edit the first line of <TT>csvtools.pl</TT> as
+appropriate. You can find the location using the command:
+<PRE>
+which perl
+</PRE>
+
+<P>
+</LI>
+<LI>If you can't directly execute a Perl script,
+ you can do:
+<BR>
+<BR> <TT>perl csvtools.pl</TT> <I>in-file</I> <I>out-file</I>
+
+<P>
+</LI>
+<LI>You must first LaTeX your document before using
+<TT>csvtools.pl</TT> as it checks the log file for any counters
+that have been defined.
+
+<P>
+</LI>
+<LI><TT>csvtools.pl</TT> only knows about a very limited set
+of LaTeX commands. It should be able to understand:
+<PRE>
+\CSVtotabular{\csvGetEntry{experiment}{File}}{ll}{...
+</PRE>
+(see Example&nbsp;<A HREF="manual.html#ex:index">14</A>), but it won't be able to understand,
+say,
+<PRE>
+\newcommand{\filename}{\csvGetEntry{experiment}{File}}
+\CSVtotabular{\filename}{ll}{...
+</PRE>
+It can pick up on <TT>&#92;addtocounter</TT>, <TT>&#92;stepcounter</TT>,
+<TT>&#92;refstepcounter</TT> and <TT>&#92;setcounter</TT> but only if
+they are used explicitly in the named <TT>.tex</TT> file. (It
+ignores any files that have been included using
+<TT>&#92;input</TT>, <TT>&#92;include</TT> etc.)
+
+<P>
+</LI>
+<LI>This Perl script has only been tested under Linux, but it
+ought to work under other systems.
+</LI>
+</OL>
+
+<P>
+
+<H1><A NAME="SECTION000130000000000000000"></A><A NAME="sec:drawbacks"></A>
+<BR>
+Bugs/Drawbacks/``Features''
+</H1>
+
+<OL>
+<LI><A NAME="itm:insert"></A> The package doesn't check to see whether
+<TT>&#92;insert</TT><I>identifier</I> exists, otherwise you would not
+be able to use multiple CSV files with the same headers, as in
+Example&nbsp;<A HREF="manual.html#ex:index">14</A>. Therefore it is recommended that
+ you check to make sure that the command does not already exist.
+ For example, the T<SMALL>E</SMALL>X commands <TT>&#92;insert</TT> and
+<TT>&#92;insertpenalties</TT> already exist, so a blank header or a
+header named <TT>penalties</TT> would cause problems. (These two
+will now cause an error as from version 1.1, but it's something
+bear in mind.)
+
+<P>
+</LI>
+<LI>Note also that <TT>&#92;insertbyname</TT> doesn't check
+ if you've given a valid label, so if no text appears,
+ check you've spelt it correctly, checking punctuation, spaces and case.
+
+<P>
+</LI>
+<LI><A NAME="itm:psbyname"></A> Note that in Example&nbsp;<A HREF="manual.html#ex:ps">2</A>, replacing line&nbsp;3 with:
+<PRE>
+\centerline{\includegraphics{\insertbyname{File}}}
+</PRE>
+ will cause an error, as <code>\insertbyname{File}</code> doesn't get
+ fully expanded by the time it gets passed to
+ <TT>&#92;includegraphics</TT>, and will prevent
+<TT>&#92;includegraphics</TT> from
+ finding the file. It is possible to get around this using
+ T<SMALL>E</SMALL>X's <TT>&#92;edef</TT> command:
+<PRE>
+\edef\psfilename{\insertbyname{File}}
+\centerline{\includegraphics{\psfilename}}
+</PRE>
+
+<P>
+</LI>
+<LI><A NAME="itm:noalign"></A> You can't have commands like
+<TT>&#92;hline</TT>, <TT>&#92;cline</TT> and <TT>&#92;multicolumn</TT> in the
+first column of the <I>middle</I> or <I>last</I> code of
+<TT>&#92;CSVtotabular</TT> or <TT>&#92;CSVtolongtable</TT>. If you do,
+it will generate a <code>misplaced \noalign</code> error, instead you
+need to put it at the end of the <I>first</I> or <I>middle</I>
+code. (See Example&nbsp;<A HREF="manual.html#ex:tab3">6</A>.)
+
+<P>
+</LI>
+<LI>You can't have nested <TT>&#92;applyCSVfile</TT>,
+<TT>&#92;CSVtolongtable</TT> and <TT>&#92;CSVtotabular</TT>
+ commands. Nor can you have <TT>&#92;csvpiechart</TT> within
+one of these commands (See Example&nbsp;<A HREF="manual.html#ex:index">14</A>)
+
+<P>
+</LI>
+<LI>If the CSV file has a header row, it must be on the first
+line.
+
+<P>
+</LI>
+<LI>It is possible for T<SMALL>E</SMALL>X to run out of memory if you use
+ <TT>&#92;csvSaveEntry</TT> on a large file.
+
+<P>
+</LI>
+<LI><A NAME="itm:csvrownumber"></A> In version 1.0, there was an
+inconsistency with <TT>csvrownumber</TT> within
+<TT>&#92;applyCSVfile</TT> and <TT>&#92;CSVtotabular</TT>. In the
+former it excluded the header row, whereas the latter
+included it. This has been changed in version 1.1 so that within
+<TT>&#92;applyCSVfile</TT>, <TT>&#92;CSVtotabular</TT> and
+<TT>&#92;CSVtolongtable</TT>, <TT>csvrownumber</TT> refers to the
+data row (excluding header row.) I hope this doesn't cause
+problems, but it makes more sense that they should be
+consistent. So if you have no blank lines in your CSV file,
+<TT>csvrownumber</TT> should always be 1 more than
+<TT>csvlinenumber</TT>.
+
+<P>
+</LI>
+</OL>
+
+<P>
+
+<H1><A NAME="SECTION000140000000000000000">
+Contact Details</A>
+</H1>
+
+<P>
+Dr Nicola Talbot
+<BR>
+School of Computing Sciences
+<BR>
+University of East Anglia
+<BR>
+Norwich. NR4 7TJ. England.
+ <BR>
+<BR> <TT><A NAME="tex2html17"
+ HREF="http://theoval.cmp.uea.ac.uk/~nlct/">http://theoval.cmp.uea.ac.uk/~nlct/</A></TT>
+<P>
+
+<P>
+
+<BR><HR><H4>Footnotes</H4>
+<DL>
+<DT><A NAME="foot869">...identifier</A><A
+ HREF="manual.html#tex2html1"><SUP>1</SUP></A></DT>
+<DD>See Note&nbsp;<A HREF="manual.html#itm:insert">1</A> in Section&nbsp;<A HREF="manual.html#sec:drawbacks">11</A>
+
+</DD>
+<DT><A NAME="foot150">... file</A><A
+ HREF="manual.html#tex2html2"><SUP>2</SUP></A></DT>
+<DD>Remeber to use a letter type of
+class file
+
+</DD>
+<DT><A NAME="foot870">... file</A><A
+ HREF="manual.html#tex2html3"><SUP>3</SUP></A></DT>
+<DD>The
+ <TT>graphics</TT> or <TT>graphicx</TT> package will be
+needed.
+
+</DD>
+<DT><A NAME="foot872">...tab:ex1</A><A
+ HREF="manual.html#tex2html4"><SUP>4</SUP></A></DT>
+<DD>Note that <TT>&#92;CSVtotabular</TT> only
+ puts the data in a <TT>tabular</TT> environment not in a table
+
+</DD>
+<DT><A NAME="foot877">...&#92;ifnextrowlast</A><A
+ HREF="manual.html#tex2html8"><SUP>5</SUP></A></DT>
+<DD>See
+ Note&nbsp;<A HREF="manual.html#itm:noalign">4</A> in Section&nbsp;<A HREF="manual.html#sec:drawbacks">11</A>
+
+</DD>
+<DT><A NAME="foot297">... table</A><A
+ HREF="manual.html#tex2html11"><SUP>6</SUP></A></DT>
+<DD>This is designed as an
+example of how to use the package, not incouragement to produce
+garish tables!
+
+</DD>
+</DL>
+<BR><HR>
+<ADDRESS>
+<A href=http://theoval.cmp.uea.ac.uk/~nlct/>Nicola L. C. Talbot</A>.
+<A HREF=http://www.cmp.uea.ac.uk/>School of Computing Sciences</A>.
+<A HREF=http://www.uea.ac.uk/>University of East Anglia.</A>
+Last Modified: 2007-06-26
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/obsolete/macros/latex/contrib/csvtools/script/csvtools.pl b/obsolete/macros/latex/contrib/csvtools/script/csvtools.pl
new file mode 100644
index 0000000000..131134124e
--- /dev/null
+++ b/obsolete/macros/latex/contrib/csvtools/script/csvtools.pl
@@ -0,0 +1,1995 @@
+#!/usr/bin/perl -w
+
+# File : csvtools.pl
+# Author : Dr Nicola Talbot
+# Date : 26 June 2007
+# Description : Perl script to accompany csvtools.sty
+# : Allows you to substitute \CSVtotabular, \CSVtolongtable and \applyCSVfile commands with the appropriate LaTeX code
+# Version : 0.6b (1 September 2006).
+
+# usage : csvtools <in-file> <out-file>
+
+if ($#ARGV != 1)
+{
+ die "Syntax : $0 <in-file> <out-file>\n";
+}
+
+($FILENAME,$OUTPUT) = @ARGV;
+
+open FILENAME or die "Can't open '$FILENAME'\n";
+
+$ext = substr($FILENAME, -4);
+
+if (($ext eq ".tex") or ($ext eq ".dtx") or ($ext eq ".ltx"))
+{
+ $LOGFILE = substr($FILENAME,0,length($FILENAME)-4) . ".log";
+}
+else
+{
+ $LOGFILE = $FILENAME . ".log";
+}
+
+open LOGFILE or die "Can't open log file '$LOGFILE'. Make sure you run LaTeX before using $0\n";
+
+while (<LOGFILE>)
+{
+ if (/\\c@([a-zA-Z]+)=\\count/)
+ {
+ $counter{$1} = 0;
+ }
+}
+
+$counter{'csvrownumber'} = 0;
+
+close LOGFILE;
+
+open OUTPUT, ">$OUTPUT" or die;
+
+# global csvsort options
+
+$globalsort{'verbose'}=1;
+$globalsort{'sort'}='alphabetical ascending';
+$globalsort{'variable'}='\field{1}';
+$globalsort{'sfirstdataline'}=1;
+$globalsort{'firstdataline'}=2;
+
+$keyvaldefaults{'verbose'}='true';
+
+$csvpieouterlabel="\\field{1}";
+$csvpieinnerlabel="\\field{2}\\%";
+$separator=",";
+
+while (<FILENAME>)
+{
+ $restofline = $_;
+ local($comment) = "";
+
+ if ($restofline=~m/(\\*)%/)
+ {
+ $n = length($1);
+
+ if ($n%2 == 0)
+ {
+ $restofline = "$`$1";
+ $comment = "%$'";
+ $_ = $restofline;
+ }
+ }
+
+ if ($restofline=~/\\setcsvseparator\s*{([^}]*)}/)
+ {
+ $separator=$1 if defined($1);
+ }
+
+ if ($restofline=~/\\renewcommand\*?\s*{?\\csvpieinnerlabel}?/)
+ {
+ print OUTPUT $`;
+
+ $restofline=$';
+ $lineno=$.;
+
+ ($csvpieinnerlabel,$restofline,$done)=&getnextgroup($restofline);
+
+ while (!$done)
+ {
+ if ($nextline = <FILENAME>)
+ {
+ $restofline .= $nextline;
+ ($csvpieinnerlabel,$restofline,$done)=&getnextgroup($restofline);
+ }
+ else
+ {
+ die "Unexpected EOF while parsing \\renewcommand on line $lineno\n";
+ }
+ }
+
+ $_ = $restofline;
+ }
+
+ if ($restofline=~/\\renewcommand\*?\s*{?\\csvpieouterlabel}?/)
+ {
+ print OUTPUT $`;
+
+ $restofline=$';
+ $lineno=$.;
+
+ ($csvpieouterlabel,$restofline,$done)=&getnextgroup($restofline);
+
+ while (!$done)
+ {
+ if ($nextline = <FILENAME>)
+ {
+ $restofline .= $nextline;
+ ($csvpieouterlabel,$restofline,$done)=&getnextgroup($restofline);
+ }
+ else
+ {
+ die "Unexpected EOF while parsing \\renewcommand on line $lineno\n";
+ }
+ }
+
+ $_ = $restofline;
+ }
+
+ while ($restofline=~/\\stepcounter(.*)/)
+ {
+ $line = $_;
+
+ ($ctr,$restofline,$done) = &getnextgroup($1);
+
+ $startline=$.;
+
+ while (!$done)
+ {
+ if ($nextline = <FILENAME>)
+ {
+ $line = $line . $nextline;
+
+ $restofline = $restofline . $nextline;
+
+ ($ctr,$restofline,$done) = &getnextgroup($restofline);
+ }
+ else
+ {
+ die "EOF found whilst scanning first argument to \\stepcounter on line $startline\n";
+ }
+ }
+
+ $counter{$ctr}++;
+
+ $_ = $line;
+ }
+
+ $restofline = $_;
+
+ while ($restofline=~/\\refstepcounter(.*)/)
+ {
+ $line = $_;
+
+ ($ctr,$restofline,$done) = &getnextgroup($1);
+
+ $startline=$.;
+
+ while (!$done)
+ {
+ if ($nextline = <FILENAME>)
+ {
+ $line = $line . $nextline;
+
+ $restofline = $restofline . $nextline;
+
+ ($ctr,$restofline,$done) = &getnextgroup($restofline);
+ }
+ else
+ {
+ die "EOF found whilst scanning first argument to \\stepcounter on line $startline\n";
+ }
+ }
+
+ $counter{$ctr}++;
+
+ $_ = $line;
+ }
+
+ $restofline = $_;
+
+ while ($restofline=~/\\setcounter(.*)/)
+ {
+ $line = $_;
+
+ ($ctr,$restofline,$done) = &getnextgroup($1);
+
+ $startline=$.;
+
+ while (!$done)
+ {
+ if ($nextline = <FILENAME>)
+ {
+ $line = $line . $nextline;
+
+ $restofline = $restofline . $nextline;
+
+ ($ctr,$restofline,$done) = &getnextgroup($restofline);
+ }
+ else
+ {
+ die "EOF found whilst scanning first argument to \\stepcounter on line $startline\n";
+ }
+ }
+
+ ($num,$restofline,$done) = &getnextgroup($restofline);
+
+ while (!$done)
+ {
+ if ($nextline = <FILENAME>)
+ {
+ $line = $line . $nextline;
+
+ $restofline = $restofline . $nextline;
+
+ ($num,$restofline,$done) = &getnextgroup($restofline);
+ }
+ else
+ {
+ die "EOF found whilst scanning second argument to \\stepcounter on line $startline\n";
+ }
+ }
+
+ $num=~s/\\value{(.+)}/$counter{$1}/;
+
+ $counter{$ctr} = $num;
+
+ $_ = $line;
+ }
+
+ $restofline = $_;
+
+ while ($restofline=~/\\addtocounter(.*)/)
+ {
+ $line = $_;
+
+ ($ctr,$restofline,$done) = &getnextgroup($1);
+
+ $startline=$.;
+
+ while (!$done)
+ {
+ if ($nextline = <FILENAME>)
+ {
+ $line = $line . $nextline;
+
+ $restofline = $restofline . $nextline;
+
+ ($ctr,$restofline,$done) = &getnextgroup($restofline);
+ }
+ else
+ {
+ die "EOF found whilst scanning first argument to \\stepcounter on line $startline\n";
+ }
+ }
+
+ ($num,$restofline,$done) = &getnextgroup($restofline);
+
+ while (!$done)
+ {
+ if ($nextline = <FILENAME>)
+ {
+ $line = $line . $nextline;
+
+ $restofline = $restofline . $nextline;
+
+ ($num,$restofline,$done) = &getnextgroup($restofline);
+ }
+ else
+ {
+ die "EOF found whilst scanning second argument to \\stepcounter on line $startline\n";
+ }
+ }
+
+ $num=~s/\\value{(.+)}/$counter{$1}/;
+
+ $counter{$ctr} = $counter{$ctr} + $num;
+
+ $_ = $line;
+ }
+
+ $restofline = $_;
+
+ while ($restofline=~/^(.*)\\csvGetEntry(.*)$/)
+ {
+ $start = $1;
+ $restofline = $2;
+
+ ($ctr,$restofline,$done) = &getnextgroup($restofline);
+
+ $startline=$.;
+
+ while (!$done)
+ {
+ if ($nextline = <FILENAME>)
+ {
+ $restofline = $restofline . $nextline;
+
+ ($ctr,$restofline,$done) = &getnextgroup($restofline);
+ }
+ else
+ {
+ die "EOF found whilst scanning first argument to \\csvGetEntry on line $startline\n";
+ }
+ }
+
+ ($entry,$restofline,$done) = &getnextgroup($restofline);
+
+ while (!$done)
+ {
+ if ($nextline = <FILENAME>)
+ {
+ $restofline = $restofline . $nextline;
+
+ ($entry,$restofline,$done) = &getnextgroup($restofline);
+ }
+ else
+ {
+ die "EOF found whilst scanning first argument to \\csvGetEntry on line $startline\n";
+ }
+ }
+ $_ = $start . "\\csname $entry\\roman{$ctr}\\endcsname" . $restofline;
+ #$_ = $start. $data{$entry}[$counter{$ctr}] . $restofline;
+ }
+
+ $restofline = $_;
+
+ while ($restofline=~/\\usepackage(.*)/)
+ {
+ $line = $_;
+
+ $startline=$.;
+
+ $restofline = $1;
+
+ $options = '';
+
+ if ($restofline=~/^\s*\[/)
+ {
+ ($options,$restofline,$done) = &getnextoptionalgroup($restofline);
+
+ while (!$done)
+ {
+ if ($nextline = <FILENAME>)
+ {
+ $line = $line . $nextline;
+
+ $restofline = $restofline . $nextline;
+
+ ($options,$restofline,$done) = &getnextoptionalgroup($restofline);
+ }
+ else
+ {
+ die "EOF found whilst scanning optional argument to \\usepackage on line $startline\n";
+ }
+ }
+ }
+
+
+ ($package,$restofline,$done) = &getnextgroup($restofline);
+
+ while (!$done)
+ {
+ if ($nextline = <FILENAME>)
+ {
+ $line = $line . $nextline;
+
+ $restofline = $restofline . $nextline;
+
+ ($package,$restofline,$done) = &getnextgroup($restofline);
+ }
+ else
+ {
+ die "EOF found whilst scanning argument to \\usepackage on line $startline\n";
+ }
+ }
+
+ if ($package eq 'csvsort' and $options)
+ {
+ %hash = &getKeyValues($options,%keyvaldefaults);
+
+ foreach $key (keys(%hash))
+ {
+ $globalsort{$key}=$hash{$key};
+ }
+ }
+
+ $_ = $line;
+ }
+
+ $restofline = $_;
+
+ if (/^(.*)\\CSVtotabular(.*)$/)
+ {
+ print OUTPUT "$1$comment";
+ $comment="";
+
+ $line = $2;
+ $lineno = $.;
+
+ ($csvname,$restofline,$done) = &getnextgroup($line);
+
+ while (!$done)
+ {
+ if ($nextline = <FILENAME>)
+ {
+ $line = $line . $nextline;
+
+ ($csvname,$restofline,$done) = &getnextgroup($line);
+ }
+ else
+ {
+ die "EOF found whilst scanning for CVS filename on line $lineno\n";
+ }
+ }
+
+ $csvname=~s/\\csname (.*)\\roman{(.*)}\\endcsname/$data{$1}[$counter{$2}]/;
+
+ $line = $restofline;
+
+ ($alignment,$restofline,$done) = &getnextgroup($line);
+
+ while (!$done)
+ {
+ if ($nextline = <FILENAME>)
+ {
+ $line = $restofline . $nextline;
+
+ ($alignment,$restofline,$done) = &getnextgroup($line);
+ }
+ else
+ {
+ die "EOF found whilst scanning for CVS column alignment on line $lineno\n";
+ }
+ }
+
+ $line = $restofline;
+
+ ($FIRST,$restofline,$done) = &getnextgroup($line);
+
+ while (!$done)
+ {
+ if ($nextline = <FILENAME>)
+ {
+ $line = $restofline . $nextline;
+
+ ($FIRST,$restofline,$done) = &getnextgroup($line);
+ }
+ else
+ {
+ die "EOF found whilst scanning for \\CSVtotabular third argument on line $lineno\n";
+ }
+ }
+
+ $line = $restofline;
+
+ ($MIDDLE,$restofline,$done) = &getnextgroup($line);
+
+ while (!$done)
+ {
+ if ($nextline = <FILENAME>)
+ {
+ $line = $restofline . $nextline;
+
+ ($MIDDLE,$restofline,$done) = &getnextgroup($line);
+ }
+ else
+ {
+ die "EOF found whilst scanning for \\CSVtotabular fourth argument on line $lineno\n";
+ }
+ }
+
+ $line = $restofline;
+
+ ($LAST,$restofline,$done) = &getnextgroup($line);
+
+ while (!$done)
+ {
+ if ($nextline = <FILENAME>)
+ {
+ $line = $restofline . $nextline;
+
+ ($LAST,$restofline,$done) = &getnextgroup($line);
+ }
+ else
+ {
+ die "EOF found whilst scanning for \\CSVtotabular fifth argument on line $lineno\n";
+ }
+ }
+
+ &csvtotabular($csvname, $alignment, $FIRST, $MIDDLE, $LAST,
+ "tabular");
+
+ print OUTPUT "$restofline\n";
+ }
+ elsif (/^(.*)\\CSVtolongtable(.*)$/)
+ {
+ print OUTPUT "$1$comment";
+ $comment="";
+
+ $line = $2;
+ $lineno = $.;
+
+ ($csvname,$restofline,$done) = &getnextgroup($line);
+
+ while (!$done)
+ {
+ if ($nextline = <FILENAME>)
+ {
+ $line = $line . $nextline;
+
+ ($csvname,$restofline,$done) = &getnextgroup($line);
+ }
+ else
+ {
+ die "EOF found whilst scanning for CVS filename on line $lineno\n";
+ }
+ }
+
+ $csvname=~s/\\csname (.*)\\roman{(.*)}\\endcsname/$data{$1}[$counter{$2}]/;
+
+ $line = $restofline;
+
+ ($alignment,$restofline,$done) = &getnextgroup($line);
+
+ while (!$done)
+ {
+ if ($nextline = <FILENAME>)
+ {
+ $line = $restofline . $nextline;
+
+ ($alignment,$restofline,$done) = &getnextgroup($line);
+ }
+ else
+ {
+ die "EOF found whilst scanning for CVS column alignment on line $.\n";
+ }
+ }
+
+ $line = $restofline;
+
+ ($FIRST,$restofline,$done) = &getnextgroup($line);
+
+ while (!$done)
+ {
+ if ($nextline = <FILENAME>)
+ {
+ $line = $restofline . $nextline;
+
+ ($FIRST,$restofline,$done) = &getnextgroup($line);
+ }
+ else
+ {
+ die "EOF found whilst scanning for \\CSVtolongtable third argument on line $.\n";
+ }
+ }
+
+ $line = $restofline;
+
+ ($MIDDLE,$restofline,$done) = &getnextgroup($line);
+
+ while (!$done)
+ {
+ if ($nextline = <FILENAME>)
+ {
+ $line = $restofline . $nextline;
+
+ ($MIDDLE,$restofline,$done) = &getnextgroup($line);
+ }
+ else
+ {
+ die "EOF found whilst scanning for \\CSVtolongtable fourth argument on line $.\n";
+ }
+ }
+
+ $line = $restofline;
+
+ ($LAST,$restofline,$done) = &getnextgroup($line);
+
+ while (!$done)
+ {
+ if ($nextline = <FILENAME>)
+ {
+ $line = $restofline . $nextline;
+
+ ($LAST,$restofline,$done) = &getnextgroup($line);
+ }
+ else
+ {
+ die "EOF found whilst scanning for \\CSVtolongtable fifth argument on line $.\n";
+ }
+ }
+
+ &csvtotabular($csvname, $alignment, $FIRST, $MIDDLE, $LAST,
+ "longtable");
+
+ print OUTPUT "$restofline\n";
+ }
+ elsif (/^(.*)\\applyCSVfile(\*)?(.*)$/)
+ {
+ print OUTPUT "$1$comment";
+ $comment="";
+
+ $starred = defined($2);
+
+ $restofline = $3;
+ $lineno = $.;
+
+ $restofline = &eatinitialspaces($restofline);
+ $restofline = &eatcomments($restofline);
+
+ $startrow = $starred ? 1 : 2;
+
+ if (/^\[([0-9]+)\](.*)/)
+ {
+ $startrow = $1;
+
+ $restofline = $2;
+ }
+
+ $line=$restofline;
+
+ ($csvname,$restofline,$done) = &getnextgroup($line);
+
+ while (!$done)
+ {
+ if ($nextline= <FILENAME>)
+ {
+ $line = $restofline . $nextline;
+
+ ($csvname,$restofline,$done) = &getnextgroup($line);
+ }
+ else
+ {
+ die "EOF found whilst scanning for \\applyCSVfile*[$startrow] first argument on line $lineno\n";
+ }
+ }
+
+ $csvname=~s/\\csname (.*)\\roman{(.*)}\\endcsname/$data{$1}[$counter{$2}]/;
+
+ $line=$restofline;
+
+ ($body,$restofline,$done) = &getnextgroup($line);
+
+ while (!$done)
+ {
+ if ($nextline= <FILENAME>)
+ {
+ $line = $restofline . $nextline;
+
+ ($body,$restofline,$done) = &getnextgroup($line);
+ }
+ else
+ {
+ die "EOF found whilst scanning for \\applyCSVfile*[$startrow] second argument on line $lineno\n";
+ }
+ }
+
+ if ($starred)
+ {
+ &applyCSVfilestar($csvname, $body, $startrow);
+ }
+ else
+ {
+ &applyCSVfile($csvname, $body, $startrow);
+ }
+
+ print OUTPUT "$restofline\n";
+ }
+ elsif (/^(.*)\\sortapplyCSVfile(\*)?(.*)$/)
+ {
+ print OUTPUT "$1$comment";
+ $comment="";
+
+ $starred = defined($2);
+
+ $restofline = $3;
+ $lineno = $.;
+
+ $restofline = &eatinitialspaces($restofline);
+ $restofline = &eatcomments($restofline);
+
+ $line=$restofline;
+
+ $options = '';
+
+ if ($restofline=~/^\s*\[/)
+ {
+ ($options,$restofline,$done) = &getnextoptionalgroup($line);
+
+ while (!$done)
+ {
+ if ($nextline= <FILENAME>)
+ {
+ $line = $restofline . $nextline;
+
+ ($options,$restofline,$done) = &getnextoptionalgroup($line);
+ }
+ else
+ {
+ die "EOF found whilst scanning for \\sortapplyCSVfile optional argument on line $lineno\n";
+ }
+ }
+ }
+
+ $line=$restofline;
+
+ ($csvname,$restofline,$done) = &getnextgroup($line);
+
+ while (!$done)
+ {
+ if ($nextline= <FILENAME>)
+ {
+ $line = $restofline . $nextline;
+
+ ($csvname,$restofline,$done) = &getnextgroup($line);
+ }
+ else
+ {
+ die "EOF found whilst scanning for \\sortapplyCSVfile argument on line $lineno\n";
+ }
+ }
+
+ $csvname=~s/\\csname (.*)\\roman{(.*)}\\endcsname/$data{$1}[$counter{$2}]/;
+
+ $line=$restofline;
+
+ ($body,$restofline,$done) = &getnextgroup($line);
+
+ while (!$done)
+ {
+ if ($nextline= <FILENAME>)
+ {
+ $line = $restofline . $nextline;
+
+ ($body,$restofline,$done) = &getnextgroup($line);
+ }
+ else
+ {
+ die "EOF found whilst scanning for \\sortapplyCSVfile argument on line $lineno\n";
+ }
+ }
+
+ if ($starred)
+ {
+ &sortapplyCSVfilestar($csvname, $body, $options);
+ }
+ else
+ {
+ &sortapplyCSVfile($csvname, $body, $options);
+ }
+
+ print OUTPUT "$restofline\n";
+ }
+ elsif (/^(.*)\\sortCSVto(tabular|longtable)(.*)$/)
+ {
+ print OUTPUT "$1$comment";
+ $comment="";
+
+ $envname = $2;
+ $restofline = $3;
+ $lineno = $.;
+
+ $restofline = &eatinitialspaces($restofline);
+ $restofline = &eatcomments($restofline);
+
+ $line=$restofline;
+
+ $options = '';
+
+ if ($restofline=~/^\s*\[/)
+ {
+ ($options,$restofline,$done) = &getnextoptionalgroup($line);
+
+ while (!$done)
+ {
+ if ($nextline= <FILENAME>)
+ {
+ $line = $restofline . $nextline;
+
+ ($options,$restofline,$done) = &getnextoptionalgroup($line);
+ }
+ else
+ {
+ die "EOF found whilst scanning for \\sortCSVto$envname first argument on line $lineno\n";
+ }
+ }
+ }
+
+ $line=$restofline;
+
+ ($csvname,$restofline,$done) = &getnextgroup($line);
+
+ while (!$done)
+ {
+ if ($nextline= <FILENAME>)
+ {
+ $line = $restofline . $nextline;
+
+ ($csvname,$restofline,$done) = &getnextgroup($line);
+ }
+ else
+ {
+ die "EOF found whilst scanning for \\sortCSVto$envname argument on line $lineno\n";
+ }
+ }
+
+ $csvname=~s/\\csname (.*)\\roman{(.*)}\\endcsname/$data{$1}[$counter{$2}]/;
+
+ $line=$restofline;
+
+ ($align,$restofline,$done) = &getnextgroup($line);
+
+ while (!$done)
+ {
+ if ($nextline= <FILENAME>)
+ {
+ $line = $restofline . $nextline;
+
+ ($align,$restofline,$done) = &getnextgroup($line);
+ }
+ else
+ {
+ die "EOF found whilst scanning for \\sortCSVto$envname argument on line $lineno\n";
+ }
+ }
+
+ $line=$restofline;
+
+ ($headrow,$restofline,$done) = &getnextgroup($line);
+
+ while (!$done)
+ {
+ if ($nextline= <FILENAME>)
+ {
+ $line = $restofline . $nextline;
+
+ ($headrow,$restofline,$done) = &getnextgroup($line);
+ }
+ else
+ {
+ die "EOF found whilst scanning for \\sortCSVto$envname argument on line $lineno\n";
+ }
+ }
+
+ $line=$restofline;
+
+ ($midrows,$restofline,$done) = &getnextgroup($line);
+
+ while (!$done)
+ {
+ if ($nextline= <FILENAME>)
+ {
+ $line = $restofline . $nextline;
+
+ ($midrows,$restofline,$done) = &getnextgroup($line);
+ }
+ else
+ {
+ die "EOF found whilst scanning for \\sortCSVto$envname argument on line $lineno\n";
+ }
+ }
+
+ $line=$restofline;
+
+ ($lastrow,$restofline,$done) = &getnextgroup($line);
+
+ while (!$done)
+ {
+ if ($nextline= <FILENAME>)
+ {
+ $line = $restofline . $nextline;
+
+ ($lastrow,$restofline,$done) = &getnextgroup($line);
+ }
+ else
+ {
+ die "EOF found whilst scanning for \\sortCSVto$envname argument on line $lineno\n";
+ }
+ }
+
+ &sortCSVtotabular($csvname,$align,$headrow,$midrows,$lastrow,
+ $envname,$options);
+
+ print OUTPUT "$restofline\n";
+ }
+ elsif (/^(.*)\\csvpiechart(\*)?(.*)$/)
+ {
+ print OUTPUT "$1$comment";
+ $comment="";
+
+ $lineno = $.;
+
+ $starred = defined($2);
+
+ $restofline = $3;
+
+ $restofline = &eatinitialspaces($restofline);
+ $restofline = &eatcomments($restofline);
+
+ $startrow= $starred ? 1 : 2;
+
+ $line=$restofline;
+
+ ($options,$restofline,$done) = &getnextoptionalgroup($line);
+
+ while (!$done)
+ {
+ if ($nextline= <FILENAME>)
+ {
+ $line = $restofline . $nextline;
+
+ ($options,$restofline,$done) = &getnextoptionalgroup($line);
+ }
+ else
+ {
+ die "EOF found whilst scanning for \\csvpiechart optional argument on line $lineno\n";
+ }
+ }
+
+ $line=$restofline;
+
+ ($label,$restofline,$done) = &getnextgroup($line);
+
+ while (!$done)
+ {
+ if ($nextline= <FILENAME>)
+ {
+ $line = $restofline . $nextline;
+
+ ($label,$restofline,$done) = &getnextgroup($line);
+ }
+ else
+ {
+ die "EOF found whilst scanning for \\csvpiechart second argument on line $lineno\n";
+ }
+ }
+
+ $line=$restofline;
+
+ ($csvname,$restofline,$done) = &getnextgroup($line);
+
+ while (!$done)
+ {
+ if ($nextline= <FILENAME>)
+ {
+ $line = $restofline . $nextline;
+
+ ($csvname,$restofline,$done) = &getnextgroup($line);
+ }
+ else
+ {
+ die "EOF found whilst scanning for \\csvpiechart second argument on line $lineno\n";
+ }
+ }
+
+ print OUTPUT "\\csvpiesetkeys{$options}%\n";
+
+ if ($options=~m/firstrow\s*=\s*(\d+)/)
+ {
+ $startrow=$1;
+ }
+
+ if ($starred)
+ {
+ &csvpiechartstar($label, $csvname, $startrow);
+ }
+ else
+ {
+ &csvpiechart($label, $csvname, $startrow);
+ }
+
+ print OUTPUT "$restofline\n";
+ }
+ else
+ {
+ print OUTPUT "$_$comment";
+ }
+}
+
+sub doapplyCSV{
+ local($csvrow, $body, @idx, %HoH) = @_;
+ local($row, $entry);
+
+ $counter{'csvrownumber'} = 0;
+ print OUTPUT "\\setcounter{csvrownumber}{0}\\relax\n";
+
+ foreach ($row=1; $row <= $csvrow; $row++)
+ {
+ print ".";
+
+ local($THISROW) = $body;
+
+ $THISROW = &csvSaveEntry($THISROW,$row,%HoH);
+
+ foreach $entry ( keys %{$HoH[$row]})
+ {
+ $replacementval=$HoH[$row]{$entry};
+
+ $THISROW =~ s/\\insertbyname{$entry}/$replacementval/g;
+
+ $THISROW =~ s/\\insert$entry/$replacementval/g;
+
+ local($column) = $idx{$entry}+1;
+
+ $THISROW =~ s/\\field{(\d+)}/$1eq$column?$replacementval:$&/emg;
+
+ $THISROW = &ifnextrowlast($THISROW, ($row==$csvrow-1));
+ }
+
+ print OUTPUT "\\refstepcounter{csvrownumber}\\relax\n$THISROW";
+ $counter{'csvrownumber'}++;
+ }
+}
+
+sub doapplyCSVstar{
+ local($body, $csvrow, $numcols, @entry) = @_;
+ local($row,$column);
+
+ print OUTPUT "\\setcounter{csvrownumber}{0}\\relax\n";
+ $counter{'csvrownumber'} = 0;
+
+ for ($row=0; $row < $csvrow; $row++)
+ {
+ print ".";
+
+ $THISROW = $body;
+
+ for ($column=0; $column < $numcols; $column++)
+ {
+ $replacementval=$entry[$row][$column];
+
+ $THISROW =~ s/\\field{(\d+)}/$1eq$column+1?$replacementval:$&/emg;
+
+ $THISROW = &ifnextrowlast($THISROW, ($row==$csvrow-1));
+ }
+
+ print OUTPUT "\\refstepcounter{csvrownumber}$THISROW";
+ $counter{'csvrownumber'}++;
+ }
+
+}
+
+sub getCSVvalues{
+ local($CSVFILE, $startrow) = @_;
+ local(@idx, %HoH, @fields);
+
+ open FH, $CSVFILE or die "Can't open file '$CSVFILE'\n";
+
+ local ($csvrow)=0;
+
+ while (<FH>)
+ {
+ if ($. == 1)
+ {
+ # get header row
+
+ chop;
+
+ @fields = &getEntries($_);
+
+ local($numcols) = 0;
+
+ foreach $field (@fields)
+ {
+ $idx{$field} = $numcols;
+
+ $numcols++;
+ }
+ }
+ elsif ($. >= $startrow)
+ {
+ next unless /$separator/;
+
+ chop;
+
+ $csvrow++;
+ $rec = {};
+
+ $HoH[$csvrow] = $rec;
+
+ local(@entries) = &getEntries($_);
+
+ local ($i) = 0;
+
+ foreach $e (@entries)
+ {
+ $rec->{$fields[$i]} = $e;
+ $i++;
+ }
+ }
+ }
+
+ close FH;
+
+ return ($csvrow, @idx, %HoH);
+}
+
+sub getCSVvaluesstar
+{
+ local($CSVFILE, $startrow) = @_;
+ open FH, $CSVFILE or die "Can't open file '$CSVFILE'\n";
+
+ $csvrow=0;
+
+ while (<FH>)
+ {
+ if ($. >= $startrow)
+ {
+ chop;
+
+ @fields = &getEntries($_);
+
+ $numcols = 0;
+
+ foreach $field (@fields)
+ {
+ $entry[$csvrow][$numcols] = $field;
+
+ $numcols++;
+ }
+
+ $csvrow++;
+ }
+ }
+
+ close FH;
+
+ return ($csvrow, $numcols, @entry);
+}
+
+sub csvpiechart
+{
+ local($value, $CSVFILE, $startrow) = @_;
+
+ print "Converting \\csvpiechart[$options]{$label}{$csvname}\n";
+ print OUTPUT "% \\csvpiechart[$options]{$label}{$csvname} converted using csvtools.pl\n";
+ print OUTPUT "%>> START INSERT\n";
+
+ # read in data from CSV file
+ local($csvrow, @idx, %HoH) = &getCSVvalues($CSVFILE,$startrow);
+
+ # first compute parameters
+
+ print OUTPUT "\\edef\\csvstartang{\\thecsvstartangle}\\relax\n";
+ $body = "\\csvsetsegmentparams{\\thecsvrownumber}{$value}\\relax\n";
+
+ &doapplyCSV($csvrow, $body, @idx, %HoH);
+
+ print OUTPUT "\\setcounter{csvstartangle}{\\csvstartang}\\relax\n";
+
+ # compute offsets for cutaway segments
+
+ print OUTPUT "\\ifthenelse{\\equal{\\csvpiecutaways}{}}{}{\\csvcomputeoffsets}\\relax\n";
+
+ # now do the pie chart
+
+ print OUTPUT "\\begin{tikzpicture}\n";
+
+ $body = "\\renewcommand*{\\csvpieinnerlabel}{$csvpieinnerlabel}\n";
+ $body .= "\\renewcommand*{\\csvpieouterlabel}{$csvpieouterlabel}\n";
+ $body .= "\\csvpiesegment{$value}\n";
+
+ &doapplyCSV($csvrow, $body, %HoH);
+
+ print OUTPUT "\\end{tikzpicture}";
+ print OUTPUT "%<< END INSERT\n";
+ print "\n";
+}
+
+sub csvpiechartstar
+{
+ local($value, $CSVFILE, $startrow) = @_;
+
+ print "Converting \\csvpiechart*[$options]{$label}{$csvname}\n";
+ print OUTPUT "% \\csvpiechart*[$options]{$label}{$csvname} converted using csvtools.pl\n";
+ print OUTPUT "%>> START INSERT\n";
+
+ local($csvrow, $numcols, @entry) = &getCSVvaluesstar($CSVFILE, $startrow);
+
+ # first compute parameters
+
+ print OUTPUT "\\edef\\csvstartang{\\thecsvstartangle}\\relax\n";
+ $body = "\\csvsetsegmentparams{\\thecsvrownumber}{$value}\\relax\n";
+
+ &doapplyCSVstar($body, $csvrow, $numcols, @entry);
+
+ print OUTPUT "\\setcounter{csvstartangle}{\\csvstartang}\\relax\n";
+
+ # compute offsets for cutaway segments
+
+ print OUTPUT "\\ifthenelse{\\equal{\\csvpiecutaways}{}}{}{\\csvcomputeoffsets}\\relax\n";
+
+ $body = "\\renewcommand*{\\csvpieinnerlabel}{$csvpieinnerlabel}\\relax\n";
+ $body .= "\\renewcommand*{\\csvpieouterlabel}{$csvpieouterlabel}\\relax\n";
+ $body .= "\\csvpiesegment{$value}\\relax\n";
+
+ print OUTPUT "\\begin{tikzpicture}\n";
+
+ &doapplyCSVstar($body, $csvrow, $numcols, @entry);
+
+ print OUTPUT "\\end{tikzpicture}";
+ print OUTPUT "%<< END INSERT\n";
+ print "\n";
+}
+
+sub applyCSVfile
+{
+ my ($CSVFILE,$body,$startrow) = @_;
+
+ print "Converting \\applyCSVfile{$CSVFILE}";
+ print OUTPUT "\% \\applyCSVfile{$CSVFILE}... converted using csvtools.pl\n";
+ print OUTPUT "\%>> START INSERT\n";
+
+ # read in data from CSV file
+ local($csvrow, @idx, %HoH) = &getCSVvalues($CSVFILE,$startrow);
+
+ # apply data
+
+ &doapplyCSV($csvrow, $body, @idx, %HoH);
+
+ print "\n";
+
+ print OUTPUT "\%<< END INSERT\n";
+}
+
+sub sortapplyCSVfile
+{
+ my ($CSVFILE,$body,$options) = @_;
+
+ print "Converting \\sortapplyCSVfile{$CSVFILE}";
+ print OUTPUT "\% \\sortapplyCSVfile{$CSVFILE}... converted using csvtools.pl\n";
+ print OUTPUT "\%>> START INSERT\n";
+
+ # get options
+ %hash = &getKeyValues($options) if $options;
+
+ local($startrow) = defined($hash{'firstdataline'})
+ ? $hash{'firstdataline'}
+ : $globalsort{'firstdataline'};
+
+ local ($sortorder) = $hash{'sort'};
+
+ # read in data from CSV file
+ local($csvrow, @idx, %HoH) = &getCSVvalues($CSVFILE,$startrow);
+
+ # get sort variable
+
+ local($variable) = defined($hash{'variable'})
+ ? $hash{'variable'}
+ : $globalsort{'variable'};
+
+ local(@rowdata)=();
+
+ print OUTPUT "\\bgroup\n";
+
+ # set field labels
+
+ foreach $entry (keys %{$HoH[1]})
+ {
+ print OUTPUT "\\setcsvfieldlabel{";
+ print OUTPUT ($idx{$entry}+1).'}{';
+ print OUTPUT "$entry}%\n";
+ }
+
+ print OUTPUT "\\def\\csvsortlist{%\n";
+
+ # construct list
+
+ foreach ($row=1; $row <= $csvrow; $row++)
+ {
+ print ".";
+
+ local($sortkey) = $variable;
+
+ $sortkey = &csvSaveEntry($sortkey,$row,%HoH);
+
+ foreach $entry ( keys %{$HoH[$row]})
+ {
+ $replacementval=$HoH[$row]{$entry};
+
+ $sortkey =~ s/\\insertbyname{$entry}/$replacementval/g;
+
+ $sortkey =~ s/\\insert$entry/$replacementval/g;
+
+ local($column) = $idx{$entry}+1;
+
+ $rowdata[$idx{$entry}] = $replacementval;
+
+ $sortkey =~ s/\\field{(\d+)}/$1eq$column?$replacementval:$&/emg;
+ }
+
+ print OUTPUT "{$sortkey}{".join($separator,@rowdata)."}";
+
+ print OUTPUT ($row == $csvrow ? "%\n" : ",%\n");
+ }
+
+ print OUTPUT "}%\n";
+
+ print OUTPUT "\\sortapplyCSVdata";
+
+ if (defined($sortorder))
+ {
+ print OUTPUT "[$sortorder]";
+ }
+
+ print OUTPUT "{\\csvsortlist}{%\n";
+
+ print OUTPUT "$body}%\n";
+
+ print OUTPUT "\\egroup\n";
+ print OUTPUT "\%<< END INSERT\n";
+
+ print "\n";
+}
+
+sub sortapplyCSVfilestar
+{
+ my ($CSVFILE,$body,$options) = @_;
+
+ print "Converting \\sortapplyCSVfile*{$CSVFILE}";
+ print OUTPUT "\% \\sortapplyCSVfile*{$CSVFILE}... converted using csvtools.pl\n";
+ print OUTPUT "\%>> START INSERT\n";
+
+ # get options
+ %hash = &getKeyValues($options) if $options;
+
+ local($startrow) = defined($hash{'sfirstdataline'})
+ ? $hash{'sfirstdataline'}
+ : $globalsort{'sfirstdataline'};
+
+ local ($sortorder) = $hash{'sort'};
+
+ local($csvrow, $numcols, @entry) = &getCSVvaluesstar($CSVFILE, $startrow);
+
+ # get sort variable
+
+ local($variable) = defined($hash{'variable'})
+ ? $hash{'variable'}
+ : $globalsort{'variable'};
+
+ local(@rowdata)=();
+
+ print OUTPUT "\\bgroup\n";
+
+ print OUTPUT "\\def\\csvsortlist{%\n";
+
+ # construct list
+
+ for ($row=0; $row < $csvrow; $row++)
+ {
+ print ".";
+
+ local($sortkey) = $variable;
+
+ for ($column=0; $column < $numcols; $column++)
+ {
+ $replacementval=$entry[$row][$column];
+
+ $sortkey =~ s/\\field{(\d+)}/$1eq$column+1?$replacementval:$&/emg;
+ $rowdata[$column] = $replacementval;
+ }
+
+ print OUTPUT "{$sortkey}{".join($separator,@rowdata)."}";
+
+ print OUTPUT ($row == $csvrow-1 ? "%\n" : ",%\n");
+ }
+
+ print OUTPUT "}%\n";
+
+ print OUTPUT "\\sortapplyCSVdata*";
+
+ if (defined($sortorder))
+ {
+ print OUTPUT "[$sortorder]";
+ }
+
+ print OUTPUT "{\\csvsortlist}{%\n";
+
+ print OUTPUT "$body}%\n";
+
+ print OUTPUT "\\egroup\n";
+
+ print "\n";
+
+ print OUTPUT "\%<< END INSERT\n";
+}
+
+sub sortCSVtotabular
+{
+ my ($CSVFILE,$align,$headrow,$midrows,$lastrow,$envname,$options) = @_;
+
+ print "Converting \\sortCSVto${envname}{$CSVFILE}";
+ print OUTPUT "\% \\sortCSVto${envname}{$CSVFILE}... converted using csvtools.pl\n";
+ print OUTPUT "\%>> START INSERT\n";
+
+ # get options
+ %hash = &getKeyValues($options) if $options;
+
+ local($startrow) = defined($hash{'firstdataline'})
+ ? $hash{'firstdataline'}
+ : $globalsort{'firstdataline'};
+
+ local ($sortorder) = $hash{'sort'};
+
+ # read in data from CSV file
+ local($csvrow, @idx, %HoH) = &getCSVvalues($CSVFILE,$startrow);
+
+ # get sort variable
+
+ local($variable) = defined($hash{'variable'})
+ ? $hash{'variable'}
+ : $globalsort{'variable'};
+
+ local(@rowdata)=();
+
+ print OUTPUT "\\bgroup\n";
+
+ # set field labels
+
+ foreach $entry (keys %{$HoH[1]})
+ {
+ print OUTPUT "\\setcsvfieldlabel{";
+ print OUTPUT ($idx{$entry}+1).'}{';
+ print OUTPUT "$entry}%\n";
+ }
+
+ print OUTPUT "\\def\\csvsortlist{%\n";
+
+ # construct list
+
+ foreach ($row=1; $row <= $csvrow; $row++)
+ {
+ print ".";
+
+ local($sortkey) = $variable;
+
+ $sortkey = &csvSaveEntry($sortkey,$row,%HoH);
+
+ foreach $entry ( keys %{$HoH[$row]})
+ {
+ $replacementval=$HoH[$row]{$entry};
+
+ $sortkey =~ s/\\insertbyname{$entry}/$replacementval/g;
+
+ $sortkey =~ s/\\insert$entry/$replacementval/g;
+
+ local($column) = $idx{$entry}+1;
+
+ $rowdata[$idx{$entry}] = $replacementval;
+
+ $sortkey =~ s/\\field{(\d+)}/$1eq$column?$replacementval:$&/emg;
+ }
+
+ print OUTPUT "{$sortkey}{".join($separator,@rowdata)."}";
+
+ print OUTPUT ($row == $csvrow ? "%\n" : ",%\n");
+ }
+
+ print OUTPUT "}%\n";
+
+ if (defined($sortorder))
+ {
+ print OUTPUT "\\setkeys{csvsort.sty}{sort=$sortorder}";
+ }
+
+ print OUTPUT "\\sortCSVdatatotabular";
+
+ print OUTPUT "{$csvrow}{\\csvsortlist}{$align}%\n";
+ print OUTPUT "{$headrow}%\n";
+ print OUTPUT "{$midrows}%\n";
+ print OUTPUT "{$lastrow}%\n";
+ print OUTPUT "{$envname}%\n";
+
+ print OUTPUT "\\egroup\n";
+ print OUTPUT "\%<< END INSERT\n";
+
+ print "\n";
+}
+
+sub csvSaveEntry
+{
+ my ($STR,$row,%HoH) = @_;
+
+ $rowctr = "csvrownumber";
+
+ while (($pos = index($STR, "\\csvSaveEntry")) > -1)
+ {
+ $start = substr($STR,0,$pos);
+ $restofline = substr($STR,$pos+13);
+
+ $restofline = &eatcomments($restofline);
+ $restofline = &eatinitialspaces($restofline);
+
+ if (substr($restofline,0,1) eq "[")
+ {
+ if (($i = index($restofline,"]")) > -1)
+ {
+ $rowctr = substr($restofline, 1, $i-1);
+
+ $restofline = substr($restofline, $i+1);
+ }
+ else
+ {
+ die "unmatched [ in \\csvSaveEntry\n";
+ }
+
+ $row = $counter{$rowctr};
+ }
+
+ ($group,$restofline,$done) = &getnextgroup($restofline);
+
+ if (!$done)
+ {
+ die "argument to \\csvSaveEntry[$rowctr] not found in >>$restofline<<\n";
+ }
+
+ $val = $HoH[$row]{$group};
+
+ $STR = $start . "\\expandafter\\gdef\\csname $group\\roman{$rowctr}\\endcsname{$val}" . $restofline;
+
+ $data{$group}[$row] = $HoH[$row]{$group};
+ }
+
+ return $STR;
+}
+
+sub applyCSVfilestar
+{
+ my ($CSVFILE,$body,$startrow) = @_;
+
+ print "Converting \\applyCSVfile*{$CSVFILE}";
+
+ $counter{'csvrownumber'} = 0;
+ local($csvrow, $numcols, @entry) = &getCSVvaluesstar($CSVFILE, $startrow);
+
+ &doapplyCSVstar($body, $csvrow, $numcols, @entry);
+
+ print "\n";
+
+ print OUTPUT "\%<< END INSERT\n";
+}
+
+sub csvtotabular
+{
+ my ($CSVFILE,$ALIGN,$START,$MID,$END,$environment) = @_;
+
+ print "Converting \\CSVtotabular{$CSVFILE}";
+
+ print OUTPUT "\% \\CSVtotabular{$CSVFILE}... converted using $0\n";
+ print OUTPUT "\%>> START INSERT\n";
+
+ # read in data from CSV file
+ local($csvrow, @idx, %HoH) = &getCSVvalues($CSVFILE,2);
+
+ print OUTPUT "\\setcounter{csvrownumber}{0}%\n";
+ $counter{csvrownumber} = 0;
+ print OUTPUT "\\begin{$environment}{$ALIGN}\n";
+
+ print OUTPUT "$START";
+
+ foreach ($row=1; $row <= $csvrow; $row++ )
+ {
+ print ".";
+
+ if ($row == $csvrow)
+ {
+ $THISROW=$END;
+ }
+ else
+ {
+ $THISROW=$MID;
+ }
+
+ foreach $entry ( keys %{$HoH[$row]})
+ {
+ $replacementval=$HoH[$row]{$entry};
+
+ $THISROW =~ s/\\insertbyname{$entry}/$replacementval/g;
+
+ $THISROW =~ s/\\insert$entry/$replacementval/g;
+
+ $column = $idx{$entry};
+
+ $THISROW =~ s/\\field{$column}/$replacementval/g;
+
+ $THISROW = &ifnextrowlast($THISROW, ($row==$csvrow-1));
+ }
+
+ print OUTPUT "\\refstepcounter{csvrownumber}$THISROW";
+ $counter{csvrownumber}++;
+ }
+
+ print OUTPUT "\\end{$environment}";
+ print OUTPUT "\%<< END INSERT\n";
+
+ print "\n";
+}
+
+sub ifnextrowlast
+{
+ my ($STR, $nextislast) = @_;
+
+ if (($pos = index($STR, "\\ifnextrowlast")) > -1)
+ {
+ $strbegin = substr($STR,0,$pos);
+ $strend = substr($STR,$pos+14);
+
+ ($firstarg,$strend,$done) = &getnextgroup($strend);
+
+ if (!$done)
+ {
+ die "Can't find first argument to \\ifnextrowlast\n";
+ }
+
+ ($secondarg,$strend,$done) = &getnextgroup($strend);
+
+ if (!$done)
+ {
+ die "Can't find second argument to \\ifnextrowlast\n";
+ }
+
+ if ($nextislast)
+ {
+ $STR = $strbegin . $firstarg . $strend;
+ }
+ else
+ {
+ $STR = $strbegin . $secondarg . $strend;
+ }
+ }
+
+ return $STR;
+}
+
+sub eatcomments
+{
+ local ($_) = @_;
+
+ if (m/(\\{1}%[^%]*)*(\\*)%/)
+ {
+ $pre = $`;
+ $pre .= $1 if defined($1);
+ $pre .= $2;
+
+ local($n) = length($2);
+
+ if ($n%2 == 0)
+ {
+ $_ = $pre;
+ }
+ }
+
+ return $_;
+}
+
+sub eatinitialspaces
+{
+ local ($_) = @_;
+
+# while (substr($STR,0,1) eq " " or substr($STR,0,1) eq "\n"
+# or substr($STR,0,1) eq "\r" or substr($STR,0,1) eq "\t")
+# {
+# $STR = substr($STR,1);
+# }
+
+ s/^(\s)*//sg;
+
+ return $_;
+}
+
+sub getnextgroup
+{
+ my($curline) = @_;
+
+ $curline = &eatcomments($curline);
+
+ $curline = &eatinitialspaces($curline);
+
+ # check to see if current string is blank
+
+ if ($curline!~/[^\s]+/m)
+ {
+ return ("",$curline,0);
+ }
+
+ if (($group = substr($curline,0,1)) ne "{")
+ {
+ # next group hasn't been delimited with braces
+ # return first non-whitespace character
+
+ $curline = substr($curline,1);
+
+ # unless it's a backslash, in which case get command name
+
+ if ($group eq "\\")
+ {
+ if ($curline=~/([a-zA-Z]+)(^[a-zA-Z].*)/m)
+ {
+ $group = $1;
+
+ $curline = $2;
+ }
+ else
+ {
+ # command is made up of backslash followed by symbol
+
+ $curline=~/([\W_0-9\s\\])(.*)/m;
+
+ $group = $1;
+
+ $curline = $2;
+ }
+ }
+
+ return ($group,$curline,1);
+ }
+
+ my $pos=index($curline, "{");
+ my $startpos=$pos;
+ my $posopen=0;
+ my $posclose=0;
+
+ my $bracelevel = 1;
+
+ my $done=0;
+
+ while (!$done)
+ {
+ $pos++;
+
+ $posopen = index($curline, "{", $pos);
+
+ # check to make sure it's not a \{
+
+ while ((substr($curline, $posopen-1,1) eq "\\") and ($posopen > 0))
+ {
+ # count how many backlashes come before it.
+
+ $i = $posopen-1;
+
+ $numbs = 1;
+
+ while ((substr($curline, $i-1,1) eq "\\") and ($i > 0))
+ {
+ $numbs++;
+ $i--;
+ }
+
+ # is $numbs is odd, we have a \{, otherwise we have \\{
+
+ if ($numbs%2 == 0)
+ {
+ last;
+ }
+ else
+ {
+ $posopen = index($curline, "{", $posopen+1);
+ }
+ }
+
+ $posclose= index($curline, "}", $pos);
+
+ # check to make sure it's not a \}
+
+ while ((substr($curline, $posclose-1,1) eq "\\") and ($posclose > 0))
+ {
+ # count how many backlashes come before it.
+
+ $i = $posclose-1;
+
+ $numbs = 1;
+
+ while ((substr($curline, $i-1,1) eq "\\") and ($i > 0))
+ {
+ $numbs++;
+ $i--;
+ }
+
+ # is $numbs is odd, we have a \}, otherwise we have \\}
+
+ if ($numbs%2 == 0)
+ {
+ last;
+ }
+ else
+ {
+ $posclose = index($curline, "}", $posclose+1);
+ }
+ }
+
+ if (($posopen==-1) and ($posclose==-1))
+ {
+ $done=1;
+ }
+ elsif ($posopen==-1)
+ {
+ $pos=$posclose;
+
+ $bracelevel--;
+
+ if ($bracelevel==0)
+ {
+ $group = substr($curline, $startpos+1, $pos-$startpos-1);
+
+ $curline = substr($curline, $pos+1);
+
+ return ($group,$curline,1);
+ }
+ }
+ elsif ($posclose==-1)
+ {
+ $pos=$posopen;
+
+ $bracelevel++;
+ }
+ elsif ($posopen<$posclose)
+ {
+ $pos=$posopen;
+
+ $bracelevel++;
+ }
+ elsif ($posclose<$posopen)
+ {
+ $pos=$posclose;
+
+ $bracelevel--;
+
+ if ($bracelevel==0)
+ {
+ $group = substr($curline, $startpos+1, $pos-$startpos-1);
+
+ $curline = substr($curline, $pos+1);
+
+ return ($group,$curline,1);
+ }
+ }
+ }
+
+ # closing brace must be on another line
+
+ return ("", $curline, 0);
+}
+
+sub getnextoptionalgroup
+{
+ my($curline) = @_;
+
+ $curline = &eatcomments($curline);
+
+ $curline = &eatinitialspaces($curline);
+
+ # check to see if current string is blank
+
+ if ($curline!~/[^\s]+/m)
+ {
+ return ("","",0);
+ }
+
+ if (($group = substr($curline,0,1)) ne "[")
+ {
+ # no optional argument present
+ return ("", $curline, 1);
+ }
+
+ $posopen = index($curline, "[");
+
+ # search for first occurance of ]
+
+ $posclose = index($curline, "]");
+
+ if ($posclose < 0)
+ {
+ # closing bracket not on this line
+ return ("", $curline, 0);
+ }
+
+ # is there a { in the substring?
+
+ $group = substr($curline, $posopen, $posclose+1);
+ $contents = $group;
+ $restofline = substr($curline, $posclose+$posopen+1);
+
+ while (($idx=index($group, "{")) > 0)
+ {
+ $post = substr($group, $idx);
+
+ $subgroup="";
+ ($subgroup,$remainder,$done) = &getnextgroup($post);
+
+ if ($done)
+ {
+ $group = $remainder;
+ }
+ else
+ {
+ # ] is in a group, so look for next one
+ $posclose = index($restofline, "]");
+
+ if ($posclose < 0)
+ {
+ # closing bracket not on this line
+ return ("", $curline, 0);
+ }
+ else
+ {
+ $contents .= substr($restofline,0,$posclose);
+ $group = $contents;
+ }
+ }
+ }
+
+ $contents=~s/^\[(.*)\]$/$1/;
+
+ return ($contents, $restofline, 1);
+}
+
+# get all entries in a row
+# modified version of code given in Perl FAQ
+
+sub getEntries{
+ local($row)=@_;
+
+ @entries = ();
+ push(@entries, $+) while $row =~ m{
+ "([^\"\\]*(?:\\.[^\"\\]*)*)"$separator? # groups the phrase inside the quotes
+ | ([^$separator]+)$separator?
+ | $separator
+ }gx;
+ push(@entries, undef) if substr($row,-1,1) eq $separator;
+
+ @entries;
+}
+
+# extract key=value pairs from list
+
+sub getKeyValues{
+ local($list,%defaults)=@_;
+ local(%hash)=();
+
+ # remove leading commas and spaces
+
+ $list=~s/^[\s,]*//;
+
+ while ($list=~/^\s*([^,=]+)\s*/)
+ {
+ $key=$1;
+
+ $value = '';
+
+ if ($list=~s/^\s*$key\s*=\s*{/{/)
+ {
+ ($value,$list,$done) = &getnextgroup($list);
+ }
+ elsif ($list=~s/^\s*$key\s*=\s*([^,]*)\s*//)
+ {
+ $value = $1;
+ }
+ elsif ($list=~s/^\s*$key\s*(,|$)//)
+ {
+ if (defined($defaults{$key}))
+ {
+ $value = $defaults{$key};
+ }
+ else
+ {
+ print "don't know default value for $key key\n";
+ }
+ }
+
+ $hash{$key} = $value;
+
+ # remove trailing commas
+
+ $list=~s/^[\s,]*//;
+ }
+
+ %hash;
+}
+
+1;
diff --git a/obsolete/macros/latex/contrib/csvtools/source/csvtools.dtx b/obsolete/macros/latex/contrib/csvtools/source/csvtools.dtx
new file mode 100644
index 0000000000..f11d5e4452
--- /dev/null
+++ b/obsolete/macros/latex/contrib/csvtools/source/csvtools.dtx
@@ -0,0 +1,2536 @@
+%\iffalse
+% csvtools.dtx generated using makedtx version 0.91b (c) Nicola Talbot
+% Command line args:
+% -src "csvtools\.sty\Z=>csvtools.sty"
+% -src "csvpie\.sty\Z=>csvpie.sty"
+% -src "csvsort\.sty\Z=>csvsort.sty"
+% -doc "manual.tex"
+% -author "Nicola Talbot"
+% -dir "source"
+% csvtools
+% Created on 2007/7/3 10:24
+%\fi
+%\iffalse
+%<*package>
+%% \CharacterTable
+%% {Upper-case \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
+%% Lower-case \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
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%</package>
+%\fi
+% \iffalse
+% Doc-Source file to use with LaTeX2e
+% Copyright (C) 2007 Nicola Talbot, all rights reserved.
+% \fi
+% \iffalse
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage[colorlinks,
+ bookmarks,
+ hyperindex=false,
+ pdfauthor={Nicola Talbot},
+ pdftitle={csvtools: A LaTeX2e Package Providing Access to Data Saved in a CSV File},
+ pdfkeywords={LaTeX,package,csv}]{hyperref}
+\usepackage{csvpie}
+\usepackage{colortbl}
+
+
+\renewcommand{\usage}[1]{\hyperpage{#1}}
+\renewcommand{\main}[1]{\hyperpage{#1}}
+\newcommand{\see}[2]{\emph{see} #1}
+\makeatletter
+\def\index@prologue{\section*{Index}}
+\makeatother
+\RecordChanges
+\PageIndex
+\CheckSum{1878}
+\OnlyDescription
+\newcommand{\stynamefmt}[1]{\textsf{#1}}
+\newcommand{\envname}[1]{\textsf{#1}}
+
+
+\newcommand{\cmdname}[1]{\texttt{\symbol{92}#1}}
+
+\iffalse
+ Doc-Source file to use with LaTeX2e
+ Copyright (C) 2003 Nicola Talbot, all rights reserved.
+\fi
+
+
+ \newcounter{example}
+ \newenvironment{example}[2]{\refstepcounter{example}\label{#2}%
+\subsection*{Example \theexample\ (#1)}%
+\addcontentsline{loe}{section}{\protect\numberline{\theexample}#1}}{\par\centerline{\rule{2in}{1pt}}\par}
+
+\begin{document}
+\DocInput{csvtools.dtx}
+\end{document}
+%</driver>
+%\fi
+% \DeleteShortVerb{\|}
+% \MakeShortVerb{"}
+% \title{csvtools v1.24 : A \LaTeXe\ Package Providing Access to Data Saved in a CSV File}
+% \author{Nicola Talbot}
+% \date{3rd July 2007}
+% \maketitle
+% \tableofcontents
+%
+%\section*{List of Examples}
+%
+%\makeatletter\@starttoc{loe}\makeatother
+%
+% \section{Introduction}
+% The \stynamefmt{csvtools} package allows you to repeatedly perform
+% a set of \LaTeX\ commands on data in each row
+% of a comma separated variable (CSV) file.
+% This can be used for mail merging, generating
+% tables etc.
+%
+%\changes{1.2}{2006 Sept 1}{separator can now be changed}%
+%As from version 1.2, you can specify a different separator.
+%To change the separator, use the command:\\[10pt]
+%\DescribeMacro{\setcsvseparator}\cmdname{setcsvseparator}\{\meta{separator}\}\\[10pt]
+%For example, if your data is separated by colons instead of
+%commas, do:
+%\begin{verbatim}
+%\setcsvseparator{:}
+%\end{verbatim}
+%\changes{1.2}{2006 Sept 1}{entries can be delimited with double quotes}%
+%If your separator occurs within an entry, the entry must be
+%enclosed in double quotes, for example:
+%\begin{verbatim}
+%Name,Address,Telephone
+%A.N. Other,"1 The Street,The Town",0123456789
+%\end{verbatim}
+%Be careful of \TeX\ special characters occuring within a CSV
+%file, for example:
+%\begin{verbatim}
+%Name,Address,Telephone
+%Jack \& Jill,"2 The Street,The Town",0123456789
+%\end{verbatim}
+%
+% \section{Mail Merging and Similar Applications}
+%
+%\DescribeMacro{\applyCSVfile}\noindent
+% \cmdname{applyCSVfile}[\meta{n}]\{\meta{filename}\}\{\meta{text}\}\\
+% \cmdname{applyCSVfile*}[\meta{n}]\{\meta{filename}\}\{\meta{text}\}\\[10pt]
+% Letters can be generated using data given in
+% each line from \meta{filename}.
+% If the CSV file contains a header row, the
+% unstarred version of \cmdname{applyCSVfile} should
+% be used, otherwise the starred version \cmdname{applyCSVfile*}
+% should be used. The optional argument \meta{n}
+% specifies on which line the actual data (not header line)
+% starts. The unstarred version defaults to line 2
+% (the header row is always assumed to be on line 1)
+% and the starred version defaults to 1.
+%
+% With the unstarred version, the entries in the header row
+% are used to generate commands of the form
+% \DescribeMacro{\insert...}\cmdname{insert}\meta{identifier}\footnote{See Note~\ref{itm:insert} in Section~\ref{sec:drawbacks}}
+% to access corresponding elements
+% in the row currently being processed. For example,
+% suppose the first line of the CSV file looks like:
+%\begin{verbatim}
+%Name,Address,Time,Date
+%\end{verbatim}
+% then the commands \cmdname{insertName}, \cmdname{insertAddress},
+% \cmdname{insertTime} and \cmdname{insertDate} are
+% created, allowing you to use the entries in the first,
+% second, third and fourth columns of the current row.
+% If the header text contains non-alphabetical characters,
+% e.g.\ \texttt{Full Name}, then you will need to use
+% \DescribeMacro{\insertbyname}\cmdname{insertbyname}\texttt{\{}\meta{text}\texttt{\}},
+% e.g.\ \verb'\insertbyname{Full Name}'.
+%
+%Alternatively, you can use the
+%\DescribeMacro{\field}\cmdname{field}\{\meta{col}\} command, where
+%\meta{col} is the column number of the entry, so \verb"\field{1}"
+%indicates the first entry in the current row and \verb"\field{2}"
+%indicates the second entry in the current row.
+%
+% \begin{example}{Mail Merging}{ex:mail}
+% Suppose there is a file called \texttt{details.csv} that has the
+% following contents:
+%\begin{verbatim}
+%Name,Address,Time,Date
+%Miss A. Person,1 The Road\\The Town\\AB1 2XY,15.00,4th May 2004
+%Mr A. N. Other,2 The Road\\The Town\\AB1 2XY,15.30,11th May 2004
+%\end{verbatim}
+%then the following code can be used to generate a letter for each
+%person in the CSV file\footnote{Remeber to use a letter type of
+%class file}:
+%\begin{verbatim}
+%\applyCSVfile{details.csv}{%
+%\begin{letter}{\insertName\\\insertAddress}
+%\opening{Dear \insertName}
+%
+%You are invited to an interview at \insertTime\ on the \insertDate.
+%
+%\closing{Yours Sincerely}
+%\end{letter}}
+%\end{verbatim}
+% Note that you could also use \verb'\insertbyname{Name}' etc instead
+% of \cmdname{insertName} etc. Also note that you need to specify the
+% file extension when specifying the filename.
+%\end{example}
+%
+% \begin{example}{Multiple Figures}{ex:ps}
+% Suppose \texttt{sample3.csv} looks like:
+%\begin{verbatim}
+%File,Caption
+%circle.ps,A Circle
+%rectangle.ps,A Rectangle
+%triangle.ps,A Triangle
+%\end{verbatim}
+% Assuming that the files \texttt{circle.ps}, \texttt{rectangle.ps}
+% and \texttt{triangle.ps} exist, then the following code will
+% generate a figure for each graphics file\footnote{The
+% \stynamefmt{graphics} or \stynamefmt{graphicx} package will be
+%needed.}:
+%\begin{verbatim}
+%\applyCSVfile{sample3.csv}{
+%\begin{figure}
+%\centerline{\includegraphics{\insertFile}}
+%\caption{\insertCaption}
+%\end{figure}}
+%\end{verbatim}
+% Note that in this example, you can't use \verb'\insertbyname{File}'.
+% (See Note~\ref{itm:psbyname} in Section~\ref{sec:drawbacks}.)
+%\end{example}
+%
+% \begin{example}{Mail Merging using \cmdname{field}}{ex:field}
+% Suppose there is a file called \texttt{details.csv} that has the
+% following contents:
+%\begin{verbatim}
+%Miss A. Person,1 The Road\\The Town\\AB1 2XY,15.00,4th May 2004
+%Mr A. N. Other,2 The Road\\The Town\\AB1 2XY,15.30,11th May 2004
+%\end{verbatim}
+%In this case the data has no header file, so the starred version
+%of \cmdname{applyCSVfile} must be used. Since there is no header
+%file, you must use \cmdname{field} to access the entries:
+%\begin{verbatim}
+%\applyCSVfile*{details.csv}{%
+%\begin{letter}{\field{1}\\\field{2}}
+%\opening{Dear \field{1}}
+%
+%You are invited to an interview at \field{3}\ on the \field{4}.
+%
+%\closing{Yours Sincerely}
+%\end{letter}}
+%\end{verbatim}
+%\end{example}
+%
+% \section{Converting data in a CSV file into a tabular environment}
+% \DescribeMacro{\CSVtotabular}
+% \cmdname{CSVtotabular}\{\meta{filename}\}\{\meta{col-align}\}\{\meta{first}\}\{\meta{middle}\}\{\meta{last}\}\\[10pt]
+% \meta{filename} is the name of the CSV file which must have a header row on line~1,
+% \meta{col-align} is the column alignment argument that gets passed
+% to the \envname{tabular} environment, \meta{first}
+% is the code for the first line, \meta{middle} is the code
+% for the middle lines and \meta{last} is the code for the last line.
+% This is best demonstrated with an example.
+%
+% \begin{example}{Aligning Data from a CSV file}{ex:tab1}
+% Suppose the file \texttt{sample.csv} looks like:
+%\begin{verbatim}
+%Name,Assignment 1,Assignment 2,Total
+%A. Smith,80,70,150
+%B. Jones,60,80,140
+%J. Doe,85,75,160
+%,75,75,150
+%\end{verbatim}
+% then the following code can be used to align the data:
+%\begin{verbatim}
+%\CSVtotabular{sample.csv}{lccc}{%
+%\bfseries Name &
+%\bfseries Assignment 1&
+%\bfseries Assignment 2&
+%\bfseries Total\\}{%
+%\insertName &
+%\insertbyname{Assignment 1} &
+%\insertbyname{Assignment 2} &
+%\insertTotal\\}{%
+% &
+%\insertbyname{Assignment 1} &
+%\insertbyname{Assignment 2} &
+%\insertTotal}
+%\end{verbatim}
+% The result of this code is shown in
+% Table~\ref{tab:ex1}\footnote{Note that \cmdname{CSVtotabular} only
+% puts the data in a \envname{tabular} environment not in a table}.
+%\begin{table}
+%\caption{Example~\ref{ex:tab1}}
+%\label{tab:ex1}
+%\vspace{10pt}
+%\centerline{%
+%\begin{tabular}{lccc}
+%\bfseries Name &
+%\bfseries Assignment 1 &
+%\bfseries Assignment 2 &
+%\bfseries Total\\
+%A. Smith&80&70&150\\
+%B. Jones&60&80&140\\
+%J. Doe&85&75&160\\
+% &75&75&150
+%\end{tabular}}
+%\end{table}
+%\end{example}
+%
+% \vspace{10pt}
+% \DescribeMacro{\ifnextrowlast}
+% \cmdname{ifnextrowlast}\{\meta{last-code}\}\{\meta{not-last-code}\}\\[10pt]
+% The command \cmdname{ifnextrowlast} can be used to vary what happens
+% on the last but one row. The following example illustrates
+% this by placing \cmdname{hline}\cmdname{hline} after the penultimate row.
+%
+% \begin{example}{Adding Lines}{ex:tab2}
+%\begin{verbatim}
+%\CSVtotabular{sample.csv}{|l|ccc|}{%
+%\hline\bfseries Name &
+%\bfseries Assignment 1&
+%\bfseries Assignment 2&
+%\bfseries Total\\\hline\hline}{%
+%\insertName &
+%\insertbyname{Assignment 1} &
+%\insertbyname{Assignment 2} &
+%\insertTotal
+%\ifnextrowlast{\\\hline\hline}{\\}}{%
+% &
+%\insertbyname{Assignment 1} &
+%\insertbyname{Assignment 2} &
+%\insertTotal\\\hline}
+%\end{verbatim}
+%This result of this code is shown in Table~\ref{tab:ex2}.\begin{table}
+%\caption{Example~\ref{ex:tab2}}
+%\label{tab:ex2}
+%\vspace{10pt}
+%\begin{center}
+%\begin{tabular}{|l|ccc|}
+%\hline\bfseries Name &
+%\bfseries Assignment 1 &
+%\bfseries Assignment 2 &
+%\bfseries Total\\\hline\hline
+%A. Smith&80&70&150\\
+%B. Jones&60&80&140\\
+%J. Doe&85&75&160\\\hline\hline
+% &75&75&150\\\hline
+%\end{tabular}
+%\end{center}
+%\end{table}
+%\end{example}
+%
+% \begin{example}{Added Complexity}{ex:tab3}
+% In this example, \cmdname{multicolumn} is used to override
+% the column specifier for the first column in the
+% last row.
+%\begin{verbatim}
+%\CSVtotabular{sample2.csv}{|l|ccc|}{%
+%\hline\bfseries Name &
+%\bfseries Assignment 1 &
+%\bfseries Assignment 2 &
+%\bfseries Total\\\hline\hline
+%}{%
+%\insertName &
+%\insertbyname{Assignment 1} &
+%\insertbyname{Assignment 2} &
+%\insertTotal
+%\ifnextrowlast{\\\hline\multicolumn{1}{l|}{}}{\\}
+%}{%
+% &
+%\insertbyname{Assignment 1} &
+%\insertbyname{Assignment 2} &
+%\insertTotal\\\cline{2-4}
+%}
+%\end{verbatim}
+% Notice that instead of placing \verb'\multicolumn{1}{l|}{}'
+% at the start of the final argument, it is instead
+% placed in the first argument to \cmdname{ifnextrowlast}\footnote{See
+% Note~\ref{itm:noalign} in Section~\ref{sec:drawbacks}}.
+%The result of this code is shown in Table~\ref{tab:ex3}.\begin{table}
+%\caption{Example~\ref{ex:tab3}}
+%\label{tab:ex3}
+%\vspace{10pt}
+%\begin{center}
+%\begin{tabular}{|l|ccc|}
+%\hline\bfseries Name &
+%\bfseries Assignment 1 &
+%\bfseries Assignment 2 &
+%\bfseries Total\\\hline\hline
+%A. Smith&80&70&150\\
+%B. Jones&60&80&140\\
+%J. Doe&85&75&160\\\hline
+% \multicolumn{1}{l|}{}&75&75&150\\\cline{2-4}
+%\end{tabular}
+%\end{center}
+%\end{table}
+%\end{example}
+%
+% \section{Converting CSV file into longtable environment}
+%\DescribeMacro{\CSVtolongtable}
+%The command \cmdname{CSVtolongtable} works in the same way as \cmdname{CSVtotabular} but
+% creates a \envname{longtable} environment instead of a \envname{tabular} environment.
+%
+%\begin{example}{Using a longtable environment}{ex:long}
+%Suppose the CSV file in the previous example, contains, say, 100 entries.
+%This will no longer fit onto one page, so it would be better to use
+%\envname{CSVtolongtable} instead. For example:
+%\begin{verbatim}
+%\CSVtolongtable{sample.csv}{|l|ccc|}{%
+%\caption{Student Marks}\label{tab:students}\\
+%\hline
+%\bfseries Name &
+%\bfseries Assignment 1 &
+%\bfseries Assignment 2 &
+%\bfseries Total\\\hline
+%\endfirsthead
+%\caption[]{Student Marks}\\
+%\hline
+%\bfseries Name &
+%\bfseries Assignment 1 &
+%\bfseries Assignment 2 &
+%\bfseries Total\\\hline
+%\endhead
+%\hline
+%\multicolumn{3}{r}{\em Continued on next page}
+%\endfoot
+%\hline
+%\endlastfoot}{%
+%\insertName &
+%\insertbyname{Assignment 1} &
+%\insertbyname{Assignment 2} &
+%\insertTotal
+%\ifnextrowlast{\\\hline\hline}{\\}}{%
+% & \insertbyname{Assignment 1} &
+% \insertbyname{Assignment 2} &
+%\insertTotal\\}
+%\end{verbatim}
+%\end{example}
+%
+% \section{Associated Counters}
+%
+% Within the \cmdname{CSVtotabular}, \cmdname{CSVtolongtable} and
+%\cmdname{applyCSVfile} commands, there are two
+% counters, \DescribeMacro{csvlinenum}\DescribeMacro{csvrownumber}%
+% \texttt{csvlinenum} and \texttt{csvrownumber}.
+% The former, \texttt{csvlinenum}, is the current line number in the CSV
+% file, whereas the latter, \texttt{csvrownumber}, is the current
+% data row. Of the two counters, \texttt{csvrownumber} is likely to be
+% the most useful.
+%
+% \begin{example}{Stripy Table}{ex:stripy}
+%David~Carlisle's \stynamefmt{colortbl} package defines the command
+%\cmdname{rowcolor} which enables you to specify the row colour.
+%Suppose you want a stripy table\footnote{This is designed as an
+%example of how to use the package, not incouragement to produce
+%garish tables!},
+% this can be achieved as follows:
+%\begin{verbatim}
+%\CSVtotabular{sample2.csv}{lccc}{%
+%\rowcolor{green}\bfseries Name &
+%\bfseries Assignment 1 &
+%\bfseries Assignment 2 &
+%\bfseries Total\\\rowcolor{blue}
+%}{%
+%\insertName &
+%\insertbyname{Assignment 1} &
+%\insertbyname{Assignment 2} &
+%\insertTotal
+%\ifthenelse{\isodd{\value{csvrownumber}}}{%
+%\\\rowcolor{green}}{\\\rowcolor{blue}}
+%}{%
+% &
+%\insertbyname{Assignment 1} &
+%\insertbyname{Assignment 2} &
+%\insertTotal
+%}
+%\end{verbatim}
+%The resulting table is illustrated in Table~\ref{tab:stripy}.
+%\begin{table}[htb]
+%\caption{Stripy Table Example}
+%\label{tab:stripy}
+%\vspace{10pt}
+%\setcounter{csvrownumber}{0}
+%\begin{tabular}{lccc}
+%\rowcolor{green}\bfseries Name &
+%\bfseries Assignment 1 &
+%\bfseries Assignment 2 &
+%\bfseries Total\\\rowcolor{blue}
+%\refstepcounter{csvrownumber}A. Smith &
+%80 &
+%70 &
+%150
+%\ifthenelse{\isodd{\value{csvrownumber}}}{\\\rowcolor{green}}{\\\rowcolor{blue}}
+%\refstepcounter{csvrownumber}B. Jones &
+%60 &
+%80 &
+%140
+%\ifthenelse{\isodd{\value{csvrownumber}}}{\\\rowcolor{green}}{\\\rowcolor{blue}}
+%\refstepcounter{csvrownumber}J. Doe &
+%85 &
+%75 &
+%160
+%\ifthenelse{\isodd{\value{csvrownumber}}}{\\\rowcolor{green}}{\\\rowcolor{blue}}
+%\refstepcounter{csvrownumber} &
+%75 &
+%75 &
+%150
+%\end{tabular}
+%\end{table}
+%\end{example}
+%
+%\begin{example}{More Mail Merging}{ex:mailref}
+%This is an example of mail merging where the letter reference
+%is generated from the value of \texttt{csvrownumber}. The CSV file
+%is as used in Example~\ref{ex:mail} on page~\pageref{ex:mail}.\begin{verbatim}
+%\applyCSVfile{details.csv}{%
+%\begin{letter}{\insertName\\\insertAddress}
+%\opening{Dear \insertName}
+%
+%\textbf{Ref : } interview.\thecsvrownumber
+%
+%You are invited to an interview at \insertTime\ on the \insertDate.
+%
+%\closing{Yours Sincerely}
+%\end{letter}}
+%\end{verbatim}
+%\end{example}
+%
+% \section{Cross-Referencing}
+%
+% Labels can be generated using the standard
+% \cmdname{label} command, but you will need some way
+% to make each label unique. Example~\ref{ex:ref1}
+% does this by using \cmdname{thecsvrownumber},
+% whereas Example~\ref{ex:ref2} uses \cmdname{insert}\meta{identifier}.
+%
+% \begin{example}{Labelling within \cmdname{applyCSVfile}}{ex:ref1}
+% Example~\ref{ex:ps} on page~\pageref{ex:ps} can be modified to label each figure:
+%\begin{verbatim}
+%\applyCSVfile{sample3.csv}{
+%\begin{figure}
+%\centerline{\includegraphics{\insertFile}}
+%\caption{\insertCaption}
+%\label{fig:pic\thecsvrownumber}
+%\end{figure}}
+%\end{verbatim}
+% This example uses
+% \verb'\label{fig:pic\thecsvrownumber}', so the first figure
+%generated by this \cmdname{applyCSVfile} command will have the
+%label \texttt{fig:pic1}, the second \texttt{fig:pic2} etc.
+%\end{example}
+%
+% \begin{example}{Labelling within \cmdname{applyCSVfile}}{ex:ref2}
+% Modifying the previous example, we now have:
+%\begin{verbatim}
+%\applyCSVfile{sample3.csv}{
+%\begin{figure}
+%\centerline{\includegraphics{\insertFile}}
+%\caption{\insertCaption}
+%\label{fig:\insertFile}
+%\end{figure}}
+%\end{verbatim}
+% The labels for each figure are now:
+% \texttt{fig:circle.ps}, \texttt{fig:rectangle.ps}
+% and \texttt{fig:triangle.ps}, respectively.
+%\end{example}
+%
+%\begin{example}{Labelling within \cmdname{CSVtotabular}}{ex:timetogrowth}
+% This example is slightly more complicated.
+% The CSV file, \texttt{data.csv} looks like:
+%\begin{verbatim}
+%Incubation Temperature,Incubation Time,Time to Growth
+%40,120,40
+%40,90,60
+%35,180,20
+%\end{verbatim}
+%The following code generates a table using the data
+% with an additional column that generates the experiment
+% number. (See note~\ref{itm:csvrownumber}.)
+%\begin{verbatim}
+%\begin{table}
+%\caption{Time to Growth Experiments}
+%\label{tab:exp}
+%\vspace{10pt}
+%\centering
+%\CSVtotabular{data.csv}{cccc}{%
+% % Header Row
+%\bfseries Experiment &
+%\bfseries \begin{tabular}{c}Incubation\\Temperature\end{tabular} &
+%\bfseries \begin{tabular}{c}Incubation\\Time\end{tabular} &
+%\bfseries \begin{tabular}{c}Time\\to\\Growth\end{tabular}\\}{%
+% % Middle Rows
+%\label{exp:\insertbyname{Incubation Temperature}:\insertbyname{Incubation Time}}
+%\thecsvrownumber &
+%\insertbyname{Incubation Temperature} &
+%\insertbyname{Incubation Time} &
+%\insertbyname{Time to Growth} \\}{%
+% % Final Row
+%\label{exp:\insertbyname{Incubation Temperature}:\insertbyname{Incubation Time}}
+%\thecsvrownumber &
+%\insertbyname{Incubation Temperature} &
+%\insertbyname{Incubation Time} &
+%\insertbyname{Time to Growth}}
+%\par
+%\end{table}
+%
+%It can be seen from Table~\ref{tab:exp}, that
+%Experiment~\ref{exp:35:180} had the shortest time to growth.
+%\end{verbatim}
+% In this example, each experiment has the corresponding label
+% \texttt{exp:}\meta{Incubation Temperature}\texttt{:}\meta{Incubation Time}
+% so the first experiment has label \texttt{exp:40:120}, the
+% second experiment has the label \texttt{exp:40:90} and the
+% third experiment has the label \texttt{exp:35:180}.
+%
+% Table~\ref{tab:timetogrowth} shows the resulting table for
+% this example.
+% \begin{table}
+%\caption{Time to Growth Experiments}
+%\label{tab:timetogrowth}
+%\vspace{10pt}
+%\centering
+%\begin{tabular}{cccc}
+%\bfseries Experiment &
+%\bfseries \begin{tabular}{c}Incubation\\Temperature\end{tabular} &
+%\bfseries \begin{tabular}{c}Incubation\\Time\end{tabular} &
+%\bfseries \begin{tabular}{c}Time\\to\\Growth\end{tabular}\\
+% 1 & 40 & 120 & 40\\
+% 2 & 40 & 90 & 60\\
+% 3 & 35 & 180 & 20
+%\end{tabular}
+%\par
+% \end{table}
+%\end{example}
+%
+% The following example is more refined in that it
+% takes advantage of the fact that the time to growth data consists
+% of integers only, so the experiment with the maximum growth can be
+% determined by \LaTeX.
+%
+% \begin{example}{Labelling within \cmdname{CSVtotabular}}{ex:tablabel}
+%\begin{verbatim}
+%\newcounter{maxgrowth}
+%\newcounter{incT} % incubation temperature
+%\newcounter{inct} % incubation time
+%
+%\begin{table}
+%\caption{Time to Growth Experiments}
+%\label{tab:exp}
+%\vspace{10pt}
+%\centering
+%\CSVtotabular{data.csv}{cccc}{%
+% % Header row
+%\bfseries Experiment &
+%\bfseries \begin{tabular}{c}Incubation\\Temperature\end{tabular} &
+%\bfseries \begin{tabular}{c}Incubation\\Time\end{tabular} &
+%\bfseries \begin{tabular}{c}Time\\to\\Growth\end{tabular}\\}{%
+% % Middle rows
+%\label{exp:\insertbyname{Incubation Temperature}:\insertbyname{Incubation Time}}
+%\thecsvrownumber &
+%\insertbyname{Incubation Temperature} &
+%\insertbyname{Incubation Time} &
+%\insertbyname{Time to Growth}%
+%\ifthenelse{\value{maxgrowth}<\insertbyname{Time to Growth}}{%
+%\setcounter{maxgrowth}{\insertbyname{Time to Growth}}%
+%\setcounter{incT}{\insertbyname{Incubation Temperature}}%
+%\setcounter{inct}{\insertbyname{Incubation Time}}}{}%
+%\\}{%
+% % Last row
+%\label{exp:\insertbyname{Incubation Temperature}:\insertbyname{Incubation Time}}
+%\thecsvrownumber &
+%\insertbyname{Incubation Temperature} &
+%\insertbyname{Incubation Time} &
+%\insertbyname{Time to Growth}%
+%\ifthenelse{\value{maxgrowth}<\insertbyname{Time to Growth}}{%
+%\setcounter{maxgrowth}{\insertbyname{Time to Growth}}%
+%\setcounter{incT}{\insertbyname{Incubation Temperature}}%
+%\setcounter{inct}{\insertbyname{Incubation Time}}}{}%
+%}
+%\par
+%\end{table}
+%
+%As can be seen from Table~\ref{tab:exp},
+%Experiment~\ref{exp:\theincT:\theinct}
+%had the maximum time to growth, with
+%incubation time \theinct,
+%incubation temperature \theincT\ and
+%time to growth, \themaxgrowth.
+%\end{verbatim}
+% \end{example}
+%
+% \section{Saving Entries}
+% Entries can be saved using the command:\\[10pt]
+% \DescribeMacro{\csvSaveEntry}
+%\changes{1.22}{2007 January 3}{added final optional argument to 'csvSaveEntry}
+% \cmdname{csvSaveEntry}[\meta{counter}]\{\meta{identifier}\}[\meta{empty text}]\\[10pt]
+% where \meta{counter} is a \LaTeX\ counter, by default
+%\texttt{csvrownumber},
+% and \meta{identifier} is the header entry. The entry
+% can then be used with the command:\\[10pt]
+% \DescribeMacro{\csvGetEntry}
+% \cmdname{csvGetEntry}\{\meta{counter}\}\{\meta{identifier}\}\\[10pt]
+%The final optional argument \meta{empty text} to
+%\cmdname{csvSaveEntry} is the text to use if the entry is blank.
+%For example, \verb|\csvSaveEntry{Time}[MISSING DATA]| will
+%print MISSING DATA if the Time field is blank.
+%
+%The following example illustrates the use of these commands.
+%
+% \begin{example}{Saving Entries}{ex:index}
+% This example illustrates how you can use one CSV
+% file to access data in other CSV files.
+% This example has several CSV files:
+%\\[10pt]
+% File \texttt{index.csv}:
+%\begin{verbatim}
+%File,Temperature,NaCl,pH
+%exp25a.csv,25,4.7,0.5
+%exp25b.csv,25,4.8,1.5
+%exp30a.csv,30,5.12,4.5
+%\end{verbatim}
+% File \texttt{exp25a.csv}:
+%\begin{verbatim}
+%Time,Logcount
+%0,3.75
+%23,3.9
+%45,4.0
+%\end{verbatim}
+% File \texttt{exp25b.csv}:
+%\begin{verbatim}
+%Time,Logcount
+%0,3.6
+%60,3.8
+%120,4.0
+%\end{verbatim}
+% File \texttt{exp30a.csv}:
+%\begin{verbatim}
+%Time,Logcount
+%0,3.73
+%23,3.67
+%60,4.9
+%\end{verbatim}
+%
+% It is not possible to nest \cmdname{CSVtotabular},
+%\cmdname{CSVtolongtable} and \cmdname{applyCSVfile},
+% so if you need to go through \texttt{index.csv} and use each file
+% named in there, you can first go through \texttt{index.csv}
+%storing the information using \cmdname{csvSaveEntry} as follows:
+%\begin{verbatim}
+%\newcounter{maxexperiments}
+%\applyCSVfile{sample5.csv}{%
+%\stepcounter{maxexperiments}
+%\csvSaveEntry{File}
+%\csvSaveEntry{Temperature}
+%\csvSaveEntry{NaCl}
+%\csvSaveEntry{pH}
+%}
+%\end{verbatim}
+% The counter \texttt{maxexperiments} simply counts the number of
+% entries in \texttt{index.csv}.
+% The entries can now be used to generate a table for each
+% file listed in \texttt{index.csv} (the \cmdname{whiledo} command
+%is defined in the \stynamefmt{ifthen} package):
+%\begin{verbatim}
+%\newcounter{experiment}
+%\whiledo{\value{experiment}<\value{maxexperiments}}{%
+%\stepcounter{experiment}
+%\begin{table}
+%\caption{Temperature = \protect\csvGetEntry{experiment}{Temperature},
+%NaCl = \protect\csvGetEntry{experiment}{NaCl},
+%pH = \protect\csvGetEntry{experiment}{pH}}
+%\vspace{10pt}
+%\centering
+%\CSVtotabular{\csvGetEntry{experiment}{File}}{ll}{%
+%Time & Log Count\\}{%
+%\insertTime & \insertLogcount\\}{%
+%\insertTime & \insertLogcount}
+%
+%\end{table}
+%}
+%\end{verbatim}
+% Note that \cmdname{csvGetEntry} needs to be \cmdname{protect}ed
+%within the \cmdname{caption} command.
+%
+% This example can be modified if, say, you only want the
+% tables where the temperature is 25:
+%\begin{verbatim}
+%\setcounter{experiment}{0}
+%\whiledo{\value{experiment}<\value{maxexperiments}}{%
+%\stepcounter{experiment}
+%\ifthenelse{\equal{\csvGetEntry{experiment}{Temperature}}{25}}{%
+%\begin{table}
+%\caption{Temperature = \protect\csvGetEntry{experiment}{Temperature},
+%NaCl = \protect\csvGetEntry{experiment}{NaCl},
+%pH = \protect\csvGetEntry{experiment}{pH}}
+%\vspace{10pt}
+%\centering
+%\CSVtotabular{\csvGetEntry{experiment}{File}}{ll}{%
+%Time & Log Count\\}{%
+%\insertTime & \insertLogcount\\}{%
+%\insertTime & \insertLogcount}\par
+%\end{table}}{}
+%}
+%\end{verbatim}
+% \end{example}
+%
+%\section{Pie Charts (csvpie.sty)}
+%
+%\changes{1.2}{2006 Sept 1}{csvpie.sty added}
+%If you want to create a pie chart from data stored in a CSV file,
+%you can use the \stynamefmt{csvpie} package, distributed with the
+%\stynamefmt{csvtools} package. A basic pie chart can be created
+%using the command:\\[10pt]
+%\DescribeMacro{\csvpiechart}\noindent
+%\cmdname{csvpiechart}[\meta{options}]\{\meta{variable}\}\{\meta{filename}\}\\[10pt]
+%where \meta{filename} is the name of the CSV file containing the
+%data, and \meta{variable} is the command indicating the entry that
+%contains the value for the given segment.
+%The starred version of \cmdname{csvpiechart} should be used if
+%the CSV file has no header row.
+%
+%The pie charts have ``inner'' labels on the segment, and
+%``outer'' labels outside the chart. The labels are given by the
+%commands \DescribeMacro{\csvpieinnerlabel}\cmdname{csvpieinnerlabel}
+%and \DescribeMacro{\csvpieouterlabel}\cmdname{csvpieouterlabel}.
+%The default definitions are:
+%\begin{verbatim}
+%\newcommand{\csvpieouterlabel}{\field{1}}
+%\newcommand{\csvpieinnerlabel}{\field{2}\%}
+%\end{verbatim}
+%This assumes that the second column contains the data, and the
+%first column contains a description, but can be redefined
+%as necessary.
+%
+%The pie chart display can be modified using the optional
+%argument to \cmdname{csvpiechart}.
+%This argument should be a \meta{key}=\meta{value} list.
+%The available keys are as follows:
+%\begin{description}
+%\item[start] This should be an integer specifying the starting angle
+%of the first segment. This is 0 by default.
+%
+%\item[total] This should be an integer specifying the sum of all
+%the segment values. This is 100 by default.
+%
+%\item[radius] This should be a length specifying the radius of the
+%pie chart. (Default: 2cm)
+%
+%\item[inner] This should be a fraction specifying the relative distance
+%along the radius to start the inner label. (Default: 0.25)
+%
+%\item[outer] This should be a fraction specifying the relative distance
+%along the radius to start the outer label. (Default: 1.25)
+%
+%\item[cutaway] This should be a comma-separated list of numbers
+%corresponding to the segments that should be cut away from the
+%rest of the pie chart. Since the value may contain commas, the value
+%should always be enclosed in braces. Ranges may also be used.
+%If a range is used, all the segments in the given range are
+%kept together, so, for example, \verb"cutaway={1,2}" will separate
+%the first two segments from the pie chart, and the two segments
+%will also be separated from each other, whereas \verb"cutaway={1-2}"
+%will separate the first two segments from the pie chart, but will
+%keep the two segments together.
+%
+%\item[offset] This should be a fraction specifying the
+%relative distance along the radius to shift the cut away
+%segments. (Default: 0.1)
+%
+%\item[firstrow] This should be the number of the first row
+%containing the actual data. This is equivalent to the optional
+%argument of \cmdname{applyCSVfile} or \cmdname{applyCSVfile*}.
+%\end{description}
+%
+%Note that \TeX\ performs integer arithmetic. Although the CSV
+%file may contain decimal numbers, rounding will occur when
+%constructing the pie charts.
+%
+%The colours for the pie chart segments can be set using the
+%command\DescribeMacro{\csvpiesegmentcol}:\\[10pt]
+%\cmdname{csvpiesegmentcol}\{\meta{n}\}\{\meta{colour}\}\\[10pt]
+%where \meta{n} is the segment number, and \meta{colour} is a
+%defined colour name. For example, if you want the first segment
+%in the pie chart to be yellow, do:
+%\begin{verbatim}
+%\csvpiesegmentcol{1}{yellow}
+%\end{verbatim}
+%There are 8 predefined segment colours, if your pie chart has
+%more than 8 segments, you will need to specify the remainder.
+%
+%You can obtain the colour name for a given segment
+%using\DescribeMacro{\csvpiesegcolname}:\\[10pt]
+%\cmdname{csvpiesegcolname}\{\meta{n}\}\\[10pt]
+%where \meta{n} is the segment number. The \cmdname{csvpiechart}
+%command uses \cmdname{applyCSVfile}, so the \texttt{csvrownumber}
+%counter can be used. This means that you can change the text
+%colour of the outer label to match the segment. For example:
+%\begin{verbatim}
+%\renewcommand{\csvpieouterlabel}{%
+%\color{\csvpiesegcolname{\value{csvrownumber}}}\field{2}}
+%\end{verbatim}
+%Note that \cmdname{value} must be used since \meta{n} has to be
+%a number.
+%
+%If you want grey pie charts, either use the \texttt{monochrome}
+%package option:
+%\begin{verbatim}
+%\usepackage[monochrome]{csvpie}
+%\end{verbatim}
+%or use the command \DescribeMacro{\colorpiechartfalse}\cmdname{colorpiechartfalse} prior to using \cmdname{csvpiechart}.
+%To switch back to colour pie charts, use
+%\DescribeMacro{\colorpiecharttrue}\cmdname{colorpiecharttrue}.
+%
+%\begin{example}{A Pie Chart}{ex:piechart}
+%Given a CSV file
+%(called \texttt{fruit.csv}) containing:
+%\begin{verbatim}
+%Name,Value
+%Apples,20
+%Pears,15
+%"lemons,limes",30.5
+%Peaches,24.5
+%Cherries,10
+%\end{verbatim}
+%Then the value for each segment is given by the second column, so
+%\meta{variable} should be \verb"\field{2}" or \verb|\insertValue|.
+%The pie charts shown in Figure~\ref{fig:piechart} can be created
+%using:
+%\begin{verbatim}
+% % Change the way the labels are displayed
+%\renewcommand{\csvpieinnerlabel}{\sffamily\insertValue\%}
+%\renewcommand{\csvpieoutlabel}{%
+%\color{\csvpiesegcolname{\value{csvrownumber}}}\sffamily\insertName}
+%
+%\begin{figure}
+%\begin{center}
+%\begin{tabular}{cc}
+%\csvpiechart[start=45,cutaway={1,2}]{\insertValue}{fruit.csv} &
+%\csvpiechart[start=45,cutaway={1-2}]{\insertValue}{fruit.csv} \\
+%(a) & (b)
+%\end{tabular}
+%\end{center}
+%\caption{Pie Chart Example (a) cutaway=\{1,2\} (b) cutaway=\{1-2\}}
+%\end{figure}
+%\end{verbatim}
+%The inner and outer labels have been
+%redefined to use a sans-serif font, and the outer label is in
+%the same colour as its corresponding segment.
+%Both pie charts have a starting angle of $45^\circ$, and theyhave the first two segments cutaway, but in (a)
+%the first two segments are separated from each other, whereas in
+%(b), the first two segments are joined, although separated
+%from the rest of the pie chart.
+%
+%If the CSV file has no header row, the starred version should be
+%used, e.g.:
+%\begin{verbatim}
+%\csvpiechart*[cutaway={1-2}]{\field{2}}{fruit.csv}
+%\end{verbatim}
+%
+%\begin{figure}[htbp]
+%\begin{center}
+%\begin{tabular}{cc}
+%\csvpiesetkeys{start=45,cutaway={1,2}}%
+%\edef\csvstartang{\thecsvstartangle}\relax
+%\setcounter{csvrownumber}{0}\relax
+%\stepcounter{csvrownumber}\relax
+%\csvsetsegmentparams{\thecsvrownumber}{20}\relax
+%\stepcounter{csvrownumber}\relax
+%\csvsetsegmentparams{\thecsvrownumber}{15}\relax
+%\stepcounter{csvrownumber}\relax
+%\csvsetsegmentparams{\thecsvrownumber}{30.5}\relax
+%\stepcounter{csvrownumber}\relax
+%\csvsetsegmentparams{\thecsvrownumber}{24.5}\relax
+%\stepcounter{csvrownumber}\relax
+%\csvsetsegmentparams{\thecsvrownumber}{10}\relax
+%\setcounter{csvstartangle}{\csvstartang}\relax
+%\ifthenelse{\equal{\csvpiecutaways}{}}{}{\csvcomputeoffsets}\relax
+%\begin{tikzpicture}
+%\setcounter{csvrownumber}{0}\relax
+%\stepcounter{csvrownumber}\relax
+%\renewcommand*{\csvpieinnerlabel}{\sffamily20\%}
+%\renewcommand*{\csvpieouterlabel}{\color{\csvpiesegcolname{\value{csvrownumber}}}\sffamily
+%Apples}
+%\csvpiesegment{20}
+%\stepcounter{csvrownumber}\relax
+%\renewcommand*{\csvpieinnerlabel}{\sffamily15\%}
+%\renewcommand*{\csvpieouterlabel}{\color{\csvpiesegcolname{\value{csvrownumber}}}\sffamily
+%Pears}
+%\csvpiesegment{15}
+%\stepcounter{csvrownumber}\relax
+%\renewcommand*{\csvpieinnerlabel}{\sffamily30.5\%}
+%\renewcommand*{\csvpieouterlabel}{\color{\csvpiesegcolname{\value{csvrownumber}}}\sffamily
+%lemons,limes}
+%\csvpiesegment{30.5}
+%\stepcounter{csvrownumber}\relax
+%\renewcommand*{\csvpieinnerlabel}{\sffamily24.5\%}
+%\renewcommand*{\csvpieouterlabel}{\color{\csvpiesegcolname{\value{csvrownumber}}}\sffamily
+%Peaches}
+%\csvpiesegment{24.5}
+%\stepcounter{csvrownumber}\relax
+%\renewcommand*{\csvpieinnerlabel}{\sffamily10\%}
+%\renewcommand*{\csvpieouterlabel}{\color{\csvpiesegcolname{\value{csvrownumber}}}\sffamily
+%Cherries}
+%\csvpiesegment{10}
+%\end{tikzpicture}
+% &
+%\csvpiesetkeys{start=45,cutaway={1-2}}%
+%\edef\csvstartang{\thecsvstartangle}\relax
+%\setcounter{csvrownumber}{0}\relax
+%\stepcounter{csvrownumber}\relax
+%\csvsetsegmentparams{\thecsvrownumber}{20}\relax
+%\stepcounter{csvrownumber}\relax
+%\csvsetsegmentparams{\thecsvrownumber}{15}\relax
+%\stepcounter{csvrownumber}\relax
+%\csvsetsegmentparams{\thecsvrownumber}{30.5}\relax
+%\stepcounter{csvrownumber}\relax
+%\csvsetsegmentparams{\thecsvrownumber}{24.5}\relax
+%\stepcounter{csvrownumber}\relax
+%\csvsetsegmentparams{\thecsvrownumber}{10}\relax
+%\setcounter{csvstartangle}{\csvstartang}\relax
+%\ifthenelse{\equal{\csvpiecutaways}{}}{}{\csvcomputeoffsets}\relax
+%\begin{tikzpicture}
+%\setcounter{csvrownumber}{0}\relax
+%\stepcounter{csvrownumber}\relax
+%\renewcommand*{\csvpieinnerlabel}{\sffamily20\%}
+%\renewcommand*{\csvpieouterlabel}{\color{\csvpiesegcolname{\value{csvrownumber}}}\sffamily
+%Apples}
+%\csvpiesegment{20}
+%\stepcounter{csvrownumber}\relax
+%\renewcommand*{\csvpieinnerlabel}{\sffamily15\%}
+%\renewcommand*{\csvpieouterlabel}{\color{\csvpiesegcolname{\value{csvrownumber}}}\sffamily
+%Pears}
+%\csvpiesegment{15}
+%\stepcounter{csvrownumber}\relax
+%\renewcommand*{\csvpieinnerlabel}{\sffamily30.5\%}
+%\renewcommand*{\csvpieouterlabel}{\color{\csvpiesegcolname{\value{csvrownumber}}}\sffamily
+%lemons,limes}
+%\csvpiesegment{30.5}
+%\stepcounter{csvrownumber}\relax
+%\renewcommand*{\csvpieinnerlabel}{\sffamily24.5\%}
+%\renewcommand*{\csvpieouterlabel}{\color{\csvpiesegcolname{\value{csvrownumber}}}\sffamily
+%Peaches}
+%\csvpiesegment{24.5}
+%\stepcounter{csvrownumber}\relax
+%\renewcommand*{\csvpieinnerlabel}{\sffamily10\%}
+%\renewcommand*{\csvpieouterlabel}{\color{\csvpiesegcolname{\value{csvrownumber}}}\sffamily
+%Cherries}
+%\csvpiesegment{10}
+%\end{tikzpicture}
+% \\
+%(a) & (b)
+%\end{tabular}
+%\end{center}
+%\caption{Pie Chart Example (a) cutaway=\{1,2\}
+%(b) cutaway=\{1-2\}}
+%\label{fig:piechart}
+%\end{figure}
+%\end{example}
+%
+%\section{Sorting Data (csvsort.sty)}
+%
+%The \stynamefmt{csvsort} package (which forms part of the
+%\stynamefmt{csvtools} bundle) provides analogous commands to
+%those provided by \stynamefmt{csvtools}, but the data is first
+%sorted. The \stynamefmt{csvsort} package needs to be loaded
+%separately in order to access the necessary commands. The package
+%options should be a list of key=value pairs, where the available
+%keys are:
+%\begin{description}
+%\item[verbose] Verbose mode. This is a boolean key. If set, the
+%comparisons performed by the insertion sort code are printed to
+%the screen. (Default: \texttt{verbose=true}.)
+%
+%\item[sort] This key specifies how to sort the data. It may take
+%one of the following values:
+%\begin{itemize}
+%\item \texttt{alphabetical ascending} (or just \texttt{alphabetical})
+%\item \texttt{alphabetical descending}
+%\item \texttt{numerical ascending} (or just \texttt{numerical})
+%\item \texttt{numerical descending}
+%\end{itemize}
+%(Default: \texttt{sort=alphabetical ascending})
+%
+%\item[variable] The sort variable. (Default: \verb|sort=\field{1}|)
+%
+%\item[sfirstdataline] The line on which the data starts in a data
+%file without a header row. (Default: \texttt{sfirstdataline=1}.)
+%
+%\item[firstdataline] The line on which the data starts in a data
+%file with a header row. (Default: \texttt{firstdataline=2}.)
+%\end{description}
+%
+%Note that the \stynamefmt{csvsort} package requires
+%the \stynamefmt{xfor} package and \'Eamonn McManus'
+%\texttt{compare.tex} file. The \stynamefmt{csvsort} package uses
+%an insertion sort method to sort the data, so large amounts of data
+%may slow processing time. The following commands are provided
+%by \stynamefmt{csvsort}:
+%
+%\DescribeMacro{\sortapplyCSVfile}\noindent
+% \cmdname{sortapplyCSVfile}\oarg{options}\marg{filename}\marg{text}\par
+% \cmdname{sortapplyCSVfile*}\oarg{options}\marg{filename}\marg{text}\\[10pt]
+%These commands are analogous to \cmdname{applyCSVfile} and
+%\cmdname{applyCSVfile*}, except that the data is first sorted.
+%The optional argument is a key=value list. The keys are the same
+%as those used in the package options, described above. These options
+%only apply to the given instance of the command, whereas the
+%package options apply to all \stynamefmt{csvsort} commands, unless
+%overridden in \meta{options}. Example, suppose you have a file
+%called \texttt{unsorted.csv} which looks like:
+%\begin{verbatim}
+%First Name,Surname,Age
+%Zephram,Lang,60
+%Fred,Lang,10
+%Barney,Langley,25
+%Jane,Brown,5
+%Adam,Smith,24
+%Bert,Jones,18
+%\end{verbatim}
+%Then
+%\begin{verbatim}
+%\sortapplyCSVfile[sort=alphabetical,variable=\insertSurname]{unsorted.csv}{%
+%\insertSurname, \insertbyname{First Name}. Age: \insertAge\par}
+%\end{verbatim}
+%will produce the following output:\par
+%Brown, Jane. Age:5\par
+%Jones, Bart. Age:18\par
+%Lang, Zephram. Age:60\par
+%Lang, Fred. Age:10\par
+%Langley, Barney. Age:25\par
+%Smith, Adam. Age: 24\par
+%Note that the data has only been sorted according to the surname.
+%To sort first by surname, then by first name, you can
+%do something like:
+%\begin{verbatim}
+%\sortapplyCSVfile[sort=alphabetical,
+%variable={\insertSurname,\insertbyname{First Name}}]{unsorted.csv}{%
+%\insertSurname, \insertbyname{First Name}. Age: \insertAge\par}
+%\end{verbatim}
+%As with \cmdname{applyCSVfile}, you must use \cmdname{field} if
+%you use the starred version:
+%\begin{verbatim}
+%\sortapplyCSVfile*[sort=alphabetical,
+%variable={\field{2},\field{1}}]{unsorted.csv}{%
+%\field{2}, \field{1}. Age: \field{3}\par}
+%\end{verbatim}
+%
+%The commands:\\[10pt]\DescribeMacro{\sortCSVtotabular}
+%\cmdname{sortCSVtotabular}\oarg{options}\marg{filename}\marg{col-spec}\marg{first row}\marg{all but last row}\marg{last row}\\
+%\DescribeMacro{\sortCSVtolongtable}
+%\cmdname{sortCSVtolongtable}\oarg{options}\marg{filename}\marg{col-spec}\marg{first row}\marg{all but last row}\marg{last row}\\
+%Are analogous to \cmdname{CSVtotabular} and \cmdname{CSVtolongtable},
+%where, again, \meta{options} is a list of key=value pairs, the same
+%as \cmdname{sortapplyCSVfile}. Using the same example data as above,
+%the following command will sort the data according to age (in
+%numerical order) and place in a tabular environment:
+%\begin{verbatim}
+%\sortCSVtotabular[sort=numerical,variable=\insertAge]{unsorted.csv}{llr}{%
+%\bfseries Surname & \bfseries First Name & \bfseries Age\\}{%
+%\insertSurname & \insertbyname{First Name} & \insertAge\\}{%
+%\insertSurname & \insertbyname{First Name} & \insertAge}
+%\end{verbatim}
+%
+%Note that the counter \texttt{csvlinenum} has no meaning in the
+%commands provided by the \stynamefmt{csvsort} package. The
+%\texttt{csvrownumber} counter corresponds to the sorted data row.
+%
+%\section{The csvtools.pl Perl Script}
+%
+% Suppose you have several large CSV files, and you have included
+%the information into your document using \cmdname{applyCSVfile},
+%\cmdname{CSVtolongtable}, \cmdname{CSVtotabular} or
+%\cmdname{csvpiechart}, which has
+%made life so much easier for you, but you are now required by a
+%journal to submit your source code in a single \texttt{.tex} file.
+% They don't want all your CSV files, so what do you do? If you
+%have Perl installed on your system you can use the
+%\texttt{csvtools.pl} Perl script. This has the following syntax:\\[5pt]
+% \texttt{csvtools.pl} \meta{in-file} \meta{out-file}\\[5pt]
+% where \meta{in-file} is the name of your file that contains the
+%\cmdname{applyCSVfile}, \cmdname{CSVtotabular} etc
+% commands, and \meta{out-file} is a new file which will be created by \texttt{csvtools.pl}. This new
+% file will be the same as \meta{in-file} except that all
+%occurances of \cmdname{applyCSVfile}, \cmdname{CSVtolongtable},
+%\cmdname{CSVtotabular} and \cmdname{csvpiechart} will be replaced
+%by the relevant data extracted from the named CSV files.
+%
+%\begin{example}{csvtools.pl --- Aligning Data}{ex:perl}
+% Suppose the file \texttt{mydoc.tex} contains the code given in
+%Example~\ref{ex:tab1}, with the associated CSV file
+%\texttt{sample.csv} also given in that example. Then if you do:
+%\begin{verbatim}
+%csvtools.pl mydoc.tex mydocnew.tex
+%\end{verbatim}
+%the file \texttt{mydocnew.tex} will be created which will be
+%identical to \texttt{mydoc.tex} except the lines
+% containing the code \verb'\CSVtotabular{sample.csv}{lccc}{'\ldots\verb/}{/\dots\verb!}{!\ldots\verb+}+ will be replaced
+%with the lines:
+%\begin{verbatim}
+% % \CSVtotabular{sample.csv}... converted using csvtools.pl
+% %>> START INSERT
+% \begin{tabular}{lccc}
+% \bfseries Name &
+% \bfseries Assignment 1 &
+% \bfseries Assignment 2 &
+% \bfseries Total\\
+% A. Smith&80&70&150\\
+% B. Jones&60&80&140\\
+% J. Doe&85&75&160\\
+% &75&75&150
+% \end{tabular}%<< END INSERT
+%\end{verbatim}
+%\end{example}
+%
+%Similarly, \texttt{csvtools.pl} will substitute all occurrances
+%of \cmdname{CSVtolongtable}, \cmdname{applyCSVfile}
+%and \cmdname{csvpiechart}.
+%
+%\subsection{Notes}
+%\begin{enumerate}
+%\item If perl is located in a directory other than \texttt{/usr/bin/}
+%you will need to edit the first line of \texttt{csvtools.pl} as
+%appropriate. You can find the location using the command:
+%\begin{verbatim}
+%which perl
+%\end{verbatim}
+%
+%\item If you can't directly execute a Perl script,
+% you can do:\\[5pt]
+% \texttt{perl csvtools.pl} \meta{in-file} \meta{out-file}
+%
+%\item You must first \LaTeX\ your document before using
+%\texttt{csvtools.pl} as it checks the log file for any counters
+%that have been defined.
+%
+%\item \texttt{csvtools.pl} only knows about a very limited set
+%of \LaTeX\ commands. It should be able to understand:
+%\begin{verbatim}
+%\CSVtotabular{\csvGetEntry{experiment}{File}}{ll}{...
+%\end{verbatim}
+%(see Example~\ref{ex:index}), but it won't be able to understand,
+%say,
+%\begin{verbatim}
+%\newcommand{\filename}{\csvGetEntry{experiment}{File}}
+%\CSVtotabular{\filename}{ll}{...
+%\end{verbatim}
+%It can pick up on \cmdname{addtocounter}, \cmdname{stepcounter},
+%\cmdname{refstepcounter} and \cmdname{setcounter} but only if
+%they are used explicitly in the named \texttt{.tex} file. (It
+%ignores any files that have been included using
+%\cmdname{input}, \cmdname{include} etc.)
+%
+%\item This Perl script has only been tested under Linux, but it
+%ought to work under other systems.
+%\end{enumerate}
+%
+% \section{Bugs/Drawbacks/``Features''}\label{sec:drawbacks}
+% \begin{enumerate}
+% \item\label{itm:insert}
+% The package doesn't check to see whether
+%\cmdname{insert}\meta{identifier} exists, otherwise you would not
+%be able to use multiple CSV files with the same headers, as in
+%Example~\ref{ex:index}. Therefore it is recommended that
+% you check to make sure that the command does not already exist.
+% For example, the \TeX\ commands \cmdname{insert} and
+%\cmdname{insertpenalties} already exist, so a blank header or a
+%header named \texttt{penalties} would cause problems. (These two
+%will now cause an error as from version 1.1, but it's something
+%bear in mind.)
+%
+% \item Note also that \cmdname{insertbyname} doesn't check
+% if you've given a valid label, so if no text appears,
+% check you've spelt it correctly, checking punctuation, spaces and case.
+%
+% \item\label{itm:psbyname}
+% Note that in Example~\ref{ex:ps}, replacing line~3 with:
+%\begin{verbatim}
+%\centerline{\includegraphics{\insertbyname{File}}}
+%\end{verbatim}
+% will cause an error, as \verb/\insertbyname{File}/ doesn't get
+% fully expanded by the time it gets passed to
+% \cmdname{includegraphics}, and will prevent
+%\cmdname{includegraphics} from
+% finding the file. It is possible to get around this using
+% \TeX's \cmdname{edef} command:
+%\begin{verbatim}
+%\edef\psfilename{\insertbyname{File}}
+%\centerline{\includegraphics{\psfilename}}
+%\end{verbatim}
+%
+% \item\label{itm:noalign} You can't have commands like
+%\cmdname{hline}, \cmdname{cline} and \cmdname{multicolumn} in the
+%first column of the \meta{middle} or \meta{last} code of
+%\cmdname{CSVtotabular} or \cmdname{CSVtolongtable}. If you do,
+%it will generate a \verb/misplaced \noalign/ error, instead you
+%need to put it at the end of the \meta{first} or \meta{middle}
+%code. (See Example~\ref{ex:tab3}.)
+%
+% \item You can't have nested \cmdname{applyCSVfile},
+%\cmdname{CSVtolongtable} and \cmdname{CSVtotabular}
+% commands. Nor can you have \cmdname{csvpiechart} within
+%one of these commands (See Example~\ref{ex:index})
+%
+% \item If the CSV file has a header row, it must be on the first
+%line.
+%
+% \item It is possible for \TeX\ to run out of memory if you use
+% \cmdname{csvSaveEntry} on a large file.
+%
+% \item\label{itm:csvrownumber} In version 1.0, there was an
+%inconsistency with \texttt{csvrownumber} within
+%\cmdname{applyCSVfile} and \cmdname{CSVtotabular}. In the
+%former it excluded the header row, whereas the latter
+%included it. This has been changed in version 1.1 so that within
+%\cmdname{applyCSVfile}, \cmdname{CSVtotabular} and
+%\cmdname{CSVtolongtable}, \texttt{csvrownumber} refers to the
+%data row (excluding header row.) I hope this doesn't cause
+%problems, but it makes more sense that they should be
+%consistent. So if you have no blank lines in your CSV file,
+%\texttt{csvrownumber} should always be 1 more than
+%\texttt{csvlinenumber}.
+%
+%\end{enumerate}
+%
+% \section{Contact Details}
+%
+% Dr Nicola Talbot\\
+% School of Computing Sciences\\
+% University of East Anglia\\
+% Norwich. NR4 7TJ. England.
+% \\[10pt]
+% \url{http://theoval.cmp.uea.ac.uk/~nlct/}
+%
+%\StopEventually{\PrintIndex\addcontentsline{toc}{section}{Index}}
+%
+%
+%
+%\section{The Code}
+%\iffalse
+% \begin{macrocode}
+%<*csvtools.sty>
+% \end{macrocode}
+%\fi
+%\subsection{csvtools.sty}
+% Declare package
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{csvtools}[2007/07/03 v1.24 (NLCT)]
+% \end{macrocode}
+% Required packages
+% \begin{macrocode}
+\RequirePackage{ifthen}
+\RequirePackage{longtable}
+% \end{macrocode}
+% Define command to set the separator character.
+% \begin{macrocode}
+\newcommand*{\@csvseparator}{,}
+\newcommand*{\setcsvseparator}[1]{%
+\renewcommand*{\@csvseparator}{#1}%
+\construct@lopoff{#1}%
+\@construct@qlopoff{#1}%
+\@construct@lopoff{#1}}
+% \end{macrocode}
+% Define command to remove first element from list. CSV files
+% usually use double quote characters to enclose entries containing
+% a comma. The first argument is the control sequence containing
+% the list, the second argument is the control sequence to
+% contain the first item in the list.
+% \begin{macrocode}
+\newcommand*{\extractentry}[2]{%
+\expandafter\csvlopoff#1\to{#1}{#2}}
+% \end{macrocode}
+% The definitions are constructed on the fly to allow for
+% different separators. The argument is the separator.
+%\changes{1.23}{2007 May 23}{'csvlopoff changed to a long command}
+% \begin{macrocode}
+\edef\construct@lopoff#1{%
+\noexpand\long\noexpand\def\noexpand\csvlopoff#1##1##2\noexpand\to##3##4{%
+\noexpand\ifx"##1\noexpand\relax
+\noexpand\@csv@qlopoff#1##1##2\noexpand\to##3##4\relax
+\noexpand\else
+\noexpand\@csv@lopoff#1##1##2\noexpand\to##3##4\relax
+\noexpand\fi
+}}
+% \end{macrocode}
+% Command to contruct control sequence to be used when the
+% entry is surrounded by double quotes.
+%\changes{1.23}{2007 May 23}{'@csv@qlopoff changed to a long command}
+% \begin{macrocode}
+\edef\@construct@qlopoff#1{%
+\noexpand\long\noexpand\def\noexpand\@csv@qlopoff#1"##1"#1##2\noexpand\to##3##4{%
+\noexpand\def##4{##1}\noexpand\def##3{#1##2}}}
+% \end{macrocode}
+% Command to construct control sequence to be used when the
+% entry isn't surrounded by double quotes.
+%\changes{1.23}{2007 May 23}{'@csv@lopoff changed to a long command}
+% \begin{macrocode}
+\edef\@construct@lopoff#1{%
+\noexpand\long\noexpand\def\noexpand\@csv@lopoff#1##1#1##2\noexpand\to##3##4{%
+\noexpand\def##4{##1}\noexpand\def##3{#1##2}}}
+% \end{macrocode}
+% Set the default separator:
+% \begin{macrocode}
+\setcsvseparator{,}
+% \end{macrocode}
+% Define some variables
+% \begin{macrocode}
+\newread\csvfile
+\newif\ifmore
+\newcount\c@field
+\newcount\c@maxfields
+\newcounter{csvlinenum}
+\newcount\maxlines
+\newcount\csvlastbutone
+\newcounter{csvrownumber}
+\toksdef\csv@tb=2
+% \end{macrocode}
+% Define commands to access element in current row.
+% Access element by column number:
+% \begin{macrocode}
+\newcommand{\field}[1]{\csname @field\romannumeral#1\endcsname}
+% \end{macrocode}
+% Set field (header) label, the first argument is the index, second argument is the header for that column.)
+% \begin{macrocode}
+\newcommand{\setcsvfieldlabel}[2]{%
+\expandafter\def\csname @fieldlabel\romannumeral#1\endcsname{#2}}
+% \end{macrocode}
+% Access element by header:
+% \begin{macrocode}
+\newcommand{\insertbyname}[1]{\csname insert#1\endcsname}
+% \end{macrocode}
+% Define command to trim trailing space (caused by EOL) in argument.
+% Argument should be a command name containing the current line.
+% \begin{macrocode}
+\newcommand{\trim}[1]{\def\@trmstr{}%
+\def\csv@trmarg{#1}%
+\if\par\csv@trmarg
+\else
+\expandafter\@trim#1\end
+\let#1\@trmstr
+\fi
+}
+\long\def\@trim#1 \end{\def\@trmstr{#1}}
+% \end{macrocode}
+% Define "\applyCSVfile"
+% \begin{macrocode}
+\newcommand{\applyCSVfile}{\@ifstar\@sapplyCSVfile\@applyCSVfile}
+% \end{macrocode}
+% Starred version of "\applyCSVfile":
+% \begin{macrocode}
+\newcommand{\@sapplyCSVfile}[3][1]{%
+\IfFileExists{#2}{%
+\openin\csvfile=#2
+\ifeof\csvfile\morefalse\else\moretrue\fi
+\ifmore
+{\c@csvlinenum=1\relax
+\global\c@csvrownumber=0\relax
+\loop
+\read\csvfile to\csvline
+\advance\c@csvlinenum by 1\relax
+\ifnum\c@csvlinenum>#1\relax
+\trim{\csvline}%
+\csv@tb=\expandafter{\csvline}%
+\edef\@csvlin@{\@csvseparator\the\csv@tb\@csvseparator}%
+\c@field = 0\relax
+\whiledo{\not\equal{\@csvlin@}{\@csvseparator\par\@csvseparator} \and
+\not\equal{\@csvlin@}{\@csvseparator\@csvseparator} \and
+\not\equal{\@csvlin@}{\@csvseparator}}{%
+\extractentry{\@csvlin@}{\param}%
+\csv@tb=\expandafter{\param}%
+\advance\c@field by 1\relax
+\expandafter\xdef\csname @field\romannumeral\c@field\endcsname{%
+\the\csv@tb}%
+}%
+\ifthenelse{\not\equal{\csvline}{\par} \and
+\not\equal{\csvline}{}}{%
+\refstepcounter{csvrownumber}\relax
+#3}{}%
+\fi
+\ifeof\csvfile\morefalse\else\moretrue\fi
+\ifmore
+\repeat}%
+\closein\csvfile
+\fi
+}{\PackageError{csvtools}{Can't find file '#2'}{}}%
+}
+% \end{macrocode}
+% Unstarred version:
+% \begin{macrocode}
+\newcommand{\@applyCSVfile}[3][2]{%
+\ifnum#1<2\relax
+\PackageError{csvtools}{Header line required}{The optional
+argument to `\string\applyCSVfile' needs to be > 1. The header
+line should be on line 1}%
+\else
+\IfFileExists{#2}{%
+\openin\csvfile=#2
+\ifeof\csvfile\morefalse\else\moretrue\fi
+\ifmore
+\global\c@csvlinenum=1\relax
+\global\c@csvrownumber=0\relax
+\global\c@maxfields=0\relax
+{\loop
+\read\csvfile to\csvline
+\trim{\csvline}%
+\ifnum\c@csvlinenum=1\relax
+\ifthenelse{\not\equal{\csvline}{\par} \and
+\not\equal{\csvline}{}}{%
+\csv@tb=\expandafter{\csvline}\relax
+\edef\@csvlin@{\@csvseparator\the\csv@tb\@csvseparator}%
+\c@field=0\relax
+\whiledo{\not\equal{\@csvlin@}{\@csvseparator\par\@csvseparator}
+\and \not\equal{\@csvlin@}{\@csvseparator\@csvseparator}
+\and \not\equal{\@csvlin@}{\@csvseparator}}{%
+\extractentry{\@csvlin@}{\param}%
+\advance\c@field by 1\relax
+\csv@tb=\expandafter{\param}\relax
+\expandafter
+\xdef\csname @fieldlabel\romannumeral\c@field\endcsname{\the\csv@tb}%
+}%
+\c@maxfields=\c@field
+}{%
+\PackageError{csvtools}{Header line missing in file #2}{Header
+line required on line 1}}%
+\fi
+\c@field=0\relax
+\whiledo{\c@field < \c@maxfields}{%
+\advance\c@field by 1\relax
+\expandafter\let\csname @field\romannumeral\c@field\endcsname\relax%
+\edef\@fieldlabel{%
+\csname @fieldlabel\romannumeral\c@field\endcsname}%
+\ifthenelse{\equal{\@fieldlabel}{}
+\TE@or \equal{\@fieldlabel}{penalties}
+\TE@or \equal{\@fieldlabel}{byname}}{\PackageError{csvtools}{%
+\string\insert\@fieldlabel \space already defined}{%
+You can't have the label '\@fieldlabel' in your header row.}}{}%
+\expandafter\let\csname insert\@fieldlabel\endcsname\relax%
+}%
+\advance\c@csvlinenum by 1\relax
+\ifnum\c@csvlinenum>#1\relax
+\csv@tb=\expandafter{\csvline}\relax
+\edef\@csvlin@{\@csvseparator\the\csv@tb\@csvseparator}%
+\c@field=0\relax
+\whiledo{\not\equal{\@csvlin@}{\@csvseparator\par\@csvseparator}
+\and \not\equal{\@csvlin@}{\@csvseparator\@csvseparator}
+\and \not\equal{\@csvlin@}{\@csvseparator}}{%
+\extractentry{\@csvlin@}{\param}%
+\csv@tb=\expandafter{\param}\relax
+\advance\c@field by 1\relax
+\expandafter
+\xdef\csname @field\romannumeral\c@field\endcsname{\the\csv@tb}%
+\edef\@fieldlabel{%
+\csname @fieldlabel\romannumeral\c@field\endcsname}%
+\ifthenelse{\equal{\@fieldlabel}{}
+\TE@or \equal{\@fieldlabel}{penalties}
+\TE@or \equal{\@fieldlabel}{byname}}{\PackageError{csvtools}{%
+\string\insert\@fieldlabel \space already defined}{%
+You can't have the label '\@fieldlabel' in your header row.}}{}%
+\expandafter\xdef\csname insert\@fieldlabel\endcsname{\the\csv@tb}%
+}%
+\ifthenelse{\not\equal{\csvline}{\par}
+\and \not\equal{\csvline}{}}{%
+\global\advance\c@csvrownumber by 1\relax
+#3}{}%
+\fi
+\ifeof\csvfile\morefalse\else\moretrue\fi
+\ifmore
+\repeat}%
+\closein\csvfile
+\fi
+}{\PackageError{csvtools}{Can't find file '#2'}{}}%
+\fi
+}
+% \end{macrocode}
+% Define "\CSVtotabular". Inserts contents of csv file into a tabular
+% environment.
+% \begin{macrocode}
+\newcommand{\CSVtotabular}[5]{%
+\openin\csvfile=#1
+\c@csvlinenum=0\relax
+\loop
+\advance\c@csvlinenum by 1\relax
+\read\csvfile to\csvline
+\expandafter
+\xdef\csname @csvline\romannumeral\c@csvlinenum\endcsname{\csvline}%
+\ifthenelse{\not\equal{\csvline}{\par}}{\trim{\csvline}}{}%
+\ifnum\c@csvlinenum=1\relax
+\csv@tb=\expandafter{\csvline}
+\edef\@csvlin@{\@csvseparator\the\csv@tb\@csvseparator}%
+\c@field = 0\relax
+\whiledo{\not\equal{\@csvlin@}{\@csvseparator\par\@csvseparator}%
+\and \not\equal{\@csvlin@}{\@csvseparator\@csvseparator}%
+\and \not\equal{\@csvlin@}{\@csvseparator}}{%
+\extractentry{\@csvlin@}{\param}%
+\csv@tb=\expandafter{\param}%
+\advance\c@field by 1\relax
+\expandafter\xdef\csname insert\the\csv@tb\endcsname{%
+\noexpand\field{\the\c@field}}%
+}%
+\fi
+\csv@tb=\expandafter{\csvline}%
+\edef\@csvlin@{\@csvseparator\the\csv@tb\@csvseparator}%
+\c@field = 0\relax
+\whiledo{\not\equal{\@csvlin@}{\@csvseparator\par\@csvseparator}
+\and \not\equal{\@csvlin@}{\@csvseparator\@csvseparator}
+\and \not\equal{\@csvlin@}{\@csvseparator}}{%
+\extractentry{\@csvlin@}{\param}%
+\csv@tb=\expandafter{\param}
+\advance\c@field by 1\relax
+\expandafter
+\xdef\csname @l\romannumeral\c@csvlinenum @field\romannumeral\c@field\endcsname{\the\csv@tb}%
+}%
+\ifeof\csvfile\morefalse\else\moretrue\fi
+\ifmore
+\repeat
+\closein\csvfile
+{%
+\def\field##1{%
+\csname @l\romannumeral\c@csvlinenum @field\romannumeral##1\endcsname}%
+\def\@r@wh{\begin{tabular}{#2}#3}%
+\def\@r@w{#4}%
+\def\@r@wl{#5\end{tabular}}%
+\maxlines=\c@csvlinenum
+\advance\maxlines by -1\relax
+\csvlastbutone=\maxlines
+\advance\csvlastbutone by -1\relax
+\c@csvlinenum=1\relax
+\setcounter{csvrownumber}{0}\relax
+\whiledo{\not{\c@csvlinenum>\maxlines}}{%
+\ifthenelse{\expandafter\equal{%
+\csname @csvline\romannumeral\c@csvlinenum\endcsname}{\par}}%
+{\relax}{%
+\ifnum\c@csvlinenum=1\relax
+\@r@wh
+\else
+\refstepcounter{csvrownumber}%
+\ifnum\c@csvlinenum=\maxlines\@r@wl\else\@r@w\fi
+\fi}%
+\global\advance\c@csvlinenum by 1\relax
+}\relax
+}}
+% \end{macrocode}
+% Define "\CSVtolongtable". Similar to the above, but uses a
+% longtable environment.
+% \begin{macrocode}
+\newcommand{\CSVtolongtable}[5]{%
+\openin\csvfile=#1
+\c@csvlinenum=0\relax
+\loop
+\advance\c@csvlinenum by 1\relax
+\read\csvfile to\csvline
+\expandafter
+\xdef\csname @csvline\romannumeral\c@csvlinenum\endcsname{\csvline}%
+\ifthenelse{\not\equal{\csvline}{\par}}{\trim{\csvline}}{}%
+\ifnum\c@csvlinenum=1\relax
+\csv@tb=\expandafter{\csvline}%
+\edef\@csvlin@{\@csvseparator\the\csv@tb\@csvseparator}%
+\c@field = 0\relax
+\whiledo{\not\equal{\@csvlin@}{\@csvseparator\par\@csvseparator}
+\and \not\equal{\@csvlin@}{\@csvseparator\@csvseparator}
+\and \not\equal{\@csvlin@}{\@csvseparator}}{%
+\extractentry{\@csvlin@}{\param}%
+\csv@tb=\expandafter{\param}%
+\advance\c@field by 1\relax
+\expandafter
+\xdef\csname insert\the\csv@tb\endcsname{%
+\noexpand\field{\the\c@field}}%
+}%
+\fi
+\csv@tb=\expandafter{\csvline}%
+\edef\@csvlin@{\@csvseparator\the\csv@tb\@csvseparator}%
+\c@field = 0\relax
+\whiledo{\not\equal{\@csvlin@}{\@csvseparator\par\@csvseparator}
+\and \not\equal{\@csvlin@}{\@csvseparator\@csvseparator}
+\and \not\equal{\@csvlin@}{\@csvseparator}}{%
+\extractentry{\@csvlin@}{\param}%
+\csv@tb=\expandafter{\param}%
+\advance\c@field by 1\relax
+\expandafter
+\xdef\csname @l\romannumeral\c@csvlinenum @field\romannumeral\c@field\endcsname{\the\csv@tb}%
+}%
+\ifeof\csvfile\morefalse\else\moretrue\fi
+\ifmore
+\repeat
+\closein\csvfile
+{\def\field##1{%
+\csname @l\romannumeral\c@csvlinenum @field\romannumeral##1\endcsname}%
+\def\@r@wh{\begin{longtable}{#2}#3}%
+\def\@r@w{#4}%
+\def\@r@wl{#5\end{longtable}}%
+\maxlines=\c@csvlinenum
+\advance\maxlines by -1\relax
+\csvlastbutone=\maxlines
+\advance\csvlastbutone by -1\relax
+\c@csvlinenum=1\relax
+\setcounter{csvrownumber}{0}\relax
+\whiledo{\not{\c@csvlinenum>\maxlines}}{%
+\ifthenelse{\expandafter\equal{%
+\csname @csvline\romannumeral\c@csvlinenum\endcsname}{\par}}%
+{\relax}{%
+\ifnum\c@csvlinenum=1\relax
+\@r@wh
+\else
+\refstepcounter{csvrownumber}%
+\ifnum\c@csvlinenum=\maxlines\@r@wl\else\@r@w\fi
+\fi}%
+\global\advance\c@csvlinenum by 1\relax
+}\relax
+}}
+% \end{macrocode}
+% Define a command to determine if on the penultimate row
+% \begin{macrocode}
+\newcommand{\ifnextrowlast}[2]{%
+\ifnum\c@csvlinenum=\csvlastbutone#1\else#2\fi}
+% \end{macrocode}
+% Define means to store entry for later use
+% \begin{macrocode}
+\newcommand{\csvSaveEntry}[2][csvrownumber]{%
+\@ifnextchar[{\@csvSaveEntry{#1}{#2}}{%
+\@csvSaveEntry{#1}{#2}[\insertbyname{#2}]}%
+}
+% \end{macrocode}
+% \begin{macrocode}
+\def\@csvSaveEntry#1#2[#3]{%
+\edef\@csv@tmp{\insertbyname{#2}}%
+\if\relax\@csv@tmp\relax
+\edef\@entry{#3}%
+\else
+\edef\@entry{\insertbyname{#2}}%
+\fi
+\expandafter
+\xdef\csname #2\romannumeral\value{#1}\endcsname{\@entry}}
+% \end{macrocode}
+% Define means to access stored entry.
+% \begin{macrocode}
+\newcommand{\csvGetEntry}[2]{%
+\csname #2\romannumeral\value{#1}\endcsname}
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</csvtools.sty>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*csvpie.sty>
+% \end{macrocode}
+%\fi
+%\subsection{csvpie.sty}
+% Declare package.
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{csvpie}[2006/09/01 v1.0]
+% \end{macrocode}
+% Declare options.
+% \begin{macrocode}
+\newif\ifcolorpiechart
+\colorpiecharttrue
+\DeclareOption{color}{\colorpiecharttrue}
+\DeclareOption{monochrome}{\colorpiechartfalse}
+% \end{macrocode}
+% Process options
+% \begin{macrocode}
+\ProcessOptions
+% \end{macrocode}
+% Specify required packages
+% \begin{macrocode}
+\RequirePackage{csvtools}
+\RequirePackage{tikz}
+\RequirePackage{calc}
+\RequirePackage{keyval}
+% \end{macrocode}
+% Define some variables
+% \begin{macrocode}
+\newlength\csvradius
+\newlength\csvinner
+\newlength\csvouter
+\newlength\csvcutawayoffset
+\newcounter{csvstartangle}
+\newcounter{csvendangle}
+\newcounter{csvangle}
+\newcounter{csvpietotal}
+% \end{macrocode}
+% Set default values.
+% \begin{macrocode}
+\newcommand*{\csvpiedefaults}{radius=2cm,inner=0.25,outer=1.25,%
+cutaway={},total=100,start=0,offset=0.1}
+% \end{macrocode}
+% Define command to specify inner and outer labels.
+% The default puts the entry in column 1 (usually the label)
+% in the outer area, and the entry in column 2 (usually the
+% value) in the inner area. These can be redefined by the user
+% to use other variables, or change the format etc.
+% \begin{macrocode}
+\newcommand{\csvpieouterlabel}{\field{1}}
+\newcommand{\csvpieinnerlabel}{\field{2}\%}
+% \end{macrocode}
+% Define command to store list of row numbers corresponding to
+% cut away segments. (Segments that have been offset from the
+% pie chart.) By default, none of the segments should be cut away.
+% \begin{macrocode}
+\newcommand*{\csvpiecutaways}{}
+% \end{macrocode}
+% Define a command to assign colour name "#2" to segment number "#1"
+% \begin{macrocode}
+\newcommand*{\csvpiesegmentcol}[2]{%
+\expandafter\def\csname csvpie@segcol\romannumeral#1\endcsname{#2}}
+% \end{macrocode}
+% Define command to get colour name assigned to segment number "#1"
+% \begin{macrocode}
+\newcommand*{\csvpiesegcolname}[1]{%
+\csname csvpie@segcol\romannumeral#1\endcsname}
+% \end{macrocode}
+% Set default colours. These can be changed by the user. More colours
+% can be added in a similar manner if there are more than 8 segments.
+% \begin{macrocode}
+\ifcolorpiechart
+\csvpiesegmentcol{1}{red}
+\csvpiesegmentcol{2}{green}
+\csvpiesegmentcol{3}{blue}
+\csvpiesegmentcol{4}{yellow}
+\csvpiesegmentcol{5}{magenta}
+\csvpiesegmentcol{6}{cyan}
+\csvpiesegmentcol{7}{orange}
+\csvpiesegmentcol{8}{white}
+\else
+\csvpiesegmentcol{1}{black!15}
+\csvpiesegmentcol{2}{black!25}
+\csvpiesegmentcol{3}{black!35}
+\csvpiesegmentcol{4}{black!45}
+\csvpiesegmentcol{5}{black!55}
+\csvpiesegmentcol{6}{black!65}
+\csvpiesegmentcol{7}{black!75}
+\csvpiesegmentcol{8}{black!85}
+\fi
+% \end{macrocode}
+% Define keys for "\csvpiechart" optional argument
+% \begin{macrocode}
+\define@key{csvpie}{start}{\setcounter{csvstartangle}{#1}}
+\define@key{csvpie}{total}{\setcounter{csvpietotal}{#1}}
+\define@key{csvpie}{radius}{\setlength{\csvradius}{#1}}
+\define@key{csvpie}{inner}{\setlength{\csvinner}{#1\csvradius}}
+\define@key{csvpie}{outer}{\setlength{\csvouter}{#1\csvradius}}
+\define@key{csvpie}{offset}{\setlength{\csvcutawayoffset}{#1\csvradius}}
+\define@key{csvpie}{cutaway}{\renewcommand*{\csvpiecutaways}{#1}}
+\providecommand*{\csv@startrow}{1}
+\define@key{csvpie}{firstrow}{\renewcommand*{\csv@startrow}{#1}}
+% \end{macrocode}
+% Define "\csvpiechart". The starred version uses "\applyCSVfile*",
+% the unstarred version uses "\applyCSVfile".
+% \begin{macrocode}
+\newcommand{\csvpiechart}{%
+\@ifstar{\def\@@pieapplyCSVfile{\applyCSVfile*}%
+\def\csv@startrow{1}%
+\@csvpiechart}{%
+\def\@@pieapplyCSVfile{\applyCSVfile}%
+\def\csv@startrow{2}%
+\@csvpiechart}%
+}
+% \end{macrocode}
+% Set the keys for pie chart:
+% \begin{macrocode}
+\newcommand*{\csvpiesetkeys}[1]{%
+\edef\csv@piesk{\noexpand\setkeys{csvpie}{\csvpiedefaults,#1}}%
+\csv@piesk}
+% \end{macrocode}
+% The main body of "\csvpiechart".
+% \begin{macrocode}
+\newcommand{\@csvpiechart}[3][]{%
+{\csvpiesetkeys{#1}%
+\edef\csv@startang{\number\c@csvstartangle}%
+\csv@computeangles{#2}{#3}%
+\setcounter{csvstartangle}{\csv@startang}%
+\begin{tikzpicture}%
+\@@pieapplyCSVfile[\csv@startrow]{#3}{%
+\csvpiesegment{#2}}%
+\end{tikzpicture}%
+}}
+% \end{macrocode}
+% Do individual segment in pie chart.
+% \begin{macrocode}
+\newcommand*{\csvpiesegment}[1]{%
+\setcounter{csvstartangle}{%
+\csname csv@sang@\romannumeral\c@csvrownumber\endcsname}%
+\setcounter{csvangle}{%
+\csname csv@angle@\romannumeral\c@csvrownumber\endcsname}%
+\setcounter{csvendangle}{\value{csvangle} + \value{csvstartangle}}%
+\setcounter{csvangle}{%
+\csname csv@cut@angle\romannumeral\c@csvrownumber\endcsname}%
+\ifthenelse{\value{csvangle}>180}{\addtocounter{csvangle}{-360}}{}%
+\edef\@csv@shift{(\number\c@csvangle:%
+\csname csv@cut@len\romannumeral\c@csvrownumber\endcsname)}%
+\setcounter{csvangle}{%
+\csname csv@angle@\romannumeral\c@csvrownumber\endcsname/2
++\value{csvstartangle}}%
+\begin{scope}[shift={\@csv@shift}]%
+\fill[color=\csvpiesegcolname\c@csvrownumber] (0,0) --
+(\thecsvstartangle:\csvradius)
+arc (\thecsvstartangle:\thecsvendangle:\csvradius) -- cycle;
+% if 90 < csvangle < 270, the text will look upside-down, so
+% adjust accordingly. Reusing csvstartangle, to save defining
+% a new counter, as it's no longer required
+\ifthenelse{\(\value{csvangle}>90 \and \value{csvangle}<270\)
+\TE@or \value{csvangle}<-90}{%
+\setcounter{csvstartangle}{\value{csvangle}-180}%
+\draw (\thecsvangle:\csvinner)
+node[left,rotate=\thecsvstartangle]{\csvpieinnerlabel};
+\draw (\thecsvangle:\csvouter)
+node[left,rotate=\thecsvstartangle]{\csvpieouterlabel};
+}{%
+\draw (\thecsvangle:\csvinner)
+node[right,rotate=\thecsvangle]{\csvpieinnerlabel};
+\draw (\thecsvangle:\csvouter)
+node[right,rotate=\thecsvangle]{\csvpieouterlabel};
+}%
+\end{scope}%
+}
+% \end{macrocode}
+% Compute the angles for each segment. First argument is
+% variable, second argument is the name
+% of the CSV file.
+% \begin{macrocode}
+\newcommand*{\csv@computeangles}[2]{%
+\@@pieapplyCSVfile[\csv@startrow]{#2}{%
+\csvsetsegmentparams{\c@csvrownumber}{#1}%
+}%
+\ifthenelse{\equal{\csvpiecutaways}{}}{}{\csvcomputeoffsets}}
+% \end{macrocode}
+% Compute offset angles for cutaway segments.
+% "\csv@row" should either be a single number (e.g.\ "2")
+% or a number range (e.g.\ "1-2")
+% \begin{macrocode}
+\newcommand*{\csvcomputeoffsets}{%
+\@for\csv@row:=\csvpiecutaways\do{%
+\expandafter\@csv@set@off\csv@row-\relax
+}}
+% \end{macrocode}
+% Set the offset angle.
+% \begin{macrocode}
+\def\@csv@set@off#1-#2\relax{%
+\ifthenelse{\equal{#2}{}}{%
+\@@csv@set@off{#1}}{%
+\@@csv@set@offr#1-#2\relax}%
+}
+% \end{macrocode}
+% Set offset for individual segment:
+% \begin{macrocode}
+\newcommand*{\@@csv@set@off}[1]{%
+\setcounter{csvangle}{%
+\csname csv@angle@\romannumeral#1\endcsname/2
++ \csname csv@sang@\romannumeral#1\endcsname}%
+\expandafter\xdef\csname csv@cut@angle\romannumeral#1\endcsname{%
+\number\c@csvangle}%
+\expandafter
+\gdef\csname csv@cut@len\romannumeral\csv@row\endcsname{%
+\csvcutawayoffset}%
+}
+% \end{macrocode}
+% Set offset for range of segments:
+% \begin{macrocode}
+\newcount\@csv@seg
+\def\@@csv@set@offr#1-#2-\relax{%
+\ifnum#1>#2\relax
+\PackageError{csvpie}{Segment ranges must go in ascending
+order}{Try #2-#1 instead of #1-#2}%
+\else
+\setcounter{csvangle}{0}%
+\@csv@seg=#1\relax
+\whiledo{\not\(\@csv@seg > #2\)}{%
+\addtocounter{csvangle}{%
+\csname csv@angle@\romannumeral\@csv@seg\endcsname}%
+\advance\@csv@seg by 1}%
+\setcounter{csvangle}{\value{csvangle}/2
++ \csname csv@sang@\romannumeral#1\endcsname}%
+\@csv@seg=#1\relax
+\whiledo{\not\(\@csv@seg > #2\)}{%
+\expandafter\xdef\csname csv@cut@angle\romannumeral\@csv@seg\endcsname{%
+\number\c@csvangle}%
+\expandafter
+\gdef\csname csv@cut@len\romannumeral\@csv@seg\endcsname{%
+\csvcutawayoffset}%
+\advance\@csv@seg by 1}%
+\fi
+}
+% \end{macrocode}
+% Set the relevent variables required for "\csvpiesegment":
+% The first argument is the segment number, the second argument
+% is the variable. The "csvstartangle" counter is updated.
+% This command should be called sequentially, and is provided
+% for the convenience of \texttt{csvtools.pl}.
+% \begin{macrocode}
+\newcommand*{\csvsetsegmentparams}[2]{%
+\ifthenelse{\value{csvstartangle}>180}{%
+\addtocounter{csvstartangle}{-360}}{}%
+\ifthenelse{\value{csvstartangle}<-180}{%
+\addtocounter{csvstartangle}{360}}{}%
+\expandafter
+\xdef\csname csv@sang@\romannumeral#1\endcsname{%
+\number\c@csvstartangle}%
+\setcounter{csvangle}{360*\real{#2}/\value{csvpietotal}}%
+\addtocounter{csvstartangle}{\value{csvangle}}%
+\expandafter
+\xdef\csname csv@angle@\romannumeral#1\endcsname{%
+\number\c@csvangle}%
+\expandafter
+\gdef\csname csv@cut@angle\romannumeral#1\endcsname{0}%
+\expandafter
+\gdef\csname csv@cut@len\romannumeral#1\endcsname{0cm}%
+}
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</csvpie.sty>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*csvsort.sty>
+% \end{macrocode}
+%\fi
+%\subsection{csvsort.sty}
+% Declare package:
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{csvsort}[2007/07/03 v1.0 (NLCT)]
+% \end{macrocode}
+% If \cmdname{compare} hasn't been defined, use compare.tex
+% \begin{macrocode}
+\@ifundefined{compare}{\input{compare}}{}
+% \end{macrocode}
+% Define comparison commands. Each of the comparison commands must
+% set the boolean \cmdname{if@csv@ishigher}
+% \begin{macrocode}
+\newif\if@csv@ishigher
+% \end{macrocode}
+% Alphabetical ascending comparison:
+% \begin{macrocode}
+\newcommand{\csv@alphaascendingcompare}[2]{%
+\@csv@extractkey#1{\@csv@keya}%
+\@csv@extractkey#2{\@csv@keyb}%
+\csvsort@verbose{Comparing \@csv@keya\space and \@csv@keyb}%
+\edef\@csvsrt@result{\noexpand\compare{\@csv@keya}{\@csv@keyb}}%
+\ifnum\@csvsrt@result=1\relax
+ \@csv@ishighertrue
+\else
+ \@csv@ishigherfalse
+\fi}
+% \end{macrocode}
+% Alphabetical descending comparison:
+% \begin{macrocode}
+\newcommand{\csv@alphadescendingcompare}[2]{%
+\@csv@extractkey#1{\@csv@keya}%
+\@csv@extractkey#2{\@csv@keyb}%
+\csvsort@verbose{Comparing \@csv@keya\space and \@csv@keyb}%
+\edef\@csvsrt@result{\noexpand\compare{\@csv@keya}{\@csv@keyb}}%
+\ifnum\@csvsrt@result=-1\relax
+ \@csv@ishighertrue
+\else
+ \@csv@ishigherfalse
+\fi}
+% \end{macrocode}
+% Numerical ascending comparison:
+% \begin{macrocode}
+\newcommand{\csv@numericascendingcompare}[2]{%
+\@csv@extractkey#1{\@csv@keya}%
+\@csv@extractkey#2{\@csv@keyb}%
+\if\relax\@csv@keya\relax\def\@csv@keya{0}\fi
+\if\relax\@csv@keyb\relax\def\@csv@keyb{0}\fi
+\csvsort@verbose{Comparing \number\@csv@keya\space and \number\@csv@keyb}%
+\ifnum\@csv@keya>\@csv@keyb\relax
+ \@csv@ishighertrue
+\else
+ \@csv@ishigherfalse
+\fi}
+% \end{macrocode}
+% Numerical descending comparison:
+% \begin{macrocode}
+\newcommand{\csv@numericdescendingcompare}[2]{%
+\@csv@extractkey#1{\@csv@keya}%
+\@csv@extractkey#2{\@csv@keyb}%
+\if\relax\@csv@keya\relax\def\@csv@keya{0}\fi
+\if\relax\@csv@keyb\relax\def\@csv@keyb{0}\fi
+\csvsort@verbose{Comparing \number\@csv@keya\space and \number\@csv@keyb}%
+\ifnum\@csv@keya<\@csv@keyb\relax
+ \@csv@ishighertrue
+\else
+ \@csv@ishigherfalse
+\fi}
+% \end{macrocode}
+% The sort key needs to be extracted from the data (3rd argument
+% must be a control sequence):
+% \begin{macrocode}
+\def\@csv@extractkey#1#2#3{\def#3{#1}}
+% \end{macrocode}
+% Conversely, extract the data and ignore the sort key:
+% \begin{macrocode}
+\def\@csv@extractdata#1#2#3{\def#3{#2}}
+% \end{macrocode}
+% The command \cmdname{csv@compare} should be set to the
+% appropriate comparison command (\cmdname{csv@alphaascendingcompare}
+% by default.)
+% \begin{macrocode}
+\let\csv@compare\csv@alphaascendingcompare
+% \end{macrocode}
+% The package options are a comma-separated list of key=value
+% pairs, so need the \stynamefmt{xkeyval} package.
+% \begin{macrocode}
+\RequirePackage{xkeyval}
+% \end{macrocode}
+% Package options. Verbose mode:
+% \begin{macrocode}
+\define@boolkey{csvsort.sty}[csvsrt]{verbose}[true]{}
+% \end{macrocode}
+% Default is verbose:
+% \begin{macrocode}
+\csvsrtverbosetrue
+% \end{macrocode}
+% Define command to display message if verbose option is set:
+% \begin{macrocode}
+\newcommand{\csvsort@verbose}[1]{%
+\ifcsvsrtverbose\typeout{#1}\fi}
+% \end{macrocode}
+% Sort type (can be either numerical or alphabetical, ascending
+% or descending):
+% \begin{macrocode}
+\define@choicekey{csvsort.sty}{sort}[\val\nr]{alphabetical,numerical,%
+alphabetical ascending,numerical ascending,%
+alphabetical descending,numerical descending,%
+alphabeticalascending,alphabeticaldescending,%
+numericalascending,numericaldescending}{%
+\ifcase\nr
+ % alphabetical (ascending)
+ \let\csv@compare\csv@alphaascendingcompare
+ \or
+ % numerical (ascending)
+ \let\csv@compare\csv@numericascendingcompare
+ \or
+ % alphabetical ascending
+ \let\csv@compare\csv@alphaascendingcompare
+ \or
+ % numerical ascending
+ \let\csv@compare\csv@numericascendingcompare
+ \or
+ % alphabetical descending
+ \let\csv@compare\csv@alphadescendingcompare
+ \or
+ % numerical descending
+ \let\csv@compare\csv@numericdescendingcompare
+ \or
+ % alphabeticalascending
+ \let\csv@compare\csv@alphaascendingcompare
+ \or
+ % alphabetical descending
+ \let\csv@compare\csv@alphadescendingcompare
+ \or
+ % numericalascending
+ \let\csv@compare\csv@numericascendingcompare
+ \or
+ % numericaldescending
+ \let\csv@compare\csv@numericdescendingcompare
+\fi}
+% \end{macrocode}
+% The variable used to sort is given by:
+% \begin{macrocode}
+\newcommand{\csv@sortvariable}{\field{1}}
+% \end{macrocode}
+% A different variable can be set using the variable package option:
+% \begin{macrocode}
+\define@key{csvsort.sty}{variable}{%
+\renewcommand{\csv@sortvariable}{#1}}
+% \end{macrocode}
+% The first data line in CSV files with no headers is given by
+% \begin{macrocode}
+\newcounter{sfirstdataline}
+% \end{macrocode}
+% and defaults to line 1:
+% \begin{macrocode}
+\setcounter{sfirstdataline}{1}
+% \end{macrocode}
+% This value can be set using the "sfirstdataline" option:
+% \begin{macrocode}
+\define@key{csvsort.sty}{sfirstdataline}{%
+\setcounter{sfirstdataline}{#1}}
+% \end{macrocode}
+% The first data line in CSV files with headers is given by
+% \begin{macrocode}
+\newcounter{firstdataline}
+% \end{macrocode}
+% and defaults to line 2:
+% \begin{macrocode}
+\setcounter{firstdataline}{2}
+% \end{macrocode}
+% This value can be set using the "firstdataline" option:
+% \begin{macrocode}
+\define@key{csvsort.sty}{firstdataline}{%
+\setcounter{firstdataline}{#1}}
+% \end{macrocode}
+% Process package options:
+% \begin{macrocode}
+\ProcessOptionsX
+% \end{macrocode}
+% Required packages:
+% \begin{macrocode}
+\RequirePackage{csvtools}
+\RequirePackage{xfor}
+% \end{macrocode}
+% Insertion sort macro. The argument is a comma-separated list
+% in the form \marg{sort-key1}\marg{data1},\ldots,%
+%\marg{sort-keyN}\marg{dataN}. The list is sorted according to
+% \cmdname{csv@compare}
+%\begin{macro}{\csv@insertionsort}
+% \begin{macrocode}
+\newcommand{\csv@insertionsort}[1]{%
+\let\@csv@sortedlist\relax
+\@for\@csv@listelement:=#1\do{%
+\if\@csv@sortedlist\relax
+ \expandafter\toks@\expandafter{\@csv@listelement}%
+ \edef\@csv@sortedlist{\the\toks@}%
+\else
+ \expandafter\@csv@insert@into\expandafter
+ {\@csv@listelement}{\@csv@sortedlist}%
+\fi}\let#1\@csv@sortedlist}
+% \end{macrocode}
+%\end{macro}
+% Insert element (first argument) into a sorted list (second argument)
+% Each element must be in the form \marg{sort-key}\marg{data}, where
+% \cmdname{csv@compare} sorts according to \meta{sort-key}. The
+% insertion code ignores \meta{data}.
+%\begin{macro}{\@csv@insertinto}
+% \begin{macrocode}
+\newcommand\@csv@insert@into[2]{%
+\let\@csv@tmplist\relax
+\@for\@sort@list@element:=#2\do{%
+ \expandafter\csv@compare\expandafter{\@sort@list@element}{#1}%
+ \if@csv@ishigher
+ \toks@{#1}%
+ \if\relax\@csv@tmplist
+ \edef\@csv@tmplist{\the\toks@,\@sort@list@element}%
+ \else
+ \edef\@csv@tmplist{\@csv@tmplist,\the\toks@,\@sort@list@element}%
+ \fi
+ \@endfortrue
+ \else
+ \if\relax\@csv@tmplist
+ \edef\@csv@tmplist{\@sort@list@element}%
+ \else
+ \edef\@csv@tmplist{\@csv@tmplist,\@sort@list@element}%
+ \fi
+ \fi
+}%
+\if@endfor
+ \ifx\@forremainder\@empty
+ \else
+ \edef\@csv@tmplist{\@csv@tmplist,\@forremainder}%
+ \fi
+\else
+ \toks@{#1}%
+ \if\relax\@csv@tmplist
+ \edef\@csv@tmplist{\the\toks@}%
+ \else
+ \edef\@csv@tmplist{\@csv@tmplist,\the\toks@}%
+ \fi
+\fi
+\@endforfalse
+\let#2\@csv@tmplist
+}
+% \end{macrocode}
+%\end{macro}
+% Define \cmdname{sortapplyCSVfile}. This is akin to \stynamefmt{csvtools}'
+% \cmdname{applyCSVfile}, except it stores each data row in a list,
+% sorts the list, and then iterates through the sorted list. As
+% with, \cmdname{applyCSVfile}, the starred version should be used
+% for a file that doesn't contain a header row, and the un-starred
+% version should be used for a file that has a header row. Both
+% forms take an optional argument, which should be a key=value list,
+% the same as the package options, but they only apply to the
+% current instance of \cmdname{sortapplyCSVfile}.
+%\begin{macro}{\sortapplyCSVfile}
+% \begin{macrocode}
+\newcommand{\sortapplyCSVfile}{%
+\@ifstar\@ssortapplyCSVfile\@sortapplyCSVfile}
+% \end{macrocode}
+%\end{macro}
+% Starred version (see above):
+%\begin{macro}{\@ssortapplyCSVfile}
+% \begin{macrocode}
+\newcommand{\@ssortapplyCSVfile}[3][]{%
+\bgroup
+\setkeys{csvsort.sty}{#1}%
+\def\@csv@list{}%
+\@sapplyCSVfile[\c@sfirstdataline]{#2}{%
+\edef\csv@key{\csv@sortvariable}%
+\if\relax\@csv@list\relax
+\protected@xdef\@csv@list{{\csv@key}{\csvline}}%
+\else
+\protected@xdef\@csv@list{\@csv@list,{\csv@key}{\csvline}}%
+\fi
+}%
+\@ssortapplyCSVdata{\@csv@list}{#3}%
+\egroup}
+% \end{macrocode}
+%\end{macro}
+% Unstarred version (see above):
+%\begin{macro}{\@sortapplyCSVfile}
+% \begin{macrocode}
+\newcommand{\@sortapplyCSVfile}[3][]{%
+\bgroup
+\setkeys{csvsort.sty}{#1}%
+\def\@csv@list{}%
+\@applyCSVfile[\c@firstdataline]{#2}{%
+\edef\csv@key{\csv@sortvariable}%
+\if\relax\@csv@list\relax
+\protected@xdef\@csv@list{{\csv@key}{\csvline}}%
+\else
+\protected@xdef\@csv@list{\@csv@list,{\csv@key}{\csvline}}%
+\fi
+}%
+\@sortapplyCSVdata{\@csv@list}{#3}%
+\egroup}
+% \end{macrocode}
+%\end{macro}
+% \cmdname{sortapplyCSVdata}\oarg{sort type}\marg{cmd}\marg{text}
+% will sort the data given by \meta{cmd}, which should contain
+% a comma separated
+% list of the form \marg{sort1}\marg{data1},\ldots\marg{sortN}\marg{dataN}
+% and the applies \meta{text} to each data element of the list.
+% The sort ordering is specified by \meta{sort type}, which should
+% have the same values as the sort key used by
+% \cmdname{sortapplyCSVfile}.
+% The starred version doesn't permit
+% \cmdname{insert}\meta{label} commands. First argument is the list,
+% the second argument specifies what to do for each data element.
+% (Note, these commands are primarily provided for the
+% benefit of \texttt{csvtools.pl}, which is why they're not
+% documented in the main part of the \stynamefmt{csvtools} manual.)
+%\begin{macro}{\sortapplyCSVdata}
+% \begin{macrocode}
+\newcommand{\sortapplyCSVdata}{%
+\@ifstar\@ssortapplyCSVdata\@sortapplyCSVdata}
+% \end{macrocode}
+%\end{macro}
+% Starred version:
+%\begin{macro}{\@ssortapplyCSVdata}
+% \begin{macrocode}
+\newcommand{\@ssortapplyCSVdata}[3][\relax]{%
+\bgroup
+\if\relax#1\relax\else\setkeys{csvsort.sty}{sort=#1}\fi
+\csv@insertionsort{#2}%
+\c@csvrownumber=0\relax
+\@for\@csv@element:=#2\do{%
+\expandafter\@csv@extractdata\@csv@element\csvline
+\expandafter\toks@\expandafter{\csvline}%
+\edef\@csvlin@{\@csvseparator\the\toks@\@csvseparator}%
+\long\edef\@csvlin@{\@csvseparator\csvline\@csvseparator}%
+\c@field=0\relax
+\whiledo{\not\equal{\@csvlin@}{\@csvseparator}}{%
+\extractentry{\@csvlin@}{\param}%
+\expandafter\toks@\expandafter{\param}%
+\advance\c@field by 1\relax
+\expandafter\xdef\csname @field\romannumeral\c@field\endcsname{%
+\the\toks@}%
+}%
+\ifthenelse{\not\equal{\csvline}{}}{%
+\refstepcounter{csvrownumber}%
+#3}{}%
+}%
+\egroup
+}
+% \end{macrocode}
+%\end{macro}
+% Unstarred version (field labels will need to be set (using
+% \cmdname{setcsvfieldlabel}) before using this macro.)
+%\begin{macro}{\@sortapplyCSVdata}
+% \begin{macrocode}
+\newcommand{\@sortapplyCSVdata}[3][\relax]{%
+\bgroup
+\if\relax#1\relax\else\setkeys{csvsort.sty}{sort=#1}\fi
+\csv@insertionsort{#2}%
+\c@csvrownumber=0\relax
+\@for\@csv@element:=#2\do{%
+\expandafter\@csv@extractdata\@csv@element\csvline
+\expandafter\toks@\expandafter{\csvline}%
+\edef\@csvlin@{\@csvseparator\the\toks@\@csvseparator}%
+\long\edef\@csvlin@{\@csvseparator\csvline\@csvseparator}%
+\c@field=0\relax
+\whiledo{\not\equal{\@csvlin@}{\@csvseparator}}{%
+\extractentry{\@csvlin@}{\param}%
+\expandafter\toks@\expandafter{\param}%
+\advance\c@field by 1\relax
+\expandafter\xdef\csname @field\romannumeral\c@field\endcsname{%
+\the\toks@}%
+\edef\@fieldlabel{%
+\csname @fieldlabel\romannumeral\c@field\endcsname}%
+\expandafter\xdef\csname insert\@fieldlabel\endcsname{\the\toks@}%
+}%
+\ifthenelse{\not\equal{\csvline}{}}{%
+\refstepcounter{csvrownumber}%
+#3}{}%
+}%
+\egroup
+}
+% \end{macrocode}
+%\end{macro}
+% Define \cmdname{sortCSVtotabular}. This is akin to \stynamefmt{csvtools}'
+% \cmdname{CSVtotabular}, but sorts the data. Takes an optional
+% argument that is a key=value list which is that same as the
+% package options, but only applies to this instance of
+%\cmdname{sortCSVtotabular}. This command first loads all the data
+% into a list, sorts the list, and then puts it in a tabular
+% environment. The total number of data rows is stored in
+% \cmdname{maxlines}.
+%\begin{macro}{\sortCSVtotabular}
+% \begin{macrocode}
+\newcommand{\sortCSVtotabular}[6][]{%
+\@sortCSVtotabular[#1]{#2}{#3}{#4}{#5}{#6}{tabular}}
+% \end{macrocode}
+%\end{macro}
+% As above, but use longtable environment instead:
+%\begin{macro}{\sortCSVtolongtable}
+% \begin{macrocode}
+\newcommand{\sortCSVtolongtable}[6][]{%
+\@sortCSVtotabular[#1]{#2}{#3}{#4}{#5}{#6}{longtable}}
+% \end{macrocode}
+%\end{macro}
+% The final argument specifies which tabular-like environment
+% to use:
+%\begin{macro}{\@sortCSVtotabular}
+% \begin{macrocode}
+\newcommand{\@sortCSVtotabular}[7][]{%
+\bgroup
+\setkeys{csvsort.sty}{#1}%
+% \end{macrocode}
+% Read all data into \cmdname{@csv@list}:
+% \begin{macrocode}
+\def\@csv@list{}%
+\@applyCSVfile[\c@firstdataline]{#2}{%
+\edef\csv@key{\csv@sortvariable}%
+\if\relax\@csv@list\relax
+\protected@xdef\@csv@list{{\csv@key}{\csvline}}%
+\else
+\protected@xdef\@csv@list{\@csv@list,{\csv@key}{\csvline}}%
+\fi
+}%
+% \end{macrocode}
+% Sort data, and put in required tabular-like environment
+% \begin{macrocode}
+\sortCSVdatatotabular{\c@csvrownumber}{\@csv@list}{#3}{#4}{#5}{#6}{#7}%
+\egroup
+}
+% \end{macrocode}
+%\end{macro}
+% \cmdname{sortCSVdatatotabular}\marg{n}\marg{list}\marg{col-align}\marg{header-row}\marg{all but last rows}\marg{last row}\marg{env-name}\par
+% This command sorts the data specified by \meta{list} (which has
+% \meta{n} elements) and puts in a tabular-like environment called
+% \meta{env-name}. This command is mainly provided for the benefit
+% of \texttt{csvtools.pl}, which is why it is not documented in the
+% main part of the \stynamefmt{csvtools} manual. Field names must be
+% set prior to use (using \cmdname{setcsvfieldlabel}.)
+%\begin{macro}{\sortCSVdatatotabular}
+% \begin{macrocode}
+\newcommand{\sortCSVdatatotabular}[7]{%
+% \end{macrocode}
+% Set \cmdname{maxlines} (total number of data rows, not including
+% header row).
+% \begin{macrocode}
+\maxlines=#1\relax
+% \end{macrocode}
+% Sort the data:
+% \begin{macrocode}
+\csv@insertionsort{#2}%
+% \end{macrocode}
+% Set \cmdname{csvlastbutone} to \cmdname{maxlines}$-1$:
+% \begin{macrocode}
+\csvlastbutone=\maxlines
+\advance\csvlastbutone by -1\relax
+% \end{macrocode}
+% Reset \cmdname{c@csvrownumber}:
+% \begin{macrocode}
+\c@csvrownumber=0\relax
+\c@csvlinenum=0\relax
+% \end{macrocode}
+% Initialise first row, last row and middle rows (in case not enough
+% data)
+% \begin{macrocode}
+\def\@r@wh{#4}\def\@r@w{}\def\@r@wl{}%
+% \end{macrocode}
+% Iterate through each element of sorted list
+% \begin{macrocode}
+\@for\@csv@element:=#2\do{%
+% \end{macrocode}
+% Extract data from the current list element (ignoring sort key)
+% and store in \cmdname{csvline}:
+% \begin{macrocode}
+\expandafter\@csv@extractdata\@csv@element\csvline
+% \end{macrocode}
+% Extract each field of \cmdname{csvline}:
+% \begin{macrocode}
+\expandafter\toks@\expandafter{\csvline}%
+\edef\@csvlin@{\@csvseparator\the\toks@\@csvseparator}%
+\long\edef\@csvlin@{\@csvseparator\csvline\@csvseparator}%
+\c@field=0\relax
+\whiledo{\not\equal{\@csvlin@}{\@csvseparator}}{%
+\extractentry{\@csvlin@}{\param}%
+% \end{macrocode}
+% Store field in \cmdname{toks@}
+% \begin{macrocode}
+\expandafter\toks@\expandafter{\param}%
+% \end{macrocode}
+% Increment field counter
+% \begin{macrocode}
+\advance\c@field by 1\relax
+% \end{macrocode}
+% Define \cmdname{field}\meta{n} and associated
+% \cmdname{insert}\meta{label}
+% \begin{macrocode}
+\expandafter\xdef\csname @field\romannumeral\c@field\endcsname{%
+\the\toks@}%
+\edef\@fieldlabel{%
+\csname @fieldlabel\romannumeral\c@field\endcsname}%
+\expandafter\xdef\csname insert\@fieldlabel\endcsname{\the\toks@}%
+}%
+% \end{macrocode}
+% Increment row counter.
+% \begin{macrocode}
+\refstepcounter{csvrownumber}%
+\refstepcounter{csvlinenum}%
+% \end{macrocode}
+% Check to see if this is the first row, last row, of somewhere in
+% between
+% \begin{macrocode}
+\ifnum\c@csvrownumber=\maxlines
+ \protected@edef\@r@wl{#6}%
+\else
+ \expandafter\toks@\expandafter{\@r@w}
+ \protected@edef\@r@w{\the\toks@#5}%
+\fi
+}%
+% \end{macrocode}
+% Now do tabular environment:
+% \begin{macrocode}
+\begin{#7}{#3}%
+\@r@wh
+\@r@w
+\@r@wl
+\end{#7}%
+}
+% \end{macrocode}
+%\end{macro}
+%\iffalse
+% \begin{macrocode}
+%</csvsort.sty>
+% \end{macrocode}
+%\fi
+%\Finale
+\endinput
diff --git a/obsolete/macros/latex/contrib/csvtools/source/csvtools.ins b/obsolete/macros/latex/contrib/csvtools/source/csvtools.ins
new file mode 100644
index 0000000000..a4b96b0cd8
--- /dev/null
+++ b/obsolete/macros/latex/contrib/csvtools/source/csvtools.ins
@@ -0,0 +1,23 @@
+% csvtools.ins generated using makedtx version 0.91b 2007/7/3 10:24
+\input docstrip
+
+\preamble
+Copyright (C) 2007 Nicola Talbot, all rights reserved.
+If you modify this file, you must change its name first.
+You are NOT ALLOWED to distribute this file alone. You are NOT
+ALLOWED to take money for the distribution or use of either this
+file or a changed version, except for a nominal charge for copying
+etc.
+\endpreamble
+
+\askforoverwritefalse
+
+\generate{\file{csvpie.sty}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{csvtools.dtx}{csvpie.sty,package}}
+\file{csvsort.sty}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{csvtools.dtx}{csvsort.sty,package}}
+\file{csvtools.sty}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{csvtools.dtx}{csvtools.sty,package}}
+}
+
+\endbatchfile
diff --git a/obsolete/macros/latex/contrib/datetime/CHANGES b/obsolete/macros/latex/contrib/datetime/CHANGES
new file mode 100644
index 0000000000..4d6f411bb6
--- /dev/null
+++ b/obsolete/macros/latex/contrib/datetime/CHANGES
@@ -0,0 +1,117 @@
+datetime.sty history
+
+Version 2.60:
+
+ * datetime.sty:
+
+ - Fixed bug in \amorpmname
+
+ * dt-welsh.def:
+
+ - Removed "a viz"
+
+ * dt-croatian.def:
+
+ - Changed "studenog" to studenoga" to keep in line with babel
+
+ Added some more week day name translations provided by various
+people
+
+Version 2.59:
+
+ * Made \ordinaldate robust.
+
+ * Renamed \ifleapyear to \ifDTleapyear to help avoid name clash
+ with other packages. (If \ifleapyear hasn't been defined,
+ it's defined to \ifDTLleapyear for backward compatibility.)
+
+ * New: \DTifDefLoaded, \DTloadDefIfNotLoadedButExists
+
+ * Added Croatian days of the week (supplied by Ivan Kokan).
+
+Version 2.58:
+
+ * Added Polish days of the week (supplied by Piotr Kempa).
+
+ * Fixed bug that caused some of the def files to be truncated when
+ unpacked from the dtx file.
+
+ * Added \loadDTdef to ensure dt-*.def files are only loaded once.
+
+Version 2.57:
+
+ * Added Romanian days of the week (supplied by Daniel Dumitriu).
+
+Version 2.56:
+ * Added \formattime. (Specific times can now be displayed in
+ the same format as \currenttime)
+ * Added new date format yyyymmdd
+ * Added new time format hhmmss
+ * Added new package option "iso"
+ * datetime package options now override babel's date format
+ * Moved definition of \newdateformat and \newtimeformat before
+ configuration file is loaded.
+
+Version 2.55:
+
+ * fixed bug preventing multilingual support
+ * fixed copyright text
+
+Version 2.54: added check for british babel setting.
+
+Version 2.53: added checks for UKenglish and USenglish.
+
+Version 2.52: fixed bug in \textdate arising from change in
+fmtcount internals.
+
+Version 2.51: fixed time between midnight and 1am
+
+Version 2.5: Added (n)german week day names (thanks to Uwe Bieling)
+for supplying this. Fixed minor bugs.
+
+Version 2.49: Fixed some of the multilingual problems, tidied up
+code documentation
+
+Version 2.48: Fixed bug in \pdfdate
+
+Version 2.47: Defined \ier if it doesn't already exist.
+
+Version 2.46: Made \today robust.
+
+Version 2.45: Added command to store dates.
+
+Version 2.44: Fixed spelling mistakes (oops!) and minor
+bugs in LaTeX2HTML style files
+
+New to version 2.43: Package now compatible with
+LaTeX2HTML
+
+New to version 2.42: Package now compatible with babel.
+
+New to version 2.41: Package has been split into two
+files: datetime.sty and fmtcount.sty. The latter file
+contains the definitions for all the macros that display
+the value of a counter (e.g. \ordinal, \octal).
+Extra macro \decimal added (like \arabic, but can pad it
+with leading zeroes.)
+
+New to version 2.4: New commands: \binary, \octal,
+\hexadecimal, \aaalph, \abalph, \Hexadecimal, \AAAlph
+and \ABAlph. Added provision for configuration
+file datetime.cfg.
+
+New to version 2.31: The command \pdfdate has been added
+(minor bug fixed in version 2.32)
+
+New to version 2.3: The command \newtimeformat can be
+used to define new time formats. Added the command
+\currenttime
+
+New to version 2.2: The command \newdateformat can be
+used to define new date formats in addition to the ones
+provided by this package.
+
+see accompanying README file for license and installation
+information.
+
+http://www.dickimaw-books.com/
diff --git a/obsolete/macros/latex/contrib/datetime/README b/obsolete/macros/latex/contrib/datetime/README
new file mode 100644
index 0000000000..d9fd96a4bb
--- /dev/null
+++ b/obsolete/macros/latex/contrib/datetime/README
@@ -0,0 +1,55 @@
+LaTeX Package : datetime v2.60
+
+Last Modified : 2015-03-20
+
+Author : Nicola Talbot
+
+Package FAQ : http://www.dickimaw-books.com/faqs/datetimefaq.html
+
+Files : datetime.dtx - documented source file
+ datetime.ins - installation script
+ datetime.perl - LaTeX2HTML style file
+ dt-sampl.tex - sample files
+ dt-lang.tex /
+
+
+The package datetime.sty provides various different
+formats for \today, and provides commands for displaying
+the time.
+
+See the documentation for further details.
+
+To extract the code do:
+
+latex datetime.ins
+
+This will create datetime.sty datetime-defaults.sty and lots of dt-*.def files,
+(NB it may take a while to extract if you have a slow computer!)
+
+Move the .sty and .def files to somewhere LaTeX will find it
+(e.g. texmf/tex/latex/datetime/) and remember to update the TeX
+database.
+
+Copy the datetime.perl file to somewhere where LaTeX2HTML will find it
+(e.g. latex2html/styles/).
+
+To extract the documentation do:
+
+latex datetime.dtx
+makeindex -s gglo.ist -t datetime.glg -o datetime.gls datetime.glo
+latex datetime.dtx
+latex datetime.dtx
+
+(If you want the documented source code, remove the command
+\OnlyDescription from datetime.dtx before doing the above.)
+
+Place the resulting file (datetime.dvi) into the documentation
+directory (e.g. texmf/doc/latex/datetime/).
+
+Read the file CHANGES for version changes.
+
+This material is subject to the LaTeX Project Public License.
+See http://www.ctan.org/license/lppl1.3 for
+the details of that license.
+
+http://www.dickimaw-books.com/
diff --git a/obsolete/macros/latex/contrib/datetime/datetime-manual.css b/obsolete/macros/latex/contrib/datetime/datetime-manual.css
new file mode 100644
index 0000000000..6968b9226c
--- /dev/null
+++ b/obsolete/macros/latex/contrib/datetime/datetime-manual.css
@@ -0,0 +1,152 @@
+
+/* start css.sty */
+.cmmi-10{font-style: italic;}
+.cmr-17{font-size:170%;}
+.cmr-12{font-size:120%;}
+.cmr-8{font-size:80%;}
+.cmsy-8{font-size:80%;}
+.cmtt-12{font-size:120%;font-family: monospace;}
+.cmtt-12{font-family: monospace;}
+.cmtt-12{font-family: monospace;}
+.cmtt-12{font-family: monospace;}
+.cmtt-12{font-family: monospace;}
+.cmss-10{ font-family: sans-serif;}
+.cmss-10{ font-family: sans-serif;}
+.cmss-10{ font-family: sans-serif;}
+.cmtt-10{font-family: monospace;}
+.cmtt-10{font-family: monospace;}
+.cmtt-10{font-family: monospace;}
+.cmtt-10{font-family: monospace;}
+.cmtt-10{font-family: monospace;}
+.cmti-10{ font-style: italic;}
+.cmtt-9{font-size:90%;font-family: monospace;}
+.cmtt-9{font-family: monospace;}
+.cmtt-9{font-family: monospace;}
+.cmtt-9{font-family: monospace;}
+.cmtt-9{font-family: monospace;}
+.cmr-9{font-size:90%;}
+.cmss-8{font-size:80%; font-family: sans-serif;}
+.cmss-8{ font-family: sans-serif;}
+.cmss-8{ font-family: sans-serif;}
+.cmitt-10{font-family: monospace; font-style: italic;}
+.cmbx-10{ font-weight: bold;}
+.cmtt-8{font-size:80%;font-family: monospace;}
+.cmtt-8{font-family: monospace;}
+.cmtt-8{font-family: monospace;}
+.cmtt-8{font-family: monospace;}
+.cmtt-8{font-family: monospace;}
+.cmssbx-10{ font-family: sans-serif; font-weight: bold;}
+.cmssbx-10{ font-family: sans-serif; font-weight: bold;}
+.cmssbx-10{ font-family: sans-serif; font-weight: bold;}
+p.noindent { text-indent: 0em }
+td p.noindent { text-indent: 0em; margin-top:0em; }
+p.nopar { text-indent: 0em; }
+p.indent{ text-indent: 1.5em }
+@media print {div.crosslinks {visibility:hidden;}}
+a img { border-top: 0; border-left: 0; border-right: 0; }
+center { margin-top:1em; margin-bottom:1em; }
+td center { margin-top:0em; margin-bottom:0em; }
+.Canvas { position:relative; }
+img.math{vertical-align:middle;}
+li p.indent { text-indent: 0em }
+li p:first-child{ margin-top:0em; }
+li p:last-child, li div:last-child { margin-bottom:0.5em; }
+li p~ul:last-child, li p~ol:last-child{ margin-bottom:0.5em; }
+.enumerate1 {list-style-type:decimal;}
+.enumerate2 {list-style-type:lower-alpha;}
+.enumerate3 {list-style-type:lower-roman;}
+.enumerate4 {list-style-type:upper-alpha;}
+div.newtheorem { margin-bottom: 2em; margin-top: 2em;}
+.obeylines-h,.obeylines-v {white-space: nowrap; }
+div.obeylines-v p { margin-top:0; margin-bottom:0; }
+.overline{ text-decoration:overline; }
+.overline img{ border-top: 1px solid black; }
+td.displaylines {text-align:center; white-space:nowrap;}
+.centerline {text-align:center;}
+.rightline {text-align:right;}
+div.verbatim {font-family: monospace; white-space: nowrap; text-align:left; clear:both; }
+.fbox {padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; }
+div.fbox {display:table}
+div.center div.fbox {text-align:center; clear:both; padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; }
+div.minipage{width:100%;}
+div.center, div.center div.center {text-align: center; margin-left:1em; margin-right:1em;}
+div.center div {text-align: left;}
+div.flushright, div.flushright div.flushright {text-align: right;}
+div.flushright div {text-align: left;}
+div.flushleft {text-align: left;}
+.underline{ text-decoration:underline; }
+.underline img{ border-bottom: 1px solid black; margin-bottom:1pt; }
+.framebox-c, .framebox-l, .framebox-r { padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; }
+.framebox-c {text-align:center;}
+.framebox-l {text-align:left;}
+.framebox-r {text-align:right;}
+span.thank-mark{ vertical-align: super }
+span.footnote-mark sup.textsuperscript, span.footnote-mark a sup.textsuperscript{ font-size:80%; }
+div.footnotes{border-top:solid 1px black; border-bottom:solid 1px black; padding-bottom:1ex; padding-top:0.5ex; margin-right:15%; margin-top:2ex; font-style:italic; font-size:85%;}
+div.footnotes p{margin-top:0; margin-bottom:0; text-indent:0;}
+div.tabular, div.center div.tabular {text-align: center; margin-top:0.5em; margin-bottom:0.5em; }
+table.tabular td p{margin-top:0em;}
+table.tabular {margin-left: auto; margin-right: auto;}
+td p:first-child{ margin-top:0em; }
+td p:last-child{ margin-bottom:0em; }
+div.td00{ margin-left:0pt; margin-right:0pt; }
+div.td01{ margin-left:0pt; margin-right:5pt; }
+div.td10{ margin-left:5pt; margin-right:0pt; }
+div.td11{ margin-left:5pt; margin-right:5pt; }
+table[rules] {border-left:solid black 0.4pt; border-right:solid black 0.4pt; }
+td.td00{ padding-left:0pt; padding-right:0pt; }
+td.td01{ padding-left:0pt; padding-right:5pt; }
+td.td10{ padding-left:5pt; padding-right:0pt; }
+td.td11{ padding-left:5pt; padding-right:5pt; }
+table[rules] {border-left:solid black 0.4pt; border-right:solid black 0.4pt; }
+.hline hr, .cline hr{ height : 1px; margin:0px; }
+.tabbing-right {text-align:right;}
+span.TEX {letter-spacing: -0.125em; }
+span.TEX span.E{ position:relative;top:0.5ex;left:-0.0417em;}
+a span.TEX span.E {text-decoration: none; }
+span.LATEX span.A{ position:relative; top:-0.5ex; left:-0.4em; font-size:85%;}
+span.LATEX span.TEX{ position:relative; left: -0.4em; }
+div.float, div.figure {margin-left: auto; margin-right: auto;}
+div.float img {text-align:center;}
+div.figure img {text-align:center;}
+.marginpar {width:20%; float:right; text-align:left; margin-left:auto; margin-top:0.5em; font-size:85%; text-decoration:underline;}
+.marginpar p{margin-top:0.4em; margin-bottom:0.4em;}
+table.equation {width:100%;}
+.equation td{text-align:center; }
+td.equation { margin-top:1em; margin-bottom:1em; }
+td.equation-label { width:5%; text-align:center; }
+td.eqnarray4 { width:5%; white-space: normal; }
+td.eqnarray2 { width:5%; }
+table.eqnarray-star, table.eqnarray {width:100%;}
+div.eqnarray{text-align:center;}
+div.array {text-align:center;}
+div.pmatrix {text-align:center;}
+table.pmatrix {width:100%;}
+span.pmatrix img{vertical-align:middle;}
+div.pmatrix {text-align:center;}
+table.pmatrix {width:100%;}
+span.bar-css {text-decoration:overline;}
+img.cdots{vertical-align:middle;}
+.partToc a, .partToc, .likepartToc a, .likepartToc {line-height: 200%; font-weight:bold; font-size:110%;}
+.index-item, .index-subitem, .index-subsubitem {display:block}
+div.caption {text-indent:-2em; margin-left:3em; margin-right:1em; text-align:left;}
+div.caption span.id{font-weight: bold; white-space: nowrap; }
+h1.partHead{text-align: center}
+p.bibitem { text-indent: -2em; margin-left: 2em; margin-top:0.6em; margin-bottom:0.6em; }
+p.bibitem-p { text-indent: 0em; margin-left: 2em; margin-top:0.6em; margin-bottom:0.6em; }
+.paragraphHead, .likeparagraphHead { margin-top:2em; font-weight: bold;}
+.subparagraphHead, .likesubparagraphHead { font-weight: bold;}
+.quote {margin-bottom:0.25em; margin-top:0.25em; margin-left:1em; margin-right:1em; text-align:justify;}
+.verse{white-space:nowrap; margin-left:2em}
+div.maketitle {text-align:center;}
+h2.titleHead{text-align:center;}
+div.maketitle{ margin-bottom: 2em; }
+div.author, div.date {text-align:center;}
+div.thanks{text-align:left; margin-left:10%; font-size:85%; font-style:italic; }
+.quotation {margin-bottom:0.25em; margin-top:0.25em; margin-left:1em; }
+.abstract p {margin-left:5%; margin-right:5%;}
+div.abstract {width:100%;}
+div.important { border : solid red; }
+div.verbatim { font-family: monospace; white-space: nowrap; text-align:left; clear:both; padding-top: 2ex; padding-bottom: 2ex;}
+/* end css.sty */
+
diff --git a/obsolete/macros/latex/contrib/datetime/datetime-manual.html b/obsolete/macros/latex/contrib/datetime/datetime-manual.html
new file mode 100644
index 0000000000..5c09dd7e44
--- /dev/null
+++ b/obsolete/macros/latex/contrib/datetime/datetime-manual.html
@@ -0,0 +1,2173 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!--http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd-->
+<html xmlns="http://www.w3.org/1999/xhtml"
+>
+<head><title>datetime.sty v2.60: Formatting Current Date and Time</title>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="TeX4ht (http://www.tug.org/tex4ht/)" />
+<meta name="originator" content="TeX4ht (http://www.tug.org/tex4ht/)" />
+<!-- xhtml,fn-in,css-in,uni-html4,utf8 -->
+<meta name="src" content="datetime-manual.tex" />
+<meta name="date" content="2015-03-20 16:54:00" />
+
+<style type="text/css">
+<!--
+
+/* start css.sty */
+.cmmi-10{font-style: italic;}
+.cmr-17{font-size:170%;}
+.cmr-12{font-size:120%;}
+.cmr-8{font-size:80%;}
+.cmsy-8{font-size:80%;}
+.cmtt-12{font-size:120%;font-family: monospace;}
+.cmtt-12{font-family: monospace;}
+.cmtt-12{font-family: monospace;}
+.cmtt-12{font-family: monospace;}
+.cmtt-12{font-family: monospace;}
+.cmss-10{ font-family: sans-serif;}
+.cmss-10{ font-family: sans-serif;}
+.cmss-10{ font-family: sans-serif;}
+.cmtt-10{font-family: monospace;}
+.cmtt-10{font-family: monospace;}
+.cmtt-10{font-family: monospace;}
+.cmtt-10{font-family: monospace;}
+.cmtt-10{font-family: monospace;}
+.cmti-10{ font-style: italic;}
+.cmtt-9{font-size:90%;font-family: monospace;}
+.cmtt-9{font-family: monospace;}
+.cmtt-9{font-family: monospace;}
+.cmtt-9{font-family: monospace;}
+.cmtt-9{font-family: monospace;}
+.cmr-9{font-size:90%;}
+.cmss-8{font-size:80%; font-family: sans-serif;}
+.cmss-8{ font-family: sans-serif;}
+.cmss-8{ font-family: sans-serif;}
+.cmitt-10{font-family: monospace; font-style: italic;}
+.cmbx-10{ font-weight: bold;}
+.cmtt-8{font-size:80%;font-family: monospace;}
+.cmtt-8{font-family: monospace;}
+.cmtt-8{font-family: monospace;}
+.cmtt-8{font-family: monospace;}
+.cmtt-8{font-family: monospace;}
+.cmssbx-10{ font-family: sans-serif; font-weight: bold;}
+.cmssbx-10{ font-family: sans-serif; font-weight: bold;}
+.cmssbx-10{ font-family: sans-serif; font-weight: bold;}
+p.noindent { text-indent: 0em }
+td p.noindent { text-indent: 0em; margin-top:0em; }
+p.nopar { text-indent: 0em; }
+p.indent{ text-indent: 1.5em }
+@media print {div.crosslinks {visibility:hidden;}}
+a img { border-top: 0; border-left: 0; border-right: 0; }
+center { margin-top:1em; margin-bottom:1em; }
+td center { margin-top:0em; margin-bottom:0em; }
+.Canvas { position:relative; }
+img.math{vertical-align:middle;}
+li p.indent { text-indent: 0em }
+li p:first-child{ margin-top:0em; }
+li p:last-child, li div:last-child { margin-bottom:0.5em; }
+li p~ul:last-child, li p~ol:last-child{ margin-bottom:0.5em; }
+.enumerate1 {list-style-type:decimal;}
+.enumerate2 {list-style-type:lower-alpha;}
+.enumerate3 {list-style-type:lower-roman;}
+.enumerate4 {list-style-type:upper-alpha;}
+div.newtheorem { margin-bottom: 2em; margin-top: 2em;}
+.obeylines-h,.obeylines-v {white-space: nowrap; }
+div.obeylines-v p { margin-top:0; margin-bottom:0; }
+.overline{ text-decoration:overline; }
+.overline img{ border-top: 1px solid black; }
+td.displaylines {text-align:center; white-space:nowrap;}
+.centerline {text-align:center;}
+.rightline {text-align:right;}
+div.verbatim {font-family: monospace; white-space: nowrap; text-align:left; clear:both; }
+.fbox {padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; }
+div.fbox {display:table}
+div.center div.fbox {text-align:center; clear:both; padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; }
+div.minipage{width:100%;}
+div.center, div.center div.center {text-align: center; margin-left:1em; margin-right:1em;}
+div.center div {text-align: left;}
+div.flushright, div.flushright div.flushright {text-align: right;}
+div.flushright div {text-align: left;}
+div.flushleft {text-align: left;}
+.underline{ text-decoration:underline; }
+.underline img{ border-bottom: 1px solid black; margin-bottom:1pt; }
+.framebox-c, .framebox-l, .framebox-r { padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; }
+.framebox-c {text-align:center;}
+.framebox-l {text-align:left;}
+.framebox-r {text-align:right;}
+span.thank-mark{ vertical-align: super }
+span.footnote-mark sup.textsuperscript, span.footnote-mark a sup.textsuperscript{ font-size:80%; }
+div.footnotes{border-top:solid 1px black; border-bottom:solid 1px black; padding-bottom:1ex; padding-top:0.5ex; margin-right:15%; margin-top:2ex; font-style:italic; font-size:85%;}
+div.footnotes p{margin-top:0; margin-bottom:0; text-indent:0;}
+div.tabular, div.center div.tabular {text-align: center; margin-top:0.5em; margin-bottom:0.5em; }
+table.tabular td p{margin-top:0em;}
+table.tabular {margin-left: auto; margin-right: auto;}
+td p:first-child{ margin-top:0em; }
+td p:last-child{ margin-bottom:0em; }
+div.td00{ margin-left:0pt; margin-right:0pt; }
+div.td01{ margin-left:0pt; margin-right:5pt; }
+div.td10{ margin-left:5pt; margin-right:0pt; }
+div.td11{ margin-left:5pt; margin-right:5pt; }
+table[rules] {border-left:solid black 0.4pt; border-right:solid black 0.4pt; }
+td.td00{ padding-left:0pt; padding-right:0pt; }
+td.td01{ padding-left:0pt; padding-right:5pt; }
+td.td10{ padding-left:5pt; padding-right:0pt; }
+td.td11{ padding-left:5pt; padding-right:5pt; }
+table[rules] {border-left:solid black 0.4pt; border-right:solid black 0.4pt; }
+.hline hr, .cline hr{ height : 1px; margin:0px; }
+.tabbing-right {text-align:right;}
+span.TEX {letter-spacing: -0.125em; }
+span.TEX span.E{ position:relative;top:0.5ex;left:-0.0417em;}
+a span.TEX span.E {text-decoration: none; }
+span.LATEX span.A{ position:relative; top:-0.5ex; left:-0.4em; font-size:85%;}
+span.LATEX span.TEX{ position:relative; left: -0.4em; }
+div.float, div.figure {margin-left: auto; margin-right: auto;}
+div.float img {text-align:center;}
+div.figure img {text-align:center;}
+.marginpar {width:20%; float:right; text-align:left; margin-left:auto; margin-top:0.5em; font-size:85%; text-decoration:underline;}
+.marginpar p{margin-top:0.4em; margin-bottom:0.4em;}
+table.equation {width:100%;}
+.equation td{text-align:center; }
+td.equation { margin-top:1em; margin-bottom:1em; }
+td.equation-label { width:5%; text-align:center; }
+td.eqnarray4 { width:5%; white-space: normal; }
+td.eqnarray2 { width:5%; }
+table.eqnarray-star, table.eqnarray {width:100%;}
+div.eqnarray{text-align:center;}
+div.array {text-align:center;}
+div.pmatrix {text-align:center;}
+table.pmatrix {width:100%;}
+span.pmatrix img{vertical-align:middle;}
+div.pmatrix {text-align:center;}
+table.pmatrix {width:100%;}
+span.bar-css {text-decoration:overline;}
+img.cdots{vertical-align:middle;}
+.partToc a, .partToc, .likepartToc a, .likepartToc {line-height: 200%; font-weight:bold; font-size:110%;}
+.index-item, .index-subitem, .index-subsubitem {display:block}
+div.caption {text-indent:-2em; margin-left:3em; margin-right:1em; text-align:left;}
+div.caption span.id{font-weight: bold; white-space: nowrap; }
+h1.partHead{text-align: center}
+p.bibitem { text-indent: -2em; margin-left: 2em; margin-top:0.6em; margin-bottom:0.6em; }
+p.bibitem-p { text-indent: 0em; margin-left: 2em; margin-top:0.6em; margin-bottom:0.6em; }
+.paragraphHead, .likeparagraphHead { margin-top:2em; font-weight: bold;}
+.subparagraphHead, .likesubparagraphHead { font-weight: bold;}
+.quote {margin-bottom:0.25em; margin-top:0.25em; margin-left:1em; margin-right:1em; text-align:justify;}
+.verse{white-space:nowrap; margin-left:2em}
+div.maketitle {text-align:center;}
+h2.titleHead{text-align:center;}
+div.maketitle{ margin-bottom: 2em; }
+div.author, div.date {text-align:center;}
+div.thanks{text-align:left; margin-left:10%; font-size:85%; font-style:italic; }
+.quotation {margin-bottom:0.25em; margin-top:0.25em; margin-left:1em; }
+.abstract p {margin-left:5%; margin-right:5%;}
+div.abstract {width:100%;}
+div.important { border : solid red; }
+div.verbatim { font-family: monospace; white-space: nowrap; text-align:left; clear:both; padding-top: 2ex; padding-bottom: 2ex;}
+/* end css.sty */
+
+
+-->
+</style>
+</head><body
+>
+ <div class="maketitle"><a
+ id="top"></a>
+
+
+
+
+
+
+
+<h2 class="titleHead">datetime.sty v2.60: Formatting Current Date and
+Time</h2>
+ <div class="author" ><span
+class="cmr-12">Nicola L. C. Talbot</span>
+<br /> <span
+class="cmr-12">Dickimaw Books</span>
+<br /><a
+href="http://www.dickimaw-books.com/" class="url" ><span
+class="cmtt-12">http://www.dickimaw-books.com/</span></a></div><br />
+<div class="date" ><span
+class="cmr-12">2015-03-20</span></div>
+ </div>
+<!--l. 25--><p class="indent" > <div class="important" title="Important Note"> This is the last version of this package. The replacement package is called <span
+class="cmss-10">datetime2</span><a
+ id="dx1-2"></a>
+and will be released shortly after the this final version. </div>
+</p><!--l. 29--><p class="noindent" >
+</p>
+ <h3 class="likesectionHead"><a
+ id="x1-1000"></a>Contents</h3>
+ <div class="tableofcontents">
+ <span class="sectionToc" >1 <a
+href="#x1-20001" id="QQ2-1-2">Introduction</a></span>
+<br /> <span class="sectionToc" >2 <a
+href="#x1-30002" id="QQ2-1-3">Predefined Date Formats</a></span>
+<br /> &#x00A0;<span class="subsectionToc" >2.1 <a
+href="#x1-40002.1" id="QQ2-1-4">ISO format</a></span>
+<br /> &#x00A0;<span class="subsectionToc" >2.2 <a
+href="#x1-50002.2" id="QQ2-1-5"><span
+class="cmti-10">Day Month Year </span>formats</a></span>
+<br /> &#x00A0;<span class="subsectionToc" >2.3 <a
+href="#x1-60002.3" id="QQ2-1-6"><span
+class="cmti-10">Month Day Year </span>formats</a></span>
+<br /> &#x00A0;<span class="subsectionToc" >2.4 <a
+href="#x1-70002.4" id="QQ2-1-7">Dates defined by <span
+class="cmss-10">babel</span></a></span>
+<br /> <span class="sectionToc" >3 <a
+href="#x1-80003" id="QQ2-1-8">Time Commands</a></span>
+<br /> <span class="sectionToc" >4 <a
+href="#x1-90004" id="QQ2-1-9">Formating Dates</a></span>
+<br /> <span class="sectionToc" >5 <a
+href="#x1-100005" id="QQ2-1-10">Defining New Date Formats</a></span>
+<br /> <span class="sectionToc" >6 <a
+href="#x1-110006" id="QQ2-1-11">Saving Dates</a></span>
+<br /> <span class="sectionToc" >7 <a
+href="#x1-120007" id="QQ2-1-12">Predefined Names</a></span>
+<br /> <span class="sectionToc" >8 <a
+href="#x1-130008" id="QQ2-1-13">Package Options</a></span>
+<br /> <span class="sectionToc" >9 <a
+href="#x1-140009" id="QQ2-1-14">Multilingual Support</a></span>
+<br /> <span class="sectionToc" >10 <a
+href="#x1-1500010" id="QQ2-1-15">Registers</a></span>
+<br /> <span class="sectionToc" >11 <a
+href="#x1-1600011" id="QQ2-1-16">Configuration File</a></span>
+<br /> <span class="sectionToc" >12 <a
+href="#x1-1700012" id="QQ2-1-17">LaTeX2HTML styles</a></span>
+<br /> <span class="sectionToc" >13 <a
+href="#x1-1800013" id="QQ2-1-18">Troubleshooting</a></span>
+
+
+
+<br /> <span class="sectionToc" ><a
+href="#Q1-1-19">Index</a></span>
+<br /> <span class="sectionToc" ><a
+href="#Q1-1-20">Index</a></span>
+ </div>
+<!--l. 33--><p class="noindent" >
+</p>
+<!--l. 33--><p class="noindent" ><a
+href="#top">Top</a><h2 class="sectionHead"></p><h3 class="sectionHead"><span class="titlemark">1 </span> <a
+ id="x1-20001"></a>Introduction</h3>
+<a
+ id="dx1-2001"></a>
+<a
+ id="dx1-2002"></a>
+<!--l. 36--><p class="noindent" >The <span
+class="cmss-10">datetime </span>package is a <span class="LATEX">L<span class="A">A</span><span class="TEX">T<span
+class="E">E</span>X</span></span>2<span
+class="cmmi-10">&#x03B5;</span>&#x00A0;package that provides various different formats for
+<span
+class="cmtt-10">\today</span><a
+ id="dx1-2003"></a>, and provides commands for displaying the current time. If you only want the
+time commands but not the date changing commands, you can pass the option <span
+class="cmss-10">nodate</span><a
+ id="dx1-2004"></a>
+to the package. <a
+ id="dx1-2005"></a>
+<a
+ id="dx1-2006"></a>
+</p><!--l. 46--><p class="indent" > Since version 2.4, the <span
+class="cmss-10">datetime </span>package has been separated into two packages:
+<span
+class="cmss-10">datetime </span>and <span
+class="cmss-10">fmtcount</span><a
+ id="dx1-2007"></a>. When I originally created this package, I defined the commands,
+<span
+class="cmtt-10">\ordinal</span><a
+ id="dx1-2008"></a> etc which could be used in the definition of <span
+class="cmtt-10">\today</span>. Since then, I have
+extended the number of commands available that can be used to display the value
+of a <span class="LATEX">L<span class="A">A</span><span class="TEX">T<span
+class="E">E</span>X</span></span>&#x00A0;counter, however it seems more appropriate to define all these
+counter-related commands in a separate package. The <span
+class="cmss-10">fmtcount</span><a
+ id="dx1-2009"></a> package is now
+distributed separately from the <span
+class="cmss-10">datetime </span>package, and will also need to be
+installed.
+<a
+ id="dx1-2010"></a>
+</p><!--l. 59--><p class="indent" > As from version 2.42, the <span
+class="cmss-10">datetime </span>package is now compatible with <span
+class="cmss-10">babel</span><a
+ id="dx1-2011"></a>, however
+you must load the <span
+class="cmss-10">datetime </span>package <span
+class="cmti-10">after </span>the <span
+class="cmss-10">babel</span><a
+ id="dx1-2012"></a> package. For example:
+
+
+
+</p>
+ <div class="verbatim" id="verbatim-1">
+\usepackage[francais]{babel}
+&#x00A0;<br />\usepackage{datetime}
+</div>
+<!--l. 66--><p class="nopar" >
+</p><!--l. 68--><p class="noindent" >
+</p>
+<!--l. 68--><p class="noindent" ><a
+href="#top">Top</a><h2 class="sectionHead"></p><h3 class="sectionHead"><span class="titlemark">2 </span> <a
+ id="x1-30002"></a>Predefined Date Formats</h3>
+<!--l. 69--><p class="noindent" >There are various declarations that change the effect of <span
+class="cmtt-10">\today</span><a
+ id="dx1-3001"></a>. The change can be
+localised by placing the declaration within a group.
+</p><!--l. 73--><p class="indent" > As from version 2.43, the numerical date formats (such as <span
+class="cmtt-10">\ddmmyyyydate</span><a
+ id="dx1-3002"></a>) use the
+command
+</p><!--l. 75--><p class="indent" > <hr><div title="Definition"><span class="marginpar"><span
+class="cmtt-9">\dateseparator</span><span
+class="cmtt-9">&#x00A0;</span></span><a
+ id="dx1-3003"></a> <span
+class="cmtt-10">\dateseparator </span></div><hr>
+</p><!--l. 77--><p class="noindent" >
+to separate the numbers. So, for example, if you want to hyphens instead of slashes, you
+can do:
+
+
+
+</p>
+ <div class="verbatim" id="verbatim-2">
+\renewcommand{\dateseparator}{-}
+</div>
+<!--l. 82--><p class="nopar" >
+</p><!--l. 84--><p class="noindent" >
+</p>
+<!--l. 84--><p class="noindent" ><a
+href="#top">Top</a><h3 class="subsectionHead"></p><h4 class="subsectionHead"><span class="titlemark">2.1 </span> <a
+ id="x1-40002.1"></a>ISO format</h4>
+<!--l. 86--><p class="noindent" ><hr><div title="Definition"><span class="marginpar"><span
+class="cmtt-9">\yyyymmdddate</span><span
+class="cmtt-9">&#x00A0;</span></span><a
+ id="dx1-4001"></a> <span
+class="cmtt-10">\yyyymmdddate </span></div><hr>
+</p><!--l. 88--><p class="noindent" >
+This declaration will redefine <span
+class="cmtt-10">\today</span><a
+ id="dx1-4002"></a> to produce the current date displayed in
+the form 2000/03/08. (You can redefine <span
+class="cmtt-10">\dateseparator</span><a
+ id="dx1-4003"></a> to <span
+class="cmtt-10">- </span>to change to
+2000-03-08.)
+</p><!--l. 93--><p class="noindent" >
+</p>
+<!--l. 93--><p class="noindent" ><a
+href="#top">Top</a><h3 class="subsectionHead"></p><h4 class="subsectionHead"><span class="titlemark">2.2 </span> <a
+ id="x1-50002.2"></a>&#x27E8;<span
+class="cmti-10">Day</span>&#x27E9; &#x27E8;<span
+class="cmti-10">Month</span>&#x27E9; &#x27E8;<span
+class="cmti-10">Year</span>&#x27E9; formats</h4>
+<!--l. 95--><p class="noindent" ><hr><div title="Definition"><span class="marginpar"><span
+class="cmtt-9">\longdate</span><span
+class="cmtt-9">&#x00A0;</span></span><a
+ id="dx1-5001"></a> <span
+class="cmtt-10">\longdate </span></div><hr>
+</p><!--l. 97--><p class="noindent" >
+This declaration will redefine <span
+class="cmtt-10">\today</span><a
+ id="dx1-5002"></a> to produce the current date displayed in the form
+Wednesday 8<sup class="textsuperscript"><span
+class="cmr-9">th</span></sup> March, 2000 if the package option <span
+class="cmss-10">dayofweek</span><a
+ id="dx1-5003"></a> is used, or 8<sup class="textsuperscript"><span
+class="cmr-9">th</span></sup> March, 2000
+if the package option <span
+class="cmss-10">nodayofweek</span><a
+ id="dx1-5004"></a> is used.
+</p><!--l. 104--><p class="noindent" ><hr><div title="Definition"><span class="marginpar"><span
+class="cmtt-9">\shortdate</span><span
+class="cmtt-9">&#x00A0;</span></span><a
+ id="dx1-5005"></a> <span
+class="cmtt-10">\shortdate </span></div><hr>
+</p><!--l. 106--><p class="noindent" >
+This declaration will redefine <span
+class="cmtt-10">\today</span><a
+ id="dx1-5006"></a> to produce the current date displayed in the form
+Wed 8<sup class="textsuperscript"><span
+class="cmr-9">th</span></sup> Mar, 2000 if the package option <span
+class="cmss-10">dayofweek</span><a
+ id="dx1-5007"></a> is used, or 8<sup class="textsuperscript"><span
+class="cmr-9">th</span></sup> Mar, 2000 if the
+package option <span
+class="cmss-10">nodayofweek</span><a
+ id="dx1-5008"></a> is used.
+</p><!--l. 113--><p class="noindent" ><hr><div title="Definition"><span class="marginpar"><span
+class="cmtt-9">\ddmmyyyydate</span><span
+class="cmtt-9">&#x00A0;</span></span><a
+ id="dx1-5009"></a> <span
+class="cmtt-10">\ddmmyyyydate </span></div><hr>
+</p><!--l. 115--><p class="noindent" >
+This declaration will redefine <span
+class="cmtt-10">\today</span><a
+ id="dx1-5010"></a> to produce the current date displayed in the form
+08/03/2000.
+</p><!--l. 119--><p class="noindent" ><hr><div title="Definition"><span class="marginpar"><span
+class="cmtt-9">\dmyyyydate</span><span
+class="cmtt-9">&#x00A0;</span></span><a
+ id="dx1-5011"></a> <span
+class="cmtt-10">\dmyyyydate </span></div><hr>
+</p><!--l. 121--><p class="noindent" >
+This declaration will redefine <span
+class="cmtt-10">\today</span><a
+ id="dx1-5012"></a> to produce the current date displayed in the form
+8/3/2000.
+</p><!--l. 125--><p class="noindent" ><hr><div title="Definition"><span class="marginpar"><span
+class="cmtt-9">\ddmmyydate</span><span
+class="cmtt-9">&#x00A0;</span></span><a
+ id="dx1-5013"></a> <span
+class="cmtt-10">\ddmmyydate </span></div><hr>
+</p><!--l. 127--><p class="noindent" >
+This declaration will redefine <span
+class="cmtt-10">\today</span><a
+ id="dx1-5014"></a> to produce the current date displayed in the form
+08/03/00.
+</p><!--l. 131--><p class="noindent" ><hr><div title="Definition"><span class="marginpar"><span
+class="cmtt-9">\dmyydate</span><span
+class="cmtt-9">&#x00A0;</span></span><a
+ id="dx1-5015"></a> <span
+class="cmtt-10">\dmyydate </span></div><hr>
+
+
+
+</p><!--l. 133--><p class="noindent" >
+This declaration will redefine <span
+class="cmtt-10">\today</span><a
+ id="dx1-5016"></a> to produce the current date displayed in the form
+8/3/00.
+</p><!--l. 137--><p class="noindent" ><hr><div title="Definition"><span class="marginpar"><span
+class="cmtt-9">\textdate</span><span
+class="cmtt-9">&#x00A0;</span></span><a
+ id="dx1-5017"></a> <span
+class="cmtt-10">\textdate </span></div><hr>
+</p><!--l. 139--><p class="noindent" >
+This declaration will redefine <span
+class="cmtt-10">\today</span><a
+ id="dx1-5018"></a> to produce the current date displayed
+in the form: Wednesday the Eighth of March, Two Thousand if the package
+option <span
+class="cmss-10">dayofweek</span><a
+ id="dx1-5019"></a> is used, or Eighth of March, Two Thousand if the package
+option <span
+class="cmss-10">nodayofweek</span><a
+ id="dx1-5020"></a> is used. Note that <span
+class="cmtt-10">\textdate </span>is defined for use with
+English, it won&#8217;t look right if it is used when another language has been
+selected<span class="footnote-mark"><a
+href="#fn1x0" id="fn1x0-bk"><sup class="textsuperscript">1</sup></a></span><a
+ id="x1-5021f1"></a>.
+If you want to define a similar command for another language, you will first need to
+check that the <span
+class="cmss-10">fmtcount</span><a
+ id="dx1-5023"></a> package supports that language.
+</p><!--l. 152--><p class="noindent" >
+</p>
+<!--l. 152--><p class="noindent" ><a
+href="#top">Top</a><h3 class="subsectionHead"></p><h4 class="subsectionHead"><span class="titlemark">2.3 </span> <a
+ id="x1-60002.3"></a>&#x27E8;<span
+class="cmti-10">Month</span>&#x27E9; &#x27E8;<span
+class="cmti-10">Day</span>&#x27E9; &#x27E8;<span
+class="cmti-10">Year</span>&#x27E9; formats</h4>
+<!--l. 154--><p class="noindent" ><hr><div title="Definition"><span class="marginpar"><span
+class="cmtt-9">\usdate</span><span
+class="cmtt-9">&#x00A0;</span></span><a
+ id="dx1-6001"></a> <span
+class="cmtt-10">\usdate </span></div><hr>
+</p><!--l. 156--><p class="noindent" >
+This declaration will redefine <span
+class="cmtt-10">\today </span>to produce the current date displayed in the form
+March 8, 2000. (As <span class="TEX">T<span
+class="E">E</span>X</span>&#x00A0;and <span class="LATEX">L<span class="A">A</span><span class="TEX">T<span
+class="E">E</span>X</span></span>&#x00A0;do by default.)
+</p><!--l. 161--><p class="noindent" ><hr><div title="Definition"><span class="marginpar"><span
+class="cmtt-9">\mmddyyyydate</span><span
+class="cmtt-9">&#x00A0;</span></span><a
+ id="dx1-6002"></a> <span
+class="cmtt-10">\mmddyyyydate </span></div><hr>
+</p><!--l. 163--><p class="noindent" >
+This declaration will redefine <span
+class="cmtt-10">\today</span><a
+ id="dx1-6003"></a> to produce the current date displayed in the form
+03/08/2000.
+</p><!--l. 167--><p class="noindent" ><hr><div title="Definition"><span class="marginpar"><span
+class="cmtt-9">\mdyyyydate</span><span
+class="cmtt-9">&#x00A0;</span></span><a
+ id="dx1-6004"></a> <span
+class="cmtt-10">\mdyyyydate </span></div><hr>
+</p><!--l. 169--><p class="noindent" >
+This declaration will redefine <span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\today</span></span></span> to produce the current date displayed in the form
+3/8/2000.
+</p><!--l. 173--><p class="noindent" ><hr><div title="Definition"><span class="marginpar"><span
+class="cmtt-9">\mmddyydate</span><span
+class="cmtt-9">&#x00A0;</span></span><a
+ id="dx1-6005"></a> <span
+class="cmtt-10">\mmddyydate </span></div><hr>
+</p><!--l. 175--><p class="noindent" >
+This declaration will redefine <span
+class="cmtt-10">\today</span><a
+ id="dx1-6006"></a> to produce the current date displayed in the form
+03/08/00.
+</p><!--l. 179--><p class="noindent" ><hr><div title="Definition"><span class="marginpar"><span
+class="cmtt-9">\mdyydate</span><span
+class="cmtt-9">&#x00A0;</span></span><a
+ id="dx1-6007"></a> <span
+class="cmtt-10">\mdyydate </span></div><hr>
+</p><!--l. 181--><p class="noindent" >
+This declaration will redefine <span
+class="cmtt-10">\today</span><a
+ id="dx1-6008"></a> to produce the current date displayed in the form
+3/8/00.
+</p><!--l. 185--><p class="noindent" >
+</p>
+<!--l. 185--><p class="noindent" ><a
+href="#top">Top</a><h3 class="subsectionHead"></p><h4 class="subsectionHead"><span class="titlemark">2.4 </span> <a
+ id="x1-70002.4"></a>Dates defined by <span
+class="cmss-10">babel</span></h4>
+<!--l. 187--><p class="noindent" >In addition to the above, the declarations <span
+class="cmtt-10">\date</span>&#x27E8;<span
+class="cmti-10">lang</span>&#x27E9; are available for all languages
+defined either by calling <span
+class="cmss-10">babel</span><a
+ id="dx1-7001"></a> prior to <span
+class="cmss-10">datetime </span>or by passing the language name as an
+
+
+
+option to <span
+class="cmss-10">datetime</span>. See&#x00A0;<a
+href="#x1-100005"><span
+class="cmsy-10">§</span>5 </a><a
+href="#x1-100005">Defining New Date Formats<!--tex4ht:ref: sec:newdate --></a> if you want to define your own
+customised date format.
+</p><!--l. 193--><p class="noindent" >
+</p>
+<!--l. 193--><p class="noindent" ><a
+href="#top">Top</a><h2 class="sectionHead"></p><h3 class="sectionHead"><span class="titlemark">3 </span> <a
+ id="x1-80003"></a>Time Commands</h3>
+<!--l. 195--><p class="noindent" >The current time is displayed using the command
+</p><!--l. 196--><p class="indent" > <hr><div title="Definition"><span class="marginpar"><span
+class="cmtt-9">\currenttime</span><span
+class="cmtt-9">&#x00A0;</span></span><a
+ id="dx1-8001"></a> <span
+class="cmtt-10">\currenttime </span></div><hr>
+</p><!--l. 198--><p class="noindent" >
+</p><!--l. 200--><p class="indent" > A specific time can be displayed using the command
+</p><!--l. 201--><p class="indent" > <hr><div title="Definition"><span class="marginpar"><span
+class="cmtt-9">\formattime</span><span
+class="cmtt-9">&#x00A0;</span></span><a
+ id="dx1-8002"></a> <span
+class="cmtt-10">\formattime{</span>&#x27E8;<span
+class="cmitt-10">hour</span>&#x27E9;<span
+class="cmtt-10">}{</span>&#x27E8;<span
+class="cmitt-10">minute</span>&#x27E9;<span
+class="cmtt-10">}{</span>&#x27E8;<span
+class="cmitt-10">second</span>&#x27E9;<span
+class="cmtt-10">} </span></div><hr>
+</p><!--l. 203--><p class="noindent" >
+where &#x27E8;<span
+class="cmti-10">hour</span>&#x27E9; is a number from&#x00A0;0 to&#x00A0;23, and &#x27E8;<span
+class="cmti-10">minute</span>&#x27E9; and &#x27E8;<span
+class="cmti-10">second</span>&#x27E9; are numbers from&#x00A0;0
+to&#x00A0;59.
+</p><!--l. 207--><p class="indent" > The format can be changed using the declaration
+</p><!--l. 208--><p class="indent" > <hr><div title="Definition"><span class="marginpar"><span
+class="cmtt-9">\settimeformat</span><span
+class="cmtt-9">&#x00A0;</span></span><a
+ id="dx1-8003"></a> <span
+class="cmtt-10">\settimeformat{</span>&#x27E8;<span
+class="cmitt-10">style</span>&#x27E9;<span
+class="cmtt-10">} </span></div><hr>
+</p><!--l. 210--><p class="noindent" >
+where &#x27E8;<span
+class="cmti-10">style</span>&#x27E9; is the name of the format. Predefined formats are:
+ </p><dl class="description"><dt class="description">
+<span
+class="cmbx-10">xxivtime</span> </dt><dd
+class="description">Twenty-four hour time in the form 22:28 (Default)
+ </dd><dt class="description">
+<span
+class="cmbx-10">hhmmsstime</span> </dt><dd
+class="description">Twenty-four hour time in the form 22:28:00
+ </dd><dt class="description">
+<span
+class="cmbx-10">ampmtime</span> </dt><dd
+class="description">Twelve hour time in the form 10:28pm
+ </dd><dt class="description">
+<span
+class="cmbx-10">oclock</span> </dt><dd
+class="description">Displays the current time as a string, e.g.&#x00A0;Twenty-Eight minutes past Ten
+ in the afternoon.</dd></dl>
+<!--l. 221--><p class="indent" > New time formats can be defined using the command:
+</p><!--l. 222--><p class="indent" > <hr><div title="Definition"><span class="marginpar"><span
+class="cmtt-9">\newtimeformat</span><span
+class="cmtt-9">&#x00A0;</span></span><a
+ id="dx1-8004"></a> <span
+class="cmtt-10">\newtimeformat{</span>&#x27E8;<span
+class="cmitt-10">name</span>&#x27E9;<span
+class="cmtt-10">}{</span>&#x27E8;<span
+class="cmitt-10">format</span>&#x27E9;<span
+class="cmtt-10">} </span></div><hr>
+</p><!--l. 224--><p class="noindent" >
+where &#x27E8;<span
+class="cmti-10">name</span>&#x27E9; is the name of the new format (used in <span
+class="cmtt-10">\settimeformat</span><a
+ id="dx1-8005"></a>), and &#x27E8;<span
+class="cmti-10">format</span>&#x27E9; is
+how to format the time. Within &#x27E8;<span
+class="cmti-10">format</span>&#x27E9; you can use the counters <span
+class="cmss-10">HOUR</span><a
+ id="dx1-8006"></a> (number of
+hours after midnight), <span
+class="cmss-10">MINUTE</span><a
+ id="dx1-8007"></a> (number of minutes past the hour), <span
+class="cmss-10">SECOND</span><a
+ id="dx1-8008"></a> (number
+of seconds) <span
+class="cmss-10">HOURXII</span><a
+ id="dx1-8009"></a> (number of hours after midnight/midday), <span
+class="cmss-10">TOHOUR</span><a
+ id="dx1-8010"></a> (the next
+hour) and <span
+class="cmss-10">TOMINUTE</span><a
+ id="dx1-8011"></a> (number of minutes to the next hour), and the corresponding
+commands: <span
+class="cmtt-10">\THEHOUR</span><a
+ id="dx1-8012"></a>, <span
+class="cmtt-10">\THEMINUTE</span><a
+ id="dx1-8013"></a>, <span
+class="cmtt-10">\THESECOND</span><a
+ id="dx1-8014"></a>, <span
+class="cmtt-10">\THEHOURXII</span><a
+ id="dx1-8015"></a>, <span
+class="cmtt-10">\THETOHOUR</span><a
+ id="dx1-8016"></a> and
+<span
+class="cmtt-10">\THETOMINUTE</span><a
+ id="dx1-8017"></a>.
+</p><!--l. 236--><p class="indent" > For example, to define a new time format that uses a dot instead of a colon:
+
+
+
+</p>
+ <div class="verbatim" id="verbatim-3">
+\newtimeformat{dottime}{\twodigit{\THEHOUR}.\twodigit{\THEMINUTE}}
+</div>
+<!--l. 240--><p class="nopar" > You then need to switch to this new format before you can use it:
+
+
+
+</p>
+ <div class="verbatim" id="verbatim-4">
+\settimeformat{dottime}
+&#x00A0;<br />\currenttime
+</div>
+<!--l. 245--><p class="nopar" >
+</p><!--l. 247--><p class="indent" > As from version 2.43, if you only want to change the separator, you can simply
+redefine
+</p><!--l. 249--><p class="indent" > <hr><div title="Definition"><span class="marginpar"><span
+class="cmtt-9">\timeseparator</span><span
+class="cmtt-9">&#x00A0;</span></span><a
+ id="dx1-8018"></a> <span
+class="cmtt-10">\timeseparator </span></div><hr>
+</p><!--l. 251--><p class="noindent" >
+instead of defining a new time format. For example:
+
+
+
+</p>
+ <div class="verbatim" id="verbatim-5">
+\renewcommand{\timeseparator}{.}
+</div>
+<!--l. 255--><p class="nopar" > The <span
+class="cmtt-10">xxivtime </span>format will now work like the <span
+class="cmtt-10">dottime </span>format defined above.
+</p><!--l. 259--><p class="noindent" >
+</p>
+<!--l. 259--><p class="noindent" ><a
+href="#top">Top</a><h2 class="sectionHead"></p><h3 class="sectionHead"><span class="titlemark">4 </span> <a
+ id="x1-90004"></a>Formating Dates</h3>
+<!--l. 260--><p class="noindent" ><hr><div title="Definition"><span class="marginpar"><span
+class="cmtt-9">\pdfdate</span><span
+class="cmtt-9">&#x00A0;</span></span><a
+ id="dx1-9001"></a> <span
+class="cmtt-10">\pdfdate </span></div><hr>
+</p><!--l. 262--><p class="noindent" >
+This command<span class="footnote-mark"><a
+href="#fn2x0" id="fn2x0-bk"><sup class="textsuperscript">2</sup></a></span><a
+ id="x1-9002f2"></a>
+prints the date in the format required for PDF files, e.g.&#x00A0;if the date is 1 May 2004 and
+time is 22:02, <span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\pdfdate</span></span></span> will print 20040501220200. The reason this date format is
+separate from all the others is because the other form doesn&#8217;t get properly expanded by
+PDF<span class="TEX">T<span
+class="E">E</span>X</span>. (This command is defined regardless of whether the package option <span
+class="cmtt-10">nodate</span>
+is called.) Example:
+
+
+
+</p>
+ <div class="verbatim" id="verbatim-6">
+\pdfinfo{
+&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;/Author&#x00A0;(Me)
+&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;/Title&#x00A0;(A&#x00A0;Sample&#x00A0;Document)
+&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;/CreationDate&#x00A0;(D:20040501215500)
+&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;/ModDate&#x00A0;(D:\pdfdate)
+&#x00A0;<br />}
+</div>
+<!--l. 279--><p class="nopar" > <span
+class="cmbx-10">Note </span>that PDF<span class="TEX">T<span
+class="E">E</span>X</span>&#x00A0;introduced the new primitive <span
+class="cmtt-10">\pdfcreationdate </span>in
+version 1.30.0, so <span
+class="cmtt-10">\pdfdate </span>isn&#8217;t required with newer versions of PDF<span class="TEX">T<span
+class="E">E</span>X</span>.
+(<span
+class="cmtt-10">\pdfcreationdate </span>is better than <span
+class="cmtt-10">\pdfdate </span>as it also stores the time zone.)
+</p><!--l. 285--><p class="indent" > There are two commands that print the name of the current month:
+</p><!--l. 287--><p class="indent" > <hr><div title="Definition"><span class="marginpar"><span
+class="cmtt-9">\monthname</span><span
+class="cmtt-9">&#x00A0;</span></span><a
+ id="dx1-9003"></a> <span
+class="cmtt-10">\monthname[</span>&#x27E8;<span
+class="cmitt-10">num</span>&#x27E9;<span
+class="cmtt-10">] </span></div><hr>
+</p><!--l. 289--><p class="noindent" >
+prints the current month name in full, e.g.&#x00A0;August, and
+</p><!--l. 292--><p class="indent" > <hr><div title="Definition"><span class="marginpar"><span
+class="cmtt-9">\shortmonthname</span><span
+class="cmtt-9">&#x00A0;</span></span><a
+ id="dx1-9004"></a> <span
+class="cmtt-10">\shortmonthname[</span>&#x27E8;<span
+class="cmitt-10">num</span>&#x27E9;<span
+class="cmtt-10">] </span></div><hr>
+</p><!--l. 294--><p class="noindent" >
+prints the abbreviated month name, e.g.&#x00A0;Aug. Both <span
+class="cmtt-10">\monthname </span>and <span
+class="cmtt-10">\shortmonthname</span>
+take an optional argument (a number from 1 to 12) if the name of a specific
+month is required. For example, <span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\monthname[6]</span></span></span> will produced the output:
+June.
+</p><!--l. 300--><p class="indent" > The day of the week is computed using the algorithm documented at
+<a
+href="http://userpages.wittenburg.edu/bshelburne/Comp150/DayOfWeek.htm" class="url" ><span
+class="cmtt-10">http://userpages.wittenburg.edu/bshelburne/Comp150/DayOfWeek.htm</span></a>. This
+algorithm works for any date between 1<sup class="textsuperscript"><span
+class="cmr-9">st</span></sup> Jan, 1901 and 31<sup class="textsuperscript"><span
+class="cmr-9">st</span></sup> Dec, 2099. The following
+macros display the day of week for a given date:
+</p><!--l. 306--><p class="indent" > <hr><div title="Definition"><span class="marginpar"><span
+class="cmtt-9">\dayofweekname</span><span
+class="cmtt-9">&#x00A0;</span></span><a
+ id="dx1-9005"></a> <span
+class="cmtt-10">\dayofweekname{</span>&#x27E8;<span
+class="cmitt-10">day</span>&#x27E9;<span
+class="cmtt-10">}{</span>&#x27E8;<span
+class="cmitt-10">month</span>&#x27E9;<span
+class="cmtt-10">}{</span>&#x27E8;<span
+class="cmitt-10">year</span>&#x27E9;<span
+class="cmtt-10">} </span></div><hr>
+</p><!--l. 308--><p class="noindent" >
+prints the day of week for the specified date. For example,
+
+
+
+</p>
+ <div class="verbatim" id="verbatim-7">
+\dayofweekname{31}{10}{2002}
+</div>
+<!--l. 312--><p class="nopar" > will produce the output: Thursday.
+</p><!--l. 315--><p class="indent" > <hr><div title="Definition"><span class="marginpar"><span
+class="cmtt-9">\shortdayofweekname</span><span
+class="cmtt-9">&#x00A0;</span></span><a
+ id="dx1-9006"></a> <span
+class="cmtt-10">\shortdayofweekname</span>&#x27E8;<span
+class="cmitt-10">day</span>&#x27E9;<span
+class="cmtt-10">{</span>&#x27E8;<span
+class="cmitt-10">month</span>&#x27E9;<span
+class="cmtt-10">}{</span>&#x27E8;<span
+class="cmitt-10">year</span>&#x27E9;<span
+class="cmtt-10">} </span></div><hr>
+</p><!--l. 317--><p class="noindent" >
+prints the abbreviated name for the day of week for the specified date. For
+example
+
+
+
+</p>
+ <div class="verbatim" id="verbatim-8">
+\shortdayofweekname{31}{10}{2002}
+</div>
+<!--l. 322--><p class="nopar" > will produce the output: Thu.
+</p><!--l. 325--><p class="indent" > <hr><div title="Definition"><span class="marginpar"><span
+class="cmtt-9">\ifshowdow</span><span
+class="cmtt-9">&#x00A0;</span></span><a
+ id="dx1-9007"></a> <span
+class="cmtt-10">\ifshowdow </span></div><hr>
+</p><!--l. 327--><p class="noindent" >
+This <span class="TEX">T<span
+class="E">E</span>X</span>&#x00A0;conditional can be used to determine whether or not the option <span
+class="cmss-10">dayofweek</span><a
+ id="dx1-9008"></a>
+has been passed to the package. For example:
+
+
+
+</p>
+ <div class="verbatim" id="verbatim-9">
+\ifshowdow\dayofweekname{31}{10}{2002}&#x00A0;\fi
+</div>
+<!--l. 333--><p class="nopar" > will only display the day of week if the <span
+class="cmss-10">dayofweek</span><a
+ id="dx1-9009"></a> option was passed to <span
+class="cmss-10">datetime</span>.
+Alternatively, you can use David&#x00A0;Carlisle&#8217;s <span
+class="cmss-10">ifthen</span><a
+ id="dx1-9010"></a> package:
+
+
+
+</p>
+ <div class="verbatim" id="verbatim-10">
+\ifthenelse{\boolean{showdow}}{\dayofweekname{31}{10}{2002}&#x00A0;}{}
+</div>
+<!--l. 339--><p class="nopar" >
+</p><!--l. 341--><p class="indent" > The command
+</p><!--l. 342--><p class="indent" > <hr><div title="Definition"><span class="marginpar"><span
+class="cmtt-9">\ordinaldate</span><span
+class="cmtt-9">&#x00A0;</span></span><a
+ id="dx1-9011"></a> <span
+class="cmtt-10">\ordinaldate{</span>&#x27E8;<span
+class="cmitt-10">number</span>&#x27E9;<span
+class="cmtt-10">} </span></div><hr>
+</p><!--l. 344--><p class="noindent" >
+displays &#x27E8;<span
+class="cmti-10">number</span>&#x27E9; as a date-type ordinal. If the current language is English, this will
+simply pass the argument to <span
+class="cmtt-10">\ordinalnum</span><a
+ id="dx1-9012"></a> (defined in the <span
+class="cmss-10">fmtcount</span><a
+ id="dx1-9013"></a> package), if the
+current language is Breton, Welsh or French, a superscript will only be added if &#x27E8;<span
+class="cmti-10">number</span>&#x27E9;
+is 1, otherwise only &#x27E8;<span
+class="cmti-10">number</span>&#x27E9; will be displayed.
+</p><!--l. 352--><p class="indent" > The macro<span class="footnote-mark"><a
+href="#fn3x0" id="fn3x0-bk"><sup class="textsuperscript">3</sup></a></span><a
+ id="x1-9014f3"></a>
+</p><!--l. 355--><p class="indent" > <hr><div title="Definition"><span class="marginpar"><span
+class="cmtt-9">\formatdate</span><span
+class="cmtt-9">&#x00A0;</span></span><a
+ id="dx1-9016"></a> <span
+class="cmtt-10">\formatdate{</span>&#x27E8;<span
+class="cmitt-10">day</span>&#x27E9;<span
+class="cmtt-10">}{</span>&#x27E8;<span
+class="cmitt-10">month</span>&#x27E9;<span
+class="cmtt-10">}{</span>&#x27E8;<span
+class="cmitt-10">year</span>&#x27E9;<span
+class="cmtt-10">} </span></div><hr>
+</p><!--l. 357--><p class="noindent" >
+formats the specified date according to the current format of
+<span
+class="cmtt-10">\today</span><a
+ id="dx1-9017"></a><span class="footnote-mark"><a
+href="#fn4x0" id="fn4x0-bk"><sup class="textsuperscript">4</sup></a></span><a
+ id="x1-9018f4"></a>.
+(Arguments must all be integers.) For example, in combination with <span
+class="cmtt-10">\longdate</span><a
+ id="dx1-9022"></a>, the
+command
+
+
+
+</p>
+ <div class="verbatim" id="verbatim-11">
+\formatdate{27}{9}{2004}
+</div>
+<!--l. 366--><p class="nopar" > will produce the output: Monday 27<sup class="textsuperscript"><span
+class="cmr-9">th</span></sup> September, 2004.
+</p><!--l. 370--><p class="indent" > You can ensure that a number is displayed with at least two digits using the
+command
+</p><!--l. 372--><p class="indent" > <hr><div title="Definition"><span class="marginpar"><span
+class="cmtt-9">\twodigit</span><span
+class="cmtt-9">&#x00A0;</span></span><a
+ id="dx1-9023"></a> <span
+class="cmtt-10">\twodigit{</span>&#x27E8;<span
+class="cmitt-10">num</span>&#x27E9;<span
+class="cmtt-10">} </span></div><hr>
+</p><!--l. 374--><p class="noindent" >
+</p><!--l. 376--><p class="noindent" >
+</p>
+<!--l. 376--><p class="noindent" ><a
+href="#top">Top</a><h2 class="sectionHead"></p><h3 class="sectionHead"><span class="titlemark">5 </span> <a
+ id="x1-100005"></a>Defining New Date Formats</h3>
+<!--l. 378--><p class="noindent" >New date formats can be defined using the command:
+</p><!--l. 379--><p class="indent" > <hr><div title="Definition"><span class="marginpar"><span
+class="cmtt-9">\newdateformat</span><span
+class="cmtt-9">&#x00A0;</span></span><a
+ id="dx1-10001"></a> <span
+class="cmtt-10">\newdateformat{</span>&#x27E8;<span
+class="cmitt-10">name</span>&#x27E9;<span
+class="cmtt-10">}{</span>&#x27E8;<span
+class="cmitt-10">format</span>&#x27E9;<span
+class="cmtt-10">} </span></div><hr>
+</p><!--l. 381--><p class="noindent" >
+where &#x27E8;<span
+class="cmti-10">name</span>&#x27E9; is the name of the new format, and &#x27E8;<span
+class="cmti-10">format</span>&#x27E9; is how to format the date.
+Within the argument &#x27E8;<span
+class="cmti-10">format</span>&#x27E9; you can use the commands <span
+class="cmtt-10">\THEDAY</span><a
+ id="dx1-10002"></a>, <span
+class="cmtt-10">\THEMONTH</span><a
+ id="dx1-10003"></a> and
+<span
+class="cmtt-10">\THEYEAR</span><a
+ id="dx1-10004"></a> to represent the relevant day, month and year, or you can use the counters
+<span
+class="cmss-10">DAY</span><a
+ id="dx1-10005"></a>, <span
+class="cmss-10">MONTH</span><a
+ id="dx1-10006"></a> and <span
+class="cmss-10">YEAR</span><a
+ id="dx1-10007"></a> if you want to use <span
+class="cmtt-10">\ordinal</span><a
+ id="dx1-10008"></a> etc. Once you have defined the
+new date format, you can then switch to it using the declaration <span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\</span></span></span>&#x27E8;<span
+class="cmti-10">name</span>&#x27E9; (i.e.&#x00A0;the name
+you specified preceded by a backslash), and subsequent calls to <span
+class="cmtt-10">\today</span><a
+ id="dx1-10009"></a> and
+<span
+class="cmtt-10">\formatdate</span><a
+ id="dx1-10010"></a> will use your new format.
+</p><!--l. 393--><p class="indent" > For example, suppose you want to define a new date format called, say, <span
+class="cmtt-10">mydate</span>, that
+will typeset the date in the form: 8-3-2002, then you can do:
+
+
+
+</p>
+ <div class="verbatim" id="verbatim-12">
+\newdateformat{mydate}{\THEDAY-\THEMONTH-\THEYEAR}
+</div>
+<!--l. 398--><p class="nopar" > <span
+class="cmtt-10">\newdateformat</span><a
+ id="dx1-10011"></a> will then define the declaration <span
+class="cmtt-10">\mydate </span>which can be used to switch
+to your new format. In the following example, two new date formats are defined,
+and they are then selected to produce two different formats for the current
+date:
+
+
+
+</p>
+ <div class="verbatim" id="verbatim-13">
+\newdateformat{dashdate}{%
+&#x00A0;<br />\twodigit{\THEDAY}-\twodigit{\THEMONTH}-\THEYEAR}
+&#x00A0;<br />\newdateformat{usvardate}{%
+&#x00A0;<br />\monthname[\THEMONTH]&#x00A0;\ordinal{DAY},&#x00A0;\THEYEAR}
+&#x00A0;<br />Dash:&#x00A0;\dashdate\today.
+&#x00A0;<br />US:&#x00A0;\usvardate\today.
+</div>
+<!--l. 413--><p class="nopar" > If the current date is, say, 8th March, 2002, the above code will produce the following:
+Dash: 08-03-2002. US: March 8<sup class="textsuperscript"><span
+class="cmr-9">th</span></sup>, 2002.
+</p><!--l. 418--><p class="indent" > Note that <span
+class="cmtt-10">\THEDAY</span><a
+ id="dx1-10012"></a> etc and <span
+class="cmss-10">DAY</span><a
+ id="dx1-10013"></a> etc have no real meaning outside <span
+class="cmtt-10">\newdateformat</span><a
+ id="dx1-10014"></a>
+(this is why they are in uppercase). Incidentally, the <span
+class="cmtt-10">dashdate </span>format is not really
+necessary, as you can achieve this format using:
+
+
+
+</p>
+ <div class="verbatim" id="verbatim-14">
+\renewcommand{\dateseparator}{-}
+&#x00A0;<br />\ddmmyyyydate
+</div>
+<!--l. 426--><p class="nopar" >
+</p><!--l. 428--><p class="indent" > Another note: in the above code, <span
+class="cmtt-10">\ordinal</span><a
+ id="dx1-10015"></a> was used to illustrate the use of the <span
+class="cmss-10">DAY</span><a
+ id="dx1-10016"></a>
+counter. It is better to use <span
+class="cmtt-10">\ordinaldate</span><a
+ id="dx1-10017"></a> instead:
+
+
+
+</p>
+ <div class="verbatim" id="verbatim-15">
+\newdateformat{usvardate}{%
+&#x00A0;<br />\monthname[\THEMONTH]&#x00A0;\ordinaldate{\THEDAY},&#x00A0;\THEYEAR}
+</div>
+<!--l. 434--><p class="nopar" >
+</p><!--l. 436--><p class="noindent" >
+</p>
+<!--l. 436--><p class="noindent" ><a
+href="#top">Top</a><h2 class="sectionHead"></p><h3 class="sectionHead"><span class="titlemark">6 </span> <a
+ id="x1-110006"></a>Saving Dates</h3>
+<!--l. 438--><p class="noindent" >It is possible to save a date for later use using the command:
+<span class="footnote-mark"><a
+href="#fn5x0" id="fn5x0-bk"><sup class="textsuperscript">5</sup></a></span><a
+ id="x1-11001f5"></a>
+</p><!--l. 440--><p class="indent" > <hr><div title="Definition"><span class="marginpar"><span
+class="cmtt-9">\newdate</span><span
+class="cmtt-9">&#x00A0;</span></span><a
+ id="dx1-11002"></a> <span
+class="cmtt-10">\newdate{</span>&#x27E8;<span
+class="cmitt-10">name</span>&#x27E9;<span
+class="cmtt-10">}{</span>&#x27E8;<span
+class="cmitt-10">day</span>&#x27E9;<span
+class="cmtt-10">}{</span>&#x27E8;<span
+class="cmitt-10">month</span>&#x27E9;<span
+class="cmtt-10">}{</span>&#x27E8;<span
+class="cmitt-10">year</span>&#x27E9;<span
+class="cmtt-10">} </span></div><hr>
+</p><!--l. 442--><p class="noindent" >
+</p><!--l. 444--><p class="indent" > This date can later be displayed using the same format as that used by
+<span
+class="cmtt-10">\formatdate</span><a
+ id="dx1-11003"></a> using the command:
+</p><!--l. 446--><p class="indent" > <hr><div title="Definition"><span class="marginpar"><span
+class="cmtt-9">\displaydate</span><span
+class="cmtt-9">&#x00A0;</span></span><a
+ id="dx1-11004"></a> <span
+class="cmtt-10">\displaydate{</span>&#x27E8;<span
+class="cmitt-10">name</span>&#x27E9;<span
+class="cmtt-10">} </span></div><hr>
+</p><!--l. 448--><p class="noindent" >
+</p><!--l. 450--><p class="indent" > Individual elements of the date can be extracted using the commands:
+</p><!--l. 452--><p class="indent" > <hr><div title="Definition"><span class="marginpar"><span
+class="cmtt-9">\getdateday</span><span
+class="cmtt-9">&#x00A0;</span></span><a
+ id="dx1-11005"></a> <span
+class="cmtt-10">\getdateday{</span>&#x27E8;<span
+class="cmitt-10">name</span>&#x27E9;<span
+class="cmtt-10">} </span></div><hr>
+</p><!--l. 454--><p class="noindent" >
+</p><!--l. 455--><p class="indent" > <hr><div title="Definition"><span class="marginpar"><span
+class="cmtt-9">\getdatemonth</span><span
+class="cmtt-9">&#x00A0;</span></span><a
+ id="dx1-11006"></a> <span
+class="cmtt-10">\getdatemonth{</span>&#x27E8;<span
+class="cmitt-10">name</span>&#x27E9;<span
+class="cmtt-10">} </span></div><hr>
+</p><!--l. 457--><p class="noindent" >
+</p><!--l. 458--><p class="indent" > <hr><div title="Definition"><span class="marginpar"><span
+class="cmtt-9">\getdateyear</span><span
+class="cmtt-9">&#x00A0;</span></span><a
+ id="dx1-11007"></a> <span
+class="cmtt-10">\getdateyear{</span>&#x27E8;<span
+class="cmitt-10">name</span>&#x27E9;<span
+class="cmtt-10">} </span></div><hr>
+</p><!--l. 460--><p class="noindent" >
+</p><!--l. 462--><p class="noindent" >
+</p>
+<!--l. 462--><p class="noindent" ><a
+href="#top">Top</a><h2 class="sectionHead"></p><h3 class="sectionHead"><span class="titlemark">7 </span> <a
+ id="x1-120007"></a>Predefined Names</h3>
+<!--l. 464--><p class="noindent" >The following commands are defined by the <span
+class="cmss-10">datetime </span>package:
+</p>
+
+
+
+ <div class="tabular"> <table id="TBL-2" class="tabular"
+cellspacing="0" cellpadding="0"
+><colgroup id="TBL-2-1g"><col
+id="TBL-2-1" /><col
+id="TBL-2-2" /></colgroup><tr
+ style="vertical-align:baseline;" id="TBL-2-1-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-1-1"
+class="td11"><span
+class="cmbx-10">Command Name</span></td><td style="white-space:nowrap; text-align:left;" id="TBL-2-1-2"
+class="td11"><span
+class="cmbx-10">Default Value </span></td></tr><tr
+ style="vertical-align:baseline;" id="TBL-2-2-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-2-1"
+class="td11"><span
+class="cmtt-10">\dateseparator</span><a
+ id="dx1-12001"></a> </td> <td style="white-space:nowrap; text-align:left;" id="TBL-2-2-2"
+class="td11"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">/</span></span></span></td>
+</tr><tr
+ style="vertical-align:baseline;" id="TBL-2-3-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-3-1"
+class="td11"><span
+class="cmtt-10">\timeseparator</span><a
+ id="dx1-12002"></a> </td><td style="white-space:nowrap; text-align:left;" id="TBL-2-3-2"
+class="td11"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">:</span></span></span> </td>
+</tr><tr
+ style="vertical-align:baseline;" id="TBL-2-4-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-4-1"
+class="td11"><span
+class="cmtt-10">\amname</span><a
+ id="dx1-12003"></a> </td><td style="white-space:nowrap; text-align:left;" id="TBL-2-4-2"
+class="td11"><span
+class="cmtt-10">am </span></td>
+</tr><tr
+ style="vertical-align:baseline;" id="TBL-2-5-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-5-1"
+class="td11"><span
+class="cmtt-10">\pmname</span><a
+ id="dx1-12004"></a> </td><td style="white-space:nowrap; text-align:left;" id="TBL-2-5-2"
+class="td11"><span
+class="cmtt-10">pm </span></td>
+</tr><tr
+ style="vertical-align:baseline;" id="TBL-2-6-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-6-1"
+class="td11"><span
+class="cmtt-10">\amorpmname</span><a
+ id="dx1-12005"></a> </td><td style="white-space:nowrap; text-align:left;" id="TBL-2-6-2"
+class="td11"><span
+class="cmtt-10">\amname</span><a
+ id="dx1-12006"></a> if morning, otherwise <span
+class="cmtt-10">\pmname</span><a
+ id="dx1-12007"></a> </td>
+</tr><tr
+ style="vertical-align:baseline;" id="TBL-2-7-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-7-1"
+class="td11"><span
+class="cmtt-10">\amstring</span><a
+ id="dx1-12008"></a> </td><td style="white-space:nowrap; text-align:left;" id="TBL-2-7-2"
+class="td11"><span
+class="cmtt-10">in the morning </span></td>
+</tr><tr
+ style="vertical-align:baseline;" id="TBL-2-8-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-8-1"
+class="td11"><span
+class="cmtt-10">\pmstring</span><a
+ id="dx1-12009"></a> </td><td style="white-space:nowrap; text-align:left;" id="TBL-2-8-2"
+class="td11"><span
+class="cmtt-10">in the afternoon </span></td>
+</tr><tr
+ style="vertical-align:baseline;" id="TBL-2-9-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-9-1"
+class="td11"><span
+class="cmtt-10">\amorpmstring</span><a
+ id="dx1-12010"></a> </td><td style="white-space:nowrap; text-align:left;" id="TBL-2-9-2"
+class="td11"><span
+class="cmtt-10">\amstring</span><a
+ id="dx1-12011"></a> if morning, otherwise <span
+class="cmtt-10">\pmstring</span><a
+ id="dx1-12012"></a></td>
+</tr><tr
+ style="vertical-align:baseline;" id="TBL-2-10-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-10-1"
+class="td11"><span
+class="cmtt-10">\halfpast</span><a
+ id="dx1-12013"></a> </td><td style="white-space:nowrap; text-align:left;" id="TBL-2-10-2"
+class="td11"><span
+class="cmtt-10">Half past </span></td>
+</tr><tr
+ style="vertical-align:baseline;" id="TBL-2-11-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-11-1"
+class="td11"><span
+class="cmtt-10">\quarterpast</span><a
+ id="dx1-12014"></a> </td><td style="white-space:nowrap; text-align:left;" id="TBL-2-11-2"
+class="td11"><span
+class="cmtt-10">Quarter past </span></td>
+</tr><tr
+ style="vertical-align:baseline;" id="TBL-2-12-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-12-1"
+class="td11"><span
+class="cmtt-10">\quarterto</span><a
+ id="dx1-12015"></a> </td><td style="white-space:nowrap; text-align:left;" id="TBL-2-12-2"
+class="td11"><span
+class="cmtt-10">Quarter to </span></td>
+</tr><tr
+ style="vertical-align:baseline;" id="TBL-2-13-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-13-1"
+class="td11"><span
+class="cmtt-10">\noon</span><a
+ id="dx1-12016"></a> </td><td style="white-space:nowrap; text-align:left;" id="TBL-2-13-2"
+class="td11"><span
+class="cmtt-10">Noon </span></td>
+</tr><tr
+ style="vertical-align:baseline;" id="TBL-2-14-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-14-1"
+class="td11"><span
+class="cmtt-10">\midnight</span><a
+ id="dx1-12017"></a> </td><td style="white-space:nowrap; text-align:left;" id="TBL-2-14-2"
+class="td11"><span
+class="cmtt-10">Midnight </span></td>
+</tr><tr
+ style="vertical-align:baseline;" id="TBL-2-15-"><td style="white-space:nowrap; text-align:left;" id="TBL-2-15-1"
+class="td11"><span
+class="cmtt-10">\oclockstring</span><a
+ id="dx1-12018"></a> </td><td style="white-space:nowrap; text-align:left;" id="TBL-2-15-2"
+class="td11"><span
+class="cmtt-10">O&#8217;Clock </span></td> </tr></table>
+</div>
+<!--l. 486--><p class="noindent" >
+</p>
+<!--l. 486--><p class="noindent" ><a
+href="#top">Top</a><h2 class="sectionHead"></p><h3 class="sectionHead"><span class="titlemark">8 </span> <a
+ id="x1-130008"></a>Package Options</h3>
+<!--l. 488--><p class="noindent" >The following options may be passed to this package:
+ </p><dl class="description"><dt class="description">
+<span
+class="cmssbx-10">long</span><a
+ id="dx1-13001"></a> </dt><dd
+class="description">make <span
+class="cmtt-10">\today </span>produce long date
+ </dd><dt class="description">
+<span
+class="cmssbx-10">short</span><a
+ id="dx1-13002"></a> </dt><dd
+class="description">make <span
+class="cmtt-10">\today </span>produce short date
+ </dd><dt class="description">
+<span
+class="cmssbx-10">yyyymmdd</span><a
+ id="dx1-13003"></a> </dt><dd
+class="description">make <span
+class="cmtt-10">\today </span>produce YYYY/MM/DD date
+ </dd><dt class="description">
+<span
+class="cmssbx-10">ddmmyyyy</span><a
+ id="dx1-13004"></a> </dt><dd
+class="description">make <span
+class="cmtt-10">\today </span>produce DD/MM/YYYY date
+ </dd><dt class="description">
+<span
+class="cmssbx-10">dmyyyy</span><a
+ id="dx1-13005"></a> </dt><dd
+class="description">make <span
+class="cmtt-10">\today </span>produce D/M/YYYY date
+ </dd><dt class="description">
+<span
+class="cmssbx-10">ddmmyy</span><a
+ id="dx1-13006"></a> </dt><dd
+class="description">make <span
+class="cmtt-10">\today </span>produce DD/MM/YY date
+ </dd><dt class="description">
+<span
+class="cmssbx-10">dmyy</span><a
+ id="dx1-13007"></a> </dt><dd
+class="description">make <span
+class="cmtt-10">\today </span>produce D/M/YY date
+ </dd><dt class="description">
+<span
+class="cmssbx-10">text</span><a
+ id="dx1-13008"></a> </dt><dd
+class="description">make <span
+class="cmtt-10">\today </span>produce text date in UK style
+ </dd><dt class="description">
+<span
+class="cmssbx-10">us</span><a
+ id="dx1-13009"></a> </dt><dd
+class="description">make <span
+class="cmtt-10">\today </span>produce US style date
+ </dd><dt class="description">
+<span
+class="cmssbx-10">mmddyyyy</span><a
+ id="dx1-13010"></a> </dt><dd
+class="description">make <span
+class="cmtt-10">\today </span>produce MM/DD/YYYY date
+
+
+
+ </dd><dt class="description">
+<span
+class="cmssbx-10">mdyyyy</span><a
+ id="dx1-13011"></a> </dt><dd
+class="description">make <span
+class="cmtt-10">\today </span>produce M/D/YYYY date
+ </dd><dt class="description">
+<span
+class="cmssbx-10">mmddyy</span><a
+ id="dx1-13012"></a> </dt><dd
+class="description">make <span
+class="cmtt-10">\today </span>produce MM/DD/YY date
+ </dd><dt class="description">
+<span
+class="cmssbx-10">mdyy</span><a
+ id="dx1-13013"></a> </dt><dd
+class="description">make <span
+class="cmtt-10">\today </span>produce M/D/YY date
+ </dd><dt class="description">
+<span
+class="cmssbx-10">raise</span><a
+ id="dx1-13014"></a> </dt><dd
+class="description">make ordinal st,nd,rd,th appear as superscript
+ </dd><dt class="description">
+<span
+class="cmssbx-10">level</span><a
+ id="dx1-13015"></a> </dt><dd
+class="description">make ordinal st,nd,rd,th appear level with rest of text
+ </dd><dt class="description">
+<span
+class="cmssbx-10">dayofweek</span><a
+ id="dx1-13016"></a> </dt><dd
+class="description">make the day of week appear for <span
+class="cmtt-10">\longdate</span><a
+ id="dx1-13017"></a>, <span
+class="cmtt-10">\shortdate</span><a
+ id="dx1-13018"></a> or
+ <span
+class="cmtt-10">\textdate</span><a
+ id="dx1-13019"></a>
+ </dd><dt class="description">
+<span
+class="cmssbx-10">nodayofweek</span><a
+ id="dx1-13020"></a> </dt><dd
+class="description">don&#8217;t display the day of week.
+ </dd><dt class="description">
+<span
+class="cmssbx-10">hhmmss</span><a
+ id="dx1-13021"></a> </dt><dd
+class="description">make <span
+class="cmtt-10">\currenttime </span>produce <span
+class="cmtt-10">hhmmsstime </span>format
+ </dd><dt class="description">
+<span
+class="cmssbx-10">24hr</span><a
+ id="dx1-13022"></a> </dt><dd
+class="description">make <span
+class="cmtt-10">\currenttime </span>produce <span
+class="cmtt-10">xxivtime </span>format
+ </dd><dt class="description">
+<span
+class="cmssbx-10">12hr</span><a
+ id="dx1-13023"></a> </dt><dd
+class="description">make <span
+class="cmtt-10">\currenttime </span>produce <span
+class="cmtt-10">ampmtime </span>format
+ </dd><dt class="description">
+<span
+class="cmssbx-10">oclock</span><a
+ id="dx1-13024"></a> </dt><dd
+class="description">make <span
+class="cmtt-10">\currenttime </span>produce <span
+class="cmtt-10">oclock </span>format
+ </dd><dt class="description">
+<span
+class="cmssbx-10">nodate</span><a
+ id="dx1-13025"></a> </dt><dd
+class="description">Don&#8217;t redefine <span
+class="cmtt-10">\today </span>or define the month or day of week commands
+ (useful if you only want the time commands)
+ </dd><dt class="description">
+<span
+class="cmssbx-10">iso</span><a
+ id="dx1-13026"></a> </dt><dd
+class="description">as <span
+class="cmss-10">ddmmyyyy</span><a
+ id="dx1-13027"></a> and <span
+class="cmss-10">hhmmss</span><a
+ id="dx1-13028"></a> but also sets date separator to <span
+class="cmtt-10">- </span>and time separator
+ to <span
+class="cmtt-10">:</span></dd></dl>
+<!--l. 526--><p class="indent" > The default options are: <span
+class="cmss-10">long</span><a
+ id="dx1-13029"></a>, <span
+class="cmss-10">raise</span><a
+ id="dx1-13030"></a>, <span
+class="cmss-10">dayofweek</span><a
+ id="dx1-13031"></a> and <span
+class="cmss-10">24hr</span><a
+ id="dx1-13032"></a>.
+</p><!--l. 529--><p class="noindent" >
+</p>
+<!--l. 529--><p class="noindent" ><a
+href="#top">Top</a><h2 class="sectionHead"></p><h3 class="sectionHead"><span class="titlemark">9 </span> <a
+ id="x1-140009"></a>Multilingual Support</h3>
+
+
+
+<!--l. 531--><p class="noindent" >If you use the <span
+class="cmss-10">ngerman</span><a
+ id="dx1-14001"></a> package, you must use <span
+class="cmss-10">datetime</span>&#8217;s <span
+class="cmss-10">ngerman</span><a
+ id="dx1-14002"></a> package option if you
+want the date displayed in the same form as <span
+class="cmss-10">ngerman</span><a
+ id="dx1-14003"></a>. You must also load <span
+class="cmss-10">ngerman</span><a
+ id="dx1-14004"></a>
+<span
+class="cmti-10">before </span>you load <span
+class="cmss-10">datetime</span>. Similarly for the <span
+class="cmss-10">german</span><a
+ id="dx1-14005"></a> package.
+</p><!--l. 537--><p class="indent" > If you want to use the <span
+class="cmss-10">babel</span><a
+ id="dx1-14006"></a> package, you must load it <span
+class="cmti-10">before </span>you load the <span
+class="cmss-10">datetime</span>
+package. This is because the <span
+class="cmss-10">babel</span><a
+ id="dx1-14007"></a> <span
+class="cmtt-10">\date</span>&#x27E8;<span
+class="cmti-10">lang</span>&#x27E9; commands redefine <span
+class="cmtt-10">\today</span><a
+ id="dx1-14008"></a>, whereas the
+<span
+class="cmss-10">datetime</span><a
+ id="dx1-14009"></a> package redefines <span
+class="cmtt-10">\today </span>to use <span
+class="cmtt-10">\formatdate</span><a
+ id="dx1-14010"></a>, and the date formatting
+commands (such as <span
+class="cmtt-10">\longdate</span><a
+ id="dx1-14011"></a>) redefine <span
+class="cmtt-10">\formatdate </span>rather than <span
+class="cmtt-10">\today</span>. This ensures
+consistent formatting of the dates whether you use <span
+class="cmtt-10">\today </span>or <span
+class="cmtt-10">\formatdate</span>. Therefore,
+the <span
+class="cmss-10">datetime </span>package has to redefine all the <span
+class="cmtt-10">\date</span>&#x27E8;<span
+class="cmti-10">lang</span>&#x27E9; commands accordingly. Thus the
+multilingual date support is mostly limited to that provided by <span
+class="cmss-10">babel</span><a
+ id="dx1-14012"></a>. Additional
+support, such as the day of week names and abbreviations, are only supplied for
+those languages that I know, or that other people have been able to supply for
+me.
+</p><!--l. 553--><p class="indent" > As from v2.56, the package options supplied to <span
+class="cmss-10">datetime </span>override <span
+class="cmss-10">babel</span><a
+ id="dx1-14013"></a>&#8217;s date
+format. For example:
+
+
+
+</p>
+ <div class="verbatim" id="verbatim-16">
+\usepackage[french,spanish]{babel}
+&#x00A0;<br />\usepackage[ddmmyyyy]{datetime}
+</div>
+<!--l. 558--><p class="nopar" > will use ddmmyyyy date format regardless of language. Note that if you use a
+declaration instead of a package option, for example:
+
+
+
+</p>
+ <div class="verbatim" id="verbatim-17">
+\usepackage[french,spanish]{babel}
+&#x00A0;<br />\usepackage{datetime}
+&#x00A0;<br />\ddmmyyyydate
+</div>
+<!--l. 566--><p class="nopar" > the date format will be switched back to <span
+class="cmtt-10">\datefrench </span>or <span
+class="cmtt-10">\datespanish </span>whenever the
+language is set. You can use
+</p><!--l. 569--><p class="indent" > <hr><div title="Definition"><span class="marginpar"><span
+class="cmtt-9">\setdefaultdate</span><span
+class="cmtt-9">&#x00A0;</span></span><a
+ id="dx1-14014"></a> <span
+class="cmtt-10">\setdefaultdate{</span>&#x27E8;<span
+class="cmitt-10">declaration</span>&#x27E9;<span
+class="cmtt-10">} </span></div><hr>
+</p><!--l. 571--><p class="noindent" >
+to always use <span
+class="cmtt-10">{</span>&#x27E8;<span
+class="cmti-10">declaration</span>&#x27E9;<span
+class="cmtt-10">} </span>whenever the language is set. For example:
+
+
+
+</p>
+ <div class="verbatim" id="verbatim-18">
+\setdefaultdate{\ddmmyyyydate}
+</div>
+<!--l. 576--><p class="nopar" >
+</p><!--l. 578--><p class="indent" > The commands <span
+class="cmtt-10">\monthname</span><a
+ id="dx1-14015"></a> and <span
+class="cmtt-10">\shortmonthname</span><a
+ id="dx1-14016"></a>, will produce the month name in
+the current language. If you want the month name in a specific language, you
+can use the command <span
+class="cmtt-10">\monthname</span>&#x27E8;<span
+class="cmti-10">lang</span>&#x27E9;. For example, <span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\monthnamefrench[6]</span></span></span>
+will produce the output: juin. Note that <span
+class="cmtt-10">\textdate</span><a
+ id="dx1-14017"></a> is formatted for English
+dates, and won&#8217;t look right if used with another language setting. If you want
+a textual date, the <span
+class="cmss-10">fmtcount</span><a
+ id="dx1-14018"></a> package (which is loaded by <span
+class="cmss-10">datetime</span>) defines
+some commands which display a number or ordinal as a word, but it only has
+very limited multilingual support. See the <span
+class="cmss-10">fmtcount</span><a
+ id="dx1-14019"></a> documentation for further
+details.
+</p><!--l. 591--><p class="noindent" >
+</p>
+<!--l. 591--><p class="noindent" ><a
+href="#top">Top</a><h2 class="sectionHead"></p><h3 class="sectionHead"><span class="titlemark">10 </span> <a
+ id="x1-1500010"></a>Registers</h3>
+<!--l. 593--><p class="noindent" ><span class="TEX">T<span
+class="E">E</span>X</span>&#x00A0;provides <span
+class="cmtt-10">\day</span><a
+ id="dx1-15001"></a>, <span
+class="cmtt-10">\month</span><a
+ id="dx1-15002"></a> and <span
+class="cmtt-10">\year</span><a
+ id="dx1-15003"></a> registers. In addition, <span
+class="cmss-10">datetime </span>provides the
+registers: <span
+class="cmtt-10">\currenthour</span><a
+ id="dx1-15004"></a>, <span
+class="cmtt-10">\currentminute</span><a
+ id="dx1-15005"></a> and <span
+class="cmtt-10">\currentsecond</span><a
+ id="dx1-15006"></a>. Note that old
+distributions of <span class="TEX">T<span
+class="E">E</span>X</span>&#x00A0;will always have <span
+class="cmtt-10">\currentsecond </span>set to zero.
+</p><!--l. 599--><p class="noindent" >
+</p>
+<!--l. 599--><p class="noindent" ><a
+href="#top">Top</a><h2 class="sectionHead"></p><h3 class="sectionHead"><span class="titlemark">11 </span> <a
+ id="x1-1600011"></a>Configuration File</h3>
+<!--l. 601--><p class="noindent" >As from Version 2.4, the <span
+class="cmss-10">datetime </span>package will read in settings from the configuration
+file <span
+class="cmtt-10">datetime.cfg</span>, if it exists, which will override the default package options.
+For example, suppose you prefer a short date without the day of week by
+default, you will need to create a file called <span
+class="cmtt-10">datetime.cfg </span>that contains the
+line:
+
+
+
+</p>
+ <div class="verbatim" id="verbatim-19">
+\shortdate\showdowfalse
+</div>
+<!--l. 609--><p class="nopar" > The file <span
+class="cmtt-10">datetime.cfg </span>should then go somewhere on the <span class="TEX">T<span
+class="E">E</span>X</span>&#x00A0;path. Now all you need
+to do is:
+
+
+
+</p>
+ <div class="verbatim" id="verbatim-20">
+\usepackage{datetime}
+</div>
+<!--l. 614--><p class="nopar" > without having to specify the <span
+class="cmss-10">short</span><a
+ id="dx1-16001"></a> and <span
+class="cmss-10">nodayofweek</span><a
+ id="dx1-16002"></a> options.
+</p><!--l. 618--><p class="indent" > You can also use this file to define and set your own date styles. For example, you
+could create a configuration file that has the following lines:
+
+
+
+</p>
+ <div class="verbatim" id="verbatim-21">
+\newdateformat{dashdate}{\twodigit{\THEDAY}-\twodigit{\THEMONTH}-\THEYEAR}
+&#x00A0;<br />\dashdate
+</div>
+<!--l. 624--><p class="nopar" > Whenever you use the <span
+class="cmss-10">datetime </span>package, it will now use this format by default.
+</p><!--l. 628--><p class="noindent" >
+</p>
+<!--l. 628--><p class="noindent" ><a
+href="#top">Top</a><h2 class="sectionHead"></p><h3 class="sectionHead"><span class="titlemark">12 </span> <a
+ id="x1-1700012"></a>LaTeX2HTML styles</h3>
+<a
+ id="dx1-17001"></a>
+<a
+ id="dx1-17002"></a>
+<!--l. 632--><p class="noindent" >Version 2.43 and above of the <span
+class="cmss-10">datetime </span>bundle supplies the LaTeX2HTML style file
+<span
+class="cmtt-10">datetime.perl</span>. This file should be placed in a directory searched by LaTeX2HTML.
+The following limitations apply to the LaTeX2HTML styles:
+</p>
+ <ul class="itemize1">
+ <li class="itemize">The configuration file <span
+class="cmtt-10">datetime.cfg </span>is currently ignored. You can however
+ do:
+
+
+
+ <div class="verbatim" id="verbatim-22">
+ \usepackage{datetime}
+ &#x00A0;<br />\html{\input{datetime.cfg}}
+</div>
+ <!--l. 645--><p class="nopar" > This, I agree, is an unpleasant cludge.
+ </p></li>
+ <li class="itemize">The commands <span
+class="cmtt-10">\monthname</span>&#x27E8;<span
+class="cmti-10">language</span>&#x27E9; are not implemented.
+ </li>
+ <li class="itemize">Some of the languages are not implemented.
+ </li>
+ <li class="itemize">The package option <span
+class="cmss-10">nodate</span><a
+ id="dx1-17003"></a> is not implemented.
+ </li></ul>
+<!--l. 657--><p class="noindent" >
+</p>
+<!--l. 657--><p class="noindent" ><a
+href="#top">Top</a><h2 class="sectionHead"></p><h3 class="sectionHead"><span class="titlemark">13 </span> <a
+ id="x1-1800013"></a>Troubleshooting</h3>
+<!--l. 659--><p class="noindent" >There is a <span
+class="cmss-10">datetime</span><a
+ id="dx1-18001"></a> FAQ available at: <a
+href="http://www.dickimaw-books.com/faqs/datetimefaq.html" class="url" ><span
+class="cmtt-10">http://www.dickimaw-books.com/faqs/datetimefaq.html</span></a>.
+</p><!--l. 664--><p class="indent" > <a
+ id="likesection.1"></a><a
+ id="Q1-1-19"></a>
+
+
+
+ <a
+ id="likesection.2"></a><a
+ id="Q1-1-20"></a>
+</p>
+ <h3 class="likesectionHead"><a
+ id="x1-1900013"></a>Index</h3>
+<!--l. 4--><p class="noindent" > <span
+class="cmbx-10">A</span>
+</p>
+ <div class="theindex"><span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\amname</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-12003" ><span class="underline">1</span></a>, <a
+href="datetime-manual.html#dx1-12006" ><span class="underline">2</span></a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\amorpmname</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-12005" ><span class="underline">3</span></a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\amorpmstring</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-12010" ><span class="underline">4</span></a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\amstring</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-12008" ><span class="underline">5</span></a>, <a
+href="datetime-manual.html#dx1-12011" ><span class="underline">6</span></a> <br /></span>
+<p class="theindex"> <span
+class="cmbx-10">B</span>
+<span class="index-item"><span
+class="cmss-10">babel </span>package&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-2011" >7</a>, <a
+href="datetime-manual.html#dx1-2012" >8</a>, <a
+href="datetime-manual.html#dx1-7001" >9</a>, <a
+href="datetime-manual.html#dx1-14006" >10</a>, <a
+href="datetime-manual.html#dx1-14007" >11</a>, <a
+href="datetime-manual.html#dx1-14012" >12</a>, <a
+href="datetime-manual.html#dx1-14013" >13</a> <br /></span>
+</p><p class="theindex"> <span
+class="cmbx-10">C</span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\currenthour</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-15004" ><span class="underline">14</span></a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\currentminute</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-15005" ><span class="underline">15</span></a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\currentsecond</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-15006" ><span class="underline">16</span></a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\currenttime</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-8001" ><span
+class="cmti-10">17</span></a> <br /></span>
+</p><p class="theindex"> <span
+class="cmbx-10">D</span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\dateseparator</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-3003" ><span
+class="cmti-10">18</span></a>, <a
+href="datetime-manual.html#dx1-4003" ><span class="underline">19</span></a>, <a
+href="datetime-manual.html#dx1-12001" ><span class="underline">20</span></a> <br /></span>
+<span class="index-item"><span
+class="cmss-10">datetime </span>package&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-14009" >21</a>, <a
+href="datetime-manual.html#dx1-18001" >22</a> <br /></span>
+<span class="index-item"><span
+class="cmss-10">datetime2 </span>package&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-2" >23</a> <br /></span>
+<span class="index-item"><span
+class="cmtt-10">DAY </span>(counter)&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-10005" >24</a>, <a
+href="datetime-manual.html#dx1-10013" >25</a>, <a
+href="datetime-manual.html#dx1-10016" >26</a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\day</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-15001" ><span class="underline">27</span></a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\dayofweekname</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-9005" ><span
+class="cmti-10">28</span></a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\ddmmyydate</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-5013" ><span
+class="cmti-10">29</span></a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\ddmmyyyydate</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-3002" ><span class="underline">30</span></a>, <a
+href="datetime-manual.html#dx1-5009" ><span
+class="cmti-10">31</span></a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\displaydate</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-11004" ><span
+class="cmti-10">32</span></a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\dmyydate</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-5015" ><span
+class="cmti-10">33</span></a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\dmyyyydate</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-5011" ><span
+class="cmti-10">34</span></a> <br /></span>
+</p><p class="theindex"> <span
+class="cmbx-10">F</span>
+<span class="index-item"><span
+class="cmss-10">fmtcount </span>package&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-2007" >35</a>, <a
+href="datetime-manual.html#dx1-2009" >36</a>, <a
+href="datetime-manual.html#dx1-5023" >37</a>, <a
+href="datetime-manual.html#dx1-9013" >38</a>, <a
+href="datetime-manual.html#dx1-14018" >39</a>, <a
+href="datetime-manual.html#dx1-14019" >40</a>, <a
+href="datetime-manual.html#dx1-5022" >41</a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\formatdate</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-9016" ><span
+class="cmti-10">42</span></a>, <a
+href="datetime-manual.html#dx1-10010" ><span class="underline">43</span></a>, <a
+href="datetime-manual.html#dx1-11003" ><span class="underline">44</span></a>, <a
+href="datetime-manual.html#dx1-14010" ><span class="underline">45</span></a>, <a
+href="datetime-manual.html#dx1-9020" ><span class="underline">46</span></a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\formattime</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-8002" ><span
+class="cmti-10">47</span></a> <br /></span>
+</p><p class="theindex"> <span
+class="cmbx-10">G</span>
+
+
+
+<span class="index-item"><span
+class="cmss-10">german </span>package&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-14005" >48</a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\getdateday</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-11005" ><span
+class="cmti-10">49</span></a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\getdatemonth</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-11006" ><span
+class="cmti-10">50</span></a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\getdateyear</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-11007" ><span
+class="cmti-10">51</span></a> <br /></span>
+</p><p class="theindex"> <span
+class="cmbx-10">H</span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\halfpast</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-12013" ><span class="underline">52</span></a> <br /></span>
+<span class="index-item"><span
+class="cmtt-10">HOUR </span>(counter)&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-8006" >53</a> <br /></span>
+<span class="index-item"><span
+class="cmtt-10">HOURXII </span>(counter)&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-8009" >54</a> <br /></span>
+</p><p class="theindex"> <span
+class="cmbx-10">I</span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\ifshowdow</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-9007" ><span
+class="cmti-10">55</span></a> <br /></span>
+<span class="index-item"><span
+class="cmss-10">ifthen </span>package&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-9010" >56</a> <br /></span>
+</p><p class="theindex"> <span
+class="cmbx-10">L</span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\longdate</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-5001" ><span
+class="cmti-10">57</span></a>, <a
+href="datetime-manual.html#dx1-9022" ><span class="underline">58</span></a>, <a
+href="datetime-manual.html#dx1-13017" ><span class="underline">59</span></a>, <a
+href="datetime-manual.html#dx1-14011" ><span class="underline">60</span></a>, <a
+href="datetime-manual.html#dx1-9021" ><span class="underline">61</span></a> <br /></span>
+</p><p class="theindex"> <span
+class="cmbx-10">M</span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\mdyydate</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-6007" ><span
+class="cmti-10">62</span></a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\mdyyyydate</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-6004" ><span
+class="cmti-10">63</span></a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\midnight</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-12017" ><span class="underline">64</span></a> <br /></span>
+<span class="index-item"><span
+class="cmtt-10">MINUTE </span>(counter)&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-8007" >65</a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\mmddyydate</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-6005" ><span
+class="cmti-10">66</span></a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\mmddyyyydate</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-6002" ><span
+class="cmti-10">67</span></a> <br /></span>
+<span class="index-item"><span
+class="cmtt-10">MONTH </span>(counter)&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-10006" >68</a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\month</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-15002" ><span class="underline">69</span></a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\monthname</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-9003" ><span
+class="cmti-10">70</span></a>, <a
+href="datetime-manual.html#dx1-14015" ><span class="underline">71</span></a> <br /></span>
+</p><p class="theindex"> <span
+class="cmbx-10">N</span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\newdate</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-11002" ><span
+class="cmti-10">72</span></a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\newdateformat</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-10001" ><span
+class="cmti-10">73</span></a>, <a
+href="datetime-manual.html#dx1-10011" ><span class="underline">74</span></a>, <a
+href="datetime-manual.html#dx1-10014" ><span class="underline">75</span></a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\newtimeformat</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-8004" ><span
+class="cmti-10">76</span></a> <br /></span>
+<span class="index-item"><span
+class="cmss-10">ngerman </span>package&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-14001" >77</a>, <a
+href="datetime-manual.html#dx1-14003" >78</a>, <a
+href="datetime-manual.html#dx1-14004" >79</a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\noon</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-12016" ><span class="underline">80</span></a> <br /></span>
+</p><p class="theindex"> <span
+class="cmbx-10">O</span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\oclockstring</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-12018" ><span class="underline">81</span></a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\ordinal</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-2008" ><span class="underline">82</span></a>, <a
+href="datetime-manual.html#dx1-10008" ><span class="underline">83</span></a>, <a
+href="datetime-manual.html#dx1-10015" ><span class="underline">84</span></a> <br /></span>
+
+
+
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\ordinaldate</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-9011" ><span
+class="cmti-10">85</span></a>, <a
+href="datetime-manual.html#dx1-10017" ><span class="underline">86</span></a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\ordinalnum</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-9012" ><span class="underline">87</span></a> <br /></span>
+</p><p class="theindex"> <span
+class="cmbx-10">P</span>
+<span class="index-item">package options:<br /></span>
+<span class="index-subitem">&#x00A0;&#x00A0;&#x00A0;&#x00A0;<span
+class="cmss-10">12hr</span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-13023" ><span class="underline">88</span></a> <br /></span>
+<span class="index-subitem">&#x00A0;&#x00A0;&#x00A0;&#x00A0;<span
+class="cmss-10">24hr</span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-13022" ><span class="underline">89</span></a>, <a
+href="datetime-manual.html#dx1-13032" ><span class="underline">90</span></a> <br /></span>
+<span class="index-subitem">&#x00A0;&#x00A0;&#x00A0;&#x00A0;<span
+class="cmss-10">dayofweek</span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-5003" ><span class="underline">91</span></a>, <a
+href="datetime-manual.html#dx1-5007" ><span class="underline">92</span></a>, <a
+href="datetime-manual.html#dx1-5019" ><span class="underline">93</span></a>, <a
+href="datetime-manual.html#dx1-9008" ><span class="underline">94</span></a>, <a
+href="datetime-manual.html#dx1-9009" ><span class="underline">95</span></a>, <a
+href="datetime-manual.html#dx1-13016" ><span class="underline">96</span></a>, <a
+href="datetime-manual.html#dx1-13031" ><span class="underline">97</span></a> <br /></span>
+<span class="index-subitem">&#x00A0;&#x00A0;&#x00A0;&#x00A0;<span
+class="cmss-10">ddmmyy</span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-13006" ><span class="underline">98</span></a> <br /></span>
+<span class="index-subitem">&#x00A0;&#x00A0;&#x00A0;&#x00A0;<span
+class="cmss-10">ddmmyyyy</span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-13004" ><span class="underline">99</span></a>, <a
+href="datetime-manual.html#dx1-13027" ><span class="underline">100</span></a> <br /></span>
+<span class="index-subitem">&#x00A0;&#x00A0;&#x00A0;&#x00A0;<span
+class="cmss-10">dmyy</span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-13007" ><span class="underline">101</span></a> <br /></span>
+<span class="index-subitem">&#x00A0;&#x00A0;&#x00A0;&#x00A0;<span
+class="cmss-10">dmyyyy</span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-13005" ><span class="underline">102</span></a> <br /></span>
+<span class="index-subitem">&#x00A0;&#x00A0;&#x00A0;&#x00A0;<span
+class="cmss-10">hhmmss</span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-13021" ><span class="underline">103</span></a>, <a
+href="datetime-manual.html#dx1-13028" ><span class="underline">104</span></a> <br /></span>
+<span class="index-subitem">&#x00A0;&#x00A0;&#x00A0;&#x00A0;<span
+class="cmss-10">iso</span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-13026" ><span class="underline">105</span></a> <br /></span>
+<span class="index-subitem">&#x00A0;&#x00A0;&#x00A0;&#x00A0;<span
+class="cmss-10">level</span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-13015" ><span class="underline">106</span></a> <br /></span>
+<span class="index-subitem">&#x00A0;&#x00A0;&#x00A0;&#x00A0;<span
+class="cmss-10">long</span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-13001" ><span class="underline">107</span></a>, <a
+href="datetime-manual.html#dx1-13029" ><span class="underline">108</span></a> <br /></span>
+<span class="index-subitem">&#x00A0;&#x00A0;&#x00A0;&#x00A0;<span
+class="cmss-10">mdyy</span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-13013" ><span class="underline">109</span></a> <br /></span>
+<span class="index-subitem">&#x00A0;&#x00A0;&#x00A0;&#x00A0;<span
+class="cmss-10">mdyyyy</span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-13011" ><span class="underline">110</span></a> <br /></span>
+<span class="index-subitem">&#x00A0;&#x00A0;&#x00A0;&#x00A0;<span
+class="cmss-10">mmddyy</span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-13012" ><span class="underline">111</span></a> <br /></span>
+<span class="index-subitem">&#x00A0;&#x00A0;&#x00A0;&#x00A0;<span
+class="cmss-10">mmddyyyy</span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-13010" ><span class="underline">112</span></a> <br /></span>
+<span class="index-subitem">&#x00A0;&#x00A0;&#x00A0;&#x00A0;<span
+class="cmss-10">ngerman</span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-14002" ><span class="underline">113</span></a> <br /></span>
+<span class="index-subitem">&#x00A0;&#x00A0;&#x00A0;&#x00A0;<span
+class="cmss-10">nodate</span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-2004" ><span class="underline">114</span></a>, <a
+href="datetime-manual.html#dx1-13025" ><span class="underline">115</span></a>, <a
+href="datetime-manual.html#dx1-17003" ><span class="underline">116</span></a> <br /></span>
+<span class="index-subitem">&#x00A0;&#x00A0;&#x00A0;&#x00A0;<span
+class="cmss-10">nodayofweek</span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-5004" ><span class="underline">117</span></a>, <a
+href="datetime-manual.html#dx1-5008" ><span class="underline">118</span></a>, <a
+href="datetime-manual.html#dx1-5020" ><span class="underline">119</span></a>, <a
+href="datetime-manual.html#dx1-13020" ><span class="underline">120</span></a>, <a
+href="datetime-manual.html#dx1-16002" ><span class="underline">121</span></a> <br /></span>
+<span class="index-subitem">&#x00A0;&#x00A0;&#x00A0;&#x00A0;<span
+class="cmss-10">oclock</span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-13024" ><span class="underline">122</span></a> <br /></span>
+<span class="index-subitem">&#x00A0;&#x00A0;&#x00A0;&#x00A0;<span
+class="cmss-10">raise</span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-13014" ><span class="underline">123</span></a>, <a
+href="datetime-manual.html#dx1-13030" ><span class="underline">124</span></a> <br /></span>
+<span class="index-subitem">&#x00A0;&#x00A0;&#x00A0;&#x00A0;<span
+class="cmss-10">short</span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-13002" ><span class="underline">125</span></a>, <a
+href="datetime-manual.html#dx1-16001" ><span class="underline">126</span></a> <br /></span>
+<span class="index-subitem">&#x00A0;&#x00A0;&#x00A0;&#x00A0;<span
+class="cmss-10">text</span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-13008" ><span class="underline">127</span></a> <br /></span>
+<span class="index-subitem">&#x00A0;&#x00A0;&#x00A0;&#x00A0;<span
+class="cmss-10">us</span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-13009" ><span class="underline">128</span></a> <br /></span>
+<span class="index-subitem">&#x00A0;&#x00A0;&#x00A0;&#x00A0;<span
+class="cmss-10">yyyymmdd</span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-13003" ><span class="underline">129</span></a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\pdfdate</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-9001" ><span
+class="cmti-10">130</span></a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\pmname</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-12004" ><span class="underline">131</span></a>, <a
+href="datetime-manual.html#dx1-12007" ><span class="underline">132</span></a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\pmstring</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-12009" ><span class="underline">133</span></a>, <a
+href="datetime-manual.html#dx1-12012" ><span class="underline">134</span></a> <br /></span>
+</p><p class="theindex"> <span
+class="cmbx-10">Q</span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\quarterpast</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-12014" ><span class="underline">135</span></a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\quarterto</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-12015" ><span class="underline">136</span></a> <br /></span>
+</p><p class="theindex"> <span
+class="cmbx-10">S</span>
+<span class="index-item"><span
+class="cmtt-10">SECOND </span>(counter)&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-8008" >137</a> <br /></span>
+<span class="index-item"><span
+class="cmss-10">seminar </span>package&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-9015" >138</a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\setdefaultdate</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-14014" ><span
+class="cmti-10">139</span></a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\settimeformat</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-8003" ><span
+class="cmti-10">140</span></a>, <a
+href="datetime-manual.html#dx1-8005" ><span class="underline">141</span></a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\shortdate</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-5005" ><span
+class="cmti-10">142</span></a>, <a
+href="datetime-manual.html#dx1-13018" ><span class="underline">143</span></a> <br /></span>
+
+
+
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\shortdayofweekname</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-9006" ><span
+class="cmti-10">144</span></a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\shortmonthname</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-9004" ><span
+class="cmti-10">145</span></a>, <a
+href="datetime-manual.html#dx1-14016" ><span class="underline">146</span></a> <br /></span>
+</p><p class="theindex"> <span
+class="cmbx-10">T</span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\textdate</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-5017" ><span
+class="cmti-10">147</span></a>, <a
+href="datetime-manual.html#dx1-13019" ><span class="underline">148</span></a>, <a
+href="datetime-manual.html#dx1-14017" ><span class="underline">149</span></a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\THEDAY</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-10002" ><span class="underline">150</span></a>, <a
+href="datetime-manual.html#dx1-10012" ><span class="underline">151</span></a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\THEHOUR</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-8012" ><span class="underline">152</span></a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\THEHOURXII</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-8015" ><span class="underline">153</span></a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\THEMINUTE</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-8013" ><span class="underline">154</span></a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\THEMONTH</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-10003" ><span class="underline">155</span></a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\THESECOND</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-8014" ><span class="underline">156</span></a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\THETOHOUR</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-8016" ><span class="underline">157</span></a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\THETOMINUTE</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-8017" ><span class="underline">158</span></a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\THEYEAR</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-10004" ><span class="underline">159</span></a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\timeseparator</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-8018" ><span
+class="cmti-10">160</span></a>, <a
+href="datetime-manual.html#dx1-12002" ><span class="underline">161</span></a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\today</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-2003" ><span class="underline">162</span></a>, <a
+href="datetime-manual.html#dx1-3001" ><span class="underline">163</span></a>, <a
+href="datetime-manual.html#dx1-4002" ><span class="underline">164</span></a>, <a
+href="datetime-manual.html#dx1-5002" ><span class="underline">165</span></a>, <a
+href="datetime-manual.html#dx1-5006" ><span class="underline">166</span></a>, <a
+href="datetime-manual.html#dx1-5010" ><span class="underline">167</span></a>, <a
+href="datetime-manual.html#dx1-5012" ><span class="underline">168</span></a>, <a
+href="datetime-manual.html#dx1-5014" ><span class="underline">169</span></a>, <a
+href="datetime-manual.html#dx1-5016" ><span class="underline">170</span></a>, <a
+href="datetime-manual.html#dx1-5018" ><span class="underline">171</span></a>, <a
+href="datetime-manual.html#dx1-6003" ><span class="underline">172</span></a>, <a
+href="datetime-manual.html#dx1-6006" ><span class="underline">173</span></a>, <a
+href="datetime-manual.html#dx1-6008" ><span class="underline">174</span></a>, <a
+href="datetime-manual.html#dx1-9017" ><span class="underline">175</span></a>, <a
+href="datetime-manual.html#dx1-10009" ><span class="underline">176</span></a>, <a
+href="datetime-manual.html#dx1-14008" ><span class="underline">177</span></a>, <a
+href="datetime-manual.html#dx1-9019" ><span class="underline">178</span></a> <br /></span>
+<span class="index-item"><span
+class="cmtt-10">TOHOUR </span>(counter)&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-8010" >179</a> <br /></span>
+<span class="index-item"><span
+class="cmtt-10">TOMINUTE </span>(counter)&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-8011" >180</a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\twodigit</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-9023" ><span
+class="cmti-10">181</span></a> <br /></span>
+</p><p class="theindex"> <span
+class="cmbx-10">U</span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\usdate</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-6001" ><span
+class="cmti-10">182</span></a> <br /></span>
+</p><p class="theindex"> <span
+class="cmbx-10">Y</span>
+<span class="index-item"><span
+class="cmtt-10">YEAR </span>(counter)&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-10007" >183</a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\year</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-15003" ><span class="underline">184</span></a> <br /></span>
+<span class="index-item"><span class="obeylines-h"><span class="verb"><span
+class="cmtt-10">\yyyymmdddate</span></span></span>&#x00A0;&#x00A0;<a
+href="datetime-manual.html#dx1-4001" ><span
+class="cmti-10">185</span></a> <br /></span>
+</p></div>
+ <div class="footnotes"><!--l. 148--><p class="noindent" ><span class="footnote-mark"><a
+href="#fn1x0-bk" id="fn1x0"><sup class="textsuperscript">1</sup></a></span><span
+class="cmr-8">in fact, you may get an error from the </span><span
+class="cmss-8">fmtcount</span><a
+ id="dx1-5022"></a> <span
+class="cmr-8">package if you are using a language that it doesn&#8217;t</span>
+<span
+class="cmr-8">support.</span></p>
+<!--l. 264--><p class="noindent" ><span class="footnote-mark"><a
+href="#fn2x0-bk" id="fn2x0"><sup class="textsuperscript">2</sup></a></span><span
+class="cmr-8">thanks to Ulrich Dirr for asking about this</span></p>
+<!--l. 354--><p class="indent" > <span class="footnote-mark"><a
+href="#fn3x0-bk" id="fn3x0"><sup class="textsuperscript">3</sup></a></span><span
+class="cmr-8">Note the name change since version 1.1. The command name was changed from </span><span
+class="cmtt-8">\thedate </span><span
+class="cmr-8">to</span>
+<span
+class="cmtt-8">\formatdate </span><span
+class="cmr-8">to avoid a name clash when using the </span><span
+class="cmss-8">seminar</span><a
+ id="dx1-9015"></a> <span
+class="cmr-8">class file.</span></p>
+<!--l. 361--><p class="indent" > <span class="footnote-mark"><a
+href="#fn4x0-bk" id="fn4x0"><sup class="textsuperscript">4</sup></a></span><span
+class="cmr-8">To be more precise, </span><span
+class="cmtt-8">\today</span><a
+ id="dx1-9019"></a> <span
+class="cmr-8">is defined to be </span><span
+class="cmtt-8">\formatdate</span><a
+ id="dx1-9020"></a><span
+class="cmsy-8">{</span><span
+class="cmtt-8">\day</span><span
+class="cmsy-8">}{</span><span
+class="cmtt-8">\month</span><span
+class="cmsy-8">}{</span><span
+class="cmtt-8">\year</span><span
+class="cmsy-8">} </span><span
+class="cmr-8">where</span>
+<span
+class="cmtt-8">\longdate</span><a
+ id="dx1-9021"></a> <span
+class="cmr-8">etc change the definition of </span><span
+class="cmtt-8">\formatdate</span></p>
+<!--l. 439--><p class="indent" > <span class="footnote-mark"><a
+href="#fn5x0-bk" id="fn5x0"><sup class="textsuperscript">5</sup></a></span><span
+class="cmr-8">Thanks to Denis Bitouz</span><span
+class="cmr-8">é</span> <span
+class="cmr-8">for asking about this</span></p> </div>
+
+</body></html>
+
+
+
+
diff --git a/obsolete/macros/latex/contrib/datetime/datetime-manual.tex b/obsolete/macros/latex/contrib/datetime/datetime-manual.tex
new file mode 100644
index 0000000000..0580c26cbc
--- /dev/null
+++ b/obsolete/macros/latex/contrib/datetime/datetime-manual.tex
@@ -0,0 +1,666 @@
+\documentclass{nlctdoc}
+
+\usepackage[colorlinks,
+ bookmarks,
+ bookmarksopen,
+ hyperindex=false,
+ pdfauthor={Nicola L.C. Talbot},
+ pdftitle={datetime.sty: A Date and Time Package},
+ pdfkeywords={date,time,LaTeX}]{hyperref}
+
+\usepackage{creatdtx}
+
+\begin{document}
+\RecordChanges
+\OnlyDescription
+
+\title{datetime.sty v2.60:
+Formatting Current Date and Time}
+ \author{Nicola L. C. Talbot\\[10pt]
+ Dickimaw Books\\
+ \url{http://www.dickimaw-books.com/}}
+ \date{2015-03-20}
+ \maketitle
+
+\begin{important}
+This is the last version of this package. The replacement package is
+called \sty{datetime2} and will be released shortly after the
+this final version.
+\end{important}
+
+ \tableofcontents
+
+ \section{Introduction}
+\changes{1.0}{2000/08/08}{First release}
+\changes{1.01}{2000/09/18}{Documentation added}
+The \styfmt{datetime} package is a \LaTeXe\ package that
+provides various different formats for \ics{today},
+and provides commands for displaying the current time.
+If you only want the
+time commands but not the date changing commands, you can pass
+the option \pkgopt{nodate} to the package.
+\changes{2.3}{2004/05/01}{nodate package option added}
+
+\changes{2.41}{2004/10/22}{split package into two files:
+datetime.sty and fmtcount.sty}
+Since version 2.4, the \styfmt{datetime} package has been
+separated into two packages: \styfmt{datetime} and
+\sty{fmtcount}. When I originally created this package,
+I defined the commands, \ics{ordinal} etc which could be used
+in the definition of \cs{today}. Since then, I have extended
+the number of commands available that can be used to display the
+value of a \LaTeX\ counter, however it seems more appropriate to
+define all these counter-related commands in a separate package.
+The \sty{fmtcount} package is now distributed separately
+from the \styfmt{datetime} package, and will also need to
+be installed.
+
+\changes{2.42}{2004/11/01}{made package compatible with babel}
+As from version 2.42, the \styfmt{datetime} package is now
+compatible with \sty{babel}, however you must load the
+\styfmt{datetime} package \emph{after} the \sty{babel} package.
+For example:
+\begin{verbatim}
+\usepackage[francais]{babel}
+\usepackage{datetime}
+\end{verbatim}
+
+ \section{Predefined Date Formats}
+ There are various declarations that change the effect of
+\ics{today}. The change can be localised by placing the
+declaration within a group.
+
+As from version 2.43, the numerical date formats (such as
+\ics{ddmmyyyydate}) use the command
+\begin{definition}[\DescribeMacro{\dateseparator}]
+\cs{dateseparator}
+\end{definition}
+to separate the numbers. So, for example, if you want to hyphens
+instead of slashes, you can do:
+\begin{verbatim}
+\renewcommand{\dateseparator}{-}
+\end{verbatim}
+
+\subsection{ISO format}
+
+\begin{definition}[\DescribeMacro{\yyyymmdddate}]
+\cs{yyyymmdddate}
+\end{definition}
+This declaration will redefine \ics{today} to produce the current
+date displayed in the form 2000/03/08. (You can redefine
+\ics{dateseparator} to \texttt{-} to change to 2000-03-08.)
+
+\subsection{\texorpdfstring{\meta{Day} \meta{Month} \meta{Year}}{Day Month Year} formats}
+
+\begin{definition}[\DescribeMacro{\longdate}]
+\cs{longdate}
+\end{definition}
+This declaration will redefine \ics{today} to produce the current
+date displayed in the form Wednesday 8\textsuperscript{th} March,
+2000 if the package option \pkgopt{dayofweek} is used, or
+8\textsuperscript{th} March, 2000 if the package option
+\pkgopt{nodayofweek} is used.
+
+\begin{definition}[\DescribeMacro{\shortdate}]
+\cs{shortdate}
+\end{definition}
+This declaration will redefine \ics{today} to produce the current
+date displayed in the form Wed 8\textsuperscript{th} Mar, 2000 if
+the package option \pkgopt{dayofweek} is used, or
+8\textsuperscript{th} Mar, 2000 if the package option
+\pkgopt{nodayofweek} is used.
+
+\begin{definition}[\DescribeMacro{\ddmmyyyydate}]
+\cs{ddmmyyyydate}
+\end{definition}
+This declaration will redefine \ics{today} to produce the current
+date displayed in the form 08/03/2000.
+
+\begin{definition}[\DescribeMacro{\dmyyyydate}]
+\cs{dmyyyydate}
+\end{definition}
+This declaration will redefine \ics{today} to produce the current
+date displayed in the form 8/3/2000.
+
+\begin{definition}[\DescribeMacro{\ddmmyydate}]
+\cs{ddmmyydate}
+\end{definition}
+This declaration will redefine \ics{today} to produce the current
+date displayed in the form 08/03/00.
+
+\begin{definition}[\DescribeMacro{\dmyydate}]
+\cs{dmyydate}
+\end{definition}
+This declaration will redefine \ics{today} to produce the current
+date displayed in the form 8/3/00.
+
+\begin{definition}[\DescribeMacro{\textdate}]
+\cs{textdate}
+\end{definition}
+This declaration will redefine \ics{today} to produce the current
+date displayed in the form: Wednesday the Eighth of March, Two
+Thousand if the package option \pkgopt{dayofweek} is used, or Eighth
+of March, Two Thousand if the package option \pkgopt{nodayofweek} is
+used. Note that \cs{textdate} is defined for use with English, it
+won't look right if it is used when another language has been
+selected\footnote{in fact, you may get an error from the
+\sty{fmtcount} package if you are using a language that it doesn't
+support.}. If you want to define a similar command for another
+language, you will first need to check that the \sty{fmtcount}
+package supports that language.
+
+\subsection{\texorpdfstring{\meta{Month} \meta{Day} \meta{Year}}{Month Day Year} formats}
+
+\begin{definition}[\DescribeMacro{\usdate}]
+\cs{usdate}
+\end{definition}
+This declaration will redefine \cs{today} to produce the current
+date displayed in the form March 8, 2000. (As \TeX\ and \LaTeX\ do
+by default.)
+
+\begin{definition}[\DescribeMacro{\mmddyyyydate}]
+\cs{mmddyyyydate}
+\end{definition}
+This declaration will redefine \ics{today} to produce the current
+date displayed in the form 03/08/2000.
+
+\begin{definition}[\DescribeMacro{\mdyyyydate}]
+\cs{mdyyyydate}
+\end{definition}
+This declaration will redefine \verb"\today" to produce the current
+date displayed in the form 3/8/2000.
+
+\begin{definition}[\DescribeMacro{\mmddyydate}]
+\cs{mmddyydate}
+\end{definition}
+This declaration will redefine \ics{today} to produce the current
+date displayed in the form 03/08/00.
+
+\begin{definition}[\DescribeMacro{\mdyydate}]
+\cs{mdyydate}
+\end{definition}
+This declaration will redefine \ics{today} to produce the current
+date displayed in the form 3/8/00.
+
+\subsection{Dates defined by \texorpdfstring{\styfmt{babel}}{babel}}
+
+In addition to the above, the declarations \cs{date}\meta{lang} are
+available for all languages defined either by calling \sty{babel}
+prior to \styfmt{datetime} or by passing the language name as an
+option to \styfmt{datetime}. See~\sectionref{sec:newdate} if you
+want to define your own customised date format.
+
+ \section{Time Commands}
+
+The current time is displayed using the command
+\begin{definition}[\DescribeMacro{\currenttime}]
+\cs{currenttime}
+\end{definition}
+
+A specific time can be displayed using the command
+\begin{definition}[\DescribeMacro{\formattime}]
+\cs{formattime}\marg{hour}\marg{minute}\marg{second}
+\end{definition}
+where \meta{hour} is a number from~0 to~23, and \meta{minute} and
+\meta{second} are numbers from~0 to~59.
+
+The format can be changed using the declaration
+\begin{definition}[\DescribeMacro{\settimeformat}]
+\cs{settimeformat}\marg{style}
+\end{definition}
+where \meta{style} is the name of the
+format. Predefined formats are:
+\begin{description}
+\item[xxivtime] Twenty-four hour time in the form 22:28 (Default)
+\item[hhmmsstime] Twenty-four hour time in the form 22:28:00
+\item[ampmtime] Twelve hour time in the form 10:28pm
+\item[oclock] Displays the current time as a string, e.g.\
+Twenty-Eight minutes past Ten in the afternoon.
+\end{description}
+
+New time formats can be defined using the command:
+\begin{definition}[\DescribeMacro{\newtimeformat}]
+\cs{newtimeformat}\marg{name}\marg{format}
+\end{definition}
+where \meta{name} is the name of the new format (used in
+\ics{settimeformat}), and \meta{format} is how to format the time.
+Within \meta{format} you can use the counters \ctr{HOUR} (number
+of hours after midnight), \ctr{MINUTE} (number of minutes past
+the hour), \ctr{SECOND} (number of seconds) \ctr{HOURXII}
+(number of hours after midnight/midday), \ctr{TOHOUR} (the next
+hour) and \ctr{TOMINUTE} (number of minutes to the next hour),
+and the corresponding commands: \ics{THEHOUR}, \ics{THEMINUTE},
+\ics{THESECOND}, \ics{THEHOURXII}, \ics{THETOHOUR} and
+\ics{THETOMINUTE}.
+
+For example, to define a new time format that uses a dot instead of a
+colon:
+\begin{verbatim}
+\newtimeformat{dottime}{\twodigit{\THEHOUR}.\twodigit{\THEMINUTE}}
+\end{verbatim}
+You then need to switch to this new format before you can use it:
+\begin{verbatim}
+\settimeformat{dottime}
+\currenttime
+\end{verbatim}
+
+As from version 2.43, if you only want to change the separator,
+you can simply redefine
+\begin{definition}[\DescribeMacro{\timeseparator}]
+\cs{timeseparator}
+\end{definition}
+instead of defining a new time format. For example:
+\begin{verbatim}
+\renewcommand{\timeseparator}{.}
+\end{verbatim}
+The \texttt{xxivtime} format will now work like the \texttt{dottime}
+format defined above.
+
+ \section{Formating Dates}
+\begin{definition}[\DescribeMacro{\pdfdate}]
+\cs{pdfdate}
+\end{definition}
+ This command\footnote{thanks to Ulrich Dirr for
+asking about this} prints the date in the format required for
+ PDF files, e.g.\ if the date is 1 May 2004 and time is
+ 22:02, \verb"\pdfdate" will print 20040501220200. The reason
+this date format is separate from all the others is because the
+other form doesn't get properly expanded by PDF\TeX. (This
+command is defined regardless of whether the package option
+\texttt{nodate} is called.)
+Example:
+\begin{verbatim}
+\pdfinfo{
+ /Author (Me)
+ /Title (A Sample Document)
+ /CreationDate (D:20040501215500)
+ /ModDate (D:\pdfdate)
+}
+\end{verbatim}
+\textbf{Note} that PDF\TeX\ introduced the new primitive
+\cs{pdfcreationdate} in version 1.30.0, so \cs{pdfdate} isn't
+required with newer versions of PDF\TeX. (\cs{pdfcreationdate}
+is better than \cs{pdfdate} as it also stores the time zone.)
+
+ There are two commands that print the name of the current
+ month:
+\begin{definition}[\DescribeMacro{\monthname}]
+\cs{monthname}\oarg{num}
+\end{definition}
+prints the current month name in full,
+e.g.\ August, and
+\begin{definition}[\DescribeMacro{\shortmonthname}]
+\cs{shortmonthname}\oarg{num}
+\end{definition}
+prints the abbreviated month name, e.g.\ Aug. Both \cs{monthname}
+and \cs{shortmonthname} take an optional argument (a number from 1
+to 12) if the name of a specific month is required. For example,
+\verb"\monthname[6]" will produced the output: June.
+
+ The day of the week is computed using the algorithm documented at
+ \url{http://userpages.wittenburg.edu/bshelburne/Comp150/DayOfWeek.htm}.
+ This algorithm works for any date between 1\textsuperscript{st}
+Jan, 1901 and 31\textsuperscript{st} Dec, 2099.
+ The following macros display the day of week for a given date:
+
+\begin{definition}[\DescribeMacro{\dayofweekname}]
+\cs{dayofweekname}\marg{day}\marg{month}\marg{year}
+\end{definition}
+prints the day of week for the specified date. For example,
+\begin{verbatim}
+\dayofweekname{31}{10}{2002}
+\end{verbatim}
+will produce the output: Thursday.
+
+\begin{definition}[\DescribeMacro{\shortdayofweekname}]
+\cs{shortdayofweekname}\meta{day}\marg{month}\marg{year}
+\end{definition}
+prints the abbreviated name for the day of week for the specified
+date. For example
+\begin{verbatim}
+\shortdayofweekname{31}{10}{2002}
+\end{verbatim}
+will produce the output: Thu.
+
+\begin{definition}[\DescribeMacro{\ifshowdow}]
+\cs{ifshowdow}
+\end{definition}
+This \TeX\ conditional can be used to determine whether or not the
+option \pkgopt{dayofweek} has been passed to the package. For
+example:
+\begin{verbatim}
+\ifshowdow\dayofweekname{31}{10}{2002} \fi
+\end{verbatim}
+will only display the day of week if the \pkgopt{dayofweek} option
+was passed to \styfmt{datetime}. Alternatively, you can use
+David~Carlisle's \sty{ifthen} package:
+\begin{verbatim}
+\ifthenelse{\boolean{showdow}}{\dayofweekname{31}{10}{2002} }{}
+\end{verbatim}
+
+The command
+\begin{definition}[\DescribeMacro{\ordinaldate}]
+\cs{ordinaldate}\marg{number}
+\end{definition}
+displays \meta{number} as a date-type ordinal. If the current
+language is English, this will simply pass the argument to
+\ics{ordinalnum} (defined in the \sty{fmtcount} package), if the
+current language is Breton, Welsh or French, a superscript will only
+be added if \meta{number} is 1, otherwise only \meta{number} will be
+displayed.
+
+The macro\footnote{Note the name change since version 1.1. The
+command name was changed from \cs{thedate} to \cs{formatdate} to
+avoid a name clash when using the \sty{seminar} class file.}
+\begin{definition}[\DescribeMacro{\formatdate}]
+\cs{formatdate}\marg{day}\marg{month}\marg{year}
+\end{definition}
+formats the specified date according to the current format of
+\ics{today}\footnote{To be more precise, \ics{today} is defined to
+be \ics{formatdate}\{\cs{day}\}\{\cs{month}\}\{\cs{year}\} where
+\ics{longdate} etc change the definition of \cs{formatdate}}.
+(Arguments must all be integers.) For example, in combination with
+\ics{longdate}, the command
+\begin{verbatim}
+\formatdate{27}{9}{2004}
+\end{verbatim}
+will produce the output: Monday 27\textsuperscript{th} September,
+2004.
+
+You can ensure that a number is displayed with at least two digits
+using the command
+\begin{definition}[\DescribeMacro{\twodigit}]
+\cs{twodigit}\marg{num}
+\end{definition}
+
+\section{Defining New Date Formats}\label{sec:newdate}
+
+New date formats can be defined using the command:
+\begin{definition}[\DescribeMacro{\newdateformat}]
+ \cs{newdateformat}\marg{name}\marg{format}
+\end{definition}
+where \meta{name} is the name of the new format, and \meta{format}
+is how to format the date. Within the argument \meta{format} you can
+use the commands \ics{THEDAY}, \ics{THEMONTH} and \ics{THEYEAR} to
+represent the relevant day, month and year, or you can use the
+counters \ctr{DAY}, \ctr{MONTH} and \ctr{YEAR} if you want to use
+\ics{ordinal} etc. Once you have defined the new date format, you
+can then switch to it using the declaration \verb'\'\meta{name}
+(i.e.\ the name you specified preceded by a backslash), and
+subsequent calls to \ics{today} and \ics{formatdate} will use your
+new format.
+
+For example, suppose you want to define a new date format called,
+say, \texttt{mydate}, that will typeset the date in the form:
+8-3-2002, then you can do:
+\begin{verbatim}
+\newdateformat{mydate}{\THEDAY-\THEMONTH-\THEYEAR}
+\end{verbatim}
+\ics{newdateformat} will then define the declaration
+\cs{mydate} which can be used to
+switch to your new format. In the following example,
+two new date formats are defined, and they are then
+selected to produce two different formats for the current date:
+\begin{verbatim}
+\newdateformat{dashdate}{%
+\twodigit{\THEDAY}-\twodigit{\THEMONTH}-\THEYEAR}
+
+\newdateformat{usvardate}{%
+\monthname[\THEMONTH] \ordinal{DAY}, \THEYEAR}
+
+Dash: \dashdate\today.
+US: \usvardate\today.
+\end{verbatim}
+If the current date is, say, 8th March, 2002, the above code will
+produce the following: Dash: 08-03-2002. US: March
+8\textsuperscript{th}, 2002.
+
+Note that \ics{THEDAY} etc and \ctr{DAY} etc have no real
+meaning outside \ics{newdateformat} (this is why they
+are in uppercase). Incidentally, the \texttt{dashdate} format
+is not really necessary, as you can achieve this format
+using:
+\begin{verbatim}
+\renewcommand{\dateseparator}{-}
+\ddmmyyyydate
+\end{verbatim}
+
+Another note: in the above code, \ics{ordinal} was
+used to illustrate the use of the \ctr{DAY} counter. It
+is better to use \ics{ordinaldate} instead:
+\begin{verbatim}
+\newdateformat{usvardate}{%
+\monthname[\THEMONTH] \ordinaldate{\THEDAY}, \THEYEAR}
+\end{verbatim}
+
+\section{Saving Dates}
+
+It is possible to save a date for later use using the command:
+\footnote{Thanks to Denis Bitouz\'e for asking about this}
+\begin{definition}[\DescribeMacro{\newdate}]
+\cs{newdate}\marg{name}\marg{day}\marg{month}\marg{year}
+\end{definition}
+
+This date can later be displayed using the same format as that
+used by \ics{formatdate} using the command:
+\begin{definition}[\DescribeMacro{\displaydate}]
+\cs{displaydate}\marg{name}
+\end{definition}
+
+Individual elements of the date can be extracted using the
+commands:
+\begin{definition}[\DescribeMacro{\getdateday}]
+\cs{getdateday}\marg{name}
+\end{definition}
+\begin{definition}[\DescribeMacro{\getdatemonth}]
+\cs{getdatemonth}\marg{name}
+\end{definition}
+\begin{definition}[\DescribeMacro{\getdateyear}]
+\cs{getdateyear}\marg{name}
+\end{definition}
+
+\section{Predefined Names}
+
+The following commands are defined by the \styfmt{datetime}
+package:
+
+\begin{tabular}{ll}
+\bfseries Command Name & \bfseries Default Value\\
+\ics{dateseparator} & \verb'/'\\
+\ics{timeseparator} & \verb':'\\
+\ics{amname} & \texttt{am}\\
+\ics{pmname} & \texttt{pm}\\
+\ics{amorpmname} & \ics{amname} if morning, otherwise \ics{pmname}\\
+\ics{amstring} & \texttt{in the morning}\\
+\ics{pmstring} & \texttt{in the afternoon}\\
+\ics{amorpmstring} & \ics{amstring} if morning, otherwise
+\ics{pmstring}\\
+\ics{halfpast} & \texttt{Half past}\\
+\ics{quarterpast} & \texttt{Quarter past}\\
+\ics{quarterto} & \texttt{Quarter to}\\
+\ics{noon} & \texttt{Noon}\\
+\ics{midnight} & \texttt{Midnight}\\
+\ics{oclockstring} & \texttt{O'Clock}
+\end{tabular}
+
+\section{Package Options}
+
+ The following options may be passed to this package:
+\begin{description}
+\item[\pkgopt{long}] make \cs{today} produce long date
+\item[\pkgopt{short}] make \cs{today} produce short date
+\item[\pkgopt{yyyymmdd}] make \cs{today} produce YYYY/MM/DD date
+\item[\pkgopt{ddmmyyyy}] make \cs{today} produce DD/MM/YYYY date
+\item[\pkgopt{dmyyyy}] make \cs{today} produce D/M/YYYY date
+\item[\pkgopt{ddmmyy}] make \cs{today} produce DD/MM/YY date
+\item[\pkgopt{dmyy}] make \cs{today} produce D/M/YY date
+\item[\pkgopt{text}] make \cs{today} produce text date in UK style
+\item[\pkgopt{us}] make \cs{today} produce US style date
+\item[\pkgopt{mmddyyyy}] make \cs{today} produce MM/DD/YYYY date
+\item[\pkgopt{mdyyyy}] make \cs{today} produce M/D/YYYY date
+\item[\pkgopt{mmddyy}] make \cs{today} produce MM/DD/YY date
+\item[\pkgopt{mdyy}] make \cs{today} produce M/D/YY date
+\item[\pkgopt{raise}] make ordinal st,nd,rd,th appear as superscript
+\item[\pkgopt{level}] make ordinal st,nd,rd,th appear level with rest of
+text
+\item[\pkgopt{dayofweek}] make the day of week appear for \ics{longdate},
+\ics{shortdate}
+ or \ics{textdate}
+\item[\pkgopt{nodayofweek}] don't display the day of week.
+\item[\pkgopt{hhmmss}] make \cs{currenttime} produce \texttt{hhmmsstime}
+format
+\item[\pkgopt{24hr}] make \cs{currenttime} produce \texttt{xxivtime}
+format
+\item[\pkgopt{12hr}] make \cs{currenttime} produce \texttt{ampmtime}
+format
+\item[\pkgopt{oclock}] make \cs{currenttime} produce \texttt{oclock}
+format
+\item[\pkgopt{nodate}] Don't redefine \cs{today} or define the month or
+day of week commands
+ (useful if you only want the time commands)
+\item[\pkgopt{iso}] as \pkgopt{ddmmyyyy} and \pkgopt{hhmmss} but
+also sets date separator to \texttt{-}
+ and time separator to \texttt{:}
+ \end{description}
+
+The default options are: \pkgopt{long}, \pkgopt{raise},
+\pkgopt{dayofweek} and \pkgopt{24hr}.
+
+\section{Multilingual Support}
+
+If you use the \sty{ngerman} package, you must use \styfmt{datetime}'s
+\pkgopt{ngerman} package option if you want the date displayed
+in the same form as \sty{ngerman}. You must also load \sty{ngerman}
+\emph{before} you load \styfmt{datetime}. Similarly for the
+\sty{german} package.
+
+If you want to use the \sty{babel} package, you must load
+it \emph{before} you load the \styfmt{datetime} package. This
+is because the \sty{babel} \cs{date}\meta{lang} commands
+redefine \ics{today}, whereas the \sty{datetime} package
+redefines \cs{today} to use \ics{formatdate}, and the
+date formatting commands (such as \ics{longdate}) redefine
+\cs{formatdate} rather than \cs{today}. This ensures
+consistent formatting of the dates whether you use \cs{today} or
+\cs{formatdate}. Therefore, the \styfmt{datetime} package
+has to redefine all the \cs{date}\meta{lang} commands accordingly.
+Thus the multilingual date support is mostly limited to that provided
+by \sty{babel}. Additional support, such as the day of
+week names and abbreviations, are only supplied for those
+languages that I know, or that other people have been able to supply
+for me.
+
+As from v2.56, the package options supplied to \styfmt{datetime}
+override \sty{babel}'s date format. For example:
+\begin{verbatim}
+\usepackage[french,spanish]{babel}
+\usepackage[ddmmyyyy]{datetime}
+\end{verbatim}
+will use ddmmyyyy date format regardless of language. Note that
+if you use a declaration instead of a package option, for
+example:
+\begin{verbatim}
+\usepackage[french,spanish]{babel}
+\usepackage{datetime}
+\ddmmyyyydate
+\end{verbatim}
+the date format will be switched back to \cs{datefrench} or
+\cs{datespanish} whenever the language is set. You can use
+\begin{definition}[\DescribeMacro{\setdefaultdate}]
+\cs{setdefaultdate}\marg{declaration}
+\end{definition}
+to always use \marg{declaration} whenever the language
+is set. For example:
+\begin{verbatim}
+\setdefaultdate{\ddmmyyyydate}
+\end{verbatim}
+
+The commands \ics{monthname} and \ics{shortmonthname},
+will produce the month name in the current language.
+If you want the month name in a specific language, you
+can use the command \cs{monthname}\meta{lang}.
+For example, \verb"\monthnamefrench[6]" will produce the output:
+juin. Note that \ics{textdate} is formatted for English dates,
+and won't look right if used with another language setting. If you
+want a textual date, the \sty{fmtcount} package (which is
+loaded by \styfmt{datetime}) defines some commands which display
+a number or ordinal as a word, but it only has very limited
+multilingual support. See the \sty{fmtcount} documentation
+for further details.
+
+\section{Registers}
+
+\TeX\ provides \ics{day}, \ics{month} and \ics{year} registers. In
+addition, \styfmt{datetime} provides the registers:
+\ics{currenthour}, \ics{currentminute} and \ics{currentsecond}.
+Note that old distributions of \TeX\ will always have
+\cs{currentsecond} set to zero.
+
+\section{Configuration File}
+
+As from Version 2.4, the \styfmt{datetime} package will read in settings
+from the configuration file \texttt{datetime.cfg}, if it exists,
+which will override the default package options. For example,
+suppose you prefer a short date without the day of week by default,
+you will need to create a file called \texttt{datetime.cfg} that
+contains the line:
+\begin{verbatim}
+\shortdate\showdowfalse
+\end{verbatim}
+The file \texttt{datetime.cfg} should then go somewhere on the
+\TeX\ path. Now all you need to do is:
+\begin{verbatim}
+\usepackage{datetime}
+\end{verbatim}
+without having to specify the \pkgopt{short} and
+\pkgopt{nodayofweek} options.
+
+You can also use this file to define and set your own date
+styles. For example, you could create
+a configuration file that has the following lines:
+\begin{verbatim}
+\newdateformat{dashdate}{\twodigit{\THEDAY}-\twodigit{\THEMONTH}-\THEYEAR}
+\dashdate
+\end{verbatim}
+Whenever you use the \styfmt{datetime} package, it will now
+use this format by default.
+
+\section{LaTeX2HTML styles}
+
+\changes{2.43}{2005/02/25}{Added LaTeX2HTML support}%
+\changes{2.44}{2005/03/03}{Fixed minor bugs in Perl scripts}
+Version 2.43 and above of the \styfmt{datetime} bundle
+supplies the LaTeX2HTML style file \texttt{datetime.perl}.
+This file should be placed in a
+directory searched by LaTeX2HTML. The following limitations
+apply to the LaTeX2HTML styles:
+
+\begin{itemize}
+\item The configuration file \texttt{datetime.cfg}
+is currently ignored. You can however
+do:
+\begin{verbatim}
+\usepackage{datetime}
+\html{\input{datetime.cfg}}
+\end{verbatim}
+This, I agree, is an unpleasant cludge.
+
+\item The commands \cs{monthname}\meta{language} are not
+implemented.
+
+\item Some of the languages are not implemented.
+
+\item The package option \pkgopt{nodate} is not implemented.
+
+\end{itemize}
+
+\section{Troubleshooting}
+
+There is a \sty{datetime} FAQ available at:
+\url{http://www.dickimaw-books.com/faqs/datetimefaq.html}.
+
+\StopEventually{\phantomsection
+\addcontentsline{toc}{section}{Index}\PrintIndex
+}
+
+\end{document}
diff --git a/obsolete/macros/latex/contrib/datetime/datetime.dtx b/obsolete/macros/latex/contrib/datetime/datetime.dtx
new file mode 100644
index 0000000000..18140e3fb5
--- /dev/null
+++ b/obsolete/macros/latex/contrib/datetime/datetime.dtx
@@ -0,0 +1,7434 @@
+%\iffalse
+% datetime.dtx generated using makedtx version 1.1 (c) Nicola Talbot
+% Command line args:
+% -doc "datetime-manual.tex"
+% -setambles ".*\.perl=>\nopreamble\nopostamble"
+% -author "Nicola Talbot"
+% -macrocode "datetime.perl"
+% -comment "datetime.perl"
+% -comment "dt-.+\.tex"
+% -src "(.+)\.(sty)=>\1.\2"
+% -src "(.+)\.(def)=>\1.\2"
+% -src "(dt-.+)\.(tex)=>\1.\2"
+% -src "datetime.perl\Z=>datetime.perl"
+% datetime
+% Created on 2015/3/20 16:54
+%\fi
+%\iffalse
+%<*package>
+%% \CharacterTable
+%% {Upper-case \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
+%% Lower-case \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
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%</package>
+%\fi
+% \iffalse
+% Doc-Source file to use with LaTeX2e
+% Copyright (C) 2015 Nicola Talbot, all rights reserved.
+% \fi
+% \iffalse
+%<*driver>
+\documentclass{nlctdoc}
+
+\usepackage[colorlinks,
+ bookmarks,
+ bookmarksopen,
+ hyperindex=false,
+ pdfauthor={Nicola L.C. Talbot},
+ pdftitle={datetime.sty: A Date and Time Package},
+ pdfkeywords={date,time,LaTeX}]{hyperref}
+
+
+
+\begin{document}
+\DocInput{datetime.dtx}
+\end{document}
+%</driver>
+%\fi
+%\RecordChanges
+%\OnlyDescription
+%
+%\title{datetime.sty v2.60:
+%Formatting Current Date and Time}
+% \author{Nicola L. C. Talbot\\[10pt]
+% Dickimaw Books\\
+% \url{http://www.dickimaw-books.com/}}
+% \date{2015-03-20}
+% \maketitle
+%
+%\begin{important}
+%This is the last version of this package. The replacement package is
+%called \sty{datetime2} and will be released shortly after the
+%this final version.
+%\end{important}
+%
+% \tableofcontents
+%
+% \section{Introduction}
+%\changes{1.0}{2000/08/08}{First release}
+%\changes{1.01}{2000/09/18}{Documentation added}
+%The \styfmt{datetime} package is a \LaTeXe\ package that
+%provides various different formats for \ics{today},
+%and provides commands for displaying the current time.
+%If you only want the
+%time commands but not the date changing commands, you can pass
+%the option \pkgopt{nodate} to the package.
+%\changes{2.3}{2004/05/01}{nodate package option added}
+%
+%\changes{2.41}{2004/10/22}{split package into two files:
+%datetime.sty and fmtcount.sty}
+%Since version 2.4, the \styfmt{datetime} package has been
+%separated into two packages: \styfmt{datetime} and
+%\sty{fmtcount}. When I originally created this package,
+%I defined the commands, \ics{ordinal} etc which could be used
+%in the definition of \cs{today}. Since then, I have extended
+%the number of commands available that can be used to display the
+%value of a \LaTeX\ counter, however it seems more appropriate to
+%define all these counter-related commands in a separate package.
+%The \sty{fmtcount} package is now distributed separately
+%from the \styfmt{datetime} package, and will also need to
+%be installed.
+%
+%\changes{2.42}{2004/11/01}{made package compatible with babel}
+%As from version 2.42, the \styfmt{datetime} package is now
+%compatible with \sty{babel}, however you must load the
+%\styfmt{datetime} package \emph{after} the \sty{babel} package.
+%For example:
+%\begin{verbatim}
+%\usepackage[francais]{babel}
+%\usepackage{datetime}
+%\end{verbatim}
+%
+% \section{Predefined Date Formats}
+% There are various declarations that change the effect of
+%\ics{today}. The change can be localised by placing the
+%declaration within a group.
+%
+%As from version 2.43, the numerical date formats (such as
+%\ics{ddmmyyyydate}) use the command
+%\begin{definition}[\DescribeMacro{\dateseparator}]
+%\cs{dateseparator}
+%\end{definition}
+%to separate the numbers. So, for example, if you want to hyphens
+%instead of slashes, you can do:
+%\begin{verbatim}
+%\renewcommand{\dateseparator}{-}
+%\end{verbatim}
+%
+%\subsection{ISO format}
+%
+%\begin{definition}[\DescribeMacro{\yyyymmdddate}]
+%\cs{yyyymmdddate}
+%\end{definition}
+%This declaration will redefine \ics{today} to produce the current
+%date displayed in the form 2000/03/08. (You can redefine
+%\ics{dateseparator} to \texttt{-} to change to 2000-03-08.)
+%
+%\subsection{\texorpdfstring{\meta{Day} \meta{Month} \meta{Year}}{Day Month Year} formats}
+%
+%\begin{definition}[\DescribeMacro{\longdate}]
+%\cs{longdate}
+%\end{definition}
+%This declaration will redefine \ics{today} to produce the current
+%date displayed in the form Wednesday 8\textsuperscript{th} March,
+%2000 if the package option \pkgopt{dayofweek} is used, or
+%8\textsuperscript{th} March, 2000 if the package option
+%\pkgopt{nodayofweek} is used.
+%
+%\begin{definition}[\DescribeMacro{\shortdate}]
+%\cs{shortdate}
+%\end{definition}
+%This declaration will redefine \ics{today} to produce the current
+%date displayed in the form Wed 8\textsuperscript{th} Mar, 2000 if
+%the package option \pkgopt{dayofweek} is used, or
+%8\textsuperscript{th} Mar, 2000 if the package option
+%\pkgopt{nodayofweek} is used.
+%
+%\begin{definition}[\DescribeMacro{\ddmmyyyydate}]
+%\cs{ddmmyyyydate}
+%\end{definition}
+%This declaration will redefine \ics{today} to produce the current
+%date displayed in the form 08/03/2000.
+%
+%\begin{definition}[\DescribeMacro{\dmyyyydate}]
+%\cs{dmyyyydate}
+%\end{definition}
+%This declaration will redefine \ics{today} to produce the current
+%date displayed in the form 8/3/2000.
+%
+%\begin{definition}[\DescribeMacro{\ddmmyydate}]
+%\cs{ddmmyydate}
+%\end{definition}
+%This declaration will redefine \ics{today} to produce the current
+%date displayed in the form 08/03/00.
+%
+%\begin{definition}[\DescribeMacro{\dmyydate}]
+%\cs{dmyydate}
+%\end{definition}
+%This declaration will redefine \ics{today} to produce the current
+%date displayed in the form 8/3/00.
+%
+%\begin{definition}[\DescribeMacro{\textdate}]
+%\cs{textdate}
+%\end{definition}
+%This declaration will redefine \ics{today} to produce the current
+%date displayed in the form: Wednesday the Eighth of March, Two
+%Thousand if the package option \pkgopt{dayofweek} is used, or Eighth
+%of March, Two Thousand if the package option \pkgopt{nodayofweek} is
+%used. Note that \cs{textdate} is defined for use with English, it
+%won't look right if it is used when another language has been
+%selected\footnote{in fact, you may get an error from the
+%\sty{fmtcount} package if you are using a language that it doesn't
+%support.}. If you want to define a similar command for another
+%language, you will first need to check that the \sty{fmtcount}
+%package supports that language.
+%
+%\subsection{\texorpdfstring{\meta{Month} \meta{Day} \meta{Year}}{Month Day Year} formats}
+%
+%\begin{definition}[\DescribeMacro{\usdate}]
+%\cs{usdate}
+%\end{definition}
+%This declaration will redefine \cs{today} to produce the current
+%date displayed in the form March 8, 2000. (As \TeX\ and \LaTeX\ do
+%by default.)
+%
+%\begin{definition}[\DescribeMacro{\mmddyyyydate}]
+%\cs{mmddyyyydate}
+%\end{definition}
+%This declaration will redefine \ics{today} to produce the current
+%date displayed in the form 03/08/2000.
+%
+%\begin{definition}[\DescribeMacro{\mdyyyydate}]
+%\cs{mdyyyydate}
+%\end{definition}
+%This declaration will redefine \verb"\today" to produce the current
+%date displayed in the form 3/8/2000.
+%
+%\begin{definition}[\DescribeMacro{\mmddyydate}]
+%\cs{mmddyydate}
+%\end{definition}
+%This declaration will redefine \ics{today} to produce the current
+%date displayed in the form 03/08/00.
+%
+%\begin{definition}[\DescribeMacro{\mdyydate}]
+%\cs{mdyydate}
+%\end{definition}
+%This declaration will redefine \ics{today} to produce the current
+%date displayed in the form 3/8/00.
+%
+%\subsection{Dates defined by \texorpdfstring{\styfmt{babel}}{babel}}
+%
+%In addition to the above, the declarations \cs{date}\meta{lang} are
+%available for all languages defined either by calling \sty{babel}
+%prior to \styfmt{datetime} or by passing the language name as an
+%option to \styfmt{datetime}. See~\sectionref{sec:newdate} if you
+%want to define your own customised date format.
+%
+% \section{Time Commands}
+%
+%The current time is displayed using the command
+%\begin{definition}[\DescribeMacro{\currenttime}]
+%\cs{currenttime}
+%\end{definition}
+%
+%A specific time can be displayed using the command
+%\begin{definition}[\DescribeMacro{\formattime}]
+%\cs{formattime}\marg{hour}\marg{minute}\marg{second}
+%\end{definition}
+%where \meta{hour} is a number from~0 to~23, and \meta{minute} and
+%\meta{second} are numbers from~0 to~59.
+%
+%The format can be changed using the declaration
+%\begin{definition}[\DescribeMacro{\settimeformat}]
+%\cs{settimeformat}\marg{style}
+%\end{definition}
+%where \meta{style} is the name of the
+%format. Predefined formats are:
+%\begin{description}
+%\item[xxivtime] Twenty-four hour time in the form 22:28 (Default)
+%\item[hhmmsstime] Twenty-four hour time in the form 22:28:00
+%\item[ampmtime] Twelve hour time in the form 10:28pm
+%\item[oclock] Displays the current time as a string, e.g.\
+%Twenty-Eight minutes past Ten in the afternoon.
+%\end{description}
+%
+%New time formats can be defined using the command:
+%\begin{definition}[\DescribeMacro{\newtimeformat}]
+%\cs{newtimeformat}\marg{name}\marg{format}
+%\end{definition}
+%where \meta{name} is the name of the new format (used in
+%\ics{settimeformat}), and \meta{format} is how to format the time.
+%Within \meta{format} you can use the counters \ctr{HOUR} (number
+%of hours after midnight), \ctr{MINUTE} (number of minutes past
+%the hour), \ctr{SECOND} (number of seconds) \ctr{HOURXII}
+%(number of hours after midnight/midday), \ctr{TOHOUR} (the next
+%hour) and \ctr{TOMINUTE} (number of minutes to the next hour),
+%and the corresponding commands: \ics{THEHOUR}, \ics{THEMINUTE},
+%\ics{THESECOND}, \ics{THEHOURXII}, \ics{THETOHOUR} and
+%\ics{THETOMINUTE}.
+%
+%For example, to define a new time format that uses a dot instead of a
+%colon:
+%\begin{verbatim}
+%\newtimeformat{dottime}{\twodigit{\THEHOUR}.\twodigit{\THEMINUTE}}
+%\end{verbatim}
+%You then need to switch to this new format before you can use it:
+%\begin{verbatim}
+%\settimeformat{dottime}
+%\currenttime
+%\end{verbatim}
+%
+%As from version 2.43, if you only want to change the separator,
+%you can simply redefine
+%\begin{definition}[\DescribeMacro{\timeseparator}]
+%\cs{timeseparator}
+%\end{definition}
+%instead of defining a new time format. For example:
+%\begin{verbatim}
+%\renewcommand{\timeseparator}{.}
+%\end{verbatim}
+%The \texttt{xxivtime} format will now work like the \texttt{dottime}
+%format defined above.
+%
+% \section{Formating Dates}
+%\begin{definition}[\DescribeMacro{\pdfdate}]
+%\cs{pdfdate}
+%\end{definition}
+% This command\footnote{thanks to Ulrich Dirr for
+%asking about this} prints the date in the format required for
+% PDF files, e.g.\ if the date is 1 May 2004 and time is
+% 22:02, \verb"\pdfdate" will print 20040501220200. The reason
+%this date format is separate from all the others is because the
+%other form doesn't get properly expanded by PDF\TeX. (This
+%command is defined regardless of whether the package option
+%\texttt{nodate} is called.)
+%Example:
+%\begin{verbatim}
+%\pdfinfo{
+% /Author (Me)
+% /Title (A Sample Document)
+% /CreationDate (D:20040501215500)
+% /ModDate (D:\pdfdate)
+%}
+%\end{verbatim}
+%\textbf{Note} that PDF\TeX\ introduced the new primitive
+%\cs{pdfcreationdate} in version 1.30.0, so \cs{pdfdate} isn't
+%required with newer versions of PDF\TeX. (\cs{pdfcreationdate}
+%is better than \cs{pdfdate} as it also stores the time zone.)
+%
+% There are two commands that print the name of the current
+% month:
+%\begin{definition}[\DescribeMacro{\monthname}]
+%\cs{monthname}\oarg{num}
+%\end{definition}
+%prints the current month name in full,
+%e.g.\ August, and
+%\begin{definition}[\DescribeMacro{\shortmonthname}]
+%\cs{shortmonthname}\oarg{num}
+%\end{definition}
+%prints the abbreviated month name, e.g.\ Aug. Both \cs{monthname}
+%and \cs{shortmonthname} take an optional argument (a number from 1
+%to 12) if the name of a specific month is required. For example,
+%\verb"\monthname[6]" will produced the output: June.
+%
+% The day of the week is computed using the algorithm documented at
+% \url{http://userpages.wittenburg.edu/bshelburne/Comp150/DayOfWeek.htm}.
+% This algorithm works for any date between 1\textsuperscript{st}
+%Jan, 1901 and 31\textsuperscript{st} Dec, 2099.
+% The following macros display the day of week for a given date:
+%
+%\begin{definition}[\DescribeMacro{\dayofweekname}]
+%\cs{dayofweekname}\marg{day}\marg{month}\marg{year}
+%\end{definition}
+%prints the day of week for the specified date. For example,
+%\begin{verbatim}
+%\dayofweekname{31}{10}{2002}
+%\end{verbatim}
+%will produce the output: Thursday.
+%
+%\begin{definition}[\DescribeMacro{\shortdayofweekname}]
+%\cs{shortdayofweekname}\meta{day}\marg{month}\marg{year}
+%\end{definition}
+%prints the abbreviated name for the day of week for the specified
+%date. For example
+%\begin{verbatim}
+%\shortdayofweekname{31}{10}{2002}
+%\end{verbatim}
+%will produce the output: Thu.
+%
+%\begin{definition}[\DescribeMacro{\ifshowdow}]
+%\cs{ifshowdow}
+%\end{definition}
+%This \TeX\ conditional can be used to determine whether or not the
+%option \pkgopt{dayofweek} has been passed to the package. For
+%example:
+%\begin{verbatim}
+%\ifshowdow\dayofweekname{31}{10}{2002} \fi
+%\end{verbatim}
+%will only display the day of week if the \pkgopt{dayofweek} option
+%was passed to \styfmt{datetime}. Alternatively, you can use
+%David~Carlisle's \sty{ifthen} package:
+%\begin{verbatim}
+%\ifthenelse{\boolean{showdow}}{\dayofweekname{31}{10}{2002} }{}
+%\end{verbatim}
+%
+%The command
+%\begin{definition}[\DescribeMacro{\ordinaldate}]
+%\cs{ordinaldate}\marg{number}
+%\end{definition}
+%displays \meta{number} as a date-type ordinal. If the current
+%language is English, this will simply pass the argument to
+%\ics{ordinalnum} (defined in the \sty{fmtcount} package), if the
+%current language is Breton, Welsh or French, a superscript will only
+%be added if \meta{number} is 1, otherwise only \meta{number} will be
+%displayed.
+%
+%The macro\footnote{Note the name change since version 1.1. The
+%command name was changed from \cs{thedate} to \cs{formatdate} to
+%avoid a name clash when using the \sty{seminar} class file.}
+%\begin{definition}[\DescribeMacro{\formatdate}]
+%\cs{formatdate}\marg{day}\marg{month}\marg{year}
+%\end{definition}
+%formats the specified date according to the current format of
+%\ics{today}\footnote{To be more precise, \ics{today} is defined to
+%be \ics{formatdate}\{\cs{day}\}\{\cs{month}\}\{\cs{year}\} where
+%\ics{longdate} etc change the definition of \cs{formatdate}}.
+%(Arguments must all be integers.) For example, in combination with
+%\ics{longdate}, the command
+%\begin{verbatim}
+%\formatdate{27}{9}{2004}
+%\end{verbatim}
+%will produce the output: Monday 27\textsuperscript{th} September,
+%2004.
+%
+%You can ensure that a number is displayed with at least two digits
+%using the command
+%\begin{definition}[\DescribeMacro{\twodigit}]
+%\cs{twodigit}\marg{num}
+%\end{definition}
+%
+%\section{Defining New Date Formats}\label{sec:newdate}
+%
+%New date formats can be defined using the command:
+%\begin{definition}[\DescribeMacro{\newdateformat}]
+% \cs{newdateformat}\marg{name}\marg{format}
+%\end{definition}
+%where \meta{name} is the name of the new format, and \meta{format}
+%is how to format the date. Within the argument \meta{format} you can
+%use the commands \ics{THEDAY}, \ics{THEMONTH} and \ics{THEYEAR} to
+%represent the relevant day, month and year, or you can use the
+%counters \ctr{DAY}, \ctr{MONTH} and \ctr{YEAR} if you want to use
+%\ics{ordinal} etc. Once you have defined the new date format, you
+%can then switch to it using the declaration \verb'\'\meta{name}
+%(i.e.\ the name you specified preceded by a backslash), and
+%subsequent calls to \ics{today} and \ics{formatdate} will use your
+%new format.
+%
+%For example, suppose you want to define a new date format called,
+%say, \texttt{mydate}, that will typeset the date in the form:
+%8-3-2002, then you can do:
+%\begin{verbatim}
+%\newdateformat{mydate}{\THEDAY-\THEMONTH-\THEYEAR}
+%\end{verbatim}
+%\ics{newdateformat} will then define the declaration
+%\cs{mydate} which can be used to
+%switch to your new format. In the following example,
+%two new date formats are defined, and they are then
+%selected to produce two different formats for the current date:
+%\begin{verbatim}
+%\newdateformat{dashdate}{%
+%\twodigit{\THEDAY}-\twodigit{\THEMONTH}-\THEYEAR}
+%
+%\newdateformat{usvardate}{%
+%\monthname[\THEMONTH] \ordinal{DAY}, \THEYEAR}
+%
+%Dash: \dashdate\today.
+%US: \usvardate\today.
+%\end{verbatim}
+%If the current date is, say, 8th March, 2002, the above code will
+%produce the following: Dash: 08-03-2002. US: March
+%8\textsuperscript{th}, 2002.
+%
+%Note that \ics{THEDAY} etc and \ctr{DAY} etc have no real
+%meaning outside \ics{newdateformat} (this is why they
+%are in uppercase). Incidentally, the \texttt{dashdate} format
+%is not really necessary, as you can achieve this format
+%using:
+%\begin{verbatim}
+%\renewcommand{\dateseparator}{-}
+%\ddmmyyyydate
+%\end{verbatim}
+%
+%Another note: in the above code, \ics{ordinal} was
+%used to illustrate the use of the \ctr{DAY} counter. It
+%is better to use \ics{ordinaldate} instead:
+%\begin{verbatim}
+%\newdateformat{usvardate}{%
+%\monthname[\THEMONTH] \ordinaldate{\THEDAY}, \THEYEAR}
+%\end{verbatim}
+%
+%\section{Saving Dates}
+%
+%It is possible to save a date for later use using the command:
+%\footnote{Thanks to Denis Bitouz\'e for asking about this}
+%\begin{definition}[\DescribeMacro{\newdate}]
+%\cs{newdate}\marg{name}\marg{day}\marg{month}\marg{year}
+%\end{definition}
+%
+%This date can later be displayed using the same format as that
+%used by \ics{formatdate} using the command:
+%\begin{definition}[\DescribeMacro{\displaydate}]
+%\cs{displaydate}\marg{name}
+%\end{definition}
+%
+%Individual elements of the date can be extracted using the
+%commands:
+%\begin{definition}[\DescribeMacro{\getdateday}]
+%\cs{getdateday}\marg{name}
+%\end{definition}
+%\begin{definition}[\DescribeMacro{\getdatemonth}]
+%\cs{getdatemonth}\marg{name}
+%\end{definition}
+%\begin{definition}[\DescribeMacro{\getdateyear}]
+%\cs{getdateyear}\marg{name}
+%\end{definition}
+%
+%\section{Predefined Names}
+%
+%The following commands are defined by the \styfmt{datetime}
+%package:
+%
+%\begin{tabular}{ll}
+%\bfseries Command Name & \bfseries Default Value\\
+%\ics{dateseparator} & \verb'/'\\
+%\ics{timeseparator} & \verb':'\\
+%\ics{amname} & \texttt{am}\\
+%\ics{pmname} & \texttt{pm}\\
+%\ics{amorpmname} & \ics{amname} if morning, otherwise \ics{pmname}\\
+%\ics{amstring} & \texttt{in the morning}\\
+%\ics{pmstring} & \texttt{in the afternoon}\\
+%\ics{amorpmstring} & \ics{amstring} if morning, otherwise
+%\ics{pmstring}\\
+%\ics{halfpast} & \texttt{Half past}\\
+%\ics{quarterpast} & \texttt{Quarter past}\\
+%\ics{quarterto} & \texttt{Quarter to}\\
+%\ics{noon} & \texttt{Noon}\\
+%\ics{midnight} & \texttt{Midnight}\\
+%\ics{oclockstring} & \texttt{O'Clock}
+%\end{tabular}
+%
+%\section{Package Options}
+%
+% The following options may be passed to this package:
+%\begin{description}
+%\item[\pkgopt{long}] make \cs{today} produce long date
+%\item[\pkgopt{short}] make \cs{today} produce short date
+%\item[\pkgopt{yyyymmdd}] make \cs{today} produce YYYY/MM/DD date
+%\item[\pkgopt{ddmmyyyy}] make \cs{today} produce DD/MM/YYYY date
+%\item[\pkgopt{dmyyyy}] make \cs{today} produce D/M/YYYY date
+%\item[\pkgopt{ddmmyy}] make \cs{today} produce DD/MM/YY date
+%\item[\pkgopt{dmyy}] make \cs{today} produce D/M/YY date
+%\item[\pkgopt{text}] make \cs{today} produce text date in UK style
+%\item[\pkgopt{us}] make \cs{today} produce US style date
+%\item[\pkgopt{mmddyyyy}] make \cs{today} produce MM/DD/YYYY date
+%\item[\pkgopt{mdyyyy}] make \cs{today} produce M/D/YYYY date
+%\item[\pkgopt{mmddyy}] make \cs{today} produce MM/DD/YY date
+%\item[\pkgopt{mdyy}] make \cs{today} produce M/D/YY date
+%\item[\pkgopt{raise}] make ordinal st,nd,rd,th appear as superscript
+%\item[\pkgopt{level}] make ordinal st,nd,rd,th appear level with rest of
+%text
+%\item[\pkgopt{dayofweek}] make the day of week appear for \ics{longdate},
+%\ics{shortdate}
+% or \ics{textdate}
+%\item[\pkgopt{nodayofweek}] don't display the day of week.
+%\item[\pkgopt{hhmmss}] make \cs{currenttime} produce \texttt{hhmmsstime}
+%format
+%\item[\pkgopt{24hr}] make \cs{currenttime} produce \texttt{xxivtime}
+%format
+%\item[\pkgopt{12hr}] make \cs{currenttime} produce \texttt{ampmtime}
+%format
+%\item[\pkgopt{oclock}] make \cs{currenttime} produce \texttt{oclock}
+%format
+%\item[\pkgopt{nodate}] Don't redefine \cs{today} or define the month or
+%day of week commands
+% (useful if you only want the time commands)
+%\item[\pkgopt{iso}] as \pkgopt{ddmmyyyy} and \pkgopt{hhmmss} but
+%also sets date separator to \texttt{-}
+% and time separator to \texttt{:}
+% \end{description}
+%
+%The default options are: \pkgopt{long}, \pkgopt{raise},
+%\pkgopt{dayofweek} and \pkgopt{24hr}.
+%
+%\section{Multilingual Support}
+%
+%If you use the \sty{ngerman} package, you must use \styfmt{datetime}'s
+%\pkgopt{ngerman} package option if you want the date displayed
+%in the same form as \sty{ngerman}. You must also load \sty{ngerman}
+%\emph{before} you load \styfmt{datetime}. Similarly for the
+%\sty{german} package.
+%
+%If you want to use the \sty{babel} package, you must load
+%it \emph{before} you load the \styfmt{datetime} package. This
+%is because the \sty{babel} \cs{date}\meta{lang} commands
+%redefine \ics{today}, whereas the \sty{datetime} package
+%redefines \cs{today} to use \ics{formatdate}, and the
+%date formatting commands (such as \ics{longdate}) redefine
+%\cs{formatdate} rather than \cs{today}. This ensures
+%consistent formatting of the dates whether you use \cs{today} or
+%\cs{formatdate}. Therefore, the \styfmt{datetime} package
+%has to redefine all the \cs{date}\meta{lang} commands accordingly.
+%Thus the multilingual date support is mostly limited to that provided
+%by \sty{babel}. Additional support, such as the day of
+%week names and abbreviations, are only supplied for those
+%languages that I know, or that other people have been able to supply
+%for me.
+%
+%As from v2.56, the package options supplied to \styfmt{datetime}
+%override \sty{babel}'s date format. For example:
+%\begin{verbatim}
+%\usepackage[french,spanish]{babel}
+%\usepackage[ddmmyyyy]{datetime}
+%\end{verbatim}
+%will use ddmmyyyy date format regardless of language. Note that
+%if you use a declaration instead of a package option, for
+%example:
+%\begin{verbatim}
+%\usepackage[french,spanish]{babel}
+%\usepackage{datetime}
+%\ddmmyyyydate
+%\end{verbatim}
+%the date format will be switched back to \cs{datefrench} or
+%\cs{datespanish} whenever the language is set. You can use
+%\begin{definition}[\DescribeMacro{\setdefaultdate}]
+%\cs{setdefaultdate}\marg{declaration}
+%\end{definition}
+%to always use \marg{declaration} whenever the language
+%is set. For example:
+%\begin{verbatim}
+%\setdefaultdate{\ddmmyyyydate}
+%\end{verbatim}
+%
+%The commands \ics{monthname} and \ics{shortmonthname},
+%will produce the month name in the current language.
+%If you want the month name in a specific language, you
+%can use the command \cs{monthname}\meta{lang}.
+%For example, \verb"\monthnamefrench[6]" will produce the output:
+%juin. Note that \ics{textdate} is formatted for English dates,
+%and won't look right if used with another language setting. If you
+%want a textual date, the \sty{fmtcount} package (which is
+%loaded by \styfmt{datetime}) defines some commands which display
+%a number or ordinal as a word, but it only has very limited
+%multilingual support. See the \sty{fmtcount} documentation
+%for further details.
+%
+%\section{Registers}
+%
+%\TeX\ provides \ics{day}, \ics{month} and \ics{year} registers. In
+%addition, \styfmt{datetime} provides the registers:
+%\ics{currenthour}, \ics{currentminute} and \ics{currentsecond}.
+%Note that old distributions of \TeX\ will always have
+%\cs{currentsecond} set to zero.
+%
+%\section{Configuration File}
+%
+%As from Version 2.4, the \styfmt{datetime} package will read in settings
+%from the configuration file \texttt{datetime.cfg}, if it exists,
+%which will override the default package options. For example,
+%suppose you prefer a short date without the day of week by default,
+%you will need to create a file called \texttt{datetime.cfg} that
+%contains the line:
+%\begin{verbatim}
+%\shortdate\showdowfalse
+%\end{verbatim}
+%The file \texttt{datetime.cfg} should then go somewhere on the
+%\TeX\ path. Now all you need to do is:
+%\begin{verbatim}
+%\usepackage{datetime}
+%\end{verbatim}
+%without having to specify the \pkgopt{short} and
+%\pkgopt{nodayofweek} options.
+%
+%You can also use this file to define and set your own date
+%styles. For example, you could create
+%a configuration file that has the following lines:
+%\begin{verbatim}
+%\newdateformat{dashdate}{\twodigit{\THEDAY}-\twodigit{\THEMONTH}-\THEYEAR}
+%\dashdate
+%\end{verbatim}
+%Whenever you use the \styfmt{datetime} package, it will now
+%use this format by default.
+%
+%\section{LaTeX2HTML styles}
+%
+%\changes{2.43}{2005/02/25}{Added LaTeX2HTML support}%
+%\changes{2.44}{2005/03/03}{Fixed minor bugs in Perl scripts}
+%Version 2.43 and above of the \styfmt{datetime} bundle
+%supplies the LaTeX2HTML style file \texttt{datetime.perl}.
+%This file should be placed in a
+%directory searched by LaTeX2HTML. The following limitations
+%apply to the LaTeX2HTML styles:
+%
+%\begin{itemize}
+%\item The configuration file \texttt{datetime.cfg}
+%is currently ignored. You can however
+%do:
+%\begin{verbatim}
+%\usepackage{datetime}
+%\html{\input{datetime.cfg}}
+%\end{verbatim}
+%This, I agree, is an unpleasant cludge.
+%
+%\item The commands \cs{monthname}\meta{language} are not
+%implemented.
+%
+%\item Some of the languages are not implemented.
+%
+%\item The package option \pkgopt{nodate} is not implemented.
+%
+%\end{itemize}
+%
+%\section{Troubleshooting}
+%
+%There is a \sty{datetime} FAQ available at:
+%\url{http://www.dickimaw-books.com/faqs/datetimefaq.html}.
+%
+%\StopEventually{\phantomsection
+%\addcontentsline{toc}{section}{Index}\PrintIndex
+%}
+%
+%
+%
+%\section{The Code}
+%\iffalse
+% \begin{macrocode}
+%<*datetime-defaults.sty>
+% \end{macrocode}
+%\fi
+% Default language settings.
+% \begin{macrocode}
+\ProvidesPackage{datetime-defaults}[2013/09/10]
+% \end{macrocode}
+%\begin{macro}{\ordinaldateenglish}
+% Default date ordinal:
+% \begin{macrocode}
+\newcommand*{\ordinaldateenglish}[1]{\ordinalnum{#1}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\monthnameenglish}
+% \begin{macrocode}
+\providecommand*{\monthnameenglish}[1][\month]{%
+ \@orgargctr=#1\relax
+ \ifcase\@orgargctr
+ \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month
+ numbers should go from 1 (January) to 12 (December)}%
+ \or January%
+ \or February%
+ \or March%
+ \or April%
+ \or May%
+ \or June%
+ \or July%
+ \or August%
+ \or September%
+ \or October%
+ \or November%
+ \or December%
+ \else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+ Month numbers should go from 1 (January) to 12 (December)}%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\shortmonthnameenglish}
+%\changes{2.1}{2003/12/17}{fixed bug producing an error message
+% in December}
+% \begin{macrocode}
+\providecommand*{\shortmonthnameenglish}[1][\month]{%
+ \@orgargctr=#1\relax
+ \ifcase\@orgargctr
+ \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month
+ numbers should go from 1 (jan) to 12 (dec)}%
+ \or Jan%
+ \or Feb%
+ \or Mar%
+ \or Apr%
+ \or May%
+ \or Jun%
+ \or Jul%
+ \or Aug%
+ \or Sept%
+ \or Oct%
+ \or Nov%
+ \or Dec%
+ \else%
+ \PackageError{datetime}%
+ {Invalid Month number \the\@orgargctr}%
+ {Month numbers should go from 1 (jan) to 12 (dec)}%
+\fi
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\dayofweeknameidenglish}
+% Given the day of week index, print associated the English name.
+% \begin{macrocode}
+\providecommand*{\dayofweeknameidenglish}[1]{%
+ \ifcase#1\relax
+ \or Sunday%
+ \or Monday%
+ \or Tuesday%
+ \or Wednesday%
+ \or Thursday%
+ \or Friday%
+ \or Saturday%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\shortdayofweeknameidenglish}
+% As before, but for abbreviated day of week name. English version:
+% \begin{macrocode}
+\providecommand*{\shortdayofweeknameidenglish}[1]{%
+ \ifcase#1\relax
+ \or Sun%
+ \or Mon%
+ \or Tue%
+ \or Wed%
+ \or Thu%
+ \or Fri%
+ \or Sat%
+\fi}
+% \end{macrocode}
+%\end{macro}
+%\iffalse
+% \begin{macrocode}
+%</datetime-defaults.sty>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*datetime.sty>
+% \end{macrocode}
+%\fi
+%\subsection{datetime.sty}
+% This section documents the code for \texttt{datetime.sty}
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{datetime}[2015/03/20 v2.60 Date Time Package]
+% \end{macrocode}
+%\changes{2.59}{2013/09/10}{new loads etoolbox}
+% \begin{macrocode}
+\RequirePackage{etoolbox}
+% \end{macrocode}
+%\texttt{fmtcount.sty} needs to be loaded here as it defines the
+% command \cs{fmtord} which may be redefined later:
+% \begin{macrocode}
+\RequirePackage{fmtcount}
+% \end{macrocode}
+% In case we're using an older version of \sty{fmtcount}:
+% \begin{macrocode}
+\@ifundefined{@FCmodulo}%
+{%
+ \let\@FCmodulo\@modulo
+}{}
+% \end{macrocode}
+% Need ifthen package for conditional stuff.
+% \begin{macrocode}
+\RequirePackage{ifthen}
+% \end{macrocode}
+%\subsubsection{Date Commands}
+% Load defaults:
+% \begin{macrocode}
+\RequirePackage{datetime-defaults}
+% \end{macrocode}
+%\begin{macro}{\if@dtl@nodate}
+% Define a new conditional \cs{if@dt@nodate}. If it is true,
+% \cs{today} will not be redefined, nor will
+% \cs{monthname}, \cs{shortmonthname}, \cs{dayofweek} and
+% \cs{shortdayofweek} be defined.
+% Set it to false.
+% \begin{macrocode}
+\newif\if@dt@nodate
+\@dt@nodatefalse
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\dateseparator}
+% Define the character used to separate the numbers in the formats
+% defined by \cs{ddmmyyyy} etc
+%\changes{2.43}{2005/02/25}{new}
+% \begin{macrocode}
+\newcommand{\dateseparator}{/}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\if@dt@multilingual}
+% Define switch to determine whether to enable multilingual support.
+% This check to see if babel package is
+% loaded instead of testing 'languagename (following suggestions on
+% comp.text.tex)
+%\changes{v2.49}{5 Dec 2006}{checks if babel package has been loaded}
+% Note that babel must be loaded \emph{before} datetime, otherwise
+% it will change the definitions of \cs{date}\meta{lang}.
+%\changes{2.55}{2007/08/20}{fixed bug preventing multilingual support}
+% \begin{macrocode}
+\newif\if@dt@multilingual
+ \@ifpackageloaded{babel}%
+ {%
+ \@dt@multilingualtrue
+ }%
+ {%
+ \@ifpackageloaded{ngerman}%
+ {\@dt@multilingualtrue}%
+ {\@dt@multilingualfalse}%
+ }
+% \end{macrocode}
+%\end{macro}
+% Define the \cs{ordinaldate}\meta{language} macros. These are
+% needed because some
+% languages only use an ordinal for the first day of
+% the month (such as french).
+% If |\ordinaldate|\meta{language} is not defined, then just display
+% the number.
+%\changes{2.45}{2005/05/23}{new}
+%\changes{2.59}{2013/09/10}{made robust}
+% \begin{macrocode}
+\DeclareRobustCommand*{\ordinaldate}[1]{%
+ \if@dt@multilingual
+% \end{macrocode}
+% Make sure language file has been loaded.
+% \begin{macrocode}
+ \DTloadDefIfNotLoadedButExists{\languagename}%
+ \@ifundefined{ordinaldate\languagename}{#1}%
+ {%
+ \csname ordinaldate\languagename\endcsname{#1}%
+ }%
+ \else
+ \ordinalnum{#1}%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\ifshowdow}
+% Now define the declarations that redefine |\formatdate| as they
+% are used by the package options. Need a conditional to determine
+% whether or not to show the day of week name.
+% \begin{macrocode}
+\newif\ifshowdow
+% \end{macrocode}
+%\end{macro}
+%\changes{1.1}{2002/04/20}{\cs{thedate} added}
+%\begin{macro}{\formatdate}
+% Initially |\formatdate| does nothing. It will be redefined later.
+%\changes{2.0}{2002/10/30}{changes \cs{thedate} to \cs{formatdate}
+% to avoid name conflict with other packages/class files.}
+% \begin{macrocode}
+\providecommand*{\formatdate}[3]{}
+% \end{macrocode}
+%\end{macro}
+% Provide counters to store the specified date:
+% \begin{macrocode}
+\newcount\@day
+\newcount\@month
+\newcount\@year
+% \end{macrocode}
+%\begin{macro}{\longdate}
+% Long date format. (This is the default in the absence of package
+% options, babel and datetime.cfg settings.)
+% \begin{macrocode}
+\DeclareRobustCommand*{\longdate}{%
+ \renewcommand*{\formatdate}[3]{%
+ \ifshowdow\dayofweekname{##1}{##2}{##3} \fi
+ \@day=##1\relax\@month=##2\relax\@year=##3\relax
+ \ordinaldate{\the\@day}\ \monthname[\@month], \the\@year}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\shortdate}
+% Abbreviated version of above
+% \begin{macrocode}
+\DeclareRobustCommand*{\shortdate}{%
+ \renewcommand*{\formatdate}[3]{%
+ \ifshowdow\shortdayofweekname{##1}{##2}{##3} \fi
+ \@day=##1\relax\@month=##2\relax\@year=##3\relax
+ \ordinaldate{\the\@day}\ \shortmonthname[\@month], \the\@year}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\twodigit}
+% Define |\twodigit| to display a number as two digits. \LaTeX\
+% already defines the internal command |\two@digits|, but need
+% a command that can be used in |\newdateformat| in the document.
+%\changes{2.2}{2004/04/27}{new}
+% \begin{macrocode}
+\let\twodigit\two@digits
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\yyyymmdddate}
+%\changes{2.56}{2009/11/16}{new}
+% Year/month/day format. (Day and month displayed as two digits,
+% year displayed as is.)
+% \begin{macrocode}
+\DeclareRobustCommand*{\yyyymmdddate}{%
+\renewcommand*{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\the\@year\dateseparator \twodigit\@month\dateseparator
+\twodigit\@day}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\ddmmyyyydate}
+% Day/month/year format. (Day and month displayed as two digits,
+% year displayed as is.)
+% \begin{macrocode}
+\DeclareRobustCommand*{\ddmmyyyydate}{%
+\renewcommand*{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\twodigit\@day\dateseparator \twodigit\@month\dateseparator
+\the\@year}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\dmyyyydate}
+% Day/month/year format. (Numbers all displayed as is.)
+% \begin{macrocode}
+\DeclareRobustCommand*{\dmyyyydate}{%
+\renewcommand*{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\the\@day\dateseparator \the\@month\dateseparator \the\@year}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\ddmmyydate}
+% Day/month/year format. (All numbers displayed as two digits.)
+% \begin{macrocode}
+\DeclareRobustCommand*{\ddmmyydate}{\renewcommand*{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\@dtctr=\@year%
+\@FCmodulo{\@dtctr}{100}%
+\twodigit\@day\dateseparator \twodigit\@month\dateseparator
+\twodigit\@dtctr}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\dmyydate}
+% Day/month/year format. (Day and month displayed as is, year
+% abbreviated to two digits.)
+% \begin{macrocode}
+\DeclareRobustCommand*{\dmyydate}{\renewcommand*{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\@dtctr=\@year%
+\@FCmodulo{\@dtctr}{100}%
+\the\@day\dateseparator \the\@month\dateseparator \twodigit\@dtctr}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\textdate}
+% Full textual date (English).
+% \begin{macrocode}
+\DeclareRobustCommand*{\textdate}{%
+\renewcommand*{\formatdate}[3]{%
+\ifshowdow\dayofweekname{##1}{##2}{##3} the \fi
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\Ordinalstringnum{\@day}\ of \monthname[\@month],
+\Numberstringnum{\@year}%
+}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\usdate}
+% US format (as per original definition of |\today|)
+% \begin{macrocode}
+\DeclareRobustCommand*{\usdate}{%
+\renewcommand*{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\monthname[\@month]\ \the\@day, \the\@year}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\mmddyyyydate}
+% Month/day/year format. (Month and day displayed as two digits,
+% year displayed as is.)
+% \begin{macrocode}
+\DeclareRobustCommand*{\mmddyyyydate}{%
+\renewcommand*{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\twodigit\@month\dateseparator \twodigit\@day\dateseparator
+\the\@year}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\mdyyyydate}
+% Month/day/year format. (All numbers displayed as is.)
+% \begin{macrocode}
+\DeclareRobustCommand*{\mdyyyydate}{%
+\renewcommand*{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\the\@month\dateseparator \the\@day\dateseparator \the\@year}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\mmddyydate}
+% Month/day/year format. (All numbers displayed with two digits.)
+% \begin{macrocode}
+\DeclareRobustCommand*{\mmddyydate}{\renewcommand*{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\@dtctr=\@year%
+\@FCmodulo{\@dtctr}{100}%
+\twodigit\@month\dateseparator \twodigit\@day\dateseparator
+\twodigit\@dtctr}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\mdyydate}
+% Month/day/year format. (Month and day displayed as is, year
+% abbreviated to two digits.)
+% \begin{macrocode}
+\DeclareRobustCommand*{\mdyydate}{\renewcommand*{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\@dtctr=\@year%
+\@FCmodulo{\@dtctr}{100}%
+\the\@month\dateseparator \the\@day\dateseparator \twodigit\@dtctr}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\newdate}
+% Define commands to save dates
+% and later format them. Store a given date:
+%\changes{2.45}{2005/05/01}{new}
+% \begin{macrocode}
+\newcommand*{\newdate}[4]{%
+\@ifundefined{date@#1@y}{%
+\@namedef{date@#1@d}{#2}%
+\@namedef{date@#1@m}{#3}%
+\@namedef{date@#1@y}{#4}}{%
+\PackageError{datetime}{Date `#1' already defined}{}}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\getdateyear}
+% Display year from previously stored date
+% \begin{macrocode}
+\newcommand*{\getdateyear}[1]{%
+\@ifundefined{date@#1@y}{%
+\PackageError{datetime}{Date `#1' not defined}{}}{%
+\csname date@#1@y\endcsname}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\getdatemonth}
+% Display month from previously stored date
+% \begin{macrocode}
+\newcommand*{\getdatemonth}[1]{%
+\@ifundefined{date@#1@m}{%
+\PackageError{datetime}{Date `#1' not defined}{}}{%
+\csname date@#1@m\endcsname}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\getdateday}
+% Display day from previously stored date
+% \begin{macrocode}
+\newcommand{\getdateday}[1]{%
+\@ifundefined{date@#1@d}{%
+\PackageError{datetime}{Date `#1' not defined}{}}{%
+\csname date@#1@d\endcsname}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\displaydate}
+% Display a previously stored date using current date format
+% \begin{macrocode}
+\newcommand*{\displaydate}[1]{%
+\@ifundefined{date@#1@y}{%
+\PackageError{datetime}{Date `#1' not defined}{}}{%
+\formatdate{\csname date@#1@d\endcsname}{%
+\csname date@#1@m\endcsname}{%
+\csname date@#1@y\endcsname}}}
+% \end{macrocode}
+%\end{macro}
+% Set defaults:
+% \begin{macrocode}
+\longdate
+\showdowtrue
+% \end{macrocode}
+%
+%\changes{2.56}{2009/11/16}{moved definition of \cs{newdateformat}
+% before cfg file loaded}
+% Define |\newdateformat| which defines a declaration that redefines |\formatdate| so that
+% it uses |\dateformat|. |\dateformat| takes four arguments, the first defines the format
+% the last three arguments are the three arguments that effectively get passed to |\formatdate|.
+% |\dateformat| sets |\@day|, |\@month| and |\@year|. |\c@DAY|, |\c@MONTH| and |\c@YEAR|
+% are set as synonims for |\@day|, |\@month| and |\@year|, to that the uses can use the counters
+% |DAY|, |MONTH| and |YEAR| as part of the format.
+% The commands |\THEDAY|, |\THEMONTH| and |\THEYEAR| should only be
+% used in the argument to |\newdateformat|. This is done partly to
+% assist the \LaTeX2HTML version.
+%
+% This command must be defined before the configuration file is
+% loaded, which in turn must be before the package options, therefore
+% can't test for \texttt{nodate} package option.
+% \begin{macrocode}
+\providecommand*\THEDAY{\the\@day}
+\providecommand*\THEMONTH{\the\@month}
+\providecommand*\THEYEAR{\the\@year}
+% \end{macrocode}
+% Simulate a \LaTeX\ counter.
+% \begin{macrocode}
+\let\c@DAY=\@day
+\let\c@MONTH=\@month
+\let\c@YEAR=\@year
+% \end{macrocode}
+%\begin{macro}{\newdateformat}
+% Provide a means to define a new date format.
+%\changes{2.2}{2004/04/27}{new}
+% \begin{macrocode}
+\providecommand{\newdateformat}[2]{%
+\@ifundefined{#1}{%
+\expandafter\DeclareRobustCommand\csname#1\endcsname{%
+\renewcommand{\formatdate}{\dateformat{#2}}}}{%
+\PackageError{datetime}{Can't create new date format, command
+\textbackslash#1 already defined}{You will need to
+give your new date format a different name}}}
+% \end{macrocode}
+%\end{macro}
+% \subsubsection{Time Macros}
+%\begin{macro}{\currenttime}
+% (New to v2.3) Define |\currenttime| which will print the
+% time according to the current format.
+%\changes{2.56}{2009/11/16}{change to use \cs{formattime}}
+% \begin{macrocode}
+\DeclareRobustCommand*{\currenttime}{%
+ \formattime{\currenthour}{\currentminute}{\currentsecond}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\formattime}
+% Define \cs{formattime} analoguous to \cs{formatdate}.
+% Set it to 24hr time by default
+%\changes{2.56}{2009/11/16}{new}
+% \begin{macrocode}
+\newcommand*{\formattime}[3]{\protect\@formattime{#1}{#2}{#3}}
+\newcommand*{\@formattime}[3]{%
+ \csname timeformat@xxivtime\endcsname{#1}{#2}{#3}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\timeseparator}
+%\changes{2.43}{2005/02/25}{new}
+% Define separator for numerical times:
+% \begin{macrocode}
+\newcommand*{\timeseparator}{:}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\settimeformat}
+% Switch to specified time format:
+%\changes{2.3}{2004/05/01}{new}
+%\changes{2.56}{2009/11/16}{now sets formattime}
+% \begin{macrocode}
+\providecommand*{\settimeformat}[1]{%
+ \@ifundefined{timeformat@#1}{%
+ \PackageError{datetime}{Unknown time format `#1'}{}%
+ }{%
+ \renewcommand*{\@formattime}[3]{%
+ \csname timeformat@#1\endcsname{##1}{##2}{##3}}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+% Define a command to create a new time format, similar to the new
+% date format. Again this is done in a way that makes it easier to
+% code the \LaTeX2HTML version.
+% \begin{macrocode}
+\newcount\c@HOUR
+\newcount\c@HOURXII
+\newcount\c@MINUTE
+\newcount\c@TOHOUR
+\newcount\c@TOMINUTE
+\newcount\c@SECOND
+% \end{macrocode}
+% These commands should only be used in |\newtimeformat|.
+% \begin{macrocode}
+\def\THEHOUR{\the\c@HOUR}
+\def\THEHOURXII{\the\c@HOURXII}
+\def\THEMINUTE{\the\c@MINUTE}
+\def\THETOHOUR{\the\c@TOHOUR}
+\def\THETOMINUTE{\the\c@TOMINUTE}
+\def\THESECOND{\the\c@SECOND}
+% \end{macrocode}
+%\begin{macro}{\currenthour}
+%\changes{2.56}{2009/11/16}{new}
+% Store the current hour
+% \begin{macrocode}
+\newcount\currenthour
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\currentminute}
+%\changes{2.56}{2009/11/16}{new}
+% Store current minute
+% \begin{macrocode}
+\newcount\currentminute
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\currentsecond}
+%\changes{2.56}{2009/11/16}{new}
+\newcount\currentsecond
+%\end{macro}
+% Get time information from \cs{pdfcreationdate} (if it exists)
+% \begin{macrocode}
+{\catcode`\D=12\relax
+ \gdef\@dt@getdate D:#1#2#3#4#5#6#7#8{\@dt@gettime}%
+}
+\@ifundefined{pdfcreationdate}{%
+ \currenthour=\time\relax
+ \divide\currenthour by 60\relax
+ \currentminute=\time\relax
+ \@FCmodulo{\currentminute}{60}%
+ \currentsecond=0\relax
+}{%
+ \def\@dt@gettime#1#2#3#4#5#6#7\relax{%
+ \currenthour=#1#2\relax
+ \currentminute=#3#4\relax
+ \currentsecond=#5#6\relax}%
+ \expandafter\@dt@getdate\pdfcreationdate\relax
+}
+% \end{macrocode}
+%\begin{macro}{\newtimeformat}
+% Provide a means to define a new time format.
+%\changes{2.3}{2004/05/01}{new}
+%\changes{2.56}{2009/11/16}{added \cs{timeformat}@\meta{name}}
+% \begin{macrocode}
+\providecommand*{\newtimeformat}[2]{%
+\@ifundefined{#1}{%
+\expandafter\def\csname#1\endcsname{%
+ \csname timeformat@#1\endcsname{\currenthour}{\currentminute}%
+ {\currentsecond}%
+}%
+\expandafter\def\csname timeformat@#1\endcsname##1##2##3{%
+\c@HOUR=##1%
+\c@HOURXII=\c@HOUR
+\ifnum\c@HOURXII>12
+\advance\c@HOURXII by -12\relax
+\fi
+\c@MINUTE=##2%
+\c@TOHOUR=\c@HOURXII
+\advance\c@TOHOUR by 1\relax
+\@FCmodulo{\c@TOHOUR}{12}%
+\c@TOMINUTE=\c@MINUTE
+\advance\c@TOMINUTE by -60\relax
+\multiply\c@TOMINUTE by -1\relax
+\c@SECOND=##3\relax
+#2\relax
+}}{%
+\PackageError{datetime}{Command \textbackslash#1 already defined}{%
+You can't create a new time format called "#1" as the command
+\textbackslash#1 already exists}}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\xxivtime}
+% Define commands to print the current time. Twenty-four hour time:
+% \begin{macrocode}
+\newtimeformat{xxivtime}{%
+\twodigit\THEHOUR\timeseparator\twodigit\THEMINUTE}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\hhmmsstime}
+% Twenty-four hour time including seconds.
+% \begin{macrocode}
+\newtimeformat{hhmmsstime}{%
+\twodigit\THEHOUR\timeseparator\twodigit\THEMINUTE\timeseparator
+\twodigit\THESECOND}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\ampmtime}
+% 12-hour time:
+%\changes{2.3}{2004/05/01}{fixed minor bug}
+%\changes{2.51}{2007/01/30}{fixed bug between midnight and 1am}
+% \begin{macrocode}
+\newtimeformat{ampmtime}{%
+\ifthenelse{\value{HOUR}=0}{12}{\THEHOURXII}\timeseparator
+\twodigit\THEMINUTE
+\ifthenelse{\value{HOUR}<12}{\amname}{%
+\ifthenelse{\value{HOUR}=12}{ \noon}{\pmname}}}
+% \end{macrocode}
+%\end{macro}
+% Textual time:
+%\begin{macro}{\hourstring}
+% \cs{hourstring}\marg{count} will print |\midnight| if
+% \meta{count} is 0, otherwise will do \cs{Numberstring}\marg{count}.
+% \begin{macrocode}
+\newcommand*{\hourstring}[1]{%
+\ifthenelse{\value{#1}=0}{\midnight}{\Numberstring{#1}}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\oclock}
+%\changes{2.43}{2005/02/23}{fixed bug causing an infinite loop on the hour}
+% \begin{macrocode}
+\newtimeformat{oclock}{%
+ \ifthenelse{\(\value{HOUR}=0 \OR \value{HOUR}=12 \OR\value{HOUR}=24\)\AND
+ \value{MINUTE}=0}{%
+% \end{macrocode}
+% Midnight or Midday:
+% \begin{macrocode}
+\ifthenelse{\value{HOUR}=12}{\noon}{\midnight}}{%
+% \end{macrocode}
+% Neither Midnight nor Midday.
+% Do minutes first
+% \begin{macrocode}
+\ifthenelse{\value{MINUTE}=0}{%
+% \end{macrocode}
+% On the hour: don't print any minutes, just do the hour and
+% |\oclockstring|
+% \begin{macrocode}
+\Numberstring{HOUR} \oclockstring}{%
+\ifthenelse{\value{MINUTE}=15}{%
+\quarterpast\ \hourstring{HOUR}}{%
+\ifthenelse{\value{MINUTE}=30}{%
+\halfpast\ \hourstring{HOUR}}{%
+\ifthenelse{\value{MINUTE}=45}{%
+\quarterto\ \hourstring{TOHOUR}}{%
+\ifthenelse{\value{MINUTE}<30}{%
+\Numberstring{MINUTE}\ \ifthenelse{\value{MINUTE}=1}{minute}{minutes}
+past \hourstring{HOURXII}}{%
+\Numberstring{TOMINUTE}\ \ifthenelse{%
+\value{TOMINUTE}=1}{minute}{minutes} to \hourstring{TOHOUR}}}}}}%
+% \end{macrocode}
+% Now say whether it is morning or afternoon
+% \begin{macrocode}
+\ifthenelse{\value{HOUR}<12}{%
+% \end{macrocode}
+% Morning
+% \begin{macrocode}
+\ifthenelse{\value{HOUR}=0}{}{\ \amstring}}{%
+% \end{macrocode}
+% Afternoon
+% \begin{macrocode}
+\ifthenelse{\value{TOHOUR}=0}{}{\ \pmstring}}}}
+% \end{macrocode}
+%\end{macro}
+% Define textual strings used in the above.
+%\begin{macro}{\amname}
+% \begin{macrocode}
+\providecommand*{\amname}{am}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\pmname}
+% \begin{macrocode}
+\providecommand*{\pmname}{pm}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\amorpmname}
+%\changes{2.60}{2015-03-20}{fixed bug}
+% \begin{macrocode}
+\providecommand*{\amorpmname}{%
+\ifthenelse{\value{HOUR}>11}{\pmname}{\amname}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\amstring}
+% \begin{macrocode}
+\providecommand*{\amstring}{in the morning}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\pmstring}
+% \begin{macrocode}
+\providecommand*{\pmstring}{in the afternoon}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\amorpmstring}
+% \begin{macrocode}
+\providecommand*{\amorpmstring}{%
+\ifthenelse{\value{HOUR}>12}{\pmstring}{\amstring}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\halfpast}
+% \begin{macrocode}
+\providecommand*{\halfpast}{Half past}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\quarterpast}
+% \begin{macrocode}
+\providecommand*{\quarterpast}{Quarter past}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\quarterto}
+% \begin{macrocode}
+\providecommand*{\quarterto}{Quarter to}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\noon}
+% \begin{macrocode}
+\providecommand*{\noon}{Noon}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\midnight}
+% \begin{macrocode}
+\providecommand*{\midnight}{Midnight}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\oclockstring}
+% \begin{macrocode}
+\providecommand*{\oclockstring}{O'Clock}
+% \end{macrocode}
+%\end{macro}
+%\subsubsection{Configuration File}
+% Load in specifications from configuration file:
+%\changes{2.4}{2004/09/25}{added provision for configuration file
+%datetime.cfg}
+% \begin{macrocode}
+\InputIfFileExists{datetime.cfg}{\PackageInfo{datetime}{%
+Loading local datetime configurations}}{%
+\PackageInfo{datetime}{No datetime.cfg file found, using default
+settings}}
+% \end{macrocode}
+%\subsubsection{Package Options}
+% Package options need to override \sty{babel}, so define command to
+% add date format to \sty{babel}'s extras.
+% \begin{macrocode}
+\@ifpackageloaded{babel}{%
+ \newcommand*{\dt@addtoextras}[1]{%
+ \@ifundefined{extrasenglish}{}{%
+ \addto\extrasenglish{#1}%
+ }%
+ \@ifundefined{extrasamerican}{}{%
+ \addto\extrasamerican{#1}%
+ }%
+ \@ifundefined{extrasaustrian}{}{%
+ \addto\extrasaustrian{#1}%
+ }%
+ \@ifundefined{extrasaustralian}{}{%
+ \addto\extrasaustralian{#1}%
+ }%
+ \@ifundefined{extrasbahasa}{}{%
+ \addto\extrasbahasa{#1}%
+ }%
+ \@ifundefined{extrasbreton}{}{%
+ \addto\extrasbreton{#1}%
+ }%
+ \@ifundefined{extrasbritish}{}{%
+ \addto\extrasbritish{#1}%
+ }%
+ \@ifundefined{extrasbulgarian}{}{%
+ \addto\extrasbulgarian{#1}%
+ }%
+ \@ifundefined{extrascanadian}{}{%
+ \addto\extrascanadian{#1}%
+ }%
+ \@ifundefined{extrascatalan}{}{%
+ \addto\extrascatalan{#1}%
+ }%
+ \@ifundefined{extrascroatian}{}{%
+ \addto\extrascroatian{#1}%
+ }%
+ \@ifundefined{extrasczech}{}{%
+ \addto\extrasczech{#1}%
+ }%
+ \@ifundefined{extrasdanish}{}{%
+ \addto\extrasdanish{#1}%
+ }%
+ \@ifundefined{extrasesperanto}{}{%
+ \addto\extrasesperanto{#1}%
+ }%
+ \@ifundefined{extrasestonian}{}{%
+ \addto\extrasestonian{#1}%
+ }%
+ \@ifundefined{extrasfinnish}{}{%
+ \addto\extrasfinnish{#1}%
+ }%
+ \@ifundefined{extrasfrench}{}{%
+ \addto\extrasfrench{#1}%
+ }%
+ \@ifundefined{extrasgalician}{}{%
+ \addto\extrasgalician{#1}%
+ }%
+ \@ifundefined{extrasgerman}{}{%
+ \addto\extrasgerman{#1}%
+ }%
+ \@ifundefined{extrasgreek}{}{%
+ \addto\extrasgreek{#1}%
+ }%
+ \@ifundefined{extrashebrew}{}{%
+ \addto\extrashebrew{#1}%
+ }%
+ \@ifundefined{extrasicelandic}{}{%
+ \addto\extrasicelandic{#1}%
+ }%
+ \@ifundefined{extrasirish}{}{%
+ \addto\extrasirish{#1}%
+ }%
+ \@ifundefined{extrasitalian}{}{%
+ \addto\extrasitalian{#1}%
+ }%
+ \@ifundefined{extraslatin}{}{%
+ \addto\extraslatin{#1}%
+ }%
+ \@ifundefined{extraslsorbian}{}{%
+ \addto\extraslsorbian{#1}%
+ }%
+ \@ifundefined{extrasmagyar}{}{%
+ \addto\extrasmagyar{#1}%
+ }%
+ \@ifundefined{extrasnaustrian}{}{%
+ \addto\extrasnaustrian{#1}%
+ }%
+ \@ifundefined{extrasngerman}{}{%
+ \addto\extrasngerman{#1}%
+ }%
+ \@ifundefined{extrasnewzealand}{}{%
+ \addto\extrasnewzealand{#1}%
+ }%
+ \@ifundefined{extrasnorsk}{}{%
+ \addto\extrasnorsk{#1}%
+ }%
+ \@ifundefined{extraspolish}{}{%
+ \addto\extraspolish{#1}%
+ }%
+ \@ifundefined{extrasportuges}{}{%
+ \addto\extrasportuges{#1}%
+ }%
+ \@ifundefined{extrasromanian}{}{%
+ \addto\extrasromanian{#1}%
+ }%
+ \@ifundefined{extrasrussian}{}{%
+ \addto\extrasrussian{#1}%
+ }%
+ \@ifundefined{extrassamin}{}{%
+ \addto\extrassamin{#1}%
+ }%
+ \@ifundefined{extrasscottish}{}{%
+ \addto\extrasscottish{#1}%
+ }%
+ \@ifundefined{extrasserbian}{}{%
+ \addto\extrasserbian{#1}%
+ }%
+ \@ifundefined{extrasslovak}{}{%
+ \addto\extrasslovak{#1}%
+ }%
+ \@ifundefined{extrasslovene}{}{%
+ \addto\extrasslovene{#1}%
+ }%
+ \@ifundefined{extrasspanish}{}{%
+ \addto\extrasspanish{#1}%
+ }%
+ \@ifundefined{extrasswedish}{}{%
+ \addto\extrasswedish{#1}%
+ }%
+ \@ifundefined{extrasturkish}{}{%
+ \addto\extrasturkish{#1}%
+ }%
+ \@ifundefined{extrasUKenglish}{}{%
+ \addto\extrasUKenglish{#1}%
+ }%
+ \@ifundefined{extrasukraine}{}{%
+ \addto\extrasukraine{#1}%
+ }%
+ \@ifundefined{extrasUSenglish}{}{%
+ \addto\extrasUSenglish{#1}%
+ }%
+ \@ifundefined{extrasusorbian}{}{%
+ \addto\extrasusorbian{#1}%
+ }%
+ \@ifundefined{extraswelsh}{}{%
+ \addto\extraswelsh{#1}%
+ }%
+ }
+}{%
+ \newcommand*{\dt@addtoextras}[1]{}
+}
+% \end{macrocode}
+%\begin{macro}{setdefaultdate}
+% Set default date.
+% \begin{macrocode}
+\newcommand*{\setdefaultdate}[1]{\dt@addtoextras{#1}#1}
+% \end{macrocode}
+%\end{macro}
+% Specify the package options, specify default options and process
+% \begin{macrocode}
+\RequirePackage{fmtcount}
+\DeclareOption{long}{\setdefaultdate{\longdate}}
+\DeclareOption{short}{\setdefaultdate{\shortdate}}
+\DeclareOption{yyyymmdd}{\setdefaultdate{\yyyymmdddate}}
+\DeclareOption{ddmmyyyy}{\setdefaultdate{\ddmmyyyydate}}
+\DeclareOption{dmyyyy}{\setdefaultdate{\dmyyyydate}}
+\DeclareOption{ddmmyy}{\setdefaultdate{\ddmmyydate}}
+\DeclareOption{dmyy}{\setdefaultdate{\dmyydate}}
+\DeclareOption{text}{\setdefaultdate{\textdate}}
+\DeclareOption{us}{\setdefaultdate{\usdate}}
+\DeclareOption{mmddyyyy}{\setdefaultdate{\mmddyyyydate}}
+\DeclareOption{mdyyyy}{\setdefaultdate{\mdyyyydate}}
+\DeclareOption{mmddyy}{\setdefaultdate{\mmddyydate}}
+\DeclareOption{mdyy}{\setdefaultdate{\mdyydate}}
+\DeclareOption{level}{\fmtcountsetoptions{fmtord=level}}
+\DeclareOption{raise}{\fmtcountsetoptions{fmtord=raise}}
+\DeclareOption{dayofweek}{\showdowtrue}
+\DeclareOption{nodayofweek}{\showdowfalse}
+\DeclareOption{nodate}{\@dt@nodatetrue}
+\DeclareOption{hhmmss}{\settimeformat{hhmmsstime}}
+\DeclareOption{24hr}{\settimeformat{xxivtime}}
+\DeclareOption{12hr}{\settimeformat{ampmtime}}
+\DeclareOption{oclock}{\settimeformat{oclock}}
+\DeclareOption{iso}{%
+ \setdefaultdate{\yyyymmdddate}\settimeformat{hhmmsstime}%
+ \renewcommand*{\dateseparator}{-}%
+ \renewcommand*{\timeseparator}{:}%
+}
+% \end{macrocode}
+%
+%\begin{macro}{\loadDTdef}
+%\changes{2.58}{2010/09/21}{new}
+% Load the datetime language definition file for the given language
+% \begin{macrocode}
+\newcommand*{\loadDTdef}[1]{%
+% \end{macrocode}
+% Check whether the file has already been loaded.
+% \begin{macrocode}
+ \DTifDefLoaded{#1}%
+% \end{macrocode}
+% File already loaded, so do nothing.
+% \begin{macrocode}
+ {}%
+ {%
+ \InputIfFileExists{dt-#1.def}%
+ {}%
+ {%
+ \PackageWarning{datetime}{Can't find datetime language
+ definition file for `#1'}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTifDefLoaded}
+%\changes{2.59}{2013/09/10}{new}
+% \begin{macrocode}
+\newcommand{\DTifDefLoaded}[3]{%
+ \@ifundefined{ver@dt-#1.def}{#3}{#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTloadDefIfNotLoadedButExists}
+%\changes{2.59}{2013/09/10}{new}
+% \begin{macrocode}
+\newcommand{\DTloadDefIfNotLoadedButExists}[1]{%
+ \DTifDefLoaded{#1}%
+ {}%
+ {%
+ \bgroup
+ \catcode `\@ 11\relax
+ \InputIfFileExists{dt-#1.def}{}{}%
+ \egroup
+ }%
+}%
+% \end{macrocode}
+%\end{macro}
+%
+% Multilingual support. These package options shouldn't really be
+% needed if babel has already been loaded.
+% \begin{macrocode}
+\DeclareOption{austrian}{\loadDTdef{austrian}}
+\DeclareOption{american}{\loadDTdef{american}}
+\DeclareOption{bahasa}{\loadDTdef{bahasa}}
+\DeclareOption{basque}{\loadDTdef{basque}}
+\DeclareOption{breton}{\loadDTdef{breton}}
+\DeclareOption{british}{\loadDTdef{british}}
+\DeclareOption{bulgarian}{\loadDTdef{bulgarian}}
+\DeclareOption{catalan}{\loadDTdef{catalan}}
+\DeclareOption{croatian}{\loadDTdef{croatian}}
+\DeclareOption{czech}{\loadDTdef{czech}}
+\DeclareOption{danish}{\loadDTdef{danish}}
+\DeclareOption{dutch}{\loadDTdef{dutch}}
+\DeclareOption{esperanto}{\loadDTdef{esperanto}}
+\DeclareOption{estonian}{\loadDTdef{estonian}}
+\DeclareOption{finnish}{\loadDTdef{finnish}}
+\DeclareOption{french}{\loadDTdef{french}}
+\DeclareOption{galician}{\loadDTdef{galician}}
+\DeclareOption{german}{\loadDTdef{german}\dategerman}
+\DeclareOption{greek}{\loadDTdef{greek}}
+\DeclareOption{hebrew}{\loadDTdef{hebrew}}
+\DeclareOption{icelandic}{\loadDTdef{icelandic}}
+\DeclareOption{irish}{\loadDTdef{irish}}
+\DeclareOption{italian}{\loadDTdef{italian}}
+\DeclareOption{latin}{\loadDTdef{latin}}
+\DeclareOption{lsorbian}{\loadDTdef{lsorbian}}
+\DeclareOption{magyar}{\loadDTdef{magyar}}
+\DeclareOption{naustrian}{\loadDTdef{naustrian}}
+\DeclareOption{ngerman}{\loadDTdef{ngerman}\datengerman}
+\DeclareOption{norsk}{\loadDTdef{norsk}}
+\DeclareOption{polish}{\loadDTdef{polish}}
+\DeclareOption{portuges}{\loadDTdef{portuges}}
+\DeclareOption{romanian}{\loadDTdef{romanian}}
+\DeclareOption{russian}{\loadDTdef{russian}}
+\DeclareOption{samin}{\loadDTdef{samin}}
+\DeclareOption{scottish}{\loadDTdef{scottish}}
+\DeclareOption{serbian}{\loadDTdef{serbian}}
+\DeclareOption{slovak}{\loadDTdef{slovak}}
+\DeclareOption{slovene}{\loadDTdef{slovene}}
+\DeclareOption{spanish}{\loadDTdef{spanish}}
+\DeclareOption{swedish}{\loadDTdef{swedish}}
+\DeclareOption{turkish}{\loadDTdef{turkish}}
+\DeclareOption{ukraineb}{\loadDTdef{ukraineb}}
+\DeclareOption{usorbian}{\loadDTdef{usorbian}}
+\DeclareOption{UKenglish}{\loadDTdef{UKenglish}}
+\DeclareOption{USenglish}{\loadDTdef{USenglish}}
+\DeclareOption{welsh}{\loadDTdef{welsh}}
+% \end{macrocode}
+% Process package options
+% \begin{macrocode}
+\ProcessOptions
+% \end{macrocode}
+% \subsubsection{Date Specific Macros}
+% \begin{macrocode}
+\if@dt@nodate
+ \PackageInfo{datetime}{option "nodate" used, so note defining
+ \string\dateformat}
+\else
+% \end{macrocode}
+%\begin{macro}{\dateformat}
+% Format the given date in the given format.
+% \begin{macrocode}
+ \providecommand*{\dateformat}[4]{%
+ \@day=#2\relax\@month=#3\relax\@year=#4\relax#1}
+% \end{macrocode}
+%\end{macro}
+% \begin{macrocode}
+\fi
+% \end{macrocode}
+% Define the macro that prints the month name.
+% (Only define this command if @dt@nodate is false)
+% \begin{macrocode}
+\if@dt@nodate
+% \end{macrocode}
+% The |nodate| option was used, so just print informative message,
+% and do nothing else.
+% \begin{macrocode}
+ \PackageInfo{datetime}{option "nodate" used, so not defining
+ \string\monthname}
+\else
+% \end{macrocode}
+%\begin{macro}{\monthname}
+%Define \verb|\monthname| to be language dependent. If there
+%is no \verb|\monthname|\meta{language}, defaults to English.
+% \begin{macrocode}
+\newcommand*{\monthname}[1][\month]{%
+ \if@dt@multilingual
+% \end{macrocode}
+% Make sure language file has been loaded.
+% \begin{macrocode}
+ \DTloadDefIfNotLoadedButExists{\languagename}%
+ \@ifundefined{monthname\languagename}%
+ {%
+ \PackageWarning{datetime}{No month names provided for language
+ '\languagename'}%
+ \monthnameenglish[#1]%
+ }%
+ {\csname monthname\languagename\endcsname[#1]}%
+ \else
+ \monthnameenglish[#1]%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+% End of |\if@dt@nodate| else part:
+% \begin{macrocode}
+\fi
+% \end{macrocode}
+% Define the macro that prints the abbreviated month name
+% (Again, only do this if @dt@nodate is false)
+% \begin{macrocode}
+\if@dt@nodate
+% \end{macrocode}
+% The |nodate| option was used, so just print informative message,
+% and do nothing else.
+% \begin{macrocode}
+ \PackageInfo{datetime}{option "nodate" used, so not defining
+ \protect\shortmonthname}
+\else
+% \end{macrocode}
+%\begin{macro}{\shortmonthname}
+%Define \verb|\shortmonthname| to be language dependent. If there
+%is no \verb|\shortmonthname|\meta{language}, defaults to English.
+% \begin{macrocode}
+\newcommand*{\shortmonthname}[1][\month]{%
+ \if@dt@multilingual
+% \end{macrocode}
+% Make sure language file has been loaded.
+% \begin{macrocode}
+ \DTloadDefIfNotLoadedButExists{\languagename}%
+ \@ifundefined{shortmonthname\languagename}%
+ {%
+ \PackageWarning{datetime}{No abbreviated month name defined for
+ language '\languagename', using full version instead}%
+ \monthname[#1]%
+ }%
+ {%
+ \csname shortmonthname\languagename\endcsname[#1]%
+ }%
+ \else
+ \shortmonthnameenglish[#1]%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+% End of |\if@dt@nodate| else part:
+% \begin{macrocode}
+\fi
+% \end{macrocode}
+% Define macros needed to compute the weekday
+% (Again, only do this if @dt@nodate is false)
+%\begin{macro}{\ifDTleapyear}
+% Need to define |\ifDTleapyear| regardless of @dt@nodate otherwise \LaTeX\ won't
+% match |\ifDTleapyear| with |\fi|
+%\changes{2.59}{2013/09/10}{renamed \cs{ifleapyear} to
+%\cs{ifDTLleapyear} to avoid clash with other packages}
+% \begin{macrocode}
+\newif\ifDTleapyear
+\@ifundefined{ifleapyear}
+{%
+% \end{macrocode}
+% Provide backward compatibility:
+% \begin{macrocode}
+ \def\ifleapyear{\ifDTLleapyear}
+ \let\leapyeartrue\DTLleapyeartrue
+ \let\leapyearfalse\DTLleapyearfalse
+}%
+{}
+% \end{macrocode}
+%\end{macro}
+% Define temporary counter for arithmetic.
+% \begin{macrocode}
+\newcount\@dtctr
+% \end{macrocode}
+% If nodate, add a reminder in the log file that \verb|\dayofweek|
+% is not defined.
+% \begin{macrocode}
+\if@dt@nodate
+ \PackageInfo{datetime}{option "nodate" used, so not defining
+ \string\dayofweek \space or \string\shortdayofweek}
+\else
+% \end{macrocode}
+% Using the algorithm documented at
+% http://userpages.wittenberg.edu/bshelburne/Comp150/DayofWeek.htm
+% Syntax: \verb|testifleapyear{|\meta{year}\verb|}| sets
+% conditional \verb|\ifDTleapyear|.
+% \begin{macrocode}
+\providecommand*{\testifleapyear}[1]{%
+ \DTleapyearfalse
+ \@year=#1\relax
+ \@dtctr=\@year
+ \@FCmodulo{\@dtctr}{400}%
+ \ifnum\@dtctr=0\relax
+% \end{macrocode}
+% year mod 400 = 0 => leap year
+% \begin{macrocode}
+ \DTleapyeartrue
+ \else
+ \@dtctr=\@year
+ \@FCmodulo{\@dtctr}{100}%
+ \ifnum\@dtctr=0\relax
+% \begin{macrocode}
+% year mod 100 = 0 && year mod 400 != 0 => not a leap year
+% \end{macrocode}
+ \DTleapyearfalse
+ \else
+ \@dtctr=\@year
+ \@FCmodulo{\@dtctr}{4}%
+ \ifnum\@dtctr=0\relax
+% \begin{macrocode}
+% year mod 4 = 0 && year mod 100 != 0 => leap year
+% \end{macrocode}
+ \DTleapyeartrue
+ \fi
+ \fi
+ \fi
+}
+% \end{macrocode}
+%\begin{macro}{\dayofyear}
+% Count register in which to store the day of the year.
+% \begin{macrocode}
+\newcount\dayofyear
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\computedayofyear}
+% \cs{computedayofyear}\marg{day}\marg{month}\marg{year}\par
+% Computes the day of year. Result will be stored in \verb|\dayofyear|
+% \begin{macrocode}
+\providecommand*{\computedayofyear}[3]{%
+ \testifleapyear{#3}%
+ \dayofyear=0\relax
+ \@day=#1\relax \@month=#2\relax \@year=#3\relax
+ \ifcase\@month
+ \or
+ \or \advance\dayofyear by 31\relax
+ \or \advance\dayofyear by 59\relax
+ \or \advance\dayofyear by 90\relax
+ \or \advance\dayofyear by 120\relax
+ \or \advance\dayofyear by 151\relax
+ \or \advance\dayofyear by 181\relax
+ \or \advance\dayofyear by 212\relax
+ \or \advance\dayofyear by 243\relax
+ \or \advance\dayofyear by 273\relax
+ \or \advance\dayofyear by 304\relax
+ \or \advance\dayofyear by 334\relax
+ \else
+ \PackageError{datetime}{Invalid month number}{The second argument to
+ \string\computedayofyear \space should lie in the range 1-12}%
+ \fi
+ \ifnum\@month>2\relax
+ \ifDTleapyear\advance\dayofyear by 1\relax\fi
+ \fi
+ \advance\dayofyear by \@day\relax
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\dayofweek}
+% Count register in which to store the day of the week.
+% \begin{macrocode}
+\newcount\dayofweek
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\computedayofweek}
+% \cs{computedayofweek}\marg{day}\marg{month}\marg{year}\par
+% Computes the day of week index. The result is stored in
+% |\dayofweek|.
+% \begin{macrocode}
+\providecommand*{\computedayofweek}[3]{%
+ \computedayofyear{#1}{#2}{#3}%
+ \@dtctr=#3\relax
+ \advance\@dtctr by -1901\relax
+ \@FCmodulo{\@dtctr}{28}%
+ \dayofweek=\@dtctr
+ \divide\dayofweek by 4\relax
+ \advance\dayofweek by \@dtctr
+ \advance\dayofweek by 2\relax
+ \@FCmodulo{\dayofweek}{7}%
+ \advance\dayofweek by \dayofyear
+ \advance\dayofweek by -1\relax
+ \@FCmodulo{\dayofweek}{7}%
+ \advance\dayofweek by 1\relax
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\dayofweeknameid}
+% Given the day of week index, print the associated name in the
+% current language. If there is none defined for that language
+% default to English.
+% \begin{macrocode}
+\providecommand*{\dayofweeknameid}[1]{%
+ \if@dt@multilingual
+% \end{macrocode}
+% Make sure language file has been loaded.
+% \begin{macrocode}
+ \DTloadDefIfNotLoadedButExists{\languagename}%
+ \ifcsundef{dayofweeknameid\languagename}%
+ {%
+ \ifthenelse{\equal{\languagename}{nohyphenation}}{}%
+ {%
+ \PackageWarning{datetime}%
+ {No week day names defined for language
+ '\languagename', defaulting to English}%
+ }%
+ \dayofweeknameidenglish{#1}%
+ }%
+ {%
+ \csname dayofweeknameid\languagename\endcsname{#1}%
+ }%
+ \else
+ \dayofweeknameidenglish{#1}%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\dayofweekname}
+% Print the day of week name for the specified date.
+% \begin{macrocode}
+\providecommand*{\dayofweekname}[3]{%
+ \computedayofweek{#1}{#2}{#3}%
+ \dayofweeknameid{\dayofweek}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\thisdayofweekname}
+% Print today's day of week name.
+% \begin{macrocode}
+\providecommand*{\thisdayofweekname}{%
+ \dayofweekname{\day}{\month}{\year}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\shortdayofweekname}
+% Language dependant version:
+% \begin{macrocode}
+\providecommand*{\shortdayofweekname}[3]{%
+ \computedayofweek{#1}{#2}{#3}%
+ \if@dt@multilingual
+% \end{macrocode}
+% Make sure language file has been loaded.
+% \begin{macrocode}
+ \DTloadDefIfNotLoadedButExists{\languagename}%
+ \@ifundefined{shortdayofweeknameid\languagename}%
+ {%
+ \ifthenelse{\equal{\languagename}{nohyphenation}}{}%
+ {%
+ \PackageWarning{datetime}%
+ {No abbreviated week day names defined for
+ language '\languagename', defaulting to long version}%
+ }%
+ \dayofweeknameid{\dayofweek}%
+ }%
+ {%
+ \csname shortdayofweeknameid\languagename\endcsname\dayofweek
+ }%
+ \else
+ \shortdayofweeknameidenglish{\dayofweek}%
+\fi
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\thisshortdayofweekname}
+% Today's week day name, abbreviated:
+% \begin{macrocode}
+\providecommand*{\thisshortdayofweekname}{%
+ \dayofweekname{\day}{\month}{\year}}
+% \end{macrocode}
+%\end{macro}
+% End of |\if@dt@nodate| else part.
+% \begin{macrocode}
+\fi
+% \end{macrocode}
+%\begin{macro}{\today}
+% Redefine |\today| so that it uses |\formatdate|.
+% (Only do this if @dt@nodate is false)
+%\changes{2.46}{2005/09/30}{defined using \cs{DeclareRobustCommand}}
+%\changes{2.41}{2004/10/22}{defined using \cs{providecommand}}
+% \begin{macrocode}
+\if@dt@nodate
+\else
+ \DeclareRobustCommand*{\today}{\formatdate{\day}{\month}{\year}}
+\fi
+% \end{macrocode}
+%\end{macro}
+%Check to see if babel package has redefined |\today|.
+%\changes{2.53}{11 June 2007}{added check for \cs{dateUKenglish} and
+%\cs{dateUSenglish}}
+%\changes{2.54}{15 June 2007}{added check for \cs{datebritish}}
+% \begin{macrocode}
+\if@dt@nodate
+\else
+\@ifundefined{dateenglish}{}{\let\dateenglish\longdate}
+\@ifundefined{dateUKenglish}{}{\loadDTdef{UKenglish}}
+\@ifundefined{dateUSenglish}{}{\loadDTdef{USenglish}}
+\@ifundefined{datebritish}{}{\loadDTdef{british}}
+\@ifundefined{dateamerican}{}{\loadDTdef{american}}
+\@ifundefined{dateaustrian}{}{\loadDTdef{austrian}}
+\@ifundefined{dateaustralian}{}{\loadDTdef{australian}}
+\@ifundefined{datebahasa}{}{\loadDTdef{bahasa}}
+\@ifundefined{datebasque}{}{\loadDTdef{basque}}
+\@ifundefined{datebreton}{}{\loadDTdef{breton}}
+\@ifundefined{datebulgarian}{}{\loadDTdef{bulgarian}}
+\@ifundefined{datecanadian}{}{\loadDTdef{canadian}}
+\@ifundefined{datecatalan}{}{\loadDTdef{catalan}}
+\@ifundefined{datecroatian}{}{\loadDTdef{croatian}}
+\@ifundefined{dateczech}{}{\loadDTdef{czech}}
+\@ifundefined{datedanish}{}{\loadDTdef{danish}}
+\@ifundefined{datedutch}{}{\loadDTdef{dutch}}
+\@ifundefined{dateesperanto}{}{\loadDTdef{esperanto}}
+\@ifundefined{dateestonian}{}{\loadDTdef{estonian}}
+\@ifundefined{datefinnish}{}{\loadDTdef{finnish}}
+\@ifundefined{datefrench}{}{\loadDTdef{french}}
+\@ifundefined{dategalician}{}{\loadDTdef{galician}}
+\@ifundefined{dategerman}{}{\loadDTdef{german}}
+\@ifundefined{dategreek}{}{\loadDTdef{greek}}
+\@ifundefined{datehebrew}{}{\loadDTdef{hebrew}}
+\@ifundefined{dateicelandic}{}{\loadDTdef{icelandic}}
+\@ifundefined{dateirish}{}{\loadDTdef{irish}}
+\@ifundefined{dateitalian}{}{\loadDTdef{italian}}
+\@ifundefined{datelatin}{}{\loadDTdef{latin}}
+\@ifundefined{datelsorbian}{}{\loadDTdef{lsorbian}}
+\@ifundefined{datemagyar}{}{\loadDTdef{magyar}}
+\@ifundefined{datenaustrian}{}{\loadDTdef{naustrian}}
+\@ifundefined{datenewzealand}{}{\loadDTdef{newzealand}}
+\@ifundefined{datengerman}{}{\loadDTdef{ngerman}}
+\@ifundefined{datenorsk}{}{\loadDTdef{norsk}}
+\@ifundefined{datepolish}{}{\loadDTdef{polish}}
+\@ifundefined{dateportuges}{}{\loadDTdef{portuges}}
+\@ifundefined{dateromanian}{}{\loadDTdef{romanian}}
+\@ifundefined{daterussian}{}{\loadDTdef{russian}}
+\@ifundefined{datesamin}{}{\loadDTdef{samin}}
+\@ifundefined{datescottish}{}{\loadDTdef{scottish}}
+\@ifundefined{dateserbian}{}{\loadDTdef{serbian}}
+\@ifundefined{dateslovak}{}{\loadDTdef{slovak}}
+\@ifundefined{dateslovene}{}{\loadDTdef{slovene}}
+\@ifundefined{datespanish}{}{\loadDTdef{spanish}}
+\@ifundefined{dateswedish}{}{\loadDTdef{swedish}}
+\@ifundefined{dateturkish}{}{\loadDTdef{turkish}}
+\@ifundefined{dateukraineb}{}{\loadDTdef{ukraineb}}
+\@ifundefined{dateusorbian}{}{\loadDTdef{usorbian}}
+\@ifundefined{datewelsh}{}{\loadDTdef{welsh}}
+\fi
+% \end{macrocode}
+%
+%\begin{macro}{\pdfdate}
+% Finally create command that will typeset the date in PDF format
+% e.g. 20040501215500. This is defined regardless of |\if@no@date|
+% as it's provided for use in |\pdfinfo|. Initially |\pdfdate| is set
+% to the year. Note that pdftex provides \cs{pdfcreationdate}
+% which also stores the seconds and time zone.
+%\changes{2.31}{2004/05/01}{new}
+%\changes{2.32}{2004/05/04}{fixed bug}
+% \begin{macrocode}
+\newtoks\dt@a \newtoks\dt@b
+\edef\pdfdate{\the\year}
+% \end{macrocode}
+% Append the month
+% \begin{macrocode}
+\dt@b=\expandafter{\pdfdate}
+\dt@a=\expandafter{\the\month}
+\ifnum\month<10\relax
+\edef\pdfdate{\the\dt@b0\the\dt@a}
+\else
+\edef\pdfdate{\the\dt@b\the\dt@a}
+\fi
+% \end{macrocode}
+% Append the day
+% \begin{macrocode}
+\dt@b=\expandafter{\pdfdate}
+\dt@a=\expandafter{\the\day}
+\ifnum\day<10\relax
+\edef\pdfdate{\the\dt@b0\the\dt@a}
+\else
+\edef\pdfdate{\the\dt@b\the\dt@a}
+\fi
+% \end{macrocode}
+% Append the hour
+% \begin{macrocode}
+\@dtctr=\time%
+\divide\@dtctr by 60\relax
+\dt@b=\expandafter{\pdfdate}
+\dt@a=\expandafter{\the\@dtctr}
+\ifnum\@dtctr<10
+\edef\pdfdate{\the\dt@b0\the\dt@a}
+\else
+\edef\pdfdate{\the\dt@b\the\dt@a}
+\fi
+% \end{macrocode}
+% Append the minute.
+% \begin{macrocode}
+\@dtctr=\time%
+\@FCmodulo{\@dtctr}{60}%
+\dt@b=\expandafter{\pdfdate}
+\dt@a=\expandafter{\the\@dtctr}
+\ifnum\@dtctr<10\relax
+\edef\pdfdate{\the\dt@b0\the\dt@a}
+\else
+\edef\pdfdate{\the\dt@b\the\dt@a}
+\fi
+% \end{macrocode}
+% Append the seconds.
+% \begin{macrocode}
+\dt@a={00}
+\dt@b=\expandafter{\pdfdate}
+\edef\pdfdate{\the\dt@b\the\dt@a}
+% \end{macrocode}
+%\end{macro}
+%\iffalse
+% \begin{macrocode}
+%</datetime.sty>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-american.def>
+% \end{macrocode}
+%\fi
+%\subsection{Compatibility with Babel (Language definition files)}
+%\subsubsection{american}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-american.def}[2013/09/10]%
+% \end{macrocode}
+%\begin{macro}{\dateamerican}
+% \begin{macrocode}
+\global\let\dateamerican\usdate
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\monthnameamerican}
+% \begin{macrocode}
+\global\let\monthnameamerican\monthnameenglish
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\shortmonthnameamerican}
+% \begin{macrocode}
+\global\let\shortmonthnameamerican\shortmonthnameenglish
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\dayofweeknameidamerican}
+% \begin{macrocode}
+\global\let\dayofweeknameidamerican\dayofweeknameidenglish
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\shortdayofweeknameamerican}
+% \begin{macrocode}
+\global\let\shortdayofweeknameidamerican\shortdayofweeknameidenglish
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\ordinaldateamerican}
+% \begin{macrocode}
+\providecommand*{\ordinaldateamerican}[1]{#1}%
+\global\let\ordinaldateamerican\ordinaldateamerican
+% \end{macrocode}
+%\end{macro}
+%\iffalse
+% \begin{macrocode}
+%</dt-american.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-australian.def>
+% \end{macrocode}
+%\fi
+%\subsection{Compatibility with Babel (Language definition files)}
+%\subsubsection{australian}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-australian.def}[2013/09/10]%
+% \end{macrocode}
+%\begin{macro}{\dateaustralian}
+% \begin{macrocode}
+\global\let\dateaustralian\usdate
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\monthnameaustralian}
+% \begin{macrocode}
+\global\let\monthnameaustralian\monthnameenglish
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\shortmonthnameaustralian}
+% \begin{macrocode}
+\global\let\shortmonthnameaustralian\shortmonthnameenglish
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\dayofweeknameidaustralian}
+% \begin{macrocode}
+\global\let\dayofweeknameidaustralian\dayofweeknameidenglish
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\shortdayofweeknameaustralian}
+% \begin{macrocode}
+\global\let\shortdayofweeknameidaustralian\shortdayofweeknameidenglish
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\ordinaldateaustralian}
+% \begin{macrocode}
+\providecommand*{\ordinaldateaustralian}[1]{#1}%
+\global\let\ordinaldateaustralian\ordinaldateaustralian
+% \end{macrocode}
+%\end{macro}
+%\iffalse
+% \begin{macrocode}
+%</dt-australian.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-austrian.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{Austrian}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-austrian.def}[2013/09/10]%
+% \end{macrocode}
+% Define month names.
+%\begin{macro}{\monthnameaustrian}
+% \begin{macrocode}
+\providecommand{\monthnameaustrian}[1][\month]{%
+ \@orgargctr=#1\relax
+ \ifcase\@orgargctr
+ \PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+ Month numbers should go from 1 to 12}%
+ \or J\"anner%
+ \or Februar%
+ \or M\"arz%
+ \or April%
+ \or Mai%
+ \or Juni%
+ \or Juli%
+ \or August%
+ \or September%
+ \or Oktober%
+ \or November%
+ \or Dezember%
+\else
+ \PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+ Month numbers should go from 1 (janvier) to 12 (decembre)}%
+\fi}%
+\global\let\monthnameaustrian\monthnameaustrian
+% \end{macrocode}
+%\end{macro}
+% (Re)Define declaration to switch to this format.
+%\begin{macro}{\dateaustrian}
+% \begin{macrocode}
+\DeclareRobustCommand*\dateaustrian{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day.~\monthnameaustrian[\@month]\space\number\@year}}%
+\global\let\dateaustrian\dateaustrian
+% \end{macrocode}
+%\end{macro}
+%\iffalse
+% \begin{macrocode}
+%</dt-austrian.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-bahasa.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{Bahasa}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-bahasa.def}[2013/09/10]%
+% \end{macrocode}
+% Define month names.
+% \begin{macrocode}
+\providecommand{\monthnamebahasa}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 (Januari) to 12 (Desember)}%
+\or Januari%
+\or Pebruari%
+\or Maret%
+\or April%
+\or Mei%
+\or Juni%
+\or Juli%
+\or Agustus%
+\or September%
+\or Oktober%
+\or Nopember%
+\or Desember%
+\else
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 (Januari) to 12 (Desember)}%
+\fi}%
+\global\let\monthnamebahasa\monthnamebahasa
+% \end{macrocode}
+% Define abbreviated month names. This currently does the full
+% name, because I don't know the abbreviated versions.
+% \begin{macrocode}
+\providecommand{\shortmonthnamebahasa}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 (Januari) to 12 (Desember)}%
+\or Januari%
+\or Pebruari%
+\or Maret%
+\or April%
+\or Mei%
+\or Juni%
+\or Juli%
+\or Agustus%
+\or September%
+\or Oktober%
+\or Nopember%
+\or Desember%
+\else
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 (Januari) to 12 (Desember)}%
+\fi}%
+\global\let\shortmonthnamebahasa\shortmonthnamebahasa
+% \end{macrocode}
+% (Re)Define declaration to switch to this format.
+% \begin{macrocode}
+\DeclareRobustCommand*\datebahasa{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day}~\monthnamebahasa[\@month]\space \number\@year}}%
+\global\let\datebahasa\datebahasa
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</dt-bahasa.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-basque.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{Basque}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-basque.def}[2013/09/10]%
+% \end{macrocode}
+% Define month names.
+% \begin{macrocode}
+\providecommand{\monthnamebasque}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 (urtarrilaren) to 12 (abenduaren)}%
+\or urtarrilaren%
+\or otsailaren%
+\or martxoaren%
+\or apirilaren%
+\or maiatzaren%
+\or ekainaren%
+\or uztailaren%
+\or abuztuaren%
+\or irailaren%
+\or urriaren%
+\or azaroaren%
+\or abenduaren%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 (urtarrilaren) to 12 (abenduaren)}%
+\fi}%
+\global\let\monthnamebasque\monthnamebasque
+% \end{macrocode}
+% Define abbreviated month names. This currently does the full
+% name, because I don't know the abbreviated versions.
+% \begin{macrocode}
+\providecommand{\shortmonthnamebasque}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 (urtarrilaren) to 12 (abenduaren)}%
+\or urtarrilaren%
+\or otsailaren%
+\or martxoaren%
+\or apirilaren%
+\or maiatzaren%
+\or ekainaren%
+\or uztailaren%
+\or abuztuaren%
+\or irailaren%
+\or urriaren%
+\or azaroaren%
+\or abenduaren%
+\else
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 (urtarrilaren) to 12 (abenduaren)}%
+\fi}%
+\global\let\shortmonthnamebasque\shortmonthnamebasque
+% \end{macrocode}
+% (Re)Define declaration to switch to this format.
+% \begin{macrocode}
+\DeclareRobustCommand*\datebasque{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@year.eko\space\monthnamebasque[\@month]~\number\@day}}%
+\global\let\datebasque\datebasque
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</dt-basque.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-breton.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{Breton}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-breton.def}[2013/09/10]%
+% \end{macrocode}
+%\begin{macro}{\ordinaldatebreton}
+% Breton version:
+% \begin{macrocode}
+\providecommand*{\ordinaldatebreton}[1]{%
+#1\ifnum#1=1\/\textsuperscript{a\~n}\fi}%
+\global\let\ordinaldatebreton\ordinaldatebreton
+% \end{macrocode}
+%\end{macro}
+% Define month names.
+% \begin{macrocode}
+\providecommand{\monthnamebreton}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 (Genver) to 12 (Kerzu)}%
+\or Genver%
+\or C'hwevrer%
+\or Meurzh%
+\or Ebrel%
+\or Mae%
+\or Mezheven%
+\or Gouere%
+\or Eost%
+\or Gwengolo%
+\or Here%
+\or Du%
+\or Kerzu%
+\else
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 (Genver) to 12 (Kerzu)}%
+\fi}%
+\global\let\monthnamebreton\monthnamebreton
+% \end{macrocode}
+% Define abbreviated month names. This currently does the full
+% name, because I don't know the abbreviated versions.
+% \begin{macrocode}
+\providecommand{\shortmonthnamebreton}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 (Genver) to 12 (Kerzu)}%
+\or Genver%
+\or C'hwevrer%
+\or Meurzh%
+\or Ebrel%
+\or Mae%
+\or Mezheven%
+\or Gouere%
+\or Eost%
+\or Gwengolo%
+\or Here%
+\or Du%
+\or Kerzu%
+\else
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 (Genver) to 12 (Kerzu)}%
+\fi}%
+\global\let\shortmonthnamebreton\shortmonthnamebreton
+% \end{macrocode}
+% (Re)Define declaration to switch to this format.
+% \begin{macrocode}
+\DeclareRobustCommand*\datebreton{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\ifnum\@day=1\relax 1\/\textsuperscript{a\~n}\else\number\@day\fi
+\space a\space viz\space\monthnamebreton[\@month]\space
+\number\@year
+}}%
+\global\let\datebreton\datebreton
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</dt-breton.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-british.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{british}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-british.def}[2013/09/10]%
+% \end{macrocode}
+%\begin{macro}{\datebritish}
+% \begin{macrocode}
+\global\let\datebritish\longdate
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\monthnamebritish}
+% \begin{macrocode}
+\global\let\monthnamebritish\monthnameenglish
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\shortmonthnamebritish}
+% \begin{macrocode}
+\global\let\shortmonthnamebritish\shortmonthnameenglish
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\dayofweeknameidbritish}
+% \begin{macrocode}
+\global\let\dayofweeknameidbritish\dayofweeknameidenglish
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\shortdayofweekidbritish}
+% \begin{macrocode}
+\global\let\shortdayofweeknameidbritish\shortdayofweeknameidenglish
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\ordinaldatebritish}
+% \begin{macrocode}
+\global\let\ordinaldatebritish\ordinaldateenglish
+% \end{macrocode}
+%\end{macro}
+%\iffalse
+% \begin{macrocode}
+%</dt-british.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-bulgarian.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{Bulgarian}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-bulgarian.def}[2013/09/10]%
+% \end{macrocode}
+% Define month names.
+% \begin{macrocode}
+\providecommand{\monthnamebulgarian}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+ \or\cyrya\cyrn\cyru\cyra\cyrr\cyri\or
+ \cyrf\cyre\cyrv\cyrr\cyru\cyra\cyrr\cyri\or
+ \cyrm\cyra\cyrr\cyrt\or
+ \cyra\cyrp\cyrr\cyri\cyrl\or
+ \cyrm\cyra\cyrishrt\or
+ \cyryu\cyrn\cyri\or
+ \cyryu\cyrl\cyri\or
+ \cyra\cyrv\cyrg\cyru\cyrs\cyrt\or
+ \cyrs\cyre\cyrp\cyrt\cyre\cyrm\cyrv\cyrr\cyri\or
+ \cyro\cyrk\cyrt\cyro\cyrm\cyrv\cyrr\cyri\or
+ \cyrn\cyro\cyre\cyrm\cyrv\cyrr\cyri\or
+ \cyrd\cyre\cyrk\cyre\cyrm\cyrv\cyrr\cyri
+\else
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\fi}%
+\global\let\monthnamebulgarian\monthnamebulgarian
+% \end{macrocode}
+% Define abbreviated month names. This currently does the full
+% name, because I don't know the abbreviated versions.
+% \begin{macrocode}
+\providecommand{\shortmonthnamebulgarian}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+ \or\cyrya\cyrn\cyru\cyra\cyrr\cyri\or
+ \cyrf\cyre\cyrv\cyrr\cyru\cyra\cyrr\cyri\or
+ \cyrm\cyra\cyrr\cyrt\or
+ \cyra\cyrp\cyrr\cyri\cyrl\or
+ \cyrm\cyra\cyrishrt\or
+ \cyryu\cyrn\cyri\or
+ \cyryu\cyrl\cyri\or
+ \cyra\cyrv\cyrg\cyru\cyrs\cyrt\or
+ \cyrs\cyre\cyrp\cyrt\cyre\cyrm\cyrv\cyrr\cyri\or
+ \cyro\cyrk\cyrt\cyro\cyrm\cyrv\cyrr\cyri\or
+ \cyrn\cyro\cyre\cyrm\cyrv\cyrr\cyri\or
+ \cyrd\cyre\cyrk\cyre\cyrm\cyrv\cyrr\cyri
+\else
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\fi}%
+\global\let\shortmonthnamebulgarian\shortmonthnamebulgarian
+% \end{macrocode}
+% (Re)Define declaration to switch to this format.
+% \begin{macrocode}
+\DeclareRobustCommand*\datebulgarian{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day~\monthnamebulgarian[\@month]\ \number\@year~\cyrg.}}%
+\global\let\datebulgarian\datebulgarian
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</dt-bulgarian.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-canadian.def>
+% \end{macrocode}
+%\fi
+%\subsection{Compatibility with Babel (Language definition files)}
+%\subsubsection{canadian}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-canadian.def}[2013/09/10]%
+% \end{macrocode}
+%\begin{macro}{\datecanadian}
+% \begin{macrocode}
+\global\let\datecanadian\usdate
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\monthnamecanadian}
+% \begin{macrocode}
+\global\let\monthnamecanadian\monthnameenglish
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\shortmonthnamecanadian}
+% \begin{macrocode}
+\global\let\shortmonthnamecanadian\shortmonthnameenglish
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\dayofweeknameidcanadian}
+% \begin{macrocode}
+\global\let\dayofweeknameidcanadian\dayofweeknameidenglish
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\shortdayofweeknamecanadian}
+% \begin{macrocode}
+\global\let\shortdayofweeknameidcanadian\shortdayofweeknameidenglish
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\ordinaldatecanadian}
+% \begin{macrocode}
+\providecommand*{\ordinaldatecanadian}[1]{#1}%
+\global\let\ordinaldatecanadian\ordinaldatecanadian
+% \end{macrocode}
+%\end{macro}
+%\iffalse
+% \begin{macrocode}
+%</dt-canadian.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-catalan.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{Catalan}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-catalan.def}[2013/09/10]%
+% \end{macrocode}
+% Define month names.
+% \begin{macrocode}
+\providecommand{\monthnamecatalan}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 (de gener) to 12 (de desembre)}%
+\or de gener%
+\or de febrer%
+\or de mar\c{c}%
+\or d'abril%
+\or de maig%
+\or de juny%
+\or de juliol%
+\or d'agost%
+\or de setembre%
+\or d'octubre%
+\or de novembre%
+\or de desembre%
+\else
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 (de gener) to 12 (de desembre)}%
+\fi}%
+\global\let\monthnamecatalan\monthnamecatalan
+% \end{macrocode}
+% Define abbreviated month names. This currently does the full
+% name, because I don't know the abbreviated versions.
+% \begin{macrocode}
+\providecommand{\shortmonthnamecatalan}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 (de gener) to 12 (de desembre)}%
+\or de gener%
+\or de febrer%
+\or de mar\c{c}%
+\or d'abril%
+\or de maig%
+\or de juny%
+\or de juliol%
+\or d'agost%
+\or de setembre%
+\or d'octubre%
+\or de novembre%
+\or de desembre%
+\else
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 (de gener) to 12 (de desembre)}%
+\fi}%
+\global\let\shortmonthnamecatalan\shortmonthnamecatalan
+% \end{macrocode}
+% (Re)Define declaration to switch to this format.
+% \begin{macrocode}
+\DeclareRobustCommand*\datecatalan{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day~\monthnamecatalan[\@month]\ de~\number\@year
+}}%
+\global\let\datecatalan\datecatalan
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</dt-catalan.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-croatian.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{Croatian}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-croatian.def}[2013/09/10]%
+% \end{macrocode}
+% Define month names.
+% \begin{macrocode}
+\providecommand{\monthnamecroatian}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 (sijecnja) to 12 (prosinca)}%
+\or sije\v{c}nja%
+\or velja\v{c}e%
+\or o\v{z}ujka%
+\or travnja%
+\or svibnja%
+\or lipnja%
+\or srpnja%
+\or kolovoza%
+\or rujna%
+\or listopada%
+\or studenoga%
+\or prosinca%
+\else
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 (sijecnja) to 12 (prosinca)}%
+\fi}%
+\global\let\monthnamecroatian\monthnamecroatian
+% \end{macrocode}
+% Define abbreviated month names. This currently does the full
+% name, because I don't know the abbreviated versions.
+% \begin{macrocode}
+\providecommand{\shortmonthnamecroatian}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 (sijecnja) to 12 (prosinca)}%
+\or sije\v{c}nja%
+\or velja\v{c}e%
+\or o\v{z}ujka%
+\or travnja%
+\or svibnja%
+\or lipnja%
+\or srpnja%
+\or kolovoza%
+\or rujna%
+\or listopada%
+\or studenoga%
+\or prosinca%
+\else
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 (sijecnja) to 12 (prosinca)}%
+\fi}%
+\global\let\shortmonthnamecroatian\shortmonthnamecroatian
+% \end{macrocode}
+% Translations provided by Ivan Kokan:
+% \begin{macrocode}
+\providecommand*{\dayofweeknameidcroatian}[1]{%
+\ifcase#1\relax
+\or nedjelja%
+\or ponedjeljak%
+\or utorak%
+\or srijeda%
+\or \v{c}etvrtak%
+\or petak%
+\or subota%
+\fi}%
+\global\let\dayofweeknameidcroatian\dayofweeknameidcroatian
+\providecommand*{\shortdayofweeknameidcroatian}[1]{%
+\ifcase#1\relax
+\or ned%
+\or pon%
+\or uto%
+\or sri%
+\or \v{c}et%
+\or pet%
+\or sub%
+\fi}%
+\global\let\shortdayofweeknameidcroatian\shortdayofweeknameidcroatian
+% \end{macrocode}
+% (Re)Define declaration to switch to this format.
+% \begin{macrocode}
+\DeclareRobustCommand*\datecroatian{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day.~\monthnamecroatian[\@month]\space \number\@year.}}%
+\global\let\datecroatian\datecroatian
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</dt-croatian.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-czech.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{Czech}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-czech.def}[2013/09/10]%
+% \end{macrocode}
+% Define month names.
+% \begin{macrocode}
+\providecommand{\monthnameczech}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\or ledna%
+\or \'unora%
+\or b\v{r}ezna%
+\or dubna%
+\or kv\v{e}tna%
+\or \v{c}ervna%
+\or \v{c}ervence%
+\or srpna%
+\or z\'a\v{r}\'{\i}%
+\or \v{r}\'{\i}jna%
+\or listopadu%
+\or prosince%
+\else
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\fi}%
+\global\let\monthnameczech\monthnameczech
+% \end{macrocode}
+% Define abbreviated month names. This currently does the full
+% name, because I don't know the abbreviated versions.
+% \begin{macrocode}
+\providecommand{\shortmonthnameczech}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\or ledna%
+\or \'unora%
+\or b\v{r}ezna%
+\or dubna%
+\or kv\v{e}tna%
+\or \v{c}ervna%
+\or \v{c}ervence%
+\or srpna%
+\or z\'a\v{r}\'{\i}%
+\or \v{r}\'{\i}jna%
+\or listopadu%
+\or prosince%
+\else
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\fi}%
+\global\let\shortmonthnameczech\shortmonthnameczech
+% \end{macrocode}
+% (Re)Define declaration to switch to this format.
+% \begin{macrocode}
+\DeclareRobustCommand*\dateczech{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day.~\monthnameczech[\@month]\space \number\@year}}%
+\global\let\dateczech\dateczech
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</dt-czech.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-danish.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{Danish}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-danish.def}[2013/09/10]%
+% \end{macrocode}
+% Define month names.
+% \begin{macrocode}
+\providecommand{\monthnamedanish}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\or januar%
+\or februar%
+\or marts%
+\or april%
+\or maj%
+\or juni%
+\or juli%
+\or august%
+\or september%
+\or oktober%
+\or november%
+\or december%
+\else
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\fi}%
+\global\let\monthnamedanish\monthnamedanish
+% \end{macrocode}
+% (Re)Define declaration to switch to this format.
+% \begin{macrocode}
+\DeclareRobustCommand*\datedanish{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day.~\monthnamedanish[\@month]\space \number\@year}}%
+\global\let\datedanish\datedanish
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</dt-danish.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-dutch.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{Dutch}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-dutch.def}[2015/03/20]%
+% \end{macrocode}
+% Define month names.
+% \begin{macrocode}
+\providecommand{\monthnamedutch}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\or januari%
+\or februari%
+\or maart%
+\or april%
+\or mei%
+\or juni%
+\or juli%
+\or augustus%
+\or september%
+\or oktober%
+\or november%
+\or december%
+\else
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\fi}%
+\global\let\monthnamedutch\monthnamedutch
+% \end{macrocode}
+% (Re)Define declaration to switch to this format.
+% \begin{macrocode}
+\DeclareRobustCommand*\datedutch{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day~\monthnamedutch[\@month]\space \number\@year}}%
+\global\let\datedutch\datedutch
+% \end{macrocode}
+% Day of week name provided by multiple people.
+% \begin{macrocode}
+\providecommand*{\dayofweeknameiddutch}[1]{%
+\ifcase#1\relax
+\or zondag%
+\or maandag%
+\or dinsdag%
+\or woensdag%
+\or donderdag%
+\or vrijdag%
+\or zaterdag%
+\fi}
+
+\providecommand*{\shortdayofweeknameiddutch}[1]{%
+\ifcase#1\relax
+\or zo%
+\or ma%
+\or di%
+\or wo%
+\or do%
+\or vr%
+\or za%
+\fi}
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</dt-dutch.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-esperanto.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{Esperanto}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-esperanto.def}[2013/09/10]%
+% \end{macrocode}
+% Define month names.
+% \begin{macrocode}
+\providecommand{\monthnameesperanto}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\or januaro%
+\or februaro%
+\or marto%
+\or aprilo%
+\or majo%
+\or junio%
+\or julio%
+\or a\u{u}gusto%
+\or septembro%
+\or oktobro%
+\or novembro%
+\or decembro%
+\else
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\fi}%
+\global\let\monthnameesperanto\monthnameesperanto
+% \end{macrocode}
+% (Re)Define declaration to switch to this format.
+% \begin{macrocode}
+\DeclareRobustCommand*\dateesperanto{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day{--a}~de~\monthnameesperanto[\@month],\space
+\number\@year}}%
+\global\let\dateesperanto\dateesperanto
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</dt-esperanto.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-estonian.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{Estonian}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-estonian.def}[2013/09/10]%
+% \end{macrocode}
+% Define month names.
+% \begin{macrocode}
+\providecommand{\monthnameestonian}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\or jaanuar%
+\or veebruar%
+\or m"arts%
+\or aprill%
+\or mai%
+\or juuni%
+\or juuli%
+\or august%
+\or september%
+\or oktoober%
+\or november%
+\or detsember%
+\else
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\fi}%
+\global\let\monthnameestonian\monthnameestonian
+% \end{macrocode}
+% (Re)Define declaration to switch to this format.
+% \begin{macrocode}
+\DeclareRobustCommand*\dateestonian{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day.\space\monthnameestonian[\@month]\space
+\number\@year.\space a.}}%
+\global\let\dateestonian\dateestonian
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</dt-estonian.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-finnish.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{Finnish}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-finnish.def}[2013/09/10]%
+% \end{macrocode}
+% Define month names.
+% \begin{macrocode}
+\providecommand{\monthnamefinnish}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\or tammikuuta%
+\or helmikuuta%
+\or maaliskuuta%
+\or huhtikuuta%
+\or toukokuuta%
+\or kes\"akuuta%
+\or hein\"akuuta%
+\or elokuuta%
+\or syyskuuta%
+\or lokakuuta%
+\or marraskuuta%
+\or joulukuuta%
+\else
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\fi}%
+\global\let\monthnamefinnish\monthnamefinnish
+% \end{macrocode}
+% (Re)Define declaration to switch to this format.
+% \begin{macrocode}
+\DeclareRobustCommand*\datefinnish{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day.~\monthnamefinnish[\@month]\space \number\@year}}%
+\global\let\datefinnish\datefinnish
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</dt-finnish.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-french.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{French}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-french.def}[2013/09/10]%
+% \end{macrocode}
+%\begin{macro}{\ordinaldatefrench}
+% French:
+% \begin{macrocode}
+\providecommand*{\ordinaldatefrench}[1]{%
+#1\ifnum#1=1\ier\fi}%
+\global\let\ordinaldatefrench\ordinaldatefrench
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\ier}
+% In case \verb|\ier| hasn't been defined:%
+%\changes{v2.47}{27 Oct 2005}{defined if it doesn't
+% already exist}
+% \begin{macrocode}
+\providecommand*{\ier}{\textsuperscript{er}}%
+\global\let\ier\ier
+% \end{macrocode}
+%\end{macro}
+% Define week day names.
+% \begin{macrocode}
+\providecommand{\dayofweeknameidfrench}[1]{%
+\ifcase#1\relax
+\or dimanche%
+\or lundi%
+\or mardi%
+\or mercredi%
+\or jeudi%
+\or vendredi%
+\or samedi%
+\fi}%
+\global\let\dayofweeknameidfrench\dayofweeknameidfrench
+% \end{macrocode}
+% Define abbreviated week day names (are these correct?)
+% \begin{macrocode}
+\providecommand{\shortdayofweeknameidfrench}[1]{%
+\ifcase#1\relax
+\or dim%
+\or lun%
+\or mar%
+\or mer%
+\or jeu%
+\or ven%
+\or sam%
+\fi}%
+\global\let\shortdayofweeknameidfrench\shortdayofweeknameidfrench
+% \end{macrocode}
+% Define month names.
+% \begin{macrocode}
+\providecommand{\monthnamefrench}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 (janvier) to 12 (decembre)}%
+\or janvier%
+\or f\'evrier%
+\or mars%
+\or avril%
+\or mai%
+\or juin%
+\or juillet%
+\or ao\^ut%
+\or septembre%
+\or octobre%
+\or novembre%
+\or d\'ecembre%
+\else
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 (janvier) to 12 (decembre)}%
+\fi}%
+\global\let\monthnamefrench\monthnamefrench
+% \end{macrocode}
+% (Re)Define declaration to switch to this format.
+% \begin{macrocode}
+\DeclareRobustCommand*\datefrench{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day\ifnum\@day=1{\ier}\fi\space
+\monthnamefrench[\@month]\space \number\@year}}%
+\global\let\datefrench\datefrench
+% \end{macrocode}
+% Short month names provided by Rapha\"el Pinson
+% \begin{macrocode}
+\providecommand{\shortmonthnamefrench}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 (jan.) to 12 (dec.)}%
+\or jan.%
+\or f\'evr.%
+\or mars%
+\or avr.%
+\or mai%
+\or juin%
+\or juill.%
+\or ao\^ut%
+\or sept.%
+\or oct.%
+\or nov.%
+\or d\'ec.%
+\else
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 (jan.) to 12 (dec.)}%
+\fi}
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</dt-french.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-galician.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{Galician}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-galician.def}[2013/09/10]%
+% \end{macrocode}
+% Define month names.
+% \begin{macrocode}
+\providecommand{\monthnamegalician}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\or xaneiro%
+\or febreiro%
+\or marzo%
+\or abril%
+\or maio%
+\or xu\~no%
+\or xullo%
+\or agosto%
+\or setembro%
+\or outubro%
+\or novembro%
+\or decembro%
+\else
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\fi}%
+\global\let\monthnamegalician\monthnamegalician
+% \end{macrocode}
+% (Re)Define declaration to switch to this format.
+% \begin{macrocode}
+\DeclareRobustCommand*\dategalician{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day~de\space\monthnamegalician[\@month]\space
+de~\number\@year}}%
+\global\let\dategalician\dategalician
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</dt-galician.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-german.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{German}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-german.def}[2010/09/10]%
+% \end{macrocode}
+% Define month names.
+% \begin{macrocode}
+\providecommand{\monthnamegerman}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\or Januar%
+\or Februar%
+\or M\"arz%
+\or April%
+\or Mai%
+\or Juni%
+\or Juli%
+\or August%
+\or September%
+\or Oktober%
+\or November%
+\or Dezember%
+\else
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 (janvier) to 12 (decembre)}%
+\fi}%
+\global\let\monthnamegerman\monthnamegerman
+% \end{macrocode}
+% The following week day names were supplied by Uwe Bieling:
+% \begin{macrocode}
+\providecommand{\dayofweeknameidgerman}[1]{%
+\ifcase#1\relax
+\or Sonntag%
+\or Montag%
+\or Dienstag%
+\or Mittwoch%
+\or Donnerstag%
+\or Freitag%
+\or Samstag%
+\fi}%
+\global\let\dayofweeknameidgerman\dayofweeknameidgerman
+% \end{macrocode}
+% \begin{macrocode}
+\providecommand{\shortdayofweeknameidgerman}[1]{%
+\ifcase#1\relax
+\or So%
+\or Mo%
+\or Di%
+\or Mi%
+\or Do%
+\or Fr%
+\or Sa%
+\fi}%
+\global\let\shortdayofweeknameidgerman\shortdayofweeknameidgerman
+% \end{macrocode}
+% (Re)Define declaration to switch to this format.
+% \begin{macrocode}
+\DeclareRobustCommand*\dategerman{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day.~\monthnamegerman[\@month]\space\number\@year}}%
+\global\let\dategerman\dategerman
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</dt-german.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-greek.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{Greek}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-greek.def}[2013/09/10]%
+% \end{macrocode}
+% Define month names.
+% \begin{macrocode}
+\providecommand{\monthnamegreek}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\or Ianouar'iou%
+\or Febrouar'iou%
+\or Mart'iou%
+\or April'iou%
+\or Ma'"iou%
+\or Ioun'iou%
+\or Ioul'iou%
+\or Augo'ustou%
+\or Septembr'iou%
+\or Oktwbr'iou%
+\or Noembr'iou%
+\or Dekembr'iou%
+\else
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\fi}%
+\global\let\monthnamegreek\monthnamegreek
+% \end{macrocode}
+% (Re)Define declaration to switch to this format.
+% \begin{macrocode}
+\DeclareRobustCommand*\dategreek{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day\space\monthnamegreek[\@month]\space\number\@year}}%
+\global\let\dategreek\dategreek
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</dt-greek.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-hebrew.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{Hebrew}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-hebrew.def}[2013/09/10]%
+% \end{macrocode}
+% Babel already provides Hebrew month names, so just provide a
+% synonym.
+% \begin{macrocode}
+\global\let\monthnamehebrew\hebmonth
+% \end{macrocode}
+% Redefine declaration to switch to this format. (This uses
+% |\hebdate| which is defined by babel.)
+% \begin{macrocode}
+\DeclareRobustCommand*\datehebrew{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\hebdate\@day\@month\@year}}%
+\global\let\datehebrew\datehebrew
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</dt-hebrew.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-icelandic.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{Icelandic}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-icelandic.def}[2013/09/10]%
+% \end{macrocode}
+% Define month names.
+% \begin{macrocode}
+\providecommand{\monthnameicelandic}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\or jan\'uar%
+\or febr\'uar%
+\or mars%
+\or apr\'il%
+\or ma\'i%
+\or j\'un\'i%
+\or j\'ul\'i%
+\or \'ag\'ust%
+\or september%
+\or okt\'ober%
+\or n\'ovember%
+\or desembe%
+\else
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\fi}%
+\global\let\monthnameicelandic\monthnameicelandic
+% \end{macrocode}
+% (Re)Define declaration to switch to this format.
+% \begin{macrocode}
+\DeclareRobustCommand*\dateicelandic{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day.~\monthnameicelandic[\@month]\space\number\@year}}%
+\global\let\dateicelandic\dateicelandic
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</dt-icelandic.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-irish.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{Irish}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-irish.def}[2013/09/10]%
+% \end{macrocode}
+% Define month names.
+% \begin{macrocode}
+\providecommand{\monthnameirish}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\or Ean\'air%
+\or Feabhra%
+\or M\'arta%
+\or Aibre\'an%
+\or Bealtaine%
+\or Meitheamh%
+\or I\'uil%
+\or L\'unasa%
+\or Me\'an F\'omhair%
+\or Deireadh F\'omhair%
+\or M\'{\i} na Samhna%
+\or M\'{\i} na Nollag%
+\else
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\fi}%
+\global\let\monthnameirish\monthnameirish
+% \end{macrocode}
+% (Re)Define declaration to switch to this format.
+% \begin{macrocode}
+\DeclareRobustCommand*\dateirish{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day\space\monthnameirish[\@month]\space\number\@year}}%
+\global\let\dateirish\dateirish
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</dt-irish.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-italian.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{Italian}
+% \begin{macrocode}
+\ProvidesFile{dt-italian.def}[2015/03/20]%
+% \end{macrocode}
+% Translations provided by Giada Ermacora and Marco Coppola
+% \begin{macrocode}
+\providecommand{\dayofweeknameiditalian}[1]{%
+\ifcase#1\relax
+\or domenica%
+\or luned\`{\i}%
+\or marted\`{\i}%
+\or mercoled\`{\i}%
+\or gioved\`{\i}%
+\or venerd\`{\i}%
+\or sabato%
+\fi}%
+\global\let\dayofweeknameiditalian\dayofweeknameiditalian
+% \end{macrocode}
+% \begin{macrocode}
+\providecommand{\shortdayofweeknameiditalian}[1]{%
+\ifcase#1\relax
+\or dom%
+\or lun%
+\or mar%
+\or mer%
+\or gio%
+\or ven%
+\or sab%
+\fi}%
+\global\let\shortdayofweeknameiditalian\shortdayofweeknameiditalian
+% \end{macrocode}
+% \begin{macrocode}
+\providecommand{\monthnameitalian}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 (gennaio) to 12 (dicembre)}%
+\or gennaio%
+\or febbraio%
+\or marzo%
+\or aprile%
+\or maggio%
+\or giugno%
+\or luglio%
+\or agosto%
+\or settembre%
+\or ottobre%
+\or novembre%
+\or dicembre%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 (gennaio) to 12 (dicembre)}%
+\fi}%
+\global\let\monthnameitalian\monthnameitalian
+% \end{macrocode}
+% \begin{macrocode}
+\providecommand{\shortmonthnameitalian}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 (gen) to 12 (dic)}%
+\or gen%
+\or feb%
+\or mar%
+\or apr%
+\or mag%
+\or giu%
+\or lug%
+\or ago%
+\or set%
+\or ott%
+\or nov%
+\or dic%
+\else%
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 (gen) to 12 (dic)}%
+\fi}%
+\global\let\shortmonthnameitalian\shortmonthnameitalian
+% \end{macrocode}
+% \begin{macrocode}
+\DeclareRobustCommand*\dateitalian{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day\space\monthnameitalian[\@month]\space\number\@year}}%
+\global\let\dateitalian\dateitalian
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</dt-italian.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-latin.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{Latin}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-latin.def}[2013/09/10]%
+% \end{macrocode}
+% Define month names.
+% \begin{macrocode}
+\providecommand{\monthnamelatin}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\or Ianuarii%
+\or Februarii%
+\or Martii%
+\or Aprilis%
+\or Maii%
+\or Iunii%
+\or Iulii%
+\or Augusti%
+\or Septembris%
+\or Octobris%
+\or Novembris%
+\or Decembris%
+\else
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\fi}%
+\global\let\monthnamelatin\monthnamelatin
+% \end{macrocode}
+% (Re)Define declaration to switch to this format.
+% \begin{macrocode}
+\DeclareRobustCommand*\datelatin{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\check@mathfonts\fontsize\sf@size\z@\math@fontsfalse\selectfont
+\uppercase\expandafter{\romannumeral\@day}%
+~\monthnamelatin[\@month]\space
+{\uppercase\expandafter{\romannumeral\@year}}}}%
+\global\let\datelatin\datelatin
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</dt-latin.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-lsorbian.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{LSorbian}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-lsorbian.def}[2013/09/10]%
+% \end{macrocode}
+% Define new month names.
+% \begin{macrocode}
+\providecommand{\monthnamenewlsorbian}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\or januara%
+\or februara%
+\or m\v erca%
+\or apryla%
+\or maja%
+\or junija%
+\or julija%
+\or awgusta%
+\or septembra%
+\or oktobra%
+\or nowembra%
+\or decembra%
+\else
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\fi}%
+\global\let\monthnamenewlsorbian\monthnamenewlsorbian
+% \end{macrocode}
+% Define old month names.
+% \begin{macrocode}
+\providecommand{\monthnameoldlsorbian}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\or wjelikego ro\v zka%
+\or ma\l ego ro\v zka%
+\or nal\v etnika%
+\or jat\v sownika%
+\or ro\v zownika%
+\or sma\v znika%
+\or pra\v znika%
+\or \v znje\'nca%
+\or po\v znje\'nca%
+\or winowca%
+\or nazymnika%
+\or godownika%
+\else
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\fi}%
+\global\let\monthnameoldlsorbian\monthnameoldlsorbian
+% \end{macrocode}
+% Set the default month names.
+% \begin{macrocode}
+\global\let\monthnamelsorbian\monthnamenewlsorbian
+% \end{macrocode}
+% (Re)Define declaration to switch to new format.
+% \begin{macrocode}
+\DeclareRobustCommand*\newdatelsorbian{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day.~\monthnamenewlsorbian[\@month]\space\number\@year}}%
+\global\let\newdatelsorbian\newdatelsorbian
+% \end{macrocode}
+% (Re)Define declaration to switch to old format.
+% \begin{macrocode}
+\DeclareRobustCommand*\olddatelsorbian{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day.~\monthnameoldlsorbian[\@month]\space\number\@year}}%
+\global\let\olddatelsorbian\olddatelsorbian
+% \end{macrocode}
+% Set the default date format.
+% \begin{macrocode}
+\global\let\datelsorbian\newdatelsorbian
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</dt-lsorbian.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-magyar.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{Magyar}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-magyar.def}[2013/09/10]%
+% \end{macrocode}
+% Define month names.
+% \begin{macrocode}
+\providecommand{\monthnamemagyar}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\or janu\'ar%
+\or febru\'ar%
+\or m\'arcius%
+\or \'aprilis%
+\or m\'ajus%
+\or j\'unius%
+\or j\'ulius%
+\or augusztus%
+\or szeptember%
+\or okt\'ober%
+\or november%
+\or december%
+\else
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\fi}%
+\global\let\monthnamemagyar\monthnamemagyar
+% \end{macrocode}
+% (Re)Define declaration to switch to this format.
+% \begin{macrocode}
+\DeclareRobustCommand*\datemagyar{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@year.~\monthnamemagyar[\@month]\space\number\@day.}}%
+\global\let\datemagyar\datemagyar
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</dt-magyar.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-naustrian.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{NAustrian}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-naustrian.def}[2013/09/10]%
+% \end{macrocode}
+% Define month names.
+% \begin{macrocode}
+\providecommand{\monthnamenaustrian}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\or J\"anner%
+\or Februar%
+\or M\"arz%
+\or April%
+\or Mai%
+\or Juni%
+\or Juli%
+\or August%
+\or September%
+\or Oktober%
+\or November%
+\or Dezember%
+\else
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\fi}%
+\global\let\monthnamenaustrian\monthnamenaustrian
+% \end{macrocode}
+% (Re)Define declaration to switch to this format.
+% \begin{macrocode}
+\DeclareRobustCommand*\datenaustrian{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day.~\monthnamenaustrian[\@month]\space\number\@year}}%
+\global\let\datenaustrian\datenaustrian
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</dt-naustrian.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-newzealand.def>
+% \end{macrocode}
+%\fi
+%\subsection{Compatibility with Babel (Language definition files)}
+%\subsubsection{newzealand}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-newzealand.def}[2013/09/10]%
+% \end{macrocode}
+%\begin{macro}{\datenewzealand}
+% \begin{macrocode}
+\global\let\datenewzealand\usdate
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\monthnamenewzealand}
+% \begin{macrocode}
+\global\let\monthnamenewzealand\monthnameenglish
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\shortmonthnamenewzealand}
+% \begin{macrocode}
+\global\let\shortmonthnamenewzealand\shortmonthnameenglish
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\dayofweeknameidnewzealand}
+% \begin{macrocode}
+\global\let\dayofweeknameidnewzealand\dayofweeknameidenglish
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\shortdayofweeknamenewzealand}
+% \begin{macrocode}
+\global\let\shortdayofweeknameidnewzealand\shortdayofweeknameidenglish
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\ordinaldatenewzealand}
+% \begin{macrocode}
+\providecommand*{\ordinaldatenewzealand}[1]{#1}%
+\global\let\ordinaldatenewzealand\ordinaldatenewzealand
+% \end{macrocode}
+%\end{macro}
+%\iffalse
+% \begin{macrocode}
+%</dt-newzealand.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-ngerman.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{NGerman}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-ngerman.def}[2013/09/10]%
+% \end{macrocode}
+% Define month names.
+% \begin{macrocode}
+\providecommand{\monthnamengerman}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\or Januar%
+\or Februar%
+\or M\"arz%
+\or April%
+\or Mai%
+\or Juni%
+\or Juli%
+\or August%
+\or September%
+\or Oktober%
+\or November%
+\or Dezember%
+\else
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\fi}%
+\global\let\monthnamengerman\monthnamengerman
+% \end{macrocode}
+% The following week day names were supplied by Uwe Bieling:
+% \begin{macrocode}
+\providecommand{\dayofweeknameidngerman}[1]{%
+\ifcase#1\relax
+\or Sonntag%
+\or Montag%
+\or Dienstag%
+\or Mittwoch%
+\or Donnerstag%
+\or Freitag%
+\or Samstag%
+\fi}%
+\global\let\dayofweeknameidngerman\dayofweeknameidngerman
+% \end{macrocode}
+% \begin{macrocode}
+\providecommand{\shortdayofweeknameidngerman}[1]{%
+\ifcase#1\relax
+\or So%
+\or Mo%
+\or Di%
+\or Mi%
+\or Do%
+\or Fr%
+\or Sa%
+\fi}%
+\global\let\shortdayofweeknameidngerman\shortdayofweeknameidngerman
+% \end{macrocode}
+% (Re)Define declaration to switch to this format.
+% \begin{macrocode}
+\DeclareRobustCommand*\datengerman{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day.~\monthnamengerman[\@month]\space\number\@year}}%
+\global\let\datengerman\datengerman
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</dt-ngerman.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-norsk.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{Norsk}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-norsk.def}[2013/09/10]%
+% \end{macrocode}
+% Define month names.
+% \begin{macrocode}
+\providecommand{\monthnamenorsk}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\or januar%
+\or februar%
+\or mars%
+\or april%
+\or mai%
+\or juni%
+\or juli%
+\or august%
+\or september%
+\or oktober%
+\or november%
+\or desember%
+\else
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\fi}%
+\global\let\monthnamenorsk\monthnamenorsk
+% \end{macrocode}
+% (Re)Define declaration to switch to this format.
+% \begin{macrocode}
+\DeclareRobustCommand*\datenorsk{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day.~\monthnamenorsk[\@month]\space\number\@year}}%
+\global\let\datenorsk\datenorsk
+% \end{macrocode}
+% Day of week provided by Tor Inge Birkenes
+% \begin{macrocode}
+\providecommand*{\dayofweeknameidnorsk}[1]{%
+\ifcase#1\relax
+\or S\o{}ndag%
+\or Mandag%
+\or Tirsdag%
+\or Onsdag%
+\or Torsdag%
+\or Fredag%
+\or L\o{}rdag%
+\fi}
+\providecommand*{\shortdayofweeknameidnorsk}[1]{%
+\ifcase#1\relax
+\or S\o{}n%
+\or Man%
+\or Tir%
+\or Ons%
+\or Tor%
+\or Fre%
+\or L\o{}r%
+\fi}
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</dt-norsk.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-polish.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{Polish}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-polish.def}[2013/09/10]%
+% \end{macrocode}
+% Define month names.
+%\begin{macro}{\monthnamepolish}
+% \begin{macrocode}
+\providecommand{\monthnamepolish}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\or stycznia%
+\or lutego%
+\or marca%
+\or kwietnia%
+\or maja%
+\or czerwca%
+\or lipca%
+\or sierpnia%
+\or wrze\'snia%
+\or pa\'zdziernika%
+\or listopada%
+\or grudnia%
+\else
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\fi}
+\global\let\monthnamepolish\monthnamepolish
+% \end{macrocode}
+%\end{macro}
+% (Re)Define declaration to switch to this format.
+% \begin{macrocode}
+\DeclareRobustCommand*\datepolish{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day~\monthnamepolish[\@month]\space\number\@year}}%
+\global\let\datepolish\datepolish
+% \end{macrocode}
+% The week names were provided by Piotr Kempa
+%\begin{macro}{\dayofweeknameidpolish}
+% \begin{macrocode}
+\providecommand{\dayofweeknameidpolish}[1]{%
+\ifcase#1\relax
+\or Niedziela%
+\or Poniedzia\l ek%
+\or Wtorek%
+\or \'Sroda%
+\or Czwartek%
+\or Pi\k atek%
+\or Sobota%
+\fi}%
+\global\let\dayofweeknameidpolish\dayofweeknameidpolish
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\shortdayofweeknameidpolish}
+% \begin{macrocode}
+\providecommand{\shortdayofweeknameidpolish}[1]{%
+\ifcase#1\relax
+\or Ndz.%
+\or Pon.%
+\or Wt.%
+\or \'Sr.%
+\or Czw.%
+\or Pt.%
+\or Sob.%
+\fi}%
+\global\let\shortdayofweeknameidpolish\shortdayofweeknameidpolish
+% \end{macrocode}
+%\end{macro}
+%\iffalse
+% \begin{macrocode}
+%</dt-polish.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-portuges.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{Portuges}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-portuges.def}[2013/09/10]%
+% \end{macrocode}
+% Define week day names.
+% \begin{macrocode}
+\providecommand{\dayofweeknameidportuges}[1]{%
+\ifcase#1\relax
+\or domingo%
+\or segunda-feira%
+\or ter\c{c}a-feira%
+\or quarta-feira%
+\or quinta-feira%
+\or sexta-feira%
+\or sabado%
+\fi}%
+\global\let\dayofweeknameidportuges\dayofweeknameidportuges
+% \end{macrocode}
+% Define month names.
+% \begin{macrocode}
+\providecommand{\monthnameportuges}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\or Janeiro%
+\or Fevereiro%
+\or Mar\c{c}o%
+\or Abril%
+\or Maio%
+\or Junho%
+\or Julho%
+\or Agosto%
+\or Setembro%
+\or Outubro%
+\or Novembro%
+\or Dezembro%
+\else
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\fi}%
+\global\let\monthnameportuges\monthnameportuges
+% \end{macrocode}
+% (Re)Define declaration to switch to this format.
+% \begin{macrocode}
+\DeclareRobustCommand*\dateportuges{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day\space de\space\monthnameportuges[\@month]\space
+de\space\number\@year}}%
+\global\let\dateportuges\dateportuges
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</dt-portuges.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-romanian.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{Romanian}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-romanian.def}[2013/09/10]%
+% \end{macrocode}
+% Define month names.
+% \begin{macrocode}
+\providecommand{\monthnameromanian}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\or ianuarie%
+\or februarie%
+\or martie%
+\or aprilie%
+\or mai%
+\or iunie%
+\or iulie%
+\or august%
+\or septembrie%
+\or octombrie%
+\or noiembrie%
+\or decembrie%
+\else
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\fi}%
+\global\let\monthnameromanian\monthnameromanian
+% \end{macrocode}
+% (Re)Define declaration to switch to this format.
+% \begin{macrocode}
+\DeclareRobustCommand*\dateromanian{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day~\monthnameromanian[\@month]\space\number\@year}}%
+\global\let\dateromanian\dateromanian
+% \end{macrocode}
+% The following were provided by Daniel Dumitriu:
+% \begin{macrocode}
+\providecommand{\dayofweeknameidromanian}[1]{%
+\ifcase#1\relax
+\or duminic\u{a}%
+\or luni%
+\or mar\c{t}i%
+\or miercuri%
+\or joi%
+\or vineri%
+\or s\^{a}mb\u{a}t\u{a}%
+\fi}%
+\global\let\dayofweeknameidromanian\dayofweeknameidromanian
+% \end{macrocode}
+%
+% \begin{macrocode}
+\providecommand{\shortdayofweeknameidromanian}[1]{%
+\ifcase#1\relax
+\or D%
+\or L%
+\or Ma%
+\or Mi%
+\or J%
+\or V%
+\or S%
+\fi}%
+\global\let\shortdayofweeknameidromanian\shortdayofweeknameidromanian
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</dt-romanian.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-russian.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{Russian}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-russian.def}[2013/09/10]%
+% \end{macrocode}
+% Define month names.
+% \begin{macrocode}
+\providecommand{\monthnamerussian}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\or \cyrya\cyrn\cyrv\cyra\cyrr\cyrya\or
+ \cyrf\cyre\cyrv\cyrr\cyra\cyrl\cyrya\or
+ \cyrm\cyra\cyrr\cyrt\cyra\or
+ \cyra\cyrp\cyrr\cyre\cyrl\cyrya\or
+ \cyrm\cyra\cyrya\or
+ \cyri\cyryu\cyrn\cyrya\or
+ \cyri\cyryu\cyrl\cyrya\or
+ \cyra\cyrv\cyrg\cyru\cyrs\cyrt\cyra\or
+ \cyrs\cyre\cyrn\cyrt\cyrya\cyrb\cyrr\cyrya\or
+ \cyro\cyrk\cyrt\cyrya\cyrb\cyrr\cyrya\or
+ \cyrn\cyro\cyrya\cyrb\cyrr\cyrya\or
+ \cyrd\cyre\cyrk\cyra\cyrb\cyrr\cyrya%
+\else
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\fi}%
+\global\let\monthnamerussian\monthnamerussian
+% \end{macrocode}
+% (Re)Define declaration to switch to this format.
+% \begin{macrocode}
+\DeclareRobustCommand*\daterussian{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day~\monthnamerussian[\@month]\ \number\@year~\cyrg.}}%
+\global\let\daterussian\daterussian
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</dt-russian.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-samin.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{Samin}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-samin.def}[2013/09/10]%
+% \end{macrocode}
+% Define month names.
+% \begin{macrocode}
+\providecommand{\monthnamesamin}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\or o\dj{}\dj{}ajagem\'anu\or
+ guovvam\'anu\or
+ njuk\v cam\'anu\or
+ cuo\ng{}om\'anu\or
+ miessem\'anu\or
+ geassem\'anu\or
+ suoidnem\'anu\or
+ borgem\'anu\or
+ \v cak\v cam\'anu\or
+ golggotm\'anu\or
+ sk\'abmam\'anu\or
+ juovlam\'anu%
+\else
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\fi}%
+\global\let\monthnamesamin\monthnamesamin
+% \end{macrocode}
+% (Re)Define declaration to switch to this format.
+% \begin{macrocode}
+\DeclareRobustCommand*\datesamin{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\monthnamesamin[\@month]\space\number\@day.~b.\space
+\number\@year}}%
+\global\let\datesamin\datesamin
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</dt-samin.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-scottish.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{Scottish}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-scottish.def}[2013/09/10]%
+% \end{macrocode}
+% Define month names.
+% \begin{macrocode}
+\providecommand{\monthnamescottish}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\or am Faoilteach%
+\or an Gearran%
+\or am M\`art%
+\or an Giblean%
+\or an C\`eitean%
+\or an t-\`Og mhios%
+\or an t-Iuchar%
+\or L\`unasdal%
+\or an Sultuine%
+\or an D\`amhar%
+\or an t-Samhainn%
+\or an Dubhlachd%
+\else
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\fi}%
+\global\let\monthnamescottish\monthnamescottish
+% \end{macrocode}
+% (Re)Define declaration to switch to this format.
+% \begin{macrocode}
+\DeclareRobustCommand*\datescottish{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day\space\monthnamescottish[\@month]\space \number\@year}}%
+\global\let\datescottish\datescottish
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</dt-scottish.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-serbian.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{Serbian}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-serbian.def}[2013/09/10]%
+% \end{macrocode}
+% Define month names.
+% \begin{macrocode}
+\providecommand{\monthnameserbian}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\or januar%
+\or februar%
+\or mart%
+\or april%
+\or maj%
+\or juni%
+\or juli%
+\or avgust%
+\or septembar%
+\or oktobar%
+\or novembar%
+\or decembar%
+\else
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\fi}%
+\global\let\monthnameserbian\monthnameserbian
+% \end{macrocode}
+% (Re)Define declaration to switch to this format.
+% \begin{macrocode}
+\DeclareRobustCommand*\dateserbian{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day.~\monthnameserbian[\@month]\space \number\@year}}%
+\global\let\dateserbian\dateserbian
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</dt-serbian.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-slovak.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{Slovak}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-slovak.def}[2013/09/10]%
+% \end{macrocode}
+% Define month names.
+% \begin{macrocode}
+\providecommand{\monthnameslovak}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month
+numbers should go from 1 to 12}%
+\or janu\'ara%
+\or febru\'ara%
+\or marca%
+\or apr\'{\i}la%
+\or m\'aja%
+\or j\'una%
+\or j\'ula%
+\or augusta%
+\or septembra%
+\or okt\'obra%
+\or novembra%
+\or decembra%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\fi}%
+\global\let\monthnameslovak\monthnameslovak
+% \end{macrocode}
+% (Re)Define declaration to switch to this format.
+% \begin{macrocode}
+\DeclareRobustCommand*\dateslovak{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day.~\monthnameslovak[\@month]\space \number\@year}}%
+\global\let\dateslovak\dateslovak
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</dt-slovak.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-slovene.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{Slovene}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-slovene.def}[2013/09/10]%
+% \end{macrocode}
+% Define month names.
+% \begin{macrocode}
+\providecommand{\monthnameslovene}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\or januar%
+\or februar%
+\or marec%
+\or april%
+\or maj%
+\or junij%
+\or julij%
+\or avgust%
+\or september%
+\or oktober%
+\or november%
+\or december%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\fi}%
+\global\let\monthnameslovene\monthnameslovene
+% \end{macrocode}
+% (Re)Define declaration to switch to this format.
+% \begin{macrocode}
+\DeclareRobustCommand*\dateslovene{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day.~\monthnameslovene[\@month]\space \number\@year}}%
+\global\let\dateslovene\dateslovene
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</dt-slovene.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-spanish.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{Spanish}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-spanish.def}[2013/09/10]%
+% \end{macrocode}
+% Define week day names.
+% \begin{macrocode}
+\providecommand{\dayofweeknameidspanish}[1]{%
+\ifcase#1\relax
+\or domingo%
+\or lunes%
+\or martes%
+\or mi\'ercoles%
+\or jueves%
+\or viernes%
+\or s\'abado%
+\fi}%
+\global\let\dayofweeknameidspanish\dayofweeknameidspanish
+% \end{macrocode}
+% Define abbreviated week day names (is this correct?)
+% \begin{macrocode}
+\providecommand{\shortdayofweeknameidspanish}[1]{%
+\ifcase#1\relax
+\or dom%
+\or lun%
+\or mar%
+\or mi\'e%
+\or jue%
+\or vie%
+\or s\'ab%
+\fi}%
+\global\let\shortdayofweeknameidspanish\shortdayofweeknameidspanish
+% \end{macrocode}
+% Define month names.
+% \begin{macrocode}
+\providecommand{\monthnamespanish}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\or enero%
+\or febrero%
+\or marzo%
+\or abril%
+\or mayo%
+\or junio%
+\or julio%
+\or agosto%
+\or septiembre%
+\or octubre%
+\or noviembre%
+\or diciembre%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\fi}%
+\global\let\monthnamespanish\monthnamespanish
+% \end{macrocode}
+% (Re)Define declaration to switch to this format.
+% \begin{macrocode}
+\DeclareRobustCommand*\datespanish{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day~de \monthnamespanish[\@month]\ de~\number\@year}}%
+\global\let\datespanish\datespanish
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</dt-spanish.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-swedish.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{Swedish}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-swedish.def}[2013/09/10]%
+% \end{macrocode}
+% Define month names.
+% \begin{macrocode}
+\providecommand{\monthnameswedish}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\or januari%
+\or februari%
+\or mars%
+\or april%
+\or maj%
+\or juni%
+\or juli%
+\or augusti%
+\or september%
+\or oktober%
+\or november%
+\or december%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\fi}%
+\global\let\monthnameswedish\monthnameswedish
+% \end{macrocode}
+% (Re)Define declaration to switch to this format
+% (day monthname year).
+% \begin{macrocode}
+\DeclareRobustCommand*\dateswedish{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day~\monthnameswedish[\@month]\space\number\@year}}%
+\global\let\dateswedish\dateswedish
+% \end{macrocode}
+% (Re)Define declaration to switch to this format
+% (two-digit numerical).
+% \begin{macrocode}
+\DeclareRobustCommand*\datesymd{%
+ \renewcommand{\formatdate}[3]{%
+ \@day=##1\relax\@month=##2\relax\@year=##3\relax
+ \number\@year-\two@digits\@month-\two@digits\@day}%
+}%
+\global\let\datesymd\datesymd
+% \end{macrocode}
+% (Re)Define declaration to switch to this format
+% (numerical).
+% \begin{macrocode}
+\DeclareRobustCommand*\datesdmy{%
+ \renewcommand{\formatdate}[3]{%
+ \@day=##1\relax\@month=##2\relax\@year=##3\relax
+ \number\@day/\number\@month\space\number\@year}%
+}%
+\global\let\datesdmy\datesdmy
+% \end{macrocode}
+% Day of weekname provided by Johan Sj\"oblom
+% \begin{macrocode}
+\providecommand*{\dayofweeknameidswedish}[1]{%
+\ifcase#1\relax
+\or S\"ondag%
+\or M\aa{}ndag%
+\or Tisdag%
+\or Onsdag%
+\or Torsdag%
+\or Fredag%
+\or L\"ordag%
+\fi}
+\providecommand*{\shortdayofweeknameidswedish}[1]{%
+\ifcase#1\relax
+\or S\"on%
+\or M\aa{}n%
+\or Tis%
+\or Ons%
+\or Tor%
+\or Fre%
+\or L\"or%
+\fi}
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</dt-swedish.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-turkish.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{Turkish}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-turkish.def}[2013/09/10]%
+% \end{macrocode}
+% Define month names.
+% \begin{macrocode}
+\providecommand{\monthnameturkish}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\or Ocak%
+\or \c Subat%
+\or Mart%
+\or Nisan%
+\or May\i{}s%
+\or Haziran%
+\or Temmuz%
+\or A\u gustos%
+\or Eyl\"ul%
+\or Ekim%
+\or Kas\i{}m%
+\or Aral\i{}k%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\fi}%
+\global\let\monthnameturkish\monthnameturkish
+% \end{macrocode}
+% (Re)Define declaration to switch to this format.
+% \begin{macrocode}
+\DeclareRobustCommand*\dateturkish{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day~\monthnameturkish[\@month]\space\number\@year}}%
+\global\let\dateturkish\dateturkish
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</dt-turkish.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-UKenglish.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{UKenglish}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-UKenglish.def}[2013/09/10]%
+% \end{macrocode}
+%\begin{macro}{\dateUKenglish}
+% \begin{macrocode}
+\global\let\dateUKenglish\longdate
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\monthnameUKenglish}
+% \begin{macrocode}
+\global\let\monthnameUKenglish\monthnameenglish
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\shortmonthnameUKenglish}
+% \begin{macrocode}
+\global\let\shortmonthnameUKenglish\shortmonthnameenglish
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\dayofweeknameidUKenglish}
+% \begin{macrocode}
+\global\let\dayofweeknameidUKenglish\dayofweeknameidenglish
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\shortdayofweeknameidUKenglish}
+% \begin{macrocode}
+\global\let\shortdayofweeknameidUKenglish\shortdayofweeknameidenglish
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\ordinaldateUKenglish}
+% \begin{macrocode}
+\global\let\ordinaldateUKenglish\ordinaldateenglish
+% \end{macrocode}
+%\end{macro}
+%\iffalse
+% \begin{macrocode}
+%</dt-UKenglish.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-ukraineb.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{Ukraine}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-ukraineb.def}[2013/09/10]%
+% \end{macrocode}
+% Define month names.
+% \begin{macrocode}
+\providecommand{\monthnameukraineb}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\or \cyrs\cyrii\cyrch\cyrn\cyrya\or
+ \cyrl\cyryu\cyrt\cyro\cyrg\cyro\or
+ \cyrb\cyre\cyrr\cyre\cyrz\cyrn\cyrya\or
+ \cyrk\cyrv\cyrii\cyrt\cyrn\cyrya\or
+ \cyrt\cyrr\cyra\cyrv\cyrn\cyrya\or
+ \cyrch\cyre\cyrr\cyrv\cyrn\cyrya\or
+ \cyrl\cyri\cyrp\cyrn\cyrya\or
+ \cyrs\cyre\cyrr\cyrp\cyrn\cyrya\or
+ \cyrv\cyre\cyrr\cyre\cyrs\cyrn\cyrya\or
+ \cyrzh\cyro\cyrv\cyrt\cyrn\cyrya\or
+ \cyrl\cyri\cyrs\cyrt\cyro\cyrp\cyra\cyrd\cyra\or
+ \cyrg\cyrr\cyru\cyrd\cyrn\cyrya%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\fi}%
+\global\let\monthnameukraineb\monthnameukraineb
+% \end{macrocode}
+% (Re)Define declaration to switch to this format.
+% \begin{macrocode}
+\DeclareRobustCommand*\dateukraineb{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day~\monthnameukraineb[\@month]\space\number\@year~\cyrr.}}%
+\global\let\dateukraineb\dateukraineb
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</dt-ukraineb.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-USenglish.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{USenglish}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-USenglish.def}[2013/09/10]%
+% \end{macrocode}
+%\begin{macro}{\dateUSenglish}
+% \begin{macrocode}
+\global\let\dateUSenglish\usdate
+% \end{macrocode}
+%\end{macro}
+%\begin{macrocode}{\monthnameUSenglish}
+% \begin{macrocode}
+\global\let\monthnameUSenglish\monthnameenglish
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\shortmonthnameUSenglish}
+% \begin{macrocode}
+\global\let\shortmonthnameUSenglish\shortmonthnameenglish
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\dayofweeknameidUSenglish}
+% \begin{macrocode}
+\global\let\dayofweeknameidUSenglish\dayofweeknameidenglish
+% \end{macrocode}
+%\end{macro}
+%\begin{macrocode}{\shortdayofweeknameidUSenglish}
+% \begin{macrocode}
+\global\let\shortdayofweeknameidUSenglish\shortdayofweeknameidenglish
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\ordinaldateUSenglish}
+% \begin{macrocode}
+\newcommand*{\ordinaldateUSenglish}[1]{#1}%
+\global\let\ordinaldateUSenglish\ordinaldateUSenglish
+% \end{macrocode}
+%\end{macro}
+%\iffalse
+% \begin{macrocode}
+%</dt-USenglish.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-usorbian.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{USorbian}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-usorbian.def}[2013/09/10]%
+% \end{macrocode}
+% Define (new) month names.
+% \begin{macrocode}
+\providecommand{\monthnamenewusorbian}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\or januara%
+\or februara%
+\or m\v erca%
+\or apryla%
+\or meje%
+\or junija%
+\or julija%
+\or awgusta%
+\or septembra%
+\or oktobra%
+\or nowembra%
+\or decembra%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\fi}%
+\global\let\monthnamenewusorbian\monthnamenewusorbian
+% \end{macrocode}
+% Define (old) month names.
+% \begin{macrocode}
+\providecommand{\monthnameoldusorbian}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\or wulkeho r\'o\v zka%
+\or ma\l eho r\'o\v zka%
+\or nal\v etnika%
+\or jutrownika%
+\or r\'o\v zownika%
+\or sma\v znika%
+\or pra\v znika%
+\or \v znjenca%
+\or po\v znjenca%
+\or winowca%
+\or nazymnika%
+\or hodownika%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{Month numbers should go from 1 to 12}%
+\fi}%
+\global\let\monthnameoldusorbian\monthnameoldusorbian
+% \end{macrocode}
+% Set up default
+% \begin{macrocode}
+\global\let\monthnameusorbian\monthnamenewusorbian
+% \end{macrocode}
+% (Re)Define declaration to switch to (new) format.
+% \begin{macrocode}
+\DeclareRobustCommand*\newdateusorbian{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day.~\monthnamenewusorbian[\@month]\space\number\@year}}%
+\global\let\newdateusorbian\newdateusorbian
+% \end{macrocode}
+% (Re)Define declaration to switch to (old) format.
+% \begin{macrocode}
+\DeclareRobustCommand*\olddateusorbian{%
+\renewcommand{\formatdate}[3]{%
+\@day=##1\relax\@month=##2\relax\@year=##3\relax
+\number\@day.~\monthnameoldusorbian[\@month]\space\number\@year}}%
+\global\let\olddateusorbian\olddateusorbian
+% \end{macrocode}
+% Set up default
+% \begin{macrocode}
+\global\let\dateusorbian\newdateusorbian
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</dt-usorbian.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-welsh.def>
+% \end{macrocode}
+%\fi
+%\subsubsection{Welsh}
+% Identify file
+% \begin{macrocode}
+\ProvidesFile{dt-welsh.def}[2013/09/10]%
+% \end{macrocode}
+%\begin{macro}{\ordinaldatewelsh}
+% Welsh version:
+% \begin{macrocode}
+\providecommand*{\ordinaldatewelsh}[1]{%
+#1\ifnum#1=1\/\textsuperscript{a\~n}\fi}%
+\global\let\ordinaldatewelsh\ordinaldatewelsh
+% \end{macrocode}
+%\end{macro}
+% Define month names.
+% \begin{macrocode}
+\providecommand{\monthnamewelsh}[1][\month]{%
+\@orgargctr=#1\relax
+\ifcase\@orgargctr
+\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\or Ionawr%
+\or Chwefror%
+\or Mawrth%
+\or Ebrill%
+\or Mai%
+\or Mehefin%
+\or Gorffennaf%
+\or Awst%
+\or Medi%
+\or Hydref%
+\or Tachwedd%
+\or Rhagfyr%
+\else \PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
+Month numbers should go from 1 to 12}%
+\fi}%
+\global\let\monthnamewelsh\monthnamewelsh
+% \end{macrocode}
+% (Re)Define declaration to switch to this format.
+%\changes{5.60}{2014-09-25}{removed `a viz'}
+% \begin{macrocode}
+\DeclareRobustCommand*\datewelsh{%
+\renewcommand{\formatdate}[3]{%
+ \@day=##1\relax\@month=##2\relax\@year=##3\relax
+ \ifnum\@day=1\relax
+ 1\/$^{\mathrm{a\tilde{n}}}$%
+ \else
+ \number\@day
+ \fi
+ \space
+ \monthnamewelsh[\@month]\space\number\@year}%
+}%
+\global\let\datewelsh\datewelsh
+% \end{macrocode}
+% \subsection{LaTeX2HTML Perl Script}
+%\iffalse
+% \begin{macrocode}
+%</dt-welsh.def>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-lang.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+\documentclass{article}
+
+\usepackage[T1]{fontenc}
+\usepackage[french,spanish,english]{babel}
+\usepackage{datetime} % Date will be language-dependent
+%\usepackage[iso]{datetime} % Date will be displayed the same for all languages
+
+\begin{document}
+English: \today
+
+\selectlanguage{french}
+French: \today
+
+\selectlanguage{spanish}
+Spanish: \today
+
+\begin{otherlanguage}{french}
+French: \today
+\end{otherlanguage}
+
+\today
+\end{document}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</dt-lang.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*dt-sampl.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+\documentclass[a4paper]{article}
+
+\usepackage{ifpdf}
+\usepackage{datetime}
+
+
+\ifpdf
+\pdfinfo{
+ /CreationDate (D:20040501215500Z)
+ /ModDate (D:\pdfcreationdate)
+}
+\fi
+
+\padzeroes[8]
+
+\newdateformat{dashdate}{\twodigit{\THEDAY}-\twodigit{\THEMONTH}-\THEYEAR}
+\newdateformat{usvardate}{\monthname[\THEMONTH]~\ordinaldate{\THEDAY}, \THEYEAR}
+\newdateformat{mydate}{\ifshowdow \dayofweekname{\THEDAY}{\THEMONTH}{\THEYEAR} \fi
+\THEDAY\ \monthname[\THEMONTH], \THEYEAR}
+\newdateformat{yyyymmdd}{\THEYEAR\twodigit{\THEMONTH}\twodigit{\THEDAY}}
+\newdateformat{ukvardate}{\THEDAY\ \monthname[\THEMONTH]\ \THEYEAR}
+
+\newtimeformat{dottime}{\twodigit{\THEHOUR}.\twodigit{\THEMINUTE}}
+\newtimeformat{dashtime12}{\THEHOURXII-\twodigit{\THEMINUTE}}
+\newtimeformat{hhmm}{\twodigit{\THEHOUR}\twodigit{\THEMINUTE}}
+
+\begin{document}
+
+\section{Date Formats}
+Default: \today.
+
+\begin{tabular}{ll}
+\bfseries Declaration & \bfseries\verb|\today|\\
+\verb|\longdate| & \longdate\today\\
+\verb|\shortdate| & \shortdate\today\\
+\verb|\yyyymmdddate| & \yyyymmdddate\today\\
+\verb|\ddmmyyyydate| & \ddmmyyyydate\today\\
+\verb|\dmyyyydate| & \dmyyyydate\today\\
+\verb|\ddmmyydate| & \ddmmyydate\today\\
+\verb|\dmyydate| & \dmyydate\today\\
+\verb|\textdate| & \textdate\today\\
+\verb|\usdate| & \usdate\today\\
+\verb|\mmddyyyydate| & \mmddyyyydate\today\\
+\verb|\mdyyyydate| & \mdyyyydate\today\\
+\verb|\mmddyydate| & \mmddyydate\today\\
+\verb|\mdyydate| & \mdyydate\today
+\end{tabular}
+
+\section{Time Formats}
+Default: \currenttime.
+
+\begin{tabular}{@{\ttfamily}ll}
+\bfseries\rmfamily Format & \bfseries \verb|\currenttime|\\
+hhmmsstime & \settimeformat{hhmmsstime}\currenttime\\
+xxivtime & \settimeformat{xxivtime}\currenttime\\
+ampmtime & \settimeformat{ampmtime}\currenttime\\
+oclock & \settimeformat{oclock}\currenttime
+\end{tabular}
+
+\section{Specific Date:}
+
+\begin{tabular}{ll}
+\bfseries Format & \bfseries \verb|\formatdate{1}{3}{2009}|\\
+\verb|\longdate| & \longdate\formatdate{1}{3}{2000}\\
+\verb|\shortdate| & \shortdate\formatdate{1}{3}{2000}\\
+\verb|\yyyymmdddate| & \yyyymmdddate\formatdate{1}{3}{2000}\\
+\verb|\ddmmyyyydate| & \ddmmyyyydate\formatdate{1}{3}{2000}\\
+\verb|\dmyyyydate| & \dmyyyydate\formatdate{1}{3}{2000}\\
+\verb|\ddmmyydate| & \ddmmyydate\formatdate{1}{3}{2000}\\
+\verb|\dmyydate| & \dmyydate\formatdate{1}{3}{2000}\\
+\verb|\textdate| & \textdate\formatdate{1}{3}{2000}\\
+\verb|\usdate| & \usdate\formatdate{1}{3}{2000}\\
+\verb|\mmddyyyydate| & \mmddyyyydate\formatdate{1}{3}{2000}\\
+\verb|\mdyyyydate| & \mdyyyydate\formatdate{1}{3}{2000}\\
+\verb|\mmddyydate| & \mmddyydate\formatdate{1}{3}{2000}\\
+\verb|\mdyydate| & \mdyydate\formatdate{1}{3}{2000}
+\end{tabular}
+
+\section{Specific Time}
+
+\begin{tabular}{@{\ttfamily}ll}
+\bfseries\rmfamily Format & \bfseries \verb|\formattime{15}{45}{00}|\\
+hhmmsstime & \settimeformat{hhmmsstime}\formattime{15}{45}{00}\\
+xxivtime & \settimeformat{xxivtime}\formattime{15}{45}{00}\\
+ampmtime & \settimeformat{ampmtime}\formattime{15}{45}{00}\\
+oclock & \settimeformat{oclock}\formattime{15}{45}{00}
+\end{tabular}
+
+\vskip\baselineskip\noindent
+\begin{tabular}{@{\ttfamily}ll}
+\bfseries\rmfamily Format & \bfseries \verb|\formattime{0}{0}{0}|\\
+hhmmsstime & \settimeformat{hhmmsstime}\formattime{0}{0}{0}\\
+xxivtime & \settimeformat{xxivtime}\formattime{0}{0}{0}\\
+ampmtime & \settimeformat{ampmtime}\formattime{0}{0}{0}\\
+oclock & \settimeformat{oclock}\formattime{0}{0}{0}
+\end{tabular}
+
+\vskip\baselineskip\noindent
+\begin{tabular}{@{\ttfamily}ll}
+\bfseries\rmfamily Format & \bfseries \verb|\formattime{12}{0}{0}|\\
+hhmmsstime & \settimeformat{hhmmsstime}\formattime{12}{0}{0}\\
+xxivtime & \settimeformat{xxivtime}\formattime{12}{0}{0}\\
+ampmtime & \settimeformat{ampmtime}\formattime{12}{0}{0}\\
+oclock & \settimeformat{oclock}\formattime{12}{0}{0}
+\end{tabular}
+
+\section{Defining New Dates}
+
+\begin{tabular}{ll}
+\verb|\dashdate| & \dashdate\today\\
+\verb|\usvardate| & \usvardate\today\\
+\verb|\ukvardate| & \ukvardate\today\\
+\verb|\mydate| & \mydate\today\\
+\verb|\yyyymmdd| & \yyyymmdd\today\\
+\verb|\dashdate| & \dashdate\formatdate{8}{3}{2000}\\
+\verb|\usvardate| & \usvardate\formatdate{8}{3}{2000}\\
+\verb|\mydate| & \mydate\formatdate{8}{3}{2000}\\
+\verb|\yyyymmdd| & \yyyymmdd\formatdate{8}{3}{2000}
+\end{tabular}
+
+\section{Defining New Times}
+
+\begin{tabular}{@{\ttfamily}ll}
+\bfseries\rmfamily Format & \bfseries \verb|\currenttime|\\
+dottime & \settimeformat{dottime}\currenttime\\
+dashtime12 & \settimeformat{dashtime12}\currenttime\\
+hhmm & \settimeformat{hhmm}\currenttime
+\end{tabular}
+
+\end{document}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</dt-sampl.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*datetime.perl>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+# File : datetime.perl
+# Author : Nicola Talbot
+# Date : 17 Nov 2009
+# Version : 1.04
+#
+# This is a LaTeX2HTML style implementing the datetime package, and
+# is distributed as part of that package.
+# Copyright 2007 Nicola L.C. Talbot
+# This work may be distributed and/or modified under the
+# conditions of the LaTeX Project Public License, either version 1.3
+# of this license of (at your option) any later version.
+# The latest version of this license is in
+# http://www.latex-project.org/lppl.txt
+# and version 1.3 or later is part of all distributions of LaTeX
+# version 2005/12/01 or later.
+#
+# This work has the LPPL maintenance status `maintained'.
+#
+# The Current Maintainer of this work is Nicola Talbot.
+
+# set up default values for internal counters.
+
+($global{SECONDS},$global{MINUTE},$global{HOUR},$global{DAY},$global{MONTH},$global{YEAR})=localtime(time);
+$global{YEAR} += 1900;
+$global{MONTH}++;
+
+package main;
+
+&do_require_package('fmtcount');
+
+sub do_cmd_ordinaldate{
+ &do_cmd_ordinalnum(@_);
+}
+
+# define package options
+
+sub do_datetime_long{
+ &do_cmd_longdate(@_);
+}
+
+sub do_datetime_short{
+ &do_cmd_shortdate(@_);
+}
+
+sub do_datetime_text{
+ &do_cmd_textdate(@_);
+}
+
+sub do_datetime_yyyymmdd{
+ &do_cmd_yyyymmdddate(@_);
+}
+
+sub do_datetime_ddmmyyyy{
+ &do_cmd_ddmmyyyydate(@_);
+}
+
+sub do_datetime_dmyyyy{
+ &do_cmd_dmyyyydate(@_);
+}
+
+sub do_datetime_ddmmyy{
+ &do_cmd_ddmmyydate(@_);
+}
+
+sub do_datetime_dmyy{
+ &do_cmd_dmyyyydate(@_);
+}
+
+sub do_datetime_us{
+ &do_cmd_usdate(@_);
+}
+
+sub do_datetime_mmddyyyy{
+ &do_cmd_mmddyyyydate(@_);
+}
+
+sub do_datetime_mdyyyy{
+ &do_cmd_mdyyyydate(@_);
+}
+
+sub do_datetime_mmddyy{
+ &do_cmd_mmddyydate(@_);
+}
+
+sub do_datetime_mdyy{
+ &do_cmd_mdyyyydate(@_);
+}
+
+sub do_datetime_raise{
+ local($tmp)="";
+
+ $tmp .= 'sub do_cmd_fmtord{';
+ $tmp .= 'local($_) = @_;';
+ $tmp .= 'local($num) = &missing_braces unless ((s/$next_pair_pr_rx//o)&&($num=$2));';
+ $tmp .= 'join("", "<SUP>",$num,"</SUP>",$_);';
+ $tmp .='}';
+
+ eval($tmp);
+}
+
+sub do_datetime_level{
+ local($tmp)="";
+
+ $tmp .= 'sub do_cmd_fmtord{';
+ $tmp .= 'local($_) = @_;';
+ $tmp .= 'local($num) = &missing_braces unless ((s/$next_pair_pr_rx//o)&&($num=$2));';
+ $tmp .= 'join("", $num,$_);';
+ $tmp .='}';
+
+ eval($tmp);
+}
+
+sub do_datetime_dayofweek{
+ &do_cmd_showdowtrue(@_);
+}
+
+sub do_datetime_nodayofweek{
+ &do_cmd_showdowfalse(@_);
+}
+
+sub do_datetime_hhmmss{
+ &set_timeformat_hhmmsstime
+}
+
+sub do_datetime_24hr{
+ &set_timeformat_xxivtime
+}
+
+&do_datetime_24hr;
+
+sub do_datetime_12hr{
+ &set_timeformat_ampmtime
+}
+
+sub do_datetime_oclock{
+ &set_timeformat_oclock
+}
+
+sub do_datetime_iso{
+ &set_timeformat_hhmmsstime;
+ &do_cmd_yyyymmdddate;
+ eval('sub do_cmd_dateseparator{join(\'\', \'-\', $_[0]);}');
+ eval('sub do_cmd_timeseparator{join(\'\', \':\', $_[0]);}');
+}
+
+# babel stuff (Month will already be redefined by babel, so only need to change $dateformat)
+
+sub do_datetime_austrian{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_dateaustrian{';
+ $tmp .= ' $dateformat = "THEDAY. MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_dateaustrian(@_);
+}
+
+if (defined &austrian_today)
+{
+ &do_datetime_austrian(@_);
+}
+
+sub do_datetime_bahasa{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_datebahasa{';
+ $tmp .= ' $dateformat = "THEDAY MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_datebahasa(@_);
+}
+
+if (defined &bahasa_today)
+{
+ &do_datetime_bahasa(@_);
+}
+
+sub do_datetime_basque{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_datebasque{';
+ $tmp .= ' $dateformat = "THEYEAR.eko MONTHNAME[THEMONTH] THEDAY";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_datebasque(@_);
+}
+
+if (defined &basque_today)
+{
+ &do_datetime_basque(@_);
+}
+
+sub do_datetime_breton{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_datebreton{';
+ $tmp .= ' $dateformat = "{ORDINALDATE{DAY}}\\ a viz MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ $tmp = 'sub do_cmd_ordinaldate{';
+ $tmp .= 'local($_) = @_;';
+ $tmp .= 'local($num) = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($num=$2));';
+ $tmp .= 'local($before) = $num;';
+
+ $tmp .= 'if ($num == 1)';
+ $tmp .= '{ $before .= \'a\~n\'; }';
+
+ $tmp .= '$before . $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_datebreton(@_);
+}
+
+if (defined &breton_today)
+{
+ &do_datetime_breton(@_);
+}
+
+sub do_datetime_bulgarian{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_datebulgarian{';
+ $tmp .= ' $dateformat = "THEDAY MONTHNAME[THEMONTH] THEYEAR \\cyrg.";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_datebulgarian(@_);
+}
+
+if (defined &bulgarian_today)
+{
+ &do_datetime_bulgarian(@_);
+}
+
+sub do_datetime_catalan{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_datecatalan{';
+ $tmp .= ' $dateformat = "THEDAY MONTHNAME[THEMONTH] de THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_datecatalan(@_);
+}
+
+if (defined &catalan_today)
+{
+ &do_datetime_catalan(@_);
+}
+
+sub do_datetime_croatian{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_datecroatian{';
+ $tmp .= ' $dateformat = "THEDAY. MONTHNAME[THEMONTH] THEYEAR.";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_datecroatian(@_);
+}
+
+if (defined &croatian_today)
+{
+ &do_datetime_croatian(@_);
+}
+
+sub do_datetime_czech{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_dateczech{';
+ $tmp .= ' $dateformat = "THEDAY. MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_dateczech(@_);
+}
+
+if (defined &czech_today)
+{
+ &do_datetime_czech(@_);
+}
+
+sub do_datetime_danish{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_datedanish{';
+ $tmp .= ' $dateformat = "THEDAY. MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_datedanish(@_);
+}
+
+if (defined &danish_today)
+{
+ &do_datetime_danish(@_);
+}
+
+sub do_datetime_dutch{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_datedutch{';
+ $tmp .= ' $dateformat = "THEDAY MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_datedutch(@_);
+}
+
+if (defined &dutch_today)
+{
+ &do_datetime_dutch(@_);
+}
+
+sub do_datetime_esperanto{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_dateesperanto{';
+ $tmp .= ' $dateformat = "THEDAY--a de MONTHNAME[THEMONTH], THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_dateesperanto(@_);
+}
+
+if (defined &esperanto_today)
+{
+ &do_datetime_esperanto(@_);
+}
+
+sub do_datetime_estonian{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_dateestonian{';
+ $tmp .= ' $dateformat = "THEDAY. MONTHNAME[THEMONTH] THEYEAR. a.";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_dateestonian(@_);
+}
+
+if (defined &estonian_today)
+{
+ &do_datetime_estonian(@_);
+}
+
+sub do_datetime_finnish{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_datefinnish{';
+ $tmp .= ' $dateformat = "THEDAY. MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_datefinnish(@_);
+}
+
+if (defined &finnish_today)
+{
+ &do_datetime_finnish(@_);
+}
+
+sub do_datetime_french{
+ local($tmp) = "";
+
+ eval($tmp);
+ $tmp .= 'sub do_cmd_datefrench{';
+ $tmp .= ' $dateformat = "{ORDINALDATE{DAY}}\\ MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ $tmp = 'sub do_cmd_ordinaldate{';
+ $tmp .= 'local($_) = @_;';
+ $tmp .= 'local($num) = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($num=$2));';
+ $tmp .= 'local($before) = $num;';
+
+ $tmp .= 'if ($num == 1)';
+ $tmp .= '{ $before .= \'\ier\'; }';
+
+ $tmp .= '$before . $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_datefrench(@_);
+}
+
+if (defined &french_today)
+{
+ &do_datetime_french(@_);
+}
+
+sub do_datetime_galician{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_dategalician{';
+ $tmp .= ' $dateformat = "THEDAY de MONTHNAME[THEMONTH] de THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_dategalician(@_);
+}
+
+if (defined &galician_today)
+{
+ &do_datetime_galician(@_);
+}
+
+sub do_datetime_german{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_dategerman{';
+ $tmp .= ' $dateformat = "THEDAY. MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_dategerman(@_);
+}
+
+if (defined &german_today)
+{
+ &do_datetime_german(@_);
+}
+
+sub do_datetime_greek{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_dategreek{';
+ $tmp .= ' $dateformat = "THEDAY MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_dategreek(@_);
+}
+
+if (defined &greek_today)
+{
+ &do_datetime_greek(@_);
+}
+
+sub do_datetime_icelandic{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_dateicelandic{';
+ $tmp .= ' $dateformat = "THEDAY. MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_dateicelandic(@_);
+}
+
+if (defined &icelandic_today)
+{
+ &do_datetime_icelandic(@_);
+}
+
+sub do_datetime_irish{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_dateirish{';
+ $tmp .= ' $dateformat = "THEDAY MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_dateirish(@_);
+}
+
+if (defined &irish_today)
+{
+ &do_datetime_irish(@_);
+}
+
+sub do_datetime_italian{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_dateitalian{';
+ $tmp .= ' $dateformat = "THEDAY MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_dateitalian(@_);
+}
+
+if (defined &italian_today)
+{
+ &do_datetime_italian(@_);
+}
+
+sub do_datetime_latin{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_datelatin{';
+ $tmp .= ' $dateformat = "ROMANNUMERALU{THEDAY} MONTHNAME[THEMONTH] ROMANNUMERALU{THEYEAR}";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_datelatin(@_);
+}
+
+if (defined &latin_today)
+{
+ &do_datetime_latin(@_);
+}
+
+sub do_datetime_lsorbian{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_datelsorbian{';
+ $tmp .= ' $dateformat = "THEDAY. MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_datelsorbian(@_);
+}
+
+if (defined &lsorbian_today)
+{
+ &do_datetime_lsorbian(@_);
+}
+
+sub do_datetime_magyar{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_datemagyar{';
+ $tmp .= ' $dateformat = "THEDAY. MONTHNAME[THEMONTH] THEYEAR.";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_datemagyar(@_);
+}
+
+if (defined &magyar_today)
+{
+ &do_datetime_magyar(@_);
+}
+
+sub do_datetime_naustrian{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_datenaustrian{';
+ $tmp .= ' $dateformat = "THEDAY. MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_datenaustrian(@_);
+}
+
+if (defined &naustrian_today)
+{
+ &do_datetime_naustrian(@_);
+}
+
+sub do_datetime_ngerman{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_datengerman{';
+ $tmp .= ' $dateformat = "THEDAY. MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_datengerman(@_);
+}
+
+if (defined &ngerman_today)
+{
+ &do_datetime_ngerman(@_);
+}
+
+sub do_datetime_norsk{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_datenorsk{';
+ $tmp .= ' $dateformat = "THEDAY. MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_datenorsk(@_);
+}
+
+if (defined &norsk_today)
+{
+ &do_datetime_norsk(@_);
+}
+
+sub do_datetime_polish{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_datenorsk{';
+ $tmp .= ' $dateformat = "THEDAY MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_datenorsk(@_);
+}
+
+if (defined &polish_today)
+{
+ &do_datetime_polish(@_);
+}
+
+sub do_datetime_portuges{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_dateportuges{';
+ $tmp .= ' $dateformat = "THEDAY de MONTHNAME[THEMONTH] de THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_dateportuges(@_);
+}
+
+if (defined &portuges_today)
+{
+ &do_datetime_portuges(@_);
+}
+
+sub do_datetime_romanian{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_dateromanian{';
+ $tmp .= ' $dateformat = "THEDAY MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_dateromanian(@_);
+}
+
+if (defined &romanian_today)
+{
+ &do_datetime_romanian(@_);
+}
+
+sub do_datetime_russian{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_daterussian{';
+ $tmp .= ' $dateformat = "THEDAY MONTHNAME[THEMONTH] THEYEAR \\\\cyrg.";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_daterussian(@_);
+}
+
+if (defined &russian_today)
+{
+ &do_datetime_russian(@_);
+}
+
+sub do_datetime_samin{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_datesamin{';
+ $tmp .= ' $dateformat = "MONTHNAME[THEMONTH] THEDAY.~b. THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_datesamin(@_);
+}
+
+if (defined &samin_today)
+{
+ &do_datetime_samin(@_);
+}
+
+sub do_datetime_scottish{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_datescottish{';
+ $tmp .= ' $dateformat = "THEDAY MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_datescottish(@_);
+}
+
+if (defined &scottish_today)
+{
+ &do_datetime_scottish(@_);
+}
+
+sub do_datetime_serbian{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_dateserbian{';
+ $tmp .= ' $dateformat = "THEDAY. MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_dateserbian(@_);
+}
+
+if (defined &serbian_today)
+{
+ &do_datetime_serbian(@_);
+}
+
+sub do_datetime_slovak{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_dateslovak{';
+ $tmp .= ' $dateformat = "THEDAY. MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_dateslovak(@_);
+}
+
+if (defined &slovak_today)
+{
+ &do_datetime_slovak(@_);
+}
+
+sub do_datetime_slovene{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_dateslovene{';
+ $tmp .= ' $dateformat = "THEDAY. MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_dateslovene(@_);
+}
+
+if (defined &slovene_today)
+{
+ &do_datetime_slovene(@_);
+}
+
+sub do_datetime_spanish{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_datespanish{';
+ $tmp .= ' $dateformat = "THEDAY~de MONTHNAME[THEMONTH] de~THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_datespanish(@_);
+}
+
+if (defined &spanish_today)
+{
+ &do_datetime_spanish(@_);
+}
+
+sub do_datetime_swedish{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_dateswedish{';
+ $tmp .= ' $dateformat = "THEDAY~MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ $tmp = "";
+ $tmp .= 'sub do_cmd_datesymd{';
+ $tmp .= ' $dateformat = "THEYEAR-TWODIGIT{THEMONTH}-TWODIGIT{THEDAY}";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ $tmp = "";
+ $tmp .= 'sub do_cmd_datesdmy{';
+ $tmp .= ' $dateformat = "THEDAY/THEMONTH THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_dateswedish(@_);
+}
+
+if (defined &swedish_today)
+{
+ &do_datetime_swedish(@_);
+}
+
+sub do_datetime_turkish{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_dateturkish{';
+ $tmp .= ' $dateformat = "THEDAY~MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_dateturkish(@_);
+}
+
+if (defined &turkish_today)
+{
+ &do_datetime_turkish(@_);
+}
+
+sub do_datetime_ukraineb{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_dateukraineb{';
+ $tmp .= ' $dateformat = "THEDAY~MONTHNAME[THEMONTH] THEYEAR~\\\\cyrr.";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_dateukraineb(@_);
+}
+
+if (defined &ukraineb_today)
+{
+ &do_datetime_ukraineb(@_);
+}
+
+sub do_datetime_usorbian{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_dateusorbian{';
+ $tmp .= ' $dateformat = "THEDAY.~MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_dateusorbian(@_);
+}
+
+if (defined &usorbian_today)
+{
+ &do_datetime_usorbian(@_);
+}
+
+sub do_datetime_welsh{
+ local($tmp) = "";
+
+ $tmp .= 'sub do_cmd_datewelsh{';
+ $tmp .= ' $dateformat = "{ORDINALDATE{DAY}}\\ a viz MONTHNAME[THEMONTH] THEYEAR";';
+ $tmp .= ' $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ $tmp = 'sub do_cmd_ordinaldate{';
+ $tmp .= 'local($_) = @_;';
+ $tmp .= 'local($num) = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($num=$2));';
+ $tmp .= 'local($before) = $num;';
+
+ $tmp .= 'if ($num == 1)';
+ $tmp .= '{ $before .= \'a\~n\'; }';
+
+ $tmp .= '$before . $_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ &do_cmd_datewelsh(@_);
+}
+
+if (defined &welsh_today)
+{
+ &do_datetime_welsh(@_);
+}
+
+# As far as I know, LaTeX2HTML doesn't implement TeX conditionals.
+# $showdow corresponds to LaTeX boolean variable showdow
+$showdow = 1;
+
+sub get_monthname{
+ local($month) = @_;
+
+ if ($month eq 'THEMONTH' or $month eq '\THEMONTH')
+ {
+ # this is a cludge to help newdateformat work
+
+ 'MONTHNAME[THEMONTH]';
+ }
+ else
+ {
+ if ($month eq '')
+ {
+ local($today) = &get_date();
+ $today =~ m|(\d+)/0?(\d+)/|;
+ $month = $1;
+ }
+
+ $Month[$month];
+ }
+}
+
+sub do_cmd_monthname{
+ local($_) = @_;
+ local($month,$pat) = &get_next_optional_argument;
+
+ local($monthname) = &get_monthname($month);
+ join('',$monthname,$_);
+}
+
+sub get_shortmonthname{
+ local($month) = @_;
+
+ if ($month eq 'THEMONTH' or $month eq '\THEMONTH')
+ {
+ 'SHORTMONTHNAME[THEMONTH]';
+ }
+ else
+ {
+ substr(&get_monthname($month), 0, 3);
+ }
+}
+
+sub do_cmd_shortmonthname{
+ local($_) = @_;
+ local($month,$pat) = &get_next_optional_argument;
+
+ local($monthname) = &get_shortmonthname($month);
+
+ join('',$monthname,$_);
+}
+
+sub is_leap_year{
+ local($year) = @_;
+ local($isleapyear) = 0;
+
+ if (($year%400) == 0)
+ {
+ # year mod 400 = 0 => leap year
+
+ $isleapyear = 1;
+ }
+ elsif (($year%100) == 0)
+ {
+ # year mod 100 = 0 and year mod 400 != 0 => not a leap year
+
+ $isleapyear = 0;
+ }
+ elsif (($year%4) == 0)
+ {
+ # year mod 4 = 0 and year mod 100 != 0 => leap year
+
+ $isleapyear = 1;
+ }
+
+ $isleapyear;
+}
+
+sub get_day_of_year{
+ local($day,$month,$year) = @_;
+ local($dayofyear) = 0;
+
+ SWITCH: {
+ if ($month == 2) {$dayofyear += 31; last SWITCH; }
+ if ($month == 3) {$dayofyear += 59; last SWITCH; }
+ if ($month == 4) {$dayofyear += 90; last SWITCH; }
+ if ($month == 5) {$dayofyear += 120; last SWITCH; }
+ if ($month == 6) {$dayofyear += 151; last SWITCH; }
+ if ($month == 7) {$dayofyear += 181; last SWITCH; }
+ if ($month == 8) {$dayofyear += 212; last SWITCH; }
+ if ($month == 9) {$dayofyear += 243; last SWITCH; }
+ if ($month == 10) {$dayofyear += 273; last SWITCH; }
+ if ($month == 11) {$dayofyear += 304; last SWITCH; }
+ if ($month == 12) {$dayofyear += 334; last SWITCH; }
+ }
+
+ if ($month > 2 && &is_leap_year($year))
+ {
+ $dayofyear += 1;
+ }
+
+ $dayofyear += $day;
+ local($_)=$dayofyear;
+}
+
+sub get_day_of_week{
+ local($day,$month,$year) = @_;
+ local($dayofyear) = &get_day_of_year($day,$month,$year);
+ local($_) = (((($year-1901)%28)*1.25 + 2)%7 + $dayofyear - 1)%7 + 1;
+}
+
+sub get_day_of_weekname_english{
+ local($dow) = @_;
+
+ local(@DayOfWeek) = ('Sunday',
+ 'Monday',
+ 'Tuesday',
+ 'Wednesday',
+ 'Thursday',
+ 'Friday',
+ 'Saturday');
+
+ if ($dow <= 0 || $dow > 7)
+ {
+ &write_warnings("Invalid day of week number: $dow");
+ }
+ else
+ {
+ $DayOfWeek[$dow-1];
+ }
+}
+
+sub get_day_of_weekname_french{
+ local($dow) = @_;
+
+ local(@DayOfWeek) = ('dimanche',
+ 'lundi',
+ 'mardi',
+ 'mercredi',
+ 'jeudi',
+ 'vendredi',
+ 'samedi');
+
+ if ($dow <= 0 || $dow > 7)
+ {
+ &write_warnings("Invalid day of week number: $dow");
+ }
+ else
+ {
+ $DayOfWeek[$dow-1];
+ }
+}
+
+sub get_day_of_weekname_spanish{
+ local($dow) = @_;
+
+ local(@DayOfWeek) = ('domingo',
+ 'lunes',
+ 'martes',
+ 'mi\\\'ercoles',
+ 'jueves',
+ 'viernes',
+ 's\\\'abado');
+
+ if ($dow <= 0 || $dow > 7)
+ {
+ &write_warnings("Invalid day of week number: $dow");
+ }
+ else
+ {
+ $DayOfWeek[$dow-1];
+ }
+}
+
+sub get_day_of_weekname_portuges{
+ local($dow) = @_;
+
+ local(@DayOfWeek) = ('domingo',
+ 'segunda-feira',
+ 'ter\c{c}a-feira',
+ 'quarta-feira',
+ 'quinta-feira',
+ 'sexta-feira',
+ 'sabado');
+
+ if ($dow <= 0 || $dow > 7)
+ {
+ &write_warnings("Invalid day of week number: $dow");
+ }
+ else
+ {
+ $DayOfWeek[$dow-1];
+ }
+}
+
+sub get_day_of_weekname_german{
+ local($dow) = @_;
+
+ local(@DayOfWeek) = ('Sonntag',
+ 'Montag',
+ 'Dienstag',
+ 'Mittwoch',
+ 'Donnerstag',
+ 'Freitag',
+ 'Samstag');
+
+ if ($dow <= 0 || $dow > 7)
+ {
+ &write_warnings("Invalid day of week number: $dow");
+ }
+ else
+ {
+ $DayOfWeek[$dow-1];
+ }
+}
+
+sub get_day_of_weekname_ngerman{
+ local($dow) = @_;
+
+ local(@DayOfWeek) = ('Sonntag',
+ 'Montag',
+ 'Dienstag',
+ 'Mittwoch',
+ 'Donnerstag',
+ 'Freitag',
+ 'Samstag');
+
+ if ($dow <= 0 || $dow > 7)
+ {
+ &write_warnings("Invalid day of week number: $dow");
+ }
+ else
+ {
+ $DayOfWeek[$dow-1];
+ }
+}
+
+sub get_day_of_weekname{
+ local($dow)=@_;
+ local($dowsub);
+
+ $dowsub = "get_day_of_weekname_$default_language";
+
+ if (defined ($dowsub))
+ {
+ &$dowsub($dow);
+ }
+ else
+ {
+ &get_day_of_weekname_english($dow);
+ }
+}
+
+sub get_short_day_of_weekname_english{
+ local($dow) = @_;
+
+ local(@DayOfWeek) = ('Sun',
+ 'Mon',
+ 'Tue',
+ 'Wed',
+ 'Thu',
+ 'Fri',
+ 'Sat');
+
+ if ($dow <= 0 || $dow > 7)
+ {
+ &write_warnings("Invalid day of week number: $dow");
+ }
+ else
+ {
+ $DayOfWeek[$dow-1];
+ }
+}
+
+sub get_short_day_of_weekname_german{
+ local($dow) = @_;
+
+ local(@DayOfWeek) = ('So',
+ 'Mo',
+ 'Di',
+ 'Mi',
+ 'Do',
+ 'Fr',
+ 'Sa');
+
+ if ($dow <= 0 || $dow > 7)
+ {
+ &write_warnings("Invalid day of week number: $dow");
+ }
+ else
+ {
+ $DayOfWeek[$dow-1];
+ }
+}
+
+sub get_short_day_of_weekname_ngerman{
+ local($dow) = @_;
+
+ local(@DayOfWeek) = ('So',
+ 'Mo',
+ 'Di',
+ 'Mi',
+ 'Do',
+ 'Fr',
+ 'Sa');
+
+ if ($dow <= 0 || $dow > 7)
+ {
+ &write_warnings("Invalid day of week number: $dow");
+ }
+ else
+ {
+ $DayOfWeek[$dow-1];
+ }
+}
+
+sub get_short_day_of_weekname{
+ local($dow)=@_;
+ local($dowsub);
+
+ $dowsub = "get_short_day_of_weekname_$default_language";
+
+ if (defined ($dowsub))
+ {
+ &$dowsub($dow);
+ }
+ else
+ {
+ substr(&get_day_of_weekname($dow),0,3);
+ }
+}
+
+sub do_cmd_dayofweeknameid{
+ local($_) = @_;
+ local($dow);
+
+ $dow = &missing_braces unless ((s/$next_pair_pr_rx//o)&&($dow=$2));
+
+ join('',&get_day_of_weekname($dow), $_);
+}
+
+sub do_cmd_dayofweekname{
+ local($_) = @_;
+ local($day,$month,$year);
+ # read 1st argument
+ $day = &missing_braces unless ((s/$next_pair_pr_rx//o)&&($day=$2));
+ # read 2nd argument
+ $month = &missing_braces unless ((s/$next_pair_pr_rx//o)&&($month=$2));
+ # read 3rd argument
+ $year = &missing_braces unless ((s/$next_pair_pr_rx//o)&&($year=$2));
+
+ if ($day eq 'THEDAY' or $day eq '\THEDAY')
+ {
+ # this is a cludge to help newdateformat work
+
+ join('', '{DOW}', $_);
+ }
+ else
+ {
+ local($dow) = &get_day_of_week($day,$month,$year);
+
+ join('',&get_day_of_weekname($dow), $_);
+ }
+}
+
+sub do_cmd_shortdayofweekname{
+ local($_) = @_;
+ local($day,$month,$year);
+ # read 1st argument
+ $day = &missing_braces unless ((s/$next_pair_pr_rx//o)&&($day=$2));
+ # read 2nd argument
+ $month = &missing_braces unless ((s/$next_pair_pr_rx//o)&&($month=$2));
+ # read 3rd argument
+ $year = &missing_braces unless ((s/$next_pair_pr_rx//o)&&($year=$2));
+
+ local($dow) = &get_day_of_week($day,$month,$year);
+
+ join('',&get_short_day_of_weekname($dow), $_);
+}
+
+sub do_cmd_thisdayofweekname{
+ local($dow) = &get_day_of_week($global{DAY}, $global{MONTH}, $global{YEAR});
+
+ join('',$DayOfWeek[$dow], $_);
+}
+
+sub do_cmd_thisshortdayofweekname{
+ local($dow) = &get_day_of_week($global{DAY}, $global{MONTH}, $global{YEAR});
+
+ join('',&get_short_day_of_weekname($dow), $_);
+}
+
+$dateformat = "\\ifshowdow{DOW}\\fi {ORDINALDATE{DAY}}\\ MONTHNAME[THEMONTH], THEYEAR";
+
+sub format_date{
+ local($day,$month,$year) = @_;
+
+ local($str) = $dateformat;
+
+ $str =~ s/THEDAY/$day/g;
+ $str =~ s/THEMONTH/$month/g;
+ $str =~ s/THEYEAR/$year/g;
+
+ $str =~ s/TWODIGIT{([\d]+)}/&get_twodigit($1)/eg;
+ $str =~ s/ROMANNUMERAL{([\d]+)}/&froman($1)/eg;
+ $str =~ s/ROMANNUMERALU{([\d]+)}/uc(&froman($1))/eg;
+ $str =~ s/TRUNCATE{([\d]+)}/&get_twodigit($1%100)/eg;
+ $str =~ s/SHORTMONTHNAME\[([\d]+)\]/&get_shortmonthname($1)/eg;
+ $str =~ s/MONTHNAME\[([\d]+)\]/&get_monthname($1)/eg;
+
+ local($X) = ++$global{'max_id'};
+ local($Y) = ++$global{'max_id'};
+ local($Z) = ++$global{'max_id'};
+ $str =~ s/{DOW}/\\dayofweekname${OP}$X${CP}$day${OP}$X${CP}${OP}$Y${CP}$month${OP}$Y${CP}${OP}$Z${CP}$year${OP}$Z${CP}/g;
+ $str =~ s/{SDOW}/\\shortdayofweekname${OP}$X${CP}$day${OP}$X${CP}${OP}$Y${CP}$month${OP}$Y${CP}${OP}$Z${CP}$year${OP}$Z${CP}/g;
+
+ local($br_id) = ++$global{'max_id'};
+ $suffix = &get_ordinal_suffix($day);
+ $str =~ s/{ORDINAL{DAY}}/$day\\fmtord${OP}$br_id${CP}$suffix${OP}$br_id${CP}/g;
+
+ $br_id = ++$global{'max_id'};
+ $suffix = &get_ordinal_suffix($month);
+ $str =~ s/{ORDINAL{MONTH}}/$month\\fmtord${OP}$br_id${CP}$suffix${OP}$br_id${CP}/g;
+
+ $br_id = ++$global{'max_id'};
+ $suffix = &get_ordinal_suffix($year);
+ $str =~ s/{ORDINAL{YEAR}}/$year\\fmtord${OP}$br_id${CP}$suffix${OP}$br_id${CP}/g;
+
+ local($br_id) = ++$global{'max_id'};
+ $str =~ s/{ORDINALDATE{DAY}}/\\ordinaldate${OP}$br_id${CP}$day${OP}$br_id${CP}/g;
+
+ $str =~ s/{NNUMBERSTRING{DAY}}/&get_Numberstring($day)/eg;
+ $str =~ s/{NNUMBERSTRING{MONTH}}/&get_Numberstring($month)/eg;
+ $str =~ s/{NNUMBERSTRING{YEAR}}/&get_Numberstring($year)/eg;
+
+ $str =~ s/{OORDINALSTRING{DAY}}/&get_Ordinalstring($day)/eg;
+ $str =~ s/{OORDINALSTRING{MONTH}}/&get_Ordinalstring($month)/eg;
+ $str =~ s/{OORDINALSTRING{YEAR}}/&get_Ordinalstring($year)/eg;
+
+ $str =~ s/{CAPNUMBERSTRING{DAY}}/uc(&get_numberstring($day))/eg;
+ $str =~ s/{CAPNUMBERSTRING{MONTH}}/uc(&get_numberstring($month))/eg;
+ $str =~ s/{CAPNUMBERSTRING{YEAR}}/uc(&get_numberstring($year))/eg;
+
+ $str =~ s/{CAPORDINALSTRING{DAY}}/uc(&get_ordinalstring($day))/eg;
+ $str =~ s/{CAPORDINALSTRING{MONTH}}/uc(&get_ordinalstring($month))/eg;
+ $str =~ s/{CAPORDINALSTRING{YEAR}}/uc(&get_ordinalstring($year))/eg;
+
+ $str =~ s/{NUMBERSTRING{DAY}}/&get_numberstring($day)/eg;
+ $str =~ s/{NUMBERSTRING{MONTH}}/&get_numberstring($month)/eg;
+ $str =~ s/{NUMBERSTRING{YEAR}}/&get_numberstring($year)/eg;
+
+ $str =~ s/{ORDINALSTRING{DAY}}/&get_ordinalstring($day)/eg;
+ $str =~ s/{ORDINALSTRING{MONTH}}/&get_ordinalstring($month)/eg;
+ $str =~ s/{ORDINALSTRING{YEAR}}/&get_ordinalstring($year)/eg;
+
+ $str;
+}
+
+sub do_cmd_formatdate{
+ local($day,$month,$year);
+ # read 1st argument
+ $day = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($day=$2));
+ # read 2nd argument
+ $month = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($month=$2));
+ # read 3rd argument
+ $year = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($year=$2));
+
+ join('', &format_date($day,$month,$year), $_[0]);
+}
+
+sub do_cmd_today{
+ join('', &format_date($global{DAY},$global{MONTH},$global{YEAR}), $_[0]);
+}
+
+sub do_cmd_day{
+ join('', $global{DAY}, $_[0]);
+}
+
+sub do_cmd_month{
+ join('', $global{MONTH}, $_[0]);
+}
+
+sub do_cmd_year{
+ join('', $global{YEAR}, $_[0]);
+}
+
+sub do_cmd_showdowtrue{
+ local($_) = @_;
+ $showdow = 1;
+ $_[0];
+}
+
+sub do_cmd_showdowfalse{
+ local($_) = @_;
+ $showdow = 0;
+ $_[0];
+}
+
+# This is a bit primative, it doesn't allow for
+# nested conditionals
+
+sub do_cmd_ifshowdow{
+ local($_) = @_;
+ local($ifbit,$elsebit);
+
+ $_[0] =~s/(.*)\\fi//;
+
+ $ifbit = $1;
+
+ $ifbit =~s/(.*)\\else(.*)/\1/g;
+
+ $elsebit = $2;
+
+ if ($showdow)
+ {
+ join('', $ifbit, $_[0]);
+ }
+ else
+ {
+ join('', $elsebit, $_[0]);
+ }
+}
+
+sub do_cmd_dateseparator{
+ join('', '/', $_[0]);
+}
+
+sub do_cmd_longdate{
+ $dateformat = "\\ifshowdow{DOW}\\fi {ORDINALDATE{DAY}}\\ MONTHNAME[THEMONTH], THEYEAR";
+
+ $_[0];
+}
+
+sub do_cmd_shortdate{
+ $dateformat = "\\ifshowdow{SDOW}\\fi {ORDINALDATE{DAY}}\\ SHORTMONTHNAME[THEMONTH], THEYEAR";
+
+ $_[0];
+}
+
+sub do_cmd_yyyymmdddate{
+ $dateformat = "THEYEAR\\dateseparator TWODIGIT{THEMONTH}\\dateseparator TWODIGIT{THEDAY}";
+
+ $_[0];
+}
+
+sub do_cmd_ddmmyyyydate{
+ $dateformat = "TWODIGIT{THEDAY}\\dateseparator TWODIGIT{THEMONTH}\\dateseparator THEYEAR";
+
+ $_[0];
+}
+
+sub do_cmd_dmyyyydate{
+ $dateformat = "THEDAY\\dateseparator THEMONTH\\dateseparator THEYEAR";
+
+ $_[0];
+}
+
+sub do_cmd_dmyydate{
+ $dateformat = "THEDAY\\dateseparator THEMONTH\\dateseparator TRUNCATE{THEYEAR}";
+
+ $_[0];
+}
+
+sub do_cmd_ddmmyydate{
+ $dateformat = "TWODIGIT{THEDAY}\\dateseparator TWODIGIT{THEMONTH}\\dateseparator TRUNCATE{THEYEAR}";
+
+ $_[0];
+}
+
+sub do_cmd_textdate{
+ $dateformat = "\\ifshowdow{DOW} the\\fi {OORDINALSTRING{DAY}} of MONTHNAME[THEMONTH], {NNUMBERSTRING{YEAR}}";
+
+ $_[0];
+}
+
+sub do_cmd_usdate{
+ $dateformat = "MONTHNAME[THEMONTH] THEDAY, THEYEAR";
+
+ $_[0];
+}
+
+sub do_cmd_mmddyyyydate{
+ $dateformat = "TWODIGIT{THEMONTH}\\dateseparator TWODIGIT{THEDAY}\\dateseparator THEYEAR";
+
+ $_[0];
+}
+
+sub do_cmd_mdyyyydate{
+ $dateformat = "THEMONTH\\dateseparator THEDAY\\dateseparator THEYEAR";
+
+ $_[0];
+}
+
+sub do_cmd_mmddyydate{
+ $dateformat = "TWODIGIT{THEMONTH}\\dateseparator TWODIGIT{THEDAY}\\dateseparator TRUNCATE{THEYEAR}";
+
+ $_[0];
+}
+
+sub do_cmd_mdyydate{
+ $dateformat = "THEMONTH\\dateseparator THEDAY\\dateseparator TRUNCATE{THEYEAR}";
+
+ $_[0];
+}
+
+sub do_cmd_THEYEAR{
+ join('', 'THEYEAR', $_[0]);
+}
+
+sub do_cmd_THEMONTH{
+ join('', 'THEMONTH', $_[0]);
+}
+
+sub do_cmd_THEDAY{
+ join('', 'THEDAY', $_[0]);
+}
+
+sub do_cmd_newdateformat{
+ local($_) = @_;
+ local($cmd,$cmdbody);
+ local($ntmp);
+
+ $cmd = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($cmd=$2));
+ $cmdbody = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($cmdbody=$2));
+
+ $ntmp = 'sub do_cmd_' . $cmd . '{';
+ $ntmp .= '$dateformat = "' . $cmdbody . '";';
+
+ $ntmp .= '$_[0];';
+ $ntmp .= '}';
+
+ eval($ntmp);
+
+ join('', $_[0]);
+}
+
+sub do_cmd_pdfdate{
+ local($_) = @_;
+
+ local($timestring) = sprintf "%d%02d%02d%02d%02d%02d",
+ $global{YEAR}, $global{MONTH}, $global{DAY}, $global{HOUR}, $global{MINUTE}, $global{SECONDS};
+
+ join('', $timestring, $_[0]);
+}
+
+ %userdates = ();
+
+sub do_cmd_newdate{
+ local($_)=@_;
+ local($datename,$mon,$day,$year);
+
+ $datename = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($datename=$2));
+
+ $day = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($day=$2));
+
+ $mon = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($mon =$2));
+
+ $year = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($year =$2));
+
+
+ $userdates{$datename}{day} = $day;
+ $userdates{$datename}{month} = $mon;
+ $userdates{$datename}{year} = $year;
+
+ join('', $_[0]);
+}
+
+sub do_cmd_displaydate{
+ local($_)=@_;
+ local($datename);
+ local($cmd,$br_id);
+
+ $datename = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($datename=$2));
+
+ $br_id = ++$global{'max_id'};
+ $cmd = "$OP$br_id$CP" . $userdates{$datename}{day} ."$OP$br_id$CP";
+ $br_id = ++$global{'max_id'};
+ $cmd .= "$OP$br_id$CP" . $userdates{$datename}{month} ."$OP$br_id$CP";
+ $br_id = ++$global{'max_id'};
+ $cmd .= "$OP$br_id$CP" . $userdates{$datename}{year} ."$OP$br_id$CP";
+
+ join('', '\formatdate', $cmd, $_[0]);
+}
+
+sub do_cmd_getdateyear{
+ local($_)=@_;
+ local($datename);
+
+ $datename = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($datename=$2));
+
+ join('', $userdates{$datename}{year}, $_[0]);
+}
+
+sub do_cmd_getdatemonth{
+ local($_)=@_;
+ local($datename);
+
+ $datename = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($datename=$2));
+
+ join('', $userdates{$datename}{month}, $_[0]);
+}
+
+sub do_cmd_getdateday{
+ local($_)=@_;
+ local($datename);
+
+ $datename = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($datename=$2));
+
+ join('', $userdates{$datename}{day}, $_[0]);
+}
+
+# time commands
+
+sub do_cmd_timeseparator{
+ join('', ':', $_[0]);
+}
+
+sub do_cmd_noon{
+ local($_) = @_;
+
+ join('', "Noon", $_[0]);
+}
+
+sub do_cmd_midnight{
+ local($_) = @_;
+
+ join('', "Midnight", $_[0]);
+}
+
+sub do_cmd_amname{
+ local($_) = @_;
+
+ join('', "am", $_[0]);
+}
+
+sub do_cmd_pmname{
+ local($_) = @_;
+
+ join('', "pm", $_[0]);
+}
+
+sub do_cmd_amstring{
+ local($_) = @_;
+
+ join('', "in the morning", $_[0]);
+}
+
+sub do_cmd_pmstring{
+ local($_) = @_;
+
+ join('', "in the afternoon", $_[0]);
+}
+
+sub do_cmd_halfpast{
+ local($_) = @_;
+
+ join('', "Half past", $_[0]);
+}
+
+sub do_cmd_quarterpast{
+ local($_) = @_;
+
+ join('', "Quarter past", $_[0]);
+}
+
+sub do_cmd_quarterto{
+ local($_) = @_;
+
+ join('', "Quarter to", $_[0]);
+}
+
+sub do_cmd_oclockstring{
+ local($_) = @_;
+
+ join('', "O'Clock", $_[0]);
+}
+
+sub do_cmd_amorpmname{
+ if ($global{HOUR}>12)
+ {
+ &do_cmd_pmname;
+ }
+ else
+ {
+ &do_cmd_amname;
+ }
+}
+
+sub do_cmd_amorpmstring{
+ if ($global{HOUR}>12)
+ {
+ &do_cmd_pmstring;
+ }
+ else
+ {
+ &do_cmd_amstring;
+ }
+}
+
+sub set_timeformat_hhmmsstime{
+ $timeformat = "TWODIGIT{THEHOUR}\\timeseparator TWODIGIT{THEMINUTE}"
+ . "\\timeseparator TWODIGIT{THESECOND}";
+}
+
+sub set_timeformat_xxivtime{
+ $timeformat = "TWODIGIT{THEHOUR}\\timeseparator TWODIGIT{THEMINUTE}";
+}
+
+sub format_xxivtime{
+ local($hour,$min)=@_;
+
+ sprintf "%02d\\timeseparator %02d", $hour, $min;
+}
+
+sub do_cmd_xxivtime{
+
+ join('', &format_xxivtime($global{HOUR},$global{MINUTE}), $_[0]);
+}
+
+sub format_ampmtime{
+ local($hour,$min)=@_;
+ local($timestring);
+ local($hourxii) = ($hour == 12 ? 12 : ($hour)%12);
+
+ $timestring = sprintf "%d\\timeseparator %02d", $hourxii, $min;
+
+ $timestring .= ($hour < 12 ?
+ "\\amname " : (($hour eq 12 and $min eq 0) ? " \\noon" :"\\pmname "));
+
+ $timestring
+}
+
+sub do_cmd_ampmtime{
+ join('', &format_ampmtime($global{HOUR},$global{MINUTE}), $_[0]);
+}
+
+sub do_cmd_timeformat_at_ampmtime{
+ local($hour,$min,$sec);
+ # read 1st argument
+ $hour = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($day=$2));
+ # read 2nd argument
+ $min = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($month=$2));
+ # read 3rd argument
+ $sec = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($year=$2));
+
+ join('', &format_ampmtime($hour, $min), $_[0]);
+}
+
+sub do_cmd_timeformatATampmtime{&do_cmd_timeformat_at_ampmtime}
+
+sub set_timeformat_ampmtime{
+ $timeformat = "TWODIGIT{THEHOURXII}\\timeseparator TWODIGIT{THEMINUTE}AMORPMNAME";
+}
+
+sub format_oclock{
+ local($hour,$min)=@_;
+
+ local($hourxii) = ($hour == 12 ? 12 : ($hour)%12);
+ local($tohour) = ($hour == 11 ? 12 :($hour+1)%12);
+ local($tominute) = ($min == 0? 0 : 60 - $min);
+
+ local($timestring);
+
+ if ($hour == 0 && $min == 0)
+ {
+ $timestring = "\\midnight";
+ }
+ elsif ($hour == 12 && $min == 0)
+ {
+ $timestring = "\\noon";
+ }
+ else
+ {
+ if ($min == 0)
+ {
+ $timestring = &get_Numberstring($hourxii) . " \\oclockstring";
+ }
+ elsif ($min == 15)
+ {
+ $timestring = "\\quarterpast\\ " . &get_Numberstring($hourxii);
+ }
+ elsif ($min == 30)
+ {
+ $timestring = "\\halfpast\\ " . &get_Numberstring($hourxii);
+ }
+ elsif ($min == 45)
+ {
+ $timestring = "\\quarterto\\ " . &get_Numberstring($tohour);
+ }
+ elsif ($min < 30)
+ {
+ $timestring = get_Numberstring($min);
+
+ $timestring .= ($min == 1 ? " minute" : " minutes") . " past ";
+
+ $timestring .= get_Numberstring($hourxii);
+ }
+ else
+ {
+ $timestring = get_Numberstring($tominute);
+
+ $timestring .= ($min == 1 ? " minute" : " minutes") . " to ";
+
+ $timestring .= get_Numberstring($tohour);
+ }
+
+ $timestring .= ($hour < 12 ? " \\amstring" : " \\pmstring");
+ }
+
+ $timestring
+}
+
+sub do_cmd_oclock{
+ local($_) = @_;
+
+ join('', &format_oclock($global{HOUR},$global{MINUTE}), $_[0]);
+}
+
+sub do_cmd_timeformat_at_oclock{
+ local($hour,$min,$sec);
+ # read 1st argument
+ $hour = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($day=$2));
+ # read 2nd argument
+ $min = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($month=$2));
+ # read 3rd argument
+ $sec = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($year=$2));
+
+ join('', &format_oclock($hour, $min), $_[0]);
+}
+
+sub do_cmd_timeformatAToclock{&do_cmd_timeformat_at_oclock}
+
+sub set_timeformat_oclock{
+ $timeformat="OCLOCK";
+}
+
+sub do_cmd_formattime{
+ local($_) = @_;
+ local($hour,$min,$sec);
+
+ # read 1st argument
+ $hour = &missing_braces unless
+ (s/$next_pair_pr_rx/$hour=$2;''/eo);
+ # read 2nd argument
+ $min = &missing_braces unless
+ (s/$next_pair_pr_rx/$min=$2;''/eo);
+ # read 3rd argument
+ $sec = &missing_braces unless
+ (s/$next_pair_pr_rx/$sec=$2;''/eo);
+
+ join('', &format_time($hour,$min,$sec), $_);
+}
+
+sub do_cmd_currenttime{
+ join('', &format_time($global{HOUR},$global{MINUTE},$global{SECONDS}), $_[0]);
+}
+
+sub format_time{
+ local($hour,$min,$sec) = @_;
+
+ local($str) = $timeformat;
+
+ local($hourxii) = ($hour == 12 ? 12 : ($hour)%12);
+ local($tohour) = ($hour == 11 ? 12 :($hour+1)%12);
+ local($tominute) = ($min == 0? 0 : 60 - $min);
+ local($amorpmname) = ($hour < 12 ? '\amname' :
+ ($hour == 12 ? ' \noon' : '\pmname'));
+
+ $str =~ s/THEHOURXII/$hourxii/g;
+ $str =~ s/THEHOUR/$hour/g;
+ $str =~ s/THEMINUTE/$min/g;
+ $str =~ s/THESECOND/$sec/g;
+ $str =~ s/THETOHOUR/$tohour/g;
+ $str =~ s/THETOMINUTE/$tominute/g;
+ $str =~ s/AMORPMNAME/$amorpmname/g;
+
+ $str =~ s/TWODIGIT{([\d]+)}/&get_twodigit($1)/eg;
+ $str =~ s/ROMANNUMERAL{([\d]+)}/&froman($1)/eg;
+ $str =~ s/ROMANNUMERALU{([\d]+)}/uc(&froman($1))/eg;
+
+ $str =~ s/OCLOCK/&format_oclock($hour,$min)/eg;
+
+ $str;
+}
+
+sub do_cmd_settimeformat{
+ local($_) = @_;
+ local($cmd);
+
+ $cmd = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($cmd=$2));
+
+ eval('&set_timeformat_'.$cmd);
+
+ $_[0];
+}
+
+sub do_cmd_newtimeformat{
+ local($_) = @_;
+ local($cmd,$cmdbody);
+
+ $cmd = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($cmd=$2));
+ $cmdbody = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($cmdbody=$2));
+
+ $tmp = 'sub do_cmd_'.$cmd.'{&do_cmd_timeformat_at_'.$cmd.';}';
+ eval($tmp);
+
+ $tmp = 'sub set_timeformat_'.$cmd.'{';
+ $tmp .= '$timeformat = "'.$cmdbody .'";';
+ $tmp .= '}';
+ eval($tmp);
+
+ $tmp = 'sub do_cmd_timeformat_at_'.$cmd.'{';
+ $tmp .= 'local($_)=@_;';
+ $tmp .= 'local($hour,$min,$sec);';
+ $tmp .= '$hour=&missing_braces unless ';
+ $tmp .= '((s/$next_pair_pr_rx//o)&&($hour=$2));';
+ $tmp .= '$min=&missing_braces unless ';
+ $tmp .= '((s/$next_pair_pr_rx//o)&&($min=$2));';
+ $tmp .= '$sec=&missing_braces unless ';
+ $tmp .= '((s/$next_pair_pr_rx//o)&&($sec=$2));';
+ $tmp .= '&set_timeformat_'.$cmd.';';
+ $tmp .= '&format_time($hour, $min, $sec).$_';
+ $tmp .= "}";
+
+ eval($tmp);
+
+ join('', $_[0]);
+}
+
+sub do_cmd_THEHOUR{
+ local($_) = @_;
+
+ join('', $global{HOUR}, $_[0]);
+}
+
+sub do_cmd_THEMINUTE{
+ local($_) = @_;
+
+ join('', $global{MINUTE}, $_[0]);
+}
+
+sub do_cmd_THESECOND{
+ local($_) = @_;
+
+ join('', $global{SECONDS}, $_[0]);
+}
+
+sub do_cmd_THETOHOUR{
+ local($_) = @_;
+
+ join('', $global{TOHOUR}, $_[0]);
+}
+
+sub do_cmd_THETOMINUTE{
+ local($_) = @_;
+
+ join('', $global{TOMINUTE}, $_[0]);
+}
+
+sub do_cmd_THEHOURXII{
+ local($_) = @_;
+
+ join('', $global{HOURXII}, $_[0]);
+}
+
+1;
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</datetime.perl>
+% \end{macrocode}
+%\fi
+%\Finale
+\endinput
diff --git a/obsolete/macros/latex/contrib/datetime/datetime.ins b/obsolete/macros/latex/contrib/datetime/datetime.ins
new file mode 100644
index 0000000000..e1bf4c301b
--- /dev/null
+++ b/obsolete/macros/latex/contrib/datetime/datetime.ins
@@ -0,0 +1,136 @@
+% datetime.ins generated using makedtx version 1.1 2015/3/20 16:54
+\input docstrip
+
+\preamble
+
+ datetime.dtx
+ Copyright 2015 Nicola Talbot
+
+ This work may be distributed and/or modified under the
+ conditions of the LaTeX Project Public License, either version 1.3
+ of this license of (at your option) any later version.
+ The latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+ and version 1.3 or later is part of all distributions of LaTeX
+ version 2005/12/01 or later.
+
+ This work has the LPPL maintenance status `maintained'.
+
+ The Current Maintainer of this work is Nicola Talbot.
+
+ This work consists of the files datetime.dtx and datetime.ins and the derived files datetime-defaults.sty, datetime.sty, dt-american.def, dt-australian.def, dt-austrian.def, dt-bahasa.def, dt-basque.def, dt-breton.def, dt-british.def, dt-bulgarian.def, dt-canadian.def, dt-catalan.def, dt-croatian.def, dt-czech.def, dt-danish.def, dt-dutch.def, dt-esperanto.def, dt-estonian.def, dt-finnish.def, dt-french.def, dt-galician.def, dt-german.def, dt-greek.def, dt-hebrew.def, dt-icelandic.def, dt-irish.def, dt-italian.def, dt-latin.def, dt-lsorbian.def, dt-magyar.def, dt-naustrian.def, dt-newzealand.def, dt-ngerman.def, dt-norsk.def, dt-polish.def, dt-portuges.def, dt-romanian.def, dt-russian.def, dt-samin.def, dt-scottish.def, dt-serbian.def, dt-slovak.def, dt-slovene.def, dt-spanish.def, dt-swedish.def, dt-turkish.def, dt-UKenglish.def, dt-ukraineb.def, dt-USenglish.def, dt-usorbian.def, dt-welsh.def, dt-lang.tex, dt-sampl.tex, datetime.perl.
+
+\endpreamble
+
+\askforoverwritefalse
+
+\generate{\file{datetime-defaults.sty}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{datetime-defaults.sty,package}}
+\file{datetime.sty}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{datetime.sty,package}}
+\file{dt-american.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-american.def,package}}
+\file{dt-australian.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-australian.def,package}}
+\file{dt-austrian.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-austrian.def,package}}
+\file{dt-bahasa.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-bahasa.def,package}}
+\file{dt-basque.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-basque.def,package}}
+\file{dt-breton.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-breton.def,package}}
+\file{dt-british.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-british.def,package}}
+\file{dt-bulgarian.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-bulgarian.def,package}}
+\file{dt-canadian.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-canadian.def,package}}
+\file{dt-catalan.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-catalan.def,package}}
+\file{dt-croatian.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-croatian.def,package}}
+\file{dt-czech.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-czech.def,package}}
+\file{dt-danish.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-danish.def,package}}
+\file{dt-dutch.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-dutch.def,package}}
+\file{dt-esperanto.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-esperanto.def,package}}
+\file{dt-estonian.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-estonian.def,package}}
+\file{dt-finnish.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-finnish.def,package}}
+\file{dt-french.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-french.def,package}}
+\file{dt-galician.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-galician.def,package}}
+\file{dt-german.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-german.def,package}}
+\file{dt-greek.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-greek.def,package}}
+\file{dt-hebrew.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-hebrew.def,package}}
+\file{dt-icelandic.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-icelandic.def,package}}
+\file{dt-irish.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-irish.def,package}}
+\file{dt-italian.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-italian.def,package}}
+\file{dt-latin.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-latin.def,package}}
+\file{dt-lsorbian.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-lsorbian.def,package}}
+\file{dt-magyar.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-magyar.def,package}}
+\file{dt-naustrian.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-naustrian.def,package}}
+\file{dt-newzealand.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-newzealand.def,package}}
+\file{dt-ngerman.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-ngerman.def,package}}
+\file{dt-norsk.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-norsk.def,package}}
+\file{dt-polish.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-polish.def,package}}
+\file{dt-portuges.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-portuges.def,package}}
+\file{dt-romanian.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-romanian.def,package}}
+\file{dt-russian.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-russian.def,package}}
+\file{dt-samin.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-samin.def,package}}
+\file{dt-scottish.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-scottish.def,package}}
+\file{dt-serbian.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-serbian.def,package}}
+\file{dt-slovak.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-slovak.def,package}}
+\file{dt-slovene.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-slovene.def,package}}
+\file{dt-spanish.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-spanish.def,package}}
+\file{dt-swedish.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-swedish.def,package}}
+\file{dt-turkish.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-turkish.def,package}}
+\file{dt-UKenglish.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-UKenglish.def,package}}
+\file{dt-ukraineb.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-ukraineb.def,package}}
+\file{dt-USenglish.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-USenglish.def,package}}
+\file{dt-usorbian.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-usorbian.def,package}}
+\file{dt-welsh.def}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-welsh.def,package}}
+\file{dt-lang.tex}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-lang.tex,package}}
+\file{dt-sampl.tex}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{datetime.dtx}{dt-sampl.tex,package}}
+\file{datetime.perl}{\nopreamble\nopostamble\from{datetime.dtx}{datetime.perl}}
+}
+
+\endbatchfile
diff --git a/obsolete/macros/latex/contrib/datetime/datetime.pdf b/obsolete/macros/latex/contrib/datetime/datetime.pdf
new file mode 100644
index 0000000000..6aa4f79ab2
--- /dev/null
+++ b/obsolete/macros/latex/contrib/datetime/datetime.pdf
Binary files differ
diff --git a/obsolete/macros/latex/contrib/datetime/samples/dt-lang.pdf b/obsolete/macros/latex/contrib/datetime/samples/dt-lang.pdf
new file mode 100644
index 0000000000..47c9f842b4
--- /dev/null
+++ b/obsolete/macros/latex/contrib/datetime/samples/dt-lang.pdf
Binary files differ
diff --git a/obsolete/macros/latex/contrib/datetime/samples/dt-lang.tex b/obsolete/macros/latex/contrib/datetime/samples/dt-lang.tex
new file mode 100644
index 0000000000..f4ec0da7c5
--- /dev/null
+++ b/obsolete/macros/latex/contrib/datetime/samples/dt-lang.tex
@@ -0,0 +1,64 @@
+%%
+%% This is file `dt-lang.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% datetime.dtx (with options: `dt-lang.tex,package')
+%%
+%% datetime.dtx
+%% Copyright 2015 Nicola Talbot
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license of (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Nicola Talbot.
+%%
+%% This work consists of the files datetime.dtx and datetime.ins and the derived files datetime-defaults.sty, datetime.sty, dt-american.def, dt-australian.def, dt-austrian.def, dt-bahasa.def, dt-basque.def, dt-breton.def, dt-british.def, dt-bulgarian.def, dt-canadian.def, dt-catalan.def, dt-croatian.def, dt-czech.def, dt-danish.def, dt-dutch.def, dt-esperanto.def, dt-estonian.def, dt-finnish.def, dt-french.def, dt-galician.def, dt-german.def, dt-greek.def, dt-hebrew.def, dt-icelandic.def, dt-irish.def, dt-italian.def, dt-latin.def, dt-lsorbian.def, dt-magyar.def, dt-naustrian.def, dt-newzealand.def, dt-ngerman.def, dt-norsk.def, dt-polish.def, dt-portuges.def, dt-romanian.def, dt-russian.def, dt-samin.def, dt-scottish.def, dt-serbian.def, dt-slovak.def, dt-slovene.def, dt-spanish.def, dt-swedish.def, dt-turkish.def, dt-UKenglish.def, dt-ukraineb.def, dt-USenglish.def, dt-usorbian.def, dt-welsh.def, dt-lang.tex, dt-sampl.tex, datetime.perl.
+%%
+%% \CharacterTable
+%% {Upper-case \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
+%% Lower-case \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
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+\documentclass{article}
+
+\usepackage[T1]{fontenc}
+\usepackage[french,spanish,english]{babel}
+\usepackage{datetime} % Date will be language-dependent
+
+\begin{document}
+English: \today
+
+\selectlanguage{french}
+French: \today
+
+\selectlanguage{spanish}
+Spanish: \today
+
+\begin{otherlanguage}{french}
+French: \today
+\end{otherlanguage}
+
+\today
+\end{document}
+\endinput
+%%
+%% End of file `dt-lang.tex'.
diff --git a/obsolete/macros/latex/contrib/datetime/samples/dt-sampl.pdf b/obsolete/macros/latex/contrib/datetime/samples/dt-sampl.pdf
new file mode 100644
index 0000000000..d6e454a970
--- /dev/null
+++ b/obsolete/macros/latex/contrib/datetime/samples/dt-sampl.pdf
Binary files differ
diff --git a/obsolete/macros/latex/contrib/datetime/samples/dt-sampl.tex b/obsolete/macros/latex/contrib/datetime/samples/dt-sampl.tex
new file mode 100644
index 0000000000..cd2b8ab08d
--- /dev/null
+++ b/obsolete/macros/latex/contrib/datetime/samples/dt-sampl.tex
@@ -0,0 +1,172 @@
+%%
+%% This is file `dt-sampl.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% datetime.dtx (with options: `dt-sampl.tex,package')
+%%
+%% datetime.dtx
+%% Copyright 2015 Nicola Talbot
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license of (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Nicola Talbot.
+%%
+%% This work consists of the files datetime.dtx and datetime.ins and the derived files datetime-defaults.sty, datetime.sty, dt-american.def, dt-australian.def, dt-austrian.def, dt-bahasa.def, dt-basque.def, dt-breton.def, dt-british.def, dt-bulgarian.def, dt-canadian.def, dt-catalan.def, dt-croatian.def, dt-czech.def, dt-danish.def, dt-dutch.def, dt-esperanto.def, dt-estonian.def, dt-finnish.def, dt-french.def, dt-galician.def, dt-german.def, dt-greek.def, dt-hebrew.def, dt-icelandic.def, dt-irish.def, dt-italian.def, dt-latin.def, dt-lsorbian.def, dt-magyar.def, dt-naustrian.def, dt-newzealand.def, dt-ngerman.def, dt-norsk.def, dt-polish.def, dt-portuges.def, dt-romanian.def, dt-russian.def, dt-samin.def, dt-scottish.def, dt-serbian.def, dt-slovak.def, dt-slovene.def, dt-spanish.def, dt-swedish.def, dt-turkish.def, dt-UKenglish.def, dt-ukraineb.def, dt-USenglish.def, dt-usorbian.def, dt-welsh.def, dt-lang.tex, dt-sampl.tex, datetime.perl.
+%%
+%% \CharacterTable
+%% {Upper-case \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
+%% Lower-case \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
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+\documentclass[a4paper]{article}
+
+\usepackage{ifpdf}
+\usepackage{datetime}
+
+\ifpdf
+\pdfinfo{
+ /CreationDate (D:20040501215500Z)
+ /ModDate (D:\pdfcreationdate)
+}
+\fi
+
+\padzeroes[8]
+
+\newdateformat{dashdate}{\twodigit{\THEDAY}-\twodigit{\THEMONTH}-\THEYEAR}
+\newdateformat{usvardate}{\monthname[\THEMONTH]~\ordinaldate{\THEDAY}, \THEYEAR}
+\newdateformat{mydate}{\ifshowdow \dayofweekname{\THEDAY}{\THEMONTH}{\THEYEAR} \fi
+\THEDAY\ \monthname[\THEMONTH], \THEYEAR}
+\newdateformat{yyyymmdd}{\THEYEAR\twodigit{\THEMONTH}\twodigit{\THEDAY}}
+\newdateformat{ukvardate}{\THEDAY\ \monthname[\THEMONTH]\ \THEYEAR}
+
+\newtimeformat{dottime}{\twodigit{\THEHOUR}.\twodigit{\THEMINUTE}}
+\newtimeformat{dashtime12}{\THEHOURXII-\twodigit{\THEMINUTE}}
+\newtimeformat{hhmm}{\twodigit{\THEHOUR}\twodigit{\THEMINUTE}}
+
+\begin{document}
+
+\section{Date Formats}
+Default: \today.
+
+\begin{tabular}{ll}
+\bfseries Declaration & \bfseries\verb|\today|\\
+\verb|\longdate| & \longdate\today\\
+\verb|\shortdate| & \shortdate\today\\
+\verb|\yyyymmdddate| & \yyyymmdddate\today\\
+\verb|\ddmmyyyydate| & \ddmmyyyydate\today\\
+\verb|\dmyyyydate| & \dmyyyydate\today\\
+\verb|\ddmmyydate| & \ddmmyydate\today\\
+\verb|\dmyydate| & \dmyydate\today\\
+\verb|\textdate| & \textdate\today\\
+\verb|\usdate| & \usdate\today\\
+\verb|\mmddyyyydate| & \mmddyyyydate\today\\
+\verb|\mdyyyydate| & \mdyyyydate\today\\
+\verb|\mmddyydate| & \mmddyydate\today\\
+\verb|\mdyydate| & \mdyydate\today
+\end{tabular}
+
+\section{Time Formats}
+Default: \currenttime.
+
+\begin{tabular}{@{\ttfamily}ll}
+\bfseries\rmfamily Format & \bfseries \verb|\currenttime|\\
+hhmmsstime & \settimeformat{hhmmsstime}\currenttime\\
+xxivtime & \settimeformat{xxivtime}\currenttime\\
+ampmtime & \settimeformat{ampmtime}\currenttime\\
+oclock & \settimeformat{oclock}\currenttime
+\end{tabular}
+
+\section{Specific Date:}
+
+\begin{tabular}{ll}
+\bfseries Format & \bfseries \verb|\formatdate{1}{3}{2009}|\\
+\verb|\longdate| & \longdate\formatdate{1}{3}{2000}\\
+\verb|\shortdate| & \shortdate\formatdate{1}{3}{2000}\\
+\verb|\yyyymmdddate| & \yyyymmdddate\formatdate{1}{3}{2000}\\
+\verb|\ddmmyyyydate| & \ddmmyyyydate\formatdate{1}{3}{2000}\\
+\verb|\dmyyyydate| & \dmyyyydate\formatdate{1}{3}{2000}\\
+\verb|\ddmmyydate| & \ddmmyydate\formatdate{1}{3}{2000}\\
+\verb|\dmyydate| & \dmyydate\formatdate{1}{3}{2000}\\
+\verb|\textdate| & \textdate\formatdate{1}{3}{2000}\\
+\verb|\usdate| & \usdate\formatdate{1}{3}{2000}\\
+\verb|\mmddyyyydate| & \mmddyyyydate\formatdate{1}{3}{2000}\\
+\verb|\mdyyyydate| & \mdyyyydate\formatdate{1}{3}{2000}\\
+\verb|\mmddyydate| & \mmddyydate\formatdate{1}{3}{2000}\\
+\verb|\mdyydate| & \mdyydate\formatdate{1}{3}{2000}
+\end{tabular}
+
+\section{Specific Time}
+
+\begin{tabular}{@{\ttfamily}ll}
+\bfseries\rmfamily Format & \bfseries \verb|\formattime{15}{45}{00}|\\
+hhmmsstime & \settimeformat{hhmmsstime}\formattime{15}{45}{00}\\
+xxivtime & \settimeformat{xxivtime}\formattime{15}{45}{00}\\
+ampmtime & \settimeformat{ampmtime}\formattime{15}{45}{00}\\
+oclock & \settimeformat{oclock}\formattime{15}{45}{00}
+\end{tabular}
+
+\vskip\baselineskip\noindent
+\begin{tabular}{@{\ttfamily}ll}
+\bfseries\rmfamily Format & \bfseries \verb|\formattime{0}{0}{0}|\\
+hhmmsstime & \settimeformat{hhmmsstime}\formattime{0}{0}{0}\\
+xxivtime & \settimeformat{xxivtime}\formattime{0}{0}{0}\\
+ampmtime & \settimeformat{ampmtime}\formattime{0}{0}{0}\\
+oclock & \settimeformat{oclock}\formattime{0}{0}{0}
+\end{tabular}
+
+\vskip\baselineskip\noindent
+\begin{tabular}{@{\ttfamily}ll}
+\bfseries\rmfamily Format & \bfseries \verb|\formattime{12}{0}{0}|\\
+hhmmsstime & \settimeformat{hhmmsstime}\formattime{12}{0}{0}\\
+xxivtime & \settimeformat{xxivtime}\formattime{12}{0}{0}\\
+ampmtime & \settimeformat{ampmtime}\formattime{12}{0}{0}\\
+oclock & \settimeformat{oclock}\formattime{12}{0}{0}
+\end{tabular}
+
+\section{Defining New Dates}
+
+\begin{tabular}{ll}
+\verb|\dashdate| & \dashdate\today\\
+\verb|\usvardate| & \usvardate\today\\
+\verb|\ukvardate| & \ukvardate\today\\
+\verb|\mydate| & \mydate\today\\
+\verb|\yyyymmdd| & \yyyymmdd\today\\
+\verb|\dashdate| & \dashdate\formatdate{8}{3}{2000}\\
+\verb|\usvardate| & \usvardate\formatdate{8}{3}{2000}\\
+\verb|\mydate| & \mydate\formatdate{8}{3}{2000}\\
+\verb|\yyyymmdd| & \yyyymmdd\formatdate{8}{3}{2000}
+\end{tabular}
+
+\section{Defining New Times}
+
+\begin{tabular}{@{\ttfamily}ll}
+\bfseries\rmfamily Format & \bfseries \verb|\currenttime|\\
+dottime & \settimeformat{dottime}\currenttime\\
+dashtime12 & \settimeformat{dashtime12}\currenttime\\
+hhmm & \settimeformat{hhmm}\currenttime
+\end{tabular}
+
+\end{document}
+\endinput
+%%
+%% End of file `dt-sampl.tex'.
diff --git a/obsolete/macros/latex/contrib/fixocgx/ChangeLog b/obsolete/macros/latex/contrib/fixocgx/ChangeLog
new file mode 100644
index 0000000000..e4d34991e5
--- /dev/null
+++ b/obsolete/macros/latex/contrib/fixocgx/ChangeLog
@@ -0,0 +1,28 @@
+2015-06-15
+ * v0.5
+ * Fix: OCG ID lists with leading/trailings spaces passed as
+ argument to the OCG visibilty setting commands caused an error; the same
+ with empty arguments.
+ Improved behaviour of visibilty setting links that are themselves
+ part of OCGs.
+
+2015-03-16
+ * v0.4
+ * Fix: no more PS specials from `ocg-p.sty' in dvipdfmx mode
+
+2015-03-11
+ * v0.3
+ * New: ocg environment option `viewocg=always|never|ifvisible' added;
+ macro \fxocg@insert@OC allows package authors to insert
+ /OC <<OCMD with currently open OCGs>> entries into (suitable) pdf objects,
+ i. e. XObjects & Annotations, to make them PDF-layer aware.
+ * Fix: dead tikz-generated ocg buttons (from tikzlibraryocgx.code.tex) with
+ dvipdfmx/xelatex
+
+2015-01-26
+ * v0.2
+ * Fix: It was not possible to reference an OCG before defining it.
+
+2015-01-23
+ * v0.1
+ * New: initial release
diff --git a/obsolete/macros/latex/contrib/fixocgx/README b/obsolete/macros/latex/contrib/fixocgx/README
new file mode 100644
index 0000000000..d072c3d31a
--- /dev/null
+++ b/obsolete/macros/latex/contrib/fixocgx/README
@@ -0,0 +1,43 @@
+==================================
+ The `fixocgx' LaTeX Package
+
+ Version 0.5 [2015/06/15]
+
+ (C) 2015--\today Alexander Grahn
+==================================
+
+Extends the usability of the OCGX package by Paul Gaborit to all known
+engines including:
+
+ * LaTeX --> dvips --> ps2pdf/Distiller
+ * (Xe)LaTeX --> (x)dvipdfmx
+
+ (PdfLaTeX and LuaLaTeX are already supported by `ocgx'.)
+
+To enable dvipdfmx support, pass `dvipdfmx' globally as a class option.
+
+Also, it ensures compatibility with the `media9' and `animate' packages.
+
+Must be loaded /after/ one of
+
+ \usepackage{ocgx}
+or
+ \usetikzlibrary{ocgx}
+
+For details about the usage, read the `ocgx' package manual.
+
+The `ocg' environment is documented in the `ocg-p' package manual. No
+attempt was made to fix the remaining commands from the `ocg-p' package
+as these are mostly substituted by the commands from `ocgx'.
+
+
+ * * *
+
+
+This material is subject to the LaTeX Project Public License version 1.3.
+
+See
+
+ http://mirrors.ctan.org/help/Catalogue/licenses.lppl.html
+
+for the details of that license.
diff --git a/obsolete/macros/latex/contrib/fixocgx/fixocgx.sty b/obsolete/macros/latex/contrib/fixocgx/fixocgx.sty
new file mode 100644
index 0000000000..b40059ee68
--- /dev/null
+++ b/obsolete/macros/latex/contrib/fixocgx/fixocgx.sty
@@ -0,0 +1,281 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% fixocgx.sty
+%
+% Copyright 2015--\today, Alexander Grahn
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This package extends the usability of `ocgx' to all known engines including
+% latex+dvips+ps2pdf, xelatex and latex+dvipdfmx.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://mirrors.ctan.org/help/Catalogue/licenses.lppl.html
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is A. Grahn.
+
+\RequirePackage{xparse}
+\RequirePackage{atenddvi}
+\RequirePackage{ifpdf}
+
+%prevent ocg-p from inserting PS specials in dvipdfmx mode
+\ifpdf\else
+ \DeclareOption{dvipdfmx}{\@ocgp@ifpsfalse}
+ \ProcessOptions\relax
+\fi
+
+\@ifpackageloaded{ocgx}{}{
+ \PackageError{fixocgx}{%
+ Package `fixocgx' must be loaded /after/ one of\MessageBreak
+ \space\space\string\usepackage{ocgx}\MessageBreak
+ or\MessageBreak
+ \space\space\string\usetikzlibrary{ocgx}
+ }{}%
+}
+
+\AtBeginDocument{
+ \@ifpackageloaded{media9}{}{\RequirePackage{media9}}
+ \@ifpackagelater{media9}{2015/01/21}{}{
+ \PackageError{fixocgx}{%
+ Requires package `media9' v0.49 [2015/01/21] or\MessageBreak
+ newer, but only v\g@mix@version@tl\space[\g@mix@date@tl] is available
+ }{}%
+ }
+}
+
+\ProvidesExplPackage{fixocgx}{2015/06/15}{0.5}
+{ports `ocgx' functionality to dvips+ps2pdf, xelatex and dvipdfmx}
+
+%re-implement ocg-p's `ocg' environment
+\DeclareDocumentEnvironment{ocg}{O{}mmm}{
+ \bool_if:NT\g_fxocg_nestedB_bool{\tl_gput_right:Nx\@ocgbase@ocgorder{~[}}
+ \bool_gset_true:N\g_fxocg_nestedB_bool
+ \bool_gset_false:N\g_fxocg_nestedE_bool
+ \group_begin:
+ \tl_if_exist:cTF{fxocg@#3}{ %re-open existing layer
+ \tl_set:Nx\l_tempa_tl{[ocgp]{ocg}{\use:c{fxocg@#3.opts},#1}}
+ \exp_after:wN\setkeys\l_tempa_tl
+ \int_compare:nT{\@ocgp@listno=\c_zero}{
+ \tl_gput_right:Nx\@ocgbase@ocgorder{~\use:c{fxocg@#3}}
+ }
+ }{
+ \tl_gset:cn{fxocg@#3.opts}{#1}
+ \setkeys[ocgp]{ocg}{#1}
+ \mix_pdfobj:nnn{}{dict}{
+ /Type/OCG/Name~(#2)/Usage<<\l_fxocg_view_tl\@ocgp@print\@ocgp@export>>
+ }
+ \tl_gput_right:Nx\@ocgbase@ocgs{\space\g_mix_pdflastobj_tl}
+ \int_compare:nT{#4==\c_zero}{
+ \tl_gput_right:Nx\@ocgbase@offocgs{\space\g_mix_pdflastobj_tl}
+ }
+ \tl_gset:cx{fxocg@#3}{\g_mix_pdflastobj_tl}
+ \int_compare:nF{\@ocgp@listno=\c_one}{
+ \tl_gput_right:Nx\@ocgbase@ocgorder{~\g_mix_pdflastobj_tl}
+ }
+ \iow_now:Nx\@auxout{
+ \token_to_str:N\expandafter\xdef\token_to_str:N\csname
+ \space OCGpdfobj#3\endcsname{\g_mix_pdflastobj_tl}
+ }
+ }
+ \bool_if:nT{
+ !\cs_if_exist_p:c{OCGpdfobj#3} ||
+ !\str_if_eq_x_p:nn{\use:c{OCGpdfobj#3}}{\use:c{fxocg@#3}}
+ }{
+ \cs_if_exist:NF\g_fxocg_rerunwarned_tl{
+ \tl_new:N\g_fxocg_rerunwarned_tl
+ \AtEndDocument{\msg_warning:nn{fixocgx}{rerun}}
+ }
+ }
+ \tl_gset:cx{OCGpdfobj#3}{\use:c{fxocg@#3}}
+ \seq_gput_left:Nx\g_fixocg_ocgstack_seq{\use:c{fxocg@#3}}
+ \group_end:
+ \mix_pdfbdc:nn{/OC}{\use:c{fxocg@#3}}
+ \ignorespaces
+}{
+ \unskip
+ \mix_pdfemc:
+ \seq_gpop_left:NN\g_fixocg_ocgstack_seq\l_tempa_tl
+ \bool_if:NT\g_fxocg_nestedE_bool{\tl_gput_right:Nx\@ocgbase@ocgorder{~]}}
+ \bool_gset_true:N\g_fxocg_nestedE_bool
+ \bool_gset_false:N\g_fxocg_nestedB_bool
+}
+\bool_new:N\g_fxocg_nestedB_bool % nested OCG begin
+\bool_new:N\g_fxocg_nestedE_bool % nested OCG end
+
+%stack of PDF obj references of currently open OCGs
+\seq_new:N\g_fixocg_ocgstack_seq
+%macro that inserts /OC <<OCMD with currently open OCGs>> entry;
+%for use within annotation dicts
+\tl_set:Nn\fxocg@insert@OC{
+ \seq_if_empty:NF\g_fixocg_ocgstack_seq{
+ /OC~<</Type/OCMD/OCGs~[\seq_use:Nn\g_fixocg_ocgstack_seq{~}]/P/AllOn>>
+ }
+}
+
+%workaround for ocg buttons (from tikzlibraryocgx.code.tex)
+%with dvipdfmx and xelatex
+\cs_set:Nn\fxocg_pdflink:nn{
+ \bool_if:nTF{
+ \g_mix_dvipdfmx_bool && \cs_if_exist_p:N\pgfpictureid
+ }{
+ \hbox_set:Nn\l_tmpa_box{#2}
+ \mix_pdfannot:nnnn{
+ \dim_use:N\box_wd:N\l_tmpa_box}{
+ \dim_use:N\box_ht:N\l_tmpa_box}{
+ \dim_use:N\box_dp:N\l_tmpa_box
+ }{#1}
+ \box_use_clear:N\l_tmpa_box
+ }{
+ \mix_pdflink:nn{#1}{#2}
+ }
+}
+
+%re-implement commands from ocgx.sty (all engines including ps2pdf [gs>=9.15])
+\DeclareDocumentCommand\switchocg{mm}{
+ \tl_set:Nn\l_fxocg_ocglist_tl{}
+ \tl_set:Nx\l_ocglistarg_tl{#1}\tl_trim_spaces:N\l_ocglistarg_tl
+ \seq_set_split:NnV\l_fxocg_ocglistarg_seq{~}\l_ocglistarg_tl
+ \seq_map_variable:NNn\l_fxocg_ocglistarg_seq\l_tempa_tl{
+ \fxocg_process_ocgref:NN\l_fxocg_ocglist_tl\l_tempa_tl
+ }
+ \leavevmode
+ \fxocg_pdflink:nn{
+ /Subtype/Link\fxocg@insert@OC
+ /A <</S/SetOCGState/State [
+ \str_if_eq:VnF{\l_fxocg_ocglist_tl}{}{/Toggle~\l_fxocg_ocglist_tl}]>>
+ /Border [0~0~0]
+ }{#2}
+}
+
+\DeclareDocumentCommand\showocg{mm}{
+ \tl_set:Nn\l_fxocg_ocglist_tl{}
+ \tl_set:Nx\l_ocglistarg_tl{#1}\tl_trim_spaces:N\l_ocglistarg_tl
+ \seq_set_split:NnV\l_fxocg_ocglistarg_seq{~}\l_ocglistarg_tl
+ \seq_map_variable:NNn\l_fxocg_ocglistarg_seq\l_tempa_tl{
+ \fxocg_process_ocgref:NN\l_fxocg_ocglist_tl\l_tempa_tl
+ }
+ \leavevmode
+ \fxocg_pdflink:nn{
+ /Subtype/Link\fxocg@insert@OC
+ /A <</S/SetOCGState/State [
+ \str_if_eq:VnF{\l_fxocg_ocglist_tl}{}{/ON~\l_fxocg_ocglist_tl}]>>
+ /Border [0~0~0]
+ }{#2}
+}
+
+\DeclareDocumentCommand\hideocg{mm}{
+ \tl_set:Nn\l_fxocg_ocglist_tl{}
+ \tl_set:Nx\l_ocglistarg_tl{#1}\tl_trim_spaces:N\l_ocglistarg_tl
+ \seq_set_split:NnV\l_fxocg_ocglistarg_seq{~}\l_ocglistarg_tl
+ \seq_map_variable:NNn\l_fxocg_ocglistarg_seq\l_tempa_tl{
+ \fxocg_process_ocgref:NN\l_fxocg_ocglist_tl\l_tempa_tl
+ }
+ \leavevmode
+ \fxocg_pdflink:nn{
+ /Subtype/Link\fxocg@insert@OC
+ /A <</S/SetOCGState/State [
+ \str_if_eq:VnF{\l_fxocg_ocglist_tl}{}{/OFF~\l_fxocg_ocglist_tl}]>>
+ /Border [0~0~0]
+ }{#2}
+}
+
+\DeclareDocumentCommand\actionsocg{mmmm}{
+ \tl_set:Nx\l_ocglistarg_tl{#1}\tl_trim_spaces:N\l_ocglistarg_tl
+ \tl_set:Nn\l_fxocg_toswitch_tl{}
+ \seq_set_split:NnV\l_fxocg_ocglistarg_seq{~}\l_ocglistarg_tl
+ \seq_map_variable:NNn\l_fxocg_ocglistarg_seq\l_tempa_tl{
+ \fxocg_process_ocgref:NN\l_fxocg_toswitch_tl\l_tempa_tl
+ }
+ \tl_set:Nx\l_ocglistarg_tl{#2}\tl_trim_spaces:N\l_ocglistarg_tl
+ \tl_set:Nn\l_fxocg_toshow_tl{}
+ \seq_set_split:NnV\l_fxocg_ocglistarg_seq{~}\l_ocglistarg_tl
+ \seq_map_variable:NNn\l_fxocg_ocglistarg_seq\l_tempa_tl{
+ \fxocg_process_ocgref:NN\l_fxocg_toshow_tl\l_tempa_tl
+ }
+ \tl_set:Nx\l_ocglistarg_tl{#3}\tl_trim_spaces:N\l_ocglistarg_tl
+ \tl_set:Nn\l_fxocg_tohide_tl{}
+ \seq_set_split:NnV\l_fxocg_ocglistarg_seq{~}\l_ocglistarg_tl
+ \seq_map_variable:NNn\l_fxocg_ocglistarg_seq\l_tempa_tl{
+ \fxocg_process_ocgref:NN\l_fxocg_tohide_tl\l_tempa_tl
+ }
+ \leavevmode
+ \fxocg_pdflink:nn{
+ /Subtype/Link\fxocg@insert@OC
+ /A <</S/SetOCGState
+ /State [
+ \str_if_eq:VnF{\l_fxocg_toswitch_tl}{}{/Toggle~\l_fxocg_toswitch_tl}~
+ \str_if_eq:VnF{\l_fxocg_toshow_tl}{}{/ON~\l_fxocg_toshow_tl}~
+ \str_if_eq:VnF{\l_fxocg_tohide_tl}{}{/OFF~\l_fxocg_tohide_tl}
+ ]
+ >>
+ /Border [0~0~0]
+ }{#4}
+}
+
+\cs_new:Nn\fxocg_process_ocgref:NN{
+ \str_if_eq_x:nnF{#2}{}{
+ \tl_if_exist:cTF{OCGpdfobj#2}{\tl_put_right:Nx#1{~\use:c{OCGpdfobj#2}}}{
+ \msg_warning:nnx{fixocgx}{undefined~OCG}{#2}
+ \cs_if_exist:NF\g_fxocg_refundefwarned_tl{
+ \tl_new:N\g_fxocg_refundefwarned_tl
+ \AtEndDocument{\msg_warning:nn{fixocgx}{undefined~OCGs}}
+ }
+ }
+ }
+}
+
+\define@choicekey*[ocgp]{ocg}{viewocg}[\l_fxocg_viewbin_tl\l_fxocg_viewno_tl]{always,never,ifvisible}[ifvisible]{%
+ \if_case:w\l_fxocg_viewno_tl
+ \def\l_fxocg_view_tl{/View<</ViewState/ON>>}
+ \or:%
+ \def\l_fxocg_view_tl{/View<</ViewState/OFF>>}
+ \or:
+ \def\l_fxocg_view_tl{}
+ \fi:
+}
+\presetkeys[ocgp]{ocg}{viewocg=ifvisible,printocg=ifvisible,exportocg=ifvisible,listintoolbar=iffirstuse}{}
+
+\group_begin:
+\char_set_catcode_active:N\+\let+\space
+\tl_gset:Nx\g_fxocg_gsoldwarning_tl{
+ {product~(Ghostscript)~search~{pop~pop~pop~true}{pop~false}ifelse~
+ revision~915~lt~and~{
+ (\token_to_str:N\n
+ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\token_to_str:N\n
+ @@++++++++++++Warning:+Ghostscript+too+old!++++++++++++++++@@\token_to_str:N\n
+ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\token_to_str:N\n
+ @@+++++++++++++++++++++++++++++++++++++++++++++++++++++++++@@\token_to_str:N\n
+ @@+Package+`fixocgx'+requires+Ghostscript+version+>=+9.15.+@@\token_to_str:N\n
+ @@+Otherwise,+PDF+layers+will+not+work.++++++++++++++++++++@@\token_to_str:N\n
+ @@+++++++++++++++++++++++++++++++++++++++++++++++++++++++++@@\token_to_str:N\n
+ @@+Get+current+version+from++++++++++++++++++++++++++++++++@@\token_to_str:N\n
+ @@+http://www.ghostscript.com/download+++++++++++++++++++++@@\token_to_str:N\n
+ @@+++++++++++++++++++++++++++++++++++++++++++++++++++++++++@@\token_to_str:N\n
+ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\token_to_str:N\n)
+ print}~if}~?pdfmark
+}
+\group_end:
+
+\AtBeginDocument{
+ \ifpdf\else
+ \bool_if:NF\g_mix_dvipdfmx_bool{
+ \AtEndDvi{\special{ps::[nobreak]\g_fxocg_gsoldwarning_tl}}
+ }
+ \fi
+}
+
+\msg_set:nnn{fixocgx}{rerun}{Rerun~to~get~OCG~references~right!}
+\msg_set:nnn{fixocgx}{undefined~OCG}{
+ Line~\msg_line_number: :~OCG~`#1'~is~not~defined.
+}
+\msg_set:nnn{fixocgx}{undefined~OCGs}{There~were~undefined~OCGs!}
+
diff --git a/obsolete/macros/latex/contrib/getargs/README b/obsolete/macros/latex/contrib/getargs/README
new file mode 100644
index 0000000000..243be70c7c
--- /dev/null
+++ b/obsolete/macros/latex/contrib/getargs/README
@@ -0,0 +1,13 @@
+THE getargs PACKAGE
+
+This short package provides a flexible list-parsing macro with the
+ability to configure the parsing character, as well as the macro names
+in which the parsed list items are placed. The name of the parsing
+macro is \getargs.
+
+It is a significant improvement over similarly named macros in my
+stringstrings and readarray packages. It is my intent to eventually
+have the parsers of those other packages point to this package, to
+achieve a measure of uniformity.
+
+Steven B. Segletes
diff --git a/obsolete/macros/latex/contrib/getargs/getargs.pdf b/obsolete/macros/latex/contrib/getargs/getargs.pdf
new file mode 100644
index 0000000000..4ae4516ddd
--- /dev/null
+++ b/obsolete/macros/latex/contrib/getargs/getargs.pdf
Binary files differ
diff --git a/obsolete/macros/latex/contrib/getargs/getargs.sty b/obsolete/macros/latex/contrib/getargs/getargs.sty
new file mode 100644
index 0000000000..be28d6257b
--- /dev/null
+++ b/obsolete/macros/latex/contrib/getargs/getargs.sty
@@ -0,0 +1,56 @@
+\def\getargsversionnumber{v1.01}
+\ProvidesPackage{getargs}
+[2016/05/20 \getargsversionnumber\
+ Macro to parse an argument list, using user-specified parsing character]
+% CREATED BY Steven B. Segletes <steven.b.segletes.civ@mail.mil>
+% THIS PACKAGE IS RELEASED IN ACCORDANCE WITH THE LaTeX PUBLIC PROJECT LICENSE
+% LPPL v1.3c (http://ctan.org/license/lppl1.3) OR ITS SUCCESSORS
+
+% V1.00-Initial release
+\newcounter{getarg@ctr}
+\let\getargs\relax
+\newcommand\getargs{}
+
+\newcommand\setparsechar[1]{%
+ \def\getargparsechar{#1}%
+ \renewcommand{\getargs}[1]{%
+ \setcounter{getarg@ctr}{0}%
+ \parse@args##1#1\relax\relax%
+ }%
+ \def\parse@args##1#1##2\relax{%
+ \stepcounter{getarg@ctr}%
+ \expandafter\gdef\csname\getarg@root\romannumeral\value{getarg@ctr}\endcsname{##1}%
+ \ifx\relax##2\relax%
+ \expandafter\xdef\csname n\getarg@root\endcsname{\thegetarg@ctr}\else%
+ \parse@args##2\relax\fi%
+ }%
+}
+
+\newcommand\setparserootname[1][arg]{\def\getarg@root{#1}}
+
+\let\showargs\relax
+\newcommand\showargs[1][t]{%
+ \fboxrule=.7pt\relax\fboxsep=\dimexpr-.5pt-\fboxrule\relax%
+ \csname n\getarg@root\endcsname{} \textbackslash\getarg@root\ldots{} items %
+ \if x#1(expanded)\else (tokens)\fi%
+ : \showargs@help{#1}{1}{\csname n\getarg@root\endcsname}\unskip\fbox{\strut}.%
+}
+
+\newcommand\showargs@help[3]{%
+ \setcounter{getarg@ctr}{#2}%
+ \if x#1%
+ \fbox{\strut}\csname\getarg@root\romannumeral\value{getarg@ctr}\endcsname%
+ \hskip0pt\relax%
+ \else
+ \fbox{\strut}%
+ \expandafter\detokenize\expandafter\expandafter\expandafter{%
+ \csname\getarg@root\romannumeral\value{getarg@ctr}\endcsname}\hskip0pt\relax%
+ \fi
+ \ifnum\value{getarg@ctr}<#3\relax\stepcounter{getarg@ctr}%
+ \showargs@help{#1}{\thegetarg@ctr}{#3}%
+ \fi%
+}
+
+\setparserootname
+\setparsechar{,}
+\endinput
diff --git a/obsolete/macros/latex/contrib/getargs/getargs.tex b/obsolete/macros/latex/contrib/getargs/getargs.tex
new file mode 100644
index 0000000000..a0c4054e86
--- /dev/null
+++ b/obsolete/macros/latex/contrib/getargs/getargs.tex
@@ -0,0 +1,250 @@
+\documentclass{article}
+\usepackage{verbatimbox,getargs}
+\usepackage{lmodern}
+\usepackage[T1]{fontenc}
+\def\gtrgpk{\textsf{getargs}}
+\reversemarginpar
+\marginparwidth 1.6in
+\newcommand\margtt[1]{\marginpar{\hfill\ttfamily#1}}
+\newcommand\margcmd[1]{\marginpar{\hfill\ttfamily\char'134#1}}
+\newcommand\cmd[1]{\texttt{\small\char'134#1}}
+\usepackage{parskip}%\parindent 0in\parskip 1em
+\parskip 1.8ex plus 2pt
+\begin{document}
+\begin{myverbbox}[\small]{\gtrg}\getargs\end{myverbbox}
+\begin{myverbbox}[\small]{\gtrginv}\getargs{<argument-list to parse using parse-character>}\end{myverbbox}
+\begin{myverbbox}[\small]{\setpc}\setparsechar\end{myverbbox}
+\begin{myverbbox}[\small]{\setpcinv}\setparsechar{<parse-character>}\end{myverbbox}
+\begin{myverbbox}[\small]{\setpcrn}\setparserootname\end{myverbbox}
+\begin{myverbbox}[\small]{\setpcrninv}\setparserootname[<root-name>]\end{myverbbox}
+\begin{center}
+\LARGE The {\gtrgpk} Package\\
+\rule{0em}{.7em}\small Provides the \verb|\getargs| list parsing macro
+and associated configurations\\
+\rule{0em}{2.7em}\large Steven B. Segletes\\
+steven.b.segletes.civ@mail.mil\\
+\rule{0em}{1.7em}\today\\
+\getargsversionnumber%
+\end{center}
+This is the 3rd incarnation of the \gtrg{} macro in some form or another.
+The first was in the \textsf{stringstrings} package, but it is slow, can only
+ parse an expanable list with space delimiters, and brings all the baggage
+ of my bloated \textsf{stringstrings} package with it.
+An much more efficient form was reformulated in my \textsf{readarray} package,
+ under the name \gtrg\texttt{\small C}, but like its predecessor, it can
+ only parse with space delimiters.
+So here, I reintroduce the \gtrg{} macro, both efficient and capable of parsing
+ based on any delimiter character desired.
+In addition, it allows for the root-name of the parsed-argument list to be customized.
+It is my intent to eventually have the parsers of those other packages point
+ to this package, to achieve uniformity.
+
+This package is very short, providing three user macros plus one diagnostic macro.
+The macro \setpc{}\margcmd{setparsechar}, invoked as
+
+\setpcinv,
+
+\noindent provides the means to designate the delimiter character by which
+ the parser breaks the argument list into pieces.
+Because of the popularity of the csv format, the parsing delimiter character
+ is set to a comma (\texttt{,}), when the package is initially invoked.
+The parsing delimiter character can also be set to a space with
+ \setpc\texttt{\small\{ \}}.
+If the parsing delimiter is not a space, however, then leading and trailing
+ spaces in the parsed argument list are retained
+(note that, in the standard \LaTeX{} fashion, multiple adjacent spaces are
+ parsed as a single input space).%
+\footnote{The current parse character is stored in
+ \cmd{\small getargsparsechar}, for reference only.
+However, a new parse character can only be set
+ with an invocation of \setpc{}.}
+
+The primary user macro of this package is \gtrg{}\margcmd{getargs}, which
+ is used to parse a delimited argument list. The invocation syntax is
+
+\gtrginv
+
+\noindent
+Like prior formulations of the \gtrg{} macro, the result of the parsing are
+ twofold:
+\begin{enumerate}
+ \item The number of items parsed from the argument-list is stored, via
+ \cmd{xdef}, in the macro named, by default, \cmd{narg}.
+ \item The actual tokens of the parsed argument-list are placed in a series
+ of macros, which are, by default, named \cmd{argi}, \cmd{argii},
+ \cmd{argiii}, \cmd{argiv}, \ldots, in roman-numeral naming fashion.
+\end{enumerate}
+The root name of the macros into which the parsed argument-list are placed
+ can itself be designated by the user, using the \setpcrn%
+ \margcmd{setparserootname} macro.
+This macro is invoked as
+
+\setpcrninv
+
+The default root-name employed is ``arg'', if the optional argument is not
+ specified.
+When the root-name of the \gtrg{} parser is changed, not only are the
+ subsequently parsed arguments stored in new macro names \cmd{<root-name>i},
+ \cmd{<root-name>ii}, \cmd{<root-name>iii}, \textit{etc.}, but the
+ total number of arguments parsed is no longer stored in \cmd{narg}, but now
+ in \cmd{n<root-name>}.
+
+The final macro provided is the \cmd{showargs}\margcmd{showargs}
+ diagnostic macro.
+It can be invoked with or without the \texttt{\small[x]} optional argument,
+ which determines whether the parsed argument list is presented as tokens
+ (the default, via \cmd{detokenize}\footnote{%
+Dont forget that \LaTeX{}'s \cmd{\footnotesize detokenize} always presents macro names
+ with a trailing space, regardless of whether that space actually exists
+ in the parsed argument.})
+ or, if it is presented in expanded form,
+ when the \texttt{\small[x]} optional argument is employed.
+\textbf{Be forewarned that not all parsed tokens will present without error in
+ expanded form.}
+If the parsing separates a macro from its arguments, or if it separates some
+ types of opening and closing delimiters (paired \texttt{\$}, for example),
+ then errors will be generated, not from the parsing, but from an attempt to
+ \cmd{showargs} the result in expanded \texttt{[x]} form.
+
+The \cmd{showargs} invocation will first list the number of items most
+ recently parsed from the input list associated with the current
+ \texttt{<root-name>}.
+It will provide that root-name of the parsed items and whether or not the
+ parsed items that follow are presented as raw tokens or in expanded form.
+Finally, it will sequentially list the parsed items between vertical
+ dividing rules, in a line breakable way.
+
+This version of \gtrg{} and \cmd{showargs} will overwrite any existing
+ version that is already loaded (for example, from the
+ \textsf{stringstrings} package), without providing warning or error.
+If that is the intent of the user, then make sure the \gtrgpk{} package
+ is loaded after the other conflicting packages.
+
+\clearpage\section*{Examples}
+
+\begin{itemize}
+
+\item \textbf{The difference between expanded and raw-token \cmd{showargs}}
+
+\begin{verbnobox}[\small]
+\def\myname{Steven Segletes}
+\getargs{Signed/dated as follows, \myname, \today}
+\showargs[x]\par
+\showargs
+\end{verbnobox}
+\def\myname{Steven Segletes}
+\getargs{Signed/dated as follows, \myname, \today}
+\showargs[x]\par
+\showargs
+
+When presented in expanded form, the macros are fleshed out with their
+ expansions.
+However, one can see that the original tokens remain in the tokenized
+ presentation of \cmd{argii} and \cmd{argiii}.
+
+\item \textbf{The behavior of leading/trailing spaces (with a non-space parse
+ character)}
+
+\begin{verbnobox}[\small]
+\getargs{A, A, A , A }
+\showargs
+\end{verbnobox}
+\getargs{A, A, A , A }
+\showargs
+
+Note above, in the expression of \cmd{argiv}, that multiple spaces in the
+ input are parsed, according to the \LaTeX{} standard, as single spaces.
+Thus, \cmd{argiii} and \cmd{argiv} are functionally identical.
+
+\item \textbf{Changing the parsing character}
+
+\begin{verbnobox}[\small]
+\setparsechar{&}
+\getargs {y&\frac{x}{y}&(x_0-y_0)^3}
+$\showargs[x]$
+\end{verbnobox}
+
+\setparsechar{&}
+\getargs {y&\frac{x}{y}&(x_0-y_0)^3}
+$\showargs[x]$
+
+Note that the parsing of math expressions did not take place in math mode.
+However, as long as they are presented in math mode, all is well.
+
+The changed parsing character will remain \texttt{\&} until subsequently
+ changed (or until the group ends, if it was changed within a group).
+
+\clearpage\item \textbf{Space as the parsing character}
+
+\begin{verbnobox}[\small]
+\setparsechar{ }
+\getargs{A B C D}\showargs
+\end{verbnobox}
+
+\setparsechar{ }
+\getargs{A B C D}\showargs
+
+When a space-character is used as the parsing character, one can see above that
+ multiple leading/trailing spaces are absorbed in the parsing, so that \cmd{argiii}
+ is left as a simple ``C'', despite being surrounded by multiple spaces.
+
+
+\item \textbf{Parsed macros are not expanded at time of parsing}
+
+\begin{verbnobox}[\small]
+\setparsechar{&}
+\def\A{Alpha $\alpha$}
+\getargs {parameter (1)& &parameter {\A}}
+\argiii{} VS. \def\A{Beta $\beta$}\argiii
+\end{verbnobox}
+
+\setparsechar{&}
+\def\A{Alpha $\alpha$}
+\getargs {parameter (1)& &parameter {\A}}
+\argiii{} VS. \def\A{Beta $\beta$}\argiii
+
+Because \cmd{argiii} is stored as this: ``\texttt{\small\detokenize\expandafter{\argiii}}'',
+it follows that after \cmd{A} is redefined, the redefinition carries over into
+ the expansion of \cmd{argiii}.
+
+\item \textbf{Nested parsing}
+
+\begin{verbnobox}[\small]
+\setparserootname[ROW]
+\setparsechar{\\}
+\getargs {A_{11} & A_{12} & A_{13}\\ A_{21} & A_{22} & A_{23}}
+\setparsechar{&}
+\setparserootname[ROWiCOL]
+\expandafter\getargs\expandafter{\ROWi}
+\setparserootname[ROWiiCOL]
+\expandafter\getargs\expandafter{\ROWii}
+$(\ROWiCOLi) (\ROWiCOLii) (\ROWiCOLiii)$\\
+$(\ROWiiCOLi) (\ROWiiCOLii) (\ROWiiCOLiii)$
+\end{verbnobox}
+
+\setparserootname[ROW]
+\setparsechar{\\}
+\getargs {A_{11} & A_{12} & A_{13}\\ A_{21} & A_{22} & A_{23}}
+\setparsechar{&}
+\setparserootname[ROWiCOL]
+\expandafter\getargs\expandafter{\ROWi}
+\setparserootname[ROWiiCOL]
+\expandafter\getargs\expandafter{\ROWii}
+$(\ROWiCOLi) (\ROWiCOLii) (\ROWiCOLiii)$\\
+$(\ROWiiCOLi) (\ROWiiCOLii) (\ROWiiCOLiii)$
+
+Above, I perform all the tasks manually, but it is not hard to set it in
+ a loop based on the respective values of \cmd{nROW} (\nROW), \cmd{nROWiCOL}
+ (\nROWiCOL), and \cmd{nROWiiCOL} (\nROWiiCOL).
+This is a powerful way to retieve and store all the elements of a matrix in
+ a structured way.
+Note that \cmd{ROWi} and \cmd{ROWii} each had to be expanded exactly once
+ in order to be digested as input to \gtrg.
+
+\end{itemize}
+
+
+\section*{Source Code}
+
+\verbfilebox[\footnotesize]{getargs.sty}\theverbbox
+\end{document}
diff --git a/obsolete/macros/latex/contrib/glossary/CHANGES b/obsolete/macros/latex/contrib/glossary/CHANGES
new file mode 100644
index 0000000000..05691178de
--- /dev/null
+++ b/obsolete/macros/latex/contrib/glossary/CHANGES
@@ -0,0 +1,115 @@
+glossary.sty history:
+
+ * Version 2.4: fixed problems caused by \@sanitize.
+ Extended package option "number" to be used with
+ any counter (not just page or section). Added
+ number key to \setglossarystyle. Removed
+ some redundant code. Fixed problems caused with
+ hyperlinks when using a mixture of counters for
+ individual entries. Added extra \hyper<xx> page
+ formats. Added hook to provide a sub header when
+ using a tabular style glossary. Added means of
+ specifying a column header for page list column.
+ Added facility to insert text between groups.
+ Fixed bug in documentation when omitting \OnlyDescription
+
+ *** Note that if you update to version 2.4, it ***
+ *** is advisable to delete your .gls etc files ***
+ *** before recompiling. ***
+
+
+ * Version 2.38: fixed by where inappropriate spaces are
+ inserted when using xspace package.
+
+ * Version 2.37: fixed hypertoc to work with sections
+
+ * Version 2.36: added \useglosentry{*}. Fixed bug which
+ allowed a pagebreak to occur between entry name and
+ entry description when using the altlist style.
+
+ * Version 2.35: fixed makeglos.bat
+
+ * Version 2.34: \acronymname now defined using
+ \providecommand instead of \newcommand. Fixed bug
+ that prevented redefinition of \glossaryalignment.
+
+ * Version 2.33: fixed bug that occurs when a comma is
+ used in the description field of \newacronym.
+
+ * Version 2.32: added \setacronymdescfmt. (Makes it
+ easier to align the list of acronyms with
+ acronym in one column and the long name in the
+ second column.)
+
+ * Version 2.31: added global package option. Added
+ \unsetacronym and \unsetallacronyms.
+
+ * Version 2.3: Made it easier to have multiple glossaries
+ with different styles within the same document. Added
+ facility for inserting text before and after the list of
+ page numbers.
+
+ * Version 2.26: Fixed bug in \useacronym (optional argument
+ was ignored in certain situations).
+
+ * Version 2.25: Minor bug fix (missing page delimiters).
+
+ * Version 2.24: Added hypertoc option, and changed the
+ hyperlink targets in the glossary entries.
+
+ * Version 2.23: Fixed bug in hyperlinks caused by \glsxspace.
+
+ * Version 2.22: Added acronymfont. Added xspace support.
+ Changed makeglos.pl so that it reads information from
+ auxiliary file. Added makeglos.bat file
+
+ * Version 2.21: Added \resetallacronyms
+
+ * Version 2.2: \glossaryname is now defined using
+ \providecommand instead of \newcommand. Checks if
+ theglossary environment is already defined, and if so
+ redefines it and issues a warning.
+
+ * Version 2.19: fixed bug in \storeglosentry.
+
+ * Version 2.18: fixed bug in \useacronym. Added \gls.
+
+ * Version 2.17: added acronym package option. Added
+ \storeglosentry (replacing old \saveglosentry command)
+
+ * Version 2.16: fixed bug preventing changes to \glossaryname
+ and \shortglossary name from having an effect.
+
+ * Version 2.15: added \shortglossaryname (for page header and
+ table of contents)
+
+ * Version 2.14: added LaTeX2HTML support, added \xglossary
+ command (provides hyperlink to relevent entry in the
+ glossary), added -m switch to makeglos.pl (merges multiple
+ entries with the same name but different descriptions).
+
+ * Version 2.13: added extra package option "hyperacronym".
+
+ * Version 2.12: mostly bug fixes, also added extra package
+ option "section".
+
+ * Version 2.11: starred form of acronym defined. Added
+ \useacronym.
+
+ * Version 2.1: fixed conflict with array package. Fixed
+ problems which occured when using certain commands (such as
+ \cite) in the last argument of \newacronym.
+
+ * Version 2.01: fixed conflict with datetime package.
+
+ * Version 2.0: provides the command \newacronym to define
+ acronyms. Additional package options "toc" (add glossary to
+ table of contents) and "hyper" use hyperlinks in the
+ glossary.
+
+ * Version 1.1: provides the additional package option
+ "number" which sets the associated glossary entry number to
+ the page number (default), the section number or no number.
+ Also provides the additional commands \glossarypreamble and
+ \glossarypostamble
+
diff --git a/obsolete/macros/latex/contrib/glossary/README b/obsolete/macros/latex/contrib/glossary/README
new file mode 100644
index 0000000000..77fea0e17b
--- /dev/null
+++ b/obsolete/macros/latex/contrib/glossary/README
@@ -0,0 +1,45 @@
+LaTeX Package : glossary v 2.4
+
+Last Modified : 20th July 2006
+
+Author : Nicola Talbot
+
+Files : glossary.dtx - documented source file
+ glossary.ins - installation script
+
+This package is provided to assist generating a glossary. It has
+a certain amount of flexibility allowing the user to customize the
+format of the glossary and define new glossary-style objects. It
+is also possible to define acronyms.
+
+To extract the code do:
+
+latex glossary.ins
+
+This will create the files glossary.sty, glossary.perl,
+makeglos.pl and some sample files. Move
+glossary.sty to a subdirectory of your local texmf tree
+(e.g. $LOCALTEXMF/tex/latex/contrib/) and glossary.perl
+to the LaTeX2HTML style files directory (e.g. latex2html/styles).
+The Perl script makeglos.pl provides an easy interface to
+makeindex for those who can't remember (or can't be bothered) all
+the required switches. See documentation for more details.
+
+To extract the documentation do:
+
+latex glossary.dtx
+makeindex -s gind.ist glossary
+makeindex -s gglo.ist -o glossary.gls glossary.glo
+latex glossary.dtx
+latex glossary.dtx
+
+Alternatively, if you use pdflatex instead of latex, the
+documentation will have hyperlinks. If you want documentation
+on the code, remove the line:
+\OnlyDescription
+
+This material is subject to the LaTeX Project Public License.
+See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html for the details of that license.
+
+http://theoval.cmp.uea.ac.uk/~nlct/
+
diff --git a/obsolete/macros/latex/contrib/glossary/glossary.dtx b/obsolete/macros/latex/contrib/glossary/glossary.dtx
new file mode 100644
index 0000000000..6d31a8d363
--- /dev/null
+++ b/obsolete/macros/latex/contrib/glossary/glossary.dtx
@@ -0,0 +1,5915 @@
+%\iffalse
+% glossary.dtx generated using makedtx version 0.91b (c) Nicola Talbot
+% Command line args:
+% -macrocode ".*\.p.*l"
+% -macrocode ".*\.bat"
+% -macrocode ".*\.tex"
+% -setambles ".*\.p.*l=>\nopreamble\nopostamble"
+% -setambles ".*\.bat=>\nopreamble\nopostamble"
+% -src "(.+)\.(sty)\Z=>\1.\2"
+% -src "(.+)\.(pl)\Z=>\1.\2"
+% -src "(.+)\.(bat)\Z=>\1.\2"
+% -src "(.+)\.(perl)\Z=>\1.\2"
+% -src "(.+)\.(tex)\Z=>\1.\2"
+% -doc "manual.tex"
+% -author "Nicola Talbot"
+% -prefinale "\\fi"
+% -dir "source"
+% glossary
+% Created on 2006/7/25 18:13
+%\fi
+%\iffalse
+%<*package>
+%% \CharacterTable
+%% {Upper-case \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
+%% Lower-case \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
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%</package>
+%\fi
+% \iffalse
+% Doc-Source file to use with LaTeX2e
+% Copyright (C) 2006 Nicola Talbot, all rights reserved.
+% \fi
+% \iffalse
+%<*driver>
+\documentclass[a4paper]{ltxdoc}
+\usepackage{ifthen}
+\usepackage[colorlinks,
+ bookmarks,
+ hyperindex=false,
+ pdfauthor={N.L.C. Talbot},
+ pdftitle={glossary.sty: LaTeX2e Package to Assist Generating Glossaries},
+ pdfkeywords={LaTeX,package,glossary,acronym}]{hyperref}
+
+ %hyperindex conflicts with doc
+ %(end up with |usage|hyperpage in indexentry)
+ %This unfortunately means that the changes section doesn't
+ %have active links, but at least it will keep makeindex happy.
+
+
+\renewcommand{\usage}[1]{\textit{\hyperpage{#1}}}
+\renewcommand{\main}[1]{\hyperpage{#1}}
+\newcommand{\see}[2]{\emph{see} #1}
+\makeatletter
+\def\index@prologue{\section*{Index}}
+\makeatother
+\RecordChanges
+\PageIndex
+ %\OnlyDescription
+
+
+\newcommand{\cmdname}[1]{\texttt{\symbol{92}#1}}
+\newcommand{\istkey}[1]{\texttt{#1}\index{makeindex key>#1|hyperpage}}
+\newcommand{\icmdname}[1]{\texttt{\symbol{92}#1}\SpecialMainIndex{#1}}
+\newcommand{\appname}[1]{\texttt{#1}\index{#1=\texttt{#1}|hyperpage}}
+\newcommand{\gloskey}[1]{\texttt{#1}\index{glossary keys=\cmdname{glossary} keys>#1|hyperpage}}
+\newcommand{\setglos}[1]{\texttt{#1}\index{setglossary keys=\cmdname{setglossary} keys>#1|hyperpage}}
+\newcommand{\glsnumfmt}[1]{\texttt{#1}%
+\index{page number formats>#1|hyperpage}%
+\index{glossary keys=\cmdname{glossary} keys>format>#1|hyperpage}}
+\newcommand{\pkgopt}[2][]{%
+\ifthenelse{\equal{#1}{}}{%
+\texttt{#2}\index{package options>#2|hyperpage}}{%
+\texttt{#2=#1}\index{package options>#2>#1|hyperpage}}}
+\newcommand{\pkgoptval}[2]{\texttt{#1}\index{package options>#2>#1|hyperpage}}
+\newcommand{\filetype}[1]{\texttt{#1}\index{file types>#1|hyperpage}}
+\newcommand{\styname}[1]{\textsf{#1}\index{#1=\textsf{#1}|hyperpage}}
+\newcommand{\envname}[1]{\textsf{#1}}
+
+
+\begin{document}
+\DocInput{glossary.dtx}
+\end{document}
+%</driver>
+%\fi
+%\MakeShortVerb{"}
+%\DeleteShortVerb{\|}
+%
+% \title{glossary.sty v 2.4: \LaTeXe\ Package to Assist Generating Glossaries}
+% \author{Nicola L.C. Talbot}
+% \date{20th July 2006}
+% \maketitle
+%\tableofcontents
+%
+% \section{Introduction}
+% \changes{1.0}{2004 July 29}{Initial version}
+% The \styname{glossary} package is provided to assist
+%generating a glossary. It has a certain amount of flexibility,
+%allowing the user to customize the format of the glossary, and
+%define new glossary-style objects.
+%
+%\section{Installation}
+%
+%You need to make sure you have downloaded the following three
+%files:
+%\begin{verbatim}
+%glossary.ins
+%glossary.dtx
+%README
+%\end{verbatim}
+%To extract the code from the \texttt{glossary.dtx} file, you
+%will need to run the installation file through LaTeX:
+%\begin{verbatim}
+%latex glossary.ins
+%\end{verbatim}
+%This will create the following files:
+%\begin{verbatim}
+%glossary.sty
+%glossary.perl
+%makeglos.pl
+%makeglos.bat
+%\end{verbatim}
+%along with several sample files. The file \texttt{glossary.sty}
+%should be placed somewhere in the \LaTeX\ path, e.g.\
+%\texttt{texmf/tex/latex/glossary/} or
+%\texttt{localtexmf/tex/latex/glossary/}. Remember to update the
+%\TeX\ database if you are installing this package for the first time.
+%The file \texttt{glossary.perl} is a \LaTeX2HTML\ style file, and
+%should be placed in the \LaTeX2HTML\ style file directory (usually
+%\texttt{latex2html/styles/}). The file \texttt{makeglos.pl}
+%is a Perl script which calls \appname{makeindex}. If you are
+%using UNIX or Linux, you will need to set the permissions so
+%that you can execute the file:
+%\begin{verbatim}
+%chmod a+x makeglos.pl
+%\end{verbatim}
+%You should then place this file somewhere on your path.
+%(You may also need to edit the first line of
+%this file, if \appname{perl} is located in a directory other than \verb"/usr/bin/"\footnote{and you can also remove the \texttt{.pl}
+%extension which isn't to everyone's liking.}.)
+%
+%If you are not using UNIX or Linux etc, you may have to explicitly
+%load the file into Perl, so you would need to do
+%\texttt{perl makeglos.pl} instead of just \texttt{makeglos.pl}.
+%If you are using Windows, a batch file, \texttt{makeglos.bat}
+%is provided which will run Perl on \texttt{makeglos.pl}.
+%Both \texttt{makeglos.pl} and \texttt{makeglos.bat} should
+%be placed somewhere specified by the PATH environment
+%variable. (For example, put them both in the same
+%directory as \appname{makeindex}, which will probably
+%be in \verb+\texmf\miktex\bin\+).
+%\changes{2.22}{2005 Sept 12}{added makeglos.bat file}
+%
+%If you don't have Perl installed on your system, you can just use
+%\appname{makeindex}, only you will have to remember all the
+%command line switches, and you won't be able to merge entries
+%that have the same name, but different descriptions.
+%
+%Note that if you are updating the glossary package, it is
+%a good idea to update \texttt{makeglos.pl} as it may also
+%have been modified.
+%
+% \section{Generating Glossary Information}
+%
+% The standard \LaTeX\ command \cmdname{makeglossary}\DescribeMacro{\makeglossary}{} (analogous to \cmdname{makeindex})
+% should be placed in the document preamble. If this command
+%is omitted, glossary information will be ignored. Glossary
+%entries are generated using the command
+%\cmdname{glossary}\verb"{"\meta{key-val list}\verb'}'\DescribeMacro{\glossary}.
+% This command is a slightly modified version of the standard
+%\cmdname{glossary} command, in order to separate out the
+%information into \meta{entry-name} and \meta{entry-description}.
+%The argument to \cmdname{glossary} must be a comma-separated
+%list of \meta{key}=\meta{value} pairs. The following keys are
+%available:
+%\begin{center}
+%\begin{tabular}{lp{0.8\linewidth}}
+%\bfseries Key & \bfseries Value\\
+%\ttfamily \gloskey{name} & The entry name\\
+%\ttfamily \gloskey{description} & A description about the entry\\
+%\ttfamily \gloskey{sort} & How to sort the entry. (Entry name used if sort omitted)\\
+%\ttfamily \gloskey{format} & How to format the page number\\
+%\ttfamily \gloskey{number} & Override the page number with a different
+%counter. The value should be the name of a counter (e.g.\
+%\texttt{number=section}).
+%\end{tabular}
+%\end{center}
+% For example:
+%\begin{verbatim}
+%\glossary{name={singular matrix},
+% description={A matrix with zero determinant}}
+%\end{verbatim}
+% The following example sorts on the text \texttt{U} instead of
+%\verb"$\mathcal{U}$":
+%\begin{verbatim}
+%\glossary{name={$\mathcal{U}$},
+% description={The universal set},
+% sort=U}
+%\end{verbatim}
+%Note that you should always use the \gloskey{sort}
+%key if the \gloskey{name} key contains commands, this is particularly
+%important if you are using hyperlinks, as the target is constructed
+%from the \gloskey{name} key if the \gloskey{sort} key is omitted.
+%
+%In the glossary, each entry is followed by a list of page numbers
+%that correspond to the pages where the relevant \cmdname{glossary}
+%command is placed. By default the numbers are formatted in the
+%current font, but the page number format for individual entries can be
+%changed using the \gloskey{format} key. This should be the name of a
+%\LaTeX\ formatting command without the preceding \verb'\' (as with the
+%\verb'|' operator in \cmdname{index}.) For example:
+%\begin{verbatim}
+%\glossary{name={$\mathbb{R}$},
+% description={The set of real numbers},
+% sort=R,
+% format=textbf}
+%\end{verbatim}
+%In addition, the following formats are also available:
+%\changes{2.0}{2004 September 21}{Hyper page formats:
+%\texttt{'hypersf}, \texttt{'hypertt}, \texttt{'hyperbf} and
+%\texttt{'hyperbf}}
+%\changes{2.12}{2004 November 1}{Hyper page format:
+%\texttt{'hyperrm}}
+%\changes{2.4}{2006 July 20}{Hyper page formats updated to take two
+%arguments. Additional formats also provided}
+%\begin{center}
+%\begin{tabular}{ll}
+%\glsnumfmt{hyperrm} & The number is a hyper link in roman \\
+%\glsnumfmt{hypersf} & The number is a hyper link in sans-serif \\
+%\glsnumfmt{hypertt} & The number is a hyper link in typewriter font \\
+%\glsnumfmt{hyperbf} & The number is a hyper link in bold \\
+%\glsnumfmt{hypermd} & The number is a hyper link in medium weight \\
+%\glsnumfmt{hyperit} & The number is a hyper link in italic\\
+%\glsnumfmt{hypersl} & The number is a hyper link in slanted font\\
+%\glsnumfmt{hyperup} & The number is a hyper link in upright font\\
+%\glsnumfmt{hypersc} & The number is a hyper link in small caps\\
+%\glsnumfmt{hyperem} & The number is a hyper link using \cmdname{emph}
+%\end{tabular}
+%\end{center}
+%If the \pkgopt{hyper} option has not been set,
+%\glsnumfmt{hyperem} is equivalent to \texttt{emph}, and the remaining
+%\glsnumfmt{hyperrm} etc are equivalent to \texttt{textrm} etc.
+%Note that it is important the you use \texttt{hyperrm} instead of
+%\texttt{hyperpage}, as the \cmdname{hyperpage} command won't
+%work on a list or range of numbers in the glossary%
+%\footnote{This is because the list and number ranges are
+%delimited using \cmdname{delimR} and \cmdname{delimN} instead of
+%explicitly using a comma or en-dash.}. If you want to define your
+%own command that uses hyper links, it must be defined in an
+%analogous manner to \icmdname{hyperrm}. For example, if you want
+%to display a page number in a bold italic format, that contains a
+%hyperlink to the appropriate page, you would need to define it as
+%follows:
+%\begin{verbatim}
+%\newcommand{\hyperbfit}[2][\gls@number]{%
+%\textbf{\itshape\glshyper{#1}{#2}}}
+%\end{verbatim}
+%As can be seen from the definition, all the \cmdname{hyper}\meta{xx}
+%commands have an optional argument. This argument is the name of the
+%counter being used. You do not need to worry about this argument if
+%you only use these commands within the \icmdname{glossary} command.
+%So the previous example can simply be rewritten as:
+%\begin{verbatim}
+%\glossary{name={$\mathbb{R}$},
+% description={The set of real numbers},
+% sort=R,
+% format=hyperbf}
+%\end{verbatim}
+%
+%\textbf{Note:} although the numbers in the glossary are referred to
+%as ``page'' numbers in this manual, they may in fact refer to some
+%other counter, such as the \texttt{section} counter, depending on
+%whether the \gloskey{number} key has been used.
+%
+%As with the \cmdname{index} command, care must be taken if you
+%want to use the special characters: \verb'@' \verb/|/ \verb+"+ and
+%\verb'!'. These characters should be preceded by the double quote
+%character. For example:
+%\begin{verbatim}
+%\glossary{name={$"|\mathcal{S}"|$,
+%description=The cardinality of the set \mathcal{S}}}
+%\end{verbatim}
+%There is no provision for sub-entries, as these are
+%generally only applicable in an index, and not in a glossary.
+%
+%\changes{2.14}{2005 May 28}{'xglossary added}%
+%As from version 2.14, there is an additional command available:
+%\DescribeMacro{\xglossary}
+%\par\vspace{10pt}\noindent\cmdname{xglossary}\verb'{'\meta{gls-entry}%
+%\verb'}{'\meta{text}\verb"}"
+%\par\vspace{10pt}\noindent This is equivalent to\meta{text}\icmdname{glossary}\verb'{'\meta{gls-entry}\verb"}",
+%where \meta{text} will be made a hyper link to the
+%relevant entry in the glossary, if hyper
+%links are supported.
+%
+%\subsection{Storing Glossary Information}
+%
+%It is very cumbersome having to use the \icmdname{glossary} command
+%throughout your document, every time you use a term that you want in
+%your glossary. This is particularly true for terms with a long
+%description. The \styname{glossary} package provides a means
+%of storing the glossary information at the beginning of the document,
+%and then using it whenever required. It is strongly recommended
+%that you use this approach, rather than explicity using the
+%\icmdname{glossary} command.
+%
+%\changes{2.17}{2005 June 28}{'storeglosentry added}
+%\DescribeMacro{\storeglosentry}
+%The following command:\\[10pt]
+%\begin{ttfamily}
+%\cmdname{storeglosentry}[\textrm{\meta{gls-type}}]\{\textrm{\meta{label}}\}\{\textrm{\meta{gls-entry}}\}
+%\end{ttfamily}\\[10pt]
+%can be used to store glossary information, where \meta{label} is
+%a unique label assigned to this entry. The information
+%can then be used later with any of the following commands:\\[10pt]
+%\changes{2.14}{2005 May 28}{'useglosentry added}
+%\changes{2.14}{2005 May 28}{'useGlosentry added}
+%\changes{2.18}{2005 July 5}{'gls added}
+%\begin{ttfamily}
+%\cmdname{useglosentry}[\textrm{\meta{opt}}]\{\textrm{\meta{label}}\}\DescribeMacro{\useglosentry}\\
+%\cmdname{useGlosentry}[\textrm{\meta{opt}}]\{\textrm{\meta{label}}\}\{\textrm{\meta{text}}\}\DescribeMacro{\useGlosentry}\\
+%\cmdname{gls}[\textrm{\meta{opt}}]\{\textrm{\meta{label}}\}\DescribeMacro{\gls}
+%\end{ttfamily}\\[10pt]
+%\cmdname{useglosentry} adds the glossary entry whose label is given by
+%\meta{label} to the appropriate glossary,
+%\cmdname{useGlosentry} adds the glossary entry, and
+%makes \meta{text} a hyperlink to that entry (if hyperlinks are
+%supported). The third command, \cmdname{gls}, is like
+%\cmdname{useGlosentry}, but forms \meta{text} from the name
+%given in the glossary entry.
+%
+%Returning to an earlier example, instead of typing:
+%\begin{verbatim}
+%\glossary{name={$\mathcal{U}$},
+% description={The universal set},
+% sort=U}
+%\end{verbatim}
+%every time you want to add this entry to the glossary, you
+%can instead store the information:
+%\changes{2.19}{2005 July 8}{fixed bug in 'storeglosentry}
+%\begin{verbatim}
+%\storeglosentry{glos:U}{name={$\mathcal{U}$},
+% description={The universal set},
+% sort=U}
+%\end{verbatim}
+%Now, instead of continually copying and pasting the glossary command
+%for this entry (which can have quite a large \gloskey{description}
+%field), you can use either:
+%\begin{verbatim}
+%\useglosentry{glos:U}
+%\end{verbatim}
+%which is equivalent to:
+%\begin{verbatim}
+%\glossary{name={$\mathcal{U}$},
+% description={The universal set},
+% sort=U}
+%\end{verbatim}
+%or you can use:
+%\begin{verbatim}
+%\useGlosentry{glos:U}{text}
+%\end{verbatim}
+%which is equivalent to:
+%\begin{verbatim}
+%\xglossary{name={$\mathcal{U}$},
+% description={The universal set},
+% sort=U}{text}
+%\end{verbatim}
+%or you can use:
+%\begin{verbatim}
+%\gls{glos:U}
+%\end{verbatim}
+%which is equivalent to:
+%\begin{verbatim}
+%\xglossary{name={$\mathcal{U}$},
+% description={The universal set},
+% sort=U}{$\mathcal{U}$}
+%\end{verbatim}
+%If you want to use glossary entries in an equation, it is better
+%to use \cmdname{ensuremath} instead of \verb|$|\ldots\verb'$'.
+%For example:
+%\begin{verbatim}
+%\storeglosentry{Gamma}{name=\ensuremath{\Gamma(z)},
+%description=Gamma function,
+%sort=Gamma}
+%\end{verbatim}
+%You can then use this entry in either text or math mode:
+%\begin{verbatim}
+%The \useGlosentry{Gamma}{Gamma function} is defined as
+%\begin{equation}
+%\gls{Gamma} = \int_{0}^{\infty}e^{-t}t^{z-1}\,dt
+%\end{equation}
+%\end{verbatim}
+%If you are using hyper links, and you want to use
+%\cmdname{useGlosentry} within math mode, you must use
+%\cmdname{ensuremath}:
+%\begin{verbatim}
+%\begin{equation}
+%\useGlosentry{Gamma}{\ensuremath{\Gamma(x+1)}} = x\Gamma(x)
+%\end{equation}
+%\end{verbatim}
+%
+%The optional argument to \icmdname{storeglosentry} (\meta{gls-type})
+%indicates the glossary type (see
+%\autoref{sec:newglostype} to find out how to define new
+%glossary types). If omitted, the standard glossary is used.
+%
+%The optional argument to \icmdname{useglosentry},
+%\icmdname{useGlosentry} and \icmdname{gls} (\meta{opt}) allows you to
+%add additional information to the glossary entry, for example:
+%\begin{verbatim}
+%\useglosentry[format=textbf]{glos:U}
+%\end{verbatim}
+%is equivalent to:
+%\begin{verbatim}
+%\glossary{name={$\mathcal{U}$},
+% description={The universal set},
+% sort=U,
+% format=textbf}
+%\end{verbatim}
+%Since version 2.4, \icmdname{storeglosentry} is robust, and
+%\cmdname{protect} should no longer be needed, however
+%the identifying label, \meta{label}, should not
+%contain any special characters.
+%
+%As from version 2.36, if you want to use all glossary entries
+%which have been defined using \cmdname{storeglosentry}, do:
+%\verb|\useglosentry{*}|. (Note that this option is not
+%available for \cmdname{useGlosentry} and \cmdname{gls}.)
+%
+%\section{makeglos.pl}
+%
+%Whenever a glossary entry is used, either explicity using
+%\cmdname{glossary} or \cmdname{xglossary} or implicitly using
+%\cmdname{useglosentry}, \cmdname{useGlosentry} and \cmdname{gls},
+%the information is saved in a file with the extension \filetype{glo}
+%(unless the \icmdname{makeglossary} command is omitted, in which case
+%the glossary information is simply ignored.) A \appname{makeindex}
+%style file\index{makeindex style file (.ist)|see{file types, ist}}
+%(\filetype{ist}) is also created, which is customized for the
+%document, and can be passed to \appname{makeindex}.
+%
+%For example, suppose your document is called \texttt{mydoc.tex},
+%the glossary will be saved in the file
+%\texttt{mydoc.}\filetype{glo}, and the \appname{makeindex} style
+%file \texttt{mydoc.}\filetype{ist} will be created.
+% These files can then be passed to \appname{makeindex} as follows:
+%\begin{verbatim}
+%makeindex -s mydoc.ist -t mydoc.glg -o mydoc.gls mydoc.glo
+%\end{verbatim}
+%which generates the output file \texttt{mydoc.}\filetype{gls},
+%with transcript written to
+%\texttt{mydoc.}\filetype{glg}.
+%
+%The Perl script \appname{makeglos.pl} provided with this package
+%allows you to use \appname{makeindex} without having to remember
+%all the command line options. The command
+%\begin{verbatim}
+%makeglos.pl mydoc
+%\end{verbatim}
+%will perform the command:
+%\begin{verbatim}
+%makeindex -s mydoc.ist -t mydoc.glg -o mydoc.gls mydoc.glo
+%\end{verbatim}
+%In addition, \appname{makeglos.pl} also takes the option
+%\texttt{-m} which can be used to collate entries where the
+%same name has multiple descriptions.
+%\changes{2.14}{2005 May 28}{makeglos -m switch added}
+%
+%\appname{makeglos.pl} has the following syntax:
+%\begin{verbatim}
+%makeglos.pl [-ilqrgm] [-s sty] [-o gls] [-t log] [-p num] <filename>
+%\end{verbatim}
+%where all switches, apart from \texttt{-m} are the same as
+%those for \appname{makeindex}. If there are multiple glossary types
+%(see
+%\autoref{sec:newglostype}) and the file extension is omitted, \appname{makeglos.pl} will
+%iterate through each glossary type (it will pick up the relevant
+%information from the auxiliary file).
+%
+%The name of the \filetype{ist} file can be changed by redefining
+%the command \cmdname{istfilename}\DescribeMacro{\istfilename}
+%\emph{before} \cmdname{makeglossary}.
+%For example:
+%\begin{verbatim}
+%\renewcommand{\istfilename}{foo.ist}
+%\makeglossary
+%\end{verbatim}
+%Only one \filetype{ist} file will be created per document, even if
+%you have multiple glossaries with different styles. The only
+%circumstance where you will need multiple \filetype{ist} files for
+%a single document is when you have multiple glossaries that use
+%different counters with different compositors, but this is rarely
+%likely to occur.
+%
+%Creation of the \filetype{ist} file can be suppressed by issuing
+%the command \cmdname{noist}\DescribeMacro{\noist}\ before
+%\icmdname{makeglossary}. It will also be suppressed when the
+%command \icmdname{nofiles} is used, or if the command
+%\icmdname{makeglossary} is omitted.
+%
+%It should be noted that there are a few packages that can
+%cause problems with the creation of the \filetype{ist} file,
+%for example \styname{ngerman}. If you encounter problems
+%when \LaTeX\ is processing the \icmdname{makeglossary} command,
+%or if you get errors from \appname{makeindex} complaining about
+%the style file, this is the most probable cause.
+%See \autoref{sec:trouble}, item~\ref{itm:ngerman} for
+%information on how to fix this.
+%
+%\section{Displaying the Glossary}
+%
+% Once the \filetype{gls} file has been created by
+%\appname{makeindex} (as described in the previous
+% section) the glossary can then be included in the document with
+%the command \cmdname{printglossary}\DescribeMacro{\printglossary}.
+% If chapters are defined, the glossary will start
+%with\SpecialMainIndex{glossaryname}
+%\begin{verbatim}
+%\chapter*{\glossaryname}
+%\end{verbatim}
+%If not, it will start with
+%\begin{verbatim}
+%\section*{\glossaryname}
+%\end{verbatim}
+%The format of the main body of the glossary depends on the
+%options passed to the package.
+%
+%\section{Package Options}
+%\label{sec:options}
+%
+%The package options must be specified as a comma-separated list
+%of \meta{key}=\meta{value} pairs. Available options are:
+%\begin{description}
+%\item[\pkgopt{style}] The glossary style. Values:
+%\index{glossary style|see{package options, style}}
+%\begin{description}
+%\item[\pkgoptval{list}{style}] use
+%\envname{description} environment in the glossary
+%\item[\pkgoptval{altlist}{style}] modified
+%version of \pkgopt[list]{style}. The description starts on the
+%line following the name of the term being defined.
+%\changes{2.0}{2004 September 21}{Package option \texttt{altlist}
+%style}
+%\item[\pkgoptval{super}{style}] use
+%\envname{supertabular} environment in the glossary
+%\item[\pkgoptval{long}{style}] use
+%\envname{longtable} environment in the glossary (Default)
+%\end{description}
+%
+%\item[\pkgopt{header}]\index{glossary header|see{package options, header}} Glossary
+%header. Values:
+%\begin{description}
+%\item[\pkgoptval{none}{header}] The glossary
+%doesn't have a heading (Default)
+%\item[\pkgoptval{plain}{header}] The glossary
+%has a heading
+%\end{description}
+%
+%\item[\pkgopt{border}]\index{glossary border|see{package options, border}} Glossary
+%border. Values:
+%\begin{description}
+%\item[\pkgoptval{none}{border}] The glossary
+%doesn't have a border (Default)
+%\item[\pkgoptval{plain}{border}] Border
+%around the main body of the glossary
+%\end{description}
+%
+%\item[\pkgopt{cols}]\index{glossary columns|see{package options, cols}} Number of
+%columns. Values:
+%\begin{description}
+%\item[\pkgoptval{2}{cols}] The entry name and description are in two separate
+%columns with the associated page numbers in the same column as
+%the description. (Default)
+%\item[\pkgoptval{3}{cols}] The entry name, description and associated page numbers
+%are in three separate columns.
+%\end{description}
+%
+% \changes{1.1}{2004 August 14}{Package option \texttt{number}}
+% \changes{2.4}{2006 July 20}{Package option \texttt{number} modified
+%so that any counter can be used}
+%\item[\pkgopt{number}]
+% Associated number corresponding to each entry.
+%This may either be the keyword \pkgoptval{none}, indicating that
+%the corresponding numbers should be suppressed, or it can be the
+%name of a \LaTeX\ counter. The default is \pkgopt[page]{number}.
+%
+%\item[\pkgopt{toc}]\index{table of contents, adding to|see{package options, toc}}
+%Boolean variable:
+%\changes{2.0}{2004 September 21}{Package option \texttt{toc}}
+%\begin{description}
+%\item[\pkgoptval{true}{toc}] Add glossary to table of contents
+%\item[\pkgoptval{false}{toc}] Omit glossary from table of contents (Default)
+%\end{description}
+%Note that if you specify this option, you will need to run
+%\LaTeX\ twice after generating the glossary.
+%
+%\item[\pkgopt{hypertoc}]
+%Boolean variable. This is similar to the package option
+%\pkgopt{toc}, but if you are using the \styname{hyperref}
+%package, \pkgopt{hypertoc} will generate a link to the
+%point immediately before the glossary title, whereas \pkgopt{toc} will
+%have a hyperlink to just after the glossary title. Note
+%that you can not use both \pkgopt[true]{toc} and
+%\pkgopt[true]{hypertoc}. Default value:
+%\pkgopt[false]{hypertoc}.
+%\changes{2.24}{2005 September 27}{Package option \texttt{hypertoc}}
+%
+%\item[\pkgopt{hyper}] Boolean
+%variable:
+%\changes{2.0}{2004 September 21}{Package option \texttt{hyper}}
+%\begin{description}
+%\item[\pkgoptval{true}{hyper}] Make associated numbers in the
+%glossary a hypertext link, and also make acronyms, and the text
+%given by \icmdname{xglossary} have a hyperlink to their
+%corresponding entries in the glossary.
+%\item[\pkgoptval{false}{hyper}] Don't make associated numbers a hypertext link
+%\end{description}
+%If the \styname{hyperref} or \styname{html} package has
+%been loaded prior to loading \texttt{glossary.sty},
+%\pkgopt[true]{hyper} is set, otherwise
+%the default is \pkgopt[false]{hyper}. Note that this package
+%option now encompasses the old \pkgopt{hyperacronym} option.
+%
+%\item[\pkgopt{section}] Boolean variable:
+%\changes{2.12}{2004 November 1}{Package option \texttt{section}}
+%\begin{description}
+%\item[\pkgoptval{true}{section}] Make the glossary an unnumbered
+%section, even if chapters are defined%
+%
+%\item[\pkgoptval{false}{section}] Only make glossary an
+%unnumbered section if chapters are not defined (default).
+%\end{description}
+%
+%\item[\pkgopt{acronym}] Boolean variable:
+%\changes{2.17}{2005 June 28}{Package option \texttt{acronym}}
+%\begin{description}
+%\item[\pkgoptval{true}{acronym}] Make the list of acronyms
+%separate from the main glossary.
+%
+%\item[\pkgoptval{false}{acronym}] The acronyms will all
+%be placed in the main glossary. (Default)
+%\end{description}
+%
+%\item[\pkgopt{global}] Boolean variable:
+%\changes{2.31}{2005 December 5}{Package option \texttt{global}}
+%\begin{description}
+%\item[\pkgoptval{false}{global}] Acronym commands only have
+%a local effect. (Default)
+%\item[\pkgoptval{true}{global}] Acronym commands have a global
+%effect.
+%\end{description}
+%\end{description}
+% The \pkgopt{border}, \pkgopt{header} and \pkgopt{cols} options
+%should not be used in conjunction with \pkgopt[list]{style}
+%or \pkgopt[altlist]{style}, as they only make sense with one of
+%the tabular-style options.
+%The value for the boolean variables can be omitted if they are
+%to be set. For example
+% \pkgopt{toc} is equivalent to \pkgopt[true]{toc}. Note that the
+%\pkgoptval{altlist}{style} style is better suited to
+%glossaries with long entry names.
+%
+%You can set up your own preferred defaults in a configuration
+%file%
+%\index{glossary.cfg|see{file type, cfg}}.
+%The file must be called \texttt{glossary.}\filetype{cfg} and
+%should be placed somewhere on the \TeX\ path. In this file you
+%can use the command \DescribeMacro{\glossarypackageoptions}%
+%\noindent
+%\cmdname{glossarypackageoptions}\verb'{'\meta{option-list}\verb/}/
+%\noindent
+%where \meta{option-list} is a comma-separated list of
+%\meta{key}=\meta{value} pairs, as passed to the
+%\styname{glossary}
+%package. Note that this command may only be used in the
+%configuration file.
+%
+%\subsection{Examples}
+% Suppose the document has the following \icmdname{glossary}
+%commands:
+%\begin{center}\ttfamily
+%\begin{tabular}{@{\rmfamily}ll@{}l}
+%\bfseries Page & \multicolumn{2}{c}{\bfseries\rmfamily Command}\\
+%1 & \cmdname{glossary}\{&name=diagonal matrix,\\
+% & &description=Matrix whose only non-zero\\
+% & &entries are along the leading diagonal\}\\
+%2 & \cmdname{glossary}\{&name=identity matrix,\\
+% & &description=Diagonal matrix with 1s along the \\
+% & &leading diagonal\}\\
+%4 & \cmdname{glossary}\{&name=singular matrix,\\
+% & &description=Matrix with zero determinant\}
+%\end{tabular}
+%\end{center}
+%
+%\noindent Variations:
+%\begin{enumerate}
+%\item If \pkgopt[list]{style} is chosen, the glossary will look like:
+%\begin{description}
+%\item[diagonal matrix] Matrix whose only non-zero entries are along the leading
+% diagonal, 1
+%\item[identity matrix] Diagonal matrix with 1s along the leading diagonal, 2
+%\item[singular matrix] Matrix with zero determinant, 4
+%\end{description}
+%
+%\item If \pkgopt[altlist]{style} is chosen, the glossary will look like:
+%\begin{description}
+%\item[diagonal matrix]\mbox{}\par Matrix whose only non-zero entries are along the leading
+% diagonal, 1
+%\item[identity matrix]\mbox{}\par Diagonal matrix with 1s along the leading diagonal, 2
+%\item[singular matrix]\mbox{}\par Matrix with zero determinant, 4
+%\end{description}
+%
+%\item If \pkgopt[list]{style},\pkgopt[none]{number}%
+% is chosen, the glossary will look like:
+%\begin{description}
+%\item[diagonal matrix] Matrix whose only non-zero entries are along the leading
+% diagonal
+%\item[identity matrix] Diagonal matrix with 1s along the leading diagonal
+%\item[singular matrix] Matrix with zero determinant
+%\end{description}
+%
+%\item If \pkgopt[long]{style},\pkgopt[none]{border},%
+%\pkgopt[none]{header},\pkgopt[page]{number}
+%is chosen (default), the glossary will look like:\\[10pt]
+%\newlength{\descriptionwidth}\setlength{\descriptionwidth}{0.6\textwidth}
+%\begin{tabular}{@{\hspace{\tabcolsep}\bfseries}lp{\descriptionwidth}} &
+%\\ diagonal matrix & Matrix whose only non-zero entries are along the leading
+% diagonal, 1
+%\\ &
+%\\identity matrix & Diagonal matrix with 1s along the leading diagonal, 2
+%\\ &
+%\\ singular matrix & Matrix with zero determinant, 4
+%\end{tabular}
+%
+%\item If \pkgopt[long]{style},\pkgopt[plain]{border},%
+%\pkgopt[none]{header} is chosen,
+%the glossary will look like:
+%\\[10pt]
+%\begin{tabular}{|@{\hspace{\tabcolsep}\bfseries}lp{\descriptionwidth}|}\hline &
+%\\ diagonal matrix & Matrix whose only non-zero entries are along the leading
+% diagonal, 1
+%\\ &
+%\\identity matrix & Diagonal matrix with 1s along the leading diagonal, 2
+%\\ &
+%\\ singular matrix & Matrix with zero determinant, 4
+%\\ & \\\hline
+%\end{tabular}
+%
+%\item If \pkgopt[long]{style},\pkgopt[plain]{border},%
+%\pkgopt[plain]{header} is
+%chosen, the glossary will look like:
+%\\[10pt]
+%\begin{tabular}{|@{\hspace{\tabcolsep}\bfseries}lp{\descriptionwidth}|}\hline
+%\bfseries Notation & \bfseries Description\\\hline\hline &
+%\\ diagonal matrix & Matrix whose only non-zero entries are along the leading
+% diagonal, 1
+%\\ &
+%\\identity matrix & Diagonal matrix with 1s along the leading diagonal, 2
+%\\ &
+%\\ singular matrix & Matrix with zero determinant, 4
+%\\ & \\\hline
+%\end{tabular}
+%
+%\item If \pkgopt[long]{style},\pkgopt[none]{border},%
+%\pkgopt[plain]{header},\pkgopt[3]{cols} is chosen, the
+%glossary will look like:
+%\\[10pt]
+%\begin{tabular}{@{\hspace{\tabcolsep}\bfseries}lp{\descriptionwidth}l}
+%\bfseries Notation & \bfseries Description & \\ &
+%\\ diagonal matrix & Matrix whose only non-zero entries are along the leading
+% diagonal & 1
+%\\ &
+%\\identity matrix & Diagonal matrix with 1s along the leading diagonal & 2
+%\\ &
+%\\ singular matrix & Matrix with zero determinant & 4
+%\\ & \\
+%\end{tabular}
+%\end{enumerate}
+%
+%
+%\section{Defining New Glossary Types}
+%\label{sec:newglostype}
+%
+%A new type of glossary can be defined using the command:\DescribeMacro{\newglossarytype}\\[5pt]
+%\cmdname{newglossarytype}\verb/[/\meta{log-ext}\verb"]{"\meta{name}\verb'}{'\meta{out-ext}\verb+}{+\meta{in-ext}\verb!}[!\meta{style list}\verb-]-\\[5pt]
+%For example, suppose you want your document to have a separate
+%index of terms and index of notation,
+%you could use \icmdname{makeglossary}, \icmdname{glossary},
+%\icmdname{xglossary} and \icmdname{printglossary} for the first
+%glossary, and define a new type of glossary called say,
+%\texttt{notation}, using
+%\begin{verbatim}
+%\newglossarytype[nlg]{notation}{not}{ntn}
+%\end{verbatim}
+%which will create the analogous commands:
+%\cmdname{makenotation}, \cmdname{notation}, \cmdname{xnotation}
+%and \cmdname{printnotation} which can be used for the second
+%glossary.
+%
+%\changes{2.3}{2005 Nov 18}{Added extra optional argument to 'newglosarytype}
+%As from version 2.3, \cmdname{newglossarytype} now has an
+%additional optional argument \meta{style list}. This should
+%be a comma separated list of \meta{key}=\meta{value} pairs
+%that can be used to specify the style of the new glossary.
+%If omitted, the new glossary will have the same format
+%as the main glossary. The following options are available:
+%\texttt{number}, \texttt{style}, \texttt{header}, \texttt{border} and
+%\texttt{cols}. These can take the same values as those
+%given in the package options (described in section~\ref{sec:options}).
+%
+%The command \cmdname{newglossarytype} should only occur in the
+%preamble. The new commands
+% \cmdname{make}\meta{name}, \verb'\'\meta{name},
+%\verb'\x'\meta{name} and \cmdname{print}\meta{name} all have the
+%same format as their ``glossary'' counter-parts.
+%
+%The glossary information will be saved to a file
+%with the extension given by \meta{out-ext} (analogous to
+%\filetype{glo}), which can then be passed to \appname{makeindex}
+%either directly or via \appname{makeglos.pl},
+%and the file to be read in (i.e.\ the file created by
+%\appname{makeindex}) will have the extension \meta{in-ext}
+%(analogous to \filetype{gls}).
+%
+%The optional argument \meta{log-ext} indicates
+%the extension for the \appname{makeindex} log file, if omitted the
+%extension \filetype{glg} is used. This is not used by \LaTeX,
+%however \appname{makeglos.pl} reads in this information from
+%the \LaTeX\ auxiliary file and passes it to \appname{makeindex}.\changes{2.22}{2005 Sept 12}{changed makeglos to read information in from .aux instead of .log file}
+%
+%For the above \texttt{notation}
+%example, if your document is called, say, \texttt{mydoc.tex},
+% you will need to do the following:
+%\begin{verbatim}
+%latex mydoc
+%makeglos.pl mydoc
+%latex mydoc
+%\end{verbatim}
+%(You may need to do an extra \verb"latex mydoc" to get
+%cross-references up-to-date.) Note that if you don't specify the
+%file extension when using \appname{makeglos.pl}, it will
+%check the transcript file from the \LaTeX\ run to determine
+%all the glossary types, so, for this example,
+%\begin{verbatim}
+%makeglos.pl mydoc
+%\end{verbatim}
+%is equivalent to:
+%\begin{verbatim}
+%makeglos.pl mydoc.glo
+%makeglos.pl mydoc.not
+%\end{verbatim}
+%since \appname{makeglos.pl} has read in the information
+%for the \texttt{notation} glossary type from the file
+%\texttt{mydoc.log}.
+%
+%If you don't have Perl installed
+%on your system, or for any other reason are unable to use
+%\appname{makeglos.pl}, you can call \appname{makeindex}
+%explicitly:
+%\begin{verbatim}
+%latex mydoc
+%makeindex -s mydoc.ist -t mydoc.glg -o mydoc.gls mydoc.glo
+%makeindex -s mydoc.ist -t mydoc.nlg -o mydoc.ntn mydoc.not
+%latex mydoc
+%\end{verbatim}
+%
+%Note that you can use the command
+%\icmdname{printglossary}\texttt[\meta{name}\texttt]
+%instead of \verb'\print'\meta{name}.
+%These two commands have the same effect when using \LaTeX,
+%however, they have a slightly different effect when
+%using \LaTeX2HTML (see \autoref{sec:l2h}).
+%
+%If the command \verb'\'\meta{glossary-type}\verb"name"
+%is defined, (e.g.\ \verb'\notationname' in the above example)
+%this will be used as the title for the specified
+%glossary. If this command is not defined, \icmdname{glossaryname}
+%will be used instead.
+%If the command \verb'\short'\meta{glossary-type}\verb"name"
+%is defined, (e.g.\ \cmdname{shortnotationname} in the above
+%example) this will be used for the table of contents
+%entry, otherwise \verb'\'\meta{glossary-type}\verb"name" will
+%be used instead.
+%For example:
+%\begin{verbatim}
+%\newglossarytype[nlg]{notation}{not}{ntn}
+%\newcommand{\notationname}{Index of Notation}
+%\newcommand{\shortnotationname}{Notation}
+%\end{verbatim}
+%
+%\section{Acronyms}
+%
+%\changes{2.0}{2004 September 21}{Acronyms}
+%The \styname{glossary} package provides the command\DescribeMacro{\newacronym}:\\[5pt]
+%\begin{ttfamily}
+%\cmdname{newacronym}[\textrm{\meta{cmd-name}}]\{\textrm{\meta{acronym}}\}\{\textrm{\meta{long}}\}\{\textrm{\meta{glossary entry}}\}
+%\end{ttfamily}\\[5pt]
+%which can be used to define acronyms. The argument \meta{long}
+%is the full name, the argument \meta{acronym} is the acronym for
+%\meta{long} and \meta{glossary entry} is the glossary information
+%in the form used by the \icmdname{glossary} command. If the
+%optional argument \meta{cmd-name} is missing,
+%\cmdname{newacronym} will create a command called
+%\verb!\!\meta{acronym}, otherwise it will create a command
+%called \verb'\'\meta{cmd-name} (henceforth denoted \cmdname{}\meta{acr-name}).
+%This command can then be used throughout the text. The first
+%instance of this command is equivalent to:\\[10pt]
+%\meta{long} \texttt(\icmdname{xacronym}\verb"{"\gloskey{name}\texttt{=}\meta{long} \texttt(\meta{acronym}\texttt{),}\meta{glossary entry}\verb'}{'\meta{acronym}\verb/}/\texttt)\\[10pt]
+%subsequent instances will be equivalent to:\\[10pt]
+%\icmdname{xacronym}\verb"{"\gloskey{name}\texttt{=}\meta{long} \texttt(\meta{acronym}\texttt{),}\meta{glossary entry}\verb'}{'\meta{acronym}\verb/}/\\[10pt]
+%The command \cmdname{}\meta{acr-name} also has a starred
+%version, which will make the first letter of \meta{long}
+%uppercase (for use at the start of a sentence).
+%
+%Note that if you want to change the format of the acronym,
+%for example, if you want the acronym to appear in small caps,
+%you will need to not only use the optional argument, but you
+%will also need to use the \gloskey{sort} key, otherwise you
+%will get an error. For example:
+%\begin{verbatim}
+%\newacronym[SVM]{\textsc{svm}}{Support Vector Machine}%
+%{description=Statistical pattern recognition
+%technique,sort=svm}
+%\end{verbatim}
+%
+%If the package option \pkgopt{acronym} is not set (default)
+%\icmdname{xacronym}, is a synonym for \icmdname{xglossary}, and
+%the acronyms will appear in the main glossary (remember to
+%specify \cmdname{makeglossary} and \cmdname{printglossary}).
+%If the package option \pkgopt[true]{acronym} is specified, a
+%new glossary type called \texttt{acronym} will be defined as:
+%\begin{verbatim}
+%\newglossarytype[alg]{acronym}{acr}{acn}
+%\providecommand{\acronymname}{List of Acronyms}
+%\end{verbatim}
+%You will then need to use the commands \icmdname{makeacronym}
+%and \icmdname{printacronym} to make the list of acronyms appear.
+%You will also need to run the \filetype{acr} file through
+%\appname{makeindex} (or \appname{makeglos.pl}). For example:
+%\begin{verbatim}
+%makeindex -s mydoc.ist -t mydoc.alg -o mydoc.acn mydoc.acr
+%\end{verbatim}
+%alternatively:
+%\begin{verbatim}
+%makeglos.pl mydoc
+%\end{verbatim}
+%Note that the package option \pkgopt[true]{acronym} is only
+%appropriate if you want both a glossary and a separate list of
+%acronyms. If you do not write in English, you can set up your
+%own language definition
+%for \cmdname{acronymname} in the configuration file
+%\texttt{glossary}\filetype{cfg}. For example:
+%\begin{verbatim}
+%\newcommand{\acronymname}{Akronyme}
+%\end{verbatim}
+%(If \texttt{glossary.cfg} does not exist, create a new file, add the
+%appropriate definition of \cmdname{acronymname}, and save it to the
+%same directory as \texttt{glossary.sty}.)
+%
+%\changes{2.1}{2004 October 25}{name field can be omitted in
+%\texttt{'newacronym}}
+%The \gloskey{name} key does not need to appear in \meta{glossary
+%entry}, as it is constructed from \meta{long} and
+%\meta{acronym}. By default this will be in the form:
+%\meta{long} (\meta{acronym}), however the format can be
+%overridden using the
+%command:\DescribeMacro{\setacronymnamefmt}\\[10pt]
+%\cmdname{setacronymnamefmt}\{\meta{format}\}\\[10pt]
+%Within \meta{format} the following commands may
+%be used to represent \meta{long} and \meta{acronym}:
+%\DescribeMacro{\glolong}\icmdname{glolong} and
+%\DescribeMacro{\gloshort}\icmdname{gloshort}. For example,
+%suppose you just want the acronym to appear in the glossary entry,
+%and not its full length name, then you would need to do:
+%\begin{verbatim}
+%\setacronymnamefmt{\gloshort}
+%\end{verbatim}
+%
+%\changes{2.32}{2006 January 5}{added \texttt{'setacronymdescfmt}}
+%As from version 2.32, you can also modify the way the description
+%key is formatted for acronyms using\DescribeMacro{\setacronymdescfmt}:\\[10pt]
+%\cmdname{setacronymdescfmt}\{\meta{format}\}\\[10pt]
+%Within \meta{format} you may use the commands \icmdname{glolong}
+%and \icmdname{gloshort} (as above), and you can also use
+%the command \icmdname{glodesc} which is the description as
+%specified by the \gloskey{description} key in
+%\icmdname{newacronym}. This means that if you are using
+%a tabular style glossary, you can have the abbreviated
+%form in one column and the long form in the second column
+%with the description. For example, the following:
+%\begin{verbatim}
+%\setacronymnamefmt{\gloshort}
+%\setacronymdescfmt{\glolong: \glodesc}
+%\newacronym{svm}{support vector machine}{description=Statistical
+%pattern recognition technique}
+%\end{verbatim}
+%will generate a glossary entry of the form:
+%\begin{verbatim}
+%\glossary{name=svm,description=support vector machine: Statistical
+%pattern recognition technique}
+%\end{verbatim}
+%Note that if you omit \icmdname{glodesc} from
+%\cmdname{setacronymdescfmt} the description specified
+%in \cmdname{newacronym} will be ignored. So
+%\begin{verbatim}
+%\setacronymnamefmt{\gloshort}
+%\setacronymdescfmt{\glolong}
+%\newacronym{svm}{support vector machine}{description=Statistical
+%pattern recognition technique}
+%\end{verbatim}
+%will generate a glossary entry of the form:
+%\begin{verbatim}
+%\glossary{name=svm,description=support vector machine}
+%\end{verbatim}
+%
+%You will need to specify the \gloskey{name} key explicitly if
+%the name contains a \appname{makeindex} special character.
+%For example:
+%\begin{verbatim}
+%\newacronym{RNA}{Ribonukleins\"aure}{name={Ribonukleins\""aure (RNA)}}
+%\end{verbatim}
+%Note that this will override any formatting specified by
+%\icmdname{setacronymnamefmt}.
+%
+%Given an acronym named \meta{acr-name} (the command name
+%associated with the acronym as defined in
+%\cmdname{newacronym} without the preceding backslash),
+%the following commands are also available:
+%
+%\vspace{10pt}
+%\changes{2.11}{2004 October 25}{\texttt{'useacronym}}
+%\changes{2.18}{2005 July 5}{Fixed bug in 'useacronym}
+%\changes{2.26}{2005 November 17}{Fixed bug in 'useacronym}
+%\noindent
+%\cmdname{useacronym}\verb"["\meta{insert}\verb']{'\meta{acr-name}\verb!}!\DescribeMacro{\useacronym}\\[5pt]
+%This command can be used instead of \cmdname{}\meta{acr-name}.
+%\cmdname{useacronym} also has a starred version equivalent to
+%\cmdname{}\meta{acr-name}\texttt{*}.
+%The optional argument \meta{insert} allows you to insert text
+%after \meta{long}, if this is the first occurrence of the
+%acronym, or after the acronym on subsequent occurrences.
+%
+%\vspace{10pt}
+%\changes{2.14}{2005 May 28}{'resetacronym added}\noindent
+%\cmdname{resetacronym}\verb'{'\meta{acr-name}\verb"}"
+%\DescribeMacro{\resetacronym}\\[10pt]
+%This command will cause the next use of \cmdname{}\meta{acr-name}
+%to produce the long version. To reset all acronyms
+%do \cmdname{resetallacronyms}.\DescribeMacro{\resetallacronyms}
+%\changes{2.21}{2005 July 27}{'resetallacronyms added}
+%
+%\vspace{10pt}
+%\changes{2.31}{2005 December 5}{'unsetacronym added}\noindent
+%\cmdname{unsetacronym}\verb'{'\meta{acr-name}\verb"}"
+%\DescribeMacro{\unsetacronym}\\[10pt]
+%This command will cause all subsequent uses of
+%\cmdname{}\meta{acr-name} to produce the short version.
+%To unset all acronyms
+%do \cmdname{unsetallacronyms}.\DescribeMacro{\unsetallacronyms}
+%\changes{2.31}{2005 December 5}{'unsetallacronyms added}
+%
+%\vspace{10pt}
+%\changes{2.14}{2005 May 28}{'ifacronymfirstuse added}\noindent
+%\cmdname{ifacronymfirstuse}%
+%\verb'{'\meta{acr-name}%
+%\verb'}{'\meta{true text}\verb"}{"\meta{false text}\verb!}!
+%\DescribeMacro{\ifacronymfirstuse}\\[10pt]
+%This will test if the acronym has been used yet. If it has been
+%used, \meta{true text} will be implemented, otherwise
+%\meta{false text} will be implemented.
+%
+%The long and short forms of an acronym can be produced explicitly
+%without a corresponding glossary entry, using the commands:\\[10pt]
+%\changes{2.19}{2005 July 8}{'acrln added}%
+%\cmdname{acrln}\verb'{'\meta{acr-name}\verb/}/\DescribeMacro{\acrln}\\
+%\cmdname{acrsh}\verb'{'\meta{acr-name}\verb/}/\DescribeMacro{\acrsh}
+%\changes{2.19}{2005 July 8}{'acrsh added}\\[10pt]
+%Or, alternatively:\\[10pt]
+%\cmdname{}\meta{acr-name}\texttt{long}\\
+%\cmdname{}\meta{acr-name}\texttt{short}\\[10pt]
+%The first two commands (\cmdname{acrln} and \cmdname{acrsh})
+%have a starred form that makes the first letter uppercase.
+%The other two commands, simply contain \meta{long} and
+%\meta{acronym}.
+%
+%Note that since these four commands do not generate glossary
+%entries they will therefore not contain any hyperlinks, even if
+%you have specified the \pkgopt{hyper} package option. They are
+%provided for use in situations where the associated glossary
+%command may cause problems (e.g.\ in a sectioning command.)
+%
+%Note that, as with all \LaTeX\ commands, spaces following
+%command names are ignored so if, for example, you defined
+%a new acronym called, say, SVM, then the command \verb/\SVM/ will
+%ignore any spaces following it. To force a space, you
+%can either place an empty set of braces after the command
+%name (e.g.\ \verb/\SVM{}/) or use
+%\cmdname{\textvisiblespace} i.e.\ a backslash followed by
+%a space (e.g.\ \verb/\SVM\ /). Alternatively, as from
+%version 2.22, if you load the \styname{xspace} package
+%before loading the \styname{glossary} package, spaces will
+%be put in automatically using \icmdname{xspace}.
+%\changes{2.22}{2005 Sept 16}{Added provision for 'xspace}
+%\changes{2.23}{2005 Sept 17}{Fixed minor bug with hyperlinks and 'glsxspace}
+%\changes{2.28}{2005 July 9}{Fixed erroneous spaces occuring while
+%using xspace}
+%
+%\DescribeMacro{\acronymfont}
+%\changes{2.22}{2005 Sept 12}{Added 'acronymfont}%
+%If you want the acronym to appear in a particular font,
+%for example, small caps, you can redefine the command
+%\cmdname{acronymfont}. For example:
+%\begin{verbatim}
+%\renewcommand{\acronymfont}[1]{\textsc{#1}}
+%\end{verbatim}
+%The default definition of \cmdname{acronymfont} is:
+%\begin{verbatim}
+%\newcommand{\acronymfont}[1]{#1}
+%\end{verbatim}
+%
+%\subsection{Examples}
+%
+%\begin{verbatim}
+%\newacronym{SVM}{Support Vector Machine}{description=Statistical
+%pattern recognition technique}
+%\end{verbatim}
+%This will define the command \cmdname{SVM}. The first time this
+%command is used will display the text: Support Vector Machine
+%(SVM). Subsequent use will simply display: SVM. The next
+%example uses the optional argument \meta{cmd-name} since the
+%acronym contains a non-alphabetical character:
+%\begin{verbatim}
+%\newacronym[KSVM]{K-SVM}{Kernel Support Vector
+%Machine}{description=Statistical pattern recognition
+%technique using the ``kernel trick''}
+%\end{verbatim}
+%This will define the command \cmdname{KSVM}. The first time
+%this command is used will display the text: Kernel Support Vector
+%Machine (K-SVM). Subsequent use will simply display: K-SVM.
+%
+%To test whether or not an acronym has been used:
+%\begin{verbatim}
+%\ifacronymfirstuse{SVM}{a}{an} \SVM\ is \ldots
+%\end{verbatim}
+%If the acronym has not been used, the following text will
+%be produced:\\[10pt]
+%a Support Vector Machine is \ldots\\[10pt]
+%otherwise it will produce:\\[10pt]
+%an SVM is \ldots\\[10pt]
+%To expand the acronym a second time:
+%\begin{verbatim}
+%\chapter{An overview of the \protect\SVM}
+%\resetacronym{SVM}
+%The \SVM\ \ldots
+%\end{verbatim}
+%Note the use of \cmdname{protect} (see
+%note~\ref{itm:fragile} on page~\pageref{itm:fragile}.) In fact, in this situation
+%it would be better to do:
+%\begin{verbatim}
+%\chapter[An overview of the \SVMlong]{An overview of the \protect\SVM}
+%\resetacronym{SVM}
+%The \SVM\ \ldots
+%\end{verbatim}
+%
+%Now suppose you want the text: support vector machine,
+%instead of Support Vector Machine (i.e.\ you don't like the
+%uppercase letters). You can define the acronym as follows:
+%\begin{verbatim}
+%\newacronym{SVM}{support vector machine}{description=Statistical
+%pattern recognition technique}
+%\end{verbatim}
+%however, if the command \cmdname{SVM} occurs at the start of the
+%sentence, you would clearly want the first letter as an
+%uppercase letter. This can be done using \cmdname{SVM*} instead
+%of \cmdname{SVM}. For example:
+%\begin{verbatim}
+%\SVM*\ techniques are widely used \ldots
+%\end{verbatim}
+%This will then come out as: Support vector machine (SVM)
+%techniques are widely used \ldots (Assuming this is the first
+%use of either \cmdname{SVM} or \cmdname{SVM*}.)
+%
+%Alternatively, \icmdname{useacronym}\verb'{SVM}' can be used instead of
+%\cmdname{SVM}. For example:
+%\begin{verbatim}
+%\useacronym*[s]{SVM} are widely used in the area of pattern
+%recognition.
+%\end{verbatim}
+%If this is the first use of the acronym SVM, it will produce the
+%following text:\\[10pt]
+%Support vector machines (SVM) are widely used in the area of
+%pattern recognition.\\[10pt]
+%If this is not the first use of this acronym, it will produce the
+%following text:\\[10pt]
+%SVMs are widely used in the area of pattern recognition.
+%
+%\section{Customizing the Glossary}
+%The \styname{glossary} package provides commands which can be redefined to customize the
+%glossary. The following name commands are defined by this package:
+%\begin{center}\DescribeMacro{\glossaryname}\DescribeMacro{\entryname}\DescribeMacro{\descriptionname}\relax
+%\begin{tabular}{ll}
+%\bfseries Command & \bfseries Default Value\\
+%\cmdname{glossaryname} & Glossary\\
+%\cmdname{shortglossaryname} & \cmdname{glossaryname}\\
+%\cmdname{entryname} & Notation\\
+%\cmdname{descriptionname} & Description
+%\end{tabular}
+%\end{center}
+%The commands \cmdname{entryname} and \cmdname{descriptionname}
+%are put in the first two columns of the header row if you
+%are using one of the tabular glossary styles together with a
+%header row (as specified by the \pkgopt[true]{header} package option).
+%If you are using \pkgopt[3]{cols}, the command
+%\cmdname{glspageheader}\DescribeMacro{\glspageheader}\ will be
+%put in the third column of the header row. By default, this command
+%does nothing.\changes{2.4}{2006 July 20}{'glspageheader added}
+%
+%\changes{2.2}{2005 July 15}{'glossaryname now defined using 'providecommand instead of 'newcommand}
+% \changes{2.15}{2005 June 5}{'shortglossaryname}
+%\changes{2.16}{2005 June 8}{fixed bug preventing changes
+%to 'glossaryname and 'shortglossaryname}
+%\DescribeMacro{\shortglossaryname}
+%The command \cmdname{shortglossaryname} is used for the
+%page headers and table of contents entry.
+% \changes{1.1}{2004 August 14}{'glossarypreamble}%
+% \changes{1.1}{2004 August 14}{'glossarypostamble}%
+%Any text required before or after the glossary can be added
+%by redefining the commands \DescribeMacro{\glossarypreamble}\cmdname{glossarypreamble}
+%and \DescribeMacro{\glossarypostamble}\cmdname{glossarypostamble}.
+%For example.
+%\begin{verbatim}
+%\renewcommand{\glossarypreamble}{Page numbers in
+%italic indicate the main definition\par}
+%\end{verbatim}
+%By default, \cmdname{glossarypreamble} and \cmdname{glossarypostamble} do nothing.
+%
+%\changes{2.3}{2005 Nov 18}{'glsbeforenum}%
+%\changes{2.3}{2005 Nov 18}{'glsafternum}%
+%Any text required before or after the list of page numbers
+%are specified by the commands \cmdname{glsbeforenum}
+%\DescribeMacro{\glsbeforenum}
+%and \cmdname{glsafternum}\DescribeMacro{\glsafternum}.
+%By default, these commands do nothing, any redefinition
+%of these commands should come somewhere before the
+%relevant \cmdname{printglossary} command. For example:
+%\begin{verbatim}
+%\printglossary
+%\renewcommand{\glsbeforenum}{(}
+%\renewcommand{\glsafternum}{)}
+%\printnotation
+%\end{verbatim}
+%This will put the page number list in brackets for the
+%second glossary, but not the first.
+%
+%Individual glossaries can have their styles changed either
+%by setting the style in the final optional argument
+%to \icmdname{newglossarystyle} (see
+%\autoref{sec:newglostype}) or using the command\DescribeMacro{setglossarystyle}:\\[10pt]
+%\cmdname{setglossarystyle}[\meta{type}]\{\meta{style list}\}\\[10pt]
+%For example:
+%\begin{verbatim}
+%\setglossarystyle[acronym]{style=long,border=true,cols=2}
+%\end{verbatim}
+%If \meta{type} is omitted, the change is applied to the main
+%glossary.
+%
+%\changes{1.1}{2004 August 14}{\relax Increased User Flexibility}%
+%\changes{2.14}{2005 May 29}{'setglossary added}
+%\DescribeMacro{\setglossary}
+%The command \cmdname{setglossary}\verb'{'\meta{key-val list}\verb"}"
+%can be used to modify some of the glossary settings. The argument
+%\meta{key-val list} is a comma-separated list of
+%\meta{key}=\meta{value} pairs. Available keys are:
+%\begin{description}
+%\item[\setglos{type}] This is the glossary type.
+%If it is omitted, the standard glossary is assumed.
+%
+%\item[\setglos{glsnumformat}]
+%\changes{1.1}{2004 August 14}{\texttt{'glsnumformat}}%
+%This is the name of the command,
+%\emph{without} the preceding backslash\footnote{Note, you should
+%no longer try redefining the command \cmdname{glsnumformat}, as
+%this now takes an optional argument, allowing for different
+%glossary types}, to format the
+%entry numbers. For example, to make all the entry numbers italic,
+%do:
+%\begin{verbatim}
+%\setglossary{glsnumformat=textit}
+%\end{verbatim}
+%To suppress numbering altogether, you can do:
+%\begin{verbatim}
+%\setglossary{glsnumformat=ignore}
+%\end{verbatim}
+%
+%\item[\setglos{glodelim}] This
+%specifies what to do after the entry description and
+%before the page numbers. The default value is a comma, unless the \pkgopt[3]{cols} option is specified,
+%in which case it has the value \verb"&", or if
+%\pkgopt[altlist]{style},
+%in which case it is simply a space\footnote{This
+%is because the \texttt{altlist} style is intended for use with long descriptions that will look better ending with a
+% full stop which the user can add if desired.}. If the package option \pkgopt[none]{number} is
+%specified, \setglos{glodelim} will have an empty value (unless
+%\pkgopt[3]{cols} is specified,
+%where, again, it will have the value \verb"&".)
+%This setting corresponds to the \istkey{delim\_0} key in the
+%\appname{makeindex} style file.
+%
+%Note that if you want a new line between the description
+%and the list of page numbers you will need to use
+%\cmdname{noexpand}. For example:
+%\begin{verbatim}
+%\setglossary{glodelim={\noexpand\newline}}
+%\end{verbatim}
+%
+%\item[\setglos{delimN}]
+%\changes{1.1}{2004 August 14}{\texttt{'delimN}}
+%The delimiter to be inserted between two
+%page numbers for the same entry. (This corresponds to the
+%\istkey{delim\_n} key in the \appname{makeindex} style file.)
+%By default, this has the value
+%\texttt{,\textvisiblespace} (comma followed by a space). If the
+%package option \pkgopt[none]{number} is chosen, the value is set
+%to empty.
+%
+%\item[\setglos{delimR}]
+%\changes{1.1}{2004 August 14}{'delimR}
+%The delimiter to be inserted between the starting and ending page
+%number range for the same entry. (This corresponds to the
+%\istkey{delim\_r} key in the \appname{makeindex} style file.)
+%By default, this has the value \verb"--". If the
+%package option \pkgopt[none]{number} is chosen, the value is set
+%to empty.
+%
+%\item[\setglos{gloskip}]
+%\changes{2.3}{2005 Nov 18}{'gloskip}
+%This specifies what to do between groups.
+%If \pkgopt[list]{style} or \pkgopt[altlist]{style} this has the
+%value \cmdname{indexspace}, otherwise it creates a blank row
+% in the \envname{longtable} or \envname{supertabular} environment.
+%This command corresponds to the \istkey{group\_skip} key in
+%the \appname{makeindex} style file.
+%Note that as from version 2.3, you should no longer redefine
+%the command \cmdname{gloskip}.
+%
+%\item[\setglos{delimT}]
+%\changes{2.3}{2005 Nov 18}{'delimT}
+%The text to be inserted after the list of
+%page numbers for an entry. (This corresponds to the
+%\istkey{delim\_t} key in the \appname{makeindex} style file.)
+%The default value depends on the glossary style. It does
+%nothing for the list-type styles, and has the value
+%\verb/\\/ for the tabular-type styles. Note that
+%\setglos{delimT} is separate from \cmdname{glsafternum}.
+%
+%For example, if you are using a 2 column tabular style,
+%and you want a blank line after every entry (not just
+%after every group) you can do the following:
+%\begin{verbatim}
+%\setglossary{delimT={\cr & \cr},gloskip={}}
+%\end{verbatim}
+%Note the use of \cmdname{cr} instead of \verb/\\/ and
+%\setglos{gloskip} is set to nothing otherwise there would be
+%a double space between groups.
+%\end{description}
+%Note that:
+%\begin{verbatim}
+%\setglossary{glsnumformat=ignore}
+%\end{verbatim}
+%is equivalent to
+%\begin{verbatim}
+%\setglossary{glsnumformat=ignore,delimN={},delimR={}}
+%\end{verbatim}
+%
+%As from version 2.4\changes{2.4}{2006 July 20}{Added facility to insert text between groups},
+%you can insert text between groups by redefining the
+%commands \cmdname{glogroupSymbols},
+%\cmdname{glogroupNumbers}, \cmdname{glogroupA} \ldots\
+%\cmdname{glogroupZ}. For example, if you are using one
+%of the list styles, the following will print the appropriate
+%heading in bold, followed by a gap:
+%\begin{verbatim}
+%\renewcommand{\glogroupSymbols}{\textbf{Symbols}\indexspace}
+%\renewcommand{\glogroupNumbers}{\textbf{Numbers}\indexspace}
+%\renewcommand{\glogroupA}{\textbf{A}\indexspace}
+%....% similar lines omitted
+%\renewcommand{\glosgroupZ}{\textbf{Z}\indexspace}
+%\end{verbatim}
+%
+%The start and end of the main body of the glossary is given by the commands:
+%\cmdname{beforeglossary}\DescribeMacro{\beforeglossary}{} and
+%\cmdname{afterglossary}\DescribeMacro{\afterglossary}.
+%If the \pkgopt[list]{style}
+%or \pkgopt[altlist]{style}
+%package options are chosen these commands simply begin and end
+%the \envname{description}
+%environment, otherwise these commands begin and end the
+%\envname{longtable} or
+%\envname{supertabular}
+%environment with argument specified by
+%\cmdname{glossaryalignment}\footnote{This isn't quite true
+%anymore, see the documented code for clarification}.\DescribeMacro{\glossaryalignment}
+%
+%\changes{2.1}{2004 October 25}{made glossary compatible with array package}
+%\changes{2.3}{2005 Nov 18}{made glossary compatible with array package}
+%The glossary package no longer conflicts with the \styname{array}
+%package. Changes can now be made to \cmdname{glossaryalignment}
+%regardless of whether or not the \styname{array}
+%package has been used.
+%
+%The command \cmdname{gloitem}\DescribeMacro{\gloitem}\ indicates
+%what to do at the start of each glossary entry.
+%This command takes one argument, which will be the text specified by the \gloskey{name} key
+%in the \icmdname{glossary} command. In the case of the
+%\pkgopt[list]{style} option,
+%\cmdname{gloitem}\verb"{"\meta{text}\verb'}'
+%will do\\[5pt]
+%\verb"\item["\meta{text}\verb']'\\[5pt]
+%or if \pkgopt[altlist]{style}:\\[5pt]
+%\verb"\item["\meta{text}\verb']\mbox{}\par'\\[5pt]
+%otherwise it will do\\[5pt]
+%\meta{text}\verb" &"\\[5pt]
+%This command corresponds to the \istkey{item\_0} key in the
+%\appname{makeindex} style file.
+%
+%If the glossary has a tabular style with a header row
+%(\pkgopt[true]{header} and either \pkgopt[long]{style} or
+%\pkgopt[super]{style}), then the header row for \pkgopt[2]{cols}
+%will be given by:
+%\begin{verbatim}
+%\bfseries\entryname & \bfseries \descriptionname\\
+%\end{verbatim}
+%and the header row for \pkgopt[3]{cols} will be given by:
+%\begin{verbatim}
+%\bfseries\entryname & \bfseries\descriptionname &
+%\bfseries\glspageheader\\
+%\end{verbatim}
+%(It may also contain \cmdname{hline}\cmdname{hline} if the
+%\pkgopt{border} key is set.)
+%
+%If you want to override this, you need to define the command
+%\cmdname{glossaryheader}\footnote{Note that as from version~2.4,
+%you must use \cmdname{newcommand} \emph{not} \cmdname{renewcommand}}%
+%\DescribeMacro{\glossaryheader}.
+%
+%For example, if you are using a tabular style with \pkgopt[2]{cols},
+%and you want the \icmdname{descriptionname} to be centred, you could
+%do:
+%\begin{verbatim}
+%\newcommand{\glossaryheader}{\bfseries\entryname &
+% \hfil\bfseries\descriptionname\\}
+%\end{verbatim}
+%
+%If you want an extra row below the header row, you can define
+%the command\cmdname{glossarysubheader}\DescribeMacro{\glossarysubheader}
+%\changes{2.4}{2006 July 20}{provision for 'glossarysubheader added}
+%For example, if you are using \pkgopt[3]{cols}, and you want an
+%extra row after the header row, you can do:
+%\begin{verbatim}
+%\newcommand{\glossarysubheader}{ & & \\}
+%\end{verbatim}
+%
+%The command \cmdname{glosstail}\DescribeMacro{\glosstail}\ indicates what to do at the end of
+%the \envname{longtable} or \envname{supertabular} environment.
+%
+%The width of the second column for the tabular-type styles is given by the length
+%\cmdname{descriptionwidth}\DescribeMacro{\descriptionwidth}. This value can be changed using
+%the \cmdname{setlength} command (the default value is \verb"0.6\linewidth").
+%
+%\section{Sample Documents}
+%This package comes with the following sample documents:
+%\begin{itemize}
+%\item \texttt{sampleSec.tex} --- This document uses the options:
+%\pkgopt[altlist]{style}, \pkgopt{toc} and
+%\pkgopt[section]{number}. It also loads the
+%\styname{hyperref} package before loading the
+%\styname{glossary} package, so the glossary has hyperlinks
+%to the section numbers. Experimenting with different package
+%options, will illustrate the different glossary styles.
+%You will need to do:
+%\begin{verbatim}
+%pdflatex sampleSec
+%makeglos.pl sampleSec
+%pdflatex sampleSec
+%pdflatex sampleSec
+%\end{verbatim}
+%If you don't want to use \appname{makeglos.pl}, you will need
+%to do
+%\begin{verbatim}
+%makeindex -s sampleSec.ist -t sampleSec.glg -o sampleSec.gls sampleSec.glo
+%\end{verbatim}
+%
+%\item \texttt{sampleNtn.tex} --- This has a glossary and defines
+%a new glossary type called \texttt{notation}. The glossary has
+%associated page numbers, but the new glossary type doesn't.
+%The two glossaries have different styles.
+%You will need to do:
+%\begin{verbatim}
+%latex sampleNtn
+%makeglos.pl sampleNtn
+%latex sampleNtn
+%latex sampleNtn
+%\end{verbatim}
+%If you don't want to use \appname{makeglos.pl}, you will need
+%to do
+%\begin{verbatim}
+%makeindex -s sampleNtn.ist -t sampleNtn.glg -o sampleNtn.gls sampleNtn.glo
+%makeindex -s sampleNtn.ist -t sampleNtn.nlg -o sampleNtn.ntn sampleNtn.not
+%\end{verbatim}
+%
+%\item \texttt{sampleNtn2.tex} ---This is similar to
+%\texttt{sampleNtn.tex}, but uses \icmdname{storeglosentry}.
+%
+%\item \texttt{sampleEq.tex} --- This has a glossary where the
+%numbers in the glossary refer to the equation number rather than
+%the page number (achieved with the package option
+%\pkgopt[equation]{number}). The \icmdname{entryname},
+%\icmdname{descriptionname}, \icmdname{glossaryname} and
+%\icmdname{glspageheader} are all redefined to customize the
+%glossary. You will need to do:
+%\begin{verbatim}
+%latex sampleEq
+%makeglos.pl sampleEq
+%latex sampleEq
+%\end{verbatim}
+%If you don't want to use \appname{makeglos.pl}, you will need
+%to do
+%\begin{verbatim}
+%makeindex -s sampleEq.ist -t sampleEq.glg -o sampleEq.gls sampleEq.glo
+%\end{verbatim}
+%
+%\item \texttt{sampleEqPg.tex} --- This is a modified version of
+%\texttt{sampleEq.tex}. This example has one glossary, where some
+%of the entry numbers refer to the corresponding page number, and
+%some of the entry numbers refer to the corresponding equation
+%number. You will need to do:
+%\begin{verbatim}
+%latex sampleEqPg
+%makeglos.pl sampleEqPg
+%latex sampleEqPg
+%\end{verbatim}
+%If you don't want to use \appname{makeglos.pl}, you will need
+%to do
+%\begin{verbatim}
+%makeindex -s sampleEqPg.ist -t sampleEqPg.glg -o sampleEqPg.gls sampleEqPg.glo
+%\end{verbatim}
+%
+%\item \texttt{sampleAcr.tex} --- This has a glossary containing
+%acronyms. It uses the style \pkgoptval{altlist}{style} as this is better
+%suited to glossaries with long names. It also uses the
+%\styname{hyperref} package, so the page numbers in the
+%glossary will automatically be hyperlinks, and the acronyms
+%within the text will have hyperlinks to their corresponding entry
+%in the glossary. You will need to do:
+%\begin{verbatim}
+%pdflatex sampleAcr
+%makeglos.pl sampleAcr
+%pdflatex sampleAcr
+%pdflatex sampleAcr
+%\end{verbatim}
+%If you don't want to use \appname{makeglos.pl}, you will need
+%to do
+%\begin{verbatim}
+%makeindex -s sampleAcr.ist -t sampleAcr.glg -o sampleAcr.gls sampleAcr.glo
+%\end{verbatim}
+%
+%
+%\item \texttt{sample.tex} --- This has a glossary entry
+%with two different definitions of the same name.
+%If you just use \appname{makeindex}, the two entries
+%will be treated separately, however, if you want them
+%concatenated, you can use \appname{makeglos.pl} with
+%the \texttt{-m} switch. You will need to do:
+%\begin{verbatim}
+%pdflatex sample
+%makeglos.pl -m sample
+%pdflatex sample
+%pdflatex sample
+%\end{verbatim}
+%(Depending on the configuration of your system, you
+%may have to do \texttt{perl makeglos.pl} instead of
+%just \appname{makeglos.pl})
+%
+%If you don't want to use \appname{makeglos.pl}, you will need
+%to do
+%\begin{verbatim}
+%makeindex -s sample.ist -t sample.glg -o sample.gls sample.glo
+%\end{verbatim}
+%however, the entries with the same name but multiple descriptions
+%will not be merged. You will also have to given them different sort
+%keys otherwise you will get duplicate hyper targets.
+%
+%\item \texttt{sample4col.tex}---This illustrates how to
+%modify the glossary style so that it has 4 columns. You
+%will need to do:
+%\begin{verbatim}
+%latex sample4col
+%makeglos.pl sample4col
+%latex sample4col
+%\end{verbatim}
+%
+%\end{itemize}
+%
+%\section{LaTeX2HTML Style File}
+%\label{sec:l2h}
+%
+%A \LaTeX2HTML\ Perl script, \texttt{glossary.}\filetype{perl}, is
+%provided with this package for those wishing to use the
+%glossary package with the \LaTeX2HTML translator.
+%The file \texttt{glossary.}\filetype{perl} should be extracted
+%along with \texttt{glossary.sty} when you run the
+%installation script (\texttt{glossary.ins}) through \LaTeX.
+%
+%\subsection{Limitations}
+%
+%\begin{itemize}
+%\item The only package options supported are:
+%\pkgopt[altlist]{style}, \pkgopt[true]{hyper}, \pkgopt[true]{toc},
+%\pkgopt[true]{acronym} and \pkgopt[false]{acronym}.
+%
+%\item If you have more than one glossary type, the
+%secondary glossaries will occur in the same segment
+%as the primary glossary if you use the command
+%\verb'\print'\meta{name} instead of
+%\verb'\printglossary['\meta{name}\verb"]", where
+%\meta{name} is the name of the glossary type.
+%
+%\item The command \icmdname{setglossary} must be
+%placed in the preamble to have an effect.
+%
+%\item The \icmdname{storeglosentry} commands must be in
+%the document environment to have an effect. (They don't
+%seem to work in the preamble, I don't know why.)
+%
+%\item If you place a \icmdname{glossary} command
+%inside an environment not translated by \LaTeX2HTML
+%(for example, inside a mathematics environment),
+%it will not be entered into the glossary.
+%
+%\item The combinations \verb'""', \verb!"|!, \verb+"!+
+%and \verb'"@' will be correctly translated, unless they
+%occur within a maths environment. This is because
+%the maths environment is translated before being
+%passed to \icmdname{glossary}. You can overcome this
+%by doing, e.g.:\\
+%\cmdname{begin}\verb'{latexonly}'\\
+%\verb'\glossary{name=$"|\mathcal{S}"|$,description=cardinality of set'\\
+%\verb'$\mathcal{S}$,sort=cardinality}'\\
+%\cmdname{end}\verb'{latexonly}'\\
+%\cmdname{begin}\verb'{htmlonly}'\\
+%\verb'\glossary{name=$|\mathcal{S}|$,description=cardinality of set'\\
+%\verb'$\mathcal{S}$,sort=cardinality}'\\
+%\cmdname{end}\verb'{htmlonly}'
+%
+%Alternative, you can use \cmdname{mid} instead:
+%\begin{verbatim}
+%\glossary{name=$\mid\mathcal{S}\mid$,description=cardinality of
+%set $\mathcal{S}$,sort=cardinality}
+%\end{verbatim}
+%
+%\item Glossary items with the same names but different
+%definitions will not be merged.
+%
+%\item The configuration file \texttt{glossary.cfg} is ignored.
+%
+%\end{itemize}
+%
+%
+%\section{Troubleshooting}
+%\label{sec:trouble}
+%
+%This is a list of common problems, for a more up-to-date FAQ, see
+%\url{http://theoval.cmp.uea.ac.uk/~nlct/packages/faq/}.
+%
+%\begin{enumerate}
+%\item My glossary hasn't appeared.
+%
+%Check the following:
+%\begin{itemize}
+%\item Have you included the command \icmdname{makeglossary}
+%in the preamble?
+%
+%\item Have you put the command \icmdname{printglossary} where
+%you want the glossary to appear?
+%
+%\item Have you used \appname{makeglos.pl} or \appname{makeindex},
+%and if you did, did it successfully create the \filetype{gls}
+%file? (Check the transcript \filetype{glg} file.)
+%
+%\begin{itemize}
+%\item If you used \appname{makeindex} directly, did you specify
+%the \filetype{ist} file created by \icmdname{makeglossary},
+%and did you remember to specify the output file with the extension
+%\filetype{gls}?
+%
+%\item When \appname{makeindex} scans the \filetype{ist} file,
+%it should generate the message:
+%\begin{verbatim}
+%9 attributes redefined, 0 ignored
+%\end{verbatim}
+%If you have a number other than 0 ignored, then there is something
+%wrong with the \filetype{ist} file. Some packages can cause
+%problems with the creation of this file, see
+%item~\ref{itm:ngerman} below.
+%\end{itemize}
+%
+%\item Have you remembered to \LaTeX\ your document again
+%after using \appname{makeglos.pl} or \appname{makeindex}?
+%
+%\item Have you used \icmdname{glossary} or \icmdname{xglossary}?
+%
+%\item If you have used \icmdname{storeglosentry}, have you also
+%used \icmdname{useglosentry}, \icmdname{useGlosentry} or
+%\icmdname{gls}?
+%\end{itemize}
+%
+%If you have defined a new glossary type, have you checked
+%all the analogous commands to the above?
+%
+%\item My list of acronyms hasn't appeared.
+%
+%Have you used the \pkgopt[true]{acronym} package option? If no,
+%check the answers to the previous item, if yes, make sure
+%you have used \icmdname{makeacronym} and \icmdname{printacronym}.
+%Have you used any of the acronyms you have defined? Remember
+%that \cmdname{acrsh}, \cmdname{acrln},
+%\cmdname{}\meta{acr-name}\texttt{short} and
+%\cmdname{}\meta{acr-name}\texttt{long} don't generate entries
+%in the list of acronyms, where \cmdname{}\meta{acr-name} is the
+%name of an acronym command.
+%
+%\item My acronym has been expanded twice.
+%
+%By default, if any of your acronym commands occur within a
+%group (this includes environments which form implicit grouping)
+%the effect will be local to that group. You can either unset
+%the acronym outside the group, or use the \pkgopt{global}
+%package option.
+%
+%\item I get an error when using the command
+%\icmdname{saveglosentry}.
+%
+%Don't use this command it's obsolete, use
+%\icmdname{storeglosentry} instead.
+%
+%\item One of more of my glossary entries hasn't appeared.
+%
+%Check the following
+%\begin{itemize}
+%\item If you defined the entry using \icmdname{storeglosentry}
+%have you used either \icmdname{useglosentry},
+%\icmdname{useGlosentry} or \icmdname{gls}?
+%
+%\item Have you remembered to \icmdname{protect} commands
+%such as \cmdname{mathcal} within \icmdname{storeglosentry}?
+%
+%\item Have you used the characters \texttt{@} \texttt{!}
+%\texttt{\textbar} \verb'"'? If so, have you preceded them
+%with a double quote character?
+%\end{itemize}
+%
+%Check the \appname{makeindex} log file to see if there are
+%any error messages.
+%
+%\item My glossary has duplicate entries on separate lines.
+%
+%\LaTeX\ treats multiple spaces equivalent to a single space, but \appname{makeindex}
+%takes spaces into account when determining whether two entries are identical.
+%For example:
+%\begin{verbatim*}
+%\glossary{name=Identity matrix,
+%description=diagonal matrix with 1's along the diagonal}
+%\end{verbatim*}
+%and
+%\begin{verbatim*}
+%\glossary{name=Identity matrix,
+%description=diagonal matrix with 1's along the diagonal}
+%\end{verbatim*}
+%will be treated as different entries by \appname{makeindex},
+%because the first has only one space
+%between `Identity' and `matrix' and the second has two.
+%The easiest way to ensure consistency is to use
+%\icmdname{storeglosentry} together with \icmdname{useglosentry},
+%\icmdname{useGlosentry} or \icmdname{gls}.
+%
+%\item I had an error, fixed it, but I keep getting the same error message.
+%
+%Suppose you've made an error in the \icmdname{glossary} command. For example:
+%\begin{verbatim}
+%\glossary{name=Java,description=A programming language,format=texbf}
+%\end{verbatim}
+%In this case \texttt{textbf} has been mis-spelt. This error will be copied to the \filetype{glo} file,
+%which in turn will be copied to the \filetype{gls} file by
+%\appname{makeindex}. A subsequent run of \LaTeX\ will
+%read this error in. If you fix the error in your main document, the error will still be read in from
+%the \filetype{gls} file. The best thing to do is to delete the
+%\filetype{gls} file, and try again.
+%
+%\item My glossary has ended up wider than my page.
+%
+%This may occur if you have long entry names, and you are using
+%either the \pkgopt[long]{style} or \pkgopt[super]{style}
+%options. The width of the description column is proportional to
+%the line width (in fact, it's \verb"0.6\linewidth")
+%but the first column is as wide as the widest entry name. You
+%can either redefine \icmdname{glossaryalignment} to change the
+%column specifications, or use one of the list-type styles.
+%
+%\item The page numbers in my glossary don't match up with the actual page numbers where the entry
+%was defined.
+%
+%You may need to \LaTeX\ your document again (just as you have to do
+%with \cmdname{tableofcontents}, \cmdname{listoffigures} etc).
+%
+%\item I'm getting a \appname{keyval} error.
+%
+%The \styname{glossary} package uses the \styname{keyval}
+%package to extract the information from \meta{key}=\meta{value}
+%comma separated lists. You need to make sure the syntax is correct.
+%If your \meta{value} contains a
+%comma, you will need to enclose \meta{value} in curly braces. See the \styname{keyval} documentation for
+%further information\footnote{This should be in the directory
+%\texttt{texmf/doc/latex/graphics/}}.
+%
+%\item I've used the \pkgopt{hyper} option, but nothing happens
+%when I click on the numbers in the glossary.
+%
+%Check the following:
+%\begin{enumerate}
+%\item Have you remembered to use PDF\LaTeX\ instead of \LaTeX,
+%or used a driver that understands hyperlinks?
+%\item Have you remembered to use the \styname{hyperref} or
+%\styname{html} package?
+%\item Have you remembered to use a formatting command which uses \cmdname{hyperlink}? (E.g.\ using \glsnumfmt{hyperbf} instead
+%of \texttt{textbf})? Remember to check the \gloskey{format} key
+%in your \icmdname{glossary} commands, and the
+%\setglos{glsnumformat} key in the \icmdname{setglossary}
+%command.
+%\item What application are you using to view the PDF file?
+%Ghostview can display a PDF file, but ignores the links. If you are using Windows, try
+%using Adobe's Acrobat Reader, or if you are using UNIX or Linux, try using \appname{xpdf} or \appname{acroread}.
+%\end{enumerate}
+%
+%\item The \styname{glossary} package conflicts with the
+%\styname{datetime} package.
+%\changes{2.01}{21 Oct 2004}{Fixed conflict with datetime package}
+%
+%This has been fixed in version 2.01.
+%
+%\item I get an error when using certain commands, such as \cmdname{cite} or \verb"~" in \icmdname{newacronym}.
+%
+%This has been fixed in version 2.1.
+%
+%\item I get the following error:
+%\begin{verbatim}
+%! Package array Error: Illegal pream-token (\glossaryalignment): `c' used.
+%\end{verbatim}
+%
+%The \styname{glossary} package used to conflict with the
+%\styname{array} package. This was fixed in version 2.1.
+%As from version 2.3, it doesn't matter whether you load
+%the \styname{glossary} package before or after the
+%\styname{array} package.
+%
+%\item\label{itm:fragile} I get the following error:
+%\begin{verbatim}
+%Use of \@chapter doesn't match its definition
+%\end{verbatim}
+%or
+%\begin{verbatim}
+%! Argument of \@sect has an extra }
+%\end{verbatim}
+%
+%If you want to use an acronym command in a moving argument (such as a chapter heading)
+%you need to \cmdname{protect} it first. Note that if you do put an acronym in a chapter etc
+%heading, it will be expanded for the first time in the table of contents, not
+%in the chapter heading. The best way to get around this is to use the
+%optional argument, e.g.
+%\begin{verbatim}
+%\chapter[Introduction to Kernel Support Vector Machines]{Introduction
+%to \protect\KSVM}
+%\end{verbatim}
+%You will also need to do this if you are using bookmarks in a PDF document.
+%
+%Alternatively, you can do:
+%\begin{verbatim}
+%\resetacronym{KSVM}
+%\chapter{Introduction to \protect\KSVM}
+%\end{verbatim}
+%or if you are using PDFLaTeX:
+%\begin{verbatim}
+%\resetacronym{KSVM}
+%\chapter{Introduction to \texorpdfstring{\protect\KSVM}{KSVM}}
+%\end{verbatim}
+%
+%\item\label{itm:ngerman} The \styname{glossary} package conflicts with
+%\styname{ngerman}.
+%
+%This problem is caused by the fact that \styname{ngerman}
+%redefines the effect of the double quote
+%character, but this character is used in the creation of the
+%\filetype{ist} \appname{makeindex} style file.
+%Try one of the following methods:
+%\begin{enumerate}
+%\item Include the \styname{ngerman} package after the
+%\icmdname{makeglossary} command:
+%\begin{verbatim}
+%\usepackage{glossary}
+%\makeglossary
+%\usepackage{ngerman}
+%\end{verbatim}
+%
+%\item First omit the \styname{ngerman} package and include
+%\icmdname{makeglossary} then \LaTeX\ your document.
+%This will create the \filetype{ist} file. Then include the
+%\styname{ngerman} package, and insert \icmdname{noist} before
+%the \icmdname{makeglossary} command, this will prevent further attempts to generate the \filetype{ist} file.
+%\begin{verbatim}
+%\usepackage{ngerman}
+%\usepackage{glossary}
+%\noist\makeglossary
+%\end{verbatim}
+%
+%\item Use \icmdname{noist}, as above, and create the
+%\filetype{ist} file
+%in an ordinary text editor. The file should contain the
+%following lines:
+%\begin{verbatim}
+%keyword "\\glossaryentry"
+%preamble "\\begin{theglossary}"
+%postamble "\n\\end{theglossary}\n"
+%group_skip "\\gloskip "
+%item_0 "\n\\gloitem "
+%delim_0 "\n\\glodelim "
+%page_compositor "-"
+%delim_n "\\delimN "
+%delim_r "\\delimR "
+%\end{verbatim}
+%\end{enumerate}
+%It is possible that there may be other packages which will
+%also cause a problem, if so, try any of the above.
+%
+%\item \appname{makeglos.pl} gives the following error message:
+%\begin{verbatim}
+%unable to extract name from glossary item:
+%\end{verbatim}
+%
+%You are using an old version of \appname{makeglos.pl} with a
+%new version of the \styname{glossary} package. You will need
+%to update your version \appname{makeglos.pl}.
+%\end{enumerate}
+%Let me know if you encounter any other problems or if you have any comments regarding this package.
+%
+%\section{Obsolete Commands}
+%
+%The commands described in this section are now obsolete, but
+%are currently still provided for backwards compatibility. Their
+%use is deprecated.
+%
+%\changes{2.14}{2005 May 28}{'saveglosentry added}
+%\DescribeMacro{\saveglosentry}
+%\icmdname{saveglosentry}\{\textrm{\meta{name}}\}\{\meta{description}\}\\
+%This command has now been replaced by \cmdname{storeglosentry}.
+%
+%\changes{2.0}{2004 November 1}{primary acronym number format
+%\texttt{'glsprimaryfmt}}
+%\changes{2.12}{2004 November 1}{primary acronym number format
+%\texttt{'glsprimaryfmt} no longer used}
+%\changes{2.4}{2006 July 20}{primary acronym number format
+%\texttt{'glsprimaryfmt} has been removed}
+%\DescribeMacro{\glsprimaryfmt}%
+%The command \cmdname{glsprimaryfmt} has now been removed.
+%
+%The package option \pkgopt{hyperacronym} is now superseded by the package option
+%\pkgopt{hyper}. This option was implemented prior to the
+%introduction of the command \icmdname{xglossary}. Since the
+%acronyms now use \icmdname{xglossary}, there is no difference
+%between the \pkgopt{hyperacronym} and \pkgopt{hyper} options.
+%This option has a boolean value:
+%\changes{2.13}{2004 December 1}{Package option \texttt{hyperacronym}}
+%\begin{description}
+%\item[\pkgoptval{true}{hyperacronym}] Make acronyms link to their corresponding entry in the glossary
+%\item[\pkgoptval{false}{hyperacronym}] Acronyms don't have a hyperlink.
+%\end{description}
+%If the \styname{hyperref} package has been loaded prior to
+%loading \texttt{glossary.sty} or if \pkgopt[true]{hyper} is set,
+%\pkgopt[true]{hyperacronym} otherwise
+%\pkgopt[false]{hyperacronym}.%
+%
+%\section{Contact Details}
+%\noindent
+%Dr Nicola Talbot\\
+%School of Computing Sciences\\
+%University of East Anglia\\
+%Norwich. Norfolk\\
+%NR4 7TJ. United Kingdom.\\
+%\url{http://theoval.cmp.uea.ac.uk/~nlct/}
+%
+%\section{Acknowledgements}
+%
+%I would like to thank all the many people who have made suggestions
+%and pointed out bugs.
+%
+% \StopEventually{\PrintChanges\addcontentsline{toc}{section}{Change History}\PrintIndex\addcontentsline{toc}{section}{Index}}
+%
+%
+%
+%
+%\section{The Code}
+% \begin{macrocode}
+%<*glossary.sty>
+% \end{macrocode}
+% \subsection{Package Definition}
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{glossary}[2006/07/20 2.4 (NLCT)]
+% \end{macrocode}
+% Load packages needed by glossary.sty:
+% \begin{macrocode}
+\RequirePackage{ifthen}
+\RequirePackage{keyval}
+% \end{macrocode}
+% The package options are in the form of a comma-separated list of
+% \meta{key}=\meta{value} pairs. First need to set up the keys.
+%
+% The \pkgopt{style} key. This may be one of \pkgoptval{list}{style},
+% \pkgoptval{altlist}{style} (use \envname{description} environment),
+% \pkgoptval{super}{style} (use \envname{supertabular} environment) or
+% \pkgoptval{long}{style} (use \envname{longtable} environment).
+% \begin{macrocode}
+\define@key{gloss}
+{style}
+{\ifthenelse{\equal{#1}{list} \or \equal{#1}{altlist}
+\or \equal{#1}{super} \or \equal{#1}{long}}
+{\def\gls@style{#1}}
+{\PackageError{glossary}
+{Unknown glossary style '#1'}
+{Available styles are: list, altlist, super and long}}}
+% \end{macrocode}
+% The \pkgopt{header} key. This can either be \pkgoptval{none}{header}
+% or \pkgoptval{plain}{header}. Should only be used in conjunction
+% with \pkgopt[style]{super} or \pkgopt[long]{style}.
+% \begin{macrocode}
+\define@key{gloss}
+{header}[plain]{\ifthenelse{\equal{#1}{none} \or \equal{#1}{plain}}
+{\def\gls@header{#1}}
+{\PackageError{glossary}
+{Unknown glossary style '#1'}
+{Available styles are: none and plain}}}
+% \end{macrocode}
+% The \pkgopt{border} key. This can either be \pkgoptval{none}{border}
+% or \pkgoptval{plain}{border}. Should only be used in conjunction
+% with \pkgopt[super]{style} or \pkgopt[long]{style}.
+% \begin{macrocode}
+\define@key{gloss}
+{border}[plain]{\ifthenelse{\equal{#1}{none} \or \equal{#1}{plain}}
+{\def\gls@border{#1}}
+{\PackageError{glossary}
+{Unknown glossary border '#1'}
+{Available styles are: none and plain}}}
+% \end{macrocode}
+% Number of columns (either \pkgoptval{2}{cols} or
+% \pkgoptval{3}{cols}). Should only be used in conjunction with
+% \pkgopt[super]{style} or \pkgopt[long]{style}.
+% \begin{macrocode}
+\newcount\gls@cols
+\define@key{gloss}{cols}{\gls@cols=#1\relax
+\ifthenelse{\gls@cols<2 \or \gls@cols>3}
+{\PackageError{glossary}
+{invalid number of columns}
+{The cols option can only be 2 or 3}}
+{}}
+% \end{macrocode}
+% The number key may either be \pkgoptval{none}{number} or the name of
+% a counter.
+% \begin{macrocode}
+\define@key{gloss}
+{number}
+{\ifthenelse{\equal{#1}{none}}
+{\def\gls@glossary@number{#1}}
+{\@ifundefined{c@#1}{
+\PackageError{glossary}
+{Unknown glossary number style '#1'}
+{You may either specify "none" or the name of a counter,
+e.g. "section"}\def\gls@glossary@number{page}}{\def\gls@glossary@number{#1}}}}
+% \end{macrocode}
+% The \pkgopt{toc} key. If set, adds the glossary to the table of
+% contents
+% \begin{macrocode}
+\newif\ifgls@toc
+\define@key{gloss}{toc}[true]{\ifthenelse{\equal{#1}{true}
+\or \equal{#1}{false}}
+{\csname gls@toc#1\endcsname}
+{\PackageError{glossary}{Glossary option 'toc' is boolean}
+{The value of 'toc' can only be set to 'true' or 'false'}}}
+% \end{macrocode}
+% The \pkgopt{hypertoc} key. Like \pkgopt{toc}, but puts the anchor
+% before the section heading. Should only be used if the
+% \styname{hyperref} package is used (because it uses
+% \icmdname{phantomsection}).
+% \begin{macrocode}
+\newif\ifgls@hypertoc
+\define@key{gloss}{hypertoc}[true]{%
+\ifthenelse{\equal{#1}{true} \or \equal{#1}{false}}
+{\csname gls@hypertoc#1\endcsname}
+{\PackageError{glossary}{Glossary option 'hypertoc' is boolean}
+{The value of 'hypertoc' can only be set to 'true' or 'false'}}}
+% \end{macrocode}
+% The \pkgopt{section} key. This will put the glossary in an unnumbered
+% section, even if chapters are defined.
+% \begin{macrocode}
+\newif\ifgls@section
+\define@key{gloss}{section}[true]{%
+\ifthenelse{\equal{#1}{true} \or \equal{#1}{false}}
+{\csname gls@section#1\endcsname}
+{\PackageError{glossary}{Glossary option 'section' is boolean}
+{The value of 'section' can only be set to 'true' or 'false'}}}
+\gls@sectionfalse
+% \end{macrocode}
+% Enable hyperlinks. If \styname{hyperref} or \styname{html}
+% packages loaded, \pkgopt[true]{hyper} is the default.
+% \begin{macrocode}
+\newif\ifglshyper
+\newif\ifglshyperacronym
+\define@key{gloss}{hyper}[true]{%
+\ifthenelse{\equal{#1}{true} \or \equal{#1}{false}}
+{\csname glshyper#1\endcsname\glshyperacronymtrue}
+{\PackageError{glossary}{Glossary option 'hyper' is boolean}
+{The value of 'hyper' can only be set to 'true' or 'false'}}}
+% \end{macrocode}
+% Enable hyperlinks for acronyms. Deprecated: use \pkgopt{hyper}
+% instead.
+% \begin{macrocode}
+\define@key{gloss}{hyperacronym}[true]{%
+\ifthenelse{\equal{#1}{true} \or \equal{#1}{false}}
+{\csname glshyperacronym#1\endcsname}
+{\PackageError{glossary}{Glossary option 'hyperacronym' is boolean}
+{The value of 'hyperacronym' can only be set to 'true' or 'false'}}}
+% \end{macrocode}
+% The \pkgopt{acronym} key. If set, the acronyms will be separate from
+% main glossary entries. Remember to use \icmdname{makeacronym}
+% and \icmdname{printacronym} if \pkgoptval{true}{acronym}.
+% \begin{macrocode}
+\newif\ifglsacronym
+\define@key{gloss}{acronym}[true]{%
+\ifthenelse{\equal{#1}{true} \or \equal{#1}{false}}
+{\setboolean{glsacronym}{#1}}{%
+\PackageError{glossary}{Glossary option 'acronym' is boolean}{The
+value of 'acronym' can only be set to 'true' or 'false'}}}
+% \end{macrocode}
+% The \pkgopt{global} key. If not set, any acronyms expanded in a
+% group will be treated as unused once outside of the group.
+% Set \pkgopt[true]{global} to prevent this.
+% \begin{macrocode}
+\newif\ifglsglobal
+\define@key{gloss}{global}[true]{\ifthenelse{\equal{#1}{true}\or
+\equal{#1}{false}}{\setboolean{glsglobal}{#1}}{%
+\PackageError{glossary}{Glossary option 'global' is boolean}{The
+value of 'global' can only be set to 'true' or 'false'}}}
+% \end{macrocode}
+% Set up defaults
+% \begin{macrocode}
+\def\gls@style{long}
+\def\gls@header{none}
+\def\gls@border{none}
+\def\gls@glossary@number{page}
+\gls@cols=2\relax
+\gls@tocfalse
+% \end{macrocode}
+% If \icmdname{hyperpage} is defined, then assume hyperlinks required
+% \begin{macrocode}
+\@ifundefined{hyperpage}{\glshyperfalse\glshyperacronymfalse}{%
+\glshypertrue\glshyperacronymtrue}
+% \end{macrocode}
+% If \icmdname{hypertarget} defined, then \icmdname{glosslabel} will make a
+% target ("#1") and \icmdname{glossref} will make a hyperlink (to "#1").
+% Otherwise will simply print the second argument.
+% \begin{macrocode}
+\@ifundefined{hypertarget}{
+% no hyperlinks
+\newcommand{\glosslabel}[2]{#2}%
+\newcommand{\glossref}[2]{#2}%
+}{%
+\newcommand{\glosslabel}[2]{\hypertarget{#1}{#2}}%
+\newcommand{\glossref}[2]{\hyperlink{#1}{#2}}
+}
+% \end{macrocode}
+% If the \styname{xspace} package has been loaded, use \icmdname{xspace}
+% in acronyms.
+% \begin{macrocode}
+\@ifundefined{xspace}{%
+\let\glsxspace\relax}{%
+\let\glsxspace\xspace}
+% \end{macrocode}
+% Set \icmdname{glossaryalignment} to "\relax" before loading
+% configuration file.
+% \begin{macrocode}
+\let\glossaryalignment\relax
+% \end{macrocode}
+% Load configuation file if it exists
+% \begin{macrocode}
+\newcommand{\glossarypackageoptions}[1]{\setkeys{gloss}{#1}}
+\InputIfFileExists{glossary.cfg}{%
+\typeout{Glossary configuration file loaded}}{%
+\typeout{No configuration file glossary.cfg found}}
+\renewcommand{\glossarypackageoptions}[1]{%
+\PackageError{glossary}{Command \string\glossarypackageoptions
+^^Jcan only be used in configuration file}{}}
+% \end{macrocode}
+% Set up the options so that they are treated as a
+% \meta{key}=\meta{value} list.
+% \begin{macrocode}
+\DeclareOption*{\edef\@pkg@ptions{\noexpand
+\setkeys{gloss}{\CurrentOption}}
+\ifthenelse{\equal{\CurrentOption}{}}{}{\@pkg@ptions}}
+% \end{macrocode}
+% Process options
+% \begin{macrocode}
+\ProcessOptions
+% \end{macrocode}
+%Check to make sure that the options don't conflict.
+% \begin{macrocode}
+\ifthenelse{\(\equal{\gls@style}{list} \or
+\equal{\gls@style}{altlist}\) \and
+\(\not\equal{\gls@header}{none} \or \not\equal{\gls@border}{none}
+\or \gls@cols=3\)}
+{\PackageError{glossary}{You can't have option 'style=list' or
+'style=altlist' in combination with any of the other style
+options}{The 'list' and 'altlist' options don't have a header,
+border or number of columns option.}}
+{}
+% \end{macrocode}
+% Can't have both toc and hypertoc. Make it a warning rather
+% than an error.
+% \begin{macrocode}
+\ifthenelse{\boolean{gls@hypertoc} \and \boolean{gls@toc}}{%
+\PackageWarning{glossary}{Can't have both 'toc' and
+'hypertoc', ignoring 'toc' option}
+\ifgls@hypertoc\gls@tocfalse\fi}{}
+% \end{macrocode}
+%\subsection{Redefining \texorpdfstring{\texttt{\symbol{92}glossary}}{\textbackslash glossary} format}
+% The glossary is going to be redefined so that it accepts
+% \meta{key}=\meta{value} information, so need to define the keys (see
+% keyval documentation for further details
+% on how to do this.) Added "\@onelevel@sanitize" at the recommendation
+% of Dan~Luecking and Ulrich~Diez.
+% \begin{macrocode}
+\define@key{wrgloss}{name}{%
+\def\@glo@n@me{#1}%
+\@onelevel@sanitize\@glo@n@me%
+\global\let\@glo@n@me\@glo@n@me}
+\define@key{wrgloss}{description}{%
+\def\@descr{#1}%
+\@onelevel@sanitize\@descr}
+\define@key{wrgloss}{sort}{%
+\def\@s@rt{#1}%
+\@onelevel@sanitize\@s@rt
+\global\let\@s@rt\@s@rt}
+\define@key{wrgloss}{format}{\def\@f@rm@t{#1}}
+\define@key{wrgloss}{number}{\def\@glo@num{#1}}
+% \end{macrocode}
+% Redefine "\@wrglossary" so that it separates out the entry name and
+% entry description. This was rewritten in version 2.4. It is now
+% used for both the main glossary, and user-defined glossaries.
+% The command "\@@wrglossary" is called at the end of "\@wrglossary",
+% by default this does nothing, but some commands temporarily
+% redefine it.
+% \begin{macrocode}
+\newcommand{\@@wrglossary}{}
+% \end{macrocode}
+% The label for each entry is usually made up of the glossary prefix
+% followed by the sort value, this can be over-ridden by redefining
+% \cmdname{@glo@l@bel}. (This is done if the optional argument to
+% \icmdname{glossary} is used.) By default this does nothing.
+% \begin{macrocode}
+\newcommand{\@glo@l@bel}{}
+% \end{macrocode}
+% Define the prefix for the principle glossary. (Added to version
+% 2.4.)
+% \begin{macrocode}
+\newcommand{\@gls@glossary@type}{glo}
+% \end{macrocode}
+% The optional first argument was added in version 2.4. This
+% is the name of the glossary type.
+% \begin{macrocode}
+\renewcommand{\@wrglossary}[2][glossary]{\relax
+\gdef\@glo@n@me{}\def\@descr{}\def\@s@rt{}\def\@f@rm@t{}%
+\edef\@glo@num{\csname gls@#1@number\endcsname}\relax
+\xdef\@pr@fix{\csname @gls@#1@type\endcsname}%
+ \setkeys{wrgloss}{#2}\relax
+\ifthenelse{\equal{\@glo@num}{none}}{\def\@@glo@num{\thepage}}{%
+\@ifundefined{c@\@glo@num}{\PackageError{glossary}{%
+Not such counter '\@glo@num'}{The value of the 'number' key
+must be the name of a counter or the word "none"}%
+\def\@@glo@num{\thepage}}{%
+\edef\@@glo@num{\csname the\@glo@num\endcsname}}}%
+\ifthenelse{\equal{\@s@rt}{}}{\gdef\@s@rt{\@glo@n@me}}{}%
+\ifthenelse{\equal{\@glo@l@bel}{}}{%
+\gdef\@glo@l@bel{\@pr@fix:\@s@rt}}{}%
+% \end{macrocode}
+% User has not specified a format, so use default
+% \begin{macrocode}
+\ifthenelse{\equal{\@f@rm@t}{}}
+{\expandafter\protected@write\csname @#1file\endcsname{}%
+{\string\glossaryentry{\@s@rt @{%
+\string\glosslabel{\@glo@l@bel}{\@glo@n@me}}\@descr
+\string\relax|glsnumformat}{\@@glo@num}}}
+% \end{macrocode}
+% User has specified a format. If it is one of the
+% "\hyper"\meta{xx} types, append the required counter.
+% This is needed if the glossary contains a mixture of
+% counters used (as in "sampleEqPg.tex").
+% \begin{macrocode}
+{\ifthenelse{\equal{\@f@rm@t}{hyperrm} \or
+\equal{\@f@rm@t}{hypersf} \or \equal{\@f@rm@t}{hypertt}
+\or \equal{\@f@rm@t}{hypermd} \or \equal{\@f@rm@t}{hyperbf}
+\or \equal{\@f@rm@t}{hyperit} \or \equal{\@f@rm@t}{hyperem}
+\or \equal{\@f@rm@t}{hypersl} \or \equal{\@f@rm@t}{hyperup}
+\or \equal{\@f@rm@t}{hypersc}}
+{\expandafter\protected@write\csname @#1file\endcsname{}%
+ {\string\glossaryentry{\@s@rt @{%
+ \string\glosslabel{\@glo@l@bel}{\@glo@n@me}}\@descr
+ \string\relax|\@f@rm@t[\@glo@num]}{\@@glo@num}}}
+{\expandafter\protected@write\csname @#1file\endcsname{}%
+ {\string\glossaryentry{\@s@rt @{%
+ \string\glosslabel{\@glo@l@bel}{\@glo@n@me}}\@descr
+ \string\relax|\@f@rm@t}{\@@glo@num}}}}\relax
+ \endgroup\@esphack
+\@@wrglossary
+}
+% \end{macrocode}
+% Command to extract name key from glossary entry. This shouldn't
+% be sanitized, so define a new key for this
+% \begin{macrocode}
+\define@key{wrnsgloss}{name}{\def\@glo@n@me{#1}}
+\define@key{wrnsgloss}{description}{\def\@descr{#1}}
+\define@key{wrnsgloss}{sort}{\def\@s@rt{#1}}
+\define@key{wrnsgloss}{format}{\def\@f@rm@t{#1}}
+\define@key{wrnsgloss}{number}{\def\@glo@num{#1}}
+% \end{macrocode}
+% Extract name from key-value list. Name stored in "\@glo@n@me".
+% \begin{macrocode}
+\newcommand{\@gls@getn@me}[1]{%
+\def\@glo@n@me{}\setkeys{wrnsgloss}{#1}%
+}
+% \end{macrocode}
+% Command to extract description key from glossary entry.
+% \begin{macrocode}
+\newcommand{\@gls@getdescr}[1]{%
+\@bsphack\begingroup
+\def\@descr{}%
+\setkeys{wrgloss}{#1}%
+\global\let\@glo@desc\@descr
+\endgroup\@esphack
+}
+% \end{macrocode}
+% Now define \icmdname{xglossary} so you can have a hyperlink that takes
+% you to the entry in the glossary
+% \begin{macrocode}
+\newcommand{\xglossary}{\renewcommand{\@@wrglossary}[1]{%
+\glossref{\@glo@l@bel}{##1}\renewcommand{\@@wrglossary}{}}%
+\glossary}
+% \end{macrocode}
+%\subsection{Storing Glossary Entries}
+% Provide a means to store glossary information to save typing
+% and ensure consistency (new to v2.17).
+%
+% Store label in list (new to version 2.36) so that all
+% entries can be added to the glossary with a single command.
+% \begin{macrocode}
+\newcommand*{\@glo@label@list}{}
+\toksdef\gls@ta=0 \toksdef\gls@tb=2
+\newcommand{\@glo@label@addtolist}[1]{%
+\gls@ta={{#1}}\gls@tb=\expandafter{\@glo@label@list}%
+\xdef\@glo@label@list{\the\gls@ta,\the\gls@tb}}
+% \end{macrocode}
+% First define command to store details (don't allow a label
+% consisting solely of a "*" as this represents all entries
+% when passed to \icmdname{useglosentry}.)
+% \begin{macrocode}
+\newcommand*{\storeglosentry}[3][glossary]{%
+\ifthenelse{\equal{#2}{*}}{%
+\PackageError{glossary}{Glossary label '*' invalid}{You can't have
+a glossary entry with a * as the label}}{%
+\@ifundefined{glo@#2@entry}{%
+\@glo@label@addtolist{#2}%
+\expandafter\def\csname glo@#2@type\endcsname{#1}%
+\expandafter\def\csname glo@#2@entry\endcsname{#3}%
+\@gls@getn@me{#3}%
+\expandafter\protected@edef\csname glo@#2@name\endcsname{\@glo@n@me}%
+}{%
+\PackageError{glossary}{Glossary entry '#2' already
+defined}{There already exists a glossary entry with the label '#2'}}}%
+}
+% \end{macrocode}
+% This command will not produce text in the document, but will
+% produce the relevant glossary entry.
+% \begin{macrocode}
+\providecommand{\useglosentry}[2][\relax]{%
+\ifthenelse{\equal{#2}{*}}{\@for\@glolab:=\@glo@label@list\do{%
+\ifthenelse{\equal{\@glolab}{}}{}{\useglosentry[#1]{\@glolab}}}}{%
+\@ifundefined{glo@#2@type}{%
+\PackageError{glossary}{Glossary entry '#2' undefined}{You need
+to define the entry using \string\storeglosentry\space before
+using it.}}{{%
+\edef\@glostype{\csname glo@#2@type\endcsname}%
+\@glo@tb=\expandafter\expandafter\expandafter
+{\csname glo@#2@entry\endcsname}%
+\ifx#1\relax
+\edef\@glo@cmd{\expandafter\noexpand
+\csname\@glostype\endcsname{\the\@glo@tb}}%
+\else
+\edef\@glo@cmd{\expandafter\noexpand
+\csname\@glostype\endcsname{\the\@glo@tb,#1}}%
+\fi
+\@glo@cmd
+}}}}
+% \end{macrocode}
+% This command will produce the specified text in the document
+% (with a hyperlink if enabled), and will produce the relevant
+% glossary entry.
+% \begin{macrocode}
+\providecommand{\useGlosentry}[3][\relax]{%
+\@ifundefined{glo@#2@type}{%
+\PackageError{glossary}{Glossary entry '#2' undefined}{You need
+to define the entry using \string\storeglosentry\space before
+using it.}}{{%
+\edef\@glostype{x\csname glo@#2@type\endcsname}%
+\@glo@tb=\expandafter\expandafter\expandafter
+{\csname glo@#2@entry\endcsname}%
+\ifx#1\relax
+\edef\@glo@cmd{\expandafter\noexpand
+\csname\@glostype\endcsname{\the\@glo@tb}}%
+\else
+\edef\@glo@cmd{\expandafter\noexpand
+\csname\@glostype\endcsname{\the\@glo@tb,#1}}%
+\fi
+\@glo@cmd{#3}%
+}}}
+% \end{macrocode}
+% As above, but the text displayed in the document is constructed from
+% the \gloskey{name} key.
+% \begin{macrocode}
+\newcommand{\gls}[2][\relax]{%
+\useGlosentry[#1]{#2}{%
+\csname glo@#2@name\endcsname}}
+% \end{macrocode}
+% This command was defined in earlier verions, but doesn't
+% work very well, currently retained for backwards compatibility,
+% but may well be removed at a later date.
+% \begin{macrocode}
+\providecommand{\saveglosentry}[3][glossary]{%
+\PackageWarning{glossary}{\string\saveglosentry\space is obsolete,
+please use \string\storeglosentry\space instead}%
+\expandafter\def\csname glo@#2@type\endcsname{#1}%
+\expandafter\def\csname glo@#2@entry\endcsname{%
+name={#2},description={#3}}}
+% \end{macrocode}
+%Set up default number formats, dependent on the package \pkgopt{number}
+% option. Define default page compositor. Any redefinition of the
+% page compositor will need to come before the ".ist" file is
+% written. The other commands can be redefined at any point before
+% \icmdname{printglossary}.
+%
+% Define a command to set up the glossary counter.
+% The optional argument specifies the glossary type
+% (defaults to the main glossary). The mandatory
+% command is the name of the counter, or "none".
+% \begin{macrocode}
+\newcommand*{\@gls@setnumbering}[2][glossary]{%
+% \end{macrocode}
+% If no numbering (\pkgopt[none]{number}):
+% \begin{macrocode}
+\ifthenelse{\equal{#2}{none}}{%
+\def\pagecompositor{-}
+\expandafter\def\csname @#1@delimN\endcsname{}
+\expandafter\def\csname @#1@delimR\endcsname{}
+\expandafter\def\csname glsX#1Xnumformat\endcsname##1{}}{%
+% \end{macrocode}
+% If "number=page", set the page compositor to
+% "-" (dash) otherwise set it to "." (dot).
+% \begin{macrocode}
+\ifthenelse{\equal{#2}{page}}{%
+\def\pagecompositor{-}}{%
+\def\pagecompositor{.}}
+% \end{macrocode}
+% Set up delimiters and formats
+% \begin{macrocode}
+\expandafter\def\csname @#1@delimN\endcsname{, }
+\expandafter\def\csname @#1@delimR\endcsname{--}
+\ifglshyper
+\expandafter\def\csname glsX#1Xnumformat\endcsname##1{%
+\hyperrm[#2]{##1}}%
+\else
+\expandafter\def\csname glsX#1Xnumformat\endcsname##1{##1}\fi
+}
+% \end{macrocode}
+% End of "\@gls@setnumbering" definition:
+% \begin{macrocode}
+}
+% \end{macrocode}
+% Now call it to set up current numbering:
+% \begin{macrocode}
+\@gls@setnumbering{\gls@glossary@number}
+% \end{macrocode}
+% Provide a means of changing the page number format for a
+% given glossary type.
+% \begin{macrocode}
+\newcommand{\glsnumformat}[1]{%
+\@ifundefined{\@glostype}{\def\@glostype{glossary}}{}%
+\@ifundefined{glsX\@glostype Xnumformat}{%
+\PackageError{glossary}{Glossary type '\@glostype' undefined}{}}{%
+\csname glsX\@glostype Xnumformat\endcsname{#1}}}
+% \end{macrocode}
+% Set the default glossary type
+% \begin{macrocode}
+\def\@glostype{glossary}
+% \end{macrocode}
+% Make the delimiters etc depend on the glossary type.
+% "\@glostype" should be set to the appropriate glossary type
+% before using any of these commands.
+% \begin{macrocode}
+\newcommand{\delimN}{\csname @\@glostype @delimN\endcsname}
+\newcommand{\delimR}{\csname @\@glostype @delimR\endcsname}
+\newcommand{\gloitem}{\csname @\@glostype @gloitem\endcsname}
+\newcommand{\gloskip}{\csname @\@glostype @gloskip\endcsname}
+\newcommand{\delimT}{\glsafternum
+\csname @\@glostype @delimT\endcsname}
+\newcommand{\glodelim}{\csname @\@glostype @glodelim\endcsname
+\glsbeforenum}
+% \end{macrocode}
+% Add facility to insert text between groups. By default these do
+% nothing.
+% \begin{macrocode}
+\newcommand{\glogroupSymbols}{}
+\newcommand{\glogroupNumbers}{}
+\newcommand{\glogroupA}{}
+\newcommand{\glogroupB}{}
+\newcommand{\glogroupC}{}
+\newcommand{\glogroupD}{}
+\newcommand{\glogroupE}{}
+\newcommand{\glogroupF}{}
+\newcommand{\glogroupG}{}
+\newcommand{\glogroupH}{}
+\newcommand{\glogroupI}{}
+\newcommand{\glogroupJ}{}
+\newcommand{\glogroupK}{}
+\newcommand{\glogroupL}{}
+\newcommand{\glogroupM}{}
+\newcommand{\glogroupN}{}
+\newcommand{\glogroupO}{}
+\newcommand{\glogroupP}{}
+\newcommand{\glogroupQ}{}
+\newcommand{\glogroupR}{}
+\newcommand{\glogroupS}{}
+\newcommand{\glogroupT}{}
+\newcommand{\glogroupU}{}
+\newcommand{\glogroupV}{}
+\newcommand{\glogroupW}{}
+\newcommand{\glogroupX}{}
+\newcommand{\glogroupY}{}
+\newcommand{\glogroupZ}{}
+% \end{macrocode}
+% Allow user to change number format for different
+% glossary types.
+% \begin{macrocode}
+\define@key{glossnum}{glsnumformat}{\def\@glsnumformat{#1}}
+\define@key{glossnum}{type}{\def\@glsnumtype{#1}}
+\define@key{glossnum}{delimN}{\def\@delimN{#1}}
+\define@key{glossnum}{delimR}{\def\@delimR{#1}}
+\define@key{glossnum}{delimT}{\def\@delimT{#1}}
+\define@key{glossnum}{gloskip}{\def\@gloskip{#1}}
+\define@key{glossnum}{glodelim}{\def\@glodelim{#1}}
+% \end{macrocode}
+% Define a command that will ignore its argument. This is used
+% when suppressing the page numbers.
+% \begin{macrocode}
+\providecommand{\ignore}[1]{}
+% \end{macrocode}
+% Define command that allows the user to modify the style for a
+% given glossary type.
+% \begin{macrocode}
+\newcommand{\setglossary}[1]{%
+\def\@glsnumformat{}%
+\def\@glsnumtype{glossary}%
+\def\@delimN{@dontchange@}%
+\def\@delimR{@dontchange@}%
+\def\@delimT{@dontchange@}%
+\def\@gloskip{@dontchange@}%
+\def\@glodelim{@dontchange@}%
+\setkeys{glossnum}{#1}\relax
+\@ifundefined{print\@glsnumtype}{%
+\PackageError{glossary}{Invalid glossary type '\@glsnumtype'}{%
+Glossary type '\@glsnumtype' has not been defined}
+}{%
+\ifthenelse{\equal{\@glsnumformat}{}}{}{%
+\expandafter\xdef\csname glsX\@glsnumtype Xnumformat\endcsname{%
+\noexpand\csname\@glsnumformat\noexpand\endcsname}%
+\ifthenelse{\equal{\@glsnumformat}{ignore}}{%
+\expandafter\xdef\csname @\@glsnumtype @delimN\endcsname{}%
+\expandafter\xdef\csname @\@glsnumtype @delimR\endcsname{}%
+}{}%
+}%
+%
+\ifthenelse{\equal{\@delimN}{@dontchange@}}{}{%
+\expandafter\xdef\csname @\@glsnumtype @delimN\endcsname{%
+\@delimN}}%
+%
+\ifthenelse{\equal{\@delimR}{@dontchange@}}{}{%
+\expandafter\xdef\csname @\@glsnumtype @delimR\endcsname{%
+\@delimR}}%
+%
+\ifthenelse{\equal{\@delimT}{@dontchange@}}{}{%
+\expandafter\xdef\csname @\@glsnumtype @delimT\endcsname{%
+\@delimT}}%
+%
+\ifthenelse{\equal{\@gloskip}{@dontchange@}}{}{%
+\expandafter\xdef\csname @\@glsnumtype @gloskip\endcsname{%
+\@gloskip}}%
+%
+\ifthenelse{\equal{\@glodelim}{@dontchange@}}{}{%
+\expandafter\xdef\csname @\@glsnumtype @glodelim\endcsname{%
+\@glodelim}%
+}%
+}}
+% \end{macrocode}
+% Now define the command \icmdname{printglossary} which will print the
+% contents of the glossary file. Define the file extension for the main
+% glossary:
+% \begin{macrocode}
+\newcommand{\@gls@glossary@inext}{gls}
+% \end{macrocode}
+% The optional argument is the glossary type, the default is the
+% main glossary. This sets "\gls@number" to "\gls@#1@number"
+% before reading in the file. This ensures that \icmdname{hyperrm} etc
+% use the correct counter in the target name.
+% \begin{macrocode}
+\newcommand\printglossary[1][glossary]{%
+\def\@glostype{#1}%
+\@ifundefined{#1name}{%
+\renewcommand{\@glossaryname}{\glossaryname}}{%
+\renewcommand{\@glossaryname}{\csname #1name\endcsname}}%
+\@ifundefined{short#1name}{%
+\renewcommand{\@shortglossaryname}{\@glossaryname}}{%
+\renewcommand{\@shortglossaryname}{\csname short#1name\endcsname}}%
+\expandafter\let\expandafter\gls@number\csname gls@#1@number\endcsname
+\@input@{\jobname.\csname @gls@#1@inext\endcsname}}
+% \end{macrocode}
+% Define contextual names. Changed \verb/\newcommand/
+% to \verb/\providecommand/ in version 2.2.
+% \begin{macrocode}
+\providecommand{\glossaryname}{Glossary}
+\newcommand{\shortglossaryname}{\glossaryname}
+\newcommand{\entryname}{Notation}
+\newcommand{\descriptionname}{Description}
+\newcommand{\istfilename}{\jobname.ist}
+\def\@glossaryname{\glossaryname}
+\def\@shortglossaryname{\shortglossaryname}
+% \end{macrocode}
+% Version 2.4 also writes ist filename to aux file. This
+% is only used by makeglos.pl, so ignore.
+% \begin{macrocode}
+\newcommand{\@istfilename}[1]{}
+% \end{macrocode}
+% Define command to generate glossary title (new to
+% version 2.24)
+% \begin{macrocode}
+\providecommand{\glossarytitle}{%
+\@ifundefined{chapter}%
+% \end{macrocode}
+% "\chapter" not defined, use "\section*"
+% \begin{macrocode}
+{%
+\ifgls@hypertoc
+% \end{macrocode}
+% \pkgopt{hypertoc} option used, so use "\phantomsection" to add
+% anchor \emph{before} "\section*"
+% \begin{macrocode}
+\phantomsection
+\@glosaddtoc{section}%
+\section*{\@glossaryname}\relax
+\else
+% \end{macrocode}
+% \pkgopt[false]{hypertoc}: add to toc after "\section*"
+% \begin{macrocode}
+\section*{\@glossaryname}\relax
+% \end{macrocode}
+% only add contentsline if toc=true
+% \begin{macrocode}
+\ifgls@toc\@glosaddtoc{section}\fi
+\fi}%
+% \end{macrocode}
+% "\chapter" defined, but has user requested "\section" instead?
+% \begin{macrocode}
+{%
+\ifthenelse{\boolean{gls@section}}%
+{%
+% \end{macrocode}
+% user requested "\section"
+% \begin{macrocode}
+\ifgls@hypertoc
+% \end{macrocode}
+% User request \pkgopt[true]{hypertoc}, so add anchor \emph{before}
+% "\section":
+% \begin{macrocode}
+\phantomsection
+\@glosaddtoc{section}%
+\section*{\@glossaryname}\relax
+\else
+% \end{macrocode}
+% \pkgopt[false]{hypertoc} so add contentsline (if applicable) after
+% "\section"
+% \begin{macrocode}
+\section*{\@glossaryname}\relax
+\ifgls@toc\@glosaddtoc{section}\fi
+\fi}%
+{%
+% \end{macrocode}
+% User has not requested "\section", so use "\chapter"
+% \begin{macrocode}
+\ifgls@hypertoc
+% \end{macrocode}
+% User has requested \pkgopt[true]{hypertoc}.
+% Chapters usually start a new page, so to ensure
+% anchor is at the top of the correct page, issue
+% a "\clearpage" (or "\cleardoublepage") to place the
+% anchor at the correct place.
+% \begin{macrocode}
+\@ifundefined{if@twoside}{%
+% \end{macrocode}
+% Document class doesn't support twosided documents so
+% just do "\clearpage"
+% \begin{macrocode}
+\clearpage}{%
+\if@twoside
+% \end{macrocode}
+% Document is two-sided
+% If "\cleardoublepage" is defined, use that
+% otherwise just do "\clearpage"
+% \begin{macrocode}
+\@ifundefined{cleardoublepage}{\clearpage}{\cleardoublepage}%
+\else
+% \end{macrocode}
+% One-sided document, just do "\clearpage"
+% \begin{macrocode}
+\clearpage
+\fi}%
+% \end{macrocode}
+% add anchor before "\chapter"
+% \begin{macrocode}
+\phantomsection
+\@glosaddtoc{chapter}%
+\fi
+\chapter*{\@glossaryname}\relax
+% \end{macrocode}
+% both \pkgopt[true]{hypertoc} and \pkgopt[true]{toc}, so won't get
+% toc entry twice.)
+% \begin{macrocode}
+\ifgls@toc\@glosaddtoc{chapter}\fi}}
+\markboth{\@shortglossaryname}{\@shortglossaryname}%
+}
+% \end{macrocode}
+% Now define theglossary environment. Version 2.2:
+% check to see if defined already
+% \begin{macrocode}
+\@ifundefined{theglossary}{%
+\newenvironment{theglossary}{}{}}{%
+\PackageWarning{glossary}{Redefining 'theglossary' environment}}
+\renewenvironment{theglossary}{%
+\glossarytitle
+\glossarypreamble\@bef@reglos}{\@ftergl@s\glossarypostamble}
+% \end{macrocode}
+% Provide a means to add text to the beginning or end
+% of the glossary.
+% \begin{macrocode}
+\newcommand{\glossarypreamble}{}
+\newcommand{\glossarypostamble}{}
+% \end{macrocode}
+% By default, add the short title to the table of contents.
+% \begin{macrocode}
+\newcommand{\@glosaddtoc}[1]{%
+\addcontentsline{toc}{#1}{\@shortglossaryname}
+}
+% \end{macrocode}
+% Set up switch to determine whether the item is the first item in
+% the glossary (in the event that a special case is needed for the
+% first item)
+% \begin{macrocode}
+\newif\ifgloitemfirst
+\newcommand{\@bef@reglos}{\global\gloitemfirsttrue\beforeglossary}
+\newcommand{\@ftergl@s}{\afterglossary\global\gloitemfirstfalse}
+% \end{macrocode}
+% Set up defaults.
+% \begin{macrocode}
+\newcommand{\glossaryalignment}{\relax}
+\newcommand{\@gls@align@glossary}{}
+\newcommand{\glosstail}{%
+\@ifundefined{@gls@tail@\@glostype}{%
+\PackageError{glossary}{No glossary tail defined for glossary
+type '\@glostype'}{}}{%
+\csname @gls@tail@\@glostype\endcsname}}
+\newcommand{\@gls@tail@glossary}{}
+\newcommand{\afterglossary}{%
+\@ifundefined{@gls@afterglos@\@glostype}{%
+\PackageError{glossary}{No after glossary defined for glossary
+type '\@glostype'}{}}{%
+\csname @gls@afterglos@\@glostype\endcsname}}
+\newcommand{\beforeglossary}{%
+\@ifundefined{@gls@beforeglos@\@glostype}{%
+\PackageError{glossary}{No before glossary defined for glossary
+type '\@glostype'}{}}{%
+\csname @gls@beforeglos@\@glostype\endcsname}}
+\newcommand{\@gls@beforeglos@glossary}{}
+\newcommand{\@gls@afterglos@glossary}{}
+\newcommand{\@glossary@glodelim}{}
+\newcommand{\@glossary@delimT}{}
+\newcommand{\glsafternum}{}
+\newcommand{\glsbeforenum}{}
+\newcommand{\@glossary@gloskip}{}
+\newcommand{\@glossary@gloitem}[1]{#1}
+% \end{macrocode}
+% Now define what to do depending on which style has been selected.
+% First define command to switch to \pkgopt{list} style:
+% \begin{macrocode}
+\newcommand{\gls@setlist}[1][glossary]{%
+\expandafter\def\csname @gls@beforeglos@#1\endcsname{%
+\begin{description}}%
+\expandafter\def\csname @gls@afterglos@#1\endcsname{%
+\end{description}}%
+\expandafter\def\csname @#1@gloskip\endcsname{\indexspace}%
+\ifthenelse{\equal{\csname gls@#1@number\endcsname}{none}}{%
+\expandafter\def\csname @#1@glodelim\endcsname{}}{%
+\expandafter\def\csname @#1@glodelim\endcsname{, }}%
+\expandafter\def\csname @#1@gloitem\endcsname##1{\item[##1]}%
+\expandafter\def\csname @#1@delimT\endcsname{}
+}
+% \end{macrocode}
+% Next define command to switch to \pkgopt{altlist} style:
+% \begin{macrocode}
+\newcommand{\gls@setaltlist}[1][glossary]{%
+\expandafter\def\csname @gls@beforeglos@#1\endcsname{%
+\begin{description}}%
+\expandafter\def\csname @gls@afterglos@#1\endcsname{%
+\end{description}}%
+\expandafter\def\csname @#1@gloskip\endcsname{\indexspace}%
+\expandafter\def\csname @#1@gloitem\endcsname##1{%
+\item[##1]\mbox{}\nopagebreak\par\nopagebreak}%
+\expandafter\def\csname @#1@glodelim\endcsname{ }%
+\expandafter\def\csname @#1@delimT\endcsname{}
+}
+% \end{macrocode}
+%Now deal with the other styles. I orginally used a \envname{tabular}
+% environment, but obviously this doesn't work for a glossary longer
+% than one page (this package started out as a simple example
+% accompanying one of my tutorials). Nick van Foreest recommended
+% the \envname{supertabular} environment. The \envname{longtable} environment also
+% works, so have both options, and leave it to
+% the user.
+% \begin{macrocode}
+\ifthenelse{\equal{\gls@style}{super}}{
+\IfFileExists{supertab.sty}{\RequirePackage{supertab}}
+{\IfFileExists{supertabular.sty}{\RequirePackage{supertabular}}
+{\PackageError{glossary}{Option "super" chosen, but can't find
+"supertab" package}{If you want the "super" option, you have to have
+the "supertab" package installed.}}}}
+{\RequirePackage{longtable}}
+% \end{macrocode}
+% Define new length specifying the width of the description field.
+% \begin{macrocode}
+\newlength{\descriptionwidth}
+\setlength{\descriptionwidth}{0.6\linewidth}
+% \end{macrocode}
+% If user has defined the command \icmdname{glossaryheader}, use it
+% otherwise use header as specified by glossary style.
+% Added \icmdname{glossarysubheader} in version 2.4. This is provided
+% to add a sub heading, or to add a bit of space between
+% the header row and the table.
+% \begin{macrocode}
+\newcommand{\@glossaryheader}{%
+\@ifundefined{glossaryheader}{\csname @\@glostype @header\endcsname}
+{\glossaryheader}%
+\@ifundefined{glossarysubheader}{}{\glossarysubheader}%
+}
+% \end{macrocode}
+% Define command to set header style. Added \icmdname{glspageheader} in
+% version 2.4. (Third column header)
+% \begin{macrocode}
+\newcommand{\gls@setheader}[1][glossary]{%
+\ifthenelse{\equal{\gls@header}{none}}%
+{%
+\ifthenelse{\equal{\gls@border}{none}}
+{\expandafter\def\csname @#1@header\endcsname{}%
+}{\expandafter\def\csname @#1@header\endcsname{\hline}}%
+}{%
+\ifnum\gls@cols=2\relax
+\ifthenelse{\equal{\gls@border}{none}}
+{%
+\expandafter\def\csname @#1@header\endcsname{%
+\bfseries\entryname & \bfseries \descriptionname\\}}%
+{%
+\expandafter\def\csname @#1@header\endcsname{%
+\hline\bfseries\entryname & \bfseries\descriptionname
+\\\hline\hline}}%
+\else
+\ifthenelse{\equal{\gls@border}{none}}
+{%
+\expandafter\def\csname @#1@header\endcsname{%
+\bfseries\entryname & \bfseries \descriptionname &
+\bfseries \glspageheader \\}}%
+{%
+\expandafter\def\csname @#1@header\endcsname{%
+\hline\bfseries\entryname &\bfseries\descriptionname &
+\bfseries \glspageheader \\\hline\hline}}%
+\fi
+}}
+% \end{macrocode}
+% Define \icmdname{glspageheader} to do nothing, to keep it compatible
+% with earlier versions:
+% \begin{macrocode}
+\newcommand*{\glspageheader}{}
+% \end{macrocode}
+% Define command to set glossary alignment and borders
+% \begin{macrocode}
+\newcommand{\gls@setalignment}[1][glossary]{%
+\ifthenelse{\equal{\gls@border}{none}}
+{
+\ifnum\gls@cols=2\relax
+\expandafter\def\csname @gls@align@#1\endcsname{%
+@{\hspace{\tabcolsep}\bfseries}lp{\descriptionwidth}}
+\else
+\expandafter\def\csname @gls@align@#1\endcsname{%
+@{\hspace{\tabcolsep}\bfseries}lp{\descriptionwidth}l}
+\fi
+%
+\expandafter\def\csname @gls@tail@#1\endcsname{}%
+}{%
+\ifnum\gls@cols=2\relax
+\expandafter\def\csname @gls@align@#1\endcsname{%
+|@{\hspace{\tabcolsep}\bfseries
+}lp{\descriptionwidth}|}
+\else
+\expandafter\def\csname @gls@align@#1\endcsname{%
+|@{\hspace{\tabcolsep}\bfseries
+}lp{\descriptionwidth}l|}
+\fi
+%
+\expandafter\def\csname @gls@tail@#1\endcsname{\hline}%
+}%
+%
+\expandafter\def\csname @#1@delimT\endcsname{\\}
+%
+\ifnum\gls@cols=2\relax
+\expandafter\def\csname @#1@gloskip\endcsname{& \\}%
+\ifthenelse{\equal{\csname gls@#1@number\endcsname}{none}}{%
+\expandafter\def\csname @#1@glodelim\endcsname{}}{%
+\expandafter\def\csname @#1@glodelim\endcsname{, }}%
+\else
+\expandafter\def\csname @#1@gloskip\endcsname{& & \\}%
+\expandafter\def\csname @#1@glodelim\endcsname{& }%
+\fi
+\expandafter\def\csname @#1@gloitem\endcsname##1{##1 &}%
+}
+% \end{macrocode}
+% Need a way to avoid conflict with the \styname{array} package. In an
+% earlier version I defined a new column type if the \styname{array}
+% package was being used, however this restricts the ability
+% to have multiple glossaries with different column alignments.
+% \begin{macrocode}
+\newcommand{\@st@rtglostable}[2]{%
+\gls@ta={\begin{#1}}\gls@tb=\expandafter{#2}%
+\edef\@st@rtglost@ble{\the\gls@ta{\the\gls@tb}}
+\@st@rtglost@ble}
+% \end{macrocode}
+% Define command to switch to \pkgopt{super} style:
+% \begin{macrocode}
+\newcommand{\gls@setsuper}[1][glossary]{%
+\gls@setalignment[#1]%
+\gls@setheader[#1]%
+%
+\expandafter\def\csname @gls@beforeglos@#1\endcsname{%
+\tablehead{\@glossaryheader}\tabletail{\glosstail}%
+\if\glossaryalignment\relax
+\expandafter\let\expandafter\@glossaryalignment
+\csname @gls@align@#1\endcsname
+\else
+\let\@glossaryalignment\glossaryalignment
+\fi
+\@st@rtglostable{supertabular}\@glossaryalignment}
+%
+\expandafter\def\csname @gls@afterglos@#1\endcsname{%
+\end{supertabular}}%
+}
+% \end{macrocode}
+% Define command to switch to \pkgopt{long} style:
+% \begin{macrocode}
+\newcommand{\gls@setlong}[1][glossary]{%
+\gls@setalignment[#1]%
+\gls@setheader[#1]%
+%
+\expandafter\def\csname @gls@beforeglos@#1\endcsname{%
+\if\relax\glossaryalignment
+\expandafter\let\expandafter\@glossaryalignment
+\csname @gls@align@#1\endcsname
+\else
+\let\@glossaryalignment\glossaryalignment
+\fi
+\@st@rtglostable{longtable}{\@glossaryalignment}
+\@glossaryheader\endhead\glosstail\endfoot}
+%
+\expandafter\def\csname @gls@afterglos@#1\endcsname{%
+\end{longtable}}%
+}
+% \end{macrocode}
+% Define command to set the glossary style.
+% \begin{macrocode}
+\newcommand{\@setglossarystyle}[1][glossary]{%
+\@ifundefined{gls@set\gls@style}{%
+\PackageError{glossary}{Glossary style '\gls@style' undefined}{}}{%
+\ifthenelse{\equal{\gls@number}{}}{}{%
+\expandafter\edef\csname gls@#1@number\endcsname{\gls@number}%
+\@gls@setnumbering[#1]{\gls@number}%
+}%
+\csname gls@set\gls@style\endcsname[#1]}}
+% \end{macrocode}
+% Set main glossary style as per package options
+% \begin{macrocode}
+\let\gls@number\gls@glossary@number
+\@setglossarystyle
+% \end{macrocode}
+% Define keys to change glossary style. The \pkgopt{style} key sets
+% the basic style.
+% \begin{macrocode}
+\define@key{glosstyle}
+{style}
+{\ifthenelse{\equal{#1}{list} \or \equal{#1}{altlist}
+\or \equal{#1}{super} \or \equal{#1}{long}}
+{\def\gls@style{#1}}
+{\PackageError{glossary}
+{Unknown glossary style '#1'}
+{Available styles are: list, altlist, super and long}}}
+% \end{macrocode}
+% The \pkgopt{header} key should only be used in conjunction with
+% one of the tabular-type styles. If set to \pkgoptval{plain}{header}, a
+% header row will be used.
+% \begin{macrocode}
+\define@key{glosstyle}
+{header}[plain]{\ifthenelse{\equal{#1}{none} \or \equal{#1}{plain}}
+{\def\gls@header{#1}}
+{\PackageError{glossary}
+{Unknown glossary style '#1'}
+{Available styles are: none and plain}}}
+% \end{macrocode}
+% The \pkgopt{border} key should only be used in conjunction with one
+% of the tabular-type styles. If set to \pkgoptval{plain}{border}, a border will
+% be placed around the glossary.
+% \begin{macrocode}
+\define@key{glosstyle}
+{border}[plain]{\ifthenelse{\equal{#1}{none} \or \equal{#1}{plain}}
+{\def\gls@border{#1}}
+{\PackageError{glossary}
+{Unknown glossary border '#1'}
+{Available styles are: none and plain}}}
+% \end{macrocode}
+% The \pkgopt{cols} key should only be used in conjunction with one of
+% the tabular-type styles. If set to \pkgoptval{2}{cols}, the description and page
+% list will both be placed in the second column, if set to \pkgoptval{3}{cols},
+% the description will go in the second column, and the page list
+% will go in the third column.
+% \begin{macrocode}
+\define@key{glosstyle}{cols}{\gls@cols=#1\relax
+\ifthenelse{\gls@cols<2 \or \gls@cols>3}
+{\PackageError{glossary}
+{invalid number of columns}
+{The cols option can only be 2 or 3}}
+{}}
+% \end{macrocode}
+% The \pkgopt{number} key may either be \pkgoptval{none}{number} or the name of a counter.
+% \begin{macrocode}
+\define@key{glosstyle}
+{number}
+{\ifthenelse{\equal{#1}{none}}
+{\def\gls@number{#1}}
+{\@ifundefined{c@#1}{
+\PackageError{glossary}
+{Unknown glossary number style '#1'}
+{You may either specify "none" or the name of a counter,
+e.g. "section"}\def\gls@number{page}}{\def\gls@number{#1}}}}
+% \end{macrocode}
+% Provide a means of setting the style for a given glossary type.
+% \begin{macrocode}
+\newcommand{\setglossarystyle}[2][glossary]{%
+\def\gls@number{}%
+\setkeys{glosstyle}{#2}%
+\@setglossarystyle[#1]%
+}
+% \end{macrocode}
+% Set the delimiter for the case where there is no numbering
+% and there aren't 3 columns.
+% \begin{macrocode}
+\ifthenelse{\equal{\gls@glossary@number}{none} \and \gls@cols<3}{%
+\renewcommand{\@glossary@glodelim}{}}{}
+% \end{macrocode}
+% \subsection{Makeindex style file}
+%This is the code to generate the ".ist" file.
+% First define a switch that governs whether or not to write the
+% ist file.
+% \begin{macrocode}
+\newif\ifist
+\let\noist=\istfalse
+\if@filesw\isttrue\else\istfalse\fi
+% \end{macrocode}
+% Provide a command to write the ist file. This will cause
+% a problem with \styname{ngerman} because the behaviour
+% of the double quote character changes. Any packages that modify
+% this character should be loaded after the ".ist" file is written.
+% \begin{macrocode}
+\newwrite\istfile
+\catcode`\%11\relax
+\newcommand{\writeist}{
+\protected@write\@auxout{}{\protect\@istfilename{\istfilename}}
+\openout\istfile=\istfilename
+\write\istfile{% makeindex style file created by LaTeX for document "\jobname" on \the\year-\the\month-\the\day}
+\write\istfile{keyword "\string\\glossaryentry"}
+\write\istfile{preamble "\string\\begin{theglossary}"}
+\write\istfile{postamble "\string\n\string\\end{theglossary}\string\n"}
+\write\istfile{group_skip "\string\\gloskip "}
+\write\istfile{item_0 "\string\n\string\n\string\\gloitem "}
+\write\istfile{delim_0 "\string\n\string\\glodelim "}
+\write\istfile{page_compositor "\pagecompositor"}
+\write\istfile{delim_n "\string\\delimN "}
+\write\istfile{delim_r "\string\\delimR "}
+\write\istfile{delim_t "\string\\delimT "}
+\write\istfile{headings_flag 1}
+\write\istfile{heading_prefix "\string\\glogroup"}
+\write\istfile{symhead_positive "Symbols"}
+\write\istfile{numhead_positive "Numbers"}
+\closeout\istfile
+}
+\catcode`\%14\relax
+% \end{macrocode}
+%Redefine \icmdname{makeglossary} so that it creates the ".ist" file.
+% Once it is created, the \icmdname{ifist} flag is set to false to prevent
+% repeated creation of the file in the event that another
+% glossary-style type is created. If a different ".ist" file is
+% desired for each glossary type, you will need to precede each
+% "\make"\meta{type} with \icmdname{isttrue} and changed the definition
+% of \icmdname{istfilename}. (This is unlikely to occur unless more than
+% one type of page compositor is required.) If you do this, remember
+% to pass the correct ist file to makeindex. I have removed
+% "\@sanitize" at the
+% recommendation of Ulrich~Diez.
+% \begin{macrocode}
+\renewcommand{\makeglossary}{
+\newwrite\@glossaryfile
+\immediate\openout\@glossaryfile=\jobname.glo
+\renewcommand{\glossary}[1][]{\gdef\@glo@l@bel{##1}%
+\@bsphack \begingroup \@wrglossary }
+\typeout {Writing glossary file \jobname .glo }
+\let \makeglossary \@empty
+\ifist\writeist\fi
+\noist}
+% \end{macrocode}
+% The \icmdname{glossary} command has been modified to allow for an optional
+% argument to modify the label. This is the default definition of
+% \icmdname{glossary}, it doesn't write anything to the ".glo" file.
+% It doesn't use "\setkeys", so "\@sanitize" is used here.
+% Use \icmdname{makeglossary} to redefine it so that entries are written
+% to the ".glo" file.
+% \begin{macrocode}
+\renewcommand{\glossary}[1][]{%
+\@bsphack\begingroup\@sanitize\@index}
+% \end{macrocode}
+%\subsection{Defining a new glossary type}
+% First parameter (optional) is the extension of the log file
+% (information used by "makeglos.pl" but not \LaTeX).
+% Second parameter is the name of new glossary type
+% e.g.\ "notation". Third parameter is the extension of output
+% file (equivalent to "ind" or "glo". Fourth parameter
+% is the extension of input file (equivalent to "idx" or "gls").
+% The fifth parameter (optional) is the format.
+% \begin{macrocode}
+\newcommand{\newglossarytype}[4][glg]{
+\@ifundefined{#2}{%
+\protected@write\@auxout{}{\@newglossarytype[#1]{#2}{#3}{#4}}%
+\def\@glstype{#2}\def\@glsout{#3}\def\@glsin{#4}%
+\expandafter\edef\csname gls@\@glstype @number\endcsname{%
+\gls@glossary@number}%
+\expandafter\gdef\csname glsX\@glstype Xnumformat\endcsname{%
+\glsXglossaryXnumformat}%
+\expandafter\gdef\csname @\@glstype @delimN\endcsname{%
+\@glossary@delimN}%
+\expandafter\gdef\csname @\@glstype @delimR\endcsname{%
+\@glossary@delimR}%
+\expandafter\gdef\csname @gls@\@glstype @inext\endcsname{#4}%
+\expandafter\def\csname @gls@#2@type\endcsname{#4}%
+\expandafter\edef\csname make\@glstype\endcsname{%
+\noexpand\@m@kegl@ss{\@glstype}{\@glsout}}
+\expandafter\edef\csname \@glstype\endcsname{%
+\noexpand\@gl@ss@ary{\@glstype}}
+\expandafter\edef\csname x\@glstype\endcsname{%
+\noexpand\@Gl@ss@ary{\@glstype}}
+\@namedef{print\@glstype}{%
+\printglossary[#2]}%
+}{\PackageError{glossary}{Command
+\expandafter\string\csname #2\endcsname \space already defined}{%
+You can't call your new glossary type '#2' because there already
+exists a command with this name}}%
+\@@n@wglostype}
+\newcommand{\@@n@wglostype}[1][]{%
+\setglossarystyle[\@glstype]{#1}}
+% \end{macrocode}
+% The command "\@newglossarytype" is written to the auxiliary file
+% and is only used by makeglos.pl. \LaTeX\ should ignore it.
+% \begin{macrocode}
+\newcommand{\@newglossarytype}[4][glg]{}
+% \end{macrocode}
+% Define equivalent of \icmdname{makeglossary}:
+% \begin{macrocode}
+\newcommand\@m@kegl@ss[2]{%
+\expandafter\newwrite\csname @#1file\endcsname
+\expandafter\immediate\expandafter
+\openout\csname @#1file\endcsname=\jobname.#2
+\typeout {Writing #1 file \jobname .#2 }
+\expandafter\let \csname make#1\endcsname \@empty
+\ifist\writeist\fi
+\expandafter\def\csname the#1num\endcsname{\thepage}
+\noist
+}
+% \end{macrocode}
+% Define the equivalent of \icmdname{glossary}.
+% \begin{macrocode}
+\newcommand\@gl@ss@ary[2][]{\@ifundefined{@#2file}{%
+\@bsphack\begingroup\@sanitize \@index}{%
+\gdef\@glo@l@bel{#1}%
+\@bsphack \begingroup \@wrglossary[#2]}}
+% \end{macrocode}
+% Define the equivalent of \icmdname{xglossary}.
+% \begin{macrocode}
+\newcommand{\@Gl@ss@ary}{%
+\renewcommand{\@@wrglossary}[1]{%
+\glossref{\@glo@l@bel}{##1}\renewcommand{\@@wrglossary}{}}%
+\@gl@ss@ary}
+% \end{macrocode}
+% The command \icmdname{newglossarytype} should only be used in the preamble.
+% \begin{macrocode}
+\@onlypreamble{\newglossarytype}
+% \end{macrocode}
+%\subsection{Acronyms}
+% Define \icmdname{newacronym}[\meta{cmd-name}]\{\meta{abbrv}\}\{\meta{long name}\}\{\meta{glos entry}\}
+% \begin{macrocode}
+\newcommand\@acrnmsh{}
+\newcommand\@sacrnmsh{}
+\newcommand\@acrnmln{}
+\newcommand\@acrnmcmd{}
+\newcommand\@acrnmgls{}
+\newcommand\@acrnmins{}
+% \end{macrocode}
+% List of all defined acronyms.
+% \begin{macrocode}
+\toksdef\@glo@tb=2
+\newcommand{\@acr@list}{}
+% \end{macrocode}
+% append acronym to list
+% \begin{macrocode}
+\newcommand{\@acr@addtolist}[1]{\edef\@glo@ta{#1}%
+\ifthenelse{\equal{\@acr@list}{}}{%
+\edef\@acr@list{\@glo@ta}}{%
+\@glo@tb=\expandafter{\@acr@list}%
+\edef\@acr@list{\the\@glo@tb,\@glo@ta}}}
+% \end{macrocode}
+% Specify how to control the way the name key is
+% set for acronyms.
+% \begin{macrocode}
+\newcommand{\@acronymnamefmt}{\glolong\ (\gloshort)}
+\newcommand{\setacronymnamefmt}[1]{\def\@acronymnamefmt{#1}}
+% \end{macrocode}
+% Specify how to control the way the description key is
+% set for acronyms.
+% \begin{macrocode}
+\newcommand{\@acronymdescfmt}{\glodesc}
+\newcommand{\setacronymdescfmt}[1]{\def\@acronymdescfmt{#1}}
+% \end{macrocode}
+% Format the acronym abbreviation in the format specified
+% by \verb'\acronymfont'. This simply prints its
+% argument by default.
+% \begin{macrocode}
+\newcommand{\acronymfont}[1]{#1}
+% \end{macrocode}
+% This command has been restructured as from v2.17
+% \begin{macrocode}
+\newcommand{\newacronym}[4][]{%
+\ifthenelse{\equal{#1}{}}{\renewcommand\@acrnmcmd{#2}}{%
+\renewcommand\@acrnmcmd{#1}}
+\@ifundefined{\@acrnmcmd}{%
+\expandafter\newcommand\csname\@acrnmcmd short\endcsname{%
+#2\protect\glsxspace}
+\expandafter\newcommand\csname\@acrnmcmd @nx@short\endcsname{#2}
+\expandafter\newcommand\csname\@acrnmcmd long\endcsname{%
+#3\protect\glsxspace}
+\expandafter\newcommand\csname\@acrnmcmd @nx@long\endcsname{#3}
+\def\@acrn@entry{#4}%
+{%
+% extract description
+\expandafter\@gls@getdescr\expandafter{\@acrn@entry}%
+\let\glodesc\@glo@desc%
+\def\glolong{#3}%
+\@onelevel@sanitize\glolong
+\def\gloshort{\noexpand\acronymfont{#2}}%
+\@onelevel@sanitize\gloshort
+\expandafter\protected@xdef\expandafter\@acrnamefmt{\@acronymnamefmt}
+\expandafter\protected@xdef\expandafter\@acrdesc{\@acronymdescfmt}
+}%
+\@acr@addtolist{\@acrnmcmd}
+\@glo@tb=\expandafter{\@acrn@entry}%
+\protected@edef\@acr@glsentry{name={\@acrnamefmt},%
+format=glsnumformat,sort={\@acrnmcmd},\the\@glo@tb,%
+description={\@acrdesc}}%
+\@glo@tb=\expandafter{\@acr@glsentry}%
+\newboolean{\@acrnmcmd first}\setboolean{\@acrnmcmd first}{true}
+\expandafter\protected@edef\csname \@acrnmcmd\endcsname{%
+\noexpand\@ifstar{\csname @s@\@acrnmcmd\endcsname}{%
+\csname @\@acrnmcmd\endcsname}}
+\ifglshyperacronym % hyperlinks
+% unstarred version
+\expandafter\protected@edef\csname @\@acrnmcmd\endcsname{%
+\noexpand\ifthenelse{\noexpand\boolean{\@acrnmcmd first}}{%
+\csname\@acrnmcmd @nx@long\endcsname\noexpand\@acrnmins\
+(\noexpand\xacronym{\the\@glo@tb}{%
+\noexpand\acronymfont{\csname\@acrnmcmd @nx@short\endcsname}%
+})\noexpand\unsetacronym{\@acrnmcmd}%
+}{\noexpand\xacronym{\the\@glo@tb}{%
+\noexpand\acronymfont{\csname\@acrnmcmd @nx@short\endcsname}%
+\noexpand\@acrnmins}}\noexpand\glsxspace}
+% starred version
+\expandafter\protected@edef\csname @s@\@acrnmcmd\endcsname{%
+\noexpand\ifthenelse{\noexpand\boolean{\@acrnmcmd first}}{%
+\noexpand\expandafter\noexpand\MakeUppercase
+\csname\@acrnmcmd @nx@long\endcsname\noexpand\@acrnmins\
+(\noexpand\xacronym{\the\@glo@tb}{%
+\noexpand\acronymfont{\csname\@acrnmcmd @nx@short\endcsname}%
+})%
+\noexpand\unsetacronym{\@acrnmcmd}}{%
+\noexpand\xacronym{\the\@glo@tb}{%
+\noexpand\acronymfont{\noexpand\expandafter\noexpand\MakeUppercase
+\csname\@acrnmcmd @nx@short\endcsname}%
+\noexpand\@acrnmins}}\noexpand\glsxspace}
+\else % no hyperlinks
+% unstarred version
+\expandafter\protected@edef\csname @\@acrnmcmd\endcsname{%
+\noexpand\ifthenelse{\noexpand\boolean{\@acrnmcmd first}}{%
+\csname\@acrnmcmd @nx@long\endcsname\noexpand\@acrnmins\
+(\noexpand\acronym{\the\@glo@tb}{%
+\noexpand\acronymfont{\csname\@acrnmcmd @nx@short\endcsname}%
+})\noexpand\unsetacronym{\@acrnmcmd}%
+}{\noexpand\acronym{\the\@glo@tb}{%
+\noexpand\acronymfont{\csname\@acrnmcmd @nx@short\endcsname}%
+\noexpand\@acrnmins}}%
+\noexpand\glsxspace}
+% starred version
+\expandafter\protected@edef\csname @s@\@acrnmcmd\endcsname{%
+\noexpand\ifthenelse{\noexpand\boolean{\@acrnmcmd first}}{%
+\noexpand\expandafter
+\noexpand\MakeUppercase
+\csname\@acrnmcmd @nx@long\endcsname\noexpand\@acrnmins\
+(\noexpand\acronym{\the\@glo@tb}{%
+\noexpand\acronymfont{\csname\@acrnmcmd @nx@short\endcsname}%
+})%
+\noexpand\unsetacronym{\@acrnmcmd}}{%
+\noexpand\acronym{\the\@glo@tb}{%
+\noexpand\acronymfont{\noexpand\expandafter\noexpand\MakeUppercase
+\csname\@acrnmcmd @nx@short\endcsname}%
+\noexpand\@acrnmins}}\noexpand\glsxspace}
+\fi
+}{%
+\PackageError{glossary}{Command '\expandafter\string
+\csname\@acrnmcmd\endcsname' already defined}{%
+The command name specified by \string\newacronym already exists.}}}
+% \end{macrocode}
+% Define a command to use a given acronym.
+% \begin{macrocode}
+\newcommand{\useacronym}{\@ifstar\@suseacronym\@useacronym}
+\newcommand{\@suseacronym}[2][]{{\let\glsxspace\relax
+\def\@acrnmins{#1}\csname @s@#2\endcsname}%
+\setboolean{#2first}{false}}
+\newcommand{\@useacronym}[2][]{{\let\glsxspace\relax
+\def\@acrnmins{#1}\csname @#2\endcsname}%
+\setboolean{#2first}{false}}
+% \end{macrocode}
+% Define a command to use the long form of an acronym without
+% generating a glossary entry. The starred form makes the first
+% character uppercase.
+% \begin{macrocode}
+\newcommand{\acrln}{\@ifstar\@sacrln\@acrln}
+% \end{macrocode}
+% Unstarred form:
+% \begin{macrocode}
+\newcommand{\@acrln}[1]{\@ifundefined{#1long}{%
+\PackageError{glossary}{Acronym '#1' has not been defined}{}}{%
+\csname#1@nx@long\endcsname}}
+% \end{macrocode}
+% Starred form:
+% \begin{macrocode}
+\newcommand{\@sacrln}[1]{\@ifundefined{#1long}{%
+\PackageError{glossary}{Acronym '#1' has not been defined}{}}{%
+\expandafter\expandafter\expandafter
+\MakeUppercase\csname#1@nx@long\endcsname}}
+% \end{macrocode}
+% As above, but for the short form.
+% \begin{macrocode}
+\newcommand{\acrsh}{\@ifstar\@sacrsh\@acrsh}
+% \end{macrocode}
+% Unstarred form:
+% \begin{macrocode}
+\newcommand{\@acrsh}[1]{\@ifundefined{#1short}{%
+\PackageError{glossary}{Acronym '#1' has not been defined}{}}{%
+\acronymfont{\csname#1@nx@short\endcsname}}}
+% \end{macrocode}
+% Starred form:
+% \begin{macrocode}
+\newcommand{\@sacrsh}[1]{\@ifundefined{#1short}{%
+\PackageError{glossary}{Acronym '#1' has not been defined}{}}{%
+\acronymfont{\expandafter\expandafter\expandafter
+\MakeUppercase\csname#1@nx@short\endcsname}}}
+% \end{macrocode}
+% Define a means of determining whether an acronym has been
+% used or not. This was mainly included for use with LaTeX2HTML
+% which currently has no \styname{ifthen} style.
+% \begin{macrocode}
+\newcommand{\ifacronymfirstuse}[3]{%
+\@ifundefined{if#1first}{%
+\PackageError{glossary}{Acronym '#1' not defined}{}}{%
+\ifthenelse{\boolean{#1first}}{#2}{#3}}}
+% \end{macrocode}
+% Provide a means of resetting an acronym so that it is expanded
+% next time it is used.
+% \begin{macrocode}
+\newcommand{\resetacronym}[1]{%
+\@ifundefined{if#1first}{%
+\PackageError{glossary}{Acronym '#1' not defined}{}}{%
+\ifglsglobal
+\expandafter\global\csname #1firsttrue\endcsname
+\else
+\setboolean{#1first}{true}%
+\fi}}
+% \end{macrocode}
+% Reverse of the above.
+% \begin{macrocode}
+\newcommand{\unsetacronym}[1]{%
+\@ifundefined{if#1first}{%
+\PackageError{glossary}{Acronym '#1' not defined}{}}{%
+\ifglsglobal
+\expandafter\global\csname #1firstfalse\endcsname
+\else
+\setboolean{#1first}{false}%
+\fi}}
+% \end{macrocode}
+% Reset all acronyms so that they will all be expanded when next
+% used.
+% \begin{macrocode}
+\newcommand{\resetallacronyms}{%
+\@for\@acr:=\@acr@list\do{\resetacronym{\@acr}}}
+% \end{macrocode}
+% Ensure that all acronyms are not expanded, even if they haven't
+% yet been used.
+% \begin{macrocode}
+\newcommand{\unsetallacronyms}{%
+\@for\@acr:=\@acr@list\do{\unsetacronym{\@acr}}}
+% \end{macrocode}
+% Check to see if acronyms should be separate from glossary
+% \begin{macrocode}
+\ifglsacronym
+\newglossarytype[alg]{acronym}{acr}{acn}
+\providecommand{\acronymname}{List of Acronyms}
+\else
+\let\acronym=\glossary
+\let\xacronym=\xglossary
+\fi
+% \end{macrocode}
+%\subsection{Glossary Hyperlinks}
+% This section deals with commands that are used to make the
+% numbers in the glossary have hyperlinks, if hyperlinks are
+% supported.
+%
+% The command \icmdname{glshyper} is a modification of \styname{hyperref}'s
+% \icmdname{hyperpage} command, but it uses \icmdname{delimR} instead of a dash, and
+% \icmdname{delimN} instead of a comma. The command was originally called
+% \icmdname{glshyperpage} but was modified in version 2.4 to
+% enable "page" to be substituted with some arbitrary counter
+% (which should be specified as the first argument).
+% \begin{macrocode}
+\ifglshyper
+\def\glshyper#1#2{\@glshyper{#1}#2\delimR \delimR \\}
+\def\@glshyper#1#2\delimR #3\delimR #4\\{%
+\ifx\\#3\\%
+\@delimNhyper{#1}{#2}%
+\else
+\@ifundefined{hyperlink}{#2\delimR #3}{%
+\hyperlink{#1.#2}{#2}\delimR \hyperlink{#1.#3}{#3}}%
+\fi
+}
+% \end{macrocode}
+% For a list of individual pages instead of a range:
+% \begin{macrocode}
+\def\@delimNhyper#1#2{\@@delimNhyper{#1}#2\delimN \delimN\\}
+\def\@@delimNhyper#1#2\delimN #3\delimN #4\\{%
+ \ifx\\#3\\%
+ \@ifundefined{hyperlink}{#2}{\hyperlink{#1.#2}{#2}}%
+ \else
+ \@ifundefined{hyperlink}{#2\delimN #3}{%
+\hyperlink{#1.#2}{#2}\delimN \hyperlink{#1.#3}{#3}}%
+ \fi
+}
+% \end{macrocode}
+% To maintain backwards compatibility, define \icmdname{glshyperpage}
+% and \icmdname{glshypersection}. These commands may be removed at a
+% later date, so don't use them.
+% \begin{macrocode}
+\newcommand\glshyperpage[1]{\glshyper{page}{#1}}
+\newcommand\glshypersection[1]{\glshyper{section}{#1}}
+% \end{macrocode}
+% If chapters are defined, modify "\@chapter" so that is adds
+% a "section."\meta{n}".0" target (otherwise it gets too complicated
+% if you have to work out whether to use the chapter or section
+% counter---there's more than enough conditional code in this
+% package already!)
+% \begin{macrocode}
+\@ifundefined{chapter}
+{}
+{\let\@gls@old@chapter\@chapter
+\def\@chapter[#1]#2{\@gls@old@chapter[{#1}]{#2}%
+\@ifundefined{hyperdef}{}{\hyperdef{section}{\thesection}{}}}}
+% \end{macrocode}
+% Provide "\hyper"\meta{xx} to make it easier to change the page
+% number format to "bf", "sf", "tt" and "it" if you are using
+% hyperlinks.
+% The optional first argument (new to version 2.4) specifies
+% the counter being used.
+% \begin{macrocode}
+\providecommand\hyperrm[2][\gls@number]{%
+\textrm{\glshyper{#1}{#2}}}
+\providecommand\hypersf[2][\gls@number]{%
+\textsf{\glshyper{#1}{#2}}}
+\providecommand\hypertt[2][\gls@number]{%
+\texttt{\glshyper{#1}{#2}}}
+\providecommand\hyperbf[2][\gls@number]{%
+\textbf{\glshyper{#1}{#2}}}
+\providecommand\hyperit[2][\gls@number]{%
+\textit{\glshyper{#1}{#2}}}
+% \end{macrocode}
+% The following were added in version 2.4:
+% \begin{macrocode}
+\providecommand\hyperem[2][\gls@number]{%
+\emph{\glshyper{#1}{#2}}}
+\providecommand\hyperup[2][\gls@number]{%
+\textup{\glshyper{#1}{#2}}}
+\providecommand\hypersl[2][\gls@number]{%
+\textsl{\glshyper{#1}{#2}}}
+\providecommand\hypersc[2][\gls@number]{%
+\textsc{\glshyper{#1}{#2}}}
+\providecommand\hypermd[2][\gls@number]{%
+\textmd{\glshyper{#1}{#2}}}
+% \end{macrocode}
+% Hyperlinks not enabled.
+% \begin{macrocode}
+\else
+\providecommand\hyperrm[2][]{\textrm{#2}}
+\providecommand\hypersf[2][]{\textsf{#2}}
+\providecommand\hypertt[2][]{\texttt{#2}}
+\providecommand\hypermd[2][]{\textmd{#2}}
+\providecommand\hyperbf[2][]{\textbf{#2}}
+\providecommand\hyperit[2][]{\textit{#2}}
+\providecommand\hypersl[2][]{\textsl{#2}}
+\providecommand\hyperup[2][]{\textup{#2}}
+\providecommand\hypersc[2][]{\textsc{#2}}
+\providecommand\hyperem[2][]{\emph{#2}}
+\fi
+% \end{macrocode}
+%\iffalse
+%\subsection{Additional Files}
+% The remainder of this document simply lists the contents
+% of all the additional files that accompany the \styname{glossary}
+% package. There is no further documentation. Some lines may not
+% fit on the page. If you like, you can comment out this section
+% using "\iffalse" and "\fi".
+% \begin{macrocode}
+%</glossary.sty>
+% \end{macrocode}
+% \begin{macrocode}
+%<*makeglos.pl>
+% \end{macrocode}
+% \begin{macrocode}
+#!/usr/bin/perl
+
+# File : makeglos
+# Author : Nicola Talbot
+# Version : 1.5 (2006/07/20)
+# Description: simple Perl script that calls makeindex.
+# Intended for use with "glossary.sty" (saves having to remember
+# all the various switches)
+
+use Getopt::Std;
+
+if ($#ARGV < 0)
+{
+ die "Syntax : $0 [-ilqrcgm] [-s sty] [-o gls] [-t log] [-p num] <filename>\n";
+}
+
+getopt('sotp');
+getopts('ilqrcgm');
+
+# define known extensions
+
+ %exttype = (
+ glossary => {in=>'glo', out=>'gls', 'log'=>'glg'},
+ );
+
+$ext = '';
+
+if (length(@ARGV[0]) < 4)
+{
+ $name = @ARGV[0];
+}
+elsif (substr(@ARGV[0],-4,1) eq ".")
+{
+ $name = substr(@ARGV[0],0,length(@ARGV[0])-4);
+
+ $ext = substr(@ARGV[0],-3,3);
+}
+else
+{
+ $name = @ARGV[0];
+}
+
+$istfile = "$name.ist";
+
+# check log file for other glossary types
+# and for ist file name
+
+if (open AUXFILE, "$name.aux")
+{
+ while (<AUXFILE>)
+ {
+ if (m/\\\@newglossarytype\s*\[(.*)\]{(.*)}{(.*)}{(.*)}/)
+ {
+ $exttype{$2}{'in'} = $3;
+ $exttype{$2}{'out'} = $4;
+ $exttype{$2}{'log'} = $1;
+
+ if (!$opt_q)
+ {
+ print "added glossary type '$2' ($3,$4,$1)\n";
+ }
+ }
+
+ if (m/\\\@istfilename\s*{([^}]*)}/)
+ {
+ $istfile = $1;
+ }
+ }
+
+ close AUXFILE;
+}
+else
+{
+ print "unable to open $name.aux\n";
+}
+
+# save all the general makeindex switches
+
+$mkidxopts = '';
+
+if ($opt_i)
+{
+ $mkidxopts .= " -i";
+}
+
+if ($opt_l)
+{
+ $mkidxopts .= " -l";
+}
+
+if ($opt_q)
+{
+ $mkidxopts .= " -q";
+}
+
+if ($opt_r)
+{
+ $mkidxopts .= " -r";
+}
+
+if ($opt_c)
+{
+ $mkidxopts .= " -c";
+}
+
+if ($opt_g)
+{
+ $mkidxopts .= " -g";
+}
+
+unless ($opt_p eq "")
+{
+ $mkidxopts .= " -p $opt_p";
+}
+
+unless ($opt_s eq "")
+{
+ $istfile = $opt_s;
+}
+
+if ($ext ne '')
+{
+ %thistype = %{$exttype{'glossary'}}; #default
+
+ foreach $type (keys %exttype)
+ {
+ if ($exttype{$type}{'in'} eq $ext)
+ {
+ %thistype = %{$exttype{$type}};
+
+ last;
+ }
+ }
+
+ if ($opt_o eq "")
+ {
+ $outfile = "$name.$thistype{out}";
+ }
+ else
+ {
+ $outfile = $opt_o;
+ }
+
+ if ($opt_t eq "")
+ {
+ $transcript = "$name.$thistype{'log'}";
+ }
+ else
+ {
+ $transcript = $opt_t;
+ }
+
+ &makeindex("$name.$ext",$outfile,$transcript,$istfile,
+ $mkidxopts,$opt_q,$opt_m);
+}
+else
+{
+ foreach $type (keys %exttype)
+ {
+ %thistype = %{$exttype{$type}};
+
+ $inputfile = "$name.$thistype{in}";
+
+ if (-r $inputfile)
+ {
+ if ($opt_o eq "")
+ {
+ $outfile = "$name.$thistype{out}";
+ }
+ else
+ {
+ $outfile = $opt_o;
+ }
+
+ if ($opt_t eq "")
+ {
+ $transcript = "$name.$thistype{'log'}";
+ }
+ else
+ {
+ $transcript = $opt_t;
+ }
+
+ &makeindex($inputfile,$outfile,$transcript,
+ $istfile,$mkidxopts,$opt_q,$opt_m);
+ }
+ elsif (!$opt_q)
+ {
+ print "no read access for '$inputfile'\n";
+ }
+ }
+}
+
+sub makeindex{
+ local($in,$out,$trans,$ist,$rest,$quiet,$merge) = @_;
+ local($name,$cmdstr,$buffer,$n,$i,$j);
+ local(@stuff,@item);
+
+ if ($merge)
+ {
+ $cmdstr = "$rest -s $ist -t $trans -o tmp_$out $in";
+ }
+ else
+ {
+ $cmdstr = "$rest -s $ist -t $trans -o $out $in";
+ }
+
+ unless ($quiet)
+ {
+ print "makeindex $cmdstr\n";
+ }
+
+ `makeindex $cmdstr`;
+
+ if ($merge)
+ {
+ print "Merging entries\n";
+
+ open INPUT, "<tmp_$out";
+
+ $buffer = "";
+
+ while (<INPUT>)
+ {
+ $buffer .= $_;
+ }
+
+ close INPUT;
+
+ open OUTPUT, ">$out";
+
+ @stuff = split /\\gloitem /, $buffer;
+
+ $n = scalar(@stuff);
+
+ if ($n < 2)
+ {
+ print OUTPUT $buffer;
+ }
+ else
+ {
+ print OUTPUT $stuff[0];
+
+ for ($i = 1, $j=-1; $i < $n; $i++)
+ {
+ if ($stuff[$i]=~s/{\\glosslabel{(.+)}{(.+)}}//)
+ {
+ $name = $&;
+
+ if ($j==-1)
+ {
+ $j = 0;
+ $item[0]{'name'} = $name;
+ $item[0]{'desc'} = $stuff[$i];
+ }
+ else
+ {
+ # makeindex has already sorted the entries
+ # alphabetically, so duplicate entries
+ # will be one after the other
+
+ if ($item[$j]{'name'} eq $name)
+ {
+ $item[$j]{'desc'} .= $stuff[$i];
+
+ print "collating $name\n";
+ }
+ else
+ {
+ $j++;
+ $item[$j]{'name'} = $name;
+ $item[$j]{'desc'} = $stuff[$i];
+ }
+ }
+ }
+ else
+ {
+ print STDERR
+ "unable to extract name from glossary item:\n",
+ $stuff[$i];
+ }
+ }
+
+ for ($i=0; $i <= $j; $i++)
+ {
+ # remove all but the last \delimT
+ while ($item[$i]{'desc'}=~s/\\delimT/$&/sg > 1)
+ {
+ $item[$i]{'desc'}=~s/\\delimT//s;
+ }
+ print OUTPUT "\\gloitem ", $item[$i]{'name'},
+ $item[$i]{'desc'};
+ }
+ }
+
+ close OUTPUT;
+
+ print "Output written in $out\n";
+
+ unlink "tmp_$out" or print "Can't delete tmp_$out: $!\n";
+ }
+}
+
+1;
+% \end{macrocode}
+% \begin{macrocode}
+%</makeglos.pl>
+% \end{macrocode}
+% \begin{macrocode}
+%<*makeglos.bat>
+% \end{macrocode}
+% \begin{macrocode}
+@rem = '-*- Perl -*-
+@echo off
+perl -S %~dp0makeglos.pl %*
+% \end{macrocode}
+% \begin{macrocode}
+%</makeglos.bat>
+% \end{macrocode}
+% \begin{macrocode}
+%<*glossary.perl>
+% \end{macrocode}
+% \begin{macrocode}
+# File : glossary.perl
+# Author : Nicola Talbot
+# Date : 5 December 2005
+# Version : 1.03
+# Description : LaTeX2HTML implementation of glossary package.
+
+package main;
+
+# These are the only package options implemented.
+
+sub do_glossary_style_altlist{
+}
+
+sub do_glossary_style_hyper{
+}
+
+sub do_glossary_style_hyper_true{
+}
+
+sub do_glossary_style_hyperacronym{
+}
+
+sub do_glossary_style_hyperacronym_true{
+}
+
+sub do_glossary_toc{
+}
+
+sub do_glossary_toc_true{
+}
+
+$acronymtype = 'glossary';
+
+sub do_glossary_acronym{
+ &do_glossary_acronym_true
+}
+
+sub do_glossary_acronym_true{
+ $gls_mark{'acronym'} = "<tex2html_acronym_mark>";
+ $gls_file_mark{'acronym'} = "<tex2html_acronym_file_mark>";
+ $gls_title{'acronym'} = "\\acronymname";
+ $delimN{'acronym'} = ", ";
+ $glodelim{'acronym'} = " ";
+ $glsnumformat{'acronym'} = "textrm";
+ $acronymtype = 'acronym';
+}
+
+sub do_glossary_acronym_false{
+ $acronymtype = 'glossary';
+}
+
+sub do_cmd_acronymname{
+ join('', 'List of Acronyms', $_[0]);
+}
+
+# modify set_depth_levels so that glossary is added
+
+$gls_mark{'glossary'} = "<tex2html_gls_mark>";
+$gls_file_mark{'glossary'} = "<tex2html_gls_file_mark>";
+$gls_title{'glossary'} = "Glossary";
+$delimN{'glossary'} = ", ";
+$glodelim{'glossary'} = " ";
+$glsnumformat{'glossary'} = "textrm";
+
+sub replace_glossary_markers{
+ foreach $type (keys %gls_mark)
+ {
+ if (defined &add_gls_hook)
+ {&add_gls_hook if (/$gls_mark{$type}/);}
+ else
+ {&add_gls($type) if (/$gls_mark{$type}/);}
+
+ s/$gls_file_mark{$type}/$glsfile{$type}/g;
+ }
+}
+
+# there must be a better way of doing this
+# other than copying the orginal code and adding to it.
+sub replace_general_markers {
+ if (defined &replace_infopage_hook) {&replace_infopage_hook if (/$info_page_mark/);}
+ else { &replace_infopage if (/$info_page_mark/); }
+ if (defined &add_idx_hook) {&add_idx_hook if (/$idx_mark/);}
+ else {&add_idx if (/$idx_mark/);}
+ &replace_glossary_markers;
+
+ if ($segment_figure_captions) {
+s/$lof_mark/$segment_figure_captions/o
+ } else { s/$lof_mark/$figure_captions/o }
+ if ($segment_table_captions) {
+s/$lot_mark/$segment_table_captions/o
+ } else { s/$lot_mark/$table_captions/o }
+ &replace_morelinks();
+ if (defined &replace_citations_hook) {&replace_citations_hook if /$bbl_mark/;}
+ else {&replace_bbl_marks if /$bbl_mark/;}
+ if (defined &add_toc_hook) {&add_toc_hook if (/$toc_mark/);}
+ else {&add_toc if (/$toc_mark/);}
+ if (defined &add_childs_hook) {&add_childs_hook if (/$childlinks_on_mark/);}
+ else {&add_childlinks if (/$childlinks_on_mark/);}
+ &remove_child_marks;
+
+ if (defined &replace_cross_references_hook) {&replace_cross_references_hook;}
+ else {&replace_cross_ref_marks if /$cross_ref_mark||$cross_ref_visible_mark/;}
+ if (defined &replace_external_references_hook) {&replace_external_references_hook;}
+ else {&replace_external_ref_marks if /$external_ref_mark/;}
+ if (defined &replace_cite_references_hook) {&replace_cite_references_hook;}
+ else { &replace_cite_marks if /$cite_mark/; }
+ if (defined &replace_user_references) {
+ &replace_user_references if /$user_ref_mark/; }
+
+}
+
+sub add_gls{
+ local($sidx_style, $eidx_style) =('<STRONG>','</STRONG>');
+ if ($INDEX_STYLES) {
+if ($INDEX_STYLES =~/,/) {
+local(@styles) = split(/\s*,\s*/,$INDEX_STYLES);
+ $sidx_style = join('','<', join('><',@styles) ,'>');
+ $eidx_style = join('','</', join('></',reverse(@styles)) ,'>');
+} else {
+ $sidx_style = join('','<', $INDEX_STYLES,'>');
+ $eidx_style = join('','</', $INDEX_STYLES,'>');
+}
+ }
+ &add_real_gls
+}
+
+sub gloskeysort{
+ local($x, $y) = ($a, $b);
+ $x=~s/^(.*)###(\d+)$/\l\1/;
+ local($x_id) = $2;
+ $y=~s/^(.*)###(\d+)$/\l\1/;
+ local($y_id) = $2;
+
+ local($n) = ($x cmp $y);
+
+ if ($n == 0)
+ {
+ $n = ($x_id <=> $y_id);
+ }
+
+ $n;
+}
+
+sub add_real_gls{
+ local($type) = @_;
+ print "\nDoing the $type ...";
+ local($key, $str, @keys, $glossary, $level, $count,
+ @previous, @current, $id, $linktext, $delimN);
+
+ @keys = keys %{$glossary{$type}};
+
+ @keys = sort gloskeysort @keys;
+
+ $level = 0;
+
+ $delimN = $delimN{$type};
+
+ foreach $key (@keys) {
+ $current = $key;
+$str = $current;
+$str =~ s/\#\#\#\d+$//o; # Remove the unique id's
+ #$linktext = $cross_ref_visible_mark;
+ $id = ++$global{'max_id'};
+ $linktext = "\\$glossary_format{$type}{$key}${OP}$id${CP}$glossary_linktext{$type}{$key}${OP}$id${CP}";
+ $linktext = &translate_commands($linktext);
+$glossary .=
+ # If it's the same string don't start a new line
+ (&index_key_eq($current, $previous) ?
+ $delimN
+ . $glossary{$type}{$key}
+ . $linktext
+ . "</A>\n"
+ : "<DT>"
+ . $glossary_name{$type}{$key}
+ . "<DD>". $glossary_desc{$type}{$key}
+ . $glodelim{$type} . $glossary{$type}{$key}
+ . $linktext. "</A>\n");
+$previous = $current;
+ }
+ $glossary = '<DD>'.$glossary unless ($glossary =~ /^\s*<D(T|D)>/);
+
+ $glossary =~ s/(<A [^>]*>)(<D(T|D)>)/$2$1/g;
+
+ $str = &translate_commands("\\glossarypostamble");
+ s/$gls_mark{$type}/$preglossary\n<DL COMPACT>\n$glossary<\/DL>$str\n/s;
+}
+
+sub set_depth_levels {
+ # Sets $outermost_level
+ local($level);
+ # scan the document body, not the preamble, for use of sectioning commands
+ my ($contents) = $_;
+ if ($contents =~ /\\begin\s*((?:$O|$OP)\d+(?:$C|$CP))document\1|\\startdocument/s) {
+$contents = $';
+ }
+ foreach $level ("part", "chapter", "section", "subsection",
+ "subsubsection", "paragraph") {
+last if (($outermost_level) = $contents =~ /\\($level)$delimiter_rx/);
+last if (($outermost_level) = $contents =~ /\\endsegment\s*\[\s*($level)\s*\]/s);
+if ($contents =~ /\\segment\s*($O\d+$C)[^<]+\1\s*($O\d+$C)\s*($level)\s*\2/s)
+{ $outermost_level = $3; last };
+ }
+ $level = ($outermost_level ? $section_commands{$outermost_level} :
+ do {$outermost_level = 'section'; 3;});
+
+ if ($REL_DEPTH && $MAX_SPLIT_DEPTH) {
+$MAX_SPLIT_DEPTH = $level + $MAX_SPLIT_DEPTH;
+ } elsif (!($MAX_SPLIT_DEPTH)) { $MAX_SPLIT_DEPTH = 1 };
+
+ %unnumbered_section_commands = (
+ 'tableofcontents', $level
+, 'listoffigures', $level
+, 'listoftables', $level
+, 'bibliography', $level
+, 'textohtmlindex', $level
+, 'textohtmlglossary', $level
+ , %unnumbered_section_commands
+ );
+
+ %section_commands = (
+ %unnumbered_section_commands
+ , %section_commands
+ );
+}
+
+sub add_bbl_and_idx_dummy_commands {
+ local($id) = $global{'max_id'};
+
+ s/([\\]begin\s*$O\d+$C\s*thebibliography)/$bbl_cnt++; $1/eg;
+ ## if ($bbl_cnt == 1) {
+s/([\\]begin\s*$O\d+$C\s*thebibliography)/$id++; "\\bibliography$O$id$C$O$id$C $1"/geo;
+ #}
+ $global{'max_id'} = $id;
+ s/([\\]begin\s*$O\d+$C\s*theindex)/\\textohtmlindex $1/o;
+ s/[\\]printindex/\\textohtmlindex /o;
+ &add_gls_dummy_commands;
+ &lib_add_bbl_and_idx_dummy_commands() if defined(&lib_add_bbl_and_idx_dummy_commands);
+}
+
+# this gets called before do_cmd_newglossarytype
+# so currently only substitutes \\printglossary and \\printacronym
+sub add_gls_dummy_commands{
+ #foreach $type (keys %gls_mark)
+ #{
+ # #$id = ++$global{'max_id'};
+ # s/[\\]print$type/\\textohtmlglossary[$type]/sg;
+ #}
+
+ s/[\\]printglossary/\\textohtmlglossary/sg;
+ s/[\\]printacronym/\\textohtmlglossary[$acronymtype]/sg;
+}
+
+# This is modified from do_cmd_textohtmlindex
+
+sub do_cmd_textohtmlglossary{
+ local($_) = @_;
+
+ local($type);
+
+ $_[0]=~s/^\s*\[([^]]*)\]//;
+ $type = $1;
+ if ($type eq '') {$type = 'glossary';}
+
+ unless (defined $gls_mark{$type})
+ {
+ &write_warnings("glossary type '$type' not implemented");
+ }
+
+ if (eval "(defined \&do_cmd_${type}name) ||\$new_command{\"${type}name\"}")
+ {
+ local($br_id)=++$global{'max_id'};
+ $TITLE = &translate_environments("$O$br_id$C\\${type}name$O$br_id$C");
+ }
+ else
+ { $TITLE = $gls_title{$type} }
+ $toc_sec_title = $TITLE;
+ $glsfile{$type} = $CURRENT_FILE;
+ if (%glossary_labels) { &make_glossary_labels(); }
+ if (($SHORT_INDEX) && (%glossary_segment))
+ { &make_preglossary(); }
+ else
+ { $preglossary = &translate_commands("\\glossarypreamble"); }
+ local $idx_head = $section_headings{'textohtmlindex'};
+ local($heading) = join(''
+ , &make_section_heading($TITLE, $idx_head)
+ , $gls_mark{$type} );
+ local($pre,$post) = &minimize_open_tags($heading);
+ join('',"<BR>\n" , $pre, $_[0]);
+}
+
+sub make_glossary_labels {
+ local($key, @keys);
+ @keys = keys %glossary_labels;
+ foreach $key (@keys) {
+ if (($ref_files{$key}) && !($ref_files{$key} eq "$glsfile{'glossary'}")) {
+ local($tmp) = $ref_files{$key};
+ &write_warnings("\nmultiple label $key , target in $glsfile{'glossary'} masks $tmp ");
+ }
+ $ref_files{$key} .= $glsfile{'glossary'};
+ }
+}
+
+sub make_preglossary{ &make_real_preglossary }
+sub make_real_preglossary{
+ local($key, @keys, $head, $body);
+ $head = "<HR>\n<H4>Legend:</H4>\n<DL COMPACT>";
+ @keys = keys %glossary_segment;
+ foreach $key (@keys) {
+ local($tmp) = "segment$key";
+ $tmp = $ref_files{$tmp};
+ $body .= "\n<DT>$key<DD>".&make_named_href('',$tmp,$glossary_segment{$key});
+ }
+ $preglossary = join('', $head, $body, "\n</DL>") if ($body);
+}
+
+sub do_cmd_glossary { &do_real_glossary(@_) }
+sub do_real_glossary {
+ local($_) = @_;
+ local($br_id, $str);
+ local($type) = "glossary";
+ local($anchor);
+
+ if (s/^\S*$OP(\d+)${CP}type=(.+)$OP\1$CP//)
+ {
+ $type = $2;
+ }
+
+ local($idx_option,$pat) = &get_next_optional_argument;
+
+ $str = &missing_braces unless (
+(s/$next_pair_pr_rx/($br_id, $str) = ($1, $2);''/eo)
+||(s/$next_pair_rx/($br_id, $str) = ($1, $2);''/eo));
+
+ # the maths gets processed before being passed
+ # to do_cmd_glossary. How can I do this
+ # substitution before it gets converted to an image?
+ $str=~s/\"\"/\"/gs;
+ $str=~s/\"\|/\|/gs;
+ $str=~s/\"@/@/gs;
+ $str=~s/\"!/!/gs;
+
+ $str=~s/;SPMquot;;SPMquot;/;SPMquot;/gs;
+ $str=~s/;SPMquot;\|/\|/gs;
+ $str=~s/;SPMquot;\@/\@/gs;
+ $str=~s/;SPMquot;!/!/gs;
+
+ $anchor = &make_glossary_entry($br_id,$str,$anchor_invisible_mark,$type);
+
+ join('', $anchor, $_);
+}
+
+sub make_glossary_entry { &make_real_glossary_entry(@_) }
+sub make_real_glossary_entry {
+ local($br_id,$str,$text,$type) = @_;
+ local($this_file) = $CURRENT_FILE;
+ $TITLE = $saved_title if (($saved_title)&&(!($TITLE)||($TITLE eq $default_title)));
+ #extract name, sort, description and format data from $str
+ local($name,$sort,$description,$format);
+
+ unless (($str=~/name\s*=\s*${OP}(\d+)${CP}(.+)${OP}\1${CP}\s*,?/s && ($name=$2)) ||
+ ($str=~/name\s*=\s*([^,]+)\s*,?/s && ($name=$1)))
+ {
+ &write_warnings("can't determine name key from $str");
+ }
+
+ unless (($str=~/sort\s*=\s*${OP}(\d+)${CP}(.+)${OP}\1${CP}\s*,?/s && ($sort=$2)) ||
+ ($str=~/sort\s*=\s*([^,]+)\s*,?/s && ($sort=$1)))
+ {
+ $sort = $name;
+ }
+
+ unless (($str=~/description\s*=\s*${OP}(\d+)${CP}(.+)${OP}\1${CP}\s*,?/s && ($description=$2)) ||
+ ($str=~/description\s*=\s*([^,]+)\s*,?/s && ($description=$1)))
+ {
+ &write_warnings("can't determine description key from $str");
+ }
+
+ unless (($str=~/format\s*=\s*${OP}(\d+)${CP}(.+)${OP}\1${CP}\s*,?/s && ($format=$2)) ||
+ ($str=~/format\s*=\s*([^,]+)\s*,?/s && ($format=$1)))
+ {
+ $format = "glsnumformat[$type]";
+ }
+
+ # Save the reference
+ $str = "$sort$description###" . ++$global{'max_id'}; # Make unique
+ # concatenate multiple spaces into a single space
+ # otherwise keys won't sort properly
+ $str=~s/\s+/ /gs;
+ $glossary{$type}{$str} .= &make_half_href($this_file."#$br_id");
+ $glossary_name{$type}{$str} = $name;
+ $glossary_format{$type}{$str} = $format;
+ $glossary_desc{$type}{$str} = $description;
+ $glossary_linktext{$type}{$str} = $TITLE;
+ "<A HREF=$gls_file_mark{$type}#tex2html$href_name NAME=\"$br_id\">$text<\/A>";
+}
+
+sub do_cmd_xglossary{
+ local($_) = @_;
+ local($entry,$text);
+ local($type) = "glossary";
+
+ if (s/^$OP(\d+)${CP}type=(.+)$OP\1$CP//)
+ {
+ $type = $2;
+ }
+
+ $entry = &missing_braces unless
+ s/$next_pair_pr_rx/$entry=$2;''/eo;
+
+ $text = &missing_braces unless
+ s/$next_pair_pr_rx/$text=$2;''/eo;
+
+ $entry=~s/\"\"/\"/gs;
+ $entry=~s/\"\|/\|/gs;
+ $entry=~s/\"\@/\@/gs;
+ $entry=~s/\"!/!/gs;
+
+ $entry=~s/;SPMquot;;SPMquot;/;SPMquot;/gs;
+ $entry=~s/;SPMquot;\|/\|/gs;
+ $entry=~s/;SPMquot;\@/\@/gs;
+ $entry=~s/;SPMquot;!/!/gs;
+
+ $br_id = ++$global{'max_id'};
+ join('', &make_glossary_entry($br_id,$entry,$text,$type),
+ $_);
+}
+
+sub do_cmd_newglossarytype{
+ local($type,$out,$in);
+ $type = &missing_braces unless
+ ($_[0]=~s/$next_pair_pr_rx//o&&($type=$2));
+ $out = &missing_braces unless
+ ($_[0]=~s/$next_pair_pr_rx//o&&($out=$2));
+ $in = &missing_braces unless
+ ($_[0]=~s/$next_pair_pr_rx//o&&($in=$2));
+
+ &make_newglossarytype($type);
+
+ $_[0];
+}
+
+sub make_newglossarytype{
+ local($type) = @_;
+
+ eval ("sub do_cmd_make$type\{\}");
+
+ $gls_mark{$type} = "<tex2html_${type}_mark>";
+ $gls_file_mark{$type} = "<tex2html_${type}_file_mark>";
+ $gls_title{$type} = "\\glossaryname";
+
+ local($tmp) = 'sub do_cmd_' . $type. '{';
+ $tmp .= 'local($id) = ++$global{\'max_id\'};';
+ $tmp .= '"\\\\glossary$OP$id${CP}type=' . $type . '$OP$id$CP".$_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ $tmp = 'sub do_cmd_x' . $type. '{';
+ $tmp .= 'local($id) = ++$global{\'max_id\'};';
+ $tmp .= '"\\\\xglossary$OP$id${CP}type=' . $type . '$OP$id$CP".$_[0];';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ $tmp = 'sub do_cmd_print' . $type. '{';
+ #$tmp .= 'local($id)=++$global{\'max_id\'};';
+ $tmp .= '"\\\\textohtmlglossary[' . $type
+ . ']" . $_[0]';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ $delimN{$type} = ", ";
+ $glodelim{$type} = "";
+ $glsnumformat{$type} = "";
+
+}
+
+sub do_cmd_gloshort{
+ local($_) = @_;
+ join('', "<tex2html_GLOSHORT_mark>", $_);
+}
+
+sub do_cmd_glolong{
+ local($_) = @_;
+ join('', "<tex2html_GLOLONG_mark>", $_);
+}
+
+$acronymnamefmt = "<tex2html_GLOLONG_mark> (<tex2html_GLOSHORT_mark>)";
+
+sub do_cmd_setacronymnamefmt{
+ local($_) = @_;
+
+ $acronymnamefmt = &missing_braces unless
+ s/$next_pair_pr_rx/$acronymnamefmt=$2;''/eo;
+
+ $_;
+}
+
+sub do_cmd_acronymfont{
+ local($_) = @_;
+ local($text) = &missing_braces unless
+ s/$next_pair_pr_rx/$text=$2;''/eo;
+
+ $text . $_;
+}
+
+ %acronym = ();
+
+sub do_cmd_newacronym{
+ local($_) = @_;
+ local($cmdname,$pat,$abbrv,$long,$glsentry,$name);
+
+ ($cmdname,$pat) = &get_next_optional_argument;
+
+ $abbrv = &missing_braces unless
+ (s/$next_pair_pr_rx/$abbrv=$2;''/eo);
+ $long = &missing_braces unless
+ (s/$next_pair_pr_rx/$long=$2;''/eo);
+ $glsentry = &missing_braces unless
+ (s/$next_pair_pr_rx/$glsentry=$2;''/eo);
+
+ if ($cmdname eq '')
+ {
+ $cmdname = $abbrv;
+ }
+
+ local($id);
+ $id = ++$global{'max_id'};
+ local($fmtedabbrv) = &translate_commands("\\acronymfont$OP$id$CP$abbrv$OP$id$CP");
+
+ unless ($glsentry=~/name=/)
+ {
+ $name = $acronymnamefmt;
+ $name=~s/<tex2html_GLOSHORT_mark>/$fmtedabbrv/egs;
+ $name=~s/<tex2html_GLOLONG_mark>/$long/egs;
+ $id = ++$global{'max_id'};
+ $glsentry .= ",name=$OP$id$CP$name$OP$id$CP";
+ }
+
+ $global{"${cmdname}first"} = 1;
+ $acronym{$cmdname}{'abbrv'} = $abbrv;
+ $acronym{$cmdname}{'long'} = $long;
+ $acronym{$cmdname}{'entry'} = $glsentry;
+
+ local($tmp);
+
+ unless ($cmdname=~/[^a-zA-Z]/)
+ {
+ $tmp = 'sub do_cmd_' . $cmdname . '{';
+ $tmp .= 'local($_)=@_;';
+ $tmp .= 'local($id)=++$global{\'max_id\'};';
+ $tmp .= 'local($str);';
+ $tmp .= '$str="${OP}$id${CP}'
+ . $cmdname
+ . '${OP}$id${CP}";';
+ $tmp .= '&do_cmd_useacronym($str . $_[0])';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ $tmp = 'sub do_cmd_' . $cmdname . 'star{';
+ $tmp .= 'local($_)=@_;';
+ $tmp .= 'local($id)=++$global{\'max_id\'};';
+ $tmp .= 'local($str);';
+ $tmp .= '$str="${OP}$id${CP}'
+ . $cmdname
+ . '${OP}$id${CP}";';
+ $tmp .= '&do_cmd_useacronymstar($str . $_[0])';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ $tmp = 'sub do_cmd_' . $cmdname . 'long{';
+ $tmp .= 'local($_)=@_;';
+ $tmp .= 'join("", \'' . $long . '\', $_[0])';
+ $tmp .= '}';
+
+ eval($tmp);
+
+ $tmp = 'sub do_cmd_' . $cmdname . 'short{';
+ $tmp .= 'local($_)=@_;';
+ $tmp .= 'join("", \'' . $fmtedabbrv . '\', $_[0])';
+ $tmp .= '}';
+
+ eval($tmp);
+ }
+
+ $_;
+}
+
+sub do_cmd_acrsh{
+ local($_) = @_;
+ local($cmdname,$text,$id);
+
+ $cmdname = &missing_braces unless
+ (s/$next_pair_pr_rx/$id=$1;$cmdname=$2;''/eo);
+
+ $text = &translate_commands("\\${cmdname}short");
+
+ $text . $_;
+}
+
+sub do_cmd_acrshstar{
+ local($_) = @_;
+ local($cmdname,$text,$id);
+
+ $cmdname = &missing_braces unless
+ (s/$next_pair_pr_rx/$id=$1;$cmdname=$2;''/eo);
+
+ $text = &translate_commands("\\${cmdname}short");
+
+ $text=~s/(<.*>)?(\w)/\1\u\2/;
+
+ $text . $_;
+}
+
+sub do_cmd_acrln{
+ local($_) = @_;
+ local($cmdname,$text,$id);
+
+ $cmdname = &missing_braces unless
+ (s/$next_pair_pr_rx/$id=$1;$cmdname=$2;''/eo);
+
+ $text = &translate_commands("\\${cmdname}long");
+
+ $text . $_;
+}
+
+sub do_cmd_acrlnstar{
+ local($_) = @_;
+ local($cmdname,$text,$id);
+
+ $cmdname = &missing_braces unless
+ (s/$next_pair_pr_rx/$id=$1;$cmdname=$2;''/eo);
+
+ $text = &translate_commands("\\${cmdname}long");
+
+ $text=~s/(\w)/\u\1/;
+
+ $text . $_;
+}
+
+sub do_cmd_useacronym{
+ local($_)=@_;
+ local($str,$abbrv,$long,$entry,$id);
+
+ local($optarg,$pat)=&get_next_optional_argument;
+
+ $cmdname = &missing_braces unless
+ (s/$next_pair_pr_rx/$cmdname=$2;''/eo);
+
+ if (defined %{$acronym{$cmdname}})
+ {
+ $abbrv = $acronym{$cmdname}{'abbrv'};
+ $long = $acronym{$cmdname}{'long'};
+ $entry = $acronym{$cmdname}{'entry'};
+ $id = ++$global{'max_id'};
+ $abbrv = "\\acronymfont$OP$id$CP$abbrv$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $str = "\\xglossary${OP}$id${CP}type="
+ . $acronymtype. "${OP}$id${CP}";
+ $id = ++$global{'max_id'};
+ $str .= "${OP}$id${CP}"
+ . $entry . "${OP}$id${CP}";
+ $id = ++$global{'max_id'};
+ $str .= "${OP}$id${CP}";
+ $str .= ($global{"${cmdname}first"} ? "$long$optarg ($abbrv)" : "$abbrv$optarg");
+ $str .= "${OP}$id${CP}";
+
+ $global{"${cmdname}first"} = 0;
+ }
+ else
+ {
+ &write_warnings("acronym '$cmdname' not defined");
+ }
+
+ $str . $_
+}
+
+sub do_cmd_useacronymstar{
+ local($_)=@_;
+ local($str,$abbrv,$long,$entry,$id);
+ local($optarg,$pat)=&get_next_optional_argument;
+
+ $cmdname = &missing_braces unless
+ (s/$next_pair_pr_rx/$cmdname=$2;''/eo);
+
+ if (defined %{$acronym{$cmdname}})
+ {
+ $abbrv = $acronym{$cmdname}{'abbrv'};
+ $long = $acronym{$cmdname}{'long'};
+ $entry = $acronym{$cmdname}{'entry'};
+
+ if ($global{"${cmdname}first"})
+ {
+ $long=~s/^([^a-zA-Z]*)([a-zA-Z])/\1\u\2/;
+ }
+ else
+ {
+ $abbrv=~s/^([^a-zA-Z]*)([a-zA-Z])/\1\u\2/;
+ }
+
+ $id = ++$global{'max_id'};
+ $abbrv = "\\acronymfont$OP$id$CP$abbrv$OP$id$CP";
+
+ $name = ($global{"${cmdname}first"} ? "$long$optarg ($abbrv)" : "$abbrv$optarg");
+
+ $id = ++$global{'max_id'};
+ $str = "\\xglossary${OP}$id${CP}type="
+ . $acronymtype . "${OP}$id${CP}";
+ $id = ++$global{'max_id'};
+ $str .= "${OP}$id${CP}"
+ . $entry . "${OP}$id${CP}";
+ $id = ++$global{'max_id'};
+ $str .= "${OP}$id${CP}";
+ $str .= $name;
+ $str .= "${OP}$id${CP}";
+
+ $global{"${cmdname}first"} = 0;
+ }
+ else
+ {
+ &write_warnings("acronym '$cmdname' not defined");
+ }
+
+ $str . $_
+}
+
+sub do_cmd_ifacronymfirstuse{
+ local($_) = @_;
+ local($acronym,$truebit,$falsebit,$str);
+
+ $acronym = &missing_braces unless ($_[0]=~s/$next_pair_pr_rx//o&&($acronym=$2));
+ $truebit = &missing_braces unless ($_[0]=~s/$next_pair_pr_rx//o&&($truebit=$2));
+ $falsebit = &missing_braces unless ($_[0]=~s/$next_pair_pr_rx//o&&($falsebit=$2));
+
+ $str = ($global{"${acronym}true"} ? $truebit : $falsebit);
+
+ $str . $_[0];
+}
+
+sub do_cmd_resetacronym{
+ local($_) = @_;
+ local($cmdname);
+
+ $cmdname = &missing_braces unless
+ (s/$next_pair_pr_rx/$cmdname=$2;''/eo);
+
+ if (defined %{$acronym{$cmdname}})
+ {
+ $global{"${cmdname}first"} = 1;
+ }
+ else
+ {
+ &write_warnings("acronym '$cmdname' not defined");
+ }
+
+ $_;
+}
+
+sub do_cmd_resetallacronyms{
+ local($_) = @_;
+
+ foreach $key (keys %acronym)
+ {
+ $global{"${key}first"} = 1;
+ }
+
+ $_;
+}
+
+sub do_cmd_unsetacronym{
+ local($_) = @_;
+ local($cmdname);
+
+ $cmdname = &missing_braces unless
+ (s/$next_pair_pr_rx/$cmdname=$2;''/eo);
+
+ if (defined %{$acronym{$cmdname}})
+ {
+ $global{"${cmdname}first"} = 0;
+ }
+ else
+ {
+ &write_warnings("acronym '$cmdname' not defined");
+ }
+
+ $_;
+}
+
+sub do_cmd_unsetallacronyms{
+ local($_) = @_;
+
+ foreach $key (keys %acronym)
+ {
+ $global{"${key}first"} = 0;
+ }
+
+ $_;
+}
+
+ %savedglosentry = ();
+
+# This command is deprecated
+sub do_cmd_saveglosentry{
+ local($_) = @_;
+ local($name,$desc,$type,$pat);
+
+ ($type,$pat) = &get_next_optional_argument;
+
+ $name = &missing_braces unless
+ s/$next_pair_pr_rx/$name=$2;''/eo;
+ $desc = &missing_braces unless
+ s/$next_pair_pr_rx/$desc=$2;''/eo;
+
+ $savedglosentry{$name}{'entry'} = "name=$name,description=$desc";
+ $savedglosentry{$name}{'type'} = $type;
+
+ $_;
+}
+
+sub do_cmd_storeglosentry{
+ local($_) = @_;
+ local($type,$pat,$entry,$label);
+
+ ($type,$pat) = &get_next_optional_argument;
+
+ if ($type eq '')
+ {
+ $type = 'glossary';
+ }
+
+ $label = &missing_braces unless
+ s/$next_pair_pr_rx/$label=$2;''/eo;
+
+ $entry = &missing_braces unless
+ s/$next_pair_pr_rx/$entry=$2;''/eo;
+
+ $savedglosentry{$label}{'entry'} = $entry;
+ $savedglosentry{$label}{'type'} = $type;
+
+ $_;
+}
+
+sub do_cmd_useglosentry{
+ local($_) = @_;
+ local($optarg,$pat,$name,$str,$id);
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ $name = &missing_braces unless
+ (s/$next_pair_pr_rx/$name=$2;''/eo);
+
+ if (defined $savedglosentry{$name}{type})
+ {
+ $id = ++$global{'max_id'};
+ $str = "\\$savedglosentry{$name}{type}${OP}$id${CP}$savedglosentry{$name}{entry}";
+
+ unless ($optarg eq "")
+ {
+ $str .= ",$optarg";
+ }
+
+ $str .= "${OP}$id${CP}";
+ }
+ else
+ {
+ &write_warnings("glossary entry '$name' undefined");
+ $str = '';
+ }
+
+ $str . $_;
+}
+
+sub do_cmd_useGlosentry{
+ local($_) = @_;
+ local($optarg,$pat,$name,$str,$id);
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ $name = &missing_braces unless
+ (s/$next_pair_pr_rx/$name=$2;''/eo);
+
+ if (defined $savedglosentry{$name}{type})
+ {
+ $id = ++$global{'max_id'};
+ $str = "\\x$savedglosentry{$name}{type}${OP}$id${CP}$savedglosentry{$name}{entry}";
+
+ unless ($optarg eq "")
+ {
+ $str .= ",$optarg";
+ }
+
+ $str .= "${OP}$id${CP}";
+ }
+ else
+ {
+ &write_warnings("glossary entry '$name' undefined");
+ $str = '';
+ }
+
+ $str . $_;
+}
+
+sub do_cmd_gls{
+ local($_) = @_;
+ local($optarg,$pat,$label,$str,$id,$name);
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ if (defined $savedglosentry{$label}{type})
+ {
+ $str = $savedglosentry{$label}{'entry'};
+
+ if ($str=~/name=[ ]*${OP}(\d+)${CP}(.*)${OP}\1${CP}/s)
+ {
+ $name = $2;
+ }
+ elsif (($str=~/name=[ ]*([^,]+),/m)
+ || ($str=~/name=[ ]*([^,]+)\Z(?!\n)/m))
+ {
+ $name = $1;
+ }
+
+ $id = ++$global{'max_id'};
+ $str = "\\x$savedglosentry{$label}{type}${OP}$id${CP}$savedglosentry{$label}{entry}";
+
+ unless ($optarg eq "")
+ {
+ $str .= ",$optarg";
+ }
+
+ $str .= "${OP}$id${CP}";
+ $id = ++$global{'max_id'};
+ $str .= "${OP}$id${CP}$name${OP}$id${CP}";
+ }
+ else
+ {
+ &write_warnings("glossary entry '$label' undefined");
+ $str = '';
+ }
+
+ $str . $_;
+}
+
+sub do_cmd_glossarypreamble{
+ local($_) = @_;
+ $_[0];
+}
+
+sub do_cmd_glossarypostamble{
+ local($_) = @_;
+ $_[0];
+}
+
+sub do_cmd_glsnumformat{
+ local($_) = @_;
+ local($type,$pat) = &get_next_optional_argument;
+
+ if ($type eq '')
+ {
+ $type = 'glossary';
+ }
+
+ local($cmd) = '';
+ unless ($glsnumformat{$type} eq '')
+ {
+ $cmd = "\\$glsnumformat{$type}";
+ }
+
+ $cmd . $_;
+}
+
+sub do_cmd_setglossary{
+ local($_) = @_;
+ local($str,$type,$format,$delimN,$glodelim);
+ $str = &missing_braces unless ($_[0]=~s/$next_pair_pr_rx//o&&($str=$2));
+
+ unless (($str=~/type=([^,]+),|$/&&($type=$1)) ||
+ ($str=~/type=${OP}(\d+)${CP}(.*)${OP}\1${CP}/&&($type=$2)))
+ {
+ $type = 'glossary';
+ }
+
+ if ($str=~/glsnumformat=[ ]*${OP}(\d+)${CP}(.*)${OP}\1${CP}/s)
+ {
+ $format = $2;
+ }
+ elsif (($str=~/glsnumformat=[ ]*([^,]+),/m)
+ || ($str=~/glsnumformat=[ ]*([^,]+)\Z(?!\n)/m))
+ {
+ $format = $1;
+ }
+
+ if ($format ne '')
+ {
+ $glsnumformat{$type} = $format;
+
+ if ($format eq 'ignore')
+ {
+ $delimN{$type} = '';
+ }
+ }
+
+ if (($str=~/delimN=([^,]+),|$/&&($delimN=$1)) ||
+ ($str=~/delimN=${OP}(\d+)${CP}(.*)${OP}\1${CP}/&&($delimN=$2)))
+ {
+ $delimN{$type} = $delimN;
+ }
+
+ if (($str=~/glodelim=([^,]+),|$/&&($glodelim=$1)) ||
+ ($str=~/glodelim=${OP}(\d+)${CP}(.*)${OP}\1${CP}/&&($glodelim=$2)))
+ {
+ $glodelim{$type} = $glodelim;
+ }
+
+ $_[0];
+}
+
+sub do_cmd_ignore{
+ local($_) = @_;
+ local($str);
+ $str = &missing_braces unless ($_[0]=~s/$next_pair_pr_rx//o&&($str=$2));
+
+ $_[0];
+}
+
+sub do_cmd_hyperit{
+ join('', "\\textit ", $_[0]);
+}
+
+sub do_cmd_hyperrm{
+ join('', "\\textrm ", $_[0]);
+}
+
+sub do_cmd_hypertt{
+ join('', "\\texttt ", $_[0]);
+}
+
+sub do_cmd_hypersf{
+ join('', "\\textsf ", $_[0]);
+}
+
+sub do_cmd_hyperbf{
+ join('', "\\textbf ", $_[0]);
+}
+
+&ignore_commands( <<_IGNORED_CMDS_ );
+makeglossary
+makeacronym
+_IGNORED_CMDS_
+
+1;
+% \end{macrocode}
+% \begin{macrocode}
+%</glossary.perl>
+% \end{macrocode}
+% \begin{macrocode}
+%<*sample.tex>
+% \end{macrocode}
+% \begin{macrocode}
+\documentclass[a4paper]{report}
+
+\usepackage[plainpages=false,colorlinks]{hyperref}
+\usepackage{glossary}
+
+\makeglossary
+
+% You need to use the -m switch with makeglos.pl to concatenate
+% entries with the same name but different descriptions
+% If you don't, and you use PDFLaTeX you will get a warning
+% about duplicate labels. To prevent this, set a different
+% sort key for each entry, e.g. sort=glossary1 for the first
+% entry and sort=glossary2 for the second entry
+
+\storeglosentry{glossary1}{name=glossary,
+description=1) list of technical words}
+
+\storeglosentry{glossary2}{name=glossary,
+description=2) collection of glosses}
+
+\storeglosentry{Perl}{name=\texttt{Perl},
+sort=Perl, % need a sort key because name contains a command
+description=A scripting language}
+
+\storeglosentry{pagelist}{name=page list,
+% description value has to be enclosed in braces
+% because it contains commas
+description={a list of individual pages or page ranges,
+e.g.\ 1,2,4,7-9}}
+
+\begin{document}
+
+\title{Sample Document Using glossary Package}
+\author{Nicola Talbot}
+\pagenumbering{alph}% prevent duplicate page link names if using PDF
+\maketitle
+
+\pagenumbering{roman}
+\tableofcontents
+
+\chapter{Introduction}
+\pagenumbering{arabic}
+
+A \gls{glossary1} is a very useful addition to any
+technical document, although a \gls{glossary2} can
+also simply be a collection of glosses, which is
+another thing entirely.
+
+Once you have run your document through \LaTeX, you
+will then need to run the \texttt{.glo} file through
+\texttt{makeindex}. You will need to set the output
+file so that it creates a \texttt{.gls} file instead
+of an \texttt{.ind} file, and change the name of
+the log file so that it doesn't overwrite the index
+log file (if you have an index for your document).
+Rather than having to remember all the command line
+switches, you can call the \gls{Perl} script
+\texttt{makeglos.pl} which provides a convenient
+wrapper.
+
+If you have two terms with different meanings in your
+\gls{glossary1}, \texttt{makeindex} will of course treat them as two
+separate entries, however, some people prefer to
+merge them. This can be done using \texttt{makeglos.pl}, and
+passing the option \texttt{-m}.
+
+If a comma appears within the name or description, grouping
+must be used: \gls{pagelist}.
+
+\printglossary
+
+\end{document}
+% \end{macrocode}
+% \begin{macrocode}
+%</sample.tex>
+% \end{macrocode}
+% \begin{macrocode}
+%<*sample4col.tex>
+% \end{macrocode}
+% \begin{macrocode}
+\documentclass[a4paper]{article}
+
+% start out with 3 column format to make it easier to modify
+\usepackage[style=long,cols=3]{glossary}[2006/07/20]
+
+% make glossary have 4 columns all left aligned
+% (this assumes entries can fit onto a single line
+% otherwise use p{} specifier instead of l)
+\renewcommand{\glossaryalignment}{llll}
+
+% Define header row
+\newcommand{\glossaryheader}{%
+\bfseries Name & \bfseries Description & \bfseries Unit &
+\bfseries Page}
+
+\makeglossary
+
+\storeglosentry{w}{name={$w$},sort=w,description={width&m}}
+\storeglosentry{M}{name={$M$},sort=M,description={mass&kg}}
+
+\begin{document}
+
+\printglossary
+
+The width, \gls{w}, is measured in meters. The mass, \gls{M} is
+measured in kilograms.
+
+\end{document}
+% \end{macrocode}
+% \begin{macrocode}
+%</sample4col.tex>
+% \end{macrocode}
+% \begin{macrocode}
+%<*sampleAcr.tex>
+% \end{macrocode}
+% \begin{macrocode}
+\documentclass[a4paper]{report}
+
+\usepackage[colorlinks,plainpages=false]{hyperref}
+\usepackage[style=altlist,hypertoc,acronym]{glossary}
+
+% use \makeglossary if using package option
+% acronym=false
+%\makeglossary
+% use \makeacronym if using package option
+% acronym=true
+\makeacronym
+
+\newacronym{svm}{support vector machine}{%
+description=Statistical pattern recognition
+technique~\cite{svm}}
+
+\newacronym[ksvm]{k-svm}{kernel support vector machine}{%
+description={Statistical pattern recognition technique
+using the ``kernel trick'' (see also SVM)}}
+
+\begin{document}
+\tableofcontents
+
+\chapter{Support Vector Machines}
+
+The \svm\ is used widely in the area of pattern recognition.
+\useacronym*[s]{svm} are \ldots
+
+This is the long version: \svmlong\ or alternatively:
+\acrln*{svm}.
+Abbreviation: \svmshort\ or \acrsh*{svm}.
+
+\chapter{Kernel Support Vector Machines}
+
+The \ksvm\ is \ifacronymfirstuse{svm}{a}{an} \svm\ that uses
+the so called ``kernel trick''.
+
+%\resetacronym{ksvm}
+\resetallacronyms
+\useacronym*[s]{ksvm} \ldots
+\svm.
+
+\begin{thebibliography}{1}
+\bibitem{svm} \ldots
+\end{thebibliography}
+
+%\printglossary
+\printacronym
+
+\end{document}
+% \end{macrocode}
+% \begin{macrocode}
+%</sampleAcr.tex>
+% \end{macrocode}
+% \begin{macrocode}
+%<*sampleEq.tex>
+% \end{macrocode}
+% \begin{macrocode}
+\documentclass[a4paper,12pt]{report}
+
+\usepackage{amsmath}
+\usepackage[colorlinks]{hyperref}
+\usepackage[header,border=none,cols=3,number=equation]{glossary}[2006/07/20]
+
+\newcommand{\erf}{\operatorname{erf}}
+\newcommand{\erfc}{\operatorname{erfc}}
+
+\makeglossary
+
+% Uncomment the following line to put a blank line between
+% every entry:
+%\setglossary{delimT={\cr & \cr},gloskip={}}
+
+% Change the glossary title:
+
+\renewcommand{\glossaryname}{Index of Special Functions
+and Notations}
+
+% Change the glossary headings
+
+\renewcommand{\entryname}{Notation}
+
+\renewcommand{\descriptionname}{Function Name}
+
+\renewcommand{\glspageheader}{Number of Formula}
+
+% Add a blank row after the header row
+\newcommand{\glossarysubheader}{ & & \\}
+
+% Store entries for later use
+
+\storeglosentry{Gamma}{name=\ensuremath{\Gamma(z)},
+description=Gamma function,sort=Gamma}
+
+\storeglosentry{gamma}{name={\ensuremath{\gamma(\alpha,x)}},
+description=Incomplete gamma function,sort=gamma}
+
+\storeglosentry{iGamma}{name={\ensuremath{\Gamma(\alpha,x)}},
+description=Incomplete gamma function,sort=Gamma}
+
+\storeglosentry{psi}{name=\ensuremath{\psi(x)},
+description=Psi function,sort=psi}
+
+\storeglosentry{erf}{name=\ensuremath{\erf(x)},
+description=Error function,sort=erf}
+
+\storeglosentry{erfc}{name=\ensuremath{\erfc},
+description=Complementary error function,sort=erfc}
+
+\storeglosentry{B}{name={\ensuremath{B(x,y)}},
+description=Beta function,sort=B}
+
+\storeglosentry{Bx}{name={\ensuremath{B_x(p,q)}},
+description=Incomplete beta function,sort=Bx}
+
+\storeglosentry{Tn}{name=\ensuremath{T_n(x)},
+description=Chebyshev's polynomials of the first kind,sort=Tn}
+
+\storeglosentry{Un}{name=\ensuremath{U_n(x)},
+description=Chebyshev's polynomials of the second kind,sort=Un}
+
+\storeglosentry{Hn}{name=\ensuremath{H_n(x)},
+description=Hermite polynomials,sort=Hn}
+
+\storeglosentry{Ln}{name=\ensuremath{L_n^\alpha(x)},
+description=Laguerre polynomials,sort=Lna}
+
+\storeglosentry{Znu}{name=\ensuremath{Z_\nu(z)},
+description=Bessel functions,sort=Z}
+
+\storeglosentry{Phi}{name={\ensuremath{\Phi(\alpha,\gamma;z)}},
+description=confluent hypergeometric function,sort=Pagz}
+
+\storeglosentry{knu}{name=\ensuremath{k_\nu(x)},
+description=Bateman's function,sort=kv}
+
+\storeglosentry{Dp}{name=\ensuremath{D_p(z)},
+description=Parabolic cylinder functions,sort=Dp}
+
+\storeglosentry{F}{name={\ensuremath{F(\phi,k)}},
+description=Elliptical integral of the first kind,sort=Fpk}
+
+\storeglosentry{C}{name=\ensuremath{C},
+description=Euler's constant,sort=C}
+
+\storeglosentry{G}{name=\ensuremath{G},
+description=Catalan's constant,sort=G}
+
+\begin{document}
+\title{A Sample Document Using glossary.sty}
+\author{Nicola Talbot}
+\maketitle
+
+\begin{abstract}
+This is a sample document illustrating the use of the \textsf{glossary}
+package. The functions here have been taken from ``Tables of
+Integrals, Series, and Products'' by I.S.~Gradshteyn and I.M~Ryzhik.
+The glossary is a list of special functions, so
+the equation number has been used rather than the page number. This
+can be done using the \texttt{number=equation} package
+option.
+\end{abstract}
+
+\printglossary
+
+\chapter{Gamma Functions}
+
+\begin{equation}
+\gls{Gamma} = \int_{0}^{\infty}e^{-t}t^{z-1}\,dt
+\end{equation}
+
+\verb|\ensuremath| is only required here if using
+hyperlinks.
+\begin{equation}
+\useGlosentry{Gamma}{\ensuremath{\Gamma(x+1)}} = x\Gamma(x)
+%\useGlosentry{Gamma}{\Gamma(x+1)} = x\Gamma(x)
+\end{equation}
+
+\begin{equation}
+\gls{gamma} = \int_0^x e^{-t}t^{\alpha-1}\,dt
+\end{equation}
+
+\begin{equation}
+\gls{iGamma} = \int_x^\infty e^{-t}t^{\alpha-1}\,dt
+\end{equation}
+
+\newpage
+
+\begin{equation}
+\gls{Gamma} = \Gamma(\alpha, x) + \gamma(\alpha, x)
+\end{equation}
+
+\begin{equation}
+\gls{psi} = \frac{d}{dx}\ln\Gamma(x)
+\end{equation}
+
+\chapter{Error Functions}
+
+\begin{equation}
+\gls{erf} = \frac{2}{\surd\pi}\int_0^x e^{-t^2}\,dt
+\end{equation}
+
+\begin{equation}
+\gls{erfc} = 1 - \erf(x)
+\end{equation}
+
+\chapter{Beta Function}
+
+\begin{equation}
+\gls{B} = 2\int_0^1 t^{x-1}(1-t^2)^{y-1}\,dt
+\end{equation}
+Alternatively:
+\begin{equation}
+\gls{B} = 2\int_0^{\frac\pi2}\sin^{2x-1}\phi\cos^{2y-1}\phi\,d\phi
+\end{equation}
+
+\begin{equation}
+\gls{B} = \frac{\Gamma(x)\Gamma(y)}{\Gamma(x+y)} = B(y,x)
+\end{equation}
+
+\begin{equation}
+\gls{Bx} = \int_0^x t^{p-1}(1-t)^{q-1}\,dt
+\end{equation}
+
+\chapter{Polynomials}
+
+\section{Chebyshev's polynomials}
+
+\begin{equation}
+\gls{Tn} = \cos(n\arccos x)
+\end{equation}
+
+\begin{equation}
+\gls{Un} = \frac{\sin[(n+1)\arccos x]}{\sin[\arccos x]}
+\end{equation}
+
+\section{Hermite polynomials}
+
+\begin{equation}
+\gls{Hn} = (-1)^n e^{x^2} \frac{d^n}{dx^n}(e^{-x^2})
+\end{equation}
+
+\section{Laguerre polynomials}
+
+\begin{equation}
+L_n^{\alpha} (x) = \frac{1}{n!}e^x x^{-\alpha}
+\frac{d^n}{dx^n}(e^{-x}x^{n+\alpha})
+\end{equation}
+
+\chapter{Bessel Functions}
+
+Bessel functions $Z_\nu$ are solutions of
+\begin{equation}
+\useglosentry{Znu}
+\frac{d^2Z_\nu}{dz^2} + \frac{1}{z}\,\frac{dZ_\nu}{dz} +
+\left( 1-\frac{\nu^2}{z^2}Z_\nu = 0 \right)
+\end{equation}
+
+\chapter{Confluent hypergeometric function}
+
+\begin{equation}
+\gls{Phi} = 1 + \frac{\alpha}{\gamma}\,\frac{z}{1!}
++ \frac{\alpha(\alpha+1)}{\gamma(\gamma+1)}\,\frac{z^2}{2!}
++\frac{\alpha(\alpha+1)(\alpha+2)}{\gamma(\gamma+1)(\gamma+2)}\,
+\frac{z^3}{3!} + \cdots
+\end{equation}
+
+\begin{equation}
+\gls{knu} = \frac{2}{\pi}\int_0^{\pi/2}
+\cos(x \tan\theta - \nu\theta)\,d\theta
+\end{equation}
+
+\chapter{Parabolic cylinder functions}
+
+\begin{equation}
+\gls{Dp} = 2^{\frac{p}{2}}e^{-\frac{z^2}{4}}
+\left\{
+\frac{\surd\pi}{\Gamma\left(\frac{1-p}{2}\right)}
+\Phi\left(-\frac{p}{2},\frac{1}{2};\frac{z^2}{2}\right)
+-\frac{\sqrt{2\pi}z}{\Gamma\left(-\frac{p}{2}\right)}
+\Phi\left(\frac{1-p}{2},\frac{3}{2};\frac{z^2}{2}\right)
+\right\}
+\end{equation}
+
+\chapter{Elliptical Integral of the First Kind}
+
+\begin{equation}
+\gls{F} = \int_0^\phi \frac{d\alpha}{\sqrt{1-k^2\sin^2\alpha}}
+\end{equation}
+
+\chapter{Constants}
+
+\begin{equation}
+\gls{C} = 0.577\,215\,664\,901\ldots
+\end{equation}
+
+\begin{equation}
+\gls{G} = 0.915\,965\,594\ldots
+\end{equation}
+
+\end{document}
+% \end{macrocode}
+% \begin{macrocode}
+%</sampleEq.tex>
+% \end{macrocode}
+% \begin{macrocode}
+%<*sampleEqPg.tex>
+% \end{macrocode}
+% \begin{macrocode}
+\documentclass[a4paper,12pt]{report}
+
+\usepackage{amsmath}
+\usepackage[colorlinks]{hyperref}
+\usepackage[header,toc,border=none,cols=3,
+ number=equation]{glossary}[2006/07/20]
+
+\newcommand{\erf}{\operatorname{erf}}
+\newcommand{\erfc}{\operatorname{erfc}}
+
+\renewcommand{\glossaryname}{Index of Special Functions and Notations}
+
+\renewcommand{\glossarypreamble}{Numbers in italic indicate the equation number,
+numbers in bold indicate page numbers where the main definition occurs.\par}
+
+% set the default glossary numbers to italic
+% hyperit is used instead of textit because
+% the hyperref package is being used.
+\setglossary{glsnumformat=hyperit}
+
+% 1st column heading
+\renewcommand{\entryname}{Notation}
+
+% 2nd column heading
+\renewcommand{\descriptionname}{Function Name}
+
+% Add a blank row after the header
+\newcommand{\glossarysubheader}{ & & \\}
+
+% store glossary entries for later use
+
+\storeglosentry{Gamma}{name=\ensuremath{\Gamma(z)},
+description=Gamma function,sort=Gamma}
+
+\storeglosentry{gamma}{name=\ensuremath{\gamma(\alpha,x)},
+description=Incomplete gamma function,sort=gamma}
+
+\storeglosentry{iGamma}{name=\ensuremath{\Gamma(\alpha,x)},
+description=Incomplete gamma function,sort=Gamma}
+
+\storeglosentry{psi}{name=\ensuremath{\psi(x)},
+description=Psi function,sort=psi}
+
+\storeglosentry{erf}{name=\ensuremath{\erf(x)},
+description=Error function,sort=erf}
+
+\storeglosentry{erfc}{name=\ensuremath{\erfc(x)},
+description=Complementary error function,sort=erfc}
+
+\storeglosentry{beta}{name=\ensuremath{B(x,y)},
+description=Beta function,sort=B}
+
+\storeglosentry{Bx}{name=\ensuremath{B_x(p,q)},
+description=Incomplete beta function,sort=Bx}
+
+\storeglosentry{Tn}{name=\ensuremath{T_n(x)},
+description=Chebyshev's polynomials of the first kind,
+sort=Tn}
+
+\storeglosentry{Un}{name=\ensuremath{U_n(x)},
+description=Chebyshev's polynomials of the second kind,
+sort=Un}
+
+\storeglosentry{Hn}{name=\ensuremath{H_n(x)},
+description=Hermite polynomials,sort=Hn}
+
+\storeglosentry{Lna}{name=\ensuremath{L_n^\alpha(x)},
+description=Laguerre polynomials,sort=Lna}
+
+\storeglosentry{Znu}{name=\ensuremath{Z_\nu(z)},
+description=Bessel functions,sort=Z}
+
+\storeglosentry{Pagz}{name=\ensuremath{\Phi(\alpha,\gamma;z)},
+description=confluent hypergeometric function,sort=Pagz}
+
+\storeglosentry{kv}{name=\ensuremath{k_\nu(x)},
+description=Bateman's function,sort=kv}
+
+\storeglosentry{Dp}{name=\ensuremath{D_p(z)},
+description=Parabolic cylinder functions,sort=Dp}
+
+\storeglosentry{Fpk}{name=\ensuremath{F(\phi,k)},
+description=Elliptical integral of the first kind,sort=Fpk}
+
+\storeglosentry{C}{name=\ensuremath{C},
+description=Euler's constant,sort=C}
+
+\storeglosentry{G}{name=\ensuremath{G},
+description=Catalan's constant,sort=G}
+
+\renewcommand{\shortglossaryname}{Special Functions}
+
+\makeglossary
+
+\pagestyle{headings}
+
+\begin{document}
+
+\title{Sample Document Using Interchangable Numbering}
+\author{Nicola Talbot}
+\maketitle
+
+\begin{abstract}
+This is a sample document illustrating the use of the \textsf{glossary}
+package. The functions here have been taken from ``Tables of
+Integrals, Series, and Products'' by I.S.~Gradshteyn and I.M~Ryzhik.
+
+The glossary lists both page numbers and equation numbers.
+Since the majority of the entries use the equation number,
+\texttt{number=equation} was used as a package option.
+The entries that should refer to the page number instead
+use the \texttt{number=equation} glossary key.
+Note that this example will only work where the
+page number and equation number compositor is the same. So
+it won't work if, say, the page numbers are of the form
+2-4 and the equation numbers are of the form 4.6.
+As most of the glossary entries should have an italic
+format, it is easiest to set the default format to
+italic.
+
+\end{abstract}
+
+\tableofcontents
+
+\printglossary
+
+\chapter{Gamma Functions}
+
+The \useGlosentry[number=page,format=hyperbf]{Gamma}{gamma function} is
+defined as
+\begin{equation}
+\gls{Gamma} = \int_{0}^{\infty}e^{-t}t^{z-1}\,dt
+\end{equation}
+
+\begin{equation}
+\useGlosentry{Gamma}{\ensuremath{\Gamma(x+1)}} = x\Gamma(x)
+\end{equation}
+
+\begin{equation}
+\gls{gamma} = \int_0^x e^{-t}t^{\alpha-1}\,dt
+\end{equation}
+
+\begin{equation}
+\gls{iGamma} = \int_x^\infty e^{-t}t^{\alpha-1}\,dt
+\end{equation}
+
+\newpage
+
+\begin{equation}
+\useGlosentry{Gamma}{\ensuremath{\Gamma(\alpha)}} = \Gamma(\alpha, x) + \gamma(\alpha, x)
+\end{equation}
+
+\begin{equation}
+\gls{psi} = \frac{d}{dx}\ln\Gamma(x)
+\end{equation}
+
+\chapter{Error Functions}
+
+The \useGlosentry[number=page,format=hyperbf]{erf}{error
+function} is defined as:
+\begin{equation}
+\gls{erf} = \frac{2}{\surd\pi}\int_0^x e^{-t^2}\,dt
+\end{equation}
+
+\begin{equation}
+\gls{erfc} = 1 - \erf(x)
+\end{equation}
+
+\chapter{Beta Function}
+
+\begin{equation}
+\gls{beta} = 2\int_0^1 t^{x-1}(1-t^2)^{y-1}\,dt
+\end{equation}
+Alternatively:
+\begin{equation}
+\gls{beta} = 2\int_0^{\frac\pi2}\sin^{2x-1}\phi\cos^{2y-1}\phi\,d\phi
+\end{equation}
+
+\begin{equation}
+\gls{beta} = \frac{\Gamma(x)\Gamma(y)}{\Gamma(x+y)} = B(y,x)
+\end{equation}
+
+\begin{equation}
+\gls{Bx} = \int_0^x t^{p-1}(1-t)^{q-1}\,dt
+\end{equation}
+
+\chapter{Chebyshev's polynomials}
+
+\begin{equation}
+\gls{Tn} = \cos(n\arccos x)
+\end{equation}
+
+\begin{equation}
+\gls{Un} = \frac{\sin[(n+1)\arccos x]}{\sin[\arccos x]}
+\end{equation}
+
+\chapter{Hermite polynomials}
+
+\begin{equation}
+\gls{Hn} = (-1)^n e^{x^2} \frac{d^n}{dx^n}(e^{-x^2})
+\end{equation}
+
+\chapter{Laguerre polynomials}
+
+\begin{equation}
+\gls{Lna} = \frac{1}{n!}e^x x^{-\alpha}
+\frac{d^n}{dx^n}(e^{-x}x^{n+\alpha})
+\end{equation}
+
+\chapter{Bessel Functions}
+
+Bessel functions $Z_\nu(z)$ are solutions of
+\begin{equation}
+\frac{d^2Z_\nu}{dz^2} + \frac{1}{z}\,\frac{dZ_\nu}{dz} +
+\left(
+1-\frac{\nu^2}{z^2}Z_\nu = 0
+\right)
+\end{equation}
+\useglosentry{Znu}
+
+\chapter{Confluent hypergeometric function}
+
+\begin{equation}
+\gls{Pagz} = 1 + \frac{\alpha}{\gamma}\,\frac{z}{1!}
++ \frac{\alpha(\alpha+1)}{\gamma(\gamma+1)}\,\frac{z^2}{2!}
++\frac{\alpha(\alpha+1)(\alpha+2)}
+ {\gamma(\gamma+1)(\gamma+2)}
+\,\frac{z^3}{3!}
++ \cdots
+\end{equation}
+
+\begin{equation}
+\gls{kv} = \frac{2}{\pi}\int_0^{\pi/2}
+\cos(x \tan\theta - \nu\theta)\,d\theta
+\end{equation}
+
+\chapter{Parabolic cylinder functions}
+
+\begin{equation}
+\gls{Dp} = 2^{\frac{p}{2}}e^{-\frac{z^2}{4}}
+\left\{
+\frac{\surd\pi}{\Gamma\left(\frac{1-p}{2}\right)}
+\Phi\left(-\frac{p}{2},\frac{1}{2};\frac{z^2}{2}\right)
+-\frac{\sqrt{2\pi}z}{\Gamma\left(-\frac{p}{2}\right)}
+\Phi\left(\frac{1-p}{2},\frac{3}{2};\frac{z^2}{2}\right)
+\right\}
+\end{equation}
+
+\chapter{Elliptical Integral of the First Kind}
+
+\begin{equation}
+\gls{Fpk} = \int_0^\phi
+\frac{d\alpha}{\sqrt{1-k^2\sin^2\alpha}}
+\end{equation}
+
+\chapter{Constants}
+
+\begin{equation}
+\gls{C} = 0.577\,215\,664\,901\ldots
+\end{equation}
+
+\begin{equation}
+\gls{G} = 0.915\,965\,594\ldots
+\end{equation}
+
+\end{document}
+% \end{macrocode}
+% \begin{macrocode}
+%</sampleEqPg.tex>
+% \end{macrocode}
+% \begin{macrocode}
+%<*sampleNtn.tex>
+% \end{macrocode}
+% \begin{macrocode}
+\documentclass{report}
+
+\usepackage[plainpages=false,colorlinks]{hyperref}
+\usepackage{html}
+%\usepackage{array}
+\usepackage[toc,style=long,cols=3]{glossary}
+
+\makeglossary
+
+% Define a new glossary type called notation
+\newglossarytype{notation}{not}{ntn}[style=long,cols=2,border,header]
+
+% Set up notation style
+\newcommand{\notationname}{Notation}
+% Don't display numbers, remove commas and number hyphens
+% for notation entries, and put a full stop after the
+% deescription:
+\setglossary{type=notation,glsnumformat=ignore,glodelim={.}}
+
+\makenotation
+
+\begin{document}
+
+\title{Sample Document using glossary Package}
+\author{Nicola Talbot}
+\pagenumbering{alph}
+\maketitle
+
+\begin{abstract}
+%stop hyperref complaining about duplicate page identifiers
+\pagenumbering{Alph}
+This is a sample document illustrating the use of the
+\textsf{glossary} package. In this example, a new glossary type
+called \texttt{notation} is defined, so that the document can have a
+separate glossary of terms and index of notation. The index of notation
+doesn't have associated numbers.
+\end{abstract}
+
+
+\pagenumbering{roman}
+\tableofcontents
+
+\printglossary
+
+% Either of the following 2 commands will have
+% the same effect with LaTeX. Effect slightly
+% different with LaTeX2HTML.
+
+%\printnotation
+\printglossary[notation]
+
+\chapter{Introduction}
+\pagenumbering{arabic}
+
+Sets\glossary{name=set,description=A collection of distinct objects}
+are denoted by a caligraphic font
+e.g.\ $\mathcal{S}$%
+\notation{name=$\mathcal{S}$,description=A set,sort=S}.
+
+Let $\mathcal{U}$ denote the universal set\notation{
+name=$\mathcal{U}$,description={The universal set},sort=U}.
+
+The cardinality\glossary{name=cardinality,
+description=The number of elements in the specified set} of
+a set $\mathcal{S}$ is denoted $|\mathcal{S}|$%
+\notation{name=$\mid\mathcal{S}\mid$,
+description=cardinality of $\mathcal{S}$,sort=cardinality}
+
+\chapter{Next}
+
+Now for a hyperlink:
+\xnotation{name=$\mathcal{U}$, description={The universal
+set}, sort=U}{$\mathcal{U}$}.
+
+\end{document}
+% \end{macrocode}
+% \begin{macrocode}
+%</sampleNtn.tex>
+% \end{macrocode}
+% \begin{macrocode}
+%<*sampleNtn2.tex>
+% \end{macrocode}
+% \begin{macrocode}
+\documentclass{report}
+
+\usepackage[plainpages=false,colorlinks]{hyperref}
+\usepackage{html}
+\usepackage[toc]{glossary}[2006/07/20]
+
+\makeglossary
+
+% Define a new glossary type called notation
+% Suppress the page numbering in the list of notation
+\newglossarytype[nlg]{notation}{not}{ntn}[number=none]
+
+% Set up notation style
+\newcommand{\notationname}{Notation}
+
+\makenotation
+
+\begin{document}
+
+% Save details for later use (note the use of \protect):
+\storeglosentry[notation]{not:set}{name={$\mathcal{S}$},
+description=A set,sort=S}
+
+\storeglosentry[notation]{not:U}{name=$\mathcal{U}$,
+description={The universal set},sort=U}
+
+\storeglosentry[notation]{not:card}{name=$\mid\mathcal{S}\mid$,
+description=cardinality of $\mathcal{S}$,
+sort=cardinality}
+
+\storeglosentry{glos:set}{name=set,description=A collection of
+distinct objects}
+
+\storeglosentry{glos:card}{name=cardinality,description=The number of
+elements in the specified set}
+
+\title{Sample Document using glossary Package}
+\author{Nicola Talbot}
+\pagenumbering{alph}
+\maketitle
+
+\begin{abstract}
+%stop hyperref complaining about duplicate page identifiers:
+\pagenumbering{Alph}
+This is a sample document illustrating the use of the
+\textsf{glossary} package. In this example, a new glossary type
+called \texttt{notation} is defined, so that the document can have a
+separate glossary of terms and index of notation. The index of notation
+doesn't have associated numbers.
+\end{abstract}
+
+
+\pagenumbering{roman}
+\tableofcontents
+
+\printglossary
+
+% Either of the following 2 commands will have
+% the same effect with LaTeX. Effect slightly
+% different with LaTeX2HTML.
+
+\printnotation
+%\printglossary[notation]
+
+\chapter{Introduction}
+\pagenumbering{arabic}
+
+Sets\useglosentry{glos:set}
+are denoted by a caligraphic font
+e.g.\ $\mathcal{S}$\useglosentry{not:set}.
+
+Let \gls{not:U} denote the universal set.
+
+The \gls{glos:card} of a set $\mathcal{S}$ is denoted
+\gls{not:card}.
+
+\chapter{Another Chapter}
+
+Another mention of the universal set \gls{not:U}.
+
+\end{document}
+% \end{macrocode}
+% \begin{macrocode}
+%</sampleNtn2.tex>
+% \end{macrocode}
+% \begin{macrocode}
+%<*sampleSec.tex>
+% \end{macrocode}
+% \begin{macrocode}
+\documentclass{report}
+
+\usepackage[plainpages=false,colorlinks]{hyperref}
+\usepackage[style=altlist,toc,number=section]{glossary}
+
+\makeglossary
+
+\storeglosentry{ident}{name=identity matrix,description=diagonal
+matrix with 1s along the leading diagonal}
+
+\storeglosentry{diag}{name=diagonal matrix,
+description=matrix whose only non-zero entries are along
+the leading diagonal}
+
+\storeglosentry{sing}{name=singular matrix,
+description=matrix with zero determinant}
+
+\begin{document}
+
+\pagenumbering{roman}
+\tableofcontents
+
+\printglossary
+
+\chapter{Introduction}
+\pagenumbering{arabic}
+This is a sample document illustrating the use of the
+\textsf{glossary} package.
+
+\chapter{Diagonal matrices}
+
+A \gls[format=hyperit]{diag} is a matrix where all elements not on the
+leading diagonal are zero. This is the
+primary definition, so an italic font is used for the page number.
+
+\newpage
+\section{Identity matrix}
+The \gls[format=hyperit]{ident} is a \gls{diag} whose leading
+diagonal elements are all equal to 1.
+
+Here is another entry for a \gls{diag}.
+
+\chapter{Singular Matrices}
+
+A \gls{sing} is a matrix with zero determinant.
+\useGlosentry{sing}{Singular matrices} are non-invertible.
+
+Another \gls{ident} entry.
+
+\end{document}
+% \end{macrocode}
+% \begin{macrocode}
+%</sampleSec.tex>
+% \end{macrocode}
+%\fi
+%\Finale
+\endinput
diff --git a/obsolete/macros/latex/contrib/glossary/glossary.ins b/obsolete/macros/latex/contrib/glossary/glossary.ins
new file mode 100644
index 0000000000..6359e0d0d0
--- /dev/null
+++ b/obsolete/macros/latex/contrib/glossary/glossary.ins
@@ -0,0 +1,38 @@
+% glossary.ins generated using makedtx version 0.91b 2006/7/25 18:13
+\input docstrip
+
+\preamble
+Copyright (C) 2006 Nicola Talbot, all rights reserved.
+If you modify this file, you must change its name first.
+You are NOT ALLOWED to distribute this file alone. You are NOT
+ALLOWED to take money for the distribution or use of either this
+file or a changed version, except for a nominal charge for copying
+etc.
+\endpreamble
+
+\askforoverwritefalse
+
+\generate{\file{makeglos.pl}{\nopreamble\nopostamble\from{glossary.dtx}{makeglos.pl}}
+\file{sampleSec.tex}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{glossary.dtx}{sampleSec.tex,package}}
+\file{sampleNtn.tex}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{glossary.dtx}{sampleNtn.tex,package}}
+\file{sampleEqPg.tex}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{glossary.dtx}{sampleEqPg.tex,package}}
+\file{makeglos.bat}{\nopreamble\nopostamble\from{glossary.dtx}{makeglos.bat}}
+\file{sample.tex}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{glossary.dtx}{sample.tex,package}}
+\file{sampleNtn2.tex}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{glossary.dtx}{sampleNtn2.tex,package}}
+\file{glossary.perl}{\nopreamble\nopostamble\from{glossary.dtx}{glossary.perl}}
+\file{glossary.sty}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{glossary.dtx}{glossary.sty,package}}
+\file{sample4col.tex}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{glossary.dtx}{sample4col.tex,package}}
+\file{sampleAcr.tex}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{glossary.dtx}{sampleAcr.tex,package}}
+\file{sampleEq.tex}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{glossary.dtx}{sampleEq.tex,package}}
+}
+
+\endbatchfile
diff --git a/obsolete/macros/latex/contrib/glossary/glossary.pdf b/obsolete/macros/latex/contrib/glossary/glossary.pdf
new file mode 100644
index 0000000000..e74d20b216
--- /dev/null
+++ b/obsolete/macros/latex/contrib/glossary/glossary.pdf
Binary files differ
diff --git a/obsolete/macros/latex/contrib/glossary/manual.html b/obsolete/macros/latex/contrib/glossary/manual.html
new file mode 100644
index 0000000000..5cd4cdb85d
--- /dev/null
+++ b/obsolete/macros/latex/contrib/glossary/manual.html
@@ -0,0 +1,3069 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.70)
+original version by: Nikos Drakos, CBLU, University of Leeds
+* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+ Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>glossary.sty v 2.4: LaTeX2e Package to Assist Generating Glossaries</TITLE>
+<META NAME="description" CONTENT="glossary.sty v 2.4: LaTeX2e Package to Assist Generating Glossaries">
+<META NAME="keywords" CONTENT="manual">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+
+</HEAD>
+
+<BODY >
+
+<P>
+
+ <H1 ALIGN="CENTER">glossary.sty v 2.4: LaTeX2e Package to Assist Generating Glossaries</H1>
+<DIV>
+
+<P ALIGN="CENTER"><STRONG>Nicola L.C. Talbot</STRONG></P>
+<P ALIGN="CENTER"><STRONG>20th July 2006</STRONG></P>
+</DIV>
+<BR>
+
+<H2><A NAME="SECTION00010000000000000000">
+Contents</A>
+</H2>
+<!--Table of Contents-->
+
+<UL>
+<LI><A NAME="tex2html32"
+ HREF="manual.html#SECTION00020000000000000000">Introduction</A>
+<LI><A NAME="tex2html33"
+ HREF="manual.html#SECTION00030000000000000000">Installation</A>
+<LI><A NAME="tex2html34"
+ HREF="manual.html#SECTION00040000000000000000">Generating Glossary Information</A>
+<UL>
+<LI><A NAME="tex2html35"
+ HREF="manual.html#SECTION00041000000000000000">Storing Glossary Information</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html36"
+ HREF="manual.html#SECTION00050000000000000000">makeglos.pl</A>
+<LI><A NAME="tex2html37"
+ HREF="manual.html#SECTION00060000000000000000">Displaying the Glossary</A>
+<LI><A NAME="tex2html38"
+ HREF="manual.html#SECTION00070000000000000000">Package Options</A>
+<UL>
+<LI><A NAME="tex2html39"
+ HREF="manual.html#SECTION00071000000000000000">Examples</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html40"
+ HREF="manual.html#SECTION00080000000000000000">Defining New Glossary Types</A>
+<LI><A NAME="tex2html41"
+ HREF="manual.html#SECTION00090000000000000000">Acronyms</A>
+<UL>
+<LI><A NAME="tex2html42"
+ HREF="manual.html#SECTION00091000000000000000">Examples</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html43"
+ HREF="manual.html#SECTION000100000000000000000">Customizing the Glossary</A>
+<LI><A NAME="tex2html44"
+ HREF="manual.html#SECTION000110000000000000000">Sample Documents</A>
+<LI><A NAME="tex2html45"
+ HREF="manual.html#SECTION000120000000000000000">LaTeX2HTML Style File</A>
+<UL>
+<LI><A NAME="tex2html46"
+ HREF="manual.html#SECTION000121000000000000000">Limitations</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html47"
+ HREF="manual.html#SECTION000130000000000000000">Troubleshooting</A>
+<LI><A NAME="tex2html48"
+ HREF="manual.html#SECTION000140000000000000000">Obsolete Commands</A>
+<LI><A NAME="tex2html49"
+ HREF="manual.html#SECTION000150000000000000000">Contact Details</A>
+<LI><A NAME="tex2html50"
+ HREF="manual.html#SECTION000160000000000000000">Acknowledgements</A>
+<LI><A NAME="tex2html51"
+ HREF="manual.html#SECTION000170000000000000000">Index</A>
+</UL>
+<!--End of Table of Contents-->
+<P>
+
+<H1><A NAME="SECTION00020000000000000000">
+Introduction</A>
+</H1>
+
+ The <TT>glossary</TT><A NAME="1680"></A> package is provided to assist
+generating a glossary. It has a certain amount of flexibility,
+allowing the user to customize the format of the glossary, and
+define new glossary-style objects.
+
+<P>
+
+<H1><A NAME="SECTION00030000000000000000">
+Installation</A>
+</H1>
+
+<P>
+You need to make sure you have downloaded the following three
+files:
+<PRE>
+glossary.ins
+glossary.dtx
+README
+</PRE>
+To extract the code from the <TT>glossary.dtx</TT> file, you
+will need to run the installation file through LaTeX:
+<PRE>
+latex glossary.ins
+</PRE>
+This will create the following files:
+<PRE>
+glossary.sty
+glossary.perl
+makeglos.pl
+makeglos.bat
+</PRE>
+along with several sample files. The file <TT>glossary.sty</TT>
+should be placed somewhere in the LaTeX path, e.g.
+<TT>texmf/tex/latex/glossary/</TT> or
+<TT>localtexmf/tex/latex/glossary/</TT>. Remember to update the
+T<SMALL>E</SMALL>X database if you are installing this package for the first time.
+The file <TT>glossary.perl</TT> is a LaTeX2HTML style file, and
+should be placed in the LaTeX2HTML style file directory (usually
+<TT>latex2html/styles/</TT>). The file <TT>makeglos.pl</TT>
+is a Perl script which calls <TT>makeindex</TT><A NAME="1683"></A>. If you are
+using UNIX or Linux, you will need to set the permissions so
+that you can execute the file:
+<PRE>
+chmod a+x makeglos.pl
+</PRE>
+You should then place this file somewhere on your path.
+(You may also need to edit the first line of
+this file, if <TT>perl</TT><A NAME="1686"></A> is located in a directory other than <code>/usr/bin/</code><A NAME="tex2html1"
+ HREF="#foot1555"><SUP>1</SUP></A>.)
+
+<P>
+If you are not using UNIX or Linux etc, you may have to explicitly
+load the file into Perl, so you would need to do
+<TT>perl makeglos.pl</TT> instead of just <TT>makeglos.pl</TT>.
+If you are using Windows, a batch file, <TT>makeglos.bat</TT>
+is provided which will run Perl on <TT>makeglos.pl</TT>.
+Both <TT>makeglos.pl</TT> and <TT>makeglos.bat</TT> should
+be placed somewhere specified by the PATH environment
+variable. (For example, put them both in the same
+directory as <TT>makeindex</TT><A NAME="1689"></A>, which will probably
+be in <code>\texmf\miktex\bin\</code>).
+
+<P>
+If you don't have Perl installed on your system, you can just use
+<TT>makeindex</TT><A NAME="1692"></A>, only you will have to remember all the
+command line switches, and you won't be able to merge entries
+that have the same name, but different descriptions.
+
+<P>
+Note that if you are updating the glossary package, it is
+a good idea to update <TT>makeglos.pl</TT> as it may also
+have been modified.
+
+<P>
+
+<H1><A NAME="SECTION00040000000000000000">
+Generating Glossary Information</A>
+</H1>
+
+<P>
+The standard LaTeX command <TT>&#92;makeglossary</TT> (analogous to <TT>&#92;makeindex</TT>)
+ should be placed in the document preamble. If this command
+is omitted, glossary information will be ignored. Glossary
+entries are generated using the command
+<TT>&#92;glossary</TT><code>{</code><I>key-val list</I><code>}</code>.
+ This command is a slightly modified version of the standard
+<TT>&#92;glossary</TT> command, in order to separate out the
+information into <I>entry-name</I> and <I>entry-description</I>.
+The argument to <TT>&#92;glossary</TT> must be a comma-separated
+list of <I>key</I>=<I>value</I> pairs. The following keys are
+available:
+<DIV ALIGN="CENTER">
+<TABLE CELLPADDING=3>
+<TR><TH ALIGN="LEFT"><B>Key </B></TH>
+<TH ALIGN="LEFT" VALIGN="TOP" WIDTH=400><B>Value</B></TH>
+</TR>
+<TR><TD ALIGN="LEFT"><TT><TT>name</TT><A NAME="1705"></A> </TT></TD>
+<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=400>The entry name</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT><TT>description</TT><A NAME="1709"></A> </TT></TD>
+<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=400>A description about the entry</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT><TT>sort</TT><A NAME="1713"></A> </TT></TD>
+<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=400>How to sort the entry. (Entry name used if sort omitted)</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT><TT>format</TT><A NAME="1717"></A> </TT></TD>
+<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=400>How to format the page number</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT><TT>number</TT><A NAME="1721"></A> </TT></TD>
+<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=400>Override the page number with a different
+counter. The value should be the name of a counter (e.g.
+<TT>number=section</TT>).</TD>
+</TR>
+</TABLE>
+</DIV>
+For example:
+<PRE>
+\glossary{name={singular matrix},
+ description={A matrix with zero determinant}}
+</PRE>
+ The following example sorts on the text <TT>U</TT> instead of
+<code>$\mathcal{U}$</code>:
+<PRE>
+\glossary{name={$\mathcal{U}$},
+ description={The universal set},
+ sort=U}
+</PRE>
+Note that you should always use the <TT>sort</TT><A NAME="1725"></A>
+key if the <TT>name</TT><A NAME="1729"></A> key contains commands, this is particularly
+important if you are using hyperlinks, as the target is constructed
+from the <TT>name</TT><A NAME="1733"></A> key if the <TT>sort</TT><A NAME="1737"></A> key is omitted.
+
+<P>
+In the glossary, each entry is followed by a list of page numbers
+that correspond to the pages where the relevant <TT>&#92;glossary</TT>
+command is placed. By default the numbers are formatted in the
+current font, but the page number format for individual entries can be
+changed using the <TT>format</TT><A NAME="1743"></A> key. This should be the name of a
+LaTeX formatting command without the preceding <code>\</code> (as with the
+<code>|</code> operator in <TT>&#92;index</TT>.) For example:
+<PRE>
+\glossary{name={$\mathbb{R}$},
+ description={The set of real numbers},
+ sort=R,
+ format=textbf}
+</PRE>
+In addition, the following formats are also available:
+
+<DIV ALIGN="CENTER">
+<TABLE CELLPADDING=3>
+<TR><TD ALIGN="LEFT"><TT>hyperrm</TT><A NAME="1749"></A><A NAME="1750"></A></TD>
+<TD ALIGN="LEFT">The number is a hyper link in roman</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>hypersf</TT><A NAME="1754"></A><A NAME="1755"></A></TD>
+<TD ALIGN="LEFT">The number is a hyper link in sans-serif</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>hypertt</TT><A NAME="1759"></A><A NAME="1760"></A></TD>
+<TD ALIGN="LEFT">The number is a hyper link in typewriter font</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>hyperbf</TT><A NAME="1764"></A><A NAME="1765"></A></TD>
+<TD ALIGN="LEFT">The number is a hyper link in bold</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>hypermd</TT><A NAME="1769"></A><A NAME="1770"></A></TD>
+<TD ALIGN="LEFT">The number is a hyper link in medium weight</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>hyperit</TT><A NAME="1774"></A><A NAME="1775"></A></TD>
+<TD ALIGN="LEFT">The number is a hyper link in italic</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>hypersl</TT><A NAME="1779"></A><A NAME="1780"></A></TD>
+<TD ALIGN="LEFT">The number is a hyper link in slanted font</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>hyperup</TT><A NAME="1784"></A><A NAME="1785"></A></TD>
+<TD ALIGN="LEFT">The number is a hyper link in upright font</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>hypersc</TT><A NAME="1789"></A><A NAME="1790"></A></TD>
+<TD ALIGN="LEFT">The number is a hyper link in small caps</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>hyperem</TT><A NAME="1794"></A><A NAME="1795"></A></TD>
+<TD ALIGN="LEFT">The number is a hyper link using <TT>&#92;emph</TT></TD>
+</TR>
+</TABLE>
+</DIV>
+If the <TT>hyper</TT><A NAME="1806"></A> option has not been set,
+<TT>hyperem</TT><A NAME="1810"></A><A NAME="1811"></A> is equivalent to <TT>emph</TT>, and the remaining
+<TT>hyperrm</TT><A NAME="1815"></A><A NAME="1816"></A> etc are equivalent to <TT>textrm</TT> etc.
+Note that it is important the you use <TT>hyperrm</TT> instead of
+<TT>hyperpage</TT>, as the <TT>&#92;hyperpage</TT> command won't
+work on a list or range of numbers in the glossary<A NAME="tex2html2"
+ HREF="#foot1559"><SUP>2</SUP></A>. If you want to define your
+own command that uses hyper links, it must be defined in an
+analogous manner to <TT>&#92;hyperrm</TT><A NAME="1826"></A>. For example, if you want
+to display a page number in a bold italic format, that contains a
+hyperlink to the appropriate page, you would need to define it as
+follows:
+<PRE>
+\newcommand{\hyperbfit}[2][\gls@number]{%
+\textbf{\itshape\glshyper{#1}{#2}}}
+</PRE>
+As can be seen from the definition, all the <TT>&#92;hyper</TT><I>xx</I>
+commands have an optional argument. This argument is the name of the
+counter being used. You do not need to worry about this argument if
+you only use these commands within the <TT>&#92;glossary</TT><A NAME="1833"></A> command.
+So the previous example can simply be rewritten as:
+<PRE>
+\glossary{name={$\mathbb{R}$},
+ description={The set of real numbers},
+ sort=R,
+ format=hyperbf}
+</PRE>
+
+<P>
+<B>Note:</B> although the numbers in the glossary are referred to
+as ``page'' numbers in this manual, they may in fact refer to some
+other counter, such as the <TT>section</TT> counter, depending on
+whether the <TT>number</TT><A NAME="1838"></A> key has been used.
+
+<P>
+As with the <TT>&#92;index</TT> command, care must be taken if you
+want to use the special characters: <code>@</code> <code>|</code> <code>"</code> and
+<code>!</code>. These characters should be preceded by the double quote
+character. For example:
+<PRE>
+\glossary{name={$"|\mathcal{S}"|$,
+description=The cardinality of the set \mathcal{S}}}
+</PRE>
+There is no provision for sub-entries, as these are
+generally only applicable in an index, and not in a glossary.
+
+<P>
+As from version 2.14, there is an additional command available:
+
+<P>
+
+<TT>&#92;xglossary</TT><code>{</code><I>gls-entry</I><code>}{</code><I>text</I><code>}</code>
+
+<P>
+This is equivalent to
+<I>text</I><TT>&#92;glossary</TT><A NAME="1846"></A><code>{</code><I>gls-entry</I><code>}</code>,
+where <I>text</I> will be made a hyper link to the
+relevant entry in the glossary, if hyper
+links are supported.
+
+<P>
+
+<H2><A NAME="SECTION00041000000000000000">
+Storing Glossary Information</A>
+</H2>
+
+<P>
+It is very cumbersome having to use the <TT>&#92;glossary</TT><A NAME="1851"></A> command
+throughout your document, every time you use a term that you want in
+your glossary. This is particularly true for terms with a long
+description. The <TT>glossary</TT><A NAME="1856"></A> package provides a means
+of storing the glossary information at the beginning of the document,
+and then using it whenever required. It is strongly recommended
+that you use this approach, rather than explicity using the
+<TT>&#92;glossary</TT><A NAME="1859"></A> command.
+
+<P>
+The following command:
+<BR>
+<BR><TT><TT>&#92;storeglosentry</TT>[</TT> <I>gls-type</I><TT>]{</TT> <I>label</I><TT>}{</TT> <I>gls-entry</I><TT>}
+</TT>
+<BR>
+<BR>
+can be used to store glossary information, where <I>label</I> is
+a unique label assigned to this entry. The information
+can then be used later with any of the following commands:
+<BR>
+<BR>
+
+<TT><TT>&#92;useglosentry</TT>[</TT> <I>opt</I><TT>]{</TT> <I>label</I><TT>}
+<BR><TT>&#92;useGlosentry</TT>[</TT> <I>opt</I><TT>]{</TT> <I>label</I><TT>}{</TT> <I>text</I><TT>}
+<BR><TT>&#92;gls</TT>[</TT> <I>opt</I><TT>]{</TT> <I>label</I><TT>}
+</TT>
+<BR>
+<BR><TT>&#92;useglosentry</TT> adds the glossary entry whose label is given by
+<I>label</I> to the appropriate glossary,
+<TT>&#92;useGlosentry</TT> adds the glossary entry, and
+makes <I>text</I> a hyperlink to that entry (if hyperlinks are
+supported). The third command, <TT>&#92;gls</TT>, is like
+<TT>&#92;useGlosentry</TT>, but forms <I>text</I> from the name
+given in the glossary entry.
+
+<P>
+Returning to an earlier example, instead of typing:
+<PRE>
+\glossary{name={$\mathcal{U}$},
+ description={The universal set},
+ sort=U}
+</PRE>
+every time you want to add this entry to the glossary, you
+can instead store the information:
+
+<PRE>
+\storeglosentry{glos:U}{name={$\mathcal{U}$},
+ description={The universal set},
+ sort=U}
+</PRE>
+Now, instead of continually copying and pasting the glossary command
+for this entry (which can have quite a large <TT>description</TT><A NAME="1880"></A>
+field), you can use either:
+<PRE>
+\useglosentry{glos:U}
+</PRE>
+which is equivalent to:
+<PRE>
+\glossary{name={$\mathcal{U}$},
+ description={The universal set},
+ sort=U}
+</PRE>
+or you can use:
+<PRE>
+\useGlosentry{glos:U}{text}
+</PRE>
+which is equivalent to:
+<PRE>
+\xglossary{name={$\mathcal{U}$},
+ description={The universal set},
+ sort=U}{text}
+</PRE>
+or you can use:
+<PRE>
+\gls{glos:U}
+</PRE>
+which is equivalent to:
+<PRE>
+\xglossary{name={$\mathcal{U}$},
+ description={The universal set},
+ sort=U}{$\mathcal{U}$}
+</PRE>
+If you want to use glossary entries in an equation, it is better
+to use <TT>&#92;ensuremath</TT> instead of <code>$</code>...<code>$</code>.
+For example:
+<PRE>
+\storeglosentry{Gamma}{name=\ensuremath{\Gamma(z)},
+description=Gamma function,
+sort=Gamma}
+</PRE>
+You can then use this entry in either text or math mode:
+<PRE>
+The \useGlosentry{Gamma}{Gamma function} is defined as
+\begin{equation}
+\gls{Gamma} = \int_{0}^{\infty}e^{-t}t^{z-1}\,dt
+\end{equation}
+</PRE>
+If you are using hyper links, and you want to use
+<TT>&#92;useGlosentry</TT> within math mode, you must use
+<TT>&#92;ensuremath</TT>:
+<PRE>
+\begin{equation}
+\useGlosentry{Gamma}{\ensuremath{\Gamma(x+1)}} = x\Gamma(x)
+\end{equation}
+</PRE>
+
+<P>
+The optional argument to <TT>&#92;storeglosentry</TT><A NAME="1890"></A> (<I>gls-type</I>)
+indicates the glossary type (see
+<A HREF="#sec:newglostype">later</A> to find out how to define new
+glossary types). If omitted, the standard glossary is used.
+
+<P>
+The optional argument to <TT>&#92;useglosentry</TT><A NAME="1895"></A>,
+<TT>&#92;useGlosentry</TT><A NAME="1900"></A> and <TT>&#92;gls</TT><A NAME="1905"></A> (<I>opt</I>) allows you to
+add additional information to the glossary entry, for example:
+<PRE>
+\useglosentry[format=textbf]{glos:U}
+</PRE>
+is equivalent to:
+<PRE>
+\glossary{name={$\mathcal{U}$},
+ description={The universal set},
+ sort=U,
+ format=textbf}
+</PRE>
+Since version 2.4, <TT>&#92;storeglosentry</TT><A NAME="1910"></A> is robust, and
+<TT>&#92;protect</TT> should no longer be needed, however
+the identifying label, <I>label</I>, should not
+contain any special characters.
+
+<P>
+As from version 2.36, if you want to use all glossary entries
+which have been defined using <TT>&#92;storeglosentry</TT>, do:
+<code>\useglosentry{*}</code>. (Note that this option is not
+available for <TT>&#92;useGlosentry</TT> and <TT>&#92;gls</TT>.)
+
+<P>
+
+<H1><A NAME="SECTION00050000000000000000">
+makeglos.pl</A>
+</H1>
+
+<P>
+Whenever a glossary entry is used, either explicity using
+<TT>&#92;glossary</TT> or <TT>&#92;xglossary</TT> or implicitly using
+<TT>&#92;useglosentry</TT>, <TT>&#92;useGlosentry</TT> and <TT>&#92;gls</TT>,
+the information is saved in a file with the extension <TT>glo</TT><A NAME="1933"></A>
+(unless the <TT>&#92;makeglossary</TT><A NAME="1935"></A> command is omitted, in which case
+the glossary information is simply ignored.) A <TT>makeindex</TT><A NAME="1940"></A>
+style file<A NAME="1574"></A>
+(<TT>ist</TT><A NAME="1943"></A>) is also created, which is customized for the
+document, and can be passed to <TT>makeindex</TT><A NAME="1945"></A>.
+
+<P>
+For example, suppose your document is called <TT>mydoc.tex</TT>,
+the glossary will be saved in the file
+<TT>mydoc.glo</TT><A NAME="1948"></A>, and the <TT>makeindex</TT><A NAME="1950"></A> style
+file <TT>mydoc.ist</TT><A NAME="1953"></A> will be created.
+ These files can then be passed to <TT>makeindex</TT><A NAME="1955"></A> as follows:
+<PRE>
+makeindex -s mydoc.ist -t mydoc.glg -o mydoc.gls mydoc.glo
+</PRE>
+which generates the output file <TT>mydoc.gls</TT><A NAME="1958"></A>,
+with transcript written to
+<TT>mydoc.glg</TT><A NAME="1960"></A>.
+
+<P>
+The Perl script <TT>makeglos.pl</TT><A NAME="1962"></A> provided with this package
+allows you to use <TT>makeindex</TT><A NAME="1965"></A> without having to remember
+all the command line options. The command
+<PRE>
+makeglos.pl mydoc
+</PRE>
+will perform the command:
+<PRE>
+makeindex -s mydoc.ist -t mydoc.glg -o mydoc.gls mydoc.glo
+</PRE>
+In addition, <TT>makeglos.pl</TT><A NAME="1968"></A> also takes the option
+<TT>-m</TT> which can be used to collate entries where the
+same name has multiple descriptions.
+
+<P>
+<TT>makeglos.pl</TT><A NAME="1971"></A> has the following syntax:
+<PRE>
+makeglos.pl [-ilqrgm] [-s sty] [-o gls] [-t log] [-p num] &lt;filename&gt;
+</PRE>
+where all switches, apart from <TT>-m</TT> are the same as
+those for <TT>makeindex</TT><A NAME="1974"></A>. If there are multiple glossary types
+(see
+<A HREF="#sec:newglostype">later</A>)
+and the file extension is omitted, <TT>makeglos.pl</TT><A NAME="1977"></A> will
+iterate through each glossary type (it will pick up the relevant
+information from the auxiliary file).
+
+<P>
+The name of the <TT>ist</TT><A NAME="1980"></A> file can be changed by redefining
+the command <TT>&#92;istfilename</TT>
+<I>before</I> <TT>&#92;makeglossary</TT>.
+For example:
+<PRE>
+\renewcommand{\istfilename}{foo.ist}
+\makeglossary
+</PRE>
+Only one <TT>ist</TT><A NAME="1986"></A> file will be created per document, even if
+you have multiple glossaries with different styles. The only
+circumstance where you will need multiple <TT>ist</TT><A NAME="1988"></A> files for
+a single document is when you have multiple glossaries that use
+different counters with different compositors, but this is rarely
+likely to occur.
+
+<P>
+Creation of the <TT>ist</TT><A NAME="1990"></A> file can be suppressed by issuing
+the command <TT>&#92;noist</TT> before
+<TT>&#92;makeglossary</TT><A NAME="1994"></A>. It will also be suppressed when the
+command <TT>&#92;nofiles</TT><A NAME="1999"></A> is used, or if the command
+<TT>&#92;makeglossary</TT><A NAME="2004"></A> is omitted.
+
+<P>
+It should be noted that there are a few packages that can
+cause problems with the creation of the <TT>ist</TT><A NAME="2009"></A> file,
+for example <TT>ngerman</TT><A NAME="2011"></A>. If you encounter problems
+when LaTeX is processing the <TT>&#92;makeglossary</TT><A NAME="2014"></A> command,
+or if you get errors from <TT>makeindex</TT><A NAME="2019"></A> complaining about
+the style file, this is the most probable cause.
+See <A HREF="#itm:ngerman">later</A> for
+information on how to fix this.
+
+<P>
+
+<H1><A NAME="SECTION00060000000000000000">
+Displaying the Glossary</A>
+</H1>
+
+<P>
+Once the <TT>gls</TT><A NAME="2022"></A> file has been created by
+<TT>makeindex</TT><A NAME="2024"></A> (as described in the previous
+ section) the glossary can then be included in the document with
+the command <TT>&#92;printglossary</TT>.
+ If chapters are defined, the glossary will start
+with<A NAME="2028"></A>
+<PRE>
+\chapter*{\glossaryname}
+</PRE>
+If not, it will start with
+<PRE>
+\section*{\glossaryname}
+</PRE>
+The format of the main body of the glossary depends on the
+options passed to the package.
+
+<P>
+
+<H1><A NAME="SECTION00070000000000000000"></A>
+<A NAME="sec:options"></A>
+<BR>
+Package Options
+</H1>
+
+<P>
+The package options must be specified as a comma-separated list
+of <I>key</I>=<I>value</I> pairs. Available options are:
+<DL>
+<DT><STRONG><TT>style</TT><A NAME="2037"></A></STRONG></DT>
+<DD>The glossary style. Values:
+<A NAME="1579"></A>
+<DL>
+<DT><STRONG><TT>list</TT><A NAME="2041"></A></STRONG></DT>
+<DD>use
+<TT>description</TT> environment in the glossary
+</DD>
+<DT><STRONG><TT>altlist</TT><A NAME="2044"></A></STRONG></DT>
+<DD>modified
+version of <TT>style=list</TT><A NAME="2053"></A>. The description starts on the
+line following the name of the term being defined.
+
+</DD>
+<DT><STRONG><TT>super</TT><A NAME="2055"></A></STRONG></DT>
+<DD>use
+<TT>supertabular</TT> environment in the glossary
+</DD>
+<DT><STRONG><TT>long</TT><A NAME="2058"></A></STRONG></DT>
+<DD>use
+<TT>longtable</TT> environment in the glossary (Default)
+</DD>
+</DL>
+
+<P>
+</DD>
+<DT><STRONG><TT>header</TT><A NAME="2066"></A></STRONG></DT>
+<DD><A NAME="1581"></A> Glossary
+header. Values:
+<DL>
+<DT><STRONG><TT>none</TT><A NAME="2070"></A></STRONG></DT>
+<DD>The glossary
+doesn't have a heading (Default)
+</DD>
+<DT><STRONG><TT>plain</TT><A NAME="2072"></A></STRONG></DT>
+<DD>The glossary
+has a heading
+</DD>
+</DL>
+
+<P>
+</DD>
+<DT><STRONG><TT>border</TT><A NAME="2079"></A></STRONG></DT>
+<DD><A NAME="1582"></A> Glossary
+border. Values:
+<DL>
+<DT><STRONG><TT>none</TT><A NAME="2083"></A></STRONG></DT>
+<DD>The glossary
+doesn't have a border (Default)
+</DD>
+<DT><STRONG><TT>plain</TT><A NAME="2085"></A></STRONG></DT>
+<DD>Border
+around the main body of the glossary
+</DD>
+</DL>
+
+<P>
+</DD>
+<DT><STRONG><TT>cols</TT><A NAME="2092"></A></STRONG></DT>
+<DD><A NAME="1583"></A> Number of
+columns. Values:
+<DL>
+<DT><STRONG><TT>2</TT><A NAME="2096"></A></STRONG></DT>
+<DD>The entry name and description are in two separate
+columns with the associated page numbers in the same column as
+the description. (Default)
+</DD>
+<DT><STRONG><TT>3</TT><A NAME="2098"></A></STRONG></DT>
+<DD>The entry name, description and associated page numbers
+are in three separate columns.
+</DD>
+</DL>
+
+<P>
+
+</DD>
+<DT><STRONG><TT>number</TT><A NAME="2105"></A></STRONG></DT>
+<DD>Associated number corresponding to each entry.
+This may either be the keyword <TT>none</TT><A NAME="2109"></A> indicating that
+the corresponding numbers should be suppressed, or it can be the
+name of a LaTeX counter. The default is <TT>number=page</TT><A NAME="2118"></A>.
+
+<P>
+</DD>
+<DT><STRONG><TT>toc</TT><A NAME="2125"></A></STRONG></DT>
+<DD><A NAME="1586"></A>
+Boolean variable:
+
+<DL>
+<DT><STRONG><TT>true</TT><A NAME="2129"></A></STRONG></DT>
+<DD>Add glossary to table of contents
+</DD>
+<DT><STRONG><TT>false</TT><A NAME="2131"></A></STRONG></DT>
+<DD>Omit glossary from table of contents (Default)
+</DD>
+</DL>
+Note that if you specify this option, you will need to run
+LaTeX twice after generating the glossary.
+
+<P>
+</DD>
+<DT><STRONG><TT>hypertoc</TT><A NAME="2138"></A></STRONG></DT>
+<DD>Boolean variable. This is similar to the package option
+<TT>toc</TT><A NAME="2147"></A>, but if you are using the <TT>hyperref</TT><A NAME="2151"></A>
+package, <TT>hypertoc</TT><A NAME="2159"></A> will generate a link to the
+point immediately before the glossary title, whereas <TT>toc</TT><A NAME="2168"></A> will
+have a hyperlink to just after the glossary title. Note
+that you can not use both <TT>toc=true</TT><A NAME="2179"></A> and
+<TT>hypertoc=true</TT><A NAME="2188"></A>. Default value:
+<TT>hypertoc=false</TT><A NAME="2197"></A>.
+
+<P>
+</DD>
+<DT><STRONG><TT>hyper</TT><A NAME="2204"></A></STRONG></DT>
+<DD>Boolean
+variable:
+
+<DL>
+<DT><STRONG><TT>true</TT><A NAME="2208"></A></STRONG></DT>
+<DD>Make associated numbers in the
+glossary a hypertext link, and also make acronyms, and the text
+given by <TT>&#92;xglossary</TT><A NAME="2210"></A> have a hyperlink to their
+corresponding entries in the glossary.
+</DD>
+<DT><STRONG><TT>false</TT><A NAME="2215"></A></STRONG></DT>
+<DD>Don't make associated numbers a hypertext link
+</DD>
+</DL>
+If the <TT>hyperref</TT><A NAME="2217"></A> or <TT>html</TT><A NAME="2220"></A> package has
+been loaded prior to loading <TT>glossary.sty</TT>,
+<TT>hyper=true</TT><A NAME="2230"></A> is set, otherwise
+the default is <TT>hyper=false</TT><A NAME="2239"></A>. Note that this package
+option now encompasses the old <TT>hyperacronym</TT><A NAME="2246"></A> option.
+
+<P>
+</DD>
+<DT><STRONG><TT>section</TT><A NAME="2255"></A></STRONG></DT>
+<DD>Boolean variable:
+
+<DL>
+<DT><STRONG><TT>true</TT><A NAME="2259"></A></STRONG></DT>
+<DD>Make the glossary an unnumbered
+section, even if chapters are defined
+</DD>
+<DT><STRONG><TT>false</TT><A NAME="2261"></A></STRONG></DT>
+<DD>Only make glossary an
+unnumbered section if chapters are not defined (default).
+</DD>
+</DL>
+
+<P>
+</DD>
+<DT><STRONG><TT>acronym</TT><A NAME="2268"></A></STRONG></DT>
+<DD>Boolean variable:
+
+<DL>
+<DT><STRONG><TT>true</TT><A NAME="2272"></A></STRONG></DT>
+<DD>Make the list of acronyms
+separate from the main glossary.
+
+<P>
+</DD>
+<DT><STRONG><TT>false</TT><A NAME="2274"></A></STRONG></DT>
+<DD>The acronyms will all
+be placed in the main glossary. (Default)
+</DD>
+</DL>
+
+<P>
+</DD>
+<DT><STRONG><TT>global</TT><A NAME="2281"></A></STRONG></DT>
+<DD>Boolean variable:
+
+<DL>
+<DT><STRONG><TT>false</TT><A NAME="2285"></A></STRONG></DT>
+<DD>Acronym commands only have
+a local effect. (Default)
+</DD>
+<DT><STRONG><TT>true</TT><A NAME="2287"></A></STRONG></DT>
+<DD>Acronym commands have a global
+effect.
+</DD>
+</DL>
+</DD>
+</DL>
+ The <TT>border</TT><A NAME="2294"></A>, <TT>header</TT><A NAME="2303"></A> and <TT>cols</TT><A NAME="2312"></A> options
+should not be used in conjunction with <TT>style=list</TT><A NAME="2323"></A>
+or <TT>style=altlist</TT><A NAME="2332"></A>, as they only make sense with one of
+the tabular-style options.
+The value for the boolean variables can be omitted if they are
+to be set. For example
+ <TT>toc</TT><A NAME="2339"></A> is equivalent to <TT>toc=true</TT><A NAME="2350"></A>. Note that the
+<TT>altlist</TT><A NAME="2352"></A> style is better suited to
+glossaries with long entry names.
+
+<P>
+You can set up your own preferred defaults in a configuration
+file<A NAME="1593"></A>.
+The file must be called <TT>glossary.cfg</TT><A NAME="2354"></A> and
+should be placed somewhere on the T<SMALL>E</SMALL>X path. In this file you
+can use the command
+<TT>&#92;glossarypackageoptions</TT><code>{</code><I>option-list</I><code>}</code>
+
+where <I>option-list</I> is a comma-separated list of
+<I>key</I>=<I>value</I> pairs, as passed to the
+<TT>glossary</TT><A NAME="2358"></A>
+package. Note that this command may only be used in the
+configuration file.
+
+<P>
+
+<H2><A NAME="SECTION00071000000000000000">
+Examples</A>
+</H2>
+See <TT><A NAME="tex2html3"
+ HREF="glossary.pdf">glossary.pdf</A></TT> (the PDF version of this manual) for
+examples.
+
+<P>
+
+<H1><A NAME="SECTION00080000000000000000"></A>
+<A NAME="sec:newglostype"></A>
+<BR>
+Defining New Glossary Types
+</H1>
+
+<P>
+A new type of glossary can be defined using the command:
+<BR>
+<BR><TT>&#92;newglossarytype</TT><code>[</code><I>log-ext</I><code>]{</code><I>name</I><code>}{</code><I>out-ext</I><code>}{</code><I>in-ext</I><code>}[</code><I>style list</I><code>]</code>
+<BR>
+<BR>
+For example, suppose you want your document to have a separate
+index of terms and index of notation,
+you could use <TT>&#92;makeglossary</TT><A NAME="2536"></A>, <TT>&#92;glossary</TT><A NAME="2541"></A>,
+<TT>&#92;xglossary</TT><A NAME="2546"></A> and <TT>&#92;printglossary</TT><A NAME="2551"></A> for the first
+glossary, and define a new type of glossary called say,
+<TT>notation</TT>, using
+<PRE>
+\newglossarytype[nlg]{notation}{not}{ntn}
+</PRE>
+which will create the analogous commands:
+<TT>&#92;makenotation</TT>, <TT>&#92;notation</TT>, <TT>&#92;xnotation</TT>
+and <TT>&#92;printnotation</TT> which can be used for the second
+glossary.
+
+<P>
+As from version 2.3, <TT>&#92;newglossarytype</TT> now has an
+additional optional argument <I>style list</I>. This should
+be a comma separated list of <I>key</I>=<I>value</I> pairs
+that can be used to specify the style of the new glossary.
+If omitted, the new glossary will have the same format
+as the main glossary. The following options are available:
+<TT>number</TT>, <TT>style</TT>, <TT>header</TT>, <TT>border</TT> and
+<TT>cols</TT>. These can take the same values as those
+given in the package options (described in section&nbsp;<A HREF="#sec:options">6</A>).
+
+<P>
+The command <TT>&#92;newglossarytype</TT> should only occur in the
+preamble. The new commands
+ <TT>&#92;make</TT><I>name</I>, <code>\</code><I>name</I>,
+<code>\x</code><I>name</I> and <TT>&#92;print</TT><I>name</I> all have the
+same format as their ``glossary'' counter-parts.
+
+<P>
+The glossary information will be saved to a file
+with the extension given by <I>out-ext</I> (analogous to
+<TT>glo</TT><A NAME="2572"></A>), which can then be passed to <TT>makeindex</TT><A NAME="2574"></A>
+either directly or via <TT>makeglos.pl</TT><A NAME="2577"></A>,
+and the file to be read in (i.e. the file created by
+<TT>makeindex</TT><A NAME="2580"></A>) will have the extension <I>in-ext</I>
+(analogous to <TT>gls</TT><A NAME="2583"></A>).
+
+<P>
+The optional argument <I>log-ext</I> indicates
+the extension for the <TT>makeindex</TT><A NAME="2585"></A> log file, if omitted the
+extension <TT>glg</TT><A NAME="2588"></A> is used. This is not used by LaTeX,
+however <TT>makeglos.pl</TT><A NAME="2590"></A> reads in this information from
+the LaTeX auxiliary file and passes it to <TT>makeindex</TT><A NAME="2593"></A>.
+
+<P>
+For the above <TT>notation</TT>
+example, if your document is called, say, <TT>mydoc.tex</TT>,
+ you will need to do the following:
+<PRE>
+latex mydoc
+makeglos.pl mydoc
+latex mydoc
+</PRE>
+(You may need to do an extra <code>latex mydoc</code> to get
+cross-references up-to-date.) Note that if you don't specify the
+file extension when using <TT>makeglos.pl</TT><A NAME="2596"></A>, it will
+check the transcript file from the LaTeX run to determine
+all the glossary types, so, for this example,
+<PRE>
+makeglos.pl mydoc
+</PRE>
+is equivalent to:
+<PRE>
+makeglos.pl mydoc.glo
+makeglos.pl mydoc.not
+</PRE>
+since <TT>makeglos.pl</TT><A NAME="2599"></A> has read in the information
+for the <TT>notation</TT> glossary type from the file
+<TT>mydoc.log</TT>.
+
+<P>
+If you don't have Perl installed
+on your system, or for any other reason are unable to use
+<TT>makeglos.pl</TT><A NAME="2602"></A>, you can call <TT>makeindex</TT><A NAME="2605"></A>
+explicitly:
+<PRE>
+latex mydoc
+makeindex -s mydoc.ist -t mydoc.glg -o mydoc.gls mydoc.glo
+makeindex -s mydoc.ist -t mydoc.nlg -o mydoc.ntn mydoc.not
+latex mydoc
+</PRE>
+
+<P>
+Note that you can use the command
+<TT>&#92;printglossary</TT><A NAME="2608"></A><TT>[</TT><I>name</I><TT>]</TT>
+instead of <code>\print</code><I>name</I>.
+These two commands have the same effect when using LaTeX,
+however, they have a slightly different effect when
+using LaTeX2HTML (see <A HREF="#sec:l2h">later</A>).
+
+<P>
+If the command <code>\</code><I>glossary-type</I><code>name</code>
+is defined, (e.g. <code>\notationname</code> in the above example)
+this will be used as the title for the specified
+glossary. If this command is not defined, <TT>&#92;glossaryname</TT><A NAME="2613"></A>
+will be used instead.
+If the command <code>\short</code><I>glossary-type</I><code>name</code>
+is defined, (e.g. <TT>&#92;shortnotationname</TT> in the above
+example) this will be used for the table of contents
+entry, otherwise <code>\</code><I>glossary-type</I><code>name</code> will
+be used instead.
+For example:
+<PRE>
+\newglossarytype[nlg]{notation}{not}{ntn}
+\newcommand{\notationname}{Index of Notation}
+\newcommand{\shortnotationname}{Notation}
+</PRE>
+
+<P>
+
+<H1><A NAME="SECTION00090000000000000000">
+Acronyms</A>
+</H1>
+
+<P>
+The <TT>glossary</TT><A NAME="2620"></A> package provides the command:
+<BR>
+<BR><TT><TT>&#92;newacronym</TT>[</TT> <I>cmd-name</I><TT>]{</TT> <I>acronym</I><TT>}{</TT> <I>long</I><TT>}{</TT> <I>glossary entry</I><TT>}
+</TT>
+<BR>
+<BR>
+which can be used to define acronyms. The argument <I>long</I>
+is the full name, the argument <I>acronym</I> is the acronym for
+<I>long</I> and <I>glossary entry</I> is the glossary information
+in the form used by the <TT>&#92;glossary</TT><A NAME="2625"></A> command. If the
+optional argument <I>cmd-name</I> is missing,
+<TT>&#92;newacronym</TT> will create a command called
+<code>\</code><I>acronym</I>, otherwise it will create a command
+called <code>\</code><I>cmd-name</I> (henceforth denoted <TT>&#92;</TT><I>acr-name</I>).
+This command can then be used throughout the text. The first
+instance of this command is equivalent to:
+<BR>
+<BR><I>long</I> <TT>(&#92;xacronym</TT><A NAME="2634"></A><code>{</code><TT>name</TT><A NAME="2639"></A><TT>=</TT><I>long</I> <TT>(</TT><I>acronym</I><TT>),</TT><I>glossary entry</I><code>}{</code><I>acronym</I><code>}</code><TT>)</TT>
+<BR>
+<BR>
+subsequent instances will be equivalent to:
+<BR>
+<BR><TT>&#92;xacronym</TT><A NAME="2643"></A><code>{</code><TT>name</TT><A NAME="2648"></A><TT>=</TT><I>long</I> <TT>(</TT><I>acronym</I><TT>),</TT><I>glossary entry</I><code>}{</code><I>acronym</I><code>}</code>
+<BR>
+<BR>
+The command <TT>&#92;</TT><I>acr-name</I> also has a starred
+version, which will make the first letter of <I>long</I>
+uppercase (for use at the start of a sentence).
+
+<P>
+Note that if you want to change the format of the acronym,
+for example, if you want the acronym to appear in small caps,
+you will need to not only use the optional argument, but you
+will also need to use the <TT>sort</TT><A NAME="2654"></A> key, otherwise you
+will get an error. For example:
+<PRE>
+\newacronym[SVM]{\textsc{svm}}{Support Vector Machine}%
+{description=Statistical pattern recognition
+technique,sort=svm}
+</PRE>
+
+<P>
+If the package option <TT>acronym</TT><A NAME="2663"></A> is not set (default)
+<TT>&#92;xacronym</TT><A NAME="2667"></A>, is a synonym for <TT>&#92;xglossary</TT><A NAME="2672"></A>, and
+the acronyms will appear in the main glossary (remember to
+specify <TT>&#92;makeglossary</TT> and <TT>&#92;printglossary</TT>).
+If the package option <TT>acronym=true</TT><A NAME="2688"></A> is specified, a
+new glossary type called <TT>acronym</TT> will be defined as:
+<PRE>
+\newglossarytype[alg]{acronym}{acr}{acn}
+\providecommand{\acronymname}{List of Acronyms}
+</PRE>
+You will then need to use the commands <TT>&#92;makeacronym</TT><A NAME="2690"></A>
+and <TT>&#92;printacronym</TT><A NAME="2695"></A> to make the list of acronyms appear.
+You will also need to run the <TT>acr</TT><A NAME="2700"></A> file through
+<TT>makeindex</TT><A NAME="2702"></A> (or <TT>makeglos.pl</TT><A NAME="2705"></A>). For example:
+<PRE>
+makeindex -s mydoc.ist -t mydoc.alg -o mydoc.acn mydoc.acr
+</PRE>
+alternatively:
+<PRE>
+makeglos.pl mydoc
+</PRE>
+Note that the package option <TT>acronym=true</TT><A NAME="2715"></A> is only
+appropriate if you want both a glossary and a separate list of
+acronyms. If you do not write in English, you can set up your
+own language definition
+for <TT>&#92;acronymname</TT> in the configuration file
+<TT>glossarycfg</TT><A NAME="2719"></A>. For example:
+<PRE>
+\newcommand{\acronymname}{Akronyme}
+</PRE>
+(If <TT>glossary.cfg</TT> does not exist, create a new file, add the
+appropriate definition of <TT>&#92;acronymname</TT>, and save it to the
+same directory as <TT>glossary.sty</TT>.)
+
+<P>
+The <TT>name</TT><A NAME="2723"></A> key does not need to appear in <I>glossary
+entry</I>, as it is constructed from <I>long</I> and
+<I>acronym</I>. By default this will be in the form:
+<I>long</I> (<I>acronym</I>), however the format can be
+overridden using the
+command:
+<BR>
+<BR><TT>&#92;setacronymnamefmt</TT>{<I>format</I>}
+<BR>
+<BR>
+Within <I>format</I> the following commands may
+be used to represent <I>long</I> and <I>acronym</I>:
+<TT>&#92;glolong</TT><A NAME="2729"></A> and
+<TT>&#92;gloshort</TT><A NAME="2734"></A>. For example,
+suppose you just want the acronym to appear in the glossary entry,
+and not its full length name, then you would need to do:
+<PRE>
+\setacronymnamefmt{\gloshort}
+</PRE>
+
+<P>
+As from version 2.32, you can also modify the way the description
+key is formatted for acronyms using:
+<BR>
+<BR><TT>&#92;setacronymdescfmt</TT>{<I>format</I>}
+<BR>
+<BR>
+Within <I>format</I> you may use the commands <TT>&#92;glolong</TT><A NAME="2741"></A>
+and <TT>&#92;gloshort</TT><A NAME="2746"></A> (as above), and you can also use
+the command <TT>&#92;glodesc</TT><A NAME="2751"></A> which is the description as
+specified by the <TT>description</TT><A NAME="2756"></A> key in
+<TT>&#92;newacronym</TT><A NAME="2760"></A>. This means that if you are using
+a tabular style glossary, you can have the abbreviated
+form in one column and the long form in the second column
+with the description. For example, the following:
+<PRE>
+\setacronymnamefmt{\gloshort}
+\setacronymdescfmt{\glolong: \glodesc}
+\newacronym{svm}{support vector machine}{description=Statistical
+pattern recognition technique}
+</PRE>
+will generate a glossary entry of the form:
+<PRE>
+\glossary{name=svm,description=support vector machine: Statistical
+pattern recognition technique}
+</PRE>
+Note that if you omit <TT>&#92;glodesc</TT><A NAME="2765"></A> from
+<TT>&#92;setacronymdescfmt</TT> the description specified
+in <TT>&#92;newacronym</TT> will be ignored. So
+<PRE>
+\setacronymnamefmt{\gloshort}
+\setacronymdescfmt{\glolong}
+\newacronym{svm}{support vector machine}{description=Statistical
+pattern recognition technique}
+</PRE>
+will generate a glossary entry of the form:
+<PRE>
+\glossary{name=svm,description=support vector machine}
+</PRE>
+
+<P>
+You will need to specify the <TT>name</TT><A NAME="2774"></A> key explicitly if
+the name contains a <TT>makeindex</TT><A NAME="2778"></A> special character.
+For example:
+<PRE>
+\newacronym{RNA}{Ribonukleins\"aure}{name={Ribonukleins\""aure (RNA)}}
+</PRE>
+Note that this will override any formatting specified by
+<TT>&#92;setacronymnamefmt</TT><A NAME="2781"></A>.
+
+<P>
+Given an acronym named <I>acr-name</I> (the command name
+associated with the acronym as defined in
+<TT>&#92;newacronym</TT> without the preceding backslash),
+the following commands are also available:
+
+<P>
+<BR>
+<BR>
+
+<TT>&#92;useacronym</TT><code>[</code><I>insert</I><code>]{</code><I>acr-name</I><code>}</code>
+<BR>
+<BR>
+This command can be used instead of <TT>&#92;</TT><I>acr-name</I>.
+<TT>&#92;useacronym</TT> also has a starred version equivalent to
+<TT>&#92;</TT><I>acr-name</I><TT>*</TT>.
+The optional argument <I>insert</I> allows you to insert text
+after <I>long</I>, if this is the first occurrence of the
+acronym, or after the acronym on subsequent occurrences.
+
+<P>
+<BR>
+<BR>
+
+<TT>&#92;resetacronym</TT><code>{</code><I>acr-name</I><code>}</code>
+<BR>
+<BR>
+This command will cause the next use of <TT>&#92;</TT><I>acr-name</I>
+to produce the long version. To reset all acronyms
+do <TT>&#92;resetallacronyms</TT>.
+
+<P>
+<BR>
+<BR>
+
+<TT>&#92;unsetacronym</TT><code>{</code><I>acr-name</I><code>}</code>
+<BR>
+<BR>
+This command will cause all subsequent uses of
+<TT>&#92;</TT><I>acr-name</I> to produce the short version.
+To unset all acronyms
+do <TT>&#92;unsetallacronyms</TT>.
+
+<P>
+<BR>
+<BR>
+
+<TT>&#92;ifacronymfirstuse</TT><code>{</code><I>acr-name</I><code>}{</code><I>true text</I><code>}{</code><I>false text</I><code>}</code>
+<BR>
+<BR>
+This will test if the acronym has been used yet. If it has been
+used, <I>true text</I> will be implemented, otherwise
+<I>false text</I> will be implemented.
+
+<P>
+The long and short forms of an acronym can be produced explicitly
+without a corresponding glossary entry, using the commands:
+<BR>
+<BR><TT>&#92;acrln</TT><code>{</code><I>acr-name</I><code>}</code>
+<BR><TT>&#92;acrsh</TT><code>{</code><I>acr-name</I><code>}</code>
+<BR>
+<BR>
+Or, alternatively:
+<BR>
+<BR><TT>&#92;</TT><I>acr-name</I><TT>long</TT>
+<BR><TT>&#92;</TT><I>acr-name</I><TT>short</TT>
+<BR>
+<BR>
+The first two commands (<TT>&#92;acrln</TT> and <TT>&#92;acrsh</TT>)
+have a starred form that makes the first letter uppercase.
+The other two commands, simply contain <I>long</I> and
+<I>acronym</I>.
+
+<P>
+Note that since these four commands do not generate glossary
+entries they will therefore not contain any hyperlinks, even if
+you have specified the <TT>hyper</TT><A NAME="2827"></A> package option. They are
+provided for use in situations where the associated glossary
+command may cause problems (e.g. in a sectioning command.)
+
+<P>
+Note that, as with all LaTeX commands, spaces following
+command names are ignored so if, for example, you defined
+a new acronym called, say, SVM, then the command <code>\SVM</code> will
+ignore any spaces following it. To force a space, you
+can either place an empty set of braces after the command
+name (e.g. <code>\SVM{}</code>) or use
+<TT>&#92;_</TT> i.e. a backslash followed by
+a space (e.g. <code>\SVM\ </code>). Alternatively, as from
+version 2.22, if you load the <TT>xspace</TT><A NAME="2833"></A> package
+before loading the <TT>glossary</TT><A NAME="2836"></A> package, spaces will
+be put in automatically using <TT>&#92;xspace</TT><A NAME="2839"></A>.
+
+<P>
+If you want the acronym to appear in a particular font,
+for example, small caps, you can redefine the command
+<TT>&#92;acronymfont</TT>. For example:
+<PRE>
+\renewcommand{\acronymfont}[1]{\textsc{#1}}
+</PRE>
+The default definition of <TT>&#92;acronymfont</TT> is:
+<PRE>
+\newcommand{\acronymfont}[1]{#1}
+</PRE>
+
+<P>
+
+<H2><A NAME="SECTION00091000000000000000">
+Examples</A>
+</H2>
+
+<P>
+<PRE>
+\newacronym{SVM}{Support Vector Machine}{description=Statistical
+pattern recognition technique}
+</PRE>
+This will define the command <TT>&#92;SVM</TT>. The first time this
+command is used will display the text: Support Vector Machine
+(SVM). Subsequent use will simply display: SVM. The next
+example uses the optional argument <I>cmd-name</I> since the
+acronym contains a non-alphabetical character:
+<PRE>
+\newacronym[KSVM]{K-SVM}{Kernel Support Vector
+Machine}{description=Statistical pattern recognition
+technique using the ``kernel trick''}
+</PRE>
+This will define the command <TT>&#92;KSVM</TT>. The first time
+this command is used will display the text: Kernel Support Vector
+Machine (K-SVM). Subsequent use will simply display: K-SVM.
+
+<P>
+To test whether or not an acronym has been used:
+<PRE>
+\ifacronymfirstuse{SVM}{a}{an} \SVM\ is \ldots
+</PRE>
+If the acronym has not been used, the following text will
+be produced:
+<BR>
+<BR>
+a Support Vector Machine is ...
+<BR>
+<BR>
+otherwise it will produce:
+<BR>
+<BR>
+an SVM is ...
+<BR>
+<BR>
+To expand the acronym a second time:
+<PRE>
+\chapter{An overview of the \protect\SVM}
+\resetacronym{SVM}
+The \SVM\ \ldots
+</PRE>
+Note the use of <TT>&#92;protect</TT> (see
+note&nbsp;<A HREF="#itm:fragile">15</A>.) In fact, in this situation
+it would be better to do:
+<PRE>
+\chapter[An overview of the \SVMlong]{An overview of the \protect\SVM}
+\resetacronym{SVM}
+The \SVM\ \ldots
+</PRE>
+
+<P>
+Now suppose you want the text: support vector machine,
+instead of Support Vector Machine (i.e. you don't like the
+uppercase letters). You can define the acronym as follows:
+<PRE>
+\newacronym{SVM}{support vector machine}{description=Statistical
+pattern recognition technique}
+</PRE>
+however, if the command <TT>&#92;SVM</TT> occurs at the start of the
+sentence, you would clearly want the first letter as an
+uppercase letter. This can be done using <TT>&#92;SVM*</TT> instead
+of <TT>&#92;SVM</TT>. For example:
+<PRE>
+\SVM*\ techniques are widely used \ldots
+</PRE>
+This will then come out as: Support vector machine (SVM)
+techniques are widely used ...(Assuming this is the first
+use of either <TT>&#92;SVM</TT> or <TT>&#92;SVM*</TT>.)
+
+<P>
+Alternatively, <TT>&#92;useacronym</TT><A NAME="2864"></A><code>{SVM}</code> can be used instead of
+<TT>&#92;SVM</TT>. For example:
+<PRE>
+\useacronym*[s]{SVM} are widely used in the area of pattern
+recognition.
+</PRE>
+If this is the first use of the acronym SVM, it will produce the
+following text:
+<BR>
+<BR>
+Support vector machines (SVM) are widely used in the area of
+pattern recognition.
+<BR>
+<BR>
+If this is not the first use of this acronym, it will produce the
+following text:
+<BR>
+<BR>
+SVMs are widely used in the area of pattern recognition.
+
+<P>
+
+<H1><A NAME="SECTION000100000000000000000">
+Customizing the Glossary</A>
+</H1>
+The <TT>glossary</TT><A NAME="2871"></A> package provides commands which can be redefined to customize the
+glossary. The following name commands are defined by this package:
+<DIV ALIGN="CENTER">
+<TABLE CELLPADDING=3>
+<TR><TH ALIGN="LEFT"><B>Command </B></TH>
+<TH ALIGN="LEFT"><B>Default Value</B></TH>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>&#92;glossaryname</TT></TD>
+<TD ALIGN="LEFT">Glossary</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>&#92;shortglossaryname</TT></TD>
+<TD ALIGN="LEFT"><TT>&#92;glossaryname</TT></TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>&#92;entryname</TT></TD>
+<TD ALIGN="LEFT">Notation</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>&#92;descriptionname</TT></TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+</TABLE>
+</DIV>
+The commands <TT>&#92;entryname</TT> and <TT>&#92;descriptionname</TT>
+are put in the first two columns of the header row if you
+are using one of the tabular glossary styles together with a
+header row (as specified by the <TT>header=true</TT><A NAME="2895"></A> package option).
+If you are using <TT>cols=3</TT><A NAME="2904"></A>, the command
+<TT>&#92;glspageheader</TT> will be
+put in the third column of the header row. By default, this command
+does nothing.
+
+<P>
+The command <TT>&#92;shortglossaryname</TT> is used for the
+page headers and table of contents entry.
+ Any text required before or after the glossary can be added
+by redefining the commands <TT>&#92;glossarypreamble</TT>
+and <TT>&#92;glossarypostamble</TT>.
+For example.
+<PRE>
+\renewcommand{\glossarypreamble}{Page numbers in
+italic indicate the main definition\par}
+</PRE>
+By default, <TT>&#92;glossarypreamble</TT> and <TT>&#92;glossarypostamble</TT> do nothing.
+
+<P>
+Any text required before or after the list of page numbers
+are specified by the commands <TT>&#92;glsbeforenum</TT>
+
+and <TT>&#92;glsafternum</TT>.
+By default, these commands do nothing, any redefinition
+of these commands should come somewhere before the
+relevant <TT>&#92;printglossary</TT> command. For example:
+<PRE>
+\printglossary
+\renewcommand{\glsbeforenum}{(}
+\renewcommand{\glsafternum}{)}
+\printnotation
+</PRE>
+This will put the page number list in brackets for the
+second glossary, but not the first.
+
+<P>
+Individual glossaries can have their styles changed either
+by setting the style in the final optional argument
+to <TT>&#92;newglossarystyle</TT><A NAME="2924"></A> (see
+<A HREF="#sec:newglostype">earlier</A>)
+or using the command:
+<BR>
+<BR><TT>&#92;setglossarystyle</TT>[<I>type</I>]{<I>style list</I>}
+<BR>
+<BR>
+For example:
+<PRE>
+\setglossarystyle[acronym]{style=long,border=true,cols=2}
+</PRE>
+If <I>type</I> is omitted, the change is applied to the main
+glossary.
+
+<P>
+The command <TT>&#92;setglossary</TT><code>{</code><I>key-val list</I><code>}</code>
+can be used to modify some of the glossary settings. The argument
+<I>key-val list</I> is a comma-separated list of
+<I>key</I>=<I>value</I> pairs. Available keys are:
+<DL>
+<DT><STRONG><TT>type</TT><A NAME="2933"></A></STRONG></DT>
+<DD>This is the glossary type.
+If it is omitted, the standard glossary is assumed.
+
+<P>
+</DD>
+<DT><STRONG><TT>glsnumformat</TT><A NAME="2937"></A></STRONG></DT>
+<DD>This is the name of the command,
+<I>without</I> the preceding backslash<A NAME="tex2html4"
+ HREF="#foot1613"><SUP>3</SUP></A>, to format the
+entry numbers. For example, to make all the entry numbers italic,
+do:
+<PRE>
+\setglossary{glsnumformat=textit}
+</PRE>
+To suppress numbering altogether, you can do:
+<PRE>
+\setglossary{glsnumformat=ignore}
+</PRE>
+
+<P>
+</DD>
+<DT><STRONG><TT>glodelim</TT><A NAME="2943"></A></STRONG></DT>
+<DD>This
+specifies what to do after the entry description and
+before the page numbers. The default value is a comma, unless the <TT>cols=3</TT><A NAME="2954"></A> option is specified,
+in which case it has the value <code>&amp;</code>, or if
+<TT>style=altlist</TT><A NAME="2963"></A>,
+in which case it is simply a space<A NAME="tex2html5"
+ HREF="#foot1614"><SUP>4</SUP></A>. If the package option <TT>number=none</TT><A NAME="2972"></A> is
+specified, <TT>glodelim</TT><A NAME="2974"></A> will have an empty value (unless
+<TT>cols=3</TT><A NAME="2985"></A> is specified,
+where, again, it will have the value <code>&amp;</code>.)
+This setting corresponds to the <TT>delim_0</TT><A NAME="2987"></A> key in the
+<TT>makeindex</TT><A NAME="2989"></A> style file.
+
+<P>
+Note that if you want a new line between the description
+and the list of page numbers you will need to use
+<TT>&#92;noexpand</TT>. For example:
+<PRE>
+\setglossary{glodelim={\noexpand\newline}}
+</PRE>
+
+<P>
+</DD>
+<DT><STRONG><TT>delimN</TT><A NAME="2994"></A></STRONG></DT>
+<DD>
+The delimiter to be inserted between two
+page numbers for the same entry. (This corresponds to the
+<TT>delim_n</TT><A NAME="2998"></A> key in the <TT>makeindex</TT><A NAME="3000"></A> style file.)
+By default, this has the value
+<TT>,_</TT> (comma followed by a space). If the
+package option <TT>number=none</TT><A NAME="3010"></A> is chosen, the value is set
+to empty.
+
+<P>
+</DD>
+<DT><STRONG><TT>delimR</TT><A NAME="3012"></A></STRONG></DT>
+<DD>
+The delimiter to be inserted between the starting and ending page
+number range for the same entry. (This corresponds to the
+<TT>delim_r</TT><A NAME="3016"></A> key in the <TT>makeindex</TT><A NAME="3018"></A> style file.)
+By default, this has the value <code>--</code>. If the
+package option <TT>number=none</TT><A NAME="3028"></A> is chosen, the value is set
+to empty.
+
+<P>
+</DD>
+<DT><STRONG><TT>gloskip</TT><A NAME="3030"></A></STRONG></DT>
+<DD>
+This specifies what to do between groups.
+If <TT>style=list</TT><A NAME="3041"></A> or <TT>style=altlist</TT><A NAME="3050"></A> this has the
+value <TT>&#92;indexspace</TT>, otherwise it creates a blank row
+ in the <TT>longtable</TT> or <TT>supertabular</TT> environment.
+This command corresponds to the <TT>group_skip</TT><A NAME="3056"></A> key in
+the <TT>makeindex</TT><A NAME="3058"></A> style file.
+Note that as from version 2.3, you should no longer redefine
+the command <TT>&#92;gloskip</TT>.
+
+<P>
+</DD>
+<DT><STRONG><TT>delimT</TT><A NAME="3063"></A></STRONG></DT>
+<DD>
+The text to be inserted after the list of
+page numbers for an entry. (This corresponds to the
+<TT>delim_t</TT><A NAME="3067"></A> key in the <TT>makeindex</TT><A NAME="3069"></A> style file.)
+The default value depends on the glossary style. It does
+nothing for the list-type styles, and has the value
+<code>\\</code> for the tabular-type styles. Note that
+<TT>delimT</TT><A NAME="3072"></A> is separate from <TT>&#92;glsafternum</TT>.
+
+<P>
+For example, if you are using a 2 column tabular style,
+and you want a blank line after every entry (not just
+after every group) you can do the following:
+<PRE>
+\setglossary{delimT={\cr &amp; \cr},gloskip={}}
+</PRE>
+Note the use of <TT>&#92;cr</TT> instead of <code>\\</code> and
+<TT>gloskip</TT><A NAME="3080"></A> is set to nothing otherwise there would be
+a double space between groups.
+</DD>
+</DL>
+Note that:
+<PRE>
+\setglossary{glsnumformat=ignore}
+</PRE>
+is equivalent to
+<PRE>
+\setglossary{glsnumformat=ignore,delimN={},delimR={}}
+</PRE>
+
+<P>
+As from version 2.4,
+you can insert text between groups by redefining the
+commands <TT>&#92;glogroupSymbols</TT>,
+<TT>&#92;glogroupNumbers</TT>, <TT>&#92;glogroupA</TT> ... <TT>&#92;glogroupZ</TT>. For example, if you are using one
+of the list styles, the following will print the appropriate
+heading in bold, followed by a gap:
+<PRE>
+\renewcommand{\glogroupSymbols}{\textbf{Symbols}\indexspace}
+\renewcommand{\glogroupNumbers}{\textbf{Numbers}\indexspace}
+\renewcommand{\glogroupA}{\textbf{A}\indexspace}
+....% similar lines omitted
+\renewcommand{\glosgroupZ}{\textbf{Z}\indexspace}
+</PRE>
+
+<P>
+The start and end of the main body of the glossary is given by the commands:
+<TT>&#92;beforeglossary</TT> and
+<TT>&#92;afterglossary</TT>.
+If the <TT>style=list</TT><A NAME="3103"></A>
+or <TT>style=altlist</TT><A NAME="3112"></A>
+package options are chosen these commands simply begin and end
+the <TT>description</TT>
+environment, otherwise these commands begin and end the
+<TT>longtable</TT> or
+<TT>supertabular</TT>
+environment with argument specified by
+<TT>&#92;glossaryalignment</TT><A NAME="tex2html6"
+ HREF="#foot1148"><SUP>5</SUP></A>.
+
+<P>
+The glossary package no longer conflicts with the <TT>array</TT><A NAME="3119"></A>
+package. Changes can now be made to <TT>&#92;glossaryalignment</TT>
+regardless of whether or not the <TT>array</TT><A NAME="3124"></A>
+package has been used.
+
+<P>
+The command <TT>&#92;gloitem</TT> indicates
+what to do at the start of each glossary entry.
+This command takes one argument, which will be the text specified by the <TT>name</TT><A NAME="3129"></A> key
+in the <TT>&#92;glossary</TT><A NAME="3133"></A> command. In the case of the
+<TT>style=list</TT><A NAME="3145"></A> option,
+<TT>&#92;gloitem</TT><code>{</code><I>text</I><code>}</code>
+will do
+<BR>
+<BR><code>\item[</code><I>text</I><code>]</code>
+<BR>
+<BR>
+or if <TT>style=altlist</TT><A NAME="3156"></A>:
+<BR>
+<BR><code>\item[</code><I>text</I><code>]\mbox{}\par</code>
+<BR>
+<BR>
+otherwise it will do
+<BR>
+<BR><I>text</I><code> &amp;</code>
+<BR>
+<BR>
+This command corresponds to the <TT>item_0</TT><A NAME="3158"></A> key in the
+<TT>makeindex</TT><A NAME="3160"></A> style file.
+
+<P>
+If the glossary has a tabular style with a header row
+(<TT>header=true</TT><A NAME="3170"></A> and either <TT>style=long</TT><A NAME="3179"></A> or
+<TT>style=super</TT><A NAME="3188"></A>), then the header row for <TT>cols=2</TT><A NAME="3197"></A>
+will be given by:
+<PRE>
+\bfseries\entryname &amp; \bfseries \descriptionname\\
+</PRE>
+and the header row for <TT>cols=3</TT><A NAME="3206"></A> will be given by:
+<PRE>
+\bfseries\entryname &amp; \bfseries\descriptionname &amp;
+\bfseries\glspageheader\\
+</PRE>
+(It may also contain <TT>&#92;hline&#92;hline</TT> if the
+<TT>border</TT><A NAME="3217"></A> key is set.)
+
+<P>
+If you want to override this, you need to define the command
+<TT>&#92;glossaryheader</TT><A NAME="tex2html7"
+ HREF="#foot1616"><SUP>6</SUP></A>.
+
+<P>
+For example, if you are using a tabular style with <TT>cols=2</TT><A NAME="3234"></A>,
+and you want the <TT>&#92;descriptionname</TT><A NAME="3236"></A> to be centred, you could
+do:
+<PRE>
+\newcommand{\glossaryheader}{\bfseries\entryname &amp;
+ \hfil\bfseries\descriptionname\\}
+</PRE>
+
+<P>
+If you want an extra row below the header row, you can define
+the command<TT>&#92;glossarysubheader</TT>
+
+For example, if you are using <TT>cols=3</TT><A NAME="3250"></A>, and you want an
+extra row after the header row, you can do:
+<PRE>
+\newcommand{\glossarysubheader}{ &amp; &amp; \\}
+</PRE>
+
+<P>
+The command <TT>&#92;glosstail</TT> indicates what to do at the end of
+the <TT>longtable</TT> or <TT>supertabular</TT> environment.
+
+<P>
+The width of the second column for the tabular-type styles is given by the length
+<TT>&#92;descriptionwidth</TT>. This value can be changed using
+the <TT>&#92;setlength</TT> command (the default value is <code>0.6\linewidth</code>).
+
+<P>
+
+<H1><A NAME="SECTION000110000000000000000">
+Sample Documents</A>
+</H1>
+This package comes with the following sample documents:
+
+<UL>
+<LI><TT>sampleSec.tex</TT> -- This document uses the options:
+<TT>style=altlist</TT><A NAME="3267"></A>, <TT>toc</TT><A NAME="3274"></A> and
+<TT>number=section</TT><A NAME="3285"></A>. It also loads the
+<TT>hyperref</TT><A NAME="3287"></A> package before loading the
+<TT>glossary</TT><A NAME="3290"></A> package, so the glossary has hyperlinks
+to the section numbers. Experimenting with different package
+options, will illustrate the different glossary styles.
+You will need to do:
+<PRE>
+pdflatex sampleSec
+makeglos.pl sampleSec
+pdflatex sampleSec
+pdflatex sampleSec
+</PRE>
+If you don't want to use <TT>makeglos.pl</TT><A NAME="3293"></A>, you will need
+to do
+<PRE>
+makeindex -s sampleSec.ist -t sampleSec.glg -o sampleSec.gls sampleSec.glo
+</PRE>
+
+<P>
+</LI>
+<LI><TT>sampleNtn.tex</TT> -- This has a glossary and defines
+a new glossary type called <TT>notation</TT>. The glossary has
+associated page numbers, but the new glossary type doesn't.
+The two glossaries have different styles.
+You will need to do:
+<PRE>
+latex sampleNtn
+makeglos.pl sampleNtn
+latex sampleNtn
+latex sampleNtn
+</PRE>
+If you don't want to use <TT>makeglos.pl</TT><A NAME="3296"></A>, you will need
+to do
+<PRE>
+makeindex -s sampleNtn.ist -t sampleNtn.glg -o sampleNtn.gls sampleNtn.glo
+makeindex -s sampleNtn.ist -t sampleNtn.nlg -o sampleNtn.ntn sampleNtn.not
+</PRE>
+
+<P>
+</LI>
+<LI><TT>sampleNtn2.tex</TT> --This is similar to
+<TT>sampleNtn.tex</TT>, but uses <TT>&#92;storeglosentry</TT><A NAME="3299"></A>.
+
+<P>
+</LI>
+<LI><TT>sampleEq.tex</TT> -- This has a glossary where the
+numbers in the glossary refer to the equation number rather than
+the page number (achieved with the package option
+<TT>number=equation</TT><A NAME="3311"></A>). The <TT>&#92;entryname</TT><A NAME="3313"></A>,
+<TT>&#92;descriptionname</TT><A NAME="3318"></A>, <TT>&#92;glossaryname</TT><A NAME="3323"></A> and
+<TT>&#92;glspageheader</TT><A NAME="3328"></A> are all redefined to customize the
+glossary. You will need to do:
+<PRE>
+latex sampleEq
+makeglos.pl sampleEq
+latex sampleEq
+</PRE>
+If you don't want to use <TT>makeglos.pl</TT><A NAME="3333"></A>, you will need
+to do
+<PRE>
+makeindex -s sampleEq.ist -t sampleEq.glg -o sampleEq.gls sampleEq.glo
+</PRE>
+
+<P>
+</LI>
+<LI><TT>sampleEqPg.tex</TT> -- This is a modified version of
+<TT>sampleEq.tex</TT>. This example has one glossary, where some
+of the entry numbers refer to the corresponding page number, and
+some of the entry numbers refer to the corresponding equation
+number. You will need to do:
+<PRE>
+latex sampleEqPg
+makeglos.pl sampleEqPg
+latex sampleEqPg
+</PRE>
+If you don't want to use <TT>makeglos.pl</TT><A NAME="3336"></A>, you will need
+to do
+<PRE>
+makeindex -s sampleEqPg.ist -t sampleEqPg.glg -o sampleEqPg.gls sampleEqPg.glo
+</PRE>
+
+<P>
+</LI>
+<LI><TT>sampleAcr.tex</TT> -- This has a glossary containing
+acronyms. It uses the style <TT>altlist</TT><A NAME="3339"></A> as this is better
+suited to glossaries with long names. It also uses the
+<TT>hyperref</TT><A NAME="3341"></A> package, so the page numbers in the
+glossary will automatically be hyperlinks, and the acronyms
+within the text will have hyperlinks to their corresponding entry
+in the glossary. You will need to do:
+<PRE>
+pdflatex sampleAcr
+makeglos.pl sampleAcr
+pdflatex sampleAcr
+pdflatex sampleAcr
+</PRE>
+If you don't want to use <TT>makeglos.pl</TT><A NAME="3344"></A>, you will need
+to do
+<PRE>
+makeindex -s sampleAcr.ist -t sampleAcr.glg -o sampleAcr.gls sampleAcr.glo
+</PRE>
+
+<P>
+</LI>
+<LI><TT>sample.tex</TT> -- This has a glossary entry
+with two different definitions of the same name.
+If you just use <TT>makeindex</TT><A NAME="3347"></A>, the two entries
+will be treated separately, however, if you want them
+concatenated, you can use <TT>makeglos.pl</TT><A NAME="3350"></A> with
+the <TT>-m</TT> switch. You will need to do:
+<PRE>
+pdflatex sample
+makeglos.pl -m sample
+pdflatex sample
+pdflatex sample
+</PRE>
+(Depending on the configuration of your system, you
+may have to do <TT>perl makeglos.pl</TT> instead of
+just <TT>makeglos.pl</TT><A NAME="3353"></A>)
+
+<P>
+If you don't want to use <TT>makeglos.pl</TT><A NAME="3356"></A>, you will need
+to do
+<PRE>
+makeindex -s sample.ist -t sample.glg -o sample.gls sample.glo
+</PRE>
+however, the entries with the same name but multiple descriptions
+will not be merged. You will also have to given them different sort
+keys otherwise you will get duplicate hyper targets.
+
+<P>
+</LI>
+<LI><TT>sample4col.tex</TT>--This illustrates how to
+modify the glossary style so that it has 4 columns. You
+will need to do:
+<PRE>
+latex sample4col
+makeglos.pl sample4col
+latex sample4col
+</PRE>
+
+<P>
+</LI>
+</UL>
+
+<P>
+
+<H1><A NAME="SECTION000120000000000000000"></A>
+<A NAME="sec:l2h"></A>
+<BR>
+LaTeX2HTML Style File
+</H1>
+
+<P>
+A LaTeX2HTML Perl script, <TT>glossary.perl</TT><A NAME="3359"></A>, is
+provided with this package for those wishing to use the
+glossary package with the LaTeX2HTML translator.
+The file <TT>glossary.perl</TT><A NAME="3361"></A> should be extracted
+along with <TT>glossary.sty</TT> when you run the
+installation script (<TT>glossary.ins</TT>) through LaTeX.
+
+<P>
+
+<H2><A NAME="SECTION000121000000000000000">
+Limitations</A>
+</H2>
+
+<P>
+
+<UL>
+<LI>The only package options supported are:
+<TT>style=altlist</TT><A NAME="3370"></A>, <TT>hyper=true</TT><A NAME="3379"></A>, <TT>toc=true</TT><A NAME="3388"></A>,
+<TT>acronym=true</TT><A NAME="3397"></A> and <TT>acronym=false</TT><A NAME="3406"></A>.
+
+<P>
+</LI>
+<LI>If you have more than one glossary type, the
+secondary glossaries will occur in the same segment
+as the primary glossary if you use the command
+<code>\print</code><I>name</I> instead of
+<code>\printglossary[</code><I>name</I><code>]</code>, where
+<I>name</I> is the name of the glossary type.
+
+<P>
+</LI>
+<LI>The command <TT>&#92;setglossary</TT><A NAME="3408"></A> must be
+placed in the preamble to have an effect.
+
+<P>
+</LI>
+<LI>The <TT>&#92;storeglosentry</TT><A NAME="3413"></A> commands must be in
+the document environment to have an effect. (They don't
+seem to work in the preamble, I don't know why.)
+
+<P>
+</LI>
+<LI>If you place a <TT>&#92;glossary</TT><A NAME="3418"></A> command
+inside an environment not translated by LaTeX2HTML
+(for example, inside a mathematics environment),
+it will not be entered into the glossary.
+
+<P>
+</LI>
+<LI>The combinations <code>""</code>, <code>"|</code>, <code>"!</code>
+and <code>"@</code> will be correctly translated, unless they
+occur within a maths environment. This is because
+the maths environment is translated before being
+passed to <TT>&#92;glossary</TT><A NAME="3423"></A>. You can overcome this
+by doing, e.g.:
+<BR><TT>&#92;begin</TT><code>{latexonly}</code>
+<BR><code>\glossary{name=$"|\mathcal{S}"|$,description=cardinality of set</code>
+<BR><code>$\mathcal{S}$,sort=cardinality}</code>
+<BR><TT>&#92;end</TT><code>{latexonly}</code>
+<BR><TT>&#92;begin</TT><code>{htmlonly}</code>
+<BR><code>\glossary{name=$|\mathcal{S}|$,description=cardinality of set</code>
+<BR><code>$\mathcal{S}$,sort=cardinality}</code>
+<BR><TT>&#92;end</TT><code>{htmlonly}</code>
+
+<P>
+Alternative, you can use <TT>&#92;mid</TT> instead:
+<PRE>
+\glossary{name=$\mid\mathcal{S}\mid$,description=cardinality of
+set $\mathcal{S}$,sort=cardinality}
+</PRE>
+
+<P>
+</LI>
+<LI>Glossary items with the same names but different
+definitions will not be merged.
+
+<P>
+</LI>
+<LI>The configuration file <TT>glossary.cfg</TT> is ignored.
+
+<P>
+</LI>
+</UL>
+
+<P>
+
+<H1><A NAME="SECTION000130000000000000000"></A>
+<A NAME="sec:trouble"></A>
+<BR>
+Troubleshooting
+</H1>
+
+<P>
+This is a list of common problems, for a more up-to-date FAQ, see
+<TT><A NAME="tex2html8"
+ HREF="http://theoval.cmp.uea.ac.uk/~nlct/packages/faq/">http://theoval.cmp.uea.ac.uk/~nlct/packages/faq/</A></TT>.
+
+<P>
+
+<OL>
+<LI>My glossary hasn't appeared.
+
+<P>
+Check the following:
+
+<UL>
+<LI>Have you included the command <TT>&#92;makeglossary</TT><A NAME="3438"></A>
+in the preamble?
+
+<P>
+</LI>
+<LI>Have you put the command <TT>&#92;printglossary</TT><A NAME="3443"></A> where
+you want the glossary to appear?
+
+<P>
+</LI>
+<LI>Have you used <TT>makeglos.pl</TT><A NAME="3448"></A> or <TT>makeindex</TT><A NAME="3451"></A>,
+and if you did, did it successfully create the <TT>gls</TT><A NAME="3454"></A>
+file? (Check the transcript <TT>glg</TT><A NAME="3456"></A> file.)
+
+<P>
+
+<UL>
+<LI>If you used <TT>makeindex</TT><A NAME="3458"></A> directly, did you specify
+the <TT>ist</TT><A NAME="3461"></A> file created by <TT>&#92;makeglossary</TT><A NAME="3463"></A>,
+and did you remember to specify the output file with the extension
+<TT>gls</TT><A NAME="3468"></A>?
+
+<P>
+</LI>
+<LI>When <TT>makeindex</TT><A NAME="3470"></A> scans the <TT>ist</TT><A NAME="3473"></A> file,
+it should generate the message:
+<PRE>
+9 attributes redefined, 0 ignored
+</PRE>
+If you have a number other than 0 ignored, then there is something
+wrong with the <TT>ist</TT><A NAME="3475"></A> file. Some packages can cause
+problems with the creation of this file, see
+item&nbsp;<A HREF="#itm:ngerman">16</A> below.
+</LI>
+</UL>
+
+<P>
+</LI>
+<LI>Have you remembered to LaTeX your document again
+after using <TT>makeglos.pl</TT><A NAME="3477"></A> or <TT>makeindex</TT><A NAME="3480"></A>?
+
+<P>
+</LI>
+<LI>Have you used <TT>&#92;glossary</TT><A NAME="3483"></A> or <TT>&#92;xglossary</TT><A NAME="3488"></A>?
+
+<P>
+</LI>
+<LI>If you have used <TT>&#92;storeglosentry</TT><A NAME="3493"></A>, have you also
+used <TT>&#92;useglosentry</TT><A NAME="3498"></A>, <TT>&#92;useGlosentry</TT><A NAME="3503"></A> or
+<TT>&#92;gls</TT><A NAME="3508"></A>?
+</LI>
+</UL>
+
+<P>
+If you have defined a new glossary type, have you checked
+all the analogous commands to the above?
+
+<P>
+</LI>
+<LI>My list of acronyms hasn't appeared.
+
+<P>
+Have you used the <TT>acronym=true</TT><A NAME="3520"></A> package option? If no,
+check the answers to the previous item, if yes, make sure
+you have used <TT>&#92;makeacronym</TT><A NAME="3522"></A> and <TT>&#92;printacronym</TT><A NAME="3527"></A>.
+Have you used any of the acronyms you have defined? Remember
+that <TT>&#92;acrsh</TT>, <TT>&#92;acrln</TT>,
+<TT>&#92;</TT><I>acr-name</I><TT>short</TT> and
+<TT>&#92;</TT><I>acr-name</I><TT>long</TT> don't generate entries
+in the list of acronyms, where <TT>&#92;</TT><I>acr-name</I> is the
+name of an acronym command.
+
+<P>
+</LI>
+<LI>My acronym has been expanded twice.
+
+<P>
+By default, if any of your acronym commands occur within a
+group (this includes environments which form implicit grouping)
+the effect will be local to that group. You can either unset
+the acronym outside the group, or use the <TT>global</TT><A NAME="3547"></A>
+package option.
+
+<P>
+</LI>
+<LI>I get an error when using the command
+<TT>&#92;saveglosentry</TT><A NAME="3551"></A>.
+
+<P>
+Don't use this command it's obsolete, use
+<TT>&#92;storeglosentry</TT><A NAME="3556"></A> instead.
+
+<P>
+</LI>
+<LI>One of more of my glossary entries hasn't appeared.
+
+<P>
+Check the following
+
+<UL>
+<LI>If you defined the entry using <TT>&#92;storeglosentry</TT><A NAME="3561"></A>
+have you used either <TT>&#92;useglosentry</TT><A NAME="3566"></A>,
+<TT>&#92;useGlosentry</TT><A NAME="3571"></A> or <TT>&#92;gls</TT><A NAME="3576"></A>?
+
+<P>
+</LI>
+<LI>Have you remembered to <TT>&#92;protect</TT><A NAME="3581"></A> commands
+such as <TT>&#92;mathcal</TT> within <TT>&#92;storeglosentry</TT><A NAME="3588"></A>?
+
+<P>
+</LI>
+<LI>Have you used the characters <TT>@</TT> <TT>!</TT>
+<TT>|</TT> <code>"</code>? If so, have you preceded them
+with a double quote character?
+</LI>
+</UL>
+
+<P>
+Check the <TT>makeindex</TT><A NAME="3593"></A> log file to see if there are
+any error messages.
+
+<P>
+</LI>
+<LI>My glossary has duplicate entries on separate lines.
+
+<P>
+LaTeX treats multiple spaces equivalent to a single space, but <TT>makeindex</TT><A NAME="3596"></A>
+takes spaces into account when determining whether two entries are identical.
+For example:
+<PRE>
+\glossary{name=Identity matrix,
+description=diagonal matrix with 1's along the diagonal}
+</PRE>
+and
+<PRE>
+\glossary{name=Identity matrix,
+description=diagonal matrix with 1's along the diagonal}
+</PRE>
+will be treated as different entries by <TT>makeindex</TT><A NAME="3599"></A>,
+because the first has only one space
+between `Identity' and `matrix' and the second has two.
+The easiest way to ensure consistency is to use
+<TT>&#92;storeglosentry</TT><A NAME="3602"></A> together with <TT>&#92;useglosentry</TT><A NAME="3607"></A>,
+<TT>&#92;useGlosentry</TT><A NAME="3612"></A> or <TT>&#92;gls</TT><A NAME="3617"></A>.
+
+<P>
+</LI>
+<LI>I had an error, fixed it, but I keep getting the same error message.
+
+<P>
+Suppose you've made an error in the <TT>&#92;glossary</TT><A NAME="3622"></A> command. For example:
+<PRE>
+\glossary{name=Java,description=A programming language,format=texbf}
+</PRE>
+In this case <TT>textbf</TT> has been mis-spelt. This error will be copied to the <TT>glo</TT><A NAME="3627"></A> file,
+which in turn will be copied to the <TT>gls</TT><A NAME="3629"></A> file by
+<TT>makeindex</TT><A NAME="3631"></A>. A subsequent run of LaTeX will
+read this error in. If you fix the error in your main document, the error will still be read in from
+the <TT>gls</TT><A NAME="3634"></A> file. The best thing to do is to delete the
+<TT>gls</TT><A NAME="3636"></A> file, and try again.
+
+<P>
+</LI>
+<LI>My glossary has ended up wider than my page.
+
+<P>
+This may occur if you have long entry names, and you are using
+either the <TT>style=long</TT><A NAME="3645"></A> or <TT>style=super</TT><A NAME="3654"></A>
+options. The width of the description column is proportional to
+the line width (in fact, it's <code>0.6\linewidth</code>)
+but the first column is as wide as the widest entry name. You
+can either redefine <TT>&#92;glossaryalignment</TT><A NAME="3656"></A> to change the
+column specifications, or use one of the list-type styles.
+
+<P>
+</LI>
+<LI>The page numbers in my glossary don't match up with the actual page numbers where the entry
+was defined.
+
+<P>
+You may need to LaTeX your document again (just as you have to do
+with <TT>&#92;tableofcontents</TT>, <TT>&#92;listoffigures</TT> etc).
+
+<P>
+</LI>
+<LI>I'm getting a <TT>keyval</TT><A NAME="3665"></A> error.
+
+<P>
+The <TT>glossary</TT><A NAME="3668"></A> package uses the <TT>keyval</TT><A NAME="3671"></A>
+package to extract the information from <I>key</I>=<I>value</I>
+comma separated lists. You need to make sure the syntax is correct.
+If your <I>value</I> contains a
+comma, you will need to enclose <I>value</I> in curly braces. See the <TT>keyval</TT><A NAME="3674"></A> documentation for
+further information<A NAME="tex2html9"
+ HREF="#foot1617"><SUP>7</SUP></A>.
+
+<P>
+</LI>
+<LI>I've used the <TT>hyper</TT><A NAME="3682"></A> option, but nothing happens
+when I click on the numbers in the glossary.
+
+<P>
+Check the following:
+
+<OL>
+<LI>Have you remembered to use PDFLaTeX instead of LaTeX,
+or used a driver that understands hyperlinks?
+</LI>
+<LI>Have you remembered to use the <TT>hyperref</TT><A NAME="3686"></A> or
+<TT>html</TT><A NAME="3689"></A> package?
+</LI>
+<LI>Have you remembered to use a formatting command which uses <TT>&#92;hyperlink</TT>? (E.g. using <TT>hyperbf</TT><A NAME="3694"></A><A NAME="3695"></A> instead
+of <TT>textbf</TT>)? Remember to check the <TT>format</TT><A NAME="3699"></A> key
+in your <TT>&#92;glossary</TT><A NAME="3703"></A> commands, and the
+<TT>glsnumformat</TT><A NAME="3708"></A> key in the <TT>&#92;setglossary</TT><A NAME="3712"></A>
+command.
+</LI>
+<LI>What application are you using to view the PDF file?
+Ghostview can display a PDF file, but ignores the links. If you are using Windows, try
+using Adobe's Acrobat Reader, or if you are using UNIX or Linux, try using <TT>xpdf</TT><A NAME="3717"></A> or <TT>acroread</TT><A NAME="3720"></A>.
+</LI>
+</OL>
+
+<P>
+</LI>
+<LI>The <TT>glossary</TT><A NAME="3723"></A> package conflicts with the
+<TT>datetime</TT><A NAME="3726"></A> package.
+
+<P>
+This has been fixed in version 2.01.
+
+<P>
+</LI>
+<LI>I get an error when using certain commands, such as <TT>&#92;cite</TT> or <code>~</code> in <TT>&#92;newacronym</TT><A NAME="3731"></A>.
+
+<P>
+This has been fixed in version 2.1.
+
+<P>
+</LI>
+<LI>I get the following error:
+<PRE>
+! Package array Error: Illegal pream-token (\glossaryalignment): `c' used.
+</PRE>
+
+<P>
+The <TT>glossary</TT><A NAME="3736"></A> package used to conflict with the
+<TT>array</TT><A NAME="3739"></A> package. This was fixed in version 2.1.
+As from version 2.3, it doesn't matter whether you load
+the <TT>glossary</TT><A NAME="3742"></A> package before or after the
+<TT>array</TT><A NAME="3745"></A> package.
+
+<P>
+</LI>
+<LI><A NAME="itm:fragile"></A> I get the following error:
+<PRE>
+Use of \@chapter doesn't match its definition
+</PRE>
+or
+<PRE>
+! Argument of \@sect has an extra }
+</PRE>
+
+<P>
+If you want to use an acronym command in a moving argument (such as a chapter heading)
+you need to <TT>&#92;protect</TT> it first. Note that if you do put an acronym in a chapter etc
+heading, it will be expanded for the first time in the table of contents, not
+in the chapter heading. The best way to get around this is to use the
+optional argument, e.g.
+<PRE>
+\chapter[Introduction to Kernel Support Vector Machines]{Introduction
+to \protect\KSVM}
+</PRE>
+You will also need to do this if you are using bookmarks in a PDF document.
+
+<P>
+Alternatively, you can do:
+<PRE>
+\resetacronym{KSVM}
+\chapter{Introduction to \protect\KSVM}
+</PRE>
+or if you are using PDFLaTeX:
+<PRE>
+\resetacronym{KSVM}
+\chapter{Introduction to \texorpdfstring{\protect\KSVM}{KSVM}}
+</PRE>
+
+<P>
+</LI>
+<LI><A NAME="itm:ngerman"></A> The <TT>glossary</TT><A NAME="3750"></A> package conflicts with
+<TT>ngerman</TT><A NAME="3753"></A>.
+
+<P>
+This problem is caused by the fact that <TT>ngerman</TT><A NAME="3756"></A>
+redefines the effect of the double quote
+character, but this character is used in the creation of the
+<TT>ist</TT><A NAME="3759"></A> <TT>makeindex</TT><A NAME="3761"></A> style file.
+Try one of the following methods:
+
+<OL>
+<LI>Include the <TT>ngerman</TT><A NAME="3764"></A> package after the
+<TT>&#92;makeglossary</TT><A NAME="3767"></A> command:
+<PRE>
+\usepackage{glossary}
+\makeglossary
+\usepackage{ngerman}
+</PRE>
+
+<P>
+</LI>
+<LI>First omit the <TT>ngerman</TT><A NAME="3772"></A> package and include
+<TT>&#92;makeglossary</TT><A NAME="3775"></A> then LaTeX your document.
+This will create the <TT>ist</TT><A NAME="3780"></A> file. Then include the
+<TT>ngerman</TT><A NAME="3782"></A> package, and insert <TT>&#92;noist</TT><A NAME="3785"></A> before
+the <TT>&#92;makeglossary</TT><A NAME="3790"></A> command, this will prevent further attempts to generate the <TT>ist</TT><A NAME="3795"></A> file.
+<PRE>
+\usepackage{ngerman}
+\usepackage{glossary}
+\noist\makeglossary
+</PRE>
+
+<P>
+</LI>
+<LI>Use <TT>&#92;noist</TT><A NAME="3797"></A>, as above, and create the
+<TT>ist</TT><A NAME="3802"></A> file
+in an ordinary text editor. The file should contain the
+following lines:
+<PRE>
+keyword "\\glossaryentry"
+preamble "\\begin{theglossary}"
+postamble "\n\\end{theglossary}\n"
+group_skip "\\gloskip "
+item_0 "\n\\gloitem "
+delim_0 "\n\\glodelim "
+page_compositor "-"
+delim_n "\\delimN "
+delim_r "\\delimR "
+</PRE>
+</LI>
+</OL>
+It is possible that there may be other packages which will
+also cause a problem, if so, try any of the above.
+
+<P>
+</LI>
+<LI><TT>makeglos.pl</TT><A NAME="3804"></A> gives the following error message:
+<PRE>
+unable to extract name from glossary item:
+</PRE>
+
+<P>
+You are using an old version of <TT>makeglos.pl</TT><A NAME="3807"></A> with a
+new version of the <TT>glossary</TT><A NAME="3810"></A> package. You will need
+to update your version <TT>makeglos.pl</TT><A NAME="3813"></A>.
+</LI>
+</OL>
+Let me know if you encounter any other problems or if you have any comments regarding this package.
+
+<P>
+
+<H1><A NAME="SECTION000140000000000000000">
+Obsolete Commands</A>
+</H1>
+
+<P>
+The commands described in this section are now obsolete, but
+are currently still provided for backwards compatibility. Their
+use is deprecated.
+
+<P>
+
+<TT>&#92;saveglosentry</TT><A NAME="3816"></A>{ <I>name</I>}{<I>description</I>}
+<BR>
+This command has now been replaced by <TT>&#92;storeglosentry</TT>.
+
+<P>
+The command <TT>&#92;glsprimaryfmt</TT> has now been removed.
+
+<P>
+The package option <TT>hyperacronym</TT><A NAME="3830"></A> is now superseded by the package option
+<TT>hyper</TT><A NAME="3839"></A>. This option was implemented prior to the
+introduction of the command <TT>&#92;xglossary</TT><A NAME="3843"></A>. Since the
+acronyms now use <TT>&#92;xglossary</TT><A NAME="3848"></A>, there is no difference
+between the <TT>hyperacronym</TT><A NAME="3858"></A> and <TT>hyper</TT><A NAME="3867"></A> options.
+This option has a boolean value:
+
+<DL>
+<DT><STRONG><TT>true</TT><A NAME="3871"></A></STRONG></DT>
+<DD>Make acronyms link to their corresponding entry in the glossary
+</DD>
+<DT><STRONG><TT>false</TT><A NAME="3873"></A></STRONG></DT>
+<DD>Acronyms don't have a hyperlink.
+</DD>
+</DL>
+If the <TT>hyperref</TT><A NAME="3875"></A> package has been loaded prior to
+loading <TT>glossary.sty</TT> or if <TT>hyper=true</TT><A NAME="3885"></A> is set,
+<TT>hyperacronym=true</TT><A NAME="3894"></A> otherwise
+<TT>hyperacronym=false</TT><A NAME="3903"></A>.
+<P>
+
+<H1><A NAME="SECTION000150000000000000000">
+Contact Details</A>
+</H1>
+
+Dr Nicola Talbot
+<BR>
+School of Computing Sciences
+<BR>
+University of East Anglia
+<BR>
+Norwich. Norfolk
+<BR>
+NR4 7TJ. United Kingdom.
+<BR><TT><A NAME="tex2html10"
+ HREF="http://theoval.cmp.uea.ac.uk/~nlct/">http://theoval.cmp.uea.ac.uk/~nlct/</A></TT>
+<P>
+
+<H1><A NAME="SECTION000160000000000000000">
+Acknowledgements</A>
+</H1>
+
+<P>
+I would like to thank all the many people who have made suggestions
+and pointed out bugs.
+
+<P>
+
+<P>
+<BR>
+
+<H2><A NAME="SECTION000170000000000000000">
+Index</A>
+</H2><DL COMPACT>
+<DT><STRONG><TT>acroread</TT></STRONG>
+<DD><A HREF="manual.html#3720">Troubleshooting</A>
+<DT><STRONG><TT>array</TT></STRONG>
+<DD><A HREF="manual.html#3119">Customizing the Glossary</A>
+ | <A HREF="manual.html#3124">Customizing the Glossary</A>
+ | <A HREF="manual.html#3739">Troubleshooting</A>
+ | <A HREF="manual.html#3745">Troubleshooting</A>
+<DT><STRONG><TT>datetime</TT></STRONG>
+<DD><A HREF="manual.html#3726">Troubleshooting</A>
+<DT><STRONG><TT>&#92;descriptionname</TT></STRONG>
+<DD><A HREF="manual.html#3236">Customizing the Glossary</A>
+ | <A HREF="manual.html#3318">Sample Documents</A>
+<DT><STRONG><TT>&#92;entryname</TT></STRONG>
+<DD><A HREF="manual.html#3313">Sample Documents</A>
+<DT><STRONG>file types</STRONG>
+<DD><DL COMPACT>
+<DT><STRONG>acr</STRONG>
+<DD><A HREF="manual.html#2700">Acronyms</A>
+<DT><STRONG>cfg</STRONG>
+<DD><A HREF="manual.html#2354">Package Options</A>
+ | <A HREF="manual.html#2719">Acronyms</A>
+<DT><STRONG>glg</STRONG>
+<DD><A HREF="manual.html#1960">makeglos.pl</A>
+ | <A HREF="manual.html#2588">Defining New Glossary Types</A>
+ | <A HREF="manual.html#3456">Troubleshooting</A>
+<DT><STRONG>glo</STRONG>
+<DD><A HREF="manual.html#1933">makeglos.pl</A>
+ | <A HREF="manual.html#1948">makeglos.pl</A>
+ | <A HREF="manual.html#2572">Defining New Glossary Types</A>
+ | <A HREF="manual.html#3627">Troubleshooting</A>
+<DT><STRONG>gls</STRONG>
+<DD><A HREF="manual.html#1958">makeglos.pl</A>
+ | <A HREF="manual.html#2022">Displaying the Glossary</A>
+ | <A HREF="manual.html#2583">Defining New Glossary Types</A>
+ | <A HREF="manual.html#3454">Troubleshooting</A>
+ | <A HREF="manual.html#3468">Troubleshooting</A>
+ | <A HREF="manual.html#3629">Troubleshooting</A>
+ | <A HREF="manual.html#3634">Troubleshooting</A>
+ | <A HREF="manual.html#3636">Troubleshooting</A>
+<DT><STRONG>ist</STRONG>
+<DD><A HREF="manual.html#1943">makeglos.pl</A>
+ | <A HREF="manual.html#1953">makeglos.pl</A>
+ | <A HREF="manual.html#1980">makeglos.pl</A>
+ | <A HREF="manual.html#1986">makeglos.pl</A>
+ | <A HREF="manual.html#1988">makeglos.pl</A>
+ | <A HREF="manual.html#1990">makeglos.pl</A>
+ | <A HREF="manual.html#2009">makeglos.pl</A>
+ | <A HREF="manual.html#3461">Troubleshooting</A>
+ | <A HREF="manual.html#3473">Troubleshooting</A>
+ | <A HREF="manual.html#3475">Troubleshooting</A>
+ | <A HREF="manual.html#3759">Troubleshooting</A>
+ | <A HREF="manual.html#3780">Troubleshooting</A>
+ | <A HREF="manual.html#3795">Troubleshooting</A>
+ | <A HREF="manual.html#3802">Troubleshooting</A>
+<DT><STRONG>perl</STRONG>
+<DD><A HREF="manual.html#3359">LaTeX2HTML Style File</A>
+ | <A HREF="manual.html#3361">LaTeX2HTML Style File</A>
+</DL>
+<DT><STRONG><TT>&#92;glodesc</TT></STRONG>
+<DD><A HREF="manual.html#2751">Acronyms</A>
+ | <A HREF="manual.html#2765">Acronyms</A>
+<DT><STRONG><TT>&#92;glolong</TT></STRONG>
+<DD><A HREF="manual.html#2729">Acronyms</A>
+ | <A HREF="manual.html#2741">Acronyms</A>
+<DT><STRONG><TT>&#92;gloshort</TT></STRONG>
+<DD><A HREF="manual.html#2734">Acronyms</A>
+ | <A HREF="manual.html#2746">Acronyms</A>
+<DT><STRONG><TT>glossary</TT></STRONG>
+<DD><A HREF="manual.html#1680">Introduction</A>
+ | <A HREF="manual.html#1833">Generating Glossary Information</A>
+ | <A HREF="manual.html#1846">Generating Glossary Information</A>
+ | <A HREF="manual.html#1851">Storing Glossary Information</A>
+ | <A HREF="manual.html#1856">Storing Glossary Information</A>
+ | <A HREF="manual.html#1859">Storing Glossary Information</A>
+ | <A HREF="manual.html#2358">Package Options</A>
+ | <A HREF="manual.html#2361">Examples</A>
+ | <A HREF="manual.html#2541">Defining New Glossary Types</A>
+ | <A HREF="manual.html#2620">Acronyms</A>
+ | <A HREF="manual.html#2625">Acronyms</A>
+ | <A HREF="manual.html#2836">Acronyms</A>
+ | <A HREF="manual.html#2871">Customizing the Glossary</A>
+ | <A HREF="manual.html#3133">Customizing the Glossary</A>
+ | <A HREF="manual.html#3290">Sample Documents</A>
+ | <A HREF="manual.html#3418">Limitations</A>
+ | <A HREF="manual.html#3423">Limitations</A>
+ | <A HREF="manual.html#3483">Troubleshooting</A>
+ | <A HREF="manual.html#3622">Troubleshooting</A>
+ | <A HREF="manual.html#3668">Troubleshooting</A>
+ | <A HREF="manual.html#3703">Troubleshooting</A>
+ | <A HREF="manual.html#3723">Troubleshooting</A>
+ | <A HREF="manual.html#3736">Troubleshooting</A>
+ | <A HREF="manual.html#3742">Troubleshooting</A>
+ | <A HREF="manual.html#3750">Troubleshooting</A>
+ | <A HREF="manual.html#3810">Troubleshooting</A>
+<DT><STRONG>glossary border</STRONG>
+<DD><i>see </i> package options, border
+<DT><STRONG>glossary columns</STRONG>
+<DD><i>see </i> package options, cols
+<DT><STRONG>glossary header</STRONG>
+<DD><i>see </i> package options, header
+<DT><STRONG><TT>&#92;glossary</TT> keys</STRONG>
+<DD><DL COMPACT>
+<DT><STRONG>description</STRONG>
+<DD><A HREF="manual.html#1709">Generating Glossary Information</A>
+ | <A HREF="manual.html#1880">Storing Glossary Information</A>
+ | <A HREF="manual.html#2756">Acronyms</A>
+<DT><STRONG>format</STRONG>
+<DD><A HREF="manual.html#1717">Generating Glossary Information</A>
+ | <A HREF="manual.html#1743">Generating Glossary Information</A>
+ | <A HREF="manual.html#3699">Troubleshooting</A>
+<DD><DL COMPACT>
+<DT><STRONG>hyperbf</STRONG>
+<DD><A HREF="manual.html#1765">Generating Glossary Information</A>
+ | <A HREF="manual.html#3695">Troubleshooting</A>
+<DT><STRONG>hyperem</STRONG>
+<DD><A HREF="manual.html#1795">Generating Glossary Information</A>
+ | <A HREF="manual.html#1811">Generating Glossary Information</A>
+<DT><STRONG>hyperit</STRONG>
+<DD><A HREF="manual.html#1775">Generating Glossary Information</A>
+<DT><STRONG>hypermd</STRONG>
+<DD><A HREF="manual.html#1770">Generating Glossary Information</A>
+<DT><STRONG>hyperrm</STRONG>
+<DD><A HREF="manual.html#1750">Generating Glossary Information</A>
+ | <A HREF="manual.html#1816">Generating Glossary Information</A>
+<DT><STRONG>hypersc</STRONG>
+<DD><A HREF="manual.html#1790">Generating Glossary Information</A>
+<DT><STRONG>hypersf</STRONG>
+<DD><A HREF="manual.html#1755">Generating Glossary Information</A>
+<DT><STRONG>hypersl</STRONG>
+<DD><A HREF="manual.html#1780">Generating Glossary Information</A>
+<DT><STRONG>hypertt</STRONG>
+<DD><A HREF="manual.html#1760">Generating Glossary Information</A>
+<DT><STRONG>hyperup</STRONG>
+<DD><A HREF="manual.html#1785">Generating Glossary Information</A>
+</DL>
+<DT><STRONG>name</STRONG>
+<DD><A HREF="manual.html#1705">Generating Glossary Information</A>
+ | <A HREF="manual.html#1729">Generating Glossary Information</A>
+ | <A HREF="manual.html#1733">Generating Glossary Information</A>
+ | <A HREF="manual.html#2639">Acronyms</A>
+ | <A HREF="manual.html#2648">Acronyms</A>
+ | <A HREF="manual.html#2723">Acronyms</A>
+ | <A HREF="manual.html#2774">Acronyms</A>
+ | <A HREF="manual.html#3129">Customizing the Glossary</A>
+<DT><STRONG>number</STRONG>
+<DD><A HREF="manual.html#1721">Generating Glossary Information</A>
+ | <A HREF="manual.html#1838">Generating Glossary Information</A>
+<DT><STRONG>sort</STRONG>
+<DD><A HREF="manual.html#1713">Generating Glossary Information</A>
+ | <A HREF="manual.html#1725">Generating Glossary Information</A>
+ | <A HREF="manual.html#1737">Generating Glossary Information</A>
+ | <A HREF="manual.html#2654">Acronyms</A>
+</DL>
+<DT><STRONG>glossary style</STRONG>
+<DD><i>see </i> package options, style
+<DT><STRONG>glossary.cfg</STRONG>
+<DD><i>see </i> file type, cfg
+<DT><STRONG><TT>&#92;glossaryalignment</TT></STRONG>
+<DD><A HREF="manual.html#3656">Troubleshooting</A>
+<DT><STRONG><TT>&#92;glossaryname</TT></STRONG>
+<DD><A HREF="manual.html#2028">Displaying the Glossary</A>
+ | <A HREF="manual.html#2613">Defining New Glossary Types</A>
+ | <A HREF="manual.html#3323">Sample Documents</A>
+<DT><STRONG><TT>&#92;gls</TT></STRONG>
+<DD><A HREF="manual.html#1905">Storing Glossary Information</A>
+ | <A HREF="manual.html#3508">Troubleshooting</A>
+ | <A HREF="manual.html#3576">Troubleshooting</A>
+ | <A HREF="manual.html#3617">Troubleshooting</A>
+<DT><STRONG><TT>&#92;glspageheader</TT></STRONG>
+<DD><A HREF="manual.html#3328">Sample Documents</A>
+<DT><STRONG><TT>html</TT></STRONG>
+<DD><A HREF="manual.html#2220">Package Options</A>
+ | <A HREF="manual.html#3689">Troubleshooting</A>
+<DT><STRONG><TT>hyperref</TT></STRONG>
+<DD><A HREF="manual.html#2151">Package Options</A>
+ | <A HREF="manual.html#2217">Package Options</A>
+ | <A HREF="manual.html#3287">Sample Documents</A>
+ | <A HREF="manual.html#3341">Sample Documents</A>
+ | <A HREF="manual.html#3686">Troubleshooting</A>
+ | <A HREF="manual.html#3875">Obsolete Commands</A>
+<DT><STRONG><TT>&#92;hyperrm</TT></STRONG>
+<DD><A HREF="manual.html#1826">Generating Glossary Information</A>
+<DT><STRONG><TT>keyval</TT></STRONG>
+<DD><A HREF="manual.html#3665">Troubleshooting</A>
+ | <A HREF="manual.html#3671">Troubleshooting</A>
+ | <A HREF="manual.html#3674">Troubleshooting</A>
+<DT><STRONG><TT>&#92;makeacronym</TT></STRONG>
+<DD><A HREF="manual.html#2690">Acronyms</A>
+ | <A HREF="manual.html#3522">Troubleshooting</A>
+<DT><STRONG><TT>makeglos.pl</TT></STRONG>
+<DD><A HREF="manual.html#1962">makeglos.pl</A>
+ | <A HREF="manual.html#1968">makeglos.pl</A>
+ | <A HREF="manual.html#1971">makeglos.pl</A>
+ | <A HREF="manual.html#1977">makeglos.pl</A>
+ | <A HREF="manual.html#2577">Defining New Glossary Types</A>
+ | <A HREF="manual.html#2590">Defining New Glossary Types</A>
+ | <A HREF="manual.html#2596">Defining New Glossary Types</A>
+ | <A HREF="manual.html#2599">Defining New Glossary Types</A>
+ | <A HREF="manual.html#2602">Defining New Glossary Types</A>
+ | <A HREF="manual.html#2705">Acronyms</A>
+ | <A HREF="manual.html#3293">Sample Documents</A>
+ | <A HREF="manual.html#3296">Sample Documents</A>
+ | <A HREF="manual.html#3333">Sample Documents</A>
+ | <A HREF="manual.html#3336">Sample Documents</A>
+ | <A HREF="manual.html#3344">Sample Documents</A>
+ | <A HREF="manual.html#3350">Sample Documents</A>
+ | <A HREF="manual.html#3353">Sample Documents</A>
+ | <A HREF="manual.html#3356">Sample Documents</A>
+ | <A HREF="manual.html#3448">Troubleshooting</A>
+ | <A HREF="manual.html#3477">Troubleshooting</A>
+ | <A HREF="manual.html#3804">Troubleshooting</A>
+ | <A HREF="manual.html#3807">Troubleshooting</A>
+ | <A HREF="manual.html#3813">Troubleshooting</A>
+<DT><STRONG><TT>&#92;makeglossary</TT></STRONG>
+<DD><A HREF="manual.html#1935">makeglos.pl</A>
+ | <A HREF="manual.html#1994">makeglos.pl</A>
+ | <A HREF="manual.html#2004">makeglos.pl</A>
+ | <A HREF="manual.html#2014">makeglos.pl</A>
+ | <A HREF="manual.html#2536">Defining New Glossary Types</A>
+ | <A HREF="manual.html#3438">Troubleshooting</A>
+ | <A HREF="manual.html#3463">Troubleshooting</A>
+ | <A HREF="manual.html#3767">Troubleshooting</A>
+ | <A HREF="manual.html#3775">Troubleshooting</A>
+ | <A HREF="manual.html#3790">Troubleshooting</A>
+<DT><STRONG><TT>makeindex</TT></STRONG>
+<DD><A HREF="manual.html#1683">Installation</A>
+ | <A HREF="manual.html#1689">Installation</A>
+ | <A HREF="manual.html#1692">Installation</A>
+ | <A HREF="manual.html#1940">makeglos.pl</A>
+ | <A HREF="manual.html#1945">makeglos.pl</A>
+ | <A HREF="manual.html#1950">makeglos.pl</A>
+ | <A HREF="manual.html#1955">makeglos.pl</A>
+ | <A HREF="manual.html#1965">makeglos.pl</A>
+ | <A HREF="manual.html#1974">makeglos.pl</A>
+ | <A HREF="manual.html#2019">makeglos.pl</A>
+ | <A HREF="manual.html#2024">Displaying the Glossary</A>
+ | <A HREF="manual.html#2574">Defining New Glossary Types</A>
+ | <A HREF="manual.html#2580">Defining New Glossary Types</A>
+ | <A HREF="manual.html#2585">Defining New Glossary Types</A>
+ | <A HREF="manual.html#2593">Defining New Glossary Types</A>
+ | <A HREF="manual.html#2605">Defining New Glossary Types</A>
+ | <A HREF="manual.html#2702">Acronyms</A>
+ | <A HREF="manual.html#2778">Acronyms</A>
+ | <A HREF="manual.html#2989">Customizing the Glossary</A>
+ | <A HREF="manual.html#3000">Customizing the Glossary</A>
+ | <A HREF="manual.html#3018">Customizing the Glossary</A>
+ | <A HREF="manual.html#3058">Customizing the Glossary</A>
+ | <A HREF="manual.html#3069">Customizing the Glossary</A>
+ | <A HREF="manual.html#3160">Customizing the Glossary</A>
+ | <A HREF="manual.html#3347">Sample Documents</A>
+ | <A HREF="manual.html#3451">Troubleshooting</A>
+ | <A HREF="manual.html#3458">Troubleshooting</A>
+ | <A HREF="manual.html#3470">Troubleshooting</A>
+ | <A HREF="manual.html#3480">Troubleshooting</A>
+ | <A HREF="manual.html#3593">Troubleshooting</A>
+ | <A HREF="manual.html#3596">Troubleshooting</A>
+ | <A HREF="manual.html#3599">Troubleshooting</A>
+ | <A HREF="manual.html#3631">Troubleshooting</A>
+ | <A HREF="manual.html#3761">Troubleshooting</A>
+<DT><STRONG>makeindex key</STRONG>
+<DD><DL COMPACT>
+<DT><STRONG>delim_0</STRONG>
+<DD><A HREF="manual.html#2987">Customizing the Glossary</A>
+<DT><STRONG>delim_n</STRONG>
+<DD><A HREF="manual.html#2998">Customizing the Glossary</A>
+<DT><STRONG>delim_r</STRONG>
+<DD><A HREF="manual.html#3016">Customizing the Glossary</A>
+<DT><STRONG>delim_t</STRONG>
+<DD><A HREF="manual.html#3067">Customizing the Glossary</A>
+<DT><STRONG>group_skip</STRONG>
+<DD><A HREF="manual.html#3056">Customizing the Glossary</A>
+<DT><STRONG>item_0</STRONG>
+<DD><A HREF="manual.html#3158">Customizing the Glossary</A>
+</DL>
+<DT><STRONG>makeindex style file (.ist)</STRONG>
+<DD><i>see </i> file types, ist
+<DT><STRONG><TT>&#92;newacronym</TT></STRONG>
+<DD><A HREF="manual.html#2760">Acronyms</A>
+ | <A HREF="manual.html#3731">Troubleshooting</A>
+<DT><STRONG><TT>&#92;newglossarystyle</TT></STRONG>
+<DD><A HREF="manual.html#2924">Customizing the Glossary</A>
+<DT><STRONG><TT>ngerman</TT></STRONG>
+<DD><A HREF="manual.html#2011">makeglos.pl</A>
+ | <A HREF="manual.html#3753">Troubleshooting</A>
+ | <A HREF="manual.html#3756">Troubleshooting</A>
+ | <A HREF="manual.html#3764">Troubleshooting</A>
+ | <A HREF="manual.html#3772">Troubleshooting</A>
+ | <A HREF="manual.html#3782">Troubleshooting</A>
+<DT><STRONG><TT>&#92;nofiles</TT></STRONG>
+<DD><A HREF="manual.html#1999">makeglos.pl</A>
+<DT><STRONG><TT>&#92;noist</TT></STRONG>
+<DD><A HREF="manual.html#3785">Troubleshooting</A>
+ | <A HREF="manual.html#3797">Troubleshooting</A>
+<DT><STRONG>package options</STRONG>
+<DD><DL COMPACT>
+<DT><STRONG>,</STRONG><DD><DL COMPACT>
+<DT><STRONG>none</STRONG>
+<DD><A HREF="manual.html#2109">Package Options</A>
+</DL>
+<DT><STRONG>acronym</STRONG>
+<DD><A HREF="manual.html#2268">Package Options</A>
+ | <A HREF="manual.html#2270">Package Options</A>
+ | <A HREF="manual.html#2663">Acronyms</A>
+ | <A HREF="manual.html#2665">Acronyms</A>
+ | <A HREF="manual.html#2686">Acronyms</A>
+ | <A HREF="manual.html#2713">Acronyms</A>
+ | <A HREF="manual.html#3395">Limitations</A>
+ | <A HREF="manual.html#3404">Limitations</A>
+ | <A HREF="manual.html#3518">Troubleshooting</A>
+<DD><DL COMPACT>
+<DT><STRONG>false</STRONG>
+<DD><A HREF="manual.html#2274">Package Options</A>
+ | <A HREF="manual.html#3406">Limitations</A>
+<DT><STRONG>true</STRONG>
+<DD><A HREF="manual.html#2272">Package Options</A>
+ | <A HREF="manual.html#2688">Acronyms</A>
+ | <A HREF="manual.html#2715">Acronyms</A>
+ | <A HREF="manual.html#3397">Limitations</A>
+ | <A HREF="manual.html#3520">Troubleshooting</A>
+</DL>
+<DT><STRONG>border</STRONG>
+<DD><A HREF="manual.html#2079">Package Options</A>
+ | <A HREF="manual.html#2081">Package Options</A>
+ | <A HREF="manual.html#2294">Package Options</A>
+ | <A HREF="manual.html#2296">Package Options</A>
+ | <A HREF="manual.html#2422">Examples</A>
+ | <A HREF="manual.html#2458">Examples</A>
+ | <A HREF="manual.html#2485">Examples</A>
+ | <A HREF="manual.html#2512">Examples</A>
+ | <A HREF="manual.html#3217">Customizing the Glossary</A>
+ | <A HREF="manual.html#3219">Customizing the Glossary</A>
+<DD><DL COMPACT>
+<DT><STRONG>none</STRONG>
+<DD><A HREF="manual.html#2083">Package Options</A>
+ | <A HREF="manual.html#2424">Examples</A>
+ | <A HREF="manual.html#2514">Examples</A>
+<DT><STRONG>plain</STRONG>
+<DD><A HREF="manual.html#2085">Package Options</A>
+ | <A HREF="manual.html#2460">Examples</A>
+ | <A HREF="manual.html#2487">Examples</A>
+</DL>
+<DT><STRONG>cols</STRONG>
+<DD><A HREF="manual.html#2092">Package Options</A>
+ | <A HREF="manual.html#2094">Package Options</A>
+ | <A HREF="manual.html#2312">Package Options</A>
+ | <A HREF="manual.html#2314">Package Options</A>
+ | <A HREF="manual.html#2530">Examples</A>
+ | <A HREF="manual.html#2902">Customizing the Glossary</A>
+ | <A HREF="manual.html#2952">Customizing the Glossary</A>
+ | <A HREF="manual.html#2983">Customizing the Glossary</A>
+ | <A HREF="manual.html#3195">Customizing the Glossary</A>
+ | <A HREF="manual.html#3204">Customizing the Glossary</A>
+ | <A HREF="manual.html#3232">Customizing the Glossary</A>
+ | <A HREF="manual.html#3248">Customizing the Glossary</A>
+<DD><DL COMPACT>
+<DT><STRONG>2</STRONG>
+<DD><A HREF="manual.html#2096">Package Options</A>
+ | <A HREF="manual.html#3197">Customizing the Glossary</A>
+ | <A HREF="manual.html#3234">Customizing the Glossary</A>
+<DT><STRONG>3</STRONG>
+<DD><A HREF="manual.html#2098">Package Options</A>
+ | <A HREF="manual.html#2532">Examples</A>
+ | <A HREF="manual.html#2904">Customizing the Glossary</A>
+ | <A HREF="manual.html#2954">Customizing the Glossary</A>
+ | <A HREF="manual.html#2985">Customizing the Glossary</A>
+ | <A HREF="manual.html#3206">Customizing the Glossary</A>
+ | <A HREF="manual.html#3250">Customizing the Glossary</A>
+</DL>
+<DT><STRONG>global</STRONG>
+<DD><A HREF="manual.html#2281">Package Options</A>
+ | <A HREF="manual.html#2283">Package Options</A>
+ | <A HREF="manual.html#3547">Troubleshooting</A>
+ | <A HREF="manual.html#3549">Troubleshooting</A>
+<DD><DL COMPACT>
+<DT><STRONG>false</STRONG>
+<DD><A HREF="manual.html#2285">Package Options</A>
+<DT><STRONG>true</STRONG>
+<DD><A HREF="manual.html#2287">Package Options</A>
+</DL>
+<DT><STRONG>header</STRONG>
+<DD><A HREF="manual.html#2066">Package Options</A>
+ | <A HREF="manual.html#2068">Package Options</A>
+ | <A HREF="manual.html#2303">Package Options</A>
+ | <A HREF="manual.html#2305">Package Options</A>
+ | <A HREF="manual.html#2431">Examples</A>
+ | <A HREF="manual.html#2467">Examples</A>
+ | <A HREF="manual.html#2494">Examples</A>
+ | <A HREF="manual.html#2521">Examples</A>
+ | <A HREF="manual.html#2893">Customizing the Glossary</A>
+ | <A HREF="manual.html#3168">Customizing the Glossary</A>
+<DD><DL COMPACT>
+<DT><STRONG>none</STRONG>
+<DD><A HREF="manual.html#2070">Package Options</A>
+ | <A HREF="manual.html#2433">Examples</A>
+ | <A HREF="manual.html#2469">Examples</A>
+<DT><STRONG>plain</STRONG>
+<DD><A HREF="manual.html#2072">Package Options</A>
+ | <A HREF="manual.html#2496">Examples</A>
+ | <A HREF="manual.html#2523">Examples</A>
+<DT><STRONG>true</STRONG>
+<DD><A HREF="manual.html#2895">Customizing the Glossary</A>
+ | <A HREF="manual.html#3170">Customizing the Glossary</A>
+</DL>
+<DT><STRONG>hyper</STRONG>
+<DD><A HREF="manual.html#1806">Generating Glossary Information</A>
+ | <A HREF="manual.html#1808">Generating Glossary Information</A>
+ | <A HREF="manual.html#2204">Package Options</A>
+ | <A HREF="manual.html#2206">Package Options</A>
+ | <A HREF="manual.html#2228">Package Options</A>
+ | <A HREF="manual.html#2237">Package Options</A>
+ | <A HREF="manual.html#2827">Acronyms</A>
+ | <A HREF="manual.html#2829">Acronyms</A>
+ | <A HREF="manual.html#3377">Limitations</A>
+ | <A HREF="manual.html#3682">Troubleshooting</A>
+ | <A HREF="manual.html#3684">Troubleshooting</A>
+ | <A HREF="manual.html#3839">Obsolete Commands</A>
+ | <A HREF="manual.html#3841">Obsolete Commands</A>
+ | <A HREF="manual.html#3867">Obsolete Commands</A>
+ | <A HREF="manual.html#3869">Obsolete Commands</A>
+ | <A HREF="manual.html#3883">Obsolete Commands</A>
+<DD><DL COMPACT>
+<DT><STRONG>false</STRONG>
+<DD><A HREF="manual.html#2215">Package Options</A>
+ | <A HREF="manual.html#2239">Package Options</A>
+<DT><STRONG>true</STRONG>
+<DD><A HREF="manual.html#2208">Package Options</A>
+ | <A HREF="manual.html#2230">Package Options</A>
+ | <A HREF="manual.html#3379">Limitations</A>
+ | <A HREF="manual.html#3885">Obsolete Commands</A>
+</DL>
+<DT><STRONG>hyperacronym</STRONG>
+<DD><A HREF="manual.html#2246">Package Options</A>
+ | <A HREF="manual.html#2248">Package Options</A>
+ | <A HREF="manual.html#3830">Obsolete Commands</A>
+ | <A HREF="manual.html#3832">Obsolete Commands</A>
+ | <A HREF="manual.html#3858">Obsolete Commands</A>
+ | <A HREF="manual.html#3860">Obsolete Commands</A>
+ | <A HREF="manual.html#3892">Obsolete Commands</A>
+ | <A HREF="manual.html#3901">Obsolete Commands</A>
+<DD><DL COMPACT>
+<DT><STRONG>false</STRONG>
+<DD><A HREF="manual.html#3873">Obsolete Commands</A>
+ | <A HREF="manual.html#3903">Obsolete Commands</A>
+<DT><STRONG>true</STRONG>
+<DD><A HREF="manual.html#3871">Obsolete Commands</A>
+ | <A HREF="manual.html#3894">Obsolete Commands</A>
+</DL>
+<DT><STRONG>hypertoc</STRONG>
+<DD><A HREF="manual.html#2138">Package Options</A>
+ | <A HREF="manual.html#2140">Package Options</A>
+ | <A HREF="manual.html#2159">Package Options</A>
+ | <A HREF="manual.html#2161">Package Options</A>
+ | <A HREF="manual.html#2186">Package Options</A>
+ | <A HREF="manual.html#2195">Package Options</A>
+<DD><DL COMPACT>
+<DT><STRONG>false</STRONG>
+<DD><A HREF="manual.html#2197">Package Options</A>
+<DT><STRONG>true</STRONG>
+<DD><A HREF="manual.html#2188">Package Options</A>
+</DL>
+<DT><STRONG>number</STRONG>
+<DD><A HREF="manual.html#2105">Package Options</A>
+ | <A HREF="manual.html#2107">Package Options</A>
+ | <A HREF="manual.html#2116">Package Options</A>
+ | <A HREF="manual.html#2404">Examples</A>
+ | <A HREF="manual.html#2440">Examples</A>
+ | <A HREF="manual.html#2970">Customizing the Glossary</A>
+ | <A HREF="manual.html#3008">Customizing the Glossary</A>
+ | <A HREF="manual.html#3026">Customizing the Glossary</A>
+ | <A HREF="manual.html#3283">Sample Documents</A>
+ | <A HREF="manual.html#3309">Sample Documents</A>
+<DD><DL COMPACT>
+<DT><STRONG>equation</STRONG>
+<DD><A HREF="manual.html#3311">Sample Documents</A>
+<DT><STRONG>none</STRONG>
+<DD><A HREF="manual.html#2406">Examples</A>
+ | <A HREF="manual.html#2972">Customizing the Glossary</A>
+ | <A HREF="manual.html#3010">Customizing the Glossary</A>
+ | <A HREF="manual.html#3028">Customizing the Glossary</A>
+<DT><STRONG>page</STRONG>
+<DD><A HREF="manual.html#2118">Package Options</A>
+ | <A HREF="manual.html#2442">Examples</A>
+<DT><STRONG>section</STRONG>
+<DD><A HREF="manual.html#3285">Sample Documents</A>
+</DL>
+<DT><STRONG>section</STRONG>
+<DD><A HREF="manual.html#2255">Package Options</A>
+ | <A HREF="manual.html#2257">Package Options</A>
+<DD><DL COMPACT>
+<DT><STRONG>false</STRONG>
+<DD><A HREF="manual.html#2261">Package Options</A>
+<DT><STRONG>true</STRONG>
+<DD><A HREF="manual.html#2259">Package Options</A>
+</DL>
+<DT><STRONG>style</STRONG>
+<DD><A HREF="manual.html#2037">Package Options</A>
+ | <A HREF="manual.html#2039">Package Options</A>
+ | <A HREF="manual.html#2051">Package Options</A>
+ | <A HREF="manual.html#2321">Package Options</A>
+ | <A HREF="manual.html#2330">Package Options</A>
+ | <A HREF="manual.html#2377">Examples</A>
+ | <A HREF="manual.html#2386">Examples</A>
+ | <A HREF="manual.html#2395">Examples</A>
+ | <A HREF="manual.html#2413">Examples</A>
+ | <A HREF="manual.html#2449">Examples</A>
+ | <A HREF="manual.html#2476">Examples</A>
+ | <A HREF="manual.html#2503">Examples</A>
+ | <A HREF="manual.html#2961">Customizing the Glossary</A>
+ | <A HREF="manual.html#3039">Customizing the Glossary</A>
+ | <A HREF="manual.html#3048">Customizing the Glossary</A>
+ | <A HREF="manual.html#3101">Customizing the Glossary</A>
+ | <A HREF="manual.html#3110">Customizing the Glossary</A>
+ | <A HREF="manual.html#3143">Customizing the Glossary</A>
+ | <A HREF="manual.html#3154">Customizing the Glossary</A>
+ | <A HREF="manual.html#3177">Customizing the Glossary</A>
+ | <A HREF="manual.html#3186">Customizing the Glossary</A>
+ | <A HREF="manual.html#3265">Sample Documents</A>
+ | <A HREF="manual.html#3368">Limitations</A>
+ | <A HREF="manual.html#3643">Troubleshooting</A>
+ | <A HREF="manual.html#3652">Troubleshooting</A>
+<DD><DL COMPACT>
+<DT><STRONG>altlist</STRONG>
+<DD><A HREF="manual.html#2044">Package Options</A>
+ | <A HREF="manual.html#2332">Package Options</A>
+ | <A HREF="manual.html#2352">Package Options</A>
+ | <A HREF="manual.html#2388">Examples</A>
+ | <A HREF="manual.html#2963">Customizing the Glossary</A>
+ | <A HREF="manual.html#3050">Customizing the Glossary</A>
+ | <A HREF="manual.html#3112">Customizing the Glossary</A>
+ | <A HREF="manual.html#3156">Customizing the Glossary</A>
+ | <A HREF="manual.html#3267">Sample Documents</A>
+ | <A HREF="manual.html#3339">Sample Documents</A>
+ | <A HREF="manual.html#3370">Limitations</A>
+<DT><STRONG>list</STRONG>
+<DD><A HREF="manual.html#2041">Package Options</A>
+ | <A HREF="manual.html#2053">Package Options</A>
+ | <A HREF="manual.html#2323">Package Options</A>
+ | <A HREF="manual.html#2379">Examples</A>
+ | <A HREF="manual.html#2397">Examples</A>
+ | <A HREF="manual.html#3041">Customizing the Glossary</A>
+ | <A HREF="manual.html#3103">Customizing the Glossary</A>
+ | <A HREF="manual.html#3145">Customizing the Glossary</A>
+<DT><STRONG>long</STRONG>
+<DD><A HREF="manual.html#2058">Package Options</A>
+ | <A HREF="manual.html#2415">Examples</A>
+ | <A HREF="manual.html#2451">Examples</A>
+ | <A HREF="manual.html#2478">Examples</A>
+ | <A HREF="manual.html#2505">Examples</A>
+ | <A HREF="manual.html#3179">Customizing the Glossary</A>
+ | <A HREF="manual.html#3645">Troubleshooting</A>
+<DT><STRONG>super</STRONG>
+<DD><A HREF="manual.html#2055">Package Options</A>
+ | <A HREF="manual.html#3188">Customizing the Glossary</A>
+ | <A HREF="manual.html#3654">Troubleshooting</A>
+</DL>
+<DT><STRONG>toc</STRONG>
+<DD><A HREF="manual.html#2125">Package Options</A>
+ | <A HREF="manual.html#2127">Package Options</A>
+ | <A HREF="manual.html#2147">Package Options</A>
+ | <A HREF="manual.html#2149">Package Options</A>
+ | <A HREF="manual.html#2168">Package Options</A>
+ | <A HREF="manual.html#2170">Package Options</A>
+ | <A HREF="manual.html#2177">Package Options</A>
+ | <A HREF="manual.html#2339">Package Options</A>
+ | <A HREF="manual.html#2341">Package Options</A>
+ | <A HREF="manual.html#2348">Package Options</A>
+ | <A HREF="manual.html#3274">Sample Documents</A>
+ | <A HREF="manual.html#3276">Sample Documents</A>
+ | <A HREF="manual.html#3386">Limitations</A>
+<DD><DL COMPACT>
+<DT><STRONG>false</STRONG>
+<DD><A HREF="manual.html#2131">Package Options</A>
+<DT><STRONG>true</STRONG>
+<DD><A HREF="manual.html#2129">Package Options</A>
+ | <A HREF="manual.html#2179">Package Options</A>
+ | <A HREF="manual.html#2350">Package Options</A>
+ | <A HREF="manual.html#3388">Limitations</A>
+</DL>
+</DL>
+<DT><STRONG>page number formats</STRONG>
+<DD><DL COMPACT>
+<DT><STRONG>hyperbf</STRONG>
+<DD><A HREF="manual.html#1764">Generating Glossary Information</A>
+ | <A HREF="manual.html#3694">Troubleshooting</A>
+<DT><STRONG>hyperem</STRONG>
+<DD><A HREF="manual.html#1794">Generating Glossary Information</A>
+ | <A HREF="manual.html#1810">Generating Glossary Information</A>
+<DT><STRONG>hyperit</STRONG>
+<DD><A HREF="manual.html#1774">Generating Glossary Information</A>
+<DT><STRONG>hypermd</STRONG>
+<DD><A HREF="manual.html#1769">Generating Glossary Information</A>
+<DT><STRONG>hyperrm</STRONG>
+<DD><A HREF="manual.html#1749">Generating Glossary Information</A>
+ | <A HREF="manual.html#1815">Generating Glossary Information</A>
+<DT><STRONG>hypersc</STRONG>
+<DD><A HREF="manual.html#1789">Generating Glossary Information</A>
+<DT><STRONG>hypersf</STRONG>
+<DD><A HREF="manual.html#1754">Generating Glossary Information</A>
+<DT><STRONG>hypersl</STRONG>
+<DD><A HREF="manual.html#1779">Generating Glossary Information</A>
+<DT><STRONG>hypertt</STRONG>
+<DD><A HREF="manual.html#1759">Generating Glossary Information</A>
+<DT><STRONG>hyperup</STRONG>
+<DD><A HREF="manual.html#1784">Generating Glossary Information</A>
+</DL>
+<DT><STRONG><TT>perl</TT></STRONG>
+<DD><A HREF="manual.html#1686">Installation</A>
+<DT><STRONG><TT>&#92;printacronym</TT></STRONG>
+<DD><A HREF="manual.html#2695">Acronyms</A>
+ | <A HREF="manual.html#3527">Troubleshooting</A>
+<DT><STRONG><TT>&#92;printglossary</TT></STRONG>
+<DD><A HREF="manual.html#2551">Defining New Glossary Types</A>
+ | <A HREF="manual.html#2608">Defining New Glossary Types</A>
+ | <A HREF="manual.html#3443">Troubleshooting</A>
+<DT><STRONG><TT>&#92;protect</TT></STRONG>
+<DD><A HREF="manual.html#3581">Troubleshooting</A>
+<DT><STRONG><TT>&#92;saveglosentry</TT></STRONG>
+<DD><A HREF="manual.html#3551">Troubleshooting</A>
+ | <A HREF="manual.html#3816">Obsolete Commands</A>
+<DT><STRONG><TT>&#92;setacronymnamefmt</TT></STRONG>
+<DD><A HREF="manual.html#2781">Acronyms</A>
+<DT><STRONG><TT>&#92;setglossary</TT></STRONG>
+<DD><A HREF="manual.html#3408">Limitations</A>
+ | <A HREF="manual.html#3712">Troubleshooting</A>
+<DT><STRONG><TT>&#92;setglossary</TT> keys</STRONG>
+<DD><DL COMPACT>
+<DT><STRONG>delimN</STRONG>
+<DD><A HREF="manual.html#2994">Customizing the Glossary</A>
+<DT><STRONG>delimR</STRONG>
+<DD><A HREF="manual.html#3012">Customizing the Glossary</A>
+<DT><STRONG>delimT</STRONG>
+<DD><A HREF="manual.html#3063">Customizing the Glossary</A>
+ | <A HREF="manual.html#3072">Customizing the Glossary</A>
+<DT><STRONG>glodelim</STRONG>
+<DD><A HREF="manual.html#2943">Customizing the Glossary</A>
+ | <A HREF="manual.html#2974">Customizing the Glossary</A>
+<DT><STRONG>gloskip</STRONG>
+<DD><A HREF="manual.html#3030">Customizing the Glossary</A>
+ | <A HREF="manual.html#3080">Customizing the Glossary</A>
+<DT><STRONG>glsnumformat</STRONG>
+<DD><A HREF="manual.html#2937">Customizing the Glossary</A>
+ | <A HREF="manual.html#3708">Troubleshooting</A>
+<DT><STRONG>type</STRONG>
+<DD><A HREF="manual.html#2933">Customizing the Glossary</A>
+</DL>
+<DT><STRONG><TT>&#92;storeglosentry</TT></STRONG>
+<DD><A HREF="manual.html#1890">Storing Glossary Information</A>
+ | <A HREF="manual.html#1910">Storing Glossary Information</A>
+ | <A HREF="manual.html#3299">Sample Documents</A>
+ | <A HREF="manual.html#3413">Limitations</A>
+ | <A HREF="manual.html#3493">Troubleshooting</A>
+ | <A HREF="manual.html#3556">Troubleshooting</A>
+ | <A HREF="manual.html#3561">Troubleshooting</A>
+ | <A HREF="manual.html#3588">Troubleshooting</A>
+ | <A HREF="manual.html#3602">Troubleshooting</A>
+<DT><STRONG>table of contents, adding to</STRONG>
+<DD><i>see </i> package options, toc
+<DT><STRONG><TT>&#92;useacronym</TT></STRONG>
+<DD><A HREF="manual.html#2864">Examples</A>
+<DT><STRONG><TT>&#92;useGlosentry</TT></STRONG>
+<DD><A HREF="manual.html#1895">Storing Glossary Information</A>
+ | <A HREF="manual.html#1900">Storing Glossary Information</A>
+ | <A HREF="manual.html#3498">Troubleshooting</A>
+ | <A HREF="manual.html#3503">Troubleshooting</A>
+ | <A HREF="manual.html#3566">Troubleshooting</A>
+ | <A HREF="manual.html#3571">Troubleshooting</A>
+ | <A HREF="manual.html#3607">Troubleshooting</A>
+ | <A HREF="manual.html#3612">Troubleshooting</A>
+<DT><STRONG><TT>&#92;xacronym</TT></STRONG>
+<DD><A HREF="manual.html#2634">Acronyms</A>
+ | <A HREF="manual.html#2643">Acronyms</A>
+ | <A HREF="manual.html#2667">Acronyms</A>
+<DT><STRONG><TT>&#92;xglossary</TT></STRONG>
+<DD><A HREF="manual.html#2210">Package Options</A>
+ | <A HREF="manual.html#2546">Defining New Glossary Types</A>
+ | <A HREF="manual.html#2672">Acronyms</A>
+ | <A HREF="manual.html#3488">Troubleshooting</A>
+ | <A HREF="manual.html#3843">Obsolete Commands</A>
+ | <A HREF="manual.html#3848">Obsolete Commands</A>
+<DT><STRONG><TT>xpdf</TT></STRONG>
+<DD><A HREF="manual.html#3717">Troubleshooting</A>
+<DT><STRONG><TT>&#92;xspace</TT></STRONG>
+<DD><A HREF="manual.html#2833">Acronyms</A>
+ | <A HREF="manual.html#2839">Acronyms</A>
+
+</DL>
+
+<P>
+<BR><HR><H4>Footnotes</H4>
+<DL>
+<DT><A NAME="foot1555">... <code>/usr/bin/</code></A><A
+ HREF="manual.html#tex2html1"><SUP>1</SUP></A></DT>
+<DD>and you can also remove the <TT>.pl</TT>
+extension which isn't to everyone's liking.
+
+</DD>
+<DT><A NAME="foot1559">... glossary</A><A
+ HREF="manual.html#tex2html2"><SUP>2</SUP></A></DT>
+<DD>This is because the list and number ranges are
+delimited using <TT>&#92;delimR</TT> and <TT>&#92;delimN</TT> instead of
+explicitly using a comma or en-dash.
+
+</DD>
+<DT><A NAME="foot1613">... backslash</A><A
+ HREF="manual.html#tex2html4"><SUP>3</SUP></A></DT>
+<DD>Note, you should
+no longer try redefining the command <TT>&#92;glsnumformat</TT>, as
+this now takes an optional argument, allowing for different
+glossary types
+
+</DD>
+<DT><A NAME="foot1614">... space</A><A
+ HREF="manual.html#tex2html5"><SUP>4</SUP></A></DT>
+<DD>This
+is because the <TT>altlist</TT> style is intended for use with long descriptions that will look better ending with a
+ full stop which the user can add if desired.
+
+</DD>
+<DT><A NAME="foot1148">...&#92;glossaryalignment</A><A
+ HREF="manual.html#tex2html6"><SUP>5</SUP></A></DT>
+<DD>This isn't quite true
+anymore, see the documented code for clarification
+
+</DD>
+<DT><A NAME="foot1616">...&#92;glossaryheader</A><A
+ HREF="manual.html#tex2html7"><SUP>6</SUP></A></DT>
+<DD>Note that as from version&nbsp;2.4,
+you must use <TT>&#92;newcommand</TT> <I>not</I> <TT>&#92;renewcommand</TT>
+
+</DD>
+<DT><A NAME="foot1617">... information</A><A
+ HREF="manual.html#tex2html9"><SUP>7</SUP></A></DT>
+<DD>This should be in the directory
+<TT>texmf/doc/latex/graphics/</TT>
+
+</DD>
+</DL>
+<BR><HR>
+<ADDRESS>
+<a href=http://theoval.cmp.uea.ac.uk/~nlct/>Nicola L. C. Talbot</a>. <a href=http://www.cmp.uea.ac.uk/>School of Computing Sciences</a>. <a href=http://www.uea.ac.uk/>University of East Anglia.</a> Last Modified: 2006-07-25
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/obsolete/macros/latex/contrib/gmeometric/README b/obsolete/macros/latex/contrib/gmeometric/README
new file mode 100644
index 0000000000..c395e15381
--- /dev/null
+++ b/obsolete/macros/latex/contrib/gmeometric/README
@@ -0,0 +1,73 @@
+The gmeometric.zip package
+is a work of Grzegorz Murzynowski,
+<natror at o2 dot pl>
+
+
+1. Copyright 2006 by Grzegorz `Natror' Murzynowski
+
+This program is subject to the LaTeX Project Public License.
+See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html
+for the details of that license.
+
+
+2. Introduction
+
+This package loads the `geometry' package by Hideo Umeki
+and lets you to use its main command, \geometry,
+not only in the preamble.
+
+This package requires the `gmutils' package.
+
+
+3. Installation
+
+Just put the gmeometric.sty somewhere in the texmf/tex/latex branch.
+Creating a /texmf/tex/latex/gm directory may be advisable if you
+consider using other packages written by me.
+
+Then you should refresh your TeX distribution's files'
+database most probably.
+
+
+4. Contents
+
+The distribution of this package consists of the following three files.
+
+gmeometric.sty
+README
+gmeometric.pdf
+
+
+5. Documentation
+
+The last of the above files (the .pdf) is a documentation compiled
+from the .sty file by running LaTeX on the gmeometric.sty file twice:
+xelatex gmeometric.sty
+ in the directory you wish the documentation to be in,
+you don't have copy the .sty file there---TeX will find it.,
+then MakeIndex on the gmeometric.glo file, and then LaTeX
+on gmeometricDoc.tex twice again.
+
+MakeIndex shell commands:
+ makeindex -r -s gmglo.ist -o gmeometricDoc.gls gmeometricDoc.glo
+The -r switch is to forbid MakeIndex make implicit ranges since the
+(code line) numbers will be hyperlinks.
+The -s switch makes MakeIndex use the style file instead of the
+default settings and the -o switch declares the not-default name of
+the output file
+
+Compiling of the documentation requires the packages gmdoc.sty (with
+the gmdocc.cls class), gmverb.sty, gmutils.sty, gmiflink.sty and also
+some standard packages: hyperref.sty, color.sty, geometry.sty,
+multicol.sty, lmodern.sty, fontenc.sty that should be installed on
+your computer by default.
+
+The gmglo.ist file, a MakeIndex style for the changes' history, is
+provided on CTAN in the gmdoc .zip archive and should
+be put into some texmf/makeindex directory.
+
+If you have not installed the mwcls classes (available on CTAN and
+present in TeX Lives e.g.), the result of your compilation may differ
+a bit from the .pdf provided in this .zip archive in formattings: If
+you have not installed mwcls, the standard article.cls will be
+used. \ No newline at end of file
diff --git a/obsolete/macros/latex/contrib/gmeometric/gmeometric.pdf b/obsolete/macros/latex/contrib/gmeometric/gmeometric.pdf
new file mode 100644
index 0000000000..ac735fc75c
--- /dev/null
+++ b/obsolete/macros/latex/contrib/gmeometric/gmeometric.pdf
Binary files differ
diff --git a/obsolete/macros/latex/contrib/gmeometric/gmeometric.sty b/obsolete/macros/latex/contrib/gmeometric/gmeometric.sty
new file mode 100644
index 0000000000..e2b7157607
--- /dev/null
+++ b/obsolete/macros/latex/contrib/gmeometric/gmeometric.sty
@@ -0,0 +1,432 @@
+%
+% \GetFileInfo{gmeometric.sty}
+% \title{The \pk{gmeometric} Package\thfileinfo}
+% \author{Grzegorz Murzynowski}
+% \maketitle
+%
+%
+% \begin{copyrnote}
+%
+%% Written by Grzegorz Murzynowski,
+%% natror at o2 dot pl
+%%
+%% \copyright\,2006, 2007, 2008 by Grzegorz Murzynowski.
+%%
+%% This program is subject to the \LaTeX\ Project Public License.
+%% See
+%% \url{http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html}
+%% for the details of that license.
+%%
+%% LPPL status: "author-maintained".\par
+%
+%\end{copyrnote}
+%
+% \CheckSum{61}
+% \chschange{v0.69}{2007/4/26}{40}
+% \chschange{v0.70}{2007/4/29}{36}
+% \chschange{v0.71}{2007/11/16}{41}
+% \chschange{v0.72}{2007/11/17}{239}
+% \chschange{v0.73}{2008/11/22}{237}
+% \toCTAN{v0.73}{2008/11/22}
+%
+%
+% \skiplines we skip the driver
+\ifnum\catcode`\@=12
+\documentclass[codespacesgrey, noindex, pagella, fontspec=quiet]{gmdocc}
+\twocoltoc
+\begin{document}
+\GetFileInfo{\jobname.sty}
+\DocInput{\jobname.sty}
+
+\PrintChanges
+\thispagestyle{empty}
+
+\typeout{%
+ Produce change log with^^J%
+ makeindex -r -s gmglo.ist -o \jobname.gls \jobname.glo^^J
+ (gmglo.ist should be put into some texmf/makeindex directory.)^^J}
+
+\afterfi{\end{document}
+% The package is too small to make index of it.
+%^^A\typeout{%
+%^^A Produce index with^^J%
+%^^A makeindex -r \jobname^^J}
+}
+\fi % of driver pass
+% \endskiplines
+%% \FileInfo
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{gmeometric}
+ [2008/11/22 v0.73 to allow the `geometry' macro in the document (GM)]
+
+%
+%% \division{Introduction, usage}
+%%
+%% This package allows you to use the |\geometry| macro, provided by
+%% the \pk{geometry} v3.2 and v4.1 by Hideo Umeki, anywhere in a~document:
+%% originally it's claused |\@onlypreamble| and the main work of
+%% \pk{gmeometric} is to change that.
+%%
+%% Note it's rather queer to change the page layout \emph{inside}
+%% a~document and it should be considered as drugs or alcohol: it's
+%% O.K.\ only if you \emph{really} know what you're doing.
+%%
+%% In order to work properly, the macro should launch the |\clearpage|
+%% or the \cs{cleardoublepage} to `commit' the changes. So, the
+%% unstarred version trigges the first while the starred the
+%% latter. If that doesn't work quite as expected, try to precede or
+%% succede it with |\onecolumn| or |\twocolumn|.
+%%
+%% It's important that |\clear(double)page| launched by |\geometry|
+%% not to be a~no-op, i.e., |\clear(double)page| immediately
+%% preceding |\geometry| (nothing is printed in between) discards the
+%% `commitment'.
+%%
+%% \stanza
+%% You may use \pk{gmeometric} just like \pk{geometry} i.e., to specify
+%% the layout as the package options: they shall be passed to
+%% \pk{geometry}.
+%%
+%% This package also checks if the engine is \XeTeX\ and sets the
+%% proper driver if so. Probably it's redundant since decent \XeTeX\
+%% packages provide their \pk{geometry.cfg} file that does that.
+%%
+%
+% \begin{gmlonely}
+% \subdivision{Installation}
+%
+% Unpack the \file{gmeometric.tds.zip} archive in a~\file{texmf}
+% directory or put the \pk{gmeometric.sty} somewhere in the
+% \file{texmf/tex/latex} branch on your own. Creating
+% a~\file{texmf/tex/latex/gm} directory may be advisable if
+% you consider using other packages written by me.
+%
+% Then you should refresh your \TeX\ distribution's files' database
+% most probably.
+% \end{gmlonely}
+%
+%
+% \subdivision{Contents of the \pk{gmeometric.zip} archive}
+%
+% The distribution of the \pk{gmeometric} package consists of the
+% following four files.
+% \begin{verse}
+% \pk{gmeometric.sty}\\
+% \pk{README}\\
+% \pk{gmeometric.pdf}\\
+% \pk{gmeometric.tds.zip}
+% \end{verse}
+%
+%
+% \begin{gmlonely}
+% \subdivision{Compiling of the documentation}
+%
+% The last of the above files (the \pk{.pdf}, i.e., \emph{this
+% file}) is a~documentation compiled from the \pk{.sty} file by
+% running \LaTeX\ (twice) on the \pk{gmeometric.sty} file
+% (|xelatex gmeometric.sty| in the directory you wish the
+% documentation to be in, you don't have copy the \file{.sty} file
+% there, \TeX\ will find it).
+% Compiling of the documentation requires the packages: \pk{gmdoc}
+% (\pk{gmdoc.sty} and \pk{gmdocc.cls}), \pk{gmverb.sty},
+% \pk{gmutils.sty}, \pk{gmiflink.sty} and also some standard
+% packages: \pk{hyperref.sty}, \pk{color.sty}, \pk{geometry.sty},
+% \pk{multicol.sty}, \pk{lmodern.sty}, \pk{fontenc.sty} that should
+% be installed on your computer by default.
+%
+% If you have not installed the \pk{mwart.cls} class (available on
+% CTAN in \pk{mwcls} package), the result of your compilation may
+% differ a bit from the \pk{.pdf} provided in this \pk{.zip} archive
+% in formattings: If you have not installed \pk{mwart.cls}, the
+% standard \pk{article.cls} class will be used.
+% \end{gmlonely}
+%
+%
+% \division{Usage} The main use of this package is to allow the
+% |\geometry| command also inside the \env{document} (originally it's
+% |\@onlypreamble|). To make |\geometry| work properly is quite
+% a~different business. It may be advisable to `commit' the layout
+% changes with |\newpage|, |\clearpage|, or |\cleardoublepage| and
+% maybe |\one/twocolumn|.
+%
+% Some layout commands should be put before |\one/twocolumn| and other
+% after it. An example:
+%
+%\begin{verbatim}
+% \thispagestyle{empty}
+%
+% \advance\textheight 3.4cm\relax
+% \onecolumn
+% \newpage
+%
+% \advance\footskip-1.7cm
+% \geometry{hmargin=1.2cm,vmargin=1cm}
+% \clearpage
+%\end{verbatim}
+%
+% And another:
+%\begin{verbatim}
+% \newpage
+% \geometry{bottom=3.6cm}
+%\end{verbatim}
+%
+% In some cases it doesn't work perfectly
+% anyway. Well, the \acro{(LPPL)} license warns about it.
+%
+% \division{The code}
+
+\RequirePackage{gmutils}[2008/11/21]% this package defines the storing and
+% restoring commands.
+
+% Redefine |\@onlypreamble|, add storing to BeginDocument.
+\newcommand*\gme@tobestored{{% this list consists of the \CS'es
+ % relaxed at begin document by \pk{geometry} (the only
+ % \incs{AtBeginDocument} in \pk{geometry} v4.1).
+ % \changes{v0.73}{2008/11/22}{ two \CS'es added to the
+ % list for compatibility with \pk{geometry} v4.1}
+ \Gm@cnth \Gm@cntv \c@Gm@tempcnt \Gm@bindingoffset \Gm@wd@mp
+ \Gm@odd@mp \Gm@even@mp \Gm@orgpw \Gm@orgph \Gm@orgw \Gm@orgh
+ \Gm@dimlist}}
+
+
+\AtBeginDocument{\@xa\StoreMacros\gme@tobestored}
+% \changes[\AtBeginDocument]{v0.73}{2008/11/22}{removed two
+% \cs{expandafter}s expanding \cs{gme@tobestored}: much less tokens
+% added to the begin-document hook}
+
+\StoreMacro\@onlypreamble
+\let\@onlypreamble\@gobble
+
+% To make it work properly in \XeTeX:
+\@ifXeTeX{%
+ \@ifundefined{pdfoutput}{\newcount\pdfoutput}{}%
+ \PassOptionsToPackage{dvipdfm}{geometry}%
+}{}
+
+\RequirePackageWithOptions{geometry}
+
+% Restore |\@onlypreamble|:
+\RestoreMacro\@onlypreamble
+
+% Hypothesis: |\ifx...\@undefined| fails in the document because
+% something made |\csname Gm@lines\endcsname|. So we change the test
+% to decent. And i~think I've found the guilty: |\@ifundefined| in
+% |\Gm@showparams|. So I~change it to the more elegant
+% |\ifx\@undefined|.
+%^^A at first I~rewrote \cs{Gm@process}, let it be, maybe
+%^^A one day I'll rewrite entire \pk{geometry}
+%^^A \def\Gm@process{%
+%^^A \ifGm@pass
+%^^A \Gm@dorg
+%^^A \else
+%^^A \Gm@processdimlist
+%^^A \@ifundefined{Gm@hmarginratio}{%
+%^^A \if@twoside
+%^^A \edef\Gm@hmarginratio{\Gm@Dhratiotwo}%
+%^^A \else
+%^^A \edef\Gm@hmarginratio{\Gm@Dhratio}%
+%^^A \fi
+%^^A }{}%
+%^^A \@ifundefined{Gm@vmarginratio}{%
+%^^A \edef\Gm@vmarginratio{\Gm@Dvratio}%
+%^^A }%
+%^^A \Gm@checkpaper
+%^^A \ifGm@sworient
+%^^A \@tempdima=\paperwidth
+%^^A \paperwidth=\paperheight
+%^^A \paperheight=\@tempdima
+%^^A \Gm@setpaper(\strip@pt\paperwidth,\strip@pt\paperheight){pt}%
+%^^A \Gm@sworientfalse
+%^^A \fi
+%^^A \advance\paperwidth by-\Gm@bindingoffset
+%^^A \ifGm@includemp
+%^^A \Gm@mpfix
+%^^A \fi
+%^^A \ifGm@hbody
+%^^A \@ifundefined{Gm@width}{%
+%^^A \@ifundefined{Gm@hscale}{%
+%^^A \edef\Gm@width{\Gm@Dhscale\paperwidth}%
+%^^A }{%
+%^^A \edef\Gm@width{\Gm@hscale\paperwidth}%
+%^^A }%
+%^^A }%
+%^^A \@ifundefined{Gm@textwidth}{}{%
+%^^A \setlength\@tempdima{\Gm@textwidth}%
+%^^A \ifGm@includemp
+%^^A \advance\@tempdima\Gm@wd@mp
+%^^A \fi
+%^^A \edef\Gm@width{\the\@tempdima}%
+%^^A }%
+%^^A \fi
+%^^A \ifGm@vbody
+%^^A \@ifundefined{Gm@height}{%
+%^^A \@ifundefined{Gm@vscale}{%
+%^^A \edef\Gm@height{\Gm@Dvscale\paperheight}%
+%^^A }{%
+%^^A \edef\Gm@height{\Gm@vscale\paperheight}%
+%^^A }%
+%^^A }{}%
+%^^A \@ifundefined{Gm@lines}{}{%
+%^^A \@tempdima=\baselineskip
+%^^A \multiply\@tempdima\Gm@lines
+%^^A \advance\@tempdima by\topskip
+%^^A \advance\@tempdima by-\baselineskip
+%^^A \edef\Gm@textheight{\the\@tempdima}%
+%^^A }%
+%^^A \@ifundefined{Gm@textheight}{}{%
+%^^A \@tempdima=\Gm@textheight
+%^^A \ifGm@includehead
+%^^A \advance\@tempdima by\headheight
+%^^A \advance\@tempdima by\headsep
+%^^A \fi
+%^^A \ifGm@includefoot
+%^^A \addtolength\@tempdima{\footskip}%
+%^^A \fi
+%^^A \edef\Gm@height{\the\@tempdima}%
+%^^A }%
+%^^A \fi
+%^^A \Gm@detall{h}{width}{lmargin}{rmargin}%
+%^^A \Gm@detall{v}{height}{tmargin}{bmargin}%
+%^^A \setlength\textwidth{\Gm@width}%
+%^^A \setlength\textheight{\Gm@height}%
+%^^A \setlength\topmargin{\Gm@tmargin}%
+%^^A \setlength\oddsidemargin{\Gm@lmargin}%
+%^^A \addtolength\oddsidemargin{-1\Gm@truedimen in}%
+%^^A \ifGm@includemp
+%^^A \advance\textwidth-\Gm@wd@mp
+%^^A \advance\oddsidemargin\Gm@odd@mp
+%^^A \fi
+%^^A \if@mparswitch
+%^^A \setlength\evensidemargin{\Gm@rmargin}%
+%^^A \addtolength\evensidemargin{-1\Gm@truedimen in}%
+%^^A \ifGm@includemp
+%^^A \advance\evensidemargin\Gm@even@mp
+%^^A \fi
+%^^A \ifGm@compatii
+%^^A \@ifundefined{Gm@twosideshift}{%
+%^^A \def\Gm@twosideshift{20\Gm@truedimen pt}%
+%^^A }%
+%^^A \addtolength\oddsidemargin{\Gm@twosideshift}%
+%^^A \addtolength\evensidemargin{-\Gm@twosideshift}%
+%^^A \fi
+%^^A \else
+%^^A \evensidemargin\oddsidemargin
+%^^A \fi
+%^^A \advance\oddsidemargin\Gm@bindingoffset
+%^^A \addtolength\topmargin{-1\Gm@truedimen in}%
+%^^A \ifGm@includehead
+%^^A \addtolength\textheight{-\headheight}%
+%^^A \addtolength\textheight{-\headsep}%
+%^^A \else
+%^^A \addtolength\topmargin{-\headheight}%
+%^^A \addtolength\topmargin{-\headsep}%
+%^^A \fi
+%^^A \ifGm@includefoot
+%^^A \addtolength\textheight{-\footskip}%
+%^^A \fi
+%^^A \ifGm@heightrounded
+%^^A \setlength\@tempdima{\textheight}%
+%^^A \addtolength\@tempdima{-\topskip}%
+%^^A \@tempcnta\@tempdima
+%^^A \@tempcntb\baselineskip
+%^^A \divide\@tempcnta\@tempcntb
+%^^A \setlength\@tempdimb{\baselineskip}%
+%^^A \multiply\@tempdimb\@tempcnta
+%^^A \advance\@tempdima-\@tempdimb
+%^^A \multiply\@tempdima\tw@
+%^^A \ifdim\@tempdima>\baselineskip
+%^^A \addtolength\@tempdimb{\baselineskip}%
+%^^A \fi
+%^^A \addtolength\@tempdimb{\topskip}%
+%^^A \textheight\@tempdimb
+%^^A \fi
+%^^A \addtolength\paperwidth{\Gm@bindingoffset}%
+%^^A \fi}%
+
+\def\Gm@showparams{% \changes{v0.72}{2007/11/17}{a~bug fix:
+ %% \cs{@ifundefined\{Gm@lines\}} raised an error when \cs{geometry}
+ %% used inside the \env{document}, I~change it to
+ %% \cs{ifx}\cs{@undefined}}
+ -------------------- Geometry parameters^^J%
+ \ifGm@pass
+ 'pass' is specified!! (disables the geometry layouter)^^J%
+ \else
+ paper: \ifx\Gm@paper\@undefined class default\else\Gm@paper\fi^^J%
+ \Gm@checkbool{landscape}%
+ twocolumn: \if@twocolumn\Gm@true\else--\fi^^J%
+ twoside: \if@twoside\Gm@true\else--\fi^^J%
+ asymmetric: \if@mparswitch --\else\if@twoside\Gm@true\else --\fi\fi^^J%
+ h-parts: \Gm@lmargin, \Gm@width, \Gm@rmargin%
+ \ifnum\Gm@cnth=\z@\space(default)\fi^^J%
+ v-parts: \Gm@tmargin, \Gm@height, \Gm@bmargin%
+ \ifnum\Gm@cntv=\z@\space(default)\fi^^J%
+ hmarginratio: \ifnum\Gm@cnth<5 \ifnum\Gm@cnth=3--\else%
+ \Gm@hmarginratio\fi\else--\fi^^J%
+ vmarginratio: \ifnum\Gm@cntv<5 \ifnum\Gm@cntv=3--\else%
+ \Gm@vmarginratio\fi\else--\fi^^J%
+ lines: \ifx\Gm@lines\@undefined--\else\Gm@lines\fi^^J% here
+ % I~(natror) fix the bug: it was \inverb|\@ifundefined| that of
+ % course was assigning \inverb|\relax| to \inverb|\Gm@lines| and
+ % that resulted in an error when \inverb|\geometry| was used inside
+ % document.
+ \Gm@checkbool{heightrounded}%
+ bindingoffset: \the\Gm@bindingoffset^^J%
+ truedimen: \ifx\Gm@truedimen\@empty --\else\Gm@true\fi^^J%
+ \Gm@checkbool{includehead}%
+ \Gm@checkbool{includefoot}%
+ \Gm@checkbool{includemp}%
+ driver: \Gm@driver^^J%
+ \fi
+ -------------------- Page layout dimensions and switches^^J%
+ \string\paperwidth\space\space\the\paperwidth^^J%
+ \string\paperheight\space\the\paperheight^^J%
+ \string\textwidth\space\space\the\textwidth^^J%
+ \string\textheight\space\the\textheight^^J%
+ \string\oddsidemargin\space\space\the\oddsidemargin^^J%
+ \string\evensidemargin\space\the\evensidemargin^^J%
+ \string\topmargin\space\space\the\topmargin^^J%
+ \string\headheight\space\the\headheight^^J%
+ \string\headsep\@spaces\the\headsep^^J%
+ \string\footskip\space\space\space\the\footskip^^J%
+ \string\marginparwidth\space\the\marginparwidth^^J%
+ \string\marginparsep\space\space\space\the\marginparsep^^J%
+ \string\columnsep\space\space\the\columnsep^^J%
+ \string\skip\string\footins\space\space\the\skip\footins^^J%
+ \string\hoffset\space\the\hoffset^^J%
+ \string\voffset\space\the\voffset^^J%
+ \string\mag\space\the\mag^^J%
+ \if@twocolumn\string\@twocolumntrue\space\fi%
+ \if@twoside\string\@twosidetrue\space\fi%
+ \if@mparswitch\string\@mparswitchtrue\space\fi%
+ \if@reversemargin\string\@reversemargintrue\space\fi^^J%
+ (1in=72.27pt, 1cm=28.45pt)^^J%
+ -----------------------}
+
+% Add restore to BeginDocument:
+
+\AtBeginDocument{\@xa\RestoreMacros\gme@tobestored}
+
+\endinput
+% \ChangesGeneral
+%
+% \changes{v0.70}{2007/04/29}{Back to the v0.68 settings because
+% \cs{not@onlypreamble} was far too little. Well, in this version the
+% redefinition of \cs{geometry} is given up since the `committing'
+% commands depend on the particular situation so defining only two
+% options doesn't seem advisable}
+%
+% \changes{v0.71}{2007/11/17}{a~\acro{TDS}-compliant \file{zip}
+% archive made}
+%
+% \changes{v0.72}{2008/08/06}{2008/08/06 only the way of documenting changes so
+% I~don't increase the version number}
+%
+%
+% \NoEOF
+
+% (For my GNU Emacs:)
+%%% Local Variables:
+%%% mode: doctex
+%%% TeX-master: "../../../../LaTeX/TeXGuru/gmeometric/gmeometricDoc.tex"
+%%% End:
diff --git a/obsolete/macros/latex/contrib/koma-script-obsolete/README b/obsolete/macros/latex/contrib/koma-script-obsolete/README
new file mode 100644
index 0000000000..d65ed04716
--- /dev/null
+++ b/obsolete/macros/latex/contrib/koma-script-obsolete/README
@@ -0,0 +1,65 @@
+KOMA-Script obsolete
+==============================================================================
+Author: Markus Kohm
+E-Mail: komascript at gmx info
+Abstract: KOMA-Script obsolete contains in the classes and packages,
+ that has been removed from KOMA-Script, because they are
+ obsolete for a long time.
+ You don't need those classes and packages to work with
+ KOMA-Script. You should not use those classes and packages
+ any longer. There are new classes and packages at KOMA-Script
+ that should be uses instead of those obsolete classes and
+ packages. Providers should not provides KOMA-Script
+ obsolete.
+ You need KOMA-Script obsolete only if you have old documents,
+ that may not be transferred into new once using current
+ classes and packages. In this case, you may install
+ KOMA-Script obsolete classes and packages. See ``Installation
+ instructions'' for more information about the installation.
+License: LPPL 1.3c or later
+State: not maintained, NOT SUPPORTED
+==============================================================================
+Package: scrpage
+Version: 2008/02/29 v1.3e
+Source files: scrpage-obsolete.dtx
+Classification: Page layout package
+Successor: scrpage2
+------------------------------------------------------------------------------
+Class: scrlettr
+Authors: Axel Kielhorn and Markus Kohm
+Version: 2002/05/24 v2.6e
+Source files: scrlettr.ins scrlettr.dtx
+Classification: Letter class
+Successor: scrlttr2
+==============================================================================
+Installation instructions:
+ If this is a source distribution without cls- and sty-files
+ you first need to generate the cls- and sty-files you need.
+ To do so, have a look at the ``Source files'' section of the
+ class or package, you need. If there's an ins-file at the
+ source files list, you have to call
+ tex FOO.ins
+ with FOO.ins is the ins-file of the source file list. This
+ will generate one or several new files, that have to be copied
+ into a directory where LaTeX may find them. See the
+ instructions of your TeX distribution to see, how to install
+ single class or package files. Alternatively you may just
+ copy the generated files into the main directory of you
+ document file.
+ You should not need documentation for the obsolete classes and
+ packages, because you should not use them for new documents,
+ but only to process existing old documents without changes.
+ Nevertheless, you may generate the documentation from the
+ source files using
+ pdflatex FOO.dtx
+ several times. FOO.dtx should be the first dtx-file at the
+ source file list of the wanted class or package.
+
+ If this is a TDS distribution, you may simply copy all the
+ files with their directory structure into a TEXMF tree. You
+ may also generate a new TEXMF tree and activate it. After
+ copying you may have to recreate the file name database.
+ MiKTeX users should use the FNDB button of MiKTeX setup to do
+ so. TeX Live users may use texhash or maybe the TeX Live
+ manager, tlmgr.
+==============================================================================
diff --git a/obsolete/macros/latex/contrib/koma-script-obsolete/scrlettr.dtx b/obsolete/macros/latex/contrib/koma-script-obsolete/scrlettr.dtx
new file mode 100644
index 0000000000..39b1f01e00
--- /dev/null
+++ b/obsolete/macros/latex/contrib/koma-script-obsolete/scrlettr.dtx
@@ -0,0 +1,2853 @@
+% \CheckSum{1888}
+% \iffalse meta-comment
+% ======================================================================
+% scrlettr.dtx
+% Copyright (c) Axel Kielhorn and Markus Kohm, 1995-2012
+%
+% This file is part of the LaTeX2e KOMA-Script bundle.
+%
+% This work may be distributed and/or modified under the conditions of
+% the LaTeX Project Public License, version 1.3c of the license.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3c or later is part of all distributions of LaTeX
+% version 2005/12/01 or later and of this work.
+%
+% This work has the LPPL maintenance "not maintained" and is deprecated!
+% It has been replaced by KOMA-Script class scrlttr2.
+%
+% The authors of this work are Axel Kielhorn and Markus Kohm.
+%
+% This work consists of the files `scrlettr.dtx', `scrlettr.ins', and
+% `README'.
+% ----------------------------------------------------------------------
+% scrlettr.dtx
+% Copyright (c) Axel Kielhorn and Markus Kohm, 1995-2012
+%
+% Dieses Werk darf nach den Bedingungen der LaTeX Project Public Lizenz,
+% Version 1.3c, verteilt und/oder veraendert werden.
+% Die neuste Version dieser Lizenz ist
+% http://www.latex-project.org/lppl.txt
+% und Version 1.3c ist Teil aller Verteilungen von LaTeX
+% Version 2005/12/01 oder spaeter und dieses Werks.
+%
+% Dieses Werk hat den LPPL-Verwaltungs-Status "not maintained"
+% (nicht verwaltet), ist veraltet und wurde durch die KOMA-Script-Klasse
+% scrlttr2 ersetzt.
+%
+% Die Autoren dieses Werkes sind Axel Kielhorn und Markus Kohm.
+%
+% Dieses Werk besteht aus den Dateien `scrlettr.dtx', `scrlettr.ins' und
+% `README'.
+% ======================================================================
+% \fi
+%
+% \CharacterTable
+% {Upper-case \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
+% Lower-case \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
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+% \iffalse
+%%% From: scrlettr.dtx
+%<*dtx>
+ \ProvidesFile{scrlettr.dtx}
+%</dtx>
+%<scrlettr>\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+%<driver>\ProvidesFile{scrlettr.drv}
+%<scrlettr>\ProvidesClass{scrlettr}
+%<*scrlettr|dtx|driver>
+ [2002/05/24 v2.6e
+%<scrlettr> OBSOLETE
+ LaTeX2e KOMA
+%</scrlettr|dtx|driver>
+%<scrlettr> document class]
+%
+%<*driver|dtx>
+ Script bundle]
+%</driver|dtx>
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage[a4paper,BCOR15mm,DIV12]{typearea}
+\usepackage{german}
+\DoNotIndex{\.,\@@par,\@M,\@abstrtfalse,\@abstrttrue,\@addtoreset}
+\DoNotIndex{\@afieldfalse,\@afieldtrue,\@afterheading}
+\DoNotIndex{\@afterindentfalse,\@arabic,\@badmath,\@beginparpenalty}
+\DoNotIndex{\@biglocfalse,\@bigloctrue,\@bsphack}
+\DoNotIndex{\@car,\@cdr,\@centercr,\@cite,\@dblfloat,\@dotsep}
+\DoNotIndex{\@dottedtocline,\@empty,\@endparpenalty,\@endpart,\@esphack}
+\DoNotIndex{\@finclfalse,\@fincltrue,\@float,\@fontswitch,\@foldfalse}
+\DoNotIndex{\@foldtrue,\@fslfalse,\@fsltrue,\@gobbletwo}
+\DoNotIndex{\@hangfrom,\@highpenalty,\@hinclfalse,\@hincltrue,\@hslfalse}
+\DoNotIndex{\@hsltrue,\@idxitem,\@ifnextchar,\@ifundefined,\@ifstar}
+\DoNotIndex{\@itempenalty}
+\DoNotIndex{\@latex@warning,\@m,\@mainmatterfalse,\@mainmattertrue}
+\DoNotIndex{\@medpenalty,\@minus,\@mkboth,\@mparswitchfalse,\@mparswitchtrue}
+\DoNotIndex{\@ne,\@nil,\@nobreakcr,\@nobreakfalse,\@nobreaktrue}
+\DoNotIndex{\@nobreakvspace,\@nobreakvspacex,\@noitemerr,\@nomath,\@normalcr}
+\DoNotIndex{\@openbibfalse,\@openbibtrue,\@openrightfalse,\@openrighttrue}
+\DoNotIndex{\@plus,\@processto,\@reffalse,\@reftrue,\@restonecolfalse}
+\DoNotIndex{\@restonecoltrue}
+\DoNotIndex{\@subjfalse,\@subjtrue}
+\DoNotIndex{\@tempa,\@tempboxa,\@tempdima,\@tempswafalse,\@tempswatrue}
+\DoNotIndex{\@titlepagefalse,\@titlepagetrue,\@tocrmarg,\@topnewpage}
+\DoNotIndex{\@topnum,\@twocolumnfalse,\@twocolumntrue,\@twosidefalse}
+\DoNotIndex{\@twosidetrue}
+\DoNotIndex{\@whiledim,\@whilenum,\@xnewline,\@xproc,\\,\ }
+\DoNotIndex{\addcontentsline,\addpenalty,\addtocontents,\addtolength}
+\DoNotIndex{\addvspace,\advance,\Alph,\alph,\arabic,\Ask,\AtBeginDocument}
+\DoNotIndex{\begin,\begingroup,\bfseries,\bgroup,\box,\bullet}
+\DoNotIndex{\c@figure,\c@page,\c@secnumdepth,\c@table,\c@tocdepth}
+\DoNotIndex{\cal,\cdot,\centering,\changes,\ClassWarningNoLine}
+\DoNotIndex{\cleardoublepage,\clearpage}
+\DoNotIndex{\cmd,\col@number,\CurrentOption,\CodelineIndex,\csname}
+\DoNotIndex{\day,\dblfloatpagefraction,\dbltopfraction,\Decisionfalse}
+\DoNotIndex{\Decisiontrue,\DeclareOldFontCommand}
+\DoNotIndex{\DeclareOption,\def,\defpar,\DisableCrossrefs}
+\DoNotIndex{\divide,\documentclass,\DoNotIndex,\dotfill}
+\DoNotIndex{\iden,\ifdim,\else,\fi,\egroup,\empty,\em,\EnableCrossrefs,\end}
+\DoNotIndex{\end@dblfloat,\endcsname,\endletter}
+\DoNotIndex{\end@float,\endgroup,\endlist,\endquotation,\endtitlepage}
+\DoNotIndex{\everypar,\ExecuteOptions,\expandafter}
+\DoNotIndex{\fboxrule,\fboxsep,\fontsize,\frenchspacing}
+\DoNotIndex{\gdef,\global}
+\DoNotIndex{\hangindent,\hbox,\hfil,\hfill,\hrule,\hsize,\hskip,\hspace,\hss}
+\DoNotIndex{\if@tempswa,\ifcase,\or,\fi,\fi}
+\DoNotIndex{\ifnum,\ifodd,\ifvmode,\ifx,\fi,\fi,\fi,\fi}
+\DoNotIndex{\ignorespaces,\input,\InputIfFileExists,\item,\itshape,\j,\ja}
+\DoNotIndex{\kern,\LARGE,\Large,\leavevmode,\leftmark,\leftskip,\let}
+\DoNotIndex{\lineskip,\list,\long}
+\DoNotIndex{\m@ne,\m@th,\marginpar,\marginparpush,\markboth,\markright}
+\DoNotIndex{\mathbf,\mathcal}
+\DoNotIndex{\mathit,\mathnormal,\mathrm,\mathsf,\mathtt,\MessageBreak,\month}
+\DoNotIndex{\newblock,\newcommand,\newcount,\newcounter,\newdimen}
+\DoNotIndex{\newenvironment,\newlength,\newpage,\nobreak,\noindent}
+\DoNotIndex{\normalfont,\normallineskip,\normalsize,\null,\number}
+\DoNotIndex{\numberline}
+\DoNotIndex{\OldMakeindex,\OnlyDescription,\overfullrule}
+\DoNotIndex{\p@,\PackageError,\PackageInfo,\PackageWarningNoLine}
+\DoNotIndex{\pagenumbering,\pagestyle,\par,\paragraph,\parbox}
+\DoNotIndex{\PassOptionsToPackage,\pcal,\penalty,\pmit,\PrintChanges}
+\DoNotIndex{\PrintIndex,\ProcessOptions,\protect,\providecommand}
+\DoNotIndex{\ProvidesClass}
+\DoNotIndex{\raggedbottom,\raggedleft,\raggedright,\refstepcounter,\relax}
+\DoNotIndex{\renewcommand,\RequirePackage,\reset@font,\reversemarginpar}
+\DoNotIndex{\rightmargin,\rightmark,\rightskip,\rmfamily,\Roman,\roman,\rule}
+\DoNotIndex{\sc@septext,\sc@temp,\sc@@temp,\scshape,\secdef,\setbox}
+\DoNotIndex{\setcounter,\setlength}
+\DoNotIndex{\settowidth,\sfcode,\sffamily,\skip,\sloppy,\slshape,\space}
+\DoNotIndex{\string,\strip,\strut,\subjectoff,\subjecton}
+\DoNotIndex{\ta@temp,\the,\thispagestyle,\triangleright,\ttfamily,\twocolumn}
+\DoNotIndex{\typein,\typeout}
+\DoNotIndex{\undefined,\underline,\unhbox,\usecounter,\usepackage}
+\DoNotIndex{\vadjust,\vfil,\vfill,\vspace}
+\DoNotIndex{\wd,\xdef,\y,\year,\yes,\z@}
+\CodelineIndex
+% Kopiert aus scrguide2.tex
+\newcommand{\ExampleName}{Beispiel}
+\newcommand{\ClassName}{Klasse}
+\newcommand{\PackageName}{Paket}
+\newcommand{\EnvironmentName}{Umgebung}
+\newcommand{\OptionName}{Option}
+\newcommand{\MacroName}{Befehl}
+\newcommand{\CounterName}{Z\"ahler}
+\newcommand{\CounterSortName}{Zaehler}
+\newcommand{\LengthName}{L\"ange}
+\newcommand{\LengthSortName}{Laenge}
+\newcommand{\PagestyleName}{Seitenstil}
+\newcommand{\StyleName}{Stil}
+\newcommand{\FileName}{Datei}
+\newcommand{\TitleText}{Das\ \KOMAScript\ Paket}
+\newcommand{\ManualName}{Anleitung}
+\newcommand{\ManualFromText}{Autoren der Anleitung:}
+\newcommand{\NoteName}{Notizen}
+\DeclareRobustCommand*{\Class}[1]{\textsf{#1}}
+\DeclareRobustCommand*{\Package}[1]{\textsf{#1}}
+\DeclareRobustCommand*{\File}[1]{\texttt{#1}}
+\DeclareRobustCommand{\Script}{\textsc{Script}}
+\DeclareRobustCommand{\ScriptII}{\textsc{Script-2}}
+\ifx\KOMAScript\undefined%
+ \DeclareRobustCommand{\KOMAScript}{\textsf{K\kern.05em O\kern.05em%
+ M\kern.05em A\kern.1em-\kern.1em Script}}
+\fi
+\makeatletter
+\DeclareRobustCommand{\BibTeX}{B\kern-.05em%
+ \hbox{$\m@th$%
+ \csname S@\f@size\endcsname \fontsize\sf@size\z@
+ \math@fontsfalse\selectfont
+ I\kern-.025emB}%
+ \kern-.08em%
+ \-\TeX%
+}
+\makeatother
+\newcommand*{\Var}[1]{\ensuremath{\mathit{#1}}}
+\newcommand*{\Const}[1]{\ensuremath{\mathrm{#1}}}
+\newcommand*{\Unit}[1]{\ensuremath{\,\mathrm{#1}}}
+\DeclareRobustCommand*{\Macro}[1]{\mbox{\texttt{\char`\\#1}}}
+\DeclareRobustCommand*{\Option}[1]{\mbox{\texttt{#1}}}
+\DeclareRobustCommand*{\Environment}[1]{\mbox{\texttt{#1}}}
+\DeclareRobustCommand*{\Counter}[1]{\mbox{\texttt{#1}}}
+\DeclareRobustCommand*{\Length}[1]{\mbox{\texttt{\char`\\#1}}}
+\DeclareRobustCommand*{\EMail}[1]{\textless #1\textgreater}
+\DeclareRobustCommand*{\TextEMail}[1]{{\small\EMail{#1}}}
+\newenvironment{Example}{%
+ \begin{labeling}{{\sectfont\ExampleName:\ }}
+ \item[{\sectfont\ExampleName:\ }]}
+ {\end{labeling}}
+\newenvironment{Explain}{%
+ \small\sffamily
+}{\normalcolor\par}
+\newcommand*{\sectfont}{\normalfont\normalcolor\bfseries}
+\newenvironment{labeling}[2][]
+ {\def\sc@septext{#1}
+ \list{}{\settowidth{\labelwidth}{#2#1}
+ \leftmargin\labelwidth \advance\leftmargin by \labelsep
+ \let\makelabel\labelinglabel}}
+ {\endlist}
+\newcommand\labelinglabel[1]{#1\hfil\sc@septext}
+\newenvironment{Declaration}%
+ {\par\small\addvspace{2\baselineskip plus .5\baselineskip}%
+ \vspace{-\baselineskip}%
+ \noindent\hspace{-1em}%
+ \begin{tabular}{|l|}\hline\ignorespaces}%
+ {\\\hline\end{tabular}\nobreak\par\nobreak
+ \vspace{1.5\baselineskip}\vspace{-\baselineskip}%
+ \noindent\ignorespacesafterend}
+\newcommand{\PName}[1]{\mbox{\textit{#1}}}% Parametername
+\newcommand{\PValue}[1]{\texttt{#1}}% Parametername
+\newcommand{\Parameter}[1]{% Parameter/Argument
+ \texttt{\{}\PName{#1}\texttt{\}}}
+\newcommand{\OParameter}[1]{\texttt{[%] Parameter/Argument optional
+ }\PName{#1}\texttt{%[
+ ]}}
+\newcommand{\AParameter}[1]{\texttt{(%) Parameter/Argument alternative
+ }\PName{#1}\texttt{%(
+ )}}
+\newcommand{\PParameter}[1]{\texttt{\{% Parameter/Argument as/als
+ #1% part of commands / Befehlsbestandteil
+ \}}}
+\newcommand*{\Index}[2][indexrm]{\index{#2|#1}}
+\newcommand*{\BeginIndex}[3][indexit]{\csname Index#2\endcsname[(%)
+ #1]{#3}%
+ \ignorespaces}
+\newcommand*{\EndIndex}[3][indexit]{\csname Index#2\endcsname[%(
+ )#1]{#3}}
+\newcommand*{\IndexCmd}[2][indexrm]{%
+ \Index[#1]{#2=\Macro{#2}}}
+\newcommand*{\IndexEnv}[2][indexrm]{%
+ \Index[#1]{\EnvironmentName>#2=\Environment{#2}}%
+ \Index[#1]{#2=\Environment{#2} (\EnvironmentName)}}
+\newcommand*{\IndexOption}[2][indexrm]{%
+ \Index[#1]{\OptionName>#2=\Option{#2}}%
+ \Index[#1]{#2=\Option{#2} (\OptionName)}}
+\newcommand*{\IndexPackage}[2][indexrm]{%
+ \Index[#1]{\PackageName>#2=\Package{#2}}%
+ \Index[#1]{#2=\Package{#2} (\PackageName)}}
+\newcommand*{\IndexClass}[2][indexrm]{%
+ \Index[#1]{\ClassName>#2=\Class{#2}}%
+ \Index[#1]{#2=\Class{#2} (\ClassName)}}
+\newcommand*{\IndexFile}[2][indexrm]{%
+ \Index[#1]{\FileName>#2=\File{#2}}%
+ \Index[#1]{#2=\File{#2} (\FileName)}}
+\newcommand*{\IndexCounter}[2][indexrm]{%
+ \Index[#1]{\CounterSortName=\CounterName>#2=\Counter{#2}}%
+ \Index[#1]{#2=\Counter{#2} (\CounterName)}}
+\newcommand*{\IndexLength}[2][indexrm]{%
+ \Index[#1]{\LengthSortName=\LengthName>#2=\Length{#2}}%
+ \Index[#1]{#2=\Length{#2} (\LengthName)}}
+\newcommand*{\IndexPagestyle}[2][indexrm]{%
+ \Index[#1]{\PagestyleName>#2=\PValue{#2}}%
+ \Index[#1]{#2=\PValue{#2} (\PagestyleName)}}
+\newcommand*{\IndexFloatstyle}[2][indexrm]{%
+ \Index[#1]{float-\StyleName=\emph{float}-\StyleName>#2=\PValue{#2}}%
+ \Index[#1]{#2=\PValue{#2} (\emph{float}-\StyleName)}}
+\newcommand*{\indexrm}[1]{\textrm{\hyperpage{#1}}}
+\newcommand*{\indexit}[1]{\textit{\hyperpage{#1}}}
+\newcommand*{\indexbf}[1]{\textbf{\hyperpage{#1}}}
+\newcommand*{\indexsl}[1]{\textsl{\hyperpage{#1}}}
+\newcommand*{\indexsf}[1]{\textsf{\hyperpage{#1}}}
+\newcommand*{\indexsc}[1]{\textsc{\hyperpage{#1}}}
+\providecommand*{\hyperpage}[1]{#1}
+%
+\begin{document}
+ \DocInput{scrlettr.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \GetFileInfo{scrlettr.dtx}
+% \RecordChanges
+%
+% \makeatletter
+% \def\macro{\begingroup
+% \catcode`\\12
+% \MakePrivateLetters \m@cro@ 0}
+% \def\environment{\begingroup
+% \catcode`\\12
+% \MakePrivateLetters \m@cro@ 1}
+% \def\option{\begingroup
+% \catcode`\\12
+% \MakePrivateLetters \m@cro@ 2}
+% \long\def\m@cro@#1#2{\endgroup \topsep\MacroTopsep \trivlist
+% \edef\saved@macroname{\string#2}%
+% \ifcase #1%
+% \edef\saved@@macroname{\expandafter\@gobble\saved@macroname}
+% \or
+% \edef\saved@@macroname{\expandafter\@gobble\saved@macroname}
+% \else
+% \let\saved@@macroname\saved@macroname
+% \fi
+% \def\makelabel##1{\llap{##1}}%
+% \if@inlabel
+% \let\@tempa\@empty \count@\macro@cnt
+% \loop \ifnum\count@>\z@
+% \edef\@tempa{\@tempa\hbox{\strut}}\advance\count@\m@ne \repeat
+% \edef\makelabel##1{\llap{\vtop to\baselineskip
+% {\@tempa\hbox{##1}\vss}}}%
+% \advance \macro@cnt \@ne
+% \else \macro@cnt\@ne \fi
+% \edef\@tempa{\noexpand\item[%
+% \ifcase #1%
+% \noexpand\PrintMacroName
+% \or
+% \noexpand\PrintEnvName
+% \else
+% \noexpand\PrintOptionName
+% \fi
+% {\string#2}]}%
+% \@tempa
+% {\advance\c@CodelineNo\@ne
+% \ifcase #1%
+% \SpecialMainIndex{#2}\nobreak
+% \DoNotIndex{#2}%
+% \or
+% \SpecialMainEnvIndex{#2}\nobreak
+% \else
+% \SpecialMainOptionIndex{#2}\nobreak
+% \fi
+% }%
+% \ignorespaces}
+% \let\endoption\endtrivlist
+% \@ifundefined{PrintOptionName}
+% {\def\PrintOptionName#1{\strut \MacroFont #1\ }}{}
+% \def\SpecialMainOptionIndex#1{\@bsphack
+% \special@index{#1\actualchar{\string\ttfamily\space#1}
+% (option)\encapchar main}%
+% \special@index{options:\levelchar{\string\ttfamily\space#1}\encapchar
+% main}\@esphack}
+% \def\changes@#1#2#3{%
+% \protected@edef\@tempa{\noexpand\glossary{#1\levelchar
+% \ifx\saved@macroname\@empty
+% \space
+% \actualchar
+% \generalname
+% \else
+% \saved@@macroname
+% \actualchar
+% \string\verb\quotechar*\verbatimchar%
+% \saved@macroname
+% \verbatimchar
+% \fi
+% :\levelchar #3}}%
+% \@tempa\endgroup\@esphack}
+% \makeatother
+%
+% \title{Die ehemalige Brief-Klasse aus der
+% \textsf{KOMA-Script}-Sammlung\thanks{Diese Datei
+% hat die Versionsnummer \fileversion, letzte "Anderung vom
+% \filedate.}}
+% \author{Frank Neukam\and Markus Kohm}
+% \date{\filedate}
+% \maketitle
+%
+% \tableofcontents
+%
+% \changes{v2.0e}{1994/10/28}{Erste Version, die \texttt{docstrip} verwendet.}
+% \changes{v2.3b}{1996/01/14}{Diverse \cs{newcommand} mit und ohne
+% Parameter durch \cs{newcommand*} ersetzt.}
+% \changes{v2.3b}{1996/01/14}{Diverse \cs{renewcommand} mit und ohne
+% Parameter durch \cs{renewcommand*}
+% ersetzt.}
+% \changes{v2.6e}{2002/05/24}{\texttt{scraddr} ist in einer eigenen
+% \texttt{dtx}-Datei zu finden.}
+% \changes{v2.6e}{2002/05/24}{\texttt{dir.tex}, \texttt{phone.tex},
+% \texttt{addrconv.bst}, \texttt{birthday.bst}, \texttt{email.bst},
+% \texttt{addrconv.tex}, \texttt{birthday.tex}, \texttt{email.tex}
+% sind obsolet und gel\"oscht, stattdessen sollte das
+% \texttt{adrconv}-Paket von Axel Kielhorn verwendet werden.}
+%
+% \part{Anleitung}
+%
+% \section{Generelles}
+%
+% \subsection{Rechtliches}
+% Es wird keinerlei Haftung "ubernommen f"ur irgendwelche Sch"aden,
+% die aus der Benutzung der Programme und Dateien des hier
+% beschriebenen Paketes folgen.
+%
+% \subsection{Das \textsf{KOMA-Script} Paket}
+%
+% Das gesamte \textsf{KOMA-Script} Paket besteht aus mehreren Teilen.
+% Der Teil |scrclass.dtx| beinhaltet die Haupt-classes |scrartcl.cls|,
+% |scrreprt.cls| und |scrbook.cls| und |scrlttr2.cls| sowie das von
+% diesen ben"otigte package |typearea.sty|.
+%
+% Die urspr"unglich in |komascr.dtx| enthaltene Brief-Klasse
+% |scrlettr.cls| liegt nun hier als |scrlettr.dtx| separat vor. Eine
+% Anleitung zu dieser Klasse existiert jedoch nur noch
+% eingeschr"ankt. Da die Klasse nicht mehr unterst"utzt wird. Sie ist
+% nun also \emph{unsupported}.
+%
+% Die alte Anleitung wurde jedoch in diese Datei integriert.
+% \changes{v2.6c}{2001/10/09}{Die Klasse ist obsolet}
+% \changes{v2.6c}{2001/10/09}{Die Anleitung ist integriert}
+%
+% \DeleteShortVerb{\|}
+%
+% \section{"Uberblick}
+%
+% Die Dokumentenklasse \Class{scrlettr} ist eine erweiterte und an
+% europ"aische Verh"altnisse angepasste Version der originalen
+% \LaTeX{}-Briefklasse \Class{letter}. Urspr"unglich wurde sie von
+% Axel Kielhorn entwickelt, erfuhr aber durch Markus Kohm einige
+% Ver"anderungen.
+%
+% Hervorzuhebende Eigenschaften von \Class{scrlettr} gegen"uber
+% \Class{letter} sind die Anpassung an das A4 Papierformat, die
+% erweiterte Sprachunterst"utzung und ein umfangreicherer
+% Befehlssatz, mit dem auch komplexere W"unsche umsetzbar sind.
+%
+% Bevor alle Befehle der Klasse \Class{scrlettr} vorgestellt werden,
+% soll mit Hilfe eines Minimalbeispiels ein erster "Uberblick "uber
+% Aufbau und Funktion eines Briefes gegeben werden.
+%
+% \begin{Example}
+% Ein mit nur den n"otigsten Befehlen erstellter
+% \Class{scrlettr}-Brief sieht beispielsweise so aus.
+% \begin{small}\begin{verbatim}
+% \documentclass[10pt]{scrlettr}
+% \usepackage{ngerman}
+% \name{\KOMAScript{}-Gruppe}
+% \address{Klassengasse 1\\12345 \LaTeX{}hausen}
+% \signature{Euer \KOMAScript{}-Team}
+% \begin{document}
+% \begin{letter}{Die \KOMAScript{}-Nutzer\\
+% Irgendwo\\weltweit}
+%
+% \opening{Liebe \KOMAScript{}-Nutzer,}
+% das \KOMAScript{}-Team m"ochte Euch mit ein paar
+% Informationen ...
+%
+% \closing{Viel Spa"s}
+% \end{letter}
+% \end{document}
+% \end{verbatim}\end{small}
+% Wie zu sehen ist, werden Informationen, die unabh"angig vom
+% einzelnen Brief sind, getrennt definiert, wie beispielsweise der
+% Absender mittels \Macro{name}. Die einzelnen briefspezifische
+% Daten werden innerhalb der \Environment{letter}-Umgebung
+% angegeben. Nat"urlich k"onnen durch mehrmaliges Nutzen der
+% \Environment{letter}-Umgebung mehrere Briefe in einem Dokument
+% erzeugt werden.
+%
+% \begin{Explain}
+% Hierbei ist jedoch zu beachten, dass \TeX\ Z"ahler grunds"atzlich
+% \emph{global} verwaltet. Es ist also notwendig, alle Z"ahler vor
+% einer neuen \Environment{letter}-Umgebung zur"uckzusetzen. Einzige
+% Ausnahme ist der Seitenz"ahler. Dieser wird bei jedem Aufruf von
+% \Macro{begin}\PParameter{letter} wieder auf 1 zur"uckgesetzt.
+% \end{Explain}
+% \end{Example}
+%
+% \section{Brief"ubergreifende Befehle}
+% \begin{Declaration}
+% \Macro{name}\Parameter{Absendername}\\
+% \Macro{address}\Parameter{Adresse des Absenders}\\
+% \Macro{signature}\Parameter{Unterschrift}
+% \end{Declaration}\ignorespaces
+% \BeginIndex{Cmd}{name}\BeginIndex{Cmd}{address}\ignorespaces
+% \BeginIndex{Cmd}{signature}\ignorespaces
+% Der Befehl \Macro{name} nimmt den Namen des
+% Absenders\Index[indexit]{Absender} auf und gibt diesen im
+% voreingestellten Seitenstil f"ur die erste und die folgenden Seiten
+% aus. Weiterhin wird dieser Text als
+% Unterschrift\Index[indexit]{Unterschrift} gesetzt, wenn
+% \Macro{signature} nicht angegeben wurde, da dieser Befehl optional
+% ist, und somit nicht immer angegeben werden muss. Die
+% Absenderadresse wird mit dem \Macro{address}-Befehl gesetzt.
+% \EndIndex{Cmd}{name}\EndIndex{Cmd}{address}\EndIndex{Cmd}{signature}
+%
+% \begin{Declaration}
+% \Macro{backaddress}\Parameter{Absender}\\
+% \Macro{specialmail}\Parameter{Versandart}\\
+% \Macro{addrfieldon}\\
+% \Macro{addrfieldoff}
+% \end{Declaration}\ignorespaces
+% \BeginIndex{Cmd}{backaddress}\BeginIndex{Cmd}{specialmail}\ignorespaces
+% \BeginIndex{Cmd}{addrfieldon}\BeginIndex{Cmd}{addrfieldoff}\ignorespaces
+% Der Befehl \Macro{backaddress} erzeugt "uber dem
+% Adressfeld\Index{Adressfeld} des Empf"angers einen einzeiligen
+% Eintrag, der auch in Briefumschl"agen mit Sichtfenster zu sehen
+% ist. Es bietet sich somit als Angabe des Absenders an.
+% Versandhinweise\Index[indexit]{Versandart}, wie beispielsweise
+% \emph{Einschreiben} k"onnen mit \Macro{specialmail} gesetzt werden.
+%
+% Mit dem Befehl \Macro{addrfieldoff} werden weder das Adressfeld
+% noch das \Option{locfield} gesetzt. Alle Angaben "uber Empf"anger-
+% und R"uckadresse, die Versandart und die Erg"anzungen aus
+% \Macro{location} werden ignoriert und \emph{nicht} gesetzt. Da
+% \Macro{addrfieldon} und \Macro{addrfieldoff} als Befehle
+% implementiert sind, ist es m"oglich, sie f"ur verschiedene Briefe
+% eines Dokuments je nach Bedarf anzuwenden. Voreingestellt ist
+% \Macro{addrfieldon}.
+% \EndIndex{Cmd}{backaddress}\EndIndex{Cmd}{specialmail}
+% \EndIndex{Cmd}{addrfieldon}\EndIndex{Cmd}{addrfieldoff}
+%
+% \begin{Declaration}
+% \Macro{location}\Parameter{zus"atzliche Adresstext}\\
+% \Macro{place}\Parameter{Ort}\\
+% \Macro{date}\Parameter{Datum}
+% \end{Declaration}\ignorespaces
+% \BeginIndex{Cmd}{location}\BeginIndex{Cmd}{place}\ignorespaces
+% \BeginIndex{Cmd}{date}\ignorespaces
+% Der Befehl \Macro{location} schreibt sein Argument in ein Textfeld
+% rechts neben dem Adressfeld. Es kann beispielsweise Daten einer
+% Abteilung oder die Zweigstelle eine Firma aufnehmen. Mit dem
+% Befehl \Macro{place} wird der Ort des Absenders eingestellt. Der
+% Befehl \Macro{date} ist nur wichtig, wenn der Brief l"anger in
+% Quellform gespeichert werden soll und man nicht m"ochte, dass die
+% Datumsinformation\Index[indexit]{Datum} des Originalbriefes
+% verloren geht. In normalen Anwendungsf"allen wird das Datum aus dem
+% Systemdatum beim LaTeX{}-Lauf ermittelt.
+%
+% \begin{Example}
+% Sie m"ochten einen monatlichen Rundbrief an die Mitglieder eines
+% Vereins versenden. Hierbei spielt das genaue Datum keine gro"se
+% Rolle. Ein Vermerk in der Form \glqq Vereinssitz im M"arz
+% 2001\grqq\ erreichen Sie durch folgende Definitionen.
+% \begin{small}\begin{verbatim}
+% \place{Vereinssitz}
+% \date{im M"arz 2001}
+% \end{verbatim}\end{small}
+% \end{Example}
+% \EndIndex{Cmd}{location}\EndIndex{Cmd}{place}\EndIndex{Cmd}{date}
+%
+% \begin{Declaration}
+% \Option{wlocfield}\\
+% \Option{slocfield}
+% \end{Declaration}
+% \BeginIndex{Option}{wlocfield}\BeginIndex{Option}{slocfield}
+% Die Breite des Textfeldes mit dem \Macro{location}-Eintrag ist
+% standardm"a"sig die H"alfte des freien Raums neben dem Adressfeld.
+% Dies entspricht der Einstellung der Option \Option{slocfield}. Mit
+% der Klassenoptionen \Option{wlocfield} stehen dem Textfeld zwei
+% Drittel der freien Textbreite neben dem Adressfeld zur Verf"ugung.
+% \EndIndex{Option}{wlocfield}\EndIndex{Option}{slocfield}
+%
+% \section{Briefspezifische Befehle}
+%
+% \begin{Declaration}
+% \Environment{letter}\\
+% \Macro{title}\Parameter{"Uberschrift}\\
+% \Macro{subject}\Parameter{Kurzinhalt oder Betreff}\\
+% \Macro{subjecton}\\
+% \Macro{subjectoff}\\
+% \Macro{opening}\Parameter{Anrede}
+% \end{Declaration}
+% \BeginIndex{Env}{letter}\BeginIndex{Cmd}{title}
+% \BeginIndex{Cmd}{subject}\BeginIndex{Cmd}{subjecton}
+% \BeginIndex{Cmd}{subjectoff}
+% \BeginIndex{Cmd}{opening}
+% Das zentrale Element ist die \Environment{letter}-Umgebung. Ihr
+% obligatorisches Argument nimmt die Anschrift des
+% Empf"angers\Index[indexit]{Empfaenger=Empf"anger} des Briefes auf.
+% Notwendige Zeilenumbr"uche m"ussen selbst"andig eingef"ugt werden.
+% Dabei muss beachtet werden, dass das Textfeld nur eine bestimmte
+% Breite zul"asst, und dann die Zeile automatische umbrochen wird.
+%
+% \begin{Example}
+% Sie m"ochten einen Brief an die Deutsche Anwendervereinigung \TeX\
+% e.\,V. schreiben. Dieser Brief m"u"ste durch folgende Zeilen
+% eingeleitet werden:
+% \begin{small}\begin{verbatim}
+% \begin{letter}{DANTE, Deutschsprachige
+% Anwendervereingung TeX e.\,V.\\
+% Postfach 101840\\
+% 69008 Heidelberg}
+% \end{verbatim}\end{small}
+% \end{Example}
+%
+% Gew"ohnlich m"ochte man dem Empf"anger eines Briefes schnell das
+% Anliegen des Briefes mitteilen. Dazu gibt es zwei M"oglichkeiten.
+% Mit dem \Macro{title} kann einem Brief eine
+% "Uberschrift\Index[indexit]{Briefueberschrift=Brief"uberschrift}
+% vorangestellt werden. Dies erzeugt eine zentrierte in
+% \Macro{LARGE} gesetzte "Uberschrift. F"ur gew"ohnlich soll der
+% Hinweis auf den Inhalt des Briefes nicht so gro"sspurig ausfallen.
+% Vielmehr wird eine schlichte Betreffzeile\Index[indexit]{Betreff}
+% mit einer kurzen Zusammenfassung des Schreibens erwartet. Dies
+% geschieht mit dem Makro \Macro{subject}.
+%
+% \begin{Example}
+% Anl"asslich eines Firmenjubil"aums m"ochten Sie ein Preisauschreiben
+% f"ur alle Kunden ausrichten. Damit Ihre Kunden sofort sehen, dass
+% es sich bei Ihrem Brief nicht um eine Rechnung handelt, m"ochten
+% Sie deutlich auf den Inhalt Ihres Briefes aufmerksam machen.
+% \begin{small}\begin{verbatim}
+% \title{Preisausschreiben}
+% \end{verbatim}\end{small}
+% Eine schlichte Betreffzeile erzeugen Sie dagegen mit folgender
+% Zeile.
+% \begin{small}\begin{verbatim}
+% \subject{Lagerverkauf}
+% \end{verbatim}\end{small}
+% \end{Example}
+% Dar"uber hinaus kann mit dem Befehl \Macro{subjecton} vor der
+% Betreffzeile noch den Eintrag \emph{Betr.:} gesetzt werden.
+% Voreingestellt ist \Macro{subjectoff}, so dass nur die blo"se
+% Betreffzeile gesetzt wird.
+%
+% Der Brief beginnt mit dem \Macro{opening}-Befehl. Erst nach diesem
+% Befehl werden die Angaben im Referenzfeld\Index{Referenzfeld}, Betreff
+% und Empf"anger\Index{Empfaenger=Empf"anger} gesetzt. Diesem Befehl wird
+% die Anrede des Briefpartners "ubergeben.
+% \EndIndex{Env}{letter}\EndIndex{Cmd}{title}
+% \EndIndex{Cmd}{subject}\EndIndex{Cmd}{subjecton}\EndIndex{Cmd}{subjectoff}
+% \EndIndex{Cmd}{opening}
+%
+% \begin{Declaration}
+% \Macro{closing}\Parameter{Gru"sformel}\\
+% \Macro{ps}\Parameter{Postskriptum}\\
+% \Macro{cc}\Parameter{Verteiler}\\
+% \Macro{ccnameseparator}\\
+% \Macro{ccname}\\
+% \Macro{encl}\Parameter{Anlagen}\\
+% \Macro{enclnameseparator}\\
+% \Macro{enclname}
+% \end{Declaration}
+% \BeginIndex{Cmd}{closing}\BeginIndex{Cmd}{ps}
+% Nachdem der Brief geschrieben wurde, wird mit \Macro{closing} das
+% Briefende eingeleitet. Diesem Befehl wird die
+% Gru"sformel\Index[indexit]{Grussformel=Gru"sformel} (zum Beispiel
+% \glqq Mit freundlichen Gr"u"sen\grqq) "ubergeben.
+%
+% Manchmal ist es auch erw"unscht, nach dem eigentlichen Brief noch
+% Informationen unterzubringen, die nicht dem engsten Briefanliegen
+% entsprechen aber dennoch von Interesse f"ur den Empf"anger sein
+% k"onnen. Diese Informationen werden dem Befehl \Macro{ps}
+% "ubergeben.
+%
+% \begin{Example}
+% Sie m"ochten Ihre Kunden darauf hinweisen, dass Ihr Gesch"aft im
+% August Betriebsurlaub macht und deshalb geschlossen bleibt. Da
+% diese Information nicht in unmittelbaren Zusammenhang mit einer
+% Rechnung steht, m"ochten Sie dies als
+% Postscript\Index[indexit]{Postscriptum} schreiben.
+% \begin{small}\begin{verbatim}
+% \closing{Mit freundlichen Gr"u"sen,}
+% \ps{Bitte beachten Sie, dass wir vom 01.08. bis 31.08.
+% Betriebsurlaub machen. Unser Gesch"aft bleibt in dieser
+% Zeit geschlossen. Wir sind ab dem 01.09. in alter
+% Frische wieder f"ur Sie da.}
+% \end{verbatim}\end{small}
+% \end{Example}
+% H"aufig liegen gesch"aftlichen Briefen
+% Anlagen\Index[indexit]{Anlagen} bei, beispielsweise
+% Vertragsentw"urfe, Rechnungskopien oder "ahnliches. Darauf kann der
+% Adressat mit dem Befehl \Macro{encl} aufmerksam gemacht werden.
+% Gehen Kopien eines Briefes an die Empf"anger eines
+% Verteilers\Index[indexit]{Verteiler}, so kann auch dies im
+% Abschluss des Briefes bekannt gegeben werden. Dazu dient der
+% Befehl \Macro{cc}.
+% \EndIndex{Cmd}{closing}\EndIndex{Cmd}{ps}
+% \BeginIndex{Cmd}{cc}\BeginIndex{Cmd}{ccnameseparator}
+% \BeginIndex{Cmd}{ccname}
+% \BeginIndex{Cmd}{encl}\BeginIndex{Cmd}{enclnameseparator}
+% \BeginIndex{Cmd}{enclname}
+% \begin{Example}
+% Die W"ahrungsumstellung auf den Euro stellt Ihr kleines Unternehmen
+% vor gro"se Schwierigkeiten. Um Zahlungsausf"alle zu vermeiden,
+% ziehen Sie alle Verbindlichkeiten f"ur den Monat Dezember vor und
+% m"ochten diese bereits im November auszahlen. Au"serdem sollen alle
+% F"alligkeiten im neuen Jahr erst ab der dritten Januarwoche
+% beglichen werden. Diesen Beschluss der Gesch"aftsleitung m"ochten
+% Sie als Kopie an die Buchhaltung und den Betriebsrat schicken.
+% \begin{small}\begin{verbatim}
+% \encl{Beschluss "uber die Zahlungsmodalit"aten beim
+% "Ubergang auf den Euro}
+% \cc{Buchhaltung\\Betriebsrat}
+% \end{verbatim}\end{small}
+% \end{Example}
+% Der Aufruf \Macro{cc} setzt vor dem "ubergebenen Argument noch den
+% \Macro{ccname} \glqq Kopie an\grqq\ und den Trenner
+% \Macro{ccnameseparator} \glqq :\ \grqq\ (Doppelpunkt gefolgt von
+% einem Leerzeichen). "Ahnlich funktioniert der Befehl \Macro{encl}.
+% Der \Macro{enclname} lautet \glqq Anlagen\grqq\ -- der Trenner
+% \Macro{enclnameseparator} ist genauso definiert, wie der f"ur
+% Verteiler.
+%
+% \begin{Example}
+% Da Sie im obigen Beispiel nur eine Anlage verschicken, ist es
+% besser, den Singular zu verwenden. Sie m"ochten, dass der Verteiler
+% auch als solcher benannt wird und au"serdem halten Sie den
+% Doppelpunkt f"ur "uberfl"ussig. Alle Ihre W"unsche k"onnen erf"ullt
+% werden:
+% \begin{small}\begin{verbatim}
+% \renewcommand*{\ccnameseparator}{\ }
+% \renewcommand*{\enclnameseparator}{\ccnameseparator}
+% \renewcommand*{\ccname}{Verteiler}
+% \renewcommand*{\enclname}{Anlage}
+% \end{verbatim}\end{small}
+% \end{Example}
+% \EndIndex{Cmd}{cc}\EndIndex{Cmd}{ccnameseparator}\EndIndex{Cmd}{ccname}
+% \EndIndex{Cmd}{encl}\EndIndex{Cmd}{enclnameseparator}\EndIndex{Cmd}{enclname}
+%
+% \subsection{Das Referenzfeld}\Index[indexit]{Referenzfeld}
+%
+% \begin{Declaration}
+% \Macro{yourref}\Parameter{Ihr Zeichen}\\
+% \Macro{yourmail}\Parameter{Ihr Schreiben vom}\\
+% \Macro{myref}\Parameter{Unser Zeichen}\\
+% \Macro{customer}\Parameter{Kundennummer}\\
+% \Macro{invoice}\Parameter{Rechnungsnummer}
+% \end{Declaration}
+% \BeginIndex{Cmd}{yourref}\BeginIndex{Cmd}{yourmail}\BeginIndex{Cmd}{myref}
+% \BeginIndex{Cmd}{customer}\BeginIndex{Cmd}{invoice}
+% In Gesch"aftsbriefen werden h"aufig Informationen wie
+% Aktenzeichen\Index[indexit]{Aktenzeichen}, Rech\-nungs- oder
+% Kundennummer\Index[indexit]{Rechnungsnummer}\Index[indexit]{Kundennummer}
+% oder ein Hinweis auf das Schreiben, das beantwortet wird,
+% ben"otigt. Um diese Anforderungen realisieren zu k"onnen, sind in
+% der \Class{scrletter}-Klasse einige Makros implementiert.
+%
+% \begin{Example}
+% Sie m"ochten einen Brief Ihres Gesch"aftspartners Maier beantworten,
+% den dieser am 14. August 2000 geschrieben hat. Ihr Zeichen ist
+% {\emph{xyz}} Herr Maier hat die Kundennummer {\em{maier007}} und
+% beschwerte sich in seinem Brief, dass in der Rechnung mit der
+% Nummer {\em{197200/01}} kein Mehrwertsteueranteil angegeben war.
+% Das Zeichen von Herrn Maier lautet {\em{maier}}. Sie schreiben
+% also folgenden Brief:
+% \begin{small}\begin{verbatim}
+% \documentclass[10pt,a4paper]{scrlettr}
+% \usepackage{ngerman}
+% \name{Firma xyz}
+% \address{Industriegasse 12\\23987 Stahlhausen}
+% \signature{Herr Schmidt\\ Reklamationen}
+% \begin{document}
+% \begin{letter}{Herr Maier\\Wiesenweg 37\\ Blumental}
+% \yourref{maier}
+% \yourmail{14.08.2000}
+% \myref{xyz}
+% \customer{maier007}
+% \invoice{197200/01}
+% \opening{Sehr geehrter Herr Maier,}
+% vielen Dank f"ur Ihr Schreiben vom 14. August.
+% Wir bedauern unseren Fehler und senden Ihnen
+% anbei eine korrigierte Rechnung.
+% \closing{Mit freundlichen Gr"u"sen}
+% \end{letter}
+% \end{document}
+% \end{verbatim}\end{small}
+% Sie sehen, dass Ihre Angaben im Referenzfeld\Index{Referenzfeld}
+% zwischen der Empf"angeradresse und dem eigentlichen Brieftext
+% gesetzt werden.
+% \end{Example}
+% \EndIndex{Cmd}{yourref}\EndIndex{Cmd}{yourmail}\EndIndex{Cmd}{myref}
+% \EndIndex{Cmd}{customer}\EndIndex{Cmd}{invoice}
+%
+% \begin{Declaration}
+% \Macro{refitemi}\Parameter{Eigenes Feld 1}\\
+% \Macro{refitemii}\Parameter{Eigenes Feld 2}\\
+% \Macro{refitemiii}\Parameter{Eigenes Feld 3}\\
+% \Macro{refitemnamei}\Parameter{Bezeichnung des eigenen Feldes 1}\\
+% \Macro{refitemnameii}\Parameter{Bezeichnung des eigenen Feldes 2}\\
+% \Macro{refitemnameiii}\Parameter{Bezeichnung des eigenen Feldes 3}
+% \end{Declaration}
+% \BeginIndex{Cmd}{refitemi}\BeginIndex{Cmd}{refitemii}
+% \BeginIndex{Cmd}{refitemiii}
+% \EndIndex{Cmd}{refitemi}\EndIndex{Cmd}{refitemii}\EndIndex{Cmd}{refitemiii}
+% \BeginIndex{Cmd}{refitemnamei}\BeginIndex{Cmd}{refitemnameii}
+% \BeginIndex{Cmd}{refitemnameiii}
+% Neben den bereits vordefinierten Makros stehen noch bis zu drei
+% frei definierbare Makros zur Verf"ugung, um das Referenzfeld
+% verschiedenen Anforderungen gem"a"s anpassen zu k"onnen.
+%
+% \begin{Example}
+% Angenommen, Sie stehen mit Herrn Maier in Verhandlungen "uber die
+% Abnahme von 10.000 St"uck Ihres schlimmsten Ladenh"uters. Dann
+% ben"otigen Sie nat"urlich keine Rechnungsnummer. Statt dessen
+% m"ochten Sie im Referenzfeld ein Aktenzeichen\Index{Aktenzeichen}
+% vermerken. Dazu definieren zu mit \Macro{refitemnamei} den ersten
+% frei w"ahlbaren Referenzeintrag als \emph{Aktenzeichen}. Diesem
+% Eintrag k"onnen Sie dann das Aktenzeichen \emph{123/01mai}
+% zuweisen.
+% \begin{small}\begin{verbatim}
+% \refitemnamei{Aktenzeichen}
+% \refitemi{123/01mai}
+% \end{verbatim}\end{small}
+% \end{Example}
+% \EndIndex{Cmd}{refitemnamei}\EndIndex{Cmd}{refitemnameii}
+% \EndIndex{Cmd}{refitemnameiii}
+%
+% \section{Seitenstile}
+%
+% \begin{Declaration}
+% \Macro{firsthead}\Parameter{Kopfdefinition}\\
+% \Macro{firstfoot}\Parameter{Fu"sdefinition}\\
+% \Macro{nexthead}\Parameter{Kopfdefinition}\\
+% \Macro{nextfoot}\Parameter{Fu"sdefinition}
+% \end{Declaration}
+% \BeginIndex{Cmd}{firsthead}\BeginIndex{Cmd}{firstfoot}
+% \BeginIndex{Cmd}{nexthead}\BeginIndex{Cmd}{nextfoot}
+% Die \Class{scrlettr}-Klasse erm"oglicht es, den
+% Seitenstil\Index{Seitenstil} eines Dokuments an die eigenen
+% Bed"urfnisse anzupassen. Dazu kann getrennt f"ur die erste und alle
+% folgenden Seiten der Fu"s und der Kopf frei definiert werden. Diese
+% Definition muss \emph{vor} dem Aufruf von
+% \Macro{pagestyle}\Parameter{\dots} erfolgen.
+% \begin{Example}
+% Sie m"ochten in der Fu"szeile der ersten Seite eines Briefes die
+% Bankverbindung notieren. In den Fu"szeilen der folgenden Seiten
+% m"ochten Sie auf Ihren verantwortungsbewussten Umgang mit der
+% Umwelt hinweisen.
+% \begin{small}\begin{verbatim}
+% \firstfoot{Bankverbindung:\hfill $\bullet$\hfill Deutsche
+% Bank AG\hfill $\bullet$\hfill BLZ: 999\,720\,00\hfill
+% $\bullet$\hfill Konto: 123\,456\,890}
+% \nextfoot{\centerline{Dieses Schreiben wird
+% ausschlie"slich auf chlorfrei gebleichten Papier gedruckt.}}
+% \pagestyle{firstpage}
+% \end{verbatim}\end{small}
+% \end{Example}
+% Der Aufruf des Steitenstils
+% \Macro{pagestyle}\PParameter{firstpage}\IndexPagestyle[indexit]{firstpage}
+% sorgt daf"ur, dass auf allen Seiten Kopf und Fu"s wie auf der ersten
+% Seite gestaltet werden.
+%
+% Voreingestellt ist der Stil \PValue{plain}\IndexPagestyle{plain}.
+% Wird der Stil \PValue{headings}\IndexPagestyle{headings} ohne
+% eigene Definition der Kopf- und Fu"szeilen verwendet, so sind die
+% Fu"szeilen grunds"atzlich leer. Die Kopfzeile der ersten Seite
+% enth"alt zentriert den Absendernamen eine
+% Trennlinie\Index{Trennlinie} und die Absenderadresse. Der Kopf der
+% folgenden Seiten besteht aus den linksb"undig gesetzten
+% Absendernamen in der ersten Zeile. In einer zweiten Zeile steht
+% der Empf"angername, das Datum und die Seitenzahl. Wird der Stil
+% \PValue{empty}\IndexPagestyle{empty} gew"ahlt, so bleiben Kopf-
+% und Fu"szeile auf allen Seiten leer.
+%
+% Auf diese Weise k"onnen sehr individulle Briefb"ogen erstellt
+% werden.
+% \iffalse
+% Der Phantasie sind lediglich durch die zur Verf"ugung
+% stehenden Zeichens"atze Grenzen gesetzt.
+% \fi
+% \EndIndex{Cmd}{firsthead}\EndIndex{Cmd}{firstfoot}
+% \EndIndex{Cmd}{nexthead}\EndIndex{Cmd}{nextfoot}
+%
+% \begin{Declaration}
+% \Option{twoside}
+% \end{Declaration}
+% \BeginIndex{Option}{twoside}
+% Zweiseitig gedruckte Briefe werden durch die Angabe der Option
+% \Option{twoside} unterst"utzt. Im Gegensatz zu den "ubrigen
+% \KOMAScript -Klassen "andert sich hier der Satzspiegel nicht,
+% sondern es wird lediglich sichergestellt, dass ein neuer Brief
+% immer auf einer ungeraden \emph{Druck}seite beginnt. Dar"uber
+% hinaus wird eine Warnung ausgegeben, um darauf hinzuweisen, dass
+% es sich nicht wirklich um ein zweiseitiges Layout handelt.
+% \EndIndex{Option}{twoside}
+%
+% \begin{Declaration}
+% \Macro{foldmarkson}\\
+% \Macro{foldmarksoff}
+% \end{Declaration}
+% \BeginIndex{Cmd}{foldmarkson}\BeginIndex{Cmd}{foldmarksoff}
+% Die Faltmarken\Index[indexit]{Faltmarken} k"onnen mit dem Befehl
+% \Macro{foldmarkson} eingeschaltet und mit dem Befehl
+% \Macro{foldmarksoff} ausgestellt werden. Dies ist f"ur jeden Brief
+% eines Dokuments getrennt m"oglich. Voreingestellt ist
+% \Macro{foldsmarkson}. Diese Faltmarken werden von \Macro{opening}
+% gesetzt. Die Schalter und evtl. "Anderungen der Ma"se (vgl.
+% Abschnitt~\ref{list:laengen}) m"ussen also vor diesem Makro
+% aufgerufen werden.
+% \EndIndex{Cmd}{foldmarkson}\EndIndex{Cmd}{foldmarksoff}
+%
+%
+% \section{Unterst"utzung verschiedener Sprachen}
+%
+% \subsection{Sprachauswahl und -umschaltung}
+% \Index[indexit]{Sprachumschaltung}\Index[indexit]{Sprachauswahl}
+%
+% Die \Class{scrlettr}-Klasse unterst"utz viele Sprachen. Dazu z"ahlen
+% neben Deutsch auch "Osterreichisch, Englisch (britisch und
+% amerikanisch), Franz"osich, Italienisch und Spanisch. Zwischen den
+% Sprachen wird bei Verwendung des \Package{babel}-Pakets mit dem
+% Befehl \Macro{selectlanguage}\Parameter{Sprachauswahl} gewechselt.
+%
+% \begin{Declaration}
+% \Macro{captionsenglish}\\
+% \Macro{captionsUSenglish}\\
+% \Macro{captionsamerican}\\
+% \Macro{captionsbritish}\\
+% \Macro{captionsUKenglish}\\
+% \Macro{captionsgerman}\\
+% \Macro{captionsaustrian}\\
+% \Macro{captionsfrench}\\
+% \Macro{captionsitalian}\\
+% \Macro{captionsspanish}
+% \end{Declaration}
+% \BeginIndex{Cmd}{captionsenglish}\BeginIndex{Cmd}{captionsUSenglish}
+% \BeginIndex{Cmd}{captionsamerican}\BeginIndex{Cmd}{captionsbritish}
+% \BeginIndex{Cmd}{captionsUKenglish}\BeginIndex{Cmd}{captionsgerman}
+% \BeginIndex{Cmd}{captionsaustrian}\BeginIndex{Cmd}{captionsfrench}
+% \BeginIndex{Cmd}{captionsitalian}\BeginIndex{Cmd}{captionsspanish}
+% Wird die Sprache eines Briefes gewechselt, so "andern sich
+% automatisch die Eintragungen der automatisch gesetzten \glqq
+% Caption\grqq -Texte wie \emph{Betreff}, \emph{Seite} oder
+% \emph{Anlagen}. Sollte das verwendete Sprachumschaltpaket diese
+% Texte nicht automatisch verwalten, so k"onnen die entsprechenden
+% Befehle notfalls auch dirket verwendet werden.
+% \EndIndex{Cmd}{captionsenglish}\EndIndex{Cmd}{captionsUSenglish}
+% \EndIndex{Cmd}{captionsamerican}\EndIndex{Cmd}{captionsbritish}
+% \EndIndex{Cmd}{captionsUKenglish}\EndIndex{Cmd}{captionsgerman}
+% \EndIndex{Cmd}{captionsaustrian}\EndIndex{Cmd}{captionsfrench}
+% \EndIndex{Cmd}{captionsitalian}\EndIndex{Cmd}{captionsspanish}
+%
+% \begin{Declaration}
+% \Macro{dateenglish}\\
+% \Macro{dateUSenglish}\\
+% \Macro{dateamerican}\\
+% \Macro{datebritish}\\
+% \Macro{dateUKenglish}\\
+% \Macro{dategerman}\\
+% \Macro{dateaustrian}\\
+% \Macro{datefrench}\\
+% \Macro{dateitalian}\\
+% \Macro{datespanish}
+% \end{Declaration}
+% \BeginIndex{Cmd}{dateenglish}\BeginIndex{Cmd}{dateUSenglish}
+% \BeginIndex{Cmd}{dateamerican}\BeginIndex{Cmd}{datebritish}
+% \BeginIndex{Cmd}{dateUKenglish}\BeginIndex{Cmd}{dategerman}
+% \BeginIndex{Cmd}{dateaustrian}\BeginIndex{Cmd}{datefrench}
+% \BeginIndex{Cmd}{dateitalian}\BeginIndex{Cmd}{datespanish}
+% Je nach verwendeter Sprache werden auch die
+% Datumsangaben\Index{Datum} in unterschiedlicher Form umgesetzt.
+% Die genauen Angaben k"onnen der Tabelle~\ref{TAB:Datum} entnommen
+% werden.
+% \begin{table}
+% \centering
+% \begin{tabular}{ll}
+% \verb \dateenglish & 1/12/1993\\
+% \verb \dateUSenglish & 12/1/1993\\
+% \verb \dateamerican & 12/1/1993\\
+% \verb \datebritish & 1/12/1993\\
+% \verb \dateUKenglish & 1/12/1993\\
+% \verb \dategerman & 1.\,12.\,1993\\
+% \verb \dateaustrian & 1.\,12.\,1993\\
+% \verb \datefrench & 1.\,12.\,1993\\
+% \verb \dateitalian & 1.\,12.\,1993\\
+% \verb \datespanish & 1.\,12.\,1993\\
+% \end{tabular}
+% \caption{Sprachabh"angige Ausgabeformate f"ur Datum}
+% \label{TAB:Datum}
+% \end{table}
+% \EndIndex{Cmd}{dateenglish}\EndIndex{Cmd}{dateUSenglish}
+% \EndIndex{Cmd}{dateamerican}\EndIndex{Cmd}{datebritish}
+% \EndIndex{Cmd}{dateUKenglish}\EndIndex{Cmd}{dategerman}
+% \EndIndex{Cmd}{dateaustrian}\EndIndex{Cmd}{datefrench}
+% \EndIndex{Cmd}{dateitalian}\EndIndex{Cmd}{datespanish}
+%
+% \begin{Declaration}
+% \Option{orgdate}\\
+% \Option{scrdate}
+% \end{Declaration}
+% \BeginIndex{Option}{orgdate}
+% Sollen die Datumseinstellungen\Index{Datum} des \Package{babel}-
+% oder \Package{ngerman}-Pakets oder eines eigenen
+% Sprachumschaltpakets benutzt werden, so kann dies durch die
+% Klassenoption \Option{orgdate} erreicht werden. Voreingestellt ist
+% die Verwendung der \Class{scrlettr}-eigenen Definition
+% (\Option{scrdate}).
+% \EndIndex{Option}{orgdate}
+%
+% \subsection{Sprachabh"angige Variablen}
+% \Index[indexit]{sprachabhaengige Variablen=sprachabh"angige
+% Variablen}
+% \begin{Declaration}
+% \Macro{yourrefname}\\
+% \Macro{yourmailname}\\
+% \Macro{myrefname}\\
+% \Macro{customername}\\
+% \Macro{invoicename}\\
+% \Macro{subjectname}\\
+% \Macro{ccname}\\
+% \Macro{enclname}\\
+% \Macro{headtoname}\\
+% \Macro{datename}\\
+% \Macro{pagename}
+% \end{Declaration}
+% \BeginIndex{Cmd}{yourrefname}\BeginIndex{Cmd}{yourmailname}
+% \BeginIndex{Cmd}{myrefname}
+% \BeginIndex{Cmd}{customername}\BeginIndex{Cmd}{invoicename}
+% \BeginIndex{Cmd}{subjectname}
+% \BeginIndex{Cmd}{ccname}\BeginIndex{Cmd}{enclname}
+% \BeginIndex{Cmd}{headtoname}
+% \BeginIndex{Cmd}{datename}\BeginIndex{Cmd}{pagename}
+% Die aufgef"uhrten Befehle enthalten die jeweils sprachtypischen
+% \emph{Captiontexte}. Diese k"onnen f"ur die Realisierung einer
+% weiteren Sprache oder aber auch zur eigenen freien Gestaltung
+% angepasst werden. Dazu benutzt man den Befehl
+% \Macro{renewcommand}.
+%
+% \begin{Example}
+% M"ochten Sie statt des Eintrags \glqq Ihr Schreiben vom\grqq\
+% lieber \glqq Ihre Nachricht vom\grqq\ im Referenzfeld stehen
+% haben, m"ussen Sie den Befehl \Macro{yourmailname} wie folgt
+% umdefinieren.
+% \begin{small}\begin{verbatim}
+% \renewcommand*{\yourmailname}{Ihre Nachricht vom}
+% \end{verbatim}\end{small}
+% Auf diese Weise k"onnen Sie nat"urlich auch alle Variablen den
+% Vorgaben einer anderen Sprache anpassen.
+% \end{Example}
+% Es ist darauf zu achten, dass die Variablen erst \emph{nach}
+% \Macro{begin}\PParameter{document} definiert werden. Der Aufruf
+% \Macro{renewcommand*}\Parameter{\dots} muss daher zwingend nach
+% \Macro{begin}\PParameter{document} oder mit Hilfe von
+% \Macro{AtBeginDocument} erfolgen.
+% \EndIndex{Cmd}{yourrefname}\EndIndex{Cmd}{yourmailname}
+% \EndIndex{Cmd}{myrefname}
+% \EndIndex{Cmd}{customername}\EndIndex{Cmd}{invoicename}
+% \EndIndex{Cmd}{subjectname}
+% \EndIndex{Cmd}{ccname}\EndIndex{Cmd}{enclname}\EndIndex{Cmd}{headtoname}
+% \EndIndex{Cmd}{datename}\EndIndex{Cmd}{pagename}
+%
+%
+% \section{Adressdateien}
+% \label{sec:adressdateien}
+% \begin{Declaration}
+% \Macro{adrentry}\Parameter{Name}\Parameter{Vorname}\Parameter{Adresse}
+% \Parameter{Telefon}\Parameter{F1}\Parameter{F2}
+% \Parameter{Kommentar}\Parameter{K"urzel}
+% \end{Declaration}
+% \BeginIndex{Cmd}{adrentry}
+% \label{decl:adrentry}
+% Mit der \Class{scrlettr}-Klasse k"onnen auch
+% Adressdateien\Index[indexit]{Adressdatei} ausgewertet werden. Dies
+% ist beispielsweise f"ur Serienbriefe sehr n"utzlich (siehe
+% Abschnitt~\ref{subsec:Serienbriefe}). Eine Adressdatei muss die
+% Endung \File{.adr} haben und besteht aus einer Reihe von
+% \Macro{adrentry}-Eintr"agen. Ein solcher Eintrag besteht aus acht
+% Elementen und kann beispielsweise wie folgt aussehen:
+% \begin{small}\begin{verbatim}
+% \adrentry{Maier}
+% {Herbert}
+% {\Wiesenweg 37\\ 09091 Blumental}
+% {0\,23\,34 / 91\,12\,74}
+% {Bauunternehmer}
+% {}
+% {kauft alles}
+% {MAIER}
+% \end{verbatim}\end{small}
+% Die Elemente f"unf und sechs, \PValue{F1} und \PValue{F2}, k"onnen
+% frei bestimmt werden. Denkbar w"aren neben Hinweisen auf das
+% Geschlecht oder akademische Grade auch der Geburtstag oder das
+% Eintrittsdatum in einen Verein.
+% Um das "Uberschreiben von \TeX - oder \LaTeX -Befehlen zu
+% vermeiden, ist es empfehlenswert, f"ur \emph{K"urzel} ausschlie"slich
+% Gro"sbuchstaben zu verwenden.
+%
+% \begin{Example}
+% Herr Maier geh"ort zu Ihren engeren Gesch"aftspartnern. Da Sie eine
+% rege Korrespondenz mit ihm pflegen, ist es Ihnen auf Dauer zu
+% m"u"sig, jedesmal alle Empf"angerdaten aufs Neue einzugeben.
+% \Class{scrlettr} nimmt Ihnen diese Arbeit ab. Angenommen, Sie
+% haben Ihre Kundenkontakte in der Datei \File{partner.adr}
+% gespeichert und Sie m"ochten Herrn Maier einen Brief schreiben,
+% dann sparen Sie sich viel Tipparbeit, wenn Sie folgendes eingeben:
+% \begin{small}\begin{verbatim}
+% \input{partner.adr}
+% \begin{letter}{\MAIER}
+% Der Brief ...
+% \end{letter}
+% \end{verbatim}\end{small}
+% Achten Sie bitte darauf, dass Ihr \TeX -System auch auf die
+% \File{.adr}-Dateien zugreifen kann, da sonst eine Fehlermeldung
+% von \Macro{input} verursacht wird. Entweder Sie legen die Brief-
+% und Adressdateien im selben Verzeichnis an, oder Sie binden ein
+% Adressverzeichnis fest in Ihr \TeX -System ein.
+% \end{Example}
+% \EndIndex{Cmd}{adrentry}
+%
+% \subsection{Serienbriefe mit der \Class{scrlettr}-Klasse}
+% \label{subsec:Serienbriefe}
+%
+% Neben dem vereinfachten Zugriff auf Kundendaten k"onnen die
+% \File{.adr}-Dateien auch f"ur
+% Serienbriefe\Index[indexit]{Serienbriefe} genutzt werden. So ist
+% es ohne die komplizierte Anbindung an Datenbanksysteme m"oglich,
+% solche Massenpostsendungen zu erstellen.
+% \begin{Example}
+% Sie wollen einen Serienbrief an alle Mitglieder Ihres
+% Anglervereins schicken, um zur n"achsten Mitgliederversammlung
+% einzuladen.
+% \begin{small}\begin{verbatim}
+% \documentclass{scrlettr}
+% \usepackage{ngerman}
+% \begin{document}
+% \def\adrentry#1#2#3#4#5#6#7#8{
+% \begin{letter}{#2 #1\\#3}
+% \opening{Liebe Vereinsmitglieder,}
+% unsere n"achste Mitgliederversammlung
+% findet am Montag,
+% dem 13.\, August 2001, statt.
+%
+% Folgende Punkte m"ussen besprochen werden...
+% \closing{Petri Heil,}
+% \end{letter}
+% }
+% \input{mitglieder.adr}
+% \end{document}
+% \end{verbatim}\end{small}
+% \end{Example}
+% Nat"urlich kann der Briefinhalt auch von den Adressatenmerkmalen
+% abh"angig gemacht werden. Als Bedingungsfelder k"onnen die frei
+% bestimmbaren Elemente f"unf oder sechs eines
+% \Macro{adrentry}-Eintrages genutzt werden.
+% \begin{Example}
+% Angenommen, Sie verwenden das Element f"unf, um das Geschlecht
+% eines Vereinmitgliedes zu hinterlegen (\PValue{m/w}) und das
+% sechste Element weist auf eine R"uckstand der Mitgliedsbeitr"age
+% hin. Wollen Sie nun alle s"aumigen Mitglieder anschreiben und
+% pers"onlich anreden, so hilft Ihnen folgendes Beispiel weiter:
+% \begin{small}\begin{verbatim}
+% \def\adrentry#1#2#3#4#5#6#7#8{
+% \ifcase #6
+% % #6 > 0
+% % hier werden die s"aumigen Mitglieder herausgefiltert
+% \else
+% \begin{letter}{#2 #1\\#3}
+% \if #5m \opening{Lieber #2,} \fi
+% \if #5w \opening{Liebe #2,} \fi
+%
+% Leider mussten wir feststellen, dass du mit der Zah-
+% lung deiner Mitgliedsbeitr"age im R"uckstand bist.
+%
+% Wir m"ochten Dich bitten, den offenen Betrag von #6 DM
+% auf das Vereinskonto einzuzahlen.
+% \closing{Petri Heil,}
+% \end{letter}
+% \fi
+% }
+% \end{verbatim}\end{small}
+% \end{Example}
+% Es ist also m"oglich, den Brieftext auf bestimmte Empf"angermerkmale
+% gezielt abzustimmen und so den Eindruck eines pers"onlichen
+% Schreibens zu erwecken. Die Anwendungsbreite ist lediglich durch
+% die maximale Anzahl von zwei freien \Macro{adrentry}-Elementen
+% begrenzt.
+%
+% \subsection{Adressverzeichnisse und Telefonlisten erstellen}
+%
+% Der Inhalt dieses Abschnitts ist komplett obsolet. Hier sei
+% stattdessen auf das \Package{adrconv}-Paket von Axel Kielhorn
+% verwiesen.
+%
+% \section{Befehls- und Variablen"ubersicht}
+% \subsection{Briefspezifische Befehle, die strukturbeschreibend sind
+% oder eine Ausgabe erzeugen:}
+%
+% \begin{labeling}[~]{\Macro{begin}\PParameter{letter}\Parameter{Adressat}}
+% \item[\Macro{begin}\PParameter{letter}\Parameter{Adressat}] Markiert den
+% Beginn eines Briefes an \emph{Adressat} und beginnt eine neue
+% Seite\IndexEnv{letter}
+% \item[\Macro{end}\PParameter{letter}] Markiert das Ende eines
+% Briefes\IndexEnv{letter}
+% \item[\Macro{opening}\Parameter{Anrede}] Setzt alle Teile eines
+% Briefes oberhalb und einschlie"slich der
+% \emph{Anrede}\IndexCmd{opening}
+% \item[\Macro{closing}\Parameter{Gru"sformel}] Setzt \emph{Gru"sformel}
+% und Unterschrift\IndexCmd{closing}\Index{Grussformel=Gru"sformel}
+% \item[\Macro{ps}\Parameter{Postscriptum}] Setzt ein
+% \emph{Postscriptum}\IndexCmd{ps}\Index{Postscriptum}
+% \item[\Macro{cc}\Parameter{Verteiler}] setzt eine Verteilerliste,
+% deren Eintr"age durch \verb \\ \ zu trennen sind
+% (vgl.\Macro{ccnameseparator} und
+% \Macro{ccname})\IndexCmd{cc}\Index{Verteiler}
+% \item[\Macro{encl}\Parameter{Anlagen}] Setzt eine Anlagenliste, deren
+% Eintr"age durch \verb \\ \ zu trennen sind (vgl.
+% \Macro{enclnameseparator} und
+% \Macro{enclname})\IndexCmd{encl}\Index{Anlagen}
+% \end{labeling}
+%
+% \subsection{Befehle der Adressdateien:}
+%
+% \Macro{adrchar} und \Macro{adrentry} siehe
+% Abschnitt~\ref{decl:adrentry}
+%
+% \subsection{Befehle zur Sprachumschaltung:}\Index{Sprachumschaltung}
+%
+% \begin{labeling}[~]{\Macro{captionsUSenglish}}
+% \item[\Macro{captionsenglish}] Umschaltung auf englische
+% Caption-Texte\IndexCmd{captionsenglish}
+% \item[\Macro{captionsUSenglish}] Umschaltung auf amerikanische
+% Cation-Texte\IndexCmd{captionsUSenglish}
+% \item[\Macro{captionsgerman}] Umschaltung auf deutsche
+% Caption-Texte\IndexCmd{captionsgerman}
+% \item[\Macro{captionsfrench}] Umschaltung auf franz"osische
+% Caption-Texte\IndexCmd{captionsfrench}
+% \item[\Macro{captionsitalian}] Umschaltung auf italienische
+% Caption-Texte\IndexCmd{captionsitalian}
+% \item[\Macro{captionsaustrian}] Umschaltung auf "osterreichische
+% Caption-Texte\IndexCmd{captionsaustrian}
+% \item[\Macro{captionsspanish}] Umschaltung auf spanische
+% Caption-Texte\IndexCmd{captionsspanish}
+% \index{Datum}
+% \item[\Macro{dateenglish}] Englisches Datum
+% (vgl. Tabelle~\ref{TAB:Datum})\IndexCmd{dateenglish}
+% \item[\Macro{dateUSenglish}] Amerikanisches Datum
+% (vgl. Tabelle~\ref{TAB:Datum})\IndexCmd{dateUSenglish}
+% \item[\Macro{dategerman}] Deutsches Datum
+% (vgl. Tabelle~\ref{TAB:Datum})\IndexCmd{dategerman}
+% \item[\Macro{datefrench}] Franz"osisches Datum
+% (vgl. Tabelle~\ref{TAB:Datum})\IndexCmd{datefrench}
+% \item[\Macro{dateitalian}] Italienisches Datum
+% (vgl. Tabelle~\ref{TAB:Datum})\IndexCmd{dateitalian}
+% \item[\Macro{dateaustrian}] "Osterreichisches Datum
+% (vgl. Tabelle~\ref{TAB:Datum})\IndexCmd{dateaustrian}
+% \item[\Macro{datespanish}] Spanisches Datum (vgl. Tabelle~\ref{TAB:Datum})\IndexCmd{datespanish}
+% \end{labeling}
+%
+% \subsection{Sprachabh"angige Variablen}\Index{sprachabhaengige
+% Variablen=sprachabh"angige Variablen}
+%
+% Diese Varialblen d"urfen an jeder Stelle nach dem
+% \Macro{begin}\PParameter{document}-Befehl aufgerufen werden. Sie
+% k"onnen nur mit \Macro{renewcommand} ge"andert werden. Die
+% untenstehende Aufstellung listet die voreingestellten Eintr"age f"ur
+% die Sprachen Deutsch, Englisch, Franz"osisch, Italienisch und
+% Spanisch auf. Die amerikanischen Caption-Texte entsprechen den
+% englischen. Deutsche und "osterreichische Eintragungen sind
+% identisch.
+%
+% \begin{labeling}[~]{\Macro{customername}}
+% \item[\Macro{yourrefname}] \small
+% Ihr Zeichen / Your ref. / Vos références / Vs./Rif. / Su ref.
+% \IndexCmd{yourrefname}
+% \item[\Macro{yourmailname}] \small
+% Ihr Schreiben vom / Your letter of / Votre lettre du / Vs.~lettera
+% del / Su carta de\IndexCmd{yourmailname}
+% \item[\Macro{myrefname}] \small
+% Unser Zeichen / Our ref. / Nos références / Ns./Rif. / Nuestra
+% ref.\IndexCmd{myrefname}
+% \item[\Macro{customername}] \small
+% Kundennummer / Customer no. / Numéro de client / Nr.~cliente / No.
+% de cliente\IndexCmd{customername}
+% \item[\Macro{invoicename}] \small
+% Rechnungsnummer / Invoice no. / Numéro de facture / Nr.~fattura /
+% No. de factura\IndexCmd{invoicename}
+% \item[\Macro{subjectname}] \small Betr. / Subject / Concernant /
+% Oggetto / Asunto\IndexCmd{subjectname}
+% \item[\Macro{ccname}] \small
+% Kopie an / cc / Copia á / Per conoscenza / Copias\IndexCmd{ccname}
+% \item[\Macro{enclname}] \small
+% Anlagen / encl / Annexes / Allegato / Adjunto\IndexCmd{enclname}
+% \item[\Macro{headtoname}] \small
+% An / To / A / A / A\IndexCmd{headtoname}
+% \item[\Macro{datename}] \small
+% Datum / Date / Date / Data / Fecha\IndexCmd{datename}
+% \item[\Macro{pagename}] \small
+% Seite / Page / Page / Pagina / Página\IndexCmd{pagename}
+% \end{labeling}
+%
+% \subsection{Briefspezifische Variablen und deren Befehle zur Neu- und
+% Umdefinierung}
+%
+% Die in Klammern stehenden Variablen werden durch Aufruf folgender
+% Makros ge"andert.
+% \begin{labeling}[~]{\Macro{refitemnameiii}}
+% \index{briefspezifische Variablen}
+% \item[\Macro{name}] Name des Absenders
+% (\Macro{fromname})\IndexCmd{name}
+% \item[\Macro{branch}] Branche des Absenders (
+% \Macro{frombranch})\IndexCmd{branch}
+% \item[\Macro{signature}] Unterschrift, voreingestellt ist die
+% "Ubernahme des Wertes von \Macro{name}
+% (\Macro{fromsig})\IndexCmd{signature}
+% \item[\Macro{address}] Absenderadresse
+% (\Macro{fromaddress})\IndexCmd{address}
+% \item[\Macro{place}] Absenderort (\Macro{fromplace})\IndexCmd{place}
+% \item[\Macro{location}] weitere Angabe zur Absenderadresse
+% (\Macro{fromlocation})\IndexCmd{location}
+% \item[\Macro{backaddress}] Absenderadresse im Adressfeld
+% (\Macro{frombackaddress})\IndexCmd{backaddress}
+% \item[\Macro{telephone}] Telefonnummer des Absenders
+% (\Macro{telephonenum})\IndexCmd{telefone}
+% \item[\Macro{yourref}] Referenzfeldeintrag
+% (\Macro{varyourref})\IndexCmd{yourref}
+% \item[\Macro{yourmail}] Referenzfeldeintrag
+% (\Macro{varyourmail}\IndexCmd{yourmail}
+% \item[\Macro{myref}] Referenzfeldeintrag
+% (\Macro{varmymail})\IndexCmd{yourref}
+% \item[\Macro{customer}] Referenzfeldeintrag
+% (\Macro{varcustomer})\IndexCmd{customer}
+% \item[\Macro{invoice}] Referenzfeldeintrag
+% (\Macro{varinvoice})\IndexCmd{invoice}
+% \item[\Macro{refitemi}] Referenzfeldeintrag, frei definierbar
+% (\Macro{varrefitemi})\IndexCmd{refitemi}
+% \item[\Macro{refitemii}] Referenzfeldeintrag, frei definierbar
+% (\Macro{varrefitemii})\IndexCmd{refitemii}
+% \item[\Macro{refitemiii}] Referenzfeldeintrag, frei definierbar
+% (\Macro{varrefitemiii})\IndexCmd{refitemiii}
+% \item[\Macro{refitemnamei}] Bezeichnung eines frei definierbaren
+% Referenzfeldeintrags
+% (\Macro{varrefitemnamei})\IndexCmd{refitemnamei}
+% \item[\Macro{refitemnameii}] Bezeichnung eines frei definierbaren
+% Referenzfeldeintrags
+% (\Macro{varrefitemnameii})\IndexCmd{refitemnameii}
+% \item[\Macro{refitemnameiii}] Bezeichnung eines frei definierbaren
+% Referenzfeldeintrags
+% (\Macro{varrefitemnameiii})\IndexCmd{refitemnameiii}
+% \item[\Macro{specialmail}] Versandart
+% (\Macro{@specialmail})\IndexCmd{specialmail}\Index{Versandart}
+% \item[\Macro{title}] "Uberschrift (\Macro{@title})\IndexCmd{title}
+% \item[\Macro{subject}] Betreff, sprachabh"angig
+% (\Macro{@subject})\IndexCmd{subject}\Index{Betreff}
+% \item[\Macro{firsthead}] Kopfzeilendefinition f"ur erste Seite
+% (\Macro{@firsthead})\IndexCmd{firsthead}
+% \item[\Macro{firstfoot}] Fu"szeilendefinition f"ur erste Seite
+% (\Macro{@firstfoot})\IndexCmd{firstfoot}
+% \item[\Macro{nexthead}] Kopfzeile der folgenden Seiten
+% (\Macro{@nexthead})\IndexCmd{nexthead}
+% \item[\Macro{nextfoot}] Fu"szeile der folgenden Seiten
+% (\Macro{@nextfoot})\IndexCmd{nextfoot}
+% \end{labeling}
+%
+% \subsection{Briefspezifische L"angenangaben} \label{list:laengen}
+% \Index{Laengenangaben=L"angenangaben}
+%
+% Voreingestellte L"angen sind in Klammern angegeben.
+% \begin{labeling}[~]{\Length{foldvskipiii}}
+% \item[\Length{foldhskip}] Abstand der Falzmarke vom linken
+% Papierrand (3,5\Unit{mm})\IndexLength{foldhskip}
+% \item[\Length{foldvskipi}] Abstand zwischen der ersten Falzmarke
+% und dem oberen Seitenrand (62\Unit{mm})\IndexLength{foldvskipi}
+% \item[\Length{foldvskipii}] Abstand der zweiten Falzmarke von
+% der ersten Falzmarke (45\Unit{mm})\IndexLength{foldvskipii}
+% \item[\Length{foldvskipiii}] Abstand der dritten Falzmark von
+% der zweiten Falzmarke (54\Unit{mm})\IndexLength{foldvskipiii}
+% \item[\Length{addvskip}] Abstand des Adressfensters von der
+% Textbereichsoberkante (7,5\Unit{mm})\IndexLength{addvskip}
+% \item[\Length{addrindent}] Abstand des Adressfensters vom linken
+% Rand des Textbereiches (0\Unit{mm})\IndexLength{addrindent}
+% \item[\Length{addrwidth}] Breite des Adressfeldes
+% (70\Unit{mm})\IndexLength{addrwidth}
+% \item[\Length{locwidth}] Breite des \glqq Location\grqq -Feldes
+% [$(\Length{textwidth}-\Length{addrwidth})/2$ bei Option
+% \Option{slocfield} oder
+% $(\Length{textwidth}-\Length{addrwidth})*2/3$ bei Verwendung der
+% Option \Option{wlocfield}]\IndexLength{locwidth}
+% \item[\Length{refvskip}] Abstand zwischen dem Referenzfelde und der
+% Adressfeldunterkante (5,5\Unit{mm})\IndexLength{refvskip}
+% \item[\Length{sigindent}] Abstand der Gru"sformel und der
+% Unterschrift vom linken Rand des Textbereiches
+% (0\Unit{mm})\IndexLength{sigindent}
+% \end{labeling}
+%
+%
+% \subsection{Befehle zum Setzen interner Abst"ande}
+% Voreingestellte L"angen sind in Klammern angegeben.
+% \begin{labeling}[~]{\Macro{setpresigskip}}
+% \item[\Macro{setpresigskip}] Abstand zwischen der Gru"sformel und der
+% Unterschrift voreingestellt sind
+% (2\Length{baselineskip})\IndexCmd{setpresigskip}
+% \Index{Grussformel=Gru"sformel}
+% \end{labeling}
+%
+% \subsection{Schalter}
+%
+% An den jeweiligen Schalternamen ist noch ein \PValue{on} bzw.
+% \PValue{off} anzuh"angen.
+%
+% \begin{labeling}[~]{\Macro{subjectafter}}
+% \item[\Macro{foldmarks}] Faltmarken (Default = on)
+% \IndexCmd{foldmarkson}\IndexCmd{foldmarksoff}\Index{Faltmarken}
+% \item[\Macro{addrfield}] Adress- und \glqq Location\grqq -Feld
+% (Default = on)\Index{Adressfeld}
+% \item[\Macro{subject}] \glqq Betreff: \grqq\ vor \Macro{subject}
+% (Default = off)\IndexCmd{subjecton}\IndexCmd{subjectoff}
+% \item[\Macro{subjectafter}] Betreff nach der Anrede setzen
+% (Default = off)
+% \IndexCmd{subjectafteron}\Index{Betreff}\IndexCmd{subjectafteroff}
+% \end{labeling}
+%
+% \subsection{Klassenoptionen}
+%
+% Die Standartoptionen (\Option{12pt}, \Option{oneside},
+% \Option{final}, \Option{slocfield}) k"onnen durch explizite
+% Optionsangaben "uberschrieben werden.
+% \begin{labeling}[~]{\Option{10pt}, \Option{11pt}, \Option{12pt}}
+% \item[\Option{10pt}, \Option{11pt}, \Option{12pt}] Option f"ur die
+% Schriftgr"o"se\IndexOption{10pt}\IndexOption{11pt}\IndexOption{12pt}
+% \item[\Option{oneside}] einseitiges Layout\IndexOption{oneside}
+% \item[\Option{twoside}] pseudo-doppelseitiges
+% Layout\IndexOption{twoside}\IndexOption{twoside}
+% \item[\Option{draft}] Dokumente im Entwurfsstadium
+% setzen\IndexOption{draft}
+% \item[\Option{final}] Dokumente in der Endfassung
+% setzen\IndexOption{final}
+% \item[\Option{a4paper}] Papiergr"o"se\IndexOption{a4paper}
+% \item[\Option{wlocfield}] gro"ses \glqq
+% Location\grqq-Feld\IndexOption{wlocfield}
+% \item[\Option{slocfield}] kleines \glqq
+% Location\grqq-Feld\IndexOption{wlocfield}
+% \item[\Option{orgdate}] eigene Datumsanpassungen oder die
+% eines externen Pakets verwenden\IndexOption{orgdate}
+% \item[\Option{scrdate}] Datumsanpassungen des
+% \Class{scrlettr}-Pakets verwenden.\IndexOption{scrdate}
+% \end{labeling}
+%
+% \EndIndex{Class}{scrlettr}
+% \section{Autoren}
+% \label{sec:scrletter.autoren} Die folgenden Autoren waren an
+% dieser Anleitung beteiligt oder haben die Vorlage daf"ur geliefert.
+% \begin{itemize}
+% \item Markus Kohm
+% \item \textbf{Enrico Kunz} \TextEMail{enricokunz@web.de}
+% \item Jens-Uwe Morawski
+% \end{itemize}
+%
+% \MakeShortVerb{\|}
+%
+% \StopEventually{\PrintIndex\PrintChanges}
+%
+% \part{"`scrlettr"'-class}
+%
+% \section{Implementierung}
+%
+% \begin{macrocode}
+%<*scrlettr>
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+\ClassWarningNoLine{scrlettr}{%
+ THIS CLASS IS OBSOLETE AND NOT LONGER SUPPORTED!\MessageBreak
+ Since the new KOMA-Script letter class ``scrlttr2'' was\MessageBreak
+ released, the use of ``scrlettr'' is obsolete.\MessageBreak
+ You should not use this class for writing new letters.\MessageBreak
+ You should use ``scrlttr2''.\MessageBreak
+ All old commands of ``scrlettr'' are supported at\MessageBreak
+ the new class ``scrlttr2''. But the length are not\MessageBreak
+ and the typearea was changed - even using the\MessageBreak
+ compatiblity option ``KOMAold''. So you may have\MessageBreak
+ to do some changes}
+% \end{macrocode}
+%\fi
+%
+% \changes{v2.0}{1993/12/01}{Letzte "`script\_l"'-\LaTeX~2.0-Version
+% von Frank Neukam}
+% \changes{v2.0-2e}{1994/10/08}{"`script\_l"'-\LaTeXe-Version
+% von Axel Kielhorn}
+% \changes{v2.0e}{1994/10/12}{Erste "`scrlettr"'-Version im
+% \textsf{KOMA-Script} Paket}
+% \changes{v2.3e}{1996/05/31}{Faltmarken korrigiert}
+% Die Implementierung von |scrlettr| stammt im wesentlichen von Frank Neukam.
+% Axel Kielhorn hat sie nach \LaTeXe portiert, wobei die von Roland T. Lichti
+% modifizierte Version zugrunde gelegt wurde. Markus Kohm hat nur einige
+% wenige, unwesentliche "Anderungen vorgenommen.
+%
+% \subsection{Optionen}
+%
+% \changes{v2.4c}{1997/11/25}{Neuer Schalter \cs{if@orgdate} f"ur die neuen
+% Optionen \texttt{orgdate}, \texttt{scrdate}}
+% \begin{macrocode}
+\newcommand*\@ptsize{}
+\newif\if@bigloc
+\newif\if@orgdate
+% \end{macrocode}
+%
+% \subsubsection{Standardoptionen}
+%
+% \changes{v2.1a}{1994/10/29}{Meldung bei \texttt{twoside}-Option in
+% "`scrlettr"' ge"andert}
+% \begin{option}{10pt}
+% \begin{option}{11pt}
+% \begin{option}{12pt}
+% \begin{option}{oneside}
+% \begin{option}{twoside}
+% \begin{option}{draft}
+% \begin{option}{final}
+% \begin{option}{a4paper}
+% \changes{v2.6a}{2001/05/24}{Neue Standardoption}
+% \begin{macrocode}
+\DeclareOption{10pt}{\renewcommand*\@ptsize{0}}
+\DeclareOption{11pt}{\renewcommand*\@ptsize{1}}
+\DeclareOption{12pt}{\renewcommand*\@ptsize{2}}
+\DeclareOption{oneside}{\@twosidefalse \@mparswitchfalse}
+\DeclareOption{twoside}{\@twosidetrue \@mparswitchtrue%
+ \ClassWarningNoLine{scrlettr}{This is no twoside-layout but openright!}
+}
+\DeclareOption{draft}{\overfullrule 5pt}
+\DeclareOption{final}{\setlength\overfullrule{0pt}}
+\DeclareOption{a4paper}{
+ \setlength{\paperwidth}{210mm}
+ \setlength{\paperheight}{297mm}}
+% \end{macrocode}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+%
+% \subsubsection{Optionen f"ur das Adre"sfenster}
+%
+% \begin{option}{wlocfield}
+% \begin{option}{slocfield}
+% Mit Hilfe der Optione |wlocfield| kann der Platz neben dem Adre"sfeld
+% vergr"o"sert werden. Mit |slocfield| wird der normale, kleine Platz
+% verwendet.
+% \begin{macrocode}
+\DeclareOption{wlocfield}{\@bigloctrue}
+\DeclareOption{slocfield}{\@biglocfalse}
+% \end{macrocode}
+% \end{option}
+% \end{option}
+%
+% \subsubsection{Optionen f"ur das Datum}
+%
+% \begin{option}{orgdate}
+% \changes{v2.4c}{1997/11/25}{Neue Option}
+% \begin{option}{scrdate}
+% \changes{v2.4c}{1997/11/25}{Neue Option}
+% \begin{macrocode}
+\DeclareOption{orgdate}{\@orgdatetrue}
+\DeclareOption{scrdate}{\@orgdatefalse}
+% \end{macrocode}
+% \end{option}
+% \end{option}
+%
+% \subsubsection{Optionenwahl}
+%
+% Standard sind bei |scrlettr| die Optionen |12pt|, |oneside|, |final| und
+% |slocfield|. Diese k"onnen durch explizite Optionsangabe "uberschrieben
+% werden.
+% \begin{macrocode}
+\ExecuteOptions{12pt,oneside,final,slocfield,a4paper}
+\ProcessOptions
+\input{size1\@ptsize.clo}
+% \end{macrocode}
+%
+% \subsection{"`Alte"' Fontauswahlbefehle}
+%
+% \begin{macro}{\rm}
+% \begin{macro}{\sf}
+% \begin{macro}{\tt}
+% \begin{macro}{\bf}
+% \begin{macro}{\it}
+% \begin{macro}{\sl}
+% \begin{macro}{\sc}
+% \begin{macro}{\sfb}
+% \changes{v2.3b}{1996/01/14}{nicht mehr mathematisch.}
+% \changes{v2.3b}{1996/01/14}{Keine Unterscheidung mehr f"ur den
+% Kompatibilit"atsmodus.}
+% Die alten Font-Auswahlbefehle werden zwar noch unterst"utzt, sollten
+% aber in der Regel nicht mehr verwendet werden, da sie nach dem alten
+% Fontauswahlverfahren arbeiten. Im Kompatibilit"atsmodus wurde dies
+% beim nicht standardgem"a"sen Befehl |\sfb| noch verst"arkt.
+% \begin{macrocode}
+\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
+\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
+\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
+\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
+\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
+\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl}
+\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc}
+\DeclareOldFontCommand{\sfb}{\normalfont\sffamily\bfseries}{\@nomath\sfb}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Font-Variablen}
+%
+% \begin{macro}{\descfont}
+% \begin{macro}{\sectfont}
+% \changes{v2.3b}{1996/01/14}{\cs{sectfont} wird nun verwendet}
+% \begin{macro}{\pnumfont}
+% \begin{macro}{\headfont}
+% \begin{macro}{\capfont}
+% \begin{macro}{\caplabelfont}
+% Auch in der |scrlettr|-class werden verschiedene Font-Variablen verwendet.
+% \begin{macrocode}
+\newcommand*\descfont{\sffamily\bfseries}
+\newcommand*\sectfont{\sffamily\bfseries}
+\newcommand*\pnumfont{\normalfont}
+\newcommand*\headfont{\slshape}
+\newcommand*\capfont{\normalfont}
+\newcommand*\caplabelfont{\normalfont}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Standard-Labels}
+%
+% \changes{v2.2b}{1995/02/16}{Sprachauswahl an german.sty Version 2.5b
+% angepa"st}
+% \begin{macro}{\captionsenglish}
+% \begin{macro}{\captionsUSenglish}
+% \begin{macro}{\captionsamerican}
+% \changes{v2.4c}{1997/11/25}{american identisch mit USenglish definiert.}
+% \begin{macro}{\captionsbritish}
+% \changes{v2.4c}{1997/11/25}{british identisch mit english definiert.}
+% \begin{macro}{\captionsUKenglish}
+% \changes{v2.4c}{1997/11/25}{UKenglish identisch mit english definiert.}
+% \begin{macro}{\captionsgerman}
+% \changes{v2.2a}{1994/01/26}{{\cmd\subjectname} korrigiert}
+% \begin{macro}{\captionsaustrian}
+% \begin{macro}{\captionsngerman}
+% \changes{v2.5}{1999/09/08}{ngerman neu und identisch mit german.}
+% \changes{v2.5b}{2000/01/03}{ngerman korrigiert.}
+% \begin{macro}{\captionsfrench}
+% \begin{macro}{\captionsitalian}
+% \changes{v2.3e}{1996/05/31}{Sprachspende von Simone Naldi}
+% \begin{macro}{\captionsspanish}
+% \changes{v2.4c}{1997/11/25}{Sprachspende von Ralph J. Hangleiter}
+% Bei |scrlettr| gibt es eine gro"se Anzahl von Label-Variablen, die es
+% in den Standard-classes nicht gibt, die also auch nicht in
+% Sprachanpassungen wie |german.sty| oder |german3.sty| vorhanden sind.
+% Deshalb ist es notwendig diese Labels hier neu zu definieren. Weil es
+% in fr"uheren Versionen zu Problemen damit gekommen ist, werden diese
+% jedoch erst bei |\begin{document}| definiert. Sollen sie nachtr"aglich
+% ge"andert werden, mu"s dies \emph{nach} |\begin{document}| geschehen.
+%
+% \begin{macrocode}
+\AtBeginDocument{
+ \def\captionsenglish{%
+ \def\yourrefname{Your ref.}
+ \def\yourmailname{Your letter of}
+ \def\myrefname{Our ref.}
+ \def\customername{Customer no.}
+ \def\invoicename{Invoice no.}
+ \def\subjectname{Subject}
+ \def\ccname{cc}
+ \def\enclname{encl}
+ \def\headtoname{To}
+ \def\datename{Date}
+ \def\pagename{Page}}
+ \let\captionsUSenglish=\captionsenglish
+ \let\captionsamerican=\captionsUSenglish
+ \let\captionsbritish=\captionsenglish
+ \let\captionsUKenglish=\captionsenglish
+ \def\captionsgerman{%
+ \def\yourrefname{Ihr Zeichen}
+ \def\yourmailname{Ihr Schreiben vom}
+ \def\myrefname{Unser Zeichen}
+ \def\customername{Kundennummer}
+ \def\invoicename{Rechnungsnummer}
+ \def\subjectname{Betr.}
+ \def\ccname{Kopien an}
+ \def\enclname{Anlagen}
+ \def\headtoname{An}
+ \def\datename{Datum}
+ \def\pagename{Seite}}
+ \let\captionsaustrian=\captionsgerman
+ \let\captionsngerman=\captionsgerman
+ \def\captionsfrench{%
+ \def\yourrefname{Vos r\'ef\'erences}
+ \def\yourmailname{Votre lettre du}
+ \def\myrefname{Nos r\'ef\'erences}
+ \def\customername{Num\'ero de client}
+ \def\invoicename{Num\'ero de facture}
+ \def\subjectname{Concernant}
+ \def\ccname{Copie \`a}
+ \def\enclname{Annexes}
+ \def\headtoname{A}
+ \def\datename{Date}
+ \def\pagename{Page}}
+ \def\captionsitalian{%
+ \def\yourrefname{Vs./Rif.}
+ \def\yourmailname{Vs.~lettera del}
+ \def\myrefname{Ns./Rif.}
+ \def\customername{Nr.~cliente}
+ \def\invoicename{Nr.~fattura}
+ \def\subjectname{Oggetto}
+ \def\ccname{Per conoscenza}
+ \def\enclname{Allegato}
+ \def\headtoname{A}
+ \def\datename{Data}
+ \def\pagename{Pagina}}
+ \def\captionsspanish{%
+ \def\yourrefname{Su ref.}
+ \def\yourmailname{Su carta de}
+ \def\myrefname{Nuestra ref.}
+ \def\customername{No. de cliente}
+ \def\invoicename{No. de factura}
+ \def\subjectname{Asunto}
+ \def\ccname{Copias}
+ \def\enclname{Adjunto}
+ \def\headtoname{A}
+ \def\datename{Fecha}
+ \def\pagename{P\'agina}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\dateenglish}
+% \begin{macro}{\dateUSenglish}
+% \begin{macro}{\dateamerican}
+% \changes{v2.4c}{1997/11/25}{american identisch mit USenglish definiert.}
+% \begin{macro}{\datebritish}
+% \changes{v2.4c}{1997/11/25}{british identisch mit english definiert.}
+% \begin{macro}{\dateUKenglish}
+% \changes{v2.4c}{1997/11/25}{UKenglish identisch mit english definiert.}
+% \begin{macro}{\dategerman}
+% \begin{macro}{\dateaustrian}
+% \begin{macro}{\datengerman}
+% \changes{v2.5}{1999/09/08}{ngerman neu und identisch mit german.}
+% \begin{macro}{\datefrench}
+% \begin{macro}{\dateitalian}
+% \changes{v2.3e}{1996/05/31}{Ich hoffe, da"s das stimmt}
+% \begin{macro}{\datespanish}
+% \changes{v2.4c}{1997/11/25}{Ich hoffe, da"s das stimmt}
+% \changes{v2.4c}{1997/11/25}{Datumsumschaltung nicht mehr zwingend.}
+% Dar"uber hinaus ist auch das Datumsformat sprachabh"angig. Dies wird
+% hier ebenfalls beachtet.
+% \begin{macrocode}
+ \if@orgdate
+ \ifx\dateenglish\undefined
+ \def\dateenglish{\def\today{\number\day/\number\month/\number\year}}
+ \fi
+ \else
+ \def\dateenglish{\def\today{\number\day/\number\month/\number\year}}
+ \def\dateUSenglish{\def\today{\number\month/\number\day/\number\year}}
+ \let\datebritish=\dateenglish
+ \let\dateUKenglish=\dateenglish
+ \let\dateamerican=\dateUSenglish
+ \def\dategerman{\def\today{\number\day.\,\number\month.\,\number\year}}
+ \let\dateaustrian=\dategerman
+ \let\datengerman=\dategerman
+ \let\datefrench=\dategerman
+ \let\dateitalian=\dategerman
+ \let\datespanish=\dategerman
+ \fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% Zum Schlu"s findet noch die eigentliche Auswahl statt. Diese orientiert
+% sich nun an der Auswahl nach german.sty 2.5b und verwendet keine festen
+% Sprachzuordnungen mehr. Daf"ur sind nun keine Erweiterungen f"ur andere
+% Sprachen mehr m"oglich.
+% \changes{v2.2c}{1995/03/20}{Im Sprachenvergleich fehlten die "`="' hinter
+% {\cmd\language}}
+% \changes{v2.4c}{1997/11/25}{Sprachauswahl um american, british, UKenglish
+% und spanish erweitert}
+% \changes{v2.5}{1999/09/08}{Sprachauswahl um ngermen erweitert}
+% \changes{v2.5b}{2000/01/20}{Reaktivierung der Sprache geschieht nun
+% via \cs{languagename}, soweit dies
+% m"oglich ist}
+% \changes{v2.5e}{2000/07/14}{Workaround f"ur Sprache nohyphenation durch
+% Format mit Babel-Erweiterung aber kein
+% Babel package geladen}
+% \begin{macrocode}
+ \captionsenglish
+ \dateenglish
+ \ifx\languagename\undefined
+ \ClassWarningNoLine{scrlettr}{\string\languagename\space not
+ defined, using \string\language.\MessageBreak
+ This may result in use of wrong language!\MessageBreak
+ You should use a compatible language
+ package\MessageBreak
+ (e.g. `Babel', `german', `french', ...)}
+ \ifx\l@american\undefined\else\ifnum\language=\l@american
+ \captionsamerican
+ \dateamerican
+ \fi\fi
+ \ifx\l@british\undefined\else\ifnum\language=\l@british
+ \captionsbritish
+ \datebritish
+ \fi\fi
+ \ifx\l@UKenglish\undefined\else\ifnum\language=\l@UKenglish
+ \captionsUKenglish
+ \dateUKenglish
+ \fi\fi
+ \ifx\l@USenglish\undefined\else\ifnum\language=\l@USenglish
+ \captionsUSenglish
+ \dateUSenglish
+ \fi\fi
+ \ifx\l@austrian\undefined\else\ifnum\language=\l@austrian
+ \captionsaustrian
+ \dateaustrian
+ \fi\fi
+ \ifx\l@german\undefined\else\ifnum\language=\l@german
+ \captionsgerman
+ \dategerman
+ \fi\fi
+ \ifx\l@ngerman\undefined\else\ifnum\language=\l@ngerman
+ \captionsngerman
+ \datengerman
+ \fi\fi
+ \ifx\l@french\undefined\else\ifnum\language=\l@french
+ \captionsfrench
+ \datefrench
+ \fi\fi
+ \ifx\l@italian\undefined\else\ifnum\language=\l@italian
+ \captionsitalian
+ \dateitalian
+ \fi\fi
+ \ifx\l@spanish\undefined\else\ifnum\language=\l@spanish
+ \captionsspanish
+ \datespanish
+ \fi\fi
+ \else
+ \edef\@tempa{nohyphenation}
+ \ifx\languagename\@tempa
+ \ClassWarningNoLine{scrlettr}
+ {You've selected language ``\languagename''.\MessageBreak
+ Maybe your LaTeX format contains Babel extension\MessageBreak
+ but you have not selected a language using\MessageBreak
+ Babel package.\MessageBreak
+ Please select another language!\MessageBreak
+ Only as a workaround english captions and date\MessageBreak
+ will be used}
+ \else
+ \expandafter\selectlanguage\expandafter{\languagename}
+ \ClassInfo{scrlettr}{used language is \languagename}
+ \fi
+ \fi
+}
+% \end{macrocode}
+%
+% \subsection{Seitenspiegel}
+%
+% |scrlettr| arbeitet mit einem festen Seitenspiegel, der f"ur Briefe
+% im A4-Format ausgelegt ist.
+% \changes{v2.2c}{1995/05/25}{{\cmd\headheight} und {\cmd\textheight}
+% ge"andert}
+%
+% \begin{macrocode}
+\oddsidemargin 0in
+\evensidemargin 0in
+\marginparwidth 0.9in
+\marginparsep 0.1in
+\marginparpush 0.45\baselineskip
+\topmargin -19mm % mk 941012, was: -15.5mm
+\headheight 23mm % mk 950411, was: 22mm
+\headsep 8mm % mk 941012, was: 9mm
+\footskip 20mm % mk 941012, was: 30mm
+\textheight 226mm % mk 950411, was: 217mm
+\textwidth 159.2mm
+
+\parskip 0.5\baselineskip % mk 941012
+\parindent 0pt
+\smallskipamount=0.5\parskip
+\medskipamount =\parskip
+\bigskipamount =2\parskip
+\footnotesep 0.8\baselineskip
+\skip\footins 0.75\baselineskip plus 2pt minus 4pt
+\skip\@mpfootins =\skip\footins
+\columnsep 1cc
+\columnseprule 0pt
+% \end{macrocode}
+%
+% \subsection{Flie"sumgebungen}
+%
+% Es folgen die Einstellungen f"ur Abbildungen
+% \begin{macrocode}
+\floatsep 1\baselineskip plus 2pt minus 2pt
+\textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 1\baselineskip plus 2pt minus 2pt
+\dblfloatsep 1\baselineskip plus 2pt minus 2pt
+\dbltextfloatsep 20pt plus 2pt minus 4pt
+\@fptop 0pt plus 1fil
+\@fpsep 0.7\baselineskip plus 2fil
+\@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil
+\@dblfpsep 0.7\baselineskip plus 2fil
+\@dblfpbot 0pt plus 1fil
+% \end{macrocode}
+% und f"ur Flie"stabellen
+% \begin{macrocode}
+\arraycolsep 5pt
+\tabcolsep 6pt
+\arrayrulewidth 0.4pt
+\doublerulesep 2pt
+\fboxsep 3pt
+\fboxrule 0.4pt
+\tabbingsep \labelsep
+% \end{macrocode}
+%
+% \subsection{Listen-Umgebungen}
+%
+% Die Einstellungen f"ur Listenumgebungen entsprechen im Wesentlichen
+% den gewohnten.
+% \begin{macrocode}
+\topsep 0.25\baselineskip
+\partopsep 0pt
+\itemsep 0.25\baselineskip
+\parsep 0.25\baselineskip % ak: 1\baselineskip
+\labelsep .5em
+\leftmargini 2.5em
+\leftmarginii 2.2em
+\leftmarginiii 1.87em
+\leftmarginiv 1.7em
+\leftmarginv 1em
+\leftmarginvi 1em
+\leftmargin\leftmargini
+\labelwidth\leftmargini
+\advance\labelwidth-\labelsep
+\def\@listI{\leftmargin\leftmargini}
+\let\@listi\@listI
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+\@listi
+
+\@lowpenalty 51
+\@medpenalty 151
+\@highpenalty 301
+\@beginparpenalty -\@lowpenalty
+\@endparpenalty -\@lowpenalty
+\@itempenalty -\@lowpenalty
+
+\def\theenumi{\arabic{enumi}}
+\def\theenumii{\alph{enumii}}
+\def\theenumiii{\roman{enumiii}}
+\def\theenumiv{\Alph{enumiv}}
+\def\labelenumi{\theenumi.}
+\def\labelenumii{\theenumii)}
+\def\labelenumiii{\theenumiii.}
+\def\labelenumiv{\theenumiv.}
+\def\p@enumii{\theenumi}
+\def\p@enumiii{\theenumi\theenumii)}
+\def\p@enumiv{\p@enumiii\theenumiii}
+\def\labelitemi{$\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\triangleright$}
+\def\labelitemiv{$\cdot$}
+% \end{macrocode}
+%
+% Es sind alle im \textsf{KOMA-Script} Paket "ublichen Listenumgebungen
+% vorhanden:
+%
+% \subsubsection{"`description"'-Umgebung}
+% \begin{macrocode}
+\newenvironment{description}
+ {\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+ {\endlist}
+\newcommand\descriptionlabel[1]{\hspace\labelsep
+ \descfont #1}
+% \end{macrocode}
+%
+% \subsubsection{"`labeling"'-Umgebung}
+% \begin{macrocode}
+\newenvironment{labeling}[2][]
+ {\def\sc@septext{#1}
+ \list{}{\settowidth{\labelwidth}{#2#1}
+ \leftmargin\labelwidth \advance\leftmargin by \labelsep
+ \let\makelabel\labelinglabel}}
+ {\endlist}
+\newcommand\labelinglabel[1]{#1\hfil\sc@septext}
+% \end{macrocode}
+%
+% \subsubsection{"`verse"'-Umgebung}
+% \begin{macrocode}
+\newenvironment{verse}
+ {\let\\=\@centercr
+ \list{}{\itemsep \z@
+ \itemindent -1.5em%
+ \listparindent\itemindent
+ \rightmargin \leftmargin
+ \advance\leftmargin 1.5em}%
+ \item[]}
+ {\endlist}
+% \end{macrocode}
+%
+% \subsubsection{"`quotation"'- und "`quote"'-Umgebung}
+% \begin{macrocode}
+\newenvironment{quotation}
+ {\list{}{\listparindent 1em%
+ \itemindent \listparindent
+ \rightmargin \leftmargin
+ \parsep \z@ \@plus\p@}%
+ \item[]}
+ {\endlist}
+\newenvironment{quote}
+ {\list{}{\rightmargin\leftmargin}%
+ \item[]}
+ {\endlist}
+% \end{macrocode}
+%
+% \subsection{Feld-Variablen}
+%
+% \begin{macro}{\fromname}
+% \begin{macro}{\frombranch}
+% \begin{macro}{\fromsig}
+% \changes{v2.2b}{1995/02/16}{Direkte Verwendung von {\cmd\fromname}}
+% \begin{macro}{\fromaddress}
+% \begin{macro}{\fromplace}
+% \begin{macro}{\fromlocation}
+% \begin{macro}{\frombackaddress}
+% \begin{macro}{\telephonenum}
+% \begin{macro}{\varyourref}
+% \begin{macro}{\varyourmail}
+% \begin{macro}{\varmyref}
+% \begin{macro}{\varcustomer}
+% \begin{macro}{\varinvoice}
+% \begin{macro}{\varrefitemi}
+% \begin{macro}{\varrefitemii}
+% \begin{macro}{\varrefitemiii}
+% \begin{macro}{\varrefitemnamei}
+% \begin{macro}{\varrefitemnameii}
+% \begin{macro}{\varrefitemnameiii}
+% \begin{macro}{\@specialmail}
+% \begin{macro}{\@title}
+% \begin{macro}{\@subject}
+% Es gibt in |scrlettr| verschiedene Feld-Variablen, die alle mit
+% einer Zeichenkette belegt werden k"onnen, aber als leer
+% initialisiert werden.
+% \begin{macrocode}
+\def\fromname{}
+\def\frombranch{} % RTL 21.04.94
+\def\fromsig{\fromname}
+\def\fromaddress{}
+\def\fromplace{}
+\def\fromlocation{}
+\def\frombackaddress{}
+\def\telephonenum{}
+\def\varyourref{}
+\def\varyourmail{}
+\def\varmyref{}
+\def\varcustomer{}
+\def\varinvoice{}
+\def\varrefitemi{}
+\def\varrefitemii{}
+\def\varrefitemiii{}
+\def\varrefitemnamei{}
+\def\varrefitemnameii{}
+\def\varrefitemnameiii{}
+\def\@specialmail{}
+\def\@title{}
+\def\@subject{}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\name}
+% \begin{macro}{\branch}
+% \begin{macro}{\signature}
+% \begin{macro}{\adress}
+% \begin{macro}{\place}
+% \begin{macro}{\location}
+% \begin{macro}{\backaddress}
+% \begin{macro}{\telephone}
+% \begin{macro}{\yourref}
+% \begin{macro}{\yourmail}
+% \begin{macro}{\myref}
+% \begin{macro}{\customer}
+% \begin{macro}{\invoice}
+% \begin{macro}{\refitemi}
+% \begin{macro}{\refitemii}
+% \begin{macro}{\refitemiii}
+% \begin{macro}{\refitemnamei}
+% \begin{macro}{\refitemnameii}
+% \begin{macro}{\refitemnameiii}
+% \begin{macro}{\specialmail}
+% \begin{macro}{\title}
+% \begin{macro}{\subject}
+% F"ur jedes dieser Felder wird ein Befehl definiert, mit dem der
+% Inhalt gesetzt werden kann, ohne da"s zu |\renewcommand| oder
+% |\def| gegriffen werden mu"s. F"ur |\fromaddress| und
+% |\fromlocation| kann mit |\address| bzw.
+% |\location| auch eine komplexe \LaTeX-Definition
+% gesetzt werden. F"ur die benutzerspezifischen Felder |\varrefitemi|,
+% |\varrefitemii|, |\varrefitemiii| kann au"serdem jeweils ein Titel
+% gesetzt werden.
+% \begin{macrocode}
+\def\name#1 {\def\fromname{#1}}
+\def\branch#1 {\def\frombranch{#1}} % RTL 21.04.94
+\def\signature#1{\def\fromsig{#1}}
+\long\def\address#1{\def\fromaddress{#1}}
+\def\place#1 {\def\fromplace{#1}}
+\long\def\location#1{\def\fromlocation{#1}}
+\def\backaddress#1{\def\frombackaddress{#1}}
+\def\telephone#1{\def\telephonenum{#1}}
+\def\yourref#1 {\def\varyourref{#1}}
+\def\yourmail#1 {\def\varyourmail{#1}}
+\def\myref#1 {\def\varmyref{#1}}
+\def\customer#1 {\def\varcustomer{#1}}
+\def\invoice#1 {\def\varinvoice{#1}}
+\def\refitemi#1 {\def\varrefitemi{#1}}
+\def\refitemii#1{\def\varrefitemii{#1}}
+\def\refitemiii#1{\def\varrefitemiii{#1}}
+\def\refitemnamei#1{\def\varrefitemnamei{#1}}
+\def\refitemnameii#1{\def\varrefitemnameii{#1}}
+\def\refitemnameiii#1{\def\varrefitemnameiii{#1}}
+\def\specialmail#1{\def\@specialmail{#1}}
+\def\title#1 {\def\@title{#1}}
+\def\subject#1 {\def\@subject{{\bf #1}}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\firsthead}
+% \begin{macro}{\firstfoot}
+% \begin{macro}{\nexthead}
+% \begin{macro}{\nextfoot}
+% Bei der Gelegenheit werden auch gleich die Befehle zum Setzen
+% der Felder f"ur die Kopf- und Fu"szeilen der ersten und aller
+% weiterer Seiten eines Briefes definiert.
+% \begin{macrocode}
+\long\def\firsthead#1{\def\@firsthead{#1}}
+\long\def\firstfoot#1{\def\@firstfoot{#1}}
+\long\def\nexthead#1{\def\@nexthead{#1}}
+\long\def\nextfoot#1{\def\@nextfoot{#1}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Faltmarken, Adre"sfeld, Titel}
+%
+% Es werden Schalter f"ur Faltmarken, Adre"sfeld und Betreff definiert.
+% \begin{macrocode}
+\newif\if@fold
+\newif\if@afield
+\newif\if@subj
+\newif\if@subjafter
+% \end{macrocode}
+%
+% \begin{macro}{\foldmarkson}
+% \begin{macro}{\foldmarksoff}
+% Die Faltmarken k"onnen mit |\foldmarkson| ein- und mit |\foldmarksoff|
+% abgeschaltet werden. Dies ist f"ur jeden Brief getrennt m"oglich.
+% \begin{macrocode}
+\def\foldmarkson {\@foldtrue}
+\def\foldmarksoff {\@foldfalse}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\addrfieldon}
+% \begin{macro}{\addrfieldoff}
+% Das Adre"sfeld f"ur Fensterumschl"age kann mit |\addrfieldon| ein- und
+% mit |\addrfieldoff| abgeschaltet werden. Dies ist f"ur jeden Brief
+% getrennt m"oglich.
+% \begin{macrocode}
+\def\addrfieldon {\@afieldtrue}
+\def\addrfieldoff {\@afieldfalse}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\subjecton}
+% \begin{macro}{\subjectoff}
+% Ein Betreff-Titel kann mit |\subjecton| ein- und mit |\subjectoff|
+% abgeschaltet werden. Dies ist f"ur jeden Brief getrennt m"oglich.
+% \begin{macrocode}
+\def\subjecton {\@subjtrue}
+\def\subjectoff {\@subjfalse}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\subjectafteron}
+% \begin{macro}{\subjectafteroff}
+% \changes{v2.4a}{1997/06/06}{Neue Befehle \cs{subjectafteron} und
+% \cs{subjectafteroff}.}
+% In England und Frankreich scheint es teilweise "ublich zu sein, den Betreff
+% erst nach der Anrede und daf"ur zentriert zu setzen\footnote{Ich kann mir
+% nur m"uhsahm eine Bemerkung dazu verkneifen.}. Deshalb gibt es zwei neue
+% Befehle mit denen man f"ur jeden Brief getrennt etwas anderes einschalten
+% kann.
+% \begin{macrocode}
+\newcommand*\subjectafteron {\@subjaftertrue}
+\newcommand*\subjectafteroff{\@subjafterfalse}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% Zu Berechnung der Feldpositionen werden verschiedene
+% Dimensions-Variablen ben"otigt.
+% \begin{macrocode}
+\newdimen\sc@temp
+\newdimen\sc@@temp
+\newdimen\foldhskip
+\newdimen\foldvskipi
+\newdimen\foldvskipii
+\newdimen\foldvskipiii
+\newdimen\addrvskip
+\newdimen\addrindent
+\newdimen\addrwidth
+\newdimen\addrheight
+\newdimen\locwidth
+\newdimen\refvskip
+\newdimen\sigindent
+% \end{macrocode}
+%
+% F"ur alle Positionen gibt es Standardwerte. Diese Stellen sind leider
+% extrem druckerabh"angig. Es ist daher "au"serst wichtig, da"s der
+% Druckertreiber richtig eingestellt wird. Dazu kann die Testseite aus
+% dem Standardpaket verwendet werden.
+%
+% Die Breite des "`locfield"'s h"angt von den Optionen |wlocfield| und
+% |slocfield| ab und wird entweder zu $2/3$ oder $1/2$ der Restbreite
+% neben dem Adre"sfeld berechnet.
+%
+% \begin{macrocode}
+\foldhskip 3.5mm
+\foldvskipi 62mm % war: 65mm RTL
+\foldvskipii 45mm % mk 960531 (war: 40.5mm)
+\foldvskipiii 54mm % mk 960531 (war: 58.5mm)
+\addrvskip 7.5mm
+\addrindent 0mm
+\addrwidth 70mm
+\addrheight 35mm
+\locwidth\textwidth
+\advance\locwidth by -\addrwidth
+\if@bigloc % mk 940330
+ \advance\locwidth by \locwidth
+ \divide\locwidth by 3
+\else
+ \divide\locwidth by 2
+\fi
+\refvskip 5.5mm
+\sigindent 0mm
+% \end{macrocode}
+%
+% \subsection{Serienbriefe und Adre"sdateien}
+%
+% \begin{macro}{\adrentry}
+% \changes{v2.2b}{1995/05/25}{{\cmd\ifx} sicherer gemacht}
+% \begin{macro}{\adrchar}
+% Serienbriefe werden mit Hilfe der Funktionen |\adrentry| und
+% |\adrchar| und einer Adressdatei realisiert. Dar"uber hinaus
+% werden mit diesen Befehlen Abk"urzungen f"ur Adressen definiert.
+% \begin{macrocode}
+\def\adrentry#1#2#3#4#5#6#7#8{\def\@tempa{#1}\ifx \@tempa\@empty \else
+ \def\@tempa{#2}\ifx \@tempa\@empty
+ \expandafter\def\csname #8\endcsname{#1\\#3}
+ \else
+ \expandafter\def\csname #8\endcsname{#2 #1\\#3}
+ \fi \fi}
+\def\adrchar#1{}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Die Brief-Umgebung}
+%
+% \begin{environment}{letter}
+% \begin{macro}{\stopletter}
+% Diese Umgebung ist etwas anders definiert, als normalerweise von
+% \LaTeX gewohnt. Mit ihr k"onnen innerhalb eines Dokuments beliebig
+% viele Briefe erzeugt werden.
+% \begin{macrocode}
+\long\def\letter#1{\newpage
+ \if@twoside\ifodd\c@page\else \thispagestyle{empty}\null\newpage \fi\fi
+ \c@page\@ne \interlinepenalty=200 \@processto{#1}}
+\def\stopletter{}
+\def\endletter{\stopletter\@@par\pagebreak\@@par}
+\long\def\@processto#1{\expandafter\@xproc #1\\@@@\ifx\toaddress\@empty
+ \else\expandafter\@yproc #1@@@\fi}
+\long\def\@xproc #1\\#2@@@{\def\toname{#1}\def\toaddress{#2}}
+\long\def\@yproc #1\\#2@@@{\def\toaddress{#2}}
+% \end{macrocode}
+% \end{macro}
+% \end{environment}
+%
+% \begin{macro}{\stopbreaks}
+% \begin{macro}{\startbreaks}
+% Innerhalb von Briefen wird der Umbruch etwas anders gehandhabt.
+% Dadurch soll der Brieftext besser positioniert werden.
+% \begin{macrocode}
+\def\stopbreaks{\interlinepenalty \@M
+ \def\par{\@@par\nobreak}\let\\=\@nobreakcr
+ \let\vspace\@nobreakvspace}
+\def\@nobreakvspace{\@ifstar{\@nobreakvspacex}{\@nobreakvspacex}}
+\def\@nobreakvspacex#1{\ifvmode\nobreak\vskip #1\relax\else
+ \@bsphack\vadjust{\nobreak\vskip #1}\@esphack\fi}
+\def\@nobreakcr{\vadjust{\penalty\@M}\@ifstar{\@xnewline}{\@xnewline}}
+\def\startbreaks{\let\\=\@normalcr
+ \interlinepenalty 200\def\par{\@@par\penalty 200}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@foldmarks}
+% F"ur die Faltmarken m"ussen nicht nur Abst"ande definiert werden, es
+% wird auch ein Befehl ben"otigt, um die Faltmarken zu setzen.
+% \begin{macrocode}
+\def\@foldmarks{\if@fold \bgroup
+ \reversemarginpar\vspace{\foldvskipi}
+ \marginpar{\hspace{\foldhskip}\rule{2mm}{.2pt}} \vspace{\foldvskipii}
+ \marginpar{\hspace{\foldhskip}\rule{4mm}{.2pt}} \vspace{\foldvskipiii}
+ \marginpar{\hspace{\foldhskip}\rule{2mm}{.2pt}}
+ \vspace{-\foldvskipiii}\vspace{-\foldvskipii}\vspace{-\foldvskipi}
+ \egroup \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@addrfield}
+% Dasselbe gilt auch f"ur das Adre"sfeld f"ur Fensterumschl"age. Die
+% R"ucksendeadresse und die Briefart wird dabei unterstrichen.
+% \begin{macrocode}
+\def\@addrfield{\bgroup
+ \setbox0\vbox{\hsize\addrwidth
+ \ifx\frombackaddress\@empty \else
+ \underline{\scriptsize \sf \frombackaddress} \fi}
+ \setbox1\vbox{\hsize\addrwidth
+ \ifx\@specialmail\@empty \else
+ \underline{\@specialmail} \fi}
+ \setbox2\vbox{\hsize\addrwidth
+ \toname \\ \toaddress}
+ \vskip\addrvskip \hskip\addrindent
+ \vbox to \addrheight{%
+ \ifx\frombackaddress\@empty \else \box0 \fi
+ \ifx\@specialmail\@empty \else \vfil\box1 \fi
+ \vfil\box2\vfil}\egroup}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@locfield}
+% Das "`locfield"' wird mittels einer |minipage| gesetzt.
+% \begin{macrocode}
+\def\@locfield{\begin{minipage}[b]{\locwidth}\fromlocation\end{minipage}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@datefield}
+% Je nachdem, welche Felder definiert sind, mu"s eine gesch"aftsm"a"siger
+% Standardbrief oder ein eher pers"onliches Aussehen gew"ahlt werden.
+% \changes{v2.3e}{1996/05/31}{Abstand zwischen Ort und Datum eingef"ugt}
+% \begin{macrocode}
+\newif\if@ref
+\def\@datefield{\@reffalse
+ \ifx\varyourref\@empty \else \@reftrue \fi
+ \ifx\varyourmail\@empty \else \@reftrue \fi
+ \ifx\varmyref\@empty \else \@reftrue \fi
+ \ifx\varcustomer\@empty \else \@reftrue \fi
+ \ifx\varinvoice\@empty \else \@reftrue \fi
+ \ifx\varrefitemi\@empty \else \@reftrue \fi
+ \ifx\varrefitemii\@empty \else \@reftrue \fi
+ \ifx\varrefitemiii\@empty \else \@reftrue \fi
+ \vskip -\parskip
+ \vskip \refvskip
+ \if@ref
+ \ifx\varyourref\@empty \else
+ \settowidth{\sc@temp}{\varyourref}
+ \setbox0\hbox{\scriptsize \sf \yourrefname}
+ \ifdim \sc@temp > \wd0 \sc@@temp\sc@temp \else \sc@@temp\wd0 \fi
+ \parbox[t]{\sc@@temp}{\noindent \box0\par \varyourref}\hfill
+ \fi
+ \ifx\varyourmail\@empty \else
+ \settowidth{\sc@temp}{\varyourmail}
+ \setbox0\hbox{\scriptsize \sf \yourmailname}
+ \ifdim \sc@temp > \wd0 \sc@@temp\sc@temp \else \sc@@temp\wd0 \fi
+ \parbox[t]{\sc@@temp}{\noindent \box0\par \varyourmail}\hfill
+ \fi
+ \ifx\varmyref\@empty \else
+ \settowidth{\sc@temp}{\varmyref}
+ \setbox0\hbox{\scriptsize \sf \myrefname}
+ \ifdim \sc@temp > \wd0 \sc@@temp\sc@temp \else \sc@@temp\wd0 \fi
+ \parbox[t]{\sc@@temp}{\noindent \box0\par \varmyref}\hfill
+ \fi
+ \ifx\varcustomer\@empty \else
+ \settowidth{\sc@temp}{\varcustomer}
+ \setbox0\hbox{\scriptsize \sf \customername}
+ \ifdim \sc@temp > \wd0 \sc@@temp\sc@temp \else \sc@@temp\wd0 \fi
+ \parbox[t]{\sc@@temp}{\noindent \box0\par \varcustomer}\hfill
+ \fi
+ \ifx\varinvoice\@empty \else
+ \settowidth{\sc@temp}{\varinvoice}
+ \setbox0\hbox{\scriptsize \sf \invoicename}
+ \ifdim \sc@temp > \wd0 \sc@@temp\sc@temp \else \sc@@temp\wd0 \fi
+ \parbox[t]{\sc@@temp}{\noindent \box0\par \varinvoice}\hfill
+ \fi
+ \ifx\varrefitemi\@empty \else
+ \settowidth{\sc@temp}{\varrefitemi}
+ \setbox0\hbox{\scriptsize \sf \varrefitemnamei}
+ \ifdim \sc@temp > \wd0 \sc@@temp\sc@temp \else \sc@@temp\wd0 \fi
+ \parbox[t]{\sc@@temp}{\noindent \box0\par \varrefitemi}\hfill
+ \fi
+ \ifx\varrefitemii\@empty \else
+ \settowidth{\sc@temp}{\varrefitemii}
+ \setbox0\hbox{\scriptsize \sf \varrefitemnameii}
+ \ifdim \sc@temp > \wd0 \sc@@temp\sc@temp \else \sc@@temp\wd0 \fi
+ \parbox[t]{\sc@@temp}{\noindent \box0\par \varrefitemii}\hfill
+ \fi
+ \ifx\varrefitemiii\@empty \else
+ \settowidth{\sc@temp}{\varrefitemiii}
+ \setbox0\hbox{\scriptsize \sf \varrefitemnameiii}
+ \ifdim \sc@temp > \wd0 \sc@@temp\sc@temp \else \sc@@temp\wd0 \fi
+ \parbox[t]{\sc@@temp}{\noindent \box0\par \varrefitemiii}\hfill
+ \fi
+ \ifx\@date\@empty \else
+ \settowidth{\sc@temp}{\@date}
+ \setbox0\hbox{\scriptsize \sf \datename}
+ \ifdim \sc@temp > \wd0 \sc@@temp\sc@temp \else \sc@@temp\wd0 \fi
+ \parbox[t]{\sc@@temp}{\noindent \box0\par \@date}
+ \fi
+ \par
+ \vspace{2.5\baselineskip}
+ \else
+ {\ifx\@date\@empty \else \raggedleft\fromplace\ \@date\par \fi}
+ \vspace{1.5\baselineskip}
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\maketitle}
+% \changes{v2.3b}{1996/01/14}{Verwendung von \cs{sectfont} f"ur den
+% \cs{title}.}
+% \begin{macro}{\@subjfield}
+% \changes{v2.6d}{2001/10/19}{\cs{centerline} durch \cs{centering}
+% ersetzt}
+% Der eigentliche Titel wir mit |\maketitle| gesetzt. Dies sollte
+% jedoch ebenso wie der Betreff \emph{nicht} manuell geschehen.
+% \begin{macrocode}
+\def\maketitle{\ifx\@title\@empty \else
+ {\centering \LARGE \sectfont \@title\par}
+ \vspace{1\baselineskip} \fi}
+\def\@subjfield{{%
+ \if@subjafter%
+ \centering%
+ \else%
+ \if@subj\ifx\@subject\@empty\else\subjectname:\ \fi\fi
+ \@subject\par\nobreak\vspace{1\baselineskip}%
+ \fi}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\opening}
+% Denn beim Er"offnungsgru"s mit |\opening| wird neben s"amtlichen
+% Feldern auch der Titel und der Betreff gesetzt.
+% \begin{macrocode}
+\def\opening#1{\thispagestyle{firstpage} \null \@foldmarks
+ \if@afield \@addrfield \hfill \@locfield \par \fi
+ \@datefield
+ \maketitle
+ \if@subjafter\else\@subjfield\fi
+ #1\par%
+ \vspace{0.5\baselineskip}% added by unknown
+ \nobreak%
+ \if@subjafter\@subjfield\fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\closing}
+% \changes{v2.2b}{1995/02/16}{{\cmd\fromsig} wird nicht mehr auf {\cmd\empty}
+% getestet sondern direkt eingesetzt}
+% \changes{v2.3b}{1996/01/14}{Abstand zwischen Schlu"sgru"s und Signatur
+% erh"oht}
+% \changes{v2.5d}{2000/06/10}{Abstand zwischen Schlu"sgru"s und
+% Signatur variabel}
+% Au"ser dem Er"offnungsgru"s mit |\opening| gibt es nat"urlich auch
+% einen Schlu"sgru"s mit |\closing|, bei dem au"serdem die
+% Unterschrift u."a. gesetzt wird.
+% \begin{macro}{\presig@skip}
+% \changes{v2.5d}{2000/06/10}{Neues Makro, das den Abstand zwischen
+% Schlu"sgru"s und Signatur beinhaltet}
+% \begin{macro}{\setpresigskip}
+% \changes{v2.5d}{2000/06/10}{Neues Makro, das den Abstand zwischen
+% Schlu"sgru"s und Signatur setzt}
+% Das Makro |\presig@skip| beinhaltet dabei den Abstand zwischen Schlu"sgru"s
+% und Signatur. Da der Wert "uber ein Benutzerinterface per |\setpresigskip|
+% gesetzt wird, mu"s hier kein kostbares L"angenregister (skip oder dim)
+% verschwendet werden, sondern ein Makro reicht aus. In |\setpresigskip| wird
+% allerdings noch sichergestellt, da"s die Fehlermeldung bei falschem
+% Parameter m"oglichst nicht erst bei Verwendung auftritt.
+% \begin{macrocode}
+\newcommand*\presig@skip{}
+\newcommand*{\setpresigskip}[1]{%
+ \begingroup%
+ \setlength{\@tempdima}{#1}%
+ \endgroup%
+ \edef\presig@skip{#1}}
+\setpresigskip{2\baselineskip}
+\long\def\closing#1{\par\nobreak\vspace{0.5\baselineskip}
+ \stopbreaks \noindent \sc@temp\textwidth \advance\sc@temp by
+ -\sigindent \hspace{\sigindent}%
+ \parbox{\sc@temp}{\raggedright\ignorespaces #1\mbox{}\\[\presig@skip]
+ \fromsig\strut}\par
+ \vspace{1.5\baselineskip}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ps}
+% Ebenfalls m"oglich ist ein Postscriptum. Dieser Befehl erwartet
+% das Postscriptum nicht als Argument, sondern schaltet zum Nachtext
+% um.
+% \begin{macrocode}
+\def\ps{\par\startbreaks}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\cc}
+% Dar"uber hinaus gibt es noch einen Verteiler. Dieser wird
+% sauber formatiert.
+% \changes{v2.6}{2001/01/03}{\cs{def} durch \cs{newcommand*} ersetzt.}
+% \begin{macro}{\ccnameseparator}
+% \changes{v2.6}{2001/01/03}{Die Zeichen nach \cs{ccname} kann frei gew"ahlt
+% werden. Voreinstellung ist wie bisher Doppelpunkt
+% gefolgt von einem Leerzeichen.}
+% \begin{macrocode}
+\newcommand*{\ccnameseparator}{: }
+\newcommand*{\cc}[1]{\par\noindent\parbox[t]{\textwidth}
+ {\@hangfrom{\ccname\ccnameseparator}%
+ \ignorespaces #1\strut}\par}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\encl}
+% Auch Anlagen werden ordentlich gesetzt.
+% \changes{v2.4a}{1997/06/06}{Der Doppelpunkt bei den Anlagen wird nur noch
+% gesetzt, wenn \cs{enclname} nicht leer ist.}
+% \changes{v2.6}{2001/01/03}{\cs{def} durch \cs{newcommand*} ersetzt.}
+% \begin{macro}{\enclnameseparator}
+% \changes{v2.6}{2001/01/03}{Die Zeichen nach \cs{enclname} kann frei gew"ahlt
+% werden. Voreinstellung ist wie bisher Doppelpunkt
+% gefolgt von einem Leerzeichen.}
+% \begin{macrocode}
+\newcommand*{\enclnameseparator}{: }
+\newcommand*{\encl}[1]{\par\noindent%
+ \parbox[t]{\textwidth}{%
+ \ifx\enclname\@empty\else\@hangfrom{\enclname\enclnameseparator}\fi%
+ \ignorespaces #1\strut}\par}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\footnoterule}
+% Fu"snoten werden durch eine Linie abgetrennt. Sie werden wie im gesamten
+% \textsf{KOMA-Script} Paket gewohnt formatiert.
+% \begin{macrocode}
+\def\footnoterule{\kern-1\p@
+ \hrule width 0.4\columnwidth
+ \kern .6\p@}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\deffootnote}
+% \changes{v2.4b}{1997/08/15}{Neues Makro zur Definition der Gestalt von
+% Fu"snoten.}
+% Dieses Makro erlaubt einen optionalen und erwartet drei weitere Parameter.
+% Der erste, optionale gibt den Einzug der ersten Zeile des Fu"snotentextes
+% vom linken Rand an. Die Fu"snotenmarkierungen werden rechtsb"undig in diesen
+% Einzug gesetzt. Der zweite, also erste nicht optionale Parameter gibt den
+% Einzug jeder weiteren Zeile des Fu"snotentextes vom linken Rand an. Fehlt
+% der optionale Parameter so ist er gleich diesem. Der dritte, also zweite
+% nicht optionale Parameter gibt den zus"atzlichen Einzug jedes weiteren
+% Absatzes einer Fu"snote an. Der letzte Parameter schlie"slich bestimmt die
+% Ausgabe der Fu"snotenmarkierung in der Fu"snote. Diese wird zus"atzlich in
+% eine \verb|\hbox| gesetzt.
+% \begin{macrocode}
+\newcommand\deffootnote[4][]{%
+ \long\def\@makefntext##1{%
+ \edef\@tempa{#1}\ifx\@tempa\@empty
+ \@setpar{\@@par
+ \@tempdima = \hsize
+ \addtolength{\@tempdima}{-#2}
+ \parshape \@ne #2 \@tempdima}%
+ \else
+ \@setpar{\@@par
+ \@tempdima = \hsize
+ \addtolength{\@tempdima}{-#1}
+ \@tempdimb = \hsize
+ \addtolength{\@tempdimb}{-#2}
+ \parshape \tw@ #1 \@tempdima #2 \@tempdimb}%
+ \fi
+ \par
+ \parindent #3\noindent
+ \hbox to \z@{\hss\@@makefnmark}##1}
+% \end{macrocode}
+% \begin{macro}{\@@makefnmark}
+% \changes{v2.4b}{1997/08/15}{Neues Makro zum Setzen der Fu"snotenmarkierung
+% im Text}
+% \begin{macrocode}
+ \def\@@makefnmark{\hbox{#4}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\deffootnotemark}
+% \changes{v2.4b}{1997/08/15}{Neues Makro zur Definition der
+% Fu"snotenmarkierung im Text}
+% \begin{macrocode}
+\newcommand*\deffootnotemark[1]{\def\@makefnmark{\hbox{#1}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\thefootnotemark}
+% \changes{v2.4b}{1997/08/15}{Neues Makro, damit \cs{@thefnmark} auf
+% Anwenderebene verf"ugbar wird.}
+% \begin{macrocode}
+\def\thefootnotemark{\@thefnmark}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\textsuperscript}
+% \changes{v2.4b}{1997/08/15}{Neues Makro, damit \cs{@textsuperscript} auf
+% Anwenderebene verf"ugbar wird.}
+% \begin{macrocode}
+\let\textsuperscript\@textsuperscript
+% \end{macrocode}
+% \end{macro}
+% \changes{v2.4b}{1997/08/15}{Verwendung der neuen Makros zur
+% Fu"snotengestaltgebung.}
+% \begin{macro}{\@makefnmark}
+% \begin{macrocode}
+\deffootnote[1em]{1.5em}{1em}
+ {\textsuperscript{\thefootnotemark}}
+\deffootnotemark{\textsuperscript{\thefootnotemark}}
+% \end{macrocode}
+% \end{macro}
+%
+% Aufz"ahlungen werden mit arabischen Zahlen numeriert.
+% \begin{macrocode}
+\def\theequation{\arabic{equation}}
+% \end{macrocode}
+% \subsection{Verteilung von Text- und Flie"sumgebungen}
+% \begin{macrocode}
+\setcounter{topnumber}{2}
+\def\topfraction{.7}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.3}
+\setcounter{totalnumber}{3}
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+% \end{macrocode}
+%
+% \subsection{Seitenstil}
+%
+% \begin{macro}{\pagestyle}
+% \changes{v2.4a}{1997/06/06}{\cs{fromname} wird nur noch dann gesetzt, wenn
+% es nicht leer ist, wodurch \cs{name} genau wie
+% bei der Standard-Letter-Class optional ist.}
+% Neben den "ublichen Seitenstilen |plain|, |headings|, |myheadings|, |empty|
+% gibt es bei |scrlettr| noch einen Stil f"ur die erste Seite eines Briefs.
+% \begin{macrocode}
+\def\@firsthead{%
+ \parbox[b]{\textwidth}
+ {\begin{center}
+ \ifx\fromname\@empty\else
+ \textsc{\ignorespaces\fromname}\\[-8pt]
+ \rule{\textwidth}{.4pt}\\
+ \fi
+ \ifx\fromaddress\@empty\else
+ \ignorespaces\fromaddress
+ \fi
+ \end{center}}}
+\def\@firstfoot{}
+\def\@nexthead{%
+ \parbox[b]{\textwidth}
+ {\ifx\fromname\@empty\else
+ \textsc{\ignorespaces\fromname}\\[8pt]
+ \fi
+ \headtoname\ \ignorespaces\toname\hfill\datename:\ \@date\hfill
+ \pagename\ \thepage\\[-8pt]
+ \rule{\textwidth}{.4pt}}}
+\def\@nextfoot{}
+
+\def\ps@plain{%
+ \def\@evenhead{\sffamily\bfseries\fontsize{10pt}{12}\selectfont
+ \hfil-- \thepage\ --\hfil}%
+ \let\@oddhead\@evenhead%
+ \def\@evenfoot{}%
+ \def\@oddfoot{}}
+\def\ps@firstpage{%
+ \def\@evenhead{\@firsthead}%
+ \let\@oddhead\@evenhead%
+ \def\@evenfoot{\@firstfoot}%
+ \let\@oddfoot\@evenfoot}
+\def\ps@headings{%
+ \def\@evenhead{\@nexthead}%
+ \let\@oddhead\@evenhead%
+ \def\@evenfoot{\@nextfoot}%
+ \let\@oddfoot\@evenfoot}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Voreinstellungen}
+%
+% Voreingestellt sind Faltmarken,
+% \begin{macrocode}
+\@foldtrue
+% \end{macrocode}
+% Adre"sfeld,
+% \begin{macrocode}
+\@afieldtrue
+% \end{macrocode}
+% kein Betrefftitel,
+% \begin{macrocode}
+\@subjfalse
+% \end{macrocode}
+% Betreff vor der der Anrede,
+% \begin{macrocode}
+\@subjafterfalse
+% \end{macrocode}
+% Einfache Kopfzeilen,
+% \begin{macrocode}
+\ps@plain
+% \end{macrocode}
+% Seitennumerierung mit arabischen Zahlen,
+% \begin{macrocode}
+\pagenumbering{arabic}
+% \end{macrocode}
+% kein Abgleich des unteren Randes
+% \begin{macrocode}
+\raggedbottom
+% \end{macrocode}
+% und europ"aische Handhabung des Leerschritts. Letzteres sollte eigentlich
+% von der Sprachanpassung (z.B. |german.sty| oder |german3.sty| erledigt)
+% werden und wird in einer der n"achsten Versionen vermutlich entfernt.
+% \begin{macrocode}
+\frenchspacing
+% \end{macrocode}
+%
+% \subsection{Fast das Ende}
+%
+% \begin{macro}{\KOMAScript}
+% Das \KOMAScript-Logo wird in allen \KOMAScript-Paketen und -Klassen
+% definiert, falls es nicht bereits definiert ist. Dabei werden die
+% Versalien moderat gesperrt. Es wird jedoch darauf verzichtet, die
+% Versalien etwa einen Punkt kleiner zu setzen, da das Logo aktiv
+% ausgezeichnet erscheinen soll.
+% \begin{macrocode}
+\@ifundefined{KOMAScript}{%
+ \DeclareRobustCommand{\KOMAScript}{\textsf{K\kern.05em O\kern.05em%
+ M\kern.05em A\kern.1em-\kern.1em Script}}}{}
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+%</scrlettr>
+% \end{macrocode}
+%
+% \IndexPrologue{\clearpage
+% \section*{Index}
+% \markboth{Index}{Index}
+% Die kursiven Zahlen geben die Seiten an, auf denen
+% der entsprechende Eintrag beschrieben ist.
+% Die unterstrichenden Zahlen geben die Stelle der
+% Definition des Eintrags an.
+% Alle anderen Zahlen benennen Stellen, an denen der
+% entsprechende Eintrag verwendet ist.
+% \vspace{1em}\noindent}
+%
+% \GlossaryPrologue{\section*{"Anderungsverzeichnis}
+% \markboth{"Anderungsverzeichnis}{"Anderungsverzeichnis}
+% \addcontentsline{toc}{section}{"Anderungsverzeichnis}
+% Die erste Version des \textsf{KOMA-Script} Pakets
+% stammt vom 7.\,Juli~1994. Es werden nur die
+% "Anderungen ab diesem Zeitpunkt dokumentiert.\par%
+% \vspace{1em}\noindent}
+%
+% \Finale
+%
+\endinput
+%
+% Ende der Datei `scrlettr.dtx'
+%
+%%% Local Variables:
+%%% mode: doctex
+%%% TeX-master: t
+%%% End:
diff --git a/obsolete/macros/latex/contrib/koma-script-obsolete/scrlettr.ins b/obsolete/macros/latex/contrib/koma-script-obsolete/scrlettr.ins
new file mode 100644
index 0000000000..7b915d7cd5
--- /dev/null
+++ b/obsolete/macros/latex/contrib/koma-script-obsolete/scrlettr.ins
@@ -0,0 +1,104 @@
+% ======================================================================
+% scrlettr.ins
+% Copyright (c) Markus Kohm, 2006-2012
+%
+% This file is part of the LaTeX2e KOMA-Script bundle.
+%
+% This work may be distributed and/or modified under the conditions of
+% the LaTeX Project Public License, version 1.3c of the license.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3c or later is part of all distributions of LaTeX
+% version 2005/12/01 or later and of this work.
+%
+% This work has the LPPL maintenance "not maintained" and is deprecated!
+% It has been replaced by KOMA-Script class scrlttr2.
+%
+% The author of this work is Markus Kohm.
+%
+% This work consists of the files `scrlettr.dtx', `scrlettr.ins', and
+% `README'.
+% ----------------------------------------------------------------------
+% scrlettr.ins
+% Copyright (c) Markus Kohm, 2006-2012
+%
+% Dieses Werk darf nach den Bedingungen der LaTeX Project Public Lizenz,
+% Version 1.3c, verteilt und/oder veraendert werden.
+% Die neuste Version dieser Lizenz ist
+% http://www.latex-project.org/lppl.txt
+% und Version 1.3c ist Teil aller Verteilungen von LaTeX
+% Version 2005/12/01 oder spaeter und dieses Werks.
+%
+% Dieses Werk hat den LPPL-Verwaltungs-Status "not maintained"
+% (nicht verwaltet), ist veraltet und wurde durch die KOMA-Script-Klasse
+% scrlttr2 ersetzt.
+%
+% Der Autor dieses Werkes ist Markus Kohm.
+%
+% Dieses Werk besteht aus den Dateien `scrlettr.dtx', `scrlettr.ins' und
+% `README'.
+% ======================================================================
+
+% ---------- start of docstrip process ---------------------------------
+\def\batchfile{scrlettr.ins}
+
+% ---------- KOMA-Script default docstrip declarations -----------------
+
+\input docstrip.tex
+\Msg{*************************************************************************}
+\Msg{*}
+\Msg{* THIS WILL PRODUCE AN OBSOLETE CLASS, THAT IS NOT LONGER SUPPORTED OR}
+\Msg{* PART OF KOMA-SCRIPT!!!}
+\Msg{*}
+\Msg{*************************************************************************}
+\ifToplevel{\keepsilent\askforoverwritefalse}
+\preamble
+
+Copyright (c) 1995-2012 by Axel Kielhorn
+ and Markus Kohm <komascript(at)gmx.info>
+
+This file has been generated.
+-----------------------------
+
+This work may be distributed and/or modified under the conditions of
+the LaTeX Project Public License, version 1.3c of the license.
+The latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+and version 1.3c or later is part of all distributions of LaTeX
+version 2005/12/01 or later and of this work.
+
+This work has the LPPL maintenance status "not maintained".
+
+This file may only be distributed together with the file
+`scrlettr.dtx' and `scrlettr.ins'. You may however distribute the files
+`scrlettr.dtx' and `scrlettr.ins' without this file.
+
+An English manual may be generated from the source file
+`scrlettr.dtx' using:
+ pdflatex scrlettr.dtx
+
+THIS IS AN OBSOLETE CLASS! YOU SHOULD USE THE KOMA-SCRIPT CLASS scrlttr2
+INSTEAD OF THIS CLASS!
+
+\endpreamble
+
+
+
+% ---------- File generation -------------------------------------------
+
+\generate{\usepreamble\defaultpreamble
+ \file{scrlettr.cls}{%
+ \from{scrlettr.dtx}{scrlettr}%
+ }%
+% \file{scrlettr.drv}{%
+% \from{scrlettr.dtx}{driver}%
+% }%
+}
+
+\endinput
+%
+% end of file `scrlettr.ins'
+%%% Local Variables:
+%%% mode: TeX
+%%% TeX-master: t
+%%% End:
diff --git a/obsolete/macros/latex/contrib/koma-script-obsolete/scrlettr.pdf b/obsolete/macros/latex/contrib/koma-script-obsolete/scrlettr.pdf
new file mode 100644
index 0000000000..f83abc9904
--- /dev/null
+++ b/obsolete/macros/latex/contrib/koma-script-obsolete/scrlettr.pdf
Binary files differ
diff --git a/obsolete/macros/latex/contrib/koma-script-obsolete/scrpage-obsolete.dtx b/obsolete/macros/latex/contrib/koma-script-obsolete/scrpage-obsolete.dtx
new file mode 100644
index 0000000000..6bdb605cb2
--- /dev/null
+++ b/obsolete/macros/latex/contrib/koma-script-obsolete/scrpage-obsolete.dtx
@@ -0,0 +1,1160 @@
+% \CheckSum{903}
+% \iffalse
+% ======================================================================
+% scrpage-obsolete.dtx
+% Copyright (c) Markus Kohm, 1995-2012
+%
+% This file is part of the LaTeX2e KOMA-Script bundle.
+%
+% This work may be distributed and/or modified under the conditions of
+% the LaTeX Project Public License, version 1.3c of the license.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3c or later is part of all distributions of LaTeX
+% version 2005/12/01 or later and of this work.
+%
+% This work has the LPPL maintenance "not maintained" and is deprecated!
+% It has been replaced by KOMA-Script package scrpage2.
+%
+% The author of this work is Markus Kohm.
+%
+% This work consists of the files `scrpage-obsolete.dtx' and `README'.
+% ----------------------------------------------------------------------
+% scrpage-obsolete.dtx
+% Copyright (c) Markus Kohm, 1995-2012
+%
+% Dieses Werk darf nach den Bedingungen der LaTeX Project Public Lizenz,
+% Version 1.3c, verteilt und/oder veraendert werden.
+% Die neuste Version dieser Lizenz ist
+% http://www.latex-project.org/lppl.txt
+% und Version 1.3c ist Teil aller Verteilungen von LaTeX
+% Version 2005/12/01 oder spaeter und dieses Werks.
+%
+% Dieses Werk hat den LPPL-Verwaltungs-Status "not maintained"
+% (nicht verwaltet), ist veraltet und wurde durch das KOMA-Script-Paket
+% scrpage2 ersetzt.
+%
+% Der Autor dieses Werkes ist Markus Kohm.
+%
+% Dieses Werk besteht aus den Dateien `scrpage-obsolete.dtx' und
+% `README'.
+% ======================================================================
+% \fi
+%
+% \CharacterTable
+% {Upper-case \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
+% Lower-case \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
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+% \iffalse
+%%% From File: scrpage-obsolete.dtx
+%<*dtx>
+\def\LaTeXformat{LaTeX2e}
+\ifx\fmtname\LaTeXformat
+ \makeatletter
+ \let\saved@@end\@@end
+ \def\@@end{\csname fi\endcsname\saved@@end}
+ \makeatother
+ \ProvidesFile{scrpage.dtx}
+%</dtx>
+%<scrpage>\NeedsTeXFormat{LaTeX2e}[1995/06/01]
+%<driver>\ProvidesFile{scrpage.drv}
+%<scrpage>\ProvidesPackage{scrpage}[2008/02/29 v1.3e KOMA-Script package]
+%<*dtx|driver>
+ [2012/11/06 v1.3e unsupported obsolete KOMA-Script package
+%<driver> driver]
+%<*dtx>
+ source]
+%</dtx>
+%</dtx|driver>
+%<*driver>
+ \documentclass{scrdoc}
+ \usepackage{scrpage2}
+ \usepackage[german,english]{babel}
+ \usepackage[latin1]{inputenc}
+ \CodelineIndex
+ \RecordChanges
+ \GetFileInfo{scrpage.dtx}
+ \title{The \textsf{KOMA}-pagestyle-package\thanks{This file has
+ version number \fileversion, last revised \filedate.}}
+ \renewpagestyle{headings}{(\textwidth,1pt)%
+ {\headmark\hfill}{\hfill\headmark}{\hfill\headmark\hfill}%
+ (\textwidth,.4pt)}%
+ {(\textwidth,.4pt)%
+ {\pagemark\hfill%
+ Copyright \copyright\ Markus Kohm, 1994--2002}%
+ {Package \texttt{scrpage}\hfill\pagemark}%
+ {\rlap{Package \texttt{scrpage}}\hfill%
+ Copyright \copyright\ Markus Kohm, 1994--2002\hfill%
+ \llap\pagemark}%
+ (\textwidth,1pt)}
+ \renewpagestyle{plain}{(\textwidth,1pt)%
+ {\hfill}{\hfill}{\hfill}%
+ (\textwidth,.4pt)}%
+ {(\textwidth,.4pt)%
+ {\pagemark\hfill}%
+ {\hfill\pagemark}%
+ {\hfill\pagemark\hfill}%
+ (\textwidth,1pt)}
+ \pagestyle{headings}
+ \begin{document}
+ \maketitle
+ \begin{abstract}
+ This is \texttt{scrpage.sty}. This obsolete package is part of the
+ \textsf{KOMA}-script-bundle. It defines an user interface for
+ pagestyle-definition. It's something like \texttt{fancyheadings} but not
+ the same. You may use \texttt{scrpage} or \texttt{fancyhdr}. You may
+ use \texttt{scrpage} with standard classes, too. Note: Package
+ \texttt{scrpage} was replaced by package \texttt{scrpage2}. The manual for
+ package \texttt{scrpage2} is part of the \KOMAScript{} guide.
+ \end{abstract}
+ \tableofcontents
+ \DocInput{scrpage-obsolete.dtx}
+\end{document}
+%</driver>
+%<*dtx>
+\fi
+% Now the installation driver:
+%</dtx>
+%<*insfile>
+\def\batchfile{scrpage-obsolete.dtx}
+\input docstrip.tex
+\Msg{*************************************************************************}
+\Msg{*}
+\Msg{* THIS WILL PRODUCE AN OBSOLETE PACKAGE, THAT IS NOT LONGER SUPPORTED OR}
+\Msg{* PART OF KOMA-SCRIPT!!!}
+\Msg{*}
+\Msg{*************************************************************************}
+\ifToplevel{\keepsilent\askforoverwritefalse}
+\preamble
+
+Copyright (c) 1995-2012 by Markus Kohm <komascript(at)gmx.info>
+
+This file has been generated.
+-----------------------------
+
+This work may be distributed and/or modified under the conditions of
+the LaTeX Project Public License, version 1.3c of the license.
+The latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+and version 1.3c or later is part of all distributions of LaTeX
+version 2005/12/01 or later and of this work.
+
+This work has the LPPL maintenance status "not maintained".
+
+This file may only be distributed together with the file
+`scrpage-obsolete.dtx'. You may however distribute the file
+`scrpage-obsolete.dtx' without this file.
+
+An English manual may be generated from the source file
+`scrpage-obsolete.dtx' using:
+ pdflatex scrpage-obsolete.dtx
+
+THIS IS AN OBSOLETE PACKAGE! YOU SHOULD USE THE KOMA-SCRIPT PACKAGE scrpage2
+INSTEAD OF THIS PACKAGE!
+
+\endpreamble
+
+\generate{\usepreamble\defaultpreamble
+ \file{scrpage.sty}{%
+ \from{scrpage-obsolete.dtx}{scrpage}%
+ }%
+}%
+
+%</insfile>
+%<*dtx>
+\csname endinput\endcsname
+%</dtx>
+% \fi
+%
+% \section{Introduction}
+%
+% There is a simple user-interface and a expert-interface. Using the
+% user-interface you can define a lot of different pagestyles. But there are
+% combinations, you cannot define. Using the expert-interface you can do
+% allmost all you may ever want. To do more, you should learn more about
+% defining macros yourself.
+%
+%
+% \subsection{Interface for all users}
+% \sloppy
+%
+% \DescribeMacro
+% \headfont\\
+% This font is used to write page heads and foots. You may change it using
+% |\renewcommand|, e.g. |\renewcommand\headfont{\normalfont\slshape}|.
+%
+% \DescribeMacro
+% \footfont\\
+% This font is used to write page foots different from page heads. You may
+% change it using |\renewcommand|,
+% e.g. |\renewcommand\footfont{\normalfont\slshape}|. Only availabe at
+% \texttt{scrpage2}.
+%
+% \DescribeMacro
+% \headmark\\
+% Using \texttt{twoside}-option this is |\leftmark| at left/even pages and
+% |\rightmark| at right/odd pages. Using \texttt{oneside}-option there are
+% only right pages, so it is |\rightmark|.
+%
+% \DescribeMacro
+% \pnumfont\\
+% This font is used to write pagenumbers at |\pagemark|. You may change it
+% using |\renewcommand| (see |\headfont|).
+%
+% \DescribeMacro
+% \pagemark\\
+% This is the number of the actual page written with |\pnumfont|.
+%
+% \DescribeMacro\deftripstyle
+% \DescribeMacro{\deftripstyle*}
+% The command \cs{deftripstyle}\linebreak[2]%^^A
+% \marg{name}\linebreak[1]%^^A
+% \oarg{olw}\linebreak[1]\oarg{ilw}\linebreak[2]%^^A
+% \marg{headleft}\linebreak[1]%^^A
+% \marg{headmiddle}\linebreak[1]%^^A
+% \marg{headright}\linebreak[2]%^^A
+% \marg{footleft}\linebreak[1]%^^A
+% \marg{footmiddle}\linebreak[1]%^^A
+% \marg{footright}
+% defines a new pagestyle. You can activate this pagestyle using
+% |\pagestyle| or |\thispagestyle|. Without optional argument this defines a
+% page like this:
+% \begin{center}\unitlength1mm\begin{picture}(120,82)
+% \put(0,0){\dashbox{2}(58,82){\nobreakspace}}
+% \put(1,78){\makebox(0,0)[l]{\emph{headright}}}
+% \put(29,78){\makebox(0,0){\emph{headmiddle}}}
+% \put(57,78){\makebox(0,0)[r]{\emph{headleft}}}
+% \put(29,41){\makebox(0,0){left page}}
+% \put(1,3){\makebox(0,0)[l]{\emph{footright}}}
+% \put(29,3){\makebox(0,0){\emph{footmiddle}}}
+% \put(57,3){\makebox(0,0)[r]{\emph{footleft}}}
+% \put(60,0){\dashbox{2}(58,82){\nobreakspace}}
+% \put(61,78){\makebox(0,0)[l]{\emph{headleft}}}
+% \put(89,78){\makebox(0,0){\emph{headmiddle}}}
+% \put(117,78){\makebox(0,0)[r]{\emph{headright}}}
+% \put(89,41){\makebox(0,0){right page}}
+% \put(61,3){\makebox(0,0)[l]{\emph{footleft}}}
+% \put(89,3){\makebox(0,0){\emph{footmiddle}}}
+% \put(117,3){\makebox(0,0)[r]{\emph{footright}}}
+% \end{picture}\end{center}
+% Using one optional argument \oarg{ilw} (means \emph{i}nner \emph{l}ine
+% \emph{w}idth) you get a separationline between head and text and between
+% text and foot like this (\emph{ilw}=0.5pt):
+% \begin{center}\unitlength1mm\begin{picture}(120,82)
+% \put(0,0){\dashbox{2}(58,82){\nobreakspace}}
+% \put(1,78){\makebox(0,0)[l]{\emph{headright}}}
+% \put(29,78){\makebox(0,0){\emph{headmiddle}}}
+% \put(57,78){\makebox(0,0)[r]{\emph{headleft}}}
+% \put(1,76){\rule{56\unitlength}{0.5pt}}
+% \put(29,41){\makebox(0,0){left page}}
+% \put(1,5){\rule{56\unitlength}{0.5pt}}
+% \put(1,3){\makebox(0,0)[l]{\emph{footright}}}
+% \put(29,3){\makebox(0,0){\emph{footmiddle}}}
+% \put(57,3){\makebox(0,0)[r]{\emph{footleft}}}
+% \put(60,0){\dashbox{2}(58,82){\nobreakspace}}
+% \put(61,78){\makebox(0,0)[l]{\emph{headleft}}}
+% \put(89,78){\makebox(0,0){\emph{headmiddle}}}
+% \put(117,78){\makebox(0,0)[r]{\emph{headright}}}
+% \put(61,76){\rule{56\unitlength}{0.5pt}}
+% \put(89,41){\makebox(0,0){right page}}
+% \put(61,5){\rule{56\unitlength}{0.5pt}}
+% \put(61,3){\makebox(0,0)[l]{\emph{footleft}}}
+% \put(89,3){\makebox(0,0){\emph{footmiddle}}}
+% \put(117,3){\makebox(0,0)[r]{\emph{footright}}}
+% \end{picture}\end{center}
+% Using both optional arguments \oarg{olw} (means \emph{o}uter \emph{l}ine
+% \emph{w}idth) and \oarg{ilw} you get a separationline between head and
+% text and between text and foot and a line above head and below foot like
+% this (\emph{olw}=2pt, \emph{ilw}=0.5pt):
+% \begin{center}\unitlength1mm\begin{picture}(120,82)
+% \put(0,0){\dashbox{2}(58,82){\nobreakspace}}
+% \put(1,80){\rule{56\unitlength}{2pt}}
+% \put(1,78){\makebox(0,0)[l]{\emph{headright}}}
+% \put(29,78){\makebox(0,0){\emph{headmiddle}}}
+% \put(57,78){\makebox(0,0)[r]{\emph{headleft}}}
+% \put(1,76){\rule{56\unitlength}{0.5pt}}
+% \put(29,41){\makebox(0,0){left page}}
+% \put(1,5){\rule{56\unitlength}{0.5pt}}
+% \put(1,3){\makebox(0,0)[l]{\emph{footright}}}
+% \put(29,3){\makebox(0,0){\emph{footmiddle}}}
+% \put(57,3){\makebox(0,0)[r]{\emph{footleft}}}
+% \put(1,1){\rule{56\unitlength}{2pt}}
+% \put(60,0){\dashbox{2}(58,82){\nobreakspace}}
+% \put(61,80){\rule{56\unitlength}{2pt}}
+% \put(61,78){\makebox(0,0)[l]{\emph{headleft}}}
+% \put(89,78){\makebox(0,0){\emph{headmiddle}}}
+% \put(117,78){\makebox(0,0)[r]{\emph{headright}}}
+% \put(61,76){\rule{56\unitlength}{0.5pt}}
+% \put(89,41){\makebox(0,0){right page}}
+% \put(61,5){\rule{56\unitlength}{0.5pt}}
+% \put(61,3){\makebox(0,0)[l]{\emph{footleft}}}
+% \put(89,3){\makebox(0,0){\emph{footmiddle}}}
+% \put(117,3){\makebox(0,0)[r]{\emph{footright}}}
+% \put(61,1){\rule{56\unitlength}{2pt}}
+% \end{picture}\end{center}
+%
+% You can define new pagestyles and you can redefine existing pagestyles. If
+% you redefine an active pagestyle, this doesn't change the actual shown
+% pagestyle. To activate you have to use always a |\pagestyle|- or
+% |\thispagestyle|-command.
+%
+% You can change the standard pagestyle \texttt{headings} to. If you want to
+% change pagestyle \texttt{myheadings}, you should use the star-version of
+% the command:\\
+% \cs{deftripstyle*}\linebreak[2]%^^A
+% \marg{name}\linebreak[2]%^^A
+% \oarg{olw}\linebreak[1]\oarg{ilw}\linebreak[2]%
+% \marg{headleft}\linebreak[1]%^^A
+% \marg{headmiddle}\linebreak[1]%^^A
+% \marg{headright}\linebreak[2]%^^A
+% \marg{footleft}\linebreak[1]%^^A
+% \marg{footmiddle}\linebreak[1]%^^A
+% \marg{footright}
+% this defines a my-version pagestyle. This means, section- and
+% chapter-commands or perhaps |\tableofcontents| don't change the
+% marks. Only |\markboth| and |\markright| change them. But if you don't
+% use |\headmark|, |\leftmark| or |\rightmark|, star- and starless version
+% of |\deftripstyle| are almost the same.
+%
+%
+% \subsection{Interface for experts}
+%
+% \DescribeMacro\defpagestyle
+% Command
+% \cs{defpagestyle}\marg{name}\marg{head-definition}\marg{foot-definition}
+% defines a new pagestyle \emph{name}. \emph{head-definition} defines the head
+% at the new pagestyle. It contains five parts:
+% \begin{flushleft}
+% (\emph{toplinelength},\emph{toplinewidth})\\%
+% \marg{evenpagehead}\marg{oddpagehead}\marg{onesidepagehead}\\%
+% (\emph{headseplinelength},\emph{headseplinewidth})\\
+% \end{flushleft}
+% These five parts have to be \textbf{one} argument! So you should put them
+% together in group-braces (``|{|'' and ``|}|'').
+%
+% \emph{foot-definition} analogous defines the foot at the new pagestyle.
+%
+% \DescribeMacro\newpagestyle
+% Command
+% \cs{newpagestyle}\marg{name}\marg{head-definition}\marg{foot-definition}
+% defines a real new pagestyle. If there's already a pagestyle named
+% \emph{name}, you'll get an error. Otherwise it's the same like
+% |\defpagestyle|.
+%
+% \DescribeMacro\renewpagestyle
+% Command
+% \cs{renewpagestyle}\marg{name}\marg{head-definition}\marg{foot-definition}
+% redefines a old pagestyle. If there isn't a pagestyle named \emph{name},
+% you'll get an error. Otherwise it's the same like |\defpagestyle|.
+%
+% \DescribeMacro\providepagestyle
+% Command
+% \cs{providepagestyle}\marg{name}\marg{head-definition}\marg{foot-definition}
+% defines a new pagestyle, if it is realy new. If there is already a pagestyle
+% named \emph{name}, it does nothing (but writing an info to the log
+% file). Otherwise it's the same like |\defpagestyle|.
+%
+% You may use the user-interface-macros |\pagemark| and |\headmark|, too.
+%
+%
+% \subsection{Configuration file}
+% There's a configuration file \texttt{scrpage.cfg}, included at the end
+% of \texttt{scrpage.sty}, if it exists. There you can define your own
+% default pagestyles using all the commands above.
+%
+%
+% \subsection{Example}
+% The pagestyles of this documentation was defined using:
+% \begin{verbatim}
+% \renewpagestyle{headings}{(\textwidth,1pt)%
+% {\headmark\hfill}{\hfill\headmark}{\hfill\headmark\hfill}%
+% (\textwidth,.4pt)}%
+% {(\textwidth,.4pt)%
+% {\pagemark\hfill%
+% Copyright \copyright\ Markus Kohm, 1994--2002}%
+% {Package \texttt{scrpage}\hfill\pagemark}%
+% {\rlap{Package \texttt{scrpage}}\hfill%
+% Copyright \copyright\ Markus Kohm, 1994--2002\hfill%
+% \llap\pagemark}%
+% (\textwidth,1pt)}
+% \renewpagestyle{plain}{(\textwidth,1pt)%
+% {\hfill}{\hfill}{\hfill}%
+% (\textwidth,.4pt)}%
+% {(\textwidth,.4pt)%
+% {\pagemark\hfill}%
+% {\hfill\pagemark}%
+% {\hfill\pagemark\hfill}%
+% (\textwidth,1pt)}
+% \pagestyle{headings} % activate new version
+% \end{verbatim}
+%
+%
+% \StopEventually{\PrintIndex\PrintChanges}
+%
+% \section{Implementation}
+%
+% \begin{macrocode}
+%<*scrpage>
+% \end{macrocode}
+% \changes{v1.1}{1995/06/27}{\cs{hbox to} changed into \cs{hb@xt@}.}
+% \changes{v1.3e}{2012/11/06}{removed from \KOMAScript}
+%
+% \subsection{Options}
+% \begin{option}{headinclude}
+% \begin{option}{headexclude}
+% \begin{option}{footinclude}
+% \begin{option}{footexclude}
+% \texttt{scrpage} knows some options. They are similar to the
+% \textsf{KOMA}-script-classes. To work with and without
+% the \textsf{KOMA}-script-classes their definitions are not quite simple.
+%
+% \begin{macrocode}
+\DeclareOption{headinclude}{%
+ \PassOptionsToPackage{headinclude}{typearea}%
+}
+\DeclareOption{headexclude}{%
+ \PassOptionsToPackage{headexclude}{typearea}%
+}
+\DeclareOption{footinclude}{%
+ \PassOptionsToPackage{footinclude}{typearea}%
+}
+\DeclareOption{footexclude}{%
+ \PassOptionsToPackage{footexclude}{typearea}%
+}
+% \end{macrocode}
+% We do so, because we want so set |headinclude|, |footinclude| by
+% default at old version (see below)!
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+%
+% Set the default options.
+% \begin{macrocode}
+\ExecuteOptions{headinclude,footinclude}
+% \end{macrocode}
+% But you may set other Options:
+% \begin{macrocode}
+\ProcessOptions\relax
+% \end{macrocode}
+%
+%
+% \subsection{Some Initialisation}
+%
+% For easier handling of the differences between article-, report- and
+% book-classes we define some more switches.
+%
+% \begin{macro}{\if@chapter}
+% First distinguish between article and others.
+% \begin{macrocode}
+\newif\if@chapter
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname chapter\endcsname\relax
+ \@chapterfalse
+\else
+ \@chaptertrue
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\if@mainmatter}
+% \changes{v1.2}{1995/07/08}{Definition changed}
+% Next distinguish between matter- and nomatter-classes.
+% \begin{macrocode}
+\def\@tempa{\newif\if@mainmatter\@mainmattertrue}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname mainmatter\endcsname\relax
+\else
+ \let\@tempa\relax
+\fi
+\@tempa
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Predefinitions}
+% There are some commands, you can use at pagestyle-definition.
+%
+% \begin{macro}{\headmark}
+% This macro is |\rightmark| or |\leftmark|. But outside
+% pagestyle-definition it's nothing.
+% \begin{macrocode}
+\let\headmark\relax
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pagemark}
+% This macro is the number of the page at the pagenumberfont:
+% \begin{macrocode}
+\DeclareRobustCommand\pagemark{{\pnumfont\thepage}}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Expert-Pagestyle-Definition-Interface}
+% The pagestyle-definition-interface for experts is not as easy as the
+% simple interface we'll define later. But it's more flexible. We'll
+% later use it to define the pagestyle-definition-interface for users.
+%
+% \begin{macro}{\defpagestyle}
+% First we define the simple definition-interface. There's no test, if
+% the pagestyle's defined twice.
+%
+% First there has to be the definition of head and foot.
+% \begin{macrocode}
+\def\defpagestyle{%
+% \end{macrocode}
+% We have to decide, whether it is a my-version or not:
+% \begin{macrocode}
+ \@ifstar
+ {\@defpagestyle[-]}%
+ {\@defpagestyle[+]}}
+% \end{macrocode}
+% \begin{macro}{\@defpagestyle}
+% Now the we can define the head and the foot.
+% \changes{v1.0b}{1995/05/25}{Dot deleted after number at
+% chapter- and sectionmark}
+% \changes{v1.0b}{1995/05/25}{Use CJK at \cs{chaptermark},
+% \cs{sectionmark} and \cs{subsectionmark}}
+% \changes{v1.3e}{2008/02/29}{usage of \cs{if@mainmatter} fixed}
+% Before version 2.5 we have distinguished one- and two-side definitions while
+% loading the package and have had all the definitions of \cs{@mkboth},
+% \cs{chaptermark}, \cs{sectionmark}, and \cs{subsectionmark} at the
+% definition of the page style. This was a lot of code:
+% \begin{macrocode}
+\if@twoside
+ \def\@defpagestyle[#1]#2#3#4{%
+ \expandafter\def\csname ps@#2\endcsname{%
+ \def\@tempa{+}%
+ \def\@tempb{#1}%
+ \ifx\@tempa\@tempb
+ \let\@mkboth\markboth
+ \if@chapter
+ \def\chaptermark####1{%
+ \markboth {\ifnum \c@secnumdepth >\m@ne%
+ \if@mainmatter\chaptermarkformat\fi\fi ####1}{%
+ \ifnum \c@secnumdepth >\m@ne%
+ \if@mainmatter\chaptermarkformat\fi\fi ####1}}%
+ \def\sectionmark####1{%
+ \markright {\ifnum \c@secnumdepth >\z@%
+ \sectionmarkformat\fi ####1}}%
+ \else
+ \def\sectionmark####1{%
+ \markboth {\ifnum \c@secnumdepth >\z@%
+ \if@mainmatter\sectionmarkformat\fi\fi ####1}{%
+ \ifnum \c@secnumdepth >\z@%
+ \if@mainmatter\sectionmarkformat\fi\fi ####1}}%
+ \def\subsectionmark####1{%
+ \markright {\ifnum \c@secnumdepth >\@ne%
+ \subsectionmarkformat\fi ####1}}%
+ \fi
+ \else
+ \let\@mkboth\@gobbletwo
+ \if@chapter
+ \def\chaptermark####1{}%
+ \else
+ \def\subsectionmark####1{}%
+ \fi
+ \def\sectionmark####1{}%
+ \fi
+ \def@twosidehead#3
+ \def@twosidefoot#4
+ }
+ }
+\else
+ \def\@defpagestyle[#1]#2#3#4{%
+ \expandafter\def\csname ps@#2\endcsname{%
+ \def\@tempa{+}%
+ \def\@tempb{#1}%
+ \ifx\@tempa\@tempb
+ \let\@mkboth\markboth
+ \if@chapter
+ \def\chaptermark####1{%
+ \markright {\ifnum \c@secnumdepth >\m@ne%
+ \if@mainmatter\chaptermarkformat\fi\fi ####1}}%
+ \def\sectionmark####1{}%
+ \else
+ \def\sectionmark####1{%
+ \markright{\ifnum \c@secnumdepth >\z@%
+ \if@mainmatter\sectionmarkformat\fi\fi ####1}}%
+ \def\subsectionmark####1{}%
+ \fi
+ \else
+ \let\@mkboth\@gobbletwo
+ \if@chapter
+ \def\chaptermark####1{}%
+ \else
+ \def\subsectionmark####1{}%
+ \fi
+ \def\sectionmark####1{}%
+ \fi
+ \def@onesidehead#3
+ \def@onesidefoot#4
+ }
+ }
+\fi
+% \end{macrocode}
+% \begin{macro}{\def@twosidehead}
+% \begin{macro}{\def@@twosidehead}
+% \changes{v1.3}{2001/03/30}{Use of \cs{@headwidth} instead of
+% \cs{textwidth}}
+% \begin{macrocode}
+\def\def@twosidehead(#1,#2)#3#4#5(#6,#7){%
+ \def\@evenhead{\let\headmark\leftmark%
+ \hss\hskip\@evenheadshift\vbox{\hsize=\@headwidth\relax%
+ \hf@rule{#1}{#2}{\@headwidth}%
+ \vskip#2
+ \vskip\baselineskip
+ \hb@xt@\@headwidth{{%
+ \headfont\strut #3}}%
+ \hf@rule{#6}{#7}{\@headwidth}%
+ }\hskip\@oddheadshift\hss}%
+ \def\@oddhead{\let\headmark\rightmark
+ \hss\hskip\@oddheadshift\vbox{\hsize=\@headwidth\relax
+ \hf@rule{#1}{#2}{\@headwidth}%
+ \vskip#2%
+ \vskip\baselineskip
+ \hb@xt@\@headwidth{{%
+ \headfont\strut #4}}%
+ \hf@rule{#6}{#7}{\@headwidth}%
+ }\hskip\@evenheadshift\hss}%
+}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\def@onesidehead}
+% \changes{v1.3}{2001/03/30}{Use of \cmd\@headwidth instead of
+% \cs{textwidth}}
+% \begin{macro}{\def@@onesidehead}
+% \begin{macro}{\def@@@onesidehead}
+% Next the onesided head:
+% \begin{macrocode}
+\def\def@onesidehead(#1,#2)#3#4#5(#6,#7){%
+ \def\@evenhead{}%
+ \def\@oddhead{\let\headmark\rightmark
+ \hss\hskip\@oddheadshift\vbox{\hsize=\@headwidth\relax
+ \hf@rule{#1}{#2}{\@headwidth}%
+ \vskip#2%
+ \vskip\baselineskip
+ \hb@xt@\@headwidth{{%
+ \headfont\strut #5}}%
+ \hf@rule{#6}{#7}{\@headwidth}%
+ }\hskip\@evenheadshift\hss}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\def@twosidefoot}
+% \changes{v1.3}{2001/03/30}{Use of \cmd\@footwidth instead of
+% \cs{textwidth}}
+% \begin{macro}{\def@@twosidefoot}
+% \begin{macro}{\def@@@twosidefoot}
+% Next the twosided foot:
+% \begin{macrocode}
+\def\def@twosidefoot(#1,#2)#3#4#5(#6,#7){%
+ \def\@evenfoot{\let\headmark\leftmark
+ \hss\hskip\@evenfootshift\vbox{\hsize=\@footwidth\relax
+ \topfoot@rule{#1}{#2}\hb@xt@\@footwidth{{%
+ \headfont\footfont\strut #3}}%
+ \botfoot@rule{#6}{#7}}\hskip\@oddfootshift\hss}%
+ \def\@oddfoot{\let\headmark\rightmark
+ \hss\hskip\@oddfootshift\vbox{\hsize=\@footwidth\relax
+ \topfoot@rule{#1}{#2}\hb@xt@\@footwidth{{%
+ \headfont\footfont\strut #4}}%
+ \botfoot@rule{#6}{#7}}\hskip\@evenfootshift\hss}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\def@onesidefoot}
+% \changes{v1.3}{2001/03/30}{Use of \cmd\@footwidth instead of
+% \cs{textwidth}}
+% \begin{macro}{\def@@onesidefoot}
+% \begin{macro}{\def@@@onesidefoot}
+% \begin{macrocode}
+\def\def@onesidefoot(#1,#2)#3#4#5(#6,#7){%
+ \def\@evenfoot{}%
+ \def\@oddfoot{\let\headmark\rightmark
+ \hss\hskip\@oddfootshift\vbox{\hsize=\@footwidth\relax
+ \topfoot@rule{#1}{#2}\hb@xt@\@footwidth{{%
+ \headfont\footfont\strut #5}}
+ \botfoot@rule{#6}{#7}}\hskip\@evenfootshift\hss}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% We now define the rules used at head and foot.
+% \begin{macro}{\topfoot@rule}
+% \begin{macrocode}
+\newcommand\topfoot@rule[2]{%
+ \@tempdima\baselineskip\advance\@tempdima by-.7\normalbaselineskip
+ \advance\@tempdima by -#2
+ \vskip\@tempdima\hf@rule{#1}{#2}{\@footwidth}%
+ \vskip-\@tempdima}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\botfoot@rule}
+% \begin{macrocode}
+\newcommand\botfoot@rule[2]{%
+ \@tempdima-\baselineskip\advance\@tempdima by .3\normalbaselineskip
+ \advance\@tempdima by #2
+ \vskip\@tempdima\hf@rule{#1}{#2}{\@footwidth}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\hf@rule}
+% \changes{v1.3}{2001/03/30}{New, third parameter ``boxwidth''}
+% \begin{macrocode}
+\newcommand\hf@rule[3]{%
+ \setlength{\@tempdimb}{#1}%
+ \setlength{\@tempdimb}{.5\@tempdimb}%
+ \hb@xt@#3{%
+ \hfill%
+ \llap{\vrule\@depth#2\@height\z@\@width\@tempdimb}%
+ \rlap{\vrule\@depth#2\@height\z@\@width\@tempdimb}%
+ \hfill%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% Using these definitions, we can define the testing macros.
+%
+% \begin{macro}{\newpagestyle}
+% First the simple star/starless-selection:
+% \begin{macrocode}
+\def\newpagestyle{%
+% \end{macrocode}
+% We have to decide, whether it is a my-version or not:
+% \begin{macrocode}
+ \@ifstar
+ {\@newpagestyle[-]}%
+ {\@newpagestyle[+]}}
+% \end{macrocode}
+% \begin{macro}{\@newpagestyle}
+% There we have to distinguish, whether the pagestyle is already
+% defined or not.
+% \begin{macrocode}
+\def\@newpagestyle[#1]#2#3#4{%
+ \expandafter\ifx\csname ps@#2\endcsname\relax
+% \end{macrocode}
+% Then we can use the already defined |\@defpagestyle|.
+% \begin{macrocode}
+ \@defpagestyle[#1]{#2}{#3}{#4}%
+ \else
+ \PackageError
+ {scrpage}%
+ {Your command was ignored}%
+ {There is already a pagestyle named ``#1''.\MessageBreak%
+ Use \protect\defpagestyle\space, \protect\renewpagestyle or
+ \protect\providepagestyle.}%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\renewpagestyle}
+% First the simple star/starless-selection:
+% \begin{macrocode}
+\def\renewpagestyle{%
+% \end{macrocode}
+% We have to decide, whether it is a my-version or not:
+% \begin{macrocode}
+ \@ifstar
+ {\@renewpagestyle[-]}%
+ {\@renewpagestyle[+]}}
+% \end{macrocode}
+% \begin{macro}{\@renewpagestyle}
+% \changes{v1.2a}{1996/12/07}{Avoid to define pagestyle as \cs{relax}
+% if it wasn't defined (Thanks to Bernd).}
+% There we have to distinguish, whether the pagestyle is already
+% defined or not.
+% \begin{macrocode}
+\def\@renewpagestyle[#1]#2#3#4{%
+ \begingroup\expandafter\expandafter\expandafter\endgroup
+ \expandafter\ifx\csname ps@#2\endcsname\relax
+ \PackageError
+ {scrpage}%
+ {Your command was ignored}%
+ {There is no pagestyle named ``#1''.\MessageBreak%
+ Use \protect\defpagestyle, \protect\newpagestyle or
+ \protect\providepagestyle.}%
+ \else
+% \end{macrocode}
+% Then we can use the already defined |\@defpagestyle|.
+% \begin{macrocode}
+ \@defpagestyle[#1]{#2}{#3}{#4}%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\providepagestyle}
+% First the simple star/starless-selection:
+% \begin{macrocode}
+\def\providepagestyle{%
+% \end{macrocode}
+% We have to decide, whether it is a my-version or not:
+% \begin{macrocode}
+ \@ifstar
+ {\@providepagestyle[-]}%
+ {\@providepagestyle[+]}}
+% \end{macrocode}
+% \begin{macro}{\@providepagestyle}
+% There we have to distinguish, whether the pagestyle is already
+% defined or not.
+% \begin{macrocode}
+\def\@providepagestyle[#1]#2#3#4{%
+ \expandafter\ifx\csname ps@#2\endcsname\relax
+% \end{macrocode}
+% Then we can use the already defined |\@defpagestyle|.
+% \begin{macrocode}
+ \@defpagestyle[#1]{#2}{#3}{#4}%
+ \else
+ \PackageInfo
+ {scrpage}%
+ {\protect\providepagestyle\protect{#1\protect} ignored.}%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{User-Pagestyle-Definition-Interface}
+% The pagestyle-definition-interface for users is much easier than the
+% expert-version. Using the expert-macros, the definition is easy, too.
+%
+% \begin{macro}{\deftripstyle}
+% At version 1 we define the selection of star- or starless-version first:
+% \begin{macrocode}
+\def\deftripstyle{%
+ \@ifstar
+ {\@deftripstyle[-]}%
+ {\@deftripstyle[+]}}
+% \end{macrocode}
+% \end{macro}
+% Next we check, if there is an optional argument:
+% \begin{macro}{\@deftripstyle}
+% \begin{macrocode}
+\def\@deftripstyle[#1]#2{%
+ \@ifnextchar[%]
+ {\@@deftripstyle[#1]{#2}}%
+ {\@@deftripstyle[#1]{#2}[\z@]}}
+% \end{macrocode}
+% \end{macro}
+% or perhaps two optional arguments:
+% \begin{macro}{\@@deftripstyle}
+% \begin{macrocode}
+\def\@@deftripstyle[#1]#2[#3]{%
+% \end{macrocode}
+% Ok, now we have the problem, that there can be only 9 arguments. So we
+% have to distinguish the star-versions by a macro:
+% \begin{macrocode}
+ \def\@tempa{#1}%
+ \@ifnextchar[%]
+ {\@@@deftripstyle#2[#3]}%
+ {\@@@deftripstyle#2[\z@][#3]}}
+% \end{macrocode}
+% \end{macro}
+% Now the main-definition:
+% \begin{macro}{\@@@deftripstyle}
+% \begin{macrocode}
+\def\@@@deftripstyle#1[#2][#3]#4#5#6#7#8#9{%
+ \def\@tempb{+}%
+ \ifx\@tempa\@tempb
+ \defpagestyle{#1}%
+ {(\@headwidth,#2)%
+ {\rlap{#6}\hfill{#5}\hfill\llap{#4}}%
+ {\rlap{#4}\hfill{#5}\hfill\llap{#6}}%
+ {\rlap{#4}\hfill{#5}\hfill\llap{#6}}%
+ (\@headwidth,#3)}%
+ {(\@footwidth,#3)%
+ {\rlap{#9}\hfill{#8}\hfill\llap{#7}}%
+ {\rlap{#7}\hfill{#8}\hfill\llap{#9}}%
+ {\rlap{#7}\hfill{#8}\hfill\llap{#9}}%
+ (\@footwidth,#2)}%
+ \else
+ \defpagestyle*{#1}%
+ {(\@headwidth,#2)%
+ {\rlap{#6}\hfill{#5}\hfill\llap{#4}}%
+ {\rlap{#4}\hfill{#5}\hfill\llap{#6}}%
+ {\rlap{#4}\hfill{#5}\hfill\llap{#6}}%
+ (\@headwidth,#3)}%
+ {(\@footwidth,#3)%
+ {\rlap{#9}\hfill{#8}\hfill\llap{#7}}%
+ {\rlap{#7}\hfill{#8}\hfill\llap{#9}}%
+ {\rlap{#7}\hfill{#8}\hfill\llap{#9}}%
+ (\@footwidth,#2)}%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Width of head and foot}
+% \begin{macro}{\setheadwidth}
+% \changes{v1.3}{2001/03/30}{New}
+% \begin{macro}{\setfootwidth}
+% \changes{v1.3}{2001/03/30}{New}
+% \begin{macro}{\set@hf@width}
+% \changes{v1.3}{2001/03/30}{New}
+% \changes{v1.3a}{2001/05/31}{symbolic values ``paper'', ``text'',
+% `textwidthmarginpar''}
+% \begin{macro}{\settowidthof}
+% \begin{macro}{\deftowidthof}
+% Until version 1.3, head and foot of a page had same width like the
+% text block. Since version 1.3 this was changed. Now the head and
+% foot have their own width and an optional shift relative to the text
+% part of the page. This shift can be positive or negative. We set
+% the width and shift with one macro and save them at macros. The set
+% macros have an optional argument: the shift.
+%
+% For definition of symbolic length values there is the macro
+% \cs{settowidthof}. And to define a macro with this value, there
+% is \cs{deftowidthof}.
+% \begin{macrocode}
+\newcommand*{\settowidthof}[2]{%
+ \edef\@tempa{#2}%
+ \edef\@tempb{paper}\ifx\@tempa\@tempb
+ \setlength{#1}{\paperwidth}%
+ \else\edef\@tempb{text}\ifx\@tempa\@tempb
+ \setlength{#1}{\textwidth}%
+ \else\edef\@tempb{textwithmarginpar}\ifx\@tempa\@tempb
+ \setlength{#1}{\textwidth}%
+ \addtolength{#1}{\marginparwidth}%
+ \addtolength{#1}{\marginparsep}%
+ \else\edef\@tempb{head}\ifx\@tempa\@tempb
+ \setlength{#1}{\@headwidth}%
+ \else\edef\@tempb{foot}\ifx\@tempa\@tempb
+ \setlength{#1}{\@footwidth}%
+ \else\edef\@tempb{headtopline}\ifx\@tempa\@tempb
+ \setlength{#1}{\scr@headabove@linelength}%
+ \else\edef\@tempb{headsepline}\ifx\@tempa\@tempb
+ \setlength{#1}{\scr@headbelow@linelength}%
+ \else\edef\@tempb{footsepline}\ifx\@tempa\@tempb
+ \setlength{#1}{\scr@footabove@linelength}%
+ \else\edef\@tempb{footbotline}\ifx\@tempa\@tempb
+ \setlength{#1}{\scr@footbelow@linelength}%
+ \else\edef\@tempb{page}\ifx\@tempa\@tempb
+ \setlength{#1}{\paperwidth}%
+ \begingroup\expandafter\expandafter\expandafter\endgroup
+ \expandafter\ifx\csname ta@bcor\endcsname\relax\else
+ \addtolength{#1}{-\ta@bcor}%
+ \fi
+ \else
+ \setlength{#1}{#2}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+}
+\newcommand*{\deftowidthof}[2]{%
+ \edef\@tempa{#2}\edef\@tempb{autohead}\ifx\@tempa\@tempb
+ \expandafter\def\csname #1\endcsname{\@headwidth}%
+ \else\edef\@tempb{autofoot}\ifx\@tempa\@tempb
+ \expandafter\def\csname #1\endcsname{\@footwidth}%
+ \else
+ \settowidthof{\@tempdima}{#2}%
+ \expandafter\edef\csname #1\endcsname{\the\@tempdima}%
+ \fi
+ \fi
+}
+\newcommand*{\setheadwidth}[2][\@empty]{%
+ \set@hf@width{head}{#1}{#2} %
+}
+\newcommand*{\setfootwidth}[2][\@empty]{%
+ \set@hf@width{foot}{#1}{#2}%
+}
+\newcommand*{\set@hf@width}[3]{%
+ \settowidthof{\@tempdima}{#3}%
+ \ifdim\@tempdima>\paperwidth
+ \PackageWarning
+ {scrpage}%
+ {You've set width of #1 to a value\MessageBreak
+ greater than width of page!\MessageBreak%
+ I`ll reduce width of #1 to width of page}%
+ \setlength{\@tempdima}{\paperwidth}%
+ \else
+ \ifdim\@tempdima<\z@
+ \PackageWarning
+ {scrpage}%
+ {You've set width of #1 to negative value!\MessageBreak%
+ I'll set it to 0pt}%
+ \setlength{\@tempdima}{\z@}%
+ \fi
+ \fi
+ \expandafter\edef\csname @#1width\endcsname{\the\@tempdima}%
+ \edef\@tempa{#2}%
+ \setlength{\@tempdima}{\textwidth}%
+ \addtolength{\@tempdima}{-\csname @#1width\endcsname}%
+ \ifx\@tempa\@empty
+ \if@twoside
+ \setlength{\@tempdimb}{.3333333333\@tempdima}%
+ \else
+ \setlength{\@tempdimb}{.5\@tempdima}%
+ \fi
+ \else
+ \setlength{\@tempdimb}{#2}%
+ \fi
+ \addtolength{\@tempdima}{-\@tempdimb}%
+ \ifdim\@tempdimb<\z@
+ \setlength{\@tempdimb}{-\@tempdimb}%
+ \expandafter\edef\csname @odd#1shift\endcsname{-\the\@tempdimb}%
+ \else
+ \expandafter\edef\csname @odd#1shift\endcsname{\the\@tempdimb}%
+ \fi
+ \ifdim\@tempdima<\z@
+ \setlength{\@tempdima}{-\@tempdima}%
+ \expandafter\edef\csname @even#1shift\endcsname{-\the\@tempdima}%
+ \else
+ \expandafter\edef\csname @even#1shift\endcsname{\the\@tempdima}%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@headwidth}
+% \changes{v1.3}{2001/03/30}{New}
+% \begin{macro}{\@footwidth}
+% \changes{v1.3}{2001/03/30}{New}
+% \begin{macro}{\@oddheadshift}
+% \changes{v1.3}{2001/03/30}{New}
+% \begin{macro}{\@evenheadshift}
+% \changes{v1.3}{2001/03/30}{New}
+% \begin{macro}{\@oddfootshift}
+% \changes{v1.3}{2001/03/30}{New}
+% \begin{macro}{\@evenfootshift}
+% \changes{v1.3}{2001/03/30}{New}
+% The values of width and shift of head and foot are saved at internal
+% macros.
+% \begin{macrocode}
+\newcommand*{\@headwidth}{\textwidth}%
+\newcommand*{\@oddheadshift}{\z@}%
+\newcommand*{\@evenheadshift}{\z@}%
+\newcommand*{\@footwidth}{\textwidth}%
+\newcommand*{\@oddfootshift}{\z@}%
+\newcommand*{\@evenfootshift}{\z@}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Fonts}
+% \begin{macro}{\pnumfont}
+% We have to define a macro defining the font, used by |\pagemark|. Because
+% of this macro may already be defined by a \textsf{KOMA}-script-class, we
+% have to do this, using |\providecommand|
+% \begin{macrocode}
+\providecommand*{\pnumfont}{\normalfont}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\headfont}
+% There is also a macro used by |\@evenhead|, |\@oddhead| and |\@evenfoot|,
+% |\@oddfoot|:
+% \begin{macrocode}
+\providecommand*{\headfont}{\normalfont%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Extended multilanguage formats}
+% \begin{macro}{\partmarkformat}
+% \changes{v1.3e}{2004/07/05}{New}
+% \begin{macro}{\chaptermarkformat}
+% \changes{v1.1}{1995/06/27}{Space after chapternumber increased.}
+% \begin{macro}{\sectionmarkformat}
+% \changes{v1.1}{1995/06/27}{Space after sectionnumber increased.}
+% \begin{macro}{\subsectionmarkformat}
+% \changes{v1.1}{1995/06/27}{Space after subsectionnumber increased.}
+% There are some macros to handle languages like Chinese, Japanese or Korean.
+% These macros were defined first by Werner Lemberg at his CJK-bundle. See
+% |scrclass.dtx| for further information.
+% \begin{macrocode}
+\providecommand{\partmarkformat} {\partname\ \thepart. \ }
+\if@chapter
+ \providecommand{\chaptermarkformat} {\@chapapp\ \thechapter. \ }
+ \providecommand{\sectionmarkformat} {\thesection. \ }
+\else
+ \providecommand{\sectionmarkformat} {\thesection\quad}
+ \providecommand{\subsectionmarkformat} {\thesubsection\quad}
+\fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Configurationfile}
+% Not last and not least we include the local configuration-file
+% \texttt{scrpage.cfg}, if it exists.
+% \begin{macrocode}
+\InputIfFileExists{scrpage.cfg}
+ {\typeout{*************************************^^J%
+ * Local config file scrpage.cfg used^^J%
+ *************************************}}
+ {}
+% \end{macrocode}
+%
+%
+% \subsection{End}
+% \begin{macro}{\KOMAScript}
+% Das \KOMAScript-Logo wird in allen \KOMAScript-Paketen und -Klassen
+% definiert, falls es nicht bereits definiert ist. Dabei werden die
+% Versalien moderat gesperrt. Es wird jedoch darauf verzichtet, die
+% Versalien etwa einen Punkt kleiner zu setzen, da das Logo aktiv
+% ausgezeichnet erscheinen soll.
+% \begin{macrocode}
+\@ifundefined{KOMAScript}{%
+ \DeclareRobustCommand{\KOMAScript}{\textsf{K\kern.05em O\kern.05em%
+ M\kern.05em A\kern.1em-\kern.1em Script}}}{}
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+%</scrpage>
+% \end{macrocode}
+%
+% \Finale
+%
+\endinput
+%
+% end of file `scrpage-obsolete.dtx'
+%%% Local Variables:
+%%% mode: doctex
+%%% TeX-master: t
+%%% End:
diff --git a/obsolete/macros/latex/contrib/koma-script-obsolete/scrpage.pdf b/obsolete/macros/latex/contrib/koma-script-obsolete/scrpage.pdf
new file mode 100644
index 0000000000..df3e8f6cc1
--- /dev/null
+++ b/obsolete/macros/latex/contrib/koma-script-obsolete/scrpage.pdf
Binary files differ
diff --git a/obsolete/macros/latex/contrib/labelcas/README b/obsolete/macros/latex/contrib/labelcas/README
new file mode 100644
index 0000000000..ed4ac87e24
--- /dev/null
+++ b/obsolete/macros/latex/contrib/labelcas/README
@@ -0,0 +1,68 @@
+labelcas
+========
+
+This LaTeX2e-package provides macros "\eachlabelcase" and "\lotlabelcase"
+as a means of forking depending on whether specific labels are defined in
+the current document.
+
+--------------------------------------------------------------------------
+
+Copyright (C) 2006 by Ulrich Diez <ulrich.diez@alumni.uni-tuebingen.de>
+
+This Work may be distributed and/or modified under the conditions of the
+LaTeX Project Public License, either version 1.3 of this license or (at
+your option) any later version. The latest version of this license is in:
+
+ http://www.latex-project.org/lppl.txt
+
+and version 1.3 or later is part of all distributions of LaTeX version
+2003/12/01 or later.
+
+This Work has the LPPL maintenance status `author-maintained'.
+
+The author and Current Maintainer of this Work is Ulrich Diez.
+
+This Work consists of the files labelcas.dtx, labelcas.ins, README and the
+derived files labelcas.sty and labelcas.pdf.
+
+--------------------------------------------------------------------------
+
+Distributed files include:
+
+ README -- This file
+ labelcas.pdf -- Preformatted documentation
+ labelcas.sty -- Package-file for inclusion in document-preambles
+ labelcas.ins -- Extracts .sty-file from .dtx-file
+ labelcas.dtx -- Combined source both of .sty-file and documentation
+
+--------------------------------------------------------------------------
+
+Installation:
+
+Place labelcas.ins and labelcas.dtx into directories searched by TeX.
+In order to obtain the .sty-file, run TeX or LaTeX2e or pdfTeX or
+pdfLaTeX2e on labelcas.ins.
+In order to obtain the documentation, place labelcas.sty into a
+directory searched by TeX and run (pdf)LaTeX2e on labelcas.dtx.
+Index: makeindex -s gind.ist -o labelcas.ind labelcas.idx
+Change-history: makeindex -s gglo.ist -o labelcas.gls labelcas.glo
+
+If you wish to obtain information about usage of the macros while
+omitting sections related to package-implementation and change-
+history, enable "\OnlyDescription" by activating line 42/removing
+the leading percent-char from line 42 in the file labelcas.dtx
+before compiling.
+
+Paper-format of the documentation is a4. If you wish to have the
+documentation in letter-paper, it should be sufficient to remove
+the a4paper-option in line 29 of the file labelcas.dtx before
+compiling.
+
+Within the source-code for the documentation, the hyperref-package is
+used. If you wish to obtain the documentation without (colorized)
+hyperlinks (e.g., for printing), make sure that the hyperref-package
+is loaded with the "draft"-option by activating line 34/removing the
+leading percent-char from line 34 in the file labelcas.dtx before
+compiling.
+
+EOF README
diff --git a/obsolete/macros/latex/contrib/labelcas/labelcas.dtx b/obsolete/macros/latex/contrib/labelcas/labelcas.dtx
new file mode 100644
index 0000000000..d3be1f91ac
--- /dev/null
+++ b/obsolete/macros/latex/contrib/labelcas/labelcas.dtx
@@ -0,0 +1,1908 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2006 by Ulrich Diez <ulrich.diez@alumni.uni-tuebingen.de>
+%
+% This Work may be distributed and/or modified under the conditions of
+% the LaTeX Project Public License, either version 1.3 of this license
+% or (at your option) any later version. The latest version of this
+% license is in:
+%
+% http://www.latex-project.org/lppl.txt
+%
+% and version 1.3 or later is part of all distributions of LaTeX version
+% 2003/12/01 or later.
+%
+% This Work has the LPPL maintenance status `author-maintained'.
+%
+% The Current Maintainer of this work is Ulrich Diez.
+%
+% This Work consists of the files labelcas.dtx, labelcas.ins, README and
+% the derived files labelcas.sty and labelcas.pdf.
+%
+% \fi
+%
+% \iffalse
+%<labelcas>\NeedsTeXFormat{LaTeX2e}
+%<labelcas>\ProvidesPackage{labelcas}
+%<labelcas> [2006/08/14 v1.12 check label-existence and fork accordingly]
+%<*driver>
+\documentclass[a4paper]{ltxdoc}
+\makeatletter
+\@ifdefinable\saved@wrindex{\global\let\saved@wrindex\@wrindex}
+\makeatother
+\usepackage[colorlinks, linkcolor=linkcolour, urlcolor=linkcolour
+%, draft%
+]{hyperref}
+\usepackage{color}
+\definecolor{linkcolour}{cmyk}{0.64,0,0.95,0.40}% <-Olive Green
+\usepackage[DefineLabelcase]{labelcas}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+%\OnlyDescription
+\pagestyle{plain}%
+\setlength{\textheight}{52\baselineskip}
+\setlength{\topmargin}{\paperheight}
+\addtolength{\topmargin}{-\textheight}
+\setlength{\topmargin}{.5\topmargin}
+\addtolength{\topmargin}{-1in}
+\addtolength{\topmargin}{-\voffset}
+\addtolength{\topmargin}{-\headheight}
+\addtolength{\topmargin}{-\headsep}
+\setlength{\footskip}{\paperheight}
+\addtolength{\footskip}{-\textheight}
+\setlength{\footskip}{.15\footskip}
+\addtolength{\footskip}{\baselineskip}
+\makeatletter
+\@settopoint{\textheight}
+\@settopoint{\topmargin}
+\@settopoint{\footskip}
+\makeatother
+\begin{document}
+ \DocInput{labelcas.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{375}
+%
+% \CharacterTable
+% {Upper-case \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
+% Lower-case \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
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+% \iffalse meta-comment
+% !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+% ! !
+% ! !!! In this TeX-input-file henceforth alignment-tab "&" is !!! !
+% ! !!! used for commenting- and line-breaking-purposes. !!! !
+% ! !
+% !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+% \fi
+% \catcode`\&=14\relax
+%
+% \makeatletter
+%
+% & increase \MacroIndent so that 3-digit line-numbers don't stick out:
+%
+% \setlength\MacroIndent{1.5\MacroIndent}&
+%
+% & Add toc-entries and bookmarks to change-history and index, also put
+% & an 's' behind the word 'italic' in the index-prologue:
+%
+% \renewcommand\tableofcontents{&
+% \section*{&
+% \phantomsection
+% \Hy@raisedlink{\pdfbookmark[1]{\contentsname}{section.0}}&
+% \contentsname
+% \@mkboth{\MakeUppercase\contentsname}&
+% {\MakeUppercase\contentsname}&
+% }&
+% \@starttoc{toc}&
+% }&
+%
+% \renewcommand*\glossary@prologue{&
+% \section*{&
+% \phantomsection
+% \customaddcontentsline{toc}&
+% {section}&
+% {Change History}&
+% {\protect\numberline{\protect\null}}&
+% Change History&
+% \@mkboth{\MakeUppercase{Change History}}&
+% {\MakeUppercase{Change History}}&
+% }&
+% }&
+%
+% \renewcommand*\index@prologue{&
+% \section*{&
+% \phantomsection
+% \customaddcontentsline{toc}&
+% {section}&
+% {Index}&
+% {\protect\numberline{\protect\null}}&
+% Index&
+% \@mkboth{\MakeUppercase{Index}}&
+% {\MakeUppercase{Index}}&
+% }&
+% Numbers written in italics refer to the page where the
+% corresponding entry is described; numbers underlined refer to the
+% \ifcodeline@index code line of the \fi definition; numbers in roman
+% refer to the \ifcodeline@index code lines \else pages \fi where the
+% entry is used.&
+% }&
+%
+% \newcommand*\customaddcontentsline[4]{&
+% \begingroup
+% \let\label\@gobble
+% \let\textlatin\@firstofone
+% \ifx\@currentHref\@empty
+% \Hy@Warning{No destination for bookmark of
+% \string\customaddcontentsline,&
+% \MessageBreak destination is added}&
+% \phantomsection
+% \fi
+% \expandafter\ifx csname toclevel@#2\endcsname\relax
+% \begingroup
+% \def\Hy@tempa{#1}&
+% \ifx\Hy@tempa\Hy@bookmarkstype
+% \Hy@WarningNoLine{bookmark level for unknown #2 defaults to 0}&
+% \else
+% \Hy@Info{bookmark level for unknown #2 defaults to 0}&
+% \fi
+% \endgroup
+% \expandafter\gdef\csname toclevel@#2\endcsname{0}&
+% \fi
+% \edef\Hy@toclevel{\csname toclevel@#2\endcsname}&
+% \Hy@writebookmark{\csname the#2\endcsname}{#4#3}{\@currentHref}&
+% {\Hy@toclevel}{#1}&
+% \ifHy@verbose
+% \typeout{&
+% pdftex: bookmark at \the\inputlineno:
+% {\csname the#2\endcsname}{#4#3}{\@currentHref}{\Hy@toclevel}{#1}&
+% }&
+% \fi
+% \addtocontents{#1}&
+% {\protect
+% \customcontentsline{#2}{#3}&
+% {\thepage}{\@currentHref}{#4}}&
+% \endgroup
+% }&
+%
+% \newcommand*\customcontentsline[5]{&
+% \ifx\\#4\\
+% \csname l@#1\endcsname{#5#2}{#3}&
+% \else
+% \ifHy@linktocpage
+% \csname l@#1\endcsname{{#5#2}}&
+% {\hyper@linkstart
+% {link}{#4}{#3}&
+% \hyper@linkend
+% }&
+% \else
+% \csname l@#1\endcsname{#5&
+% \hyper@linkstart
+% {link}{#4}{#2}&
+% \hyper@linkend
+% }{#3}&
+% \fi
+% \fi
+% }&
+%
+% & Write the word '\if' from the tocs:
+% \DeclareRobustCommand\Outif{\string\if}&
+%
+% & Write the equal-sign in change-history:
+% \DeclareRobustCommand\ChgEq{$=$}&
+%
+% & Write macro-names with <prefix> into the margin:
+% \renewcommand*\PrintMacroName[1]{&
+% \strut
+% \ifx\pref\empty
+% \else
+% {\MacroFont\char`\\}&
+% {\footnotesize\meta{\pref}}&
+% \fi
+% \MacroFont\string #1&
+% }&
+%
+% & Write index-entries in main-text:
+% \newcommand*\MacroIndexEntry[1]{&
+% \@bsphack
+% {&
+% \let\special@index\index
+% \ifx\pref\empty
+% \SpecialIndex@{#1}{\encapchar usage}&
+% \else
+% \expandafter\SpecialIndex@
+% \expandafter{&
+% \expandafter<&
+% \pref!>#1}{\encapchar usage}&
+% \fi
+% }&
+% \@esphack
+% }&
+%
+% & Write macro-names with <prefix> into the index in macro-description:
+% \renewcommand*\SpecialMainIndex[1]{&
+% \@bsphack
+% \ifx\pref\empty
+% \SpecialIndex@{#1}{\encapchar main}&
+% \else
+% \expandafter\SpecialIndex@
+% \expandafter{&
+% \expandafter<&
+% \pref!>#1}{\encapchar main}&
+% \fi
+% \@esphack
+% }&
+%
+% & Write macro-names with <prefix> into the index in implementation:
+% \newcommand*\InsertPrefixedUsageToIndex[2]{&
+% \@bsphack
+% {&
+% \expandafter\edef
+% \expandafter\@tempa
+% \expandafter{&
+% \expandafter\string
+% \csname<#1!>#2\endcsname}&
+% \codeline@indextrue
+% \let\special@index\codeline@wrindex
+% \expandafter\SpecialIndex\expandafter{\@tempa}&
+% }&
+% \@esphack
+% }&
+%
+% & Compensate gap between macrocode-environments if no visible/
+% & printable material is between:
+% \newcommand*\macrocodeitemsep{0pt}&
+% \newcommand*\compensategap{&
+% \ifvmode\unskip\vskip\macrocodeitemsep\fi\@inlabeltrue
+% }&
+%
+% & Write macro-names with <prefix> into change-history:
+% \newcommand*\Patchsavedatmacroname{&
+% \ifx\pref\empty
+% \else
+% \expandafter\edef
+% \expandafter\saved@macroname
+% \expandafter{&
+% \expandafter\string
+% \csname<\pref!>\saved@macroname\endcsname}&
+% \fi
+% }&
+%
+% & The <prefix>-placeholder:
+% \newcommand*\pref{}&
+%
+% & Type stuff between angles in meta-format in index and change-history
+% & (\anglechange patches \dospecials which is called by \verb to make
+% & angle active also in verbatim-mode):
+% {&
+% \catcode`\<=13\relax
+% \catcode`\>=12\relax
+% \gdef\anglechange{&
+% \let\olddospecials\dospecials
+% \def\dospecials{&
+% \olddospecials
+% \catcode`\>=12
+% \catcode`\<=13
+% \def<####1>{\textrm{\meta{####1}}}&
+% }&
+% }&
+% }&
+%
+% & create document-title-date from package-filedate
+% \newcommand*\filedatetodate{%
+% \expandafter\@filedatetodate\filedate\@nil
+% }%
+% \@ifdefinable\@filedatetodate{&
+% \def\@filedatetodate#1/#2/#3\@nil{&
+% {&
+% \edef\@tempa{%
+% \ifcase#2\or January\or February\or March\or April\or May&
+% \or June\or July\or August\or September\or October&
+% \or November\or December&
+% \fi
+% \space\number#3, \number#1&
+% }&
+% \expandafter}\expandafter\date\expandafter{\@tempa}&
+% }&
+% }&
+%
+% & hyperref-support for index etc:
+%
+% \renewcommand*\SpecialIndex[1]{&
+% \@bsphack
+% \special@index{&
+% \expandafter\@gobble
+% \string #1\actualchar
+% \string\verb\quotechar*\verbatimchar\string#1\verbatimchar
+% \encapchar sourceusage&
+% }&
+% \@esphack
+% }&
+%
+% \newcommand*\@DefineIndexEntryFormat[4]{&
+% \expandafter\gdef\csname #4\endcsname##1{&
+% \csname @#4\endcsname##1,\@nnil,\@nnil,&
+% }&
+% \toks@{#1{#2{#3}}}&
+% \expandafter\xdef\csname @#4\endcsname##1,##2,{&
+% \noexpand\ifx\noexpand\@nnil##1&
+% \noexpand\expandafter\noexpand\@gobble
+% \noexpand\else
+% \noexpand\expandafter\noexpand\@firstofone
+% \noexpand\fi
+% {&
+% \noexpand\ifx\noexpand\@nnil##2&
+% \noexpand\expandafter\noexpand\@firstoftwo
+% \noexpand\else
+% \noexpand\expandafter\noexpand\@secondoftwo
+% \noexpand\fi
+% {&
+% \noexpand\bgroup
+% \the\toks@
+% \noexpand\lc@remleadspace,##1, ,,&
+% \csname @#4\endcsname##2,&
+% }&
+% {&
+% \noexpand\bgroup
+% \the\toks@
+% \noexpand\lc@remleadspace,##1, ,,&
+% , \csname @#4\endcsname##2,&
+% }&
+% }&
+% }&
+% }&
+%
+% \newcommand*\DefineIndexEntryFormat[3]{&
+% {&
+% \toks@{{\def\@tempa,##1,}}&
+% \edef\@tempa{\the\toks@}&
+% \toks@{{\egroup\link@sanitize##1-\@nil{#2}}}&
+% \edef\@tempb{\the\toks@}&
+% \expandafter\expandafter
+% \expandafter \@DefineIndexEntryFormat
+% \expandafter\@tempa
+% \@tempb{#3}{#1}&
+% }&
+% }&
+%
+% \@ifdefinable\link@sanitize{&
+% \def\link@sanitize#1-#2\@nil#3{\link@@sanitize#1,\@nil{#3}}&
+% }&
+% \@ifdefinable\link@@sanitize{&
+% \def\link@@sanitize#1,#2\@nil#3{\hyperlink{#3.#1}}&
+% }&
+% \global\let\@wrindex\saved@wrindex
+%
+% \DefineIndexEntryFormat{sourceusage}{line}{#1}&
+% \DefineIndexEntryFormat{main}{line}{\underline{#1}}&
+% \DefineIndexEntryFormat{usage}{page}{\textit{#1}}&
+% \DefineIndexEntryFormat{glossaryusage}{page}{#1}&
+%
+% \let\oldtheCodelineNo\theCodelineNo
+% \renewcommand*\theCodelineNo{&
+% \Hy@raisedlink{&
+% \hypertarget{line.\arabic{CodelineNo}}{}&
+% }&
+% \oldtheCodelineNo
+% }&
+%
+% \renewcommand*\changes@[3]{&
+% \protected@edef\@tempa{&
+% \noexpand\glossary{&
+% #1\levelchar
+% \ifx\saved@macroname\@empty
+% \space\actualchar\generalname
+% \else
+% \expandafter\@gobble\saved@macroname
+% \actualchar\string\verb\quotechar*\verbatimchar
+% \saved@macroname\verbatimchar
+% \fi
+% :\levelchar #3&
+% \noexpand\encapchar glossaryusage&
+% }&
+% }&
+% \@tempa\endgroup
+% \@esphack
+% }&
+%
+% \let\oldtheindex\theindex
+% \def\theindex{&
+% \oldtheindex
+% \let\oldbfseries\bfseries
+% \def\bfseries\hfil##1\hfil{&
+% \phantomsection
+% \oldbfseries\hfil##1\hfil
+% \Hy@raisedlink{\pdfbookmark[2]{##1}{index.##1}}&
+% }&
+% }&
+%
+% & suppress page-number of change-history-item:
+% \@ifdefinable\suppresspage{&
+% \DeclareRobustCommand\suppresspage[3]{\efill}%
+% }&
+%
+% & \nameref without hyperlink (to be used within \hyperref etc):
+% \@ifdefinable\nolinknameref{&
+% \DeclareRobustCommand*\nolinknameref[1]{&
+% \@safe@activestrue
+% \expandafter\real@setref
+% \csname r@#1\endcsname\@thirdoffive{#1}&
+% \@safe@activesfalse
+% }&
+% }&
+%
+% & end of hyperref-support-section
+%
+% \makeatother
+%
+% \changes{v1.0}{2006/01/04}%
+% {Initial public release.\suppresspage}
+% \changes{v1.01}{2006/01/06}%
+% {Fixed documentation-inaccuracies.\suppresspage}
+% \changes{v1.02}{2006/01/29}%
+% {Fixed documentation-inaccuracies.\suppresspage}
+% \changes{v1.04, v1.05}{2006/03/04 2006/03/09}%
+% {Fixed documentation-inaccuracies.\suppresspage}
+% \changes{v1.08}{2006/07/10}%
+% {DefineLabelcase-option declared within group for
+% \textsf{\mbox{hyperref}}-compatibility.\suppresspage}
+% \changes{v1.09}{2006/07/16}{Hyperlinks in documentation.\suppresspage}
+% \changes{v1.12}{2006/08/14}%
+% {Fixed documentation-inaccuracies.\suppresspage}
+% \DoNotIndex{\@empty,\@firstofone,\@firstoftwo,\@gobble,\@ifdefinable,&
+% \@nil,\@secondoftwo,\@sptoken,\@temptokena,\toks@,&
+% \begingroup,\csname,\DeclareOption,\DeclareRobustCommand,&
+% \def,\edef,\else,\endcsname,\endgroup,\expandafter,\fi,&
+% \futurelet,\global,\ifx,\let,\long,\newcommand,&
+% \ProcessOptions,\relax,\the}&
+%
+% \GetFileInfo{labelcas.sty}
+% \filedatetodate
+% \title{&
+% The \textsf{\mbox{labelcas}} package&
+% \thanks{&
+% \vtop{\noindent This document corresponds to
+% \mbox{\textsf{labelcas}~\fileversion}, dated \filedate.\newline
+% Usage and distribution under \textsf{\mbox{LPPL}}-conditions. See
+% \hyperref[sec6]{\emph{\ref*{sec6}~\nolinknameref{sec6}}} for more
+% details.&
+% }&
+% }&
+% }&
+% \author{Ulrich Diez}&
+% \maketitle
+%
+% \begin{abstract}
+% \noindent This \LaTeXe-package provides macros |\eachlabelcase| and
+% |\lotlabelcase| as a means of forking depending on whether specific
+% labels are defined in the current document.
+% \end{abstract}
+%
+% \tableofcontents
+%
+% \newpage
+% \section{Introduction}\label{sec1}
+%
+% The package's name \textsf{\mbox{labelcas}} is an eight-letter
+% abbreviation for the phrases ``label'' and ``case''.
+%
+% There are rare occasions where the author of a document would like to
+% have detected whether specific labels are defined/in use within the
+% document so that proper forking/referencing can take place.
+% This package provides the macros |\eachlabelcase| and |\lotlabelcase|
+% which might facilitate this task.
+%
+% A mechanism for branching depending on whether referencing-labels exist,
+% might be handy, e.g., when extracting a ``snippet'' from a large
+% document: In case that within the snippet a label/document-part is
+% referenced which is outside the snippet's scope, ugly `{\makeatletter
+% \nfss@text{\reset@font\bfseries??}}' will intersperse the resulting
+% output-file and warnings about undefined references will accumulate
+% within the log-file.
+%
+% By testing the label's existence, you can catch up the error and either
+% change the way of referencing (e.g., refer to the snippet's bibliography
+% instead) or completely suppress referencing for those cases. (By using
+% \textsf{\mbox{David Carlisle's}} \textsf{xr}- or
+% \textsf{\mbox{xr-hyper}}-package, you can make available labels of the
+% large document to the snippet also. A label not defined in the snippet
+% can be picked up from the large document\dots)
+%
+% \subsection{Space notation}
+%
+% When listing some piece of \TeX-source-code, you may need to visibly
+% distinguish word-separation from single space-characters. The symbol
+% \verb*+ + is chosen whenever it is important to give a visible
+% impression of a space-character in a (possibly ASCII-encoded) \TeX-&
+% input-file. {\verb*+ +}\nobreak\(_{x}\) does not represent a character
+% of an input-file but a token which occurs after tokenizing the input.
+% The token's category-code is \(x\), the character-number usually is
+% \(32\), which is the ASCII-number of the space-character.
+%
+% \section{Package-loading}\label{sec2}
+%
+% The package is to be loaded in the document-preamble by |\usepackage|.
+% \medskip
+%
+% |\usepackage{labelcas}|~~~or
+%
+% |\usepackage[DefineLabelcase]{labelcas}|.
+% \medskip
+%
+% The only package-option is |DefineLabelcase|. Its usage is described in
+% section~\hyperref[sec4]{\emph{\ref*{sec4}~\nolinknameref{sec4}}}.
+%
+% \newpage
+% \section{The macros}\label{sec3}
+%
+% \subsection{Basic usage}\label{sec3-1}
+%
+% \DescribeMacro{\eachlabelcase}
+% The macro |\eachlabelcase| iterates on a comma-separated list of
+% ``argument-triplets'', whereby each triplet specifies:~~\nobreak
+% {&
+% \makeatletter
+% \setbox\@tempboxa\hbox{3. Action if the label is undefined.}&
+% \@tempdima\dp\@tempboxa
+% \vtop{&
+% \noindent
+% 1. a label,\\
+% 2. action if the label is defined,\\
+% 3. action if the label is undefined.&
+% }&
+% \par\prevdepth\@tempdima
+% }&
+% \noindent
+% During the iteration, an ``action-queue'' is gathered up from these
+% specifications. After iterating, the ``action-queue'' will be executed.
+% You can also specify a new macro-name within an optional argument. If
+% you do so, the ``action-queue'' will not be executed but the macro will
+% be defined to perform the actions specified in the queue:
+% \bigskip
+%
+% \noindent
+% {&
+% \footnotesize
+% |\eachlabelcase[|\emph{\textbackslash macro}|]{|~~~\nobreak
+% \vtop{&
+% \noindent
+% \marg{label 1}\marg{action if label 1 defined}&
+% \marg{action if label 1 undefined}|,|\\
+% \marg{label 2}\marg{action if label 2 defined}&
+% \marg{action if label 2 undefined}| ,|\\
+% \hspace*{.275\hsize}\texttt{\dots}\\
+% \marg{label n}\marg{action if label n defined}&
+% \marg{action if label n undefined}\ \ \ |}|&
+% }&
+% }&
+% \bigskip
+%
+% \noindent Space-tokens which might surround the comma-separated triplets
+% will be gobbled.
+% \medskip
+%
+% \noindent
+% \DescribeMacro{\lotlabelcase}
+% The macro |\lotlabelcase| iterates on a comma-separated list of label-&
+% names and tests for each name if the corresponding label is defined.
+% Within the arguments you can specify actions for the cases:~~\nobreak
+% {&
+% \makeatletter
+% \setbox\@tempboxa\hbox{4. the list does not contain any label.}&
+% \@tempdima\dp\@tempboxa
+% \vtop{&
+% \noindent
+% 1. all labels are defined,\\
+% 2. none of the labels is defined,\\
+% 3. some labels are defined/some are undefined,\\
+% 4. the list does not contain any label.&
+% }&
+% \par\prevdepth\@tempdima
+% }&
+% \noindent
+% Like in |\eachlabelcase|, you can also specify a new macro-name within
+% an optional argument. If you do so, the action will not be executed but
+% the macro will be defined to perform the action:
+% \bigskip
+%
+% \noindent
+% {&
+% \footnotesize
+% |\lotlabelcase[|\emph{\textbackslash macro}|]|\nobreak
+% \vtop{&
+% \noindent
+% |{|\meta{label 1}|,|\meta{label 2}|,|\texttt{\dots}&
+% |,|\meta{label n}|}|\\
+% \marg{actions if all labels are defined}\\
+% \marg{actions if all labels are undefined}\\
+% \marg{actions if some labels are defined and
+% some labels are undefined}\\
+% \marg{actions if list is empty}&
+% }&
+% }&
+% \bigskip
+%
+% \noindent Space-tokens which might surround the label-names will be
+% gobbled. One level of braces will also be gobbled so that you can also
+% test for labels the names of which start or end by a space or contain
+% some comma.
+%
+% \subsubsection{Possible problems}\label{sec3-1-1}
+%
+% \begin{itemize}
+% \item Testing for labels which are \textbf{not definable} according to
+% the syntax-rules will lead to \TeX-internal error-messages and
+% deliver unexpected/unwanted results!
+% \item ``Label- and referencing management'' in \LaTeXe\ is done by
+% means of the aux-file, the content of which is gathered and
+% corrected during several \LaTeX-runs, and which does not yet
+% exist in the first run. So, in the first run, all labels from the
+% current document are undefined---when applying |\...labelcase| to
+% labels of the current document, it will in any case take at least
+% two \LaTeX-runs until everything matches out correctly.
+% \item It was mentioned that, in the macros |\eachlabelcase| and
+% |\lotlabelcase|, space-tokens which surround the argument-&
+% triplets/label-names, will be gobbled. There are situations where
+% the category-code of the input-character \verb*+ + is changed---&
+% e.g., due to a preceding |\obeyspaces| or when using some package
+% where the encoding of \TeX-input-files is played around with.
+% In such cases, the input-character \verb*+ + does not get
+% tokenized as space-token any more but as some \verb*+ +\nobreak&
+% \(_{\neq10}\)-token, so that in such cases, triplets/labels in
+% these macros may, in the input-file, not be surrounded by
+% \verb*+ +\nobreak-\nobreak characters.\\
+% If you want to have these \verb*+ +\nobreak\(_{\neq10}\)-tokens
+% gobbled anyway, you can easily achieve this by defining another
+% set of these macros where the appropriate token, e.g.,
+% \verb*+ +\nobreak\(_{13}\)~(active-space) instead of
+% \verb*+ +\nobreak\(_{10}\)~(space-token), is taken into account.
+% How this is done, is described in
+% section~\hyperref[sec4]{\emph{\ref*{sec4}~\nolinknameref{sec4}}}.
+% \item In the very unlikely case{\makeatletter\footnote{The case is very
+% unlikely because it is a convention in \LaTeXe\ to leave
+% {\verbatim@font\string\@nil} undefined. If labels are defined in
+% terms of macros, these macros are to expand to something that can
+% be evaluated by a {\verbatim@font\string\csname\dots\string&
+% \endcsname}-construct. If they are to expand to something, they
+% must be defined\dots}} that you wish |\lotlabelcase| (or variants
+% thereof\thinspace\footnote{\(\rightarrow\)&
+% \hyperref[sec4]{\emph{\ref*{sec4}~\nolinknameref{sec4}}}.})&
+% to scan for the label |\@nil|, |\@nil|
+% has to be put in braces and/or has to be surrounded by space-&
+% tokens. This is because the internal iterator-macros terminate on
+% |\@nil|.
+% \item Internally token-registers are used and temporary-macros get
+% defined. So the macros |\eachlabelcase| and |\lotlabelcase| (and
+% all variants&
+% \addtocounter{footnote}{-1}\addtocounter{Hfootnote}{-1}&
+% \footnotemark) are not ``full-expandable''. This means, |\edef| or
+% |\write| or control-sequences the like which evaluate their
+% arguments fully, cannot be applied to them.\footnote{In any case it
+% cannot be ensured that all arguments supplied are
+% ``full-expandable''\dots} Therefore they are declared robust.
+% \item |\lotlabelcase| and |\eachlabelcase| can be nested. Inner
+% instances will be gathered into the action-queues of outer
+% instances.
+% \item If the optional argument for defining a \meta{macro} rather than
+% having the action(s) executed immediately, is used, \meta{macro}
+% will only be defined within the group where the |\...labelcase|-&
+% command occurred.\\
+% |\@ifdefinable| is involved into the assignment-process, so that
+% an ``already-defined''-error is forced whenever an existing macro
+% is about to be overridden.\\
+% If you need it global, you can achieve this---after having
+% \meta{macro} defined---by something like
+% |\global\let\macro=\macro|.\\
+% If you need a ``long''-macro, you can achieve this---after having
+% \meta{macro} defined---by something like:\\
+% |\expandafter\renewcommand\expandafter\macro\expandafter{\macro}|&
+% .\\
+% But think about it. These macros don't take arguments!
+% \item If you use the arguments of |\lotlabelcase|/|\eachlabelcase| for
+% defining other referencing-labels, things can easily get very
+% confusing\dots
+% \end{itemize}
+%
+% \newpage
+% \subsubsection{Examples}\label{sec3-1-2}
+% \smallskip
+%
+% Within this document, only the labels |sec1|, |sec2|, |sec3|, |sec4|,
+% |sec5| and |sec6| are defined.\bigskip
+%
+% \noindent
+% \begin{minipage}{\linewidth}
+% \noindent
+% |\lotlabelcase{sec1, sec2 , {sec3} ,sec4}|\\
+% | {All labels are defined.}|\\
+% | {None of the labels is defined.}|\\
+% | {Some labels are defined, some not.}|\\
+% | {The list is empty.}|\medskip\\
+% yields:
+% \lotlabelcase{sec1, sec2 , {sec3} ,sec4}
+% {All labels are defined.}
+% {None of the labels is defined.}
+% {Some labels are defined, some not.}
+% {The list is empty.}&
+% \end{minipage}
+% \bigskip
+%
+% \noindent
+% \begin{minipage}{\linewidth}
+% \noindent
+% |\lotlabelcase{sec1, sec2 , UNDEFINED ,sec3}|\\
+% | {All labels are defined.}|\\
+% | {None of the labels is defined.}|\\
+% | {Some labels are defined, some not.}|\\
+% | {The list is empty.}|\medskip\\
+% yields:
+% \lotlabelcase{sec1, sec2 , UNDEFINED ,sec3}
+% {All labels are defined.}
+% {None of the labels is defined.}
+% {Some labels are defined, some not.}
+% {The list is empty.}&
+% \end{minipage}
+% \bigskip
+%
+% \noindent
+% \begin{minipage}{\linewidth}
+% \noindent
+% |\lotlabelcase{UNDEF1, UNDEF2 , {UNDEF3} ,UNDEF4}|\\
+% | {All labels are defined.}|\\
+% | {None of the labels is defined.}|\\
+% | {Some labels are defined, some not.}|\\
+% | {The list is empty.}|\medskip\\
+% yields:
+% \lotlabelcase{UNDEF1, UNDEF2 , {UNDEF2-1} ,UNDEF2-2}
+% {All labels are defined.}
+% {None of the labels is defined.}
+% {Some labels are defined, some not.}
+% {The list is empty.}&
+% \end{minipage}
+% \bigskip
+%
+% \noindent
+% \begin{minipage}{\linewidth}
+% \noindent
+% |\lotlabelcase{ ,, ,}|\\
+% | {All labels are defined.}|\\
+% | {None of the labels is defined.}|\\
+% | {Some labels are defined, some not.}|\\
+% | {The list is empty.}|\medskip\\
+% yields:
+% \lotlabelcase{ ,, ,}
+% {All labels are defined.}
+% {None of the labels is defined.}
+% {Some labels are defined, some not.}
+% {The list is empty.}&
+% \end{minipage}
+% \bigskip
+%
+% \noindent
+% \begin{minipage}{\linewidth}
+% \noindent
+% |\lotlabelcase[\test]{sec1, sec2 , UNDEFINED ,sec3}|\\
+% | {All labels are defined.}|\\
+% | {None of the labels is defined.}|\\
+% | {Some labels are defined, some not.}|\\
+% | {The list is empty.}|\medskip\\
+% defines: |\test|:{
+% \lotlabelcase[\test]{sec1, sec2 , UNDEFINED ,sec3}
+% {All labels are defined.}
+% {None of the labels is defined.}
+% {Some labels are defined, some not.}
+% {The list is empty.}&
+% {\makeatletter\verbatim@font\meaning\test}}
+% \end{minipage}
+% \bigskip
+%
+% \noindent
+% \begin{minipage}{\linewidth}
+% \noindent
+% |\eachlabelcase{ {sec1}{sec1 defined/}{sec1 undefined/},|\\
+% | {sec2}{sec2 defined/}{sec2 undefined/} ,|\\
+% | {UNDEF}{UNDEF defined/}{UNDEF undefined/} ,|\\
+% | {sec3}{sec3 defined.}{sec3 undefined.} }|&
+% \medskip\\
+% yields:
+% \eachlabelcase{ {sec1}{sec1 defined/}{sec1 undefined/},
+% {sec2}{sec2 defined/}{sec2 undefined/} ,
+% {UNDEF}{UNDEF defined/}{UNDEF undefined/} ,
+% {sec3}{sec3 defined.}{sec3 undefined.} }&
+% \end{minipage}
+% \bigskip
+%
+% \noindent
+% \begin{minipage}{\linewidth}
+% \noindent
+% |\eachlabelcase[\test]{ {sec1}{sec1 defined/}{sec1 undefined/},|\\
+% | {sec2}{sec2 defined/}{sec2 undefined/} ,|\\
+% | {UNDEF}{UNDEF defined/}{UNDEF undefined/} ,|&
+% \\
+% | {sec3}{sec3 defined.}{sec3 undefined.} }|&
+% \medskip\\
+% {&
+% \eachlabelcase[\test]{ {sec1}{sec1 defined/}{sec1 undefined/},
+% {sec2}{sec2 defined/}{sec2 undefined/} ,
+% {UNDEF}{UNDEF defined/}{UNDEF undefined/} ,
+% {sec3}{sec3 defined.}{sec3 undefined.} }&
+% defines: |\test|:
+%
+% \hskip\leftmargini
+% \vtop{{\makeatletter\verbatim@font\meaning\test}}&
+% }&
+% \end{minipage}
+%
+% \newpage
+% \subsection{&
+% \texorpdfstring
+% {&
+% Advanced usage (brace-matching, {\ttfamily\selectfont\Outif&
+% \dots\thinspace}, defining macros)&
+% }&
+% {&
+% Advanced usage (brace-matching, {\textbackslash if\dots}, defining
+% macros)&
+% }&
+% }
+%
+% \begin{itemize}
+% \item Braces within the arguments/comma-separated items must be
+% balanced.
+% \item Within the ``action-parts'' of |\eachlabelcase|'s argument-&
+% triplets from which the action-queue is formed, balancing
+% {\makeatletter\verbatim@font\mbox{\string\if\dots\string\else
+% \dots\string\fi}}-constructs is not required. But ensured must
+% be, that in the resulting action-queue everything is balanced
+% correctly in any case.
+% \bigskip
+%
+% \noindent
+% \begin{minipage}{\linewidth}
+% \noindent
+% |\eachlabelcase{ {sec1} {\if aa} {\if ab},|\\
+% | {sec2} {a is a\else} {a is b\else} ,|\\
+% | {sec3}{a is not a\fi.}{a is not b\fi.} }|&
+% \smallskip\\
+% is gathered to: |\if aaa is a\else a is not a\fi.|\\
+% Executing the queue yields:
+% \eachlabelcase{ {sec1} {\if aa} {\if aa},
+% {sec2} {a is a\else} {a is b\else} ,
+% {sec3}{a is not a\fi.}{a is not b\fi.}, }&
+% \end{minipage}
+% \bigskip
+%
+% \noindent
+% \begin{minipage}{\linewidth}
+% \noindent
+% |\eachlabelcase{ {sec1} {\if aa} {\if ab},|\\
+% | {UNDEF} {a is a\else} {a is b\else} ,|\\
+% | {sec3} {a is not a\fi.}{a is not b\fi.} }|&
+% \smallskip\\
+% is gathered to: |\if aaa is b\else a is not a\fi.|\\
+% Executing the queue yields:
+% \eachlabelcase{ {sec1} {\if aa} {\if aa},
+% {UNDEF} {a is a\else} {a is b\else} ,
+% {sec3} {a is not a\fi.}{a is not b\fi.}, }&
+% \end{minipage}
+% \medskip
+%
+% When trying such obscure things, you must be aware that brace/&
+% group-nesting is independent from conditional-nesting! You might
+% easily end up with a ``forgotten-endgroup''-error or some
+% ``extra |\else|\dots''-error when placing such things into other
+% {\makeatletter\verbatim@font\mbox{\string\if\dots\string\else
+% \dots\string\fi}}-constructs!
+%
+% \item If you wish to use the arguments/comma-separated items for
+% defining macros, no extra |#|-level is needed as everything is
+% accumulated within/pro\-ces\-sed by means of token-registers.
+% \bigskip
+%
+% \noindent
+% \begin{minipage}{\linewidth}
+% \noindent
+% |\eachlabelcase{ {sec1}{\def\testA#1#2#3}{\def\testB#1#2#3},|\\
+% | {sec2} {{#1,#2,#3}} {{#3,#2,#1}} }|&
+% \smallskip\\
+% is gathered to: |\def\testA#1#2#3{#1,#2,#3}|~~~.\\
+% Executing the queue defines:&
+% {&
+% \eachlabelcase{ {sec1}{\def\testA#1#2#3}{\def\testB#1#2#3},
+% {sec2} {{#1,#2,#3}} {{#3,#2,#1}} }
+% \vtop{&
+% |\testA|: {\makeatletter\verbatim@font\meaning\testA}\\
+% |\testB|: {\makeatletter\verbatim@font\meaning\testB}~~~.&
+% }&
+% }&
+% \end{minipage}
+% \bigskip
+%
+% \noindent
+% \begin{minipage}{\linewidth}
+% |\eachlabelcase{ {sec1}{\def\testA#1#2#3}{\def\testB#1#2#3},|\\
+% | {UNDEF} {{#1,#2,#3}} {{#3,#2,#1}} }|&
+% \smallskip\\
+% is gathered to: |\def\testA#1#2#3{#3,#2,#1}|~~~.\\
+% Executing the queue defines:&
+% {&
+% \eachlabelcase{ {sec1}{\def\testA#1#2#3}{\def\testB#1#2#3},
+% {UNDEF} {{#1,#2,#3}} {{#3,#2,#1}} }
+% \vtop{&
+% |\testA|: {\makeatletter\verbatim@font\meaning\testA}\\
+% |\testB|: {\makeatletter\verbatim@font\meaning\testB}~~~.&
+% }&
+% }&
+% \end{minipage}
+% \medskip
+% \end{itemize}
+%
+% \newpage
+% \section{&
+% \texorpdfstring
+% {Package option---Different spaces, different se\-pa\-ra\-tors}&
+% {Package option\textemdash Different spaces, different separators}&
+% }&
+% \label{sec4}
+%
+% Above was said that space-tokens (\verb*+ +\nobreak\(_{10}\)-tokens)
+% which surround the comma-list-arguments of |\eachlabelcase| and
+% |\lotlabelcase| are gobbled.
+%
+% There are circumstances where the category-code which gets assigned to
+% the input-character \verb*+ + during the tokenizing-process is changed,
+% and thus the gobbling-mechanism is broken for these input-characters.
+% E.g., due to a preceding |\obeyspaces| or when using some package where
+% the encoding of \TeX-input-files is played around with.
+% This is because space-gobbling internally is implemented by means of
+% macros with \verb*+ +\nobreak\(_{10}\)-token-delimited arguments.
+%
+% In normal circumstances, \verb*+ +\nobreak-characters in the input-file
+% which trail a control-word do not get tokenized when \TeX\ ``reads'' an
+% input. So it's kind of a problem to get space-tokens right behind the
+% name of a control-word, e.g., as first items of the parameter-text when
+% defining macros. A space within braces \verb*+{ }+ does get tokenized as
+% it is not preceded by a control-word, but by a brace-character. So a
+% solution to the problem is: Define a macro which takes an (en-braced)
+% argument and use this macro for defining the desired control-word
+% whereby the argument is placed right behind the name of the control-&
+% word which is about to be defined. (Henceforth the term \emph{definer&
+% -macro} is applied in order to call special attention to the fact that
+% defining other control-sequences is the only purpose of such a macro.)
+% A \verb*+ + as the definer-macro's argument gets tokenized while this
+% argument is used as the first item of the desired control-word's
+% parameter-text \(\rightarrow\) the first item of the desired control-&
+% word's parameter-text will be a space-token.
+%
+% \DescribeMacro{\DefineLabelcase}
+% In case of the \textsf{\mbox{labelcas}}-package, the problem of getting
+% space-tokens as delimiters right behind control-words, is also solved by
+% implementing such a definer-macro. It is called |\DefineLabelcase| and
+% used for defining both the user-level-macros |\eachlabelcase| and
+% |\lotlabelcase| and the internal-macros |\lc@iterate|,
+% |\lc@remtrailspace| and |\lc@remleadspace|.
+% Usually it is discarded/destroyed when defining these macros has taken
+% place. But you can specify the package-option |DefineLabelcase|. When
+% you do so, |\DefineLabelcase| does not get destroyed, and you can use it
+% for creating ``new variants'' of |\eachlabelcase| and |\lotlabelcase|
+% plus internals while specifying proper space-tokens and separators.
+% |\DefineLabelcase| takes four mandatory arguments:
+% \bigskip
+%
+% \noindent
+% |\DefineLabelcase|\marg{space}\marg{delimiter}\marg{prefix}&
+% \marg{global-indicator}
+%
+% \begin{description}
+% \item[\textnormal{\meta{space}}] specifies the argument-surrounding
+% token that is to be removed. Usually surrounding space-tokens
+% shall be discarded. Usually:~\verb*+ +\nobreak\(_{10}\)~(space).
+% \item[\textnormal{\meta{delimiter}}] specifies the delimiter/separator.
+% Usually the argument-triplets or label-lists are comma-separated.
+% Usually:~\verb*+,+\nobreak\(_{12}\)~(comma).
+% \item[\textnormal{\meta{prefix}}] specifies the macro-name-prefix. You
+% cannot assign the same name at the same time to different
+% control-sequences. Therefore, when creating new variants of
+% |\eachlabelcase| and |\lotlabelcase|, you have to specify a prefix
+% which gets inserted at the beginning of the macro-name. E.g.,
+% specifying the prefix |FOO| leads to defining the macro-set:\\
+% |\FOOeachlabelcase|\MacroIndexEntry{\<prefix!>eachlabelcase},
+% |\FOOlotlabelcase|\MacroIndexEntry{\<prefix!>lotlabelcase}
+% (user-macros) and\\
+% |\FOOlc@iterate|\MacroIndexEntry{\<prefix!>lc@iterate},
+% |\FOOlc@remtrailspace|\MacroIndexEntry{\<prefix!>lc@remtrailspace},
+% |\FOOlc@remleadspace|\MacroIndexEntry{\<prefix!>lc@remleadspace}
+% (internal).\\
+% The original versions are just called |\eachlabelcase|,
+% |\lotlabelcase|, |\lc@iterate|\dots (without a prefix in the
+% macro-name). Usually:~(empty).
+% \item[\textnormal{\meta{global-indicator}:}] In case that this argument
+% contains only the token |\global|, defining the new macro-set takes
+% place in terms of |\global|. Otherwise the scope is restricted to
+% the current grouping-level. Usually:~\verb*+\global+.
+% \end{description}
+%
+% Don't try weird things like specifying the same token both for
+% \meta{space} and \meta{delimiter}, or leaving any of those empty, or
+% specifying any of those to |\@nil| (,~which is reserved for terminating
+% the recursion)---unless you like error-messages! Please only specify
+% tokens which may be used for separating parameters from each other
+% within the parameter-text of a definition! Also please specify the
+% \meta{prefix} only in terms of letter-character-tokens! \textbf{There is
+% no extra error-checking implemented on these things!}
+% \bigskip
+%
+% \noindent
+% \begin{minipage}{\linewidth}
+% \noindent
+% |\begingroup|\\
+% |\obeyspaces|\\
+% |\endlinechar=-1\relax%|\\
+% \verb*|\DefineLabelcase{ }{/}{SPACEOBEYED}{local}%|\\
+% \verb*|\SPACEOBEYEDlotlabelcase[\test]{sec1/ sec2 / UNDEF /sec3}%|\\
+% \verb*|{All labels are defined.}%|\\
+% \verb*|{None of the labels is defined.}%|\\
+% \verb*|{Some labels are defined, some not.}%|\\
+% \verb*|{The list is empty.}%|\\
+% |\global\let\test\test%|\\
+% |\endgroup|\medskip\\
+% defines: |\test|:
+%\begingroup
+%\obeyspaces
+%\endlinechar=-1\relax&
+%\DefineLabelcase{ }{/}{SPACEOBEYED}{local}&
+%\SPACEOBEYEDlotlabelcase[\test]{sec1/ sec2 / UNDEF /sec3}&
+%{All labels are defined.}&
+%{None of the labels is defined.}&
+%{Some labels are defined, some not.}&
+%{The list is empty.}&
+%\global\let\test\test&
+%\endgroup
+% {&
+% \makeatletter
+% \def\spacereplace#1 #2\@nil{&
+% #1&
+% \def\@tempa{#2}&
+% \ifx\@tempa\@empty
+% \expandafter\@gobble
+% \else
+% \expandafter\@firstofone
+% \fi
+% {\char32\spacereplace#2\@nil}&
+% }&
+% \verbatim@font
+% \expandafter\expandafter
+% \expandafter\spacereplace
+% \expandafter\meaning
+% \expandafter\test
+% \space\@nil
+% }&
+% \global\let\test\undefined
+% \end{minipage}
+% \bigskip
+%
+% \noindent
+% \begin{minipage}{\linewidth}
+% \noindent
+% |\begingroup|\\
+% |\endlinechar=-1\relax|\\
+% |\DefineLabelcase{-}{/}{BAR}{local}%|\\
+% |\BARlotlabelcase[\test]{sec1/-sec2----/--%|\\
+% | ---/sec3}%|\\
+% |{All labels are defined.}%|\\
+% |{None of the labels is defined.}%|\\
+% |{Some labels are defined, some not.}%|\\
+% |{The list is empty.}%|\\
+% |\global\let\test\test|\\
+% |\endgroup|\medskip\\
+% defines: |\test|:
+% \begingroup
+% \endlinechar=-1\relax
+% \DefineLabelcase{-}{/}{BAR}{local}&
+% \BARlotlabelcase[\test]{sec1/-sec2----/--&
+% ---/sec3}&
+% {All labels are defined.}&
+% {None of the labels is defined.}&
+% {Some labels are defined, some not.}&
+% {The list is empty.}&
+% \global\let\test\test
+% \endgroup
+% {\makeatletter\verbatim@font\meaning\test}&
+% \global\let\test\undefined
+% \end{minipage}
+% \bigskip
+%
+% \noindent
+% \begin{minipage}{\linewidth}
+% \noindent
+% |\begingroup|\\
+% |\endlinechar=-1\relax|\\
+% |\DefineLabelcase{.}{/}{DOT}{local}%|\\
+% |\DOTeachlabelcase{.{sec1}..{sec1 defined/}{sec1 undefined/}/%|\\
+% |..................{sec2}...{sec2 defined/}...{sec2 undefined/}./..%|\\
+% |..................{UNDEF}{UNDEF defined/}...{UNDEF undefined/}./%|\\
+% |..................{sec3}{sec3 defined.}{sec3 undefined.}..}|\\
+% |\endgroup|\medskip\\
+% yields:
+% \begingroup
+% \endlinechar=-1\relax
+% \DefineLabelcase{.}{/}{DOT}{local}&
+% \DOTeachlabelcase{.{sec1}..{sec1 defined/}{sec1 undefined/}/&
+%...................{sec2}...{sec2 defined/}...{sec2 undefined/}./..&
+%...................{UNDEF}{UNDEF defined/}...{UNDEF undefined/}./&
+%...................{sec3}{sec3 defined.}{sec3 undefined.}..}&
+% \endgroup
+% \end{minipage}
+%
+% \newpage
+% \section{Thanks, Acknowledgements}\label{sec5}
+% \begin{itemize}
+% \item Many thanks to all who encouraged me in making the attempt of
+% getting things in this package less error-prone.
+% \item Thanks to everybody who took the macro-writing challenges
+% presented in the \textsf{\mbox{INFO-\TeX}-`Around the bend'}-&
+% department which was initiated back in the early 90's by
+% \textsf{\mbox{Michael Downes}} and regularly took place under his
+% guidance. His summaries of the solutions are archived and online
+% available at \href{http://www.tug.org/tex-archive/info/aro-bend/}&
+% {\textsf{http://www.tug.org/tex-archive/info/aro-bend/}}. The
+% information therein helps a great deal in understanding \TeX\ in
+% general and in learning about basic problem-solving-strategies---&
+% e.g., the removal of leading- and trailing spaces from an (almost)
+% arbitrary token-sequence (exercise.015/answer.015).
+% \item Thanks to everybody who provides valuable information at the
+% \TeX-news-groups and mailing-lists. I received great help
+% especially at \textsf{\mbox{comp.text.tex}}, where my---often
+% trivial---questions were answered patiently again and again.
+% \item Thanks to the \LaTeX-package authors, not only for providing means
+% of achieving special typesetting-goals, but also for hereby
+% delivering informative programming-examples.
+% \textsf{\mbox{labelcas}} actually was inspired by
+% \textsf{\mbox{David Carlisle's}} \textsf{xr}- and
+% \textsf{\mbox{xr-hyper}}-packages which make available the labels
+% of other \LaTeX-documents to the current one.
+% \end{itemize}
+%
+% \section{Legal Notes}\label{sec6}
+%
+% \textsf{\mbox{labelcas}}---Copyright (C) 2006 by \mbox{Ulrich Diez}
+% (\href{mailto:ulrich.diez@alumni.uni-tuebingen.de}&
+% {\textsf{ulrich.diez@alumni.uni-tuebingen.de}})
+% \medskip
+%
+% \textsf{\mbox{labelcas}} may be distributed and/or modified under the
+% conditions of the \textsf{\LaTeX\ Project Public Licence (LPPL)}, either
+% version 1.3 of this license or (at your option) any later version.&
+% \footnote{The latest version of this license is in
+% \href{http://www.latex-project.org/lppl.txt}&
+% {\textsf{http://www.latex-project.org/lppl.txt}}
+% and version 1.3 or later is part of all distributions of \LaTeX\ version
+% 2003/12/01 or later.}
+% The author and Current Maintainer of this Work is \mbox{Ulrich Diez}.
+% This Work has the LPPL maintenance status `author-maintained' and
+% consists of the files \textsf{\mbox{labelcas.dtx}},
+% \textsf{\mbox{labelcas.ins}}, \textsf{\mbox{README}} and the derived
+% files \textsf{\mbox{labelcas.sty}} and \textsf{\mbox{labelcas.pdf}}.
+% \medskip
+%
+% Usage of the \textsf{\mbox{labelcas}}-package is at your own risk. There
+% is no warranty---neither for the documentation nor for any other part of
+% the \textsf{\mbox{labelcas}}-package. If something breaks, you usually
+% may keep the pieces.
+%
+% \StopEventually{&
+% \let\PrintChanges\relax
+% \PrintIndex
+% }
+%
+% \newpage
+% \section{Implementation}
+%
+% \subsection{A note about removing leading and trailing spaces}
+%
+% The matter of removing trailing spaces from an (almost) arbitrary
+% token-sequence is elaborated in detail by \textsf{\mbox{Michael Downes},
+% `Around the Bend \#15, answers'}, a summary of internet-discussion which
+% took place under his guidance primarily at the \textsf{\mbox{INFO-\TeX}
+% list}, but also at \textsf{\mbox{comp.text.tex}} (usenet) and via
+% private e-mail; December 1993. Online archived at
+% \href{http://www.tug.org/tex-archive/info/aro-bend/answer.015}&
+% {\textsf{http://www.tug.org/tex-archive/info/aro-bend/answer.015}}.
+%
+% One basic approach suggested therein is using \TeX's scanning of
+% delimited parameters in order to detect and discard the ending space of
+% an argument:
+% \begin{quote}
+% \dots scan for a pair of tokens: a space-token and some well-chosen
+% bizarre token that can't possibly occur in the scanned text. If you
+% put the bizarre token at the end of the text, and if the text has a
+% trailing space, then \TeX's delimiter matching will match at that
+% point and not before, because the earlier occurrences of space don't
+% have the requisite other member of the pair.
+%
+% Next consider the possibility that the trailing space is absent:
+% \TeX\ will keep on scanning ahead for the pair \meta{space}&
+% \meta{bizarre} until either it finds them or it decides to give up and
+% signal a `Runaway argument?' error. So you must add a stop pair to
+% catch the runaway argument possibility: a second instance of the
+% bizarre token, preceded by a space. If \TeX\ doesn't find a match at
+% the first bizarre token, it will at the second one.
+% \end{quote}
+%
+% (Look up the macros |\KV@@sp@def|, |\KV@@sp@b|, |\KV@@sp@c| and
+% |\KV@@sp@d| in \textsf{\mbox{David Carlisle's} \mbox{keyval}-package}
+% for an interesting variation on this approach.)
+% \medskip
+%
+% When scanning for parameters ~~~|##1|\meta{space}\meta{bizarre}|##2|&
+% \meta{B1}~~~ the sequence:
+% \\
+% \meta{stuff where to remove trail-space}\meta{bizarre}\meta{space}&
+% \meta{bizarre}\meta{B1}&
+% \\
+% , you can fork two cases:
+% \begin{enumerate}
+% \parskip=0ex\relax
+% \item Trailing-space:\\
+% |##1|=\meta{stuff where to remove trail-space}, but with removed
+% space. (And possibly one removed brace-level!)\\
+% |##2| = \meta{space}\meta{bizarre}.
+% \item No trailing-space:\\
+% |##1|=\meta{stuff where to remove trail-space}\meta{bizarre}.\\
+% |##2| is empty.
+% \end{enumerate}
+%
+% So forking can be implemented depending on the emptiness of |##2|.
+%
+% You can easily prevent the brace-removal in the first case, e.g., by
+% adding (and later removing) something (e.g., a space-token) in front of
+% the \meta{stuff where to remove trail-space}.
+%
+% You can choose \meta{B1}=\meta{bizarre}\meta{space}.
+% \medskip
+%
+% \textsf{`Around the Bend \#15, answers'} also presents a similar way for
+% the removal of leading spaces from an (almost) arbitrary token-sequence:
+% \begin{quote}
+% The latter method is perhaps most straightforwardly done as a mirror-&
+% image of the method for removing a trailing space: make the delimiter
+% \meta{bizarre}\meta{space}, and call the macro [\dots] by putting
+% \meta{bizarre} before the scanned text and a stop pair \meta{bizarre}&
+% \meta{space} after it, in case a leading space is not present
+% \end{quote}
+%
+% When scanning for parameters ~~~|##1|\meta{bizarre}\meta{space}|##2|&
+% \meta{B2}~~~ the sequence:
+% \\
+% \meta{bizarre}\meta{stuff where to remove lead-space}\meta{bizarre}&
+% \meta{space}\meta{B2}&
+% \\
+% , you can fork two cases:
+% \begin{enumerate}\parskip=0ex\relax
+% \item Leading space:\\
+% |##1|= is empty.\\
+% |##2| = \meta{stuff where to remove lead-space}\meta{bizarre}&
+% \meta{space} (but with a leading-space removed from
+% \meta{stuff where to remove lead-space}).
+% \item No leading space:\\
+% |##1|=\meta{bizarre}\meta{stuff where to remove lead-space}.\\
+% |##2| is empty.
+% \end{enumerate}
+%
+% Thus forking can be implemented depending on the emptiness of either of
+% the two arguments.
+%
+% You can choose \meta{B2}=\meta{bizarre}\meta{bizarre}.
+%
+% \subsection{Flow of work}
+%
+% \begin{sloppypar}
+% Both |\|\meta{prefix}|eachlabelcase| and |\|\meta{prefix}|lotlabelcase|
+% iterate on (e.g., comma-) separated lists:
+% \settowidth\labelwidth{5.}&
+% \leftmargini=\labelwidth\relax
+% \advance\leftmargini\labelsep\relax
+% \advance\leftmargini\parindent\relax
+% \begin{enumerate}
+% \parskip=0ex\relax\itemsep=.25\baselineskip\relax
+% \item The list is passed as an argument to the user-macro.
+% \item The list is passed from the user-macro to
+% |\|\meta{prefix}|lc@iterate|\MacroIndexEntry{\<prefix!>lc@iterate}
+% whereby a leading \meta{space} is added for brace-removal-&
+% protection.
+% \item |\|\meta{prefix}|lc@iterate|\MacroIndexEntry{\<prefix!>lc@iterate}
+% recursively iterates on the list-items until the item
+% \meta{space}|\@nil| occurs:&
+% {\def\labelenumii{\theenumii)}&
+% \settowidth\labelwidth{a)}&
+% \leftmarginii=\labelwidth\relax
+% \advance\leftmarginii\labelsep\relax
+% \begin{enumerate}
+% \parskip=0ex\relax\itemsep=0ex\relax
+% \makeatletter\@topsep=0ex\relax\makeatother
+% \item The item will be passed to |\|\meta{prefix}|lc@remtrailspace|&
+% \MacroIndexEntry{\<prefix!>lc@remtrailspace}. Here trailing
+% \meta{space} is removed recursively. If after removing
+% trailing-space the result is empty, you can conclude that
+% everything (incl the previously inserted ``brace-removal-&
+% protection-\meta{space}'' was removed as either the item was
+% empty or consisted of a sequence of \meta{space}. If the
+% result does not imply an empty item, it will be passed to
+% \item |\|\meta{prefix}|lc@remleadspace|&
+% \MacroIndexEntry{\<prefix!>lc@remleadspace} where leading
+% \meta{space} (also the previously inserted one) is removed
+% recursively. After that |\|\meta{prefix}|lc@remleadspace|&
+% \MacroIndexEntry{\<prefix!>lc@remleadspace} passes the item to
+% the macro
+% \item |\@tempa| for further processing. |\@tempa| at this stage will
+% be locally defined within the user-macro. |\@tempa| initiates
+% the actual work which (hopefully!) results in adding the
+% appropriate action-sequence to the queue which is represented by
+% |\@temptokena|.
+% \item Before processing the next item in the next iteration-round, a
+% leading \meta{space} for brace-removal-protection will be added
+% in front of the remaining list by |\|\meta{prefix}|lc@iterate|&
+% \MacroIndexEntry{\<prefix!>lc@iterate}.
+% \end{enumerate}\unskip}&
+% \item After iterating the list within the user-macro, the routine
+% |\lc@macrodefiner|\MacroIndexEntry{\lc@macrodefiner} will check
+% for the user-macro's optional argument and, in case that it is
+% present, modify the action-queue-register, so that, when
+% ``flushing'' it, a macro will be produced instead of queue-&
+% execution.
+% \item The final step within the user-macro is ``flushing'' the action-&
+% queue-register.
+% \end{enumerate}
+% \end{sloppypar}
+%
+% \newpage
+% \subsection{Code}
+%
+% \begin{macro}{\DefineLabelcase}
+% |\DefineLabelcase| is used for providing parameters during the
+% definition of the macros~\nobreak
+% {&
+% \makeatletter
+% \setbox\@tempboxa\hbox{|\|\meta{prefix}|lc@remleadspace|
+% (internal).}&
+% \@tempdima\dp\@tempboxa
+% \vtop{&
+% \noindent
+% |\|\meta{prefix}|eachlabelcase|,
+% |\|\meta{prefix}|lotlabelcase| (user),\\
+% |\|\meta{prefix}|lc@iterate|,
+% |\|\meta{prefix}|lc@remtrailspace|,\\
+% |\|\meta{prefix}|lc@remleadspace| (internal).&
+% }&
+% \par\prevdepth\@tempdima
+% }&
+% \noindent
+% Parameters are:
+% |#1|\(=\)\meta{space}; |#2|\(=\)\meta{delimiter};
+% |#3|\(=\)\meta{prefix}; |#4|\(=\)\meta{global-indicator}.
+%
+% Defining of |\DefineLabelcase| takes place within a group, so that
+% after closing the group it gets discarded. Package-options will also
+% be evaluated within that group, right after defining
+% |\DefineLabelcase|. By the option |DefineLabelcase|,
+% |\DefineLabelcase| can be ``globalized'' before closing the group:
+% \iffalse
+%<*labelcas>
+% \fi
+% \begin{macrocode}
+\begingroup
+\DeclareOption{DefineLabelcase}%
+ {\global\let\DefineLabelcase\DefineLabelcase}%
+\newcommand\DefineLabelcase[4]{%
+% \end{macrocode}
+% \end{macro}
+% \def\pref{prefix}
+% \begin{macro}{lc@remtrailspace}
+% \Patchsavedatmacroname
+% \changes{v1.01}{2006/01/06}{\meta{B1}\ChgEq\meta{bizarre}\nobreak
+% \meta{space}.}
+% \changes{v1.03}{2006/02/21}{Chan\-ged forking-mechanism to \string
+% \verb+\string\@firstoftwo+/\string\verb+\string\@secondoftwo+.}
+% \changes{v1.06}{2006/04/20}{\string\verb*+\string\@ifdefinable+ instead
+% of \string\verb*+\string\newcommand+.}
+% \changes{v1.10}{2006/07/21}{Empty-argument-check added.}
+% It is assured that \meta{delimiter} does not occur in the top-level of
+% the \meta{stuff where to remove trail-space}, for \meta{delimiter} is
+% used in the list for separating the single items of \meta{stuff where
+% to remove trail-space} from each other. Therefore you can choose
+% \meta{bizarre}=\meta{delimiter} and \meta{B1}=\meta{bizarre}&
+% \meta{space}=\meta{delimiter}\meta{space}:
+% \begin{macrocode}
+ \expandafter\@ifdefinable\csname#3lc@remtrailspace\endcsname{%
+ \expandafter\long
+ \expandafter\def
+ \csname#3lc@remtrailspace\endcsname##1#1#2##2#2#1{%
+% \end{macrocode}
+% \InsertPrefixedUsageToIndex{prefix}{lc@remtrailspace}&
+% Above was said that forking can take place depending on emptiness of
+% the second argument. The arguments come from the items of the comma-&
+% separated list---thus they might contain macro-definitions and/or
+% unbalanced {\makeatletter\verbatim@font\mbox{\string\if\dots\string
+% \else\dots\string\fi}}-constructs. So put the second argument into a
+% macro |\@tempa| by means of a token-register in order to prevent
+% errors related to parameter-numbering:
+% \begin{macrocode}
+ \begingroup
+ \toks@{##2}%
+ \edef\@tempa{\the\toks@}%
+% \end{macrocode}
+% When forking takes place, the content of the arguments might---when
+% placed into the corresponding |\if|- or |\else|-branches directly---&
+% erroneously match up those constructs. In order to prevent this, the
+% action related to the different branches is handled by means of
+% |\@firstoftwo| and |\@secondoftwo| which get expanded when
+% ``choosing the forking-route'' is already accomplished:
+% \begin{macrocode}
+ \expandafter\endgroup
+ \ifx\@tempa\@empty
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+% \end{macrocode}
+% The appropriate action in case of no more trailing \meta{space} is
+% checking if the item is not empty and if so, initiating the removal
+% of leading \meta{space}. In this case |##1| is terminated by
+% \meta{bizarre}. If the item is empty, the leading \meta{space}
+% inserted by the iterator for brace-protection is also removed so that
+% |##1| equals \meta{bizarre}. If the item is not empty, start leading-&
+% \meta{space}-removal, but add only \meta{space}\meta{B2} at the end
+% instead of \meta{bizarre}\meta{space}\meta{B2}---above was said that
+% \meta{B2}=\meta{bizarre}\meta{bizarre}=&
+% \meta{delimiter}\meta{delimiter} in |\|\meta{prefix}|lc@remleadspace|:
+% \begin{macrocode}
+ {%
+ {\toks@{##1}\edef\@tempa{\the\toks@}%
+ \toks@{#2}\edef\@tempb{\the\toks@}%
+ \expandafter}%
+ \ifx\@tempa\@tempb
+ \expandafter\@gobble
+ \else
+ \expandafter\@firstofone
+ \fi
+ {\csname#3lc@remleadspace\endcsname#2##1#1#2#2}%
+% \end{macrocode}
+% \compensategap
+% \InsertPrefixedUsageToIndex{prefix}{lc@remleadspace}&
+% \begin{macrocode}
+ }%
+% \end{macrocode}
+% The appropriate action in case of trailing \meta{space} is checking
+% and possibly removing more thereof:
+% \begin{macrocode}
+ {\csname#3lc@remtrailspace\endcsname##1#2#1#2#2#1}%
+% \end{macrocode}
+% \compensategap
+% \InsertPrefixedUsageToIndex{prefix}{lc@remtrailspace}&
+% \begin{macrocode}
+ }%
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{lc@remleadspace}
+% \Patchsavedatmacroname
+% \changes{v1.01}{2006/01/06}{\meta{B2}\ChgEq\meta{bizarre}\meta{bizarre}.}
+% \changes{v1.03}{2006/02/21}{Chan\-ged forking-mechanism to
+% \string\verb+\string\@firstoftwo+/\string\verb+\string\@secondoftwo+.}
+% \changes{v1.06}{2006/04/20}{\string\verb*+\string\@ifdefinable+
+% instead of \string\verb*+\string\newcommand+.}
+% |\|\meta{prefix}|lc@remleadspace| is similar to
+% |\|\meta{prefix}|lc@remtrailspace|, but with \meta{B2}=\meta{bizarre}&
+% \meta{bizarre}=\meta{delimiter}\meta{delimiter}:
+% \begin{macrocode}
+ \expandafter\@ifdefinable\csname#3lc@remleadspace\endcsname{%
+ \expandafter\long
+ \expandafter\def
+ \csname#3lc@remleadspace\endcsname##1#2#1##2#2#2{%
+% \end{macrocode}
+% \InsertPrefixedUsageToIndex{prefix}{lc@remleadspace}&
+% Above was said that forking can take place e.g., depending on
+% emptiness of the first argument. Arguments still come from the list-&
+% items, so let's use token-registers for the same reasons as in
+% |\|\meta{prefix}|lc@remtrailspace|:
+% \begin{macrocode}
+ \begingroup
+ \toks@{##1}%
+ \edef\@tempa{\the\toks@}%
+% \end{macrocode}
+% The single list-items might still contain macro-definitions, |\if|-&
+% forking and the like, therefore again choose the forking-route in
+% terms of |\@firstoftwo| and |\@secondoftwo|:
+% \begin{macrocode}
+ \expandafter\endgroup
+ \ifx\@tempa\@empty
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+% \end{macrocode}
+% The appropriate action in case of leading \meta{space} is checking
+% and possibly removing more thereof:
+% \begin{macrocode}
+ {\csname#3lc@remleadspace\endcsname#2##2#2#2}%
+% \end{macrocode}
+% \InsertPrefixedUsageToIndex{prefix}{lc@remleadspace}&
+% In case of no more leading \meta{space}, the actual work, which is
+% defined in user-macro's |\@tempa|, can be done:
+% \begin{macrocode}
+ {\@tempa##1#2}%
+ }%
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{lc@iterate}
+% \Patchsavedatmacroname
+% \changes{v1.06}{2006/04/20}{\string\verb*+\string\@ifdefinable+
+% instead of \string\verb*+\string\newcommand+.}
+% \changes{v1.07}{2006/04/27}{Define \string\verb*+\string\@tempa+
+% in terms of \string\verb*+\string\long+.}
+% \changes{v1.08}{2006/07/10}{Chan\-ged forking-mechanism to
+% \string\verb+\string\@firstoftwo+/\string\verb+\string\@secondoftwo+.}
+% \changes{v1.09}{2006/07/16}{Chan\-ged forking-mechanism so that
+% two temporary macros suffice.}
+% \changes{v1.10}{2006/07/21}{Empty-argument-check removed.}
+% |\|\meta{prefix}|lc@iterate| iterates on arguments which are
+% delimited by \meta{delimiter}.
+% \begin{macrocode}
+ \expandafter\@ifdefinable\csname#3lc@iterate\endcsname{%
+ \expandafter\long
+ \expandafter\def
+ \csname#3lc@iterate\endcsname##1#2{%
+% \end{macrocode}
+% \InsertPrefixedUsageToIndex{prefix}{lc@iterate}&
+% Make locally available the arguments as macros:\\
+% |\@tempa|\(=\)current argument\\
+% |\@tempb|\(=\)recursion-stop-item:
+% \begin{macrocode}
+ \begingroup
+ \toks@{##1}%
+ \edef\@tempa{\the\toks@}%
+ \toks@{#1\@nil}%
+ \edef\@tempb{\the\toks@}%
+% \end{macrocode}
+% End the group and test if the current argument equals the
+% recursion-stop-item:
+% \begin{macrocode}
+ \expandafter\endgroup\ifx\@tempa\@tempb
+ \expandafter\@gobble
+ \else
+ \expandafter\@firstofone
+ \fi
+% \end{macrocode}
+% If not: Start trailing-space-removal\dots, then continue iterating the
+% list and hereby add a preceding \meta{space} to the next item for
+% brace-protection during trailing-\meta{space}-removal in the next run:
+% \begin{macrocode}
+ {%
+ \csname#3lc@remtrailspace\endcsname##1#2#1#2#2#1%
+% \end{macrocode}
+% \compensategap
+% \InsertPrefixedUsageToIndex{prefix}{lc@remtrailspace}&
+% \begin{macrocode}
+ \csname#3lc@iterate\endcsname#1%
+% \end{macrocode}
+% \compensategap
+% \InsertPrefixedUsageToIndex{prefix}{lc@iterate}&
+% \begin{macrocode}
+ }%
+ }%
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{eachlabelcase}
+% \Patchsavedatmacroname
+% \changes{v1.03}{2006/02/21}{Chan\-ged forking-mechanism to
+% \string\verb+\string\@firstoftwo+/\string\verb+\string\@secondoftwo+.}
+% \changes{v1.06}{2006/04/20}{\string\verb*+\string\@ifdefinable+
+% instead of \string\verb*+\string\newcommand+.}
+% |\|\meta{prefix}|eachlabelcase|'s optional argument is the possibly-&
+% to-be-defined control-sequence. The mandatory-argument contains the
+% argument-triplet-list.
+% \begin{macrocode}
+ \expandafter\@ifdefinable\csname#3eachlabelcase\endcsname{%
+ \expandafter\DeclareRobustCommand
+ \csname#3eachlabelcase\endcsname[2][]{%
+% \end{macrocode}
+% \InsertPrefixedUsageToIndex{prefix}{eachlabelcase}&
+% Locally define |\@tempa|---it is called by
+% |\|\meta{prefix}|lc@remleadspace| for working on a list-item when all
+% surrounding \meta{space} has been removed:
+% \begin{macrocode}
+ {%
+% \end{macrocode}
+% The stuff that results from \meta{space}-removing is surrounded by
+% \meta{delimiter}. It cannot be processed at this place, as first the
+% triplet needs to be split into its components by |\@tempb|:
+% \begin{macrocode}
+ \long\def\@tempa#2####1#2{%
+ \@tempb####1#2#1#2#2%
+ }%
+% \end{macrocode}
+% |\@tempb| is used for splitting the triplet and removing \meta{space}
+% between the triplet's components. In this process it redefines itself
+% several times. In case that no label is defined the name thereof
+% corresponds to the first component, add the third component to
+% |\@temptokena|, otherwise add the second:
+% \begin{macrocode}
+ \long\def\@tempb####1{%
+ \begingroup
+ \long\def\@tempb########1########2########3{%
+ \expandafter\expandafter
+ \expandafter\endgroup
+ \expandafter\ifx
+ \csname r@########1\endcsname\relax
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ {\@temptokena\expandafter{\the\@temptokena########3}}%
+ {\@temptokena\expandafter{\the\@temptokena########2}}%
+ }%
+ \begingroup
+ \toks@{}%
+ \long\def\@tempb########1{%
+ \long\def\@tempa#2################1#2{%
+ \toks@\expandafter{\the\toks@{################1}}%
+ \expandafter\endgroup\expandafter\@tempb\the\toks@
+ }%
+ \toks@\expandafter{\the\toks@{########1}}%
+ \csname#3lc@remleadspace\endcsname#2%
+% \end{macrocode}
+% \compensategap
+% \InsertPrefixedUsageToIndex{prefix}{lc@remleadspace}&
+% \begin{macrocode}
+ }%
+ \toks@{{####1}}\csname#3lc@remleadspace\endcsname#2%
+% \end{macrocode}
+% \compensategap
+% \InsertPrefixedUsageToIndex{prefix}{lc@remleadspace}&
+% \begin{macrocode}
+ }%
+% \end{macrocode}
+% Let's clear the register where the action-queue is accumulated:
+% \begin{macrocode}
+ \@temptokena{}%
+% \end{macrocode}
+% Let's iterate on the list:
+% \begin{macrocode}
+ \csname#3lc@iterate\endcsname#1##2#2\@nil#2%
+% \end{macrocode}
+% \InsertPrefixedUsageToIndex{prefix}{lc@iterate}&
+% In case that the optional argument is specified, the routine
+% |\lc@macrodefiner| will modify the register to define a macro:
+% \begin{macrocode}
+ \lc@macrodefiner{##1}%
+% \end{macrocode}
+% Close the group and ``flush'' the register:
+% \begin{macrocode}
+ \expandafter}\the\@temptokena
+ }%
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{lotlabelcase}
+% \Patchsavedatmacroname
+% \changes{v1.06}{2006/04/20}{\string\verb*+\string\@ifdefinable+
+% instead of \string\verb*+\string\newcommand+.}
+% |\|\meta{prefix}|lotlabelcase|'s optional argument is the possibly-&
+% to-be-defined control-sequence. The five mandatory-arguments contain
+% the label-list and the actions that shall take place in the cases: All
+% of the labels are defined~/ none are defined~/ just some are defined~/
+% list is empty:
+% \begin{macrocode}
+ \expandafter\@ifdefinable\csname#3lotlabelcase\endcsname{%
+ \expandafter\DeclareRobustCommand
+ \csname#3lotlabelcase\endcsname[6][]{%
+% \end{macrocode}
+% \InsertPrefixedUsageToIndex{prefix}{lotlabelcase}&
+% Locally define |\@tempa|---it is called by
+% |\|\meta{prefix}|lc@remleadspace| for working on a list-item when all
+% surrounding \meta{space} has been removed:
+% \begin{macrocode}
+ {%
+ \long\def\@tempa#2####1#2{%
+% \end{macrocode}
+% The list item is a label. In case that it is undefined, have the
+% helper-macro |\@tempb| defined/switched to |\relax|, otherwise do the
+% same but use |\@tempc| instead:
+% \begin{macrocode}
+ {\expandafter\expandafter\expandafter}\expandafter
+ \ifx\csname r@####1\endcsname\relax
+ \let\@tempb\relax
+ \else
+ \let\@tempc\relax
+ \fi
+ }%
+% \end{macrocode}
+% Define |\@tempb| and |\@tempc| to empty. They may be ``switched'' to
+% |\relax| when |\@tempa| is called during iteration.
+% \begin{macrocode}
+ \def\@tempb{}%
+ \def\@tempc{}%
+% \end{macrocode}
+% Let's iterate on the list:
+% \begin{macrocode}
+ \csname#3lc@iterate\endcsname#1##2#2\@nil#2%
+% \end{macrocode}
+% \InsertPrefixedUsageToIndex{prefix}{lc@iterate}&
+% Assign the register according to the label-defining-cases which are
+% now represented by the definitions of |\@tempb| and |\@tempc| which
+% are defined either |\relax| or |empty|:
+% \begin{macrocode}
+ \ifx\@tempb\@empty
+ \ifx\@tempc\@empty
+ \@temptokena{##6}%
+ \else
+ \@temptokena{##3}%
+ \fi
+ \else
+ \ifx\@tempc\@empty
+ \@temptokena{##4}%
+ \else
+ \@temptokena{##5}%
+ \fi
+ \fi
+% \end{macrocode}
+% In case that the optional argument is specified, the routine
+% |\lc@macrodefiner| will modify the register to define a macro:
+% \begin{macrocode}
+ \lc@macrodefiner{##1}%
+% \end{macrocode}
+% Close the group and ``flush'' the register:
+% \begin{macrocode}
+ \expandafter}\the\@temptokena
+ }%
+ }%
+% \end{macrocode}
+% \end{macro}
+% If the \meta{global-indicator}-argument equals |\global|, the above
+% definitions need to be made |\global|:
+% \begin{macrocode}
+ {\toks@{#4}\edef\@tempa{\the\toks@}\def\@tempb{\global}\expandafter}%
+ \ifx\@tempa\@tempb
+ \expandafter\global\expandafter\let
+ \csname#3lc@remtrailspace\expandafter\endcsname
+% \end{macrocode}
+% \compensategap
+% \InsertPrefixedUsageToIndex{prefix}{lc@remtrailspace}&
+% \begin{macrocode}
+ \csname#3lc@remtrailspace\endcsname
+% \end{macrocode}
+% \compensategap
+% \InsertPrefixedUsageToIndex{prefix}{lc@remtrailspace}&
+% \begin{macrocode}
+ \expandafter\global\expandafter\let
+ \csname#3lc@remleadspace\expandafter\endcsname
+% \end{macrocode}
+% \compensategap
+% \InsertPrefixedUsageToIndex{prefix}{lc@remleadspace}&
+% \begin{macrocode}
+ \csname#3lc@remleadspace\endcsname
+% \end{macrocode}
+% \compensategap
+% \InsertPrefixedUsageToIndex{prefix}{lc@remleadspace}&
+% \begin{macrocode}
+ \expandafter\global\expandafter\let
+ \csname#3lc@iterate\expandafter\endcsname
+% \end{macrocode}
+% \compensategap
+% \InsertPrefixedUsageToIndex{prefix}{lc@iterate}&
+% \begin{macrocode}
+ \csname#3lc@iterate\endcsname
+% \end{macrocode}
+% \compensategap
+% \InsertPrefixedUsageToIndex{prefix}{lc@iterate}&
+% \begin{macrocode}
+ \expandafter\global\expandafter\let
+ \csname#3eachlabelcase\expandafter\endcsname
+% \end{macrocode}
+% \compensategap
+% \InsertPrefixedUsageToIndex{prefix}{eachlabelcase}&
+% \begin{macrocode}
+ \csname#3eachlabelcase\endcsname
+% \end{macrocode}
+% \compensategap
+% \InsertPrefixedUsageToIndex{prefix}{eachlabelcase}&
+% \begin{macrocode}
+ \expandafter\global\expandafter\let
+ \csname#3lotlabelase\expandafter\endcsname
+% \end{macrocode}
+% \compensategap
+% \InsertPrefixedUsageToIndex{prefix}{lotlabelcase}&
+% \begin{macrocode}
+ \csname#3lotlabelcase\endcsname
+% \end{macrocode}
+% \compensategap
+% \InsertPrefixedUsageToIndex{prefix}{lotlabelcase}&
+% \begin{macrocode}
+ \fi
+% \end{macrocode}
+% Now the definition of |\DefineLabelcase| is complete:
+% \begin{macrocode}
+}%
+% \end{macrocode}
+% Remember that a group was started for performing |\DefineLabelcase|'s
+% definition and that |\DefineLabelcase| will be gone when that group gets
+% closed---unless some ``globalizing'' takes place before. So this is the
+% time for checking if |\DefineLabelcase| shall be available to the user
+% and in this case for making it global:
+% \begin{macrocode}
+\ProcessOptions\relax
+% \end{macrocode}
+% Now the group which was started for defining |\DefineLabelcase| can be
+% closed---right after using it for defining the basic-usage-macros:
+% \begin{macrocode*}
+\expandafter\endgroup\DefineLabelcase{ }{,}{}{\global}%
+% \end{macrocode*}
+% \let\pref\empty
+% \begin{macro}{\lc@macrodefiner}
+% \changes{v1.06}{2006/04/20}{\string\verb*+\string\@ifdefinable+
+% instead of \string\verb*+\string\newcommand+.}
+% \changes{v1.11}{2006/08/04}{Unnecessary
+% \string\verb*+\string\expandafter+ removed.}
+% There is still the routine left which is applied by the user-macros
+% for having the action-queue-register modified, so that when
+% ``flushing'' it, a macro will be produced instead of queue-execution.
+% |\lc@macrodefiner| takes as its argument the optional argument of a
+% user-macro. In case that the argument is not empty, the action-queue-&
+% register is modified, so that ``flushing'' it yields the attempt of
+% defining a macro from the argument which expands to the former content
+% of the register:
+% \begin{macrocode}
+\newcommand\lc@macrodefiner[1]{%
+ {\def\@tempa{#1}\expandafter}%
+ \ifx\@tempa\@empty
+ \else
+ \@temptokena\expandafter{%
+ \expandafter\begingroup
+ \expandafter\toks@
+ \expandafter\expandafter
+ \expandafter {%
+ \expandafter\expandafter
+ \expandafter \@temptokena
+ \expandafter\expandafter
+ \expandafter {%
+ \expandafter\the
+ \expandafter\@temptokena
+ \expandafter}%
+ \expandafter}%
+ \expandafter\@temptokena
+ \expandafter{%
+ \expandafter\@temptokena
+ \expandafter{%
+ \the\@temptokena}%
+ \@ifdefinable#1{\edef#1{\the\@temptokena}}}%
+ \expandafter\endgroup
+ \the\expandafter\@temptokena
+ \the\toks@
+ }%
+ \fi
+}%
+% \end{macrocode}
+% \end{macro}
+% \iffalse
+%</labelcas>
+% \fi
+% \newpage\anglechange\PrintChanges
+% \Finale
+\endinput
diff --git a/obsolete/macros/latex/contrib/labelcas/labelcas.ins b/obsolete/macros/latex/contrib/labelcas/labelcas.ins
new file mode 100644
index 0000000000..bbc70e0323
--- /dev/null
+++ b/obsolete/macros/latex/contrib/labelcas/labelcas.ins
@@ -0,0 +1,54 @@
+%%
+%% Copyright (C) 2006 by Ulrich Diez <ulrich.diez@alumni.uni-tuebingen.de>
+%%
+%% This Work may be distributed and/or modified under the conditions of
+%% the LaTeX Project Public License, either version 1.3 of this license
+%% or (at your option) any later version. The latest version of this
+%% license is in:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of LaTeX version
+%% 2003/12/01 or later.
+%%
+%% This Work has the LPPL maintenance status `author-maintained'.
+%%
+%% The author and Current Maintainer of this Work is Ulrich Diez.
+%%
+%% This Work consists of the files labelcas.dtx, labelcas.ins, README and
+%% the derived files labelcas.sty and labelcas.pdf.
+%%
+\input docstrip.tex
+\keepsilent
+
+\usedir{tex/latex/labelcas}
+
+\preamble
+
+This is a generated file.
+
+Copyright (C) 2006 by Ulrich Diez <ulrich.diez@alumni.uni-tuebingen.de>
+
+This file may be distributed and/or modified under the conditions of
+the LaTeX Project Public License, either version 1.3 of this license
+or (at your option) any later version. The latest version of this
+license is in:
+
+ http://www.latex-project.org/lppl.txt
+
+and version 1.3 or later is part of all distributions of LaTeX version
+2003/12/01 or later.
+
+\endpreamble
+
+\generate{\file{labelcas.sty}{\from{labelcas.dtx}{labelcas}}}
+
+\obeyspaces
+\Msg{*************************************************************}
+\Msg{* *}
+\Msg{* To finish the installation you have to move the following *}
+\Msg{* file into a directory searched by TeX: labelcas.sty *}
+\Msg{* *}
+\Msg{*************************************************************}
+
+\endbatchfile
diff --git a/obsolete/macros/latex/contrib/labelcas/labelcas.pdf b/obsolete/macros/latex/contrib/labelcas/labelcas.pdf
new file mode 100644
index 0000000000..8c7cbc9c2d
--- /dev/null
+++ b/obsolete/macros/latex/contrib/labelcas/labelcas.pdf
Binary files differ
diff --git a/obsolete/macros/latex/contrib/labelcas/labelcas.sty b/obsolete/macros/latex/contrib/labelcas/labelcas.sty
new file mode 100644
index 0000000000..01400f2ada
--- /dev/null
+++ b/obsolete/macros/latex/contrib/labelcas/labelcas.sty
@@ -0,0 +1,217 @@
+%%
+%% This is file `labelcas.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% labelcas.dtx (with options: `labelcas')
+%%
+%% This is a generated file.
+%%
+%% Copyright (C) 2006 by Ulrich Diez <ulrich.diez@alumni.uni-tuebingen.de>
+%%
+%% This file may be distributed and/or modified under the conditions of
+%% the LaTeX Project Public License, either version 1.3 of this license
+%% or (at your option) any later version. The latest version of this
+%% license is in:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of LaTeX version
+%% 2003/12/01 or later.
+%%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{labelcas}
+ [2006/08/14 v1.12 check label-existence and fork accordingly]
+\begingroup
+\DeclareOption{DefineLabelcase}%
+ {\global\let\DefineLabelcase\DefineLabelcase}%
+\newcommand\DefineLabelcase[4]{%
+ \expandafter\@ifdefinable\csname#3lc@remtrailspace\endcsname{%
+ \expandafter\long
+ \expandafter\def
+ \csname#3lc@remtrailspace\endcsname##1#1#2##2#2#1{%
+ \begingroup
+ \toks@{##2}%
+ \edef\@tempa{\the\toks@}%
+ \expandafter\endgroup
+ \ifx\@tempa\@empty
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ {%
+ {\toks@{##1}\edef\@tempa{\the\toks@}%
+ \toks@{#2}\edef\@tempb{\the\toks@}%
+ \expandafter}%
+ \ifx\@tempa\@tempb
+ \expandafter\@gobble
+ \else
+ \expandafter\@firstofone
+ \fi
+ {\csname#3lc@remleadspace\endcsname#2##1#1#2#2}%
+ }%
+ {\csname#3lc@remtrailspace\endcsname##1#2#1#2#2#1}%
+ }%
+ }%
+ \expandafter\@ifdefinable\csname#3lc@remleadspace\endcsname{%
+ \expandafter\long
+ \expandafter\def
+ \csname#3lc@remleadspace\endcsname##1#2#1##2#2#2{%
+ \begingroup
+ \toks@{##1}%
+ \edef\@tempa{\the\toks@}%
+ \expandafter\endgroup
+ \ifx\@tempa\@empty
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ {\csname#3lc@remleadspace\endcsname#2##2#2#2}%
+ {\@tempa##1#2}%
+ }%
+ }%
+ \expandafter\@ifdefinable\csname#3lc@iterate\endcsname{%
+ \expandafter\long
+ \expandafter\def
+ \csname#3lc@iterate\endcsname##1#2{%
+ \begingroup
+ \toks@{##1}%
+ \edef\@tempa{\the\toks@}%
+ \toks@{#1\@nil}%
+ \edef\@tempb{\the\toks@}%
+ \expandafter\endgroup\ifx\@tempa\@tempb
+ \expandafter\@gobble
+ \else
+ \expandafter\@firstofone
+ \fi
+ {%
+ \csname#3lc@remtrailspace\endcsname##1#2#1#2#2#1%
+ \csname#3lc@iterate\endcsname#1%
+ }%
+ }%
+ }%
+ \expandafter\@ifdefinable\csname#3eachlabelcase\endcsname{%
+ \expandafter\DeclareRobustCommand
+ \csname#3eachlabelcase\endcsname[2][]{%
+ {%
+ \long\def\@tempa#2####1#2{%
+ \@tempb####1#2#1#2#2%
+ }%
+ \long\def\@tempb####1{%
+ \begingroup
+ \long\def\@tempb########1########2########3{%
+ \expandafter\expandafter
+ \expandafter\endgroup
+ \expandafter\ifx
+ \csname r@########1\endcsname\relax
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ {\@temptokena\expandafter{\the\@temptokena########3}}%
+ {\@temptokena\expandafter{\the\@temptokena########2}}%
+ }%
+ \begingroup
+ \toks@{}%
+ \long\def\@tempb########1{%
+ \long\def\@tempa#2################1#2{%
+ \toks@\expandafter{\the\toks@{################1}}%
+ \expandafter\endgroup\expandafter\@tempb\the\toks@
+ }%
+ \toks@\expandafter{\the\toks@{########1}}%
+ \csname#3lc@remleadspace\endcsname#2%
+ }%
+ \toks@{{####1}}\csname#3lc@remleadspace\endcsname#2%
+ }%
+ \@temptokena{}%
+ \csname#3lc@iterate\endcsname#1##2#2\@nil#2%
+ \lc@macrodefiner{##1}%
+ \expandafter}\the\@temptokena
+ }%
+ }%
+ \expandafter\@ifdefinable\csname#3lotlabelcase\endcsname{%
+ \expandafter\DeclareRobustCommand
+ \csname#3lotlabelcase\endcsname[6][]{%
+ {%
+ \long\def\@tempa#2####1#2{%
+ {\expandafter\expandafter\expandafter}\expandafter
+ \ifx\csname r@####1\endcsname\relax
+ \let\@tempb\relax
+ \else
+ \let\@tempc\relax
+ \fi
+ }%
+ \def\@tempb{}%
+ \def\@tempc{}%
+ \csname#3lc@iterate\endcsname#1##2#2\@nil#2%
+ \ifx\@tempb\@empty
+ \ifx\@tempc\@empty
+ \@temptokena{##6}%
+ \else
+ \@temptokena{##3}%
+ \fi
+ \else
+ \ifx\@tempc\@empty
+ \@temptokena{##4}%
+ \else
+ \@temptokena{##5}%
+ \fi
+ \fi
+ \lc@macrodefiner{##1}%
+ \expandafter}\the\@temptokena
+ }%
+ }%
+ {\toks@{#4}\edef\@tempa{\the\toks@}\def\@tempb{\global}\expandafter}%
+ \ifx\@tempa\@tempb
+ \expandafter\global\expandafter\let
+ \csname#3lc@remtrailspace\expandafter\endcsname
+ \csname#3lc@remtrailspace\endcsname
+ \expandafter\global\expandafter\let
+ \csname#3lc@remleadspace\expandafter\endcsname
+ \csname#3lc@remleadspace\endcsname
+ \expandafter\global\expandafter\let
+ \csname#3lc@iterate\expandafter\endcsname
+ \csname#3lc@iterate\endcsname
+ \expandafter\global\expandafter\let
+ \csname#3eachlabelcase\expandafter\endcsname
+ \csname#3eachlabelcase\endcsname
+ \expandafter\global\expandafter\let
+ \csname#3lotlabelase\expandafter\endcsname
+ \csname#3lotlabelcase\endcsname
+ \fi
+}%
+\ProcessOptions\relax
+\expandafter\endgroup\DefineLabelcase{ }{,}{}{\global}%
+\newcommand\lc@macrodefiner[1]{%
+ {\def\@tempa{#1}\expandafter}%
+ \ifx\@tempa\@empty
+ \else
+ \@temptokena\expandafter{%
+ \expandafter\begingroup
+ \expandafter\toks@
+ \expandafter\expandafter
+ \expandafter {%
+ \expandafter\expandafter
+ \expandafter \@temptokena
+ \expandafter\expandafter
+ \expandafter {%
+ \expandafter\the
+ \expandafter\@temptokena
+ \expandafter}%
+ \expandafter}%
+ \expandafter\@temptokena
+ \expandafter{%
+ \expandafter\@temptokena
+ \expandafter{%
+ \the\@temptokena}%
+ \@ifdefinable#1{\edef#1{\the\@temptokena}}}%
+ \expandafter\endgroup
+ \the\expandafter\@temptokena
+ \the\toks@
+ }%
+ \fi
+}%
+\endinput
+%%
+%% End of file `labelcas.sty'.
diff --git a/obsolete/macros/latex/contrib/lgrx/README b/obsolete/macros/latex/contrib/lgrx/README
new file mode 100644
index 0000000000..e252413d87
--- /dev/null
+++ b/obsolete/macros/latex/contrib/lgrx/README
@@ -0,0 +1,70 @@
+.. -*- rst-mode -*-
+
+Greek text with the LGR font encoding
+***************************************
+
+:Copyright: © 2010 Günter Milde
+:Licence: This work may be distributed and/or modified under the
+ conditions of the `LaTeX Project Public License`_, either
+ version 1.3 of this license or any later version.
+
+:Abstract: Obsolete package for Greek in text.
+
+News
+====
+
+The `lgrx` package is obsoleted by greek-fontenc_ and greek-inputenc_.
+
+:2013-05-28: The new package greek-fontenc_ provides a comprehensive LGR
+ font encoding file ``lgrenc.def``, that supersedes both this
+ bundles ``lgrxenc.def`` and the minimal ``lgrenc.def``
+ that used to be part of babel-greek_
+
+:2013-05-28: The file ``lgrenc.dfu`` (support for Unicode input) moved to
+ the greek-inputenc_ package.
+
+:2013-06-03: ``alphabeta.sty`` enables Unicode input in math mode,
+
+ ``textalpha.sty`` and ``alphabeta.sty`` require ``lgrenc.def``
+ from greek-fontenc_ instead of ``lgrxenc.def``,
+
+ ``lgrxenc.def`` now loads ``lgrenc.def`` and adds some
+ backwards compatibility definitions.
+
+:2013-09-13: ``alphabeta.sty`` and ``textalpha.sty`` moved to greek-fontenc_
+ and now also support XeTeX/LuaTeX.
+
+
+Usage
+=====
+
+To update existing documents, replace, e.g., ::
+
+ \usepackage[LGRx,T1]{fontenc}
+
+with ::
+
+ \usepackage[LGR,T1]{fontenc}
+
+No change is required for documents using the ``textalpha`` or ``alphabeta``
+packages now bundled with greek-fontenc_.
+
+
+Files
+=====
+
+`<lgrxenc.def>`_
+ backwards compatibility font encoding file
+
+`<lgrxenc-test.pdf>`_, `<lgrxenc-test.tex>`_
+ test document
+
+
+.. References
+ ==========
+
+.. _LaTeX Project Public License: http://www.latex-project.org/lppl.txt
+.. _babel-greek: http://www.ctan.org/pkg/babel-greek
+.. _fontenc: http://www.ctan.org/pkg/fontenc
+.. _greek-fontenc: http://www.ctan.org/pkg/greek-fontenc
+.. _greek-inputenc: http://www.ctan.org/pkg/greek-inputenc
diff --git a/obsolete/macros/latex/contrib/lgrx/README.html b/obsolete/macros/latex/contrib/lgrx/README.html
new file mode 100644
index 0000000000..8343ea1586
--- /dev/null
+++ b/obsolete/macros/latex/contrib/lgrx/README.html
@@ -0,0 +1,787 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.12: http://docutils.sourceforge.net/" />
+<title>Greek text with the LGR font encoding</title>
+<meta name="copyright" content="© 2010 Günter Milde" />
+<style type="text/css">
+
+/*
+:Author: David Goodger (goodger@python.org)
+:Id: $Id: html4css1.css 7614 2013-02-21 15:55:51Z milde $
+:Copyright: This stylesheet has been placed in the public domain.
+
+Default cascading style sheet for the HTML output of Docutils.
+
+See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
+customize this style sheet.
+*/
+
+/* used to remove borders from tables and images */
+.borderless, table.borderless td, table.borderless th {
+ border: 0 }
+
+table.borderless td, table.borderless th {
+ /* Override padding for "table.docutils td" with "! important".
+ The right padding separates the table cells. */
+ padding: 0 0.5em 0 0 ! important }
+
+.first {
+ /* Override more specific margin styles with "! important". */
+ margin-top: 0 ! important }
+
+.last, .with-subtitle {
+ margin-bottom: 0 ! important }
+
+.hidden {
+ display: none }
+
+a.toc-backref {
+ text-decoration: none ;
+ color: black }
+
+blockquote.epigraph {
+ margin: 2em 5em ; }
+
+dl.docutils dd {
+ margin-bottom: 0.5em }
+
+object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
+ overflow: hidden;
+}
+
+/* Uncomment (and remove this text!) to get bold-faced definition list terms
+dl.docutils dt {
+ font-weight: bold }
+*/
+
+div.abstract {
+ margin: 2em 5em }
+
+div.abstract p.topic-title {
+ font-weight: bold ;
+ text-align: center }
+
+div.admonition, div.attention, div.caution, div.danger, div.error,
+div.hint, div.important, div.note, div.tip, div.warning {
+ margin: 2em ;
+ border: medium outset ;
+ padding: 1em }
+
+div.admonition p.admonition-title, div.hint p.admonition-title,
+div.important p.admonition-title, div.note p.admonition-title,
+div.tip p.admonition-title {
+ font-weight: bold ;
+ font-family: sans-serif }
+
+div.attention p.admonition-title, div.caution p.admonition-title,
+div.danger p.admonition-title, div.error p.admonition-title,
+div.warning p.admonition-title, .code .error {
+ color: red ;
+ font-weight: bold ;
+ font-family: sans-serif }
+
+/* Uncomment (and remove this text!) to get reduced vertical space in
+ compound paragraphs.
+div.compound .compound-first, div.compound .compound-middle {
+ margin-bottom: 0.5em }
+
+div.compound .compound-last, div.compound .compound-middle {
+ margin-top: 0.5em }
+*/
+
+div.dedication {
+ margin: 2em 5em ;
+ text-align: center ;
+ font-style: italic }
+
+div.dedication p.topic-title {
+ font-weight: bold ;
+ font-style: normal }
+
+div.figure {
+ margin-left: 2em ;
+ margin-right: 2em }
+
+div.footer, div.header {
+ clear: both;
+ font-size: smaller }
+
+div.line-block {
+ display: block ;
+ margin-top: 1em ;
+ margin-bottom: 1em }
+
+div.line-block div.line-block {
+ margin-top: 0 ;
+ margin-bottom: 0 ;
+ margin-left: 1.5em }
+
+div.sidebar {
+ margin: 0 0 0.5em 1em ;
+ border: medium outset ;
+ padding: 1em ;
+ background-color: #ffffee ;
+ width: 40% ;
+ float: right ;
+ clear: right }
+
+div.sidebar p.rubric {
+ font-family: sans-serif ;
+ font-size: medium }
+
+div.system-messages {
+ margin: 5em }
+
+div.system-messages h1 {
+ color: red }
+
+div.system-message {
+ border: medium outset ;
+ padding: 1em }
+
+div.system-message p.system-message-title {
+ color: red ;
+ font-weight: bold }
+
+div.topic {
+ margin: 2em }
+
+h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
+h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
+ margin-top: 0.4em }
+
+h1.title {
+ text-align: center }
+
+h2.subtitle {
+ text-align: center }
+
+hr.docutils {
+ width: 75% }
+
+img.align-left, .figure.align-left, object.align-left {
+ clear: left ;
+ float: left ;
+ margin-right: 1em }
+
+img.align-right, .figure.align-right, object.align-right {
+ clear: right ;
+ float: right ;
+ margin-left: 1em }
+
+img.align-center, .figure.align-center, object.align-center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.align-left {
+ text-align: left }
+
+.align-center {
+ clear: both ;
+ text-align: center }
+
+.align-right {
+ text-align: right }
+
+/* reset inner alignment in figures */
+div.align-right {
+ text-align: inherit }
+
+/* div.align-center * { */
+/* text-align: left } */
+
+ol.simple, ul.simple {
+ margin-bottom: 1em }
+
+ol.arabic {
+ list-style: decimal }
+
+ol.loweralpha {
+ list-style: lower-alpha }
+
+ol.upperalpha {
+ list-style: upper-alpha }
+
+ol.lowerroman {
+ list-style: lower-roman }
+
+ol.upperroman {
+ list-style: upper-roman }
+
+p.attribution {
+ text-align: right ;
+ margin-left: 50% }
+
+p.caption {
+ font-style: italic }
+
+p.credits {
+ font-style: italic ;
+ font-size: smaller }
+
+p.label {
+ white-space: nowrap }
+
+p.rubric {
+ font-weight: bold ;
+ font-size: larger ;
+ color: maroon ;
+ text-align: center }
+
+p.sidebar-title {
+ font-family: sans-serif ;
+ font-weight: bold ;
+ font-size: larger }
+
+p.sidebar-subtitle {
+ font-family: sans-serif ;
+ font-weight: bold }
+
+p.topic-title {
+ font-weight: bold }
+
+pre.address {
+ margin-bottom: 0 ;
+ margin-top: 0 ;
+ font: inherit }
+
+pre.literal-block, pre.doctest-block, pre.math, pre.code {
+ margin-left: 2em ;
+ margin-right: 2em }
+
+pre.code .ln { color: grey; } /* line numbers */
+pre.code, code { background-color: #eeeeee }
+pre.code .comment, code .comment { color: #5C6576 }
+pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
+pre.code .literal.string, code .literal.string { color: #0C5404 }
+pre.code .name.builtin, code .name.builtin { color: #352B84 }
+pre.code .deleted, code .deleted { background-color: #DEB0A1}
+pre.code .inserted, code .inserted { background-color: #A3D289}
+
+span.classifier {
+ font-family: sans-serif ;
+ font-style: oblique }
+
+span.classifier-delimiter {
+ font-family: sans-serif ;
+ font-weight: bold }
+
+span.interpreted {
+ font-family: sans-serif }
+
+span.option {
+ white-space: nowrap }
+
+span.pre {
+ white-space: pre }
+
+span.problematic {
+ color: red }
+
+span.section-subtitle {
+ /* font-size relative to parent (h1..h6 element) */
+ font-size: 80% }
+
+table.citation {
+ border-left: solid 1px gray;
+ margin-left: 1px }
+
+table.docinfo {
+ margin: 2em 4em }
+
+table.docutils {
+ margin-top: 0.5em ;
+ margin-bottom: 0.5em }
+
+table.footnote {
+ border-left: solid 1px black;
+ margin-left: 1px }
+
+table.docutils td, table.docutils th,
+table.docinfo td, table.docinfo th {
+ padding-left: 0.5em ;
+ padding-right: 0.5em ;
+ vertical-align: top }
+
+table.docutils th.field-name, table.docinfo th.docinfo-name {
+ font-weight: bold ;
+ text-align: left ;
+ white-space: nowrap ;
+ padding-left: 0 }
+
+/* "booktabs" style (no vertical lines) */
+table.docutils.booktabs {
+ border: 0px;
+ border-top: 2px solid;
+ border-bottom: 2px solid;
+ border-collapse: collapse;
+}
+table.docutils.booktabs * {
+ border: 0px;
+}
+table.docutils.booktabs th {
+ border-bottom: thin solid;
+ text-align: left;
+}
+
+h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
+h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
+ font-size: 100% }
+
+ul.auto-toc {
+ list-style-type: none }
+
+</style>
+<style type="text/css">
+
+/* html4css2.css: Cascading style sheet for Docutils' html4strict writer. */
+/* */
+/* :Author: Günter Milde */
+/* :Copyright: © 2009 Günter Milde. */
+/* Released without warranties or conditions of any kind */
+/* under the terms of the Apache License, Version 2.0 */
+/* http://www.apache.org/licenses/LICENSE-2.0 */
+/* */
+/* This stylesheet supplements the Docutils standard style 'html4css1.css'. */
+/* It uses CSS 2.1 elements (supported by up-to-date versions of popular */
+/* browsers). */
+
+/* General rules */
+/* ============= */
+
+body {
+ padding: 0 5%;
+ margin: 8px 0;
+ line-height:1.3;
+ /* http://ilovetypography.com/2008/02/28/a-guide-to-web-typography/
+ recommends "line-spacing that’s at least 140% of your text size" */
+ counter-reset: table;
+ /* counter-reset: figure; */
+}
+
+/* avoid long lines --> better reading */
+/* OTOH: lines should not be too short because of missing hyphenation, */
+div.document {
+ max-width: 45em;
+ margin: auto;
+}
+
+/* separate items except for compact lists */
+dl > dd {
+ margin-bottom: 1em;
+}
+.compact li, .compact p, .compact ul, .compact ol
+dl.simple > dd, .simple li, .simple p, .simple ul, .simple ol {
+ margin-top: 0;
+ margin-bottom: 0;
+/* background: magenta; */
+}
+dl.simple, dl.compact, dl.simple > dd, dl.compact > dd {
+ margin-top: 0;
+ margin-bottom: 0;
+/* background: lightgreen; */
+}
+
+/* space around paragraphs */
+dl > dd p:first-child, td > p {
+ margin: 0;
+}
+
+/* Sidebar */
+/* ------- */
+
+div.sidebar {
+ margin-right: -5%;
+}
+
+/* Special definition lists */
+/* ======================== */
+
+/* bold definition term on the same line as the label */
+dl.field-list > dt, dl.option-list > dt, dl.docinfo > dt,
+dl.footnote > dt, dl.citation > dt, dl.description > dt {
+ clear: left;
+ float: left;
+ margin: 0;
+ padding: 0;
+ padding-right: 0.5em;
+ font-weight: bold;
+}
+/* except for these */
+dl.option-list > dt, dl.footnote > dt {
+ font-weight: normal;
+}
+
+
+
+/* Field Lists */
+/* ----------- */
+
+/* field names followed by a colon */
+dl.field-list > dt:after, dl.docinfo > dt:after {
+ content: ":";
+}
+
+/* Offset for field content (corresponds to the --field-name-limit option) */
+dl.field-list > dd {
+ margin-left: 9em; /* ca. 14 chars in the test examples */
+ padding-left: 0.5em;
+}
+
+/* start field-body on a new line after long field names */
+dl.field-list > dd p {
+ width: 100%;
+/* display: inline-block; */
+/* background: yellow; */
+}
+
+dl.field-list > dd > p:first-child,
+/* dl.field-list > dd > ol:first-child, */
+/* dl.field-list > dd > ul:first-child, */
+dl.field-list > dd > dl:first-child {
+ display: inline-block;
+}
+
+/* field-list variants:: */
+
+/* example for custom field-name width */
+dl.field-list.narrow > dd {
+ margin-left: 5em;
+}
+
+/* start field-body on same line after long field names */
+dl.field-list.run-in > dd p {
+ display: block;
+}
+
+/* wrap or truncate long field names */
+dl.field-list.fix-labelwidth > dt {
+ width: 8em; /* set to dl.field-list > dd margin-left - padding-left */
+ overflow: hidden;
+}
+dl.field-list.fix-labelwidth > dd:after {
+ /* a "stopper" to prevent next dd floating up too far */
+ content: '';
+ display: block;
+ clear: left;
+}
+
+/* docinfo */
+
+dl.docinfo > dd {
+ margin-left: 8em;
+/* margin-bottom: 0.5em; */
+}
+
+
+/* option list */
+
+dl.option-list {
+ margin-left: 1em;
+ padding-left: 0;
+}
+
+dl.option-list > dd {
+ margin-left: 8em;
+ /* margin-bottom: 0.5em; */
+}
+
+/* start description on a new line after long options */
+dl.option-list > dd p {
+ width: 100%;
+ display: inline-block;
+}
+
+/* footnotes */
+
+a.footnote-reference, a.fn-backref {
+ text-decoration: inherit; /* do not underline footnote links */
+}
+
+dl.footnote {
+ /* line on the left */
+ padding-left: 1ex;
+ border-left: solid;
+ border-left-width: thin;
+ /* border-color: black; */
+}
+
+/* paragraph on same line as backrefs */
+dd > em {
+/* background: green; */
+ float: left;
+ margin-right: 1ex
+}
+
+
+/*
+Ordered List (Enumeration)
+--------------------------
+
+Use counters to replace the deprecated start attribute. Make sure the
+resulting list resembles the list-style 'outside' with a hanging indent.
+*/
+
+/* New ordered list: reset counter, suppress the default label */
+ol, ol.arabic, ol.loweralpha, ol.upperalpha,
+ol.lowerroman, ol.upperroman {
+ counter-reset: item;
+ list-style: none
+}
+
+/* Set the negative indent of the list label as feature of the list item */
+ol > li {
+ text-indent: -40px; /* Mozillas default indent */
+}
+/* reset for child elements */
+ol > li > * {
+ text-indent: 0px;
+ text-indent: 0;
+ margin-top: 0;
+ /* background: lightgreen; */
+}
+
+/* Label */
+ol > li:before {
+ /* increment and typeset counter(s), */
+ counter-increment: item;
+ content: counter(item) ".";
+ /* display next to the content (aligned top-right), */
+ display: inline-block;
+ text-align: right;
+ vertical-align: top;
+ /* sum must match ol>li {text-indent:} (40px is Mozillas default) */
+ width: 35px;
+ padding-right: 5px;
+/* background: yellow; */
+}
+
+/* The list item's first line starts next to the label, without indent */
+ol > li > p:first-child,
+ol > li > ol:first-child,
+ol > li > ul:first-child,
+ol > li > dl:first-child {
+ display: inline-block;
+ /* background: lightblue; */
+}
+
+/* default separator variants */
+ol.loweralpha > li:before {
+ content: counter(item, lower-alpha) ")";
+}
+ol.upperalpha > li:before {
+ content: counter(item, upper-alpha) ".";
+}
+ol.lowerroman > li:before {
+ content: "(" counter(item, lower-roman) ")";
+}
+ol.upperroman > li:before {
+ content: counter(item, upper-roman) ")";
+}
+/* nested counters (1, 1.1, 1.1.1, etc) */
+/* nested enumerated lists "inherit" the class attribute, other lists not */
+ol.nested > li:before, ol.nested ol > li:before {
+ content: counters(item, ".") " ";
+}
+
+/* lists nested in definition list */
+
+dd > ul, dd > ol {
+ padding-left: 0pt;
+}
+
+/* TODO: prefix, suffix? */
+
+/* smaller font for super- and subscripts */
+/* sub, sup {font-size: 70%;} */ /* Mozilla default is `smaller` */
+
+
+/* Tables */
+/* ====== */
+
+/* margins and borders for "normal" tables */
+table {
+/* background: magenta; */
+ margin-top: 1em ;
+ margin-bottom: 1em;
+/* border-style: outset; */
+ border-style: solid;
+ border-color: silver;
+ border-width: thin;
+ border-collapse: collapse;
+}
+blockquote > table {
+ margin-top: 0em ;
+ margin-bottom: 0em;
+}
+
+td, th {
+ border-style: solid;
+ border-width: thin;
+ border-color: silver;
+ /* text-align: left; */
+ padding: 0 1ex;
+}
+
+td > p:first-child, th > p:first-child {
+ margin-top: 0;
+}
+td > p, th > p {
+ margin-bottom: 0;
+}
+
+/* no borders for "borderless" tables */
+table.borderless, table.borderless * {
+ border-style: none;
+}
+
+/* "booktabs" style (no vertical lines) */
+table.booktabs {
+ border: 0;
+ border-top: 2px solid;
+ border-bottom: 2px solid;
+ border-collapse: collapse;
+}
+
+table.booktabs * {
+ border: 0;
+}
+table.booktabs th {
+ border-bottom: thin solid;
+ text-align: left;
+}
+
+table > caption {
+ text-align: left;
+ margin-bottom: 0.25em
+/* padding: 2em 0 1em 0; */
+}
+
+/* numbered tables*/
+table.numbered > caption:before {
+ counter-increment: table; /* defined/re-set in body */
+ content: "Table " counter(table) ": ";
+ font-weight: bold;
+}
+
+
+/* literal text
+ ------------
+*/
+/* whitespace and wrapping in inline literals */
+/* possible values: normal, nowrap, pre, pre-wrap, pre-line */
+tt.literal {
+ white-space: pre-wrap;
+}
+
+/* /* compensate for initial line-break (which is literal with XHTML 1.1) */ */
+/* pre.literal-block, pre.doctest-block { */
+/* margin-top: 0em ; */
+/* } */
+
+/* Table of Contents */
+
+/* don't indent like a topic */
+div.topic.contents {
+ margin: 0;
+}
+/* div.topic.contents ul { */
+/* list-style: none; */
+/* } */
+
+div.topic.contents a {
+ text-decoration: none; /* no underline for links */
+}
+
+/* section numbers */
+
+span.sectnum {
+ padding-right: 1ex;
+}
+
+/* admonitions */
+
+/* no padding for top and bottom */
+div.admonition, div.attention, div.caution, div.danger, div.error,
+div.hint, div.important, div.note, div.tip, div.warning {
+ padding: 0px 1em }
+
+</style>
+</head>
+<body>
+<div class="document" id="greek-text-with-the-lgr-font-encoding">
+<h1 class="title">Greek text with the LGR font encoding</h1>
+
+<dl class="docinfo simple">
+<dt class="copyright">Copyright</dt>
+<dd class="copyright">© 2010 Günter Milde</dd>
+<dt>Licence</dt>
+<dd><p>This work may be distributed and/or modified under the
+conditions of the <a class="reference external" href="http://www.latex-project.org/lppl.txt">LaTeX Project Public License</a>, either
+version&nbsp;1.3 of this license or any later version.</p>
+</dd>
+</dl>
+<div class="abstract topic">
+<p class="topic-title first">Abstract</p>
+<p>Obsolete package for Greek in text.</p>
+</div>
+<!-- -*- rst-mode -*- -->
+<div class="section" id="news">
+<h1>News</h1>
+<p>The <cite>lgrx</cite> package is obsoleted by <a class="reference external" href="http://www.ctan.org/pkg/greek-fontenc">greek-fontenc</a> and <a class="reference external" href="http://www.ctan.org/pkg/greek-inputenc">greek-inputenc</a>.</p>
+<dl class="field-list">
+<dt>2013-05-28</dt>
+<dd><p>The new package <a class="reference external" href="http://www.ctan.org/pkg/greek-fontenc">greek-fontenc</a> provides a comprehensive LGR
+font encoding file <tt class="literal">lgrenc.def</tt>, that supersedes both this
+bundles <tt class="literal">lgrxenc.def</tt> and the minimal <tt class="literal">lgrenc.def</tt>
+that used to be part of <a class="reference external" href="http://www.ctan.org/pkg/babel-greek">babel-greek</a></p>
+</dd>
+<dt>2013-05-28</dt>
+<dd><p>The file <tt class="literal">lgrenc.dfu</tt> (support for Unicode input) moved to
+the <a class="reference external" href="http://www.ctan.org/pkg/greek-inputenc">greek-inputenc</a> package.</p>
+</dd>
+<dt>2013-06-03</dt>
+<dd><p><tt class="literal">alphabeta.sty</tt> enables Unicode input in math mode,</p>
+<p><tt class="literal">textalpha.sty</tt> and <tt class="literal">alphabeta.sty</tt> require <tt class="literal">lgrenc.def</tt>
+from <a class="reference external" href="http://www.ctan.org/pkg/greek-fontenc">greek-fontenc</a> instead of <tt class="literal">lgrxenc.def</tt>,</p>
+<p><tt class="literal">lgrxenc.def</tt> now loads <tt class="literal">lgrenc.def</tt> and adds some
+backwards compatibility definitions.</p>
+</dd>
+<dt>2013-09-13</dt>
+<dd><p><tt class="literal">alphabeta.sty</tt> and <tt class="literal">textalpha.sty</tt> moved to <a class="reference external" href="http://www.ctan.org/pkg/greek-fontenc">greek-fontenc</a>
+and now also support XeTeX/LuaTeX.</p>
+</dd>
+</dl>
+</div>
+<div class="section" id="usage">
+<h1>Usage</h1>
+<p>To update existing documents, replace, e.g.,</p>
+<pre class="literal-block">\usepackage[LGRx,T1]{fontenc}
+</pre>
+<p>with</p>
+<pre class="literal-block">\usepackage[LGR,T1]{fontenc}
+</pre>
+<p>No change is required for documents using the <tt class="literal">textalpha</tt> or <tt class="literal">alphabeta</tt>
+packages now bundled with <a class="reference external" href="http://www.ctan.org/pkg/greek-fontenc">greek-fontenc</a>.</p>
+</div>
+<div class="section" id="files">
+<h1>Files</h1>
+<dl class="docutils">
+<dt><a class="reference external" href="lgrxenc.def">lgrxenc.def</a></dt>
+<dd><p>backwards compatibility font encoding file</p>
+</dd>
+<dt><a class="reference external" href="lgrxenc-test.pdf">lgrxenc-test.pdf</a>, <a class="reference external" href="lgrxenc-test.tex">lgrxenc-test.tex</a></dt>
+<dd><p>test document</p>
+</dd>
+</dl>
+<!-- References
+========== -->
+</div>
+</div>
+</body>
+</html>
diff --git a/obsolete/macros/latex/contrib/lgrx/lgrxenc-test.pdf b/obsolete/macros/latex/contrib/lgrx/lgrxenc-test.pdf
new file mode 100644
index 0000000000..7dad052868
--- /dev/null
+++ b/obsolete/macros/latex/contrib/lgrx/lgrxenc-test.pdf
Binary files differ
diff --git a/obsolete/macros/latex/contrib/lgrx/lgrxenc-test.tex b/obsolete/macros/latex/contrib/lgrx/lgrxenc-test.tex
new file mode 100644
index 0000000000..dc65a38561
--- /dev/null
+++ b/obsolete/macros/latex/contrib/lgrx/lgrxenc-test.tex
@@ -0,0 +1,338 @@
+\documentclass{article}
+\usepackage{cmap} % fix search and cut-and-paste in Acrobat Reader
+
+\usepackage%
+{lmodern}
+% {gfsartemisia}
+% {gfsbaskerville}
+% [default]{gfsbodoni}
+% [default]{gfscomplutum}
+% {gfsdidot}
+% [default]{gfsneohellenic}
+% {lmodern} \usepackage{gfsporson} \renewcommand*\rmdefault{porson}
+% [default]{gfssolomos}
+% {kerkis} % lacks some chars (\Stigma, \Sampi, double quotesv)
+% {teubner}
+\renewcommand{\ttdefault}{txtt}
+
+
+\usepackage{parskip}
+\usepackage{textcomp}
+\usepackage[LGRx,T1]{fontenc} % LGR with accent definitions
+% \usepackage[utf8]{inputenc}
+
+\newcommand{\LGR}{\fontencoding{LGR}\selectfont}
+\newcommand{\Latin}{\fontencoding{T1}\selectfont}
+
+% \pagestyle{empty}
+% -------------------------------------------------------------------------
+
+\begin{document}
+
+\section*{Test the extended LGR font encoding definitions}
+
+The file lgrxenc.def allows convenient typesetting of Greek letters
+with diacritics. It works independent of the babel package.
+
+\subsection*{Symbols}
+
+See the source file lgrenc-test.tex for the macros used to produce the
+symbols.
+
+\subsubsection*{Generic text symbols}
+
+Latin:
++ - = < > -- --- \textbraceleft{} [ () ] \textbraceright{}
+%
+\textbackslash{}
+\textbar{}
+\textperthousand{}
+\textpertenthousand{}
+\textvisiblespace{}
+
+LGR:
+\LGR
++ - = \textless{} \textgreater{} -- ---
+\textbraceleft{} [ () ] \textbraceright{}
+%
+\textbackslash{} \textbar{}
+\textperthousand{}
+% \textpertenthousand{}
+\textvisiblespace{}
+\Latin (Per-mille symbol is missign in LGR.)
+
+Quotes:
+%
+\Latin \guillemotleft{}a\guillemotright{}
+\LGR \guillemotleft{}a\guillemotright{},
+%
+\Latin \textquoteleft{}a\textquoteright{}
+\LGR \textquoteleft{}a\textquoteright{},
+%
+\Latin \textquotedblleft{}a\textquotedblright{}
+\LGR \textquotedblleft{}a\textquotedblright{}
+\Latin (double quotes wrong with Kerkis fonts),
+
+\Latin \guilsinglleft{}a\guilsinglright{}
+ \quotedblbase{}a\textquotedblright{}
+Single guillemots and base-quotes are missing in LGR.
+
+
+Ligature break up: AY fi \LGR AU "i $\mapsto$
+\Latin A\textcompwordmark{}Y f\textcompwordmark i
+\LGR A\textcompwordmark{}U "\textcompwordmark i
+
+
+\Latin Spacing accent chars:
+%
+\Latin \textasciicircum a
+\LGR \textasciicircum a \textasciicircum i % using textsym glyph
+%
+\Latin \textasciitilde a
+\LGR \textasciitilde a \textasciitilde i
+%
+\Latin \textasciibreve a
+\LGR \textasciibreve a \textasciibreve i
+%
+\Latin \textasciimacron a
+\LGR \textasciimacron a \textasciimacron i
+%
+\Latin \textasciidieresis a
+\LGR \textasciidieresis a \textasciidieresis i
+%
+\Latin \textasciiacute a
+\LGR \textasciiacute a \textasciiacute i
+%
+\Latin \textasciigrave a
+\LGR \textasciigrave a \textasciigrave i
+
+\Latin Symbols for SI-units:
+\Latin 5\,\textmu{}m, 5\,k\textohm{};
+\LGR 5\,\textmu{}{\Latin m}, 5\,{\Latin k}\textohm{}
+
+\Latin Letter schwa and Euro symbol: % \textschwa (needs e.g. T3)
+\LGR \textschwa{}, \texteuro{}
+
+
+\Latin Some symbol definitions expect a Latin font:
+%
+\textcopyright{}
+\textregistered{}
+\texttrademark{}
+\SS{} (uppercase of \ss)
+% $\Longrightarrow$
+% \LGR
+% \textcopyright{}
+% \textregistered{}
+% \texttrademark{}
+% \ss$\mapsto$\SS{}
+%
+\Latin Babel's lgrenc.def defines them with \verb|\latintext|, however this
+macro is not guaranteed to be defined, so it should not be used in a font
+encoding definition file. Instead, the textcomp.sty package should be used
+to provide the symbols for all font encodings (the sharp s (\ss) is used in
+German text that cannot be set with LGR anyway).
+
+\subsubsection*{Greek alphabet}
+
+Greek letters via Latin transscription in LGR font encoding:
+
+\LGR
+\MakeUppercase{a b g d e z h j i k l m n x o p r s t u f q y w}
+
+a b g d e z h j i k l m n x o p r s c t u f q y w
+
+\Latin
+
+\subsubsection*{Additional Greek symbols}
+
+\LGR \koppa{} \Latin koppa, % ÏŸ
+\LGR \qoppa{} \Latin archaic koppa, % Ï™
+\LGR \Qoppa{} \Latin archaic Koppa, % Ϙ
+\LGR \stigma{} \Latin stigma, % Ï›
+\LGR \varstigma{} \Latin stigma variant,
+\LGR \Stigma{} \Latin Stigma (Sigma-Tau-Ligature in CB-fonts),
+\LGR \sampi{} \Latin sampi, % Ï¡
+\LGR \Sampi{} \Latin Sampi, % Ï 
+\LGR \ddigamma{} \Latin digamma, % Ï (\digamma used by amsmath!)
+\LGR \Digamma{} \Latin Digamma, % Ϝ
+% numeral signs: http://en.wikipedia.org/wiki/Greek_numerals
+\LGR \anwtonos{} \Latin Dexia keraia, % Í´
+\LGR \katwtonos{} \Latin Aristeri keraia, % ͵
+
+\Latin Variant symbols for pi ($\varpi$), kappa (\emph{no TeX symbol
+available}), rho ($\varrho$), and theta ($\vartheta$) are missing in
+LGR.
+
+
+\subsection*{Diacritics}
+
+Capital Greek letters have Greek diacritics (except the dialytika) to the
+left (instead of above) and drop them in UPPERCASE. This is
+implemented for all combinations for which a precomposed Unicode
+character exists (but not, e.g., \LGR \~A\Latin).
+
+% When a word is written entirely in capital letters, diacritics are
+% never used; the word Ἢ (or), is an exception to this rule because of
+% the need to distinguish it from the nominative feminine article Η.
+
+LaTeX standard accents (Latin, Greek, Greek Capitals)
+$\mapsto$ UPPERCASE
+
+\`{a} \'{a} \~{a} \"{a} \^{a} \={a} \H{a} \.{a} \r{a} \u{a} \v{a}
+\b{a} \c{a} \d{a} \k{a}
+$\mapsto$ \MakeUppercase{%
+\`{a} \'{a} \~{a} \"{a} \^{a} \={a} \H{a} \.{a} \r{a} \u{a} \v{a}
+\b{a} \c{a} \d{a} \k{a}
+}
+
+\LGR
+\`{a} \'{a} \~{a} \"{a} \^{a} \={a} \H{a} \.{a} \r{a} \u{a} \v{a}
+\b{a} \c{a} \d{a}
+$\mapsto$ \MakeUppercase{%
+\`{a} \'{a} \~{a} \"{a} \^{a} \={a} \H{a} \.{a} \r{a} \u{a} \v{a}
+\b{a} \c{a} \d{a}
+}
+
+\`{A} \'{A} \~{A} \"{A} \^{A} \={A} \H{A} \.{A} \r{A} \u{A} \v{A}
+\b{A} \c{A} \d{A}
+$\mapsto$ \MakeUppercase{%
+\`{A} \'{A} \~{A} \"{A} \^{A} \={A} \H{A} \.{A} \r{A} \u{A} \v{A}
+\b{A} \c{A} \d{A}
+}
+
+\Latin
+The komma-below (\verb|\k|) is not defined in LGR.
+
+Additional Greek diacritics\footnote{%
+The dialytika is not used on Initial letters, therfore the combined
+``something + dialytika'' accents are not moved befor the capital Iota.}
+
+\LGR
+\<{a} \>{e} \<\`{i} \'"i \`"i \~"i \`\>{h} \'<{o} \'>{o} \~\<{u} \~\>{w}
+$\mapsto$ \MakeUppercase{%
+\<{a} \>{e} \<\`{i} \'"i \`"i \~"i \`\>{h} \'<{o} \'>{o} \~\<{u} \~\>{w}
+}
+
+\<{A} \>{E} \<\`{I} \'"I \"`I \~"I \`\>{H} \'<{O} \'>{O} \~\<{U} \~\>{W}
+$\mapsto$ \MakeUppercase{%
+\<{A} \>{E} \<\`{I} \'"I \"`I \~"I \`\>{H} \'<{O} \'>{O} \~\<{U} \~\>{W}
+}
+
+\Latin Input variants and their conversion with MakeUppercase:%
+
+\begin{quote} \LGR
+\~>a \>\~a \~\>{a}, \~<a \<\~a \<~a \~\<a \~<a,
+\>\~{h} \~>h \>~h \>\~h \~>h \~>h|, \~<h \<\~h,
+\>\~i \~>i, \~<i \<\~i, \~"i \"\~i \"~i,\\
+\>\~u \~>u, \~<u \<\~u, \~"u \"\~u,
+\>w, \<w, \>\~w \~>w, \~<w \<\~w.
+
+\MakeUppercase{
+\~>a \>\~a \~\>{a}, \~<a \<\~a \<~a \~\<a \~<a,
+\>\~{h} \~>h \>~h \>\~h \~>h \~>h|, \~<h \<\~h,
+\>\~i \~>i, \~<i \<\~i, \~"i \"\~i \"~i,\\
+\>\~u \~>u, \~<u \<\~u, \~"u \"\~u,
+\>w, \<w, \>\~w \~>w, \~<w \<\~w.
+}
+
+\<'A \<\'A \'<A \'\<A $\mapsto$ \MakeUppercase{\<'A \<\'A \'<A \'\<A}.
+\end{quote}
+
+\Latin The tilde character can be used in combined accents.
+However, in documents not defining the Babel language \emph{greek} or
+\emph{polutonikogreek}, it will produce a
+no-break space if converted with \verb|\MakeUppercase|:
+
+\LGR \"~i \<~i \"~u \<~u \`>u $\mapsto$
+\LGR \MakeUppercase{\"~i \<~i \"~u \<~u \`>u}
+\\
+\Latin Use the tilde-accent macro:
+\LGR \MakeUppercase{\"\~i \~"u}.
+
+\Latin Combinations with named accents:
+\LGR \accdasia'a \accdasia`a \accdasia\~a.
+
+\Latin The dialytika must be kept in UPPERCASE, e.\,g.
+
+% from http://diacritics.typo.cz/index.php?id=70 μαÎστÏος -> ΜΑΪΣΤΡΟΣ.
+\LGR ma\"'istros $\mapsto$ \MakeUppercase{ma\"'istros}
+\Latin or % from teubner εá½Î¶Ï‰Îα -> ΕΥΖΩΪΑ.
+\LGR e\>uzw\'"ia $\mapsto$ \MakeUppercase{e\>uzw\'"ia}.
+
+\Latin This is implemented for all input variants of diacritics with
+dialytika:
+
+\LGR \"i \"'i \"`i \"\~i \"u \"'u \"`u \"\~u $\mapsto$
+\MakeUppercase{\"i \"'i \"`i \"\~i \"u \"'u \"`u \"\~u},
+
+\Latin Tonos and dasia mark a \emph{hiatus} (break-up of a diphtong) if
+placed on the first vowel of a diphtong ({\LGR \'ai, \'au, \'ei}). A
+dialytika must be placed on the second vowel if they are dropped: \LGR
+(\MakeUppercase{\'ai, \'au, \'ei}).
+
+% from teubner: άυλος/ΑΫΛΟΣ
+\'aulos $\mapsto$ \MakeUppercase{\'aulos},
+\>'aulos $\mapsto$ \MakeUppercase{\>'aulos},
+% from http://diacritics.typo.cz/index.php?id=69 μάινα -> ΜΑΪÎΑ
+m\'aina $\mapsto$ \MakeUppercase{m\'aina},
+% from http://de.wikipedia.org/wiki/Neugriechische_Orthographie#Das_Trema
+% κέικ, ἀυπνία/αϋπνία
+k\'eik, $\mapsto$ \MakeUppercase{k\'eik}
+\>aupn\'ia $\mapsto$ \MakeUppercase{\>aupn\'ia}
+
+
+\Latin Test: The auto-hiatus feature must keep proper working of tonos
+and psili:
+
+\LGR \MakeUppercase{\'a b}: \Latin keep space after A.
+
+\LGR
+\newcommand\md{\textcompwordmark}
+\newcommand\MU{\MakeUppercase}
+
+ \md \MU{ AO AY AI AU RA OA UA DU} [ \\
+\<\md \MU{ \<AO \<AY \<AI \<AU \<RA \<OA U\<A D\<U} [ \\
+\>\md \MU{ \>AO \>AY \>AI \>AU \>RA \>OA U\>A D\>U} [ \\
+\>'\md\MU{ \>'AO \>'AY \>'AI \>'AU \>'RA \>'OA U\>'A D\>'U} [ \\
+\'\md \MU{ \'AO \'AY \'AI \'AU \'RA \'OA U\'A D\'U} [ \\
+\>`\md\MU{ \>`AO \>`AY \>`AI \>`AU \>`RA \>`OA U\>`A D\>`U} [ \\
+\<'\md\MU{ \<'AO \<'AY \<'AI \<'AU \<'RA \<'OA U\<'A D\<'U} [ \\
+\`\md \MU{ \`AO \`AY \`AI \`AU \`RA \`OA U\`A D\`U} [ \\
+\<`\md\MU{ \<`AO \<`AY \<`AI \<`AU \<`RA \<`OA U\<`A D\<`U} [ \\
+\~\md \MU{ \~AO \~AY \~AI \~AU \~RA \~OA U\~A D\~U} [ \\
+\~>\md\MU{ \~>AO \~>AY \~>AI \~>AU \~>RA \~>OA U\~>A D\~>U} [ \\
+\~<\md\MU{ \~<AO \~<AY \~<AI \~<AU \~<RA \~<OA U\~<A D\~<U} [ \\
+\~<\md\MU{ \~<ao \~<ay \~<ai \~<au \~<ra \~<oa u\~<a d\~<u} [ \\
+\"\md \MU{ AO AY A\"I A\"U RA OA \"UA DU} [ \\
+\"\md \MU{ \"AO \"AY \"AI \"AU \"RA \"OA U\"A D\"U} [ \\
+\"~\md\MU{ \~"AO \~"AY \~"AI \~"AU \~"RA \~"OA U\~"A D\~"U} [ \\
+
+
+\Latin
+rows 3\ldots 7: Lookahead (to check for a hiatus) breaks kerning before A
+with tonos or psili.
+
+% \'AA \'AB \'AG \'AD \'AE \'AZ \'AH \'AJ \'AI \'AK \'AL \'AM \'AN \'AX
+% \'AO \'AP \'AR \'AS \'AC \'AT \'AU \'AF \'AQ \'AY \'AW
+
+rows 15 and 16: Like in any font encoding, there is no kerning for
+non-defined accent-letter-combinations (dialytica on \LGR A O D\Latin).
+
+The uppercase of the zero-width space at the place of ``v`` is the
+Dasia-Oxia accent~\LGR \MakeUppercase{v}\Latin , the glyph at the
+position of ``V``. It is suppressed for uppercased accents:
+
+\LGR
+\<v, \>v, \>'v, \'v, \>`v, \<'v, \`v, \<`v, \~v, \~>v, \~<v, \"v, \~"v
+$\mapsto$ \MakeUppercase{
+\<v, \>v, \>'v, \'v, \>`v, \<'v, \`v, \<`v, \~v, \~>v, \~<v, \"v, \~"v
+}
+
+\Latin
+
+Downcasing should keep diacritics (of course, it cannot regenerate
+``manually" dropped ones):
+\LGR 'A \"I \"U \~"A $\mapsto$ \MakeLowercase{\'A \"I \"U \~"A}
+
+\end{document}
diff --git a/obsolete/macros/latex/contrib/lgrx/lgrxenc.def b/obsolete/macros/latex/contrib/lgrx/lgrxenc.def
new file mode 100644
index 0000000000..0c1f8e8b69
--- /dev/null
+++ b/obsolete/macros/latex/contrib/lgrx/lgrxenc.def
@@ -0,0 +1,195 @@
+% lgrxenc.def
+% ***********
+%
+% comprehensive LGR Greek font encoding definitions
+% =================================================
+%
+% :Copyright: © 2010 Günter Milde
+% :Licence: This work may be distributed and/or modified under the
+% conditions of the `LaTeX Project Public License`_, either
+% version 1.3 of this license or any later version.
+%
+% :Abstract: Obsolete font encoding file for Greek in text.
+%
+% For new documents, use ``lgrenc.def`` from greek-fontenc_ (which
+% is also required by this file).
+%
+% .. contents::
+%
+%
+% Changelog
+% ---------
+%
+% .. class:: borderless
+%
+% ===== ============ ====================================================
+% 0.1 2010-03-31 initial attempt
+% 0.2 2010-04-20 diacritics dropped in UPPERCASE
+% 0.3 2010-06-08 handle Titlecase and UPPERCASE extending
+% ``\@uclclist``
+% 0.3.1 2010-06-10 code cleanup: replace dummy accent hack
+% with TextCommand
+% 0.4 2010-06-15 more text symbols
+% 0.4.1 2010-08-06 prevent multiple evaluation
+% 0.5 2010-08-27 support ``\textalpha`` ... ``\textOmega``
+% 0.5.1 2012-05-08 upload to CTAN
+% 0.6 2012-06-29 ``\TextGreek`` wrapper command (used in lgrenc.dfu),
+% aliases for ``puenc.def`` compatibility
+% 0.6.1 2013-02-12 ``\@uclclist`` entries for `PU` aliases
+% 0.7 2013-05-03 documentation update, new accent macros names
+% 0.8 2013-05-30 backwards compatibility file for new lgrenc.def
+% ===== ============ ====================================================
+%
+% Usage
+% -----
+%
+% This file is only kept for backwards compatibility with existing documents.
+%
+% For new documents, use ``lgrenc.def`` from greek-fontenc_ (which is also
+% required by this file).
+%
+% Example:
+% Select font encodings `T1` (as default) and `LGR`:
+%
+% .. code:: latex
+%
+% \usepackage[LGR,T1]{fontenc}
+%
+% Select font encodings `T1` and (as default) `LGR`:
+%
+% .. code:: latex
+%
+% \usepackage[T1,LGR]{fontenc}
+%
+% Babel_'s "greek" option and the textalpha and alphabeta packages also load
+% ``lgrenc.def``, so after any of the following lines, "LGR" is declared and
+% set up as a font encoding:
+%
+% .. code:: latex
+%
+% \usepackage[greek,english]{babel} % default language English
+%
+% \usepackage[greek,english]{babel} % default language Greek
+%
+% \usepackage{textalpha}
+%
+% \usepackage{alphabeta}
+%
+%
+% Implementation
+% --------------
+%
+% Identification
+% ~~~~~~~~~~~~~~
+% ::
+
+\ProvidesFile{lgrxenc.def}
+[2013/05/30 v0.8 comprehensive LGR Greek Font Encoding definitions]
+
+
+% Requirements
+% ~~~~~~~~~~~~
+%
+% To declare and set up the LGR font encoding, we use the successor file
+% ``lgrenc.def`` from greek-fontenc_::
+
+\input{lgrenc.def}
+
+% Backwards compatibility definitions
+% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+%
+% ``\TextGreek`` is now called ``\ensuregreek``::
+
+\DeclareTextCommand{\TextGreek}{LGR}[1]{#1}
+
+
+% Additional Greek symbols
+% """"""""""""""""""""""""
+%
+% Compatibility aliases (defined via `TextCommand` so that up/downcasing works
+% without the need for additional uclclist entries.
+%
+% Ancient Greek Numbers (Athenian Numerals)
+% '''''''''''''''''''''''''''''''''''''''''
+%
+% Names from the athnum_ package::
+
+\DeclareTextCommand{\PiDelta}{LGR}{\pentedeka} % GREEK ACROPHONIC ATTIC FIFTY
+\DeclareTextCommand{\PiEta}{LGR}{\pentehekaton} % GREEK ACROPHONIC ATTIC FIVE HUNDRED
+\DeclareTextCommand{\PiChi}{LGR}{\penteqilioi} % GREEK ACROPHONIC ATTIC FIVE THOUSAND
+\DeclareTextCommand{\PiMu}{LGR}{\pentemurioi} % GREEK ACROPHONIC ATTIC FIFTY THOUSAND
+
+% Archaic letters
+% '''''''''''''''
+%
+% Names from babel_'s ``greek.ldf`` and teubner_ ::
+
+\DeclareTextCommand{\vardigamma}{LGR}{\textvarstigma} % greek.ldf
+\DeclareTextCommand{\ddigamma}{LGR}{\textdigamma} % greek.ldf
+\DeclareTextCommand{\Digamma}{LGR}{\textDigamma} % greek.ldf
+
+\DeclareTextCommand{\stigma}{LGR}{\textstigma} % Ï› (greek.ldf, teubner)
+\DeclareTextCommand{\varstigma}{LGR}{\textvarstigma} % stigma variant (CB.enc, teubner)
+\DeclareTextCommand{\koppa}{LGR}{\textkoppa} % ÏŸ (greek small letter koppa)
+\DeclareTextCommand{\qoppa}{LGR}{\textqoppa} % Ï™ (archaic koppa)
+\DeclareTextCommand{\Qoppa}{LGR}{\textQoppa} % Ϙ (archaic Koppa)
+\DeclareTextCommand{\Stigma}{LGR}{\textStigma} % Ϛ (teubner) in some fonts ϹΤ ligature
+\DeclareTextCommand{\Sampi}{LGR}{\textSampi} % Ï 
+\DeclareTextCommand{\sampi}{LGR}{\textsampi} % Ï¡
+\DeclareTextCommand{\anoteleia}{LGR}{\textanoteleia} % ·
+\DeclareTextCommand{\erotimatiko}{LGR}{\texterotimatiko} % ;
+
+
+% Numeral signs
+% '''''''''''''
+% See also http://en.wikipedia.org/wiki/Greek_numerals
+%
+% Names from babel_, teubner_, and hyperref_'s puenc.def::
+
+\DeclareTextCommand{\anwtonos}{LGR}{\textnumeralsigngreek} % Í´ (Dexia keraia)
+\DeclareTextCommand{\katwtonos}{LGR}{\textnumeralsignlowergreek} % ͵ (Aristeri keraia)
+
+
+% Diacritics
+% ~~~~~~~~~~
+%
+% Backwards compatibility with LGRx versions < 0.7::
+
+\DeclareTextCommand{\Ypogegrammeni}{LGR}{\ypogegrammeni}
+\DeclareTextCommand{\Prosgegrammeni}{LGR}{\prosgegrammeni}
+
+\DeclareTextCommand{\lowbreve}{LGR}{\brevebelow}
+\DeclareTextCommand{\Dasia}{LGR}{\accdasia}
+\DeclareTextCommand{\Psili}{LGR}{\accpsili}
+\DeclareTextCommand{\Tonos}{LGR}{\acctonos}
+\DeclareTextCommand{\Varia}{LGR}{\accvaria}
+\DeclareTextCommand{\Perispomeni}{LGR}{\accperispomeni}
+\DeclareTextCommand{\Dialytika}{LGR}{\accdialytika}
+
+\DeclareTextCommand{\DialytikaPerispomeni}{LGR}{\accdialytikaperispomeni}
+\DeclareTextCommand{\DialytikaTonos}{LGR}{\accdialytikatonos}
+\DeclareTextCommand{\DialytikaVaria}{LGR}{\accdialytikavaria}
+\DeclareTextCommand{\DasiaPerispomeni}{LGR}{\accdasiaperispomeni}
+\DeclareTextCommand{\DasiaVaria}{LGR}{\accdasiavaria}
+\DeclareTextCommand{\DasiaOxia}{LGR}{\accdasiaoxia}
+\DeclareTextCommand{\PsiliPerispomeni}{LGR}{\accpsiliperispomeni}
+\DeclareTextCommand{\PsiliOxia}{LGR}{\accpsilioxia}
+\DeclareTextCommand{\PsiliVaria}{LGR}{\accpsilivaria}
+
+
+% .. References
+% ----------
+%
+% .. _alphabeta: alphabeta.sty.html
+% .. _athnum: http://www.ctan.org/pkg/athnum
+% .. _Babel: http://www.ctan.org/pkg/babel
+% .. _fntguide: http://mirror.ctan.org/macros/latex/doc/fntguide.pdf
+% .. _fontenc: http://www.ctan.org/pkg/fontenc
+% .. _greek-fontenc: http://www.ctan.org/pkg/greek-fontenc
+% .. _hyperref: http://www.ctan.org/pkg/hyperref
+% .. _LaTeX Project Public License: http://www.latex-project.org/lppl.txt
+% .. _lgrx: http://www.ctan.org/pkg/lgrx
+% .. _libertine: http://www.ctan.org/pkg/libertine-legacy
+% .. _teubner: http://www.ctan.org/pkg/teubner
+% .. _textalpha: textalpha.sty.html
+% .. _ucs: http://www.ctan.org/pkg/unicode
diff --git a/obsolete/macros/latex/contrib/lgrx/lgrxenc.def.html b/obsolete/macros/latex/contrib/lgrx/lgrxenc.def.html
new file mode 100644
index 0000000000..2936bf2d22
--- /dev/null
+++ b/obsolete/macros/latex/contrib/lgrx/lgrxenc.def.html
@@ -0,0 +1,943 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.12: http://docutils.sourceforge.net/" />
+<title>lgrxenc.def</title>
+<meta name="copyright" content="© 2010 Günter Milde" />
+<style type="text/css">
+
+/*
+:Author: David Goodger (goodger@python.org)
+:Id: $Id: html4css1.css 7614 2013-02-21 15:55:51Z milde $
+:Copyright: This stylesheet has been placed in the public domain.
+
+Default cascading style sheet for the HTML output of Docutils.
+
+See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
+customize this style sheet.
+*/
+
+/* used to remove borders from tables and images */
+.borderless, table.borderless td, table.borderless th {
+ border: 0 }
+
+table.borderless td, table.borderless th {
+ /* Override padding for "table.docutils td" with "! important".
+ The right padding separates the table cells. */
+ padding: 0 0.5em 0 0 ! important }
+
+.first {
+ /* Override more specific margin styles with "! important". */
+ margin-top: 0 ! important }
+
+.last, .with-subtitle {
+ margin-bottom: 0 ! important }
+
+.hidden {
+ display: none }
+
+a.toc-backref {
+ text-decoration: none ;
+ color: black }
+
+blockquote.epigraph {
+ margin: 2em 5em ; }
+
+dl.docutils dd {
+ margin-bottom: 0.5em }
+
+object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
+ overflow: hidden;
+}
+
+/* Uncomment (and remove this text!) to get bold-faced definition list terms
+dl.docutils dt {
+ font-weight: bold }
+*/
+
+div.abstract {
+ margin: 2em 5em }
+
+div.abstract p.topic-title {
+ font-weight: bold ;
+ text-align: center }
+
+div.admonition, div.attention, div.caution, div.danger, div.error,
+div.hint, div.important, div.note, div.tip, div.warning {
+ margin: 2em ;
+ border: medium outset ;
+ padding: 1em }
+
+div.admonition p.admonition-title, div.hint p.admonition-title,
+div.important p.admonition-title, div.note p.admonition-title,
+div.tip p.admonition-title {
+ font-weight: bold ;
+ font-family: sans-serif }
+
+div.attention p.admonition-title, div.caution p.admonition-title,
+div.danger p.admonition-title, div.error p.admonition-title,
+div.warning p.admonition-title, .code .error {
+ color: red ;
+ font-weight: bold ;
+ font-family: sans-serif }
+
+/* Uncomment (and remove this text!) to get reduced vertical space in
+ compound paragraphs.
+div.compound .compound-first, div.compound .compound-middle {
+ margin-bottom: 0.5em }
+
+div.compound .compound-last, div.compound .compound-middle {
+ margin-top: 0.5em }
+*/
+
+div.dedication {
+ margin: 2em 5em ;
+ text-align: center ;
+ font-style: italic }
+
+div.dedication p.topic-title {
+ font-weight: bold ;
+ font-style: normal }
+
+div.figure {
+ margin-left: 2em ;
+ margin-right: 2em }
+
+div.footer, div.header {
+ clear: both;
+ font-size: smaller }
+
+div.line-block {
+ display: block ;
+ margin-top: 1em ;
+ margin-bottom: 1em }
+
+div.line-block div.line-block {
+ margin-top: 0 ;
+ margin-bottom: 0 ;
+ margin-left: 1.5em }
+
+div.sidebar {
+ margin: 0 0 0.5em 1em ;
+ border: medium outset ;
+ padding: 1em ;
+ background-color: #ffffee ;
+ width: 40% ;
+ float: right ;
+ clear: right }
+
+div.sidebar p.rubric {
+ font-family: sans-serif ;
+ font-size: medium }
+
+div.system-messages {
+ margin: 5em }
+
+div.system-messages h1 {
+ color: red }
+
+div.system-message {
+ border: medium outset ;
+ padding: 1em }
+
+div.system-message p.system-message-title {
+ color: red ;
+ font-weight: bold }
+
+div.topic {
+ margin: 2em }
+
+h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
+h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
+ margin-top: 0.4em }
+
+h1.title {
+ text-align: center }
+
+h2.subtitle {
+ text-align: center }
+
+hr.docutils {
+ width: 75% }
+
+img.align-left, .figure.align-left, object.align-left {
+ clear: left ;
+ float: left ;
+ margin-right: 1em }
+
+img.align-right, .figure.align-right, object.align-right {
+ clear: right ;
+ float: right ;
+ margin-left: 1em }
+
+img.align-center, .figure.align-center, object.align-center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.align-left {
+ text-align: left }
+
+.align-center {
+ clear: both ;
+ text-align: center }
+
+.align-right {
+ text-align: right }
+
+/* reset inner alignment in figures */
+div.align-right {
+ text-align: inherit }
+
+/* div.align-center * { */
+/* text-align: left } */
+
+ol.simple, ul.simple {
+ margin-bottom: 1em }
+
+ol.arabic {
+ list-style: decimal }
+
+ol.loweralpha {
+ list-style: lower-alpha }
+
+ol.upperalpha {
+ list-style: upper-alpha }
+
+ol.lowerroman {
+ list-style: lower-roman }
+
+ol.upperroman {
+ list-style: upper-roman }
+
+p.attribution {
+ text-align: right ;
+ margin-left: 50% }
+
+p.caption {
+ font-style: italic }
+
+p.credits {
+ font-style: italic ;
+ font-size: smaller }
+
+p.label {
+ white-space: nowrap }
+
+p.rubric {
+ font-weight: bold ;
+ font-size: larger ;
+ color: maroon ;
+ text-align: center }
+
+p.sidebar-title {
+ font-family: sans-serif ;
+ font-weight: bold ;
+ font-size: larger }
+
+p.sidebar-subtitle {
+ font-family: sans-serif ;
+ font-weight: bold }
+
+p.topic-title {
+ font-weight: bold }
+
+pre.address {
+ margin-bottom: 0 ;
+ margin-top: 0 ;
+ font: inherit }
+
+pre.literal-block, pre.doctest-block, pre.math, pre.code {
+ margin-left: 2em ;
+ margin-right: 2em }
+
+pre.code .ln { color: grey; } /* line numbers */
+pre.code, code { background-color: #eeeeee }
+pre.code .comment, code .comment { color: #5C6576 }
+pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
+pre.code .literal.string, code .literal.string { color: #0C5404 }
+pre.code .name.builtin, code .name.builtin { color: #352B84 }
+pre.code .deleted, code .deleted { background-color: #DEB0A1}
+pre.code .inserted, code .inserted { background-color: #A3D289}
+
+span.classifier {
+ font-family: sans-serif ;
+ font-style: oblique }
+
+span.classifier-delimiter {
+ font-family: sans-serif ;
+ font-weight: bold }
+
+span.interpreted {
+ font-family: sans-serif }
+
+span.option {
+ white-space: nowrap }
+
+span.pre {
+ white-space: pre }
+
+span.problematic {
+ color: red }
+
+span.section-subtitle {
+ /* font-size relative to parent (h1..h6 element) */
+ font-size: 80% }
+
+table.citation {
+ border-left: solid 1px gray;
+ margin-left: 1px }
+
+table.docinfo {
+ margin: 2em 4em }
+
+table.docutils {
+ margin-top: 0.5em ;
+ margin-bottom: 0.5em }
+
+table.footnote {
+ border-left: solid 1px black;
+ margin-left: 1px }
+
+table.docutils td, table.docutils th,
+table.docinfo td, table.docinfo th {
+ padding-left: 0.5em ;
+ padding-right: 0.5em ;
+ vertical-align: top }
+
+table.docutils th.field-name, table.docinfo th.docinfo-name {
+ font-weight: bold ;
+ text-align: left ;
+ white-space: nowrap ;
+ padding-left: 0 }
+
+/* "booktabs" style (no vertical lines) */
+table.docutils.booktabs {
+ border: 0px;
+ border-top: 2px solid;
+ border-bottom: 2px solid;
+ border-collapse: collapse;
+}
+table.docutils.booktabs * {
+ border: 0px;
+}
+table.docutils.booktabs th {
+ border-bottom: thin solid;
+ text-align: left;
+}
+
+h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
+h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
+ font-size: 100% }
+
+ul.auto-toc {
+ list-style-type: none }
+
+</style>
+<style type="text/css">
+
+/* html4css2.css: Cascading style sheet for Docutils' html4strict writer. */
+/* */
+/* :Author: Günter Milde */
+/* :Copyright: © 2009 Günter Milde. */
+/* Released without warranties or conditions of any kind */
+/* under the terms of the Apache License, Version 2.0 */
+/* http://www.apache.org/licenses/LICENSE-2.0 */
+/* */
+/* This stylesheet supplements the Docutils standard style 'html4css1.css'. */
+/* It uses CSS 2.1 elements (supported by up-to-date versions of popular */
+/* browsers). */
+
+/* General rules */
+/* ============= */
+
+body {
+ padding: 0 5%;
+ margin: 8px 0;
+ line-height:1.3;
+ /* http://ilovetypography.com/2008/02/28/a-guide-to-web-typography/
+ recommends "line-spacing that’s at least 140% of your text size" */
+ counter-reset: table;
+ /* counter-reset: figure; */
+}
+
+/* avoid long lines --> better reading */
+/* OTOH: lines should not be too short because of missing hyphenation, */
+div.document {
+ max-width: 45em;
+ margin: auto;
+}
+
+/* separate items except for compact lists */
+dl > dd {
+ margin-bottom: 1em;
+}
+.compact li, .compact p, .compact ul, .compact ol
+dl.simple > dd, .simple li, .simple p, .simple ul, .simple ol {
+ margin-top: 0;
+ margin-bottom: 0;
+/* background: magenta; */
+}
+dl.simple, dl.compact, dl.simple > dd, dl.compact > dd {
+ margin-top: 0;
+ margin-bottom: 0;
+/* background: lightgreen; */
+}
+
+/* space around paragraphs */
+dl > dd p:first-child, td > p {
+ margin: 0;
+}
+
+/* Sidebar */
+/* ------- */
+
+div.sidebar {
+ margin-right: -5%;
+}
+
+/* Special definition lists */
+/* ======================== */
+
+/* bold definition term on the same line as the label */
+dl.field-list > dt, dl.option-list > dt, dl.docinfo > dt,
+dl.footnote > dt, dl.citation > dt, dl.description > dt {
+ clear: left;
+ float: left;
+ margin: 0;
+ padding: 0;
+ padding-right: 0.5em;
+ font-weight: bold;
+}
+/* except for these */
+dl.option-list > dt, dl.footnote > dt {
+ font-weight: normal;
+}
+
+
+
+/* Field Lists */
+/* ----------- */
+
+/* field names followed by a colon */
+dl.field-list > dt:after, dl.docinfo > dt:after {
+ content: ":";
+}
+
+/* Offset for field content (corresponds to the --field-name-limit option) */
+dl.field-list > dd {
+ margin-left: 9em; /* ca. 14 chars in the test examples */
+ padding-left: 0.5em;
+}
+
+/* start field-body on a new line after long field names */
+dl.field-list > dd p {
+ width: 100%;
+/* display: inline-block; */
+/* background: yellow; */
+}
+
+dl.field-list > dd > p:first-child,
+/* dl.field-list > dd > ol:first-child, */
+/* dl.field-list > dd > ul:first-child, */
+dl.field-list > dd > dl:first-child {
+ display: inline-block;
+}
+
+/* field-list variants:: */
+
+/* example for custom field-name width */
+dl.field-list.narrow > dd {
+ margin-left: 5em;
+}
+
+/* start field-body on same line after long field names */
+dl.field-list.run-in > dd p {
+ display: block;
+}
+
+/* wrap or truncate long field names */
+dl.field-list.fix-labelwidth > dt {
+ width: 8em; /* set to dl.field-list > dd margin-left - padding-left */
+ overflow: hidden;
+}
+dl.field-list.fix-labelwidth > dd:after {
+ /* a "stopper" to prevent next dd floating up too far */
+ content: '';
+ display: block;
+ clear: left;
+}
+
+/* docinfo */
+
+dl.docinfo > dd {
+ margin-left: 8em;
+/* margin-bottom: 0.5em; */
+}
+
+
+/* option list */
+
+dl.option-list {
+ margin-left: 1em;
+ padding-left: 0;
+}
+
+dl.option-list > dd {
+ margin-left: 8em;
+ /* margin-bottom: 0.5em; */
+}
+
+/* start description on a new line after long options */
+dl.option-list > dd p {
+ width: 100%;
+ display: inline-block;
+}
+
+/* footnotes */
+
+a.footnote-reference, a.fn-backref {
+ text-decoration: inherit; /* do not underline footnote links */
+}
+
+dl.footnote {
+ /* line on the left */
+ padding-left: 1ex;
+ border-left: solid;
+ border-left-width: thin;
+ /* border-color: black; */
+}
+
+/* paragraph on same line as backrefs */
+dd > em {
+/* background: green; */
+ float: left;
+ margin-right: 1ex
+}
+
+
+/*
+Ordered List (Enumeration)
+--------------------------
+
+Use counters to replace the deprecated start attribute. Make sure the
+resulting list resembles the list-style 'outside' with a hanging indent.
+*/
+
+/* New ordered list: reset counter, suppress the default label */
+ol, ol.arabic, ol.loweralpha, ol.upperalpha,
+ol.lowerroman, ol.upperroman {
+ counter-reset: item;
+ list-style: none
+}
+
+/* Set the negative indent of the list label as feature of the list item */
+ol > li {
+ text-indent: -40px; /* Mozillas default indent */
+}
+/* reset for child elements */
+ol > li > * {
+ text-indent: 0px;
+ text-indent: 0;
+ margin-top: 0;
+ /* background: lightgreen; */
+}
+
+/* Label */
+ol > li:before {
+ /* increment and typeset counter(s), */
+ counter-increment: item;
+ content: counter(item) ".";
+ /* display next to the content (aligned top-right), */
+ display: inline-block;
+ text-align: right;
+ vertical-align: top;
+ /* sum must match ol>li {text-indent:} (40px is Mozillas default) */
+ width: 35px;
+ padding-right: 5px;
+/* background: yellow; */
+}
+
+/* The list item's first line starts next to the label, without indent */
+ol > li > p:first-child,
+ol > li > ol:first-child,
+ol > li > ul:first-child,
+ol > li > dl:first-child {
+ display: inline-block;
+ /* background: lightblue; */
+}
+
+/* default separator variants */
+ol.loweralpha > li:before {
+ content: counter(item, lower-alpha) ")";
+}
+ol.upperalpha > li:before {
+ content: counter(item, upper-alpha) ".";
+}
+ol.lowerroman > li:before {
+ content: "(" counter(item, lower-roman) ")";
+}
+ol.upperroman > li:before {
+ content: counter(item, upper-roman) ")";
+}
+/* nested counters (1, 1.1, 1.1.1, etc) */
+/* nested enumerated lists "inherit" the class attribute, other lists not */
+ol.nested > li:before, ol.nested ol > li:before {
+ content: counters(item, ".") " ";
+}
+
+/* lists nested in definition list */
+
+dd > ul, dd > ol {
+ padding-left: 0pt;
+}
+
+/* TODO: prefix, suffix? */
+
+/* smaller font for super- and subscripts */
+/* sub, sup {font-size: 70%;} */ /* Mozilla default is `smaller` */
+
+
+/* Tables */
+/* ====== */
+
+/* margins and borders for "normal" tables */
+table {
+/* background: magenta; */
+ margin-top: 1em ;
+ margin-bottom: 1em;
+/* border-style: outset; */
+ border-style: solid;
+ border-color: silver;
+ border-width: thin;
+ border-collapse: collapse;
+}
+blockquote > table {
+ margin-top: 0em ;
+ margin-bottom: 0em;
+}
+
+td, th {
+ border-style: solid;
+ border-width: thin;
+ border-color: silver;
+ /* text-align: left; */
+ padding: 0 1ex;
+}
+
+td > p:first-child, th > p:first-child {
+ margin-top: 0;
+}
+td > p, th > p {
+ margin-bottom: 0;
+}
+
+/* no borders for "borderless" tables */
+table.borderless, table.borderless * {
+ border-style: none;
+}
+
+/* "booktabs" style (no vertical lines) */
+table.booktabs {
+ border: 0;
+ border-top: 2px solid;
+ border-bottom: 2px solid;
+ border-collapse: collapse;
+}
+
+table.booktabs * {
+ border: 0;
+}
+table.booktabs th {
+ border-bottom: thin solid;
+ text-align: left;
+}
+
+table > caption {
+ text-align: left;
+ margin-bottom: 0.25em
+/* padding: 2em 0 1em 0; */
+}
+
+/* numbered tables*/
+table.numbered > caption:before {
+ counter-increment: table; /* defined/re-set in body */
+ content: "Table " counter(table) ": ";
+ font-weight: bold;
+}
+
+
+/* literal text
+ ------------
+*/
+/* whitespace and wrapping in inline literals */
+/* possible values: normal, nowrap, pre, pre-wrap, pre-line */
+tt.literal {
+ white-space: pre-wrap;
+}
+
+/* /* compensate for initial line-break (which is literal with XHTML 1.1) */ */
+/* pre.literal-block, pre.doctest-block { */
+/* margin-top: 0em ; */
+/* } */
+
+/* Table of Contents */
+
+/* don't indent like a topic */
+div.topic.contents {
+ margin: 0;
+}
+/* div.topic.contents ul { */
+/* list-style: none; */
+/* } */
+
+div.topic.contents a {
+ text-decoration: none; /* no underline for links */
+}
+
+/* section numbers */
+
+span.sectnum {
+ padding-right: 1ex;
+}
+
+/* admonitions */
+
+/* no padding for top and bottom */
+div.admonition, div.attention, div.caution, div.danger, div.error,
+div.hint, div.important, div.note, div.tip, div.warning {
+ padding: 0px 1em }
+
+</style>
+</head>
+<body>
+<div class="document" id="lgrxenc-def">
+<h1 class="title">lgrxenc.def</h1>
+<h2 class="subtitle" id="comprehensive-lgr-greek-font-encoding-definitions">comprehensive LGR Greek font encoding definitions</h2>
+
+<dl class="docinfo simple">
+<dt class="copyright">Copyright</dt>
+<dd class="copyright">© 2010 Günter Milde</dd>
+<dt>Licence</dt>
+<dd><p>This work may be distributed and/or modified under the
+conditions of the <a class="reference external" href="http://www.latex-project.org/lppl.txt">LaTeX Project Public License</a>, either
+version&nbsp;1.3 of this license or any later version.</p>
+</dd>
+</dl>
+<div class="abstract topic">
+<p class="topic-title first">Abstract</p>
+<p>Obsolete font encoding file for Greek in text.</p>
+<p>For new documents, use <tt class="literal">lgrenc.def</tt> from <a class="reference external" href="http://www.ctan.org/pkg/greek-fontenc">greek-fontenc</a> (which
+is also required by this file).</p>
+</div>
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><p><a class="reference internal" href="#changelog" id="id1">Changelog</a></p></li>
+<li><p><a class="reference internal" href="#usage" id="id2">Usage</a></p></li>
+<li><p><a class="reference internal" href="#implementation" id="id3">Implementation</a></p>
+<ul>
+<li><p><a class="reference internal" href="#identification" id="id4">Identification</a></p></li>
+<li><p><a class="reference internal" href="#requirements" id="id5">Requirements</a></p></li>
+<li><p><a class="reference internal" href="#backwards-compatibility-definitions" id="id6">Backwards compatibility definitions</a></p>
+<ul>
+<li><p><a class="reference internal" href="#additional-greek-symbols" id="id7">Additional Greek symbols</a></p>
+<ul>
+<li><p><a class="reference internal" href="#ancient-greek-numbers-athenian-numerals" id="id8">Ancient Greek Numbers (Athenian Numerals)</a></p></li>
+<li><p><a class="reference internal" href="#archaic-letters" id="id9">Archaic letters</a></p></li>
+<li><p><a class="reference internal" href="#numeral-signs" id="id10">Numeral signs</a></p></li>
+</ul>
+</li>
+</ul>
+</li>
+<li><p><a class="reference internal" href="#diacritics" id="id11">Diacritics</a></p></li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="section" id="changelog">
+<h1><a class="toc-backref" href="#id1">Changelog</a></h1>
+<table class="borderless">
+<colgroup>
+<col width="7%" />
+<col width="17%" />
+<col width="75%" />
+</colgroup>
+<tbody>
+<tr><td><p>0.1</p></td>
+<td><p>2010-03-31</p></td>
+<td><p>initial attempt</p></td>
+</tr>
+<tr><td><p>0.2</p></td>
+<td><p>2010-04-20</p></td>
+<td><p>diacritics dropped in UPPERCASE</p></td>
+</tr>
+<tr><td><p>0.3</p></td>
+<td><p>2010-06-08</p></td>
+<td><p>handle Titlecase and UPPERCASE extending
+<tt class="literal">\&#64;uclclist</tt></p></td>
+</tr>
+<tr><td><p>0.3.1</p></td>
+<td><p>2010-06-10</p></td>
+<td><p>code cleanup: replace dummy accent hack
+with TextCommand</p></td>
+</tr>
+<tr><td><p>0.4</p></td>
+<td><p>2010-06-15</p></td>
+<td><p>more text symbols</p></td>
+</tr>
+<tr><td><p>0.4.1</p></td>
+<td><p>2010-08-06</p></td>
+<td><p>prevent multiple evaluation</p></td>
+</tr>
+<tr><td><p>0.5</p></td>
+<td><p>2010-08-27</p></td>
+<td><p>support <tt class="literal">\textalpha</tt> … <tt class="literal">\textOmega</tt></p></td>
+</tr>
+<tr><td><p>0.5.1</p></td>
+<td><p>2012-05-08</p></td>
+<td><p>upload to CTAN</p></td>
+</tr>
+<tr><td><p>0.6</p></td>
+<td><p>2012-06-29</p></td>
+<td><p><tt class="literal">\TextGreek</tt> wrapper command (used in lgrenc.dfu),
+aliases for <tt class="literal">puenc.def</tt> compatibility</p></td>
+</tr>
+<tr><td><p>0.6.1</p></td>
+<td><p>2013-02-12</p></td>
+<td><p><tt class="literal">\&#64;uclclist</tt> entries for <cite>PU</cite> aliases</p></td>
+</tr>
+<tr><td><p>0.7</p></td>
+<td><p>2013-05-03</p></td>
+<td><p>documentation update, new accent macros names</p></td>
+</tr>
+<tr><td><p>0.8</p></td>
+<td><p>2013-05-30</p></td>
+<td><p>backwards compatibility file for new lgrenc.def</p></td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="usage">
+<h1><a class="toc-backref" href="#id2">Usage</a></h1>
+<p>This file is only kept for backwards compatibility with existing documents.</p>
+<p>For new documents, use <tt class="literal">lgrenc.def</tt> from <a class="reference external" href="http://www.ctan.org/pkg/greek-fontenc">greek-fontenc</a> (which is also
+required by this file).</p>
+<dl class="docutils">
+<dt>Example:</dt>
+<dd><p>Select font encodings <cite>T1</cite> (as default) and <cite>LGR</cite>:</p>
+<pre class="code latex literal-block"><span class="keyword">\usepackage</span><span class="name attribute">[LGR,T1]</span><span class="name builtin">{</span>fontenc<span class="name builtin">}</span>
+</pre>
+<p>Select font encodings <cite>T1</cite> and (as default) <cite>LGR</cite>:</p>
+<pre class="code latex literal-block"><span class="keyword">\usepackage</span><span class="name attribute">[T1,LGR]</span><span class="name builtin">{</span>fontenc<span class="name builtin">}</span>
+</pre>
+<p><a class="reference external" href="http://www.ctan.org/pkg/babel">Babel</a>’s “greek†option and the textalpha and alphabeta packages also load
+<tt class="literal">lgrenc.def</tt>, so after any of the following lines, “LGR†is declared and
+set up as a font encoding:</p>
+<pre class="code latex literal-block"><span class="keyword">\usepackage</span><span class="name attribute">[greek,english]</span><span class="name builtin">{</span>babel<span class="name builtin">}</span> <span class="comment">% default language English
+</span>
+<span class="keyword">\usepackage</span><span class="name attribute">[greek,english]</span><span class="name builtin">{</span>babel<span class="name builtin">}</span> <span class="comment">% default language Greek
+</span>
+<span class="keyword">\usepackage</span><span class="name builtin">{</span>textalpha<span class="name builtin">}</span>
+
+<span class="keyword">\usepackage</span><span class="name builtin">{</span>alphabeta<span class="name builtin">}</span>
+</pre>
+</dd>
+</dl>
+</div>
+<div class="section" id="implementation">
+<h1><a class="toc-backref" href="#id3">Implementation</a></h1>
+<div class="section" id="identification">
+<h2><a class="toc-backref" href="#id4">Identification</a></h2>
+<pre class="literal-block">\ProvidesFile{lgrxenc.def}
+[2013/05/30 v0.8 comprehensive LGR Greek Font Encoding definitions]
+</pre>
+</div>
+<div class="section" id="requirements">
+<h2><a class="toc-backref" href="#id5">Requirements</a></h2>
+<p>To declare and set up the LGR font encoding, we use the successor file
+<tt class="literal">lgrenc.def</tt> from <a class="reference external" href="http://www.ctan.org/pkg/greek-fontenc">greek-fontenc</a>:</p>
+<pre class="literal-block">\input{lgrenc.def}
+</pre>
+</div>
+<div class="section" id="backwards-compatibility-definitions">
+<h2><a class="toc-backref" href="#id6">Backwards compatibility definitions</a></h2>
+<p><tt class="literal">\TextGreek</tt> is now called <tt class="literal">\ensuregreek</tt>:</p>
+<pre class="literal-block">\DeclareTextCommand{\TextGreek}{LGR}[1]{#1}
+</pre>
+<div class="section" id="additional-greek-symbols">
+<h3><a class="toc-backref" href="#id7">Additional Greek symbols</a></h3>
+<p>Compatibility aliases (defined via <cite>TextCommand</cite> so that up/downcasing works
+without the need for additional uclclist entries.</p>
+<div class="section" id="ancient-greek-numbers-athenian-numerals">
+<h4><a class="toc-backref" href="#id8">Ancient Greek Numbers (Athenian Numerals)</a></h4>
+<p>Names from the <a class="reference external" href="http://www.ctan.org/pkg/athnum">athnum</a> package:</p>
+<pre class="literal-block">\DeclareTextCommand{\PiDelta}{LGR}{\pentedeka} % GREEK ACROPHONIC ATTIC FIFTY
+\DeclareTextCommand{\PiEta}{LGR}{\pentehekaton} % GREEK ACROPHONIC ATTIC FIVE HUNDRED
+\DeclareTextCommand{\PiChi}{LGR}{\penteqilioi} % GREEK ACROPHONIC ATTIC FIVE THOUSAND
+\DeclareTextCommand{\PiMu}{LGR}{\pentemurioi} % GREEK ACROPHONIC ATTIC FIFTY THOUSAND
+</pre>
+</div>
+<div class="section" id="archaic-letters">
+<h4><a class="toc-backref" href="#id9">Archaic letters</a></h4>
+<p>Names from <a class="reference external" href="http://www.ctan.org/pkg/babel">babel</a>’s <tt class="literal">greek.ldf</tt> and <a class="reference external" href="http://www.ctan.org/pkg/teubner">teubner</a></p>
+<pre class="literal-block">\DeclareTextCommand{\vardigamma}{LGR}{\textvarstigma} % greek.ldf
+\DeclareTextCommand{\ddigamma}{LGR}{\textdigamma} % greek.ldf
+\DeclareTextCommand{\Digamma}{LGR}{\textDigamma} % greek.ldf
+
+\DeclareTextCommand{\stigma}{LGR}{\textstigma} % Ï› (greek.ldf, teubner)
+\DeclareTextCommand{\varstigma}{LGR}{\textvarstigma} % stigma variant (CB.enc, teubner)
+\DeclareTextCommand{\koppa}{LGR}{\textkoppa} % ÏŸ (greek small letter koppa)
+\DeclareTextCommand{\qoppa}{LGR}{\textqoppa} % Ï™ (archaic koppa)
+\DeclareTextCommand{\Qoppa}{LGR}{\textQoppa} % Ϙ (archaic Koppa)
+\DeclareTextCommand{\Stigma}{LGR}{\textStigma} % Ϛ (teubner) in some fonts ϹΤ ligature
+\DeclareTextCommand{\Sampi}{LGR}{\textSampi} % Ï 
+\DeclareTextCommand{\sampi}{LGR}{\textsampi} % Ï¡
+\DeclareTextCommand{\anoteleia}{LGR}{\textanoteleia} % ·
+\DeclareTextCommand{\erotimatiko}{LGR}{\texterotimatiko} % ;
+</pre>
+</div>
+<div class="section" id="numeral-signs">
+<h4><a class="toc-backref" href="#id10">Numeral signs</a></h4>
+<p>See also <a class="reference external" href="http://en.wikipedia.org/wiki/Greek_numerals">http://en.wikipedia.org/wiki/Greek_numerals</a></p>
+<p>Names from <a class="reference external" href="http://www.ctan.org/pkg/babel">babel</a>, <a class="reference external" href="http://www.ctan.org/pkg/teubner">teubner</a>, and <a class="reference external" href="http://www.ctan.org/pkg/hyperref">hyperref</a>’s puenc.def:</p>
+<pre class="literal-block">\DeclareTextCommand{\anwtonos}{LGR}{\textnumeralsigngreek} % Í´ (Dexia keraia)
+\DeclareTextCommand{\katwtonos}{LGR}{\textnumeralsignlowergreek} % ͵ (Aristeri keraia)
+</pre>
+</div>
+</div>
+</div>
+<div class="section" id="diacritics">
+<h2><a class="toc-backref" href="#id11">Diacritics</a></h2>
+<p>Backwards compatibility with LGRx versions &lt; 0.7:</p>
+<pre class="literal-block">\DeclareTextCommand{\Ypogegrammeni}{LGR}{\ypogegrammeni}
+\DeclareTextCommand{\Prosgegrammeni}{LGR}{\prosgegrammeni}
+
+\DeclareTextCommand{\lowbreve}{LGR}{\brevebelow}
+\DeclareTextCommand{\Dasia}{LGR}{\accdasia}
+\DeclareTextCommand{\Psili}{LGR}{\accpsili}
+\DeclareTextCommand{\Tonos}{LGR}{\acctonos}
+\DeclareTextCommand{\Varia}{LGR}{\accvaria}
+\DeclareTextCommand{\Perispomeni}{LGR}{\accperispomeni}
+\DeclareTextCommand{\Dialytika}{LGR}{\accdialytika}
+
+\DeclareTextCommand{\DialytikaPerispomeni}{LGR}{\accdialytikaperispomeni}
+\DeclareTextCommand{\DialytikaTonos}{LGR}{\accdialytikatonos}
+\DeclareTextCommand{\DialytikaVaria}{LGR}{\accdialytikavaria}
+\DeclareTextCommand{\DasiaPerispomeni}{LGR}{\accdasiaperispomeni}
+\DeclareTextCommand{\DasiaVaria}{LGR}{\accdasiavaria}
+\DeclareTextCommand{\DasiaOxia}{LGR}{\accdasiaoxia}
+\DeclareTextCommand{\PsiliPerispomeni}{LGR}{\accpsiliperispomeni}
+\DeclareTextCommand{\PsiliOxia}{LGR}{\accpsilioxia}
+\DeclareTextCommand{\PsiliVaria}{LGR}{\accpsilivaria}
+</pre>
+<!-- References
+- - - - - - - - - - -->
+</div>
+</div>
+</div>
+</body>
+</html>
diff --git a/obsolete/macros/latex/contrib/marginal/marginal.dtx b/obsolete/macros/latex/contrib/marginal/marginal.dtx
new file mode 100644
index 0000000000..4c619ffa2c
--- /dev/null
+++ b/obsolete/macros/latex/contrib/marginal/marginal.dtx
@@ -0,0 +1,339 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2012 by Sigitas Tolu\v{s}is <sigitas@vtex.lt>
+% ---------------------------------------------------------------------------
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Sigitas Tolu\v{s}is.
+%
+% This work consists of the files marginal.dtx and marginal.ins
+% and the derived filebase marginal.sty.
+%
+% \fi
+%
+% \iffalse
+%<*driver>
+\ProvidesFile{marginal.dtx}
+%</driver>
+%<*package>
+%% Copyright (C) 1997-2012 by Sigitas Tolu\v{s}is <sigitas@vtex.lt>
+%% VTeX Ltd., Akademijos 4, Vilnius, Lithuania
+%% http://www.vtex.lt/tex/download/macros/
+%% --------------------------------------------------------------------------
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% PURPOSE: Enlarge free and show lost marginal inserts.
+%%
+%</package>
+%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+%<package>\ProvidesPackage{marginal}
+%<*package>
+ [2012/05/29 v1.1 Enlarge free and show lost marginal inserts]
+%</package>
+%
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage{marginal}[2012/05/29]
+%%\EnableCrossrefs
+%%\CodelineIndex
+\RecordChanges
+\begin{document}
+ \DocInput{marginal.dtx}
+ %%\PrintChanges
+ %%\PrintIndex
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{374}
+%
+% \CharacterTable
+% {Upper-case \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
+% Lower-case \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
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+%
+% \changes{v1.1}{2012/05/29}{Converted to DTX file}
+%
+% \DoNotIndex{\newcommand,\newenvironment}
+%
+% \providecommand*{\url}{\texttt}
+% \GetFileInfo{marginal.dtx}
+% \title{The \textsf{marginal} package}
+% \author{Sigitas Tolu\v{s}is \\ \url{sigitas@vtex.lt}}
+% \date{\fileversion~from \filedate}
+%
+% \maketitle
+%
+% \section{Introduction}
+%
+% Enlarge free and show lost marginal inserts.
+%
+% \section{Usage}
+%
+% \DescribeMacro{\showlostmarginals}
+% \indent Outputs lost marginal notes at the left of page.
+%
+% \medskip
+% \DescribeMacro{\enlargefreelist}
+% Adds more(34) free inserts to freelist.
+%
+% \medskip
+% \DescribeMacro{\onesidemarginals}
+% Outputs marginal notes only on one side. It saves one half
+% of the available free inserts.
+%
+% \StopEventually{}
+%
+% \section{Implementation}
+%
+% \iffalse
+%<*package>
+% \fi
+%
+% \begin{macrocode}
+\newif\if@mparlost \@mparlostfalse
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newbox\@mparlostbox
+\setbox\@mparlostbox\vbox{}
+% \end{macrocode}
+%
+% \begin{macro}{\@fltovfpar}
+%
+% \begin{macrocode}
+\gdef\@fltovfpar{\global\@mparlosttrue
+ \@latex@warning{Too many unprocessed (marginal)floats}\relax
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@fltovfmess}
+% \begin{macrocode}
+\gdef\@fltovfmess{%
+ \@latex@error{Too many unprocessed floats}\@ehb
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\marginpar}
+%
+% \begin{macrocode}
+\def\marginpar{%
+ \ifhmode
+ \@bsphack\@floatpenalty -\@Mii
+ \else
+ \@floatpenalty-\@Miii
+ \fi
+ \ifinner
+ \@parmoderr\@floatpenalty\z@
+ \else
+ \@next\@currbox\@freelist{}{}%
+ \@next\@marbox\@freelist{\global\count\@marbox\m@ne}{\@floatpenalty\z@
+ \@fltovfmess \def\@currbox{\@tempboxa}\def\@marbox{\@tempboxa}}%
+ \fi
+ \@ifnextchar[\@xmpar\@ympar
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@savemarbox}
+%
+% \begin{macrocode}
+\long\def\@savemarbox#1#2{%
+ \global\setbox#1%
+ \color@vbox
+ \vtop{%
+ \hsize\marginparwidth
+ \@parboxrestore
+ \@marginparreset
+ #2%
+ \global\@minipagefalse
+ \outer@nobreak
+ }%
+ \color@endbox
+ \if@mparlost
+ \global\setbox\@mparlostbox\vbox{\unvbox\@mparlostbox\copy#1}%
+ \global\@mparlostfalse
+ \fi
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\showlostmarginals}
+% Outputs lost marginal notes at the left of the page.
+% \begin{macrocode}
+\def\showlostmarginals{%
+ \global\let\old@textbottom\@textbottom
+ \gdef\@textbottom{%
+ \vtop to\z@{%
+ \hbox to\z@{\kern-\wd\@mparlostbox
+ \vbox to\z@{\kern-\ht\@mparlostbox
+ \box\@mparlostbox
+ \vfill
+ }%
+ }%
+ }%
+ \old@textbottom
+ }%
+ \global\let\@fltovfmess\@fltovfpar
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\enlargefreelist}
+% Adds more(34) free inserts to freelist
+% \begin{macrocode}
+\def\enlargefreelist{%
+ \@for\curr@option:={S,T,U,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}%
+ \do{\expandafter\newinsert\csname bx@\curr@option\endcsname}%
+ \gdef\@freelist{%
+ \@elt\bx@A \@elt\bx@B \@elt\bx@C \@elt\bx@D \@elt\bx@E \@elt\bx@F
+ \@elt\bx@G \@elt\bx@H \@elt\bx@I \@elt\bx@J \@elt\bx@K \@elt\bx@L
+ \@elt\bx@M \@elt\bx@N \@elt\bx@O \@elt\bx@P \@elt\bx@Q \@elt\bx@R
+ \@elt\bx@S \@elt\bx@T \@elt\bx@U \@elt\bx@V \@elt\bx@W \@elt\bx@X
+ \@elt\bx@Y \@elt\bx@Z
+ \@elt\bx@a \@elt\bx@b \@elt\bx@c \@elt\bx@d \@elt\bx@e \@elt\bx@f
+ \@elt\bx@g \@elt\bx@h \@elt\bx@i \@elt\bx@j \@elt\bx@k \@elt\bx@l
+ \@elt\bx@m \@elt\bx@n \@elt\bx@o \@elt\bx@p \@elt\bx@q \@elt\bx@r
+ \@elt\bx@s \@elt\bx@t \@elt\bx@u \@elt\bx@v \@elt\bx@w \@elt\bx@x
+ \@elt\bx@y \@elt\bx@z
+ }%
+ }%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\onesidemarginals}
+%
+%% \onesidemarginals - outputs marginals only on one side
+%
+% \begin{macrocode}
+\def\onesidemarginals{%
+ \newbox\@marbox
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@addmarginpar}
+% \begin{macrocode}
+ \gdef\@addmarginpar{\@cons\@freelist\@currbox
+ \@tempdima\@mparbottom
+ \advance\@tempdima -\@pageht
+ \advance\@tempdima\ht\@currbox
+ \ifdim\@tempdima >\z@
+ \@latex@warning@no@line {Marginpar on page \thepage\space moved}%
+ \else
+ \@tempdima\z@
+ \fi
+ \global\@mparbottom\@pageht
+ \global\advance\@mparbottom\@tempdima
+ \global\advance\@mparbottom\dp\@currbox
+ \global\advance\@mparbottom\marginparpush
+ \advance\@tempdima -\ht\@currbox
+ \global\setbox\@currbox
+ \vbox {\vskip\@tempdima \box\@currbox}%
+ \global \ht\@currbox \z@
+ \global \dp\@currbox \z@
+ \kern -\@pagedp
+ \nointerlineskip
+ \hb@xt@\columnwidth
+ {\hskip\columnwidth \hskip\marginparsep \box\@currbox \hss}%
+ \nointerlineskip
+ \hbox{\vrule \@height\z@ \@width\z@ \@depth\@pagedp}%
+ }%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\marginpar}
+%
+% \begin{macrocode}
+ \gdef\marginpar{%
+ \ifhmode
+ \@bsphack\@floatpenalty -\@Mii
+ \else
+ \@floatpenalty-\@Miii
+ \fi
+ \ifinner
+ \@parmoderr\@floatpenalty\z@
+ \else
+ \@next\@currbox\@freelist{\global\count\@currbox\m@ne}{\@floatpenalty\z@
+ \@fltovfmess \def\@currbox{\@tempboxa}}%
+ \fi
+ \@ifnextchar[\@xmpar\@ympar
+ }%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@xmpar}
+%
+% \begin{macrocode}
+ \long\gdef\@xmpar[##1]##2{\@savemarbox\@currbox{##2}\@xympar}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@ympar}
+% \begin{macrocode}
+ \long\gdef\@ympar##1{\@savemarbox\@currbox{##1}\@xympar}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@xympar}
+% \begin{macrocode}
+ \def\@xympar{%
+ \ifnum\@floatpenalty<\z@ \@cons\@currlist\@marbox \fi
+ \setbox\@tempboxa
+ \color@vbox
+ \vbox\bgroup
+ \end@float
+ \global\@ignorefalse \@esphack
+ }%
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%\endinput
+% \end{macrocode}
+%
+% \iffalse
+%</package>
+% \fi
+%
+% \Finale
diff --git a/obsolete/macros/latex/contrib/marginal/marginal.pdf b/obsolete/macros/latex/contrib/marginal/marginal.pdf
new file mode 100644
index 0000000000..7b437ecec4
--- /dev/null
+++ b/obsolete/macros/latex/contrib/marginal/marginal.pdf
Binary files differ
diff --git a/obsolete/macros/latex/contrib/mbenotes/README b/obsolete/macros/latex/contrib/mbenotes/README
new file mode 100644
index 0000000000..bcf0ddb13e
--- /dev/null
+++ b/obsolete/macros/latex/contrib/mbenotes/README
@@ -0,0 +1,11 @@
+ Name of contribution: mbenotes
+ Version 2 2013-10-1
+ Author's name: Matthias Borck-Elsner
+ Author's email: matthias at kleinesnetzwerk.net
+ Location on CTAN: http://mirror.ctan.org/macros/latex/contrib/mbenotes/mbenotes.sty
+ Summary description: Flexible notes in texts,tables,equations and images.
+ License type: lppl
+ Announcement text: sty file to place notes into text,tables, equations and images and list them.
+ New commands are defined:\ruler \imgsize \imgwidth and \imgheight.
+ The endnotes still work! mbenotes is based on endnotes.sty
+ Copyright 2002 John Lavagnino. Thanks to John. \ No newline at end of file
diff --git a/obsolete/macros/latex/contrib/mbenotes/mbenotes.pdf b/obsolete/macros/latex/contrib/mbenotes/mbenotes.pdf
new file mode 100644
index 0000000000..6291266701
--- /dev/null
+++ b/obsolete/macros/latex/contrib/mbenotes/mbenotes.pdf
Binary files differ
diff --git a/obsolete/macros/latex/contrib/mbenotes/mbenotes.sty b/obsolete/macros/latex/contrib/mbenotes/mbenotes.sty
new file mode 100644
index 0000000000..8f0c8bbc23
--- /dev/null
+++ b/obsolete/macros/latex/contrib/mbenotes/mbenotes.sty
@@ -0,0 +1,1073 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% ****************************************
+% * mbeNOTES
+% ****************************************
+%
+% Date of this version: 2012-9-21
+% Matthias Borck-Elsner
+%
+%% Based on endnotes.sty Copyright 2002 John Lavagnino
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.2
+%% of this license or (at your option) any later version.
+%% The lambe version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.2 or later is part of all distributions of LaTeX
+%% version 1999/12/01 or later.
+%%
+%% Uses an extra external file, with .mbe extension, to hold the
+%% text of the mbenotes. This may be deleted after the run; a new
+%% version is generated each time--it doesn't require information
+%% collected from the previous run.
+%%
+%% This code does not obey \nofiles. Perhaps it should.
+%%
+%%
+%% To turn all the footnotes in your documents into mbenotes, say
+%%
+%% \let\footnote=\mbenote
+%%
+%% in your preamble, and then add something like
+%%
+%% \newpage
+%% \begingroup
+%% \parindent 0pt
+%% \parskip 2ex
+%% \def\mbenotesize{\normalsize}
+%% \thembenotes
+%% \endgroup
+%%
+%% as the last thing in your document. (But \thembenotes all
+%% by itself will work.)
+%%
+%% ****************************************
+%% * mbeNOTE COMMANDS *
+%% ****************************************
+%%
+%%
+%% \mbenote{NOTE} : User command to insert a mbenote.
+%%
+%% \mbenote[NUM]{NOTE} : User command to insert a mbenote numbered
+%% NUM, where NUM is a number -- 1, 2,
+%% etc. For example, if mbenotes are numbered
+%% *, **, etc. within pages, then \mbenote[2]{...}
+%% produces mbenote '**'. This command does not
+%% step the mbenote counter.
+%%
+%% \mbenotemark[NUM] : Command to produce just the mbenote mark in
+%% the text, but no mbenote. With no argument,
+%% it steps the mbenote counter before generating
+%% the mark.
+%%
+%% \mbenotetext[NUM]{TEXT} : Command to produce the mbenote but no
+%% mark. \mbenote is equivalent to
+%% \mbenotemark \mbenotetext .
+%%
+%% \addtombenotes{TEXT} : Command to add text or commands to current
+%% mbenotes file: for inserting headings,
+%% pagebreaks, and the like into mbenotes
+%% sections. TEXT a moving argument:
+%% \protect required for fragile commands.
+%%
+%% ****************************************
+%% * mbeNOTE USER COMMANDS *
+%% ****************************************
+%%
+%% mbenotes use the following parameters, similar to those relating
+%% to footnotes:
+%%
+%% \mbenotesize : Size-changing command for mbenotes.
+%%
+%% \thembenote : In usual LaTeX style, produces the mbenote number.
+%%
+%% \thembemark : Holds the current mbenote's mark--e.g., \dag or '1' or 'a'.
+%% (You don't want to set this yourself, as it comes
+%% either from the autonumbering of notes or from
+%% the optional argument to \mbenote. But you'll need
+%% to use it if you define your own \makembemark.)
+%%
+%% \makembemark : A macro to generate the mbenote marker from \thembemark
+%% The default definition is \hbox{$^\thembemark$}.
+%%
+%% \@makembetext{NOTE} :
+%% Must produce the actual mbenote, using \thembemark as the mark
+%% of the mbenote and NOTE as the text. It is called when effectively
+%% inside a \parbox, with \hsize = \columnwidth. For example, it might
+%% be as simple as
+%% $^{\thembemark}$ NOTE
+%%
+%%
+%% ****************************************
+%% * mbeNOTE MACROS *
+%% ****************************************
+%%
+%%
+\ProvidesPackage{mbenotes}[2012/09/21 (Version 2) Notes for Text,tables,images and equations ]\RequirePackage{graphicx,xcolor}\@definecounter{mbenote}
+\def\thembenote{\@arabic\c@mbenote}
+
+\def\@makembemark{\hbox{\@textsuperscript{{\tiny\@thembemark}}}}
+\def\makembemark{\@makembemark}
+
+\def\thembemark{\@thembemark}
+
+\newdimen\mbenotesep
+
+\def\mbenote{\@ifnextchar[\@xmbenote{\stepcounter{mbenote}%
+ \protected@xdef\@thembemark{\thembenote}%
+ \@mbenotemark\@mbenotetext}}
+
+\def\@xmbenote[#1]{
+ \begingroup
+ \c@mbenote=#1\relax
+ \unrestored@protected@xdef\@thembemark{\thembenote}%
+ \endgroup
+ \@mbenotemark\@mbenotetext }
+
+%% Here begins a section of mbenote code that's really different from
+%% the footnote code of LaTeX.
+
+\let\@doanmbenote=0
+\let\@endanmbenote=0
+
+\newwrite\@mbenotes
+\newif\if@mbenotesopen \global\@mbenotesopenfalse
+
+\def\@openmbenotes{\immediate\openout\@mbenotes=\jobname.mbe\relax
+ \global\@mbenotesopentrue}
+
+%% The stuff with \next and \meaning is a trick from the TeXbook, 382,
+%% there intended for setting verbatim text, but here used to avoid
+%% macro expansion when the footnote text is written. \next will have
+%% the entire text of the footnote as one long line, which might well
+%% overflow limits on output line length; the business with \newlinechar
+%% makes every space become a newline in the \@mbenotes file, so that all
+%% of the lines wind up being quite short.
+%%
+\long\def\@mbenotetext#1{%
+ \if@mbenotesopen \else \@openmbenotes \fi
+ \immediate\write\@mbenotes{\@doanmbenote{\@thembemark}}%
+ \begingroup
+ \def\next{#1}%
+ \newlinechar='40
+ \immediate\write\@mbenotes{\meaning\next}%
+ \endgroup
+ \immediate\write\@mbenotes{\@endanmbenote}}
+
+%% \addtombenotes works the way the other mbenote macros probably should
+%% have, requiring the use of \protect for fragile commands.
+
+\long\def\addtombenotes#1{%
+ \if@mbenotesopen \else \@openmbenotes \fi
+ \begingroup
+ \newlinechar='40
+ \let\protect\string
+ \immediate\write\@mbenotes{#1}%
+ \endgroup}
+
+%% End of unique mbenote code
+%%
+\def\mbenotemark{%
+ \@ifnextchar[\@xmbenotemark
+ {\stepcounter{mbenote}%
+ \protected@xdef\@thembemark{\thembenote}%
+ \@mbenotemark}}
+
+\def\@xmbenotemark[#1]{%
+ \begingroup
+ \c@mbenote #1\relax
+ \unrestored@protected@xdef\@thembemark{\thembenote}%
+ \endgroup
+ \@mbenotemark}
+
+\def\@mbenotemark{%
+ \leavevmode
+ \ifhmode\edef\@x@sf{\the\spacefactor}\nobreak\fi
+ \makembemark
+ \ifhmode\spacefactor\@x@sf\fi
+ \relax}
+
+\def\mbenotetext{
+ \@ifnextchar [\@xmbenotenext
+ {\protected@xdef\@thembemark{\thembenote}%
+ \@mbenotetext}}
+
+\def\@xmbenotenext[#1]{\begingroup \c@mbenote=#1\relax
+ \xdef\@thembemark{\thembenote}\endgroup \@mbenotetext}
+
+\def\@xmbenotenext[#1]{%
+ \begingroup
+ \c@mbenote=#1\relax
+ \unrestored@protected@xdef\@thembemark{\thembenote}%
+ \endgroup
+ \@mbenotetext}
+
+
+%% \thembenotes actually prints out the mbenotes.
+
+%% The user may want separate mbenotes for each chapter, or a big
+%% block of them at the end of the whole document. As it stands,
+%% either will work; you just say \thembenotes wherever you want the
+%% mbenotes so far to be inserted. The counter is always set to 0 %%
+%% \mbenoteformat is provided so user can specify some special formatting
+%% for the mbenotes. It needs to set up the paragraph parameters, start
+%% the paragraph, and print the label. The \mbox stuff in \mbenoteheading
+%% is to make and undo a dummbe paragraph, to get around the games \section*
+%% plays with paragraph indenting and instead give us uniform
+%% indenting for all notes.
+
+\def\mbenotesname{mbenotes}
+\def\mbenoteheading{\subsubsection*{\footnotesize{\mbenotesname} \@mkboth{\MakeUppercase{\mbenotesname}}{\MakeUppercase{\mbenotesname}}}
+ \mbox{ }\par\vskip-\baselineskip}
+
+\def\mbenoteformat{\rightskip\z@ \leftskip\z@ \parindent=1.8em
+ \leavevmode\llap{\makembemark}}
+
+\def\mbenotesize{\footnotesize}
+
+\def\thembenotes[#1]{\def\mbenotesname{#1}\immediate\closeout\@mbenotes \global\@mbenotesopenfalse
+ \begingroup
+ \makeatletter
+ %%
+ %% The machinery with \@ResetGT and > here ensures that
+ %% \@doanmbenote works properly even if > is an active character
+ %% at the point where \thembenotes is invoked. > needs to have
+ %% catcode 12 when the arguments of \@doanmbenote are scanned, so
+ %% that the > in the string "macro:->" is matched. The actual
+ %% footnote text is not an argument to \@doanmbenote, but just
+ %% follows it in the .mbe file; so \@ResetGT can reset the
+ %% category code for > that should be used when processing
+ %% that text. That resetting takes place within a
+ %% \begingroup-\endgroup block set up by \@doanmbenote and
+ %% \@endanmbenote, so the catcode for > is back to 12 for the
+ %% next note.
+ %
+ \edef\@tempa{`\string >}%
+ \ifnum\catcode\@tempa=12%
+ \let\@ResetGT\relax
+ \else
+ \edef\@ResetGT{\noexpand\catcode\@tempa=\the\catcode\@tempa}%
+ \@makeother\>%
+ \fi
+ \def\@doanmbenote##1##2>{\def\@thembemark{##1}\par\begingroup
+ \@ResetGT
+ \edef\@currentlabel{\csname p@mbenote\endcsname\@thembemark}%
+ \mbenoteformat}
+ \def\@endanmbenote{\par\endgroup}%
+ \mbenoteheading
+ \mbenotesize
+ \input{\jobname.mbe}%
+ \setcounter{mbenote}{0} \vspace{1.8em}
+ \endgroup}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% ****************************************
+% * tabNOTES
+% ****************************************
+%
+% Date of this version: 2012-9-21
+% Matthias Borck-Elsner
+%
+%% Based on endnotes.sty Copyright 2002 John Lavagnino
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.2
+%% of this license or (at your option) any later version.
+%% The lambe version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.2 or later is part of all distributions of LaTeX
+%% version 1999/12/01 or later.
+%%
+%% Uses an extra external file, with .tab extension, to hold the
+%% text of the tabnotes. This may be deleted after the run; a new
+%% version is generated each time--it doesn't require information
+%% collected from the previous run.
+%%
+%% This code does not obey \nofiles. Perhaps it should.
+%%
+%%
+%% To turn all the footnotes in your documents into tabnotes, say
+%%
+%% \let\footnote=\tabnote
+%%
+%% in your preamble, and then add something like
+%%
+%% \newpage
+%% \begingroup
+%% \parindent 0pt
+%% \parskip 2ex
+%% \def\tabnotesize{\normalsize}
+%% \thetabnotes
+%% \endgroup
+%%
+%% as the last thing in your document. (But \thetabnotes all
+%% by itself will work.)
+%%
+%% ****************************************
+%% * tabNOTE COMMANDS *
+%% ****************************************
+%%
+%%
+%% \tabnote{NOTE} : User command to insert a tabnote.
+%%
+%% \tabnote[NUM]{NOTE} : User command to insert a tabnote numbered
+%% NUM, where NUM is a number -- 1, 2,
+%% etc. For example, if tabnotes are numbered
+%% *, **, etc. within pages, then \tabnote[2]{...}
+%% produces tabnote '**'. This command does not
+%% step the tabnote counter.
+%%
+%% \tabnotemark[NUM] : Command to produce just the tabnote mark in
+%% the text, but no tabnote. With no argument,
+%% it steps the tabnote counter before generating
+%% the mark.
+%%
+%% \tabnotetext[NUM]{TEXT} : Command to produce the tabnote but no
+%% mark. \tabnote is equivalent to
+%% \tabnotemark \tabnotetext .
+%%
+%% \addtotabnotes{TEXT} : Command to add text or commands to current
+%% tabnotes file: for inserting headings,
+%% pagebreaks, and the like into tabnotes
+%% sections. TEXT a moving argument:
+%% \protect required for fragile commands.
+%%
+%% ****************************************
+%% * tabNOTE USER COMMANDS *
+%% ****************************************
+%%
+%% tabnotes use the following parameters, similar to those relating
+%% to footnotes:
+%%
+%% \tabnotesize : Size-changing command for tabnotes.
+%%
+%% \thetabnote : In usual LaTeX style, produces the tabnote number.
+%%
+%% \thetabmark : Holds the current tabnote's mark--e.g., \dag or '1' or 'a'.
+%% (You don't want to set this yourself, as it comes
+%% either from the autonumbering of notes or from
+%% the optional argument to \tabnote. But you'll need
+%% to use it if you define your own \maketabmark.)
+%%
+%% \maketabmark : A macro to generate the tabnote marker from \thetabmark
+%% The default definition is \hbox{$^\thetabmark$}.
+%%
+%% \@maketabtext{NOTE} :
+%% Must produce the actual tabnote, using \thetabmark as the mark
+%% of the tabnote and NOTE as the text. It is called when effectively
+%% inside a \parbox, with \hsize = \columnwidth. For example, it might
+%% be as simple as
+%% $^{\thetabmark}$ NOTE
+%%
+%%
+%% ****************************************
+%% * tabNOTE MACROS *
+%% ****************************************
+%%
+%%
+\ProvidesPackage{mbenotes}[2012/09/21 (Version 2) Notes for Text,tables,images and equations ]\RequirePackage{graphicx,xcolor}\@definecounter{tabnote}
+\def\thetabnote{\@arabic\c@tabnote}
+
+\def\@maketabmark{\hbox{\@textsuperscript{{\tiny\@thetabmark}}}}
+\def\maketabmark{\@maketabmark}
+
+\def\thetabmark{\@thetabmark}
+
+\newdimen\tabnotesep
+
+\def\tabnote{\@ifnextchar[\@xtabnote{\stepcounter{tabnote}%
+ \protected@xdef\@thetabmark{\thetabnote}%
+ \@tabnotemark\@tabnotetext}}
+
+\def\@xtabnote[#1]{
+ \begingroup
+ \c@tabnote=#1\relax
+ \unrestored@protected@xdef\@thetabmark{\thetabnote}%
+ \endgroup
+ \@tabnotemark\@tabnotetext }
+
+%% Here begins a section of tabnote code that's really different from
+%% the footnote code of LaTeX.
+
+\let\@doantabnote=0
+\let\@endantabnote=0
+
+\newwrite\@tabnotes
+\newif\if@tabnotesopen \global\@tabnotesopenfalse
+
+\def\@opentabnotes{\immediate\openout\@tabnotes=\jobname.tab\relax
+ \global\@tabnotesopentrue}
+
+%% The stuff with \next and \meaning is a trick from the TeXbook, 382,
+%% there intended for setting verbatim text, but here used to avoid
+%% macro expansion when the footnote text is written. \next will have
+%% the entire text of the footnote as one long line, which might well
+%% overflow limits on output line length; the business with \newlinechar
+%% makes every space become a newline in the \@tabnotes file, so that all
+%% of the lines wind up being quite short.
+%%
+\long\def\@tabnotetext#1{%
+ \if@tabnotesopen \else \@opentabnotes \fi
+ \immediate\write\@tabnotes{\@doantabnote{\@thetabmark}}%
+ \begingroup
+ \def\next{#1}%
+ \newlinechar='40
+ \immediate\write\@tabnotes{\meaning\next}%
+ \endgroup
+ \immediate\write\@tabnotes{\@endantabnote}}
+
+%% \addtotabnotes works the way the other tabnote macros probably should
+%% have, requiring the use of \protect for fragile commands.
+
+\long\def\addtotabnotes#1{%
+ \if@tabnotesopen \else \@opentabnotes \fi
+ \begingroup
+ \newlinechar='40
+ \let\protect\string
+ \immediate\write\@tabnotes{#1}%
+ \endgroup}
+
+%% End of unique tabnote code
+%%
+\def\tabnotemark{%
+ \@ifnextchar[\@xtabnotemark
+ {\stepcounter{tabnote}%
+ \protected@xdef\@thetabmark{\thetabnote}%
+ \@tabnotemark}}
+
+\def\@xtabnotemark[#1]{%
+ \begingroup
+ \c@tabnote #1\relax
+ \unrestored@protected@xdef\@thetabmark{\thetabnote}%
+ \endgroup
+ \@tabnotemark}
+
+\def\@tabnotemark{%
+ \leavevmode
+ \ifhmode\edef\@x@sf{\the\spacefactor}\nobreak\fi
+ \maketabmark
+ \ifhmode\spacefactor\@x@sf\fi
+ \relax}
+
+\def\tabnotetext{
+ \@ifnextchar [\@xtabnotenext
+ {\protected@xdef\@thetabmark{\thetabnote}%
+ \@tabnotetext}}
+
+\def\@xtabnotenext[#1]{\begingroup \c@tabnote=#1\relax
+ \xdef\@thetabmark{\thetabnote}\endgroup \@tabnotetext}
+
+\def\@xtabnotenext[#1]{%
+ \begingroup
+ \c@tabnote=#1\relax
+ \unrestored@protected@xdef\@thetabmark{\thetabnote}%
+ \endgroup
+ \@tabnotetext}
+
+
+%% \thetabnotes actually prints out the tabnotes.
+
+%% The user may want separate tabnotes for each chapter, or a big
+%% block of them at the end of the whole document. As it stands,
+%% either will work; you just say \thetabnotes wherever you want the
+%% tabnotes so far to be inserted. The counter is always set to 0 %%
+%% \tabnoteformat is provided so user can specify some special formatting
+%% for the tabnotes. It needs to set up the paragraph parameters, start
+%% the paragraph, and print the label. The \mbox stuff in \tabnoteheading
+%% is to make and undo a dummbe paragraph, to get around the games \section*
+%% plays with paragraph indenting and instead give us uniform
+%% indenting for all notes.
+
+\def\tabnotesname{tabnotes}
+\def\tabnoteheading{\subsubsection*{\footnotesize{\tabnotesname} \@mkboth{\MakeUppercase{\tabnotesname}}{\MakeUppercase{\tabnotesname}}}
+ \mbox{ }\par\vskip-\baselineskip}
+
+\def\tabnoteformat{\rightskip\z@ \leftskip\z@ \parindent=1.8em
+ \leavevmode\llap{\maketabmark}}
+
+\def\tabnotesize{\footnotesize}
+
+\def\thetabnotes[#1]{\def\tabnotesname{#1}\immediate\closeout\@tabnotes \global\@tabnotesopenfalse
+ \begingroup
+ \makeatletter
+ %%
+ %% The machinery with \@ResetGT and > here ensures that
+ %% \@doantabnote works properly even if > is an active character
+ %% at the point where \thetabnotes is invoked. > needs to have
+ %% catcode 12 when the arguments of \@doantabnote are scanned, so
+ %% that the > in the string "macro:->" is matched. The actual
+ %% footnote text is not an argument to \@doantabnote, but just
+ %% follows it in the .tab file; so \@ResetGT can reset the
+ %% category code for > that should be used when processing
+ %% that text. That resetting takes place within a
+ %% \begingroup-\endgroup block set up by \@doantabnote and
+ %% \@endantabnote, so the catcode for > is back to 12 for the
+ %% next note.
+ %
+ \edef\@tempa{`\string >}%
+ \ifnum\catcode\@tempa=12%
+ \let\@ResetGT\relax
+ \else
+ \edef\@ResetGT{\noexpand\catcode\@tempa=\the\catcode\@tempa}%
+ \@makeother\>%
+ \fi
+ \def\@doantabnote##1##2>{\def\@thetabmark{##1}\par\begingroup
+ \@ResetGT
+ \edef\@currentlabel{\csname p@tabnote\endcsname\@thetabmark}%
+ \tabnoteformat}
+ \def\@endantabnote{\par\endgroup}%
+ \tabnoteheading
+ \tabnotesize
+ \input{\jobname.tab}%
+ \setcounter{tabnote}{0} \vspace{1.8em}
+ \endgroup}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% ****************************************
+% * imgNOTES
+% ****************************************
+%
+% Date of this version: 2012-9-21
+% Matthias Borck-Elsner
+%
+%% Based on endnotes.sty Copyright 2002 John Lavagnino
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.2
+%% of this license or (at your option) any later version.
+%% The lambe version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.2 or later is part of all distributions of LaTeX
+%% version 1999/12/01 or later.
+%%
+%% Uses an extra external file, with .img extension, to hold the
+%% text of the imgnotes. This may be deleted after the run; a new
+%% version is generated each time--it doesn't require information
+%% collected from the previous run.
+%%
+%% This code does not obey \nofiles. Perhaps it should.
+%%
+%%
+%% To turn all the footnotes in your documents into imgnotes, say
+%%
+%% \let\footnote=\imgnote
+%%
+%% in your preamble, and then add something like
+%%
+%% \newpage
+%% \begingroup
+%% \parindent 0pt
+%% \parskip 2ex
+%% \def\imgnotesize{\normalsize}
+%% \theimgnotes
+%% \endgroup
+%%
+%% as the last thing in your document. (But \theimgnotes all
+%% by itself will work.)
+%%
+%% ****************************************
+%% * imgNOTE COMMANDS *
+%% ****************************************
+%%
+%%
+%% \imgnote{NOTE} : User command to insert a imgnote.
+%%
+%% \imgnote[NUM]{NOTE} : User command to insert a imgnote numbered
+%% NUM, where NUM is a number -- 1, 2,
+%% etc. For example, if imgnotes are numbered
+%% *, **, etc. within pages, then \imgnote[2]{...}
+%% produces imgnote '**'. This command does not
+%% step the imgnote counter.
+%%
+%% \imgnotemark[NUM] : Command to produce just the imgnote mark in
+%% the text, but no imgnote. With no argument,
+%% it steps the imgnote counter before generating
+%% the mark.
+%%
+%% \imgnotetext[NUM]{TEXT} : Command to produce the imgnote but no
+%% mark. \imgnote is equivalent to
+%% \imgnotemark \imgnotetext .
+%%
+%% \addtoimgnotes{TEXT} : Command to add text or commands to current
+%% imgnotes file: for inserting headings,
+%% pagebreaks, and the like into imgnotes
+%% sections. TEXT a moving argument:
+%% \protect required for fragile commands.
+%%
+%% ****************************************
+%% * imgNOTE USER COMMANDS *
+%% ****************************************
+%%
+%% imgnotes use the following parameters, similar to those relating
+%% to footnotes:
+%%
+%% \imgnotesize : Size-changing command for imgnotes.
+%%
+%% \theimgnote : In usual LaTeX style, produces the imgnote number.
+%%
+%% \theimgmark : Holds the current imgnote's mark--e.g., \dag or '1' or 'a'.
+%% (You don't want to set this yourself, as it comes
+%% either from the autonumbering of notes or from
+%% the optional argument to \imgnote. But you'll need
+%% to use it if you define your own \makeimgmark.)
+%%
+%% \makeimgmark : A macro to generate the imgnote marker from \theimgmark
+%% The default definition is \hbox{$^\theimgmark$}.
+%%
+%% \@makeimgtext{NOTE} :
+%% Must produce the actual imgnote, using \theimgmark as the mark
+%% of the imgnote and NOTE as the text. It is called when effectively
+%% inside a \parbox, with \hsize = \columnwidth. For example, it might
+%% be as simple as
+%% $^{\theimgmark}$ NOTE
+%%
+%%
+%% ****************************************
+%% * imgNOTE MACROS *
+%% ****************************************
+%%
+%%
+\ProvidesPackage{mbenotes}[2012/09/21 (Version 2) Notes for Text,tables,images and equations ]\RequirePackage{graphicx,xcolor}\@definecounter{imgnote}
+\def\theimgnote{\@arabic\c@imgnote}
+
+\def\@makeimgmark{\hbox{\@textsuperscript{{\tiny\@theimgmark}}}}
+\def\makeimgmark{\@makeimgmark}
+
+\def\theimgmark{\@theimgmark}
+
+\newdimen\imgnotesep
+
+\def\imgnote{\@ifnextchar[\@ximgnote{\stepcounter{imgnote}%
+ \protected@xdef\@theimgmark{\theimgnote}%
+ \@imgnotemark\@imgnotetext}}
+
+\def\@ximgnote[#1]{
+ \begingroup
+ \c@imgnote=#1\relax
+ \unrestored@protected@xdef\@theimgmark{\theimgnote}%
+ \endgroup
+ \@imgnotemark\@imgnotetext }
+
+%% Here begins a section of imgnote code that's really different from
+%% the footnote code of LaTeX.
+
+\let\@doanimgnote=0
+\let\@endanimgnote=0
+
+\newwrite\@imgnotes
+\newif\if@imgnotesopen \global\@imgnotesopenfalse
+
+\def\@openimgnotes{\immediate\openout\@imgnotes=\jobname.img\relax
+ \global\@imgnotesopentrue}
+
+%% The stuff with \next and \meaning is a trick from the TeXbook, 382,
+%% there intended for setting verbatim text, but here used to avoid
+%% macro expansion when the footnote text is written. \next will have
+%% the entire text of the footnote as one long line, which might well
+%% overflow limits on output line length; the business with \newlinechar
+%% makes every space become a newline in the \@imgnotes file, so that all
+%% of the lines wind up being quite short.
+%%
+\long\def\@imgnotetext#1{%
+ \if@imgnotesopen \else \@openimgnotes \fi
+ \immediate\write\@imgnotes{\@doanimgnote{\@theimgmark}}%
+ \begingroup
+ \def\next{#1}%
+ \newlinechar='40
+ \immediate\write\@imgnotes{\meaning\next}%
+ \endgroup
+ \immediate\write\@imgnotes{\@endanimgnote}}
+
+%% \addtoimgnotes works the way the other imgnote macros probably should
+%% have, requiring the use of \protect for fragile commands.
+
+\long\def\addtoimgnotes#1{%
+ \if@imgnotesopen \else \@openimgnotes \fi
+ \begingroup
+ \newlinechar='40
+ \let\protect\string
+ \immediate\write\@imgnotes{#1}%
+ \endgroup}
+
+%% End of unique imgnote code
+%%
+\def\imgnotemark{%
+ \@ifnextchar[\@ximgnotemark
+ {\stepcounter{imgnote}%
+ \protected@xdef\@theimgmark{\theimgnote}%
+ \@imgnotemark}}
+
+\def\@ximgnotemark[#1]{%
+ \begingroup
+ \c@imgnote #1\relax
+ \unrestored@protected@xdef\@theimgmark{\theimgnote}%
+ \endgroup
+ \@imgnotemark}
+
+\def\@imgnotemark{%
+ \leavevmode
+ \ifhmode\edef\@x@sf{\the\spacefactor}\nobreak\fi
+ \makeimgmark
+ \ifhmode\spacefactor\@x@sf\fi
+ \relax}
+
+\def\imgnotetext{
+ \@ifnextchar [\@ximgnotenext
+ {\protected@xdef\@theimgmark{\theimgnote}%
+ \@imgnotetext}}
+
+\def\@ximgnotenext[#1]{\begingroup \c@imgnote=#1\relax
+ \xdef\@theimgmark{\theimgnote}\endgroup \@imgnotetext}
+
+\def\@ximgnotenext[#1]{%
+ \begingroup
+ \c@imgnote=#1\relax
+ \unrestored@protected@xdef\@theimgmark{\theimgnote}%
+ \endgroup
+ \@imgnotetext}
+
+
+%% \theimgnotes actually prints out the imgnotes.
+
+%% The user may want separate imgnotes for each chapter, or a big
+%% block of them at the end of the whole document. As it stands,
+%% either will work; you just say \theimgnotes wherever you want the
+%% imgnotes so far to be inserted. The counter is always set to 0 %%
+%% \imgnoteformat is provided so user can specify some special formatting
+%% for the imgnotes. It needs to set up the paragraph parameters, start
+%% the paragraph, and print the label. The \mbox stuff in \imgnoteheading
+%% is to make and undo a dummbe paragraph, to get around the games \section*
+%% plays with paragraph indenting and instead give us uniform
+%% indenting for all notes.
+
+\def\imgnotesname{imgnotes}
+\def\imgnoteheading{\subsubsection*{\footnotesize{\imgnotesname} \@mkboth{\MakeUppercase{\imgnotesname}}{\MakeUppercase{\imgnotesname}}}
+ \mbox{ }\par\vskip-\baselineskip}
+
+\def\imgnoteformat{\rightskip\z@ \leftskip\z@ \parindent=1.8em
+ \leavevmode\llap{\makeimgmark}}
+
+\def\imgnotesize{\footnotesize}
+
+\def\theimgnotes[#1]{\def\imgnotesname{#1}\immediate\closeout\@imgnotes \global\@imgnotesopenfalse
+ \begingroup
+ \makeatletter
+ %%
+ %% The machinery with \@ResetGT and > here ensures that
+ %% \@doanimgnote works properly even if > is an active character
+ %% at the point where \theimgnotes is invoked. > needs to have
+ %% catcode 12 when the arguments of \@doanimgnote are scanned, so
+ %% that the > in the string "macro:->" is matched. The actual
+ %% footnote text is not an argument to \@doanimgnote, but just
+ %% follows it in the .img file; so \@ResetGT can reset the
+ %% category code for > that should be used when processing
+ %% that text. That resetting takes place within a
+ %% \begingroup-\endgroup block set up by \@doanimgnote and
+ %% \@endanimgnote, so the catcode for > is back to 12 for the
+ %% next note.
+ %
+ \edef\@tempa{`\string >}%
+ \ifnum\catcode\@tempa=12%
+ \let\@ResetGT\relax
+ \else
+ \edef\@ResetGT{\noexpand\catcode\@tempa=\the\catcode\@tempa}%
+ \@makeother\>%
+ \fi
+ \def\@doanimgnote##1##2>{\def\@theimgmark{##1}\par\begingroup
+ \@ResetGT
+ \edef\@currentlabel{\csname p@imgnote\endcsname\@theimgmark}%
+ \imgnoteformat}
+ \def\@endanimgnote{\par\endgroup}%
+ \imgnoteheading
+ \imgnotesize
+ \input{\jobname.img}%
+ \setcounter{imgnote}{0} \vspace{1.8em}
+ \endgroup}
+ \newlength\imgheight{} \newlength\imgwidth{} \def\imgsize#1#2{\imgwidth=#1 \imgheight#2 }
+\def\putimgnote#1#2#3{\put(#1\imgwidth,#2\imgheight){\imgnote{#3 }}}\def\ruler#1#2{\begin{picture}(0,0)(#1,#2)\begin{tiny}
+%%horizontal
+\put(0\imgwidth,0){\rotatebox{270}{ -0.00}}
+\put(-0.10\imgwidth,0){\rotatebox{270}{ -0.10}}
+\put(-0.20\imgwidth,0){\rotatebox{270}{ -0.20}}
+\put(-0.30\imgwidth,0){\rotatebox{270}{ -0.30}}
+\put(-0.40\imgwidth,0){\rotatebox{270}{ -0.40}}
+\put(-0.50\imgwidth,0){\rotatebox{270}{ -0.50}}
+\put(-0.60\imgwidth,0){\rotatebox{270}{ -0.60}}
+\put(-0.70\imgwidth,0){\rotatebox{270}{ -0.70}}
+\put(-0.80\imgwidth,0){\rotatebox{270}{ -0.80}}
+\put(-0.90\imgwidth,0){\rotatebox{270}{ -0.90}}
+\put(-1.00\imgwidth,0){\rotatebox{270}{ -1.00}}
+%%vertical
+\put(0,0\imgheight){{\rotatebox{0}{+0.0}}}
+\put(0,0.10\imgheight){{\rotatebox{0}{+0.10}}}
+\put(0,0.20\imgheight){{\rotatebox{0}{+0.20}}}
+\put(0,0.30\imgheight){{\rotatebox{0}{+0.30}}}
+\put(0,0.40\imgheight){{\rotatebox{0}{+0.40}}}
+\put(0,0.50\imgheight){{\rotatebox{0}{+0.50}}}
+\put(0,0.60\imgheight){{\rotatebox{0}{+0.60}}}
+\put(0,0.70\imgheight){{\rotatebox{0}{+0.70}}}
+\put(0,0.80\imgheight){{\rotatebox{0}{+0.80}}}
+\put(0,0.90\imgheight){{\rotatebox{0}{+0.90}}}
+\put(0,1.00\imgheight){{\rotatebox{0}{+1.00}}}
+\end{tiny} \end{picture}}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% ****************************************
+% * mathNOTES
+% ****************************************
+%
+% Date of this version: 2012-9-21
+% Matthias Borck-Elsner
+%
+%% Based on endnotes.sty Copyright 2002 John Lavagnino
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.2
+%% of this license or (at your option) any later version.
+%% The lambe version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.2 or later is part of all distributions of LaTeX
+%% version 1999/12/01 or later.
+%%
+%% Uses an extra external file, with .math extension, to hold the
+%% text of the mathnotes. This may be deleted after the run; a new
+%% version is generated each time--it doesn't require information
+%% collected from the previous run.
+%%
+%% This code does not obey \nofiles. Perhaps it should.
+%%
+%%
+%% To turn all the footnotes in your documents into mathnotes, say
+%%
+%% \let\footnote=\mathnote
+%%
+%% in your preamble, and then add something like
+%%
+%% \newpage
+%% \begingroup
+%% \parindent 0pt
+%% \parskip 2ex
+%% \def\mathnotesize{\normalsize}
+%% \themathnotes
+%% \endgroup
+%%
+%% as the last thing in your document. (But \themathnotes all
+%% by itself will work.)
+%%
+%% ****************************************
+%% * mathNOTE COMMANDS *
+%% ****************************************
+%%
+%%
+%% \mathnote{NOTE} : User command to insert a mathnote.
+%%
+%% \mathnote[NUM]{NOTE} : User command to insert a mathnote numbered
+%% NUM, where NUM is a number -- 1, 2,
+%% etc. For example, if mathnotes are numbered
+%% *, **, etc. within pages, then \mathnote[2]{...}
+%% produces mathnote '**'. This command does not
+%% step the mathnote counter.
+%%
+%% \mathnotemark[NUM] : Command to produce just the mathnote mark in
+%% the text, but no mathnote. With no argument,
+%% it steps the mathnote counter before generating
+%% the mark.
+%%
+%% \mathnotetext[NUM]{TEXT} : Command to produce the mathnote but no
+%% mark. \mathnote is equivalent to
+%% \mathnotemark \mathnotetext .
+%%
+%% \addtomathnotes{TEXT} : Command to add text or commands to current
+%% mathnotes file: for inserting headings,
+%% pagebreaks, and the like into mathnotes
+%% sections. TEXT a moving argument:
+%% \protect required for fragile commands.
+%%
+%% ****************************************
+%% * mathNOTE USER COMMANDS *
+%% ****************************************
+%%
+%% mathnotes use the following parameters, similar to those relating
+%% to footnotes:
+%%
+%% \mathnotesize : Size-changing command for mathnotes.
+%%
+%% \themathnote : In usual LaTeX style, produces the mathnote number.
+%%
+%% \themathmark : Holds the current mathnote's mark--e.g., \dag or '1' or 'a'.
+%% (You don't want to set this yourself, as it comes
+%% either from the autonumbering of notes or from
+%% the optional argument to \mathnote. But you'll need
+%% to use it if you define your own \makemathmark.)
+%%
+%% \makemathmark : A macro to generate the mathnote marker from \themathmark
+%% The default definition is \hbox{$^\themathmark$}.
+%%
+%% \@makemathtext{NOTE} :
+%% Must produce the actual mathnote, using \themathmark as the mark
+%% of the mathnote and NOTE as the text. It is called when effectively
+%% inside a \parbox, with \hsize = \columnwidth. For example, it might
+%% be as simple as
+%% $^{\themathmark}$ NOTE
+%%
+%%
+%% ****************************************
+%% * mathNOTE MACROS *
+%% ****************************************
+%%
+%%
+\ProvidesPackage{mbenotes}[2012/09/21 (Version 2) Notes for Text,tables,images and equations ]\RequirePackage{graphicx,xcolor}\@definecounter{mathnote}
+\def\themathnote{\@arabic\c@mathnote}
+
+\def\@makemathmark{\hbox{\@textsuperscript{ \textcolor{red}{\tiny(\@themathmark)}}}}
+\def\makemathmark{\@makemathmark}
+
+\def\themathmark{\@themathmark}
+
+\newdimen\mathnotesep
+
+\def\mathnote{\@ifnextchar[\@xmathnote{\stepcounter{mathnote}%
+ \protected@xdef\@themathmark{\themathnote}%
+ \@mathnotemark\@mathnotetext}}
+
+\def\@xmathnote[#1]{
+ \begingroup
+ \c@mathnote=#1\relax
+ \unrestored@protected@xdef\@themathmark{\themathnote}%
+ \endgroup
+ \@mathnotemark\@mathnotetext }
+
+%% Here begins a section of mathnote code that's really different from
+%% the footnote code of LaTeX.
+
+\let\@doanmathnote=0
+\let\@endanmathnote=0
+
+\newwrite\@mathnotes
+\newif\if@mathnotesopen \global\@mathnotesopenfalse
+
+\def\@openmathnotes{\immediate\openout\@mathnotes=\jobname.math\relax
+ \global\@mathnotesopentrue}
+
+%% The stuff with \next and \meaning is a trick from the TeXbook, 382,
+%% there intended for setting verbatim text, but here used to avoid
+%% macro expansion when the footnote text is written. \next will have
+%% the entire text of the footnote as one long line, which might well
+%% overflow limits on output line length; the business with \newlinechar
+%% makes every space become a newline in the \@mathnotes file, so that all
+%% of the lines wind up being quite short.
+%%
+\long\def\@mathnotetext#1{%
+ \ifmeasuring@%
+ \else%
+\if@mathnotesopen \else \@openmathnotes \fi%
+ \immediate\write\@mathnotes{\@doanmathnote{\@themathmark}}%
+ \begingroup \def\next{#1}%
+\newlinechar='40 \immediate\write\@mathnotes{\meaning\next}%
+ \endgroup \immediate\write\@mathnotes{\@endanmathnote}%
+ \fi}%% \addtomathnotes works the way the other mathnote macros probably should
+%% have, requiring the use of \protect for fragile commands.
+
+\long\def\addtomathnotes#1{%
+ \if@mathnotesopen \else \@openmathnotes \fi
+ \begingroup
+ \newlinechar='40
+ \let\protect\string
+ \immediate\write\@mathnotes{#1}%
+ \endgroup}
+
+%% End of unique mathnote code
+%%
+\def\mathnotemark{%
+ \@ifnextchar[\@xmathnotemark
+ {\stepcounter{mathnote}%
+ \protected@xdef\@themathmark{\themathnote}%
+ \@mathnotemark}}
+
+\def\@xmathnotemark[#1]{%
+ \begingroup
+ \c@mathnote #1\relax
+ \unrestored@protected@xdef\@themathmark{\themathnote}%
+ \endgroup
+ \@mathnotemark}
+
+\def\@mathnotemark{%
+ \leavevmode
+ \ifhmode\edef\@x@sf{\the\spacefactor}\nobreak\fi
+ \makemathmark
+ \ifhmode\spacefactor\@x@sf\fi
+ \relax}
+
+\def\mathnotetext{
+ \@ifnextchar [\@xmathnotenext
+ {\protected@xdef\@themathmark{\themathnote}%
+ \@mathnotetext}}
+
+\def\@xmathnotenext[#1]{\begingroup \c@mathnote=#1\relax
+ \xdef\@themathmark{\themathnote}\endgroup \@mathnotetext}
+
+\def\@xmathnotenext[#1]{%
+ \begingroup
+ \c@mathnote=#1\relax
+ \unrestored@protected@xdef\@themathmark{\themathnote}%
+ \endgroup
+ \@mathnotetext}
+
+
+%% \themathnotes actually prints out the mathnotes.
+
+%% The user may want separate mathnotes for each chapter, or a big
+%% block of them at the end of the whole document. As it stands,
+%% either will work; you just say \themathnotes wherever you want the
+%% mathnotes so far to be inserted. The counter is always set to 0 %%
+%% \mathnoteformat is provided so user can specify some special formatting
+%% for the mathnotes. It needs to set up the paragraph parameters, start
+%% the paragraph, and print the label. The \mbox stuff in \mathnoteheading
+%% is to make and undo a dummbe paragraph, to get around the games \section*
+%% plays with paragraph indenting and instead give us uniform
+%% indenting for all notes.
+
+\def\mathnotesname{mathnotes}
+\def\mathnoteheading{\subsubsection*{\footnotesize{\mathnotesname} \@mkboth{\MakeUppercase{\mathnotesname}}{\MakeUppercase{\mathnotesname}}}
+ \mbox{ }\par\vskip-\baselineskip}
+
+\def\mathnoteformat{\rightskip\z@ \leftskip\z@ \parindent=1.8em
+ \leavevmode\llap{\makemathmark}}
+
+\def\mathnotesize{\footnotesize}
+
+\def\themathnotes[#1]{\def\mathnotesname{#1}\immediate\closeout\@mathnotes \global\@mathnotesopenfalse
+ \begingroup
+ \makeatletter
+ %%
+ %% The machinery with \@ResetGT and > here ensures that
+ %% \@doanmathnote works properly even if > is an active character
+ %% at the point where \themathnotes is invoked. > needs to have
+ %% catcode 12 when the arguments of \@doanmathnote are scanned, so
+ %% that the > in the string "macro:->" is matched. The actual
+ %% footnote text is not an argument to \@doanmathnote, but just
+ %% follows it in the .math file; so \@ResetGT can reset the
+ %% category code for > that should be used when processing
+ %% that text. That resetting takes place within a
+ %% \begingroup-\endgroup block set up by \@doanmathnote and
+ %% \@endanmathnote, so the catcode for > is back to 12 for the
+ %% next note.
+ %
+ \edef\@tempa{`\string >}%
+ \ifnum\catcode\@tempa=12%
+ \let\@ResetGT\relax
+ \else
+ \edef\@ResetGT{\noexpand\catcode\@tempa=\the\catcode\@tempa}%
+ \@makeother\>%
+ \fi
+ \def\@doanmathnote##1##2>{\def\@themathmark{##1}\par\begingroup
+ \@ResetGT
+ \edef\@currentlabel{\csname p@mathnote\endcsname\@themathmark}%
+ \mathnoteformat}
+ \def\@endanmathnote{\par\endgroup}%
+ \mathnoteheading
+ \mathnotesize
+ \input{\jobname.math}%
+ \setcounter{mathnote}{0} \vspace{1.8em}
+ \endgroup}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/obsolete/macros/latex/contrib/mbenotes/mbenotes.tex b/obsolete/macros/latex/contrib/mbenotes/mbenotes.tex
new file mode 100644
index 0000000000..726e8cf547
--- /dev/null
+++ b/obsolete/macros/latex/contrib/mbenotes/mbenotes.tex
@@ -0,0 +1 @@
+\documentclass[a4paper,10pt]{article}\usepackage{array,mbenotes,endnotes,longtable,color,graphicx,picture,amsmath}\usepackage[utf8]{inputenc}\title{mbenotes}\author{Matthias Borck-Elsner}\begin{document} \maketitle \begin{longtable}{p{5cm}p{7cm}} Name of contribution:& mbenotes \\ Version & 2 2013-10-1 \\ Author's name:& Matthias Borck-Elsner \\ Author's email:& matthias at kleinesnetzwerk.net \\ Location on CTAN:& http://mirror.ctan.org/ macros/ latex/ contrib/mbenotes/ mbenotes.sty \\ Summary description:& Flexible notes in texts, tables and images, like footnotes and endnotes. \\ License type:& lppl \\ Announcement text:& sty file to place notes into text, tables, equations and images and list them. \\ & For every purpose a note command is defined: mbenote, tab.., math., img... \\ & New commands are defined: \textbackslash ruler \textbackslash imgwidth and \textbackslash imgheight\\ & The endnotes still work! \\ &mbenotes is based on endnotes.sty Copyright 2002 John Lavagnino. \\ \end{longtable} \section{mbenotes}The mbenotes are similar to endnotes, you put a \textbackslash mbenote\{textofmbenote\} \mbenote{textofmbenote} into your text, a mark is displayed and by calling \textbackslash thembenotes[mbenotes] the notes are listed. All notes up to this point will be listed \mbenote{textof2mbenote} \thembenotes[mbenotes] Next call will list the following notes up to the second call, if no new note is set, the last known note will be repeated.\mbenote{textof3mbenote} As you can see, the name of the notes is optional \mbenote{, you may leave it empty} and formatted as a subsubsection \thembenotes[optional]. \section{tabnotes}\begin{longtable}{p{6cm}p{6cm}} \caption{newtable} \\ \textbackslash tabnote\{tabnotetext\} is used in the same way, they can be set into tables \tabnote{This is a longtable} and texts and are called by \textbackslash thetabnotes[tabnotes] \thetabnotes[column1]& The difference\tabnote{difference} is, that \textbackslash thetabnotes\lbrack \rbrack, if called inside the table, displays the notes up to that point, if you do not call the notes in columns or the table, you might call them at the end of the table, under the table or at end document. \thetabnotes[column2]\end{longtable} \begin{longtable}{|p{6cm}|p{6cm}|} \caption{outside} \\ \hline \newline In this example, the notes are called after the table and outside \tabnote{outside}& \newline of the environment. If you like, you may \tabnote{put your notes under the table} and impress someone.\\ \hline \end{longtable}\thetabnotes[outside] \section{imgnotes} You might want to put notes into images with some help of a ruler... \\ \\ \imgsize{3cm}{3cm} \includegraphics[width=\imgwidth,height=\imgheight]{mbe} \ruler{-0}{0} \putimgnote{-0.50}{0.5}{Hot air balloon} \putimgnote{-1}{1}{There's something special \dots}\theimgnotes[imgnotes] Use \textbackslash putimgnote\{-1\}\{+1\}\{There's something special \dots\} or any value you take from the ruler. The ruler takes its values from \textbackslash imgsize, therefore it has to be called right after the image. If not called, the ruler will not be displayed. \section{mathnote}You might even put notes into equations\dots notes in equations are colored red . \\\begin{equation}42\mathnote{The answer,for now}=\sqrt{mc\textsuperscript{2}} \end{equation} \themathnotes[] \section{Why this was called "tablenotes" at first}When I first was involved, the question was, how to set notes into tables \textbf{and} to display them as tables. \begin{longtable} {|p{4cm}|p{4cm}|} \caption{tablenotes} \\ This is a tabnote \tabnote{This is a tabnote} \thetabnotes[]& This is a tabnote\tabnote{This is a tabnote} \thetabnotes[] \\ \end{longtable} The namings and functions collided with the threeparttable package, so I decided to rename my package "mbenotes"\endnote{Thanks to John Lavagnino \dots to be continued \dots } \theendnotes\end{document} \ No newline at end of file
diff --git a/obsolete/macros/latex/contrib/misc/askinclude.sty b/obsolete/macros/latex/contrib/misc/askinclude.sty
new file mode 100644
index 0000000000..c4a6ffb617
--- /dev/null
+++ b/obsolete/macros/latex/contrib/misc/askinclude.sty
@@ -0,0 +1,103 @@
+% askinclude.sty - interactive asking of included files
+%
+% VERSION 1.2e November 11, 1994
+%
+% (c) 1991 by Pablo A. Straub. Permission is granted to copy and use this
+% in any way and for any purpose, except direct commercial advantage,
+% provided that you retain this copyright notice.
+%
+% HISTORY
+%
+% 0.95 11/05/91 First beta-test version (asked two questions)
+% 0.99 11/05/91 Second beta-test version (asks one question; uses * and -.)
+% 1.0 11/07/91 Changed prompts (sent to comp.text.tex)
+% 1.2e 11/02/94 Two small changes to run under LaTeX2e [RF];
+% additional documentation [TRS]
+%
+% Please send enhancements and corrections to straub@cs.umd.edu.
+%
+% USAGE
+%
+% Here's an example root file (see pp.72--74 in the LaTeX book):
+%
+% % File: main.tex
+% %
+% \documentclass[...]{book}
+% \usepackage{askinclude}
+% % ^^^^^^^^^^
+% % Initialization:
+% \input{preamble}
+% %
+% \begin{document}
+% %
+% % Title page:
+% \include{titlepg}
+% %
+% % Chapters:
+% \include{chapter0}
+% \include{chapter1}
+% \include{chapter2}
+% ...
+% %
+% \end{document}
+%
+% Each \include causes a page break and so askinclude probably only makes
+% sense in the context of larger documents such as books.
+%
+% HOW IT WORKS
+%
+% The askinclude package asks the user which files to include. If
+% the user presses return, the files from the previous run are included
+% automatically (except on the first run, in which case all files are
+% included); if the answer is * all files are included; if the answer
+% is - no files are included; otherwise the specified files (separated
+% by commas, with no embedded spaces) are included.
+%
+% RESTRICTIONS
+%
+% This file redefines \document, the command executed with \begin{document}.
+% It may be incompatible with other styles that also redefine \document.
+%
+% The user's input is not validated. Anything that is not a * or a - or an
+% empty line is passed to \includeonly.
+%
+% ACKNOWLEDGEMENT
+%
+% Tom Scavo (scavo@cie.uoregon.edu) suggested saving the include file list
+% from the previous run and a simplified user interface.
+
+
+\def\@includeonly{\@gobble} % assume we do not include from last run
+\def\@inputs{*} % assume all files included
+
+% determine which files to include
+
+\def\@star{*} % constant for comparison purposes
+\def\@minussign{-} % " " " "
+
+\typeout { }
+\typeout {Enter file(s) to include (separated by commas and no spaces),}
+\typeout {or enter * for all files, or enter - for none, or}
+\typein [\inputfiles]{press Return if this run is the same as the last.}
+
+\ifx\inputfiles\@star % all files included
+ % do nothing
+\else \ifx\inputfiles\@minussign % no files included
+ \includeonly{}
+ \def\@inputs{}
+\else \ifx\inputfiles\empty % include according to previous run
+ \def\@includeonly#1{%
+ \gdef\@inputs{#1}
+ \ifx\@inputs\@star \else \global\@partswtrue\global\edef\@partlist{#1}\fi}
+\else
+ \def\@inputs{\inputfiles} % include these files
+ \includeonly{\inputfiles}
+\fi\fi\fi
+
+
+\AtBeginDocument{\if@filesw
+ \immediate\write\@mainaux{\string\@includeonly\string{\@inputs
+ \string}}%
+ \def\@includeonly{}\fi}
+
+% END OF FILE askinclude.sty
diff --git a/obsolete/macros/latex/contrib/misc/cea.sty b/obsolete/macros/latex/contrib/misc/cea.sty
new file mode 100644
index 0000000000..8b12e3ab8c
--- /dev/null
+++ b/obsolete/macros/latex/contrib/misc/cea.sty
@@ -0,0 +1,116 @@
+%% Save file as: CEA.STY Source: CTAN/macros/latex209/contrib/misc/
+% Name: cea.sty
+% Description: LaTeX style for Computers and Electronics in Agriculture
+% Submissions
+% Keywords: LaTeX, style-option
+% Author: James Darrell McCauley <jdm5548@diamond.tamu.edu>
+% Latest Version: Version 0.1a <30 Mar 2000>
+% Note: This is a hack and not official by Elsevier Sci Pub.
+% It requires doublespace.sty and endfloat.sty from CTAN.
+% See CHANGE LOG below.
+% See also: cea.bst, doublespace.sty, endfloat.sty
+%
+% USAGE: \documentstyle[cea]{article}
+% ....
+% \begin{document}
+% \bibliographystyle{cea}
+% \maketitle
+%
+% CHANGE LOG
+% Date Ver Changes
+% <30 Mar 2000> 0.1a \input endfloat.sty instead of \input endfloat11.sty.
+% The former exists on CTAN but the later doesn't.
+% Also, change niord.shsu.edu to CTAN in the comments.
+% G. Pearson <gpearson@hipnt.com>
+% <13 Mar 1992> 0.1 Built late one night <jdm5548@diamond.tamu.edu>
+%
+% Variations from the general article.sty:
+% 1. You should list correspondence address in \date. For example:
+% \date{James Darrell McCauley\\
+% Department of Agricultural Engineering\\
+% Purdue University\\
+% 1146 Agricultural Engineering Building\\
+% West Lafayette, Indiana 47907--1146\\
+% USA}
+% 2. At the beginning of the abstract (after \begin{abstract}), you should
+% provide the complete bibliographic entry by which the paper will be
+% referenced.
+% 3. The singlespace environment may be very helpful for typesetting
+% math (see doublespace.sty).
+% 4. Read the ``Guide for Authors,'' included once a year in ``Computers
+% and Electronics Agriculture.''
+
+\input doublespace.sty % available from CTAN
+\input endfloat.sty % available from CTAN
+
+% put page number in upper right corner
+\pagestyle{myheadings}
+\markboth{}{}
+
+%
+% changes to maketitle
+\def\@maketitle{\newpage
+ \null
+ \vskip 2em \begin{center} \begin{singlespace}
+ {\LARGE \@title \par} \vskip 1.5em {%\large \lineskip .5em
+\begin{tabular}[t]{c}\@author
+ \end{tabular}\par}
+ \vskip 1em {{\bf Direct Correspondence to:}\\ \@date}
+ \end{singlespace}\end{center}
+ \par
+ \vskip 1.5em}
+\def\abstract{\if@twocolumn
+\section*{Abstract}
+\else %\small
+\begin{center}
+{\bf Abstract\vspace{-.5em}\vspace{0pt}}
+\end{center}
+%\quotation
+\fi}
+\def\endabstract{\if@twocolumn\else\endquotation\fi}
+
+%
+% Use parens instead of brackets for \cite, and no label in the bibliography
+%
+\def\@cite#1#2{(#1\if@tempswa , #2\fi)}
+\def\@biblabel#1{}
+
+%
+% following borrowed from apalike.sty
+%
+% Set length of hanging indentation for bibliography entries
+%
+\newlength{\bibhang}
+\setlength{\bibhang}{2em}
+
+% \thebibliography environment depends on whether or not `chapter's can exist
+%
+\@ifundefined{chapter}{\def\thebibliography#1{\section*{References\@mkboth
+ {REFERENCES}{REFERENCES}}\list
+ {\relax}{\setlength{\labelsep}{0em}
+ \setlength{\itemindent}{-\bibhang}
+ \setlength{\leftmargin}{\bibhang}}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}}%
+{\def\thebibliography#1{\chapter*{Bibliography\@mkboth
+ {BIBLIOGRAPHY}{BIBLIOGRAPHY}}\list
+ {\relax}{\setlength{\labelsep}{0em}
+ \setlength{\itemindent}{-\bibhang}
+ \setlength{\leftmargin}{\bibhang}}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}}
+
+% `; ' goes between cites, and there's no \hbox around individual cites
+%
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+ \def\@citea{}\@cite{\@for\@citeb:=#2\do
+ {\@citea\def\@citea{; }\@ifundefined
+ {b@\@citeb}{{\bf ?}\@warning
+ {Citation `\@citeb' on page \thepage \space undefined}}%
+{\csname b@\@citeb\endcsname}}}{#1}}
+%
+% end of stuff from apalike.sty
+%
+\endinput
diff --git a/obsolete/macros/latex/contrib/misc/ieeetrans.cls b/obsolete/macros/latex/contrib/misc/ieeetrans.cls
new file mode 100644
index 0000000000..5badf0f911
--- /dev/null
+++ b/obsolete/macros/latex/contrib/misc/ieeetrans.cls
@@ -0,0 +1,627 @@
+In the most recent TeXhax digest, there was a request for a copy of
+IEEEtrans.sty modified to work with LaTeX2e. I have a version I
+modified to make it IEEEtrans.cls, which I have sent to the person
+making the request and am now sending to you to consider posting to
+the archives.
+--
+Jon Dixon
+dixonj@colorado.edu
+http://spot.colorado.edu/~dixonj/
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%% IEEEtran.cls %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%===========================================================================
+%%% modified by JWD (dixonj@colorado.edu) to be IEEEtran.cls
+%%%
+%%% @LaTeX-style-file{
+%%% author = "Gerry Murray and Silvano Balemi",
+%%% version = "2.5.4",
+%%% date = "30-August-1993",
+%%% filename = "IEEEtran.sty",
+%%% address = "Automatic Control Lab, ETH Zurich, Switzerland"
+%%% email = "balemi@aut.ee.ethz.ch,
+%%% keywords = "LaTeX, IEEE Transactions, publisher style",
+%%% mainserver = "via E-mail from balemi@aut.ee.ethz.ch ",
+%%% docstring = "This is a LaTeX style file for preparation
+%%% of submission and final versions of articles
+%%% to be published in IEEE Transactions.
+%%% The default font size is 10 points but 9pt,
+%%% 11pt and 12pt are available too.
+%%%
+%%% Usage:
+%%% \documentstyle[..,Xpt,twoside]{IEEEtran}
+%%% \author{..}
+%%% \title{..}
+%%% \maketitle
+%%% \begin{abstract}...\end{abstract}
+%%% \begin{keywords}...\end{keywords}
+%%% ...
+%%% \begin{biography}{Author's name}...\end{biography}
+%%% \end{document}
+%%%
+%%% The command "\markboth{leftTEXT}{rightTEXT}"
+%%% puts the text "leftTEXT" and "rightTEXT"
+%%% with the page number on the even resp. odd
+%%% headers when the "twoside" option is selected.
+%%% (Attention: header of title page is
+%%% always "leftTEXT" as it bears the journal name).
+%%% In order to remove headers, insert
+%%% \thispagestyle{empty}\pagestyle{empty} or
+%%% \thispagestyle{plain}\pagestyle{plain}
+%%% right after the \maketitle command!!
+%%%
+%%% See also IEEE.bst and IEEEsample.tex",
+%%% }
+%%% ===========================================================================
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\typeout{Document Style `IEEEtran' <30-August-1993>.}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesClass{IEEEtran}
+ [1995/03/16 revision by JWD]
+\newcommand\@ptsize{}
+
+%% define new needed boolean variables
+\newif\if@tmptwocolumn \@tmptwocolumnfalse
+\newif\if@draftversion \@draftversionfalse
+\newif\if@technote \@technotefalse
+
+\def\@ptsize{10}
+\@namedef{ds@9pt}{\def\@ptsize{9}}
+\@namedef{ds@10pt}{\def\@ptsize{10}}
+\@namedef{ds@11pt}{\def\@ptsize{11}}
+\@namedef{ds@12pt}{\def\@ptsize{12}}
+\@namedef{ds@twoside}{\@twosidetrue \@mparswitchtrue}
+\@namedef{ds@draft}{\global\@draftversiontrue} % sets variable for draft
+\@namedef{ds@technote}{\global\@technotetrue} % sets variable for techn. note
+%% the file twocolumn.sty is not read as it changes \textwidth.
+%% Next line sets @tmptwocolumn to true which lets later execute \twocolumn
+\@namedef{ds@twocolumn}{\global\@tmptwocolumntrue }
+\@options
+\input{size\@ptsize.clo}
+
+%%%%% \input IEEE\@ptsize.sty\relax %%%% FONT DEFINITION BELOW (NO FILE READ)
+
+%% change sizes and margins
+\topmargin -16.0mm
+\oddsidemargin -11.0mm
+\evensidemargin -11.0mm
+\textheight 243.5mm
+\textwidth 183.0mm
+\columnsep 4.1mm
+\parindent 1.0em
+\headsep 6.3mm
+\headheight 12pt
+\lineskip 1pt
+\normallineskip 1pt
+\def\baselinestretch{1}
+
+\if@draftversion
+\topmargin -6.0mm
+\oddsidemargin 0mm
+\evensidemargin 0mm
+\textheight 223.5mm
+\textwidth 161.0mm
+\fi
+
+\marginparsep 10pt
+\marginparwidth 20pt
+\marginparpush 25pt
+
+\partopsep \z@
+\topsep 1.3ex
+\parsep \z@
+\itemsep \z@
+%% see further below for lists
+
+%% FONT DEFINITION: avoids having to read in font files.
+%%
+%% Check if we have selected 9 points
+\def\@tempa{9}\ifx\@ptsize\@tempa
+\typeout{-- This is a 9 point document}
+\def\@normalsize{\@setsize\normalsize{10.7pt}\ixpt\@ixpt
+\abovedisplayskip 1em plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip .6em plus3pt minus3pt}
+\def\small{\@setsize\small{9.12pt}\viiipt\@viipt}
+\def\footnotesize{\@setsize\footnotesize{8.15pt}\viipt\@vipt}
+\def\scriptsize{\@setsize\scriptsize{8pt}\vipt\@vpt}
+\def\tiny{\@setsize\tiny{5pt}\vpt\@vpt}
+\def\large{\@setsize\large{12pt}\xpt\@xpt}
+\def\Large{\@setsize\Large{14pt}\xiipt\@xiipt}
+\def\LARGE{\@setsize\LARGE{18pt}\xivpt\@xivpt}
+\def\huge{\@setsize\huge{22pt}\xviipt\@xviipt}
+\def\Huge{\@setsize\Huge{25pt}\xxpt\@xxpt}
+\fi
+%%
+%% Check if we have selected 10 points
+\def\@tempa{10}\ifx\@ptsize\@tempa
+\typeout{-- This is a 10 point document}
+\def\@normalsize{\@setsize\normalsize{11.9pt}\xpt\@xpt
+\abovedisplayskip 1em plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip .6em plus3pt minus3pt}
+\def\small{\@setsize\small{9.2pt}\viiipt\@viiipt}
+\def\footnotesize{\@setsize\footnotesize{8.8pt}\viiipt\@viiipt}
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{22pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{28pt}\xxvpt\@xxvpt}
+\fi
+%%
+%% Check if we have selected 11 points
+\def\@tempa{11}\ifx\@ptsize\@tempa
+\typeout{-- This is an 11 point document}
+\def\@normalsize{\@setsize\normalsize{13.6pt}\xipt\@xipt
+\abovedisplayskip 1em plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip .6em plus3pt minus3pt}
+\def\small{\@setsize\small{12pt}\xpt\@xpt}
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt}
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\fi
+%%
+%% Check if we have selected 12 points
+\def\@tempa{12}\ifx\@ptsize\@tempa
+\typeout{-- This is a 12 point document}
+\def\@normalsize{\@setsize\normalsize{14pt}\xiipt\@xiipt
+\abovedisplayskip 1em plus3pt minus6pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip .6em plus4pt minus4pt}
+\def\small{\@setsize\small{11.4pt}\xpt\@xpt}
+\def\footnotesize{\@setsize\footnotesize{10pt}\ixpt\@ixpt}
+\def\scriptsize{\@setsize\scriptsize{9pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{8pt}\vipt\@vipt}
+\def\large{\@setsize\large{18pt}\xivpt\@xivpt}
+\def\Large{\@setsize\Large{22pt}\xviipt\@xviipt}
+\def\LARGE{\@setsize\LARGE{25pt}\xxpt\@xxpt}
+\def\huge{\@setsize\huge{30pt}\xxvpt\@xxvpt}
+\let\Huge=\huge
+\fi
+
+%% Definitions for PARAGRAPHS
+%%
+\abovedisplayskip 0pt plus2pt minus5pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip 0pt plus3pt%
+\belowdisplayshortskip 0pt plus3pt minus3pt%
+
+%% Definitions for LISTS
+%%
+
+%% Change aspect of lists with
+%% 1) \itemindent, label indentation wrt to left list margin
+%% 2) \leftmargini, the indentation of the whole list (on left, first level)
+\itemindent -1em
+\leftmargini 2em
+%\itemindent 2em % Alternative values: sometimes used..
+%\leftmargini 0em
+\leftmarginii 1em
+\leftmarginiii 1.5em
+\leftmarginiv 1.5em
+\leftmarginv 1.0em
+\leftmarginvi 1.0em
+\labelsep 5pt
+\leftmargin\leftmargini
+\labelwidth \z@
+
+\def\@listI{\leftmargin\leftmargini} \@listI
+\def\@listi{\leftmargin\leftmargini \topsep \z@ plus 1pt minus 1pt}
+\def\@listii{\leftmargin\leftmarginii\labelwidth\leftmarginii
+ \advance\labelwidth-\labelsep \topsep \z@}
+\def\@listiii{\leftmargin\leftmarginiii\labelwidth\leftmarginiii
+ \advance\labelwidth-\labelsep \topsep \z@}
+\def\@listiv{\leftmargin\leftmarginiv\labelwidth\leftmarginiv
+ \advance\labelwidth-\labelsep \topsep \z@}
+\def\@listv{\leftmargin\leftmarginv\labelwidth\leftmarginv
+ \advance\labelwidth-\labelsep \topsep \z@}
+\def\@listvi{\leftmargin\leftmarginvi\labelwidth\leftmarginvi
+ \advance\labelwidth-\labelsep \topsep \z@}
+
+\def\labelenumi{\theenumi.} \def\theenumi{\arabic{enumi}}
+\def\labelenumii{(\theenumii)} \def\theenumii{\alph{enumii}}
+\def\labelenumiii{\theenumiii.} \def\theenumiii{\roman{enumiii}}
+\def\labelenumiv{\theenumiv.} \def\theenumiv{\Alph{enumiv}}
+\def\p@enumii{\theenumi}
+\def\p@enumiii{\theenumi(\theenumii)}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+\def\labelitemi{$\scriptstyle\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+
+%% \itemindent is set to \z@ by list, so define new temporary variable
+\newdimen\tmpitemindent
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -1.5em \listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+\def\quotation{\list{}{\listparindent 1.5em \itemindent\listparindent
+ \rightmargin\leftmargin \parsep 0pt plus 1pt}\item[]}
+\let\endquotation=\endlist
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+\def\@mklab#1{#1}
+\def\description{\tmpitemindent\itemindent\list{}{\itemindent\tmpitemindent
+ \labelwidth\z@\def\makelabel##1{\hspace\labelsep\it{##1}}}}
+\def\enddescription{\endlist\par}
+\def\enumerate{\tmpitemindent\itemindent\ifnum \@enumdepth >3 \@toodeep\else
+ \advance\@enumdepth \@ne \edef\@enumctr{enum\romannumeral\the\@enumdepth}%
+ \list{\csname label\@enumctr\endcsname}{\itemindent\tmpitemindent
+ \usecounter{\@enumctr}\def\makelabel##1{\hspace\labelsep\hfil{##1}}}\fi}
+\def\endenumerate{\endlist\par}
+\def\itemize{\tmpitemindent\itemindent\ifnum \@itemdepth >3 \@toodeep\else
+ \advance\@itemdepth\@ne
+ \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
+ \list{\csname\@itemitem\endcsname}{\itemindent\tmpitemindent
+ \def\makelabel##1{\hspace\labelsep\hfil\it{##1}}}\fi}
+\def\enditemize{\endlist\par}
+
+\newif\if@restonecol
+\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{empty}\c@page\z@}
+\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi}
+
+\arraycolsep 5pt
+\tabcolsep 6pt
+\arrayrulewidth .4pt
+\doublerulesep 2pt
+\tabbingsep\labelsep
+
+%% FOOTNOTES
+%
+\skip\footins 10pt plus 4pt minus 2pt
+\footnotesep 7pt
+\footskip 10mm
+\skip\@mpfootins = \skip\footins
+\fboxsep = 3pt \fboxrule = .4pt
+\long\def\@makefntext#1{\parindent .8em\indent$^{\@thefnmark}$#1}
+\def\footnoterule{}
+
+\if@technote
+ \setcounter{secnumdepth}{3}
+\else
+ \setcounter{secnumdepth}{4}
+\fi
+
+\newcounter{section}
+\newcounter{subsection}[section]
+\newcounter{subsubsection}[subsection]
+\newcounter{paragraph}[subsubsection]
+
+\def\thesection{\Roman{section}}
+\def\thesubsection{\thesection-\Alph{subsection}}
+\def\thesubsubsection{\thesubsection.\arabic{subsubsection}}
+\def\thesubsubsectiondis{\Alph{subsection}.\arabic{subsubsection}}
+\def\theparagraph{\thesubsubsection.\alph{paragraph}}
+\def\theparagraphdis{\thesubsubsectiondis.\alph{paragraph}}
+
+\def\theequation{\arabic{equation}}
+
+%% LIST OF FIGURES AND TABLES
+%
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{3}
+
+\def\tableofcontents{\section*{Contents}\@starttoc{toc}}
+\def\l@section#1#2{\addpenalty{\@secpenalty} \addvspace{1.0em plus 1pt}
+ \@tempdima 1.8em \begingroup \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip-\@pnumwidth \bf\leavevmode #1\hfil\hbox to\@pnumwidth{\hss #2}
+ \par \endgroup}
+\def\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}}
+\def\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}}
+\def\listoffigures{\section*{List of Figures}\@starttoc{lof}}
+\def\l@figure{\@dottedtocline{1}{1em}{1.8em}}
+\def\listoftables{\section*{List of Tables}\@starttoc{lot}}
+\let\l@table\l@figure
+
+\newdimen\@maxsep
+\newdimen\@dblmaxsep
+%% Definitions for floats
+%%
+%% Normal Floats %% Double Column Floats
+\floatsep 12pt plus 2pt minus 2pt \dblfloatsep 12pt plus 2pt minus 2pt
+\textfloatsep 20pt plus 2pt minus 4pt \dbltextfloatsep 20pt plus 2pt minus 4pt
+\@maxsep 20pt \@dblmaxsep 20pt
+\@fptop 0pt plus 1fil \@dblfptop 0pt plus 1fil
+\@fpsep 8pt plus 2fil \@dblfpsep 8pt plus 2fil
+\@fpbot 0pt plus 1fil \@dblfpbot 0pt plus 1fil
+\def\topfraction{1.0} \def\dbltopfraction{1.0}
+\def\floatpagefraction{0.8} \def\dblfloatpagefraction{0.8}
+\setcounter{topnumber}{2} \setcounter{dbltopnumber}{4}
+%
+\intextsep 12pt plus 2pt minus 2pt
+\setcounter{bottomnumber}{2}
+\def\bottomfraction{.4}
+\setcounter{totalnumber}{4}
+\def\textfraction{.2}
+
+
+%% redefine CAPTION
+
+\long\def\@caption#1[#2]#3{\par\addcontentsline{\csname ext@#1\endcsname}{#1}{%
+ \protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}}
+ \begingroup \@parboxrestore \normalsize
+ \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}{#1}\par
+ \endgroup}
+
+\def\tablestring{table}
+\def\figurestring{figure}
+
+\newlength{\captionindent}
+\long\def\@makecaption#1#2#3{
+\ifx\figurestring#3
+ \vskip 5pt
+ \setbox\@tempboxa\hbox{\small #1.~ #2}
+ \ifdim \wd\@tempboxa >\hsize
+ \setbox\@tempboxa\hbox{\small #1.~ }
+ \setlength\captionindent{\wd\@tempboxa} \divide\captionindent by 2
+ \parbox[t]{\hsize}{\small \hangindent \captionindent \hangafter=1%
+ \unhbox\@tempboxa#2}
+ \else \hbox to\hsize{\small\hfil\box\@tempboxa\hfil}
+ \fi
+\else
+ \begin{center}{\small #1}\\{\small\sc #2}\end{center}
+ \vskip 8pt
+\fi}
+
+\newcounter{figure}
+\def\thefigure{\@arabic\c@figure}
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{Fig.~\thefigure}
+\def\figure{\@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+\newcounter{table}
+\def\thetable{\@Roman\c@table}
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{TABLE~\thetable}
+\def\table{\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+
+\if@twoside
+\def\ps@headings{
+ \def\@oddhead{\hbox{}\scriptsize\rightmark \hfil \thepage}
+ \def\@evenhead{\scriptsize\thepage \hfil \leftmark\hbox{}}
+ \if@draftversion
+ \def\@oddfoot{\scriptsize\@date\hfil DRAFT}
+ \def\@evenfoot{\scriptsize DRAFT\hfil\@date}
+ \else
+ \def\@oddfoot{}\def\@evenfoot{}
+ \fi}
+\else
+\def\ps@headings{
+ \def\@oddhead{\hbox{}\scriptsize\leftmark \hfil \thepage}
+ \def\@evenhead{}
+ \if@draftversion
+ \def\@oddfoot{\scriptsize \@date \hfil DRAFT}
+ \else
+ \def\@oddfoot{}
+ \fi
+ \def\@evenfoot{}}
+\fi
+\def\ps@titlepagestyle{
+ \def\@oddhead{\hbox{}\scriptsize\leftmark \hfil \thepage}
+ \def\@evenhead{\scriptsize\thepage \hfil \leftmark\hbox{}}
+ \if@draftversion
+ \def\@oddfoot{\scriptsize \@date\hfil DRAFT}
+ \def\@evenfoot{\scriptsize DRAFT\hfil \@date}
+ \else
+ \def\@oddfoot{}\def\@evenfoot{}
+ \fi}
+\def\rightmark{}\def\leftmark{}
+
+
+%% Defines the command for putting the header. footernote{TEXT} is the same
+%% as markboth{TEXT}{TEXT}. Here for compatibility with other style files.
+\def\markboth#1#2{\def\leftmark{\uppercase{#1}}\def\rightmark{\uppercase{#2}}}
+\def\footernote#1{\markboth{#1}{#1}}
+
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+
+%% BIBLIOGRAPHY
+%
+%% separate citations with "], ["
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+\def\@citea{}\@cite{\@for\@citeb:=#2\do {\@citea\def\@citea{],
+[}\@ifundefined {b@\@citeb}{{\bf ?}\@warning {Citation `\@citeb' on
+page \thepage \space undefined}}%
+{\csname b@\@citeb\endcsname}}}{#1}}
+
+\def\@cite#1#2{[{#1\if@tempswa, #2\fi}]}
+
+%% Allow short (name-less) citations, when used in conjunction with a
+%% bibliography style that creates labels like \citename{<names>, }<year>
+\let\@internalcite\cite
+\def\cite{\def\citename##1{##1}\@internalcite}
+\def\shortcite{\def\citename##1{}\@internalcite}
+\def\@biblabel#1{\def\citename##1{##1}[#1]\hfill}
+
+\def\thebibliography#1{\section*{References}\footnotesize\list
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep \itemsep 0pt plus .5pt
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+\let\endthebibliography=\endlist
+
+%% appendix command for one single appendix
+\def\appendix{\par
+ \setcounter{section}{0}\setcounter{subsection}{0}
+ \def\thesection{\Alph{section}} \section*{Appendix}
+}
+%% appendices command for multiple appendicies
+\def\appendices{\par
+ \setcounter{section}{0}\setcounter{subsection}{0}
+ \def\thesection{\Alph{section}} \section*{Appendices}
+}
+
+\def\maketitle{\par
+ \begingroup
+ \def\thefootnote{} % the \thanks{} mark type is empty
+ \if@twocolumn
+ \if@technote
+ \newpage\global\@topnum\z@ \@maketitle
+ \else\twocolumn[\@maketitle]\fi
+ \else\newpage\global\@topnum\z@ \@maketitle \fi
+ \thispagestyle{titlepagestyle}\@thanks
+ \endgroup
+ \setcounter{footnote}{0}\let\maketitle\relax\let\@maketitle\relax
+ \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\let\thanks\relax
+ \if@draftversion \vfil\mbox{}\newpage\fi
+}
+
+\def\@maketitle{\newpage\if@draftversion\mbox{}\vfil\fi\begin{center}
+ \if@technote
+ {\bf\@title\par}\vskip 1.3em{\lineskip .5em\@author\par}
+ \else
+ \vskip0.2em{\Huge\@title\par}\vskip1.0em%
+ \if@draftversion\vfil\fi%
+ {\lineskip.5em\large\@author\par}
+ \fi
+ \end{center}\par\vskip 1.4em}
+
+\def\abstract{%
+ \if@twocolumn
+ \small\it Abstract\/\bf---$\!$%
+ \else
+ \begin{center}\vspace{-0.8em}\small\bf Abstract\end{center}\quotation\small
+ \fi}
+\def\endabstract{\vspace{0.6em}\par\if@twocolumn\else\endquotation\fi
+ \normalsize\rm}
+
+\def\keywords{\vspace{-.3em}
+ \if@twocolumn
+ \small\it Keywords\/\bf---$\!$%
+ \else
+ \begin{center}\small\bf Keywords\end{center}\quotation\small
+ \fi}
+\def\endkeywords{\vspace{0.6em}\par\if@twocolumn\else\endquotation\fi
+ \normalsize\rm}
+
+%% FIX numbering of sections.
+\gdef\@punct{.\ \ } % Punctuation after run-in section heading
+\def\@sect#1#2#3#4#5#6[#7]#8{%
+ \ifnum #2>\c@secnumdepth
+ \def\@svsec{}
+ \else
+ \refstepcounter{#1}\edef\@svsec{%
+ \ifnum #2=1\Roman{#1}.\fi\ifnum #2=2\Alph{#1}.\fi
+ \ifnum #2>2{\csname the#1dis\endcsname}\if@technote.\fi\fi \hskip .5em}
+ \fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #6\relax
+ \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\par}
+ \endgroup
+ \csname #1mark\endcsname{#7}
+ \addcontentsline{toc}{#1}{\ifnum #2>\c@secnumdepth\else
+ \protect\numberline{\csname the#1\endcsname}\fi#7}
+ \else
+ \def\@svsechd{#6\hskip #3\@svsec #8\@punct\csname #1mark\endcsname{#7}
+ \addcontentsline{toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi#7}}
+ \fi
+ \@xsect{#5}}
+
+\def\@ssect#1#2#3#4#5{\@tempskipa #3\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #4\@hangfrom{\hskip #1}{\interlinepenalty \@M #5\par}\endgroup
+ \else \def\@svsechd{#4\hskip #1\relax #5\@punct}\fi
+ \@xsect{#3}}
+
+%% SECTIONS
+%%
+\def\section{\@startsection {section}{1}{\z@}{2.0ex plus .5ex
+ minus .2ex}{1.0ex plus .2ex}{\centering\sc}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{2.0ex plus .5ex
+ minus .2ex}{1.0ex plus .2ex}{\it}}
+\if@technote
+ \def\subsubsection{\@startsection{subsubsection}{3}{\z@}{2.0ex plus .5ex
+ minus .1ex}{0pt}{\it}}
+\else
+ \def\subsubsection{\@startsection{subsubsection}{3}{\z@}{2.0ex plus .5ex
+ minus .2ex}{1.0ex plus .2ex}{\rm}}
+ \def\paragraph{\@startsection{paragraph}{4}{\z@}{1.0ex plus .5ex
+ minus .2ex}{0ex}{\rm}}
+\fi
+
+%% ENVIRONEMTS
+\def\QED{\mbox{\rule[0pt]{1.5ex}{1.5ex}}}
+\def\proof{\noindent\hspace{2em}{\it Proof: }}
+\def\endproof{\hspace*{\fill}~\QED\par\endtrivlist\unskip}
+\def\@begintheorem#1#2{\tmpitemindent\itemindent\topsep 0pt\rm\trivlist
+ \item[\hskip \labelsep{\indent\it #1\ #2:}]\itemindent\tmpitemindent}
+\def\@opargbegintheorem#1#2#3{\tmpitemindent\itemindent\topsep 0pt\rm \trivlist
+ \item[\hskip\labelsep{\indent\it #1\ #2\ \rm(#3)}]\itemindent\tmpitemindent}
+\def\@endtheorem{\endtrivlist\unskip}
+
+%% sets up default PAGESTYLE
+\ps@headings
+\pagenumbering{arabic}
+
+\if@twoside\else\raggedbottom\fi
+\if@tmptwocolumn \twocolumn \sloppy \flushbottom \fi
+\if@draftversion \def\baselinestretch{1.5}\fi
+
+%% Definition for Big letter at the beginning of a paragraph
+%%
+\def\PARstart#1#2{\begingroup\def\par{\endgraf\endgroup\lineskiplimit=0pt}
+ \setbox2=\hbox{\uppercase{#2} }\newdimen\tmpht \tmpht \ht2
+ \advance\tmpht by \baselineskip\font\hhuge=cmr10 at \tmpht
+ \setbox1=\hbox{{\hhuge #1}}
+ \count7=\tmpht \count8=\ht1\divide\count8 by 1000 \divide\count7 by\count8
+ \tmpht=.001\tmpht\multiply\tmpht by \count7\font\hhuge=cmr10 at \tmpht
+ \setbox1=\hbox{{\hhuge #1}} \noindent \hangindent1.05\wd1
+ \hangafter=-2 {\hskip-\hangindent \lower1\ht1\hbox{\raise1.0\ht2\copy1}%
+ \kern-0\wd1}\copy2\lineskiplimit=-1000pt}
+
+\if@technote\def\PARstart#1#2{#1#2}\fi % if technical note, disable it
+\if@draftversion\def\PARstart#1#2{#1#2}\fi % if draft, disable it
+
+%% Allows to enter BIOGRAPHY leaving place for picture (adapts to font size)
+%%
+\newenvironment{biography}[1]{%
+\footnotesize\unitlength 1mm\bigskip\bigskip\bigskip\parskip=0pt\par%
+\rule{0pt}{39mm}\vspace{-39mm}\par% garantees correct page breaking
+\noindent\setbox0\hbox{\framebox(25,32){}}% box containing the frame
+\ht0=37mm\count10=\ht0\divide\count10 by\baselineskip% calculates lines
+\global\hangindent29mm\global\hangafter-\count10%
+\hskip-28.5mm\setbox0\hbox to 28.5mm {\raise-30.5mm\box0\hss}%
+\dp0=0mm\ht0=0mm\box0\noindent\bf#1\rm}{
+\par\rm\normalsize}
+
+
+\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
+\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
+\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
+\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
+\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
+\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl}
+\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc}
+\renewcommand{\cal}{\protect\pcal}
+\newcommand{\pcal}{\@fontswitch{\relax}{\mathcal}}
+\renewcommand{\mit}{\protect\pmit}
+\newcommand{\pmit}{\@fontswitch{\relax}{\mathnormal}}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%% End of IEEEtran.sty %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
diff --git a/obsolete/macros/latex/contrib/misc/morefloats.sty b/obsolete/macros/latex/contrib/misc/morefloats.sty
new file mode 100644
index 0000000000..b9413494e1
--- /dev/null
+++ b/obsolete/macros/latex/contrib/misc/morefloats.sty
@@ -0,0 +1,55 @@
+% This file is public domain.
+% Originally written 1990, Don Hosek.
+% This declaration added by Clea F. Rees 2008/11/14 with the permission of Dan Hosek.
+%
+% \iffalse
+%% This is morefloats.sty as of 27-July-1990
+%% Don Hosek, Quixote <dhosek@ymir.claremont.edu>
+% \fi
+%
+% The task at hand is to increase \LaTeX's current limit of 18 unprocessed
+% floats in memory at once to 36. An examination of latex.tex reveals that
+% this is accomplished by allocating an insert register for each unprocessed
+% float. A quick check of lplain.lis reveals that there is room, in fact,
+% for 230 additional unprocessed floats, but \TeX's main memory would be
+% exhausted long before that happened.
+%
+% First we allocate the additional insert registers needed:
+% \begin{macrocode}
+\newinsert\bx@S
+\newinsert\bx@T
+\newinsert\bx@U
+\newinsert\bx@V
+\newinsert\bx@W
+\newinsert\bx@X
+\newinsert\bx@Y
+\newinsert\bx@Z
+\newinsert\bx@AA
+\newinsert\bx@BB
+\newinsert\bx@CC
+\newinsert\bx@DD
+\newinsert\bx@EE
+\newinsert\bx@FF
+\newinsert\bx@GG
+\newinsert\bx@HH
+\newinsert\bx@II
+\newinsert\bx@JJ
+% \end{macrocode}
+%
+% That accomplished, the next step is to define the macro \verb+\@freelist+
+% which is merely a list of the box registers each preceded by \verb+\@elt+.
+% This approach allows processing of the list to be done far more efficiently.
+% A similar approach is used by Mittelbach \& Sch\"opf's {\tt doc.sty} to
+% keep track of control sequences which should not be indexed.
+% \begin{macrocode}
+\gdef\@freelist{\@elt\bx@A\@elt\bx@B\@elt\bx@C\@elt\bx@D\@elt\bx@E
+ \@elt\bx@F\@elt\bx@G\@elt\bx@H\@elt\bx@I\@elt\bx@J
+ \@elt\bx@K\@elt\bx@L\@elt\bx@M\@elt\bx@N
+ \@elt\bx@O\@elt\bx@P\@elt\bx@Q\@elt\bx@R
+ \@elt\bx@S\@elt\bx@T\@elt\bx@U\@elt\bx@V
+ \@elt\bx@W\@elt\bx@X\@elt\bx@Y\@elt\bx@Z
+ \@elt\bx@AA\@elt\bx@BB\@elt\bx@CC\@elt\bx@DD
+ \@elt\bx@EE\@elt\bx@FF\@elt\bx@GG\@elt\bx@HH
+ \@elt\bx@II\@elt\bx@JJ}
+% \end{macrocode}
+\endinput
diff --git a/obsolete/macros/latex/contrib/misc/raggedr.sty b/obsolete/macros/latex/contrib/misc/raggedr.sty
new file mode 100644
index 0000000000..51613d5f6f
--- /dev/null
+++ b/obsolete/macros/latex/contrib/misc/raggedr.sty
@@ -0,0 +1,85 @@
+%%Copyright James Kilfiger.
+%%
+%%This Package may be distributed under the terms of the Latex Project
+%%Public Licence.
+%
+% Documentation below \endinput
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{raggedr}[1999/11/11
+ Set a document in ragged right as much as possible]
+
+\DeclareOption{ragged2e}
+ {\def\LoadRagged{\IfFileExists{ragged2e.sty}
+ {\RequirePackage{ragged2e}
+ \def\RRrright{\RaggedRight\parindent1em\relax}}
+ {\PackageWarning{raggedr}{Ragged2e package not
+ found. Using standard raggedright}
+ \def\RRrright{\raggedright\parindent1em\let\\=\@normalcr}
+ }}
+ }
+\DeclareOption{noragged2e}
+ {\def\LoadRagged{\relax}
+ \def\RRrright{\raggedright\parindent1em\let\\=\@normalcr}}
+
+
+\ExecuteOptions{noragged2e}
+\ProcessOptions
+\LoadRagged
+
+
+\newcommand{\justifying}{%
+\def\\{\@normalcr}%
+\rightskip\z@ \leftskip\z@
+\parfillskip 0pt \@plus 1fil\relax
+\parindent 1em\relax}
+\newenvironment{justify}{\trivlist\justifying\item\relax}{\endtrivlist}
+
+\renewcommand{\@arrayparboxrestore}{%
+ \let\if@nobreak\iffalse
+ \let\if@noskipsec\iffalse
+ \let\par\@@par
+ \let\-\@dischyph
+ \let\'\@acci\let\`\@accii\let\=\@acciii
+ \everypar{}%
+ \linewidth\hsize
+ \@totalleftmargin\z@
+ \RRrright
+ \parindent\z@ \parskip\z@skip
+ \lineskip\normallineskip
+ \baselineskip\normalbaselineskip
+ \sloppy}
+\let\raggednewline=\@normalcr
+\RRrright
+
+
+\endinput
+
+This is a small package which attempt to set the document in ragged
+right as much as possible. It can use Martin Schröder's Ragged2e
+package, if available, if the standard \raggedright is too ragged.
+
+Use:
+In the preamble of a document you can say
+ \usepackage{raggedr}
+or
+ \usepackage[ragged2e]{raggedr}
+
+Your document will be set ragged right, moreover parboxes, minipages and
+p{} columns of tabulars will be set raggedright.
+
+If you want part of you document justified there is a command,
+\justifying and an evironment \begin{justfiy}...\end{justify}
+These can be used just as \centering and the center environment.
+
+Finally, there is a problem getting a new line in a ragged right
+tabular, as both \\ and tabular newline will start a new row. Therefore
+the command \raggednewline is provided to do a normal newline.
+
+This package depends apon some LaTeX2e internals. If those internals
+change, this package will break.
+
+This package is largely untested in the real world. I welcome any
+comments.
+
+ James
diff --git a/obsolete/macros/latex/contrib/misc/vpage.sty b/obsolete/macros/latex/contrib/misc/vpage.sty
new file mode 100644
index 0000000000..43379f4237
--- /dev/null
+++ b/obsolete/macros/latex/contrib/misc/vpage.sty
@@ -0,0 +1,101 @@
+%%----------------------------------------------------------------------
+%% vpage.sty
+%%
+%% Page size / layout macros. For use with LaTeX.
+%%
+%% Copyright (C) Volker Kuhlmann, 1993, 1999
+%%
+%% This program can redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN
+%% archives in directory macros/latex/base/lppl.txt; either
+%% version 1 of the License, or (at your option) any later version.
+%%
+%% Documentation after (last) \endinput. Do not alter this file!
+%%----------------------------------------------------------------------
+
+\immediate\typeout%
+ {Style `vpage', V2.4 25 May 1999 (last version, equal to V2.2, 18 June 1993)}
+\immediate\typeout{*********************************************************}
+\immediate\typeout{***** vpage.sty is now obsolete -- use vmargin.sty! *****}
+\immediate\typeout{*********************************************************}
+
+
+% so that vpage can be loaded more than once
+\@ifundefined{@@@vpage}{\def\@@@vpage{l}}{\endinput}
+
+
+\input{vmargin.sty}
+
+
+\def\paper@Azero {\PaperWidth 841mm \PaperHeight1189mm\@po@}
+\def\paper@Aone {\PaperWidth 595mm \PaperHeight 841mm\@po@}
+\def\paper@Atwo {\PaperWidth 420mm \PaperHeight 595mm\@po@}
+\def\paper@Athree {\PaperWidth 297mm \PaperHeight 420mm\@po@}
+\def\paper@Afour {\PaperWidth 210mm \PaperHeight 297mm\@po@}
+\def\paper@Afive {\PaperWidth 149mm \PaperHeight 210mm\@po@}
+\def\paper@Asix {\PaperWidth 105mm \PaperHeight 149mm\@po@}
+\def\paper@Aseven {\PaperWidth 74mm \PaperHeight 105mm\@po@}
+\def\paper@Aeight {\PaperWidth 53mm \PaperHeight 74mm\@po@}
+\def\paper@Bzero {\PaperWidth1000mm \PaperHeight1414mm\@po@}
+\def\paper@Bone {\PaperWidth 707mm \PaperHeight1000mm\@po@}
+\def\paper@Btwo {\PaperWidth 500mm \PaperHeight 707mm\@po@}
+\def\paper@Bthree {\PaperWidth 353mm \PaperHeight 500mm\@po@}
+\def\paper@Bfour {\PaperWidth 250mm \PaperHeight 353mm\@po@}
+\def\paper@Bfive {\PaperWidth 176mm \PaperHeight 250mm\@po@}
+\def\paper@Czero {\PaperWidth 917mm \PaperHeight1297mm\@po@}
+\def\paper@Cone {\PaperWidth 648mm \PaperHeight 917mm\@po@}
+\def\paper@Ctwo {\PaperWidth 458mm \PaperHeight 648mm\@po@}
+\def\paper@Cthree {\PaperWidth 324mm \PaperHeight 458mm\@po@}
+\def\paper@Cfour {\PaperWidth 229mm \PaperHeight 324mm\@po@}
+\def\paper@Cfive {\PaperWidth 162mm \PaperHeight 229mm\@po@}
+\def\paper@Csix {\PaperWidth 114mm \PaperHeight 162mm\@po@}
+\def\paper@Cseven {\PaperWidth 81mm \PaperHeight 114mm\@po@}
+\def\paper@Ceight {\PaperWidth 57mm \PaperHeight 81mm\@po@}
+
+
+%
+% DEFAULTS:
+%
+\parskip 2ex plus 0.5ex minus 0.5ex
+\parindent 0em
+\clubpenalty 500 % 150 by plain
+\widowpenalty 500 % 150 by plain
+\displaywidowpenalty 100 % 50 by plain
+\brokenpenalty 250 % 100 by plain
+\marginparwidth 15mm
+\marginparsep 3.5mm
+\skip\footins 1.3\skip\footins
+\footnotesep 1.2\footnotesep
+\def\baselinestretch{1.0}
+\def\arraystretch{1.0}
+\def\textfraction{.2}
+\flushbottom
+
+
+\endinput
+
+%%----------------------------------------------------------------------
+
+Changes:
+ V2.2 Last version.
+ V2.3 Changed to fall back on vmargin.sty. Issued for compatibility
+ reasons. No further support.
+ V2.4 Re-issued under LPPL.
+
+
+If you have any comments (positive or negative) please let me know!
+
+
+Copyright (C) Volker Kuhlmann
+
+Use of these macros is granted free of charge provided that this file
+is left intact and that no charge is made for its distribution.
+
+Currently:
+ University of Canterbury
+ ELEC Dept
+ Christchurch, New Zealand.
+ Email: v.kuhlmann@elec.canterbury.ac.nz
+%
+%% EOF vpage.sty
+%%----------------------------------------------------------------------
diff --git a/obsolete/macros/latex/contrib/numline/numline.sty b/obsolete/macros/latex/contrib/numline/numline.sty
new file mode 100644
index 0000000000..5739c6ca66
--- /dev/null
+++ b/obsolete/macros/latex/contrib/numline/numline.sty
@@ -0,0 +1,405 @@
+%%% ====================================================================
+%%% @LaTeX-style-file{
+%%% author = "Michal Jaegermann and James Fortune",
+%%% version = "1.3",
+%%% date = "06 Aug 1995",
+%%% filename = "numline.sty",
+%%% address = "10923 36Av, Edmonton,
+%%% Alberta, CANADA T6J 0B7",
+%%% telephone = "403 438 7012",
+%%% email = "michal@ellpspace.math.ualberta.ca
+%%% jafortun@vela.acs.oakland.edu (Internet)",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "line numbers",
+%%% supported = "yes (sort of)",
+%%% abstract = "LaTeX style file for putting line numbers on
+%%% margins of at least some documents which will
+%%% survive such treatment. It works modifying
+%%% LaTeX output routine, so do not expect that
+%%% this will work on anything but simple text!
+%%% If it does then you are very lucky person.
+%%% On the other hand is equally happy with
+%%% LaTeX2e as with LaTeX 2.09
+%%%
+%%% In some situations you should be able to
+%%% adjust it for special needs but do not expect
+%%% miracles. For plain TeX try EDMAC by Dominik
+%%% Wujastyk.
+%%%
+%%% This style provides:
+%%% - continuous line numbering for the whole
+%%% document or, if \lnumpagetrue, restarted
+%%% on every page
+%%% - numbers on alternate margins when 'twoside'
+%%% document option is in force
+%%% - ajustable interval between line numbers
+%%% given by a value of \lineCountInterval counter
+%%% - settable ranges of numbered lines
+%%% with \nlinesBoundary macro
+%%% - changing line witdth together with indent.sty
+%%% See comments and examples below.",
+%%% }
+%%% ====================================================================
+%
+% HISTORY:
+%
+% Based upon the TUGboat article ``Output Routines: Examples and Techniques.''
+% by David Salomon that appeared in Volume 11 (1990), Nos. 1, 3 and 4.
+%
+% Started by James Fortune as altnline.sty with some help and advice
+% from MJ which later hacked it for quite a while.
+%
+% Changes for version 1.0
+%
+% * Protect internal macros by including '@' in their names.
+% * Split countlines and duplicate operations from a single loop
+% (does not work that way).
+%
+% Changes for version 1.1 (mj)
+%
+% * Added logic to print line numbers only every \lineCountInterval
+% * Added a way to set up ONE range of numbered lines; use \nlinesBoundary
+% to do that. (It is possible to sprinkle your text with \nlinesBoundary
+% commands and they may even do the right thing if you will put them
+% in right places - but this is a hack.)
+% * Miscellaneous cleanup
+%
+% Changes for 1.2 (mj)
+% * Prevent 'Output routine didn't use all of \box255' messages
+% * Add code to handle, in a fashion, indentation generated by indent.sty
+% * Add switch to restart numbering on every page
+% * Make switching enumeration margins dependent on 'twoside' option
+%
+% Changes for 1.3 (mj)
+% * None whatsoever to the code
+% * Confirmed that it works to the same extent as before :-) with LaTeX2e.
+% * More dire warninigs comments explaining how to make a document
+% work with numline.sty when it doesn't.
+
+% USER INTERFACE:
+%
+% In your document you have an access to:
+% * a conditional \lnumpage which can be set with \lnumpagetrue
+% or \lnumpagefalse (default); when true line numbers are reset
+% on every page;
+% * a counter \lineCountInterval (default 5) to set interval between
+% line numbers
+% * a command \nlinesBoundary to set boundaries for line numbering;
+% example of use:
+% \nlinesBoundary{12}, or \nlinesBoundary[50]{12}
+% with \nlinesBoundary[<optional upper limit>]<lower limit>
+% Any negative number for an upper limit means number to the very end.
+% This is a default!
+
+% DIRE WARNINGS:
+%
+% This IS a hack doing things which is not supposed to do by messing
+% with LaTeX output routine. It works as expected with versions of
+% LaTeX I tested it, but your mileage may vary. In particular, if
+% some your other package does something with \output then you may
+% have problems forcing such two to cooperate.
+%
+% You may still use this on more documents than it looks like at the
+% first blush. If you will see ``Incomplete breakup'' message consult
+% DREADED INCOMPLETE BREAKUP section (it follows sample input) for
+% some day saving hints.
+
+% INDENTING:
+% Any changes in line width caused by indent.sty have the same effect.
+% So \begin{indentation}{2em}{2em} and \begin{indentation}{4em}{0pt}
+% are equivalent. Positioning of indented lines can be only performed
+% by modifications in a definition of \@duplicate. Check examples
+% below.
+
+%
+% various counters
+%
+\newcount\lineCountInterval % used to determine how often lin@Count is printed
+\lineCountInterval=5
+%
+\newcount\lin@CountInit % used to establish lineCount of first line on page
+\lin@CountInit=\z@
+\newcount\lin@CountStart % don't print line numbers below this value
+\lin@CountStart=\@ne
+\newcount\lin@CountFinish % don't print line numbers higher than this
+\lin@CountFinish=\m@ne
+%
+\newcount\lin@sSoFar
+% remainder from division of \lin@sSoFar by \lineCountInterval
+\newcount\total@Rem
+% current value of remainder used to produce line numbers
+\newcount\lin@rem
+
+%
+% A command to set boundaries for line numbering.
+%
+\def\nlinesBoundary{\@ifnextchar[{\nlin@sBoundary}{\nlin@sBoundary[\m@ne]}}
+\edef\nlin@sBoundary[#1]#2{%
+ \global\lin@CountFinish=#1\relax
+ \global\lin@CountStart=#2\relax}
+
+%
+% if's
+%
+\newif\iflnumpage % if true restart line numbers on every page
+%
+\newif\ifa@@lnum % do we really want to print that line number?
+
+%
+% make page easier to break into lines
+%
+\def\zero@ToSp{\parskip=\@ne sp plus\@ne pt
+ \def\vfil{\vskip1sp plus1fil}
+ \def\vfill{\vskip1sp plus1fill}
+ \abovedisplayshortskip=\@ne sp plus3pt
+ \postdisplaypenalty=\@ne
+ \interlinepenalty=\@ne}
+
+\zero@ToSp
+
+% It is possible to change a "look" of numbering by modifications
+% of this macro; in particular calculations below allow to start
+% with \lin@CountInit different from 0
+
+\def\resetlin@sSoFar{%
+ \global\lin@sSoFar=\lin@CountInit
+ \total@Rem=\lin@CountInit
+ \divide\total@Rem by\lineCountInterval
+ \multiply\total@Rem by-\lineCountInterval
+ \global\advance\total@Rem by\lin@CountInit}
+
+\resetlin@sSoFar
+
+\newcount\lin@Count
+\newif\ifAnyleft \newcount\pen
+\def\count@lines{%
+ \global\lin@Count=\lin@sSoFar
+ \loop \Anyleftfalse
+ \ifdim\lastskip=\z@ \ifdim\lastkern=\z@ \ifnum\lastpenalty=\z@
+ \setbox\z@=\lastbox
+ \ifvoid\z@
+ \else \Anylefttrue \global\advance\lin@Count by\@ne
+ \global\advance\total@Rem by\@ne
+ \ifnum\total@Rem=\lineCountInterval
+ \global\total@Rem=\z@
+ \fi\fi
+ \else \Anylefttrue \unpenalty \fi
+ \else \Anylefttrue \unkern \fi
+ \else \Anylefttrue \unskip \fi
+ \ifAnyleft \repeat}
+
+\def\@duplicate{%
+ \loop \Anyleftfalse
+ \ifdim\lastskip=\z@ \ifdim\lastkern=\z@ \ifnum\lastpenalty=\z@
+ \global\setbox\z@=\lastbox \ifvoid\z@ % end of breakup loop
+ \else \Anylefttrue % box present
+ \ifnum\lin@rem=\z@ % if remainder non-zero we do not care
+ \lin@rem=\lineCountInterval
+ \ifnum\lin@Count<\lin@CountStart
+ \a@@lnumfalse
+ \else
+ \ifnum\lin@CountFinish<\z@ % no upper bound
+ \a@@lnumtrue % print it
+ \else
+ \ifnum\lin@Count>\lin@CountFinish
+ \a@@lnumfalse
+ \else
+ \a@@lnumtrue % this is the ticket
+ \fi
+ \fi
+ \fi
+ \else
+ \a@@lnumfalse
+ \fi
+% Position shorter lines to keep indentation. Only a line length
+% is important
+% This prints indented lines flush right margin
+ \setbox\z@=\vbox{\hbox to\textwidth{\hfil\box\z@}}
+% This for centered lines
+% \setbox\z@=\vbox{\hbox to\textwidth{\hfil\box\z@\hfil\relax}}
+% For other variants you are on your own!!
+ \ifa@@lnum
+ \append@line
+ \else
+ \global\setbox\@ne=\vbox{\box\z@\unvbox\@ne}
+ \fi
+ \advance\lin@Count\m@ne
+ \advance\lin@rem by\m@ne\fi
+ \else \Anylefttrue % penalty present
+ \pen=\lastpenalty
+ \global\setbox\@ne=\vbox{\penalty\pen\unvbox\@ne}\unpenalty\fi
+ \else \Anylefttrue % kern present
+ \dimen\z@=\lastkern
+ \global\setbox\@ne=\vbox{\kern\dimen\z@\unvbox\@ne}\unkern \fi
+ \else \Anylefttrue % skip present
+ \skip\z@=\lastskip
+ \global\setbox\@ne=\vbox{\vskip\skip\z@\unvbox\@ne}\unskip \fi
+ \ifAnyleft \repeat}
+
+\def\append@line{% attach line number
+ \setbox2=\vbox to \z@{\smash{\footnotesize\the\lin@Count}}
+ \wd2=25pt % that much of space for a line number
+ \if@twoside % we are printing twoside
+ \ifodd\count\z@ % on the right margin for odd pages
+ \setbox\z@=\hbox{\box\z@\rlap{\rule{\wd2}{\z@}\box2}}
+ \else % and on the left for even
+ \setbox\z@=\hbox{\llap{\box2}\box\z@}
+ \fi
+ \else % one sided printing
+ \setbox\z@=\hbox{\llap{\box2}\box\z@} % left margin only
+ \fi
+ \global\setbox\@ne=\vbox{\box\z@\unvbox\@ne}}% add this to a reconstructed
+ % page
+
+% Rainer showed me how to save the previous \output. Thanks Rainer. (jaf)
+\newtoks\LaTeX@output
+\LaTeX@output = \expandafter{\the\output}
+
+\newbox\brk
+
+\output={\ifnum\outputpenalty <-\@M
+ \output={\LaTeX@output} % Use old output definition if page
+ % is not to be output
+ \else
+ \lin@Count=\lin@sSoFar
+ \setbox\brk=\vbox{\unvcopy\@cclv\count@lines}
+ \global\setbox\@ne=\vbox{}
+ \lin@rem=\total@Rem
+ \iflnumpage
+ \resetlin@sSoFar
+ \else
+ \global\lin@sSoFar=\lin@Count
+ \fi
+ \setbox\brk=\vbox{\unvcopy\@cclv\@duplicate}
+ \ifdim\ht\brk>\z@\message{Incomplete breakup}\fi
+ \ht\@ne=\z@\dp\@ne=\z@
+ \global\setbox\@cclv=\vbox to\vsize{\unvbox\@ne}% attempt to get glues back
+ \@makecol\@opcol
+ \fi
+\setbox\brk=\box\@cclv
+\deadcycles=\z@
+}
+
+\endinput
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Save up to \end{document} in a separate file and use as a playground
+%% for testing
+
+\ifx\documentclass\undefined
+\documentstyle[numline% %% This is LaTeX 2.09
+%,indent% %% uncomment this line if you have indent.sty
+]{article}
+\else
+\documentclass{article} %% LaTeX2e header
+\usepackage{numline%
+%,indent% %% uncomment this line if you have indent.sty
+}
+\fi
+
+\newcommand\testtext{%
+This is the test. This is the test. This is the test. This is the
+test. This is the test. This is the test. This is the test. This
+is the test. This is the test. This is the test. This is the test.
+}
+\let\oldSection=\section
+%\renewcommand{\section}[1]{\vbox{\vspace{3.5ex}\oldSection{#1}}}
+\def\section#1 \label#2{\vbox{\vspace{3.5ex}\oldSection{#1}\label{#2}}}
+
+%\lnumpagetrue % Uncomment this to restart lines numbers at every page
+%\lineCountInterval=1 % default is 5
+\begin{document}
+
+% This gives only a length of indented line - not a position.
+% See comments in numline.sty
+
+\section{Section one}
+\label{sec-start}
+
+\testtext
+
+% This gives only a length of indented line - not a position.
+% See comments in numline.sty
+% Uncomment following four lines if you are using indent.sty
+%indent%\begin{indentation}{3em}{0cm}
+%indent% \noindent\testtext
+%indent% \testtext
+%indent%\end{indentation}
+
+\testtext\testtext\testtext\testtext\testtext\testtext
+\begin{minipage}{\textwidth}
+ \begin{displaymath}
+ 2 \times 2 = 4
+ \end{displaymath}
+\end{minipage}
+
+\testtext
+\par\noindent\parbox{\textwidth}{%
+ \begin{displaymath}
+ 2 \times 2 = 4
+ \end{displaymath}
+}
+
+\testtext\testtext\testtext\testtext\testtext\testtext\testtext\testtext
+
+\section{Another section}
+\label{sec-too}
+
+\testtext\testtext\testtext\testtext\testtext
+
+\par\noindent\parbox{\textwidth}{
+ \begin{displaymath}
+ \left(
+ \begin{array}{c}
+ a \\ b
+ \end{array}
+ \right[
+ \end{displaymath}
+}
+\testtext\testtext\testtext\testtext\testtext\testtext
+
+\end{document}
+
+DREADED INCOMPLETE BREAKUP AND OTHER PASTIMES
+
+The code for line numbering works by splitting an already set page
+into separate lines and by putting resulting boxes together with their
+line numbers. One difficulty with that is that is not always clear on
+a typeset page what constitutes a ``line''. The other, related to
+some extent, is that TeX does not have tools to accomplish required
+split in every situation; you will see then ``Incomplete breakup''
+message and part of your input will vanish from dvi file.
+
+It is usually possible to work around this limitation by hiding
+troublesome elements in boxes. \minipage and \parbox will serve very
+well. These two methods do not have the same effect and, depending on
+circumstances, one or another may be preferable. Test input provides
+an example for displayed formulas.
+
+Sectioning commands will likely cause trouble as well. You may write
+something like ``\vbox{\vspace{3.5ex}\section{Another section}}'' in
+place of an original ``\section{Another section}''. These are NOT
+equivalent, but when you are numbering lines presumably you are not
+creating a masterpiece of a typography and such replacement should be
+good enough.
+
+In a longer document meant to be typed with and without numbered lines
+changes like above can be troublesome. Instead you can try re-defini-
+tions which can be used conditionally. Here is how ``\section'' can be
+redone:
+
+\let\oldSection=\section
+\renewcommand{\section}[1]{\vbox{\vspace{3.5ex}\oldSection{#1}}}
+
+(making this work with optional arguments is left as an exercise :-).
+This still will not work on section titles with labels. One can use
+then a redefinition like in the sample text:
+
+\let\oldSection=\section
+\def\section#1 \label#2{\vbox{\vspace{3.5ex}\oldSection{#1}\label{#2}}}
+
+Warning: This approach requires rather specific section headers. Every
+``\section{...}'' has to be followed by ``\label{...}'' separated by
+white space and/or one new-line.
+
+Go and number your lines.
diff --git a/obsolete/macros/latex/contrib/physymb/README b/obsolete/macros/latex/contrib/physymb/README
new file mode 100644
index 0000000000..b13d73e14f
--- /dev/null
+++ b/obsolete/macros/latex/contrib/physymb/README
@@ -0,0 +1,39 @@
+ ======================== physymb ============================
+ Created by David Zaslavsky <diazona@ellipsix.net>
+
+THIS PACKAGE IS OBSOLETE
+
+Instead of physymb you should use some or all of these packages:
+
+* braket
+* commath
+* hepnames
+* mandi
+* physics
+* siunitx
+
+For more on what each of these packages provides, see the package's
+documentation and/or the documentation of physymb.
+
+This package contains four files:
+
+* README: This file :)
+* physymb.pdf: The PDF documentation, which details all the macros
+ defined by the package.
+* physymb.dtx: The documented source. Running pdflatex on this
+ reproduces the PDF documentation.
+* physymb.ins: The installer file. Running latex or pdflatex on
+ this will generate the actual package file, physymb.sty.
+
+To install the package, it should be enough to just copy physymb.sty
+to the tex/latex/physymb/ directory (which you may need to create)
+within your local TDS tree, which is typically $HOME/texmf/ on
+a Linux system. The location varies on Windows. It's also recommended
+to copy physymb.pdf into doc/latex/physymb/ under the TDS tree.
+
+If you don't know what a TDS tree is, or want to have this explained
+in more detail, see
+http://www.tex.ac.uk/cgi-bin/texfaq2html?label=instpackages
+
+physymb is licensed under the LaTeX Project Public License,
+version 1.3 or later.
diff --git a/obsolete/macros/latex/contrib/physymb/physymb.dtx b/obsolete/macros/latex/contrib/physymb/physymb.dtx
new file mode 100644
index 0000000000..7a13e14ef0
--- /dev/null
+++ b/obsolete/macros/latex/contrib/physymb/physymb.dtx
@@ -0,0 +1,1131 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2005-2014 by David Zaslavsky <diazona@ellipsix.net>
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is David Zaslavsky
+%
+% This work consists of the files physymb.dtx and physymb.ins
+% and the derived files physymb.sty and physymb.pdf.
+%
+% \fi
+
+% \iffalse
+%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+%<package>\ProvidesPackage{physymb}[2014/12/19 v0.3 Physics symbol definitions]
+%
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage[boldvectors,units,particle,braket,mandi]{physymb}
+\usepackage{hyperref}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+ \DocInput{physymb.dtx}
+\end{document}
+%</driver>
+% \fi
+
+% \CheckSum{649}
+%% \CharacterTable
+%% {Upper-case \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
+%% Lower-case \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
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%
+% \changes{v0.1}{2010/12/15}{Conversion from sty to dtx}
+% \changes{v0.2}{2011/05/09}{Switched to braket and siunitx as external packages}
+% \changes{v0.2}{2011/05/09}{Implemented the particle option}
+% \changes{v0.2}{2011/05/09}{Switched to dotless i and j in unit vectors}
+% \changes{v0.2}{2011/05/09}{Documented changes to |\real| and |\imag|}
+% \changes{v0.3}{2013/04/02}{Fix compatibility issues with mandi}
+% \changes{v0.3}{2014/10/15}{Deprecate package}
+%
+% \GetFileInfo{physymb.sty}
+%
+% \DoNotIndex{\#,\$,\%,\&,\@,\\,\{,\},\^,\_,\~,\ }
+% \DoNotIndex{\accentset,\allowdisplaybreaks}
+% \DoNotIndex{\bar,\boolean}
+% \DoNotIndex{\cos,\cubic}
+% \DoNotIndex{\dagger,\DeclareFontShape,\DeclareMathAlphabet,\DeclareMathOperator}
+% \DoNotIndex{\DeclareOption,\DeclareSIUnit,\Delta}
+% \DoNotIndex{\ell\ensuremath,\equal}
+% \DoNotIndex{\frac}
+% \DoNotIndex{\gamma}
+% \DoNotIndex{\hat}
+% \DoNotIndex{\ifthenelse}
+% \DoNotIndex{\joule}
+% \DoNotIndex{\Lambda,\langle,\left,\lVert,\lvert}
+% \DoNotIndex{\mathbb,\mathbf,\mathcal,\mathcalligra,\mathrm,\meter,\mu}
+% \DoNotIndex{\nabla,\newboolean,\newcommand,\nu}
+% \DoNotIndex{\Omega,\omega}
+% \DoNotIndex{\partial,\per,\phi,\pi,\ProcessOptions}
+% \DoNotIndex{\rangle,\relax,\renewcommand,\RequirePackage,\rho,\right,\rightharpoonup}
+% \DoNotIndex{\rpcubic,\rVert,\rvert}
+% \DoNotIndex{\setboolean,\Sigma,\sin,\star}
+% \DoNotIndex{\tan,\tau,\theta,\times}
+% \DoNotIndex{\unit}
+% \DoNotIndex{\vert}
+% \DoNotIndex{\Xi}
+%
+% \title{The \textsf{physymb} package\thanks{This document corresponds to \textsf{physymb}~\fileversion, dated~\filedate.}}
+% \author{David Zaslavsky \\ \texttt{diazona@ellipsix.net}}
+%
+% \maketitle
+% \begin{abstract}
+% \textbf{This package is obsolete.}
+% The |physymb| package contains a bunch of simple macro definitions that
+% may be useful for typesetting physics papers or other things.
+% All the useful macros are implemented by other packages, which you should
+% use directly instead of |physymb|.
+% \end{abstract}
+%
+% It has come to my attention that other packages provide much the same functionality
+% as |physymb|, so I am marking the package obsolete. Here are some packages you
+% can use instead of |physymb|:
+% \begin{description}
+% \item[|physics|] gives differentials and derivatives, various sorts of paired
+% delimiters including absolute value and vector norm, vector calculus operators
+% including div, grad, and curl, inverse trigonometric functions, Dirac notation
+% and matrix notation
+% \item[|commath|] gives differentials, derivatives, and various sorts of paired
+% delimiters
+% \item[|braket|] gives Dirac notation
+% \item[|siunitx|] gives units and scientific notation
+% \item[|hepnames|] gives elementary particles
+% \item[|mandi|] gives inverse trig functions, signum, unit vectors, vector
+% calculus including div, grad, and curl, and the Griffiths script r. |mandi|
+% also provides elementary unit typesetting, but I consider |siunitx| to be
+% superior for that purpose. It also provides notation for differentials and
+% derivatives, but the implementations in |commath| or |physics| are probably
+% easier to use.
+% \end{description}
+% Many macros in |physymb| are now implemented in terms of these other packages.
+%
+% I will leave |physymb| up on CTAN so old documents can still be compiled.
+% However, there will be no further updates to this package (unless someone
+% reports a bug and makes a convincing case that ``use other packages'' is not
+% an acceptable workaround).
+%
+% For the rest of this documentation, when there are a bunch of similar macros
+% that I explain together, I've usually only listed one or two in the left margin.
+% In these cases, all the macros are given in the text.
+%
+% \section{Options}
+%
+% |physymb| recognizes the following options, in no particular order.
+%
+% \begin{itemize}
+% \item |arrowvectors| causes vectors (specifically, the |\vec| command) to be rendered
+% with an arrow above the symbol.
+% \item |boldvectors| causes vectors (again, from |\vec|) to be rendered by typesetting
+% the symbol in bold. It's the alternative to |arrowvectors|.
+% \item |braket| pulls in the |braket| package. (It's precisely equivalent to
+% |\usepackage{braket}|, it's just here for convenience.)
+% \item |feynman| pulls in the |feynmp| package. (It's precisely equivalent to
+% |\usepackage{feynmp}|, it's just here for convenience.)
+% \item |overridemandi| is only relevant if you are using |physymb| and the |mandi|
+% package in the same document, and only if you load |physymb| after |mandi|. If you do,
+% specifying this option causes certain macros in physymb to be defined in a way that
+% will override the definitions of the same macros from |mandi|. Otherwise, the
+% definitions of those commands in |physymb| will be skipped, leaving the definitions in
+% |mandi| to be used. The affected macros are |\evalat|, |\curl|, and |\abs|. (If you
+% specify this option when |mandi| has not been loaded, it has no effect, but a warning
+% will be printed in the log.)
+% \item |particle| enables all the particle physics macros.
+% \item |units| pulls in the |siunitx| package and enables the additional unit macros.
+% \end{itemize}
+%
+% \section{Macros}
+%
+% \subsection{Trigonometry}
+%
+% \DescribeMacro{\asin}
+% \DescribeMacro{\acos}
+% The AMS packages only define inverse trigonometric functions using the ``arc''
+% syntax, i.e. they actually prefix ``arc'' to the name (as in $\arcsin x$).
+% Sometimes you'd rather write them with a superscript $-1$ to save space, so
+% those versions are imported from the |mandi| package. We have the inverse
+% functions |\asin|, |\acos|, |\atan|, |\asec|, |\acsc|, and |\acot|.
+%
+% \DescribeMacro{\sech}
+% \DescribeMacro{\cosh}
+% For some reason, the hyperbolic sine and cosine |\sech| and |\cosh| aren't
+% defined in the AMS packages, but they are defined in |mandi| and those
+% definitions are incorporated here.
+%
+% \DescribeMacro{\asinh}
+% \DescribeMacro{\acosh}
+% Finally, the inverse hyperbolic trig functions written with the superscript
+% $-1$ are defined just as with the regular inverse trig functions. We have
+% |\asinh|, |\acosh|, |\atanh|, |\asech|, |\acsch|, and |\acoth|, again all
+% imported from |mandi|.
+%
+% \subsection{Sets}
+%
+% There are certain sets of numbers that are semi-frequently referenced in physics.
+% Typically they're used to say something like $n\in\intset$. Of course, a
+% macro like |\intset| is not necessarily much quicker than writing
+% |\mathbb{Z}|, but these macros are intended to have names that relate to
+% their meanings so that you don't have to remember which letter goes to which set.
+%
+% \DescribeMacro{\whlset}
+% |\whlset| ($\whlset$) denotes the set of whole numbers, which is typically
+% defined to include all integers greater than zero, although there are different
+% contradictory definitions floating around.
+%
+% \DescribeMacro{\natset}
+% |\natset| ($\natset$) denotes the set of natural numbers, which is typically
+% defined to include all integers greater than or equal to zero. Some people
+% define ``natural numbers'' to exclude zero.
+%
+% \DescribeMacro{\intset}
+% |\intset| ($\intset$) denotes the set of all integers.
+%
+% \DescribeMacro{\realset}
+% |\realset| ($\realset$) denotes the set of all real numbers.
+%
+% \DescribeMacro{\imagset}
+% |\imagset| ($\imagset$) denotes the set of all imaginary numbers, which is
+% all complex numbers with real part equal to zero. This one is infrequently
+% used.
+%
+% \DescribeMacro{\cpxset}
+% |\cpxset| ($\cpxset$) denotes the set of all complex numbers.
+%
+% \subsection{Calculus}
+%
+% Probably the most useful macros in the package are the derivative operators.
+% Since it's so common to write something of the form $\ud{y}{x}$ or $\pd{y}{x}$,
+% we have two-character macros for each:
+% \begin{itemize}
+% \item \DescribeMacro{\ud} |\ud|\marg{top}\marg{bottom} typesets the normal total derivative
+% \item \DescribeMacro{\pd} |\pd|\marg{top}\marg{bottom} typesets a partial derivative, which
+% is the same thing but with a partial derivative symbol instead of the $\udc$.
+% \end{itemize}
+% \DescribeMacro{\udd}
+% \DescribeMacro{\uddd}
+% \DescribeMacro{\pdd}
+% \DescribeMacro{\pddd}
+% There are variants of these that produce higher-order derivatives; you can add
+% an order by adding another |d|, up to a total of three. These are implemented as
+% wrappers around |\od| and |\pd| from the |commath| package.
+% If you need something higher than the third derivative, you're probably best off
+% using the |commath| macros directly, with their optional argument giving the order
+% of the derivative.
+%
+% \DescribeMacro{\udc}
+% \DescribeMacro{\pdc}
+% The macro |\udc| gives you the character that represents a differential. It's typically
+% set in roman type to distinguish it from a variable. |\pdc| is also defined as the
+% partial derivative character for consistency. There are variants of each with exponents
+% (up to 3) built in; again, you get them by adding an extra |d| or two to the name of the
+% command, |\uddc| and |\udddc| and so on.
+%
+% \DescribeMacro{\uds}
+% \DescribeMacro{\pds}
+% If you're using these in an integral, it's common to want a small space before the
+% differential, so there are variants of the preceding commands defined that include
+% this small space for you; they replace the |c| with an |s|. They follow the same
+% pattern of adding additional |d|'s to get exponents. For example:
+%
+% \begin{minipage}{.64\textwidth}
+% \begin{center}
+% |\iint e^{i\vec{k}\cdot\vec{x}}\udds\vec{x}|
+% \end{center}
+% \end{minipage}
+% \begin{minipage}{.34\textwidth}
+% \begin{equation*}
+% \iint e^{i\vec{k}\cdot\vec{x}}\udds\vec{x}
+% \end{equation*}
+% \end{minipage}
+%
+% \subsection{Vector Calculus}
+%
+% \DescribeMacro{\div}
+% \DescribeMacro{\grad}
+% \DescribeMacro{\curl}
+% |\physymb| defines |\div|, |\grad|, and |\curl|, to represent the
+% divergence, gradient, and curl, in terms of the corresponding macros
+% from |mandi|.
+%
+% \DescribeMacro{\lapl}
+% There is also a macro for the Laplacian operator (divergence of a
+% gradient), |\lapl|, again defined in terms of the macro from |mandi|.
+%
+% \subsection{Complex Analysis}
+%
+% \DescribeMacro{\conj}
+% There is a macro to indicate the conjugate of a number, |\conj|\marg{number}.
+% It puts a superscript star after the number, as in $\conj{z}$.
+%
+% \DescribeMacro{\realop}
+% \DescribeMacro{\imagop}
+% The traditional keywords indicating the real and imaginary parts of a complex number
+% are given macros |\realop| and |\imagop|. They typeset $\realop$ and $\imagop$
+% respectively.
+%
+% \DescribeMacro{\real}
+% \DescribeMacro{\imag}
+% Why the |op|? Well, there are alternate versions that will also put curly braces
+% around the following argument, |\real| and |\imag|. This is the way $\realop$ and
+% $\imagop$ are often used. (I'm open to changing the definitions of these based on
+% feedback.)
+%
+% \begin{minipage}{.64\textwidth}
+% \begin{center}
+% |\real{z}, \imag{z}|
+% \end{center}
+% \end{minipage}
+% \begin{minipage}{.34\textwidth}
+% \begin{equation*}
+% \real{z}, \imag{z}
+% \end{equation*}
+% \end{minipage}
+%
+% \DescribeMacro{\abs}
+% The macro |\abs|\marg{value} surrounds its argument with vertical bars.
+% It is simply imported from |mandi|.
+%
+% \subsection{Linear Algebra}
+%
+% There are several assorted macros for linear algebra keywords and concepts.
+%
+% \DescribeMacro{\vec}
+% \DescribeMacro{\vecvar}
+% Vectors can be written using the macro |\vec|\marg{label}, which typesets
+% the \meta{label} either in bold or with an arrow over it, according to which
+% option was passed to the package (|arrowvectors| or |boldvectors|).
+% The default is to use an arrow, to resemble the builtin definition of
+% |\vec| (which, by the way, is overridden by this package). In many cases
+% I prefer bold. |\vecvar|\marg{label} is another macro that does the exact
+% same thing, for consistency with the other kinds of variables.
+%
+% \DescribeMacro{\tnsvar}
+% The macro |\tnsvar|\marg{label} is for typesetting tensors. This just makes
+% the \meta{label} bold, it doesn't do anything with indices. If you want a way
+% to typeset tensor indices, look at the
+% \href{http://tug.ctan.org/cgi-bin/ctanPackageInformation.py?id=tensor}{tensor}
+% package.
+%
+% \DescribeMacro{\matvar}
+% |\matvar|\marg{label} is intended to designate matrices. It makes the label
+% bold.
+%
+% \DescribeMacro{\identitym}
+% The macro |\identitym| represents the identity matrix. It typesets a 1 in
+% the same style as |\matvar| (so, bold).
+%
+% \DescribeMacro{\determinant}
+% The macro |\determinant|\marg{matrix} uses vertical bars to denote the determinant
+% of the \meta{matrix}. It's an alternative to the keyword operator |\det|, which
+% just typesets as $\det$.
+%
+% \DescribeMacro{\trace}
+% The macro |\trace| just typesets $\trace$. It's akin to |\det|.
+%
+% \DescribeMacro{\diag}
+% This just typesets $\diag$, which is used to represent a matrix with the given entries
+% on the diagonal. For example, one might write |\diag(1,2,3,4)|.
+%
+% \DescribeMacro{\norm}
+% The norm of a vector can be denoted by double vertical bars. This is implemented by
+% |\norm|\marg{value}.
+%
+% \DescribeMacro{\unitx}
+% \DescribeMacro{\unity}
+% \DescribeMacro{\unitz}
+% Since it's so common to refer to unit vectors using hat notation, there are a
+% bunch of macros for them using various letters. The package defines |\unitd|,
+% |\unite|, |\uniti|, |\unitj|, |\unitk|, |\unitl| (which typesets as $\unitl$,
+% not the normal $l$), |\unitn|, |\unitp|, |\unitq|, |\unitr|, |\units|, |\unitt|,
+% |\unitu|, |\unitv|, |\unitw|, |\unitx|, |\unity|, |\unitz|, and for non-roman
+% characters, |\unitphi|, |\unitrho|, |\unittheta|, and |\unitomega|.
+% \DescribeMacro{\unitvec}
+% If you want to use a different letter as a unit vector, it can be done with
+% |\unitvec|\marg{symbol}.
+%
+% \DescribeMacro{\herm}
+% |\herm|\marg{operator} designates the hermitian conjugate of an operator with
+% a superscript dagger.
+%
+% \DescribeMacro{\transpose}
+% |\transpose|\marg{matrix} sets a superscript $T$ after the matrix to denote
+% the transpose.
+%
+% \DescribeMacro{\commut}
+% \DescribeMacro{\acommut}
+% There are simple macros for the commutator, |\commut|\marg{operator}\marg{operator},
+% and the anticommutator, |\acommut|\marg{operator}\marg{operator}. They just
+% put the appropriate kind of braces around the arguments (and the comma between
+% them, of course).
+%
+% \subsection{Differential Geometry}
+% \DescribeMacro{\exd}
+% The exterior derivative has a macro, |\exd|, kind of like the macro for differentials
+% ($\udc$) although typeset in bold to distinguish it. This one doesn't have any variants,
+% though, because $\exd^2 = 0$.
+%
+% \DescribeMacro{\hodge}
+% The macro |\hodge| just puts a star (not superscript) to represent the Hodge dual.
+% Use it as a prefix to the variable, $\hodge\exd x$.
+%
+% \subsection{Classical Mechanics}
+%
+% \DescribeMacro{\pbrac}
+% The Poisson brackets of a pair of variables can be typeset using the macro
+% |\pbrac|\marg{function}\marg{function}. This just surrounds the two arguments
+% with curly braces, producing $\pbrac{f}{g}$.
+%
+% \DescribeMacro{\pbracvars}
+% If you want to specify which variables the derivatives in the Poisson brackets
+% are being taken with respect to, use the variant
+% \begin{center}
+% |\pbracvars|\marg{function}\marg{function}\marg{variable}\marg{variable}
+% \end{center}
+% It comes out looking like $\pbracvars{f}{g}{q}{p}$.
+%
+% \subsection{Quantum Mechanics}
+%
+% If the |braket| option is passed, |physymb| pulls in the |braket| package for
+% writing Dirac notation. See the documentation for that package for details.
+%
+% Additionally, two semantic macros are provided as alternate names for certain
+% combinations of bras and kets:
+%
+% \DescribeMacro{\expect} To get an expectation value (an on-diagonal matrix element with
+% the state left implicit, $\expect{A}$), use |\expect|\marg{operator}. This is just an
+% alternate name for |braket|'s |\braket|\marg{operator}; the only reason to use it is
+% to make it clear what you meant to someone reading your source code. (A very good reason,
+% as far as I'm concerned) You can put an arbitrary expression within |\expect|, but don't
+% use vertical bars because then it'll look like a matrix element $\expect{\psi|A|\psi}$.
+%
+% \DescribeMacro{\Expect} |\Expect| is the same as |\expect| except that it scales the angle
+% brackets using |\left| and |\right|.
+%
+% \DescribeMacro{\project} For a projection operator (outer product between a state and itself),
+% we have the command |\project|\marg{label}\marg{value}, which comes out as $\project{\psi}{x}$.
+% To get a general outer product between two different states, use |\bra| and |\ket|,
+% \begin{center}
+% |\ket{|\meta{ket label}|}|\meta{value}|\bra{|\meta{bra label}|}|
+% \end{center}
+%
+% \DescribeMacro{\Project} Again, |\Project| is just like |\project| except that it scales the
+% delimiters.
+%
+% \subsection{Units}
+%
+% If the |units| option is provided to |physymb|, it automatically includes the
+% |siunitx| package and defines some additional units that are often useful in practice.
+% See the documentation of |siunitx| for commands provided by that package.
+%
+% \paragraph{Additional units} The |siunitx| package only includes SI units (as
+% the name would suggest), but there are certain non-SI units that turn out to
+% be occasionally useful when dealing with American non-scientists. |physymb|
+% defines a selection of them as macros.
+%
+% \DescribeMacro{\torr}
+% \DescribeMacro{\mmHg}
+% Torr, |\torr|, and millimeters of mercury, |\mmHg|, are common atmospheric pressure units.
+%
+% \DescribeMacro{\amu}
+% |\amu| represents the atomic mass unit, defined as $\frac{1}{12}$ of the mass of a carbon 12
+% atom.
+%
+% \DescribeMacro{\yr}
+% |\yr| represents a year with the symbol $\si{\yr}$. There are various definitions of
+% different kinds of years floating around, but generally the symbol is the same.
+%
+% \DescribeMacro{\erg}
+% |\erg| represents an erg, the CGS unit of energy, which still finds occasional use.
+% Its value is $\SI{1e-7}{\joule}$.
+%
+% \DescribeMacro{\gauss}
+% |\gauss| is the Gauss, a unit of magnetic field equal to $\SI{1e-4}{\tesla}$.
+%
+% \DescribeMacro{\molar}
+% |\molar| represents a molar, a unit of concentration equal to one mole per liter.
+% Strictly speaking, this is a chemistry unit, but it occasionally comes up in
+% physics so it shouldn't hurt to have the macro around.
+%
+% \DescribeMacro{\poise}
+% The poise is the CGS unit of viscosity, equal to $\SI{0.1}{\pascal\second}$.
+%
+% \DescribeMacro{\foot}
+% The foot is the Imperial unit of length, equal to $\SI{30.48}{\centi\meter}$.
+%
+% \DescribeMacro{\mileperhour}
+% This is typically (or perhaps almost exclusively) used to measure transportation
+% speeds: cars, trains, airplanes, etc. It's equal to about
+% $\SI{0.447}{\meter\per\second}$.
+%
+% \DescribeMacro{\pound}
+% \DescribeMacro{\poundforce}
+% The pound is the Imperial unit of either force or mass, depending on who you
+% ask. Technically I believe it is a force, but in many situations
+% I've often found it clearer to treat it as a unit of mass and use $\si{\poundforce}$
+% (pound of force) as the unit of force. |physymb| defines macros for both.
+%
+% In this sense, a pound is equal to about
+% $\SI{453.59}{\gram}$, and the pound of force is the weight of that mass
+% under standard Earth surface gravity, which works out to about
+% $\SI{4.448}{\newton}$.
+%
+% \subsection{Particle Physics}
+%
+% As a particle physicist, I do a lot of work that involves notation for elementary particles,
+% so it's become useful to have a set of macros that produce standard written representations
+% for them. The names of the commands are pretty cryptic, but I've found that once you get
+% used to using them, the names aren't hard to remember and the effort saved by having short
+% macro names at least \emph{feels} worthwhile.
+%
+% The macros in this package are implemented in terms of the |heppennames| macros. |heppennames|
+% and |hepparticles| will be loaded if the |particles| option is passed to this package.
+%
+% In general, all the macro names follow the same pattern. Each one ends with a type
+% code that identifies the type of particle: |q| for quark, |lp| for a ``regular'' lepton,
+% |nu| for a neutrino, |br| for a baryon, |m| for a meson, and |bsn| for a boson. At the
+% beginning is a particle code consisting of one or two letters that identify the specific
+% particle within that type.
+%
+% Most of the basic macros consist of just those two parts. Antifermion macros are
+% constructed by prepending an |a| to the type code. For vector bosons that occur in
+% charge triplets, you prepend one of |p| (plus), |z| (zero), or |m| (minus) to indicate
+% which one of the triplet you want. The same goes for baryons which occur in ``triplets''
+% with the same name (three particles denoted by the same letter, even though they
+% may not actually be a triplet). Singlet baryons have the |z| as well for consistency.
+%
+% The proton and neutron are named differently because their names are so common.
+%
+% \paragraph{Quarks}
+% \DescribeMacro{\upq}
+% \DescribeMacro{\dnq}
+% Each of the quark macros is named with three letters. The first two letters are the
+% particle code representing the name of the quark, and the third is the type code |q|.
+% The macros are |\upq|, |\dnq|, |\srq|, |\chq|, |\btq|, and |\tpq|, representing the
+% up, down, strange, charm, bottom, and top quarks, respectively.
+%
+% \DescribeMacro{\upaq}
+% \DescribeMacro{\dnaq}
+% The corresponding macros for the antiquarks are obtained by prepending |a| to the
+% type code |q|. We have |\upaq|, |\dnaq|, |\sraq|, |\chaq|, |\btaq|, and |\tpaq|.
+%
+% \paragraph{Leptons}
+% \DescribeMacro{\elp}
+% \DescribeMacro{\enu}
+% Leptons are done a little differently because there are two distinct types. The macros for
+% the electron, muon, and tau lepton are named with a letter and |lp|: we have |\elp| for the
+% electron, |\ulp| for the muon, and |\tlp| for the tau. Neutrino macros are constructed
+% using the same first letter, but |nu| instead of |lp|: |\enu|, |\unu|, and |\tnu|.
+%
+% \DescribeMacro{\ealp}
+% \DescribeMacro{\eanu}
+% Antileptons are named with an |a| between the particle code and the type code.
+% So we get |\ealp|, |\ualp|, and |\talp| for the ``regular'' antileptons and
+% |\eanu|, |\uanu|, and |\tanu| for the antineutrinos.
+%
+% \paragraph{Baryons}
+% \DescribeMacro{\lmzbr}
+% \DescribeMacro{\sgpbr}
+% \DescribeMacro{\sgzbr}
+% \DescribeMacro{\sgmbr}
+% Many of the most commonly referenced baryons in the standard model have
+% macros defined. Each of these ends with the type code |br|. Most of them are built
+% by putting a particle code and a charge letter together: we have |\lmzbr| for the
+% lambda baryon; |\sgpbr|, |\sgzbr|, |\sgmbr| for the sigmas, |\xizbr| and |\ximbr|
+% for the xi particles, and |\ommbr| for the omega of charge $-1$. The delta macros
+% are named on the same principle but since there are four of them, we use two charge
+% letters to indicate the $+2$ charge: |\dlppbr|, |\dlpbr|, |\dlzbr|, and |\dlmbr|.
+%
+% \DescribeMacro{\sgspbr}
+% \DescribeMacro{\sgszbr}
+% \DescribeMacro{\sgsmbr}
+% In addition, there are macros for the starred (excited) versions of the sigmas and
+% xis (only), obtained by adding an |s| before the charge letter: |\sgspbr| etc. and
+% |\xiszbr| etc.
+%
+% \DescribeMacro{\prbr}
+% \DescribeMacro{\nebr}
+% The proton and neutron don't quite fall into the pattern because their names aren't
+% used for multiple particles. The proton is |\prbr| and the neutron is |\nebr|.
+%
+% \DescribeMacro{\dlmmabr}
+% The antiparticles to all these are obtained in \emph{almost} the usual way, by
+% adding |a| just before the type code |br|. The one difference is that the charge
+% letters are updated to reflect the actual charge of the antiparticle, so for example
+% the antipartcle of the $\dlppbr$ (|\dlppbr|), the $\dlmmabr$, is written |\dlmmabr|,
+% with two |m|'s because of its double-minus charge.
+%
+% \paragraph{Mesons}
+% \DescribeMacro{\pipm}
+% \DescribeMacro{\pizm}
+% \DescribeMacro{\pimm}
+% Essentially all the mesons defined in the standard model have macros. The naming can
+% be a bit tricky because some of them are named as charge triplets while others are
+% named as antiparticles. In the former case, we have the $\pi$s, |\pipm|, |\pizm|, and |\pimm|,
+% and the $\rho$s, |\ropm|, |\rozm|, and |\romm|. (I'm not sure if it'd make it cleaner
+% to just add the |h| into the names) The kaons have similar names, |\kapm|,
+% |\kazm|, and |\kamm|, but there is also the $\kazam$, |\kazam|. Finally, the neutral
+% mesons are named |\etam|, |\etapm| (here the |p| is for ``prime,'' not ``plus''), and
+% |\phim|.
+%
+% \paragraph{Bosons}
+% \DescribeMacro{\phbsn}
+% \DescribeMacro{\Wpbsn}
+% \DescribeMacro{\Wmbsn}
+% There aren't that many bosons so the naming is simple: |\phbsn| for the photon,
+% |\Zzbsn| for the neutral $\Zzbsn$, and |\Wpbsn| and |\Wmbsn| for the $\Wbsn$s. There's
+% also |\Wbsn|, which does not indicate either charge, for when you need to refer to
+% a generic $\Wbsn$ boson. The Higgs boson is written |\hbsn|.
+%
+% \DescribeMacro{\photon}
+% Also, there is a macro |\photon| which is defined to be the same thing as |\phbsn|.
+% It's included to support some old LaTeX files I wrote and although it will
+% \emph{probably} not be removed from the package in the future, I make no guarantees.
+%
+% \subsection{Miscellaneous}
+%
+% \DescribeMacro{\scriptr} |\scriptr| produces the script r found in Griffiths'
+% electromagnetism textbook, or at least the closest equivalent in LaTeX, $\scriptr$.
+%
+% \DescribeMacro{\orderof} |\orderof|\marg{expression} represents the order of an
+% expression, for example the error term in a perturbation series. Typical usage
+% would be like
+%
+% \begin{minipage}{.64\textwidth}
+% \begin{center}
+% |\frac{1}{1 - x} = 1 + x + \orderof{x^2}|
+% \end{center}
+% \end{minipage}
+% \begin{minipage}{.34\textwidth}
+% \begin{equation*}
+% \frac{1}{1 - x} = 1 + x + \orderof{x^2}
+% \end{equation*}
+% \end{minipage}
+%
+% It can also be used to discuss the growth of a function, e.g.
+% ``$\orderof{x^3}$ for large $x$,'' or for similar uses such as big-O notation
+% in computer algorithm analysis.
+%
+% \DescribeMacro{\sgn}
+% There is a macro for the sign operator, |\sgn|, defined as
+% \begin{equation*}
+% \sgn x = \begin{cases}1 & x > 0 \\ 0 & x = 0 \\ -1 & x < 0\end{cases}
+% \end{equation*}
+% (and yes, this is not really \emph{complex} analysis)
+%
+% \DescribeMacro{\round}
+% Occasionally it's useful to have some way to designate rounding a number.
+% The |\round| macro can be used for that. It comes out as $\round(x)$ (I do
+% recommend the parentheses).
+%
+% \DescribeMacro{\evalat}
+% The macro
+% |\evalat|\marg{expression}\marg{lower limit}\marg{upper limit}
+% is mainly useful for when you want to denote the numerical value
+% of a derivative at a specific point, or when you want to represent the
+% evaluation of an integral at the endpoints of the range of integration.
+% It produces a vertical bar at the right of the \meta{expression},
+% with the \meta{lower limit} and \meta{upper limit} typeset at the
+% lower and upper endpoints of the bar, respectively.
+%
+% \begin{minipage}{.64\textwidth}
+% \begin{center}
+% |\evalat{x^3 + 3x - 5}{2}{7}|
+% \end{center}
+% \end{minipage}
+% \begin{minipage}{.34\textwidth}
+% \begin{equation*}
+% \evalat{x^3 + 3x - 5}{2}{7}
+% \end{equation*}
+% \end{minipage}
+%
+% \StopEventually{\PrintChanges\PrintIndex}
+%
+% \section{Feedback}
+%
+% This package is always a work in progress, both in terms of adding new macros
+% to the collection and fixing any errors or inconveniences in the ones that
+% are already here. Any feedback you may have will be welcome at my email address,
+% given at the top of the document.
+%
+% \section{Bugs}
+%
+% With certain versions of LaTeX (pdflatex included in TeXLive 2009 comes to mind),
+% there is a register allocation conflict between this package and the |floatrow|
+% and |morefloats| packages. If you're using either of those along with |physymb|,
+% and you're getting |No room for a new \count| errors, you need to add
+% |\usepackage{etex}\reserveinserts{28}| to your preamble. See
+% \url{http://tex.stackexchange.com/questions/38607/no-room-for-a-new-dimen}
+% for more information.
+%
+% \section{Implementation}
+%
+% \subsection{Initialization}
+% \begin{macrocode}
+\RequirePackage{ifthen}
+% \end{macrocode}
+% This flag is set if the |particle| option is enabled. It enables definitions of particle symbol macros.
+% \begin{macrocode}
+\newboolean{pparticle}
+% \end{macrocode}
+% This flag is set if the |feynman| option is enabled. It pulls in the |feynmf| package.
+% \begin{macrocode}
+\newboolean{pfeynman}
+% \end{macrocode}
+% This flag is set if the |braket| option is enabled. It pulls in the |braket| package.
+% \begin{macrocode}
+\newboolean{pbraket}
+% \end{macrocode}
+% This flag is set if the |units| option is enabled. It pulls in the |siunitx| package and provides additional unit definitions.
+% \begin{macrocode}
+\newboolean{punits}
+% \end{macrocode}
+% This flag is set if the |boldvectors| option is enabled. It causes vectors to be rendered using a bold font instead of an overset arrow.
+% \begin{macrocode}
+\newboolean{pboldvectors}
+% \end{macrocode}
+% This flag is set if the |mandi| option is enabled. It pulls in the |mandi| package.
+% \begin{macrocode}
+\newboolean{pmandi}
+% \end{macrocode}
+%
+% \subsection{Option Declarations}
+% These are the option declarations, pretty self-explanatory.
+% \begin{macrocode}
+\DeclareOption{braket}{\setboolean{pbraket}{true}}
+\DeclareOption{mandi}{%
+ \setboolean{pmandi}{true}%
+}
+\DeclareOption{particle}{\setboolean{pparticle}{true}}
+\DeclareOption{units}{\setboolean{punits}{true}}
+\DeclareOption{feynman}{\setboolean{pfeynman}{true}}
+\DeclareOption{arrowvectors}{\setboolean{pboldvectors}{false}}
+\DeclareOption{boldvectors}{\setboolean{pboldvectors}{true}}
+\ProcessOptions\relax
+% \end{macrocode}
+% This emits a warning that the package is obsolete:
+% \begin{macrocode}
+\PackageWarning{physymb}{The physymb package is obsolete! See the documentation.}
+% \end{macrocode}
+%
+% \subsection{Macro Definitions}
+% Here we bring in the AMS packages for mathematical notation.
+% \begin{macrocode}
+\RequirePackage{amsbsy}
+\RequirePackage{amsmath}
+\RequirePackage{amsfonts}
+\RequirePackage{amssymb}
+\allowdisplaybreaks[2]
+\RequirePackage{accents}
+% \end{macrocode}
+% Load the |mandi| package if requested
+% \begin{macrocode}
+\ifthenelse{\boolean{pmandi}}{%
+ \RequirePackage{mandi}[2014/12/18]%
+}{}
+% \end{macrocode}
+% Load the |hepparticles| and |heppennames| package if particles are requested
+% \begin{macrocode}
+\ifthenelse{\boolean{pparticle}}{%
+ \RequirePackage{hepparticles}%
+ \RequirePackage{heppennames}%
+}{}
+% \end{macrocode}
+% |mandi| is the package that includes the script r, $\scriptr$.
+% \begin{macrocode}
+\AtBeginDocument{
+ \ifthenelse{\isundefined{\scripty}}{%
+ \newcommand{\scriptr}{\PackageError{physymb}{script r requires the mandi package}}%
+ }{%
+ \newcommand{\scriptr}{\scripty{r}}%
+ }
+}
+% \end{macrocode}
+% The |commath| package is used to implement differentials and derivatives.
+% \begin{macrocode}
+\RequirePackage{commath}
+% \end{macrocode}
+% Here we load the |braket| package if the corresponding option was passed.
+% \begin{macrocode}
+\ifthenelse{\boolean{pbraket}}
+{
+ \RequirePackage{braket}
+% \end{macrocode}
+% Semantic Dirac notation, implemented on top of braket macros
+% \begin{macrocode}
+ \newcommand{\project}[2]{\ket{#1}#2\bra{#1}}
+ \newcommand{\Project}[2]{\Ket{#1}#2\Bra{#1}}
+ \newcommand{\expect}[1]{\braket{#1}}
+ \newcommand{\Expect}[1]{\Braket{#1}}
+}
+{}
+% \end{macrocode}
+% Here we load |siunitx| if the |units| option was passed.
+% \begin{macrocode}
+\ifthenelse{\boolean{punits}}
+{
+ \RequirePackage{siunitx}
+% \end{macrocode}
+% These are some useful non-SI units
+% \begin{macrocode}
+ \DeclareSIUnit{\torr}{torr}
+ \DeclareSIUnit{\mmhg}{mmHg}
+ \DeclareSIUnit{\amu}{amu}
+ \DeclareSIUnit{\yr}{yr}
+ \DeclareSIUnit{\erg}{erg}
+ \DeclareSIUnit{\gauss}{Ga}
+ \DeclareSIUnit{\molar}{\textsc{M}} % this follows the style set up in the siunitx manual
+ \DeclareSIUnit{\poise}{P}
+ \DeclareSIUnit{\foot}{ft}
+ \DeclareSIUnit{\mileperhour}{mph}
+ \DeclareSIUnit{\pound}{lb}
+ \DeclareSIUnit{\poundforce}{lbf}
+}
+{}
+% \end{macrocode}
+%
+% Now we come to assorted functions and keywords.
+%
+% First the inverse trig functions. These are defined in the |mandi| package,
+% but for backward compatibility I would like to give an informative error
+% message if anyone tries to use them without loading |mandi|. The solution
+% used here is to defer defining the functions until the end of the preamble,
+% after all packages have been loaded.
+% \begin{macrocode}
+\AtBeginDocument{%
+% \end{macrocode}
+% At this point, if |mandi| has been loaded (or if some other package has
+% defined these commands), the following |\providecommand|s will do nothing.
+% \begin{macrocode}
+ \providecommand{\asin}{\PackageError{physymb}{inverse trig functions require the mandi package}}
+ \providecommand{\acos}{\PackageError{physymb}{inverse trig functions require the mandi package}}
+ \providecommand{\atan}{\PackageError{physymb}{inverse trig functions require the mandi package}}
+ \providecommand{\asec}{\PackageError{physymb}{inverse trig functions require the mandi package}}
+ \providecommand{\acsc}{\PackageError{physymb}{inverse trig functions require the mandi package}}
+ \providecommand{\acot}{\PackageError{physymb}{inverse trig functions require the mandi package}}
+% \end{macrocode}
+% Same for hyperbolic trig functions:
+% \begin{macrocode}
+ \providecommand{\sech}{\PackageError{physymb}{hyperbolic trig functions require the mandi package}}
+ \providecommand{\csch}{\PackageError{physymb}{hyperbolic trig functions require the mandi package}}
+ \providecommand{\asinh}{\PackageError{physymb}{hyperbolic trig functions require the mandi package}}
+ \providecommand{\acosh}{\PackageError{physymb}{hyperbolic trig functions require the mandi package}}
+ \providecommand{\atanh}{\PackageError{physymb}{hyperbolic trig functions require the mandi package}}
+ \providecommand{\asech}{\PackageError{physymb}{hyperbolic trig functions require the mandi package}}
+ \providecommand{\acsch}{\PackageError{physymb}{hyperbolic trig functions require the mandi package}}
+ \providecommand{\acoth}{\PackageError{physymb}{hyperbolic trig functions require the mandi package}}
+}
+% \end{macrocode}
+% Next are some linear algebra keywords.
+% \begin{macrocode}
+\DeclareMathOperator{\diag}{diag}
+\DeclareMathOperator{\realop}{Re}
+\DeclareMathOperator{\imagop}{Im}
+\newcommand{\real}[1]{\realop\{#1\}}
+\newcommand{\imag}[1]{\imagop\{#1\}}
+% \end{macrocode}
+% The absolute value and norm notations are implemented by |commath| so there
+% is nothing to do for them here.
+%
+% Evaluation at endpoints is implemented by either |commath| or |mandi|.
+% As with the trig functions, we want to wait until the end of the preamble
+% so that if |mandi| is loaded later, its definition of |\evalat| will remain.
+% Otherwise, we implement it in terms of |commath|'s |\eval|.
+% \begin{macrocode}
+\AtBeginDocument{%
+ \providecommand{\evalat}[3]{\eval{#1}_{#2}^{#3}}%
+}
+% \end{macrocode}
+% If |mandi| is loaded, we can use its implementation of |\sgn|.
+% \begin{macrocode}
+\AtBeginDocument{%
+ \providecommand{\sgn}{\PackageError{physymb}{signum requires the mandi package}}
+}
+% \end{macrocode}
+% Same goes for |\orderof|.
+% \begin{macrocode}
+\AtBeginDocument{
+ \providecommand{\orderof}{\PackageError{physymb}{orderof requires the mandi package}}
+}
+% \end{macrocode}
+% Poisson brackets are just braces
+% \begin{macrocode}
+\newcommand{\pbrac}[2]{\left\{#1,#2\right\}}
+\newcommand{\pbracvars}[4]{\left\{#1,#2\right\}_{#3,#4}}
+% \end{macrocode}
+% This handles the redefinition of |\vec|. If the |boldvectors| option was passed,
+% a vector is denoted by bolding the argument. If |arrowvectors| was passed, the
+% vector is denoted by putting an arrow over the argument.
+% Some people use an undertilde, which will probably be added in the future.
+% \begin{macrocode}
+\ifthenelse{\boolean{pboldvectors}}%
+ {\renewcommand{\vec}[1]{\mathbf{#1}}}%
+ {\renewcommand{\vec}[1]{\accentset{\rightharpoonup}{#1}}}
+% \end{macrocode}
+% |\vecvar| is just a synonym for |\vec|
+% \begin{macrocode}
+\newcommand{\vecvar}[1]{\vec{#1}}
+% \end{macrocode}
+% |\tnsvar| always uses bold. Some people use undertildes, which will be added.
+% \begin{macrocode}
+\newcommand{\tnsvar}[1]{\mathbf{#1}}
+% \end{macrocode}
+% |\matvar| always uses bold.
+% \begin{macrocode}
+\newcommand{\matvar}[1]{\mathbf{#1}}
+% \end{macrocode}
+% |\identitym| is a bold $1$
+% \begin{macrocode}
+\newcommand{\identitym}{\mathbf{1}}
+% \end{macrocode}
+% |\determinant| uses vertical bars.
+% \begin{macrocode}
+\newcommand{\determinant}[1]{\envert{#1}}
+% \end{macrocode}
+% |\trace| uses capital Tr.
+% \begin{macrocode}
+\DeclareMathOperator{\trace}{Tr}
+% \end{macrocode}
+% Now we get to unit vectors. This is just a wrapper for |\dirvect| from |mandi|.
+% \begin{macrocode}
+\AtBeginDocument{
+ \ifthenelse{\isundefined{\dirvect}}{%
+ \newcommand{\unitvec}[1]{\PackageError{physymb}{unit vectors require the mandi package}}
+ }{%
+ \newcommand{\unitvec}[1]{\dirvect{#1}}
+ }
+}%
+% \end{macrocode}
+% And these are a bunch of predefined unit vectors. Note that |\unitl| now
+% uses a regular lowercase $l$, rather than the scripe $\ell$ as in previous
+% versions. The new command |\unitell| will give you a unit $\ell$.
+% \begin{macrocode}
+\newcommand{\unitd}{\unitvec{d}}
+\newcommand{\unite}{\unitvec{e}}
+\newcommand{\uniti}{\unitvec{\imath}}
+\newcommand{\unitj}{\unitvec{\jmath}}
+\newcommand{\unitk}{\unitvec{k}}
+\newcommand{\unitl}{\unitvec{l}}
+\newcommand{\unitell}{\unitvec{\ell}}
+\newcommand{\unitn}{\unitvec{n}}
+\newcommand{\unitp}{\unitvec{p}}
+\newcommand{\unitq}{\unitvec{q}}
+\newcommand{\unitr}{\unitvec{r}}
+\newcommand{\units}{\unitvec{s}}
+\newcommand{\unitt}{\unitvec{t}}
+\newcommand{\unitu}{\unitvec{u}}
+\newcommand{\unitv}{\unitvec{v}}
+\newcommand{\unitw}{\unitvec{w}}
+\newcommand{\unitx}{\unitvec{x}}
+\newcommand{\unity}{\unitvec{y}}
+\newcommand{\unitz}{\unitvec{z}}
+\newcommand{\unitphi}{\unitvec{\phi}}
+\newcommand{\unitrho}{\unitvec{\rho}}
+\newcommand{\unittheta}{\unitvec{\theta}}
+\newcommand{\unitomega}{\unitvec{\omega}}
+% \end{macrocode}
+% |\udc| is just an upright (roman) d, and similarly for higher-order differentials,
+% implemented in terms of |\dif| from |commath|.
+% \begin{macrocode}
+\newcommand{\udc}{\dif}
+\newcommand{\uddc}{\dif^2}
+\newcommand{\udddc}{\dif^3}
+% \end{macrocode}
+% |\pdc| is just |\partial|, defined for similarity with |\udc|.
+% \begin{macrocode}
+\newcommand{\pdc}{\partial}
+\newcommand{\pddc}{\partial^2}
+\newcommand{\pdddc}{\partial^3}
+% \end{macrocode}
+% |\uds| is just like |\udc| but it includes a small space in front.
+% \begin{macrocode}
+\newcommand{\uds}{\,\dif}
+\newcommand{\udds}{\,\dif^2}
+\newcommand{\uddds}{\,\dif^3}
+% \end{macrocode}
+% |\pds| is also defined for similarity as just |\partial| with a space in front,
+% although I'm not sure this one is really useful.
+% \begin{macrocode}
+\newcommand{\pds}{\,\partial}
+\newcommand{\pdds}{\,\partial^2}
+\newcommand{\pddds}{\,\partial^3}
+% \end{macrocode}
+% |\ud| typesets a derivative using |\udc|. Similarly for second and third derivatives.
+% \begin{macrocode}
+\let\ud\od
+\newcommand{\udd}[2]{\od[2]{#1}{#2}}
+\newcommand{\uddd}[2]{\od[3]{#1}{#2}}
+% \end{macrocode}
+% |\pd| (defined in |commath|) does the same for partial derivatives with |\pdc|.
+% \begin{macrocode}
+\newcommand{\pdd}[2]{\pd[2]{#1}{#2}}
+\newcommand{\pddd}[2]{\pd[3]{#1}{#2}}
+% \end{macrocode}
+%
+% All of |\div|, |\grad|, and |\curl| come from |mandi|.
+% \begin{macrocode}
+\AtBeginDocument{
+ \@ifpackageloaded{mandi}{%
+ \let\grad\gradient
+ \let\div\divergence
+ \let\lapl\laplacian
+ }{%
+ \providecommand{\grad}{\PackageError{physymb}{gradient requires the mandi package}}
+ % use renew instead of provide because \div is defined in plain latex
+ \renewcommand{\div}{\PackageError{physymb}{divergence requires the mandi package}}
+ \providecommand{\curl}{\PackageError{physymb}{curl requires the mandi package}}
+ \providecommand{\lapl}{\PackageError{physymb}{laplacian requires the mandi package}}
+ }
+}
+% \end{macrocode}
+% |\conj| just puts a superscript star
+% \begin{macrocode}
+\newcommand{\conj}[1]{{#1 ^{*}}}
+% \end{macrocode}
+% |\herm| is the same thing but for operators or matrices, so with a dagger
+% \begin{macrocode}
+\newcommand{\herm}[1]{{#1 ^{\dagger}}}
+% \end{macrocode}
+% |\transpose| does the same with a $T$
+% \begin{macrocode}
+\newcommand{\transpose}[1]{{#1 ^{T}}}
+% \end{macrocode}
+% These set notations are mostly done with |\mathbb|
+% \begin{macrocode}
+\newcommand{\natset}{\mathbb{N}}
+\newcommand{\intset}{\mathbb{Z}}
+\newcommand{\cpxset}{\mathbb{C}}
+\newcommand{\whlset}{\mathbb{Q}}
+\newcommand{\realset}{\mathbb{R}}
+\newcommand{\imagset}{\mathbb{I}}
+% \end{macrocode}
+% Commutators and anticommutators are done in the obvious way
+% \begin{macrocode}
+\newcommand{\commut}[2]{\left[ #1, #2 \right]}
+\newcommand{\acommut}[2]{\left\{ #1, #2 \right\}}
+% \end{macrocode}
+% The |\round| operator just typesets the word ``round''
+% \begin{macrocode}
+\DeclareMathOperator{\round}{round}
+% \end{macrocode}
+% The exterior derivative is typeset in bold, in contrast to the differential $\udc$ which
+% is just a plain roman font
+% \begin{macrocode}
+\DeclareMathOperator{\exd}{\mathbf{d}}
+% \end{macrocode}
+% The Hodge dual uses a star, but not superscript like |\conj|.
+% \begin{macrocode}
+\newcommand{\hodge}{\star}
+% \end{macrocode}
+% These are short macros to typeset the symbols for the elementary (and common non-elementary)
+% particles. They are defined in terms of commands from |heppennames|, but only if the
+% |particle| option was passed.
+% \begin{macrocode}
+\ifthenelse{\boolean{pparticle}}
+{
+\let\upq\Pqu
+\let\dnq\Pqd
+\let\srq\Pqs
+\let\chq\Pqc
+\let\btq\Pqb
+\let\tpq\Pqt
+\let\upaq\Paqu
+\let\dnaq\Paqd
+\let\sraq\Paqs
+\let\chaq\Paqc
+\let\btaq\Paqb
+\let\tpaq\Paqt
+\let\elp\Pem
+\let\enu\Pgne
+\let\ulp\Pgmm
+\let\unu\Pgngm
+\let\tlp\Pgtm
+\let\tnu\Pgngt
+\let\ealp\Pep
+\let\eanu\Pagne
+\let\ualp\Pgmp
+\let\uanu\Pagngm
+\let\talp\Pgtp
+\let\tanu\Pagngt
+\let\prbr\Pp
+\let\nebr\Pn
+\let\lmzbr\PgL
+\let\sgpbr\PgSp
+\let\sgzbr\PgSz
+\let\sgmbr\PgSm
+\newcommand\dlppbr{\HepParticle{\Delta}{}{++}}
+\newcommand\dlpbr{\HepParticle{\Delta}{}{+}}
+\newcommand\dlzbr{\HepParticle{\Delta}{}{0}}
+\newcommand\dlmbr{\HepParticle{\Delta}{}{-}}
+\let\xizbr\PgXz
+\let\ximbr\PgXm
+\let\ommbr\PgOm
+\newcommand\sgspbr{\HepParticle{\Sigma}{}{*+}}
+\newcommand\sgszbr{\HepParticle{\Sigma}{}{*0}}
+\newcommand\sgsmbr{\HepParticle{\Sigma}{}{*-}}
+\newcommand\xiszbr{\HepParticle{\Xi}{}{*0}}
+\newcommand\xismbr{\HepParticle{\Xi}{}{*-}}
+\let\prabr\Pap
+\let\neabr\Pan
+\newcommand\dlpabr{\HepAntiParticle{\Delta}{}{+}}
+\newcommand\dlzabr{\HepAntiParticle{\Delta}{}{0}}
+\newcommand\dlmabr{\HepAntiParticle{\Delta}{}{-}}
+\newcommand\dlmmabr{\HepAntiParticle{\Delta}{}{--}}
+\let\pipm\Pgpm
+\let\pizm\Pgpz
+\let\pimm\Pgpp
+\let\kapm\PKp
+\let\kazm\PKz
+\let\kazam\PaKz
+\let\kamm\PKm
+\let\ropm\Pgrp
+\let\rozm\Pgrz
+\let\romm\Pgrm
+\let\etam\Pgh
+\let\etapm\Pghpr
+\newcommand\kaspm{\HepParticle{K}{}{*+}}
+\newcommand\kaszm{\HepParticle{K}{}{*0}}
+\newcommand\kaszam{\HepAntiParticle{K}{}{*0}}
+\newcommand\kasmm{\HepParticle{K}{}{*-}}
+\let\omm\Pgo
+\let\phim\Pgf
+\let\phbsn\Pgg
+\let\Wbsn\PW
+\let\Wpbsn\PWp
+\let\Wmbsn\PWm
+\let\Zzbsn\PZ
+\let\hbsn\Ph
+\let\photon\Pgg
+}
+{}
+% \end{macrocode}
+% The |feynman| option is implemented by just loading the package |feynmp|.
+% \begin{macrocode}
+\ifthenelse{\boolean{pfeynman}}%
+ {\RequirePackage{feynmp}}%
+ {}
+% \end{macrocode}
+%
+% \pagebreak[2]
+% \Finale
diff --git a/obsolete/macros/latex/contrib/physymb/physymb.ins b/obsolete/macros/latex/contrib/physymb/physymb.ins
new file mode 100644
index 0000000000..4526c95703
--- /dev/null
+++ b/obsolete/macros/latex/contrib/physymb/physymb.ins
@@ -0,0 +1,46 @@
+%%
+%% Copyright (C) 2005-2011 by David Zaslavsky <diazona@ellipsix.net>
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is David Zaslavsky
+%%
+%% This work consists of the files physymb.dtx and physymb.ins
+%% and the derived files physymb.sty and physymb.pdf.
+%%
+\input docstrip.tex
+\keepsilent
+\usedir{tex/latex/physymb}
+\preamble
+This is a generated file.
+Copyright (C) 2005-2011 by David Zaslavsky <diazona@ellipsix.net>
+This file may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either
+version 1.3 of this license or (at your option) any later
+version. The latest version of this license is in:
+http://www.latex-project.org/lppl.txt
+and version 1.3 or later is part of all distributions of
+LaTeX version 2005/12/01 or later.
+\endpreamble
+\generate{\file{physymb.sty}{\from{physymb.dtx}{package}}}
+\Msg{*********************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the}
+\Msg{* following file into a directory searched by TeX:}
+\Msg{*}
+\Msg{* \space\space physymb.sty}
+\Msg{*}
+\Msg{* To produce the documentation run the file physymb.dtx}
+\Msg{* through LaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing!}
+\Msg{*********************************************************}
+\endbatchfile
diff --git a/obsolete/macros/latex/contrib/physymb/physymb.pdf b/obsolete/macros/latex/contrib/physymb/physymb.pdf
new file mode 100644
index 0000000000..96be75b8be
--- /dev/null
+++ b/obsolete/macros/latex/contrib/physymb/physymb.pdf
Binary files differ
diff --git a/obsolete/macros/latex/contrib/piff-ams/ams.dtx b/obsolete/macros/latex/contrib/piff-ams/ams.dtx
new file mode 100644
index 0000000000..a9d428c1ca
--- /dev/null
+++ b/obsolete/macros/latex/contrib/piff-ams/ams.dtx
@@ -0,0 +1,206 @@
+% \iffalse meta-comment
+% \begin{macrocode}
+%<*ams>
+\def\fileversion{3.16}
+\def\filedate{09 Jan 1996 13:53:56 BST}
+\def\filename{ams.dtx}
+\def\Copyright{Copyright (C) 1990,1995 Mike Piff, University of Sheffield, England}
+%</ams>
+% \end{macrocode}
+%
+%You are not allowed to change this file.
+%
+%You are NOT ALLOWED to distribute this file alone. You are NOT
+%ALLOWED to take money for the distribution or use of this
+%file except for a nominal charge for copying etc.
+%
+%Please address any problems to:
+%
+%M.Piff@sheffield.ac.uk
+%
+%For updates, contact your nearest CTAN site.
+%
+% \fi
+%
+% \CheckSum{139}
+%
+% \title{Use of common American Mathematical Society fonts in \LaTeXe}
+% \author{Copyright (C) 1994 by Mike Piff}
+%
+% \maketitle
+% \tableofcontents
+%
+% \section{The documentation driver file}
+%
+% This is the driver file that produces this documentation.
+% We use the document class provided by the \LaTeXe\ distribution
+% for producing the documentation.
+% \begin{macrocode}
+%<*driver>
+\documentclass[12pt]{ltxdoc}
+\usepackage[defs]{ams}
+\usepackage{verbatim}
+\begin{document}
+ \DocInput{ams.dtx}
+\end{document}
+%</driver>
+% \end{macrocode}
+% \section{Introduction}
+%
+% This package is a minimal one that allows access to the three
+% common AMS symbol font families. To use it, you will need the
+% |amsfonts| package.
+%
+% \section{User interface}
+%
+% The package needs to be included with the command
+% \begin{verbatim}
+% \usepackage[defs]{ams}
+% \end{verbatim}
+% Its effect is to prepare the symbol fonts |msam| and |msbm|
+% and the fraktur font |eufm|. Specification of option |defs|
+% causes all the usual AMS symbol definitions to be made.
+% For instance, after this one can obtain $\curvearrowright$ by
+% typing |$\curvearrowright$|.
+%
+%
+% \DescribeMacro{\Bbb}
+% \newcommand{\SF}{$\langle$\textit{sub-formula}$\rangle$}
+% The command |\Bbb{|\SF|}| typesets \SF\ in blackboard bold.
+% For instance, |\Bbb{ANYTHING}| produces \Bbb{ANYTHING}.
+% Care must be taken to ensure that \SF\ contains only uppercase
+% letters. The math style modifier is |\mathbb|.
+%
+% The commonest letters in mathematics are defined by the commands
+% |\C|, |\F|, |\N|, |\Q|, |\R|, |\T| and |\Z|, producing \C, \F,
+% \N, \Q, \R, \T, \Z\ respectively.
+%
+% \DescribeMacro{\frak}
+% \DescribeMacro{\goth}
+% |\frak| and |\goth| are similar to |\Bbb| except that they use the
+% fractur font, and are not limited to uppercase. Thus |\frak{K}|
+% produces \frak{K}. There is a math style modifier |\mathfrak| too.
+%
+% |\Bbb|, |\frak| and |\goth| work in text and math modes.
+%
+% \DescribeMacro{\MakeBbb}
+% The command |\MakeBbb{X}| has the effect of setting |\X| to expand
+% to |\Bbb{X}|, and thus further blackboard bold symbols are easily
+% defined.
+% \StopEventually{}
+%
+%
+% \section{Identification}
+%
+% This package can only be used with \LaTeXe, so
+% an appropriate message is displayed when another
+% format is used.
+% \begin{macrocode}
+%<*ams>
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+% \end{macrocode}
+%
+%
+% Announce the package name and its version:
+% \begin{macrocode}
+\ProvidesPackage{ams}[1996/01/09]
+% \end{macrocode}
+%
+% And display it on the terminal (and the log file):
+% \begin{macrocode}
+\typeout{Package `ams' <\filedate>.}
+\typeout{\Copyright}
+% \end{macrocode}
+%
+% \section{The definition option}
+%
+% There is a single option |defs| that is recognized.
+% \begin{macrocode}
+\DeclareOption{defs}{\AtEndOfPackage{\RequirePackage{amssymb}}}
+\ProcessOptions
+% \end{macrocode}
+%
+% \section{Defining the interface}
+%
+% We load the |amsfonts| package.
+% \begin{macrocode}
+\RequirePackage{amsfonts}
+% \end{macrocode}
+% We make |\Bbb|, |\goth| and |\frak| work in text mode too.
+% \begin{macrocode}
+\def\frak#1{\ensuremath{\mathfrak{#1}}}
+\def\Bbb#1{\ensuremath{\mathbb{#1}}}
+\let\goth\frak
+% \end{macrocode}
+%
+% The next command is a little trickier, but is worth the effort.
+% \begin{macrocode}
+\def\MakeBbb#1{%
+ \edef\tmp{%
+ \noexpand\def\csname#1\endcsname
+ {\noexpand\protect\csname p#1\endcsname}%
+ \noexpand\def\csname p#1\endcsname
+ {\noexpand\Bbb{#1}}%
+ }%
+ \tmp
+}
+% \end{macrocode}
+% We can now define short forms of standard symbols.
+% \begin{macrocode}
+\MakeBbb{C}
+\MakeBbb{F}
+\MakeBbb{N}
+\MakeBbb{Q}
+\MakeBbb{R}
+\MakeBbb{T}
+\MakeBbb{Z}
+% \end{macrocode}
+%
+% We tell the user how to define all of the AMS symbols by name.
+% \begin{macrocode}
+\typeout{Use option defs to define all the AMS symbol names}
+% \end{macrocode}
+%
+% Another job is to replace the awful |cm| inequality symbols.
+% Thus, |a\leq b| will now produce $a\leq b$. We also define the
+% symbols in package |latexsym|, but taking equivalents from the
+% AMS fonts. ($\mho$, $\Join$, $\Box$, $\Diamond$, $\leadsto$
+% $\sqsubset$, $\sqsupset$, $\lhd$, $\unlhd$, $\rhd$ and $\unrhd$.)
+% \begin{macrocode}
+\let\leq\undefined \let\geq\undefined
+\DeclareMathSymbol{\leq} {\mathrel}{AMSa}{"36}
+\DeclareMathSymbol{\geq} {\mathrel}{AMSa}{"3E}
+\let\le\leq \let\ge\geq
+ \let\mho\undefined \let\sqsupset\undefined
+ \let\Join\undefined \let\lhd\undefined
+ \let\Box\undefined \let\unlhd\undefined
+ \let\Diamond\undefined \let\rhd\undefined
+ \let\leadsto\undefined \let\unrhd\undefined
+ \let\sqsubset\undefined
+
+ \DeclareMathSymbol\mho {\mathord}{AMSb}{"66}
+ \DeclareMathSymbol\Box {\mathord}{AMSa}{"03}
+ \let\square\Box
+ \DeclareMathSymbol\Diamond {\mathord}{AMSa}{"06}
+ \DeclareMathSymbol\leadsto {\mathrel}{AMSa}{"20}
+ \DeclareMathSymbol\sqsubset{\mathrel}{AMSa}{"40}
+ \DeclareMathSymbol\sqsupset{\mathrel}{AMSa}{"41}
+ \DeclareMathSymbol\lhd {\mathrel}{AMSa}{"43}
+ \DeclareMathSymbol\unlhd {\mathrel}{AMSa}{"45}
+ \DeclareMathSymbol\rhd {\mathrel}{AMSa}{"42}
+ \DeclareMathSymbol\unrhd {\mathrel}{AMSa}{"44}
+ \def\Join{\mathrel{{\rhd}\mkern-4mu{\lhd}}}
+%</ams>
+% \end{macrocode}
+%\section{The symbol definitions}
+%
+%Here is a listing of the definition file supplied by the AMS.
+%Use the corresponding |\DeclareMathSymbol| line to define a single symbol.
+%If you want all of them, use the |defs| package option.
+%\verbatiminput{amssymb.sty}
+%
+% \Finale
+%
+\endinput
+%
+
diff --git a/obsolete/macros/latex/contrib/piff-ams/ams.ins b/obsolete/macros/latex/contrib/piff-ams/ams.ins
new file mode 100644
index 0000000000..39145f4d24
--- /dev/null
+++ b/obsolete/macros/latex/contrib/piff-ams/ams.ins
@@ -0,0 +1,49 @@
+%%
+%% This file will generate fast loadable files and documentation
+%% driver files from the doc files in this package when run through
+%% LaTeX or TeX.
+%%
+%%
+%% IMPORTANT NOTICE:
+%%
+%% No other permissions to copy or distribute this file in any form
+%% are granted and in particular no permission to modify its contents.
+%%
+%% --------------- start of docstrip commands ------------------
+%%
+\def\batchfile{ams.ins}
+\input docstrip.tex
+\preamble
+
+Copyright (C) 1990,1995 Mike Piff, University of Sheffield, England
+
+You are not allowed to change this file.
+
+You are NOT ALLOWED to distribute this file alone. You are NOT
+ALLOWED to take money for the distribution or use of this
+file except for a nominal charge for copying etc.
+
+Please address any problems to:
+
+M.Piff@sheffield.ac.uk
+
+For updates, contact your nearest CTAN site.
+
+\endpreamble
+
+\keepsilent
+
+\Msg{*** Generating the package file ***}
+
+\generateFile{ams.sty}{f}{\from{ams.dtx}{ams}}
+
+\ifToplevel{%
+\Msg{***********************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the file}
+\Msg{* ams.sty into a directory searched by TeX.}
+\Msg{* To produce the documentation, run the file ams.dtx through LaTeX.}
+\Msg{***********************************************************}
+}
+
+\endinput
diff --git a/obsolete/macros/latex/contrib/piff/tensor.sty b/obsolete/macros/latex/contrib/piff/tensor.sty
new file mode 100644
index 0000000000..3c02623718
--- /dev/null
+++ b/obsolete/macros/latex/contrib/piff/tensor.sty
@@ -0,0 +1,62 @@
+\def\filename{tensor.sty}
+\def\fileversion{1.00}
+\def\filedate{03 Jun 1996 14:57:09 BST}
+%%
+%% Copyright (C) 1996 Mike Piff
+%%
+%%M.Piff@sheffield.ac.uk
+%%
+%%Defines the command \tensor with two parameters.
+%% #1 = The name of the tensor
+%% #2 = The superscript/subscript sequence.
+%%
+%% eg
+%%
+%% \tensor{A}{^{i}_{j}^{kl}}
+%%
+%% Don't forget the enclosing braces round the indices!!
+%%
+%
+\typeout{\filename\space v\fileversion, (C) Copyright Mike Piff, \filedate}
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+
+\ProvidesPackage{tensor}
+\ProcessOptions
+
+\newtoks\tensor@sup \newtoks\tensor@sub
+\newcommand\tensor[2]{\tensor@sup={}\tensor@sub={}%
+ #1\tensor@process#2\tensor@endprocess%
+}
+
+\newcommand\tensor@process[1]{%
+ \ifx #1\tensor@endprocess
+ \let\next\tensor@finish
+ \else
+ \ifx#1^%
+ \let\next\tensor@absorbsup
+ \else
+ \ifx#1_%
+ \let\next\tensor@absorbsub
+ \else
+ \PackageError{tensor}{Sub/Superscript token missing}%
+ \fi
+ \fi
+ \fi
+ \next
+}
+
+\newcommand\tensor@absorbsup[1]{%
+ \tensor@sup=\expandafter{\the\tensor@sup#1}%
+ \tensor@sub=\expandafter{\the\tensor@sub\phantom{#1}}%
+ \tensor@process
+}
+
+\newcommand\tensor@absorbsub[1]{%
+ \tensor@sub=\expandafter{\the\tensor@sub#1}%
+ \tensor@sup=\expandafter{\the\tensor@sup\phantom{#1}}%
+ \tensor@process
+}
+
+\def\tensor@finish{_{\the\tensor@sub}^{\the\tensor@sup}}
+\endinput
+
diff --git a/obsolete/macros/latex/contrib/ps4pdf/4-10-8.inl b/obsolete/macros/latex/contrib/ps4pdf/4-10-8.inl
new file mode 100644
index 0000000000..ad9f3ddedd
--- /dev/null
+++ b/obsolete/macros/latex/contrib/ps4pdf/4-10-8.inl
@@ -0,0 +1,28 @@
+\psset{unit=.825cm}
+\begin{pspicture}(10,8)
+ \psset{fillstyle=solid,linestyle=none,linewidth=0}
+ \psframe[fillcolor=lightblue](10,8)
+ \pscircle[fillcolor=yellow](2,6){.8} % Sun
+ {% Rays
+ \psset{linecolor=yellow,linestyle=solid,linewidth=.3}
+ \degrees[8]
+ \multido{\i=1+1}{8}{\rput{\i}(2,6){\psline(1,0)(1.5,0)}}
+ }%
+
+ \pspolygon[fillcolor=green](6,0)(10,2)(10,0)% Grass
+ \psdiamond[fillcolor=red,gangle=-45](8,6)(1.5,2.5)% Kite
+ \rput{45}(8,6){\pnode(-2.5,0){Kitetail}}
+ \rput{-10}(.8,1.5){\psdiamond[fillcolor=yellow](.6,.1)(.6,.3)}
+ \rput{-80}(.8,1.5){\psdiamond[fillcolor=yellow](.6,.1)(.6,.3)}
+ \pnode(.8,1.5){Tailend}
+ \nccurve[fillstyle=none,angleA=270,angleB=125,ncurvB=.9,ncurvA=1.4,
+ linestyle=dotted,dotstyle=square,linewidth=.25]{Kitetail}{Tailend}
+ \newcommand{\bunting}{\pstriangle(.35,.35)}
+ \psset{fillcolor=red,labelsep=.01}
+ \naput[nrot=115,npos=.15]{\bunting}
+ \nbput[nrot=25,npos=.15]{\bunting}
+ \naput[nrot=75,npos=.4]{\bunting}
+ \nbput[nrot=115,npos=.4]{\bunting}
+ \naput[nrot=115,npos=.7]{\bunting}
+ \nbput[nrot=25,npos=.7]{\bunting}
+\end{pspicture}
diff --git a/obsolete/macros/latex/contrib/ps4pdf/Makefile b/obsolete/macros/latex/contrib/ps4pdf/Makefile
new file mode 100644
index 0000000000..e4a903f89b
--- /dev/null
+++ b/obsolete/macros/latex/contrib/ps4pdf/Makefile
@@ -0,0 +1,52 @@
+
+# Rolf Niepraschk, niepraschk@ptb.de, 2003-05-19
+
+.SUFFIXES : .tex .dvi .ps .pdf .eps
+
+MAIN = ps4pdf-test
+
+PDFLATEX = pdflatex
+LATEX = latex
+DVIPSFLAGS = -Ppdf -G0
+
+#ARCHNAME = $(MAIN)-$(shell date +%y%m%d).zip
+ARCHNAME = ps4pdf-$(shell date +%y%m%d).tar.gz
+
+PICS_SRC = 4-10-8.inl penguin.eps
+
+all : $(MAIN).pdf
+
+ps : $(MAIN).ps
+
+$(MAIN).pdf : $(MAIN).tex $(PICS_SRC) $(MAIN)-pics.pdf
+ $(PDFLATEX) $<
+
+$(MAIN).ps : $(MAIN).tex $(PICS_SRC)
+ latex '\PassOptionsToPackage{inactive}{ps4pdf} \input{$<}'
+ dvips $(DVIPSFLAGS) -o $@ $(basename $<).dvi
+
+$(MAIN)-pics.pdf : $(MAIN)-pics.ps $(PICS)
+ ps2pdf $< $@
+
+$(MAIN)-pics.ps : $(MAIN).tex $(PICS_SRC)
+ latex $<
+ dvips $(DVIPSFLAGS) -o $@ $(basename $<).dvi
+
+%.pdf : %.eps
+ epstopdf $< -o=$@
+
+clean :
+ $(RM) $(addprefix $(MAIN), .log .aux) \
+ $(addprefix $(MAIN)-pics, .ps .log .aux)
+
+veryclean : clean
+ $(RM) $(addprefix $(MAIN)-pics, .pdf .ps .dvi) \
+ $(addprefix $(MAIN), .pdf .ps .dvi)
+
+arch :
+ tar cvzf $(ARCHNAME) $(MAIN).tex $(PICS_SRC) ps4pdf.sty Makefile \
+ README create-eps
+ @ echo
+ @ echo $(ARCHNAME)
+
+.INTERMEDIATE : $(MAIN)-pics.ps $(MAIN).dvi
diff --git a/obsolete/macros/latex/contrib/ps4pdf/README b/obsolete/macros/latex/contrib/ps4pdf/README
new file mode 100644
index 0000000000..2a25053107
--- /dev/null
+++ b/obsolete/macros/latex/contrib/ps4pdf/README
@@ -0,0 +1,25 @@
+
+The LaTeX package `ps4pdf' provides a new way to use Postscript
+commands (e.g. PSTricks graphics, PSfrag replacements, EPS graphics)
+inside a pdfLaTeX processed document. You need recent versions of
+the LaTeX packages `preview', `ifpdf', `ifvtex' and a new LaTeX base
+installation.
+
+All Postscript related commands including `\usepackage' must be
+parameter of the `PSforPDF' macro. For details see the test file
+`ps4pdf-test.tex'.
+
+Files:
+======
+4-10-8.inl PSTricks graphic (lgc)
+Makefile Makefile for `ps4pdf-test.pdf'
+README this file
+create-eps creates EPS files from `ps4pdf-test-pics.pdf'
+penguin.eps a graphics file
+ps4pdf-test.tex the eample document
+ps4pdf.sty the LaTeX package file
+ps4pdf a shell script for creating .pdf from .tex
+
+ Rolf Niepraschk
+ email: Rolf.Niepraschk@ptb.de
+ 2004-11-01
diff --git a/obsolete/macros/latex/contrib/ps4pdf/create-eps b/obsolete/macros/latex/contrib/ps4pdf/create-eps
new file mode 100755
index 0000000000..9a8801c9b7
--- /dev/null
+++ b/obsolete/macros/latex/contrib/ps4pdf/create-eps
@@ -0,0 +1,6 @@
+#!/bin/sh
+n=`pdfinfo ps4pdf-test-pics.pdf | awk '($1 ~ /Pages:/) {print $2}'`
+for i in `seq $n` ; do
+ pdftops -f $i -l $i -eps ps4pdf-test-pics.pdf picture$i.eps
+ echo "create picture$i.eps"
+done
diff --git a/obsolete/macros/latex/contrib/ps4pdf/penguin.eps b/obsolete/macros/latex/contrib/ps4pdf/penguin.eps
new file mode 100644
index 0000000000..6002cfe272
--- /dev/null
+++ b/obsolete/macros/latex/contrib/ps4pdf/penguin.eps
@@ -0,0 +1,7659 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: xpdf/pdftops 2.01
+%%LanguageLevel: 2
+%%BoundingBox: 0 0 313 370
+%%DocumentSuppliedResources: (atend)
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset xpdf 2.01 0
+/xpdf 75 dict def xpdf begin
+% PDF special state
+/pdfDictSize 14 def
+/pdfSetup {
+ 3 1 roll 2 array astore
+ /setpagedevice where {
+ pop 3 dict begin
+ /PageSize exch def
+ /ImagingBBox null def
+ /Policies 1 dict dup begin /PageSize 3 def end def
+ { /Duplex true def } if
+ currentdict end setpagedevice
+ } {
+ pop pop
+ } ifelse
+} def
+/pdfStartPage {
+ pdfDictSize dict begin
+ /pdfFill [0] def
+ /pdfStroke [0] def
+ /pdfLastFill false def
+ /pdfLastStroke false def
+ /pdfTextMat [1 0 0 1 0 0] def
+ /pdfFontSize 0 def
+ /pdfCharSpacing 0 def
+ /pdfTextRender 0 def
+ /pdfTextRise 0 def
+ /pdfWordSpacing 0 def
+ /pdfHorizScaling 1 def
+} def
+/pdfEndPage { end } def
+% separation convention operators
+/findcmykcustomcolor where {
+ pop
+}{
+ /findcmykcustomcolor { 5 array astore } def
+} ifelse
+/setcustomcolor where {
+ pop
+}{
+ /setcustomcolor {
+ exch
+ [ exch /Separation exch dup 4 get exch /DeviceCMYK exch
+ 0 4 getinterval cvx
+ [ exch /dup load exch { mul exch dup } /forall load
+ /pop load dup ] cvx
+ ] setcolorspace setcolor
+ } def
+} ifelse
+/customcolorimage where {
+ pop
+}{
+ /customcolorimage {
+ gsave
+ [ exch /Separation exch dup 4 get exch /DeviceCMYK exch
+ 0 4 getinterval cvx
+ [ exch /dup load exch { mul exch dup } /forall load
+ /pop load dup ] cvx
+ ] setcolorspace
+ 10 dict begin
+ /ImageType 1 def
+ /DataSource exch def
+ /ImageMatrix exch def
+ /BitsPerComponent exch def
+ /Height exch def
+ /Width exch def
+ /Decode [1 0] def
+ currentdict end
+ image
+ grestore
+ } def
+} ifelse
+% PDF color state
+/sCol {
+ pdfLastStroke not {
+ pdfStroke aload length
+ dup 1 eq {
+ pop setgray
+ }{
+ dup 3 eq {
+ pop setrgbcolor
+ }{
+ 4 eq {
+ setcmykcolor
+ }{
+ findcmykcustomcolor exch setcustomcolor
+ } ifelse
+ } ifelse
+ } ifelse
+ /pdfLastStroke true def /pdfLastFill false def
+ } if
+} def
+/fCol {
+ pdfLastFill not {
+ pdfFill aload length
+ dup 1 eq {
+ pop setgray
+ }{
+ dup 3 eq {
+ pop setrgbcolor
+ }{
+ 4 eq {
+ setcmykcolor
+ }{
+ findcmykcustomcolor exch setcustomcolor
+ } ifelse
+ } ifelse
+ } ifelse
+ /pdfLastFill true def /pdfLastStroke false def
+ } if
+} def
+% build a font
+/pdfMakeFont {
+ 4 3 roll findfont
+ 4 2 roll matrix scale makefont
+ dup length dict begin
+ { 1 index /FID ne { def } { pop pop } ifelse } forall
+ /Encoding exch def
+ currentdict
+ end
+ definefont pop
+} def
+/pdfMakeFont16 {
+ exch findfont
+ dup length dict begin
+ { 1 index /FID ne { def } { pop pop } ifelse } forall
+ /WMode exch def
+ currentdict
+ end
+ definefont pop
+} def
+/pdfMakeFont16L3 {
+ 1 index /CIDFont resourcestatus {
+ pop pop 1 index /CIDFont findresource /CIDFontType known
+ } {
+ false
+ } ifelse
+ {
+ 0 eq { /Identity-H } { /Identity-V } ifelse
+ exch 1 array astore composefont pop
+ } {
+ pdfMakeFont16
+ } ifelse
+} def
+% graphics state operators
+/q { gsave pdfDictSize dict begin } def
+/Q { end grestore } def
+/cm { concat } def
+/d { setdash } def
+/i { setflat } def
+/j { setlinejoin } def
+/J { setlinecap } def
+/M { setmiterlimit } def
+/w { setlinewidth } def
+% color operators
+/g { dup 1 array astore /pdfFill exch def setgray
+ /pdfLastFill true def /pdfLastStroke false def } def
+/G { dup 1 array astore /pdfStroke exch def setgray
+ /pdfLastStroke true def /pdfLastFill false def } def
+/rg { 3 copy 3 array astore /pdfFill exch def setrgbcolor
+ /pdfLastFill true def /pdfLastStroke false def } def
+/RG { 3 copy 3 array astore /pdfStroke exch def setrgbcolor
+ /pdfLastStroke true def /pdfLastFill false def } def
+/k { 4 copy 4 array astore /pdfFill exch def setcmykcolor
+ /pdfLastFill true def /pdfLastStroke false def } def
+/K { 4 copy 4 array astore /pdfStroke exch def setcmykcolor
+ /pdfLastStroke true def /pdfLastFill false def } def
+/ck { 6 copy 6 array astore /pdfFill exch def
+ findcmykcustomcolor exch setcustomcolor
+ /pdfLastFill true def /pdfLastStroke false def } def
+/CK { 6 copy 6 array astore /pdfStroke exch def
+ findcmykcustomcolor exch setcustomcolor
+ /pdfLastStroke true def /pdfLastFill false def } def
+% path segment operators
+/m { moveto } def
+/l { lineto } def
+/c { curveto } def
+/re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } def
+/h { closepath } def
+% path painting operators
+/S { sCol stroke } def
+/Sf { fCol stroke } def
+/f { fCol fill } def
+/f* { fCol eofill } def
+% clipping operators
+/W { clip newpath } def
+/W* { eoclip newpath } def
+% text state operators
+/Tc { /pdfCharSpacing exch def } def
+/Tf { dup /pdfFontSize exch def
+ dup pdfHorizScaling mul exch matrix scale
+ pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put
+ exch findfont exch makefont setfont } def
+/Tr { /pdfTextRender exch def } def
+/Ts { /pdfTextRise exch def } def
+/Tw { /pdfWordSpacing exch def } def
+/Tz { /pdfHorizScaling exch def } def
+% text positioning operators
+/Td { pdfTextMat transform moveto } def
+/Tm { /pdfTextMat exch def } def
+% text string operators
+/awcp { % awidthcharpath
+ exch {
+ 1 string dup 0 3 index put 2 index charpath
+ 3 index 3 index rmoveto
+ 4 index eq { 5 index 5 index rmoveto } if
+ } forall
+ 6 {pop} repeat
+} def
+/Tj { fCol
+ 0 pdfTextRise pdfTextMat dtransform rmoveto
+ 1 index stringwidth pdfTextMat idtransform pop
+ sub 1 index length dup 0 ne { div } { pop pop 0 } ifelse
+ pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32
+ 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0
+ pdfTextMat dtransform
+ 6 5 roll
+ currentpoint 8 2 roll
+ pdfTextRender 1 and 0 eq {
+ 6 copy awidthshow
+ } if
+ pdfTextRender 3 and dup 1 eq exch 2 eq or {
+ 8 6 roll moveto
+ currentfont /FontType get 3 eq { fCol } { sCol } ifelse
+ false awcp currentpoint stroke moveto
+ } {
+ 8 {pop} repeat
+ } ifelse
+ 0 pdfTextRise neg pdfTextMat dtransform rmoveto } def
+/Tj16 { pdfTextRender 1 and 0 eq { fCol } { sCol } ifelse
+ 0 pdfTextRise pdfTextMat dtransform rmoveto
+ 2 index stringwidth pdfTextMat idtransform pop
+ sub exch div
+ pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32
+ 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0
+ pdfTextMat dtransform
+ 6 5 roll awidthshow
+ 0 pdfTextRise neg pdfTextMat dtransform rmoveto } def
+/Tj16V { pdfTextRender 1 and 0 eq { fCol } { sCol } ifelse
+ 0 pdfTextRise pdfTextMat dtransform rmoveto
+ 2 index stringwidth pdfTextMat idtransform exch pop
+ sub exch div
+ 0 pdfWordSpacing pdfTextMat dtransform 32
+ 4 3 roll pdfCharSpacing add 0 exch
+ pdfTextMat dtransform
+ 6 5 roll awidthshow
+ 0 pdfTextRise neg pdfTextMat dtransform rmoveto } def
+/TJm { pdfFontSize 0.001 mul mul neg 0
+ pdfTextMat dtransform rmoveto } def
+/TJmV { pdfFontSize 0.001 mul mul neg 0 exch
+ pdfTextMat dtransform rmoveto } def
+% Level 1 image operators
+/pdfIm1 {
+ /pdfImBuf1 4 index string def
+ { currentfile pdfImBuf1 readhexstring pop } image
+} def
+/pdfIm1Sep {
+ /pdfImBuf1 4 index string def
+ /pdfImBuf2 4 index string def
+ /pdfImBuf3 4 index string def
+ /pdfImBuf4 4 index string def
+ { currentfile pdfImBuf1 readhexstring pop }
+ { currentfile pdfImBuf2 readhexstring pop }
+ { currentfile pdfImBuf3 readhexstring pop }
+ { currentfile pdfImBuf4 readhexstring pop }
+ true 4 colorimage
+} def
+/pdfImM1 {
+ /pdfImBuf1 4 index 7 add 8 idiv string def
+ { currentfile pdfImBuf1 readhexstring pop } imagemask
+} def
+% Level 2 image operators
+/pdfImBuf 100 string def
+/pdfIm {
+ image
+ { currentfile pdfImBuf readline
+ not { pop exit } if
+ (%-EOD-) eq { exit } if } loop
+} def
+/pdfImSep {
+ findcmykcustomcolor exch
+ dup /Width get /pdfImBuf1 exch string def
+ begin Width Height BitsPerComponent ImageMatrix DataSource end
+ /pdfImData exch def
+ { pdfImData pdfImBuf1 readstring pop
+ 0 1 2 index length 1 sub {
+ 1 index exch 2 copy get 255 exch sub put
+ } for }
+ 6 5 roll customcolorimage
+ { currentfile pdfImBuf readline
+ not { pop exit } if
+ (%-EOD-) eq { exit } if } loop
+} def
+/pdfImM {
+ fCol imagemask
+ { currentfile pdfImBuf readline
+ not { pop exit } if
+ (%-EOD-) eq { exit } if } loop
+} def
+end
+%%EndResource
+%%EndProlog
+%%BeginSetup
+xpdf begin
+%%EndSetup
+pdfStartPage
+[] 0 d
+0 i
+0 j
+0 J
+10 M
+1 w
+0 g
+0 G
+[0.1 0 0 0.1 0 0] cm
+q
+1 i
+2820.79 1225.01 m
+2773.27 1029.17 2532.07 620.211 2403.91 440.211 c
+2275.75 259.491 2291.59 96.7712 2054.71 160.131 c
+1818.55 223.491 1752.31 211.971 1508.23 197.571 c
+1265.59 183.171 1318.15 204.771 1166.23 136.371 c
+1015.03 67.9712 507.429 965.811 466.389 1132.85 c
+426.069 1299.89 406.629 1279.73 511.749 1460.45 c
+616.869 1641.17 631.989 1819.73 770.949 2038.61 c
+909.909 2258.21 1070.47 2369.81 1058.95 2537.57 c
+1013.59 3160.37 977.589 3471.41 1254.07 3615.41 c
+1517.59 3752.21 1737.91 3670.85 1825.03 3624.05 c
+1862.47 3603.89 1938.79 3565.01 1995.67 3496.61 c
+2052.55 3429.65 2103.67 3328.13 2132.47 3199.97 c
+2191.51 2942.93 2107.99 3027.89 2174.95 2733.41 c
+2241.19 2439.65 2375.83 2295.65 2539.99 2063.09 c
+2704.15 1830.53 2875.51 1446.77 2820.79 1225.01 c
+f*
+0.4 g
+1270.63 2740.61 m
+1313.83 2757.89 1315.27 2756.45 1344.07 2819.09 c
+1367.11 2867.33 1378.63 2891.81 1377.91 2965.25 c
+1377.91 3037.25 1355.59 3061.73 1321.75 3108.53 c
+1289.35 3153.17 1237.51 3155.33 1205.11 3149.57 c
+1186.39 3146.69 1161.91 3122.93 1145.35 3087.65 c
+1134.55 3063.89 1125.91 3033.65 1125.19 3001.97 c
+1123.03 2917.01 1130.23 2884.61 1149.67 2827.01 c
+1172.71 2759.33 1228.87 2724.05 1270.63 2740.61 c
+f*
+0.431 g
+1270.63 2740.88 m
+1313.55 2758.05 1314.98 2756.61 1343.6 2818.85 c
+1366.49 2866.78 1377.94 2891.1 1377.22 2964.07 c
+1377.22 3035.61 1354.7 3061.43 1321.42 3106.43 c
+1288.48 3149.87 1238.7 3152.61 1206.54 3147.05 c
+1187.37 3144.22 1163.96 3119.76 1147.13 3085.78 c
+1135.52 3062.67 1126.53 3032.41 1125.82 3000.59 c
+1123.7 2916.2 1131.14 2883.92 1150.45 2826.72 c
+1173.31 2759.48 1229.14 2724.42 1270.63 2740.88 c
+f*
+0.459 g
+1270.64 2741.14 m
+1313.28 2758.2 1314.7 2756.78 1343.13 2818.61 c
+1365.87 2866.23 1377.24 2890.4 1376.53 2962.89 c
+1376.53 3033.96 1353.81 3061.14 1321.1 3104.32 c
+1287.61 3146.57 1239.89 3149.9 1207.97 3144.52 c
+1188.36 3141.74 1166.01 3116.6 1148.91 3083.9 c
+1136.5 3061.45 1127.15 3031.16 1126.44 2999.2 c
+1124.37 2915.4 1132.04 2883.23 1151.23 2826.43 c
+1173.91 2759.62 1229.41 2724.8 1270.64 2741.14 c
+f*
+0.49 g
+1270.64 2741.41 m
+1313 2758.36 1314.41 2756.94 1342.66 2818.37 c
+1365.25 2865.68 1376.55 2889.69 1375.84 2961.71 c
+1375.84 3032.32 1352.92 3060.84 1320.77 3102.22 c
+1286.74 3143.27 1241.07 3147.18 1209.39 3142 c
+1189.34 3139.27 1168.06 3113.43 1150.69 3082.03 c
+1137.47 3060.23 1127.77 3029.92 1127.07 2997.82 c
+1125.04 2914.59 1132.95 2882.54 1152.01 2826.14 c
+1174.51 2759.77 1229.68 2725.17 1270.64 2741.41 c
+f*
+0.522 g
+1270.64 2741.68 m
+1312.73 2758.51 1314.13 2757.11 1342.19 2818.14 c
+1364.63 2865.13 1375.86 2888.98 1375.16 2960.53 c
+1375.16 3030.68 1352.03 3060.55 1320.44 3100.12 c
+1285.87 3139.97 1242.26 3144.46 1210.82 3139.48 c
+1190.33 3136.8 1170.11 3110.26 1152.48 3080.15 c
+1138.44 3059.01 1128.39 3028.67 1127.69 2996.43 c
+1125.71 2913.79 1133.86 2881.84 1152.8 2825.85 c
+1175.12 2759.92 1229.95 2725.54 1270.64 2741.68 c
+f*
+0.549 g
+1270.64 2741.95 m
+1312.45 2758.67 1313.84 2757.27 1341.72 2817.9 c
+1364.02 2864.58 1375.17 2888.28 1374.47 2959.35 c
+1374.47 3029.03 1351.14 3060.25 1320.12 3098.02 c
+1284.99 3136.67 1243.45 3141.74 1212.25 3136.95 c
+1191.31 3134.32 1172.16 3107.1 1154.26 3078.28 c
+1139.41 3057.8 1129.01 3027.43 1128.32 2995.05 c
+1126.38 2912.98 1134.76 2881.15 1153.58 2825.56 c
+1175.72 2760.06 1230.22 2725.92 1270.64 2741.95 c
+f*
+0.58 g
+1270.64 2742.21 m
+1312.17 2758.83 1313.56 2757.44 1341.25 2817.66 c
+1363.4 2864.04 1374.47 2887.57 1373.78 2958.17 c
+1373.78 3027.39 1350.25 3059.96 1319.79 3095.91 c
+1284.12 3133.37 1244.64 3139.02 1213.68 3134.43 c
+1192.29 3131.85 1174.22 3103.93 1156.04 3076.41 c
+1140.39 3056.58 1129.63 3026.19 1128.94 2993.66 c
+1127.05 2912.17 1135.67 2880.46 1154.36 2825.27 c
+1176.32 2760.21 1230.5 2726.29 1270.64 2742.21 c
+f*
+0.612 g
+1270.65 2742.48 m
+1311.9 2758.98 1313.27 2757.6 1340.78 2817.42 c
+1362.78 2863.49 1373.78 2886.86 1373.09 2956.99 c
+1373.09 3025.75 1349.36 3059.66 1319.46 3093.81 c
+1283.25 3130.07 1245.83 3136.31 1215.11 3131.91 c
+1193.28 3129.38 1176.27 3100.76 1157.82 3074.53 c
+1141.36 3055.36 1130.25 3024.94 1129.57 2992.28 c
+1127.72 2911.37 1136.58 2879.77 1155.14 2824.98 c
+1176.92 2760.36 1230.77 2726.66 1270.65 2742.48 c
+f*
+0.639 g
+1270.65 2742.75 m
+1311.62 2759.14 1312.99 2757.77 1340.31 2817.18 c
+1362.16 2862.94 1373.09 2886.16 1372.4 2955.81 c
+1372.4 3024.1 1348.47 3059.37 1319.13 3091.71 c
+1282.38 3126.77 1247.01 3133.59 1216.53 3129.38 c
+1194.26 3126.9 1178.32 3097.59 1159.6 3072.66 c
+1142.33 3054.14 1130.87 3023.7 1130.19 2990.89 c
+1128.39 2910.56 1137.48 2879.08 1155.92 2824.69 c
+1177.52 2760.5 1231.04 2727.04 1270.65 2742.75 c
+f*
+0.671 g
+1270.65 2743.01 m
+1311.35 2759.29 1312.7 2757.93 1339.84 2816.94 c
+1361.54 2862.39 1372.39 2885.45 1371.71 2954.63 c
+1371.71 3022.46 1347.58 3059.07 1318.81 3089.61 c
+1281.51 3123.47 1248.2 3130.87 1217.96 3126.86 c
+1195.25 3124.43 1180.37 3094.43 1161.38 3070.78 c
+1143.31 3052.92 1131.49 3022.45 1130.82 2989.51 c
+1129.06 2909.76 1138.39 2878.39 1156.7 2824.4 c
+1178.12 2760.65 1231.31 2727.41 1270.65 2743.01 c
+f*
+0.702 g
+1270.66 2743.28 m
+1311.07 2759.45 1312.42 2758.1 1339.36 2816.71 c
+1360.92 2861.84 1371.7 2884.74 1371.03 2953.45 c
+1371.03 3020.81 1346.69 3058.78 1318.48 3087.5 c
+1280.64 3120.17 1249.39 3128.15 1219.39 3124.34 c
+1196.23 3121.95 1182.42 3091.26 1163.16 3068.91 c
+1144.28 3051.7 1132.12 3021.21 1131.45 2988.12 c
+1129.73 2908.95 1139.3 2877.7 1157.49 2824.11 c
+1178.72 2760.8 1231.58 2727.79 1270.66 2743.28 c
+f*
+0.729 g
+1270.66 2743.55 m
+1310.79 2759.61 1312.14 2758.27 1338.89 2816.47 c
+1360.3 2861.29 1371.01 2884.04 1370.34 2952.28 c
+1370.34 3019.17 1345.8 3058.48 1318.15 3085.4 c
+1279.77 3116.88 1250.58 3125.44 1220.82 3121.81 c
+1197.21 3119.48 1184.47 3088.09 1164.95 3067.04 c
+1145.25 3050.48 1132.74 3019.97 1132.07 2986.74 c
+1130.41 2908.14 1140.2 2877 1158.27 2823.83 c
+1179.33 2760.94 1231.85 2728.16 1270.66 2743.55 c
+f*
+0.761 g
+1270.66 2743.81 m
+1310.52 2759.76 1311.85 2758.43 1338.42 2816.23 c
+1359.68 2860.74 1370.31 2883.33 1369.65 2951.1 c
+1369.65 3017.53 1344.91 3058.18 1317.83 3083.3 c
+1278.9 3113.58 1251.77 3122.72 1222.25 3119.29 c
+1198.2 3117.01 1186.52 3084.93 1166.73 3065.16 c
+1146.23 3049.26 1133.36 3018.72 1132.7 2985.36 c
+1131.08 2907.34 1141.11 2876.31 1159.05 2823.54 c
+1179.93 2761.09 1232.12 2728.53 1270.66 2743.81 c
+f*
+0.792 g
+1270.66 2744.08 m
+1310.24 2759.92 1311.56 2758.59 1337.95 2815.99 c
+1359.06 2860.19 1369.62 2882.63 1368.96 2949.92 c
+1368.96 3015.88 1344.02 3057.89 1317.5 3081.2 c
+1278.03 3110.28 1252.95 3120 1223.67 3116.76 c
+1199.18 3114.53 1188.57 3081.76 1168.51 3063.29 c
+1147.2 3048.04 1133.98 3017.48 1133.32 2983.97 c
+1131.75 2906.53 1142.01 2875.62 1159.83 2823.25 c
+1180.53 2761.23 1232.39 2728.91 1270.66 2744.08 c
+f*
+0.82 g
+1270.66 2744.35 m
+1309.97 2760.07 1311.28 2758.76 1337.48 2815.75 c
+1358.44 2859.64 1368.93 2881.92 1368.27 2948.74 c
+1368.27 3014.24 1343.13 3057.59 1317.17 3079.1 c
+1277.16 3106.98 1254.14 3117.28 1225.1 3114.24 c
+1200.17 3112.06 1190.62 3078.59 1170.29 3061.41 c
+1148.17 3046.82 1134.6 3016.23 1133.95 2982.59 c
+1132.42 2905.73 1142.92 2874.93 1160.61 2822.96 c
+1181.13 2761.38 1232.66 2729.28 1270.66 2744.35 c
+f*
+0.851 g
+1270.67 2744.61 m
+1309.69 2760.23 1311 2758.93 1337.01 2815.51 c
+1357.83 2859.1 1368.24 2881.21 1367.58 2947.56 c
+1367.58 3012.6 1342.24 3057.3 1316.84 3076.99 c
+1276.29 3103.68 1255.33 3114.57 1226.53 3111.72 c
+1201.15 3109.59 1192.68 3075.43 1172.07 3059.54 c
+1149.15 3045.6 1135.22 3014.99 1134.57 2981.2 c
+1133.09 2904.92 1143.83 2874.24 1161.39 2822.67 c
+1181.73 2761.53 1232.94 2729.65 1270.67 2744.61 c
+f*
+0.882 g
+1270.67 2744.88 m
+1309.41 2760.39 1310.71 2759.09 1336.54 2815.27 c
+1357.21 2858.55 1367.54 2880.51 1366.89 2946.38 c
+1366.89 3010.95 1341.35 3057 1316.52 3074.89 c
+1275.41 3100.38 1256.52 3111.85 1227.96 3109.19 c
+1202.13 3107.11 1194.73 3072.26 1173.85 3057.67 c
+1150.12 3044.39 1135.84 3013.75 1135.2 2979.82 c
+1133.76 2904.11 1144.73 2873.55 1162.17 2822.38 c
+1182.33 2761.67 1233.21 2730.03 1270.67 2744.88 c
+f*
+0.91 g
+1270.67 2745.15 m
+1309.14 2760.54 1310.42 2759.26 1336.07 2815.04 c
+1356.59 2858 1366.85 2879.8 1366.21 2945.2 c
+1366.21 3009.31 1340.46 3056.71 1316.19 3072.79 c
+1274.54 3097.08 1257.71 3109.13 1229.39 3106.67 c
+1203.12 3104.64 1196.78 3069.09 1175.64 3055.79 c
+1151.09 3043.17 1136.46 3012.5 1135.82 2978.43 c
+1134.43 2903.31 1145.64 2872.85 1162.96 2822.09 c
+1182.94 2761.82 1233.48 2730.4 1270.67 2745.15 c
+f*
+0.941 g
+1270.68 2745.42 m
+1308.86 2760.7 1310.14 2759.42 1335.6 2814.8 c
+1355.97 2857.45 1366.16 2879.09 1365.52 2944.02 c
+1365.52 3007.67 1339.57 3056.41 1315.86 3070.69 c
+1273.67 3093.78 1258.89 3106.41 1230.81 3104.15 c
+1204.1 3102.17 1198.83 3065.92 1177.42 3053.92 c
+1152.06 3041.95 1137.08 3011.26 1136.45 2977.05 c
+1135.1 2902.5 1146.55 2872.16 1163.74 2821.8 c
+1183.54 2761.97 1233.75 2730.77 1270.68 2745.42 c
+f*
+0.973 g
+1270.68 2745.68 m
+1308.59 2760.85 1309.86 2759.58 1335.13 2814.56 c
+1355.35 2856.9 1365.46 2878.39 1364.83 2942.84 c
+1364.83 3006.02 1338.68 3056.12 1315.54 3068.58 c
+1272.8 3090.48 1260.08 3103.7 1232.24 3101.62 c
+1205.09 3099.69 1200.88 3062.76 1179.2 3052.04 c
+1153.04 3040.73 1137.7 3010.01 1137.07 2975.66 c
+1135.77 2901.7 1147.45 2871.47 1164.52 2821.51 c
+1184.14 2762.11 1234.02 2731.15 1270.68 2745.68 c
+f*
+1 g
+1270.68 2745.95 m
+1308.31 2761.01 1309.57 2759.75 1334.66 2814.32 c
+1354.73 2856.35 1364.77 2877.68 1364.14 2941.66 c
+1364.14 3004.38 1337.79 3055.82 1315.21 3066.48 c
+1271.93 3087.18 1261.27 3100.98 1233.67 3099.1 c
+1206.07 3097.22 1202.93 3059.59 1180.98 3050.17 c
+1154.01 3039.51 1138.32 3008.77 1137.7 2974.28 c
+1136.44 2900.89 1148.36 2870.78 1165.3 2821.22 c
+1184.74 2762.26 1234.29 2731.52 1270.68 2745.95 c
+f*
+0 g
+1230.31 3033.65 m
+1251.91 3033.65 1279.27 3019.25 1292.23 2999.81 c
+1305.91 2980.37 1315.99 2953.01 1315.99 2922.05 c
+1315.99 2875.97 1310.95 2824.85 1283.59 2809.01 c
+1274.95 2803.97 1256.23 2799.65 1245.43 2799.65 c
+1220.95 2799.65 1218.79 2815.49 1195.75 2839.25 c
+1187.83 2847.89 1164.07 2889.65 1164.07 2924.21 c
+1164.07 2945.81 1159.03 2976.77 1177.75 3004.13 c
+1190.71 3024.29 1207.27 3033.65 1230.31 3033.65 c
+f*
+1224.55 2995.02 m
+1232.99 3008.07 1266.77 3001.92 1279.05 2975.06 c
+1291.34 2948.19 1289.03 2889.84 1280.59 2886.77 c
+1258.33 2879.86 1265.23 2912.11 1246.04 2941.28 c
+1226.85 2968.91 1216.1 2981.96 1224.55 2995.02 c
+f*
+0.027 g
+1225.09 2994.47 m
+1233.42 3007.35 1266.78 3001.28 1278.9 2974.76 c
+1291.03 2948.23 1288.75 2890.62 1280.42 2887.59 c
+1258.44 2880.77 1265.26 2912.61 1246.31 2941.41 c
+1227.36 2968.69 1216.75 2981.58 1225.09 2994.47 c
+f*
+0.059 g
+1225.63 2993.92 m
+1233.86 3006.64 1266.78 3000.64 1278.75 2974.46 c
+1290.73 2948.28 1288.48 2891.4 1280.25 2888.41 c
+1258.55 2881.68 1265.28 2913.11 1246.58 2941.54 c
+1227.87 2968.47 1217.4 2981.19 1225.63 2993.92 c
+f*
+0.09 g
+1226.17 2993.37 m
+1234.29 3005.92 1266.78 3000.01 1278.6 2974.17 c
+1290.42 2948.32 1288.2 2892.19 1280.08 2889.23 c
+1258.67 2882.59 1265.31 2913.61 1246.84 2941.67 c
+1228.38 2968.25 1218.04 2980.81 1226.17 2993.37 c
+f*
+0.118 g
+1226.71 2992.82 m
+1234.72 3005.2 1266.79 2999.37 1278.45 2973.87 c
+1290.11 2948.36 1287.92 2892.97 1279.91 2890.05 c
+1258.78 2883.49 1265.33 2914.11 1247.11 2941.8 c
+1228.89 2968.03 1218.69 2980.42 1226.71 2992.82 c
+f*
+0.149 g
+1227.25 2992.27 m
+1235.16 3004.49 1266.8 2998.73 1278.3 2973.57 c
+1289.81 2948.4 1287.64 2893.75 1279.74 2890.87 c
+1258.89 2884.4 1265.35 2914.61 1247.38 2941.93 c
+1229.4 2967.81 1219.34 2980.04 1227.25 2992.27 c
+f*
+0.18 g
+1227.79 2991.71 m
+1235.59 3003.77 1266.8 2998.09 1278.15 2973.27 c
+1289.5 2948.44 1287.37 2894.53 1279.57 2891.7 c
+1259 2885.31 1265.38 2915.11 1247.65 2942.06 c
+1229.92 2967.59 1219.98 2979.65 1227.79 2991.71 c
+f*
+0.208 g
+1228.33 2991.16 m
+1236.02 3003.05 1266.8 2997.45 1278 2972.97 c
+1289.19 2948.49 1287.09 2895.31 1279.4 2892.52 c
+1259.11 2886.22 1265.41 2915.61 1247.92 2942.19 c
+1230.43 2967.37 1220.63 2979.27 1228.33 2991.16 c
+f*
+0.239 g
+1228.87 2990.61 m
+1236.45 3002.34 1266.81 2996.82 1277.85 2972.68 c
+1288.89 2948.53 1286.81 2896.1 1279.23 2893.34 c
+1259.23 2887.13 1265.43 2916.11 1248.18 2942.32 c
+1230.94 2967.15 1221.28 2978.88 1228.87 2990.61 c
+f*
+0.271 g
+1229.41 2990.06 m
+1236.89 3001.62 1266.82 2996.18 1277.7 2972.38 c
+1288.58 2948.57 1286.54 2896.88 1279.06 2894.16 c
+1259.34 2888.04 1265.46 2916.61 1248.45 2942.45 c
+1231.45 2966.93 1221.93 2978.5 1229.41 2990.06 c
+f*
+0.298 g
+1229.95 2989.51 m
+1237.32 3000.91 1266.82 2995.54 1277.55 2972.08 c
+1288.27 2948.62 1286.26 2897.66 1278.89 2894.98 c
+1259.45 2888.95 1265.48 2917.11 1248.72 2942.58 c
+1231.96 2966.71 1222.57 2978.11 1229.95 2989.51 c
+f*
+0.329 g
+1230.49 2988.96 m
+1237.75 3000.19 1266.83 2994.9 1277.39 2971.78 c
+1287.97 2948.66 1285.98 2898.44 1278.72 2895.8 c
+1259.56 2889.85 1265.5 2917.61 1248.99 2942.71 c
+1232.47 2966.49 1223.22 2977.72 1230.49 2988.96 c
+f*
+0.361 g
+1231.03 2988.41 m
+1238.19 2999.47 1266.83 2994.26 1277.24 2971.48 c
+1287.66 2948.7 1285.71 2899.22 1278.55 2896.62 c
+1259.67 2890.76 1265.53 2918.11 1249.26 2942.84 c
+1232.98 2966.27 1223.87 2977.34 1231.03 2988.41 c
+f*
+0.388 g
+1231.57 2987.86 m
+1238.62 2998.76 1266.84 2993.63 1277.09 2971.19 c
+1287.36 2948.74 1285.43 2900.01 1278.38 2897.44 c
+1259.79 2891.67 1265.55 2918.61 1249.52 2942.97 c
+1233.49 2966.05 1224.52 2976.95 1231.57 2987.86 c
+f*
+0.42 g
+1232.11 2987.31 m
+1239.05 2998.04 1266.84 2992.99 1276.94 2970.89 c
+1287.05 2948.78 1285.15 2900.79 1278.21 2898.26 c
+1259.9 2892.58 1265.58 2919.11 1249.79 2943.1 c
+1234 2965.83 1225.17 2976.57 1232.11 2987.31 c
+f*
+0.451 g
+1232.65 2986.76 m
+1239.49 2997.32 1266.84 2992.35 1276.79 2970.59 c
+1286.74 2948.83 1284.88 2901.57 1278.04 2899.09 c
+1260.01 2893.49 1265.61 2919.61 1250.06 2943.23 c
+1234.51 2965.61 1225.81 2976.18 1232.65 2986.76 c
+f*
+0.478 g
+1233.19 2986.2 m
+1239.92 2996.61 1266.85 2991.71 1276.64 2970.29 c
+1286.44 2948.87 1284.6 2902.35 1277.87 2899.91 c
+1260.12 2894.4 1265.63 2920.11 1250.33 2943.36 c
+1235.03 2965.39 1226.46 2975.8 1233.19 2986.2 c
+f*
+0.51 g
+1233.73 2985.65 m
+1240.35 2995.89 1266.85 2991.07 1276.49 2969.99 c
+1286.13 2948.91 1284.32 2903.13 1277.7 2900.73 c
+1260.23 2895.3 1265.65 2920.61 1250.6 2943.49 c
+1235.54 2965.17 1227.11 2975.42 1233.73 2985.65 c
+f*
+0.541 g
+1234.27 2985.1 m
+1240.78 2995.17 1266.86 2990.44 1276.34 2969.7 c
+1285.82 2948.96 1284.04 2903.92 1277.53 2901.55 c
+1260.35 2896.21 1265.68 2921.11 1250.86 2943.62 c
+1236.05 2964.95 1227.75 2975.03 1234.27 2985.1 c
+f*
+0.569 g
+1234.81 2984.55 m
+1241.22 2994.46 1266.86 2989.8 1276.19 2969.4 c
+1285.52 2949 1283.77 2904.7 1277.36 2902.37 c
+1260.46 2897.12 1265.7 2921.61 1251.13 2943.75 c
+1236.56 2964.73 1228.4 2974.65 1234.81 2984.55 c
+f*
+0.6 g
+1235.35 2984 m
+1241.65 2993.74 1266.87 2989.16 1276.04 2969.1 c
+1285.21 2949.04 1283.49 2905.48 1277.19 2903.19 c
+1260.57 2898.03 1265.73 2922.11 1251.4 2943.88 c
+1237.07 2964.51 1229.05 2974.26 1235.35 2984 c
+f*
+0.4 g
+1717.03 2731.25 m
+1825.03 2742.77 1863.19 2784.53 1882.63 2857.25 c
+1899.91 2922.05 1900.63 2994.05 1852.39 3078.29 c
+1807.03 3158.93 1781.11 3171.89 1715.59 3176.93 c
+1614.79 3185.57 1567.27 3115.01 1544.95 3064.61 c
+1521.19 3009.89 1526.23 3017.81 1527.67 2948.69 c
+1529.11 2875.97 1551.43 2845.73 1576.63 2800.37 c
+1601.83 2755.73 1704.79 2730.53 1717.03 2731.25 c
+f*
+0.431 g
+1717.08 2731.66 m
+1824.67 2742.98 1863.26 2785.2 1882.23 2857.35 c
+1899.24 2922.61 1899.14 2994.09 1851.27 3076.35 c
+1806.93 3154.32 1780.33 3167.47 1715.59 3172.47 c
+1615.1 3181.08 1568.9 3113.33 1546.4 3063.73 c
+1523.26 3010.99 1527.47 3016.88 1528.96 2948.59 c
+1530.5 2875.87 1552.13 2845.95 1577.3 2800.58 c
+1602.5 2755.83 1704.84 2730.94 1717.08 2731.66 c
+f*
+0.459 g
+1717.13 2732.08 m
+1824.31 2743.18 1863.33 2785.87 1881.82 2857.46 c
+1898.57 2923.16 1897.65 2994.13 1850.15 3074.41 c
+1806.84 3149.71 1779.55 3163.05 1715.59 3168.01 c
+1615.42 3176.58 1570.53 3111.66 1547.85 3062.85 c
+1525.33 3012.1 1528.72 3015.95 1530.26 2948.48 c
+1531.9 2875.77 1552.83 2846.17 1577.98 2800.78 c
+1603.18 2755.94 1704.9 2731.34 1717.13 2732.08 c
+f*
+0.49 g
+1717.18 2732.49 m
+1823.94 2743.39 1863.4 2786.55 1881.42 2857.56 c
+1897.9 2923.72 1896.16 2994.16 1849.03 3072.48 c
+1806.74 3145.11 1778.78 3158.63 1715.59 3163.55 c
+1615.73 3172.09 1572.16 3109.98 1549.3 3061.97 c
+1527.4 3013.2 1529.96 3015.01 1531.55 2948.38 c
+1533.29 2875.67 1553.53 2846.4 1578.65 2800.99 c
+1603.85 2756.04 1704.95 2731.74 1717.18 2732.49 c
+f*
+0.522 g
+1717.24 2732.91 m
+1823.58 2743.6 1863.47 2787.22 1881.01 2857.66 c
+1897.23 2924.27 1894.68 2994.2 1847.91 3070.54 c
+1806.65 3140.5 1778 3154.21 1715.59 3159.08 c
+1616.04 3167.6 1573.79 3108.31 1550.75 3061.09 c
+1529.48 3014.3 1531.2 3014.08 1532.85 2948.28 c
+1534.68 2875.57 1554.24 2846.62 1579.32 2801.2 c
+1604.52 2756.14 1705 2732.15 1717.24 2732.91 c
+f*
+0.549 g
+1717.29 2733.32 m
+1823.22 2743.8 1863.54 2787.89 1880.61 2857.77 c
+1896.56 2924.83 1893.19 2994.24 1846.79 3068.6 c
+1806.55 3135.89 1777.22 3149.78 1715.59 3154.62 c
+1616.35 3163.11 1575.43 3106.63 1552.2 3060.21 c
+1531.55 3015.41 1532.45 3013.15 1534.14 2948.17 c
+1536.08 2875.47 1554.94 2846.84 1579.99 2801.41 c
+1605.2 2756.25 1705.05 2732.55 1717.29 2733.32 c
+f*
+0.58 g
+1717.34 2733.74 m
+1822.86 2744.01 1863.61 2788.56 1880.2 2857.87 c
+1895.89 2925.38 1891.7 2994.27 1845.67 3066.66 c
+1806.45 3131.28 1776.45 3145.36 1715.59 3150.16 c
+1616.67 3158.61 1577.06 3104.95 1553.65 3059.33 c
+1533.62 3016.51 1533.69 3012.22 1535.44 2948.07 c
+1537.47 2875.37 1555.64 2847.07 1580.67 2801.61 c
+1605.87 2756.35 1705.1 2732.96 1717.34 2733.74 c
+f*
+0.612 g
+1717.39 2734.15 m
+1822.49 2744.22 1863.68 2789.23 1879.8 2857.97 c
+1895.22 2925.94 1890.21 2994.31 1844.55 3064.72 c
+1806.36 3126.67 1775.67 3140.94 1715.59 3145.7 c
+1616.98 3154.12 1578.69 3103.28 1555.1 3058.45 c
+1535.69 3017.61 1534.93 3011.29 1536.73 2947.97 c
+1538.86 2875.27 1556.34 2847.29 1581.34 2801.82 c
+1606.54 2756.45 1705.16 2733.37 1717.39 2734.15 c
+f*
+0.639 g
+1717.44 2734.57 m
+1822.13 2744.43 1863.75 2789.91 1879.39 2858.08 c
+1894.55 2926.49 1888.72 2994.35 1843.43 3062.79 c
+1806.26 3122.07 1774.89 3136.52 1715.59 3141.24 c
+1617.29 3149.63 1580.32 3101.6 1556.55 3057.57 c
+1537.76 3018.71 1536.17 3010.35 1538.03 2947.86 c
+1540.26 2875.17 1557.04 2847.51 1582.01 2802.03 c
+1607.21 2756.56 1705.21 2733.77 1717.44 2734.57 c
+f*
+0.671 g
+1717.49 2734.98 m
+1821.77 2744.63 1863.82 2790.58 1878.99 2858.18 c
+1893.88 2927.05 1887.23 2994.39 1842.31 3060.85 c
+1806.17 3117.46 1774.11 3132.1 1715.59 3136.78 c
+1617.6 3145.13 1581.95 3099.93 1558 3056.69 c
+1539.83 3019.82 1537.42 3009.42 1539.32 2947.76 c
+1541.65 2875.07 1557.74 2847.73 1582.69 2802.23 c
+1607.89 2756.66 1705.26 2734.18 1717.49 2734.98 c
+f*
+0.702 g
+1717.55 2735.39 m
+1821.41 2744.84 1863.89 2791.25 1878.58 2858.28 c
+1893.21 2927.6 1885.74 2994.43 1841.2 3058.91 c
+1806.07 3112.85 1773.33 3127.68 1715.59 3132.32 c
+1617.92 3140.64 1583.58 3098.25 1559.45 3055.81 c
+1541.9 3020.92 1538.66 3008.49 1540.61 2947.66 c
+1543.05 2874.97 1558.45 2847.96 1583.36 2802.44 c
+1608.56 2756.77 1705.31 2734.58 1717.55 2735.39 c
+f*
+0.729 g
+1717.6 2735.81 m
+1821.04 2745.05 1863.97 2791.92 1878.18 2858.39 c
+1892.54 2928.16 1884.26 2994.46 1840.08 3056.97 c
+1805.97 3108.24 1772.56 3123.26 1715.59 3127.85 c
+1618.23 3136.15 1585.21 3096.57 1560.9 3054.92 c
+1543.98 3022.02 1539.9 3007.56 1541.91 2947.55 c
+1544.44 2874.87 1559.15 2848.18 1584.03 2802.65 c
+1609.23 2756.87 1705.37 2734.99 1717.6 2735.81 c
+f*
+0.761 g
+1717.65 2736.22 m
+1820.68 2745.25 1864.04 2792.59 1877.78 2858.49 c
+1891.87 2928.72 1882.77 2994.5 1838.96 3055.03 c
+1805.88 3103.63 1771.78 3118.84 1715.59 3123.39 c
+1618.54 3131.65 1586.84 3094.9 1562.35 3054.04 c
+1546.05 3023.13 1541.15 3006.63 1543.2 2947.45 c
+1545.83 2874.77 1559.85 2848.4 1584.71 2802.85 c
+1609.91 2756.97 1705.42 2735.39 1717.65 2736.22 c
+f*
+0.792 g
+1717.7 2736.64 m
+1820.32 2745.46 1864.11 2793.27 1877.37 2858.6 c
+1891.2 2929.27 1881.28 2994.54 1837.84 3053.1 c
+1805.78 3099.03 1771 3114.42 1715.59 3118.93 c
+1618.85 3127.16 1588.47 3093.22 1563.8 3053.16 c
+1548.12 3024.23 1542.39 3005.69 1544.5 2947.34 c
+1547.23 2874.67 1560.55 2848.62 1585.38 2803.06 c
+1610.58 2757.08 1705.47 2735.79 1717.7 2736.64 c
+f*
+0.82 g
+1717.75 2737.05 m
+1819.95 2745.67 1864.18 2793.94 1876.97 2858.7 c
+1890.53 2929.83 1879.79 2994.58 1836.72 3051.16 c
+1805.69 3094.42 1770.22 3110 1715.59 3114.47 c
+1619.17 3122.67 1590.1 3091.55 1565.25 3052.28 c
+1550.19 3025.33 1543.63 3004.76 1545.79 2947.24 c
+1548.62 2874.57 1561.25 2848.84 1586.05 2803.27 c
+1611.25 2757.18 1705.53 2736.2 1717.75 2737.05 c
+f*
+0.851 g
+1717.8 2737.47 m
+1819.59 2745.88 1864.25 2794.61 1876.56 2858.8 c
+1889.86 2930.38 1878.3 2994.61 1835.6 3049.22 c
+1805.59 3089.81 1769.45 3105.57 1715.59 3110.01 c
+1619.48 3118.18 1591.73 3089.87 1566.7 3051.4 c
+1552.26 3026.43 1544.87 3003.83 1547.09 2947.14 c
+1550.01 2874.47 1561.95 2849.07 1586.73 2803.47 c
+1611.93 2757.28 1705.58 2736.61 1717.8 2737.47 c
+f*
+0.882 g
+1717.85 2737.88 m
+1819.23 2746.08 1864.32 2795.28 1876.16 2858.91 c
+1889.19 2930.94 1876.81 2994.65 1834.48 3047.28 c
+1805.49 3085.2 1768.67 3101.15 1715.59 3105.55 c
+1619.79 3113.68 1593.37 3088.19 1568.15 3050.52 c
+1554.33 3027.54 1546.12 3002.9 1548.38 2947.03 c
+1551.41 2874.37 1562.65 2849.29 1587.4 2803.68 c
+1612.6 2757.39 1705.63 2737.01 1717.85 2737.88 c
+f*
+0.91 g
+1717.91 2738.3 m
+1818.87 2746.29 1864.39 2795.95 1875.75 2859.01 c
+1888.52 2931.49 1875.33 2994.69 1833.36 3045.34 c
+1805.4 3080.59 1767.89 3096.73 1715.59 3101.08 c
+1620.1 3109.19 1595 3086.52 1569.6 3049.64 c
+1556.41 3028.64 1547.36 3001.97 1549.68 2946.93 c
+1552.8 2874.27 1563.36 2849.51 1588.07 2803.89 c
+1613.27 2757.49 1705.68 2737.42 1717.91 2738.3 c
+f*
+0.941 g
+1717.96 2738.71 m
+1818.5 2746.5 1864.46 2796.63 1875.35 2859.11 c
+1887.85 2932.05 1873.84 2994.73 1832.24 3043.41 c
+1805.3 3075.99 1767.12 3092.31 1715.59 3096.62 c
+1620.42 3104.7 1596.63 3084.84 1571.05 3048.76 c
+1558.48 3029.74 1548.6 3001.03 1550.97 2946.83 c
+1554.19 2874.17 1564.06 2849.74 1588.74 2804.1 c
+1613.94 2757.59 1705.74 2737.82 1717.96 2738.71 c
+f*
+0.973 g
+1718.01 2739.13 m
+1818.14 2746.7 1864.53 2797.3 1874.94 2859.22 c
+1887.18 2932.6 1872.35 2994.76 1831.12 3041.47 c
+1805.21 3071.38 1766.34 3087.89 1715.59 3092.16 c
+1620.73 3100.2 1598.26 3083.17 1572.5 3047.88 c
+1560.55 3030.85 1549.85 3000.1 1552.27 2946.72 c
+1555.59 2874.07 1564.76 2849.96 1589.42 2804.3 c
+1614.62 2757.7 1705.79 2738.23 1718.01 2739.13 c
+f*
+1 g
+1718.06 2739.54 m
+1817.78 2746.91 1864.6 2797.97 1874.54 2859.32 c
+1886.51 2933.16 1870.86 2994.8 1830 3039.53 c
+1805.11 3066.77 1765.56 3083.47 1715.59 3087.7 c
+1621.04 3095.71 1599.89 3081.49 1573.95 3047 c
+1562.62 3031.95 1551.09 2999.17 1553.56 2946.62 c
+1556.98 2873.97 1565.46 2850.18 1590.09 2804.51 c
+1615.29 2757.8 1705.84 2738.63 1718.06 2739.54 c
+f*
+0 g
+1708.39 3036.53 m
+1762.39 3036.53 1794.07 2988.29 1804.87 2926.37 c
+1809.19 2898.29 1802.71 2865.89 1785.43 2843.57 c
+1765.99 2817.65 1731.43 2801.81 1703.35 2801.81 c
+1676.71 2801.81 1646.47 2797.49 1630.63 2819.09 c
+1614.79 2841.41 1611.19 2891.09 1611.19 2926.37 c
+1611.19 2965.97 1622.71 2994.05 1642.87 3016.37 c
+1657.99 3032.93 1685.35 3036.53 1708.39 3036.53 c
+f*
+1711.84 3014.31 m
+1721.64 3020.84 1737.96 3014.31 1756.73 2993.09 c
+1777.12 2970.24 1786.1 2952.29 1761.62 2939.24 c
+1742.85 2929.44 1737.14 2958.82 1725.72 2971.06 c
+1707.77 2990.64 1692.26 3001.25 1711.84 3014.31 c
+f*
+0.027 g
+1712.24 3013.72 m
+1721.84 3020.21 1737.97 3013.72 1756.46 2992.82 c
+1776.55 2970.31 1785.11 2952.62 1761.28 2939.77 c
+1742.9 2930 1737.25 2959.06 1726.03 2971.11 c
+1708.34 2990.38 1693.06 3000.77 1712.24 3013.72 c
+f*
+0.059 g
+1712.64 3013.14 m
+1722.03 3019.59 1737.98 3013.14 1756.2 2992.55 c
+1775.98 2970.37 1784.12 2952.96 1760.94 2940.3 c
+1742.96 2930.56 1737.36 2959.29 1726.33 2971.17 c
+1708.92 2990.11 1693.87 3000.29 1712.64 3013.14 c
+f*
+0.09 g
+1713.04 3012.55 m
+1722.23 3018.96 1737.99 3012.55 1755.93 2992.28 c
+1775.41 2970.44 1783.13 2953.29 1760.6 2940.82 c
+1743.01 2931.11 1737.47 2959.53 1726.64 2971.22 c
+1709.49 2989.85 1694.67 2999.81 1713.04 3012.55 c
+f*
+0.118 g
+1713.44 3011.96 m
+1722.42 3018.34 1738 3011.96 1755.66 2992 c
+1774.84 2970.51 1782.14 2953.63 1760.26 2941.35 c
+1743.06 2931.67 1737.58 2959.77 1726.95 2971.28 c
+1710.06 2989.58 1695.48 2999.34 1713.44 3011.96 c
+f*
+0.149 g
+1713.83 3011.38 m
+1722.62 3017.71 1738.01 3011.38 1755.39 2991.73 c
+1774.27 2970.58 1781.15 2953.96 1759.92 2941.88 c
+1743.12 2932.23 1737.69 2960 1727.26 2971.33 c
+1710.64 2989.32 1696.28 2998.86 1713.83 3011.38 c
+f*
+0.18 g
+1714.23 3010.79 m
+1722.82 3017.08 1738.03 3010.79 1755.12 2991.46 c
+1773.7 2970.64 1780.16 2954.29 1759.58 2942.41 c
+1743.17 2932.79 1737.8 2960.24 1727.57 2971.39 c
+1711.21 2989.06 1697.08 2998.38 1714.23 3010.79 c
+f*
+0.208 g
+1714.63 3010.2 m
+1723.01 3016.46 1738.04 3010.2 1754.86 2991.19 c
+1773.13 2970.71 1779.17 2954.63 1759.24 2942.93 c
+1743.22 2933.35 1737.91 2960.48 1727.87 2971.45 c
+1711.78 2988.79 1697.89 2997.9 1714.63 3010.2 c
+f*
+0.239 g
+1715.03 3009.62 m
+1723.21 3015.83 1738.05 3009.62 1754.59 2990.92 c
+1772.56 2970.78 1778.18 2954.96 1758.9 2943.46 c
+1743.28 2933.9 1738.02 2960.72 1728.18 2971.5 c
+1712.36 2988.53 1698.69 2997.42 1715.03 3009.62 c
+f*
+0.271 g
+1715.43 3009.03 m
+1723.4 3015.21 1738.06 3009.03 1754.32 2990.65 c
+1771.99 2970.85 1777.19 2955.3 1758.56 2943.99 c
+1743.33 2934.46 1738.13 2960.95 1728.49 2971.55 c
+1712.93 2988.26 1699.5 2996.94 1715.43 3009.03 c
+f*
+0.298 g
+1715.83 3008.44 m
+1723.6 3014.58 1738.07 3008.44 1754.06 2990.37 c
+1771.42 2970.91 1776.2 2955.63 1758.22 2944.52 c
+1743.39 2935.02 1738.24 2961.19 1728.8 2971.61 c
+1713.5 2988 1700.3 2996.46 1715.83 3008.44 c
+f*
+0.329 g
+1716.23 3007.86 m
+1723.8 3013.95 1738.08 3007.86 1753.79 2990.1 c
+1770.85 2970.98 1775.21 2955.96 1757.88 2945.04 c
+1743.44 2935.58 1738.34 2961.43 1729.1 2971.67 c
+1714.08 2987.74 1701.1 2995.99 1716.23 3007.86 c
+f*
+0.361 g
+1716.63 3007.27 m
+1723.99 3013.33 1738.09 3007.27 1753.52 2989.83 c
+1770.28 2971.05 1774.22 2956.3 1757.54 2945.57 c
+1743.49 2936.14 1738.45 2961.66 1729.41 2971.72 c
+1714.65 2987.47 1701.91 2995.51 1716.63 3007.27 c
+f*
+0.388 g
+1717.03 3006.69 m
+1724.19 3012.7 1738.1 3006.69 1753.25 2989.56 c
+1769.71 2971.12 1773.23 2956.63 1757.2 2946.1 c
+1743.55 2936.69 1738.56 2961.9 1729.72 2971.77 c
+1715.23 2987.21 1702.71 2995.03 1717.03 3006.69 c
+f*
+0.42 g
+1717.43 3006.1 m
+1724.38 3012.08 1738.11 3006.1 1752.99 2989.29 c
+1769.14 2971.18 1772.24 2956.97 1756.86 2946.63 c
+1743.6 2937.25 1738.67 2962.14 1730.03 2971.83 c
+1715.8 2986.94 1703.52 2994.55 1717.43 3006.1 c
+f*
+0.451 g
+1717.83 3005.51 m
+1724.58 3011.45 1738.12 3005.51 1752.72 2989.02 c
+1768.57 2971.25 1771.25 2957.3 1756.52 2947.15 c
+1743.65 2937.81 1738.78 2962.37 1730.33 2971.89 c
+1716.37 2986.68 1704.32 2994.07 1717.83 3005.51 c
+f*
+0.478 g
+1718.22 3004.93 m
+1724.78 3010.82 1738.14 3004.93 1752.45 2988.75 c
+1768 2971.32 1770.26 2957.63 1756.18 2947.68 c
+1743.71 2938.37 1738.89 2962.61 1730.64 2971.94 c
+1716.95 2986.42 1705.12 2993.59 1718.22 3004.93 c
+f*
+0.51 g
+1718.62 3004.34 m
+1724.97 3010.2 1738.15 3004.34 1752.18 2988.47 c
+1767.43 2971.39 1769.27 2957.97 1755.84 2948.21 c
+1743.76 2938.93 1739 2962.85 1730.95 2971.99 c
+1717.52 2986.15 1705.93 2993.12 1718.62 3004.34 c
+f*
+0.541 g
+1719.02 3003.75 m
+1725.17 3009.57 1738.16 3003.75 1751.91 2988.2 c
+1766.86 2971.46 1768.28 2958.3 1755.5 2948.74 c
+1743.81 2939.48 1739.11 2963.09 1731.26 2972.05 c
+1718.09 2985.89 1706.73 2992.64 1719.02 3003.75 c
+f*
+0.569 g
+1719.42 3003.17 m
+1725.36 3008.95 1738.17 3003.17 1751.65 2987.93 c
+1766.29 2971.52 1767.29 2958.64 1755.16 2949.26 c
+1743.87 2940.04 1739.22 2963.32 1731.56 2972.11 c
+1718.67 2985.62 1707.54 2992.16 1719.42 3003.17 c
+f*
+0.6 g
+1719.82 3002.58 m
+1725.56 3008.32 1738.18 3002.58 1751.38 2987.66 c
+1765.72 2971.59 1766.3 2958.97 1754.82 2949.79 c
+1743.92 2940.6 1739.33 2963.56 1731.87 2972.16 c
+1719.24 2985.36 1708.34 2991.68 1719.82 3002.58 c
+f*
+0.4 g
+1385.83 2398.61 m
+1292.23 2395.01 1143.91 2657.09 1140.31 2548.37 c
+1137.43 2456.21 1142.47 2457.65 1142.47 2368.37 c
+1142.47 2308.61 1115.11 2304.29 1056.07 2214.29 c
+1025.83 2166.77 1002.07 2115.65 983.349 2063.81 c
+971.829 2032.85 961.029 2000.45 952.389 1968.77 c
+948.789 1952.93 942.309 1936.37 938.709 1920.53 c
+909.189 1811.81 804.069 1677.89 779.589 1569.17 c
+755.109 1461.17 726.309 1392.05 729.909 1247.33 c
+733.509 1102.61 734.949 1144.37 778.869 1108.37 c
+822.069 1072.37 866.709 1038.53 935.109 978.051 c
+1007.11 915.411 1156.87 805.971 1177.03 772.131 c
+1198.63 737.571 1197.91 659.811 1184.95 634.611 c
+1171.99 610.131 1058.95 596.451 1059.67 596.451 c
+1058.95 596.451 1158.31 459.651 1177.75 440.211 c
+1196.47 421.491 1277.11 331.491 1605.43 392.691 c
+1790.47 427.251 1933.75 530.931 2037.43 631.011 c
+2171.35 761.331 2103.67 798.771 2120.95 864.291 c
+2146.15 958.611 2228.23 993.891 2246.95 1100.45 c
+2249.11 1115.57 2254.15 1127.09 2267.83 1149.41 c
+2288.71 1181.09 2283.67 1243.73 2283.67 1301.33 c
+2283.67 1451.09 2266.39 1603.73 2231.83 1716.05 c
+2200.15 1821.17 2149.75 1894.61 2106.55 1989.65 c
+2020.15 2179.01 2024.47 2263.97 1947.43 2384.93 c
+1859.59 2524.61 1902.79 2617.49 1786.15 2611.73 c
+1640.71 2603.81 1523.35 2404.37 1385.83 2398.61 c
+f*
+0.431 g
+1385.66 2387.76 m
+1292.85 2384.23 1148.2 2642.88 1143.24 2539.56 c
+1140.08 2452 1144.24 2452.78 1143.54 2367.09 c
+1142.03 2308.39 1114.01 2300.71 1056.28 2212.27 c
+1026.15 2164.64 1003.54 2114.15 986.352 2063.5 c
+976.668 2030.97 970.75 1999.28 962.052 1968.24 c
+957.897 1951.83 947.083 1936.38 940.197 1917.83 c
+907.671 1810.03 804.76 1676.01 780.594 1569.05 c
+755.937 1460.95 726.897 1392.1 730.982 1247.65 c
+734.647 1107.64 734.93 1145.88 778.719 1109.47 c
+821.545 1073.31 867.105 1038.78 935.341 978.457 c
+1007.17 915.973 1157.71 806.297 1177.77 772.573 c
+1199.27 738.131 1199.08 659.391 1186.21 634.331 c
+1173.37 609.955 1060.41 595.593 1061.13 595.593 c
+1060.41 595.593 1159.29 459.925 1178.7 440.512 c
+1197.4 421.818 1277.71 332.431 1605.48 393.477 c
+1790.72 428.025 1936.71 531.003 2036.26 632.032 c
+2164.15 759.652 2097.33 799.772 2114.52 864.958 c
+2139.65 959.114 2227.29 994.555 2245.95 1100.97 c
+2248.11 1116.03 2253.49 1127.5 2267.08 1149.72 c
+2288.04 1181.74 2282.69 1244.19 2282.9 1301.57 c
+2283.56 1451.83 2265.85 1603.91 2231.3 1715.9 c
+2199.6 1820.74 2149.27 1894.08 2106.16 1988.95 c
+2019.91 2178.02 2023.95 2263.11 1946.84 2383.69 c
+1860.97 2519.82 1900.82 2609.53 1786.72 2603.6 c
+1642.95 2595.34 1522.95 2393.44 1385.66 2387.76 c
+f*
+0.459 g
+1385.48 2376.91 m
+1293.47 2373.46 1152.49 2628.66 1146.17 2530.74 c
+1142.73 2447.8 1146.01 2447.9 1144.61 2365.8 c
+1141.6 2308.16 1112.91 2297.13 1056.48 2210.25 c
+1026.47 2162.51 1005.01 2112.65 989.354 2063.19 c
+981.507 2029.1 980.471 1998.12 971.714 1967.71 c
+967.004 1950.73 951.857 1936.38 941.684 1915.12 c
+906.152 1808.24 805.452 1674.13 781.599 1568.93 c
+756.766 1460.73 727.484 1392.15 732.055 1247.97 c
+735.785 1112.68 734.91 1147.39 778.57 1110.58 c
+821.021 1074.25 867.5 1039.04 935.573 978.863 c
+1007.24 916.534 1158.55 806.623 1178.51 773.016 c
+1199.91 738.69 1200.25 658.972 1187.46 634.051 c
+1174.75 609.778 1061.88 594.735 1062.59 594.735 c
+1061.88 594.735 1160.27 460.2 1179.65 440.813 c
+1198.32 422.144 1278.32 333.371 1605.53 394.263 c
+1790.98 428.799 1939.68 531.075 2035.09 633.052 c
+2156.95 757.973 2090.99 800.773 2108.09 865.624 c
+2133.15 959.616 2226.35 995.22 2244.95 1101.49 c
+2247.1 1116.5 2252.83 1127.91 2266.33 1150.03 c
+2287.36 1182.4 2281.71 1244.66 2282.13 1301.82 c
+2283.46 1452.57 2265.32 1604.09 2230.78 1715.75 c
+2199.05 1820.31 2148.78 1893.55 2105.77 1988.26 c
+2019.68 2177.03 2023.43 2262.25 1946.25 2382.45 c
+1862.36 2515.03 1898.86 2601.56 1787.3 2595.47 c
+1645.2 2586.87 1522.56 2382.51 1385.48 2376.91 c
+f*
+0.49 g
+1385.31 2366.06 m
+1294.09 2362.68 1156.78 2614.45 1149.09 2521.93 c
+1145.38 2443.59 1147.78 2443.03 1145.68 2364.52 c
+1141.16 2307.94 1111.81 2293.56 1056.69 2208.23 c
+1026.78 2160.38 1006.48 2111.15 992.357 2062.89 c
+986.346 2027.22 990.192 1996.95 981.377 1967.18 c
+976.112 1949.62 956.631 1936.39 943.172 1912.42 c
+904.634 1806.46 806.143 1672.25 782.604 1568.8 c
+757.594 1460.51 728.072 1392.2 733.127 1248.28 c
+736.923 1117.71 734.89 1148.9 778.42 1111.68 c
+820.497 1075.2 867.896 1039.29 935.805 979.269 c
+1007.3 917.096 1159.39 806.949 1179.25 773.458 c
+1200.56 739.25 1201.42 658.552 1188.72 633.771 c
+1176.13 609.602 1063.34 593.877 1064.06 593.877 c
+1063.34 593.877 1161.24 460.474 1180.6 441.114 c
+1199.24 422.471 1278.92 334.311 1605.58 395.049 c
+1791.23 429.573 1942.64 531.147 2033.92 634.072 c
+2149.75 756.295 2084.66 801.775 2101.66 866.291 c
+2126.65 960.119 2225.41 995.884 2243.95 1102.01 c
+2246.1 1116.96 2252.17 1128.33 2265.58 1150.35 c
+2286.69 1183.05 2280.73 1245.12 2281.36 1302.06 c
+2283.35 1453.31 2264.78 1604.27 2230.25 1715.61 c
+2198.49 1819.88 2148.3 1893.01 2105.38 1987.56 c
+2019.44 2176.04 2022.9 2261.38 1945.65 2381.22 c
+1863.74 2510.24 1896.89 2593.6 1787.87 2587.34 c
+1647.44 2578.4 1522.16 2371.59 1385.31 2366.06 c
+f*
+0.522 g
+1385.13 2355.21 m
+1294.71 2351.91 1161.06 2600.23 1152.02 2513.11 c
+1148.04 2439.39 1149.55 2438.16 1146.75 2363.23 c
+1140.72 2307.72 1110.71 2289.98 1056.9 2206.21 c
+1027.1 2158.25 1007.95 2109.65 995.359 2062.58 c
+991.185 2025.34 999.913 1995.78 991.039 1966.66 c
+985.219 1948.52 961.405 1936.4 944.66 1909.72 c
+903.116 1804.67 806.835 1670.36 783.609 1568.68 c
+758.422 1460.29 728.659 1392.25 734.2 1248.6 c
+738.061 1122.74 734.871 1150.41 778.27 1112.78 c
+819.974 1076.14 868.291 1039.54 936.037 979.675 c
+1007.36 917.658 1160.23 807.276 1180 773.9 c
+1201.2 739.81 1202.58 658.133 1189.97 633.491 c
+1177.5 609.425 1064.8 593.019 1065.52 593.019 c
+1064.8 593.019 1162.22 460.749 1181.55 441.415 c
+1200.17 422.797 1279.53 335.25 1605.63 395.835 c
+1791.48 430.347 1945.6 531.219 2032.75 635.093 c
+2142.55 754.616 2078.32 802.776 2095.22 866.957 c
+2120.15 960.621 2224.47 996.549 2242.95 1102.53 c
+2245.09 1117.42 2251.51 1128.74 2264.83 1150.66 c
+2286.02 1183.7 2279.74 1245.58 2280.58 1302.31 c
+2283.25 1454.05 2264.24 1604.45 2229.73 1715.46 c
+2197.94 1819.44 2147.82 1892.48 2104.99 1986.86 c
+2019.21 2175.05 2022.38 2260.52 1945.06 2379.98 c
+1865.13 2505.45 1894.92 2585.64 1788.45 2579.21 c
+1649.68 2569.93 1521.76 2360.66 1385.13 2355.21 c
+f*
+0.549 g
+1384.96 2344.36 m
+1295.33 2341.13 1165.35 2586.02 1154.95 2504.3 c
+1150.69 2435.18 1151.32 2433.28 1147.82 2361.95 c
+1140.29 2307.5 1109.61 2286.4 1057.11 2204.19 c
+1027.42 2156.12 1009.42 2108.15 998.362 2062.27 c
+996.024 2023.47 1009.63 1994.62 1000.7 1966.13 c
+994.327 1947.42 966.179 1936.4 946.147 1907.01 c
+901.597 1802.89 807.526 1668.48 784.613 1568.56 c
+759.25 1460.07 729.247 1392.3 735.273 1248.92 c
+739.199 1127.78 734.851 1151.91 778.121 1113.89 c
+819.45 1077.08 868.687 1039.8 936.269 980.081 c
+1007.43 918.219 1161.06 807.602 1180.74 774.343 c
+1201.84 740.37 1203.75 657.713 1191.23 633.212 c
+1178.88 609.249 1066.27 592.161 1066.98 592.161 c
+1066.27 592.161 1163.2 461.023 1182.5 441.715 c
+1201.1 423.124 1280.13 336.19 1605.68 396.621 c
+1791.73 431.121 1948.57 531.291 2031.58 636.114 c
+2135.35 752.937 2071.98 803.777 2088.79 867.624 c
+2113.65 961.124 2223.53 997.213 2241.95 1103.04 c
+2244.09 1117.88 2250.85 1129.15 2264.08 1150.97 c
+2285.34 1184.36 2278.76 1246.04 2279.81 1302.55 c
+2283.14 1454.79 2263.7 1604.64 2229.2 1715.31 c
+2197.39 1819.01 2147.34 1891.95 2104.6 1986.17 c
+2018.97 2174.06 2021.86 2259.66 1944.47 2378.74 c
+1866.51 2500.66 1892.96 2577.67 1789.02 2571.08 c
+1651.93 2561.46 1521.37 2349.73 1384.96 2344.36 c
+f*
+0.58 g
+1384.79 2333.51 m
+1295.94 2330.36 1169.64 2571.8 1157.87 2495.49 c
+1153.34 2430.97 1153.09 2428.41 1148.88 2360.66 c
+1139.85 2307.27 1108.51 2282.82 1057.31 2202.17 c
+1027.74 2153.99 1010.9 2106.65 1001.36 2061.96 c
+1000.86 2021.59 1019.36 1993.45 1010.36 1965.6 c
+1003.43 1946.32 970.953 1936.41 947.635 1904.31 c
+900.079 1801.1 808.217 1666.6 785.618 1568.44 c
+760.079 1459.85 729.834 1392.35 736.346 1249.24 c
+740.337 1132.81 734.832 1153.42 777.971 1114.99 c
+818.926 1078.02 869.083 1040.05 936.501 980.487 c
+1007.49 918.781 1161.9 807.928 1181.48 774.785 c
+1202.48 740.929 1204.92 657.294 1192.49 632.932 c
+1180.26 609.072 1067.73 591.303 1068.45 591.303 c
+1067.73 591.303 1164.18 461.297 1183.45 442.016 c
+1202.02 423.45 1280.74 337.13 1605.74 397.407 c
+1791.99 431.894 1951.53 531.362 2030.41 637.134 c
+2128.15 751.258 2065.64 804.778 2082.36 868.291 c
+2107.14 961.627 2222.59 997.878 2240.94 1103.56 c
+2243.09 1118.35 2250.18 1129.56 2263.33 1151.28 c
+2284.67 1185.01 2277.78 1246.51 2279.04 1302.79 c
+2283.03 1455.53 2263.16 1604.82 2228.68 1715.16 c
+2196.84 1818.58 2146.85 1891.42 2104.22 1985.47 c
+2018.73 2173.06 2021.34 2258.8 1943.88 2377.51 c
+1867.89 2495.87 1890.99 2569.71 1789.59 2562.95 c
+1654.17 2552.99 1520.97 2338.8 1384.79 2333.51 c
+f*
+0.612 g
+1384.61 2322.66 m
+1296.56 2319.58 1173.93 2557.59 1160.8 2486.67 c
+1155.99 2426.77 1154.86 2423.54 1149.95 2359.38 c
+1139.41 2307.05 1107.41 2279.24 1057.52 2200.15 c
+1028.06 2151.86 1012.37 2105.15 1004.37 2061.65 c
+1005.7 2019.71 1029.08 1992.28 1020.03 1965.07 c
+1012.54 1945.22 975.727 1936.42 949.123 1901.61 c
+898.561 1799.32 808.909 1664.72 786.623 1568.32 c
+760.907 1459.63 730.421 1392.4 737.419 1249.56 c
+741.475 1137.84 734.812 1154.93 777.822 1116.09 c
+818.402 1078.97 869.478 1040.3 936.733 980.893 c
+1007.55 919.343 1162.74 808.254 1182.22 775.227 c
+1203.12 741.489 1206.09 656.875 1193.74 632.652 c
+1181.64 608.896 1069.19 590.445 1069.91 590.445 c
+1069.19 590.445 1165.15 461.572 1184.4 442.317 c
+1202.95 423.777 1281.34 338.07 1605.79 398.193 c
+1792.24 432.668 1954.49 531.434 2029.24 638.154 c
+2120.95 749.579 2059.3 805.779 2075.93 868.957 c
+2100.64 962.129 2221.65 998.542 2239.94 1104.08 c
+2242.08 1118.81 2249.52 1129.98 2262.58 1151.59 c
+2284 1185.66 2276.8 1246.97 2278.27 1303.04 c
+2282.93 1456.27 2262.63 1605 2228.15 1715.01 c
+2196.29 1818.15 2146.37 1890.89 2103.83 1984.77 c
+2018.5 2172.07 2020.82 2257.94 1943.29 2376.27 c
+1869.28 2491.08 1889.02 2561.75 1790.17 2554.82 c
+1656.41 2544.52 1520.57 2327.87 1384.61 2322.66 c
+f*
+0.639 g
+1384.44 2311.81 m
+1297.18 2308.81 1178.22 2543.37 1163.73 2477.86 c
+1158.64 2422.56 1156.63 2418.66 1151.02 2358.09 c
+1138.98 2306.83 1106.31 2275.67 1057.73 2198.13 c
+1028.37 2149.73 1013.84 2103.65 1007.37 2061.35 c
+1010.54 2017.84 1038.8 1991.11 1029.69 1964.54 c
+1021.65 1944.11 980.501 1936.42 950.61 1898.9 c
+897.042 1797.53 809.6 1662.84 787.628 1568.19 c
+761.735 1459.41 731.009 1392.45 738.491 1249.87 c
+742.613 1142.87 734.793 1156.44 777.672 1117.2 c
+817.878 1079.91 869.874 1040.56 936.965 981.299 c
+1007.62 919.905 1163.58 808.58 1182.96 775.67 c
+1203.77 742.049 1207.26 656.455 1195 632.372 c
+1183.02 608.719 1070.66 589.587 1071.37 589.587 c
+1070.66 589.587 1166.13 461.846 1185.35 442.618 c
+1203.87 424.103 1281.95 339.01 1605.84 398.979 c
+1792.49 433.442 1957.46 531.506 2028.07 639.175 c
+2113.75 747.901 2052.97 806.781 2069.5 869.624 c
+2094.14 962.632 2220.71 999.207 2238.94 1104.6 c
+2241.08 1119.27 2248.86 1130.39 2261.83 1151.91 c
+2283.32 1186.32 2275.82 1247.43 2277.5 1303.28 c
+2282.82 1457.01 2262.09 1605.18 2227.63 1714.87 c
+2195.73 1817.72 2145.89 1890.35 2103.44 1984.07 c
+2018.26 2171.08 2020.29 2257.07 1942.69 2375.03 c
+1870.66 2486.29 1887.06 2553.79 1790.74 2546.69 c
+1658.66 2536.05 1520.17 2316.95 1384.44 2311.81 c
+f*
+0.671 g
+1384.26 2300.96 m
+1297.8 2298.03 1182.51 2529.16 1166.66 2469.04 c
+1161.29 2418.36 1158.4 2413.79 1152.09 2356.81 c
+1138.54 2306.61 1105.21 2272.09 1057.93 2196.11 c
+1028.69 2147.6 1015.31 2102.15 1010.37 2061.04 c
+1015.38 2015.96 1048.52 1989.95 1039.35 1964.01 c
+1030.76 1943.01 985.275 1936.43 952.098 1896.2 c
+895.524 1795.75 810.292 1660.96 788.633 1568.07 c
+762.564 1459.19 731.596 1392.5 739.564 1250.19 c
+743.751 1147.91 734.773 1157.95 777.522 1118.3 c
+817.354 1080.85 870.269 1040.81 937.197 981.705 c
+1007.68 920.466 1164.42 808.906 1183.7 776.112 c
+1204.41 742.608 1208.43 656.036 1196.25 632.092 c
+1184.4 608.543 1072.12 588.729 1072.83 588.729 c
+1072.12 588.729 1167.11 462.121 1186.3 442.919 c
+1204.79 424.43 1282.55 339.95 1605.89 399.765 c
+1792.75 434.216 1960.42 531.578 2026.9 640.196 c
+2106.55 746.222 2046.63 807.782 2063.07 870.29 c
+2087.64 963.134 2219.77 999.871 2237.94 1105.12 c
+2240.07 1119.74 2248.2 1130.8 2261.08 1152.22 c
+2282.65 1186.97 2274.84 1247.9 2276.73 1303.53 c
+2282.72 1457.75 2261.55 1605.36 2227.1 1714.72 c
+2195.18 1817.29 2145.4 1889.82 2103.05 1983.38 c
+2018.03 2170.09 2019.77 2256.21 1942.1 2373.79 c
+1872.05 2481.5 1885.09 2545.82 1791.32 2538.56 c
+1660.9 2527.58 1519.78 2306.02 1384.26 2300.96 c
+f*
+0.702 g
+1384.09 2290.11 m
+1298.42 2287.25 1186.8 2514.94 1169.58 2460.23 c
+1163.95 2414.15 1160.17 2408.92 1153.16 2355.53 c
+1138.11 2306.38 1104.11 2268.51 1058.14 2194.1 c
+1029.01 2145.48 1016.78 2100.65 1013.37 2060.73 c
+1020.22 2014.09 1058.24 1988.78 1049.01 1963.49 c
+1039.86 1941.91 990.05 1936.43 953.586 1893.49 c
+894.006 1793.96 810.983 1659.08 789.638 1567.95 c
+763.392 1458.97 732.184 1392.55 740.637 1250.51 c
+744.889 1152.94 734.754 1159.46 777.373 1119.4 c
+816.831 1081.8 870.665 1041.06 937.43 982.11 c
+1007.74 921.028 1165.26 809.232 1184.45 776.554 c
+1205.05 743.168 1209.6 655.616 1197.51 631.812 c
+1185.77 608.366 1073.58 587.87 1074.3 587.87 c
+1073.58 587.87 1168.09 462.395 1187.26 443.22 c
+1205.72 424.757 1283.15 340.89 1605.94 400.552 c
+1793 434.99 1963.39 531.65 2025.73 641.216 c
+2099.34 744.543 2040.29 808.783 2056.63 870.957 c
+2081.14 963.637 2218.83 1000.54 2236.94 1105.64 c
+2239.07 1120.2 2247.54 1131.21 2260.34 1152.53 c
+2281.98 1187.62 2273.85 1248.36 2275.96 1303.77 c
+2282.61 1458.49 2261.02 1605.54 2226.58 1714.57 c
+2194.63 1816.86 2144.92 1889.29 2102.66 1982.68 c
+2017.79 2169.1 2019.25 2255.35 1941.51 2372.55 c
+1873.43 2476.71 1883.12 2537.86 1791.89 2530.43 c
+1663.14 2519.11 1519.38 2295.09 1384.09 2290.11 c
+f*
+0.729 g
+1383.92 2279.26 m
+1299.04 2276.48 1191.08 2500.73 1172.51 2451.42 c
+1166.6 2409.94 1161.93 2404.04 1154.23 2354.24 c
+1137.67 2306.16 1103.02 2264.93 1058.35 2192.08 c
+1029.33 2143.35 1018.25 2099.16 1016.38 2060.42 c
+1025.06 2012.21 1067.96 1987.61 1058.68 1962.96 c
+1048.97 1940.81 994.824 1936.44 955.073 1890.79 c
+892.487 1792.18 811.674 1657.19 790.643 1567.83 c
+764.22 1458.76 732.772 1392.6 741.71 1250.83 c
+746.027 1157.97 734.734 1160.97 777.223 1120.51 c
+816.307 1082.74 871.061 1041.32 937.662 982.516 c
+1007.81 921.59 1166.1 809.559 1185.19 776.997 c
+1205.69 743.728 1210.76 655.197 1198.77 631.532 c
+1187.15 608.19 1075.05 587.012 1075.76 587.012 c
+1075.05 587.012 1169.06 462.669 1188.21 443.521 c
+1206.65 425.083 1283.76 341.829 1605.99 401.338 c
+1793.25 435.764 1966.35 531.722 2024.56 642.236 c
+2092.14 742.864 2033.95 809.784 2050.2 871.624 c
+2074.64 964.14 2217.88 1001.2 2235.94 1106.16 c
+2238.07 1120.66 2246.88 1131.63 2259.59 1152.84 c
+2281.3 1188.28 2272.87 1248.82 2275.18 1304.01 c
+2282.5 1459.23 2260.48 1605.72 2226.05 1714.42 c
+2194.08 1816.42 2144.44 1888.76 2102.27 1981.98 c
+2017.55 2168.11 2018.73 2254.49 1940.92 2371.32 c
+1874.81 2471.92 1881.16 2529.9 1792.46 2522.29 c
+1665.39 2510.65 1518.98 2284.16 1383.92 2279.26 c
+f*
+0.761 g
+1383.74 2268.41 m
+1299.66 2265.7 1195.37 2486.51 1175.44 2442.6 c
+1169.25 2405.74 1163.7 2399.17 1155.3 2352.96 c
+1137.23 2305.94 1101.92 2261.35 1058.55 2190.06 c
+1029.65 2141.22 1019.72 2097.66 1019.38 2060.11 c
+1029.9 2010.33 1077.68 1986.45 1068.34 1962.43 c
+1058.08 1939.71 999.598 1936.45 956.561 1888.09 c
+890.969 1790.4 812.366 1655.31 791.648 1567.71 c
+765.049 1458.54 733.359 1392.65 742.783 1251.15 c
+747.165 1163.01 734.714 1162.48 777.073 1121.61 c
+815.783 1083.68 871.456 1041.57 937.894 982.922 c
+1007.87 922.151 1166.94 809.885 1185.93 777.439 c
+1206.33 744.287 1211.93 654.777 1200.02 631.252 c
+1188.53 608.014 1076.51 586.154 1077.22 586.154 c
+1076.51 586.154 1170.04 462.944 1189.16 443.822 c
+1207.57 425.41 1284.36 342.769 1606.04 402.124 c
+1793.51 436.538 1969.31 531.794 2023.39 643.257 c
+2084.94 741.185 2027.61 810.785 2043.77 872.29 c
+2068.14 964.642 2216.94 1001.86 2234.94 1106.68 c
+2237.06 1121.13 2246.22 1132.04 2258.84 1153.15 c
+2280.63 1188.93 2271.89 1249.29 2274.41 1304.26 c
+2282.4 1459.97 2259.94 1605.9 2225.52 1714.27 c
+2193.53 1815.99 2143.95 1888.23 2101.88 1981.29 c
+2017.32 2167.12 2018.21 2253.63 1940.33 2370.08 c
+1876.2 2467.13 1879.19 2521.93 1793.04 2514.16 c
+1667.63 2502.18 1518.59 2273.23 1383.74 2268.41 c
+f*
+0.792 g
+1383.57 2257.56 m
+1300.28 2254.93 1199.66 2472.3 1178.37 2433.79 c
+1171.9 2401.53 1165.47 2394.29 1156.37 2351.67 c
+1136.8 2305.72 1100.82 2257.78 1058.76 2188.04 c
+1029.96 2139.09 1021.19 2096.16 1022.38 2059.81 c
+1034.74 2008.46 1087.4 1985.28 1078 1961.9 c
+1067.19 1938.6 1004.37 1936.45 958.048 1885.38 c
+889.45 1788.61 813.057 1653.43 792.653 1567.58 c
+765.877 1458.32 733.947 1392.7 743.855 1251.46 c
+748.303 1168.04 734.695 1163.99 776.924 1122.72 c
+815.259 1084.62 871.852 1041.83 938.126 983.328 c
+1007.93 922.713 1167.78 810.211 1186.67 777.882 c
+1206.98 744.847 1213.1 654.357 1201.28 630.972 c
+1189.91 607.837 1077.98 585.296 1078.68 585.296 c
+1077.98 585.296 1171.02 463.218 1190.11 444.123 c
+1208.5 425.736 1284.97 343.709 1606.09 402.91 c
+1793.76 437.312 1972.28 531.866 2022.22 644.277 c
+2077.74 739.507 2021.28 811.787 2037.34 872.957 c
+2061.64 965.145 2216 1002.53 2233.94 1107.2 c
+2236.06 1121.59 2245.56 1132.45 2258.09 1153.47 c
+2279.95 1189.59 2270.91 1249.75 2273.64 1304.5 c
+2282.29 1460.71 2259.4 1606.08 2225 1714.13 c
+2192.97 1815.56 2143.47 1887.69 2101.49 1980.59 c
+2017.08 2166.13 2017.68 2252.76 1939.73 2368.84 c
+1877.58 2462.34 1877.23 2513.97 1793.61 2506.03 c
+1669.88 2493.71 1518.19 2262.31 1383.57 2257.56 c
+f*
+0.82 g
+1383.39 2246.71 m
+1300.9 2244.15 1203.95 2458.08 1181.3 2424.97 c
+1174.55 2397.33 1167.24 2389.42 1157.44 2350.39 c
+1136.36 2305.49 1099.72 2254.2 1058.97 2186.02 c
+1030.28 2136.96 1022.66 2094.66 1025.38 2059.5 c
+1039.58 2006.58 1097.12 1984.11 1087.66 1961.37 c
+1076.29 1937.5 1009.15 1936.46 959.536 1882.68 c
+887.932 1786.83 813.749 1651.55 793.658 1567.46 c
+766.705 1458.1 734.534 1392.75 744.928 1251.78 c
+749.441 1173.07 734.675 1165.5 776.774 1123.82 c
+814.735 1085.57 872.247 1042.08 938.358 983.734 c
+1008 923.275 1168.62 810.537 1187.41 778.324 c
+1207.62 745.407 1214.27 653.938 1202.53 630.692 c
+1191.29 607.661 1079.44 584.438 1080.14 584.438 c
+1079.44 584.438 1172 463.493 1191.06 444.424 c
+1209.42 426.063 1285.57 344.649 1606.14 403.696 c
+1794.01 438.086 1975.24 531.938 2021.05 645.298 c
+2070.54 737.828 2014.94 812.788 2030.91 873.623 c
+2055.14 965.647 2215.06 1003.19 2232.94 1107.72 c
+2235.05 1122.05 2244.9 1132.86 2257.34 1153.78 c
+2279.28 1190.24 2269.93 1250.21 2272.87 1304.75 c
+2282.19 1461.45 2258.87 1606.26 2224.47 1713.98 c
+2192.42 1815.13 2142.99 1887.16 2101.1 1979.89 c
+2016.85 2165.14 2017.16 2251.9 1939.14 2367.6 c
+1878.97 2457.55 1875.26 2506.01 1794.19 2497.9 c
+1672.12 2485.24 1517.79 2251.38 1383.39 2246.71 c
+f*
+0.851 g
+1383.22 2235.86 m
+1301.52 2233.38 1208.24 2443.87 1184.22 2416.16 c
+1177.2 2393.12 1169.01 2384.55 1158.51 2349.1 c
+1135.92 2305.27 1098.62 2250.62 1059.18 2184 c
+1030.6 2134.83 1024.13 2093.16 1028.39 2059.19 c
+1044.41 2004.7 1106.84 1982.94 1097.33 1960.84 c
+1085.4 1936.4 1013.92 1936.47 961.024 1879.98 c
+886.414 1785.04 814.44 1649.67 794.662 1567.34 c
+767.534 1457.88 735.121 1392.8 746.001 1252.1 c
+750.579 1178.11 734.656 1167.01 776.624 1124.92 c
+814.211 1086.51 872.643 1042.33 938.59 984.14 c
+1008.06 923.837 1169.45 810.863 1188.15 778.766 c
+1208.26 745.966 1215.44 653.519 1203.79 630.412 c
+1192.67 607.484 1080.9 583.58 1081.61 583.58 c
+1080.9 583.58 1172.97 463.767 1192.01 444.725 c
+1210.35 426.389 1286.18 345.589 1606.2 404.482 c
+1794.26 438.859 1978.2 532.01 2019.88 646.318 c
+2063.34 736.149 2008.6 813.789 2024.48 874.29 c
+2048.64 966.15 2214.12 1003.86 2231.93 1108.24 c
+2234.05 1122.52 2244.23 1133.28 2256.59 1154.09 c
+2278.61 1190.89 2268.95 1250.68 2272.1 1304.99 c
+2282.08 1462.19 2258.33 1606.45 2223.95 1713.83 c
+2191.87 1814.7 2142.51 1886.63 2100.72 1979.19 c
+2016.61 2164.15 2016.64 2251.04 1938.55 2366.37 c
+1880.35 2452.76 1873.29 2498.05 1794.76 2489.77 c
+1674.36 2476.77 1517.4 2240.45 1383.22 2235.86 c
+f*
+0.882 g
+1383.05 2225.01 m
+1302.13 2222.6 1212.53 2429.65 1187.15 2407.35 c
+1179.85 2388.91 1170.78 2379.67 1159.57 2347.82 c
+1135.49 2305.05 1097.52 2247.04 1059.38 2181.98 c
+1030.92 2132.7 1025.61 2091.66 1031.39 2058.88 c
+1049.25 2002.83 1116.57 1981.78 1106.99 1960.31 c
+1094.51 1935.3 1018.69 1936.47 962.511 1877.27 c
+884.895 1783.26 815.131 1647.79 795.667 1567.22 c
+768.362 1457.66 735.709 1392.85 747.074 1252.42 c
+751.717 1183.14 734.636 1168.51 776.475 1126.03 c
+813.687 1087.45 873.039 1042.59 938.822 984.546 c
+1008.12 924.398 1170.29 811.189 1188.89 779.209 c
+1208.9 746.526 1216.61 653.099 1205.05 630.133 c
+1194.05 607.308 1082.37 582.722 1083.07 582.722 c
+1082.37 582.722 1173.95 464.041 1192.96 445.025 c
+1211.27 426.716 1286.78 346.529 1606.25 405.268 c
+1794.52 439.633 1981.17 532.081 2018.71 647.339 c
+2056.14 734.47 2002.26 814.79 2018.05 874.957 c
+2042.13 966.653 2213.18 1004.52 2230.93 1108.75 c
+2233.05 1122.98 2243.57 1133.69 2255.84 1154.4 c
+2277.93 1191.55 2267.97 1251.14 2271.33 1305.23 c
+2281.97 1462.93 2257.79 1606.63 2223.42 1713.68 c
+2191.32 1814.27 2142.02 1886.1 2100.33 1978.5 c
+2016.37 2163.15 2016.12 2250.18 1937.96 2365.13 c
+1881.73 2447.97 1871.33 2490.08 1795.33 2481.64 c
+1676.61 2468.3 1517 2229.52 1383.05 2225.01 c
+f*
+0.91 g
+1382.87 2214.16 m
+1302.75 2211.83 1216.81 2415.44 1190.08 2398.53 c
+1182.51 2384.71 1172.55 2374.8 1160.64 2346.53 c
+1135.05 2304.83 1096.42 2243.46 1059.59 2179.96 c
+1031.24 2130.57 1027.08 2090.16 1034.39 2058.57 c
+1054.09 2000.95 1126.29 1980.61 1116.65 1959.79 c
+1103.62 1934.2 1023.47 1936.48 963.999 1874.57 c
+883.377 1781.47 815.823 1645.9 796.672 1567.1 c
+769.19 1457.44 736.296 1392.9 748.147 1252.74 c
+752.855 1188.17 734.617 1170.02 776.325 1127.13 c
+813.164 1088.39 873.434 1042.84 939.054 984.952 c
+1008.19 924.96 1171.13 811.516 1189.64 779.651 c
+1209.54 747.086 1217.77 652.679 1206.3 629.853 c
+1195.42 607.131 1083.83 581.864 1084.53 581.864 c
+1083.83 581.864 1174.93 464.316 1193.91 445.326 c
+1212.2 427.042 1287.39 347.468 1606.3 406.054 c
+1794.77 440.407 1984.13 532.153 2017.54 648.359 c
+2048.94 732.791 1995.92 815.791 2011.61 875.623 c
+2035.63 967.155 2212.24 1005.19 2229.93 1109.27 c
+2232.04 1123.44 2242.91 1134.1 2255.09 1154.71 c
+2277.26 1192.2 2266.98 1251.6 2270.55 1305.48 c
+2281.87 1463.67 2257.25 1606.81 2222.9 1713.53 c
+2190.77 1813.83 2141.54 1885.57 2099.94 1977.8 c
+2016.14 2162.16 2015.6 2249.32 1937.37 2363.89 c
+1883.12 2443.18 1869.36 2482.12 1795.91 2473.51 c
+1678.85 2459.83 1516.6 2218.59 1382.87 2214.16 c
+f*
+0.941 g
+1382.7 2203.31 m
+1303.37 2201.05 1221.1 2401.22 1193 2389.72 c
+1185.16 2380.5 1174.32 2369.93 1161.71 2345.25 c
+1134.61 2304.6 1095.32 2239.89 1059.8 2177.94 c
+1031.55 2128.44 1028.55 2088.66 1037.39 2058.27 c
+1058.93 1999.07 1136.01 1979.44 1126.31 1959.26 c
+1112.72 1933.09 1028.24 1936.49 965.487 1871.87 c
+881.859 1779.69 816.514 1644.02 797.677 1566.97 c
+770.018 1457.22 736.884 1392.95 749.219 1253.05 c
+753.993 1193.2 734.597 1171.53 776.175 1128.23 c
+812.64 1089.34 873.83 1043.09 939.286 985.358 c
+1008.25 925.522 1171.97 811.842 1190.38 780.093 c
+1210.19 747.646 1218.94 652.26 1207.56 629.573 c
+1196.8 606.955 1085.29 581.006 1086 581.006 c
+1085.29 581.006 1175.9 464.59 1194.86 445.627 c
+1213.12 427.369 1287.99 348.408 1606.35 406.84 c
+1795.02 441.181 1987.09 532.225 2016.37 649.38 c
+2041.74 731.113 1989.59 816.793 2005.18 876.29 c
+2029.13 967.658 2211.3 1005.85 2228.93 1109.79 c
+2231.04 1123.9 2242.25 1134.51 2254.34 1155.03 c
+2276.59 1192.85 2266 1252.06 2269.78 1305.72 c
+2281.76 1464.41 2256.71 1606.99 2222.37 1713.39 c
+2190.21 1813.4 2141.06 1885.03 2099.55 1977.1 c
+2015.9 2161.17 2015.07 2248.45 1936.77 2362.66 c
+1884.5 2438.39 1867.39 2474.16 1796.48 2465.38 c
+1681.09 2451.36 1516.2 2207.67 1382.7 2203.31 c
+f*
+0.973 g
+1382.52 2192.46 m
+1303.99 2190.28 1225.39 2387.01 1195.93 2380.9 c
+1187.81 2376.3 1176.09 2365.05 1162.78 2343.96 c
+1134.18 2304.38 1094.22 2236.31 1060 2175.92 c
+1031.87 2126.31 1030.02 2087.16 1040.4 2057.96 c
+1063.77 1997.2 1145.73 1978.28 1135.98 1958.73 c
+1121.83 1931.99 1033.02 1936.49 966.974 1869.16 c
+880.34 1777.9 817.206 1642.14 798.682 1566.85 c
+770.847 1457 737.471 1393 750.292 1253.37 c
+755.131 1198.24 734.578 1173.04 776.026 1129.34 c
+812.116 1090.28 874.225 1043.35 939.518 985.764 c
+1008.32 926.083 1172.81 812.168 1191.12 780.536 c
+1210.83 748.205 1220.11 651.84 1208.81 629.293 c
+1198.18 606.778 1086.76 580.148 1087.46 580.148 c
+1086.76 580.148 1176.88 464.865 1195.81 445.928 c
+1214.05 427.695 1288.6 349.348 1606.4 407.626 c
+1795.28 441.955 1990.06 532.297 2015.2 650.4 c
+2034.54 729.434 1983.25 817.794 1998.75 876.956 c
+2022.63 968.16 2210.36 1006.52 2227.93 1110.31 c
+2230.03 1124.37 2241.59 1134.93 2253.59 1155.34 c
+2275.91 1193.51 2265.02 1252.53 2269.01 1305.97 c
+2281.66 1465.15 2256.18 1607.17 2221.85 1713.24 c
+2189.66 1812.97 2140.57 1884.5 2099.16 1976.41 c
+2015.67 2160.18 2014.55 2247.59 1936.18 2361.42 c
+1885.89 2433.6 1865.43 2466.19 1797.06 2457.25 c
+1683.34 2442.89 1515.81 2196.74 1382.52 2192.46 c
+f*
+1 g
+1382.35 2181.61 m
+1304.61 2179.5 1229.68 2372.79 1198.86 2372.09 c
+1190.46 2372.09 1177.86 2360.18 1163.85 2342.68 c
+1133.74 2304.16 1093.12 2232.73 1060.21 2173.9 c
+1032.19 2124.18 1031.49 2085.66 1043.4 2057.65 c
+1068.61 1995.32 1155.45 1977.11 1145.64 1958.2 c
+1130.94 1930.89 1037.79 1936.5 968.462 1866.46 c
+878.822 1776.12 817.897 1640.26 799.687 1566.73 c
+771.675 1456.78 738.059 1393.05 751.365 1253.69 c
+756.269 1203.27 734.558 1174.55 775.876 1130.44 c
+811.592 1091.22 874.621 1043.6 939.75 986.17 c
+1008.38 926.645 1173.65 812.494 1191.86 780.978 c
+1211.47 748.765 1221.28 651.421 1210.07 629.013 c
+1199.56 606.602 1088.22 579.29 1088.92 579.29 c
+1088.22 579.29 1177.86 465.139 1196.76 446.229 c
+1214.97 428.022 1289.2 350.288 1606.45 408.412 c
+1795.53 442.729 1993.02 532.369 2014.03 651.421 c
+2027.34 727.755 1976.91 818.795 1992.32 877.623 c
+2016.13 968.663 2209.42 1007.18 2226.93 1110.83 c
+2229.03 1124.83 2240.93 1135.34 2252.84 1155.65 c
+2275.24 1194.16 2264.04 1252.99 2268.24 1306.21 c
+2281.55 1465.89 2255.64 1607.35 2221.32 1713.09 c
+2189.11 1812.54 2140.09 1883.97 2098.77 1975.71 c
+2015.43 2159.19 2014.03 2246.73 1935.59 2360.18 c
+1887.27 2428.81 1863.46 2458.23 1797.63 2449.12 c
+1685.58 2434.42 1515.41 2185.81 1382.35 2181.61 c
+f*
+0.6 0.349 0 rg
+1435.51 2892.53 m
+1488.07 2899.01 1560.07 2886.05 1593.19 2861.57 c
+1624.15 2838.53 1645.75 2826.29 1673.83 2816.93 c
+1768.15 2785.97 1891.99 2771.57 1886.23 2686.61 c
+1879.75 2585.09 1850.23 2539.73 1765.99 2513.09 c
+1698.31 2492.21 1577.35 2374.85 1483.75 2374.85 c
+1441.99 2374.85 1383.67 2372.69 1349.83 2384.93 c
+1317.43 2396.45 1272.07 2451.17 1218.79 2495.09 c
+1165.51 2538.29 1115.83 2584.37 1114.39 2644.85 c
+1112.23 2708.93 1153.99 2729.81 1213.03 2780.93 c
+1243.99 2808.29 1300.15 2853.65 1339.03 2873.81 c
+1375.03 2891.81 1398.07 2888.21 1435.51 2892.53 c
+f*
+0.62 0.373 0 rg
+1436.61 2891.6 m
+1488.86 2898.04 1560.45 2885.15 1593.38 2860.82 c
+1624.16 2837.91 1645.64 2825.71 1673.55 2816.43 c
+1767.3 2785.65 1890.84 2771.14 1885.15 2686.7 c
+1878.74 2585.8 1848.46 2540.89 1764.74 2514.47 c
+1697.51 2493.74 1577.06 2378.58 1484.03 2378.07 c
+1441.93 2377.75 1384.78 2375.73 1351.16 2387.84 c
+1319.01 2399.26 1273.79 2453.92 1220.85 2497.53 c
+1167.94 2540.45 1118.25 2585.27 1117.68 2645.18 c
+1116.14 2707.72 1156.8 2729.3 1215.41 2780.07 c
+1246.12 2807.17 1301.35 2853.1 1340.04 2873.4 c
+1375.68 2891.42 1399.38 2887.3 1436.61 2891.6 c
+f*
+0.639 0.396 0 rg
+1437.7 2890.66 m
+1489.66 2897.07 1560.83 2884.26 1593.57 2860.06 c
+1624.17 2837.28 1645.52 2825.12 1673.28 2815.93 c
+1766.45 2785.33 1889.69 2770.71 1884.06 2686.79 c
+1877.72 2586.51 1846.69 2542.05 1763.49 2515.84 c
+1696.71 2495.27 1576.76 2382.32 1484.3 2381.3 c
+1441.88 2380.66 1385.88 2378.78 1352.5 2390.75 c
+1320.6 2402.08 1275.5 2456.67 1222.9 2499.96 c
+1170.36 2542.6 1120.68 2586.18 1120.98 2645.51 c
+1120.05 2706.5 1159.61 2728.8 1217.78 2779.2 c
+1248.26 2806.05 1302.56 2852.55 1341.06 2872.99 c
+1376.32 2891.04 1400.69 2886.39 1437.7 2890.66 c
+f*
+0.659 0.416 0 rg
+1438.8 2889.73 m
+1490.45 2896.1 1561.21 2883.36 1593.76 2859.31 c
+1624.18 2836.66 1645.41 2824.54 1673 2815.43 c
+1765.6 2785.01 1888.55 2770.28 1882.98 2686.89 c
+1876.71 2587.21 1844.93 2543.21 1762.24 2517.22 c
+1695.91 2496.8 1576.47 2386.05 1484.58 2384.52 c
+1441.82 2383.56 1386.99 2381.82 1353.83 2393.66 c
+1322.18 2404.89 1277.22 2459.43 1224.96 2502.4 c
+1172.79 2544.76 1123.1 2587.08 1124.27 2645.85 c
+1123.96 2705.29 1162.42 2728.29 1220.16 2778.34 c
+1250.39 2804.94 1303.76 2852 1342.07 2872.58 c
+1376.97 2890.65 1402 2885.49 1438.8 2889.73 c
+f*
+0.682 0.439 0 rg
+1439.89 2888.8 m
+1491.24 2895.13 1561.59 2882.47 1593.94 2858.55 c
+1624.19 2836.04 1645.3 2823.95 1672.73 2814.94 c
+1764.75 2784.69 1887.4 2769.86 1881.9 2686.98 c
+1875.7 2587.92 1843.16 2544.37 1760.98 2518.6 c
+1695.12 2498.33 1576.18 2389.78 1484.86 2387.74 c
+1441.76 2386.47 1388.1 2384.87 1355.16 2396.57 c
+1323.76 2407.7 1278.94 2462.18 1227.01 2504.83 c
+1175.21 2546.91 1125.53 2587.98 1127.56 2646.18 c
+1127.87 2704.07 1165.23 2727.78 1222.53 2777.47 c
+1252.52 2803.82 1304.97 2851.45 1343.08 2872.17 c
+1377.62 2890.26 1403.31 2884.58 1439.89 2888.8 c
+f*
+0.702 0.463 0 rg
+1440.99 2887.86 m
+1492.04 2894.16 1561.97 2881.57 1594.13 2857.8 c
+1624.2 2835.42 1645.18 2823.37 1672.45 2814.44 c
+1763.9 2784.37 1886.25 2769.43 1880.82 2687.07 c
+1874.68 2588.63 1841.39 2545.53 1759.73 2519.97 c
+1694.32 2499.86 1575.88 2393.52 1485.13 2390.97 c
+1441.71 2389.37 1389.21 2387.91 1356.5 2399.48 c
+1325.35 2410.51 1280.66 2464.93 1229.07 2507.27 c
+1177.64 2549.07 1127.95 2588.89 1130.86 2646.51 c
+1131.78 2702.86 1168.04 2727.27 1224.91 2776.61 c
+1254.66 2802.7 1306.17 2850.9 1344.1 2871.76 c
+1378.27 2889.87 1404.63 2883.67 1440.99 2887.86 c
+f*
+0.722 0.486 0 rg
+1442.08 2886.93 m
+1492.83 2893.19 1562.34 2880.67 1594.32 2857.04 c
+1624.21 2834.79 1645.07 2822.79 1672.18 2813.94 c
+1763.05 2784.05 1885.1 2769 1879.73 2687.16 c
+1873.67 2589.34 1839.62 2546.69 1758.48 2521.35 c
+1693.52 2501.38 1575.59 2397.25 1485.41 2394.19 c
+1441.65 2392.28 1390.31 2390.96 1357.83 2402.39 c
+1326.93 2413.33 1282.37 2467.69 1231.12 2509.71 c
+1180.06 2551.23 1130.38 2589.79 1134.15 2646.84 c
+1135.7 2701.64 1170.85 2726.77 1227.28 2775.74 c
+1256.79 2801.59 1307.38 2850.35 1345.11 2871.34 c
+1378.91 2889.48 1405.94 2882.76 1442.08 2886.93 c
+f*
+0.741 0.506 0 rg
+1443.18 2886 m
+1493.62 2892.22 1562.72 2879.78 1594.51 2856.29 c
+1624.22 2834.17 1644.96 2822.2 1671.9 2813.44 c
+1762.2 2783.73 1883.95 2768.57 1878.65 2687.25 c
+1872.66 2590.05 1837.86 2547.85 1757.23 2522.73 c
+1692.72 2502.91 1575.3 2400.98 1485.69 2397.41 c
+1441.59 2395.18 1391.42 2394 1359.16 2405.3 c
+1328.51 2416.14 1284.09 2470.44 1233.18 2512.14 c
+1182.49 2553.38 1132.8 2590.69 1137.44 2647.18 c
+1139.61 2700.43 1173.66 2726.26 1229.66 2774.88 c
+1258.92 2800.47 1308.59 2849.8 1346.12 2870.93 c
+1379.56 2889.1 1407.25 2881.85 1443.18 2886 c
+f*
+0.761 0.529 0 rg
+1444.27 2885.07 m
+1494.41 2891.25 1563.1 2878.88 1594.7 2855.53 c
+1624.23 2833.55 1644.84 2821.62 1671.63 2812.94 c
+1761.35 2783.41 1882.81 2768.14 1877.57 2687.35 c
+1871.64 2590.75 1836.09 2549.01 1755.98 2524.11 c
+1691.92 2504.44 1575 2404.71 1485.96 2400.64 c
+1441.54 2398.09 1392.53 2397.05 1360.5 2408.21 c
+1330.1 2418.95 1285.81 2473.19 1235.23 2514.58 c
+1184.91 2555.54 1135.23 2591.59 1140.73 2647.51 c
+1143.52 2699.21 1176.47 2725.75 1232.03 2774.01 c
+1261.06 2799.35 1309.79 2849.25 1347.14 2870.52 c
+1380.21 2888.71 1408.56 2880.95 1444.27 2885.07 c
+f*
+0.78 0.553 0 rg
+1445.37 2884.13 m
+1495.21 2890.28 1563.48 2877.99 1594.89 2854.78 c
+1624.24 2832.93 1644.73 2821.03 1671.35 2812.44 c
+1760.5 2783.09 1881.66 2767.71 1876.49 2687.44 c
+1870.63 2591.46 1834.32 2550.17 1754.73 2525.48 c
+1691.12 2505.97 1574.71 2408.45 1486.24 2403.86 c
+1441.48 2400.99 1393.63 2400.09 1361.83 2411.12 c
+1331.68 2421.76 1287.52 2475.94 1237.29 2517.01 c
+1187.34 2557.69 1137.65 2592.5 1144.03 2647.84 c
+1147.43 2697.99 1179.28 2725.25 1234.41 2773.15 c
+1263.19 2798.23 1311 2848.7 1348.15 2870.11 c
+1380.85 2888.32 1409.87 2880.04 1445.37 2884.13 c
+f*
+0.8 0.576 0 rg
+1446.46 2883.2 m
+1496 2889.3 1563.86 2877.09 1595.08 2854.02 c
+1624.26 2832.3 1644.62 2820.45 1671.07 2811.95 c
+1759.65 2782.77 1880.51 2767.29 1875.4 2687.53 c
+1869.62 2592.17 1832.55 2551.33 1753.48 2526.86 c
+1690.33 2507.5 1574.41 2412.18 1486.51 2407.08 c
+1441.43 2403.89 1394.74 2403.14 1363.16 2414.04 c
+1333.27 2424.58 1289.24 2478.7 1239.34 2519.45 c
+1189.77 2559.85 1140.07 2593.4 1147.32 2648.18 c
+1151.34 2696.78 1182.1 2724.74 1236.78 2772.29 c
+1265.33 2797.11 1312.2 2848.15 1349.17 2869.7 c
+1381.5 2887.94 1411.18 2879.13 1446.46 2883.2 c
+f*
+0.82 0.6 0 rg
+1447.56 2882.27 m
+1496.79 2888.33 1564.24 2876.19 1595.26 2853.27 c
+1624.27 2831.68 1644.5 2819.87 1670.8 2811.45 c
+1758.81 2782.45 1879.36 2766.86 1874.32 2687.62 c
+1868.6 2592.88 1830.79 2552.49 1752.22 2528.24 c
+1689.53 2509.03 1574.12 2415.91 1486.79 2410.31 c
+1441.37 2406.8 1395.85 2406.18 1364.5 2416.95 c
+1334.85 2427.39 1290.96 2481.45 1241.4 2521.89 c
+1192.19 2562.01 1142.5 2594.3 1150.61 2648.51 c
+1155.25 2695.57 1184.91 2724.23 1239.16 2771.42 c
+1267.46 2796 1313.4 2847.6 1350.18 2869.29 c
+1382.15 2887.55 1412.49 2878.22 1447.56 2882.27 c
+f*
+0.843 0.62 0 rg
+1448.66 2881.33 m
+1497.59 2887.36 1564.62 2875.3 1595.45 2852.51 c
+1624.28 2831.06 1644.39 2819.28 1670.52 2810.95 c
+1757.96 2782.13 1878.21 2766.43 1873.24 2687.71 c
+1867.59 2593.59 1829.02 2553.65 1750.97 2529.61 c
+1688.73 2510.56 1573.83 2419.65 1487.07 2413.53 c
+1441.31 2409.7 1396.95 2409.22 1365.83 2419.86 c
+1336.43 2430.2 1292.67 2484.2 1243.46 2524.32 c
+1194.62 2564.16 1144.92 2595.21 1153.91 2648.84 c
+1159.16 2694.35 1187.72 2723.73 1241.54 2770.56 c
+1269.59 2794.88 1314.61 2847.05 1351.19 2868.88 c
+1382.79 2887.16 1413.8 2877.31 1448.66 2881.33 c
+f*
+0.863 0.643 0 rg
+1449.75 2880.4 m
+1498.38 2886.39 1565 2874.4 1595.64 2851.76 c
+1624.29 2830.44 1644.27 2818.7 1670.25 2810.45 c
+1757.11 2781.81 1877.07 2766 1872.16 2687.81 c
+1866.57 2594.29 1827.25 2554.81 1749.72 2530.99 c
+1687.93 2512.09 1573.53 2423.38 1487.34 2416.76 c
+1441.26 2412.61 1398.06 2412.27 1367.17 2422.77 c
+1338.02 2433.01 1294.39 2486.95 1245.51 2526.76 c
+1197.04 2566.32 1147.35 2596.11 1157.2 2649.17 c
+1163.07 2693.14 1190.53 2723.22 1243.91 2769.69 c
+1271.73 2793.76 1315.81 2846.5 1352.21 2868.47 c
+1383.44 2886.77 1415.11 2876.41 1449.75 2880.4 c
+f*
+0.882 0.667 0 rg
+1450.85 2879.47 m
+1499.17 2885.42 1565.38 2873.51 1595.83 2851 c
+1624.3 2829.82 1644.16 2818.11 1669.97 2809.95 c
+1756.26 2781.49 1875.92 2765.57 1871.07 2687.9 c
+1865.56 2595 1825.49 2555.97 1748.47 2532.37 c
+1687.13 2513.62 1573.24 2427.11 1487.62 2419.98 c
+1441.2 2415.51 1399.17 2415.31 1368.5 2425.68 c
+1339.6 2435.83 1296.11 2489.7 1247.57 2529.19 c
+1199.47 2568.47 1149.77 2597.01 1160.49 2649.51 c
+1166.98 2691.92 1193.34 2722.71 1246.29 2768.83 c
+1273.86 2792.64 1317.02 2845.95 1353.22 2868.06 c
+1384.09 2886.38 1416.42 2875.5 1450.85 2879.47 c
+f*
+0.902 0.69 0 rg
+1451.94 2878.53 m
+1499.97 2884.45 1565.76 2872.61 1596.02 2850.25 c
+1624.31 2829.19 1644.05 2817.53 1669.7 2809.45 c
+1755.41 2781.17 1874.77 2765.14 1869.99 2687.99 c
+1864.55 2595.71 1823.72 2557.13 1747.22 2533.75 c
+1686.33 2515.14 1572.95 2430.85 1487.9 2423.2 c
+1441.14 2418.42 1400.27 2418.36 1369.83 2428.59 c
+1341.18 2438.64 1297.83 2492.46 1249.62 2531.63 c
+1201.89 2570.63 1152.2 2597.92 1163.79 2649.84 c
+1170.9 2690.7 1196.15 2722.21 1248.66 2767.96 c
+1275.99 2791.53 1318.23 2845.4 1354.23 2867.64 c
+1384.73 2886 1417.73 2874.59 1451.94 2878.53 c
+f*
+0.922 0.71 0 rg
+1453.04 2877.6 m
+1500.76 2883.48 1566.13 2871.71 1596.21 2849.49 c
+1624.32 2828.57 1643.93 2816.95 1669.42 2808.95 c
+1754.56 2780.85 1873.62 2764.71 1868.91 2688.08 c
+1863.53 2596.42 1821.95 2558.29 1745.97 2535.12 c
+1685.53 2516.67 1572.65 2434.58 1488.17 2426.43 c
+1441.09 2421.32 1401.38 2421.4 1371.17 2431.5 c
+1342.77 2441.45 1299.54 2495.21 1251.68 2534.07 c
+1204.32 2572.79 1154.62 2598.82 1167.08 2650.17 c
+1174.81 2689.49 1198.96 2721.7 1251.04 2767.1 c
+1278.13 2790.41 1319.43 2844.85 1355.25 2867.23 c
+1385.38 2885.61 1419.05 2873.68 1453.04 2877.6 c
+f*
+0.941 0.733 0 rg
+1454.13 2876.67 m
+1501.55 2882.51 1566.51 2870.82 1596.39 2848.74 c
+1624.33 2827.95 1643.82 2816.36 1669.15 2808.46 c
+1753.71 2780.53 1872.47 2764.29 1867.83 2688.17 c
+1862.52 2597.13 1820.18 2559.45 1744.71 2536.5 c
+1684.74 2518.2 1572.36 2438.31 1488.45 2429.65 c
+1441.03 2424.23 1402.49 2424.45 1372.5 2434.41 c
+1344.35 2444.26 1301.26 2497.96 1253.73 2536.5 c
+1206.74 2574.94 1157.05 2599.72 1170.37 2650.5 c
+1178.72 2688.28 1201.77 2721.19 1253.41 2766.23 c
+1280.26 2789.29 1320.64 2844.3 1356.26 2866.82 c
+1386.03 2885.22 1420.36 2872.77 1454.13 2876.67 c
+f*
+0.961 0.757 0 rg
+1455.23 2875.74 m
+1502.34 2881.54 1566.89 2869.92 1596.58 2847.98 c
+1624.34 2827.33 1643.71 2815.78 1668.87 2807.96 c
+1752.86 2780.21 1871.33 2763.86 1866.74 2688.27 c
+1861.51 2597.83 1818.42 2560.61 1743.46 2537.88 c
+1683.94 2519.73 1572.07 2442.04 1488.73 2432.87 c
+1440.97 2427.13 1403.6 2427.49 1373.83 2437.32 c
+1345.93 2447.08 1302.98 2500.72 1255.79 2538.94 c
+1209.17 2577.1 1159.47 2600.62 1173.66 2650.83 c
+1182.63 2687.06 1204.58 2720.68 1255.79 2765.37 c
+1282.39 2788.18 1321.84 2843.75 1357.27 2866.41 c
+1386.68 2884.84 1421.67 2871.87 1455.23 2875.74 c
+f*
+0.98 0.78 0 rg
+1456.32 2874.8 m
+1503.14 2880.57 1567.27 2869.03 1596.77 2847.23 c
+1624.35 2826.7 1643.59 2815.19 1668.6 2807.46 c
+1752.01 2779.89 1870.18 2763.43 1865.66 2688.36 c
+1860.49 2598.54 1816.65 2561.77 1742.21 2539.25 c
+1683.14 2521.26 1571.77 2445.78 1489 2436.1 c
+1440.92 2430.04 1404.7 2430.54 1375.17 2440.23 c
+1347.52 2449.89 1304.69 2503.47 1257.84 2541.37 c
+1211.59 2579.25 1161.9 2601.53 1176.96 2651.17 c
+1186.54 2685.85 1207.39 2720.18 1258.16 2764.5 c
+1284.53 2787.06 1323.05 2843.2 1358.29 2866 c
+1387.32 2884.45 1422.98 2870.96 1456.32 2874.8 c
+f*
+1 0.8 0 rg
+1457.42 2873.87 m
+1503.93 2879.6 1567.65 2868.13 1596.96 2846.47 c
+1624.36 2826.08 1643.48 2814.61 1668.32 2806.96 c
+1751.16 2779.57 1869.03 2763 1864.58 2688.45 c
+1859.48 2599.25 1814.88 2562.93 1740.96 2540.63 c
+1682.34 2522.79 1571.48 2449.51 1489.28 2439.32 c
+1440.86 2432.94 1405.81 2433.58 1376.5 2443.14 c
+1349.1 2452.7 1306.41 2506.22 1259.9 2543.81 c
+1214.02 2581.41 1164.32 2602.43 1180.25 2651.5 c
+1190.45 2684.63 1210.2 2719.67 1260.54 2763.64 c
+1286.66 2785.94 1324.25 2842.65 1359.3 2865.59 c
+1387.97 2884.06 1424.29 2870.05 1457.42 2873.87 c
+f*
+1465.75 2845.01 m
+1475.83 2824.13 1501.75 2821.25 1519.03 2811.89 c
+1535.59 2802.53 1544.95 2800.37 1551.43 2803.97 c
+1565.83 2811.89 1555.03 2837.81 1540.63 2847.17 c
+1526.95 2856.53 1459.99 2858.69 1465.75 2845.01 c
+f*
+0.98 0.78 0 rg
+1467.17 2844.79 m
+1477 2824.44 1502.26 2821.64 1519.1 2812.51 c
+1535.25 2803.39 1544.37 2801.28 1550.68 2804.79 c
+1564.72 2812.51 1554.19 2837.78 1540.16 2846.9 c
+1526.82 2856.02 1461.56 2858.13 1467.17 2844.79 c
+f*
+0.961 0.757 0 rg
+1468.6 2844.58 m
+1478.17 2824.76 1502.77 2822.02 1519.18 2813.14 c
+1534.9 2804.25 1543.78 2802.2 1549.94 2805.62 c
+1563.61 2813.14 1553.36 2837.74 1539.68 2846.63 c
+1526.7 2855.51 1463.13 2857.57 1468.6 2844.58 c
+f*
+0.941 0.733 0 rg
+1470.02 2844.36 m
+1479.34 2825.07 1503.29 2822.41 1519.25 2813.76 c
+1534.56 2805.11 1543.2 2803.11 1549.19 2806.44 c
+1562.5 2813.76 1552.52 2837.71 1539.21 2846.36 c
+1526.57 2855.01 1464.7 2857 1470.02 2844.36 c
+f*
+0.922 0.71 0 rg
+1471.45 2844.15 m
+1480.51 2825.38 1503.8 2822.79 1519.33 2814.38 c
+1534.21 2805.97 1542.62 2804.03 1548.44 2807.27 c
+1561.38 2814.38 1551.68 2837.68 1538.74 2846.09 c
+1526.44 2854.5 1466.27 2856.44 1471.45 2844.15 c
+f*
+0.902 0.69 0 rg
+1472.87 2843.93 m
+1481.67 2825.69 1504.31 2823.18 1519.4 2815 c
+1533.87 2806.83 1542.04 2804.95 1547.7 2808.09 c
+1560.27 2815 1550.84 2837.64 1538.27 2845.82 c
+1526.32 2853.99 1467.84 2855.88 1472.87 2843.93 c
+f*
+0.882 0.667 0 rg
+1474.29 2843.71 m
+1482.84 2826.01 1504.82 2823.57 1519.48 2815.63 c
+1533.52 2807.69 1541.45 2805.86 1546.95 2808.91 c
+1559.16 2815.63 1550.01 2837.61 1537.79 2845.55 c
+1526.19 2853.48 1469.41 2855.31 1474.29 2843.71 c
+f*
+0.863 0.643 0 rg
+1475.72 2843.5 m
+1484.01 2826.32 1505.33 2823.95 1519.55 2816.25 c
+1533.18 2808.55 1540.87 2806.77 1546.2 2809.74 c
+1558.05 2816.25 1549.17 2837.58 1537.32 2845.28 c
+1526.06 2852.97 1470.98 2854.75 1475.72 2843.5 c
+f*
+0.843 0.62 0 rg
+1477.14 2843.28 m
+1485.18 2826.63 1505.85 2824.34 1519.63 2816.87 c
+1532.83 2809.41 1540.29 2807.69 1545.46 2810.56 c
+1556.94 2816.87 1548.33 2837.54 1536.85 2845.01 c
+1525.94 2852.47 1472.55 2854.19 1477.14 2843.28 c
+f*
+0.82 0.6 0 rg
+1478.57 2843.07 m
+1486.35 2826.95 1506.36 2824.72 1519.7 2817.5 c
+1532.49 2810.27 1539.71 2808.61 1544.71 2811.39 c
+1555.83 2817.5 1547.49 2837.51 1536.37 2844.74 c
+1525.81 2851.96 1474.12 2853.63 1478.57 2843.07 c
+f*
+0.8 0.576 0 rg
+1479.99 2842.85 m
+1487.52 2827.26 1506.87 2825.11 1519.78 2818.12 c
+1532.14 2811.13 1539.13 2809.52 1543.96 2812.21 c
+1554.71 2818.12 1546.65 2837.47 1535.9 2844.47 c
+1525.69 2851.45 1475.69 2853.06 1479.99 2842.85 c
+f*
+0.78 0.553 0 rg
+1481.41 2842.63 m
+1488.69 2827.57 1507.38 2825.5 1519.85 2818.74 c
+1531.8 2811.99 1538.54 2810.43 1543.22 2813.03 c
+1553.6 2818.74 1545.82 2837.44 1535.43 2844.19 c
+1525.56 2850.94 1477.26 2852.5 1481.41 2842.63 c
+f*
+0.761 0.529 0 rg
+1482.84 2842.42 m
+1489.86 2827.89 1507.89 2825.88 1519.92 2819.37 c
+1531.45 2812.85 1537.96 2811.35 1542.47 2813.86 c
+1552.49 2819.37 1544.98 2837.41 1534.95 2843.92 c
+1525.43 2850.43 1478.83 2851.94 1482.84 2842.42 c
+f*
+0.741 0.506 0 rg
+1484.26 2842.2 m
+1491.03 2828.2 1508.41 2826.27 1520 2819.99 c
+1531.11 2813.71 1537.38 2812.27 1541.73 2814.68 c
+1551.38 2819.99 1544.14 2837.37 1534.48 2843.65 c
+1525.31 2849.93 1480.4 2851.38 1484.26 2842.2 c
+f*
+0.722 0.486 0 rg
+1485.69 2841.99 m
+1492.2 2828.51 1508.92 2826.65 1520.07 2820.61 c
+1530.76 2814.57 1536.8 2813.18 1540.98 2815.51 c
+1550.27 2820.61 1543.31 2837.34 1534.01 2843.38 c
+1525.18 2849.42 1481.97 2850.81 1485.69 2841.99 c
+f*
+0.702 0.463 0 rg
+1487.11 2841.77 m
+1493.37 2828.83 1509.43 2827.04 1520.15 2821.24 c
+1530.42 2815.43 1536.21 2814.09 1540.23 2816.33 c
+1549.16 2821.24 1542.47 2837.31 1533.54 2843.11 c
+1525.05 2848.91 1483.54 2850.25 1487.11 2841.77 c
+f*
+0.682 0.439 0 rg
+1488.53 2841.55 m
+1494.53 2829.14 1509.94 2827.43 1520.22 2821.86 c
+1530.07 2816.29 1535.63 2815.01 1539.49 2817.15 c
+1548.05 2821.86 1541.63 2837.27 1533.06 2842.84 c
+1524.93 2848.4 1485.11 2849.69 1488.53 2841.55 c
+f*
+0.659 0.416 0 rg
+1489.96 2841.34 m
+1495.7 2829.45 1510.45 2827.81 1520.3 2822.48 c
+1529.73 2817.15 1535.05 2815.92 1538.74 2817.98 c
+1546.93 2822.48 1540.79 2837.24 1532.59 2842.57 c
+1524.8 2847.89 1486.68 2849.13 1489.96 2841.34 c
+f*
+0.639 0.396 0 rg
+1491.38 2841.12 m
+1496.87 2829.76 1510.97 2828.2 1520.37 2823.1 c
+1529.38 2818.01 1534.47 2816.84 1537.99 2818.8 c
+1545.82 2823.1 1539.95 2837.21 1532.12 2842.3 c
+1524.67 2847.39 1488.25 2848.56 1491.38 2841.12 c
+f*
+0.62 0.373 0 rg
+1492.81 2840.91 m
+1498.04 2830.08 1511.48 2828.58 1520.45 2823.73 c
+1529.04 2818.87 1533.88 2817.76 1537.25 2819.63 c
+1544.71 2823.73 1539.12 2837.17 1531.64 2842.03 c
+1524.55 2846.88 1489.82 2848 1492.81 2840.91 c
+f*
+0.6 0.349 0 rg
+1494.23 2840.69 m
+1499.21 2830.39 1511.99 2828.97 1520.52 2824.35 c
+1528.69 2819.73 1533.3 2818.67 1536.5 2820.45 c
+1543.6 2824.35 1538.28 2837.14 1531.17 2841.76 c
+1524.42 2846.37 1491.39 2847.44 1494.23 2840.69 c
+f*
+1 0.8 0 rg
+1314.68 2818.21 m
+1311.43 2810.08 1334.2 2794.62 1345.59 2805.2 c
+1357.8 2815.77 1372.44 2825.53 1377.33 2828.79 c
+1399.29 2843.44 1391.16 2854.01 1354.55 2847.5 c
+1317.93 2840.99 1317.93 2826.35 1314.68 2818.21 c
+f*
+0.98 0.78 0 rg
+1315.27 2818.31 m
+1312.09 2810.37 1334.34 2795.27 1345.46 2805.6 c
+1357.39 2815.93 1371.69 2825.46 1376.47 2828.65 c
+1397.92 2842.96 1389.98 2853.28 1354.21 2846.93 c
+1318.44 2840.57 1318.44 2826.26 1315.27 2818.31 c
+f*
+0.961 0.757 0 rg
+1315.85 2818.42 m
+1312.76 2810.66 1334.47 2795.92 1345.33 2806.01 c
+1356.98 2816.09 1370.94 2825.4 1375.6 2828.51 c
+1396.55 2842.48 1388.79 2852.56 1353.88 2846.35 c
+1318.95 2840.14 1318.95 2826.18 1315.85 2818.42 c
+f*
+0.941 0.733 0 rg
+1316.44 2818.52 m
+1313.42 2810.95 1334.61 2796.57 1345.21 2806.41 c
+1356.57 2816.25 1370.19 2825.33 1374.74 2828.36 c
+1395.18 2842 1387.61 2851.83 1353.54 2845.78 c
+1319.47 2839.72 1319.47 2826.09 1316.44 2818.52 c
+f*
+0.922 0.71 0 rg
+1317.03 2818.62 m
+1314.08 2811.25 1334.74 2797.22 1345.08 2806.82 c
+1356.16 2816.41 1369.44 2825.27 1373.88 2828.22 c
+1393.81 2841.52 1386.43 2851.11 1353.21 2845.2 c
+1319.98 2839.29 1319.98 2826.01 1317.03 2818.62 c
+f*
+0.902 0.69 0 rg
+1317.62 2818.72 m
+1314.75 2811.54 1334.88 2797.86 1344.95 2807.22 c
+1355.75 2816.57 1368.69 2825.2 1373.01 2828.08 c
+1392.43 2841.03 1385.25 2850.38 1352.87 2844.62 c
+1320.49 2838.87 1320.49 2825.92 1317.62 2818.72 c
+f*
+0.882 0.667 0 rg
+1318.21 2818.83 m
+1315.41 2811.83 1335.02 2798.51 1344.82 2807.62 c
+1355.34 2816.73 1367.94 2825.13 1372.15 2827.94 c
+1391.06 2840.55 1384.06 2849.66 1352.54 2844.05 c
+1321 2838.44 1321 2825.84 1318.21 2818.83 c
+f*
+0.863 0.643 0 rg
+1318.79 2818.93 m
+1316.07 2812.12 1335.15 2799.16 1344.69 2808.03 c
+1354.93 2816.89 1367.19 2825.07 1371.29 2827.8 c
+1389.69 2840.07 1382.88 2848.93 1352.2 2843.48 c
+1321.52 2838.02 1321.52 2825.75 1318.79 2818.93 c
+f*
+0.843 0.62 0 rg
+1319.38 2819.03 m
+1316.73 2812.41 1335.29 2799.81 1344.57 2808.43 c
+1354.52 2817.05 1366.44 2825 1370.43 2827.65 c
+1388.32 2839.59 1381.7 2848.21 1351.87 2842.9 c
+1322.03 2837.59 1322.03 2825.67 1319.38 2819.03 c
+f*
+0.82 0.6 0 rg
+1319.97 2819.14 m
+1317.4 2812.7 1335.42 2800.46 1344.44 2808.84 c
+1354.11 2817.21 1365.69 2824.94 1369.56 2827.51 c
+1386.95 2839.11 1380.51 2847.48 1351.53 2842.33 c
+1322.54 2837.17 1322.54 2825.58 1319.97 2819.14 c
+f*
+0.8 0.576 0 rg
+1320.56 2819.24 m
+1318.06 2812.99 1335.56 2801.11 1344.31 2809.24 c
+1353.7 2817.37 1364.95 2824.87 1368.7 2827.37 c
+1385.58 2838.63 1379.33 2846.76 1351.2 2841.75 c
+1323.05 2836.74 1323.05 2825.49 1320.56 2819.24 c
+f*
+0.78 0.553 0 rg
+1321.14 2819.34 m
+1318.72 2813.29 1335.7 2801.76 1344.18 2809.64 c
+1353.28 2817.52 1364.2 2824.8 1367.84 2827.23 c
+1384.21 2838.15 1378.15 2846.03 1350.86 2841.17 c
+1323.57 2836.32 1323.57 2825.41 1321.14 2819.34 c
+f*
+0.761 0.529 0 rg
+1321.73 2819.45 m
+1319.39 2813.58 1335.83 2802.41 1344.05 2810.05 c
+1352.87 2817.68 1363.45 2824.74 1366.97 2827.09 c
+1382.84 2837.67 1376.96 2845.3 1350.52 2840.6 c
+1324.08 2835.9 1324.08 2825.32 1321.73 2819.45 c
+f*
+0.741 0.506 0 rg
+1322.32 2819.55 m
+1320.05 2813.87 1335.97 2803.06 1343.93 2810.45 c
+1352.46 2817.84 1362.7 2824.67 1366.11 2826.94 c
+1381.47 2837.19 1375.78 2844.58 1350.19 2840.03 c
+1324.59 2835.47 1324.59 2825.24 1322.32 2819.55 c
+f*
+0.722 0.486 0 rg
+1322.9 2819.65 m
+1320.71 2814.16 1336.1 2803.71 1343.8 2810.86 c
+1352.05 2818 1361.95 2824.61 1365.25 2826.8 c
+1380.1 2836.71 1374.6 2843.85 1349.85 2839.45 c
+1325.1 2835.05 1325.1 2825.15 1322.9 2819.65 c
+f*
+0.702 0.463 0 rg
+1323.49 2819.76 m
+1321.37 2814.45 1336.24 2804.36 1343.67 2811.26 c
+1351.64 2818.16 1361.2 2824.54 1364.39 2826.66 c
+1378.72 2836.22 1373.41 2843.13 1349.52 2838.88 c
+1325.62 2834.62 1325.62 2825.07 1323.49 2819.76 c
+f*
+0.682 0.439 0 rg
+1324.08 2819.86 m
+1322.04 2814.74 1336.38 2805 1343.54 2811.66 c
+1351.23 2818.32 1360.45 2824.47 1363.52 2826.52 c
+1377.35 2835.74 1372.23 2842.4 1349.18 2838.3 c
+1326.13 2834.2 1326.13 2824.98 1324.08 2819.86 c
+f*
+0.659 0.416 0 rg
+1324.67 2819.96 m
+1322.7 2815.04 1336.51 2805.65 1343.41 2812.07 c
+1350.82 2818.48 1359.7 2824.41 1362.66 2826.38 c
+1375.98 2835.26 1371.05 2841.68 1348.85 2837.72 c
+1326.64 2833.77 1326.64 2824.9 1324.67 2819.96 c
+f*
+0.639 0.396 0 rg
+1325.26 2820.06 m
+1323.36 2815.33 1336.65 2806.3 1343.29 2812.47 c
+1350.41 2818.64 1358.95 2824.34 1361.8 2826.23 c
+1374.61 2834.78 1369.87 2840.95 1348.51 2837.15 c
+1327.15 2833.35 1327.15 2824.81 1325.26 2820.06 c
+f*
+0.62 0.373 0 rg
+1325.84 2820.17 m
+1324.03 2815.62 1336.78 2806.95 1343.16 2812.88 c
+1350 2818.8 1358.2 2824.28 1360.93 2826.09 c
+1373.24 2834.3 1368.68 2840.23 1348.18 2836.58 c
+1327.67 2832.92 1327.67 2824.73 1325.84 2820.17 c
+f*
+0.6 0.349 0 rg
+1326.43 2820.27 m
+1324.69 2815.91 1336.92 2807.6 1343.03 2813.28 c
+1349.59 2818.96 1357.45 2824.21 1360.07 2825.95 c
+1371.87 2833.82 1367.5 2839.5 1347.84 2836 c
+1328.18 2832.5 1328.18 2824.64 1326.43 2820.27 c
+f*
+1 0.8 0 rg
+1355.44 2602.23 m
+1353.15 2573.65 1418.87 2645.09 1422.87 2651.38 c
+1431.44 2666.81 1460.02 2710.24 1464.59 2728.53 c
+1473.16 2760.53 1488.6 2783.96 1478.88 2817.68 c
+1475.45 2828.54 1451.45 2831.4 1440.59 2824.54 c
+1409.73 2806.25 1414.3 2783.96 1410.87 2763.39 c
+1399.44 2705.1 1359.44 2646.23 1355.44 2602.23 c
+f*
+1 0.804 0.008 rg
+1358.13 2606.69 m
+1355.94 2578.82 1419.91 2648.58 1423.8 2654.72 c
+1432.13 2669.78 1459.93 2712.16 1464.36 2730 c
+1472.67 2761.22 1487.69 2784.08 1478.16 2816.95 c
+1474.8 2827.53 1451.4 2830.28 1440.82 2823.58 c
+1410.76 2805.7 1415.25 2783.97 1411.93 2763.91 c
+1400.87 2707.06 1361.96 2649.6 1358.13 2606.69 c
+f*
+1 0.804 0.02 rg
+1360.81 2611.16 m
+1358.72 2584 1420.95 2652.07 1424.73 2658.06 c
+1432.83 2672.74 1459.85 2714.09 1464.14 2731.48 c
+1472.18 2761.9 1486.78 2784.21 1477.45 2816.22 c
+1474.16 2826.52 1451.35 2829.17 1441.05 2822.62 c
+1411.78 2805.15 1416.19 2783.99 1412.99 2764.43 c
+1402.31 2709.02 1364.48 2652.97 1360.81 2611.16 c
+f*
+1 0.804 0.027 rg
+1363.5 2615.62 m
+1361.51 2589.17 1421.99 2655.56 1425.66 2661.39 c
+1433.52 2675.7 1459.76 2716.01 1463.91 2732.95 c
+1471.69 2762.59 1485.87 2784.33 1476.73 2815.48 c
+1473.51 2825.52 1451.29 2828.05 1441.28 2821.66 c
+1412.81 2804.6 1417.14 2784 1414.06 2764.96 c
+1403.74 2710.98 1367 2656.35 1363.5 2615.62 c
+f*
+1 0.804 0.039 rg
+1366.18 2620.09 m
+1364.29 2594.35 1423.02 2659.04 1426.59 2664.73 c
+1434.21 2678.67 1459.68 2717.93 1463.68 2734.42 c
+1471.21 2763.28 1484.96 2784.46 1476.01 2814.75 c
+1472.86 2824.51 1451.24 2826.94 1441.51 2820.7 c
+1413.84 2804.05 1418.08 2784.02 1415.12 2765.48 c
+1405.18 2712.94 1369.52 2659.72 1366.18 2620.09 c
+f*
+1 0.808 0.047 rg
+1368.87 2624.55 m
+1367.08 2599.52 1424.06 2662.53 1427.52 2668.07 c
+1434.9 2681.64 1459.59 2719.85 1463.46 2735.9 c
+1470.72 2763.96 1484.06 2784.58 1475.3 2814.02 c
+1472.21 2823.5 1451.19 2825.82 1441.74 2819.74 c
+1414.87 2803.5 1419.03 2784.03 1416.18 2766 c
+1406.61 2714.91 1372.04 2663.09 1368.87 2624.55 c
+f*
+1 0.808 0.059 rg
+1371.56 2629.02 m
+1369.87 2604.7 1425.1 2666.02 1428.45 2671.41 c
+1435.59 2684.6 1459.5 2721.78 1463.23 2737.37 c
+1470.23 2764.65 1483.15 2784.71 1474.58 2813.29 c
+1471.57 2822.49 1451.14 2824.71 1441.97 2818.78 c
+1415.89 2802.96 1419.98 2784.04 1417.25 2766.52 c
+1408.05 2716.87 1374.57 2666.46 1371.56 2629.02 c
+f*
+1 0.808 0.067 rg
+1374.24 2633.48 m
+1372.65 2609.87 1426.14 2669.51 1429.38 2674.74 c
+1436.29 2687.57 1459.42 2723.7 1463 2738.84 c
+1469.74 2765.34 1482.24 2784.83 1473.86 2812.56 c
+1470.92 2821.48 1451.09 2823.59 1442.2 2817.82 c
+1416.92 2802.41 1420.92 2784.06 1418.31 2767.05 c
+1409.48 2718.83 1377.09 2669.83 1374.24 2633.48 c
+f*
+1 0.808 0.078 rg
+1376.93 2637.95 m
+1375.44 2615.05 1427.18 2673 1430.31 2678.08 c
+1436.98 2690.53 1459.33 2725.62 1462.77 2740.31 c
+1469.25 2766.02 1481.33 2784.96 1473.15 2811.82 c
+1470.27 2820.48 1451.03 2822.48 1442.43 2816.86 c
+1417.95 2801.86 1421.87 2784.07 1419.37 2767.57 c
+1410.92 2720.79 1379.61 2673.21 1376.93 2637.95 c
+f*
+1 0.812 0.09 rg
+1379.61 2642.41 m
+1378.22 2620.22 1428.22 2676.49 1431.24 2681.42 c
+1437.67 2693.49 1459.25 2727.55 1462.55 2741.79 c
+1468.76 2766.71 1480.42 2785.08 1472.43 2811.09 c
+1469.63 2819.47 1450.98 2821.36 1442.66 2815.9 c
+1418.97 2801.31 1422.81 2784.09 1420.43 2768.09 c
+1412.35 2722.75 1382.13 2676.58 1379.61 2642.41 c
+f*
+1 0.812 0.098 rg
+1382.3 2646.88 m
+1381.01 2625.4 1429.26 2679.97 1432.16 2684.75 c
+1438.37 2696.46 1459.16 2729.47 1462.32 2743.26 c
+1468.27 2767.4 1479.51 2785.21 1471.72 2810.36 c
+1468.98 2818.46 1450.93 2820.25 1442.89 2814.94 c
+1420 2800.76 1423.76 2784.1 1421.5 2768.62 c
+1413.79 2724.71 1384.65 2679.95 1382.3 2646.88 c
+f*
+1 0.812 0.11 rg
+1384.99 2651.34 m
+1383.8 2630.57 1430.29 2683.46 1433.09 2688.09 c
+1439.06 2699.43 1459.07 2731.39 1462.09 2744.73 c
+1467.79 2768.08 1478.6 2785.33 1471 2809.63 c
+1468.33 2817.45 1450.88 2819.13 1443.11 2813.98 c
+1421.03 2800.21 1424.71 2784.11 1422.56 2769.14 c
+1415.22 2726.67 1387.17 2683.32 1384.99 2651.34 c
+f*
+1 0.812 0.118 rg
+1387.67 2655.8 m
+1386.58 2635.75 1431.33 2686.95 1434.02 2691.43 c
+1439.75 2702.39 1458.99 2733.32 1461.87 2746.21 c
+1467.3 2768.77 1477.69 2785.45 1470.28 2808.9 c
+1467.69 2816.44 1450.83 2818.01 1443.34 2813.02 c
+1422.05 2799.66 1425.65 2784.13 1423.62 2769.66 c
+1416.65 2728.63 1389.69 2686.69 1387.67 2655.8 c
+f*
+1 0.816 0.129 rg
+1390.36 2660.27 m
+1389.37 2640.92 1432.37 2690.44 1434.95 2694.77 c
+1440.44 2705.35 1458.9 2735.24 1461.64 2747.68 c
+1466.81 2769.45 1476.78 2785.58 1469.57 2808.16 c
+1467.04 2815.44 1450.77 2816.9 1443.57 2812.06 c
+1423.08 2799.11 1426.6 2784.14 1424.68 2770.18 c
+1418.09 2730.59 1392.21 2690.07 1390.36 2660.27 c
+f*
+1 0.816 0.137 rg
+1393.04 2664.73 m
+1392.15 2646.1 1433.41 2693.93 1435.88 2698.1 c
+1441.14 2708.32 1458.82 2737.16 1461.41 2749.15 c
+1466.32 2770.14 1475.87 2785.7 1468.85 2807.43 c
+1466.39 2814.43 1450.72 2815.78 1443.8 2811.1 c
+1424.11 2798.56 1427.54 2784.16 1425.75 2770.7 c
+1419.52 2732.55 1394.73 2693.44 1393.04 2664.73 c
+f*
+1 0.816 0.149 rg
+1395.73 2669.2 m
+1394.94 2651.28 1434.45 2697.42 1436.81 2701.44 c
+1441.83 2711.28 1458.73 2739.09 1461.18 2750.62 c
+1465.83 2770.83 1474.97 2785.83 1468.13 2806.7 c
+1465.75 2813.42 1450.67 2814.67 1444.03 2810.14 c
+1425.13 2798.02 1428.49 2784.17 1426.81 2771.23 c
+1420.96 2734.52 1397.25 2696.81 1395.73 2669.2 c
+f*
+1 0.816 0.157 rg
+1398.42 2673.66 m
+1397.73 2656.45 1435.49 2700.91 1437.74 2704.78 c
+1442.52 2714.25 1458.64 2741.01 1460.96 2752.1 c
+1465.34 2771.51 1474.06 2785.95 1467.42 2805.97 c
+1465.1 2812.41 1450.62 2813.55 1444.26 2809.18 c
+1426.16 2797.47 1429.44 2784.18 1427.87 2771.75 c
+1422.39 2736.48 1399.78 2700.18 1398.42 2673.66 c
+f*
+1 0.82 0.169 rg
+1401.1 2678.13 m
+1400.51 2661.63 1436.52 2704.39 1438.67 2708.12 c
+1443.21 2717.21 1458.56 2742.93 1460.73 2753.57 c
+1464.86 2772.2 1473.15 2786.08 1466.7 2805.24 c
+1464.45 2811.4 1450.57 2812.44 1444.49 2808.22 c
+1427.19 2796.92 1430.38 2784.2 1428.93 2772.27 c
+1423.83 2738.44 1402.3 2703.55 1401.1 2678.13 c
+f*
+1 0.82 0.18 rg
+1403.79 2682.59 m
+1403.3 2666.8 1437.56 2707.88 1439.6 2711.45 c
+1443.91 2720.18 1458.47 2744.85 1460.5 2755.04 c
+1464.37 2772.89 1472.24 2786.2 1465.98 2804.5 c
+1463.8 2810.4 1450.51 2811.32 1444.72 2807.26 c
+1428.22 2796.37 1431.33 2784.21 1430 2772.8 c
+1425.26 2740.4 1404.82 2706.93 1403.79 2682.59 c
+f*
+1 0.82 0.188 rg
+1406.47 2687.06 m
+1406.08 2671.98 1438.6 2711.37 1440.53 2714.79 c
+1444.6 2723.14 1458.39 2746.78 1460.28 2756.52 c
+1463.88 2773.57 1471.33 2786.33 1465.27 2803.77 c
+1463.16 2809.39 1450.46 2810.21 1444.95 2806.3 c
+1429.24 2795.82 1432.27 2784.23 1431.06 2773.32 c
+1426.7 2742.36 1407.34 2710.3 1406.47 2687.06 c
+f*
+1 0.82 0.2 rg
+1409.16 2691.52 m
+1408.87 2677.15 1439.64 2714.86 1441.46 2718.13 c
+1445.29 2726.11 1458.3 2748.7 1460.05 2757.99 c
+1463.39 2774.26 1470.42 2786.45 1464.55 2803.04 c
+1462.51 2808.38 1450.41 2809.09 1445.18 2805.34 c
+1430.27 2795.27 1433.22 2784.24 1432.12 2773.84 c
+1428.13 2744.32 1409.86 2713.67 1409.16 2691.52 c
+f*
+1 0.8 0 rg
+1582.39 2721.17 m
+1550.71 2686.61 1528.39 2653.49 1510.39 2631.17 c
+1491.67 2608.13 1445.59 2580.77 1468.63 2554.13 c
+1488.07 2530.37 1567.99 2573.57 1629.91 2619.65 c
+1691.11 2665.73 1786.87 2706.77 1740.07 2759.33 c
+1715.59 2785.97 1657.99 2780.21 1635.67 2765.81 c
+1618.39 2755.01 1608.31 2749.25 1582.39 2721.17 c
+f*
+1 0.804 0.008 rg
+1583.75 2719.64 m
+1552.57 2685.86 1530.62 2653.36 1512.89 2631.54 c
+1494.48 2609.06 1449.14 2582.09 1471.58 2556.2 c
+1490.52 2533.11 1568.83 2575.64 1629.54 2620.89 c
+1689.55 2666.14 1783.34 2706.64 1737.74 2757.71 c
+1713.88 2783.59 1657.52 2777.69 1635.65 2763.55 c
+1618.73 2752.93 1609 2746.85 1583.75 2719.64 c
+f*
+1 0.804 0.02 rg
+1585.12 2718.1 m
+1554.43 2685.1 1532.85 2653.23 1515.39 2631.91 c
+1497.29 2609.98 1452.68 2583.42 1474.54 2558.28 c
+1492.97 2535.84 1569.67 2577.7 1629.17 2622.13 c
+1687.98 2666.55 1779.81 2706.5 1735.4 2756.09 c
+1712.17 2781.22 1657.05 2775.16 1635.62 2761.29 c
+1619.07 2750.86 1609.69 2744.45 1585.12 2718.1 c
+f*
+1 0.804 0.027 rg
+1586.48 2716.57 m
+1556.28 2684.35 1535.08 2653.1 1517.89 2632.28 c
+1500.09 2610.91 1456.23 2584.74 1477.49 2560.35 c
+1495.42 2538.58 1570.51 2579.77 1628.8 2623.37 c
+1686.42 2666.97 1776.28 2706.37 1733.07 2754.47 c
+1710.46 2778.84 1656.58 2772.64 1635.6 2759.03 c
+1619.41 2748.78 1610.37 2742.06 1586.48 2716.57 c
+f*
+1 0.804 0.039 rg
+1587.84 2715.03 m
+1558.14 2683.6 1537.32 2652.97 1520.39 2632.65 c
+1502.9 2611.83 1459.77 2586.06 1480.45 2562.42 c
+1497.87 2541.32 1571.34 2581.83 1628.43 2624.61 c
+1684.86 2667.38 1772.75 2706.23 1730.73 2752.85 c
+1708.74 2776.47 1656.11 2770.12 1635.57 2756.77 c
+1619.75 2746.7 1611.06 2739.66 1587.84 2715.03 c
+f*
+1 0.808 0.047 rg
+1589.2 2713.5 m
+1560 2682.85 1539.55 2652.84 1522.89 2633.02 c
+1505.71 2612.76 1463.32 2587.39 1483.4 2564.49 c
+1500.33 2544.05 1572.18 2583.89 1628.06 2625.85 c
+1683.29 2667.79 1769.22 2706.1 1728.4 2751.23 c
+1707.03 2774.09 1655.64 2767.59 1635.55 2754.51 c
+1620.09 2744.63 1611.75 2737.26 1589.2 2713.5 c
+f*
+1 0.808 0.059 rg
+1590.57 2711.96 m
+1561.86 2682.1 1541.78 2652.7 1525.39 2633.39 c
+1508.52 2613.68 1466.86 2588.71 1486.35 2566.57 c
+1502.78 2546.79 1573.02 2585.96 1627.69 2627.09 c
+1681.73 2668.2 1765.69 2705.97 1726.07 2749.61 c
+1705.32 2771.71 1655.17 2765.07 1635.52 2752.25 c
+1620.43 2742.55 1612.44 2734.86 1590.57 2711.96 c
+f*
+1 0.808 0.067 rg
+1591.93 2710.43 m
+1563.72 2681.34 1544.01 2652.57 1527.89 2633.76 c
+1511.32 2614.61 1470.4 2590.03 1489.31 2568.64 c
+1505.23 2549.53 1573.86 2588.02 1627.32 2628.33 c
+1680.17 2668.61 1762.16 2705.83 1723.73 2747.99 c
+1703.61 2769.34 1654.7 2762.55 1635.5 2749.99 c
+1620.77 2740.47 1613.13 2732.46 1591.93 2710.43 c
+f*
+1 0.808 0.078 rg
+1593.29 2708.89 m
+1565.57 2680.59 1546.24 2652.44 1530.39 2634.13 c
+1514.13 2615.53 1473.95 2591.36 1492.26 2570.71 c
+1507.68 2552.26 1574.7 2590.09 1626.95 2629.57 c
+1678.61 2669.03 1758.63 2705.7 1721.4 2746.37 c
+1701.9 2766.96 1654.23 2760.03 1635.47 2747.73 c
+1621.11 2738.4 1613.81 2730.07 1593.29 2708.89 c
+f*
+1 0.812 0.09 rg
+1594.65 2707.36 m
+1567.43 2679.84 1548.47 2652.31 1532.89 2634.5 c
+1516.94 2616.46 1477.49 2592.68 1495.22 2572.79 c
+1510.13 2555 1575.54 2592.15 1626.58 2630.81 c
+1677.04 2669.44 1755.1 2705.56 1719.06 2744.75 c
+1700.19 2764.59 1653.76 2757.5 1635.45 2745.47 c
+1621.45 2736.32 1614.5 2727.67 1594.65 2707.36 c
+f*
+1 0.812 0.098 rg
+1596.02 2705.83 m
+1569.29 2679.09 1550.7 2652.18 1535.39 2634.87 c
+1519.75 2617.38 1481.04 2594.01 1498.17 2574.86 c
+1512.58 2557.73 1576.37 2594.22 1626.21 2632.05 c
+1675.48 2669.85 1751.58 2705.43 1716.73 2743.14 c
+1698.48 2762.21 1653.29 2754.98 1635.43 2743.2 c
+1621.78 2734.24 1615.19 2725.27 1596.02 2705.83 c
+f*
+1 0.812 0.11 rg
+1597.38 2704.29 m
+1571.15 2678.33 1552.94 2652.05 1537.89 2635.24 c
+1522.55 2618.31 1484.59 2595.33 1501.12 2576.93 c
+1515.03 2560.47 1577.21 2596.29 1625.84 2633.29 c
+1673.92 2670.26 1748.05 2705.3 1714.4 2741.52 c
+1696.76 2759.83 1652.83 2752.46 1635.4 2740.94 c
+1622.12 2732.17 1615.88 2722.87 1597.38 2704.29 c
+f*
+1 0.812 0.118 rg
+1598.74 2702.76 m
+1573.01 2677.58 1555.17 2651.92 1540.39 2635.61 c
+1525.36 2619.24 1488.13 2596.65 1504.08 2579.01 c
+1517.48 2563.21 1578.05 2598.35 1625.47 2634.53 c
+1672.35 2670.67 1744.52 2705.16 1712.06 2739.9 c
+1695.05 2757.46 1652.36 2749.93 1635.38 2738.68 c
+1622.46 2730.09 1616.57 2720.47 1598.74 2702.76 c
+f*
+1 0.816 0.129 rg
+1600.1 2701.22 m
+1574.86 2676.83 1557.4 2651.79 1542.89 2635.98 c
+1528.17 2620.16 1491.68 2597.98 1507.03 2581.08 c
+1519.93 2565.94 1578.89 2600.42 1625.1 2635.77 c
+1670.79 2671.09 1740.99 2705.03 1709.73 2738.28 c
+1693.34 2755.08 1651.89 2747.41 1635.35 2736.42 c
+1622.8 2728.02 1617.25 2718.08 1600.1 2701.22 c
+f*
+1 0.816 0.137 rg
+1601.46 2699.69 m
+1576.72 2676.08 1559.63 2651.66 1545.39 2636.35 c
+1530.98 2621.09 1495.22 2599.3 1509.99 2583.15 c
+1522.38 2568.68 1579.73 2602.48 1624.73 2637.01 c
+1669.23 2671.5 1737.46 2704.89 1707.39 2736.66 c
+1691.63 2752.71 1651.42 2744.89 1635.33 2734.16 c
+1623.14 2725.94 1617.94 2715.68 1601.46 2699.69 c
+f*
+1 0.816 0.149 rg
+1602.83 2698.15 m
+1578.58 2675.32 1561.86 2651.52 1547.89 2636.72 c
+1533.78 2622.01 1498.76 2600.62 1512.94 2585.22 c
+1524.84 2571.42 1580.57 2604.54 1624.36 2638.25 c
+1667.66 2671.91 1733.93 2704.76 1705.06 2735.04 c
+1689.92 2750.33 1650.95 2742.37 1635.3 2731.9 c
+1623.48 2723.86 1618.63 2713.28 1602.83 2698.15 c
+f*
+1 0.816 0.157 rg
+1604.19 2696.62 m
+1580.44 2674.57 1564.09 2651.39 1550.39 2637.09 c
+1536.59 2622.94 1502.31 2601.95 1515.89 2587.3 c
+1527.29 2574.15 1581.41 2606.61 1623.99 2639.49 c
+1666.1 2672.32 1730.4 2704.63 1702.73 2733.42 c
+1688.21 2747.95 1650.48 2739.84 1635.28 2729.64 c
+1623.82 2721.79 1619.32 2710.88 1604.19 2696.62 c
+f*
+1 0.82 0.169 rg
+1605.55 2695.08 m
+1582.3 2673.82 1566.33 2651.26 1552.89 2637.46 c
+1539.4 2623.86 1505.85 2603.27 1518.85 2589.37 c
+1529.74 2576.89 1582.24 2608.67 1623.62 2640.73 c
+1664.54 2672.73 1726.87 2704.49 1700.39 2731.8 c
+1686.49 2745.58 1650.01 2737.32 1635.25 2727.38 c
+1624.16 2719.71 1620.01 2708.48 1605.55 2695.08 c
+f*
+1 0.82 0.18 rg
+1606.91 2693.55 m
+1584.15 2673.07 1568.56 2651.13 1555.39 2637.83 c
+1542.21 2624.79 1509.4 2604.59 1521.8 2591.44 c
+1532.19 2579.63 1583.08 2610.74 1623.25 2641.97 c
+1662.98 2673.15 1723.34 2704.36 1698.06 2730.18 c
+1684.78 2743.2 1649.54 2734.8 1635.23 2725.12 c
+1624.5 2717.63 1620.69 2706.09 1606.91 2693.55 c
+f*
+1 0.82 0.188 rg
+1608.28 2692.01 m
+1586.01 2672.31 1570.79 2651 1557.89 2638.2 c
+1545.01 2625.71 1512.94 2605.92 1524.76 2593.52 c
+1534.64 2582.36 1583.92 2612.8 1622.88 2643.21 c
+1661.41 2673.56 1719.81 2704.22 1695.72 2728.56 c
+1683.07 2740.83 1649.07 2732.27 1635.2 2722.86 c
+1624.84 2715.56 1621.38 2703.69 1608.28 2692.01 c
+f*
+1 0.82 0.2 rg
+1609.64 2690.48 m
+1587.87 2671.56 1573.02 2650.87 1560.39 2638.57 c
+1547.82 2626.64 1516.49 2607.24 1527.71 2595.59 c
+1537.09 2585.1 1584.76 2614.87 1622.51 2644.45 c
+1659.85 2673.97 1716.28 2704.09 1693.39 2726.94 c
+1681.36 2738.45 1648.6 2729.75 1635.18 2720.6 c
+1625.18 2713.48 1622.07 2701.29 1609.64 2690.48 c
+f*
+1 0.8 0 rg
+1321.03 2491.49 m
+1356.31 2487.89 1388.71 2486.45 1410.31 2486.45 c
+1465.03 2486.45 1538.47 2509.49 1610.47 2546.21 c
+1681.03 2582.93 1702.63 2597.33 1753.03 2626.85 c
+1801.27 2655.65 1858.15 2692.37 1836.55 2703.17 c
+1814.95 2714.69 1789.75 2702.45 1719.91 2658.53 c
+1652.23 2616.05 1614.07 2595.89 1539.19 2562.77 c
+1510.39 2549.81 1465.75 2531.81 1435.51 2530.37 c
+1406.71 2528.93 1367.83 2529.65 1345.51 2529.65 c
+1318.87 2529.65 1284.31 2540.45 1256.23 2552.69 c
+1256.23 2553.41 1321.03 2491.49 1321.03 2491.49 c
+f*
+0.702 0.498 0.098 rg
+1259.11 2510.93 m
+1210.87 2536.85 1146.79 2570.69 1133.83 2620.37 c
+1133.11 2623.97 1143.19 2629.73 1147.51 2628.29 c
+1259.11 2510.93 l
+f*
+0.69 0.49 0.098 rg
+1259.11 2511.65 m
+1210.15 2537.57 1147.51 2571.41 1135.27 2618.93 c
+1134.55 2622.53 1143.91 2628.29 1148.95 2626.13 c
+1185.67 2589.41 1177.03 2598.77 1259.11 2511.65 c
+f*
+0.671 0.471 0.09 rg
+1258.39 2511.65 m
+1209.43 2538.29 1148.23 2572.13 1136.71 2618.21 c
+1135.99 2621.81 1145.35 2627.57 1151.11 2624.69 c
+1185.67 2589.41 1181.35 2594.45 1258.39 2511.65 c
+f*
+0.659 0.459 0.09 rg
+1258.39 2512.37 m
+1208.71 2538.29 1148.95 2572.85 1137.43 2616.77 c
+1137.43 2620.37 1146.07 2626.13 1152.55 2622.53 c
+1184.95 2589.41 1184.95 2590.85 1258.39 2512.37 c
+f*
+0.639 0.439 0.078 rg
+1257.67 2513.09 m
+1208.71 2539.01 1148.95 2572.85 1138.87 2616.05 c
+1138.15 2618.93 1147.51 2624.69 1153.99 2621.09 c
+1184.95 2589.41 1188.55 2587.25 1257.67 2513.09 c
+f*
+0.631 0.431 0.078 rg
+1257.67 2513.81 m
+1207.99 2539.73 1149.67 2573.57 1140.31 2614.61 c
+1139.59 2618.21 1148.23 2623.97 1155.43 2618.93 c
+1184.95 2589.41 1192.15 2582.93 1257.67 2513.81 c
+f*
+0.612 0.408 0.067 rg
+1257.67 2513.81 m
+1207.27 2540.45 1150.39 2574.29 1141.75 2613.89 c
+1141.03 2616.77 1149.67 2622.53 1157.59 2617.49 c
+1184.95 2589.41 1196.47 2579.33 1257.67 2513.81 c
+f*
+0.6 0.4 0.067 rg
+1256.95 2514.53 m
+1206.55 2541.17 1151.11 2575.01 1143.19 2612.45 c
+1142.47 2615.33 1150.39 2621.09 1159.03 2615.33 c
+1184.95 2589.41 1200.07 2575.73 1256.95 2514.53 c
+f*
+0.592 0.388 0.067 rg
+1256.95 2515.25 m
+1205.83 2541.17 1151.83 2575.73 1143.91 2611.01 c
+1143.91 2614.61 1151.11 2620.37 1160.47 2613.89 c
+1184.23 2589.41 1203.67 2571.41 1256.95 2515.25 c
+f*
+0.569 0.369 0.059 rg
+1256.95 2515.25 m
+1205.11 2541.89 1152.55 2576.45 1145.35 2610.29 c
+1145.35 2613.17 1152.55 2618.93 1162.63 2611.73 c
+1184.23 2589.41 1207.99 2567.81 1256.95 2515.25 c
+f*
+0.561 0.361 0.059 rg
+1256.23 2515.97 m
+1204.39 2542.61 1153.27 2577.17 1146.79 2608.85 c
+1146.79 2611.73 1153.27 2617.49 1164.07 2610.29 c
+1184.23 2589.41 1211.59 2564.21 1256.23 2515.97 c
+f*
+0.541 0.341 0.039 rg
+1256.23 2516.69 m
+1204.39 2543.33 1153.27 2577.17 1148.23 2608.13 c
+1147.51 2611.01 1154.71 2616.77 1165.51 2608.13 c
+1184.23 2590.13 1215.19 2559.89 1256.23 2516.69 c
+f*
+0.529 0.329 0.039 rg
+1255.51 2517.41 m
+1203.67 2544.05 1153.99 2577.89 1149.67 2606.69 c
+1148.95 2609.57 1155.43 2615.33 1166.95 2606.69 c
+1184.23 2590.13 1218.79 2556.29 1255.51 2517.41 c
+f*
+0.51 0.31 0.027 rg
+1255.51 2517.41 m
+1202.95 2544.77 1154.71 2578.61 1151.11 2605.97 c
+1150.39 2608.13 1156.87 2613.89 1169.11 2604.53 c
+1184.23 2590.13 1223.11 2552.69 1255.51 2517.41 c
+f*
+0.498 0.298 0.027 rg
+1255.51 2518.13 m
+1202.23 2544.77 1155.43 2579.33 1151.83 2604.53 c
+1151.83 2607.41 1157.59 2613.17 1170.55 2603.09 c
+1183.51 2590.13 1226.71 2548.37 1255.51 2518.13 c
+f*
+0.49 0.29 0.027 rg
+1254.79 2518.85 m
+1201.51 2545.49 1156.15 2580.05 1153.27 2603.09 c
+1153.27 2605.97 1158.31 2611.73 1171.99 2600.93 c
+1183.51 2590.13 1230.31 2544.77 1254.79 2518.85 c
+f*
+0.471 0.271 0.02 rg
+1254.79 2518.85 m
+1200.79 2546.21 1156.87 2580.77 1154.71 2602.37 c
+1154.71 2604.53 1159.75 2610.29 1174.15 2599.49 c
+1183.51 2590.13 1234.63 2541.17 1254.79 2518.85 c
+f*
+0.459 0.259 0.02 rg
+1254.79 2519.57 m
+1200.07 2546.93 1157.59 2581.49 1156.15 2600.93 c
+1156.15 2603.81 1160.47 2609.57 1175.59 2597.33 c
+1183.51 2590.13 1238.23 2536.85 1254.79 2519.57 c
+f*
+0.439 0.239 0.008 rg
+1254.07 2520.29 m
+1200.07 2547.65 1157.59 2581.49 1157.59 2600.21 c
+1156.87 2602.37 1161.91 2608.13 1177.03 2595.89 c
+1183.51 2590.13 1241.83 2533.25 1254.07 2520.29 c
+f*
+0.431 0.227 0.008 rg
+1254.07 2521.01 m
+1199.35 2547.65 1158.31 2582.21 1158.31 2598.77 c
+1158.31 2600.93 1162.63 2606.69 1178.47 2593.73 c
+1182.79 2590.13 1245.43 2529.65 1254.07 2521.01 c
+f*
+0.408 0.208 0 rg
+1253.35 2521.01 m
+1198.63 2548.37 1159.03 2582.93 1159.75 2598.05 c
+1159.75 2600.21 1164.07 2605.97 1180.63 2592.29 c
+1182.79 2590.13 1249.75 2525.33 1253.35 2521.01 c
+f*
+0.4 0.2 0 rg
+1253.35 2521.73 m
+1197.91 2549.09 1159.75 2583.65 1161.19 2596.61 c
+1161.19 2598.77 1164.79 2604.53 1182.07 2590.13 c
+1182.79 2590.13 1253.35 2521.73 1253.35 2521.73 c
+f*
+0.8 0.6 0.2 rg
+1315.99 2495.09 m
+1315.99 2495.09 1278.55 2503.73 1261.99 2508.77 c
+1261.99 2508.77 1147.51 2628.29 1148.23 2628.29 c
+1164.79 2621.81 1205.83 2582.93 1223.83 2567.09 c
+1230.31 2561.33 1245.43 2552.69 1262.71 2547.65 c
+1263.43 2547.65 1315.99 2495.09 1315.99 2495.09 c
+f*
+0.78 0.58 0.188 rg
+1315.99 2495.81 m
+1315.99 2495.81 1277.11 2504.45 1260.55 2510.21 c
+1260.55 2510.21 1148.23 2626.85 1148.95 2626.85 c
+1165.51 2620.37 1206.55 2581.49 1224.55 2566.37 c
+1231.03 2560.61 1246.87 2551.97 1263.43 2546.93 c
+1264.15 2546.93 1315.99 2495.81 1315.99 2495.81 c
+f*
+0.761 0.561 0.18 rg
+1315.27 2495.81 m
+1315.27 2495.81 1275.67 2505.17 1259.11 2511.65 c
+1259.11 2511.65 1149.67 2625.41 1150.39 2625.41 c
+1166.23 2618.93 1207.27 2580.77 1225.27 2565.65 c
+1231.75 2559.89 1247.59 2550.53 1264.87 2546.21 c
+1265.59 2546.21 1315.27 2495.81 1315.27 2495.81 c
+f*
+0.741 0.541 0.169 rg
+1315.27 2496.53 m
+1315.27 2496.53 1274.23 2505.89 1257.67 2512.37 c
+1257.67 2512.37 1150.39 2624.69 1151.11 2624.69 c
+1166.95 2617.49 1207.99 2579.33 1225.27 2564.93 c
+1232.47 2559.17 1249.03 2549.81 1265.59 2544.77 c
+1266.31 2544.77 1315.27 2496.53 1315.27 2496.53 c
+f*
+0.722 0.522 0.157 rg
+1314.55 2496.53 m
+1314.55 2496.53 1273.51 2506.61 1256.23 2513.81 c
+1256.23 2513.81 1151.11 2623.25 1151.83 2623.25 c
+1167.67 2616.05 1208.71 2577.89 1225.99 2563.49 c
+1233.19 2558.45 1250.47 2549.09 1267.03 2544.05 c
+1267.75 2544.05 1314.55 2496.53 1314.55 2496.53 c
+f*
+0.702 0.498 0.149 rg
+1314.55 2497.25 m
+1314.55 2497.25 1272.07 2507.33 1254.79 2515.25 c
+1254.79 2515.25 1152.55 2621.81 1153.27 2621.81 c
+1168.39 2614.61 1209.43 2576.45 1226.71 2562.77 c
+1233.91 2557.73 1251.19 2547.65 1267.75 2543.33 c
+1268.47 2543.33 1314.55 2497.25 1314.55 2497.25 c
+f*
+0.69 0.49 0.149 rg
+1314.55 2497.25 m
+1314.55 2497.25 1270.63 2507.33 1253.35 2516.69 c
+1253.35 2516.69 1153.27 2620.37 1153.99 2620.37 c
+1169.11 2613.17 1210.15 2575.73 1227.43 2562.05 c
+1234.63 2557.01 1252.63 2546.93 1269.19 2542.61 c
+1269.91 2542.61 1314.55 2497.25 1314.55 2497.25 c
+f*
+0.671 0.471 0.137 rg
+1313.83 2497.97 m
+1313.83 2497.97 1269.19 2508.05 1251.91 2517.41 c
+1251.91 2517.41 1153.99 2618.93 1154.71 2618.93 c
+1169.83 2611.73 1210.87 2574.29 1228.15 2561.33 c
+1235.35 2556.29 1254.07 2546.21 1269.91 2541.89 c
+1270.63 2541.89 1313.83 2497.97 1313.83 2497.97 c
+f*
+0.651 0.451 0.129 rg
+1313.83 2498.69 m
+1313.83 2498.69 1267.75 2508.77 1250.47 2518.85 c
+1250.47 2518.85 1155.43 2618.21 1156.15 2618.21 c
+1170.55 2610.29 1211.59 2572.85 1228.15 2560.61 c
+1236.07 2555.57 1254.79 2544.77 1271.35 2540.45 c
+1272.07 2540.45 1313.83 2498.69 1313.83 2498.69 c
+f*
+0.631 0.431 0.118 rg
+1313.83 2498.69 m
+1313.83 2498.69 1266.31 2509.49 1249.03 2520.29 c
+1249.03 2520.29 1156.15 2616.77 1156.87 2616.77 c
+1171.27 2608.85 1212.31 2572.13 1228.87 2559.89 c
+1236.79 2554.85 1256.23 2544.05 1272.07 2539.73 c
+1272.79 2539.73 1313.83 2498.69 1313.83 2498.69 c
+f*
+0.612 0.408 0.11 rg
+1313.11 2499.41 m
+1313.11 2499.41 1264.87 2510.21 1247.59 2521.73 c
+1247.59 2521.73 1156.87 2615.33 1157.59 2615.33 c
+1171.99 2607.41 1213.03 2570.69 1229.59 2559.17 c
+1237.51 2554.13 1257.67 2543.33 1273.51 2539.01 c
+1274.23 2539.01 1313.11 2499.41 1313.11 2499.41 c
+f*
+0.592 0.388 0.09 rg
+1313.11 2499.41 m
+1313.11 2499.41 1264.15 2510.93 1245.43 2522.45 c
+1245.43 2522.45 1158.31 2613.89 1159.03 2613.89 c
+1173.43 2605.25 1213.75 2569.25 1230.31 2557.73 c
+1238.23 2553.41 1258.39 2541.89 1274.23 2538.29 c
+1274.95 2538.29 1313.11 2499.41 1313.11 2499.41 c
+f*
+0.569 0.369 0.078 rg
+1312.39 2500.13 m
+1312.39 2500.13 1262.71 2511.65 1243.99 2523.89 c
+1243.99 2523.89 1159.03 2612.45 1159.75 2612.45 c
+1174.15 2603.81 1214.47 2567.81 1231.03 2557.01 c
+1238.95 2552.69 1259.83 2541.17 1275.67 2537.57 c
+1276.39 2537.57 1312.39 2500.13 1312.39 2500.13 c
+f*
+0.549 0.349 0.067 rg
+1312.39 2500.13 m
+1312.39 2500.13 1261.27 2512.37 1242.55 2525.33 c
+1242.55 2525.33 1159.75 2611.01 1160.47 2611.01 c
+1174.87 2602.37 1215.19 2567.09 1231.75 2556.29 c
+1239.67 2551.97 1261.27 2540.45 1276.39 2536.85 c
+1277.11 2536.85 1312.39 2500.13 1312.39 2500.13 c
+f*
+0.529 0.329 0.059 rg
+1312.39 2500.85 m
+1312.39 2500.85 1259.83 2513.09 1241.11 2526.77 c
+1241.11 2526.77 1161.19 2610.29 1161.91 2610.29 c
+1175.59 2600.93 1215.91 2565.65 1231.75 2555.57 c
+1240.39 2551.25 1261.99 2539.01 1277.83 2535.41 c
+1278.55 2535.41 1312.39 2500.85 1312.39 2500.85 c
+f*
+0.51 0.31 0.047 rg
+1311.67 2501.57 m
+1311.67 2501.57 1258.39 2513.81 1239.67 2527.49 c
+1239.67 2527.49 1161.91 2608.85 1162.63 2608.85 c
+1176.31 2599.49 1216.63 2564.21 1232.47 2554.85 c
+1241.11 2550.53 1263.43 2538.29 1278.55 2534.69 c
+1279.27 2534.69 1311.67 2501.57 1311.67 2501.57 c
+f*
+0.498 0.298 0.047 rg
+1311.67 2501.57 m
+1311.67 2501.57 1256.95 2513.81 1238.23 2528.93 c
+1238.23 2528.93 1162.63 2607.41 1163.35 2607.41 c
+1177.03 2598.05 1217.35 2563.49 1233.19 2554.13 c
+1241.83 2549.81 1264.87 2537.57 1279.99 2533.97 c
+1280.71 2533.97 1311.67 2501.57 1311.67 2501.57 c
+f*
+0.478 0.278 0.039 rg
+1311.67 2502.29 m
+1311.67 2502.29 1255.51 2514.53 1236.79 2530.37 c
+1236.79 2530.37 1164.07 2605.97 1164.79 2605.97 c
+1177.75 2596.61 1218.07 2562.05 1233.91 2553.41 c
+1242.55 2549.09 1265.59 2536.13 1280.71 2533.25 c
+1281.43 2533.25 1311.67 2502.29 1311.67 2502.29 c
+f*
+0.459 0.259 0.027 rg
+1310.95 2502.29 m
+1310.95 2502.29 1254.79 2515.25 1235.35 2531.81 c
+1235.35 2531.81 1164.79 2604.53 1165.51 2604.53 c
+1178.47 2595.17 1218.79 2560.61 1234.63 2551.97 c
+1243.27 2548.37 1267.03 2535.41 1282.15 2532.53 c
+1282.87 2532.53 1310.95 2502.29 1310.95 2502.29 c
+f*
+0.439 0.239 0.02 rg
+1310.95 2503.01 m
+1310.95 2503.01 1253.35 2515.97 1233.91 2532.53 c
+1233.91 2532.53 1165.51 2603.81 1166.23 2603.81 c
+1179.19 2593.73 1219.51 2559.17 1234.63 2551.25 c
+1243.99 2547.65 1268.47 2534.69 1282.87 2531.09 c
+1283.59 2531.09 1310.95 2503.01 1310.95 2503.01 c
+f*
+0.42 0.22 0.008 rg
+1310.23 2503.01 m
+1310.23 2503.01 1251.91 2516.69 1232.47 2533.97 c
+1232.47 2533.97 1166.95 2602.37 1167.67 2602.37 c
+1179.91 2592.29 1220.23 2558.45 1235.35 2550.53 c
+1244.71 2546.93 1269.19 2533.25 1284.31 2530.37 c
+1285.03 2530.37 1310.23 2503.01 1310.23 2503.01 c
+f*
+0.4 0.2 0 rg
+1310.23 2503.73 m
+1310.23 2503.73 1250.47 2517.41 1231.03 2535.41 c
+1231.03 2535.41 1167.67 2600.93 1168.39 2600.93 c
+1180.63 2590.85 1220.95 2557.01 1236.07 2549.81 c
+1245.43 2546.21 1270.63 2532.53 1285.03 2529.65 c
+1285.75 2529.65 1310.23 2503.73 1310.23 2503.73 c
+f*
+0.973 0.773 0 rg
+1320.31 2492.21 m
+1355.59 2488.61 1388.71 2487.17 1410.31 2487.17 c
+1465.03 2487.17 1537.75 2510.21 1609.75 2546.21 c
+1679.59 2582.93 1701.19 2597.33 1750.87 2626.85 c
+1799.11 2654.93 1856.71 2691.65 1835.11 2702.45 c
+1813.51 2713.97 1789.03 2701.01 1719.19 2657.81 c
+1651.51 2615.33 1612.63 2594.45 1538.47 2562.05 c
+1509.67 2549.09 1465.75 2531.09 1435.51 2529.65 c
+1406.71 2528.21 1367.83 2528.93 1345.51 2528.93 c
+1318.87 2528.93 1285.03 2539.73 1256.95 2551.97 c
+1256.95 2552.69 1320.31 2492.21 1320.31 2492.21 c
+f*
+0.941 0.741 0 rg
+1318.87 2492.93 m
+1354.87 2488.61 1388.71 2487.89 1411.03 2487.89 c
+1465.03 2487.89 1537.03 2510.93 1608.31 2546.93 c
+1678.87 2582.93 1699.03 2597.33 1749.43 2626.13 c
+1797.67 2654.93 1855.27 2690.93 1833.67 2701.73 c
+1812.07 2712.53 1788.31 2699.57 1718.47 2656.37 c
+1650.79 2614.61 1611.19 2593.01 1538.47 2561.33 c
+1508.95 2548.37 1465.75 2530.37 1435.51 2528.93 c
+1406.71 2527.49 1367.83 2528.21 1346.23 2528.21 c
+1319.59 2528.21 1285.75 2539.01 1257.67 2550.53 c
+1257.67 2551.25 1318.87 2492.93 1318.87 2492.93 c
+f*
+0.91 0.71 0 rg
+1318.15 2493.65 m
+1354.15 2489.33 1388.71 2488.61 1411.03 2488.61 c
+1465.03 2488.61 1536.31 2511.65 1607.59 2546.93 c
+1677.43 2582.93 1697.59 2597.33 1747.27 2626.13 c
+1795.51 2654.21 1853.11 2690.21 1832.23 2700.29 c
+1810.63 2711.81 1786.87 2698.13 1717.75 2655.65 c
+1650.79 2613.89 1609.75 2591.57 1537.75 2560.61 c
+1508.95 2547.65 1465.75 2530.37 1435.51 2528.21 c
+1406.71 2526.77 1368.55 2527.49 1346.23 2527.49 c
+1319.59 2527.49 1286.47 2538.29 1259.11 2549.81 c
+1259.11 2550.53 1318.15 2493.65 1318.15 2493.65 c
+f*
+0.89 0.69 0 rg
+1317.43 2493.65 m
+1353.43 2489.33 1388.71 2489.33 1411.03 2489.33 c
+1465.03 2489.33 1535.59 2511.65 1606.87 2547.65 c
+1676.71 2582.93 1695.43 2597.33 1745.83 2625.41 c
+1793.35 2653.49 1851.67 2688.77 1830.79 2699.57 c
+1809.19 2710.37 1786.15 2696.69 1717.03 2654.21 c
+1650.07 2613.17 1608.31 2590.85 1537.75 2559.89 c
+1508.23 2546.93 1465.75 2529.65 1435.51 2528.21 c
+1406.71 2526.05 1368.55 2526.77 1346.23 2526.77 c
+1320.31 2526.77 1287.19 2537.57 1259.83 2549.09 c
+1259.83 2549.81 1317.43 2493.65 1317.43 2493.65 c
+f*
+0.863 0.659 0 rg
+1315.99 2494.37 m
+1352.71 2490.05 1388.71 2490.05 1411.03 2490.05 c
+1465.03 2490.05 1534.87 2512.37 1606.15 2547.65 c
+1675.27 2582.93 1693.99 2597.33 1743.67 2625.41 c
+1791.19 2652.77 1850.23 2688.05 1829.35 2698.85 c
+1807.75 2709.65 1785.43 2695.25 1716.31 2653.49 c
+1649.35 2612.45 1606.87 2589.41 1537.03 2559.17 c
+1507.51 2546.21 1465.75 2528.93 1435.51 2527.49 c
+1406.71 2525.33 1368.55 2526.05 1346.23 2526.05 c
+1320.31 2526.05 1287.91 2536.85 1260.55 2548.37 c
+1260.55 2549.09 1315.99 2494.37 1315.99 2494.37 c
+f*
+0.831 0.631 0 rg
+1315.27 2495.09 m
+1352.71 2490.05 1388.71 2490.77 1411.75 2490.77 c
+1465.75 2490.77 1534.15 2513.09 1604.71 2548.37 c
+1674.55 2582.93 1692.55 2596.61 1742.23 2624.69 c
+1789.75 2652.77 1848.79 2687.33 1827.19 2698.13 c
+1806.31 2708.93 1784.71 2694.53 1715.59 2652.05 c
+1648.63 2611.73 1605.43 2587.97 1537.03 2557.73 c
+1506.79 2544.77 1465.75 2528.21 1435.51 2526.77 c
+1406.71 2524.61 1368.55 2525.33 1346.95 2525.33 c
+1321.03 2525.33 1288.63 2535.41 1261.27 2546.93 c
+1261.27 2547.65 1315.27 2495.09 1315.27 2495.09 c
+f*
+0.8 0.6 0 rg
+1314.55 2495.81 m
+1351.99 2490.77 1388.71 2491.49 1411.75 2491.49 c
+1465.75 2491.49 1533.43 2513.81 1603.99 2548.37 c
+1673.11 2582.93 1690.39 2596.61 1740.07 2624.69 c
+1787.59 2652.05 1847.35 2686.61 1825.75 2696.69 c
+1804.87 2707.49 1783.27 2693.09 1714.87 2651.33 c
+1647.91 2611.01 1603.99 2586.53 1536.31 2557.01 c
+1506.79 2544.05 1465.75 2528.21 1435.51 2526.05 c
+1406.71 2523.89 1368.55 2524.61 1346.95 2524.61 c
+1321.03 2524.61 1289.35 2534.69 1261.99 2546.21 c
+1261.99 2546.93 1314.55 2495.81 1314.55 2495.81 c
+f*
+0.773 0.569 0 rg
+1313.11 2496.53 m
+1351.27 2491.49 1388.71 2492.21 1411.75 2492.21 c
+1465.75 2492.21 1532.71 2514.53 1603.27 2548.37 c
+1672.39 2582.93 1688.95 2596.61 1737.91 2624.69 c
+1785.43 2651.33 1845.19 2685.89 1824.31 2695.97 c
+1803.43 2706.77 1782.55 2691.65 1714.15 2650.61 c
+1647.91 2610.29 1602.55 2585.09 1536.31 2556.29 c
+1506.07 2543.33 1465.75 2527.49 1435.51 2525.33 c
+1406.71 2523.17 1369.27 2523.89 1346.95 2523.89 c
+1321.03 2523.89 1290.07 2533.97 1263.43 2545.49 c
+1263.43 2546.21 1313.11 2496.53 1313.11 2496.53 c
+f*
+0.741 0.541 0 rg
+1312.39 2497.25 m
+1350.55 2491.49 1388.71 2492.93 1412.47 2492.93 c
+1465.75 2492.93 1531.99 2515.25 1601.83 2549.09 c
+1670.95 2582.93 1687.51 2596.61 1736.47 2623.97 c
+1783.99 2651.33 1843.75 2685.17 1822.87 2695.25 c
+1801.99 2706.05 1781.83 2690.21 1713.43 2649.17 c
+1647.19 2609.57 1601.11 2583.65 1535.59 2555.57 c
+1505.35 2542.61 1465.75 2526.77 1435.51 2524.61 c
+1406.71 2522.45 1369.27 2523.17 1347.67 2523.17 c
+1321.75 2523.17 1290.79 2533.25 1264.15 2544.05 c
+1264.15 2544.77 1312.39 2497.25 1312.39 2497.25 c
+f*
+0.71 0.51 0 rg
+1311.67 2497.97 m
+1349.83 2492.21 1388.71 2493.65 1412.47 2493.65 c
+1465.75 2493.65 1531.27 2515.97 1601.11 2549.09 c
+1670.23 2582.93 1685.35 2596.61 1734.31 2623.97 c
+1781.83 2650.61 1842.31 2684.45 1821.43 2694.53 c
+1800.55 2704.61 1781.11 2688.77 1712.71 2648.45 c
+1646.47 2608.85 1599.67 2582.21 1535.59 2554.85 c
+1504.63 2541.89 1465.75 2526.05 1435.51 2523.89 c
+1406.71 2521.73 1369.27 2522.45 1347.67 2522.45 c
+1321.75 2522.45 1291.51 2532.53 1264.87 2543.33 c
+1264.87 2544.05 1311.67 2497.97 1311.67 2497.97 c
+f*
+0.69 0.49 0 rg
+1310.23 2497.97 m
+1349.11 2492.21 1387.99 2495.09 1412.47 2495.09 c
+1465.75 2495.09 1531.27 2515.97 1600.39 2549.81 c
+1668.79 2582.93 1683.91 2596.61 1732.87 2623.25 c
+1779.67 2649.89 1840.87 2683.01 1819.99 2693.09 c
+1799.11 2703.89 1779.67 2687.33 1712.71 2647.01 c
+1645.75 2607.41 1598.95 2581.49 1534.87 2554.13 c
+1504.63 2541.17 1466.47 2526.05 1436.23 2523.89 c
+1407.43 2521.73 1369.27 2522.45 1347.67 2522.45 c
+1322.47 2522.45 1292.23 2531.81 1265.59 2542.61 c
+1265.59 2543.33 1310.23 2497.97 1310.23 2497.97 c
+f*
+0.659 0.459 0 rg
+1309.51 2498.69 m
+1348.39 2492.93 1387.99 2495.81 1412.47 2495.81 c
+1465.75 2495.81 1530.55 2516.69 1599.67 2549.81 c
+1668.07 2582.93 1681.75 2596.61 1730.71 2623.25 c
+1777.51 2649.17 1839.43 2682.29 1818.55 2692.37 c
+1797.67 2702.45 1778.95 2685.89 1711.99 2646.29 c
+1645.03 2606.69 1597.51 2580.05 1534.87 2553.41 c
+1503.91 2540.45 1466.47 2525.33 1436.23 2523.17 c
+1407.43 2521.01 1369.27 2521.73 1347.67 2521.73 c
+1322.47 2521.73 1292.95 2531.09 1266.31 2541.89 c
+1266.31 2542.61 1309.51 2498.69 1309.51 2498.69 c
+f*
+0.631 0.431 0 rg
+1308.79 2499.41 m
+1347.67 2492.93 1387.99 2496.53 1413.19 2496.53 c
+1465.75 2496.53 1529.83 2517.41 1598.23 2550.53 c
+1666.63 2582.93 1680.31 2596.61 1729.27 2622.53 c
+1776.07 2649.17 1837.99 2681.57 1817.11 2691.65 c
+1796.23 2701.73 1778.23 2684.45 1711.27 2644.85 c
+1644.31 2605.97 1596.07 2578.61 1534.15 2552.69 c
+1503.19 2539.73 1466.47 2524.61 1436.23 2522.45 c
+1407.43 2520.29 1369.27 2521.01 1348.39 2521.01 c
+1323.19 2521.01 1293.67 2530.37 1267.03 2540.45 c
+1267.03 2541.17 1308.79 2499.41 1308.79 2499.41 c
+f*
+0.6 0.4 0 rg
+1307.35 2500.13 m
+1346.95 2493.65 1387.99 2497.25 1413.19 2497.25 c
+1465.75 2497.25 1529.11 2518.13 1597.51 2550.53 c
+1665.91 2582.93 1678.87 2596.61 1727.11 2622.53 c
+1773.91 2648.45 1835.83 2680.85 1815.67 2690.93 c
+1794.79 2701.01 1777.51 2683.01 1710.55 2644.13 c
+1644.31 2605.25 1594.63 2577.17 1534.15 2551.97 c
+1502.47 2539.01 1466.47 2523.89 1436.23 2521.73 c
+1407.43 2519.57 1369.99 2520.29 1348.39 2520.29 c
+1323.19 2520.29 1294.39 2529.65 1268.47 2539.73 c
+1268.47 2540.45 1307.35 2500.13 1307.35 2500.13 c
+f*
+0.569 0.369 0 rg
+1306.63 2500.85 m
+1346.23 2494.37 1387.99 2497.97 1413.19 2497.97 c
+1465.75 2497.97 1528.39 2518.85 1596.79 2550.53 c
+1664.47 2582.93 1676.71 2596.61 1724.95 2622.53 c
+1771.75 2647.73 1834.39 2680.13 1814.23 2689.49 c
+1793.35 2699.57 1776.07 2681.57 1709.83 2643.41 c
+1643.59 2604.53 1593.19 2575.73 1533.43 2551.25 c
+1502.47 2538.29 1466.47 2523.89 1436.23 2521.01 c
+1407.43 2518.85 1369.99 2519.57 1348.39 2519.57 c
+1323.19 2519.57 1295.11 2528.93 1269.19 2539.01 c
+1269.19 2539.73 1306.63 2500.85 1306.63 2500.85 c
+f*
+0.541 0.341 0 rg
+1305.91 2501.57 m
+1346.23 2494.37 1387.99 2498.69 1413.91 2498.69 c
+1466.47 2498.69 1527.67 2519.57 1595.35 2551.25 c
+1663.75 2582.93 1675.27 2595.89 1723.51 2621.81 c
+1770.31 2647.73 1832.95 2679.41 1812.07 2688.77 c
+1791.91 2698.85 1775.35 2680.85 1709.11 2641.97 c
+1642.87 2603.81 1591.75 2574.29 1533.43 2549.81 c
+1501.75 2536.85 1466.47 2523.17 1436.23 2520.29 c
+1407.43 2518.13 1369.99 2518.85 1349.11 2518.85 c
+1323.91 2518.85 1295.83 2527.49 1269.91 2537.57 c
+1269.91 2538.29 1305.91 2501.57 1305.91 2501.57 c
+f*
+0.51 0.31 0 rg
+1304.47 2502.29 m
+1345.51 2495.09 1387.99 2499.41 1413.91 2499.41 c
+1466.47 2499.41 1526.95 2520.29 1594.63 2551.25 c
+1662.31 2582.93 1673.83 2595.89 1721.35 2621.81 c
+1768.15 2647.01 1831.51 2678.69 1810.63 2688.05 c
+1790.47 2698.13 1774.63 2679.41 1708.39 2641.25 c
+1642.15 2603.09 1590.31 2572.85 1532.71 2549.09 c
+1501.03 2536.13 1466.47 2522.45 1436.23 2519.57 c
+1407.43 2517.41 1369.99 2518.13 1349.11 2518.13 c
+1323.91 2518.13 1296.55 2526.77 1270.63 2536.85 c
+1270.63 2537.57 1304.47 2502.29 1304.47 2502.29 c
+f*
+0.49 0.29 0 rg
+1303.75 2502.29 m
+1344.79 2495.09 1387.99 2500.13 1413.91 2500.13 c
+1466.47 2500.13 1526.23 2520.29 1593.91 2551.97 c
+1661.59 2582.93 1671.67 2595.89 1719.91 2621.09 c
+1765.99 2646.29 1830.07 2677.25 1809.19 2687.33 c
+1789.03 2696.69 1773.91 2677.97 1707.67 2639.81 c
+1641.43 2602.37 1588.87 2572.13 1532.71 2548.37 c
+1500.31 2535.41 1466.47 2521.73 1436.23 2519.57 c
+1407.43 2516.69 1369.99 2517.41 1349.11 2517.41 c
+1324.63 2517.41 1297.27 2526.05 1271.35 2536.13 c
+1271.35 2536.85 1303.75 2502.29 1303.75 2502.29 c
+f*
+0.459 0.259 0 rg
+1303.03 2503.01 m
+1344.07 2495.81 1387.99 2500.85 1413.91 2500.85 c
+1466.47 2500.85 1525.51 2521.01 1593.19 2551.97 c
+1660.15 2582.93 1670.23 2595.89 1717.75 2621.09 c
+1763.83 2645.57 1827.91 2676.53 1807.75 2685.89 c
+1787.59 2695.97 1772.47 2676.53 1706.95 2639.09 c
+1641.43 2601.65 1587.43 2570.69 1531.99 2547.65 c
+1500.31 2534.69 1466.47 2521.73 1436.23 2518.85 c
+1407.43 2515.97 1370.71 2516.69 1349.11 2516.69 c
+1324.63 2516.69 1297.99 2525.33 1272.79 2535.41 c
+1272.79 2536.13 1303.03 2503.01 1303.03 2503.01 c
+f*
+0.431 0.227 0 rg
+1301.59 2503.73 m
+1343.35 2495.81 1387.99 2501.57 1414.63 2501.57 c
+1466.47 2501.57 1524.79 2521.73 1591.75 2552.69 c
+1659.43 2582.93 1668.07 2595.89 1716.31 2620.37 c
+1762.39 2645.57 1826.47 2675.81 1806.31 2685.17 c
+1786.15 2694.53 1771.75 2675.09 1706.23 2637.65 c
+1640.71 2600.93 1585.99 2569.25 1531.99 2546.93 c
+1499.59 2533.97 1466.47 2521.01 1436.23 2518.13 c
+1407.43 2515.25 1370.71 2515.97 1349.83 2515.97 c
+1325.35 2515.97 1298.71 2524.61 1273.51 2533.97 c
+1273.51 2534.69 1301.59 2503.73 1301.59 2503.73 c
+f*
+0.4 0.2 0 rg
+1300.87 2504.45 m
+1342.63 2496.53 1387.99 2502.29 1414.63 2502.29 c
+1466.47 2502.29 1524.07 2522.45 1591.03 2552.69 c
+1657.99 2582.93 1666.63 2595.89 1714.15 2620.37 c
+1760.23 2644.85 1825.03 2675.09 1804.87 2684.45 c
+1784.71 2693.81 1771.03 2673.65 1705.51 2636.93 c
+1639.99 2600.21 1584.55 2567.81 1531.27 2546.21 c
+1498.87 2533.25 1466.47 2520.29 1436.23 2517.41 c
+1407.43 2514.53 1370.71 2515.25 1349.83 2515.25 c
+1325.35 2515.25 1299.43 2523.89 1274.23 2533.25 c
+1274.23 2533.97 1300.87 2504.45 1300.87 2504.45 c
+f*
+1 g
+1650.07 1995.41 m
+1658.71 2023.49 1938.79 2089.73 1984.87 2068.13 c
+2030.23 2046.53 2247.67 1730.45 2208.79 1713.17 c
+2169.91 1696.61 2086.39 1818.29 1964.71 1874.45 c
+1843.03 1930.61 1641.43 1966.61 1650.07 1995.41 c
+f*
+0.98 g
+1658.31 1994.84 m
+1666.79 2022.45 1939.76 2085.6 1985.21 2064.81 c
+2029.98 2044.02 2242.9 1735.84 2204.66 1718.91 c
+2166.42 1702.66 2085.01 1822.37 1965.25 1877.64 c
+1845.49 1932.91 1649.84 1966.55 1658.31 1994.84 c
+f*
+0.961 g
+1666.56 1994.27 m
+1674.88 2021.42 1940.74 2081.48 1985.56 2061.5 c
+2029.73 2041.51 2238.13 1741.23 2200.53 1724.65 c
+2162.93 1708.71 2083.63 1826.44 1965.79 1880.83 c
+1847.96 1935.21 1658.24 1966.48 1666.56 1994.27 c
+f*
+0.941 g
+1674.8 1993.71 m
+1682.96 2020.38 1941.71 2077.35 1985.9 2058.18 c
+2029.48 2039 2233.37 1746.62 2196.4 1730.38 c
+2159.44 1714.76 2082.24 1830.52 1966.33 1884.02 c
+1850.42 1937.52 1666.65 1966.42 1674.8 1993.71 c
+f*
+0.922 g
+1683.05 1993.14 m
+1691.05 2019.34 1942.69 2073.22 1986.25 2054.86 c
+2029.23 2036.5 2228.6 1752.02 2192.27 1736.12 c
+2155.95 1720.81 2080.86 1834.6 1966.87 1887.21 c
+1852.88 1939.82 1675.05 1966.35 1683.05 1993.14 c
+f*
+0.902 g
+1691.3 1992.57 m
+1699.13 2018.31 1943.66 2069.1 1986.6 2051.54 c
+2028.98 2033.99 2223.83 1757.41 2188.14 1741.86 c
+2152.46 1726.86 2079.48 1838.67 1967.41 1890.4 c
+1855.35 1942.12 1683.46 1966.29 1691.3 1992.57 c
+f*
+0.882 g
+1699.54 1992 m
+1707.21 2017.27 1944.64 2064.97 1986.94 2048.22 c
+2028.74 2031.48 2219.06 1762.8 2184.02 1747.6 c
+2148.97 1732.9 2078.1 1842.75 1967.95 1893.59 c
+1857.81 1944.43 1691.87 1966.23 1699.54 1992 c
+f*
+0.863 g
+1707.79 1991.43 m
+1715.3 2016.23 1945.61 2060.84 1987.29 2044.91 c
+2028.49 2028.97 2214.29 1768.19 2179.89 1753.34 c
+2145.48 1738.95 2076.71 1846.83 1968.49 1896.78 c
+1860.27 1946.73 1700.27 1966.16 1707.79 1991.43 c
+f*
+0.843 g
+1716.03 1990.87 m
+1723.38 2015.2 1946.59 2056.71 1987.63 2041.59 c
+2028.24 2026.46 2209.53 1773.58 2175.76 1759.07 c
+2141.99 1745 2075.33 1850.91 1969.03 1899.97 c
+1862.73 1949.03 1708.68 1966.1 1716.03 1990.87 c
+f*
+0.82 g
+1724.28 1990.3 m
+1731.47 2014.16 1947.56 2052.59 1987.98 2038.27 c
+2027.99 2023.95 2204.76 1778.97 2171.63 1764.81 c
+2138.5 1751.05 2073.95 1854.98 1969.57 1903.16 c
+1865.2 1951.33 1717.08 1966.03 1724.28 1990.3 c
+f*
+0.8 g
+1732.52 1989.73 m
+1739.55 2013.12 1948.54 2048.46 1988.32 2034.95 c
+2027.74 2021.45 2199.99 1784.36 2167.5 1770.55 c
+2135.01 1757.1 2072.57 1859.06 1970.11 1906.35 c
+1867.66 1953.63 1725.49 1965.97 1732.52 1989.73 c
+f*
+0.78 g
+1740.76 1989.16 m
+1747.63 2012.09 1949.51 2044.33 1988.67 2031.64 c
+2027.49 2018.94 2195.22 1789.76 2163.37 1776.29 c
+2131.52 1763.15 2071.18 1863.14 1970.65 1909.54 c
+1870.12 1955.94 1733.9 1965.91 1740.76 1989.16 c
+f*
+0.761 g
+1749.01 1988.59 m
+1755.72 2011.05 1950.48 2040.21 1989.01 2028.32 c
+2027.24 2016.43 2190.45 1795.15 2159.24 1782.03 c
+2128.03 1769.2 2069.8 1867.21 1971.19 1912.73 c
+1872.59 1958.24 1742.3 1965.84 1749.01 1988.59 c
+f*
+0.741 g
+1757.25 1988.03 m
+1763.8 2010.02 1951.46 2036.08 1989.36 2025 c
+2026.99 2013.92 2185.69 1800.54 2155.11 1787.76 c
+2124.54 1775.25 2068.42 1871.29 1971.73 1915.92 c
+1875.05 1960.54 1750.71 1965.78 1757.25 1988.03 c
+f*
+0.722 g
+1765.5 1987.46 m
+1771.89 2008.98 1952.43 2031.95 1989.7 2021.69 c
+2026.74 2011.41 2180.92 1805.93 2150.98 1793.5 c
+2121.05 1781.3 2067.03 1875.37 1972.27 1919.11 c
+1877.51 1962.85 1759.11 1965.71 1765.5 1987.46 c
+f*
+0.702 g
+1773.74 1986.89 m
+1779.97 2007.94 1953.41 2027.83 1990.05 2018.37 c
+2026.49 2008.9 2176.15 1811.32 2146.86 1799.24 c
+2117.56 1787.34 2065.65 1879.45 1972.81 1922.3 c
+1879.97 1965.15 1767.52 1965.65 1773.74 1986.89 c
+f*
+0.682 g
+1781.99 1986.32 m
+1788.05 2006.91 1954.38 2023.7 1990.39 2015.05 c
+2026.25 2006.39 2171.38 1816.71 2142.73 1804.98 c
+2114.07 1793.39 2064.27 1883.52 1973.35 1925.49 c
+1882.44 1967.45 1775.93 1965.59 1781.99 1986.32 c
+f*
+0.659 g
+1790.23 1985.75 m
+1796.14 2005.87 1955.36 2019.57 1990.74 2011.73 c
+2026 2003.89 2166.61 1822.11 2138.6 1810.72 c
+2110.58 1799.44 2062.89 1887.6 1973.89 1928.68 c
+1884.9 1969.75 1784.33 1965.52 1790.23 1985.75 c
+f*
+0.639 g
+1798.48 1985.19 m
+1804.22 2004.83 1956.33 2015.44 1991.08 2008.41 c
+2025.75 2001.38 2161.85 1827.5 2134.47 1816.45 c
+2107.09 1805.49 2061.5 1891.68 1974.43 1931.87 c
+1887.36 1972.06 1792.74 1965.46 1798.48 1985.19 c
+f*
+0.62 g
+1806.73 1984.62 m
+1812.31 2003.8 1957.31 2011.32 1991.43 2005.1 c
+2025.5 1998.87 2157.08 1832.89 2130.34 1822.19 c
+2103.6 1811.54 2060.12 1895.75 1974.97 1935.06 c
+1889.83 1974.36 1801.14 1965.39 1806.73 1984.62 c
+f*
+0.6 g
+1814.97 1984.05 m
+1820.39 2002.76 1958.28 2007.19 1991.77 2001.78 c
+2025.25 1996.36 2152.31 1838.28 2126.21 1827.93 c
+2100.11 1817.59 2058.74 1899.83 1975.51 1938.25 c
+1892.29 1976.66 1809.55 1965.33 1814.97 1984.05 c
+f*
+1 g
+1297.27 1564.85 m
+1326.07 1563.41 1298.71 1402.13 1298.71 1235.81 c
+1298.71 1069.49 1321.03 1011.17 1300.15 990.291 c
+1279.27 969.411 1243.27 1044.29 1243.27 1210.61 c
+1243.27 1376.93 1268.47 1566.29 1297.27 1564.85 c
+f*
+0.98 g
+1296.98 1560.94 m
+1324.8 1559.33 1298.07 1400.42 1297.95 1236.75 c
+1297.83 1073.09 1319.82 1014.68 1299.59 994.376 c
+1279.38 974.097 1243.98 1048.21 1244.13 1211.9 c
+1244.25 1375.57 1269.15 1562.55 1296.98 1560.94 c
+f*
+0.961 g
+1296.68 1557.03 m
+1323.54 1555.24 1297.44 1398.72 1297.19 1237.7 c
+1296.94 1076.68 1318.61 1018.19 1299.03 998.462 c
+1279.5 978.784 1244.68 1052.13 1244.98 1213.2 c
+1245.23 1374.21 1269.83 1558.82 1296.68 1557.03 c
+f*
+0.941 g
+1296.39 1553.12 m
+1322.27 1551.16 1296.8 1397.01 1296.43 1238.65 c
+1296.06 1080.28 1317.4 1021.7 1298.47 1002.55 c
+1279.61 983.47 1245.39 1056.06 1245.84 1214.49 c
+1246.2 1372.85 1270.51 1555.08 1296.39 1553.12 c
+f*
+0.922 g
+1296.09 1549.21 m
+1321.01 1547.08 1296.16 1395.3 1295.67 1239.59 c
+1295.18 1083.88 1316.19 1025.21 1297.91 1006.63 c
+1279.73 988.157 1246.1 1059.98 1246.69 1215.79 c
+1247.18 1371.5 1271.18 1551.35 1296.09 1549.21 c
+f*
+0.902 g
+1295.8 1545.3 m
+1319.74 1542.99 1295.53 1393.59 1294.91 1240.53 c
+1294.3 1087.48 1314.97 1028.72 1297.34 1010.72 c
+1279.84 992.843 1246.81 1063.9 1247.55 1217.08 c
+1248.16 1370.14 1271.86 1547.62 1295.8 1545.3 c
+f*
+0.882 g
+1295.51 1541.39 m
+1318.47 1538.91 1294.89 1391.88 1294.15 1241.48 c
+1293.41 1091.07 1313.76 1032.23 1296.78 1014.8 c
+1279.95 997.53 1247.51 1067.82 1248.4 1218.37 c
+1249.14 1368.78 1272.54 1543.88 1295.51 1541.39 c
+f*
+0.863 g
+1295.21 1537.48 m
+1317.21 1534.83 1294.25 1390.18 1293.39 1242.43 c
+1292.53 1094.67 1312.55 1035.74 1296.22 1018.89 c
+1280.07 1002.22 1248.22 1071.74 1249.26 1219.67 c
+1250.12 1367.42 1273.22 1540.14 1295.21 1537.48 c
+f*
+0.843 g
+1294.92 1533.57 m
+1315.94 1530.74 1293.62 1388.47 1292.63 1243.37 c
+1291.65 1098.27 1311.34 1039.25 1295.66 1022.97 c
+1280.18 1006.9 1248.93 1075.67 1250.11 1220.96 c
+1251.09 1366.06 1273.9 1536.41 1294.92 1533.57 c
+f*
+0.82 g
+1294.62 1529.66 m
+1314.68 1526.66 1292.98 1386.76 1291.87 1244.32 c
+1290.76 1101.87 1310.13 1042.76 1295.1 1027.06 c
+1280.3 1011.59 1249.63 1079.59 1250.97 1222.26 c
+1252.07 1364.7 1274.58 1532.68 1294.62 1529.66 c
+f*
+0.8 g
+1294.33 1525.76 m
+1313.41 1522.58 1292.34 1385.05 1291.11 1245.26 c
+1289.88 1105.46 1308.92 1046.26 1294.54 1031.15 c
+1280.41 1016.28 1250.34 1083.51 1251.82 1223.55 c
+1253.05 1363.35 1275.25 1528.94 1294.33 1525.76 c
+f*
+0.78 g
+1294.04 1521.85 m
+1312.14 1518.49 1291.71 1383.35 1290.36 1246.2 c
+1289 1109.06 1307.71 1049.77 1293.98 1035.23 c
+1280.52 1020.96 1251.05 1087.43 1252.68 1224.84 c
+1254.03 1361.99 1275.93 1525.2 1294.04 1521.85 c
+f*
+0.761 g
+1293.74 1517.94 m
+1310.88 1514.41 1291.07 1381.64 1289.6 1247.15 c
+1288.11 1112.66 1306.5 1053.28 1293.42 1039.32 c
+1280.64 1025.65 1251.75 1091.35 1253.53 1226.14 c
+1255.01 1360.63 1276.61 1521.47 1293.74 1517.94 c
+f*
+0.741 g
+1293.45 1514.03 m
+1309.61 1510.32 1290.44 1379.93 1288.84 1248.1 c
+1287.23 1116.26 1305.29 1056.79 1292.86 1043.4 c
+1280.75 1030.33 1252.46 1095.28 1254.38 1227.43 c
+1255.98 1359.27 1277.29 1517.73 1293.45 1514.03 c
+f*
+0.722 g
+1293.15 1510.12 m
+1308.35 1506.24 1289.8 1378.22 1288.08 1249.04 c
+1286.35 1119.85 1304.08 1060.3 1292.3 1047.49 c
+1280.87 1035.02 1253.17 1099.2 1255.24 1228.73 c
+1256.96 1357.91 1277.97 1514 1293.15 1510.12 c
+f*
+0.702 g
+1292.86 1506.21 m
+1307.08 1502.16 1289.16 1376.52 1287.32 1249.99 c
+1285.47 1123.45 1302.86 1063.81 1291.73 1051.57 c
+1280.98 1039.71 1253.87 1103.12 1256.1 1230.02 c
+1257.94 1356.55 1278.65 1510.26 1292.86 1506.21 c
+f*
+0.682 g
+1292.57 1502.3 m
+1305.81 1498.07 1288.53 1374.81 1286.56 1250.93 c
+1284.58 1127.05 1301.65 1067.32 1291.17 1055.66 c
+1281.09 1044.39 1254.58 1107.04 1256.95 1231.31 c
+1258.92 1355.19 1279.33 1506.53 1292.57 1502.3 c
+f*
+0.659 g
+1292.27 1498.39 m
+1304.55 1493.99 1287.89 1373.1 1285.8 1251.88 c
+1283.7 1130.65 1300.44 1070.83 1290.61 1059.74 c
+1281.21 1049.08 1255.29 1110.96 1257.81 1232.61 c
+1259.9 1353.84 1280 1502.79 1292.27 1498.39 c
+f*
+0.639 g
+1291.98 1494.48 m
+1303.28 1489.91 1287.25 1371.4 1285.04 1252.82 c
+1282.82 1134.24 1299.23 1074.34 1290.05 1063.83 c
+1281.32 1053.77 1256 1114.89 1258.66 1233.9 c
+1260.87 1352.48 1280.68 1499.06 1291.98 1494.48 c
+f*
+0.62 g
+1291.68 1490.57 m
+1302.02 1485.82 1286.62 1369.69 1284.28 1253.77 c
+1281.93 1137.84 1298.02 1077.85 1289.49 1067.91 c
+1281.44 1058.45 1256.7 1118.81 1259.51 1235.2 c
+1261.85 1351.12 1281.36 1495.33 1291.68 1490.57 c
+f*
+0.6 g
+1291.39 1486.66 m
+1300.75 1481.74 1285.98 1367.98 1283.52 1254.71 c
+1281.05 1141.44 1296.81 1081.36 1288.93 1072 c
+1281.55 1063.14 1257.41 1122.73 1260.37 1236.49 c
+1262.83 1349.76 1282.04 1491.59 1291.39 1486.66 c
+f*
+1 g
+1360.27 2009.49 m
+1377.63 2007.57 1484.64 2031.67 1488.5 2022.03 c
+1492.35 2014.31 1421.98 1993.1 1398.84 1969 c
+1391.13 1961.29 1370.88 1942.97 1358.35 1944.9 c
+1348.71 1945.86 1342.92 1966.11 1328.46 1981.54 c
+1293.75 2016.24 1271.58 2013.35 1278.33 2026.85 c
+1284.11 2037.45 1330.39 2012.39 1360.27 2009.49 c
+f*
+0.988 g
+1360.72 2009.09 m
+1377.72 2007.21 1482.48 2030.8 1486.26 2021.37 c
+1490.03 2013.81 1421.13 1993.05 1398.48 1969.45 c
+1390.93 1961.9 1371.11 1943.97 1358.84 1945.86 c
+1349.4 1946.8 1343.74 1966.62 1329.58 1981.73 c
+1295.6 2015.7 1273.9 2012.87 1280.5 2026.09 c
+1286.16 2036.46 1331.47 2011.93 1360.72 2009.09 c
+f*
+0.976 g
+1361.17 2008.69 m
+1377.8 2006.85 1480.31 2029.94 1484.01 2020.7 c
+1487.7 2013.31 1420.29 1992.99 1398.12 1969.9 c
+1390.74 1962.52 1371.34 1944.97 1359.33 1946.82 c
+1350.1 1947.74 1344.55 1967.14 1330.7 1981.92 c
+1297.45 2015.16 1276.21 2012.39 1282.68 2025.32 c
+1288.22 2035.48 1332.55 2011.47 1361.17 2008.69 c
+f*
+0.965 g
+1361.63 2008.29 m
+1377.89 2006.49 1478.15 2029.07 1481.77 2020.04 c
+1485.38 2012.81 1419.44 1992.94 1397.76 1970.36 c
+1390.54 1963.13 1371.57 1945.97 1359.83 1947.78 c
+1350.79 1948.68 1345.37 1967.65 1331.82 1982.11 c
+1299.3 2014.62 1278.53 2011.91 1284.85 2024.56 c
+1290.27 2034.49 1333.63 2011.01 1361.63 2008.29 c
+f*
+0.953 g
+1362.08 2007.89 m
+1377.98 2006.13 1475.99 2028.21 1479.52 2019.38 c
+1483.05 2012.31 1418.6 1992.88 1397.4 1970.81 c
+1390.34 1963.75 1371.79 1946.97 1360.32 1948.74 c
+1351.49 1949.62 1346.19 1968.16 1332.94 1982.29 c
+1301.15 2014.08 1280.85 2011.43 1287.03 2023.79 c
+1292.32 2033.5 1334.71 2010.55 1362.08 2007.89 c
+f*
+0.941 g
+1362.53 2007.5 m
+1378.07 2005.77 1473.83 2027.34 1477.28 2018.72 c
+1480.73 2011.81 1417.75 1992.83 1397.04 1971.26 c
+1390.14 1964.36 1372.02 1947.97 1360.81 1949.7 c
+1352.18 1950.55 1347 1968.67 1334.06 1982.48 c
+1303 2013.54 1283.16 2010.95 1289.2 2023.03 c
+1294.38 2032.51 1335.79 2010.09 1362.53 2007.5 c
+f*
+0.925 g
+1362.98 2007.1 m
+1378.15 2005.42 1471.66 2026.48 1475.04 2018.05 c
+1478.4 2011.31 1416.91 1992.77 1396.69 1971.71 c
+1389.95 1964.98 1372.25 1948.97 1361.3 1950.65 c
+1352.88 1951.49 1347.82 1969.19 1335.18 1982.67 c
+1304.85 2012.99 1285.48 2010.47 1291.38 2022.27 c
+1296.43 2031.53 1336.87 2009.63 1362.98 2007.1 c
+f*
+0.914 g
+1363.43 2006.7 m
+1378.24 2005.06 1469.5 2025.61 1472.79 2017.39 c
+1476.07 2010.81 1416.06 1992.72 1396.33 1972.17 c
+1389.75 1965.59 1372.48 1949.97 1361.79 1951.61 c
+1353.57 1952.43 1348.64 1969.7 1336.3 1982.86 c
+1306.7 2012.45 1287.8 2009.99 1293.55 2021.5 c
+1298.48 2030.54 1337.95 2009.17 1363.43 2006.7 c
+f*
+0.902 g
+1363.89 2006.3 m
+1378.33 2004.7 1467.34 2024.75 1470.55 2016.73 c
+1473.75 2010.31 1415.22 1992.66 1395.97 1972.62 c
+1389.55 1966.21 1372.71 1950.97 1362.29 1952.57 c
+1354.27 1953.37 1349.45 1970.21 1337.42 1983.05 c
+1308.55 2011.91 1290.11 2009.51 1295.73 2020.74 c
+1300.53 2029.55 1339.03 2008.71 1363.89 2006.3 c
+f*
+0.89 g
+1364.34 2005.9 m
+1378.41 2004.34 1465.17 2023.88 1468.3 2016.06 c
+1471.43 2009.81 1414.37 1992.61 1395.61 1973.07 c
+1389.36 1966.82 1372.94 1951.97 1362.78 1953.53 c
+1354.96 1954.31 1350.27 1970.73 1338.54 1983.24 c
+1310.4 2011.37 1292.43 2009.03 1297.9 2019.97 c
+1302.59 2028.57 1340.11 2008.25 1364.34 2005.9 c
+f*
+0.875 g
+1364.79 2005.5 m
+1378.5 2003.98 1463.01 2023.02 1466.06 2015.4 c
+1469.1 2009.31 1413.53 1992.55 1395.25 1973.52 c
+1389.16 1967.43 1373.16 1952.97 1363.27 1954.49 c
+1355.65 1955.25 1351.09 1971.24 1339.66 1983.42 c
+1312.25 2010.83 1294.75 2008.55 1300.08 2019.21 c
+1304.64 2027.58 1341.19 2007.79 1364.79 2005.5 c
+f*
+0.863 g
+1365.24 2005.1 m
+1378.59 2003.62 1460.85 2022.15 1463.82 2014.74 c
+1466.78 2008.81 1412.68 1992.5 1394.89 1973.98 c
+1388.96 1968.05 1373.39 1953.96 1363.76 1955.45 c
+1356.35 1956.19 1351.9 1971.75 1340.79 1983.61 c
+1314.11 2010.29 1297.06 2008.07 1302.25 2018.45 c
+1306.69 2026.59 1342.27 2007.33 1365.24 2005.1 c
+f*
+0.851 g
+1365.69 2004.7 m
+1378.67 2003.26 1458.68 2021.28 1461.57 2014.07 c
+1464.45 2008.31 1411.83 1992.45 1394.53 1974.43 c
+1388.77 1968.66 1373.62 1954.96 1364.25 1956.41 c
+1357.04 1957.13 1352.72 1972.27 1341.91 1983.8 c
+1315.96 2009.75 1299.38 2007.59 1304.42 2017.68 c
+1308.75 2025.61 1343.35 2006.87 1365.69 2004.7 c
+f*
+0.839 g
+1366.15 2004.3 m
+1378.76 2002.9 1456.52 2020.42 1459.33 2013.41 c
+1462.13 2007.81 1410.99 1992.39 1394.17 1974.88 c
+1388.57 1969.28 1373.85 1955.96 1364.75 1957.37 c
+1357.74 1958.07 1353.53 1972.78 1343.03 1983.99 c
+1317.81 2009.21 1301.69 2007.11 1306.6 2016.92 c
+1310.8 2024.62 1344.43 2006.41 1366.15 2004.3 c
+f*
+0.827 g
+1366.6 2003.9 m
+1378.85 2002.54 1454.36 2019.55 1457.08 2012.75 c
+1459.8 2007.31 1410.14 1992.34 1393.81 1975.33 c
+1388.37 1969.89 1374.08 1956.96 1365.24 1958.33 c
+1358.43 1959.01 1354.35 1973.29 1344.15 1984.18 c
+1319.66 2008.67 1304.01 2006.63 1308.77 2016.15 c
+1312.85 2023.63 1345.51 2005.95 1366.6 2003.9 c
+f*
+0.816 g
+1367.05 2003.5 m
+1378.93 2002.19 1452.19 2018.69 1454.84 2012.08 c
+1457.47 2006.81 1409.3 1992.28 1393.46 1975.79 c
+1388.18 1970.51 1374.31 1957.96 1365.73 1959.28 c
+1359.13 1959.95 1355.17 1973.8 1345.27 1984.37 c
+1321.51 2008.12 1306.33 2006.15 1310.95 2015.39 c
+1314.9 2022.64 1346.59 2005.49 1367.05 2003.5 c
+f*
+0.8 g
+1367.5 2003.11 m
+1379.02 2001.83 1450.03 2017.82 1452.6 2011.42 c
+1455.15 2006.31 1408.45 1992.23 1393.1 1976.24 c
+1387.98 1971.12 1374.54 1958.96 1366.22 1960.24 c
+1359.82 1960.88 1355.98 1974.32 1346.39 1984.56 c
+1323.36 2007.58 1308.64 2005.67 1313.12 2014.63 c
+1316.96 2021.66 1347.67 2005.03 1367.5 2003.11 c
+f*
+0.788 g
+1367.95 2002.71 m
+1379.11 2001.47 1447.87 2016.96 1450.35 2010.76 c
+1452.83 2005.81 1407.61 1992.17 1392.74 1976.69 c
+1387.78 1971.74 1374.76 1959.96 1366.71 1961.2 c
+1360.52 1961.82 1356.8 1974.83 1347.51 1984.74 c
+1325.21 2007.04 1310.96 2005.19 1315.3 2013.86 c
+1319.01 2020.67 1348.75 2004.57 1367.95 2002.71 c
+f*
+0.776 g
+1368.41 2002.31 m
+1379.2 2001.11 1445.71 2016.09 1448.11 2010.1 c
+1450.5 2005.31 1406.76 1992.12 1392.38 1977.14 c
+1387.58 1972.35 1374.99 1960.96 1367.21 1962.16 c
+1361.21 1962.76 1357.62 1975.34 1348.63 1984.93 c
+1327.06 2006.5 1313.28 2004.71 1317.47 2013.1 c
+1321.06 2019.68 1349.83 2004.11 1368.41 2002.31 c
+f*
+0.765 g
+1368.86 2001.91 m
+1379.28 2000.75 1443.54 2015.23 1445.86 2009.43 c
+1448.18 2004.81 1405.92 1992.06 1392.02 1977.6 c
+1387.39 1972.97 1375.22 1961.96 1367.7 1963.12 c
+1361.91 1963.7 1358.43 1975.86 1349.75 1985.12 c
+1328.91 2005.96 1315.59 2004.23 1319.65 2012.33 c
+1323.12 2018.7 1350.91 2003.65 1368.86 2001.91 c
+f*
+0.749 g
+1369.31 2001.51 m
+1379.37 2000.39 1441.38 2014.36 1443.62 2008.77 c
+1445.85 2004.31 1405.07 1992.01 1391.66 1978.05 c
+1387.19 1973.58 1375.45 1962.96 1368.19 1964.08 c
+1362.6 1964.64 1359.25 1976.37 1350.87 1985.31 c
+1330.76 2005.42 1317.91 2003.75 1321.82 2011.57 c
+1325.17 2017.71 1351.99 2003.19 1369.31 2001.51 c
+f*
+0 g
+1715.33 3539.38 m
+1699.36 3518.07 1686.93 3369.83 1725.98 3352.96 c
+1765.04 3336.99 1930.15 3389.36 1924.83 3423.09 c
+1916.84 3477.24 1847.6 3534.05 1811.2 3550.92 c
+1781.02 3566.01 1731.31 3560.68 1715.33 3539.38 c
+f*
+0.02 g
+1717.43 3537.03 m
+1701.85 3516.24 1689.56 3371.78 1727.69 3355.3 c
+1765.82 3339.67 1925.73 3391.18 1920.52 3424.16 c
+1912.66 3477.02 1846.1 3532.15 1810.63 3548.5 c
+1781.07 3563.13 1733.02 3557.82 1717.43 3537.03 c
+f*
+0.039 g
+1719.53 3534.69 m
+1704.34 3514.42 1692.19 3373.74 1729.39 3357.64 c
+1766.6 3342.36 1921.32 3393.01 1916.21 3425.23 c
+1908.47 3476.8 1844.6 3530.26 1810.06 3546.08 c
+1781.12 3560.26 1734.74 3554.96 1719.53 3534.69 c
+f*
+0.059 g
+1721.64 3532.34 m
+1706.83 3512.59 1694.82 3375.69 1731.1 3359.98 c
+1767.38 3345.04 1916.9 3394.83 1911.9 3426.31 c
+1904.29 3476.58 1843.11 3528.36 1809.49 3543.66 c
+1781.17 3557.38 1736.45 3552.09 1721.64 3532.34 c
+f*
+0.078 g
+1723.74 3530 m
+1709.32 3510.76 1697.46 3377.65 1732.81 3362.33 c
+1768.16 3347.72 1912.49 3396.65 1907.59 3427.38 c
+1900.11 3476.36 1841.61 3526.47 1808.93 3541.24 c
+1781.22 3554.5 1738.17 3549.23 1723.74 3530 c
+f*
+0.098 g
+1725.84 3527.66 m
+1711.81 3508.93 1700.09 3379.6 1734.51 3364.67 c
+1768.95 3350.41 1908.07 3398.48 1903.29 3428.45 c
+1895.92 3476.14 1840.11 3524.57 1808.36 3538.82 c
+1781.27 3551.63 1739.88 3546.37 1725.84 3527.66 c
+f*
+0.118 g
+1727.94 3525.31 m
+1714.3 3507.11 1702.72 3381.56 1736.22 3367.01 c
+1769.73 3353.09 1903.66 3400.3 1898.98 3429.52 c
+1891.74 3475.92 1838.61 3522.68 1807.79 3536.4 c
+1781.32 3548.75 1741.59 3543.51 1727.94 3525.31 c
+f*
+0.137 g
+1730.04 3522.96 m
+1716.79 3505.28 1705.35 3383.51 1737.93 3369.35 c
+1770.51 3355.77 1899.24 3402.12 1894.67 3430.6 c
+1887.56 3475.7 1837.11 3520.78 1807.22 3533.98 c
+1781.37 3545.87 1743.31 3540.65 1730.04 3522.96 c
+f*
+0.157 g
+1732.15 3520.62 m
+1719.28 3503.45 1707.98 3385.47 1739.63 3371.69 c
+1771.29 3358.46 1894.83 3403.94 1890.36 3431.67 c
+1883.37 3475.48 1835.62 3518.89 1806.65 3531.56 c
+1781.42 3542.99 1745.02 3537.78 1732.15 3520.62 c
+f*
+0.18 g
+1734.25 3518.27 m
+1721.77 3501.63 1710.61 3387.42 1741.34 3374.03 c
+1772.07 3361.14 1890.41 3405.77 1886.05 3432.74 c
+1879.19 3475.26 1834.12 3516.99 1806.08 3529.14 c
+1781.47 3540.12 1746.74 3534.92 1734.25 3518.27 c
+f*
+0.2 g
+1736.35 3515.93 m
+1724.26 3499.8 1713.24 3389.38 1743.05 3376.38 c
+1772.85 3363.83 1886 3407.59 1881.74 3433.82 c
+1875.01 3475.05 1832.62 3515.1 1805.51 3526.72 c
+1781.52 3537.24 1748.45 3532.06 1736.35 3515.93 c
+f*
+0.22 g
+1738.45 3513.58 m
+1726.74 3497.97 1715.88 3391.33 1744.75 3378.72 c
+1773.63 3366.51 1881.58 3409.41 1877.43 3434.89 c
+1870.82 3474.83 1831.12 3513.2 1804.95 3524.31 c
+1781.57 3534.36 1750.16 3529.2 1738.45 3513.58 c
+f*
+0.239 g
+1740.55 3511.24 m
+1729.23 3496.15 1718.51 3393.28 1746.46 3381.06 c
+1774.41 3369.19 1877.16 3411.24 1873.12 3435.96 c
+1866.64 3474.61 1829.62 3511.3 1804.38 3521.89 c
+1781.62 3531.49 1751.88 3526.34 1740.55 3511.24 c
+f*
+0.259 g
+1742.66 3508.89 m
+1731.72 3494.32 1721.14 3395.24 1748.16 3383.4 c
+1775.19 3371.88 1872.75 3413.06 1868.81 3437.03 c
+1862.45 3474.39 1828.13 3509.41 1803.81 3519.47 c
+1781.67 3528.61 1753.59 3523.47 1742.66 3508.89 c
+f*
+0.278 g
+1744.76 3506.55 m
+1734.21 3492.49 1723.77 3397.19 1749.87 3385.74 c
+1775.97 3374.56 1868.33 3414.88 1864.5 3438.11 c
+1858.27 3474.17 1826.63 3507.51 1803.24 3517.05 c
+1781.72 3525.73 1755.31 3520.61 1744.76 3506.55 c
+f*
+0.298 g
+1746.86 3504.2 m
+1736.7 3490.67 1726.4 3399.15 1751.58 3388.08 c
+1776.75 3377.24 1863.92 3416.71 1860.2 3439.18 c
+1854.09 3473.95 1825.13 3505.62 1802.67 3514.63 c
+1781.77 3522.85 1757.02 3517.75 1746.86 3504.2 c
+f*
+0.318 g
+1748.96 3501.86 m
+1739.19 3488.84 1729.03 3401.1 1753.28 3390.42 c
+1777.54 3379.93 1859.5 3418.53 1855.89 3440.25 c
+1849.9 3473.73 1823.63 3503.72 1802.1 3512.21 c
+1781.82 3519.98 1758.73 3514.89 1748.96 3501.86 c
+f*
+0.341 g
+1751.06 3499.51 m
+1741.68 3487.01 1731.67 3403.06 1754.99 3392.77 c
+1778.32 3382.61 1855.09 3420.35 1851.58 3441.32 c
+1845.72 3473.51 1822.13 3501.83 1801.54 3509.79 c
+1781.87 3517.1 1760.45 3512.03 1751.06 3499.51 c
+f*
+0.361 g
+1753.17 3497.17 m
+1744.17 3485.18 1734.3 3405.01 1756.7 3395.11 c
+1779.1 3385.29 1850.67 3422.17 1847.27 3442.4 c
+1841.54 3473.29 1820.64 3499.93 1800.97 3507.37 c
+1781.92 3514.22 1762.16 3509.16 1753.17 3497.17 c
+f*
+0.38 g
+1755.27 3494.82 m
+1746.66 3483.36 1736.93 3406.97 1758.4 3397.45 c
+1779.88 3387.98 1846.26 3424 1842.96 3443.47 c
+1837.35 3473.07 1819.14 3498.04 1800.4 3504.95 c
+1781.97 3511.35 1763.88 3506.3 1755.27 3494.82 c
+f*
+0.4 g
+1757.37 3492.48 m
+1749.15 3481.53 1739.56 3408.92 1760.11 3399.79 c
+1780.66 3390.66 1841.84 3425.82 1838.65 3444.54 c
+1833.17 3472.85 1817.64 3496.14 1799.83 3502.53 c
+1782.02 3508.47 1765.59 3503.44 1757.37 3492.48 c
+f*
+0 g
+1987.45 2605.89 m
+1980.07 2596.87 1993.19 2522.24 2041.57 2473.04 c
+2089.96 2424.66 2119.48 2424.66 2139.16 2445.98 c
+2176.88 2486.16 2146.54 2523.89 2123.58 2550.13 c
+2100.62 2576.37 2071.1 2567.35 2044.03 2593.59 c
+2016.97 2619.83 1998.11 2618.19 1987.45 2605.89 c
+f*
+0.02 g
+1988.15 2605.22 m
+1980.83 2596.27 1993.85 2522.22 2041.85 2473.4 c
+2089.87 2425.4 2119.16 2425.4 2138.68 2446.55 c
+2176.11 2486.42 2146.01 2523.86 2123.23 2549.89 c
+2100.44 2575.93 2071.15 2566.98 2044.29 2593.02 c
+2017.44 2619.05 1998.73 2617.43 1988.15 2605.22 c
+f*
+0.039 g
+1988.86 2604.55 m
+1981.59 2595.67 1994.51 2522.2 2042.14 2473.77 c
+2089.77 2426.14 2118.83 2426.14 2138.21 2447.13 c
+2175.34 2486.68 2145.47 2523.83 2122.87 2549.66 c
+2100.27 2575.49 2071.21 2566.61 2044.56 2592.44 c
+2017.92 2618.28 1999.35 2616.66 1988.86 2604.55 c
+f*
+0.059 g
+1989.56 2603.88 m
+1982.35 2595.07 1995.17 2522.18 2042.42 2474.13 c
+2089.68 2426.88 2118.51 2426.88 2137.73 2447.7 c
+2174.57 2486.94 2144.94 2523.79 2122.52 2549.42 c
+2100.09 2575.05 2071.26 2566.24 2044.82 2591.87 c
+2018.39 2617.5 1999.97 2615.9 1989.56 2603.88 c
+f*
+0.078 g
+1990.26 2603.21 m
+1983.11 2594.47 1995.82 2522.16 2042.7 2474.49 c
+2089.59 2427.62 2118.19 2427.62 2137.26 2448.27 c
+2173.81 2487.21 2144.41 2523.76 2122.16 2549.19 c
+2099.92 2574.61 2071.31 2565.87 2045.08 2591.3 c
+2018.87 2616.72 2000.59 2615.13 1990.26 2603.21 c
+f*
+0.098 g
+1990.96 2602.54 m
+1983.87 2593.88 1996.48 2522.15 2042.98 2474.86 c
+2089.49 2428.36 2117.87 2428.36 2136.78 2448.85 c
+2173.04 2487.47 2143.88 2523.73 2121.81 2548.95 c
+2099.74 2574.17 2071.37 2565.5 2045.35 2590.72 c
+2019.34 2615.94 2001.21 2614.37 1990.96 2602.54 c
+f*
+0.118 g
+1991.67 2601.88 m
+1984.63 2593.28 1997.14 2522.13 2043.27 2475.22 c
+2089.4 2429.09 2117.55 2429.09 2136.31 2449.42 c
+2172.27 2487.73 2143.34 2523.7 2121.45 2548.71 c
+2099.56 2573.73 2071.42 2565.13 2045.61 2590.15 c
+2019.81 2615.17 2001.83 2613.6 1991.67 2601.88 c
+f*
+0.137 g
+1992.37 2601.21 m
+1985.39 2592.68 1997.8 2522.11 2043.55 2475.58 c
+2089.31 2429.83 2117.22 2429.83 2135.83 2449.99 c
+2171.5 2487.99 2142.81 2523.67 2121.1 2548.48 c
+2099.39 2573.29 2071.47 2564.76 2045.87 2589.58 c
+2020.29 2614.39 2002.45 2612.84 1992.37 2601.21 c
+f*
+0.157 g
+1993.07 2600.54 m
+1986.15 2592.08 1998.46 2522.09 2043.83 2475.94 c
+2089.21 2430.57 2116.9 2430.57 2135.36 2450.57 c
+2170.73 2488.25 2142.28 2523.63 2120.74 2548.24 c
+2099.21 2572.85 2071.52 2564.39 2046.14 2589 c
+2020.76 2613.61 2003.07 2612.07 1993.07 2600.54 c
+f*
+0.18 g
+1993.78 2599.87 m
+1986.91 2591.48 1999.12 2522.07 2044.12 2476.31 c
+2089.12 2431.31 2116.58 2431.31 2134.88 2451.14 c
+2169.96 2488.51 2141.74 2523.6 2120.39 2548.01 c
+2099.04 2572.41 2071.58 2564.02 2046.4 2588.43 c
+2021.24 2612.83 2003.69 2611.31 1993.78 2599.87 c
+f*
+0.2 g
+1994.48 2599.2 m
+1987.68 2590.88 1999.78 2522.05 2044.4 2476.67 c
+2089.02 2432.05 2116.25 2432.05 2134.4 2451.72 c
+2169.19 2488.78 2141.21 2523.57 2120.04 2547.77 c
+2098.86 2571.98 2071.63 2563.66 2046.67 2587.86 c
+2021.71 2612.06 2004.31 2610.55 1994.48 2599.2 c
+f*
+0.22 g
+1995.18 2598.53 m
+1988.44 2590.28 2000.43 2522.03 2044.68 2477.03 c
+2088.93 2432.79 2115.93 2432.79 2133.93 2452.29 c
+2168.43 2489.04 2140.68 2523.54 2119.68 2547.53 c
+2098.68 2571.54 2071.68 2563.29 2046.93 2587.28 c
+2022.18 2611.28 2004.93 2609.78 1995.18 2598.53 c
+f*
+0.239 g
+1995.89 2597.86 m
+1989.2 2589.68 2001.09 2522.01 2044.97 2477.4 c
+2088.84 2433.53 2115.61 2433.53 2133.45 2452.86 c
+2167.66 2489.3 2140.14 2523.51 2119.33 2547.3 c
+2098.51 2571.1 2071.74 2562.92 2047.19 2586.71 c
+2022.66 2610.5 2005.55 2609.02 1995.89 2597.86 c
+f*
+0.259 g
+1996.59 2597.19 m
+1989.96 2589.08 2001.75 2521.99 2045.25 2477.76 c
+2088.74 2434.27 2115.29 2434.27 2132.98 2453.44 c
+2166.89 2489.56 2139.61 2523.47 2118.97 2547.06 c
+2098.33 2570.66 2071.79 2562.55 2047.46 2586.13 c
+2023.13 2609.72 2006.17 2608.25 1996.59 2597.19 c
+f*
+0.278 g
+1997.29 2596.52 m
+1990.72 2588.48 2002.41 2521.97 2045.53 2478.12 c
+2088.65 2435.01 2114.96 2435.01 2132.5 2454.01 c
+2166.12 2489.82 2139.08 2523.44 2118.62 2546.83 c
+2098.16 2570.22 2071.84 2562.18 2047.72 2585.56 c
+2023.61 2608.95 2006.79 2607.49 1997.29 2596.52 c
+f*
+0.298 g
+1997.99 2595.86 m
+1991.48 2587.89 2003.07 2521.95 2045.82 2478.48 c
+2088.56 2435.74 2114.64 2435.74 2132.03 2454.58 c
+2165.35 2490.08 2138.54 2523.41 2118.26 2546.59 c
+2097.98 2569.78 2071.89 2561.81 2047.98 2584.99 c
+2024.08 2608.17 2007.41 2606.72 1997.99 2595.86 c
+f*
+0.318 g
+1998.7 2595.19 m
+1992.24 2587.29 2003.73 2521.94 2046.1 2478.85 c
+2088.46 2436.48 2114.32 2436.48 2131.55 2455.16 c
+2164.58 2490.34 2138.01 2523.38 2117.91 2546.35 c
+2097.8 2569.34 2071.95 2561.44 2048.25 2584.41 c
+2024.55 2607.39 2008.03 2605.96 1998.7 2595.19 c
+f*
+0.341 g
+1999.4 2594.52 m
+1993 2586.69 2004.38 2521.92 2046.38 2479.21 c
+2088.37 2437.22 2114 2437.22 2131.08 2455.73 c
+2163.82 2490.61 2137.48 2523.35 2117.55 2546.12 c
+2097.63 2568.9 2072 2561.07 2048.51 2583.84 c
+2025.03 2606.61 2008.65 2605.19 1999.4 2594.52 c
+f*
+0.361 g
+2000.1 2593.85 m
+1993.76 2586.09 2005.04 2521.9 2046.66 2479.57 c
+2088.28 2437.96 2113.67 2437.96 2130.6 2456.3 c
+2163.05 2490.87 2136.95 2523.31 2117.2 2545.88 c
+2097.45 2568.46 2072.05 2560.7 2048.77 2583.27 c
+2025.5 2605.83 2009.27 2604.43 2000.1 2593.85 c
+f*
+0.38 g
+2000.81 2593.18 m
+1994.52 2585.49 2005.7 2521.88 2046.95 2479.94 c
+2088.18 2438.7 2113.35 2438.7 2130.13 2456.88 c
+2162.28 2491.13 2136.41 2523.28 2116.84 2545.65 c
+2097.28 2568.02 2072.11 2560.33 2049.04 2582.69 c
+2025.98 2605.06 2009.89 2603.66 2000.81 2593.18 c
+f*
+0.4 g
+2001.51 2592.51 m
+1995.28 2584.89 2006.36 2521.86 2047.23 2480.3 c
+2088.09 2439.44 2113.03 2439.44 2129.65 2457.45 c
+2161.51 2491.39 2135.88 2523.25 2116.49 2545.41 c
+2097.1 2567.58 2072.16 2559.96 2049.3 2582.12 c
+2026.45 2604.28 2010.51 2602.9 2001.51 2592.51 c
+f*
+0 g
+1220.95 3217.25 m
+1213.75 3195.65 1308.07 3166.13 1328.95 3147.41 c
+1357.03 3122.21 1359.19 3072.53 1392.31 3092.69 c
+1413.91 3105.65 1397.35 3134.45 1357.75 3178.37 c
+1299.43 3243.17 1227.43 3235.25 1220.95 3217.25 c
+f*
+0.02 g
+1225.83 3215.28 m
+1218.68 3194.55 1308.59 3166.28 1329.2 3147.88 c
+1356.65 3123.31 1358.81 3075.39 1390.66 3094.75 c
+1411.6 3107.29 1395.15 3135.47 1357.24 3177.55 c
+1301.48 3239.58 1232.32 3232.59 1225.83 3215.28 c
+f*
+0.039 g
+1230.72 3213.32 m
+1223.61 3193.45 1309.11 3166.44 1329.45 3148.34 c
+1356.27 3124.41 1358.43 3078.25 1389 3096.8 c
+1409.3 3108.93 1392.96 3136.48 1356.73 3176.73 c
+1303.54 3235.98 1237.2 3229.94 1230.72 3213.32 c
+f*
+0.059 g
+1235.6 3211.35 m
+1228.55 3192.35 1309.63 3166.59 1329.7 3148.8 c
+1355.89 3125.51 1358.05 3081.11 1387.35 3098.86 c
+1406.99 3110.57 1390.76 3137.5 1356.23 3175.92 c
+1305.59 3232.39 1242.09 3227.28 1235.6 3211.35 c
+f*
+0.078 g
+1240.49 3209.38 m
+1233.48 3191.25 1310.15 3166.75 1329.95 3149.27 c
+1355.52 3126.61 1357.67 3083.96 1385.7 3100.92 c
+1404.68 3112.21 1388.57 3138.52 1355.72 3175.1 c
+1307.65 3228.8 1246.98 3224.63 1240.49 3209.38 c
+f*
+0.098 g
+1245.37 3207.42 m
+1238.41 3190.15 1310.67 3166.9 1330.2 3149.74 c
+1355.14 3127.71 1357.3 3086.82 1384.05 3102.98 c
+1402.38 3113.85 1386.37 3139.53 1355.21 3174.28 c
+1309.7 3225.2 1251.86 3221.97 1245.37 3207.42 c
+f*
+0.118 g
+1250.25 3205.45 m
+1243.34 3189.05 1311.19 3167.06 1330.45 3150.2 c
+1354.76 3128.8 1356.92 3089.68 1382.39 3105.03 c
+1400.07 3115.49 1384.18 3140.55 1354.7 3173.46 c
+1311.76 3221.61 1256.75 3219.31 1250.25 3205.45 c
+f*
+0.137 g
+1255.14 3203.48 m
+1248.27 3187.95 1311.71 3167.21 1330.7 3150.66 c
+1354.38 3129.9 1356.54 3092.54 1380.74 3107.09 c
+1397.76 3117.13 1381.98 3141.57 1354.19 3172.64 c
+1313.81 3218.02 1261.64 3216.66 1255.14 3203.48 c
+f*
+0.157 g
+1260.02 3201.51 m
+1253.21 3186.85 1312.23 3167.37 1330.95 3151.13 c
+1354 3131 1356.16 3095.4 1379.09 3109.15 c
+1395.45 3118.77 1379.79 3142.59 1353.69 3171.83 c
+1315.87 3214.42 1266.52 3214 1260.02 3201.51 c
+f*
+0.18 g
+1264.91 3199.55 m
+1258.14 3185.75 1312.75 3167.52 1331.2 3151.59 c
+1353.62 3132.1 1355.78 3098.26 1377.43 3111.2 c
+1393.15 3120.41 1377.59 3143.6 1353.18 3171.01 c
+1317.92 3210.83 1271.41 3211.35 1264.91 3199.55 c
+f*
+0.2 g
+1269.79 3197.58 m
+1263.07 3184.66 1313.27 3167.68 1331.46 3152.06 c
+1353.24 3133.2 1355.4 3101.12 1375.78 3113.26 c
+1390.84 3122.04 1375.39 3144.62 1352.67 3170.19 c
+1319.97 3207.24 1276.3 3208.69 1269.79 3197.58 c
+f*
+0.22 g
+1274.67 3195.61 m
+1268 3183.56 1313.79 3167.83 1331.71 3152.53 c
+1352.87 3134.3 1355.02 3103.97 1374.13 3115.32 c
+1388.53 3123.68 1373.2 3145.64 1352.16 3169.37 c
+1322.03 3203.64 1281.18 3206.03 1274.67 3195.61 c
+f*
+0.239 g
+1279.56 3193.65 m
+1272.93 3182.46 1314.31 3167.98 1331.96 3152.99 c
+1352.49 3135.4 1354.64 3106.83 1372.47 3117.37 c
+1386.23 3125.32 1371 3146.65 1351.65 3168.55 c
+1324.08 3200.05 1286.07 3203.38 1279.56 3193.65 c
+f*
+0.259 g
+1284.44 3191.68 m
+1277.87 3181.36 1314.83 3168.14 1332.21 3153.45 c
+1352.11 3136.5 1354.26 3109.69 1370.82 3119.43 c
+1383.92 3126.96 1368.81 3147.67 1351.15 3167.74 c
+1326.14 3196.45 1290.95 3200.72 1284.44 3191.68 c
+f*
+0.278 g
+1289.33 3189.71 m
+1282.8 3180.26 1315.35 3168.29 1332.46 3153.92 c
+1351.73 3137.6 1353.88 3112.55 1369.17 3121.49 c
+1381.61 3128.6 1366.61 3148.69 1350.64 3166.92 c
+1328.19 3192.86 1295.84 3198.07 1289.33 3189.71 c
+f*
+0.298 g
+1294.21 3187.74 m
+1287.73 3179.16 1315.87 3168.45 1332.71 3154.38 c
+1351.35 3138.7 1353.5 3115.41 1367.51 3123.54 c
+1379.3 3130.24 1364.42 3149.71 1350.13 3166.1 c
+1330.25 3189.27 1300.73 3195.41 1294.21 3187.74 c
+f*
+0.318 g
+1299.09 3185.78 m
+1292.66 3178.06 1316.39 3168.6 1332.96 3154.85 c
+1350.97 3139.79 1353.13 3118.27 1365.86 3125.6 c
+1377 3131.88 1362.22 3150.72 1349.62 3165.28 c
+1332.3 3185.67 1305.61 3192.75 1299.09 3185.78 c
+f*
+0.341 g
+1303.98 3183.81 m
+1297.59 3176.96 1316.91 3168.76 1333.21 3155.31 c
+1350.6 3140.89 1352.75 3121.12 1364.21 3127.66 c
+1374.69 3133.52 1360.03 3151.74 1349.11 3164.46 c
+1334.36 3182.08 1310.5 3190.1 1303.98 3183.81 c
+f*
+0.361 g
+1308.86 3181.84 m
+1302.53 3175.86 1317.43 3168.91 1333.46 3155.78 c
+1350.22 3141.99 1352.37 3123.98 1362.56 3129.72 c
+1372.38 3135.16 1357.83 3152.76 1348.61 3163.65 c
+1336.41 3178.49 1315.39 3187.44 1308.86 3181.84 c
+f*
+0.38 g
+1313.75 3179.88 m
+1307.46 3174.76 1317.95 3169.07 1333.71 3156.24 c
+1349.84 3143.09 1351.99 3126.84 1360.9 3131.77 c
+1370.08 3136.8 1355.64 3153.77 1348.1 3162.83 c
+1338.47 3174.89 1320.27 3184.79 1313.75 3179.88 c
+f*
+0.4 g
+1318.63 3177.91 m
+1312.39 3173.66 1318.47 3169.22 1333.96 3156.71 c
+1349.46 3144.19 1351.61 3129.7 1359.25 3133.83 c
+1367.77 3138.44 1353.44 3154.79 1347.59 3162.01 c
+1340.52 3171.3 1325.16 3182.13 1318.63 3177.91 c
+f*
+0 g
+1720.63 3225.17 m
+1719.91 3214.37 1750.15 3207.89 1769.59 3200.69 c
+1789.03 3194.21 1827.19 3168.29 1845.19 3148.13 c
+1863.19 3128.69 1902.07 3071.09 1910.71 3086.21 c
+1919.35 3099.89 1890.55 3139.49 1882.63 3156.05 c
+1874.71 3172.61 1850.23 3208.61 1811.35 3220.85 c
+1777.51 3230.93 1721.35 3233.81 1720.63 3225.17 c
+f*
+0.024 g
+1723.72 3224.4 m
+1723 3213.9 1752.4 3207.56 1771.3 3200.53 c
+1790.2 3194.2 1827.27 3168.92 1844.75 3149.31 c
+1862.22 3130.38 1900.1 3074.38 1908.51 3089.04 c
+1916.89 3102.32 1889.14 3140.77 1881.11 3156.99 c
+1873.11 3173.21 1849.37 3207.9 1811.6 3220 c
+1778.79 3229.96 1724.43 3232.81 1723.72 3224.4 c
+f*
+0.047 g
+1726.81 3223.64 m
+1726.1 3213.43 1754.66 3207.22 1773.01 3200.36 c
+1791.37 3194.19 1827.36 3169.55 1844.32 3150.48 c
+1861.24 3132.06 1898.13 3077.66 1906.3 3091.87 c
+1914.44 3104.74 1887.74 3142.06 1879.6 3157.94 c
+1871.52 3173.81 1848.5 3207.19 1811.84 3219.15 c
+1780.06 3228.99 1727.51 3231.8 1726.81 3223.64 c
+f*
+0.075 g
+1729.9 3222.87 m
+1729.19 3212.96 1756.91 3206.89 1774.72 3200.2 c
+1792.54 3194.18 1827.44 3170.18 1843.88 3151.66 c
+1860.27 3133.75 1896.16 3080.95 1904.1 3094.69 c
+1911.98 3107.17 1886.33 3143.34 1878.08 3158.88 c
+1869.92 3174.41 1847.64 3206.47 1812.09 3218.3 c
+1781.34 3228.02 1730.59 3230.79 1729.9 3222.87 c
+f*
+0.098 g
+1732.99 3222.1 m
+1732.29 3212.49 1759.17 3206.56 1776.43 3200.04 c
+1793.7 3194.16 1827.53 3170.82 1843.44 3152.84 c
+1859.29 3135.44 1894.19 3084.24 1901.89 3097.52 c
+1909.53 3109.59 1884.93 3144.63 1876.56 3159.82 c
+1868.33 3175.01 1846.78 3205.76 1812.33 3217.45 c
+1782.62 3227.04 1733.67 3229.79 1732.99 3222.1 c
+f*
+0.122 g
+1736.07 3221.33 m
+1735.38 3212.02 1761.43 3206.22 1778.14 3199.88 c
+1794.87 3194.15 1827.61 3171.45 1843.01 3154.01 c
+1858.32 3137.12 1892.22 3087.52 1899.69 3100.35 c
+1907.07 3112.02 1883.52 3145.91 1875.05 3160.77 c
+1866.73 3175.61 1845.91 3205.05 1812.58 3216.6 c
+1783.89 3226.07 1736.75 3228.79 1736.07 3221.33 c
+f*
+0.149 g
+1739.16 3220.57 m
+1738.47 3211.55 1763.68 3205.89 1779.86 3199.71 c
+1796.04 3194.14 1827.69 3172.08 1842.57 3155.19 c
+1857.35 3138.81 1890.25 3090.81 1897.48 3103.18 c
+1904.61 3114.45 1882.12 3147.2 1873.53 3161.71 c
+1865.13 3176.22 1845.05 3204.34 1812.82 3215.75 c
+1785.17 3225.1 1739.84 3227.78 1739.16 3220.57 c
+f*
+0.173 g
+1742.25 3219.8 m
+1741.57 3211.08 1765.93 3205.56 1781.57 3199.55 c
+1797.21 3194.13 1827.78 3172.71 1842.13 3156.37 c
+1856.37 3140.5 1888.28 3094.1 1895.28 3106.01 c
+1902.16 3116.87 1880.71 3148.48 1872.01 3162.65 c
+1863.54 3176.82 1844.19 3203.62 1813.07 3214.9 c
+1786.45 3224.13 1742.92 3226.78 1742.25 3219.8 c
+f*
+0.2 g
+1745.34 3219.03 m
+1744.66 3210.61 1768.19 3205.22 1783.28 3199.39 c
+1798.38 3194.12 1827.86 3173.34 1841.69 3157.54 c
+1855.4 3142.18 1886.31 3097.38 1893.07 3108.83 c
+1899.7 3119.3 1879.31 3149.77 1870.5 3163.6 c
+1861.94 3177.42 1843.32 3202.91 1813.31 3214.05 c
+1787.72 3223.16 1746 3225.77 1745.34 3219.03 c
+f*
+0.224 g
+1748.43 3218.27 m
+1747.76 3210.14 1770.44 3204.89 1784.99 3199.23 c
+1799.55 3194.11 1827.95 3173.97 1841.26 3158.72 c
+1854.42 3143.87 1884.34 3100.67 1890.87 3111.66 c
+1897.25 3121.72 1877.9 3151.05 1868.98 3164.54 c
+1860.35 3178.02 1842.46 3202.2 1813.56 3213.2 c
+1789 3222.19 1749.08 3224.77 1748.43 3218.27 c
+f*
+0.247 g
+1751.52 3217.5 m
+1750.85 3209.67 1772.7 3204.56 1786.7 3199.06 c
+1800.72 3194.09 1828.03 3174.61 1840.82 3159.9 c
+1853.45 3145.55 1882.37 3103.96 1888.67 3114.49 c
+1894.79 3124.15 1876.5 3152.34 1867.46 3165.49 c
+1858.75 3178.62 1841.6 3201.48 1813.8 3212.35 c
+1790.27 3221.21 1752.16 3223.76 1751.52 3217.5 c
+f*
+0.275 g
+1754.61 3216.73 m
+1753.94 3209.21 1774.95 3204.22 1788.41 3198.9 c
+1801.88 3194.08 1828.11 3175.24 1840.38 3161.07 c
+1852.48 3147.24 1880.4 3107.24 1886.46 3117.32 c
+1892.33 3126.58 1875.09 3153.62 1865.95 3166.43 c
+1857.15 3179.22 1840.73 3200.77 1814.05 3211.5 c
+1791.55 3220.24 1755.24 3222.76 1754.61 3216.73 c
+f*
+0.298 g
+1757.7 3215.97 m
+1757.04 3208.74 1777.21 3203.89 1790.12 3198.74 c
+1803.05 3194.07 1828.2 3175.87 1839.95 3162.25 c
+1851.5 3148.93 1878.43 3110.53 1884.26 3120.15 c
+1889.88 3129 1873.69 3154.9 1864.43 3167.37 c
+1855.56 3179.82 1839.87 3200.06 1814.3 3210.65 c
+1792.83 3219.27 1758.32 3221.75 1757.7 3215.97 c
+f*
+0.325 g
+1760.79 3215.2 m
+1760.13 3208.27 1779.47 3203.55 1791.83 3198.58 c
+1804.22 3194.06 1828.28 3176.5 1839.51 3163.42 c
+1850.53 3150.61 1876.46 3113.81 1882.05 3122.97 c
+1887.42 3131.43 1872.29 3156.19 1862.92 3168.32 c
+1853.96 3180.42 1839 3199.35 1814.54 3209.8 c
+1794.1 3218.3 1761.4 3220.74 1760.79 3215.2 c
+f*
+0.349 g
+1763.88 3214.43 m
+1763.23 3207.8 1781.72 3203.22 1793.54 3198.41 c
+1805.39 3194.05 1828.37 3177.13 1839.07 3164.6 c
+1849.55 3152.3 1874.49 3117.1 1879.85 3125.8 c
+1884.97 3133.85 1870.88 3157.47 1861.4 3169.26 c
+1852.37 3181.02 1838.14 3198.63 1814.79 3208.95 c
+1795.38 3217.33 1764.48 3219.74 1763.88 3214.43 c
+f*
+0.373 g
+1766.97 3213.67 m
+1766.32 3207.33 1783.97 3202.89 1795.25 3198.25 c
+1806.56 3194.04 1828.45 3177.76 1838.63 3165.78 c
+1848.58 3153.99 1872.52 3120.39 1877.64 3128.63 c
+1882.51 3136.28 1869.47 3158.76 1859.88 3170.2 c
+1850.77 3181.63 1837.28 3197.92 1815.03 3208.1 c
+1796.66 3216.36 1767.57 3218.74 1766.97 3213.67 c
+f*
+0.4 g
+1770.05 3212.9 m
+1769.41 3206.86 1786.23 3202.55 1796.97 3198.09 c
+1807.73 3194.03 1828.53 3178.39 1838.2 3166.95 c
+1847.61 3155.67 1870.55 3123.67 1875.44 3131.46 c
+1880.05 3138.71 1868.07 3160.04 1858.37 3171.15 c
+1849.17 3182.23 1836.41 3197.21 1815.28 3207.25 c
+1797.93 3215.39 1770.65 3217.73 1770.05 3212.9 c
+f*
+0.424 g
+1773.14 3212.13 m
+1772.51 3206.39 1788.48 3202.22 1798.68 3197.93 c
+1808.89 3194.01 1828.62 3179.03 1837.76 3168.13 c
+1846.63 3157.36 1868.58 3126.96 1873.23 3134.29 c
+1877.6 3141.13 1866.66 3161.33 1856.85 3172.09 c
+1847.58 3182.83 1835.55 3196.5 1815.52 3206.4 c
+1799.21 3214.41 1773.73 3216.73 1773.14 3212.13 c
+f*
+0.451 g
+1776.23 3211.36 m
+1775.6 3205.92 1790.74 3201.89 1800.39 3197.76 c
+1810.06 3194 1828.7 3179.66 1837.32 3169.31 c
+1845.66 3159.05 1866.61 3130.25 1871.03 3137.11 c
+1875.14 3143.56 1865.26 3162.61 1855.33 3173.03 c
+1845.98 3183.43 1834.69 3195.78 1815.77 3205.55 c
+1800.49 3213.44 1776.81 3215.72 1776.23 3211.36 c
+f*
+0.475 g
+1779.32 3210.6 m
+1778.7 3205.45 1792.99 3201.55 1802.1 3197.6 c
+1811.23 3193.99 1828.79 3180.29 1836.89 3170.48 c
+1844.68 3160.73 1864.64 3133.53 1868.82 3139.94 c
+1872.69 3145.98 1863.85 3163.9 1853.82 3173.98 c
+1844.39 3184.03 1833.82 3195.07 1816.01 3204.7 c
+1801.76 3212.47 1779.89 3214.71 1779.32 3210.6 c
+f*
+0.498 g
+1782.41 3209.83 m
+1781.79 3204.98 1795.25 3201.22 1803.81 3197.44 c
+1812.4 3193.98 1828.87 3180.92 1836.45 3171.66 c
+1843.71 3162.42 1862.67 3136.82 1866.62 3142.77 c
+1870.23 3148.41 1862.45 3165.18 1852.3 3174.92 c
+1842.79 3184.63 1832.96 3194.36 1816.26 3203.85 c
+1803.04 3211.5 1782.97 3213.71 1782.41 3209.83 c
+f*
+0.6 0.349 0 rg
+2822.23 1055.81 m
+2866.87 991.011 2820.79 906.771 2853.19 854.931 c
+2906.47 769.971 3013.75 684.291 3054.79 660.531 c
+3084.31 642.531 3126.07 625.251 3124.63 572.691 c
+3122.47 512.931 3092.95 497.091 3076.39 480.531 c
+3043.27 447.411 2876.23 364.611 2765.35 289.011 c
+2625.67 193.251 2577.43 150.771 2532.07 105.411 c
+2461.51 34.8511 2394.55 11.0913 2287.27 11.0913 c
+2179.99 11.0913 2131.75 33.4111 2098.63 62.9312 c
+2065.51 91.7312 2028.79 165.171 2032.39 274.611 c
+2035.27 383.331 2069.83 482.691 2086.39 651.891 c
+2093.59 724.611 2092.87 814.611 2092.87 894.531 c
+2092.87 995.331 2094.31 1081.01 2115.91 1093.97 c
+2154.79 1118.45 2163.43 1119.89 2209.51 1119.89 c
+2255.59 1119.89 2276.47 1117.01 2291.59 1101.89 c
+2305.99 1087.49 2300.23 1054.37 2295.19 1007.57 c
+2290.87 960.771 2313.19 945.651 2335.51 926.211 c
+2357.83 907.491 2377.99 883.731 2448.55 877.971 c
+2519.11 872.931 2545.03 884.451 2578.15 905.331 c
+2611.27 926.211 2658.07 963.651 2675.35 985.251 c
+2691.91 1006.13 2732.95 1078.13 2740.87 1078.13 c
+2748.07 1078.13 2795.59 1094.69 2822.23 1055.81 c
+f*
+0.62 0.373 0 rg
+2822.23 1055.81 m
+2866.87 991.011 2820.79 906.771 2853.19 854.931 c
+2906.47 769.971 3013.75 684.291 3054.79 660.531 c
+3084.31 642.531 3126.07 625.251 3124.63 572.691 c
+3122.47 512.931 3092.95 497.091 3076.39 480.531 c
+3043.27 447.411 2875.19 364.971 2763.8 290.451 c
+2624.95 196.743 2574.77 155.055 2528.58 111.423 c
+2459.46 44.0312 2394.44 20.5952 2289.43 21.2432 c
+2185.32 21.7112 2138.27 43.0591 2105.29 72.4351 c
+2072.31 101.091 2035.99 172.083 2039.16 278.211 c
+2041.21 386.715 2076.17 485.031 2091.72 650.991 c
+2098.38 724.791 2095.79 814.035 2095.07 894.747 c
+2094.31 995.439 2094.35 1081.01 2115.91 1093.97 c
+2154.79 1118.41 2163.43 1119.89 2209.51 1119.89 c
+2255.59 1119.89 2276.51 1116.97 2291.59 1101.89 c
+2306.49 1086.99 2299.26 1053.04 2293.64 1007.82 c
+2287.34 961.239 2308.22 942.951 2331.59 921.747 c
+2354.99 901.155 2376.48 877.035 2446.93 871.527 c
+2519.25 866.703 2547.08 879.843 2580.56 902.595 c
+2613.57 924.663 2658.29 961.635 2675.67 984.279 c
+2692.09 1005.59 2732.95 1078.13 2740.87 1078.13 c
+2748.07 1078.13 2795.59 1094.69 2822.23 1055.81 c
+f*
+0.639 0.396 0 rg
+2822.23 1055.81 m
+2866.87 991.011 2820.79 906.771 2853.19 854.931 c
+2906.47 769.971 3013.75 684.291 3054.79 660.531 c
+3084.31 642.531 3126.07 625.251 3124.63 572.691 c
+3122.47 512.931 3092.95 497.091 3076.39 480.531 c
+3043.27 447.411 2874.14 365.331 2762.25 291.891 c
+2624.23 200.235 2572.1 159.339 2525.09 117.435 c
+2457.41 53.2112 2394.33 30.0991 2291.59 31.3953 c
+2190.65 32.3313 2144.78 52.7073 2111.95 81.9392 c
+2079.12 110.451 2043.19 178.995 2045.93 281.811 c
+2047.15 390.099 2082.5 487.371 2097.05 650.091 c
+2103.17 724.971 2098.7 813.459 2097.26 894.963 c
+2095.75 995.547 2094.38 1081.01 2115.91 1093.97 c
+2154.79 1118.38 2163.43 1119.89 2209.51 1119.89 c
+2255.59 1119.89 2276.54 1116.94 2291.59 1101.89 c
+2307 1086.48 2298.29 1051.71 2292.09 1008.07 c
+2283.81 961.707 2303.25 940.251 2327.66 917.283 c
+2352.14 894.819 2374.97 870.339 2445.31 865.083 c
+2519.4 860.475 2549.13 875.235 2582.97 899.859 c
+2615.88 923.115 2658.5 959.619 2676 983.307 c
+2692.27 1005.05 2732.95 1078.13 2740.87 1078.13 c
+2748.07 1078.13 2795.59 1094.69 2822.23 1055.81 c
+f*
+0.659 0.416 0 rg
+2822.23 1055.81 m
+2866.87 991.011 2820.79 906.771 2853.19 854.931 c
+2906.47 769.971 3013.75 684.291 3054.79 660.531 c
+3084.31 642.531 3126.07 625.251 3124.63 572.691 c
+3122.47 512.931 3092.95 497.091 3076.39 480.531 c
+3043.27 447.411 2873.1 365.691 2760.71 293.331 c
+2623.51 203.727 2569.44 163.623 2521.59 123.447 c
+2455.35 62.3911 2394.23 39.6033 2293.75 41.5471 c
+2195.97 42.9512 2151.3 62.3552 2118.61 91.4431 c
+2085.92 119.811 2050.39 185.907 2052.69 285.411 c
+2053.09 393.483 2088.84 489.711 2102.37 649.191 c
+2107.95 725.151 2101.62 812.883 2099.46 895.179 c
+2097.19 995.655 2094.42 1081.01 2115.91 1093.97 c
+2154.79 1118.34 2163.43 1119.89 2209.51 1119.89 c
+2255.59 1119.89 2276.58 1116.9 2291.59 1101.89 c
+2307.5 1085.98 2297.31 1050.37 2290.55 1008.33 c
+2280.29 962.175 2298.29 937.551 2323.74 912.819 c
+2349.3 888.483 2373.45 863.643 2443.69 858.639 c
+2519.54 854.247 2551.19 870.627 2585.39 897.123 c
+2618.18 921.567 2658.72 957.603 2676.32 982.335 c
+2692.45 1004.51 2732.95 1078.13 2740.87 1078.13 c
+2748.07 1078.13 2795.59 1094.69 2822.23 1055.81 c
+f*
+0.682 0.439 0 rg
+2822.23 1055.81 m
+2866.87 991.011 2820.79 906.771 2853.19 854.931 c
+2906.47 769.971 3013.75 684.291 3054.79 660.531 c
+3084.31 642.531 3126.07 625.251 3124.63 572.691 c
+3122.47 512.931 3092.95 497.091 3076.39 480.531 c
+3043.27 447.411 2872.05 366.051 2759.16 294.771 c
+2622.79 207.219 2566.77 167.907 2518.1 129.459 c
+2453.3 71.571 2394.12 49.1072 2295.91 51.6992 c
+2201.3 53.5713 2157.81 72.0032 2125.27 100.947 c
+2092.73 129.171 2057.59 192.819 2059.46 289.011 c
+2059.03 396.867 2095.17 492.051 2107.7 648.291 c
+2112.74 725.331 2104.53 812.307 2101.65 895.395 c
+2098.63 995.763 2094.45 1081.01 2115.91 1093.97 c
+2154.79 1118.31 2163.43 1119.89 2209.51 1119.89 c
+2255.59 1119.89 2276.61 1116.87 2291.59 1101.89 c
+2308.01 1085.47 2296.34 1049.04 2289 1008.58 c
+2276.76 962.643 2293.32 934.851 2319.81 908.355 c
+2346.45 882.147 2371.94 856.947 2442.07 852.195 c
+2519.69 848.019 2553.24 866.019 2587.8 894.387 c
+2620.49 920.019 2658.93 955.587 2676.65 981.363 c
+2692.63 1003.97 2732.95 1078.13 2740.87 1078.13 c
+2748.07 1078.13 2795.59 1094.69 2822.23 1055.81 c
+f*
+0.702 0.463 0 rg
+2822.23 1055.81 m
+2866.87 991.011 2820.79 906.771 2853.19 854.931 c
+2906.47 769.971 3013.75 684.291 3054.79 660.531 c
+3084.31 642.531 3126.07 625.251 3124.63 572.691 c
+3122.47 512.931 3092.95 497.091 3076.39 480.531 c
+3043.27 447.411 2871.01 366.411 2757.61 296.211 c
+2622.07 210.711 2564.11 172.191 2514.61 135.471 c
+2451.25 80.751 2394.01 58.6111 2298.07 61.8511 c
+2206.63 64.1912 2164.33 81.6511 2131.93 110.451 c
+2099.53 138.531 2064.79 199.731 2066.23 292.611 c
+2064.97 400.251 2101.51 494.391 2113.03 647.391 c
+2117.53 725.511 2107.45 811.731 2103.85 895.611 c
+2100.07 995.871 2094.49 1081.01 2115.91 1093.97 c
+2154.79 1118.27 2163.43 1119.89 2209.51 1119.89 c
+2255.59 1119.89 2276.65 1116.83 2291.59 1101.89 c
+2308.51 1084.97 2295.37 1047.71 2287.45 1008.83 c
+2273.23 963.111 2288.35 932.151 2315.89 903.891 c
+2343.61 875.811 2370.43 850.251 2440.45 845.751 c
+2519.83 841.791 2555.29 861.411 2590.21 891.651 c
+2622.79 918.471 2659.15 953.571 2676.97 980.391 c
+2692.81 1003.43 2732.95 1078.13 2740.87 1078.13 c
+2748.07 1078.13 2795.59 1094.69 2822.23 1055.81 c
+f*
+0.722 0.486 0 rg
+2822.23 1055.81 m
+2866.87 991.011 2820.79 906.771 2853.19 854.931 c
+2906.47 769.971 3013.75 684.291 3054.79 660.531 c
+3084.31 642.531 3126.07 625.251 3124.63 572.691 c
+3122.47 512.931 3092.95 497.091 3076.39 480.531 c
+3043.27 447.411 2869.97 366.771 2756.06 297.651 c
+2621.35 214.203 2561.45 176.475 2511.12 141.483 c
+2449.2 89.9312 2393.9 68.115 2300.23 72.0032 c
+2211.96 74.811 2170.85 91.2991 2138.59 119.955 c
+2106.33 147.891 2071.99 206.643 2073 296.211 c
+2070.91 403.635 2107.85 496.731 2118.36 646.491 c
+2122.32 725.691 2110.37 811.155 2106.05 895.827 c
+2101.51 995.979 2094.53 1081.01 2115.91 1093.97 c
+2154.79 1118.23 2163.43 1119.89 2209.51 1119.89 c
+2255.59 1119.89 2276.69 1116.79 2291.59 1101.89 c
+2309.01 1084.47 2294.4 1046.38 2285.9 1009.08 c
+2269.7 963.579 2283.38 929.451 2311.97 899.427 c
+2340.77 869.475 2368.92 843.555 2438.83 839.307 c
+2519.97 835.563 2557.34 856.803 2592.62 888.915 c
+2625.09 916.923 2659.37 951.555 2677.29 979.419 c
+2692.99 1002.89 2732.95 1078.13 2740.87 1078.13 c
+2748.07 1078.13 2795.59 1094.69 2822.23 1055.81 c
+f*
+0.741 0.506 0 rg
+2822.23 1055.81 m
+2866.87 991.011 2820.79 906.771 2853.19 854.931 c
+2906.47 769.971 3013.75 684.291 3054.79 660.531 c
+3084.31 642.531 3126.07 625.251 3124.63 572.691 c
+3122.47 512.931 3092.95 497.091 3076.39 480.531 c
+3043.27 447.411 2868.92 367.131 2754.51 299.091 c
+2620.63 217.695 2558.78 180.759 2507.63 147.495 c
+2447.15 99.1111 2393.79 77.6191 2302.39 82.155 c
+2217.29 85.4312 2177.36 100.947 2145.25 129.459 c
+2113.14 157.251 2079.19 213.555 2079.77 299.811 c
+2076.85 407.019 2114.18 499.071 2123.69 645.591 c
+2127.11 725.871 2113.28 810.579 2108.24 896.043 c
+2102.95 996.087 2094.56 1081.01 2115.91 1093.97 c
+2154.79 1118.2 2163.43 1119.89 2209.51 1119.89 c
+2255.59 1119.89 2276.72 1116.76 2291.59 1101.89 c
+2309.52 1083.96 2293.43 1045.05 2284.35 1009.33 c
+2266.17 964.047 2278.41 926.751 2308.04 894.963 c
+2337.92 863.139 2367.41 836.859 2437.21 832.863 c
+2520.12 829.335 2559.39 852.195 2595.03 886.179 c
+2627.4 915.375 2659.58 949.539 2677.62 978.447 c
+2693.17 1002.35 2732.95 1078.13 2740.87 1078.13 c
+2748.07 1078.13 2795.59 1094.69 2822.23 1055.81 c
+f*
+0.761 0.529 0 rg
+2822.23 1055.81 m
+2866.87 991.011 2820.79 906.771 2853.19 854.931 c
+2906.47 769.971 3013.75 684.291 3054.79 660.531 c
+3084.31 642.531 3126.07 625.251 3124.63 572.691 c
+3122.47 512.931 3092.95 497.091 3076.39 480.531 c
+3043.27 447.411 2867.88 367.491 2752.97 300.531 c
+2619.91 221.187 2556.12 185.043 2504.13 153.507 c
+2445.09 108.291 2393.69 87.123 2304.55 92.3071 c
+2222.61 96.051 2183.88 110.595 2151.91 138.963 c
+2119.94 166.611 2086.39 220.467 2086.53 303.411 c
+2082.79 410.403 2120.52 501.411 2129.01 644.691 c
+2131.89 726.051 2116.2 810.003 2110.44 896.259 c
+2104.39 996.195 2094.6 1081.01 2115.91 1093.97 c
+2154.79 1118.16 2163.43 1119.89 2209.51 1119.89 c
+2255.59 1119.89 2276.76 1116.72 2291.59 1101.89 c
+2310.02 1083.46 2292.45 1043.71 2282.81 1009.59 c
+2262.65 964.515 2273.45 924.051 2304.12 890.499 c
+2335.08 856.803 2365.89 830.163 2435.59 826.419 c
+2520.26 823.107 2561.45 847.587 2597.45 883.443 c
+2629.7 913.827 2659.8 947.523 2677.94 977.475 c
+2693.35 1001.81 2732.95 1078.13 2740.87 1078.13 c
+2748.07 1078.13 2795.59 1094.69 2822.23 1055.81 c
+f*
+0.78 0.553 0 rg
+2822.23 1055.81 m
+2866.87 991.011 2820.79 906.771 2853.19 854.931 c
+2906.47 769.971 3013.75 684.291 3054.79 660.531 c
+3084.31 642.531 3126.07 625.251 3124.63 572.691 c
+3122.47 512.931 3092.95 497.091 3076.39 480.531 c
+3043.27 447.411 2866.83 367.851 2751.42 301.971 c
+2619.19 224.679 2553.45 189.327 2500.64 159.519 c
+2443.04 117.471 2393.58 96.6272 2306.71 102.459 c
+2227.94 106.671 2190.39 120.243 2158.57 148.467 c
+2126.75 175.971 2093.59 227.379 2093.3 307.011 c
+2088.73 413.787 2126.85 503.751 2134.34 643.791 c
+2136.68 726.231 2119.11 809.427 2112.63 896.475 c
+2105.83 996.303 2094.63 1081.01 2115.91 1093.97 c
+2154.79 1118.13 2163.43 1119.89 2209.51 1119.89 c
+2255.59 1119.89 2276.79 1116.69 2291.59 1101.89 c
+2310.53 1082.95 2291.48 1042.38 2281.26 1009.84 c
+2259.12 964.983 2268.48 921.351 2300.19 886.035 c
+2332.23 850.467 2364.38 823.467 2433.97 819.975 c
+2520.41 816.879 2563.5 842.979 2599.86 880.707 c
+2632.01 912.279 2660.01 945.507 2678.27 976.503 c
+2693.53 1001.27 2732.95 1078.13 2740.87 1078.13 c
+2748.07 1078.13 2795.59 1094.69 2822.23 1055.81 c
+f*
+0.8 0.576 0 rg
+2822.23 1055.81 m
+2866.87 991.011 2820.79 906.771 2853.19 854.931 c
+2906.47 769.971 3013.75 684.291 3054.79 660.531 c
+3084.31 642.531 3126.07 625.251 3124.63 572.691 c
+3122.47 512.931 3092.95 497.091 3076.39 480.531 c
+3043.27 447.411 2865.79 368.211 2749.87 303.411 c
+2618.47 228.171 2550.79 193.611 2497.15 165.531 c
+2440.99 126.651 2393.47 106.131 2308.87 112.611 c
+2233.27 117.291 2196.91 129.891 2165.23 157.971 c
+2133.55 185.331 2100.79 234.291 2100.07 310.611 c
+2094.67 417.171 2133.19 506.091 2139.67 642.891 c
+2141.47 726.411 2122.03 808.851 2114.83 896.691 c
+2107.27 996.411 2094.67 1081.01 2115.91 1093.97 c
+2154.79 1118.09 2163.43 1119.89 2209.51 1119.89 c
+2255.59 1119.89 2276.83 1116.65 2291.59 1101.89 c
+2311.03 1082.45 2290.51 1041.05 2279.71 1010.09 c
+2255.59 965.451 2263.51 918.651 2296.27 881.571 c
+2329.39 844.131 2362.87 816.771 2432.35 813.531 c
+2520.55 810.651 2565.55 838.371 2602.27 877.971 c
+2634.31 910.731 2660.23 943.491 2678.59 975.531 c
+2693.71 1000.73 2732.95 1078.13 2740.87 1078.13 c
+2748.07 1078.13 2795.59 1094.69 2822.23 1055.81 c
+f*
+0.82 0.6 0 rg
+2822.23 1055.81 m
+2866.87 991.011 2820.79 906.771 2853.19 854.931 c
+2906.47 769.971 3013.75 684.291 3054.79 660.531 c
+3084.31 642.531 3126.07 625.251 3124.63 572.691 c
+3122.47 512.931 3092.95 497.091 3076.39 480.531 c
+3043.27 447.411 2864.75 368.571 2748.32 304.851 c
+2617.75 231.663 2548.13 197.895 2493.66 171.543 c
+2438.94 135.831 2393.36 115.635 2311.03 122.763 c
+2238.6 127.911 2203.43 139.539 2171.89 167.475 c
+2140.35 194.691 2107.99 241.203 2106.84 314.211 c
+2100.61 420.555 2139.53 508.431 2145 641.991 c
+2146.26 726.591 2124.95 808.275 2117.03 896.907 c
+2108.71 996.519 2094.71 1081.01 2115.91 1093.97 c
+2154.79 1118.05 2163.43 1119.89 2209.51 1119.89 c
+2255.59 1119.89 2276.87 1116.61 2291.59 1101.89 c
+2311.53 1081.95 2289.54 1039.72 2278.16 1010.34 c
+2252.06 965.919 2258.54 915.951 2292.35 877.107 c
+2326.55 837.795 2361.36 810.075 2430.73 807.087 c
+2520.69 804.423 2567.6 833.763 2604.68 875.235 c
+2636.61 909.183 2660.45 941.475 2678.91 974.559 c
+2693.89 1000.19 2732.95 1078.13 2740.87 1078.13 c
+2748.07 1078.13 2795.59 1094.69 2822.23 1055.81 c
+f*
+0.843 0.62 0 rg
+2822.23 1055.81 m
+2866.87 991.011 2820.79 906.771 2853.19 854.931 c
+2906.47 769.971 3013.75 684.291 3054.79 660.531 c
+3084.31 642.531 3126.07 625.251 3124.63 572.691 c
+3122.47 512.931 3092.95 497.091 3076.39 480.531 c
+3043.27 447.411 2863.7 368.931 2746.77 306.291 c
+2617.03 235.155 2545.46 202.179 2490.17 177.555 c
+2436.89 145.011 2393.25 125.139 2313.19 132.915 c
+2243.93 138.531 2209.94 149.187 2178.55 176.979 c
+2147.16 204.051 2115.19 248.115 2113.61 317.811 c
+2106.55 423.939 2145.86 510.771 2150.33 641.091 c
+2151.05 726.771 2127.86 807.699 2119.22 897.123 c
+2110.15 996.627 2094.74 1081.01 2115.91 1093.97 c
+2154.79 1118.02 2163.43 1119.89 2209.51 1119.89 c
+2255.59 1119.89 2276.9 1116.58 2291.59 1101.89 c
+2312.04 1081.44 2288.57 1038.39 2276.61 1010.59 c
+2248.53 966.387 2253.57 913.251 2288.42 872.643 c
+2323.7 831.459 2359.85 803.379 2429.11 800.643 c
+2520.84 798.195 2569.65 829.155 2607.09 872.499 c
+2638.92 907.635 2660.66 939.459 2679.24 973.587 c
+2694.07 999.651 2732.95 1078.13 2740.87 1078.13 c
+2748.07 1078.13 2795.59 1094.69 2822.23 1055.81 c
+f*
+0.863 0.643 0 rg
+2822.23 1055.81 m
+2866.87 991.011 2820.79 906.771 2853.19 854.931 c
+2906.47 769.971 3013.75 684.291 3054.79 660.531 c
+3084.31 642.531 3126.07 625.251 3124.63 572.691 c
+3122.47 512.931 3092.95 497.091 3076.39 480.531 c
+3043.27 447.411 2862.66 369.291 2745.23 307.731 c
+2616.31 238.647 2542.8 206.463 2486.67 183.567 c
+2434.83 154.191 2393.15 134.643 2315.35 143.067 c
+2249.25 149.151 2216.46 158.835 2185.21 186.483 c
+2153.96 213.411 2122.39 255.027 2120.37 321.411 c
+2112.49 427.323 2152.2 513.111 2155.65 640.191 c
+2155.83 726.951 2130.78 807.123 2121.42 897.339 c
+2111.59 996.735 2094.78 1081.01 2115.91 1093.97 c
+2154.79 1117.98 2163.43 1119.89 2209.51 1119.89 c
+2255.59 1119.89 2276.94 1116.54 2291.59 1101.89 c
+2312.54 1080.94 2287.59 1037.05 2275.07 1010.85 c
+2245.01 966.855 2248.61 910.551 2284.5 868.179 c
+2320.86 825.123 2358.33 796.683 2427.49 794.199 c
+2520.98 791.967 2571.71 824.547 2609.51 869.763 c
+2641.22 906.087 2660.88 937.443 2679.56 972.615 c
+2694.25 999.111 2732.95 1078.13 2740.87 1078.13 c
+2748.07 1078.13 2795.59 1094.69 2822.23 1055.81 c
+f*
+0.882 0.667 0 rg
+2822.23 1055.81 m
+2866.87 991.011 2820.79 906.771 2853.19 854.931 c
+2906.47 769.971 3013.75 684.291 3054.79 660.531 c
+3084.31 642.531 3126.07 625.251 3124.63 572.691 c
+3122.47 512.931 3092.95 497.091 3076.39 480.531 c
+3043.27 447.411 2861.61 369.651 2743.68 309.171 c
+2615.59 242.139 2540.13 210.747 2483.18 189.579 c
+2432.78 163.371 2393.04 144.147 2317.51 153.219 c
+2254.58 159.771 2222.97 168.483 2191.87 195.987 c
+2160.77 222.771 2129.59 261.939 2127.14 325.011 c
+2118.43 430.707 2158.53 515.451 2160.98 639.291 c
+2160.62 727.131 2133.69 806.547 2123.61 897.555 c
+2113.03 996.843 2094.81 1081.01 2115.91 1093.97 c
+2154.79 1117.95 2163.43 1119.89 2209.51 1119.89 c
+2255.59 1119.89 2276.97 1116.51 2291.59 1101.89 c
+2313.05 1080.43 2286.62 1035.72 2273.52 1011.1 c
+2241.48 967.323 2243.64 907.851 2280.57 863.715 c
+2318.01 818.787 2356.82 789.987 2425.87 787.755 c
+2521.13 785.739 2573.76 819.939 2611.92 867.027 c
+2643.53 904.539 2661.09 935.427 2679.89 971.643 c
+2694.43 998.571 2732.95 1078.13 2740.87 1078.13 c
+2748.07 1078.13 2795.59 1094.69 2822.23 1055.81 c
+f*
+0.902 0.69 0 rg
+2822.23 1055.81 m
+2866.87 991.011 2820.79 906.771 2853.19 854.931 c
+2906.47 769.971 3013.75 684.291 3054.79 660.531 c
+3084.31 642.531 3126.07 625.251 3124.63 572.691 c
+3122.47 512.931 3092.95 497.091 3076.39 480.531 c
+3043.27 447.411 2860.57 370.011 2742.13 310.611 c
+2614.87 245.631 2537.47 215.031 2479.69 195.591 c
+2430.73 172.551 2392.93 153.651 2319.67 163.371 c
+2259.91 170.391 2229.49 178.131 2198.53 205.491 c
+2167.57 232.131 2136.79 268.851 2133.91 328.611 c
+2124.37 434.091 2164.87 517.791 2166.31 638.391 c
+2165.41 727.311 2136.61 805.971 2125.81 897.771 c
+2114.47 996.951 2094.85 1081.01 2115.91 1093.97 c
+2154.79 1117.91 2163.43 1119.89 2209.51 1119.89 c
+2255.59 1119.89 2277.01 1116.47 2291.59 1101.89 c
+2313.55 1079.93 2285.65 1034.39 2271.97 1011.35 c
+2237.95 967.791 2238.67 905.151 2276.65 859.251 c
+2315.17 812.451 2355.31 783.291 2424.25 781.311 c
+2521.27 779.511 2575.81 815.331 2614.33 864.291 c
+2645.83 902.991 2661.31 933.411 2680.21 970.671 c
+2694.61 998.031 2732.95 1078.13 2740.87 1078.13 c
+2748.07 1078.13 2795.59 1094.69 2822.23 1055.81 c
+f*
+0.922 0.71 0 rg
+2822.23 1055.81 m
+2866.87 991.011 2820.79 906.771 2853.19 854.931 c
+2906.47 769.971 3013.75 684.291 3054.79 660.531 c
+3084.31 642.531 3126.07 625.251 3124.63 572.691 c
+3122.47 512.931 3092.95 497.091 3076.39 480.531 c
+3043.27 447.411 2859.53 370.371 2740.58 312.051 c
+2614.15 249.123 2534.81 219.315 2476.2 201.603 c
+2428.68 181.731 2392.82 163.155 2321.83 173.523 c
+2265.24 181.011 2236.01 187.779 2205.19 214.995 c
+2174.37 241.491 2143.99 275.763 2140.68 332.211 c
+2130.31 437.475 2171.21 520.131 2171.64 637.491 c
+2170.2 727.491 2139.53 805.395 2128.01 897.987 c
+2115.91 997.059 2094.89 1081.01 2115.91 1093.97 c
+2154.79 1117.87 2163.43 1119.89 2209.51 1119.89 c
+2255.59 1119.89 2277.05 1116.43 2291.59 1101.89 c
+2314.05 1079.43 2284.68 1033.06 2270.42 1011.6 c
+2234.42 968.259 2233.7 902.451 2272.73 854.787 c
+2312.33 806.115 2353.8 776.595 2422.63 774.867 c
+2521.41 773.283 2577.86 810.723 2616.74 861.555 c
+2648.13 901.443 2661.53 931.395 2680.53 969.699 c
+2694.79 997.491 2732.95 1078.13 2740.87 1078.13 c
+2748.07 1078.13 2795.59 1094.69 2822.23 1055.81 c
+f*
+0.941 0.733 0 rg
+2822.23 1055.81 m
+2866.87 991.011 2820.79 906.771 2853.19 854.931 c
+2906.47 769.971 3013.75 684.291 3054.79 660.531 c
+3084.31 642.531 3126.07 625.251 3124.63 572.691 c
+3122.47 512.931 3092.95 497.091 3076.39 480.531 c
+3043.27 447.411 2858.48 370.731 2739.03 313.491 c
+2613.43 252.615 2532.14 223.599 2472.71 207.615 c
+2426.63 190.911 2392.71 172.659 2323.99 183.675 c
+2270.57 191.631 2242.52 197.427 2211.85 224.499 c
+2181.18 250.851 2151.19 282.675 2147.45 335.811 c
+2136.25 440.859 2177.54 522.471 2176.97 636.591 c
+2174.99 727.671 2142.44 804.819 2130.2 898.203 c
+2117.35 997.167 2094.92 1081.01 2115.91 1093.97 c
+2154.79 1117.84 2163.43 1119.89 2209.51 1119.89 c
+2255.59 1119.89 2277.08 1116.4 2291.59 1101.89 c
+2314.56 1078.92 2283.71 1031.73 2268.87 1011.85 c
+2230.89 968.727 2228.73 899.751 2268.8 850.323 c
+2309.48 799.779 2352.29 769.899 2421.01 768.423 c
+2521.56 767.055 2579.91 806.115 2619.15 858.819 c
+2650.44 899.895 2661.74 929.379 2680.86 968.727 c
+2694.97 996.951 2732.95 1078.13 2740.87 1078.13 c
+2748.07 1078.13 2795.59 1094.69 2822.23 1055.81 c
+f*
+0.961 0.757 0 rg
+2822.23 1055.81 m
+2866.87 991.011 2820.79 906.771 2853.19 854.931 c
+2906.47 769.971 3013.75 684.291 3054.79 660.531 c
+3084.31 642.531 3126.07 625.251 3124.63 572.691 c
+3122.47 512.931 3092.95 497.091 3076.39 480.531 c
+3043.27 447.411 2857.44 371.091 2737.49 314.931 c
+2612.71 256.107 2529.48 227.883 2469.21 213.627 c
+2424.57 200.091 2392.61 182.163 2326.15 193.827 c
+2275.89 202.251 2249.04 207.075 2218.51 234.003 c
+2187.98 260.211 2158.39 289.587 2154.21 339.411 c
+2142.19 444.243 2183.88 524.811 2182.29 635.691 c
+2179.77 727.851 2145.36 804.243 2132.4 898.419 c
+2118.79 997.275 2094.96 1081.01 2115.91 1093.97 c
+2154.79 1117.8 2163.43 1119.89 2209.51 1119.89 c
+2255.59 1119.89 2277.12 1116.36 2291.59 1101.89 c
+2315.06 1078.42 2282.73 1030.39 2267.33 1012.11 c
+2227.37 969.195 2223.77 897.051 2264.88 845.859 c
+2306.64 793.443 2350.77 763.203 2419.39 761.979 c
+2521.7 760.827 2581.97 801.507 2621.57 856.083 c
+2652.74 898.347 2661.96 927.363 2681.18 967.755 c
+2695.15 996.411 2732.95 1078.13 2740.87 1078.13 c
+2748.07 1078.13 2795.59 1094.69 2822.23 1055.81 c
+f*
+0.98 0.78 0 rg
+2822.23 1055.81 m
+2866.87 991.011 2820.79 906.771 2853.19 854.931 c
+2906.47 769.971 3013.75 684.291 3054.79 660.531 c
+3084.31 642.531 3126.07 625.251 3124.63 572.691 c
+3122.47 512.931 3092.95 497.091 3076.39 480.531 c
+3043.27 447.411 2856.39 371.451 2735.94 316.371 c
+2611.99 259.599 2526.81 232.167 2465.72 219.639 c
+2422.52 209.271 2392.5 191.667 2328.31 203.979 c
+2281.22 212.871 2255.55 216.723 2225.17 243.507 c
+2194.79 269.571 2165.59 296.499 2160.98 343.011 c
+2148.13 447.627 2190.21 527.151 2187.62 634.791 c
+2184.56 728.031 2148.27 803.667 2134.59 898.635 c
+2120.23 997.383 2094.99 1081.01 2115.91 1093.97 c
+2154.79 1117.77 2163.43 1119.89 2209.51 1119.89 c
+2255.59 1119.89 2277.15 1116.33 2291.59 1101.89 c
+2315.57 1077.91 2281.76 1029.06 2265.78 1012.36 c
+2223.84 969.663 2218.8 894.351 2260.95 841.395 c
+2303.79 787.107 2349.26 756.507 2417.77 755.535 c
+2521.85 754.599 2584.02 796.899 2623.98 853.347 c
+2655.05 896.799 2662.17 925.347 2681.51 966.783 c
+2695.33 995.871 2732.95 1078.13 2740.87 1078.13 c
+2748.07 1078.13 2795.59 1094.69 2822.23 1055.81 c
+f*
+1 0.8 0 rg
+2822.23 1055.81 m
+2866.87 991.011 2820.79 906.771 2853.19 854.931 c
+2906.47 769.971 3013.75 684.291 3054.79 660.531 c
+3084.31 642.531 3126.07 625.251 3124.63 572.691 c
+3122.47 512.931 3092.95 497.091 3076.39 480.531 c
+3043.27 447.411 2855.35 371.811 2734.39 317.811 c
+2611.27 263.091 2524.15 236.451 2462.23 225.651 c
+2420.47 218.451 2392.39 201.171 2330.47 214.131 c
+2286.55 223.491 2262.07 226.371 2231.83 253.011 c
+2201.59 278.931 2172.79 303.411 2167.75 346.611 c
+2154.07 451.011 2196.55 529.491 2192.95 633.891 c
+2189.35 728.211 2151.19 803.091 2136.79 898.851 c
+2121.67 997.491 2095.03 1081.01 2115.91 1093.97 c
+2154.79 1117.73 2163.43 1119.89 2209.51 1119.89 c
+2255.59 1119.89 2277.19 1116.29 2291.59 1101.89 c
+2316.07 1077.41 2280.79 1027.73 2264.23 1012.61 c
+2220.31 970.131 2213.83 891.651 2257.03 836.931 c
+2300.95 780.771 2347.75 749.811 2416.15 749.091 c
+2521.99 748.371 2586.07 792.291 2626.39 850.611 c
+2657.35 895.251 2662.39 923.331 2681.83 965.811 c
+2695.51 995.331 2732.95 1078.13 2740.87 1078.13 c
+2748.07 1078.13 2795.59 1094.69 2822.23 1055.81 c
+f*
+2148.56 923.482 m
+2141.47 926.058 2109.25 1075.56 2126.65 1085.87 c
+2160.16 1105.84 2169.18 1109.07 2210.42 1109.07 c
+2251.66 1109.07 2270.99 1105.84 2283.88 1092.96 c
+2305.14 1071.69 2272.28 1025.94 2259.39 1013.05 c
+2222.02 976.322 2155.65 920.902 2148.56 923.482 c
+f*
+1 0.804 0.008 rg
+2150.85 928.25 m
+2143.15 931.503 2109.83 1075.43 2127.17 1085.68 c
+2160.61 1105.58 2169.95 1107.78 2210.39 1107.78 c
+2251.63 1107.78 2270.15 1105.1 2283.2 1091.77 c
+2304.27 1070.4 2272.02 1026.04 2259.23 1013.24 c
+2221.96 976.612 2158.42 925.123 2150.85 928.25 c
+f*
+1 0.804 0.02 rg
+2153.14 933.019 m
+2144.82 936.948 2110.41 1075.3 2127.68 1085.48 c
+2161.06 1105.33 2170.73 1106.49 2210.36 1106.49 c
+2251.6 1106.49 2269.32 1104.36 2282.53 1090.57 c
+2303.4 1069.11 2271.76 1026.13 2259.07 1013.44 c
+2221.89 976.902 2161.19 929.344 2153.14 933.019 c
+f*
+1 0.804 0.027 rg
+2155.42 937.787 m
+2146.5 942.393 2110.99 1075.17 2128.2 1085.29 c
+2161.51 1105.07 2171.5 1105.2 2210.32 1105.2 c
+2251.56 1105.2 2268.48 1103.62 2281.85 1089.38 c
+2302.53 1067.82 2271.51 1026.23 2258.91 1013.63 c
+2221.83 977.192 2163.96 933.564 2155.42 937.787 c
+f*
+1 0.804 0.039 rg
+2157.71 942.556 m
+2148.17 947.838 2111.57 1075.04 2128.71 1085.1 c
+2161.96 1104.81 2172.27 1103.91 2210.29 1103.91 c
+2251.53 1103.91 2267.64 1102.88 2281.17 1088.19 c
+2301.66 1066.54 2271.25 1026.33 2258.75 1013.82 c
+2221.76 977.481 2166.73 937.785 2157.71 942.556 c
+f*
+1 0.808 0.047 rg
+2160 947.324 m
+2149.85 953.283 2112.15 1074.92 2129.23 1084.9 c
+2162.42 1104.55 2173.05 1102.62 2210.26 1102.62 c
+2251.5 1102.62 2266.8 1102.14 2280.5 1087 c
+2300.79 1065.25 2270.99 1026.42 2258.58 1014.02 c
+2221.7 977.771 2169.5 942.006 2160 947.324 c
+f*
+1 0.808 0.059 rg
+2162.29 952.092 m
+2151.52 958.729 2112.73 1074.79 2129.74 1084.71 c
+2162.87 1104.29 2173.82 1101.34 2210.23 1101.34 c
+2251.47 1101.34 2265.96 1101.39 2279.82 1085.8 c
+2299.92 1063.96 2270.74 1026.52 2258.42 1014.21 c
+2221.63 978.061 2172.27 946.227 2162.29 952.092 c
+f*
+1 0.808 0.067 rg
+2164.57 956.861 m
+2153.2 964.174 2113.31 1074.66 2130.26 1084.52 c
+2163.32 1104.04 2174.59 1100.05 2210.2 1100.05 c
+2251.44 1100.05 2265.13 1100.65 2279.14 1084.61 c
+2299.05 1062.67 2270.48 1026.62 2258.26 1014.4 c
+2221.57 978.351 2175.04 950.448 2164.57 956.861 c
+f*
+1 0.808 0.078 rg
+2166.86 961.629 m
+2154.87 969.619 2113.89 1074.53 2130.77 1084.32 c
+2163.77 1103.78 2175.36 1098.76 2210.16 1098.76 c
+2251.4 1098.76 2264.29 1099.91 2278.47 1083.42 c
+2298.18 1061.38 2270.22 1026.71 2258.1 1014.6 c
+2221.5 978.641 2177.81 954.668 2166.86 961.629 c
+f*
+1 0.812 0.09 rg
+2169.15 966.398 m
+2156.55 975.064 2114.47 1074.4 2131.29 1084.13 c
+2164.22 1103.52 2176.14 1097.47 2210.13 1097.47 c
+2251.37 1097.47 2263.45 1099.17 2277.79 1082.23 c
+2297.31 1060.09 2269.96 1026.81 2257.94 1014.79 c
+2221.44 978.931 2180.58 958.889 2169.15 966.398 c
+f*
+1 0.812 0.098 rg
+2171.43 971.166 m
+2158.23 980.509 2115.05 1074.27 2131.8 1083.93 c
+2164.67 1103.26 2176.91 1096.18 2210.1 1096.18 c
+2251.34 1096.18 2262.62 1098.43 2277.12 1081.04 c
+2296.45 1058.81 2269.7 1026.91 2257.78 1014.99 c
+2221.37 979.221 2183.36 963.11 2171.43 971.166 c
+f*
+1 0.812 0.11 rg
+2173.72 975.934 m
+2159.9 985.954 2115.63 1074.14 2132.32 1083.74 c
+2165.12 1103.01 2177.68 1094.89 2210.07 1094.89 c
+2251.31 1094.89 2261.78 1097.69 2276.44 1079.84 c
+2295.58 1057.52 2269.45 1027 2257.62 1015.18 c
+2221.31 979.51 2186.13 967.331 2173.72 975.934 c
+f*
+1 0.812 0.118 rg
+2176.01 980.703 m
+2161.58 991.399 2116.21 1074.01 2132.84 1083.55 c
+2165.57 1102.75 2178.46 1093.6 2210.04 1093.6 c
+2251.28 1093.6 2260.94 1096.95 2275.76 1078.65 c
+2294.71 1056.23 2269.19 1027.1 2257.46 1015.37 c
+2221.25 979.8 2188.9 971.552 2176.01 980.703 c
+f*
+1 0.816 0.129 rg
+2178.3 985.471 m
+2163.25 996.844 2116.79 1073.88 2133.35 1083.35 c
+2166.02 1102.49 2179.23 1092.31 2210 1092.31 c
+2251.24 1092.31 2260.1 1096.21 2275.09 1077.46 c
+2293.84 1054.94 2268.93 1027.19 2257.3 1015.57 c
+2221.18 980.09 2191.67 975.772 2178.3 985.471 c
+f*
+1 0.816 0.137 rg
+2180.59 990.24 m
+2164.93 1002.29 2117.37 1073.75 2133.87 1083.16 c
+2166.47 1102.24 2180 1091.02 2209.97 1091.02 c
+2251.21 1091.02 2259.26 1095.47 2274.41 1076.27 c
+2292.97 1053.65 2268.67 1027.29 2257.14 1015.76 c
+2221.12 980.38 2194.44 979.993 2180.59 990.24 c
+f*
+1 0.816 0.149 rg
+2182.87 995.008 m
+2166.6 1007.73 2117.95 1073.62 2134.38 1082.97 c
+2166.93 1101.98 2180.77 1089.74 2209.94 1089.74 c
+2251.18 1089.74 2258.43 1094.72 2273.73 1075.07 c
+2292.1 1052.36 2268.42 1027.39 2256.98 1015.95 c
+2221.05 980.67 2197.21 984.214 2182.87 995.008 c
+f*
+1 0.816 0.157 rg
+2185.16 999.776 m
+2168.28 1013.18 2118.53 1073.5 2134.9 1082.77 c
+2167.38 1101.72 2181.55 1088.45 2209.91 1088.45 c
+2251.15 1088.45 2257.59 1093.98 2273.06 1073.88 c
+2291.23 1051.07 2268.16 1027.48 2256.81 1016.15 c
+2220.99 980.96 2199.98 988.435 2185.16 999.776 c
+f*
+1 0.82 0.169 rg
+2187.45 1004.54 m
+2169.95 1018.62 2119.11 1073.37 2135.41 1082.58 c
+2167.83 1101.46 2182.32 1087.16 2209.88 1087.16 c
+2251.12 1087.16 2256.75 1093.24 2272.38 1072.69 c
+2290.36 1049.79 2267.9 1027.58 2256.65 1016.34 c
+2220.92 981.249 2202.75 992.656 2187.45 1004.54 c
+f*
+1 0.82 0.18 rg
+2189.73 1009.31 m
+2171.63 1024.07 2119.69 1073.24 2135.93 1082.39 c
+2168.28 1101.2 2183.09 1085.87 2209.84 1085.87 c
+2251.08 1085.87 2255.91 1092.5 2271.7 1071.5 c
+2289.49 1048.5 2267.64 1027.68 2256.49 1016.53 c
+2220.86 981.539 2205.52 996.876 2189.73 1009.31 c
+f*
+1 0.82 0.188 rg
+2192.02 1014.08 m
+2173.3 1029.51 2120.27 1073.11 2136.44 1082.19 c
+2168.73 1100.95 2183.87 1084.58 2209.81 1084.58 c
+2251.05 1084.58 2255.08 1091.76 2271.03 1070.3 c
+2288.62 1047.21 2267.39 1027.77 2256.33 1016.73 c
+2220.79 981.829 2208.29 1001.1 2192.02 1014.08 c
+f*
+1 0.82 0.2 rg
+2194.31 1018.85 m
+2174.98 1034.96 2120.85 1072.98 2136.96 1082 c
+2169.18 1100.69 2184.64 1083.29 2209.78 1083.29 c
+2251.02 1083.29 2254.24 1091.02 2270.35 1069.11 c
+2287.75 1045.92 2267.13 1027.87 2256.17 1016.92 c
+2220.73 982.119 2211.06 1005.32 2194.31 1018.85 c
+f*
+1 0.8 0 rg
+2813.62 1047.36 m
+2851.04 992.76 2813.01 919.762 2840 876.208 c
+2771.91 938.777 2740.62 964.541 2646.76 872.529 c
+2672.53 909.946 2678.05 935.098 2694 970.676 c
+2705.04 995.215 2737.55 1066.37 2744.3 1066.37 c
+2750.43 1066.37 2791.54 1079.87 2813.62 1047.36 c
+f*
+1 0.804 0.008 rg
+2813.23 1046.99 m
+2849.78 993.635 2813.58 920.979 2839.01 879.752 c
+2772.33 940.722 2741.72 966.412 2649.93 876.523 c
+2674.14 911.804 2680.18 937.477 2695.98 972.456 c
+2707.2 997.065 2738.42 1065.46 2745.5 1065.56 c
+2751.77 1065.63 2791.66 1078.73 2813.23 1046.99 c
+f*
+1 0.804 0.02 rg
+2812.84 1046.61 m
+2848.52 994.511 2814.15 922.196 2838.01 883.297 c
+2772.74 942.668 2742.82 968.283 2653.09 880.518 c
+2675.75 913.661 2682.32 939.855 2697.97 974.236 c
+2709.37 998.914 2739.29 1064.55 2746.7 1064.75 c
+2753.11 1064.88 2791.77 1077.6 2812.84 1046.61 c
+f*
+1 0.804 0.027 rg
+2812.45 1046.23 m
+2847.25 995.387 2814.73 923.414 2837.02 886.841 c
+2773.16 944.613 2743.92 970.153 2656.26 884.512 c
+2677.37 915.519 2684.45 942.234 2699.95 976.016 c
+2711.53 1000.76 2740.16 1063.64 2747.9 1063.94 c
+2754.45 1064.14 2791.89 1076.46 2812.45 1046.23 c
+f*
+1 0.804 0.039 rg
+2812.06 1045.86 m
+2845.99 996.262 2815.3 924.631 2836.03 890.386 c
+2773.58 946.559 2745.02 972.024 2659.43 888.507 c
+2678.98 917.376 2686.59 944.613 2701.94 977.797 c
+2713.7 1002.61 2741.03 1062.73 2749.09 1063.13 c
+2755.79 1063.39 2792.01 1075.33 2812.06 1045.86 c
+f*
+1 0.808 0.047 rg
+2811.68 1045.49 m
+2844.73 997.138 2815.87 925.848 2835.03 893.93 c
+2773.99 948.504 2746.12 973.895 2662.59 892.501 c
+2680.59 919.234 2688.72 946.992 2703.92 979.577 c
+2715.86 1004.46 2741.9 1061.82 2750.29 1062.32 c
+2757.14 1062.65 2792.12 1074.19 2811.68 1045.49 c
+f*
+1 0.808 0.059 rg
+2811.29 1045.11 m
+2843.46 998.013 2816.45 927.065 2834.04 897.475 c
+2774.41 950.45 2747.22 975.766 2665.76 896.496 c
+2682.2 921.091 2690.85 949.37 2705.91 981.357 c
+2718.02 1006.31 2742.78 1060.91 2751.49 1061.51 c
+2758.48 1061.91 2792.24 1073.05 2811.29 1045.11 c
+f*
+1 0.808 0.067 rg
+2810.9 1044.74 m
+2842.2 998.888 2817.02 928.282 2833.05 901.019 c
+2774.83 952.395 2748.32 977.636 2668.93 900.49 c
+2683.81 922.949 2692.99 951.749 2707.89 983.137 c
+2720.19 1008.16 2743.65 1060 2752.69 1060.7 c
+2759.82 1061.16 2792.36 1071.92 2810.9 1044.74 c
+f*
+1 0.808 0.078 rg
+2810.51 1044.36 m
+2840.94 999.764 2817.59 929.5 2832.05 904.564 c
+2775.24 954.341 2749.42 979.507 2672.09 904.485 c
+2685.43 924.806 2695.12 954.128 2709.88 984.917 c
+2722.35 1010.01 2744.52 1059.09 2753.89 1059.89 c
+2761.16 1060.42 2792.47 1070.78 2810.51 1044.36 c
+f*
+1 0.812 0.09 rg
+2810.12 1043.98 m
+2839.68 1000.64 2818.16 930.717 2831.06 908.108 c
+2775.66 956.286 2750.52 981.378 2675.26 908.479 c
+2687.04 926.664 2697.26 956.506 2711.86 986.697 c
+2724.52 1011.86 2745.39 1058.18 2755.09 1059.08 c
+2762.5 1059.67 2792.59 1069.65 2810.12 1043.98 c
+f*
+1 0.812 0.098 rg
+2809.73 1043.61 m
+2838.41 1001.51 2818.74 931.934 2830.07 911.653 c
+2776.07 958.232 2751.62 983.249 2678.42 912.473 c
+2688.65 928.521 2699.39 958.885 2713.84 988.477 c
+2726.68 1013.71 2746.26 1057.27 2756.28 1058.26 c
+2763.84 1058.93 2792.71 1068.51 2809.73 1043.61 c
+f*
+1 0.812 0.11 rg
+2809.34 1043.24 m
+2837.15 1002.39 2819.31 933.151 2829.07 915.197 c
+2776.49 960.177 2752.72 985.119 2681.59 916.468 c
+2690.26 930.379 2701.52 961.264 2715.83 990.258 c
+2728.84 1015.56 2747.13 1056.36 2757.48 1057.45 c
+2765.18 1058.19 2792.82 1067.37 2809.34 1043.24 c
+f*
+1 0.812 0.118 rg
+2808.95 1042.86 m
+2835.89 1003.27 2819.88 934.368 2828.08 918.741 c
+2776.91 962.122 2753.82 986.99 2684.76 920.462 c
+2691.87 932.237 2703.66 963.642 2717.81 992.038 c
+2731.01 1017.41 2748 1055.45 2758.68 1056.64 c
+2766.52 1057.44 2792.94 1066.24 2808.95 1042.86 c
+f*
+1 0.816 0.129 rg
+2808.56 1042.48 m
+2834.63 1004.14 2820.45 935.586 2827.08 922.286 c
+2777.32 964.068 2754.92 988.861 2687.92 924.457 c
+2693.49 934.094 2705.79 966.021 2719.8 993.818 c
+2733.17 1019.26 2748.87 1054.54 2759.88 1055.83 c
+2767.86 1056.7 2793.05 1065.1 2808.56 1042.48 c
+f*
+1 0.816 0.137 rg
+2808.17 1042.11 m
+2833.37 1005.02 2821.03 936.803 2826.09 925.83 c
+2777.74 966.013 2756.02 990.732 2691.09 928.451 c
+2695.1 935.952 2707.93 968.4 2721.78 995.598 c
+2735.34 1021.11 2749.74 1053.63 2761.08 1055.02 c
+2769.2 1055.95 2793.17 1063.97 2808.17 1042.11 c
+f*
+1 0.816 0.149 rg
+2807.79 1041.74 m
+2832.1 1005.89 2821.6 938.02 2825.1 929.375 c
+2778.16 967.959 2757.12 992.602 2694.26 932.446 c
+2696.71 937.809 2710.06 970.779 2723.77 997.378 c
+2737.5 1022.96 2750.62 1052.72 2762.28 1054.21 c
+2770.55 1055.21 2793.29 1062.83 2807.79 1041.74 c
+f*
+1 0.816 0.157 rg
+2807.4 1041.36 m
+2830.84 1006.77 2822.17 939.237 2824.1 932.919 c
+2778.57 969.904 2758.22 994.473 2697.42 936.44 c
+2698.32 939.667 2712.19 973.157 2725.75 999.158 c
+2739.66 1024.81 2751.49 1051.81 2763.48 1053.4 c
+2771.89 1054.47 2793.4 1061.69 2807.4 1041.36 c
+f*
+1 0.82 0.169 rg
+2807.01 1040.99 m
+2829.58 1007.64 2822.74 940.454 2823.11 936.464 c
+2778.99 971.85 2759.32 996.344 2700.59 940.435 c
+2699.93 941.524 2714.33 975.536 2727.74 1000.94 c
+2741.83 1026.66 2752.36 1050.9 2764.67 1052.59 c
+2773.23 1053.72 2793.52 1060.56 2807.01 1040.99 c
+f*
+1 0.82 0.18 rg
+2806.62 1040.61 m
+2828.32 1008.52 2823.32 941.672 2822.12 940.008 c
+2779.41 973.795 2760.42 998.214 2703.76 944.429 c
+2701.55 943.382 2716.46 977.915 2729.72 1002.72 c
+2743.99 1028.51 2753.23 1049.99 2765.87 1051.78 c
+2774.57 1052.98 2793.64 1059.42 2806.62 1040.61 c
+f*
+1 0.82 0.188 rg
+2806.23 1040.23 m
+2827.05 1009.39 2823.89 942.889 2821.12 943.553 c
+2779.82 975.741 2761.52 1000.08 2706.92 948.424 c
+2703.16 945.239 2718.6 980.293 2731.71 1004.5 c
+2746.16 1030.36 2754.1 1049.08 2767.07 1050.97 c
+2775.91 1052.23 2793.75 1058.29 2806.23 1040.23 c
+f*
+1 0.82 0.2 rg
+2805.84 1039.86 m
+2825.79 1010.27 2824.46 944.106 2820.13 947.097 c
+2780.24 977.686 2762.62 1001.96 2710.09 952.418 c
+2704.77 947.097 2720.73 982.672 2733.69 1006.28 c
+2748.32 1032.21 2754.97 1048.17 2768.27 1050.16 c
+2777.25 1051.49 2793.87 1057.15 2805.84 1039.86 c
+f*
+1 0.8 0 rg
+2844.55 846.291 m
+2904.31 767.811 3015.19 683.571 3054.79 660.531 c
+3083.59 643.971 3125.35 624.531 3124.63 572.691 c
+3123.19 513.651 3092.95 497.091 3076.39 480.531 c
+3043.27 447.411 2854.63 371.091 2734.39 317.811 c
+2611.99 263.811 2523.43 235.731 2462.23 225.651 c
+2421.19 219.171 2391.67 201.891 2330.47 214.131 c
+2287.27 222.771 2261.35 227.091 2231.83 253.011 c
+2202.31 278.211 2172.07 304.851 2167.75 346.611 c
+2155.51 450.291 2204.47 515.811 2251.99 605.811 c
+2290.87 677.811 2369.35 692.211 2418.31 685.731 c
+2593.99 661.971 2582.47 772.131 2630.71 820.371 c
+2675.35 865.011 2802.79 901.011 2844.55 846.291 c
+f*
+1 0.804 0.008 rg
+2844.03 845.56 m
+2903.65 767.264 3014.27 683.222 3053.78 660.237 c
+3082.51 643.715 3124.17 624.321 3123.45 572.603 c
+3122.02 513.701 3091.85 497.18 3075.33 480.659 c
+3042.28 447.617 2851.93 370.721 2732.93 319.762 c
+2610.34 268.016 2526.45 241.031 2464.91 230.186 c
+2424.14 223.344 2393.35 206.242 2332.33 218.419 c
+2289.3 226.97 2264.67 230.731 2235.25 256.521 c
+2205.87 281.628 2177.69 306.146 2173.42 347.705 c
+2161.31 451.108 2207.07 514.278 2253.86 604.204 c
+2292.75 677.956 2371.77 688.548 2420.51 681.981 c
+2595.64 657.83 2582.57 771.574 2630.69 819.701 c
+2675.23 864.236 2802.37 900.152 2844.03 845.56 c
+f*
+1 0.804 0.02 rg
+2843.51 844.829 m
+2902.99 766.718 3013.35 682.874 3052.77 659.942 c
+3081.43 643.46 3122.99 624.111 3122.28 572.514 c
+3120.85 513.752 3090.75 497.27 3074.27 480.787 c
+3041.3 447.823 2849.22 370.352 2731.47 321.713 c
+2608.68 272.221 2529.46 246.332 2467.59 234.721 c
+2427.08 227.517 2395.03 210.592 2334.18 222.706 c
+2291.32 231.168 2267.99 234.37 2238.68 260.031 c
+2209.44 285.044 2183.32 307.442 2179.09 348.8 c
+2167.11 451.924 2209.67 512.745 2255.73 602.597 c
+2294.63 678.101 2374.18 684.886 2422.71 678.23 c
+2597.29 653.69 2582.66 771.018 2630.68 819.031 c
+2675.11 863.462 2801.95 899.292 2843.51 844.829 c
+f*
+1 0.804 0.027 rg
+2843 844.099 m
+2902.33 766.171 3012.43 682.525 3051.75 659.648 c
+3080.35 643.204 3121.82 623.901 3121.1 572.426 c
+3119.67 513.802 3089.65 497.359 3073.2 480.915 c
+3040.31 448.029 2846.52 369.982 2730.01 323.665 c
+2607.03 276.427 2532.47 251.632 2470.27 239.256 c
+2430.03 231.69 2396.7 214.943 2336.04 226.994 c
+2293.35 235.367 2271.31 238.01 2242.1 263.541 c
+2213 288.461 2188.94 308.737 2184.76 349.894 c
+2172.91 452.741 2212.26 511.212 2257.6 600.99 c
+2296.51 678.246 2376.6 681.223 2424.9 674.48 c
+2598.94 649.549 2582.76 770.461 2630.66 818.361 c
+2674.99 862.687 2801.53 898.433 2843 844.099 c
+f*
+1 0.804 0.039 rg
+2842.48 843.368 m
+2901.68 765.625 3011.51 682.176 3050.74 659.353 c
+3079.27 642.948 3120.64 623.691 3119.93 572.338 c
+3118.5 513.852 3088.54 497.448 3072.14 481.044 c
+3039.33 448.235 2843.82 369.613 2728.55 325.616 c
+2605.38 280.632 2535.49 256.933 2472.94 243.791 c
+2432.97 235.863 2398.38 219.294 2337.89 231.281 c
+2295.37 239.566 2274.64 241.649 2245.53 267.052 c
+2216.56 291.877 2194.57 310.033 2190.42 350.989 c
+2178.71 453.558 2214.86 509.679 2259.46 599.383 c
+2298.39 678.392 2379.01 677.56 2427.1 670.73 c
+2600.58 645.409 2582.86 769.905 2630.65 817.691 c
+2674.87 861.912 2801.11 897.574 2842.48 843.368 c
+f*
+1 0.808 0.047 rg
+2841.96 842.637 m
+2901.02 765.079 3010.6 681.828 3049.73 659.059 c
+3078.19 642.693 3119.46 623.481 3118.75 572.249 c
+3117.33 513.903 3087.44 497.537 3071.08 481.172 c
+3038.35 448.441 2841.11 369.243 2727.09 327.567 c
+2603.72 284.837 2538.5 262.233 2475.62 248.326 c
+2435.92 240.036 2400.06 223.644 2339.75 235.569 c
+2297.4 243.764 2277.96 245.289 2248.96 270.562 c
+2220.12 295.294 2200.19 311.328 2196.09 352.083 c
+2184.51 454.374 2217.46 508.146 2261.33 597.775 c
+2300.27 678.537 2381.43 673.898 2429.3 666.979 c
+2602.23 641.268 2582.96 769.348 2630.63 817.021 c
+2674.74 861.137 2800.69 896.714 2841.96 842.637 c
+f*
+1 0.808 0.059 rg
+2841.44 841.907 m
+2900.36 764.532 3009.68 681.479 3048.72 658.764 c
+3077.11 642.437 3118.28 623.271 3117.57 572.161 c
+3116.16 513.953 3086.34 497.627 3070.01 481.3 c
+3037.36 448.647 2838.41 368.873 2725.63 329.519 c
+2602.07 289.042 2541.52 267.534 2478.3 252.861 c
+2438.87 244.208 2401.74 227.995 2341.6 239.856 c
+2299.42 247.963 2281.28 248.928 2252.38 274.072 c
+2223.69 298.711 2205.81 312.624 2201.76 353.178 c
+2190.31 455.191 2220.06 506.613 2263.2 596.168 c
+2302.15 678.682 2383.85 670.235 2431.5 663.229 c
+2603.88 637.128 2583.05 768.792 2630.61 816.351 c
+2674.62 860.363 2800.27 895.855 2841.44 841.907 c
+f*
+1 0.808 0.067 rg
+2840.92 841.176 m
+2899.7 763.986 3008.76 681.13 3047.71 658.47 c
+3076.03 642.181 3117.11 623.061 3116.4 572.073 c
+3114.98 514.003 3085.24 497.716 3068.95 481.428 c
+3036.37 448.853 2835.71 368.504 2724.17 331.47 c
+2600.42 293.247 2544.53 272.834 2480.98 257.396 c
+2441.81 248.381 2403.41 232.346 2343.46 244.144 c
+2301.45 252.162 2284.6 252.568 2255.81 277.582 c
+2227.25 302.127 2211.44 313.919 2207.43 354.272 c
+2196.11 456.008 2222.65 505.08 2265.07 594.561 c
+2304.03 678.827 2386.26 666.572 2433.7 659.479 c
+2605.53 632.987 2583.15 768.235 2630.6 815.681 c
+2674.5 859.588 2799.85 894.996 2840.92 841.176 c
+f*
+1 0.808 0.078 rg
+2840.41 840.445 m
+2899.04 763.439 3007.84 680.782 3046.69 658.175 c
+3074.95 641.926 3115.93 622.851 3115.22 571.985 c
+3113.81 514.054 3084.14 497.805 3067.89 481.556 c
+3035.39 449.059 2833 368.134 2722.71 333.421 c
+2598.76 297.453 2547.55 278.135 2483.66 261.931 c
+2444.76 252.554 2405.09 236.696 2345.31 248.431 c
+2303.47 256.361 2287.92 256.207 2259.23 281.092 c
+2230.81 305.544 2217.06 315.215 2213.1 355.367 c
+2201.91 456.825 2225.25 503.547 2266.94 592.954 c
+2305.91 678.972 2388.68 662.91 2435.89 655.728 c
+2607.18 628.847 2583.25 767.679 2630.58 815.011 c
+2674.38 858.813 2799.43 894.137 2840.41 840.445 c
+f*
+1 0.812 0.09 rg
+2839.89 839.714 m
+2898.38 762.893 3006.92 680.433 3045.68 657.881 c
+3073.87 641.67 3114.75 622.641 3114.05 571.896 c
+3112.64 514.104 3083.04 497.895 3066.83 481.684 c
+3034.4 449.265 2830.3 367.765 2721.25 335.372 c
+2597.11 301.658 2550.56 283.435 2486.34 266.466 c
+2447.7 256.727 2406.77 241.047 2347.17 252.719 c
+2305.5 260.559 2291.24 259.847 2262.66 284.602 c
+2234.38 308.96 2222.69 316.51 2218.77 356.461 c
+2207.71 457.641 2227.85 502.014 2268.81 591.347 c
+2307.79 679.117 2391.09 659.247 2438.09 651.978 c
+2608.83 624.706 2583.34 767.122 2630.57 814.341 c
+2674.26 858.039 2799.01 893.277 2839.89 839.714 c
+f*
+1 0.812 0.098 rg
+2839.37 838.983 m
+2897.73 762.346 3006 680.085 3044.67 657.586 c
+3072.8 641.414 3113.57 622.43 3112.87 571.808 c
+3111.46 514.155 3081.94 497.984 3065.77 481.813 c
+3033.42 449.471 2827.6 367.395 2719.79 337.323 c
+2595.46 305.863 2553.58 288.736 2489.02 271.001 c
+2450.65 260.9 2408.45 245.397 2349.02 257.006 c
+2307.53 264.758 2294.56 263.486 2266.08 288.112 c
+2237.94 312.377 2228.31 317.806 2224.43 357.555 c
+2213.51 458.458 2230.44 500.481 2270.68 589.74 c
+2309.67 679.263 2393.51 655.584 2440.29 648.227 c
+2610.47 620.565 2583.44 766.565 2630.55 813.671 c
+2674.14 857.264 2798.59 892.418 2839.37 838.983 c
+f*
+1 0.812 0.11 rg
+2838.85 838.253 m
+2897.07 761.799 3005.08 679.736 3043.66 657.291 c
+3071.72 641.159 3112.4 622.22 3111.69 571.72 c
+3110.29 514.205 3080.83 498.073 3064.7 481.941 c
+3032.43 449.676 2824.89 367.025 2718.32 339.275 c
+2593.8 310.068 2556.6 294.036 2491.69 275.536 c
+2453.6 265.073 2410.12 249.748 2350.88 261.294 c
+2309.55 268.957 2297.89 267.126 2269.51 291.623 c
+2241.5 315.794 2233.93 319.101 2230.1 358.65 c
+2219.31 459.275 2233.04 498.949 2272.54 588.133 c
+2311.55 679.408 2395.93 651.922 2442.49 644.477 c
+2612.12 616.425 2583.54 766.009 2630.53 813.002 c
+2674.02 856.489 2798.17 891.559 2838.85 838.253 c
+f*
+1 0.812 0.118 rg
+2838.33 837.522 m
+2896.41 761.253 3004.16 679.387 3042.65 656.997 c
+3070.64 640.903 3111.22 622.01 3110.52 571.631 c
+3109.12 514.255 3079.73 498.163 3063.64 482.069 c
+3031.45 449.882 2822.19 366.656 2716.86 341.226 c
+2592.15 314.273 2559.61 299.337 2494.37 280.071 c
+2456.54 269.246 2411.8 254.099 2352.74 265.582 c
+2311.58 273.155 2301.21 270.766 2272.93 295.133 c
+2245.07 319.21 2239.56 320.396 2235.77 359.744 c
+2225.11 460.091 2235.64 497.416 2274.41 586.526 c
+2313.43 679.553 2398.34 648.259 2444.69 640.727 c
+2613.77 612.284 2583.63 765.452 2630.52 812.332 c
+2673.9 855.715 2797.75 890.699 2838.33 837.522 c
+f*
+1 0.816 0.129 rg
+2837.82 836.791 m
+2895.75 760.706 3003.24 679.039 3041.63 656.702 c
+3069.56 640.648 3110.04 621.8 3109.34 571.543 c
+3107.95 514.306 3078.63 498.252 3062.58 482.197 c
+3030.47 450.088 2819.48 366.286 2715.4 343.177 c
+2590.49 318.479 2562.62 304.637 2497.05 284.606 c
+2459.49 273.419 2413.48 258.449 2354.59 269.869 c
+2313.6 277.354 2304.53 274.405 2276.35 298.643 c
+2248.63 322.627 2245.18 321.692 2241.44 360.839 c
+2230.91 460.908 2238.24 495.883 2276.28 584.919 c
+2315.31 679.698 2400.76 644.597 2446.88 636.976 c
+2615.42 608.144 2583.73 764.896 2630.5 811.662 c
+2673.78 854.94 2797.33 889.84 2837.82 836.791 c
+f*
+1 0.816 0.137 rg
+2837.3 836.06 m
+2895.09 760.16 3002.32 678.69 3040.62 656.408 c
+3068.48 640.392 3108.87 621.59 3108.17 571.455 c
+3106.77 514.356 3077.53 498.341 3061.52 482.325 c
+3029.48 450.294 2816.78 365.917 2713.94 345.129 c
+2588.84 322.684 2565.64 309.938 2499.73 289.141 c
+2462.43 277.592 2415.16 262.8 2356.45 274.157 c
+2315.63 281.553 2307.85 278.045 2279.78 302.153 c
+2252.19 326.043 2250.81 322.987 2247.11 361.933 c
+2236.71 461.725 2240.83 494.35 2278.15 583.312 c
+2317.19 679.843 2403.17 640.934 2449.08 633.226 c
+2617.07 604.003 2583.83 764.339 2630.49 810.992 c
+2673.66 854.165 2796.91 888.981 2837.3 836.06 c
+f*
+1 0.816 0.149 rg
+2836.78 835.33 m
+2894.43 759.613 3001.41 678.341 3039.61 656.114 c
+3067.4 640.136 3107.69 621.38 3106.99 571.367 c
+3105.6 514.406 3076.43 498.43 3060.45 482.453 c
+3028.49 450.5 2814.08 365.547 2712.48 347.08 c
+2587.19 326.889 2568.65 315.238 2502.41 293.676 c
+2465.38 281.764 2416.83 267.151 2358.3 278.444 c
+2317.65 285.751 2311.17 281.684 2283.2 305.663 c
+2255.76 329.46 2256.43 324.283 2252.78 363.028 c
+2242.51 462.542 2243.43 492.817 2280.02 581.705 c
+2319.07 679.988 2405.59 637.271 2451.28 629.476 c
+2618.72 599.863 2583.93 763.783 2630.47 810.322 c
+2673.54 853.391 2796.49 888.121 2836.78 835.33 c
+f*
+1 0.816 0.157 rg
+2836.26 834.599 m
+2893.77 759.067 3000.49 677.993 3038.6 655.819 c
+3066.32 639.881 3106.51 621.17 3105.81 571.278 c
+3104.43 514.457 3075.33 498.52 3059.39 482.581 c
+3027.51 450.706 2811.37 365.177 2711.02 349.031 c
+2585.53 331.094 2571.67 320.539 2505.09 298.211 c
+2468.33 285.937 2418.51 271.501 2360.16 282.732 c
+2319.68 289.95 2314.49 285.324 2286.63 309.173 c
+2259.32 332.877 2262.05 325.578 2258.45 364.122 c
+2248.31 463.358 2246.03 491.284 2281.89 580.097 c
+2320.95 680.133 2408.01 633.609 2453.48 625.725 c
+2620.37 595.722 2584.02 763.226 2630.45 809.652 c
+2673.41 852.616 2796.07 887.262 2836.26 834.599 c
+f*
+1 0.82 0.169 rg
+2835.74 833.868 m
+2893.12 758.521 2999.57 677.644 3037.59 655.525 c
+3065.24 639.625 3105.33 620.96 3104.64 571.19 c
+3103.26 514.507 3074.22 498.609 3058.33 482.71 c
+3026.52 450.912 2808.67 364.808 2709.56 350.982 c
+2583.88 335.299 2574.68 325.839 2507.76 302.746 c
+2471.27 290.11 2420.19 275.852 2362.01 287.019 c
+2321.7 294.149 2317.82 288.963 2290.06 312.684 c
+2262.88 336.293 2267.68 326.874 2264.11 365.217 c
+2254.11 464.175 2248.63 489.751 2283.75 578.49 c
+2322.83 680.279 2410.42 629.946 2455.68 621.975 c
+2622.01 591.582 2584.12 762.67 2630.44 808.982 c
+2673.29 851.841 2795.65 886.403 2835.74 833.868 c
+f*
+1 0.82 0.18 rg
+2835.23 833.138 m
+2892.46 757.974 2998.65 677.295 3036.57 655.23 c
+3064.16 639.369 3104.15 620.75 3103.46 571.102 c
+3102.08 514.557 3073.12 498.698 3057.27 482.838 c
+3025.54 451.118 2805.97 364.438 2708.1 352.934 c
+2582.23 339.505 2577.7 331.14 2510.44 307.281 c
+2474.22 294.283 2421.87 280.203 2363.87 291.307 c
+2323.73 298.348 2321.14 292.603 2293.48 316.194 c
+2266.44 339.71 2273.3 328.169 2269.78 366.311 c
+2259.91 464.992 2251.22 488.218 2285.62 576.883 c
+2324.71 680.424 2412.84 626.283 2457.87 618.225 c
+2623.66 587.441 2584.22 762.113 2630.42 808.312 c
+2673.17 851.066 2795.23 885.544 2835.23 833.138 c
+f*
+1 0.82 0.188 rg
+2834.71 832.407 m
+2891.8 757.428 2997.73 676.947 3035.56 654.936 c
+3063.08 639.114 3102.98 620.54 3102.29 571.013 c
+3100.91 514.608 3072.02 498.788 3056.2 482.966 c
+3024.56 451.324 2803.26 364.069 2706.64 354.885 c
+2580.57 343.71 2580.71 336.441 2513.12 311.816 c
+2477.16 298.456 2423.54 284.553 2365.72 295.594 c
+2325.75 302.546 2324.46 296.242 2296.91 319.704 c
+2270.01 343.126 2278.93 329.465 2275.45 367.406 c
+2265.71 465.808 2253.82 486.685 2287.49 575.276 c
+2326.59 680.569 2415.25 622.621 2460.07 614.474 c
+2625.31 583.301 2584.31 761.557 2630.41 807.642 c
+2673.05 850.292 2794.81 884.684 2834.71 832.407 c
+f*
+1 0.82 0.2 rg
+2834.19 831.676 m
+2891.14 756.881 2996.81 676.598 3034.55 654.641 c
+3062 638.858 3101.8 620.33 3101.11 570.925 c
+3099.74 514.658 3070.92 498.877 3055.14 483.094 c
+3023.57 451.53 2800.56 363.699 2705.18 356.836 c
+2578.92 347.915 2583.73 341.741 2515.8 316.351 c
+2480.11 302.629 2425.22 288.904 2367.58 299.882 c
+2327.78 306.745 2327.78 299.882 2300.33 323.214 c
+2273.57 346.543 2284.55 330.76 2281.12 368.5 c
+2271.51 466.625 2256.42 485.152 2289.36 573.669 c
+2328.47 680.714 2417.67 618.958 2462.27 610.724 c
+2626.96 579.16 2584.41 761 2630.39 806.972 c
+2672.93 849.517 2794.39 883.825 2834.19 831.676 c
+f*
+0.6 0.349 0 rg
+310.869 944.931 m
+246.069 898.131 81.9092 902.451 40.1492 847.731 c
+-0.890625 793.011 41.5891 713.811 40.8691 566.931 c
+40.8691 504.291 30.0691 456.771 22.8691 418.611 c
+12.7891 370.371 6.30933 336.531 26.4692 301.971 c
+63.1892 240.771 122.229 225.651 459.909 155.091 c
+640.629 117.651 811.269 20.4512 925.749 11.0913 c
+1040.23 2.45142 1064.71 40.6111 1134.55 102.531 c
+1203.67 164.451 1225.99 145.011 1223.83 281.091 c
+1221.67 416.451 1134.55 456.771 1035.91 613.011 c
+937.269 769.251 921.429 798.051 855.909 901.731 c
+790.389 1003.97 660.789 1189.73 586.629 1191.89 c
+527.589 1193.33 494.469 1161.65 457.749 1124.21 c
+421.029 1086.77 375.669 991.731 310.869 944.931 c
+f*
+0.62 0.373 0 rg
+311.913 942.051 m
+247.941 895.035 87.1653 904.179 41.3013 846.939 c
+-0.242676 792.795 43.5691 714.171 42.2732 567.399 c
+42.0212 505.083 30.7532 458.571 22.9053 418.611 c
+12.5371 369.903 6.12939 336.603 26.3972 302.439 c
+64.2693 240.807 123.345 231.195 460.953 160.743 c
+641.565 123.375 806.373 27.6873 924.381 19.6233 c
+1036.23 11.7031 1060.03 47.9192 1129.01 109.227 c
+1197.98 171.183 1219.26 151.995 1217.6 283.287 c
+1216.85 418.503 1134.55 456.771 1035.91 613.011 c
+937.269 769.251 921.429 798.051 855.909 901.731 c
+790.389 1003.97 660.789 1189.73 586.629 1191.89 c
+527.589 1193.33 494.469 1161.65 457.749 1124.21 c
+421.029 1086.77 376.209 989.427 311.913 942.051 c
+f*
+0.639 0.396 0 rg
+312.957 939.171 m
+249.813 891.939 92.4211 905.907 42.4531 846.147 c
+0.405518 792.579 45.5491 714.531 43.6772 567.867 c
+43.1731 505.875 31.4373 460.371 22.9412 418.611 c
+12.2852 369.435 5.94946 336.675 26.3252 302.907 c
+65.3491 240.843 124.461 236.739 461.997 166.395 c
+642.501 129.099 801.477 34.9231 923.013 28.1553 c
+1032.24 20.9551 1055.35 55.2273 1123.46 115.923 c
+1192.29 177.915 1212.53 158.979 1211.37 285.483 c
+1212.02 420.555 1134.55 456.771 1035.91 613.011 c
+937.269 769.251 921.429 798.051 855.909 901.731 c
+790.389 1003.97 660.789 1189.73 586.629 1191.89 c
+527.589 1193.33 494.469 1161.65 457.749 1124.21 c
+421.029 1086.77 376.749 987.123 312.957 939.171 c
+f*
+0.659 0.416 0 rg
+314.001 936.291 m
+251.685 888.843 97.677 907.635 43.6052 845.355 c
+1.05347 792.363 47.5293 714.891 45.0813 568.335 c
+44.3252 506.667 32.1211 462.171 22.9773 418.611 c
+12.0332 368.967 5.76953 336.747 26.2532 303.375 c
+66.4292 240.879 125.577 242.283 463.041 172.047 c
+643.437 134.823 796.581 42.1592 921.645 36.6873 c
+1028.24 30.2073 1050.67 62.5352 1117.92 122.619 c
+1186.61 184.647 1205.79 165.963 1205.15 287.679 c
+1207.2 422.607 1134.55 456.771 1035.91 613.011 c
+937.269 769.251 921.429 798.051 855.909 901.731 c
+790.389 1003.97 660.789 1189.73 586.629 1191.89 c
+527.589 1193.33 494.469 1161.65 457.749 1124.21 c
+421.029 1086.77 377.289 984.819 314.001 936.291 c
+f*
+0.682 0.439 0 rg
+315.045 933.411 m
+253.557 885.747 102.933 909.363 44.7571 844.563 c
+1.70142 792.147 49.5093 715.251 46.4851 568.803 c
+45.4773 507.459 32.8052 463.971 23.0132 418.611 c
+11.7812 368.499 5.58936 336.819 26.1812 303.843 c
+67.5093 240.915 126.693 247.827 464.085 177.699 c
+644.373 140.547 791.685 49.395 920.277 45.2192 c
+1024.25 39.4592 1045.99 69.843 1112.37 129.315 c
+1180.92 191.379 1199.06 172.947 1198.92 289.875 c
+1202.37 424.659 1134.55 456.771 1035.91 613.011 c
+937.269 769.251 921.429 798.051 855.909 901.731 c
+790.389 1003.97 660.789 1189.73 586.629 1191.89 c
+527.589 1193.33 494.469 1161.65 457.749 1124.21 c
+421.029 1086.77 377.829 982.515 315.045 933.411 c
+f*
+0.702 0.463 0 rg
+316.089 930.531 m
+255.429 882.651 108.189 911.091 45.9092 843.771 c
+2.34937 791.931 51.4893 715.611 47.8892 569.271 c
+46.6292 508.251 33.4893 465.771 23.0491 418.611 c
+11.5291 368.031 5.40942 336.891 26.1091 304.311 c
+68.5891 240.951 127.809 253.371 465.129 183.351 c
+645.309 146.271 786.789 56.6311 918.909 53.7512 c
+1020.25 48.7112 1041.31 77.1511 1106.83 136.011 c
+1175.23 198.111 1192.33 179.931 1192.69 292.071 c
+1197.55 426.711 1134.55 456.771 1035.91 613.011 c
+937.269 769.251 921.429 798.051 855.909 901.731 c
+790.389 1003.97 660.789 1189.73 586.629 1191.89 c
+527.589 1193.33 494.469 1161.65 457.749 1124.21 c
+421.029 1086.77 378.369 980.211 316.089 930.531 c
+f*
+0.722 0.486 0 rg
+317.133 927.651 m
+257.301 879.555 113.445 912.819 47.0613 842.979 c
+2.99731 791.715 53.4692 715.971 49.2932 569.739 c
+47.7812 509.043 34.1731 467.571 23.0852 418.611 c
+11.2771 367.563 5.22949 336.963 26.0371 304.779 c
+69.6692 240.987 128.925 258.915 466.173 189.003 c
+646.245 151.995 781.893 63.8672 917.541 62.283 c
+1016.25 57.9631 1036.63 84.459 1101.29 142.707 c
+1169.54 204.843 1185.6 186.915 1186.46 294.267 c
+1192.73 428.763 1134.55 456.771 1035.91 613.011 c
+937.269 769.251 921.429 798.051 855.909 901.731 c
+790.389 1003.97 660.789 1189.73 586.629 1191.89 c
+527.589 1193.33 494.469 1161.65 457.749 1124.21 c
+421.029 1086.77 378.909 977.907 317.133 927.651 c
+f*
+0.741 0.506 0 rg
+318.177 924.771 m
+259.173 876.459 118.701 914.547 48.2131 842.187 c
+3.64551 791.499 55.4492 716.331 50.6973 570.207 c
+48.9331 509.835 34.8572 469.371 23.1211 418.611 c
+11.0251 367.095 5.04932 337.035 25.9651 305.247 c
+70.7493 241.023 130.041 264.459 467.217 194.655 c
+647.181 157.719 776.997 71.103 916.173 70.8152 c
+1012.26 67.2151 1031.95 91.7671 1095.74 149.403 c
+1163.85 211.575 1178.87 193.899 1180.23 296.463 c
+1187.9 430.815 1134.55 456.771 1035.91 613.011 c
+937.269 769.251 921.429 798.051 855.909 901.731 c
+790.389 1003.97 660.789 1189.73 586.629 1191.89 c
+527.589 1193.33 494.469 1161.65 457.749 1124.21 c
+421.029 1086.77 379.449 975.603 318.177 924.771 c
+f*
+0.761 0.529 0 rg
+319.221 921.891 m
+261.045 873.363 123.957 916.275 49.3652 841.395 c
+4.29346 791.283 57.4292 716.691 52.1011 570.675 c
+50.0852 510.627 35.5413 471.171 23.1572 418.611 c
+10.7732 366.627 4.86938 337.107 25.8931 305.715 c
+71.8291 241.059 131.157 270.003 468.261 200.307 c
+648.117 163.443 772.101 78.3391 914.805 79.3472 c
+1008.26 76.467 1027.27 99.0752 1090.2 156.099 c
+1158.17 218.307 1172.13 200.883 1174.01 298.659 c
+1183.08 432.867 1134.55 456.771 1035.91 613.011 c
+937.269 769.251 921.429 798.051 855.909 901.731 c
+790.389 1003.97 660.789 1189.73 586.629 1191.89 c
+527.589 1193.33 494.469 1161.65 457.749 1124.21 c
+421.029 1086.77 379.989 973.299 319.221 921.891 c
+f*
+0.78 0.553 0 rg
+320.265 919.011 m
+262.917 870.267 129.213 918.003 50.5171 840.603 c
+4.94141 791.067 59.4092 717.051 53.5051 571.143 c
+51.2371 511.419 36.2251 472.971 23.1931 418.611 c
+10.5212 366.159 4.68945 337.179 25.8213 306.183 c
+72.9092 241.095 132.273 275.547 469.305 205.959 c
+649.053 169.167 767.205 85.5752 913.437 87.8792 c
+1004.27 85.719 1022.59 106.383 1084.65 162.795 c
+1152.48 225.039 1165.4 207.867 1167.78 300.855 c
+1178.25 434.919 1134.55 456.771 1035.91 613.011 c
+937.269 769.251 921.429 798.051 855.909 901.731 c
+790.389 1003.97 660.789 1189.73 586.629 1191.89 c
+527.589 1193.33 494.469 1161.65 457.749 1124.21 c
+421.029 1086.77 380.529 970.995 320.265 919.011 c
+f*
+0.8 0.576 0 rg
+321.309 916.131 m
+264.789 867.171 134.469 919.731 51.6692 839.811 c
+5.58936 790.851 61.3892 717.411 54.9092 571.611 c
+52.3892 512.211 36.9092 474.771 23.2292 418.611 c
+10.2693 365.691 4.50952 337.251 25.7493 306.651 c
+73.9893 241.131 133.389 281.091 470.349 211.611 c
+649.989 174.891 762.309 92.811 912.069 96.4111 c
+1000.27 94.9712 1017.91 113.691 1079.11 169.491 c
+1146.79 231.771 1158.67 214.851 1161.55 303.051 c
+1173.43 436.971 1134.55 456.771 1035.91 613.011 c
+937.269 769.251 921.429 798.051 855.909 901.731 c
+790.389 1003.97 660.789 1189.73 586.629 1191.89 c
+527.589 1193.33 494.469 1161.65 457.749 1124.21 c
+421.029 1086.77 381.069 968.691 321.309 916.131 c
+f*
+0.82 0.6 0 rg
+322.353 913.251 m
+266.661 864.075 139.725 921.459 52.8213 839.019 c
+6.2373 790.635 63.3691 717.771 56.3132 572.079 c
+53.5413 513.003 37.5933 476.571 23.2651 418.611 c
+10.0171 365.223 4.32935 337.323 25.6772 307.119 c
+75.0691 241.167 134.505 286.635 471.393 217.263 c
+650.925 180.615 757.413 100.047 910.701 104.943 c
+996.273 104.223 1013.23 120.999 1073.57 176.187 c
+1141.1 238.503 1151.94 221.835 1155.32 305.247 c
+1168.61 439.023 1134.55 456.771 1035.91 613.011 c
+937.269 769.251 921.429 798.051 855.909 901.731 c
+790.389 1003.97 660.789 1189.73 586.629 1191.89 c
+527.589 1193.33 494.469 1161.65 457.749 1124.21 c
+421.029 1086.77 381.609 966.387 322.353 913.251 c
+f*
+0.843 0.62 0 rg
+323.397 910.371 m
+268.533 860.979 144.981 923.187 53.9731 838.227 c
+6.8855 790.419 65.3491 718.131 57.7173 572.547 c
+54.6931 513.795 38.2771 478.371 23.3013 418.611 c
+9.76538 364.755 4.14941 337.395 25.6052 307.587 c
+76.1492 241.203 135.621 292.179 472.437 222.915 c
+651.861 186.339 752.517 107.283 909.333 113.475 c
+992.277 113.475 1008.55 128.307 1068.02 182.883 c
+1135.41 245.235 1145.21 228.819 1149.09 307.443 c
+1163.78 441.075 1134.55 456.771 1035.91 613.011 c
+937.269 769.251 921.429 798.051 855.909 901.731 c
+790.389 1003.97 660.789 1189.73 586.629 1191.89 c
+527.589 1193.33 494.469 1161.65 457.749 1124.21 c
+421.029 1086.77 382.149 964.083 323.397 910.371 c
+f*
+0.863 0.643 0 rg
+324.441 907.491 m
+270.405 857.883 150.237 924.915 55.1252 837.435 c
+7.53345 790.203 67.3291 718.491 59.1211 573.015 c
+55.8452 514.587 38.9612 480.171 23.3372 418.611 c
+9.51343 364.287 3.96948 337.467 25.5332 308.055 c
+77.2292 241.239 136.737 297.723 473.481 228.567 c
+652.797 192.063 747.621 114.519 907.965 122.007 c
+988.281 122.727 1003.87 135.615 1062.48 189.579 c
+1129.73 251.967 1138.47 235.803 1142.87 309.639 c
+1158.96 443.127 1134.55 456.771 1035.91 613.011 c
+937.269 769.251 921.429 798.051 855.909 901.731 c
+790.389 1003.97 660.789 1189.73 586.629 1191.89 c
+527.589 1193.33 494.469 1161.65 457.749 1124.21 c
+421.029 1086.77 382.689 961.779 324.441 907.491 c
+f*
+0.882 0.667 0 rg
+325.485 904.611 m
+272.277 854.787 155.493 926.643 56.2771 836.643 c
+8.1814 789.987 69.3091 718.851 60.5251 573.483 c
+56.9971 515.379 39.6453 481.971 23.3733 418.611 c
+9.26147 363.819 3.78931 337.539 25.4612 308.523 c
+78.3091 241.275 137.853 303.267 474.525 234.219 c
+653.733 197.787 742.725 121.755 906.597 130.539 c
+984.285 131.979 999.189 142.923 1056.93 196.275 c
+1124.04 258.699 1131.74 242.787 1136.64 311.835 c
+1154.13 445.179 1134.55 456.771 1035.91 613.011 c
+937.269 769.251 921.429 798.051 855.909 901.731 c
+790.389 1003.97 660.789 1189.73 586.629 1191.89 c
+527.589 1193.33 494.469 1161.65 457.749 1124.21 c
+421.029 1086.77 383.229 959.475 325.485 904.611 c
+f*
+0.902 0.69 0 rg
+326.529 901.731 m
+274.149 851.691 160.749 928.371 57.4292 835.851 c
+8.82935 789.771 71.2891 719.211 61.9292 573.951 c
+58.1492 516.171 40.3291 483.771 23.4092 418.611 c
+9.00952 363.351 3.60938 337.611 25.3892 308.991 c
+79.3892 241.311 138.969 308.811 475.569 239.871 c
+654.669 203.511 737.829 128.991 905.229 139.071 c
+980.289 141.231 994.509 150.231 1051.39 202.971 c
+1118.35 265.431 1125.01 249.771 1130.41 314.031 c
+1149.31 447.231 1134.55 456.771 1035.91 613.011 c
+937.269 769.251 921.429 798.051 855.909 901.731 c
+790.389 1003.97 660.789 1189.73 586.629 1191.89 c
+527.589 1193.33 494.469 1161.65 457.749 1124.21 c
+421.029 1086.77 383.769 957.171 326.529 901.731 c
+f*
+0.922 0.71 0 rg
+327.573 898.851 m
+276.021 848.595 166.005 930.099 58.5813 835.059 c
+9.47729 789.555 73.2693 719.571 63.3333 574.419 c
+59.3013 516.963 41.0132 485.571 23.4451 418.611 c
+8.75732 362.883 3.42944 337.683 25.3171 309.459 c
+80.4692 241.347 140.085 314.355 476.613 245.523 c
+655.605 209.235 732.933 136.227 903.861 147.603 c
+976.293 150.483 989.829 157.539 1045.85 209.667 c
+1112.66 272.163 1118.28 256.755 1124.18 316.227 c
+1144.49 449.283 1134.55 456.771 1035.91 613.011 c
+937.269 769.251 921.429 798.051 855.909 901.731 c
+790.389 1003.97 660.789 1189.73 586.629 1191.89 c
+527.589 1193.33 494.469 1161.65 457.749 1124.21 c
+421.029 1086.77 384.309 954.867 327.573 898.851 c
+f*
+0.941 0.733 0 rg
+328.617 895.971 m
+277.893 845.499 171.261 931.827 59.7332 834.267 c
+10.1252 789.339 75.2493 719.931 64.7371 574.887 c
+60.4531 517.755 41.6973 487.371 23.4812 418.611 c
+8.50537 362.415 3.24951 337.755 25.2451 309.927 c
+81.5491 241.383 141.201 319.899 477.657 251.175 c
+656.541 214.959 728.037 143.463 902.493 156.135 c
+972.297 159.735 985.149 164.847 1040.3 216.363 c
+1106.97 278.895 1111.55 263.739 1117.95 318.423 c
+1139.66 451.335 1134.55 456.771 1035.91 613.011 c
+937.269 769.251 921.429 798.051 855.909 901.731 c
+790.389 1003.97 660.789 1189.73 586.629 1191.89 c
+527.589 1193.33 494.469 1161.65 457.749 1124.21 c
+421.029 1086.77 384.849 952.563 328.617 895.971 c
+f*
+0.961 0.757 0 rg
+329.661 893.091 m
+279.765 842.403 176.517 933.555 60.8853 833.475 c
+10.7732 789.123 77.2292 720.291 66.1411 575.355 c
+61.6052 518.547 42.3811 489.171 23.5171 418.611 c
+8.25342 361.947 3.06934 337.827 25.1731 310.395 c
+82.6292 241.419 142.317 325.443 478.701 256.827 c
+657.477 220.683 723.141 150.699 901.125 164.667 c
+968.301 168.987 980.469 172.155 1034.76 223.059 c
+1101.29 285.627 1104.81 270.723 1111.73 320.619 c
+1134.84 453.387 1134.55 456.771 1035.91 613.011 c
+937.269 769.251 921.429 798.051 855.909 901.731 c
+790.389 1003.97 660.789 1189.73 586.629 1191.89 c
+527.589 1193.33 494.469 1161.65 457.749 1124.21 c
+421.029 1086.77 385.389 950.259 329.661 893.091 c
+f*
+0.98 0.78 0 rg
+330.705 890.211 m
+281.637 839.307 181.773 935.283 62.0371 832.683 c
+11.4211 788.907 79.2092 720.651 67.5452 575.823 c
+62.7571 519.339 43.0652 490.971 23.5532 418.611 c
+8.00146 361.479 2.8894 337.899 25.1011 310.863 c
+83.7092 241.455 143.433 330.987 479.745 262.479 c
+658.413 226.407 718.245 157.935 899.757 173.199 c
+964.305 178.239 975.789 179.463 1029.21 229.755 c
+1095.6 292.359 1098.08 277.707 1105.5 322.815 c
+1130.01 455.439 1134.55 456.771 1035.91 613.011 c
+937.269 769.251 921.429 798.051 855.909 901.731 c
+790.389 1003.97 660.789 1189.73 586.629 1191.89 c
+527.589 1193.33 494.469 1161.65 457.749 1124.21 c
+421.029 1086.77 385.929 947.955 330.705 890.211 c
+f*
+1 0.8 0 rg
+331.749 887.331 m
+283.509 836.211 187.029 937.011 63.1892 831.891 c
+12.0691 788.691 81.1892 721.011 68.9492 576.291 c
+63.9092 520.131 43.7493 492.771 23.5891 418.611 c
+7.74951 361.011 2.70947 337.971 25.0293 311.331 c
+84.7891 241.491 144.549 336.531 480.789 268.131 c
+659.349 232.131 713.349 165.171 898.389 181.731 c
+960.309 187.491 971.109 186.771 1023.67 236.451 c
+1089.91 299.091 1091.35 284.691 1099.27 325.011 c
+1125.19 457.491 1134.55 456.771 1035.91 613.011 c
+937.269 769.251 921.429 798.051 855.909 901.731 c
+790.389 1003.97 660.789 1189.73 586.629 1191.89 c
+527.589 1193.33 494.469 1161.65 457.749 1124.21 c
+421.029 1086.77 386.469 945.651 331.749 887.331 c
+f*
+362.936 831.072 m
+320.153 785.695 180.138 844.684 114.02 794.772 c
+66.7012 759.767 138.004 715.688 128.281 586.045 c
+124.392 536.782 90.0361 527.705 104.297 459.643 c
+115.318 408.435 126.986 409.73 146.431 386.396 c
+199.584 324.167 187.27 369.544 489.985 308.61 c
+650.094 276.199 699.36 215.914 865.95 230.825 c
+921.696 236.009 932.068 235.363 978.74 280.088 c
+1038.38 335.834 1007.91 324.167 1014.39 359.818 c
+1037.08 478.442 1018.93 499.186 930.123 639.847 c
+841.319 780.511 849.098 788.289 790.758 880.985 c
+732.418 972.382 652.039 1138.97 585.274 1140.27 c
+532.768 1141.57 502.301 1113.05 469.244 1079.34 c
+436.183 1045.63 411.55 882.929 362.936 831.072 c
+f*
+1 0.804 0.008 rg
+365.879 830.164 m
+321.267 783.145 179.831 842.124 115.277 793.11 c
+68.269 757.971 141.06 712.613 131.366 586.311 c
+127.358 537.342 94.0342 527.548 106.783 459.978 c
+116.653 409.046 130.364 410.591 150.122 387.966 c
+206.983 326.651 196.855 369.702 491.314 310.53 c
+650.498 278.426 699.47 218.386 865.039 233.208 c
+920.453 238.333 929.821 237.833 976.586 281.692 c
+1035.24 335.764 1005.18 324.567 1010.71 362.26 c
+1031.38 480.149 1015.14 502.083 928.829 638.765 c
+840.526 778.591 847.402 785.752 789.41 877.895 c
+731.418 968.748 652.403 1135.94 586.036 1137.23 c
+533.842 1138.53 503.557 1110.18 470.697 1076.67 c
+437.833 1043.16 414.26 881.626 365.879 830.164 c
+f*
+1 0.804 0.02 rg
+368.822 829.256 m
+322.381 780.594 179.524 839.565 116.535 791.447 c
+69.8369 756.174 144.115 709.537 134.451 586.578 c
+130.323 537.902 98.0325 527.392 109.269 460.312 c
+117.989 409.657 133.743 411.451 153.812 389.537 c
+214.383 329.134 206.44 369.86 492.644 312.449 c
+650.902 280.653 699.58 220.858 864.128 235.591 c
+919.209 240.657 927.574 240.304 974.432 283.297 c
+1032.1 335.695 1002.45 324.966 1007.03 364.703 c
+1025.68 481.856 1011.34 504.979 927.536 637.683 c
+839.733 776.671 845.707 783.214 788.062 874.805 c
+730.417 965.113 652.766 1132.91 586.797 1134.2 c
+534.917 1135.48 504.813 1107.3 472.15 1073.99 c
+439.483 1040.69 416.971 880.323 368.822 829.256 c
+f*
+1 0.804 0.027 rg
+371.764 828.347 m
+323.495 778.044 179.217 837.005 117.792 789.784 c
+71.4048 754.378 147.171 706.462 137.536 586.844 c
+133.289 538.462 102.031 527.235 111.755 460.647 c
+119.324 410.268 137.121 412.312 157.503 391.107 c
+221.782 331.618 216.025 370.017 493.973 314.369 c
+651.305 282.88 699.69 223.33 863.217 237.975 c
+917.966 242.981 925.326 242.774 972.277 284.901 c
+1028.97 335.625 999.726 325.366 1003.35 367.145 c
+1019.98 483.563 1007.55 507.876 926.243 636.601 c
+838.94 774.75 844.011 780.677 786.714 871.715 c
+729.417 961.479 653.13 1129.88 587.559 1131.16 c
+535.991 1132.44 506.069 1104.43 473.603 1071.32 c
+441.133 1038.21 419.681 879.02 371.764 828.347 c
+f*
+1 0.804 0.039 rg
+374.707 827.439 m
+324.608 775.493 178.91 834.446 119.05 788.122 c
+72.9727 752.581 150.227 703.387 140.621 587.111 c
+136.254 539.022 106.029 527.079 114.241 460.981 c
+120.659 410.88 140.499 413.172 161.194 392.677 c
+229.181 334.101 225.61 370.175 495.303 316.289 c
+651.709 285.107 699.801 225.802 862.306 240.358 c
+916.723 245.304 923.079 245.245 970.123 286.506 c
+1025.83 335.556 996.998 325.766 999.671 369.588 c
+1014.28 485.27 1003.76 510.772 924.949 635.52 c
+838.148 772.83 842.315 778.139 785.366 868.625 c
+728.417 957.844 653.494 1126.86 588.32 1128.13 c
+537.065 1129.39 507.325 1101.55 475.056 1068.65 c
+442.783 1035.74 422.391 877.717 374.707 827.439 c
+f*
+1 0.808 0.047 rg
+377.65 826.531 m
+325.722 772.943 178.602 831.886 120.307 786.459 c
+74.5405 750.785 153.283 700.312 143.707 587.377 c
+139.22 539.582 110.027 526.922 116.726 461.316 c
+121.995 411.491 143.877 414.033 164.885 394.248 c
+236.58 336.585 235.196 370.333 496.632 318.209 c
+652.113 287.334 699.911 228.274 861.395 242.741 c
+915.48 247.628 920.832 247.715 967.969 288.11 c
+1022.69 335.486 994.271 326.165 995.992 372.03 c
+1008.58 486.977 999.967 513.669 923.656 634.438 c
+837.355 770.91 840.62 775.602 784.018 865.535 c
+727.416 954.21 653.857 1123.83 589.082 1125.09 c
+538.14 1126.35 508.581 1098.68 476.508 1065.97 c
+444.433 1033.27 425.102 876.414 377.65 826.531 c
+f*
+1 0.808 0.059 rg
+380.593 825.623 m
+326.836 770.392 178.295 829.327 121.565 784.797 c
+76.1084 748.988 156.339 697.236 146.792 587.644 c
+142.186 540.142 114.025 526.765 119.212 461.651 c
+123.33 412.102 147.256 414.893 168.575 395.818 c
+243.98 339.068 244.781 370.49 497.962 320.128 c
+652.517 289.561 700.021 230.747 860.484 245.124 c
+914.236 249.952 918.585 250.185 965.815 289.714 c
+1019.55 335.416 991.543 326.565 992.312 374.473 c
+1002.88 488.684 996.175 516.566 922.362 633.356 c
+836.562 768.99 838.924 773.064 782.67 862.445 c
+726.416 950.575 654.221 1120.8 589.843 1122.05 c
+539.214 1123.31 509.837 1095.8 477.961 1063.3 c
+446.082 1030.8 427.812 875.111 380.593 825.623 c
+f*
+1 0.808 0.067 rg
+383.536 824.715 m
+327.95 767.842 177.988 826.767 122.822 783.134 c
+77.6763 747.192 159.394 694.161 149.877 587.91 c
+145.151 540.702 118.023 526.609 121.698 461.985 c
+124.665 412.713 150.634 415.753 172.266 397.388 c
+251.379 341.552 254.366 370.648 499.291 322.048 c
+652.921 291.788 700.131 233.219 859.573 247.507 c
+912.993 252.276 916.338 252.656 963.661 291.319 c
+1016.42 335.347 988.815 326.965 988.632 376.915 c
+997.186 490.391 992.383 519.462 921.069 632.274 c
+835.769 767.07 837.228 770.527 781.322 859.355 c
+725.415 946.941 654.585 1117.77 590.605 1119.02 c
+540.288 1120.26 511.093 1092.93 479.414 1060.63 c
+447.732 1028.32 430.522 873.808 383.536 824.715 c
+f*
+1 0.808 0.078 rg
+386.478 823.806 m
+329.064 765.291 177.681 824.208 124.08 781.472 c
+79.2441 745.395 162.45 691.086 152.962 588.177 c
+148.117 541.262 122.021 526.452 124.184 462.32 c
+126 413.324 154.012 416.614 175.957 398.959 c
+258.778 344.035 263.951 370.806 500.621 323.968 c
+653.324 294.015 700.241 235.691 858.662 249.891 c
+911.75 254.6 914.09 255.126 961.506 292.923 c
+1013.28 335.277 986.088 327.364 984.952 379.358 c
+991.486 492.098 988.59 522.359 919.775 631.192 c
+834.976 765.149 835.532 767.989 779.974 856.265 c
+724.415 943.306 654.948 1114.74 591.366 1115.98 c
+541.363 1117.22 512.349 1090.05 480.867 1057.95 c
+449.382 1025.85 433.233 872.505 386.478 823.806 c
+f*
+1 0.812 0.09 rg
+389.421 822.898 m
+330.178 762.741 177.374 821.648 125.337 779.809 c
+80.8118 743.599 165.506 688.01 156.047 588.443 c
+151.082 541.822 126.019 526.296 126.67 462.654 c
+127.336 413.935 157.391 417.474 179.648 400.529 c
+266.177 346.519 273.536 370.964 501.95 325.888 c
+653.728 296.242 700.351 238.163 857.751 252.274 c
+910.506 256.924 911.843 257.597 959.352 294.528 c
+1010.14 335.208 983.36 327.764 981.273 381.8 c
+985.787 493.805 984.798 525.255 918.482 630.11 c
+834.183 763.229 833.837 765.452 778.626 853.176 c
+723.415 939.672 655.312 1111.71 592.128 1112.95 c
+542.437 1114.17 513.605 1087.18 482.32 1055.28 c
+451.032 1023.38 435.943 871.202 389.421 822.898 c
+f*
+1 0.812 0.098 rg
+392.364 821.99 m
+331.292 760.191 177.067 819.088 126.595 778.147 c
+82.3796 741.803 168.561 684.935 159.132 588.709 c
+154.048 542.382 130.018 526.139 129.156 462.989 c
+128.671 414.547 160.769 418.335 183.338 402.099 c
+273.577 349.002 283.121 371.122 503.279 327.808 c
+654.132 298.47 700.462 240.635 856.84 254.657 c
+909.263 259.248 909.596 260.067 957.198 296.132 c
+1007 335.138 980.632 328.163 977.593 384.242 c
+980.088 495.513 981.005 528.152 917.188 629.028 c
+833.391 761.309 832.141 762.915 777.278 850.086 c
+722.414 936.037 655.676 1108.68 592.889 1109.91 c
+543.512 1111.13 514.861 1084.3 483.773 1052.6 c
+452.682 1020.91 438.653 869.899 392.364 821.99 c
+f*
+1 0.812 0.11 rg
+395.307 821.082 m
+332.405 757.64 176.76 816.529 127.852 776.484 c
+83.9475 740.006 171.617 681.86 162.217 588.976 c
+157.014 542.942 134.016 525.982 131.641 463.324 c
+130.006 415.158 164.147 419.196 187.029 403.67 c
+280.976 351.486 292.706 371.279 504.609 329.727 c
+654.536 300.697 700.572 243.107 855.928 257.04 c
+908.02 261.571 907.349 262.537 955.044 297.736 c
+1003.86 335.068 977.905 328.563 973.913 386.685 c
+974.389 497.22 977.212 531.049 915.895 627.947 c
+832.598 759.389 830.445 760.377 775.929 846.996 c
+721.414 932.403 656.039 1105.66 593.651 1106.87 c
+544.586 1108.09 516.118 1081.43 485.226 1049.93 c
+454.332 1018.44 441.364 868.596 395.307 821.082 c
+f*
+1 0.812 0.118 rg
+398.25 820.174 m
+333.519 755.09 176.453 813.969 129.109 774.821 c
+85.5154 738.21 174.673 678.784 165.302 589.242 c
+159.979 543.502 138.014 525.826 134.127 463.658 c
+131.342 415.769 167.526 420.056 190.72 405.24 c
+288.375 353.97 302.291 371.437 505.938 331.647 c
+654.94 302.924 700.682 245.579 855.017 259.423 c
+906.776 263.895 905.102 265.008 952.89 299.341 c
+1000.73 334.999 975.177 328.963 970.234 389.127 c
+968.69 498.927 973.42 533.945 914.602 626.865 c
+831.805 757.469 828.75 757.84 774.581 843.906 c
+720.414 928.769 656.403 1102.63 594.413 1103.84 c
+545.66 1105.04 517.374 1078.56 486.679 1047.26 c
+455.982 1015.96 444.074 867.294 398.25 820.174 c
+f*
+1 0.816 0.129 rg
+401.192 819.265 m
+334.633 752.539 176.146 811.41 130.367 773.159 c
+87.0833 736.413 177.729 675.709 168.387 589.509 c
+162.945 544.062 142.012 525.669 136.613 463.993 c
+132.677 416.38 170.904 420.917 194.411 406.811 c
+295.774 356.453 311.876 371.595 507.268 333.567 c
+655.343 305.151 700.792 248.051 854.106 261.807 c
+905.533 266.219 902.854 267.478 950.735 300.945 c
+997.589 334.929 972.45 329.362 966.554 391.57 c
+962.99 500.634 969.627 536.842 913.308 625.783 c
+831.012 755.548 827.054 755.302 773.233 840.816 c
+719.413 925.134 656.766 1099.6 595.174 1100.8 c
+546.735 1102 518.63 1075.68 488.132 1044.58 c
+457.632 1013.49 446.785 865.991 401.192 819.265 c
+f*
+1 0.816 0.137 rg
+404.135 818.357 m
+335.747 749.989 175.839 808.85 131.624 771.496 c
+88.6511 734.617 180.784 672.634 171.472 589.775 c
+165.91 544.622 146.01 525.513 139.099 464.327 c
+134.012 416.991 174.282 421.777 198.102 408.381 c
+303.174 358.937 321.461 371.753 508.597 335.486 c
+655.747 307.378 700.902 250.523 853.195 264.19 c
+904.29 268.543 900.607 269.949 948.581 302.55 c
+994.452 334.86 969.722 329.762 962.874 394.012 c
+957.291 502.341 965.835 539.738 912.015 624.701 c
+830.219 753.628 825.358 752.765 771.885 837.726 c
+718.413 921.5 657.13 1096.57 595.936 1097.77 c
+547.809 1098.95 519.886 1072.81 489.585 1041.91 c
+459.282 1011.02 449.495 864.688 404.135 818.357 c
+f*
+1 0.816 0.149 rg
+407.078 817.449 m
+336.861 747.438 175.532 806.291 132.882 769.834 c
+90.219 732.82 183.84 669.558 174.557 590.042 c
+168.876 545.182 150.008 525.356 141.585 464.662 c
+135.347 417.602 177.661 422.637 201.792 409.951 c
+310.573 361.42 331.047 371.91 509.927 337.406 c
+656.151 309.605 701.012 252.996 852.284 266.573 c
+903.046 270.867 898.36 272.419 946.427 304.154 c
+991.314 334.79 966.994 330.162 959.194 396.455 c
+951.592 504.048 962.042 542.635 910.721 623.619 c
+829.426 751.708 823.662 750.227 770.537 834.636 c
+717.413 917.865 657.494 1093.54 596.697 1094.73 c
+548.883 1095.91 521.142 1069.93 491.038 1039.24 c
+460.931 1008.55 452.205 863.385 407.078 817.449 c
+f*
+1 0.816 0.157 rg
+410.021 816.541 m
+337.975 744.888 175.224 803.731 134.139 768.171 c
+91.7869 731.024 186.896 666.483 177.643 590.308 c
+171.842 545.742 154.006 525.199 144.071 464.997 c
+136.683 418.213 181.039 423.498 205.483 411.522 c
+317.972 363.904 340.632 372.068 511.256 339.326 c
+656.555 311.832 701.122 255.468 851.373 268.956 c
+901.803 273.191 896.113 274.889 944.273 305.758 c
+988.176 334.72 964.267 330.561 955.515 398.897 c
+945.893 505.755 958.25 545.532 909.428 622.537 c
+828.633 749.788 821.967 747.69 769.189 831.546 c
+716.412 914.231 657.857 1090.51 597.459 1091.69 c
+549.958 1092.87 522.398 1067.06 492.49 1036.56 c
+462.581 1006.07 454.916 862.082 410.021 816.541 c
+f*
+1 0.82 0.169 rg
+412.964 815.633 m
+339.088 742.337 174.917 801.172 135.397 766.509 c
+93.3547 729.227 189.952 663.408 180.728 590.575 c
+174.807 546.302 158.005 525.043 146.556 465.331 c
+138.018 418.825 184.417 424.358 209.174 413.092 c
+325.371 366.387 350.217 372.226 512.586 341.246 c
+656.959 314.059 701.233 257.94 850.462 271.339 c
+900.56 275.514 893.866 277.36 942.119 307.363 c
+985.038 334.651 961.539 330.961 951.835 401.34 c
+940.194 507.462 954.457 548.428 908.134 621.456 c
+827.841 747.868 820.271 745.152 767.841 828.456 c
+715.412 910.596 658.221 1087.49 598.22 1088.66 c
+551.032 1089.82 523.654 1064.18 493.943 1033.89 c
+464.231 1003.6 457.626 860.779 412.964 815.633 c
+f*
+1 0.82 0.18 rg
+415.906 814.724 m
+340.202 739.787 174.61 798.612 136.654 764.846 c
+94.9224 727.431 193.007 660.333 183.813 590.841 c
+177.773 546.862 162.003 524.886 149.042 465.666 c
+139.353 419.436 187.795 425.219 212.864 414.662 c
+332.771 368.871 359.802 372.383 513.915 343.166 c
+657.362 316.286 701.343 260.412 849.551 273.723 c
+899.317 277.838 891.618 279.83 939.964 308.967 c
+981.9 334.581 958.811 331.361 948.155 403.782 c
+934.494 509.169 950.665 551.325 906.841 620.374 c
+827.048 745.947 818.575 742.615 766.493 825.366 c
+714.412 906.962 658.585 1084.46 598.982 1085.62 c
+552.106 1086.78 524.91 1061.31 495.396 1031.22 c
+465.881 1001.13 460.336 859.476 415.906 814.724 c
+f*
+1 0.82 0.188 rg
+418.849 813.816 m
+341.316 737.236 174.303 796.053 137.912 763.184 c
+96.4905 725.634 196.063 657.257 186.898 591.108 c
+180.738 547.422 166.001 524.73 151.528 466 c
+140.689 420.047 191.174 426.079 216.555 416.233 c
+340.17 371.354 369.387 372.541 515.245 345.085 c
+657.766 318.513 701.453 262.884 848.64 276.106 c
+898.073 280.162 889.371 282.301 937.81 310.572 c
+978.763 334.512 956.084 331.76 944.476 406.225 c
+928.795 510.876 946.872 554.221 905.547 619.292 c
+826.255 744.027 816.88 740.077 765.145 822.276 c
+713.411 903.327 658.948 1081.43 599.743 1082.59 c
+553.181 1083.73 526.166 1058.43 496.849 1028.54 c
+467.531 998.657 463.047 858.173 418.849 813.816 c
+f*
+1 0.82 0.2 rg
+421.792 812.908 m
+342.43 734.686 173.996 793.493 139.169 761.521 c
+98.0581 723.838 199.119 654.182 189.983 591.374 c
+183.704 547.982 169.999 524.573 154.014 466.335 c
+142.024 420.658 194.552 426.94 220.246 417.803 c
+347.569 373.838 378.972 372.699 516.574 347.005 c
+658.17 320.74 701.563 265.356 847.729 278.489 c
+896.83 282.486 887.124 284.771 935.656 312.176 c
+975.625 334.442 953.356 332.16 940.796 408.667 c
+923.096 512.583 943.08 557.118 904.254 618.21 c
+825.462 742.107 815.184 737.54 763.797 819.186 c
+712.411 899.693 659.312 1078.4 600.505 1079.55 c
+554.255 1080.69 527.422 1055.56 498.302 1025.87 c
+469.181 996.185 465.757 856.87 421.792 812.908 c
+f*
+0 g
+673.749 1494.29 m
+664.389 1473.41 656.469 1294.13 703.269 1224.29 c
+750.069 1155.17 736.389 1115.57 684.549 1168.13 c
+630.549 1219.25 595.269 1296.29 594.549 1349.57 c
+594.549 1380.53 618.309 1507.97 627.669 1521.65 c
+637.749 1536.05 680.949 1510.13 673.749 1494.29 c
+f*
+0.012 g
+672.849 1490.8 m
+663.813 1467.4 656.289 1293.81 702.945 1224.11 c
+749.601 1155.1 734.805 1119.21 684.549 1170.54 c
+632.241 1220.51 598.473 1295.25 597.141 1348.42 c
+596.709 1379.56 619.497 1502.61 628.461 1516.32 c
+638.073 1530.25 679.725 1506.42 672.849 1490.8 c
+f*
+0.027 g
+671.949 1487.31 m
+663.237 1461.39 656.109 1293.48 702.621 1223.93 c
+749.133 1155.03 733.221 1122.84 684.549 1172.95 c
+633.933 1221.77 601.677 1294.2 599.733 1347.27 c
+598.869 1378.59 620.685 1497.24 629.253 1510.99 c
+638.397 1524.46 678.501 1502.71 671.949 1487.31 c
+f*
+0.043 g
+671.049 1483.81 m
+662.661 1455.37 655.929 1293.16 702.297 1223.75 c
+748.665 1154.95 731.637 1126.48 684.549 1175.37 c
+635.625 1223.03 604.881 1293.16 602.325 1346.11 c
+601.029 1377.61 621.873 1491.88 630.045 1505.67 c
+638.721 1518.66 677.277 1499.01 671.049 1483.81 c
+f*
+0.059 g
+670.149 1480.32 m
+662.085 1449.36 655.749 1292.83 701.973 1223.57 c
+748.197 1154.88 730.053 1130.11 684.549 1177.78 c
+637.317 1224.29 608.085 1292.11 604.917 1344.96 c
+603.189 1376.64 623.061 1486.51 630.837 1500.34 c
+639.045 1512.87 676.053 1495.3 670.149 1480.32 c
+f*
+0.075 g
+669.249 1476.83 m
+661.509 1443.35 655.569 1292.51 701.649 1223.39 c
+747.729 1154.81 728.469 1133.75 684.549 1180.19 c
+639.009 1225.55 611.289 1291.07 607.509 1343.81 c
+605.349 1375.67 624.249 1481.15 631.629 1495.01 c
+639.369 1507.07 674.829 1491.59 669.249 1476.83 c
+f*
+0.09 g
+668.349 1473.34 m
+660.933 1437.34 655.389 1292.19 701.325 1223.21 c
+747.261 1154.74 726.885 1137.39 684.549 1182.6 c
+640.701 1226.81 614.493 1290.03 610.101 1342.66 c
+607.509 1374.7 625.437 1475.79 632.421 1489.68 c
+639.693 1501.27 673.605 1487.88 668.349 1473.34 c
+f*
+0.102 g
+667.449 1469.85 m
+660.357 1431.33 655.209 1291.86 701.001 1223.03 c
+746.793 1154.67 725.301 1141.02 684.549 1185.01 c
+642.393 1228.07 617.697 1288.98 612.693 1341.51 c
+609.669 1373.73 626.625 1470.42 633.213 1484.35 c
+640.017 1495.48 672.381 1484.17 667.449 1469.85 c
+f*
+0.118 g
+666.549 1466.35 m
+659.781 1425.31 655.029 1291.54 700.677 1222.85 c
+746.325 1154.59 723.717 1144.66 684.549 1187.43 c
+644.085 1229.33 620.901 1287.94 615.285 1340.35 c
+611.829 1372.75 627.813 1465.06 634.005 1479.03 c
+640.341 1489.68 671.157 1480.47 666.549 1466.35 c
+f*
+0.133 g
+665.649 1462.86 m
+659.205 1419.3 654.849 1291.21 700.353 1222.67 c
+745.857 1154.52 722.133 1148.29 684.549 1189.84 c
+645.777 1230.59 624.105 1286.89 617.877 1339.2 c
+613.989 1371.78 629.001 1459.69 634.797 1473.7 c
+640.665 1483.89 669.933 1476.76 665.649 1462.86 c
+f*
+0.149 g
+664.749 1459.37 m
+658.629 1413.29 654.669 1290.89 700.029 1222.49 c
+745.389 1154.45 720.549 1151.93 684.549 1192.25 c
+647.469 1231.85 627.309 1285.85 620.469 1338.05 c
+616.149 1370.81 630.189 1454.33 635.589 1468.37 c
+640.989 1478.09 668.709 1473.05 664.749 1459.37 c
+f*
+0.165 g
+663.849 1455.88 m
+658.053 1407.28 654.489 1290.57 699.705 1222.31 c
+744.921 1154.38 718.965 1155.57 684.549 1194.66 c
+649.161 1233.11 630.513 1284.81 623.061 1336.9 c
+618.309 1369.84 631.377 1448.97 636.381 1463.04 c
+641.313 1472.29 667.485 1469.34 663.849 1455.88 c
+f*
+0.18 g
+662.949 1452.39 m
+657.477 1401.27 654.309 1290.24 699.381 1222.13 c
+744.453 1154.31 717.381 1159.2 684.549 1197.07 c
+650.853 1234.37 633.717 1283.76 625.653 1335.75 c
+620.469 1368.87 632.565 1443.6 637.173 1457.71 c
+641.637 1466.5 666.261 1465.63 662.949 1452.39 c
+f*
+0.192 g
+662.049 1448.89 m
+656.901 1395.25 654.129 1289.92 699.057 1221.95 c
+743.985 1154.23 715.797 1162.84 684.549 1199.49 c
+652.545 1235.63 636.921 1282.72 628.245 1334.59 c
+622.629 1367.89 633.753 1438.24 637.965 1452.39 c
+641.961 1460.7 665.037 1461.93 662.049 1448.89 c
+f*
+0.208 g
+661.149 1445.4 m
+656.325 1389.24 653.949 1289.59 698.733 1221.77 c
+743.517 1154.16 714.213 1166.47 684.549 1201.9 c
+654.237 1236.89 640.125 1281.67 630.837 1333.44 c
+624.789 1366.92 634.941 1432.87 638.757 1447.06 c
+642.285 1454.91 663.813 1458.22 661.149 1445.4 c
+f*
+0.224 g
+660.249 1441.91 m
+655.749 1383.23 653.769 1289.27 698.409 1221.59 c
+743.049 1154.09 712.629 1170.11 684.549 1204.31 c
+655.929 1238.15 643.329 1280.63 633.429 1332.29 c
+626.949 1365.95 636.129 1427.51 639.549 1441.73 c
+642.609 1449.11 662.589 1454.51 660.249 1441.91 c
+f*
+0.239 g
+659.349 1438.42 m
+655.173 1377.22 653.589 1288.95 698.085 1221.41 c
+742.581 1154.02 711.045 1173.75 684.549 1206.72 c
+657.621 1239.41 646.533 1279.59 636.021 1331.14 c
+629.109 1364.98 637.317 1422.15 640.341 1436.4 c
+642.933 1443.31 661.365 1450.8 659.349 1438.42 c
+f*
+0.255 g
+658.449 1434.93 m
+654.597 1371.21 653.409 1288.62 697.761 1221.23 c
+742.113 1153.95 709.461 1177.38 684.549 1209.13 c
+659.313 1240.67 649.737 1278.54 638.613 1329.99 c
+631.269 1364.01 638.505 1416.78 641.133 1431.07 c
+643.257 1437.52 660.141 1447.09 658.449 1434.93 c
+f*
+0.271 g
+657.549 1431.43 m
+654.021 1365.19 653.229 1288.3 697.437 1221.05 c
+741.645 1153.87 707.877 1181.02 684.549 1211.55 c
+661.005 1241.93 652.941 1277.5 641.205 1328.83 c
+633.429 1363.03 639.693 1411.42 641.925 1425.75 c
+643.581 1431.72 658.917 1443.39 657.549 1431.43 c
+f*
+0.282 g
+656.649 1427.94 m
+653.445 1359.18 653.049 1287.97 697.113 1220.87 c
+741.177 1153.8 706.293 1184.65 684.549 1213.96 c
+662.697 1243.19 656.145 1276.45 643.797 1327.68 c
+635.589 1362.06 640.881 1406.05 642.717 1420.42 c
+643.905 1425.93 657.693 1439.68 656.649 1427.94 c
+f*
+0.298 g
+655.749 1424.45 m
+652.869 1353.17 652.869 1287.65 696.789 1220.69 c
+740.709 1153.73 704.709 1188.29 684.549 1216.37 c
+664.389 1244.45 659.349 1275.41 646.389 1326.53 c
+637.749 1361.09 642.069 1400.69 643.509 1415.09 c
+644.229 1420.13 656.469 1435.97 655.749 1424.45 c
+f*
+0 g
+673.749 1494.29 m
+716.949 1588.61 740.709 1690.13 802.629 1788.77 c
+863.829 1886.69 839.349 1924.85 793.989 1875.17 c
+748.629 1825.49 698.949 1720.37 698.949 1720.37 c
+698.949 1720.37 640.629 1628.21 627.669 1521.65 c
+625.509 1503.65 666.549 1479.17 673.749 1494.29 c
+f*
+0.008 g
+675.601 1500.4 m
+718.397 1595.39 741.756 1692.86 801.458 1788.42 c
+860.476 1883.29 837.553 1921.21 793.825 1873.13 c
+749.794 1824.67 700.812 1720.78 700.146 1719.32 c
+700.146 1719.32 643.773 1629.41 631.371 1526.93 c
+629.288 1509.23 668.579 1485.49 675.601 1500.4 c
+f*
+0.02 g
+677.452 1506.51 m
+719.844 1602.17 742.803 1695.6 800.286 1788.07 c
+857.122 1879.89 835.757 1917.57 793.661 1871.1 c
+750.96 1823.84 702.675 1721.18 701.343 1718.27 c
+701.343 1718.27 646.918 1630.61 635.072 1532.22 c
+633.068 1514.81 670.609 1491.81 677.452 1506.51 c
+f*
+0.027 g
+679.304 1512.61 m
+721.292 1608.95 743.85 1698.33 799.115 1787.72 c
+853.769 1876.49 833.96 1913.92 793.497 1869.06 c
+752.125 1823.02 704.539 1721.59 702.541 1717.23 c
+702.541 1717.23 650.062 1631.81 638.773 1537.5 c
+636.847 1520.39 672.639 1498.13 679.304 1512.61 c
+f*
+0.039 g
+681.155 1518.72 m
+722.74 1615.73 744.896 1701.07 797.944 1787.37 c
+850.416 1873.09 832.164 1910.28 793.333 1867.02 c
+753.291 1822.19 706.402 1721.99 703.738 1716.18 c
+703.738 1716.18 653.206 1633 642.475 1542.79 c
+640.626 1525.97 674.669 1504.45 681.155 1518.72 c
+f*
+0.047 g
+683.007 1524.83 m
+724.187 1622.51 745.943 1703.8 796.773 1787.02 c
+847.063 1869.69 830.368 1906.64 793.169 1864.99 c
+754.456 1821.37 708.265 1722.4 704.935 1715.13 c
+704.935 1715.13 656.351 1634.2 646.176 1548.07 c
+644.405 1531.55 676.699 1510.77 683.007 1524.83 c
+f*
+0.059 g
+684.859 1530.94 m
+725.635 1629.3 746.99 1706.54 795.602 1786.67 c
+843.709 1866.29 828.572 1902.99 793.005 1862.95 c
+755.622 1820.55 710.128 1722.8 706.133 1714.08 c
+706.133 1714.08 659.495 1635.4 649.878 1553.36 c
+648.185 1537.13 678.729 1517.08 684.859 1530.94 c
+f*
+0.067 g
+686.71 1537.05 m
+727.083 1636.08 748.037 1709.27 794.43 1786.32 c
+840.356 1862.89 826.776 1899.35 792.841 1860.91 c
+756.787 1819.72 711.992 1723.21 707.33 1713.03 c
+707.33 1713.03 662.639 1636.6 653.579 1558.65 c
+651.964 1542.71 680.759 1523.4 686.71 1537.05 c
+f*
+0.078 g
+688.562 1543.15 m
+728.53 1642.86 749.084 1712.01 793.259 1785.97 c
+837.003 1859.49 824.98 1895.71 792.677 1858.88 c
+757.953 1818.9 713.855 1723.61 708.527 1711.99 c
+708.527 1711.99 665.784 1637.8 657.281 1563.93 c
+655.743 1548.29 682.789 1529.72 688.562 1543.15 c
+f*
+0.09 g
+690.413 1549.26 m
+729.978 1649.64 750.131 1714.74 792.088 1785.62 c
+833.65 1856.09 823.184 1892.07 792.513 1856.84 c
+759.118 1818.07 715.718 1724.02 709.724 1710.94 c
+709.724 1710.94 668.928 1639 660.983 1569.21 c
+659.523 1553.87 684.819 1536.04 690.413 1549.26 c
+f*
+0.098 g
+692.265 1555.37 m
+731.425 1656.42 751.178 1717.47 790.917 1785.26 c
+830.296 1852.7 821.387 1888.42 792.35 1854.8 c
+760.284 1817.25 717.581 1724.43 710.921 1709.89 c
+710.921 1709.89 672.073 1640.2 664.684 1574.5 c
+663.302 1559.45 686.85 1542.36 692.265 1555.37 c
+f*
+0.11 g
+694.117 1561.48 m
+732.873 1663.2 752.224 1720.21 789.745 1784.91 c
+826.943 1849.3 819.591 1884.78 792.186 1852.77 c
+761.45 1816.43 719.445 1724.83 712.119 1708.84 c
+712.119 1708.84 675.217 1641.39 668.385 1579.79 c
+667.081 1565.02 688.88 1548.68 694.117 1561.48 c
+f*
+0.118 g
+695.968 1567.59 m
+734.321 1669.98 753.271 1722.94 788.574 1784.56 c
+823.59 1845.9 817.795 1881.14 792.022 1850.73 c
+762.615 1815.6 721.308 1725.24 713.316 1707.79 c
+713.316 1707.79 678.361 1642.59 672.087 1585.07 c
+670.861 1570.6 690.91 1555 695.968 1567.59 c
+f*
+0.129 g
+697.82 1573.69 m
+735.768 1676.76 754.318 1725.68 787.403 1784.21 c
+820.237 1842.5 815.999 1877.5 791.858 1848.7 c
+763.781 1814.78 723.171 1725.64 714.513 1706.75 c
+714.513 1706.75 681.506 1643.79 675.788 1590.35 c
+674.64 1576.18 692.94 1561.32 697.82 1573.69 c
+f*
+0.137 g
+699.671 1579.8 m
+737.216 1683.54 755.365 1728.41 786.232 1783.86 c
+816.883 1839.1 814.203 1873.85 791.694 1846.66 c
+764.946 1813.95 725.034 1726.05 715.71 1705.7 c
+715.71 1705.7 684.65 1644.99 679.49 1595.64 c
+678.419 1581.76 694.97 1567.64 699.671 1579.8 c
+f*
+0.149 g
+701.523 1585.91 m
+738.664 1690.33 756.412 1731.15 785.06 1783.51 c
+813.53 1835.7 812.407 1870.21 791.53 1844.62 c
+766.112 1813.13 726.898 1726.45 716.908 1704.65 c
+716.908 1704.65 687.794 1646.19 683.192 1600.92 c
+682.198 1587.34 697 1573.95 701.523 1585.91 c
+f*
+0.157 g
+703.375 1592.02 m
+740.111 1697.11 757.459 1733.88 783.889 1783.16 c
+810.177 1832.3 810.611 1866.57 791.366 1842.59 c
+767.277 1812.31 728.761 1726.86 718.105 1703.6 c
+718.105 1703.6 690.939 1647.39 686.893 1606.21 c
+685.978 1592.92 699.03 1580.27 703.375 1592.02 c
+f*
+0.169 g
+705.226 1598.13 m
+741.559 1703.89 758.505 1736.62 782.718 1782.81 c
+806.824 1828.9 808.814 1862.93 791.202 1840.55 c
+768.443 1811.48 730.624 1727.26 719.302 1702.55 c
+719.302 1702.55 694.083 1648.58 690.594 1611.5 c
+689.757 1598.5 701.06 1586.59 705.226 1598.13 c
+f*
+0.18 g
+707.078 1604.23 m
+743.007 1710.67 759.552 1739.35 781.547 1782.46 c
+803.47 1825.5 807.018 1859.28 791.038 1838.51 c
+769.608 1810.66 732.487 1727.67 720.499 1701.51 c
+720.499 1701.51 697.227 1649.78 694.296 1616.78 c
+693.536 1604.08 703.09 1592.91 707.078 1604.23 c
+f*
+0.188 g
+708.929 1610.34 m
+744.454 1717.45 760.599 1742.09 780.375 1782.11 c
+800.117 1822.1 805.222 1855.64 790.874 1836.48 c
+770.774 1809.83 734.351 1728.07 721.697 1700.46 c
+721.697 1700.46 700.372 1650.98 697.998 1622.06 c
+697.316 1609.66 705.12 1599.23 708.929 1610.34 c
+f*
+0.2 g
+710.781 1616.45 m
+745.902 1724.23 761.646 1744.82 779.204 1781.76 c
+796.764 1818.7 803.426 1852 790.71 1834.44 c
+771.939 1809.01 736.214 1728.48 722.894 1699.41 c
+722.894 1699.41 703.516 1652.18 701.699 1627.35 c
+701.095 1615.24 707.15 1605.55 710.781 1616.45 c
+f*
+0 g
+2516.23 1425.17 m
+2537.11 1484.21 2534.95 1634.69 2481.67 1731.89 c
+2462.95 1767.17 2444.95 1808.21 2434.15 1810.37 c
+2422.63 1812.53 2401.75 1789.49 2403.91 1785.89 c
+2406.79 1780.13 2503.99 1643.33 2483.83 1457.57 c
+2482.39 1442.45 2511.19 1411.49 2516.23 1425.17 c
+f*
+0.012 g
+2515.29 1432.8 m
+2535.55 1489.98 2532.82 1636.6 2481.86 1729.43 c
+2463.7 1763.5 2446.5 1803.16 2435.91 1805.33 c
+2424.69 1807.46 2404.66 1785.11 2406.66 1781.65 c
+2409.24 1776.03 2502.71 1643.88 2483.95 1464.13 c
+2482.64 1449.25 2510.41 1419.57 2515.29 1432.8 c
+f*
+0.027 g
+2514.34 1440.43 m
+2533.99 1495.76 2530.7 1638.5 2482.05 1726.97 c
+2464.44 1759.82 2448.05 1798.11 2437.66 1800.28 c
+2426.75 1802.4 2407.57 1780.73 2409.41 1777.41 c
+2411.68 1771.93 2501.43 1644.43 2484.07 1470.7 c
+2482.9 1456.05 2509.63 1427.65 2514.34 1440.43 c
+f*
+0.043 g
+2513.4 1448.06 m
+2532.44 1501.53 2528.57 1640.4 2482.25 1724.5 c
+2465.19 1756.15 2449.59 1793.07 2439.42 1795.24 c
+2428.81 1797.33 2410.47 1776.34 2412.16 1773.17 c
+2414.13 1767.83 2500.15 1644.98 2484.19 1477.26 c
+2483.15 1462.85 2508.85 1435.73 2513.4 1448.06 c
+f*
+0.059 g
+2512.45 1455.68 m
+2530.88 1507.3 2526.44 1642.31 2482.44 1722.04 c
+2465.94 1752.48 2451.14 1788.02 2441.17 1790.19 c
+2430.87 1792.26 2413.38 1771.96 2414.91 1768.93 c
+2416.58 1763.73 2498.87 1645.53 2484.31 1483.82 c
+2483.41 1469.66 2508.07 1443.81 2512.45 1455.68 c
+f*
+0.075 g
+2511.5 1463.31 m
+2529.32 1513.07 2524.31 1644.21 2482.63 1719.58 c
+2466.68 1748.81 2452.69 1782.97 2442.93 1785.15 c
+2432.93 1787.2 2416.29 1767.58 2417.66 1764.69 c
+2419.02 1759.64 2497.58 1646.08 2484.43 1490.38 c
+2483.66 1476.46 2507.29 1451.89 2511.5 1463.31 c
+f*
+0.09 g
+2510.56 1470.94 m
+2527.76 1518.85 2522.18 1646.12 2482.82 1717.12 c
+2467.43 1745.13 2454.24 1777.92 2444.68 1780.1 c
+2434.99 1782.13 2419.2 1763.2 2420.41 1760.46 c
+2421.47 1755.54 2496.3 1646.63 2484.56 1496.95 c
+2483.92 1483.26 2506.51 1459.96 2510.56 1470.94 c
+f*
+0.102 g
+2509.62 1478.57 m
+2526.2 1524.62 2520.06 1648.03 2483.01 1714.65 c
+2468.18 1741.46 2455.79 1772.88 2446.44 1775.06 c
+2437.05 1777.06 2422.1 1758.82 2423.16 1756.22 c
+2423.92 1751.44 2495.02 1647.18 2484.68 1503.51 c
+2484.17 1490.06 2505.73 1468.04 2509.62 1478.57 c
+f*
+0.118 g
+2508.67 1486.2 m
+2524.65 1530.39 2517.93 1649.93 2483.21 1712.19 c
+2468.92 1737.79 2457.33 1767.83 2448.19 1770.01 c
+2439.11 1772 2425.01 1754.43 2425.91 1751.98 c
+2426.36 1747.34 2493.74 1647.73 2484.8 1510.07 c
+2484.43 1496.86 2504.95 1476.12 2508.67 1486.2 c
+f*
+0.133 g
+2507.73 1493.83 m
+2523.09 1536.16 2515.8 1651.84 2483.4 1709.73 c
+2469.67 1734.12 2458.88 1762.78 2449.95 1764.97 c
+2441.17 1766.93 2427.92 1750.05 2428.66 1747.74 c
+2428.81 1743.24 2492.46 1648.28 2484.92 1516.63 c
+2484.68 1503.66 2504.17 1484.2 2507.73 1493.83 c
+f*
+0.149 g
+2506.78 1501.46 m
+2521.53 1541.94 2513.67 1653.74 2483.59 1707.27 c
+2470.42 1730.44 2460.43 1757.73 2451.71 1759.92 c
+2443.24 1761.86 2430.83 1745.67 2431.42 1743.5 c
+2431.26 1739.14 2491.18 1648.83 2485.04 1523.2 c
+2484.93 1510.47 2503.4 1492.28 2506.78 1501.46 c
+f*
+0.165 g
+2505.83 1509.08 m
+2519.97 1547.71 2511.55 1655.64 2483.78 1704.8 c
+2471.16 1726.77 2461.98 1752.69 2453.46 1754.88 c
+2445.3 1756.8 2433.73 1741.29 2434.17 1739.26 c
+2433.7 1735.04 2489.9 1649.37 2485.16 1529.76 c
+2485.19 1517.27 2502.62 1500.36 2505.83 1509.08 c
+f*
+0.18 g
+2504.89 1516.71 m
+2518.41 1553.48 2509.42 1657.55 2483.97 1702.34 c
+2471.91 1723.1 2463.53 1747.64 2455.22 1749.84 c
+2447.36 1751.73 2436.64 1736.91 2436.92 1735.02 c
+2436.15 1730.94 2488.62 1649.92 2485.28 1536.32 c
+2485.44 1524.07 2501.84 1508.44 2504.89 1516.71 c
+f*
+0.192 g
+2503.95 1524.34 m
+2516.86 1559.25 2507.29 1659.45 2484.17 1699.88 c
+2472.65 1719.43 2465.07 1742.59 2456.97 1744.79 c
+2449.42 1746.67 2439.55 1732.52 2439.67 1730.78 c
+2438.59 1726.84 2487.34 1650.47 2485.4 1542.88 c
+2485.7 1530.87 2501.06 1516.52 2503.95 1524.34 c
+f*
+0.208 g
+2503 1531.97 m
+2515.3 1565.03 2505.16 1661.36 2484.36 1697.42 c
+2473.4 1715.76 2466.62 1737.55 2458.73 1739.75 c
+2451.48 1741.6 2442.45 1728.14 2442.42 1726.54 c
+2441.04 1722.74 2486.06 1651.02 2485.52 1549.45 c
+2485.95 1537.67 2500.28 1524.6 2503 1531.97 c
+f*
+0.224 g
+2502.06 1539.6 m
+2513.74 1570.8 2503.04 1663.27 2484.55 1694.95 c
+2474.15 1712.08 2468.17 1732.5 2460.48 1734.7 c
+2453.54 1736.53 2445.36 1723.76 2445.17 1722.3 c
+2443.49 1718.65 2484.78 1651.57 2485.64 1556.01 c
+2486.21 1544.47 2499.5 1532.68 2502.06 1539.6 c
+f*
+0.239 g
+2501.11 1547.23 m
+2512.18 1576.57 2500.91 1665.17 2484.74 1692.49 c
+2474.89 1708.41 2469.72 1727.45 2462.24 1729.66 c
+2455.6 1731.47 2448.27 1719.38 2447.92 1718.07 c
+2445.93 1714.55 2483.49 1652.12 2485.77 1562.57 c
+2486.46 1551.27 2498.72 1540.75 2501.11 1547.23 c
+f*
+0.255 g
+2500.16 1554.85 m
+2510.62 1582.34 2498.78 1667.08 2484.93 1690.03 c
+2475.64 1704.74 2471.27 1722.4 2463.99 1724.61 c
+2457.66 1726.4 2451.18 1715 2450.67 1713.83 c
+2448.38 1710.45 2482.21 1652.67 2485.89 1569.13 c
+2486.72 1558.08 2497.94 1548.83 2500.16 1554.85 c
+f*
+0.271 g
+2499.22 1562.48 m
+2509.07 1588.12 2496.66 1668.98 2485.13 1687.57 c
+2476.39 1701.06 2472.81 1717.36 2465.75 1719.57 c
+2459.72 1721.33 2454.09 1710.61 2453.42 1709.59 c
+2450.83 1706.35 2480.93 1653.22 2486.01 1575.7 c
+2486.97 1564.88 2497.16 1556.91 2499.22 1562.48 c
+f*
+0.282 g
+2498.27 1570.11 m
+2507.51 1593.89 2494.53 1670.89 2485.32 1685.1 c
+2477.13 1697.39 2474.36 1712.31 2467.5 1714.52 c
+2461.78 1716.27 2456.99 1706.23 2456.17 1705.35 c
+2453.27 1702.25 2479.65 1653.77 2486.13 1582.26 c
+2487.23 1571.68 2496.38 1564.99 2498.27 1570.11 c
+f*
+0.298 g
+2497.33 1577.74 m
+2505.95 1599.66 2492.4 1672.79 2485.51 1682.64 c
+2477.88 1693.72 2475.91 1707.26 2469.26 1709.48 c
+2463.84 1711.2 2459.9 1701.85 2458.92 1701.11 c
+2455.72 1698.15 2478.37 1654.32 2486.25 1588.82 c
+2487.48 1578.48 2495.6 1573.07 2497.33 1577.74 c
+f*
+0 g
+2434.15 1810.37 m
+2331.91 1950.05 2199.43 1995.41 2213.11 1951.49 c
+2213.11 1951.49 2314.63 1893.89 2403.91 1785.89 c
+2421.19 1765.01 2449.99 1788.77 2434.15 1810.37 c
+f*
+0.012 g
+2429.65 1814.24 m
+2330.41 1949.19 2200.71 1993.35 2214.26 1951.23 c
+2214.43 1951.12 2313.27 1895.1 2400.35 1790.52 c
+2417.13 1770.37 2445.01 1793.38 2429.65 1814.24 c
+f*
+0.027 g
+2425.15 1818.1 m
+2328.91 1948.33 2201.98 1991.29 2215.4 1950.97 c
+2215.75 1950.75 2311.92 1896.3 2396.79 1795.15 c
+2413.07 1775.72 2440.04 1797.98 2425.15 1818.1 c
+f*
+0.043 g
+2420.65 1821.97 m
+2327.41 1947.46 2203.26 1989.23 2216.55 1950.71 c
+2217.08 1950.38 2310.56 1897.51 2393.23 1799.79 c
+2409.01 1781.08 2435.06 1802.59 2420.65 1821.97 c
+f*
+0.059 g
+2416.14 1825.84 m
+2325.91 1946.6 2204.53 1987.17 2217.69 1950.45 c
+2218.4 1950.01 2309.2 1898.72 2389.67 1804.42 c
+2404.95 1786.44 2430.09 1807.19 2416.14 1825.84 c
+f*
+0.075 g
+2411.64 1829.71 m
+2324.4 1945.74 2205.81 1985.12 2218.83 1950.19 c
+2219.72 1949.64 2307.85 1899.93 2386.11 1809.05 c
+2400.89 1791.79 2425.11 1811.8 2411.64 1829.71 c
+f*
+0.09 g
+2407.14 1833.57 m
+2322.9 1944.88 2207.08 1983.06 2219.98 1949.93 c
+2221.04 1949.27 2306.49 1901.13 2382.54 1813.68 c
+2396.83 1797.15 2420.13 1816.41 2407.14 1833.57 c
+f*
+0.102 g
+2402.64 1837.44 m
+2321.4 1944.01 2208.36 1981 2221.13 1949.67 c
+2222.36 1948.9 2305.13 1902.34 2378.98 1818.31 c
+2392.77 1802.51 2415.16 1821.01 2402.64 1837.44 c
+f*
+0.118 g
+2398.14 1841.31 m
+2319.9 1943.15 2209.63 1978.94 2222.27 1949.41 c
+2223.69 1948.53 2303.77 1903.55 2375.42 1822.95 c
+2388.71 1807.86 2410.18 1825.62 2398.14 1841.31 c
+f*
+0.133 g
+2393.64 1845.17 m
+2318.4 1942.29 2210.91 1976.88 2223.42 1949.15 c
+2225.01 1948.16 2302.42 1904.75 2371.86 1827.58 c
+2384.65 1813.22 2405.21 1830.22 2393.64 1845.17 c
+f*
+0.149 g
+2389.13 1849.04 m
+2316.9 1941.43 2212.19 1974.82 2224.56 1948.89 c
+2226.33 1947.79 2301.06 1905.96 2368.3 1832.21 c
+2380.59 1818.58 2400.23 1834.83 2389.13 1849.04 c
+f*
+0.165 g
+2384.63 1852.91 m
+2315.4 1940.56 2213.46 1972.76 2225.7 1948.64 c
+2227.65 1947.41 2299.7 1907.17 2364.74 1836.84 c
+2376.52 1823.93 2395.25 1839.44 2384.63 1852.91 c
+f*
+0.18 g
+2380.13 1856.77 m
+2313.9 1939.7 2214.74 1970.7 2226.85 1948.38 c
+2228.97 1947.04 2298.35 1908.37 2361.18 1841.47 c
+2372.46 1829.29 2390.28 1844.04 2380.13 1856.77 c
+f*
+0.192 g
+2375.63 1860.64 m
+2312.4 1938.84 2216.01 1968.64 2227.99 1948.12 c
+2230.3 1946.67 2296.99 1909.58 2357.62 1846.11 c
+2368.4 1834.64 2385.3 1848.65 2375.63 1860.64 c
+f*
+0.208 g
+2371.13 1864.51 m
+2310.9 1937.98 2217.29 1966.58 2229.14 1947.86 c
+2231.62 1946.3 2295.63 1910.79 2354.06 1850.74 c
+2364.34 1840 2380.33 1853.25 2371.13 1864.51 c
+f*
+0.224 g
+2366.63 1868.37 m
+2309.39 1937.11 2218.56 1964.52 2230.29 1947.6 c
+2232.94 1945.93 2294.27 1911.99 2350.49 1855.37 c
+2360.28 1845.36 2375.35 1857.86 2366.63 1868.37 c
+f*
+0.239 g
+2362.13 1872.24 m
+2307.89 1936.25 2219.84 1962.47 2231.43 1947.34 c
+2234.26 1945.56 2292.92 1913.2 2346.93 1860 c
+2356.22 1850.71 2370.37 1862.47 2362.13 1872.24 c
+f*
+0.255 g
+2357.62 1876.11 m
+2306.39 1935.39 2221.11 1960.41 2232.57 1947.08 c
+2235.58 1945.19 2291.56 1914.41 2343.37 1864.63 c
+2352.16 1856.07 2365.4 1867.07 2357.62 1876.11 c
+f*
+0.271 g
+2353.12 1879.98 m
+2304.89 1934.52 2222.39 1958.35 2233.72 1946.82 c
+2236.91 1944.82 2290.2 1915.62 2339.81 1869.27 c
+2348.1 1861.43 2360.42 1871.68 2353.12 1879.98 c
+f*
+0.282 g
+2348.62 1883.84 m
+2303.39 1933.66 2223.66 1956.29 2234.86 1946.56 c
+2238.23 1944.45 2288.85 1916.82 2336.25 1873.9 c
+2344.04 1866.78 2355.45 1876.28 2348.62 1883.84 c
+f*
+0.298 g
+2344.12 1887.71 m
+2301.89 1932.8 2224.94 1954.23 2236.01 1946.3 c
+2239.55 1944.08 2287.49 1918.03 2332.69 1878.53 c
+2339.98 1872.14 2350.47 1880.89 2344.12 1887.71 c
+f*
+0 g
+2516.23 1425.17 m
+2517.67 1362.53 2458.63 1202.69 2436.31 1208.45 c
+2411.11 1214.21 2441.35 1261.01 2464.39 1340.21 c
+2473.75 1373.33 2480.95 1454.69 2483.83 1457.57 c
+2493.19 1466.93 2516.23 1440.29 2516.23 1425.17 c
+f*
+0.02 g
+2514.39 1419.95 m
+2515.42 1359.12 2458.02 1204.02 2436.43 1209.77 c
+2412.21 1215.44 2441.9 1261.23 2464.57 1339.06 c
+2473.56 1370.82 2480.52 1448.53 2483.44 1451.54 c
+2492.57 1460.81 2514.9 1436.27 2514.39 1419.95 c
+f*
+0.039 g
+2512.55 1414.74 m
+2513.17 1355.72 2457.41 1205.35 2436.54 1211.09 c
+2413.31 1216.68 2442.45 1261.45 2464.75 1337.9 c
+2473.36 1368.32 2480.09 1442.37 2483.05 1445.51 c
+2491.94 1454.7 2513.57 1432.25 2512.55 1414.74 c
+f*
+0.059 g
+2510.71 1409.52 m
+2510.92 1352.31 2456.8 1206.67 2436.66 1212.41 c
+2414.41 1217.91 2443.01 1261.67 2464.93 1336.74 c
+2473.17 1365.81 2479.66 1436.21 2482.66 1439.48 c
+2491.32 1448.58 2512.25 1428.23 2510.71 1409.52 c
+f*
+0.078 g
+2508.87 1404.31 m
+2508.66 1348.9 2456.19 1208 2436.77 1213.73 c
+2415.52 1219.14 2443.56 1261.89 2465.11 1335.59 c
+2472.97 1363.31 2479.23 1430.05 2482.28 1433.46 c
+2490.69 1442.47 2510.92 1424.22 2508.87 1404.31 c
+f*
+0.098 g
+2507.03 1399.09 m
+2506.41 1345.49 2455.58 1209.33 2436.89 1215.05 c
+2416.62 1220.37 2444.11 1262.11 2465.29 1334.43 c
+2472.78 1360.8 2478.8 1423.89 2481.89 1427.43 c
+2490.07 1436.35 2509.59 1420.2 2507.03 1399.09 c
+f*
+0.118 g
+2505.19 1393.87 m
+2504.16 1342.09 2454.96 1210.65 2437 1216.37 c
+2417.72 1221.61 2444.66 1262.33 2465.48 1333.28 c
+2472.59 1358.3 2478.38 1417.73 2481.5 1421.4 c
+2489.44 1430.24 2508.26 1416.18 2505.19 1393.87 c
+f*
+0.137 g
+2503.35 1388.66 m
+2501.91 1338.68 2454.35 1211.98 2437.12 1217.69 c
+2418.82 1222.84 2445.21 1262.55 2465.66 1332.12 c
+2472.39 1355.79 2477.95 1411.57 2481.11 1415.37 c
+2488.82 1424.12 2506.93 1412.16 2503.35 1388.66 c
+f*
+0.157 g
+2501.51 1383.44 m
+2499.66 1335.27 2453.74 1213.31 2437.23 1219.01 c
+2419.92 1224.07 2445.77 1262.77 2465.84 1330.97 c
+2472.2 1353.29 2477.52 1405.41 2480.72 1409.34 c
+2488.19 1418.01 2505.61 1408.14 2501.51 1383.44 c
+f*
+0.18 g
+2499.67 1378.23 m
+2497.41 1331.86 2453.13 1214.64 2437.35 1220.33 c
+2421.02 1225.31 2446.32 1262.99 2466.02 1329.81 c
+2472 1350.78 2477.09 1399.25 2480.33 1403.31 c
+2487.57 1411.89 2504.28 1404.12 2499.67 1378.23 c
+f*
+0.2 g
+2497.83 1373.01 m
+2495.16 1328.46 2452.52 1215.96 2437.46 1221.65 c
+2422.12 1226.54 2446.87 1263.22 2466.2 1328.66 c
+2471.81 1348.27 2476.66 1393.09 2479.95 1397.29 c
+2486.95 1405.77 2502.95 1400.1 2497.83 1373.01 c
+f*
+0.22 g
+2495.99 1367.79 m
+2492.9 1325.05 2451.91 1217.29 2437.58 1222.98 c
+2423.23 1227.77 2447.42 1263.44 2466.38 1327.51 c
+2471.62 1345.77 2476.23 1386.92 2479.56 1391.26 c
+2486.32 1399.66 2501.62 1396.09 2495.99 1367.79 c
+f*
+0.239 g
+2494.15 1362.58 m
+2490.65 1321.64 2451.3 1218.62 2437.7 1224.3 c
+2424.33 1229.01 2447.97 1263.66 2466.56 1326.35 c
+2471.42 1343.26 2475.8 1380.76 2479.17 1385.23 c
+2485.7 1393.54 2500.29 1392.07 2494.15 1362.58 c
+f*
+0.259 g
+2492.31 1357.36 m
+2488.4 1318.23 2450.69 1219.95 2437.81 1225.62 c
+2425.43 1230.24 2448.53 1263.88 2466.74 1325.2 c
+2471.23 1340.76 2475.37 1374.6 2478.78 1379.2 c
+2485.07 1387.43 2498.97 1388.05 2492.31 1357.36 c
+f*
+0.278 g
+2490.47 1352.15 m
+2486.15 1314.82 2450.08 1221.28 2437.93 1226.94 c
+2426.53 1231.47 2449.08 1264.1 2466.92 1324.04 c
+2471.03 1338.25 2474.94 1368.44 2478.39 1373.17 c
+2484.45 1381.31 2497.64 1384.03 2490.47 1352.15 c
+f*
+0.298 g
+2488.63 1346.93 m
+2483.9 1311.42 2449.47 1222.6 2438.04 1228.26 c
+2427.63 1232.71 2449.63 1264.32 2467.1 1322.88 c
+2470.84 1335.75 2474.52 1362.28 2478 1367.14 c
+2483.82 1375.2 2496.31 1380.01 2488.63 1346.93 c
+f*
+0.318 g
+2486.79 1341.71 m
+2481.65 1308.01 2448.85 1223.93 2438.16 1229.58 c
+2428.73 1233.94 2450.18 1264.54 2467.29 1321.73 c
+2470.65 1333.24 2474.09 1356.12 2477.61 1361.11 c
+2483.2 1369.08 2494.98 1375.99 2486.79 1341.71 c
+f*
+0.341 g
+2484.95 1336.5 m
+2479.39 1304.6 2448.24 1225.26 2438.27 1230.9 c
+2429.84 1235.17 2450.73 1264.76 2467.47 1320.57 c
+2470.45 1330.74 2473.66 1349.96 2477.23 1355.09 c
+2482.57 1362.97 2493.65 1371.98 2484.95 1336.5 c
+f*
+0.361 g
+2483.11 1331.28 m
+2477.14 1301.2 2447.63 1226.59 2438.39 1232.22 c
+2430.94 1236.4 2451.29 1264.98 2467.65 1319.42 c
+2470.26 1328.23 2473.23 1343.8 2476.84 1349.06 c
+2481.95 1356.85 2492.33 1367.96 2483.11 1331.28 c
+f*
+0.38 g
+2481.27 1326.07 m
+2474.89 1297.79 2447.02 1227.91 2438.5 1233.54 c
+2432.04 1237.64 2451.84 1265.2 2467.83 1318.26 c
+2470.06 1325.73 2472.8 1337.64 2476.45 1343.03 c
+2481.32 1350.74 2491 1363.94 2481.27 1326.07 c
+f*
+0.4 g
+2479.43 1320.85 m
+2472.64 1294.38 2446.41 1229.24 2438.62 1234.86 c
+2433.14 1238.87 2452.39 1265.42 2468.01 1317.11 c
+2469.87 1323.22 2472.37 1331.48 2476.06 1337 c
+2480.7 1344.62 2489.67 1359.92 2479.43 1320.85 c
+f*
+0 g
+2296.63 1802.45 m
+2281.26 1786.23 2267.6 1702.54 2306.02 1673.51 c
+2344.45 1645.33 2411.91 1697.42 2411.91 1727.31 c
+2411.05 1794.77 2312 1819.53 2296.63 1802.45 c
+f*
+0.008 g
+2298 1801.05 m
+2282.4 1784.93 2269.24 1702.82 2306.57 1674.38 c
+2343.89 1646.75 2410.06 1697.11 2410.41 1727.17 c
+2409.94 1792.92 2313.59 1817.99 2298 1801.05 c
+f*
+0.012 g
+2299.37 1799.64 m
+2283.55 1783.64 2270.87 1703.11 2307.11 1675.25 c
+2343.32 1648.17 2408.2 1696.8 2408.9 1727.03 c
+2408.82 1791.07 2315.19 1816.46 2299.37 1799.64 c
+f*
+0.02 g
+2300.73 1798.24 m
+2284.69 1782.34 2272.51 1703.39 2307.66 1676.12 c
+2342.76 1649.59 2406.35 1696.49 2407.4 1726.89 c
+2407.71 1789.22 2316.78 1814.93 2300.73 1798.24 c
+f*
+0.027 g
+2302.1 1796.83 m
+2285.84 1781.05 2274.15 1703.68 2308.21 1676.99 c
+2342.19 1651 2404.5 1696.19 2405.89 1726.75 c
+2406.6 1787.37 2318.38 1813.39 2302.1 1796.83 c
+f*
+0.035 g
+2303.47 1795.43 m
+2286.98 1779.75 2275.79 1703.96 2308.76 1677.86 c
+2341.63 1652.42 2402.65 1695.88 2404.39 1726.61 c
+2405.48 1785.52 2319.97 1811.86 2303.47 1795.43 c
+f*
+0.043 g
+2304.84 1794.03 m
+2288.13 1778.46 2277.42 1704.25 2309.3 1678.74 c
+2341.06 1653.84 2400.79 1695.57 2402.88 1726.47 c
+2404.37 1783.67 2321.57 1810.32 2304.84 1794.03 c
+f*
+0.051 g
+2306.21 1792.62 m
+2289.27 1777.16 2279.06 1704.53 2309.85 1679.61 c
+2340.49 1655.26 2398.94 1695.26 2401.38 1726.33 c
+2403.26 1781.82 2323.16 1808.78 2306.21 1792.62 c
+f*
+0.059 g
+2307.57 1791.22 m
+2290.42 1775.87 2280.7 1704.82 2310.4 1680.48 c
+2339.93 1656.68 2397.09 1694.95 2399.87 1726.19 c
+2402.14 1779.97 2324.76 1807.25 2307.57 1791.22 c
+f*
+0.067 g
+2308.94 1789.81 m
+2291.56 1774.57 2282.34 1705.1 2310.94 1681.35 c
+2339.37 1658.1 2395.24 1694.64 2398.37 1726.05 c
+2401.03 1778.12 2326.35 1805.72 2308.94 1789.81 c
+f*
+0.075 g
+2310.31 1788.41 m
+2292.71 1773.27 2283.97 1705.38 2311.49 1682.22 c
+2338.8 1659.52 2393.39 1694.34 2396.86 1725.91 c
+2399.92 1776.27 2327.95 1804.18 2310.31 1788.41 c
+f*
+0.082 g
+2311.68 1787.01 m
+2293.85 1771.98 2285.61 1705.67 2312.04 1683.09 c
+2338.24 1660.93 2391.53 1694.03 2395.36 1725.77 c
+2398.8 1774.42 2329.54 1802.64 2311.68 1787.01 c
+f*
+0.09 g
+2313.05 1785.6 m
+2294.99 1770.68 2287.25 1705.95 2312.58 1683.96 c
+2337.67 1662.35 2389.68 1693.72 2393.86 1725.63 c
+2397.69 1772.57 2331.14 1801.11 2313.05 1785.6 c
+f*
+0.098 g
+2314.41 1784.2 m
+2296.14 1769.39 2288.89 1706.24 2313.13 1684.83 c
+2337.11 1663.77 2387.83 1693.41 2392.35 1725.49 c
+2396.57 1770.72 2332.73 1799.58 2314.41 1784.2 c
+f*
+0.102 g
+2315.78 1782.79 m
+2297.28 1768.09 2290.53 1706.52 2313.68 1685.7 c
+2336.54 1665.19 2385.97 1693.1 2390.85 1725.35 c
+2395.46 1768.87 2334.33 1798.04 2315.78 1782.79 c
+f*
+0.11 g
+2317.15 1781.39 m
+2298.43 1766.8 2292.16 1706.81 2314.23 1686.58 c
+2335.98 1666.61 2384.12 1692.79 2389.34 1725.21 c
+2394.35 1767.02 2335.92 1796.5 2317.15 1781.39 c
+f*
+0.118 g
+2318.52 1779.99 m
+2299.57 1765.5 2293.8 1707.09 2314.77 1687.45 c
+2335.41 1668.03 2382.27 1692.48 2387.84 1725.07 c
+2393.23 1765.17 2337.52 1794.97 2318.52 1779.99 c
+f*
+0.125 g
+2319.89 1778.58 m
+2300.72 1764.21 2295.44 1707.38 2315.32 1688.32 c
+2334.84 1669.44 2380.42 1692.18 2386.33 1724.93 c
+2392.12 1763.32 2339.11 1793.43 2319.89 1778.58 c
+f*
+0.133 g
+2321.25 1777.18 m
+2301.86 1762.91 2297.08 1707.66 2315.87 1689.19 c
+2334.28 1670.86 2378.56 1691.87 2384.83 1724.79 c
+2391.01 1761.47 2340.71 1791.9 2321.25 1777.18 c
+f*
+0.141 g
+2322.62 1775.77 m
+2303.01 1761.62 2298.71 1707.95 2316.41 1690.06 c
+2333.72 1672.28 2376.71 1691.56 2383.32 1724.65 c
+2389.89 1759.62 2342.3 1790.36 2322.62 1775.77 c
+f*
+0.149 g
+2323.99 1774.37 m
+2304.15 1760.32 2300.35 1708.23 2316.96 1690.93 c
+2333.15 1673.7 2374.86 1691.25 2381.82 1724.51 c
+2388.78 1757.77 2343.9 1788.83 2323.99 1774.37 c
+f*
+0 g
+2293.03 1114.13 m
+2308.15 1099.01 2321.11 1136.45 2336.23 1148.69 c
+2351.35 1160.93 2375.83 1187.57 2424.79 1187.57 c
+2473.75 1187.57 2470.15 1189.01 2467.99 1207.73 c
+2466.55 1225.73 2452.15 1224.29 2408.95 1217.81 c
+2365.75 1212.05 2336.95 1189.73 2319.67 1169.57 c
+2303.11 1150.13 2284.39 1122.77 2293.03 1114.13 c
+f*
+0.02 g
+2296.36 1117.81 m
+2310.95 1103.31 2323.39 1139.01 2338.41 1150.87 c
+2353.42 1162.74 2377.71 1188.19 2424.8 1188.2 c
+2471.9 1188.2 2468.95 1189.47 2466.88 1207.59 c
+2465.51 1225.03 2451.46 1223.52 2409.39 1217.39 c
+2367.33 1211.96 2339.11 1190.37 2322.28 1170.91 c
+2306.13 1152.13 2287.9 1126.15 2296.36 1117.81 c
+f*
+0.039 g
+2299.69 1121.48 m
+2313.75 1107.6 2325.67 1141.56 2340.58 1153.05 c
+2355.49 1164.54 2379.59 1188.82 2424.82 1188.83 c
+2470.04 1188.84 2467.74 1189.93 2465.78 1207.45 c
+2464.46 1224.33 2450.77 1222.75 2409.84 1216.97 c
+2368.92 1211.86 2341.27 1191 2324.88 1172.24 c
+2309.15 1154.13 2291.42 1129.54 2299.69 1121.48 c
+f*
+0.059 g
+2303.02 1125.16 m
+2316.55 1111.9 2327.96 1144.12 2342.76 1155.23 c
+2357.56 1166.35 2381.47 1189.44 2424.83 1189.46 c
+2468.19 1189.47 2466.54 1190.39 2464.67 1207.31 c
+2463.42 1223.62 2450.07 1221.98 2410.29 1216.55 c
+2370.5 1211.76 2343.43 1191.64 2327.49 1173.58 c
+2312.17 1156.13 2294.93 1132.92 2303.02 1125.16 c
+f*
+0.078 g
+2306.34 1128.84 m
+2319.36 1116.2 2330.24 1146.67 2344.93 1157.42 c
+2359.62 1168.16 2383.35 1190.06 2424.84 1190.08 c
+2466.33 1190.11 2465.34 1190.85 2463.57 1207.18 c
+2462.38 1222.92 2449.38 1221.21 2410.73 1216.13 c
+2372.08 1211.67 2345.58 1192.28 2330.1 1174.91 c
+2315.19 1158.13 2298.45 1136.31 2306.34 1128.84 c
+f*
+0.098 g
+2309.67 1132.52 m
+2322.16 1120.49 2332.52 1149.23 2347.11 1159.6 c
+2361.69 1169.97 2385.23 1190.69 2424.85 1190.71 c
+2464.48 1190.74 2464.13 1191.32 2462.46 1207.04 c
+2461.33 1222.22 2448.69 1220.44 2411.18 1215.7 c
+2373.67 1211.58 2347.74 1192.91 2332.71 1176.25 c
+2318.22 1160.13 2301.96 1139.69 2309.67 1132.52 c
+f*
+0.118 g
+2313 1136.19 m
+2324.96 1124.79 2334.8 1151.78 2349.28 1161.78 c
+2363.76 1171.78 2387.11 1191.31 2424.86 1191.34 c
+2462.63 1191.37 2462.93 1191.78 2461.36 1206.9 c
+2460.29 1221.52 2448 1219.67 2411.62 1215.28 c
+2375.25 1211.48 2349.9 1193.55 2335.31 1177.59 c
+2321.24 1162.13 2305.47 1143.08 2313 1136.19 c
+f*
+0.137 g
+2316.33 1139.87 m
+2327.76 1129.09 2337.09 1154.34 2351.46 1163.96 c
+2365.83 1173.58 2388.99 1191.93 2424.88 1191.97 c
+2460.77 1192.01 2461.73 1192.24 2460.25 1206.76 c
+2459.25 1220.82 2447.31 1218.9 2412.06 1214.86 c
+2376.83 1211.39 2352.06 1194.19 2337.92 1178.92 c
+2324.26 1164.13 2308.99 1146.46 2316.33 1139.87 c
+f*
+0.157 g
+2319.66 1143.55 m
+2330.56 1133.38 2339.37 1156.89 2353.63 1166.14 c
+2367.9 1175.39 2390.87 1192.56 2424.89 1192.6 c
+2458.92 1192.64 2460.53 1192.7 2459.15 1206.62 c
+2458.2 1220.11 2446.61 1218.13 2412.51 1214.44 c
+2378.41 1211.29 2354.22 1194.82 2340.53 1180.26 c
+2327.28 1166.13 2312.5 1149.85 2319.66 1143.55 c
+f*
+0.18 g
+2322.99 1147.23 m
+2333.36 1137.68 2341.65 1159.45 2355.81 1168.32 c
+2369.97 1177.2 2392.75 1193.18 2424.9 1193.23 c
+2457.06 1193.28 2459.32 1193.16 2458.04 1206.48 c
+2457.16 1219.41 2445.92 1217.36 2412.96 1214.02 c
+2380 1211.19 2356.38 1195.46 2343.14 1181.59 c
+2330.3 1168.13 2316.02 1153.23 2322.99 1147.23 c
+f*
+0.2 g
+2326.32 1150.9 m
+2336.17 1141.98 2343.93 1162.01 2357.98 1170.51 c
+2372.03 1179 2394.62 1193.81 2424.92 1193.85 c
+2455.21 1193.91 2458.12 1193.62 2456.93 1206.35 c
+2456.11 1218.71 2445.23 1216.59 2413.4 1213.6 c
+2381.58 1211.1 2358.54 1196.09 2345.74 1182.93 c
+2333.32 1170.12 2319.53 1156.61 2326.32 1150.9 c
+f*
+0.22 g
+2329.64 1154.58 m
+2338.97 1146.27 2346.22 1164.56 2360.16 1172.69 c
+2374.1 1180.81 2396.5 1194.43 2424.93 1194.48 c
+2453.36 1194.54 2456.92 1194.08 2455.83 1206.21 c
+2455.07 1218.01 2444.54 1215.82 2413.85 1213.18 c
+2383.16 1211.01 2360.69 1196.73 2348.35 1184.27 c
+2336.34 1172.12 2323.04 1160 2329.64 1154.58 c
+f*
+0.239 g
+2332.97 1158.26 m
+2341.77 1150.57 2348.5 1167.12 2362.34 1174.87 c
+2376.17 1182.62 2398.38 1195.05 2424.94 1195.11 c
+2451.5 1195.18 2455.71 1194.54 2454.72 1206.07 c
+2454.03 1217.31 2443.85 1215.05 2414.29 1212.76 c
+2384.75 1210.91 2362.85 1197.37 2350.96 1185.6 c
+2339.36 1174.12 2326.56 1163.38 2332.97 1158.26 c
+f*
+0.259 g
+2336.3 1161.94 m
+2344.57 1154.86 2350.78 1169.67 2364.51 1177.05 c
+2378.24 1184.43 2400.26 1195.68 2424.95 1195.74 c
+2449.65 1195.81 2454.51 1195 2453.62 1205.93 c
+2452.98 1216.6 2443.15 1214.28 2414.74 1212.34 c
+2386.33 1210.81 2365.01 1198 2353.57 1186.94 c
+2342.38 1176.12 2330.07 1166.77 2336.3 1161.94 c
+f*
+0.278 g
+2339.63 1165.62 m
+2347.37 1159.16 2353.06 1172.23 2366.69 1179.23 c
+2380.31 1186.23 2402.14 1196.3 2424.97 1196.37 c
+2447.79 1196.45 2453.31 1195.46 2452.51 1205.79 c
+2451.94 1215.9 2442.46 1213.51 2415.18 1211.92 c
+2387.91 1210.72 2367.17 1198.64 2356.18 1188.27 c
+2345.4 1178.12 2333.59 1170.15 2339.63 1165.62 c
+f*
+0.298 g
+2342.96 1169.29 m
+2350.17 1163.46 2355.35 1174.78 2368.86 1181.41 c
+2382.38 1188.04 2404.02 1196.92 2424.98 1197 c
+2445.94 1197.08 2452.1 1195.92 2451.41 1205.65 c
+2450.9 1215.2 2441.77 1212.74 2415.62 1211.5 c
+2389.49 1210.62 2369.33 1199.28 2358.78 1189.61 c
+2348.42 1180.12 2337.1 1173.54 2342.96 1169.29 c
+f*
+0.318 g
+2346.29 1172.97 m
+2352.97 1167.75 2357.63 1177.34 2371.04 1183.59 c
+2384.45 1189.85 2405.9 1197.55 2424.99 1197.63 c
+2444.09 1197.71 2450.9 1196.39 2450.3 1205.51 c
+2449.85 1214.5 2441.08 1211.97 2416.07 1211.07 c
+2391.08 1210.53 2371.49 1199.91 2361.39 1190.95 c
+2351.45 1182.12 2340.61 1176.92 2346.29 1172.97 c
+f*
+0.341 g
+2349.61 1176.65 m
+2355.78 1172.05 2359.91 1179.89 2373.21 1185.78 c
+2386.51 1191.66 2407.78 1198.17 2425 1198.25 c
+2442.23 1198.35 2449.7 1196.85 2449.2 1205.38 c
+2448.81 1213.8 2440.39 1211.2 2416.52 1210.65 c
+2392.66 1210.44 2373.64 1200.55 2364 1192.28 c
+2354.47 1184.12 2344.13 1180.31 2349.61 1176.65 c
+f*
+0.361 g
+2352.94 1180.33 m
+2358.58 1176.35 2362.19 1182.45 2375.39 1187.96 c
+2388.58 1193.47 2409.66 1198.79 2425.01 1198.88 c
+2440.38 1198.98 2448.5 1197.31 2448.09 1205.24 c
+2447.77 1213.09 2439.69 1210.43 2416.96 1210.23 c
+2394.24 1210.34 2375.8 1201.19 2366.61 1193.62 c
+2357.49 1186.12 2347.64 1183.69 2352.94 1180.33 c
+f*
+0.38 g
+2356.27 1184 m
+2361.38 1180.64 2364.48 1185 2377.56 1190.14 c
+2390.65 1195.27 2411.54 1199.42 2425.03 1199.51 c
+2438.52 1199.62 2447.29 1197.77 2446.99 1205.1 c
+2446.72 1212.39 2439 1209.66 2417.41 1209.81 c
+2395.83 1210.24 2377.96 1201.82 2369.21 1194.95 c
+2360.51 1188.12 2351.16 1187.08 2356.27 1184 c
+f*
+0.4 g
+2359.6 1187.68 m
+2364.18 1184.94 2366.76 1187.56 2379.74 1192.32 c
+2392.72 1197.08 2413.42 1200.04 2425.04 1200.14 c
+2436.67 1200.25 2446.09 1198.23 2445.88 1204.96 c
+2445.68 1211.69 2438.31 1208.89 2417.85 1209.39 c
+2397.41 1210.15 2380.12 1202.46 2371.82 1196.29 c
+2363.53 1190.12 2354.67 1190.46 2359.6 1187.68 c
+f*
+0 g
+2488.15 1208.45 m
+2488.15 1185.41 2534.95 1177.49 2579.59 1171.01 c
+2623.51 1164.53 2658.79 1155.89 2660.95 1109.81 c
+2663.11 1064.45 2651.59 1032.05 2671.75 1035.65 c
+2714.95 1043.57 2730.79 1090.37 2730.07 1111.97 c
+2730.07 1133.57 2698.39 1172.45 2641.51 1194.05 c
+2599.75 1209.89 2569.51 1217.09 2532.79 1218.53 c
+2483.83 1220.69 2488.15 1208.45 2488.15 1208.45 c
+f*
+0.012 g
+2489.41 1208.07 m
+2489.53 1185.68 2535.84 1178.36 2579.9 1171.68 c
+2623.41 1164.93 2657.4 1156.58 2661.01 1111.65 c
+2664.45 1067.5 2652.47 1036.52 2672.36 1039.76 c
+2713.81 1047.17 2729.24 1091.77 2728.44 1113.09 c
+2728.29 1134.61 2697.26 1172.19 2641.1 1193.48 c
+2599.81 1209.11 2570 1216.45 2533.7 1218 c
+2486.16 1220.17 2489.32 1208.48 2489.41 1208.07 c
+f*
+0.027 g
+2490.67 1207.68 m
+2490.9 1185.95 2536.73 1179.23 2580.2 1172.34 c
+2623.32 1165.33 2656.01 1157.26 2661.07 1113.5 c
+2665.78 1070.55 2653.35 1040.98 2672.97 1043.87 c
+2712.67 1050.76 2727.69 1093.18 2726.81 1114.21 c
+2726.51 1135.64 2696.12 1171.93 2640.69 1192.9 c
+2599.88 1208.33 2570.48 1215.81 2534.61 1217.46 c
+2488.49 1219.64 2490.49 1208.51 2490.67 1207.68 c
+f*
+0.043 g
+2491.93 1207.3 m
+2492.28 1186.22 2537.62 1180.1 2580.51 1173.01 c
+2623.22 1165.73 2654.62 1157.95 2661.13 1115.34 c
+2667.12 1073.61 2654.24 1045.45 2673.58 1047.98 c
+2711.53 1054.36 2726.14 1094.58 2725.18 1115.32 c
+2724.74 1136.68 2694.99 1171.67 2640.29 1192.33 c
+2599.94 1207.55 2570.97 1215.17 2535.52 1216.93 c
+2490.82 1219.12 2491.66 1208.54 2491.93 1207.3 c
+f*
+0.059 g
+2493.19 1206.92 m
+2493.66 1186.49 2538.51 1180.97 2580.81 1173.67 c
+2623.12 1166.14 2653.23 1158.64 2661.19 1117.18 c
+2668.45 1076.66 2655.12 1049.92 2674.19 1052.09 c
+2710.39 1057.96 2724.6 1095.98 2723.55 1116.44 c
+2722.96 1137.72 2693.85 1171.41 2639.88 1191.75 c
+2600 1206.78 2571.45 1214.54 2536.43 1216.39 c
+2493.15 1218.59 2492.84 1208.57 2493.19 1206.92 c
+f*
+0.075 g
+2494.45 1206.54 m
+2495.04 1186.75 2539.4 1181.85 2581.12 1174.34 c
+2623.03 1166.54 2651.84 1159.32 2661.25 1119.03 c
+2669.79 1079.71 2656 1054.38 2674.8 1056.2 c
+2709.26 1061.55 2723.05 1097.39 2721.92 1117.56 c
+2721.18 1138.76 2692.72 1171.16 2639.47 1191.18 c
+2600.06 1206 2571.94 1213.9 2537.34 1215.86 c
+2495.48 1218.07 2494.01 1208.59 2494.45 1206.54 c
+f*
+0.09 g
+2495.71 1206.15 m
+2496.42 1187.02 2540.29 1182.72 2581.42 1175.01 c
+2622.93 1166.94 2650.45 1160.01 2661.32 1120.87 c
+2671.12 1082.77 2656.88 1058.85 2675.41 1060.31 c
+2708.12 1065.15 2721.5 1098.79 2720.29 1118.68 c
+2719.4 1139.79 2691.58 1170.9 2639.06 1190.6 c
+2600.13 1205.22 2572.43 1213.26 2538.25 1215.33 c
+2497.8 1217.55 2495.18 1208.62 2495.71 1206.15 c
+f*
+0.102 g
+2496.97 1205.77 m
+2497.79 1187.29 2541.18 1183.59 2581.73 1175.67 c
+2622.83 1167.34 2649.06 1160.7 2661.38 1122.71 c
+2672.46 1085.82 2657.76 1063.32 2676.02 1064.42 c
+2706.98 1068.75 2719.95 1100.19 2718.66 1119.8 c
+2717.63 1140.83 2690.45 1170.64 2638.65 1190.03 c
+2600.19 1204.44 2572.91 1212.62 2539.16 1214.79 c
+2500.13 1217.02 2496.35 1208.65 2496.97 1205.77 c
+f*
+0.118 g
+2498.23 1205.39 m
+2499.17 1187.56 2542.07 1184.46 2582.03 1176.34 c
+2622.74 1167.74 2647.67 1161.38 2661.44 1124.56 c
+2673.79 1088.87 2658.65 1067.79 2676.63 1068.53 c
+2705.84 1072.34 2718.4 1101.6 2717.03 1120.91 c
+2715.85 1141.87 2689.31 1170.38 2638.25 1189.45 c
+2600.25 1203.66 2573.4 1211.98 2540.07 1214.26 c
+2502.46 1216.5 2497.52 1208.68 2498.23 1205.39 c
+f*
+0.133 g
+2499.49 1205 m
+2500.55 1187.83 2542.96 1185.33 2582.34 1177 c
+2622.64 1168.14 2646.28 1162.07 2661.5 1126.4 c
+2675.13 1091.92 2659.53 1072.25 2677.24 1072.64 c
+2704.7 1075.94 2716.85 1103 2715.4 1122.03 c
+2714.07 1142.91 2688.18 1170.12 2637.84 1188.88 c
+2600.31 1202.88 2573.88 1211.34 2540.98 1213.72 c
+2504.79 1215.97 2498.69 1208.71 2499.49 1205 c
+f*
+0.149 g
+2500.75 1204.62 m
+2501.93 1188.1 2543.85 1186.2 2582.65 1177.67 c
+2622.55 1168.54 2644.9 1162.75 2661.56 1128.25 c
+2676.46 1094.97 2660.41 1076.72 2677.84 1076.75 c
+2703.56 1079.54 2715.31 1104.41 2713.77 1123.15 c
+2712.29 1143.95 2687.04 1169.86 2637.43 1188.3 c
+2600.38 1202.1 2574.37 1210.7 2541.9 1213.19 c
+2507.12 1215.45 2499.87 1208.74 2500.75 1204.62 c
+f*
+0.165 g
+2502.01 1204.24 m
+2503.3 1188.37 2544.75 1187.07 2582.95 1178.34 c
+2622.45 1168.95 2643.51 1163.44 2661.62 1130.09 c
+2677.8 1098.03 2661.29 1081.19 2678.45 1080.86 c
+2702.42 1083.13 2713.76 1105.81 2712.14 1124.27 c
+2710.52 1144.98 2685.91 1169.6 2637.02 1187.73 c
+2600.44 1201.33 2574.86 1210.07 2542.81 1212.66 c
+2509.45 1214.93 2501.04 1208.77 2502.01 1204.24 c
+f*
+0.18 g
+2503.27 1203.85 m
+2504.68 1188.64 2545.64 1187.94 2583.26 1179 c
+2622.35 1169.35 2642.12 1164.13 2661.68 1131.93 c
+2679.14 1101.08 2662.17 1085.65 2679.06 1084.97 c
+2701.28 1086.73 2712.21 1107.21 2710.51 1125.39 c
+2708.74 1146.02 2684.78 1169.34 2636.61 1187.16 c
+2600.5 1200.55 2575.34 1209.43 2543.72 1212.12 c
+2511.78 1214.4 2502.21 1208.8 2503.27 1203.85 c
+f*
+0.192 g
+2504.53 1203.47 m
+2506.06 1188.91 2546.53 1188.81 2583.56 1179.67 c
+2622.26 1169.75 2640.73 1164.81 2661.74 1133.78 c
+2680.47 1104.13 2663.06 1090.12 2679.67 1089.08 c
+2700.14 1090.32 2710.66 1108.62 2708.88 1126.5 c
+2706.96 1147.06 2683.64 1169.08 2636.21 1186.58 c
+2600.56 1199.77 2575.83 1208.79 2544.63 1211.59 c
+2514.11 1213.88 2503.38 1208.83 2504.53 1203.47 c
+f*
+0.208 g
+2505.79 1203.09 m
+2507.43 1189.18 2547.42 1189.68 2583.87 1180.33 c
+2622.16 1170.15 2639.34 1165.5 2661.8 1135.62 c
+2681.81 1107.18 2663.94 1094.59 2680.28 1093.19 c
+2699 1093.92 2709.11 1110.02 2707.25 1127.62 c
+2705.18 1148.1 2682.51 1168.82 2635.8 1186.01 c
+2600.62 1198.99 2576.31 1208.15 2545.54 1211.05 c
+2516.44 1213.35 2504.55 1208.86 2505.79 1203.09 c
+f*
+0.224 g
+2507.05 1202.71 m
+2508.81 1189.45 2548.31 1190.55 2584.17 1181 c
+2622.06 1170.55 2637.95 1166.19 2661.87 1137.46 c
+2683.14 1110.24 2664.82 1099.06 2680.89 1097.3 c
+2697.86 1097.52 2707.56 1111.42 2705.62 1128.74 c
+2703.41 1149.13 2681.37 1168.56 2635.39 1185.43 c
+2600.69 1198.21 2576.8 1207.51 2546.45 1210.52 c
+2518.76 1212.83 2505.72 1208.89 2507.05 1202.71 c
+f*
+0.239 g
+2508.31 1202.32 m
+2510.19 1189.71 2549.2 1191.43 2584.48 1181.67 c
+2621.97 1170.95 2636.56 1166.87 2661.93 1139.31 c
+2684.48 1113.29 2665.7 1103.52 2681.5 1101.41 c
+2696.73 1101.11 2706.01 1112.83 2703.99 1129.86 c
+2701.63 1150.17 2680.24 1168.31 2634.98 1184.86 c
+2600.75 1197.43 2577.29 1206.87 2547.36 1209.99 c
+2521.09 1212.31 2506.89 1208.91 2508.31 1202.32 c
+f*
+0.255 g
+2509.57 1201.94 m
+2511.57 1189.98 2550.09 1192.3 2584.78 1182.33 c
+2621.87 1171.36 2635.17 1167.56 2661.99 1141.15 c
+2685.81 1116.34 2666.58 1107.99 2682.11 1105.52 c
+2695.59 1104.71 2704.47 1114.23 2702.36 1130.98 c
+2699.85 1151.21 2679.1 1168.05 2634.57 1184.28 c
+2600.81 1196.66 2577.77 1206.24 2548.27 1209.45 c
+2523.42 1211.78 2508.07 1208.94 2509.57 1201.94 c
+f*
+0.271 g
+2510.83 1201.56 m
+2512.95 1190.25 2550.98 1193.17 2585.09 1183 c
+2621.77 1171.76 2633.78 1168.25 2662.05 1142.99 c
+2687.15 1119.4 2667.47 1112.46 2682.72 1109.63 c
+2694.45 1108.31 2702.92 1115.63 2700.73 1132.09 c
+2698.07 1152.25 2677.97 1167.79 2634.17 1183.71 c
+2600.87 1195.88 2578.26 1205.6 2549.18 1208.92 c
+2525.75 1211.26 2509.24 1208.97 2510.83 1201.56 c
+f*
+0.282 g
+2512.09 1201.17 m
+2514.32 1190.52 2551.87 1194.04 2585.39 1183.66 c
+2621.68 1172.16 2632.39 1168.93 2662.11 1144.84 c
+2688.48 1122.45 2668.35 1116.92 2683.33 1113.74 c
+2693.31 1111.9 2701.37 1117.04 2699.1 1133.21 c
+2696.3 1153.28 2676.83 1167.53 2633.76 1183.13 c
+2600.94 1195.1 2578.74 1204.96 2550.09 1208.38 c
+2528.08 1210.73 2510.41 1209 2512.09 1201.17 c
+f*
+0.298 g
+2513.35 1200.79 m
+2515.7 1190.79 2552.76 1194.91 2585.7 1184.33 c
+2621.58 1172.56 2631 1169.62 2662.17 1146.68 c
+2689.82 1125.5 2669.23 1121.39 2683.94 1117.85 c
+2692.17 1115.5 2699.82 1118.44 2697.47 1134.33 c
+2694.52 1154.32 2675.7 1167.27 2633.35 1182.56 c
+2601 1194.32 2579.23 1204.32 2551 1207.85 c
+2530.41 1210.21 2511.58 1209.03 2513.35 1200.79 c
+f*
+2661.58 1152.56 m
+2678.05 1142.56 2675.11 1131.97 2685.7 1124.91 c
+2690.99 1121.39 2699.82 1121.39 2694.52 1134.91 c
+2687.46 1150.79 2681.58 1159.62 2645.11 1174.33 c
+2621.58 1183.74 2626.29 1173.74 2661.58 1152.56 c
+f*
+0.314 g
+2662.02 1152.44 m
+2678.08 1142.68 2675.21 1132.35 2685.55 1125.47 c
+2690.71 1122.03 2699.32 1122.03 2694.15 1135.22 c
+2687.26 1150.71 2681.53 1159.33 2645.95 1173.68 c
+2623 1182.85 2627.59 1173.1 2662.02 1152.44 c
+f*
+0.329 g
+2662.45 1152.32 m
+2678.12 1142.81 2675.32 1132.74 2685.39 1126.02 c
+2690.42 1122.67 2698.82 1122.67 2693.78 1135.53 c
+2687.07 1150.63 2681.47 1159.03 2646.79 1173.02 c
+2624.41 1181.97 2628.89 1172.46 2662.45 1152.32 c
+f*
+0.345 g
+2662.89 1152.2 m
+2678.15 1142.93 2675.42 1133.12 2685.24 1126.58 c
+2690.14 1123.32 2698.32 1123.32 2693.41 1135.84 c
+2686.87 1150.56 2681.42 1158.74 2647.63 1172.36 c
+2625.83 1181.08 2630.19 1171.82 2662.89 1152.2 c
+f*
+0.361 g
+2663.33 1152.07 m
+2678.18 1143.05 2675.53 1133.5 2685.08 1127.13 c
+2689.85 1123.96 2697.82 1123.96 2693.04 1136.15 c
+2686.67 1150.48 2681.37 1158.44 2648.47 1171.71 c
+2627.25 1180.2 2631.49 1171.18 2663.33 1152.07 c
+f*
+0.373 g
+2663.76 1151.95 m
+2678.22 1143.18 2675.63 1133.88 2684.93 1127.69 c
+2689.57 1124.6 2697.32 1124.6 2692.67 1136.46 c
+2686.47 1150.4 2681.31 1158.15 2649.31 1171.05 c
+2628.66 1179.31 2632.79 1170.54 2663.76 1151.95 c
+f*
+0.388 g
+2664.2 1151.83 m
+2678.25 1143.3 2675.74 1134.27 2684.77 1128.25 c
+2689.29 1125.24 2696.82 1125.24 2692.3 1136.78 c
+2686.28 1150.32 2681.26 1157.85 2650.15 1170.4 c
+2630.08 1178.43 2634.1 1169.9 2664.2 1151.83 c
+f*
+0.404 g
+2664.64 1151.71 m
+2678.28 1143.42 2675.85 1134.65 2684.62 1128.8 c
+2689 1125.88 2696.32 1125.88 2691.93 1137.09 c
+2686.08 1150.24 2681.21 1157.56 2650.99 1169.75 c
+2631.5 1177.54 2635.4 1169.26 2664.64 1151.71 c
+f*
+0.42 g
+2665.07 1151.59 m
+2678.31 1143.55 2675.95 1135.03 2684.46 1129.36 c
+2688.72 1126.53 2695.82 1126.53 2691.56 1137.4 c
+2685.88 1150.17 2681.15 1157.26 2651.83 1169.09 c
+2632.91 1176.66 2636.7 1168.62 2665.07 1151.59 c
+f*
+0.435 g
+2665.51 1151.47 m
+2678.35 1143.67 2676.05 1135.42 2684.31 1129.91 c
+2688.43 1127.17 2695.32 1127.17 2691.19 1137.71 c
+2685.68 1150.09 2681.1 1156.97 2652.67 1168.43 c
+2634.33 1175.77 2638 1167.98 2665.51 1151.47 c
+f*
+0.451 g
+2665.94 1151.34 m
+2678.38 1143.8 2676.16 1135.8 2684.15 1130.47 c
+2688.15 1127.81 2694.82 1127.81 2690.81 1138.02 c
+2685.49 1150.01 2681.04 1156.67 2653.51 1167.78 c
+2635.74 1174.88 2639.3 1167.34 2665.94 1151.34 c
+f*
+0.467 g
+2666.38 1151.22 m
+2678.41 1143.92 2676.26 1136.18 2684 1131.03 c
+2687.87 1128.45 2694.31 1128.45 2690.44 1138.33 c
+2685.29 1149.93 2680.99 1156.38 2654.35 1167.13 c
+2637.16 1174 2640.6 1166.69 2666.38 1151.22 c
+f*
+0.478 g
+2666.82 1151.1 m
+2678.45 1144.04 2676.37 1136.57 2683.85 1131.58 c
+2687.58 1129.09 2693.81 1129.09 2690.07 1138.64 c
+2685.09 1149.85 2680.94 1156.09 2655.19 1166.47 c
+2638.58 1173.11 2641.9 1166.05 2666.82 1151.1 c
+f*
+0.494 g
+2667.25 1150.98 m
+2678.48 1144.17 2676.47 1136.95 2683.69 1132.14 c
+2687.3 1129.74 2693.31 1129.74 2689.7 1138.95 c
+2684.89 1149.78 2680.88 1155.79 2656.03 1165.81 c
+2639.99 1172.23 2643.2 1165.41 2667.25 1150.98 c
+f*
+0.51 g
+2667.69 1150.86 m
+2678.51 1144.29 2676.58 1137.33 2683.54 1132.69 c
+2687.01 1130.38 2692.81 1130.38 2689.33 1139.26 c
+2684.7 1149.7 2680.83 1155.5 2656.87 1165.16 c
+2641.41 1171.34 2644.5 1164.77 2667.69 1150.86 c
+f*
+0.525 g
+2668.13 1150.74 m
+2678.54 1144.41 2676.69 1137.71 2683.38 1133.25 c
+2686.73 1131.02 2692.31 1131.02 2688.96 1139.57 c
+2684.5 1149.62 2680.78 1155.2 2657.71 1164.51 c
+2642.83 1170.46 2645.81 1164.13 2668.13 1150.74 c
+f*
+0.541 g
+2668.56 1150.62 m
+2678.58 1144.54 2676.79 1138.1 2683.23 1133.81 c
+2686.45 1131.66 2691.81 1131.66 2688.59 1139.89 c
+2684.3 1149.54 2680.72 1154.91 2658.55 1163.85 c
+2644.24 1169.57 2647.11 1163.49 2668.56 1150.62 c
+f*
+0.557 g
+2669 1150.49 m
+2678.61 1144.66 2676.9 1138.48 2683.07 1134.36 c
+2686.16 1132.3 2691.31 1132.3 2688.22 1140.2 c
+2684.1 1149.46 2680.67 1154.61 2659.39 1163.2 c
+2645.66 1168.69 2648.41 1162.85 2669 1150.49 c
+f*
+0.569 g
+2669.44 1150.37 m
+2678.64 1144.78 2677 1138.86 2682.92 1134.92 c
+2685.88 1132.95 2690.81 1132.95 2687.85 1140.51 c
+2683.91 1149.39 2680.62 1154.32 2660.23 1162.54 c
+2647.08 1167.8 2649.71 1162.21 2669.44 1150.37 c
+f*
+0.584 g
+2669.87 1150.25 m
+2678.68 1144.91 2677.11 1139.25 2682.76 1135.47 c
+2685.59 1133.59 2690.31 1133.59 2687.48 1140.82 c
+2683.71 1149.31 2680.56 1154.02 2661.07 1161.88 c
+2648.49 1166.92 2651.01 1161.57 2669.87 1150.25 c
+f*
+0.6 g
+2670.31 1150.13 m
+2678.71 1145.03 2677.21 1139.63 2682.61 1136.03 c
+2685.31 1134.23 2689.81 1134.23 2687.11 1141.13 c
+2683.51 1149.23 2680.51 1153.73 2661.91 1161.23 c
+2649.91 1166.03 2652.31 1160.93 2670.31 1150.13 c
+f*
+Q
+showpage
+%%PageTrailer
+pdfEndPage
+%%Trailer
+end
+%%DocumentSuppliedResources:
+%%EOF
diff --git a/obsolete/macros/latex/contrib/ps4pdf/ps4pdf b/obsolete/macros/latex/contrib/ps4pdf/ps4pdf
new file mode 100644
index 0000000000..1b420e78b8
--- /dev/null
+++ b/obsolete/macros/latex/contrib/ps4pdf/ps4pdf
@@ -0,0 +1,106 @@
+#!/bin/sh
+
+# Copyright (C) 2004, Thomas Esser. Public domain.
+
+# First, work around bugs/limitations in some shells on some systems:
+test -f /bin/sh5 && test -z "$RUNNING_SH5" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xULTRIX; } 2>/dev/null \
+ && { RUNNING_SH5=true; export RUNNING_SH5; exec /bin/sh5 $0 ${1+"$@"}; }
+unset RUNNING_SH5
+
+test -f /bin/bsh && test -z "$RUNNING_BSH" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xAIX; } 2>/dev/null \
+ && { RUNNING_BSH=true; export RUNNING_BSH; exec /bin/bsh $0 ${1+"$@"}; }
+unset RUNNING_BSH
+
+# hack around a bug in zsh:
+test -n "${ZSH_VERSION+set}" && alias -g '${1+"$@"}'='"$@"'
+
+###############################################################################
+# cleanup()
+# clean up the temp area and exit with proper exit status
+###############################################################################
+cleanup()
+{
+ rc=$?
+ $needsCleanup && test -n "$tmpdir" && test -d "$tmpdir" \
+ && { rm -f "$tmpdir"/*; cd /; rmdir "$tmpdir"; }
+
+ # set exit code in a portable way; see the autoconf manual for details:
+ (exit $rc); exit $rc
+}
+
+###############################################################################
+# setupTmpDir()
+# set up a temp directory and a trap to remove it
+###############################################################################
+setupTmpDir()
+{
+ $needsCleanup && return
+
+ trap 'cleanup' 1 2 3 7 13 15
+ needsCleanup=true
+ (umask 077; mkdir "$tmpdir") \
+ || abort "could not create directory \`$tmpdir'"
+}
+###############################################################################
+# myexec(args)
+# execute the command given as "args"; abort on error; redirect messages to
+# log in "silent" mode; redirect stdin (</dev/null) in silent mode
+###############################################################################
+myexec()
+{
+ if $silent; then
+ echo "$0: running $@"
+ "$@" >$log 2>&1 </dev/null
+ rc=$?
+ else
+ "$@"
+ rc=$?
+ fi
+ if test $rc != 0; then
+ echo "$0: command $@ returned with code $rc"
+ cat <$log
+ (exit $rc) # set return value
+ cleanup
+ fi
+}
+
+# some initializations
+progname=pdflatexps
+silent=true # default setting; change if you like
+needsCleanup=false
+tmpdir=${TMP-/tmp}/.$progname$$
+log=$tmpdir/log
+version="1.0"
+
+# look for optional things first
+while
+ case $1 in
+ --help|-h) echo "$0 [-v|-q] file"
+ echo "Process LaTeX document containing PSforPDF macros."
+ exit 0;;
+ --version) echo "$progname version $version"; exit 0;;
+ -q) silent=true;;
+ -v) silent=false;;
+ -*) echo "$progname: unknown option $1 ignored";;
+ *) break;;
+ esac
+do
+ shift
+done
+# remaining option: filename
+file=$1
+
+# jobname von TeX: Verzeichnisse entfernen, evtl. vorhandene Extension
+# entfernen.
+job=`echo "x$1" | sed 's@x@@; s@.*/@@; s@\.[^.]*$@@'`
+
+setupTmpDir
+myexec latex "$file"
+myexec dvips -Ppdf -o "$job-pics.ps" "$job.dvi"
+myexec ps2pdf -dAutoRotatePages=/None "$job-pics.ps" "$job-pics.pdf"
+myexec pdflatex "$file"
+
+true
+cleanup
diff --git a/obsolete/macros/latex/contrib/ps4pdf/ps4pdf-test.tex b/obsolete/macros/latex/contrib/ps4pdf/ps4pdf-test.tex
new file mode 100644
index 0000000000..e4e1e2bf3f
--- /dev/null
+++ b/obsolete/macros/latex/contrib/ps4pdf/ps4pdf-test.tex
@@ -0,0 +1,141 @@
+
+% Rolf Niepraschk, niepraschk@ptb.de, 2003-06-19
+%
+% Test for the LaTeX package `ps4pdf'
+%
+% Process this file with:
+%
+% latex ps4pdf-test.tex
+% dvips -Ppdf -o ps4pdf-test-pics.ps ps4pdf-test.dvi
+% ps2pdf ps4pdf-test-pics.ps ps4pdf-test-pics.pdf # The "graphics container"
+% pdflatex ps4pdf-test.tex # The resulting pdf document.
+%
+% or use the classical way:
+%
+% latex '\PassOptionsToPackage{inactive}{ps4pdf} \input{ps4pdf-test.tex}'
+% dvips ps4pdf-test
+%
+% (The VTeX compiler does not need the explicitly inactive option.)
+
+\listfiles\errorcontextlines=100
+\documentclass[draft]{article}
+\usepackage{calc}
+\usepackage[final]{graphicx}
+\usepackage[final]{ps4pdf}
+
+%\containerName{pictures.pdf}% Default is `\jobname-pics.pdf'
+
+\renewcommand{\textfraction}{0} \setcounter{totalnumber}{8}
+\renewcommand{\topfraction}{1} \setcounter{topnumber}{8}
+\renewcommand{\bottomfraction}{1} \setcounter{bottomnumber}{8}
+
+\PSforPDF{% Postscript related commands.
+ \usepackage{pstricks,pst-node,pst-tree,multido}
+ \definecolor{lightblue}{cmyk}{0.65,0.13,0,0}
+
+ \newcommand\wrongDimGraphic{%
+ \begingroup
+ \psset{unit=1pt}%
+ \begin{pspicture}(-80,-80)(80,80)%
+ \pscircle*[linecolor=red](-28,28){57}%
+ \pscircle*[linecolor=green](28,28){57}%
+ \pscircle*[linecolor=blue](0,-28){57}%
+ \end{pspicture}%
+ \endgroup
+ }
+
+ \newcommand\wrongDimGraphicX{%
+ \begingroup
+ \psset{unit=.75pt}%
+ \begin{pspicture}(-80,-40)(80,40)%
+ \psline[linecolor=blue,linewidth=28]{<->}(-114,0)(142,0)%
+ \end{pspicture}%
+ \endgroup
+ }
+
+ \newcommand\wrongDimGraphicY{%
+ \begingroup
+ \psset{unit=.75pt}%
+ \begin{pspicture}(-40,-80)(40,80)%
+ \psline[linecolor=blue,linewidth=28]{<->}(0,114)(0,-142)%
+ \end{pspicture}%
+ \endgroup
+ }
+}
+
+\begin{document}
+
+\section*{\centering Some tests for the `ps4pdf' package}
+
+\begin{figure}[hb]
+ \begin{minipage}[b]{.5\textwidth-.5\columnsep}%
+ \PSforPDF{\resizebox{\linewidth}{!}{\input{4-10-8.inl}}}
+ \caption{A nice PSTricks graphic}
+ \end{minipage}\hfill
+ \begin{minipage}[b]{.5\textwidth-.5\columnsep}%
+ \centering
+ \PSforPDF{\includegraphics[width=.66\linewidth]{penguin}}
+ \caption{An EPS file}
+ \end{minipage}
+\end{figure}
+
+\begin{figure}[hb]
+ \setlength\fboxsep{0pt}
+ \begin{minipage}{\textwidth}
+ \begin{minipage}[b]{.5\textwidth-.5\columnsep}%
+ \centering
+ \fbox{\PSforPDF{\wrongDimGraphicX}}
+ \end{minipage}\hfill
+ \begin{minipage}[b]{.5\textwidth-.5\columnsep}%
+ \centering
+ \fbox{\PSforPDF[trim=-26pt 0mm 47pt 0mm]{\wrongDimGraphicX}}
+ % trim= DeltaX_left DeltaY_bottom DeltaX_right DeltaY_top
+ \end{minipage}
+ \end{minipage}
+ \caption{Trimming in horizontal direction}
+\end{figure}
+
+\begin{figure}[hb]
+ \setlength\fboxsep{0pt}
+ \begin{minipage}{\textwidth}
+ \begin{minipage}[b]{.4\textwidth-.4\columnsep}%
+ \centering
+ \fbox{\PSforPDF{\wrongDimGraphicY}}
+ \end{minipage}\hfill
+ \begin{minipage}[b]{.4\textwidth-.4\columnsep}%
+ \centering
+ \fbox{\PSforPDF[trim=0mm -47pt 0mm 26pt]{\wrongDimGraphicY}}
+ % trim= DeltaX_left DeltaY_bottom DeltaX_right DeltaY_top
+ \end{minipage}
+ \end{minipage}
+ \caption{Trimming in vertical direction}
+\end{figure}
+
+\clearpage
+
+\begin{figure}[hb]
+ \setlength\fboxsep{0pt}
+ \begin{minipage}{\textwidth}
+ \begin{minipage}[c]{.5\textwidth-.5\columnsep}%
+ \centering
+ \fbox{\PSforPDF{\wrongDimGraphic}}
+ \end{minipage}\hfill
+ \begin{minipage}[c]{.5\textwidth-.5\columnsep}%
+ \centering
+ \fbox{\PSforPDF[trim=-2mm -2mm 2mm 2mm]{\wrongDimGraphic}}
+ % trim= DeltaX_left DeltaY_bottom DeltaX_right DeltaY_top
+ \end{minipage}
+ \end{minipage}
+ \caption{Trimming in both directions}
+\end{figure}
+
+\begin{figure}[hb]
+ \setlength\fboxsep{0pt}
+ \begin{minipage}{\textwidth}
+ \centering
+ \PSforPDF[draft]{\includegraphics[width=.66\linewidth]{penguin}}
+ \end{minipage}
+ \caption{The draft parameter (see also package options draft/final)}
+\end{figure}
+
+\end{document}
diff --git a/obsolete/macros/latex/contrib/ps4pdf/ps4pdf.sty b/obsolete/macros/latex/contrib/ps4pdf/ps4pdf.sty
new file mode 100644
index 0000000000..4ef924b92e
--- /dev/null
+++ b/obsolete/macros/latex/contrib/ps4pdf/ps4pdf.sty
@@ -0,0 +1,284 @@
+
+% Copyright 2003 by Rolf Niepraschk (Rolf.Niepraschk@ptb.de).
+% This software is released under the terms of the LaTeX Project Public
+% License (ftp://dante.ctan.org/tex-archive/macros/latex/base/lppl.txt).
+% (Essentially: Free to use, copy, distribute (sell) and change, but, if
+% changed, the name must be changed.)
+
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{ps4pdf}[2005/02/11 v0.6i PS code for pdfTeX (RN/HO)]
+
+\newcommand*\PfP@mode{0} \newcommand*\PfP@draft@global{false}
+\newcommand*\PfP@llx{-0.50001bp}
+\newcommand*\PfP@lly{-0.50001bp}
+\newcommand*\PfP@urx{0.50001bp}
+\newcommand*\PfP@ury{0.50001bp}% Prevents rounding errors.
+\newcommand*\PfP@tempa{} \newcommand*\PfP@tempb{}
+
+\newif\ifPfP@draft \newif\ifPfPinside \PfPinsidefalse
+\newif\ifPfP@graphics
+\newif\ifPfP@notightpage \PfP@notightpagefalse
+
+\DeclareOption{active}{\def\PfP@mode{0}}
+\DeclareOption{inactive}{\def\PfP@mode{9}}
+\DeclareOption{draft}{\def\PfP@draft@global{true}}
+\DeclareOption{final}{\def\PfP@draft@global{false}}
+\DeclareOption{graphics}{\PfP@graphicstrue}
+\DeclareOption{nographics}{\PfP@graphicsfalse}
+\DeclareOption{notightpage}{\PfP@notightpagetrue}
+
+\ExecuteOptions{graphics}
+\ProcessOptions\relax
+
+\RequirePackage{keyval,ifpdf,ifvtex}
+
+\newcounter{PSforPDF}
+
+\newcommand*\PfP@container{}
+\edef\PfP@container{\jobname-pics.pdf}
+\newcommand*\containerName[1]{\def\PfP@container{#1}}
+
+\ifnum\PfP@mode>0\relax\else
+ \ifvtex
+ \def\PfP@mode{9}
+ \else
+ \ifpdf
+ \def\PfP@mode{1}
+ \fi
+ \fi
+\fi
+
+\ifnum\PfP@mode=0\relax\else
+
+ \RequirePackage{calc}
+
+ \define@key{PfP}{trim}{%
+ \begingroup
+ \Gread@parse@vp#1 \\%
+ \edef\x{\endgroup%
+ \def\noexpand\PfP@llx{\Gin@vllx bp}%
+ \def\noexpand\PfP@lly{\Gin@vlly bp}%
+ \def\noexpand\PfP@urx{\Gin@vurx bp}%
+ \def\noexpand\PfP@ury{\Gin@vury bp}}\x%
+% Like "\xdef\PfP@llx{\Gin@vllx bp}..." but only for one group level.
+ }
+
+ \define@key{PfP}{draft}[true]{\csname PfP@draft#1\endcsname}
+
+ \newcommand\PfP@adjustBox[3]{%
+% #1=width of the main box, #2=height of the main box,
+% #3=raw material
+ \begingroup
+ \edef\PfP@tempa{#1}\edef\PfP@tempb{#2}%
+ \setbox\@tempboxa=\hbox{#3}%
+ \ifdim\wd\@tempboxa>\ht\@tempboxa\relax%
+ \setbox\@tempboxa=\hbox{\resizebox{\PfP@tempa}{!}{#3}}%
+ \else%
+ \setbox\@tempboxa=\hbox{\resizebox{!}{\PfP@tempb}{#3}}%
+ \fi
+ \box\@tempboxa%
+ \endgroup
+ }
+
+ \newcommand\PfP@framedInfoBox[3]{%
+% #1=width, #2=height, #3=info text
+ \begingroup
+ \fboxsep=3pt\fboxrule=.4pt%
+ \edef\PfP@tempa{#1-2\fboxsep-2\fboxrule}%
+ \ifx#2\height%
+ \fbox{\parbox[b]{\PfP@tempa}{\vfill\mbox{}#3\vfill}}%
+ \else%
+ \edef\PfP@tempb{#2-2\fboxsep-2\fboxrule}%
+ \fbox{\parbox[b][\PfP@tempb]{\PfP@tempa}{\vfill\mbox{}#3\vfill}}%
+ \fi
+ \endgroup
+ }
+
+\fi
+
+\ifcase\PfP@mode% == dvi (extraction mode) ==
+%% "AtBeginDocument" is necessary because `preview' called `\nofiles'.
+%% After this call `\makeindex' is `\relax' and can't be redefined with
+%% `\renewcommand'.
+ \AtBeginDocument{%
+ \ifPfP@notightpage%
+ \RequirePackage[active,dvips]{preview}[2003/01/20]%
+ \else%
+ \RequirePackage[active,dvips,tightpage]{preview}[2003/01/20]%
+ \fi%
+ }
+
+ \define@key{PfP}{trim}{\xdef\PreviewBbAdjust{#1}}%
+ \define@key{PfP}{draft}[true]{}% Not used in this mode.
+
+ \newcommand\PSforPDF[2][]{#2}
+
+ \newcommand\PfP@relax@commands{%
+%% To prevent tabularx from execute each \cmd{\PSforPDF} more than once.
+ \@ifundefined{tabularx}{}{%
+ \def\tabularx##1##2{\tabular{##2}}%
+ \newcolumntype{X}{c}%
+ \let\endtabularx=\endtabular}%
+ }
+
+ \AtBeginDocument{%
+ \@ifpackageloaded{graphicx}{}{\RequirePackage{graphicx}}%
+ \let\PfP@includegraphics=\includegraphics%
+ \renewcommand\includegraphics[2][]{%
+ \ifPfPinside\PfP@includegraphics[#1]{#2}\else~\fi}%
+ % Outside of `\PSforPDF' `\includegraphics' must do nothing
+ % because we can't handle pdfTeX graphics (.pdf, .jpg,...)
+ % in this mode. `~' is a non-zero size dummy.
+ \renewcommand\PSforPDF[2][]%
+ {%
+ \setkeys{PfP}{trim=\PfP@llx\space\PfP@lly\space%
+ \PfP@urx\space\PfP@ury,#1}\stepcounter{PSforPDF}%
+ \PfPinsidetrue#2\PfPinsidefalse%
+ }
+ \PreviewMacro[{[]{}}]{\PSforPDF}%
+ \PfP@relax@commands%
+ }
+
+ \AtEndDocument{%
+ \ifnum\value{PSforPDF}=0\relax
+ \PSforPDF{\mbox{}}%
+ % Prevents not writing a dvi file if the document contains
+ % no \PSforPDF commands (e.g. suppressed by \includeonly)
+ \fi}
+
+\or% == pdfTeX ==
+
+ \newcommand*\PfP@lastpage{\maxdimen}
+
+ \newcommand\PSforPDF[2][]{}% Do nothing before `\begin{document}'
+ % The definition for the "page" key can only be executed
+ % at `\begin{document}' if `keyval' is present!
+ \AtBeginDocument{%
+ \ifPfP@graphics\else
+ \let\PfP@Ginclude@graphics\Ginclude@graphics
+ \def\Ginclude@graphics#1{\phantom{\PfP@Ginclude@graphics{#1}}}%
+ \fi
+ \IfFileExists{\PfP@container}%
+ {%
+ \@ifpackageloaded{graphicx}{}{\RequirePackage[pdftex]{graphicx}}%
+ \renewcommand\PSforPDF[2][]{%
+ \setkeys{PfP}{trim=\PfP@llx{} \PfP@lly{} \PfP@urx{} \PfP@ury}%
+ \setkeys{PfP}{draft=\PfP@draft@global,##1}%
+ \stepcounter{PSforPDF}%
+ \ifnum\PfP@lastpage<\value{PSforPDF}\relax
+ \PfP@framedInfoBox{\linewidth}{\height}{%
+ \centering Can't show picture~\#\thePSforPDF\ because it
+ does not exist in \texttt{\PfP@container}. Recreate
+ \texttt{\PfP@container}!}%
+ \else%
+ \setbox\@tempboxa=\hbox{%
+ \includegraphics[page=\the\value{PSforPDF},draft=false]%
+ {\PfP@container}}%
+ \setlength\@tempdima{\wd\@tempboxa-\PfP@urx+\PfP@llx}%
+ \setlength\@tempdimb{\ht\@tempboxa-\PfP@ury+\PfP@lly}%
+ % recalculate the original size.
+ \setbox\@tempboxa=\hbox{%
+ \PfP@adjustBox{\the\@tempdima}{\the\@tempdimb}{\box\@tempboxa}}%
+ \ifPfP@draft%
+ \PfP@framedInfoBox{\the\wd\@tempboxa}{\the\ht\@tempboxa}%
+ {\rlap{~\texttt{\PfP@container~(\#\the\value{PSforPDF})}}}%
+ \else%
+ \mbox{\box\@tempboxa}%
+ \fi
+ \xdef\PfP@lastpage{\the\pdflastximagepages}%
+ \fi
+ }
+ }
+ {%
+ \PackageWarningNoLine{ps4pdf}{%
+ Graphic container `\PfP@container' not found}%
+ \renewcommand\PSforPDF[2][]{%
+ \stepcounter{PSforPDF}%
+ \noindent\PfP@framedInfoBox{\linewidth}{\height}{%
+ \centering Can't show picture~\#\thePSforPDF\ because
+ \texttt{\PfP@container} not found. Create it from
+ \texttt{\jobname.dvi} using \texttt{dvips} and \texttt{ps2pdf}!}}
+ }%
+ }%
+
+ \AtEndDocument{%
+ \ifnum\PfP@lastpage=\value{PSforPDF}\relax\else
+ \PackageWarningNoLine{ps4pdf}{`\PfP@container' is no more valid}%
+ \fi}
+
+\else% == inactive (latex/dvips, VTeX) ==
+
+ \RequirePackage{graphicx}
+
+ \newcommand\PfP@trimmBox[7]{%
+% #1=width of the main box, #2=height of the main box,
+% #3=trim left, #4=trim right, #5=trim top, #6=trim bottom
+% #7=raw material
+ \begingroup
+ \edef\PfP@tempa{#1}\edef\PfP@tempb{#2}%
+ \setbox\@tempboxa=\hbox{%
+ \makebox[\width-#3][r]{% extends at left
+ \makebox[\width+#4][l]{% extends at right
+ \raisebox{\dp\@tempboxa-#6}% extends at top and bottom
+ [\ht\@tempboxa+\dp\@tempboxa+#5-#6][0pt]{#7}}}}%
+ \PfP@adjustBox{\PfP@tempa}{\PfP@tempb}{\box\@tempboxa}%
+ \endgroup
+ }
+
+ \newcommand\PSforPDF[2][]{#2}%
+
+ \AtBeginDocument{%
+ \renewcommand\PSforPDF[2][]{%
+ \begingroup
+ \setkeys{PfP}{draft=\PfP@draft@global,#1}%
+ \setbox\@tempboxa=\hbox{#2}%
+ \@tempdima=\ht\@tempboxa\advance\@tempdima\dp\@tempboxa%
+ \edef\PfP@tempb{\the\@tempdima}\edef\PfP@tempa{\the\wd\@tempboxa}%
+ \setbox\@tempboxa=\hbox{%
+ \PfP@trimmBox{\PfP@tempa}{\PfP@tempb}%
+ {\PfP@llx}{\PfP@urx}{\PfP@ury}{\PfP@lly}{\box\@tempboxa}}%
+ \ifPfP@draft%
+ \PfP@framedInfoBox{\the\wd\@tempboxa}{\the\ht\@tempboxa}{}%
+ \else%
+ \mbox{\box\@tempboxa}%
+ \fi
+ \endgroup
+ }%
+ }
+
+\fi
+
+\InputIfFileExists{ps4pdf.cfg}{%
+ \PackageInfo{ps4pdf}{Local config file ps4pdf.cfg used}
+}{}
+
+\endinput
+
+\changes{v0.3g (RN)}{2003/02/12}{First public version.}
+\changes{v0.3h (RN)}{2003/02/11}{Optional parameter for Trimming.}
+\changes{v0.4a (RN)}{2003/02/13}{key-value syntax.}
+\changes{v0.5 (RN)}{2003/05/17}{trim parameter: Scaling was wrong, corrected.
+ New options draft/final. Code cleanup. Improved test file.}
+\changes{v0.5a (RN)}{2003/05/19}{Option "inactive" works now.}
+\changes{v0.5b (RN)}{2003/05/21}{Mode detection changed. Code cleanup.}
+\changes{v0.5c (RN)}{2003/05/26}{New Parameters "hpos" and "vpos".}
+\changes{v0.6 (RN)}{2003/05/30}{trim parameter and draft option can be used
+ with the "inactive" option}
+\changes{v0.6a (RN)}{2003/06/03}{Size and alignment after trimming changed.
+ Parameter "hpos" and "vpos" removed.}
+\changes{v0.6b (RN)}{2003/06/09}{Simplified definition for trim key.}
+\changes{v0.6c (RN)}{2003/06/19}{The name of the graphics container can now be
+ changed with \cmd{\containerName}. A document without any \cmd{\PSforPDF}
+ commands creates now an empty container file.}
+\changes{v0.6d (RN)}{2003/08/17}{Inputting a config file added.}
+\changes{v0.6e (RN)}{2003/09/03}{Works now with `tabularx'. Thanks to
+ Herbert Voss.}
+\changes{v0.6f (RN)}{2003/09/05}{bug in extraction mode corrected (`graphicx'
+ is required). Thanks to Jose Carlos Santos.}
+\changes{v0.6g (RN)}{2003/11/22}{New package options `graphics/nographics'
+ similar to package `crop' (suppresses the graphics output;
+ suggested by Markus Kohm).}
+\changes{v0.6h (RN)}{2004/07/15}{In dvi extraction mode the `preview' package
+ should be loaded ``AtBeginDocument'' to prevent problems with `natbib'; bug
+ reported from ???.}
+\changes{v0.6i (RN)}{2005/02/11}{Option "notightpage" added.}
diff --git a/obsolete/macros/latex/contrib/psu-thesis/README b/obsolete/macros/latex/contrib/psu-thesis/README
new file mode 100644
index 0000000000..ec7ce0db36
--- /dev/null
+++ b/obsolete/macros/latex/contrib/psu-thesis/README
@@ -0,0 +1,414 @@
+ psu-thesis.sty
+ Copyright 2008 Matt Floros
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.3
+of this license or (at your option) any later version.
+The latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+and version 1.3 or later is part of all distributions of LaTeX
+version 2005/12/01 or later.
+
+This work has the LPPL maintenance status `maintained'.
+
+The Current Maintainer of this work is Matt Floros.
+
+This work consists of the files psuthesis.sty and psuthesis.bst
+
+--------------------------------------------------------------------------------
+
+Manual for psu-thesis LATEX Style File
+Matthew W. Floros
+September 17, 2008
+
+
+Included Files
+
+manual.tex
+manual.pdf
+psu-thesis.sty
+psu-thesis.bst
+mssample.tex
+mssample.pdf
+phdsample.tex
+phdsample.pdf
+
+
+Introduction
+
+The origin of this style file came directly from my horrible experience trying
+to write a technical Master's thesis using "a popular word processor." It was at
+that time that I decided that it would be best to bite the bullet and simply
+learn TEX and not have to deal with that nightmare again for my PhD thesis.
+
+Unfortunately, at the time I was writing my Ph.D. thesis, Penn State did not
+provide any support for TEX users. Although there were several style files
+floating around different departments, they seemed to me as a novice user to
+require quite a bit of effort to use them. The style file itself had to be
+changed, i.e. lines commented out or uncommented, and there was no
+documentation. My goal was to merge together parts of various style files and
+make a single package whose features could all be accessed through issuing
+simple LATEX commands in the document rather than editing the style file itself.
+
+I received my PhD in December of 2000 and did the development work on this
+package then. I wrote most of this documentation in 2002 and then came back to
+it in 2008 when I realized I could upload it to CTAN and make it available to
+other people. A fair amount of work went into it and I thought others could
+benefit. As of 2000, the Penn State Thesis Office had no interest in having
+anything to do with a LATEX style file and only maintained templates for
+"popular word processors." I'm sure they still feel the same way.
+
+Note that I have not reviewed the thesis guidelines since 2000 and they may have
+changed. When I submitted my thesis in 2000, it passed Thesis Office scrutiny
+using this package. The committee page was contributed from a 2004 thesis, and
+incorporated "as-is," with appropriate logic to include it or not.
+
+There are few guidelines for the main body of the thesis, so nearly all of the
+provided commands can be classified as either front matter or back matter. These
+commands are used to set up the title page, abstract, appendices, and so forth.
+There are some commands which do not fall into these two categories which are
+provided at the end. A summary of the commands is provided below.
+
+Note that the setspace package is a separate LATEX package, not something
+developed at PSU. It is a required package because the line spacing and some of
+the commands in the psu-thesis style file rely on commands in the setspace style
+file.
+
+To include the style file (and bibliographic style file psuthesis.bst) in your
+thesis document, simply issue the command \usepackage{psu-thesis} in the
+preamble after the documentclass command and \usepackage{doublespace} command
+since many of the psu-thesis commands rely on the doublespace package. It is
+also intended to be used with the report document class:
+
+\documentclass[dvips,11pt,twoside]{report}
+\usepackage{doublespace}
+\usepackage{psu-thesis}
+\bibliographystyle{psuthesis}
+
+The package was set up with both one-sided and two-sided printing in mind, so
+the optional arguments oneside and twoside to the report document class can be
+used and the macros provided in this package will adapt accordingly.
+
+
+Package Options
+
+The following options are available:
+
+master
+doctor
+signature
+draft
+
+The first two package options, master and doctor are available which set
+defaults for those thesis types:
+
+master doctor
+--------------------------------------------------------------------------------
+Set degree to "Master of Science" Set degree to "Doctor of Philosophy"
+Permission to Copy Page Committee Page
+List of Tables List of Tables
+List of Figures List of Figures
+
+The signature option will include the signature page, which has since been
+supplanted by the committee page. The \includesignature command in the preamble
+produces the same effect.
+
+The draft option is useful for version control of drafts of your thesis while it
+is being written. It produces a box with the date the document was produced at
+the top of every page,
+
++-------------------------------------+
+|Draft: June 26, 2008 at 1:32 am |
++-------------------------------------+
+
+You can also place the \draft command in the preamble to activate this feature.
+
+
+Front Matter
+
+Most of the commands provided are related to the front matter. Commands can be
+divided into three groups, commands which set information for the title page,
+commands to set up the signature page, and commands to include and format the
+other front matter items.
+
+The front matter definition commands can be issued either in the preamble or
+within the document itself. The only command that is required to appear within
+the document is the \makefrontmatter command which generates and outputs all of
+the frontmatter material based on the other commands issued. Of course if the
+commands to create the front matter parts are not in the preamble, they must
+appear before the \makefrontmatter command.
+
+
+Title Page Information
+
+A variety of general information is required for the style file to format the
+title page, signature page, and so forth. These commands to input the
+information are straightforward. The appropriate information is simply the
+argument of the command:
+
+\title{} thesis title (it should be in all caps; this is not automatic)
+\author{} thesis author \dept{} academic department in which thesis is earned
+\college{} college the above department belongs to \submitdate{} month and year
+of submission/publication of thesis \copyrightyear{} year of publication of
+thesis (for title and copyright pages) \degree{} degree being obtained, e.g.
+"Doctor of Philosophy"
+
+The thesis type is set to produce "A Thesis in..." by default but can be changed
+to "A Thesis Proposal in..." with the \proposal command or "A Dissertation in"
+with the \dissertation command.
+
+Additionally, the \includecopyrightline command will include a copyright line on
+the title page using the copyright year and author information supplied.
+Alternatively, the command \includecopyrightpage will cause a separate copyright
+page to be output immediately following the title page. Both the title page line
+and separate page can be included, but only one is recommended.
+
+
+Signature/Committee Page Information
+
+The signature and committee pages can be set up with up to six thesis readers
+using the \includesignature and \includecommittee commands, respectively. A
+suite of commands are included to aid in the formatting of the signature and
+committee pages. Headings and spacing are set automatically. The author
+information is taken from the \author{} command above. Each reader is added with
+a consecutive command, i.e.
+
+\firstreader{}{}
+\secondreader{}{}
+\thirdreader{}{}
+\fourthreader{}{}
+\fifthreader{}{}
+\sixthreader{}{}
+
+Each reader command requires two arguments. The first is the reader's name,
+and the second is the title and affiliation of that reader, for example
+\firstreader{Isaac Newton}{Professor of Mathematics} would produce
+
+
+------------------------------------------------ -------------------
+Isaac Newton
+Professor of Mathematics
+
+for the signature page and similar without the lines for the committee page. The
+signature page is optional, and can be included with \includesignature in the
+preamble or the signature package option. It is not numbered, so it can be bound
+with the author's personal copy and the page numbers will not differ from the
+reference copy.
+
+Several macros have been defined to format the reader affiliations. First,
+macros are defined to identify the professor as assistant, associate, or full
+professor:
+
+\assistprof{}
+\assocprof{}
+\prof{}
+
+Additionally, the macro head{} is defined to identify that the reader is the
+head of the department. The Thesis Office likes to see both \prof{} and \head{}
+for department heads. Macros are provided for additional information as follows:
+
+Macro Command Text Produced
+------------- -------------
+\adviser Thesis Adviser
+\coadviser Thesis Co-Adviser
+\chair Chair of Committee
+\cochair Co-Chair of Committee
+\adviserchair Thesis Adviser, Chair of Committee
+\coadviserchair Thesis Co-Adviser, Co-Chair of Committee
+
+These macros are not necessarily of much value since it is nearly as easy to
+simply type the appropriate information into the document rather than using the
+macros, but several style files I came across contained such shortcuts, so they
+were retained in this package.
+
+For example, either
+
+\secondreader{Isaac Newton}{\prof{Mathematics}\head{Mathematics}
+\adviserchair}
+
+or
+
+\secondreader{Isaac Newton}{Professor of Physics \\
+Head of Department of Physics \\
+Thesis Adviser, Chair of Committee}
+
+would produce
+
+------------------------------------------------ -------------------
+Isaac Newton
+Professor of Physics
+Head of Department of Physics
+Thesis Adviser, Chair of Committee
+
+
+Permission to Copy Page
+
+The permission to copy page is produced with the \includepermission command. The
+name is taken from the \author entry. No other input is required since the
+required text is given in the thesis guide.
+
+
+List of Symbols
+
+Three macros are included for the List of Symbols. The first,
+\listofsymbols[width]{}, causes the List of Symbols to be included in the
+frontmatter. The List of Symbols itself is the required argument, which can of
+course be entered directly or in a separate file and accessed with an \input or
+similar command.
+
+The second macro is to aid in generating the symbol list and takes the form
+
+\symbolentry{symbol}{definition}
+
+The command outputs the symbol and definition in two columns. The definition
+column is in paragraph form, so manual line breaking is not necessary. The width
+of the symbol column is set by the optional argument [width] in the
+\listofsymbols[width]{} command. The default is 1 inch. The definition column
+will be the remainder of the page, i.e. \textwidth-width. To change the width in
+the middle of the list of symbols, use the command \setsymwidth{width}. It
+redefines the symbol width and automatically adjusts the description width to
+the remainder of the page.
+
+By default, the first argument is output in math mode, but plain text symbols
+can be created with \mbox{}. For example, \symbolentry{g}{Acceleration due to
+Gravity} produces
+
+
+g Acceleration due to gravity
+
+
+Unformatted Front Matter Pages
+
+The remaining frontmatter pages do not include any formatting, hence commands
+are provided for the sole purpose of determining whether to include each page or
+not, and placing them in the correct order. They can be defined in any order but
+will appear in a specific order when the document is processed. These front
+matter items can be included are in two groups, commands which merely include
+the associated item, and commands which include the item and define its
+contents. The items will be output in the following order if the corresponding
+command is present:
+
+Macro Command Front Matter Item
+
+\includecopyrightpage Copyright Page
+\includepermission Permission to Copy Page (For MS Theses)
+\includesignature Signature Page (For PhD Theses)
+\includecommittee Committee Page (For PhD Theses)
+\dedicationtext{content} Dedication
+\abstracttext{content} Abstract
+ (Table of Contents)
+\includelistoffigures List of Figures
+\includelistoftables List of Tables
+\listofsymbols[wid]{content} List of Symbols
+\dedicationtext{content} Dedication
+\prefacetext{content} Preface
+\acknowltext{content} Acknowledgements
+\epigraphtext{content} Epigraph
+\frontispiece{content} Frontispiece
+
+For my thesis the content for each of these was an \include command to include a
+separate file, but you can put your actual content in the braces if you like.
+
+
+Back Matter
+
+There is considerably less back matter than front matter, but unfortunately, the
+thesis office wants some of the items to appear differently than the LATEX
+defaults. The following macros are provided to format the back matter items to
+the thesis office standards.
+
+
+Appendices
+
+Two commands are provided for inclusion of appendices, \singleappendix and
+\appendices. The reason for these is that the thesis office wants a single
+appendix to be called "Appendix" and LATEX treats it as a chapter and by default
+if the \appendix command was issued, would call it "Appendix A" and would put
+"A" in the table of contents. The provided macros \singleappendix and
+\appendices format the appendix/appendices to be called "Appendix" in both the
+text and the table of contents in the case of a single appendix and have the
+letters prefaced by the word "Appendix" in the table of contents in the case of
+multiple appendices.
+
+The appropriate command should be issued, followed by a \chapter command to
+provide a title for the appendix,
+
+\singleappendix \chapter{Appendix name} <text of appendix>
+
+or
+
+\appendices \chapter{First appendix name} <text of appendix>
+\chapter{Second appendix name} <text of appendix>
+
+etc.
+
+
+Bibliography Entry
+
+Unfortunately, the bibliography is also not included in the table of contents by
+default. A command is provided to include the bibliography in the table of
+contents and single space the list of references. The command is
+\includebibliography{}. Unlike the other "include" commands, the
+\includebibliography{} command takes an argument which is the bibliography
+itself. This is for single space formatting. Simply include the bibliographic
+entries as its argument to print out the bibliography. Using LATEX features is
+fine, so the command would likely be
+
+\includebibliography{\bibliography{refs}}
+
+if BibTEX is used. The psuthesis.bst style file is included for producing a
+bibliography with BibTEX.
+
+
+Vita
+
+A command \vita{} is provided to include a vita/curriculum vitae at the end of
+the thesis. It is not required by the thesis office, but many like to include
+it. The argument is the vita itself, most likely an \input{} or \include command
+linking to a file containing the vita. The macro provides a clean page and the
+author name from the front matter.
+
+
+UMI Abstract
+
+The UMI Abstract is required by the thesis office for PhD theses. UMI keeps your
+thesis on file and if you read the fine print, keeps your royalties unless a lot
+of people request your thesis in a given year. The UMI abstract is not bound
+with the thesis, but it can be placed at the end so a whole separate document is
+not required. The command \UMIabstract{} formats the specific header required by
+UMI using information from the front matter and includes the abstract supplied
+as the argument. The UMI abstract has a word limit (consult the thesis guide for
+details), but if the thesis abstract falls within the word limit it can be the
+same for both. The abstract is printed without a page number since it is not
+bound with the thesis.
+
+
+Numbering by Chapter
+
+The \numberbychapter command changes the numbering scheme for figures, tables,
+and equations to follow the chapters so that they are numbered 1.1, 1.2, 1.3,
+... in the first chapter, and 2.1, 2.2, 2.3, ... in the second chapter and so
+forth. This command should always be included to follow thesis office
+guidelines. Include it in the preamble to activate.
+
+
+Other notes
+
+There may be other commands hiding in the style file that are not documented
+here. These instructions and the sample files were thrown together to try to
+make the package usable without people tracking down my email address and asking
+me about them. The mssample and phdsample files are provided to show how many of
+the features work in for MS and PhD theses. Feel free to look through the .sty
+file itself and discover commands I forgot to document in these instructions. If
+you know enough about TEX and LATEX to be using them to write a thesis, you can
+figure it out.
+
+Finally, I put together much of the style file by piecing together parts of
+other style files that I picked up from various people. Some of the macros
+identify who wrote them, and I preserved the original author information if
+present, even if I modified the macros. So if there is some piece of code in the
+style file that you wrote but isn't credited to you, thank you for your
+contribution and it wasn't me who took your name out.
+
+I hope you find the package helpful, if so, please tell the Thesis Office they
+should support LATEX and/or tell your friends about this macro package.
diff --git a/obsolete/macros/latex/contrib/psu-thesis/manual.pdf b/obsolete/macros/latex/contrib/psu-thesis/manual.pdf
new file mode 100644
index 0000000000..dcbb462254
--- /dev/null
+++ b/obsolete/macros/latex/contrib/psu-thesis/manual.pdf
Binary files differ
diff --git a/obsolete/macros/latex/contrib/psu-thesis/manual.tex b/obsolete/macros/latex/contrib/psu-thesis/manual.tex
new file mode 100644
index 0000000000..aee18ea39b
--- /dev/null
+++ b/obsolete/macros/latex/contrib/psu-thesis/manual.tex
@@ -0,0 +1,426 @@
+\documentclass[11pt]{article}
+\usepackage{psu-thesis}
+\usepackage{texnames} % only needed for \BibTeX macro
+\setlength{\paperwidth}{8.5in} \setlength{\paperheight}{11in}
+\setlength{\textwidth}{6.5in} \setlength{\textheight}{8.5in}
+\setlength{\topmargin}{0in} \setlength{\oddsidemargin}{0in}
+\setlength{\evensidemargin}{0in}
+\begin{document}
+\begin{singlespace}
+\title{Manual for psu-thesis \LaTeX\ Style File}
+\author{Matthew W. Floros}
+\date{September 17, 2008}
+\maketitle
+\section*{Included Files}
+\begin{verbatim}
+manual.tex
+manual.pdf
+psu-thesis.sty
+psu-thesis.bst
+mssample.tex
+mssample.pdf
+phdsample.tex
+phdsample.pdf
+\end{verbatim}
+
+\section*{Introduction}
+
+The origin of this style file came directly from my horrible experience trying
+to write a technical Master's thesis using ``a popular word processor.'' It
+was at that time that I decided that it would be best to bite the bullet
+and simply learn \TeX\ and not have to deal with that nightmare again for my
+PhD thesis.
+
+Unfortunately, at the time I was writing my Ph.D. thesis, Penn State did not
+provide any support for \TeX\ users. Although there were several style files
+floating around different departments, they seemed to me as a novice user to
+require quite a bit of effort to use them. The style file itself had to be
+changed, i.e. lines commented out or uncommented, and there was no
+documentation. My goal was to merge together parts of various style files and
+make a single package whose features could all be accessed through issuing
+simple \LaTeX\ commands in the document rather than editing the style file
+itself.
+
+I received my PhD in December of 2000 and did the development work on this
+package then. I wrote most of this documentation in 2002 and then came back to
+it in 2008 when I realized I could upload it to CTAN and make it available to
+other people. A fair amount of work went into it and I thought others could
+benefit. As of 2000, the Penn State Thesis Office had no interest in
+having anything to do with a \LaTeX\ style file and only maintained templates
+for ``popular word processors.'' I'm sure they still feel the same way.
+
+{\bfseries Note that I have not reviewed the thesis guidelines since 2000 and
+they may have changed. When I submitted my thesis in 2000, it passed Thesis
+Office scrutiny using this package. The committee page was contributed from a
+2004 thesis, and incorporated ``as-is,'' with appropriate logic to include it or
+not.}
+
+There are few guidelines for the main body of the thesis, so nearly all of the
+provided commands can be classified as either front matter or back matter.
+These commands are used to set up the title page, abstract, appendices, and so
+forth. There are some commands which do not fall into these two categories
+which are provided at the end. A summary of the commands is provided below.
+
+Note that the setspace package is a separate \LaTeX package, not something
+developed at PSU. It is a required package because the line spacing and some of
+the commands in the psu-thesis style file rely on commands in the setspace style
+file.
+
+To include the style file (and bibliographic style file psuthesis.bst) in your
+thesis document, simply issue the command \verb+\usepackage{psu-thesis}+ in the
+preamble \emph{after} the \verb+documentclass+ command and
+\verb+\usepackage{doublespace}+ command since many of the psu-thesis commands
+rely on the doublespace package. It is also intended to be used with the
+\verb+report+ document class:
+
+\begin{verbatim}
+\documentclass[dvips,11pt,twoside]{report}
+\usepackage{doublespace}
+\usepackage{psu-thesis}
+\bibliographystyle{psuthesis}
+\end{verbatim}
+
+The package was set up with both one-sided and two-sided printing in mind, so
+the optional arguments \verb+oneside+ and \verb+twoside+ to the report document
+class can be used and the macros provided in this package will adapt
+accordingly.
+
+\section*{Package Options}
+
+The following options are available:
+\begin{verbatim}
+master
+doctor
+signature
+draft
+\end{verbatim}
+
+The first two package options, \verb+master+ and \verb+doctor+ are available
+which set defaults for those thesis types:
+
+\begin{tabular}{ll}
+\verb+master+ & \verb+doctor+ \\ \hline
+Set degree to ``Master of Science'' & Set degree to ``Doctor of Philosophy'' \\
+Permission to Copy Page & Committee Page \\
+List of Tables & List of Tables \\
+List of Figures & List of Figures
+\end{tabular}
+
+The \verb+signature+ option will include the signature page, which has since
+been supplanted by the committee page. The \verb+\includesignature+ command in
+the preamble produces the same effect.
+
+The \verb+draft+ option is useful for version control of drafts of your
+thesis while it is being written. It produces a box with the date the document
+was produced at the top of every page,
+
+\noindent\usebox{\draftbox}
+
+You can also place the \verb+\draft+ command in the preamble to activate this
+feature.
+
+\section*{Front Matter}
+
+Most of the commands provided are related to the front matter. Commands can be
+divided into three groups, commands which set information for the title page,
+commands to set up the signature page, and commands to include and format the
+other front matter items.
+
+The front matter definition commands can be issued either in the preamble or
+within the document itself. The only command that is required to appear within
+the document is the \verb+\makefrontmatter+ command which generates and outputs
+all of the frontmatter material based on the other commands issued. Of course
+if the commands to create the front matter parts are not in the preamble, they
+must appear \emph{before} the \verb+\makefrontmatter+ command.
+
+\subsection*{Title Page Information}
+
+A variety of general information is required for the style file to format the
+title page, signature page, and so forth. These commands to input the
+information are straightforward. The appropriate information is simply the
+argument of the command:
+
+\begin{tabular}{ll}
+\verb+\title{}+ & thesis title (it should be in all caps; this is not automatic)\\
+\verb+\author{}+ & thesis author \\
+\verb+\dept{}+ & academic department in which thesis is earned \\
+\verb+\college{}+ & college the above department belongs to \\
+\verb+\submitdate{}+ & month and year of submission/publication of thesis \\
+\verb+\copyrightyear{}+ & year of publication of thesis (for title and copyright
+pages) \\
+\verb+\degree{}+ & degree being obtained, e.g. ``Doctor of Philosophy''
+\end{tabular}
+
+The thesis type is set to produce ``A Thesis in...'' by default but can be
+changed to ``A Thesis Proposal in...'' with the \verb+\proposal+ command or ``A
+Dissertation in'' with the \verb+\dissertation+ command.
+
+Additionally, the \verb+\includecopyrightline+ command will include a copyright
+line on the title page using the copyright year and author information supplied.
+Alternatively, the command \verb+\includecopyrightpage+ will cause a separate
+copyright page to be output immediately following the title page. Both the
+title page line and separate page can be included, but only one is recommended.
+
+\subsection*{Signature/Committee Page Information}
+
+The signature and committee pages can be set up with up to six thesis readers
+using the \verb+\includesignature+ and \verb+\includecommittee+ commands,
+respectively. A suite of commands are included to aid in the formatting of the
+signature and committee pages. Headings and spacing are set automatically. The
+author information is taken from the \verb+\author{}+ command above. Each
+reader is added with a consecutive command, i.e.
+
+\begin{verbatim}
+\firstreader{}{}
+\secondreader{}{}
+\thirdreader{}{}
+\fourthreader{}{}
+\fifthreader{}{}
+\sixthreader{}{}
+\end{verbatim}
+
+Each reader command requires two arguments. The first is the reader's name, and
+the second is the title and affiliation of that reader, for example
+
+\noindent\verb+\firstreader{Isaac Newton}{Professor of Mathematics}+
+
+\noindent would produce \vspace{0.25in}
+
+\signature{Isaac Newton \\ Professor of Mathematics \\}
+
+\vspace{0.25in}
+
+\noindent for the signature page and similar without the lines for the committee
+page. The signature page is optional, and can be included with
+\verb+\includesignature+ in the preamble or the \verb+signature+ package option.
+It is not numbered, so it can be bound with the author's personal copy and the
+page numbers will not differ from the reference copy.
+
+Several macros have been defined to format the reader affiliations. First,
+macros are defined to identify the professor as assistant, associate, or full
+professor:
+\begin{verbatim}
+\assistprof{}
+\assocprof{}
+\prof{}
+\end{verbatim}
+\noindent Additionally, the macro \verb+head{}+ is defined to identify that the
+reader is the head of the department. The Thesis Office likes to see both
+\verb+\prof{}+ and \verb+\head{}+ for department heads.
+
+Macros are provided for additional information as follows:
+
+\begin{tabular}{ll}
+Macro Command & Text Produced \\ \hline
+\verb+\adviser+ & Thesis Adviser \\
+\verb+\coadviser+ & Thesis Co-Adviser \\
+\verb+\chair+ & Chair of Committee \\
+\verb+\cochair+ & Co-Chair of Committee \\
+\verb+\adviserchair+ & Thesis Adviser, Chair of Committee \\
+\verb+\coadviserchair+ & Thesis Co-Adviser, Co-Chair of Committee
+\end{tabular}
+
+These macros are not necessarily of much value since it is nearly as easy to
+simply type the appropriate information into the document rather than using the
+macros, but several style files I came across contained such shortcuts, so they
+were retained in this package.
+
+For example, either
+
+\begin{verbatim}
+\secondreader{Isaac Newton}{\prof{Mathematics}\head{Mathematics}
+\adviserchair} \end{verbatim}
+
+\noindent or
+
+\noindent\begin{verbatim}
+\secondreader{Isaac Newton}{Professor of Physics \\
+Head of Department of Physics \\ Thesis Adviser, Chair of Committee}
+\end{verbatim}
+
+\noindent would produce \vspace{0.25in}
+
+\signature{Isaac Newton \\ Professor of Physics \\
+ Head of Department of Physics \\ Thesis Adviser, Chair of Committee}
+
+\vspace{0.25in}
+
+
+\subsection*{Permission to Copy Page}
+
+The permission to copy page is produced with the \verb+\includepermission+
+command. The name is taken from the \verb+\author+ entry. No other input is
+required since the required text is given in the thesis guide.
+
+\subsection*{List of Symbols}
+
+Three macros are included for the List of Symbols. The first,
+\verb+\listofsymbols[width]{}+, causes the List of Symbols to be included in the
+frontmatter. The List of Symbols itself is the required argument, which can of
+course be entered directly or in a separate file and accessed with an
+\verb+\input+ or similar command.
+
+The second macro is to aid in generating the symbol list and takes the form
+
+\noindent \verb+\symbolentry{symbol}{definition}+
+
+The command outputs the symbol and definition in two columns. The definition
+column is in paragraph form, so manual line breaking is not necessary. The
+width of the symbol column is set by the optional argument \verb+[width]+ in
+the \verb+\listofsymbols[width]{}+ command. The default is 1 inch. The
+definition column will be the remainder of the page, i.e.
+\verb+\textwidth-width+. To change the width in the middle of the list of
+symbols, use the command \verb+\setsymwidth{width}+. It redefines the symbol
+width and automatically adjusts the description width to the remainder of the
+page.
+
+By default, the first argument is output in math mode, but plain
+text symbols can be created with \verb+\mbox{}+. For example,
+\verb+\symbolentry{g}{Acceleration due to Gravity}+ produces
+
+\symbolentry{g}{Acceleration due to gravity}
+
+\subsection*{Unformatted Front Matter Pages}
+
+The remaining frontmatter pages do not include any formatting, hence commands
+are provided for the sole purpose of determining whether to include each page or
+not, and placing them in the correct order. They can be defined in any order
+but will appear in a specific order when the document is processed. These front
+matter items can be included are in two groups, commands which merely include
+the associated item, and commands which include the item and define its
+contents. The items will be output in the following order if the corresponding
+command is present:
+
+\begin{tabular}{ll}
+Macro Command & Front Matter Item \\ \hline
+\verb+\includecopyrightpage+ & Copyright Page \\
+\verb+\includepermission+ & Permission to Copy Page (For MS Theses) \\
+\verb+\includesignature+ & Signature Page (For PhD Theses) \\
+\verb+\includecommittee+ & Committee Page (For PhD Theses) \\
+\verb+\dedicationtext{content}+ & Dedication \\
+\verb+\abstracttext{content}+ & Abstract \\
+\multicolumn{2}{c}{(Table of Contents)} \\
+\verb+\includelistoffigures+ & List of Figures \\
+\verb+\includelistoftables+ & List of Tables \\
+\verb+\listofsymbols[wid]{content}+ & List of Symbols \\
+\verb+\dedicationtext{content}+ & Dedication \\
+\verb+\prefacetext{content}+ & Preface \\
+\verb+\acknowltext{content}+ & Acknowledgements \\
+\verb+\epigraphtext{content}+ & Epigraph \\
+\verb+\frontispiece{content}+ & Frontispiece
+\end{tabular}
+\vspace{12pt}
+
+For my thesis the content for each of these was an \verb+\include+ command to
+include a separate file, but you can put your actual content in the braces if
+you like.
+
+\section*{Back Matter}
+
+There is considerably less back matter than front matter, but unfortunately, the
+thesis office wants some of the items to appear differently than the \LaTeX\
+defaults. The following macros are provided to format the back matter items
+to the thesis office standards.
+
+\subsection*{Appendices}
+
+Two commands are provided for inclusion of appendices, \verb+\singleappendix+
+and \verb+\appendices+. The reason for these is that the thesis office wants a
+single appendix to be called ``Appendix'' and \LaTeX\ treats it as a chapter and
+by default if the \verb+\appendix+ command was issued, would call it ``Appendix
+A'' and would put ``A'' in the table of contents. The provided macros
+\verb+\singleappendix+ and \verb+\appendices+ format the appendix/appendices to
+be called ``Appendix'' in both the text and the table of contents in the case of
+a single appendix and have the letters prefaced by the word ``Appendix'' in the
+table of contents in the case of multiple appendices.
+
+The appropriate command
+should be issued, followed by a \verb+\chapter+ command to provide a title for
+the appendix,
+
+\begin{verbatim}
+\singleappendix \chapter{Appendix name}
+<text of appendix>
+\end{verbatim}
+
+\noindent or
+
+\begin{verbatim}
+\appendices \chapter{First appendix name}
+<text of appendix>
+
+\chapter{Second appendix name}
+<text of appendix>
+\end{verbatim}
+
+\noindent etc.
+
+\subsection*{Bibliography Entry} Unfortunately, the bibliography is also not
+included in the table of contents by default. A command is provided to include
+the bibliography in the table of contents and single space the list of
+references. The command is \verb+\includebibliography{}+. Unlike the other
+``include'' commands, the \verb+\includebibliography{}+ command takes an
+argument which is the bibliography itself. This is for single space
+formatting. Simply include the bibliographic entries as its argument to print
+out the bibliography. Using \LaTeX features is fine, so the command would
+likely be
+
+\noindent \verb+\includebibliography{\bibliography{refs}}+
+
+\noindent if \BibTeX\ is used. The psuthesis.bst style file is included for
+producing a bibliography with \BibTeX.
+
+\subsection*{Vita}
+
+A command \verb+\vita{}+ is provided to include a vita/\emph{curriculum vitae}
+at the end of the thesis. It is not required by the thesis office, but many
+like to include it. The argument is the vita itself, most likely an
+\verb+\input{}+ or \verb+\include+ command linking to a file containing the
+vita. The macro provides a clean page and the author name from the front
+matter.
+
+\subsection*{UMI Abstract}
+
+The UMI Abstract is required by the thesis office for PhD theses. UMI keeps
+your thesis on file and if you read the fine print, keeps your royalties unless
+a lot of people request your thesis in a given year. The UMI abstract is not
+bound with the thesis, but it can be placed at the end so a whole separate
+document is not required. The command \verb+\UMIabstract{}+ formats the
+specific header required by UMI using information from the front matter and
+includes the abstract supplied as the argument. The UMI abstract has a word
+limit (consult the thesis guide for details), but if the thesis abstract falls
+within the word limit it can be the same for both. The abstract is printed
+without a page number since it is not bound with the thesis.
+
+\section*{Numbering by Chapter}
+
+The \verb+\numberbychapter+ command changes the numbering scheme for figures,
+tables, and equations to follow the chapters so that they are numbered 1.1,
+1.2, 1.3, ... in the first chapter, and 2.1, 2.2, 2.3, ... in the second
+chapter and so forth. This command should always be included to follow thesis
+office guidelines. Include it in the preamble to activate.
+
+
+\section*{Other notes}
+
+There may be other commands hiding in the style file that are not documented
+here. These instructions and the sample files were thrown together to try to
+make the package usable without people tracking down my email address and asking
+me about them. The \verb+mssample+ and \verb+phdsample+ files are provided to
+show how many of the features work in for MS and PhD theses. Feel free to look
+through the .sty file itself and discover commands I forgot to document in these
+instructions. If you know enough about \TeX\ and \LaTeX\ to be using them to
+write a thesis, you can figure it out.
+
+Finally, I put together much of the style file by piecing together parts of
+other style files that I picked up from various people. Some of the macros
+identify who wrote them, and I preserved the original author information if
+present, even if I modified the macros. So if there is some piece of code in
+the style file that you wrote but isn't credited to you, thank you for your
+contribution and it wasn't me who took your name out.
+
+I hope you find the package helpful, if so, please tell the Thesis Office they
+should support \LaTeX\ and/or tell your friends about this macro package.
+
+\end{singlespace}
+\end{document}
diff --git a/obsolete/macros/latex/contrib/psu-thesis/mssample.pdf b/obsolete/macros/latex/contrib/psu-thesis/mssample.pdf
new file mode 100644
index 0000000000..13683dec6b
--- /dev/null
+++ b/obsolete/macros/latex/contrib/psu-thesis/mssample.pdf
Binary files differ
diff --git a/obsolete/macros/latex/contrib/psu-thesis/mssample.tex b/obsolete/macros/latex/contrib/psu-thesis/mssample.tex
new file mode 100644
index 0000000000..245e93d103
--- /dev/null
+++ b/obsolete/macros/latex/contrib/psu-thesis/mssample.tex
@@ -0,0 +1,180 @@
+\documentclass[dvips,11pt,twoside]{report}
+\usepackage[master]{psu-thesis}
+\bibliographystyle{psuthesis}
+\draft
+\raggedbottom
+\setstretch{1.5}
+
+\title{A NEW THEORY THAT WILL MAKE ME FAMOUS}
+
+\author{John Q. Doe}
+
+\firstreader{Albert Einstein}{\assocprof{Physics} \adviserchair}
+\secondreader{Leonhard Euler}{\assistprof{Mathematics}}
+\thirdreader{Rene Descartes}{\prof{Mathematics}}
+\fourthreader{Isaac Newton}{\prof{Mathematics}}
+\fifthreader{Leonardo DaVinci}{\prof{Physics} \head{Physics}}
+
+\dept{Physics}\college{Eberly College of Science}
+\submitdate{May 2008}
+\copyrightyear{2008}
+\thesis
+%\degree{Master of Science}
+%\includepermission
+\principaladviser{Albert Einstein}
+\includecopyrightpage
+\includecopyrightline
+%\includelistoftables
+%\includelistoffigures
+\listofsymbols[0.75in]{
+\symbolentry{c}{Speed of light in a vacuum}
+\symbolentry{e}{Euler Number}
+\symbolentry{g}{Acceleration due to gravity. According to legend, one of my
+readers had discovered gravity because an apple fell on his head. Of course
+this is only shown to illustrate that multi-line variable descriptions remain in
+the description column.}
+\symbolentry{M_e}{Mass of Earth}
+\symbolentry{G}{Universal gravitation constant. Following symbols will have
+different column widths.}
+\setsymwidth{0.5in}
+\symbolentry{()'}{First derivative of a quantity. Notice that the columns have
+moved and since the minipage environment is used, the description is wrapped to
+the new column width. This might be used if both single character and longer
+definitions such as integral expressions, are used in the list of symbols.}
+\symbolentry{()''}{Second derivative of a quantity}
+}
+
+\dedicationtext{This thesis is dedicated to my wife Mrs. Doe.}
+\abstracttext{This thesis will no doubt be famous considering my committee.}
+\acknowltext{I would like to thank H.G. Wells for lending me his time machine so
+my committee could be present even though they lived over a span of hundreds of
+years.}
+\prefacetext{This is the preface}
+\epigraphtext{This is the Epigraph}
+\frontispiece{Insert Picture Here for Frontispiece}
+
+\begin{document}
+
+\makefrontmatter
+
+\chapter{Basic Considerations}
+
+This is a sample masters thesis. It has two skeleton chapters and two
+appendices with simple figures and tables so that the lists and tables are
+populated. There is no bibliography information.
+
+The body of the thesis would go here. Note that the placement of figures and
+amount of figures and text per page is controlled by the \LaTeX commands:
+\verb+\floatpagefraction+, \verb+\topfraction+, \verb+\bottomfraction,+ and
+\verb+\textfraction+.
+
+\begin{table} \caption{Sample table in Chapter 1} \begin{center}
+\begin{tabular}{|l|l|} \hline
+Column 1, line 1 & Column 2, line 1 \\ \hline
+Column 1, line 2 & Column 2, line 2 \\ \hline
+Column 1, line 3 & Column 2, line 3 \\ \hline
+Column 1, line 4 & Column 2, line 4 \\ \hline
+\end{tabular} \end{center} \end{table}
+
+\begin{table} \caption{Second sample table in Chapter 1} \begin{center}
+\begin{tabular}{|l|l|} \hline
+Column 1, line 1 & Column 2, line 1 \\ \hline
+Column 1, line 2 & Column 2, line 2 \\ \hline
+Column 1, line 3 & Column 2, line 3 \\ \hline
+Column 1, line 4 & Column 2, line 4 \\ \hline
+\end{tabular} \end{center} \end{table}
+
+\begin{figure} \caption{Sample figure in Chapter 1} \begin{center}
+\framebox{\begin{minipage}{5in}
+\vspace{2in} \hfill \Huge A Figure would go here. \hfill \vspace{2in}
+\end{minipage}}
+\end{center} \end{figure}
+
+\begin{figure} \caption{Second sample figure in Chapter 1} \begin{center}
+\framebox{\begin{minipage}{5in}
+\vspace{2in} \hfill \Huge A Figure would go here. \hfill \vspace{2in}
+\end{minipage}}
+\end{center} \end{figure}
+
+\chapter{Advanced Considerations}
+
+A second chapter is included to illustrate the \verb+\numberbychapter+ feature,
+which numbers tables and figures by the chapter number.
+
+\begin{figure} \caption{Sample figure in Chapter 2} \begin{center}
+\framebox{\begin{minipage}{5in}
+\vspace{2in} \hfill \Huge A Figure would go here. \hfill \vspace{2in}
+\end{minipage}}
+\end{center} \end{figure}
+
+\begin{figure} \caption{Second sample figure in Chapter 2} \begin{center}
+\framebox{\begin{minipage}{5in}
+\vspace{2in} \hfill \Huge A Figure would go here. \hfill \vspace{2in}
+\end{minipage}}
+\end{center} \end{figure}
+
+\begin{table} \caption{Sample table in Chapter 2} \begin{center}
+\begin{tabular}{|l|l|} \hline
+Column 1, line 1 & Column 2, line 1 \\ \hline
+Column 1, line 2 & Column 2, line 2 \\ \hline
+Column 1, line 3 & Column 2, line 3 \\ \hline
+Column 1, line 4 & Column 2, line 4 \\ \hline
+\end{tabular} \end{center} \end{table}
+
+\begin{table} \caption{Second sample table in Chapter 2} \begin{center}
+\begin{tabular}{|l|l|} \hline
+Column 1, line 1 & Column 2, line 1 \\ \hline
+Column 1, line 2 & Column 2, line 2 \\ \hline
+Column 1, line 3 & Column 2, line 3 \\ \hline
+Column 1, line 4 & Column 2, line 4 \\ \hline
+\end{tabular} \end{center} \end{table}
+
+
+\includebibliography{
+\chapter*{Bibliography}
+The bibliography would go here. It will not appear in the table of contents by
+default. The \emph{includebibliography} command adds to the table of contents
+and formats as single space. The built in \LaTeX\ bilbiography features can be
+used inside and are automatically single spaced.
+}
+
+\appendices \chapter{The First Appendix}
+
+
+\begin{table} \caption{Sample table in first appendix} \begin{center}
+\begin{tabular}{|l|l|} \hline
+Column 1, line 1 & Column 2, line 1 \\ \hline
+Column 1, line 2 & Column 2, line 2 \\ \hline
+Column 1, line 3 & Column 2, line 3 \\ \hline
+Column 1, line 4 & Column 2, line 4 \\ \hline
+\end{tabular} \end{center} \end{table}
+
+
+The first appendix goes here. The style file changes the chapter title to
+"Appendix A" rather than ``A'' in the table of contents per the thesis
+guidelines. The PhD example has a single appendix for illustration.
+
+A specific \verb+\chapter+ declaration is required for each appendix to specify
+the title of the appendix. In that respect, it behaves like any other chapter
+and the \verb+\appendices+ command merely reformats so it is called
+``Appendix A'' in the table of contents
+
+\chapter{The Second Appendix}
+
+A second Appendix goes here. Two figures are included for inclusion in the
+table of contents.
+
+\begin{figure} \caption{Sample figure in the second appendix} \begin{center}
+\framebox{\begin{minipage}{5in}
+\vspace{2in} \hfill \Huge A Figure would go here. \hfill \vspace{2in}
+\end{minipage}}
+\end{center} \end{figure}
+
+\begin{figure} \caption{Second sample figure in the second appendix}
+\begin{center}
+\framebox{\begin{minipage}{5in}
+\vspace{2in} \hfill \Huge A Figure would go here. \hfill \vspace{2in}
+\end{minipage}}
+\end{center} \end{figure}
+
+\end{document}
diff --git a/obsolete/macros/latex/contrib/psu-thesis/phdsample.pdf b/obsolete/macros/latex/contrib/psu-thesis/phdsample.pdf
new file mode 100644
index 0000000000..528231e413
--- /dev/null
+++ b/obsolete/macros/latex/contrib/psu-thesis/phdsample.pdf
Binary files differ
diff --git a/obsolete/macros/latex/contrib/psu-thesis/phdsample.tex b/obsolete/macros/latex/contrib/psu-thesis/phdsample.tex
new file mode 100644
index 0000000000..f1f83ed68c
--- /dev/null
+++ b/obsolete/macros/latex/contrib/psu-thesis/phdsample.tex
@@ -0,0 +1,185 @@
+\documentclass[dvips,11pt,oneside]{report}
+\usepackage[doctor,signature]{psu-thesis}
+\numberbychapter
+\bibliographystyle{psuthesis}
+
+\raggedbottom
+\setstretch{1.5}
+\begin{document}
+
+\title{A NEW THEORY THAT WILL MAKE ME FAMOUS}
+
+\author{John Q. Doe}
+
+\firstreader{Albert Einstein}{\assocprof{Physics} \adviserchair}
+\secondreader{Leonhard Euler}{\assistprof{Mathematics}}
+\thirdreader{Rene Descartes}{\prof{Mathematics}}
+\fourthreader{Isaac Newton}{\prof{Mathematics}}
+\fifthreader{Leonardo DaVinci}{\prof{Physics} \head{Physics}}
+
+\dept{Physics}\college{Eberly College of Science}
+\submitdate{May 2008}
+\copyrightyear{2008}
+\thesis
+%\degree{Doctor of Philosophy}
+\principaladviser{Albert Einstein}
+\includecopyrightpage
+\includecopyrightline
+%\includecommittee
+%\includelistoftables
+%\includelistoffigures
+\listofsymbols{
+\symbolentry{c}{Speed of light in a vacuum}
+\symbolentry{e}{Euler Number}
+\symbolentry{g}{Acceleration due to gravity. According to legend, one of my
+readers had discovered gravity because an apple fell on his head. Of course
+this is only shown to illustrate that multi-line variable descriptions remain in
+the description column.}
+\symbolentry{M_e}{Mass of Earth}
+\symbolentry{G}{Universal gravitation constant. Following symbols will have
+different column widths.}
+\setsymwidth{0.5in}
+\symbolentry{()'}{First derivative of a quantity. Notice that the columns have
+moved and since the minipage environment is used, the description is wrapped to
+the new column width. This might be used if both single character and longer
+definitions such as integral expressions, are used in the list of symbols.}
+\symbolentry{()''}{Second derivative of a quantity}
+}
+
+\dedicationtext{This thesis is dedicated to my wife Mrs. Doe.}
+\abstracttext{This thesis will no doubt be famous considering my committee.}
+\acknowltext{I would like to thank H.G. Wells for lending me his time machine so
+my committee could be present even though they lived over a span of hundreds of
+years.}
+\prefacetext{This is the preface}
+\epigraphtext{This is the Epigraph}
+\frontispiece{Insert Picture Here for Frontispiece}
+\makefrontmatter
+
+\chapter{Basic Considerations}
+
+This is a sample masters thesis. It has two skeleton chapters and two
+appendices with simple figures and tables so that the lists and tables are
+populated. There is no bibliography information.
+
+The body of the thesis would go here. Note that the placement of figures and
+amount of figures and text per page is controlled by the \LaTeX commands:
+\verb+\floatpagefraction+, \verb+\topfraction+, \verb+\bottomfraction,+ and
+
+\begin{table} \caption{Sample table in Chapter 1} \begin{center}
+\begin{tabular}{|l|l|} \hline
+Column 1, line 1 & Column 2, line 1 \\ \hline
+Column 1, line 2 & Column 2, line 2 \\ \hline
+Column 1, line 3 & Column 2, line 3 \\ \hline
+Column 1, line 4 & Column 2, line 4 \\ \hline
+\end{tabular} \end{center} \end{table}
+
+\begin{table} \caption{Second sample table in Chapter 1} \begin{center}
+\begin{tabular}{|l|l|} \hline
+Column 1, line 1 & Column 2, line 1 \\ \hline
+Column 1, line 2 & Column 2, line 2 \\ \hline
+Column 1, line 3 & Column 2, line 3 \\ \hline
+Column 1, line 4 & Column 2, line 4 \\ \hline
+\end{tabular} \end{center} \end{table}
+
+\begin{figure} \caption{Sample figure in Chapter 1} \begin{center}
+\framebox{\begin{minipage}{5in}
+\vspace{2in} \hfill \Huge A Figure would go here. \hfill \vspace{2in}
+\end{minipage}}
+\end{center} \end{figure}
+
+\begin{figure} \caption{Second sample figure in Chapter 1} \begin{center}
+\framebox{\begin{minipage}{5in}
+\vspace{2in} \hfill \Huge A Figure would go here. \hfill \vspace{2in}
+\end{minipage}}
+\end{center} \end{figure}
+
+\chapter{Advanced Considerations}
+
+A second chapter is included to illustrate the \verb+\numberbychapter+ feature,
+which numbers tables and figures by the chapter number.
+
+\begin{figure} \caption{Sample figure in Chapter 2} \begin{center}
+\framebox{\begin{minipage}{5in}
+\vspace{2in} \hfill \Huge A Figure would go here. \hfill \vspace{2in}
+\end{minipage}}
+\end{center} \end{figure}
+
+\begin{figure} \caption{Second sample figure in Chapter 2} \begin{center}
+\framebox{\begin{minipage}{5in}
+\vspace{2in} \hfill \Huge A Figure would go here. \hfill \vspace{2in}
+\end{minipage}}
+\end{center} \end{figure}
+
+\begin{table} \caption{Sample table in Chapter 2} \begin{center}
+\begin{tabular}{|l|l|} \hline
+Column 1, line 1 & Column 2, line 1 \\ \hline
+Column 1, line 2 & Column 2, line 2 \\ \hline
+Column 1, line 3 & Column 2, line 3 \\ \hline
+Column 1, line 4 & Column 2, line 4 \\ \hline
+\end{tabular} \end{center} \end{table}
+
+\begin{table} \caption{Second sample table in Chapter 2} \begin{center}
+\begin{tabular}{|l|l|} \hline
+Column 1, line 1 & Column 2, line 1 \\ \hline
+Column 1, line 2 & Column 2, line 2 \\ \hline
+Column 1, line 3 & Column 2, line 3 \\ \hline
+Column 1, line 4 & Column 2, line 4 \\ \hline
+\end{tabular} \end{center} \end{table}
+
+
+\includebibliography{
+\chapter*{Bibliography}
+The bibliography would go here. It will not appear in the table of contents by
+default. The \emph{includebibliography} command adds to the table of contents
+and formats as single space. The built in \LaTeX\ bilbiography features can be
+used inside and are automatically single spaced.
+}
+
+\singleappendix \chapter{There Can Be Only One}
+
+
+\begin{table} \caption{Sample table in Appendix} \begin{center}
+\begin{tabular}{|l|l|} \hline
+Column 1, line 1 & Column 2, line 1 \\ \hline
+Column 1, line 2 & Column 2, line 2 \\ \hline
+Column 1, line 3 & Column 2, line 3 \\ \hline
+Column 1, line 4 & Column 2, line 4 \\ \hline
+\end{tabular} \end{center} \end{table}
+
+
+A single appendix goes here. The style file changes
+the chapter title to "Appendix" rather than ``Appendix A'' per the thesis
+guidelines. The MS example has multiple appendices for illustration.
+
+A specific \verb+\chapter+ declaration is required to specify the title of the
+appendix. In that respect, it behaves like any other chapter and the
+\verb+\singleappendix+ command merely reformats so it is not called ``Appendix
+A''
+
+\begin{figure} \caption{Sample figure in the appendix} \begin{center}
+\framebox{\begin{minipage}{5in}
+\vspace{2in} \hfill \Huge A Figure would go here. \hfill \vspace{2in}
+\end{minipage}}
+\end{center} \end{figure}
+
+\begin{figure} \caption{Second sample figure in the appendix} \begin{center}
+\framebox{\begin{minipage}{5in}
+\vspace{2in} \hfill \Huge A Figure would go here. \hfill \vspace{2in}
+\end{minipage}}
+\end{center} \end{figure}
+
+\vita{The vita (or \emph{Curriculum vitae} for Latin enthusiasts) goes here.
+There are no special formatting commands for the vita.}
+
+\UMIabstract{The UMI abstract goes here. There are no special formatting
+commands for the UMI abstract, and it may be the same as the regular abstract
+at the beginning. The above information is taken from the frontmatter
+information and formatted automatically.
+
+Note that the UMI abstract is not bound with the thesis and hence has no page
+number. It is printed at the end as a convenience. By default it is spaced the
+same as the thesis but can be made a different spacing if desired. But for some
+reason it complains if the abstract is not a single paragraph.}
+
+\end{document}
diff --git a/obsolete/macros/latex/contrib/psu-thesis/psu-thesis.sty b/obsolete/macros/latex/contrib/psu-thesis/psu-thesis.sty
new file mode 100644
index 0000000000..79327bde7f
--- /dev/null
+++ b/obsolete/macros/latex/contrib/psu-thesis/psu-thesis.sty
@@ -0,0 +1,799 @@
+%% psu-thesis.sty
+%% Copyright 2008 Matt Floros
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Matt Floros.
+%
+% This work consists of the files psuthesis.sty and psuthesis.bst
+
+%-------------------------------------------------------------------------------
+
+% PSU Thesis Style File Compiled by Matt Floros
+% This file contains macros for automatic generation of front matter, back
+% matter, signature pages, and so forth for Penn State master and doctoral
+% theses. It was pieced together from several sources, and many macros were
+% added such that the user should be able to piece together properly formatted
+% thesis with simple macro calls without editing this file.
+%
+% To generate the title page, the following variables must be set, either in the
+% preamble or in the document itself:
+% \title{} (Thesis title)
+% \author{} (Your name as it is to appear on the title page,
+% signature page, permission to copy page, and
+% UMI abstract)
+% \submitdate{} (Month and year, e.g. December 2000)
+% \principaladviser{} (Adviser's name)
+% \dept{} (Academic Department}
+% \degree{} (typically Master of Science or Doctor of Philosophy}
+% to generate the appropriate entries on the title page.
+%
+% \includecopyrightline will add a copyright line on the title page
+%
+%
+% Possibly one of the following commands must be issued:
+% \thesis
+% \dissertation
+% \proposal
+%
+% to set whether or not you want the title page to say "A Thesis in" "A Thesis
+% Proposal in," or "A Dissertation in" (\thesis is default).
+%
+%
+% To generate the signature page, the readers must be set with
+% \firstreader{}{}, \secondreader{}{}, up to \sixthreader{}{}. If the number
+% of readers is smaller than six, simply omit the remaining. Each reader
+% command takes two arguments. The first is the reader's name, and the second
+% includes the identifiers for that reader. The following macros are used to
+% format the identifiers:
+% \adviser
+% \coadviser
+% \chair
+% \cochair
+% \head{}
+% \prof{}
+% \assistprof{}
+% \assocprof{}
+% or the combinations
+% \adviserchair
+% \coadviserchair
+% if these entries are to appear on the same line. Each command will produce a
+% line under the reader's name. The department is supplied as the argument for
+% \head{}, \prof{}, etc. For example:
+%
+% \firstreader{John Doe}{\adviserchair \prof{Chemistry}\head{Chemistry}}
+% would produce the entry:
+% John Doe
+% Thesis Adviser, Chair of Committee
+% Professor of Chemistry
+% Head of Department of Chemistry
+%
+%
+% Options are set to select the frontmatter that will be used in the thesis:
+%
+% \includecopyrightpage
+% \includelistoftables
+% \includelistoffigures
+% \includepermission
+% \includesignature
+% \listofsymbols[width]{list symbols here}*
+% \dedicationtext{Dedication here.}
+% \abstracttext{Abstract here.}
+% \acknowltext{Acknowledgements here.}
+% \prefacetext{Preface here.}
+% \epigraphtext{Epigraph here.}
+% \frontispiece{Picture Here}
+%
+% If not defined, the item will be neglected.
+%
+% * The list of symbols command \listofsymbols has an optional argument and
+% additional command which can be helpful for typesetting the list of symbols.
+% A command \symbolentry is defined which takes two arguments. The first is
+% the symbol itself and the second is the definition. A sample use of
+% \symbolentry would be \symbolentry{F}{Force}. Note that the first argument
+% is typeset in math mode by default and a command such as \mbox must be used
+% to set the symbol in regular text. The symbol and definition are set with
+% the minipage environment defaulting to 1 inch for the symbol, and the
+% remaining width of the text for the definition. Because the minipage
+% environment is used, the definition will wrap indented by the 1 inch if it is
+% too long to fit on a single line. The 1 inch can be changed either by
+% setting the length parameter \symbolwidth to a different value before calling
+% \listofsymbols, or adding an optional argument to \listofsymbols, i.e.
+% \listofsymbols[0.5in]{list symbols here}. If it is desired to change the
+% symbol width in the middle, the command \setsymwidth{length} will change the
+% column sizes.
+%
+% Finally, the frontmatter is created with \makefrontmatter which must be in
+% the main text.
+%
+%
+% Additionally, a draft command \draft is included which creates a box at the
+% top of each page with the date and time of creation. Note that this changes
+% the page style to {plain} where it would normally be {headings} so the draft
+% mark does not overlap the chapter headings.
+%
+%
+% A command \numberbychapter causes equations, figures, and tables to be
+% numbered by chapter as chapter.number, e.g. the first figure of chapter 2 is
+% figure 2.1. A seperate command \numtheorembychap does the same for theorems,
+% lemmas, and definitions, but must be invoked after defining the theorem or
+% definition environment.
+%
+%
+% Appendices should be preceeded by either \singleappendix or \appendices,
+% which format single or multiple appendices properly The appendix title
+% should be invoked by \chapter as usual after \singleappendix or \appendices
+% is issued.
+
+\NeedsTeXFormat {LaTeX2e}[1994/12/01]
+\def \filename {psu-thesis.sty}
+\def \filedate {2008/9/17}
+\def \fileversion {1.1}
+\ProvidesPackage {psu-thesis}[\filedate\space\fileversion\space
+ Contributed and Supported LaTeX2e package]
+\typeout {Package: `psu-thesis' \fileversion\space <\filedate>}
+
+% setspace package required for line spacing changes
+\RequirePackage[doublespacing]{setspace}
+
+\DeclareOption{master}{\AtEndOfPackage{%
+\thesis
+\degree{Master of Science}
+\includepermission
+\includelistoftables
+\includelistoffigures
+}}
+
+\DeclareOption{doctor}{\AtEndOfPackage{%
+\thesis
+\degree{Doctor of Philosophy}
+\includelistoftables
+\includelistoffigures
+\includecommittee
+}}
+
+\DeclareOption{signature}{\AtEndOfPackage{\includesignature}}
+
+\DeclareOption{draft}{\AtEndOfPackage{\draft}}
+
+\ProcessOptions
+
+% Set up page layout
+\oddsidemargin 0.5in
+\evensidemargin 0in
+\textwidth 6in
+\textheight 8.3in
+\topmargin 0in
+\headheight 0.25in
+\headsep 0.25in
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% Make figures fit better on the page %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\renewcommand{\floatpagefraction}{0.85}
+\renewcommand{\topfraction}{0.85}
+\renewcommand{\bottomfraction}{0.85}
+\renewcommand{\textfraction}{0.15}
+
+% Stolen from cwebmac.tex
+% \datethis to get the date and time on the output.
+%
+% modified 3/27/92 (sanjeev@cs.psu.edu)
+%
+
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+
+\newcount\twodigits
+\newcount\hrs
+
+\def\hours{\twodigits=\time%
+ \ifnum\twodigits>719\gdef\ampm{pm}%
+ \else\gdef\ampm{am}\fi%
+ \divide\twodigits by 60%
+ \hrs=\twodigits%
+ \ifnum\twodigits=0\twodigits=12\fi%
+ \ifnum\twodigits>12\advance\twodigits-12\fi\advance\twodigits0%
+ \ifnum\twodigits>9\printtwodigits:\else\printonedigit:\fi%
+ \twodigits=\hrs%
+ \multiply\twodigits by-60%
+ \advance\twodigits by\time%
+ \printtwodigits\space\ampm}
+
+\def\gobbleone1{}
+\def\gobbleten10{}
+
+\def\printonedigit{%
+ \advance\twodigits100
+ \expandafter\gobbleten\number\twodigits
+ \advance\twodigits-100 }
+
+\def\printtwodigits{%
+ \advance\twodigits100
+ \expandafter\gobbleone\number\twodigits
+ \advance\twodigits-100 }
+
+\def\datethis{\medskip{\sc\today\ at \hours}\bigskip}
+
+% Commands for the \draft command and box setup.
+\newif\ifthesisdraft
+\newsavebox{\draftbox}
+ \sbox{\draftbox}{\framebox{{\sc Draft:}\quad\datethis}}
+\def\draft{\thesisdrafttrue
+ \markright{\hfil\usebox{\draftbox}}\pagestyle{plain}}
+
+% Redefine the "empty" and "plain" pagestyles so that the "draft" indication
+% will be printed in the head in draft mode.
+
+\def\ps@empty{\let\@mkboth\@gobbletwo\def\@oddfoot{}
+\def\@evenfoot{}
+\ifthesisdraft
+ \def\@oddhead{\hfil\usebox{\draftbox}\hfil}
+ \def\@evenhead{\hfil\usebox{\draftbox}\hfil}
+\else
+ \def\@oddhead{}\def\@evenhead{}
+\fi}
+
+\def\ps@plain{\let\@mkboth\@gobbletwo\def\@oddfoot{}
+\ifthesisdraft
+ \def\@oddhead{\hfil\usebox{\draftbox}\hfil}
+ \def\@evenhead{\hfil\usebox{\draftbox}\hfil}
+\else
+ \def\@oddhead{}\def\@evenhead{}
+\fi
+\def\@evenfoot{\hfil \thepage \hfil}
+\def\@oddfoot{\hfil \thepage \hfil}
+}
+
+
+% \blankpage will produce a "floating" blank page.
+
+\def\blankpage{\begin{figure}
+\vskip\textheight
+\end{figure}}
+
+
+
+% Define \numberbychapter to number figures, tables, definitions and theorems
+% within chapters. Any theorem-like environment numbered with theorem inherits
+% this numbering (however, be sure to define the theorem/definition
+% environment before invoking \numberbychapter). The LaTeX 2e default is to
+% number equations by chapter, so \chapprefix is always set to prefix each
+% number with the chapter number.
+
+
+%\def\chapprefix{\thechapter.}
+\def\cl@chapter{\@elt{section}\@elt{footnote}}
+\def\numberbychapter{\def\thefigure{\thechapter.\arabic{figure}}
+ \@addtoreset{figure}{chapter}
+ \def\thetable{\thechapter.\arabic{table}}
+ \@addtoreset{table}{chapter}
+ \def\theequation{\thechapter.\arabic{equation}}
+ \@addtoreset{equation}{chapter}
+ \def\chapprefix{\thechapter.}
+}
+
+\def\thetable{\arabic{table}}
+\def\theequation{\arabic{equation}}
+\def\thefigure{\arabic{figure}}
+
+
+\def\numtheorembychap{\def\thetheorem{\thechapter.\arabic{theorem}}
+ \@addtoreset{theorem}{chapter}
+ \def\thedefine{\thechapter.\arabic{define}}
+ \@addtoreset{define}{chapter}
+ \def\thelemma{\thechapter.\arabic{lemma}}
+ \@addtoreset{lemma}{chapter}
+}
+
+
+%Define alphabetic sub-numbering of equations, figures, and chapters. The
+%eqnalph environment is an extension to the eqnarray environment to number by
+%letters also. It is commented out because the functionality is available in
+%the LaTeX package subeqn.sty.
+
+%\newcounter{saveeqn}%
+%\newenvironment{eqnalph}{\setcounter{saveeqn}{\value{equation}}%
+%\stepcounter{saveeqn}\setcounter{equation}{0}%
+%\renewcommand{\theequation}{\mbox{\chapprefix\arabic{saveeqn}%
+%\alph{equation}}}\begin{eqnarray}}%
+%{\end{eqnarray}\setcounter{equation}{\value{saveeqn}}%
+%\renewcommand{\theequation}{\chapprefix\arabic{equation}}}
+
+\newcounter{savefig}%
+\newenvironment{figalph}{\setcounter{savefig}{\value{figure}}%
+\stepcounter{savefig}\setcounter{figure}{0}%
+\renewcommand{\thefigure}{\mbox{\chapprefix\arabic{savefig}%
+\alph{figure}}}}%
+{\setcounter{figure}{\value{savefig}}%
+\renewcommand{\thefigure}{\chapprefix\arabic{figure}}}
+
+\newcounter{savetable}%
+\newenvironment{tablealph}{\setcounter{savetable}{\value{table}}%
+\stepcounter{savetable}\setcounter{table}{0}%
+\renewcommand{\thetable}{\mbox{\chapprefix\arabic{savetable}%
+\alph{table}}}}%
+{\setcounter{table}{\value{savetable}}%
+\renewcommand{\thetable}{\chapprefix\arabic{table}}}
+
+
+
+\def\dept#1{\gdef\@dept{#1}}
+\def\advis@r{Adviser}
+\def\principaladviser#1{\gdef\advis@r{#1}}
+
+%Define signature page items, modified from Kelliher by Floros 3/8/2000
+\def\adviser{Thesis Adviser \\}
+\def\coadviser{Thesis Co-Adviser \\}
+\def\chair{Chair of Committee \\}
+\def\cochair{Co-Chair of Committee \\}
+\def\head#1{Head of the Department of #1 \\}
+\def\prof#1{Professor of #1 \\}
+\def\assocprof#1{Associate Professor of #1 \\}
+\def\assistprof#1{Assistant Professor of #1 \\}
+\def\adviserchair{Thesis Adviser, Chair of Committee \\}
+\def\coadviserchair{Thesis Co-Adviser, Co-Chair of Committee \\}
+
+\def\firstreader#1#2{\def\@firstreader{#1 \\
+ #2}}
+\def\secondreader#1#2{\def\@secondreader{#1 \\
+ #2}}
+\def\thirdreader#1#2{\def\@thirdreader{#1 \\
+ #2}}
+\def\fourthreader#1#2{\def\@fourthreader{#1 \\
+ #2}}
+\def\fifthreader#1#2{\def\@fifthreader{#1 \\
+ #2}}
+\def\sixthreader#1#2{\def\@sixthreader{#1 \\
+ #2}}
+
+\def\submitdate#1{\gdef\@submitdate{#1}}
+\def\copyrightyear#1{\gdef\@copyrightyear{#1}} % \author, \title in report
+\def\@title{}\def\@author{}\def\@dept{Your Dept Here}
+\def\@firstreader{}\def\@secondreader{}\def\@thirdreader{}
+\def\@fourthreader{}\def\@fifthreader{}\def\@sixthreader{}
+\def\@submitdate{\ifcase\the\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space \number\the\year}
+\ifnum\month=12
+ \@tempcnta=\year \advance\@tempcnta by 1
+ \edef\@copyrightyear{\number\the\@tempcnta}
+\else
+ \def\@copyrightyear{\number\the\year}
+\fi
+
+% This was made more user-friendly by MWF 3/7/2000 such that changes
+% to this file were replaced by setting the \includexxx flags in the
+% main document
+\newif\iffigurespage \def\includelistoffigures{\figurespagetrue}
+\newif\iftablespage \def\includelistoftables{\tablespagetrue}
+\newif\ifcopyright \def\includecopyrightpage{\copyrighttrue}
+\newif\ifsignature \def\includesignature{\signaturetrue}
+\newif\ifcommittee \def\includecommittee{\committeetrue}
+
+\newif\iflospage
+\newcommand\listofsymbols[2][\symbolwidth]{\lospagetrue
+ \setlength{\symbolwidth}{#1}
+ \setlength{\symboldefwidth}{\textwidth}
+ \addtolength{\symboldefwidth}{-\symbolwidth}
+ \gdef\list@symbols{#2}}
+
+\def\copyright@line{\vfill}
+\def\includecopyrightline{\def\copyright@line{\vfill \begin{center}
+ \copyright\hspace{0.5em} \@copyrightyear\hspace{0.5em}\@author \end{center}
+ \vfill}}
+
+% Create commands to help generate the list of symbols. (MWF 7/6/2000)
+\newlength{\symbolwidth}\setlength{\symbolwidth}{1in}
+\newlength{\symboldefwidth}\setlength{\symboldefwidth}{\textwidth}
+\addtolength{\symboldefwidth}{-\symbolwidth}
+\def\symbolentry#1#2{\noindent\begin{minipage}[t]{\symbolwidth}
+ \singlespace $#1$ \endsinglespace \end{minipage}%
+ \begin{minipage}[t]{\symboldefwidth}\singlespace
+ #2 \endsinglespace \end{minipage}}
+
+% Change symbol width midstream (MWF 11/17/2002)
+\def\setsymwidth#1{\setlength{\symbolwidth}{#1}
+\setlength{\symboldefwidth}{\textwidth}
+\addtolength{\symboldefwidth}{-\symbolwidth}
+}
+
+% This was made more user-friendly by MWF 3/7/2000 such that changes
+% to this file were replaced by setting a thesis flag and the degree
+% type in the main document
+\def\@thesistype{A Thesis in}
+\def\dissertation{\gdef\@thesistype{A Dissertation in} \gdef\@degreetype{Doctor
+ of Philosophy}}
+\def\proposal{\gdef\@thesistype{A Thesis Proposal in}}
+\def\thesis{\gdef\@thesistype{A Thesis in}}
+
+\def\@degreetype{}
+\def\degree#1{\gdef\@degreetype{#1}}
+
+% Add option to specify college affiliation, ELH 10/4/2004
+\def\@collegename{}
+\def\college#1{\gdef\@collegename{#1}}
+
+\def\titlep{%
+ \pagestyle{empty}%
+ \null\vskip.25in% changed from 1in to .25in
+ \begin{center}
+ \textbf{The Pennsylvania State University\\
+ The Graduate School\\
+ \@collegename }
+ \end{center}
+ \vfill
+ \begin{center}
+ \large{\textbf{\uppercase\expandafter{\@title}}}
+ \end{center}
+ \vfill
+ \begin{center}{\singlespace
+ \@thesistype \\
+ \expandafter{\@dept}\\
+ \rm by\\
+ \@author\\ }
+ %\expandafter{\@copyrightyear}
+ \end{center}
+ \copyright@line
+ \begin{center}
+ {\singlespace
+ Submitted in Partial Fulfillment \\
+ of the Requirements \\
+ for the Degree of \endsinglespace}
+ \end{center}
+ \vfill
+ \begin{center}
+ \@degreetype
+ \end{center}
+ \vfill
+ \begin{center}
+ \@submitdate
+ \end{center}
+ \cleardoublepage}
+
+\def\copyrightpage{%
+ \null\vfill
+ \pagestyle{empty}
+ { \singlespace \begin{center}
+ \Large\copyright\ Copyright \@copyrightyear\\
+ by\\
+ \@author\\
+ All Rights Reserved\\
+ \end{center}
+ \vfill}\cleardoublepage
+}
+
+\long\def\signature#1{%
+\begin{minipage}{6.0in}
+\parindent=0pt \raggedright
+{\vrule width 3.9in height 0.4pt\hfill\vrule
+ width 1.25in height 0.4pt \par #1}
+\end{minipage}
+}
+
+
+% This was made more user-friendly by MWF 3/7/2000 such that changes
+% to this file were replaced by setting \firstreader..\sixthreader
+\def\signaturepage{%
+ {\begin{singlespace}
+ \noindent We approve the thesis of \@author. \hfill \\
+ \vspace{0.1in}
+ \hfill \begin{minipage}{1.25in} \center Date of Signature
+ \end{minipage} \\
+ \vspace{0.425in}\\
+ \ifx\@empty\@firstreader \else
+ \signature\@firstreader\\
+ \vspace{0.625in}\\
+ \fi
+ \ifx\@empty\@secondreader \else
+ \signature\@secondreader\\
+ \vspace{0.625in}\\
+ \fi
+ \ifx\@empty\@thirdreader \else
+ \signature\@thirdreader\\
+ \vspace{0.625in}\\
+ \fi
+ \ifx\@empty\@fourthreader \else
+ \signature\@fourthreader\\
+ \vspace{0.625in}\\
+ \fi
+ \ifx\@empty\@fifthreader \else
+ \signature\@fifthreader\\
+ \vspace{0.625in}\\
+ \fi
+ \ifx\@empty\@sixthreader \else
+ \signature\@sixthreader\\
+ \vspace{0.625in}\\
+ \fi
+ \par \end{singlespace} \cleardoublepage \pagestyle{plain}
+ \typeout{Signature Page.}}
+}
+
+% As of Spring 2003, a "Committee Page" is required, rather than a signatory
+% page (Signatory page is kept on file in the Graduate School, but only the
+% Committee page should appear in the thesis ELH 10/4/2004
+\def\committeepage{%
+ {\begin{singlespace}
+ \vspace*{0.625in}
+ \noindent The thesis of \@author\ was reviewed and approved* by the
+ following:\\
+ \\
+ \\
+ \\
+ \hspace*{\fill}
+ \begin{minipage}[t]{5.5in}
+ \ifx\@empty\@firstreader \else
+ \@firstreader\\
+ \\
+ \fi
+ \ifx\@empty\@secondreader \else
+ \@secondreader\\
+ \\
+ \fi
+ \ifx\@empty\@thirdreader \else
+ \@thirdreader\\
+ \\
+ \fi
+ \ifx\@empty\@fourthreader \else
+ \@fourthreader\\
+ \\
+ \fi
+ \ifx\@empty\@fifthreader \else
+ \@fifthreader\\
+ \\
+ \fi
+ \ifx\@empty\@sixthreader \else
+ \@sixthreader\\
+ \\
+ \fi
+ \end{minipage}\\
+ \\
+ \\
+ \noindent *Signatures are on file in the Graduate School.
+ \par \end{singlespace} \cleardoublepage \pagestyle{plain}
+ \typeout{Committee Page.}}
+}
+
+
+\def\permissionpage{}
+\def\includepermission{%
+\def\permissionpage{
+\thispagestyle{empty}
+\vbox{
+ \vskip 2.5in
+ \begin{singlespace}
+
+\noindent I grant The Pennsylvania State University the nonexclusive right to
+use this work for the University's own purposes and to make single copies of
+the work available to the public on a not-for-profit basis if copies are not
+otherwise available.
+
+ \vskip 0.75in
+ \hbox{\null\hskip 3.2in \vrule width 2in height 0.4pt}
+ \hbox{\null\hskip 3.2in \@author}
+ \end{singlespace}
+ \typeout{Permission to copy page.}
+} \cleardoublepage }}
+
+%\makeatother
+
+%Set up preface section formats
+\def\prefacesection#1{\chapter*{#1}}
+\def\prefacesectiontoc#1{\chapter*{#1}\addcontentsline{toc}{chapter}{#1}}
+
+%Set up specific sections: dedication, abstract, acknowledgments,
+%preface, epigraph, frontispiece, and introduction preceeding chapter 1
+\def\dedication@text{}
+\def\abstract@text{}
+\def\acknowl@text{}
+\def\epigraph@text{}
+\def\frontis@piece{}
+\def\preface@text{}
+\long\def\dedicationtext#1{\def\dedication@text{\prefacesectiontoc{Dedication} #1
+ \typeout{Dedication.}}}
+\long\def\abstracttext#1{\def\abstract@text{\prefacesection{Abstract} #1
+ \typeout{Abstract.}}}
+\long\def\acknowltext#1{\def\acknowl@text{\prefacesectiontoc{Acknowledgments} #1
+ \typeout{Acknowledgments.}}}
+\long\def\epigraphtext#1{\def\epigraph@text{\cleardoublepage \thispagestyle{plain} #1
+ \typeout{Epigraph.}}}
+\long\def\frontispiece#1{\def\frontis@piece{\cleardoublepage \thispagestyle{plain} #1
+ \typeout{Frontispiece.}}}
+\long\def\prefacetext#1{\def\preface@text{\prefacesectiontoc{Preface} #1
+ \typeout{Preface.}}}
+\def\introduction#1{\chapter*{Introduction}
+ \addcontentsline{toc}{chapter}{Introduction} #1}
+
+
+\def\makefrontmatter{
+ \pagenumbering{roman}
+ \pagestyle{plain}
+ \titlep
+ \ifcopyright\copyrightpage\fi
+ \thispagestyle{empty}
+ \permissionpage
+ \ifsignature\signaturepage\fi
+ \ifcommittee\committeepage\fi
+ \setcounter{page}{3}
+ \pagestyle{plain}
+ \abstract@text
+ \tableofcontents
+ \cleardoublepage
+
+% List of Figures
+ \iffigurespage
+%This addcontentsline{}{}{} was added by GLG 5/4/91 Moved by MCS 12/14/92.
+ \addcontentsline{toc}{chapter}{List of Figures}
+ {\addvspace{10pt}
+ \let\saveaddvspace=\addvspace
+ \def\addvspace##1{}
+ \listoffigures
+ \let\addvspace=\saveaddvspace}
+ \typeout{List of Figures.} \newpage
+ \fi
+
+% List of Tables
+ \iftablespage
+%This \addcontentsline{}{}{} was added by GLG 5/4/91 Moved by MCS 12/14/92.
+ \addcontentsline{toc}{chapter}{List of Tables}
+ {\addvspace{10pt}
+ \let\saveaddvspace=\addvspace
+ \def\addvspace##1{}
+ \listoftables
+ \let\addvspace=\saveaddvspace}
+ \typeout{List of Tables.} \newpage
+ \fi
+
+%List of Symbols
+ \iflospage
+% Reset width of symbol definition width to fill space left from symbol itself
+ \setlength{\symboldefwidth}{\textwidth}
+ \addtolength{\symboldefwidth}{-\symbolwidth}
+% This \addcontentsline{}{}{} was added by GLG 4/23/96.
+ \chapter*{List of Symbols}
+ \addcontentsline{toc}{chapter}{List of Symbols}
+ {\addvspace{10pt}
+ \let\saveaddvspace=\addvspace
+ \def\addvspace##1{}
+ \list@symbols
+ \let\addvspace=\saveaddvspace}
+ \typeout{List of Symbols.} \newpage
+ \fi
+
+ \dedication@text
+ \preface@text
+ \acknowl@text
+ \epigraph@text
+ \frontis@piece
+ \newpage \pagenumbering{arabic}
+ \ifthesisdraft
+ \pagestyle{plain}
+ \else
+ \pagestyle{myheadings}
+ \fi
+ }
+
+
+% Start with pagestyle{myheadings} in case front matter isn't processed
+% Redefine the "empty" pagestyle so that the "draft" indication will be
+% printed in the head in draft mode.
+
+ \ifthesisdraft
+ \pagestyle{plain}
+ \else
+ \pagestyle{myheadings}
+ \fi
+
+
+% Bibliography is not included in table of contents by default. This command
+% adds it to the toc and formats it for single space. (MWF 11/17/2002)
+\long\def\includebibliography#1{
+\addcontentsline{toc}{chapter}{Bibliography}
+\begin{singlespace}
+#1
+\end{singlespace}
+}
+
+% 5/18/92 kelliher
+% The bibliography is the first component of the backmatter. Appendices,
+% if present, form the second component. Appendices are begun with the
+% \chapter macro; however, either the \singleappendix or \appendices
+% command should be given before any of the actual appendices. Use
+% \singleappendix when there is only a single appendix, for multiple
+% appendices use \appendices.
+
+% \singleappendix "redefs" \@chapter so that the proper entry is made in
+% the table of contents. Basically, the appendix should not be "numbered."
+
+
+% modified 3/8/2000 by Floros to say "Appendix" in the TOC and "Appendix"
+% instead of "Appendix A" in document. This is from LaTeX 2e's report.cls file.
+% I copied the entry to this file and removed the \thechapter
+
+\def\singleappendix{\appendix\def\@chapnum{}
+ \def\@chapter[##1]##2{
+ \refstepcounter{chapter}
+ \typeout{\@chapapp.}
+ \addcontentsline{toc}{chapter}{\@chapapp\ \ ##1}
+ \chaptermark{##1}
+ \addtocontents{lof}{\protect\addvspace{10pt}}
+ \addtocontents{lot}{\protect\addvspace{10pt}} \if@twocolumn
+ \@topnewpage[\vspace*{50\p@}%
+ {\parindent \z@ \raggedright \normalfont
+ \ifnum \c@secnumdepth >\m@ne
+ \huge\bfseries \@chapapp\space
+ \par\nobreak
+ \vskip 20\p@
+ \fi
+ \interlinepenalty\@M
+ \Huge \bfseries ##2\par\nobreak
+ \vskip 40\p@
+ }]
+ \else
+ \vspace*{50\p@}%
+ {\parindent \z@ \raggedright \normalfont
+ \ifnum \c@secnumdepth >\m@ne
+ \huge\bfseries \@chapapp\space
+ \par\nobreak
+ \vskip 20\p@
+ \fi
+ \interlinepenalty\@M
+ \Huge \bfseries ##2\par\nobreak
+ \vskip 40\p@
+ }
+ \@afterheading \fi}}
+
+% Modified 3/8/2000 by Floros to change toc entries to "Appendix A. <title>"
+% instead of "A <title>"
+
+\def\appendices{\appendix
+ \def\@chapter[##1]##2{
+ \refstepcounter{chapter}
+ \typeout{\@chapapp\space\thechapter.}
+ \addcontentsline{toc}{chapter}%
+ {{\protect\numberline{\@chapapp\space\thechapter.\hspace{1em} ##1}}}
+ \chaptermark{##1}
+ \addtocontents{lof}{\protect\addvspace{10pt}}
+ \addtocontents{lot}{\protect\addvspace{10pt}} \if@twocolumn
+ \@topnewpage[\@makechapterhead{##2}]
+ \else \@makechapterhead{##2}
+ \@afterheading \fi}}
+
+
+\long\def\UMIabstract#1{\cleardoublepage \thispagestyle{empty}
+\begin{singlespace}
+
+\noindent Abstract
+
+\noindent \@title
+
+\noindent \@author
+
+\noindent \@degreetype; \, \@submitdate
+
+\noindent The Pennsylvania State University
+
+\noindent \advis@r; \,Thesis Adviser
+
+\end{singlespace} \par \vspace{1em}
+\noindent #1
+\typeout{UMI Abstract.}
+}
+
+
+\def\vita#1{\cleardoublepage \pagestyle{empty}
+\begin{center} Vita \\ \@author \end{center}
+\vspace{1em} #1 \typeout{Vita.}}
diff --git a/obsolete/macros/latex/contrib/psu-thesis/psuthesis.bst b/obsolete/macros/latex/contrib/psu-thesis/psuthesis.bst
new file mode 100644
index 0000000000..0118a534d9
--- /dev/null
+++ b/obsolete/macros/latex/contrib/psu-thesis/psuthesis.bst
@@ -0,0 +1,1236 @@
+%%
+%% This is file `try2.bst',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% merlin.mbs (with options: `,seq-no,nm-revf,dt-end,yr-com,tit-qq,atit-u,jxper,vnum-nr,volp-com,jwdpg,pp-last,jwdvol,pre-edn,isbn,issn,edby,blk-com,in-x,fin-bare,pp,xedn,etal-it,nfss')
+%% ----------------------------------------
+%% *** Style File for Penn State Theses by Matt Floros ***
+%%
+%% Copyright 1994-1999 Patrick W Daly
+ % ===============================================================
+ % IMPORTANT NOTICE:
+ % This bibliographic style (bst) file has been generated from one or
+ % more master bibliographic style (mbs) files, listed above.
+ %
+ % This generated file can be redistributed and/or modified under the terms
+ % of the LaTeX Project Public License Distributed from CTAN
+ % archives in directory macros/latex/base/lppl.txt; either
+ % version 1 of the License, or any later version.
+ % ===============================================================
+ % Name and version information of the main mbs file:
+ % \ProvidesFile{merlin.mbs}[1999/05/28 3.89 (PWD)]
+ % For use with BibTeX version 0.99a or later
+ %-------------------------------------------------------------------
+ % This bibliography style file is intended for texts in ENGLISH
+ % This is a numerical citation style, and as such is standard LaTeX.
+ % It requires no extra package to interface to the main text.
+ % The form of the \bibitem entries is
+ % \bibitem{key}...
+ % Usage of \cite is as follows:
+ % \cite{key} ==>> [#]
+ % \cite[chap. 2]{key} ==>> [#, chap. 2]
+ % where # is a number determined by the ordering in the reference list.
+ % The order in the reference list is that by which the works were originally
+ % cited in the text, or that in the database.
+ %---------------------------------------------------------------------
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ isbn
+ issn
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ volume
+ year
+ }
+ {}
+ { label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ "\newblock " write$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {fin.entry}
+{ duplicate$ empty$
+ 'pop$
+ 'write$
+ if$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {add.blank}
+{ " " * before.all 'output.state :=
+}
+
+FUNCTION {date.block}
+{
+ skip$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {non.stop}
+{ duplicate$
+ "}" * add.period$
+ #-1 #1 substring$ "." =
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "\emph{" swap$ * "}" * }
+ if$
+}
+
+
+FUNCTION {capitalize}
+{ "u" change.case$ "t" change.case$ }
+
+FUNCTION {space.word}
+{ " " swap$ * " " * }
+
+ % Here are the language-specific definitions for explicit words.
+ % Each function has a name bbl.xxx where xxx is the English word.
+ % The language selected here is ENGLISH
+FUNCTION {bbl.and}
+{ "and"}
+
+FUNCTION {bbl.etal}
+{ "et~al." }
+
+FUNCTION {bbl.editors}
+{ "editors" }
+
+FUNCTION {bbl.editor}
+{ "editor" }
+
+FUNCTION {bbl.edby}
+{ "edited by" }
+
+FUNCTION {bbl.edition}
+{ "edition" }
+
+FUNCTION {bbl.volume}
+{ "volume" }
+
+FUNCTION {bbl.of}
+{ "of" }
+
+FUNCTION {bbl.number}
+{ "number" }
+
+FUNCTION {bbl.nr}
+{ "no." }
+
+FUNCTION {bbl.in}
+{ "in" }
+
+FUNCTION {bbl.pages}
+{ "pp." }
+
+FUNCTION {bbl.page}
+{ "p." }
+
+FUNCTION {bbl.chapter}
+{ "chapter" }
+
+FUNCTION {bbl.techrep}
+{ "Technical Report" }
+
+FUNCTION {bbl.mthesis}
+{ "Master's thesis" }
+
+FUNCTION {bbl.phdthesis}
+{ "Ph.D. thesis" }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{vv~}{ll}{, jj}{, ff}" format.name$
+ 't :=
+ nameptr #1 >
+ {
+ namesleft #1 >
+ { ", " * t * }
+ {
+ numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ t "others" =
+ {
+ " " * bbl.etal emphasize *
+ }
+ { bbl.and
+ space.word * t *
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.names.ed}
+{ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{ff~}{vv~}{ll}{, jj}"
+ format.name$
+ 't :=
+ nameptr #1 >
+ {
+ namesleft #1 >
+ { ", " * t * }
+ {
+ numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ t "others" =
+ {
+
+ " " * bbl.etal emphasize *
+ }
+ { bbl.and
+ space.word * t *
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names }
+ if$
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ ", " *
+ editor num.names$ #1 >
+ 'bbl.editors
+ 'bbl.editor
+ if$
+ *
+ }
+ if$
+}
+
+FUNCTION {format.in.editors}
+{ editor empty$
+ { "" }
+ { editor format.names.ed
+ }
+ if$
+}
+
+FUNCTION {format.isbn}
+{ isbn empty$
+ { "" }
+ {
+ "ISBN " isbn * }
+ if$
+}
+
+FUNCTION {format.issn}
+{ issn empty$
+ { "" }
+ {
+ "ISSN " issn * }
+ if$
+}
+
+FUNCTION {format.note}
+{
+ note empty$
+ { "" }
+ { note #1 #1 substring$
+ duplicate$ "{" =
+ 'skip$
+ { output.state mid.sentence =
+ { "l" }
+ { "u" }
+ if$
+ change.case$
+ }
+ if$
+ note #2 global.max$ substring$ *
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title
+ "\enquote{" swap$ *
+ non.stop
+ { ",} " * }
+ { "} " * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {end.quote.title}
+{ title empty$
+ 'skip$
+ { before.all 'output.state := }
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+ "\bibitem{" write$
+ cite$ write$
+ "}" write$
+ newline$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {n.dashify}
+{
+ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {word.in}
+{ "" }
+
+FUNCTION {format.date}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+ month
+ }
+ if$
+ }
+ { month empty$
+ 'year
+ { month " " * year * }
+ if$
+ }
+ if$
+ duplicate$ empty$
+ 'skip$
+ {
+ before.all 'output.state :=
+ ", " swap$ *
+ }
+ if$
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { bbl.volume volume tie.or.space.connect
+ series empty$
+ 'skip$
+ { bbl.of space.word * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { bbl.number }
+ { bbl.number capitalize }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { bbl.in space.word * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+ { edition "l" change.case$ " " * bbl.edition * }
+ { edition "t" change.case$ " " * bbl.edition * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { bbl.pages pages n.dashify tie.or.space.connect }
+ { bbl.page pages tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.journal.pages}
+{ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ {
+ ", " *
+ pages multi.page.check
+ { bbl.pages }
+ { bbl.page }
+ if$
+ "~" * *
+ pages n.dashify *
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ volume empty$
+ 'skip$
+ { bbl.volume "~" * swap$ * }
+ if$
+ number empty$
+ 'skip$
+ {
+ ", " bbl.nr * number tie.or.space.connect *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ { "" }
+ { type empty$
+ { bbl.chapter }
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { word.in booktitle emphasize * }
+ { word.in booktitle emphasize *
+ ", " *
+ bbl.edby
+ * " " *
+ format.in.editors *
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { bbl.techrep }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{
+ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { word.in journal emphasize * }
+ if$
+ }
+ { word.in key * " " *}
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$
+ " " * bbl.etal emphasize *
+ }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ {
+ " " * bbl.etal emphasize *
+ }
+ { bbl.and space.word * editor #2 "{vv~}{ll}" format.name$
+ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ word.in
+ }
+ { bbl.volume volume tie.or.space.connect
+ bbl.of space.word *
+ }
+ if$
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { series emphasize * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { word.in booktitle emphasize * }
+ if$
+ }
+ { word.in key * " " *}
+ if$
+ }
+ { word.in format.crossref.editor * " " *}
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.org.or.pub}
+{ 't :=
+ ""
+ address empty$ t empty$ and
+ 'skip$
+ {
+ t empty$
+ { address empty$
+ 'skip$
+ { address * }
+ if$
+ }
+ { t *
+ address empty$
+ 'skip$
+ { ", " * address * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.publisher.address}
+{ publisher empty$
+ { "empty publisher in " cite$ * warning$
+ ""
+ }
+ { publisher }
+ if$
+ format.org.or.pub
+}
+
+FUNCTION {format.organization.address}
+{ organization empty$
+ { "" }
+ { organization }
+ if$
+ format.org.or.pub
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ format.title "title" output.check
+ end.quote.title
+ crossref missing$
+ { journal
+ purify$
+ emphasize
+ "journal" output.check
+ format.vol.num.pages output
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ format.journal.pages
+ format.issn output
+ format.note output
+ format.date "year" output.check
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check
+ }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.number.series output
+ format.edition output
+ format.publisher.address output
+ }
+ {
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.isbn output
+ format.note output
+ format.date "year" output.check
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ format.title "title" output.check
+ end.quote.title
+ howpublished output
+ address output
+ format.isbn output
+ format.note output
+ format.date output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check
+ }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ format.btitle "title" output.check
+ crossref missing$
+ {
+ format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ format.number.series output
+ format.edition output
+ format.publisher.address output
+ }
+ {
+ format.chapter.pages "chapter and pages" output.check
+ format.book.crossref output.nonnull
+ }
+ if$
+ crossref missing$
+ { format.isbn output }
+ 'skip$
+ if$
+ format.pages "pages" output.check
+ format.note output
+ format.date "year" output.check
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ format.title "title" output.check
+ end.quote.title
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.edition output
+ format.chapter.pages output
+ format.publisher.address output
+ format.isbn output
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ format.pages "pages" output.check
+ format.note output
+ format.date "year" output.check
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ format.title "title" output.check
+ end.quote.title
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ publisher empty$
+ { format.organization.address output }
+ { organization output
+ format.publisher.address output
+ }
+ if$
+ format.isbn output
+ format.issn output
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ format.note output
+ format.date "year" output.check
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization empty$
+ 'skip$
+ { organization output.nonnull
+ address output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ {
+ address output
+ }
+ 'skip$
+ if$
+ }
+ {
+ organization output
+ address output
+ }
+ if$
+ format.edition output
+ format.note output
+ format.date output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ format.btitle "title" output.check
+ bbl.mthesis format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.note output
+ format.date "year" output.check
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ format.title output
+ end.quote.title
+ howpublished output
+ format.note output
+ format.date output
+ fin.entry
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ format.btitle "title" output.check
+ bbl.phdthesis format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.note output
+ format.date "year" output.check
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output }
+ { format.editors output.nonnull }
+ if$
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ editor empty$
+ { publisher empty$
+ 'skip$
+ {
+ format.publisher.address output
+ }
+ if$
+ }
+ { publisher empty$
+ {
+ format.organization.address output }
+ {
+ organization output
+ format.publisher.address output
+ }
+ if$
+ }
+ if$
+ format.isbn output
+ format.issn output
+ format.note output
+ format.date "year" output.check
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ format.title "title" output.check
+ end.quote.title
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ format.note output
+ format.date "year" output.check
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ format.title "title" output.check
+ end.quote.title
+ format.note "note" output.check
+ format.date output
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+READ
+
+STRINGS { longest.label }
+
+INTEGERS { number.label longest.label.width }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #1 'number.label :=
+ #0 'longest.label.width :=
+}
+
+FUNCTION {longest.label.pass}
+{ number.label int.to.str$ 'label :=
+ number.label #1 + 'number.label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {longest.label.pass}
+
+FUNCTION {begin.bib}
+{ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "\begin{thebibliography}{" longest.label * "}" *
+ write$ newline$
+ "\newcommand{\enquote}[1]{``#1''}"
+ write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+ "\end{thebibliography}" write$ newline$
+}
+
+EXECUTE {end.bib}
+%% End of customized bst file
+%%
+%% End of file `try2.bst'.
diff --git a/obsolete/macros/latex/contrib/pzccal/README b/obsolete/macros/latex/contrib/pzccal/README
new file mode 120000
index 0000000000..c3ca07460a
--- /dev/null
+++ b/obsolete/macros/latex/contrib/pzccal/README
@@ -0,0 +1 @@
+README.txt \ No newline at end of file
diff --git a/obsolete/macros/latex/contrib/pzccal/README.html b/obsolete/macros/latex/contrib/pzccal/README.html
new file mode 100644
index 0000000000..42183f5c8f
--- /dev/null
+++ b/obsolete/macros/latex/contrib/pzccal/README.html
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.8: http://docutils.sourceforge.net/" />
+<title>pzccal README</title>
+<meta name="date" content="2011-03-28" />
+<meta name="copyright" content="© 2011 Günter Milde &lt;milde&#64;users.berlios.de&gt;" />
+<link rel="stylesheet" href="../../../../Code/Python/docutils-svn/docutils/docutils/writers/html4strict/html4css1.css" type="text/css" />
+<link rel="stylesheet" href="../../../../Code/Python/docutils-svn/docutils/docutils/writers/html4strict/html4css2.css" type="text/css" />
+</head>
+<body>
+<div class="document" id="pzccal-readme">
+<h1 class="title">pzccal README</h1>
+
+<dl class="docinfo simple">
+<dt class="date">Date</dt>
+<dd class="date">2011-03-28</dd>
+<dt class="copyright">Copyright</dt>
+<dd class="copyright">© 2011 Günter Milde &lt;<a class="reference external" href="mailto:milde&#64;users.berlios.de">milde&#64;users.berlios.de</a>&gt;</dd>
+<dt>Licence</dt>
+<dd><p>This work may be distributed and/or modified under the
+conditions of the <a class="reference external" href="http://www.latex-project.org/lppl.txt">LaTeX Project Public License</a>, either
+version&nbsp;1.3 of this license or (at your option) any later version.</p>
+</dd>
+</dl>
+<div class="abstract topic">
+<p class="topic-title first">Abstract</p>
+<p>Set up the Zapf Chancery font as script (calligraphic) math
+alphabet.</p>
+<p><strong>Obsoleted by the urwchancal_ package.</strong></p>
+</div>
+<div class="section" id="versions">
+<h1>Versions</h1>
+<dl class="field-list simple">
+<dt>0.1</dt>
+<dd><p>2011-02-03 first published version</p>
+</dd>
+<dt>0.2</dt>
+<dd><p>2011-03-28 documentation update: deprecated by <a class="reference external" href="http://mirror.ctan.org/help/Catalogue/entries/urwchancal.html">urwchancal</a></p>
+</dd>
+</dl>
+</div>
+<div class="section" id="introduction">
+<h1>Introduction</h1>
+<p>The <cite>pzccal</cite> package sets up the Zapf Chancery font (pzcmi7t) as
+script (calligraphic) math alphabet <tt class="literal">\mathpzc</tt>. It provides options
+to scale the font and to configure the alias command name. By default,
+<cite>pzccal</cite> overwrites the predefined math alphabet command <tt class="literal">\mathcal</tt>.</p>
+<p>The <a class="reference external" href="http://mirror.ctan.org/help/Catalogue/entries/urwchancal.html">urwchancal</a> package (developed independently and published less
+than a month after pzcal.sty) provides not only a style file but also
+virtual fonts solving problems with accents and spacing. Like
+<cite>pzcal</cite>, it provides both lowercase and capital Latin math script
+letters. It is highly recommended to use <tt class="literal">urwchancal.sty</tt> instead of
+<tt class="literal">pzcal.sty</tt>.</p>
+</div>
+<div class="section" id="files">
+<h1>Files</h1>
+<table>
+<colgroup>
+<col width="35%" />
+<col width="65%" />
+</colgroup>
+<tbody valign="top">
+<tr><td><p>README.txt</p></td>
+<td><p>Requirements, Installation, Usage</p></td>
+</tr>
+<tr><td><p>README.html</p></td>
+<td><p>browser friendly README</p></td>
+</tr>
+<tr><td><p>pzccal.sty</p></td>
+<td><p>literate source (LaTeX package)</p></td>
+</tr>
+<tr><td><p>pzccal.sty.txt</p></td>
+<td><p>literate source (Documentation)</p></td>
+</tr>
+<tr><td><p>pzccal.sty.pdf</p></td>
+<td><p>literate source (Documentation, PDF)</p></td>
+</tr>
+<tr><td><p>pzccal.sty.html</p></td>
+<td><p>literate source (Documentation, HTML)</p></td>
+</tr>
+<tr><td><p>pzccal-test.tex</p></td>
+<td><p>Test example (source)</p></td>
+</tr>
+<tr><td><p>pzccal-test.pdf</p></td>
+<td><p>Test example (PDF output)</p></td>
+</tr>
+</tbody>
+</table>
+<p>The bidirectional text &lt;-&gt; code converter <a class="reference external" href="http://pylit.berlios.de">PyLit</a> can convert between
+<tt class="literal">pzccal.sty</tt> and <tt class="literal">pzccal.sty.txt</tt>.</p>
+<p>The Python <a class="reference external" href="http://docutils.sourceforge.net/rst.html">Docutils</a> and pdflatex were used to generate the HTML and PDF
+documentation from the <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> sources.</p>
+</div>
+<div class="section" id="requirements">
+<h1>Requirements</h1>
+<p>This package uses fonts from the PSNFSS bundle.
+It also requires <a class="reference external" href="http://mirror.ctan.org/help/Catalogue/entries/kvoptions.html">kvoptions</a>.</p>
+</div>
+<div class="section" id="installation">
+<h1>Installation</h1>
+<ul>
+<li><p>Unpack pzccal.zip (preferably in a <a class="reference external" href="http://www.tex.ac.uk/cgi-bin/texfaq2html?label=tds">TDS</a> documentation folder).</p></li>
+<li><p>Make sure LaTeX can find pzccal.sty:</p>
+<p>Copy/Move/Link it to a suitable place in the <a class="reference external" href="http://www.tex.ac.uk/cgi-bin/texfaq2html?label=tds">TDS</a> and run <tt class="literal">texhash</tt>
+or place it in the current working directory (e.g. for testing).</p>
+</li>
+</ul>
+</div>
+<div class="section" id="usage">
+<h1>Usage</h1>
+<p>It is highly recommended to use <a class="reference external" href="http://mirror.ctan.org/help/Catalogue/entries/urwchancal.html">urwchancal</a>:</p>
+<pre class="literal-block">\usepackage{urwchancal}
+</pre>
+<p>instead of</p>
+<pre class="literal-block">\usepackage{pzccal}
+</pre>
+<p>Option descriptions in the literate source.</p>
+<!-- References
+========== -->
+</div>
+</div>
+</body>
+</html>
diff --git a/obsolete/macros/latex/contrib/pzccal/README.txt b/obsolete/macros/latex/contrib/pzccal/README.txt
new file mode 100644
index 0000000000..02fc20ef85
--- /dev/null
+++ b/obsolete/macros/latex/contrib/pzccal/README.txt
@@ -0,0 +1,104 @@
+pzccal README
+~~~~~~~~~~~~~~
+
+:Date: 2011-03-28
+:Copyright: © 2011 Günter Milde <milde@users.berlios.de>
+
+:Licence: This work may be distributed and/or modified under the
+ conditions of the `LaTeX Project Public License`_, either
+ version 1.3 of this license or (at your option) any later version.
+
+:Abstract: Set up the Zapf Chancery font as script (calligraphic) math
+ alphabet.
+
+ **Obsoleted by the urwchancal_ package.**
+
+
+Versions
+========
+
+:0.1: 2011-02-03 first published version
+:0.2: 2011-03-28 documentation update: deprecated by urwchancal_
+
+Introduction
+============
+
+The `pzccal` package sets up the Zapf Chancery font (pzcmi7t) as
+script (calligraphic) math alphabet ``\mathpzc``. It provides options
+to scale the font and to configure the alias command name. By default,
+`pzccal` overwrites the predefined math alphabet command ``\mathcal``.
+
+The urwchancal_ package (developed independently and published less
+than a month after pzcal.sty) provides not only a style file but also
+virtual fonts solving problems with accents and spacing. Like
+`pzcal`, it provides both lowercase and capital Latin math script
+letters. It is highly recommended to use ``urwchancal.sty`` instead of
+``pzcal.sty``.
+
+Files
+=====
+
+==================== =====================================
+README.txt Requirements, Installation, Usage
+README.html browser friendly README
+
+pzccal.sty literate source (LaTeX package)
+pzccal.sty.txt literate source (Documentation)
+pzccal.sty.pdf literate source (Documentation, PDF)
+pzccal.sty.html literate source (Documentation, HTML)
+
+pzccal-test.tex Test example (source)
+pzccal-test.pdf Test example (PDF output)
+==================== =====================================
+
+The bidirectional text <-> code converter PyLit_ can convert between
+``pzccal.sty`` and ``pzccal.sty.txt``.
+
+The Python Docutils_ and pdflatex were used to generate the HTML and PDF
+documentation from the reStructuredText_ sources.
+
+
+Requirements
+============
+
+This package uses fonts from the PSNFSS bundle.
+It also requires kvoptions_.
+
+
+Installation
+============
+
+* Unpack pzccal.zip (preferably in a TDS_ documentation folder).
+
+* Make sure LaTeX can find pzccal.sty:
+
+ Copy/Move/Link it to a suitable place in the TDS_ and run ``texhash``
+ or place it in the current working directory (e.g. for testing).
+
+
+Usage
+=====
+
+It is highly recommended to use urwchancal_::
+
+ \usepackage{urwchancal}
+
+instead of ::
+
+ \usepackage{pzccal}
+
+Option descriptions in the literate source.
+
+
+.. References
+ ==========
+
+.. _LaTeX Project Public License: http://www.latex-project.org/lppl.txt
+.. _PyLit: http://pylit.berlios.de
+.. _reStructuredText: http://docutils.sourceforge.net/rst.html
+.. _Docutils: http://docutils.sourceforge.net/rst.html
+
+.. _kvoptions: http://mirror.ctan.org/help/Catalogue/entries/kvoptions.html
+.. _urwchancal: http://mirror.ctan.org/help/Catalogue/entries/urwchancal.html
+
+.. _TDS: http://www.tex.ac.uk/cgi-bin/texfaq2html?label=tds
diff --git a/obsolete/macros/latex/contrib/pzccal/pzccal-test.pdf b/obsolete/macros/latex/contrib/pzccal/pzccal-test.pdf
new file mode 100644
index 0000000000..8190c2368d
--- /dev/null
+++ b/obsolete/macros/latex/contrib/pzccal/pzccal-test.pdf
Binary files differ
diff --git a/obsolete/macros/latex/contrib/pzccal/pzccal-test.tex b/obsolete/macros/latex/contrib/pzccal/pzccal-test.tex
new file mode 100644
index 0000000000..0b428a768b
--- /dev/null
+++ b/obsolete/macros/latex/contrib/pzccal/pzccal-test.tex
@@ -0,0 +1,71 @@
+\documentclass[]{article}
+\usepackage{lmodern,parskip}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+
+% For comparison with Euler Script and Ralph Smith's Formal Script
+\usepackage[mathscr]{eucal} % \mathscr with Euler Script
+\DeclareSymbolFont{rsfscript}{OMS}{rsfs}{m}{n}
+\DeclareSymbolFontAlphabet{\mathrsfs}{rsfscript}
+
+% Now load the package (play with the options):
+
+% \usepackage[mathscr]{pzccal}
+\usepackage{pzccal}
+% \usepackage[scaled=1.2]{pzccal}
+
+% .......................................................................
+
+\DeclareMathAlphabet{\mathcal}{OT1}{pzcm}{mb}{it}
+
+\begin{document}
+
+\section*{\texttt{pzccal} package test}
+
+The script (calligraphic) math alphabet with Zapf Chancery
+(\verb+\mathpzc+):
+\[
+ \mathpzc{ABCDEFGHIJKLMNOPQRSTUVWXYZ\,
+ abcdefghijklmnopqrstuvwxyz\,
+ 1234567890}
+\]
+The script (calligraphic) math alphabet with Euler Script
+(\verb+\EuScript+):
+\[
+ \EuScript{ABCDEFGHIJKLMNOPQRSTUVWXYZ\,abc\,123}
+\]
+The script (calligraphic) math alphabet with Ralph Smith's Formal Script
+(\verb+\mathrsfs+):
+\[
+ \mathrsfs{ABCDEFGHIJKLMNOPQRSTUVWXYZ\,abc\,123}
+\]
+The script (calligraphic) math alphabet with (\verb+\mathcal+):
+\[
+ \mathcal{ABCDEFGHIJKLMNOPQRSTUVWXYZ\,abc\,123}
+\]
+The script (calligraphic) math alphabet with (\verb+\mathscr+):
+\[
+ \mathscr{ABCDEFGHIJKLMNOPQRSTUVWXYZ\,abc\,123}
+\]
+Compare script letters (CM, CMcal, pzcm, EuScript, rsfs):
+\[
+ H \CMcal{H} \mathpzc{H} \EuScript{H} \mathrsfs{H}
+ Z \CMcal{Z} \mathpzc{Z} \EuScript{Z} \mathrsfs{Z}
+ F \CMcal{F} \mathpzc{F} \EuScript{F} \mathrsfs{F}
+\]
+
+Usage examples with \verb+\mathcal+:
+\[
+ \mathcal{F}\left\{ s(x)\right\} =\int_{-\infty}^{\infty}s(x)
+ \mathrm{e}^{\mathrm{i}\omega_{x}x}\,\mathrm{d}{x}
+\]
+
+Die Hamiltonfunktion ist die Legendre-Transformierte der Lagrange-Funktion
+$\mathcal L(t,q,\dot q)$, die von den generalisierten Koordinaten und
+ihren Geschwindigkeiten $\dot q=(\dot q_1,\dot q_2\dots \dot q_n)$ abhängt:
+\[
+ \mathcal H(t,q,p)= \sum_{k=1}^n \dot q_k\, p_k - \mathcal L(t, q,\dot q)
+\]
+
+\makeatother
+\end{document}
diff --git a/obsolete/macros/latex/contrib/pzccal/pzccal.sty b/obsolete/macros/latex/contrib/pzccal/pzccal.sty
new file mode 100644
index 0000000000..c6d2d56e61
--- /dev/null
+++ b/obsolete/macros/latex/contrib/pzccal/pzccal.sty
@@ -0,0 +1,116 @@
+% pzccal.sty: calligraphic math alphabet with Zapf Chancery
+% ****************************************************************
+%
+% :Copyright: © 2008, 2010 Günter Milde
+% :Licence: This work may be distributed and/or modified under the
+% conditions of the `LaTeX Project Public License`_, either
+% version 1.3 of this license or (at your option) any later version.
+%
+% :Identification:
+% ::
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{pzccal}
+[2011/02/03 v0.1 Zapf Chancery calligraphic math alphabet]
+
+% `The Comprehensive LaTeX Symbol List`_ by Scott Pakin describes the
+% use of Zapf Chancery as a mathematical alphabet that contains capital
+% and small Latin letters as well as digits. This allows full coverage
+% of the `script` Unicode Mathematical Alphabet with 8-bit LaTeX
+% engines.
+%
+% This package sets up the Zapf Chancery font as script (calligraphic)
+% math alphabet ``\mathpzc``. It provides options to scale the font and to
+% configure the alias command name. By default, `pzccal` overwrites the
+% predefined math alphabet command ``\mathcal``.
+%
+% .. tip::
+%
+% The urwchancal_ package (developed independently and published less than a
+% month after pzcal.sty) provides not only a style file but also virtual
+% fonts solving problems with accents and spacing. Like `pzcal`, it
+% provides both lowercase and capital Latin math script letters. It is
+% highly recommended to use ``urwchancal.sty`` instead of ``pzcal.sty``.
+%
+%
+% Options
+% =======
+%
+% Options are defined with the key=value interface provided by
+% kvoptions_::
+
+\RequirePackage{kvoptions}
+
+% cmdname
+% -------
+%
+% The name of the math alphabet command alias (default ``\mathcal``).
+% An existing command is overwritten without asking. ::
+
+\DeclareStringOption[mathcal]{cmdname}
+
+% mathcal, mathscr, mathpzc
+% -------------------------
+%
+% For compatibility with the (no longer available) `eucal` package, the
+% ``mathcal`` and ``mathscr`` options are equivalent to ``cmdname=mathcal``
+% and ``cmdname=mathscr``. The option ``mathpzc`` prevents aliasing to a new
+% name::
+
+\DeclareVoidOption{mathcal}{} % this is the default
+\DeclareVoidOption{mathscr}{\renewcommand{\pzccal@cmdname}{mathscr}}
+\DeclareVoidOption{mathpzc}{\renewcommand{\pzccal@cmdname}{mathpzc}}
+
+% scaled
+% ------
+% The Zapf Chancery font can be scaled with the ``scaled`` option. The
+% default is to enlarge the font to get a matching size without making
+% it too dark::
+
+\DeclareStringOption[1.125]{scaled}
+
+\ProcessKeyvalOptions*
+
+% Implementation
+% ==============
+%
+% Scaling
+% -------
+%
+% Define the font family ``pzcm`` as a scaled variant of ``pzc``::
+
+\DeclareFontFamily{OT1}{pzcm}{}
+\DeclareFontShape{OT1}{pzcm}{mb}{it}{<-> s * [\pzccal@scaled] pzcmi7t}{}
+
+% Setup
+% -----
+%
+% As suggested in `The Comprehensive LaTeX Symbol List`_::
+
+\DeclareMathAlphabet{\mathpzc}{OT1}{pzcm}{mb}{it}
+
+% Alias
+% -----
+%
+% Make the new alphabet available under the command specified by the
+% ``cmdname`` option (default: overwrite``\ mathcal``)::
+
+\@namedef\pzccal@cmdname{\mathpzc}
+
+% References
+% ~~~~~~~~~~
+%
+% .. _LaTeX Project Public License: http://www.latex-project.org/lppl.txt
+% .. _`The Comprehensive LaTeX Symbol List`:
+% http://www.ctan.org/tex-archive/info/symbols/comprehensive/symbols-a4.pdf
+% .. _eucal: http://www.ctan.org/pkg/eucal
+% .. _kvoptions: http://www.ctan.org/pkg/kvoptions
+% .. _urwchancal: http://www.ctan.org/pkg/urwchancal
+%
+% Alternative LaTeX script fonts that might be useful in math:
+%
+% :Auriocus Kalligraphicus: http://www.tug.dk/FontCatalogue/aurical/
+% :Calligra: http://www.tug.dk/FontCatalogue/calligra/
+% :Jana Skrivana: http://www.tug.dk/FontCatalogue/janaskrivana/
+% :Vicentino: http://www.tug.dk/FontCatalogue/vicentino/ (bitmap)
+%
diff --git a/obsolete/macros/latex/contrib/pzccal/pzccal.sty.html b/obsolete/macros/latex/contrib/pzccal/pzccal.sty.html
new file mode 100644
index 0000000000..2a6d0a3cee
--- /dev/null
+++ b/obsolete/macros/latex/contrib/pzccal/pzccal.sty.html
@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.11: http://docutils.sourceforge.net/" />
+<title>pzccal.sty: calligraphic math alphabet with Zapf Chancery</title>
+<meta name="copyright" content="© 2008, 2010 Günter Milde" />
+<link rel="stylesheet" href="../../../../Code/Python/docutils-svn/docutils/docutils/writers/html4strict/html4css1.css" type="text/css" />
+<link rel="stylesheet" href="../../../../Code/Python/docutils-svn/docutils/docutils/writers/html4strict/html4css2.css" type="text/css" />
+</head>
+<body>
+<div class="document" id="pzccal-sty-calligraphic-math-alphabet-with-zapf-chancery">
+<h1 class="title">pzccal.sty: calligraphic math alphabet with Zapf Chancery</h1>
+
+<dl class="docinfo">
+<dt class="copyright">Copyright</dt>
+<dd class="copyright">© 2008, 2010 Günter Milde</dd>
+<dt>Licence</dt>
+<dd><p>This work may be distributed and/or modified under the
+conditions of the <a class="reference external" href="http://www.latex-project.org/lppl.txt">LaTeX Project Public License</a>, either
+version&nbsp;1.3 of this license or (at your option) any later version.</p>
+</dd>
+<dt>Identification</dt>
+<dd><pre class="literal-block">\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{pzccal}
+[2011/02/03 v0.1 Zapf Chancery calligraphic math alphabet]
+</pre>
+</dd>
+</dl>
+<p><a class="reference external" href="http://www.ctan.org/tex-archive/info/symbols/comprehensive/symbols-a4.pdf">The Comprehensive LaTeX Symbol List</a> by Scott Pakin describes the
+use of Zapf Chancery as a mathematical alphabet that contains capital
+and small Latin letters as well as digits. This allows full coverage
+of the <cite>script</cite> Unicode Mathematical Alphabet with 8-bit LaTeX
+engines.</p>
+<p>This package sets up the Zapf Chancery font as script (calligraphic)
+math alphabet <tt class="literal">\mathpzc</tt>. It provides options to scale the font and to
+configure the alias command name. By default, <cite>pzccal</cite> overwrites the
+predefined math alphabet command <tt class="literal">\mathcal</tt>.</p>
+<div class="tip">
+<p class="admonition-title">Tip</p>
+<p>The <a class="reference external" href="http://www.ctan.org/pkg/urwchancal">urwchancal</a> package (developed independently and published less than a
+month after pzcal.sty) provides not only a style file but also virtual
+fonts solving problems with accents and spacing. Like <cite>pzcal</cite>, it
+provides both lowercase and capital Latin math script letters. It is
+highly recommended to use <tt class="literal">urwchancal.sty</tt> instead of <tt class="literal">pzcal.sty</tt>.</p>
+</div>
+<div class="section" id="options">
+<h1>Options</h1>
+<p>Options are defined with the key=value interface provided by
+<a class="reference external" href="http://www.ctan.org/pkg/kvoptions">kvoptions</a>:</p>
+<pre class="literal-block">\RequirePackage{kvoptions}
+</pre>
+<div class="section" id="cmdname">
+<h2>cmdname</h2>
+<p>The name of the math alphabet command alias (default <tt class="literal">\mathcal</tt>).
+An existing command is overwritten without asking.</p>
+<pre class="literal-block">\DeclareStringOption[mathcal]{cmdname}
+</pre>
+</div>
+<div class="section" id="mathcal-mathscr-mathpzc">
+<h2>mathcal, mathscr, mathpzc</h2>
+<p>For compatibility with <a class="reference external" href="http://www.ctan.org/pkg/eucal">eucal</a>, the <tt class="literal">mathcal</tt> and <tt class="literal">mathscr</tt> options
+are equivalent to <tt class="literal">cmdname=mathcal</tt> and <tt class="literal">cmdname=mathscr</tt>. The
+option <tt class="literal">mathpzc</tt> prevents aliasing to a new name:</p>
+<pre class="literal-block">\DeclareVoidOption{mathcal}{} % this is the default
+\DeclareVoidOption{mathscr}{\renewcommand{\pzccal&#64;cmdname}{mathscr}}
+\DeclareVoidOption{mathpzc}{\renewcommand{\pzccal&#64;cmdname}{mathpzc}}
+</pre>
+</div>
+<div class="section" id="scaled">
+<h2>scaled</h2>
+<p>The Zapf Chancery font can be scaled with the <tt class="literal">scaled</tt> option. The
+default is to enlarge the font to get a matching size without making
+it too dark:</p>
+<pre class="literal-block">\DeclareStringOption[1.125]{scaled}
+
+\ProcessKeyvalOptions*
+</pre>
+</div>
+</div>
+<div class="section" id="implementation">
+<h1>Implementation</h1>
+<div class="section" id="scaling">
+<h2>Scaling</h2>
+<p>Define the font family <tt class="literal">pzcm</tt> as a scaled variant of <tt class="literal">pzc</tt>:</p>
+<pre class="literal-block">\DeclareFontFamily{OT1}{pzcm}{}
+\DeclareFontShape{OT1}{pzcm}{mb}{it}{&lt;-&gt; s * [\pzccal&#64;scaled] pzcmi7t}{}
+</pre>
+</div>
+<div class="section" id="setup">
+<h2>Setup</h2>
+<p>As suggested in <a class="reference external" href="http://www.ctan.org/tex-archive/info/symbols/comprehensive/symbols-a4.pdf">The Comprehensive LaTeX Symbol List</a>:</p>
+<pre class="literal-block">\DeclareMathAlphabet{\mathpzc}{OT1}{pzcm}{mb}{it}
+</pre>
+</div>
+<div class="section" id="alias">
+<h2>Alias</h2>
+<p>Make the new alphabet available under the command specified by the
+<tt class="literal">cmdname</tt> option (default: overwrite“mathcal“):</p>
+<pre class="literal-block">\&#64;namedef\pzccal&#64;cmdname{\mathpzc}
+</pre>
+<div class="section" id="references">
+<h3>References</h3>
+<p>Alternative LaTeX script fonts that might be useful in math:</p>
+<dl class="field-list simple">
+<dt>Auriocus Kalligraphicus</dt>
+<dd><p><a class="reference external" href="http://www.tug.dk/FontCatalogue/aurical/">http://www.tug.dk/FontCatalogue/aurical/</a></p>
+</dd>
+<dt>Calligra</dt>
+<dd><p><a class="reference external" href="http://www.tug.dk/FontCatalogue/calligra/">http://www.tug.dk/FontCatalogue/calligra/</a></p>
+</dd>
+<dt>Jana Skrivana</dt>
+<dd><p><a class="reference external" href="http://www.tug.dk/FontCatalogue/janaskrivana/">http://www.tug.dk/FontCatalogue/janaskrivana/</a></p>
+</dd>
+<dt>Vicentino</dt>
+<dd><p><a class="reference external" href="http://www.tug.dk/FontCatalogue/vicentino/">http://www.tug.dk/FontCatalogue/vicentino/</a> (bitmap)</p>
+</dd>
+</dl>
+</div>
+</div>
+</div>
+</div>
+</body>
+</html>
diff --git a/obsolete/macros/latex/contrib/revtex4-0/10pt.rtx b/obsolete/macros/latex/contrib/revtex4-0/10pt.rtx
new file mode 100644
index 0000000000..d293fe165b
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-0/10pt.rtx
@@ -0,0 +1,163 @@
+%%
+%% This is file `10pt.rtx',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% revtex4.dtx (with options: `10pt')
+%%
+%% This file is part of the APS files in the REVTeX 4 distribution.
+%% For the version number, search on the string
+%% Original version by David Carlisle
+%% Modified by Arthur Ogawa (mailto:ogawa@teleport.com)
+%%
+%% Copyright (c) 1999 The American Physical Society.
+%% http://publish.aps.org/revtex4/
+%% mailto:revtex4@aps.org
+%%
+%% See the REVTeX 4 README file for restrictions and more information.
+%%
+\ProvidesFile{10pt.rtx}
+ [2001/08/03 v4.0 (http://publish.aps.org/revtex4/ for documentation)]%FileInfo
+\def\normalsize{%
+ \@setfontsize\normalsize\@xpt{11.5}%
+ \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \abovedisplayskip
+ \belowdisplayshortskip \abovedisplayskip
+ \let\@listi\@listI
+}%
+\def\small{%
+ \@setfontsize\small\@ixpt{10.5}%
+ \abovedisplayskip 8.5\p@ \@plus3\p@ \@minus4\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ \@plus2\p@
+ \belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@
+ \def\@listi{%
+ \leftmargin\leftmargini
+ \topsep 4\p@ \@plus2\p@ \@minus2\p@
+ \parsep 2\p@ \@plus\p@ \@minus\p@
+ \itemsep \parsep
+ }%
+}%
+\def\footnotesize{%
+ \@setfontsize\footnotesize\@viiipt{9.5pt}%
+ \abovedisplayskip 6\p@ \@plus2\p@ \@minus4\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ \@plus\p@
+ \belowdisplayshortskip 3\p@ \@plus\p@ \@minus2\p@
+ \def\@listi{%
+ \leftmargin\leftmargini
+ \topsep 3\p@ \@plus\p@ \@minus\p@
+ \parsep 2\p@ \@plus\p@ \@minus\p@
+ \itemsep \parsep
+ }%
+}%
+\def\scriptsize{%
+ \@setfontsize\scriptsize\@viipt\@viiipt
+}%
+\def\tiny{%
+ \@setfontsize\tiny\@vpt\@vipt
+}%
+\def\large{%
+ \@setfontsize\large\@xiipt{14pt}%
+}%
+\def\Large{%
+ \@setfontsize\Large\@xivpt{18pt}%
+}%
+\def\LARGE{%
+ \@setfontsize\LARGE\@xviipt{22pt}%
+}%
+\def\huge{%
+ \@setfontsize\huge\@xxpt{25pt}%
+}%
+\def\Huge{%
+ \@setfontsize\Huge\@xxvpt{30pt}%
+}%
+ \@ifxundefined\twoside@sw{\@booleanfalse\twoside@sw}{}%
+ \twoside@sw{%
+ \oddsidemargin -20pt
+ \evensidemargin -20pt
+ \marginparwidth 107pt
+ }{%
+ \oddsidemargin -.25in
+ \evensidemargin -.25in
+ \marginparwidth 30pt
+ }%
+\marginparsep 6pt
+\topmargin -61pt
+\headheight 25pt
+\headsep 16pt
+\topskip 10pt
+\footskip 30pt
+ \textheight = 56pc
+\textwidth42.5pc
+\columnsep 1.5pc
+\columnseprule 0pt
+\footnotesep 1pt
+\skip\footins 39pt plus 4pt minus 2pt
+\def\footnoterule{\kern-19pt\hrule width.5in\kern18.6pt\relax}%
+\floatsep 12pt plus 2pt minus 2pt
+\textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 12pt plus 2pt minus 2pt
+\dblfloatsep 12pt plus 2pt minus 2pt
+\dbltextfloatsep 20pt plus 2pt minus 4pt
+\@fptop 0pt plus 1fil
+\@fpsep 8pt plus 2fil
+\@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil
+\@dblfpsep 8pt plus 2fil
+\@dblfpbot 0pt plus 1fil
+\marginparpush 5pt
+\parskip 0pt plus 1pt
+\parindent 10pt
+\emergencystretch8\p@
+\partopsep 2pt plus 1pt minus 1pt
+\leftmargini 25pt
+\leftmarginii 22pt
+\leftmarginiii 18.7pt
+\leftmarginiv 17pt
+\leftmarginv 10pt
+\leftmarginvi 10pt
+\def\@listI{%
+ \leftmargin\leftmargini
+ \parsep 4\p@ plus2\p@ minus\p@
+ \topsep 8\p@ plus2\p@ minus4\p@
+ \itemsep 4\p@ plus2\p@ minus\p@
+}%
+\labelsep 4pt
+\def\@listii{%
+ \leftmargin\leftmarginii
+ \labelwidth\leftmarginii
+ \advance\labelwidth-\labelsep
+ \topsep 4\p@ plus2\p@ minus\p@
+ \parsep 2\p@ plus\p@ minus\p@
+ \itemsep \parsep
+}%
+\def\@listiii{%
+ \leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii
+ \advance\labelwidth-\labelsep
+ \topsep 2\p@ plus\p@ minus\p@
+ \parsep \z@
+ \partopsep \p@ plus\z@ minus\p@
+ \itemsep \topsep
+}%
+\def\@listiv{%
+ \leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv
+ \advance\labelwidth-\labelsep
+}%
+\def\@listv{%
+ \leftmargin\leftmarginv
+ \labelwidth\leftmarginv
+ \advance\labelwidth-\labelsep
+}%
+\def\@listvi{%
+ \leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi
+ \advance\labelwidth-\labelsep
+}%
+\endinput
+%%
+%% End of file `10pt.rtx'.
diff --git a/obsolete/macros/latex/contrib/revtex4-0/11pt.rtx b/obsolete/macros/latex/contrib/revtex4-0/11pt.rtx
new file mode 100644
index 0000000000..5fb6acce60
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-0/11pt.rtx
@@ -0,0 +1,154 @@
+%%
+%% This is file `11pt.rtx',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% revtex4.dtx (with options: `11pt')
+%%
+%% This file is part of the APS files in the REVTeX 4 distribution.
+%% For the version number, search on the string
+%% Original version by David Carlisle
+%% Modified by Arthur Ogawa (mailto:ogawa@teleport.com)
+%%
+%% Copyright (c) 1999 The American Physical Society.
+%% http://publish.aps.org/revtex4/
+%% mailto:revtex4@aps.org
+%%
+%% See the REVTeX 4 README file for restrictions and more information.
+%%
+\ProvidesFile{11pt.rtx}
+ [2001/08/03 v4.0 (http://publish.aps.org/revtex4/ for documentation)]%FileInfo
+\def\normalsize{%
+ \@setfontsize\normalsize\@xipt{13.6}%
+ \abovedisplayskip 11\p@ \@plus3\p@ \@minus6\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \abovedisplayskip
+ \belowdisplayshortskip \abovedisplayskip
+ \let\@listi\@listI
+}%
+\def\small{%
+ \@setfontsize\small\@xpt\@xiipt
+ \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@
+ \abovedisplayshortskip \z@ \@plus3\p@
+ \belowdisplayshortskip 6\p@ \@plus3\p@ \@minus3\p@
+ \def\@listi{\leftmargin\leftmargini
+ \topsep 6\p@ \@plus2\p@ \@minus2\p@
+ \parsep 3\p@ \@plus2\p@ \@minus\p@
+ \itemsep \parsep
+ }%
+ \belowdisplayskip \abovedisplayskip
+}%
+\def\footnotesize{%
+ \@setfontsize\footnotesize\@ixpt{11}%
+ \abovedisplayskip 8\p@ \@plus2\p@ \@minus4\p@
+ \abovedisplayshortskip \z@ \@plus\p@
+ \belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@
+ \def\@listi{\leftmargin\leftmargini
+ \topsep 4\p@ \@plus2\p@ \@minus2\p@
+ \parsep 2\p@ \@plus\p@ \@minus\p@
+ \itemsep \parsep
+ }%
+ \belowdisplayskip \abovedisplayskip
+}%
+\def\scriptsize{%
+ \@setfontsize\scriptsize\@viiipt{9.5}%
+}%
+\def\tiny{%
+ \@setfontsize\tiny\@vipt\@viipt
+}%
+\def\large{%
+ \@setfontsize\large\@xiipt{14}%
+}%
+\def\Large{%
+ \@setfontsize\Large\@xivpt{18}%
+}%
+\def\LARGE{%
+ \@setfontsize\LARGE\@xviipt{22}%
+}%
+\def\huge{%
+ \@setfontsize\huge\@xxpt{25pt}%
+}%
+\def\Huge{%
+ \@setfontsize\Huge\@xxvpt{30pt}%
+}%
+ \@ifxundefined\twoside@sw{\@booleanfalse\twoside@sw}{}%
+ \twoside@sw{%
+ \oddsidemargin 0pt
+ \evensidemargin 0pt
+ \marginparwidth 60pt
+ }{%
+ \oddsidemargin 0pt
+ \evensidemargin 0pt
+ \marginparwidth 44pt
+ }%
+\marginparsep 10pt
+\topmargin -37pt
+\headheight 12pt
+\headsep 25pt
+\topskip 10pt
+\footskip 30pt
+ \@ifxundefined\tightenlines@sw{\@booleanfalse\tightenlines@sw}{}%
+ \textheight=665.5\p@
+ \tightenlines@sw{%
+ \def\baselinestretch{1}%
+ }{%
+ \def\baselinestretch{1.5}%
+ }%
+\textwidth 468pt
+\columnsep 10pt
+\columnseprule 0pt
+\footnotesep 1pt
+\skip\footins 25.25pt plus 4pt minus 2pt
+\def\footnoterule{\kern-5.25pt\hrule width.5in\kern4.85pt\relax}
+\floatsep 14pt plus 2pt minus 4pt
+\textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 14pt plus 4pt minus 4pt
+\dblfloatsep 14pt plus 2pt minus 4pt
+\dbltextfloatsep 20pt plus 2pt minus 4pt
+\@fptop 0pt plus 1fil
+\@fpsep 10pt plus 2fil
+\@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil
+\@dblfpsep 10pt plus 2fil%
+\@dblfpbot 0pt plus 1fil
+\marginparpush 7pt
+\parskip 0pt plus 1pt
+\parindent 15pt
+\emergencystretch8\p@
+\partopsep 3pt plus 2pt minus 2pt
+\leftmargini 30pt
+\leftmarginii 26pt
+\leftmarginiii 22pt
+\leftmarginiv 20pt
+\leftmarginv 12pt
+\leftmarginvi 12pt
+\def\@listI{\leftmargin\leftmargini \parsep 5\p@ plus2.5\p@ minus\p@
+ \topsep 10\p@ plus4\p@ minus6\p@
+ \itemsep 5\p@ plus2.5\p@ minus\p@
+}%
+\labelsep 6pt
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 5\p@ plus2.5\p@ minus\p@
+ \parsep 2.5\p@ plus\p@ minus\p@
+ \itemsep \parsep
+}%
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2.5\p@ plus\p@ minus\p@
+ \parsep \z@ \partopsep \p@ plus\z@ minus\p@
+ \itemsep \topsep
+}%
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep
+}%
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep
+}%
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep
+}%
+\endinput
+%%
+%% End of file `11pt.rtx'.
diff --git a/obsolete/macros/latex/contrib/revtex4-0/12pt.rtx b/obsolete/macros/latex/contrib/revtex4-0/12pt.rtx
new file mode 100644
index 0000000000..797b16440c
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-0/12pt.rtx
@@ -0,0 +1,154 @@
+%%
+%% This is file `12pt.rtx',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% revtex4.dtx (with options: `12pt')
+%%
+%% This file is part of the APS files in the REVTeX 4 distribution.
+%% For the version number, search on the string
+%% Original version by David Carlisle
+%% Modified by Arthur Ogawa (mailto:ogawa@teleport.com)
+%%
+%% Copyright (c) 1999 The American Physical Society.
+%% http://publish.aps.org/revtex4/
+%% mailto:revtex4@aps.org
+%%
+%% See the REVTeX 4 README file for restrictions and more information.
+%%
+\ProvidesFile{12pt.rtx}
+ [2001/08/03 v4.0 (http://publish.aps.org/revtex4/ for documentation)]%FileInfo
+\def\normalsize{%
+ \@setfontsize\normalsize\@xiipt{14pt}%
+ \abovedisplayskip 12\p@ \@plus3\p@ \@minus7\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus3\p@
+ \belowdisplayshortskip 6.5\p@ \@plus3.5\p@ \@minus3\p@
+ \let\@listi\@listI
+}%
+ \def\small{%
+ \@setfontsize\small\@xipt{14.5pt}%
+ \abovedisplayskip 8\p@ \@plus3\p@ \@minus6\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ \@plus3\p@
+ \belowdisplayshortskip 6.5\p@ \@plus3.5\p@ \@minus3\p@
+ \def\@listi{%
+ \leftmargin\leftmargini
+ \topsep 9\p@ \@plus3\p@ \@minus5\p@
+ \parsep 4.5\p@ \@plus2\p@ \@minus\p@
+ \itemsep \parsep
+ }%
+}%
+ \def\footnotesize{%
+ \@setfontsize\footnotesize\@xpt{14.5pt}%
+ \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ \@plus3\p@
+ \belowdisplayshortskip 6\p@ \@plus3\p@ \@minus3\p@
+ \def\@listi{%
+ \leftmargin\leftmargini
+ \topsep 6\p@ \@plus2\p@ \@minus2\p@
+ \parsep 3\p@ \@plus2\p@ \@minus\p@
+ \itemsep \parsep
+ }%
+}%
+\def\scriptsize{%
+ \@setfontsize\scriptsize\@viiipt{9.5pt}%
+}%
+\def\tiny{%
+ \@setfontsize\tiny\@vipt{7pt}%
+}%
+\def\large{%
+ \@setfontsize\large\@xivpt{18pt}%
+}%
+\def\Large{%
+ \@setfontsize\Large\@xviipt{22pt}%
+}%
+\def\LARGE{%
+ \@setfontsize\LARGE\@xxpt{25pt}%
+}%
+\def\huge{%
+ \@setfontsize\huge\@xxvpt{30pt}%
+}%
+\let\Huge=\huge
+ \@ifxundefined\twoside@sw{\@booleanfalse\twoside@sw}{}%
+ \twoside@sw{%
+ \oddsidemargin 0pt
+ \evensidemargin 0pt
+ \marginparwidth 60pt
+ }{%
+ \oddsidemargin 0pt
+ \evensidemargin 0pt
+ \marginparwidth 44pt
+ }%
+\marginparsep 10pt
+\topmargin -37pt
+\headheight 12pt
+\headsep 25pt
+\topskip 10pt
+\footskip 30pt
+ \@ifxundefined\tightenlines@sw{\@booleanfalse\tightenlines@sw}{}%
+ \textheight=665.5\p@
+ \tightenlines@sw{%
+ \def\baselinestretch{1}%
+ }{%
+ \def\baselinestretch{1.5}%
+ }%
+\textwidth 468pt
+\columnsep 10pt
+\columnseprule 0pt
+\footnotesep 1pt
+\skip\footins 25.25pt plus 4pt minus 2pt
+\def\footnoterule{\kern-5.25pt\hrule width.5in\kern4.85pt\relax}
+\floatsep 14pt plus 2pt minus 4pt
+\textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 14pt plus 4pt minus 4pt
+\dblfloatsep 14pt plus 2pt minus 4pt
+\dbltextfloatsep 20pt plus 2pt minus 4pt
+\@fptop 0pt plus 1fil
+\@fpsep 10pt plus 2fil
+\@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil
+\@dblfpsep 10pt plus 2fil%
+\@dblfpbot 0pt plus 1fil
+\marginparpush 7pt
+\parskip 0pt plus 1pt
+\parindent 15pt
+\emergencystretch8\p@
+\partopsep 3pt plus 2pt minus 2pt
+\leftmargini 30pt
+\leftmarginii 26pt
+\leftmarginiii 22pt
+\leftmarginiv 20pt
+\leftmarginv 12pt
+\leftmarginvi 12pt
+\def\@listI{\leftmargin\leftmargini \parsep 5\p@ plus2.5\p@ minus\p@
+ \topsep 10\p@ plus4\p@ minus6\p@
+ \itemsep 5\p@ plus2.5\p@ minus\p@
+}%
+\labelsep 6pt
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 5\p@ plus2.5\p@ minus\p@
+ \parsep 2.5\p@ plus\p@ minus\p@
+ \itemsep \parsep
+}%
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2.5\p@ plus\p@ minus\p@
+ \parsep \z@ \partopsep \p@ plus\z@ minus\p@
+ \itemsep \topsep
+}%
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep
+}%
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep
+}%
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep
+}%
+\endinput
+%%
+%% End of file `12pt.rtx'.
diff --git a/obsolete/macros/latex/contrib/revtex4-0/DOWNLOAD b/obsolete/macros/latex/contrib/revtex4-0/DOWNLOAD
new file mode 100644
index 0000000000..d1c25f2075
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-0/DOWNLOAD
@@ -0,0 +1,75 @@
+Last updated August 3, 2001
+
+To download REVTeX 4, download the files listed below, or, more, conveniently,
+download revtex4.tar.gz or revtex4.zip which contains all of the files.
+
+Only the files under 'Essential files' are required to run REVTeX 4, but
+be sure to read the documentation under the 'docs' subdirectory and look
+over the sample files in the 'samples' subdirectory.
+
+ Essential files
+ ---------------
+revtex4.cls - The REVTeX 4 class file
+aps.rtx - APS specific REVTeX 4 customizations for Phys. Rev.
+rmp.rtx - APS specific REVTeX 4 customizations for Rev. Mod. Phys.
+10pt.rtx - 10 point size class option file for REVTeX.
+11pt.rtx - 11 point size class option file for REVTeX.
+12pt.rtx - 12 point size class option file for REVTeX.
+apsrev.bst - A new custom-bib based BibTeX style file for use with
+ REVTeX 4 for Phys. Rev. style citations.
+apsrmp.bst - For Rev. Mod. Physics (author/year) style citations
+revsymb.sty - A collection of common symbols for use outside of REVTeX.
+
+ Documentation files
+ -------------------
+(located in /docs subdirectory)
+auguide.tex - Author's guide to REVTeX 4 (Note: There is a
+ separate "APS Compuscript Guide for REVTeX 4" detailing
+ restrictions for APS submissions)
+differ.tex - "Differences between REVTeX 3 and REVTeX 4"
+summary.tex - "REVTeX 4 Command and Options Summary"
+revbib.tex - A short introduction to using BibTeX with REVTeX 4 (Not
+ available yet)
+docs.sty - Used by auguide.tex and differ.tex
+
+ Sample files
+ ------------
+(located in /sample subdirectory)
+template.aps - A template for APS authors to follow
+apssamp.tex - A sample file showing how to achieve certain effects
+ using REVTeX 4
+fig_1.eps - sample figure for apssamp.tex
+fig_2.eps - sample wide figure for apssamp.tex
+apssamp.bib - sample BibTeX source file for apssamp.tex
+
+ Source files
+ ------------
+(located in /src subdirectory)
+revtex4.dtx - The commented source file for revtex4.cls and revsymb.sty.
+revtex4.pdf - PDF documentation generated from .dtx file
+ltxgrid.dtx - The commented source file for the ltxgrid package
+ltxgrid.pdf - PDF documentation generated from .dtx file
+ltxutil.dtx - The commented source file for the ltxutil package
+ltxutil.pdf - PDF documentation generated from .dtx file
+ltxdocext.dtx - The commented source file for the ltxdocext package
+ltxdocext.pdf - PDF documentation generated from .dtx file
+textcase.dtx - The commented source file for the textcase package
+revtex4.ins - A docstrip (version 2.4 or higher) file for extracting
+ revtex4.cls and revsymb.sty from the *.dtx files
+
+Not Included
+------------
+The following packages are required by REVTeX but are not
+included in this distribution. Please obtain from CTAN
+(Comprehensive TeX Archive Network), e.g. <http://www.ctan.org/>. These
+can also be downloaded from <http://publish.aps.org/revtex4/>.
+
+natbib.dtx - Version 7 or later needed
+natbib.ins - LaTeX this to create natbib.sty and natbib
+ documentation from natbib.dtx
+bm.dtx - Bold math style - part of (current!) standard LaTeX2e tools
+bm.sty - generated from bm.dtx by running tools.ins
+
+An up-to-date installation of AMS-LaTeX is also required for certain
+documentclass options. Version 2.0 or higher is needed. It is
+available from <http://www.ams.org/tex/>.
diff --git a/obsolete/macros/latex/contrib/revtex4-0/README b/obsolete/macros/latex/contrib/revtex4-0/README
new file mode 100644
index 0000000000..e9a7d08a71
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-0/README
@@ -0,0 +1,131 @@
+%% ****** Start of file README ****** %
+%%
+%% This file is part of the APS files in the REVTeX 4 distribution.
+%% Version 4.0 of REVTeX, August 2001.
+%%
+%% Copyright (c) 1999, 2000, 2001 The American Physical Society.
+%%
+
+Last updated August 3, 2001
+
+This file describes the contents of this distribution of REVTeX 4.0.
+The definitive source of information about REVTeX 4 is the APS web
+page http://publish.aps.org/revtex4/.
+
+User queries should be directed to revtex@aps.org.
+
+Manifest
+--------
+Only the files under 'Essential files' are required to run REVTeX 4.
+
+ Essential files
+ ---------------
+revtex4.cls - The REVTeX 4 class file
+aps.rtx - APS specific REVTeX 4 customizations for Phys. Rev.
+rmp.rtx - APS specific REVTeX 4 customizations for Rev. Mod. Phys.
+10pt.rtx - 10 point size class option file for REVTeX.
+11pt.rtx - 11 point size class option file for REVTeX.
+12pt.rtx - 12 point size class option file for REVTeX.
+apsrev.bst - A new custom-bib based BibTeX style file for use with
+ REVTeX 4 for Phys. Rev. style citations.
+apsrmp.bst - For Rev. Mod. Physics (author/year) style citations
+revsymb.sty - A collection of common symbols for use outside of REVTeX.
+
+ Documentation files
+ -------------------
+(located in /docs subdirectory)
+auguide.tex - Author's guide to REVTeX 4 (Note: There is a
+ separate "APS Compuscript Guide for REVTeX 4" detailing
+ restrictions for APS submissions)
+differ.tex - "Differences between REVTeX 3 and REVTeX 4"
+summary.tex - "REVTeX 4 Command and Options Summary"
+revbib.tex - A short introduction to using BibTeX with REVTeX 4 (Not
+ available yet)
+docs.sty - Used by auguide.tex and differ.tex
+
+ Sample files
+ ------------
+(located in /sample subdirectory)
+template.aps - A template for APS authors to follow
+apssamp.tex - A sample file showing how to achieve certain effects
+ using REVTeX 4
+fig_1.eps - sample figure for apssamp.tex
+fig_2.eps - sample wide figure for apssamp.tex
+apssamp.bib - sample BibTeX source file for apssamp.tex
+
+ Source files
+ ------------
+(located in /src subdirectory)
+revtex4.dtx - The commented source file for revtex4.cls and revsymb.sty.
+revtex4.pdf - PDF documentation generated from .dtx file
+ltxgrid.dtx - The commented source file for the ltxgrid package
+ltxgrid.pdf - PDF documentation generated from .dtx file
+ltxutil.dtx - The commented source file for the ltxutil package
+ltxutil.pdf - PDF documentation generated from .dtx file
+ltxdocext.dtx - The commented source file for the ltxdocext package
+ltxdocext.pdf - PDF documentation generated from .dtx file
+textcase.dtx - The commented source file for the textcase package
+revtex4.ins - A docstrip (version 2.4 or higher) file for extracting
+ revtex4.cls and revsymb.sty from the *.dtx files
+
+Not Included
+------------
+The following packages are required by REVTeX but are not
+included in this distribution. Please obtain from CTAN
+(Comprehensive TeX Archive Network), e.g. <http://www.ctan.org/>. These
+can also be downloaded from <http://publish.aps.org/revtex4/>.
+
+natbib.dtx - Version 7 or later needed
+natbib.ins - LaTeX this to create natbib.sty and natbib
+ documentation from natbib.dtx
+bm.dtx - Bold math style - part of (current!) standard LaTeX2e tools
+bm.sty - generated from bm.dtx by running tools.ins
+
+An up-to-date installation of AMS-LaTeX is also required for certain
+documentclass options. Version 2.0 or higher is needed. It is
+available from <http://www.ams.org/tex/>.
+
+Recommended styles and packages
+--------------------------
+By implementing REVTeX as a native LaTeX2e document class, users can now
+take advantage of many of the well-supported LaTeX2e packages available.
+Here are some that are particularly useful and recommended.
+
+longtable.sty for tables running to multiple pages - part of a
+standard LaTeX2e distribution.
+
+hyperref.sty for hyperlinking - should work well with REVTeX 4.
+
+graphics.sty and graphicx.sty for figure inclusion - part of LaTeX2e's
+standard distribution.
+
+Installation
+------------
+To install REVTeX 4, put revtex4.cls, *.rtx, *.sty, and *.bst (files
+listed under 'Essential Files' above) somewhere in your TEXINPUTS path
+or whereever your TeX software looks for input files. Under the TDS,
+you should install them into $TEXMFLOCAL/tex/latex/revtex4. The *.bst
+files should go under $TEXMFLOCAL/bibtex/bst/revtex4. Run the
+appropriate update command (texhash, initexmf -u, etc.). Install
+required non-REVTeX packages (natbib and bm). Please consult the
+documentaton for your local TeX package for more information. MikTeX
+users should use version MikTeX 2.1.
+
+Credits
+-------
+David Carlisle created the initial versions of REVTeX 4 under
+commission by the APS. Arthur Ogawa has extensively reworked those
+early versions and added much new functionality. Mark Doyle, APS
+Manager of Product Development coordinated the effort. The APS is the
+maintainer of REVTeX 4, and all bugs are our responsibility. Please
+e-mail complaints to revtex@aps.org.
+
+Backwards compatibility
+-----------------------
+The REVTeX 4 class file has been named revtex4.cls to distinguish it
+from its predecessors. If the class file is copied to revtex.cls,
+files created with earlier versions of REVTeX should still work.
+
+LaTeX2e requirements
+--------------------
+REVTeX 4 requires LaTeX2e [1996/06/01]
diff --git a/obsolete/macros/latex/contrib/revtex4-0/aps.rtx b/obsolete/macros/latex/contrib/revtex4-0/aps.rtx
new file mode 100644
index 0000000000..b5e791b643
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-0/aps.rtx
@@ -0,0 +1,575 @@
+%%
+%% This is file `aps.rtx',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% revtex4.dtx (with options: `aps')
+%%
+%% This file is part of the APS files in the REVTeX 4 distribution.
+%% For the version number, search on the string
+%% Original version by David Carlisle
+%% Modified by Arthur Ogawa (mailto:ogawa@teleport.com)
+%%
+%% Copyright (c) 1999 The American Physical Society.
+%% http://publish.aps.org/revtex4/
+%% mailto:revtex4@aps.org
+%%
+%% See the REVTeX 4 README file for restrictions and more information.
+%%
+\NeedsTeXFormat{LaTeX2e}[1996/12/01]
+\ProvidesFile{aps.rtx}
+ [2001/08/03 v4.0 (http://publish.aps.org/revtex4/ for documentation)]%FileInfo
+\ifx\undefined\substyle@ext
+ \def\@tempa{%
+ \endinput
+ \GenericWarning{I must be read in by REVTeX! (Bailing out)}%
+ }%
+ \expandafter\else
+ \def\@tempa{}%
+ \expandafter\fi\@tempa
+\def\ao{Appl.\ Opt.\ }
+\def\ap{Appl.\ Phys.\ }
+\def\apl{Appl.\ Phys.\ Lett.\ }
+\def\apj{Astrophys.\ J.\ }
+\def\bell{Bell Syst.\ Tech.\ J.\ }
+\def\jqe{IEEE J.\ Quantum Electron.\ }
+\def\assp{IEEE Trans.\ Acoust.\ Speech Signal Process.\ }
+\def\aprop{IEEE Trans.\ Antennas Propag.\ }
+\def\mtt{IEEE Trans.\ Microwave Theory Tech.\ }
+\def\iovs{Invest.\ Ophthalmol.\ Vis.\ Sci.\ }
+\def\jcp{J.\ Chem.\ Phys.\ }
+\def\jmo{J.\ Mod.\ Opt.\ }
+\def\josa{J.\ Opt.\ Soc.\ Am.\ }
+\def\josaa{J.\ Opt.\ Soc.\ Am.\ A }
+\def\josab{J.\ Opt.\ Soc.\ Am.\ B }
+\def\jpp{J.\ Phys.\ (Paris) }
+\def\nat{Nature (London) }
+\def\oc{Opt.\ Commun.\ }
+\def\ol{Opt.\ Lett.\ }
+\def\pl{Phys.\ Lett.\ }
+\def\pra{Phys.\ Rev.\ A }
+\def\prb{Phys.\ Rev.\ B }
+\def\prc{Phys.\ Rev.\ C }
+\def\prd{Phys.\ Rev.\ D }
+\def\pre{Phys.\ Rev.\ E }
+\def\prl{Phys.\ Rev.\ Lett.\ }
+\def\rmp{Rev.\ Mod.\ Phys.\ }
+\def\pspie{Proc.\ Soc.\ Photo-Opt.\ Instrum.\ Eng.\ }
+\def\sjqe{Sov.\ J.\ Quantum Electron.\ }
+\def\vr{Vision Res.\ }
+\def\@fnsymbol#1{%
+ \ensuremath{%
+ \ifcase#1\or
+ *\or \dagger \or
+ \ddagger \or \mathsection \or
+ \mathparagraph\or
+ **\or \dagger\dagger \or
+ \ddagger\ddagger \or \mathsection \mathsection \or
+ \mathparagraph\mathparagraph\or
+ *{*}*\ignorespaces \or \dagger\dagger\dagger \or
+ \ddagger\ddagger\ddagger\or \mathsection \mathsection \mathsection \or
+ \mathparagraph\mathparagraph\mathparagraph\or
+ \else
+ \@ctrerr
+ \fi
+ }%
+}%
+\renewenvironment{titlepage}{%
+ \let\wastwocol@sw\twocolumn@sw
+ \onecolumngrid
+ \newpage
+ \thispagestyle{titlepage}%
+ \c@page\z@% article sets this to one not zero???
+}{%
+ \wastwocol@sw{\twocolumngrid}{\newpage}%
+}%
+\def\frontmatter@abstractheading{%
+ \preprintsty@sw{%
+ \begingroup
+ \centering\large
+ \abstractname
+ \par
+ \endgroup
+ }{}%
+}%
+\def\frontmatter@abstractwidth{400\p@}%
+\def\frontmatter@abstractfont{%
+ \small
+ \parindent1em\relax
+ \adjust@abstractwidth
+}%
+\def\adjust@abstractwidth{%
+ \dimen@\textwidth\advance\dimen@-\frontmatter@abstractwidth
+ \divide\dimen@\tw@
+ \galley@sw{%
+ \advance\rightskip\tw@\dimen@
+ }{%
+ \advance\leftskip\dimen@
+ \advance\rightskip\dimen@
+ }%
+}%
+\appdef\class@documenthook{%
+ \preprintsty@sw{%
+ \@ifxundefined\titlepage@sw{\@booleantrue\titlepage@sw}{}%
+ \def\frontmatter@abstractwidth{\textwidth}%
+ \def\frontmatter@affiliationfont{\it}%
+ \let\section\section@preprintsty
+ \let\subsection\subsection@preprintsty
+ \let\subsubsection\subsubsection@preprintsty
+ }{}%
+ }%
+\def\frontmatter@authorformat{%
+ \skip@\@flushglue
+ \@flushglue\z@ plus.3\hsize\relax
+ \centering
+ \advance\baselineskip\p@
+ \parskip11.5\p@\relax
+ \@flushglue\skip@
+}%
+\def\frontmatter@above@affilgroup{%
+}%
+\def\frontmatter@above@affiliation@script{%
+ \skip@\@flushglue
+ \@flushglue\z@ plus.3\hsize\relax
+ \centering
+ \@flushglue\skip@
+ \addvspace{3.5\p@}%
+}%
+\def\frontmatter@above@affiliation{%
+ \preprintsty@sw{}{%
+ }%
+}%
+\def\frontmatter@affiliationfont{%
+ \small\it
+}%
+\def\frontmatter@collaboration@above{%
+ \preprintsty@sw{%
+ }{%
+ \parskip1.5\p@\relax
+ }%
+}%
+\@ifxundefined\groupauthors@sw{%
+ \clo@groupedaddress
+}{}%
+\def\frontmatter@setup{%
+ \normalfont
+}%
+\def\frontmatter@title@above{\addvspace{6\p@}}%
+\def\frontmatter@title@format{\large\bfseries\centering\parskip\z@skip}%
+\def\frontmatter@title@below{}%
+\def\@author@parskip{3\p@}%
+\def\frontmatter@makefnmark{%
+ \@textsuperscript{%
+ \normalfont\@thefnmark
+ }%
+}%
+\def\frontmatter@authorbelow{%
+\addvspace{3\p@}%
+}%
+\def\frontmatter@RRAP@format{%
+ \small
+ \centering
+ \everypar{\hbox\bgroup(\@gobble@leavemode@uppercase}%
+ \def\par{\@ifvmode{}{\unskip)\egroup\@@par}}%
+}%
+\def\punct@RRAP{;\egroup\ \hbox\bgroup}%
+\def\@gobble@leavemode@uppercase#1#2{\expandafter\MakeTextUppercase}%
+\def\frontmatter@PACS@format{%
+ \addvspace{11\p@}%
+ \footnotesize
+ \adjust@abstractwidth
+ \parindent\z@
+ \parskip\z@skip
+ \samepage
+}%
+\def\frontmatter@keys@format{%
+ \footnotesize
+ \adjust@abstractwidth
+ \parindent\z@
+ \samepage
+}%
+\def\ps@titlepage{%
+ \def\@oddhead{%
+ \hfill
+ \produce@preprints\@preprint
+ }%
+ \let\@evenhead\@oddhead
+ \def\@oddfoot{%
+ \hb@xt@\z@{\byrevtex\hss}%
+ \hfil
+ \preprintsty@sw{\thepage}{}%
+ \quad\checkindate
+ \hfil
+ }%
+ \let\@evenfoot\@oddfoot
+}%
+\def\byrevtex{\byrevtex@sw{Typeset by REV\TeX}{}}%
+\def\produce@preprints#1{%
+ \preprint@sw{%
+ \vtop to \z@{%
+ \def\baselinestretch{1}%
+ \small
+ \let\preprint\preprint@count
+ \count@\z@#1\@ifnum{\count@>\tw@}{%
+ \hbox{%
+ \let\preprint\preprint@hlist
+ #1\setbox\z@\lastbox
+ }%
+ }{%
+ \let\preprint\preprint@cr
+ \halign{\hfil##\cr#1\crcr}%
+ \par
+ \vss
+ }%
+ }%
+ }{}%
+}%
+\def\preprint@cr#1{#1\cr}%
+\def\preprint@count#1{\advance\count@\@ne}%
+\def\preprint@hlist#1{#1\hbox{, }}%
+\def\@seccntformat#1{\csname the#1\endcsname.\quad}%
+\def\@hang@from#1#2#3{#1#2#3}%
+\def\section{%
+ \@startsection
+ {section}%
+ {1}%
+ {\z@}%
+ {0.8cm \@plus1ex \@minus .2ex}%
+ {0.5cm}%
+ {%
+ \normalfont\small\bfseries
+ \centering
+ }%
+}%
+\def\@hangfrom@section#1#2#3{\@hangfrom{#1#2}\MakeTextUppercase{#3}}%
+\def\subsection{%
+ \@startsection
+ {subsection}%
+ {2}%
+ {\z@}%
+ {.8cm \@plus1ex \@minus .2ex}%
+ {.5cm}%
+ {%
+ \normalfont\small\bfseries
+ \centering
+ }%
+}%
+\def\subsubsection{%
+ \@startsection
+ {subsubsection}%
+ {3}%
+ {\z@}%
+ {.8cm \@plus1ex \@minus .2ex}%
+ {.5cm}%
+ {%
+ \normalfont\small\itshape
+ \centering
+ }%
+}%
+\def\paragraph{%
+ \@startsection
+ {paragraph}%
+ {4}%
+ {\parindent}%
+ {\z@}%
+ {-1em}%
+ {\normalfont\normalsize\itshape}%
+}%
+\def\subparagraph{%
+ \@startsection
+ {subparagraph}%
+ {5}%
+ {\parindent}%
+ {3.25ex \@plus1ex \@minus .2ex}%
+ {-1em}%
+ {\normalfont\normalsize\bfseries}%
+}%
+\def\section@preprintsty{%
+ \@startsection
+ {section}%
+ {1}%
+ {\z@}%
+ {0.8cm \@plus1ex \@minus .2ex}%
+ {0.5cm}%
+ {%
+ \normalfont\small\bfseries
+ }%
+}%
+\def\subsection@preprintsty{%
+ \@startsection
+ {subsection}%
+ {2}%
+ {\z@}%
+ {.8cm \@plus1ex \@minus .2ex}%
+ {.5cm}%
+ {%
+ \normalfont\small\bfseries
+ }%
+}%
+\def\subsubsection@preprintsty{%
+ \@startsection
+ {subsubsection}%
+ {3}%
+ {\z@}%
+ {.8cm \@plus1ex \@minus .2ex}%
+ {.5cm}%
+ {%
+ \normalfont\small\itshape
+ }%
+}%
+ \@ifxundefined\frontmatter@footnote@produce{%
+ \let\frontmatter@footnote@produce\frontmatter@footnote@produce@endnote
+ }{}%
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5pt}
+\setcounter{tocdepth}{3}
+\def\tableofcontents{%
+ \addtocontents{toc}{\string\tocdepth@munge}%
+ \print@toc{toc}%
+ \addtocontents{toc}{\string\tocdepth@restore}%
+}%
+\def\tocdepth@munge{%
+ \let\l@section@saved\l@section
+ \let\l@section\@gobble@tw@
+}%
+\def\@gobble@tw@#1#2{}%
+\def\tocdepth@restore{%
+ \let\l@section\l@section@saved
+}%
+\def\l@part#1#2{\addpenalty{\@secpenalty}%
+ \begingroup
+ \set@tocdim@pagenum{#2}%
+ \parindent \z@
+ \rightskip\tocleft@pagenum plus 1fil\relax
+ \skip@\parfillskip\parfillskip\z@
+ \addvspace{2.25em plus\p@}%
+ \large \bf %
+ \leavevmode\ignorespaces#1\unskip\nobreak\hskip\skip@
+ \hb@xt@\rightskip{\hfil\unhbox\z@}\hskip-\rightskip\hskip\z@skip
+ \par
+ \nobreak %
+ \endgroup
+}%
+\def\tocleft@{\z@}%
+\def\tocdim@min{5\p@}%
+\def\l@section{%
+ \l@@sections{}{section}% Implicit #3#4
+}%
+\def\l@f@section{%
+ \addpenalty{\@secpenalty}%
+ \addvspace{1.0em plus\p@}%
+ \bf
+}%
+\def\l@subsection{%
+ \l@@sections{section}{subsection}% Implicit #3#4
+}%
+\def\l@subsubsection{%
+ \l@@sections{subsection}{subsubsection}% Implicit #3#4
+}%
+\def\l@paragraph#1#2{}%
+\def\l@subparagraph#1#2{}%
+\let\toc@pre\toc@pre@auto
+\let\toc@post\toc@post@auto
+\def\listoffigures{\print@toc{lof}}%
+\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
+\def\listoftables{\print@toc{lot}}%
+\let\l@table\l@figure
+\appdef\class@documenthook{%
+ \@ifxundefined\raggedcolumn@sw{\@booleantrue\raggedcolumn@sw}{}%
+ \raggedcolumn@sw{\raggedbottom}{\flushbottom}%
+}%
+\def\tableft@skip@float{\z@ plus\hsize}%
+\def\tabmid@skip@float{\@flushglue}%
+\def\tabright@skip@float{\z@ plus\hsize}%
+\def\array@row@pre@float{\hline\hline\noalign{\vskip\doublerulesep}}%
+\def\array@row@pst@float{\noalign{\vskip\doublerulesep}\hline\hline}%
+\def\@makefntext#1{%
+ \def\baselinestretch{1}%
+ \reset@font
+ \footnotesize
+ \leftskip1em
+ \parindent1em
+ \noindent\nobreak\hskip-\leftskip
+ \hb@xt@\leftskip{%
+ \Hy@raisedlink{\hyper@anchorstart{footnote@\the\c@footnote}\hyper@anchorend}%
+ \hss\@makefnmark\
+ }%
+ #1%
+ \par
+}%
+\prepdef\appendix{%
+ \par
+ \let\@hangfrom@section\@hangfrom@appendix
+ \let\@hangfroms@section\@hangfroms@appendix
+ \let\@sectioncntformat\@appendixcntformat
+}%
+\def\@hangfrom@appendix#1#2#3{%
+ #1%
+ \@if@empty{#2}{%
+ \MakeTextUppercase{#3}%
+ }{%
+ #2\@if@empty{#3}{}{:\ \MakeTextUppercase{#3}}%
+ }%
+}%
+\def\@hangfroms@appendix#1#2{%
+ #1\MakeTextUppercase{#2}%
+}%
+\def\@appendixcntformat#1{\appendixname\ \csname the#1\endcsname}%
+\def\appendixesname{APPENDICES}%
+\def\appendixname{APPENDIX}%
+ \bibpunct{[}{]}{,}{n}{}{,}%
+ \def\bibsection{%
+ \par
+ \onecolumngrid@push
+ \begingroup
+ \baselineskip26\p@
+ \bib@device{\textwidth}{245.5\p@}%
+ \endgroup
+ \nobreak\@nobreaktrue
+ \addvspace{19\p@}%
+ \par
+ \onecolumngrid@pop
+ }%
+\def\bib@device#1#2{%
+\hb@xt@#1{%
+ \hfil
+ \phantomsection
+ \addcontentsline {toc}{section}{\protect\numberline{}\refname}%
+ \hb@xt@#2{%
+ \skip@\z@\@plus-1fil\relax
+ \leaders\hrule height.25 \p@ depth.25 \p@ \hskip\z@\@plus1fil
+\hskip\skip@
+\hskip\z@\@plus0.125fil\leaders\hrule height.375\p@ depth.375\p@ \hskip\z@\@plus0.75fil \hskip\z@\@plus0.125fil
+\hskip\skip@
+\hskip\z@\@plus0.25 fil\leaders\hrule height.5 \p@ depth.5 \p@ \hskip\z@\@plus0.5 fil \hskip\z@\@plus0.25 fil
+\hskip\skip@
+\hskip\z@\@plus0.375fil\leaders\hrule height.625\p@ depth.625\p@ \hskip\z@\@plus0.25fil \hskip\z@\@plus0.375fil
+ }%
+\hfil
+}%
+}%
+\let\bibpreamble\@empty
+\bibsep\z@\relax
+\def\newblock{\ }%
+ \def\bibfont{%
+ \small
+ }%
+\newenvironment{theindex}{%
+ \columnseprule \z@
+ \columnsep 35\p@
+ \c@secnumdepth-\maxdimen
+ \onecolumngrid@push
+ \section{\indexname}%
+ \thispagestyle{plain}%
+ \parindent\z@
+ \parskip\z@ plus.3\p@\relax
+ \let\item\@idxitem
+ \onecolumngrid@pop
+}{%
+}%
+\def\@idxitem{\par\hangindent 40\p@}
+\def\subitem{\par\hangindent 40\p@ \hspace*{20\p@}}
+\def\subsubitem{\par\hangindent 40\p@ \hspace*{30\p@}}
+\def\indexspace{\par \vskip 10\p@ plus5\p@ minus3\p@\relax}
+\def\journal@pra{pra}%
+\def\journal@prb{prb}%
+\def\journal@prc{prc}%
+\def\journal@prd{prd}%
+\def\journal@pre{pre}%
+\def\journal@prl{prl}%
+\def\journal@prstab{prstab}%
+\def\journal@rmp{rmp}%
+\@ifx{\@journal\journal@pra}{%
+}{}%
+\@ifx{\@journal\journal@prb}{%
+ \@ifxundefined\bibnotes@sw{\@booleantrue\bibnotes@sw}{}%
+ \bibpunct{}{}{,}{s}{}{\textsuperscript{,}}%
+ \def\@onlinecite#1{\begingroup\let\@cite\NAT@citenum\citealp{#1}\endgroup}%
+ \appdef\class@documenthook{%
+ \@ifxundefined\place@bibnumber{%
+ \let\place@bibnumber\place@bibnumber@sup
+ }{}%
+ }%
+}{}%
+\@ifx{\@journal\journal@prc}{%
+}{}%
+\@ifx{\@journal\journal@prd}{%
+}{}%
+\@ifx{\@journal\journal@pre}{%
+}{}%
+\@ifx{\@journal\journal@prl}{%
+ \@ifxundefined\bibnotes@sw{\@booleantrue\bibnotes@sw}{}%
+ \@booleanfalse\acknowledgments@sw
+ \def\bibsection{%
+ \par
+ \begingroup
+ \baselineskip26\p@
+ \bib@device{\hsize}{72\p@}%
+ \endgroup
+ \nobreak\@nobreaktrue
+ \addvspace{19\p@}%
+ }%
+ \@ifxundefined\lengthcheck@sw{\@booleanfalse\lengthcheck@sw}{}%
+ \lengthcheck@sw{%
+ \RequirePackage{times}%
+ }{%
+ }%
+ \c@secnumdepth=-\maxdimen
+ \appdef\set@typesize@hook{%
+ \@ifnum{\@pointsize=10\relax}{%
+ \lengthcheck@sw{%
+ \def\large{%
+ \@setfontsize\large{12.5}{14\p@}%
+ }%
+ \def\normalsize{%
+ \@setfontsize\normalsize{10.5}\@xiipt
+ \abovedisplayskip 6\p@ \@plus6\p@ \@minus5\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \abovedisplayskip
+ \belowdisplayshortskip \abovedisplayskip
+ \let\@listi\@listI
+ }%
+ \def\small{%
+ \@setfontsize\small{9.5}\@xipt
+ \abovedisplayskip 5\p@ \@plus5\p@ \@minus4\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \abovedisplayskip
+ \belowdisplayshortskip \abovedisplayskip
+ \let\@listi\@listI
+ }%
+ \DeclareMathSizes{12.5}{12.5}{9}{6}%
+ \DeclareMathSizes{10.5}{10.5}{7.5}{5}%
+ \DeclareMathSizes{9.5}{9.5}{7.0}{5}%
+ }{%
+ \def\normalsize{%
+ \@setfontsize\normalsize\@xpt\@xiipt
+ \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \abovedisplayskip
+ \belowdisplayshortskip \abovedisplayskip
+ \let\@listi\@listI
+ }%
+ }%
+ }{}%
+ }%
+ \@ifnum{\@pointsize=10\relax}{%
+ \textheight = 694.0\p@
+ }{}%
+}{}%
+\@ifx{\@journal\journal@prstab}{%
+}{}%
+\@ifx{\@journal\journal@rmp}{\input{\@journal\substyle@ext}}{}%
+\@ifxundefined\footinbib@sw{\@booleantrue\footinbib@sw}{}%
+\appdef\class@documenthook{%
+ \@ifxundefined\place@bibnumber{%
+ \let\place@bibnumber\place@bibnumber@inl
+ }{}%
+ \@ifxundefined\@bibstyle{%
+ \def\@bibstyle{apsrev}%
+ }{}%
+}%
+\endinput
+%%
+%% End of file `aps.rtx'.
diff --git a/obsolete/macros/latex/contrib/revtex4-0/apsrev.bst b/obsolete/macros/latex/contrib/revtex4-0/apsrev.bst
new file mode 100644
index 0000000000..0d88756890
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-0/apsrev.bst
@@ -0,0 +1,2380 @@
+%%
+%% This is file `apsrev.bst',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% merlin.mbs (with options: `head,ay,nat,seq-no,nm-init,ed-au,nmlm,x10,x0,m10,m0,nmft,nmft-def,fnm-def,nmfted,lab,lab-def,keyxyr,yr-par,note-yr,tit-it,jtit-x,jttl-rm,thtit-x,trtit-x,vol-bf,vnum-x,volp-com,jpg-1,num-xser,jnm-x,pub-date,pre-pub,isbn,issn,edby,blk-com,pp,ed,abr,ednx,ord,jabr,revdata,eprint,url,url-blk,misc-simple,bibinfo,nfss,{}')
+%% physjour.mbs (with options: `ay,nat,seq-no,nm-init,ed-au,nmlm,x10,x0,m10,m0,nmft,nmft-def,fnm-def,nmfted,lab,lab-def,keyxyr,yr-par,note-yr,tit-it,jtit-x,jttl-rm,thtit-x,trtit-x,vol-bf,vnum-x,volp-com,jpg-1,num-xser,jnm-x,pub-date,pre-pub,isbn,issn,edby,blk-com,pp,ed,abr,ednx,ord,jabr,revdata,eprint,url,url-blk,misc-simple,bibinfo,nfss,{}')
+%% geojour.mbs (with options: `ay,nat,seq-no,nm-init,ed-au,nmlm,x10,x0,m10,m0,nmft,nmft-def,fnm-def,nmfted,lab,lab-def,keyxyr,yr-par,note-yr,tit-it,jtit-x,jttl-rm,thtit-x,trtit-x,vol-bf,vnum-x,volp-com,jpg-1,num-xser,jnm-x,pub-date,pre-pub,isbn,issn,edby,blk-com,pp,ed,abr,ednx,ord,jabr,revdata,eprint,url,url-blk,misc-simple,bibinfo,nfss,{}')
+%% photjour.mbs (with options: `ay,nat,seq-no,nm-init,ed-au,nmlm,x10,x0,m10,m0,nmft,nmft-def,fnm-def,nmfted,lab,lab-def,keyxyr,yr-par,note-yr,tit-it,jtit-x,jttl-rm,thtit-x,trtit-x,vol-bf,vnum-x,volp-com,jpg-1,num-xser,jnm-x,pub-date,pre-pub,isbn,issn,edby,blk-com,pp,ed,abr,ednx,ord,jabr,revdata,eprint,url,url-blk,misc-simple,bibinfo,nfss,{}')
+%% merlin.mbs (with options: `tail,ay,nat,seq-no,nm-init,ed-au,nmlm,x10,x0,m10,m0,nmft,nmft-def,fnm-def,nmfted,lab,lab-def,keyxyr,yr-par,note-yr,tit-it,jtit-x,jttl-rm,thtit-x,trtit-x,vol-bf,vnum-x,volp-com,jpg-1,num-xser,jnm-x,pub-date,pre-pub,isbn,issn,edby,blk-com,pp,ed,abr,ednx,ord,jabr,revdata,eprint,url,url-blk,misc-simple,bibinfo,nfss,{}')
+%% ----------------------------------------
+%% *** REVTeX-compatible apsrev.bst 1702 ***
+%%
+%% Copyright 1994-2000 Patrick W Daly
+ % ===============================================================
+ % IMPORTANT NOTICE:
+ % This bibliographic style (bst) file has been generated from one or
+ % more master bibliographic style (mbs) files, listed above.
+ %
+ % This generated file can be redistributed and/or modified under the terms
+ % of the LaTeX Project Public License Distributed from CTAN
+ % archives in directory macros/latex/base/lppl.txt; either
+ % version 1 of the License, or any later version.
+ % ===============================================================
+ % Name and version information of the main mbs file:
+ % \ProvidesFile{merlin.mbs}[2000/05/04 4.01 (PWD, AO, DPC)]
+ % For use with BibTeX version 0.99a or later
+ %-------------------------------------------------------------------
+ % This bibliography style file is intended for texts in ENGLISH
+ % This is an author-year citation style bibliography. As such, it is
+ % non-standard LaTeX, and requires a special package file to function properly.
+ % Such a package is natbib.sty by Patrick W. Daly
+ % The form of the \bibitem entries is
+ % \bibitem[Jones et al.(1990)]{key}...
+ % \bibitem[Jones et al.(1990)Jones, Baker, and Smith]{key}...
+ % The essential feature is that the label (the part in brackets) consists
+ % of the author names, as they should appear in the citation, with the year
+ % in parentheses following. There must be no space before the opening
+ % parenthesis!
+ % With natbib v5.3, a full list of authors may also follow the year.
+ % In natbib.sty, it is possible to define the type of enclosures that is
+ % really wanted (brackets or parentheses), but in either case, there must
+ % be parentheses in the label.
+ % The \cite command functions as follows:
+ % \citet{key} ==>> Jones et al. (1990)
+ % \citet*{key} ==>> Jones, Baker, and Smith (1990)
+ % \citep{key} ==>> (Jones et al., 1990)
+ % \citep*{key} ==>> (Jones, Baker, and Smith, 1990)
+ % \citep[chap. 2]{key} ==>> (Jones et al., 1990, chap. 2)
+ % \citep[e.g.][]{key} ==>> (e.g. Jones et al., 1990)
+ % \citep[e.g.][p. 32]{key} ==>> (e.g. Jones et al., p. 32)
+ % \citeauthor{key} ==>> Jones et al.
+ % \citeauthor*{key} ==>> Jones, Baker, and Smith
+ % \citeyear{key} ==>> 1990
+ %---------------------------------------------------------------------
+
+ENTRY
+ { address
+ archive
+ author
+ booktitle
+ chapter
+ collaboration
+ edition
+ editor
+ eid
+ eprint
+ howpublished
+ institution
+ isbn
+ issn
+ journal
+ key
+ month
+ note
+ number
+ numpages
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ url
+ volume
+ year
+ }
+ {}
+ { label extra.label sort.label short.list }
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+STRINGS { s t}
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ "\newblock " write$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+FUNCTION {add.blank}
+{ " " * before.all 'output.state :=
+}
+
+FUNCTION {date.block}
+{
+ skip$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "\emph{" swap$ * "}" * }
+ if$
+}
+FUNCTION {bolden}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "\textbf{" swap$ * "}" * }
+ if$
+}
+FUNCTION {bib.name.font}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "\bibnamefont{" swap$ * "}" * }
+ if$
+}
+FUNCTION {bib.fname.font}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "\bibfnamefont{" swap$ * "}" * }
+ if$
+}
+FUNCTION {cite.name.font}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "\citenamefont{" swap$ * "}" * }
+ if$
+}
+FUNCTION {tie.or.space.prefix}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$
+}
+
+FUNCTION {capitalize}
+{ "u" change.case$ "t" change.case$ }
+
+FUNCTION {space.word}
+{ " " swap$ * " " * }
+ % Here are the language-specific definitions for explicit words.
+ % Each function has a name bbl.xxx where xxx is the English word.
+ % The language selected here is ENGLISH
+FUNCTION {bbl.and}
+{ "and"}
+
+FUNCTION {bbl.etal}
+{ "et~al." }
+
+FUNCTION {bbl.editors}
+{ "eds." }
+
+FUNCTION {bbl.editor}
+{ "ed." }
+
+FUNCTION {bbl.edby}
+{ "edited by" }
+
+FUNCTION {bbl.edition}
+{ "ed." }
+
+FUNCTION {bbl.volume}
+{ "vol." }
+
+FUNCTION {bbl.of}
+{ "of" }
+
+FUNCTION {bbl.number}
+{ "no." }
+
+FUNCTION {bbl.nr}
+{ "no." }
+
+FUNCTION {bbl.in}
+{ "in" }
+
+FUNCTION {bbl.pages}
+{ "pp." }
+
+FUNCTION {bbl.page}
+{ "p." }
+
+FUNCTION {bbl.eidpp}
+{ "pages" }
+
+FUNCTION {bbl.chapter}
+{ "chap." }
+
+FUNCTION {bbl.techrep}
+{ "Tech. Rep." }
+
+FUNCTION {bbl.mthesis}
+{ "Master's thesis" }
+
+FUNCTION {bbl.phdthesis}
+{ "Ph.D. thesis" }
+
+FUNCTION {bbl.first}
+{ "1st" }
+
+FUNCTION {bbl.second}
+{ "2nd" }
+
+FUNCTION {bbl.third}
+{ "3rd" }
+
+FUNCTION {bbl.fourth}
+{ "4th" }
+
+FUNCTION {bbl.fifth}
+{ "5th" }
+
+FUNCTION {bbl.st}
+{ "st" }
+
+FUNCTION {bbl.nd}
+{ "nd" }
+
+FUNCTION {bbl.rd}
+{ "rd" }
+
+FUNCTION {bbl.th}
+{ "th" }
+
+MACRO {jan} {"Jan."}
+
+MACRO {feb} {"Feb."}
+
+MACRO {mar} {"Mar."}
+
+MACRO {apr} {"Apr."}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"Jun."}
+
+MACRO {jul} {"Jul."}
+
+MACRO {aug} {"Aug."}
+
+MACRO {sep} {"Sep."}
+
+MACRO {oct} {"Oct."}
+
+MACRO {nov} {"Nov."}
+
+MACRO {dec} {"Dec."}
+
+FUNCTION {eng.ord}
+{ duplicate$ "1" swap$ *
+ #-2 #1 substring$ "1" =
+ { bbl.th * }
+ { duplicate$ #-1 #1 substring$
+ duplicate$ "1" =
+ { pop$ bbl.st * }
+ { duplicate$ "2" =
+ { pop$ bbl.nd * }
+ { "3" =
+ { bbl.rd * }
+ { bbl.th * }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ %-------------------------------------------------------------------
+
+ % Begin module:
+
+
+ % \ProvidesFile{physjour.mbs}[1999/10/05 2.1 (PWD)]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+MACRO {aa}{"Astron. \& Astrophys."}
+
+
+MACRO {aasup}{"Astron. \& Astrophys. Suppl. Ser."}
+
+
+MACRO {aj} {"Astron. J."}
+
+
+MACRO {aph} {"Acta Phys."}
+
+MACRO {advp} {"Adv. Phys."}
+
+MACRO {ajp} {"Amer. J. Phys."}
+
+MACRO {ajm} {"Amer. J. Math."}
+
+MACRO {amsci} {"Amer. Sci."}
+
+MACRO {anofd} {"Ann. Fluid Dyn."}
+
+MACRO {am} {"Ann. Math."}
+
+MACRO {ap} {"Ann. Phys. (NY)"}
+
+MACRO {adp} {"Ann. Phys. (Leipzig)"}
+
+MACRO {ao} {"Appl. Opt."}
+
+MACRO {apl} {"Appl. Phys. Lett."}
+
+MACRO {app} {"Astroparticle Phys."}
+
+MACRO {apj} {"Astrophys. J."}
+
+
+MACRO {apjsup} {"Astrophys. J. Suppl."}
+
+
+MACRO {apss} {"Astrophys. Space Sci."}
+
+
+MACRO {araa} {"Ann. Rev. Astron. Astrophys."}
+
+
+MACRO {baas} {"Bull. Amer. Astron. Soc."}
+
+
+MACRO {baps} {"Bull. Amer. Phys. Soc."}
+
+MACRO {cmp} {"Comm. Math. Phys."}
+
+MACRO {cpam} {"Commun. Pure Appl. Math."}
+
+MACRO {cppcf} {"Comm. Plasma Phys. \& Controlled Fusion"}
+
+MACRO {cpc} {"Comp. Phys. Comm."}
+
+MACRO {cqg} {"Class. Quant. Grav."}
+
+MACRO {cra} {"C. R. Acad. Sci. A"}
+
+MACRO {fed} {"Fusion Eng. \& Design"}
+
+MACRO {ft} {"Fusion Tech."}
+
+MACRO {grg} {"Gen. Relativ. Gravit."}
+
+MACRO {ieeens} {"IEEE Trans. Nucl. Sci."}
+
+MACRO {ieeeps} {"IEEE Trans. Plasma Sci."}
+
+MACRO {ijimw} {"Interntl. J. Infrared \& Millimeter Waves"}
+
+MACRO {ip} {"Infrared Phys."}
+
+MACRO {irp} {"Infrared Phys."}
+
+MACRO {jap} {"J. Appl. Phys."}
+
+MACRO {jasa} {"J. Acoust. Soc. America"}
+
+MACRO {jcp} {"J. Comp. Phys."}
+
+MACRO {jetp} {"Sov. Phys.--JETP"}
+
+MACRO {jfe} {"J. Fusion Energy"}
+
+MACRO {jfm} {"J. Fluid Mech."}
+
+MACRO {jmp} {"J. Math. Phys."}
+
+MACRO {jne} {"J. Nucl. Energy"}
+
+MACRO {jnec} {"J. Nucl. Energy, C: Plasma Phys., Accelerators, Thermonucl. Res."}
+
+MACRO {jnm} {"J. Nucl. Mat."}
+
+MACRO {jpc} {"J. Phys. Chem."}
+
+MACRO {jpp} {"J. Plasma Phys."}
+
+MACRO {jpsj} {"J. Phys. Soc. Japan"}
+
+MACRO {jsi} {"J. Sci. Instrum."}
+
+MACRO {jvst} {"J. Vac. Sci. \& Tech."}
+
+MACRO {nat} {"Nature"}
+
+MACRO {nature} {"Nature"}
+
+
+
+MACRO {nedf} {"Nucl. Eng. \& Design/Fusion"}
+
+MACRO {nf} {"Nucl. Fusion"}
+
+MACRO {nim} {"Nucl. Inst. \& Meth."}
+
+MACRO {nimpr} {"Nucl. Inst. \& Meth. in Phys. Res."}
+
+MACRO {np} {"Nucl. Phys."}
+
+MACRO {npb} {"Nucl. Phys. B"}
+
+MACRO {nt/f} {"Nucl. Tech./Fusion"}
+
+MACRO {npbpc} {"Nucl. Phys. B (Proc. Suppl.)"}
+
+MACRO {inc} {"Nuovo Cimento"}
+
+MACRO {nc} {"Nuovo Cimento"}
+
+MACRO {pf} {"Phys. Fluids"}
+
+MACRO {pfa} {"Phys. Fluids A: Fluid Dyn."}
+
+MACRO {pfb} {"Phys. Fluids B: Plasma Phys."}
+
+MACRO {pl} {"Phys. Lett."}
+
+MACRO {pla} {"Phys. Lett. A"}
+
+MACRO {plb} {"Phys. Lett. B"}
+
+MACRO {prep} {"Phys. Rep."}
+
+MACRO {pnas} {"Proc. Nat. Acad. Sci. USA"}
+
+MACRO {pp} {"Phys. Plasmas"}
+
+MACRO {ppcf} {"Plasma Phys. \& Controlled Fusion"}
+
+MACRO {phitrsl} {"Philos. Trans. Roy. Soc. London"}
+
+MACRO {prl} {"Phys. Rev. Lett."}
+
+MACRO {pr} {"Phys. Rev."}
+
+MACRO {physrev} {"Phys. Rev."}
+
+MACRO {pra} {"Phys. Rev. A"}
+
+MACRO {prb} {"Phys. Rev. B"}
+
+MACRO {prc} {"Phys. Rev. C"}
+
+MACRO {prd} {"Phys. Rev. D"}
+
+MACRO {pre} {"Phys. Rev. E"}
+
+MACRO {ps} {"Phys. Scripta"}
+
+MACRO {procrsl} {"Proc. Roy. Soc. London"}
+
+MACRO {rmp} {"Rev. Mod. Phys."}
+
+MACRO {rsi} {"Rev. Sci. Inst."}
+
+MACRO {science} {"Science"}
+
+
+MACRO {sciam} {"Sci. Am."}
+
+MACRO {sam} {"Stud. Appl. Math."}
+
+MACRO {sjpp} {"Sov. J. Plasma Phys."}
+
+MACRO {spd} {"Sov. Phys.--Doklady"}
+
+MACRO {sptp} {"Sov. Phys.--Tech. Phys."}
+
+MACRO {spu} {"Sov. Phys.--Uspeki"}
+
+MACRO {st} {"Sky and Telesc."}
+
+
+
+
+
+ % End module: physjour.mbs
+
+
+
+ %-------------------------------------------------------------------
+ % Begin module:
+ % \ProvidesFile{geojour.mbs}[1999/11/16 2.0g (PWD)]
+MACRO {aisr} {"Adv. Space Res."}
+MACRO {ag} {"Ann. Geophys."}
+MACRO {anigeo} {"Ann. Geofis."}
+MACRO {angl} {"Ann. Glaciol."}
+MACRO {andmet} {"Ann. d. Meteor."}
+MACRO {andgeo} {"Ann. d. Geophys."}
+MACRO {andphy} {"Ann. Phys.-Paris"}
+MACRO {afmgb} {"Arch. Meteor. Geophys. Bioklimatol."}
+MACRO {atph} {"Atm\'osphera"}
+MACRO {aao} {"Atmos. Ocean"}
+MACRO {ass}{"Astrophys. Space Sci."}
+MACRO {atenv} {"Atmos. Environ."}
+MACRO {aujag} {"Aust. J. Agr. Res."}
+MACRO {aumet} {"Aust. Meteorol. Mag."}
+MACRO {blmet} {"Bound.-Lay. Meteorol."}
+MACRO {bams} {"Bull. Amer. Meteorol. Soc."}
+MACRO {cch} {"Clim. Change"}
+MACRO {cdyn} {"Clim. Dynam."}
+MACRO {cbul} {"Climatol. Bull."}
+MACRO {cap} {"Contrib. Atmos. Phys."}
+MACRO {dsr} {"Deep-Sea Res."}
+MACRO {dhz} {"Dtsch. Hydrogr. Z."}
+MACRO {dao} {"Dynam. Atmos. Oceans"}
+MACRO {eco} {"Ecology"}
+MACRO {empl}{"Earth, Moon and Planets"}
+MACRO {envres} {"Environ. Res."}
+MACRO {envst} {"Environ. Sci. Technol."}
+MACRO {ecms} {"Estuarine Coastal Mar. Sci."}
+MACRO {expa}{"Exper. Astron."}
+MACRO {geoint} {"Geofis. Int."}
+MACRO {geopub} {"Geofys. Publ."}
+MACRO {geogeo} {"Geol. Geofiz."}
+MACRO {gafd} {"Geophys. Astrophys. Fluid Dyn."}
+MACRO {gfd} {"Geophys. Fluid Dyn."}
+MACRO {geomag} {"Geophys. Mag."}
+MACRO {georl} {"Geophys. Res. Lett."}
+MACRO {grl} {"Geophys. Res. Lett."}
+MACRO {ga} {"Geophysica"}
+MACRO {gs} {"Geophysics"}
+MACRO {ieeetap} {"IEEE Trans. Antenn. Propag."}
+MACRO {ijawp} {"Int. J. Air Water Pollut."}
+MACRO {ijc} {"Int. J. Climatol."}
+MACRO {ijrs} {"Int. J. Remote Sens."}
+MACRO {jam} {"J. Appl. Meteorol."}
+MACRO {jaot} {"J. Atmos. Ocean. Technol."}
+MACRO {jatp} {"J. Atmos. Terr. Phys."}
+MACRO {jce} {"J. Climate"}
+MACRO {jcam} {"J. Climate Appl. Meteor."}
+MACRO {jcm} {"J. Climate Meteor."}
+MACRO {jcy} {"J. Climatol."}
+MACRO {jgr} {"J. Geophys. Res."}
+MACRO {jga} {"J. Glaciol."}
+MACRO {jh} {"J. Hydrol."}
+MACRO {jmr} {"J. Mar. Res."}
+MACRO {jmrj} {"J. Meteor. Res. Japan"}
+MACRO {jm} {"J. Meteor."}
+MACRO {jpo} {"J. Phys. Oceanogr."}
+MACRO {jra} {"J. Rech. Atmos."}
+MACRO {jaes} {"J. Aeronaut. Sci."}
+MACRO {japca} {"J. Air Pollut. Control Assoc."}
+MACRO {jas} {"J. Atmos. Sci."}
+MACRO {jmts} {"J. Mar. Technol. Soc."}
+MACRO {jmsj} {"J. Meteorol. Soc. Japan"}
+MACRO {josj} {"J. Oceanogr. Soc. Japan"}
+MACRO {jwm} {"J. Wea. Mod."}
+MACRO {lao} {"Limnol. Oceanogr."}
+MACRO {mwl} {"Mar. Wea. Log"}
+MACRO {mau} {"Mausam"}
+MACRO {meteor} {"``Meteor'' Forschungsergeb."}
+MACRO {map} {"Meteorol. Atmos. Phys."}
+MACRO {metmag} {"Meteor. Mag."}
+MACRO {metmon} {"Meteor. Monogr."}
+MACRO {metrun} {"Meteor. Rundsch."}
+MACRO {metzeit} {"Meteor. Z."}
+MACRO {metgid} {"Meteor. Gidrol."}
+MACRO {mwr} {"Mon. Weather Rev."}
+MACRO {nwd} {"Natl. Weather Dig."}
+MACRO {nzjmfr} {"New Zeal. J. Mar. Freshwater Res."}
+MACRO {npg} {"Nonlin. Proc. Geophys."}
+MACRO {om} {"Oceanogr. Meteorol."}
+MACRO {ocac} {"Oceanol. Acta"}
+MACRO {oceanus} {"Oceanus"}
+MACRO {paleoc} {"Paleoceanography"}
+MACRO {pce} {"Phys. Chem. Earth"}
+MACRO {pmg} {"Pap. Meteor. Geophys."}
+MACRO {ppom} {"Pap. Phys. Oceanogr. Meteor."}
+MACRO {physzeit} {"Phys. Z."}
+MACRO {pps} {"Planet. Space Sci."}
+MACRO {pss} {"Planet. Space Sci."}
+MACRO {pag} {"Pure Appl. Geophys."}
+MACRO {qjrms} {"Quart. J. Roy. Meteorol. Soc."}
+MACRO {quatres} {"Quat. Res."}
+MACRO {rsci} {"Radio Sci."}
+MACRO {rse} {"Remote Sens. Environ."}
+MACRO {rgeo} {"Rev. Geophys."}
+MACRO {rgsp} {"Rev. Geophys. Space Phys."}
+MACRO {rdgeo} {"Rev. Geofis."}
+MACRO {revmeta} {"Rev. Meteorol."}
+MACRO {sgp}{"Surveys in Geophys."}
+MACRO {sp} {"Solar Phys."}
+MACRO {ssr} {"Space Sci. Rev."}
+MACRO {tellus} {"Tellus"}
+MACRO {tac} {"Theor. Appl. Climatol."}
+MACRO {tagu} {"Trans. Am. Geophys. Union (EOS)"}
+MACRO {wrr} {"Water Resour. Res."}
+MACRO {weather} {"Weather"}
+MACRO {wafc} {"Weather Forecast."}
+MACRO {ww} {"Weatherwise"}
+MACRO {wmob} {"WMO Bull."}
+MACRO {zeitmet} {"Z. Meteorol."}
+ % End module: geojour.mbs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ %-------------------------------------------------------------------
+
+ % Begin module:
+
+
+ % \ProvidesFile{photjour.mbs}[1999/02/24 2.0b (PWD)]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+MACRO {appopt} {"Appl. Opt."}
+
+MACRO {bell} {"Bell Syst. Tech. J."}
+
+MACRO {ell} {"Electron. Lett."}
+
+MACRO {jasp} {"J. Appl. Spectr."}
+
+MACRO {jqe} {"IEEE J. Quantum Electron."}
+
+MACRO {jlwt} {"J. Lightwave Technol."}
+
+MACRO {jmo} {"J. Mod. Opt."}
+
+MACRO {josa} {"J. Opt. Soc. America"}
+
+MACRO {josaa} {"J. Opt. Soc. Amer.~A"}
+
+MACRO {josab} {"J. Opt. Soc. Amer.~B"}
+
+MACRO {jdp} {"J. Phys. (Paris)"}
+
+MACRO {oc} {"Opt. Commun."}
+
+MACRO {ol} {"Opt. Lett."}
+
+MACRO {phtl} {"IEEE Photon. Technol. Lett."}
+
+MACRO {pspie} {"Proc. Soc. Photo-Opt. Instrum. Eng."}
+
+MACRO {sse} {"Solid-State Electron."}
+
+MACRO {sjot} {"Sov. J. Opt. Technol."}
+
+MACRO {sjqe} {"Sov. J. Quantum Electron."}
+
+MACRO {sleb} {"Sov. Phys.--Leb. Inst. Rep."}
+
+MACRO {stph} {"Sov. Phys.--Techn. Phys."}
+
+MACRO {stphl} {"Sov. Techn. Phys. Lett."}
+
+MACRO {vr} {"Vision Res."}
+
+MACRO {zph} {"Z. f. Physik"}
+
+MACRO {zphb} {"Z. f. Physik~B"}
+
+MACRO {zphd} {"Z. f. Physik~D"}
+
+MACRO {CLEO} {"CLEO"}
+
+MACRO {ASSL} {"Adv. Sol.-State Lasers"}
+
+MACRO {OSA} {"OSA"}
+
+
+
+
+ % End module: photjour.mbs
+
+
+
+%% Copyright 1994-2000 Patrick W Daly
+MACRO {acmcs} {"ACM Comput. Surv."}
+
+MACRO {acta} {"Acta Inf."}
+
+MACRO {cacm} {"Commun. ACM"}
+
+MACRO {ibmjrd} {"IBM J. Res. Dev."}
+
+MACRO {ibmsj} {"IBM Syst.~J."}
+
+MACRO {ieeese} {"IEEE Trans. Software Eng."}
+
+MACRO {ieeetc} {"IEEE Trans. Comput."}
+
+MACRO {ieeetcad}
+ {"IEEE Trans. Comput. Aid. Des."}
+
+MACRO {ipl} {"Inf. Process. Lett."}
+
+MACRO {jacm} {"J.~ACM"}
+
+MACRO {jcss} {"J.~Comput. Syst. Sci."}
+
+MACRO {scp} {"Sci. Comput. Program."}
+
+MACRO {sicomp} {"SIAM J. Comput."}
+
+MACRO {tocs} {"ACM Trans. Comput. Syst."}
+
+MACRO {tods} {"ACM Trans. Database Syst."}
+
+MACRO {tog} {"ACM Trans. Graphic."}
+
+MACRO {toms} {"ACM Trans. Math. Software"}
+
+MACRO {toois} {"ACM Trans. Office Inf. Syst."}
+
+MACRO {toplas} {"ACM Trans. Progr. Lang. Syst."}
+
+MACRO {tcs} {"Theor. Comput. Sci."}
+
+FUNCTION {bibinfo.check}
+{ swap$
+ duplicate$ missing$
+ {
+ pop$ pop$
+ ""
+ }
+ { duplicate$ empty$
+ {
+ swap$ pop$
+ }
+ { swap$
+ "\bibinfo{" swap$ * "}{" * swap$ * "}" *
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {bibinfo.warn}
+{ swap$
+ duplicate$ missing$
+ {
+ swap$ "missing " swap$ * " in " * cite$ * warning$ pop$
+ ""
+ }
+ { duplicate$ empty$
+ {
+ swap$ "empty " swap$ * " in " * cite$ * warning$
+ }
+ { swap$
+ "\bibinfo{" swap$ * "}{" * swap$ * "}" *
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {format.eprint}
+{ eprint duplicate$ empty$
+ 'skip$
+ { "\eprint"
+ archive empty$
+ 'skip$
+ { "[" * archive * "]" * }
+ if$
+ "{" * swap$ * "}" *
+ }
+ if$
+}
+FUNCTION {format.url}
+{ url empty$
+ { "" }
+ { "\urlprefix\url{" url * "}" * }
+ if$
+}
+
+STRINGS { bibinfo}
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 'bibinfo :=
+ duplicate$ empty$ 'skip$ {
+ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{f.}" format.name$ duplicate$ empty$ 'skip$
+ { tie.or.space.prefix bib.fname.font swap$ * }
+ if$
+ s nameptr
+ "{vv~}{ll}" format.name$ bib.name.font *
+ s nameptr
+ "{jj}" format.name$ duplicate$ empty$ 'skip$
+ { bib.fname.font ", " swap$ * }
+ if$
+ *
+ bibinfo bibinfo.check
+ 't :=
+ nameptr #1 >
+ {
+ nameptr #0
+ #10 +
+ #1 + =
+ numnames #0
+ #10 +
+ > and
+ { "others" 't :=
+ #1 'namesleft := }
+ 'skip$
+ if$
+ namesleft #1 >
+ { ", " * t * }
+ {
+ numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ t "others" =
+ {
+ " " * bbl.etal bib.name.font *
+ }
+ {
+ bbl.and
+ bib.name.font
+ space.word * t *
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ } if$
+}
+FUNCTION {format.names.ed}
+{
+ format.names
+}
+FUNCTION {format.key}
+{ empty$
+ { key field.or.null }
+ { "" }
+ if$
+}
+
+FUNCTION {format.authors}
+{ author "author" format.names
+ duplicate$ empty$ 'skip$
+ { collaboration "collaboration" bibinfo.check
+ duplicate$ empty$ 'skip$
+ { " (" swap$ * ")" * }
+ if$
+ *
+ }
+ if$
+}
+FUNCTION {get.bbl.editor}
+{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ }
+
+FUNCTION {format.editors}
+{ editor "editor" format.names duplicate$ empty$ 'skip$
+ {
+ "," *
+ " " *
+ get.bbl.editor
+ *
+ }
+ if$
+}
+FUNCTION {format.isbn}
+{ isbn "isbn" bibinfo.check
+ duplicate$ empty$ 'skip$
+ {
+ "ISBN " swap$ *
+ }
+ if$
+}
+
+FUNCTION {format.issn}
+{ issn "issn" bibinfo.check
+ duplicate$ empty$ 'skip$
+ {
+ "ISSN " swap$ *
+ }
+ if$
+}
+
+FUNCTION {format.note}
+{
+ note empty$
+ { "" }
+ { note #1 #1 substring$
+ duplicate$ "{" =
+ 'skip$
+ { output.state mid.sentence =
+ { "l" }
+ { "u" }
+ if$
+ change.case$
+ }
+ if$
+ note #2 global.max$ substring$ * "note" bibinfo.check
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title
+ duplicate$ empty$
+ { skip$ }
+ { "t" change.case$ }
+ if$
+ "title" bibinfo.check
+ duplicate$ empty$ 'skip$
+ {
+ emphasize
+ }
+ if$
+}
+
+FUNCTION {format.full.names}
+{'s :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{vv~}{ll}" format.name$
+ 't :=
+ nameptr #1 >
+ {
+ nameptr #0
+ #10 +
+ #1 + =
+ numnames #0
+ #10 +
+ > and
+ { "others" 't :=
+ #1 'namesleft := }
+ 'skip$
+ if$
+ namesleft #1 >
+ { ", " * t * }
+ {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ t "others" =
+ {
+ " " * bbl.etal *
+ cite.name.font
+ }
+ {
+ numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ bbl.and
+ space.word * t *
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ t "others" =
+ 'skip$
+ { cite.name.font }
+ if$
+}
+
+FUNCTION {author.editor.key.full}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.full.names }
+ if$
+ }
+ { author format.full.names }
+ if$
+}
+
+FUNCTION {author.key.full}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { author format.full.names }
+ if$
+}
+
+FUNCTION {editor.key.full}
+{ editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.full.names }
+ if$
+}
+
+FUNCTION {make.full.names}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.full
+ { type$ "proceedings" =
+ 'editor.key.full
+ 'author.key.full
+ if$
+ }
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+ "\bibitem[{" write$
+ label write$
+ ")" make.full.names duplicate$ short.list =
+ { pop$ }
+ { * }
+ if$
+ "}]{" * write$
+ cite$ write$
+ "}" write$
+ newline$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {n.dashify}
+{
+ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {word.in}
+{ bbl.in
+ " " * }
+
+FUNCTION {format.date}
+{ year "year" bibinfo.check duplicate$ empty$
+ {
+ "empty year in " cite$ * "; set to ????" * warning$
+ pop$ "????"
+ }
+ 'skip$
+ if$
+ extra.label *
+ before.all 'output.state :=
+ " (" swap$ * ")" *
+}
+FUNCTION {format.date.misc}
+{
+ year empty$ 'skip$ {
+ format.date "year" output.check
+ } if$
+}
+FUNCTION {format.btitle}
+{ title "title" bibinfo.check
+ duplicate$ empty$ 'skip$
+ {
+ emphasize
+ }
+ if$
+}
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { bbl.volume volume tie.or.space.prefix
+ "volume" bibinfo.check * *
+ series "series" bibinfo.check
+ duplicate$ empty$ 'pop$
+ { swap$ bbl.of space.word * swap$
+ emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { series empty$
+ { number "number" bibinfo.check }
+ { output.state mid.sentence =
+ { bbl.number }
+ { bbl.number capitalize }
+ if$
+ number tie.or.space.prefix "number" bibinfo.check * *
+ bbl.in space.word *
+ series "series" bibinfo.check *
+ }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+FUNCTION {is.num}
+{ chr.to.int$
+ duplicate$ "0" chr.to.int$ < not
+ swap$ "9" chr.to.int$ > not and
+}
+
+FUNCTION {extract.num}
+{ duplicate$ 't :=
+ "" 's :=
+ { t empty$ not }
+ { t #1 #1 substring$
+ t #2 global.max$ substring$ 't :=
+ duplicate$ is.num
+ { s swap$ * 's := }
+ { pop$ "" 't := }
+ if$
+ }
+ while$
+ s empty$
+ 'skip$
+ { pop$ s }
+ if$
+}
+
+FUNCTION {convert.edition}
+{ extract.num "l" change.case$ 's :=
+ s "first" = s "1" = or
+ { bbl.first 't := }
+ { s "second" = s "2" = or
+ { bbl.second 't := }
+ { s "third" = s "3" = or
+ { bbl.third 't := }
+ { s "fourth" = s "4" = or
+ { bbl.fourth 't := }
+ { s "fifth" = s "5" = or
+ { bbl.fifth 't := }
+ { s #1 #1 substring$ is.num
+ { s eng.ord 't := }
+ { edition 't := }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ t
+}
+
+FUNCTION {format.edition}
+{ edition duplicate$ empty$ 'skip$
+ {
+ convert.edition
+ output.state mid.sentence =
+ { "l" }
+ { "t" }
+ if$ change.case$
+ "edition" bibinfo.check
+ " " * bbl.edition *
+ }
+ if$
+}
+INTEGERS { multiresult }
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+FUNCTION {format.pages}
+{ pages duplicate$ empty$ 'skip$
+ { duplicate$ multi.page.check
+ {
+ bbl.pages swap$
+ n.dashify
+ }
+ {
+ bbl.page swap$
+ }
+ if$
+ tie.or.space.prefix
+ "pages" bibinfo.check
+ * *
+ }
+ if$
+}
+FUNCTION {first.page}
+{ 't :=
+ ""
+ { t empty$ not t #1 #1 substring$ "-" = not and }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+}
+
+FUNCTION {format.journal.pages}
+{ pages duplicate$ empty$ 'pop$
+ { swap$ duplicate$ empty$
+ { pop$ pop$ format.pages }
+ {
+ ", " *
+ swap$
+ first.page
+ "pages" bibinfo.check
+ *
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {format.journal.eid}
+{ eid "eid" bibinfo.check
+ duplicate$ empty$ 'skip$
+ { swap$ duplicate$ empty$ 'skip$
+ {
+ ", " *
+ }
+ if$
+ swap$
+ numpages empty$ 'skip$
+ { bbl.eidpp numpages tie.or.space.prefix
+ "numpages" bibinfo.check * *
+ " (" swap$ * ")" * *
+ }
+ if$
+ }
+ if$ *
+}
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ duplicate$ empty$ 'skip$
+ {
+ "volume" bibinfo.check
+ }
+ if$
+ bolden
+ eid empty$
+ { format.journal.pages }
+ { format.journal.eid }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { bbl.chapter }
+ { type "l" change.case$
+ "type" bibinfo.check
+ }
+ if$
+ chapter tie.or.space.prefix
+ "chapter" bibinfo.check
+ * *
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.booktitle}
+{
+ booktitle "booktitle" bibinfo.check
+ emphasize
+}
+FUNCTION {format.in.ed.booktitle}
+{ format.booktitle duplicate$ empty$ 'skip$
+ {
+ editor "editor" format.names.ed duplicate$ empty$ 'pop$
+ {
+ bbl.edby
+ " " * swap$ *
+ swap$
+ "," *
+ " " * swap$
+ * }
+ if$
+ word.in swap$ *
+ }
+ if$
+}
+FUNCTION {format.thesis.type}
+{ type duplicate$ empty$
+ 'pop$
+ { swap$ pop$
+ "t" change.case$ "type" bibinfo.check
+ }
+ if$
+}
+FUNCTION {format.tr.number}
+{ number "number" bibinfo.check
+ type duplicate$ empty$
+ { pop$ bbl.techrep }
+ 'skip$
+ if$
+ "type" bibinfo.check
+ swap$ duplicate$ empty$
+ { pop$ "t" change.case$ }
+ { tie.or.space.prefix * * }
+ if$
+}
+FUNCTION {format.article.crossref}
+{
+ word.in
+ " \cite{" * crossref * "}" *
+}
+FUNCTION {format.book.crossref}
+{ volume duplicate$ empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ pop$ word.in
+ }
+ { bbl.volume
+ swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word *
+ }
+ if$
+ " \cite{" * crossref * "}" *
+}
+FUNCTION {format.incoll.inproc.crossref}
+{
+ word.in
+ " \cite{" * crossref * "}" *
+}
+FUNCTION {format.org.or.pub}
+{ 't :=
+ ""
+ add.blank "(" *
+ t empty$
+ { address "address" bibinfo.check *
+ }
+ { t *
+ address empty$
+ 'skip$
+ { ", " * address "address" bibinfo.check * }
+ if$
+ }
+ if$
+ year duplicate$ empty$
+ { "empty year in " cite$ * "; set to ????" * warning$
+ pop$ "????" }
+ { "year" bibinfo.check extra.label * }
+ if$
+ t empty$ address empty$ and
+ { * }
+ { ", " swap$ * * }
+ if$
+ ")" *
+}
+FUNCTION {format.publisher.address}
+{ publisher "publisher" bibinfo.warn format.org.or.pub
+}
+
+FUNCTION {format.organization.address}
+{ organization "organization" bibinfo.check format.org.or.pub
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ crossref missing$
+ {
+ ""
+ journal
+ duplicate$ empty$
+ { pop$ pop$ } {
+ "journal" bibinfo.check
+ * "journal" output.check
+ add.blank
+ } if$
+ format.vol.num.pages output
+ format.date "year" output.check
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ format.issn output
+ format.note output
+ format.eprint output
+ format.url output
+ fin.entry
+}
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check
+ editor format.key output
+ }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.number.series output
+ format.publisher.address output
+ }
+ {
+ format.book.crossref output.nonnull
+ format.date "year" output.check
+ }
+ if$
+ format.edition output
+ format.isbn output
+ format.note output
+ format.eprint output
+ format.url output
+ fin.entry
+}
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ format.title "title" output.check
+ howpublished "howpublished" bibinfo.check output
+ address "address" bibinfo.check output
+ format.date "year" output.check
+ format.isbn output
+ format.note output
+ format.eprint output
+ format.url output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check
+ editor format.key output
+ }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ format.btitle "title" output.check
+ crossref missing$
+ {
+ format.publisher.address output
+ format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ format.number.series output
+ }
+ {
+ format.chapter.pages "chapter and pages" output.check
+ format.book.crossref output.nonnull
+ format.date "year" output.check
+ }
+ if$
+ format.edition output
+ crossref missing$
+ { format.isbn output }
+ 'skip$
+ if$
+ format.note output
+ format.eprint output
+ format.url output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.publisher.address output
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ format.edition output
+ format.isbn output
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ format.note output
+ format.eprint output
+ format.url output
+ fin.entry
+}
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ publisher empty$
+ { format.organization.address output }
+ { organization "organization" bibinfo.check output
+ format.publisher.address output
+ }
+ if$
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ format.isbn output
+ format.issn output
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ format.note output
+ format.eprint output
+ format.url output
+ fin.entry
+}
+FUNCTION {conference} { inproceedings }
+FUNCTION {manual}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ format.btitle "title" output.check
+ organization "organization" bibinfo.check output
+ address "address" bibinfo.check output
+ format.edition output
+ format.date "year" output.check
+ format.note output
+ format.eprint output
+ format.url output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ bbl.mthesis format.thesis.type output.nonnull
+ school "school" bibinfo.warn output
+ address "address" bibinfo.check output
+ format.date "year" output.check
+ format.note output
+ format.eprint output
+ format.url output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ format.title output
+ howpublished "howpublished" bibinfo.check output
+ format.date.misc
+ format.note output
+ format.eprint output
+ format.url output
+ fin.entry
+}
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ bbl.phdthesis format.thesis.type output.nonnull
+ school "school" bibinfo.warn output
+ address "address" bibinfo.check output
+ format.date "year" output.check
+ format.note output
+ format.eprint output
+ format.url output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ format.editors output
+ editor format.key output
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ publisher empty$
+ { format.organization.address output }
+ { organization "organization" bibinfo.check output
+ format.publisher.address output
+ }
+ if$
+ format.isbn output
+ format.issn output
+ format.note output
+ format.eprint output
+ format.url output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.tr.number output.nonnull
+ institution "institution" bibinfo.warn output
+ address "address" bibinfo.check output
+ format.date "year" output.check
+ format.note output
+ format.eprint output
+ format.url output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date.misc
+ format.note "note" output.check
+ format.eprint output
+ format.url output
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+READ
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+INTEGERS { len }
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+FUNCTION {format.lab.names}
+{ 's :=
+ "" 't :=
+ s #1 "{vv~}{ll}" format.name$
+ s num.names$ duplicate$
+ #2 >
+ { pop$
+ " " * bbl.etal *
+ cite.name.font
+ "others" 't :=
+ }
+ { #2 <
+ 'skip$
+ { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ {
+ " " * bbl.etal *
+ cite.name.font
+ "others" 't :=
+ }
+ { bbl.and space.word * s #2 "{vv~}{ll}" format.name$
+ * }
+ if$
+ }
+ if$
+ }
+ if$
+ t "others" =
+ 'skip$
+ { cite.name.font }
+ if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.label}
+{ editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {calc.short.authors}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.label
+ 'author.key.label
+ if$
+ }
+ if$
+ 'short.list :=
+}
+
+FUNCTION {calc.label}
+{ calc.short.authors
+ short.list
+ "("
+ *
+ year duplicate$ empty$
+ short.list key field.or.null = or
+ { pop$ "" }
+ 'skip$
+ if$
+ *
+ 'label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{vv{ } }{ll{ }}{ f{ }}{ jj{ }}"
+ format.name$ 't :=
+ nameptr #1 >
+ {
+ nameptr #0
+ #10 +
+ #1 + =
+ numnames #0
+ #10 +
+ > and
+ { "others" 't :=
+ #1 'namesleft := }
+ 'skip$
+ if$
+ " " *
+ namesleft #1 = t "others" = and
+ { "zzzzz" * }
+ { t sortify * }
+ if$
+ }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+FUNCTION {editor.sort}
+{ editor empty$
+ { key empty$
+ { "to sort, need editor or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+INTEGERS { seq.num }
+FUNCTION {init.seq}
+{ #0 'seq.num :=}
+EXECUTE {init.seq}
+FUNCTION {int.to.fix}
+{ "000000000" swap$ int.to.str$ *
+ #-1 #10 substring$
+}
+FUNCTION {presort}
+{ calc.label
+ label sortify
+ " "
+ *
+ seq.num #1 + 'seq.num :=
+ seq.num int.to.fix
+ 'sort.label :=
+ sort.label
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+SORT
+STRINGS { last.label next.extra }
+INTEGERS { last.extra.num number.label }
+FUNCTION {initialize.extra.label.stuff}
+{ #0 int.to.chr$ 'last.label :=
+ "" 'next.extra :=
+ #0 'last.extra.num :=
+ #0 'number.label :=
+}
+FUNCTION {forward.pass}
+{ last.label label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ label 'last.label :=
+ }
+ if$
+ number.label #1 + 'number.label :=
+}
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+ extra.label
+ duplicate$ empty$
+ 'skip$
+ { "{\natexlab{" swap$ * "}}" * }
+ if$
+ 'extra.label :=
+ label extra.label * 'label :=
+}
+EXECUTE {initialize.extra.label.stuff}
+ITERATE {forward.pass}
+REVERSE {reverse.pass}
+FUNCTION {bib.sort.order}
+{ sort.label
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+ITERATE {bib.sort.order}
+SORT
+FUNCTION {begin.bib}
+{ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "\begin{thebibliography}{" number.label int.to.str$ * "}" *
+ write$ newline$
+ "\expandafter\ifx\csname natexlab\endcsname\relax\def\natexlab#1{#1}\fi"
+ write$ newline$
+ "\expandafter\ifx\csname bibnamefont\endcsname\relax"
+ write$ newline$
+ " \def\bibnamefont#1{#1}\fi"
+ write$ newline$
+ "\expandafter\ifx\csname bibfnamefont\endcsname\relax"
+ write$ newline$
+ " \def\bibfnamefont#1{#1}\fi"
+ write$ newline$
+ "\expandafter\ifx\csname citenamefont\endcsname\relax"
+ write$ newline$
+ " \def\citenamefont#1{#1}\fi"
+ write$ newline$
+ "\expandafter\ifx\csname url\endcsname\relax"
+ write$ newline$
+ " \def\url#1{\texttt{#1}}\fi"
+ write$ newline$
+ "\expandafter\ifx\csname urlprefix\endcsname\relax\def\urlprefix{URL }\fi"
+ write$ newline$
+ "\providecommand{\bibinfo}[2]{#2}"
+ write$ newline$
+ "\providecommand{\eprint}[2][]{\url{#2}}"
+ write$ newline$
+}
+EXECUTE {begin.bib}
+EXECUTE {init.state.consts}
+ITERATE {call.type$}
+FUNCTION {end.bib}
+{ newline$
+ "\end{thebibliography}" write$ newline$
+}
+EXECUTE {end.bib}
+%% End of customized bst file
+%%
+%% End of file `apsrev.bst'.
diff --git a/obsolete/macros/latex/contrib/revtex4-0/apsrmp.bst b/obsolete/macros/latex/contrib/revtex4-0/apsrmp.bst
new file mode 100644
index 0000000000..b603eadcb5
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-0/apsrmp.bst
@@ -0,0 +1,2359 @@
+%%
+%% This is file `apsrmp.bst',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% merlin.mbs (with options: `head,ay,nat,vonx,nm-rev1,jnrlst,nmlm,x10,x2,m10,m2,nmft,nmft-def,fnm-def,nmfted,nmand-rm,lab,lab-def,keyxyr,dt-beg,xmth,yr-com,note-yr,jtit-x,jttl-rm,trtit-b,vol-bf,volp-com,jpg-1,pp-last,num-xser,jnm-x,pub-par,pre-pub,isbn,issn,edpar,edby,blk-com,pp,ed,xedn,jabr,and-com,etal-it,revdata,eprint,url,url-blk,pub-over-eprint,bibinfo,nfss,{}')
+%% physjour.mbs (with options: `ay,nat,vonx,nm-rev1,jnrlst,nmlm,x10,x2,m10,m2,nmft,nmft-def,fnm-def,nmfted,nmand-rm,lab,lab-def,keyxyr,dt-beg,xmth,yr-com,note-yr,jtit-x,jttl-rm,trtit-b,vol-bf,volp-com,jpg-1,pp-last,num-xser,jnm-x,pub-par,pre-pub,isbn,issn,edpar,edby,blk-com,pp,ed,xedn,jabr,and-com,etal-it,revdata,eprint,url,url-blk,pub-over-eprint,bibinfo,nfss,{}')
+%% geojour.mbs (with options: `ay,nat,vonx,nm-rev1,jnrlst,nmlm,x10,x2,m10,m2,nmft,nmft-def,fnm-def,nmfted,nmand-rm,lab,lab-def,keyxyr,dt-beg,xmth,yr-com,note-yr,jtit-x,jttl-rm,trtit-b,vol-bf,volp-com,jpg-1,pp-last,num-xser,jnm-x,pub-par,pre-pub,isbn,issn,edpar,edby,blk-com,pp,ed,xedn,jabr,and-com,etal-it,revdata,eprint,url,url-blk,pub-over-eprint,bibinfo,nfss,{}')
+%% photjour.mbs (with options: `ay,nat,vonx,nm-rev1,jnrlst,nmlm,x10,x2,m10,m2,nmft,nmft-def,fnm-def,nmfted,nmand-rm,lab,lab-def,keyxyr,dt-beg,xmth,yr-com,note-yr,jtit-x,jttl-rm,trtit-b,vol-bf,volp-com,jpg-1,pp-last,num-xser,jnm-x,pub-par,pre-pub,isbn,issn,edpar,edby,blk-com,pp,ed,xedn,jabr,and-com,etal-it,revdata,eprint,url,url-blk,pub-over-eprint,bibinfo,nfss,{}')
+%% merlin.mbs (with options: `tail,ay,nat,vonx,nm-rev1,jnrlst,nmlm,x10,x2,m10,m2,nmft,nmft-def,fnm-def,nmfted,nmand-rm,lab,lab-def,keyxyr,dt-beg,xmth,yr-com,note-yr,jtit-x,jttl-rm,trtit-b,vol-bf,volp-com,jpg-1,pp-last,num-xser,jnm-x,pub-par,pre-pub,isbn,issn,edpar,edby,blk-com,pp,ed,xedn,jabr,and-com,etal-it,revdata,eprint,url,url-blk,pub-over-eprint,bibinfo,nfss,{}')
+%% ----------------------------------------
+%% *** REVTeX-compatible apsrmp.bst 1702 ***
+%%
+%% Copyright 1994-2000 Patrick W Daly
+ % ===============================================================
+ % IMPORTANT NOTICE:
+ % This bibliographic style (bst) file has been generated from one or
+ % more master bibliographic style (mbs) files, listed above.
+ %
+ % This generated file can be redistributed and/or modified under the terms
+ % of the LaTeX Project Public License Distributed from CTAN
+ % archives in directory macros/latex/base/lppl.txt; either
+ % version 1 of the License, or any later version.
+ % ===============================================================
+ % Name and version information of the main mbs file:
+ % \ProvidesFile{merlin.mbs}[2000/05/04 4.01 (PWD, AO, DPC)]
+ % For use with BibTeX version 0.99a or later
+ %-------------------------------------------------------------------
+ % This bibliography style file is intended for texts in ENGLISH
+ % This is an author-year citation style bibliography. As such, it is
+ % non-standard LaTeX, and requires a special package file to function properly.
+ % Such a package is natbib.sty by Patrick W. Daly
+ % The form of the \bibitem entries is
+ % \bibitem[Jones et al.(1990)]{key}...
+ % \bibitem[Jones et al.(1990)Jones, Baker, and Smith]{key}...
+ % The essential feature is that the label (the part in brackets) consists
+ % of the author names, as they should appear in the citation, with the year
+ % in parentheses following. There must be no space before the opening
+ % parenthesis!
+ % With natbib v5.3, a full list of authors may also follow the year.
+ % In natbib.sty, it is possible to define the type of enclosures that is
+ % really wanted (brackets or parentheses), but in either case, there must
+ % be parentheses in the label.
+ % The \cite command functions as follows:
+ % \citet{key} ==>> Jones et al. (1990)
+ % \citet*{key} ==>> Jones, Baker, and Smith (1990)
+ % \citep{key} ==>> (Jones et al., 1990)
+ % \citep*{key} ==>> (Jones, Baker, and Smith, 1990)
+ % \citep[chap. 2]{key} ==>> (Jones et al., 1990, chap. 2)
+ % \citep[e.g.][]{key} ==>> (e.g. Jones et al., 1990)
+ % \citep[e.g.][p. 32]{key} ==>> (e.g. Jones et al., p. 32)
+ % \citeauthor{key} ==>> Jones et al.
+ % \citeauthor*{key} ==>> Jones, Baker, and Smith
+ % \citeyear{key} ==>> 1990
+ %---------------------------------------------------------------------
+
+ENTRY
+ { address
+ archive
+ author
+ booktitle
+ chapter
+ collaboration
+ edition
+ editor
+ eid
+ eprint
+ howpublished
+ institution
+ isbn
+ issn
+ journal
+ key
+ month
+ note
+ number
+ numpages
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ url
+ volume
+ year
+ }
+ {}
+ { label extra.label sort.label short.list }
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+STRINGS { s t}
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ "\newblock " write$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+FUNCTION {add.blank}
+{ " " * before.all 'output.state :=
+}
+
+FUNCTION {date.block}
+{
+ skip$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "\emph{" swap$ * "}" * }
+ if$
+}
+FUNCTION {bolden}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "\textbf{" swap$ * "}" * }
+ if$
+}
+FUNCTION {bib.name.font}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "\bibnamefont{" swap$ * "}" * }
+ if$
+}
+FUNCTION {bib.fname.font}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "\bibfnamefont{" swap$ * "}" * }
+ if$
+}
+FUNCTION {cite.name.font}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "\citenamefont{" swap$ * "}" * }
+ if$
+}
+FUNCTION {tie.or.space.prefix}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$
+}
+
+FUNCTION {capitalize}
+{ "u" change.case$ "t" change.case$ }
+
+FUNCTION {space.word}
+{ " " swap$ * " " * }
+ % Here are the language-specific definitions for explicit words.
+ % Each function has a name bbl.xxx where xxx is the English word.
+ % The language selected here is ENGLISH
+FUNCTION {bbl.and}
+{ "and"}
+
+FUNCTION {bbl.etal}
+{ "et~al." }
+
+FUNCTION {bbl.editors}
+{ "eds." }
+
+FUNCTION {bbl.editor}
+{ "ed." }
+
+FUNCTION {bbl.edby}
+{ "edited by" }
+
+FUNCTION {bbl.edition}
+{ "edition" }
+
+FUNCTION {bbl.volume}
+{ "volume" }
+
+FUNCTION {bbl.of}
+{ "of" }
+
+FUNCTION {bbl.number}
+{ "number" }
+
+FUNCTION {bbl.nr}
+{ "no." }
+
+FUNCTION {bbl.in}
+{ "in" }
+
+FUNCTION {bbl.pages}
+{ "pp." }
+
+FUNCTION {bbl.page}
+{ "p." }
+
+FUNCTION {bbl.eidpp}
+{ "pages" }
+
+FUNCTION {bbl.chapter}
+{ "chapter" }
+
+FUNCTION {bbl.techrep}
+{ "Technical Report" }
+
+FUNCTION {bbl.mthesis}
+{ "Master's thesis" }
+
+FUNCTION {bbl.phdthesis}
+{ "Ph.D. thesis" }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ %-------------------------------------------------------------------
+
+ % Begin module:
+
+
+ % \ProvidesFile{physjour.mbs}[1999/10/05 2.1 (PWD)]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+MACRO {aa}{"Astron. \& Astrophys."}
+
+
+MACRO {aasup}{"Astron. \& Astrophys. Suppl. Ser."}
+
+
+MACRO {aj} {"Astron. J."}
+
+
+MACRO {aph} {"Acta Phys."}
+
+MACRO {advp} {"Adv. Phys."}
+
+MACRO {ajp} {"Amer. J. Phys."}
+
+MACRO {ajm} {"Amer. J. Math."}
+
+MACRO {amsci} {"Amer. Sci."}
+
+MACRO {anofd} {"Ann. Fluid Dyn."}
+
+MACRO {am} {"Ann. Math."}
+
+MACRO {ap} {"Ann. Phys. (NY)"}
+
+MACRO {adp} {"Ann. Phys. (Leipzig)"}
+
+MACRO {ao} {"Appl. Opt."}
+
+MACRO {apl} {"Appl. Phys. Lett."}
+
+MACRO {app} {"Astroparticle Phys."}
+
+MACRO {apj} {"Astrophys. J."}
+
+
+MACRO {apjsup} {"Astrophys. J. Suppl."}
+
+
+MACRO {apss} {"Astrophys. Space Sci."}
+
+
+MACRO {araa} {"Ann. Rev. Astron. Astrophys."}
+
+
+MACRO {baas} {"Bull. Amer. Astron. Soc."}
+
+
+MACRO {baps} {"Bull. Amer. Phys. Soc."}
+
+MACRO {cmp} {"Comm. Math. Phys."}
+
+MACRO {cpam} {"Commun. Pure Appl. Math."}
+
+MACRO {cppcf} {"Comm. Plasma Phys. \& Controlled Fusion"}
+
+MACRO {cpc} {"Comp. Phys. Comm."}
+
+MACRO {cqg} {"Class. Quant. Grav."}
+
+MACRO {cra} {"C. R. Acad. Sci. A"}
+
+MACRO {fed} {"Fusion Eng. \& Design"}
+
+MACRO {ft} {"Fusion Tech."}
+
+MACRO {grg} {"Gen. Relativ. Gravit."}
+
+MACRO {ieeens} {"IEEE Trans. Nucl. Sci."}
+
+MACRO {ieeeps} {"IEEE Trans. Plasma Sci."}
+
+MACRO {ijimw} {"Interntl. J. Infrared \& Millimeter Waves"}
+
+MACRO {ip} {"Infrared Phys."}
+
+MACRO {irp} {"Infrared Phys."}
+
+MACRO {jap} {"J. Appl. Phys."}
+
+MACRO {jasa} {"J. Acoust. Soc. America"}
+
+MACRO {jcp} {"J. Comp. Phys."}
+
+MACRO {jetp} {"Sov. Phys.--JETP"}
+
+MACRO {jfe} {"J. Fusion Energy"}
+
+MACRO {jfm} {"J. Fluid Mech."}
+
+MACRO {jmp} {"J. Math. Phys."}
+
+MACRO {jne} {"J. Nucl. Energy"}
+
+MACRO {jnec} {"J. Nucl. Energy, C: Plasma Phys., Accelerators, Thermonucl. Res."}
+
+MACRO {jnm} {"J. Nucl. Mat."}
+
+MACRO {jpc} {"J. Phys. Chem."}
+
+MACRO {jpp} {"J. Plasma Phys."}
+
+MACRO {jpsj} {"J. Phys. Soc. Japan"}
+
+MACRO {jsi} {"J. Sci. Instrum."}
+
+MACRO {jvst} {"J. Vac. Sci. \& Tech."}
+
+MACRO {nat} {"Nature"}
+
+MACRO {nature} {"Nature"}
+
+
+
+MACRO {nedf} {"Nucl. Eng. \& Design/Fusion"}
+
+MACRO {nf} {"Nucl. Fusion"}
+
+MACRO {nim} {"Nucl. Inst. \& Meth."}
+
+MACRO {nimpr} {"Nucl. Inst. \& Meth. in Phys. Res."}
+
+MACRO {np} {"Nucl. Phys."}
+
+MACRO {npb} {"Nucl. Phys. B"}
+
+MACRO {nt/f} {"Nucl. Tech./Fusion"}
+
+MACRO {npbpc} {"Nucl. Phys. B (Proc. Suppl.)"}
+
+MACRO {inc} {"Nuovo Cimento"}
+
+MACRO {nc} {"Nuovo Cimento"}
+
+MACRO {pf} {"Phys. Fluids"}
+
+MACRO {pfa} {"Phys. Fluids A: Fluid Dyn."}
+
+MACRO {pfb} {"Phys. Fluids B: Plasma Phys."}
+
+MACRO {pl} {"Phys. Lett."}
+
+MACRO {pla} {"Phys. Lett. A"}
+
+MACRO {plb} {"Phys. Lett. B"}
+
+MACRO {prep} {"Phys. Rep."}
+
+MACRO {pnas} {"Proc. Nat. Acad. Sci. USA"}
+
+MACRO {pp} {"Phys. Plasmas"}
+
+MACRO {ppcf} {"Plasma Phys. \& Controlled Fusion"}
+
+MACRO {phitrsl} {"Philos. Trans. Roy. Soc. London"}
+
+MACRO {prl} {"Phys. Rev. Lett."}
+
+MACRO {pr} {"Phys. Rev."}
+
+MACRO {physrev} {"Phys. Rev."}
+
+MACRO {pra} {"Phys. Rev. A"}
+
+MACRO {prb} {"Phys. Rev. B"}
+
+MACRO {prc} {"Phys. Rev. C"}
+
+MACRO {prd} {"Phys. Rev. D"}
+
+MACRO {pre} {"Phys. Rev. E"}
+
+MACRO {ps} {"Phys. Scripta"}
+
+MACRO {procrsl} {"Proc. Roy. Soc. London"}
+
+MACRO {rmp} {"Rev. Mod. Phys."}
+
+MACRO {rsi} {"Rev. Sci. Inst."}
+
+MACRO {science} {"Science"}
+
+
+MACRO {sciam} {"Sci. Am."}
+
+MACRO {sam} {"Stud. Appl. Math."}
+
+MACRO {sjpp} {"Sov. J. Plasma Phys."}
+
+MACRO {spd} {"Sov. Phys.--Doklady"}
+
+MACRO {sptp} {"Sov. Phys.--Tech. Phys."}
+
+MACRO {spu} {"Sov. Phys.--Uspeki"}
+
+MACRO {st} {"Sky and Telesc."}
+
+
+
+
+
+ % End module: physjour.mbs
+
+
+
+ %-------------------------------------------------------------------
+ % Begin module:
+ % \ProvidesFile{geojour.mbs}[1999/11/16 2.0g (PWD)]
+MACRO {aisr} {"Adv. Space Res."}
+MACRO {ag} {"Ann. Geophys."}
+MACRO {anigeo} {"Ann. Geofis."}
+MACRO {angl} {"Ann. Glaciol."}
+MACRO {andmet} {"Ann. d. Meteor."}
+MACRO {andgeo} {"Ann. d. Geophys."}
+MACRO {andphy} {"Ann. Phys.-Paris"}
+MACRO {afmgb} {"Arch. Meteor. Geophys. Bioklimatol."}
+MACRO {atph} {"Atm\'osphera"}
+MACRO {aao} {"Atmos. Ocean"}
+MACRO {ass}{"Astrophys. Space Sci."}
+MACRO {atenv} {"Atmos. Environ."}
+MACRO {aujag} {"Aust. J. Agr. Res."}
+MACRO {aumet} {"Aust. Meteorol. Mag."}
+MACRO {blmet} {"Bound.-Lay. Meteorol."}
+MACRO {bams} {"Bull. Amer. Meteorol. Soc."}
+MACRO {cch} {"Clim. Change"}
+MACRO {cdyn} {"Clim. Dynam."}
+MACRO {cbul} {"Climatol. Bull."}
+MACRO {cap} {"Contrib. Atmos. Phys."}
+MACRO {dsr} {"Deep-Sea Res."}
+MACRO {dhz} {"Dtsch. Hydrogr. Z."}
+MACRO {dao} {"Dynam. Atmos. Oceans"}
+MACRO {eco} {"Ecology"}
+MACRO {empl}{"Earth, Moon and Planets"}
+MACRO {envres} {"Environ. Res."}
+MACRO {envst} {"Environ. Sci. Technol."}
+MACRO {ecms} {"Estuarine Coastal Mar. Sci."}
+MACRO {expa}{"Exper. Astron."}
+MACRO {geoint} {"Geofis. Int."}
+MACRO {geopub} {"Geofys. Publ."}
+MACRO {geogeo} {"Geol. Geofiz."}
+MACRO {gafd} {"Geophys. Astrophys. Fluid Dyn."}
+MACRO {gfd} {"Geophys. Fluid Dyn."}
+MACRO {geomag} {"Geophys. Mag."}
+MACRO {georl} {"Geophys. Res. Lett."}
+MACRO {grl} {"Geophys. Res. Lett."}
+MACRO {ga} {"Geophysica"}
+MACRO {gs} {"Geophysics"}
+MACRO {ieeetap} {"IEEE Trans. Antenn. Propag."}
+MACRO {ijawp} {"Int. J. Air Water Pollut."}
+MACRO {ijc} {"Int. J. Climatol."}
+MACRO {ijrs} {"Int. J. Remote Sens."}
+MACRO {jam} {"J. Appl. Meteorol."}
+MACRO {jaot} {"J. Atmos. Ocean. Technol."}
+MACRO {jatp} {"J. Atmos. Terr. Phys."}
+MACRO {jce} {"J. Climate"}
+MACRO {jcam} {"J. Climate Appl. Meteor."}
+MACRO {jcm} {"J. Climate Meteor."}
+MACRO {jcy} {"J. Climatol."}
+MACRO {jgr} {"J. Geophys. Res."}
+MACRO {jga} {"J. Glaciol."}
+MACRO {jh} {"J. Hydrol."}
+MACRO {jmr} {"J. Mar. Res."}
+MACRO {jmrj} {"J. Meteor. Res. Japan"}
+MACRO {jm} {"J. Meteor."}
+MACRO {jpo} {"J. Phys. Oceanogr."}
+MACRO {jra} {"J. Rech. Atmos."}
+MACRO {jaes} {"J. Aeronaut. Sci."}
+MACRO {japca} {"J. Air Pollut. Control Assoc."}
+MACRO {jas} {"J. Atmos. Sci."}
+MACRO {jmts} {"J. Mar. Technol. Soc."}
+MACRO {jmsj} {"J. Meteorol. Soc. Japan"}
+MACRO {josj} {"J. Oceanogr. Soc. Japan"}
+MACRO {jwm} {"J. Wea. Mod."}
+MACRO {lao} {"Limnol. Oceanogr."}
+MACRO {mwl} {"Mar. Wea. Log"}
+MACRO {mau} {"Mausam"}
+MACRO {meteor} {"``Meteor'' Forschungsergeb."}
+MACRO {map} {"Meteorol. Atmos. Phys."}
+MACRO {metmag} {"Meteor. Mag."}
+MACRO {metmon} {"Meteor. Monogr."}
+MACRO {metrun} {"Meteor. Rundsch."}
+MACRO {metzeit} {"Meteor. Z."}
+MACRO {metgid} {"Meteor. Gidrol."}
+MACRO {mwr} {"Mon. Weather Rev."}
+MACRO {nwd} {"Natl. Weather Dig."}
+MACRO {nzjmfr} {"New Zeal. J. Mar. Freshwater Res."}
+MACRO {npg} {"Nonlin. Proc. Geophys."}
+MACRO {om} {"Oceanogr. Meteorol."}
+MACRO {ocac} {"Oceanol. Acta"}
+MACRO {oceanus} {"Oceanus"}
+MACRO {paleoc} {"Paleoceanography"}
+MACRO {pce} {"Phys. Chem. Earth"}
+MACRO {pmg} {"Pap. Meteor. Geophys."}
+MACRO {ppom} {"Pap. Phys. Oceanogr. Meteor."}
+MACRO {physzeit} {"Phys. Z."}
+MACRO {pps} {"Planet. Space Sci."}
+MACRO {pss} {"Planet. Space Sci."}
+MACRO {pag} {"Pure Appl. Geophys."}
+MACRO {qjrms} {"Quart. J. Roy. Meteorol. Soc."}
+MACRO {quatres} {"Quat. Res."}
+MACRO {rsci} {"Radio Sci."}
+MACRO {rse} {"Remote Sens. Environ."}
+MACRO {rgeo} {"Rev. Geophys."}
+MACRO {rgsp} {"Rev. Geophys. Space Phys."}
+MACRO {rdgeo} {"Rev. Geofis."}
+MACRO {revmeta} {"Rev. Meteorol."}
+MACRO {sgp}{"Surveys in Geophys."}
+MACRO {sp} {"Solar Phys."}
+MACRO {ssr} {"Space Sci. Rev."}
+MACRO {tellus} {"Tellus"}
+MACRO {tac} {"Theor. Appl. Climatol."}
+MACRO {tagu} {"Trans. Am. Geophys. Union (EOS)"}
+MACRO {wrr} {"Water Resour. Res."}
+MACRO {weather} {"Weather"}
+MACRO {wafc} {"Weather Forecast."}
+MACRO {ww} {"Weatherwise"}
+MACRO {wmob} {"WMO Bull."}
+MACRO {zeitmet} {"Z. Meteorol."}
+ % End module: geojour.mbs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ %-------------------------------------------------------------------
+
+ % Begin module:
+
+
+ % \ProvidesFile{photjour.mbs}[1999/02/24 2.0b (PWD)]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+MACRO {appopt} {"Appl. Opt."}
+
+MACRO {bell} {"Bell Syst. Tech. J."}
+
+MACRO {ell} {"Electron. Lett."}
+
+MACRO {jasp} {"J. Appl. Spectr."}
+
+MACRO {jqe} {"IEEE J. Quantum Electron."}
+
+MACRO {jlwt} {"J. Lightwave Technol."}
+
+MACRO {jmo} {"J. Mod. Opt."}
+
+MACRO {josa} {"J. Opt. Soc. America"}
+
+MACRO {josaa} {"J. Opt. Soc. Amer.~A"}
+
+MACRO {josab} {"J. Opt. Soc. Amer.~B"}
+
+MACRO {jdp} {"J. Phys. (Paris)"}
+
+MACRO {oc} {"Opt. Commun."}
+
+MACRO {ol} {"Opt. Lett."}
+
+MACRO {phtl} {"IEEE Photon. Technol. Lett."}
+
+MACRO {pspie} {"Proc. Soc. Photo-Opt. Instrum. Eng."}
+
+MACRO {sse} {"Solid-State Electron."}
+
+MACRO {sjot} {"Sov. J. Opt. Technol."}
+
+MACRO {sjqe} {"Sov. J. Quantum Electron."}
+
+MACRO {sleb} {"Sov. Phys.--Leb. Inst. Rep."}
+
+MACRO {stph} {"Sov. Phys.--Techn. Phys."}
+
+MACRO {stphl} {"Sov. Techn. Phys. Lett."}
+
+MACRO {vr} {"Vision Res."}
+
+MACRO {zph} {"Z. f. Physik"}
+
+MACRO {zphb} {"Z. f. Physik~B"}
+
+MACRO {zphd} {"Z. f. Physik~D"}
+
+MACRO {CLEO} {"CLEO"}
+
+MACRO {ASSL} {"Adv. Sol.-State Lasers"}
+
+MACRO {OSA} {"OSA"}
+
+
+
+
+ % End module: photjour.mbs
+
+
+
+%% Copyright 1994-2000 Patrick W Daly
+MACRO {acmcs} {"ACM Comput. Surv."}
+
+MACRO {acta} {"Acta Inf."}
+
+MACRO {cacm} {"Commun. ACM"}
+
+MACRO {ibmjrd} {"IBM J. Res. Dev."}
+
+MACRO {ibmsj} {"IBM Syst.~J."}
+
+MACRO {ieeese} {"IEEE Trans. Software Eng."}
+
+MACRO {ieeetc} {"IEEE Trans. Comput."}
+
+MACRO {ieeetcad}
+ {"IEEE Trans. Comput. Aid. Des."}
+
+MACRO {ipl} {"Inf. Process. Lett."}
+
+MACRO {jacm} {"J.~ACM"}
+
+MACRO {jcss} {"J.~Comput. Syst. Sci."}
+
+MACRO {scp} {"Sci. Comput. Program."}
+
+MACRO {sicomp} {"SIAM J. Comput."}
+
+MACRO {tocs} {"ACM Trans. Comput. Syst."}
+
+MACRO {tods} {"ACM Trans. Database Syst."}
+
+MACRO {tog} {"ACM Trans. Graphic."}
+
+MACRO {toms} {"ACM Trans. Math. Software"}
+
+MACRO {toois} {"ACM Trans. Office Inf. Syst."}
+
+MACRO {toplas} {"ACM Trans. Progr. Lang. Syst."}
+
+MACRO {tcs} {"Theor. Comput. Sci."}
+
+FUNCTION {bibinfo.check}
+{ swap$
+ duplicate$ missing$
+ {
+ pop$ pop$
+ ""
+ }
+ { duplicate$ empty$
+ {
+ swap$ pop$
+ }
+ { swap$
+ "\bibinfo{" swap$ * "}{" * swap$ * "}" *
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {bibinfo.warn}
+{ swap$
+ duplicate$ missing$
+ {
+ swap$ "missing " swap$ * " in " * cite$ * warning$ pop$
+ ""
+ }
+ { duplicate$ empty$
+ {
+ swap$ "empty " swap$ * " in " * cite$ * warning$
+ }
+ { swap$
+ "\bibinfo{" swap$ * "}{" * swap$ * "}" *
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {format.eprint}
+{ eprint duplicate$ empty$
+ 'skip$
+ { "\eprint"
+ archive empty$
+ 'skip$
+ { "[" * archive * "]" * }
+ if$
+ "{" * swap$ * "}" *
+ }
+ if$
+}
+FUNCTION {format.url}
+{ url empty$
+ { "" }
+ { "\urlprefix\url{" url * "}" * }
+ if$
+}
+
+STRINGS { bibinfo}
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 'bibinfo :=
+ duplicate$ empty$ 'skip$ {
+ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ nameptr #1 >
+ { "{f.}" format.name$ duplicate$ empty$ 'skip$
+ { tie.or.space.prefix bib.fname.font swap$ * }
+ if$
+ s nameptr
+ "{vv~}{ll}" format.name$ bib.name.font *
+ s nameptr
+ "{jj}" format.name$ duplicate$ empty$ 'skip$
+ { bib.fname.font ", " swap$ * }
+ if$
+ }
+ { "{vv~}{ll}" format.name$ bib.name.font
+ s nameptr
+ "{f.}{, jj}"
+ format.name$ duplicate$ empty$ 'skip$
+ { bib.fname.font ", " swap$ * }
+ if$
+ }
+ if$
+ *
+ bibinfo bibinfo.check
+ 't :=
+ nameptr #1 >
+ {
+ nameptr #2
+ #10 +
+ #1 + =
+ numnames #2
+ #10 +
+ > and
+ { "others" 't :=
+ #1 'namesleft := }
+ 'skip$
+ if$
+ namesleft #1 >
+ { ", " * t * }
+ {
+ "," *
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ t "others" =
+ {
+ " " * bbl.etal emphasize *
+ }
+ {
+ bbl.and
+ space.word * t *
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ } if$
+}
+FUNCTION {format.names.ed}
+{
+ 'bibinfo :=
+ duplicate$ empty$ 'skip$ {
+ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{f.}" format.name$ duplicate$ empty$ 'skip$
+ { tie.or.space.prefix bib.fname.font swap$ * }
+ if$
+ s nameptr
+ "{vv~}{ll}" format.name$ bib.name.font *
+ s nameptr
+ "{jj}" format.name$ duplicate$ empty$ 'skip$
+ { bib.fname.font ", " swap$ * }
+ if$
+ *
+ bibinfo bibinfo.check
+ 't :=
+ nameptr #1 >
+ {
+ namesleft #1 >
+ { ", " * t * }
+ {
+ numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ t "others" =
+ {
+
+ " " * bbl.etal emphasize *
+ }
+ {
+ bbl.and
+ space.word * t *
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ } if$
+}
+FUNCTION {format.key}
+{ empty$
+ { key field.or.null }
+ { "" }
+ if$
+}
+
+FUNCTION {format.authors}
+{ author "author" format.names
+ duplicate$ empty$ 'skip$
+ { collaboration "collaboration" bibinfo.check
+ duplicate$ empty$ 'skip$
+ { " (" swap$ * ")" * }
+ if$
+ *
+ }
+ if$
+}
+FUNCTION {get.bbl.editor}
+{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ }
+
+FUNCTION {format.editors}
+{ editor "editor" format.names duplicate$ empty$ 'skip$
+ {
+ " " *
+ get.bbl.editor
+ "(" swap$ * ")" *
+ *
+ }
+ if$
+}
+FUNCTION {format.isbn}
+{ isbn "isbn" bibinfo.check
+ duplicate$ empty$ 'skip$
+ {
+ "ISBN " swap$ *
+ }
+ if$
+}
+
+FUNCTION {format.issn}
+{ issn "issn" bibinfo.check
+ duplicate$ empty$ 'skip$
+ {
+ "ISSN " swap$ *
+ }
+ if$
+}
+
+FUNCTION {format.note}
+{
+ note empty$
+ { "" }
+ { note #1 #1 substring$
+ duplicate$ "{" =
+ 'skip$
+ { output.state mid.sentence =
+ { "l" }
+ { "u" }
+ if$
+ change.case$
+ }
+ if$
+ note #2 global.max$ substring$ * "note" bibinfo.check
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title
+ duplicate$ empty$
+ { skip$ }
+ { "t" change.case$ }
+ if$
+ "title" bibinfo.check
+}
+
+FUNCTION {format.full.names}
+{'s :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{vv~}{ll}" format.name$
+ 't :=
+ nameptr #1 >
+ {
+ nameptr #2
+ #10 +
+ #1 + =
+ numnames #2
+ #10 +
+ > and
+ { "others" 't :=
+ #1 'namesleft := }
+ 'skip$
+ if$
+ namesleft #1 >
+ { ", " * t * }
+ {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ t "others" =
+ {
+ cite.name.font
+ " " * bbl.etal emphasize *
+ }
+ {
+ numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ bbl.and
+ space.word * t *
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ t "others" =
+ 'skip$
+ { cite.name.font }
+ if$
+}
+
+FUNCTION {author.editor.key.full}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.full.names }
+ if$
+ }
+ { author format.full.names }
+ if$
+}
+
+FUNCTION {author.key.full}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { author format.full.names }
+ if$
+}
+
+FUNCTION {editor.key.full}
+{ editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.full.names }
+ if$
+}
+
+FUNCTION {make.full.names}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.full
+ { type$ "proceedings" =
+ 'editor.key.full
+ 'author.key.full
+ if$
+ }
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+ "\bibitem[{" write$
+ label write$
+ ")" make.full.names duplicate$ short.list =
+ { pop$ }
+ { * }
+ if$
+ "}]{" * write$
+ cite$ write$
+ "}" write$
+ newline$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {n.dashify}
+{
+ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {word.in}
+{ bbl.in
+ " " * }
+
+FUNCTION {format.date}
+{ year "year" bibinfo.check duplicate$ empty$
+ {
+ "empty year in " cite$ * "; set to ????" * warning$
+ pop$ "????"
+ }
+ 'skip$
+ if$
+ extra.label *
+ before.all 'output.state :=
+ ", " swap$ *
+}
+FUNCTION {format.date.misc}
+{
+ format.date "year" output.check
+}
+FUNCTION {format.btitle}
+{ title "title" bibinfo.check
+ duplicate$ empty$ 'skip$
+ {
+ emphasize
+ }
+ if$
+}
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { bbl.volume volume tie.or.space.prefix
+ "volume" bibinfo.check * *
+ series "series" bibinfo.check
+ duplicate$ empty$ 'pop$
+ { swap$ bbl.of space.word * swap$
+ emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { series empty$
+ { number "number" bibinfo.check }
+ { output.state mid.sentence =
+ { bbl.number }
+ { bbl.number capitalize }
+ if$
+ number tie.or.space.prefix "number" bibinfo.check * *
+ bbl.in space.word *
+ series "series" bibinfo.check *
+ }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition duplicate$ empty$ 'skip$
+ {
+ output.state mid.sentence =
+ { "l" }
+ { "t" }
+ if$ change.case$
+ "edition" bibinfo.check
+ " " * bbl.edition *
+ }
+ if$
+}
+INTEGERS { multiresult }
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+FUNCTION {format.pages}
+{ pages duplicate$ empty$ 'skip$
+ { duplicate$ multi.page.check
+ {
+ bbl.pages swap$
+ n.dashify
+ }
+ {
+ bbl.page swap$
+ }
+ if$
+ tie.or.space.prefix
+ "pages" bibinfo.check
+ * *
+ }
+ if$
+}
+FUNCTION {first.page}
+{ 't :=
+ ""
+ { t empty$ not t #1 #1 substring$ "-" = not and }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+}
+
+FUNCTION {format.journal.pages}
+{ pages duplicate$ empty$ 'pop$
+ { swap$ duplicate$ empty$
+ { pop$ pop$ format.pages }
+ {
+ ", " *
+ swap$
+ first.page
+ "pages" bibinfo.check
+ *
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {format.journal.eid}
+{ eid "eid" bibinfo.check
+ duplicate$ empty$ 'skip$
+ { swap$ duplicate$ empty$ 'skip$
+ {
+ ", " *
+ }
+ if$
+ swap$
+ numpages empty$ 'skip$
+ { bbl.eidpp numpages tie.or.space.prefix
+ "numpages" bibinfo.check * *
+ " (" swap$ * ")" * *
+ }
+ if$
+ }
+ if$ *
+}
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ duplicate$ empty$ 'skip$
+ {
+ "volume" bibinfo.check
+ }
+ if$
+ bolden
+ number "number" bibinfo.check duplicate$ empty$ 'skip$
+ {
+ swap$ duplicate$ empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ swap$
+ "(" swap$ * ")" *
+ }
+ if$ *
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ { "" }
+ { type empty$
+ { bbl.chapter }
+ { type "l" change.case$
+ "type" bibinfo.check
+ }
+ if$
+ chapter tie.or.space.prefix
+ "chapter" bibinfo.check
+ * *
+ }
+ if$
+}
+
+FUNCTION {format.booktitle}
+{
+ booktitle "booktitle" bibinfo.check
+ emphasize
+}
+FUNCTION {format.in.ed.booktitle}
+{ format.booktitle duplicate$ empty$ 'skip$
+ {
+ editor "editor" format.names.ed duplicate$ empty$ 'pop$
+ {
+ bbl.edby
+ " " * swap$ *
+ swap$
+ "," *
+ " " * swap$
+ * }
+ if$
+ word.in swap$ *
+ }
+ if$
+}
+FUNCTION {format.thesis.type}
+{ type duplicate$ empty$
+ 'pop$
+ { swap$ pop$
+ "t" change.case$ "type" bibinfo.check
+ }
+ if$
+}
+FUNCTION {format.tr.number}
+{ number "number" bibinfo.check
+ type duplicate$ empty$
+ { pop$ bbl.techrep }
+ 'skip$
+ if$
+ "type" bibinfo.check
+ swap$ duplicate$ empty$
+ { pop$ "t" change.case$ }
+ { tie.or.space.prefix * * }
+ if$
+}
+FUNCTION {format.article.crossref}
+{
+ word.in
+ " \cite{" * crossref * "}" *
+}
+FUNCTION {format.book.crossref}
+{ volume duplicate$ empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ pop$ word.in
+ }
+ { bbl.volume
+ swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word *
+ }
+ if$
+ " \cite{" * crossref * "}" *
+}
+FUNCTION {format.incoll.inproc.crossref}
+{
+ word.in
+ " \cite{" * crossref * "}" *
+}
+FUNCTION {format.org.or.pub}
+{ 't :=
+ ""
+ address empty$ t empty$ and
+ 'skip$
+ {
+ add.blank "(" *
+ t empty$
+ { address "address" bibinfo.check *
+ }
+ { t *
+ address empty$
+ 'skip$
+ { ", " * address "address" bibinfo.check * }
+ if$
+ }
+ if$
+ ")" *
+ }
+ if$
+}
+FUNCTION {format.publisher.address}
+{ publisher "publisher" bibinfo.warn format.org.or.pub
+}
+
+FUNCTION {format.organization.address}
+{ organization "organization" bibinfo.check format.org.or.pub
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date "year" output.check
+ date.block
+ crossref missing$
+ {
+ ""
+ journal
+ duplicate$ empty$
+ { pop$ pop$ } {
+ "journal" bibinfo.check
+ * "journal" output.check
+ add.blank
+ } if$
+ format.vol.num.pages output
+ }
+ { format.article.crossref output.nonnull
+ }
+ if$
+ eid empty$
+ { format.journal.pages }
+ { format.journal.eid }
+ if$
+ format.issn output
+ format.note output
+ journal empty$ volume empty$ or {
+ format.eprint output
+ } {} if$
+ format.url output
+ fin.entry
+}
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check
+ editor format.key output
+ }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ format.date "year" output.check
+ date.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.number.series output
+ format.publisher.address output
+ }
+ {
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.isbn output
+ format.note output
+ format.eprint output
+ format.url output
+ fin.entry
+}
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.title "title" output.check
+ howpublished "howpublished" bibinfo.check output
+ address "address" bibinfo.check output
+ format.isbn output
+ format.note output
+ format.eprint output
+ format.url output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check
+ editor format.key output
+ }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ format.date "year" output.check
+ date.block
+ format.btitle "title" output.check
+ crossref missing$
+ {
+ format.publisher.address output
+ format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ format.number.series output
+ }
+ {
+ format.chapter.pages "chapter and pages" output.check
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ crossref missing$
+ { format.isbn output }
+ 'skip$
+ if$
+ format.pages "pages" output.check
+ format.note output
+ format.eprint output
+ format.url output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date "year" output.check
+ date.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.publisher.address output
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ format.edition output
+ format.isbn output
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ format.pages "pages" output.check
+ format.note output
+ format.eprint output
+ format.url output
+ fin.entry
+}
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date "year" output.check
+ date.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ publisher empty$
+ { format.organization.address output }
+ { organization "organization" bibinfo.check output
+ format.publisher.address output
+ }
+ if$
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ format.isbn output
+ format.issn output
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ format.note output
+ format.eprint output
+ format.url output
+ fin.entry
+}
+FUNCTION {conference} { inproceedings }
+FUNCTION {manual}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.btitle "title" output.check
+ organization "organization" bibinfo.check output
+ address "address" bibinfo.check output
+ format.edition output
+ format.note output
+ format.eprint output
+ format.url output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.btitle
+ "title" output.check
+ bbl.mthesis format.thesis.type output.nonnull
+ school "school" bibinfo.warn output
+ address "address" bibinfo.check output
+ format.note output
+ format.eprint output
+ format.url output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ format.date.misc
+ date.block
+ format.title output
+ howpublished "howpublished" bibinfo.check output
+ format.note output
+ format.eprint output
+ format.url output
+ fin.entry
+}
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.btitle
+ "title" output.check
+ bbl.phdthesis format.thesis.type output.nonnull
+ school "school" bibinfo.warn output
+ address "address" bibinfo.check output
+ format.note output
+ format.eprint output
+ format.url output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ format.editors output
+ editor format.key output
+ format.date "year" output.check
+ date.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ publisher empty$
+ { format.organization.address output }
+ { organization "organization" bibinfo.check output
+ format.publisher.address output
+ }
+ if$
+ format.isbn output
+ format.issn output
+ format.note output
+ format.eprint output
+ format.url output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.btitle
+ "title" output.check
+ format.tr.number output.nonnull
+ institution "institution" bibinfo.warn output
+ address "address" bibinfo.check output
+ format.note output
+ format.eprint output
+ format.url output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.title "title" output.check
+ format.note "note" output.check
+ format.eprint output
+ format.url output
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+READ
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+INTEGERS { len }
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+FUNCTION {format.lab.names}
+{ 's :=
+ "" 't :=
+ s #1 "{vv~}{ll}" format.name$
+ s num.names$ duplicate$
+ #2 >
+ { pop$
+ cite.name.font
+ " " * bbl.etal emphasize *
+ "others" 't :=
+ }
+ { #2 <
+ 'skip$
+ { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ {
+ " " * bbl.etal emphasize *
+ "others" 't :=
+ }
+ { bbl.and space.word * s #2 "{vv~}{ll}" format.name$
+ * }
+ if$
+ }
+ if$
+ }
+ if$
+ t "others" =
+ 'skip$
+ { cite.name.font }
+ if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.label}
+{ editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {calc.short.authors}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.label
+ 'author.key.label
+ if$
+ }
+ if$
+ 'short.list :=
+}
+
+FUNCTION {calc.label}
+{ calc.short.authors
+ short.list
+ "("
+ *
+ year duplicate$ empty$
+ short.list key field.or.null = or
+ { pop$ "" }
+ 'skip$
+ if$
+ *
+ 'label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{ll{ }}{ f{ }}{ jj{ }}"
+ format.name$ 't :=
+ nameptr #1 >
+ {
+ nameptr #2
+ #10 +
+ #1 + =
+ numnames #2
+ #10 +
+ > and
+ { "others" 't :=
+ #1 'namesleft := }
+ 'skip$
+ if$
+ " " *
+ namesleft #1 = t "others" = and
+ { "zzzzz" * }
+ { t sortify * }
+ if$
+ }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+FUNCTION {editor.sort}
+{ editor empty$
+ { key empty$
+ { "to sort, need editor or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+FUNCTION {presort}
+{ calc.label
+ label sortify
+ " "
+ *
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.sort
+ 'author.sort
+ if$
+ }
+ if$
+ #1 entry.max$ substring$
+ 'sort.label :=
+ sort.label
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+SORT
+STRINGS { last.label next.extra }
+INTEGERS { last.extra.num number.label }
+FUNCTION {initialize.extra.label.stuff}
+{ #0 int.to.chr$ 'last.label :=
+ "" 'next.extra :=
+ #0 'last.extra.num :=
+ #0 'number.label :=
+}
+FUNCTION {forward.pass}
+{ last.label label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ label 'last.label :=
+ }
+ if$
+ number.label #1 + 'number.label :=
+}
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+ extra.label
+ duplicate$ empty$
+ 'skip$
+ { "{\natexlab{" swap$ * "}}" * }
+ if$
+ 'extra.label :=
+ label extra.label * 'label :=
+}
+EXECUTE {initialize.extra.label.stuff}
+ITERATE {forward.pass}
+REVERSE {reverse.pass}
+FUNCTION {bib.sort.order}
+{ sort.label
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+ITERATE {bib.sort.order}
+SORT
+FUNCTION {begin.bib}
+{ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "\begin{thebibliography}{" number.label int.to.str$ * "}" *
+ write$ newline$
+ "\expandafter\ifx\csname natexlab\endcsname\relax\def\natexlab#1{#1}\fi"
+ write$ newline$
+ "\expandafter\ifx\csname bibnamefont\endcsname\relax"
+ write$ newline$
+ " \def\bibnamefont#1{#1}\fi"
+ write$ newline$
+ "\expandafter\ifx\csname bibfnamefont\endcsname\relax"
+ write$ newline$
+ " \def\bibfnamefont#1{#1}\fi"
+ write$ newline$
+ "\expandafter\ifx\csname citenamefont\endcsname\relax"
+ write$ newline$
+ " \def\citenamefont#1{#1}\fi"
+ write$ newline$
+ "\expandafter\ifx\csname url\endcsname\relax"
+ write$ newline$
+ " \def\url#1{\texttt{#1}}\fi"
+ write$ newline$
+ "\expandafter\ifx\csname urlprefix\endcsname\relax\def\urlprefix{URL }\fi"
+ write$ newline$
+ "\providecommand{\bibinfo}[2]{#2}"
+ write$ newline$
+ "\providecommand{\eprint}[2][]{\url{#2}}"
+ write$ newline$
+}
+EXECUTE {begin.bib}
+EXECUTE {init.state.consts}
+ITERATE {call.type$}
+FUNCTION {end.bib}
+{ newline$
+ "\end{thebibliography}" write$ newline$
+}
+EXECUTE {end.bib}
+%% End of customized bst file
+%%
+%% End of file `apsrmp.bst'.
diff --git a/obsolete/macros/latex/contrib/revtex4-0/docs/auguide.rty b/obsolete/macros/latex/contrib/revtex4-0/docs/auguide.rty
new file mode 100644
index 0000000000..c2a94fa3fc
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-0/docs/auguide.rty
@@ -0,0 +1 @@
+\input{docs.sty}%
diff --git a/obsolete/macros/latex/contrib/revtex4-0/docs/auguide.tex b/obsolete/macros/latex/contrib/revtex4-0/docs/auguide.tex
new file mode 100644
index 0000000000..080b597304
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-0/docs/auguide.tex
@@ -0,0 +1,1644 @@
+%% ****** Start of file authguide.tex ****** %
+%%
+%% This file is part of the APS files in the REVTeX 4 distribution.
+%% Version 4.0 of REVTeX, August, 2001
+%%
+%% Copyright (c) 2000,2001 The American Physical Society.
+%%
+%% See the REVTeX 4 README file for restrictions and more information.
+%%
+\listfiles
+\documentclass[%
+%prl%
+%,preprint%
+ ,twocolumn%
+ ,secnumarabic%
+%,tightenlines%
+,amssymb, amsmath,nobibnotes, aps, prl]{revtex4}
+%\usepackage{acrofont}%NOTE: Comment out this line for the release version!
+\usepackage{docs}%
+\usepackage{bm}%
+%\usepackage[colorlinks=true,linkcolor=blue]{hyperref}%
+%\nofiles
+\expandafter\ifx\csname package@font\endcsname\relax\else
+ \expandafter\expandafter
+ \expandafter\usepackage
+ \expandafter\expandafter
+ \expandafter{\csname package@font\endcsname}%
+\fi
+
+\begin{document}
+
+\title{\revtex~4 Author's Guide}%
+
+\author{American Physical Society}%
+\email{revtex@aps.org}
+\affiliation{1 Research Road, Ridge, NY 11961}
+\date{August 2001}%
+\maketitle
+\tableofcontents
+
+\section{Introduction}
+
+This is the author's guide to \revtex~4, the preferred submission
+format for all APS journals. This guide is intended to be a concise
+introduction to \revtex~4. The documentation has been separated out
+into smaller units to make it easier to locate essential
+information.
+
+The following documentation is also part of the APS \revtex~4
+distribution. Updated versions of these will be maintained at
+the \revtex~4 homepage located at \url{http://publish.aps.org/revtex4/}.
+\begin{itemize}
+\item \textit{APS Compuscript Guide for \revtex~4}
+\item \textit{\revtex~4 Command and Options Summary}
+\item \textit{\revtex~4 Bib\TeX\ Guide}
+\item \textit{Differences between \revtex~4 and \revtex~3}
+\end{itemize}
+This guide assumes a working \revtex~4
+installation. Please see the installation guide included with the
+distribution.
+
+The \revtex\ system for \LaTeX\ began its development in 1986 and has
+gone through three major revisions since then. All versions prior to
+\revtex~4 were based on \LaTeX2.09 and, until now, \revtex\ did not
+keep pace with the advances of the \LaTeX\ community and thus became
+inconvenient to work with. \revtex~4 is designed to remedy this by
+incorporating the following design goals:
+
+\begin{itemize}
+\item
+Make \revtex\ fully compatible with \LaTeXe; it is now a \LaTeXe\
+document class, similar in function to the standard
+\classname{article} class.
+
+\item
+Rely on standard \LaTeXe\ packages for common tasks, e.g,
+\classname{graphicx},
+\classname{color}, and
+\classname{hyperref}.
+
+\item
+Add or improve macros to support translation to tagged formats such as
+XML and SGML. This added markup will be key to enhancing the
+peer-review process and lowering production costs.
+
+\item
+Provide a closer approximation to the typesetting style used in
+\emph{Physical Review}.
+
+\item
+Incorporate new features, such as hypertext, to make \revtex\ a
+convenient and desirable e-print format.
+
+\item
+Relax the restrictions in \revtex\ that had only been necessary for
+typesetting journal camera-ready copy.
+\end{itemize}
+
+To meet these goals, \revtex~4 is a complete rewrite with an emphasis
+on maintainability so that it will be easier to provide enhancements.
+
+The \revtex~4 distribution includes both a template
+(\file{template.aps}) and a sample document (\file{apssamp.tex}).
+The template is a good starting point for a manuscript. In the
+following sections are instructions that should be sufficient for
+creating a paper using \revtex~4.
+
+\subsection{Submitting to APS Journals}
+
+Authors using \revtex~4 to prepare a manuscript for submission to
+\textit{Physical Review} or \textit{Reviews of Modern Physics}
+must also read the companion document \textit{APS Compuscript Guide
+for \revtex~4}
+distributed with \revtex\ and follow the guidelines detailed there.
+
+Further information about the compuscript program of the American
+Physical Society may be found at \url{http://publish.aps.org/ESUB/}.
+
+\subsection{Contact Information}\label{sec:resources}%
+Any bugs, problems, or inconsistencies should reported to
+\revtex\ support at \verb+revtex@aps.org+.
+Reports should include information on the error and a \textit{small}
+sample document that manifests the problem if possible (please don't
+send large files!).
+
+\section{Some \LaTeXe\ Basics}
+A primary design goal of \revtex~4 was to make it as compatible with
+standard \LaTeXe\ as possible so that authors may take advantage of all
+that \LaTeXe\ offers. In keeping with this goal, much of the special
+formatting that was built in to earlier versions of \revtex\ is now
+accomplished through standard \LaTeXe\ macros or packages. The books
+in the bibliography provide extensive coverage of all topics
+pertaining to preparing documents under \LaTeXe. They are highly recommended.
+
+To accomplish its goals, \revtex~4 must sometimes patch the underlying
+\LaTeX\ kernel. This means that \revtex~4 requires a fairly recent version of
+\LaTeXe. Versions prior to 1996/12/01 may not work
+correctly. \revtex~4 will be maintained to be compatible with future
+versions of \LaTeXe.
+
+\subsection{Useful \LaTeXe\ Markup}
+\LaTeXe\ markup is the preferred way to accomplish many basic tasks.
+
+\subsubsection{Fonts}
+
+Because \revtex~4 is based upon \LaTeXe, it inherits all of the
+macros used for controlling fonts. Of particular importance are the
+\LaTeXe\ macros \cmd{\textit}, \cmd{\textbf}, \cmd{\texttt} for changing to
+an italic, bold, or typewriter font respectively. One should always
+use these macros rather than the lower-level \TeX\ macros \cmd{\it},
+\cmd{\bf}, and \cmd{\tt}. The \LaTeXe\ macros offer
+improvements such as better italic correction and scaling in super-
+and subscripts for example. Table~\ref{tab:fonts}
+summarizes the font selection commands in \LaTeXe.
+
+\begin{table}
+\caption{\label{tab:fonts}\LaTeXe\ font commands}
+\begin{ruledtabular}
+\begin{tabular}{ll}
+\multicolumn{2}{c}{\textbf{Text Fonts}}\\
+\textbf{Font command} & \textbf{Explanation} \\
+\cmd\textit\marg{text} & Italics\\
+\cmd\textbf\marg{text} & Boldface\\
+\cmd\texttt\marg{text} & Typewriter\\
+\cmd\textrm\marg{text} & Roman\\
+\cmd\textsl\marg{text} & Slanted\\
+\cmd\textsf\marg{text} & Sans Serif\\
+\cmd\textsc\marg{text} & Small Caps\\
+\cmd\textmd\marg{text} & Medium Series\\
+\cmd\textnormal\marg{text} & Normal Series\\
+\cmd\textup\marg{text} & Upright Series\\
+ &\\
+\multicolumn{2}{c}{\textbf{Math Fonts}}\\
+\cmd\mathit\marg{text} & Math Italics\\
+\cmd\mathbf\marg{text} & Math Boldface\\
+\cmd\mathtt\marg{text} & Math Typewriter\\
+\cmd\mathsf\marg{text} & Math Sans Serif\\
+\cmd\mathcal\marg{text} & Calligraphic\\
+\cmd\mathnormal\marg{text} & Math Normal\\
+\cmd\bm\marg{text}& Bold math for Greek letters\\
+ & and other symbols\\
+\cmd\mathfrak\marg{text}\footnotemark[1] & Fraktur\\
+\cmd\mathbb\marg{text}\footnotemark[1] & Blackboard Bold\\
+\end{tabular}
+\end{ruledtabular}
+\footnotetext[1]{Requires \classname{amsfonts} or \classname{amssymb} class option}
+\end{table}
+
+\subsubsection{User-defined macros}
+\LaTeXe\ provides several macros that enable users to easily create new
+macros for use in their manuscripts:
+\begin{itemize}
+\footnotesize
+\item \cmd\newcommand\marg{\\command}\oarg{narg}\oarg{opt}\marg{def}
+\item \cmd\newcommand\verb+*+\marg{\\command}\oarg{narg}\oarg{opt}\marg{def}
+\item \cmd\renewcommand\marg{\\command}\oarg{narg}\oarg{opt}\marg{def}
+\item \cmd\renewcommand\verb+*+\marg{\\command}\oarg{narg}\oarg{opt}\marg{def}
+\item \cmd\providecommand\marg{\\command}\oarg{narg}\oarg{opt}\marg{def}
+\item \cmd\providecommand\verb+*+\marg{\\command}\oarg{narg}\oarg{opt}\marg{def}
+\end{itemize}
+Here \meta{\\command} is the name of the macro being defined,
+\meta{narg} is the number of arguments the macro takes,
+\meta{opt} are optional default values for the arguments, and
+\meta{def} is the actually macro definiton. \cmd\newcommand\ creates a
+new macro, \cmd\renewcommand\ redefines a previously defined macro,
+and \cmd\providecommand\ will define a macro only if it hasn't
+been defined previously. The *-ed versions are an optimization that
+indicates that the macro arguments will always be ``short'' arguments. This is
+almost always the case, so the *-ed versions should be used whenver
+possible.
+
+The use of these macros is preferred over using plain \TeX's low-level
+macros such as
+\cmd\def{},\cmd\edef{}, and \cmd\gdef{}. APS authors must follow the
+\textit{APS Compuscript Guide for \revtex~4} when defining macros.
+
+\subsubsection{Symbols}
+
+\LaTeXe\ has added some convenient commands for some special symbols
+and effects. These are summarized in Table~\ref{tab:special}. See
+\cite{Guide} for details.
+
+\begin{table}
+\caption{\label{tab:special}\LaTeXe\ commands for special symbols and effects}
+\begin{ruledtabular}
+\begin{tabular}{lc}
+Command & Symbol/Effect\\
+\cmd\textemdash & \textemdash\\
+\cmd\textendash & \textendash\\
+\cmd\textexclamdown & \textexclamdown\\
+\cmd\textquestiondown & \textquestiondown\\
+\cmd\textquotedblleft & \textquotedblleft\\
+\cmd\textquotedblright & \textquotedblright\\
+\cmd\textquoteleft & \textquoteleft\\
+\cmd\textquoteright & \textquoteright\\
+\cmd\textbullet & \textbullet\\
+\cmd\textperiodcentered & \textperiodcentered\\
+\cmd\textvisiblespace & \textvisiblespace\\
+\cmd\textcompworkmark & Break a ligature\\
+\cmd\textcircled\marg{char} & Circle a character\\
+\end{tabular}
+\end{ruledtabular}
+\end{table}
+
+\LaTeXe\ also removed some symbols that were previously automatically
+available in \LaTeX 2.09. These symbols are now contained in a
+separate package \classname{latexsym}. To use these symbols, include
+the package using:
+\begin{verbatim}
+\usepackage{latexsym}
+\end{verbatim}
+
+\subsection{Using \LaTeXe\ packages with \revtex}\label{sec:usepackage}%
+
+Many \LaTeXe\ packages are available, for instance, on CTAN at
+\url{ftp://ctan.tug.org/tex-archive/macros/latex/required/}
+and at
+\url{ftp://ctan.tug.org/tex-archive/macros/latex/contrib/}
+or may be available on other distribution media, such as the \TeX\
+Live CD-ROM \url{http://www.tug.org/texlive/}. Some of these packages
+are automatically loaded by \revtex~4 when certain class options are
+invoked and are, thus, ``required''. They will either be distributed
+with \revtex\ or are already included with a standard \LaTeXe\
+distribution.
+
+Required packages are automatically loaded by \revtex\ on an as-needed
+basis. Other packages should be loaded using the
+\cmd\usepackage\ command. To load the
+\classname{hyperref} package, the document preamble might look like:
+\begin{verbatim}
+\documentclass{revtex}
+\usepackage{hyperref}
+\end{verbatim}
+
+Some common (and very useful) \LaTeXe\ packages are \textit{a priori}
+important enough that \revtex~4 has been designed to be specifically
+compatible with them.
+A bug stemming from the use of one of these packages in
+conjunction with any of the APS journals may be reported by contacting
+\revtex\ support.
+\begin{description}
+\item[\textbf{AMS packages}] \revtex~4 is compatible with and depends
+ upon the AMS packages
+\classname{amsfonts},
+\classname{amssymb}, and
+\classname{amsmath}. In fact, \revtex~4 requires use of these packages
+to accomplish some common tasks. See Section~\ref{sec:math} for more.
+\revtex~4 requires version 2.0 or higher of the AMS-\LaTeX\ package.
+
+\item[\textbf{array and dcolumn}]
+The \classname{array} and \classname{dcolumn} packages are part of
+\LaTeX's required suite of packages. \classname{dcolumn} is required
+to align table columns on decimal points (and it in turn depends upon
+the \classname{array} package).
+
+\item[\textbf{longtable}]
+\file{longtable.sty} may be used for large tables that will span more than one
+page. \revtex~4 dynamically applies patches to longtable.sty so that
+it will work in two-column mode.
+
+\item[\textbf{hyperref}] \file{hyperref.sty} is a package by Sebastian Rahtz that is
+used for putting hypertext links into \LaTeXe\ documents.
+\revtex~4 has hooks to allow e-mail addresses and URL's to become
+hyperlinks if \classname{hyperref} is loaded.
+\end{description}
+
+Other packages will conflict with \revtex~4 and should be
+avoided. Usually such a conflict arises because the package adds
+enhancements that \revtex~4 already includes. Here are some common
+packages that clash with \revtex~4:
+\begin{description}
+\item[\textbf{multicol}] \file{multicol.sty} is a package by Frank Mittelbach
+that adds support for multiple columns. In fact, early versions of
+\revtex~4 used \file{multicol.sty} for precisely this. However, to
+improve the handling of floats, \revtex~4 now has its own macros for
+two-column layout. Thus, it is not necessary to use \file{multicol.sty}.
+
+\item[\textbf{cite}] Donald Arseneau's \file{cite.sty} is often used to provide
+support for sorting a \cmd\cite\ command's arguments into numerical
+order and to collapse consecutive runs of reference numbers. \revtex~4
+has this functionality built-in already via the \classname{natbib} package.
+
+\item[\textbf{endfloat}] The same functionality can be accomplished
+using the \classoption{endfloats} class option.
+
+\item[\textbf{float}] \revtex~4 already contains a lot of this
+functionality.
+\end{description}
+
+\section{The Document Preamble}
+
+The preamble of a \LaTeX\ document is the set of commands that precede
+the \envb{document} line. It contains a
+\cmd\documentclass\ line to load the \revtex~4 class (\textit{i.~e.},
+all of the \revtex~4 macro definitions), \cmd\usepackage\ macros to
+load other macro packages, and other macro definitions.
+
+\subsection{The \emph{documentclass} line}
+The basic formatting of the manuscript is controlled by setting
+\emph{class options} using
+\cmd\documentclass\oarg{options}\aarg{\classname{revtex4}}.
+The macro \cmd\documentclass\
+replaces the \cmd\documentstyle\ macro of \LaTeX2.09. The optional
+arguments that appear in the square brackets control the layout of the
+document. At this point, one only needs to choose a journal style
+(\classoption{pra}, \classoption{prb},
+\classoption{prc}, \classoption{prd},
+\classoption{pre}, \classoption{prl}, \classoption{prstab},
+and \classoption{rmp}) and either \classoption{preprint} or
+\classoption{twocolumn}. Usually, one would want to use
+\classoption{preprint} for draft papers. \classoption{twocolumn} gives
+the \emph{Physical Review} look and feel. Paper size options are also
+available as well. In particular, \classoption{a4paper} is available
+as well as the rest of the standard \LaTeX\ paper sizes. A
+full list of class options is given in the \textit{\revtex~4 Command
+and Options Summary}.
+
+\subsection{Loading other packages}
+Other packages may be loaded into a \revtex~4 document by using the
+standard \LaTeXe\ \cmd\usepackage\ command. For instance, to load
+the \classoption{graphics} package, one would use
+\verb+\usepackage{graphics}+.
+
+\section{The Front Matter}\label{sec:front}
+
+After choosing the basic look and feel of the document by selecting
+the appropriate class options and loading in whatever other macros are
+needed, one is ready to move on to creating a new manuscript. After
+the preamble, be sure to put in a \envb{document} line (and put
+in an \enve{document} as well). This section describes the macros
+\revtex~4 provides for formatting the front matter of the
+article. The behavior and usage of these macros can be quite
+different from those provided in either \revtex~3 or \LaTeXe. See the
+included document \textit{Differences between \revtex~4 and \revtex~3} for an
+overview of these differences.
+
+\subsection{Setting the title}
+
+The title of the manuscript is simply specified by using the
+\cmd\title\aarg{title} macro. A \verb+\\+ may be used to put a line
+break in a long title.
+
+\subsection{Specifying a date}%
+
+The \cmd\date\marg{date} command outputs the date on the
+manuscript. Using \cmd\today\ will cause \LaTeX{} to insert the
+current date whenever the file is run:
+\begin{verbatim}
+\date{\today}
+\end{verbatim}
+
+\subsection{Specifying authors and affiliations}
+
+The macros for specifying authors and their affiliations have
+changed significantly for \revtex~4. They have been improved to save
+labor for authors and in production. Authors and affiliations are
+arranged into groupings called, appropriately enough, \emph{author
+groups}. Each author group is a set of authors who share the same set
+of affiliations. Author names are specified with the \cmd\author\
+macro while affiliations (or addresses) are specified with the
+\cmd\affiliation\ macro. Author groups are specified by sequences of
+\cmd\author\ macros followed by \cmd\affiliation\ macros. An
+\cmd\affiliation\ macro applies to all previously specified
+\cmd\author\ macros which don't already have an affiliation supplied.
+
+For example, if Bugs Bunny and Roger Rabbit are both at Looney Tune
+Studios, while Mickey Mouse is at Disney World, the markup would be:
+\begin{verbatim}
+\author{Bugs Bunny}
+\author{Roger Rabbit}
+\affiliation{Looney Tune Studios}
+\author{Mickey Mouse}
+\affiliation{Disney World}
+\end{verbatim}
+The default is to display this as
+\begin{center}
+Bugs Bunny and Roger Rabbit\\
+\emph{Looney Tune Studios}\\
+Mickey Mouse\\
+\emph{Disney World}\\
+\end{center}
+This layout style for displaying authors and their affiliations is
+chosen by selecting the class option
+\classoption{groupedaddress}. This option is the default for all APS
+journal styles, so it does not need to be specified explicitly.
+The other major way of displaying this
+information is to use superscripts on the authors and
+affiliations. This can be accomplished by selecting the class option
+\classoption{superscriptaddress}. To achieve the display
+\begin{center}
+Bugs Bunny,$^{1}$ Roger Rabbit,$^{1,2}$ and Mickey Mouse$^{2}$\\
+\emph{$^{1}$Looney Tune Studios}\\
+\emph{$^{2}$Disney World}\\
+\end{center}
+one would use the markup
+\begin{verbatim}
+\author{Bugs Bunny}
+\affiliation{Looney Tune Studios}
+\author{Roger Rabbit}
+\affiliation{Looney Tune Studios}
+\affiliation{Disney World}
+\author{Mickey Mouse}
+\affiliation{Disney World}
+\end{verbatim}
+
+Note that \revtex~4 takes care of any commas and \emph{and}'s that join
+the author names together and font selection, as well as any
+superscript numbering. Only the author names and affiliations should
+be given within their respective macros.
+
+There is a third class option, \classoption{unsortedaddress}, for
+controlling author/affiliation display. The default
+\classoption{groupedaddress} will actually sort authors into the
+approriate author groups if one chooses to specify an affiliation for
+each author. The markup:
+\begin{verbatim}
+\author{Bugs Bunny}
+\affiliation{Looney Tune Studios}
+\author{Mickey Mouse}
+\affiliation{Disney World}
+\author{Roger Rabbit}
+\affiliation{Looney Tune Studios}
+\end{verbatim}
+will result in the same display as for the first case given
+above even though Roger Rabbit is specified after Mickey Mouse. To
+avoid Roger Rabbit being moved into the same author group as Bugs
+Bunny, use the
+\classoption{unsortedaddress} option instead. In general, it is safest
+to list authors in the order they should appear and specify
+affiliations for multiple authors rather than one at a time. This will
+afford the most independence for choosing the display option. Finally,
+it should be mentioned that the affiliations for the
+\classoption{superscriptaddress} are presented and numbered
+in the order that they are encountered. These means that the order
+will usually follow the order of the authors. An alternative ordering
+can be forced by including a list of \cmd\affiliation\ commands before
+the first \cmd{\author} in the desired order. Then use the exact same
+text for each affilation when specifying them for each author.
+
+If an author doesn't have an affiliation, the \cmd\noaffiliation\
+macro may be used in the place of an \cmd\affiliation\ macro.
+
+
+\subsubsection{Collaborations}
+
+A collaboration name can be specified with the \cmd\collaboration\
+macro. This is very similar to the \cmd\author\ macro, but it can only
+be used with the class option \classoption{superscriptaddress}. The
+\cmd\collaboration\ macro should appear at the end of the list of
+authors. The collaboration name will be appear centered in parentheses
+between the list of authors and the list of
+affiliations. Because collaborations
+don't normally have affiliations, one needs to follow the
+\cmd\collaboration\ with \cmd\noaffiliation.
+
+\subsubsection{Footnotes for authors, collaborations, affiliations or title}\label{sec:footau}
+
+Often one wants to specify additional information associated with an
+author, collaboration, or affiliation such an e-mail address, an
+alternate affiliation, or some other anicillary information.
+\revtex~4 introduces several new macros just for this purpose. They
+are:
+\begin{itemize}
+\item\cmd\email\oarg{optional text}\aarg{e-mail address}
+\item\cmd\homepage\oarg{optional text}\aarg{URL}
+\item\cmd\altaffiliation\oarg{optional text}\aarg{affiliation}
+\item\cmd\thanks\aarg{miscellaneous text}
+\end{itemize}
+In the first three, the \emph{optional text} will be prepended before the
+actual information specified in the required argument. \cmd\email\ and
+\cmd\homepage\ each have a default text for their optional arguments
+(`Electronic address:' and `URL:' respectively). The \cmd\thanks\
+macro should only be used if one of the other three do not apply. Any
+author name can have multiple occurences of these four macros. Note
+that unlike the
+\cmd\affiliation\ macro, these macros only apply to the \cmd\author\
+that directly precedes it. Any \cmd\affiliation\ \emph{must} follow
+the other author-specific macros. A typical usage might be as follows:
+\begin{verbatim}
+\author{Bugs Bunny}
+\email[E-mail me at: ]{bugs@looney.com}
+\homepage[Visit: ]{http://looney.com/}
+\altaffiliation[Permanent address: ]
+ {Warner Brothers}
+\affiliation{Looney Tunes}
+\end{verbatim}
+This would result in the footnote ``E-mail me at: \texttt{bugs@looney.com},
+Visit: \texttt{http://looney.com/}, Permanent address: Warner
+Brothers'' being attached to Bugs Bunny. Note that:
+\begin{itemize}
+\item Only an e-mail address, URL, or affiliation should go in the
+required argument in the curly braces.
+\item The font is automatically taken care of.
+\item An explicit space is needed at the end of the optional text if one is
+desired in the output.
+\item Use the optional arguments to provide customized
+text only if there is a good reason to.
+\end{itemize}
+
+The \cmd\collaboration\ , \cmd\affiliation\ , or even \cmd\title\ can
+also have footnotes attached via these commands. If any ancillary data
+(\cmd\thanks, \cmd\email, \cmd\homepage, or
+\cmd\altaffiliation) are given in the wrong context (e.g., before any
+\cmd\title, \cmd\author, \cmd\collaboration, or \cmd\affiliation\
+command has been given), then a warning is given in the \TeX\ log, and
+the command is ignored.
+
+Duplicate sets of ancillary data are merged, giving rise to a single
+shared footnote. However, this only applies if the ancillary data are
+identical: even the order of the commands specifying the data must be
+identical. Thus, for example, two authors can share a single footnote
+indicating a group e-mail address.
+
+Duplicate \cmd\affiliation\ commands may be given in the course of the
+front matter, without the danger of producing extraneous affiliations
+on the title page. However, ancillary data should be specified for
+only the first instance of any particular institution's
+\cmd\affiliation\ command; a later instance with different ancillary
+data will result in a warning in the \TeX\ log.
+
+It is preferable to arrange authors into
+sets. Within each set all the authors share the same group of
+affiliations. For each author, give the \cmd\author\ (and appropriate
+ancillary data), then follow this author group with the needed group
+of \cmd\affiliation\ commands.
+
+If affiliations have been listed before the first
+\cmd\author\ macro to ensure a particular ordering, be sure
+that any later \cmd\affiliation\ command for the given institution is
+an exact copy of the first, and also ensure that no ancillary data is
+given in these later instances.
+
+
+Each APS journal has a default behavior for the placement of these
+ancillary information footnotes. The \classoption{prb} option puts all
+such footnotes at the start of the bibliography while the other
+journal styles display them on the first page. One can override a
+journal style's default behavior by specifying explicitly the class
+option
+\classoption{bibnotes} (puts the footnotes at the start of the
+bibliography) or \classoption{nobibnotes} (puts them on the first page).
+
+\subsubsection{Specifying first names and surnames}
+
+Many APS authors have names in which either the surname appears first
+or in which the surname is made up of more than one name. To ensure
+that such names are accurately captured for indexing and other
+purposes, the \cmd\surname\ macro should be used to indicate which portion
+of a name is the surname. Similarly, there is a \cmd\firstname\ macro
+as well, although usage of \cmd\surname\ should be sufficient. If an
+author's surname is a single name and written last, it is not
+necessary to use these macros. These macros do nothing but indicate
+how a name should be indexed. Here are some examples;
+\begin{verbatim}
+\author{Andrew \surname{Lloyd Weber}}
+\author{\surname{Mao} Tse-Tung}
+\end{verbatim}
+
+\subsection{The abstract}
+An abstract for a paper is specified by using the \env{abstract}
+environment:
+\begin{verbatim}
+\begin{abstract}
+Text of abstract
+\end{abstract}
+\end{verbatim}
+Note that in \revtex~4 the abstract must be specified before the
+\cmd\maketitle\ command and there is no need to embed it in an explicit
+minipage environment.
+
+\subsection{PACS codes}
+APS authors are asked to supply suggested PACS codes with their
+submissions. The \cmd\pacs\ macro is provided as a way to do this:
+\begin{verbatim}
+\pacs{23.23.+x, 56.65.Dy}
+\end{verbatim}
+The actual display of the PACS numbers below the abstract is
+controlled by two class options: \classoption{showpacs} and
+\classoption{noshowpacs}. In particular, this is now independent of
+the \classoption{preprint} option. \classoption{showpacs} must be
+explicitly included in the class options to display the PACS codes.
+
+\subsection{Keywords}
+A \cmd\keywords\ macro may also be used to indicate keywords for the
+article.
+\begin{verbatim}
+\keywords{nuclear form; yrast level}
+\end{verbatim}
+This will be displayed below the abstract and PACS (if supplied). Like
+PACS codes, the actual display of the the keywords is controlled by
+two classoptions: \classoption{showkeys} and
+\classoption{noshowkeys}. An explicit \classoption{showkeys} must be
+included in the \cmd\documentclass\ line to display the keywords.
+
+\subsection{Institutional report numbers}
+Institutional report numbers can be specified using the \cmd\preprint\
+macro. These will be displayed in the upper lefthand corner of the
+first page. Multiple \cmd\preprint\ macros maybe supplied (space is
+limited though, so only three or less may actually fit).
+
+\subsection{maketitle}
+After specifying the title, authors, affiliations, abstract, PACS
+codes, and report numbers, the final step for formatting the front
+matter of the manuscript is to execute the \cmd\maketitle\ macro by
+simply including it:
+\begin{verbatim}
+\maketitle
+\end{verbatim}
+The \cmd\maketitle\ macro must follow all of the macros listed
+above. The macro will format the front matter in accordance with the various
+class options that were specified in the
+\cmd\documentclass\ line (either implicitly through defaults or
+explicitly).
+
+\section{The body of the paper}
+
+For typesetting the body of a paper, \revtex~4 relies heavily on
+standard \LaTeXe\ and other packages (particulary those that are part
+of AMS-\LaTeX). Users unfamiliar with these packages should read the
+following sections carefully.
+
+\subsection{Section headings}
+
+Section headings are input as in \LaTeX.
+The output is similar, with a few extra features.
+
+Four levels of headings are available in \revtex{}:
+\begin{quote}
+\cmd\section\marg{title text}\\
+\cmd\subsection\marg{title text}\\
+\cmd\subsubsection\marg{title text}\\
+\cmd\paragraph\marg{title text}
+\end{quote}
+
+Use the starred form of the command to suppress the automatic numbering; e.g.,
+\begin{verbatim}
+\section*{Introduction}
+\end{verbatim}
+
+To label a section heading for cross referencing, best practice is to
+place the \cmd\label\marg{key} within the argument specifying the heading:
+\begin{verbatim}
+\section{\label{sec:intro}Introduction}
+\end{verbatim}
+
+In the some journal substyles, such as those of the APS,
+all text in the \cmd\section\ command is automatically set uppercase.
+If a lowercase letter is needed, use \cmd\lowercase\aarg{x}.
+For example, to use ``He'' for helium in a \cmd\section\marg{title text} command, type
+\verb+H+\cmd\lowercase\aarg{e} in \marg{title text}.
+
+Use \cmd\protect\verb+\\+ to force a line break in a section heading.
+(Fragile commands must be protected in section headings, captions, and
+footnotes and \verb+\\+ is a fragile command.)
+
+\subsection{Paragraphs and General Text}
+
+Paragraphs always end with a blank input line. Because \TeX\
+automatically calculates linebreaks and word hyphenation in a
+paragraph, it is not necessary to force linebreaks or hyphenation. Of
+course, compound words should still be explicitly hyphenated, e.g.,
+``author-prepared copy.''
+
+Use directional quotes for quotation marks around quoted text
+(\texttt{``xxx''}), not straight double quotes (\texttt{"xxx"}).
+For opening quotes, use one or two backquotes; for closing quotes,
+use one or two forward quotes (apostrophes).
+
+\subsection{One-column vs. two-column}\label{sec:widetext}
+
+One of the hallmarks of \textit{Physical Review} is its two-column
+formatting and so one of the \revtex~4 design goals is to make it easier to
+acheive the \textit{Physical Review} look and feel. In particular, the
+\classoption{twocolumn} option will take care of formatting the front matter
+(including the abstract) as a single column. \revtex~4 has its own
+built-in two-column formatting macros to provide well-balanced columns
+as well as reasonable control over the placement of floats in either
+one- or two-column modes.
+
+Occasionally it is necessary to change the formatting from two-column to
+one-column to better accomodate very long equations that are more
+easily read when typeset to the full width of the page. This is
+accomplished using the \env{widetext} environment:
+\begin{verbatim}
+\begin{widetext}
+long equation goes here
+\end{widetext}
+\end{verbatim}
+In two-column mode, this will temporarily return to one-column mode,
+balancing the text before the environment into two short columns, and
+returning to two-column mode after the environment has
+finished. \revtex~4 will also add horizontal rules to guide the
+reader's eye through what may otherwise be a confusing break in the
+flow of text. The
+\env{widetext} environment has no effect on the output under the
+\classoption{preprint} class option because this already uses
+one-column formatting.
+
+Use of the \env{widetext} environment should be restricted to the bare
+minimum of text that needs to be typeset this way. However short pieces
+of paragraph text and/or math between nearly contiguous wide equations
+should be incorporated into the surrounding wide sections.
+
+Low-level control over the column grid can be accomplished with the
+\cmd\onecolumngrid\ and \cmd\twocolumngrid\ commands. Using these, one
+can avoid the horizontal rules added by \env{widetext}. These commands
+should only be used if absolutely necessary. Wide figures and tables
+should be accomodated using the proper \verb+*+ environments.
+
+\subsection{Cross-referencing}\label{sec:xrefs}
+
+\revtex{} inherits the \LaTeXe\ features for labeling and cross-referencing
+section headings, equations, tables, and figures. This section
+contains a simplified explanation of these cross-referencing features.
+The proper usage in the context of section headings, equations,
+tables, and figures is discussed in the appropriate sections.
+
+Cross-referencing depends upon the use of ``tags,'' which are defined by
+the user. The \cmd\label\marg{key} command is used to identify tags for
+\revtex. Tags are strings of characters that serve to label section
+headings, equations, tables, and figures that replace explicit,
+by-hand numbering.
+
+Files that use cross-referencing (and almost all manuscripts do)
+need to be processed through \revtex\ at least twice to
+ensure that the tags have been properly linked to appropriate numbers.
+If any tags are added in subsequent editing sessions,
+\LaTeX{} will display a warning message in the log file that ends with
+\texttt{... Rerun to get cross-references right}.
+Running the file through \revtex\ again (possibly more than once) will
+resolve the cross-references. If the error message persists, check
+the labels; the same \marg{key} may have been used to label more than one
+object.
+
+Another \LaTeX\ warning is \texttt{There were undefined references},
+which indicates the use of a key in a \cmd\ref\ without ever
+using it in a \cmd\label\ statement.
+
+\revtex{} performs autonumbering exactly as in standard \LaTeX.
+When the file is processed for the first time,
+\LaTeX\ creates an auxiliary file (with the \file{.aux} extension) that
+records the value of each \meta{key}. Each subsequent run retrieves
+the proper number from the auxiliary file and updates the auxiliary
+file. At the end of each run, any change in the value of a \meta{key}
+produces a \LaTeX\ warning message.
+
+Note that with footnotes appearing in the bibliography, extra passes
+of \LaTeX\ may be needed to resolve all cross-references. For
+instance, putting a \cmd\cite\ inside a \cmd\footnote\ will require at
+least three passes.
+
+Using the \classname{hyperref} package to create hyperlinked PDF files
+will cause reference ranges to be expanded to list every
+reference in the range. This behavior can be avoided by using the
+\classname{hypernat} package available from \url{www.ctan.org}.
+
+\subsection{Acknowledgments}
+Use the \env{acknowledgments} environment for an acknowledgments
+section. Depending on the journal substyle, this element may be
+formatted as an unnumbered section title \textit{Acknowledgments} or
+simply as a paragraph. Please note the spelling of
+``acknowledgments''.
+\begin{verbatim}
+\begin{acknowlegments}
+The authors would like to thank...
+\end{acknowlegments}
+\end{verbatim}
+
+\subsection{Appendices}
+The \cmd\appendix\ command signals that all following sections are
+appendices, so \cmd\section\marg{title text} after \cmd\appendix\ will set
+\marg{title text} as an appendix heading (an empty \marg{title text}
+is permitted). For a single appendix, use a
+\cmd\appendix\verb+*+ followed by \cmd\section\marg{title text}
+command to suppress the appendix letter in the section heading.
+
+\section{Math and Equations}\label{sec:math}
+
+\subsection{Math in text}
+
+Not surprisingly, \revtex\ uses the \TeX\ math \verb+$+ delimiters
+for math embedded in text. For example,
+\verb|$a^{z}$| give $a^{z}$. Within math mode, use
+\verb+^+\marg{math} for superscripts and
+\verb+_+\marg{math} for subscripts. If the braces after the
+\verb+^+ are omitted, \TeX{} will
+superscript the next \emph{token} (generally a single character or
+command). Thus it is safest to use explicit braces \verb+{}+.
+
+As with text, math should not require extensive explicit vertical or
+horzontal motion commands, because \TeX\ calculates math spacing
+itself automatically. In particular, explicit spacing around
+relations (e.g., $=$) or operators (e.g., $+$) should be
+unnecessary. These suggestions notwithstanding, some fine-tuning of
+math is required in specific cases, see Chapter~18 in the \TeX
+book\cite{TeXbook}.
+
+\subsection{Text in math}\label{sec:textinmath}
+
+There are times when normal, non-italic text needs to be inserted
+into a math expression. The \cmd\text\marg{text} command is the
+preferred method of accomplishing this. It produces regular text
+\emph{and} scales correctly in superscripts:
+\verb+$y=x \text{ for } x_{\text{e-p}}$+ gives
+``$y=x \text{ for } x_{\text{e-p}}$''. To use the \cmd\text\ command,
+the \classname{amsmath} package must be loaded: include a
+\cmd\usepackage\aarg{\classname{amsmath}} command in the document
+preamble or use the class option \classoption{amsmath}. Please note
+that \revtex~4 requires version 2.0 or higher of \classname{amsmath}.
+
+Other common alternatives may be less desirable. Using the standard
+\LaTeXe\ \cmd\mbox\marg{text} will give normal text, including a hyphen,
+but will not scale correctly in superscripts:
+\verb+$x_{\mbox{e-p}}$+ gives ``$x_{\mbox{e-p}}$''.
+The \cmd\rm\ command
+only switches to Roman font for math letters. It does not, for
+example, handle hyphens correctly:
+\verb+$$x_{\rm{e-p}}$+ gives ``$x_{\rm e-p}$''. But note that
+\cmd\textrm{}, it does work: \verb+$x_{\textrm{e-p}}$+ gives ``$x_{\textrm{e-p}}$''.
+
+\subsection{Displayed equations}\label{sec:dispmath}
+
+Equations are set centered in the column width or flush left depending
+on the selected journal substyle.
+
+For the simplest type of displayed equation, a numbered, one-line
+equation, use the \env{equation} environment.
+\revtex\ takes care of the equation number%
+---the number will be set below the equation if necessary.
+Use \cmd\[\dots\cmd\] for a single, one-line unnumbered display equation.
+
+Use the \env{eqnarray} environment when more than one consecutive
+equation occurs, putting each equation in a separate row of the
+environment, and using \cmd\nonumber\ before the row end (\cmd\\) to
+suppress the equation number where necessary. If the equations are
+related to each other, align each on the respective relation operator
+(such as $=$).
+
+When an equation is broken over lines or is continued over multiple
+relation operators, it is called a multi-line or continued equation,
+respectively; here, too, use the \env{eqnarray} environment.
+
+For a continued equation, align each row on the relation operator just
+as with multiple equations, and use the \cmd\nonumber\ command to
+suppress auto-numbering on broken lines. Also, use the starred form
+of the row end (\cmd\\\verb+*+) to prevent a pagebreak at that
+juncture.
+
+Short displayed equations that can appear together on a single line
+separated by \cmd\qquad\ space may be placed in a single
+\env{equation} environment.
+
+As explained in Section~\ref{sec:widetext}, occasionally in two-column
+mode a long equation, in order to fit it in the narrow column width,
+would need to be broken into so many lines that it would affect
+readibility. Set it in a wide column using the \env{widetext}
+environment. Then return to the normal text width as soon as
+possible.
+
+The sample file \file{apssamp.tex} illustrates how to obtain each of
+the above effects.
+
+\subsection{Numbering displayed equations}
+
+\revtex~4 automatically numbers equations.
+For single-line and multi-line equations, use the
+\env{equation} and \env{eqnarray} environments as described above.
+For unnumbered single-line equations, use the \verb+\[+\dots\verb+\]+
+construction. The command \cmd\nonumber\ will suppress the numbering
+on a single line of an
+\env{eqnarray}.
+For a multi-line equation with no equation numbers at all,
+use the \env{eqnarray*} environment.
+
+A series of equations can be a labeled with a lettered sequence,
+e.g., (3a), (3b), and (3c), by
+putting the respective \env{equation} or \env{eqnarray} environment within a
+\env{subequations} environment.
+The \classname{amsmath} package (can be loaded with the
+\classoption{amsmath} class option) is required for this.
+
+Use the command \cmd\tag\marg{number} to produce an idiosyncratic
+equation number: $(1')$, for example. Numbers assigned by \cmd\tag\
+are completely independent of \revtex's automatic numbering. The
+package \classname{amsmath} is required for using the \cmd\tag\
+command.
+
+To have \revtex{} reset the equation numbers at the start of each section,
+use the \classoption{eqsecnum} class option in the document preamble.
+
+See the sample file \file{apssamp.tex} for some examples.
+
+\subsection{Cross-referencing displayed equations}
+
+To refer to a numbered equation, use
+the \cmd\label\marg{key} and \cmd\ref\marg{key} commands.
+The \cmd\label\marg{key} command is used within the referenced equation
+(on the desired line of the \env{eqnarray}, if a multi-line equation):
+\begin{verbatim}
+\begin{equation}
+ A=B \label{pauli}
+\end{equation}
+ ... It follows from Eq.~(\ref{pauli})
+that this is the case ...
+\begin{eqnarray}
+ A & = &B,\label{pauli2}\\
+ A'& = &B'
+\end{eqnarray}
+\end{verbatim}
+gives
+\begin{equation}
+A=B \label{pauli}
+\end{equation}
+ ... It follows from Eq.~(\ref{pauli})
+that this is the case ...
+\begin{eqnarray}
+A & = &B,\label{pauli2}\\
+A'& = &B'
+\end{eqnarray}
+
+Please note the parentheses surrounding the \cmd\ref\ command.
+These are \emph{not} provided automatically and, thus, must be
+explicitly incorporated.
+
+Numbers produced with \cmd\tag\ can also be cross-referenced by adding
+a \cmd\label\ command after the \cmd\tag\ command.
+
+Using a \cmd\label\ after \envb{subequations} to reference the
+\emph{general} number of the equations in the
+\env{subequations} environment. For example, if
+\begin{verbatim}
+\begin{subequations}
+ \label{allequations} % notice location
+ \begin{eqnarray}
+ E&=&mc^2,\label{equationa}
+ \\
+ E&=&mc^2,\label{equationb}
+ \\
+ E&=&mc^2,\label{equationc}
+ \end{eqnarray}
+\end{subequations}
+\end{verbatim}
+%
+gives the output
+\begin{subequations}
+\label{allequations} % notice location
+\begin{eqnarray}
+E&=&mc^2,\label{equationa}
+\\
+E&=&mc^2,\label{equationb}
+\\
+E&=&mc^2,\label{equationc}
+\end{eqnarray}
+\end{subequations}
+%
+then \verb+Eq.~(\ref{allequations})+ gives ``Eq.~(\ref{allequations})''.
+
+{\bf Note:} incorrect cross-referencing will result if
+\cmd\label\ is used in an unnumbered single-line equation
+(i.e., within the \verb+\[+ and \verb+\]+ commands),
+or if \cmd\label\ is used on a line of an eqnarray that is not being numbered
+(i.e., a line that has a \cmd\nonumber).
+
+\subsection{Using the AMS packages \classoption{amsfonts},
+\classoption{amssymb}, and \classoption{amsmath}}\label{AMS}
+
+The American Mathematical Society's AMS-\LaTeX\ packages provided extra
+fonts, symbols, and math markup that are quite convenient. \revtex~4
+supports the use of these packages directly. To use the \classoption{amsfonts},
+\classoption{amssymb}, and \classoption{amsmath} class options,
+AMS-\LaTeX\ (and perhaps the additional AMS fonts) will need to be
+installed. Please note the \revtex~4 requires version 2.0 or higher
+of AMS-\LaTeX. These packages can be downloaded from
+\url{http://www.ams.org/tex/}.
+
+There are two class options for accessing the AMS fonts:
+\classoption{amsfonts} and \classoption{amssymb}.
+The \classoption{amsfonts} option defines the \cmd\mathfrak\ and
+\cmd\mathbb\ commands to switch to the Fraktur and
+Blackboard Bold fonts, respectively.
+These fonts are selected with the \cmd\mathfrak\ and \cmd\mathbb\
+font-switching commands:
+\verb+${\mathfrak{G}}$+ gives a Fraktur ``$\mathfrak{G}$''
+and \verb+${\mathbb{Z}}$+ gives a Blackboard Bold ``$\mathbb{Z}$''.
+\revtex{} does not currently support the use of the extra Euler fonts
+(the AMS fonts starting with \texttt{eur} or \texttt{eus}) or the
+Cyrillic fonts (the AMS fonts starting with \texttt{w}).
+
+The \classoption{amssymb} class option gives all the font
+capabilities of the
+\classoption{amsfonts} class option and further defines the commands
+for many commonly used math symbols. These symbols will scale
+correctly in superscripts and other places. See the AMS-\LaTeX\
+documentation for the complete list of symbols available.
+
+\subsection{Bold symbols in math}\label{sec:bboxamsfonts}
+
+\revtex~4 uses the standard \LaTeXe\ Bold Math (\classname{bm}) package as the
+basis for creating bold symbols in math mode. As usual, this requires
+an explicit \cmd\usepackage\aarg{\classname{bm}} in the document
+preamble. The command
+\cmd\bm\marg{symbol} makes \marg{symbol} bold in math mode, ensuring
+that it is the correct size, even in superscripts. If the correct font
+in the correct size is not available then result is the \marg{symbol}
+set at the
+correct size in lightface and a \LaTeXe\ warning that says
+``\texttt{No boldmath typeface in this size}\dots''. Most bold special
+characters will require that the AMS fonts be installed and the
+\classoption{amsfonts} class option be invoked.
+
+\cmd\bm\ is the proper means to get bold Greek characters---upper- and
+lowercase---and other symbols.
+The following will come out bold with \cmd\bm:
+normal math italic letters, numbers,
+Greek letters (uppercase and lowercase),
+small bracketing and operators, and \cmd\mathcal. Fraktur
+characters will come out bold in a \cmd\bm; however, Blackboard Bold
+requires using the \cmd\mathbb command rather than \cmd{\bm}.
+The \classoption{amsfonts} option adds support for bold math
+letters and symbols in smaller sizes and in superscripts when a
+\cmd\bm\marg{symbol} is used.
+For example, \verb+$\pi^{\bm{\pi}}$+ gives a bold
+lowercase pi in the superscript position: $^{\pi\bm{\pi}}$.
+
+Note that \cmd\bm\marg{math} is a fragile command and, thus, should be
+preceded by \cmd\protect\ in commands with moving arguments.
+
+\section{Footnotes}
+\LaTeX's standard \cmd\footnote\ command is available in
+\revtex~4. The footnote text can either appear at the bottom of a page or
+as part of the bibliography (in order, after the rest of the
+references). This choice can be controlled by two class options:
+\classoption{footinbib} and \classoption{nofootinbib}. \revtex~4
+defaults to the former. Specific journal options may select a
+different value than the default. Note that in the latter case, the
+argument of the
+\cmd\footnote\ command is a moving argument in the sense of the \LUG,
+Appendix~C.1.3: any fragile command within that argument must be
+preceded by a \cmd\protect\ command.
+
+The \cmd\footnote\ macro \emph{should not} be used in the front
+matter for indicating author/affiliation relationships or to provide
+additional information about authors (such as an e-mail
+address). See Section~\ref{sec:footau} for the proper way to do
+this.
+
+Finally, footnotes that appear in tables behave differently. They
+will be typeset as part of the table itself. See
+Section~\ref{sec:tablenote} for details.
+
+\section{Citations and References}\label{sec:endnotes}
+
+In keeping with the \revtex~4 design goal of making it easier to
+extract tagged information from a manuscript, new macros and \BibTeX\
+style files have been added to provide better markup. Furthermore,
+these have been built upon some widely-used \LaTeX\ packages in line
+with the design goal of making use of the existing packages where
+possible. The two main external packages that are of concern here are
+Patrick Daly's \classname{natbib} citation package and his
+\classname{custom-bib} tool kit for building new \BibTeX\ style
+files.
+
+From an author's point of view, all this means is that a proper
+\revtex~4 installation requires having \classname{natbib} (version 7
+or higher) installed. It also means that the full set of
+\classname{natbib} functionality is available from within \revtex~4
+(but see the \textit{APS Compuscript Guide for \revtex~4} for restrictions).
+The \classname{natbib} documentation contains many exmaples; see in
+particular the included \verb+natnotes.tex+ file for a convenient summary.
+
+As in standard \LaTeX, references are cited in text using the
+\cmd\cite\marg{key} command and are listed in the bibliography using
+the \cmd\bibitem\marg{key} command. The \cmd\cite{} macro enables
+\revtex~4 to automatically number the references in the manuscript.
+
+A typical example might be:
+\begin{verbatim}
+String theory\cite{GSW} attempts to
+provide a theory of everything.
+\end{verbatim}
+The corresponding \cmd\bibitem{} would be:
+\begin{verbatim}
+\bibitem{GSW} M.~Greene, J.~Schwarz, and
+E.~Witten, \textit{Superstring Theory:
+Introduction}, (Cambridge University
+Press, London, 1985).
+\end{verbatim}
+
+Journals differ in how the \cmd\cite\ will be displayed. Most APS journals
+display the citation in-line, as a number, enclosed in square brackets,
+\textit{e.~g.}, ``String theory[1] attempts\dots.'' Other journals
+(most notably \textit{Physical Review B})
+instead use a number in a superscript: ``String theory$^{1}$ attempts\dots.''
+Selecting the journal substyle using a class option (such as
+\classoption{prb}) will invoke the appropriate style.
+In journal substyles using superscripts,
+the macro the \cmd\onlinecite\marg{key} is necessary to get the number
+to appear on the baseline.
+For example, ``String theory (see, for example,
+\verb+Ref.~\onlinecite{GSW}+)'' will give the output
+``String theory (see, for example, Ref.~1).''
+
+The \cmd{\onlinecite} command has the same semantics as
+\classname{natbib}'s \cmd{\citealp} command.
+
+A \cmd\cite\ command with multiple keys is formatted with consecutive
+reference numbers collapsed; e.g., [1,2,3,5] will be output as
+[1--3,5]. To split the list over more than one line, use
+a \verb+%+ character immediately following a comma:
+\begin{verbatim}
+. . . \cite{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}
+\end{verbatim}
+The \verb+%+ avoids unwanted spaces.
+
+\subsection{Author/Year (Non-numeric) Citations}
+
+\textit{Reviews of Modern Physics} uses a citation style based on the
+first author's last name and the year of the reference rather than a
+simple number. Support for this style of citing references is the
+primary reason \revtex~4 uses the \classname{natbib}
+package. \classname{natbib} uses an optional argument to the
+\cmd\bibitem\ macro to specify what text to use for the \cmd\cite\
+text:
+\begin{quote}
+\cmd\bibitem\verb+[+\meta{short-name}\verb+(+\meta{year}\verb+)+\meta{long-name}\verb+]+
+\end{quote}
+where \meta{short-name} is the author name used in a parenthetical citation,
+\meta{long-name} that used in a textual citation, and
+\meta{year} is the year. More concretely, the \cmd\bibitem\ example
+above would appear as
+\begin{verbatim}
+\bibitem[Greene et al.(1985)Green,
+Schwarz, and Witten]{GSW}
+M.~Greene, J.~Schwarz, and E.~Witten,
+\textit{Superstring Theory},
+(Cambridge Press, London, 1985).
+\end{verbatim}
+
+When the citation constitutes part of the grammar of the sentence,
+the \cmd\textcite\marg{key} command may be used (analogous to the
+\cmd\onlinecite\ command above). Both \cmd\textcite\ and
+\cmd\onlinecite\ are built upon \classname{natbib}'s rich repertoire of
+macros (\cmd\citep{}, \cmd\citet{}, etc.). These macros are available in
+\revtex~4; however, APS authors must follow the
+\textit{APS Compuscript Guide for \revtex~4}
+guidelines regarding \classname{natbib}'s macros.
+
+\subsection{\label{sec:use-bib}Using Bib\TeX}
+
+The \cmd\bibitem{} entries can be coded by hand as above, of course, but the
+use of \BibTeX\ with the new style files provided with \revtex~4 makes
+it particularly simple to generate marked-up references that can, for
+instance, take advantage of packages like
+\classname{hyperref} for linking. They also save the trouble of having
+to specify formatting like the italics for the book title in the above
+example. And, for those wishing to use author/year citations, \BibTeX\
+will automatically generate the appropriate optional arguments for the
+\cmd\bibitem\ commands.
+
+\BibTeX\ is an adjunct to \LaTeX\ that aids in the
+preparation of bibliographies. \BibTeX\ allows authors to build up a
+database or collection of bibliography entries that may be used for many
+manuscripts. A \BibTeX\ style file then specifies how to transform the
+entries into a proper \cmd\bibitem{} for a particular journal. Here we
+give a brief summary of how to get started with \BibTeX. More details can be
+found in the \textit{\revtex~4 \BibTeX\ Guide} included in the
+distribution or in the LaTeX books listed in the references.
+
+Selecting a journal style by using an appropriate class option will
+automatically select the correct \BibTeX\ style file. For all
+of the \textit{Physical Review} journals, this is \file{apsrev.bst},
+while for \textit{Reviews of Modern Physics} this is
+\file{apsrmp.bst}. The selection can be overridden by specifying an
+alternative \file{.bst} file using the standard \LaTeXe
+\cmd\bibliographystyle\ macro. This must appear in the preamble
+before the \envb{document} line in \revtex~4 (this differs from
+standard \LaTeX).
+
+The \BibTeX\ database files will contain entries such as:
+\begin{verbatim}
+@Book{GSW,
+ author=``M. Greene, J. Schwarz,
+ E. Witten'',
+ title=``Superstring theory:
+ Introduction'',
+ publisher=``Cambridge University
+ Press'',
+ address=``London'',
+ year=``1985''
+}
+\end{verbatim}
+There are entry formats for articles, technical reports, e-prints,
+theses, books, proceedings, and articles that appear in books or
+proceedings. The \file{apsrev} and \file{apsrmp} styles provided with
+\revtex~4 also allows URL's and e-print identifiers to be specified
+for any of the different entry types. There is also an additional
+``collaboration'' field that can be used in addition to ``author''.
+
+To actually create the bibliography in the manuscript, the
+\cmd\bibliography\marg{bib files} macro is used.
+Here \meta{bib files} is a comma-separated list of \BibTeX\ bibliography
+database files, each with the \file{.bib} extension. The
+\cmd\bibliography\ macro should be placed at the location where the
+references are to appear (usually after the main body of the
+paper). When the manuscript is processed with \LaTeX\ for the first
+time, the keys corresponding for the \cmd\cite{} macros used in the
+manuscript are written out to the \file{.aux} file. Then \BibTeX\ should
+be run (if the manuscript is called \file{paper.tex}, the command would
+be \verb+bibtex paper+. This will produce a \file{.bbl} file containing all
+of the \cmd\bibitem{}'s for the manuscript. Subsequent runs of \LaTeXe\
+will call this file in to resolve the references. \LaTeXe\ should be run
+repeatedly until all references are resolved.
+
+The \BibTeX-produced \cmd\bibitem{}'s created using the \file{apsrev} and
+\file{apsrmp} appear considerably more complex than the example given
+above. This is because the style files add in \cmd\bibinfo{},
+\cmd\bibnamefont{}, \cmd\eprint{}, and \cmd\url{} macros for
+specifying additional formatting and tagging. The \cmd\bibinfo\ macro
+is mostly a do-nothing macro that serves merely to tag the information with
+the field information from the original entry in the \BibTeX\ database.
+The \cmd\eprint\ and \cmd\url\ macros can be used to create the
+appropriate hyperlinks in target formats such as PDF.
+
+For more information on using \BibTeX\ with \LaTeX, see Sections~4.3.1
+and~C.11.3 of the \LUG\cite{LaTeXman}, Section~13.2 of \cite{Compan},
+or the online \BibTeX\ manual
+\url{http://ctan.tug.org/tex-archive/biblio/bibtex/distribs/doc/btxdoc.tex}.
+%\url{http://ctan.tug.org/tex-archive/help/Catalogue/entries/bibtex.html}.
+
+\section{Figures and Artwork}\label{sec:figures}
+
+Figures may be included into a \revtex~4 manuscript by using the
+standard \LaTeXe\ macros. It should be noted that \LaTeXe\ includes
+several powerful packages for including the files in various
+formats. The two main packages are \classname{graphics} and
+\classname{graphicx}. Both offer a macro called
+\cmd\includegraphics\oarg{args}\marg{filename};
+they mainly differ in how arguments for
+controlling figure scaling, translation, and orientation
+are specified. Old \LaTeX2.09 interfaces such as
+\file{epsfig} have been re-implemented on top of these packages.
+For more information on the enhancements of the \classname{graphicx} package,
+see \cite{CompanG} or
+\url{ftp://ctan.tug.org/tex-archive/macros/latex/required/graphics/grfguide.ps}.
+\revtex~4 no longer has the \classoption{epsf} class option, though
+the \classname{epsfig} package provides a similar interface.
+
+
+The \env{figure} environment should be used to add a caption to the figure and
+to allow \LaTeX\ to number and place the figures where they fit best.
+\LaTeX\ will label and automatically number the captions FIG.~1,
+FIG.~2, etc. For example:
+\begin{verbatim}
+\begin{figure}
+ \includegraphics{fig1.eps}
+ \caption{\label{fig1}Text of first caption.}
+\end{figure}
+\end{verbatim}
+Note how the \cmd\label\marg{key} command is used to cross-reference
+figures in text. The \cmd\label\marg{key} command should be inserted
+inside the figure caption. As usual, the \cmd\ref\marg{key} macro can
+then by used to refer to the label: ``As depicted in
+FIG.\verb+~\ref{fig1}+\dots''.
+
+Figures are normally set to the width of the column in
+which they are placed. This means that in two-column mode, the figure
+will be placed in a single, narrow column. For wide figures, the
+\cmd\figure\verb+*+ environment should be used
+instead. This will place the figure across both columns (the figure
+usually will
+appear either at the top or the bottom of the following page).
+
+
+Captions less than one line long are centered under the figure,
+otherwise they span the width of the figure.
+
+Note that is unnecessary (and undesirable) to use explicit centering
+commands inside the float environments.
+
+\section{Tables}\label{sec:tables}
+
+Tables are very similar to figures. They should be input using the
+\env{table} environment as detailed below, and
+\LaTeX\ will label and number the captions TABLE~1, TABLE~2, etc.
+(or in whatever format required by the chosen journal
+substyle). Tables without captions won't be numbered.
+
+Each table must begin with \envb{table}, end with \enve{table}. A
+caption can be specified using the \cmd\caption\marg{text} command.
+Captions less than one line long are centered under the figure,
+otherwise they span the width of the figure.
+To refer to the table via cross-referencing, a \cmd\label\marg{key}
+command should appear within the \cmd{\caption}. Use the
+\cmd\ref\marg{key} command to cite tables in text. The \env{table}
+environment will set the table to the width of the column. Thus, in
+two-column mode, the table will confined to a single column. To set a
+table to the full width of the page, rather than the column, use the
+\env{table*} environment.
+
+The heart of the table is the
+\env{tabular} environment. This will behave for the most part as in
+standard \LaTeXe\ (please refer to Section~3.6.3 and Appendix~C.10.2 of the
+\LUG{} for more details about the \env{tabular} environment).
+Note that \revtex~4 no longer automatically adds double (Scotch) rules
+around tables. Nor does the \env{tabular} environment set various
+table parameters for column spacing as before. Instead, a new
+environment \env{ruledtabular} provides this functionality. This
+environment should surround the \env{tabular} environment:
+\begin{verbatim}
+\begin{table}
+\caption{\label{<key>}....}
+\begin{ruledtabular}
+\begin{tabular}
+...
+\end{tabular}
+\end{ruledtabular}
+\end{table}
+\end{verbatim}
+
+A basic table looks as follows:
+\begin{verbatim}
+\begin{table}
+\caption{\label{tab:example}Text of table caption.}
+\begin{ruledtabular}
+\begin{tabular}{ll}
+ Heading 1 & Heading 2\\
+ Cell 1 & Cell 2\\
+\end{tabular}
+\end{ruledtabular}
+\end{table}
+\end{verbatim}
+
+The \env{quasitable} environment is no longer in \revtex~4. The
+standard \env{tabular} environment can be used instead because it
+no longer puts in the double rules.
+
+\subsection{Aligning on a decimal point}
+Numerical columns should align on the decimal point (or
+decimal points if more than one is is present). This is accomplished
+by again using a standard \LaTeXe\ package, \classname{dcolumn} which
+must be loaded in the manuscript's preamble:
+\begin{verbatim}
+\usepackage{dcolumn}
+\end{verbatim}
+Once this package is loaded, the column specifier `\texttt{d}' can be
+used in the table's \env{tabular}\marg{preamble} enviroment preamble.
+The `\texttt{d}' should be used for simple numeric data with a single
+decimal point.
+%
+The entry of a \texttt{d} column is typeset in math mode; do not
+insert any \verb+$+ math delimiters into a `\texttt{d}' column. Items
+without a decimal point are simply set in math mode, centered. If
+text is required in the column, use \cmd\text\ or \cmd\mbox\ as
+appropriate. If multiple decimal points are present then the last is
+used for alignment. To escape from the `\texttt{d}' column use
+\cmd\multicolumn\ as usual. See the sample file \file{apssamp.tex} for examples.
+
+\subsection{Footnotes in Tables}\label{sec:tablenote}
+
+Footnotes in a table are labeled \emph{a}, \emph{b}, \emph{c},
+etc. They can be specified by using the \LaTeX\ \cmd\footnote\
+command. Furthermore,
+\cmd\footnotemark\ and \cmd\footnotetext\ can be used so that multiple entries
+can to refer to the same footnote. The footnotes for a table are typeset
+at the bottom of the table, rather than at the bottom of the page or
+at the end of the references. The arguments for \cmd\footnotemark\ and
+\cmd\footnotetext\ should be numbers 1, 2, \dots. The journal style
+will convert these to letters. See sample file \file{apssamp.tex} for
+examples and explanations of use.
+
+\subsection{Dealing with Long Tables}
+By default, tables are set in a smaller size than the text body
+(\cmd\small). The \cmd\squeezetable\ declaration makes the table font
+smaller still (\cmd\scriptsize). Thus, putting the
+\cmd\squeezetable\ command before the \envb{table} line in a table
+will reduce the font size. If this isn't sufficient to fit
+the table on a page, the standard \LaTeXe\ \classname{longtable}
+package may be used. The scope of the
+\cmd\squeezetable\ command must be limited by enclosing it with a group:
+\begin{verbatim}
+\begingroup
+\squeezetable
+\begin{table}
+[...]
+\end{table}
+\endgroup
+\end{verbatim}
+
+Tables are normally set to the width of the column in
+which they are placed. This means that in two-column mode, the table
+will be placed in a single, narrow column. For wide tables, the
+\cmd\table\verb+*+ environment should be used
+instead. This will place the table across both columns (the table
+usually will
+appear either at the top or the bottom of the following page).
+
+
+Under \revtex~3, tables automatically break across pages; \revtex~4
+provides some of this functionality. However, this requires adding to the
+table a float placement option of [H] (meaning put the table ``here''
+and effectively ``unfloating'' the table) to the \envb{table}
+command. The commands \verb+\\*+ and \cmd{\samepage} can be used to
+control where the page breaks occur (these are the same as for the
+\env{eqnarray} environment).
+
+Long tables are more robustly handled by using the
+\classname{longtable.sty} package included with the standard \LaTeXe\
+distribution (put \verb+\usepackage{longtable}+ in the preamble). This
+package gives precise control over the layout of the table.
+The \revtex~4 package contains patches that enable the
+\classname{longtable} package to work in two-column mode. Of course, a
+table set in two-column mode needs to be narrow enough to fit within
+the column. Otherwise, the columns may overlap. \revtex~4 provides
+an additional environment \env{longtable*} which allows a longtable to
+span the whole page width. Currently, the \env{longtable*} and
+\env{ruledtabular} environments are incompatible. In order to get the
+double (Scotch) rule, it is necessary to add the \verb+\hline\hline+
+manually (or define \verb+\endfirsthead+ and \verb+\endlastfoot+
+appropriately). For more documentation on the \env{longtable}
+environment and on the package options of the
+\classname{longtable} package, please see the documentation available at
+\url{ftp://ctan.tug.org/macros/latex/required/tools/longtable.dtx} or
+refer to \cite{Compan}.
+
+\section{Placement of Figures, Tables, and Other Floats}
+\label{sec:place}
+
+By default, figures and tables (and any other ``floating'' environments
+defined by other packages) float to the top or bottom of the page
+using the standard \LaTeX\ float placement mechanism. Initially, each
+\env{figure} or \env{table} environment should be put immediately
+following its first reference in the text; this will usually result in
+satisfactory placement on the page. An optional argument for either
+environment adjusts the float placement. For example:
+\begin{quote}
+\envb{figure}\oarg{placement}\\
+\dots\\
+\enve{figure}
+\end{quote}
+where \meta{placement} can be any combination of \verb|htbp!|, signifying
+``here'', ``top'', ``bottom'', ``page'', and ``as soon as possible'',
+respectively. The same placement argument may be added to a
+\envb{table}. For more details about float placement,
+see the instructions in the \LUG, Appendix~C.9.1.
+
+In two-column mode, a page may contain both a \env{widetext}
+environment and a float. \revtex~4 may not always be able to
+automatically put the float in the optimal place. For instance, a
+float may be placed at the bottom of a column just before the
+\env{widetext} begins. To workaround this, try moving the float
+environment below the \env{widetext} environment. Alternative
+\meta{placements} may also alleviate the problem.
+
+\env{figure} and \env{table} environments should not
+be enclosed in a \env{widetext} environment to make them span
+the page to accomodate wide figures or tables. Rather, the
+\env{figure*} or \env{table*} environments should be used instead.
+
+Sometimes in \LaTeX\ the float placement mechanism breaks down and a
+float can't be placed. Such a ``stuck'' float may mean that it and all
+floats that follow are moved to the end of the job (and if there are
+too many of floats, the fatal error \texttt{Too many unprocessed floats}
+will occur). \revtex~4 provides the class option
+\classoption{floatfix} which attempts to invoke emergency float
+processing to avoid creating a ``stuck'' float. \revtex~4 will provide
+a message suggesting the use of
+\classoption{floatfix}. If \classoption{floatfix} doesn't work or if
+the resulting positioning of the float is poor, the float should be
+repositioned by hand.
+
+\revtex~4 offers an additional possibility for placing the floats. By
+using the either the \classoption{endfloats} or the
+\classoption{endfloats*} class option all floats may be held
+back (using an external file) and then set elsewhere in the document
+using the the commands \cmd\printtables\ and \cmd\printfigures{},
+placed where the tables and figures are to be printed (usually at the
+end of the document). (This is similar to the standard
+\cmd\printindex\ command). Using a \texttt{*}-form of the commands
+(\cmd\printfigures\verb+*+ and
+\cmd\printtables\verb+*+) will begin the figures
+or tables on a new page. Alternatively, the option
+\classoption{endfloats*} may be used to change the behavior of the
+non-\texttt{*}-forms so that every float will appear on a separate
+page at the end.
+
+Without one of the \classoption{endfloats} class options, these float
+placement commands are silently ignored, so it is always safe to use
+them. If one of the \classoption{endfloats} class options is given,
+but the \cmd\printtables\ command is missing, the tables will be
+printed at the end of the document. Likewise, if \cmd\printfigures\ is
+missing, the figures will be printed at the end of the document.
+Therefore it is also safe to omit these commands as long as \revtex's
+default choices for ordering figures and tables are satisfactory.
+
+The \classoption{endfloats} option (or perhaps some journal substyle
+that invokes it), requires explicit \envb{figure}, \enve{figure},
+\envb{table}, and \enve{table} lines. In particular, do \emph{not}
+define typing shortcuts for table and figure environments, such as
+\begin{verbatim}
+\def\bt{\begin{table}}% Incompatible!
+\def\et{\end{table}}%
+\end{verbatim}
+
+Please note that it is generally undesirable to have all floats moved
+to the end of the manuscript. APS no longer requires this for
+submissions. In fact, the editors and referees will have an easier time
+reading the paper if the floats are set in their normal positions.
+
+\section{Rotating Floats}
+
+Often a figure or table is too wide to be typeset in the standard
+orientation and it is necessary to rotate the float 90
+degrees. \revtex~4 provides a new environment \env{turnpage} as an
+easy means to accomplish this. The \env{turnpage} environment depends
+on one of the packages \classname{graphics} or \classname{graphicx}
+being loaded. To use the \env{turnpage} environment, simply enclose
+the \env{figure} or \env{table} environment with the \env{turnpage}
+environment:
+\begin{verbatim}
+\documentclass[...]{revtex4}
+\usepackage{graphicx}
+[...]
+\begin{turnpage}
+\begin{figure} or \begin{table}
+[...]
+\end{figure} or \end{table}
+\end{turnpage}
+\end{verbatim}
+A turnpage float will be typeset on a page by itself. Currently, there
+is no mechanism for breaking such a float across multiple pages.
+
+\section{\revtex~4 symbols and the \classname{revsymb} package}
+
+Symbols made available in earlier versions of \revtex\ are
+defined in a separate package, \classname{revsymb},
+so that they may be used with other classes.
+This might be useful if, say, copying text from a \revtex\ document to
+a non-\revtex\ document. \revtex~4 automatically includes these
+symbols so it is not necessary to explicitly call them in with a
+\cmd\usepackage\ statement.
+
+Table~\ref{tab:revsymb} summarizes the symbols defined in this package.
+Note that \cmd{\overcirc}, \cmd{\overdots}, and \cmd{\corresponds} are
+no longer in \revtex~4. Use \cmd{\mathring} (standard in \LaTeXe),
+\cmd{\dddot} (with the \classoption{amsmath} package loaded), and
+\cmd\triangleq\ (with the \classoption{amssymb} class option) respectively.
+\cmd{\succsim}, \cmd{\precsim}, \cmd{\lesssim}, and \cmd{\gtrsim} are
+also defined either in \classname{amsmath} or \classname{amssymb}. The
+AMS versions of these commands will be used if the appropriate AMS
+package is loaded.
+
+\begin{table}
+\caption{\label{tab:revsymb}Special \revtex~4 symbols, accents, and
+boldfaced parentheses defined in \file{revsymb.sty}}
+\begin{ruledtabular}
+\begin{tabular}{ll|ll}
+\cmd\lambdabar & $\lambdabar$ &\cmd\openone & $\openone$\\
+\cmd\altsuccsim & $\altsuccsim$ & \cmd\altprecsim & $\altprecsim$ \\
+\cmd\alt & $\alt$ & \cmd\agt & $\agt$ \\
+\cmd\tensor\ x & $\tensor x$ & \cmd\overstar\ x & $\overstar x$ \\
+\cmd\loarrow\ x & $\loarrow x$ & \cmd\roarrow\ x & $\roarrow x$ \\
+\cmd\biglb\ ( \cmd\bigrb ) & $\biglb( \bigrb)$ &
+\cmd\Biglb\ ( \cmd\Bigrb )& $\Biglb( \Bigrb)$ \\
+& & \\
+\cmd\bigglb\ ( \cmd\biggrb ) & $\bigglb( \biggrb)$ &
+\cmd\Bigglb\ ( \cmd\Biggrb\ ) & $\Bigglb( \Biggrb)$ \\
+\end{tabular}
+\end{ruledtabular}
+\end{table}
+
+\section{Other \revtex~4 Features}
+%\subsection{Hooks}
+%To be written....
+
+\subsection{Job-specific Override Files}
+\revtex~4 allows manuscript-specific macro definitions to be put
+in a file separate from the main \TeX\ file. One merely creates a file
+with the same basename as the \TeX\ file, but with the extension
+`.rty'. Thus, if the \TeX\ file is names man.tex, the macro
+definitions would go in man.rty. Note that the .rty file should be in
+the same directory as the \TeX\ file. APS authors should follow the
+guidelines in the \textit{APS Compuscript Guide for \revtex~4} when
+submitting.
+
+\begin{thebibliography}{}\label{sec:TeXbooks}
+\bibitem[Knuth(1986)]{TeXbook} D.E. Knuth, \emph{The \TeX book},
+(Addison-Wesley, Reading, MA, 1986).
+\bibitem[Lamport(1996)]{LaTeXman} L. Lamport, \emph{\LaTeX, a Document
+Preparation System}, (Addison-Wesley, Reading, MA, 1996).
+\bibitem[Kopka(1995)]{Guide} H. Kopka and P. Daly, \emph{A Guide to
+\LaTeXe}, (Addison-Wesley, Reading, MA, 1995).
+\bibitem[Goossens(1994)]{Compan} M. Goosens, F. Mittelbach, and
+A. Samarin, \emph{The \LaTeX\
+Companion}, (Addison-Wesley, Reading, MA, 1994).
+\bibitem[Goossens(1997)]{CompanG} M. Goossens, S. Rahtz, and
+F. Mittelbach, \emph{The
+\LaTeX\ Graphics Companion}, (Addison-Wesley, Reading, MA, 1997).
+\bibitem[Rahtz(1999)]{CompanW} S. Rahtz, M. Goossens, \emph{et
+al.},\emph{The \LaTeX\ Web Companion}, (Addison-Wesley, Reading, MA, 1999).
+\end{thebibliography}
+
+\end{document}
+
diff --git a/obsolete/macros/latex/contrib/revtex4-0/docs/differ.tex b/obsolete/macros/latex/contrib/revtex4-0/docs/differ.tex
new file mode 100644
index 0000000000..382d4b2173
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-0/docs/differ.tex
@@ -0,0 +1,567 @@
+%% ****** Start of file authguide.tex ****** %
+%%
+%% This file is part of the APS files in the REVTeX 4 distribution.
+%% Version 4.0 of REVTeX, August 2001
+%%
+%% Copyright (c) 2000, 2001 The American Physical Society.
+%%
+%% See the REVTeX 4 README file for restrictions and more information.
+%%
+\documentclass[%
+%prl%
+%,preprint%
+,twocolumn%
+,secnumarabic%
+%,tightenlines%
+,amssymb,aps,prl,nobibnotes]{revtex4}
+\usepackage{docs}
+%\usepackage{acrofont}%NOTE: Comment out this line for the release version!
+%\usepackage[colorlinks=true,linkcolor=blue]{hyperref}%
+%\nofiles
+\expandafter\ifx\csname package@font\endcsname\relax\else
+ \expandafter\expandafter
+ \expandafter\usepackage
+ \expandafter\expandafter
+ \expandafter{\csname package@font\endcsname}%
+\fi
+\DeclareRobustCommand\substyle{\name@idx{document substyle}}%
+\DeclareRobustCommand\classoption{\name@idx{document class option}}%
+\DeclareRobustCommand\classname{\name@idx{document class}}%
+\def\name@idx#1#2{%
+ {\ttfamily#2}%
+ \index{#2\space#1=\string\ttt{#2}\space#1}\index{#1>#2=\string\ttt{#2}}%
+}%
+
+\DeclareRobustCommand\revtex{REV\TeX}
+\begin{document}
+\title{Differences between \revtex~4 and \revtex~3}%
+\author{American Physical Society}%
+\email{revtex4@aps.org}
+\affiliation{1 Research Road, Ridge, NY 11961}
+\date{August 2001}%
+\maketitle
+\tableofcontents
+
+\section{Introduction}
+This document gives a brief summary of how \revtex~4 is different from
+what authors may already be familiar with. The two primary design
+goals for \revtex~4 are to 1) move to \LaTeXe\ and 2) improve the
+markup so that infomation can be more reliably extracted for the
+editorial and production processes. Both of these goals require that
+authors comfortable with earlier versions of \revtex\ change their
+habits. In addition, authors may already be familiar with the standard
+\classname{article.cls} in \LaTeXe. \revtex~4 differs in some
+important ways from this class as well. For more complete
+documentation on \revtex~4, see the main \textit{\revtex~4 Author's
+Guide}. The most important changes are in the markup of the front
+matter (title, authors, affiliations, abstract, etc.). Please see
+Sec.~\ref{sec:front}.
+
+\section{Version of \LaTeX}
+The most obvious difference between \revtex~4 and \revtex~3 is that
+\revtex~4 works solely with \LaTeXe; it is not useable as a \LaTeX2.09 package.
+Furthermore, \revtex~4 requires an up-to-date \LaTeX\ installation
+(1996/06/01 or later); its use under older versions is not supported.
+
+\section{Class Options and Defaults}
+Many of the class options in \revtex~3 have been retained in
+\revtex~4. However, the default behavior for these options can be
+different than in \revtex~3. Currently, there is only one society
+option, \classoption{aps}, and this is the default. Furthermore, the
+selection of a journal (such as \classoption{prl}) will automatically
+set the society as well (this will be true even after other societies
+are added).
+
+In \revtex~3, it was necessary to invoke the \classoption{floats}, but
+this is the default for \classoption{aps} journal in
+\revtex~4. \revtex~4 introduces two new class options,
+\classoption{endfloats} and \classoption{endfloats*} for moving floats
+to the end of the paper.
+
+The preamble commands \cmd{\draft} and \cmd{\tighten} have been replaced
+with new class options \classoption{draft} and
+\classoption{tightenlines}, respectively. The \cmd{\preprint} command
+is now used only for specifying institutional report numbers (typeset
+in the upper-righthand corner of the first page); it no longer
+influences whether PACS numbers are displayed below the abstract. PACS
+display is controlled by the \classoption{showpacs} and
+\classoption{noshowpacs} (default) class options.
+
+Paper size options (\classoption{letter}, \classoption{a4paper}, etc.)
+work in \revtex~4. The text ``Typeset by \revtex'' no longer appears
+by default - the option \classoption{byrevtex} will place this text in
+the lower-lefthand corner of the first page.
+
+\section{One- and Two-column formatting}
+
+\revtex~4 has excellent support for achieving the two-column
+formatting in the \textit{Physical~Review} and \textit{Reviews of
+Modern Physics} styles. It will balance the columns
+automatically. Whereas \revtex~3 had the \cmd{\widetext} and
+\cmd{\narrowtext} commands for switching between one- and two-cloumn
+modes, \revtex~4 simply has a \env{widetext} environment,
+\envb{widetext} \dots \enve{widetext}. One-column formatting can be
+specified by choosing either the \classoption{onecolumn} or
+\classoption{preprint} class option (the \revtex~3 option
+\classoption{manuscript} no longer exists). Two-column formatting is
+the default for most journal styles, but can be specified with the
+\classoption{twocolumn} option. Note that the spacing for
+\classoption{preprint} is now set to 1.5, rather than full
+double-spacing. The \classoption{tightenlines} option can be used to
+reduce this to single spacing.
+
+
+\section{Front Matter Markup}
+\label{sec:front}
+
+\revtex~4 has substantially changed how the front matter for an article
+is marked up. These are the most significant differences between
+\revtex~4 and other systems for typesetting manuscripts. It is
+essential that authors new to \revtex~4 be familiar with these changes.
+
+\subsection{Authors, Affiliations, and Author Notes}
+\revtex~4 has substantially changed the markup of author names,
+affiliations, and author notes (footnotes giving additional
+information about the author such as a permanent address or an email
+address).
+\begin{itemize}
+\item Each author name should appear separately in
+individual \cmd\author\ macros.
+
+\item Email addresses should be marked up using the \cmd\email\ macro.
+
+\item Alternative affiliation information should be marked up using
+the \cmd\altaffiliation\ macro.
+
+\item URLs for author home pages can be specified with a
+\cmd\homepage\ macro.
+
+\item The \cmd\thanks\ macro should only be used if one of the above
+don't apply.
+
+\item \cmd{\email}, \cmd{\homepage}, \cmd{\altaffiliation}, and
+\cmd{\thanks} commands are grouped together under a single footnote for
+each author. These footnotes can either appear at the bottom of the
+first page of the article or as the first entries in the
+bibliography. The journal style controls this placement, but it may be
+overridden by using the class options \classoption{bibnotes} and
+\classoption{nobibnotes}. Note that these footnotes are treated
+differently than the other footnotes in the article.
+
+\item The grouping of authors by affiliations is accomplished
+automatically. Each affiliation should be in its own
+\cmd{\affiliation} command. Multiple \cmd{\affiliation},
+\cmd{\email}, \cmd{\homepage}, \cmd{\altaffiliation}, and \cmd{\thanks}
+commands can be applied to each author. The macro \cmd\and\ has been
+eliminated.
+
+\item \cmd\affiliation\ commmands apply to all previous authors that
+don't have an affiliation already declared. Furthermore, for any
+particular author, the \cmd\affilation\ must follow any \cmd{\email},
+\cmd{\homepage}, \cmd{\altaffiliation}, or \cmd{\thanks} commands for
+that author.
+
+\item Footnote-style associations of authors with affilitations should
+not be done via explicit superscripts; rather, the class option
+\classoption{superscriptaddress} should be used to accomplish this
+automatically.
+
+\item A collaboration for a group of authors can be given using the
+\cmd\collaboration\ command.
+
+\end{itemize}
+
+Table~\ref{tab:front} summarizes some common pitfalls in moving from
+\revtex~3 to \revtex~4.
+\begin{table*}
+\begin{ruledtabular}
+\begin{tabular}{lll}
+\textbf{\revtex~3 Markup} & \textbf{\revtex~4 Markup} & \textbf{Explanation}\\
+& & \\
+\verb+\author{Author One and Author Two}+ & \verb+\author{Author One}+ & One name per\\
+& \verb+\author{Author Two}+ & \verb+\author+ \\
+& & \\
+\verb+\author{Author One$^{1}$}+ & \verb+\author{Author One}+& Use \classoption{superscriptaddress}\\
+\dots &\dots & class option \\
+\verb+\address{$^{1}$APS}+ &\verb+\affiliation{APS}+ & \\
+& & \\
+\verb+\thanks{Permanent address...}+ & \verb+\altaffiliation{}+& Use most
+specific macro \\
+\verb+\thanks{Electronic address: user@domain.edu}+ &
+\verb+\email{user@domain.edu}+& available\\
+\verb+\thanks{http://publish.aps.org/}+ &
+\verb+\homepage{http://publish.aps.org/}+& \\
+\end{tabular}
+\end{ruledtabular}
+\caption{Common mistakes in marking up the front matter}
+\label{tab:front}
+\end{table*}
+
+
+\subsection{Abstracts}
+\revtex~4, like \revtex~3, uses the \env{abstract} environment
+\envb{abstract} \dots \enve{abstract} for the abstract. The
+\env{abstract} environment must appear before the \cmd{\maketitle}
+command in \revtex~4. The abstract will be formatted
+appropriately for either one-column (preprint) or two-column
+formatting. In particular, in the two-column case, the abstract will
+automatically be placed in a single column that spans the width of the
+page. It is unnecessary to use a \cmd{\minipage} or any other macro to
+achieve this result.
+
+
+\section{Citations and References}
+
+\revtex~4 uses the same \cmd{\cite},\cmd{\ref}, and \cmd{\bibitem}
+commmands as standard \LaTeX\ and \revtex~3. Citation handling is
+based upon Patick Daly's \classname{natbib} package. The
+\env{references} environment is no longer used. Instead, use the
+standard \LaTeXe\ environment \env{thebibliography}.
+
+Two new \BibTeX\ files have been included with \revtex~4,
+\file{apsrev.bst} and \file{apsrmp.bst}. These will format references
+in the style of \textit{Physical Review} and \textit{Reviews of Modern
+Physics} respectively. In addition, these \BibTeX\ styles
+automatically apply a special macro \cmd{\bibinfo} to each element of the
+bibliography to make it easier to extract information for use in the
+editorial and production processes. Authors are strongly urged to use
+\BibTeX\ to manage their bibliographies so that the \cmd{\bibinfo}
+directives will be automatically included. Other bibliography styles
+can be specified by using the \cmd\bibliographystyle\ command, but
+unlike standard \LaTeXe, you must give this command \emph{before} the
+\envb{document} statement.
+
+Please note that the package \classname{cite.sty} is not needed with
+\revtex~4 and is incompatible.
+
+\section{Footnotes and Tablenotes}
+\label{sec:foot}
+
+\revtex~4 uses the standard \cmd{\footnote} macro for
+footnotes. Footnotes can either appear on the bottom of the page on
+which they occur or they can appear as entries at the end of the
+bibliography. As with author notes, the journal style option controls
+the placement; however, this can be overridden with the class options
+\classoption{footinbib} and \classoption{nofootinbib}.
+
+Within a table, the \cmd{\footnote} command behaves differently. Footnotes
+appear at the bottom of the table. \cmd{\footnotemark} and
+\cmd{\footnotetext} are also available within the table environment so
+that multiple table entries can share the same footnote text. There
+is no longer a need to use a \cmd{\tablenote}, \cmd{\tablenotemark},
+and \cmd{\tablenotetext} macros.
+
+\section{Section Commands}
+
+The title in a \cmd\section\marg{title} command will be automatically
+uppercased in \revtex~4. To prevent a particular letter from being
+uppercased, enclose it in curly braces.
+
+\section{Figures}
+
+Figures should be enclosed within either a \env{figure} or \env{figure*}
+environment (the latter will cause the figure to span the full width
+of the page in two-column mode). \LaTeXe\ has two convenient packages
+for including the figure file itself: \classname{graphics} and
+\classname{graphicx}. These two packages both define a macro
+\cmd{\includegraphics} which calls in the figure. They differ in how
+arguments for rotation, translation, and scaling are specified. The
+package \classname{epsfig} has been re-implemented to use these
+\classname{graphicx} package. The package \classname{epsfig} provides
+an interface similar to that under the \revtex~3 \classoption{epsf}
+class option. Authors should use these standard
+\LaTeXe\ packages rather than some other alternative.
+
+\section{Tables}
+
+Short tables should be enclosed within either a \env{table} or \env{table*}
+environmnent (the latter will cause the table to span the full width
+of the page in two-column mode). The heart of the table is the
+\env{tabular} environment. This will behave for the most part as in
+standard \LaTeXe. Note that \revtex~4 no longer automatically adds
+double (Scotch) rules around tables. Nor does the \env{tabular}
+environment set various table parameters as before. Instead, a new
+environment \env{ruledtabular} provides this functionality. This
+environment should surround the \env{tabular} environment:
+\begin{verbatim}
+\begin{table}
+\caption{...}
+\label{tab:...}
+\begin{ruledtabular}
+\begin{tabular}
+...
+\end{tabular}
+\end{ruledtabular}
+\end{table}
+\end{verbatim}
+
+Under \revtex~3, tables automatically break across pages. \revtex~4
+provides some of this functionality. However, this requires adding the
+table a float placement option of [H] (meaning put the table
+``here'') to the \envb{table} command.
+
+Long tables are more robustly handled by using the
+\classname{longtable.sty} package included with the standard \LaTeXe\
+distribution (put \verb+\usepackage{longtable}+ in the preamble). This
+package gives precise control over the layout of the table. \revtex~4
+goes out of its way to provide patches so that the \env{longtable}
+environment will work within a two-column format. A new
+\env{longtable*} environment is also provided for long tables that are
+too wide for a narrow column. (Note that the \env{table*} and
+\env{longtable*} environments should always be used rather than
+attempting to use the \env{widetext} environment.)
+
+To create tables with columns of numbers aligned on decimal points,
+load the standard \LaTeXe\ \classname{dcolumn} package and use the
+\verb+d+ column specifier. The content of each cell in the column is
+implicitly in math mode: Use of math delimiters (\verb+$+) is unnecessary
+in a \verb+d+ column.
+
+Footnotes within a table can be specified with the
+\cmd{\footnote} command (see Sec.~\ref{sec:foot}).
+
+\section{Font selection}
+
+The largest difference between \revtex~3 and \revtex~4 with respect to
+fonts is that \revtex~4 allows one use the \LaTeXe\ font commands such
+as \cmd{\textit}, \cmd{\texttt}, \cmd{\textbf} etc. These commands
+should be used in place of the basic \TeX/\LaTeX\ 2.09 font commands
+such as \cmd{\it}, \cmd{\tt}, \cmd{\bf}, etc. The new font commands
+better handle subtleties such as italic correction and scaling in
+super- and subscripts.
+
+\section{Math and Symbols}
+
+\revtex~4 depends more heavily on packages from the standard \LaTeXe\
+distribution and AMS-\LaTeX\ than \revtex~3 did. Thus, \revtex~4 users
+should make sure their \LaTeXe\ distributions are up to date and they
+should install AMS-\LaTeX\ 2.0 as well. In general, if any fine control of
+equation layout, special math symbols, or other specialized math
+constructs are needed, users should look to the \classname{amsmath}
+package (see the AMS-\LaTeX\ documentation).
+
+\revtex~4 provides a small number of additional diacritics, symbols,
+and bold parentheses. Table~\ref{tab:revsymb} summarizes this.
+
+\begin{table}
+\caption{Special \revtex~4 symbols, accents, and boldfaced parentheses
+defined in \file{revsymb.sty}}
+\label{tab:revsymb}
+\begin{ruledtabular}
+\begin{tabular}{ll|ll}
+\cmd\lambdabar & $\lambdabar$ &\cmd\openone & $\openone$\\
+\cmd\altsuccsim & $\altsuccsim$ & \cmd\altprecsim & $\altprecsim$ \\
+\cmd\alt & $\alt$ & \cmd\agt & $\agt$ \\
+\cmd\tensor\ x & $\tensor x$ & \cmd\overstar\ x & $\overstar x$ \\
+\cmd\loarrow\ x & $\loarrow x$ & \cmd\roarrow\ x & $\roarrow x$ \\
+\cmd\biglb\ ( \cmd\bigrb ) & $\biglb( \bigrb)$ &
+\cmd\Biglb\ ( \cmd\Bigrb )& $\Biglb( \Bigrb)$ \\
+& & \\
+\cmd\bigglb\ ( \cmd\biggrb ) & $\bigglb( \biggrb)$ &
+\cmd\Bigglb\ ( \cmd\Biggrb\ ) & $\Bigglb( \Biggrb)$ \\
+\end{tabular}
+\end{ruledtabular}
+\end{table}
+
+Here is a partial list of the more notable changes between \revtex~3
+and \revtex~4 math:
+\begin{itemize}
+\item Bold math characters should now be handle via the standard
+\LaTeXe\ \classname{bm} package (use \cmd{\bm} instead of \cmd{\bbox}).
+\cmd{\bm} will handle Greek letters and other symbols.
+
+\item Use the class options \classoption{amsmath},
+\classoption{amsfonts} and \classoption{amssymb} to get even more math
+fonts and symbols. \cmd{\mathfrak} and \cmd{\mathbb} will, for instance, give
+Fraktur and Blackboard Bold symbols.
+
+\item Use the \classoption{fleqn} class option for making equation
+flush left or right. \cmd{\FL} and \cmd{\FR} are no longer provided.
+
+\item In place of \cmd{\eqnum}, load the \classname{amsmath} package
+[\verb+\usepackage{amsmath}+] and use \cmd{\tag}.
+
+\item In place of \cmd{\case}, use \cmd{\textstyle}\cmd{\frac}.
+
+\item In place of the \env{mathletters} environment, load the
+\classname{amsmath} package and use \env{subequations} environment.
+
+\item In place of \cmd{\slantfrac}, use \cmd{\frac}.
+
+\item The macros \cmd{\corresponds}, \cmd{\overdots}, and
+\cmd{\overcirc} have been removed. See Table~\ref{tab:obsolete}.
+
+\end{itemize}
+
+\section{Obsolete \revtex~3.1 commands}
+
+Table~\ref{tab:obsolete} summarizes more differences between \revtex~4
+and \revtex~3, particularly which \revtex~3 commands are now obsolete.
+
+\begin{table*}
+\caption{Differences between \revtex~3.1 and \revtex~4
+markup}\label{tab:diff31}
+\label{tab:obsolete}
+\begin{ruledtabular}
+\begin{tabular}{lp{330pt}}
+\textbf{\revtex~3.1 command}&\textbf{\revtex~4 replacement}
+\lrstrut\\
+\cmd\documentstyle\oarg{options}\aarg{\classname{revtex}}&\cmd\documentclass\oarg{options}\aarg{\classname{revtex4}}
+\\
+option \classoption{manuscript}& \classoption{preprint}
+\\
+\cmd\tighten\ preamble command & \classoption{tightenlines} class option
+\\
+\cmd\draft\ preamble command & \classoption{draft} class option
+\\
+\cmd\author & \cmd\author\marg{name} may appear
+multiple times; each signifies a new author name.\\
+ & \cmd\collaboration\marg{name}:
+Collaboration name (should appear after last \cmd\author)\\
+ & \cmd\homepage\marg{URL}: URL for preceding author\\
+ & \cmd\email\marg{email}: email
+address for preceding author\\
+ & \cmd{\altaffiliation}: alternate
+affiliation for preceding \cmd\author\\
+\cmd\thanks & \cmd\thanks, but use only for
+information not covered by \cmd{\email}, \cmd{\homepage}, or \cmd{\altaffilitiation}\\
+\cmd\and & obsolete, remove this command\\
+\cmd\address & \cmd\affiliation\marg{institution}\ gives the affiliation for the group of authors above\\
+ & \cmd\affiliation\oarg{note} lets you specify a footnote to this institution\\
+ & \cmd\noaffiliation\ signifies that the above authors have no affiliation\\
+
+\cmd\preprint & \cmd\preprint\marg{number} can appear multiple times, and must precede \cmd\maketitle\\
+\cmd\pacs & \cmd\pacs\ must precede \cmd\maketitle\\
+\env{abstract} environment & \env{abstract} environment must precede \cmd\maketitle\\
+\cmd\wideabs & obsolete, remove this command\\
+\cmd\maketitle & \cmd\maketitle\ must follow
+\emph{all} front matter data commands\\
+\cmd\narrowtext & obsolete, remove this command\\
+\cmd\mediumtext & obsolete, remove this command\\
+\cmd\widetext & obsolete, replace with \env{widetext} environment\\
+\cmd\FL & obsolete, remove this command\\
+\cmd\FR & obsolete, remove this command\\
+\cmd\eqnum & replace with \cmd\tag, load \classname{amsmath}\\
+\env{mathletters} & replace with \env{subequations}, load
+\classname{amsmath}\\
+\env{tabular} environment & No longer puts in doubled-rules. Enclose \env{tabular} in \env{ruledtabular} to get old behavior.\\
+\env{quasitable} environment & obsolete, \env{tabular} environment no longer
+puts in rules\\
+\env{references} environment & replace with \env{thebibliography}\verb+{}+\\
+\cmd\case & replace with \cmd\textstyle\cmd\frac\\
+\cmd\slantfrac & replace with \cmd\frac\\
+\cmd\tablenote & replace with \cmd\footnote\\
+\cmd\tablenotemark & replace with \cmd\footnotemark\\
+\cmd\tablenotetext & replace with \cmd\footnotetext\lrstrut\\
+\cmd\overcirc & Use standard \LaTeXe\ \cmd\mathring\ \\
+\cmd\overdots & Use \cmd\dddot\ with \classoption{amsmath}\\
+\cmd\corresponds & Use \cmd\triangleq\ with \classoption{amssymb}\\
+\classoption{epsf} class option & \verb+\usepackage{epsfig}+\\
+\end{tabular}
+\end{ruledtabular}
+\end{table*}
+
+
+\section{Converting a \revtex~3.1 Document to \revtex~4}\label{sec:conv31}%
+
+\revtex~3 documents can be converted to \revtex~4 rather
+straightforwardly. The following checklist covers most of the major
+steps involved.
+
+\begin{itemize}
+\item Change \cmd\documentstyle\verb+{revtex}+ to
+\cmd\documentclass\verb+{revtex4}+, and run the document under
+\LaTeXe\ instead of \LaTeX2.09.
+
+\item
+Replace the \cmd\draft\ command with the \classoption{draft} class option.
+
+\item
+Replace the \cmd\tighten\ command with the \classoption{tightenlines}
+class option.
+
+\item
+For each \cmd\author\ command, split the multiple authors into
+individual \cmd\author\ commands. Remove any instances of \cmd\and.
+
+\item For superscript-style associations between authors and
+affiliations, remove explicit superscripts and use the
+\classoption{superscriptaddress} class option.
+
+\item
+Use \cmd\affiliation\ instead of \cmd\address.
+
+\item
+Put \cmd\maketitle\ after the \env{abstract} environment and any
+\cmd\pacs\ commands.
+
+\item If double-ruled table borders are desired, enclose \env{tabular}
+enviroments in \env{ruledtabular} environments.
+
+\item
+Convert long tables to \env{longtable}, and load the
+\classname{longtable} package. Alternatively, give the \env{table}
+an [H] float placement parameter so that the table will break automatically.
+
+\item
+Replace any instances of the \cmd\widetext\ and \cmd\narrowtext\
+commands with the \env{widetext} environment.
+Usually, the \envb{widetext} statement will replace the \cmd\widetext\
+command, and the \enve{widetext} statement replaces the matching
+\cmd\narrowtext\ command.
+
+Note in this connection that due to a curious feature of \LaTeX\
+itself, \revtex~4 having a \env{widetext} environment means that it
+also has a definition for the \cmd\widetext\ command, even though the
+latter cammand is not intended to be used in your document.
+Therefore, it is particularly important to remove
+all \cmd\widetext\ commands when converting to \revtex~4.
+
+\item
+Remove all obsolete commands: \cmd\FL, \cmd\FR, \cmd\narrowtext, and
+\cmd\mediumtext\ (see Table~\ref{tab:diff31}).
+
+\item
+Replace \cmd\case\ with \cmd\frac. If a fraction needs to be set
+in text style despite being in a display equation, use the
+construction \cmd\textstyle\cmd\frac. Note that \cmd\frac\ does not
+support the syntax \cmd\case\verb+1/2+.
+
+\item
+Replace \cmd\slantfrac\ with \cmd\frac.
+
+\item
+Change \cmd\frak\ to \cmd\mathfrak\marg{char}\index{Fraktur} and
+\cmd\Bbb\ to \cmd\mathbb\marg{char}\index{Blackboard Bold}, and invoke
+one of the class options \classoption{amsfonts} or
+\classoption{amssymb}.
+
+\item
+Replace environment \env{mathletters} with environment
+\env{subequations} and load the \classname{amsmath} package.
+
+\item
+Replace \cmd\eqnum\ with \cmd\tag\ and load the \classname{amsmath} package.
+
+\item
+Replace \cmd\bbox\ with \cmd\bm\ and load the \classname{bm} package.
+
+\item
+If using the \cmd\text\ command, load the \classname{amsmath} package.
+
+\item
+If using the \verb+d+ column specifier in \env{tabular} environments,
+load the \classname{dcolumn} package. Under \classname{dcolumn}, the
+content of each \verb+d+ column cell is implicitly in math mode:
+remove any \verb+$+ math delimiters appearing in cells in a \verb+d+
+column.
+
+\item
+Replace \cmd\tablenote\ with \cmd\footnote, \cmd\tablenotemark\ with
+\cmd\footnotemark, and \cmd\tablenotetext\ with \cmd\footnotetext.
+
+\item
+Replace \envb{references} with \envb{thebibliography}\verb+{}+;
+\enve{references} with \enve{thebibliography}.
+\end{itemize}
+\end{document}
diff --git a/obsolete/macros/latex/contrib/revtex4-0/docs/docs.sty b/obsolete/macros/latex/contrib/revtex4-0/docs/docs.sty
new file mode 100644
index 0000000000..f401506cb6
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-0/docs/docs.sty
@@ -0,0 +1,129 @@
+% authguide.rty - macros for processing revguide.tex under \documentclass{revtex4}
+% Text entities
+\DeclareRobustCommand\SNG{\emph{Physical Review Style and Notation Guide}}
+\DeclareRobustCommand\LUG{\emph{\LaTeX{} User's Guide \& Reference Manual}}
+\DeclareRobustCommand\revtex{REV\TeX}
+\DeclareRobustCommand\marglat{\marginpar[\textbf{2e}]{\textbf{2e}}}
+\DeclareRobustCommand\margrev{\marginpar[\textbf{4}]{\textbf{4}}}
+\DeclareRobustCommand\AmS{%
+ {\protect\the\textfont\tw@ A\kern-.1667em\lower.5ex\hbox{M}\kern-.125emS}%
+}%
+\DeclareRobustCommand\AmSLaTeX{\AmS-\LaTeX}
+\DeclareRobustCommand\BibTeX{{\rm B}{\sc ib}\TeX}
+%
+% Various forms of self-indexing commands:
+% \begin{macrocode}
+\DeclareRobustCommand{\m}[1]{%
+ \meta{#1}%
+ \index{#1=\string\meta{#1} placeholder}\index{placeholder>#1=\string\meta{#1}}%
+}%
+\DeclareRobustCommand\meta[1]{%
+ \mbox{\m@th\LANGLE\itshape#1\/\RANGLE}%
+}%
+\def\LANGLE{$\langle$}%
+\def\RANGLE{$\rangle$}%
+\DeclareRobustCommand{\marg}[1]{%
+ {\ttfamily\string{}\meta{#1}{\ttfamily\string}}%
+ \index{#1=\string\ttt{#1}, argument}\index{argument>#1=\string\ttt{#1}}%
+}%
+\DeclareRobustCommand{\aarg}[1]{%
+ {\ttfamily\string{}#1{\ttfamily\string}}%
+}%
+\let\oarg\undefined
+\DeclareRobustCommand{\oarg}[1]{%
+ {\ttfamily[%]
+ }\meta{#1}{\ttfamily%[
+ ]}%
+ \index{#1=\string\ttt{#1}, optional argument}%
+ \index{argument, optional>#1=\string\ttt{#1}}%
+}%
+\DeclareRobustCommand\cmd{\begingroup\makeatletter\@cmd}%
+\long\def\@cmd#1{%
+ \endgroup
+ \cs{\expandafter\cmd@to@cs\string#1}%
+ \expandafter\cmd@to@index\string#1\@nil
+}%
+\def\cmd@to@cs#1#2{\char\number`#2\relax}%
+\def\cmd@to@index#1#2\@nil{%
+ \index{#2=\string\cmd#1#2}%\index{command>#2=\string\cmd#1#2}%
+}%
+\DeclareRobustCommand\cs[1]{{\ttfamily\char`\\#1}}%
+\def\scmd#1{%
+ \cs{\expandafter\cmd@to@cs\string#1}%
+ \expandafter\scmd@to@index\string#1\@nil
+}%
+\def\scmd@to@index#1#2\@nil#3{%
+ \index{\string$#3=\string\cmd#1#2---#3}%
+%\index{command>\string$#3=\string\cmd#1#2---#3}%
+}%
+\DeclareRobustCommand\env{\name@idx{environment}}%
+\DeclareRobustCommand\envb[1]{%
+ {\ttfamily\string\begin\string{}\env{#1}{\ttfamily\string}}%
+}%
+\DeclareRobustCommand\enve[1]{{\ttfamily\string\end\string{}\env{#1}{\ttfamily\string}}}%
+\DeclareRobustCommand*{\file}[1]{%
+ {\ttfamily#1}%
+ \index{#1=\string\ttt{#1}}\index{file>#1=\string\ttt{#1}}%
+}%
+\DeclareRobustCommand\substyle{\name@idx{document substyle}}%
+\DeclareRobustCommand\classoption{\name@idx{document class option}}%
+\DeclareRobustCommand\classname{\name@idx{document class}}%
+\def\name@idx#1#2{%
+ {\ttfamily#2}%
+ \index{#2\space#1=\string\ttt{#2}\space#1}\index{#1>#2=\string\ttt{#2}}%
+}%
+%
+% Needed for index:
+%
+\def\ttt{\texttt}%
+\def\pfill{\ }%
+\def\efill{\ }%
+\let\scan@allowedfalse\relax
+%\makeindex
+\AtEndDocument{\@input@{\jobname.ind}\null}%
+%
+% Processing options
+%
+%
+% Layout: override revtex4|aps
+\c@secnumdepth2
+\prepdef\@verbatim{\topsep.5\baselineskip}%
+\renewenvironment{quotation}{%
+ \list{}{%
+ \listparindent 10\p@
+ \itemindent\listparindent
+ \leftmargin10\p@
+ \rightmargin\leftmargin
+ \parsep \z@ \@plus\p@
+ \small
+ }%
+ \item[]%
+}{%
+ \endlist
+}%
+\renewenvironment{quote}{%
+ \list{}{%
+ \leftmargin\z@
+ \rightmargin\leftmargin
+ }\item[]%
+}{%
+ \endlist
+}%
+\leftmargini\parindent
+\def\descriptionlabel#1{%
+ \hspace\labelsep\ignorespaces
+ #1\unskip
+}%
+\def\toprule{\hline\hline\frstrut}%
+\def\colrule{\hline\frstrut}%
+\def\frstrut{\vrule height2.5ex width\z@ depth\z@\relax}%
+\def\lrstrut{\vrule height\z@ width\z@ depth.5ex\relax}%
+%
+% Klootches
+%
+\let\savenofiles\nofiles
+%
+% Patches:
+%
+%
+\endinput
diff --git a/obsolete/macros/latex/contrib/revtex4-0/docs/summary.tex b/obsolete/macros/latex/contrib/revtex4-0/docs/summary.tex
new file mode 100644
index 0000000000..ba3c7de091
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-0/docs/summary.tex
@@ -0,0 +1,427 @@
+%% ****** Start of file cos.tex ****** %
+%%
+%% This file is part of the APS files in the REVTeX 4 distribution.
+%% Version 4.0 beta 5 of REVTeX, December, 2000.
+%%
+%% Copyright (c) 2000,2001 The American Physical Society.
+%%
+%% See the REVTeX 4 README file for restrictions and more information.
+%%
+\listfiles
+\documentclass[twocolumn,secnumarabic,amssymb, amsmath, nofootinbib,tightenlines,
+nobibnotes, aps, prl]{revtex4}
+%\usepackage{acrofont}%NOTE: Comment out this line for the release version!
+%\usepackage{amsmath}%
+\usepackage{longtable}%
+\usepackage{bm}%
+\usepackage{docs}
+%\usepackage[colorlinks=true,linkcolor=blue]{hyperref}%
+\nofiles
+\expandafter\ifx\csname package@font\endcsname\relax\else
+ \expandafter\expandafter
+ \expandafter\usepackage
+ \expandafter\expandafter
+ \expandafter{\csname package@font\endcsname}%
+\fi
+
+\begin{document}
+
+\title[Command Option Summary]{\revtex~4 Command and Options Summary}%
+
+\author{American Physical Society}%
+\email{revtex4@aps.org}
+\affiliation{One Research Road, Ridge, NY 11961}
+\date{July 2001}%
+\maketitle
+
+This is the \textit{\revtex~4 Command and Options Summary}. It details
+usage for many of the new commands and options that are available in
+\revtex~4. Please see the \textit{\revtex~4 Author's Guide} for
+complete information on how to use \revtex~4. Class options for the
+\verb+\documentclass+ line are marked with square
+brackets. Environments are indicated by \verb+\begin{<env>}+ and always
+require a matching \verb+\end{<env>}+.
+
+\setlength\LTleft{0pt}
+\setlength\LTright{0pt}
+\begin{longtable*}{@{\extracolsep{1in}}p{3in}p{3in}}
+\caption{\revtex~4 Command Summary}\\
+\hline\hline
+& \\
+\textbf{\revtex~4/\LaTeXe\ Markup} & \textbf{Details and Usage}\\
+& \\
+\endfirsthead
+\multicolumn{2}{c}{\revtex~4 Command Summary continued...}\\
+\hline
+& \\
+\textbf{\revtex~4/\LaTeXe\ Markup} & \textbf{Details and Usage}\\
+& \\
+\endhead
+&\\
+\hline
+\endfoot
+&\\
+\hline\hline
+\endlastfoot
+\multicolumn{2}{c}{\textsc{Frequently Used Class Options}}\\
+&\\
+\verb+[aps]+ & \textit{American Physical Society} styling. Default.\\
+\verb+[prl]+,\verb+[pra]+,\verb+[prb]+,\verb+[prc]+,\verb+[prd]+,\verb+[pre]+,\verb+[prstab]+&
+Further customize \verb+[aps]+ styling for \textit{Physical Review} journals.\\
+\verb+[rmp]+ & Further customize \verb+[aps]+ styling for \textit{Reviews of Modern Physics}.\\
+\verb+[twocolumn]+ & Two column formatting.\\
+\verb+[onecolumn]+ & Single column formatting.\\
+\verb+[preprint]+ & Single column formatting with increased interline spacing.\\
+\verb+[10pt]+,\verb+[11pt]+,\verb+[12pt]+ & Set font
+size. \verb+[preprint]+ gives \verb+[12pt]+, \verb+[twocolumn]+ gives
+\verb+[10pt]+ by default.\\
+\verb+[groupedaddress]+ & Group authors with same affiliations
+together. Default. \\
+\verb+[superscriptaddress]+ & Associate authors with affiliations via
+superscript numbers. Appropriate for collaborations or if several
+authors share some, but not all, affiliations.\\
+\verb+[draft]+ & Mark overfull lines.\\
+\verb+[amsfonts]+,\verb+[noamsfonts]+ & Load (don't load)
+\verb+amsfonts+ package. Adds AMS font support.\\
+\verb+[amssymb]+, \verb+[noamssymb]+ & Load (don't load)
+\verb+amssymb+ package. Adds additional AMS symbols.\\
+\verb+[amsmath]+, \verb+[noamsmath]+ & Load (don't load)
+\verb+amsmath+ package. Adds AMS-\LaTeX\ features.\\
+&\\
+\multicolumn{2}{c}{\textsc{Other Class Options}}\\
+&\\
+\verb+[preprintnumbers]+,\verb+[nopreprintnumbers]+ & Control display
+of preprint numbers given by \verb+\preprint+
+command. \verb+[preprintnumbers]+ is default for \verb+[preprint]+;
+otherwise \verb+[nopreprintnumbers]+ is default.\\
+\verb+[floatfix]+ & Invoke emergency processing to avoid the \LaTeX\
+error \verb+``Too many unprocessed floats''+ or all subsequent floats being moved to the
+end of the job. \revtex~4 will display a message recommending this option if
+warranted.\\
+\verb+[bibnotes]+,\verb+[nobibnotes]+ & Control location of author
+footnotes. Default varies with journal style.\\
+\verb+[footinbib]+,\verb+[nofootinbib]+ & Control location of footnotes. Default
+varies with journal style.\\
+\verb+[altaffilletter]+, \verb+[altaffillsymbol]+ & Use letters or symbols for
+\verb+\altaffiliation+ superscripts. \verb+[altaffillsymbol]+ is default.\\
+\verb+[unsortedaddress]+ & Like \verb+[groupedaddress]+, but doesn't combine
+authors together who share the same affiliations.\\
+\verb+[runinaddress]+ & Like \verb+[groupedaddress]+, but joins
+multiple affiliations together into a single sequence separated by commas.\\
+\verb+[showpacs]+,\verb+[noshowpacs]+ & Control display of PACS: line.\\
+\verb+[showkeys]+,\verb+[noshowkeyws]+ & Control display of Keywords: line.\\
+\verb+[tightenlines]+ & Single space manuscript (for use with \verb+[preprint]+).\\
+\verb+[floats]+ & Position floats near call outs. Default.\\
+\verb+[endfloats]+ & Move all floats to the end of the document.\\
+\verb+[endfloats*]+ & Move all floats to the end of the document and put
+each on a separate page.\\
+\verb+[titlepage]+,\verb+[notitlepage]+ & Control appearance of title page.\\
+\verb+[final]+ & Don't mark overfull lines. Default.\\
+\verb+[letterpaper]+,\verb+[a4paper]+, \verb+[a5paper]+ & Select paper size. \verb+[letterpaper]+ is
+default.\\
+\verb+[oneside]+,\verb+[twoside]+ & Control book syle layout. \verb+[oneside]+ is default.\\
+\verb+[fleqn]+ & Flush displayed equations left. \\
+\verb+[eqsecnum]+ & Number equations by section.\\
+\verb+[balancelastpage]+,\verb+[nobalancelastpage]+ & Control
+\verb+[twocolumn]+ balancing on last page. \verb+[balancelastpage]+
+is default.\\
+\verb+[raggedbottom]+,\verb+[flushbottom]+ & Control \verb+[twocolumn]+
+balancing. \verb+[flushbottom]+ is default.\\
+\verb+[raggedfooter]+,\verb+[noraggedfooter]+ & Control positioning of
+footer. \verb+[noraggedfooter]+ is default.\\
+\verb+[byrevtex]+ & Display ``Typeset by \revtex~4''.\\
+\verb+[citeautoscript]+ & Fix up spacing and punctuation when switching from
+non-superscript style citations to superscript citation
+styles. \verb+\cite+ commands and associated spacing and punctuation
+should be as for the non-superscript style.\\
+\verb+[galley]+ & Typeset in a single narrow column.\\
+&\\
+\multicolumn{2}{c}{\textsc{Frontmatter Commands}}\\
+&\\
+\verb+\title{<title>}+ & The manuscript title.\\
+\verb+\author{One Author}+ & Specify one author's name.\\
+\verb+\surname{Llyod Weber}+,\verb+\surname{Mao}+ & Indicate which part of a name within
+\verb+\author+ should be
+used for alphabetizing and indexing.\\
+\verb+\email[<optional text>]{author@any.edu}+& Specify an e-mail
+address for an author.\\
+\verb+\homepage[<optional text>]{http://any.edu/homepage/}+& Specify a URL
+for an author's web site.\\
+\verb+\altaffiliation[<optional text>]{affiliation information}+&
+Specify an alternate or temporary address for an author.\\
+\verb+\thanks{text}+& Additional information about an author not
+covered by the more specific macros above.\\
+\verb+\collaboration{<The Collaboration>}+ & Specify a collaboration name for a group of
+authors. Requires \verb+[superscriptaddress]+ and should be
+placed after the authors. \\
+\verb+\affiliation{text}+ & Specify a single affiliation. Applies to all
+previous authors without a specified affiliation.\\
+\verb+\noaffiliation+ & For an author or collaboration without an
+affiliation.\\
+\verb+\date{<date>}+ & Show the date on
+ the manuscript. \verb+\date{\today}+ gives the current date.\\
+\verb+\begin{abstract}+ & Start the manuscript's
+abstract. Must appear before \verb+\maketitle+ command.\\
+\verb+\pacs{<pacs codes>}+& PACS codes for
+manuscript. Multiple PACS codes should be specified together in a
+single \verb+\pacs+ macro.\\
+\verb+\keywords{<keywords>}+ & Suggested keywords for indexing.\\
+\verb+\preprint{<report number>}+ & Specify an institutional report
+number to
+appear in the upper-righthand corner of the first page. Multiple
+\verb+\preprint+ macros may be supplied, but space may limit how many
+can appear.\\
+\verb+\maketitle+ & Typeset the title/author/abstract block.\\
+&\\
+\multicolumn{2}{c}{\textsc{Sectioning Commands}}\\
+& \\
+\verb+\section{<heading>}+, \verb+\subsection{<heading>}+,
+\verb+\subsubsection{<heading>}+ & Start a new section or
+subsection.\\
+\verb+\section*{<heading>}+ & Start a new section without a number.\\
+\verb+\appendix+ & Makes all following sections appendices.\\
+\verb+\appendix*+ & Signifies there is a single appendix section to follow.\\
+\verb+\begin{acknowledgments}+ & Start an Acknowledgments section. Note
+spelling.\\
+\verb+\lowercase{<text>}+ & Escape a letter or word from being
+uppercased in a top-level \verb+\section+ heading.\\
+&\\
+\multicolumn{2}{c}{\textsc{Citation, Footnote, and Cross-referencing Commands}}\\
+& \\
+\verb+\bibliography{<bib file basename>}+ & Specify a list of .bib
+files in which to find references. Read in the resulting .bbl file.
+For use with Bib\TeX\ . \\
+\verb+\bibligraphystyle{<bst stylefile>}+ & Specify a Bib\TeX\ (.bst)
+sytle file to use. APS journal options select the proper default
+(\texttt{apsrev} or \texttt{apsrmp}).\\
+\verb+\begin{thebibliography}+ & Start the reference section (when not
+using Bib\TeX\ . \\
+\verb+\bibitem[<optional text>]{<key>}+ & Specify a single
+reference.\\
+\verb+\cite{<list of keys>}+ & Cite one or more
+references. \verb+<key>+ is same as that of \verb+\bibitem+.\\
+\verb+\onlinecite{<key>}+ & For superscript style citations, place the
+corresponding number on the baseline rather than as a superscript.\\
+\verb+\bibinfo[<tag>]{<text>}+ & A pure markup macro that adds tagging information to
+the components of a reference. \revtex~4 Bib\TeX\ style files
+automatically add them appropriately. Doesn't affect the typesetting.\\
+\verb+\url{<url>}+ & Typeset a URL (\revtex~4 automatically loads
+\texttt{url.sty}).Bib\TeX\ styles automatically add this markup.\\
+\verb+\eprint{<e-print id>}+ & Typeset an e-print identifier. Bib\TeX\ styles
+automatically add this markup.\\
+\verb+\footnote{<text>}+ & Create a footnote or endnote in bibliography
+depending on class options. \verb+\footnote+ within a table will
+create a footnote attached to the table.\\
+\verb+\footnotemark{<key>}+, \verb+\footnotetext[<key>]{<text>}+ & In a table, allows for
+multiple items to share the note. \\
+\verb+\label{<key>}+ & Label an item for
+cross-referencing. \verb+\label+ should appear within the argument of
+the cross-referenced item (e.g., \verb+\section{\label{<key>}...}+ or
+\verb+\caption{\label{<key>}...}+.\\
+\verb+\ref{<key>}+ & Refer to an item labeled by \verb+\label{<key>}+.\\
+\verb+\pageref{<key>}+ & Refer to the page on which an item labeled by
+\verb+\label{<key>}+ appears.\\
+& \\
+\multicolumn{2}{c}{\textsc{Math and Equation Commands}}\\
+&\\
+\verb+$+ & Inline math delimiter.\\
+\verb+\begin{equation}+ & Display numbered one-line equation.\\
+\verb+\[+, \verb+\]+ & Display unnumbered one-line equation.\\
+\verb+\begin{eqnarray}+ & Display multiple equations together or a
+long equation that requires multiple lines. Use \verb+widetext+
+environment for an equation that must span the page in two-column formatting.\\
+\verb+\nonumber+ & Suppress numbering of an equation with
+\verb+eqnarray+.\\
+\verb+\begin{eqnarray*}+ & Display multiple equations with no equation
+numbering at all.\\
+\verb+&+ & Alignment character for equations within \verb+eqnarray+.\\
+\verb+\\+ & End a row in \verb+eqnarray+.\\
+\verb+\\*+ & Prevent a page break at this point in an
+\verb+eqnarray+.\\
+\verb+\label{<key>}+ & Label an equation or group of equations for
+cross-referencing.\\
+\verb+\ref{<key>}+ & Refer to an equation by its label (e.g.,
+\verb+Eq~(ref{<key>})+).\\
+\verb+\tag{<key}}+ & Specify an alternative labeling separate from the
+automatic numbering of equations. Requires \verb+[amsmath]+.\\
+\verb+\text{<text>}+ & Non-italicized text within a math
+context. Requires \verb+[amsmath]+. Do not use \verb+\rm+,
+\verb+\textrm+, or \verb+\mbox+.\\
+&\\
+\multicolumn{2}{c}{\textsc{Some} AMS-\LaTeX\ \textsc{Commands}}\\
+&\\
+\verb+\begin{split}+ & Split equations with alignment.\\
+\verb+\begin{multiline}+ & Split equations without alignment.\\
+\verb+\begin{align}+ & Equation groups with alignment.\\
+\verb+\begin{gather}+ & Equation groups without alignment.\\
+\verb+\begin{subequations}+ & Create an equation array in which each
+equation is individually numbered (4a, 4b, 4c, etc.) as part of a
+single group of equations that can be referenced as a whole.\\
+\verb+\intertext+ & Textual interjections witin a display equation.\\
+\verb+\usepackage{amscd}+ & Create commutative diagrams.\\
+\verb+\begin{pmatrix}+ & Matrices with parentheses as delimiters.\\
+\verb+\begin{bmatrix}+ & Matrices with square brackets as delimiters.\\
+\verb+\begin{Bmatrix}+ & Matrices with curly braces as delimiters.\\
+\verb+\begin{vmatrix}+ & Matrices with vertical bars as delimiters.\\
+\verb+\begin{Vmatrix}+ & Matrices with double vertical bars as
+delimiters.\\
+\verb+\hdotsfor+ & Row of dots in a matrix.\\
+\verb+\Hat+ & Alternative \verb+\hat+ accent for stacking.\\
+\verb+\Check+ & Alternative \verb+\check+ accent for stacking.\\
+\verb+\Tilde+ & Alternative \verb+\tilde+ accent for stacking.\\
+\verb+\Acute+ & Alternative \verb+\acute+ accent for stacking.\\
+\verb+\Grave+ & Alternative \verb+\grave+ accent for stacking.\\
+\verb+\Dot+ & Alternative \verb+\dot+ accent for stacking.\\
+\verb+\Ddot+ & Alternative \verb+\ddot+ accent for stacking.\\
+\verb+\Breve+ & Alternative \verb+\breve+ accent for stacking.\\
+\verb+\Vec+ & Alternative \verb+\vec+ accent for stacking.\\
+\verb+\xleftarrow+ & Extensible left arrow.\\
+\verb+\xrightarrow+ & Extensible right arrow.\\
+\verb+\overset+ & Place a symbol over another.\\
+\verb+\underset+ & Place a symbol under another.\\
+\verb+\lvert+ & Vertical bar with spacing rules appropriate for use as
+a left delimiter.\\
+\verb+\rvert+ & Vertical bar with spacing rules appropriate for use as
+a right delimiter.\\
+\verb+\lVert+ & Double vertical bar with spacing rules appropriate for use as
+a left delimiter.\\
+\verb+\rVert+ & Double vertical bar with spacing rules appropriate for use as
+a right delimiter.\\
+\verb+\DeclareMathOperator+ & Declare a new math operator so that
+spacing and font is correct.\\
+\verb+\text+ & Words and phrases in display math.\\
+\verb+\boldsymbol+ & Make symbol bold. Also available in bm.sty.\\
+\verb+\sideset+ & Sets subscripts and superscripts at the corners of a
+summation or product.\\
+\verb+\substack+ & Create a stack of subexpressions (for example,
+stacked summation limits).\\
+\verb+\begin{subarray}+ & Like \verb+\substack+, but allows finer
+control of subexpression alignment.\\
+\verb+\mathfrak+ & Replaces \verb+\frak+.\\
+\verb+\mathbb+ & Replaces \verb+\Bbb+.\\
+& \\
+\multicolumn{2}{c}{\textsc{Font Commands}}\\
+& \\
+\verb+\textbf{<text>}+ & Text boldface font.\\
+\verb+\textit{<text>}+ & Text italicixed font.\\
+\verb+\textrm{<text>}+ & Text Roman font.\\
+\verb+\textsl{<text>}+ & Text Slanted font.\\
+\verb+\textsc{<text>}+ & Text Small Caps font.\\
+\verb+\textsf{<text>}+ & Text Sans Serif font.\\
+\verb+\textmd{<text>}+ & Text Medium Series font.\\
+\verb+\textnormal{<text>}+ & Text Normal Series font.\\
+\verb+\textup{<text>}+ & Text Upright Series font.\\
+\verb+\texttt{<text>}+ & Text Typewriter font.\\
+\verb+\mathit{<text>}+ & Math italics font. \\
+\verb+\mathbf{<text>}+ & Math boldface font.\\
+\verb+\mathtt{<text>}+ & Math typewriter font.\\
+\verb+\mathsf{<text>}+ & Math sans serif font.\\
+\verb+\mathcal{<text>}+ & Math calligraphic font. \\
+\verb+\mathfrak{<text>}+ & Math fraktur font. Requires
+\verb+[amsfonts]+ or \verb+[amssymb]+.\\
+\verb+\mathbb{<text>}+ & Math blackboard bold font. Requires
+\verb+[amsfonts]+ or \verb+[amssymb]+.\\
+\verb+\bm{<text>}+ & Bold math symbols (Greek and other symbols). Requires \verb+\usepackage{bm}+.\\
+& \\
+\multicolumn{2}{c}{\textsc{Table Commands}}\\
+&\\
+\verb+\begin{table}[<placement>]+ & Start a table float environment set to the
+current column width. The
+placement options may be any combination of h, t, b, p, or ! signifying
+here, top, bottom, page, and ``as soon as possible'',
+respectively. A placement option of H will allow a long table to break
+across pages. \LaTeX\ may not be able to honor placement
+requests.\\
+\verb+\begin{table*}+ & Start a non-floating table environment set to the
+current page width. Will be deferred to the following page.\\
+\verb+\begin{ruledtabular}+ & Adds \textit{Physical Review} style double
+(Scotch) rules around a table and adjusts the intercolumn spacing.\\
+\verb+\begin{tabular}[<position>]{<column specs>}+ & The
+\verb+\tabular+ envrionment sets the positions and the number of
+columns (as well as alignment) in the table.\\
+\verb+\begin{tabular*}{<width>}[<position>]{<column specs>}+ & Like
+\verb+tabular+, but with a set width.\\
+\verb+\squeezetable+ & Set table in a smaller font smaller. Place this
+macro before the \verb+\begin{table}+ line and sandwich everything
+between \verb+\begingroup+ and \verb+\endgroup+.\\
+\verb+\begin{longtable}{<column specs>}+ & Create a table set to the current column
+width that spans more than one
+page or column. \verb+\usepackage{longtable}+ required.\\
+\verb+\begin{longtable*}{<column specs>}+ & Create a table set to the
+current page width that spans more than one page. \verb+\usepackage{longtable}+ required.\\
+\verb+\caption{<text>}+ & Adds a caption for the table.\\
+\verb+\printtables+ & With \verb+[endfloats]+, control where the
+held back tables actually appear.\\
+\verb+\begin{turnpage}+ & Rotate a table or figure by 90 degrees
+(landscape mode). Will put figure or table on a page by
+itself. Requires \verb+\graphics+ package.\\
+&\\
+\multicolumn{2}{c}{\textsc{Graphics Commands}}\\
+& \\
+\verb+\begin{figure}[<placement>]+ & Start a figure float environment
+set to the current column width.
+The placement options may be any combination of h, t, b, p, or ! signifying
+here, top, bottom, page, and ``as soon as possible'',
+respectively. A placement option of H will allow a long table to break
+across pages. \LaTeX\ may not be able to honor placement
+requests.\\
+\verb+\begin{figure*}+ & Start a non-floating figure environment set
+to the current page width. Will be deferred to the following page.\\
+\verb+\includegraphics[<scale,rotation>]+\verb+{figure file}+& Defined
+by invoking either \verb+\usepackage{graphics}+ or
+\verb+\usepackage{graphicx}+, the standard \LaTeXe\ packages for calling
+in figures. \verb+graphicx+ is the same as \verb+graphics+, but uses
+key-value pairs for optional arguments.\\
+\verb+\usepackage{epsfig}+ & Provides an alternative interface to the
+\verb+graphics+ package similar to the epsf class option in \revtex~3.\\
+\verb+\printfigures+ & With \verb+[endfloats]+, control where the
+held back figures actually appear.\\
+& \\
+\multicolumn{2}{c}{\textsc{Miscellaneous Commands}}\\
+& \\
+\verb+\begin{widetext}+ & Change column width to be the page
+width. Will add guiding rules.\\
+\verb+\twocolumngrid+ & Low-level switch to a two column layout.\\
+\verb+\onecolumngrid+ & Low-level switch to a single page-wide column layout.\\
+\verb+\protect+ & Protect a fragile command within a macro with a
+``moving'' argument. \verb+\caption+ and \verb+\footnote+ are common
+macros that have moving arguments.\\
+\verb+\frac{numerator}{denominator}+ & Create a fraction. Use in place of \verb+\over+.\\
+&\\
+\multicolumn{2}{c}{\textsc{\revtex~4 and Miscellaneous Symbols}}\\
+&\\
+\verb+\texemdash+ & \textemdash\\
+\verb+\texendash+ & \textendash\\
+\verb+\textexclamdown+ & \textexclamdown\\
+\verb+\textquestiondown+ & \textquestiondown\\
+\verb+\textquotedblleft+ & \textquotedblleft\\
+\verb+\textquotedblright+ & \textquotedblright\\
+\verb+\textquoteleft+ & \textquoteleft\\
+\verb+\textquoteright+ & \textquoteright\\
+\verb+\textbullet+ & \textbullet\\
+\verb+\textperiodcentered+ & \textperiodcentered\\
+\verb+\textvisiblespace+ & \textvisiblespace\\
+\verb+\textcompworkmark+ & Break a ligature.\\ % ``fluffier''
+%vs. ``f\textcompworkmark luf\textcompworkmark fier''.\\
+\verb+\textcircled{<char>}+ & Circle a character. \textcircled{e}.\\
+\verb+\lambdabar+ & $\lambdabar$ \\
+\cmd\openone & $\openone$\\
+\cmd\altsuccsim & $\altsuccsim$ \\
+\cmd\altprecsim & $\altprecsim$ \\
+\cmd\alt & $\alt$ \\
+\cmd\agt & $\agt$ \\
+\cmd\tensor\ x & $\tensor x$ \\
+\cmd\overstar\ x & $\overstar x$ \\
+\cmd\loarrow\ x & $\loarrow x$ \\
+\cmd\roarrow\ x & $\roarrow x$ \\
+\verb+\mathring{x}+ & $\mathring{x}$ (Replaces
+\verb+\overcir+). Standard \LaTeXe\ . \\
+\verb+\dddot{x}+ & $\dddot{x}$ (Replaces \verb+\overdots+). Requires \verb+[amsmath]+.\\
+\verb+\triangleq+ & $\triangleq$ (Replaces
+\verb+\corresponds+). Requires \verb+[amssymb]+.\\
+\cmd\biglb\ ( \cmd\bigrb ) & $\biglb( \bigrb)$ \\
+\cmd\Biglb\ ( \cmd\Bigrb ) & $\Biglb( \Bigrb)$ \\
+\cmd\bigglb\ ( \cmd\biggrb ) & $\bigglb( \biggrb)$ \\
+\cmd\Bigglb\ ( \cmd\Biggrb\ ) & $\Bigglb( \Biggrb)$ \\
+\end{longtable*}
+\end{document}
diff --git a/obsolete/macros/latex/contrib/revtex4-0/revsymb.sty b/obsolete/macros/latex/contrib/revtex4-0/revsymb.sty
new file mode 100644
index 0000000000..4349a82bb0
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-0/revsymb.sty
@@ -0,0 +1,157 @@
+%%
+%% This is file `revsymb.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% revtex4.dtx (with options: `revsymb')
+%%
+%% This file is part of the APS files in the REVTeX 4 distribution.
+%% For the version number, search on the string
+%% Original version by David Carlisle
+%% Modified by Arthur Ogawa (mailto:ogawa@teleport.com)
+%%
+%% Copyright (c) 1999 The American Physical Society.
+%% http://publish.aps.org/revtex4/
+%% mailto:revtex4@aps.org
+%%
+%% See the REVTeX 4 README file for restrictions and more information.
+%%
+\ProvidesPackage{revsymb}
+ [2001/08/03 v4.0 (http://publish.aps.org/revtex4/ for documentation)]%FileInfo
+\def\REVSYMB@warn#1{\PackageWarningNoLine{revsymb}{#1}}%
+\DeclareRobustCommand\lambdabar{%
+ \bgroup
+ \def\@tempa{%
+ \hbox{%
+ \raise.73\ht\z@
+ \hb@xt@\z@{%
+ \kern.25\wd\z@
+ \vrule \@width.5\wd\z@\@height.1\p@\@depth.1\p@
+ \hss
+ }%
+ \box\z@
+ }%
+ }%
+ \mathchoice
+ {\setbox\z@\hbox{$\displaystyle \lambda$}\@tempa}%
+ {\setbox\z@\hbox{$\textstyle \lambda$}\@tempa}%
+ {\setbox\z@\hbox{$\scriptstyle \lambda$}\@tempa}%
+ {\setbox\z@\hbox{$\scriptscriptstyle\lambda$}\@tempa}%
+ \egroup
+}%
+\DeclareRobustCommand\openone{\leavevmode\hbox{\small1\normalsize\kern-.33em1}}%
+\DeclareRobustCommand\corresponds{\replace@command\corresponds\triangleq}%
+\DeclareRobustCommand\overcirc{\replace@command\overcirc\mathring}%
+\DeclareRobustCommand\overdots{\replace@command\overdots\dddot}%
+\DeclareRobustCommand\REV@triangleq{%
+ {\lower.2ex\hbox{=}}{\kern-.75em^\triangle}%
+}%
+\DeclareRobustCommand\REV@dddot[1]{%
+ \@ontopof{#1}{\cdots}{1.0}\mathord{\box2}%
+}%
+\DeclareRobustCommand\altsuccsim{\succ\kern-.9em_\sim\kern.3em}%
+\DeclareRobustCommand\altprecsim{\prec\kern-1em_\sim\kern.3em}%
+\let\REV@succsim\altsuccsim
+\let\REV@precsim\altprecsim
+\DeclareRobustCommand\REV@lesssim{\mathrel{\mathpalette\vereq{<}}}%
+\DeclareRobustCommand\REV@gtrsim{\mathrel{\mathpalette\vereq{>}}}%
+\DeclareRobustCommand\alt{\lesssim}
+\DeclareRobustCommand\agt{\gtrsim}
+\def\vereq#1#2{%
+ \lower3\p@\vbox{%
+ \baselineskip1.5\p@
+ \lineskip1.5\p@
+ \ialign{$\m@th#1\hfill##\hfil$\crcr#2\crcr\sim\crcr}%
+ }%
+}%
+\DeclareRobustCommand\tensor[1]{\@ontopof{#1}{\leftrightarrow}{1.15}\mathord{\box2}}
+\DeclareRobustCommand\overstar[1]{\@ontopof{#1}{\ast}{1.15}\mathord{\box2}}
+\DeclareRobustCommand\loarrow[1]{\@ontopof{#1}{\leftarrow}{1.15}\mathord{\box2}}
+\DeclareRobustCommand\roarrow[1]{\@ontopof{#1}{\rightarrow}{1.15}\mathord{\box2}}
+\def\@ontopof#1#2#3{%
+ {%
+ \mathchoice
+ {\@@ontopof{#1}{#2}{#3}\displaystyle \scriptstyle }%
+ {\@@ontopof{#1}{#2}{#3}\textstyle \scriptstyle }%
+ {\@@ontopof{#1}{#2}{#3}\scriptstyle \scriptscriptstyle}%
+ {\@@ontopof{#1}{#2}{#3}\scriptscriptstyle\scriptscriptstyle}%
+ }%
+}%
+\def\@@ontopof#1#2#3#4#5{%
+ \setbox\z@\hbox{$#4#1$}%
+ \setbox\f@ur\hbox{$#5#2$}%
+ \setbox\tw@\null\ht\tw@\ht\z@ \dp\tw@\dp\z@
+ \@ifdim{\wd\z@>\wd\f@ur}{%
+ \setbox\f@ur\hb@xt@\wd\z@{\hss\box\f@ur\hss}%
+ \mathord{\rlap{\raise#3\ht\z@\box\f@ur}\box\z@}%
+ }{%
+ \setbox\f@ur\hb@xt@.9\wd\f@ur{\hss\box\f@ur\hss}%
+ \setbox\z@\hb@xt@\wd\f@ur{\hss$#4\relax#1$\hss}%
+ \mathord{\rlap{\copy\z@}\raise#3\ht\z@\box\f@ur}%
+ }%
+}%
+\DeclareRobustCommand\frak{%
+ \REVSYMB@warn{%
+ Command \string\frak\space unsupported:^^J%
+ please use \string\mathfrak\space instead.%
+ }%
+ \global\let\frak\mathfrak
+ \frak
+}%
+\DeclareRobustCommand\REV@mathfrak{%
+ \REVSYMB@warn{%
+ Command \string\mathfrak\space undefined:^^J%
+ please specify the amsfonts or amssymb option!%
+ }%
+ \global\let\mathfrak\@firstofone
+ \mathfrak
+}%
+\DeclareRobustCommand\Bbb{%
+ \REVSYMB@warn{%
+ Command \string\Bbb\space unsupported:^^J%
+ please use \string\mathbb\space instead.%
+ }%
+ \global\let\Bbb\mathbb
+ \Bbb
+}%
+\DeclareRobustCommand\REV@mathfrak{%
+ \REVSYMB@warn{%
+ Command \string\mathbb\space undefined:^^J%
+ please specify the amsfonts or amssymb option!%
+ }%
+ \global\let\mathbb\@firstofone
+ \mathbb
+}%
+\def\Bigglb{\REV@boldopen \Bigg}%
+\def\Biglb {\REV@boldopen \Big }%
+\def\bigglb{\REV@boldopen \bigg}%
+\def\biglb {\REV@boldopen \big }%
+\def\Biggrb{\REV@boldclose\Bigg}%
+\def\Bigrb {\REV@boldclose\Big }%
+\def\biggrb{\REV@boldclose\bigg}%
+\def\bigrb {\REV@boldclose\big }%
+\def\REV@pmb#1{%
+ \hbox{%
+ \setbox\z@=\hbox{#1}%
+ \kern-.02em\copy\z@\kern-\wd\z@
+ \kern .04em\copy\z@\kern-\wd\z@
+ \kern-.02em
+ \raise.04em\copy\z@
+ }%
+}%
+\def\REV@boldopen #1#2{\mathopen {\REV@pmb{$#1#2$}}}%
+\def\REV@boldclose#1#2{\mathclose{\REV@pmb{$#1#2$}}}%
+\def\revsymb@inithook{%
+ \@ifxundefined\dddot{\let\dddot\REV@dddot}{}%
+ \@ifxundefined\triangleq{\let\triangleq\REV@triangleq}{}%
+ \@ifxundefined\succsim{\let\succsim\altsuccsim}{}%
+ \@ifxundefined\precsim{\let\precsim\altprecsim}{}%
+ \@ifxundefined\lesssim{\let\lesssim\REV@lesssim}{}%
+ \@ifxundefined\gtrsim {\let\gtrsim \REV@gtrsim }{}%
+ \@ifxundefined\mathfrak{\let\mathfrak\REV@mathfrak}{}%
+ \@ifxundefined\mathbb{\let\mathbb\REV@mathbb}{}%
+}%
+\endinput
+%%
+%% End of file `revsymb.sty'.
diff --git a/obsolete/macros/latex/contrib/revtex4-0/revtex4.cls b/obsolete/macros/latex/contrib/revtex4-0/revtex4.cls
new file mode 100644
index 0000000000..abb8103ce9
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-0/revtex4.cls
@@ -0,0 +1,6020 @@
+%%
+%% This is file `revtex4.cls',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% revtex4.dtx (with options: `class-pre')
+%% ltxutil.dtx (with options: `ltxutil-krn')
+%% ltxgrid.dtx (with options: `ltxgrid-krn')
+%% textcase.dtx (with options: `package')
+%% revtex4.dtx (with options: `class-pst')
+%%
+%% This file is part of the APS files in the REVTeX 4 distribution.
+%% For the version number, search on the string
+%% Original version by David Carlisle
+%% Modified by Arthur Ogawa (mailto:ogawa@teleport.com)
+%%
+%% Copyright (c) 1999 The American Physical Society.
+%% http://publish.aps.org/revtex4/
+%% mailto:revtex4@aps.org
+%%
+%% See the REVTeX 4 README file for restrictions and more information.
+%%
+\NeedsTeXFormat{LaTeX2e}[1996/12/01]
+\ProvidesClass{revtex4}
+ [2001/08/03 v4.0 (http://publish.aps.org/revtex4/ for documentation)]%FileInfo
+\def\class@name{revtex4}%
+\GenericInfo{}{\space
+ Copyright (c) 2001 The American Physical Society.^^J
+ mailto:revtex@aps.org^^J
+ Licensed under the LPPL:^^Jhttp://www.ctan.org/tex-archive/macros/latex/base/lppl.txt^^J
+ Arthur Ogawa <ogawa@teleport.com>^^J
+ Based on work by David Carlisle <david@dcarlisle.demon.co.uk>%
+ \@gobble
+}%
+\if@compatibility
+ \edef\reserved@a{\errhelp{%
+ Change your \string\documentstyle\space statement to
+ \string\documentclass\space and rerun.
+ }}\reserved@a
+ \errmessage{You cannot run \class@name\space in compatability mode}%
+ \expandafter\@@end
+\fi
+\let\DeclareOption@latex\DeclareOption
+\let\DeclareOption\@gobbletwo
+\let\ProcessOptions@latex\ProcessOptions
+\let\ProcessOptions\@empty
+\let\ProvidesPackage@latex\ProvidesPackage
+\def\ProvidesPackage#1[#2]{%
+ \class@info{Incorporating package #1 [#2].}%
+}%
+\typeout{%
+ ltxutil: portions licensed from W. E. Baxter (web@superscript.com)%
+}%
+\def\class@err#1{\ClassError{\class@name}{#1}\@eha}%
+\def\class@warn#1{\ClassWarningNoLine{\class@name}{#1}}%
+\def\class@info#1{\ClassInfo{\class@name}{#1}}%
+\def\obsolete@command#1{%
+ \class@warn@end{Command \string#1\space is obsolete.^^JPlease remove from your document}%
+ \global\let#1\@empty
+ #1%
+}%
+\def\replace@command#1#2{%
+ \class@warn@end{Command \string#1\space is obsolete;^^JUse \string#2\space instead}%
+ \global\let#1#2%
+ #1%
+}%
+\def\replace@environment#1#2{%
+ \class@warn@end{Environment #1 is obsolete;^^JUse #2 instead}%
+ \glet@environment{#1}{#2}%
+ \@nameuse{#1}%
+}%
+\def\incompatible@package#1{%
+ \@ifpackageloaded{#1}{%
+ \def\@tempa{I cannot continue. You must remove the \string\usepackage\ statement that caused that package to be loaded.}%
+ \ClassError{\class@name}{The #1 package cannot be used with \class@name}%
+ \@tempa\stop
+ }{%
+ \class@info{#1 was not loaded (OK!)}%
+ }%
+}%
+\def\class@warn@end#1{%
+ \gappdef\class@enddocumenthook{\class@warn{#1}}%
+}%
+\AtEndOfClass{%
+ \@ifxundefined\class@name{\def\class@name{Generic Class}}{}%
+}%
+\def\t@{to}%
+\dimendef\dimen@iii\thr@@
+\def\halignt@{\halign\t@}%
+\chardef\f@ur=4\relax
+\chardef\cat@letter=11\relax
+\chardef\other=12\relax
+\def\let@environment#1#2{%
+ \expandafter\let
+ \csname#1\expandafter\endcsname\csname#2\endcsname
+ \expandafter\let
+ \csname end#1\expandafter\endcsname\csname end#2\endcsname
+}%
+\def\glet@environment#1#2{%
+ \global\expandafter\let
+ \csname#1\expandafter\endcsname\csname#2\endcsname
+ \global\expandafter\let
+ \csname end#1\expandafter\endcsname\csname end#2\endcsname
+}%
+\newcommand\tracingplain{%
+ \tracingonline\z@\tracingcommands\z@\tracingstats\z@
+ \tracingpages\z@\tracingoutput\z@\tracinglostchars\@ne
+ \tracingmacros\z@\tracingparagraphs\z@\tracingrestores\z@
+ \showboxbreadth5\showboxdepth3\relax %\errorstopmode
+ }%
+\newcommand\traceoutput{%
+ \appdef\@resetactivechars{\showoutput}%
+}%
+\newcommand\say[1]{\typeout{<\noexpand#1=\meaning#1>}}%
+\newcommand\saythe[1]{\typeout{<\noexpand#1=\the#1>}}%
+\def\fullinterlineskip{\prevdepth\z@}%
+\countdef\count@i\@ne
+\countdef\count@ii\tw@
+\long\def\prepdef#1#2{%
+ \@ifxundefined#1{\toks@{}}{\toks@\expandafter{#1}}%
+ \toks@ii{#2}%
+ \edef#1{\the\toks@ii\the\toks@}%
+}%
+\long\def\appdef#1#2{%
+ \@ifxundefined#1{\toks@{}}{\toks@\expandafter{#1}}%
+ \toks@ii{#2}%
+ \edef#1{\the\toks@\the\toks@ii}%
+}%
+\long\def\gappdef#1#2{%
+ \@ifxundefined#1{\toks@{}}{\toks@\expandafter{#1}}%
+ \toks@ii{#2}%
+ \global\edef#1{\the\toks@\the\toks@ii}%
+}%
+\long\def\appdef@val#1#2{%
+ \appdef#1{{#2}}%
+}%
+\long\def\appdef@e#1#2{%
+ \expandafter\appdef
+ \expandafter#1%
+ \expandafter{#2}%
+}%
+\long\def\appdef@eval#1#2{%
+ \expandafter\appdef@val
+ \expandafter#1%
+ \expandafter{#2}%
+}%
+\toksdef\toks@ii=\tw@
+\long\def\@ifxundefined#1{\@ifx{\undefined#1}}%
+\long\def\@ifnotrelax#1#2#3{\@ifx{\relax#1}{#3}{#2}}%
+\long\def\@argswap#1#2{#2#1}%
+\long\def\@argswap@val#1#2{#2{#1}}%
+\def\@ifxundefined@cs#1{\expandafter\@ifx\expandafter{\csname#1\endcsname\relax}}%
+\def\@boolean#1#2{%
+ \long\def#1{%
+ #2% \if<something>
+ \expandafter\true@sw
+ \else
+ \expandafter\false@sw
+ \fi
+ }%
+}%
+\def\@boole@def#1#{\@boolean{#1}}% Implicit #2
+\def\@booleantrue#1{\let#1\true@sw}%
+\def\@booleanfalse#1{\let#1\false@sw}%
+\@boole@def\@ifx#1{\ifx#1}%
+\@boole@def\@ifx@empty#1{\ifx\@empty#1}%
+\@boole@def\@if@empty#1{\if!#1!}%
+\def\@if@sw#1#2{#1\expandafter\true@sw\else\expandafter\false@sw#2}%
+\@boole@def\@ifdim#1{\ifdim#1}%
+\@boole@def\@ifeof#1{\ifeof#1}%
+\@boole@def\@ifhbox#1{\ifhbox#1}%
+\@boole@def\@ifhmode{\ifhmode}%
+\@boole@def\@ifinner{\ifinner}%
+\@boole@def\@ifmmode{\ifmmode}%
+\@boole@def\@ifnum#1{\ifnum#1}%
+\@boole@def\@ifodd#1{\ifodd#1}%
+\@boole@def\@ifvbox#1{\ifvbox#1}%
+\@boole@def\@ifvmode{\ifvmode}%
+\@boole@def\@ifvoid#1{\ifvoid#1}%
+\long\def\true@sw#1#2{#1}%
+\long\def\false@sw#1#2{#2}%
+\long\def\loopuntil#1{#1{}{\loopuntil{#1}}}%
+\long\def\loopwhile#1{#1{\loopwhile{#1}}{}}%
+\def\@provide#1{%
+ \@ifx{\undefined#1}{\true@sw}{\@ifx{\relax#1}{\true@sw}{\false@sw}}%
+ {\def#1}{\def\j@nk}%
+}%
+\prepdef\document{%
+ \endgroup
+ \init@documenthook
+ \set@typesize@hook
+ \normalsize
+ \set@pica@hook
+ \true@sw{}%
+}%
+\def\init@documenthook{}%
+\AtBeginDocument{%
+ \class@documenthook
+}%
+\AtEndDocument{%
+ \class@enddocumenthook
+}%
+\def\class@documenthook{}%
+\def\class@enddocumenthook{}%
+\def\set@typesize@hook{}%
+\def\set@pica@hook{}%
+\def\enddocument{%
+ \@enddocumenthook
+ \@checkend{document}%
+ \clear@document
+ \check@aux
+ \deadcycles\z@
+ \@@end
+}%
+\def\clear@document{\clearpage}%
+\def\check@aux{\do@check@aux}%
+\def\do@check@aux{%
+ \@if@sw\if@filesw\fi{%
+ \immediate\closeout\@mainaux
+ \let\@setckpt\@gobbletwo
+ \let\@newl@bel\@testdef
+ \@tempswafalse
+ \makeatletter
+ \input\jobname.aux\relax
+ }{}%
+ \@dofilelist
+ \@ifdim{\font@submax >\fontsubfuzz\relax}{%
+ \@font@warning{%
+ Size substitutions with differences\MessageBreak
+ up to \font@submax\space have occured.\@gobbletwo
+ }%
+ }{}%
+ \@defaultsubs
+ \@refundefined
+ \@if@sw\if@filesw\fi{%
+ \@ifx{\@multiplelabels\relax}{%
+ \@if@sw\if@tempswa\fi{%
+ \@latex@warning@no@line{%
+ Label(s) may have changed.
+ Rerun to get cross-references right
+ }%
+ }{}%
+ }{%
+ \@multiplelabels
+ }%
+ }{}%
+}%
+\def\flushing{%
+ \let\\\@normalcr
+ \leftskip\z@skip
+ \rightskip\z@skip
+ \@rightskip\z@skip
+ \parfillskip\@flushglue
+}%
+\def\eqnarray@LaTeX{%
+ \stepcounter{equation}%
+ \def\@currentlabel{\p@equation\theequation}%
+ \global\@eqnswtrue
+ \m@th
+ \global\@eqcnt\z@
+ \tabskip\@centering
+ \let\\\@eqncr
+ $$\everycr{}\halign\t@\displaywidth\bgroup
+ \hskip\@centering$\displaystyle\tabskip\z@skip{##}$\@eqnsel
+ &\global\@eqcnt\@ne\hskip \tw@\arraycolsep \hfil${##}$\hfil
+ &\global\@eqcnt\tw@ \hskip \tw@\arraycolsep
+ $\displaystyle{##}$\hfil\tabskip\@centering
+ &\global\@eqcnt\thr@@ \hb@xt@\z@\bgroup\hss##\egroup
+ \tabskip\z@skip
+ \cr
+}
+\long\def\eqnarray@fleqn@fixed{%
+ \stepcounter{equation}\def\@currentlabel{\p@equation\theequation}%
+ \global\@eqnswtrue\m@th\global\@eqcnt\z@
+ \tabskip\mathindent
+ \let\\=\@eqncr
+ \setlength\abovedisplayskip{\topsep}%
+ \ifvmode\addtolength\abovedisplayskip{\partopsep}\fi
+ \addtolength\abovedisplayskip{\parskip}%
+ \setlength\belowdisplayskip{\abovedisplayskip}%
+ \setlength\belowdisplayshortskip{\abovedisplayskip}%
+ \setlength\abovedisplayshortskip{\abovedisplayskip}%
+ $$%
+ \everycr{}%
+ \halignt@\linewidth\bgroup
+ \hskip\@centering$\displaystyle\tabskip\z@skip{##}$\@eqnsel
+ &\global\@eqcnt\@ne
+ \hskip\tw@\eqncolsep
+ \hfil${{}##{}}$\hfil
+ &\global\@eqcnt\tw@
+ \hskip\tw@\eqncolsep
+ $\displaystyle{##}$\hfil\tabskip\@centering
+ &\global\@eqcnt\thr@@\hb@xt@\z@\bgroup\hss##\egroup
+ \tabskip\z@skip
+ \cr
+}%
+\@ifx{\eqnarray\eqnarray@LaTeX}{%
+ \class@info{Repairing broken LaTeX eqnarray}%
+ \let\eqnarray\eqnarray@fleqn@fixed
+ \newlength\eqncolsep
+ \setlength\eqncolsep\z@
+ \let\eqnarray@LaTeX\relax
+ \let\eqnarray@fleqn@fixed\relax
+}{}%
+\def\mathindent{\@centering}%
+\def\set@eqnarray@skips{}%
+\def\footnote{%
+ \@ifnextchar[\@xfootnote{\@yfootnote\@footnotetext}%
+}%
+\def\footnotemark{%
+ \@ifnextchar[\@xfootnotemark{\@yfootnote}%
+}%
+\def\@xfootnote[#1]{%
+ \@xfootnotemark[#1]%
+ \@footnotetext
+}%
+\def\@xfootnotemark@ltx[#1]{%
+ \begingroup
+ \csname c@\@mpfn\endcsname #1\relax
+ \unrestored@protected@xdef\@thefnmark{\thempfn}%
+ \endgroup
+ \H@@footnotemark
+}%
+\def\@yfootnote{%
+ \stepcounter\@mpfn
+ \protected@xdef\@thefnmark{\thempfn}%
+ \H@@footnotemark
+}%
+\appdef\class@documenthook{%
+ \@ifxundefined\H@@footnotemark{%
+ \let\H@@footnotemark\@footnotemark
+ }{}%
+ \let\@xfootnotemark\@xfootnotemark@ltx
+}%
+\long\def\@footnotetext{%
+ \insert\footins\bgroup
+ \make@footnotetext
+}%
+\long\def\@mpfootnotetext{%
+ \minipagefootnote@pick
+ \make@footnotetext
+}%
+\def\make@footnotetext#1{%
+ \reset@font\footnotesize
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\footnotesep
+ \splitmaxdepth\dp\strutbox
+ \set@footnotewidth
+ \@parboxrestore
+ \protected@edef\@currentlabel{%
+ \csname p@footnote\endcsname\@thefnmark
+ }%
+ \color@begingroup
+ \@makefntext{%
+ \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox
+ }%
+ \color@endgroup
+ \minipagefootnote@drop
+}%
+\def\set@footnotewidth{%
+ \hsize\columnwidth
+ \linewidth\hsize
+}%
+\def\set@footnotewidth@ii{%
+ \hsize\textwidth
+ \advance\hsize\columnsep
+ \divide\hsize\tw@
+ \advance\hsize-\columnsep
+ \linewidth\hsize
+}%
+\def\addtocontents#1#2{%
+ \protected@write\@auxout{%
+ \let \label \@gobble \let \index \@gobble \let \glossary \@gobble
+ \def\({\string\(}%
+ \def\){\string\)}%
+ \def\\{\string\\}%
+ }{\string \@writefile {#1}{#2}}%
+}%
+\def\addcontentsline#1#2#3{%
+ \addtocontents{#1}{%
+ \protect\contentsline{#2}{#3}{\thepage}{}%
+ }%
+}%
+\def\contentsline#1#2#3#4{%
+ \csname l@#1\endcsname{#2}{#3}%
+}%
+\def\label#1{%
+ \@bsphack
+ \protected@write\@auxout{}{%
+ \string\newlabel{#1}{{\@currentlabel}{\thepage}{}{}{}}%
+ }%
+ \@esphack
+}%
+\appdef\class@documenthook{%
+ \prepdef\caption{\minipagefootnote@here}%
+}%
+\def\minipagefootnote@init{%
+ \setbox\@mpfootins\box\voidb@x
+}%
+\def\minipagefootnote@pick{%
+ \global\setbox\@mpfootins\vbox\bgroup
+ \unvbox\@mpfootins
+}%
+\def\minipagefootnote@drop{%
+ \egroup
+}%
+\def\minipagefootnote@here{%
+ \par
+ \@ifvoid\@mpfootins{}{%
+ \vskip\skip\@mpfootins
+ \fullinterlineskip
+ \@ifinner{%
+ \vtop{\unvcopy\@mpfootins}%
+ {\setbox\z@\lastbox}%
+ }{}%
+ \unvbox\@mpfootins
+ }%
+}%
+\def\minipagefootnote@foot{%
+ \@ifvoid\@mpfootins{}{%
+ \insert\footins\bgroup\unvbox\@mpfootins\egroup
+ }%
+}%
+\def\endminipage{%
+ \par
+ \unskip
+ \minipagefootnote@here
+ \@minipagefalse %% added 24 May 89
+ \color@endgroup
+ \egroup
+ \expandafter\@iiiparbox\@mpargs{\unvbox\@tempboxa}%
+}%
+\let\@xfloat@LaTeX\@xfloat
+\def\@xfloat#1[#2]{%
+ \@xfloat@prep
+ \@nameuse{fp@proc@#2}%
+ \@ifxundefined\floats@sw{\global\@booleantrue\floats@sw}{}%
+ \floats@sw{\@xfloat@LaTeX{#1}[#2]}{\@xfloat@anchored{#1}[]}%
+}%
+\def\@xfloat@prep{%
+ \let\footnote\footnote@latex
+ \def\@mpfn{mpfootnote}%
+ \def\thempfn{\thempfootnote}%
+ \c@mpfootnote\z@
+ \let\@footnotetext\@mpfootnotetext
+ \let\H@@footnotetext\@mpfootnotetext
+ \let\@makefntext\@mpmakefntext
+}%
+\appdef\class@documenthook{%
+ \let\footnote@latex\footnote
+}%
+\def\@xfloat@anchored#1[#2]{%
+ \def\@captype{#1}%
+ \begin@float@pagebreak
+ \let\end@float\end@float@anchored
+ \let\end@dblfloat\end@float@anchored
+ \hsize\columnwidth
+ \@parboxrestore
+ \@floatboxreset
+ \minipagefootnote@init
+}%
+\def\end@float@anchored{%
+ \minipagefootnote@here
+ \par\vskip\z@skip %% \par\vskip\z@ added 15 Dec 87
+ \par
+ \end@float@pagebreak
+}%
+\def\begin@float@pagebreak{\par\addvspace\intextsep}%
+\def\end@float@pagebreak{\par\addvspace\intextsep}%
+\def\@mpmakefntext#1{%
+ \parindent=1em
+ \noindent
+ \hb@xt@1em{\hss\@makefnmark}%
+ #1%
+}%
+\def\do@if@floats#1#2{%
+ \@ifxundefined\floats@sw{\global\@booleantrue\floats@sw}{}%
+ \floats@sw{}{%
+ \expandafter\newwrite
+ \csname#1write\endcsname
+ \expandafter\def
+ \csname#1@stream\endcsname{\jobname#2}%
+ \expandafter\immediate
+ \expandafter\openout
+ \csname#1write\endcsname
+ \csname#1@stream\endcsname\relax
+ \@ifxundefined\@float@LaTeX{%
+ \let\@float@LaTeX\@float
+ \let\@dblfloat@LaTeX\@dblfloat
+ \let\@float\write@float
+ \let\@dblfloat\write@floats
+ }{}%
+ \let@environment{#1@float}{#1}%
+ \let@environment{#1@floats}{#1*}%
+ \@ifxundefined@cs{#1@write}{}{%
+ \let@environment{#1}{#1@write}%
+ }%
+ }%
+}%
+\def\triggerpar{\leavevmode\@@par}%
+\def\oneapage{\def\begin@float@pagebreak{\newpage}\def\end@float@pagebreak{\newpage}}%
+\def\print@float#1#2{%
+ \@ifxundefined@cs{#1write}{}{%
+ \begingroup
+ \@booleanfalse\floats@sw
+ #2%
+ \raggedbottom
+ \def\array@default{v}% floats must
+ \let\@float\@float@LaTeX
+ \let\@dblfloat\@dblfloat@LaTeX
+ \let\trigger@float@par\triggerpar
+ \let@environment{#1}{#1@float}%
+ \let@environment{#1*}{#1@floats}%
+ \expandafter\prepdef\csname#1\endcsname{\trigger@float@par}%
+ \expandafter\prepdef\csname#1*\endcsname{\trigger@float@par}%
+ \@namedef{fps@#1}{h!}%
+ \expandafter\immediate
+ \expandafter\closeout
+ \csname#1write\endcsname
+ \everypar{%
+ \global\let\trigger@float@par\relax
+ \global\everypar{}\setbox\z@\lastbox
+ \@ifxundefined@cs{#1sname}{}{%
+ \begin@float@pagebreak
+ \expandafter\section
+ \expandafter*%
+ \expandafter{%
+ \csname#1sname\endcsname
+ }%
+ }%
+ }%
+ \input{\csname#1@stream\endcsname}%
+ \endgroup
+ \global\expandafter\let\csname#1write\endcsname\relax
+ }%
+}%
+\def\write@float#1{\write@@float{#1}{#1}}%
+\def\endwrite@float{\@Esphack}%
+\def\write@floats#1{\write@@float{#1*}{#1}}%
+\def\endwrite@floats{\@Esphack}%
+\def\write@@float#1#2{%
+ \ifhmode
+ \@bsphack
+ \fi
+ \chardef\@tempc\csname#2write\endcsname
+ \toks@{\begin{#1}}%
+ \def\@tempb{#1}%
+ \expandafter\let\csname end#1\endcsname\endwrite@float
+ \catcode`\^^M\active
+ \@makeother\{\@makeother\}\@makeother\%
+ \write@floatline
+}%
+\begingroup
+ \catcode`\[\the\catcode`\{\catcode`\]\the\catcode`\}\@makeother\{\@makeother\}%
+ \gdef\float@end@tag#1\end{#2}#3\@nul[%
+ \def\@tempa[#2]%
+ \@ifx[\@tempa\@tempb][\end[#2]][\write@floatline]%
+ ]%
+ \obeylines%
+ \gdef\write@floatline#1^^M[%
+ \begingroup%
+ \newlinechar`\^^M%
+ \toks@\expandafter[\the\toks@#1]\immediate\write\@tempc[\the\toks@]%
+ \endgroup%
+ \toks@[]%
+ \float@end@tag#1\end{}\@nul%
+ ]%
+\endgroup
+\def\@alph#1{\ifcase#1\or a\or b\or c\or d\else\@ialph{#1}\fi}
+\def\@ialph#1{\ifcase#1\or \or \or \or \or e\or f\or g\or h\or i\or j\or
+ k\or l\or m\or n\or o\or p\or q\or r\or s\or t\or u\or v\or w\or x\or
+ y\or z\or aa\or bb\or cc\or dd\or ee\or ff\or gg\or hh\or ii\or jj\or
+ kk\or ll\or mm\or nn\or oo\or pp\or qq\or rr\or ss\or tt\or uu\or
+ vv\or ww\or xx\or yy\or zz\else\@ctrerr\fi}
+\def\@startsection#1#2#3#4#5#6{%
+ \@startsection@hook
+ \if@noskipsec \leavevmode \fi
+ \par
+ \@tempskipa #4\relax
+ \@afterindenttrue
+ \ifdim \@tempskipa <\z@
+ \@tempskipa -\@tempskipa \@afterindentfalse
+ \fi
+ \if@nobreak
+ \everypar{}%
+ \else
+ \addpenalty\@secpenalty\addvspace\@tempskipa
+ \fi
+ \@ifstar
+ {\@dblarg{\@ssect@ltx{#1}{#2}{#3}{#4}{#5}{#6}}}%
+ {\@dblarg{\@sect@ltx {#1}{#2}{#3}{#4}{#5}{#6}}}%
+}%
+\def\@startsection@hook{}%
+\class@info
+ {Repairing broken LateX \string\@sect}%
+\def\@sect@ltx#1#2#3#4#5#6[#7]#8{%
+ \@ifnum{#2>\c@secnumdepth}{%
+ \def\H@svsec{\phantomsection}%
+ \let\@svsec\@empty
+ }{%
+ \H@refstepcounter{#1}%
+ \def\H@svsec{%
+ \phantomsection
+ }%
+ \protected@edef\@svsec{{#1}}%
+ \@ifundefined{@#1cntformat}{%
+ \prepdef\@svsec\@seccntformat
+ }{%
+ \expandafter\prepdef
+ \expandafter\@svsec
+ \csname @#1cntformat\endcsname
+ }%
+ }%
+ \@tempskipa #5\relax
+ \@ifdim{\@tempskipa>\z@}{%
+ \begingroup
+ \interlinepenalty \@M
+ #6{%
+ \@ifundefined{@hangfrom@#1}{\@hang@from}{\csname @hangfrom@#1\endcsname}%
+ {\hskip#3\relax\H@svsec}{\@svsec}{#8}%
+ }%
+ \@@par
+ \endgroup
+ \@ifundefined{#1mark}{\@gobble}{\csname #1mark\endcsname}{#7}%
+ \addcontentsline{toc}{#1}{%
+ \@ifnum{#2>\c@secnumdepth}{%
+ \protect\numberline{}%
+ }{%
+ \protect\numberline{\csname the#1\endcsname}%
+ }%
+ #8}%
+ }{%
+ \def\@svsechd{%
+ #6{%
+ \@ifundefined{@runin@to@#1}{\@runin@to}{\csname @runin@to@#1\endcsname}%
+ {\hskip#3\relax\H@svsec}{\@svsec}{#8}%
+ }%
+ \@ifundefined{#1mark}{\@gobble}{\csname #1mark\endcsname}{#7}%
+ \addcontentsline{toc}{#1}{%
+ \@ifnum{#2>\c@secnumdepth}{%
+ \protect\numberline{}%
+ }{%
+ \protect\numberline{\csname the#1\endcsname}%
+ }%
+ #8}%
+ }%
+ }%
+ \@xsect{#5}%
+}%
+\def\@hang@from#1#2#3{\@hangfrom{#1#2}#3}%
+\def\@runin@to #1#2#3{#1#2#3}%
+\def\@ssect@ltx#1#2#3#4#5#6[#7]#8{%
+ \def\H@svsec{\phantomsection}%
+ \@tempskipa #5\relax
+ \@ifdim{\@tempskipa>\z@}{%
+ \begingroup
+ \interlinepenalty \@M
+ #6{%
+ \@ifundefined{@hangfroms@#1}{\@hang@froms}{\csname @hangfroms@#1\endcsname}%
+ {\hskip#3\relax\H@svsec}{#8}%
+ }%
+ \@@par
+ \endgroup
+ \@ifundefined{#1smark}{\@gobble}{\csname #1smark\endcsname}{#7}%
+ \addcontentsline{toc}{#1}{\protect\numberline{}#8}%
+ }{%
+ \def\@svsechd{%
+ #6{%
+ \@ifundefined{@runin@tos@#1}{\@runin@tos}{\csname @runin@tos@#1\endcsname}%
+ {\hskip#3\relax\H@svsec}{#8}%
+ }%
+ \@ifundefined{#1smark}{\@gobble}{\csname #1smark\endcsname}{#7}%
+ \addcontentsline{toc}{#1}{\protect\numberline{}#8}%
+ }%
+ }%
+ \@xsect{#5}%
+}%
+\def\@hang@froms#1#2{#1#2}%
+\def\@runin@tos #1#2{#1#2}%
+\appdef\init@documenthook{%
+ \providecommand\phantomsection{}%
+ \providecommand\hyper@anchor[1]{}%
+ \providecommand\hyper@last{}%
+ \providecommand\Hy@raisedlink[1]{#1}%
+ \providecommand\hyper@anchorstart[1]{}%
+ \providecommand\hyper@anchorend{}%
+ \providecommand\hyper@linkstart[2]{}%
+ \providecommand\hyper@linkend{}%
+}%
+\let\H@refstepcounter\refstepcounter
+\def\sec@upcase#1{\relax{#1}}%
+\appdef\class@documenthook{%
+ \@ifpackageloaded{array}{\switch@array}{\switch@tabular}%
+ \prepdef\endtabular{\endtabular@hook}%
+ \@provide\endtabular@hook{}%
+ \prepdef\endarray{\endarray@hook}%
+ \@provide\endarray@hook{}%
+ \providecommand\array@hook{}%
+ \prepdef\@tabular{\tabular@hook}%
+ \@provide\tabular@hook{}%
+}%
+\def\switch@tabular{%
+ \let\@array@sw\@array@sw@array
+ \@ifx{\@array\@array@LaTeX}{%
+ \@ifx{\multicolumn\multicolumn@LaTeX}{%
+ \@ifx{\@tabular\@tabular@LaTeX}{%
+ \@ifx{\@tabarray\@tabarray@LaTeX}{%
+ \@ifx{\array\array@LaTeX}{%
+ \@ifx{\endarray\endarray@LaTeX}{%
+ \@ifx{\endtabular\endtabular@LaTeX}{%
+ \@ifx{\@mkpream\@mkpream@LaTeX}{%
+ \@ifx{\@addamp\@addamp@LaTeX}{%
+ \@ifx{\@arrayacol\@arrayacol@LaTeX}{%
+ \@ifx{\@tabacol\@tabacol@LaTeX}{%
+ \@ifx{\@arrayclassz\@arrayclassz@LaTeX}{%
+ \@ifx{\@tabclassiv\@tabclassiv@LaTeX}{%
+ \@ifx{\@arrayclassiv\@arrayclassiv@LaTeX}{%
+ \@ifx{\@tabclassz\@tabclassz@LaTeX}{%
+ \@ifx{\@classv\@classv@LaTeX}{%
+ \@ifx{\hline\hline@LaTeX}{%
+ \@ifx{\@tabularcr\@tabularcr@LaTeX}{%
+ \@ifx{\@xtabularcr\@xtabularcr@LaTeX}{%
+ \@ifx{\@xargarraycr\@xargarraycr@LaTeX}{%
+ \@ifx{\@yargarraycr\@yargarraycr@LaTeX}{%
+ \true@sw
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ {%
+ \class@info{Patching LaTeX tabular.}%
+ }{%
+ \class@info{Unrecognized LaTeX tabular. Please update this document class! (Proceeding with fingers crossed.)}%
+ }%
+ \let\@array\@array@ltx
+ \let\multicolumn\multicolumn@ltx
+ \let\@tabular\@tabular@ltx
+ \let\@tabarray\@tabarray@ltx
+ \let\array\array@ltx
+ \let\endarray\endarray@ltx
+ \let\endtabular\endtabular@ltx
+ \let\@mkpream\@mkpream@ltx
+ \let\@addamp\@addamp@ltx
+ \let\@arrayacol\@arrayacol@ltx
+ \let\@tabacol\@tabacol@ltx
+ \let\@arrayclassz\@arrayclassz@ltx
+ \let\@tabclassiv\@tabclassiv@ltx
+ \let\@arrayclassiv\@arrayclassiv@ltx
+ \let\@tabclassz\@tabclassz@ltx
+ \let\@classv\@classv@ltx
+ \let\hline\hline@ltx
+ \let\@tabularcr\@tabularcr@ltx
+ \let\@xtabularcr\@xtabularcr@ltx
+ \let\@xargarraycr\@xargarraycr@ltx
+ \let\@yargarraycr\@yargarraycr@ltx
+}%
+\def\switch@array{%
+ \let\@array@sw\@array@sw@LaTeX
+ \@ifx{\@array\@array@array}{%
+ \@ifx{\@tabular\@tabular@array}{%
+ \@ifx{\@tabarray\@tabarray@array}{%
+ \@ifx{\array\array@array}{%
+ \@ifx{\endarray\endarray@array}{%
+ \@ifx{\endtabular\endtabular@array}{%
+ \@ifx{\@mkpream\@mkpream@array}{%
+ \@ifx{\@classx\@classx@array}{%
+ \@ifx{\insert@column\insert@column@array}{%
+ \@ifx{\@arraycr\@arraycr@array}{%
+ \@ifx{\@xarraycr\@xarraycr@array}{%
+ \@ifx{\@xargarraycr\@xargarraycr@array}{%
+ \@ifx{\@yargarraycr\@yargarraycr@array}{%
+ \true@sw
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }{%
+ \class@info{Patching array package.}%
+ }{%
+ \class@info{Unrecognized array package. Please update this document class! (Proceeding with fingers crossed.)}%
+ }%
+ \let\@array \@array@array@new
+ \let\@@array \@array % Cosi fan tutti
+ \let\@tabular \@tabular@array@new
+ \let\@tabarray \@tabarray@array@new
+ \let\array \array@array@new
+ \let\endarray \endarray@array@new
+ \let\endtabular\endtabular@array@new
+ \let\@mkpream \@mkpream@array@new
+ \let\@classx \@classx@array@new
+ \let\@arrayacol\@arrayacol@ltx
+ \let\@tabacol \@tabacol@ltx
+ \let\insert@column\insert@column@array@new
+ \expandafter\let\csname endtabular*\endcsname\endtabular % Cosi fan tutti
+ \let\@arraycr \@arraycr@new
+ \let\@xarraycr \@xarraycr@new
+ \let\@xargarraycr\@xargarraycr@new
+ \let\@yargarraycr\@yargarraycr@new
+}%
+\def\@array@sw@LaTeX{\@ifx{\\\@tabularcr}}%
+\def\@array@sw@array{\@ifx{\d@llarbegin\begingroup}}%
+\def\@tabular@LaTeX{%
+ \leavevmode
+ \hbox\bgroup$%
+ \let\@acol\@tabacol
+ \let\@classz\@tabclassz
+ \let\@classiv\@tabclassiv
+ \let\\\@tabularcr
+ \@tabarray
+}%
+\def\@tabular@ltx{%
+ \let\@acoll\@tabacoll
+ \let\@acolr\@tabacolr
+ \let\@acol\@tabacol
+ \let\@classz\@tabclassz
+ \let\@classiv\@tabclassiv
+ \let\\\@tabularcr
+ \@tabarray
+}%
+\def\@tabular@array{%
+ \leavevmode
+ \hbox\bgroup$%
+ \col@sep\tabcolsep
+ \let\d@llarbegin\begingroup
+ \let\d@llarend\endgroup
+ \@tabarray
+}%
+\def\@tabular@array@new{%
+ \let\@acoll\@tabacoll
+ \let\@acolr\@tabacolr
+ \let\@acol\@tabacol
+ \let\col@sep\@undefined
+ \let\d@llarbegin\begingroup
+ \let\d@llarend\endgroup
+ \@tabarray
+}%
+\def\@tabarray@LaTeX{%
+ \m@th\@ifnextchar[\@array{\@array[c]}%
+}%
+\def\@tabarray@ltx{%
+ \m@th\@ifnextchar[\@array{\expandafter\@array\expandafter[\array@default]}%
+}%
+\def\@tabarray@array{%
+ \@ifnextchar[{\@@array}{\@@array[c]}%
+}%
+\def\@tabarray@array@new{%
+ \@ifnextchar[{\@@array}{\expandafter\@@array\expandafter[\array@default]}%
+}%
+\newcount\intertabularlinepenalty
+\intertabularlinepenalty=100
+\newcount\@tbpen
+\appdef\samepage{\intertabularlinepenalty\@M}%
+\def\@tabularcr@LaTeX{{\ifnum 0=`}\fi \@ifstar \@xtabularcr \@xtabularcr}%
+\def\@tabularcr@ltx{{\ifnum 0=`}\fi \@ifstar {\global \@tbpen \@M \@xtabularcr }{\global \@tbpen \intertabularlinepenalty \@xtabularcr }}%
+\def\@xtabularcr@LaTeX{\@ifnextchar [\@argtabularcr {\ifnum 0=`{\fi }\cr }}%
+\def\@xtabularcr@ltx{\@ifnextchar [\@argtabularcr {\ifnum 0=`{\fi }\cr \noalign {\penalty \@tbpen }}}%
+\def\@xargarraycr@LaTeX#1{\@tempdima #1\advance \@tempdima \dp \@arstrutbox \vrule \@height \z@ \@depth \@tempdima \@width \z@ \cr}%
+\def\@xargarraycr@ltx#1{\@tempdima #1\advance \@tempdima \dp \@arstrutbox \vrule \@height \z@ \@depth \@tempdima \@width \z@ \cr \noalign {\penalty \@tbpen }}%
+\def\@yargarraycr@LaTeX#1{\cr \noalign {\vskip #1}}%
+\def\@yargarraycr@ltx#1{\cr \noalign {\penalty \@tbpen \vskip #1}}%
+\def\@arraycr@array{%
+ \relax
+ \iffalse{\fi\ifnum 0=`}\fi
+ \@ifstar \@xarraycr \@xarraycr
+}%
+\def\@arraycr@new{%
+ \relax
+ \iffalse{\fi\ifnum 0=`}\fi
+ \@ifstar {\global \@tbpen \@M \@xarraycr }{\global \@tbpen \intertabularlinepenalty \@xarraycr }%
+}%
+\def\@xarraycr@array{%
+ \@ifnextchar [%]
+ \@argarraycr {\ifnum 0=`{}\fi\cr}%
+}%
+\def\@xarraycr@new{%
+ \@ifnextchar [%]
+ \@argarraycr {\ifnum 0=`{}\fi\cr \noalign {\penalty \@tbpen }}%
+}%
+\def\@xargarraycr@array#1{%
+ \unskip
+ \@tempdima #1\advance\@tempdima \dp\@arstrutbox
+ \vrule \@depth\@tempdima \@width\z@
+ \cr
+}%
+\def\@xargarraycr@new#1{%
+ \unskip
+ \@tempdima #1\advance\@tempdima \dp\@arstrutbox
+ \vrule \@depth\@tempdima \@width\z@
+ \cr
+ \noalign {\penalty \@tbpen }%
+}%
+\def\@yargarraycr@array#1{%
+ \cr
+ \noalign{\vskip #1}%
+}%
+\def\@yargarraycr@new#1{%
+ \cr
+ \noalign{\penalty \@tbpen \vskip #1}%
+}%
+\def\array@LaTeX{%
+ \let\@acol\@arrayacol
+ \let\@classz\@arrayclassz
+ \let\@classiv\@arrayclassiv
+ \let\\\@arraycr
+ \let\@halignto\@empty
+ \@tabarray
+}%
+\def\array@ltx{%
+ \@ifmmode{}{\@badmath$}%
+ \let\@acoll\@arrayacol
+ \let\@acolr\@arrayacol
+ \let\@acol\@arrayacol
+ \let\@classz\@arrayclassz
+ \let\@classiv\@arrayclassiv
+ \let\\\@arraycr
+ \let\@halignto\@empty
+ \@tabarray
+}%
+\def\array@array{%
+ \col@sep\arraycolsep
+ \def\d@llarbegin{$}\let\d@llarend\d@llarbegin\gdef\@halignto{}%
+ \@tabarray
+}
+\def\array@array@new{%
+ \@ifmmode{}{\@badmath$}%
+ \let\@acoll\@arrayacol
+ \let\@acolr\@arrayacol
+ \let\@acol\@arrayacol
+\let\col@sep\@undefined
+ \def\d@llarbegin{$}%
+ \let\d@llarend\d@llarbegin
+ \gdef\@halignto{}%
+ \@tabarray
+}%
+\def\@array@LaTeX[#1]#2{%
+ \if #1t\vtop \else \if#1b\vbox \else \vcenter \fi\fi
+ \bgroup
+ \setbox\@arstrutbox\hbox{%
+ \vrule \@height\arraystretch\ht\strutbox
+ \@depth\arraystretch \dp\strutbox
+ \@width\z@}%
+ \@mkpream{#2}%
+ \edef\@preamble{%
+ \ialign \noexpand\@halignto
+ \bgroup \@arstrut \@preamble \tabskip\z@skip \cr}%
+ \let\@startpbox\@@startpbox \let\@endpbox\@@endpbox
+ \let\tabularnewline\\%
+ \let\par\@empty
+ \let\@sharp##%
+ \set@typeset@protect
+ \lineskip\z@skip\baselineskip\z@skip
+ \ifhmode \@preamerr\z@ \@@par\fi
+ \@preamble
+}%
+\def\@array@ltx[#1]#2{%
+ \@nameuse{@array@align@#1}%
+ \set@arstrutbox
+ \@mkpream{#2}%
+ \prepdef\@preamble{%
+ \tabskip\tabmid@skip
+ \@arstrut
+ }%
+ \appdef\@preamble{%
+ \tabskip\tabright@skip
+ \cr
+ \array@row@pre
+ }%
+ \let\tabularnewline\\%
+ \let\par\@empty
+ \let\@sharp##%
+ \set@typeset@protect
+ \lineskip\z@skip\baselineskip\z@skip
+ \tabskip\tableft@skip\relax
+ \ifhmode \@preamerr\z@ \@@par\fi
+ \everycr{}%
+ \expandafter\halign\expandafter\@halignto\expandafter\bgroup\@preamble
+}%
+\def\set@arstrutbox{%
+ \setbox\@arstrutbox\hbox{%
+ \vrule \@height\arraystretch\ht\strutbox
+ \@depth\arraystretch \dp\strutbox
+ \@width\z@
+ }%
+}%
+\def\@array@array[#1]#2{%
+ \@tempdima \ht \strutbox
+ \advance \@tempdima by\extrarowheight
+ \setbox \@arstrutbox \hbox{\vrule
+ \@height \arraystretch \@tempdima
+ \@depth \arraystretch \dp \strutbox
+ \@width \z@}%
+ \begingroup
+ \@mkpream{#2}%
+ \xdef\@preamble{\noexpand \ialign \@halignto
+ \bgroup \@arstrut \@preamble
+ \tabskip \z@ \cr}%
+ \endgroup
+ \@arrayleft
+ \if #1t\vtop \else \if#1b\vbox \else \vcenter \fi \fi
+ \bgroup
+ \let \@sharp ##\let \protect \relax
+ \lineskip \z@
+ \baselineskip \z@
+ \m@th
+ \let\\\@arraycr \let\tabularnewline\\\let\par\@empty \@preamble
+}%
+\def\@array@array@new[#1]#2{%
+ \@tempdima\ht\strutbox
+ \advance\@tempdima by\extrarowheight
+ \setbox\@arstrutbox\hbox{%
+ \vrule \@height\arraystretch\@tempdima
+ \@depth \arraystretch\dp\strutbox
+ \@width \z@
+ }%
+ \begingroup
+ \@mkpream{#2}%
+ \xdef\@preamble{\@preamble}%
+ \endgroup
+ \prepdef\@preamble{%
+ \tabskip\tabmid@skip
+ \@arstrut
+ }%
+ \appdef\@preamble{%
+ \tabskip\tabright@skip
+ \cr
+ \array@row@pre
+ }%
+ \@arrayleft
+ \@nameuse{@array@align@#1}%
+ \m@th
+ \let\\\@arraycr
+ \let\tabularnewline\\%
+ \let\par\@empty
+ \let\@sharp##%
+ \set@typeset@protect
+ \lineskip\z@\baselineskip\z@
+ \tabskip\tableft@skip
+ \everycr{}%
+ \expandafter\halign\expandafter\@halignto\expandafter\bgroup\@preamble
+}%
+\def\endarray@LaTeX{%
+ \crcr\egroup\egroup
+}%
+\def\endarray@ltx{%
+ \crcr\array@row@pst\egroup\egroup
+}%
+\def\endarray@array{%
+ \crcr \egroup \egroup \@arrayright \gdef\@preamble{}%
+}%
+\def\endarray@array@new{%
+ \crcr\array@row@pst\egroup\egroup % Same as \endarray@ltx
+ \@arrayright
+ \global\let\@preamble\@empty
+}%
+\def\endtabular@LaTeX{%
+ \crcr\egroup\egroup $\egroup
+}%
+\def\endtabular@ltx{%
+ \endarray
+}%
+\def\endtabular@array{%
+ \endarray $\egroup
+}%
+\def\endtabular@array@new{%
+ \endarray
+}%
+\@namedef{endtabular*}{\endtabular}%
+\long\def\multicolumn@LaTeX#1#2#3{%
+ \multispan{#1}\begingroup
+ \@mkpream{#2}%
+ \def\@sharp{#3}\set@typeset@protect
+ \let\@startpbox\@@startpbox\let\@endpbox\@@endpbox
+ \@arstrut \@preamble\hbox{}\endgroup\ignorespaces
+}%
+\long\def\multicolumn@ltx#1#2#3{%
+ \multispan{#1}%
+ \begingroup
+ \@mkpream{#2}%
+ \def\@sharp{#3}%
+ \set@typeset@protect
+ %\let\@startpbox\@@startpbox\let\@endpbox\@@endpbox
+ \@arstrut
+ \@preamble
+ \hbox{}%
+ \endgroup
+ \ignorespaces
+}%
+\def\@array@align@t{\leavevmode\vtop\bgroup}%
+\def\@array@align@b{\leavevmode\vbox\bgroup}%
+\def\@array@align@c{\leavevmode\@ifmmode{\vcenter\bgroup}{$\vcenter\bgroup\aftergroup$\aftergroup\relax}}%
+\def\@array@align@v{%
+ \@ifmmode{%
+ \@badmath
+ \vcenter\bgroup
+ }{%
+ \@ifinner{%
+ $\vcenter\bgroup\aftergroup$
+ }{%
+ \@@par\bgroup
+ }%
+ }%
+}%
+\def\array@default{c}%
+\def\array@row@rst{%
+ \let\@array@align@v\@array@align@c
+}%
+\def\array@row@pre{}%
+\def\array@row@pst{}%
+\newcommand\toprule{\tab@rule{\column@font}{\column@fil}{\frstrut}}%
+\newcommand\colrule{\unskip\lrstrut\\\tab@rule{\body@font}{}{\frstrut}}%
+\newcommand\botrule{\unskip\lrstrut\\\noalign{\hline@rule}{}}%
+\def\hline@LaTeX{%
+ \noalign{\ifnum0=`}\fi\hrule \@height \arrayrulewidth \futurelet
+ \reserved@a\@xhline
+}%
+\def\hline@ltx{%
+ \noalign{%
+ \ifnum0=`}\fi
+ \hline@rule
+ \futurelet\reserved@a\@xhline
+ % \noalign ended in \@xhline
+}%
+\def\@xhline@unneeded{%
+ \say\reserved@a
+ \ifx\reserved@a\hline
+ \vskip\doublerulesep
+ \vskip-\arrayrulewidth
+ \fi
+ \ifnum0=`{\fi}%
+}%
+\def\tab@rule#1#2#3{%
+ \crcr
+ \noalign{%
+ \hline@rule
+ \gdef\@arstrut@hook{%
+ \global\let\@arstrut@hook\@empty
+ #3%
+ }%
+ \gdef\cell@font{#1}%
+ \gdef\cell@fil{#2}%
+ }%
+}%
+\def\column@font{}%
+\def\column@fil{}%
+\def\body@font{}%
+\def\cell@font{}%
+\def\frstrut{}%
+\def\lrstrut{}%
+\def\@arstrut@hline{%
+ \relax
+ \@ifmmode{\copy}{\unhcopy}\@arstrutbox@hline
+ \@arstrut@hook
+}%
+\let\@arstrut@org\@arstrut
+\def\@arstrut@hook{%
+ \global\let\@arstrut\@arstrut@org
+}%
+\newbox\@arstrutbox@hline
+\appdef\set@arstrutbox{%
+ \setbox\@arstrutbox@hline\hbox{%
+ \setbox\z@\hbox{$0^{0}_{}$}%
+ \dimen@\ht\z@\advance\dimen@\@arstrut@hline@clnc
+ \@ifdim{\dimen@<\arraystretch\ht\strutbox}{\dimen@=\arraystretch\ht\strutbox}{}%
+ \vrule \@height\dimen@
+ \@depth\arraystretch \dp\strutbox
+ \@width\z@
+ }%
+}%
+\def\hline@rule{%
+ \hrule \@height \arrayrulewidth
+ \global\let\@arstrut\@arstrut@hline
+}%
+\def\@arstrut@hline@clnc{2\p@}% % Klootch: magic number
+\def\tableft@skip{\z@skip}%
+\def\tabmid@skip{\z@skip}%\@flushglue
+\def\tabright@skip{\z@skip}%
+\def\tableftsep{\tabcolsep}%
+\def\tabmidsep{\tabcolsep}%
+\def\tabrightsep{\tabcolsep}%
+\def\cell@fil{}%
+\def\pbox@hook{}%
+\appdef\@arstrut{\@arstrut@hook}%
+\let\@arstrut@hook\@empty
+\def\@addtopreamble{\appdef\@preamble}%
+\def\@mkpream@LaTeX#1{%
+ \@firstamptrue\@lastchclass6
+ \let\@preamble\@empty
+ \let\protect\@unexpandable@protect
+ \let\@sharp\relax
+ \let\@startpbox\relax\let\@endpbox\relax
+ \@expast{#1}%
+ \expandafter\@tfor \expandafter
+ \@nextchar \expandafter:\expandafter=\reserved@a\do
+ {\@testpach\@nextchar
+ \ifcase \@chclass \@classz \or \@classi \or \@classii \or \@classiii
+ \or \@classiv \or\@classv \fi\@lastchclass\@chclass}%
+ \ifcase \@lastchclass \@acol
+ \or \or \@preamerr \@ne\or \@preamerr \tw@\or \or \@acol \fi
+}%
+\def\@mkpream@ltx#1{%
+ \@firstamptrue
+ \@lastchclass6
+ \let\@preamble\@empty
+ \let\protect\@unexpandable@protect
+ \let\@sharp\relax
+ \@expast{#1}%
+ \expandafter\@tfor\expandafter\@nextchar\expandafter:\expandafter=\reserved@a
+ \do{%
+ \expandafter\@testpach\expandafter{\@nextchar}%
+ \ifcase\@chclass
+ \@classz
+ \or
+ \@classi
+ \or
+ \@classii
+ \or
+ \@classiii
+ \or
+ \@classiv
+ \or
+ \@classv
+ \fi
+ \@lastchclass\@chclass
+ }%
+ \ifcase\@lastchclass
+ \@acolr % right-hand column
+ \or
+ \or
+ \@preamerr\@ne
+ \or
+ \@preamerr\tw@
+ \or
+ \or
+ \@acolr % right-hand column
+ \fi
+}%
+\def\insert@column@array{%
+ \the@toks \the \@tempcnta
+ \ignorespaces \@sharp \unskip
+ \the@toks \the \count@ \relax
+}%
+\def\insert@column@array@new{%
+ \the@toks\the\@tempcnta
+ \array@row@rst\cell@font
+ \ignorespaces\@sharp\unskip
+ \the@toks\the\count@
+ \relax
+}%
+\def\@mkpream@relax{%
+ \let\tableftsep\relax
+ \let\tabmidsep\relax
+ \let\tabrightsep\relax
+ \let\array@row@rst\relax
+ \let\cell@font\relax
+ \let\@startpbox\relax
+}%
+\def\@mkpream@array#1{%
+ \gdef\@preamble{}\@lastchclass 4 \@firstamptrue
+ \let\@sharp\relax \let\@startpbox\relax \let\@endpbox\relax
+ \@temptokena{#1}\@tempswatrue
+ \@whilesw\if@tempswa\fi{\@tempswafalse\the\NC@list}%
+ \count@\m@ne
+ \let\the@toks\relax
+ \prepnext@tok
+ \expandafter \@tfor \expandafter \@nextchar
+ \expandafter :\expandafter =\the\@temptokena \do
+ {\@testpach
+ \ifcase \@chclass \@classz \or \@classi \or \@classii
+ \or \save@decl \or \or \@classv \or \@classvi
+ \or \@classvii \or \@classviii
+ \or \@classx
+ \or \@classx \fi
+ \@lastchclass\@chclass}%
+ \ifcase\@lastchclass
+ \@acol \or
+ \or
+ \@acol \or
+ \@preamerr \thr@@ \or
+ \@preamerr \tw@ \@addtopreamble\@sharp \or
+ \or
+ \else \@preamerr \@ne \fi
+ \def\the@toks{\the\toks}%
+}%
+\def\@mkpream@array@new#1{%
+ \gdef\@preamble{}%
+ \@lastchclass\f@ur
+ \@firstamptrue
+ \let\@sharp\relax
+ \@mkpream@relax
+ \@temptokena{#1}\@tempswatrue
+ \@whilesw\if@tempswa\fi{\@tempswafalse\the\NC@list}%
+ \count@\m@ne
+ \let\the@toks\relax
+ \prepnext@tok
+ \expandafter\@tfor\expandafter\@nextchar\expandafter:\expandafter=\the\@temptokena
+ \do{%
+ \@testpach
+ \ifcase\@chclass
+ \@classz
+ \or
+ \@classi
+ \or
+ \@classii
+ \or
+ \save@decl
+ \or
+ \or
+ \@classv
+ \or
+ \@classvi
+ \or
+ \@classvii
+ \or
+ \@classviii
+ \or
+ \@classx
+ \or
+ \@classx
+ \fi
+ \@lastchclass\@chclass
+ }%
+ \ifcase\@lastchclass
+ \@acolr % right-hand column
+ \or
+ \or
+ \@acolr % right-hand column
+ \or
+ \@preamerr\thr@@
+ \or
+ \@preamerr\tw@\@addtopreamble\@sharp
+ \or
+ \or
+ \else
+ \@preamerr\@ne
+ \fi
+ \def\the@toks{\the\toks}%
+}%
+\def\@addamp@LaTeX{%
+ \if@firstamp\@firstampfalse\else\edef\@preamble{\@preamble &}\fi
+}%
+\def\@addamp@ltx{%
+ \if@firstamp\@firstampfalse\else\@addtopreamble{&}\fi
+}%
+\def\@arrayacol@LaTeX{%
+ \edef\@preamble{\@preamble \hskip \arraycolsep}%
+}%
+\def\@arrayacol@ltx{%
+ \@addtopreamble{\hskip\arraycolsep}%
+}%
+\def\@tabacoll{%
+ \@addtopreamble{\hskip\tableftsep\relax}%
+}%
+\def\@tabacol@LaTeX{%
+ \edef\@preamble{\@preamble \hskip \tabcolsep}%
+}%
+\def\@tabacol@ltx{%
+ \@addtopreamble{\hskip\tabmidsep\relax}%
+}%
+\def\@tabacolr{%
+ \@addtopreamble{\hskip\tabrightsep\relax}%
+}%
+\def\@arrayclassz@LaTeX{%
+ \ifcase \@lastchclass \@acolampacol \or \@ampacol \or
+ \or \or \@addamp \or
+ \@acolampacol \or \@firstampfalse \@acol \fi
+ \edef\@preamble{\@preamble
+ \ifcase \@chnum
+ \hfil$\relax\@sharp$\hfil \or $\relax\@sharp$\hfil
+ \or \hfil$\relax\@sharp$\fi}%
+}%
+\def\@arrayclassz@ltx{%
+ \ifcase\@lastchclass
+ \@acolampacol
+ \or
+ \@ampacol
+ \or
+ \or
+ \or
+ \@addamp
+ \or
+ \@acolampacol
+ \or
+ \@firstampfalse\@acoll
+ \fi
+ \ifcase\@chnum
+ \@addtopreamble{%
+ \hfil\array@row@rst$\relax\@sharp$\hfil
+ }%
+ \or
+ \@addtopreamble{%
+ \array@row@rst$\relax\@sharp$\hfil
+ }%
+ \or
+ \@addtopreamble{%
+ \hfil\array@row@rst$\relax\@sharp$%
+ }%
+ \fi
+}%
+\def\@tabclassz@LaTeX{%
+ \ifcase\@lastchclass
+ \@acolampacol
+ \or
+ \@ampacol
+ \or
+ \or
+ \or
+ \@addamp
+ \or
+ \@acolampacol
+ \or
+ \@firstampfalse\@acol
+ \fi
+ \edef\@preamble{%
+ \@preamble{%
+ \ifcase\@chnum
+ \hfil\ignorespaces\@sharp\unskip\hfil
+ \or
+ \hskip1sp\ignorespaces\@sharp\unskip\hfil
+ \or
+ \hfil\hskip1sp\ignorespaces\@sharp\unskip
+ \fi}}%
+}%
+\def\@tabclassz@ltx{%
+ \ifcase\@lastchclass
+ \@acolampacol
+ \or
+ \@ampacol
+ \or
+ \or
+ \or
+ \@addamp
+ \or
+ \@acolampacol
+ \or
+ \@firstampfalse\@acoll
+ \fi
+ \ifcase\@chnum
+ \@addtopreamble{%
+ {\hfil\array@row@rst\cell@font\ignorespaces\@sharp\unskip\hfil}%
+ }%
+ \or
+ \@addtopreamble{%
+ {\cell@fil\hskip1sp\array@row@rst\cell@font\ignorespaces\@sharp\unskip\hfil}%
+ }%
+ \or
+ \@addtopreamble{%
+ {\hfil\hskip1sp\array@row@rst\cell@font\ignorespaces\@sharp\unskip\cell@fil}%
+ }%
+ \fi
+}%
+\def\@tabclassiv@LaTeX{%
+ \@addtopreamble\@nextchar
+}%
+\def\@tabclassiv@ltx{%
+ \expandafter\@addtopreamble\expandafter{\@nextchar}%
+}%
+\def\@arrayclassiv@LaTeX{%
+ \@addtopreamble{$\@nextchar$}%
+}%
+\def\@arrayclassiv@ltx{%
+ \expandafter\@addtopreamble\expandafter{\expandafter$\@nextchar$}%
+}%
+\def\@classv@LaTeX{%
+ \@addtopreamble{\@startpbox{\@nextchar}\ignorespaces
+ \@sharp\@endpbox}%
+}%
+\def\@classv@ltx{%
+ \expandafter\@addtopreamble
+ \expandafter{%
+ \expandafter \@startpbox
+ \expandafter {\@nextchar}%
+ \pbox@hook\array@row@rst\cell@font\ignorespaces\@sharp\@endpbox
+ }%
+}%
+\def\@classx@array{%
+ \ifcase \@lastchclass
+ \@acolampacol \or
+ \@addamp \@acol \or
+ \@acolampacol \or
+ \or
+ \@acol \@firstampfalse \or
+ \@addamp
+ \fi
+}%
+\def\@classx@array@new{%
+ \ifcase \@lastchclass
+ \@acolampacol
+ \or
+ \@addamp \@acol
+ \or
+ \@acolampacol
+ \or
+ \or
+ \@firstampfalse\@acoll
+ \or
+ \@addamp
+ \fi
+}%
+\def\@xbitor@LaTeX #1{\@tempcntb \count#1
+ \ifnum \@tempcnta =\z@
+ \else
+ \divide\@tempcntb\@tempcnta
+ \ifodd\@tempcntb \@testtrue\fi
+ \fi}%
+\def\@xbitor@ltx#1{%
+ \@tempcntb\count#1%
+ \@ifnum{\@tempcnta=\z@}{}{%
+ \divide\@tempcntb\@tempcnta
+ \@ifodd\@tempcntb{\@testtrue}{}%
+ }%
+}%
+\@ifx{\@xbitor\@xbitor@LaTeX}{%
+ \class@info{Repairing broken LaTeX \string\@xbitor}%
+}{%
+ \class@info{Unrecognized LaTeX \string\@xbitor. Please update this document class! (Proceeding with fingers crossed.)}%
+}%
+\let\@xbitor\@xbitor@ltx
+\newcommand*\@gobble@opt@one[2][]{}%
+\def\@starttoc#1{%
+ \begingroup
+ \toc@pre
+ \makeatletter
+ \@input{\jobname.#1}%
+ \if@filesw
+ \expandafter\newwrite\csname tf@#1\endcsname
+ \immediate\openout \csname tf@#1\endcsname \jobname.#1\relax
+ \fi
+ \@nobreakfalse
+ \toc@post
+ \endgroup
+}%
+\def\toc@pre{}%
+\def\toc@post{}%
+\def\toc@@font{}%{\footnotesize\rmfamily}%
+\def\@dotsep{\z@}%{5.5pt}%
+\let\tocdim@section \leftmargini
+\let\tocdim@subsection \leftmarginii
+\let\tocdim@subsubsection \leftmarginiii
+\let\tocdim@paragraph \leftmarginiv
+\let\tocdim@appendix \leftmarginv
+\let\tocdim@pagenum \leftmarginvi
+\def\toc@pre@auto{%
+ \toc@@font
+ \@tempdima\z@
+ \toc@setindent\@tempdima{section}%
+ \toc@setindent\@tempdima{subsection}%
+ \toc@setindent\@tempdima{subsubsection}%
+ \toc@setindent\@tempdima{paragraph}%
+ \toc@letdimen{appendix}%
+ \toc@letdimen{pagenum}%
+}%
+\def\toc@post@auto{%
+ \if@filesw
+ \begingroup
+ \toc@writedimen{section}%
+ \toc@writedimen{subsection}%
+ \toc@writedimen{subsubsection}%
+ \toc@writedimen{paragraph}%
+ \toc@writedimen{appendix}%
+ \toc@writedimen{pagenum}%
+ \endgroup
+ \fi
+}%
+\def\toc@setindent#1#2{%
+ \csname tocdim@#2\endcsname\tocdim@min\relax
+ \@ifundefined{tocmax@#2}{\@namedef{tocmax@#2}{\z@}}{}%
+ \advance#1\@nameuse{tocmax@#2}\relax
+ \expandafter\edef\csname tocleft@#2\endcsname{\the#1}%
+}%
+\def\toc@letdimen#1{%
+ \csname tocdim@#1\endcsname\tocdim@min\relax
+ \@ifundefined{tocmax@#1}{\@namedef{tocmax@#1}{\z@}}{}%
+ \expandafter\let\csname tocleft@#1\expandafter\endcsname\csname tocmax@#1\endcsname
+}%
+\def\toc@writedimen#1{%
+ \immediate\write\@auxout{%
+ \gdef\expandafter\string\csname tocmax@#1\endcsname{%
+ \expandafter\the\csname tocdim@#1\endcsname
+ }%
+ }%
+}%
+\def\l@@sections#1#2#3#4{%
+ % #1 - superior section
+ % #2 - this section
+ % #3 - content, including possible \numberline
+ % #4 - page number
+ \begingroup
+ \everypar{}%
+ \set@tocdim@pagenum{#4}%
+ \global\@tempdima\csname tocdim@#2\endcsname
+ \leftskip\csname tocleft@#2\endcsname\relax
+ \dimen@\csname tocleft@#1\endcsname\relax
+ \parindent-\leftskip\advance\parindent\dimen@
+ \rightskip\tocleft@pagenum plus 1fil\relax
+ \skip@\parfillskip\parfillskip\z@
+ \let\numberline\numberline@@sections
+ \@nameuse{l@f@#2}%
+ \ignorespaces#3\unskip\nobreak\hskip\skip@
+ \hb@xt@\rightskip{\hfil\unhbox\@tempboxa}\hskip-\rightskip\hskip\z@skip
+ \par
+ \expandafter\aftergroup\csname tocdim@#2\endcsname\expandafter
+ \endgroup\the\@tempdima\relax
+}%
+\def\set@tocdim@pagenum#1{%
+ \setbox\@tempboxa\hbox{\ignorespaces#1}%
+ \@ifdim{\tocdim@pagenum<\wd\z@}{\global\tocdim@pagenum\wd\z@}{}%
+}%
+\def\numberline@@sections#1{%
+ \leavevmode\hb@xt@-\parindent{%
+ \hfil
+ \@if@empty{#1}{}{%
+ \setbox\z@\hbox{#1.\kern\@dotsep}%
+ \@ifdim{\@tempdima<\wd\z@}{\global\@tempdima\wd\z@}{}%
+ \unhbox\z@
+ }%
+ }%
+ \ignorespaces
+}%
+\def\tocdim@min{\z@}%
+\def\list#1#2{%
+ \ifnum \@listdepth >5\relax
+ \@toodeep
+ \else
+ \global\advance\@listdepth\@ne
+ \fi
+ \rightmargin\z@
+ \listparindent\z@
+ \itemindent\z@
+ \csname @list\romannumeral\the\@listdepth\endcsname
+ \def\@itemlabel{#1}%
+ \let\makelabel\@mklab
+ \@nmbrlistfalse
+ #2\relax
+ \@trivlist
+ \parskip\parsep
+ \set@listindent
+ \ignorespaces
+}%
+\def\set@listindent@parshape{%
+ \parindent\listparindent
+ \advance\@totalleftmargin\leftmargin
+ \advance\linewidth-\rightmargin
+ \advance\linewidth-\leftmargin
+ \parshape\@ne\@totalleftmargin\linewidth
+}%
+\def\set@listindent@{%
+ \parindent\listparindent
+ \advance\@totalleftmargin\leftmargin
+ \advance\rightskip\rightmargin
+ \advance\leftskip\@totalleftmargin
+}%
+\let\set@listindent\set@listindent@parshape
+\typeout{%
+ ltxgrid: portions licensed from W. E. Baxter (web@superscript.com)%
+}%
+\newcounter{linecount}
+\def\lineloop#1{%
+ \loop
+ \ifnum\c@linecount<#1\relax
+ \global\advance\c@linecount\@ne
+ \par
+ \hb@xt@\hsize{%
+ \ifnum\c@linecount<100 0\fi\ifnum\c@linecount<10 0\fi\number\c@linecount
+ \vrule depth2.5\p@
+ \leaders\hrule\hfil
+ }%
+ \penalty\interlinepenalty
+ \repeat
+}%
+\let\@@mark\mark
+\let\@@topmark\topmark
+\let\@@firstmark\firstmark
+\let\@@botmark\botmark
+\let\@@splitfirstmark\splitfirstmark
+\let\@@splitbotmark\splitbotmark
+\def\@themark{{}{}{}{}}%
+\def\nul@mark{{}{}{}{}\@@nul}%
+\def\set@mark@netw@#1#2#3#4#5#6#7{\gdef#1{{#6}{#7}{#4}{#5}}\do@mark}%
+\def\set@marktw@#1#2#3#4#5#6{\gdef#1{{#2}{#6}{#4}{#5}}\do@mark}%
+\def\set@markthr@@#1#2#3#4#5#6{\gdef#1{{#2}{#3}{#6}{#5}}\do@mark}%
+\def\get@mark@@ne#1#2#3#4#5\@@nul{#1}%
+\def\get@mark@tw@#1#2#3#4#5\@@nul{#2}%
+\def\get@mark@thr@@#1#2#3#4#5\@@nul{#3}%
+\def\get@mark@f@ur#1#2#3#4#5\@@nul{#4}%
+\def\mark@netw@{\expandafter\set@mark@netw@\expandafter\@themark\@themark}%
+\def\marktw@{\expandafter\set@marktw@\expandafter\@themark\@themark}%
+\def\markthr@@{\expandafter\set@markthr@@\expandafter\@themark\@themark}%
+\def\do@mark{\do@@mark\@themark\nobreak@mark}%
+\def\do@@mark#1{%
+ \begingroup
+ \let@mark
+ \@@mark{#1}%
+ \endgroup
+}%
+\def\let@mark{%
+ \let\protect\@unexpandable@protect
+ \let\label\relax
+ \let\index\relax
+ \let\glossary\relax
+}%
+\def\nobreak@mark{%
+ \@if@sw\if@nobreak\fi{\@ifvmode{\nobreak}{}}{}%
+}%
+\def\mark@envir{\markthr@@}%
+\def\bot@envir{%
+ \expandafter\expandafter
+ \expandafter\get@mark@thr@@
+ \expandafter\@@botmark
+ \nul@mark
+}%
+\def\markboth{\mark@netw@}%
+\def\markright{\marktw@}%
+\def\leftmark{%
+ \expandafter\expandafter
+ \expandafter\get@mark@@ne
+ \expandafter\saved@@botmark
+ \nul@mark
+}%
+\def\rightmark{%
+ \expandafter\expandafter
+ \expandafter\get@mark@tw@
+ \expandafter\saved@@firstmark
+ \nul@mark
+}%
+\let\primitive@output\output
+\long\def\@tempa#1\@@nil{#1}%
+\toks@
+\expandafter\expandafter
+\expandafter{%
+\expandafter \@tempa
+ \the\output
+ \@@nil
+ }%
+\newtoks\output
+\output\expandafter{\the\toks@}%
+\primitive@output{\dispatch@output}%
+\def\dispatch@output{%
+ \let\par\@@par
+ \expandafter\let\expandafter\@tempa\csname output@\the\outputpenalty\endcsname
+ \outputdebug@sw{%
+ \saythe\badness
+ \saythe\outputpenalty
+ \saythe\holdinginserts
+ \say\thepagegrid
+ \saythe\pagegrid@col
+ \saythe\pagegrid@cur
+ %\say\bot@envir
+ \saythe\insertpenalties
+ %\say\@@topmark
+ %\say\saved@@topmark
+ %\say\@@firstmark
+ %\say\saved@@firstmark
+ \say\@@botmark
+ %\say\saved@@botmark
+ \saythe\pagegoal
+ \saythe\pagetotal
+ \saythe{\badness\@cclv}%
+ \expandafter\@ifx\expandafter{\csname output@-\the\execute@message@pen\endcsname\@tempa}{%
+ \say\@message@saved
+ }{%
+ \expandafter\say\csname output@\the\outputpenalty\endcsname
+ }%
+ \say\@toplist
+ \say\@botlist
+ \say\@dbltoplist
+ \say\@deferlist
+ {\tracingall\scrollmode
+ \showbox\@cclv
+ \showbox\@cclv@saved
+ \showbox\pagesofar
+ \showbox\footbox
+ \showbox\footins@saved
+ \showbox\footins
+ \showlists
+ }%
+ }{}%
+ \@ifnotrelax\@tempa{\@tempa}{\the\output}%
+}%
+\@ifxundefined{\outputdebug@sw}{%
+ \@booleanfalse\outputdebug@sw
+}{}%
+\output={\toggle@insert\output@holding\output@moving}%
+\def\output@holding{%
+\csname output@init@\bot@envir\endcsname
+\@if@exceed@pagegoal{\unvcopy\@cclv}{%
+ \setbox\z@\vbox{\unvcopy\@cclv}%
+\outputdebug@sw{{\tracingall\scrollmode\showbox\z@}}{}%
+\dimen@\ht\@cclv\advance\dimen@-\ht\z@
+\dead@cycle@repair\dimen@
+}{%
+\dead@cycle
+}%
+}%
+\def\@if@exceed@pagegoal#1{%
+ \begingroup
+ \setbox\z@\vbox{#1}%
+ \dimen@\ht\z@\advance\dimen@\dp\z@
+ \outputdebug@sw{\saythe\dimen@}{}%
+ \@ifdim{\dimen@>\pagegoal}{%
+ \setbox\z@\vbox{\@@mark{}\unvbox\z@}%
+ \splittopskip\topskip
+ \splitmaxdepth\maxdepth
+ \vbadness\@M
+ \vfuzz\maxdimen
+ \setbox\tw@\vsplit\z@ to\pagegoal
+ \outputdebug@sw{{\tracingall\scrollmode\showbox\tw@\showbox\z@}}{}%
+ \setbox\tw@\vbox{\unvbox\tw@}%
+ \@ifdim{\ht\tw@=\z@}{%
+ \ltxgrid@info{Found overly large chunk while preparing to move insertions. Attempting repairs}%
+ \aftergroup\true@sw
+ }{%
+ \aftergroup\false@sw
+ }%
+ }{%
+ \aftergroup\false@sw
+ }%
+\endgroup
+}%
+%% \item
+%% Put down the same interrupts as for the non-trivial case above.
+\def\output@moving{%
+ \set@top@firstmark
+ \@ifnum{\outputpenalty=\do@newpage@pen}{%
+ \setbox\@cclv\vbox{%
+ \unvbox\@cclv
+ \setbox\z@\lastbox
+ \@ifdim{\ht\z@=\ht\@protection@box}{\box\lastbox}{\unskip}%
+ }%
+ }{}%
+ \@cclv@nontrivial@sw{%
+ \csname output@prep@\bot@envir \endcsname
+ \@makecol\csname output@column@\thepagegrid\endcsname
+ \protect@penalty\do@startcolumn@pen
+ \clearpage@sw{%
+ \protect@penalty\do@endpage@pen
+ }{}%
+ \csname output@post@\bot@envir \endcsname
+ }{%
+ {\setbox\z@\box\@cclv}%
+ }%
+ \set@colroom
+ \global\@mparbottom\z@
+ \global\@textfloatsheight\z@ %FIXME: this legacy LaTeX variable is set, but never queried!
+}%
+\def\@cclv@nontrivial@sw{%
+\@ifx@empty\@toplist{%
+\@ifx@empty\@botlist{%
+\@ifvoid\footins{%
+ \@ifvoid\@cclv{%
+ \false@sw
+ }{%
+\setbox\z@\vbox{\unvcopy\@cclv}%
+\@ifdim{\ht\z@=\topskip}{%
+\setbox\z@\vbox{%
+\unvbox\z@
+\setbox\z@\lastbox\dimen@\lastskip\unskip
+\@ifdim{\ht\z@=\ht\@protection@box}{%
+\advance\dimen@\ht\z@
+\@ifdim{\dimen@=\topskip}{%
+\aftergroup\true@sw
+}{%
+\aftergroup\false@sw
+}%
+}{%
+\aftergroup\false@sw
+}%
+}%
+{%
+\false@sw % Normal for \clearpage
+}{%
+\true@sw
+}%
+}{%
+\@ifdim{\ht\z@=\z@}{%
+\ltxgrid@info{Found trivial column. Discarding it}%
+\outputdebug@sw{{\tracingall\scrollmode\showbox\@cclv}}{}%
+\false@sw
+}{%
+\true@sw
+}%
+}%
+ }%
+}{%
+\true@sw
+}%
+}{%
+\true@sw
+}%
+}{%
+\true@sw
+}%
+}%
+\def\protect@penalty#1{\protection@box\penalty-#1\relax}%
+\newbox\@protection@box
+\setbox\@protection@box\vbox to1986sp{\vfil}%
+\def\protection@box{\nointerlineskip\copy\@protection@box}%
+\def\dead@cycle@repair#1{%
+\expandafter\do@@mark
+\expandafter{%
+\@@botmark
+}%
+\unvbox\@cclv
+\nointerlineskip
+\vbox to#1{\vss}%
+\@ifnum{\outputpenalty<\@M}{\penalty\outputpenalty}{}%
+}%
+\def\dead@cycle@repair@protected#1{%
+\expandafter\do@@mark
+\expandafter{%
+\@@botmark
+}%
+\begingroup
+ \unvbox\@cclv
+ \setbox\z@\lastbox % Remove protection box
+ \nointerlineskip
+ \advance#1-\ht\@protection@box
+ \vbox to#1{\vss}%
+ \protection@box % Reinsert protection box
+ \@ifnum{\outputpenalty<\@M}{\penalty\outputpenalty}{}%
+\endgroup
+}%
+\def\dead@cycle{%
+ \expandafter\do@@mark
+ \expandafter{%
+ \@@botmark
+ }%
+ \unvbox\@cclv
+ \@ifnum{\outputpenalty<\@M}{\penalty\outputpenalty}{}%
+}%
+\def\output@init@document{%
+ \@ifvoid\footbox{}{%
+ \global\advance\vsize-\ht\footbox
+ \global\advance\vsize-\dp\footbox
+ }%
+}%
+\def\output@prep@document{%
+ \@ifvoid\footbox{}{%
+ \setbox\footins\vbox{\unvbox\footbox\unvbox\footins}%
+ }%
+}%
+\def\output@post@document{}%
+\let\@opcol\@undefined
+\def\@makecol{%
+ \setbox\@outputbox\vbox{%
+ \boxmaxdepth\@maxdepth
+ \@tempdima\dp\@cclv
+ \unvbox\@cclv
+ \vskip-\@tempdima
+ }%
+ \xdef\@freelist{\@freelist\@midlist}\global\let\@midlist\@empty
+ \@combinefloats
+ \@combineinserts\@outputbox\footins
+ \set@adj@colht\dimen@
+ \count@\vbadness
+ \vbadness\@M
+ \setbox\@outputbox\vbox to\dimen@{%
+ \@texttop
+ \dimen@\dp\@outputbox
+ \unvbox\@outputbox
+ \vskip-\dimen@
+ \@textbottom
+ }%
+ \vbadness\count@
+ \global\maxdepth\@maxdepth
+}%
+\let\@makespecialcolbox\@undefined
+\def\@combineinserts#1#2{%
+ \setbox#1\vbox{%
+ \unvbox#1%
+ \vbox{%
+ \@ifvoid#2{}{%
+ \vskip\skip\footins
+ \color@begingroup
+ \normalcolor
+ \footnoterule
+ \nointerlineskip
+ \box#2%
+ \color@endgroup
+ }{}%
+ }%
+ }%
+}%
+\appdef\@floatplacement{%
+ \global\@fpmin\@fpmin
+}%
+\mathchardef\pagebreak@pen=\@M
+\expandafter\let\csname output@-\the\pagebreak@pen\endcsname\relax
+\mathchardef\do@startcolumn@pen=10005
+\@namedef{output@-\the\do@startcolumn@pen}{\do@startcolumn}%
+\def\do@startcolumn{%
+ \setbox\@cclv\vbox{\unvbox\@cclv\setbox\z@\lastbox\unskip}%
+ \clearpage@sw{\@clearfloatplacement}{\@floatplacement}%
+ \set@colroom
+ \@booleanfalse\pfloat@avail@sw
+ \begingroup
+ \@colht\@colroom
+ \@booleanfalse\float@avail@sw
+ \@tryfcolumn\test@colfloat
+ \float@avail@sw{\aftergroup\@booleantrue\aftergroup\pfloat@avail@sw}{}%
+ \endgroup
+ \fcolmade@sw{%
+ \setbox\@cclv\vbox{\unvbox\@outputbox\unvbox\@cclv}%
+ \outputpenalty-\pagebreak@pen % ask for a return visit, this time with insertions and all.
+ \dead@cycle
+ }{%
+ \begingroup
+ \let\@elt\@scolelt
+ \let\reserved@b\@deferlist\global\let\@deferlist\@empty\reserved@b
+ \endgroup
+ \clearpage@sw{%
+ \outputpenalty\@M
+ }{%
+ \outputpenalty\do@newpage@pen
+ }%
+ \dead@cycle
+ }%
+ \check@deferlist@stuck\do@startcolumn
+ \set@vsize
+}%
+\def\@scolelt#1{\def\@currbox{#1}\@addtonextcol}%
+\def\test@colfloat#1{%
+ \csname @floatselect@sw@\thepagegrid\endcsname#1{}{\@testtrue}%
+ \@if@sw\if@test\fi{}{\aftergroup\@booleantrue\aftergroup\float@avail@sw}%
+}%
+\def\@addtonextcol{%
+ \begingroup
+ \@insertfalse
+ \@setfloattypecounts
+ \csname @floatselect@sw@\thepagegrid\endcsname\@currbox{%
+ \@ifnum{\@fpstype=8 }{}{%
+ \@ifnum{\@fpstype=24 }{}{%
+ \@flsettextmin
+ \@reqcolroom \ht\@currbox
+ \advance \@reqcolroom \@textmin
+ \advance \@reqcolroom \vsize % take into account split insertions
+ \advance \@reqcolroom -\pagegoal
+ \@ifdim{\@colroom>\@reqcolroom}{%
+ \@flsetnum \@colnum
+ \@ifnum{\@colnum>\z@}{%
+ \@bitor\@currtype\@deferlist
+ \@if@sw\if@test\fi{}{%
+ \@addtotoporbot
+ }%
+ }{}%
+ }{}%
+ }%
+ }%
+ }{}%
+ \@if@sw\if@insert\fi{}{%
+ \@cons\@deferlist\@currbox
+ }%
+ \endgroup
+}%
+\mathchardef\do@startpage@pen=10006
+\@namedef{output@-\the\do@startpage@pen}{\do@startpage}%
+\def\do@startpage{%
+ \setbox\@cclv\vbox{\unvbox\@cclv\setbox\z@\lastbox\unskip}%
+ \clearpage@sw{\@clearfloatplacement}{\@dblfloatplacement}%
+ \set@colht
+ \@booleanfalse\pfloat@avail@sw
+ \begingroup
+ \@booleanfalse\float@avail@sw
+ \@tryfcolumn\test@dblfloat
+ \float@avail@sw{\aftergroup\@booleantrue\aftergroup\pfloat@avail@sw}{}%
+ \endgroup
+ \fcolmade@sw{%
+ \global\setbox\pagesofar\vbox{\unvbox\pagesofar\unvbox\@outputbox}%
+ \@combinepage
+ \@combinedblfloats
+ \@outputpage
+ \global\pagegrid@cur\@ne
+ \protect@penalty\do@startpage@pen
+ }{%
+ \begingroup
+ \@booleanfalse\float@avail@sw
+ \let\@elt\@sdblcolelt
+ \let\reserved@b\@deferlist\global\let\@deferlist\@empty\reserved@b
+ \endgroup
+ \@ifdim{\@colht=\textheight}{% No luck...
+ \pfloat@avail@sw{% ...but a float *was* available!
+ \forcefloats@sw{%
+ \ltxgrid@warn{Forced dequeueing of floats stalled}%
+ }{%
+ \ltxgrid@warn{Dequeueing of floats stalled}%
+ }%
+ }{}%
+ }{}%
+ \outputpenalty\@M
+ \dead@cycle
+ }%
+ \check@deferlist@stuck\do@startpage
+ \set@colht
+}%
+\def\@sdblcolelt#1{\def\@currbox{#1}\@addtodblcol}%
+\def\test@dblfloat#1{%
+ \@if@notdblfloat{#1}{\@testtrue}{}%
+ \@if@sw\if@test\fi{}{\aftergroup\@booleantrue\aftergroup\float@avail@sw}%
+}%
+\def\@if@notdblfloat#1{\@ifdim{\wd#1<\textwidth}}%
+\@booleanfalse\forcefloats@sw
+\def\@addtodblcol{%
+ \begingroup
+ \@if@notdblfloat{\@currbox}{%
+ \false@sw
+ }{%
+ \@setfloattypecounts
+ \@getfpsbit \tw@
+ \@bitor \@currtype \@deferlist
+ \@if@sw\if@test\fi{%
+ \false@sw
+ }{%
+ \@ifodd\@tempcnta{%
+ \aftergroup\@booleantrue\aftergroup\float@avail@sw
+ \@flsetnum \@dbltopnum
+ \@ifnum{\@dbltopnum>\z@}{%
+ \@ifdim{\@dbltoproom>\ht\@currbox}{%
+ \true@sw
+ }{%
+ \@ifnum{\@fpstype<\sixt@@n}{%
+ \begingroup
+ \advance \@dbltoproom \@textmin
+ \@ifdim{\@dbltoproom>\ht\@currbox}{%
+ \endgroup\true@sw
+ }{%
+ \endgroup\false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }%
+ }%
+ {%
+ \@tempdima -\ht\@currbox
+ \advance\@tempdima
+ -\@ifx{\@dbltoplist\@empty}{\dbltextfloatsep}{\dblfloatsep}%
+ \global \advance \@dbltoproom \@tempdima
+ \global \advance \@colht \@tempdima
+ \global \advance \@dbltopnum \m@ne
+ \@cons \@dbltoplist \@currbox
+ }{%
+ \@cons \@deferlist \@currbox
+ }%
+ \endgroup
+}%
+\def\@tryfcolumn#1{%
+ \global\@booleanfalse\fcolmade@sw
+ \@ifx@empty\@deferlist{}{%
+ \global\let\@trylist\@deferlist
+ \global\let\@failedlist\@empty
+ \begingroup
+ \dimen@\vsize\advance\dimen@-\pagegoal\@ifdim{\dimen@>\z@}{%
+ \advance\@fpmin-\dimen@
+ }{}%
+ \def\@elt{\@xtryfc#1}\@trylist
+ \endgroup
+ \fcolmade@sw{%
+ \global\setbox\@outputbox\vbox{\vskip \@fptop}%
+ \let \@elt \@wtryfc \@flsucceed
+ \global\setbox\@outputbox\vbox{\unvbox\@outputbox
+ \unskip \vskip \@fpbot
+ }%
+ \let \@elt \relax
+ \xdef\@deferlist{\@failedlist\@flfail}%
+ \xdef\@freelist{\@freelist\@flsucceed}%
+ }{}%
+ }%
+}%
+\def\@wtryfc #1{%
+ \global\setbox\@outputbox\vbox{\unvbox\@outputbox
+ \box #1\vskip\@fpsep
+ }%
+}%
+\def\@xtryfc#1#2{%
+ \@next\reserved@a\@trylist{}{}% trim \@trylist. Ugly!
+ \@currtype \count #2%
+ \divide\@currtype\@xxxii\multiply\@currtype\@xxxii
+ \@bitor \@currtype \@failedlist
+ \@testfp #2%
+ #1#2%
+ \@ifdim{\ht #2>\@colht }{\@testtrue}{}%
+ \@if@sw\if@test\fi{%
+ \@cons\@failedlist #2%
+ }{%
+ \begingroup
+ \gdef\@flsucceed{\@elt #2}%
+ \global\let\@flfail\@empty
+ \@tempdima\ht #2%
+ \def \@elt {\@ztryfc#1}\@trylist
+ \@ifdim{\@tempdima >\@fpmin}{%
+ \global\@booleantrue\fcolmade@sw
+ }{%
+ \@cons\@failedlist #2%
+ }%
+ \endgroup
+ \fcolmade@sw{%
+ \let \@elt \@gobble
+ }{}%
+ }%
+}%
+\def\@ztryfc #1#2{%
+ \@tempcnta \count#2%
+ \divide\@tempcnta\@xxxii\multiply\@tempcnta\@xxxii
+ \@bitor \@tempcnta {\@failedlist \@flfail}%
+ \@testfp #2%
+ #1#2%
+ \@tempdimb\@tempdima
+ \advance\@tempdimb \ht#2\advance\@tempdimb\@fpsep
+ \@ifdim{\@tempdimb >\@colht}{%
+ \@testtrue
+ }{}%
+ \@if@sw\if@test\fi{%
+ \@cons\@flfail #2%
+ }{%
+ \@cons\@flsucceed #2%
+ \@tempdima\@tempdimb
+ }%
+}%
+\def\newpage@prep{%
+ \if@noskipsec
+ \ifx \@nodocument\relax
+ \leavevmode
+ \global \@noskipsecfalse
+ \fi
+ \fi
+ \if@inlabel
+ \leavevmode
+ \global \@inlabelfalse
+ \fi
+ \if@nobreak \@nobreakfalse \everypar{}\fi
+ \par
+}%
+\def \newpage {%
+ \newpage@prep
+ \do@output@MVL{%
+ \vfil
+ \penalty-\pagebreak@pen
+ }%
+}%
+\def\clearpage{%
+ \newpage@prep
+ \do@output@MVL{%
+ \vfil
+ \penalty-\pagebreak@pen
+ \global\@booleantrue\clearpage@sw
+ \protect@penalty\do@startcolumn@pen
+ \protect@penalty\do@endpage@pen
+ }%
+ \do@output@MVL{%
+ \global\@booleanfalse\clearpage@sw
+ }%
+}%
+\def\cleardoublepage{%
+ \clearpage
+ \@if@sw\if@twoside\fi{%
+ \@ifodd\c@page{}{%
+ \null\clearpage
+ }%
+ }{}%
+}%
+\@booleanfalse\clearpage@sw
+\mathchardef\do@endpage@pen=10007
+\@namedef{output@-\the\do@endpage@pen}{%
+ \csname end@column@\thepagegrid\endcsname
+}%
+\mathchardef\do@newpage@pen=10001
+\expandafter\let\csname output@-\the\do@newpage@pen\endcsname\relax
+\def\@clearfloatplacement{%
+ \global\@topnum \maxdimen % \c@topnumber
+ \global\@toproom \maxdimen % \topfraction\@colht
+ \global\@botnum \maxdimen % \c@bottomnumber
+ \global\@botroom \maxdimen % \bottomfraction\@colht
+ \global\@colnum \maxdimen % \c@totalnumber
+ \global\@dbltopnum \maxdimen % \c@dbltopnumber
+ \global\@dbltoproom \maxdimen % \dbltopfraction\@colht
+ \global\@textmin \z@ % \@colht\advance \@textmin -\@dbltoproom
+ \global\@fpmin \z@ % \dblfloatpagefraction\textheight
+ \let\@testfp\@gobble
+ \appdef\@setfloattypecounts{\@fpstype16\advance\@fpstype\m@ne}%
+}%
+\let\@doclearpage\@undefined
+\let\@makefcolumn\@undefined
+\def\clr@top@firstmark{%
+ \global\let\saved@@topmark\@undefined
+ \global\let\saved@@firstmark\@empty
+ \global\let\saved@@botmark\@empty
+}%
+\clr@top@firstmark
+\def\set@top@firstmark{%
+ \@ifxundefined\saved@@topmark{\expandafter\gdef\expandafter\saved@@topmark\expandafter{\@@topmark}}{}%
+ \@if@empty\saved@@firstmark{\expandafter\gdef\expandafter\saved@@firstmark\expandafter{\@@firstmark}}{}%
+ \@if@empty\@@botmark{}{\expandafter\gdef\expandafter\saved@@botmark\expandafter{\@@botmark}}%
+}%
+\appdef\@outputpage{%
+ \clr@top@firstmark
+}%
+\def\@float#1{%
+ \@ifnextchar[{%}]{%Brace-matching klootch
+ \@yfloat\width@float{#1}%
+ }{%
+ \@ifxundefined@cs{fps@#1}{%
+ \edef\reserved@a{\noexpand\@yfloat\noexpand\width@float{#1}[\csname fps@\endcsname]}\reserved@a
+ }{%
+ \edef\reserved@a{\noexpand\@yfloat\noexpand\width@float{#1}[\csname fps@#1\endcsname]}\reserved@a
+ }%
+ }%
+}%
+\def\@dblfloat#1{%
+ \@ifnum{\pagegrid@col=\@ne}{%
+ \@float{#1}%
+ }{%
+ \@ifnextchar[{%}]{%Brace-matching klootch
+ \@yfloat\widthd@float{#1}%
+ }{%
+ \@ifxundefined@cs{fpsd@#1}{%
+ \edef\reserved@a{\noexpand\@yfloat\noexpand\widthd@float{#1}[\csname fpsd@\endcsname]}\reserved@a
+ }{%
+ \edef\reserved@a{\noexpand\@yfloat\noexpand\widthd@float{#1}[\csname fpsd@#1\endcsname]}\reserved@a
+ }%
+ }%
+ }%
+}%
+\def\@yfloat#1#2[#3]{%
+ \@xfloat{#2}[#3]%
+ \hsize#1\linewidth\hsize
+ \minipagefootnote@init
+}%
+\def\fps@{tbp}%
+\def\fpsd@{tp}%
+\def\width@float{\columnwidth}%
+\def\widthd@float{\textwidth}%
+\def\end@float{%
+ \end@@float{%
+ \check@currbox@count
+ }%
+}%
+\def\end@dblfloat{%
+ \@ifnum{\pagegrid@col=\@ne}{%
+ \end@float
+ }{%
+ \end@@float{%
+ \@boxfpsbit\@currbox{1}\@ifodd\@tempcnta{\global\advance\count\@currbox\m@ne}{}%
+ \@boxfpsbit\@currbox{4}\@ifodd\@tempcnta{\global\advance\count\@currbox-4\relax}{}%
+ \global\wd\@currbox\textwidth % Klootch
+ \check@currbox@count
+ }%
+ }%
+}%
+\def\end@@float#1{%
+ \minipagefootnote@here
+ \@endfloatbox
+ #1%
+ \@ifnum{\@floatpenalty <\z@}{%
+ \@largefloatcheck
+ \@cons\@currlist\@currbox
+ \@ifnum{\@floatpenalty <-\@Mii}{%
+ \do@output@cclv{\@add@float}%
+ }{%
+ \vadjust{\do@output@cclv{\@add@float}}%
+ \@Esphack
+ }%
+ }{}%
+}%
+\def\check@currbox@count{%
+ \@ifnum{\count\@currbox>\z@}{%
+\count@\count\@currbox\divide\count@\sixt@@n\multiply\count@\sixt@@n
+\@tempcnta\count\@currbox\advance\@tempcnta-\count@
+\@ifnum{\@tempcnta=\z@}{%
+ \ltxgrid@warn{Float cannot be placed}%
+}{}%
+ }{%
+ % Is a \marginpar
+ }%
+}%
+\providecommand\minipagefootnote@init{}%
+\providecommand\minipagefootnote@here{}%
+\let\@specialoutput\@undefined
+\def\@add@float{%
+ \@pageht\ht\@cclv\@pagedp\dp\@cclv
+ \unvbox\@cclv
+ \@next\@currbox\@currlist{%
+ \csname @floatselect@sw@\thepagegrid\endcsname\@currbox{%
+ \@ifnum{\count\@currbox>\z@}{%
+ \advance \@pageht \@pagedp
+ \advance \@pageht \vsize \advance \@pageht -\pagegoal % do not assume \holdinginserts is cleared!
+ \@addtocurcol % Commit an h float
+ }{%
+ \@addmarginpar
+ }%
+ }{%
+ \@resethfps
+ \@cons\@deferlist\@currbox
+ }%
+ }{\@latexbug}%
+ \@ifnum{\outputpenalty<\z@}{%
+ \@if@sw\if@nobreak\fi{%
+ \nobreak
+ }{%
+ \addpenalty \interlinepenalty
+ }%
+ }{}%
+ \set@vsize
+}%
+\let\@reinserts\@undefined
+\def \@addtocurcol {%
+ \@insertfalse
+ \@setfloattypecounts
+ \ifnum \@fpstype=8
+ \else
+ \ifnum \@fpstype=24
+ \else
+ \@flsettextmin
+ \advance \@textmin \@textfloatsheight
+ \@reqcolroom \@pageht
+ \ifdim \@textmin>\@reqcolroom
+ \@reqcolroom \@textmin
+ \fi
+ \advance \@reqcolroom \ht\@currbox
+ \ifdim \@colroom>\@reqcolroom
+ \@flsetnum \@colnum
+ \ifnum \@colnum>\z@
+ \@bitor\@currtype\@deferlist
+ \if@test
+ \else
+ \@bitor\@currtype\@botlist
+ \if@test
+ \@addtobot
+ \else
+ \ifodd \count\@currbox
+ \advance \@reqcolroom \intextsep
+ \ifdim \@colroom>\@reqcolroom
+ \global \advance \@colnum \m@ne
+ \global \advance \@textfloatsheight \ht\@currbox
+ \global \advance \@textfloatsheight 2\intextsep
+ \@cons \@midlist \@currbox
+ \if@nobreak
+ \nobreak
+ \@nobreakfalse
+ \everypar{}%
+ \else
+ \addpenalty \interlinepenalty
+ \fi
+ \vskip \intextsep
+ \unvbox\@currbox %AO
+ \penalty\interlinepenalty
+ \vskip\intextsep
+ \ifnum\outputpenalty <-\@Mii \vskip -\parskip\fi
+ \outputpenalty \z@
+ \@inserttrue
+ \fi
+ \fi
+ \if@insert
+ \else
+ \@addtotoporbot
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \if@insert
+ \else
+ \@resethfps
+ \@cons\@deferlist\@currbox
+ \fi
+}%
+\@twocolumnfalse
+\let\@twocolumntrue\@twocolumnfalse
+\def\@addmarginpar{%
+ \@next\@marbox\@currlist{%
+ \@cons\@freelist\@marbox\@cons\@freelist\@currbox
+ }\@latexbug
+ \setbox\@marbox\hb@xt@\columnwidth{%
+ \csname @addmarginpar@\thepagegrid\endcsname{%
+ \hskip-\marginparsep\hskip-\marginparwidth
+ \box\@currbox
+ }{%
+ \hskip\columnwidth\hskip\marginparsep
+ \box\@marbox
+ }%
+ \hss
+ }%
+ \setbox\z@\box\@currbox
+ \@tempdima\@mparbottom
+ \advance\@tempdima -\@pageht
+ \advance\@tempdima\ht\@marbox
+ \@ifdim{\@tempdima >\z@}{%
+ \@latex@warning@no@line {Marginpar on page \thepage\space moved}%
+ }{%
+ \@tempdima\z@
+ }%
+ \global\@mparbottom\@pageht
+ \global\advance\@mparbottom\@tempdima
+ \global\advance\@mparbottom\dp\@marbox
+ \global\advance\@mparbottom\marginparpush
+ \advance\@tempdima -\ht\@marbox
+ \global\setbox \@marbox
+ \vbox {\vskip \@tempdima
+ \box \@marbox}%
+ \global \ht\@marbox \z@
+ \global \dp\@marbox \z@
+ \kern -\@pagedp
+ \nointerlineskip
+ \box\@marbox
+ \nointerlineskip
+ \hbox{\vrule \@height\z@ \@width\z@ \@depth\@pagedp}%
+}%
+\newenvironment{turnpage}{%
+ \def\width@float{\textheight}%
+ \def\widthd@float{\textheight}%
+ \appdef\@endfloatbox{%
+ \@ifxundefined\@currbox{%
+ \ltxgrid@warn{Cannot rotate! Not a float}%
+ }{%
+ \setbox\@currbox\vbox to\textwidth{\vfil\unvbox\@currbox\vfil}%
+ \global\setbox\@currbox\vbox{\rotatebox{90}{\box\@currbox}}%
+ }%
+ }%
+}{%
+}%
+\def\rotatebox@dummy#1#2{%
+ \ltxgrid@warn{You must load the graphics or graphicx package in order to use the turnpage environment}%
+ #2%
+}%
+\AtBeginDocument{%
+ \@ifxundefined\rotatebox{\let\rotatebox\rotatebox@dummy}{}%
+}%
+\@namedef{output@-1073741824}{%"40000000
+ \deadcycles\z@
+ \setbox\z@\box\@cclv
+}%
+\mathchardef\save@column@pen=10016
+\@namedef{output@-\the\save@column@pen}{\save@column}%
+\let \@cclv@saved \@holdpg
+\let \@holdpg \@undefined
+\def\save@column{%
+ \@ifvoid\@cclv@saved{%
+\set@top@firstmark
+\global\@topmark@saved\expandafter{\@@topmark}%
+ }{}%
+\global\setbox\@cclv@saved\vbox{%
+ \@ifvoid\@cclv@saved{}{%
+ \unvbox\@cclv@saved
+ \marry@baselines
+}%
+\unvbox\@cclv
+\lose@breaks
+\setbox\z@\lastbox
+}%
+}%
+\newtoks\@topmark@saved
+\def\prep@cclv{%
+ \setbox\z@\box\@cclv
+ \setbox\@cclv\box\@cclv@saved
+ \vbadness\@M
+}%
+\mathchardef\save@column@insert@pen=10017
+\@namedef{output@-\the\save@column@insert@pen}{\toggle@insert\savecolumn@holding\savecolumn@moving}%
+\def\savecolumn@holding{%
+\@if@exceed@pagegoal{\unvcopy\@cclv\setbox\z@\lastbox}{%
+ \setbox\z@\vbox{\unvcopy\@cclv\setbox\z@\lastbox}%
+ \outputdebug@sw{{\tracingall\scrollmode\showbox\z@}}{}%
+\dimen@\ht\@cclv\advance\dimen@-\ht\z@
+\dead@cycle@repair@protected\dimen@
+}{%
+\dead@cycle
+}%
+}%
+\def\savecolumn@moving{%
+ \@cclv@nontrivial@sw{%
+ \save@column
+ }{%
+ {\setbox\z@\box\@cclv}%
+ }%
+\@ifvoid\footins{}{%
+\outputdebug@sw{{\tracingall\scrollmode\showbox\footins}}{}%
+\global\setbox\footins@saved\vbox{\unvbox\footins@saved\marry@baselines\unvbox\footins}%
+\protect@penalty\save@column@insert@pen
+}%
+}%
+\newbox\footins@saved
+\mathchardef\save@message@pen=10018
+\@namedef{output@-\the\save@message@pen}{\save@message}%
+\def\save@message{%
+ \setbox\z@\box\@cclv %FIXME: what if \box\@cclv is not empty?
+ \toks@\expandafter{\@@firstmark}%
+ \expandafter\gdef\expandafter\@message@saved\expandafter{\the\toks@}%
+ \expandafter\do@@mark\expandafter{\the\@topmark@saved}%
+}%
+\gdef\@message@saved{}%
+\mathchardef\execute@message@pen=10019
+\@namedef{output@-\the\execute@message@pen}{\@message@saved}%
+\def\execute@message{%
+ \@execute@message\save@column@pen %Implicit #2
+}%
+\def\execute@message@insert#1{%
+ \@execute@message\save@column@insert@pen{\setbox\footins\box\footins@saved#1}%
+}%
+\long\def\@execute@message#1#2{%
+ \begingroup
+ \dimen@\prevdepth\@ifdim{\dimen@<\z@}{\dimen@\z@}{}%
+ \setbox\z@\vbox{%
+ \protect@penalty#1%
+ \protection@box
+ \toks@{\prep@cclv#2}%
+ \@@mark{\the\toks@}%
+ \penalty-\save@message@pen
+ \setbox\z@\null\dp\z@\dimen@\ht\z@-\dimen@
+ \nointerlineskip\box\z@
+ \penalty-\execute@message@pen
+ }\unvbox\z@
+ \endgroup
+}%
+\def\do@output@cclv{\execute@message}%
+\def\do@output@MVL#1{%
+ \@ifvmode{%
+ \begingroup\execute@message{\unvbox\@cclv#1}\endgroup
+ }{%
+ \@ifhmode{%
+ \vadjust{\execute@message{\unvbox\@cclv#1}}%
+ }{%
+ \@latexerr{\string\do@output@MVL\space cannot be executed in this mode!}\@eha
+ }%
+ }%
+}%
+\def\lose@breaks{%
+ \loopwhile{%
+ \count@\lastpenalty
+ \@ifnum{\count@=\@M}{% 10000 is a TeX magic number!
+ \unpenalty\true@sw
+ }{%
+ \false@sw
+ }%
+ }%
+}%
+\def\removestuff{\do@output@MVL{\unskip\unpenalty}}%
+\def\removephantombox{%
+ \vadjust{%
+ \execute@message{%
+ \unvbox\@cclv
+ \setbox\z@\lastbox
+ \unskip
+ \unskip
+ \unpenalty
+ \penalty\predisplaypenalty
+ \vskip\abovedisplayskip
+ }%
+ }%
+}%
+\def\addstuff#1#2{\edef\@tempa{\noexpand\do@output@MVL{\noexpand\@addstuff{#1}{#2}}}\@tempa}%
+\def\@addstuff#1#2{%
+ \skip@\lastskip\unskip
+ \count@\lastpenalty\unpenalty
+ \@if@empty{#1}{}{\penalty#1\relax}%
+ \@ifnum{\count@=\z@}{}{\penalty\count@}%
+ \vskip\skip@
+ \@if@empty{#2}{}{\vskip#2\relax}%
+}%
+\def\replacestuff#1#2{\edef\@tempa{\noexpand\do@output@MVL{\noexpand\@replacestuff{#1}{#2}}}\@tempa}%
+\def\@replacestuff#1#2{%
+ \skip@\lastskip\unskip
+ \count@\lastpenalty\unpenalty
+ \@if@empty{#1}{}{%
+ \@ifnum{\count@>\@M}{}{%
+ \@ifnum{\count@=\z@}{\count@=#1\relax}{%
+ \@ifnum{\count@<#1\relax}{}{%
+ \count@=#1\relax
+ }%
+ }%
+ }%
+ }%
+ \@ifnum{\count@=\z@}{}{\penalty\count@}%
+ \@if@empty{#2}{}{%
+ \@tempskipa#2\relax
+ \@ifdim{\z@>\@tempskipa}{%
+ \advance\skip@-\@tempskipa
+ }{%
+ \@ifdim{\skip@>\@tempskipa}{}{%
+ \skip@\@tempskipa
+ }%
+ }%
+ }%
+ \vskip\skip@
+}%
+\def\move@insertions{\global\holdinginserts\z@}%
+\def\hold@insertions{\global\holdinginserts\@ne}%
+\hold@insertions
+\def\move@insert@sw{\@ifnum{\holdinginserts=\z@}}%
+\def\toggle@insert#1#2{%
+ \@ifnum{\holdinginserts=\z@}{\hold@insertions#2}{\move@insertions#1}%
+}%
+\def\do@columngrid#1#2{%
+ \par
+ \expandafter\let\expandafter\@tempa\csname open@column@#1\endcsname
+ \@ifx{\relax\@tempa}{%
+ \ltxgrid@warn{Unknown page grid #1. No action taken}%
+ }{%
+ \do@output@MVL{\start@column{#1}{#2}}%
+ }%
+}%
+\def\start@column#1#2{%
+ \def\@tempa{#1}\@ifx{\@tempa\thepagegrid}{%
+ \ltxgrid@info{Already in page grid \thepagegrid. No action taken}%
+ }{%
+ \expandafter\execute@message@insert
+ \expandafter{%
+ \csname shut@column@\thepagegrid\expandafter\endcsname
+ \csname open@column@#1\endcsname{#2}%
+ \set@vsize
+ }%
+ }%
+}%
+\def\thepagegrid{one}%
+\newbox\pagesofar
+\newbox\footbox
+\newcommand\onecolumngrid{\do@columngrid{one}{\@ne}}%
+\let\onecolumn\@undefined
+\def\open@column@one#1{%
+ \unvbox\pagesofar
+ \gdef\thepagegrid{one}%
+ \global\pagegrid@col#1%
+ \global\pagegrid@cur\@ne
+ \set@colht
+ \set@column@hsize\pagegrid@col
+}%
+\def\shut@column@one{%
+ \@makecol
+ \global\setbox\pagesofar\vbox{\unvbox\@outputbox\recover@footins}%
+ \set@colht
+}%
+\def\float@column@one{%
+ \@makecol
+ \@outputpage
+}%
+\def\end@column@one{%
+ \unvbox\@cclv\setbox\z@\lastbox
+ \protect@penalty\do@newpage@pen
+}%
+\def\output@column@one{%
+ \@outputpage
+}%
+\def\@addmarginpar@one{%
+ \@if@sw\if@mparswitch\fi{%
+ \@ifodd\c@page{\false@sw}{\true@sw}%
+ }{\false@sw}{%
+ \@if@sw\if@reversemargin\fi{\false@sw}{\true@sw}%
+ }{%
+ \@if@sw\if@reversemargin\fi{\true@sw}{\false@sw}%
+ }%
+}%
+\def\@floatselect@sw@one#1{\true@sw}%
+\def\onecolumngrid@push{%
+ \do@output@MVL{%
+ \@ifnum{\pagegrid@col=\@ne}{%
+ \global\let\restorecolumngrid\@empty
+ }{%
+ \xdef\restorecolumngrid{%
+ \noexpand\start@column{\thepagegrid}{\the\pagegrid@col}%
+ }%
+ \start@column{one}{\@ne}%
+ }%
+ }%
+}%
+\def\onecolumngrid@pop{%
+ \do@output@MVL{\restorecolumngrid}%
+}%
+\newcommand\twocolumngrid{\do@columngrid{mlt}{\tw@}}%
+\let\twocolumn\@undefined
+\let\@topnewpage\@undefined
+\def\open@column@mlt#1{%
+ \gdef\thepagegrid{mlt}%
+ \global\pagegrid@col#1%
+ \global\pagegrid@cur\@ne
+ \set@column@hsize\pagegrid@col
+ \set@colht
+}%
+\def\shut@column@mlt{%
+ \@cclv@nontrivial@sw{%
+\@makecol
+\@ifnum{\pagegrid@cur<\pagegrid@col}{%
+\expandafter\global\expandafter\setbox\csname col@\the\pagegrid@cur\endcsname\box\@outputbox
+\global\advance\pagegrid@cur\@ne
+}{}%
+ }{%
+ {\setbox\z@\box\@cclv}%
+ }%
+\@ifnum{\pagegrid@cur>\@ne}{%
+\csname balance@\the\pagegrid@col\endcsname
+\grid@column{}%
+\@combinepage
+\@combinedblfloats
+\global\setbox\pagesofar\box\@outputbox
+ }{}%
+ \set@colht
+}%
+\def\float@column@mlt{%
+ \@combinepage
+ \@combinedblfloats
+ \@outputpage
+ \global\pagegrid@cur\@ne
+ \protect@penalty\do@startpage@pen
+}%
+\def\end@column@mlt{%
+ \@ifx@empty\@toplist{%
+ \@ifx@empty\@botlist{%
+ \@ifx@empty\@dbltoplist{%
+ \@ifx@empty\@deferlist{%
+ \@ifnum{\pagegrid@cur=\@ne}{%
+ \false@sw
+ }{%
+ \true@sw
+ }%
+ }{%
+ \true@sw
+ }%
+ }{%
+ \true@sw
+ }%
+ }{%
+ \true@sw
+ }%
+ }{%
+ \true@sw
+ }%
+ % true = kick out a column and try again
+ {%
+ \@cclv@nontrivial@sw{%
+ \unvbox\@cclv\setbox\z@\lastbox
+ }{%
+ \unvbox\@cclv\setbox\z@\lastbox\unskip\null
+ }%
+ \protect@penalty\do@newpage@pen
+ \protect@penalty\do@endpage@pen
+ }{%
+ \unvbox\@cclv\setbox\z@\lastbox
+ }%
+}%
+\def\output@column@mlt{%
+ \@ifnum{\pagegrid@cur<\pagegrid@col}{%
+ \expandafter\global\expandafter\setbox\csname col@\the\pagegrid@cur\endcsname\box\@outputbox
+ \global\advance\pagegrid@cur\@ne
+ }{%
+ \set@adj@colht\dimen@
+ \grid@column{}%{\dimen@}%
+ \@combinepage
+ \@combinedblfloats
+ \@outputpage
+ \global\pagegrid@cur\@ne
+ \protect@penalty\do@startpage@pen
+ }%
+}%
+\let\@outputdblcol\@undefined
+\def\@floatselect@sw@mlt#1{\@if@notdblfloat{#1}}%
+\def\@addmarginpar@mlt{% emits a boolean
+ \@ifnum{\pagegrid@cur=\@ne}%
+}%
+\let\pagegrid@cur\col@number
+\let\col@number\@undefined
+\newcount\pagegrid@col
+\pagegrid@cur\@ne
+\expandafter\let\csname col@\the\pagegrid@cur\endcsname\@leftcolumn
+\let\@leftcolumn\@undefined
+\pagegrid@col\tw@
+\def\pagegrid@init{%
+ \advance\pagegrid@cur\@ne
+ \@ifnum{\pagegrid@cur<\pagegrid@col}{%
+ \csname newbox\expandafter\endcsname\csname col@\the\pagegrid@cur\endcsname
+ \pagegrid@init
+ }{%
+ }%
+}%
+\appdef\class@documenthook{%
+ \pagegrid@init
+}%
+\def\grid@column#1{%
+ \global\setbox\@outputbox\vbox{%
+ \hb@xt@\textwidth{%
+ \vrule\@height\z@\@width\z@\@if@empty{#1}{}{\@depth#1}%
+ \pagegrid@cur\@ne
+ \append@column
+ \box@column\@outputbox
+ }%
+ \vskip\z@skip % FIXME: page depth!
+ }%
+}%
+\def\append@column{%
+ \@ifnum{\pagegrid@cur<\pagegrid@col}{%
+ \expandafter\box@column\csname col@\the\pagegrid@cur\endcsname
+ \hfil
+ \vrule \@width\columnseprule
+ \hfil
+ \advance\pagegrid@cur\@ne
+ \append@column
+ }{%
+ }%
+}%
+\def\box@column#1{%
+ \raise\topskip
+ \hb@xt@\columnwidth{%
+ \dimen@\ht#1\@ifdim{\dimen@>\@colht}{\dimen@\@colht}{}%
+ \count@\vbadness\vbadness\@M
+ \dimen@ii\vfuzz\vfuzz\maxdimen
+ \outputdebug@sw{\saythe\@colht\saythe\dimen@}{}%
+ \vtop to\dimen@
+ {\hrule\@height\z@
+ \unvbox#1%
+ \raggedcolumn@skip
+ }%
+ \vfuzz\dimen@ii
+ \vbadness\count@
+ \hss
+ }%
+}%
+\def\marry@baselines{%
+ \vskip\marry@skip\relax
+}%
+\gdef\marry@skip{\z@skip}%
+\def\set@marry@skip{%
+\begingroup
+ \skip@\baselineskip\advance\skip@-\topskip
+ \@ifdim{\skip@>\z@}{%
+ \xdef\marry@skip{\the\skip@}%
+ }{}%
+ \endgroup
+}%
+\AtBeginDocument{%
+ \@ifxundefined\raggedcolumn@sw{\@booleanfalse\raggedcolumn@sw}{}%
+}%
+\def\raggedcolumn@skip{%
+ \vskip\z@\raggedcolumn@sw{\@plus.0001fil\@minus.0001fil}{}\relax
+}%
+\def\@combinepage{%
+ \@ifvoid\pagesofar{}{%
+ \setbox\@outputbox\vbox{%
+ \unvbox\pagesofar
+ \marry@baselines
+ \unvbox\@outputbox
+ }%
+ }%
+ \@ifvoid\footbox{}{%
+ \setbox\@outputbox\vbox{%
+ \unvbox\@outputbox
+ \marry@baselines
+ \unvbox\footbox
+ }%
+ }%
+}%
+\def\@combinedblfloats{%
+ \@ifx@empty\@dbltoplist{}{%
+ \setbox\@tempboxa\vbox{}%
+ \let\@elt\@comdblflelt\@dbltoplist
+ \let\@elt\relax\xdef\@freelist{\@freelist\@dbltoplist}%
+ \global\let\@dbltoplist\@empty
+ \setbox\@outputbox\vbox{%
+ %\boxmaxdepth\maxdepth %% probably not needed, CAR
+ \unvbox\@tempboxa\unskip
+ \@ifnum{\@dbltopnum>\m@ne}{\dblfigrule}{}%FIXME: how is \@dbltopnum maintained?
+ \vskip\dbltextfloatsep
+ \unvbox\@outputbox
+ }%
+ }%
+}%
+\def\set@column@hsize#1{%
+ \pagegrid@col#1%
+ \global\columnwidth\textwidth
+ \global\advance\columnwidth\columnsep
+ \global\divide\columnwidth\pagegrid@col
+ \global\advance\columnwidth-\columnsep
+ \global\hsize\columnwidth
+ \global\linewidth\columnwidth
+ \skip@\baselineskip\advance\skip@-\topskip
+ \@ifnum{\pagegrid@col>\@ne}{\set@marry@skip}{}%
+}%
+\def\set@colht{%
+ \set@adj@textheight\@colht
+ \global\let\enlarge@colroom\@empty
+ \set@colroom
+}%
+\def\set@adj@textheight#1{%
+ #1\textheight
+ \def\@elt{\adj@page#1}%
+ \@booleantrue\firsttime@sw\@dbltoplist
+ \let\@elt\relax
+ \global#1#1\relax
+ \outputdebug@sw{\saythe#1}{}%
+}%
+\def\set@colroom{%
+ \set@adj@colht\@colroom
+ \@if@empty\enlarge@colroom{}{%
+ \global\advance\@colroom\enlarge@colroom\relax
+ }%
+ \outputdebug@sw{\saythe\@colroom}{}%
+ \@ifdim{\@colroom>\topskip}{}{%
+ \ltxgrid@info{Not enough room: \string\@colroom=\the\@colroom; increasing to \the\topskip}%
+ \@colroom\topskip
+ }%
+ \global\@colroom\@colroom
+ \set@vsize
+}%
+\def\set@vsize{%
+ \global\vsize\@colroom
+ \outputdebug@sw{\saythe\vsize}{}%
+}%
+\def\set@adj@colht#1{%
+ #1\@colht
+ \@ifvoid\pagesofar{}{%
+ \advance#1-\ht\pagesofar\advance#1-\dp\pagesofar
+ }%
+ \@ifvoid\footbox{}{%
+ \advance#1-\ht\footbox\advance#1-\dp\footbox
+ }%
+ \def\@elt{\adj@column#1}%
+ \@booleantrue\firsttime@sw\@toplist
+ \@booleantrue\firsttime@sw\@botlist
+ \let\@elt\relax
+ \outputdebug@sw{\saythe#1}{}%
+}%
+\def\adj@column#1#2{%
+ \advance#1-\ht#2%
+ \advance#1-\firsttime@sw{\textfloatsep\@booleanfalse\firsttime@sw}{\floatsep}%
+}%
+\def\adj@page#1#2{%
+ \advance#1-\ht#2%
+ \advance#1-\firsttime@sw{\dbltextfloatsep\@booleanfalse\firsttime@sw}{\dblfloatsep}%
+}%
+\appdef\@outputpage{%
+ \set@colht % FIXME: needed?
+ \@floatplacement % FIXME: needed?
+ \@dblfloatplacement % FIXME: needed?
+}%
+\@namedef{balance@2}{%
+ \expandafter\balance@two\csname col@1\endcsname\@outputbox
+ % Avoid a bug by preventing a restore when leaving this group
+ \global\setbox\csname col@1\endcsname\box\csname col@1\endcsname
+ \@ifvoid\footbox{}{%
+ \global\setbox\footbox\vbox{%
+ \setbox\z@\box\@tempboxa
+ \let\recover@footins\relax
+ \balance@two\footbox\@tempboxa
+ \hb@xt@\textwidth{\box\footbox\hfil\box\@tempboxa}%
+ }%
+ }%
+}%
+\def\balance@two#1#2{%
+\outputdebug@sw{{\tracingall\scrollmode\showbox#1\showbox#2}}{}%
+ \setbox\@ne\vbox{%
+ \@ifvoid#1{}{%
+ \unvcopy#1\recover@footins
+ \@ifvoid#2{}{\marry@baselines}%
+ }%
+ \@ifvoid#2{}{%
+ \unvcopy#2\recover@footins
+ }%
+ }%
+ \dimen@\ht\@ne\divide\dimen@\tw@
+ \dimen@i\dimen@
+ \vbadness\@M
+ \vfuzz\maxdimen
+ \loopwhile{%
+ \dimen@i=.5\dimen@i
+ \outputdebug@sw{\saythe\dimen@\saythe\dimen@i\saythe\dimen@ii}{}%
+ \setbox\z@\copy\@ne\setbox\tw@\vsplit\z@ to\dimen@
+ \setbox\z@ \vbox{%
+ \unvcopy\z@
+ \setbox\z@\vbox{\unvbox\z@ \setbox\z@\lastbox\aftergroup\vskip\aftergroup-\expandafter}\the\dp\z@\relax
+ }%
+ \setbox\tw@\vbox{%
+ \unvcopy\tw@
+ \setbox\z@\vbox{\unvbox\tw@\setbox\z@\lastbox\aftergroup\vskip\aftergroup-\expandafter}\the\dp\z@\relax
+ }%
+ \dimen@ii\ht\tw@\advance\dimen@ii-\ht\z@
+ \@ifdim{\dimen@i>.5\p@}{%
+ \advance\dimen@\@ifdim{\dimen@ii<\z@}{}{-}\dimen@i
+ \true@sw
+ }{%
+ \@ifdim{\dimen@ii<\z@}{%
+ \advance\dimen@\tw@\dimen@i
+ \true@sw
+ }{%
+ \false@sw
+ }%
+ }%
+ }%
+ \outputdebug@sw{\saythe\dimen@\saythe\dimen@i\saythe\dimen@ii}{}%
+\@ifdim{\ht\z@=\z@}{%
+\@ifdim{\ht\tw@=\z@}{%
+\true@sw
+}{%
+\false@sw
+}%
+}{%
+\true@sw
+}%
+{%
+}{%
+\ltxgrid@info{Unsatifactorily balanced columns: giving up}%
+\setbox\tw@\box#1%
+\setbox\z@ \box#2%
+}%
+ \setbox\tw@\vbox{\unvbox\tw@\vskip\z@skip}%
+ \setbox\z@ \vbox{\unvbox\z@ \vskip\z@skip}%
+ \set@colroom
+\dimen@\ht\z@\@ifdim{\dimen@<\ht\tw@}{\dimen@\ht\tw@}{}%
+\@ifdim{\dimen@>\@colroom}{\dimen@\@colroom}{}%
+ \outputdebug@sw{\saythe{\ht\z@}\saythe{\ht\tw@}\saythe\@colroom\saythe\dimen@}{}%
+\setbox#1\vbox to\dimen@{\unvbox\tw@\unskip\raggedcolumn@skip}%
+\setbox#2\vbox to\dimen@{\unvbox\z@ \unskip\raggedcolumn@skip}%
+\outputdebug@sw{{\tracingall\scrollmode\showbox#1\showbox#2}}{}%
+}%
+\def\recover@footins{%
+ \skip\z@ \lastskip\unskip
+ \skip\@ne\lastskip\unskip
+ \setbox\z@\lastbox
+ \@ifvbox\z@{%
+\setbox\z@\vbox{%
+\unvbox\z@
+\setbox\z@\lastbox
+\@ifvoid\z@{}{%
+\global\setbox\footbox\vbox{%
+ \unvbox\footbox
+ \@ifvbox\z@{%
+ \unvbox\z@
+ }{%
+ \box\z@
+ }%
+}%
+}%
+}%
+ }{}%
+ \outputdebug@sw{{\tracingall\scrollmode\showbox\footbox}}{}%
+}%
+\prepdef\@begindocumenthook{%
+ \open@column@one\@ne
+ \set@colht
+ \@floatplacement
+ \@dblfloatplacement
+}%
+\def\longtable@longtable{%
+ \par
+ \ifx\multicols\@undefined\else\ifnum\col@number>\@ne\@twocolumntrue\fi\fi
+ \if@twocolumn\LT@err{longtable not in 1-column mode}\@ehc\fi
+ \begingroup
+ \@ifnextchar[\LT@array{\LT@array[x]}%
+}%
+\def\longtable@new{%
+ \par
+ \@ifnextchar[\LT@array{\LT@array[x]}%
+}%
+\def\endlongtable@longtable{%
+ \crcr
+ \noalign{%
+ \let\LT@entry\LT@entry@chop
+ \xdef\LT@save@row{\LT@save@row}}%
+ \LT@echunk
+ \LT@start
+ \unvbox\z@
+ \LT@get@widths
+ \if@filesw
+ {\let\LT@entry\LT@entry@write\immediate\write\@auxout{%
+ \gdef\expandafter\noexpand
+ \csname LT@\romannumeral\c@LT@tables\endcsname
+ {\LT@save@row}}}%
+ \fi
+ \ifx\LT@save@row\LT@@save@row
+ \else
+ \LT@warn{Column \@width s have changed\MessageBreak
+ in table \thetable}%
+ \LT@final@warn
+ \fi
+ \endgraf\penalty -\LT@end@pen
+ \endgroup
+ \global\@mparbottom\z@
+ \pagegoal\vsize
+ \endgraf\penalty\z@\addvspace\LTpost
+ \ifvoid\footins\else\insert\footins{}\fi
+}%
+\def\endlongtable@new{%
+ \crcr
+ \noalign{%
+ \let\LT@entry\LT@entry@chop
+ \xdef\LT@save@row{\LT@save@row}%
+ }%
+ \LT@echunk
+ \LT@start
+ \unvbox\z@
+ \LT@get@widths
+ \@if@sw\if@filesw\fi{%
+ {%
+ \let\LT@entry\LT@entry@write
+ \immediate\write\@auxout{%
+ \gdef\expandafter\noexpand\csname LT@\romannumeral\c@LT@tables\endcsname
+ {\LT@save@row}%
+ }%
+ }%
+ }{}%
+ \@ifx\LT@save@row\LT@@save@row{}{%
+ \LT@warn{%
+ Column \@width s have changed\MessageBreak in table \thetable
+ }\LT@final@warn
+ }%
+ \endgraf
+ \nobreak
+ \box\@ifvoid\LT@lastfoot{\LT@foot}{\LT@lastfoot}%
+ \global\@mparbottom\z@
+ \endgraf
+ \LT@post
+}%
+\def\LT@start@longtable{%
+ \let\LT@start\endgraf
+ \endgraf
+ \penalty\z@
+ \vskip\LTpre
+ \dimen@\pagetotal
+ \advance\dimen@ \ht\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi
+ \advance\dimen@ \dp\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi
+ \advance\dimen@ \ht\LT@foot
+ \dimen@ii\vfuzz\vfuzz\maxdimen
+ \setbox\tw@\copy\z@
+ \setbox\tw@\vsplit\tw@ to \ht\@arstrutbox
+ \setbox\tw@\vbox{\unvbox\tw@}%
+ \vfuzz\dimen@ii
+ \advance\dimen@ \ht
+ \ifdim\ht\@arstrutbox>\ht\tw@\@arstrutbox\else\tw@\fi
+ \advance\dimen@\dp
+ \ifdim\dp\@arstrutbox>\dp\tw@\@arstrutbox\else\tw@\fi
+ \advance\dimen@ -\pagegoal
+ \ifdim \dimen@>\z@\vfil\break\fi
+ \global\@colroom\@colht
+ \ifvoid\LT@foot\else
+ \advance\vsize-\ht\LT@foot
+ \global\advance\@colroom-\ht\LT@foot
+ \dimen@\pagegoal\advance\dimen@-\ht\LT@foot\pagegoal\dimen@
+ \maxdepth\z@
+ \fi
+ \ifvoid\LT@firsthead\copy\LT@head\else\box\LT@firsthead\fi
+ \output{\LT@output}%
+}%
+\def\LT@start@new{%
+ \let\LT@start\endgraf
+ \endgraf
+ \markthr@@{}%
+ \LT@pre
+ \@ifvoid\LT@firsthead{\LT@top}{\box\LT@firsthead\nobreak}%
+ \mark@envir{longtable}%
+}%
+\def\LT@end@hd@ft@longtable#1{%
+ \LT@echunk
+ \ifx\LT@start\endgraf
+ \LT@err{Longtable head or foot not at start of table}{Increase LTchunksize}%
+ \fi
+ \setbox#1\box\z@
+ \LT@get@widths\LT@bchunk
+}%
+\def\LT@end@hd@ft@new#1{%
+ \LT@echunk
+ \@ifx{\LT@start\endgraf}{%
+ \LT@err{Longtable head or foot not at start of table}{Increase LTchunksize}%
+ }%
+ \global\setbox#1\box\z@
+ \LT@get@widths
+ \LT@bchunk
+}%
+\def\LT@array@longtable[#1]#2{%
+ \refstepcounter{table}\stepcounter{LT@tables}%
+ \if l#1%
+ \LTleft\z@ \LTright\fill
+ \else\if r#1%
+ \LTleft\fill \LTright\z@
+ \else\if c#1%
+ \LTleft\fill \LTright\fill
+ \fi\fi\fi
+ \let\LT@mcol\multicolumn
+ \let\LT@@tabarray\@tabarray
+ \let\LT@@hl\hline
+ \def\@tabarray{%
+ \let\hline\LT@@hl
+ \LT@@tabarray}%
+ \let\\\LT@tabularcr\let\tabularnewline\\%
+ \def\newpage{\noalign{\break}}%
+ \def\pagebreak{\noalign{\ifnum`}=0\fi\@testopt{\LT@no@pgbk-}4}%
+ \def\nopagebreak{\noalign{\ifnum`}=0\fi\@testopt\LT@no@pgbk4}%
+ \let\hline\LT@hline \let\kill\LT@kill\let\caption\LT@caption
+ \@tempdima\ht\strutbox
+ \let\@endpbox\LT@endpbox
+ \ifx\extrarowheight\@undefined
+ \let\@acol\@tabacol
+ \let\@classz\@tabclassz \let\@classiv\@tabclassiv
+ \def\@startpbox{\vtop\LT@startpbox}%
+ \let\@@startpbox\@startpbox
+ \let\@@endpbox\@endpbox
+ \let\LT@LL@FM@cr\@tabularcr
+ \else
+ \advance\@tempdima\extrarowheight
+ \col@sep\tabcolsep
+ \let\@startpbox\LT@startpbox\let\LT@LL@FM@cr\@arraycr
+ \fi
+ \setbox\@arstrutbox\hbox{\vrule
+ \@height \arraystretch \@tempdima
+ \@depth \arraystretch \dp \strutbox
+ \@width \z@}%
+ \let\@sharp##\let\protect\relax
+ \begingroup
+ \@mkpream{#2}%
+ \xdef\LT@bchunk{%
+ \global\advance\c@LT@chunks\@ne
+ \global\LT@rows\z@\setbox\z@\vbox\bgroup
+ \LT@setprevdepth
+ \tabskip\LTleft\halign to\hsize\bgroup
+ \tabskip\z@ \@arstrut \@preamble \tabskip\LTright \cr}%
+ \endgroup
+ \expandafter\LT@nofcols\LT@bchunk&\LT@nofcols
+ \LT@make@row
+ \m@th\let\par\@empty
+ \everycr{}\lineskip\z@\baselineskip\z@
+ \LT@bchunk
+}%
+\def\LT@LR@l{\LTleft\z@ \LTright\fill}%
+\def\LT@LR@r{\LTleft\fill \LTright\z@ }%
+\def\LT@LR@c{\LTleft\fill \LTright\fill}%
+\def\LT@array@new[#1]#2{%
+ \refstepcounter{table}\stepcounter{LT@tables}%
+ \table@hook
+ \LTleft\fill \LTright\fill
+ \csname LT@LR@#1\endcsname
+ \let\LT@mcol\multicolumn
+ \let\LT@@hl\hline
+ \prepdef\@tabarray{\let\hline\LT@@hl}%
+ \let\\\LT@tabularcr
+ \let\tabularnewline\\%
+ \def\newpage{\noalign{\break}}%
+ \def\pagebreak{\noalign{\ifnum`}=0\fi\@testopt{\LT@no@pgbk-}4}%
+ \def\nopagebreak{\noalign{\ifnum`}=0\fi\@testopt\LT@no@pgbk4}%
+ \let\hline\LT@hline
+ \let\kill\LT@kill
+ \let\caption\LT@caption
+ \@tempdima\ht\strutbox
+ \let\@endpbox\LT@endpbox
+ \@ifxundefined\extrarowheight{%
+ \let\@acol\@tabacol
+ \let\@classz\@tabclassz
+ \let\@classiv\@tabclassiv
+ \def\@startpbox{\vtop\LT@startpbox}%
+ \let\@@startpbox\@startpbox
+ \let\@@endpbox\@endpbox
+ \let\LT@LL@FM@cr\@tabularcr
+ }{%
+ \advance\@tempdima\extrarowheight
+ \col@sep\tabcolsep
+ \let\@startpbox\LT@startpbox
+ \let\LT@LL@FM@cr\@arraycr
+ }%
+ \let\@acoll\@tabacoll
+ \let\@acolr\@tabacolr
+ \let\@acol\@tabacol
+ \setbox\@arstrutbox\hbox{%
+ \vrule
+ \@height \arraystretch \@tempdima
+ \@depth \arraystretch \dp \strutbox
+ \@width \z@
+ }%
+ \let\@sharp##%
+ \let\protect\relax
+ \begingroup
+ \@mkpream{#2}%
+ \@mkpream@relax
+ \edef\@preamble{\@preamble}%
+ \prepdef\@preamble{%
+ \global\advance\c@LT@chunks\@ne
+ \global\LT@rows\z@
+ \setbox\z@\vbox\bgroup
+ \LT@setprevdepth
+ \tabskip\LTleft
+ \halign to\hsize\bgroup
+ \tabskip\z@
+ \@arstrut
+ }%
+ \appdef\@preamble{%
+ \tabskip\LTright
+ \cr
+ }%
+ \global\let\LT@bchunk\@preamble
+ \endgroup
+ \expandafter\LT@nofcols\LT@bchunk&\LT@nofcols
+ \LT@make@row
+ \m@th
+ \let\par\@empty
+ \everycr{}%
+ \lineskip\z@
+ \baselineskip\z@
+ \LT@bchunk
+}%
+\appdef\table@hook{}%
+%% Note that it is not enough to define the environment itself; we also have to create the corresponding
+%% \cmd\output\ routine procedures, which provide for continued footers and headers
+%% (the very feature of \env{longtable} requiring support in the output routine).
+%% This same consideration would arise in defining any syntactic extension to \env{longtable}, because
+%% the environment name itself is exposed in the output routine.
+\def\switch@longtable{%
+ \@ifpackageloaded{longtable}{%
+ \@ifx{\longtable\longtable@longtable}{%
+ \@ifx{\endlongtable\endlongtable@longtable}{%
+ \@ifx{\LT@start\LT@start@longtable}{%
+ \@ifx{\LT@end@hd@ft\LT@end@hd@ft@longtable}{%
+ \@ifx{\LT@array\LT@array@longtable}{%
+ \true@sw
+ }{\false@sw}%
+ }{\false@sw}%
+ }{\false@sw}%
+ }{\false@sw}%
+ }{\false@sw}%
+ {%
+ \class@info{Patching longtable package}%
+ }{%
+ \class@info{Patching unrecognized longtable package. (Proceeding with fingers crossed)}%
+ }%
+ \let\longtable\longtable@new
+ \let\endlongtable\endlongtable@new
+ \let\LT@start\LT@start@new
+ \let\LT@end@hd@ft\LT@end@hd@ft@new
+ \let\LT@array\LT@array@new
+ \newenvironment{longtable*}{%
+ \onecolumngrid@push
+ \longtable
+ }{%
+ \endlongtable
+ \onecolumngrid@pop
+ }%
+ }{}%
+}%
+\def\LT@pre{\penalty\z@\vskip\LTpre}%
+\def\LT@bot{\nobreak\copy\LT@foot\vfil}%
+\def\LT@top{\copy\LT@head\nobreak}%
+\def\LT@post{\penalty\z@\addvspace\LTpost\mark@envir{\curr@envir}}%
+\def\LT@adj{%
+ \setbox\z@\vbox{\null}\dimen@-\ht\z@
+ \setbox\z@\vbox{\unvbox\z@\LT@bot}\advance\dimen@\ht\z@
+ \global\advance\vsize-\dimen@
+}%
+\def\output@init@longtable{\LT@adj}%
+\def\output@prep@longtable{\setbox\@cclv\vbox{\unvbox\@cclv\LT@bot}}%
+\def\output@post@longtable{\LT@top}%
+\let\output@init@theindex\@empty
+\let\output@prep@theindex\@empty
+\def\output@post@theindex{%
+ \@ifodd\c@page{}{%
+ \@ifnum{\pagegrid@cur=\@ne}{% we have the leftmost column of a verso page
+ % insert the current top-level continued head
+ }%
+ }%
+}%
+\def\check@aux{\do@output@MVL{\do@check@aux}}%
+\def\check@deferlist@stuck#1{%
+ \@ifx{\@deferlist@postshipout\@empty}{}{%
+ \@ifx{\@deferlist@postshipout\@deferlist}{%
+ \@fltstk
+ \clearpage@sw{%
+ \ltxgrid@warn{Deferred float stuck during \string\clearpage\space processing}%
+ }{%
+ \force@deferlist@stuck#1%
+ }%
+ }{%
+ %Successfully committed float(s)
+ }%
+ \global\let\@deferlist@postshipout\@empty
+ }%
+}%
+\def\@fltstk{%
+ \@latex@warning{A float is stuck (cannot be placed without \string\clearpage)}%
+}%
+\appdef\@outputpage{%
+ \global\let\@deferlist@postshipout\@deferlist
+}%
+\def\@next#1#2{%
+ \@ifx{#2\@empty}{\false@sw}{%
+ \expandafter\@xnext#2\@@#1#2%
+ \true@sw
+ }%
+}%
+\def\@xnext\@elt#1#2\@@#3#4{%
+ \def#3{#1}%
+ \gdef#4{#2}%
+ \def\@tempa{#4}\def\@tempb{\@freelist}%
+ \@ifx{\@tempa\@tempb}{%
+ \@ifx{#4\@empty}{%
+ \force@deferlist@empty%{Float register pool exhausted}%
+ }{}%
+ }{}%
+}%
+\def\force@deferlist@stuck#1{%
+\force@deferlist@sw{%
+ \@booleantrue\clearpage@sw
+ \@booleantrue\forcefloats@sw
+ #1%
+}{%
+}%
+}%
+\def\force@deferlist@empty{%
+ \force@deferlist@sw{%
+ \penalty-\pagebreak@pen
+ \protect@penalty\do@forcecolumn@pen
+ }{%
+ }%
+}%
+\@booleanfalse\force@deferlist@sw
+\mathchardef\do@forcecolumn@pen=10009
+\@namedef{output@-\the\do@forcecolumn@pen}{\do@forcecolumn}%
+\def\do@forcecolumn{%
+ \@booleantrue\clearpage@sw
+ \@booleantrue\forcefloats@sw
+ \do@startcolumn
+}%
+\def\enlargethispage{%
+\@ifstar{%
+\@enlargethispage{}%
+}{%
+\@enlargethispage{}%
+}%
+}%
+\def\@enlargethispage#1#2{%
+ \begingroup
+ \dimen@#2\relax
+ \edef\@tempa{#1}%
+ \edef\@tempa{\noexpand\@@enlargethispage{\@tempa}{\the\dimen@}}%
+ \expandafter\do@output@MVL\expandafter{\@tempa}%
+ \endgroup
+}%
+\def\@@enlargethispage#1#2{%
+ \def\@tempa{one}%
+ \@ifx{\thepagegrid\@tempa}{%
+ \true@sw
+ }{%
+ \def\@tempa{mlt}%
+ \@ifx{\thepagegrid\@tempa}{%
+ \@ifnum{\pagegrid@cur=\@ne}{% OK to adjust this page
+ \gdef\enlarge@colroom{#2}%
+ \true@sw
+ }{% Can only adjust this column; give up
+ \ltxgrid@warn{Too late to enlarge this page; move the command to the first column.}%
+ \false@sw
+ }%
+ }{% Unknown page grid
+ \ltxgrid@warn{Unable to enlarge a page of this kind.}%
+ \false@sw
+ }%
+ }%
+ {%
+ \class@info{Enlarging page \thepage\space by #2}%
+ \global\advance\@colroom#2\relax
+ \set@vsize
+ }{%
+ % Could not adjust this page
+ }%
+}%
+\let\enlarge@colroom\@empty
+\let\@kludgeins\@undefined
+\@booleantrue\textheight@sw
+\prepdef\@outputpage{%
+ \textheight@sw{%
+ \count@\vbadness\vbadness\@M
+ \dimen@\vfuzz\vfuzz\maxdimen
+ \setbox\@outputbox\vbox to\textheight{\unvbox\@outputbox}%
+ \vfuzz\dimen@
+ \vbadness\count@
+ }{}%
+}%
+\def\ltxgrid@info{%
+ \ltxgrid@info@sw{\class@info}{\@gobble}%
+}%
+\@booleanfalse\ltxgrid@info@sw
+\def\ltxgrid@warn{%
+ \ltxgrid@warn@sw{\class@warn}{\@gobble}%
+}%
+\@booleantrue\ltxgrid@warn@sw
+%% Source File: textcase.dtx
+%% Copyright 1997 1998 David Carlisle
+%%
+%% This file may be distributed under the terms of the LPPL.
+%% See 00readme.txt for details.
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{textcase}
+ [1998/11/12 v0.06 Text only upper/lower case changing (DPC)]
+\def\@uclcnotmath#1#2#3#4{\begingroup
+ #1%
+ \def\({$}\let\)\(%
+ \def\NoCaseChange##1{\noexpand\NoCaseChange{\noexpand##1}}%
+ \@nonchangecase\label
+ \@nonchangecase\ref
+ \@nonchangecase\ensuremath
+ \def\cite##1##{\toks@{\noexpand\cite##1}\@citex}%
+ \def\@citex##1{\NoCaseChange{\the\toks@{##1}}}%
+ \def\reserved@a##1##2{\let#2\reserved@a}%
+ \expandafter\reserved@a\@uclclist\reserved@b{\reserved@b\@gobble}%
+ \protected@edef\reserved@a{\endgroup
+ \noexpand\@skipmath#3#4$\valign$}%
+ \reserved@a}
+\def\@nonchangecase#1{\def#1##1{\NoCaseChange{#1{##1}}}}
+\let\NoCaseChange\@firstofone
+\def\@skipmath#1#2$#3${%
+ \@skip@nonchangecase#1#2\NoCaseChange\valign
+ \ifx\valign#3%
+ \else
+ $#3$%
+ \expandafter\@skipmath\expandafter#1%
+ \fi}
+\def\@skip@nonchangecase#1#2\NoCaseChange#3{%
+ #1{#2}%
+ \ifx\valign#3%
+ \else
+ #3%
+ \expandafter\@skip@nonchangecase\expandafter#1%
+ \fi}
+\DeclareRobustCommand\MakeTextUppercase{%
+ \@uclcnotmath{\def\i{I}\def\j{J}}{##1##2}\uppercase}
+\protected@edef\MakeTextUppercase#1{\MakeTextUppercase{#1}}
+\DeclareRobustCommand\MakeTextLowercase{%
+ \@uclcnotmath{}{##2##1}\lowercase}
+\protected@edef\MakeTextLowercase#1{\MakeTextLowercase{#1}}
+\DeclareOption{overload}{%
+ \expandafter\let\csname MakeUppercase \expandafter\endcsname
+ \csname MakeTextUppercase \endcsname
+ \expandafter\let\csname MakeLowercase \expandafter\endcsname
+ \csname MakeTextLowercase \endcsname}
+\ProcessOptions
+\let\ProvidesPackage\ProvidesPackage@latex
+\let\ProcessOptions\ProcessOptions@latex
+\let\DeclareOption\DeclareOption@latex
+\expandafter
+\let\csname MakeUppercase \expandafter\endcsname
+ \csname MakeTextUppercase \endcsname
+\expandafter
+\let\csname MakeLowercase \expandafter\endcsname
+ \csname MakeTextLowercase \endcsname
+\appdef\class@documenthook{%
+ \switch@longtable
+}%
+\appdef\class@documenthook{%
+ \expandafter\@ifnotrelax\csname boldmath \endcsname{}{%
+ \expandafter\let\csname boldmath \endcsname\boldmath
+ \expandafter\def\expandafter\boldmath\expandafter{\expandafter\protect\csname boldmath \endcsname}%
+ }%
+}%
+\appdef\class@documenthook{%
+ \class@inithook
+}%
+\def\class@inithook{}%
+\appdef\class@inithook{%
+ \@ifxundefined\twocolumn@sw{\@booleanfalse\twocolumn@sw}{}%
+}%
+\appdef\class@inithook{%
+ \@ifxundefined\footinbib@sw{\@booleanfalse\footinbib@sw}{}%
+}%
+\appdef\class@inithook{%
+ \@ifxundefined\preprintsty@sw{\@booleanfalse\preprintsty@sw}{}%
+}%
+\appdef\class@inithook{%
+ \@ifxundefined\preprint@sw{\@booleanfalse\preprint@sw}{}%
+ \preprintsty@sw{\@booleantrue\preprint@sw}{}%
+}%
+\appdef\class@inithook{%
+ \@ifxundefined\galley@sw{\@booleanfalse\galley@sw}{}%
+}%
+\appdef\class@inithook{%
+ \@ifxundefined\showPACS@sw{\@booleanfalse\showPACS@sw}{}%
+ \@ifxundefined\showKEYS@sw{\@booleanfalse\showKEYS@sw}{}%
+}%
+\appdef\class@inithook{%
+ \@ifxundefined\twoside@sw{\@booleanfalse\twoside@sw}{}%
+ \twoside@sw{\@twosidetrue}{\@twosidefalse}%
+}%
+\appdef\class@inithook{%
+ \@ifxundefined\draft@sw{\@booleanfalse\draft@sw}{}%
+ \draft@sw{\overfullrule 5\p@}{\overfullrule\z@}%
+}%
+\appdef\class@inithook{%
+ \@ifxundefined\tightenlines@sw{\@booleanfalse\tightenlines@sw}{}%
+}%
+\appdef\class@inithook{%
+ \@ifxundefined\lengthcheck@sw{\@booleanfalse\lengthcheck@sw}{}%
+}%
+\appdef\class@inithook{%
+ \@ifxundefined\eqsecnum@sw{\@booleanfalse\eqsecnum@sw}{}%
+ \eqsecnum@sw{%
+ \@addtoreset{equation}{section}%
+ \def\theequation@prefix{\arabic{section}.}%
+ }{}%
+}%
+\appdef\class@inithook{%
+ \@ifxundefined\byrevtex@sw{\@booleanfalse\byrevtex@sw}{}%
+}%
+\DeclareOption{checkin}{%
+ \@booleantrue\dateinRH@sw
+ \@booleantrue\preprintsty@sw
+ \def\@pointsize{12}%
+ \@booleantrue\showPACS@sw
+ \@booleantrue\showKEYS@sw
+ \def\fp@proc@h{\allow@breaking@tables}%
+ \def\fp@proc@H{\allow@breaking@tables}%
+}%
+\@booleanfalse\dateinRH@sw
+\def\checkindate{\dateinRH@sw{{\tiny(\today)}}{}}%
+\def\allow@breaking@tables{%
+ \def\array@default{v}% tabular can break over pages
+ \@booleanfalse\floats@sw % table can break over pages
+}%
+\DeclareOption{preprint}{%
+ \@booleantrue\preprintsty@sw
+ \def\@pointsize{12}%
+}%
+\DeclareOption{manuscript}{%
+ \class@warn{Document class option manuscript is obsolete; use preprint instead}%
+ \ExecuteOptions{preprint}%
+}%
+\DeclareOption{showpacs}{%
+ \@booleantrue\showPACS@sw
+}%
+\DeclareOption{noshowpacs}{%
+ \@booleanfalse\showPACS@sw
+}%
+\DeclareOption{showkeys}{%
+ \@booleantrue\showKEYS@sw
+}%
+\DeclareOption{noshowkeys}{%
+ \@booleanfalse\showKEYS@sw
+}%
+\DeclareOption{balancelastpage}{%
+ \@booleantrue\balancelastpage@sw
+}%
+\DeclareOption{nobalancelastpage}{%
+ \@booleanfalse\balancelastpage@sw
+}%
+\appdef\class@inithook{%
+ \@ifxundefined\balancelastpage@sw{%
+ \@booleantrue\balancelastpage@sw
+ }{}%
+}%
+\DeclareOption{nopreprintnumbers}{\@booleanfalse\preprint@sw}%
+\DeclareOption{preprintnumbers}{\@booleantrue\preprint@sw}%
+\DeclareOption{hyperref}{%
+ \class@warn{Class option "hyperref" is no longer supported.^^JEmploy \string\usepackage{hyperref} instead}%
+}%
+\DeclareOption{10pt}{\def\@pointsize{10}}
+\DeclareOption{11pt}{\def\@pointsize{11}}
+\DeclareOption{12pt}{\def\@pointsize{12}}
+\DeclareOption{a4paper}
+ {\setlength\paperheight {297mm}%
+ \setlength\paperwidth {210mm}}
+\DeclareOption{a5paper}
+ {\setlength\paperheight {210mm}%
+ \setlength\paperwidth {148mm}}
+\DeclareOption{b5paper}
+ {\setlength\paperheight {250mm}%
+ \setlength\paperwidth {176mm}}
+\DeclareOption{letterpaper}
+ {\setlength\paperheight {11in}%
+ \setlength\paperwidth {8.5in}}
+\DeclareOption{legalpaper}
+ {\setlength\paperheight {14in}%
+ \setlength\paperwidth {8.5in}}
+\DeclareOption{executivepaper}
+ {\setlength\paperheight {10.5in}%
+ \setlength\paperwidth {7.25in}}
+\DeclareOption{landscape}
+ {\setlength\@tempdima {\paperheight}%
+ \setlength\paperheight {\paperwidth}%
+ \setlength\paperwidth {\@tempdima}}
+\DeclareOption{bibnotes}{\@booleantrue\bibnotes@sw}%
+\DeclareOption{nobibnotes}{\@booleanfalse\bibnotes@sw}%
+\appdef\class@enddocumenthook{\auto@bib}%
+\appdef\class@inithook{%
+ \@ifxundefined\bibnotes@sw{\@booleanfalse\bibnotes@sw}{}%
+ \bibnotes@sw{%
+ \let\frontmatter@footnote@produce\frontmatter@footnote@produce@endnote
+ }{%
+ \let\frontmatter@footnote@produce\frontmatter@footnote@produce@footnote
+ }%
+}%
+\DeclareOption{footinbib}{\@booleantrue\footinbib@sw}
+\DeclareOption{nofootinbib}{\@booleanfalse\footinbib@sw}
+\DeclareOption{altaffilletter}{\@booleantrue\altaffilletter@sw}%
+\DeclareOption{altaffilsymbol}{\@booleanfalse\altaffilletter@sw}%
+\appdef\class@inithook{%
+ \@ifxundefined\altaffilletter@sw{\@booleanfalse\altaffilletter@sw}{}%
+}%
+\DeclareOption{superbib}{%
+ \def\place@bibnumber{\place@bibnumber@sup}%
+}%
+\DeclareOption{citeautoscript}{%
+ \@booleantrue\citeautoscript@sw
+}%
+\@booleanfalse\citeautoscript@sw
+\DeclareOption{twoside}{\@booleantrue\twoside@sw \@mparswitchfalse}
+\DeclareOption{oneside}{\@booleanfalse\twoside@sw\@mparswitchtrue}
+\AtEndOfClass{%
+ \def\clear@document{%
+ \close@column
+ }%
+ \appdef\class@inithook{%
+ \@ifxundefined\close@column{%
+ \let\close@column\close@column@default
+ }{}%
+ }%
+}%
+\DeclareOption{twocolumn}{%
+ \@booleantrue\twocolumn@sw
+}%
+\DeclareOption{onecolumn}{%
+ \@booleanfalse\twocolumn@sw
+}%
+\DeclareOption{galley}{%
+ \ExecuteOptions{onecolumn}%
+ \@booleantrue\galley@sw
+ \appdef\set@pica@hook{%
+ \advance\textwidth-\columnsep
+ \textwidth.5\textwidth
+ }%
+}%
+\DeclareOption{raggedbottom}{\@booleantrue\raggedcolumn@sw}
+\DeclareOption{flushbottom}{\@booleanfalse\raggedcolumn@sw}
+\DeclareOption{tightenlines}{\@booleantrue\tightenlines@sw}
+\DeclareOption{lengthcheck}{%
+ \@booleantrue\lengthcheck@sw
+ \@booleantrue\twoside@sw
+ \@booleantrue\twocolumn@sw
+}%
+\DeclareOption{draft}{%
+ \@booleantrue\draft@sw
+}%
+\DeclareOption{final}{%
+ \@booleanfalse\draft@sw
+}%
+\DeclareOption{eqsecnum}{\@booleantrue\eqsecnum@sw}
+\DeclareOption{secnumarabic}{\@booleantrue\secnumarabic@sw}
+\DeclareOption{fleqn}{\input{fleqn.clo}}
+\DeclareOption{floats}{\@booleantrue\floats@sw\@booleanfalse\floatp@sw}
+\DeclareOption{endfloats}{\@booleanfalse\floats@sw\@booleanfalse\floatp@sw}
+\DeclareOption{endfloats*}{\@booleanfalse\floats@sw\@booleantrue\floatp@sw}
+\appdef\class@inithook{%
+ \@ifxundefined\floats@sw{\@booleantrue\floats@sw}{}%
+ \@ifxundefined\floatp@sw{\@booleantrue\floatp@sw}{}%
+}%
+\DeclareOption{titlepage}{\@booleantrue\titlepage@sw}
+\DeclareOption{notitlepage}{\@booleanfalse\titlepage@sw}
+\appdef\defaults@hook{%
+ \@ifxundefined\titlepage@sw{\@booleanfalse\titlepage@sw}{}%
+}%
+\def\change@society#1{%
+ \def\@tempa{#1}%
+ \@ifxundefined\@society{}{%
+ \@ifx{\@tempa\@society}{}{%
+ \class@warn{Conflicting society \@tempa<>\@society.}%
+ }%
+ }%
+ \let\@society\@tempa
+}%
+\DeclareOption{aps}{\change@society{aps}\def\@journal{}}%
+\DeclareOption{pra}{\change@society{aps}\def\@journal{pra}}%
+\DeclareOption{prb}{\change@society{aps}\def\@journal{prb}}%
+\DeclareOption{prc}{\change@society{aps}\def\@journal{prc}}%
+\DeclareOption{prd}{\change@society{aps}\def\@journal{prd}}%
+\DeclareOption{pre}{\change@society{aps}\def\@journal{pre}}%
+\DeclareOption{prl}{\change@society{aps}\def\@journal{prl}}%
+\DeclareOption{prstab}{\change@society{aps}\def\@journal{prstab}}%
+\DeclareOption{rmp}{\change@society{aps}\def\@journal{rmp}}%
+\DeclareOption{osa}{\change@society{osa}\def\@journal{}}%
+\DeclareOption{osameet}{\change@society{osa}\def\@journal{osameet}}%
+\DeclareOption{opex}{\change@society{osa}\def\@journal{opex}}%
+\DeclareOption{tops}{\change@society{osa}\def\@journal{tops}}%
+\DeclareOption{josa}{\change@society{osa}\def\@journal{josa}}%
+\DeclareOption{amsfonts}{%
+ \def\class@amsfonts{\RequirePackage{amsfonts}}%
+}%
+\DeclareOption{noamsfonts}{%
+ \let\class@amsfonts\@empty
+}%
+\AtEndOfClass{%
+ \@ifxundefined\class@amsfonts{}{\class@amsfonts}%
+}%
+\DeclareOption{amssymb}{%
+ \def\class@amssymb{\RequirePackage{amssymb}}%
+}%
+\DeclareOption{noamssymb}{%
+ \let\class@amssymb\@empty
+}%
+\AtEndOfClass{%
+ \@ifxundefined\class@amssymb{}{\class@amssymb}%
+}%
+\DeclareOption{amsmath}{%
+ \def\class@amsmath{\RequirePackage{amsmath}[\ver@amsmath@prefer]}%
+}%
+\DeclareOption{noamsmath}{%
+ \let\class@amsmath\@empty
+}%
+\AtEndOfClass{%
+ \preserve@LaTeX
+ \@ifxundefined\class@amsmath{}{\class@amsmath}%
+ \appdef\class@enddocumenthook{\test@amsmath@ver}%
+}%
+\appdef\preserve@LaTeX{%
+ \let\@ifl@aded@LaTeX\@ifl@aded
+ \let\@ifpackageloaded@LaTeX\@ifpackageloaded
+ \let\@pkgextension@LaTeX\@pkgextension
+ \let\@ifpackagelater@LaTeX\@ifpackagelater
+ \let\@ifl@ter@LaTeX\@ifl@ter
+ \let\@ifl@t@r@LaTeX\@ifl@t@r
+ \let\@parse@version@LaTeX\@parse@version
+}%
+\appdef\restore@LaTeX{%
+ \let\@ifl@aded\@ifl@aded@LaTeX
+ \let\@ifpackageloaded\@ifpackageloaded@LaTeX
+ \let\@pkgextension\@pkgextension@LaTeX
+ \let\@ifpackagelater\@ifpackagelater@LaTeX
+ \let\@ifl@ter\@ifl@ter@LaTeX
+ \let\@ifl@t@r\@ifl@t@r@LaTeX
+ \let\@parse@version\@parse@version@LaTeX
+}%
+\def\test@amsmath@ver{%
+ \begingroup
+ \restore@LaTeX
+ \@ifpackageloaded{amsmath}{%
+ \@ifpackagelater{amsmath}{\ver@amsmath@prefer}{}{%
+ \class@warn{%
+ You have loaded amsmath, version "\csname ver@amsmath.sty\endcsname",\MessageBreak
+ but this class requires version "\ver@amsmath@prefer", or later.\MessageBreak
+ Please update your LaTeX installation.
+ }%
+ }%
+ }{%
+ }%
+ \endgroup
+}%
+\def\ver@amsmath@prefer{2000/01/15 v2.05 AMS math features}%
+\DeclareOption{groupedaddress}{\clo@groupedaddress}%
+\def\clo@groupedaddress{%
+ \@booleantrue\groupauthors@sw
+ \@booleantrue\@affils@sw
+ \@booleanfalse\runinaddress@sw
+}%
+\appdef\class@inithook{%
+ \@ifxundefined\groupauthors@sw{\clo@groupedaddress}{}%
+}%
+\DeclareOption{unsortedaddress}{\clo@unsortedaddress}%
+\def\clo@unsortedaddress{%
+ \@booleantrue\groupauthors@sw
+ \@booleanfalse\@affils@sw
+ \@booleanfalse\runinaddress@sw
+}%
+\DeclareOption{runinaddress}{\clo@runinaddress}%
+\def\clo@runinaddress{%
+ \@booleantrue\groupauthors@sw
+ \@booleantrue\@affils@sw
+ \@booleantrue\runinaddress@sw
+}%
+\DeclareOption{superscriptaddress}{\clo@superscriptaddress}%
+\def\clo@superscriptaddress{%
+ \@booleanfalse\groupauthors@sw
+ \@booleantrue\@affils@sw
+ \@booleanfalse\runinaddress@sw
+}%
+\DeclareOption{byrevtex}{\@booleantrue\byrevtex@sw}%
+\DeclareOption{floatfix}{\@booleantrue\force@deferlist@sw}%
+\DeclareOption{nofloatfix}{\@booleanfalse\force@deferlist@sw}%
+\appdef\class@inithook{%
+ \@ifxundefined\force@deferlist@sw{\@booleanfalse\force@deferlist@sw}{}%
+}%
+\gdef\@fltovf{%
+ \@latex@error{%
+ Too many unprocessed floats%
+ \force@deferlist@sw{}{; try class option [floatfix]}%
+ }\@ehb
+}%
+\def\@fltstk{%
+ \@latex@warning{%
+ A float is stuck (cannot be placed)%
+ \force@deferlist@sw{}{; try class option [floatfix]}%
+ }%
+}%
+\DeclareOption{ltxgridinfo}{\@booleantrue\ltxgrid@info@sw}%
+\DeclareOption{outputdebug}{\@booleantrue\outputdebug@sw}%
+\DeclareOption{raggedfooter}{\@booleanfalse\textheight@sw}%
+\DeclareOption{noraggedfooter}{\@booleantrue\textheight@sw}%
+\DeclareOption{newabstract}{\@booleanfalse\oldabstract@sw}%
+\DeclareOption{oldabstract}{\@booleantrue \oldabstract@sw}%
+\appdef\class@inithook{%
+ \@ifxundefined\oldabstract@sw{\@booleanfalse\oldabstract@sw}{}%
+ \oldabstract@sw{%
+ \let@environment{abstract}{abstract-old}%
+ }{}%
+}%
+\DeclareOption*{%
+ \IfFileExists{\CurrentOption\substyle@ext}{%
+ \expandafter\change@society\expandafter{\CurrentOption}%
+ }{%
+ \OptionNotUsed
+ }%
+}%
+\def\substyle@ext{.rtx}%
+\AtEndOfClass{%
+ \@ifxundefined\@society{%
+ \class@warn{No Society specified, using generic APS style}%
+ \def\@society{aps}\def\@journal{}%
+ }{}%
+ \expandafter\input\expandafter{\@society\substyle@ext}%
+}%
+\ExecuteOptions{10pt}
+\ProcessOptions\relax
+ \def\ps@headings{%
+ \let\@oddfoot\@empty\let\@evenfoot\@empty
+ \def\@evenhead{\thepage\hfil\slshape\leftmark}%
+ \def\@oddhead{{\slshape\rightmark}\hfil\thepage}%
+ \let\@mkboth\markboth
+ \def\sectionmark##1{%
+ \markboth {\MakeUppercase{%
+ \ifnum \c@secnumdepth >\z@
+ \thesection\quad
+ \fi
+ ##1}}{}}%
+ \def\subsectionmark##1{%
+ \markright {%
+ \ifnum \c@secnumdepth >\@ne
+ \thesubsection\quad
+ \fi
+ ##1}}}%
+\def\ps@myheadings{%
+ \let\@oddfoot\@empty\let\@evenfoot\@empty
+ \def\@evenhead{\thepage\hfil\slshape\leftmark}%
+ \def\@oddhead{{\slshape\rightmark}\hfil\thepage}%
+ \let\@mkboth\@gobbletwo
+ \let\sectionmark\@gobble
+ \let\subsectionmark\@gobble
+ }%
+\def\ps@article{%
+ \@provide\@evenhead{\let\\\heading@cr\thepage\quad\checkindate\hfil{\leftmark}}%
+ \@provide\@oddhead{\let\\\heading@cr{\rightmark}\hfil\checkindate\quad\thepage}%
+ \@provide\@oddfoot{}%
+ \@provide\@evenfoot{}%
+ \let\@mkboth\markboth
+ \let\sectionmark\@gobble
+ \let\subsectionmark\@gobble
+}%
+\def\ps@article@final{%
+ \@provide\@evenhead{\let\\\heading@cr\thepage\quad\checkindate\hfil{\leftmark}}%
+ \@provide\@oddhead{\let\\\heading@cr{\rightmark}\hfil\checkindate\quad\thepage}%
+ \@provide\@oddfoot{}%
+ \@provide\@evenfoot{}%
+ \let\@mkboth\markboth
+ \def\sectionmark##1{%
+ \markboth{%
+ \MakeTextUppercase{%
+ \@ifnum{\c@secnumdepth >\z@}{\thesection\hskip 1em\relax}{}%
+ ##1%
+ }%
+ }{}%
+ }%
+ \def\subsectionmark##1{%
+ \markright {%
+ \@ifnum{\c@secnumdepth >\@ne}{\thesubsection\hskip 1em\relax}{}%
+ ##1%
+ }%
+ }%
+}%
+\appdef\class@inithook{%
+}%
+\def\heading@cr{\unskip\space\ignorespaces}%
+\def\ps@preprint{%
+ \@provide\@oddfoot{\hfil\thepage\quad\checkindate\hfil}%
+ \@provide\@evenfoot{\hfil\thepage\quad\checkindate\hfil}%
+ \@provide\@oddhead{}%
+ \@provide\@evenhead{}%
+ \let\@mkboth\@gobbletwo
+ \let\sectionmark\@gobble
+ \let\subsectionmark\@gobble
+}%
+\let\@oddhead\@undefined
+\let\@evenhead\@undefined
+\let\@oddfoot\@undefined
+\let\@evenfoot\@undefined
+\AtEndOfClass{%
+ \appdef\class@documenthook{%
+ \@provide\@oddhead{}%
+ \@provide\@evenhead{}%
+ \@provide\@oddfoot{}%
+ \@provide\@evenfoot{}%
+ }%
+}%
+\def\lastpage@putlabel{%
+ \if@filesw
+ \begingroup
+ \advance\c@page\m@ne
+ \immediate\write\@auxout{\string\newlabel{LastPage}{{}{\thepage}}}%
+ \endgroup
+ \fi
+}%
+\AtEndOfClass{%
+ \appdef\clear@document{%
+ \clearpage
+ \lastpage@putlabel
+ }%
+}%
+\RequirePackage{url}%
+\appdef\class@inithook{%
+ \incompatible@package{cite}%
+ \incompatible@package{multicol}%
+}%
+\renewcommand\title[2][]{%
+ \def\@title{#2}%
+ \def\@shorttitle{#1}%
+ \let\@AF@join\@title@join
+}%
+\appdef\class@inithook{%
+ \def\@title{\class@warn{No title}}%
+ \let\@shorttitle\@empty
+ \let\@title@aux\@title@aux@cleared
+}%
+\def\@title@join{\expandafter\@title@join@\@title@aux}%
+\def\@title@join@#1#2{%
+ \def\@title@aux{{\@join{\@separator}{#1}{#2}}}%
+}%
+\def\@title@aux@cleared{{}}%
+\newcounter{affil}
+\renewcommand\author{% implicit #1
+ \@author@def{}% implicit #2
+}%
+\def\collaboration{% implicit #1
+ \groupauthors@sw{%
+ \class@warn{%
+ \string\collaboration\space is only allowed with superscriptaddress option.
+ Use superscriptaddress in place of groupedaddress, unsortedaddress, or runinaddress%
+ }%
+ }{}%
+ \@author@def{\@booleantrue\collaboration@sw}% implicit #2
+}%
+\def\@author@cleared{{}{}}%
+\def\@author@init{%
+ \let\@author\@author@cleared
+}%
+\def\@authorclear@sw{\@ifx{\@author\@author@cleared}}%
+\appdef\class@inithook{%
+ \@author@init
+}%
+\def\@author@def#1#2{%
+ \move@AU\move@AF\move@AUAF
+ \let\@AF@join\@author@join
+ #1%
+ \def\@author{{#2}{}}%
+}%
+\def\@author@join@#1#2#3{%
+ \def\@author{{#1}{\@join{\@separator}{#2}{#3}}}%
+}%
+\def\@author@join{\expandafter\@author@join@\@author}%
+\def\@author@gobble#1#2{}%
+\def\move@AU{%
+ \@authorclear@sw{}{%
+ \collaboration@sw{%
+ \expandafter\appdef
+ \expandafter\AU@grp
+ \expandafter{%
+ \expandafter \CO@opr
+ \@author
+ }%
+ }{%
+ \expandafter\appdef
+ \expandafter\AU@grp
+ \expandafter{%
+ \expandafter \AU@opr
+ \@author
+ }%
+ }%
+ }%
+ \@author@init
+ \@booleanfalse\collaboration@sw
+}%
+\def\@author@finish{%
+ \move@AU\move@AF
+ \@ifx{\AU@grp\@empty}{}{%
+ \@ifx{\AF@grp\@empty}{%
+ \begingroup
+ \let\href\@secondoftwo
+ \let\AU@opr\@firstoftwo
+ \let\CO@opr\@firstoftwo
+ \class@warn{Assuming \string\noaffiliation\space for \AU@grp}%
+ \endgroup
+ \begingroup\@affiliation{\blankaffiliation}%\endgroup in \@affiliation
+ \move@AF
+ }{}%
+ }%
+ \move@AUAF
+}%
+\def\@join#1#2#3{%
+ \@if@empty{#2}{#3}{#2#1#3}%
+}%
+\def\@separator{;\space}%
+\let\surname\@firstofone
+\let\firstname\@firstofone
+\let\AU@grp\@empty
+\renewcommand\and{\class@err{\protect\and\space is not supported}}
+\def\cat@comma@active{\catcode`\,\active}%
+{\cat@comma@active\gdef,{\active@comma}}%
+\def\active@comma{,\penalty-300\relax}%
+\newcommand\affiliation{%
+ \move@AU\move@AF
+ \begingroup
+ \cat@comma@active
+ \@affiliation
+}%
+\def\@affiliation#1{%
+ \endgroup
+ \let\@AF@join\@affil@join
+ \@affil@def{#1}%
+}%
+\newcommand\noaffiliation{%
+ \move@AU\move@AF
+ \begingroup\@affiliation{\blankaffiliation}%
+}%
+\def\blankaffiliation{}%
+\def\@affil@cleared{{}{}}%
+\def\@affil@init{%
+ \let\@affil\@affil@cleared
+}%
+\def\@affilclear@sw{\@ifx{\@affil\@affil@cleared}}%
+\appdef\class@inithook{%
+ \@affil@init
+}%
+\def\@affil@def#1{\def\@affil{{#1}{}}}%
+\def\@affil@join@#1#2#3{%
+ \def\@affil{{#1}{\@join{\@separator}{#2}{#3}}}%
+}%
+\def\@affil@join{\expandafter\@affil@join@\@affil}%
+\def\move@AF{%
+ \@affilclear@sw{}{%
+ \@booleanfalse\temp@sw
+ \let\@tempd\@empty
+ \@affils@sw{%
+ \expandafter\@firstoftwodef\expandafter\@tempa\@affil
+ \def\AFF@opr{\@affil@match\@tempa}%
+ \@AFF@list
+ }{}\temp@sw
+ {%
+ \expandafter\@secondoftwodef\expandafter\@tempb\@affil
+ \@ifx{\@tempb\@empty}{}{%
+ \@ifx{\@tempb\@tempd}{}{%
+ \class@warn{%
+ Ancillary information for \@tempa\space must not be different!
+ Please put it on the first instance%
+ }%
+ }%
+ }%
+ \appdef@eval\AF@grp\@tempc
+ }%
+ {%
+ \@if@empty{\expandafter\@firstoftwo\@affil}{%
+\edef\@tempc{\z@}%
+ }{%
+\stepcounter{affil}%
+\edef\@tempc{\theaffil}%
+ }%
+\appdef \@AFF@list{\AFF@opr}%
+\appdef@eval\@AFF@list\@tempc
+\appdef@e \@AFF@list{\@affil}%
+\appdef@eval\AF@grp\@tempc
+ }%
+ \@affil@init
+ }%
+}%
+\def\@firstoftwodef#1#2#3{%
+ \def#1{#2}%
+}%
+\def\@secondoftwodef#1#2#3{%
+ \def#1{#3}%
+}%
+\def\move@AUAF{%
+ \@ifx{\AF@grp\@empty}%
+ {}{%
+ \appdef \@AAC@list{\AF@opr}%
+ \appdef@eval\@AAC@list{\AF@grp}%
+ \appdef@e \@AAC@list{\AU@grp}%
+ \@ifx{\@empty\AU@grp}{}{%
+ \@ifx{\@empty\AF@grp}{}{%
+ \@booleanfalse\temp@sw
+ \def\AFS@opr{\x@match\AF@grp}%
+ \@AFG@list
+ \temp@sw{}{%
+ \appdef \@AFG@list{\AFS@opr}%
+ \appdef@eval\@AFG@list{\AF@grp}%
+ }%
+ }%
+ }%
+ \let\AU@grp\@empty
+ \let\AF@grp\@empty
+ }%
+}%
+\appdef\class@inithook{%
+ \let\@AAC@list\@empty
+}%
+\appdef\class@inithook{%
+ \let\@AFG@list\@empty
+}%
+\appdef\class@inithook{%
+ \let\@AFF@list\@empty
+}%
+\let\AF@grp\@empty
+\def\@affil@match#1#2#3#4{%
+ \temp@sw{}{%
+ \def\@tempifx{#3}%
+ \@ifx{\@tempifx#1}{%
+ \@booleantrue\temp@sw
+ \def\@tempc{#2}%
+ \def\@tempd{#4}%
+ }{%
+ }%
+ }%
+}%
+\appdef\class@inithook{%
+ \let\@AF@join\@AF@join@error
+}%
+\def\@AF@join@error#1{%
+ \class@warn{%
+ \string\email, \string\homepage, \string\thanks, or \string\altaffiliation\space
+ appears in wrong context.
+ }%
+}%
+\def\sanitize@url{%
+ \@makeother\%%
+ \@makeother\~%
+ \@makeother\_%
+}%
+\newcommand*\email[1][Electronic address: ]{\begingroup\sanitize@url\@email{#1}}%
+\def\@email#1#2{%
+ \endgroup
+ \@AF@join{#1\href{mailto:#2}{#2}}%
+}%
+\newcommand*\homepage[1][URL:~]{\begingroup\sanitize@url\@homepage{#1}}%
+\def\@homepage#1#2{%
+ \endgroup
+ \@AF@join{#1\url{#2}}%
+}%
+\appdef\class@documenthook{%
+ \providecommand\url{\texttt}%
+ \providecommand\href[2]{\url{#2}}%
+}%
+\def\thanks{% implicit #1
+ \@AF@join
+}%
+\newcommand*\altaffiliation[2][]{%
+ \@AF@join{#1#2}%
+}%
+\def\set@listcomma@list#1{%
+ \expandafter\@reset@ac\expandafter#1#1{0}\@reset@ac{%
+ \let\@listcomma\relax
+ }{%
+ \let\@listcomma\@listcomma@comma
+ }%
+}%
+\def\set@listcomma@count#1{%
+\@ifnum{#1=\tw@}{%
+\let\@listcomma\relax
+}{%
+\let\@listcomma\@listcomma@comma
+}%
+}%
+\def\@reset@ac#1#2#3\@reset@ac{%
+ \def#1{#3}%
+ \@tempcnta#2\relax
+ \@ifnum{#2=\tw@}%
+}%
+\def\@listand{\@ifnum{\@tempcnta=\tw@}{\andname\space}{}}%
+\def\@listcomma@comma{\@ifnum{\@tempcnta>\@ne}{,}{}}%
+\def\@listcomma@comma@UK{\@ifnum{\@tempcnta>\tw@}{,}{}}%
+\def\@collaboration@err#1#2{%
+}%
+\def\doauthor#1#2#3{%
+ \ignorespaces#1\unskip\@listcomma
+ \def\@tempifx{#3}%
+ \@ifx{\@tempifx\@empty}{%
+ \def\@tempifx{#2}%
+ \@ifx{\@tempifx\@empty}{}{\frontmatter@footnote{#2}}%
+ }{%
+ #3%
+ \def\@tempifx{#2}%
+ \@ifx{\@tempifx\@empty}{}{\comma@space\frontmatter@footnote{#2}}%
+ }%
+ \space \@listand
+}%
+\def\@thanks{\comma@space\footnote}
+\def\x@match#1#2{%
+ \temp@sw{}{%
+ \def\@tempifx{#2}%
+ \@ifx{\@tempifx#1}{%
+ \@booleantrue\temp@sw
+ }{%
+ }%
+ }%
+}%
+\def\y@match#1#2#3{%
+ \temp@sw{}{%
+ \def\@tempifx{#3}%
+ \@ifx{\@tempifx#1}{%
+ \@booleantrue\temp@sw
+ \def\@tempb{#2}%
+ }{%
+ }%
+ }%
+}%
+\def\frontmatter@footnote#1{%
+ \begingroup
+ \@booleanfalse\temp@sw
+ \def\@tempa{#1}%
+ \let\@tempb\@empty
+ \def\@TBN@opr{\y@match\@tempa}%
+ \@FMN@list
+ \temp@sw{%
+ \expandafter\frontmatter@footnotemark
+ \expandafter{\@tempb}%
+ }{%
+ \stepcounter\@mpfn
+ \protected@xdef\@tempb{\the\csname c@\@mpfn\endcsname}%
+ \expandafter\frontmatter@footnotemark
+ \expandafter{\@tempb}%
+ \expandafter\g@addto@macro
+ \expandafter\@FMN@list
+ \expandafter{%
+ \expandafter \@TBN@opr
+ \expandafter {\@tempb}{#1}%
+ }%
+ }%
+ \endgroup
+}%
+\appdef\class@inithook{%
+ \global\let\@FMN@list\@empty
+}%
+\def\frontmatter@footnotemark#1{%
+ \leavevmode
+ \ifhmode\edef\@x@sf{\the\spacefactor}\nobreak\fi
+ \begingroup
+ \hyper@linkstart {link}{frontmatter@#1}%
+ \csname c@\@mpfn\endcsname#1\relax
+ \def\@thefnmark{\thempfn}%
+ \@makefnmark
+ \hyper@linkend
+ \endgroup
+ \ifhmode\spacefactor\@x@sf\fi
+ \relax
+}%
+\def\keywords#1{%
+ \aftermaketitle@chk{\keywords}%
+ \gdef\@keywords{#1}%
+}%
+\def\@keywords{}%
+\renewcommand*\date[2][\Dated@name]{\def\@date{#1#2}}%
+\def\@date{}%
+\newcommand*\received[2][\Received@name]{\def\@received{#1#2}}%
+\def\@received{}%
+\newcommand*\revised[2][\Revised@name]{\def\@revised{#1#2}}%
+\def\@revised{}%
+\newcommand*\accepted[2][\Accepted@name]{\def\@accepted{#1#2}}%
+\def\@accepted{}%
+\newcommand*\published[2][\Published@name]{\def\@published{#1#2}}%
+\def\@published{}%
+\def\pacs#1{%
+ \aftermaketitle@chk{\pacs}%
+ \gdef\@pacs{#1}%
+}%
+\def\@pacs{}%{\class@warn{No PACS numbers}}%
+\def\preprint#1{\gappdef\@preprint{\preprint{#1}}}%
+\let\@preprint\@empty
+\newbox\absbox
+\newenvironment{abstract}{%
+ \aftermaketitle@chk{\begin{abstract}}%
+ \global\setbox\absbox\vbox\bgroup
+ \color@begingroup
+ \columnwidth\textwidth
+ \hsize\columnwidth
+ \@parboxrestore
+ \def\@mpfn{mpfootnote}\def\thempfn{\thempfootnote}\c@mpfootnote\z@
+ \let\@footnotetext\frontmatter@footnotetext
+ \minipagefootnote@init
+ \let\@listdepth\@mplistdepth \@mplistdepth\z@
+ \@minipagerestore
+ \@setminipage
+ \frontmatter@abstractheading
+ \frontmatter@abstractfont
+ \let\footnote\mini@note
+}{%
+ \par
+ \unskip
+ \minipagefootnote@here
+ \@minipagefalse %% added 24 May 89
+ \color@endgroup
+ \egroup
+}%
+\long\def\frontmatter@footnotetext#1{%
+ \minipagefootnote@pick
+ \reset@font\footnotesize
+ \interlinepenalty \interfootnotelinepenalty
+ \splittopskip \footnotesep
+ \splitmaxdepth \dp \strutbox
+ \set@footnotewidth
+ \@parboxrestore
+ \protected@edef\@currentlabel{\csname p@mpfootnote\endcsname\@thefnmark}%
+ \color@begingroup
+ \frontmatter@makefntext{%
+ \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox
+ }%
+ \color@endgroup
+ \minipagefootnote@drop
+}%
+\def\frontmatter@abstractheading{%
+ \begingroup
+ \centering\large
+ \abstractname
+ \par
+ \endgroup
+}%
+\def\frontmatter@abstractfont{}%
+\def\frontmatter@abstractwidth{\textwidth}
+\def\frontmatter@abstract@produce{%
+ \par
+ \preprintsty@sw{%
+ \do@output@MVL{%
+ \vskip\frontmatter@preabstractspace
+ \vskip200\p@\@plus1fil
+ \penalty-200\relax
+ \vskip-200\p@\@plus-1fil
+ }%
+ }{%
+ \addvspace{\frontmatter@preabstractspace}%
+ }%
+ \begingroup
+ \dimen@\baselineskip
+ \setbox\z@\vtop{\unvcopy\absbox}%
+ \advance\dimen@-\ht\z@\advance\dimen@-\prevdepth
+ \@ifdim{\dimen@>\z@}{\vskip\dimen@}{}%
+ \endgroup
+ \unvbox\absbox
+ \@ifx{\@empty\mini@notes}{}{\mini@notes\par}%
+ \addvspace\frontmatter@postabstractspace
+}%
+\def\frontmatter@preabstractspace{.5\baselineskip}
+\def\frontmatter@postabstractspace{.5\baselineskip}
+\newenvironment{titlepage}{%
+ \twocolumn@sw{\onecolumngrid}{\newpage}%
+ \thispagestyle{titlepage}%
+ \setcounter{page}\@ne
+}{%
+ \twocolumn@sw{\twocolumngrid}{\newpage}%
+ \twoside@sw{}{%
+ \setcounter{page}\@ne
+ }%
+}%
+\def\maketitle{%
+ \@author@finish
+ \title@column\titleblock@produce
+ \suppressfloats[t]%
+ \let\and\relax
+ \let\affiliation\@gobble
+ \let\author\@gobble
+ \let\@AAC@list\@empty
+ \let\@AFF@list\@empty
+ \let\@AFG@list\@empty
+ \let\@AF@join\@AF@join@error
+ \let\email\@gobble
+ \let\@address\@empty
+ \let\maketitle\relax
+ \let\thanks\@gobble
+ \titlepage@sw{%
+ \vfil
+ \clearpage
+ }{}%
+}%
+\def\titleblock@produce{%
+ \begingroup
+ \let\footnote\footnote@latex
+ \let\@makefnmark\@makefnmark@latex
+ \let\@footnotemark\@footnotemark@latex
+ \let\thefootnote\frontmatter@thefootnote
+ \global\c@footnote\z@
+ \let\@makefnmark\frontmatter@makefnmark
+ \frontmatter@setup
+ \thispagestyle{titlepage}\label{FirstPage}%
+ \frontmatter@title@produce
+ \groupauthors@sw{%
+ \frontmatter@author@produce@group
+ }{%
+ \frontmatter@author@produce@script
+ }%
+ \frontmatter@RRAPformat{%
+ \expandafter\produce@RRAP\expandafter{\@date}%
+ \expandafter\produce@RRAP\expandafter{\@received}%
+ \expandafter\produce@RRAP\expandafter{\@revised}%
+ \expandafter\produce@RRAP\expandafter{\@accepted}%
+ \expandafter\produce@RRAP\expandafter{\@published}%
+ }%
+ \frontmatter@abstract@produce
+ \@pacs@produce\@pacs
+ \@keywords@produce\@keywords
+ \par
+ \frontmatter@finalspace
+ \endgroup
+}%
+\def\frontmatter@title@produce{%
+ \begingroup
+ \frontmatter@title@above
+ \frontmatter@title@format
+ \@title
+ \@ifx{\@title@aux\@title@aux@cleared}{}{%
+ \expandafter\frontmatter@footnote\expandafter{\@title@aux}%
+ }%
+ \par
+%% \class@warn{Unused short title ignored}%
+ \frontmatter@title@below
+ \endgroup
+}%
+\appdef\let@mark{\let\\\relax}%
+\def\frontmatter@title@above{}%
+\def\frontmatter@title@format{}%
+\def\frontmatter@title@below{\addvspace{\baselineskip}}%
+\def\frontmatter@author@produce@script{%
+ \begingroup
+ \let\@author@present\@author@present@script
+ \let\AU@temp\@empty
+ \@tempcnta\z@
+ \let\AF@opr \@gobble
+ \def\AU@opr{\@author@count\@tempcnta}%
+ \def\CO@opr{\@collaboration@count\AU@temp\@tempcnta}%
+ \@AAC@list
+ \expandafter\CO@opr\@author@cleared
+ \begingroup
+\frontmatter@authorformat
+\let\AF@opr \@affilID@def
+\let\AU@opr \@author@present
+\def\CO@opr{\@collaboration@present\AU@temp}%
+\set@listcomma@list\AU@temp
+\@AAC@list
+\unskip\unskip
+\par
+\endgroup
+ \begingroup
+\frontmatter@above@affiliation@script
+\let\AFF@opr \@affil@script
+ \@AFF@list
+\frontmatter@footnote@produce
+\par
+\endgroup
+ \endgroup
+}%
+\def\@author@count#1{\advance#1\@ne\@author@gobble}%
+\def\@collaboration@present#1#2#3{%
+ \par
+ \begingroup
+ \frontmatter@collaboration@above
+ \@author@present{(\ignorespaces#2\unskip)}{#3}%
+ \par
+ \endgroup
+ \set@listcomma@list#1%
+}%
+\def\frontmatter@collaboration@above{}%
+\def\@collaboration@count#1#2{%
+ \appdef@eval#1{\the#2}#2\z@
+ \@author@gobble
+}%
+\def\@affilID@def{\def\@affilID@temp}%
+\let\@affilID@temp\@empty
+\def\affil@script#1#2#3{%
+ \def\@tempifx{#1}\@ifx{\@tempifx\@tempa}{%
+ \@if@empty{#2}{}{%
+ \par
+ \begingroup
+ \textsuperscript{\normalfont#1}%
+ #2%
+ \@if@empty{#3}{}{\frontmatter@footnote{#3}}%
+ \par
+ \endgroup
+ }%
+ }{}%
+}%
+\def\@affil@script#1#2#3{%
+ \@ifnum{#1=\z@}{}{%
+ \par
+ \begingroup
+ \frontmatter@affiliationfont
+ \textsuperscript{#1}%
+ #2%
+ \@if@empty{#3}{}{\frontmatter@footnote{#3}}%
+ \par
+ \endgroup
+ }%
+}%
+\def\@author@present@script#1#2{%
+ \begingroup
+ \gdef\comma@space{\textsuperscript{,\,}}%
+ \doauthor{#1}{#2}{%
+ \let\@tempa\@empty
+ \expandafter\@affil@present@script\@affilID@temp\relax
+ }%
+ \endgroup
+ \advance\@tempcnta\m@ne
+}%
+\def\@affilcomma#1#2{%
+ \@ifx{\z@#1}{%
+ \@ifx{\relax#2}{}{%
+ \@affilcomma{#2}%
+ }%
+ }{%
+ #1%
+ \@ifx{\relax#2}{}{%
+ \@ifx{\z@#2}{%
+ \@affilcomma
+ }{%
+ ,\,\@affilcomma{#2}%
+ }%
+ }%
+ }%
+}%
+\def\@affil@present@script#1{%
+ \@ifx{\relax#1}{%
+ \@ifx{\@tempa\@empty}{}{%
+ \textsuperscript{\expandafter\@affilcomma\@tempa\relax\relax}%
+ }%
+ }{%
+ \@ifx{\z@#1}{}{\appdef\@tempa{{#1}}}%
+ \@affil@present@script
+ }%
+}%
+\@provide\@author@parskip{\z@skip}%
+\def\frontmatter@author@produce@group{%
+ \begingroup
+ \let\@author@present\@author@present@group
+ \frontmatter@authorformat
+ \let\AFS@opr \affils@present@group
+ \let\@listcomma\relax
+ \@AFG@list
+ \frontmatter@footnote@produce
+ \par
+ \endgroup
+ \frontmatter@authorbelow
+}%
+\@provide\frontmatter@authorbelow{}%
+\def\affils@present@group#1{%
+ \begingroup
+ \def\AF@temp{#1}% % 0B13
+ \@tempcnta\z@
+ \let\AU@opr \undefined % 0B13
+ \let\CO@opr \undefined % 0B13
+ \def\AF@opr{\@affilID@count\AF@temp\@tempcnta}% 0B13
+ \@AAC@list
+ \@ifnum{\@tempcnta=\z@}{}{%
+ \begingroup
+ \frontmatter@above@affilgroup
+ \set@listcomma@count\@tempcnta
+ \let\AU@opr \undefined % 0B13
+ \let\CO@opr \undefined % 0B13
+ \def\AF@opr{\@affilID@match\AF@temp}%
+ \@AAC@list
+ \endgroup
+ \begingroup
+ \par
+ \frontmatter@above@affiliation
+ \frontmatter@affiliationfont
+ \let\\\frontmatter@addressnewline
+ \@tempcnta\z@
+ \@tfor\AF@temp:=#1\do{%
+ \expandafter\@ifx\expandafter{\z@\AF@temp}{}{%
+ \advance\@tempcnta\@ne
+ }%
+ }%
+ \@ifnum{\@tempcnta=\tw@}{%
+ \let\@listcomma\relax
+ }{}%
+ \def\after@address{\@listcomma\ \@listand}%
+ \runinaddress@sw{%
+ }{%
+ \tightenlines@sw{%
+ }{%
+ \parskip\z@ %space between affilations in grouped mode
+ }%
+ \appdef\after@address\par
+ }%
+ \let\AFF@opr \@affil@group
+ \do@affil@fromgroup\@AFF@list#1\relax
+ \endgroup
+ }%
+ \par
+ \endgroup
+}%
+\def\@affilID@count#1#2#3{%
+ \def\@tempifx{#3}%
+ \@ifx{\@tempifx#1}{%
+ \def\AU@opr{\@author@count#2}%
+ }{%
+ \let\AU@opr \@author@gobble
+ }%
+ \let\CO@opr \@collaboration@err
+}%
+\def\@affilID@match#1#2{%
+ \def\@tempifx{#2}%
+ \@ifx{\@tempifx#1}{%
+ \let\AU@opr \@author@present
+ }{%
+ \let\AU@opr \@author@gobble
+ }%
+ \let\CO@opr \@collaboration@err
+}%
+\def\do@affil@fromgroup#1#2{%
+ \@ifx{\relax#2}{}{%
+\count@#2\relax
+\@ifnum{\count@=\z@}{}{#1}%
+ \do@affil@fromgroup#1%
+ }%
+}%
+\def\@affil@group#1#2#3{%
+ \@ifnum{\count@=#1\relax}{%
+ \@ifx{#2\blankaffiliation}{}{%
+#2%
+\@if@empty{#3}{}{%
+\frontmatter@footnote{#3}%
+}%
+\after@address
+ }%
+ \advance\@tempcnta\m@ne
+ }{}%
+}%
+\def\@author@present@group#1#2{%
+ \gdef\comma@space{\gdef\comma@space{\textsuperscript{,\,}}}%
+ \doauthor{#1}{#2}{}%
+ \advance\@tempcnta\m@ne
+}%
+\def\@pacs@produce#1{%
+ \showPACS@sw{%
+ \begingroup
+ \frontmatter@PACS@format
+ \@pacs@name#1\par
+ \endgroup
+ }{%
+ \@if@empty{#1}{}{%
+ \class@warn{\PACS@warn}%
+ }%
+ }%
+}%
+\def\PACS@warn{If you want your PACS to appear in your output, use document class option showpacs}%
+\def\@keywords@produce#1{%
+ \showKEYS@sw{%
+ \begingroup
+ \frontmatter@keys@format
+ \@keys@name#1\par
+ \endgroup
+ }{%
+ \@if@empty{#1}{}{%
+ \class@warn{If you want your keywords to appear in your output, use document class option showkeys}%
+ }%
+ }%
+}%
+\def\frontmatter@footnote@produce@footnote{%
+ \let\@TBN@opr\present@FM@footnote
+ \@FMN@list
+ \global\let\@FMN@list\@empty
+}%
+\def\present@FM@footnote#1#2{%
+ \begingroup
+ \csname c@\@mpfn\endcsname#1\relax
+ \def\@thefnmark{\thempfn}%
+ \frontmatter@footnotetext{#2}%
+ \endgroup
+}%
+\def\frontmatter@footnote@produce@endnote{%
+}%
+\def\frontmatter@thefootnote{%
+ \altaffilletter@sw{\@alph}{\@fnsymbol}\c@footnote
+}%
+\def\frontmatter@makefnmark{%
+ \@textsuperscript{%
+ \normalfont\@thefnmark
+ }%
+}%
+\long\def\frontmatter@makefntext#1{%
+ \parindent 1em
+ \noindent
+ \Hy@raisedlink{\hyper@anchorstart{frontmatter@\the\c@footnote}\hyper@anchorend}%
+ \@makefnmark
+ #1%
+}%
+\def\frontmatter@setup{}%
+\def\frontmatter@RRAPformat#1{%
+ \removelastskip
+ \begingroup
+ \frontmatter@RRAP@format
+ #1\par
+ \endgroup
+}%
+\def\punct@RRAP{; }%
+\def\produce@RRAP#1{%
+ \@if@empty{#1}{}{%
+ \@ifvmode{\leavevmode}{\unskip\punct@RRAP\ignorespaces}%
+ #1%
+ }%
+}%
+\def\frontmatter@authorformat{}%
+\def\frontmatter@above@affilgroup{}%
+\def\frontmatter@above@affiliation{}%
+\def\frontmatter@above@affiliation@script{}%
+\def\frontmatter@affiliationfont{}%
+\def\frontmatter@RRAP@format{}%
+\def\frontmatter@PACS@format{}%
+\def\frontmatter@keys@format{}%
+\def\frontmatter@finalspace{\addvspace{18\p@}}
+\def\frontmatter@addressnewline{%
+ \@ifhmode{\skip@\lastskip\unskip\unpenalty\break\hskip\skip@}{}%
+ % was: \vskip-.5ex
+}%
+\def\frontmatter@preabstractspace{5.5\p@}
+\def\frontmatter@postabstractspace{6.5\p@}
+\def\aftermaketitle@chk#1{%
+ \@ifx{\maketitle\relax}{%
+ \class@err{\protect#1 must be used before \protect\maketitle}%
+ }{}%
+}%
+\def\ps@titlepage{\ps@empty}%
+\def\volumeyear#1{\gdef\@volumeyear{#1}}%
+\def\@volumeyear{}%
+\def\volumenumber#1{\gdef\@volumenumber{#1}}%
+\def\@volumenumber{}%
+\def\issuenumber#1{\gdef\@issuenumber{#1}}%
+\def\@issuenumber{}%
+\def\eid#1{\gdef\@eid{#1}}%
+\def\@eid{}%
+\def\startpage#1{\gdef\@startpage{#1}\c@page#1\relax}%
+\def\@startpage{\pageref{FirstPage}}%
+\def\endpage#1{\gdef\@endpage{#1}}%
+\def\@endpage{\pageref{LastPage}}%
+\def\print@toc#1{%
+ \begingroup
+ \expandafter\section
+ \expandafter*%
+ \expandafter{%
+ \csname#1name\endcsname
+ }%
+ \let\appendix\appendix@toc
+ \@starttoc{#1}%
+ \endgroup
+}%
+\def\appendix@toc{}%
+\def\labelenumi{\theenumi.}
+\def\theenumi{\arabic{enumi}}
+\def\labelenumii{(\theenumii)}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+\def\labelenumiii{\theenumiii.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+\def\labelenumiv{\theenumiv.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+\def\labelitemi{\textbullet}
+\def\labelitemii{\normalfont\bfseries\textendash}
+\def\labelitemiii{\textasteriskcentered}
+\def\labelitemiv{\textperiodcentered}
+\pagenumbering{arabic}
+\setcounter{topnumber}{2}
+\def\topfraction{.9}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.9}
+\setcounter{totalnumber}{3}
+\def\textfraction{.1}
+\def\floatpagefraction{.9}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.9}
+\def\dblfloatpagefraction{.9}
+\newenvironment{verse}{%
+ \let\\=\@centercr
+ \list{}{%
+ \itemsep\z@ \itemindent -1.5em\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]%
+}{%
+ \endlist
+}%
+\newenvironment{quotation}{%
+ \list{}{%
+ \listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin \parsep \z@ \@plus\p@}\item[]%
+}{%
+ \endlist
+}%
+\newenvironment{quote}{%
+ \list{}{%
+ \rightmargin\leftmargin}\item[]%
+}{%
+ \endlist
+}%
+\def\descriptionlabel#1{%
+ \hspace\labelsep \normalfont\bfseries #1%
+}%
+\newenvironment{description}{%
+ \list{}{%
+ \labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel
+ }%
+}{%
+ \endlist
+}%
+\newcounter{part}
+\newcounter{section}
+\newcounter{subsection}[section]
+\newcounter{subsubsection}[subsection]
+\newcounter{paragraph}[subsubsection]
+\newcounter{subparagraph}[paragraph]
+\def\thepart {\Roman{part}} %
+\def\thesection {\Roman{section}}
+\def\p@section {}
+\def\thesubsection {\Alph{subsection}}
+\def\p@subsection {\thesection\,}
+\def\thesubsubsection {\arabic{subsubsection}}
+\def\p@subsubsection {\thesection\,\thesubsection\,}
+\def\theparagraph {\alph{paragraph}}
+\def\p@paragraph {\thesection\,\thesubsection\,\thesubsubsection\,}
+\def\thesubparagraph {\arabic{subparagraph}}
+\def\p@subparagraph {\thesection\,\thesubsection\,\thesubsubsection\,\theparagraph\,}
+\newenvironment{acknowledgments}{%
+ \acknowledgments@sw{%
+ \section*{\acknowledgmentsname}%
+ }{%
+ \par
+ \phantomsection
+ \addcontentsline{toc}{section}{\protect\numberline{}\acknowledgmentsname}%
+ }%
+}{%
+ \par
+}%
+\@booleantrue\acknowledgments@sw
+\newenvironment{acknowledgements}{%
+ \replace@environment{acknowledgements}{acknowledgments}%
+}{%
+ \endacknowledgments
+}%
+\def\part{\par
+ \addvspace{4ex}%
+ \@afterindentfalse
+ \secdef\@part\@spart}%
+\def\@part[#1]#2{%
+ \@ifnum{\c@secnumdepth >\m@ne}{%
+ \refstepcounter{part}%
+ \addcontentsline{toc}{part}{\thepart\hspace{1em}#1}%
+ }{%
+ \addcontentsline{toc}{part}{#1}%
+ }%
+ \begingroup
+ \parindent \z@ \raggedright
+ \interlinepenalty\@M
+ \@ifnum{\c@secnumdepth >\m@ne}{%
+ \Large \bf \partname~\thepart%
+ \par\nobreak
+ }{}%
+ \huge \bf
+ #2%
+ \markboth{}{}\par
+ \endgroup
+ \nobreak
+ \vskip 3ex
+ \@afterheading
+}%
+\def\@spart#1{{\parindent \z@ \raggedright
+ \interlinepenalty\@M
+ \huge \bf
+ #1\par}
+ \nobreak
+ \vskip 3ex
+ \@afterheading}
+\def\section{%
+ \@startsection
+ {section}%
+ {1}%
+ {\z@}%
+ {0.8cm \@plus1ex \@minus .2ex}%
+ {0.5cm}%
+ {\normalfont\small\bfseries}%
+}%
+\def\subsection{%
+ \@startsection
+ {subsection}%
+ {2}%
+ {\z@}%
+ {.8cm \@plus1ex \@minus .2ex}%
+ {.5cm}%
+ {\normalfont\small\bfseries}%
+}%
+\def\subsubsection{%
+ \@startsection
+ {subsubsection}%
+ {3}%
+ {\z@}%
+ {.8cm \@plus1ex \@minus .2ex}%
+ {.5cm}%
+ {\normalfont\small\itshape}%
+}%
+\def\paragraph{%
+ \@startsection
+ {paragraph}%
+ {4}%
+ {\parindent}%
+ {\z@}%
+ {-1em}%
+ {\normalfont\normalsize\itshape}%
+}%
+\def\subparagraph{%
+ \@startsection
+ {subparagraph}%
+ {5}%
+ {\parindent}%
+ {3.25ex \@plus1ex \@minus .2ex}%
+ {-1em}%
+ {\normalfont\normalsize\bfseries}%
+}%
+\def\theequation{%
+ \theequation@prefix\arabic{equation}%
+}%
+\def\theequation@prefix{}%
+\AtEndOfClass{%
+ \expandafter\input\expandafter{\@pointsize pt\substyle@ext}%
+}%
+\setcounter{secnumdepth}{4}
+\lineskip 1pt
+\normallineskip 1pt
+\def\baselinestretch{1}%
+\@lowpenalty 51
+\@medpenalty 151
+\@highpenalty 301
+\@beginparpenalty -\@lowpenalty
+\@endparpenalty -\@lowpenalty
+\@itempenalty -\@lowpenalty
+\arraycolsep 3pt
+\tabcolsep 2pt
+\arrayrulewidth .4pt
+\doublerulesep 2pt
+\skip\@mpfootins = 0pt
+\fboxsep = 3.0pt
+\fboxrule = 0.4pt
+\newenvironment{figure}
+ {\@float{figure}}
+ {\end@float}
+\newenvironment{figure*}
+ {\@dblfloat{figure}}
+ {\end@dblfloat}
+\newlength\abovecaptionskip
+\newlength\belowcaptionskip
+\setlength\abovecaptionskip{10\p@}
+\setlength\belowcaptionskip{2\p@}
+\long\def\@makecaption#1#2{%
+ \par
+ \vskip\abovecaptionskip
+ \begingroup
+ \small\rmfamily
+ \sbox\@tempboxa{%
+ \let\\\heading@cr
+ #1: #2%
+ }%
+ \@ifdim{\wd\@tempboxa >\hsize}{%
+ \begingroup
+ \samepage
+ \flushing
+ \let\footnote\@footnotemark@gobble
+ #1: #2\par
+ \endgroup
+ }{%
+ \global \@minipagefalse
+ \hb@xt@\hsize{\hfil\unhbox\@tempboxa\hfil}%
+ }%
+ \endgroup
+ \vskip\belowcaptionskip
+}%
+\def\@footnotemark@gobble{%
+ \@footnotemark
+ \@ifnextchar[{\@gobble@opt@i}{\@gobble}%
+}%
+\def\@gobble@opt@i[#1]#2{}%
+\def\@mpmakefntext#1{%
+ \flushing
+ \parindent=1em
+ \noindent
+ \hb@xt@1em{\hss\@makefnmark}%
+ #1%
+}%
+\newcounter{figure}
+\renewcommand \thefigure {\@arabic\c@figure}
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{\figurename~\thefigure}
+\appdef\class@documenthook{%
+ \do@if@floats{figure}{.fgx}%
+}%
+\appdef\class@enddocumenthook{%
+ \printfigures\relax
+}%
+\newcommand\printfigures{%
+ \@ifstar{\true@sw}{\floatp@sw{\true@sw}{\false@sw}}%
+ {%
+ \print@float{figure}{\oneapage}%
+ }{%
+ \print@float{figure}{}%
+ }%
+}%
+\appdef\@xfloat@prep{%
+ \appdef\@parboxrestore{\centering}%
+ \let\@makefnmark\@makefnmark@latex
+ \let\@footnotemark\@footnotemark@latex
+}%
+\newenvironment{table}
+ {\@float{table}}
+ {\end@float}
+\newenvironment{table*}
+ {\@dblfloat{table}}
+ {\end@dblfloat}
+\newcounter{table}
+\renewcommand\thetable{\@Roman\c@table}
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{\tablename~\thetable}
+\def\table@hook{\small}%
+\def\squeezetable{\def\table@hook{\scriptsize}}%
+\appdef\@floatboxreset{\table@hook}%
+\appdef\class@documenthook{%
+ \floats@sw{}{%
+ \let@environment{longtable@float}{longtable}%
+ \let@environment{longtable}{longtable@write}%
+ \let@environment{longtable*@float}{longtable*}%
+ \let@environment{longtable*}{longtable*@write}%
+ \let@environment{turnpage@float}{turnpage}%
+ \let@environment{turnpage}{turnpage@write}%
+ }%
+ \do@if@floats{table}{.tbx}%
+}%
+\appdef\class@enddocumenthook{%
+ \printtables\relax
+}%
+\newenvironment{longtable@write}{%
+ \write@@float{longtable}{table}%
+}{%
+ \endwrite@float
+}%
+\newenvironment{longtable*@write}{%
+ \write@@float{longtable*}{table}%
+}{%
+ \endwrite@float
+}%
+\newenvironment{turnpage@write}{%
+ \immediate\write\tablewrite{\string\begin{turnpage}}%
+}{%
+ \immediate\write\tablewrite{\string\end{turnpage}}%
+}%
+\newcommand\printtables{%
+ \begingroup
+ \let@environment{longtable}{longtable@float}%
+ \let@environment{longtable*}{longtable*@float}%
+ \let@environment{turnpage}{turnpage@anchored}%
+ \prepdef\longtable{\trigger@float@par}%
+ \expandafter\prepdef\csname longtable*\endcsname{\trigger@float@par}%
+ \expandafter\prepdef\csname table@floats\endcsname{%
+ \onecolumngrid@push
+ }%
+ \expandafter\appdef\csname endtable@floats\endcsname{%
+ \onecolumngrid@pop
+ }%
+ \@ifstar{\true@sw}{\floatp@sw{\true@sw}{\false@sw}}%
+ {%
+ \print@float{table}{\oneapage}%
+ }{%
+ \print@float{table}{}%
+ }%
+ \endgroup
+}%
+\newenvironment{turnpage@anchored}{%
+ \onecolumngrid@push
+ \setbox\z@\vbox to\textwidth\bgroup
+ \columnwidth\textheight
+}{%
+ \vfil
+ \egroup
+ \rotatebox{90}{\box\z@}%
+ \onecolumngrid@pop
+}%
+\def\endtabular@hook{}%
+\appdef\class@documenthook{%
+ \@ifpackageloaded{dcolumn}{%
+ \newcolumntype{d}{D{.}{.}{-1}}%
+ }{}%
+}%
+\def\toprule{\hline\hline}%
+\def\colrule{\hline}%
+\def\botrule{\hline\hline}%
+\newenvironment{ruledtabular}{%
+ \def\array@default{v}%
+ \appdef\tabular@hook{\def\@halignto{to\hsize}}%
+ \let\tableft@skip@default\tableft@skip
+ \let\tableft@skip\tableft@skip@float
+ \let\tabmid@skip@default\tabmid@skip
+ \let\tabmid@skip\tabmid@skip@float
+ \let\tabright@skip@default\tabright@skip
+ \let\tabright@skip\tabright@skip@float
+ \let\array@row@pre@default\array@row@pre
+ \let\array@row@pre\array@row@pre@float
+ \let\array@row@pst@default\array@row@pst
+ \let\array@row@pst\array@row@pst@float
+ \appdef\array@row@rst{%
+ \let\array@row@pre\array@row@pre@default
+ \let\array@row@pst\array@row@pst@default
+ \let\tableft@skip\tableft@skip@default
+ \let\tabmid@skip\tabmid@skip@default
+ \let\tabright@skip\tabright@skip@default
+ \appdef\tabular@hook{\let\@halignto\@empty}%
+ }%
+}{%
+}%
+\def\@makefntext#1{%
+ \def\baselinestretch{1}%
+ \reset@font\footnotesize
+ \parindent 1em%
+ \noindent
+ \hb@xt@1.8em{%
+ \Hy@raisedlink{\hyper@anchorstart{footnote@\the\c@footnote}\hyper@anchorend}%
+ \hss\@makefnmark
+ }%
+ #1\par
+}%
+\newenvironment{thebibliography}{}{}%
+\let\@listi\@empty
+\RequirePackage[sort&compress]{natbib}[1999/05/28 7.0]%
+\let\NAT@thebibliography\thebibliography
+\let\NAT@endthebibliography\endthebibliography
+\let\bibliographystyle@latex\bibliographystyle
+\renewcommand\NAT@citesuper[3]{%
+ \ifNAT@swa
+ \leavevmode
+ \unskip
+ \textsuperscript{#1}%
+ \if*#3*\else\ (#3)\fi
+ \else
+ #1%
+ \fi
+ \endgroup
+}%
+\def\@makefnmark@cite{\begingroup\NAT@swatrue\@cite{{\@thefnmark}}{}{}}%
+\let\bibliographystyle@latex\bibliographystyle
+\def\bibliographystyle{\def\@bibstyle}%
+\def\bibsection{%
+ \@ifx@empty\refname{%
+ \par
+ }{%
+ \let\@hangfroms@section\@hang@froms
+ \section*{\refname}%
+ \@nobreaktrue
+ }%
+}%
+\let\NATx@bibsetnum\NAT@bibsetnum
+\def\NAT@bibsetnum#1{%
+ \setlength{\topsep}{\z@}%
+ \NATx@bibsetnum{\ref{LastBibItem}}%
+}%
+\let\NATx@bibsetup\NAT@bibsetup
+\def\NAT@bibsetup{%
+ \setlength{\labelwidth}{\z@}%
+ \setlength{\labelsep}{\z@}%
+ \setlength{\itemindent}{\z@}%
+ \setlength{\listparindent}{\z@}%
+ \setlength{\topsep}{\z@}%
+ \setlength{\parsep}{\z@}%
+ \NATx@bibsetup
+}%
+\let\bibpreamble\@empty
+\def\newblock{\ }%
+\let\NATx@bibnumfmt\bibnumfmt
+\def\bibnumfmt{\place@bibnumber}%
+\AtEndOfClass{%
+ \appdef\class@documenthook{%
+ \@ifxundefined\place@bibnumber{%
+ \let\place@bibnumber\NATx@bibnumfmt
+ }{}%
+ }%
+}%
+\let\NAT@citeyear\citeyear
+\def\NAT@onlinecite#1{%
+ \begingroup
+ \let\@cite\NAT@citenum
+ \let\NAT@mbox\mbox
+ \let\citeyear\NAT@citeyear
+ \def\NAT@space{ }%
+ \cite{#1}%
+ \endgroup
+}%
+\appdef\class@inithook{%
+ \@ifxundefined\@onlinecite{\def\@onlinecite{\citealp}}{}%
+ \@ifxundefined\@textcite{\def\@textcite{\citet}}{}%
+}%
+\DeclareRobustCommand\onlinecite{\@onlinecite}%
+\DeclareRobustCommand\textcite{\@textcite}%
+\renewenvironment{thebibliography}[1]{%
+ \NAT@thebibliography{#1}%
+ \@clubpenalty\clubpenalty
+ \let\@TBN@opr\present@bibnote
+ \@FMN@list
+}{%
+ \@endnotesinbib
+ \edef\@currentlabel{\arabic{NAT@ctr}}%
+ \label{LastBibItem}%
+ \NAT@endthebibliography
+ \global\let\auto@bib\@empty
+}%
+\def\present@bibnote#1#2{%
+ \item[%
+ \textsuperscript{%
+ \normalfont
+ \Hy@raisedlink{\hyper@anchorstart{frontmatter@#1}\hyper@anchorend}%
+ \begingroup
+ \c@footnote#1\relax
+ \frontmatter@thefootnote
+ \endgroup
+ }%
+ ]#2\par
+}%
+\def\place@bibnumber@sup#1{\textsuperscript{#1}}%
+\def\place@bibnumber@inl#1{[#1]}%
+%% \begin{macro}{\@cite}
+%% \begin{macro}{\nocite}
+%% For the sake of Bib\TeX, we must execute the \cmd\bibliographystyle\ command
+%% (putting a \cmd\bibstyle\ command into the auxiliary file)
+%% somewhere before the first \cmd\cite\ command (or any other like command),
+%% which puts a \cmd\citation\ command into the auxiliary file.
+%%
+%% Therefore, we headpatch the two procedures in \classname{natbib} that can result in
+%% the appearance in the auxiliary file of a \cmd\citation\ command.
+%% These two procedures are \cmd\@cite\ and \cmd\nocite.
+%%
+%% Not!
+\def\write@bibliographystyle{%
+ \@ifxundefined\@bibstyle{}{%
+ \expandafter\bibliographystyle@latex\expandafter{\@bibstyle}%
+ }%
+ \global\let\write@bibliographystyle\relax
+}%
+\AtEndDocument{\write@bibliographystyle}%
+%% \end{macro}
+%% \end{macro}
+\def\super@cite[#1][#2]#3{%
+ \leavevmode
+ \skip@\lastskip
+ \unskip
+ \begingroup
+ \def\@tempa{[#1][#2]{#3}}%
+ \super@cite@
+}%
+\def\super@cite@{%
+ \futurelet\@let@token\super@cite@@
+}%
+\long\def\super@cite@@#1{%
+ \@ifx{\@let@token\@sptoken}{%
+ \aftergroup\@sptoken\false@sw
+ }{%
+ \@ifx{\@let@token.}{\true@sw}{%
+ \@ifx{\@let@token,}{\true@sw}{%
+ \@ifx{\@let@token'}{\true@sw}{%
+ \@ifx{\@let@token)}{\true@sw}{%
+ \false@sw
+ }%
+ }%
+ }%
+ }%
+ }%
+ {%
+ #1%
+ \super@cite@
+ }{%
+ \expandafter\@citex@NAT\@tempa\endgroup
+ #1%
+ }%
+}%
+\AtBeginDocument{%
+ \citeautoscript@sw{%
+ \@ifx{\place@bibnumber\place@bibnumber@sup}{%
+ \let\@citex@NAT\@citex\let\@citex\super@cite
+ }{}%
+ }{}%
+}%
+\@ifx{\chapter\relax}{\let\chapter\@undefined}{}%
+\def\mini@note{\save@note\mini@notes}%Implicit #1
+\def\save@note#1#2{%
+ \stepcounter{footnote}%
+ \protected@xdef\@thefnmark{\the\c@footnote}%
+ \@footnotemark
+ \expandafter\g@addto@macro
+ \expandafter#1%
+ \expandafter{%
+ \expandafter \@@footnotetext
+ \expandafter {\@thefnmark}{#2}%
+ }%
+}%
+\long\def\@@footnotetext#1{\def\@thefnmark{#1}\@footnotetext}%
+\let\mini@notes\@empty
+\def\endnote{%
+ \begingroup
+ \aftergroup\@footnotemark
+ \aftergroup\@endnotetext
+ \@ifnextchar[{%
+ \@xendnote
+ }{%
+ \stepcounter{footnote}%
+ \protected@xdef\@tempa{\thefootnote}%
+ \expandafter\@xendnote\expandafter[\@tempa]%
+ }%
+}%
+\def\@xendnote[#1]{%
+ \begingroup
+ \c@footnote#1\relax
+ \unrestored@protected@xdef\@thefnmark{endnote\thefootnote}%
+ \endgroup
+ \endgroup
+}%
+\def\@endnotemark{%
+ \expandafter\cite\expandafter{\@thefnmark}%
+}%
+\def\endnote@ext{.end}%
+\long\def\@endnotetext#1{%
+ \@ifxundefined\@endnoteout{%
+ \newwrite\@endnoteout
+ \gdef\endnote@stream{\jobname\endnote@ext}%
+ \immediate\openout\@endnoteout\endnote@stream\relax
+ }{}%
+ \begingroup
+ \let\label\relax \let\index\relax \let\glossary\relax
+ \let\cite \relax \let\ref \relax \let\pageref \relax
+ \let\( \relax \let\) \relax \let\\ \relax
+ \let \protect \@unexpandable@protect
+ \newlinechar`\^^M%
+ \immediate\write\@endnoteout{\string\@doendnote{\@thefnmark}{#1}}%
+ \endgroup
+}%
+\def\endnotetext{%
+ \@ifnextchar[{%
+ \@xendnotenext
+ }{%
+ \protected@xdef\@thefnmark{\thefootnote}%
+ \@endnotetext
+ }%
+}%
+\def\@xendnotenext[#1]{%
+ \begingroup
+ \c@footnote#1\relax
+ \unrestored@protected@xdef\@thefnmark{\thefootnote}%
+ \endgroup
+ \@endnotetext
+}%
+\def\printendnotes{%
+ \@ifx{\@endnoteout\@undefined}{}{%
+ \begingroup
+ \c@secnumdepth-\maxdimen
+ \section{%
+ \notesname
+ }%
+ \immediate\closeout\@endnoteout
+ \global\let\@endnoteout\@undefined
+ \begin{enumerate}%
+ \makeatletter
+ \input{\endnote@stream}%
+ \end{enumerate}%
+ \endgroup
+ }%
+}%
+\appdef\class@enddocumenthook{%
+ \printendnotes
+}%
+\mathchardef\firstnote@num\z@
+\appdef\class@documenthook{%
+ \global\c@footnote\firstnote@num
+ \appdef\maketitle{\global\c@footnote\firstnote@num}%
+}%
+\def\set@firstnote#1{%
+ \@ifnum{\firstnote@num=#1\relax}{}{%
+ \class@warn@end{Endnote numbers changed: rerun LaTeX}%
+ }%
+ \immediate\write\@mainaux{%
+ \global\chardef\string\firstnote@num#1\relax
+ }%
+}%
+\def\@endnotesinbib{%
+ \set@firstnote\z@
+}%
+\def\@endnotesinbibliography{%
+ \expandafter\set@firstnote\expandafter{\the\c@NAT@ctr}%
+ \@ifx{\@endnoteout\@undefined}{}{%
+ \immediate\closeout\@endnoteout
+ \global\let\@endnoteout\@undefined
+ \makeatletter
+ \input{\endnote@stream}%
+ }%
+}%
+\appdef\class@documenthook{%
+ \let\@makefnmark@latex\@makefnmark
+ \let\@footnotemark@latex\@footnotemark
+ \footinbib@sw{%
+ \let\footnote\endnote
+ \let\@footnotemark\@endnotemark
+ \let\@makefnmark\@makefnmark@cite
+ \let\@endnotesinbib\@endnotesinbibliography
+ \appdef\class@enddocumenthook{\auto@bib}%
+ \let\printendnotes\relax
+ }{}%
+}%
+\def\auto@bib{%
+ \@ifx@empty\@FMN@list{%
+ \@ifxundefined\@endnoteout{%
+ \false@sw
+ }{%
+ \true@sw
+ }%
+ }{%
+ \true@sw
+ }{%
+ \begin{thebibliography}{}\end{thebibliography}%
+ }%
+}%
+\def\@doendnote#1#2{\bibitem{#1}#2}
+\appdef\class@documenthook{%
+\@ifxundefined\@evenhead{%
+\@ifxundefined\@oddhead{%
+\@ifxundefined\@oddfoot{%
+\@ifxundefined\@evenfoot{%
+\preprintsty@sw{%
+\ps@preprint
+}{%
+\ps@article
+}%
+}{}%
+}{}%
+}{}%
+}{}%
+ \pagenumbering{arabic}%
+ \normalsize
+ \tabbingsep \labelsep
+ \leftmargin\leftmargini
+ \labelwidth\leftmargin\advance\labelwidth-\labelsep
+ \let\@listi\@listI
+ \@listi
+ \def\curr@envir{document}%
+ \mark@envir{\curr@envir}%
+ \twocolumn@sw{%
+ \open@column@mlt\tw@
+ \set@colht
+ \@floatplacement
+ \@dblfloatplacement
+ \sloppy
+ \@booleanfalse\raggedcolumn@sw
+ \let\set@listindent\set@listindent@
+ }{%
+ \open@column@one\@ne
+ \set@colht
+ \@floatplacement
+ \@dblfloatplacement
+ \sloppy
+ \let\set@listindent\set@listindent@parshape
+ }%
+}%
+\def\appendix{%
+ \par
+ \setcounter{section}\z@
+ \setcounter{subsection}\z@
+ \setcounter{subsubsection}\z@
+ \def\thesubsection{\arabic{subsection}}%
+ \def\thesubsubsection{\alph{subsubsection}}%
+ \@addtoreset{equation}{section}%
+ \def\theequation@prefix{\thesection}%
+ \addtocontents{toc}{\protect\appendix}%
+ \@ifstar{%
+ \def\thesection{\unskip}%
+ \def\theequation@prefix{A.}%
+ }{%
+ \def\thesection{\Alph{section}}%
+ }%
+}%
+\def\title@column@default#1{%
+ \minipagefootnote@init
+ #1%
+ \minipagefootnote@foot
+}%
+\def\close@column@default{%
+ \newpage
+}%
+\def\galley@outdent{\rightmargin-\columnwidth\advance\rightmargin-\columnsep}%
+\let\widetext@outdent\@empty
+\newenvironment{widetext@galley}{%
+ \list{}{%
+ \topsep \z@skip
+ \listparindent \parindent
+ \itemindent \parindent
+ \leftmargin \z@
+ \parsep \z@\@plus\p@
+ \widetext@outdent
+ \relax
+ }%
+ \item\relax
+}{
+ \endlist
+}%
+\def\title@column@grid#1{%
+ \minipagefootnote@init
+ \onecolumngrid
+ \begingroup
+ \let\@footnotetext\frontmatter@footnotetext
+ \let\set@footnotewidth\set@footnotewidth@ii
+ #1%
+ \endgroup
+ \twocolumngrid
+ \minipagefootnote@foot
+}%
+\def\close@column@grid{%
+ \balancelastpage@sw{%
+ \onecolumngrid
+ }{}%
+}%
+\newenvironment{widetext@grid}{%
+ \par\ignorespaces
+ \setbox\widetext@top\vbox{%
+ \vskip15\p@
+ \hb@xt@\hsize{%
+ \leaders\hrule\hfil
+ \vrule\@height6\p@
+ }%
+ \vskip6\p@
+ }%
+ \setbox\widetext@bot\hb@xt@\hsize{%
+ \vrule\@depth6\p@
+ \leaders\hrule\hfil
+ }%
+ \onecolumngrid
+ \dimen@\ht\widetext@top\advance\dimen@\dp\widetext@top
+ \cleaders\box\widetext@top\vskip\dimen@
+ \let\set@footnotewidth\set@footnotewidth@ii
+}{%
+ \par
+ \setbox\widetext@bot\vbox{%
+ \hb@xt@\hsize{\hfil\box\widetext@bot}%
+ \vskip14\p@
+ }%
+ \dimen@\ht\widetext@bot\advance\dimen@\dp\widetext@bot
+ \cleaders\box\widetext@bot\vskip\dimen@
+ \twocolumngrid\global\@ignoretrue
+ \@endpetrue
+}%
+\newbox\widetext@top
+\newbox\widetext@bot
+\appdef\class@documenthook{%
+ \twocolumn@sw{%
+ \let@environment{widetext}{widetext@grid}%
+ \let\title@column\title@column@grid
+ \let\close@column\close@column@grid
+ }{%
+ \let@environment{widetext}{widetext@galley}%
+ \preprintsty@sw{%
+ }{%
+ \galley@sw{%
+ \let\widetext@outdent\galley@outdent
+ }{%
+ }%
+ }%
+ }%
+}%
+\appdef\class@inithook{%
+ \@ifxundefined\title@column{%
+ \let\title@column\title@column@default
+ }{}%
+}%
+\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
+\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
+\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
+\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
+\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
+\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl}
+\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc}
+\DeclareRobustCommand*\cal{\@fontswitch\relax\mathcal}
+\DeclareRobustCommand*\mit{\@fontswitch\relax\mathnormal}
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+\def\notesname{Notes}
+\def\partname{Part}
+\def\tocname{Contents}
+\def\lofname{List of Figures}
+\def\lotname{List of Tables}
+\def\refname{References}
+\def\indexname{Index}
+\def\figurename{FIG.}
+\def\figuresname{Figures}%
+\def\tablename{TABLE}
+\def\tablesname{Tables}%
+\def\abstractname{Abstract}
+\def\appendixesname{Appendixes}%
+\def\appendixname{Appendix}%
+\def\acknowledgmentsname{Acknowledgments}
+\def\journalname{??}
+\def\copyrightname{??}
+\def\andname{and}
+\def\@pacs@name{PACS numbers: }%
+\def\@keys@name{Keywords: }%
+\def\ppname{pp}
+\def\numbername{number}
+\def\volumename{volume}
+\def\Dated@name{Dated: }%
+\def\Received@name{Received }%
+\def\Revised@name{Revised }%
+\def\Accepted@name{Accepted }%
+\def\Published@name{Published }%
+\def\address{\replace@command\address\affiliation}%
+\def\altaddress{\replace@command\altaddress\altaffiliation}%
+\newenvironment{references}{%
+ \class@warn@end{The references environment is not supported; use thebibliography instead.}
+ \gdef\references{\thebibliography{}}\references
+}{%
+ \endthebibliography
+}%
+\def\draft{%
+ \class@warn@end{Command \string\draft\space is obsolete;^^JInvoke option draft instead.}%
+ \@booleantrue\draft@sw
+}%
+\def\tighten{%
+ \class@warn@end{Command \string\tighten\space is obsolete;^^JInvoke option tightenlines instead.}%
+ \@booleantrue\tightenlines@sw
+}%
+\def\tableline{%
+ \noalign{%
+ \class@warn@end{Command \string\tableline\space is obsolete;^^JUse \string\colrule\space instead.}%
+ \global\let\tableline\colrule
+ }%
+ \tableline
+}%
+\def\case{\replace@command\case\frac}%
+\def\slantfrac{\replace@command\slantfrac\frac}%
+\def\tablenote{\replace@command\tablenote\footnote}%
+\def\tablenotemark{\replace@command\tablenotemark\footnotemark}%
+\def\tablenotetext{\replace@command\tablenotetext\footnotetext}%
+\DeclareRobustCommand\REV@text[1]{%
+ \relax
+ \ifmmode
+ \mathchoice
+ {\hbox{{\everymath{\displaystyle }#1}}}%
+ {\hbox{{\everymath{\textstyle }#1}}}%
+ {\hbox{{\everymath{\scriptstyle }\let\f@size\sf@size\selectfont#1}}}%
+ {\hbox{{\everymath{\scriptscriptstyle}\let\f@size\ssf@size\selectfont#1}}}%
+ \glb@settings
+ \else
+ \mbox{#1}%
+ \fi
+}%
+\DeclareRobustCommand\REV@bbox[1]{%
+ \relax
+ \ifmmode
+ \mathchoice
+ {\hbox{{\everymath{\displaystyle }\boldmath$#1$}}}%
+ {\hbox{{\everymath{\textstyle }\boldmath$#1$}}}%
+ {\hbox{{\everymath{\scriptstyle }\boldmath$#1$}}}%
+ {\hbox{{\everymath{\scriptscriptstyle}\boldmath$#1$}}}%
+ \glb@settings
+ \else
+ \mbox{#1}%
+ \fi
+}%
+\DeclareRobustCommand\REV@bm[1]{%
+ \class@warn@end{To use \string\bm, please load the bm package!}%
+ \global\let\bm\relax
+}%
+\def\FL{\obsolete@command\FL}%
+\def\FR{\obsolete@command\FR}%
+\def\narrowtext{\obsolete@command\narrowtext}%
+\def\mediumtext{\obsolete@command\mediumtext}%
+\newenvironment{quasitable}{%
+ \let@environment{tabular}{longtable}%
+}{%
+}%
+\appdef\class@inithook{%
+ \@ifxundefined\text{\let\text\REV@text}{}%
+ \@ifxundefined\bm{\let\bm\REV@bm}{}%
+ \providecommand\bibinfo[2]{#2}%
+ \providecommand\eprint[2][]{#2}%
+ \providecommand\url[1]{#1}%
+}%
+\def\bbox#1{%
+ \class@warn@end{\string\bbox\space is obsolete,^^Jload the bm package and use \string\bm\space instead.}%
+ \global\let\bbox\relax
+}%
+\newenvironment{mathletters}{%
+ \class@warn@end{Environment {mathletters} is obsolete;^^Jload the amsmath package and use {subequations}!}%
+ \global\let\mathletters\@empty
+}{%
+}%
+\def\eqnum#1{%
+ \class@warn@end{\string\eqnum\space is obsolete, load the amsmath package and use \string\tag!}%
+ \global\let\eqnum\@gobble
+}%
+\RequirePackage{revsymb}%
+\appdef\class@inithook{\revsymb@inithook}%
+\AtEndOfClass{%
+ \InputIfFileExists{\jobname.rty}{}{}%
+}%
+\AtEndOfClass{%
+ \@ifxundefined\secnumarabic@sw{\@booleanfalse\secnumarabic@sw}{}%
+ \secnumarabic@sw{%
+ \def\p@section {}%
+ \def\thesection {\arabic{section}}%
+ \def\p@subsection {}%
+ \def\thesubsection {\thesection.\arabic{subsection}}%
+ \def\p@subsubsection {}%
+ \def\thesubsubsection {\thesubsection.\arabic{subsubsection}}%
+ }{}%
+}%
+\AtEndOfClass{%
+ \appdef\class@documenthook{%
+ \defaults@hook
+ }%
+}%
+\@ifxundefined\defaults@hook{\let\defaults@hook\@empty}{}%
+\endinput
+%%
+%% End of file `revtex4.cls'.
diff --git a/obsolete/macros/latex/contrib/revtex4-0/rmp.rtx b/obsolete/macros/latex/contrib/revtex4-0/rmp.rtx
new file mode 100644
index 0000000000..fb15e0d035
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-0/rmp.rtx
@@ -0,0 +1,238 @@
+%%
+%% This is file `rmp.rtx',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% revtex4.dtx (with options: `rmp')
+%%
+%% This file is part of the APS files in the REVTeX 4 distribution.
+%% For the version number, search on the string
+%% Original version by David Carlisle
+%% Modified by Arthur Ogawa (mailto:ogawa@teleport.com)
+%%
+%% Copyright (c) 1999 The American Physical Society.
+%% http://publish.aps.org/revtex4/
+%% mailto:revtex4@aps.org
+%%
+%% See the REVTeX 4 README file for restrictions and more information.
+%%
+\NeedsTeXFormat{LaTeX2e}[1996/12/01]
+\ProvidesFile{rmp.rtx}
+ [2001/08/03 v4.0 (http://publish.aps.org/revtex4/ for documentation)]%FileInfo
+\ifx\undefined\substyle@ext
+ \def\@tempa{%
+ \endinput
+ \GenericWarning{I must be read in by REVTeX! (Bailing out)}%
+ }%
+ \expandafter\else
+ \def\@tempa{}%
+ \expandafter\fi\@tempa
+\@ifx@empty\@journal{%
+ \class@warn{I have to read in the aps substyle first!}%
+ \endinput
+ \def\@society{aps}\def\@journal{rmp}%
+ \expandafter\input\expandafter{\@society\substyle@ext}%
+}{}%
+\def\frontmatter@setup{%
+ \normalfont\sffamily\raggedright
+}%
+\def\PACS@warn{RMP documents do not display PACS. Your \string\pacs\space will be ignored}%
+\def\frontmatter@title@above{}%
+\def\frontmatter@title@format{\Large\bfseries\raggedright}% HelveticaNeue-Medium(Italic) 14pt.
+\def\frontmatter@title@below{\addvspace{12\p@}}% 24pt b-b down to first author
+\def\frontmatter@authorformat{%
+ \preprintsty@sw{\vskip0.5pc\relax}{}%
+ \@tempskipa\@flushglue
+ \@flushglue\z@ plus50\p@\relax
+ \raggedright\advance\leftskip.5in\relax
+ \@flushglue\@tempskipa
+ \parskip\z@skip
+}%
+\def\frontmatter@affiliationfont{% Helvetica 9/10.2
+ \small\slshape\selectfont\baselineskip10.5\p@\relax
+ \@tempskipa\@flushglue
+ \@flushglue\z@ plus50\p@\relax
+ \raggedright\advance\leftskip.5in\relax
+ \@flushglue\@tempskipa
+}%
+\def\frontmatter@above@affilgroup{\addvspace{7.2\p@}}% additional leading above an author
+\def\frontmatter@above@affiliation{\addvspace{5.3\p@}}%
+\def\frontmatter@above@affiliation@script{}%
+\@ifxundefined\groupauthors@sw{%
+ \clo@groupedaddress
+}{}%
+\def\frontmatter@RRAP@format{%
+ \addvspace{7.3\p@}%
+ \small
+ \raggedright\advance\leftskip.5in\relax
+}%
+\def\produce@RRAP#1{%
+ \@if@empty{#1}{}{%
+ \@ifvmode{\leavevmode}{}%
+ \unskip(\ignorespaces#1\unskip)\quad
+ }%
+}%
+\def\frontmatter@abstractheading{%
+ \preprintsty@sw{%
+ \begingroup
+ \centering\large
+ \abstractname
+ \par
+ \endgroup
+ \vspace{.5pc}%
+ }{}%
+}%
+\def\frontmatter@abstractfont{%
+ \footnotesize
+ \hsize360\p@
+ \leftskip=0.5in
+ \advance\hsize\leftskip
+ \parindent\z@
+}%
+\def\frontmatter@preabstractspace{7.7\p@}%
+\def\frontmatter@postabstractspace{24.6\p@}%
+ \appdef\set@typesize@hook{%
+ \@ifxundefined\preprintsty@sw{}{%
+ \preprintsty@sw{}{%
+ \def\normalsize{%
+ \@setsize\normalsize{12pt}\xpt\@xpt
+ \abovedisplayskip 10\p@ plus2\p@ minus5\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \abovedisplayskip
+ \belowdisplayshortskip \abovedisplayskip
+ \let\@listi\@listI
+ }%
+ }%
+ }%
+ }%
+ \footnotesep 9.25pt
+ \skip\footins 36pt plus 4pt minus 2pt
+ \def\footnoterule{\kern-13pt\hrule width.5in\kern15.6pt\relax}%
+\def\thepart{\Roman{part}} %
+\def\thesection{\Roman{section}}
+\def\p@section{}
+\def\thesubsection{\Alph{subsection}}
+\def\p@subsection{\thesection.}
+\def\thesubsubsection{\arabic{subsubsection}}
+\def\p@subsubsection{\thesection.\thesubsection.}
+\def\theparagraph{\alph{paragraph}}
+\def\p@paragraph{\thesection.\thesubsection.\thesubsubsection.}
+\def\thesubparagraph{\arabic{subparagraph}}
+\def\p@subparagraph{\thesection.\thesubsection.\thesubsubsection.\theparagraph.}
+\def\@seccntformat#1{\csname the#1\endcsname.\hskip0.5em\relax}%
+ \def\section{%
+ \@startsection{section}{1}{\z@}{0.8cm plus1ex minus.2ex}{0.4cm}%
+ {%
+ \small\sffamily\bfseries\selectfont
+ \raggedright
+ \parindent\z@
+ }%
+ }%
+ \def\@hangfrom@section#1#2#3{\@hangfrom{#1#2}\MakeTextUppercase{#3}}%
+ \def\subsection{%
+ \@startsection{subsection}{2}{\z@}{0.8cm plus1ex minus.2ex}{0.4cm}%
+ {%
+ \small\sffamily\bfseries
+ \raggedright
+ \parindent\z@
+ }%
+ }%
+ \def\subsubsection{%
+ \@startsection{subsubsection}{3}{\z@}{.8cm plus1ex minus.2ex}{0.4cm}%
+ {%
+ \small\sffamily\selectfont
+ \raggedright
+ \parindent\z@
+ }%
+ }%
+ \def\paragraph{%
+ \@startsection{paragraph}{4}{\z@}{.8cm plus1ex minus.2ex}{-1em}%
+ {%
+ \small\slshape\selectfont
+ \raggedright
+ \parindent\z@
+ }%
+ }%
+ \def\subparagraph{%
+ \@startsection{subparagraph}{4}{\parindent}{3.25ex plus1ex minus.2ex}{-1em}%
+ {\normalsize\bfseries\selectfont}%
+ }%
+ \setcounter{tocdepth}{4}% FIXME: has no effect
+\appdef\appendix{%
+ \let\@hangfrom@section\@hangfrom@appendix
+ \let\@hangfroms@section\@hangfroms@appendix
+ \let\@sectioncntformat\@appendixcntformat
+}%
+\def\@hangfrom@appendix#1#2#3{%
+ #1%
+ \@if@empty{#2}{%
+ #3%
+ }{%
+ #2\@if@empty{#3}{}{:\ #3}%
+ }%
+}%
+\def\@hangfroms@appendix#1#2{%
+ #1\appendixname\@if@empty{#2}{}{:\ #2}%
+}%
+\def\@appendixcntformat#1{\appendixname\ \csname the#1\endcsname}%
+\setlength\belowcaptionskip{2\p@}
+\long\def\@makecaption#1#2{%
+ \vskip\abovecaptionskip
+ \vbox{%
+ \flushing
+ \small\rmfamily
+ \noindent
+ #1\nobreak\hskip.5em plus.2em\ignorespaces#2\par
+ }%
+ \vskip\belowcaptionskip
+}%
+\appdef\class@documenthook{%
+ \@ifxundefined\@bibstyle{%
+ \def\@bibstyle{apsrmp}%
+ }{}%
+}%
+ \bibpunct{(}{)}{;}{a}{,}{,}%
+ \let\cite\citep
+\def\bibsection{%
+ \let\@hangfroms@section\@hang@froms
+ \section*{\refname}%
+ \@nobreaktrue
+}%
+\let\bibpreamble\@empty
+\def\newblock{\ }%
+\bibhang10\p@
+\bibsep\z@
+\@ifxundefined\footinbib@sw{}{%
+ \footinbib@sw{%
+ \class@warn{%
+ Footnotes in bibliography are incompatible with RMP.^^J%
+ Undoing the footinbib option.
+ }%
+ }{}%
+}%
+\@booleanfalse\footinbib@sw
+\def\eprint#1{eprint #1}%
+\def\toc@@font{%
+ \footnotesize\rmfamily
+ \def\\{\space\ignorespaces}%
+}%
+\def\@dotsep{5.5pt}%
+\def\tocleft@{\z@}%
+\def\tocdim@min{5\p@}%
+\def\l@section{%
+ \l@@sections{}{section}% Implicit #3#4
+}%
+\def\l@subsection{%
+ \l@@sections{section}{subsection}% Implicit #3#4
+}%
+\def\l@subsubsection{%
+ \l@@sections{subsection}{subsubsection}% Implicit #3#4
+}%
+\def\l@paragraph#1#2{}%
+\def\l@subparagraph#1#2{}%
+\let\toc@pre\toc@pre@auto
+\let\toc@post\toc@post@auto
+\endinput
+%%
+%% End of file `rmp.rtx'.
diff --git a/obsolete/macros/latex/contrib/revtex4-0/sample/apssamp.bib b/obsolete/macros/latex/contrib/revtex4-0/sample/apssamp.bib
new file mode 100644
index 0000000000..f1725960b5
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-0/sample/apssamp.bib
@@ -0,0 +1,21 @@
+@ARTICLE{feyn54,
+ author = "R. P. Feynman",
+ year = "1954",
+ journal = "Phys.\ Rev.",
+ volume = "94",
+ pages = "262"
+}
+
+@ARTICLE{epr,
+ author = "A. Einstein and B. Podolsky and N. Rosen",
+ year = "1935",
+ journal = "Phys.\ Rev.",
+ volume = "47",
+ pages = "777"
+}
+
+@MISC{witten2001,
+ author = "Edward Witten",
+ eprint = "hep-th/0106109"
+}
+
diff --git a/obsolete/macros/latex/contrib/revtex4-0/sample/apssamp.tex b/obsolete/macros/latex/contrib/revtex4-0/sample/apssamp.tex
new file mode 100644
index 0000000000..db9efc3ef7
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-0/sample/apssamp.tex
@@ -0,0 +1,576 @@
+% ****** Start of file apssamp.tex ******
+%
+% This file is part of the APS files in the REVTeX 4 distribution.
+% Version 4.0 of REVTeX, August 2001
+%
+% Copyright (c) 2001 The American Physical Society.
+%
+% See the REVTeX 4 README file for restrictions and more information.
+%
+% TeX'ing this file requires that you have AMS-LaTeX 2.0 installed
+% as well as the rest of the prerequisites for REVTeX 4.0
+%
+% See the REVTeX 4 README file
+% It also requires running BibTeX. The commands are as follows:
+%
+% 1) latex apssamp.tex
+% 2) bibtex apssamp
+% 3) latex apssamp.tex
+% 4) latex apssamp.tex
+%
+\documentclass[twocolumn,showpacs,preprintnumbers,amsmath,amssymb]{revtex4}
+%\documentclass[preprint,showpacs,preprintnumbers,amsmath,amssymb]{revtex4}
+
+% Some other (several out of many) possibilities
+%\documentclass[preprint,aps]{revtex4}
+%\documentclass[preprint,aps,draft]{revtex4}
+%\documentclass[prb]{revtex4}% Physical Review B
+
+\usepackage{graphicx}% Include figure files
+\usepackage{dcolumn}% Align table columns on decimal point
+\usepackage{bm}% bold math
+
+%\nofiles
+
+\begin{document}
+
+\preprint{APS/123-QED}
+
+\title{Manuscript Title:\\with Forced Linebreak}% Force line breaks with \\
+
+\author{Ann Author}
+ \altaffiliation[Also at ]{Physics Department, XYZ University.}%Lines break automatically or can be forced with \\
+\author{Second Author}%
+ \email{Second.Author@institution.edu}
+\affiliation{%
+Authors' institution and/or address\\
+This line break forced with \textbackslash\textbackslash
+}%
+
+\author{Charlie Author}
+ \homepage{http://www.Second.institution.edu/~Charlie.Author}
+\affiliation{
+Second institution and/or address\\
+This line break forced% with \\
+}%
+
+\date{\today}% It is always \today, today,
+ % but any date may be explicitly specified
+
+\begin{abstract}
+An article usually includes an abstract, a concise summary of the work
+covered at length in the main body of the article. It is used for
+secondary publications and for information retrieval purposes. Valid
+PACS numbers may be entered using the \verb+\pacs{#1}+ command.
+\end{abstract}
+
+\pacs{Valid PACS appear here}% PACS, the Physics and Astronomy
+ % Classification Scheme.
+%\keywords{Suggested keywords}%Use showkeys class option if keyword
+ %display desired
+\maketitle
+
+\section{\label{sec:level1}First-level heading:\protect\\ The line
+break was forced \lowercase{via} \textbackslash\textbackslash}
+
+This sample document demonstrates proper use of REV\TeX~4 (and
+\LaTeXe) in mansucripts prepared for submission to APS
+journals. Further information can be found in the REV\TeX~4
+documentation included in the distribution or available at
+\url{http://publish.aps.org/revtex4/}.
+
+When commands are referred to in this example file, they are always
+shown with their required arguments, using normal \TeX{} format. In
+this format, \verb+#1+, \verb+#2+, etc. stand for required
+author-supplied arguments to commands. For example, in
+\verb+\section{#1}+ the \verb+#1+ stands for the title text of the
+author's section heading, and in \verb+\title{#1}+ the \verb+#1+
+stands for the title text of the paper.
+
+Line breaks in section headings at all levels can be introduced using
+\textbackslash\textbackslash. A blank input line tells \TeX\ that the
+paragraph has ended. Note that top-level section headings are
+automatically uppercased. If a specific letter or word should appear in
+lowercase instead, you must escape it using \verb+\lowercase{#1}+ as
+in the word ``via'' above.
+
+\subsection{\label{sec:level2}Second-level heading: Formatting}
+
+This file may be formatted in both the \texttt{preprint} and
+\texttt{twocolumn} styles. \texttt{twocolumn} format may be used to
+mimic final journal output. Either format may be used for submission
+purposes; however, for peer review and production, APS will format the
+article using the \texttt{preprint} class option. Hence, it is
+essential that authors check that their manuscripts format acceptably
+under \texttt{preprint}. Manuscripts submitted to APS that do not
+format correctly under the \texttt{preprint} option may be delayed in
+both the editorial and production processes.
+
+The \texttt{widetext} environment will make the text the width of the
+full page, as on page~\pageref{eq:wideeq}. (Note the use the
+\verb+\pageref{#1}+ to get the page number right automatically.) The
+width-changing commands only take effect in \texttt{twocolumn}
+formatting. It has no effect if \texttt{preprint} formatting is chosen
+instead.
+
+\subsubsection{\label{sec:level3}Third-level heading: References and Footnotes}
+Reference citations in text use the commands \verb+\cite{#1}+ or
+\verb+\onlinecite{#1}+. \verb+#1+ may contain letters and numbers.
+The reference itself is specified by a \verb+\bibitem{#1}+ command
+with the same argument as the \verb+\cite{#1}+ command.
+\verb+\bibitem{#1}+ commands may be crafted by hand or, preferably,
+generated by using Bib\TeX. REV\TeX~4 includes Bib\TeX\ style files
+\verb+apsrev.bst+ and \verb+apsrmp.bst+ appropriate for
+\textit{Physical Review} and \textit{Reviews of Modern Physics},
+respectively. REV\TeX~4 will automatically choose the style
+appropriate for the journal specified in the document class
+options. This sample file demonstrates the basic use of Bib\TeX\
+through the use of \verb+\bibliography+ command which references the
+\verb+assamp.bib+ file. Running Bib\TeX\ (typically \texttt{bibtex
+apssamp}) after the first pass of \LaTeX\ produces the file
+\verb+apssamp.bbl+ which contains the automatically formatted
+\verb+\bibitem+ commands (including extra markup information via
+\verb+\bibinfo+ commands). If not using Bib\TeX, the
+\verb+thebibiliography+ environment should be used instead.
+
+To cite bibliography entries, use the \verb+\cite{#1}+ command. Most
+journal styles will display the corresponding number(s) in square
+brackets: \cite{feyn54,witten2001}. To avoid the square brackets, use
+\verb+\onlinecite{#1}+: Refs.~\onlinecite{feyn54} and
+\onlinecite{witten2001}. REV\TeX\ ``collapses'' lists of
+consecutive reference numbers where possible. We now cite everyone
+together \cite{feyn54,witten2001,epr}, and once again
+(Refs.~\onlinecite{epr,feyn54,witten2001}). Note that the references
+were also sorted into the correct numerical order as well.
+
+When the \verb+prb+ class option is used, the \verb+\cite{#1}+ command
+displays the reference's number as a superscript rather than using
+square brackets. Note that the location of the \verb+\cite{#1}+
+command should be adjusted for the reference style: the superscript
+references in \verb+prb+ style must appear after punctuation;
+otherwise the reference must appear before any punctuation. This
+sample was written for the regular (non-\texttt{prb}) citation style.
+The command \verb+\onlinecite{#1}+ in the \texttt{prb} style also
+displays the reference on the baseline.
+
+Footnotes are produced using the \verb+\footnote{#1}+ command. Most
+APS journal styles put footnotes into the bibliography. REV\TeX~4 does
+this as well, but instead of interleaving the footnotes with the
+references, they are listed at the end of the references\footnote{This
+may be improved in future versions of REV\TeX.}. Because the correct
+numbering of the footnotes must occur after the numbering of the
+references, an extra pass of \LaTeX\ is required in order to get the
+numbering correct.
+
+\section{Math and Equations}
+Inline math may be typeset using the \verb+$+ delimiters. Bold math
+symbols may be achieved using the \verb+bm+ package and the
+\verb+\bm{#1}+ command it supplies. For instance, a bold $\alpha$ can
+be typeset as \verb+$\bm{\alpha}$+ giving $\bm{\alpha}$. Fraktur and
+Blackboard (or open face or double struck) characters should be
+typeset using the \verb+\mathfrak{#1}+ and \verb+\mathbb{#1}+ commands
+respectively. Both are supplied by the \texttt{amssymb} package. For
+example, \verb+$\mathbb{R}$+ gives $\mathbb{R}$ and
+\verb+$\mathfrak{G}$+ gives $\mathfrak{G}$
+
+In \LaTeX\ there are many different ways to display equations, and a
+few preferred ways are noted below. Displayed math will center by
+default. Use the class option \verb+fleqn+ to flush equations left.
+
+Below we have numbered single-line equations; this is the most common
+type of equation in \textit{Physical Review}:
+\begin{eqnarray}
+\chi_+(p)\alt{\bf [}2|{\bf p}|(|{\bf p}|+p_z){\bf ]}^{-1/2}
+\left(
+\begin{array}{c}
+|{\bf p}|+p_z\\
+px+ip_y
+\end{array}\right)\;,
+\\
+\left\{%
+ \openone234567890abc123\alpha\beta\gamma\delta1234556\alpha\beta
+ \frac{1\sum^{a}_{b}}{A^2}%
+\right\}%
+\label{eq:one}.
+\end{eqnarray}
+Note the open one in Eq.~(\ref{eq:one}).
+
+Not all numbered equations will fit within a narrow column this
+way. The equation number will move down automatically if it cannot fit
+on the same line with a one-line equation:
+\begin{equation}
+\left\{
+ ab12345678abc123456abcdef\alpha\beta\gamma\delta1234556\alpha\beta
+ \frac{1\sum^{a}_{b}}{A^2}%
+\right\}.
+\end{equation}
+
+When the \verb+\label{#1}+ command is used [cf. input for
+Eq.~(\ref{eq:one})], the equation can be referred to in text without
+knowing the equation number that \TeX\ will assign to it. Just
+use \verb+\ref{#1}+, where \verb+#1+ is the same name that used in
+the \verb+\label{#1}+ command.
+
+Unnumbered single-line equations can be typeset
+using the \verb+\[+, \verb+\]+ format:
+\[g^+g^+ \rightarrow g^+g^+g^+g^+ \dots ~,~~q^+q^+\rightarrow
+q^+g^+g^+ \dots ~. \]
+
+\subsection{Multiline equations}
+
+Multiline equations are obtained by using the \verb+eqnarray+
+environment. Use the \verb+\nonumber+ command at the end of each line
+to avoid assigning a number:
+\begin{eqnarray}
+{\cal M}=&&ig_Z^2(4E_1E_2)^{1/2}(l_i^2)^{-1}
+\delta_{\sigma_1,-\sigma_2}
+(g_{\sigma_2}^e)^2\chi_{-\sigma_2}(p_2)\nonumber\\
+&&\times
+[\epsilon_jl_i\epsilon_i]_{\sigma_1}\chi_{\sigma_1}(p_1),
+\end{eqnarray}
+\begin{eqnarray}
+\sum \vert M^{\text{viol}}_g \vert ^2&=&g^{2n-4}_S(Q^2)~N^{n-2}
+ (N^2-1)\nonumber \\
+ & &\times \left( \sum_{i<j}\right)
+ \sum_{\text{perm}}
+ \frac{1}{S_{12}}
+ \frac{1}{S_{12}}
+ \sum_\tau c^f_\tau~.
+\end{eqnarray}
+\textbf{Note:} Do not use \verb+\label{#1}+ on a line of a multiline
+equation if \verb+\nonumber+ is also used on that line. Incorrect
+cross-referencing will result. Notice the use \verb+\text{#1}+ for
+using a Roman font within a math environment.
+
+To set a multiline equation without \emph{any} equation
+numbers, use the \verb+\begin{eqnarray*}+,
+\verb+\end{eqnarray*}+ format:
+\begin{eqnarray*}
+\sum \vert M^{\text{viol}}_g \vert ^2&=&g^{2n-4}_S(Q^2)~N^{n-2}
+ (N^2-1)\\
+ & &\times \left( \sum_{i<j}\right)
+ \left(
+ \sum_{\text{perm}}\frac{1}{S_{12}S_{23}S_{n1}}
+ \right)
+ \frac{1}{S_{12}}~.
+\end{eqnarray*}
+To obtain numbers not normally produced by the automatic numbering,
+use the \verb+\tag{#1}+ command, where \verb+#1+ is the desired
+equation number. For example, to get an equation number of
+(\ref{eq:mynum}),
+\begin{equation}
+g^+g^+ \rightarrow g^+g^+g^+g^+ \dots ~,~~q^+q^+\rightarrow
+q^+g^+g^+ \dots ~. \tag{2.6$'$}\label{eq:mynum}
+\end{equation}
+
+A few notes on \verb=\tag{#1}=. \verb+\tag{#1}+ requires
+\texttt{amsmath}. The \verb+\tag{#1}+ must come before the
+\verb+\label{#1}+, if any. The numbering set with \verb+\tag{#1}+ is
+\textit{transparent} to the automatic numbering in REV\TeX{};
+therefore, the number must be known ahead of time, and it must be
+manually adjusted if other equations are added. \verb+\tag{#1}+ works
+with both single-line and multiline equations. \verb+\tag{#1}+ should
+only be used in exceptional case - do not use it to number all
+equations in a paper.
+
+Enclosing single-line and multiline equations in
+\verb+\begin{subequations}+ and \verb+\end{subequations}+ will produce
+a set of equations that are ``numbered'' with letters, as shown in
+Eqs.~(\ref{subeq:1}) and (\ref{subeq:2}) below:
+\begin{subequations}
+\label{eq:whole}
+\begin{equation}
+\left\{
+ abc123456abcdef\alpha\beta\gamma\delta1234556\alpha\beta
+ \frac{1\sum^{a}_{b}}{A^2}
+\right\},\label{subeq:1}
+\end{equation}
+\begin{eqnarray}
+{\cal M}=&&ig_Z^2(4E_1E_2)^{1/2}(l_i^2)^{-1}
+(g_{\sigma_2}^e)^2\chi_{-\sigma_2}(p_2)\nonumber\\
+&&\times
+[\epsilon_i]_{\sigma_1}\chi_{\sigma_1}(p_1).\label{subeq:2}
+\end{eqnarray}
+\end{subequations}
+Putting a \verb+\label{#1}+ command right after the
+\verb+\begin{subequations}+, allows one to
+reference all the equations in a subequations environment. For
+example, the equations in the preceding subequations environment were
+Eqs.~(\ref{eq:whole}).
+
+\subsubsection{Wide equations}
+The equation that follows is set in a wide format, i.e., it spans
+across the full page. The wide format is reserved for long equations
+that cannot be easily broken into four lines or less:
+\begin{widetext}
+\begin{equation}
+{\cal R}^{(\text{d})}=
+ g_{\sigma_2}^e
+ \left(
+ \frac{[\Gamma^Z(3,21)]_{\sigma_1}}{Q_{12}^2-M_W^2}
+ +\frac{[\Gamma^Z(13,2)]_{\sigma_1}}{Q_{13}^2-M_W^2}
+ \right)
+ + x_WQ_e
+ \left(
+ \frac{[\Gamma^\gamma(3,21)]_{\sigma_1}}{Q_{12}^2-M_W^2}
+ +\frac{[\Gamma^\gamma(13,2)]_{\sigma_1}}{Q_{13}^2-M_W^2}
+ \right)\;. \label{eq:wideeq}
+\end{equation}
+\end{widetext}
+This is typed to show the output is in wide format.
+(Since there is no input line between \verb+\equation+ and
+this paragraph, there is no paragraph indent for this paragraph.)
+\section{Cross-referencing}
+REV\TeX{} will automatically number sections, equations, figure
+captions, and tables. In order to reference them in text, use the
+\verb+\label{#1}+ and \verb+\ref{#1}+ commands. To reference a
+particular page, use the \verb+\pageref{#1}+ command.
+
+The \verb+\label{#1}+ should appear in a section heading, within an
+equation, or in a table or figure caption. The \verb+\ref{#1}+ command
+is used in the text where the citation is to be displayed. Some
+examples: Section~\ref{sec:level1} on page~\pageref{sec:level1},
+Table~\ref{tab:table1}, and Fig.~\ref{fig:epsart}.
+
+\section{Figures and Tables}
+Figures and tables are typically ``floats'' which means that their
+final position is determined by \LaTeX\ while the document is being
+typeset. \LaTeX\ isn't always successful in placing floats
+optimally.
+
+Figures may be inserted by using either the \texttt{graphics} or
+\texttt{graphix} packages. These packages both define the
+\verb+\includegraphics{#1}+ command, but they differ in how optional
+arguments for specifying the orientation, scaling, and translation of the
+figure. Fig.~\ref{fig:epsart} shows a figure that is small enough to
+fit in a single column. It is embedded using the \texttt{figure}
+environment which provides both the caption and the imports the figure
+file.
+\begin{figure}
+\includegraphics{fig_1}% Here is how to import EPS art
+\caption{\label{fig:epsart} A figure caption. The figure captions are
+automatically numbered.}
+\end{figure}
+
+Fig.~\ref{fig:wide} is a figure that is too wide for a single column,
+so instead the \texttt{figure*} environment has been used.
+\begin{figure*}
+\includegraphics{fig_2}% Here is how to import EPS art
+\caption{\label{fig:wide}Use the figure* environment to get a wide
+figure that spans the page in \texttt{twocolumn} formatting.}
+\end{figure*}
+
+The heart of any table is the \texttt{tabular} environment which gives
+the rows of the tables. Each row consists of column entries separated
+by \verb+&+'s and terminates with \textbackslash\textbackslash. The
+required argument for the \texttt{tabular} environment
+specifies how data are displayed in the columns. For instance, entries
+may be centered, left-justified, right-justified, aligned on a decimal
+point. Extra column-spacing may be be specified as well, although
+REV\TeX~4 sets this spacing so that the columns fill the width of the
+table. Horizontal rules are typeset using the \verb+\hline+
+command. The doubled (or Scotch) rules that appear at the top and
+bottom of a table can be achieved enclosing the \texttt{tabular}
+environment within a \texttt{ruledtabular} environment. Rows whose
+columns span multiple columns can be typeset using the
+\verb+\multicolumn{#1}{#2}{#3}+ command (for example, see the first
+row of Table~\ref{tab:table3}).
+
+Tables~\ref{tab:table1}-\ref{tab:table4} show various effects. Tables
+that fit in a narrow column are contained in a \texttt{table}
+environment. Table~\ref{tab:table3} is a wide table set with the
+\texttt{table*} environment. Long tables may need to break across
+pages. The most straightforward way to accomplish this is to specify
+the \verb+[H]+ float placement on the \texttt{table} or
+\texttt{table*} environment. However, the standard \LaTeXe\ package
+\texttt{longtable} will give more control over how tables break and
+will allow headers and footers to be specified for each page of the
+table. A simple example of the use of \texttt{longtable} can be found
+in the file \texttt{summary.tex} that is included with the REV\TeX~4
+distribution.
+
+There are two methods for setting footnotes within a table (these
+footnotes will be displayed directly below the table rather than at
+the bottom of the page or in the bibliography). The easiest
+and preferred method is just to use the \verb+\footnote{#1}+
+command. This will automatically enumerate the footnotes with
+lowercase roman letters. However, it is sometimes necessary to have
+multiple entries in the table share the same footnote. In this case,
+there is no choice but to manually create the footnotes using
+\verb+\footnotemark[#1]+ and \verb+\footnotetext[#1]{#2}+.
+\texttt{\#1} is a numeric value. Each time the same value for
+\texttt{\#1} is used, the same mark is produced in the table. The
+\verb+\footnotetext[#1]{#2}+ commands are placed after the \texttt{tabular}
+environment. Examine the \LaTeX\ source and output for
+Tables~\ref{tab:table1} and \ref{tab:table2} for examples.
+
+\begin{table}
+\caption{\label{tab:table1}This is a narrow table which fits into a
+narrow column when using \texttt{twocolumn} formatting. Note that
+REV\TeX~4 adjusts the intercolumn spacing so that the table fills the
+entire width of the column. Table captions are numbered
+automatically. This table illustrates left-aligned, centered, and
+right-aligned columns. }
+\begin{ruledtabular}
+\begin{tabular}{lcr}
+Left\footnote{Note a.}&Centered\footnote{Note b.}&Right\\
+\hline
+1 & 2 & 3\\
+10 & 20 & 30\\
+100 & 200 & 300\\
+\end{tabular}
+\end{ruledtabular}
+\end{table}
+
+\begin{table}
+\caption{\label{tab:table2}A table with more columns still fits
+properly in a column. Note that several entries share the same
+footnote. Inspect the \LaTeX\ input for this table to see
+exactly how it is done.}
+\begin{ruledtabular}
+\begin{tabular}{cccccccc}
+ &$r_c$ (\AA)&$r_0$ (\AA)&$\kappa r_0$&
+ &$r_c$ (\AA) &$r_0$ (\AA)&$\kappa r_0$\\
+\hline
+Cu& 0.800 & 14.10 & 2.550 &Sn\footnotemark[1]
+& 0.680 & 1.870 & 3.700 \\
+Ag& 0.990 & 15.90 & 2.710 &Pb\footnotemark[2]
+& 0.450 & 1.930 & 3.760 \\
+Au& 1.150 & 15.90 & 2.710 &Ca\footnotemark[3]
+& 0.750 & 2.170 & 3.560 \\
+Mg& 0.490 & 17.60 & 3.200 &Sr\footnotemark[4]
+& 0.900 & 2.370 & 3.720 \\
+Zn& 0.300 & 15.20 & 2.970 &Li\footnotemark[2]
+& 0.380 & 1.730 & 2.830 \\
+Cd& 0.530 & 17.10 & 3.160 &Na\footnotemark[5]
+& 0.760 & 2.110 & 3.120 \\
+Hg& 0.550 & 17.80 & 3.220 &K\footnotemark[5]
+& 1.120 & 2.620 & 3.480 \\
+Al& 0.230 & 15.80 & 3.240 &Rb\footnotemark[3]
+& 1.330 & 2.800 & 3.590 \\
+Ga& 0.310 & 16.70 & 3.330 &Cs\footnotemark[4]
+& 1.420 & 3.030 & 3.740 \\
+In& 0.460 & 18.40 & 3.500 &Ba\footnotemark[5]
+& 0.960 & 2.460 & 3.780 \\
+Tl& 0.480 & 18.90 & 3.550 & & & & \\
+\end{tabular}
+\end{ruledtabular}
+\footnotetext[1]{Here's the first, from Ref.~\onlinecite{feyn54}.}
+\footnotetext[2]{Here's the second.}
+\footnotetext[3]{Here's the third.}
+\footnotetext[4]{Here's the fourth.}
+\footnotetext[5]{And etc.}
+\end{table}
+
+\begin{table*}
+\caption{\label{tab:table3}This is a wide table that spans the page
+width in \texttt{twocolumn} mode. It is formatted using the
+\texttt{table*} environment. It also demonstates the use of
+\textbackslash\texttt{multicolumn} in rows with entries that span
+more than one column.}
+\begin{ruledtabular}
+\begin{tabular}{ccccc}
+ &\multicolumn{2}{c}{$D_{4h}^1$}&\multicolumn{2}{c}{$D_{4h}^5$}\\
+ Ion&1st alternative&2nd alternative&lst alternative
+&2nd alternative\\ \hline
+ K&$(2e)+(2f)$&$(4i)$ &$(2c)+(2d)$&$(4f)$ \\
+ Mn&$(2g)$\footnote{The $z$ parameter of these positions is $z\sim\frac{1}{4}$.}
+ &$(a)+(b)+(c)+(d)$&$(4e)$&$(2a)+(2b)$\\
+ Cl&$(a)+(b)+(c)+(d)$&$(2g)$\footnotemark[1]
+ &$(4e)^{\text{a}}$\\
+ He&$(8r)^{\text{a}}$&$(4j)^{\text{a}}$&$(4g)^{\text{a}}$\\
+ Ag& &$(4k)^{\text{a}}$& &$(4h)^{\text{a}}$\\
+\end{tabular}
+\end{ruledtabular}
+\end{table*}
+
+\begin{table}
+\caption{\label{tab:table4}Numbers in columns Three--Five have been
+aligned by using the ``d'' column specifier (requires the
+\texttt{dcolumn} package). Non-numeric entries (those entries without
+a ``.'') in a ``d'' column are aligned on the decimal point. Use the
+``D'' specifier for more complex layouts. }
+\begin{ruledtabular}
+\begin{tabular}{ccddd}
+One&Two&\mbox{Three}&\mbox{Four}&\mbox{Five}\\
+\hline
+one&two&\mbox{three}&\mbox{four}&\mbox{five}\\
+He&2& 2.77234 & 45672. & 0.69 \\
+C\footnote{Some tables require footnotes.}
+ &C\footnote{Some tables need more than one footnote.}
+ & 12537.64 & 37.66345 & 86.37 \\
+\end{tabular}
+\end{ruledtabular}
+\end{table}
+
+\textit{Physical Review} style requires that the initial citation of
+figures or tables be in numerical order in text, so don't cite
+Fig.~\ref{fig:wide} until Fig.~\ref{fig:epsart} has been cited.
+
+\begin{acknowledgments}
+We wish to acknowledge the support of the author community in using
+REV\TeX{}, offering suggestions and encouragement, testing new versions,
+\dots.
+\end{acknowledgments}
+
+\appendix
+
+\section{Appendixes}
+
+To start the appendixes, use the \verb+\appendix+ command.
+This signals that all following section commands refer to appendixes
+instead of regular sections. Therefore, the \verb+\appendix+ command
+should be used only once---to setup the section commands to act as
+appendixes. Thereafter normal section commands are used. The heading
+for a section can be left empty. For example,
+\begin{verbatim}
+\appendix
+\section{}
+\end{verbatim}
+will produce an appendix heading that says ``APPENDIX A'' and
+\begin{verbatim}
+\appendix
+\section{Background}
+\end{verbatim}
+will produce an appendix heading that says ``APPENDIX A: BACKGROUND''
+(note that the colon is set automatically).
+
+If there is only one appendix, then the letter ``A'' should not
+appear. This is suppressed by using the star version of the appendix
+command (\verb+\appendix*+ in the place of \verb+\appendix+).
+
+\section{A little more on appendixes}
+
+Observe that this appendix was started by using
+\begin{verbatim}
+\section{A little more on appendixes}
+\end{verbatim}
+
+Note the equation number in an appendix:
+\begin{equation}
+E=mc^2.
+\end{equation}
+
+\subsection{\label{app:subsec}A subsection in an appendix}
+
+You can use a subsection or subsubsection in an appendix. Note the
+numbering: we are now in Appendix \ref{app:subsec}.
+
+Note the equation numbers in this appendix, produced with the
+subequations environment:
+\begin{subequations}
+\begin{eqnarray}
+E&=&mc, \label{appa}
+\\
+E&=&mc^2, \label{appb}
+\\
+E&\agt& mc^3. \label{appc}
+\end{eqnarray}
+\end{subequations}
+They turn out to be Eqs.~(\ref{appa}), (\ref{appb}), and (\ref{appc}).
+\newpage %Just because of unusual number of tables stacked at end
+\bibliography{apssamp}% Produces the bibliography via BibTeX.
+
+\end{document}
+%
+% ****** End of file apssamp.tex ******
diff --git a/obsolete/macros/latex/contrib/revtex4-0/sample/fig_1.eps b/obsolete/macros/latex/contrib/revtex4-0/sample/fig_1.eps
new file mode 100644
index 0000000000..8bc5bc8a74
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-0/sample/fig_1.eps
@@ -0,0 +1,5 @@
+%!PS-Adobe-3.0
+%%BoundingBox: 0 0 100 100
+0 0 moveto 100 0 lineto 100 100 lineto 0 100 lineto 0 0 lineto stroke
+20 50 moveto /Times findfont 10 scalefont setfont (Test Figure) show
+%%EOF
diff --git a/obsolete/macros/latex/contrib/revtex4-0/sample/fig_2.eps b/obsolete/macros/latex/contrib/revtex4-0/sample/fig_2.eps
new file mode 100644
index 0000000000..cda61493ce
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-0/sample/fig_2.eps
@@ -0,0 +1,5 @@
+%!PS-Adobe-3.0
+%%BoundingBox: 0 0 500 80
+0 0 moveto 500 0 lineto 500 80 lineto 0 80 lineto 0 0 lineto stroke
+200 40 moveto /Times findfont 10 scalefont setfont (Wide Test Figure) show
+%%EOF
diff --git a/obsolete/macros/latex/contrib/revtex4-0/sample/template.aps b/obsolete/macros/latex/contrib/revtex4-0/sample/template.aps
new file mode 100644
index 0000000000..e1bacac013
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-0/sample/template.aps
@@ -0,0 +1,176 @@
+%% ****** Start of file template.aps ****** %
+%%
+%%
+%% This file is part of the APS files in the REVTeX 4 distribution.
+%% Version 4.0 of REVTeX, August 2001
+%%
+%%
+%% Copyright (c) 2001 The American Physical Society.
+%%
+%% See the REVTeX 4 README file for restrictions and more information.
+%%
+%
+% This is a template for producing manuscripts for use with REVTEX 4.0
+% Copy this file to another name and then work on that file.
+% That way, you always have this original template file to use.
+%
+% Group addresses by affiliation; use superscriptaddress for long
+% author lists, or if there are many overlapping affiliations.
+% For Phys. Rev. appearance, change preprint to twocolumn.
+% Choose pra, prb, prc, prd, pre, prl, prstab, or rmp for journal
+% Add 'draft' option to mark overfull boxes with black boxes
+% Add 'showpacs' option to make PACS codes appear
+% Add 'showkeys' option to make keywords appear
+\documentclass[aps,prl,preprint,groupedaddress]{revtex4}
+%\documentclass[aps,prl,preprint,superscriptaddress]{revtex4}
+%\documentclass[aps,prl,twocolumn,groupedaddress]{revtex4}
+
+% You should use BibTeX and apsrev.bst for references
+% Choosing a journal automatically selects the correct APS
+% BibTeX style file (bst file), so only uncomment the line
+% below if necessary.
+%\bibliographystyle{apsrev}
+
+\begin{document}
+
+% Use the \preprint command to place your local institutional report
+% number in the upper righthand corner of the title page in preprint mode.
+% Multiple \preprint commands are allowed.
+% Use the 'preprintnumbers' class option to override journal defaults
+% to display numbers if necessary
+%\preprint{}
+
+%Title of paper
+\title{}
+
+% repeat the \author .. \affiliation etc. as needed
+% \email, \thanks, \homepage, \altaffiliation all apply to the current
+% author. Explanatory text should go in the []'s, actual e-mail
+% address or url should go in the {}'s for \email and \homepage.
+% Please use the appropriate macro foreach each type of information
+
+% \affiliation command applies to all authors since the last
+% \affiliation command. The \affiliation command should follow the
+% other information
+% \affiliation can be followed by \email, \homepage, \thanks as well.
+\author{}
+%\email[]{Your e-mail address}
+%\homepage[]{Your web page}
+%\thanks{}
+%\altaffiliation{}
+\affiliation{}
+
+%Collaboration name if desired (requires use of superscriptaddress
+%option in \documentclass). \noaffiliation is required (may also be
+%used with the \author command).
+%\collaboration can be followed by \email, \homepage, \thanks as well.
+%\collaboration{}
+%\noaffiliation
+
+\date{\today}
+
+\begin{abstract}
+% insert abstract here
+\end{abstract}
+
+% insert suggested PACS numbers in braces on next line
+\pacs{}
+% insert suggested keywords - APS authors don't need to do this
+%\keywords{}
+
+%\maketitle must follow title, authors, abstract, \pacs, and \keywords
+\maketitle
+
+% body of paper here - Use proper section commands
+% References should be done using the \cite, \ref, and \label commands
+\section{}
+% Put \label in argument of \section for cross-referencing
+%\section{\label{}}
+\subsection{}
+\subsubsection{}
+
+% If in two-column mode, this environment will change to single-column
+% format so that long equations can be displayed. Use
+% sparingly.
+%\begin{widetext}
+% put long equation here
+%\end{widetext}
+
+% figures should be put into the text as floats.
+% Use the graphics or graphicx packages (distributed with LaTeX2e)
+% and the \includegraphics macro defined in those packages.
+% See the LaTeX Graphics Companion by Michel Goosens, Sebastian Rahtz,
+% and Frank Mittelbach for instance.
+%
+% Here is an example of the general form of a figure:
+% Fill in the caption in the braces of the \caption{} command. Put the label
+% that you will use with \ref{} command in the braces of the \label{} command.
+% Use the figure* environment if the figure should span across the
+% entire page. There is no need to do explicit centering.
+
+% \begin{figure}
+% \includegraphics{}%
+% \caption{\label{}}
+% \end{figure}
+
+% Surround figure environment with turnpage environment for landscape
+% figure
+% \begin{turnpage}
+% \begin{figure}
+% \includegraphics{}%
+% \caption{\label{}}
+% \end{figure}
+% \end{turnpage}
+
+% tables should appear as floats within the text
+%
+% Here is an example of the general form of a table:
+% Fill in the caption in the braces of the \caption{} command. Put the label
+% that you will use with \ref{} command in the braces of the \label{} command.
+% Insert the column specifiers (l, r, c, d, etc.) in the empty braces of the
+% \begin{tabular}{} command.
+% The ruledtabular enviroment adds doubled rules to table and sets a
+% reasonable default table settings.
+% Use the table* environment to get a full-width table in two-column
+% Add \usepackage{longtable} and the longtable (or longtable*}
+% environment for nicely formatted long tables. Or use the the [H]
+% placement option to break a long table (with less control than
+% in longtable).
+% \begin{table}%[H] add [H] placement to break table across pages
+% \caption{\label{}}
+% \begin{ruledtabular}
+% \begin{tabular}{}
+% Lines of table here ending with \\
+% \end{tabular}
+% \end{ruledtabular}
+% \end{table}
+
+% Surround table environment with turnpage environment for landscape
+% table
+% \begin{turnpage}
+% \begin{table}
+% \caption{\label{}}
+% \begin{ruledtabular}
+% \begin{tabular}{}
+% \end{tabular}
+% \end{ruledtabular}
+% \end{table}
+% \end{turnpage}
+
+% Specify following sections are appendices. Use \appendix* if there
+% only one appendix.
+%\appendix
+%\section{}
+
+% If you have acknowledgments, this puts in the proper section head.
+%\begin{acknowledgments}
+% put your acknowledgments here.
+%\end{acknowledgments}
+
+% Create the reference section using BibTeX:
+\bibliography{basename of .bib file}
+
+\end{document}
+%
+% ****** End of file template.aps ******
+
diff --git a/obsolete/macros/latex/contrib/revtex4-0/src/ltxdocext.dtx b/obsolete/macros/latex/contrib/revtex4-0/src/ltxdocext.dtx
new file mode 100644
index 0000000000..ee9d71c9c0
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-0/src/ltxdocext.dtx
@@ -0,0 +1,1208 @@
+% \iffalse &pdflatex ltxdoc klootch
+% ltxdocext.dtx: package to extend the ltxdoc class of standard LaTeX
+% Copyright (c) 1999 Arthur Ogawa
+%
+% Disclaimer
+% This file is distributed WITHOUT ANY WARRANTY;
+% without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+% ReadMe
+% For the documentation and more detailed instructions for
+% installation, typeset this document with \LaTeX.
+% \fi
+% \CheckSum{938}
+%% \CharacterTable
+%% {Upper-case \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
+%% Lower-case \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
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}%
+%
+% \iffalse ltxdoc klootch
+%%% @LaTeX-file{
+%%% filename = "ltxdocext.dtx",
+%%% version = "0.0a0",
+%%% date = "1999/06/04",
+%%% time = "11:23:00 GMT",
+%%% checksum = "929",
+%%% author = "Arthur Ogawa (mailto:ogawa@teleport.com)",
+%%% copyright = "Copyright (C) 1999 Arthur Ogawa,
+%%% all rights reserved. Copying of this file is
+%%% authorized only if either:
+%%% (1) you make absolutely no changes to your copy,
+%%% including name; OR
+%%% (2) if you do make changes, you first rename it
+%%% to some other name.",
+%%% address = "Arthur Ogawa,
+%%% USA",
+%%% telephone = "",
+%%% FAX = "",
+%%% email = "ogawa@teleport.com",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "latex, ltxdoc",
+%%% supported = "yes",
+%%% abstract = "extensions to the ltxdoc class",
+%%% docstring = "The checksum field above generated by ltxdoc",
+%%% }
+% \fi
+%
+% \iffalse ltxdoc klootch
+% The following references the \file{00readme.txt} file,
+% which contains basic information about this package.
+% The contents of this file are generated when
+% you typeset the programmer's documentation.
+% Search on "{filecontents*}{00readme.txt}" to locate it.
+% \fi\input{00readme.txt}%
+%
+% \subsection{Bill of Materials}
+%
+% Following is a list of the files in this distribution arranged
+% according to provenance.
+%
+% \subsubsection{Primary Source}%
+% One single file generates all.
+%\begin{verbatim}
+%ltxdocext.dtx
+%\end{verbatim}
+%
+% \subsubsection{Generated by \texttt{latex ltxdocext.dtx}}%
+% Typesetting the source file under \LaTeX\
+% generates the readme and the installer.
+%\begin{verbatim}
+%00readme.txt ltxdocext.ins
+%\end{verbatim}
+%
+% \subsubsection{Generated by \texttt{tex ltxdocext.ins}}%
+% Typesetting the installer generates
+% the package files.
+%\begin{verbatim}
+%ltxdocext.sty acrofont.sty
+%\end{verbatim}
+%
+% \subsubsection{Documentation}%
+% The following are the online documentation:
+% \begin{verbatim}
+%ltxdocext.pdf
+% \end{verbatim}
+%
+% \subsubsection{Auxiliary}%
+% The following are auxiliary files generated
+% in the course of running \LaTeX:
+% \begin{verbatim}
+%ltxdocext.aux ltxdocext.idx ltxdocext.ind ltxdocext.log ltxdocext.toc
+% \end{verbatim}
+%
+% \section{Code common to all modules}%
+%
+% The following may look a bit klootchy, but we
+% want to require only one place in this file
+% where the version number is stated,
+% and we also want to ensure that the version
+% number is embedded into every generated file.
+%
+% Now we declare that
+% these files can only be used with \LaTeXe.
+% An appropriate message is displayed if
+% a different \TeX{} format is used.
+% \begin{macrocode}
+%<*doc|extensions|fonts>
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]%
+%</doc|extensions|fonts>
+% \end{macrocode}
+% As desired, the following modules all
+% take common version information:
+% \begin{macrocode}
+%<extensions>\ProvidesFile{ltxdocext.sty}%
+%<fonts>\ProvidesFile{acrofont.sty}%
+%<*doc>
+\expandafter\ProvidesFile\expandafter{\jobname.dtx}%
+%</doc>
+% \end{macrocode}
+%
+% The following line contains, for once and for all,
+% the version and date information.
+% By various means, this information is reproduced
+% consistently in all generated files and in the
+% typeset documentation.
+% \begin{macrocode}
+ [1999/06/04 0.0a0 ltxdoc extensions package]% \fileversion
+% \end{macrocode}
+%
+%
+% \section{The driver module \texttt{doc}}
+%
+% This module, consisting of the present section,
+% typesets the programmer's documentation,
+% generating the \file{.ins} installer and \file{00readme.txt} as required.
+%
+% Because the only uncommented-out lines of code at the beginning of
+% this file constitute the \file{doc} module itself,
+% we can simply typeset the \file{.dtx} file directly,
+% and there is thus rarely any need to
+% generate the ``doc'' {\sc docstrip} module.
+% Module delimiters are nonetheless required so that
+% this code does not find its way into the other modules.
+%
+% The \enve{document} command concludes the typesetting run.
+%
+% \begin{macrocode}
+%<*doc>
+% \end{macrocode}
+%
+% \subsection{Stubs for \file{ltxdocext.sty} and \file{acrofont.sty}}
+%
+% This \env{filecontents} environment generates stub files
+% \file{ltxdocext.sty} and \file{acrofont.sty}.
+% Stubs are needed because the documentation for this package
+% requires them and they might not yet be present.
+%
+% A real version of these files will be generated
+% when you typeset \file{ltxdocext.ins}, at which point
+% the stub file will be overwritten (you will have to give {\sc docstrip}
+% permission to do this).
+% \begin{macrocode}
+\begin{filecontents}{ltxdocext.sty}
+% Stub version of ltxdocext.sty
+\end{filecontents}
+\begin{filecontents}{acrofont.sty}
+% Stub version of acrofont.sty
+\end{filecontents}
+% \end{macrocode}
+%
+% \subsection{The Preamble}
+% The programmers documentation is formatted
+% with the \classname{ltxdoc} class with local customizations,
+% and with the usual code line indexing.
+% \begin{macrocode}
+\documentclass[draft]{ltxdoc}
+\RequirePackage{ltxdocext}%
+\RequirePackage{acrofont}%
+\CodelineIndex\EnableCrossrefs
+% \end{macrocode}
+%
+% \subsubsection{Docstrip and info directives}
+% We use so many {\sc docstrip} modules that we set the
+% \texttt{StandardModuleDepth} counter to 1.
+% \begin{macrocode}
+\setcounter{StandardModuleDepth}{1}
+% \end{macrocode}
+% The following command retrieves the date and version information
+% from this file.
+% \begin{macrocode}
+\expandafter\GetFileInfo\expandafter{\jobname.dtx}%
+% \end{macrocode}
+%
+%
+% \subsection{The installer file}
+%
+% The installer \file{ltxdocext.ins} appears here.
+% If you have retrieved the standard distribution of this package,
+% the installer file is already on your filesystem.
+% If you are bootstrapping,
+% the first typesetting of the \file{.dtx} file
+% will cause the installer to be generated.
+%
+% The following modules are used to direct
+% {\sc docstrip} in generating the external files:
+% \begin{center}
+% \begin{tabular}{lll}
+% \textbf{Module}&\textbf{File}&\textbf{Description}\\
+% doc &\file{ltxdocext.drv}&driver for programmer's documantation\\
+% extensions&\file{ltxdocext.sty}&ltxdoc extensions package\\
+% fonts &\file{acrofont.sty} &package to use only Acrobat fonts
+% \end{tabular}
+% \end{center}
+%
+% \begin{macrocode}
+\begin{filecontents}{ltxdocext.ins}
+%% This file will generate documentation and runtime files
+%% from ltxdocext.dtx when run through LaTeX or TeX.
+\input docstrip
+\preamble
+
+This is a generated file;
+altering it directly is inadvisable;
+instead, modify the original source file.
+See the URL in the file 00readme.txt.
+
+Copyright notice.
+
+ These files are distributed
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+\endpreamble
+\keepsilent
+ \generate{%
+ \file{ltxdocext.drv}{\from{ltxdocext.dtx}{doc}}%
+ \file{ltxdocext.sty}{\from{ltxdocext.dtx}{extensions}}%
+ \file{acrofont.sty}{\from{ltxdocext.dtx}{fonts}}%
+ }%
+\ifToplevel{
+\Msg{***********************************************************}
+\Msg{*}
+\Msg{* To finish the installation, please move}
+\Msg{* ltxdocext.sty}
+\Msg{* into a directory searched by TeX.}
+\Msg{*}
+\Msg{* To produce the user documentation,
+ run ltxdocext.tex through LaTeX.}
+\Msg{*}
+\Msg{* To produce the programmer documentation,
+ run ltxdocext.dtx through LaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing}
+\Msg{***********************************************************}
+}
+\endbatchfile
+\end{filecontents}
+% \end{macrocode}
+% Note that, because all of the files generated by the installer
+% are part of the standard distribution, it will
+% be necessary to run the installer only when bootstrapping
+% (or, of course, during development).
+% Note, too, that it is rare to generate the \file{doc}
+% module because it suffices to simply typeset the \file{.dtx} file itself.
+%
+% \subsection{The ``Read Me'' File}
+% As promised above, here is the contents of the
+% ``Read Me'' file. That file serves a double purpose,
+% since it also constitutes the beginining of the
+% programmer's documentation. What better thing, after
+% all, to have appear at the beginning of the
+% typeset documentation?
+%
+% A good discussion of how to write a ReadMe file can be found in
+% Engst, Tonya, ``Writing a ReadMe File? Read This''
+% \emph{MacTech} October 1998, p. 58.
+%
+% Note the appearance of the
+% \cmd\StopEventually\ command, which marks the
+% dividing line between the user documentation
+% and the programmer documentation.
+%
+% The usual user will not be asked to
+% do a full build, not to speak
+% of the bootstrap.
+% Instructions for carrying these processes
+% begin the programmer's manual.
+%
+% \begin{macrocode}
+\begin{filecontents*}{00readme.txt}
+\title{%
+ Extensions to the \classname{ltxdoc} class%
+ \thanks{%
+ This file has version number \fileversion,
+ last revised \filedate.%
+ % For version number and date, search on "\fileversion" in the .dtx file,
+ % or see the end of the 00readme.txt file.
+ }%
+}%
+
+\author{%
+Arthur Ogawa (\texttt{mailto:ogawa@teleport.com}),
+\fileversion\\Copyright (C) 1999 Arthur Ogawa
+}%
+\maketitle
+
+This file embodies the \classname{ltxdocext} package,
+the implementation and its user documentation.
+
+The distribution point for this work is
+\url{ftp://ftp.teleport.com/users/ogawa/macros/latex/contrib/supported/ltxdocext...},
+which contains fully unpacked, prebuilt runtime files and documentation.
+
+To use this document class, you must have a working
+\TeX\ installation equipped with \LaTeXe\
+and possibly pdftex and Adobe Acrobat Reader or equivalent.
+
+To install, retrieve the distribution,
+unpack it into a directory on the target computer,
+and move the files \file{ltxdocext.sty} and \file{acrofont.sty}
+into a location in your filesystem where they will be found by \LaTeX.
+
+If you will be using the \classname{acrofont} package, you must
+also install the virtual fonts
+\file{zpsynocmrv}, \file{zptmnocmr},
+\file{zptmnocmrm}, and \file{zpzcnocmry}.
+The corresponding \file{.tfm}, \file{.vf}, and \file{.vpl}
+files are part of this distribution.
+
+To use, read the user documentation \file{ltxdocext.pdf}.
+The \file{.dtx} file, \file{ltxdocext.dtx}, constitutes
+in itself an instance of use of the \classname{ltxdocext}
+package and the \classname{acrofont} package.
+
+\tableofcontents
+
+\section{Processing Instructions}
+
+The package files \file{ltxdocext.sty} and \file{acrofont.sty}
+are generated from this file, \file{ltxdocext.dtx},
+via the {\sc docstrip} facility of \LaTeX
+via |tex ltxdocext.ins|.
+The typeset documentation that you are now reading is generated from
+the same file by typesetting it with \LaTeX\ or pdftex
+via |latex ltxdocext.dtx| or |pdflatex ltxdocext.dtx|.
+
+\subsection{Build Instructions}
+
+You may bootstrap this suite of files solely from \file{ltxdocext.dtx}.
+Prepare by installing \LaTeXe\ (and either tex or pdftex) on your computer,
+then carry out the following steps:
+\begin{enumerate}
+\item
+Within an otherwise empty directory,
+typeset \file{ltxdocext.dtx} with \LaTeX\ or pdflatex;
+you will obtain the typeset documentation you are now reading,
+along with
+the installer \file{ltxdocext.ins},
+and the file \file{00readme.txt}.
+\item
+Now typeset \file{ltxdocext.ins},
+thereby generating the package file \file{ltxdocext.sty},
+and the package file \file{acrofont.sty}.
+Make sure that {\sc docstrip} receives permission
+to overwrite existing versions of these packages.
+\item
+Install \classname{ltxdocext.sty} and \classname{acrofont.sty}
+by moving them to a location
+in your filesystem where they will be found by \LaTeX.
+\item
+Now complete the typesetting of the documentation by
+retypesetting \file{ltxdocext.dtx}.
+Note: you will have to run \LaTeX\ twice, then \file{makeindex}, then
+\LaTeX\ again in order to obtain a valid index and table of contents.
+\end{enumerate}
+\end{filecontents*}
+% \end{macrocode}
+%
+% \subsection{The Document Body}
+%
+% Here is the document body, containing only a
+% \cmd\DocInput\ directive---referring to this very file.
+% This very cute self-reference is a common \classname{ltxdoc} idiom.
+% \begin{macrocode}
+\begin{document}%
+\expandafter\DocInput\expandafter{\jobname.dtx}%
+% ^^A\PrintChanges
+\end{document}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</doc>
+% \end{macrocode}
+%
+% \section{Using the \classname{ltxdoc} and \classname{acrofont} packages}%
+% These packages are an adjunct to the
+% standard \LaTeX\ \classname{ltxdoc} class and may be
+% simply invoked as follows:
+%\begin{verbatim}
+%\documentclass[draft]{ltxdoc}
+%\RequirePackage{ltxdocext}%
+%\RequirePackage{acrofont}%
+%\CodelineIndex\EnableCrossrefs
+%\end{verbatim}
+%
+% Your document should simply cleave to the standards of the
+% \classname{ltxdoc} class, with extensions and alterations as noted.
+%
+% \subsection{Extensions to the \classname{ltxdoc} class}%
+%
+% \subsubsection{Extensions to the \env{verbatim} environment and \cs{verb} command}%
+%
+% The delimiters \verb$<<$ and \verb$>>$ within the scope of the verbatim environment
+% or within the argument of the \cmd\verb\ command produce
+% italics surrounded by angle brackets.
+% This typographic convention usually indicates
+% \emph{metalanguage}, i.e., a placeholder.
+%
+% To obtain the angle bracket character per se,
+% double the character, viz., ``\verb$the delimiter \verb+<<<<+$''.
+%
+% \subsubsection{The -\texttt{matter} Commands Work}
+% The sectioning commands \cmd\frontmatter, \cmd\mainmatter, and \cmd\backmatter
+% of the standard \LaTeX\ \classname{book} class are operative in the
+% \classname{ltxdoc} class.
+%
+% \subsubsection{The \cs{GetFileInfo} command}\label{sec:GetFileInfo}
+% You can use the \cmd\GetFileInfo\ command to extract
+% the date, version, and file info of a file which has registered itself
+% via the \cmd\ProvidesFile\ or \cmd\ProvidesClass\ command
+% (employing the optional argument thereto).
+%
+% For instance, if your document contains the following:
+%\begin{verbatim}
+%\RequirePackage{ltxdocext}%
+%\GetFileInfo{ltxdocext.sty}%
+%\end{verbatim}
+% then the following control sequence names will have
+% a value corresponding to that package's \cmd\ProvidesFile\
+% command:
+% \cmd\filedate: the file's date,
+% \cmd\fileversion: the file's version, and
+% \cmd\fileinfo: the file's info.
+%
+% \subsubsection{Self-Indexing Commands}%
+% Certain commands automatically produce an index entry
+% (or several related entries) according to the meaning.
+%
+% \begin{unnumtable}
+% \begin{tabular}{ll}
+% meta-text &\cmd\m\arg{text}\\
+% command &\cmd\cmd\cmd\csname\\
+% environment name &\cmd\env\arg{name}\\
+% \cmd\begin\verb`{foo}`&\cmd\envb\arg{foo}\\
+% \cmd\end\verb`{foo}` &\cmd\enve\arg{foo}\\
+% argument &\cmd\arg\arg{name}\\
+% optional &\cmd\oarg\arg{name}\\
+% filename &\cmd\file\arg{name}\\
+% url &\cmd\url\arg{name}\\
+% document class &\cmd\classname\arg{name}\\
+% document substyle &\cmd\substyle\arg{name}\\
+% class option &\cmd\classoption\arg{name}
+% \end{tabular}
+% \end{unnumtable}
+%
+% \subsubsection{Unnumbered Tables}%
+%
+% When your documentation requires the use of an unnumbered table,
+% use the \env{unnumtable} environment:
+% \begin{verbatim}
+%\begin{unnumtable}
+%\begin{tabular}{ll}
+%<table rows>
+%\end{tabular}
+%\end{unnumtable}
+% \end{verbatim}
+%
+% \subsubsection{Structuring Tables}%
+% The commands \cmd\toprule, \cmd\colrule, and \cmd\botrule
+% allow you to mark the beginning of the column heads
+% the beginning of the table body, and the end of
+% the table body, respectively.
+% In context,
+% \begin{verbatim}
+%\begin{tabular}{ll}
+%\toprule
+%<table head rows>
+%\colrule
+%<table rows>
+%\botrule
+%\end{tabular}
+% \end{verbatim}
+%
+% \subsubsection{A Sectioning Command Below \cs{subsection}}%
+% The \cmd\subsubsection\ command is defined.
+%
+%
+% \subsection{Alterations to the \classname{ltxdoc} class}%
+% The following involve no new markup, but they
+% do change the appearance of your formatted documentation:
+% \begin{enumerate}
+% \item
+% Using the \classname{acrofont} package causes your
+% document to be formatted using the standard
+% Acrobat fonts to the greatest extent possible.
+% This means that for most documents, Computer Modern
+% is not used at all.
+% Math that unavoidable must use CM still exists, however.
+% \item
+% An index will be produced at the end of the document
+% without your needing to explicitly mark it up, and
+% it will have an entry in the TOC.
+% \item
+% The \env{quote} environment has a slightly smaller left margin.
+% \item
+% Array columns are set tight by default.
+% \item
+% A host of \cmd\DoNotIndex\ directives are invoked.
+% I intend this list to grow to encompass
+% even more commands. Send me your suggestions.
+% \end{enumerate}
+%
+%
+%
+%\StopEventually{}
+%
+% \section{Extensions to the ltxdoc class}
+% The \file{extensions} {\sc docstrip} module comprises the
+% package \classname{ltxdocext.sty}, which provides extensions
+% to the standard \LaTeX\ \classname{ltxdoc} class.
+%
+% \subsection{Beginning of the \file{extensions} {\sc docstrip} module}
+% \begin{macrocode}
+%<*extensions>
+\def\class@name{ltxdocext}%
+\expandafter\PackageInfo\expandafter{\class@name}{%
+ An extension to the \protect\LaTeXe\space ltxdoc class
+ by A. Ogawa (ogawa@teleport.com)%
+}%
+% \end{macrocode}
+%
+% \subsection{Incorporate \classname{ltxguide.cls} extensions}
+%
+% Code extracted from \classname{ltxguide.cls}, by Alan Jeffrey.
+% ``This code stolen from \classname{ltxguide.cls}:
+% Some hacks with verbatim... NB: this would be better done with the
+% verbatim package, but this document has to run on any \LaTeX
+% installation.''
+% \begin{macrocode}
+\RequirePackage{verbatim}%
+\let\o@verbatim\verbatim
+\def\verbatim{%
+ \ifhmode\unskip\par\fi
+% \nopagebreak % Overridden by list penalty
+ \ifx\@currsize\normalsize
+ \small
+ \fi
+ \o@verbatim
+}%
+% \end{macrocode}
+%
+% Here we extend the font-setting command to include making \texttt{<>} active
+% (i.e., adjusting the input encoding).
+% \begin{macrocode}
+\renewcommand \verbatim@font {%
+ \normalfont \ttfamily
+ \catcode`\<=\active
+ \catcode`\>=\active
+}%
+% \end{macrocode}
+%
+% Make \verb$|...|$ a synonym for \cmd\verb\verb$|...|$.
+% \begin{macrocode}
+\RequirePackage{shortvrb}
+\AtBeginDocument{%
+ \MakeShortVerb{\|}%
+}%
+% \end{macrocode}
+%
+% Make active bracket characters produce italics surrounded by angle brackets
+% (used in \env{verbatim} and \cmd\verb).
+% \verb|<<| produces a less-than, and \verb|>>| produces a greater-than.
+% \begin{macrocode}
+\begingroup
+ \catcode`\<=\active
+ \catcode`\>=\active
+ \gdef<{\@ifnextchar<\@lt\@meta}
+ \gdef>{\@ifnextchar>\@gt\@gtr@err}
+ \gdef\@meta#1>{\m{#1}}
+ \gdef\@lt<{\char`\<}
+ \gdef\@gt>{\char`\>}
+\endgroup
+\def\@gtr@err{%
+ \ClassError{ltxguide}{%
+ Isolated \protect>%
+ }{%
+ In this document class, \protect<...\protect>
+ is used to indicate a parameter.\MessageBreak
+ I've just found a \protect> on its own.
+ Perhaps you meant to type \protect>\protect>?
+ }%
+}
+\def\verbatim@nolig@list{\do\`\do\,\do\'\do\-}
+% \end{macrocode}
+% End of code stolen from \file{ltxguide.cls}. Thanks, Alan.
+%
+% Add functionality from doc.dtx:
+% (code stolen from doc.dtx):
+% \begin{macrocode}
+\def\GetFileInfo#1{%
+ \def\filename{#1}%
+ \def\@tempb##1 ##2 ##3\relax##4\relax{%
+ \def\filedate{##1}%
+ \def\fileversion{##2}%
+ \def\fileinfo{##3}}%
+ \edef\@tempa{\csname ver@#1\endcsname}%
+ \expandafter\@tempb\@tempa\relax? ? \relax\relax}
+% \end{macrocode}
+% (end of code stolen from doc.dtx. Thanks FMi.)
+%
+% Various forms of self-indexing commands:
+% \begin{macrocode}
+\DeclareRobustCommand{\m}[1]{%
+ \meta{#1}%
+ \index{#1=\string\meta{#1} placeholder}\index{placeholder>#1=\string\meta{#1}}%
+}%
+\DeclareRobustCommand\meta[1]{%
+ \mbox{\LANGLE\itshape#1\/\RANGLE}%
+}%
+\def\LANGLE{$\langle$}%
+\def\RANGLE{$\rangle$}%
+\DeclareRobustCommand{\arg}[1]{%
+ {\ttfamily\string{}\meta{#1}{\ttfamily\string}}%
+ \index{#1=\string\ttt{#1}, argument}\index{argument>#1=\string\ttt{#1}}%
+}%
+\let\oarg\undefined
+\DeclareRobustCommand{\oarg}[1]{%
+ {\ttfamily[%]
+ }\meta{#1}{\ttfamily%[
+ ]}%
+ \index{#1=\string\ttt{#1}, optional argument}%
+ \index{argument, optional>#1=\string\ttt{#1}}%
+}%
+\DeclareRobustCommand\cmd{\begingroup\makeatletter\@cmd}%
+\def\@cmd#1{%
+ \endgroup
+ \cs{\expandafter\cmd@to@cs\string#1}%
+ \expandafter\cmd@to@index\string#1\@nil
+}%
+\def\cmd@to@cs#1#2{\char\number`#2\relax}%
+\def\cmd@to@index#1#2\@nil{%
+ \index{#2=\string\cmd#1#2}%\index{command>#2=\string\cmd#1#2}%
+}%
+\DeclareRobustCommand\cs[1]{{\ttfamily\char`\\#1}}%
+\def\scmd#1{%
+ \cs{\expandafter\cmd@to@cs\string#1}%
+ \expandafter\scmd@to@index\string#1\@nil
+}%
+\def\scmd@to@index#1#2\@nil#3{%
+ \index{\string$#3=\string\cmd#1#2---#3}%
+%\index{command>\string$#3=\string\cmd#1#2---#3}%
+}%
+\DeclareRobustCommand\env{\name@idx{environment}}%
+\DeclareRobustCommand\envb[1]{%
+ {\ttfamily\string\begin\string{}\env{#1}{\ttfamily\string}}%
+}%
+\DeclareRobustCommand\enve[1]{{\ttfamily\string\end\string{}\env{#1}{\ttfamily\string}}}%
+\DeclareRobustCommand*{\file}[1]{%
+ {\ttfamily#1}%
+ \index{#1=\string\ttt{#1}}\index{file>#1=\string\ttt{#1}}%
+}%
+\DeclareRobustCommand\substyle{\name@idx{document substyle}}%
+\DeclareRobustCommand\classoption{\name@idx{document class option}}%
+\DeclareRobustCommand\classname{\name@idx{document class}}%
+\def\name@idx#1#2{%
+ {\ttfamily#2}%
+ \index{#2\space#1=\string\ttt{#2}\space#1}\index{#1>#2=\string\ttt{#2}}%
+}%
+\DeclareRobustCommand\url@ltxdocext{\begingroup\catcode`\/\active\catcode`\.\active\catcode`\:\active\@url}%
+\AtBeginDocument{%
+ \ifx\url\undefined\let\url\url@ltxdocext\fi
+}%
+\def\@url#1{%
+ \url@break{\ttfamily#1}%
+ \url@char\edef\@tempa{#1=\string\url{#1}}%
+ \expandafter\index\expandafter{\@tempa}%
+ \expandafter\index\expandafter{\expandafter u\expandafter r\expandafter l\expandafter >\@tempa}%
+ \endgroup
+}%
+{\catcode`\:\active\aftergroup\def\aftergroup:}{\active@colon}%
+\def\colon@break{\colon@char\allowbreak}%
+\def\colon@char{:}%
+{\catcode`\/\active\aftergroup\def\aftergroup/}{\active@slash}%
+\def\slash@break{\slash@char\allowbreak}%
+\def\slash@char{/}%
+{\catcode`\.\active\aftergroup\def\aftergroup.}{\active@dot}%
+\def\dot@break{\dot@char\allowbreak}%
+\def\dot@char{.}%
+\def\url@break{\let\active@slash\slash@break\let\active@dot\dot@break\let\active@colon\colon@break}%
+\def\url@char{\let\active@slash\slash@char\let\active@dot\dot@char\let\active@colon\colon@char}%
+% \end{macrocode}
+%
+% \subsection{Changes to the base class of the ltxdoc class}
+% Modify \env{theindex} environment so that it produces a TOC entry
+% \begin{macrocode}
+\renewenvironment{theindex}
+ {\if@twocolumn
+ \@restonecolfalse
+ \else
+ \@restonecoltrue
+ \fi
+ \columnseprule \z@
+ \columnsep 35\p@
+\def\see##1##2{\textit{See} ##1}%
+\def\seealso##1##2{\textit{See also} ##1}%
+\def\cmd##1{\cs{\expandafter\cmd@to@cs\string##1}}%
+\def\@url##1{\url@break\ttt{##1}\endgroup}%
+\def\ttt##1{{\ttfamily##1}}%
+\mathchardef\save@secnumdepth\c@secnumdepth
+\c@secnumdepth\m@ne
+ \twocolumn[\section{\indexname}]%
+% \@mkboth{\MakeUppercase\indexname}%
+% {\MakeUppercase\indexname}%
+\c@secnumdepth\save@secnumdepth
+ \thispagestyle{plain}\parindent\z@
+ \parskip\z@ \@plus .3\p@\relax
+ \let\item\@idxitem}
+ {\if@restonecol\onecolumn\else\clearpage\fi}
+\renewenvironment{quote}
+ {\list{}{%
+ \leftmargin1em\relax
+ \rightmargin\leftmargin
+ }%
+ \item\relax}
+ {\endlist}
+% \end{macrocode}
+%
+% \subsection{Extensions to the base class of \classname{ltxdoc.cls}}
+%
+% Matter commands from \classname{book.cls}
+% \begin{macrocode}
+\newif\if@mainmatter
+\newif\if@openright
+\@openrighttrue
+\DeclareRobustCommand\frontmatter{%
+ \cleartorecto
+ \@mainmatterfalse
+ \pagenumbering{roman}%
+}%
+\DeclareRobustCommand\mainmatter{%
+ \cleartorecto
+ \@mainmattertrue
+ \pagenumbering{arabic}%
+}%
+\DeclareRobustCommand\backmatter{%
+ \if@openright
+ \cleartorecto
+ \else
+ \clearpage
+ \fi
+ \@mainmatterfalse
+}%
+\ifx\undefined\cleartorecto
+ \def\cleartorecto{\cleardoublepage}%
+\fi
+% \end{macrocode}
+%
+% Unnumbered tables
+%
+% \begin{environment}{unnumtable}
+% An unnumbered table does not float.
+% \begin{macrocode}
+\def\@to{to}%
+\newenvironment{unnumtable}{%
+ \par
+ \addpenalty\predisplaypenalty
+ \addvspace\abovedisplayskip
+ \hbox\@to\hsize\bgroup\hfil\ignorespaces
+ \let\@Hline\@empty
+}{%
+ \unskip\hfil\egroup
+ \penalty\postdisplaypenalty
+ \vskip\belowdisplayskip
+ \aftergroup\ignorespaces
+ \@endpetrue
+}%
+% \end{macrocode}
+% \end{environment}
+%
+% Emulate \cmd\toprule\ and friends
+% \begin{macrocode}
+\newcommand\toprule{\hline\hline}%
+\newcommand\colrule{\\\hline}%
+\newcommand\botrule{\\\hline\hline}%
+% \end{macrocode}
+%
+% Define sectioning command below \cmd\subsubsection.
+% \begin{macrocode}
+\DeclareRobustCommand\subsubsubsection{%
+ \@startsection{subsubsection}{4}%
+ {\z@}{-15\p@\@plus-5\p@\@minus-2\p@}%
+ {5\p@}{\normalfont\normalsize\itshape}%
+}%
+% \end{macrocode}
+%
+% \subsection{In lieu of \file{ltxdoc.cfg}}
+% We don't want everything to appear in the index
+% \begin{macrocode}
+\DoNotIndex{\',\.,\@M,\@@input,\@Alph,\@alph,\@addtoreset,\@arabic}
+\DoNotIndex{\@badmath,\@centercr,\@cite}
+\DoNotIndex{\@dotsep,\@empty,\@float,\@gobble,\@gobbletwo,\@ignoretrue}
+\DoNotIndex{\@input,\@ixpt,\@m,\@minus,\@mkboth}
+\DoNotIndex{\@ne,\@nil,\@nomath,\@plus,\roman,\@set@topoint}
+\DoNotIndex{\@tempboxa,\@tempcnta,\@tempdima,\@tempdimb}
+\DoNotIndex{\@tempswafalse,\@tempswatrue,\@viipt,\@viiipt,\@vipt}
+\DoNotIndex{\@vpt,\@warning,\@xiipt,\@xipt,\@xivpt,\@xpt,\@xviipt}
+\DoNotIndex{\@xxpt,\@xxvpt,\\,\ ,\addpenalty,\addtolength,\addvspace}
+\DoNotIndex{\advance,\ast,\begin,\begingroup,\bfseries,\bgroup,\box}
+\DoNotIndex{\bullet}
+\DoNotIndex{\cdot,\cite,\CodelineIndex,\cr,\day,\DeclareOption}
+\DoNotIndex{\def,\DisableCrossrefs,\divide,\DocInput,\documentclass}
+\DoNotIndex{\DoNotIndex,\egroup,\ifdim,\else,\fi,\em,\endtrivlist}
+\DoNotIndex{\EnableCrossrefs,\end,\end@dblfloat,\end@float,\endgroup}
+\DoNotIndex{\endlist,\everycr,\everypar,\ExecuteOptions,\expandafter}
+\DoNotIndex{\fbox}
+\DoNotIndex{\filedate,\filename,\fileversion,\fontsize,\framebox,\gdef}
+\DoNotIndex{\global,\halign,\hangindent,\hbox,\hfil,\hfill,\hrule}
+\DoNotIndex{\hsize,\hskip,\hspace,\hss,\if@tempswa,\ifcase,\or,\fi,\fi}
+\DoNotIndex{\ifhmode,\ifvmode,\ifnum,\iftrue,\ifx,\fi,\fi,\fi,\fi,\fi}
+\DoNotIndex{\input}
+\DoNotIndex{\jobname,\kern,\leavevmode,\let,\leftmark}
+\DoNotIndex{\list,\llap,\long,\m@ne,\m@th,\mark,\markboth,\markright}
+\DoNotIndex{\month,\newcommand,\newcounter,\newenvironment}
+\DoNotIndex{\NeedsTeXFormat,\newdimen}
+\DoNotIndex{\newlength,\newpage,\nobreak,\noindent,\null,\number}
+\DoNotIndex{\numberline,\OldMakeindex,\OnlyDescription,\p@}
+\DoNotIndex{\pagestyle,\par,\paragraph,\paragraphmark,\parfillskip}
+\DoNotIndex{\penalty,\PrintChanges,\PrintIndex,\ProcessOptions}
+\DoNotIndex{\protect,\ProvidesClass,\raggedbottom,\raggedright}
+\DoNotIndex{\refstepcounter,\relax,\renewcommand}
+\DoNotIndex{\rightmargin,\rightmark,\rightskip,\rlap,\rmfamily}
+\DoNotIndex{\secdef,\selectfont,\setbox,\setcounter,\setlength}
+\DoNotIndex{\settowidth,\sfcode,\skip,\sloppy,\slshape,\space}
+\DoNotIndex{\symbol,\the,\trivlist,\typeout,\tw@,\undefined,\uppercase}
+\DoNotIndex{\usecounter,\usefont,\usepackage,\vfil,\vfill,\viiipt}
+\DoNotIndex{\viipt,\vipt,\vskip,\vspace}
+\DoNotIndex{\wd,\xiipt,\year,\z@}
+\DoNotIndex{\next}
+% \end{macrocode}
+%
+% Direct \classname{ltxdoc} to produce an index.
+% \begin{macrocode}
+\AtEndDocument{\PrintIndex}%
+% \end{macrocode}
+%
+% \subsection{Extension to \LaTeX's \env{filecontents} Environment}
+% We want to
+% coax the version number into \env{filecontents}-generated files.
+% Note that we expect \cmd\fileversion\ and \cmd\filedate\ to
+% hold the needed information. For this to be the case,
+% your document should execute the \cmd\GetFileInfo\ command
+% (as documented in section~\ref{sec:GetFileInfo}) before
+% any instances of \env{filecontents}.
+% \begin{macrocode}
+\makeatletter
+\def\endfilecontents{%
+ \immediate\write\reserved@c{%
+ \string\iffalse\space ltxdoc klootch^^J%
+ \ifx\undefined\fileversion\else
+ \ifx\undefined\filedate\else
+ This file has version number \fileversion, last revised \filedate.%
+ \fi\fi
+ \string\fi
+ }%
+ \immediate\closeout\reserved@c
+ \def\T##1##2##3{%
+ \ifx##1\@undefined\else
+ \@latex@warning@no@line{##2 has been converted to Blank ##3e}%
+ \fi
+ }%
+ \T\L{Form Feed}{Lin}%
+ \T\I{Tab}{Spac}%
+ \immediate\write\@unused{}%
+}%
+\expandafter\let\csname endfilecontents*\endcsname\endfilecontents
+\makeatother
+% \end{macrocode}
+%
+% Alter formatting in arrays; set them tight.
+% \begin{macrocode}
+\setlength\arraycolsep{0pt}%
+% \end{macrocode}
+%
+% \subsection{End of the \file{extensions} {\sc docstrip} module}
+% Here ends the module.
+% \begin{macrocode}
+%</extensions>
+% \end{macrocode}
+%
+%
+% \section{Font Package for Acrobat Compatability}%
+% The package \classname{acrofont}
+% substitutes Acrobat-standard fonts for Computer Modern where possible,
+% even in math mode.
+% Documents typeset with this package in effect will require as little
+% downloaded font data as possible, but will not be exemplars of
+% fine math typesetting.
+%
+% \subsection{Beginning of the \file{fonts} {\sc docstrip} module}
+% The document class module comprises this and the next
+% four sections.
+% \begin{macro}{\class@base}
+% We define in exactly one spot the base class.
+% Typically that class will be one of \classname{book},
+% \classname{article}, or \classname{report}.
+% The base class effectively defines the use and the markup scheme
+% of the class of documents to be handled by this class.
+%
+% This class is a variant of the standard \LaTeX\ book class:
+% \url{ftp://ctan.tug.org/tex-archive/macros/latex/unpacked}.
+% \begin{macrocode}
+%<*fonts>
+\def\class@name{ltxdocext}%
+\expandafter\ClassInfo\expandafter{\class@name}{%
+ Written for \protect\LaTeXe\space
+ by A. Ogawa (ogawa@teleport.com)%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Variants on psfonts packages}%
+% The following uses \file{times.sty} from \url{/packages/psnfss/psfonts.dtx}
+% \begin{macrocode}
+\RequirePackage{times}%
+% \end{macrocode}
+%
+% The following uses \file{mathptm.sty} from \url{/packages/psnfss/psfonts.dtx}
+% \begin{macrocode}
+\RequirePackage{mathptm}%
+% \end{macrocode}
+%
+% The following is a customization of \file{ot1ptmcm.fd}.
+% The virtual font referred to here \file{zptmnocmr} is
+% a variant of Sebastian Rahtz's \file{zptmcmr}, but with
+% even more glyphs moved from CM to Acrobat-standard fonts.
+% \begin{macrocode}
+\DeclareFontFamily{OT1}{ptmcm}{}
+\DeclareFontShape{OT1}{ptmcm}{m}{n}{
+ <-> zptmnocmr
+}{}
+\DeclareFontShape{OT1}{ptmcm}{l}{n}{<->ssub * ptmnocm/m/n}{}
+% \end{macrocode}
+%
+% The following is a customization of \file{omlptmcm.fd}
+% The virtual font referred to here \file{zptmnocmrm} is
+% a variant of Sebastian Rahtz's \file{zptmcmrm}, but with
+% even more glyphs moved from CM to Acrobat-standard fonts.
+% \begin{macrocode}
+\DeclareFontFamily{OML}{ptmcm}{\skewchar \font =127}
+\DeclareFontShape{OML}{ptmcm}{m}{it}{
+ <-> zptmnocmrm
+}{}
+\DeclareFontShape{OML}{ptmcm}{l}{it}{<->ssub * ptmcm/m/it}{}
+\DeclareFontShape{OML}{ptmcm}{m}{sl}{<->ssub * ptmcm/m/it}{}
+\DeclareFontShape{OML}{ptmcm}{l}{sl}{<->ssub * ptmcm/m/sl}{}
+% \end{macrocode}
+%
+% The following is a customization of \file{omspzccm.fd}
+% The virtual font referred to here \file{zpzcnocmry} is
+% a variant of Sebastian Rahtz's \file{zpzccmry}, but with
+% even more glyphs moved from CM to Acrobat-standard fonts.
+% \begin{macrocode}
+\DeclareFontFamily{OMS}{pzccm}{}
+\DeclareFontShape{OMS}{pzccm}{m}{n}{
+ <-> zpzcnocmry
+}{}% cmsy10 Symbol Zapf Chancery Medium-Italic Times-Roman
+\DeclareFontShape{OMS}{pzccm}{l}{n}{<->ssub * pzccm/m/n}{}
+% \end{macrocode}
+%
+% The following is a customization of \file{omxpsycm.fd}
+% The virtual font referred to here \file{zpsynocmrv} is
+% a variant of Sebastian Rahtz's \file{zpsycmrv}, but with
+% even more glyphs moved from CM to Acrobat-standard fonts.
+% \begin{macrocode}
+\DeclareFontFamily{OMX}{psycm}{}
+\DeclareFontShape{OMX}{psycm}{m}{n}{
+ <-> zpsynocmrv
+}{}
+\DeclareFontShape{OMX}{psycm}{l}{n}{<->ssub * psycm/m/n}{}
+%
+\DeclareFontEncoding{8r}{}{}% from file: 8renc.def
+\DeclareFontFamily{8r}{cmr}{\hyphenchar\font45 }% from file: 8rcmr.fd
+\DeclareFontShape{8r}{cmr}{m}{n}{
+ <-> cmr10
+}{}
+% \end{macrocode}
+%
+% \subsection{Font definition files}%
+%
+% The following forces \LaTeX\ to do now what it would do anyway:
+% load the `font definition' information for the fonts that we
+% use. In this way, we prepare for faster processing through
+% the \cmd\dump\ of a preformatted macro package that will not
+% need to read in any packages or font definitions from disk.
+% \begin{macrocode}
+\input{8rphv.fd}%
+\input{8rptm.fd}%
+\input{ot1phv.fd}%
+\input{ot1ptm.fd}%
+\input{t1ptm.fd}%
+% \end{macrocode}
+%
+% \subsection{More math substitutions}%
+%
+% The following definitions arrange to get certain glyphs from the
+% text font instead of out of math pi fonts.
+% In particular, the copyright and registered symbols
+% are single glyphs instead of composites involving
+% the big circle from the \file{cmsy} font.
+% \begin{macrocode}
+ \def\eightRChar#1{{\def\encodingdefault{8r}\fontencoding\encodingdefault\selectfont\char"#1}}%
+ \def\LANGLE{$<$}%{\eightRChar{8B}}%
+ \def\RANGLE{$>$}%{\eightRChar{9B}}%
+%\def\ASTER{\eightRChar{2A}}%
+%\def\DAGGER{\eightRChar{86}}%
+%\def\DDAGGER{\eightRChar{87}}%
+ \def\BULLET{\eightRChar{95}}%
+%\def\SECTION{\eightRChar{A7}}%
+%\def\PARAGRAPH{\eightRChar{B6}}%
+ \def\VERTBAR{\eightRChar{7C}}%
+ \def\COPYRIGHT{\eightRChar{A9}}%
+ \def\REGISTERED{\eightRChar{AE}}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \def\textbar{\VERTBAR}%
+ \def\textbullet{\BULLET}%
+ \def\textcopyright{\COPYRIGHT}%
+ \def\textregistered{\REGISTERED}%
+% \end{macrocode}
+%
+% I have removed \cmd\ensuremath\ from the following definition, and
+% all commands like \cmd\mathsection have been converted to
+% e.g., \cmd\textsection.
+% \begin{macrocode}
+\def\@makefnmark{\@thefnmark}%
+\def\@fnsymbol#1{{\ifcase#1\or *\or \dagger\or \ddagger\or
+ \textsection\or \textparagraph\or \|\or **\or \dagger\dagger
+ \or \ddagger\ddagger \else\@ctrerr\fi}}
+% \end{macrocode}
+%
+% \subsection{End of the \file{fonts} {\sc docstrip} module}
+% Here ends the module.
+% \begin{macrocode}
+%</fonts>
+% \end{macrocode}
+%
+%
+% \section{Programming Conventions}%
+% In writing the above code, I cleave to certain conventions, noted
+% here.
+% My goal in explaining them is to encourage others maintaining this
+% body of code to consider following them as well.
+% The benefits are twofold:
+% Some of the coding conventions aim to avoid programming pitfalls;
+% following them reduces maintenance costs.
+% Others make the code easier to read; following these eases the
+% process of understanding how the code works.
+%
+% And, for my part, I prefer to read code of this type.
+%
+% \subsection{Whitespace Conventions}%
+% Exactly where code lines break and indent, and where additional
+% whitespace is inserted is explained here.
+% \begin{itemize}
+% \item
+% Each new macro definition or register assignment begins a new line.
+% Therefore, \cmd\def, \cmd\newcommand, and their ilk will start in column
+% 1.
+% \item
+% Code is indented one space for each level of nesting within braces
+% \verb|{}|.
+% \item
+% Likewise, if possible, for \cmd\if\dots and matching \cmd\fi.
+% \item
+% However, the closing brace or \cmd\fi\ is outdented by one so that it
+% falls
+% at the same level of indentation as its matching brace or \cmd\if,
+% and it appears alone on its line.
+% \item
+% Use of the |tab| character is deprecated
+% (tabs are not standardized across all applications and operating
+% systems).
+% \item
+% Lines of code are limited to 72 characters.
+% I follow this convention mostly to ease the transmission of files
+% via email (a deprecated practice) and to accomodate people with
+% small monitors.
+% But \classname{ltxdoc} output looks better with the shorter lines, too.
+% \item
+% Extraneous whitespace is avoided by using the comment character |%|.
+% In most cases, if falling at the end of a line of code,
+% a brace will be immediately followed by a comment character,
+% as will the macro parameter |#1| and any one-letter control sequence,
+% like |\\|.
+% \end{itemize}
+% These conventions taken together are illustrated by the following:
+% \begin{verbatim}
+%\def\prepdef#1#2{%
+% \@ifxundefined#1{\toks@{}}{\toks@\expandafter{#1}}%
+% \toks@ii{#2}%
+% \edef#1{\the\toks@ii\the\toks@}%
+%}%
+% \end{verbatim}
+% In the above, the definition of \cmd\prepdef\ would not fit on a single
+% line,
+% and required breaking. The first and last lines have matching braces,
+% and are a the same level of indentation, with the last line containing
+% a single brace.
+%
+% Each of the three intervening lines has balanced braces and is
+% indented by one space. Each line that would otherwise end in a single
+% brace character is terminated by a comment character.
+%
+% Some coders rely on the fact that a space character seen by \TeX's
+% scanner while in vertical mode is a no-op.
+% Be that as it may, I eliminate them unless actually intentional.
+%
+% \subsection{Conventions For Procedures}%
+% Here are some of my preferences when writing procedures:
+% \begin{itemize}
+%
+% \item
+% I dislike defining a macro within another macro, especially when the
+% pattern part is non-nil.
+% You know, you are not saving much space in |mem| when you do this,
+% right?
+% You do save space in the hash table and the string pool, though.
+% On the other hand, we are not dealing with small \TeX\ engines
+% anymore; Team \LaTeX\ has made sure of this.
+%
+% \item
+% If two or more macros have very similar replacement parts, consider
+% layering.
+%
+% \item
+% Macros may perform parsing, may maintain tokens or registers, or may
+% set type (produce marks). I try to avoid combining the three functions
+% in a single macro.
+%
+% \item
+% When a procedure both does assignments and sets type, I try to have a
+% clean separations between the two activities. Try to avoid:
+% \begin{verbatim}
+% \vskip10pt
+% \parindent=0pt
+% \leavevmode
+% \end{verbatim}
+%
+% \item
+% The Boolean calculus (cf. \cmd\@ifx)
+% is very useful and produces code that executes nicely.
+% Using it also helps avoid your having to debug problems where
+% \cmd\if\dots\ and \cmd\fi\ are not properly balanced
+% (a nightmare in case you didn't already experience it).
+%
+% \end{itemize}
+%
+% \subsection{Conventions For \LaTeX}%
+% Team \LaTeX\ make certain recommendations in \file{clsguide.tex}.
+% Ones that I particularly pay attention to are:
+% \begin{itemize}
+%
+% \item
+% For the sake of ``color safety'',
+% use \cmd\sbox\ rather than \cmd\setbox, \cmd\mbox\ rather than \cmd\hbox, and
+% \cmd\parbox\ or \env{minipage} rather than \cmd\vbox.
+%
+% \item
+% Use \cmd\newcommand\ and \cmd\newenvironment\ to declare user-level commands
+% and environments. Avoid the idiom \cmd\def\cmd\foo, \cmd\def\cmd\endfoo\ to define
+% an environment.
+% Ideally, all user-level markup could be extracted from the
+% document class by grepping on \cmd\newcommand\ and \cmd\newenvironment.
+%
+% \item
+% Prefer to use \cmd\setlength\ to assign registers.
+%
+% \end{itemize}
+% I cannot help but notice that much of the code of \LaTeX\ itself fails
+% to comply with many of the coding recommendations of Team \LaTeX.
+%
+%
+% \Finale
+% %Here ends the programmer's documentation.
+% \endinput
+%
+\endinput
diff --git a/obsolete/macros/latex/contrib/revtex4-0/src/ltxdocext.pdf b/obsolete/macros/latex/contrib/revtex4-0/src/ltxdocext.pdf
new file mode 100644
index 0000000000..666ac756d4
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-0/src/ltxdocext.pdf
Binary files differ
diff --git a/obsolete/macros/latex/contrib/revtex4-0/src/ltxgrid.dtx b/obsolete/macros/latex/contrib/revtex4-0/src/ltxgrid.dtx
new file mode 100644
index 0000000000..ab0209ed09
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-0/src/ltxgrid.dtx
@@ -0,0 +1,4815 @@
+% \iffalse ltxdoc klootch
+% ltxgrid.dtx: package to change page grid, MVL.
+% Copyright (c) 1999 Arthur Ogawa
+%
+% Disclaimer
+% This file is distributed WITHOUT ANY WARRANTY;
+% without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+% ReadMe
+% For the documentation and more detailed instructions for
+% installation, typeset this document with \LaTeX.
+% \fi
+% \GetFileInfo{ltxgrid.dtx}\CheckSum{4234}
+%
+% \iffalse ltxdoc klootch
+%<*ltxgrid>
+%%% @LaTeX-file{
+%%% filename = "ltxgrid.dtx",
+%%% version = "1.0rc5",
+%%% date = "2001/07/26",
+%%% time = "12:23:00 GMT+8",
+%%% checksum = "4234",
+%%% author = "Arthur Ogawa (mailto:ogawa@teleport.com),
+%%% commissioned by the American Physical Society.
+%%% ",
+%%% copyright = "Copyright (C) 1999, 2000 Arthur Ogawa,
+%%% distributed under the terms of the
+%%% LaTeX Project Public License, see
+%%% ftp://ctan.tug.org/macros/latex/base/lppl.txt
+%%% ",
+%%% address = "Arthur Ogawa,
+%%% USA",
+%%% telephone = "",
+%%% FAX = "",
+%%% email = "ogawa@teleport.com",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "latex, page grid, main vertical list",
+%%% supported = "yes",
+%%% abstract = "package to change page grid, MVL",
+%%% docstring = "The checksum field above generated by ltxdoc",
+%%% }
+%</ltxgrid>
+% \fi
+%
+% \iffalse ltxdoc klootch
+% The following references the \file{00readme.txt} file,
+% which contains basic information about this package.
+% The contents of this file are generated when
+% you typeset the programmer's documentation.
+% Search on "{filecontents*}{00readme.txt}" to locate it.
+% \fi\input{00readme.txt}%
+%
+% \subsection{Bill of Materials}
+%
+% Following is a list of the files in this distribution arranged
+% according to provenance.
+%
+% \subsubsection{Primary Source}%
+% One single file generates all.
+%\begin{verbatim}
+%ltxgrid.dtx
+%\end{verbatim}
+%
+% \subsubsection{Generated by \texttt{latex ltxgrid.dtx}}%
+% Typesetting the source file under \LaTeX\
+% generates the readme and the installer.
+%\begin{verbatim}
+%00readme.txt ltxgrid.ins
+%\end{verbatim}
+%
+% \subsubsection{Generated by \texttt{tex ltxgrid.ins}}%
+% Typesetting the installer generates
+% the package files.
+%\begin{verbatim}
+%ltxgrid.sty
+%\end{verbatim}
+%
+% \subsubsection{Documentation}%
+% The following are the online documentation:
+% \begin{verbatim}
+%ltxgrid.pdf
+% \end{verbatim}
+%
+% \subsubsection{Auxiliary}%
+% The following are auxiliary files generated
+% in the course of running \LaTeX:
+% \begin{verbatim}
+%ltxgrid.aux ltxgrid.idx ltxgrid.ind ltxgrid.log ltxgrid.toc
+% \end{verbatim}
+%
+% \section{Code common to all modules}%
+%
+% The following may look a bit klootchy, but we
+% want to require only one place in this file
+% where the version number is stated,
+% and we also want to ensure that the version
+% number is embedded into every generated file.
+%
+% Now we declare that
+% these files can only be used with \LaTeXe.
+% An appropriate message is displayed if
+% a different \TeX{} format is used.
+% \begin{macrocode}
+%<*doc|ltxgrid>
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]%
+%</doc|ltxgrid>
+% \end{macrocode}
+% As desired, the following modules all
+% take common version information:
+% \begin{macrocode}
+%<ltxgrid>\ProvidesFile{ltxgrid.sty}%
+%<*doc>
+\expandafter\ProvidesFile\expandafter{\jobname.dtx}%
+%</doc>
+% \end{macrocode}
+%
+% The following line contains, for once and for all,
+% the version and date information.
+% By various means, this information is reproduced
+% consistently in all generated files and in the
+% typeset documentation.
+% \begin{macrocode}
+%<*doc|ltxgrid>
+ [2001/07/26 1.0rc5 page grid package]% \fileversion
+%</doc|ltxgrid>
+% \end{macrocode}
+%
+%
+% \section{The driver module \texttt{doc}}
+%
+% This module, consisting of the present section,
+% typesets the programmer's documentation,
+% generating the \file{.ins} installer and \file{00readme.txt} as required.
+%
+% Because the only uncommented-out lines of code at the beginning of
+% this file constitute the \file{doc} module itself,
+% we can simply typeset the \file{.dtx} file directly,
+% and there is thus rarely any need to
+% generate the ``doc'' {\sc docstrip} module.
+% Module delimiters are nonetheless required so that
+% this code does not find its way into the other modules.
+%
+% The \enve{document} command concludes the typesetting run.
+%
+% \begin{macrocode}
+%<*doc>
+% \end{macrocode}
+%
+% \subsection{The Preamble}
+% The programmers documentation is formatted
+% with the \classname{ltxdoc} class with local customizations,
+% and with the usual code line indexing.
+% \begin{macrocode}
+\documentclass{ltxdoc}
+\RequirePackage{ltxdocext}%
+\RequirePackage[colorlinks=true,linkcolor=blue]{hyperref}%
+\ifx\package@font\@undefined\else
+ \expandafter\expandafter
+ \expandafter\RequirePackage
+ \expandafter\expandafter
+ \expandafter{%
+ \csname package@font\endcsname
+ }%
+\fi
+\CodelineIndex\EnableCrossrefs
+% \end{macrocode}
+%
+% \subsubsection{Docstrip and info directives}
+% We use so many {\sc docstrip} modules that we set the
+% \texttt{StandardModuleDepth} counter to 1.
+% \begin{macrocode}
+\setcounter{StandardModuleDepth}{1}
+% \end{macrocode}
+% The following command retrieves the date and version information
+% from this file.
+% \begin{macrocode}
+\expandafter\GetFileInfo\expandafter{\jobname.dtx}%
+% \end{macrocode}
+%
+%
+% \subsection{The installer file}
+%
+% The installer \file{ltxgrid.ins} appears here.
+% If you have retrieved the standard distribution of this package,
+% the installer file is already on your filesystem.
+% If you are bootstrapping,
+% the first typesetting of the \file{.dtx} file
+% will cause the installer to be generated.
+%
+% The following modules are used to direct
+% {\sc docstrip} in generating the external files:
+% \begin{center}
+% \begin{tabular}{lll}
+% \textbf{Module}&\textbf{File}&\textbf{Description}\\
+% doc &\file{ltxgrid.drv}&driver for programmer's documentation\\
+% ltxgrid,ltxgrid-krn &\file{ltxgrid.sty}&this package\\
+% ltxgrid-krn& &the portion of this package suitable for inclusion within another package
+% \end{tabular}
+% \end{center}
+%
+% \begin{macrocode}
+\begin{filecontents}{ltxgrid.ins}
+%% This file will generate documentation and runtime files
+%% from ltxgrid.dtx when run through LaTeX or TeX.
+\input docstrip
+\preamble
+
+This is a generated file;
+altering it directly is inadvisable;
+instead, modify the original source file.
+See the URL in the file 00readme.txt.
+
+Copyright notice.
+
+ These files are distributed
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+\endpreamble
+\keepsilent
+ \generate{%
+ \file{ltxgrid.drv}{\from{ltxgrid.dtx}{doc}}%
+ \file{ltxgrid.sty}{%
+ \from{ltxgrid.dtx}{ltxgrid,ltxgrid-krn}%
+ }%
+ }%
+\ifToplevel{
+\Msg{***********************************************************}
+\Msg{*}
+\Msg{* To finish the installation, please move}
+\Msg{* ltxgrid.sty}
+\Msg{* into a directory searched by TeX;}
+\Msg{* in a TDS-compliant installation:}
+\Msg{* texmf/tex/macros/latex/ao/.}
+\Msg{*}
+\Msg{* To produce the documentation,
+ run ltxgrid.dtx through LaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing}
+\Msg{***********************************************************}
+}
+\endbatchfile
+\end{filecontents}
+% \end{macrocode}
+% Note that, because all of the files generated by the installer
+% are part of the standard distribution, it will
+% be necessary to run the installer only when bootstrapping
+% (or, of course, during development).
+% Note, too, that it is rare to generate the \file{doc}
+% module because it suffices to simply typeset the \file{.dtx} file itself.
+%
+% \subsection{The ``Read Me'' File}
+% As promised above, here is the contents of the
+% ``Read Me'' file. That file serves a double purpose,
+% since it also constitutes the beginining of the
+% programmer's documentation. What better thing, after
+% all, to have appear at the beginning of the
+% typeset documentation?
+%
+% A good discussion of how to write a ReadMe file can be found in
+% Engst, Tonya, ``Writing a ReadMe File? Read This''
+% \emph{MacTech} October 1998, p. 58.
+%
+% Note the appearance of the
+% \cmd\StopEventually\ command, which marks the
+% dividing line between the user documentation
+% and the programmer documentation.
+%
+% The usual user will not be asked to
+% do a full build, not to speak
+% of the bootstrap.
+% Instructions for carrying these processes
+% begin the programmer's manual.
+%
+% \begin{macrocode}
+\begin{filecontents*}{00readme.txt}
+\title{%
+ A \LaTeX\ Package for changing the page grid and MVL%
+ \thanks{%
+ This file has version number \fileversion,
+ last revised \filedate.%
+ % For version number and date,
+ % search on "\fileversion" in the .dtx file,
+ % or see the end of the 00readme.txt file.
+ }%
+}%
+
+\author{%
+Arthur Ogawa (\texttt{mailto:ogawa@teleport.com}),
+\fileversion\\Copyright (C) 1999, 2000 Arthur Ogawa
+}%
+\maketitle
+
+This file embodies the \classname{ltxgrid} package,
+the implementation and its user documentation.
+
+The distribution point for this work is
+\url{ftp://ftp.teleport.com/users/ogawa/macros/latex/contrib/supported/ltxgrid...},
+which contains fully unpacked, prebuilt runtime files and documentation.
+
+The \classname{ltxgrid} package was commissioned by the American Physical Society
+and is distributed under the terms of the \LaTeX\ Project Public License,
+the same license under which all the portions of \LaTeX\ itself is distributed.
+Please see \url{http://ctan.tug.org/macros/latex/base/lppl.txt} for details.
+
+To use this document class, you must have a working
+\TeX\ installation equipped with \LaTeXe\
+and possibly pdftex and Adobe Acrobat Reader or equivalent.
+
+To install, retrieve the distribution,
+unpack it into a directory on the target computer,
+into a location in your filesystem where it will be found by \LaTeX;
+in a TDS-compliant installation this would be:
+\file{texmf/tex/macros/latex/ao/.}
+
+To use, read the user documentation \file{ltxgrid.pdf}.
+
+\tableofcontents
+
+\section{Processing Instructions}
+
+The package file \file{ltxgrid.sty}
+is generated from this file, \file{ltxgrid.dtx},
+using the {\sc docstrip} facility of \LaTeX
+via |tex ltxgrid.ins|.
+The typeset documentation that you are now reading is generated from
+the same file by typesetting it with \LaTeX\ or pdftex
+via |latex ltxgrid.dtx| or |pdflatex ltxgrid.dtx|.
+
+\subsection{Build Instructions}
+
+You may bootstrap this suite of files solely from \file{ltxgrid.dtx}.
+Prepare by installing \LaTeXe\ (and either tex or pdftex) on your computer,
+then carry out the following steps:
+\begin{enumerate}
+\item
+Within an otherwise empty directory,
+typeset \file{ltxgrid.dtx} with \LaTeX\ or pdflatex;
+you will obtain the typeset documentation you are now reading,
+along with
+the installer \file{ltxgrid.ins},
+and the file \file{00readme.txt}.
+
+Note: you will have to run \LaTeX\ twice, then \file{makeindex}, then
+\LaTeX\ again in order to obtain a valid index and table of contents.
+\item
+Now typeset \file{ltxgrid.ins},
+thereby generating the package file \file{ltxgrid.sty}.
+\item
+Install \classname{ltxgrid.sty}
+by moving it to a location
+in your filesystem where they will be found by \LaTeX.
+\end{enumerate}
+\end{filecontents*}
+% \end{macrocode}
+%
+% \subsection{The Document Body}
+%
+% Here is the document body, containing only a
+% \cmd\DocInput\ directive---referring to this very file.
+% This very cute self-reference is a common \classname{ltxdoc} idiom.
+% \begin{macrocode}
+\begin{document}%
+\expandafter\DocInput\expandafter{\jobname.dtx}%
+% ^^A\PrintChanges
+\end{document}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</doc>
+% \end{macrocode}
+%
+% \section{Using this package}
+% Once this package is installed on your filesystem, you can employ it in
+% adding functionality to \LaTeX\ by invoking it in your document or document class.
+%
+% \subsection{Invoking the package}
+% In your document, you can simply call it up in your preamble:
+% \begin{verbatim}
+%\documentclass{book}%
+%\usepackage{ltxgrid}%
+%\begin{document}
+%<your document here>
+%\end{document}
+% \end{verbatim}
+% However, the preferred way is to invoke this package from within your
+% customized document class:
+% \begin{verbatim}
+%\NeedsTeXFormat{LaTeX2e}[1995/12/01]%
+%\ProvidesClass{myclass}%
+%\LoadClass{book}%
+%\RequirePackage{ltxgrid}%
+%<class customization commands>
+%\endinput
+% \end{verbatim}
+%
+% Note that this package requires the features of the \classname{ltxutil} package,
+% available at
+% \url{ftp://ftp.teleport.com/users/ogawa/macros/latex/contrib/supported/ltxutil/}.
+%
+% Once loaded, the package gives you acccess to certain procedures,
+% usually to be invoked by a \LaTeX\ command or environment, but not at the document level.
+%
+% \subsection{Changing the page grid}%
+% This package provides two procedures, \cmd\onecolumngrid, \cmd\twocolumngrid,
+% that change the page grid (it can be extended to more columns and to other page grids).
+%
+% They differ from standard \LaTeX's \cmd\onecolumn\ and \cmd\twocolumn\ commands in that
+% they do not force a page break. Also, upon leaving a multiple-column grid, the columns are balanced.
+% In other respects they work same.
+%
+% They differ from the grid-changing commands of Frank Mittelbach's \classname{multicol} package
+% in that they allow floats of all types (single- and double column floats, that is) and
+% preserve compatability with the \classname{longtable} package.
+%
+% These commands must be issued in vertical mode (conceivably via a \cmd\vadjust) such that
+% they are ultimately present in the MVL, where they can do their work.
+% Because they do not work in \LaTeX's left-right mode, they are unsuitable at the
+% document level.
+% Furthermore, packaging a grid command in a \cmd\vadjust, although possible, will probably
+% not acheive satisfactory page layout.
+%
+% Page grid commands are not intended to be issued unnecessarily: only the first of
+% two successive \cmd\onecolumngrid\ commands is effective; the second will be silently ignored.
+%
+% \DescribeMacro\onecolumngrid
+% You command \LaTeX\ to return to the one-column grid with the
+% \cmd\onecolumngrid\ command. If you are already in the one-column grid, this
+% is a no-op. The one-column grid is considered special of all page grids, in that
+% no portion of the page is held back (in \cmd\pagesofar); all items that might go
+% on the current page (with the exception of floats and footnotes) are on the MVL.
+%
+% \DescribeMacro\twocolumngrid
+% You command \LaTeX\ to return to the two-column grid with the
+% \cmd\twocolumngrid\ command. If you are already in the two-column grid, this
+% is a no-op.
+%
+% These two commands should be issued by a macro procedure that can ensure that
+% \TeX\ is in outer vertical mode.
+%
+% \subsection{Changing the MVL}%
+%
+% This package also provides commands to modify the main vertical list (MVL) in a safe way.
+% The scheme here is to structure, insofar possible, \TeX's MVL as follows:
+%\begin{quotation}
+%box or boxes\\
+%penalty\\
+%glue
+%\end{quotation}
+% This should be a familiar sequence. It is the prototype sequence for a vertical list,
+% and is followed when \TeX\ breaks paragraphs into lines, and when \TeX\ generates
+% a display math equation.
+%
+% If you (as a macro programmer) wish to modify the value of the penalty or glue item,
+% you can use one of the MVL-altering commands to do so. Certain operations are implemented
+% here; you can make up your own.
+%
+% Note that these commands must be issued in vertical mode, perhaps via a \cmd\vadjust\ or a \cmd\noalign.
+% They can work directly if you are in inner mode (say within a parbox or a minipage).
+%
+% \DescribeMacro\removestuff
+% You instruct \LaTeX\ to remove both the penalty and the glue item with this command.
+%
+% \DescribeMacro\addstuff
+% You issue the \cmd\addstuff\arg{penalty}\arg{glue} command to add a penalty, glue, or both.
+% If you do not wish to add one or the other, the corresponding argument should be nil.
+% Note that the effect of \cmd\addstuff\ is to stack the penalties and glue items.
+% Therefore, the lesser of the two penalties takes effect,
+% and the two glue items add together.
+%
+% \cmd\addstuff\ is limited because once applied, it cannot be applied again with correct results.
+%
+% \DescribeMacro\replacestuff
+% The \cmd\replacestuff\ command is syntactically the same as \cmd\addstuff, but works
+% differently: the existing penalty and glue are replaced or modified.
+%
+% The specified penalty is not inserted if the existing penalty is greater than 10000
+% (that is, in case of a \cmd\nobreak), otherwise, the lower (non-zero) of the two penalties is inserted.
+%
+% If the specified glue has a larger natural component than the existing glue, we replace the glue.
+% However, if the specified glue's natural component is negative, then the existing glue's natural component is
+% changed by that amount.
+%
+% \cmd\replacestuff\ can be applied mutiple times bceause it retains the list structure in the canonical form.
+%
+% Note that we treat two penalties specially (as does \TeX): a penalty of 10000 is considered
+% a garbage value, to be replaced if found. This is the signal value that \TeX\ inserts on
+% the MVL replacing the penalty that caused the page break (if the page break occurred at a penalty).
+% Also, a penalty of zero is indistinguishable from no penalty at all, so it will always
+% be replaced by the given value.
+%
+% Therefore, it is highly recommended to never set any of \TeX's penalty parameters to
+% zero (a value of, say, 1, is practically the same), nor should a skip parameter be set to zero
+% (instead, use, say, 1sp). Also, to prevent a pagebreak, do not use a penalty of 10000, use, say
+% 10001 instead.
+%
+% You can define your own construct that modifies the MVL:
+% Define a command, say, \cmd\myadjust, as follows:
+%\begin{verbatim}
+%\def\myadjust#1{\noexpand\do@main@vlist{\noexpand\@myadjust{#1}}\@tempa}%
+%\end{verbatim}
+% that is, \cmd\myadjust\ invokes \cmd\do@main@vlist, passing it the procedure name
+% \cmd\@myadjust\ along with the arguments thereof pre-expanded.
+% Next, define the procedure \cmd\@myadjust:
+%\begin{verbatim}
+%\def\@myadjust#1{<meddle with the MVL>}%
+%\end{verbatim}
+% when \cmd\@myadjust\ executes, you will be in the output routine (in inner vertical mode)
+% and the MVL will be that very vertical list.
+%
+%
+%
+%
+% \section{Compatability with \LaTeX's Required Packages}
+% Certain packages, usually ones written by members of the
+% \LaTeX\ Project itself, have been designated ``required'' and
+% are distributed as part of standard \LaTeX.
+% These packages have been placed in a priviledged position
+% vis \'a vis the \LaTeX\ kernel in that they override the definitions of certain kernel macros.
+%
+% Compatability between \classname{ltxgrid} and these packages is complicated
+% by a number of factors. First is that \classname{ltxgrid} alters the meaning of some of the same
+% kernel macros as certain of the ``required'' packages.
+% Second is that fact that certain of the ``required'' packages of \LaTeX\ are incompatible with
+% each other.
+%
+% Examples of the first kind are the \classname{ftnright}, \classname{multicol}, and \classname{longtable}
+% packages.
+% The \classname{ltxgrid} package is not compatible with \classname{multicol},
+% but if you are using \classname{ltxgrid}, you do not need to use \classname{ftnright} or \classname{multicol}
+% anyway. The \classname{ltxgrid} package does however attempt to be compatible with \classname{longtable}.
+%
+% Among the ``required'' packages that are mutually incompatible are \classname{multicol} and \classname{longtable},
+% the incompatibility arising because both packages replace \LaTeX's output routine:
+% if one package is active, the other must not be so.
+% This state of affairs has remained essentially unchanged since the introduction of the two as \LaTeX2.09 packages in the late 1980s.
+%
+% The reason that \classname{ltxgrid} can remain compatible with \classname{longtable} is due to the
+% introduction of a more modern architecture, the ``output routine dispatcher'', which allows all macro packages access to the
+% safe processing environment of the output routine, on an equal footing.
+% The relevant portions of the \classname{longtable} package are reimplemented in \classname{ltxgrid}
+% to take advantage of this mechanism.
+%
+% Timing is critical:
+% the \classname{ltxgrid} package will be incompatible with any package that
+% redefines any of the kernel macros that \classname{ltxgrid} patches---if that
+% package is loaded \emph{after} \classname{ltxgrid}.
+%
+% Hereinafter follows some notes on specific \LaTeX\ packages.
+%
+% \subsection{ftnright}
+% Frank Mittelbach's \classname{ftnright} package effects a change to \LaTeX's
+% \cmd\twocolumn\ mode such that footnotes are set at the bottom of the right-hand
+% column instead of at the foot of each of the two columns.
+%
+% Note that it overwrites three \LaTeX\ kernel macros: \cmd\@outputdblcol, \cmd\@startcolumn, and \cmd\@makecol.
+% Fortunately none of the three are patched by \classname{ltxgrid}, so that compatability
+% is not excluded on this basis.
+%
+% At the same time, it changes the meaning of \cmd\footnotesize, the macro that is automatically
+% invoked when setting a document's footnote into type.
+% One might well argue that it is an error for the meaning of \cmd\footnotesize\ to be determined by
+% a package such as \classname{ftnright}, that indeed such a choice should be made in the
+% document class, or in a file such as \file{bk10.clo}.
+%
+% To avoid being tripped up by this misfeature in \classname{ftnright}, it is only necessary to
+% reassert our meaning for \cmd\footnotesize\ later on, after \classname{ftnright} has been loaded.
+%
+% Note that \classname{ftnright} inserts code that demands that \LaTeX's flag \cmd\if@twocolumn\
+% is true, that is, it will complain if deployed in a \cmd\onecolumn\ document.
+% It is therefore necessary for any other multicolumn package to assert that flag in order to
+% avoid this package's complaint. It is an interesting question exactly why this package has
+% this limitation. After all, a one-column page grid is just a degenerate case of the
+% two column.
+%
+% \subsection{longtable}
+% David Carlisle's \classname{longtable} package sets tables that can be so long as to break over pages.
+% According to its author, it uses the same override of \LaTeX's output routine as
+% Frank Mittelbach's \classname{multicol} package. By implication, then, it has a hard
+% incompatability with the latter.
+%
+% The \classname{longtable} package also performs a check of whether the document is in
+% \cmd\twocolumn\ mode, and declines to work if this is the case. It is not clear, however,
+% that there is any true incompatability present if so. It's just that David did not see any reason
+% anyone would want to set such long tables in a multicolumn document, hence the check.
+%
+% There does not appear to be any indication that \classname{longtable} would work less
+% well under \classname{ltxgrid} than under standard \LaTeX's \cmd\twocolumn\ mode.
+% Therefore, this \classname{ltxgrid} patches \classname{longtable} (if loaded) so as to provide
+% compatability. In the course of which, \classname{longtable} becomes more robust
+% (\classname{longtable} has mumerous bugs and incompatabilities of long standing,
+% some of which are repaired by \classname{ltxgrid}).
+%
+% One problem remains, namely that, if a \env{longtable} environment breaks over columns
+% and thereby inserts its special headers and footers at that break, and those columms are then
+% balanced (due to a return to the one-column page grid), then those inserted rows
+% will remain, and may no longer fall at the column break. This will, of course look
+% wrong.
+%
+% The only way to fix this problem is to avoid doing column balancing in the way
+% I have implemented here; such an enhancement to this package is possible.
+%
+% \subsection{multicol}
+% Frank Mittelbach's \classname{multicol} package provides a page grid with many columns,
+% albeit denies the placement of floats in individual columns.
+%
+% It esablishes its own \cmd\output\ routine, which is the reason it runs afoul of
+% the \classname{longtable} package. On the other hand, \classname{ltxgrid} specifically
+% allows for the case where a package installs its own \cmd\output\ routine, so
+% there is no incompatability on that basis.
+%
+% Still, it is pointless to use \classname{multicol} if you are using \classname{ltxgrid},
+% since both packages provide multicolumn page layouts.
+% Therefore, \classname{multicol} is not supported by \classname{ltxgrid}.
+%
+% \subsection{ltxgrid}
+% It has been pointed out that one of the disadvantages of adopting the \classname{ltxgrid} package is that
+% it does alter the \LaTeX\ kernel.
+% Any package that itself alters the \LaTeX\ kernel may be incompatible with \classname{ltxgrid}, and new packages
+% (destined perhaps to become part of the successor to \LaTeXe) may break \classname{ltxgrid}.
+%
+% The consequence is that packages introduced in future, and future changes to \LaTeX\ may be incompatible
+% with \classname{ltxgrid}.
+% This is, of course, true.
+% The development plan for \classname{ltxgrid} is that when such packages and \LaTeX\ kernel changes come about,
+% the burden will be on \classname{ltxgrid} to change in a way that provides for continued compatability with
+% those packages and \LaTeX\ kernel changes.
+%
+%
+% \section{How \classname{ltxgrid} places footnotes}
+%
+% In conventional multicolumn layouts, a footnote will appear at the bottom of the column in which it is called out.
+% The \classname{ltxgrid} package implements this conventional layout choice by default.
+% However, other choices are possible (a la \classname{ftnright}, whose compatability with \classname{ltxgrid} has not been tested).
+%
+% One unusual feature of \classname{ltxgrid}'s default implementation must be mentioned, though,
+% namely the case in a two-column page grid, where a footnote is followed by a temporary change to the one-column page grid
+% (e.g., for a wide equation).
+% In such a case, the material above the wide material is split into two columns, and a footnote whose callout
+% appears in the right-hand column will nonetheless be set at the base of the left column.
+%
+% This arrangement was chosen because it ensures that the footnotes at the bottom of any page will appear in
+% numerical order. It can be argued that this choice is ``incorrect'', but be that as it may,
+% the \classname{ltxgrid} package does not foreclose on other arrangements for the footnotes.
+% The package can be adapted to accomodate any page design desired.
+%
+% \section{Limitations in \classname{ltxgrid}'s default column balancing method}%
+%
+% In a multicolumn page grid, when encountering a page that is not completely full,
+% it is customary to set the material in balanced columns (typically with the last column no longer than any of the others).
+% Such a case also crops up when temporarily interrupting the multicolumn grid to set material on the full width of the page:
+% the material on the page above the break is customarily set in balanced columns.
+%
+% An awkward case arises when we have already set one or more complete columns of type before encountering the need to
+% balance columns. In this subset of cases, the default in \classname{ltxgrid} is to
+% do an operation I call ``re-balancing'':
+% the material on the page so far is pasted back together into a single column, and new, balanced column breaks are
+% calculated.
+%
+% This scheme typically works fine, but it has a significant vulnerability:
+% any discardable items trimmed at the original column break is lost, never to be retrieved.
+% Consequently, after re-balancing, an element like, say, a section head can fail to have the correct amount of whitespace above.
+%
+% This problem is due to an unfortunate optimization in \TeX, wherein a certain class of nodes is trimmed from the
+% top of main vertical list upon returning from the output routine:
+% any penalty, glue, or leader node falls in to this class of discardable nodes,
+% and trimming proceeds until a non-discardable node (such as a box, or rule) is encountered.
+% It gets better: a third class of nodes is transparent to this trimming process;
+% they are neither discarded nor do they halt the process of trimming:
+% mark nodes and all whatsits fall into this class of transparent nodes;
+% they are quietly passed over during trimming.
+%
+% An alternative approach for \TeX\ to take would have been,
+% rather than discarding the node entirely, to simply mark it as discarded.
+% (Implementors of NTS, please note!)
+% Then, upon shipping out, such nodes would not make it into the DVI.
+% \TeX's optimization, driven by the small computer architectures current when it was developed,
+% does save mem, but at the cost of revisiting page breaks in a reliable way.
+%
+% FIXME: how to fix a column break in the above case? Widetext?
+%
+%\StopEventually{}
+%
+% \section{Implementation of package}
+%
+% Special acknowledgment: this package uses concepts pioneered
+% and first realized by William Baxter (mailto:web@superscript.com)
+% in his SuperScript line of commercial typesetting tools, and
+% which are used here with his permission. His thorough understanding
+% of \TeX's output routine underpins the entire \classname{ltxgrid}
+% package.
+%
+% \subsection{Beginning of the \file{ltxgrid} {\sc docstrip} module}
+% Requires the underpinnings of the \classname{ltxkrnext} package.
+% \begin{macrocode}
+%<*ltxgrid>
+\def\package@name{ltxgrid}%
+\expandafter\PackageInfo\expandafter{\package@name}{%
+ Page grid for \protect\LaTeXe,
+ by A. Ogawa (ogawa@teleport.com)%
+}%
+\RequirePackage{ltxutil}%
+%</ltxgrid>
+% \end{macrocode}
+%
+% \subsection{Banner}%
+% Credit where due.
+% \begin{macrocode}
+%<*ltxgrid-krn>
+\typeout{%
+ ltxgrid: portions licensed from W. E. Baxter (web@superscript.com)%
+}%
+% \end{macrocode}
+%
+% \subsection{Sundry}%
+% Here are assorted macro definitions.
+% \begin{macro}{\lineloop}
+% The document-level command \cmd\lineloop\ sets numbered lines until the
+% specified count is reached.
+% This command is mainly used to construct test documents.
+% \begin{macrocode}
+\newcounter{linecount}
+\def\lineloop#1{%
+ \loop
+ \ifnum\c@linecount<#1\relax
+ \global\advance\c@linecount\@ne
+ \par
+ \hb@xt@\hsize{%
+ \ifnum\c@linecount<100 0\fi\ifnum\c@linecount<10 0\fi\number\c@linecount
+ \vrule depth2.5\p@
+ \leaders\hrule\hfil
+ }%
+ \penalty\interlinepenalty
+ \repeat
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Mark Components}%
+%
+% Override LaTeX's mark macros to allow more components.
+%
+% We remain bound by the weakness of LaTeX's scheme in that
+% one cannot emulate the action of \TeX\ whereby
+% material with marks can be inserted in the middle of
+% a vertical list such that the marks are reliably calculated.
+% If we did that, \cmd\@themark\ would no longer be utilized.
+%
+% A more robust scheme involves placing all marks (component and value)
+% into a list (using global scoping, i.e., \cmd\gdef),
+% and using \cmd\@@mark to place an index on that list into the MVL.
+% Then, e.g., \cmd\@@botmark signifies the place where that list is to be cut,
+% and the \cmd\botmark\ of any component is
+% the value of the last element of the cut
+% list having the given component. The \cmd\firstmark\ and \cmd\topmark\
+% can likewise be defined relative to \cmd\@@firstmark\ and \cmd\@@topmark,
+% except in the latter case, we want the first following the cut instead of the last
+% preceding the cut.
+%
+% The limitation of this scheme is its demands upon \TeX's mem.
+% The list of marks would need to be trimmed back to, effectively,
+% \cmd\topmark\ at the beginning of every page.
+%
+% This approach is not yet part of the extended LaTeX kernel.
+%
+% \begin{macro}{\@@mark}
+% \begin{macro}{\@@topmark}
+% \begin{macro}{\@@firstmark}
+% \begin{macro}{\@@botmark}
+% \begin{macro}{\@@splitfirstmark}
+% \begin{macro}{\@@splitbotmark}
+% Remember primitives under a new set of names.
+% \begin{macrocode}
+\let\@@mark\mark
+\let\@@topmark\topmark
+\let\@@firstmark\firstmark
+\let\@@botmark\botmark
+\let\@@splitfirstmark\splitfirstmark
+\let\@@splitbotmark\splitbotmark
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Procedures that expose the component data structure}%
+% This portion of the code exposes the internal representation of
+% the mark components. If we wish to add more components, we will have to revise
+% these macro definitions:
+% \cmd\@themark,
+% \cmd\nul@mark,
+% \cmd\set@mark@netw@,
+% \cmd\set@marktw@,
+% \cmd\set@markthr@@,
+% \cmd\get@mark@@ne,
+% \cmd\get@mark@tw@,
+% \cmd\get@mark@thr@@,
+% \cmd\get@mark@f@ur.
+%
+% \begin{macro}{\@themark}
+%FIXME: is it safer to eliminate \cmd\@themark\ in favor of a message that evaluates \cmd\@@botmark?
+%
+% Note: these definitions expose the data structure of mark components.
+% \begin{macrocode}
+\def\@themark{{}{}{}{}}%
+\def\nul@mark{{}{}{}{}\@@nul}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\set@mark@netw@}
+% \begin{macro}{\set@marktw@}
+% \begin{macro}{\set@markthr@@}
+% These procedures insert the new value of a particular mark component into the given argument.
+% They expose the data structure of mark components.
+%
+% \begin{macrocode}
+\def\set@mark@netw@#1#2#3#4#5#6#7{\gdef#1{{#6}{#7}{#4}{#5}}\do@mark}%
+\def\set@marktw@#1#2#3#4#5#6{\gdef#1{{#2}{#6}{#4}{#5}}\do@mark}%
+\def\set@markthr@@#1#2#3#4#5#6{\gdef#1{{#2}{#3}{#6}{#5}}\do@mark}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\get@mark@@ne}
+% \begin{macro}{\get@mark@tw@}
+% \begin{macro}{\get@mark@thr@@}
+% \begin{macro}{\get@mark@f@ur}
+% These procedures retreive the value of a particular mark component.
+% They expose the data structure of mark components.
+% \begin{macrocode}
+\def\get@mark@@ne#1#2#3#4#5\@@nul{#1}%
+\def\get@mark@tw@#1#2#3#4#5\@@nul{#2}%
+\def\get@mark@thr@@#1#2#3#4#5\@@nul{#3}%
+\def\get@mark@f@ur#1#2#3#4#5\@@nul{#4}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{Procedures that do not expose the component data structure}%
+%
+% \begin{macro}{\mark@netw@}
+% \begin{macro}{\marktw@}
+% \begin{macro}{\markthr@@}
+% These procedures insert the new value of a particular mark component into \cmd\@themark,
+% then execute \cmd\do@mark.
+% They constitute the implementation layer for mark components one, two, and three.
+% An analogous procedure for component four could be defined; call it \cmd\markf@ur.
+%
+% \begin{macrocode}
+\def\mark@netw@{\expandafter\set@mark@netw@\expandafter\@themark\@themark}%
+\def\marktw@{\expandafter\set@marktw@\expandafter\@themark\@themark}%
+\def\markthr@@{\expandafter\set@markthr@@\expandafter\@themark\@themark}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\do@mark}
+% \begin{macro}{\do@@mark}
+% Access procedures \cmd\mark (AKA \cmd\@@mark).
+% The \cmd\do@mark\ procedure is used when a mark is being put down into the MVL;
+% \cmd\do@@mark\ when this happens in the output routine.
+% \begin{macrocode}
+\def\do@mark{\do@@mark\@themark\nobreak@mark}%
+\def\do@@mark#1{%
+ \begingroup
+ \let@mark
+ \@@mark{#1}%
+ \endgroup
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\let@mark}
+% \begin{macro}{\nobreak@mark}%
+% The procedure that makes \cmd\csname s robust within a mark.
+% Use \cmd\appdef\ and \cmd\robust@\ to extend the list.
+% \begin{macrocode}
+\def\let@mark{%
+ \let\protect\@unexpandable@protect
+ \let\label\relax
+ \let\index\relax
+ \let\glossary\relax
+}%
+\def\nobreak@mark{%
+ \@if@sw\if@nobreak\fi{\@ifvmode{\nobreak}{}}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{Using mark components}%
+%
+% These procedures use the component mark mechanism to implement
+% a mark component that remembers the current environment (used in page makeup)
+% and the the two mark components left over from the original \LaTeX.
+% The fourth component is presently unused.
+%
+% \begin{macro}{\mark@envir}
+% The third mark component's access procedures.
+% The \cmd\mark@envir\ and \cmd\bot@envir\ commands are a good model of how to write
+% access procedures for a new mark component.
+% \begin{macrocode}
+\def\mark@envir{\markthr@@}%
+\def\bot@envir{%
+ \expandafter\expandafter
+ \expandafter\get@mark@thr@@
+ \expandafter\@@botmark
+ \nul@mark
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\markboth}
+% \begin{macro}{\markright}
+% \begin{macro}{\leftmark}
+% \begin{macro}{\rightmark}
+% Set procedures for legacy components.
+% \begin{macrocode}
+\def\markboth{\mark@netw@}%
+\def\markright{\marktw@}%
+% \end{macrocode}
+%
+% Retrieval procedures for legacy mark components.
+% The procedure for retrieving the first component from \cmd\botmark\
+% and the second component from \cmd\firstmark have names in \LaTeX;
+% they are called, respectively, \cmd\leftmark\ and \cmd\rightmark.
+%
+% It is possible to retrieve the components of \cmd\topmark\
+% as well: use \cmd\saved@@topmark.
+% \begin{macrocode}
+\def\leftmark{%
+ \expandafter\expandafter
+ \expandafter\get@mark@@ne
+ \expandafter\saved@@botmark
+ \nul@mark
+}%
+\def\rightmark{%
+ \expandafter\expandafter
+ \expandafter\get@mark@tw@
+ \expandafter\saved@@firstmark
+ \nul@mark
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+% \subsection{Output Super-routine}%
+%
+% We want to change \LaTeX's output routine, but do not wish to remain vulnerable
+% to interference from such ``required'' packages as
+% \classname{multicol} (authored by Frank Mittelbach)
+% and \classname{longtable} (authored by David P. Carlisle), which
+% swap in their own output routines when the respective package is active.
+%
+% The better mechanism, used here, is due to William Baxter (web@superscript.com),
+% who has allowed his several ideas to be used in this package.
+%
+% In what follows, we effectively wrap up the old \LaTeX\ output routine inside
+% a new, more flexible ``super routine''. When the output routine is called,
+% the ``super routine'' acts as a dispatcher. If the old routine is needed, it is called.
+%
+% If a package attempts to substitute in their own output routine, they will effectively
+% be modifying a token register by the name of \cmd\output.
+% The primitive \cmd\output\ is now known by a different name, which should no longer be
+% necessary to use.
+%
+% Usage note: to make a visit to the output routine employing the dispatcher, enter
+% with a value of \cmd\outputpenalty\ that corresponds to a macro. Defining as follows:
+%\begin{verbatim}
+%\@namedef{output@10000}{<your code here>}%
+%\end{verbatim}
+% by convention, your output routine should void out \cmd\box\cmd\@cclv.
+%
+% In rewriting \LaTeX's output dispatcher
+% in a much simpler form, we also avoid the sin of multiple \cmd\shipout s
+% within a single visit to the output routine.
+%
+% Conceptually, we divide visits to the output routine into two classes.
+% The first involves natural page breaks
+% (at a \cmd\newpage\ or when \cmd\pagetotal $>$ \cmd\pagegoal)
+% and usually resulting in \cmd\box\cmd\@cclv\ either being shipped out or
+% salted away (e.g., each column in a multicolumn layout).
+% We might call this class the ``natural output routines''; the \cmd\outputpenalty\
+% will never be less than $-10000$.
+% Furthermore, we ensure that \cmd\holdinginserts\ is cleared when
+% calling such routines.
+%
+% The other class involves a forced visit to the output routine
+% via a large negative penalty ($< -10000$). They do not generally
+% result in a \cmd\shipout\ of \cmd\box\cmd\@cclv: they may be dead cycles.
+% We provide a mechanism (call it a ``one-off'' output routine) that allows
+% us to specify certain processing to be done when \TeX\ reaches
+% the current position on the page.
+%
+% One-off output routines themselves fall into two divisions, ones
+% that process \cmd\box\cmd\@cclv, and ones that work on the main vertical list (MVL).
+% The former are typified by changes to the page grid, perhaps
+% even column balancing.
+% The latter involve the insertion of penalties or glue and the processing of floats.
+%
+% The natural output routine is a single procedure. We have not introduced multiple
+% natural output routines based on the \cmd\outputpenalty\ because \TeX\ does not
+% support such a thing: \TeX\ sometimes lays down a penalty whose value is the sum
+% of other penalties. Because of this, we cannot depend on the value of \cmd\outputpenalty\
+% in such areas.
+%
+% We do introduce flexibility in the form of a mechanism for patching into the
+% natural output routine. Three hooks are offered, allowing a procedure
+% to prepare for the upcoming visit to the output routine,
+% access to \cmd\box\cmd\@cclv, and after shipping out (or otherwise
+% committing the material to the page).
+%
+% Environments, commands, and even packages can install their
+% own procedures into these hooks.
+% For instance, if the longtable package is loaded, it will install
+% its procedures, but those procedures will punt if the page break
+% being processed does not actually fall within a longtable environment.
+%
+% \begin{macro}{\primitive@output}
+% Here we remember the \TeX\ primitive \cmd\output\ and its value,
+% and then proceed to take over the \cmd\csname\ of \cmd\output,
+% making it a \cmd\toks\ register and installing the old value of
+% the output routine.
+% \begin{macrocode}
+\let\primitive@output\output
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\output}
+% Grab the tokens in \cmd\the\cmd\output\ (but without the extra set of braces).
+% The value of \cmd\toks@\ must remain untouched until loaded into the appropriate token
+% register; this is done a few lines below.
+% \begin{macrocode}
+\long\def\@tempa#1\@@nil{#1}%
+\toks@
+\expandafter\expandafter
+\expandafter{%
+\expandafter \@tempa
+ \the\output
+ \@@nil
+ }%
+\newtoks\output
+\output\expandafter{\the\toks@}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\dispatch@output}
+% We now install our own output routine in place of the
+% old one, which is still available as \cmd\the\cmd\output.
+%
+% The output routine is simply the procedure \cmd\dispatch@output.
+% It either dispatches to a procedure based on a particular value of
+% \cmd\outputpenalty\ or it executes \cmd\the\cmd\output\ tokens.
+% \begin{macrocode}
+\primitive@output{\dispatch@output}%
+\def\dispatch@output{%
+ \let\par\@@par
+ \expandafter\let\expandafter\@tempa\csname output@\the\outputpenalty\endcsname
+ \outputdebug@sw{%
+ \saythe\badness
+ \saythe\outputpenalty
+ \saythe\holdinginserts
+ \say\thepagegrid
+ \saythe\pagegrid@col
+ \saythe\pagegrid@cur
+ %\say\bot@envir
+ \saythe\insertpenalties
+ %\say\@@topmark
+ %\say\saved@@topmark
+ %\say\@@firstmark
+ %\say\saved@@firstmark
+ \say\@@botmark
+ %\say\saved@@botmark
+ \saythe\pagegoal
+ \saythe\pagetotal
+ \saythe{\badness\@cclv}%
+ \expandafter\@ifx\expandafter{\csname output@-\the\execute@message@pen\endcsname\@tempa}{%
+ \say\@message@saved
+ }{%
+ \expandafter\say\csname output@\the\outputpenalty\endcsname
+ }%
+ \say\@toplist
+ \say\@botlist
+ \say\@dbltoplist
+ \say\@deferlist
+ {\tracingall\scrollmode
+ \showbox\@cclv
+ \showbox\@cclv@saved
+ \showbox\pagesofar
+ \showbox\footbox
+ \showbox\footins@saved
+ \showbox\footins
+ \showlists
+ }%
+ }{}%
+ \@ifnotrelax\@tempa{\@tempa}{\the\output}%
+}%
+\@ifxundefined{\outputdebug@sw}{%
+ \@booleanfalse\outputdebug@sw
+}{}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Further thoughts about inserts}
+%
+% The only safe way to deal with inserts is to either set \cmd\holdininserts\ or
+% to commit to using whatever insert comes your way: you cannot change your mind
+% once you see a non-void \cmd\box\cmd\footins, say.
+%
+% Therefore all output routine processing must proceed with \cmd\holdinginserts\ set
+% until you are sure of the material to be committed to the page. At that point, you
+% can clear \cmd\holdinginserts, spew \cmd\box\cmd\@cclv, put down the appropriate penalty,
+% and exit, with the knowledge that \TeX\ will re-find the same pagebreak, this time
+% visiting the output routine with everything, including inserts, in their proper
+% place.
+% This technique applies to split elements (screens, longtable, index) as well as to
+% manufactured pages (float pages and clearpage pages).
+%
+% Therefore, the output routine must not make assumptions about whether \cmd\holdinginserts\
+% should be cleared; instead this must be left to the one-off output routines or the natural output routine.
+%
+% If we are manufacturing pages (``float page processing''), and if \cmd\pagegoal\ is not equal to
+% \cmd\vsize, then inserts are at hand, and our criterion should take into account the insert
+% material, even though we cannot measure its height based on the size of \cmd\box\cmd\footins\
+% (because \cmd\holdinginserts\ is set, you see).
+%
+% It would be better to take the complement of \cmd\floatpagefraction\ and use that
+% as a standard for the looseness of the page. Since \cmd\pagegoal\ reflects the inserted material,
+% the criterion becomes the difference of the aggregate height of the floats and the \cmd\pagegoal\
+% versus this "page looseness" standard.
+%
+% As a check, consider what happens if we bail out: \cmd\@deferlist\ has never been touched, so it
+% requires no attention. Also, \cmd\holdinginserts\ has never been cleared, so inserts require
+% no attention. So we only have to ensure that marks are preserved, which is already taken
+% care of by the message handler mechanism.
+%
+% If we are doing ordinary page cutting, then the scheme would be to detect whether we are within
+% a screen (or longtable as may be), do the adjustment to the page height, and return, but this time
+% with \cmd\holdinginserts\ cleared. Upon reentering the output routine, we may or may not be within
+% the screen environment, but we are now sure to have a final page break, and we can commit this
+% material (by shipping out or by saving it out as a full column).
+%
+% In the above, the first of the two visits to the output routine is a dead cycle and requires
+% propagation of marks, but nothing else.
+%
+% The natural output routine
+%
+% Here is the portion of the output routine that fields cases not handled by
+% the dispatcher.
+%
+% The default is to ship out a page and then look around for more material
+% that might constitute a ``float page''. However, because \cmd\holdinginserts\
+% is normally set, this output routine must first have a dead cycle and
+% come back again with \cmd\holdinginserts\ cleared.
+% Then, after shipping out, it puts down a message that
+% will manufacture zero or more float pages, finally terminating
+% with a procedure that commits floats to a new unfinished page.
+%
+% To accomodate special processing, we execute hooks whose name is based
+% on the value of the "envir" mark component. The default is "document",
+% ensured by an initial mark of that value; the associated procedures
+% are all nil. Any unknown envir value will "\cmd\relax\ out".
+%
+% The code \cmd\move@insert@sw\ tells whether we are on our first visit to
+% the output routine (with \cmd\holdinginserts\ still set), or our second
+% (with \cmd\holdinginserts\ cleared). The output routine will toggle the
+% setting.
+%
+% The commands \cmd\hold@insertions\ and \cmd\move@insertions\ respectively
+% clear and set the state of \cmd\move@insert@sw, so this procedure effectively
+% clears \cmd\holdinginserts\ just long enough to pick up the insertions.
+% Important: any output routine that clears \cmd\holdinginserts\
+% must guarentee that it is restored on the subsequent visit to the output routine.
+% Or, to put it another way, if an output routine detects that \cmd\holdinginserts\
+% is cleared, it should take it upon itself to restore it before exiting.
+%
+% The branch with \cmd\holdinginserts\ set is executed first; the other
+% branch follows on practically immediately thereafter. In the first branch,
+% we simply execute the appropriate hook and then execute a dead cycle.
+%
+% In the branch with \cmd\holdinginserts\ cleared, the procedure
+% builds up the current column, which is now complete, with \cmd\@makecol, then
+% dispatches to the shipout routine associated with the current page grid, \cmd\output@column@.
+% At the end, it triggers the execution of an output routine to prepare the next column (or page).
+%
+% \subsection{Natural output routine}%
+%
+% \begin{macro}{\output}
+% Here is what has become of the output routine of \LaTeX.
+% It is of necessity divided into phases, \cmd\output@holding\ is executed upon first encountering the natural page-breaking point, while inserts are being held.
+% The second phase, \cmd\output@moving, is set in motion by the first: here the same material (in most cases) will be processed with \cmd\holdinginserts\ cleared.
+%
+% \begin{macrocode}
+\output={\toggle@insert\output@holding\output@moving}%
+% \end{macrocode}
+%
+% The procedure \cmd\output@holding\
+% is our first cycle through the output routine; \cmd\holdinginserts\ is still set.
+% We give the current environment a heads up
+% (it is through this means that \classname{longtable} sets its running header and footer),
+% then we execute a dead cycle, which should propagate marks.
+%
+% One corner case that can crop up is the presence of a single unbreakable chunk whose size is larger
+% than \cmd\vsize.
+% Doing a dead cycle under such circumstances will not find the same breakpoint as this time
+% (remember we threw in a \cmd\mark\ node).
+% Instead, we attempt to remove the excess height of the material, so we can continue to propagate marks.
+%
+% The corner case is at hand if the natural size of \cmd\box\cmd\@cclv\ exceeds \cmd\pagegoal\ and
+% the contents cannot be shrunk to fit.
+%
+% \begin{macrocode}
+\def\output@holding{%
+ \csname output@init@\bot@envir\endcsname
+%\vbadness\@M
+%\vfuzz\maxdimen
+ \@if@exceed@pagegoal{\unvcopy\@cclv}{%
+ \setbox\z@\vbox{\unvcopy\@cclv}%
+ \outputdebug@sw{{\tracingall\scrollmode\showbox\z@}}{}%
+ \dimen@\ht\@cclv\advance\dimen@-\ht\z@
+ \dead@cycle@repair\dimen@
+ }{%
+ \dead@cycle
+ }%
+}%
+\def\@if@exceed@pagegoal#1{%
+ \begingroup
+ \setbox\z@\vbox{#1}%
+ \dimen@\ht\z@\advance\dimen@\dp\z@
+ \outputdebug@sw{\saythe\dimen@}{}%
+ \@ifdim{\dimen@>\pagegoal}{%
+ \setbox\z@\vbox{\@@mark{}\unvbox\z@}%
+ \splittopskip\topskip
+ \splitmaxdepth\maxdepth
+ \vbadness\@M
+ \vfuzz\maxdimen
+ \setbox\tw@\vsplit\z@ to\pagegoal
+ \outputdebug@sw{{\tracingall\scrollmode\showbox\tw@\showbox\z@}}{}%
+ \setbox\tw@\vbox{\unvbox\tw@}%
+ \@ifdim{\ht\tw@=\z@}{%
+ \ltxgrid@info{Found overly large chunk while preparing to move insertions. Attempting repairs}%
+ \aftergroup\true@sw
+ }{%
+ \aftergroup\false@sw
+ }%
+ }{%
+ \aftergroup\false@sw
+ }%
+ \endgroup
+}%
+% \end{macrocode}
+%
+% The procedure \cmd\output@moving\
+% is our second cycle through the output routine; \cmd\holdinginserts\ is now cleared,
+% and \cmd\insert s will have been split off into their respective box registers, like \cmd\footins.
+%
+% \begin{enumerate}
+% \item
+% Set the values of \cmd\topmark\ and \cmd\firstmark.
+% \item
+% If we got here because of a \cmd\clearpage\ command, remove the protection box that this mechanism has left on the MVL.
+% \item
+% If the contents of \cmd\box\cmd\@cclv\ are non-trivial, commit it to the current page or ship it out as the case may call for.
+% \item
+% If not, discard it (we are at the end of \cmd\clearpage\ processing).
+% \item
+% Set various values, including the available space for setting type on the next column (\cmd\@colroom).
+% \end{enumerate}
+%
+% The processing for a non-trivial \cmd\box\cmd\@cclv\ are:
+% \begin{enumerate}
+% \item
+% Execute the head procedure for the current environment.
+% \item
+% Make up a column and ship it out (or commit it to the current page) via a procedure keyed to the current page grid.
+% \item
+% Put down an interrupt for \cmd\do@startcolumn@pen: this will force a visit to the output routine for the
+% purpose of committing floats to the next column.
+% \item
+% Possibly put down an interrupt to continue \cmd\clearpage\ proccessing.
+% \item
+% Execute the tail procedure for the current environment.
+% \end{enumerate}
+%
+%
+% The processing for a trivial \cmd\box\cmd\@cclv\ are:
+% \begin{enumerate}
+% \item
+% Void out \cmd\box\cmd\@cclv\ and give appropriate warning messages and diagnostics.
+%% \item
+%% Put down the same interrupts as for the non-trivial case above.
+% \end{enumerate}
+%
+% \begin{macrocode}
+\def\output@moving{%
+ \set@top@firstmark
+ \@ifnum{\outputpenalty=\do@newpage@pen}{%
+ \setbox\@cclv\vbox{%
+ \unvbox\@cclv
+ \setbox\z@\lastbox
+ \@ifdim{\ht\z@=\ht\@protection@box}{\box\lastbox}{\unskip}%
+ }%
+ }{}%
+ \@cclv@nontrivial@sw{%
+ \csname output@prep@\bot@envir \endcsname
+ \@makecol\csname output@column@\thepagegrid\endcsname
+ \protect@penalty\do@startcolumn@pen
+ \clearpage@sw{%
+ \protect@penalty\do@endpage@pen
+ }{}%
+ \csname output@post@\bot@envir \endcsname
+ }{%
+ {\setbox\z@\box\@cclv}%
+ }%
+ \set@colroom
+ \global\@mparbottom\z@
+ \global\@textfloatsheight\z@ %FIXME: this legacy LaTeX variable is set, but never queried!
+}%
+% \end{macrocode}
+%
+% The procedure \cmd\@cclv@nontrivial@sw\ determines if this visit to \cmd\output@moving\
+% is a trivial one, which happens at the end of \cmd\clearpage\ processing and under some pathological circumstances.
+% It emits a Boolean, so it is syntactically like \cmd\true@sw, albeit does not execute solely via expansion.
+%
+% Note: the case where \cmd\box\cmd\@cclv\ is void comes up at the very beginning of the job, when
+% typesetting a (full-page-width) title block in a two-column layout.
+%
+% Note: the code that removes the last box and skip from the output is intended to detect the case
+% where the output has whatit nodes followed by topskip and a protection box.
+% This is what happens under normal circumstances at the end of \cmd\clearpage\ processing.
+% \begin{macrocode}
+\def\@cclv@nontrivial@sw{%
+ \@ifx@empty\@toplist{%
+ \@ifx@empty\@botlist{%
+ \@ifvoid\footins{%
+ \@ifvoid\@cclv{%
+ \false@sw
+ }{%
+ \setbox\z@\vbox{\unvcopy\@cclv}%
+ \@ifdim{\ht\z@=\topskip}{%
+ \setbox\z@\vbox{%
+ \unvbox\z@
+ \setbox\z@\lastbox\dimen@\lastskip\unskip
+ \@ifdim{\ht\z@=\ht\@protection@box}{%
+ \advance\dimen@\ht\z@
+ \@ifdim{\dimen@=\topskip}{%
+ \aftergroup\true@sw
+ }{%
+ \aftergroup\false@sw
+ }%
+ }{%
+ \aftergroup\false@sw
+ }%
+ }%
+ {%
+ \false@sw % Normal for \clearpage
+ }{%
+ \true@sw
+ }%
+ }{%
+ \@ifdim{\ht\z@=\z@}{%
+ \ltxgrid@info{Found trivial column. Discarding it}%
+ \outputdebug@sw{{\tracingall\scrollmode\showbox\@cclv}}{}%
+ \false@sw
+ }{%
+ \true@sw
+ }%
+ }%
+ }%
+ }{%
+ \true@sw
+ }%
+ }{%
+ \true@sw
+ }%
+ }{%
+ \true@sw
+ }%
+}%
+% \end{macrocode}
+%
+%
+% \end{macro}
+%
+% \begin{macro}{\protect@penalty}
+% The procedure \cmd\protect@penalty\ is the utility procedure for invoking a
+% one-off output routine. Such a routine can expect to find the protection box
+% above it in \cmd\box\cmd\@cclv: it should remove that box.
+%
+% Note that \cmd\execute@message\ does the same thing as \cmd\protect@penalty, but
+% in a slightly different way.
+%
+% We create a specially formulated box that will be universally used when a protection box is needed.
+% In this way, we can always recognize when \cmd\box\cmd\@cclv\ is trivial:
+% it will consist of whatsits followed by \cmd\topskip\ glue and the \cmd\@protection@box.
+% \begin{macrocode}
+\def\protect@penalty#1{\protection@box\penalty-#1\relax}%
+\newbox\@protection@box
+\setbox\@protection@box\vbox to1986sp{\vfil}%
+\def\protection@box{\nointerlineskip\copy\@protection@box}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\dead@cycle}
+% \begin{macro}{\dead@cycle@repair}
+% The procedure \cmd\dead@cycle\ is defined separately as a utility which can be used by
+% any output processing routine to emulate what takes place in the standard output routine.
+%
+% Here, we have entered the output routine with \cmd\holdinginserts\ enabled, which means that we
+% are not yet ready to ship out material, because the \cmd\insert\ registers are being held.
+% We want to clear \cmd\holdinginserts\ and come back here with the same page break as before, whereupon
+% we may properly proceed with page makeup.
+%
+% To do this, we
+% propagate marks, then spew the contents of \cmd\box\cmd\@cclv\ followed by the
+% original output penalty that landed us here (but only if it is not 10000,
+% the flag value for a pagebreak not at a penalty).
+%
+% However, the natural output routine should do this only if \cmd\box\cmd\@cclv\ is nontrivial.
+% A pathological case exists wherein a box of height greater than \cmd\textheight\ would cause an infinite loop involving the output routine.
+% The procedure \cmd\dead@cycle@repair, attempts to catch this case and avoid the loop.
+%
+% The test of the height of \cmd\box\cmd\@cclv\ is not the correct one, because this test will run afoul in
+% the case where \cmd\box\cmd\@cclv\ contains nothing but an \cmd\insert\ node. What to do?
+%
+% It is possible that the pathological case can be detected by looking at \cmd\pagetotal. If that quantity is
+% zero, then \cmd\box\cmd\@cclv\ really is trivial.
+%
+% In the procedure \cmd\dead@cycle@repair, if \cmd\box\cmd\@cclv\ is nontrivial, we execute \cmd\dead@cycle,
+% otherwise it contains nothing but a mark, so we dispense with propagating marks
+% and we simply spew out \cmd\box\cmd\@cclv\ without an accompanying mark.
+% This has the effect of failing to propagate marks, but this problem is preferrable to the infinite loop,
+% which in principle could crash even a robust operating system by filling up the file system.
+%
+% If a document has such a large chunk, it should be fixed, so we give a message in the log.
+%
+% You ask, ``In what way does this infinite loop come about?'' Good question!
+%
+% The setup is a chunk in the MVL that is taller than \cmd\textheight.
+% (Yes, it's that simple.)
+% As soon as the previous page ships out, the MVL will contain a mark (propagated from the previous page) followed
+% by that large chunk (call it the `big bad box', albeit does not need to be a single box).
+% The next visit to the output routine will be a natural page break, but
+% \TeX\ will select the juncture between the mark and the big bad box as the least-cost page break.
+% Unless the test in \cmd\dead@cycle\ is done, the cycle is perpetuated when the macro
+% reinserts the mark.
+%
+% The crux matter is achieving, in a robust way, the goal of going from a \cmd\holdinginserts\ state to one
+% where the insertions are moving.
+%
+% \begin{macrocode}
+\def\dead@cycle@repair#1{%
+ \expandafter\do@@mark
+ \expandafter{%
+ \@@botmark
+ }%
+ \unvbox\@cclv
+ \nointerlineskip
+ \vbox to#1{\vss}%
+ \@ifnum{\outputpenalty<\@M}{\penalty\outputpenalty}{}%
+}%
+\def\dead@cycle@repair@protected#1{%
+ \expandafter\do@@mark
+ \expandafter{%
+ \@@botmark
+ }%
+ \begingroup
+ \unvbox\@cclv
+ \setbox\z@\lastbox % Remove protection box
+ \nointerlineskip
+ \advance#1-\ht\@protection@box
+ \vbox to#1{\vss}%
+ \protection@box % Reinsert protection box
+ \@ifnum{\outputpenalty<\@M}{\penalty\outputpenalty}{}%
+ \endgroup
+}%
+\def\dead@cycle{%
+ \expandafter\do@@mark
+ \expandafter{%
+ \@@botmark
+ }%
+ \unvbox\@cclv
+ \@ifnum{\outputpenalty<\@M}{\penalty\outputpenalty}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\output@init@document}
+% \begin{macro}{\output@prep@document}
+% \begin{macro}{\output@post@document}
+% The default processing simply provides for insertion of held-over footnotes.
+% At a natural page break, we are either at the bottom of a column or at the bottom
+% of a page. In either case, the \cmd\output@init@\ processing adjusts for the height
+% of the held-over footnotes and bails out.
+% Upon our return, at \cmd\output@prep@\ time, the page break will accomodate the material;
+% it is now actually inserted by concatenating it with the contents of \cmd\footins.
+% The default processing for \cmd\output@post@\ is nil.
+% \begin{macrocode}
+\def\output@init@document{%
+ \@ifvoid\footbox{}{%
+ \global\advance\vsize-\ht\footbox
+ \global\advance\vsize-\dp\footbox
+ }%
+}%
+\def\output@prep@document{%
+ \@ifvoid\footbox{}{%
+% {\tracingall\scrollmode\showbox\footbox\showbox\footins}%
+ \setbox\footins\vbox{\unvbox\footbox\unvbox\footins}%
+ }%
+}%
+\def\output@post@document{}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@opcol}
+% The standard \LaTeX\ procedure \cmd\@opcol\ is now completely obsoleted.
+% \begin{macrocode}
+\let\@opcol\@undefined
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@makecol}
+% The procedure \cmd\@makecol\ packages up a page along with all its insertions and floats.
+% Therefore it is essential that it be executed with \cmd\holdininserts\ cleared.
+%
+% Note that there is a corner case when in a multi-column grid, where the change back to
+% one-column grid occurs just after a complete page ships out. We want to detect when
+% \cmd\@cclv\ contains nothing but a \cmd\mark, but this is a \TeX\ impossibility.
+%
+% Note on \cmd\@kludgeins: we have removed this mechanism from \LaTeX, because the implementation
+% of \cmd\enlargethispage\ no longer requires it.
+% Here, for consistency sake, we remove \cmd\@makespecialcolbox.
+% \begin{macrocode}
+\def\@makecol{%
+ \setbox\@outputbox\vbox{%
+ \boxmaxdepth\@maxdepth
+ \@tempdima\dp\@cclv
+ \unvbox\@cclv
+ \vskip-\@tempdima
+ }%
+ \xdef\@freelist{\@freelist\@midlist}\global\let\@midlist\@empty
+ \@combinefloats
+ \@combineinserts\@outputbox\footins
+%\@ifvbox\@kludgeins{%
+% \@makespecialcolbox
+%}{%
+ \set@adj@colht\dimen@
+ \count@\vbadness
+ \vbadness\@M
+ \setbox\@outputbox\vbox to\dimen@{%
+ \@texttop
+ \dimen@\dp\@outputbox
+ \unvbox\@outputbox
+ \vskip-\dimen@
+ \@textbottom
+ }%
+ \vbadness\count@
+%}%
+ \global\maxdepth\@maxdepth
+}%
+\let\@makespecialcolbox\@undefined
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@combineinserts}
+% We split out the procedure to add the \cmd\footins\ insertions to the packaged-up page.
+% Any other non-trivial insertions should also be dealt with at this time.
+% \begin{macrocode}
+\def\@combineinserts#1#2{%
+ \setbox#1\vbox{%
+ \unvbox#1%
+% {\tracingall\scrollmode\showbox#2}%
+ \vbox{%
+ \@ifvoid#2{}{%
+ \vskip\skip\footins
+ \color@begingroup
+ \normalcolor
+ \footnoterule
+ \nointerlineskip
+ \box#2%
+ \color@endgroup
+ }{}%
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@floatplacement}
+% In standard \LaTeX, someone (DPC?) makes the assumption that \cmd\@fpmin\ can be assigned
+% locally. This is no longer true now that we ship no more than one page per visit to the output routine.
+% We apply a bandaid.
+% \begin{macrocode}
+\appdef\@floatplacement{%
+ \global\@fpmin\@fpmin
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pagebreak@pen}
+% While we are in the way of registering certain penalty values,
+% let us register the smallest one that will force a visit to the output routine.
+% However, this penalty will not have an assciated macro: we wish to execute the
+% natural output routine instead.
+%
+% Note that this penalty is invoked by \cmd\clearpage\ and \cmd\newpage.
+% \begin{macrocode}
+\mathchardef\pagebreak@pen=\@M
+\expandafter\let\csname output@-\the\pagebreak@pen\endcsname\relax
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Float placement}%
+%
+% \begin{macro}{\do@startcolumn@pen}
+% The procedure \cmd\do@startcolumn@pen\ is executed as a one-off output routine
+% just after a page is shipped out (or, in a multicolumn page grid, a column is salted away).
+%
+% Its job is to either generate a ``float page'' (in reality a column) for shipping out,
+% or to commit deferred floats to the fresh column, concluding with a dead cycle.
+% In the former case, we accomodate split footnotes and other insertions (by comparing \cmd\vsize\ and \cmd\pagegoal):
+% the floats are spewed onto the page, whereupon \LaTeX's output routine will place the footnotes and ship out,
+% iterating the process once again.
+%
+% Note that when this procedure is invoked, \cmd\box\cmd\@cclv\ still has within it the protection box, so we
+% start by removing it. Note also that if there was a split insertion held over from the previous page, the
+% insert node will be present in \cmd\box\cmd\@cclv, \emph{prior to} the protection box. For this reason, we cannot
+% just throw away that box, as we might be tempted to do.
+%
+% FIXME: where else do we possibly inappropriately discard \cmd\box\cmd\@cclv?
+%
+% Note that, because a column or page page had previously just been completed,
+% we can assume that there is nothing of importance on the page,
+% and because no message is being passed, we can preserve marks in a simple way.
+%
+% A Note on terminology:
+% In a single-column page grid, you might expect that we would execute the procedure \cmd\do@startpage.
+% But this is not so.
+% \LaTeX\ has a confustion of long standing,
+% in which the procedures that handle full-page width floats in a two-column page grid all have in their names
+% the string `dbl', which erroneously suggests having something to do with ``double''. It does not:
+% when you see `dbl', think ``full page width''.
+% \begin{macrocode}
+\mathchardef\do@startcolumn@pen=10005
+\@namedef{output@-\the\do@startcolumn@pen}{\do@startcolumn}%
+\def\do@startcolumn{%
+ \setbox\@cclv\vbox{\unvbox\@cclv\setbox\z@\lastbox\unskip}%
+ \clearpage@sw{\@clearfloatplacement}{\@floatplacement}%
+ \set@colroom
+ \@booleanfalse\pfloat@avail@sw
+ \begingroup
+ \@colht\@colroom
+ \@booleanfalse\float@avail@sw
+ \@tryfcolumn\test@colfloat
+ \float@avail@sw{\aftergroup\@booleantrue\aftergroup\pfloat@avail@sw}{}%
+ \endgroup
+ \fcolmade@sw{%
+ \setbox\@cclv\vbox{\unvbox\@outputbox\unvbox\@cclv}%
+% \csname float@column@\thepagegrid\endcsname
+% \csname output@column@\thepagegrid\endcsname
+ \outputpenalty-\pagebreak@pen % ask for a return visit, this time with insertions and all.
+ \dead@cycle
+ }{%
+ \begingroup
+ \let\@elt\@scolelt
+ \let\reserved@b\@deferlist\global\let\@deferlist\@empty\reserved@b
+ \endgroup
+ \clearpage@sw{%
+ \outputpenalty\@M
+ }{%
+ \outputpenalty\do@newpage@pen
+ }%
+ \dead@cycle
+ }%
+ \check@deferlist@stuck\do@startcolumn
+ \set@vsize
+}%
+\def\@scolelt#1{\def\@currbox{#1}\@addtonextcol}%
+\def\test@colfloat#1{%
+ \csname @floatselect@sw@\thepagegrid\endcsname#1{}{\@testtrue}%
+ \@if@sw\if@test\fi{}{\aftergroup\@booleantrue\aftergroup\float@avail@sw}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@addtonextcol}
+% We must adjust \cmd\@addtonextcol\ to take held-over inserts into account.
+% Now that all deferred floats are queued up together (in order), we must have a way of
+% differentiating them; this is done by the page grid-dependent procedure \cmd\@floatselect@sw@.
+% \begin{macrocode}
+\def\@addtonextcol{%
+ \begingroup
+ \@insertfalse
+ \@setfloattypecounts
+ \csname @floatselect@sw@\thepagegrid\endcsname\@currbox{%
+ \@ifnum{\@fpstype=8 }{}{%
+ \@ifnum{\@fpstype=24 }{}{%
+ \@flsettextmin
+ \@reqcolroom \ht\@currbox
+ \advance \@reqcolroom \@textmin
+ \advance \@reqcolroom \vsize % take into account split insertions
+ \advance \@reqcolroom -\pagegoal
+ \@ifdim{\@colroom>\@reqcolroom}{%
+ \@flsetnum \@colnum
+ \@ifnum{\@colnum>\z@}{%
+ \@bitor\@currtype\@deferlist
+ \@if@sw\if@test\fi{}{%
+ \@addtotoporbot
+ }%
+ }{}%
+ }{}%
+ }%
+ }%
+ }{}%
+ \@if@sw\if@insert\fi{}{%
+ \@cons\@deferlist\@currbox
+ }%
+ \endgroup
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\do@startpage@pen}
+% \begin{macro}{\forcefloats@sw}
+% \begin{macro}{\@sdblcolelt}
+% \begin{macro}{\test@dblfloat}
+% \begin{macro}{\@if@notdblfloat}
+% Similar to \cmd\do@startcolumn,
+% the procedure \cmd\do@startpage\ starts up a new page (not column) in a multi-column page grid.
+% It is invoked after a page is shipped out in a multi-column page grid, and
+% it commits full-page-width floats to the fresh page, possibly resulting in a float page.
+% In implementation, it is similar to \cmd\do@startcolumn, except that
+% it commits effectively via \cmd\@addtodblcol\ instead of \cmd\@addtonextcol.
+% Note that this procedure will inevitably be followed by \cmd\do@startcolumn.
+%
+% Some details of the procedure:
+%
+% We begin by removing the protection box from \cmd\box\cmd\@cclv, then setting the values of the
+% float placement parameters appropriately, and resetting \cmd\@colht, \cmd\@colroom, and \cmd\vsize\ to base values.
+%
+% Next we attempt to compose a float page, a page consisting entirely of floats. If successful,
+% we ship out the float page and lay down an interrupt that will send us back here for another try.
+%
+% If no float page is formed, we attempt to commit full-page-width floats to the text page, and return with a dead cycle.
+% We are now ready to compose columns of text.
+%
+% Note that all floats (both column floats and full-page-width floats) move through a single queue.
+% To differentiate between the two, the width of the float is compared to \cmd\textwidth.
+% This comparison is encapsulated in the macro \cmd\@if@notdblfloat, which should be used whenever
+% such a determination must be made. This procedure returns a Boolean.
+% \begin{macrocode}
+\mathchardef\do@startpage@pen=10006
+\@namedef{output@-\the\do@startpage@pen}{\do@startpage}%
+\def\do@startpage{%
+ \setbox\@cclv\vbox{\unvbox\@cclv\setbox\z@\lastbox\unskip}%
+ \clearpage@sw{\@clearfloatplacement}{\@dblfloatplacement}%
+ \set@colht
+ \@booleanfalse\pfloat@avail@sw
+ \begingroup
+ \@booleanfalse\float@avail@sw
+ \@tryfcolumn\test@dblfloat
+ \float@avail@sw{\aftergroup\@booleantrue\aftergroup\pfloat@avail@sw}{}%
+ \endgroup
+ \fcolmade@sw{%
+ \global\setbox\pagesofar\vbox{\unvbox\pagesofar\unvbox\@outputbox}%
+ \@combinepage
+ \@combinedblfloats
+ \@outputpage
+ \global\pagegrid@cur\@ne
+ \protect@penalty\do@startpage@pen
+ }{%
+ \begingroup
+ \@booleanfalse\float@avail@sw
+ \let\@elt\@sdblcolelt
+ \let\reserved@b\@deferlist\global\let\@deferlist\@empty\reserved@b
+ \endgroup
+ \@ifdim{\@colht=\textheight}{% No luck...
+ \pfloat@avail@sw{% ...but a float *was* available!
+ \forcefloats@sw{%
+ \ltxgrid@warn{Forced dequeueing of floats stalled}%
+ }{%
+ \ltxgrid@warn{Dequeueing of floats stalled}%
+ }%
+ }{}%
+ }{}%
+ \outputpenalty\@M
+ \dead@cycle
+ }%
+ \check@deferlist@stuck\do@startpage
+ \set@colht
+%\set@colroom
+}%
+\def\@sdblcolelt#1{\def\@currbox{#1}\@addtodblcol}%
+\def\test@dblfloat#1{%
+ \@if@notdblfloat{#1}{\@testtrue}{}%
+ \@if@sw\if@test\fi{}{\aftergroup\@booleantrue\aftergroup\float@avail@sw}%
+}%
+\def\@if@notdblfloat#1{\@ifdim{\wd#1<\textwidth}}%
+\@booleanfalse\forcefloats@sw
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@addtodblcol}
+%
+% The procedure \cmd\@addtodblcol\ is called into play at the beginning of each fresh page
+% and operates on each deferred float, in the hopes of placing one or more such floats
+% at the top of the current page.
+%
+% We alter the procedure of standard \LaTeX\ by putting failed floats into
+% \cmd\@deferlist\ instead of \cmd\@dbldeferlist. Having done so, we must have a means
+% of differentiating full-page-width floats from column-width floats.
+% We assume that the latter will always be narrower than \cmd\textwidth.
+%
+% In aid of detecting a stalled float flushing process, we set a Boolean if we encounter
+% a qualified full-page-width float here. Any that qualify but fail the rest of the tests
+% might still pass when reconsidered on an otherwise blank page.
+% \begin{macrocode}
+\def\@addtodblcol{%
+ \begingroup
+ \@if@notdblfloat{\@currbox}{%
+ \false@sw
+ }{%
+ \@setfloattypecounts
+ \@getfpsbit \tw@
+ \@bitor \@currtype \@deferlist
+ \@if@sw\if@test\fi{%
+ \false@sw
+ }{%
+ \@ifodd\@tempcnta{%
+ \aftergroup\@booleantrue\aftergroup\float@avail@sw
+ \@flsetnum \@dbltopnum
+ \@ifnum{\@dbltopnum>\z@}{%
+ \@ifdim{\@dbltoproom>\ht\@currbox}{%
+ \true@sw
+ }{%
+ \@ifnum{\@fpstype<\sixt@@n}{%
+ \begingroup
+ \advance \@dbltoproom \@textmin
+ \@ifdim{\@dbltoproom>\ht\@currbox}{%
+ \endgroup\true@sw
+ }{%
+ \endgroup\false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }%
+ }%
+ {%
+ \@tempdima -\ht\@currbox
+ \advance\@tempdima
+ -\@ifx{\@dbltoplist\@empty}{\dbltextfloatsep}{\dblfloatsep}%
+ \global \advance \@dbltoproom \@tempdima
+ \global \advance \@colht \@tempdima
+ \global \advance \@dbltopnum \m@ne
+ \@cons \@dbltoplist \@currbox
+ }{%
+ \@cons \@deferlist \@currbox
+ }%
+ \endgroup
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@tryfcolumn}
+% \begin{macro}{\@wtryfc}
+% \begin{macro}{\@xtryfc}
+% \begin{macro}{\@ztryfc}
+% Whenever a page is shipped out, \LaTeX\ automatically tries out a float column:
+% a page containing nothing but floats (and, as we have added here, split footnotes).
+%
+% The following four procedures employ certain macros to communicate between each other:
+%
+% \cmd\fcolmade@sw, a boolean, says whether we were successful in making a float column.
+%
+% \cmd\if@test, a \cmd\newif\ switch, says a float has failed some test.
+%
+% \cmd\@deferlist, is the input to the process, a list, of deferred floats.
+%
+% \cmd\@trylist, a list, stores the deferred floats to be tried out on the float column.
+%
+% \cmd\@failedlist, a list of floats that have failed the selection for the float column.
+%
+% \cmd\@flfail, a list of floats that have failed the second selection for the float column.
+%
+% \cmd\@flsucceed, a list, the floats that have been successfully placed on the float column.
+%
+% \cmd\@freelist, a list, receives any freed floats.
+%
+% \cmd\@colht, a dimen, the available space for the column, including column floats and insertions (footnotes).
+%
+% \cmd\@fpmin, a dimen, the required minimum height for the float column.
+%
+% \cmd\@outputbox, a box, the output of the process.
+%
+% \cmd\@fptop, \cmd\@fpsep, \cmd\@fpbot, glue, placed above, between, and below floats on the float column.
+%
+% \cmd\@currtype, a count, used temporarily for the float's bits.
+%
+% \cmd\@tempcnta, a count, used temporarily for the float's bits.
+%
+% In \cmd\@tryfcolumn, we alter the criterion for a float page, because if footnotes are present at this point
+% (presumably due to a split insertion) then \cmd\@fpmin is no longer the right threshold to apply.
+%
+% Note that we have changed \cmd\@tryfcolumn, \cmd\@xtryfc, and \cmd\@ztryfc\ syntactically so that the procedure
+% to test for the float's being a column float versus a full-page-width float is passed in as an
+% argument.
+%
+% \begin{macrocode}
+\def\@tryfcolumn#1{%
+ \global\@booleanfalse\fcolmade@sw
+ \@ifx@empty\@deferlist{}{%
+ \global\let\@trylist\@deferlist
+ \global\let\@failedlist\@empty
+ \begingroup
+ \dimen@\vsize\advance\dimen@-\pagegoal\@ifdim{\dimen@>\z@}{%
+ \advance\@fpmin-\dimen@
+ }{}%
+ \def\@elt{\@xtryfc#1}\@trylist
+ \endgroup
+ \fcolmade@sw{%
+ \global\setbox\@outputbox\vbox{\vskip \@fptop}%
+ \let \@elt \@wtryfc \@flsucceed
+ \global\setbox\@outputbox\vbox{\unvbox\@outputbox
+ \unskip \vskip \@fpbot
+ }%
+ \let \@elt \relax
+ \xdef\@deferlist{\@failedlist\@flfail}%
+ \xdef\@freelist{\@freelist\@flsucceed}%
+ }{}%
+ }%
+}%
+\def\@wtryfc #1{%
+ \global\setbox\@outputbox\vbox{\unvbox\@outputbox
+ \box #1\vskip\@fpsep
+ }%
+}%
+\def\@xtryfc#1#2{%
+ \@next\reserved@a\@trylist{}{}% trim \@trylist. Ugly!
+ \@currtype \count #2%
+ \divide\@currtype\@xxxii\multiply\@currtype\@xxxii
+ \@bitor \@currtype \@failedlist
+ \@testfp #2%
+ #1#2%
+ \@ifdim{\ht #2>\@colht }{\@testtrue}{}%
+ \@if@sw\if@test\fi{%
+ \@cons\@failedlist #2%
+ }{%
+ \begingroup
+ \gdef\@flsucceed{\@elt #2}%
+ \global\let\@flfail\@empty
+ \@tempdima\ht #2%
+ \def \@elt {\@ztryfc#1}\@trylist
+ \@ifdim{\@tempdima >\@fpmin}{%
+ \global\@booleantrue\fcolmade@sw
+ }{%
+ \@cons\@failedlist #2%
+ }%
+ \endgroup
+ \fcolmade@sw{%
+ \let \@elt \@gobble
+ }{}%
+ }%
+}%
+\def\@ztryfc #1#2{%
+ \@tempcnta \count#2%
+ \divide\@tempcnta\@xxxii\multiply\@tempcnta\@xxxii
+ \@bitor \@tempcnta {\@failedlist \@flfail}%
+ \@testfp #2%
+ #1#2%
+ \@tempdimb\@tempdima
+ \advance\@tempdimb \ht#2\advance\@tempdimb\@fpsep
+ \@ifdim{\@tempdimb >\@colht}{%
+ \@testtrue
+ }{}%
+ \@if@sw\if@test\fi{%
+ \@cons\@flfail #2%
+ }{%
+ \@cons\@flsucceed #2%
+ \@tempdima\@tempdimb
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Clearing pages}%
+%
+% Clearing the page is an elaboration of ending the page: it entails flushing all floats.
+%
+% This package might make number of float flushing algorithms available,
+% a very simple one that does not try to produce excellent pages,
+% another that tries to make the best use of space,
+% and a more complex one that tries to balance columns.
+%
+% At the beginning of the page-clearing process, by definition all of the paragraph text involved is on the MVL and all floats have been encountered.
+% There may be material in \cmd\pagesofar, and (in a multi-column page grid) any number of columns of the page have been composed.
+% Also, there might be footnote material saved up in \cmd\footbox.
+%
+% Because we did not want to perform multiple \cmd\shipout s per visit to the output routine,
+% our multi-column page makeup will not compose multiple columns per visit.
+% This implementation detail may not require alteration, but it is not a limitation that is truly necessary:
+% it is only multiple \cmd\shipout s per visit that must be avoided.
+%
+% The crux matter is how to continue with flushing floats even after the material in the MVL is exhausted.
+% At that point, we must, upon completion of the output routine,
+% insert into the MVL an interrupt that triggers the next step in the processing.
+%
+% Therefore, after processing a \cmd\do@startcolumn\ interrupt, we must somehow force the completion of that column.
+% This could be done by inserting a \cmd\do@newpage@pen\ interrupt.
+%
+% And after processing a \cmd\do@startpage@pen\ interrupt, that results in \cmd\@dbltopinsert s,
+% we must ensure that the multiple columns on the page get completed, so that the page itself finally gets shipped out.
+% This part will proceed automatically given that \cmd\do@startcolumn\ processing completes successfully.
+%
+% The process will not be complete until all deferred floats have been placed and shipped out, and all saved-up footnotes have been inserted.
+%
+% Full-page-width floats can get out of order of column floats. This problem can be remedied by holding them all in the same list.
+% We therefore stop using \cmd\@dbldeferlist\ entirely, and all of the procedures that formerly used it have been rewritten to
+% use \cmd\@deferlist\ instead. When traversing the list, we apply a selector on the given box that determines whether it is a column-width or page-width float.
+% This selector is different depending on the page grid.
+%
+% When the \cmd\@deferlist\ is processed (by any means), we have to take care of the case where a float of one category is passed over but we are looking for a float of the other category.
+% Here, we must terminate processing, to avoid disordering the floats. This we do by the usual means.
+%
+% The system has a Boolean that says we are clearing pages: \cmd\clearpage@sw; if it is true,
+% then at the tail of \cmd\do@startcolumn\ processing, we should put down a (\cmd\vfil?) \cmd\do@newpage@pen\ interrupt.
+% This is because the MVL is now empty, so we have to force the columns to complete.
+%
+% One potential very pathological case would be where there is one or more deferred floats that never successfully get placed:
+% placing floats has stalled, and we will ship out blank pages indefinitely. How to detect this case?
+%
+% First, \cmd\do@startpage\ will evidently be stalled if the following are all true:
+% a) \cmd\@tryfcolumn\ and \cmd\@sdblcolelt\ both fail,
+% b) there are deferred floats available for page placement, and
+% c) the \cmd\@colht=\cmd\textheight, that is, the full page height is available for placement of column floats.
+%
+% Second, \cmd\do@startcolumn\ will evidently be stalled if the following are all true:
+% a) tryfcolumn fails,
+% b) there are deferred floats available for column placement, and
+% a) the \cmd\@colroom=\cmd\textheight, that is, the full page height is available for placement of column floats.
+%
+%
+% \begin{macro}{\cleardoublepage}
+% \begin{macro}{\clearpage}
+% \begin{macro}{\newpage}
+% \begin{macro}{\newpage@prep}
+% The function of \cmd\clearpage\ is to end the current page with \cmd\newpage\ and then
+% ship out additional pages until (\footins) inserts and (deferred) floats are exhausted.
+%
+% The method involves setting the float placement parameters to completely permissive values
+% and kicking out the current page (using a non-discardable penalty).
+% A possibly short page will be shipped out, followed
+% by any number of float pages. However these float pages, because using permissive float placement,
+% will exhaust all inserts and deferred floats.
+%
+% Bug Note: in the code for \cmd\clearpage, the first penalty we output is an unprotected \cmd\pagebreak@pen.
+% I tried using a protected \cmd\do@newpage@pen, but that gave rise to a corner case where a blank page
+% was output.
+%
+% At present, the \cmd\clearpage\ procedure does the same as \cmd\newpage,
+% except that \cmd\clearpage@sw\ is turned on,
+% and the (discardable) \cmd\newpage\ is inevitably followed by the same procedures
+% that are executed if a page is shipped out.
+%
+% FIXME: it seems that better than \cmd\pagebreak@pen\ would be an unprotected penalty of a special value that would
+% entail output routine processing consisting of the following steps:
+% 3) \cmd\unvbox\cmd\@cclv,
+% 1) set \cmd\clearpage@sw\ to \cmd\true@sw,
+% 2) put down a protected \cmd\do@startcolumn@pen,
+% 4) take a dead cycle.
+%
+% The effect would be to liberalize float placement options for the current column as well as further columns that may be output as part of \cmd\clearpage\ processing.
+% Of course, it would still be necessary to set \cmd\clearpage@sw\ again via an interrupt.
+%
+% An optimization might be to clear \cmd\clearpage@sw\ as part of the same interrupt,
+% but that would actually not work properly, because it is necessary for \cmd\do@endpage\ to
+% possibly invoke furhter visits to the output routine before clearpage processing ceases.
+% \begin{macrocode}
+\def\newpage@prep{%
+ \if@noskipsec
+ \ifx \@nodocument\relax
+ \leavevmode
+ \global \@noskipsecfalse
+ \fi
+ \fi
+ \if@inlabel
+ \leavevmode
+ \global \@inlabelfalse
+ \fi
+ \if@nobreak \@nobreakfalse \everypar{}\fi
+ \par
+}%
+\def \newpage {%
+ \newpage@prep
+ \do@output@MVL{%
+ \vfil
+ \penalty-\pagebreak@pen
+ }%
+}%
+\def\clearpage{%
+ \newpage@prep
+ \do@output@MVL{%
+ \vfil
+ \penalty-\pagebreak@pen
+ \global\@booleantrue\clearpage@sw
+ \protect@penalty\do@startcolumn@pen
+ \protect@penalty\do@endpage@pen
+ }%
+ \do@output@MVL{%
+ \global\@booleanfalse\clearpage@sw
+ }%
+}%
+\def\cleardoublepage{%
+ \clearpage
+ \@if@sw\if@twoside\fi{%
+ \@ifodd\c@page{}{%
+ \null\clearpage
+ }%
+ }{}%
+}%
+\@booleanfalse\clearpage@sw
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\do@endpage@pen}
+% The penalty \cmd\do@endpage@pen\ simply dispatches to the page grid procedure that forces an end page.
+% That procedure should test whether there is anything to ship out (say committed floats), then act accordingly.
+% Note that as part of this work, it should \cmd\unvbox\cmd\@cclv, which has been left boxed up so it can be
+% measured.
+% \begin{macrocode}
+\mathchardef\do@endpage@pen=10007
+\@namedef{output@-\the\do@endpage@pen}{%
+ \csname end@column@\thepagegrid\endcsname
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\do@newpage@pen}
+% The penalty \cmd\do@newpage@pen\ allows a ``non-discardable \cmd\newpage'' command:
+% a \cmd\newpage\ command that will not disappear at a pagebreak.
+% This visit to the output routine will not be dispatched to an interrupt,
+% rather the natural output routine will be executed, where it
+% will remove the protection box.
+%
+% Call this routine by executing \cmd\protect@penalty\cmd\do@newpage@pen.
+% \begin{macrocode}
+\mathchardef\do@newpage@pen=10001
+\expandafter\let\csname output@-\the\do@newpage@pen\endcsname\relax
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@clearfloatplacement}
+% The procedure \cmd\@clearfloatplacement\ sets all of the float placement parameters
+% to completely permissive values. The standard values appear as comments.
+% \begin{macrocode}
+\def\@clearfloatplacement{%
+ \global\@topnum \maxdimen % \c@topnumber
+ \global\@toproom \maxdimen % \topfraction\@colht
+ \global\@botnum \maxdimen % \c@bottomnumber
+ \global\@botroom \maxdimen % \bottomfraction\@colht
+ \global\@colnum \maxdimen % \c@totalnumber
+%\global\@fpmin \z@ % \floatpagefraction\@colht
+ \global\@dbltopnum \maxdimen % \c@dbltopnumber
+ \global\@dbltoproom \maxdimen % \dbltopfraction\@colht
+ \global\@textmin \z@ % \@colht\advance \@textmin -\@dbltoproom
+ \global\@fpmin \z@ % \dblfloatpagefraction\textheight
+ \let\@testfp\@gobble
+ \appdef\@setfloattypecounts{\@fpstype16\advance\@fpstype\m@ne}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@doclearpage}
+% The \cmd\@doclearpage\ procedure is now obsoleted, as is \cmd\@makefcolumn, which it invoked.
+% \begin{macrocode}
+\let\@doclearpage\@undefined
+\let\@makefcolumn\@undefined
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\clr@top@firstmark}
+% \begin{macro}{\set@top@firstmark}
+% \begin{macro}{\@outputpage}
+% We want accurate values of \cmd\topmark\ and \cmd\firstmark, but we must deal with
+% the fact that there are many different ways of contributing material
+% to the page. Only upon the first contribution to the page is the value of \cmd\topmark\
+% accurate. However, with \cmd\firstmark\ we must potentially examine each contribution
+% because the first mark on the page may happen to fall in the last piece of material contributed.
+%
+% To begin, we define the procedure that initializes the macros to appropriate flag values.
+% \begin{macrocode}
+\def\clr@top@firstmark{%
+ \global\let\saved@@topmark\@undefined
+ \global\let\saved@@firstmark\@empty
+ \global\let\saved@@botmark\@empty
+}%
+\clr@top@firstmark
+% \end{macrocode}
+%
+% Note that the flag value for \cmd\saved@@topmark\ is \cmd\@undefined, just as one would
+% expect. But that for \cmd\saved@@firstmark\ and \cmd\saved@@botmark\ is \cmd\@empty.
+%
+% Next, we define procedure \cmd\set@top@firstmark; it will be exercised everywhere material is contributed,
+% capturing the mark values if appropriate.
+% \begin{macrocode}
+\def\set@top@firstmark{%
+ \@ifxundefined\saved@@topmark{\expandafter\gdef\expandafter\saved@@topmark\expandafter{\@@topmark}}{}%
+ \@if@empty\saved@@firstmark{\expandafter\gdef\expandafter\saved@@firstmark\expandafter{\@@firstmark}}{}%
+ \@if@empty\@@botmark{}{\expandafter\gdef\expandafter\saved@@botmark\expandafter{\@@botmark}}%
+}%
+% \end{macrocode}
+% When should \cmd\set@top@firstmark\ be called?
+% A good candidate for a universal procedure for handling contributed material is
+% the natural output routine; are any other calls needed?
+%
+% Yes, in \cmd\save@column\ we must execute \cmd\set@top@firstmark\ because we are about to
+% save away \cmd\box\cmd\@cclv, and we will never see its marks again (unless it is unboxed into the MVL),
+% because \TeX\ lets one access a box's marks only within an output routine that has put that box into \cmd\box\cmd\@cclv.
+%
+% As soon as a page is shipped out, we initialize the two macros that
+% hold the values of \cmd\topmark\ and \cmd\firstmark, respectively.
+% \LaTeX\ has exactly one procedure \cmd\@outputpage\ that does \cmd\shipout,
+% which is as it should be: we tailpatch it, and the job is done.
+% \begin{macrocode}
+\appdef\@outputpage{%
+ \clr@top@firstmark
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Other interfaces to \LaTeX}%
+%
+% \begin{macro}{\@float}
+% \begin{macro}{\@dblfloat}
+% \begin{macro}{\@yfloat}
+% \begin{macro}{\fps@}
+% \begin{macro}{\fpsd@}
+% The \LaTeX\ kernel procedures \cmd\@float\ and \cmd\@dblfloat\ are treated on an equal footing.
+% Each now takes environment-specific float placement defaults.
+% If none are defined for the calling environment, we apply a default.
+%
+% A parameter is passed that will set the width of text within the float, normally \cmd\columnwidth,
+% and in the "dbl" version, \cmd\textwidth. However, an environment such as \env{turnpage}
+% may change the meanings of these macros to allow turnpage floats.
+%
+% \begin{macrocode}
+\def\@float#1{%
+ \@ifnextchar[{%}]{%Brace-matching klootch
+ \@yfloat\width@float{#1}%
+ }{%
+ \@ifxundefined@cs{fps@#1}{%
+ \edef\reserved@a{\noexpand\@yfloat\noexpand\width@float{#1}[\csname fps@\endcsname]}\reserved@a
+ }{%
+ \edef\reserved@a{\noexpand\@yfloat\noexpand\width@float{#1}[\csname fps@#1\endcsname]}\reserved@a
+ }%
+ }%
+}%
+\def\@dblfloat#1{%
+ \@ifnum{\pagegrid@col=\@ne}{%
+ \@float{#1}%
+ }{%
+ \@ifnextchar[{%}]{%Brace-matching klootch
+ \@yfloat\widthd@float{#1}%
+ }{%
+ \@ifxundefined@cs{fpsd@#1}{%
+ \edef\reserved@a{\noexpand\@yfloat\noexpand\widthd@float{#1}[\csname fpsd@\endcsname]}\reserved@a
+ }{%
+ \edef\reserved@a{\noexpand\@yfloat\noexpand\widthd@float{#1}[\csname fpsd@#1\endcsname]}\reserved@a
+ }%
+ }%
+ }%
+}%
+\def\@yfloat#1#2[#3]{%
+ \@xfloat{#2}[#3]%
+ \hsize#1\linewidth\hsize
+ \minipagefootnote@init
+}%
+\def\fps@{tbp}%
+\def\fpsd@{tp}%
+\def\width@float{\columnwidth}%
+\def\widthd@float{\textwidth}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\end@float}
+% \begin{macro}{\end@dblfloat}
+% \begin{macro}{\end@@float}
+% \begin{macro}{\check@currbox@count}
+% \begin{macro}{\minipagefootnote@init}
+% \begin{macro}{\minipagefootnote@here}
+% \LaTeX\ kernel procedures \cmd\end@float\ and \cmd\end@dblfloat\
+% have been changed to work alike; in particular, floats of both classes
+% are deferred into the same queue.
+% This measure ensures that they will be placed in their original order,
+% an aspect in which \LaTeX\ is broken.
+%
+% Note: when retrieving floats from the queues, we can differentiate those of the two categories
+% by the width of the box.
+%
+% Floats are processed via an output routine message, and are checked for
+% sanity in re the float placement options. In the case of full-page-width floats,
+% we ensure that the h and b float placement options are never asserted, because they
+% make no sense.
+%
+% Note that if we get to the end of the float box and still have pending
+% footnotes, we put then out.
+%
+% LaTeX Bug note: if a user types \cmd\begin{table*}[h], the float will never succeed in being placed!
+% we try to catch such cases.
+%
+% Note that the macro \cmd\check@currbox@count\ trys to catch cases where the float placement options
+% are such that the float can never be placed.
+% \begin{macrocode}
+\def\end@float{%
+ \end@@float{%
+ \check@currbox@count
+ }%
+}%
+\def\end@dblfloat{%
+ \@ifnum{\pagegrid@col=\@ne}{%
+ \end@float
+ }{%
+ \end@@float{%
+ \@boxfpsbit\@currbox{1}\@ifodd\@tempcnta{\global\advance\count\@currbox\m@ne}{}%
+ \@boxfpsbit\@currbox{4}\@ifodd\@tempcnta{\global\advance\count\@currbox-4\relax}{}%
+ \global\wd\@currbox\textwidth % Klootch
+ \check@currbox@count
+ }%
+ }%
+}%
+\def\end@@float#1{%
+ \minipagefootnote@here
+%\minipagefootnotes
+ \@endfloatbox
+ #1%
+ \@ifnum{\@floatpenalty <\z@}{%
+ \@largefloatcheck
+ \@cons\@currlist\@currbox
+ \@ifnum{\@floatpenalty <-\@Mii}{%
+ \do@output@cclv{\@add@float}%
+ }{%
+ \vadjust{\do@output@cclv{\@add@float}}%
+ \@Esphack
+ }%
+ }{}%
+}%
+\def\check@currbox@count{%
+ \@ifnum{\count\@currbox>\z@}{%
+ \count@\count\@currbox\divide\count@\sixt@@n\multiply\count@\sixt@@n
+ \@tempcnta\count\@currbox\advance\@tempcnta-\count@
+ \@ifnum{\@tempcnta=\z@}{%
+ \ltxgrid@warn{Float cannot be placed}%
+ }{}%
+ }{%
+ % Is a \marginpar
+ }%
+}%
+\providecommand\minipagefootnote@init{}%
+\providecommand\minipagefootnote@here{}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@specialoutput}
+% The \cmd\@add@float\ procedure used to reside in standard \LaTeX's \cmd\@specialoutput,
+% which is no more.
+%
+% Historical Note: \cmd\@specialoutput\ and Lamport's method of an output routine dispatcher
+% is the genesis of our more powerful and refined way of using \TeX's output routine to
+% safely accomplish page makeup tasks. To it and to him we owe acknowledgement and thanks.
+% \begin{macrocode}
+\let\@specialoutput\@undefined
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@add@float}
+% In the following, we do not need to execute \cmd\@reinserts, which was wrong anyway, as you cannot
+% reliably recover insertions when they split (unless you have a way of reinserting the captured insertion
+% ahead of the split-off part).
+%
+% Now that full-page-width floats are being processed the same as column floats, we
+% have to nip in here and cause them always to be deferred.
+%
+% At the very end, the \cmd\vsize\ is adjusted for any newly committed float.
+% \begin{macrocode}
+\def\@add@float{%
+ \@pageht\ht\@cclv\@pagedp\dp\@cclv
+ \unvbox\@cclv
+ \@next\@currbox\@currlist{%
+ \csname @floatselect@sw@\thepagegrid\endcsname\@currbox{%
+ \@ifnum{\count\@currbox>\z@}{%
+ \advance \@pageht \@pagedp
+ \advance \@pageht \vsize \advance \@pageht -\pagegoal % do not assume \holdinginserts is cleared!
+% \@ifvbox\@kludgeins{%
+% \@ifdim{\wd\@kludgeins=\z@}{%
+% \advance \@pageht \ht\@kludgeins
+% }{}%
+% }{}%
+% \@reinserts
+ \@addtocurcol % Commit an h float
+ }{%
+% \@reinserts
+ \@addmarginpar
+ }%
+ }{%
+ \@resethfps
+ \@cons\@deferlist\@currbox
+ }%
+ }{\@latexbug}%
+ \@ifnum{\outputpenalty<\z@}{%
+ \@if@sw\if@nobreak\fi{%
+ \nobreak
+ }{%
+ \addpenalty \interlinepenalty
+ }%
+ }{}%
+ \set@vsize
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@reinserts}
+% The \cmd\@reinserts\ procedure of standard \LaTeX\ is now obsoleted.
+% \begin{macrocode}
+\let\@reinserts\@undefined
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@addtocurcol}
+% We modify the \cmd\@addtocurcol\ procedure of standard \LaTeX\
+% so that a float placed ``here'' may break over pages.
+% \begin{macrocode}
+\def \@addtocurcol {%
+ \@insertfalse
+ \@setfloattypecounts
+ \ifnum \@fpstype=8
+ \else
+ \ifnum \@fpstype=24
+ \else
+ \@flsettextmin
+ \advance \@textmin \@textfloatsheight
+ \@reqcolroom \@pageht
+ \ifdim \@textmin>\@reqcolroom
+ \@reqcolroom \@textmin
+ \fi
+ \advance \@reqcolroom \ht\@currbox
+ \ifdim \@colroom>\@reqcolroom
+ \@flsetnum \@colnum
+ \ifnum \@colnum>\z@
+ \@bitor\@currtype\@deferlist
+ \if@test
+ \else
+ \@bitor\@currtype\@botlist
+ \if@test
+ \@addtobot
+ \else
+ \ifodd \count\@currbox
+ \advance \@reqcolroom \intextsep
+ \ifdim \@colroom>\@reqcolroom
+ \global \advance \@colnum \m@ne
+ \global \advance \@textfloatsheight \ht\@currbox
+ \global \advance \@textfloatsheight 2\intextsep
+ \@cons \@midlist \@currbox
+ \if@nobreak
+ \nobreak
+ \@nobreakfalse
+ \everypar{}%
+ \else
+ \addpenalty \interlinepenalty
+ \fi
+ \vskip \intextsep
+ \unvbox\@currbox %AO
+ \penalty\interlinepenalty
+ \vskip\intextsep
+ \ifnum\outputpenalty <-\@Mii \vskip -\parskip\fi
+ \outputpenalty \z@
+ \@inserttrue
+ \fi
+ \fi
+ \if@insert
+ \else
+ \@addtotoporbot
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \if@insert
+ \else
+ \@resethfps
+ \@cons\@deferlist\@currbox
+ \fi
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\if@twocolumn}
+% The \cmd\newif\ switch \cmd\if@twocolumn\ is entirely unused. However its access words are invoked by
+% \LaTeX's \cmd\document\ procedure, so we de-fang it.
+% \begin{macrocode}
+\@twocolumnfalse
+\let\@twocolumntrue\@twocolumnfalse
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@addmarginpar}
+% The procedure \cmd\@addmarginpar\ used to access \cmd\if@twocolumn, but that switch is not reliable;
+% the better way is to use \cmd\thepagegrid. We establish a convention for a page-grid-oriented
+% procedure, e.g., \cmd\@addmarginpar@one, that emits a boolean, telling this procedure
+% whether to set the marginpar on the left or right.
+% \begin{macrocode}
+\def\@addmarginpar{%
+ \@next\@marbox\@currlist{%
+ \@cons\@freelist\@marbox\@cons\@freelist\@currbox
+ }\@latexbug
+ \setbox\@marbox\hb@xt@\columnwidth{%
+ \csname @addmarginpar@\thepagegrid\endcsname{%
+ \hskip-\marginparsep\hskip-\marginparwidth
+ \box\@currbox
+ }{%
+ \hskip\columnwidth\hskip\marginparsep
+ \box\@marbox
+ }%
+ \hss
+ }%
+ \setbox\z@\box\@currbox
+ \@tempdima\@mparbottom
+ \advance\@tempdima -\@pageht
+ \advance\@tempdima\ht\@marbox
+ \@ifdim{\@tempdima >\z@}{%
+ \@latex@warning@no@line {Marginpar on page \thepage\space moved}%
+ }{%
+ \@tempdima\z@
+ }%
+ \global\@mparbottom\@pageht
+ \global\advance\@mparbottom\@tempdima
+ \global\advance\@mparbottom\dp\@marbox
+ \global\advance\@mparbottom\marginparpush
+ \advance\@tempdima -\ht\@marbox
+ \global\setbox \@marbox
+ \vbox {\vskip \@tempdima
+ \box \@marbox}%
+ \global \ht\@marbox \z@
+ \global \dp\@marbox \z@
+ \kern -\@pagedp
+ \nointerlineskip
+ \box\@marbox
+ \nointerlineskip
+ \hbox{\vrule \@height\z@ \@width\z@ \@depth\@pagedp}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{turnpage}
+% Any float (viz., \env{figure} or \env{table}) within the scope of this environment
+% will be a turnpage float: It will be assumed to occupy an entire page (constitute a float page),
+% the width will be \cmd\textheight, the height \cmd\textwidth, and the entire float will be presented
+% rotated 90 degrees.
+%
+% The implementation requires the services of the \cmd\rotatebox\ command, so we supply a dummy definition
+% that explains things to the user.
+% \begin{macrocode}
+\newenvironment{turnpage}{%
+ \def\width@float{\textheight}%
+ \def\widthd@float{\textheight}%
+ \appdef\@endfloatbox{%
+ \@ifxundefined\@currbox{%
+ \ltxgrid@warn{Cannot rotate! Not a float}%
+ }{%
+ \setbox\@currbox\vbox to\textwidth{\vfil\unvbox\@currbox\vfil}%
+ \global\setbox\@currbox\vbox{\rotatebox{90}{\box\@currbox}}%
+ }%
+ }%
+}{%
+}%
+\def\rotatebox@dummy#1#2{%
+ \ltxgrid@warn{You must load the graphics or graphicx package in order to use the turnpage environment}%
+ #2%
+}%
+\AtBeginDocument{%
+ \@ifxundefined\rotatebox{\let\rotatebox\rotatebox@dummy}{}%
+}%
+% \end{macrocode}
+% \end{environment}
+%
+%
+% \subsection{One-off output routines}
+%
+% These procedures are executed in lieu of \cmd\the\cmd\output\ when the output penalty has the associated flag value.
+%
+% \begin{macro}{output@-1073741824}
+% The first one-off output routine handles the end of the job, wherein
+% \LaTeX\ executes \cmd\@@end, and breaks to the output with a penalty of
+% $"40000000 = 2^{32}/4$. We simply discard \cmd\box\cmd\@cclv\ and leave.
+% This means that \LaTeX\ is obligated to do \cmd\clearpage\ as part of
+% its \enve{document} processing, otherwise material will be lost.
+% \begin{macrocode}
+\@namedef{output@-1073741824}{%"40000000
+ \deadcycles\z@
+%\showbox\@cclv
+ \setbox\z@\box\@cclv
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\save@column@pen}
+% The one-off output routine associated with \cmd\penalty\cmd\save@column@pen\
+% will be called within a sequence of three such routines by \cmd\execute@message
+% or its companion routine \cmd\execute@message@insert.
+% This procedure must save away any the current page and preserve marks.
+% \begin{macrocode}
+\mathchardef\save@column@pen=10016
+\@namedef{output@-\the\save@column@pen}{\save@column}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@cclv@saved}
+% We take over the \cmd\@holdpg\ box register. Hereafter,
+% we no longer use the \cmd\@holdpg\ box register, so let the world know.
+% This should decisively break packages that assume standard \LaTeX.
+% Breaking decisively is preferred to quietly proceeding erroneously.
+% \begin{macrocode}
+\let \@cclv@saved \@holdpg
+\let \@holdpg \@undefined
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\save@column}
+% The procedure \cmd\save@column\ does the actual work of saving away the material
+% on the page. It is invoked both by \cmd\save@column@pen\ and by \cmd\save@column@insert@pen.
+% We save \cmd\box\cmd\@cclv\ and the primitive \cmd\@@topmark.
+% \begin{macrocode}
+\def\save@column{%
+ \@ifvoid\@cclv@saved{%
+ \set@top@firstmark
+ \global\@topmark@saved\expandafter{\@@topmark}%
+ }{}%
+ \global\setbox\@cclv@saved\vbox{%
+ \@ifvoid\@cclv@saved{}{%
+ \unvbox\@cclv@saved
+ \marry@baselines
+ }%
+ \unvbox\@cclv
+ \lose@breaks
+ \setbox\z@\lastbox
+ }%
+}%
+\newtoks\@topmark@saved
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\prep@cclv}
+% The procedure \cmd\prep@cclv\ is used by message handlers to set up their environment
+% to ape that of the usual output routine, with the boxed-up page in \cmd\box\cmd\@cclv.
+% Here, we retrieve the material from \cmd\@cclv@saved, where it was saved away by
+% the one-off output routine associated with \cmd\save@column@pen.
+% \begin{macrocode}
+\def\prep@cclv{%
+ \setbox\z@\box\@cclv
+ \setbox\@cclv\box\@cclv@saved
+ \vbadness\@M
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\save@column@insert@pen}
+% The one-off output routine associated with \cmd\penalty\cmd\save@column@insert@pen\
+% is similar to that of \cmd\save@column@pen\ augmented with the processing of insertions.
+% It is called by \cmd\execute@message@insert\ (i.e., at a grid change)
+% and saves away the current page and preserves marks.
+% In addition, it saves away any insertions that fall on the current page.
+% As with the regular output routine, it executes in two phases,
+% first with \cmd\holdinginserts\ set, then with it cleared.
+% \begin{macrocode}
+\mathchardef\save@column@insert@pen=10017
+\@namedef{output@-\the\save@column@insert@pen}{\toggle@insert\savecolumn@holding\savecolumn@moving}%
+% \end{macrocode}
+% The procedure \cmd\savecolumn@holding\ is the first phase of saving a column with its inserts.
+% This phase must detect and remedy the one circumstance that will confound our efforts to propagate marks.
+% It is similar to \cmd\output@holding, except that we have to deal with the protection box, which must
+% remain, because the messaging mechanism is being used.
+%
+% If it appears that we have the pathological ``Big Bad Box'' case at hand, we use the \cmd\dead@cycle@repair@protected\
+% procedure instead of \cmd\dead@cycle\ to do our dead cycle.
+% \begin{macrocode}
+\def\savecolumn@holding{%
+ \@if@exceed@pagegoal{\unvcopy\@cclv\setbox\z@\lastbox}{%
+ \setbox\z@\vbox{\unvcopy\@cclv\setbox\z@\lastbox}%
+ \outputdebug@sw{{\tracingall\scrollmode\showbox\z@}}{}%
+ \dimen@\ht\@cclv\advance\dimen@-\ht\z@
+ \dead@cycle@repair@protected\dimen@
+ }{%
+ \dead@cycle
+ }%
+}%
+% \end{macrocode}
+% The procedure \cmd\save@column@moving\ is the second phase of saving a column with its inserts.
+% Now that \cmd\holdinginserts\ is cleared, we can look in the various \cmd\insert\ registers for
+% our inserts (at present there is only one, \cmd\footins).
+% if anything is there, we save it away and ask for another cycle (because it may have split).
+%
+% Note that the message that is about to be executed had better deal properly with the contents of
+% the \cmd\footins@saved\ box.
+% \begin{macrocode}
+\def\savecolumn@moving{%
+ \@cclv@nontrivial@sw{%
+ \save@column
+ }{%
+ {\setbox\z@\box\@cclv}%
+ }%
+ \@ifvoid\footins{}{%
+ \outputdebug@sw{{\tracingall\scrollmode\showbox\footins}}{}%
+ \global\setbox\footins@saved\vbox{\unvbox\footins@saved\marry@baselines\unvbox\footins}%
+ \protect@penalty\save@column@insert@pen
+ }%
+}%
+\newbox\footins@saved
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\save@message@pen}
+% The one-off output routine associated with \cmd\penalty\cmd\save@message@pen\
+% saves away the message that has been passed.
+% This procedure is penultimate in a sequence of one-off output routine calls;
+% earlier ones have saved away the MVL and preserved marks, the last executes the message.
+%
+% Note that we are passing tokens to \TeX's primitive \cmd\mark\ mechanism, so we must ensure
+% that they are not inappropriately expanded. We use the same mechanism for all such cases,
+% namely \cmd\let@mark.
+%
+% Note: we expect that \cmd\box\cmd\@cclv's contents are well known:
+% \cmd\topskip, protection box, and a \cmd\mark, the latter havin the
+% message.
+% But if we came here via \cmd\penalty 10017, there might be an \cmd\insert\ node here as well, because
+% a footnote split.
+% Because this procedure simply voids out \cmd\box\cmd\@cclv, such material would be lost.
+% Perhaps we can repair things by manipulating the \cmd\insert \ mechanism temporarily.
+% \begin{macrocode}
+\mathchardef\save@message@pen=10018
+\@namedef{output@-\the\save@message@pen}{\save@message}%
+\def\save@message{%
+ \setbox\z@\box\@cclv %FIXME: what if \box\@cclv is not empty?
+ \toks@\expandafter{\@@firstmark}%
+ \expandafter\gdef\expandafter\@message@saved\expandafter{\the\toks@}%
+ \expandafter\do@@mark\expandafter{\the\@topmark@saved}%
+}%
+\gdef\@message@saved{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\execute@message@pen}
+% The one-off output routine associated with \cmd\execute@message@pen\
+% simply executes the given message. It is last in a sequence of one-off output routine calls;
+% earlier ones have saved all that require saving.
+% \begin{macrocode}
+\mathchardef\execute@message@pen=10019
+\@namedef{output@-\the\execute@message@pen}{\@message@saved}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Output messages}
+%
+% Message handlers are procedures that execute output messages, tokens that are passed to
+% the output routine for execution in an environment appropriate to page makeup.
+%
+% How it works. We put down three large negative penalties, each of which will be handled by
+% the output dispatcher (not the output routine), each penalty being protected by
+% a removable, non-discardable item (i.e., a box).
+% Either three or four invocations of one-off output routines are involved per message.
+%
+% We make the last of the three protection boxes have a depth equal to the value of \cmd\prevdepth\
+% that was current when the procedure is called. This effectively restores \cmd\prevdepth.
+%
+% In each case, the one-off output routine will remove the extraneous box we have inserted.
+% And the second and third one-off routines will simply void \cmd\box\cmd\@cclv, because its contents
+% are entirely artificial.
+%
+% FIXME: not so! If \cmd\holdinginserts\ is cleared, that box may have an insert node; it must be preserved, too.
+%
+% The first routine saves away the current column contents and remembers the \cmd\topmark\ for later
+% use. There is a variant routine that first clears \cmd\holdinginserts, so that the message can
+% handle any inserts present in the boxed-up page; this of course entails yet another
+% visit to the output routine.
+%
+% The penultimate routine saves away the tokens transmitted in via the \cmd\@@mark: the argument of
+% the macro. These tokens are of course the very thing we wish to execute within the safety
+% of the output routine. It also puts down a mark containing the \cmd\topmark\ tokens saved
+% by the first routine. By this means, the mark, which we have clobbered, is restored.
+%
+% The last routine simply executes the given tokens.
+% In the course of doing this, it must take care of \cmd\box\cmd\@cclv, either by shipping it out,
+% or by \cmd\unvbox ing it onto the MVL.
+%
+% \begin{macro}{\execute@message}
+% The procedure \cmd\execute@message\ simply calls the utility procedure \cmd\@execute@message\
+% with a penalty value for the standard treatment.
+% \begin{macrocode}
+\def\execute@message{%
+ \@execute@message\save@column@pen %Implicit #2
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\execute@message@insert}
+% The procedure \cmd\execute@message@insert\ is like \cmd\execute@message\ in all respects
+% except that the penalty value is \cmd\save@column@insert@pen, which arranges for the
+% message handler involved to deal with the page's insertions.
+% At the same time, we prepare the \cmd\footins\ box so that these insertions can be dealt with.
+%
+% Note:
+% If more insertions are added to \LaTeX\ (presumably via \cmd\newinsert), then they
+% must be dealt with in a way entirely analogous to \cmd\footins.
+% \begin{macrocode}
+\def\execute@message@insert#1{%
+ \@execute@message\save@column@insert@pen{\setbox\footins\box\footins@saved#1}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@execute@message}
+% The utility procedure \cmd\@execute@message\ is called by \cmd\execute@message\ and \cmd\execute@message@insert.
+% We prepare by creating a \cmd\vbox\ containing all the needed nodes and proceed by simply
+% \cmd\unvbox ing that box onto the MVL.
+% We ensure that \cmd\box\cmd\@cclv\ is properly set up for the output message handler
+% by always inserting \cmd\prep@cclv\ in advance of the argument.
+%
+% Note that each one-off output routine is invoked effectively the same as
+% \cmd\protect@penalty, except that the second invocation involves an additional
+% \cmd\mark\ node, and the third a specially prepared protection box.
+%
+% Note also that \TeX's primitive \cmd\mark\ is called here without any expansion protection.
+% This is the only place where it is called that way, but it's OK because those tokens
+% have have been pre-expanded by procedures that call \cmd\execute@message.
+% FIXME: all procedures calling \cmd\execute@message\ must pre-expand their tokens!
+% \begin{macrocode}
+\long\def\@execute@message#1#2{%
+ \begingroup
+ \dimen@\prevdepth\@ifdim{\dimen@<\z@}{\dimen@\z@}{}%
+ \setbox\z@\vbox{%
+ \protect@penalty#1%
+ \protection@box
+ \toks@{\prep@cclv#2}%
+ \@@mark{\the\toks@}%
+ \penalty-\save@message@pen
+% \hbox{\vrule\@height\z@\@width\z@\@depth\dimen@}%
+ \setbox\z@\null\dp\z@\dimen@\ht\z@-\dimen@
+ \nointerlineskip\box\z@
+ \penalty-\execute@message@pen
+ }\unvbox\z@
+ \endgroup
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\do@output@cclv}
+% The procedure \cmd\do@output@cclv\ provides access to message handlers at their simplest.
+% The message will execute in the usual environment of the output routine, with
+% the boxed-up page in \cmd\box\cmd\@cclv, and we assume that \cmd\holdinginserts\ remains set.
+% This procedure must be invoked within main vertical mode;
+% it is the obligation of the macro writer to ensure that this is the case.
+% \begin{macrocode}
+\def\do@output@cclv{\execute@message}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\do@output@MVL}
+% The procedure \cmd\do@output@MVL, like \cmd\do@output@cclv, is an interface for messages,
+% but provides two additional services: the command may also be invoked in horizontal mode, and
+% the message handler will execute with the MVL unboxed.
+% \begin{macrocode}
+\def\do@output@MVL#1{%
+ \@ifvmode{%
+ \begingroup\execute@message{\unvbox\@cclv#1}\endgroup
+ }{%
+ \@ifhmode{%
+ \vadjust{\execute@message{\unvbox\@cclv#1}}%
+ }{%
+ \@latexerr{\string\do@output@MVL\space cannot be executed in this mode!}\@eha
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\lose@breaks}
+% The purpose of this procedure is to get rid of all the extraneous
+% \cmd\penalty\cmd\@M\ nodes that tend to build up in the MVL.
+% \begin{macrocode}
+\def\lose@breaks{%
+ \loopwhile{%
+ \count@\lastpenalty
+ \@ifnum{\count@=\@M}{% 10000 is a TeX magic number!
+ \unpenalty\true@sw
+ }{%
+ \false@sw
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\removestuff}
+% \cmd\removestuff\ is a document-level command that removes the bottom skip glue item
+% from the MVL.
+% \begin{macrocode}
+\def\removestuff{\do@output@MVL{\unskip\unpenalty}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\removephantombox}
+% The procedure \cmd\removephantombox\ is a special-purpose message handler exclusively for
+% preventing incorrect spacing above display math. It must be issued in
+% horizontal mode within the phantom paragraph generated when display math starts up in
+% vertical mode.
+% \begin{macrocode}
+\def\removephantombox{%
+ \vadjust{%
+ \execute@message{%
+ \unvbox\@cclv
+ \setbox\z@\lastbox
+ \unskip
+ \unskip
+ \unpenalty
+ \penalty\predisplaypenalty
+ \vskip\abovedisplayskip
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\addstuff}
+% \cmd\addstuff\ is a document-level command that adds penalty, glue, or both to the
+% MVL. The penalty and glue items are rearranged so that all penalties nodes precede all the glue nodes,
+% which is the canonical arrangement.
+% \begin{macrocode}
+\def\addstuff#1#2{\edef\@tempa{\noexpand\do@output@MVL{\noexpand\@addstuff{#1}{#2}}}\@tempa}%
+\def\@addstuff#1#2{%
+ \skip@\lastskip\unskip
+ \count@\lastpenalty\unpenalty
+ \@if@empty{#1}{}{\penalty#1\relax}%
+ \@ifnum{\count@=\z@}{}{\penalty\count@}%
+ \vskip\skip@
+ \@if@empty{#2}{}{\vskip#2\relax}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\replacestuff}
+% \cmd\replacestuff\ is a document-level command similar to \cmd\addstuff;
+% but it replaces penalty, glue, or both in the MVL.
+% The penalty and glue items are rearranged so that all penalties nodes precede all the glue nodes,
+% which is the canonical arrangement.
+% \begin{macrocode}
+\def\replacestuff#1#2{\edef\@tempa{\noexpand\do@output@MVL{\noexpand\@replacestuff{#1}{#2}}}\@tempa}%
+\def\@replacestuff#1#2{%
+ \skip@\lastskip\unskip
+ \count@\lastpenalty\unpenalty
+ \@if@empty{#1}{}{%
+ \@ifnum{\count@>\@M}{}{%
+ \@ifnum{\count@=\z@}{\count@=#1\relax}{%
+ \@ifnum{\count@<#1\relax}{}{%
+ \count@=#1\relax
+ }%
+ }%
+ }%
+ }%
+ \@ifnum{\count@=\z@}{}{\penalty\count@}%
+ \@if@empty{#2}{}{%
+ \@tempskipa#2\relax
+ \@ifdim{\z@>\@tempskipa}{%
+ \advance\skip@-\@tempskipa
+ }{%
+ \@ifdim{\skip@>\@tempskipa}{}{%
+ \skip@\@tempskipa
+ }%
+ }%
+ }%
+ \vskip\skip@
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\move@insertions}
+% \begin{macro}{\hold@insertions}
+% \begin{macro}{\move@insert@sw}
+% In order to avoid bolluxing up \cmd\insert\ registers by our one-off
+% output routines, we set \cmd\holdinginserts\ to zero by default and only
+% clear it (briefly) while we handle cases where we want inserts to show up.
+% \begin{macrocode}
+\def\move@insertions{\global\holdinginserts\z@}%
+\def\hold@insertions{\global\holdinginserts\@ne}%
+\hold@insertions
+\def\move@insert@sw{\@ifnum{\holdinginserts=\z@}}%
+\def\toggle@insert#1#2{%
+ \@ifnum{\holdinginserts=\z@}{\hold@insertions#2}{\move@insertions#1}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Messages to alter the page grid}%
+%
+% Here is the implementation of the grid-switching procedures.
+% We perform two checks when changing the page grid; first to ensure that
+% the target page grid is known (defensive programming), second to ensure that
+% the switch is a non-trivial one. The latter check must be performed within
+% the safety of the output routine, so requires using an output message.
+% Thus, a grid change requires two messages, for a total of six visits to the output routine.
+%
+% \begin{macro}{\do@columngrid}
+% Utility procedure \cmd\do@columngrid\ changes the page grid.
+% Note that this command forces an end to the current paragraph. This is necessary, because
+% a page grid change makes no sense unless we can alter the \cmd\hsize\ before commencing to
+% typeset the following paragraph. So the command should never be executed in horizontal mode
+% anyway.
+% \begin{macrocode}
+\def\do@columngrid#1#2{%
+ \par
+ \expandafter\let\expandafter\@tempa\csname open@column@#1\endcsname
+ \@ifx{\relax\@tempa}{%
+ \ltxgrid@warn{Unknown page grid #1. No action taken}%
+ }{%
+ \do@output@MVL{\start@column{#1}{#2}}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\start@column}
+% Procedure \cmd\start@column\ lays down the interrupts to switch the page grid.
+% If the change to the page grid would have been trivial, it bails out.
+% It seems a reasonable tradeoff of processing versus security: once we commit
+% to changing the page grid, we clear \cmd\holdinginserts, so there is no turning back.
+%
+% Note that the second argument to the macro allows us to pass an argument to the
+% page grid that is starting up. This can be handy, because a single procedure can
+% handle multiple page grids, differing only by the value of a parameter.
+%
+% FIXME: this means that you cannot switch between mlt page grids in a single step.
+% But do we want to do this, at all, at all?
+% \begin{macrocode}
+\def\start@column#1#2{%
+ \def\@tempa{#1}\@ifx{\@tempa\thepagegrid}{%
+ \ltxgrid@info{Already in page grid \thepagegrid. No action taken}%
+ }{%
+ \expandafter\execute@message@insert
+ \expandafter{%
+ \csname shut@column@\thepagegrid\expandafter\endcsname
+ \csname open@column@#1\endcsname{#2}%
+ \set@vsize
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\thepagegrid}
+% The macro \cmd\thepagegrid\ tracks what kind of page grid we are in.
+%
+% Note: Access \cmd\thepagegrid\ only within the safety of the output routine.
+%
+% Warning: The page grid should be changed only within the safety of the output routine.
+% People who write multicol page grid mechanisms appear not to understand the matter, so they
+% should particularly heed this warning. Think about it: obviously Lamport did so, which is why
+% his \cmd\twocolumn\ command forced a pagebreak, which is limiting, but safe.
+% \begin{macrocode}
+\def\thepagegrid{one}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Application Note: implementing a page grid}
+%
+% If you want to create a new page grid for \LaTeX,
+% you must define five procedures with specific names:
+% \cmd\open@column@ name, \cmd\shut@column@ name, \cmd\end@column@ name,
+% \cmd\output@column@ name, and \cmd\@addmarginpar@ name, where ``name'' is the
+% name of your page grid.
+%
+% The procedure \cmd\open@column@ name starts the new page grid. It should define \cmd\thepagegrid,
+% deal with \cmd\box\cmd\pagesofar\ and \cmd\box\cmd\footbox\ (perhaps by leaving them alone),
+% and it should set the values of \LaTeX's page layout parameters for the column size and height.
+%
+% The procedure \cmd\shut@column@ name should expect to be called with \cmd\holdinginserts\
+% cleared (it can assume that \cmd\holdinginserts\ will automatically be restored).
+% It should properly deal with insertions (like footnotes); calling \cmd\@makecol\
+% is a good way to do this. It should know that the page grid is being terminated
+% in the middle of a page, so it should make arrangements to carry the footnotes down to the
+% bottom of the column or page, and it should possibly salt away the material for later
+% incorporation into the page. The box registers \cmd\footbox\ and \cmd\pagesofar\ are customarily used
+% for this purpose.
+%
+% The procedure \cmd\end@column@ name should kick out a possibly short page containing all the
+% floats committed to the page. It will be invoked during \cmd\clearpage\ processing.
+% After that, it should \cmd\unvbox\cmd\@cclv.
+%
+% The procedure \cmd\output@column@ name should ship out or commit the current \cmd\@outputbox.
+% In a one-column layout, you ship out; in a multicolumn layout, you commit the box as the contents
+% of a particular column, and if that column is the last, you ship out.
+%
+% The procedure \cmd\@addmarginpar@ name should return a boolean (either \cmd\true@sw\ or \cmd\false@sw\ or an equivalent)
+% to tell the marginpar mechanism to place the marginal material to the right or left, respectively.
+%
+% You can use the existing page grids ``one'' and ``mlt'' as a point of departure for creating others.
+% The former can be the basis for, say, a single-column page grid with a side column.
+%
+% \begin{macro}{\pagesofar}
+% \begin{macro}{\footbox}
+% \begin{macrocode}
+\newbox\pagesofar
+\newbox\footbox
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{One-column page grid}
+%
+% \begin{macro}{\onecolumngrid}
+% \begin{macro}{\open@column@one}
+% \begin{macro}{\shut@column@one}
+% \begin{macro}{\float@column@one}
+% \begin{macro}{\end@column@one}
+% \begin{macro}{\output@column@one}
+% \begin{macro}{\@addmarginpar@one}
+% Here are all the procedures necessary for the standard page grid named ``one'':
+% a single column layout. It is, of course, \LaTeX's familiar \cmd\onecolumn\ layout.
+% We begin with the procedure exposed to the style writer.
+% This is, however, not a \LaTeX\ command; users should not change the page grid.
+% \begin{macrocode}
+\newcommand\onecolumngrid{\do@columngrid{one}{\@ne}}%
+% \end{macrocode}
+%
+% Note that a document class that issues the command \cmd\onecolumn\ will break. This includes
+% \LaTeX's standard classes.dtx-based classes: if your class descends from one of these, you
+% must expunge it of all such commands.
+% \begin{macrocode}
+\let\onecolumn\@undefined
+% \end{macrocode}
+%
+% The procedure \cmd\open@column@one\ takes advantage of the special nature of the one-column
+% page grid to deal with \cmd\box\cmd\pagesofar, therefore it must also reset \cmd\@colroom.
+% \begin{macrocode}
+\def\open@column@one#1{%
+ \unvbox\pagesofar
+ \gdef\thepagegrid{one}%
+ \global\pagegrid@col#1%
+ \global\pagegrid@cur\@ne
+ \set@colht
+%\set@colroom
+ \set@column@hsize\pagegrid@col
+}%
+% \end{macrocode}
+%
+% The procedure \cmd\shut@column@one\ saves away the one-column material into the box register \cmd\pagesofar.
+% Because it is called from a message handler, we are assured that marks are properly taken care of.
+% \begin{macrocode}
+\def\shut@column@one{%
+ \@makecol
+ \global\setbox\pagesofar\vbox{\unvbox\@outputbox\recover@footins}%
+ \set@colht
+%\set@colroom
+}%
+% \end{macrocode}
+%
+% The procedure \cmd\float@column@one\ takes care of a float column that has been built by \cmd\@tryfcolumn,
+% in the single-column page grid.
+% \begin{macrocode}
+\def\float@column@one{%
+ \@makecol
+ \@outputpage
+}%
+% \end{macrocode}
+%
+% The procedure \cmd\end@column@one\ is executed at the end of \cmd\clearpage\ processing,
+% if we were in a one-column page grid, once all permissive float pages have been shipped out.
+% At this point, one could perhaps
+% assume that nothing more need be done, but let us anyway test for committed floats and force a shipout.
+%
+% FIXME: this procedure does the same as \cmd\end@column@mlt
+% (except for the test of \cmd\@ifx@empty\cmd\@dbltoplist):
+% the two could almost be the same procedure.
+%
+% I have changed this procedure to avoid the testing it once did: it simply puts down interrupts,
+% upon which it relies to correctly do what \cmd\clearpage\ requires.
+% \begin{macrocode}
+\def\end@column@one{%
+ \unvbox\@cclv\setbox\z@\lastbox
+ \protect@penalty\do@newpage@pen
+}%
+% \end{macrocode}
+%
+% The procedure \cmd\output@column@one\ is dispatched from the output routine when
+% we have completed a page (that is, a column in a one-column page grid).
+% It ships out the page using the \cmd\@outputpage\ of standard \LaTeX,
+% which has been retained (it is needed also in \cmd\output@column@mlt,
+% and in any case should remain as the sole procedure in \LaTeX\ where \cmd\shipout\ is performed).
+% It will be followed up with an output routine message to prepare a new column.
+% \begin{macrocode}
+\def\output@column@one{%
+ \@outputpage
+}%
+% \end{macrocode}
+%
+% The following procedure determines which side of the page a marginpar will appear.
+% It reproduces the behavior of standard \LaTeX.
+% \begin{macrocode}
+\def\@addmarginpar@one{%
+ \@if@sw\if@mparswitch\fi{%
+ \@ifodd\c@page{\false@sw}{\true@sw}%
+ }{\false@sw}{%
+ \@if@sw\if@reversemargin\fi{\false@sw}{\true@sw}%
+ }{%
+ \@if@sw\if@reversemargin\fi{\true@sw}{\false@sw}%
+ }%
+}%
+% \end{macrocode}
+%
+% The following procedure yields a Boolean value; it determines whether a float in the deferred queue
+% is appropriate for placing. In the one-column grid, all floats are so.
+% \begin{macrocode}
+\def\@floatselect@sw@one#1{\true@sw}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\onecolumngrid@push{%
+ \do@output@MVL{%
+ \@ifnum{\pagegrid@col=\@ne}{%
+ \global\let\restorecolumngrid\@empty
+ }{%
+ \xdef\restorecolumngrid{%
+ \noexpand\start@column{\thepagegrid}{\the\pagegrid@col}%
+ }%
+ \start@column{one}{\@ne}%
+ }%
+ }%
+}%
+\def\onecolumngrid@pop{%
+ \do@output@MVL{\restorecolumngrid}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{Two-column page grid}
+%
+% \begin{macro}{\twocolumngrid}
+% \begin{macro}{\open@column@mlt}
+% \begin{macro}{\shut@column@mlt}
+% \begin{macro}{\end@column@mlt}
+% \begin{macro}{\output@column@mlt}
+% \begin{macro}{\@addmarginpar@mlt}
+% Here are all the procedures necessary for the standard page grid named ``mlt'':
+% the multi-column page grid. With an argument of "2", it is,
+% of course, \LaTeX's familiar \cmd\twocolumn\ layout.
+%
+% We start with the procedure to switch to the two-column page grid.
+% \begin{macrocode}
+\newcommand\twocolumngrid{\do@columngrid{mlt}{\tw@}}%
+% \end{macrocode}
+%
+% The corresponding command of \LaTeX\ is obsolete.
+% \begin{macrocode}
+\let\twocolumn\@undefined
+% \end{macrocode}
+%
+% Of course, \cmd\@topnewpage\ is also obsolete. Just do
+%\begin{quote}
+% \cmd\clearpage\cmd\onecolumngrid<vertical mode material>\cmd\twocolumngrid.
+%\end{quote}
+% \begin{macrocode}
+\let\@topnewpage\@undefined
+% \end{macrocode}
+%
+% If your document class descends from one of \LaTeX's standard classes.dtx-derived
+% classes, it will break. You must expunge from it all such commands.
+%
+% \begin{macrocode}
+\def\open@column@mlt#1{%
+ \gdef\thepagegrid{mlt}%
+ \global\pagegrid@col#1%
+ \global\pagegrid@cur\@ne
+ \set@column@hsize\pagegrid@col
+ \set@colht
+%\set@colroom
+}%
+% \end{macrocode}
+%
+% The procedure \cmd\shut@column@mlt\ ends the current column, balances the columns, and
+% salts away all in \cmd\pagesofar. Because it is called in a message handler,
+% we are assured that marks are handled properly.
+% Attention: because this procedure balances columns, all footnotes are
+% held aside in \cmd\footbox\ for placement at the bottom of the page.
+%
+% Bug note: the last macro executed by this procedure is \cmd\set@colht, but had been erroneously \cmd\set@colroom.
+% I now believe that the latter should be changed pretty much everywhere to the former.
+% \begin{macrocode}
+\def\shut@column@mlt{%
+ \@cclv@nontrivial@sw{%
+ \@makecol
+ \@ifnum{\pagegrid@cur<\pagegrid@col}{%
+ \expandafter\global\expandafter\setbox\csname col@\the\pagegrid@cur\endcsname\box\@outputbox
+ \global\advance\pagegrid@cur\@ne
+ }{}%
+ }{%
+ {\setbox\z@\box\@cclv}%
+ }%
+ \@ifnum{\pagegrid@cur>\@ne}{%
+ \csname balance@\the\pagegrid@col\endcsname
+ \grid@column{}%
+ \@combinepage
+ \@combinedblfloats
+ \global\setbox\pagesofar\box\@outputbox
+ }{}%
+ \set@colht
+}%
+% \end{macrocode}
+%
+% The procedure \cmd\float@column@mlt\ takes care of a float page that has been built by \cmd\@tryfcolumn,
+% in the multi-column page grid.
+% \begin{macrocode}
+\def\float@column@mlt{%
+ \@combinepage
+ \@combinedblfloats
+ \@outputpage
+ \global\pagegrid@cur\@ne
+ \protect@penalty\do@startpage@pen
+}%
+% \end{macrocode}
+%
+% The procedure \cmd\end@column@mlt\ is executed at the end of \cmd\clearpage\ processing,
+% if we were in a multi-column page grid, once all permissive float pages have been shipped out.
+% If no floats are committed and if no columns are yet filled, we have nothing to do.
+% Otherwise, we kick out a column and try again.
+%
+% Note that in our code to kick out a column, we must deal properly with the case where the column
+% is trivial: it will have nothing but \cmd\topskip\ glue plus a protection box. We substitute an ordinary
+% \cmd\null\ for the protection box.
+%
+% \begin{macrocode}
+\def\end@column@mlt{%
+ \@ifx@empty\@toplist{%
+ \@ifx@empty\@botlist{%
+ \@ifx@empty\@dbltoplist{%
+ \@ifx@empty\@deferlist{%
+ \@ifnum{\pagegrid@cur=\@ne}{%
+ \false@sw
+ }{%
+ \true@sw
+ }%
+ }{%
+ \true@sw
+ }%
+ }{%
+ \true@sw
+ }%
+ }{%
+ \true@sw
+ }%
+ }{%
+ \true@sw
+ }%
+ % true = kick out a column and try again
+ {%
+ \@cclv@nontrivial@sw{%
+ \unvbox\@cclv\setbox\z@\lastbox
+ }{%
+ \unvbox\@cclv\setbox\z@\lastbox\unskip\null
+ }%
+ \protect@penalty\do@newpage@pen
+ \protect@penalty\do@endpage@pen
+ }{%
+ \unvbox\@cclv\setbox\z@\lastbox
+ }%
+}%
+% \end{macrocode}
+% The procedure \cmd\output@column@mlt (cf. \cmd\output@column@one)
+% is dispatched from the output routine when
+% we have completed a column in a multi-column page grid).
+% (It replaces the \cmd\@outputdblcol\ of standard \LaTeX.)
+% If a complete set of columns is at hand, it ships out the page and
+% lays down an interrupt for \cmd\do@startpage@pen, which will commit the
+% full-page-width floats to the next page.
+% Like \cmd\output@column@mlt, this is followed by
+% an output routine message to prepare a new column.
+% \begin{macrocode}
+\def\output@column@mlt{%
+ \@ifnum{\pagegrid@cur<\pagegrid@col}{%
+ \expandafter\global\expandafter\setbox\csname col@\the\pagegrid@cur\endcsname\box\@outputbox
+ \global\advance\pagegrid@cur\@ne
+ }{%
+ \set@adj@colht\dimen@
+% \advance\dimen@-\topskip
+ \grid@column{}%{\dimen@}%
+ \@combinepage
+ \@combinedblfloats
+ \@outputpage
+ \global\pagegrid@cur\@ne
+ \protect@penalty\do@startpage@pen
+ }%
+}%
+% \end{macrocode}
+% The procedure \cmd\output@column@mlt\ obsoletes \LaTeX's \cmd\@outputdblcol
+% \begin{macrocode}
+\let\@outputdblcol\@undefined
+% \end{macrocode}
+%
+% The following procedure yields a Boolean value; it determines whether a float in the deferred queue
+% is appropriate for placement in the column. In the multi-column grid, only those narrower than \cmd\textwidth\ are so.
+% \begin{macrocode}
+\def\@floatselect@sw@mlt#1{\@if@notdblfloat{#1}}%
+% \end{macrocode}
+%
+% The following procedure determines which side of the page a marginpar will appear.
+% It reproduces the behavior of standard \LaTeX.
+% \begin{macrocode}
+\def\@addmarginpar@mlt{% emits a boolean
+ \@ifnum{\pagegrid@cur=\@ne}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{Page grid utility procedures}
+%
+% \begin{macro}{\pagegrid@cur}
+% \begin{macro}{\pagegrid@col}
+% \begin{macro}{\col@}
+% \begin{macro}{\pagegrid@init}
+% We take over \LaTeX's \cmd\col@number\ and \cmd\@leftcolumn, which are obsolete.
+% We create two counters to hold the columns in the page grid and the current column within.
+% We also create the first of a set of box registers to hold the committted columns.
+% \begin{macrocode}
+\let\pagegrid@cur\col@number
+\let\col@number\@undefined
+\newcount\pagegrid@col
+\pagegrid@cur\@ne
+\expandafter\let\csname col@\the\pagegrid@cur\endcsname\@leftcolumn
+\let\@leftcolumn\@undefined
+% \end{macrocode}
+%
+% The default is for maximum two columns.
+% If your class will require more columns, assign that number to \cmd\pagegrid@col\
+% before \envb{document} time.
+% \begin{macrocode}
+\pagegrid@col\tw@
+% \end{macrocode}
+%
+% The procedure \cmd\pagegrid@init\ exercises \cmd\newbox\ sufficiently to create the
+% boxes for holding the columns in the page grid.
+% \begin{macrocode}
+\def\pagegrid@init{%
+ \advance\pagegrid@cur\@ne
+ \@ifnum{\pagegrid@cur<\pagegrid@col}{%
+ \csname newbox\expandafter\endcsname\csname col@\the\pagegrid@cur\endcsname
+ \pagegrid@init
+ }{%
+ }%
+}%
+\appdef\class@documenthook{%
+ \pagegrid@init
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\grid@column}
+% The procedure \cmd\grid@column\ knows how to lay up the columns in a multi-column page grid.
+% It uses utility procedures \cmd\append@column\ and \cmd\box@column.
+%
+% \begin{macrocode}
+\def\grid@column#1{%
+ \global\setbox\@outputbox\vbox{%
+ \hb@xt@\textwidth{%
+ \vrule\@height\z@\@width\z@\@if@empty{#1}{}{\@depth#1}%
+ \pagegrid@cur\@ne
+ \append@column
+ \box@column\@outputbox
+ }%
+ \vskip\z@skip % FIXME: page depth!
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\append@column}
+% \begin{macro}{\box@column}
+% \begin{macro}{\marry@baselines}
+% The procedure \cmd\append@column\ appends columns for \cmd\grid@column,
+% \cmd\box@column\ builds the columns for \cmd\append@column,
+% and \cmd\marry@baselines\ pastes vertical things back together.
+% \changes{v4.0rc1}{2001/06/18}
+% {Introoduce \cs{marry@height} }
+%
+% Note that \cmd\box@column\ makes an attempt to prevent excessive \cmd\topskip\
+% or \cmd\baselineskip\ glue
+% from being applied by \TeX\ when \cmd\@outputbox\ is contributed to the MVL.
+% If this is not done, it is possible to get into an infinite loop in the corner case,
+% wherein the page grid is changed to one column and the balanced-up columns are
+% already sufficient to fill the page.
+%
+% Note (AO 0920): I have changed the dimension involved with \cmd\box@column\ from
+% \cmd\vsize\ to \cmd\textheight, because the former is certainly not the correct value
+% to use: it will change if floats have been placed in the last column of the page.
+% I believe \cmd\textheight\ is the correct parameter to use here.
+%
+% A REVTeX4 beta user, Sergey Strelkov (strelkov@maik.rssi.ru), wants the option
+% of ragged-bottom columns. Implementing this feature properly means reboxing the
+% columns to their natural height only if \cmd\raggedcolumn@sw\ is true.
+% Otherwise, they get reboxed to their common height (\cmd\@colht?).
+%
+% Note that the default has hereby changed from ragged to flush.
+% It's not clear that anyone but Sergey will notice.
+%
+% The macro \cmd\marry@skip\ addresses (in a limited way)
+% the fact that neither the value of \cmd\baselineskip\ nor that of \cmd\topskip\
+% can be relied upon for the purpose of marrying the baselines of two split columns.
+% (Because there might have been a local change to their values at the point where
+% the output routine got triggered.)
+%
+% For best results, your document class should call for grid changes only when in basal text
+% settings. The \cmd\marry@baselines\ procedure will use the values appropriate to that point
+% when attempting to put the columns back together.
+%
+% In any case, we are not attempting to solve the more general problem of how to marry baselines
+% where the leading can change arbitrarily within the galley or where glue could have been trimmed
+% at a page top.
+% \begin{macrocode}
+\def\append@column{%
+ \@ifnum{\pagegrid@cur<\pagegrid@col}{%
+ \expandafter\box@column\csname col@\the\pagegrid@cur\endcsname
+ \hfil
+ \vrule \@width\columnseprule
+ \hfil
+ \advance\pagegrid@cur\@ne
+ \append@column
+ }{%
+ }%
+}%
+\def\box@column#1{%
+ \raise\topskip
+ \hb@xt@\columnwidth{%
+ \dimen@\ht#1\@ifdim{\dimen@>\@colht}{\dimen@\@colht}{}%
+% \advance\dimen@-\topskip
+ \count@\vbadness\vbadness\@M
+ \dimen@ii\vfuzz\vfuzz\maxdimen
+ \outputdebug@sw{\saythe\@colht\saythe\dimen@}{}%
+ \vtop to\dimen@
+% \@ifdim{\ht#1>\textheight}{to\textheight}{}%
+ {\hrule\@height\z@
+ \unvbox#1%
+ \raggedcolumn@skip
+ }%
+ \vfuzz\dimen@ii
+ \vbadness\count@
+ \hss
+ }%
+}%
+\def\marry@baselines{%
+%{\tracingall\scrollmode\showlists}%
+%\skip@\baselineskip\advance\skip@-\topskip %FIXME: cannot assume \baselineskip nor \topskip
+ \vskip\marry@skip\relax
+}%
+\gdef\marry@skip{\z@skip}%
+\def\set@marry@skip{%
+ \begingroup
+ \skip@\baselineskip\advance\skip@-\topskip
+ \@ifdim{\skip@>\z@}{%
+ \xdef\marry@skip{\the\skip@}%
+ }{}%
+ \endgroup
+}%
+\AtBeginDocument{%
+ \@ifxundefined\raggedcolumn@sw{\@booleanfalse\raggedcolumn@sw}{}%
+}%
+\def\raggedcolumn@skip{%
+ \vskip\z@\raggedcolumn@sw{\@plus.0001fil\@minus.0001fil}{}\relax
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@combinepage}
+% The procedure \cmd\@combinepage\ prepends the stored page to \cmd\@outputbox.
+% \begin{macrocode}
+\def\@combinepage{%
+ \@ifvoid\pagesofar{}{%
+ \setbox\@outputbox\vbox{%
+ \unvbox\pagesofar
+ \marry@baselines
+ \unvbox\@outputbox
+ }%
+ }%
+ \@ifvoid\footbox{}{%
+ \setbox\@outputbox\vbox{%
+ \unvbox\@outputbox
+ \marry@baselines
+ \unvbox\footbox
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@combinedblfloats}
+% We modify \LaTeX's \cmd\@combinedblfloats\ to be more appropriate for incremental page building:
+% we \cmd\unvbox\ the \cmd\@outputbox.
+% \begin{macrocode}
+\def\@combinedblfloats{%
+ \@ifx@empty\@dbltoplist{}{%
+ \setbox\@tempboxa\vbox{}%
+ \let\@elt\@comdblflelt\@dbltoplist
+ \let\@elt\relax\xdef\@freelist{\@freelist\@dbltoplist}%
+ \global\let\@dbltoplist\@empty
+ \setbox\@outputbox\vbox{%
+ %\boxmaxdepth\maxdepth %% probably not needed, CAR
+ \unvbox\@tempboxa\unskip
+ \@ifnum{\@dbltopnum>\m@ne}{\dblfigrule}{}%FIXME: how is \@dbltopnum maintained?
+ \vskip\dbltextfloatsep
+ \unvbox\@outputbox
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\set@column@hsize}%
+% The procedure \cmd\set@column@hsize\ takes care of setting up the horizontal dimensions
+% for the current page grid. The present routine will certainly not be adequate for more
+% complex page layouts (e.g., with a side column), but works for the common ones.
+% \changes{v4.0rc1}{2001/06/18}
+% {Introoduce \cs{set@marry@height} }
+% \begin{macrocode}
+\def\set@column@hsize#1{%
+ \pagegrid@col#1%
+ \global\columnwidth\textwidth
+ \global\advance\columnwidth\columnsep
+ \global\divide\columnwidth\pagegrid@col
+ \global\advance\columnwidth-\columnsep
+ \global\hsize\columnwidth
+ \global\linewidth\columnwidth
+ \skip@\baselineskip\advance\skip@-\topskip
+ \@ifnum{\pagegrid@col>\@ne}{\set@marry@skip}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\set@colht}%
+% \begin{macro}{\set@colroom}%
+% \begin{macro}{\set@vsize}%
+% \begin{macro}{\set@adj@colht}%
+% The story of \cmd\textheight, \cmd\@colht, \cmd\@colroom, and \cmd\vsize.
+%
+% \cmd\textheight---height of the text column. Not a running parameter, however, each time a page is
+% shipped out, the \cmd\textheight\ could in principle be altered. This must be done before
+%
+% \cmd\@colht---\cmd\textheight\ minus the height of any full-page-width floats. The latter are committed
+% only just after shipping out, and only if we are in a multicolumn page grid.
+% Therefore, \cmd\@colht\ should be set after a \cmd\shipout\ (by \cmd\@outputpage) and
+% will be adjusted when full-page-width floats are committed to the fresh page by \cmd\do@startpage.
+%
+% \cmd\@colroom---\cmd\@colht\ (adjusted by \cmd\pagesofar) minus the height of any column-width floats.
+% The latter are committed anywhere on the page, at which point \cmd\@colroom\ must be adjusted.
+% Therefore, \cmd\@colroom\ should be set (by \cmd\set@colroom) whenever a column is prepared (by ).
+%FIXME: committed (by \cmd\output@column@) and
+% will be adjusted (by \cmd\@add@float\ or \cmd\do@startcolumn) whenever a float is committted to the column.
+%
+% \cmd\vsize---\cmd\@colroom.
+% Therefore, \cmd\vsize\ should be set (by \cmd\set@vsize) whenever
+% the \cmd\@colroom\ is set (by \cmd\set@colroom) or adjusted (by \cmd\@add@float\ or \cmd\do@startcolumn)
+%FIXME: or when the \cmd\pagesofar\ box is changed (after invoking \cmd\open@column@).
+%
+% Question: what if there are committed floats? Footnotes?
+% Answer: full-page-width floats are only committed at top, and they are already reckoned with in \cmd\@colht.
+% Column-width committed floats are incorporated by \cmd\@makecol; footnotes need help.
+%
+% Note: FIXME: adjusting for \cmd\pagesofar\ is done at not quite the right time. I need to reexamine \cmd\set@colht,
+% because \cmd\@dbltoplist\ and \cmd\pagesofar\ really should be on the same footing.
+% Perhaps \cmd\@colht\ and \cmd\@colroom\ should both deal with their respective ``lists'' in the same way?
+%
+% These concerns will be particularly germane if we ever extend this package to deal with full-page-width floats
+% placed at the bottom of the page, or committed on the same page as called out.
+%
+% It occurs to me that we should ditch \cmd\set@colroom\ and only ever execute \cmd\set@colht, which sets \cmd\@colroom\ as a side effect.
+% If so, we can make \cmd\@colht\ take \cmd\pagesofar\ into account, as it should. Then \cmd\@colht\ will return to its
+% original significance as the value that \cmd\@colroom\ is set to after a column is committed.
+%
+% On the other hand, why not simply forget all this caching and (re-)calculate \cmd\vsize\ as late as possible?
+% Paticularly, \cmd\@colht\ is an artifact of the old way of doing things, where once it was set, it would never change.
+%
+% \begin{macrocode}
+\def\set@colht{%
+ \set@adj@textheight\@colht
+ \global\let\enlarge@colroom\@empty
+ \set@colroom
+}%
+\def\set@adj@textheight#1{%
+ #1\textheight
+ \def\@elt{\adj@page#1}%
+ \@booleantrue\firsttime@sw\@dbltoplist
+ \let\@elt\relax
+%\@ifvoid\pagesofar{}{%
+% \advance#1-\ht\pagesofar\advance#1-\dp\pagesofar
+%}%
+ \global#1#1\relax
+ \outputdebug@sw{\saythe#1}{}%
+}%
+\def\set@colroom{%
+ \set@adj@colht\@colroom
+ \@if@empty\enlarge@colroom{}{%
+ \global\advance\@colroom\enlarge@colroom\relax
+ }%
+ \outputdebug@sw{\saythe\@colroom}{}%
+ \@ifdim{\@colroom>\topskip}{}{%
+ \ltxgrid@info{Not enough room: \string\@colroom=\the\@colroom; increasing to \the\topskip}%
+ \@colroom\topskip
+ }%
+ \global\@colroom\@colroom
+ \set@vsize
+}%
+%
+\def\set@vsize{%
+ \global\vsize\@colroom
+ \outputdebug@sw{\saythe\vsize}{}%
+}%
+%
+\def\set@adj@colht#1{%
+ #1\@colht
+ \@ifvoid\pagesofar{}{%
+ \advance#1-\ht\pagesofar\advance#1-\dp\pagesofar
+ }%
+ \@ifvoid\footbox{}{%
+ \advance#1-\ht\footbox\advance#1-\dp\footbox
+ }%
+ \def\@elt{\adj@column#1}%
+ \@booleantrue\firsttime@sw\@toplist
+ \@booleantrue\firsttime@sw\@botlist
+ \let\@elt\relax
+ \outputdebug@sw{\saythe#1}{}%
+}%
+\def\adj@column#1#2{%
+ \advance#1-\ht#2%
+ \advance#1-\firsttime@sw{\textfloatsep\@booleanfalse\firsttime@sw}{\floatsep}%
+}%
+\def\adj@page#1#2{%
+ \advance#1-\ht#2%
+ \advance#1-\firsttime@sw{\dbltextfloatsep\@booleanfalse\firsttime@sw}{\dblfloatsep}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@outputpage}%
+% At the tail of \cmd\@outputpage, we set \cmd\@colht\ and the float placement parameters
+% (this is the one point where it is appropriate to set \cmd\@colht).
+% At \cmd\do@startpage\ time, we adjust \cmd\@colht's value to reflect committed
+% full-page-width floats.
+%
+% Note: with a correctly written output routine, a call to \cmd\@outputpage\ will inevitably be
+% followed by a call to \cmd\do@startpage, so these procedure calls would be unneeded.
+% \begin{macrocode}
+\appdef\@outputpage{%
+ \set@colht % FIXME: needed?
+ \@floatplacement % FIXME: needed?
+ \@dblfloatplacement % FIXME: needed?
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{balance@2}
+% We define procedures for balancing columns in a multicolumn layout.
+% For now, we define only one: a procedure for the two-column grid.
+% All others will simply \cmd\relax\ out.
+% \begin{macrocode}
+\@namedef{balance@2}{%
+ \expandafter\balance@two\csname col@1\endcsname\@outputbox
+ % Avoid a bug by preventing a restore when leaving this group
+ \global\setbox\csname col@1\endcsname\box\csname col@1\endcsname
+ \@ifvoid\footbox{}{%
+ \global\setbox\footbox\vbox{%
+ \setbox\z@\box\@tempboxa
+ \let\recover@footins\relax
+ \balance@two\footbox\@tempboxa
+ \hb@xt@\textwidth{\box\footbox\hfil\box\@tempboxa}%
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\balance@two}
+% The procedure \cmd\balance@two\ takes two columns and balances them; in the process it removes
+% any footnotes that may be present to a place of safety, for later placement at the foot of the
+% shipped-out page.
+% The box register \cmd\box\cmd\@ne\ is the aggregate of all columns.
+% The box register \cmd\box\cmd \z@\ is the last column.
+% The box register \cmd\box\cmd\tw@\ is the first column.
+% The \cmd\dimen\ register \cmd\dimen@\ is the trial value to balance to,
+% initially half the height of \cmd\box\cmd\@ne.
+% The \cmd\dimen\ register \cmd\dimen@i\ is the increment for the next trial;
+% its initial value is equal to the initial value of \cmd\dimen@.
+% The \cmd\dimen\ register \cmd\dimen@ii\ is the difference of the heights of the two columns.
+%
+% The procedure uses a binary search for that value of \cmd\dimen@\ which is stable to within .5\cmd\p@\ and which
+% makes the last column be shorter than the others.
+%
+% This procedure can be extended to multiple columns simply by changing it to execute \cmd\vsplit\ multiple
+% times (one less than the total number of columns in the page layout) and to calculating \cmd\dimen@ii\
+% to be the difference of the heights of last column and the \cmd\dimen@.
+% Upon termination of the search, one would excute the \cmd\vsplit s once again, this time
+% using the actual \cmd\col@\ box registers to store the
+% balanced columns, thereby clobbering their former contents.
+%
+% Bug Note:
+% as originally written, this macro had a bug, which is well worth avoiding under similar circumstances anywhere.
+% So, learn from the mistakes of others, as they say.
+% In trying to remove the depth of the boxes created via \cmd\vsplit\ within the \cmd\loopwhile\ control,
+% I originally coded
+% \cmd\unvbox
+% \cmd\z@\
+% \cmd\setbox
+% \cmd\z@
+% \cmd\lastbox\
+% \cmd\dimen@
+% \cmd\dp
+% \cmd\z@\
+% \cmd\box
+% \cmd\z@\
+% \cmd\vskip-%
+% \cmd\dimen@.
+% The error here is that the shift of the last box in the vertical list will be lost in the process.
+% Simply put, \cmd\setbox\cmd\z@\cmd\lastbox\ fails to retain the shift of the box node in the vertical list,
+% and when it is put down again via \cmd\box\cmd\z@, it will no longer have the correct shift.
+%
+% This bug affected things placed in the MVL with \cmd\moveleft, \cmd\moveright, \cmd\parshape, and
+% \cmd\hangindent, as well as things shifted by \TeX's primitive mechanisms.
+%
+% A superior strategy for removing the depth of the last line of the list is more expensive, but safer:
+% make a separate copy of the list, measure the depth of the last box as above, but then discard
+% the list, retaining only the value of the dimension.
+%
+% Note that this procedure will not work if the material within is excessively chunky.
+% A particular failure mode exists where none of the material is allocated to the last (right) column.
+% We detect this case and revert to unbalanced columns.
+%
+% Another failure mode is where a large chunk occurs at the beginning of the composite box.
+% In this case, the left column may fill up even when \cmd\dimen@\ is very small.
+% If this configuration leaves the left column longer than the right, then we are done,
+% but \cmd\dimen@\ by no means represents the height of either finished box.
+%
+% Therefore the last step in the process is to rebox the two columns to a common height determined
+% independently of the balancing process.
+%
+% The dimension involved is checked against the current \cmd\@colroom\ to guard against the case where
+% excessive material happens to fall in either column.
+% \begin{macrocode}
+\def\balance@two#1#2{%
+ \outputdebug@sw{{\tracingall\scrollmode\showbox#1\showbox#2}}{}%
+ \setbox\@ne\vbox{%
+ \@ifvoid#1{}{%
+ \unvcopy#1\recover@footins
+ \@ifvoid#2{}{\marry@baselines}%
+ }%
+ \@ifvoid#2{}{%
+ \unvcopy#2\recover@footins
+ }%
+ }%
+ \dimen@\ht\@ne\divide\dimen@\tw@
+ \dimen@i\dimen@
+ \vbadness\@M
+ \vfuzz\maxdimen
+ \loopwhile{%
+ \dimen@i=.5\dimen@i
+ \outputdebug@sw{\saythe\dimen@\saythe\dimen@i\saythe\dimen@ii}{}%
+ \setbox\z@\copy\@ne\setbox\tw@\vsplit\z@ to\dimen@
+ \setbox\z@ \vbox{%
+ \unvcopy\z@
+ \setbox\z@\vbox{\unvbox\z@ \setbox\z@\lastbox\aftergroup\vskip\aftergroup-\expandafter}\the\dp\z@\relax
+ }%
+ \setbox\tw@\vbox{%
+ \unvcopy\tw@
+ \setbox\z@\vbox{\unvbox\tw@\setbox\z@\lastbox\aftergroup\vskip\aftergroup-\expandafter}\the\dp\z@\relax
+ }%
+ \dimen@ii\ht\tw@\advance\dimen@ii-\ht\z@
+ \@ifdim{\dimen@i>.5\p@}{%
+ \advance\dimen@\@ifdim{\dimen@ii<\z@}{}{-}\dimen@i
+ \true@sw
+ }{%
+ \@ifdim{\dimen@ii<\z@}{%
+ \advance\dimen@\tw@\dimen@i
+ \true@sw
+ }{%
+ \false@sw
+ }%
+ }%
+ }%
+ \outputdebug@sw{\saythe\dimen@\saythe\dimen@i\saythe\dimen@ii}{}%
+ \@ifdim{\ht\z@=\z@}{%
+ \@ifdim{\ht\tw@=\z@}{%
+ \true@sw
+ }{%
+ \false@sw
+ }%
+ }{%
+ \true@sw
+ }%
+ {%
+ }{%
+ \ltxgrid@info{Unsatifactorily balanced columns: giving up}%
+ \setbox\tw@\box#1%
+ \setbox\z@ \box#2%
+ }%
+ \setbox\tw@\vbox{\unvbox\tw@\vskip\z@skip}%
+ \setbox\z@ \vbox{\unvbox\z@ \vskip\z@skip}%
+ \set@colroom
+ \dimen@\ht\z@\@ifdim{\dimen@<\ht\tw@}{\dimen@\ht\tw@}{}%
+ \@ifdim{\dimen@>\@colroom}{\dimen@\@colroom}{}%
+ \outputdebug@sw{\saythe{\ht\z@}\saythe{\ht\tw@}\saythe\@colroom\saythe\dimen@}{}%
+ \setbox#1\vbox to\dimen@{\unvbox\tw@\unskip\raggedcolumn@skip}%
+ \setbox#2\vbox to\dimen@{\unvbox\z@ \unskip\raggedcolumn@skip}%
+ \outputdebug@sw{{\tracingall\scrollmode\showbox#1\showbox#2}}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\recover@footins}
+% The procedure \cmd\recover@footins\ is the utility procedure for recovering the footnotes
+% from the bottom of a column. It is used when the page grid is changed, so that footnotes can be
+% set at the bottom of the shipped out page.
+% \begin{macrocode}
+\def\recover@footins{%
+ \skip\z@ \lastskip\unskip
+ \skip\@ne\lastskip\unskip
+ \setbox\z@\lastbox
+ \@ifvbox\z@{%
+ \setbox\z@\vbox{%
+ \unvbox\z@
+ \setbox\z@\lastbox
+% \outputdebug@sw{{\tracingall\showbox\lastbox}}{}%
+ \@ifvoid\z@{}{%
+ \global\setbox\footbox\vbox{%
+ \unvbox\footbox
+ \@ifvbox\z@{%
+ \unvbox\z@
+ }{%
+ \box\z@
+ }%
+ }%
+ }%
+ }%
+ }{}%
+ \outputdebug@sw{{\tracingall\scrollmode\showbox\footbox}}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@begindocumenthook}
+% Initialization:
+% we initialize to the page grid named ``one''.
+% If the class decides to initially set type in a different grid, it
+% should execute these same commands, but changing the first to the appropriate procedure.
+%
+% Note that the point where this sequence is executed would be an excellent place to arrange for
+% floats to be committed to the first page of a document.
+% That is, we execute \cmd\do@startpage, which triggers \cmd\do@startcolumn.
+%
+% FIXME: it should be the job of the page grid to determine the procedure to execute at
+% the start of the job. Make this a hook.
+% \begin{macrocode}
+\prepdef\@begindocumenthook{%
+ \open@column@one\@ne
+ \set@colht
+ \@floatplacement
+ \@dblfloatplacement
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% Comment: our technique of balancing columns is severely limited, because it cannot properly work
+% with \env{longtable}, which places material at the bottom and top of the column break.
+%
+% The proper way to handle a grid change in the middle of the page is to accumulate all the material for
+% an entire article (or chapter) and then assemble finished pages therefrom. This approach is fundamentally
+% superior for complex layouts: it corresponds to real-world workflows.
+% Such a scheme is an excellent subject for another \LaTeX\ package.
+%
+%
+% \subsection{Patches for the longtable package}%
+%
+% \LaTeX's ``required'' package \classname{longtable} (written by David P. Carlilsle),
+% which is part of /latex/required/tools, is incmpatible with both
+% \LaTeX's ``required'' package \classname{multicol} and with
+% \LaTeX's native \cmd\twocolumn\ capability. There is no essential reason
+% for this incompatability, aside from implementation details, and the
+% \classname{ltxgrid} package gives us the ability to lift them.
+%
+% Only four of \classname{longtable}'s procedures require rewriting:
+% \cmd\longtable,
+% \cmd\endlongtable,
+% \cmd\LT@start, and
+% \cmd\LT@end@hd@ft.
+% The procedure \cmd\switch@longtable\ checks against their expected meanings
+% and, if all is as expected, applies the patches.
+% In the process, we simplify things considerably and also make them more
+% secure.
+%
+% Why does \classname{longtable} need to access the output routine, anyway?
+% What it comes down to, is what happens when a pagebreak falls within a
+% long table. If this happens, we would like to append a row at the bottom of
+% the broken table and add a row at the top of the next page.
+%
+% These things can be accomodated easily by the \classname{ltxgrid} output
+% routine hooks.
+%
+%
+% \begin{macro}{\longtable}
+% \begin{macrocode}
+\def\longtable@longtable{%
+ \par
+ \ifx\multicols\@undefined\else\ifnum\col@number>\@ne\@twocolumntrue\fi\fi
+ \if@twocolumn\LT@err{longtable not in 1-column mode}\@ehc\fi
+ \begingroup
+ \@ifnextchar[\LT@array{\LT@array[x]}%
+}%
+\def\longtable@new{%
+ \par
+ \@ifnextchar[\LT@array{\LT@array[x]}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\endlongtable}
+% \begin{macrocode}
+\def\endlongtable@longtable{%
+ \crcr
+ \noalign{%
+ \let\LT@entry\LT@entry@chop
+ \xdef\LT@save@row{\LT@save@row}}%
+ \LT@echunk
+ \LT@start
+ \unvbox\z@
+ \LT@get@widths
+ \if@filesw
+ {\let\LT@entry\LT@entry@write\immediate\write\@auxout{%
+ \gdef\expandafter\noexpand
+ \csname LT@\romannumeral\c@LT@tables\endcsname
+ {\LT@save@row}}}%
+ \fi
+ \ifx\LT@save@row\LT@@save@row
+ \else
+ \LT@warn{Column \@width s have changed\MessageBreak
+ in table \thetable}%
+ \LT@final@warn
+ \fi
+ \endgraf\penalty -\LT@end@pen
+ \endgroup
+ \global\@mparbottom\z@
+ \pagegoal\vsize
+ \endgraf\penalty\z@\addvspace\LTpost
+ \ifvoid\footins\else\insert\footins{}\fi
+}%
+\def\endlongtable@new{%
+ \crcr
+ \noalign{%
+ \let\LT@entry\LT@entry@chop
+ \xdef\LT@save@row{\LT@save@row}%
+ }%
+ \LT@echunk
+ \LT@start
+ \unvbox\z@
+ \LT@get@widths
+ \@if@sw\if@filesw\fi{%
+ {%
+ \let\LT@entry\LT@entry@write
+ \immediate\write\@auxout{%
+ \gdef\expandafter\noexpand\csname LT@\romannumeral\c@LT@tables\endcsname
+ {\LT@save@row}%
+ }%
+ }%
+ }{}%
+ \@ifx\LT@save@row\LT@@save@row{}{%
+ \LT@warn{%
+ Column \@width s have changed\MessageBreak in table \thetable
+ }\LT@final@warn
+ }%
+ \endgraf
+ \nobreak
+ \box\@ifvoid\LT@lastfoot{\LT@foot}{\LT@lastfoot}%
+ \global\@mparbottom\z@
+ \endgraf
+ \LT@post
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\LT@start}
+% \begin{macrocode}
+\def\LT@start@longtable{%
+ \let\LT@start\endgraf
+ \endgraf
+ \penalty\z@
+ \vskip\LTpre
+ \dimen@\pagetotal
+ \advance\dimen@ \ht\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi
+ \advance\dimen@ \dp\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi
+ \advance\dimen@ \ht\LT@foot
+ \dimen@ii\vfuzz\vfuzz\maxdimen
+ \setbox\tw@\copy\z@
+ \setbox\tw@\vsplit\tw@ to \ht\@arstrutbox
+ \setbox\tw@\vbox{\unvbox\tw@}%
+ \vfuzz\dimen@ii
+ \advance\dimen@ \ht
+ \ifdim\ht\@arstrutbox>\ht\tw@\@arstrutbox\else\tw@\fi
+ \advance\dimen@\dp
+ \ifdim\dp\@arstrutbox>\dp\tw@\@arstrutbox\else\tw@\fi
+ \advance\dimen@ -\pagegoal
+ \ifdim \dimen@>\z@\vfil\break\fi
+ \global\@colroom\@colht
+ \ifvoid\LT@foot\else
+ \advance\vsize-\ht\LT@foot
+ \global\advance\@colroom-\ht\LT@foot
+ \dimen@\pagegoal\advance\dimen@-\ht\LT@foot\pagegoal\dimen@
+ \maxdepth\z@
+ \fi
+ \ifvoid\LT@firsthead\copy\LT@head\else\box\LT@firsthead\fi
+ \output{\LT@output}%
+}%
+\def\LT@start@new{%
+ \let\LT@start\endgraf
+ \endgraf
+ \markthr@@{}%
+ \LT@pre
+ \@ifvoid\LT@firsthead{\LT@top}{\box\LT@firsthead\nobreak}%
+ \mark@envir{longtable}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\LT@end}
+% \begin{macrocode}
+\def\LT@end@hd@ft@longtable#1{%
+ \LT@echunk
+ \ifx\LT@start\endgraf
+ \LT@err{Longtable head or foot not at start of table}{Increase LTchunksize}%
+ \fi
+ \setbox#1\box\z@
+ \LT@get@widths\LT@bchunk
+}%
+\def\LT@end@hd@ft@new#1{%
+ \LT@echunk
+ \@ifx{\LT@start\endgraf}{%
+ \LT@err{Longtable head or foot not at start of table}{Increase LTchunksize}%
+ }%
+ \global\setbox#1\box\z@
+ \LT@get@widths
+ \LT@bchunk
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\LT@array}
+% \begin{macrocode}
+\def\LT@array@longtable[#1]#2{%
+ \refstepcounter{table}\stepcounter{LT@tables}%
+ \if l#1%
+ \LTleft\z@ \LTright\fill
+ \else\if r#1%
+ \LTleft\fill \LTright\z@
+ \else\if c#1%
+ \LTleft\fill \LTright\fill
+ \fi\fi\fi
+ \let\LT@mcol\multicolumn
+ \let\LT@@tabarray\@tabarray
+ \let\LT@@hl\hline
+ \def\@tabarray{%
+ \let\hline\LT@@hl
+ \LT@@tabarray}%
+ \let\\\LT@tabularcr\let\tabularnewline\\%
+ \def\newpage{\noalign{\break}}%
+ \def\pagebreak{\noalign{\ifnum`}=0\fi\@testopt{\LT@no@pgbk-}4}%
+ \def\nopagebreak{\noalign{\ifnum`}=0\fi\@testopt\LT@no@pgbk4}%
+ \let\hline\LT@hline \let\kill\LT@kill\let\caption\LT@caption
+ \@tempdima\ht\strutbox
+ \let\@endpbox\LT@endpbox
+ \ifx\extrarowheight\@undefined
+ \let\@acol\@tabacol
+ \let\@classz\@tabclassz \let\@classiv\@tabclassiv
+ \def\@startpbox{\vtop\LT@startpbox}%
+ \let\@@startpbox\@startpbox
+ \let\@@endpbox\@endpbox
+ \let\LT@LL@FM@cr\@tabularcr
+ \else
+ \advance\@tempdima\extrarowheight
+ \col@sep\tabcolsep
+ \let\@startpbox\LT@startpbox\let\LT@LL@FM@cr\@arraycr
+ \fi
+ \setbox\@arstrutbox\hbox{\vrule
+ \@height \arraystretch \@tempdima
+ \@depth \arraystretch \dp \strutbox
+ \@width \z@}%
+ \let\@sharp##\let\protect\relax
+ \begingroup
+ \@mkpream{#2}%
+ \xdef\LT@bchunk{%
+ \global\advance\c@LT@chunks\@ne
+ \global\LT@rows\z@\setbox\z@\vbox\bgroup
+ \LT@setprevdepth
+ \tabskip\LTleft\halign to\hsize\bgroup
+ \tabskip\z@ \@arstrut \@preamble \tabskip\LTright \cr}%
+ \endgroup
+ \expandafter\LT@nofcols\LT@bchunk&\LT@nofcols
+ \LT@make@row
+ \m@th\let\par\@empty
+ \everycr{}\lineskip\z@\baselineskip\z@
+ \LT@bchunk
+}%
+\def\LT@LR@l{\LTleft\z@ \LTright\fill}%
+\def\LT@LR@r{\LTleft\fill \LTright\z@ }%
+\def\LT@LR@c{\LTleft\fill \LTright\fill}%
+\def\LT@array@new[#1]#2{%
+ \refstepcounter{table}\stepcounter{LT@tables}%
+ \table@hook
+ \LTleft\fill \LTright\fill
+ \csname LT@LR@#1\endcsname
+ \let\LT@mcol\multicolumn
+ \let\LT@@hl\hline
+ \prepdef\@tabarray{\let\hline\LT@@hl}%
+ \let\\\LT@tabularcr
+ \let\tabularnewline\\%
+ \def\newpage{\noalign{\break}}%
+ \def\pagebreak{\noalign{\ifnum`}=0\fi\@testopt{\LT@no@pgbk-}4}%
+ \def\nopagebreak{\noalign{\ifnum`}=0\fi\@testopt\LT@no@pgbk4}%
+ \let\hline\LT@hline
+ \let\kill\LT@kill
+ \let\caption\LT@caption
+ \@tempdima\ht\strutbox
+ \let\@endpbox\LT@endpbox
+ \@ifxundefined\extrarowheight{%
+ \let\@acol\@tabacol
+ \let\@classz\@tabclassz
+ \let\@classiv\@tabclassiv
+ \def\@startpbox{\vtop\LT@startpbox}%
+ \let\@@startpbox\@startpbox
+ \let\@@endpbox\@endpbox
+ \let\LT@LL@FM@cr\@tabularcr
+ }{%
+ \advance\@tempdima\extrarowheight
+ \col@sep\tabcolsep
+ \let\@startpbox\LT@startpbox
+ \let\LT@LL@FM@cr\@arraycr
+ }%
+%
+ \let\@acoll\@tabacoll
+ \let\@acolr\@tabacolr
+ \let\@acol\@tabacol
+%
+ \setbox\@arstrutbox\hbox{%
+ \vrule
+ \@height \arraystretch \@tempdima
+ \@depth \arraystretch \dp \strutbox
+ \@width \z@
+ }%
+ \let\@sharp##%
+ \let\protect\relax
+ \begingroup
+ \@mkpream{#2}%
+ \@mkpream@relax
+ \edef\@preamble{\@preamble}%
+ \prepdef\@preamble{%
+ \global\advance\c@LT@chunks\@ne
+ \global\LT@rows\z@
+ \setbox\z@\vbox\bgroup
+ \LT@setprevdepth
+ \tabskip\LTleft
+ \halign to\hsize\bgroup
+ \tabskip\z@
+ \@arstrut
+ }%
+ \appdef\@preamble{%
+ \tabskip\LTright
+ \cr
+ }%
+ \global\let\LT@bchunk\@preamble
+ \endgroup
+ \expandafter\LT@nofcols\LT@bchunk&\LT@nofcols
+ \LT@make@row
+ \m@th
+ \let\par\@empty
+ \everycr{}%
+ \lineskip\z@
+ \baselineskip\z@
+ \LT@bchunk
+}%
+\appdef\table@hook{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\switch@longtable}
+%
+% Here is the switch from standard \classname{longtable} to the new, \classname{ltxgrid}-compatible values.
+%
+% At this point, we extend \env{longtable} with a \env{longtable*} form, which signifies that we want to
+% use the full page width for setting the table.
+% You can think this way: \env{longtable*} is to \env{longtable} as \env{table*} is to \env{table}.
+%
+%FIXME: the following is no longer true:
+%% Note that it is not enough to define the environment itself; we also have to create the corresponding
+%% \cmd\output\ routine procedures, which provide for continued footers and headers
+%% (the very feature of \env{longtable} requiring support in the output routine).
+%
+%% This same consideration would arise in defining any syntactic extension to \env{longtable}, because
+%% the environment name itself is exposed in the output routine.
+%
+% \begin{macrocode}
+\def\switch@longtable{%
+ \@ifpackageloaded{longtable}{%
+ \@ifx{\longtable\longtable@longtable}{%
+ \@ifx{\endlongtable\endlongtable@longtable}{%
+ \@ifx{\LT@start\LT@start@longtable}{%
+ \@ifx{\LT@end@hd@ft\LT@end@hd@ft@longtable}{%
+ \@ifx{\LT@array\LT@array@longtable}{%
+ \true@sw
+ }{\false@sw}%
+ }{\false@sw}%
+ }{\false@sw}%
+ }{\false@sw}%
+ }{\false@sw}%
+ {%
+ \class@info{Patching longtable package}%
+ }{%
+ \class@info{Patching unrecognized longtable package. (Proceeding with fingers crossed)}%
+ }%
+ \let\longtable\longtable@new
+ \let\endlongtable\endlongtable@new
+ \let\LT@start\LT@start@new
+ \let\LT@end@hd@ft\LT@end@hd@ft@new
+ \let\LT@array\LT@array@new
+ \newenvironment{longtable*}{%
+ \onecolumngrid@push
+ \longtable
+ }{%
+ \endlongtable
+ \onecolumngrid@pop
+ }%
+% \expandafter\let\csname output@init@longtable*\endcsname\output@init@longtable
+% \expandafter\let\csname output@prep@longtable*\endcsname\output@prep@longtable
+% \expandafter\let\csname output@post@longtable*\endcsname\output@post@longtable
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\LT@pre}
+% \begin{macro}{\LT@bot}
+% \begin{macro}{\LT@top}
+% \begin{macro}{\LT@post}
+% \begin{macro}{\LT@adj}
+% Note that at the end of the longtable environment, we reestablish the \cmd\mark@envir\ of the
+% containing environment. We have left \cmd\curr@envir\ alone, so this will work.
+% \begin{macrocode}
+\def\LT@pre{\penalty\z@\vskip\LTpre}%
+\def\LT@bot{\nobreak\copy\LT@foot\vfil}%
+\def\LT@top{\copy\LT@head\nobreak}%
+\def\LT@post{\penalty\z@\addvspace\LTpost\mark@envir{\curr@envir}}%
+\def\LT@adj{%
+ \setbox\z@\vbox{\null}\dimen@-\ht\z@
+ \setbox\z@\vbox{\unvbox\z@\LT@bot}\advance\dimen@\ht\z@
+ \global\advance\vsize-\dimen@
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{output@init}
+% \begin{macro}{output@prep}
+% \begin{macro}{output@post}
+% \begin{macrocode}
+\def\output@init@longtable{\LT@adj}%
+\def\output@prep@longtable{\setbox\@cclv\vbox{\unvbox\@cclv\LT@bot}}%
+\def\output@post@longtable{\LT@top}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Patches for index processing}%
+%
+% Another feature that uses the output routine hooks occurs within
+% an index, where one wishes to apply a ``continue head'' when a
+% column breaks within a primary index entry.
+% Some book designs call for the continue head to only be applied
+% at a turnpage break.
+%
+% In any case, it is easy enough for \cmd\output@post@theindex\
+% to do this in conjunction with component marks.
+% Only the bare outlines are shown here.
+%
+% \begin{macro}{\output@init}
+% \begin{macro}{\output@prep}
+% \begin{macro}{\output@post}
+% \begin{macrocode}
+\let\output@init@theindex\@empty
+\let\output@prep@theindex\@empty
+\def\output@post@theindex{%
+ \@ifodd\c@page{}{%
+ \@ifnum{\pagegrid@cur=\@ne}{% we have the leftmost column of a verso page
+ % insert the current top-level continued head
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Checking the auxiliary file}%
+%
+% We relegate the checking of the auxiliary file to the output routine.
+% This task must wait until the last page is shipped out, because otherwise
+% the stream might get closed before the last page is shipped out.
+% Obviously, we must use \cmd\do@output@MVL\ for the job.
+%
+% \begin{macro}{\check@aux}
+% \begin{macrocode}
+\def\check@aux{\do@output@MVL{\do@check@aux}}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsection{Dealing with stuck floats and stalled float dequeueing}%
+%
+% \LaTeX's float placement mechanism is fundamentally flawed, as evidenced by
+% its warning message ``too many unprocessed floats'', which users understandably find frustrating.
+% The \classname{ltxgrid} package provides tools for ameliorating the situation somewhat.
+%
+% Two cases require detection and rectification:
+% \begin{enumerate}
+% \item
+% A float is ``stuck'' in the \cmd\@deferlist: for whatever reason, the float fails to be committed,
+% even at the start of a fresh page.
+% Once this condition prevails, following floats can never be committed, subsequently all of \LaTeX's
+% float registers are used up.
+%
+% If this condition is detected, we reconsider float dequeueing under permissive (\cmd\clearpage-style) processing.
+%
+% \item
+% The \cmd\@freelist\ is exhausted:
+% a large concentration of floats, say, uses up all of \LaTeX's float registers all at once.
+% This condition commonly occurs when the user collects floats at the end of the document, for some reason.
+%
+% When a float is encountered, \LaTeX\ uses a float register (allocated from a pool of free registers) to contain it until it can be placed.
+% However, no further action is taken until the pagebuilder is visited, so floats can accumulate.
+% Also, even after the pagebuilder is visited, deferred floats can accumulate, and these are not committed
+% until a column (or page) of text is completed.
+%
+% Once the last free float register is used, action should be taken that will commit some of the deferred floats,
+% even if this might require ending the page right where we are (resulting in a short page).
+%
+% Perhaps, committed floats should be stored using some mechanism other than a list, as is currently done.
+% A feasible alternative storage method would be to use a \cmd\box\ register in place of
+% \cmd\@toplist,
+% \cmd\@botlist, and
+% \cmd\@dbltoplist.
+% This is probably just fine, since such committed floats are not reconsidered (I think).
+%
+% \end{enumerate}
+%
+% The emergency processing implemented here immediately ends the current page and begins to output float pages under (\cmd\clearpage-style) rules.
+% It proceeds until all deferred floats have been flushed.
+%
+% Users should expect non-optimal page makeup under these circumstances.
+%
+% Note that there is a weakness in our approach that we have not attempted to repair: if floats are being
+% added as part of a paragraph, we will not be able to take these remedial steps until the paragraph ends.
+% This means that the approach implemented here cannot fix all \LaTeX\ documents. Users can still construct
+% documents that exhaust \LaTeX's pool of float registers!
+%
+% \begin{macro}{\check@deferlist@stuck}
+% \begin{macro}{\@outputpage}
+% We detect the case where, at the start of a fresh page, there are deferred floats, but none are
+% committed. We memorize the \cmd\@deferlist\ at \cmd\shipout\ time, then examine it at the point where
+% our efforts to commit floats to the new page are complete.
+% If it has not changed, the first float must be stuck, and we
+% attempt to fix things via \cmd\force@deferlist@stuck.
+%
+% This simple approach is comp[letely effective in for typical documents.
+%
+% Note that we try to avoid an infinite loop by examining the value of \cmd\clearpage@sw:
+% if we come here with that boolean true, we are in a loop.
+% \begin{macrocode}
+\def\check@deferlist@stuck#1{%
+ \@ifx{\@deferlist@postshipout\@empty}{}{%
+ \@ifx{\@deferlist@postshipout\@deferlist}{%
+ \@fltstk
+ \clearpage@sw{%
+ \ltxgrid@warn{Deferred float stuck during \string\clearpage\space processing}%
+ }{%
+ \force@deferlist@stuck#1%
+ }%
+ }{%
+ %Successfully committed float(s)
+ }%
+ \global\let\@deferlist@postshipout\@empty
+ }%
+}%
+\def\@fltstk{%
+ \@latex@warning{A float is stuck (cannot be placed without \string\clearpage)}%
+}%
+\appdef\@outputpage{%
+ \global\let\@deferlist@postshipout\@deferlist
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@next}
+% \begin{macro}{\@xnext}
+% We rewrite the \LaTeX\ kernel macros that dequeue float registers from, e.g., \cmd\@deferlist,
+% providing a test for the condition where the pool of free registers is about to underflow.
+%
+% In this case, we attempt to fix things via \cmd\force@deferlist@empty.
+% \begin{macrocode}
+\def\@next#1#2{%
+ \@ifx{#2\@empty}{\false@sw}{%
+ \expandafter\@xnext#2\@@#1#2%
+ \true@sw
+ }%
+}%
+\def\@xnext\@elt#1#2\@@#3#4{%
+ \def#3{#1}%
+ \gdef#4{#2}%
+ \def\@tempa{#4}\def\@tempb{\@freelist}%
+ \@ifx{\@tempa\@tempb}{%
+ \@ifx{#4\@empty}{%
+ \force@deferlist@empty%{Float register pool exhausted}%
+ }{}%
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\force@deferlist@stuck}
+% \begin{macro}{\force@deferlist@empty}
+% \begin{macro}{\force@deferlist@sw}
+% \begin{macro}{\do@forcecolumn@pen}
+% \begin{macro}{\do@forcecolumn}
+% The procedure \cmd\force@deferlist@empty\ is an attempt to rectify a situation where \LaTeX's float placement mechanism
+% may fail (``too many unprocessed floats'').
+%
+% We put down interrupts that call for the float placement to be redone, but under permissive conditions,
+% just the same as if \cmd\clearpage\ had been invoked.
+%
+% Note that the attempt to rectify the error is contingent on the setting of \cmd\force@deferlist@sw,
+% default false. A document class using this package that wishes to enable this error recovery mechanism should
+% set this boolean to true.
+%
+% The interrupt \cmd\do@forcecolumn@pen, which invokes the procedure \cmd\do@forcecolumn,
+% does the same as \cmd\do@startcolumn, except under permissive conditions:
+% we are trying to empty out the float registers completely.
+%
+% In order to properly with the case where there is material in \cmd\box\cmd\@cclv,
+% \cmd\@toplist, \cmd\@botlist, \cmd\@dbltoplist, etc,
+% we do what amounts to \cmd\newpage\ to get things rolling.
+%
+% In \cmd\force@deferlist@stuck, we take advantage of already being in the output routine:
+% simply reinvoke \cmd\do@startcolumn\ under permissive conditions.
+%
+% \begin{macrocode}
+\def\force@deferlist@stuck#1{%
+ \force@deferlist@sw{%
+ \@booleantrue\clearpage@sw
+ \@booleantrue\forcefloats@sw
+ #1%
+ }{%
+ }%
+}%
+\def\force@deferlist@empty{%
+ \force@deferlist@sw{%
+% \ltxgrid@info{#1, attempting rectification}%
+ \penalty-\pagebreak@pen
+ \protect@penalty\do@forcecolumn@pen
+ }{%
+% \ltxgrid@info{#1}%
+ }%
+}%
+\@booleanfalse\force@deferlist@sw
+\mathchardef\do@forcecolumn@pen=10009
+\@namedef{output@-\the\do@forcecolumn@pen}{\do@forcecolumn}%
+\def\do@forcecolumn{%
+ \@booleantrue\clearpage@sw
+ \@booleantrue\forcefloats@sw
+%\unvbox\@cclv
+%\vfil
+%\penalty-\pagebreak@pen
+ \do@startcolumn
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% A more thorough revision of \LaTeX's float placement mechanism would involve substituting a single \cmd\box\
+% register for the \cmd\@deferlist. This way, \LaTeX's ability to have latent floats would be limited by
+% box memory alone.
+%
+% Because only the \cmd\box\ and \cmd\count\ components of the float box register are actually used by \LaTeX,
+% our scheme can be accomplished if we can find a way to encode the information held in the \cmd\count\ component.
+%
+% A first-in, first-out mechanism exists, wherein a box-penalty pair is dequeued by \cmd\lastbox\cmd\lastpenalty\cmd\unpenalty\ and enqueued
+% by \cmd\setbox\cmd\foo=\cmd\hbox\cmd\bgroup\cmd\penalty\cmd\floatpenalty\cmd\box\cmd\floatbox\cmd\unhbox\cmd\foo\cmd\egroup.
+%
+% Note that this scheme is made possible by our change to \LaTeX's float placement mechanism,
+% wherein we consolidated the two \cmd\@deferlist s into one.
+%
+% \section{Support for legacy \LaTeX\ commands}
+%
+% We provide support for the \cmd\enlargethispage\ command.
+%
+% Note: using a command of this sort is questionable.
+% Instead, people should enlarge the entire spread.
+%
+% Timing Note: In a multicolumn page grid, the user should issue the \cmd\enlargethispage\ command
+% while the first column of the page is being typeset.
+% We provide a helpful message if the timing is wrong.
+%
+% This code can serve as a model for introducing commands that need to execute within the safety of the output routine.
+% We ensure that the arguments are fully expanded, then execute \cmd\do@output@MVL\ to cause an output procedure,
+% \cmd\@@enlargethispage, to execute. When it does execute, the MVL will be exposed.
+%
+% The \cmd\@@enlargethispage\ procedure simply adjusts the vertical dimensions of the page.
+% The adjustment will persist until the column is committed, at which point the page dimension
+% will revert to its standard value.
+% \begin{macrocode}
+\def\enlargethispage{%
+ \@ifstar{%
+ \@enlargethispage{}%
+ }{%
+ \@enlargethispage{}%
+ }%
+}%
+\def\@enlargethispage#1#2{%
+ \begingroup
+ \dimen@#2\relax
+ \edef\@tempa{#1}%
+ \edef\@tempa{\noexpand\@@enlargethispage{\@tempa}{\the\dimen@}}%
+ \expandafter\do@output@MVL\expandafter{\@tempa}%
+ \endgroup
+}%
+\def\@@enlargethispage#1#2{%
+ \def\@tempa{one}%
+ \@ifx{\thepagegrid\@tempa}{%
+ \true@sw
+ }{%
+ \def\@tempa{mlt}%
+ \@ifx{\thepagegrid\@tempa}{%
+ \@ifnum{\pagegrid@cur=\@ne}{% OK to adjust this page
+ \gdef\enlarge@colroom{#2}%
+ \true@sw
+ }{% Can only adjust this column; give up
+ \ltxgrid@warn{Too late to enlarge this page; move the command to the first column.}%
+ \false@sw
+ }%
+ }{% Unknown page grid
+ \ltxgrid@warn{Unable to enlarge a page of this kind.}%
+ \false@sw
+ }%
+ }%
+ {%
+ \class@info{Enlarging page \thepage\space by #2}%
+ \global\advance\@colroom#2\relax
+ \set@vsize
+ }{%
+ % Could not adjust this page
+ }%
+}%
+\let\enlarge@colroom\@empty
+% \end{macrocode}
+% The \cmd\@kludgeins\ insert register is now unneeded.
+% Ensure that packages using this mechanism break (preferrable to subtle bugs).
+% \begin{macrocode}
+\let\@kludgeins\@undefined
+% \end{macrocode}
+%
+% \subsubsection{Building the page for shipout}
+%
+% \begin{macro}{\@outputpage}
+% The procedures that build \cmd\@outputbox\ just before a page is shipped out by \cmd\@outputpage\ are:
+% \cmd\@makecol,
+% \cmd\@combinepage, and
+% \cmd\@combinedblfloats.
+% We headpatch \cmd\@outputpage\ to make the \cmd\@outputbox\ be of fixed height.
+% \begin{macrocode}
+\@booleantrue\textheight@sw
+\prepdef\@outputpage{%
+ \textheight@sw{%
+ \count@\vbadness\vbadness\@M
+ \dimen@\vfuzz\vfuzz\maxdimen
+ \setbox\@outputbox\vbox to\textheight{\unvbox\@outputbox}%
+ \vfuzz\dimen@
+ \vbadness\count@
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Warning message}
+%
+% \begin{macro}{\ltxgrid@info}
+% \begin{macro}{\ltxgrid@warn}
+% Something has happened that the user might be interested in.
+% Print a message to the log, but only if the user selected the verbose option.
+% \begin{macrocode}
+\def\ltxgrid@info{%
+ \ltxgrid@info@sw{\class@info}{\@gobble}%
+}%
+\@booleanfalse\ltxgrid@info@sw
+\def\ltxgrid@warn{%
+ \ltxgrid@warn@sw{\class@warn}{\@gobble}%
+}%
+\@booleantrue\ltxgrid@warn@sw
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \section{End of the \file{ltxgrid} {\sc docstrip} module}
+% Here ends the module.
+% \begin{macrocode}
+%</ltxgrid-krn>
+% \end{macrocode}
+%
+% \Finale
+% %Here ends the programmer's documentation.
+% \endinput
+%
+\endinput
+%%EOF
diff --git a/obsolete/macros/latex/contrib/revtex4-0/src/ltxgrid.pdf b/obsolete/macros/latex/contrib/revtex4-0/src/ltxgrid.pdf
new file mode 100644
index 0000000000..61af74fd48
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-0/src/ltxgrid.pdf
Binary files differ
diff --git a/obsolete/macros/latex/contrib/revtex4-0/src/ltxutil.dtx b/obsolete/macros/latex/contrib/revtex4-0/src/ltxutil.dtx
new file mode 100644
index 0000000000..5553e3a863
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-0/src/ltxutil.dtx
@@ -0,0 +1,3534 @@
+% \iffalse ltxdoc klootch
+% ltxutil.dtx: package to add utilties to LaTeX
+% Copyright (c) 2000 Arthur Ogawa
+%
+% Disclaimer
+% This file is distributed WITHOUT ANY WARRANTY;
+% without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+% ReadMe
+% For the documentation and more detailed instructions for
+% installation, typeset this document with \LaTeX.
+% \fi
+% \GetFileInfo{ltxutil.dtx}\CheckSum{3641}
+%
+% \iffalse ltxdoc klootch
+%<*ltxutil>
+%%% @LaTeX-file{
+%%% filename = "ltxutil.dtx",
+%%% version = "1.0rc5b",
+%%% date = "2001/07/31",
+%%% time = "12:23:00 GMT+8",
+%%% checksum = "3641",
+%%% author = "Arthur Ogawa (mailto:ogawa@teleport.com),
+%%% commissioned by the American Physical Society.
+%%% ",
+%%% copyright = "Copyright (C) 1999 Arthur Ogawa,
+%%% distributed under the terms of the
+%%% LaTeX Project Public License, see
+%%% ftp://ctan.tug.org/macros/latex/base/lppl.txt
+%%% ",
+%%% address = "Arthur Ogawa,
+%%% USA",
+%%% telephone = "",
+%%% FAX = "",
+%%% email = "ogawa@teleport.com",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "latex, utility, kernel",
+%%% supported = "yes",
+%%% abstract = "package to add utilties to LaTeX",
+%%% docstring = "The checksum field above generated by ltxdoc",
+%%% }
+%</ltxutil>
+% \fi
+%
+% \iffalse ltxdoc klootch
+% The following references the \file{00readme.txt} file,
+% which contains basic information about this package.
+% The contents of this file are generated when
+% you typeset the programmer's documentation.
+% Search on "{filecontents*}{00readme.txt}" to locate it.
+% \fi\input{00readme.txt}%
+%
+% \subsection{Bill of Materials}
+%
+% Following is a list of the files in this distribution arranged
+% according to provenance.
+%
+% \subsubsection{Primary Source}%
+% One single file generates all.
+%\begin{verbatim}
+%ltxutil.dtx
+%\end{verbatim}
+%
+% \subsubsection{Generated by \texttt{latex ltxutil.dtx}}%
+% Typesetting the source file under \LaTeX\
+% generates the readme and the installer.
+%\begin{verbatim}
+%00readme.txt ltxutil.ins
+%\end{verbatim}
+%
+% \subsubsection{Generated by \texttt{tex ltxutil.ins}}%
+% Typesetting the installer generates
+% the package files.
+%\begin{verbatim}
+%ltxutil.sty
+%\end{verbatim}
+%
+% \subsubsection{Documentation}%
+% The following are the online documentation:
+% \begin{verbatim}
+%ltxutil.pdf
+% \end{verbatim}
+%
+% \subsubsection{Auxiliary}%
+% The following are auxiliary files generated
+% in the course of running \LaTeX:
+% \begin{verbatim}
+%ltxutil.aux ltxutil.idx ltxutil.ind ltxutil.log ltxutil.toc
+% \end{verbatim}
+%
+% \section{Code common to all modules}%
+%
+% The following may look a bit klootchy, but we
+% want to require only one place in this file
+% where the version number is stated,
+% and we also want to ensure that the version
+% number is embedded into every generated file.
+%
+% Now we declare that
+% these files can only be used with \LaTeXe.
+% An appropriate message is displayed if
+% a different \TeX{} format is used.
+% \begin{macrocode}
+%<*doc|ltxutil>
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]%
+%</doc|ltxutil>
+% \end{macrocode}
+% As desired, the following modules all
+% take common version information:
+% \begin{macrocode}
+%<ltxutil>\ProvidesFile{ltxutil.sty}%
+%<*doc>
+\expandafter\ProvidesFile\expandafter{\jobname.dtx}%
+%</doc>
+% \end{macrocode}
+%
+% The following line contains, for once and for all,
+% the version and date information.
+% By various means, this information is reproduced
+% consistently in all generated files and in the
+% typeset documentation.
+% \begin{macrocode}
+%<*doc|ltxutil>
+ [2001/07/31 1.0rc5b utilities package]% \fileversion
+%</doc|ltxutil>
+% \end{macrocode}
+%
+%
+% \section{The driver module \texttt{doc}}
+%
+% This module, consisting of the present section,
+% typesets the programmer's documentation,
+% generating the \file{.ins} installer and \file{00readme.txt} as required.
+%
+% Because the only uncommented-out lines of code at the beginning of
+% this file constitute the \file{doc} module itself,
+% we can simply typeset the \file{.dtx} file directly,
+% and there is thus rarely any need to
+% generate the ``doc'' {\sc docstrip} module.
+% Module delimiters are nonetheless required so that
+% this code does not find its way into the other modules.
+%
+% The \enve{document} command concludes the typesetting run.
+%
+% \begin{macrocode}
+%<*doc>
+% \end{macrocode}
+%
+% \subsection{The Preamble}
+% The programmers documentation is formatted
+% with the \classname{ltxdoc} class with local customizations,
+% and with the usual code line indexing.
+% \begin{macrocode}
+\documentclass{ltxdoc}
+\RequirePackage{ltxdocext}%
+\let\url\undefined
+\RequirePackage[colorlinks=true,linkcolor=blue]{hyperref}%
+\expandafter\ifx\csname package@font\endcsname\@undefined\else
+ \expandafter\RequirePackage\expandafter{\csname package@font\endcsname}%
+\fi
+\CodelineIndex\EnableCrossrefs
+% \end{macrocode}
+%
+% \subsubsection{Docstrip and info directives}
+% We use so many {\sc docstrip} modules that we set the
+% \texttt{StandardModuleDepth} counter to 1.
+% \begin{macrocode}
+\setcounter{StandardModuleDepth}{1}
+% \end{macrocode}
+% The following command retrieves the date and version information
+% from this file.
+% \begin{macrocode}
+\expandafter\GetFileInfo\expandafter{\jobname.dtx}%
+% \end{macrocode}
+%
+%
+% \subsection{The installer file}
+%
+% The installer \file{ltxutil.ins} appears here.
+% If you have retrieved the standard distribution of this package,
+% the installer file is already on your filesystem.
+% If you are bootstrapping,
+% the first typesetting of the \file{.dtx} file
+% will cause the installer to be generated.
+%
+% The following modules are used to direct
+% {\sc docstrip} in generating the external files:
+% \begin{center}
+% \begin{tabular}{lll}
+% \textbf{Module}&\textbf{File}&\textbf{Description}\\
+% doc &\file{ltxutil.drv}&driver for programmer's documentation\\
+% ltxutil,ltxutil-krn &\file{ltxutil.sty}&this package\\
+% ltxutil-krn& &the portion of this package suitable for inclusion within another package
+% \end{tabular}
+% \end{center}
+%
+% \begin{macrocode}
+\begin{filecontents}{ltxutil.ins}
+%% This file will generate documentation and runtime files
+%% from ltxutil.dtx when run through LaTeX or TeX.
+\input docstrip
+\preamble
+
+This is a generated file;
+altering it directly is inadvisable;
+instead, modify the original source file.
+See the URL in the file 00readme.txt.
+
+Copyright notice.
+
+ These files are distributed
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+\endpreamble
+\keepsilent
+ \generate{%
+ \file{ltxutil.drv}{\from{ltxutil.dtx}{doc}}%
+ \file{ltxutil.sty}{%
+ \from{ltxutil.dtx}{ltxutil,ltxutil-krn}%
+ }%
+ }%
+\ifToplevel{
+\Msg{***********************************************************}
+\Msg{*}
+\Msg{* To finish the installation, please move}
+\Msg{* ltxutil.sty}
+\Msg{* into a directory searched by TeX.}
+\Msg{*}
+\Msg{* To produce the documentation,
+ run ltxutil.dtx through LaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing}
+\Msg{***********************************************************}
+}
+\endbatchfile
+\end{filecontents}
+% \end{macrocode}
+% Note that, because all of the files generated by the installer
+% are part of the standard distribution, it will
+% be necessary to run the installer only when bootstrapping
+% (or, of course, during development).
+% Note, too, that it is rare to generate the \file{doc}
+% module because it suffices to simply typeset the \file{.dtx} file itself.
+%
+% \subsection{The ``Read Me'' File}
+% As promised above, here is the contents of the
+% ``Read Me'' file. That file serves a double purpose,
+% since it also constitutes the beginining of the
+% programmer's documentation. What better thing, after
+% all, to have appear at the beginning of the
+% typeset documentation?
+%
+% A good discussion of how to write a ReadMe file can be found in
+% Engst, Tonya, ``Writing a ReadMe File? Read This''
+% \emph{MacTech} October 1998, p. 58.
+%
+% Note the appearance of the
+% \cmd\StopEventually\ command, which marks the
+% dividing line between the user documentation
+% and the programmer documentation.
+%
+% The usual user will not be asked to
+% do a full build, not to speak
+% of the bootstrap.
+% Instructions for carrying these processes
+% begin the programmer's manual.
+%
+% \begin{macrocode}
+\begin{filecontents*}{00readme.txt}
+\title{%
+ A \LaTeX\ Package of utility macros%
+ \thanks{%
+ This file has version number \fileversion,
+ last revised \filedate.%
+ % For version number and date,
+ % search on "\fileversion" in the .dtx file,
+ % or see the end of the 00readme.txt file.
+ }%
+}%
+
+\author{%
+Arthur Ogawa (\texttt{mailto:ogawa@teleport.com}),
+\fileversion\\Copyright (C) 1999 Arthur Ogawa
+}%
+\maketitle
+
+This file embodies the \classname{ltxutil} package,
+the implementation and its user documentation.
+
+The distribution point for this work is
+\url{ftp://ftp.teleport.com/users/ogawa/macros/latex/contrib/supported/ltxutil...},
+which contains fully unpacked, prebuilt runtime files and documentation.
+
+The \classname{ltxutil} package was commissioned by the American Physical Society
+and is distributed under the terms of the \LaTeX\ Project Public License,
+the same license under which all the portions of \LaTeX\ itself is distributed.
+Please see \url{http://ctan.tug.org/macros/latex/base/lppl.txt} for details.
+
+To use this document class, you must have a working
+\TeX\ installation equipped with \LaTeXe\
+and possibly pdftex and Adobe Acrobat Reader or equivalent.
+
+To install, retrieve the distribution,
+unpack it into a directory on the target computer,
+and move the file \file{ltxutil.sty}
+into a location in your filesystem where it will be found by \LaTeX.
+
+To use, read the user documentation \file{ltxutil.pdf}.
+
+\tableofcontents
+
+\section{Processing Instructions}
+
+The package file \file{ltxutil.sty}
+is generated from this file, \file{ltxutil.dtx},
+using the {\sc docstrip} facility of \LaTeX
+via |tex ltxutil.ins|.
+The typeset documentation that you are now reading is generated from
+the same file by typesetting it with \LaTeX\ or pdftex
+via |latex ltxutil.dtx| or |pdflatex ltxutil.dtx|.
+
+\subsection{Build Instructions}
+
+You may bootstrap this suite of files solely from \file{ltxutil.dtx}.
+Prepare by installing \LaTeXe\ (and either tex or pdftex) on your computer,
+then carry out the following steps:
+\begin{enumerate}
+\item
+Within an otherwise empty directory,
+typeset \file{ltxutil.dtx} with \LaTeX\ or pdflatex;
+you will obtain the typeset documentation you are now reading,
+along with
+the installer \file{ltxutil.ins},
+and the file \file{00readme.txt}.
+
+Note: you will have to run \LaTeX\ twice, then \file{makeindex}, then
+\LaTeX\ again in order to obtain a valid index and table of contents.
+\item
+Now typeset \file{ltxutil.ins},
+thereby generating the package file \file{ltxutil.sty}.
+\item
+Install \classname{ltxutil.sty}
+by moving it to a location
+in your filesystem where they will be found by \LaTeX.
+\end{enumerate}
+\end{filecontents*}
+% \end{macrocode}
+%
+% \subsection{The Document Body}
+%
+% Here is the document body, containing only a
+% \cmd\DocInput\ directive---referring to this very file.
+% This very cute self-reference is a common \classname{ltxdoc} idiom.
+% \begin{macrocode}
+\begin{document}%
+\expandafter\DocInput\expandafter{\jobname.dtx}%
+% ^^A\PrintChanges
+\end{document}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</doc>
+% \end{macrocode}
+%
+% \section{Using this package}
+% Once this package is installed on your filesystem, you can employ it in
+% adding functionality to \LaTeX\ by invoking it in your document or document class.
+%
+% \subsection{Invoking the package}
+% In your document, you can simply call it up in your preamble:
+% \begin{verbatim}
+%\documentclass{book}%
+%\usepackage{ltxutil}%
+%\begin{document}
+%<your document here>
+%\end{document}
+% \end{verbatim}
+% However, the preferred way is to invoke this package from within your
+% customized document class:
+% \begin{verbatim}
+%\NeedsTeXFormat{LaTeX2e}[1995/12/01]%
+%\ProvidesClass{myclass}%
+%\RequirePackage{ltxutil}%
+%\LoadClass{book}%
+%<class customization commands>
+%\endinput
+% \end{verbatim}
+%
+% Once loaded, the package gives you acccess to certain procedures,
+% usually to be invoked by a \LaTeX\ command or environment, but not at the document level.
+%
+%
+% \section{Compatability with \LaTeX's Required Packages}
+% Certain packages, usually ones written by members of the
+% \LaTeX\ Project itself, have been designated ``required'' and
+% are distributed as part of standard \LaTeX.
+% These packages have been placed in a priviledged position
+% vis \'a vis the \LaTeX\ kernel in that they override the definitions of certain kernel macros.
+%
+% The \classname{ltxutil} package will be incompatible with any package that
+% redefines any of the kernel macros that \classname{ltxutil} patches---if that
+% package is loaded \emph{after} \classname{ltxutil}. This means that for
+% greatest compatability, \classname{ltxutil} should be loaded \emph{after},
+% say, \classname{ftnright}, which overwrites \LaTeX's kernel
+% procedures \cmd\@outputdblcol, \cmd\@startcolumn, and \cmd\@makecol.
+%
+% Hereinafter follows some notes on specific \LaTeX\ packages.
+%
+% \subsection{array}
+% This package alters the way tabular environments are done,
+% therefore it could run afoul of the \LaTeX\ ``required'' package \classname{array} or any
+% package that calls for it to be loaded.
+% However, this package has provisions for remaining compatible with \classname{array}.
+% So long as the version of \classname{array} that is used with this package has the appropriate
+% meanings for the procedures it overwrites, all should be well.
+%
+% \subsection{longtable}
+% David Carlisle's \classname{longtable} package modifies both the \LaTeX\ kernel and the
+% \classname{array} package. This package must therefore alter \cmd\LT@array.
+% For now, that job is handled by \classname{ltxgrid}.
+%
+%
+%\StopEventually{}
+%
+% \section{Implementation of package}
+%
+% Special acknowledgment: this package uses concepts pioneered
+% and first realized by William Baxter (mailto:web@superscript.com)
+% in his SuperScript line of commercial typesetting tools, and
+% which are used here with his permission.
+%
+% \subsection{Beginning of the \file{ltxutil} {\sc docstrip} module}
+% \begin{macrocode}
+%<*ltxutil>
+\def\package@name{ltxutil}%
+\expandafter\PackageInfo\expandafter{\package@name}{%
+ Utility macros for \protect\LaTeXe,
+ by A. Ogawa (ogawa@teleport.com)%
+}%
+%</ltxutil>
+% \end{macrocode}
+%
+% \subsection{Banner}%
+% Credit where due.
+% \begin{macrocode}
+%<*ltxutil-krn>
+\typeout{%
+ ltxutil: portions licensed from W. E. Baxter (web@superscript.com)%
+}%
+% \end{macrocode}
+%
+% \subsection{Errors and warnings}
+%
+% \begin{macro}{\class@err}
+% \begin{macro}{\class@warn}
+% \begin{macro}{\class@info}
+% A few shorthands for Class messages.
+% Your document class should define \cmd\class@name.
+% \begin{macrocode}
+\def\class@err#1{\ClassError{\class@name}{#1}\@eha}%
+\def\class@warn#1{\ClassWarningNoLine{\class@name}{#1}}%
+\def\class@info#1{\ClassInfo{\class@name}{#1}}%
+\def\obsolete@command#1{%
+ \class@warn@end{Command \string#1\space is obsolete.^^JPlease remove from your document}%
+ \global\let#1\@empty
+ #1%
+}%
+\def\replace@command#1#2{%
+ \class@warn@end{Command \string#1\space is obsolete;^^JUse \string#2\space instead}%
+ \global\let#1#2%
+ #1%
+}%
+\def\replace@environment#1#2{%
+ \class@warn@end{Environment #1 is obsolete;^^JUse #2 instead}%
+ \glet@environment{#1}{#2}%
+ \@nameuse{#1}%
+}%
+\def\incompatible@package#1{%
+ \@ifpackageloaded{#1}{%
+ \def\@tempa{I cannot continue. You must remove the \string\usepackage\ statement that caused that package to be loaded.}%
+ \ClassError{\class@name}{The #1 package cannot be used with \class@name}%
+ \@tempa\stop
+ }{%
+ \class@info{#1 was not loaded (OK!)}%
+ }%
+}%
+\def\class@warn@end#1{%
+ \gappdef\class@enddocumenthook{\class@warn{#1}}%
+}%
+\AtEndOfClass{%
+ \@ifxundefined\class@name{\def\class@name{Generic Class}}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{New Tools}%
+%
+% \begin{macro}{\t@}
+% \begin{macrocode}
+\def\t@{to}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\dimen@iii}
+% \begin{macrocode}
+\dimendef\dimen@iii\thr@@
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\halignt@}
+% \begin{macrocode}
+\def\halignt@{\halign\t@}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\f@ur}
+% Analogous to \cmd\@ne, \cmd\tw@, and \cmd\thr@@.
+% \begin{macrocode}
+\chardef\f@ur=4\relax
+\chardef\cat@letter=11\relax
+\chardef\other=12\relax
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\let@environment}
+% \begin{macro}{\glet@environment}
+% The directive \cmd\let@environment\ takes care of a common programming
+% idiom whereby one environment is made a synonym for another.
+% \begin{macrocode}
+\def\let@environment#1#2{%
+ \expandafter\let
+ \csname#1\expandafter\endcsname\csname#2\endcsname
+ \expandafter\let
+ \csname end#1\expandafter\endcsname\csname end#2\endcsname
+}%
+\def\glet@environment#1#2{%
+ \global\expandafter\let
+ \csname#1\expandafter\endcsname\csname#2\endcsname
+ \global\expandafter\let
+ \csname end#1\expandafter\endcsname\csname end#2\endcsname
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\tracingplain}
+% The command \cmd\tracingplain\ causes \TeX's tracing parameters to
+% return to the values set by default. This command is sometimes
+% useful when you have said \cmd\tracingall\ somewhere and want to
+% restore.
+% The \cmd\traceoutput\ command causes \cmd\tracingoutput\ diagnostics
+% upon \cmd\shipout.
+% \begin{macrocode}
+\newcommand\tracingplain{%
+ \tracingonline\z@\tracingcommands\z@\tracingstats\z@
+ \tracingpages\z@\tracingoutput\z@\tracinglostchars\@ne
+ \tracingmacros\z@\tracingparagraphs\z@\tracingrestores\z@
+ \showboxbreadth5\showboxdepth3\relax %\errorstopmode
+ }%
+\newcommand\traceoutput{%
+ \appdef\@resetactivechars{\showoutput}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\say}
+% \begin{macro}{\saythe}
+% The commands \cmd\say\ and \cmd\saythe\ cause diagnostic messages in the
+% \TeX\ log that give the value of a control sequence name or a register
+% respectively.
+% \begin{macrocode}
+\newcommand\say[1]{\typeout{<\noexpand#1=\meaning#1>}}%
+\newcommand\saythe[1]{\typeout{<\noexpand#1=\the#1>}}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\fullinterlineskip}
+% Resets the \cmd\prevdepth\ so that the full amount of \cmd\baselineskip\ glue will be inserted by
+% the \cmd\baselinesklip\ mechanism.
+% Can be invoked just after a \cmd\hrule\ to undo its default suppression of base line skip.
+% \begin{macrocode}
+\def\fullinterlineskip{\prevdepth\z@}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\count@i}
+% \begin{macro}{\count@ii}
+%
+% \begin{macrocode}
+\countdef\count@i\@ne
+\countdef\count@ii\tw@
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Boolean Control}%
+% We introduce just enough of the Boolean calculus for \TeX.
+% Alan Jeffrey was the pioneer here, with an article in TUGboat
+% (Vol. 11, No. 2, page 237).
+% This implementation owes a debt to
+% William Baxter (web@superscript.com).
+% See articles by Baxter and Ogawa in the proceedings of the
+% 1994 TUG meeting, TUGboat Vol.~15, No.~3.
+%
+% \begin{macro}{\prepdef}
+% \begin{macro}{\appdef}
+% \begin{macro}{\gappdef}
+%
+% Provide the capability of performing head- and tail patches.
+% The procedure \cmd\prepdef\ prepends to the given macro
+% the tokens specified in its second argument.
+% Likewise for \cmd\appdef, except that it appends.
+% Note that the first 10 toks registers are utility registers,
+% and we simply make a control sequence name, \cmd\toks@ii, for one of
+% them.
+% \begin{macrocode}
+\long\def\prepdef#1#2{%
+ \@ifxundefined#1{\toks@{}}{\toks@\expandafter{#1}}%
+ \toks@ii{#2}%
+ \edef#1{\the\toks@ii\the\toks@}%
+}%
+\long\def\appdef#1#2{%
+ \@ifxundefined#1{\toks@{}}{\toks@\expandafter{#1}}%
+ \toks@ii{#2}%
+ \edef#1{\the\toks@\the\toks@ii}%
+}%
+\long\def\gappdef#1#2{%
+ \@ifxundefined#1{\toks@{}}{\toks@\expandafter{#1}}%
+ \toks@ii{#2}%
+ \global\edef#1{\the\toks@\the\toks@ii}%
+}%
+\long\def\appdef@val#1#2{%
+ \appdef#1{{#2}}%
+}%
+\long\def\appdef@e#1#2{%
+ \expandafter\appdef
+ \expandafter#1%
+ \expandafter{#2}%
+}%
+\long\def\appdef@eval#1#2{%
+ \expandafter\appdef@val
+ \expandafter#1%
+ \expandafter{#2}%
+}%
+\toksdef\toks@ii=\tw@
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@ifxundefined}
+% \begin{macro}{\@ifnotrelax}
+% \begin{macro}{\@argswap}
+% \begin{macro}{\@argswap@val}
+%
+% Certain utility procedures use \cmd\@ifxundefined,
+% which is defined here in terms of \cmd\@ifx.
+% Others use \cmd\@ifnotrelax, namely when
+% the control sequence name is manufactured by
+% the use of \cmd\csname.
+%
+% The procedures \cmd\@argswap and \cmd\@argswap@val
+% are used to facilitate control of expansion.
+%
+% \begin{macrocode}
+\long\def\@ifxundefined#1{\@ifx{\undefined#1}}%
+\long\def\@ifnotrelax#1#2#3{\@ifx{\relax#1}{#3}{#2}}%
+\long\def\@argswap#1#2{#2#1}%
+\long\def\@argswap@val#1#2{#2{#1}}%
+\def\@ifxundefined@cs#1{\expandafter\@ifx\expandafter{\csname#1\endcsname\relax}}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@boolean}
+% \begin{macro}{\@boole@def}
+% In order to define \cmd\@ifx, we first must create the
+% ``defining word'' (term taken form our Forth vocabulary)
+% \cmd\@boole@def, which employs \cmd\@boolean\ to do its job.
+% \begin{macrocode}
+\def\@boolean#1#2{%
+ \long\def#1{%
+ #2% \if<something>
+ \expandafter\true@sw
+ \else
+ \expandafter\false@sw
+ \fi
+ }%
+}%
+\def\@boole@def#1#{\@boolean{#1}}% Implicit #2
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@booleantrue}
+% \begin{macro}{\@booleanfalse}
+% The procedures \cmd\@booleantrue\ and
+% \cmd\@booleanfalse\ are assignment operators
+% for Boolean flags.
+% \begin{macrocode}
+\def\@booleantrue#1{\let#1\true@sw}%
+\def\@booleanfalse#1{\let#1\false@sw}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@ifx}
+% \begin{macro}{\@ifx@empty}
+% \begin{macro}{\@if@empty}
+% \begin{macro}{\@ifcat}%
+% \begin{macro}{\@ifdim}%
+% \begin{macro}{\@ifeof}%
+% \begin{macro}{\@ifhbox}%
+% \begin{macro}{\@ifhmode}%
+% \begin{macro}{\@ifinner}%
+% \begin{macro}{\@ifmmode}%
+% \begin{macro}{\@ifnum}%
+% \begin{macro}{\@ifodd}%
+% \begin{macro}{\@ifvbox}%
+% \begin{macro}{\@ifvmode}%
+% \begin{macro}{\@ifvoid}%
+% We can now invoke the defining word to create
+% the procedures \cmd\@ifx\ and friends.
+%
+% Compatability Note: earlier versions of this package
+% defined a procedure \cmd\@ifempty. However, for compatability with AMS\LaTeX,
+% we must avoid the following three names:
+% \cmd\@ifempty, \cmd\@xifempty, and \cmd\@ifnotempty.
+%
+% \begin{macrocode}
+\@boole@def\@ifx#1{\ifx#1}%
+\@boole@def\@ifx@empty#1{\ifx\@empty#1}%
+\@boole@def\@if@empty#1{\if!#1!}%
+%\@boole@def\@if@sw#1{\csname if#1\endcsname}%
+\def\@if@sw#1#2{#1\expandafter\true@sw\else\expandafter\false@sw#2}%
+\@boole@def\@ifdim#1{\ifdim#1}%
+\@boole@def\@ifeof#1{\ifeof#1}%
+\@boole@def\@ifhbox#1{\ifhbox#1}%
+\@boole@def\@ifhmode{\ifhmode}%
+\@boole@def\@ifinner{\ifinner}%
+\@boole@def\@ifmmode{\ifmmode}%
+\@boole@def\@ifnum#1{\ifnum#1}%
+\@boole@def\@ifodd#1{\ifodd#1}%
+\@boole@def\@ifvbox#1{\ifvbox#1}%
+\@boole@def\@ifvmode{\ifvmode}%
+\@boole@def\@ifvoid#1{\ifvoid#1}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\true@sw}
+% \begin{macro}{\false@sw}
+%
+% Note that when a Boolean operator expands, it
+% employs two macros that act as selectors, defined here.
+%
+% \begin{macrocode}
+\long\def\true@sw#1#2{#1}%
+\long\def\false@sw#1#2{#2}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\loopuntil}
+% \begin{macro}{\loopwhile}
+%
+% Loop control using the Boolean idiom.
+% Superior to \cmd\loop\dots\cmd\repeat\ because these can be nested.
+% The tail of the argument must have a Boolean predicate.
+%
+% \begin{macrocode}
+\long\def\loopuntil#1{#1{}{\loopuntil{#1}}}%
+\long\def\loopwhile#1{#1{\loopwhile{#1}}{}}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@provide}
+%
+% A defining word that refuses to clobber a prior meaning.
+%
+% \begin{macrocode}
+\def\@provide#1{%
+ \@ifx{\undefined#1}{\true@sw}{\@ifx{\relax#1}{\true@sw}{\false@sw}}%
+ {\def#1}{\def\j@nk}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Begin Document Structure}
+% The standard \LaTeX\ mechanism \cmd\AtBeginDocument\
+% is inadequate because the \cmd\vsize\ is bound much too early.
+% We supply here a mechanism whereby decisions about the
+% page layout can be deferred until \cmd\AtBeginDocument\ time.
+%
+% The problem we are working around is that the \cmd\AtBeginDocument\
+% hook in \cmd\document\ appears long after the calculation of
+% \cmd\vsize\ and \cmd\hsize, that is, \LaTeX\ provides no mechanism
+% for deferring the decision about the page grid until \cmd\AtBeginDocument\ time.
+% We fix things by prepending a hook at the very beginning of \cmd\document.
+%
+% The price we pay for this facility is to depend on the stability of this part
+% of \LaTeX's kernel code (the first token of \cmd\document),
+% which could change, you see. But considering that \LaTeX\ is
+% at this point essentially stagnant once more, we risk it.
+%
+% \begin{macro}{\document}
+% We begin by installing hooks into \cmd\document\ that
+% we will manage ourselves.
+% First, we do as \cmd\document\ does: end the group
+% begun by \cmd\begin. Last, we conclude our shenanigans by absorbing
+% the first token of the expansion of \cmd\document, which
+% we assume to be \cmd\endgroup.
+% \begin{macrocode}
+\prepdef\document{%
+ \endgroup
+ \init@documenthook
+ \set@typesize@hook
+ \normalsize
+ \set@pica@hook
+ \true@sw{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\class@documenthook}
+% \begin{macro}{\class@enddocumenthook}
+% We install the first \cmd\AtBeginDocument\ hook, namely the
+% procedure \cmd\class@documenthook. Within the document class,
+% we will use this hook exclusively, so as to avoid interference from other packages.
+% Similarly with \cmd\class@enddocumenthook, installed via \cmd\AtEndDocument.
+%
+% A document class using this package should do as this package does and
+% just say, \cmd\appdef\cmd\class@documenthook\ and \cmd\appdef\cmd\class@enddocumenthook\
+% instead of \cmd\AtBeginDocument\ and \cmd\AtEndDocument.
+% \begin{macrocode}
+\def\init@documenthook{}%
+\AtBeginDocument{%
+ \class@documenthook
+}%
+\AtEndDocument{%
+ \class@enddocumenthook
+}%
+\def\class@documenthook{}%
+\def\class@enddocumenthook{}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\set@typesize@hook}
+% \begin{macro}{\set@pica@hook}
+% The macros \cmd\set@typesize@hook\ and \cmd\set@pica@hook\ provide everything we need.
+% To use, simply \cmd\appdef\ your tokens to the appropriate hook.
+% \begin{macrocode}
+\def\set@typesize@hook{}%
+\def\set@pica@hook{}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\enddocument}
+% \begin{macro}{\check@aux}
+% \begin{macro}{\do@check@aux}
+% The standard \LaTeX\ \enve{document} processing is a potential problem,
+% particularly when the output routine has been changed by \classname{ltxgrid}.
+% We separate out the procedure that checks the auxiliary file at the end of
+% the job so that later it can be called from the safety of the output
+% routine.
+% We will do this to ensure that the \cmd\@mainaux\ stream is not closed until
+% the last page of the job is shipped out, and that can only be done by coordinating
+% with the output routine.
+% \begin{macrocode}
+\def\enddocument{%
+ \@enddocumenthook
+ \@checkend{document}%
+ \clear@document
+ \check@aux
+ \deadcycles\z@
+ \@@end
+}%
+\def\clear@document{\clearpage}%
+\def\check@aux{\do@check@aux}%
+\def\do@check@aux{%
+ \@if@sw\if@filesw\fi{%
+ \immediate\closeout\@mainaux
+ \let\@setckpt\@gobbletwo
+ \let\@newl@bel\@testdef
+ \@tempswafalse
+ \makeatletter
+ \input\jobname.aux\relax
+ }{}%
+ \@dofilelist
+ \@ifdim{\font@submax >\fontsubfuzz\relax}{%
+ \@font@warning{%
+ Size substitutions with differences\MessageBreak
+ up to \font@submax\space have occured.\@gobbletwo
+ }%
+ }{}%
+ \@defaultsubs
+ \@refundefined
+ \@if@sw\if@filesw\fi{%
+ \@ifx{\@multiplelabels\relax}{%
+ \@if@sw\if@tempswa\fi{%
+ \@latex@warning@no@line{%
+ Label(s) may have changed.
+ Rerun to get cross-references right
+ }%
+ }{}%
+ }{%
+ \@multiplelabels
+ }%
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Type Tools}%
+%
+% \begin{macro}{\flushing}
+% Undoes \cmd\centering. Should also undo \cmd\raggedleft\ and \cmd\raggedright.
+% \begin{macrocode}
+\def\flushing{%
+ \let\\\@normalcr
+ \leftskip\z@skip
+ \rightskip\z@skip
+ \@rightskip\z@skip
+ \parfillskip\@flushglue
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Display Math}%
+%
+% \begin{macro}{\eqnarray@LaTeX}
+% \begin{macro}{\eqnarray@fleqn@fixed}
+% Team \LaTeX\ has stated they will never repair Leslie's broken definition of \env{eqnarray}.
+% Let us be bold\dots.
+%
+% Note on \classname{hyperref} package compatability: that package overrides
+% \cmd\eqnarray\ by wrapping it up in a larger procedure, so its changes
+% are compatible with this package's changes.
+%
+% \begin{macrocode}
+\def\eqnarray@LaTeX{%
+ \stepcounter{equation}%
+ \def\@currentlabel{\p@equation\theequation}%
+ \global\@eqnswtrue
+ \m@th
+ \global\@eqcnt\z@
+ \tabskip\@centering
+ \let\\\@eqncr
+ $$\everycr{}\halign\t@\displaywidth\bgroup
+ \hskip\@centering$\displaystyle\tabskip\z@skip{##}$\@eqnsel
+ &\global\@eqcnt\@ne\hskip \tw@\arraycolsep \hfil${##}$\hfil
+ &\global\@eqcnt\tw@ \hskip \tw@\arraycolsep
+ $\displaystyle{##}$\hfil\tabskip\@centering
+ &\global\@eqcnt\thr@@ \hb@xt@\z@\bgroup\hss##\egroup
+ \tabskip\z@skip
+ \cr
+}
+\long\def\eqnarray@fleqn@fixed{%
+ \stepcounter{equation}\def\@currentlabel{\p@equation\theequation}%
+ \global\@eqnswtrue\m@th\global\@eqcnt\z@
+ \tabskip\mathindent
+ \let\\=\@eqncr
+ \setlength\abovedisplayskip{\topsep}%
+ \ifvmode\addtolength\abovedisplayskip{\partopsep}\fi
+ \addtolength\abovedisplayskip{\parskip}%
+ \setlength\belowdisplayskip{\abovedisplayskip}%
+ \setlength\belowdisplayshortskip{\abovedisplayskip}%
+ \setlength\abovedisplayshortskip{\abovedisplayskip}%
+ $$%
+ \everycr{}%
+ \halignt@\linewidth\bgroup
+ \hskip\@centering$\displaystyle\tabskip\z@skip{##}$\@eqnsel
+ &\global\@eqcnt\@ne
+ \hskip\tw@\eqncolsep
+ \hfil${{}##{}}$\hfil
+ &\global\@eqcnt\tw@
+ \hskip\tw@\eqncolsep
+ $\displaystyle{##}$\hfil\tabskip\@centering
+ &\global\@eqcnt\thr@@\hb@xt@\z@\bgroup\hss##\egroup
+ \tabskip\z@skip
+ \cr
+}%
+\@ifx{\eqnarray\eqnarray@LaTeX}{%
+ \class@info{Repairing broken LaTeX eqnarray}%
+ \let\eqnarray\eqnarray@fleqn@fixed
+ \newlength\eqncolsep
+ \setlength\eqncolsep\z@
+ \let\eqnarray@LaTeX\relax
+ \let\eqnarray@fleqn@fixed\relax
+}{}%
+\def\mathindent{\@centering}%
+\def\set@eqnarray@skips{}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Footnotes}
+%
+% \changes{v4.0beta 4}{2000/04/10}
+% {New kernel fix. For bug 174}
+%
+% \begin{macro}{\footnote}
+% \begin{macro}{\footnotemark}
+% \begin{macro}{\@xfootnote}
+% \begin{macro}{\@xfootnotemark}
+% \begin{macro}{\@yfootnote}
+% We repair an error in the \LaTeX\ kernel (see \file{ltfloat.dtx}) involving footnotes.
+% The symptom is that the \cmd\footnotemark\ command does not work properly within a \env{minipage} environment.
+% The source of the problem is in the way the \cmd\footnotemark\ and \cmd\@xfootnotemark\ procedures are defined:
+% they do not share the method used by the \cmd\footnote\ and other procedures that allows a context switch to
+% change the way footnotes behave within a minipage environment.
+% This is a \LaTeX\ bug of long standing; this fix dates to 1987.
+%
+% While we are at it, we rewrite both the \cmd\footnote\ and \cmd\footnotemark\ procedures,
+% achieving a slightly cleaner separation of syntax and semantics.
+% Note that the \cmd\@footnotemark\ and \cmd\@footnotetext\ procedures are not altered here;
+% they continue as the methods of formatting the footnote mark and footnote text, respectively.
+%
+% A note about the context switch mentioned above:
+% the \env{minipage} environment executes the following in order to alter the way footnotes
+% behave:
+%\begin{verbatim}
+%\def\@mpfn{mpfootnote}%
+%\def\thempfn{\thempfootnote}%
+%\let\@footnotetext\@mpfootnotetext
+%\c@mpfootnote\z@
+%\end{verbatim}
+% This code changes the counter used in autonumbered footnotes, the choice of footnote marker,
+% and the procedure used on the footnote text. Changing the counter is needed because minipage
+% footnotes are in their own sequence, and the footnote marker is customarily different within
+% a minipage. The procedure that works on the footnote text must be different because the footnotes
+% are placed at the bottom of the minipage, not the bottom of the text column.
+%
+% Any procedure that establishes a minipage-like context (e.g., floats) can do the same.
+% \begin{macrocode}
+\def\footnote{%
+ \@ifnextchar[\@xfootnote{\@yfootnote\@footnotetext}%
+}%
+\def\footnotemark{%
+ \@ifnextchar[\@xfootnotemark{\@yfootnote}%
+}%
+\def\@xfootnote[#1]{%
+ \@xfootnotemark[#1]%
+ \@footnotetext
+}%
+\def\@xfootnotemark@ltx[#1]{%
+ \begingroup
+ \csname c@\@mpfn\endcsname #1\relax
+ \unrestored@protected@xdef\@thefnmark{\thempfn}%
+ \endgroup
+ \H@@footnotemark
+}%
+\def\@yfootnote{%
+ \stepcounter\@mpfn
+ \protected@xdef\@thefnmark{\thempfn}%
+ \H@@footnotemark
+}%
+% \end{macrocode}
+%
+% Note on \classname{hyperref} compatability:
+% In its ``Automated \LaTeX\ hypertext cross-references'',
+% the \classname{hyperref} package alters footnote processing,
+% thereby imperiling these fixes and necessiating defensive measures.
+%
+% The main thing \classname{hyperref} does is to take over the \cmd\@mpfootnotetext\ and
+% \cmd\@footnotetext\ procedures, feeding its own arguments to these macros.
+% It also rewrites \cmd\@footnotemark, making it a hyperlink.
+%
+% But at the same time, it attempts to turn off these changes during
+% \cmd\maketitle\ processing, necessitating rewriting \cmd\@xfootnotemark.
+% At this point it is on the slippery slope.
+%
+% We make ourself \classname{hyperref} friendly:
+% we give \classname{hyperref} what it needs, but avoid its change to
+% \cmd\@xfootnotemark.
+%
+% Any other package that rewrites \LaTeX's footnote macros will be incompatible
+% with this package.
+% \begin{macrocode}
+\appdef\class@documenthook{%
+ \@ifxundefined\H@@footnotemark{%
+ \let\H@@footnotemark\@footnotemark
+ }{}%
+ \let\@xfootnotemark\@xfootnotemark@ltx
+}%
+% \end{macrocode}
+%
+% Two thoughts about \classname{hyperref}: what for does it define \cmd\realfootnote?
+% Also: a document class that desires high hypertext capabilities might
+% well wish to reimplement \cmd\maketitle\ so that footnotes called out from there
+% are hypertext links: the \classname{hyperref} package's
+% ``Automated \LaTeX\ hypertext cross-references''
+% does not do any of this:
+%\begin{quotation}
+% But the special footnotes
+% in |\maketitle| are much too hard to deal with
+% properly. Let them revert to plain behaviour.
+%\end{quotation}
+% Note that the document class, in reimplementing \cmd\maketitle, must ensure
+% that the \classname{hyperref} package does not clobber its own definition!
+%
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@footnotetext}
+% \begin{macro}{\@mpfootnotetext}
+% \begin{macro}{\@tpfootnotetext}
+% \begin{macro}{\make@footnotetext}
+% \begin{macro}{\set@footnotewidth}
+% The two procedures \cmd\@footnotetext\ and \cmd\@mpfootnotetext\ share code.
+% We make that explicit here.
+%
+% Note that the procedure calling \cmd\make@footnotetext\ will open a group
+% with \cmd\bgroup\ which is then closed by \cmd\minipagefootnote@drop.
+%
+% Difference from \LaTeX: here we do not set \cmd\floatingpenalty\ to infinity.
+% Doing this must date back to a time when \LaTeX\ could not accomodate split insertions (footnotes).
+% I cannot think of any other reason to do have done this.
+% At any rate, with the \classname{ltxgrid} package, split insertions are specifically properly
+% taken care of, so we allow it.
+%
+% We provide the hook \cmd\set@footnotewidth\
+% that sets the footnote on a particular measure.
+% Some page grids are such as to set a footnote in a context where \cmd\columnwidth
+% is not the right parameter to use for the set width of a footnote.
+% In such a case, for the applicable scope, you should define
+% \cmd\set@footnotewidth\ to perform this job correctly.
+%
+% A procedure, \cmd\set@footnotewidth@ii, illustrates how to do this when in a two-column page grid.
+% In general, remember that footnotes, like all insertions (including floats),
+% are a step outside of the galley context, and all aspects of insertions need to be
+% properly handled, including the set width.
+% \begin{macrocode}
+\long\def\@footnotetext{%
+ \insert\footins\bgroup
+ \make@footnotetext
+}%
+\long\def\@mpfootnotetext{%
+ \minipagefootnote@pick
+ \make@footnotetext
+}%
+\def\make@footnotetext#1{%
+ \reset@font\footnotesize
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\footnotesep
+ \splitmaxdepth\dp\strutbox
+% \floatingpenalty\@MM
+ \set@footnotewidth
+ \@parboxrestore
+ \protected@edef\@currentlabel{%
+ \csname p@footnote\endcsname\@thefnmark
+ }%
+ \color@begingroup
+ \@makefntext{%
+ \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox
+ }%
+ \color@endgroup
+ \minipagefootnote@drop
+}%
+\def\set@footnotewidth{%
+ \hsize\columnwidth
+ \linewidth\hsize
+}%
+\def\set@footnotewidth@ii{%
+ \hsize\textwidth
+ \advance\hsize\columnsep
+ \divide\hsize\tw@
+ \advance\hsize-\columnsep
+ \linewidth\hsize
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Floats}
+%
+% \subsubsection{Usage notes}%
+% We extend the \LaTeX\ kernel for three purposes:
+% \begin{enumerate}
+%
+% \item
+% When the \cmd\footnote\ command is used within the
+% scope of a float, we do as \env{minipage} does.
+%
+% \item
+% We provide a mechanism to write floats out to an external
+% stream for temporary storage (deferred floats).
+%
+% \item
+% We provide mechanism for placing a float \texttt{here}
+% invariably, that is, floats are unfloated.
+% This mechanism is used to read the external stream mentioned above.
+%
+% \end{enumerate}
+%
+% To use these mechanisms, the document class should
+% define a float, say, \env{figure} as per usual, and in addition:
+% \begin{enumerate}
+%
+% \item
+% Optionally define an alternative, say \env{figure@write} as follows:
+% \begin{verbatim}
+%\newenvironment{figure@write}{%
+% \write@float{figure}%
+%}{%
+% \endwrite@float
+%}%
+% \end{verbatim}
+% That is, the alternative environment executes \cmd\write@float\
+% instead of \cmd\@float.
+% Note that this step is not needed if the float environment
+% is defined in the simple way of \file{classes.dtx}.
+% However, an environment like \env{longtable} will require it.
+%
+% \item
+% Install into \cmd\AtBeginDocument\ a call to \cmd\do@if@floats,
+% with the float name and an appropriate file extension as its arguments.
+% \begin{verbatim}
+%\AtBeginDocument{\do@if@floats{figure}{.fgx}}%
+% \end{verbatim}
+%
+% \item
+% Optionally define a text entity \cmd\figuresname\ that will
+% be the text of the head that is set over the
+% deferred floats.
+% If not defined, there will be no head.
+%
+% \item
+% Optionally define a user-level command to allow
+% the document to determine where the figures are printed out
+% (default is to print at end of document). E.g.,
+% \begin{verbatim}
+%\newcommand\printfigures{\print@float{figure}}%
+% \end{verbatim}
+% \item
+% Install into \cmd\appdef\cmd\class@enddocumenthook\ a call to \cmd\printfigures,
+% or, if the latter is not defined, as follows:
+% \begin{verbatim}
+%\appdef\class@enddocumenthook{\print@float{figure}}%
+% \end{verbatim}
+% Note that installing this command into \cmd\AtBeginDocument
+% is best done earlier than calls that assume the last page of
+% the document is at hand.
+%
+% \end{enumerate}
+%
+% \subsubsection{Robustifying fragile commands}%
+% Certain of \LaTeX's commands cannot be written out to a file or appear within a \cmd\mark\ command argument
+% because they do calculations during expansion.
+% We provide for a little help, but without changing the meanings of these commands.
+%
+% \begin{macro}{\addtocontents}
+%
+% \begin{macrocode}
+\def\addtocontents#1#2{%
+ \protected@write\@auxout{%
+ \let \label \@gobble \let \index \@gobble \let \glossary \@gobble
+ \def\({\string\(}%
+ \def\){\string\)}%
+ \def\\{\string\\}%
+ }{\string \@writefile {#1}{#2}}%
+}%
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \subsubsection{Preparing for the \classname{hyperref package}}%
+%
+% \begin{macro}{\addcontentsline}
+% \begin{macro}{\contentsline}
+% The \classname{hyperref} package assumes that the \cmd\contentsline\ command will be given four arguments.
+% Therefore it cannot successfully process a \filename{.toc} file that had been written by standard \LaTeX.
+% We fix things up by always writing that fourth argument and by supplying a \cmd\contentsline\ command that
+% can read them.
+%
+% We also give the \cmd\newlabel\ command's second argument five tokens.
+%
+% This means that a document class that uses this package will itself have trouble taking over a \filename{.toc} file that was written by standard \LaTeX. Sigh.
+% \begin{macrocode}
+\def\addcontentsline#1#2#3{%
+ \addtocontents{#1}{%
+ \protect\contentsline{#2}{#3}{\thepage}{}%
+ }%
+}%
+\def\contentsline#1#2#3#4{%
+ \csname l@#1\endcsname{#2}{#3}%
+}%
+\def\label#1{%
+ \@bsphack
+ \protected@write\@auxout{}{%
+ \string\newlabel{#1}{{\@currentlabel}{\thepage}{}{}{}}%
+ }%
+ \@esphack
+}%
+% \end{macrocode}
+%
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Footnotes within floats, unfloating floats, float font}%
+%
+% \begin{macro}{\caption}
+% DPC: Er a bit of a hack, but seems best way of supporting normal
+% \LaTeX\ syntax at this point: If a caption is used below a table,
+% then put out the footnotes before the caption.
+% \changes{v4.0beta 2}{1999/06/20}
+% {Support the hack with \cs{prepdef}, and delay until \cs{AtBeginDocument} time,
+% since \classname{hyperref} clobbers \cs{caption}.}
+% \begin{macrocode}
+\appdef\class@documenthook{%
+ \prepdef\caption{\minipagefootnote@here}%
+}%
+% \end{macrocode}
+%
+% Note on \classname{hyperref} compatability:
+% this change to the \cmd\caption\ command is compatible with the
+% ``Automated \LaTeX\ hypertext cross-references'' patches of
+% that package.
+%
+% All the same, I think Sebastian's changes to \cmd\caption\ and \cmd\@caption\
+% could bear with some improvement.
+% The following implementation requires knowing only the pattern part of the
+% \cmd\@caption\ macro:
+%\begin{verbatim}
+%\def\caption{%
+% \H@refstepcounter\@captype
+% \hyper@makecurrent{\@captype}%
+% \@dblarg{\H@caption\@captype}%
+%}%
+%\def\H@caption#1[#2]#3{%
+% \@caption{#1}[#2]{%
+% \ifHy@nesting
+% \hyper@@anchor{\@currentHref}{#3}%
+% \else
+% \hyper@@anchor{\@currentHref}{\relax}#3%
+% \fi
+% }%
+%}%
+%
+%\end{verbatim}
+%
+% \end{macro}
+%
+% \begin{macro}{\minipagefootnote@init}
+% \begin{macro}{\minipagefootnote@here}
+% \begin{macro}{\minipagefootnote@foot}
+% \begin{macro}{\minipagefootnote@pick}
+% \begin{macro}{\minipagefootnote@drop}
+% Procedure to deal with footnotes accumulated within a minipage environment.
+% These procedures encapsulate all uses of the \cmd\@mpfootins\ box.
+%
+%
+% Note: \cmd\minipagefootnote@here\ must \emph{not} be executed within the MVL!
+% \begin{macrocode}
+\def\minipagefootnote@init{%
+ \setbox\@mpfootins\box\voidb@x
+}%
+\def\minipagefootnote@pick{%
+ \global\setbox\@mpfootins\vbox\bgroup
+ \unvbox\@mpfootins
+}%
+\def\minipagefootnote@drop{%
+ \egroup
+}%
+\def\minipagefootnote@here{%
+ \par
+ \@ifvoid\@mpfootins{}{%
+ \vskip\skip\@mpfootins
+ \fullinterlineskip
+ \@ifinner{%
+ \vtop{\unvcopy\@mpfootins}%
+ {\setbox\z@\lastbox}%
+ }{}%
+ \unvbox\@mpfootins
+ }%
+}%
+\def\minipagefootnote@foot{%
+ \@ifvoid\@mpfootins{}{%
+ \insert\footins\bgroup\unvbox\@mpfootins\egroup
+ }%
+}%
+\def\endminipage{%
+ \par
+ \unskip
+ \minipagefootnote@here
+ \@minipagefalse %% added 24 May 89
+ \color@endgroup
+ \egroup
+ \expandafter\@iiiparbox\@mpargs{\unvbox\@tempboxa}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\floats@sw}
+% The Boolean \cmd\floats@sw\ signifies that floats are to be floated;
+% if false, that floats are to be deferred to the end of the document.
+% Note that the state of this Boolean is to be changed by
+% the document class in response to user-selected options.
+% Here we display model code that assigns a default value
+% at \cmd\AtBeginDocument\ time.
+% \begin{verbatim}
+%\AtBeginDocument{%
+% \@ifxundefined\floats@sw{\@booleantrue\floats@sw}{}%
+%}%
+% \end{verbatim}
+% \end{macro}
+%
+% \begin{macro}{\@xfloat}
+% \begin{macro}{\@mpmakefntext}
+% The float start-code is redefined to set up footnotes in the style of minipage.
+% Also, the \cmd\floats@sw\ Boolean informs us that floats are to be
+% all placed \texttt{here}.
+% Note that, to protect against the Boolean being undefined
+% at this late hour, we default it globally to true.
+%
+% \changes{v4.0beta 2}{1999/06/20}
+% {AO: Removed superfluous \cs{def}s, changed to using \cs{floats@sw} as the flag.
+% Also stopped using DPC's \cs{if@twocolumn} flag: using \cs{floats@sw} instead.
+% Also added \cs{par}\cs{vskip}\cs{z@skip} after the \cs{minipagefootnotes}
+% so that the float box would have zero depth like the kernel one.
+% }
+% \changes{v4.0beta 3}{1999/11/13}
+% {bug fix 110. Install hooks for endfloats processing}
+% \changes{v4.0beta 4}{2000/04/10}
+% {bug fix 127. Floats placed [h] to allow page breaks}
+% \changes{v4.0beta 4}{2000/05/19}
+% {bug fix 224. Hyperref compatability.}
+% \changes{v4.0beta 5}{2000/11/16}
+% {bug fix 221. Remove samepage command from @xfloat@prep: If the float can break over pages, we want better control.}
+%FIXME: why does hyperref override \cmd\@xfootnotenext?
+%
+% \begin{macrocode}
+\let\@xfloat@LaTeX\@xfloat
+\def\@xfloat#1[#2]{%
+ \@xfloat@prep
+ \@nameuse{fp@proc@#2}%
+ \@ifxundefined\floats@sw{\global\@booleantrue\floats@sw}{}%
+ \floats@sw{\@xfloat@LaTeX{#1}[#2]}{\@xfloat@anchored{#1}[]}%
+}%
+\def\@xfloat@prep{%
+ \let\footnote\footnote@latex
+ \def\@mpfn{mpfootnote}%
+ \def\thempfn{\thempfootnote}%
+% \def\thefootnote{\thempfootnote}%
+ \c@mpfootnote\z@
+ \let\@footnotetext\@mpfootnotetext
+ \let\H@@footnotetext\@mpfootnotetext
+ \let\@makefntext\@mpmakefntext
+% \samepage
+}%
+\appdef\class@documenthook{%
+ \let\footnote@latex\footnote
+}%
+%\def\fp@proc@h{\@booleanfalse\floats@sw}%
+%\def\fp@proc@H{\@booleanfalse\floats@sw}%
+\def\@xfloat@anchored#1[#2]{%
+ \def\@captype{#1}%
+ \begin@float@pagebreak
+%\vbox\bgroup
+ \let\end@float\end@float@anchored
+ \let\end@dblfloat\end@float@anchored
+% do as \@xfloat does:
+ \hsize\columnwidth
+ \@parboxrestore
+ \@floatboxreset
+ \minipagefootnote@init
+% \pagegrid@col\@ne % Klootch to avoid processing as a float
+}%
+\def\end@float@anchored{%
+ \minipagefootnote@here
+ \par\vskip\z@skip %% \par\vskip\z@ added 15 Dec 87
+%\egroup
+ \par
+ \end@float@pagebreak
+}%
+\def\begin@float@pagebreak{\par\addvspace\intextsep}%
+\def\end@float@pagebreak{\par\addvspace\intextsep}%
+\def\@mpmakefntext#1{%
+ \parindent=1em
+ \noindent
+ \hb@xt@1em{\hss\@makefnmark}%
+ #1%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{Writing floats out to a file}%
+%
+% \begin{macro}{\do@if@floats}
+% The procedure \cmd\do@if@floats\ should be executed at
+% \cmd\AtBeginDocument\ time, and arranges to write out
+% the floats of the given class to a temporary file, to be
+% read back later (deferred floats),
+% given that \cmd\floats@sw\ is false.
+% Note that, to protect against the Boolean being undefined
+% at this late hour, we default it globally to true.
+% \begin{macrocode}
+\def\do@if@floats#1#2{%
+ \@ifxundefined\floats@sw{\global\@booleantrue\floats@sw}{}%
+ \floats@sw{}{%
+% \end{macrocode}
+% Open the stream to save out the document's floats of this class.
+% \begin{macrocode}
+ \expandafter\newwrite
+ \csname#1write\endcsname
+ \expandafter\def
+ \csname#1@stream\endcsname{\jobname#2}%
+ \expandafter\immediate
+ \expandafter\openout
+ \csname#1write\endcsname
+ \csname#1@stream\endcsname\relax
+% \end{macrocode}
+% Swap environments.
+% If the class writer has defined, e.g., \env{figure@write},
+% then we use this as the procedure to execute for writing
+% the float out to the external stream.
+% Otherwise, the replacement of \cmd\@float\ by \cmd\write@float\
+% should do the right thing for float environments defined
+% in the simple way of \classname{classes.dtx}.
+% \begin{macrocode}
+ \@ifxundefined\@float@LaTeX{%
+ \let\@float@LaTeX\@float
+ \let\@dblfloat@LaTeX\@dblfloat
+ \let\@float\write@float
+ \let\@dblfloat\write@floats
+ }{}%
+ \let@environment{#1@float}{#1}%
+ \let@environment{#1@floats}{#1*}%
+ \@ifxundefined@cs{#1@write}{}{%
+ \let@environment{#1}{#1@write}%
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\print@float}
+% The procedure \cmd\print@float\ prints out the
+% deferred floats.
+% \changes{v4.0beta 2}{1999/06/20}
+% {only execute if there really were floats of the given type}
+% \changes{v4.0beta 3}{1999/11/13}
+% {*-form mandates pagebreak at each float;
+% only print section head if there is something there.}
+% \changes{v4.0beta 4}{2000/05/23}
+% {Allow things to break over pages by setting array@default.}
+%
+% \begin{macrocode}
+\def\triggerpar{\leavevmode\@@par}%
+\def\oneapage{\def\begin@float@pagebreak{\newpage}\def\end@float@pagebreak{\newpage}}%
+\def\print@float#1#2{%
+ \@ifxundefined@cs{#1write}{}{%
+ \begingroup
+ \@booleanfalse\floats@sw
+ #2%
+ \raggedbottom
+ \def\array@default{v}% floats must
+ \let\@float\@float@LaTeX
+ \let\@dblfloat\@dblfloat@LaTeX
+ \let\trigger@float@par\triggerpar
+ \let@environment{#1}{#1@float}%
+ \let@environment{#1*}{#1@floats}%
+ \expandafter\prepdef\csname#1\endcsname{\trigger@float@par}%
+ \expandafter\prepdef\csname#1*\endcsname{\trigger@float@par}%
+ \@namedef{fps@#1}{h!}%
+ \expandafter\immediate
+ \expandafter\closeout
+ \csname#1write\endcsname
+ \everypar{%
+ \global\let\trigger@float@par\relax
+ \global\everypar{}\setbox\z@\lastbox
+ \@ifxundefined@cs{#1sname}{}{%
+ \begin@float@pagebreak
+ \expandafter\section
+ \expandafter*%
+ \expandafter{%
+ \csname#1sname\endcsname
+ }%
+ }%
+ }%
+ \input{\csname#1@stream\endcsname}%
+ \endgroup
+ \global\expandafter\let\csname#1write\endcsname\relax
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\write@float}
+% \begin{macro}{\write@floats}
+% \begin{macro}{\write@@float}
+% Handles the case where the name of the float is the same as
+% that of the stream. Note that
+% \env{longtable} does \emph{not} fit this case.
+% Note also: \cmd\write@float\ is \emph{not} a user-level environment
+% therefore it is properly not defined with \cmd\newenvironment.
+% \begin{macrocode}
+\def\write@float#1{\write@@float{#1}{#1}}%
+\def\endwrite@float{\@Esphack}%
+\def\write@floats#1{\write@@float{#1*}{#1}}%
+\def\endwrite@floats{\@Esphack}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\write@@float}
+% \changes{v4.0beta 2}{1999/06/20}
+% {AO: Fixed spurious \texttt{CR} and (return) characters in output file.
+% Also, if the document did not have the \cs{end}\texttt{figure} on a line of its own,
+% the macro wouldn't work. Fixed.}
+% \begin{macrocode}
+\def\write@@float#1#2{%
+ \ifhmode
+ \@bsphack
+ \fi
+ \chardef\@tempc\csname#2write\endcsname
+ \toks@{\begin{#1}}%
+ \def\@tempb{#1}%
+ \expandafter\let\csname end#1\endcsname\endwrite@float
+ \catcode`\^^M\active
+ \@makeother\{\@makeother\}\@makeother\%
+ \write@floatline
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\write@floatline}
+% \begin{macro}{\@write@floatline}
+% \begin{macro}{\float@end@tag}
+% The procedure \cmd\write@floatline\ only parses, and passes
+% its result to \cmd\@write@floatline, which
+% writes the line to output, then tests the line
+% for the \cmd\end\arg{float} tokens with
+% aid of the \cmd\float@end@tag\ procedure.
+% \begin{macrocode}
+\begingroup
+ \catcode`\[\the\catcode`\{\catcode`\]\the\catcode`\}\@makeother\{\@makeother\}%
+ \gdef\float@end@tag#1\end{#2}#3\@nul[%
+ \def\@tempa[#2]%
+ \@ifx[\@tempa\@tempb][\end[#2]][\write@floatline]%
+ ]%
+ \obeylines%
+ \gdef\write@floatline#1^^M[%
+ \begingroup%
+ \newlinechar`\^^M%
+ \toks@\expandafter[\the\toks@#1]\immediate\write\@tempc[\the\toks@]%
+ \endgroup%
+ \toks@[]%
+ \float@end@tag#1\end{}\@nul%
+ ]%
+\endgroup
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+% \subsection{Counters}
+% The following definitions override those of the \LaTeX\ kernel,
+% providing for a greater range of inputs.
+% \begin{macrocode}
+\def\@alph#1{\ifcase#1\or a\or b\or c\or d\else\@ialph{#1}\fi}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@ialph#1{\ifcase#1\or \or \or \or \or e\or f\or g\or h\or i\or j\or
+ k\or l\or m\or n\or o\or p\or q\or r\or s\or t\or u\or v\or w\or x\or
+ y\or z\or aa\or bb\or cc\or dd\or ee\or ff\or gg\or hh\or ii\or jj\or
+ kk\or ll\or mm\or nn\or oo\or pp\or qq\or rr\or ss\or tt\or uu\or
+ vv\or ww\or xx\or yy\or zz\else\@ctrerr\fi}
+% \end{macrocode}
+%
+%
+% \subsection{Customization of Sections}%
+%
+% Patch the standard \LaTeX\ sectioning procedure to:
+%\begin{itemize}
+%\item
+% Allow a sectioning command to trigger the title page, or more generally
+% to recognize that it is the first object in the document,
+% so we headpatch \cmd\@startsection.
+%
+%\item
+% Allow a tail command in |#6| to uppercase the title, so we retain
+% DPC's braces.
+%
+%\item
+% Allow each type of sectioning command to format its number differently,
+% so we generalize \cmd\@seccntformat.
+%
+%\item
+% Allow each type of sectioning command to format its argument differently,
+% so we generalize \cmd\@hangfrom.
+%
+%\item
+% Allow the starred form of the command to
+% mark (the running head) and
+% make an entry in the TOC,
+% so we put \cmd\@ssect\ on the same footing as \cmd\@sect.
+%
+% Note that the tokens passed to the TOC now are \emph{not}
+% the optional argument of the command, but the required.
+% This means that the user can no longer use the former
+% to put variant content in to the TOC as the Manual says.
+%
+% Instead, the optional argument is used to put an alternative
+% title into the running headers, a better choice.
+%
+%\end{itemize}
+%
+% \begin{macro}{\@startsection}
+% Patch a head hook into the basic sectioning command.
+% Treat \cmd\@sect\ and \cmd\@ssect\ on an equal footing:
+% now their pattern parts are identical.
+% \begin{macrocode}
+\def\@startsection#1#2#3#4#5#6{%
+ \@startsection@hook
+ \if@noskipsec \leavevmode \fi
+ \par
+ \@tempskipa #4\relax
+ \@afterindenttrue
+ \ifdim \@tempskipa <\z@
+ \@tempskipa -\@tempskipa \@afterindentfalse
+ \fi
+ \if@nobreak
+ \everypar{}%
+ \else
+ \addpenalty\@secpenalty\addvspace\@tempskipa
+ \fi
+ \@ifstar
+ {\@dblarg{\@ssect@ltx{#1}{#2}{#3}{#4}{#5}{#6}}}%
+ {\@dblarg{\@sect@ltx {#1}{#2}{#3}{#4}{#5}{#6}}}%
+}%
+\def\@startsection@hook{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@sect}
+% When defining \cmd\@svsec, do not expand \cmd\@seccntformat.
+% Put brace characters back where they were before David Carlisle got at them
+% (i.e., as if \cmd\@hangfrom\ had two arguments).
+% Protect the mark mechanism from an undefined meaning.
+% Pass |#8| to the TOC instead of |#7|.
+% Remove \cmd\relax\ from the replacement part of \cmd\@svsec.
+%
+% The procedure \cmd\@hangfrom\ and \cmd\@runin@to\ can
+% be used to process the argument of the head.
+% The head can define, e.g., \cmd\@hangfrom@section, to
+% do its own processing.
+%
+% In using \cmd\H@refstepcounter\ in place of \cmd\refstepcounter\ we rely on
+% either loading before any package that patches the latter, or
+% the convention that the former is the original \LaTeX\ procedure.
+%
+% \begin{macrocode}
+\class@info
+ {Repairing broken LateX \string\@sect}%
+\def\@sect@ltx#1#2#3#4#5#6[#7]#8{%
+ \@ifnum{#2>\c@secnumdepth}{%
+ \def\H@svsec{\phantomsection}%
+ \let\@svsec\@empty
+ }{%
+ \H@refstepcounter{#1}%
+ \def\H@svsec{%
+ \phantomsection
+ }%
+ \protected@edef\@svsec{{#1}}%
+ \@ifundefined{@#1cntformat}{%
+ \prepdef\@svsec\@seccntformat
+ }{%
+ \expandafter\prepdef
+ \expandafter\@svsec
+ \csname @#1cntformat\endcsname
+ }%
+ }%
+ \@tempskipa #5\relax
+ \@ifdim{\@tempskipa>\z@}{%
+ \begingroup
+ \interlinepenalty \@M
+ #6{%
+ \@ifundefined{@hangfrom@#1}{\@hang@from}{\csname @hangfrom@#1\endcsname}%
+ {\hskip#3\relax\H@svsec}{\@svsec}{#8}%
+ }%
+ \@@par
+ \endgroup
+ \@ifundefined{#1mark}{\@gobble}{\csname #1mark\endcsname}{#7}%
+ \addcontentsline{toc}{#1}{%
+ \@ifnum{#2>\c@secnumdepth}{%
+ \protect\numberline{}%
+ }{%
+ \protect\numberline{\csname the#1\endcsname}%
+ }%
+ #8}%
+ }{%
+ \def\@svsechd{%
+ #6{%
+ \@ifundefined{@runin@to@#1}{\@runin@to}{\csname @runin@to@#1\endcsname}%
+ {\hskip#3\relax\H@svsec}{\@svsec}{#8}%
+ }%
+ \@ifundefined{#1mark}{\@gobble}{\csname #1mark\endcsname}{#7}%
+ \addcontentsline{toc}{#1}{%
+ \@ifnum{#2>\c@secnumdepth}{%
+ \protect\numberline{}%
+ }{%
+ \protect\numberline{\csname the#1\endcsname}%
+ }%
+ #8}%
+ }%
+ }%
+ \@xsect{#5}%
+}%
+\def\@hang@from#1#2#3{\@hangfrom{#1#2}#3}%
+\def\@runin@to #1#2#3{#1#2#3}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@ssect}
+% Put brace characters back where they were before David Carlisle got at them
+% (as if \cmd\@hangfrom\ has two arguments).
+% Possibly set a mark.
+% Make a TOC entry.
+%
+% Note that, for compatability with the \classname{hyperref} package, we
+% need to provide the interface required by that package
+% (actually required by \file{pdfmark.def} and \file{nameref.sty}),
+% namely
+% the definition of \cmd\@currentlabelname\ (but now removed),
+% the insertion of the procedure \cmd\Sectionformat\ (but why is this needed?), and
+% the call to \cmd\phantomsection\ (which must precede the call to \cmd\addcontentsline).
+% We also have to sidestep the patch to \cmd\@ssect\ in that same file, therefore
+% we use a different control sequence name in the call from \cmd\@startsection.
+% \changes{v4.0beta 3}{1999/11/13}
+% {Bug 116: Hyperref compatability}
+% \changes{v4.0rc3b}{2001/07/13}
+% {Bug 404: Hyperref compatability}
+% \begin{macrocode}
+\def\@ssect@ltx#1#2#3#4#5#6[#7]#8{%
+% \def\@currentlabelname{#8}%
+ \def\H@svsec{\phantomsection}%
+ \@tempskipa #5\relax
+ \@ifdim{\@tempskipa>\z@}{%
+ \begingroup
+ \interlinepenalty \@M
+ #6{%
+ \@ifundefined{@hangfroms@#1}{\@hang@froms}{\csname @hangfroms@#1\endcsname}%
+% {\hskip#3\relax\H@svsec}{\Sectionformat{#8}{#1}}%
+ {\hskip#3\relax\H@svsec}{#8}%
+ }%
+ \@@par
+ \endgroup
+ \@ifundefined{#1smark}{\@gobble}{\csname #1smark\endcsname}{#7}%
+ \addcontentsline{toc}{#1}{\protect\numberline{}#8}%
+ }{%
+ \def\@svsechd{%
+ #6{%
+ \@ifundefined{@runin@tos@#1}{\@runin@tos}{\csname @runin@tos@#1\endcsname}%
+% {\hskip#3\relax\H@svsec}{\Sectionformat{#8}{#1}}%
+ {\hskip#3\relax\H@svsec}{#8}%
+ }%
+ \@ifundefined{#1smark}{\@gobble}{\csname #1smark\endcsname}{#7}%
+ \addcontentsline{toc}{#1}{\protect\numberline{}#8}%
+ }%
+ }%
+ \@xsect{#5}%
+}%
+\def\@hang@froms#1#2{#1#2}%
+\def\@runin@tos #1#2{#1#2}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\init@documenthook}
+% Document classes that incorporate this package will be \classname{hyperref}-savvy.
+% (To accomplish this, we ensure that \cmd\hyperanchor\ and \cmd\hyper@last\ are both defined.)
+% Being \classname{hyperref}-savvy levels some requirements on us, but the benefits are many.
+%
+% One is that the TOC will not get amnesia and require a full set of three typesetting runs before its formatting is stable.
+% Instead, only two runs are required: the first updates the auxiliary file, the second the TOC.
+% However, the formatting of the document does not change.
+%
+% Another aspect of being \classname{hyperref}-savvy is that the syntax of commands in the \filename{.aux} file will now change
+% if \classname{hyperref} is turned on or off.
+%
+% Note that \cmd\hyper@anchorstart\ and \cmd\hyper@anchorend\ constitute the programming interface
+% for a hypertext anchor (the target of a hypertext link); \cmd\hyper@linkstart\ and \cmd\hyper@linkend\
+% are the interface for a hypertext link.
+% \begin{macrocode}
+\appdef\init@documenthook{%
+ \providecommand\phantomsection{}%
+%\@ifx{\Sectionformat\@undefined}{\let\Sectionformat\@firstoftwo}{}%
+ \providecommand\hyper@anchor[1]{}%
+ \providecommand\hyper@last{}%
+ \providecommand\Hy@raisedlink[1]{#1}%
+ \providecommand\hyper@anchorstart[1]{}%
+ \providecommand\hyper@anchorend{}%
+ \providecommand\hyper@linkstart[2]{}%
+ \providecommand\hyper@linkend{}%
+}%
+\let\H@refstepcounter\refstepcounter
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\sec@upcase}
+% Upper case for sections (optional upper case items). These are
+% created so that some headings can be toggled between mixed case and
+% upper case readily.
+% Headings that might be changed can be wrapped in the style file in
+% \cmd\sec@upcase\arg{text} constructs;
+% the expansion of \cmd\sec@upcase\ is
+% controlled here. It is \cmd\relax\ by default (mixed case heads), and
+% can easily be changed to \cmd\uppercase\ if desired.
+% If mixed-case headings are wanted by the editor, authors {\em must}
+% supply mixed case text, although this is what authors should be doing
+% anyway.
+% (Mixed can be converted to upper,
+% but the reverse transformation cannot be automated.)
+%
+% The following setting gives the \LaTeX\ default.
+% \begin{macrocode}
+\def\sec@upcase#1{\relax{#1}}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Patch the \env{tabular} and \env{array} Environments}
+%
+% \begin{macro}{\endtabular}
+% \begin{macro}{\endarray}
+% We headpatch the begin processing and tailpatch the end processing
+% of the \env{tabular} and \env{array} environments.
+% A document class can define these hooks as needed.
+%
+% We proceed with care to make further patches to
+% support tabulars that break over pages.
+% Our patches will not necessarily be effective for
+% other packages that replace the \LaTeX\ \env{array} and \env{tabular}
+% environments. I know of none that do so.
+% \begin{macrocode}
+\appdef\class@documenthook{%
+ \@ifpackageloaded{array}{\switch@array}{\switch@tabular}%
+ \prepdef\endtabular{\endtabular@hook}%
+ \@provide\endtabular@hook{}%
+ \prepdef\endarray{\endarray@hook}%
+ \@provide\endarray@hook{}%
+ \providecommand\array@hook{}%
+% \end{macrocode}
+% Install, effectively, a head patch to \cmd\tabular.
+% In order to avoid interference from, e.g., the \classname{array} package,
+% we must perform this patch only \emph{after} packages load.
+% \changes{v4.0beta 3}{1999/11/13}
+% {Bug 130. Interference from array package}
+% \begin{macrocode}
+ \prepdef\@tabular{\tabular@hook}%
+ \@provide\tabular@hook{}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\switch@tabular}
+% \begin{macro}{\switch@array}
+% The two procedures \cmd\switch@tabular\ and \cmd\switch@array\
+% apply needed patches to the various tabular procedures,
+% the former applying to the \LaTeX\ kernel, the latter to the
+% required \classname{array} package (and to the number of other
+% required packages that load it).
+%
+% \begin{macrocode}
+\def\switch@tabular{%
+ \let\@array@sw\@array@sw@array
+ \@ifx{\@array\@array@LaTeX}{%
+ \@ifx{\multicolumn\multicolumn@LaTeX}{%
+ \@ifx{\@tabular\@tabular@LaTeX}{%
+ \@ifx{\@tabarray\@tabarray@LaTeX}{%
+ \@ifx{\array\array@LaTeX}{%
+ \@ifx{\endarray\endarray@LaTeX}{%
+ \@ifx{\endtabular\endtabular@LaTeX}{%
+ \@ifx{\@mkpream\@mkpream@LaTeX}{%
+ \@ifx{\@addamp\@addamp@LaTeX}{%
+ \@ifx{\@arrayacol\@arrayacol@LaTeX}{%
+ \@ifx{\@tabacol\@tabacol@LaTeX}{%
+ \@ifx{\@arrayclassz\@arrayclassz@LaTeX}{%
+ \@ifx{\@tabclassiv\@tabclassiv@LaTeX}{%
+ \@ifx{\@arrayclassiv\@arrayclassiv@LaTeX}{%
+ \@ifx{\@tabclassz\@tabclassz@LaTeX}{%
+ \@ifx{\@classv\@classv@LaTeX}{%
+ \@ifx{\hline\hline@LaTeX}{%
+ \@ifx{\@tabularcr\@tabularcr@LaTeX}{%
+ \@ifx{\@xtabularcr\@xtabularcr@LaTeX}{%
+ \@ifx{\@xargarraycr\@xargarraycr@LaTeX}{%
+ \@ifx{\@yargarraycr\@yargarraycr@LaTeX}{%
+ \true@sw
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ {%
+ \class@info{Patching LaTeX tabular.}%
+ }{%
+ \class@info{Unrecognized LaTeX tabular. Please update this document class! (Proceeding with fingers crossed.)}%
+ }%
+ \let\@array\@array@ltx
+ \let\multicolumn\multicolumn@ltx
+ \let\@tabular\@tabular@ltx
+ \let\@tabarray\@tabarray@ltx
+ \let\array\array@ltx
+ \let\endarray\endarray@ltx
+ \let\endtabular\endtabular@ltx
+ \let\@mkpream\@mkpream@ltx
+ \let\@addamp\@addamp@ltx
+ \let\@arrayacol\@arrayacol@ltx
+ \let\@tabacol\@tabacol@ltx
+ \let\@arrayclassz\@arrayclassz@ltx
+ \let\@tabclassiv\@tabclassiv@ltx
+ \let\@arrayclassiv\@arrayclassiv@ltx
+ \let\@tabclassz\@tabclassz@ltx
+ \let\@classv\@classv@ltx
+ \let\hline\hline@ltx
+ \let\@tabularcr\@tabularcr@ltx
+ \let\@xtabularcr\@xtabularcr@ltx
+ \let\@xargarraycr\@xargarraycr@ltx
+ \let\@yargarraycr\@yargarraycr@ltx
+}%
+\def\switch@array{%
+ \let\@array@sw\@array@sw@LaTeX
+ \@ifx{\@array\@array@array}{%
+ \@ifx{\@tabular\@tabular@array}{%
+ \@ifx{\@tabarray\@tabarray@array}{%
+ \@ifx{\array\array@array}{%
+ \@ifx{\endarray\endarray@array}{%
+ \@ifx{\endtabular\endtabular@array}{%
+ \@ifx{\@mkpream\@mkpream@array}{%
+ \@ifx{\@classx\@classx@array}{%
+ \@ifx{\insert@column\insert@column@array}{%
+ \@ifx{\@arraycr\@arraycr@array}{%
+ \@ifx{\@xarraycr\@xarraycr@array}{%
+ \@ifx{\@xargarraycr\@xargarraycr@array}{%
+ \@ifx{\@yargarraycr\@yargarraycr@array}{%
+ \true@sw
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }{%
+ \class@info{Patching array package.}%
+ }{%
+ \class@info{Unrecognized array package. Please update this document class! (Proceeding with fingers crossed.)}%
+ }%
+ \let\@array \@array@array@new
+ \let\@@array \@array % Cosi fan tutti
+ \let\@tabular \@tabular@array@new
+ \let\@tabarray \@tabarray@array@new
+ \let\array \array@array@new
+ \let\endarray \endarray@array@new
+ \let\endtabular\endtabular@array@new
+ \let\@mkpream \@mkpream@array@new
+ \let\@classx \@classx@array@new
+ \let\@arrayacol\@arrayacol@ltx
+ \let\@tabacol \@tabacol@ltx
+ \let\insert@column\insert@column@array@new
+ \expandafter\let\csname endtabular*\endcsname\endtabular % Cosi fan tutti
+ \let\@arraycr \@arraycr@new
+ \let\@xarraycr \@xarraycr@new
+ \let\@xargarraycr\@xargarraycr@new
+ \let\@yargarraycr\@yargarraycr@new
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@array@sw}
+% The Boolean \cmd\@array@sw\ must be different depending on
+% whether the \classname{array} package is loaded.
+% \begin{macrocode}
+\def\@array@sw@LaTeX{\@ifx{\\\@tabularcr}}%
+\def\@array@sw@array{\@ifx{\d@llarbegin\begingroup}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@tabular}
+% We provide the old versions of \cmd\@tabular\ along with the respective new versions.
+% The change here is to avoid committing to LR mode. That will be done later (as late as possible, naturally).
+% \begin{macrocode}
+\def\@tabular@LaTeX{%
+ \leavevmode
+ \hbox\bgroup$%
+ \let\@acol\@tabacol
+ \let\@classz\@tabclassz
+ \let\@classiv\@tabclassiv
+ \let\\\@tabularcr
+ \@tabarray
+}%
+\def\@tabular@ltx{%
+ \let\@acoll\@tabacoll
+ \let\@acolr\@tabacolr
+ \let\@acol\@tabacol
+ \let\@classz\@tabclassz
+ \let\@classiv\@tabclassiv
+ \let\\\@tabularcr
+ \@tabarray
+}%
+\def\@tabular@array{%
+ \leavevmode
+ \hbox\bgroup$%
+ \col@sep\tabcolsep
+ \let\d@llarbegin\begingroup
+ \let\d@llarend\endgroup
+ \@tabarray
+}%
+\def\@tabular@array@new{%
+ \let\@acoll\@tabacoll
+ \let\@acolr\@tabacolr
+ \let\@acol\@tabacol
+ \let\col@sep\@undefined
+ \let\d@llarbegin\begingroup
+ \let\d@llarend\endgroup
+ \@tabarray
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@tabarray}
+% Here we provide old and new versions of the \cmd\@tabarray\ procedure.
+% The change here is to parametrize the default vertical alignment,
+% which is 'c' in standard \LaTeX.
+% Under some circumstances, we want to change this to, say, 'v'.
+%
+% FIXME: must decouple \env{array} and \env{tabular}.
+% \begin{macrocode}
+\def\@tabarray@LaTeX{%
+ \m@th\@ifnextchar[\@array{\@array[c]}%
+}%
+\def\@tabarray@ltx{%
+ \m@th\@ifnextchar[\@array{\expandafter\@array\expandafter[\array@default]}%
+}%
+\def\@tabarray@array{%
+ \@ifnextchar[{\@@array}{\@@array[c]}%
+}%
+\def\@tabarray@array@new{%
+ \@ifnextchar[{\@@array}{\expandafter\@@array\expandafter[\array@default]}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@tabularcr}
+% \begin{macro}{\@tbpen}
+% \begin{macro}{\@tabularcr}
+% \begin{macro}{\@xtabularcr}
+% \begin{macro}{\@xargarraycr}
+% \begin{macro}{\@yargarraycr}
+% \begin{macro}{\@arraycr}
+% \begin{macro}{\@xarraycr}
+% We provide for the \cmd\\ command within \env{tabular} to provide control over page breaking, just the same as
+% that of \env{eqnarray}.
+%
+% The count register \cmd\intertabularlinepenalty\ is similar to \cmd\interdisplaylinepenalty: it is the penalty
+% associated with each row of a tabular. When it is set to \cmd\@M, the tabular will cleave together.
+%
+% The count register \cmd\@tbpen\ is similar to \cmd\@eqpen: it memorizes the penalty to use after the current tabular row.
+% If the \cmd\\ command is in its star form, then \cmd\@eqpen\ is set to \cmd\@M.
+%
+% We append code to \cmd\samepage\ so that a tabular within its scope will cleave together.
+%
+% We keep the standard definition of \cmd\@tabularcr\ in \cmd\@tabularcr@LaTeX\ for reference,
+% and provide a new definition that works like \cmd\@eqncr: it sets \cmd\@tbpen\ to \cmd\@M\ if the star was given.
+%
+% We also provide new versions of \cmd\@xtabularcr, \cmd\@xargarraycr, and \cmd\@yargarraycr, all of which invoke \cmd\@tbpen.
+%
+% The \cmd\switch@tabular\ procedure switches in the new definitions.
+% \begin{macrocode}
+\newcount\intertabularlinepenalty
+\intertabularlinepenalty=100
+\newcount\@tbpen
+\appdef\samepage{\intertabularlinepenalty\@M}%
+\def\@tabularcr@LaTeX{{\ifnum 0=`}\fi \@ifstar \@xtabularcr \@xtabularcr}%
+\def\@tabularcr@ltx{{\ifnum 0=`}\fi \@ifstar {\global \@tbpen \@M \@xtabularcr }{\global \@tbpen \intertabularlinepenalty \@xtabularcr }}%
+\def\@xtabularcr@LaTeX{\@ifnextchar [\@argtabularcr {\ifnum 0=`{\fi }\cr }}%
+\def\@xtabularcr@ltx{\@ifnextchar [\@argtabularcr {\ifnum 0=`{\fi }\cr \noalign {\penalty \@tbpen }}}%
+\def\@xargarraycr@LaTeX#1{\@tempdima #1\advance \@tempdima \dp \@arstrutbox \vrule \@height \z@ \@depth \@tempdima \@width \z@ \cr}%
+\def\@xargarraycr@ltx#1{\@tempdima #1\advance \@tempdima \dp \@arstrutbox \vrule \@height \z@ \@depth \@tempdima \@width \z@ \cr \noalign {\penalty \@tbpen }}%
+\def\@yargarraycr@LaTeX#1{\cr \noalign {\vskip #1}}%
+\def\@yargarraycr@ltx#1{\cr \noalign {\penalty \@tbpen \vskip #1}}%
+% \end{macrocode}
+%
+% If the \classname{array} package has been loaded, we must alter the meanings of
+% \cmd\@arraycr, \cmd\@xarraycr, \cmd\@xargarraycr, and \cmd\@yargarraycr.
+% In this case, it is \cmd\switch@array\ that switches in the new definitions.
+% \begin{macrocode}
+\def\@arraycr@array{%
+ \relax
+ \iffalse{\fi\ifnum 0=`}\fi
+ \@ifstar \@xarraycr \@xarraycr
+}%
+\def\@arraycr@new{%
+ \relax
+ \iffalse{\fi\ifnum 0=`}\fi
+ \@ifstar {\global \@tbpen \@M \@xarraycr }{\global \@tbpen \intertabularlinepenalty \@xarraycr }%
+}%
+\def\@xarraycr@array{%
+ \@ifnextchar [%]
+ \@argarraycr {\ifnum 0=`{}\fi\cr}%
+}%
+\def\@xarraycr@new{%
+ \@ifnextchar [%]
+ \@argarraycr {\ifnum 0=`{}\fi\cr \noalign {\penalty \@tbpen }}%
+}%
+\def\@xargarraycr@array#1{%
+ \unskip
+ \@tempdima #1\advance\@tempdima \dp\@arstrutbox
+ \vrule \@depth\@tempdima \@width\z@
+ \cr
+}%
+\def\@xargarraycr@new#1{%
+ \unskip
+ \@tempdima #1\advance\@tempdima \dp\@arstrutbox
+ \vrule \@depth\@tempdima \@width\z@
+ \cr
+ \noalign {\penalty \@tbpen }%
+}%
+\def\@yargarraycr@array#1{%
+ \cr
+ \noalign{\vskip #1}%
+}%
+\def\@yargarraycr@new#1{%
+ \cr
+ \noalign{\penalty \@tbpen \vskip #1}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\array}
+% We provide old and new versions of the \cmd\array\ procedure for both \LaTeX\ and the \classname{array} package.
+% The change here is to accomodate the new procedures that will be called for the array boundaries, even
+% though at present they are not special.
+% A thought: here is where matrices can be readily accomodated.
+% \begin{macrocode}
+\def\array@LaTeX{%
+ \let\@acol\@arrayacol
+ \let\@classz\@arrayclassz
+ \let\@classiv\@arrayclassiv
+ \let\\\@arraycr
+ \let\@halignto\@empty
+ \@tabarray
+}%
+\def\array@ltx{%
+ \@ifmmode{}{\@badmath$}%
+ \let\@acoll\@arrayacol
+ \let\@acolr\@arrayacol
+ \let\@acol\@arrayacol
+ \let\@classz\@arrayclassz
+ \let\@classiv\@arrayclassiv
+ \let\\\@arraycr
+ \let\@halignto\@empty
+ \@tabarray
+}%
+\def\array@array{%
+ \col@sep\arraycolsep
+ \def\d@llarbegin{$}\let\d@llarend\d@llarbegin\gdef\@halignto{}%
+ \@tabarray
+}
+\def\array@array@new{%
+ \@ifmmode{}{\@badmath$}%
+ \let\@acoll\@arrayacol
+ \let\@acolr\@arrayacol
+ \let\@acol\@arrayacol
+\let\col@sep\@undefined
+ \def\d@llarbegin{$}%
+ \let\d@llarend\d@llarbegin
+ \gdef\@halignto{}%
+ \@tabarray
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@array}
+% Here we provide old and new versions of \cmd\@array.
+% The change here is to provide a convenient, flexible, and extensible
+% mechanism for new vertical alignment options.
+%
+% Instead of testing the optional argument with \cmd\if, we
+% use a dispatcher based on \cmd\csname.
+%
+% We also refrain from using \cmd\ialign, which would set
+% the \cmd\tabskip\ to the wrong value.
+%
+% Finally, the procedure to set the \cmd\@arstrutbox\
+% is broken out so that it can be patched.
+% \begin{macrocode}
+\def\@array@LaTeX[#1]#2{%
+ \if #1t\vtop \else \if#1b\vbox \else \vcenter \fi\fi
+ \bgroup
+ \setbox\@arstrutbox\hbox{%
+ \vrule \@height\arraystretch\ht\strutbox
+ \@depth\arraystretch \dp\strutbox
+ \@width\z@}%
+ \@mkpream{#2}%
+ \edef\@preamble{%
+ \ialign \noexpand\@halignto
+ \bgroup \@arstrut \@preamble \tabskip\z@skip \cr}%
+ \let\@startpbox\@@startpbox \let\@endpbox\@@endpbox
+ \let\tabularnewline\\%
+ \let\par\@empty
+ \let\@sharp##%
+ \set@typeset@protect
+ \lineskip\z@skip\baselineskip\z@skip
+ \ifhmode \@preamerr\z@ \@@par\fi
+ \@preamble
+}%
+\def\@array@ltx[#1]#2{%
+ \@nameuse{@array@align@#1}%
+ \set@arstrutbox
+ \@mkpream{#2}%
+ \prepdef\@preamble{%
+ \tabskip\tabmid@skip
+ \@arstrut
+ }%
+ \appdef\@preamble{%
+ \tabskip\tabright@skip
+ \cr
+ \array@row@pre
+ }%
+% \let\@startpbox\@@startpbox
+% \let\@endpbox\@@endpbox
+ \let\tabularnewline\\%
+ \let\par\@empty
+ \let\@sharp##%
+ \set@typeset@protect
+ \lineskip\z@skip\baselineskip\z@skip
+ \tabskip\tableft@skip\relax
+ \ifhmode \@preamerr\z@ \@@par\fi
+ \everycr{}%
+ \expandafter\halign\expandafter\@halignto\expandafter\bgroup\@preamble
+}%
+%
+\def\set@arstrutbox{%
+ \setbox\@arstrutbox\hbox{%
+ \vrule \@height\arraystretch\ht\strutbox
+ \@depth\arraystretch \dp\strutbox
+ \@width\z@
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@array@array}
+%
+% \begin{macrocode}
+\def\@array@array[#1]#2{%
+ \@tempdima \ht \strutbox
+ \advance \@tempdima by\extrarowheight
+ \setbox \@arstrutbox \hbox{\vrule
+ \@height \arraystretch \@tempdima
+ \@depth \arraystretch \dp \strutbox
+ \@width \z@}%
+ \begingroup
+ \@mkpream{#2}%
+ \xdef\@preamble{\noexpand \ialign \@halignto
+ \bgroup \@arstrut \@preamble
+ \tabskip \z@ \cr}%
+ \endgroup
+ \@arrayleft
+ \if #1t\vtop \else \if#1b\vbox \else \vcenter \fi \fi
+ \bgroup
+ \let \@sharp ##\let \protect \relax
+ \lineskip \z@
+ \baselineskip \z@
+ \m@th
+ \let\\\@arraycr \let\tabularnewline\\\let\par\@empty \@preamble
+}%
+\def\@array@array@new[#1]#2{%
+ \@tempdima\ht\strutbox
+ \advance\@tempdima by\extrarowheight
+ \setbox\@arstrutbox\hbox{%
+ \vrule \@height\arraystretch\@tempdima
+ \@depth \arraystretch\dp\strutbox
+ \@width \z@
+ }%
+ \begingroup
+ \@mkpream{#2}%
+ \xdef\@preamble{\@preamble}%
+ \endgroup
+ \prepdef\@preamble{%
+ \tabskip\tabmid@skip
+ \@arstrut
+ }%
+ \appdef\@preamble{%
+ \tabskip\tabright@skip
+ \cr
+ \array@row@pre
+ }%
+ \@arrayleft
+ \@nameuse{@array@align@#1}%
+ \m@th
+ \let\\\@arraycr
+ \let\tabularnewline\\%
+ \let\par\@empty
+ \let\@sharp##%
+ \set@typeset@protect
+ \lineskip\z@\baselineskip\z@
+ \tabskip\tableft@skip
+ \everycr{}%
+ \expandafter\halign\expandafter\@halignto\expandafter\bgroup\@preamble
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\endarray}
+% Here we provide old and new versions of \cmd\endarray.
+% The change here is to use a single procedure to close
+% out any array-like structure, namely \cmd\endarray@ltx.
+% It merely closes out the \cmd\halign.
+% \begin{macrocode}
+\def\endarray@LaTeX{%
+ \crcr\egroup\egroup
+}%
+\def\endarray@ltx{%
+ \crcr\array@row@pst\egroup\egroup
+}%
+\def\endarray@array{%
+ \crcr \egroup \egroup \@arrayright \gdef\@preamble{}%
+}%
+\def\endarray@array@new{%
+ \crcr\array@row@pst\egroup\egroup % Same as \endarray@ltx
+ \@arrayright
+ \global\let\@preamble\@empty
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\endtabular}
+%
+% \begin{macrocode}
+\def\endtabular@LaTeX{%
+ \crcr\egroup\egroup $\egroup
+}%
+\def\endtabular@ltx{%
+ \endarray
+}%
+\def\endtabular@array{%
+ \endarray $\egroup
+}%
+\def\endtabular@array@new{%
+ \endarray
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{endtabular*}
+% Here we provide a proper definition for the star-form of \enve{endtabular}.
+% It is one of the enduring curiosities that the \LaTeX\ kernel continues to use
+% dangerously and inappropriately ``optimized'' definitions for such commands.
+% \begin{macrocode}
+\@namedef{endtabular*}{\endtabular}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\multicolumn}
+%
+% \begin{macrocode}
+\long\def\multicolumn@LaTeX#1#2#3{%
+ \multispan{#1}\begingroup
+ \@mkpream{#2}%
+ \def\@sharp{#3}\set@typeset@protect
+ \let\@startpbox\@@startpbox\let\@endpbox\@@endpbox
+ \@arstrut \@preamble\hbox{}\endgroup\ignorespaces
+}%
+\long\def\multicolumn@ltx#1#2#3{%
+ \multispan{#1}%
+ \begingroup
+ \@mkpream{#2}%
+ \def\@sharp{#3}%
+ \set@typeset@protect
+ %\let\@startpbox\@@startpbox\let\@endpbox\@@endpbox
+ \@arstrut
+ \@preamble
+ \hbox{}%
+ \endgroup
+ \ignorespaces
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@array@align@}
+% \begin{macro}{\array@default}
+% Here are the various procedures for the vertical alignment options.
+% The change from standard \LaTeX\ is that we do not go into math mode
+% in every case: only when required by \cmd\vcenter.
+% Also, we use \cmd\aftergroup\ to close out the boxes and modes we have started.
+% It requires only that each procedure issue exactly one unmatched \cmd\bgroup.
+%
+% We establish here the default vertical alignment.
+% \begin{macrocode}
+\def\@array@align@t{\leavevmode\vtop\bgroup}%
+\def\@array@align@b{\leavevmode\vbox\bgroup}%
+\def\@array@align@c{\leavevmode\@ifmmode{\vcenter\bgroup}{$\vcenter\bgroup\aftergroup$\aftergroup\relax}}%
+\def\@array@align@v{%
+ \@ifmmode{%
+ \@badmath
+ \vcenter\bgroup
+ }{%
+ \@ifinner{%
+ $\vcenter\bgroup\aftergroup$
+ }{%
+ \@@par\bgroup
+ }%
+ }%
+}%
+\def\array@default{c}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\array@row@pre}
+% \begin{macro}{\array@row@pst}
+% \begin{macro}{\array@row@rst}
+% The procedure \cmd\array@row@rst\ reestablishes a default context for
+% an alignment, so that they can be nested.
+% Any environment or procedure that alters the way alignments are formatted
+% must patch this procedure to restore from that alteration.
+% To start things off, we equate \cmd\@array@align@v\ to \cmd\@array@align@c,
+% because it does not make sense to do the former in any context other
+% than the MVL or in a list that will be unboxed onto the MVL.
+% \begin{macrocode}
+\def\array@row@rst{%
+ \let\@array@align@v\@array@align@c
+}%
+\def\array@row@pre{}%
+\def\array@row@pst{}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\toprule}
+% \begin{macro}{\colrule}
+% \begin{macro}{\botrule}
+% Default definitions for \cmd\toprule, \cmd\colrule, \cmd\botrule
+% \begin{macrocode}
+\newcommand\toprule{\tab@rule{\column@font}{\column@fil}{\frstrut}}%
+\newcommand\colrule{\unskip\lrstrut\\\tab@rule{\body@font}{}{\frstrut}}%
+\newcommand\botrule{\unskip\lrstrut\\\noalign{\hline@rule}{}}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\hline}
+% \begin{macrocode}
+\def\hline@LaTeX{%
+ \noalign{\ifnum0=`}\fi\hrule \@height \arrayrulewidth \futurelet
+ \reserved@a\@xhline
+}%
+\def\hline@ltx{%
+ \noalign{%
+ \ifnum0=`}\fi
+ \hline@rule
+ \futurelet\reserved@a\@xhline
+ % \noalign ended in \@xhline
+}%
+\def\@xhline@unneeded{%
+ \say\reserved@a
+ \ifx\reserved@a\hline
+ \vskip\doublerulesep
+ \vskip-\arrayrulewidth
+ \fi
+ \ifnum0=`{\fi}%
+}%
+\def\tab@rule#1#2#3{%
+ \crcr
+ \noalign{%
+ \hline@rule
+ \gdef\@arstrut@hook{%
+ \global\let\@arstrut@hook\@empty
+ #3%
+ }%
+ \gdef\cell@font{#1}%
+ \gdef\cell@fil{#2}%
+ }%
+}%
+\def\column@font{}%
+\def\column@fil{}%
+\def\body@font{}%
+\def\cell@font{}%
+\def\frstrut{}%
+\def\lrstrut{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@arstrut@hline}
+% \begin{macro}{\@arstrut@org}
+% \begin{macro}{\@arstrut@hook}
+% \begin{macro}{\@arstrutbox@hline}
+% \begin{macro}{\set@arstrutbox}
+% \begin{macro}{\hline@rule}
+% The procedure \cmd\@arstrut@hline\ is substantially the same as
+% \cmd\@arstrut, except the strut copied in is \cmd\@arstrutbox@hline
+% instead of \cmd\@arstrutbox.
+%
+% The procedure \cmd\@arstrut@hook\ is redefined in \cmd\tab@rule!
+%
+% The register \cmd\@arstrutbox@hline.
+%
+% We append to \cmd\set@arstrutbox\ the code necessary to set a strut following an \cmd\hline.
+%
+% The procedure \cmd\hline@rule\ lays down a rule, and changes the meaning of \cmd\@arstrut\
+% so that the next line will be correctly strutted.
+%
+% The \cmd\@arstrut@hline@clnc\ is a klootch, a magic number.
+% \begin{macrocode}
+\def\@arstrut@hline{%
+ \relax
+ \@ifmmode{\copy}{\unhcopy}\@arstrutbox@hline
+ \@arstrut@hook
+}%
+%
+\let\@arstrut@org\@arstrut
+\def\@arstrut@hook{%
+ \global\let\@arstrut\@arstrut@org
+}%
+%
+\newbox\@arstrutbox@hline
+\appdef\set@arstrutbox{%
+ \setbox\@arstrutbox@hline\hbox{%
+ \setbox\z@\hbox{$0^{0}_{}$}%
+ \dimen@\ht\z@\advance\dimen@\@arstrut@hline@clnc
+ \@ifdim{\dimen@<\arraystretch\ht\strutbox}{\dimen@=\arraystretch\ht\strutbox}{}%
+ \vrule \@height\dimen@
+ \@depth\arraystretch \dp\strutbox
+ \@width\z@
+ }%
+}%
+%
+\def\hline@rule{%
+ \hrule \@height \arrayrulewidth
+ \global\let\@arstrut\@arstrut@hline
+}%
+\def\@arstrut@hline@clnc{2\p@}% % Klootch: magic number
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\tableft@skip}
+% \begin{macrocode}
+\def\tableft@skip{\z@skip}%
+\def\tabmid@skip{\z@skip}%\@flushglue
+\def\tabright@skip{\z@skip}%
+\def\tableftsep{\tabcolsep}%
+\def\tabmidsep{\tabcolsep}%
+\def\tabrightsep{\tabcolsep}%
+\def\cell@fil{}%
+\def\pbox@hook{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@arstrut}
+% \begin{macrocode}
+\appdef\@arstrut{\@arstrut@hook}%
+\let\@arstrut@hook\@empty
+\def\@addtopreamble{\appdef\@preamble}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@mkpream}
+% \begin{macrocode}
+\def\@mkpream@LaTeX#1{%
+ \@firstamptrue\@lastchclass6
+ \let\@preamble\@empty
+ \let\protect\@unexpandable@protect
+ \let\@sharp\relax
+ \let\@startpbox\relax\let\@endpbox\relax
+ \@expast{#1}%
+ \expandafter\@tfor \expandafter
+ \@nextchar \expandafter:\expandafter=\reserved@a\do
+ {\@testpach\@nextchar
+ \ifcase \@chclass \@classz \or \@classi \or \@classii \or \@classiii
+ \or \@classiv \or\@classv \fi\@lastchclass\@chclass}%
+ \ifcase \@lastchclass \@acol
+ \or \or \@preamerr \@ne\or \@preamerr \tw@\or \or \@acol \fi
+}%
+\def\@mkpream@ltx#1{%
+ \@firstamptrue
+ \@lastchclass6
+ \let\@preamble\@empty
+ \let\protect\@unexpandable@protect
+ \let\@sharp\relax
+%\let\@startpbox\relax\let\@endpbox\relax
+ \@expast{#1}%
+ \expandafter\@tfor\expandafter\@nextchar\expandafter:\expandafter=\reserved@a
+ \do{%
+ \expandafter\@testpach\expandafter{\@nextchar}%
+ \ifcase\@chclass
+ \@classz
+ \or
+ \@classi
+ \or
+ \@classii
+ \or
+ \@classiii
+ \or
+ \@classiv
+ \or
+ \@classv
+ \fi
+ \@lastchclass\@chclass
+ }%
+ \ifcase\@lastchclass
+ \@acolr % right-hand column
+ \or
+ \or
+ \@preamerr\@ne
+ \or
+ \@preamerr\tw@
+ \or
+ \or
+ \@acolr % right-hand column
+ \fi
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\insert@column}
+% \begin{macrocode}
+\def\insert@column@array{%
+ \the@toks \the \@tempcnta
+ \ignorespaces \@sharp \unskip
+ \the@toks \the \count@ \relax
+}%
+\def\insert@column@array@new{%
+ \the@toks\the\@tempcnta
+ \array@row@rst\cell@font
+ \ignorespaces\@sharp\unskip
+ \the@toks\the\count@
+ \relax
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@mkpream@relax}
+% The procedure \cmd\@mkpream@relax\ participates in a strange and wonderful
+% method of binding the alignment procedure---but only certain parts thereof.
+%
+% Here is how it works: in \LaTeX, the \classname{array} package, and in the
+% \classname{longtable} package alike, there is a need to create an alignment
+% preamble (using \cmd\@mkpream) for use by the upcoming \cmd\halign.
+% Then, in both \classname{array} and \classname{longtable}, \TeX's \cmd\edef\
+% is used to `compile in place' that alignment preamble.
+%
+% In the case of \classname{array}, the operation is done in order to
+% pre-expand the use of \texttt{*}, in \classname{longtable}, it is to
+% set the widths of the columns.
+%
+% Now, during this \cmd\edef, certain control sequence names must \emph{not}
+% be expanded, and those are robustified by \cmd\@mkpream@relax.
+%
+% \begin{macrocode}
+\def\@mkpream@relax{%
+ \let\tableftsep\relax
+ \let\tabmidsep\relax
+ \let\tabrightsep\relax
+ \let\array@row@rst\relax
+ \let\cell@font\relax
+ \let\@startpbox\relax
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@mkpream}
+% \begin{macrocode}
+\def\@mkpream@array#1{%
+ \gdef\@preamble{}\@lastchclass 4 \@firstamptrue
+ \let\@sharp\relax \let\@startpbox\relax \let\@endpbox\relax
+ \@temptokena{#1}\@tempswatrue
+ \@whilesw\if@tempswa\fi{\@tempswafalse\the\NC@list}%
+ \count@\m@ne
+ \let\the@toks\relax
+ \prepnext@tok
+ \expandafter \@tfor \expandafter \@nextchar
+ \expandafter :\expandafter =\the\@temptokena \do
+ {\@testpach
+ \ifcase \@chclass \@classz \or \@classi \or \@classii
+ \or \save@decl \or \or \@classv \or \@classvi
+ \or \@classvii \or \@classviii
+ \or \@classx
+ \or \@classx \fi
+ \@lastchclass\@chclass}%
+ \ifcase\@lastchclass
+ \@acol \or
+ \or
+ \@acol \or
+ \@preamerr \thr@@ \or
+ \@preamerr \tw@ \@addtopreamble\@sharp \or
+ \or
+ \else \@preamerr \@ne \fi
+ \def\the@toks{\the\toks}%
+}%
+\def\@mkpream@array@new#1{%
+ \gdef\@preamble{}%
+ \@lastchclass\f@ur
+ \@firstamptrue
+ \let\@sharp\relax
+ \@mkpream@relax
+%\let\@startpbox\relax\let\@endpbox\relax
+ \@temptokena{#1}\@tempswatrue
+ \@whilesw\if@tempswa\fi{\@tempswafalse\the\NC@list}%
+ \count@\m@ne
+ \let\the@toks\relax
+ \prepnext@tok
+ \expandafter\@tfor\expandafter\@nextchar\expandafter:\expandafter=\the\@temptokena
+ \do{%
+ \@testpach
+ \ifcase\@chclass
+ \@classz
+ \or
+ \@classi
+ \or
+ \@classii
+ \or
+ \save@decl
+ \or
+ \or
+ \@classv
+ \or
+ \@classvi
+ \or
+ \@classvii
+ \or
+ \@classviii
+ \or
+ \@classx
+ \or
+ \@classx
+ \fi
+ \@lastchclass\@chclass
+ }%
+ \ifcase\@lastchclass
+ \@acolr % right-hand column
+ \or
+ \or
+ \@acolr % right-hand column
+ \or
+ \@preamerr\thr@@
+ \or
+ \@preamerr\tw@\@addtopreamble\@sharp
+ \or
+ \or
+ \else
+ \@preamerr\@ne
+ \fi
+ \def\the@toks{\the\toks}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@addamp}
+% \begin{macrocode}
+\def\@addamp@LaTeX{%
+ \if@firstamp\@firstampfalse\else\edef\@preamble{\@preamble &}\fi
+}%
+\def\@addamp@ltx{%
+ \if@firstamp\@firstampfalse\else\@addtopreamble{&}\fi
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@arrayacol}
+% \begin{macrocode}
+\def\@arrayacol@LaTeX{%
+ \edef\@preamble{\@preamble \hskip \arraycolsep}%
+}%
+\def\@arrayacol@ltx{%
+ \@addtopreamble{\hskip\arraycolsep}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@tabacol}
+% \begin{macrocode}
+\def\@tabacoll{%
+ \@addtopreamble{\hskip\tableftsep\relax}%
+}%
+\def\@tabacol@LaTeX{%
+ \edef\@preamble{\@preamble \hskip \tabcolsep}%
+}%
+\def\@tabacol@ltx{%
+ \@addtopreamble{\hskip\tabmidsep\relax}%
+}%
+\def\@tabacolr{%
+ \@addtopreamble{\hskip\tabrightsep\relax}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@arrayclassz}
+% \begin{macrocode}
+\def\@arrayclassz@LaTeX{%
+ \ifcase \@lastchclass \@acolampacol \or \@ampacol \or
+ \or \or \@addamp \or
+ \@acolampacol \or \@firstampfalse \@acol \fi
+ \edef\@preamble{\@preamble
+ \ifcase \@chnum
+ \hfil$\relax\@sharp$\hfil \or $\relax\@sharp$\hfil
+ \or \hfil$\relax\@sharp$\fi}%
+}%
+\def\@arrayclassz@ltx{%
+ \ifcase\@lastchclass
+ \@acolampacol
+ \or
+ \@ampacol
+ \or
+ \or
+ \or
+ \@addamp
+ \or
+ \@acolampacol
+ \or
+ \@firstampfalse\@acoll
+ \fi
+ \ifcase\@chnum
+ \@addtopreamble{%
+ \hfil\array@row@rst$\relax\@sharp$\hfil
+ }%
+ \or
+ \@addtopreamble{%
+ \array@row@rst$\relax\@sharp$\hfil
+ }%
+ \or
+ \@addtopreamble{%
+ \hfil\array@row@rst$\relax\@sharp$%
+ }%
+ \fi
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@tabclassz}
+% \begin{macrocode}
+\def\@tabclassz@LaTeX{%
+ \ifcase\@lastchclass
+ \@acolampacol
+ \or
+ \@ampacol
+ \or
+ \or
+ \or
+ \@addamp
+ \or
+ \@acolampacol
+ \or
+ \@firstampfalse\@acol
+ \fi
+ \edef\@preamble{%
+ \@preamble{%
+ \ifcase\@chnum
+ \hfil\ignorespaces\@sharp\unskip\hfil
+ \or
+ \hskip1sp\ignorespaces\@sharp\unskip\hfil
+ \or
+ \hfil\hskip1sp\ignorespaces\@sharp\unskip
+ \fi}}%
+}%
+\def\@tabclassz@ltx{%
+ \ifcase\@lastchclass
+ \@acolampacol
+ \or
+ \@ampacol
+ \or
+ \or
+ \or
+ \@addamp
+ \or
+ \@acolampacol
+ \or
+ \@firstampfalse\@acoll
+ \fi
+ \ifcase\@chnum
+ \@addtopreamble{%
+ {\hfil\array@row@rst\cell@font\ignorespaces\@sharp\unskip\hfil}%
+ }%
+ \or
+ \@addtopreamble{%
+ {\cell@fil\hskip1sp\array@row@rst\cell@font\ignorespaces\@sharp\unskip\hfil}%
+ }%
+ \or
+ \@addtopreamble{%
+ {\hfil\hskip1sp\array@row@rst\cell@font\ignorespaces\@sharp\unskip\cell@fil}%
+ }%
+ \fi
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@tabclassiv}
+% \begin{macrocode}
+\def\@tabclassiv@LaTeX{%
+ \@addtopreamble\@nextchar
+}%
+\def\@tabclassiv@ltx{%
+ \expandafter\@addtopreamble\expandafter{\@nextchar}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@arrayclassiv}
+% \begin{macrocode}
+\def\@arrayclassiv@LaTeX{%
+ \@addtopreamble{$\@nextchar$}%
+}%
+\def\@arrayclassiv@ltx{%
+ \expandafter\@addtopreamble\expandafter{\expandafter$\@nextchar$}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@classv}
+% \begin{macrocode}
+\def\@classv@LaTeX{%
+ \@addtopreamble{\@startpbox{\@nextchar}\ignorespaces
+ \@sharp\@endpbox}%
+}%
+\def\@classv@ltx{%
+ \expandafter\@addtopreamble
+ \expandafter{%
+ \expandafter \@startpbox
+ \expandafter {\@nextchar}%
+ \pbox@hook\array@row@rst\cell@font\ignorespaces\@sharp\@endpbox
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@classx}
+% \begin{macrocode}
+\def\@classx@array{%
+ \ifcase \@lastchclass
+ \@acolampacol \or
+ \@addamp \@acol \or
+ \@acolampacol \or
+ \or
+ \@acol \@firstampfalse \or
+ \@addamp
+ \fi
+}%
+\def\@classx@array@new{%
+ \ifcase \@lastchclass
+ \@acolampacol
+ \or
+ \@addamp \@acol
+ \or
+ \@acolampacol
+ \or
+ \or
+ \@firstampfalse\@acoll
+ \or
+ \@addamp
+ \fi
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Repair other broken parts of \LaTeX}
+%
+% \begin{macro}{\@xbitor}
+% Expansion part has extraneous space token. Removed.
+% \begin{macrocode}
+\def\@xbitor@LaTeX #1{\@tempcntb \count#1
+ \ifnum \@tempcnta =\z@
+ \else
+ \divide\@tempcntb\@tempcnta
+ \ifodd\@tempcntb \@testtrue\fi
+ \fi}%
+\def\@xbitor@ltx#1{%
+ \@tempcntb\count#1%
+ \@ifnum{\@tempcnta=\z@}{}{%
+ \divide\@tempcntb\@tempcnta
+ \@ifodd\@tempcntb{\@testtrue}{}%
+ }%
+}%
+\@ifx{\@xbitor\@xbitor@LaTeX}{%
+ \class@info{Repairing broken LaTeX \string\@xbitor}%
+}{%
+ \class@info{Unrecognized LaTeX \string\@xbitor. Please update this document class! (Proceeding with fingers crossed.)}%
+}%
+\let\@xbitor\@xbitor@ltx
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Syntax}
+% \begin{macro}{\@gobble@opt@one}
+% The \cmd\@gobble@opt@one\ command eats up an optional argument
+% and one required argument.
+% \begin{macrocode}
+\newcommand*\@gobble@opt@one[2][]{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Auto-indented Contents}
+% Facility to automatically determine the proper indentation of
+% the TOC entries.
+%
+% Note on \classname{hyperref} compatibility:
+% We must respect that
+% \cmd\contentsline now has a 4th argument.
+% So, instead of trying to override the meaning of \cmd\contentsline,
+% we use the aux file to remember max values from one run to the next.
+%
+% In this respect, this package retains compatability with
+% \classname{hyperref}.
+%
+% \begin{macro}{\@starttoc}
+% Install hooks at beginning and end of the TOC processing.
+% \begin{macrocode}
+\def\@starttoc#1{%
+ \begingroup
+ \toc@pre
+ \makeatletter
+ \@input{\jobname.#1}%
+ \if@filesw
+ \expandafter\newwrite\csname tf@#1\endcsname
+ \immediate\openout \csname tf@#1\endcsname \jobname.#1\relax
+ \fi
+ \@nobreakfalse
+ \toc@post
+ \endgroup
+}%
+\def\toc@pre{}%
+\def\toc@post{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\toc@@font}
+% Interface for setting the formatting characteristics of this part
+% of the TOC.
+%
+% Note: \cmd\toc@@font\ is the common font for all auto-sizing toc commands,
+% although this, too, could become a dispatcher.
+% \begin{macrocode}
+\def\toc@@font{}%{\footnotesize\rmfamily}%
+\def\@dotsep{\z@}%{5.5pt}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l@section}
+% Interface for determining which TOC elements are automatically indented.
+%
+% All of the \cmd\l@\dots\ commands simply go through the
+% bottleproc \cmd\l@@sections. The calling convention is
+% to pass the name of self and the name of parent.
+% If you want to exclude any of these from the indentation
+% scheme, simply leave the \cmd\l@\dots\ command undefined.
+%
+% Note that the parent of ``section'' is nil, so we have to
+% define a stub.
+% \begin{verbatim}
+%\def\l@section{%
+% \l@@sections{}{section}% Implicit #3#4
+%}%
+%\def\tocleft@{\z@}%
+%\def\l@subsection{%
+% \l@@sections{section}{subsection}% Implicit #3#4
+%}%
+%\def\l@subsubsection{%
+% \l@@sections{subsection}{subsubsection}% Implicit #3#4
+%}%
+%\def\l@paragraph{%
+% \l@@sections{subsubsection}{paragraph}% Implicit #3#4
+%}%
+%\def\l@subparagraph#1#2{%
+% \l@@sections{paragraph}{subparagraph}% Implicit #3#4
+%}%
+% \end{verbatim}
+% \end{macro}
+%
+% Glom some \cmd\dimen\ registers.
+% \begin{macrocode}
+\let\tocdim@section \leftmargini
+\let\tocdim@subsection \leftmarginii
+\let\tocdim@subsubsection \leftmarginiii
+\let\tocdim@paragraph \leftmarginiv
+\let\tocdim@appendix \leftmarginv
+\let\tocdim@pagenum \leftmarginvi
+% \end{macrocode}
+%
+% \begin{macro}{\toc@pre@auto}
+% \begin{macro}{\toc@post@auto}
+% We patch \cmd\@starttoc\ to:
+% 1) before TOC processing,
+% initialize the max registers and
+% set the needed dimensions from
+% the values stored in the auxiliary file, and
+% 2) after TOC processing,
+% store out those max register values into the auxiliary file.
+%
+% Note that the font is set here: all other TOC entries must
+% override these font settings.
+%
+% To activate this override of the standard \LaTeX\ processing,
+% the substyle does: \cmd\let\cmd\toc@pre\cmd\toc@pre@auto\
+% and \cmd\let\cmd\toc@post\cmd\toc@post@auto.
+% \begin{macrocode}
+\def\toc@pre@auto{%
+ \toc@@font
+ \@tempdima\z@
+ \toc@setindent\@tempdima{section}%
+ \toc@setindent\@tempdima{subsection}%
+ \toc@setindent\@tempdima{subsubsection}%
+ \toc@setindent\@tempdima{paragraph}%
+ \toc@letdimen{appendix}%
+ \toc@letdimen{pagenum}%
+}%
+\def\toc@post@auto{%
+ \if@filesw
+ \begingroup
+ \toc@writedimen{section}%
+ \toc@writedimen{subsection}%
+ \toc@writedimen{subsubsection}%
+ \toc@writedimen{paragraph}%
+ \toc@writedimen{appendix}%
+ \toc@writedimen{pagenum}%
+ \endgroup
+ \fi
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\toc@setindent}
+% \begin{macrocode}
+\def\toc@setindent#1#2{%
+ \csname tocdim@#2\endcsname\tocdim@min\relax
+ \@ifundefined{tocmax@#2}{\@namedef{tocmax@#2}{\z@}}{}%
+ \advance#1\@nameuse{tocmax@#2}\relax
+ \expandafter\edef\csname tocleft@#2\endcsname{\the#1}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\toc@letdimen}
+% \begin{macrocode}
+\def\toc@letdimen#1{%
+ \csname tocdim@#1\endcsname\tocdim@min\relax
+ \@ifundefined{tocmax@#1}{\@namedef{tocmax@#1}{\z@}}{}%
+ \expandafter\let\csname tocleft@#1\expandafter\endcsname\csname tocmax@#1\endcsname
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\toc@writedimen}
+% \begin{macrocode}
+\def\toc@writedimen#1{%
+ \immediate\write\@auxout{%
+ \gdef\expandafter\string\csname tocmax@#1\endcsname{%
+ \expandafter\the\csname tocdim@#1\endcsname
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l@@sections}
+% The procedure for formatting the indented TOC entries.
+% We use control sequence names such as \cmd\tocmax@section\ and
+% \cmd\tocleft@section, the former being written to the auxiliary file
+% and the latter only defined for the duration of the TOC processing.
+%
+% Note that the assignment of \cmd\box\cmd\z@\ must endure
+% over the invocation of |#3|.
+% \begin{macrocode}
+\def\l@@sections#1#2#3#4{%
+ % #1 - superior section
+ % #2 - this section
+ % #3 - content, including possible \numberline
+ % #4 - page number
+ \begingroup
+ \everypar{}%
+ \set@tocdim@pagenum{#4}%
+ \global\@tempdima\csname tocdim@#2\endcsname
+ \leftskip\csname tocleft@#2\endcsname\relax
+ \dimen@\csname tocleft@#1\endcsname\relax
+ \parindent-\leftskip\advance\parindent\dimen@
+ \rightskip\tocleft@pagenum plus 1fil\relax
+ \skip@\parfillskip\parfillskip\z@
+ \let\numberline\numberline@@sections
+ \@nameuse{l@f@#2}%
+ \ignorespaces#3\unskip\nobreak\hskip\skip@
+ \hb@xt@\rightskip{\hfil\unhbox\@tempboxa}\hskip-\rightskip\hskip\z@skip
+ \par
+ \expandafter\aftergroup\csname tocdim@#2\endcsname\expandafter
+ \endgroup\the\@tempdima\relax
+}%
+\def\set@tocdim@pagenum#1{%
+ \setbox\@tempboxa\hbox{\ignorespaces#1}%
+ \@ifdim{\tocdim@pagenum<\wd\z@}{\global\tocdim@pagenum\wd\z@}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\numberline@@sections}
+% The bottleproc for all \cmd\numberline\ processing in indented TOC entries.
+% The first argument is self.
+%
+% We use \cmd\@tempdima\ to pass a value around (via global assignment) because
+% \cmd\numberline\ executes inside a group if the
+% \classname{hyperref} package is loaded.
+% Would that it were not so!
+% \begin{macrocode}
+\def\numberline@@sections#1{%
+ \leavevmode\hb@xt@-\parindent{%
+ \hfil
+ \@if@empty{#1}{}{%
+ \setbox\z@\hbox{#1.\kern\@dotsep}%
+ \@ifdim{\@tempdima<\wd\z@}{\global\@tempdima\wd\z@}{}%
+ \unhbox\z@
+ }%
+ }%
+ \ignorespaces
+}%
+\def\tocdim@min{\z@}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Lists}
+% \begin{macro}{\list}
+% Using \cmd\parshape\ to implement lists was always suspect
+% (can you get behind \cmd\parshape\cmd\@ne?) and we now see that
+% it was a mistake all along. Why? Because \cmd\parshape, like
+% \cmd\hangindent, achieves its effect via ``shifting'' the \cmd\hbox es
+% in a paragraph
+% instead of using \cmd\leftskip\ and \cmd\parindent, which is
+% robust during column balancing.
+%
+% We introduce the alternative method with a hook into
+% the \LaTeX\ kernel procedure \cmd\list, which is
+% the implementation of all lists.
+%
+% \begin{macrocode}
+\def\list#1#2{%
+ \ifnum \@listdepth >5\relax
+ \@toodeep
+ \else
+ \global\advance\@listdepth\@ne
+ \fi
+ \rightmargin\z@
+ \listparindent\z@
+ \itemindent\z@
+ \csname @list\romannumeral\the\@listdepth\endcsname
+ \def\@itemlabel{#1}%
+ \let\makelabel\@mklab
+ \@nmbrlistfalse
+ #2\relax
+ \@trivlist
+ \parskip\parsep
+ \set@listindent
+ \ignorespaces
+}%
+\def\set@listindent@parshape{%
+ \parindent\listparindent
+ \advance\@totalleftmargin\leftmargin
+ \advance\linewidth-\rightmargin
+ \advance\linewidth-\leftmargin
+ \parshape\@ne\@totalleftmargin\linewidth
+}%
+\def\set@listindent@{%
+ \parindent\listparindent
+ \advance\@totalleftmargin\leftmargin
+ \advance\rightskip\rightmargin
+ \advance\leftskip\@totalleftmargin
+}%
+\let\set@listindent\set@listindent@parshape
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{End of the \file{ltxutil} {\sc docstrip} module}
+% Here ends the module.
+% \begin{macrocode}
+%</ltxutil-krn>
+% \end{macrocode}
+%
+%
+% \Finale
+% %Here ends the programmer's documentation.
+% \endinput
+%
+\endinput
+%%EOF
diff --git a/obsolete/macros/latex/contrib/revtex4-0/src/ltxutil.pdf b/obsolete/macros/latex/contrib/revtex4-0/src/ltxutil.pdf
new file mode 100644
index 0000000000..9ba6815b86
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-0/src/ltxutil.pdf
Binary files differ
diff --git a/obsolete/macros/latex/contrib/revtex4-0/src/revtex4.dtx b/obsolete/macros/latex/contrib/revtex4-0/src/revtex4.dtx
new file mode 100644
index 0000000000..693747ef47
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-0/src/revtex4.dtx
@@ -0,0 +1,8728 @@
+% \iffalse
+% ****** Start of file revtex4.dtx ****** %
+%
+% This file is part of the APS files in the REVTeX 4 distribution.
+% For version number, search on the string "%FileInfo"
+%
+% First revision by David Carlisle,
+% later versions by Arthur Ogawa.
+%
+% Copyright (c) 2000 The American Physical Society.
+% http://publish.aps.org/revtex4/
+% mailto:revtex@aps.org
+%
+%
+% See the REVTeX 4 README file for restrictions and more information.
+% \fi
+% \iffalse
+%<*driver>
+ \ProvidesFile{revtex4.dtx}
+%</driver>
+%<class-pre|aps|rmp>\NeedsTeXFormat{LaTeX2e}[1996/12/01]
+%<class-pre>\ProvidesClass{revtex4}
+%<aps>\ProvidesFile{aps.rtx}
+%<rmp>\ProvidesFile{rmp.rtx}
+%<10pt>\ProvidesFile{10pt.rtx}
+%<11pt>\ProvidesFile{11pt.rtx}
+%<12pt>\ProvidesFile{12pt.rtx}
+%<revsymb&!class-pre>\ProvidesPackage{revsymb}
+%<driver>\ProvidesFile{revtex.drv}
+%<*!class-pst>
+ [2001/08/02 v4.0 (http://publish.aps.org/revtex4/ for documentation)]%FileInfo
+%</!class-pst>
+%<*driver>
+\listfiles
+\documentclass{ltxdoc}
+\RequirePackage{ltxdocext}%
+\let\url\undefined
+\RequirePackage[colorlinks=true,linkcolor=blue]{hyperref}%
+\expandafter\ifx\csname package@font\endcsname\relax\else
+ \expandafter\expandafter
+ \expandafter\RequirePackage
+ \expandafter\expandafter
+ \expandafter{\csname package@font\endcsname}%
+\fi
+\CodelineIndex\EnableCrossrefs
+\begin{document}
+\gdef\lquote{`}\gdef\rquote{'}%
+%{\tracingall\showlists}
+\DocInput{revtex4.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \GetFileInfo{revtex4.dtx}\CheckSum{7177}
+%
+% \title{The \classname{revtex4} document class of the American Physical Society}
+% \author{Arthur Ogawa%
+% \thanks{First revision by David Carlisle}%
+% }%
+% \date{Version \fileversion, dated \filedate}%
+% \newcommand\revtex{REV\TeX}
+%
+% \maketitle
+%
+% This file embodies the implementation of the APS \revtex\ 4 document class
+% for electronic submissions to journals.
+%
+% The distribution point for this work is
+% \url{http://publish.aps.org/revtex4/},
+% which contains fully unpacked, prebuilt runtime files and documentation.
+%
+% \tableofcontents
+%
+% \section{Using \protect\revtex}
+%
+% The file \file{README} has retrieval and installation information.
+%
+% User documentation is presented separately in \file{revguide.tex}.
+%
+% The file \file{template.aps} is a boilerplate file.
+%
+% \StopEventually{}
+%
+% \changes{v4.a}{1998/01/16}
+% {Initial version}
+% \changes{v4.0beta 2}{1999/06/20}
+% {First modifications by Arthur Ogawa (mailto:ogawa@teleport.com)}
+% \changes{v4.0beta 3}{1999/11/13}
+% {New ltxgrid-based code, other bug fixes}
+% \changes{v4.0beta 4}{2000/05/10}
+% {More features and bug fixes: compatability with longtable and array packages.
+% Now certainly incompatible with multicol.}
+% \changes{v4.0beta 5}{2000/11/14}
+% {Bug fixes and minor new features: title block affiliations can have ancillary data, just like authors;
+% clearpage processing revamped, with floats staying in order; widetext ornaments.}
+% \changes{v4.0beta 6}{2001/02/13}
+% {Last bug fixes before release.}
+%
+% \section{Overview}%
+% \revtex\ is a \LaTeXe\ document class, aomewhat like a hybrid of
+% the standard \LaTeX\ \classname{book} and \classname{article} classes.
+%
+% Certain packages are (should be) loaded by this class in any case:
+% \classname{amssymb}, \classname{amsmath}, \classname{bm}, \classname{natbib}.
+%
+% Certain packages are automatically loaded by this class
+% when a corresponding class option has been invoked:
+%
+% \begin{tabular}{ll}
+% \textbf{\revtex\ option}&\textbf{package}\\
+% \classoption{amsfonts}&\classname{amsfonts}\\
+% \classoption{amssymb}&\classname{amssymb}\\
+% \classoption{aps}&\classname{overcite}\\
+% \end{tabular}
+%
+% Certain other packages are to be loaded by the
+% document through explicit use of \cmd\usepackage.
+% Some mentioned in the user documentation are
+% \classname{graphicx}, \classname{longtable},
+% and \classname{bm}.
+%
+% Certain commonly used packages are known to be incompatible with
+% \revtex, among them \classname{multicol} and \classname{cite}.
+% If such a package is found to be loaded, \revtex\ issues an error message
+% and halts the job.
+% Halting might be considered severe punishment for loading an incompatible
+% package, but if we were to proceed, an even weirder error might be encountered
+% further down the road.
+%
+% This document class implements the substyle: a set of mutually
+% exclusive class options that, in this case, allow the
+% document class to address multiple societies.
+% It also implements a sub-substyle, giving the
+% journal of the given society.
+% The only society currently implemented is \classoption{aps},
+% however, code is in place for another society, the \classoption{osa}.
+%
+% FIXME: should always load the \classname{graphicx} package.
+%
+% QUERY: since \classname{amsfonts} and \classname{amssymb} extend
+% syntax, why not load them in any case?
+%
+% QUERY: if you say \cmd\documentclass|[prb,osa]{revtex4}|, then
+% the value of \cmd\@society\ will be wrong, or? Fixed.
+%
+% Certain events occur at \cmd\AtEndOfClass\ time:
+% \begin{enumerate}
+% \item
+% Optionally read in packages
+% \classname{amsfonts}, \classname{amssymb}.
+% \item
+% Read in society substyle \file{.rtx} file.
+% \item
+% Read in type size \file{.rtx} file.
+% \item
+% Read in the job's style file, the \file{.rty} file.
+% \item
+% Define things based on \cmd\secnumarabic@sw.
+% \item
+% Install procedures to execute at the very end of the class's
+% \cmd\AtBeginDocument\ processing, such as
+% \begin{enumerate}
+% \item
+% closing out the page grid
+% \item
+% putting out the LastPage label.
+% \item
+% issuing a \cmd\bibliographystyle\ command, based on the value set
+% by the society substyle.
+% \item
+% setting default values for parameters used in the document.
+%FIXME: differentiate between class's parameters that can wait until
+% they are used in the document, and parameters that are used at \cmd\AtBeginDocument\ time.
+% \end{enumerate}
+% \item
+% Install procedures to execute the very last at \cmd\AtEndDocument\ time,
+% such as the \cmd\clearpage\ processing.
+% \end{enumerate}
+%
+% Certain events are optionally scheduled for \cmd\AtBeginDocument\ time:
+% \begin{enumerate}
+% \item
+% Setting default values for the Booleans and for other procedures used in formatting.
+% \item
+% In response to class options options, adjusting parameters and procedures used in formatting.
+% \item
+% Implementing the \classoption{eqsecnum} option, if required.
+% \item
+% Setting the state engine for data commands.
+% \item
+% Memorizing procedures for later use.
+% \item
+% Setting type size and area, for use by later calculations.
+% \end{enumerate}
+%
+% Certain events are scheduled for \cmd\class@enddocumenthook\ time:
+% \begin{enumerate}
+% \item
+% Print out the migrated floats or the end notes, if needed.
+% \item
+% Close out the page grid.
+% \item
+% Label the last page of the document
+% \item
+% (\classname{natbib}) prepare to read in the \file{.aux} file.
+% \end{enumerate}
+%
+%
+% \section{The installer file}
+% We include here a reference copy of the installer file, \file{revtex4.ins}.
+% It is not intended that one actually generate that file using \file{docstrip}
+% via the revtex4 installer file, because that would involve overwriting the
+% file that \TeX\ is typesetting. Instead, the installer file is provided
+% pre-generated.
+%
+% For the most part, the installer is simple: it generates \file{revtex4.cls} and
+% a collection of \file{.rtx} files from \file{revtex4.dtx}.
+%
+% However, the process of generating \file{revtex4.cls} involves the incorporation
+% of portions of two of the \file{ltx} series of files, \file{ltxutil.dtx},
+% and \file{ltxgrid.dtx}. The former is a collection of macro definitions that
+% serve as the lowest level of extensions to \LaTeX, the latter implements
+% an alternative output routine and page gridding mechanism that provides for
+% multicolumn page layouts, but without the sorry limitations of the
+% \LaTeX\ required package, \classname{multicol}, and is also compatible with
+% the \classname{longtable} package (which \classname{multicol} is not).
+% \begin{macrocode}
+%<*ins>
+% This file requires docstrip version 2.4 or higher available from
+% ftp://ctan.tug.org/tex-archive/macros/latex/unpacked/docstrip.tex
+\input docstrip
+\preamble
+
+This file is part of the APS files in the REVTeX 4 distribution.
+For the version number, search on the string %FileInfo
+
+Copyright (c) 2000 The American Physical Society.
+http://publish.aps.org/revtex4/
+mailto:revtex@aps.org
+
+Maintained by Arthur Ogawa (mailto:ogawa@teleport.com)
+under contract to the American Physical Society.
+
+See the REVTeX 4 README file for restrictions and more information.
+
+\endpreamble
+\keepsilent
+\askforoverwritefalse
+\generate{%
+ \file{revtex4.cls}{%
+ \from{revtex4.dtx}{class-pre}%
+ \from{ltxutil.dtx}{ltxutil-krn}%
+ \from{ltxgrid.dtx}{ltxgrid-krn}%
+ \from{textcase.dtx}{package}%
+ \from{revtex4.dtx}{class-pst}%
+ }%
+ \file{aps.rtx}{\from{revtex4.dtx}{aps}}%
+ \file{rmp.rtx}{\from{revtex4.dtx}{rmp}}%
+ \file{10pt.rtx}{\from{revtex4.dtx}{10pt}}%
+ \file{11pt.rtx}{\from{revtex4.dtx}{11pt}}%
+ \file{12pt.rtx}{\from{revtex4.dtx}{12pt}}%
+ \file{revsymb.sty}{\from{revtex4.dtx}{revsymb}}%
+}%
+\endbatchfile
+%</ins>
+% \end{macrocode}
+%
+%
+% \section{Writing journal-specifc extensions to \revtex}
+%
+% With this version of \revtex, we introduce a somewhat different
+% scheme for adapting \revtex\ to the needs of a specific journal.
+%
+% To create a journal substyle, you create new class options in
+% \revtex\ for the society, say \classoption{osa}, and any of that society's journals,
+% one of which is, say, \classoption{josaa},
+% using the code for the APS as a guide.
+% In particular, each of your new options should separately define \cmd\@society\
+% and \cmd\@journal. That for the former will be the same for
+% all options relating to a particular society.
+%
+% Then, for the society, you create a corresponding \file{.rtx}
+% file, in our case \file{osa.rtx}.
+% Within that file, you override procedures and parameter assignments as you see fit.
+% Ideally they will be generally applicable to all of that society's
+% journals (see the file \file{aps.rtx} for a realization of this scheme).
+% Also within that file, you include a
+% section of code for each journal, that for josaa looks like:
+% \begin{verbatim}
+% \@ifx{\@journal\journal@josaa}{%
+% <code specific to the josaa>
+% }{}%
+% \end{verbatim}
+%
+% Thus far, the scheme is similar to that used in \revtex\ 3.1.
+% However, the new scheme does differ from the old in that
+% the \file{.rtx} file should define no syntactical extensions
+% to \revtex.
+%
+% \section{The \classname{revtex4} Document Class}
+%
+% \begin{macrocode}
+%<*class-pre>
+\def\class@name{revtex4}%
+% \end{macrocode}
+%
+% Print a banner in the log:
+% \begin{macrocode}
+\GenericInfo{}{\space
+ Copyright (c) 2001 The American Physical Society.^^J
+ mailto:revtex@aps.org^^J
+ Licensed under the LPPL:^^Jhttp://www.ctan.org/tex-archive/macros/latex/base/lppl.txt^^J
+ Arthur Ogawa <ogawa@teleport.com>^^J
+ Based on work by David Carlisle <david@dcarlisle.demon.co.uk>%
+ \@gobble
+}%
+% \end{macrocode}
+%
+% \subsection{Compatability Processing}
+%
+% If the document has \cmd\documentstyle|{revtex4}|,
+% then, instead of attempting to run in compatability mode,
+% just complain and exit.
+% \changes{v4.0beta 3}{1999/11/13}
+% {Lose compatability mode.}
+% \begin{macrocode}
+\if@compatibility
+ \edef\reserved@a{\errhelp{%
+ Change your \string\documentstyle\space statement to
+ \string\documentclass\space and rerun.
+ }}\reserved@a
+ \errmessage{You cannot run \class@name\space in compatability mode}%
+ \expandafter\@@end
+\fi
+% \end{macrocode}
+%
+%
+% \section{Extensions to the \LaTeX\ Kernel}
+% I am introducing
+% some portions of the \classname{ltxkrnext} package
+% (\url{ftp://ftp.teleport.com/users/ogawa/macros/latex/contrib/supported/ltxkrnext/}).
+%
+% First, de-fang unwanted commands and turn \cmd\ProvidesPackage\ into an informative message.
+% \begin{macrocode}
+\let\DeclareOption@latex\DeclareOption
+\let\DeclareOption\@gobbletwo
+\let\ProcessOptions@latex\ProcessOptions
+\let\ProcessOptions\@empty
+\let\ProvidesPackage@latex\ProvidesPackage
+\def\ProvidesPackage#1[#2]{%
+ \class@info{Incorporating package #1 [#2].}%
+}%
+%</class-pre>
+% \end{macrocode}
+% Now load the utility and page grid packages.
+% The \classname{ltxutil} and \classname{ltxgrid} packages are distributed with
+% \revtex.
+% \begin{macrocode}
+%\RequirePackage{ltxutil}%
+%\RequirePackage{ltxgrid}%
+% \end{macrocode}
+%
+% The \classname{textcase} package is available from
+% \url{CTAN:/macros/latex/contrib/supported/carlisle/textcase.dtx} and is
+% used at the suggestion, and by permission, of David~P. Carlisle.
+% \begin{quotation}
+% \cmd\ProvidesFile{textcase.dtx}
+% [1998/11/12 v0.06 Text only upper/lower case changing (DPC)]
+% \end{quotation}
+%
+% David, in turn, suggests that Donald Arseneau be credited for some of the ideas in
+% the \classname{textcase} package, so let it hereby be so understood.
+%
+% Note that David's package has a bug, which is fixed as follows:
+% Change:
+%\begin{verbatim}
+% \def\NoCaseChange##1{\noexpand\NoCaseChange{\noexpand##1}}
+%\end{verbatim}
+% To:
+%\begin{verbatim}
+% \def\NoCaseChange##1{\noexpand\NoCaseChange{\noexpand##1}}%
+%\end{verbatim}
+%
+% \begin{macrocode}
+%\RequirePackage{textcase}%
+% \end{macrocode}
+%
+% Next, restore those cammands we de-fanged:
+% \begin{macrocode}
+%<*class-pst>
+\let\ProvidesPackage\ProvidesPackage@latex
+\let\ProcessOptions\ProcessOptions@latex
+\let\DeclareOption\DeclareOption@latex
+% \end{macrocode}
+% And let the \classname{textcase} commands override those of \LaTeX:
+% \begin{macrocode}
+\expandafter
+\let\csname MakeUppercase \expandafter\endcsname
+ \csname MakeTextUppercase \endcsname
+\expandafter
+\let\csname MakeLowercase \expandafter\endcsname
+ \csname MakeTextLowercase \endcsname
+% \end{macrocode}
+%
+% Try to patch \classname{longtable}.
+% \begin{macrocode}
+\appdef\class@documenthook{%
+ \switch@longtable
+}%
+% \end{macrocode}
+%
+% Try to provide a more robust version of \cmd\boldmath.
+% If Team \LaTeX\ ever gets around to fixing this problem, we will bow out.
+% (This relates to bug \#394.)
+% \begin{macrocode}
+\appdef\class@documenthook{%
+ \expandafter\@ifnotrelax\csname boldmath \endcsname{}{%
+ \expandafter\let\csname boldmath \endcsname\boldmath
+ \expandafter\def\expandafter\boldmath\expandafter{\expandafter\protect\csname boldmath \endcsname}%
+ }%
+}%
+% \end{macrocode}
+%
+%
+%
+% \section{Options}\label{sec:options}%
+%
+% \subsection{Define Booleans Used in Options}%
+% The following Booleans are used within the document class to
+% allow the document or the substyle to make selections
+% of formatting.
+% Because an explicit document class option always overrides a substyle,
+% any substyle wishing to assign a value to a flag must first test the flag to
+% confirm that it is still undefined.
+% This further means that the default value of the flag must be
+% assigned late, at the end of \cmd\AtBeginDocument\ time, and that
+% the flag may be queried no earlier than that time.
+%
+% \begin{macro}{\class@inithook}
+% The hook \cmd\class@inithook\ is installed into \cmd\class@documenthook,
+% and thereafter serves as the focal point for all code that
+% gives default values to the class's parameters.
+%
+% A typical code might be:
+% \begin{verbatim}
+%\appdef\class@inithook{%
+% \@ifxundefined\twocolumn@sw{\@booleanfalse\twocolumn@sw}{}%
+%}%
+% \end{verbatim}
+% which ensures that the switch \cmd\twocolumn@sw\ is never left undefined.
+%
+% \begin{macrocode}
+\appdef\class@documenthook{%
+ \class@inithook
+}%
+\def\class@inithook{}%
+%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\twocolumn@sw}
+% The boolean \cmd\twocolumn@sw\ signifies that we are to use a two-column grid.
+%
+% \begin{macrocode}
+\appdef\class@inithook{%
+ \@ifxundefined\twocolumn@sw{\@booleanfalse\twocolumn@sw}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\footinbib@sw}
+% The boolean \cmd\footinbib@sw\ signifies that
+% footnotes are to be set in the bibliography, as endnotes.
+% \begin{macrocode}
+\appdef\class@inithook{%
+ \@ifxundefined\footinbib@sw{\@booleanfalse\footinbib@sw}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\preprintsty@sw}
+% The boolean \cmd\preprintsty@sw\ signifies that
+% the document is to be formatted in preprint style.
+% \begin{macrocode}
+\appdef\class@inithook{%
+ \@ifxundefined\preprintsty@sw{\@booleanfalse\preprintsty@sw}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\preprint@sw}
+% The boolean \cmd\preprint@sw\ signifies that
+% the preprints (cf. \cmd\preprint) are to be formatted (usually on the title page).
+% The default is to do so; the option \classoption{nopreprintnumbers}
+% declares not to.
+% \begin{macrocode}
+\appdef\class@inithook{%
+ \@ifxundefined\preprint@sw{\@booleanfalse\preprint@sw}{}%
+ \preprintsty@sw{\@booleantrue\preprint@sw}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\galley@sw}
+% The boolean \cmd\galley@sw\ signifies that
+% the document is to be formatted in galley style.
+%
+% Asserting both \cmd\galley@sw\ and \cmd\preprintsty@sw\
+% may produce strange formatting results, but it is not illegal.
+% However, it \emph{is} illegal to assert galley and any
+% twocolumn option.
+% \begin{macrocode}
+\appdef\class@inithook{%
+ \@ifxundefined\galley@sw{\@booleanfalse\galley@sw}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\groupauthors@sw}
+% The flag \cmd\groupauthors@sw\ signifies that authors are to be grouped.
+% This affects the meaning of \cmd\@author@present\ and \cmd\@tempaffil.
+%
+% FIXME: apparently \cmd\@tempaffil\ and its aliases are never used.
+% \end{macro}
+%
+% \begin{macro}{\runinaddress@sw}
+% The flag \cmd\runinaddress@sw\ signifies that author addresses are to be
+% run in.
+% \end{macro}
+%
+% \begin{macro}{\@affils@sw}
+% If \cmd\@affils@sw\ is false, an address is never recognised as ``new''
+% and is therefore always entered into the affiliation list,
+% stopping groups of authors at the same address being amalgamated
+% into the same list:
+% the address will be printed the same number of times it is entered.
+% \end{macro}
+%
+% \begin{macro}{\showPACS@sw}
+% \begin{macro}{\showKEYS@sw}
+% If \cmd\showPACS@sw\ is true, print the PACS information in the title block,
+% otherwise not.
+% Similarly for \cmd\showKEYS@sw\ and the keywords.
+% \begin{macrocode}
+\appdef\class@inithook{%
+ \@ifxundefined\showPACS@sw{\@booleanfalse\showPACS@sw}{}%
+ \@ifxundefined\showKEYS@sw{\@booleanfalse\showKEYS@sw}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\floats@sw}
+% The Boolean \cmd\floats@sw\ signifies that floats are to be floated;
+% if false, that floats are to be deferred to the end of the document.
+% By default, the former.
+% Note that the state of this Boolean is to be changed by
+% the document class in response to user-selected options.
+%
+% This boolean and the assignment of its default value is done by
+% the \classname{ltxutil} package.
+% \end{macro}
+%
+% \begin{macro}{\floatp@sw}
+% The Boolean \cmd\floatp@sw\ signifies that endfloats are to be set one per page;
+% if false, that endfloats are to be set with multiple floats per page permitted.
+% By default, the latter.
+% Note that the state of this Boolean is to be changed by
+% the document class in response to user-selected options.
+% The default is established here.
+% \end{macro}
+%
+% \begin{macro}{\twoside@sw}
+% The flag \cmd\twoside@sw\ signifies that the document is to be
+% formatted for duplex printing.
+% At \cmd\AtBeginDocument\ time, we must align the value
+% of the kernel \cmd\newif\ switch \cmd\if@twoside\
+% to that of \cmd\twoside@sw.
+% \begin{macrocode}
+\appdef\class@inithook{%
+ \@ifxundefined\twoside@sw{\@booleanfalse\twoside@sw}{}%
+ \twoside@sw{\@twosidetrue}{\@twosidefalse}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\draft@sw}
+% The flag \cmd\draft@sw\ signifies that the document is to be
+% formatted in draft mode.
+% Certain packages may pay attention to the
+% class option \classoption{draft} that sets this Boolean.
+% \begin{macrocode}
+\appdef\class@inithook{%
+ \@ifxundefined\draft@sw{\@booleanfalse\draft@sw}{}%
+ \draft@sw{\overfullrule 5\p@}{\overfullrule\z@}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tightenlines@sw}
+% The boolean \cmd\tightenlines@sw\ signifies that
+% the leading is to be made standard amount.
+% If false, it means that the leading is to be set extra open.
+% Has no effect on 10pt size option.
+% \begin{macrocode}
+\appdef\class@inithook{%
+ \@ifxundefined\tightenlines@sw{\@booleanfalse\tightenlines@sw}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\lengthcheck@sw}
+% The flag \cmd\lengthcheck@sw\ signifies that
+% the length checking is in effect.
+% It is up to the individual journal substyle
+% to alter its formatting accordingly.
+% \begin{macrocode}
+\appdef\class@inithook{%
+ \@ifxundefined\lengthcheck@sw{\@booleanfalse\lengthcheck@sw}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\eqsecnum@sw}
+% The flag \cmd\eqsecnum@sw\ signifies that equations are to be
+% numbered with the section, e.g., ``Eq. (2.13)''.
+% This flag is neither set nor queried.
+% \begin{macrocode}
+\appdef\class@inithook{%
+ \@ifxundefined\eqsecnum@sw{\@booleanfalse\eqsecnum@sw}{}%
+ \eqsecnum@sw{%
+ \@addtoreset{equation}{section}%
+ \def\theequation@prefix{\arabic{section}.}%
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\byrevtex@sw}
+% The flag \cmd\byrevtex@sw\ signifies that the document should
+% bear an imprint to the effect that it was formatted by this document class.
+% \begin{macrocode}
+\appdef\class@inithook{%
+ \@ifxundefined\byrevtex@sw{\@booleanfalse\byrevtex@sw}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Declare Options}%
+%
+% \subsubsection{Checkin: for Editorial Use}%
+% A document class option declaring that the document is being processed by the
+% editorial staff.
+%
+% This option should:
+% \begin{itemize}
+% \item
+% put date in footer along with folio
+% \item
+% Have the effect of selecting the \classoption{preprint} class option.
+% \item
+% Have the effect of selecting the \classoption{showpacs} class option.
+% \item
+% specify that when a float is placed h or H, it will be allowed to break over pages.
+% (Note: be sure that if the enclosed \env{tabular} has an optional argument, you change it to [v], or remove it entirely.)
+% \end{itemize}
+% \changes{v4.0beta 3}{1999/11/13}
+% {New option ``checkin''}
+% \begin{macrocode}
+\DeclareOption{checkin}{%
+ \@booleantrue\dateinRH@sw
+ \@booleantrue\preprintsty@sw
+ \def\@pointsize{12}%
+ \@booleantrue\showPACS@sw
+ \@booleantrue\showKEYS@sw
+ \def\fp@proc@h{\allow@breaking@tables}%
+ \def\fp@proc@H{\allow@breaking@tables}%
+}%
+\@booleanfalse\dateinRH@sw
+\def\checkindate{\dateinRH@sw{{\tiny(\today)}}{}}%
+\def\allow@breaking@tables{%
+ \def\array@default{v}% tabular can break over pages
+ \@booleanfalse\floats@sw % table can break over pages
+}%
+% \end{macrocode}
+%
+% \subsubsection{Preprint Style}%
+% \changes{v4.d}{1998/01/31}
+% {Rearrange the ordering so numerical ones come first. AO: David, what does this mean?}
+%
+% \changes{v4.g}{1998/06/10}
+% {comma not space between email and homepage}
+%
+% \changes{v4.0beta 2}{1999/06/20}
+% {Move this ``complex'' option to the front, where it can be overridden by ``simple'' options.}
+% \begin{macrocode}
+\DeclareOption{preprint}{%
+ \@booleantrue\preprintsty@sw
+ \def\@pointsize{12}%
+}%
+\DeclareOption{manuscript}{%
+ \class@warn{Document class option manuscript is obsolete; use preprint instead}%
+ \ExecuteOptions{preprint}%
+}%
+% \end{macrocode}
+%
+% \subsubsection{Showing PACS and keywords}%
+% \changes{v4.0beta 2}{1999/06/20}
+% {New option}
+% \changes{v4.0beta 5}{2000/09/20}
+% {New option showkeys}
+% \begin{macrocode}
+\DeclareOption{showpacs}{%
+ \@booleantrue\showPACS@sw
+}%
+\DeclareOption{noshowpacs}{%
+ \@booleanfalse\showPACS@sw
+}%
+\DeclareOption{showkeys}{%
+ \@booleantrue\showKEYS@sw
+}%
+\DeclareOption{noshowkeys}{%
+ \@booleanfalse\showKEYS@sw
+}%
+% \end{macrocode}
+%
+% \subsubsection{Balance the last page when in two-column page grid}%
+% If we are in a two-column page grid, we may wish to balance the columns
+% of the last page. This will be done automatically if the
+% \classoption{twocolumn} document class option is chosen.
+% This action will be turned off by the \classoption{nobalancelastpage}.
+% A complementary class option, \classoption{balancelastpage} is also provided.
+% \begin{macrocode}
+\DeclareOption{balancelastpage}{%
+ \@booleantrue\balancelastpage@sw
+}%
+\DeclareOption{nobalancelastpage}{%
+ \@booleanfalse\balancelastpage@sw
+}%
+\appdef\class@inithook{%
+ \@ifxundefined\balancelastpage@sw{%
+ \@booleantrue\balancelastpage@sw
+ }{}%
+}%
+% \end{macrocode}
+%
+% \subsubsection{Showing preprint numbers}%
+% \changes{v4.0beta 4}{2000/04/10}
+% {New option}
+% \begin{macrocode}
+\DeclareOption{nopreprintnumbers}{\@booleanfalse\preprint@sw}%
+\DeclareOption{preprintnumbers}{\@booleantrue\preprint@sw}%
+% \end{macrocode}
+%
+% \subsubsection{Hypertext Option}%
+%
+% \changes{v4.e}{1998/01/31}
+% {protect against hyperref revtex kludges which are not needed now}
+% \changes{v4.0beta 2}{1999/06/20}
+% {Move this ``complex'' option to the front, where it can be overridden by ``simple'' options.}
+% \changes{v4.0rc4}{2001/07/23}
+% {hyperref is no longer loaded via class option: use a usepackage statement instead}
+% \begin{macrocode}
+\DeclareOption{hyperref}{%
+%\AtEndOfClass{%
+% \begingroup
+% \edef\@tempa{%
+% \let
+% \noexpand\@clsextension
+% \noexpand\@empty
+% \noexpand\RequirePackage{hyperref}%
+% \def\noexpand
+% \@clsextension{\@clsextension}%
+% }%
+% \expandafter
+% \endgroup
+% \@tempa
+%}%
+% \end{macrocode}
+%
+% If you have a hyper-foo enabled browser you may prefer this format
+% which does not print the URL for the home page, but just makes the
+% name a link, but by default print it so it works on paper.
+% \changes{v4.e}{1998/01/31}
+% {print homepage}
+%
+% \begin{macrocode}
+% \def\@pointsize{10}%
+ \class@warn{Class option "hyperref" is no longer supported.^^JEmploy \string\usepackage{hyperref} instead}%
+}%
+% \end{macrocode}
+%
+% \subsubsection{Type Size}%
+% Use \cmd\@pointsize|=10| rather than \cmd\@ptsize|=0| to allow easy extensions
+% to 9pt or whatever.
+% Note: the three alternatives are mutually exclusive. Furthermore
+% if \cmd\@pointsize\ is still undefined at \cmd\AtEndOfClass\ time,
+% then the substyle can conclude that the user accepts the default.
+% \begin{macrocode}
+\DeclareOption{10pt}{\def\@pointsize{10}}
+\DeclareOption{11pt}{\def\@pointsize{11}}
+\DeclareOption{12pt}{\def\@pointsize{12}}
+% \end{macrocode}
+%
+% \subsubsection{Media Size}%
+% \changes{v4.0beta 2}{1999/06/20}
+% {Restore all media size class option of \protect\file{classes.dtx}}
+% \begin{macrocode}
+\DeclareOption{a4paper}
+ {\setlength\paperheight {297mm}%
+ \setlength\paperwidth {210mm}}
+\DeclareOption{a5paper}
+ {\setlength\paperheight {210mm}%
+ \setlength\paperwidth {148mm}}
+\DeclareOption{b5paper}
+ {\setlength\paperheight {250mm}%
+ \setlength\paperwidth {176mm}}
+\DeclareOption{letterpaper}
+ {\setlength\paperheight {11in}%
+ \setlength\paperwidth {8.5in}}
+\DeclareOption{legalpaper}
+ {\setlength\paperheight {14in}%
+ \setlength\paperwidth {8.5in}}
+\DeclareOption{executivepaper}
+ {\setlength\paperheight {10.5in}%
+ \setlength\paperwidth {7.25in}}
+\DeclareOption{landscape}
+ {\setlength\@tempdima {\paperheight}%
+ \setlength\paperheight {\paperwidth}%
+ \setlength\paperwidth {\@tempdima}}
+% \end{macrocode}
+%
+% \subsubsection{Bibnotes}%
+% Frontmatter footnotes result from frontmatter commands like
+% \cmd\email, \cmd\homepage, \cmd\altaffiliation, and \cmd\thanks.
+% The default for \cmd\frontmatter@footnote@produce\ is
+% \cmd\frontmatter@footnote@produce@footnote, which formats the frontmatter footnotes
+% at the foot of the title page. The \classoption{bibnotes} class option
+% defers them to the bibliography.
+% \begin{macrocode}
+\DeclareOption{bibnotes}{\@booleantrue\bibnotes@sw}%
+\DeclareOption{nobibnotes}{\@booleanfalse\bibnotes@sw}%
+\appdef\class@enddocumenthook{\auto@bib}%
+\appdef\class@inithook{%
+ \@ifxundefined\bibnotes@sw{\@booleanfalse\bibnotes@sw}{}%
+ \bibnotes@sw{%
+ \let\frontmatter@footnote@produce\frontmatter@footnote@produce@endnote
+ }{%
+ \let\frontmatter@footnote@produce\frontmatter@footnote@produce@footnote
+ }%
+}%
+% \end{macrocode}
+%
+% \subsubsection{Footinbib}%
+% \begin{macrocode}
+\DeclareOption{footinbib}{\@booleantrue\footinbib@sw}
+\DeclareOption{nofootinbib}{\@booleanfalse\footinbib@sw}
+% \end{macrocode}
+%
+% \subsubsection{altaffilletter}%
+%
+% \begin{macrocode}
+\DeclareOption{altaffilletter}{\@booleantrue\altaffilletter@sw}%
+\DeclareOption{altaffilsymbol}{\@booleanfalse\altaffilletter@sw}%
+\appdef\class@inithook{%
+ \@ifxundefined\altaffilletter@sw{\@booleanfalse\altaffilletter@sw}{}%
+}%
+% \end{macrocode}
+%
+% \subsubsection{superbib}%
+% The document may invoke superscript bibliography style.
+% If not, the journal substyle may make a selection.
+% If neither, the class itself selects a default.
+% This is really a quite deep nesting of defaults.
+% \begin{macrocode}
+\DeclareOption{superbib}{%
+ \def\place@bibnumber{\place@bibnumber@sup}%
+}%
+% \end{macrocode}
+%
+% \subsubsection{citeautoscript}%
+% This class option allows you to automatically accomodate a change from non-superscripted, numbered references
+% to superscripted, bunmbered references.
+%
+% Note: you should always mark up your document with the assumption that references are \emph{not} going to be superscripted.
+% Otherwise this option has no hope of working properly.
+%
+% \begin{macrocode}
+\DeclareOption{citeautoscript}{%
+ \@booleantrue\citeautoscript@sw
+}%
+\@booleanfalse\citeautoscript@sw
+% \end{macrocode}
+%
+% \subsubsection{Simplex/Duplex Pages}%
+% \changes{v4.e}{1998/01/31}
+% {4.d had twoside option setting twoside switch to false}
+% The complementary options \classoption{twoside} and \classoption{oneside}
+% assert formatting for duplex or simplex printing, respectively.
+% At the same time, we arrange for the selection of the page grid
+% with respect to the marginal column:
+% Because \cmd\if@reversemargin\ remains default (false),
+% if duplex printing, this column will always be on the (right),
+% if simplex printing, it will always be on the (outside).
+% QUERY: correct choice?
+% \begin{macrocode}
+\DeclareOption{twoside}{\@booleantrue\twoside@sw \@mparswitchfalse}
+\DeclareOption{oneside}{\@booleanfalse\twoside@sw\@mparswitchtrue}
+% \end{macrocode}
+%
+% \subsubsection{Two-Column Page Grid}%
+%
+% \begin{macro}{\twocolumn@sw}
+% The flag \cmd\twocolumn@sw\ signifies that the document is to be
+% formatted in the two-column page grid.
+%
+% If no options relating to page grid are invoked by
+% \cmd\AtBeginDcoument\ time, we set default values.
+% Up to that point, the class can check if \cmd\twocolumn@sw\
+% is \cmd\undefined\ to see if any related options have been invoked.
+%
+% At \cmd\AtBeginDocument\ time, we must align the value
+% of the kernel \cmd\newif\ switch \cmd\if@twocolumn\
+% to that of \cmd\twocolumn@sw.
+%
+% We install into \cmd\class@enddocumenthook\
+% all tasks that we know must be completed at \cmd\AtEndDocument\ time.
+% The first thing it does is end the current paragraph.
+% The last is
+% to return us to one-column page grid.
+% (This task is installed as late as possible,
+% i.e., after items like \cmd\printtables.)
+% \begin{macrocode}
+\AtEndOfClass{%
+ \def\clear@document{%
+ \close@column
+ }%
+ \appdef\class@inithook{%
+ \@ifxundefined\close@column{%
+ \let\close@column\close@column@default
+ }{}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% The \classoption{twocolumn} class option employs the standard mechanism for
+% changing the column grid: the \classname{ltxgrid} package.
+% \begin{macrocode}
+\DeclareOption{twocolumn}{%
+ \@booleantrue\twocolumn@sw
+}%
+% \end{macrocode}
+%
+% \classoption{onecolumn} specifies one-column page grid.
+% \begin{macrocode}
+\DeclareOption{onecolumn}{%
+ \@booleanfalse\twocolumn@sw
+}%
+% \end{macrocode}
+%
+% \classoption{galley} emulates setting the galleys of
+% a two-column journal.
+% FIXME: this option should effectively set \cmd\preprintsty@sw\ false.
+% NOTE: it makes no sense to assert both galley and twocolumn.
+%
+% \begin{macrocode}
+\DeclareOption{galley}{%
+ \ExecuteOptions{onecolumn}%
+ \@booleantrue\galley@sw
+ \appdef\set@pica@hook{%
+ \advance\textwidth-\columnsep
+ \textwidth.5\textwidth
+ }%
+}%
+% \end{macrocode}
+%
+%
+% \subsubsection{raggedbottom or flushbottom}%
+% The class options \classoption{raggedbottom} and \classoption{flushbottom} determine whether the columns (page)
+% are ragged bottom or flush bottom.
+% Note that we do not select a default here; that is done by the journal substyle.
+% \begin{macrocode}
+\DeclareOption{raggedbottom}{\@booleantrue\raggedcolumn@sw}
+\DeclareOption{flushbottom}{\@booleanfalse\raggedcolumn@sw}
+% \end{macrocode}
+%
+% \subsubsection{tightenlines}%
+% This class option specifies that standard leading
+% is to be used to set the type.
+% If lacking, the leading will be loose.
+%
+% \begin{macrocode}
+\DeclareOption{tightenlines}{\@booleantrue\tightenlines@sw}
+% \end{macrocode}
+%
+% \subsubsection{lengthcheck}%
+% This class option specifies that the formatted document
+% should approach as closely as possible the
+% formatting of an actual journal article
+% to facilitate the author's performance of a length check.
+%
+% \begin{macrocode}
+\DeclareOption{lengthcheck}{%
+ \@booleantrue\lengthcheck@sw
+ \@booleantrue\twoside@sw
+ \@booleantrue\twocolumn@sw
+}%
+% \end{macrocode}
+%
+% \subsubsection{Draft and Final}%
+% \begin{macrocode}
+\DeclareOption{draft}{%
+ \@booleantrue\draft@sw
+}%
+\DeclareOption{final}{%
+ \@booleanfalse\draft@sw
+}%
+% \end{macrocode}
+%
+% \subsubsection{eqsecnum}%
+% The \classoption{eqsecnum} class option signifies that equations are
+% to be numbered within sections.
+% \begin{macrocode}
+\DeclareOption{eqsecnum}{\@booleantrue\eqsecnum@sw}
+% \end{macrocode}
+%
+% \subsubsection{secnumarabic}%
+% The \classoption{secnumarabic} class option signifies that sectioning commands are
+% to be numbered arabic.
+% \begin{macrocode}
+\DeclareOption{secnumarabic}{\@booleantrue\secnumarabic@sw}
+% \end{macrocode}
+% The code that polls the Boolean \cmd\secnumarabic@sw\ appears
+% in Section~\ref{sec:secnumarabic}.
+%
+% FIXME: model fleqn after amsfonts. I no longer understand why I said this.
+% \begin{macrocode}
+\DeclareOption{fleqn}{\input{fleqn.clo}}
+% \end{macrocode}
+%
+% \subsubsection{floats/endfloats}%
+% These options control, via the Boolean \cmd\floats@sw,
+% whether floats are to be migrated to the end of the document.
+% \begin{macrocode}
+\DeclareOption{floats}{\@booleantrue\floats@sw\@booleanfalse\floatp@sw}
+\DeclareOption{endfloats}{\@booleanfalse\floats@sw\@booleanfalse\floatp@sw}
+\DeclareOption{endfloats*}{\@booleanfalse\floats@sw\@booleantrue\floatp@sw}
+\appdef\class@inithook{%
+ \@ifxundefined\floats@sw{\@booleantrue\floats@sw}{}%
+ \@ifxundefined\floatp@sw{\@booleantrue\floatp@sw}{}%
+}%
+% \end{macrocode}
+%
+% \subsubsection{titlepage/notitlepage}%
+% These options control, via \cmd\titlepage@sw,
+% whether the title block is to be set on a separate page.
+% \begin{macro}{\titlepage@sw}
+% The flag \cmd\titlepage@sw\ signifies that a forced
+% page break is to follow the title page: the article
+% title appears on a page by itself.
+%
+% The Boolean \cmd\titlepage@sw\ is in an odd situation:
+% its value is set by one or more substyles, contingent
+% upon the value of another Boolean.
+% Therefore that code must be invoked at \cmd\AtBeginDocument\ time.
+% Therefore we must assign the default value at the very end
+% of \cmd\AtBeginDocument\ processing: we use \cmd\defaults@hook.
+% Luckily, this Boolean does not need to be queried at
+% \cmd\AtBeginDocument\ time, or we'd be in dire straights.
+% \begin{macrocode}
+\DeclareOption{titlepage}{\@booleantrue\titlepage@sw}
+\DeclareOption{notitlepage}{\@booleanfalse\titlepage@sw}
+\appdef\defaults@hook{%
+ \@ifxundefined\titlepage@sw{\@booleanfalse\titlepage@sw}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Substyle and Sub-substyle}%
+%
+% If the society has already been assigned,
+% notify user that \cmd\@society\ is being overridden.
+%
+% \begin{macrocode}
+\def\change@society#1{%
+ \def\@tempa{#1}%
+ \@ifxundefined\@society{}{%
+ \@ifx{\@tempa\@society}{}{%
+ \class@warn{Conflicting society \@tempa<>\@society.}%
+ }%
+ }%
+ \let\@society\@tempa
+}%
+% \end{macrocode}
+% Here are the class options relating to the APS
+% \begin{macrocode}
+\DeclareOption{aps}{\change@society{aps}\def\@journal{}}%
+\DeclareOption{pra}{\change@society{aps}\def\@journal{pra}}%
+\DeclareOption{prb}{\change@society{aps}\def\@journal{prb}}%
+\DeclareOption{prc}{\change@society{aps}\def\@journal{prc}}%
+\DeclareOption{prd}{\change@society{aps}\def\@journal{prd}}%
+\DeclareOption{pre}{\change@society{aps}\def\@journal{pre}}%
+\DeclareOption{prl}{\change@society{aps}\def\@journal{prl}}%
+\DeclareOption{prstab}{\change@society{aps}\def\@journal{prstab}}%
+\DeclareOption{rmp}{\change@society{aps}\def\@journal{rmp}}%
+% \end{macrocode}
+% Here are the class options relating to the Optical Society of America
+% \begin{macrocode}
+\DeclareOption{osa}{\change@society{osa}\def\@journal{}}%
+\DeclareOption{osameet}{\change@society{osa}\def\@journal{osameet}}%
+\DeclareOption{opex}{\change@society{osa}\def\@journal{opex}}%
+\DeclareOption{tops}{\change@society{osa}\def\@journal{tops}}%
+\DeclareOption{josa}{\change@society{osa}\def\@journal{josa}}%
+% \end{macrocode}
+%
+% NOTE: \file{revguide.tex} does not mention any \cmd\@journal\ options
+% besides \classoption{prb}.
+%
+% \begin{macro}{amsfonts}
+% The class option \classoption{amsfonts} has the
+% same effect as if the document preamble contained
+% a \cmd\usepackage\verb${amsfonts}$ statement.
+% \begin{macrocode}
+\DeclareOption{amsfonts}{%
+ \def\class@amsfonts{\RequirePackage{amsfonts}}%
+}%
+\DeclareOption{noamsfonts}{%
+ \let\class@amsfonts\@empty
+}%
+\AtEndOfClass{%
+ \@ifxundefined\class@amsfonts{}{\class@amsfonts}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{amssymb}
+% The class option \classoption{amssymb} has the
+% same effect as if the document preamble contained
+% a \cmd\usepackage\verb${amssymb}$ statement.
+% \begin{macrocode}
+\DeclareOption{amssymb}{%
+ \def\class@amssymb{\RequirePackage{amssymb}}%
+}%
+\DeclareOption{noamssymb}{%
+ \let\class@amssymb\@empty
+}%
+\AtEndOfClass{%
+ \@ifxundefined\class@amssymb{}{\class@amssymb}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{amsmath}
+% The class option \classoption{amsmath} has the
+% same effect as if the document preamble contained
+% a \cmd\usepackage\verb${amsmath}$ statement.
+%
+% We require version 1.2 (datestamped 1997/03/20) or later.
+% The \expandafter\cmd\csname ver@amsmath.sty\endcsname, will
+%
+% \LaTeX\ note:
+% Certain \LaTeX\ procedures have an arbitrary and pointless restriction that they may be used only within the preamble.
+% We get around this by preserving the procedures in private \cmd\csname s.
+%
+% FIXME note: it is difficult to ensure that an error summary will be printed on the console at the very end,
+% but \classname{ltxgrid} allows accomplishing this via an interrupt, put down at \cmd\AtEndDocument\ time.
+%
+% \begin{macrocode}
+\DeclareOption{amsmath}{%
+ \def\class@amsmath{\RequirePackage{amsmath}[\ver@amsmath@prefer]}%
+}%
+\DeclareOption{noamsmath}{%
+ \let\class@amsmath\@empty
+}%
+\AtEndOfClass{%
+ \preserve@LaTeX
+ \@ifxundefined\class@amsmath{}{\class@amsmath}%
+ \appdef\class@enddocumenthook{\test@amsmath@ver}%
+}%
+\appdef\preserve@LaTeX{%
+ \let\@ifl@aded@LaTeX\@ifl@aded
+ \let\@ifpackageloaded@LaTeX\@ifpackageloaded
+ \let\@pkgextension@LaTeX\@pkgextension
+ \let\@ifpackagelater@LaTeX\@ifpackagelater
+ \let\@ifl@ter@LaTeX\@ifl@ter
+ \let\@ifl@t@r@LaTeX\@ifl@t@r
+ \let\@parse@version@LaTeX\@parse@version
+}%
+\appdef\restore@LaTeX{%
+ \let\@ifl@aded\@ifl@aded@LaTeX
+ \let\@ifpackageloaded\@ifpackageloaded@LaTeX
+ \let\@pkgextension\@pkgextension@LaTeX
+ \let\@ifpackagelater\@ifpackagelater@LaTeX
+ \let\@ifl@ter\@ifl@ter@LaTeX
+ \let\@ifl@t@r\@ifl@t@r@LaTeX
+ \let\@parse@version\@parse@version@LaTeX
+}%
+\def\test@amsmath@ver{%
+ \begingroup
+ \restore@LaTeX
+ \@ifpackageloaded{amsmath}{%
+ \@ifpackagelater{amsmath}{\ver@amsmath@prefer}{}{%
+ \class@warn{%
+ You have loaded amsmath, version "\csname ver@amsmath.sty\endcsname",\MessageBreak
+ but this class requires version "\ver@amsmath@prefer", or later.\MessageBreak
+ Please update your LaTeX installation.
+ }%
+ }%
+ }{%
+ }%
+ \endgroup
+}%
+\def\ver@amsmath@prefer{2000/01/15 v2.05 AMS math features}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Presenting Authors and Their Affiliations}%
+% \changes{v4.0beta 2}{1999/06/20}
+% {These options are now mutually exclusive. But is this correct?}
+%
+% The \classoption{runinaddress} option is the only one that sets \cmd\runinaddress@sw\ to true.
+%
+% The \classoption{unsortedaddress} option is the only one that sets \cmd\@affils@sw\ to false.
+%
+% If we take the \classoption{groupedaddress} option as the default, then we can look upon
+% the \classoption{superscriptaddress} option as simply turning \cmd\groupauthors@sw\ to false.
+%
+% \classoption{groupedaddress}, the default, groups authors above a common address.
+% In order to assert the default and still provide for proper precedence
+% for document-supplied options, we carry out our action at \cmd\AtBeginDocument\ time,
+% and only if none of the related class options were invoked.
+% \begin{macrocode}
+\DeclareOption{groupedaddress}{\clo@groupedaddress}%
+\def\clo@groupedaddress{%
+ \@booleantrue\groupauthors@sw
+ \@booleantrue\@affils@sw
+ \@booleanfalse\runinaddress@sw
+}%
+\appdef\class@inithook{%
+ \@ifxundefined\groupauthors@sw{\clo@groupedaddress}{}%
+}%
+% \end{macrocode}
+%
+% \classoption{unsortedaddress} is similar to \classoption{groupedaddress},
+% but turns off \cmd\@affils@sw,
+% with the result that each address that is entered will be printed.
+% \begin{macrocode}
+\DeclareOption{unsortedaddress}{\clo@unsortedaddress}%
+\def\clo@unsortedaddress{%
+ \@booleantrue\groupauthors@sw
+ \@booleanfalse\@affils@sw
+ \@booleanfalse\runinaddress@sw
+}%
+% \end{macrocode}
+%
+% \classoption{runinaddress} is similar to \classoption{groupedaddress},
+% with the addition of the Boolean \cmd\runinaddress@sw,
+% which causes the authors associated with a particular address group
+% to be formatted in a paragraph instead of on separate lines.
+% \begin{macrocode}
+\DeclareOption{runinaddress}{\clo@runinaddress}%
+\def\clo@runinaddress{%
+ \@booleantrue\groupauthors@sw
+ \@booleantrue\@affils@sw
+ \@booleantrue\runinaddress@sw
+}%
+% \end{macrocode}
+%
+% \classoption{superscriptaddress} presents author affiliations
+% as superscripts. Authors with like affiliations share the same
+% superscript.
+%
+% FIXME: if \cmd\groupauthors@sw\ is false, would not \cmd\@affils@sw\ be a don't care?
+% \begin{macrocode}
+\DeclareOption{superscriptaddress}{\clo@superscriptaddress}%
+\def\clo@superscriptaddress{%
+ \@booleanfalse\groupauthors@sw
+ \@booleantrue\@affils@sw
+ \@booleanfalse\runinaddress@sw
+}%
+% \end{macrocode}
+%
+%
+% \subsubsection{Typeset by \revtex}%
+%
+% The class option \classoption{byrevtex} signifies that you want the
+% ``Typeset by \revtex'' byline to appear on your formatted output.
+% By default, no such byline appears.
+% \begin{macrocode}
+\DeclareOption{byrevtex}{\@booleantrue\byrevtex@sw}%
+% \end{macrocode}
+%
+%
+% \subsection{Attempt to fix float placement failure}%
+%
+% \revtex\ uses the \classname{ltxgrid} package, which provides the ability to attempt repairs when
+% \LaTeX's float placement mechanism is about to fail, but that facility is turned off by default.
+% Users should invoke the \classoption{floatfix} document class option to enable this \LaTeX\ extension.
+% If not, a helpful message is printed in the log, indicating how to work around the difficulty.
+% \begin{macrocode}
+\DeclareOption{floatfix}{\@booleantrue\force@deferlist@sw}%
+\DeclareOption{nofloatfix}{\@booleanfalse\force@deferlist@sw}%
+\appdef\class@inithook{%
+ \@ifxundefined\force@deferlist@sw{\@booleanfalse\force@deferlist@sw}{}%
+}%
+% \end{macrocode}
+%
+% \begin{macro}{\@fltovf}
+% \begin{macro}{\@fltstk}
+% The \LaTeX\ kernel error message \cmd\@fltovf\ may now be a bit more helpful to the user;
+% likewise for the \cmd\@fltstk\ message of \classname{ltxgrid}.
+% \begin{macrocode}
+\gdef\@fltovf{%
+ \@latex@error{%
+ Too many unprocessed floats%
+ \force@deferlist@sw{}{; try class option [floatfix]}%
+ }\@ehb
+}%
+\def\@fltstk{%
+ \@latex@warning{%
+ A float is stuck (cannot be placed)%
+ \force@deferlist@sw{}{; try class option [floatfix]}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ltxgrid@info@sw}
+% \begin{macro}{\outputdebug@sw}
+% The two options \classoption{ltxgridinfo} and \classoption{outputdebug} turn on informative diagnostics within the
+% package \classname{ltxgrid}. Only people who really want to see this output will select these class options.
+% Consult documentation for the \classname{ltxgrid} package to see what output the related switches enable.
+% \begin{macrocode}
+\DeclareOption{ltxgridinfo}{\@booleantrue\ltxgrid@info@sw}%
+\DeclareOption{outputdebug}{\@booleantrue\outputdebug@sw}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Option to relax page height}%
+%
+% The \classname{ltxgrid} package can set text pages to their natural height or force them to the full
+% text height; the latter is the default.
+% If setting the pages with a variable length,
+% the running foot will move up or down with the natural length of the text column.
+% While I recommend against doing so, this option will turn that switch to the latter setting.
+% \begin{macrocode}
+\DeclareOption{raggedfooter}{\@booleanfalse\textheight@sw}%
+\DeclareOption{noraggedfooter}{\@booleantrue\textheight@sw}%
+% \end{macrocode}
+%
+% \subsection{Selecting procedure for processing abstract}%
+%
+% There are two different procedures for processing an abstract; the options
+% \classoption{newabstract} and \classoption{oldabstract} determine which one the user
+% prefers. At present, the default is to use the old, but this may change.
+% \begin{macrocode}
+\DeclareOption{newabstract}{\@booleanfalse\oldabstract@sw}%
+\DeclareOption{oldabstract}{\@booleantrue \oldabstract@sw}%
+\appdef\class@inithook{%
+ \@ifxundefined\oldabstract@sw{\@booleanfalse\oldabstract@sw}{}%
+ \oldabstract@sw{%
+ \let@environment{abstract}{abstract-old}%
+ }{}%
+}%
+% \end{macrocode}
+%
+%
+%
+%
+% \subsection{Default Option}%
+%
+% The default handling for a document class option is to
+% treat it as the name of a society and
+% hunt for a corresponding \file{.rtx} file to read in.
+% This behavior is much like the \LaTeX2.09 handling, where
+% one looked for a \file{.sty} file, except that
+% in this case, we must catch the case where multiple
+% unknown options are declared.
+%
+% \begin{macrocode}
+\DeclareOption*{%
+ \IfFileExists{\CurrentOption\substyle@ext}{%
+ \expandafter\change@society\expandafter{\CurrentOption}%
+ }{%
+ \OptionNotUsed
+ }%
+}%
+\def\substyle@ext{.rtx}%
+\AtEndOfClass{%
+ \@ifxundefined\@society{%
+ \class@warn{No Society specified, using generic APS style}%
+ \def\@society{aps}\def\@journal{}%
+ }{}%
+ \expandafter\input\expandafter{\@society\substyle@ext}%
+}%
+% \end{macrocode}
+%
+% \subsection{Class-Asserted Options}%
+% \changes{v4.0beta 2}{1999/06/20}
+% {%
+% Removed invocation of nonexistent class option \protect\classoption{groupauthors}
+% and all other class options that should only be invoked by the document.
+% (Otherwise precedence of class options does not work.)
+% }
+% Here we establish the default document class options.
+% Those of the document itself will override these.
+% \begin{macrocode}
+\ExecuteOptions{10pt}
+% \end{macrocode}
+%
+% \subsection{Execute Options}%
+% The document class options are processed in the order
+% they are declared in this document class file.
+%
+% Precedence is established in the following way:
+%
+% First, the single \file{.rtx} file is read in.
+% It may set values to any of the Booleans that represent class options,
+% and it may elect to do so only if that Boolean is undefined, signifying
+% that its corresponding document class options were absent from
+% the document's option list.
+% In this way correct precedence of class options is maintained.
+%
+% Second, the type size option is acted upon. Type size code
+% should not require altering the values of any of the Booleans carrying
+% class options.
+%
+% Next, at \cmd\AtEndOfClass\ time, certain packages are read in.
+%
+% Finally, at \cmd\AtBeginDocument\ time, the state of the Booleans determines
+% how the formatting will go.
+%
+% \begin{macrocode}
+\ProcessOptions\relax
+% \end{macrocode}
+%
+%
+% \section{Procedures Dependent Upon Options}
+%
+% Here we introduce \classname{classes.dtx} definitions for
+% the page styles that people will expect to be able to use.
+% \begin{macro}{\ps@headings}
+% \begin{macro}{\ps@myheadings}
+% \begin{macrocode}
+ \def\ps@headings{%
+ \let\@oddfoot\@empty\let\@evenfoot\@empty
+ \def\@evenhead{\thepage\hfil\slshape\leftmark}%
+ \def\@oddhead{{\slshape\rightmark}\hfil\thepage}%
+ \let\@mkboth\markboth
+ \def\sectionmark##1{%
+ \markboth {\MakeUppercase{%
+ \ifnum \c@secnumdepth >\z@
+ \thesection\quad
+ \fi
+ ##1}}{}}%
+ \def\subsectionmark##1{%
+ \markright {%
+ \ifnum \c@secnumdepth >\@ne
+ \thesubsection\quad
+ \fi
+ ##1}}}%
+\def\ps@myheadings{%
+ \let\@oddfoot\@empty\let\@evenfoot\@empty
+ \def\@evenhead{\thepage\hfil\slshape\leftmark}%
+ \def\@oddhead{{\slshape\rightmark}\hfil\thepage}%
+ \let\@mkboth\@gobbletwo
+ \let\sectionmark\@gobble
+ \let\subsectionmark\@gobble
+ }%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ps@article@twoside}
+% \begin{macro}{\ps@article@oneside}
+% \begin{macro}{\ps@preprint}
+% \changes{v4.e}{1998/01/31}
+% {Move after process options, so the following test works}
+% \changes{v4.0beta 2}{1999/06/20}
+% {Defer decision until \cs{AtBeginDocument} time}
+% \changes{v4.0beta 3}{1999/11/13}
+% {Insert procedure \cs{checkindate}}
+% \changes{v4.0rc1}{2001/06/17}
+% {Running headers always as if two-sided}
+% \begin{macrocode}
+\def\ps@article{%
+ \@provide\@evenhead{\let\\\heading@cr\thepage\quad\checkindate\hfil{\leftmark}}%
+ \@provide\@oddhead{\let\\\heading@cr{\rightmark}\hfil\checkindate\quad\thepage}%
+ \@provide\@oddfoot{}%
+ \@provide\@evenfoot{}%
+ \let\@mkboth\markboth
+ \let\sectionmark\@gobble
+ \let\subsectionmark\@gobble
+}%
+\def\ps@article@final{%
+ \@provide\@evenhead{\let\\\heading@cr\thepage\quad\checkindate\hfil{\leftmark}}%
+ \@provide\@oddhead{\let\\\heading@cr{\rightmark}\hfil\checkindate\quad\thepage}%
+ \@provide\@oddfoot{}%
+ \@provide\@evenfoot{}%
+ \let\@mkboth\markboth
+ \def\sectionmark##1{%
+ \markboth{%
+ \MakeTextUppercase{%
+ \@ifnum{\c@secnumdepth >\z@}{\thesection\hskip 1em\relax}{}%
+ ##1%
+ }%
+ }{}%
+ }%
+ \def\subsectionmark##1{%
+ \markright {%
+ \@ifnum{\c@secnumdepth >\@ne}{\thesubsection\hskip 1em\relax}{}%
+ ##1%
+ }%
+ }%
+}%
+\appdef\class@inithook{%
+%\twoside@sw{%
+%}{%
+%}%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\heading@cr{\unskip\space\ignorespaces}%
+% \end{macrocode}
+%
+% \changes{v4.0beta 3}{1999/11/13}
+% {Do not put by REVTeX in every page foot}
+% \changes{v4.0beta 3}{1999/11/13}
+% {Insert procedure \cs{checkindate}}
+% \begin{macrocode}
+\def\ps@preprint{%
+ \@provide\@oddfoot{\hfil\thepage\quad\checkindate\hfil}%
+ \@provide\@evenfoot{\hfil\thepage\quad\checkindate\hfil}%
+ \@provide\@oddhead{}%
+ \@provide\@evenhead{}%
+ \let\@mkboth\@gobbletwo
+ \let\sectionmark\@gobble
+ \let\subsectionmark\@gobble
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\let\@oddhead\@undefined
+\let\@evenhead\@undefined
+\let\@oddfoot\@undefined
+\let\@evenfoot\@undefined
+\AtEndOfClass{%
+ \appdef\class@documenthook{%
+ \@provide\@oddhead{}%
+ \@provide\@evenhead{}%
+ \@provide\@oddfoot{}%
+ \@provide\@evenfoot{}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\lastpage@putlabel}
+% Support the default meaning of \cmd\@endpage.
+% \changes{v4.d}{1998/01/31}
+% {Move after process options, so \cs{clearpage} not in scope of
+% twocolumn}
+% Name of this macro (and the \cmd\label\ key) taken from
+% \url{CTAN:/macros/latex/contrib/other/lastpage}%
+% with code optimised slightly.
+% \begin{macrocode}
+\def\lastpage@putlabel{%
+ \if@filesw
+ \begingroup
+ \advance\c@page\m@ne
+ \immediate\write\@auxout{\string\newlabel{LastPage}{{}{\thepage}}}%
+ \endgroup
+ \fi
+}%
+% \end{macrocode}
+% Install a late hook into \cmd\class@enddocumenthook\ that
+% labels the last page of the document.
+% This is done just before the \file{.aux} file
+% is closed, and does not require a \cmd\shipout, because it writes
+% directly to the \file{.aux} file.
+% Note that we invoke \cmd\clearpage: this means that no more typesetting
+% should be done past this point.
+% CHECKME: are there any more things installed via
+% \cmd\AtEndOfClass\allowbreak\cmd\class@enddocumenthook?
+% \begin{macrocode}
+\AtEndOfClass{%
+ \appdef\clear@document{%
+ \clearpage
+ \lastpage@putlabel
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \section{Required Packages}
+% \url{CTAN:macros/latex/contrib/other/misc/url.sty}%
+% \begin{macrocode}
+\RequirePackage{url}%
+% \end{macrocode}
+%
+% \section{Incompatible Packages}
+% Known to be incompatible are \classname{multicol} and \classname{cite}.
+% The former is incompatible with \classname{ltxgrid}, which replaces it.
+% The latter is incompatible with \classname{natbib}, which replaces its functionality.
+% \begin{macrocode}
+\appdef\class@inithook{%
+ \incompatible@package{cite}%
+ \incompatible@package{multicol}%
+}%
+% \end{macrocode}
+%
+% \section{Society- and Journal-Specific Code}
+%
+% \begin{macro}{\@journal}
+% Journal test helper, used as
+% \begin{verbatim}
+%\@ifx{\@journal\journal@pra}{%
+% <journal-specific setup>
+%\fi
+% \end{verbatim}
+% Journal code might like to further specify (if as yet undefined) or distinguish on
+% the following Booleans.
+%
+% Note: the journal substyle code should only alter the value of one of these Booleans if
+% the Boolean is \cmd\undefined. This convention is what makes the document's
+% options take precedence over the values set by the journal.
+%
+% FIXME: make this table an exhaustive listing of all the parameters set by
+% the class options.
+%
+% \begin{tabular}{ll}
+% \cmd\@pointsize &(10|11|12), depending on the type size\\
+% \cmd\footinbib@sw &true if footnotes are to be formatted in the bibliography\\
+% \cmd\preprintsty@sw &true for preprint and hyperpreprint\\
+% \cmd\eqsecnum@sw &true means that equations are numbered within sections\\
+% \cmd\secnumarabic@sw &true means the sections are to be numbered arabic\\
+% \cmd\groupauthors@sw &true means authors listed separately for each address\\
+% \cmd\preprint@sw &true means to produce the preprint numbers as part of the title block\\
+% \cmd\showPACS@sw &true means to produce the PACS as part of the title block\\
+% \cmd\showKEYS@sw &true means to produce the keywords as part of the title block\\
+% \cmd\@affils@sw &true means each affiliation is printed, for each author\\
+% \cmd\runinaddress@sw &true means author addresses are printed run-in\\
+% \cmd\draft@sw &true implies that PACS will be printed\\
+% \cmd\tightenlines@sw &true if preprint single spaced\\
+% \cmd\lengthcheck@sw &true if length checking is in effect\\
+% \cmd\byrevtex@sw &true means to announce ``typeset by \revtex''\\
+% \cmd\titlepage@sw &true for title is to be set on a separate page\\
+% \cmd\twocolumn@sw &true if two-column page grid\\
+% \cmd\twocolumn@sw &true if we are to automatically balance the columns of the last page\\
+% \cmd\twoside@sw &true means to format pages for duplex printing\\
+% \cmd\floats@sw &false means floats are migrated to end of document\\
+% \cmd\floatp@sw &true means endfloats are set one to a page\\
+% \cmd\class@amsfonts &if \cmd\@empty, means that \classname{amsfonts} will \emph{not} be loaded\\
+% \cmd\class@amssymb &if \cmd\@empty, means that \classname{amssymb} will \emph{not} be loaded\\
+% \cmd\frontmatter@footnote &if \cmd\undefined, means that the default (\cmd\footnote) will be used\\
+% \cmd\place@bibnumber &if \cmd\undefined, means that the default (inline) will be used\\
+% \end{tabular}
+%
+% Note: if \cmd\twocolumn@sw\ and \cmd\preprintsty@sw\ are both false,
+% then `galley' style is in effect. The \classoption{galley} option invokes
+% \classoption{onecolumn}, but does not affect the \cmd\preprintsty@sw.
+%
+% Note: \cmd\paperwidth\ and \cmd\paperheight\ are not integrated into this scheme,
+% and should be selected by the document alone.
+% \end{macro}
+%
+%
+% \section{Front Matter}
+%
+% \subsection{The title command}%
+%
+% \begin{macro}{\title}
+% \begin{macro}{\do@title}
+% The author uses \cmd\title\ to specify the title. As in the AMS
+% classes, \cmd\title\ has an optional argument specifying a short form
+% for use in running heads.
+%
+% Once the \cmd\title\ is given, you can specify any combination of
+% \cmd\thanks, \cmd\email, \cmd\homepage, and \cmd\altaffiliation\ commands,
+% applying to the title of the document.
+% \begin{macrocode}
+\renewcommand\title[2][]{%
+ \def\@title{#2}%
+ \def\@shorttitle{#1}%
+ \let\@AF@join\@title@join
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@title}
+% \begin{macro}{\@shorttitle}
+% The arguments to \cmd\title\ are saved in these internal
+% macros, which are set up to produce a warning if \cmd\title\ has not
+% been used before \cmd\maketitle.
+% \begin{macrocode}
+\appdef\class@inithook{%
+ \def\@title{\class@warn{No title}}%
+ \let\@shorttitle\@empty
+ \let\@title@aux\@title@aux@cleared
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@title@join}
+% \begin{macro}{\@title@join@}
+% \begin{macro}{\@title@aux@cleared}
+%
+% \begin{macrocode}
+\def\@title@join{\expandafter\@title@join@\@title@aux}%
+\def\@title@join@#1#2{%
+ \def\@title@aux{{\@join{\@separator}{#1}{#2}}}%
+}%
+\def\@title@aux@cleared{{}}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{The author, affiliation, and related commands}%
+%
+% \begin{macro}{\c@affil}
+% A counter to store the affiliation numbers used for the
+% superscript marks. This command defines \cmd\theaffil.
+% \begin{macrocode}
+\newcounter{affil}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Commands for author or collaboration}%
+%
+% \begin{macro}{\author}
+% Each author is given in a \emph{separate} \cmd\author\ command.
+% This is similar to the AMS classes, but the AMS also try to support
+% the \classname{article} class's \cmd\and\ command for putting multiple
+% authors in one \cmd\author\ command.
+% \revtex, however, does not support the \cmd\and\ command.
+%
+% When the \cmd\author\ command is encountered, the previous author, author group, affiliation, and affiliation group are at an end.
+% This procedure moves the previous author to the author group (\cmd\move@AU),
+% moves the previous affiliation to the affiliation group (\cmd\move@AF),
+% and terminates the previous author/affiliation group (\cmd\move@AUAF) as the case may require.
+% \begin{macrocode}
+\renewcommand\author{% implicit #1
+ \@author@def{}% implicit #2
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\collaboration}
+% \begin{macro}{\@collaboration@}
+% Specify the collaboration (given after a group of authors).
+%
+% This procedure does exactly what \cmd\author\ does, and sets
+% a flag signifying that the \cmd\collaboration\ command was given.
+%
+% Note: earlier versions attempted to ignore the collaboration command if it was considered inappropriate.
+% We must not do this, however, because it throws the state machine out of kilter.
+% \begin{macrocode}
+\def\collaboration{% implicit #1
+ \groupauthors@sw{%
+ \class@warn{%
+ \string\collaboration\space is only allowed with superscriptaddress option.
+ Use superscriptaddress in place of groupedaddress, unsortedaddress, or runinaddress%
+ }%
+ }{}%
+ \@author@def{\@booleantrue\collaboration@sw}% implicit #2
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@author@init}
+% \begin{macro}{\@author@cleared}
+% \begin{macro}{\@authorclear@sw}
+% \begin{macro}{\@author@def}
+% \begin{macro}{\@author@join@}
+% \begin{macro}{\@author@join}
+% \changes{v4.0beta 2}{1999/06/20}
+% {Change handling of \cs{@author} to prevent parsing problems.
+% (Helps in error recovery when syntax errors exist)}
+%
+% Here are all the access procedures for the author data structure.
+%
+% We define a flag value for \cmd\@author (private),
+% a procedure for setting \cmd\@author\ to the flag value (\cmd\@author@init),
+% a Boolean to test against the flag value (\cmd\@authorclear@sw),
+% and a procedure to add new ancillary data to the author.
+% \begin{macrocode}
+\def\@author@cleared{{}{}}%
+\def\@author@init{%
+ \let\@author\@author@cleared
+}%
+\def\@authorclear@sw{\@ifx{\@author\@author@cleared}}%
+\appdef\class@inithook{%
+ \@author@init
+}%
+\def\@author@def#1#2{%
+ \move@AU\move@AF\move@AUAF
+ \let\@AF@join\@author@join
+ #1%
+ \def\@author{{#2}{}}%
+}%
+\def\@author@join@#1#2#3{%
+ \def\@author{{#1}{\@join{\@separator}{#2}{#3}}}%
+}%
+\def\@author@join{\expandafter\@author@join@\@author}%
+\def\@author@gobble#1#2{}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\move@AU}
+% Move the most recent author to the list of current authors.
+% If we recently did a \cmd\@author@init, this is a no-op.
+% If we recently encountered a \cmd\collaboration,
+% we preface the author with the \cmd\CO@opr \ intercollated operator,
+% otherwise we apply \cmd\AU@opr.
+% \begin{macrocode}
+\def\move@AU{%
+ \@authorclear@sw{}{%
+ \collaboration@sw{%
+ \expandafter\appdef
+ \expandafter\AU@grp
+ \expandafter{%
+ \expandafter \CO@opr
+ \@author
+ }%
+ }{%
+ \expandafter\appdef
+ \expandafter\AU@grp
+ \expandafter{%
+ \expandafter \AU@opr
+ \@author
+ }%
+ }%
+ }%
+ \@author@init
+ \@booleanfalse\collaboration@sw
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@author@finish}
+% We define a procedure to terminate author/affiliation parsing just before the title block is formatted.
+% We detect the case where an author group is not followed by an affiliation group.
+% \changes{v4.0beta 6}{2001/02/13}
+% {Actually append AU@grp to @AAClist.}
+%
+% We first finish off any author- or affiliation groups in progress.
+% Next, we detect the case where there is an author group in progress, but no affiliation group.
+% If so, we emit a diagnositic message and act as if a \cmd\noaffiliation\ command had been given.
+% In any case, we finish off any author/affiliation pair that may remain.
+% Formatting of the title block may now proceed.
+% \begin{macrocode}
+\def\@author@finish{%
+ \move@AU\move@AF
+ \@ifx{\AU@grp\@empty}{}{%
+ \@ifx{\AF@grp\@empty}{%
+ \begingroup
+ \let\href\@secondoftwo
+ \let\AU@opr\@firstoftwo
+ \let\CO@opr\@firstoftwo
+ \class@warn{Assuming \string\noaffiliation\space for \AU@grp}%
+ \endgroup
+ \begingroup\@affiliation{\blankaffiliation}%\endgroup in \@affiliation
+ \move@AF
+%
+% \appdef \@AAC@list{\AF@opr}%
+% \appdef@eval\@AAC@list{\AF@grp}%
+% \appdef@e \@AAC@list{\AU@grp}%
+% \let\AU@grp\@empty
+% \let\AF@grp\@empty
+ }{}%
+ }%
+ \move@AUAF
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@join}
+% The procedure \cmd\@join\ inserts
+% a separator between two tokens, or, if the first token is
+% nil, elides both that token and the separator.
+% \begin{macrocode}
+\def\@join#1#2#3{%
+ \@if@empty{#2}{#3}{#2#1#3}%
+}%
+\def\@separator{;\space}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\surname}
+% \begin{macro}{\firstname}
+% No-op to allow better post-processing of the file.
+% \begin{macrocode}
+\let\surname\@firstofone
+\let\firstname\@firstofone
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\AU@grp}
+% The control sequence name \cmd\AU@grp\ accretes
+% consecutive \cmd\author\ entries (with \cmd\AU@opr\ as the intercollated operator)
+% and \cmd\collaboration\ entries (with \cmd\CO@opr\ as the intercollated operator).
+% Ultimately, its contents are appended to the author/affiliation list \cmd\@AAC@list.
+% It must be initialized to \cmd\@empty.
+%
+% Note on \cmd\AU@opr\ and \cmd\CO@opr: it is essential to treat these two operators to the greatest extent possible on an equal footing.
+% Therefore we invariably assign values to the pair of them within the same procedure.
+%
+% \begin{macrocode}
+\let\AU@grp\@empty
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\and}
+% The original \LaTeX\ idea of using one \cmd\author\ command to capture
+% all authors and their address just doesn't work with multiple authors
+% possibly sharing addresses, so in this class disable \cmd\and.
+% \begin{macrocode}
+\renewcommand\and{\class@err{\protect\and\space is not supported}}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection{Commands for affiliation}%
+%
+% \begin{macro}{\affiliation}
+% After each group of authors with the same address,
+% give that address in \cmd\affiliation.
+% If later in the list you have an author
+% with the address of an earlier author, repeat the \cmd\affiliation\
+% command: the system will detect the similarity and (if using the \classoption{superscriptaddress} option) only print the
+% affiliation once, reusing the superscript marker.
+%
+% When the \cmd\affiliation\ command is encountered, the current author and author group (if any) are at an end.
+% Also, the current affiliation is at an end.
+%
+% FIXME: changes to catcode required elsewhere now?
+% \begin{macrocode}
+\def\cat@comma@active{\catcode`\,\active}%
+{\cat@comma@active\gdef,{\active@comma}}%
+\def\active@comma{,\penalty-300\relax}%
+\newcommand\affiliation{%
+ \move@AU\move@AF
+ \begingroup
+ \cat@comma@active
+ \@affiliation
+}%
+\def\@affiliation#1{%
+ \endgroup
+ \let\@AF@join\@affil@join
+ \@affil@def{#1}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\noaffiliation}
+% User-level command signifying that the current group of authors has \emph{no} affiliation.
+%
+% This is implemented by acting as if the \cmd\affiliation\ command has been given, and using a
+% flag value of \cmd\blankaffiliation, which \cmd\@affil@group\ can recognize as a no-op.
+% \begin{macrocode}
+\newcommand\noaffiliation{%
+ \move@AU\move@AF
+% \edef\AF@grp{\AF@grp}%
+ \begingroup\@affiliation{\blankaffiliation}%
+% \move@AF
+}%
+\def\blankaffiliation{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@affil@cleared}
+% \begin{macro}{\@affil@init}
+% \begin{macro}{\@affilclear@sw}
+% \begin{macro}{\@affil@def}
+% \begin{macro}{\@affil@join@}
+% \begin{macro}{\@affil@join}
+%
+% Here are all the access procedures for the affiliation data structure.
+% Note the similarity to those of the \cmd\@author\ data structure.
+%
+% We define a flag value for \cmd\@affil\ (private),
+% a procedure for setting \cmd\@affil\ to the flag value (\cmd\@affil@init),
+% a Boolean to test against the flag value (\cmd\@affilclear@sw),
+% and a procedure to add new ancillary data to the affiliation.
+% \begin{macrocode}
+\def\@affil@cleared{{}{}}%
+\def\@affil@init{%
+ \let\@affil\@affil@cleared
+}%
+\def\@affilclear@sw{\@ifx{\@affil\@affil@cleared}}%
+\appdef\class@inithook{%
+ \@affil@init
+}%
+\def\@affil@def#1{\def\@affil{{#1}{}}}%
+\def\@affil@join@#1#2#3{%
+ \def\@affil{{#1}{\@join{\@separator}{#2}{#3}}}%
+}%
+\def\@affil@join{\expandafter\@affil@join@\@affil}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\move@AF}
+% Move the most recent affiliation to the affiliation group.
+% If we recently did a \cmd\@affil@init, this is a no-op.
+% \begin{macrocode}
+\def\move@AF{%
+ \@affilclear@sw{}{%
+% \end{macrocode}
+% Set the \cmd\temp@sw\ to false, then execute the affiliation list (\cmd\@AFF@list)
+% with the intercollated operator set to \cmd\@affil@match\
+% and with \cmd\@tempa\ holding the first component of \cmd\@affil, the current affiliation, which is to be matched.
+% If the current affiliation has been seen before, \cmd\temp@sw\ will be set to true,
+% \cmd\@tempc\ will be set to the existing affiliation number,
+% and \cmd\@tempd\ will be set to the affiliation's ancillary data.
+% The Boolean \cmd\@affils@sw\ being false prevents this test from ever returning a positive result.
+%
+% This procedure uses \cmd\@tempa\ and sets \cmd\@tempc, \cmd\@tempd, and \cmd\temp@sw.
+% \begin{macrocode}
+ \@booleanfalse\temp@sw
+ \let\@tempd\@empty
+ \@affils@sw{%
+ \expandafter\@firstoftwodef\expandafter\@tempa\@affil
+ \def\AFF@opr{\@affil@match\@tempa}%
+ \@AFF@list
+ }{}\temp@sw
+% \end{macrocode}
+% True clause: This affiliation has been seen before.
+% If ancillary data for the affiliation have been given but are not identical to those seen before, give a warning.
+% \begin{macrocode}
+ {%
+ \expandafter\@secondoftwodef\expandafter\@tempb\@affil
+ \@ifx{\@tempb\@empty}{}{%
+ \@ifx{\@tempb\@tempd}{}{%
+ \class@warn{%
+ Ancillary information for \@tempa\space must not be different!
+ Please put it on the first instance%
+ }%
+ }%
+ }%
+ \appdef@eval\AF@grp\@tempc
+ }%
+% \end{macrocode}
+% False clause: This is a new address:
+% increment the counter to get a unique ID for the new affiliation
+% and append the new number, address, and footnote to the list \cmd\@AFF@list.
+% \begin{macrocode}
+ {%
+ \@if@empty{\expandafter\@firstoftwo\@affil}{%
+ \edef\@tempc{\z@}%
+ }{%
+ \stepcounter{affil}%
+ \edef\@tempc{\theaffil}%
+ }%
+ \appdef \@AFF@list{\AFF@opr}%
+ \appdef@eval\@AFF@list\@tempc
+ \appdef@e \@AFF@list{\@affil}%
+ \appdef@eval\AF@grp\@tempc
+ }%
+% \end{macrocode}
+% Append the ID of the affiliation to the affiliation group of the current author group.
+% \begin{macrocode}
+ \@affil@init
+ }%
+}%
+\def\@firstoftwodef#1#2#3{%
+ \def#1{#2}%
+}%
+\def\@secondoftwodef#1#2#3{%
+ \def#1{#3}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\move@AUAF}
+% \changes{v4.h}{1998/06/25}
+% {Changes to support groups of affiliations}
+% Append \cmd\AF@grp\ and \cmd\AU@grp\ to \cmd\@AAC@list\ %
+% and merge any new \cmd\AF@grp\ to \cmd\@AFG@list.
+% \begin{macrocode}
+\def\move@AUAF{%
+% \end{macrocode}
+% Entire procedure is predicated on something non-trivial to move.
+%
+% If both author and affiliation are nil, bail out.
+%
+% No, try that again:
+%
+% If we have seen any affiliations, then it is time to move the current
+% affiliation group and author group to \cmd\@AAC@list.
+% If not, we are picking up authors into an author group, and we
+% should bail out.
+% \begin{macrocode}
+%\@ifx{\AU@grp\@empty}{\@ifx{\AF@grp\@empty}{\true@sw}{\false@sw}}{\false@sw}%
+ \@ifx{\AF@grp\@empty}%
+ {}{%
+% \end{macrocode}
+% First, append current affiliation group (expansion of \cmd\AF@grp)
+% to the author/affiliation list (\cmd\@AAC@list),
+% using \cmd\AF@opr\ as the intercollated operator;
+% also append the current authors (\cmd\AU@grp).
+% \begin{macrocode}
+ \appdef \@AAC@list{\AF@opr}%
+ \appdef@eval\@AAC@list{\AF@grp}%
+ \appdef@e \@AAC@list{\AU@grp}%
+% \end{macrocode}
+% Next, append the current affiliation group to \cmd\@AFG@list,
+% (if it is not already there)
+% using \cmd\AFS@opr\ as the intercollated operator.
+%
+% Note that \cmd\@AFG@list\ is a list of \emph{unique} affiliation groups.
+% \begin{macrocode}
+ \@ifx{\@empty\AU@grp}{}{%
+ \@ifx{\@empty\AF@grp}{}{%
+ \@booleanfalse\temp@sw
+ \def\AFS@opr{\x@match\AF@grp}%
+ \@AFG@list
+ \temp@sw{}{%
+ \appdef \@AFG@list{\AFS@opr}%
+ \appdef@eval\@AFG@list{\AF@grp}%
+ }%
+ }%
+ }%
+% \end{macrocode}
+% Finally, null out the macros holding the author group and affiliation group, respectively.
+% \begin{macrocode}
+ \let\AU@grp\@empty
+ \let\AF@grp\@empty
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@AAC@list}
+% The \cmd\@AAC@list\ macro accretes
+% authors (using \cmd\AU@opr\ as the intercollated operator),
+% collaborations (using \cmd\CO@opr\ as the intercollated operator),
+% and
+% affiliations (using \cmd\AF@opr\ as the intercollated operator).
+% \begin{macrocode}
+\appdef\class@inithook{%
+ \let\@AAC@list\@empty
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@AFG@list}
+% The macro \cmd\@AFG@list\ accretes \cmd\AF@grp,
+% with \cmd\AFS@opr\ as the intercollated operator.
+%
+% This token list is employed when and only when \classoption{groupedaddress} is in effect.
+%
+% It must be empty at the beginning of the document.
+% \begin{macrocode}
+\appdef\class@inithook{%
+ \let\@AFG@list\@empty
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@AFF@list}
+% The macro \cmd\@AFF@list\ accretes the list of affiliations
+% with \cmd\AFF@opr\ as the intercollated operator.
+% It must be empty at the beginning of the document.
+%
+% Each \cmd\affiliation\ command in the document contributes
+% to this list, as long as the argument of that instance of the command
+% is ``new''.
+%
+% Each entry in this list consists of the \cmd\AFF@opr\ intercollated operator
+% followed by three brace-delimited tokens, representing, in order:
+% \begin{enumerate}
+% \item
+% the affiliation's unique ID, a number increasing monotonically for
+% each new entry,
+% \item
+% the optional argument of the \cmd\affiliation\ command,
+% the footnote to the affiliation, and
+% \item
+% the text of the affiliation.
+% \end{enumerate}
+%
+% At various junctures in the code, the control sequence name
+% \cmd\AFF@opr\ assumes the meaning of
+% \cmd\@affil@footnote\ (FIXME: never used),
+% \cmd\@affil@group, \cmd\affil@script,
+% or is defined to expand to \cmd\@affil@match\cmd\@tempa.
+% and the list \cmd\@AFF@list\ is expanded.
+% \begin{macrocode}
+\appdef\class@inithook{%
+ \let\@AFF@list\@empty
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\AF@grp}
+% The macro \cmd\AF@grp\ accretes affiliation IDs into an affiliation group.
+% It must be empty at the beginning of the document.
+% \begin{macrocode}
+\let\AF@grp\@empty
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@affil@match}
+% The definition for the \cmd\AFF@opr, the intercollated operator for \cmd\@AFF@list,
+% when adding a new affiliation: seeks a match with any earlier affiliation.
+% When the affiliation list is executed, this procedure tests each entry against
+% the `new' affiliation (which has been stored in \cmd\@tempa).
+%
+% Uses \cmd\temp@sw, \cmd\@tempc, and \cmd\@tempd\ to communicate back:
+% if it returns \cmd\temp@sw\ true, a match was found,
+% then \cmd\@tempc\ will be the footnote number of the matching entry
+% and \cmd\@tempd\ will be the auxiliary information of the matching entry.
+% \begin{macrocode}
+\def\@affil@match#1#2#3#4{%
+ \temp@sw{}{%
+ \def\@tempifx{#3}%
+ \@ifx{\@tempifx#1}{%
+ \@booleantrue\temp@sw
+ \def\@tempc{#2}%
+ \def\@tempd{#4}%
+ }{%
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@tempaffil@script}
+% Give a superscript marker to the address,
+% and junk the text argument (|#2|).
+% \begin{macrocode}
+%\def\@tempaffil@script#1#2{%
+% ,\,#1%
+%}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@tempaffil@group}
+%
+% Execute if we are grouping authors above `main addresses' (\classoption{groupedaddress}).
+% Put temp address in a footnote, with explanatory text.
+% Note: this procedure uses \cmd\@tempb\ and \cmd\@tempc\
+% to communicate to \cmd\AFF@opr.
+% \begin{macrocode}
+%\def\@tempaffil@group#1#2{%
+% \def\@tempc{#1}%
+% \def\@tempb{#2}%
+% \begingroup
+% \let\AFF@opr \@affil@footnote
+% \@AFF@list
+% \endgroup
+%}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@affil@footnote}
+% The alias of \cmd\AFF@opr\ when \cmd\@AFF@list\
+% is executed by \cmd\@tempaffil@group.
+% If we find a match of the affiliation number to \cmd\@tempc,
+% then footnotes are formatted with the relevant content and \cmd\@tempb.
+% \begin{macrocode}
+%\def\@affil@footnote#1#2#3{%
+% \def\@tempifx{#1}%
+% \@ifx{\@tempifx\@tempc}{%
+% \comma@space
+% \expandafter\frontmatter@footnote\expandafter{\@tempb#2}%
+% \frontmatter@footnote{#3}%
+% }{%
+% }%
+%}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@AF@join}
+% The \cmd\csname\ \cmd\@AF@join\ is a procedure used within
+% \cmd\email, \cmd\homepage, \cmd\thanks, and \cmd\altaffiliation.
+% When such a command appears after an \cmd\author, \cmd\collaboration, or \cmd\affiliation
+% command, the \cmd\@AF@join\ procedure appends the argument given to the appropriate
+% macro.
+% Its default is to give an error message, since these commands are legal only within
+% the particular context mentioned.
+% \begin{macrocode}
+\appdef\class@inithook{%
+ \let\@AF@join\@AF@join@error
+}%
+\def\@AF@join@error#1{%
+ \class@warn{%
+ \string\email, \string\homepage, \string\thanks, or \string\altaffiliation\space
+ appears in wrong context.
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection{Commands for auxiliary information}%
+%
+% \begin{macro}{\email}
+% Just tacks the email address on to the current author or affiliation.
+% \begin{macrocode}
+\def\sanitize@url{%
+ \@makeother\%%
+ \@makeother\~%
+ \@makeother\_%
+}%
+\newcommand*\email[1][Electronic address: ]{\begingroup\sanitize@url\@email{#1}}%
+\def\@email#1#2{%
+ \endgroup
+ \@AF@join{#1\href{mailto:#2}{#2}}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\homepage}
+% Just tacks the URL on to the current author or affiliation.
+% Note: group opened in \cmd\homepage\ is closed in \cmd\@homepage.
+% \begin{macrocode}
+\newcommand*\homepage[1][URL:~]{\begingroup\sanitize@url\@homepage{#1}}%
+\def\@homepage#1#2{%
+ \endgroup
+ \@AF@join{#1\url{#2}}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\url}
+% \begin{macro}{\href}
+% \begin{macrocode}
+\appdef\class@documenthook{%
+ \providecommand\url{\texttt}%
+ \providecommand\href[2]{\url{#2}}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\thanks}
+%
+% The operative version of \cmd\thanks\ appends an item to \cmd\@author, or \cmd\@affil's auxiliary data.
+% \begin{macrocode}
+\def\thanks{% implicit #1
+ \@AF@join
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\altaffiliation}
+% \changes{v4.d}{1998/01/31}
+% {change name from \cs{tempaffiliation}}
+% \changes{v4.l}{1998/09/01}
+% {add optional argument handling back}
+% Implemented more or less like \cmd\thanks\ but shares the affiliation
+% counter.
+% Optional argument may be used to give explanatory text eg
+% `currently staying at'
+% This will be placed before the address, if used in a footnote.
+% \begin{macrocode}
+\newcommand*\altaffiliation[2][]{%
+ \@AF@join{#1#2}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection{Procedures for author, collaboration, and affiliation}%
+%
+% Macros that list off, say, authors, and which require punctuation, like ``A, B, and C'', will use
+% \cmd\set@listcomma@list, \cmd\set@listcomma@count, \cmd\@listand, and \cmd\@listcomma.
+% These macros use the \cmd\@tempcnta\ register to keep track of how many items remain to be listed off.
+%
+% At present, \cmd\@author@present\ will decrement that counter.
+%
+% \begin{macro}{\set@listcomma@list}
+% \begin{macro}{\set@listcomma@count}
+% \changes{v4.l}{1998/09/01}
+% {macro added}
+% Pop the author count for this collaboration.
+%
+% Note: by side effect, it assigns \cmd\@listcomma:
+% for a list of length two, suppress comma addition.
+% \begin{macrocode}
+\def\set@listcomma@list#1{%
+ \expandafter\@reset@ac\expandafter#1#1{0}\@reset@ac{%
+ \let\@listcomma\relax
+ }{%
+ \let\@listcomma\@listcomma@comma
+ }%
+}%
+\def\set@listcomma@count#1{%
+ \@ifnum{#1=\tw@}{%
+ \let\@listcomma\relax
+ }{%
+ \let\@listcomma\@listcomma@comma
+ }%
+}%
+% \end{macrocode}
+% Does the actual pop operation, then generates a Boolean which selects one of the two assignments for \cmd\@listcomma.
+%
+% Note: this procedure sets \cmd\@tempcnta\ to reflect the number of items to list off.
+% \begin{macrocode}
+\def\@reset@ac#1#2#3\@reset@ac{%
+ \def#1{#3}%
+ \@tempcnta#2\relax
+ \@ifnum{#2=\tw@}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\listand}
+% Might need extending with penalties etc.
+%
+% Note: this procedure expects \cmd\@tempcnta\ to reflect the current number of items remaining to list off.
+% \begin{macrocode}
+\def\@listand{\@ifnum{\@tempcnta=\tw@}{\andname\space}{}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@listcomma}
+% This definition, with \cmd\@ne\ puts a comma before and.
+%
+% David Carlisle says: In UK English (at least) would have \cmd\tw@\ here,
+% which would then implement the convention of indicating conjunction with comma or ``and'', but not both.
+%
+% Note: this procedure expects \cmd\@tempcnta\ to reflect the current number of items remaining to list off.
+% \begin{macrocode}
+\def\@listcomma@comma{\@ifnum{\@tempcnta>\@ne}{,}{}}%
+\def\@listcomma@comma@UK{\@ifnum{\@tempcnta>\tw@}{,}{}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@collaboration@err}
+% This command will be executed if are in a \classoption{groupedaddress} situation and
+% the document contained a \cmd\collaboration\ command.
+%
+% There already has been issued a warning message explaining that \cmd\collaboration\ is wrong in this case,
+% so here we simply gobble.
+% \begin{macrocode}
+\def\@collaboration@err#1#2{%
+%\class@warn{An illegal \string\collaboration\ command has been entered!}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\doauthor}
+% Main control over how authors are typeset.
+%
+% |#1| is loaded by \cmd\author
+%
+% |#2| is loaded by \cmd\email, \cmd\homepage, \cmd\altaffiliation, or \cmd\thanks
+%
+% |#3| is the superscript affiliation, if at all used.
+%
+% First, the author name is formatted, followed by a comma,
+% then come any marks relating to affiliation (if present),
+% then come the homepage URL and email address, if any, with
+% appropriate punctuation.
+% \begin{macrocode}
+\def\doauthor#1#2#3{%
+ \ignorespaces#1\unskip\@listcomma
+ \def\@tempifx{#3}%
+ \@ifx{\@tempifx\@empty}{%
+ \def\@tempifx{#2}%
+ \@ifx{\@tempifx\@empty}{}{\frontmatter@footnote{#2}}%
+ }{%
+ #3%
+ \def\@tempifx{#2}%
+ \@ifx{\@tempifx\@empty}{}{\comma@space\frontmatter@footnote{#2}}%
+ }%
+ \space \@listand
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\AF@opr}
+% DPC: The number(s) associated to the affiliation address(es).
+% \end{macro}
+%
+% \begin{macro}{\@thanks}
+% \changes{v4.d}{1998/01/31}
+% {\cs{comma@space} added}
+% Society-specific options may change this. \cmd\comma@space\ is a separator
+% between adjacent footnotes.
+% \begin{macrocode}
+\def\@thanks{\comma@space\footnote}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\x@match}
+% Procedure \cmd\x@match\ is used as an alias \cmd\AFS@opr,
+% probing the list of affiliation groups
+% and setting a Boolean if a match is found to \#1 (usually the current affiliation group).
+%
+% Procedure \cmd\y@match\ is used as an alias to \cmd\@TBN@opr,
+% probing the list of unique title block footnotes for a match to the footnote text:
+% when the first match is found it sets a Boolean,
+% defining \cmd\@tempb\ to the number of that footnote.
+% \begin{macrocode}
+\def\x@match#1#2{%
+ \temp@sw{}{%
+ \def\@tempifx{#2}%
+ \@ifx{\@tempifx#1}{%
+ \@booleantrue\temp@sw
+ }{%
+ }%
+ }%
+}%
+\def\y@match#1#2#3{%
+ \temp@sw{}{%
+ \def\@tempifx{#3}%
+ \@ifx{\@tempifx#1}{%
+ \@booleantrue\temp@sw
+ \def\@tempb{#2}%
+ }{%
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@footnote}
+% Used when typesetting a title block footnote.
+% (Item 290: merge duplicates.)
+%
+% Maintains a list of frontmatter footnotes along with associated device.
+% Uniquifies each footnote by traversing the list and looking for a match to the footnote text.
+% If found, define \cmd\@tempb\ to the corresponding footnote device, and typeset it with \cmd\@footnotemark.
+% If never found, manually increment footnote counter,
+% determine the corresponding footnote device, and
+% add footnote text and device to the list of frontmatter footnotes.
+%
+% The list \cmd\@FMN@list\ is processed later in the title block production.
+%
+% Note that this method of making footnotes runs afoul of \classname{hyperref}'s patches of the \LaTeX\ kernel.
+% Therefore, we avoid trouble by refraining from using \cmd\@footnotemark\ and by creating our own hypertext links.
+% \begin{macrocode}
+\def\frontmatter@footnote#1{%
+ \begingroup
+ \@booleanfalse\temp@sw
+ \def\@tempa{#1}%
+ \let\@tempb\@empty
+ \def\@TBN@opr{\y@match\@tempa}%
+ \@FMN@list
+ \temp@sw{%
+ \expandafter\frontmatter@footnotemark
+ \expandafter{\@tempb}%
+ }{%
+ \stepcounter\@mpfn
+ \protected@xdef\@tempb{\the\csname c@\@mpfn\endcsname}%
+ \expandafter\frontmatter@footnotemark
+ \expandafter{\@tempb}%
+ \expandafter\g@addto@macro
+ \expandafter\@FMN@list
+ \expandafter{%
+ \expandafter \@TBN@opr
+ \expandafter {\@tempb}{#1}%
+ }%
+ }%
+ \endgroup
+}%
+\appdef\class@inithook{%
+ \global\let\@FMN@list\@empty
+}%
+\def\frontmatter@footnotemark#1{%
+ \leavevmode
+ \ifhmode\edef\@x@sf{\the\spacefactor}\nobreak\fi
+ \begingroup
+ \hyper@linkstart {link}{frontmatter@#1}%
+ \csname c@\@mpfn\endcsname#1\relax
+ \def\@thefnmark{\thempfn}%
+ \@makefnmark
+ \hyper@linkend
+ \endgroup
+ \ifhmode\spacefactor\@x@sf\fi
+ \relax
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsection{The keywords command}%
+% \begin{macro}{\keywords}
+% \begin{macro}{\@keywords}
+% Usual game, save text in a macro for processing by \cmd\maketitle.
+% \begin{macrocode}
+\def\keywords#1{%
+ \aftermaketitle@chk{\keywords}%
+ \gdef\@keywords{#1}%
+}%
+\def\@keywords{}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{The \cs{date} command and related commands}%
+% \begin{macro}{\date}
+% \begin{macro}{\received}
+% \begin{macro}{\revised}
+% \begin{macro}{\accepted}
+% \begin{macro}{\published}
+% \begin{macro}{\@date}
+% \begin{macro}{\@received}
+% \begin{macro}{\@revised}
+% \begin{macro}{\@accepted}
+% \begin{macro}{\@published}
+% Use the \cmd\date\ command to specify the document date,
+% the \cmd\received\ command to specify the date received,
+% \cmd\revised\ for date revised,
+% \cmd\accepted\ for date accepted, and
+% \cmd\published\ for date published.
+% Normally only \cmd\date\ to be used by author,
+% the remainder used only by editors.
+%
+% DPC: As for \cmd\keywords, but this time don't flag a warning if there is no
+% revision date specified.
+%
+% In each case the user-level command defines the value of a
+% macro which buffers the data entered by the user.
+% For instance, \cmd\received\ causes \cmd\@received\ to
+% acquire a value.
+% The optional argument allows the user to override the
+% text that will be typeset along with the date;
+% the default value of that text is itself
+% a localized macro.
+% \begin{macrocode}
+\renewcommand*\date[2][\Dated@name]{\def\@date{#1#2}}%
+\def\@date{}%
+\newcommand*\received[2][\Received@name]{\def\@received{#1#2}}%
+\def\@received{}%
+\newcommand*\revised[2][\Revised@name]{\def\@revised{#1#2}}%
+\def\@revised{}%
+\newcommand*\accepted[2][\Accepted@name]{\def\@accepted{#1#2}}%
+\def\@accepted{}%
+\newcommand*\published[2][\Published@name]{\def\@published{#1#2}}%
+\def\@published{}%
+% \end{macrocode}
+%
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{The pacs command}%
+% PACS, the Physics and Astronomy Classification Scheme.
+% \begin{macro}{\pacs}
+% \begin{macro}{\@pacs}
+% As for \cmd\keywords\
+% \begin{macrocode}
+\def\pacs#1{%
+ \aftermaketitle@chk{\pacs}%
+ \gdef\@pacs{#1}%
+}%
+\def\@pacs{}%{\class@warn{No PACS numbers}}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{The \cs{preprint} command}
+%
+% \changes{v4.g}{1998/06/10}
+% {multiple preprint commands}
+% \begin{macrocode}
+\def\preprint#1{\gappdef\@preprint{\preprint{#1}}}%
+\let\@preprint\@empty
+% \end{macrocode}
+%
+% \subsection{draft}
+% DPC: Name clash with draft option. \LaTeX\ doesn't care, but it confuses me.
+%
+% This command is a 3.1 relic, now removed.
+% \begin{macrocode}
+%\newcommand\draft{\@booleantrue\draft@sw}%
+% \end{macrocode}
+%
+% \subsection{The \env{abstract} environment}%
+%
+% \changes{v4.0beta 2}{1999/06/20}
+% {Gathered all code for the abstract environment together
+% and abstracted out the formatting details for journals to override.}
+%
+% \begin{macro}{\absbox}
+%
+% \begin{macrocode}
+\newbox\absbox
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{abstract}
+% Abstract, as in AMS classes, must be specified \emph{before}
+% \cmd\maketitle. It just saves everything up in \cmd\absbox.
+% \changes{v4.d}{1998/01/31}
+% {If empty \cs{abstractname} omit spacing}
+% \begin{macrocode}
+% \changes{v4.e}{1998/01/31}
+% {hookify}
+% Note that the specifics of how the abstract is to be
+% formatted are set by \cmd\frontmatter@abstractwidth,
+% \cmd\frontmatter@abstractheading, and \cmd\frontmatter@abstractfont.
+%
+% Here we wish to set the abstract into type but save it away in a box, much like
+% the \cmd\minipage\ command does.
+%
+% Note that the \cmd\endabstract\ portion of the environment
+% begins with code that mostly duplicates \cmd\endminipage, but without the \cmd\@iiiparbox.
+% At the end, we simply transfer the contents of the \cmd\minipage\
+% into a box of our own.
+%
+% However, we also have to end the gratuitous
+% paragraph begun by \cmd\minipage.
+% We ensure that no trace of that paragraph is left,
+% by absorbing the \cmd\parindent\ box.
+% Doing so destroys the paragraph entirely, except
+% for the \cmd\parskip\ glue, and that morsel is pruned, because we are at the top
+% of a page.
+%
+% This mechanism is vulnerable, however, because anything placed into the horizontal list
+% after the \cmd\parindent\ box will confound it.
+% And that is exactly what happens under Mik\TeX:
+% There seems to be an extension to the \TeX\ standard operating here which inserts a \cmd\special \ at the beginning of every paragraph.
+% (The mechnism is \emph{not} based on \cmd\everypar.)
+%
+% To accomodate this state of affairs,
+% we have a new mechanism that offers an even more complete rewrite of \env{minipage}.
+%
+% The user can elect to use this new mechanism via the \classoption{newabstract};
+% likewise the old mechanism via the \classoption{oldabstract}.
+%
+% \begin{macrocode}
+\newenvironment{abstract}{%
+ \aftermaketitle@chk{\begin{abstract}}%
+ \global\setbox\absbox\vbox\bgroup
+ \color@begingroup
+ \columnwidth\textwidth
+ \hsize\columnwidth
+ \@parboxrestore
+ \def\@mpfn{mpfootnote}\def\thempfn{\thempfootnote}\c@mpfootnote\z@
+ \let\@footnotetext\frontmatter@footnotetext
+ \minipagefootnote@init
+ \let\@listdepth\@mplistdepth \@mplistdepth\z@
+ \@minipagerestore
+ \@setminipage
+ \frontmatter@abstractheading
+ \frontmatter@abstractfont
+ \let\footnote\mini@note
+}{%
+ \par
+ \unskip
+ \minipagefootnote@here
+ \@minipagefalse %% added 24 May 89
+ \color@endgroup
+ \egroup
+}%
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\frontmatter@footnotetext}
+% We reimplement \cmd\@mpfootnotetext\ under a new name (so as not to be overridden by the \classname{hyperref} package)
+% and extend it to accomodate hyperrefs.
+%
+% Note that this procedure is very like \classname{ltxutil}'s \cmd\mp@footnotetext, except that it
+% uses \texttt{p@mpfootnote} instead of \texttt{p@mpfootnote}, and
+% \cmd\frontmatter@makefntext\ instead of \cmd\@makefntext.
+%
+% \begin{macrocode}
+\long\def\frontmatter@footnotetext#1{%
+ \minipagefootnote@pick
+ \reset@font\footnotesize
+ \interlinepenalty \interfootnotelinepenalty
+ \splittopskip \footnotesep
+ \splitmaxdepth \dp \strutbox
+ \set@footnotewidth
+ \@parboxrestore
+ \protected@edef\@currentlabel{\csname p@mpfootnote\endcsname\@thefnmark}%
+ \color@begingroup
+ \frontmatter@makefntext{%
+ \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox
+ }%
+ \color@endgroup
+ \minipagefootnote@drop
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@abstractheading}
+% The default abstract head; journals will override this procedure.
+% \begin{macrocode}
+\def\frontmatter@abstractheading{%
+ \begingroup
+ \centering\large
+ \abstractname
+ \par
+ \endgroup
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@abstractfont}
+% The default type specification for the body of the abstract.
+% Journals will override this setting.
+% \begin{macrocode}
+\def\frontmatter@abstractfont{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@abstractwidth}
+% The default setting is the full text width;
+% journals can override this setting.
+% \begin{macrocode}
+\def\frontmatter@abstractwidth{\textwidth}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@abstract@produce}
+% This procedure determines how the abstract is incorporated
+% into the title block. We split this out in anticipation
+% of the need to lift the limitation that the abstract not break over pages.
+%
+% If we are in preprint style, we provide an easy pagebreak point immediately above the abstract.
+% This means that the abstract will either fit entirely on the same page as the title block,
+% or it will start a page of its own (which may itself break onto a subsequent page if necessary).
+% \begin{macrocode}
+\def\frontmatter@abstract@produce{%
+ \par
+% \tracingall
+ \preprintsty@sw{%
+ \do@output@MVL{%
+ \vskip\frontmatter@preabstractspace
+ \vskip200\p@\@plus1fil
+ \penalty-200\relax
+ \vskip-200\p@\@plus-1fil
+ }%
+ }{%
+ \addvspace{\frontmatter@preabstractspace}%
+ }%
+% \leavevmode
+ \begingroup
+ \dimen@\baselineskip
+ \setbox\z@\vtop{\unvcopy\absbox}%
+ \advance\dimen@-\ht\z@\advance\dimen@-\prevdepth
+ \@ifdim{\dimen@>\z@}{\vskip\dimen@}{}%
+ \endgroup
+ \unvbox\absbox
+ \@ifx{\@empty\mini@notes}{}{\mini@notes\par}%
+% \par
+ \addvspace\frontmatter@postabstractspace
+% \showlists
+% \tracingplain
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@preabstractspace}
+% \begin{macro}{\frontmatter@postabstractspace}
+% Space above and space below abstract in title block
+% \begin{macrocode}
+\def\frontmatter@preabstractspace{.5\baselineskip}
+\def\frontmatter@postabstractspace{.5\baselineskip}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+% \subsection{Formatting the title block}%
+%
+% \begin{environment}{titlepage}
+% This is \LaTeXe's \classname{article} class version,
+% with modifications.
+% \changes{v4.0beta 3}{1999/11/13}
+% {grid changes with ltxgrid}
+% \begin{macrocode}
+\newenvironment{titlepage}{%
+ \twocolumn@sw{\onecolumngrid}{\newpage}%
+ \thispagestyle{titlepage}%
+ \setcounter{page}\@ne
+}{%
+ \twocolumn@sw{\twocolumngrid}{\newpage}%
+ \twoside@sw{}{%
+ \setcounter{page}\@ne
+ }%
+}%
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\maketitle}
+% \changes{v4.d}{1998/01/31}
+% {hookify}
+% Put it all together to format the title block.
+% \begin{macrocode}
+\def\maketitle{%
+ \@author@finish
+ \title@column\titleblock@produce
+ \suppressfloats[t]%
+% \end{macrocode}
+% Now save some memory.
+% \begin{macrocode}
+ \let\and\relax
+ \let\affiliation\@gobble
+% \let\address\affiliation
+ \let\author\@gobble
+ \let\@AAC@list\@empty
+ \let\@AFF@list\@empty
+ \let\@AFG@list\@empty
+% \let\keywords\@gobble
+% \let\@keywords\@empty
+ \let\@AF@join\@AF@join@error
+ \let\email\@gobble
+ \let\@address\@empty
+ \let\maketitle\relax
+ \let\thanks\@gobble
+ \titlepage@sw{%
+ \vfil
+ \clearpage
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\titleblock@produce}
+% This procedure produces the title block.
+%
+% It effectively executes inside a group
+% and always returns us to vertical mode.
+%
+% Note: we assume that it is OK to set the footnote counter to zero at this point.
+% Is this a safe assumption?
+% \begin{macrocode}
+\def\titleblock@produce{%
+ \begingroup
+% \end{macrocode}
+% Special footnote version [of footnotes] for \cmd\thanks,
+% copied from \classname{article} class \cmd\maketitle.
+% \changes{v4.0beta 2}{1999/06/20}
+% {Set \cs{footnote} to \LaTeX\ standard version for this scope.}
+% \begin{macrocode}
+ \let\footnote\footnote@latex
+ \let\@makefnmark\@makefnmark@latex
+ \let\@footnotemark\@footnotemark@latex
+ \let\thefootnote\frontmatter@thefootnote
+% \let\@makefntext\frontmatter@makefntext
+ \global\c@footnote\z@
+ \let\@makefnmark\frontmatter@makefnmark
+ \frontmatter@setup
+ \thispagestyle{titlepage}\label{FirstPage}%
+% \end{macrocode}
+% Produce the title:
+% \begin{macrocode}
+ \frontmatter@title@produce
+% \end{macrocode}
+% Produce the author list:
+% \begin{macrocode}
+ \groupauthors@sw{%
+ \frontmatter@author@produce@group
+ }{%
+ \frontmatter@author@produce@script
+ }%
+% \end{macrocode}
+% Produce the dates:
+% \begin{macrocode}
+ \frontmatter@RRAPformat{%
+ \expandafter\produce@RRAP\expandafter{\@date}%
+ \expandafter\produce@RRAP\expandafter{\@received}%
+ \expandafter\produce@RRAP\expandafter{\@revised}%
+ \expandafter\produce@RRAP\expandafter{\@accepted}%
+ \expandafter\produce@RRAP\expandafter{\@published}%
+ }%
+% \end{macrocode}
+% Produce the abstract, PACS, and keywords, and end any paragraph.
+% \begin{macrocode}
+ \frontmatter@abstract@produce
+ \@pacs@produce\@pacs
+ \@keywords@produce\@keywords
+ \par
+ \frontmatter@finalspace
+ \endgroup
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@title@produce}
+% The default formatting procedure for the article title.
+% This procedure should take care of the vertical space below the title.
+%
+% Journals may override this procedure, but it is more likely that they will
+% use the hooks \cmd\frontmatter@title@above, \cmd\frontmatter@title@format, and \cmd\frontmatter@title@below.
+%
+% At this point, we patch into \cmd\let@mark\ so that the common markup idiom \cmd\\ is taken care of.
+% \begin{macrocode}
+\def\frontmatter@title@produce{%
+ \begingroup
+ \frontmatter@title@above
+ \frontmatter@title@format
+ \@title
+ \@ifx{\@title@aux\@title@aux@cleared}{}{%
+ \expandafter\frontmatter@footnote\expandafter{\@title@aux}%
+ }%
+ \par
+% \@ifx{\@shorttitle\@empty}{%
+% \markboth{\@title}{\@title}%
+% }{%
+% \markboth{\@shorttitle}{\@shorttitle}%
+%% \class@warn{Unused short title ignored}%
+% }%
+ \frontmatter@title@below
+ \endgroup
+}%
+\appdef\let@mark{\let\\\relax}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@title@above}
+% \begin{macro}{\frontmatter@title@format}
+% \begin{macro}{\frontmatter@title@below}
+% The default values for formatting specifications for the article title.
+%
+% The procedure \cmd\frontmatter@title@above\ should take care of the vertical space above the title;
+% \cmd\frontmatter@title@below\ below.
+% The procedure \cmd\frontmatter@title@format\ should invoke any font switches, etc.
+% that may apply to the title.
+%
+% Journals will override this procedure.
+% \begin{macrocode}
+\def\frontmatter@title@above{}%
+\def\frontmatter@title@format{}%
+\def\frontmatter@title@below{\addvspace{\baselineskip}}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Authors and affiliations in superscriptaddress style}
+%
+% \begin{macro}{\frontmatter@author@produce@script}
+% \cmd\frontmatter@author@produce@script\ is an alias for \cmd\frontmatter@author@produce,
+% the procedure that formats the author/affiliation list.
+%
+% In this case, the authors affiliations are being superscripted
+% (class option \classoption{superscriptaddress}).
+%
+% This procedure must ensure that any paragraph that it starts gets ended finally.
+% \begin{macrocode}
+\def\frontmatter@author@produce@script{%
+ \begingroup
+ \let\@author@present\@author@present@script
+% \end{macrocode}
+% \changes{v4.l}{1998/09/01}
+% {Changes to add collaboration processing, which now
+% means doing comma/and processing on each sublist}
+% When the author/affiliation list \cmd\@AAC@list\ is executed,
+% \cmd\@tempcnt\ counts each author,
+% and
+% \cmd\@tempa\ stores a list of author indices for the current collaboration.
+%
+% Note: this procedure uses \cmd\AU@temp\ to hold a list of author counts for each collaboration.
+% Note: also uses \cmd\@tempcnta\ to communicate between procedures.
+% This usage ot \cmd\@tempcnta\ is OK, because the expansion of \cmd\@AAC@list\ will trigger only the execution of
+% our own procedures.
+% \begin{macrocode}
+ \let\AU@temp\@empty
+ \@tempcnta\z@
+% \end{macrocode}
+%
+% We wish to know how many authors are in each collaboration, for the purposes of \cmd\listcomma\ and \cmd\listand.
+%
+% Here we assign values for the intercollated operators appearing within \cmd\@AAC@list,
+% then execute that macro, registering the authors in each collaboration.
+% Afterwards, clean up by emulating an empty collaboration.
+%
+% The result, stored in \cmd\AU@temp, is a list of brace-delmited tokens, each a number
+% representing the number of authors in that collaboration.
+% \begin{macrocode}
+ \let\AF@opr \@gobble
+ \def\AU@opr{\@author@count\@tempcnta}%
+ \def\CO@opr{\@collaboration@count\AU@temp\@tempcnta}%
+ \@AAC@list
+ \expandafter\CO@opr\@author@cleared
+% \end{macrocode}
+% Next, present the authors and their affiliations.
+%
+% We assign values for the intercollated operators appearing within \cmd\@AAC@list.
+% Next, assign \cmd\@listcomma\ based on the number of authors in the first collaboration.
+% Then expand \cmd\@AAC@list.
+%
+% Upon completion, there will be two space tokens following the last author because of \cmd\listand\ processing;
+% remove them, then end the last paragraph.
+%
+% FIXME: this juncture would be a good time to effectively eliminate the unused affiliations in \cmd\@AFF@list.
+% \begin{macrocode}
+ \begingroup
+ \frontmatter@authorformat
+ \let\AF@opr \@affilID@def
+ \let\AU@opr \@author@present
+ \def\CO@opr{\@collaboration@present\AU@temp}%
+ \set@listcomma@list\AU@temp
+ \@AAC@list
+ \unskip\unskip
+ \par
+ \endgroup
+% \end{macrocode}
+% We now list out the affiliations in the order they appeared.
+% \begin{macrocode}
+ \begingroup
+ \frontmatter@above@affiliation@script
+% \let\@AFU@list\@empty
+% \let\AFS@opr \affils@present@script
+% \@AFG@list
+% \let\AF@opr \affil@present@script
+% \@AFU@list
+ \let\AFF@opr \@affil@script
+% \say\@AFF@list
+ \@AFF@list
+ \frontmatter@footnote@produce
+ \par
+ \endgroup
+ \endgroup
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@author@count}
+% This version of \cmd\AU@opr\ counts the number of authors it processes.
+% \begin{macrocode}
+\def\@author@count#1{\advance#1\@ne\@author@gobble}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@collaboration@present}
+% Format a collaboration.
+% Note that we immediately end the paragraph thus begun, because we only support
+% \classoption{superscriptaddress}-style processing.
+%
+% Note also that the execution of the production procedures takes place inside of a group;
+% for reasons of protective programming.
+%
+% Bug note: originally, the number of authors in each collaboration was stored in \cmd\@tempa,
+% but this exposed us to procedures in our production that modified the meaning of \cmd\@tempa.
+%
+% The last action done in this procedure is to assign \cmd\@listcomma\ based on the number of authors in the next collaboration.
+% \begin{macrocode}
+\def\@collaboration@present#1#2#3{%
+ \par
+ \begingroup
+ \frontmatter@collaboration@above
+ \@author@present{(\ignorespaces#2\unskip)}{#3}%
+ \par
+ \endgroup
+ \set@listcomma@list#1%
+}%
+\def\frontmatter@collaboration@above{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@collaboration@count}
+% Simply register each author in this collaboration.
+% Note: \#1 is a \cmd\csname\ to hold the value, \#2 is the \cmd\count\ register holding the count of interest.
+% \begin{macrocode}
+\def\@collaboration@count#1#2{%
+ \appdef@eval#1{\the#2}#2\z@
+ \@author@gobble
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@affilID@def}
+%
+% The \cmd\@affilID@def\ procedure, an alias of \cmd\AF@opr\ used during \cmd\frontmatter@author@produce@script\ processing,
+% memorizes the affiliation in \cmd\@affilID@temp.
+% \begin{macrocode}
+\def\@affilID@def{\def\@affilID@temp}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@affilID@temp}
+%
+% The macro \cmd\@affilID@temp\ is used to communicate between
+% \cmd\doauthor\ and instances of \cmd\AF@opr\ within the author list.
+% \begin{macrocode}
+\let\@affilID@temp\@empty
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\affils@present@script}
+% An alias of \cmd\AFS@opr, this procedure is applied to \cmd\@AFG@list\ and builds
+% \cmd\@AFU@list, a list of unique affiliations found within affiliation groups.
+%
+% \begin{macrocode}
+%\def\affils@present@script#1{%
+% \get@affil#1{}%
+%}%
+%\def\get@affil#1{%
+% \def\@tempa{#1}%
+% \@ifx{\@empty\@tempa}{}{%
+% \@booleanfalse\temp@sw
+% \def\AF@opr{\x@match\@tempa}%
+% \@AFU@list
+% \temp@sw{}{%
+% \appdef\@AFU@list{\AF@opr{#1}}%
+% }%
+% \get@affil
+% }%
+%}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\affil@present@script}
+% An alias of \cmd\AF@opr, this procedure is applied to \cmd\@AFU@list\ when formatting the affiliations
+% under \classoption{superscriptaddress}.
+% It in turn applies \cmd\affil@script\ to \cmd\@AFF@list, thereby formatting the affiliation
+% associated with this affiliation index.
+%
+% Note: it traverses the \cmd\@AFF@list\ for each entry in the \cmd\@AFU@list, thereby making this
+% portion of code execute in $N^{2}$ time.
+% \begin{macrocode}
+%\def\affil@present@script#1{%
+% \def\@tempa{#1}%
+% \begingroup
+% \frontmatter@affiliationfont
+% \let\AFF@opr \affil@script
+% \@AFF@list
+% \endgroup
+%}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\affil@script}
+% Alias of \cmd\AFF@opr, this procedure is applied to \cmd\@AFF@list\ when formatting the affiliations
+% under \classoption{superscriptaddress}.
+% It rejects all entries not matching the affiliation index held in \cmd\@tempa.
+% \begin{macrocode}
+\def\affil@script#1#2#3{%
+ \def\@tempifx{#1}\@ifx{\@tempifx\@tempa}{%
+ \@if@empty{#2}{}{%
+ \par
+ \begingroup
+ \textsuperscript{\normalfont#1}%
+ #2%
+ \@if@empty{#3}{}{\frontmatter@footnote{#3}}%
+ \par
+ \endgroup
+ }%
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@affil@script}
+% Alias of \cmd\AFF@opr:
+% The affiliations are being formatted in the case
+% where affiliations are being superscripted:
+% make a list out of the affiliations with the numbers printed.
+% Society-specific code can change the formatting
+% by overriding the definition of \cmd\frontmatter@affiliationfont.
+%
+% FIXME: dead code.
+% \begin{macrocode}
+\def\@affil@script#1#2#3{%
+ \@ifnum{#1=\z@}{}{%
+ \par
+ \begingroup
+ \frontmatter@affiliationfont
+% \textsuperscript{\normalfont#1}%
+ \textsuperscript{#1}%
+ #2%
+ \@if@empty{#3}{}{\frontmatter@footnote{#3}}%
+ \par
+ \endgroup
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@author@present@script}
+% \changes{v4.h}{1998/06/25}
+% {Changes to support groups of affiliations}
+% This version of \cmd\AU@opr\ applies to the \classoption{superscriptaddress} class option.
+% Need to add commas between groups
+% of address numbers, which are passed in the macro \cmd\@affilID@temp\ in the form
+% |{3}{4}{7}| if this set of authors is related to addresses, 3, 4 and 7.
+% \begin{macrocode}
+\def\@author@present@script#1#2{%
+ \begingroup
+% \parskip\@author@parskip\relax
+ \gdef\comma@space{\textsuperscript{,\,}}%
+% \@ifx{\@affilID@temp\@empty}{%
+% \doauthor{#1}{#2}{}%
+% }{%
+% \expandafter\set@count@\@affilID@temp{}{}\@@nil
+% \@ifnum{\count@=\z@}{%
+% \doauthor{#1}{#2}{}%
+% }{%
+% \doauthor{#1}{#2}{%
+% \textsuperscript{\expandafter\@affilcomma\@affilID@temp\relax\relax}%
+% }%
+% }%
+% }%
+ \doauthor{#1}{#2}{%
+ \let\@tempa\@empty
+ \expandafter\@affil@present@script\@affilID@temp\relax
+ }%
+ \endgroup
+ \advance\@tempcnta\m@ne
+}%
+%\def\set@count@#1#2\@@nil{%
+% \count@#1\relax
+%}%
+\def\@affilcomma#1#2{%
+ \@ifx{\z@#1}{%
+ \@ifx{\relax#2}{}{%
+ \@affilcomma{#2}%
+ }%
+ }{%
+ #1%
+ \@ifx{\relax#2}{}{%
+ \@ifx{\z@#2}{%
+ \@affilcomma
+ }{%
+ ,\,\@affilcomma{#2}%
+ }%
+ }%
+ }%
+}%
+\def\@affil@present@script#1{%
+ \@ifx{\relax#1}{%
+ \@ifx{\@tempa\@empty}{}{%
+ \textsuperscript{\expandafter\@affilcomma\@tempa\relax\relax}%
+ }%
+ }{%
+ \@ifx{\z@#1}{}{\appdef\@tempa{{#1}}}%
+ \@affil@present@script
+ }%
+}%
+\@provide\@author@parskip{\z@skip}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection{Authors and affiliations in groupedaddress style}
+%
+% \begin{macro}{\frontmatter@author@produce@group}
+% \cmd\frontmatter@author@produce@group\ is an alias for \cmd\frontmatter@author@produce,
+% the procedure that formats the author/affiliation list when \classoption{groupedaddress} is in effect.
+%
+% In this case, the authors are being grouped above their shared addresses.
+% How it works: the \cmd\@AFG@list, a list of all unique affiliation groups, is expanded.
+% For each such group, all authors belonging to that group are formatted above the affiliation group.
+% Collaborations are silently passed over.
+%
+% This procedure must ensure that any paragraph that it starts gets ended finally.
+% \begin{macrocode}
+\def\frontmatter@author@produce@group{%
+ \begingroup
+ \let\@author@present\@author@present@group
+ \frontmatter@authorformat
+ \let\AFS@opr \affils@present@group
+ \let\@listcomma\relax
+ \@AFG@list
+ \frontmatter@footnote@produce
+ \par
+ \endgroup
+ \frontmatter@authorbelow
+}%
+\@provide\frontmatter@authorbelow{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\affils@present@group}
+% Alias of \cmd\AFS@opr, this procedure is used on every element of
+% \cmd\@AFG@list, the list of unique affiliation groups,
+% when formatting the author/affiliation block:
+% It presents all authors sharing this affiliation group.
+%
+% This procedure is called via the procedure
+% \cmd\frontmatter@author@produce@group, an alias for \cmd\frontmatter@author@produce,
+%
+% Its use pertains to the class options
+% \classoption{groupedaddress}, \classoption{unsortedaddress}, and \classoption{runinaddress}
+% (that is, \cmd\groupauthors@sw\ is true).
+%
+% For each invocation, the entire \cmd\@AAC@list\ is run through (twice),
+% making this process execute in $N^{2}$ time. (Is this really true?)
+% \begin{macrocode}
+\def\affils@present@group#1{%
+% \end{macrocode}
+% Count (using \cmd\@tempcnta) the authors in the author list whose affiliation is |#1|.
+%
+% Note that \cmd\AF@temp\ is used as a storage register for the argument
+% of the procedure, for purposes of comparison using \cmd\ifx.
+%
+% Note: here we use \cmd\@tempcnta\ to communicate accumulate the number of authors in the current affiliation set.
+%
+% QUERY: does the value of \cmd\AF@temp\ and \cmd\AF@opr\ need to persist?
+%
+% QUERY: what value does \cmd\AU@opr\ have at this point?
+% ANSWER: the \cmd\@affilID@count\ and \cmd\@affilID@match\ procedures
+% assign meanings to \cmd\AU@opr\ and \cmd\CO@opr\ dynamically.
+% We initialize the two operators to \cmd\undefined\ so as to catch the
+% pathological cases.
+% \begin{macrocode}
+ \begingroup
+ \def\AF@temp{#1}% % 0B13
+ \@tempcnta\z@
+ \let\AU@opr \undefined % 0B13
+ \let\CO@opr \undefined % 0B13
+ \def\AF@opr{\@affilID@count\AF@temp\@tempcnta}% 0B13
+ \@AAC@list
+% \end{macrocode}
+%
+% If no authors using this affiliation group, skip it.
+% \begin{macrocode}
+ \@ifnum{\@tempcnta=\z@}{}{%
+% \end{macrocode}
+%
+% DPC: If we have a list of length two, need to locally zap a comma.
+% \begin{macrocode}
+ \begingroup
+ \frontmatter@above@affilgroup
+ \set@listcomma@count\@tempcnta
+% \end{macrocode}
+% Run through the author list, presenting (with \cmd\@author@present)
+% those authors whose affiliation matched the given one.
+% \begin{macrocode}
+ \let\AU@opr \undefined % 0B13
+ \let\CO@opr \undefined % 0B13
+ \def\AF@opr{\@affilID@match\AF@temp}%
+ \@AAC@list
+ \endgroup
+% \end{macrocode}
+% Now that the authors have all been presented, present the affiliations, grouped.
+%
+% Note: \cmd\@tempcnta\ is used to count the number of affiliations for this set of authors.
+% \begin{macrocode}
+ \begingroup
+ \par
+ \frontmatter@above@affiliation
+ \frontmatter@affiliationfont
+ \let\\\frontmatter@addressnewline
+ \@tempcnta\z@
+ \@tfor\AF@temp:=#1\do{%
+ \expandafter\@ifx\expandafter{\z@\AF@temp}{}{%
+ \advance\@tempcnta\@ne
+ }%
+ }%
+ \@ifnum{\@tempcnta=\tw@}{%
+ \let\@listcomma\relax
+ }{}%
+ \def\after@address{\@listcomma\ \@listand}%
+ \runinaddress@sw{%
+ }{%
+ \tightenlines@sw{%
+ }{%
+ \parskip\z@ %space between affilations in grouped mode
+ }%
+ \appdef\after@address\par
+ }%
+ \let\AFF@opr \@affil@group
+ \do@affil@fromgroup\@AFF@list#1\relax
+ \endgroup
+% \end{macrocode}
+% End of branch handling authors.
+% \begin{macrocode}
+ }%
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \par
+ \endgroup
+%\smallskip
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@affilID@count}
+% \begin{macro}{\@affilID@match}
+%
+% The control sequence name \cmd\AF@opr\ is placed in the
+% author/affiliation list (\cmd\@AAC@list) for each (new) affiliation, with that affiliation as its argument.
+%
+% The control sequence name \cmd\AF@opr\ is an alias of a procedure
+% to count the number of authors at a given affiliation (\cmd\@affilID@count)
+% or to present the given authors (\cmd\@affilID@match).
+% These two procedures are executed when formatting under the \classoption{groupedaddress} class option.
+% \begin{macrocode}
+\def\@affilID@count#1#2#3{%
+ \def\@tempifx{#3}%
+ \@ifx{\@tempifx#1}{%
+ \def\AU@opr{\@author@count#2}%
+ }{%
+ \let\AU@opr \@author@gobble
+ }%
+ \let\CO@opr \@collaboration@err
+}%
+\def\@affilID@match#1#2{%
+ \def\@tempifx{#2}%
+ \@ifx{\@tempifx#1}{%
+ \let\AU@opr \@author@present
+ }{%
+ \let\AU@opr \@author@gobble
+ }%
+ \let\CO@opr \@collaboration@err
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\do@affil@fromgroup}
+% Executes iteratively:
+% selects the next address ID to print,
+% and then re-execute the list of addresses to print the text of that address.
+%
+% Note: an argument of \cmd\relax\ breaks out of this iteration,
+% while an argument of \cmd\z@\ (\cmd\noaffiliation) is a no-op.
+%
+% Note: we have createed an $N^{2}$ computing process.
+% FIXME: can use hashing instead, you know.
+% \begin{macrocode}
+\def\do@affil@fromgroup#1#2{%
+ \@ifx{\relax#2}{}{%
+ \count@#2\relax
+ \@ifnum{\count@=\z@}{}{#1}%
+ \do@affil@fromgroup#1%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@affil@group}
+% The alias of \cmd\AFF@opr\ when the list \cmd\@AFF@list\
+% is executed by \cmd\do@affil@fromgroup (\classoption{groupedaddress}):
+% Print the address if its number matches \cmd\count@\ (value set by \cmd\do@affil@fromgroup).
+%
+% Note that we detect a \cmd\noaffiliation\ here by the second parameter's being the token \cmd\blankaffiliation.
+% \begin{macrocode}
+\def\@affil@group#1#2#3{%
+ \@ifnum{\count@=#1\relax}{%
+ \@ifx{#2\blankaffiliation}{}{%
+ #2%
+ \@if@empty{#3}{}{%
+ \frontmatter@footnote{#3}%
+ }%
+ \after@address
+ }%
+ \advance\@tempcnta\m@ne
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@author@present@group}
+% \changes{v4.d}{1998/01/31}
+% {\cs{comma@space}}
+% This version of \cmd\AU@opr\ applies to the \classoption{groupedaddress} class option.
+% Traverse the list calling the \cmd\doauthor\ hook on each author.
+% \begin{macrocode}
+\def\@author@present@group#1#2{%
+ \gdef\comma@space{\gdef\comma@space{\textsuperscript{,\,}}}%
+ \doauthor{#1}{#2}{}%
+ \advance\@tempcnta\m@ne
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@pacs@produce}
+% PACS, keywords and dates.
+% \changes{v4.d}{1998/01/31}
+% {PACS boxed to width of abstract}
+% \changes{v4.0beta 2}{1999/06/20}
+% {Separate option now controls production}
+% \changes{v4.0beta 5}{2000/09/20}
+% {Warn if no production}
+% \begin{macrocode}
+\def\@pacs@produce#1{%
+ \showPACS@sw{%
+ \begingroup
+ \frontmatter@PACS@format
+ \@pacs@name#1\par
+ \endgroup
+ }{%
+ \@if@empty{#1}{}{%
+ \class@warn{\PACS@warn}%
+ }%
+ }%
+}%
+\def\PACS@warn{If you want your PACS to appear in your output, use document class option showpacs}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@keywords@produce}
+% \changes{v4.0beta 5}{2000/09/20}
+% {Keywords on same footing as PACS}
+% \begin{macrocode}
+\def\@keywords@produce#1{%
+ \showKEYS@sw{%
+ \begingroup
+ \frontmatter@keys@format
+ \@keys@name#1\par
+ \endgroup
+ }{%
+ \@if@empty{#1}{}{%
+ \class@warn{If you want your keywords to appear in your output, use document class option showkeys}%
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@footnote@produce@footnote}
+% \begin{macro}{\frontmatter@footnote@produce@endnote}
+% Produce any footnotes to appear at the bottom of the title page.
+%
+% If frontmatter footnotes have been redirected to the bibliography, this will be a no-op.
+% ref.: \cmd\present@bibnote.
+% \begin{macrocode}
+\def\frontmatter@footnote@produce@footnote{%
+ \let\@TBN@opr\present@FM@footnote
+ \@FMN@list
+ \global\let\@FMN@list\@empty
+}%
+\def\present@FM@footnote#1#2{%
+ \begingroup
+ \csname c@\@mpfn\endcsname#1\relax
+ \def\@thefnmark{\thempfn}%
+ \frontmatter@footnotetext{#2}%
+ \endgroup
+}%
+\def\frontmatter@footnote@produce@endnote{%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@thefootnote}
+% The in the title block, the footnote symbol (used for alternate affiliation and sundry)
+% is a \cmd\@fnsymbol\ or a lowercase letter, as selected by a boolean.
+% \begin{macrocode}
+\def\frontmatter@thefootnote{%
+ \altaffilletter@sw{\@alph}{\@fnsymbol}\c@footnote
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@makefnmark}
+% The default procedure for setting the footnote mark within the frontmatter.
+% Journals will override this procedure.
+% \begin{macrocode}
+\def\frontmatter@makefnmark{%
+ \@textsuperscript{%
+ \normalfont\@thefnmark
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@makefntext}
+% This procedure is used when setting footnotes within the title block.
+% \begin{macrocode}
+\long\def\frontmatter@makefntext#1{%
+ \parindent 1em
+ \noindent
+ \Hy@raisedlink{\hyper@anchorstart{frontmatter@\the\c@footnote}\hyper@anchorend}%
+ \@makefnmark
+ #1%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@setup}
+% The default type specification for the title page.
+% Journals will override this definition.
+% \begin{macrocode}
+\def\frontmatter@setup{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@RRAPformat}
+% \begin{macro}{\punct@RRAP}
+% \begin{macro}{\produce@RRAP}
+% The procedure \cmd\frontmatter@RRAPformat\ is the formatting procedure
+% for the ``Received, Revised, etc.'' block on the title page.
+% The macro \cmd\punct@RRAP\ produces the punctuation between the entries.
+% Journals will override these two definitions.
+%
+% The procedure \cmd\produce@RRAP\ is fairly general, and should be used by most
+% journal substyles.
+%
+% The procedure \cmd\frontmatter@RRAP@format\ will be overridden by the journal.
+% \begin{macrocode}
+\def\frontmatter@RRAPformat#1{%
+ \removelastskip
+ \begingroup
+ \frontmatter@RRAP@format
+ #1\par
+ \endgroup
+}%
+\def\punct@RRAP{; }%
+\def\produce@RRAP#1{%
+ \@if@empty{#1}{}{%
+ \@ifvmode{\leavevmode}{\unskip\punct@RRAP\ignorespaces}%
+ #1%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@authorformat}
+% The default type specification for the author list.
+% Journals will override this definition.
+% \begin{macrocode}
+\def\frontmatter@authorformat{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@above@affilgroup}
+% The default amount of space above an affiliation group
+% (in a \cmd\affils@present@group\ production).
+% Journals will override this definition.
+% \begin{macrocode}
+\def\frontmatter@above@affilgroup{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@above@affiliation}
+% \begin{macro}{\frontmatter@above@affiliation@script}
+% The \cmd\frontmatter@above@affiliation\ is the amount of space above affiliations in the \classoption{groupedaddress}
+% style, and \cmd\frontmatter@above@affiliation@script\ is that for \classoption{superscriptaddress}.
+% Journals will override this definition.
+% \begin{macrocode}
+\def\frontmatter@above@affiliation{}%
+\def\frontmatter@above@affiliation@script{}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@affiliationfont}
+% The default type specification for the affiliation.
+% Journals will override this definition.
+% \begin{macrocode}
+\def\frontmatter@affiliationfont{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@RRAP@format}
+% The default type specification for the dates.
+% Journals will override this definition.
+% \begin{macrocode}
+\def\frontmatter@RRAP@format{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@PACS@format}
+% Specify the formatting of the title page PACS statement.
+%
+% Journals will override.
+% \begin{macrocode}
+\def\frontmatter@PACS@format{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@keys@format}
+% Specify the formatting of the title page keywords statement.
+%
+% Journals will override.
+% \begin{macrocode}
+\def\frontmatter@keys@format{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@finalspace}
+%
+% \begin{macrocode}
+\def\frontmatter@finalspace{\addvspace{18\p@}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@addressnewline}
+% \changes{v4.h}{1998/06/25}
+% {new hook}
+% The definition of \cmd\\\ for address handling. Default puts all the `lines'
+% on a run-in line, separated by comma and space.
+% DPC: was \newline space between lines of addresss.
+% \begin{macrocode}
+\def\frontmatter@addressnewline{%
+ \@ifhmode{\skip@\lastskip\unskip\unpenalty\break\hskip\skip@}{}%
+ % was: \vskip-.5ex
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\frontmatter@preabstractspace}
+% \begin{macro}{\frontmatter@postabstractspace}
+% Space above and space below abstract in title block
+% \begin{macrocode}
+\def\frontmatter@preabstractspace{5.5\p@}
+\def\frontmatter@postabstractspace{6.5\p@}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\aftermaketitle@chk}
+% Error-checking code.
+% \begin{macrocode}
+\def\aftermaketitle@chk#1{%
+ \@ifx{\maketitle\relax}{%
+ \class@err{\protect#1 must be used before \protect\maketitle}%
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ps@titlepage}
+% Default page style for title page.
+% Journals will override this procedure.
+% \begin{macrocode}
+\def\ps@titlepage{\ps@empty}%
+% \end{macrocode}
+% \end{macro}
+%
+%FIXME: there is a limitation to the default meaning of
+% \cmd\@startpage, the label ``FirstPage'' is only
+% defined if the document has a \cmd\maketitle\ command.
+%
+% \begin{macrocode}
+\def\volumeyear#1{\gdef\@volumeyear{#1}}%
+\def\@volumeyear{}%
+\def\volumenumber#1{\gdef\@volumenumber{#1}}%
+\def\@volumenumber{}%
+\def\issuenumber#1{\gdef\@issuenumber{#1}}%
+\def\@issuenumber{}%
+\def\eid#1{\gdef\@eid{#1}}%
+\def\@eid{}%
+%
+\def\startpage#1{\gdef\@startpage{#1}\c@page#1\relax}%
+\def\@startpage{\pageref{FirstPage}}%
+\def\endpage#1{\gdef\@endpage{#1}}%
+\def\@endpage{\pageref{LastPage}}%
+% \end{macrocode}
+%
+%
+% \subsection{Printing out the ``list-of'' elements}%
+%
+% FIXME: The \cmd\appendix@toc\ procedure should change the meaning
+% of \cmd\l@section\ so that the \cmd\section s can be appropriately formatted,
+% reflecting their status as appendices.
+%
+% \begin{macrocode}
+\def\print@toc#1{%
+ \begingroup
+% \c@secnumdepth-\maxdimen
+ \expandafter\section
+ \expandafter*%
+ \expandafter{%
+ \csname#1name\endcsname
+ }%
+ \let\appendix\appendix@toc
+ \@starttoc{#1}%
+ \endgroup
+}%
+\def\appendix@toc{}%
+% \end{macrocode}
+%
+%
+% \section{Body}
+%
+% \subsection{counters}
+% The following definitions are probably identical to those in
+% \file{classes.dtx}%
+% \begin{macrocode}
+\def\labelenumi{\theenumi.}
+\def\theenumi{\arabic{enumi}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\labelenumii{(\theenumii)}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\labelenumiii{\theenumiii.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\labelenumiv{\theenumiv.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\labelitemi{\textbullet}
+\def\labelitemii{\normalfont\bfseries\textendash}
+\def\labelitemiii{\textasteriskcentered}
+\def\labelitemiv{\textperiodcentered}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\pagenumbering{arabic}
+% \end{macrocode}
+%
+% \subsection{float parameters}
+%
+% from the old aps.sty. (DPC: same as article I think)
+% AO: here, \LaTeX's standard classes fail very poorly
+% (the price of backward compatability): the values for
+% \cmd\floatpagefraction\ and \cmd\dblfloatpagefraction\
+% need to be raised to avoid creating extremely short
+% float pages.
+% \begin{macrocode}
+\setcounter{topnumber}{2}
+\def\topfraction{.9}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.9}
+\setcounter{totalnumber}{3}
+\def\textfraction{.1}
+\def\floatpagefraction{.9}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.9}
+\def\dblfloatpagefraction{.9}
+% \end{macrocode}
+%
+% \subsection{List Environments}
+%
+% \begin{macrocode}
+\newenvironment{verse}{%
+ \let\\=\@centercr
+ \list{}{%
+ \itemsep\z@ \itemindent -1.5em\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]%
+}{%
+ \endlist
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newenvironment{quotation}{%
+ \list{}{%
+ \listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin \parsep \z@ \@plus\p@}\item[]%
+}{%
+ \endlist
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newenvironment{quote}{%
+ \list{}{%
+ \rightmargin\leftmargin}\item[]%
+}{%
+ \endlist
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\descriptionlabel#1{%
+ \hspace\labelsep \normalfont\bfseries #1%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newenvironment{description}{%
+ \list{}{%
+ \labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel
+ }%
+}{%
+ \endlist
+}%
+% \end{macrocode}
+%
+% \subsection{Sectioning Commands}
+%
+% \subsubsection{Counters and Their Productions}%
+% \begin{macrocode}
+\newcounter{part}
+\newcounter{section}
+\newcounter{subsection}[section]
+\newcounter{subsubsection}[subsection]
+\newcounter{paragraph}[subsubsection]
+\newcounter{subparagraph}[paragraph]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\thepart {\Roman{part}} %
+\def\thesection {\Roman{section}}
+\def\p@section {}
+\def\thesubsection {\Alph{subsection}}
+\def\p@subsection {\thesection\,}
+\def\thesubsubsection {\arabic{subsubsection}}
+\def\p@subsubsection {\thesection\,\thesubsection\,}
+\def\theparagraph {\alph{paragraph}}
+\def\p@paragraph {\thesection\,\thesubsection\,\thesubsubsection\,}
+\def\thesubparagraph {\arabic{subparagraph}}
+\def\p@subparagraph {\thesection\,\thesubsection\,\thesubsubsection\,\theparagraph\,}
+% \end{macrocode}
+%
+% \subsubsection{The Acknowledgments Environment}%
+% This user-level markup produces a head introducing
+% the acknowledgments, and acts as a wrapper for the text.
+% In this implementation, it is an unnumbered section,
+% but appears within the toc.
+%
+% For compatiability's sake, we implement it under the alternative
+% spelling \env{acknowledgements}.
+% \changes{v4.0beta 3}{1999/11/13}
+% {also spelled ``acknowledgements''.}
+% \changes{v4.0beta 4}{2000/05/18}
+% {But alternative spelling is deprecated.}
+% \begin{macrocode}
+\newenvironment{acknowledgments}{%
+ \acknowledgments@sw{%
+ \section*{\acknowledgmentsname}%
+ }{%
+ \par
+ \phantomsection
+ \addcontentsline{toc}{section}{\protect\numberline{}\acknowledgmentsname}%
+ }%
+}{%
+ \par
+}%
+\@booleantrue\acknowledgments@sw
+\newenvironment{acknowledgements}{%
+ \replace@environment{acknowledgements}{acknowledgments}%
+}{%
+ \endacknowledgments
+}%
+% \end{macrocode}
+%
+% \subsubsection{Part Opener}%
+% section setup copied verbatim from revtex3 aps/osa.
+% Does not explicitly depend on pointsize options.
+% \begin{macrocode}
+\def\part{\par
+ \addvspace{4ex}%
+ \@afterindentfalse
+ \secdef\@part\@spart}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@part[#1]#2{%
+ \@ifnum{\c@secnumdepth >\m@ne}{%
+ \refstepcounter{part}%
+ \addcontentsline{toc}{part}{\thepart\hspace{1em}#1}%
+ }{%
+ \addcontentsline{toc}{part}{#1}%
+ }%
+ \begingroup
+ \parindent \z@ \raggedright
+ \interlinepenalty\@M
+ \@ifnum{\c@secnumdepth >\m@ne}{%
+ \Large \bf \partname~\thepart%
+ \par\nobreak
+ }{}%
+ \huge \bf
+ #2%
+ \markboth{}{}\par
+ \endgroup
+ \nobreak
+ \vskip 3ex
+ \@afterheading
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@spart#1{{\parindent \z@ \raggedright
+ \interlinepenalty\@M
+ \huge \bf
+ #1\par}
+ \nobreak
+ \vskip 3ex
+ \@afterheading}
+% \end{macrocode}
+%
+% \subsubsection{Stacked Heads}%
+% Here are the class default definitions for sectioning commands.
+% A society or a journal substyle will likely override these definitions.
+%
+% In doing so, you can customize the formatting for a particular level by defining,
+% e.g., \cmd\@hangfrom@section\ or \cmd\@subsectioncntformat.
+% \begin{macrocode}
+\def\section{%
+ \@startsection
+ {section}%
+ {1}%
+ {\z@}%
+ {0.8cm \@plus1ex \@minus .2ex}%
+ {0.5cm}%
+ {\normalfont\small\bfseries}%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\subsection{%
+ \@startsection
+ {subsection}%
+ {2}%
+ {\z@}%
+ {.8cm \@plus1ex \@minus .2ex}%
+ {.5cm}%
+ {\normalfont\small\bfseries}%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\subsubsection{%
+ \@startsection
+ {subsubsection}%
+ {3}%
+ {\z@}%
+ {.8cm \@plus1ex \@minus .2ex}%
+ {.5cm}%
+ {\normalfont\small\itshape}%
+}%
+% \end{macrocode}
+%
+% \subsubsection{Runin Heads}%
+% \begin{macrocode}
+\def\paragraph{%
+ \@startsection
+ {paragraph}%
+ {4}%
+ {\parindent}%
+ {\z@}%
+ {-1em}%
+ {\normalfont\normalsize\itshape}%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\subparagraph{%
+ \@startsection
+ {subparagraph}%
+ {5}%
+ {\parindent}%
+ {3.25ex \@plus1ex \@minus .2ex}%
+ {-1em}%
+ {\normalfont\normalsize\bfseries}%
+}%
+% \end{macrocode}
+%
+%
+% \subsection{Math}
+%
+% \begin{macro}{\theequation}
+% We change the production of the equation counter so that
+% we can accomodate the \classoption{eqsecnum} option.
+% \begin{macrocode}
+\def\theequation{%
+ \theequation@prefix\arabic{equation}%
+}%
+\def\theequation@prefix{}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Type Size-Dependent Settings}
+%
+% Note that many parameters, as well as the meaning of
+% \cmd\normalsize, are deferred until
+% \cmd\AtEndOfClass\ time.
+% Therefore, code elsewhere in this class \emph{should not}
+% assume these things' values have been set!
+% \begin{macrocode}
+\AtEndOfClass{%
+ \expandafter\input\expandafter{\@pointsize pt\substyle@ext}%
+}%
+% \end{macrocode}
+%
+%
+% \subsection{All Point Sizes}
+% \begin{macrocode}
+\setcounter{secnumdepth}{4}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\lineskip 1pt
+\normallineskip 1pt
+\def\baselinestretch{1}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@lowpenalty 51
+\@medpenalty 151
+\@highpenalty 301
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@beginparpenalty -\@lowpenalty
+\@endparpenalty -\@lowpenalty
+\@itempenalty -\@lowpenalty
+% \end{macrocode}
+%
+% \begin{macrocode}
+\arraycolsep 3pt
+\tabcolsep 2pt
+\arrayrulewidth .4pt
+\doublerulesep 2pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\skip\@mpfootins = 0pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\fboxsep = 3.0pt
+\fboxrule = 0.4pt
+% \end{macrocode}
+%
+% \subsection{Figures}
+% \changes{v4.0beta 2}{1999/06/20}
+% {Processing delayed to \cs{AtBeginDocument} time}
+%
+% \begin{environment}{figure}
+% We define the \env{figure} environment.
+% Later, we will horse around with its meaning
+% in order to accomodate \cmd\floats@sw.
+% \begin{macrocode}
+\newenvironment{figure}
+ {\@float{figure}}
+ {\end@float}
+\newenvironment{figure*}
+ {\@dblfloat{figure}}
+ {\end@dblfloat}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\@makecaption}
+% If caption is one line long, to be centered; if lines turn, then set justified.
+% \begin{macrocode}
+\newlength\abovecaptionskip
+\newlength\belowcaptionskip
+\setlength\abovecaptionskip{10\p@}
+\setlength\belowcaptionskip{2\p@}
+% \end{macrocode}
+%
+% \changes{v4.0beta 2}{1999/06/20}
+% {One-line caption sets flush left.}
+% \changes{v4.0beta 3}{1999/11/13}
+% {Prevent an inner footnote from performing twice}
+% \begin{macrocode}
+\long\def\@makecaption#1#2{%
+ \par
+% \nobreak
+ \vskip\abovecaptionskip
+ \begingroup
+ \small\rmfamily
+ \sbox\@tempboxa{%
+ \let\\\heading@cr
+ #1: #2%
+ }%
+ \@ifdim{\wd\@tempboxa >\hsize}{%
+ \begingroup
+ \samepage
+ \flushing
+ \let\footnote\@footnotemark@gobble
+ #1: #2\par
+ \endgroup
+ }{%
+ \global \@minipagefalse
+ \hb@xt@\hsize{\hfil\unhbox\@tempboxa\hfil}%
+ }%
+ \endgroup
+ \vskip\belowcaptionskip
+}%
+\def\@footnotemark@gobble{%
+ \@footnotemark
+ \@ifnextchar[{\@gobble@opt@i}{\@gobble}%
+}%
+\def\@gobble@opt@i[#1]#2{}%
+\def\@mpmakefntext#1{%
+ \flushing
+ \parindent=1em
+ \noindent
+ \hb@xt@1em{\hss\@makefnmark}%
+ #1%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\thefigure}
+% The figure counter and float placement defaults.
+% \begin{macrocode}
+\newcounter{figure}
+\renewcommand \thefigure {\@arabic\c@figure}
+% \end{macrocode}
+% Note that we give the `!' modifier by default.
+% This is an effort to avoid the syndrome wherein
+% a deferred float finds itself unqualified for
+% placement, thereby getting carried until \cmd\clearpage.
+% \begin{macrocode}
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{\figurename~\thefigure}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Deferring \env{figure} Floats}%
+%
+% We install a hook at \cmd\AtBeginDocument\ time which determines if
+% figures will float or will be deferred until
+% \cmd\printfigures\ time.
+% \begin{macrocode}
+\appdef\class@documenthook{%
+ \do@if@floats{figure}{.fgx}%
+}%
+\appdef\class@enddocumenthook{%
+ \printfigures\relax
+}%
+% \end{macrocode}
+%
+% \begin{macro}{\printfigures}
+% The user-level command \cmd\printfigures\ determines
+% where the figures are to appear in a document in which
+% \cmd\floats@sw\ is false.
+% If the user invokes the \classoption{endfloats} class option and fails to
+% insert a \cmd\printfigures\ command,
+% the figures will be printed at the end of the document.
+% If the command is given, but floats are not being deferred,
+% it amounts to a no-op.
+% \changes{v4.0beta 2}{1999/06/20}
+% {call \cs{print@floats}}
+% \changes{v4.0beta 3}{1999/11/13}
+% {*-form mandates pagebreak}
+% \begin{macrocode}
+\newcommand\printfigures{%
+ \@ifstar{\true@sw}{\floatp@sw{\true@sw}{\false@sw}}%
+ {%
+ \print@float{figure}{\oneapage}%
+ }{%
+ \print@float{figure}{}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@xfloat@prep}
+% We patch into the procedure \cmd\@xfloat@prep.
+% This patch applies to all floats (not \env{figure} alone)
+% and makes the type center.
+% \begin{macrocode}
+\appdef\@xfloat@prep{%
+ \appdef\@parboxrestore{\centering}%
+ \let\@makefnmark\@makefnmark@latex
+ \let\@footnotemark\@footnotemark@latex
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Tables}
+% \changes{v4.0beta 2}{1999/06/20}
+% {Processing delayed to \cs{AtBeginDocument} time}
+%
+% DPC: More or less taken from \file{revtex2} \file{aps.sty},
+% but using dcolumn for decimal alignment.
+% \begin{environment}{table}
+% We define the \env{table} environment.
+% Later, we will horse around with its meaning
+% in order to accomodate \cmd\floats@sw.
+% \begin{macrocode}
+\newenvironment{table}
+ {\@float{table}}
+ {\end@float}
+\newenvironment{table*}
+ {\@dblfloat{table}}
+ {\end@dblfloat}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\thetable}
+% Table counter and default float placement declarations.
+% \begin{macrocode}
+\newcounter{table}
+\renewcommand\thetable{\@Roman\c@table}
+% \end{macrocode}
+% Note that we give the `!' modifier by default.
+% This is an effort to avoid the syndrome wherein
+% a deferred float finds itself unqualified for
+% placement, thereby getting carried until \cmd\clearpage.
+% \begin{macrocode}
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{\tablename~\thetable}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\table@hook}
+% \begin{macro}{\squeezetable}
+% Assign a meaning to the hook installed into float processing.
+%
+% By default floats are \cmd\small. The \cmd\squeezetable\ declaration
+% makes them smaller (\cmd\scriptsize). In general you can locally
+% redefine \cmd\table@hook\ to be whatever you like.
+% (DPC: |\Huge\color{magenta}|\ldots?)
+% \begin{macrocode}
+\def\table@hook{\small}%
+\def\squeezetable{\def\table@hook{\scriptsize}}%
+\appdef\@floatboxreset{\table@hook}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Deferring \env{table} Floats}%
+%
+% We install a hook at
+% \cmd\AtBeginDocument\ time which determines if
+% tables will float or will be deferred until
+% \cmd\printtables\ time.
+%
+% We also deal with the possibility of \env{longtable} environments.
+%
+% \begin{macrocode}
+\appdef\class@documenthook{%
+ \floats@sw{}{%
+ \let@environment{longtable@float}{longtable}%
+ \let@environment{longtable}{longtable@write}%
+ \let@environment{longtable*@float}{longtable*}%
+ \let@environment{longtable*}{longtable*@write}%
+ \let@environment{turnpage@float}{turnpage}%
+ \let@environment{turnpage}{turnpage@write}%
+ }%
+ \do@if@floats{table}{.tbx}%
+}%
+\appdef\class@enddocumenthook{%
+ \printtables\relax
+}%
+\newenvironment{longtable@write}{%
+ \write@@float{longtable}{table}%
+}{%
+ \endwrite@float
+}%
+\newenvironment{longtable*@write}{%
+ \write@@float{longtable*}{table}%
+}{%
+ \endwrite@float
+}%
+\newenvironment{turnpage@write}{%
+ \immediate\write\tablewrite{\string\begin{turnpage}}%
+}{%
+ \immediate\write\tablewrite{\string\end{turnpage}}%
+}%
+% \end{macrocode}
+%
+% \begin{macro}{\printtables}
+% The user-level command \cmd\printtables\ determines
+% where the tables are to appear in a document in which
+% \cmd\floats@sw\ is false.
+% If the user invokes the \classoption{nofloats} and fails to
+% insert a \cmd\printtables\ command,
+% the tables will be printed at the end of the document.
+% If the command is given, but floats are not being deferred,
+% it amounts to a no-op.
+% \changes{v4.0beta 2}{1999/06/20}
+% {only execute if appropriate}
+% \changes{v4.0beta 3}{1999/11/13}
+% {*-form mandates pagebreak}
+% \changes{v4.0beta 4}{2000/05/17}
+% {make longtable trigger the head, too}
+% \begin{macrocode}
+\newcommand\printtables{%
+ \begingroup
+ \let@environment{longtable}{longtable@float}%
+ \let@environment{longtable*}{longtable*@float}%
+ \let@environment{turnpage}{turnpage@anchored}%
+ \prepdef\longtable{\trigger@float@par}%
+ \expandafter\prepdef\csname longtable*\endcsname{\trigger@float@par}%
+ \expandafter\prepdef\csname table@floats\endcsname{%
+ \onecolumngrid@push
+ }%
+ \expandafter\appdef\csname endtable@floats\endcsname{%
+ \onecolumngrid@pop
+ }%
+ \@ifstar{\true@sw}{\floatp@sw{\true@sw}{\false@sw}}%
+ {%
+ \print@float{table}{\oneapage}%
+ }{%
+ \print@float{table}{}%
+ }%
+ \endgroup
+}%
+\newenvironment{turnpage@anchored}{%
+ \onecolumngrid@push
+ \setbox\z@\vbox to\textwidth\bgroup
+ \columnwidth\textheight
+}{%
+ \vfil
+ \egroup
+ \rotatebox{90}{\box\z@}%
+ \onecolumngrid@pop
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \section{Tabular}
+% Every tabular has a double (Scotch) rule above and below.
+% The column specifier ``d'' is implemented using the \classname{dcolumn}
+% package, if available.
+% FIXME: always load dcolumn!
+% \begin{macro}{\tabular@hook}
+% \begin{macro}{\endtabular@hook}
+% \begin{environment}{ruledtabular}
+% \begin{macrocode}
+\def\endtabular@hook{}%
+%\RequirePackage{dcolumn}%
+\appdef\class@documenthook{%
+ \@ifpackageloaded{dcolumn}{%
+ \newcolumntype{d}{D{.}{.}{-1}}%
+ }{}%
+}%
+\def\toprule{\hline\hline}%
+\def\colrule{\hline}%
+\def\botrule{\hline\hline}%
+\newenvironment{ruledtabular}{%
+ \def\array@default{v}%
+ \appdef\tabular@hook{\def\@halignto{to\hsize}}%
+ \let\tableft@skip@default\tableft@skip
+ \let\tableft@skip\tableft@skip@float
+ \let\tabmid@skip@default\tabmid@skip
+ \let\tabmid@skip\tabmid@skip@float
+ \let\tabright@skip@default\tabright@skip
+ \let\tabright@skip\tabright@skip@float
+ \let\array@row@pre@default\array@row@pre
+ \let\array@row@pre\array@row@pre@float
+ \let\array@row@pst@default\array@row@pst
+ \let\array@row@pst\array@row@pst@float
+ \appdef\array@row@rst{%
+ \let\array@row@pre\array@row@pre@default
+ \let\array@row@pst\array@row@pst@default
+ \let\tableft@skip\tableft@skip@default
+ \let\tabmid@skip\tabmid@skip@default
+ \let\tabright@skip\tabright@skip@default
+ \appdef\tabular@hook{\let\@halignto\@empty}%
+ }%
+}{%
+}%
+% \end{macrocode}
+% \end{environment}
+% \end{macro}
+% \end{macro}
+%
+% \section{Footnote Text}
+%
+% \changes{v4.g}{1998/06/10}
+% {single space footnotes}
+% \changes{v4.0beta 2}{1999/06/20}
+% {%
+% Frank Mittelbach, has stated in \protect\classname{multicol}:
+% ``The kernel command \cs{@footnotetext} should not be modified.''
+% Thus, I have removed David Carlisle's redefinition of that command.
+% Note, however, that later versions of \protect\classname{multicol} do not require
+% this workaround. Belt and suspenders.
+% }%
+%
+% \begin{macro}{\@makefntext}
+% \begin{macrocode}
+\def\@makefntext#1{%
+ \def\baselinestretch{1}%
+ \reset@font\footnotesize
+ \parindent 1em%
+ \noindent
+ \hb@xt@1.8em{%
+ \Hy@raisedlink{\hyper@anchorstart{footnote@\the\c@footnote}\hyper@anchorend}%
+ \hss\@makefnmark
+ }%
+ #1\par
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Citations, Bibliography, Endnotes}
+%
+% \subsubsection{Bibliography}
+%
+% Load Patrick Daly's \classname{natbib} package,
+% \url{ftp://ctan.tug.org/macros/latex/contrib/supported/natbib}
+%
+% Note that \classname{natbib} assumes that it loads
+% over a document class, such as the \classname{article} class,
+% that has already defined \env{thebibliography} and \cmd\@listi.
+%
+% Note also that \classname{natbib} also installs a command
+% \cmd\NAT@set@cites\ into \cmd\AtBeginDocument\ which presumes
+% that the proper \cmd\bibpunct\ command has been issued.
+%
+% We have a problem with \classname{natbib} in that it does not
+% accomodate late binding of its package options. This means
+% that those options must be known at the time the package
+% loads. Therefore, we select \classoption{sort\&compress}
+% now, and thereby foreclose on alternative uses of \classname{natbib}.
+%
+% Certain societies may prefer an alternative; they are out of luck.
+% If you find yourself in this position, please let the author
+% of \classname{natbib} know that his package should be modified to
+% accomodate late binding of package options.
+%
+% To remedy the situation, note that the macro \cmd\NAT@sort\ controls
+% whether citations are left alone (\cmd\NAT@sort=0), sorted (\cmd\NAT@sort=1), or sorted and compressed (\cmd\NAT@sort=2).
+% Since we give \classname{natbib} the \classoption{sort\&compress} option,
+% if you prefer \classoption{sort}, you need only define \cmd\NAT@sort\ to be 1.
+% However, if you prefer the effect of having neither \classoption{sort} nor \classoption{sort\&compress},
+% you must define \cmd\NAT@sort\ to be 0 and you must also define
+% \cmd\NAT@sort@cites:
+%\begin{verbatim}
+%\renewcommand\NAT@sort@cites[1]{\edef\NAT@cite@list{#1}}%
+%\end{verbatim}
+%
+% For other \classname{natbib} customizations, you may proceed as if you were going to use
+% the \file{natbib.cfg} file: anything that you can modify by this means is fair game.
+% Once \revtex\ is finished loading, you can assert any definitions for \classname{natbib} that you wish.
+%
+% \begin{macrocode}
+\newenvironment{thebibliography}{}{}%
+\let\@listi\@empty
+\RequirePackage[sort&compress]{natbib}[1999/05/28 7.0]%
+\let\NAT@thebibliography\thebibliography
+\let\NAT@endthebibliography\endthebibliography
+\let\bibliographystyle@latex\bibliographystyle
+% \end{macrocode}
+%
+% \begin{macro}{\NAT@citesuper}
+% We redefine \classname{natbib}'s procedure \cmd\NAT@citesuper,
+% which is executed when setting a superscript citation.
+% The \cmd\hspace\ is removed: in any case, it
+% should really be \cmd\hspace*, to prevent an unwanted pagebreak.
+% \begin{macrocode}
+\renewcommand\NAT@citesuper[3]{%
+ \ifNAT@swa
+ \leavevmode
+ \unskip
+% \hspace{1\p@}%
+ \textsuperscript{#1}%
+ \if*#3*\else\ (#3)\fi
+ \else
+ #1%
+ \fi
+ \endgroup
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@makefnmark@cite}
+% We define a procedure that will set a footnote mark the same way that
+% a citation is set. If footnotes are put in the bibliography with
+% \cmd\footinbib@sw, then the corresponding mark should look the same
+% as the result of a \cmd\cite. This is how we do it.
+% \begin{macrocode}
+\def\@makefnmark@cite{\begingroup\NAT@swatrue\@cite{{\@thefnmark}}{}{}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bibliographystyle}
+% We arrange for the selection of bibliography style
+% to occur either due to the document's explicit
+% \cmd\bibliographystyle\ statement or
+% via the journal substyle.
+%
+% Note that \revtex\ is now incompatible with
+% any package that patches \cmd\bibliographystyle,
+% except for those (like \classname{natbib}) that load before here.
+% \begin{macrocode}
+\let\bibliographystyle@latex\bibliographystyle
+\def\bibliographystyle{\def\@bibstyle}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bibsection}
+% \begin{macro}{\NAT@bibsetnum}
+% \begin{macro}{\NAT@bibsetup}
+% \begin{macro}{\bibpreamble}
+% \begin{macro}{\newblock}
+% \begin{macro}{\bibnumfmt}
+% We define the sectioning command to use when starting the bibliography
+% and gently coax \classname{natbib} into using
+% the formatting procedures that \emph{we} want it to use.
+%
+% This way of setting up \env{thebibliography}
+% automatically sets the label width based on
+% the largest number used within the bibliography.
+% This scheme will not work properly using the
+% author/year style of bib entry, though.
+%
+% We define \cmd\bibnumfmt\ to be \cmd\place@bibnumber, which is a macro
+% managed by \revtex. If the document defines \cmd\bibnumfmt, then that
+% definition will be used instead, which is what the \classname{natbib}
+% package gives as its programming interface.
+%
+% And if the substyle does not give a meaning to \cmd\place@bibnumber,
+% we give it that of the original \cmd\bibnumfmt.
+% \begin{macrocode}
+\def\bibsection{%
+ \@ifx@empty\refname{%
+ \par
+ }{%
+ \let\@hangfroms@section\@hang@froms
+ \section*{\refname}%
+ \@nobreaktrue
+ }%
+}%
+\let\NATx@bibsetnum\NAT@bibsetnum
+\def\NAT@bibsetnum#1{%
+ \setlength{\topsep}{\z@}%
+ \NATx@bibsetnum{\ref{LastBibItem}}%
+}%
+\let\NATx@bibsetup\NAT@bibsetup
+\def\NAT@bibsetup{%
+ \setlength{\labelwidth}{\z@}%
+ \setlength{\labelsep}{\z@}%
+ \setlength{\itemindent}{\z@}%
+ \setlength{\listparindent}{\z@}%
+ \setlength{\topsep}{\z@}%
+ \setlength{\parsep}{\z@}%
+ \NATx@bibsetup
+}%
+\let\bibpreamble\@empty
+\def\newblock{\ }%
+\let\NATx@bibnumfmt\bibnumfmt
+\def\bibnumfmt{\place@bibnumber}%
+\AtEndOfClass{%
+ \appdef\class@documenthook{%
+ \@ifxundefined\place@bibnumber{%
+ \let\place@bibnumber\NATx@bibnumfmt
+ }{}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\NAT@onlinecite}
+% We anticipate using numerical citations.
+% If superscript citations are used, we nonetheless need a way to
+% use numerical citations as required by the author.
+% These should be accessible via the \cmd\citet\ command.
+%
+% Therefore we remember how to do a numerical citation
+% even when the superscript citation has been selected.
+%
+% Can you say ``inelegant hack''? I knew you could!
+% \begin{macrocode}
+\let\NAT@citeyear\citeyear
+\def\NAT@onlinecite#1{%
+ \begingroup
+ \let\@cite\NAT@citenum
+ \let\NAT@mbox\mbox
+ \let\citeyear\NAT@citeyear
+ \def\NAT@space{ }%
+ \cite{#1}%
+ \endgroup
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{+}
+% \begin{macro}{\textcite}
+% We extend \classname{natbib}'s syntax with two commands to set a citation
+% on the baseline (as opposed to superscripted) and as text (rather than parenthetical), respectively.
+% A journal substyle that makes citations be superscripted or parenthetical as the case may be, should ensure
+% that the author has continued access to these two styles.
+%
+% \begin{macrocode}
+\appdef\class@inithook{%
+ \@ifxundefined\@onlinecite{\def\@onlinecite{\citealp}}{}%
+ \@ifxundefined\@textcite{\def\@textcite{\citet}}{}%
+}%
+\DeclareRobustCommand\onlinecite{\@onlinecite}%
+\DeclareRobustCommand\textcite{\@textcite}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{environment}{thebibliography}%
+% \begin{macro}{\present@bibnote}%
+% We put a tail patch into \cmd\thebibliogrphy\ and
+% a headpatch into \cmd\endthebibliography.
+%
+% We also apply a fix to the \cmd\list\ procedure
+% so that, at least within the bibliography,
+% items are not formatted via \cmd\parshape,
+% which caused problems during column balancing.
+% (Other list-like environments may also require fixing,
+% but we will save that for another day.)
+%
+% Here we provide a default treatment for frontmatter notes
+% deferred to the bibliography; a journal substyle
+% might want to override the definition of \cmd\present@bibnote.
+% \begin{macrocode}
+\renewenvironment{thebibliography}[1]{%
+ \NAT@thebibliography{#1}%
+ \@clubpenalty\clubpenalty
+ \let\@TBN@opr\present@bibnote
+ \@FMN@list
+}{%
+ \@endnotesinbib
+ \edef\@currentlabel{\arabic{NAT@ctr}}%
+ \label{LastBibItem}%
+ \NAT@endthebibliography
+ \global\let\auto@bib\@empty
+}%
+\def\present@bibnote#1#2{%
+ \item[%
+ \textsuperscript{%
+ \normalfont
+ \Hy@raisedlink{\hyper@anchorstart{frontmatter@#1}\hyper@anchorend}%
+ \begingroup
+ \c@footnote#1\relax
+ \frontmatter@thefootnote
+ \endgroup
+ }%
+ ]#2\par
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{environment}
+%
+% \begin{macro}{\place@bibnumber@sup}
+% \begin{macro}{\place@bibnumber@inl}
+% For producing the \cmd\bibitem\ device,
+% we define two procedures to select from.
+%
+% Note that we could have used \classname{natbib}'s \cmd\ifNAT@super\
+% switch, but it does not allow for altering the meaning of \cmd\bibnumfmt.
+% \begin{macrocode}
+\def\place@bibnumber@sup#1{\textsuperscript{#1}}%
+\def\place@bibnumber@inl#1{[#1]}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%% \begin{macro}{\@cite}
+%% \begin{macro}{\nocite}
+% \begin{macro}{write@bibliographystyle}
+% We wish to delay committing the \cmd\bibliographystyle\ until as late as possible.
+% The journal substyle will define a default bibliography style, and
+% the document's explicit \cmd\bibliographystyle\ command, if any, will override that default.
+%% For the sake of Bib\TeX, we must execute the \cmd\bibliographystyle\ command
+%% (putting a \cmd\bibstyle\ command into the auxiliary file)
+%% somewhere before the first \cmd\cite\ command (or any other like command),
+%% which puts a \cmd\citation\ command into the auxiliary file.
+%%
+%% Therefore, we headpatch the two procedures in \classname{natbib} that can result in
+%% the appearance in the auxiliary file of a \cmd\citation\ command.
+%% These two procedures are \cmd\@cite\ and \cmd\nocite.
+%%
+%% Not!
+%
+% The \cmd\bibstyle\ command may appear quite late in the \filename{.aux} file.
+% We now delay the automatic writing of the \cmd\bibstyle\ command to the end of the job.
+%
+% The procedure \cmd\write@bibliographystyle\ tests whether a \cmd\bibliographystyle\ command has
+% already been given.
+% If not, it effectively executes the needed \cmd\bibliographystyle\ command, then neutralizes itself
+% (we only need to do this once per job).
+%
+% \begin{macrocode}
+%\AtBeginDocument{%
+% \let\natbib@@cite\@cite
+% \def\@cite{\write@bibliographystyle\natbib@@cite}%
+% \let\natbib@nocite\nocite
+% \def\nocite{\write@bibliographystyle\natbib@nocite}%
+%}%
+\def\write@bibliographystyle{%
+ \@ifxundefined\@bibstyle{}{%
+ \expandafter\bibliographystyle@latex\expandafter{\@bibstyle}%
+ }%
+ \global\let\write@bibliographystyle\relax
+}%
+\AtEndDocument{\write@bibliographystyle}%
+% \end{macrocode}
+% \end{macro}
+%% \end{macro}
+%% \end{macro}
+%
+% \begin{macro}{\super@cite}
+% \begin{macro}{\super@cite@}
+% The \cmd\super@cite\ procedure takes the place of \cmd\@citex\ and implements the feature of the
+% \classoption{citeautoscript} class option.
+% This means that the document should be marked up as if citations were \emph{not} superscripted,
+% and then if you select a journal substyle that has superscripted citations, \revtex\ will do its best
+% to alter the formatting of the \cmd\cite s to accomodate superscript style.
+%
+% Note that the commands \cmd\onlinecite\ and \cmd\textcite\ are not affected by this procedure.
+%
+% Here's a subtle one: when is the argument of \cmd\super@cite@@\ not the same as the token \cmd\@let@token?
+% Answer: when the latter is \cmd\@sptoken! This case has to be handled separately.
+%
+% \begin{macrocode}
+\def\super@cite[#1][#2]#3{%
+ \leavevmode
+ \skip@\lastskip
+ \unskip
+ \begingroup
+ \def\@tempa{[#1][#2]{#3}}%
+ \super@cite@
+}%
+\def\super@cite@{%
+ \futurelet\@let@token\super@cite@@
+}%
+\long\def\super@cite@@#1{%
+ \@ifx{\@let@token\@sptoken}{%
+ \aftergroup\@sptoken\false@sw
+ }{%
+ \@ifx{\@let@token.}{\true@sw}{%
+ \@ifx{\@let@token,}{\true@sw}{%
+ \@ifx{\@let@token'}{\true@sw}{%
+ \@ifx{\@let@token)}{\true@sw}{%
+ \false@sw
+ }%
+ }%
+ }%
+ }%
+ }%
+ {%
+ #1%
+ \super@cite@
+ }{%
+ \expandafter\@citex@NAT\@tempa\endgroup
+ #1%
+ }%
+}%
+\AtBeginDocument{%
+ \citeautoscript@sw{%
+ \@ifx{\place@bibnumber\place@bibnumber@sup}{%
+ \let\@citex@NAT\@citex\let\@citex\super@cite
+ }{}%
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% Resolve an incompatability between \classname{natbib} and \classname{listings}.
+% The latter package tests \cmd\chapter (which has now been \cmd\let\ to \cmd\relax\ as a side effect \classname{natbib}'s use of \LaTeX's \cmd\@ifundefined).
+%
+% We couch our fix in such terms that will not be disruptive if \cmd\chapter\ is actually defined at this point.
+% \begin{macrocode}
+\@ifx{\chapter\relax}{\let\chapter\@undefined}{}%
+% \end{macrocode}
+%
+%
+% \subsubsection{\cs{endnote}s and \cs{rtx@bibnote}s}
+% FIXME: check hyperref compatibility!
+%
+% \begin{macro}{\mini@note}
+% \begin{macro}{\save@note}
+% \begin{macrocode}
+\def\mini@note{\save@note\mini@notes}%Implicit #1
+\def\save@note#1#2{%
+ \stepcounter{footnote}%
+ \protected@xdef\@thefnmark{\the\c@footnote}%
+ \@footnotemark
+ \expandafter\g@addto@macro
+ \expandafter#1%
+ \expandafter{%
+ \expandafter \@@footnotetext
+ \expandafter {\@thefnmark}{#2}%
+ }%
+}%
+\long\def\@@footnotetext#1{\def\@thefnmark{#1}\@footnotetext}%
+\let\mini@notes\@empty
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\endnote}
+% A version of footnote that appears at the end of the document.
+% Actually it just appears where \cmd\printendnotes\ appears.
+% \begin{macrocode}
+\def\endnote{%
+ \begingroup
+ \aftergroup\@footnotemark
+ \aftergroup\@endnotetext
+ \@ifnextchar[{%
+ \@xendnote
+ }{%
+ \stepcounter{footnote}%
+ \protected@xdef\@tempa{\thefootnote}%
+ \expandafter\@xendnote\expandafter[\@tempa]%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@xendnote}
+% \begin{macrocode}
+\def\@xendnote[#1]{%
+ \begingroup
+ \c@footnote#1\relax
+ \unrestored@protected@xdef\@thefnmark{endnote\thefootnote}%
+ \endgroup
+ \endgroup
+}%
+\def\@endnotemark{%
+ \expandafter\cite\expandafter{\@thefnmark}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\endnote@ext}
+% \begin{macrocode}
+\def\endnote@ext{.end}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@endnotetext}
+% The commands \cmd\label, \cmd\index, and \cmd\glossary,
+% which are robustified for \cmd\markright\ and \cmd\addcontentsline,
+% are likewise robustified here.
+%
+% Note the similarity to \cmd\protected@write.
+% \begin{macrocode}
+\long\def\@endnotetext#1{%
+ \@ifxundefined\@endnoteout{%
+ \newwrite\@endnoteout
+ \gdef\endnote@stream{\jobname\endnote@ext}%
+ \immediate\openout\@endnoteout\endnote@stream\relax
+ }{}%
+ \begingroup
+ \let\label\relax \let\index\relax \let\glossary\relax
+ \let\cite \relax \let\ref \relax \let\pageref \relax
+ \let\( \relax \let\) \relax \let\\ \relax
+% \let\protect\noexpand
+ \let \protect \@unexpandable@protect
+ \newlinechar`\^^M%
+% \newlinechar`\ %
+ \immediate\write\@endnoteout{\string\@doendnote{\@thefnmark}{#1}}%
+ \endgroup
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\endnotetext}
+% \begin{macrocode}
+\def\endnotetext{%
+ \@ifnextchar[{%
+ \@xendnotenext
+ }{%
+ \protected@xdef\@thefnmark{\thefootnote}%
+ \@endnotetext
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@xendnotenext}
+% \begin{macrocode}
+\def\@xendnotenext[#1]{%
+ \begingroup
+ \c@footnote#1\relax
+ \unrestored@protected@xdef\@thefnmark{\thefootnote}%
+ \endgroup
+ \@endnotetext
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\printendnotes}
+% \begin{macrocode}
+\def\printendnotes{%
+ \@ifx{\@endnoteout\@undefined}{}{%
+ \begingroup
+ \c@secnumdepth-\maxdimen
+ \section{%
+ \notesname
+ }%
+ \immediate\closeout\@endnoteout
+ \global\let\@endnoteout\@undefined
+ \begin{enumerate}%
+ \makeatletter
+ \input{\endnote@stream}%
+ \end{enumerate}%
+ \endgroup
+ }%
+}%
+\appdef\class@enddocumenthook{%
+ \printendnotes
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\firstnote@num}
+% \begin{macro}{\set@firstnote}
+%
+% In \revtex, we have permanently altered the way
+% that the footnote counter gets reset at the beginning
+% of the document.
+%
+% If footnotes appear in the bibliography, we initialise
+% the footnote counter to number of cites (found last time)
+% via \cmd\set@firstnote.
+%
+% \begin{macrocode}
+\mathchardef\firstnote@num\z@
+\appdef\class@documenthook{%
+ \global\c@footnote\firstnote@num
+ \appdef\maketitle{\global\c@footnote\firstnote@num}%
+}%
+\def\set@firstnote#1{%
+ \@ifnum{\firstnote@num=#1\relax}{}{%
+ \class@warn@end{Endnote numbers changed: rerun LaTeX}%
+ }%
+ \immediate\write\@mainaux{%
+ \global\chardef\string\firstnote@num#1\relax
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@endnotesinbib}
+% \begin{macro}{\@endnotesinbibliography}
+% We define a function \cmd\@endnotesinbib,
+% and a variant \cmd\@endnotesinbibliography.
+% The former is invoked at the start of
+% the end processing for \enve{thebibliography};
+% the latter is a synonym.
+%
+% The procedure typesets the footnotes that are to
+% appear in the bibliography; the default is to
+% simply arrange for the footnote counter to be
+% reset at the start of the document.
+%
+% The switchover to setting footnotes in the bibliography
+% is done via \cmd\AtBeginDocument\ code that
+% changes the meaning of \cmd\footnote\ and
+% that substitutes the synonym for
+% \cmd\@endnotesinbib.
+%
+% Note that this code make the assumption that
+% the counter used in \env{thebibliography} is \cmd\c@NAT@ctr.
+%
+% \begin{macrocode}
+\def\@endnotesinbib{%
+ \set@firstnote\z@
+}%
+\def\@endnotesinbibliography{%
+ \expandafter\set@firstnote\expandafter{\the\c@NAT@ctr}%
+ \@ifx{\@endnoteout\@undefined}{}{%
+ \immediate\closeout\@endnoteout
+ \global\let\@endnoteout\@undefined
+ \makeatletter
+ \input{\endnote@stream}%
+ }%
+}%
+\appdef\class@documenthook{%
+ \let\@makefnmark@latex\@makefnmark
+ \let\@footnotemark@latex\@footnotemark
+ \footinbib@sw{%
+ \let\footnote\endnote
+ \let\@footnotemark\@endnotemark
+ \let\@makefnmark\@makefnmark@cite
+ \let\@endnotesinbib\@endnotesinbibliography
+ \appdef\class@enddocumenthook{\auto@bib}%
+ \let\printendnotes\relax
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\auto@bib}
+% Under some circumstances, we must typeset the bibliography automatically.
+% For instance, the document specifies footnotes in the bibliography, but contains
+% no bibliography.
+%
+% Note that this facility is not able to work more than once per document.
+% If multiple bibliographys are required (e.g., per article), it will be the responsibility of the journal style
+% to restore \cmd\auto@bib\ to its original meaning so it can be re-invoked.
+% \begin{macrocode}
+\def\auto@bib{%
+ \@ifx@empty\@FMN@list{%
+ \@ifxundefined\@endnoteout{%
+ \false@sw
+ }{%
+ \true@sw
+ }%
+ }{%
+ \true@sw
+ }{%
+ \begin{thebibliography}{}\end{thebibliography}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@doendnote}
+% \begin{macrocode}
+\def\@doendnote#1#2{\bibitem{#1}#2}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \section{Initial setup}
+% \changes{v4.0beta 2}{1999/06/20}
+% {Defer assignment until \cs{AtBeginDocument} time.}
+% Note that this code is executed at \cmd\AtBeginDocument\ time
+% in order to handle a particular timing problem.
+% Please do not move this code any earlier!
+% \begin{macrocode}
+\appdef\class@documenthook{%
+% \end{macrocode}
+% We assert our own page style only if nobody else has done so.
+% Users wishing to customize their documents will be able to invoke a \cmd\pagestyle\
+% command anywhere in the preamble.
+% \begin{macrocode}
+ \@ifxundefined\@evenhead{%
+ \@ifxundefined\@oddhead{%
+ \@ifxundefined\@oddfoot{%
+ \@ifxundefined\@evenfoot{%
+ \preprintsty@sw{%
+ \ps@preprint
+ }{%
+ \ps@article
+ }%
+ }{}%
+ }{}%
+ }{}%
+ }{}%
+ \pagenumbering{arabic}%
+ \normalsize
+ \tabbingsep \labelsep
+ \leftmargin\leftmargini
+ \labelwidth\leftmargin\advance\labelwidth-\labelsep
+ \let\@listi\@listI
+ \@listi
+% \end{macrocode}
+%
+% \begin{macrocode}
+%\twoside@sw{}{%
+% \raggedbottom
+%}%
+% \end{macrocode}
+% We make sure that the ``environment'' component mark is set.
+% \begin{macrocode}
+ \def\curr@envir{document}%
+ \mark@envir{\curr@envir}%
+% \end{macrocode}
+%
+% \changes{v4.0beta 3}{1999/11/13}
+% {Grid changes with ltxgrid}
+% \changes{v4.0beta 4}{2000/04/10}
+% {Also alter how lists get indented.}
+% When setting the column grid, we have to alter the procedure
+% for formatting lists. Because \cmd\twocolumngrid\ requires
+% rebalancing columns at some points, lists must \emph{not}
+% involve the use of \cmd\moveleft, \cmd\moveright, or \cmd\parshape.
+% The alternative procedure only involves the manipulation of
+% \cmd\leftskip\ and \cmd\rightskip.
+%
+% FIXME: Always sloppy??
+% \begin{macrocode}
+ \twocolumn@sw{%
+ \open@column@mlt\tw@
+ \set@colht
+ \@floatplacement
+ \@dblfloatplacement
+ \sloppy
+ \@booleanfalse\raggedcolumn@sw
+ \let\set@listindent\set@listindent@
+ }{%
+ \open@column@one\@ne
+ \set@colht
+ \@floatplacement
+ \@dblfloatplacement
+ \sloppy
+% \raggedbottom
+ \let\set@listindent\set@listindent@parshape
+ }%
+}%
+% \end{macrocode}
+%
+%
+% \section{\cs{appendix}}
+%
+% \begin{macrocode}
+%\newif\ifappendixon
+% \end{macrocode}
+% Note that, within appendices,
+% equations are numbered within sections (appendices).
+% \begin{macrocode}
+\def\appendix{%
+ \par
+%\appendixontrue
+ \setcounter{section}\z@
+ \setcounter{subsection}\z@
+ \setcounter{subsubsection}\z@
+ \def\thesubsection{\arabic{subsection}}%
+ \def\thesubsubsection{\alph{subsubsection}}%
+ \@addtoreset{equation}{section}%
+ \def\theequation@prefix{\thesection}%
+ \addtocontents{toc}{\protect\appendix}%
+ \@ifstar{%
+ \def\thesection{\unskip}%
+ \def\theequation@prefix{A.}%
+ }{%
+ \def\thesection{\Alph{section}}%
+ }%
+}%
+% \end{macrocode}
+%
+% \section{Changing the page grid}
+% \changes{v4.0beta 2}{1999/06/20}
+% {Define three separate environments,
+% defer assignment to \cs{AtBeginDocument} time.
+% }
+%
+% \subsection{Avoiding Grid Changes}%
+%
+% In preprint styles, ``wide text'' is a no-op, and the title page
+% processing involves no grid change.
+%
+% \begin{macro}{\title@column@default}%
+% \begin{macro}{\close@column@default}%
+%
+% \begin{macrocode}
+\def\title@column@default#1{%
+ \minipagefootnote@init
+ #1%
+ \minipagefootnote@foot
+}%
+\def\close@column@default{%
+ \newpage
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Galley Style: Margin Changes}%
+% A variant of preprint processing. Emulate journal appearance somewhat.
+%
+% \begin{environment}{widetext@galley}
+% DPC: We're in galley style so do a lob sided display environment.
+%
+% QUERY: How can we be sure that we are in galley style?
+% ANSWER: as noted elsewhere, require both \cmd\twocolumn@sw\ and \cmd\preprintsty@sw\ to be false.
+% \begin{macrocode}
+\def\galley@outdent{\rightmargin-\columnwidth\advance\rightmargin-\columnsep}%
+\let\widetext@outdent\@empty
+\newenvironment{widetext@galley}{%
+ \list{}{%
+ \topsep \z@skip
+ \listparindent \parindent
+ \itemindent \parindent
+ \leftmargin \z@
+ \parsep \z@\@plus\p@
+ \widetext@outdent
+ \relax
+ }%
+ \item\relax
+}{
+ \endlist
+}%
+% \end{macrocode}
+% \end{environment}
+%
+%
+% \subsection{Grid Changing Via \classname{ltxgrid}}%
+%
+% In case \classoption{twocolumngrid} has been invoked,
+% switch column grid using the column grid-changing commands.
+% Supply stub definitions of those commands here.
+% \changes{v4.0beta 3}{1999/11/13}
+% {grid changes with ltxgrid}
+%
+% \begin{macro}{\title@column@grid}%
+% \begin{macro}{\close@column@grid}%
+% The title block always starts at the top of a new page.
+% \changes{v4.0beta 3}{1999/11/13}
+% {grid changes with ltxgrid}
+%
+% Note that, for the procedure \cmd\close@column@grid,
+% we balance columns by switching to the one-column page grid,
+% then we return to a two-column page grid in anticipation of the
+% upcoming \cmd\clearpage.
+% \begin{macrocode}
+\def\title@column@grid#1{%
+ \minipagefootnote@init
+ \onecolumngrid
+ \begingroup
+ \let\@footnotetext\frontmatter@footnotetext
+ \let\set@footnotewidth\set@footnotewidth@ii
+ #1%
+ \endgroup
+ \twocolumngrid
+ \minipagefootnote@foot
+}%
+\def\close@column@grid{%
+ \balancelastpage@sw{%
+ \onecolumngrid
+% \twocolumngrid
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{environment}{widetext@grid}
+% \changes{v4.0beta 3}{1999/11/13}
+% {grid changes via ltxgrid procedures}
+% \changes{v4.0beta 5}{2000/11/21}
+% {adornments above and below.}
+% We slip into the one-column page grid
+% within the scope of this environment.
+%
+% Note that we set adornments above and below the \env{widettext}.
+% These are set as leaders, so they will disappear at a page break.
+% \begin{macrocode}
+\newenvironment{widetext@grid}{%
+ \par\ignorespaces
+ \setbox\widetext@top\vbox{%
+ \vskip15\p@
+ \hb@xt@\hsize{%
+ \leaders\hrule\hfil
+ \vrule\@height6\p@
+ }%
+ \vskip6\p@
+ }%
+ \setbox\widetext@bot\hb@xt@\hsize{%
+ \vrule\@depth6\p@
+ \leaders\hrule\hfil
+ }%
+ \onecolumngrid
+ \dimen@\ht\widetext@top\advance\dimen@\dp\widetext@top
+ \cleaders\box\widetext@top\vskip\dimen@
+ \let\set@footnotewidth\set@footnotewidth@ii
+}{%
+ \par
+ \setbox\widetext@bot\vbox{%
+ \hb@xt@\hsize{\hfil\box\widetext@bot}%
+ \vskip14\p@
+ }%
+ \dimen@\ht\widetext@bot\advance\dimen@\dp\widetext@bot
+ \cleaders\box\widetext@bot\vskip\dimen@
+ \twocolumngrid\global\@ignoretrue
+ \@endpetrue
+}%
+\newbox\widetext@top
+\newbox\widetext@bot
+% \end{macrocode}
+% \end{environment}
+%
+%
+% Decide, finally, how the page grid is to be manipulated.
+% \begin{macrocode}
+\appdef\class@documenthook{%
+ \twocolumn@sw{%
+ \let@environment{widetext}{widetext@grid}%
+ \let\title@column\title@column@grid
+ \let\close@column\close@column@grid
+ }{%
+ \let@environment{widetext}{widetext@galley}%
+ \preprintsty@sw{%
+% \end{macrocode}
+% Change the page grid not at all.
+% \begin{macrocode}
+ }{%
+% \end{macrocode}
+% If we are galley style, change the page margin only.
+% \begin{macrocode}
+ \galley@sw{%
+ \let\widetext@outdent\galley@outdent
+ }{%
+ }%
+ }%
+ }%
+}%
+% \end{macrocode}
+%
+% \begin{macro}{\title@column}
+% Provide a default meaning for \cmd\title@column\
+% in case it was never defined.
+% \begin{macrocode}
+\appdef\class@inithook{%
+ \@ifxundefined\title@column{%
+ \let\title@column\title@column@default
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \section{Old font commands}
+%
+% \begin{macrocode}
+\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
+\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
+\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
+\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
+\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
+\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl}
+\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc}
+\DeclareRobustCommand*\cal{\@fontswitch\relax\mathcal}
+\DeclareRobustCommand*\mit{\@fontswitch\relax\mathnormal}
+% \end{macrocode}
+%
+% \section{English-Language Texts}
+% As this class is just for English language journals, we
+% could hardwire these texts,
+% but to make it easier to use this as a
+% basis for the code for similar journal styles, separate out all the
+% fixed text strings into babel-style macros of the form
+% |\|\ldots|name|
+%
+% Note: for babel compatability, use version 1999/05/05 v3.6x or later.
+%
+% Some of these might need changing in the society-specific code.
+%
+% \begin{macro}{\today}
+% Procedure \cmd\today\ is used in the article class, but not in
+% this document class.
+% \begin{macrocode}
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\notesname}
+% Text entity \cmd\notesname\ is used in \cmd\printendnotes.
+% \begin{macrocode}
+\def\notesname{Notes}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\partname}
+% Text entity \cmd\partname\ is used in \cmd\@part.
+% \begin{macrocode}
+\def\partname{Part}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tocname}
+% Text entity \cmd\tocname\ is used in \cmd\tableofcontents,
+% as defined in the standard \LaTeX\ book class.
+% \begin{macrocode}
+\def\tocname{Contents}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\lofname}
+% Text entity \cmd\lofname\ is used in \cmd\listoffigures,
+% as defined in the standard \LaTeX\ book class.
+% \begin{macrocode}
+\def\lofname{List of Figures}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\lotname}
+% Text entity \cmd\lotname\ is used in \cmd\listoftables,
+% as defined in the standard \LaTeX\ book class.
+% \begin{macrocode}
+\def\lotname{List of Tables}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\refname}
+% Text entity \cmd\refname\ is used in \env{thebibliography}.
+% \begin{macrocode}
+\def\refname{References}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\indexname}
+% Text entity \cmd\indexname\ is used in \env{theindex},
+% as defined in the standard \LaTeX\ book class.
+% \begin{macrocode}
+\def\indexname{Index}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\figurename}
+% \changes{v4.0beta 2}{1999/06/20}
+% {Added localization of \cs{figuresname}}
+% Text entity \cmd\figurename\ is used in \env{figure},
+% \cmd\figuresname\ in \cmd\printfigures.
+% \begin{macrocode}
+\def\figurename{FIG.}
+\def\figuresname{Figures}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tablename}
+% \changes{v4.0beta 2}{1999/06/20}
+% {Added localization of \cs{tablesname}}
+% Text entity \cmd\tablename\ is used in \env{table},
+% \cmd\tablesname\ in \cmd\printtables.
+% \begin{macrocode}
+\def\tablename{TABLE}
+\def\tablesname{Tables}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\abstractname}
+% Text entity \cmd\abstractname\ is used in \env{abstract}.
+% \begin{macrocode}
+\def\abstractname{Abstract}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\appendixesname}
+% \begin{macro}{\appendixname}
+% Text entity \cmd\appendixesname\ is used in TOC.
+% \begin{macrocode}
+\def\appendixesname{Appendixes}%
+\def\appendixname{Appendix}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\acknowledgmentsname}
+% Text entity \cmd\acknowledgmentsname\ is used in \env{acknowledgments}.
+% \begin{macrocode}
+\def\acknowledgmentsname{Acknowledgments}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\journalname}
+% This should be set by the society journal options, eg `pra'.
+% \begin{macrocode}
+\def\journalname{??}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\copyrightname}
+% Default layout does not assign copyright, but a journal that wants
+% to might use this.
+% \begin{macrocode}
+\def\copyrightname{??}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\andname}
+% The text string ``and'' for use in author lists.
+% \begin{macrocode}
+\def\andname{and}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@pacs@name}
+% \begin{macro}{\@keys@name}
+% The text string prepended to PACS numbers, resp. to keywords.
+% \begin{macrocode}
+\def\@pacs@name{PACS numbers: }%
+\def\@keys@name{Keywords: }%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ppname}
+% The text string ``pp'' for use in page ranges.
+% \begin{macrocode}
+\def\ppname{pp}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\numbername}
+% The text string ``number'' for use in article reference.
+% \begin{macrocode}
+\def\numbername{number}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\volumename}
+% The text string ``volume'' for use in article reference.
+% \begin{macrocode}
+\def\volumename{volume}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Dated@name}
+% \begin{macro}{\Received@name}
+% \begin{macro}{\Revised@name}
+% \begin{macro}{\Accepted@name}
+% \begin{macro}{\Published@name}
+% These texts are used in the \cmd\date, et al. commands.
+% \begin{macrocode}
+\def\Dated@name{Dated: }%
+\def\Received@name{Received }%
+\def\Revised@name{Revised }%
+\def\Accepted@name{Accepted }%
+\def\Published@name{Published }%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \section{Legacy Commands}
+% We deffine some commands left over from version 3.1, or give default meanings.
+% Some definitions can be overridden
+% in the document preamble or in included packages.
+%
+% Note on the namespace: command names like \cmd\REV@\emph{name} are used here,
+% because it is not clear that any of this code is generally useful.
+% \begin{macrocode}
+\def\address{\replace@command\address\affiliation}%
+\def\altaddress{\replace@command\altaddress\altaffiliation}%
+\newenvironment{references}{%
+ \class@warn@end{The references environment is not supported; use thebibliography instead.}
+ \gdef\references{\thebibliography{}}\references
+}{%
+ \endthebibliography
+}%
+\def\draft{%
+ \class@warn@end{Command \string\draft\space is obsolete;^^JInvoke option draft instead.}%
+ \@booleantrue\draft@sw
+}%
+\def\tighten{%
+ \class@warn@end{Command \string\tighten\space is obsolete;^^JInvoke option tightenlines instead.}%
+ \@booleantrue\tightenlines@sw
+}%
+\def\tableline{%
+ \noalign{%
+ \class@warn@end{Command \string\tableline\space is obsolete;^^JUse \string\colrule\space instead.}%
+ \global\let\tableline\colrule
+ }%
+ \tableline
+}%
+\def\case{\replace@command\case\frac}%
+\def\slantfrac{\replace@command\slantfrac\frac}%
+\def\tablenote{\replace@command\tablenote\footnote}%
+\def\tablenotemark{\replace@command\tablenotemark\footnotemark}%
+\def\tablenotetext{\replace@command\tablenotetext\footnotetext}%
+% Lose the following definition:
+\DeclareRobustCommand\REV@text[1]{%
+ \relax
+ \ifmmode
+ \mathchoice
+ {\hbox{{\everymath{\displaystyle }#1}}}%
+ {\hbox{{\everymath{\textstyle }#1}}}%
+ {\hbox{{\everymath{\scriptstyle }\let\f@size\sf@size\selectfont#1}}}%
+ {\hbox{{\everymath{\scriptscriptstyle}\let\f@size\ssf@size\selectfont#1}}}%
+ \glb@settings
+ \else
+ \mbox{#1}%
+ \fi
+}%
+% Lose the following definition:
+\DeclareRobustCommand\REV@bbox[1]{%
+ \relax
+ \ifmmode
+ \mathchoice
+ {\hbox{{\everymath{\displaystyle }\boldmath$#1$}}}%
+ {\hbox{{\everymath{\textstyle }\boldmath$#1$}}}%
+ {\hbox{{\everymath{\scriptstyle }\boldmath$#1$}}}%
+ {\hbox{{\everymath{\scriptscriptstyle}\boldmath$#1$}}}%
+ \glb@settings
+ \else
+ \mbox{#1}%
+ \fi
+}%
+\DeclareRobustCommand\REV@bm[1]{%
+ \class@warn@end{To use \string\bm, please load the bm package!}%
+ \global\let\bm\relax
+}%
+\def\FL{\obsolete@command\FL}%
+\def\FR{\obsolete@command\FR}%
+\def\narrowtext{\obsolete@command\narrowtext}%
+\def\mediumtext{\obsolete@command\mediumtext}%
+\newenvironment{quasitable}{%
+ \let@environment{tabular}{longtable}%
+}{%
+}%
+% \end{macrocode}
+%
+% \begin{macro}{\text}
+% \begin{macro}{\bm}
+% \begin{macro}{\bibinfo}
+% \begin{macro}{\eprint}
+% \begin{macro}{\url}
+%
+% If not otherwise defined, give default meanings to certain commands.
+% \changes{v4.0beta 4}{2000/04/10}
+% {eprint takes an aoptional argument, syntactical only in this case.}
+% \begin{macrocode}
+\appdef\class@inithook{%
+ \@ifxundefined\text{\let\text\REV@text}{}%
+ \@ifxundefined\bm{\let\bm\REV@bm}{}%
+ \providecommand\bibinfo[2]{#2}%
+ \providecommand\eprint[2][]{#2}%
+ \providecommand\url[1]{#1}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\bbox}
+%
+% \begin{macrocode}
+\def\bbox#1{%
+ \class@warn@end{\string\bbox\space is obsolete,^^Jload the bm package and use \string\bm\space instead.}%
+ \global\let\bbox\relax
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\mathletters}
+%
+% \begin{macrocode}
+\newenvironment{mathletters}{%
+ \class@warn@end{Environment {mathletters} is obsolete;^^Jload the amsmath package and use {subequations}!}%
+ \global\let\mathletters\@empty
+}{%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\eqnum}
+%
+% \begin{macrocode}
+\def\eqnum#1{%
+ \class@warn@end{\string\eqnum\space is obsolete, load the amsmath package and use \string\tag!}%
+ \global\let\eqnum\@gobble
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% We read in the symbol definitions.
+% \begin{macrocode}
+\RequirePackage{revsymb}%
+\appdef\class@inithook{\revsymb@inithook}%
+% \end{macrocode}
+%
+% \section{Endgame for the Document Class}
+%
+% This section contains definitions related to the
+% end-of-class processing:
+% we want to control exactly what happens next.
+%
+% We provide for a ``job macro package'' that can override
+% definitions made by the class or any other packages it loads.
+% We act on the value of \cmd\secnumarabic@sw;
+% this code is a model for dealing with the job macro package.
+% We also install a the very last procedures into
+% \cmd\AtEndOfClass, ones that need to tail on to
+% any processing performed either by the
+% class, by any of its included packages, or
+% by the job macro package and any packages it may have loaded.
+%
+% \subsection{Job Macro Package}
+% You can create a ``job macro package'' for your document
+% that will be read in automatically every time
+% your document is processed.
+% Thus, if your job is a file called \file{myarticle.tex},
+% then the file \file{myarticle.rty} will be read in
+% just the same as if you had placed a
+% \cmd\usepackage|{myarticle.rty}| statement
+% immediately following your \cmd\documentclass\ statement.
+%
+% Within your \file{.rty} file,
+% you can define and use control sequence names that use the |@| character
+% and you can override any of the definitions or assignments made
+% by the \revtex\ document class or the selected journal substyle.
+% That is, you have the power to really mess things up badly.
+%
+% If you choose to have a job macro package, you are well
+% advised to read the \LaTeX\ guide to document classes,
+% \filename{clsguide.tex} or read up on the subject
+% in a book line the \LaTeX\ Companion.
+%
+% The file \filename{template.rty} contains a template for
+% creating your own job macro package.
+%
+% \begin{macrocode}
+\AtEndOfClass{%
+ \InputIfFileExists{\jobname.rty}{}{}%
+}%
+% \end{macrocode}
+%
+% \subsection{\cs{secnumarabic@sw}}\label{sec:secnumarabic}
+% \begin{macro}{\secnumarabic@sw}
+% The flag \cmd\secnumarabic@sw\ signifies that sectioning commands are
+% to be numbered arabic.
+% The effect of this command should override any settings
+% made by the journal substyle or by the job macro package.
+% However, it should be lower in precedence to definitions
+% appearing in the document preamble.
+% Therefore, we install its code into \cmd\AtEndOfClass,
+% but do it \emph{after} the corresponding code
+% for the journal substyle and the job macro package.
+%
+% Note: \cmd\thesection\ must \emph{not} be redefined,
+% say, at \cmd\AtBeginDocument\ time by some delayed code.
+% \begin{macrocode}
+\AtEndOfClass{%
+ \@ifxundefined\secnumarabic@sw{\@booleanfalse\secnumarabic@sw}{}%
+ \secnumarabic@sw{%
+ \def\p@section {}%
+ \def\thesection {\arabic{section}}%
+ \def\p@subsection {}%
+ \def\thesubsection {\thesection.\arabic{subsection}}%
+ \def\p@subsubsection {}%
+ \def\thesubsubsection {\thesubsection.\arabic{subsubsection}}%
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Hook for default values of Booleans}
+% This portion of the code for this class file
+% \emph{must} appear at the very end.
+% \begin{macro}{\defaults@hook}
+% The procedure \cmd\defaults@hook\ should hereby
+% be the very last to be installed into \cmd\AtBeginDocument.
+% We provide it with a default in case it has not been
+% used up til now.
+%
+% CHECKME: is any other hook installed later than \cmd\defaults@hook?
+% \begin{macrocode}
+\AtEndOfClass{%
+ \appdef\class@documenthook{%
+ \defaults@hook
+ }%
+}%
+\@ifxundefined\defaults@hook{\let\defaults@hook\@empty}{}%
+% \end{macrocode}
+% \end{macro}
+%
+% End of the class file.
+% \begin{macrocode}
+%</class-pst>
+% \end{macrocode}
+%
+%
+% \section{Symbols: the \texttt{revsymb} module}
+% We immediately define a utility command: this module's warning.
+% \begin{macrocode}
+%<*revsymb>
+\def\REVSYMB@warn#1{\PackageWarningNoLine{revsymb}{#1}}%
+% \end{macrocode}
+%
+% \begin{macro}{\lambdabar}
+% \begin{macrocode}
+\DeclareRobustCommand\lambdabar{%
+ \bgroup
+ \def\@tempa{%
+ \hbox{%
+ \raise.73\ht\z@
+ \hb@xt@\z@{%
+ \kern.25\wd\z@
+ \vrule \@width.5\wd\z@\@height.1\p@\@depth.1\p@
+ \hss
+ }%
+ \box\z@
+ }%
+ }%
+ \mathchoice
+ {\setbox\z@\hbox{$\displaystyle \lambda$}\@tempa}%
+ {\setbox\z@\hbox{$\textstyle \lambda$}\@tempa}%
+ {\setbox\z@\hbox{$\scriptstyle \lambda$}\@tempa}%
+ {\setbox\z@\hbox{$\scriptscriptstyle\lambda$}\@tempa}%
+ \egroup
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\openone}
+% DPC: Really should use a font that includes this glyph.
+% Unfortunately not in AMS ones, but is in bbold, cmbb.
+% (I think, must check),
+% \changes{v4.d}{1998/01/31}
+% {use font-dependent spacing}
+% FIXME: check for bbold.
+% \begin{macrocode}
+\DeclareRobustCommand\openone{\leavevmode\hbox{\small1\normalsize\kern-.33em1}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\corresponds}
+% \begin{macro}{\overdots}
+% \begin{macro}{\overcirc}
+% J\"org Knappen suggests the replacements:
+% replace \cmd\corresponds\ with \cmd\triangleq, source \classname{amssymb};
+% replace \cmd\overcirc\ with \cmd\mathring, source \classname{latex2e};
+% replace \cmd\overdots\ with \cmd\dddot, source \classname{amsmath}.
+%
+% Any use of any of these commands will result in a warning message at the end
+% of the log file. If the corresponding package is not loaded, a
+% definition will quietly be provided.
+% \begin{macrocode}
+\DeclareRobustCommand\corresponds{\replace@command\corresponds\triangleq}%
+\DeclareRobustCommand\overcirc{\replace@command\overcirc\mathring}%
+\DeclareRobustCommand\overdots{\replace@command\overdots\dddot}%
+\DeclareRobustCommand\REV@triangleq{%
+ {\lower.2ex\hbox{=}}{\kern-.75em^\triangle}%
+}%
+\DeclareRobustCommand\REV@dddot[1]{%
+ \@ontopof{#1}{\cdots}{1.0}\mathord{\box2}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\succsim}
+% \begin{macro}{\precsim}
+% \begin{macro}{\lesssim}
+% \begin{macro}{\gtrsim}
+% \begin{macro}{\alt}
+% \begin{macro}{\agt}
+% These version 3.1 commands are always supplied,
+% but the definitions in \classname{amssymb} are preferred.
+% \begin{macrocode}
+\DeclareRobustCommand\altsuccsim{\succ\kern-.9em_\sim\kern.3em}%
+\DeclareRobustCommand\altprecsim{\prec\kern-1em_\sim\kern.3em}%
+\let\REV@succsim\altsuccsim
+\let\REV@precsim\altprecsim
+\DeclareRobustCommand\REV@lesssim{\mathrel{\mathpalette\vereq{<}}}%
+\DeclareRobustCommand\REV@gtrsim{\mathrel{\mathpalette\vereq{>}}}%
+\DeclareRobustCommand\alt{\lesssim}
+\DeclareRobustCommand\agt{\gtrsim}
+\def\vereq#1#2{%
+ \lower3\p@\vbox{%
+ \baselineskip1.5\p@
+ \lineskip1.5\p@
+ \ialign{$\m@th#1\hfill##\hfil$\crcr#2\crcr\sim\crcr}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\tensor}
+% \begin{macro}{\overstar}
+% \begin{macro}{\loarrow}
+% \begin{macro}{\roarrow}
+% \changes{v4.0beta 2}{1999/06/20}
+% {AO: remove duplicates}
+% \begin{macrocode}
+\DeclareRobustCommand\tensor[1]{\@ontopof{#1}{\leftrightarrow}{1.15}\mathord{\box2}}
+\DeclareRobustCommand\overstar[1]{\@ontopof{#1}{\ast}{1.15}\mathord{\box2}}
+\DeclareRobustCommand\loarrow[1]{\@ontopof{#1}{\leftarrow}{1.15}\mathord{\box2}}
+\DeclareRobustCommand\roarrow[1]{\@ontopof{#1}{\rightarrow}{1.15}\mathord{\box2}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@ontopof}
+% \begin{macrocode}
+\def\@ontopof#1#2#3{%
+ {%
+ \mathchoice
+ {\@@ontopof{#1}{#2}{#3}\displaystyle \scriptstyle }%
+ {\@@ontopof{#1}{#2}{#3}\textstyle \scriptstyle }%
+ {\@@ontopof{#1}{#2}{#3}\scriptstyle \scriptscriptstyle}%
+ {\@@ontopof{#1}{#2}{#3}\scriptscriptstyle\scriptscriptstyle}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@ontopof}
+% Same as \revtex3, more or less.
+% \begin{macrocode}
+\def\@@ontopof#1#2#3#4#5{%
+ \setbox\z@\hbox{$#4#1$}%
+ \setbox\f@ur\hbox{$#5#2$}%
+ \setbox\tw@\null\ht\tw@\ht\z@ \dp\tw@\dp\z@
+ \@ifdim{\wd\z@>\wd\f@ur}{%
+ \setbox\f@ur\hb@xt@\wd\z@{\hss\box\f@ur\hss}%
+ \mathord{\rlap{\raise#3\ht\z@\box\f@ur}\box\z@}%
+ }{%
+ \setbox\f@ur\hb@xt@.9\wd\f@ur{\hss\box\f@ur\hss}%
+ \setbox\z@\hb@xt@\wd\f@ur{\hss$#4\relax#1$\hss}%
+ \mathord{\rlap{\copy\z@}\raise#3\ht\z@\box\f@ur}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frak}
+% Deal with legacy \cmd\frak:
+% if \classname{amsfonts} not loaded, defined in such a way as to ask for that package.
+% Also, says to use \cmd\mathfrak\ instead.
+% \begin{macrocode}
+\DeclareRobustCommand\frak{%
+ \REVSYMB@warn{%
+ Command \string\frak\space unsupported:^^J%
+ please use \string\mathfrak\space instead.%
+ }%
+ \global\let\frak\mathfrak
+ \frak
+}%
+\DeclareRobustCommand\REV@mathfrak{%
+ \REVSYMB@warn{%
+ Command \string\mathfrak\space undefined:^^J%
+ please specify the amsfonts or amssymb option!%
+ }%
+ \global\let\mathfrak\@firstofone
+ \mathfrak
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Bbb}
+% Deal with legacy \cmd\Bbb:
+% if \classname{amsfonts} not loaded, defined in such a way as to ask for that package.
+% Also, says to use \cmd\mathbb\ instead.
+% \begin{macrocode}
+\DeclareRobustCommand\Bbb{%
+ \REVSYMB@warn{%
+ Command \string\Bbb\space unsupported:^^J%
+ please use \string\mathbb\space instead.%
+ }%
+ \global\let\Bbb\mathbb
+ \Bbb
+}%
+\DeclareRobustCommand\REV@mathfrak{%
+ \REVSYMB@warn{%
+ Command \string\mathbb\space undefined:^^J%
+ please specify the amsfonts or amssymb option!%
+ }%
+ \global\let\mathbb\@firstofone
+ \mathbb
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Bigglb}
+% Deal with legacy bold delimiters.
+% Each of the following takes an implicit argument consisting of
+% the delimiter to be made big and bold.
+% FIXME: \cmd\DeclareBoldMathCommand\ is not the right tool!
+% \begin{macrocode}
+\def\Bigglb{\REV@boldopen \Bigg}%
+\def\Biglb {\REV@boldopen \Big }%
+\def\bigglb{\REV@boldopen \bigg}%
+\def\biglb {\REV@boldopen \big }%
+\def\Biggrb{\REV@boldclose\Bigg}%
+\def\Bigrb {\REV@boldclose\Big }%
+\def\biggrb{\REV@boldclose\bigg}%
+\def\bigrb {\REV@boldclose\big }%
+\def\REV@pmb#1{%
+ \hbox{%
+ \setbox\z@=\hbox{#1}%
+ \kern-.02em\copy\z@\kern-\wd\z@
+ \kern .04em\copy\z@\kern-\wd\z@
+ \kern-.02em
+ \raise.04em\copy\z@
+ }%
+}%
+\def\REV@boldopen #1#2{\mathopen {\REV@pmb{$#1#2$}}}%
+\def\REV@boldclose#1#2{\mathclose{\REV@pmb{$#1#2$}}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\AtBeginDocument}
+% Package dependencies are taken care of
+% \cmd\AtBeginDocument\ time.
+% \begin{macrocode}
+\def\revsymb@inithook{%
+ \@ifxundefined\dddot{\let\dddot\REV@dddot}{}%
+ \@ifxundefined\triangleq{\let\triangleq\REV@triangleq}{}%
+ \@ifxundefined\succsim{\let\succsim\altsuccsim}{}%
+ \@ifxundefined\precsim{\let\precsim\altprecsim}{}%
+ \@ifxundefined\lesssim{\let\lesssim\REV@lesssim}{}%
+ \@ifxundefined\gtrsim {\let\gtrsim \REV@gtrsim }{}%
+ \@ifxundefined\mathfrak{\let\mathfrak\REV@mathfrak}{}%
+ \@ifxundefined\mathbb{\let\mathbb\REV@mathbb}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%</revsymb>
+% \end{macrocode}
+%
+% \section{The \classoption{10pt} class option: the \texttt{10pt} module}
+% \changes{v4.0beta 2}{1999/06/20}
+% {AO: all code for \protect\classoption{10pt} is in this module.}
+% The file \file{10pt.rtx} is read in by the \classname{revtex4} document class
+% if \cmd\@pointsize\ has the value 10.
+%
+% \begin{macrocode}
+%<*10pt>
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\normalsize{%
+ \@setfontsize\normalsize\@xpt{11.5}%
+ \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \abovedisplayskip
+ \belowdisplayshortskip \abovedisplayskip
+ \let\@listi\@listI
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\small{%
+ \@setfontsize\small\@ixpt{10.5}%
+ \abovedisplayskip 8.5\p@ \@plus3\p@ \@minus4\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ \@plus2\p@
+ \belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@
+ \def\@listi{%
+ \leftmargin\leftmargini
+ \topsep 4\p@ \@plus2\p@ \@minus2\p@
+ \parsep 2\p@ \@plus\p@ \@minus\p@
+ \itemsep \parsep
+ }%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\footnotesize{%
+ \@setfontsize\footnotesize\@viiipt{9.5pt}%
+ \abovedisplayskip 6\p@ \@plus2\p@ \@minus4\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ \@plus\p@
+ \belowdisplayshortskip 3\p@ \@plus\p@ \@minus2\p@
+ \def\@listi{%
+ \leftmargin\leftmargini
+ \topsep 3\p@ \@plus\p@ \@minus\p@
+ \parsep 2\p@ \@plus\p@ \@minus\p@
+ \itemsep \parsep
+ }%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\scriptsize{%
+ \@setfontsize\scriptsize\@viipt\@viiipt
+}%
+\def\tiny{%
+ \@setfontsize\tiny\@vpt\@vipt
+}%
+\def\large{%
+ \@setfontsize\large\@xiipt{14pt}%
+}%
+\def\Large{%
+ \@setfontsize\Large\@xivpt{18pt}%
+}%
+\def\LARGE{%
+ \@setfontsize\LARGE\@xviipt{22pt}%
+}%
+\def\huge{%
+ \@setfontsize\huge\@xxpt{25pt}%
+}%
+\def\Huge{%
+ \@setfontsize\Huge\@xxvpt{30pt}%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+%\appdef\class@documenthook{%
+ \@ifxundefined\twoside@sw{\@booleanfalse\twoside@sw}{}%
+ \twoside@sw{%
+% \oddsidemargin -.1in
+% \evensidemargin -.4in
+ \oddsidemargin -20pt
+ \evensidemargin -20pt
+ \marginparwidth 107pt
+ }{%
+ \oddsidemargin -.25in
+ \evensidemargin -.25in
+ \marginparwidth 30pt
+ }%
+%}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\marginparsep 6pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\topmargin -61pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\headheight 25pt
+\headsep 16pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\topskip 10pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\footskip 30pt
+% \end{macrocode}
+%
+% Was: 57\cmd\baselineskip + \cmd\topskip
+% \begin{macrocode}
+%\appdef\set@pica@hook{%
+ \textheight = 56pc
+%}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\textwidth42.5pc
+% \end{macrocode}
+%
+% \begin{macrocode}
+\columnsep 1.5pc
+\columnseprule 0pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\footnotesep 1pt
+\skip\footins 39pt plus 4pt minus 2pt
+\def\footnoterule{\kern-19pt\hrule width.5in\kern18.6pt\relax}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\floatsep 12pt plus 2pt minus 2pt
+\textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 12pt plus 2pt minus 2pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\dblfloatsep 12pt plus 2pt minus 2pt
+\dbltextfloatsep 20pt plus 2pt minus 4pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@fptop 0pt plus 1fil
+\@fpsep 8pt plus 2fil
+\@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil
+\@dblfpsep 8pt plus 2fil
+\@dblfpbot 0pt plus 1fil
+% \end{macrocode}
+%
+% \begin{macrocode}
+\marginparpush 5pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\parskip 0pt plus 1pt
+\parindent 10pt
+\emergencystretch8\p@
+% \end{macrocode}
+%
+% \begin{macrocode}
+\partopsep 2pt plus 1pt minus 1pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\leftmargini 25pt
+\leftmarginii 22pt
+\leftmarginiii 18.7pt
+\leftmarginiv 17pt
+\leftmarginv 10pt
+\leftmarginvi 10pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@listI{%
+ \leftmargin\leftmargini
+ \parsep 4\p@ plus2\p@ minus\p@
+ \topsep 8\p@ plus2\p@ minus4\p@
+ \itemsep 4\p@ plus2\p@ minus\p@
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\labelsep 4pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@listii{%
+ \leftmargin\leftmarginii
+ \labelwidth\leftmarginii
+ \advance\labelwidth-\labelsep
+ \topsep 4\p@ plus2\p@ minus\p@
+ \parsep 2\p@ plus\p@ minus\p@
+ \itemsep \parsep
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@listiii{%
+ \leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii
+ \advance\labelwidth-\labelsep
+ \topsep 2\p@ plus\p@ minus\p@
+ \parsep \z@
+ \partopsep \p@ plus\z@ minus\p@
+ \itemsep \topsep
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@listiv{%
+ \leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv
+ \advance\labelwidth-\labelsep
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@listv{%
+ \leftmargin\leftmarginv
+ \labelwidth\leftmarginv
+ \advance\labelwidth-\labelsep
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@listvi{%
+ \leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi
+ \advance\labelwidth-\labelsep
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</10pt>
+% \end{macrocode}
+%
+% \section{The \classoption{11pt} class option: the \texttt{11pt} module}
+% \changes{v4.0beta 2}{1999/06/20}
+% {AO: all code for \protect\classoption{11pt} is in this module.}
+% The file \file{11pt.rtx} is read in by the \classname{revtex4} document class
+% if \cmd\@pointsize\ has the value 11.
+%
+% \begin{macrocode}
+%<*11pt>
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\normalsize{%
+ \@setfontsize\normalsize\@xipt{13.6}%
+ \abovedisplayskip 11\p@ \@plus3\p@ \@minus6\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \abovedisplayskip
+ \belowdisplayshortskip \abovedisplayskip
+ \let\@listi\@listI
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\small{%
+ \@setfontsize\small\@xpt\@xiipt
+ \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@
+ \abovedisplayshortskip \z@ \@plus3\p@
+ \belowdisplayshortskip 6\p@ \@plus3\p@ \@minus3\p@
+ \def\@listi{\leftmargin\leftmargini
+ \topsep 6\p@ \@plus2\p@ \@minus2\p@
+ \parsep 3\p@ \@plus2\p@ \@minus\p@
+ \itemsep \parsep
+ }%
+ \belowdisplayskip \abovedisplayskip
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\footnotesize{%
+ \@setfontsize\footnotesize\@ixpt{11}%
+ \abovedisplayskip 8\p@ \@plus2\p@ \@minus4\p@
+ \abovedisplayshortskip \z@ \@plus\p@
+ \belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@
+ \def\@listi{\leftmargin\leftmargini
+ \topsep 4\p@ \@plus2\p@ \@minus2\p@
+ \parsep 2\p@ \@plus\p@ \@minus\p@
+ \itemsep \parsep
+ }%
+ \belowdisplayskip \abovedisplayskip
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\scriptsize{%
+ \@setfontsize\scriptsize\@viiipt{9.5}%
+}%
+\def\tiny{%
+ \@setfontsize\tiny\@vipt\@viipt
+}%
+\def\large{%
+ \@setfontsize\large\@xiipt{14}%
+}%
+\def\Large{%
+ \@setfontsize\Large\@xivpt{18}%
+}%
+\def\LARGE{%
+ \@setfontsize\LARGE\@xviipt{22}%
+}%
+\def\huge{%
+ \@setfontsize\huge\@xxpt{25pt}%
+}%
+\def\Huge{%
+ \@setfontsize\Huge\@xxvpt{30pt}%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</11pt>
+% \end{macrocode}
+%
+% \section{The \classoption{12pt} class option: the \texttt{12pt} module}
+% \changes{v4.0beta 2}{1999/06/20}
+% {AO: all code for \protect\classoption{12pt} is in this module.}
+% The file \file{12pt.rtx} is read in by the \classname{revtex4} document class
+% if \cmd\@pointsize\ has the value 12.
+%
+% \begin{macrocode}
+%<*12pt>
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\normalsize{%
+ \@setfontsize\normalsize\@xiipt{14pt}%
+ \abovedisplayskip 12\p@ \@plus3\p@ \@minus7\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus3\p@
+ \belowdisplayshortskip 6.5\p@ \@plus3.5\p@ \@minus3\p@
+ \let\@listi\@listI
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \def\small{%
+ \@setfontsize\small\@xipt{14.5pt}%
+ \abovedisplayskip 8\p@ \@plus3\p@ \@minus6\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ \@plus3\p@
+ \belowdisplayshortskip 6.5\p@ \@plus3.5\p@ \@minus3\p@
+ \def\@listi{%
+ \leftmargin\leftmargini
+ \topsep 9\p@ \@plus3\p@ \@minus5\p@
+ \parsep 4.5\p@ \@plus2\p@ \@minus\p@
+ \itemsep \parsep
+ }%
+}%
+% \end{macrocode}
+%
+% Same baselineskip as \cmd\small\ ?
+% \begin{macrocode}
+ \def\footnotesize{%
+ \@setfontsize\footnotesize\@xpt{14.5pt}%
+ \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ \@plus3\p@
+ \belowdisplayshortskip 6\p@ \@plus3\p@ \@minus3\p@
+ \def\@listi{%
+ \leftmargin\leftmargini
+ \topsep 6\p@ \@plus2\p@ \@minus2\p@
+ \parsep 3\p@ \@plus2\p@ \@minus\p@
+ \itemsep \parsep
+ }%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\scriptsize{%
+ \@setfontsize\scriptsize\@viiipt{9.5pt}%
+}%
+\def\tiny{%
+ \@setfontsize\tiny\@vipt{7pt}%
+}%
+\def\large{%
+ \@setfontsize\large\@xivpt{18pt}%
+}%
+\def\Large{%
+ \@setfontsize\Large\@xviipt{22pt}%
+}%
+\def\LARGE{%
+ \@setfontsize\LARGE\@xxpt{25pt}%
+}%
+\def\huge{%
+ \@setfontsize\huge\@xxvpt{30pt}%
+}%
+\let\Huge=\huge
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</12pt>
+% \end{macrocode}
+%
+% \section{Page parameters}%
+% This code is common to both \classoption{11pt} and \classoption{12pt}.
+%
+% \begin{macrocode}
+%<*11pt|12pt>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%\appdef\class@documenthook{%
+ \@ifxundefined\twoside@sw{\@booleanfalse\twoside@sw}{}%
+ \twoside@sw{%
+ \oddsidemargin 0pt
+ \evensidemargin 0pt
+ \marginparwidth 60pt
+ }{%
+ \oddsidemargin 0pt
+ \evensidemargin 0pt
+ \marginparwidth 44pt
+ }%
+%}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\marginparsep 10pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\topmargin -37pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\headheight 12pt
+\headsep 25pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\topskip 10pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\footskip 30pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+%\appdef\set@pica@hook{%
+ \@ifxundefined\tightenlines@sw{\@booleanfalse\tightenlines@sw}{}%
+ \textheight=665.5\p@
+ \tightenlines@sw{%
+ \def\baselinestretch{1}%
+ }{%
+ \def\baselinestretch{1.5}%
+ }%
+%}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\textwidth 468pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\columnsep 10pt
+\columnseprule 0pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\footnotesep 1pt
+\skip\footins 25.25pt plus 4pt minus 2pt
+\def\footnoterule{\kern-5.25pt\hrule width.5in\kern4.85pt\relax}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\floatsep 14pt plus 2pt minus 4pt
+\textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 14pt plus 4pt minus 4pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\dblfloatsep 14pt plus 2pt minus 4pt
+\dbltextfloatsep 20pt plus 2pt minus 4pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@fptop 0pt plus 1fil
+\@fpsep 10pt plus 2fil
+\@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil
+\@dblfpsep 10pt plus 2fil%
+\@dblfpbot 0pt plus 1fil
+% \end{macrocode}
+%
+% \begin{macrocode}
+\marginparpush 7pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\parskip 0pt plus 1pt
+\parindent 15pt
+\emergencystretch8\p@
+\partopsep 3pt plus 2pt minus 2pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\leftmargini 30pt
+\leftmarginii 26pt
+\leftmarginiii 22pt
+\leftmarginiv 20pt
+\leftmarginv 12pt
+\leftmarginvi 12pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@listI{\leftmargin\leftmargini \parsep 5\p@ plus2.5\p@ minus\p@
+ \topsep 10\p@ plus4\p@ minus6\p@
+ \itemsep 5\p@ plus2.5\p@ minus\p@
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\labelsep 6pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 5\p@ plus2.5\p@ minus\p@
+ \parsep 2.5\p@ plus\p@ minus\p@
+ \itemsep \parsep
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2.5\p@ plus\p@ minus\p@
+ \parsep \z@ \partopsep \p@ plus\z@ minus\p@
+ \itemsep \topsep
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</11pt|12pt>
+% \end{macrocode}
+%
+% \section{The \classoption{aps} class option: the \texttt{aps} module}
+% \changes{v4.0beta 2}{1999/06/20}
+% {AO: made aps.rtx part of revtex4.dtx}
+% The file \file{aps.rtx} is read in by the \classname{revtex4} document class
+% if \cmd\@society\ has the value \classoption{aps}.
+%
+% Here, code specific to APS journals is separated out from the \revtex\ document class.
+% (Other societies can customize \revtex\ by supplying their own \file{.rtx} file.)
+%
+% We first give some text entities (amounting to journal abbreviations),
+% then some APS-specific initialisations,
+% then code for particular APS journals.
+% In the latter case, the choice is
+% keyed off the macro \cmd\@journal.
+%
+% Note on \cmd\AtEndOfClass:
+% this file, like all journal substyles, is read in at \cmd\AtEndOfClass\ time,
+% so you should not use this command in this file.
+% Mote for \LaTeX\ developers: It would be an improvement in \LaTeX\ to
+% \cmd\let\cmd\AtEndOfClass\ to something like \cmd\@firstofone.
+% This change would be effected in \cmd\@onefilewithoptions.
+%
+% \begin{macrocode}
+%<*aps>
+% \end{macrocode}
+%
+% \subsection{Defend Against Forseeable Errors}%
+% Protect this file from being read in by anything but \revtex.
+% \begin{macrocode}
+\ifx\undefined\substyle@ext
+ \def\@tempa{%
+ \endinput
+ \GenericWarning{I must be read in by REVTeX! (Bailing out)}%
+ }%
+ \expandafter\else
+ \def\@tempa{}%
+ \expandafter\fi\@tempa
+% \end{macrocode}
+%
+% \subsection{Abbreviations}%
+% The following macros constitute typing shortcuts for
+% certain journal names.
+% \begin{macrocode}
+\def\ao{Appl.\ Opt.\ }
+\def\ap{Appl.\ Phys.\ }
+\def\apl{Appl.\ Phys.\ Lett.\ }
+\def\apj{Astrophys.\ J.\ }
+\def\bell{Bell Syst.\ Tech.\ J.\ }
+\def\jqe{IEEE J.\ Quantum Electron.\ }
+\def\assp{IEEE Trans.\ Acoust.\ Speech Signal Process.\ }
+\def\aprop{IEEE Trans.\ Antennas Propag.\ }
+\def\mtt{IEEE Trans.\ Microwave Theory Tech.\ }
+\def\iovs{Invest.\ Ophthalmol.\ Vis.\ Sci.\ }
+\def\jcp{J.\ Chem.\ Phys.\ }
+\def\jmo{J.\ Mod.\ Opt.\ }
+\def\josa{J.\ Opt.\ Soc.\ Am.\ }
+\def\josaa{J.\ Opt.\ Soc.\ Am.\ A }
+\def\josab{J.\ Opt.\ Soc.\ Am.\ B }
+\def\jpp{J.\ Phys.\ (Paris) }
+\def\nat{Nature (London) }
+\def\oc{Opt.\ Commun.\ }
+\def\ol{Opt.\ Lett.\ }
+\def\pl{Phys.\ Lett.\ }
+\def\pra{Phys.\ Rev.\ A }
+\def\prb{Phys.\ Rev.\ B }
+\def\prc{Phys.\ Rev.\ C }
+\def\prd{Phys.\ Rev.\ D }
+\def\pre{Phys.\ Rev.\ E }
+\def\prl{Phys.\ Rev.\ Lett.\ }
+\def\rmp{Rev.\ Mod.\ Phys.\ }
+\def\pspie{Proc.\ Soc.\ Photo-Opt.\ Instrum.\ Eng.\ }
+\def\sjqe{Sov.\ J.\ Quantum Electron.\ }
+\def\vr{Vision Res.\ }
+% \end{macrocode}
+%
+% \subsection{APS Setup}%
+% Here we define the default procedures for APS journals.
+% Individual APS journals may override these definitions.
+%
+% \subsubsection{Title block}%
+%
+% The specifics of the title block.
+% Apply to all APS journals; individual journals may override these settings.
+%
+% \begin{macro}{\@fnsymbol}
+% The \LaTeX\ kernel definition of \cmd\@fnsymbol\ is overridden.
+% \begin{macrocode}
+\def\@fnsymbol#1{%
+ \ensuremath{%
+ \ifcase#1\or
+ *\or \dagger \or
+ \ddagger \or \mathsection \or
+ \mathparagraph\or
+ **\or \dagger\dagger \or
+ \ddagger\ddagger \or \mathsection \mathsection \or
+ \mathparagraph\mathparagraph\or
+ *{*}*\ignorespaces \or \dagger\dagger\dagger \or
+ \ddagger\ddagger\ddagger\or \mathsection \mathsection \mathsection \or
+ \mathparagraph\mathparagraph\mathparagraph\or
+ \else
+ \@ctrerr
+ \fi
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\titlepage}
+% \begin{macrocode}
+\renewenvironment{titlepage}{%
+ \let\wastwocol@sw\twocolumn@sw
+ \onecolumngrid
+ \newpage
+ \thispagestyle{titlepage}%
+ \c@page\z@% article sets this to one not zero???
+}{%
+ \wastwocol@sw{\twocolumngrid}{\newpage}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@abstractheading}
+% APS Journals all set the abstract head the same way, with no head.
+% However, if the user has specified the \classoption{preprint} class option,
+% then the abstract will have a head.
+% \begin{macrocode}
+\def\frontmatter@abstractheading{%
+ \preprintsty@sw{%
+ \begingroup
+ \centering\large
+ \abstractname
+ \par
+ \endgroup
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@abstractwidth}
+% All APS journals set the abstract to the same width.
+% \begin{macrocode}
+\def\frontmatter@abstractwidth{400\p@}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@abstractfont}
+% All APS journals set the abstract body the same way.
+% \changes{v4.0beta 3}{1999/11/13}
+% {Bug 123: add parskip to the abstract.}
+% \begin{macrocode}
+\def\frontmatter@abstractfont{%
+ \small
+ \parindent1em\relax
+ \adjust@abstractwidth
+}%
+\def\adjust@abstractwidth{%
+ \dimen@\textwidth\advance\dimen@-\frontmatter@abstractwidth
+ \divide\dimen@\tw@
+ \galley@sw{%
+ \advance\rightskip\tw@\dimen@
+ }{%
+ \advance\leftskip\dimen@
+ \advance\rightskip\dimen@
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% All APS journal preprints use separate titlepage and full-width abstract.
+%
+% Note that we defer polling the \cmd\preprintsty@sw\ Boolean until
+% \cmd\AtBeginDocument\ time, because the document preamble
+% may legitimately change the state of that variable.
+% \begin{macrocode}
+\appdef\class@documenthook{%
+ \preprintsty@sw{%
+ \@ifxundefined\titlepage@sw{\@booleantrue\titlepage@sw}{}%
+% \tightenlines@sw{%
+% \def\baselinestretch{1}%
+% }{%
+% \def\baselinestretch{1.5}%
+% }%
+ \def\frontmatter@abstractwidth{\textwidth}%
+ \def\frontmatter@affiliationfont{\it}%
+ \let\section\section@preprintsty
+% \let\@hangfrom@section\@hangfrom@section@preprintsty
+ \let\subsection\subsection@preprintsty
+ \let\subsubsection\subsubsection@preprintsty
+ }{}%
+ }%
+% \end{macrocode}
+%
+% \begin{macro}{\frontmatter@authorformat}
+% All APS journals set the author list the same.
+% The leading is 11.5 points, and
+% there is 11.5 points of extra space above the first author line
+% (which amounts to the same thing as 11.5 points extra below the title)
+% for a total of 23 points base-to-base.
+%
+% \begin{macrocode}
+\def\frontmatter@authorformat{%
+ \skip@\@flushglue
+ \@flushglue\z@ plus.3\hsize\relax
+ \centering
+ \advance\baselineskip\p@
+ \parskip11.5\p@\relax
+ \@flushglue\skip@
+%\preprintsty@sw{}{%
+% \addvspace{0\p@}%
+%}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@above@affilgroup}
+% The default amount of space above affiliation.
+% APS Journals have 24 points b-b above an affiliation group.
+% \begin{macrocode}
+\def\frontmatter@above@affilgroup{%
+%\preprintsty@sw{}{%
+% \addvspace{11\p@}%
+%}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@above@affiliation}
+% \begin{macro}{\frontmatter@above@affiliation@script}
+% The default amount of space above affiliation.
+% APS Journals have no extra space between author group down to common affiliation.
+% \begin{macrocode}
+\def\frontmatter@above@affiliation@script{%
+ \skip@\@flushglue
+ \@flushglue\z@ plus.3\hsize\relax
+ \centering
+ \@flushglue\skip@
+ \addvspace{3.5\p@}%
+}%
+\def\frontmatter@above@affiliation{%
+ \preprintsty@sw{}{%
+% \addvspace{12\p@}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@affiliationfont}
+% All APS journals set the affiliation the same.
+% \begin{macrocode}
+\def\frontmatter@affiliationfont{%
+ \small\it
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@collaboration@above}
+% PRL: 1.5 points extra: 13 points base-to-base above.
+% \begin{macrocode}
+\def\frontmatter@collaboration@above{%
+ \preprintsty@sw{%
+ }{%
+ \parskip1.5\p@\relax
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% Set up the default APS style for title block authors and affiliations.
+% \begin{macrocode}
+\@ifxundefined\groupauthors@sw{%
+ \clo@groupedaddress
+}{}%
+% \end{macrocode}
+%
+% \begin{macro}{\frontmatter@setup}
+% All APS journals set the title page using the same font and size.
+% However, justification varies for the title block elements, so
+% we assert none here.
+% \begin{macrocode}
+\def\frontmatter@setup{%
+ \normalfont
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@title@above}
+% \begin{macro}{\frontmatter@title@format}
+% \begin{macro}{\frontmatter@title@below}
+% All APS journals set the article title the same.
+%
+% Note: Spacing from title to author is 23 points base-to-base.
+% \begin{macrocode}
+\def\frontmatter@title@above{\addvspace{6\p@}}%
+\def\frontmatter@title@format{\large\bfseries\centering\parskip\z@skip}%
+\def\frontmatter@title@below{}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@makefnmark}
+% All APS journals share this procedure for setting the titlepage footnote text.
+% \begin{macrocode}
+\def\@author@parskip{3\p@}%
+\def\frontmatter@makefnmark{%
+ \@textsuperscript{%
+ \normalfont\@thefnmark
+ }%
+}%
+\def\frontmatter@authorbelow{%
+ \addvspace{3\p@}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@RRAP@format}
+% All APS journals use the same format for the ``Received, Revised, etc.'' block on the title page.
+%
+% Change note: 11.5 points b-b from author/affiliation down to date.
+% \begin{macrocode}
+\def\frontmatter@RRAP@format{%
+ \small
+ \centering
+% \preprintsty@sw{}{\parskip.5ex\relax}%
+ \everypar{\hbox\bgroup(\@gobble@leavemode@uppercase}%
+ \def\par{\@ifvmode{}{\unskip)\egroup\@@par}}%
+}%
+\def\punct@RRAP{;\egroup\ \hbox\bgroup}%
+\def\@gobble@leavemode@uppercase#1#2{\expandafter\MakeTextUppercase}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@PACS@format}
+%
+% \begin{macrocode}
+\def\frontmatter@PACS@format{%
+ \addvspace{11\p@}%
+ \footnotesize
+ \adjust@abstractwidth
+ \parindent\z@
+ \parskip\z@skip
+ \samepage
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@keys@format}
+%
+% \begin{macrocode}
+\def\frontmatter@keys@format{%
+ \footnotesize
+ \adjust@abstractwidth
+ \parindent\z@
+ \samepage
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ps@titlepage}
+% \changes{v4.g}{1998/06/10}
+% {multiple preprint commands}
+% \changes{v4.0beta 2}{1999/06/20}
+% {Stack \cs{preprint} args flush right at right margin.}
+% Title page style. Currently empty except for preprint header,
+% which consists of all the \cmd\preprint\ arguments,
+% stacked flush right at the right margin.
+% \changes{v4.0beta 3}{1999/11/13}
+% {Insert procedure \cs{checkindate}}
+% \begin{macrocode}
+\def\ps@titlepage{%
+ \def\@oddhead{%
+ \hfill
+ \produce@preprints\@preprint
+ }%
+ \let\@evenhead\@oddhead
+ \def\@oddfoot{%
+ \hb@xt@\z@{\byrevtex\hss}%
+ \hfil
+ \preprintsty@sw{\thepage}{}%
+ \quad\checkindate
+ \hfil
+ }%
+ \let\@evenfoot\@oddfoot
+}%
+\def\byrevtex{\byrevtex@sw{Typeset by REV\TeX}{}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\produce@preprints}
+% \changes{v4.0beta 3}{1999/11/13}
+% {Bug 115. If three or more preprints specified, set on single line, with commas.}
+% \begin{macrocode}
+\def\produce@preprints#1{%
+ \preprint@sw{%
+ \vtop to \z@{%
+ \def\baselinestretch{1}%
+ \small
+ \let\preprint\preprint@count
+ \count@\z@#1\@ifnum{\count@>\tw@}{%
+ \hbox{%
+ \let\preprint\preprint@hlist
+ #1\setbox\z@\lastbox
+ }%
+ }{%
+ \let\preprint\preprint@cr
+ \halign{\hfil##\cr#1\crcr}%
+ \par
+ \vss
+ }%
+ }%
+ }{}%
+}%
+\def\preprint@cr#1{#1\cr}%
+\def\preprint@count#1{\advance\count@\@ne}%
+\def\preprint@hlist#1{#1\hbox{, }}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Stacked Heads}%
+% All APS journals put a period (.), followed by quad space, after the section number.
+% Also, no hanging section number.
+% \begin{macrocode}
+\def\@seccntformat#1{\csname the#1\endcsname.\quad}%
+\def\@hang@from#1#2#3{#1#2#3}%
+% \end{macrocode}
+%
+% Note that in the following, we wish to set the section head uppercase, so we use
+% David Carlisle's \cmd\MakeTextUppercase. However, because this procedure effectively
+% parses its argument (looking for things to \emph{not} translate), it has to be invoked
+% in such a way that the argument of the \cmd\section\ command is passed to it as its
+% own argument.
+%
+% To accomplish this, we use the \cmd\@hangfrom@\ hook, which was developed for this
+% purpose.
+%
+% \begin{macrocode}
+\def\section{%
+ \@startsection
+ {section}%
+ {1}%
+ {\z@}%
+ {0.8cm \@plus1ex \@minus .2ex}%
+ {0.5cm}%
+ {%
+ \normalfont\small\bfseries
+ \centering
+ }%
+}%
+\def\@hangfrom@section#1#2#3{\@hangfrom{#1#2}\MakeTextUppercase{#3}}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\subsection{%
+ \@startsection
+ {subsection}%
+ {2}%
+ {\z@}%
+ {.8cm \@plus1ex \@minus .2ex}%
+ {.5cm}%
+ {%
+ \normalfont\small\bfseries
+ \centering
+ }%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\subsubsection{%
+ \@startsection
+ {subsubsection}%
+ {3}%
+ {\z@}%
+ {.8cm \@plus1ex \@minus .2ex}%
+ {.5cm}%
+ {%
+ \normalfont\small\itshape
+ \centering
+ }%
+}%
+% \end{macrocode}
+%
+% \subsubsection{Runin Heads}%
+% \begin{macrocode}
+\def\paragraph{%
+ \@startsection
+ {paragraph}%
+ {4}%
+ {\parindent}%
+ {\z@}%
+ {-1em}%
+ {\normalfont\normalsize\itshape}%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\subparagraph{%
+ \@startsection
+ {subparagraph}%
+ {5}%
+ {\parindent}%
+ {3.25ex \@plus1ex \@minus .2ex}%
+ {-1em}%
+ {\normalfont\normalsize\bfseries}%
+}%
+% \end{macrocode}
+%
+%
+%
+% \begin{macro}{\section@preprintsty}
+% \begin{macro}{\subsection@preprintsty}
+% \begin{macro}{\subsubsection@preprintsty}
+% Here are the formatting procedures specific to the preprint style;
+% the only difference is that the heads are flush left instead of centered.
+%
+% \begin{macrocode}
+\def\section@preprintsty{%
+ \@startsection
+ {section}%
+ {1}%
+ {\z@}%
+ {0.8cm \@plus1ex \@minus .2ex}%
+ {0.5cm}%
+ {%
+ \normalfont\small\bfseries
+% \centering
+ }%
+}%
+%\def\@hangfrom@section@preprintsty#1#2#3{\@hangfrom{#1#2}\MakeTextUppercase{#3}}%
+% \end{macrocode}
+% \begin{macrocode}
+\def\subsection@preprintsty{%
+ \@startsection
+ {subsection}%
+ {2}%
+ {\z@}%
+ {.8cm \@plus1ex \@minus .2ex}%
+ {.5cm}%
+ {%
+ \normalfont\small\bfseries
+% \centering
+ }%
+}%
+% \end{macrocode}
+% \begin{macrocode}
+\def\subsubsection@preprintsty{%
+ \@startsection
+ {subsubsection}%
+ {3}%
+ {\z@}%
+ {.8cm \@plus1ex \@minus .2ex}%
+ {.5cm}%
+ {%
+ \normalfont\small\itshape
+% \centering
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% Effectively invoke the \classoption{bibnote} class option,
+% if \cmd\frontmatter@footnote@produce\ has not yet been set.
+% \begin{macrocode}
+ \@ifxundefined\frontmatter@footnote@produce{%
+ \let\frontmatter@footnote@produce\frontmatter@footnote@produce@endnote
+ }{}%
+% \end{macrocode}
+%
+%
+% \subsubsection{Table of Contents}%
+% The toc will itself make an entry in the toc,
+% but we temporarily turn off toc formatting for the duration.
+% \begin{macrocode}
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5pt}
+\setcounter{tocdepth}{3}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\tableofcontents{%
+ \addtocontents{toc}{\string\tocdepth@munge}%
+ \print@toc{toc}%
+ \addtocontents{toc}{\string\tocdepth@restore}%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\tocdepth@munge{%
+ \let\l@section@saved\l@section
+ \let\l@section\@gobble@tw@
+}%
+\def\@gobble@tw@#1#2{}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\tocdepth@restore{%
+ \let\l@section\l@section@saved
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\l@part#1#2{\addpenalty{\@secpenalty}%
+ \begingroup
+ \set@tocdim@pagenum{#2}%
+% \@tempdima 3em %
+ \parindent \z@
+ \rightskip\tocleft@pagenum plus 1fil\relax
+ \skip@\parfillskip\parfillskip\z@
+ \addvspace{2.25em plus\p@}%
+ \large \bf %
+ \leavevmode\ignorespaces#1\unskip\nobreak\hskip\skip@
+ \hb@xt@\rightskip{\hfil\unhbox\z@}\hskip-\rightskip\hskip\z@skip
+ \par
+ \nobreak %
+ \endgroup
+}%
+% \end{macrocode}
+%
+% \begin{macro}{\l@section}
+% Determine which TOC elements are automatically indented.
+% \begin{macrocode}
+\def\tocleft@{\z@}%
+\def\tocdim@min{5\p@}%
+\def\l@section{%
+ \l@@sections{}{section}% Implicit #3#4
+}%
+\def\l@f@section{%
+ \addpenalty{\@secpenalty}%
+ \addvspace{1.0em plus\p@}%
+ \bf
+}%
+\def\l@subsection{%
+ \l@@sections{section}{subsection}% Implicit #3#4
+}%
+\def\l@subsubsection{%
+ \l@@sections{subsection}{subsubsection}% Implicit #3#4
+}%
+\def\l@paragraph#1#2{}%
+\def\l@subparagraph#1#2{}%
+% \end{macrocode}
+% \end{macro}
+%
+% Activate the auto TOC processing.
+% \begin{macrocode}
+\let\toc@pre\toc@pre@auto
+\let\toc@post\toc@post@auto
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\listoffigures{\print@toc{lof}}%
+\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\listoftables{\print@toc{lot}}%
+\let\l@table\l@figure
+% \end{macrocode}
+%
+% \subsubsection{Default column bottom}%
+% All APS journal styles have flush bottoms.
+%
+% Note that we defer polling the \cmd\raggedcolumn@sw\ Boolean until
+% \cmd\AtBeginDocument\ time, because the document preamble
+% may legitimately change the state of that variable.
+% \begin{macrocode}
+\appdef\class@documenthook{%
+ \@ifxundefined\raggedcolumn@sw{\@booleantrue\raggedcolumn@sw}{}%
+ \raggedcolumn@sw{\raggedbottom}{\flushbottom}%
+}%
+% \end{macrocode}
+%
+%
+% \subsubsection{Table alignment style}%
+%
+% \begin{macro}{\tableft@skip@float}
+% \begin{macro}{\tabmid@skip@float}
+% \begin{macro}{\tabright@skip@float}
+% \begin{macro}{\array@row@pre@float}
+% \begin{macro}{\array@row@pst@float}
+% All APS publications have the same table specification:
+% Scotch rules above and below, centered in column.
+% \begin{macrocode}
+\def\tableft@skip@float{\z@ plus\hsize}%
+\def\tabmid@skip@float{\@flushglue}%
+\def\tabright@skip@float{\z@ plus\hsize}%
+\def\array@row@pre@float{\hline\hline\noalign{\vskip\doublerulesep}}%
+\def\array@row@pst@float{\noalign{\vskip\doublerulesep}\hline\hline}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{Footnote formatting}%
+% We customize the formatting of footnotes for all APS journals.
+% \begin{macro}{\@makefntext}
+% \begin{macrocode}
+\def\@makefntext#1{%
+ \def\baselinestretch{1}%
+ \reset@font
+ \footnotesize
+ \leftskip1em
+ \parindent1em
+ \noindent\nobreak\hskip-\leftskip
+ \hb@xt@\leftskip{%
+ \Hy@raisedlink{\hyper@anchorstart{footnote@\the\c@footnote}\hyper@anchorend}%
+ \hss\@makefnmark\
+ }%
+ #1%
+ \par
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection{Appendix}%
+% \begin{macro}{\appendix}
+% \begin{macro}{\@hangfrom@appendix}
+% \begin{macro}{\@hangfroms@appendix}
+% \begin{macro}{\@appendixcntformat}
+% \changes{v4.0beta 3}{1999/11/13}
+% {Bug 129: section* within appendix was producing appendixname}
+% \begin{macrocode}
+\prepdef\appendix{%
+ \par
+ \let\@hangfrom@section\@hangfrom@appendix
+ \let\@hangfroms@section\@hangfroms@appendix
+ \let\@sectioncntformat\@appendixcntformat
+}%
+\def\@hangfrom@appendix#1#2#3{%
+ #1%
+ \@if@empty{#2}{%
+ #3%
+ }{%
+ #2\@if@empty{#3}{}{:\ #3}%
+ }%
+}%
+\def\@hangfroms@appendix#1#2{%
+ #1#2%
+}%
+\def\@appendixcntformat#1{\appendixname\ \csname the#1\endcsname}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Bibliography}%
+%
+% Customize \revtex\ for the journal substyle;
+% this task requires three components:
+% the \BibTeX\ \file{apsrev.bst} style file,
+% customizing code for \file{natbib}, and
+% customizations of the \env{thebibliography} environment.
+%
+% \begin{macro}{\@bibstyle}
+% Define the argument of the \cmd\bibliographystyle\ command
+% (if the document does not do so).
+% The user must have installed a \file{.bst} file of the corresponding name.
+% This file will then be used by \BibTeX\ when compiling the document's \file{.bbl} file.
+%
+% The default bibliography style for the APS journal substyles, \file{apsrev.bst},
+% was originally called \file{revtex.bst}, but
+% that name is much too generic and should be given to a \file{.bst} file that
+% that applies generally to any \revtex\ jounal substyle, an impossibility.
+%
+% To generate \file{apsrev.bst}, use \classname{custom-bib} version 4.0b2 or later.
+% Run the \file{.bst} generator, \file{makebst.tex}, and
+% accept all defaults, with the following exceptions:
+%
+% \begin{enumerate}
+% \item
+% ORDERING OF REFERENCES: c: seq-no (references in order of Citation);
+% \item
+% AUTHOR NAMES: i: nm-init,ed-au (Initials + surname);
+% \item
+% NUMBER OF AUTHORS: l: max 12, min 12 (there will be three prompts total);
+% \item
+% TYPEFACE FOR AUTHORS IN LIST OF REFERENCES: u: nmft,nmft-def (User defined author font);
+% \item
+% FONT FOR FIRST NAMES: u: fnm-def (First names in user defined font);
+% \item
+% EDITOR NAMES IN INCOLLECTION ETC: a: nmfted (Editors incollection like authors);
+% \item
+% DATE FORMAT: p: yr-par (Date in parentheses);
+% \item
+% SUPPRESS MONTH: x: xmth (Date is year only);
+% \item
+% TITLE OF ARTICLE: i: tit-it (Title italic)
+% \item
+% ARTICLE TITLE PRESENT: x: jtit-x (No article title);
+% \item
+% JOURNAL NAME FONT: r: jttl-rm (Journal title normal);
+% \item
+% TECHNICAL REPORT TITLE: b: trtit-b (Tech. report title like books);
+% \item
+% JOURNAL VOLUME: b: vol-bf (Volume bold);
+% \item
+% VOLUME PUNCTUATION: c: volp-com (Volume with comma);
+% \item
+% PAGE NUMBERS: f: jpg-1 (Only start page number);
+% \item
+% JOURNAL NAME PUNCTUATION: x: jnm-x (Space after journal);
+% \item
+% PUBLISHER IN PARENTHESES: d: pub-date (Publisher and date in parentheses);
+% \item
+% PUBLISHER POSITION: p: pre-pub (Publisher before chapter, pages);
+% \item
+% ISBN NUMBER: isbn: (Include ISBN for books, booklets)
+% \item
+% ISSN NUMBER: issn: (Include ISSN for periodicals)
+% \item
+% EDITOR IN COLLECTIONS: b: edby (Booktitle, edited by \dots);
+% \item
+% PUNCTUATION BETWEEN SECTIONS (BLOCKS): c: blk-com (Comma between blocks);
+% \item
+% ABBREVIATE WORD `PAGES': a: pp (`Page' abbreviated);
+% \item
+% ABBREVIATE WORD `EDITORS': a: ed (`Editor' abbreviated);
+% \item
+% OTHER ABBREVIATIONS: a: abr (Abbreviations);
+% \item
+% ABBREVIATION FOR `EDITION': a: ednx (`Edition' abbreviated as `ed');
+% \item
+% EDITION NUMBERS: n: ord (Numerical editions);
+% \item
+% STORED JOURNAL NAMES: a: jabr (Abbreviated journal names);
+% \item
+% FONT OF `ET AL': i: etal-it (Italic et al);
+% \item
+% ADDITIONAL REVTeX DATA FIELDS: r: revdata, eprint, url, url-blk (Include REVTeX data fields collaboration, eid, eprint, numpages, url)
+% \item
+% NEW FONT SELECTION SCHEME: n: nfss (NFSS);
+% \item
+% ADDITIONAL REVTeX DATA FIELDS: y: revdata (additional data fields);
+% \item
+% REFERENCE COMPONENT TAGS: y: reference component tags;
+% \item
+% URL ADDRESS: n: URL as note;
+% \end{enumerate}
+%
+% A file \file{apsrev.dbj} file equivalent to the following should result:
+% \begin{verbatim}
+% \input docstrip
+% \preamble
+% ----------------------------------------
+% *** REVTeX-compatible apsrev.bst ***
+% \endpreamble
+% \postamble
+% End of customized bst file
+% \endpostamble
+% \keepsilent
+% \askforoverwritefalse
+% \def\MBopts{\from{merlin.mbs}{%
+% seq-no%: Citation order (unsorted, like unsrt.bst)
+% ,nm-init,ed-au%: Initials + surname (J. F. Smith)
+% ,nmlm%: Limited authors (et al replaces missing names)
+% ,x10%: Maximum of 10 authors
+% ,m10%: Minimum of 10 authors
+% ,nmft,nmft-def%: User defined author font (\bibnamefont)
+% ,fnm-def%: First names in user defined font (\bibfnamefont)
+% ,nmfted%: Editors incollection like authors font
+% ,yr-par%: Date in parentheses as (May 1993)
+% ,xmth%: Date is year only
+% ,tit-it%: Title italic (\em)
+% ,jtit-x%: No article title
+% ,jttl-rm%: Journal name normal font
+% ,trtit-b%: Tech. report title like books
+% ,vol-bf%: Volume bold as {\bf vol}(num)
+% ,volp-com%: Volume with comma as vol(num), ppp
+% ,jpg-1%: Only start page number
+% ,jnm-x%: Space after journal name
+% ,pub-date%: Publisher and date in parentheses (Oxford, 1994)
+% ,pre-pub%: Publisher before chapter, pages
+% ,isbn%: Include ISBN for books, booklets, etc.
+% ,issn%: Include ISSN for periodicals
+% ,edby%: In booktitle, edited by .. (where .. is names)
+% ,blk-com%: Comma between blocks
+% ,pp%: `Page' abbreviated as p. or pp.
+% ,ed%: `Editor' abbreviated as ed. or eds.
+% ,abr%: Abbreviations of such words
+% ,ednx%: `Edition' abbreviated as `ed'
+% ,ord%: Numerical editions as 1st, 2nd, 3rd, etc
+% ,jabr%: Abbreviated journal names
+% ,etal-it%: Italic et al
+% ,revdata,eprint,url,url-blk%: Include REVTeX data fields collaboration, eid, eprint, numpages, url
+% ,url,url-nt%: URL as note
+% ,bibinfo%: Reference component tags like \bibinfo in the content of \bibitem
+% ,nfss%: NFSS use \textbf, \emph, not \bf, \em
+% }}
+% \generate{\file{\jobname.bst}{\MBopts}}
+% \endbatchfile
+% \end{verbatim}
+%
+% To get a banner in the \file{.blg} file, patch by hand into \file{apsrev.bst}:
+% \begin{verbatim}
+% FUNCTION {banner.log} {"REVTeX-compatible apsrev.bst 9812" warning$}
+% \end{verbatim}
+% and invoke \texttt{banner.log} from within \texttt{begin.bib}
+%
+% We ensure that the journal substyle has the first word
+% in the matter by installing the (default) APS code
+% later on (see Section~\ref{sec:aps-defaults}).
+% \end{macro}
+%
+% \begin{macro}{\bibpunct}
+% The following commands effectively establish the style in which \cmd\cite\ commands are
+% formatted.
+% You can think of them as the second needed component for the bibliography.
+%
+% Set up for numerical citations.
+%
+% The journal substyles can override these choices.
+%
+% Note that setting \cmd\NAT@sort\ at this late hour is not totally effective.
+% You have to give \classname{natbib} the relevant options at load time.
+% \begin{macrocode}
+ \bibpunct{[}{]}{,}{n}{}{,}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bibsection}
+% We define the sectioning command to use when starting the bibliography.
+%
+% \changes{v4.0rc1}{2001/06/18}
+% {grid changes with push and pop}
+% \begin{macrocode}
+ \def\bibsection{%
+ \par
+% \twocolumn@sw{\onecolumngrid}{}%
+ \onecolumngrid@push
+ \begingroup
+ \baselineskip26\p@
+% \def\@currentHref{section.bib}%
+ \bib@device{\textwidth}{245.5\p@}%
+ \endgroup
+ \nobreak\@nobreaktrue
+ \addvspace{19\p@}%
+ \par
+% \twocolumn@sw{\twocolumngrid}{}%
+ \onecolumngrid@pop
+ }%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bib@device}
+% \begin{macro}{\bibpreamble}
+% \begin{macro}{\bibsep}
+% \begin{macro}{\newblock}
+% We define the sectioning command to use when starting the bibliography.
+% \begin{macrocode}
+\def\bib@device#1#2{%
+ \hb@xt@#1{%
+ \hfil
+ \phantomsection
+ \addcontentsline {toc}{section}{\protect\numberline{}\refname}%
+% \hyper@anchorstart {\@currentHref }%
+ \hb@xt@#2{%
+ \skip@\z@\@plus-1fil\relax
+ \leaders\hrule height.25 \p@ depth.25 \p@ \hskip\z@\@plus1fil
+ \hskip\skip@
+ \hskip\z@\@plus0.125fil\leaders\hrule height.375\p@ depth.375\p@ \hskip\z@\@plus0.75fil \hskip\z@\@plus0.125fil
+ \hskip\skip@
+ \hskip\z@\@plus0.25 fil\leaders\hrule height.5 \p@ depth.5 \p@ \hskip\z@\@plus0.5 fil \hskip\z@\@plus0.25 fil
+ \hskip\skip@
+ \hskip\z@\@plus0.375fil\leaders\hrule height.625\p@ depth.625\p@ \hskip\z@\@plus0.25fil \hskip\z@\@plus0.375fil
+ % \hskip\skip@
+ % \hfil
+ }%
+%\hyper@anchorend
+ \hfil
+ }%
+}%
+\let\bibpreamble\@empty
+\bibsep\z@\relax
+\def\newblock{\ }%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\bibfont}
+% We define the font switch that applies to the body of the bibliography.
+%
+% \begin{macrocode}
+ \def\bibfont{%
+ \small
+ }%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection{Index}%
+% FIXME: the following call to \cmd\twocolumn\ appears wrong if we were in two-column grid.
+% \changes{v4.0beta 3}{1999/11/13}
+% {grid changes with ltxgrid}
+% \changes{v4.0rc1}{2001/06/18}
+% {grid changes with push and pop}
+% \begin{macrocode}
+\newenvironment{theindex}{%
+%\let\wastwocol@sw\twocolumn@sw
+ \columnseprule \z@
+ \columnsep 35\p@
+ \c@secnumdepth-\maxdimen
+ \onecolumngrid@push
+ \section{\indexname}%
+ \thispagestyle{plain}%
+ \parindent\z@
+ \parskip\z@ plus.3\p@\relax
+ \let\item\@idxitem
+%\wastwocol@sw{\twocolumngrid}{}%
+ \onecolumngrid@pop
+}{%
+%\onecolumngrid@pop
+}%
+%
+\def\@idxitem{\par\hangindent 40\p@}
+%
+\def\subitem{\par\hangindent 40\p@ \hspace*{20\p@}}
+%
+\def\subsubitem{\par\hangindent 40\p@ \hspace*{30\p@}}
+%
+\def\indexspace{\par \vskip 10\p@ plus5\p@ minus3\p@\relax}
+% \end{macrocode}
+%
+%
+% \subsection{Journal-Specific Code}%
+%
+% For APS journals, we supply code specific to PRA, PRB, PRC, PRD, PRE, PRL, and RMP.
+% At present, they are identical,
+% with the exception of PRB's code for superscript citations.
+%
+% \begin{macrocode}
+\def\journal@pra{pra}%
+\def\journal@prb{prb}%
+\def\journal@prc{prc}%
+\def\journal@prd{prd}%
+\def\journal@pre{pre}%
+\def\journal@prl{prl}%
+\def\journal@prstab{prstab}%
+\def\journal@rmp{rmp}%
+% \end{macrocode}
+%
+% Note: the convention in this document class is that
+% the substyle must not override any explicit class options
+% declared by the document.
+% This means that the various Booleans of Section~\ref{sec:options}
+% may be assigned here only if they are still undefined at this point.
+%
+% For most all of the APS journals, the journal-dependent
+% code is relatively meager and is therefore embedded in this file.
+% However, the RMP code is sufficiently extensive that
+% splitting it out into a separate file is more convenient.
+%
+% \subsubsection{\classoption{pra}}%
+% \begin{macrocode}
+\@ifx{\@journal\journal@pra}{%
+% \end{macrocode}
+%
+% End of \classoption{pra} code.
+% \begin{macrocode}
+}{}%
+% \end{macrocode}
+%
+% \subsubsection{\classoption{prb}}%
+% \begin{macrocode}
+\@ifx{\@journal\journal@prb}{%
+% \end{macrocode}
+% PRB requires superscript citations.
+% We use Patrick Daly's \classname{natbib} package,
+% and hyperref and other packages are already set up to cope with this.
+%
+% \begin{macro}{\bibpunct}
+% By default, PRB selects the \classoption{bibnotes} option.
+% We also set up for numerical citations.
+% \begin{macrocode}
+ \@ifxundefined\bibnotes@sw{\@booleantrue\bibnotes@sw}{}%
+ \bibpunct{}{}{,}{s}{}{\textsuperscript{,}}%
+ \def\@onlinecite#1{\begingroup\let\@cite\NAT@citenum\citealp{#1}\endgroup}%
+% \end{macrocode}
+% \end{macro}
+%
+% Invoke \classoption{superbib} option if the document
+% has made no selection of its own.
+% \begin{macrocode}
+ \appdef\class@documenthook{%
+ \@ifxundefined\place@bibnumber{%
+ \let\place@bibnumber\place@bibnumber@sup
+ }{}%
+ }%
+% \end{macrocode}
+%
+% End of \classoption{prb} code.
+% \begin{macrocode}
+}{}%
+% \end{macrocode}
+%
+% \subsubsection{\classoption{prc}}%
+% \begin{macrocode}
+\@ifx{\@journal\journal@prc}{%
+% \end{macrocode}
+%
+% End of \classoption{prc} code.
+% \begin{macrocode}
+}{}%
+% \end{macrocode}
+%
+% \subsubsection{\classoption{prd}}%
+% \begin{macrocode}
+\@ifx{\@journal\journal@prd}{%
+% \end{macrocode}
+%
+% End of \classoption{prd} code.
+% \begin{macrocode}
+}{}%
+% \end{macrocode}
+%
+% \subsubsection{\classoption{pre}}%
+% \begin{macrocode}
+\@ifx{\@journal\journal@pre}{%
+% \end{macrocode}
+%
+% End of \classoption{prd} code.
+% \begin{macrocode}
+}{}%
+% \end{macrocode}
+%
+% \subsubsection{\classoption{prl}}%
+% \begin{macrocode}
+\@ifx{\@journal\journal@prl}{%
+% \end{macrocode}
+% In PRL, the default is the \classoption{bibnotes} option,
+% and the Acknowledgments section has no head.
+%
+% However, the References head is a device that may be described as a lozenge centered on the baseline,
+% 71 points wide by 2 points thick, with the ends tapering to a half point in thickness.
+% Space above 26 points base to base, below 31 base to base.
+% \begin{macrocode}
+ \@ifxundefined\bibnotes@sw{\@booleantrue\bibnotes@sw}{}%
+ \@booleanfalse\acknowledgments@sw
+%\let\acknowledgmentsname\@empty
+ \def\bibsection{%
+ \par
+ \begingroup
+ \baselineskip26\p@
+ \bib@device{\hsize}{72\p@}%
+ \endgroup
+ \nobreak\@nobreaktrue
+ \addvspace{19\p@}%
+ }%
+% \end{macrocode}
+% Implement length checking.
+% Use the \classname{times} and \classname{mathtime} packages,
+% plus whatever other processing is required
+% to make the formatted output be true
+% to the metrics of the journal.
+%
+% Wait. Do not use mathtime after all. APS has their own way of doing math pi, involving
+% Adobe Mathematical Pi and other fonts.
+% \begin{macrocode}
+%\appdef\class@documenthook{%
+ \@ifxundefined\lengthcheck@sw{\@booleanfalse\lengthcheck@sw}{}%
+ \lengthcheck@sw{%
+ \RequirePackage{times}%
+% \RequirePackage{mathtime}%
+ }{%
+ }%
+%}%
+% \end{macrocode}
+% A PRL does not have numbered sections.
+% \begin{macrocode}
+ \c@secnumdepth=-\maxdimen
+% \end{macrocode}
+% Note: we defer this code until after type size file is read in.
+% \begin{macrocode}
+ \appdef\set@typesize@hook{%
+ \@ifnum{\@pointsize=10\relax}{%
+ \lengthcheck@sw{%
+ \def\large{%
+ \@setfontsize\large{12.5}{14\p@}%
+ }%
+ \def\normalsize{%
+ \@setfontsize\normalsize{10.5}\@xiipt
+ \abovedisplayskip 6\p@ \@plus6\p@ \@minus5\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \abovedisplayskip
+ \belowdisplayshortskip \abovedisplayskip
+ \let\@listi\@listI
+ }%
+ \def\small{%
+ \@setfontsize\small{9.5}\@xipt
+ \abovedisplayskip 5\p@ \@plus5\p@ \@minus4\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \abovedisplayskip
+ \belowdisplayshortskip \abovedisplayskip
+ \let\@listi\@listI
+ }%
+ \DeclareMathSizes{12.5}{12.5}{9}{6}%
+ \DeclareMathSizes{10.5}{10.5}{7.5}{5}%
+ \DeclareMathSizes{9.5}{9.5}{7.0}{5}%
+ }{%
+ \def\normalsize{%
+ \@setfontsize\normalsize\@xpt\@xiipt
+ \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \abovedisplayskip
+ \belowdisplayshortskip \abovedisplayskip
+ \let\@listi\@listI
+ }%
+ }%
+ }{}%
+ }%
+%\appdef\set@pica@hook{%
+ \@ifnum{\@pointsize=10\relax}{%
+ \textheight = 694.0\p@
+% \textheight = 55\baselineskip
+% \advance\textheight by \topskip
+ }{}%
+%}%
+% \end{macrocode}
+%
+% End of \classoption{prl} code.
+% \begin{macrocode}
+}{}%
+% \end{macrocode}
+%
+% \subsubsection{\classoption{prstab}}%
+% \begin{macrocode}
+\@ifx{\@journal\journal@prstab}{%
+% \end{macrocode}
+%
+% End of \classoption{prstab} code.
+% \begin{macrocode}
+}{}%
+% \end{macrocode}
+%
+% \subsubsection{\classoption{rmp}}%
+% Read in the code from a file.
+% \begin{macrocode}
+\@ifx{\@journal\journal@rmp}{\input{\@journal\substyle@ext}}{}%
+% \end{macrocode}
+%
+%
+% \subsection{Establish APS Defaults}\label{sec:aps-defaults}
+%
+% \begin{macro}{\footinbib@sw}
+% All APS journals except RMP invoke the \classoption{footinbib} option.
+% We rely on the RMP-specific code to give a value to this switch.
+% \begin{macrocode}
+\@ifxundefined\footinbib@sw{\@booleantrue\footinbib@sw}{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\place@bibnumber}
+% \begin{macro}{\@bibstyle}
+% We install code that will select the presentation for \cmd\bibitem s
+% and govern the \BibTeX\ processing.
+% If the user has not selected any related option and if
+% the journal substyle also has not, then the \classoption{aps}
+% option choses these defaults.
+% \begin{macrocode}
+\appdef\class@documenthook{%
+ \@ifxundefined\place@bibnumber{%
+ \let\place@bibnumber\place@bibnumber@inl
+ }{}%
+ \@ifxundefined\@bibstyle{%
+ \def\@bibstyle{apsrev}%
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macrocode}
+%</aps>
+% \end{macrocode}
+%
+%
+% \section{The \classoption{rmp} journal substyle: the \texttt{rmp} module}
+%
+% The file \file{rmp.rtx} is read in by the \classname{revtex4} document class
+% if \cmd\@society\ has the value \classoption{aps}
+% and \cmd\@journal\ has the value \classoption{rmp}.
+%
+% It is read at the end of the \filename{aps.rtx}, so all definitions
+% and assignments in that file are operative unless overridden here.
+%
+%
+% \begin{macrocode}
+%<*rmp>
+% \end{macrocode}
+%
+% Protect this file from being read in by anything but \revtex.
+% \begin{macrocode}
+\ifx\undefined\substyle@ext
+ \def\@tempa{%
+ \endinput
+ \GenericWarning{I must be read in by REVTeX! (Bailing out)}%
+ }%
+ \expandafter\else
+ \def\@tempa{}%
+ \expandafter\fi\@tempa
+% \end{macrocode}
+%
+% Protect this file from being read in as a society instead of a journal.
+% In such a case, \cmd\@journal\ will be \cmd\@empty.
+% \begin{macrocode}
+\@ifx@empty\@journal{%
+ \class@warn{I have to read in the aps substyle first!}%
+ \endinput
+ \def\@society{aps}\def\@journal{rmp}%
+ \expandafter\input\expandafter{\@society\substyle@ext}%
+}{}%
+% \end{macrocode}
+%
+% \subsection{Frontmatter}%
+%
+% \begin{macro}{\frontmatter@setup}
+%
+% \begin{macrocode}
+\def\frontmatter@setup{%
+ \normalfont\sffamily\raggedright
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\PACS@warn}
+% Per Mark Doyle, RMP never displays the PACS, so they don't want the `use showpacs' warning spit out.
+% \begin{macrocode}
+\def\PACS@warn{RMP documents do not display PACS. Your \string\pacs\space will be ignored}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@title@above}
+% \begin{macro}{\frontmatter@title@format}
+% \begin{macro}{\frontmatter@title@below}
+%
+% \begin{macrocode}
+\def\frontmatter@title@above{}%
+\def\frontmatter@title@format{\Large\bfseries\raggedright}% HelveticaNeue-Medium(Italic) 14pt.
+\def\frontmatter@title@below{\addvspace{12\p@}}% 24pt b-b down to first author
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@authorformat}
+% Set the rag to a milder value, because we want to do true ragged right
+% typesetting, as opposed to the \LaTeX\ default, which gives very poor results.
+%
+% Note: author font is 9.8bp. 19.2bp/14.3bp above/below.
+% \begin{macrocode}
+\def\frontmatter@authorformat{%
+ \preprintsty@sw{\vskip0.5pc\relax}{}%
+ \@tempskipa\@flushglue
+ \@flushglue\z@ plus50\p@\relax
+ \raggedright\advance\leftskip.5in\relax
+ \@flushglue\@tempskipa
+ \parskip\z@skip
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@affiliationfont}
+% The hook \cmd\frontmatter@affiliationfont\ controls the formatting of affiliations and affiliation groups.
+% The hook \cmd\frontmatter@above@affilgroup\ is invoked just before proceeding with author/affiliation processing.
+% The \cmd\frontmatter@above@affiliation\ is the amount of space above affiliations in the \classoption{groupedaddress} style,
+% and \cmd\frontmatter@above@affiliation@script\ is that for \classoption{superscriptaddress}.
+%
+% Note: affiliation font is 9.03/10.4bp, 14.3bp/19.2bp b-b above/below
+% \begin{macrocode}
+\def\frontmatter@affiliationfont{% Helvetica 9/10.2
+ \small\slshape\selectfont\baselineskip10.5\p@\relax
+ \@tempskipa\@flushglue
+ \@flushglue\z@ plus50\p@\relax
+ \raggedright\advance\leftskip.5in\relax
+ \@flushglue\@tempskipa
+}%
+\def\frontmatter@above@affilgroup{\addvspace{7.2\p@}}% additional leading above an author
+\def\frontmatter@above@affiliation{\addvspace{5.3\p@}}%
+\def\frontmatter@above@affiliation@script{}%
+% \end{macrocode}
+% \end{macro}
+%
+% Set up the default RMP style for title block authors and affiliations.
+% This command should effectively override the effect of the
+% corresponding command in the parent substyle.
+% \begin{macrocode}
+\@ifxundefined\groupauthors@sw{%
+ \clo@groupedaddress
+}{}%
+% \end{macrocode}
+%
+% \begin{macro}{\frontmatter@RRAP@format}
+% Note: in RMP, if we are not in preprint mode, the date will not be produced.
+%
+% Note: Helvetica C/lc, 8.98bp, space above: 16.3bp b-b.
+% \begin{macrocode}
+\def\frontmatter@RRAP@format{%
+ \addvspace{7.3\p@}%
+ \small
+ \raggedright\advance\leftskip.5in\relax
+% \parskip.5ex\relax
+% \everypar{\hbox\bgroup(\@gobble@leavemode@uppercase}%
+% \def\par{\@ifvmode{}{\unskip)\egroup\@@par}}%
+% \preprintsty@sw{}{\let\@date\@empty}%
+}%
+%\def\@gobble@leavemode@uppercase#1#2{\expandafter\MakeTextUppercase}%
+\def\produce@RRAP#1{%
+ \@if@empty{#1}{}{%
+ \@ifvmode{\leavevmode}{}%
+ \unskip(\ignorespaces#1\unskip)\quad
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@abstractheading}
+% Space above 21.8bp b-b.
+% \begin{macrocode}
+\def\frontmatter@abstractheading{%
+ \preprintsty@sw{%
+ \begingroup
+ \centering\large
+ \abstractname
+ \par
+ \endgroup
+ \vspace{.5pc}%
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@abstractfont}
+% TimesTen 8.93bp/9.6bp X 360bp, indented 36bp, with 21.9/37.6bp b-b above/below
+% \begin{macrocode}
+\def\frontmatter@abstractfont{%
+ \footnotesize
+ \hsize360\p@
+ \leftskip=0.5in
+ \advance\hsize\leftskip
+%\rightskip=\leftskip
+ \parindent\z@
+%\hsize5.5in
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@preabstractspace}
+% \begin{macro}{\frontmatter@postabstractspace}
+% Space above and space below abstract in title block.
+% Should be 22/36 points base-to-base.
+% \begin{macrocode}
+\def\frontmatter@preabstractspace{7.7\p@}%
+\def\frontmatter@postabstractspace{24.6\p@}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% FIXME: Not done: PACS.
+% FIXME: TOC: Head is same as \section: HelveticaNeue 8.98. 32/22bp b-b above/below,
+% Body: TimesTen 8/10.5.
+%
+% \subsection{General Text}%
+%
+% If not in preprint mode, set the type size to 10/12 point. Note: s/b 11.6bp leading
+% \begin{macrocode}
+ \appdef\set@typesize@hook{%
+ \@ifxundefined\preprintsty@sw{}{%
+ \preprintsty@sw{}{%
+ \def\normalsize{%
+ \@setsize\normalsize{12pt}\xpt\@xpt
+ \abovedisplayskip 10\p@ plus2\p@ minus5\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \abovedisplayskip
+ \belowdisplayshortskip \abovedisplayskip
+ \let\@listi\@listI
+ }%
+ }%
+ }%
+ }%
+% \end{macrocode}
+%
+% Footnote mods:
+% \begin{macrocode}
+ \footnotesep 9.25pt
+ \skip\footins 36pt plus 4pt minus 2pt
+ \def\footnoterule{\kern-13pt\hrule width.5in\kern15.6pt\relax}%
+% \end{macrocode}
+%
+%
+% \subsection{Sectioning}
+%
+% \begin{macrocode}
+\def\thepart{\Roman{part}} %
+\def\thesection{\Roman{section}}
+\def\p@section{}
+\def\thesubsection{\Alph{subsection}}
+\def\p@subsection{\thesection.}
+\def\thesubsubsection{\arabic{subsubsection}}
+\def\p@subsubsection{\thesection.\thesubsection.}
+\def\theparagraph{\alph{paragraph}}
+\def\p@paragraph{\thesection.\thesubsection.\thesubsubsection.}
+\def\thesubparagraph{\arabic{subparagraph}}
+\def\p@subparagraph{\thesection.\thesubsection.\thesubsubsection.\theparagraph.}
+% \end{macrocode}
+%
+% In RMP, put a period (.), followed by nut space, after the section number.
+% Also, hang the section number (the \LaTeX\ default).
+% \begin{macrocode}
+\def\@seccntformat#1{\csname the#1\endcsname.\hskip0.5em\relax}%
+% \end{macrocode}
+%
+% Note that we wish to set the section head uppercase, so we use
+% David Carlisle's \cmd\MakeTextUppercase. However, because this procedure effectively
+% parses its argument (looking for things to \emph{not} translate), it has to be invoked
+% in such a way that the argument of the \cmd\section\ command is passed to it as its
+% own argument.
+%
+% To accomplish this, we use the \cmd\@hangfrom@\ hook, which was developed for this
+% purpose.
+% \begin{macrocode}
+ \def\section{%
+ \@startsection{section}{1}{\z@}{0.8cm plus1ex minus.2ex}{0.4cm}%
+ {%
+ \small\sffamily\bfseries\selectfont
+ \raggedright
+ \parindent\z@
+ }%
+ }%
+ \def\@hangfrom@section#1#2#3{\@hangfrom{#1#2}\MakeTextUppercase{#3}}%
+ \def\subsection{%
+ \@startsection{subsection}{2}{\z@}{0.8cm plus1ex minus.2ex}{0.4cm}%
+ {%
+ \small\sffamily\bfseries
+ \raggedright
+ \parindent\z@
+ }%
+ }%
+ \def\subsubsection{%
+ \@startsection{subsubsection}{3}{\z@}{.8cm plus1ex minus.2ex}{0.4cm}%
+ {%
+ \small\sffamily\selectfont
+ \raggedright
+ \parindent\z@
+ }%
+ }%
+ \def\paragraph{%
+ \@startsection{paragraph}{4}{\z@}{.8cm plus1ex minus.2ex}{-1em}%
+ {%
+ \small\slshape\selectfont
+ \raggedright
+ \parindent\z@
+ }%
+ }%
+ \def\subparagraph{%
+ \@startsection{subparagraph}{4}{\parindent}{3.25ex plus1ex minus.2ex}{-1em}%
+ {\normalsize\bfseries\selectfont}%
+ }%
+%
+ \setcounter{tocdepth}{4}% FIXME: has no effect
+% \end{macrocode}
+%
+% \begin{macro}{\appendix}
+% \begin{macro}{\@hangfrom@appendix}
+% \begin{macro}{\@hangfroms@appendix}
+% \begin{macro}{\@appendixcntformat}
+% \begin{macrocode}
+\appdef\appendix{%
+ \let\@hangfrom@section\@hangfrom@appendix
+ \let\@hangfroms@section\@hangfroms@appendix
+ \let\@sectioncntformat\@appendixcntformat
+}%
+\def\@hangfrom@appendix#1#2#3{%
+ #1%
+ \@if@empty{#2}{%
+ #3%
+ }{%
+ #2\@if@empty{#3}{}{:\ #3}%
+ }%
+}%
+\def\@hangfroms@appendix#1#2{%
+ #1\appendixname\@if@empty{#2}{}{:\ #2}%
+}%
+\def\@appendixcntformat#1{\appendixname\ \csname the#1\endcsname}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Figure and Table Caption Formatting}
+% \begin{macro}{\@makecaption}
+%
+% \begin{macrocode}
+\setlength\belowcaptionskip{2\p@}
+\long\def\@makecaption#1#2{%
+ \vskip\abovecaptionskip
+ \vbox{%
+ \flushing
+ \small\rmfamily
+% \hsize\@capwidth
+ \noindent
+ #1\nobreak\hskip.5em plus.2em\ignorespaces#2\par
+ }%
+ \vskip\belowcaptionskip
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Citations and Bibliography}%
+%
+% Customize \revtex\ for the journal substyle;
+% this task requires three components:
+% a \BibTeX\ \file{.bst} style file,
+% customizing code for \file{natbib}, and
+% customizations of the \env{thebibliography} environment.
+%
+% \begin{macro}{\@bibstyle}
+% Define the argument of the \cmd\bibliographystyle\ command
+% (if the document does not do so).
+%
+% The user must have installed a \file{.bst} file of the corresponding name.
+% This file will then be used by \BibTeX\ when compiling the document's \file{.bbl} file.
+%
+% To generate \file{apsrmp.bst}, use \classname{custom-bib} version 3.89d1 or later.
+% Run the \file{.bst} generator, \file{makebst.tex}, with the following options:
+%
+% \begin{enumerate}
+% \item
+% STYLE OF CITATIONS: a: ay( Author-year with some non-standard interface)
+% \item
+% AUTHOR-YEAR SUPPORT SYSTEM: nat: (Natbib for use with natbib v5.3 or later)
+% \item
+% ORDERING OF REFERENCES: *: (Alphabetical);
+% \item
+% ORDER ON VON PART: x: vonx (Sort without von part---de la Maire after Mahone)
+% \item
+% AUTHOR NAMES: a: nm-rev1 (Only first name reversed, initials---AGU style: Smith, J. F., H. K. Jones)
+% \item
+% POSITION OF JUNIOR: jnrlst (Junior comes last as Smith, John, Jr.)
+% \item
+% NUMBER OF AUTHORS: l: max 12, min 12 (three prompts in all);
+% \item
+% TYPEFACE FOR AUTHORS IN LIST OF REFERENCES: u: nmft, nmft-def (User defined author font---\cmd\bibnamefont)
+% \item
+% FONT FOR FIRST NAMES: u: fnm-def (First names in user defined font---\cmd\bibfnamefont)
+% \item
+% EDITOR NAMES IN INCOLLECTION ETC: a: nmfted (Editors incollection like authors font)
+% \item
+% FONT FOR `AND' IN LIST: r: nmand-rm (`And' in normal font---JONES and JAMES)
+% \item
+% FONT OF CITATION LABELS IN TEXT: u: lab, lab-def (User-defined citation font---\cmd\citenamefont)
+% \item
+% LABEL WHEN AUTHORS MISSING: keyxyr (Year blank when KEY replaces missing author---for natbib 7.0)
+% \item
+% DATE POSITION: b: dt-beg (Date after authors)
+% \item
+% SUPPRESS MONTH: xmth (Date is year only)
+% \item
+% DATE FORMAT: yr-com (Date preceded by comma as `, 1993')
+% \item
+% TRUNCATE YEAR: note-yr (Year text full as 1990--1993 or `in press')
+% \item
+% ARTICLE TITLE PRESENT: x: jtit-x (No article title);
+% \item
+% JOURNAL TITLE FONT: r: jttl-rm (Journal title normal);
+% \item
+% TECHNICAL REPORT TITLE: b: trtit-b (Tech. report title like books);
+% \item
+% JOURNAL VOLUME: b: vol-bf (Volume bold);
+% \item
+% VOLUME PUNCTUATION: c: volp-com (Volume with comma);
+% \item
+% PAGE NUMBERS: f: jpg-1 (Only start page number);
+% \item
+% POSITION OF PAGES: e: pp-last (Pages at end, but before any notes)
+% \item
+% NUMBER AND SERIES FOR COLLECTIONS: num-xser (Allows number without series and suppresses word ``number'')
+% \item
+% JOURNAL NAME PUNCTUATION: x: jnm-x (Space after journal);
+% \item
+% PUBLISHER IN PARENTHESES: p: pub-par (Publisher in parentheses)
+% \item
+% PUBLISHER POSITION: p: pre-pub (Publisher before chapter, pages);
+% \item
+% ISBN NUMBER: *: isbn (Include ISBN);
+% \item
+% ISSN NUMBER: *: isbn (Include ISSN for periodicals);
+% \item
+% `EDITOR' AFTER NAMES: a: edpar (`Name (editor),' in parentheses, after name, comma after)
+% \item
+% EDITOR IN COLLECTIONS: b: edby (In booktitle, edited by\dots---where \dots is names)
+% \item
+% PUNCTUATION BETWEEN SECTIONS (BLOCKS): c: blk-com (Comma between blocks);
+% \item
+% `IN' WITH JOURNAL NAMES: i: injnl (Add `in' before journal name in style for incollection)
+% \item
+% ABBREVIATE WORD `PAGES': a: pp (`Page' abbreviated);
+% \item
+% ABBREVIATE WORD `EDITORS': a: ed (`Editor' abbreviated);
+% \item
+% ABBREVIATION FOR `EDITION': a: ednx (`Edition' abbreviated as `ed');
+% \item
+% EDITION NUMBERS: xedn (Editions as in database saving much processing memory)
+% \item
+% STORED JOURNAL NAMES: a: jabr (Abbreviated journal names);
+% \item
+% FONT OF `ET AL': i: etal-it (Italic et al);
+% \item
+% ADDITIONAL REVTeX DATA FIELDS: r: revdata, eprint, url, url-blk (Include REVTeX data fields)
+% \item
+% NEW FONT SELECTION SCHEME: n: nfss (NFSS);
+% \item
+% ADDITIONAL REVTeX DATA FIELDS: y: revdata (additional data fields);
+% \item
+% REFERENCE COMPONENT TAGS: r: bibinfo (reference component tags);
+% \end{enumerate}
+%
+% A file \file{apsrmp.dbj} file equivalent to the following should result:
+% \begin{verbatim}
+% \input docstrip
+% \preamble
+% ----------------------------------------
+% *** REVTeX-compatible apsrmp.bst ***
+% \endpreamble
+% \postamble
+% End of customized bst file
+% \endpostamble
+% \keepsilent
+% \askforoverwritefalse
+% \def\MBopts{\from{merlin.mbs}{%
+% ay%: Author-year with some non-standard interface
+% ,nat%: Natbib for use with natbib v5.3 or later
+% ,vonx%: Sort without von part (de la Maire after Mahone)
+% ,nm-rev1%: Only first name reversed, initials (AGU style: Smith, J. F., H. K. Jones)
+% ,jnrlst%: Junior comes last as Smith, John, Jr.
+% ,nmlm%: Limited authors (et al replaces missing names)
+% ,x10%: Maximum of 10 authors
+% ,m10%: Minimum of 10 authors
+% ,nmft,nmft-def%: User defined author font (\bibnamefont)
+% ,fnm-def%: First names in user defined font (\bibfnamefont)
+% ,nmfted%: Editors incollection like authors font
+% ,nmand-rm%: `And' in normal font (JONES and JAMES)
+% ,lab,lab-def%: User defined citation font (\citenamefont)
+% ,keyxyr%: Year blank when KEY replaces missing author (for natbib 7.0)
+% ,dt-beg%: Date after authors
+% ,xmth%: Date is year only
+% ,yr-com%: Date preceded by comma as `, 1993'
+% ,note-yr%: Year text full as 1990--1993 or `in press'
+% ,jtit-x%: No article title
+% ,jttl-rm%: Journal name normal font
+% ,trtit-b%: Tech. report title like books
+% ,vol-bf%: Volume bold as {\bf vol}(num)
+% ,volp-com%: Volume with comma as vol(num), ppp
+% ,jpg-1%: Only start page number
+% ,pp-last%: Pages at end but before any notes
+% ,num-xser%: Allows number without series and suppresses word "number"
+% ,jnm-x%: Space after journal name
+% ,pub-par%: Publisher in parentheses
+% ,pre-pub%: Publisher before chapter, pages
+% ,isbn%: Include ISBN for books, booklets, etc.
+% ,issn%: Include ISSN for periodicals
+% ,edpar%: `Name (editor),' in parentheses, after name, comma after
+% ,edby%: In booktitle, edited by .. (where .. is names)
+% ,blk-com%: Comma between blocks
+% ,injnl%: Add `in' before journal name in style for incollection
+% ,pp%: `Page' abbreviated as p. or pp.
+% ,ed%: `Editor' abbreviated as ed. or eds.
+% ,xedn%: Editions as in database saving much processing memory
+% ,jabr%: Abbreviated journal names
+% ,etal-it%: Italic et al
+% ,revdata,eprint,url,url-blk%: Include REVTeX data fields collaboration, eid, eprint, numpages, url
+% ,bibinfo%: Reference component tags like \bibinfo in the content of \bibitem
+% ,nfss%: NFSS use \textbf, \emph, not \bf, \em
+% }}
+% \generate{\file{\jobname.bst}{\MBopts}}
+% \endbatchfile
+% \end{verbatim}
+%
+% \begin{macrocode}
+\appdef\class@documenthook{%
+ \@ifxundefined\@bibstyle{%
+ \def\@bibstyle{apsrmp}%
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bibpunct}
+% The following commands effectively etablish the style in which \cmd\cite\ commands are
+% formatted.
+% You can think of them as the second needed component for the bibliography.
+%
+% Set up for author-year citations:
+% when \cmd\NAT@set@cites\ executes (at \envb{document} time), the \cmd\@biblabel\ will
+% be set to \cmd\NAT@biblabel.
+%
+% Per Karie Friedman (friedman@phys.washington.edu), multiple citations are separated by semicolons, e.g.,
+% (Jones, 1999; Abbott and Smith, 2000; Wortley, 2001a),
+% and
+% multiple citations by the same author by commas, e.g.,
+% Abela et al. (1995, 1997a, 1997b).
+% The third argument of \cmd\bibpunct\ handles the former.
+%
+% The fifth argument puts a comma after the author when the year is not in parens:
+% (Lee et al., 1996).
+%
+% \begin{macrocode}
+ \bibpunct{(}{)}{;}{a}{,}{,}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\cite}
+% Per Mark Doyle, \cmd\cite\ is mapped to \cmd\citep\ in RMP.
+%
+% \begin{macrocode}
+ \let\cite\citep
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bibsection}
+% \begin{macro}{\bibpreamble}
+% \begin{macro}{\newblock}
+% \begin{macro}{\bibhang}
+% \begin{macro}{\bibsep}
+% We define the sectioning command to use when starting the bibliography.
+%
+% \begin{macrocode}
+\def\bibsection{%
+ \let\@hangfroms@section\@hang@froms
+ \section*{\refname}%
+ \@nobreaktrue
+}%
+\let\bibpreamble\@empty
+\def\newblock{\ }%
+\bibhang10\p@
+\bibsep\z@
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\footinbib@sw}
+% Footnotes in bibliography are inconsistent with author-year
+% references, and are particularly nast under \classname{natbib}:
+% the packcage will automatically change to numbered references if
+% any \cmd\bibitem\ commands lack the optional argument.
+% Therefore, we must uninvoke it now, even if invoked by the document.
+% \begin{macrocode}
+\@ifxundefined\footinbib@sw{}{%
+ \footinbib@sw{%
+ \class@warn{%
+ Footnotes in bibliography are incompatible with RMP.^^J%
+ Undoing the footinbib option.
+ }%
+ }{}%
+}%
+\@booleanfalse\footinbib@sw
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\eprint}
+% RMP requires the \cmd\eprint\ field in the bib entry to be set off with the word ``eprint''.
+% \begin{macrocode}
+\def\eprint#1{eprint #1}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Table of Contents}
+%
+% We set up for auto-sizing of certain TOC elements.
+%
+% To do this, we override certain definitions for
+% the default TOC font (\cmd\toc@@font) and spacing (\@dotsep),
+% and define
+% formatting for the needed elements (\cmd\l@\dots).
+% Finally, we activate the autosizing by
+% assigning \cmd\toc@pre\ and \cmd\toc@post.
+%
+% \begin{macro}{\toc@@font}
+% Set the formatting characteristics of the auto-indenting part
+% of the TOC.
+% \begin{macrocode}
+\def\toc@@font{%
+ \footnotesize\rmfamily
+ \def\\{\space\ignorespaces}%
+}%
+\def\@dotsep{5.5pt}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l@section}
+% Determine which TOC elements are automatically indented.
+% \begin{macrocode}
+\def\tocleft@{\z@}%
+\def\tocdim@min{5\p@}%
+\def\l@section{%
+ \l@@sections{}{section}% Implicit #3#4
+}%
+\def\l@subsection{%
+ \l@@sections{section}{subsection}% Implicit #3#4
+}%
+\def\l@subsubsection{%
+ \l@@sections{subsection}{subsubsection}% Implicit #3#4
+}%
+%\def\l@subsubsection#1#2{}%
+\def\l@paragraph#1#2{}%
+\def\l@subparagraph#1#2{}%
+% \end{macrocode}
+% \end{macro}
+%
+% Activate the TOC processing.
+% \begin{macrocode}
+\let\toc@pre\toc@pre@auto
+\let\toc@post\toc@post@auto
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+%</rmp>
+% \end{macrocode}
+%
+%
+% \Finale
+% %Here ends the programmer's documentation.
+% \endinput
+%
+\endinput
diff --git a/obsolete/macros/latex/contrib/revtex4-0/src/revtex4.ins b/obsolete/macros/latex/contrib/revtex4-0/src/revtex4.ins
new file mode 100644
index 0000000000..96cf5b0972
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-0/src/revtex4.ins
@@ -0,0 +1,36 @@
+% This file requires docstrip version 2.4 or higher available from
+% ftp://ctan.tug.org/tex-archive/macros/latex/unpacked/docstrip.tex
+\input docstrip
+\preamble
+
+This file is part of the APS files in the REVTeX 4 distribution.
+For the version number, search on the string %FileInfo
+
+Original version by David Carlisle
+Modified by Arthur Ogawa (mailto:ogawa@teleport.com)
+
+Copyright (c) 1999 The American Physical Society.
+http://publish.aps.org/revtex4/
+mailto:revtex4@aps.org
+
+See the REVTeX 4 README file for restrictions and more information.
+
+\endpreamble
+\keepsilent
+\askforoverwritefalse
+\generate{
+ \file{revtex4.cls}{%
+ \from{revtex4.dtx}{class-pre}%
+ \from{ltxutil.dtx}{ltxutil-krn}%
+ \from{ltxgrid.dtx}{ltxgrid-krn}%
+ \from{textcase.dtx}{package}%
+ \from{revtex4.dtx}{class-pst}%
+ }%
+ \file{aps.rtx}{\from{revtex4.dtx}{aps}}
+ \file{rmp.rtx}{\from{revtex4.dtx}{rmp}}
+ \file{10pt.rtx}{\from{revtex4.dtx}{10pt}}
+ \file{11pt.rtx}{\from{revtex4.dtx}{11pt}}
+ \file{12pt.rtx}{\from{revtex4.dtx}{12pt}}
+ \file{revsymb.sty}{\from{revtex4.dtx}{revsymb}}
+}
+\endbatchfile
diff --git a/obsolete/macros/latex/contrib/revtex4-0/src/revtex4.pdf b/obsolete/macros/latex/contrib/revtex4-0/src/revtex4.pdf
new file mode 100644
index 0000000000..cea52fde3d
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-0/src/revtex4.pdf
@@ -0,0 +1,17354 @@
+%PDF-1.3
+5 0 obj
+<< /S /GoTo /D (section.1) >>
+endobj
+8 0 obj
+(Using REVTeX)
+endobj
+9 0 obj
+<< /S /GoTo /D (section.2) >>
+endobj
+12 0 obj
+(Overview)
+endobj
+13 0 obj
+<< /S /GoTo /D (section.3) >>
+endobj
+16 0 obj
+(The installer file)
+endobj
+17 0 obj
+<< /S /GoTo /D (section.4) >>
+endobj
+20 0 obj
+(Writing journal-specifc extensions to REVTeX)
+endobj
+21 0 obj
+<< /S /GoTo /D (section.5) >>
+endobj
+24 0 obj
+(The revtex4 Document Class)
+endobj
+25 0 obj
+<< /S /GoTo /D (subsection.5.1) >>
+endobj
+28 0 obj
+(Compatability Processing)
+endobj
+29 0 obj
+<< /S /GoTo /D (section.6) >>
+endobj
+32 0 obj
+(Extensions to the LaTeX Kernel)
+endobj
+33 0 obj
+<< /S /GoTo /D (section.7) >>
+endobj
+36 0 obj
+(Options)
+endobj
+37 0 obj
+<< /S /GoTo /D (subsection.7.1) >>
+endobj
+40 0 obj
+(Define Booleans Used in Options)
+endobj
+41 0 obj
+<< /S /GoTo /D (subsection.7.2) >>
+endobj
+44 0 obj
+(Declare Options)
+endobj
+45 0 obj
+<< /S /GoTo /D (subsubsection.7.2.1) >>
+endobj
+48 0 obj
+(Checkin: for Editorial Use)
+endobj
+49 0 obj
+<< /S /GoTo /D (subsubsection.7.2.2) >>
+endobj
+52 0 obj
+(Preprint Style)
+endobj
+53 0 obj
+<< /S /GoTo /D (subsubsection.7.2.3) >>
+endobj
+56 0 obj
+(Showing PACS and keywords)
+endobj
+57 0 obj
+<< /S /GoTo /D (subsubsection.7.2.4) >>
+endobj
+60 0 obj
+(Balance the last page when in two-column page grid)
+endobj
+61 0 obj
+<< /S /GoTo /D (subsubsection.7.2.5) >>
+endobj
+64 0 obj
+(Showing preprint numbers)
+endobj
+65 0 obj
+<< /S /GoTo /D (subsubsection.7.2.6) >>
+endobj
+68 0 obj
+(Hypertext Option)
+endobj
+69 0 obj
+<< /S /GoTo /D (subsubsection.7.2.7) >>
+endobj
+72 0 obj
+(Type Size)
+endobj
+73 0 obj
+<< /S /GoTo /D (subsubsection.7.2.8) >>
+endobj
+76 0 obj
+(Media Size)
+endobj
+77 0 obj
+<< /S /GoTo /D (subsubsection.7.2.9) >>
+endobj
+80 0 obj
+(Bibnotes)
+endobj
+81 0 obj
+<< /S /GoTo /D (subsubsection.7.2.10) >>
+endobj
+84 0 obj
+(Footinbib)
+endobj
+85 0 obj
+<< /S /GoTo /D (subsubsection.7.2.11) >>
+endobj
+88 0 obj
+(altaffilletter)
+endobj
+89 0 obj
+<< /S /GoTo /D (subsubsection.7.2.12) >>
+endobj
+92 0 obj
+(superbib)
+endobj
+93 0 obj
+<< /S /GoTo /D (subsubsection.7.2.13) >>
+endobj
+96 0 obj
+(citeautoscript)
+endobj
+97 0 obj
+<< /S /GoTo /D (subsubsection.7.2.14) >>
+endobj
+100 0 obj
+(Simplex/Duplex Pages)
+endobj
+101 0 obj
+<< /S /GoTo /D (subsubsection.7.2.15) >>
+endobj
+104 0 obj
+(Two-Column Page Grid)
+endobj
+105 0 obj
+<< /S /GoTo /D (subsubsection.7.2.16) >>
+endobj
+108 0 obj
+(raggedbottom or flushbottom)
+endobj
+109 0 obj
+<< /S /GoTo /D (subsubsection.7.2.17) >>
+endobj
+112 0 obj
+(tightenlines)
+endobj
+113 0 obj
+<< /S /GoTo /D (subsubsection.7.2.18) >>
+endobj
+116 0 obj
+(lengthcheck)
+endobj
+117 0 obj
+<< /S /GoTo /D (subsubsection.7.2.19) >>
+endobj
+120 0 obj
+(Draft and Final)
+endobj
+121 0 obj
+<< /S /GoTo /D (subsubsection.7.2.20) >>
+endobj
+124 0 obj
+(eqsecnum)
+endobj
+125 0 obj
+<< /S /GoTo /D (subsubsection.7.2.21) >>
+endobj
+128 0 obj
+(secnumarabic)
+endobj
+129 0 obj
+<< /S /GoTo /D (subsubsection.7.2.22) >>
+endobj
+132 0 obj
+(floats/endfloats)
+endobj
+133 0 obj
+<< /S /GoTo /D (subsubsection.7.2.23) >>
+endobj
+136 0 obj
+(titlepage/notitlepage)
+endobj
+137 0 obj
+<< /S /GoTo /D (subsubsection.7.2.24) >>
+endobj
+140 0 obj
+(Substyle and Sub-substyle)
+endobj
+141 0 obj
+<< /S /GoTo /D (subsubsection.7.2.25) >>
+endobj
+144 0 obj
+(Presenting Authors and Their Affiliations)
+endobj
+145 0 obj
+<< /S /GoTo /D (subsubsection.7.2.26) >>
+endobj
+148 0 obj
+(Typeset by REVTeX)
+endobj
+149 0 obj
+<< /S /GoTo /D (subsection.7.3) >>
+endobj
+152 0 obj
+(Attempt to fix float placement failure)
+endobj
+153 0 obj
+<< /S /GoTo /D (subsection.7.4) >>
+endobj
+156 0 obj
+(Option to relax page height)
+endobj
+157 0 obj
+<< /S /GoTo /D (subsection.7.5) >>
+endobj
+160 0 obj
+(Selecting procedure for processing abstract)
+endobj
+161 0 obj
+<< /S /GoTo /D (subsection.7.6) >>
+endobj
+164 0 obj
+(Default Option)
+endobj
+165 0 obj
+<< /S /GoTo /D (subsection.7.7) >>
+endobj
+168 0 obj
+(Class-Asserted Options)
+endobj
+169 0 obj
+<< /S /GoTo /D (subsection.7.8) >>
+endobj
+172 0 obj
+(Execute Options)
+endobj
+173 0 obj
+<< /S /GoTo /D (section.8) >>
+endobj
+176 0 obj
+(Procedures Dependent Upon Options)
+endobj
+177 0 obj
+<< /S /GoTo /D (section.9) >>
+endobj
+180 0 obj
+(Required Packages)
+endobj
+181 0 obj
+<< /S /GoTo /D (section.10) >>
+endobj
+184 0 obj
+(Incompatible Packages)
+endobj
+185 0 obj
+<< /S /GoTo /D (section.11) >>
+endobj
+188 0 obj
+(Society- and Journal-Specific Code)
+endobj
+189 0 obj
+<< /S /GoTo /D (section.12) >>
+endobj
+192 0 obj
+(Front Matter)
+endobj
+193 0 obj
+<< /S /GoTo /D (subsection.12.1) >>
+endobj
+196 0 obj
+(The title command)
+endobj
+197 0 obj
+<< /S /GoTo /D (subsection.12.2) >>
+endobj
+200 0 obj
+(The author, affiliation, and related commands)
+endobj
+201 0 obj
+<< /S /GoTo /D (subsubsection.12.2.1) >>
+endobj
+204 0 obj
+(Commands for author or collaboration)
+endobj
+205 0 obj
+<< /S /GoTo /D (subsubsection.12.2.2) >>
+endobj
+208 0 obj
+(Commands for affiliation)
+endobj
+209 0 obj
+<< /S /GoTo /D (subsubsection.12.2.3) >>
+endobj
+212 0 obj
+(Commands for auxiliary information)
+endobj
+213 0 obj
+<< /S /GoTo /D (subsubsection.12.2.4) >>
+endobj
+216 0 obj
+(Procedures for author, collaboration, and affiliation)
+endobj
+217 0 obj
+<< /S /GoTo /D (subsection.12.3) >>
+endobj
+220 0 obj
+(The keywords command)
+endobj
+221 0 obj
+<< /S /GoTo /D (subsection.12.4) >>
+endobj
+224 0 obj
+(The `date command and related commands)
+endobj
+225 0 obj
+<< /S /GoTo /D (subsection.12.5) >>
+endobj
+228 0 obj
+(The pacs command)
+endobj
+229 0 obj
+<< /S /GoTo /D (subsection.12.6) >>
+endobj
+232 0 obj
+(The `preprint command)
+endobj
+233 0 obj
+<< /S /GoTo /D (subsection.12.7) >>
+endobj
+236 0 obj
+(draft)
+endobj
+237 0 obj
+<< /S /GoTo /D (subsection.12.8) >>
+endobj
+240 0 obj
+(The abstract environment)
+endobj
+241 0 obj
+<< /S /GoTo /D (subsection.12.9) >>
+endobj
+244 0 obj
+(Formatting the title block)
+endobj
+245 0 obj
+<< /S /GoTo /D (subsubsection.12.9.1) >>
+endobj
+248 0 obj
+(Authors and affiliations in superscriptaddress style)
+endobj
+249 0 obj
+<< /S /GoTo /D (subsubsection.12.9.2) >>
+endobj
+252 0 obj
+(Authors and affiliations in groupedaddress style)
+endobj
+253 0 obj
+<< /S /GoTo /D (subsection.12.10) >>
+endobj
+256 0 obj
+(Printing out the ``list-of'' elements)
+endobj
+257 0 obj
+<< /S /GoTo /D (section.13) >>
+endobj
+260 0 obj
+(Body)
+endobj
+261 0 obj
+<< /S /GoTo /D (subsection.13.1) >>
+endobj
+264 0 obj
+(counters)
+endobj
+265 0 obj
+<< /S /GoTo /D (subsection.13.2) >>
+endobj
+268 0 obj
+(float parameters)
+endobj
+269 0 obj
+<< /S /GoTo /D (subsection.13.3) >>
+endobj
+272 0 obj
+(List Environments)
+endobj
+273 0 obj
+<< /S /GoTo /D (subsection.13.4) >>
+endobj
+276 0 obj
+(Sectioning Commands)
+endobj
+277 0 obj
+<< /S /GoTo /D (subsubsection.13.4.1) >>
+endobj
+280 0 obj
+(Counters and Their Productions)
+endobj
+281 0 obj
+<< /S /GoTo /D (subsubsection.13.4.2) >>
+endobj
+284 0 obj
+(The Acknowledgments Environment)
+endobj
+285 0 obj
+<< /S /GoTo /D (subsubsection.13.4.3) >>
+endobj
+288 0 obj
+(Part Opener)
+endobj
+289 0 obj
+<< /S /GoTo /D (subsubsection.13.4.4) >>
+endobj
+292 0 obj
+(Stacked Heads)
+endobj
+293 0 obj
+<< /S /GoTo /D (subsubsection.13.4.5) >>
+endobj
+296 0 obj
+(Runin Heads)
+endobj
+297 0 obj
+<< /S /GoTo /D (subsection.13.5) >>
+endobj
+300 0 obj
+(Math)
+endobj
+301 0 obj
+<< /S /GoTo /D (subsection.13.6) >>
+endobj
+304 0 obj
+(Type Size-Dependent Settings)
+endobj
+305 0 obj
+<< /S /GoTo /D (subsection.13.7) >>
+endobj
+308 0 obj
+(All Point Sizes)
+endobj
+309 0 obj
+<< /S /GoTo /D (subsection.13.8) >>
+endobj
+312 0 obj
+(Figures)
+endobj
+313 0 obj
+<< /S /GoTo /D (subsubsection.13.8.1) >>
+endobj
+316 0 obj
+(Deferring figure Floats)
+endobj
+317 0 obj
+<< /S /GoTo /D (subsection.13.9) >>
+endobj
+320 0 obj
+(Tables)
+endobj
+321 0 obj
+<< /S /GoTo /D (subsubsection.13.9.1) >>
+endobj
+324 0 obj
+(Deferring table Floats)
+endobj
+325 0 obj
+<< /S /GoTo /D (section.14) >>
+endobj
+328 0 obj
+(Tabular)
+endobj
+329 0 obj
+<< /S /GoTo /D (section.15) >>
+endobj
+332 0 obj
+(Footnote Text)
+endobj
+333 0 obj
+<< /S /GoTo /D (subsection.15.1) >>
+endobj
+336 0 obj
+(Citations, Bibliography, Endnotes)
+endobj
+337 0 obj
+<< /S /GoTo /D (subsubsection.15.1.1) >>
+endobj
+340 0 obj
+(Bibliography)
+endobj
+341 0 obj
+<< /S /GoTo /D (subsubsection.15.1.2) >>
+endobj
+344 0 obj
+(`endnotes and `rtx@bibnotes)
+endobj
+345 0 obj
+<< /S /GoTo /D (section.16) >>
+endobj
+348 0 obj
+(Initial setup)
+endobj
+349 0 obj
+<< /S /GoTo /D (section.17) >>
+endobj
+352 0 obj
+(`appendix)
+endobj
+353 0 obj
+<< /S /GoTo /D (section.18) >>
+endobj
+356 0 obj
+(Changing the page grid)
+endobj
+357 0 obj
+<< /S /GoTo /D (subsection.18.1) >>
+endobj
+360 0 obj
+(Avoiding Grid Changes)
+endobj
+361 0 obj
+<< /S /GoTo /D (subsection.18.2) >>
+endobj
+364 0 obj
+(Galley Style: Margin Changes)
+endobj
+365 0 obj
+<< /S /GoTo /D (subsection.18.3) >>
+endobj
+368 0 obj
+(Grid Changing Via ltxgrid)
+endobj
+369 0 obj
+<< /S /GoTo /D (section.19) >>
+endobj
+372 0 obj
+(Old font commands)
+endobj
+373 0 obj
+<< /S /GoTo /D (section.20) >>
+endobj
+376 0 obj
+(English-Language Texts)
+endobj
+377 0 obj
+<< /S /GoTo /D (section.21) >>
+endobj
+380 0 obj
+(Legacy Commands)
+endobj
+381 0 obj
+<< /S /GoTo /D (section.22) >>
+endobj
+384 0 obj
+(Endgame for the Document Class)
+endobj
+385 0 obj
+<< /S /GoTo /D (subsection.22.1) >>
+endobj
+388 0 obj
+(Job Macro Package)
+endobj
+389 0 obj
+<< /S /GoTo /D (subsection.22.2) >>
+endobj
+392 0 obj
+(`secnumarabic@sw)
+endobj
+393 0 obj
+<< /S /GoTo /D (subsection.22.3) >>
+endobj
+396 0 obj
+(Hook for default values of Booleans)
+endobj
+397 0 obj
+<< /S /GoTo /D (section.23) >>
+endobj
+400 0 obj
+(Symbols: the revsymb module)
+endobj
+401 0 obj
+<< /S /GoTo /D (section.24) >>
+endobj
+404 0 obj
+(The 10pt class option: the 10pt module)
+endobj
+405 0 obj
+<< /S /GoTo /D (section.25) >>
+endobj
+408 0 obj
+(The 11pt class option: the 11pt module)
+endobj
+409 0 obj
+<< /S /GoTo /D (section.26) >>
+endobj
+412 0 obj
+(The 12pt class option: the 12pt module)
+endobj
+413 0 obj
+<< /S /GoTo /D (section.27) >>
+endobj
+416 0 obj
+(Page parameters)
+endobj
+417 0 obj
+<< /S /GoTo /D (section.28) >>
+endobj
+420 0 obj
+(The aps class option: the aps module)
+endobj
+421 0 obj
+<< /S /GoTo /D (subsection.28.1) >>
+endobj
+424 0 obj
+(Defend Against Forseeable Errors)
+endobj
+425 0 obj
+<< /S /GoTo /D (subsection.28.2) >>
+endobj
+428 0 obj
+(Abbreviations)
+endobj
+429 0 obj
+<< /S /GoTo /D (subsection.28.3) >>
+endobj
+432 0 obj
+(APS Setup)
+endobj
+433 0 obj
+<< /S /GoTo /D (subsubsection.28.3.1) >>
+endobj
+436 0 obj
+(Title block)
+endobj
+437 0 obj
+<< /S /GoTo /D (subsubsection.28.3.2) >>
+endobj
+440 0 obj
+(Stacked Heads)
+endobj
+441 0 obj
+<< /S /GoTo /D (subsubsection.28.3.3) >>
+endobj
+444 0 obj
+(Runin Heads)
+endobj
+445 0 obj
+<< /S /GoTo /D (subsubsection.28.3.4) >>
+endobj
+448 0 obj
+(Table of Contents)
+endobj
+449 0 obj
+<< /S /GoTo /D (subsubsection.28.3.5) >>
+endobj
+452 0 obj
+(Default column bottom)
+endobj
+453 0 obj
+<< /S /GoTo /D (subsubsection.28.3.6) >>
+endobj
+456 0 obj
+(Table alignment style)
+endobj
+457 0 obj
+<< /S /GoTo /D (subsubsection.28.3.7) >>
+endobj
+460 0 obj
+(Footnote formatting)
+endobj
+461 0 obj
+<< /S /GoTo /D (subsubsection.28.3.8) >>
+endobj
+464 0 obj
+(Appendix)
+endobj
+465 0 obj
+<< /S /GoTo /D (subsubsection.28.3.9) >>
+endobj
+468 0 obj
+(Bibliography)
+endobj
+469 0 obj
+<< /S /GoTo /D (subsubsection.28.3.10) >>
+endobj
+472 0 obj
+(Index)
+endobj
+473 0 obj
+<< /S /GoTo /D (subsection.28.4) >>
+endobj
+476 0 obj
+(Journal-Specific Code)
+endobj
+477 0 obj
+<< /S /GoTo /D (subsubsection.28.4.1) >>
+endobj
+480 0 obj
+(pra)
+endobj
+481 0 obj
+<< /S /GoTo /D (subsubsection.28.4.2) >>
+endobj
+484 0 obj
+(prb)
+endobj
+485 0 obj
+<< /S /GoTo /D (subsubsection.28.4.3) >>
+endobj
+488 0 obj
+(prc)
+endobj
+489 0 obj
+<< /S /GoTo /D (subsubsection.28.4.4) >>
+endobj
+492 0 obj
+(prd)
+endobj
+493 0 obj
+<< /S /GoTo /D (subsubsection.28.4.5) >>
+endobj
+496 0 obj
+(pre)
+endobj
+497 0 obj
+<< /S /GoTo /D (subsubsection.28.4.6) >>
+endobj
+500 0 obj
+(prl)
+endobj
+501 0 obj
+<< /S /GoTo /D (subsubsection.28.4.7) >>
+endobj
+504 0 obj
+(prstab)
+endobj
+505 0 obj
+<< /S /GoTo /D (subsubsection.28.4.8) >>
+endobj
+508 0 obj
+(rmp)
+endobj
+509 0 obj
+<< /S /GoTo /D (subsection.28.5) >>
+endobj
+512 0 obj
+(Establish APS Defaults)
+endobj
+513 0 obj
+<< /S /GoTo /D (section.29) >>
+endobj
+516 0 obj
+(The rmp journal substyle: the rmp module)
+endobj
+517 0 obj
+<< /S /GoTo /D (subsection.29.1) >>
+endobj
+520 0 obj
+(Frontmatter)
+endobj
+521 0 obj
+<< /S /GoTo /D (section.30) >>
+endobj
+524 0 obj
+(:)
+endobj
+525 0 obj
+<< /S /GoTo /D (subsection.30.1) >>
+endobj
+528 0 obj
+(General Text)
+endobj
+529 0 obj
+<< /S /GoTo /D (subsection.30.2) >>
+endobj
+532 0 obj
+(Sectioning)
+endobj
+533 0 obj
+<< /S /GoTo /D (subsection.30.3) >>
+endobj
+536 0 obj
+(Figure and Table Caption Formatting)
+endobj
+537 0 obj
+<< /S /GoTo /D (subsection.30.4) >>
+endobj
+540 0 obj
+(Citations and Bibliography)
+endobj
+541 0 obj
+<< /S /GoTo /D (subsection.30.5) >>
+endobj
+544 0 obj
+(Table of Contents)
+endobj
+545 0 obj
+<< /S /GoTo /D (section*.2) >>
+endobj
+548 0 obj
+(Index)
+endobj
+549 0 obj
+<< /S /GoTo /D [550 0 R /Fit ] >>
+endobj
+552 0 obj <<
+/Length 1884
+/Filter /FlateDecode
+>>
+stream
+xÚíZYsãD~÷¯ð£MáÉÜo{d¡8jñUÀƒlOâaeËHr²á×Ósøˆ%mBKj«Ö©5ÓÓ_=ߌDúþ‘>á)ªúŠcdŒîO=Ü?‡[_öH2a‚!©8´[nŽ—H(Õ)‰¡û6‡¶Mb7/ǽ£7Ð'QˆÑŸ“ñì—Áxn‡¿¿†»bï.#¼Ii/jû'³ýNÀ‰M2›ÓõÂ.ëáˆ
+<˜æYUÅfqk*4^,lé¦ÙÒ÷Øa„! #J!:ôt2ŠÁU&y|à´˜:[_í<
+Cr Eåqäãpƒ# —wWŽòØÑd1ì›gEá¤B"J¥ZŒôas;­Ëbé¦1&Õz²p•\J‘ºˆ¿¿0Íu¹Ìò
+…î$1ç×:‡4bt0sU]ºÉâÁ:ÎÝ_].ä 4½O¡Q‡˜úVHƒ¢|ÿ‚«0Hïx¼å òiŽAT¢g¼÷¾¿i}“è$v@nØ4¯ëÕGG«õ$wÕe«
+åù‘gL HtÔP Ä°¸Îö ]ýcÌAD³ka¹œ»é<q¯€lp›Øž­óü*6×ËU6}ïC`g>S¹¬J#èòÄÜr½¬Ý"Q5æ`ê)[¦œÞdAH9óÜ!žE2ú;bPÅhäÔ+ð¬ÁÞÍC*È:Càï”çÉä‡ 0jƒ Gc<xW¹åytl›Þ¾C¬Cv¹—ÝñþîÚχiŒ8&í¥—J Ò½‚ÚæoN’k$ ÛV¸»M’¦I¾½°•þÿ g/‡éòÜ08Þ๸ÁsuGÏYò|¼)û‘u–ç¶ÜO­ùºàP†Í óŒ
+ŒzàÀˆ=€c Ø«ˆP@1§m
+b¿+PCŒmtÆëkâUX[«%íê§==0ˆ"oˆ‚nFJ•âf[M»£ÐV’
+uÈ{\,VYM\îêTpOÊbja¡ƒ¤€Ì9œ HhÝ>† å×Å[ch4 ˆÿ?ûÃy°Î3sD™ºåÚ×
+ã~3¤",PlÞd‰#t°„‚ÖwgÉߪj³Œ­êÎC(5lfºhm 7u­ÍÓZmiýÚú•j™Y¹Í6 ñ®ÚÈ|—6oêís$^wÕo†VÿÝÿÁ'©¼4·¤´¹¥$ »7œt 'ìZÊ„fG:¶¬ (¨X”ý«uù! òýK7l%á·Ä™ÐÃç£IÐÊ‘÷G:PDÖàÕÜNß»å°EÙ·ƒ€úñÌÕEé6§ UCˆI°͇>J„…øO­Î‡³“i#?yühÂ老«Òmái}Õ²_0F'W&Ÿš†ú8-a NŒy¢´d ÖÓyáõËåv7u24„Æž5ÄÓ
+/t®ÒÙͬeeÅ@ÕŽM#°Ø¨'ž ýæ“šÞEö¸(ò„âË,Ï–S{ ˆa×–èºÊÎÓ5
+ÌÜ<Q@D­V×Êçr½˜Ø²j[ç´é^çäÿi{dädBî««•-ëPå>ÔûÊ´1L@ë®åNËOM™Îö‚Tˆ'
+§JpŽ‡
+ÑÍ›S@”PÞfƒû Cü­?z¿ü†û30ùº‡3ºé x·èN÷¥%ü÷N{ßïmeývu$£l†íÿ÷Üß}‘§ÿ6¿?õKõĸaÁä+7§N¥õKÀ…Û}–7Iïâ_gþ;§ —_eeîªæò(9&`£MÛgï?T\µ~‡¡â7PÏFÒ|mf ûú¿
+endobj
+550 0 obj <<
+/Type /Page
+/Contents 552 0 R
+/Resources 551 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 590 0 R
+/Annots [ 561 0 R 565 0 R 566 0 R 567 0 R 568 0 R 569 0 R 572 0 R 573 0 R 574 0 R 575 0 R 576 0 R 577 0 R 578 0 R 579 0 R 580 0 R 581 0 R 582 0 R 583 0 R 584 0 R 585 0 R 586 0 R 587 0 R 588 0 R 589 0 R ]
+>> endobj
+561 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [0 1 1]
+/Rect [309.609 526.255 496.907 537.198]
+/Subtype /Link /A << /Type /Action /S /URI /URI (http://publish.aps.org/revtex4/) >>
+>> endobj
+565 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [143.731 458.27 226.124 469.423]
+/Subtype /Link
+/A << /S /GoTo /D (section.1) >>
+>> endobj
+566 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [143.731 438.464 201.414 447.505]
+/Subtype /Link
+/A << /S /GoTo /D (section.2) >>
+>> endobj
+567 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [143.731 416.591 229.857 425.587]
+/Subtype /Link
+/A << /S /GoTo /D (section.3) >>
+>> endobj
+568 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [143.731 392.516 358.516 403.669]
+/Subtype /Link
+/A << /S /GoTo /D (section.4) >>
+>> endobj
+569 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [143.731 372.71 293 381.751]
+/Subtype /Link
+/A << /S /GoTo /D (section.5) >>
+>> endobj
+572 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 358.783 286.255 369.726]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.1) >>
+>> endobj
+573 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [143.731 336.725 291.551 347.878]
+/Subtype /Link
+/A << /S /GoTo /D (section.6) >>
+>> endobj
+574 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [143.731 315.077 194.44 325.961]
+/Subtype /Link
+/A << /S /GoTo /D (section.7) >>
+>> endobj
+575 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 302.992 316.96 313.936]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.1) >>
+>> endobj
+576 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 291.037 248.597 301.981]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.2) >>
+>> endobj
+577 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 281.099 321.483 290.025]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.7.2.1) >>
+>> endobj
+578 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 267.126 270.535 278.07]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.7.2.2) >>
+>> endobj
+579 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 255.171 334.485 266.115]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.7.2.3) >>
+>> endobj
+580 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 243.216 424.536 254.16]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.7.2.4) >>
+>> endobj
+581 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 231.261 321.474 242.205]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.7.2.5) >>
+>> endobj
+582 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 219.306 285.319 230.249]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.7.2.6) >>
+>> endobj
+583 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 207.351 254.784 218.294]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.7.2.7) >>
+>> endobj
+584 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 197.413 260.562 206.339]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.7.2.8) >>
+>> endobj
+585 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 185.378 250.889 194.384]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.7.2.9) >>
+>> endobj
+586 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 173.503 254.067 182.429]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.7.2.10) >>
+>> endobj
+587 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 161.547 261.698 170.474]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.7.2.11) >>
+>> endobj
+588 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 147.575 249.773 158.518]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.7.2.12) >>
+>> endobj
+589 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 135.62 269.14 146.563]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.7.2.13) >>
+>> endobj
+553 0 obj <<
+/D [550 0 R /XYZ 144.727 740.998 null]
+>> endobj
+554 0 obj <<
+/D [550 0 R /XYZ 144.727 716.092 null]
+>> endobj
+564 0 obj <<
+/D [550 0 R /XYZ 144.727 473.252 null]
+>> endobj
+551 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F78 560 0 R /F83 563 0 R /F85 571 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+593 0 obj <<
+/Length 1929
+/Filter /FlateDecode
+>>
+stream
+xÚí›[oÛ6Çßó)òh5Ëûå±K/XaE› Ö=(2ã•%U’·æÛïДDçRÅiƒ<X±‹Ìçðþ¤É!†rH8GŠªCÅ12F¦Ë|¸€[ïHׄ †¤âp=psƈ@šH¸àHKãÛ¸;õ¢kòñÝÁ/Ç/ßÂGd$;<>]ß9žÿ=Qˆ"§3…ñäS¶¬r;%bòíåëÕær:£O>¸ëda›é?ÇïÞoŸO(E\÷M"ÁºnG;€¦3Ï~ènÌý?¥?T%‘fæêX£#¢ÿ÷¾É  AFˆ»PžâñTãÉS‚'åì¨ÌWËâ*AÿÛ»:›‡(",ÒCƒ`>E–ýAJ‰T»B”#C”b,v~R¶m¹ôÀÊÚ¿~Ƙ­š3wkJ&p·?>®!‘dÁtñq ÞiX‚#Nù®ØÔݱɻ`S[›-ÎZ[äY&J¥Sr¸ ð|¬žp¢¼s4RJÐîÁ¨FFí©æ¶X´gé™M¿ô; 1Ât¸‚™=3Ý7¦Æ3}]'§­Ï¨I1÷o³"ɃîP¤é¦øÓH§÷†ŠåZ¦î'UŠ=Uûµ±i±
+EE ó$§Æ<*ÃÇŽV
+¦y–´YY„¦žQˆ`#+éã6ý^bÐót×Ø8.!yÉ;¯
+ ­~ò„
+úñ6ЙFŠÝ™9,…»øj[»¬:Úm¹õíè· ÿ¥Ê“ÔBx.!Šý;§Î»M²|U‡Wa¤…Ž™{\ÿ æÞ=˜Þ^²òŽéï•K”W‘Ö6O:¤ÕÖX‡4»8žm¸ZBbâG ,~˜"4XL úÖlWºtĈÝO6·éÅ"ZÕejç.þ|@n¼÷ªv–{j›fÛ4uT'iHÛ¸ÒSÅöRè>í‹Û@ &÷‘—ìx½¶>I®ò.gváÙw(dKe`øÏäûDªKrŽð}„­:ØGyÒ4³WMcëÖÎ/óu+‘q£O€n0ÏžÁ
+õ÷ŒáÛÑîΞÌ(à&úÜ°ÂÏZÃ^W©S¢'~QuW¶+P_ÛÊó­òý£rëkq}ˆ+†H,©;},ÄeÛa¨Wá`Æ8CŠ;ÓtÃüh¿®2?ÀùöÐ,Sé—¡“3FÂÑò”ƒô$즈Á~ŠýZ¤å²JÚìdã ]7W…b©B)ÃHRyÓHäC„ø‘|*Ó̶糞!òÞ%ŸÒMF1)’|ö©²i“ÏUi©orTÎÃúK^J9ÁäÓqÁï;RuÛ‘R?Ò·>Æ6±ô[Uh=°ÆUd7“*gçš›ú¯ÂþSX¤ºã’@(r¬œKuÖM¶µì/a.µ~ìhD4‰Éæ©rùï;[#j´2ÓâdíSN9ž¼èÞè›’/.‡,7ëj{«ÿºiф‡C%Íb†˜äû
+Gmcö=¶xz]äÝ®'„˜SV°ž¬øâÊ”õ÷ÎýøzI!I@3a)cJ’sù£ù Qm ¤Ùumcf4«ˆ¬£mCž
+ÍÄE3Ž‘^ûë®ígÂøÔa×ìÒ§¹…Mé®Ùf\ Áa !;¬-&1m‰7·ž®r—®èÅn•¤7Ä*ÆïXìT‚"ì¹ê» 1Çc"–· શUmÄB"ªM/ˆ +W:Fé§ÿ^G!Æ%¯<ùùú˜}ï¹ÜÆf1E#öIîáK?ü5•"örè]Ãÿò.z/ôq7Å]3[8eýoV—Åú¸LðÕ7‚ˆŠniùœF”æÆûvÚ]¡zq¾¢0zOòTWø +W2FcÙ‚èg}~1µ 6wpøØi4]„Y·Å׬*[7iUm2ŸC5Ý}€?‹ ±Ø7±LU³_…0#£ ·BÁÖlŒ$ÿº¨Kà1ߥM£®–ßÝÂíïj(Ìv 1êèwT'œ°Ýæ¿rÕöágJYž5í¬<…öÜýÎý›[·Ö…›®B#ãߥêç9|/äŽ4@f•T Ÿ#€EçF뇆¾«AŒöjÿØiäèendstream
+endobj
+592 0 obj <<
+/Type /Page
+/Contents 593 0 R
+/Resources 591 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 590 0 R
+/Annots [ 595 0 R 596 0 R 597 0 R 598 0 R 599 0 R 600 0 R 601 0 R 602 0 R 603 0 R 604 0 R 605 0 R 606 0 R 607 0 R 608 0 R 609 0 R 610 0 R 611 0 R 612 0 R 613 0 R 614 0 R 615 0 R 616 0 R 617 0 R 618 0 R 619 0 R 620 0 R 621 0 R 622 0 R 623 0 R 624 0 R 625 0 R 626 0 R 627 0 R 628 0 R 629 0 R 630 0 R 631 0 R 632 0 R 633 0 R 634 0 R ]
+>> endobj
+595 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 702.976 306.062 713.92]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.7.2.14) >>
+>> endobj
+596 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 691.021 310.714 701.964]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.7.2.15) >>
+>> endobj
+597 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 679.065 331.695 690.009]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.7.2.16) >>
+>> endobj
+598 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 667.11 261.957 678.054]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.7.2.17) >>
+>> endobj
+599 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 655.155 263.601 666.099]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.7.2.18) >>
+>> endobj
+600 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 645.138 276.333 654.144]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.7.2.19) >>
+>> endobj
+601 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 631.245 255.302 642.189]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.7.2.20) >>
+>> endobj
+602 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 621.332 270.236 630.233]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.7.2.21) >>
+>> endobj
+603 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 609.352 275.795 618.278]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.7.2.22) >>
+>> endobj
+604 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 595.379 296.816 606.323]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.7.2.23) >>
+>> endobj
+605 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 583.424 320.627 594.368]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.7.2.24) >>
+>> endobj
+606 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 571.469 380.691 582.413]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.7.2.25) >>
+>> endobj
+607 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 559.429 297.537 570.458]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.7.2.26) >>
+>> endobj
+608 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 547.559 331.525 558.502]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.3) >>
+>> endobj
+609 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 535.603 292.602 546.547]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.4) >>
+>> endobj
+610 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 523.648 355.664 534.592]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.5) >>
+>> endobj
+611 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 511.693 243.526 522.637]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.6) >>
+>> endobj
+612 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 499.738 277.388 510.682]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.7) >>
+>> endobj
+613 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 487.783 249.564 498.727]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.8) >>
+>> endobj
+614 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [143.731 465.994 318.883 476.879]
+/Subtype /Link
+/A << /S /GoTo /D (section.8) >>
+>> endobj
+615 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [143.731 444.077 242.022 454.961]
+/Subtype /Link
+/A << /S /GoTo /D (section.9) >>
+>> endobj
+616 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [143.731 422.159 258.808 433.043]
+/Subtype /Link
+/A << /S /GoTo /D (section.10) >>
+>> endobj
+617 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [143.731 400.241 308.98 411.125]
+/Subtype /Link
+/A << /S /GoTo /D (section.11) >>
+>> endobj
+618 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [143.731 380.211 217.195 389.207]
+/Subtype /Link
+/A << /S /GoTo /D (section.12) >>
+>> endobj
+619 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 368.281 258.848 377.182]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.12.1) >>
+>> endobj
+620 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 355.036 364.721 365.227]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.12.2) >>
+>> endobj
+621 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 344.346 368.756 353.272]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.12.2.1) >>
+>> endobj
+622 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 332.39 315.944 341.317]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.12.2.2) >>
+>> endobj
+623 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 318.418 362.399 329.362]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.12.2.3) >>
+>> endobj
+624 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 307.215 419.286 317.406]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.12.2.4) >>
+>> endobj
+625 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 294.508 281.733 305.451]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.12.3) >>
+>> endobj
+626 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 283.912 365.369 293.496]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.12.4) >>
+>> endobj
+627 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 270.597 261.05 281.541]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.12.5) >>
+>> endobj
+628 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 259.265 297.145 269.586]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.12.6) >>
+>> endobj
+629 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 248.704 202.391 257.631]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.12.7) >>
+>> endobj
+630 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 236.749 301.838 245.675]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.12.8) >>
+>> endobj
+631 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 222.777 285 233.72]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.12.9) >>
+>> endobj
+632 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 210.821 416.934 221.765]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.12.9.1) >>
+>> endobj
+633 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 198.866 405.866 209.81]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.12.9.2) >>
+>> endobj
+634 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 186.911 319.171 197.855]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.12.10) >>
+>> endobj
+594 0 obj <<
+/D [592 0 R /XYZ 144.727 740.998 null]
+>> endobj
+591 0 obj <<
+/Font << /F74 556 0 R /F83 563 0 R /F75 558 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+637 0 obj <<
+/Length 1819
+/Filter /FlateDecode
+>>
+stream
+xÚí[KSÛH¾ó+|”ªÖ³ó~ì)
+Œ½ãtpïÿÓûttÚ{x¯BØö×2,‘¤ö™ss!ë[vÕHIÕé‚ŒH *µH‹È+°×O§If“ú ˆÛ·Ê,€~¹í ÈÇóþàÆìæEËÔŽJ‰¦ÿ??ça5ñµK†Ê
+xÚ½ë0ÊìÇoY:˜úÄ›¡ßD[h¤CN…¸>Ô ^׃™¹°‡µ`*“÷ý›$õ©ð~Æá`h£í<“‡ÜÐRiÄ®I‘V‚ë’SŽ“‡
+³
+¦^UáñdÐ(„8HÖz¾ÆÞý¸äJÑ¿a÷C¹xP0"û»0ÏÒB-Ó$´`-ŒPgùBä/l- :(‘f+û3Ù%–Êbù>ŽË2$æè¢ÍHM‘4Ž´ Ô^ð·nÒzݤÝ­-ÜgÑpš5ÁPœ`ê·’ê­g¼žñšÀ?•^ëªñ!¼
+³¬è/Áëa¹xX®ÂF–ß¹šÙH¹haO°@&ªEgq4[„ºb;á¿7¯+' ÒfÕYÒ]º·YÈÌÁeÜôp©U9¦B"ß<|GG1jåÏvZt™u=/,¥ÅÏ)pvý¸ŸSĆºÌIî‹ <Í€þn[¹i"ùZ`W#k
+`½îÈš[‘{¾¡àî>ÅÞ4²ŸWØáóÔ„1_2¾–¢9¾þ®ÙTra%?+š«iš'i^–3]»FK,–JGqI†ZI.Sbë3xQÍàO¢<˜µí³JG—q”³`|í ïÞ—Â+ŸœB9”
+u[Zü
+iª\ì sþŠ²¦ÜaÈ«Y®^üpĉsC9ykS¤´™öØàŒ—‹~ÆCë‹ÍäÇ _,. í;RKœ-ì˜åwï.£Ëö]vGæÛ¶L„+ÄÍâÔ˘)²Ã)­È&QecæÓq]¨Ýˆ ®£X–_ÔÖ“¤²¤ì \ÎÌAeoÁ¸è¸Ew u ³qêRv‘f™>rÛúh‹ÅÉu ç÷òjØ:†å§a š×8ÒÂq­…Bׂm ÐÓ€®À{_qï¶ `i4˜«v^èa/q*·¤|¢Q®¥V/´—ö¤–ÚáU;]]µ;b(‘HA lk4¿Ã?|HSÅ($ó‰ö†Õ€ëä8^;ܦëjV™p^eË[©]bZÞ¨«yçÜkÿò%ö¢ ™ë žXÄq~צ BbÊ\­/ƒÅÆ;ÈúÆŠü5.¾šÕ™Õ`£ï¸Rg ‹PÇlƒ‚ïj½ìž·2[Ι[MN“aM®»ŸÁR§óDYË­‰…J—*TB¹¼{UˆUås8 ú÷_n4 W›’7â³D|M–ˆ¯ÖŸVH †Á(\´«¬Æd>¤ýé(L ”w“ÖzŸ+G6 Z"Ê–1Í–0šuç”VŒæSzieÿô³´œ ή]õo
+û«+ƒ1R®–¿DPνŠÆrëu+²b„ÔlgYpn)á·†,“°ŸLGA\Fýw“ŸÍ(S¬Î\‹7»o˜K²ó1MoÊU…«AxU\² ¦q¥n‹`ÄÓ°lx¤Wð“ï8Mã0h¹“,!É(⢳XÑ_þF\æˆÓU‡;z‡ý~Zþ‰ÚÅýè2'eýQ¤FŸ@1¨4Dù½,¼ÀWÊU §a¬røQ:˜ÆÍÀε:ˆ1Å_ì‘eIŠo›HTc6ÅG˜W;‚ÇySë‚þઠן¥fkï㢇ÿ詤ÖØÛq¢? ZG
+"ŒXv¤jÛäF¬|¤ä”ìïH Þ¶•Ê•”>ã‘Ò=é#¼ìÄ·í­ (ñe÷X³5ˆÑ›þ+`W»endstream
+endobj
+636 0 obj <<
+/Type /Page
+/Contents 637 0 R
+/Resources 635 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 590 0 R
+/Annots [ 639 0 R 640 0 R 641 0 R 642 0 R 643 0 R 644 0 R 645 0 R 646 0 R 647 0 R 648 0 R 649 0 R 650 0 R 651 0 R 652 0 R 653 0 R 654 0 R 655 0 R 656 0 R 657 0 R 658 0 R 659 0 R 660 0 R 661 0 R 662 0 R 663 0 R 664 0 R 665 0 R 666 0 R 667 0 R 668 0 R 669 0 R 670 0 R 671 0 R 672 0 R 673 0 R 674 0 R 675 0 R 676 0 R 677 0 R ]
+>> endobj
+639 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [143.731 703.105 182.814 713.989]
+/Subtype /Link
+/A << /S /GoTo /D (section.13) >>
+>> endobj
+640 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 693.038 217.335 701.964]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.13.1) >>
+>> endobj
+641 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 679.065 247.491 690.009]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.13.2) >>
+>> endobj
+642 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 669.128 257.075 678.054]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.13.3) >>
+>> endobj
+643 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 655.155 274.081 666.099]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.13.4) >>
+>> endobj
+644 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 645.217 342.475 654.144]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.13.4.1) >>
+>> endobj
+645 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 631.245 362.021 642.189]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.13.4.2) >>
+>> endobj
+646 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 619.29 263.173 630.233]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.13.4.3) >>
+>> endobj
+647 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 609.272 274.291 618.278]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.13.4.4) >>
+>> endobj
+648 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 597.397 267.208 606.323]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.13.4.5) >>
+>> endobj
+649 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 585.442 204.612 594.368]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.13.5) >>
+>> endobj
+650 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 571.469 303.979 582.413]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.13.6) >>
+>> endobj
+651 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 561.531 243.366 570.458]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.13.7) >>
+>> endobj
+652 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 547.559 213.469 558.502]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.13.8) >>
+>> endobj
+653 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 535.603 319.391 546.547]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.13.8.1) >>
+>> endobj
+654 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 525.586 209.345 534.592]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.13.9) >>
+>> endobj
+655 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 511.693 313.414 522.637]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.13.9.1) >>
+>> endobj
+656 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [143.731 491.793 194.431 500.789]
+/Subtype /Link
+/A << /S /GoTo /D (section.14) >>
+>> endobj
+657 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [143.731 469.875 218.988 478.871]
+/Subtype /Link
+/A << /S /GoTo /D (section.15) >>
+>> endobj
+658 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 455.902 318.494 466.846]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.15.1) >>
+>> endobj
+659 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 443.947 267.995 454.891]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.15.1.1) >>
+>> endobj
+660 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 433.352 362.132 442.936]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.15.1.2) >>
+>> endobj
+661 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [143.731 410.204 211.875 421.088]
+/Subtype /Link
+/A << /S /GoTo /D (section.16) >>
+>> endobj
+662 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [143.731 388.899 214.466 399.17]
+/Subtype /Link
+/A << /S /GoTo /D (section.17) >>
+>> endobj
+663 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [143.731 366.368 260.582 377.252]
+/Subtype /Link
+/A << /S /GoTo /D (section.18) >>
+>> endobj
+664 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 354.283 277.837 365.227]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.18.1) >>
+>> endobj
+665 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 342.328 304.776 353.272]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.18.2) >>
+>> endobj
+666 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 330.373 303.691 341.317]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.18.3) >>
+>> endobj
+667 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [143.731 310.428 244.552 319.469]
+/Subtype /Link
+/A << /S /GoTo /D (section.19) >>
+>> endobj
+668 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [143.731 286.667 262.993 297.551]
+/Subtype /Link
+/A << /S /GoTo /D (section.20) >>
+>> endobj
+669 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [143.731 264.749 242.301 275.633]
+/Subtype /Link
+/A << /S /GoTo /D (section.21) >>
+>> endobj
+670 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [143.731 242.831 303.202 253.715]
+/Subtype /Link
+/A << /S /GoTo /D (section.22) >>
+>> endobj
+671 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 230.747 261.449 241.69]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.22.1) >>
+>> endobj
+672 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 220.151 279.223 229.735]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.22.2) >>
+>> endobj
+673 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 208.854 327.939 217.78]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.22.3) >>
+>> endobj
+674 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [143.731 185.048 294.714 195.932]
+/Subtype /Link
+/A << /S /GoTo /D (section.23) >>
+>> endobj
+675 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [143.731 163.13 335.839 174.014]
+/Subtype /Link
+/A << /S /GoTo /D (section.24) >>
+>> endobj
+676 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [143.731 141.212 335.839 152.096]
+/Subtype /Link
+/A << /S /GoTo /D (section.25) >>
+>> endobj
+677 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [143.731 119.295 335.839 130.179]
+/Subtype /Link
+/A << /S /GoTo /D (section.26) >>
+>> endobj
+638 0 obj <<
+/D [636 0 R /XYZ 144.727 740.998 null]
+>> endobj
+635 0 obj <<
+/Font << /F83 563 0 R /F74 556 0 R /F75 558 0 R /F85 571 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+680 0 obj <<
+/Length 1690
+/Filter /FlateDecode
+>>
+stream
+xÚí[ÝoÚHÏ_Á#<°·ß}KÛ¤w•Nªz:éî lˆïŒŒ©ÚÿþfYöBZ·¡V¤àñ~Ìofvfv†ô0üá)ªzŠcdŒîMæ¸7ƒGï.HIÂCRqø»áá°z:dii<{’ÏJ’›w¯G¿\kÖ3ÈHÖÝ­ŸŒ¦õ© Æý‚ûÑ̆Tàþ"Ê£¹-l¾ü3zq5ÚL§%âF4/…
+…(‘þapFÃöÇ„•3¤üA 2D?u ÚoatoÝÈ@$¶DÀÌiI-–%ÅÎ0#NyI1I¢åÒó [q–¾ p¦h[@îàЬ¤˜gÓUb÷÷N”FD’f†)‡øÉëü¤)©zCü„Âü¹ià'"ÀQ`Á[{gÓ©gÇål úQœ. ÿÿõ€ˆ~–/­Æ‰núWyžÕE† »ˆ¯FŒ¨6-y|¿í7æ8ÊýÝI‚´‘wÜŠûï{’€j3À‘#õ0^ŽÇ¹PÑÿGN¦k)ƒ ,$Pêï
+ÐÑÈ|‹=NQ°ÖXÿ˜h³í·^Com±Zì/@JÄTÀÜ0Ĥ|QºØ"ð ̎Å]> w"†cÓ/O
+šdÉj^êï8+Šl^[…ø>àÁ®{Án-˜…XH¯ž¼me£zFI<Kç ˜þßeñ¥!N'
+OsÖ*ZCÓ ÆZó$§Wy0}""+Ò¬(ñ¼ËòyTq:«£HÖ‰¦€÷«éPlY%µGñr±°é4þ\ W"*œš`ú§WBQ ¯çÁV´­ñؾŽÇIœÍòhq?ý/5—ƒe @¬å¤sq$P + +ÿ-Zgzk*+ž2„'¤Ë&VX3ìGcmž†õ3ó‰Üçßg«<’áíÂNâ¿1¦“*˜™Ú¦ó•hL/jÙéò×Ã÷¹.œþÎJí^˜ ¯II´È£ý%qp“BÖ¿ÿgÔîЕDB›\$¤åL„ …`Ü Á¹ ;(“NÎ]øA!˜vBpîB 
+í„àÜ…@‚¤‚$'Eê ,‹¨æJU¿xÝÞX)ºŒÝÑÓ¶õ^€<Ÿ/:½oYïi«Yá³>WNµ“xy_VVEe;7 õkl"Ád½Ô]íÉ×
+žª¦ž½B¨7ѺçiÓà#ûáJ…‘æ:tÓ·éûÑ…¥†„Aœ].CT«P–7²oâ¢ìãyˆæ¶Îb@ú¥Q&PÅ&ÑâlLzíH—Ó6€•O¶ ºžX6l8 &‘]¦åX¼)y†ß¨žè7ºÊ™Ïußœ­
+ûŒ”m¢)÷D ðt#›ÌupO9 \û¸t–}-c7WŒÜÛ=£ä®›1¬ÖÔWëïRJô¶ßþYfŠv¸ ƒŠu‘ìRp€= 4×3¸Ò‘Ä6ä—¸¢ÜÃÍÕåÛ߯êCÃØ:nrD÷Qiùr[ä±ïlt¿*Ÿvc]·j”$˜Ãí¹§¾>¾XKMo($’àüWfÙMñq ±Ûš|šMV®68Ú¡œ~‘Û¥MÝàUGÎÒºÎéÂ&_ª¹êû#‹ Û$Ôì§Ù*žZTx‘x¸m×a¼!-W뺬%D»Ë}“ ;_$°J´iZ~0'¸z´JT[ª÷8±ùúåÝùP=V© ¢&ˆÑÆ0]y}ÜDñÆrVºçwüTx½¶endstream
+endobj
+679 0 obj <<
+/Type /Page
+/Contents 680 0 R
+/Resources 678 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 590 0 R
+/Annots [ 682 0 R 683 0 R 684 0 R 685 0 R 686 0 R 687 0 R 688 0 R 689 0 R 690 0 R 691 0 R 692 0 R 693 0 R 694 0 R 695 0 R 696 0 R 697 0 R 698 0 R 699 0 R 700 0 R 701 0 R 702 0 R 703 0 R 704 0 R 705 0 R 706 0 R 707 0 R 708 0 R 709 0 R 710 0 R 711 0 R 712 0 R 713 0 R 714 0 R 715 0 R ]
+>> endobj
+682 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [143.731 703.105 232.219 713.989]
+/Subtype /Link
+/A << /S /GoTo /D (section.27) >>
+>> endobj
+683 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [143.731 681.187 323.884 692.072]
+/Subtype /Link
+/A << /S /GoTo /D (section.28) >>
+>> endobj
+684 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 669.103 319.222 680.047]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.28.1) >>
+>> endobj
+685 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 659.085 239.78 668.091]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.28.2) >>
+>> endobj
+686 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 645.192 227.038 656.136]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.28.3) >>
+>> endobj
+687 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 635.175 258.56 644.181]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.28.3.1) >>
+>> endobj
+688 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 623.3 274.291 632.226]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.28.3.2) >>
+>> endobj
+689 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 611.344 267.208 620.271]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.28.3.3) >>
+>> endobj
+690 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 599.389 286.057 608.316]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.28.3.4) >>
+>> endobj
+691 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 587.434 308.343 596.36]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.28.3.5) >>
+>> endobj
+692 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 573.461 301 584.405]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.28.3.6) >>
+>> endobj
+693 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 561.506 295.292 572.45]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.28.3.7) >>
+>> endobj
+694 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 549.551 254.754 560.495]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.28.3.8) >>
+>> endobj
+695 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 537.596 267.995 548.54]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.28.3.9) >>
+>> endobj
+696 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 527.578 237.997 536.585]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.28.3.10) >>
+>> endobj
+697 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 513.686 271.85 524.629]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.28.4) >>
+>> endobj
+698 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 502.353 233.395 512.674]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.28.4.1) >>
+>> endobj
+699 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 490.398 233.395 500.719]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.28.4.2) >>
+>> endobj
+700 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 478.443 233.395 488.764]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.28.4.3) >>
+>> endobj
+701 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 466.488 233.395 476.809]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.28.4.4) >>
+>> endobj
+702 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 454.532 233.395 464.854]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.28.4.5) >>
+>> endobj
+703 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 442.577 233.395 452.898]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.28.4.6) >>
+>> endobj
+704 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 430.622 251.328 440.943]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.28.4.7) >>
+>> endobj
+705 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.589 418.667 233.395 428.988]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.28.4.8) >>
+>> endobj
+706 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 408.107 277.02 417.033]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.28.5) >>
+>> endobj
+707 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [143.731 384.301 342.554 395.185]
+/Subtype /Link
+/A << /S /GoTo /D (section.29) >>
+>> endobj
+708 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 374.154 230.624 383.16]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.29.1) >>
+>> endobj
+709 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [143.731 352.316 163.985 361.312]
+/Subtype /Link
+/A << /S /GoTo /D (section.30) >>
+>> endobj
+710 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 340.361 235.018 349.287]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.30.1) >>
+>> endobj
+711 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 326.388 226.201 337.332]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.30.2) >>
+>> endobj
+712 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 314.433 331.515 325.377]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.30.3) >>
+>> endobj
+713 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 302.478 291.466 313.421]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.30.4) >>
+>> endobj
+714 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.675 292.54 254.176 301.466]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.30.5) >>
+>> endobj
+715 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [143.731 270.622 170.082 279.618]
+/Subtype /Link
+/A << /S /GoTo /D (section*.2) >>
+>> endobj
+681 0 obj <<
+/D [679 0 R /XYZ 144.727 740.998 null]
+>> endobj
+6 0 obj <<
+/D [679 0 R /XYZ 144.727 255.927 null]
+>> endobj
+678 0 obj <<
+/Font << /F83 563 0 R /F85 571 0 R /F74 556 0 R /F75 558 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+718 0 obj <<
+/Length 2619
+/Filter /FlateDecode
+>>
+stream
+xÚÅÙnãÈñ}¾Bo¡
+îw™Û-‹VÌ'2H‚Ý2
+Žë¦Øдޒhºk»¬ÚdÛž‘˜1ã<¾,²t^dú%Ú#„шÌK3•€ÁqÎÒˆ„±®ëÓ³
+äK 4óÇdÕ’ƒ6i’g­ùzÊ«HT{f÷m{ܯg˜å é ®æäqÆÁ©Oylû¬ÛývlŠ¥‰pÛëýô}wƳï{ WY·.f8’Ä#Ï·Ó[¢˜~Äà7¦^o ì–¬êì ïjàµÈ³²<âR2h ·×Gz’Æp7'uáâýÎ8ü™Û«›Æ´‡ºÚÕ-í¸%ÂfªÔ‘õ¡+jÀ! ì²–kcܯ .EÔäòg Àìh á…°x#xžÇUÍBYÏLãÏŒ˜ZŒkïé8O á`êsÙBœç³­«å"T2Nñ¨ð1¤5Ô•LЛí
+Ë.ž!î8‰£#{˜púŽ¶Š-½tï@ï-¸bÕ€/7unHþÑxÈ É•{mŠfcš“ §Ä{D¤a| ¸¯:'XØö wœl
+ ˜QŠÈ˾-FáLά«'ÓÆh‹0”gŠ<±e‚[*Ü&ÖŒnŽ'ÙxCƒžñw~D! ŸÙfÅŒ[´âPºwÛ:/LW`Ù 9Zo–¬lë™\~*E¡#”>@†+/GŒìp[¹%Áohï?ý§oª¬¤ JWh=îÞgÆf‘[K¢ÓE¨ÛÐkÐç@v’÷ ÚýjÆ" Ý¾ƒ5™gÆ›bÑNcb’2¨o|Ô<´3Ù(f©çymGŠ:uv n7¯7f8Ñ—‡öy(³ÜmYǧYwX½œÈãjt’i !;‡¾B¯Ûìå.J–
+Ó3¡½~óþ×_»ÓÝåÈRVb%{?ÙÑq‚aÊQe‰žÉ2"eQ"/–¯ä¯\XsDò8eIzîPF2þzýåò÷e*$íÒ†ÉB4Ü}Ç[èI¡;¡#úBÞ„“.Þß‹•/k(€tÆf¤òuPú€¾Jam€¶ÑìÀ‰7åT Ø5k<°âïš$"0\ÅÏs Æ’o¦1T?)?©RÊP¼ëžÚì8ã&XñÆ'¯J6ýrhÖW`‚¿þ«ÁÌq×™õï{L9Éx)]I¨³:ºš)ß
+ú!Ïݱ¸†ËdÌKH¸é‰“{ÖÔ.•†G´Xé)9û/<Æň/*“ŒS0èøÜ&ÿJ#~ endstream
+endobj
+717 0 obj <<
+/Type /Page
+/Contents 718 0 R
+/Resources 716 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 590 0 R
+>> endobj
+719 0 obj <<
+/D [717 0 R /XYZ 144.727 740.998 null]
+>> endobj
+10 0 obj <<
+/D [717 0 R /XYZ 144.727 716.092 null]
+>> endobj
+720 0 obj <<
+/D [717 0 R /XYZ 144.727 357.302 null]
+>> endobj
+721 0 obj <<
+/D [717 0 R /XYZ 144.727 336.017 null]
+>> endobj
+722 0 obj <<
+/D [717 0 R /XYZ 144.727 316.092 null]
+>> endobj
+723 0 obj <<
+/D [717 0 R /XYZ 144.727 296.167 null]
+>> endobj
+724 0 obj <<
+/D [717 0 R /XYZ 144.727 276.241 null]
+>> endobj
+725 0 obj <<
+/D [717 0 R /XYZ 144.727 256.316 null]
+>> endobj
+726 0 obj <<
+/D [717 0 R /XYZ 144.727 222.443 null]
+>> endobj
+727 0 obj <<
+/D [717 0 R /XYZ 144.727 206.503 null]
+>> endobj
+728 0 obj <<
+/D [717 0 R /XYZ 144.727 190.563 null]
+>> endobj
+729 0 obj <<
+/D [717 0 R /XYZ 144.727 162.667 null]
+>> endobj
+716 0 obj <<
+/Font << /F83 563 0 R /F74 556 0 R /F78 560 0 R /F75 558 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+732 0 obj <<
+/Length 2370
+/Filter /FlateDecode
+>>
+stream
+xÚÍXëo¹ÿž¿Â_
+‹Z.÷E“4A#´4ý@íR{ûÐíÃŽï¯ï ‡\i¥µ¬¦6P°Èá,9üÍ›üƃ?~ÀÅ~|KÓä&+ßx7[XúónYD(X0žX\¸Õ…X¥S<ÜgAh¿¿z³¼ö”¥‘¸Ym Ë*ÿç,fó­þòæãjø,fAìOŸ°4áÏlø©j;Yó…ðÙ¾©3•÷jqîϺšèjÎÃÙ7ü§²¾Svq§hõÞ,4D.dÛ]v(+ŽåqÄB{ôW.‚wÝÇ*ÿSõ¥ªû‘”IļTXþN—ê·³¶Ïvtœlé0”æì´…ù,„ œ³4 ‡c³BÉf/·êüHøÂ"{¤¤muµ5¸ß,bXõSØøy`x>¨¦“º1BòC HÕµD“¢A½ït]ÚªtÖf;@»P9-oêf
+0ÁD˜Œ {¯¶ºz´4a\øG ½=µ8¥^|³9‹ÿ»­‘¿´5~Q]`<åj3ç`F}ÑáÁ•EoÌæ kŠ@y_× Ùª%²¬òc:«Ó~3²uXê[£X1º¤¯JiäaOˆvðýøù/ïÍó…ð¼Üj_W-¢’¦Æ‘šo¶4$S&sp œƒ{ .f2ÿwßv¨¨ dÙËF–ªSýÄ@kF`´H"‰Ä ‰^ãüïXg Üï{q/Žk¹/z'8ëd¼_õBÞÔ¯­Êª¾<wÐÐc‚sËFš¸¥]õ†~õk¯•¿–á¯ç¸3€ÔÒÙ¡ª f©C 30—$RV—%ØT{ùÂüûgøÒ7þ«*ëFÿ6\zO†K ˜c*TvÎñZJ^W©{§Uý›Q€¥'oݽᾇËÒ`ýh±8
+¹ó;MÄLñÊ°hTtv;‰¼~4«M Ÿu½mÇ€°U•j¨`Ùá s9ŸÙ…ÛÁ‰Ì¦ -—!ÀŸÚ®ÑûÉâÏs\÷ZºÃÌæ!`b’\Gw@«Çð:yL', ³ªLbš¥›{ COÝšæTaÝ9uÎ`·= J«ÄWãØ6õ¶%À¡ãw
+¦±Ûߟ­ŒØáû È€f$øhèK`~ þLŸk÷Ô
+a¨´U’l >@m¥° Eë…µT;`¡8²Ùb|$¥
+ù™Vü`ÝÛ 4ôŠ4 ,@mëƼ„ã·ºÔ4Ïh¤@ å
+—ËàÃ å ¨ûD<«¾tR}Ñ5©—<#€ÀðQpO ß(²_
+ÄÕx´À½sésK>ÔûÇÜÆ"!(£‡ ãaÐú;GÅK8ø¡ŠÑ™´ÒÞ=¶0+hö¥Î´ê§¥sGÒñËÒí:ãeû~]èvÇä¾e7´.K[/Ÿ~ }Cp›z6ŠñÑ#~îYûtk§Løñøáè?Š\ß´endstream
+endobj
+731 0 obj <<
+/Type /Page
+/Contents 732 0 R
+/Resources 730 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 590 0 R
+>> endobj
+733 0 obj <<
+/D [731 0 R /XYZ 144.727 740.998 null]
+>> endobj
+734 0 obj <<
+/D [731 0 R /XYZ 144.727 716.092 null]
+>> endobj
+735 0 obj <<
+/D [731 0 R /XYZ 144.727 668.127 null]
+>> endobj
+736 0 obj <<
+/D [731 0 R /XYZ 144.727 648.208 null]
+>> endobj
+737 0 obj <<
+/D [731 0 R /XYZ 144.727 616.333 null]
+>> endobj
+738 0 obj <<
+/D [731 0 R /XYZ 144.727 596.414 null]
+>> endobj
+739 0 obj <<
+/D [731 0 R /XYZ 144.727 576.494 null]
+>> endobj
+740 0 obj <<
+/D [731 0 R /XYZ 144.727 556.575 null]
+>> endobj
+741 0 obj <<
+/D [731 0 R /XYZ 144.727 518.108 null]
+>> endobj
+742 0 obj <<
+/D [731 0 R /XYZ 144.727 496.828 null]
+>> endobj
+743 0 obj <<
+/D [731 0 R /XYZ 144.727 476.909 null]
+>> endobj
+744 0 obj <<
+/D [731 0 R /XYZ 144.727 456.99 null]
+>> endobj
+14 0 obj <<
+/D [731 0 R /XYZ 144.727 425.364 null]
+>> endobj
+730 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+747 0 obj <<
+/Length 2082
+/Filter /FlateDecode
+>>
+stream
+xÚ¥Ymoã6þ¾¿"_•5˽E‘ºmï€âŠnÐ.p{‰¶µ‘%C”7ë òß;Ã!mËö%
+ŠEVäp83œ>ÒâŠÃ?q%â˜e2»ÊbΊ"¿*×oøÕ†~~#<‹JK³Úç*,KchÄ,O äùÇí›o‚ )+àÿÛ…c½­þ 9ûïí¿`,¹ÊY‘¦8–³Ld~|­ëfè¾ëÍ—Á|½Ö˺~駉›Óœ¹
+‹,¤Tõ ÓcÍâxm¹2k/ÆÕoN@¥7ν¨|.„‚Û@ ˆjâ,8x•H2Y^4YzŽ"à
+Ll´ÆT>:èüjú¸H~â\ú`~gB !ÈÌÛ3™Œ¬ºå ÙeTBµ78%‚$J—'-VÓH³Û;Ø…yGc»n{:O‚qÎ41Kôn3„¤‚Úµ%âÁ%i”H&úD’ÛQ’wŠ„ȹJ–&Ñ;Z«Ì&¸­ÖêÝ~kí³R$¬…ß[Õçy+2V(å9põiå98·ÂvâÚI´£Ž‹ |—CØò¶}3K ¤8øÕza]kŽ'Ç€u¹"R˜Ðø°¼ñ
+¤8¹7ð3¬áÂ"dÁò</bkk\Æ2Xì­(»Êx'
+‡÷i#vÕm›Š¬ÁÑÃ4;"U·BkÎýÅGI}òçÌmIƲïdçù“3!Ò#À¿»æ\ÀBb
+oO½Í<ƒ½
+¸­½yR(¶@íküÉCÔMß•¦Ú‚{¨ï^$wûM¯Í€YäèÖÖËv ‡Y`ôß½|k ÍDõÃ
+»·2K»ýKÂÁ|Œ&Ÿâ9$©Ë8^P†…nÐ8בõfÓÔ¥Æ77Œiæè f7µÝ)c´3€r‚ 8”ðQÊNóL r‰b/ÄPÁr%¾¦{Ì…Š%ð]
+Ò Ä0ÓkKªðuÌÁaÝ4¶£¡‡{7ÁŨ‡Ø© Œ×mÙl]ÈÚ­)Ï5;w4ö<jp}%~|Š g@ÂÃËýqâšMÉÝû⣩ïg*ÆïPþ›÷·‡ÇДå|âBa¹qô\úÿ¾a&
+YÁ”ÌÇ?¶ü\öŸòendstream
+endobj
+746 0 obj <<
+/Type /Page
+/Contents 747 0 R
+/Resources 745 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 753 0 R
+>> endobj
+748 0 obj <<
+/D [746 0 R /XYZ 144.727 740.998 null]
+>> endobj
+18 0 obj <<
+/D [746 0 R /XYZ 144.727 404.789 null]
+>> endobj
+745 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R /F102 750 0 R /F104 752 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+756 0 obj <<
+/Length 2088
+/Filter /FlateDecode
+>>
+stream
+xÚ­XïoÛ6þÞ¿"@QÀfJÔoEá.i‡nÅfì ^ìEÛŒDÛZ$Ñ“èÄAÿ}w<J¶c-vŠA,Š"ïŽwÇç’Ÿ¹ðÇÏx°Ø‹ÏâÀeišœeÕ+÷lŸ~~Åí?ôYÐø8é¾Nü€%QŠc~ºzå|L|Íü :»š›±Wù—Q8žp×uGWK9þvõ Œ
+wF)s=n‡6òVËM`‡í
+‹|–vÔ¥ÊÖ•¬õxâ…îè¢mK3À¢ˆ¥ð &œÃâB0Öã ÖŠýÔŽ Ï–FFpÂb[ÁoÞþ¡´Éª‘ïDÒ؉œšû¼Ä¯Ür9LJ‘<­E%Ì2Á+£Mðø¦×“‚
+rÈî°4;ôP¥rù#5ÿZ·Ž3X5 -E7QÔ95䘇£M¡Ùa”A7pbqçÇa¸˜OɨÂu
+þ†õ‰§,ˆw%K[¡ÙÊæVæSaP^6Í·«,WƒÉOröÔ ”(BØÃýRÔ »ÛîU¦¦h¨q ›¨v›Û’cF·`Œ2Í@£°Í*ݳÍ;bÛÆS¶Í'4jk…‰36 ÅN´Á?ŽÇÇý@s;mÇ08%ÊMSÁæ ùð?µ&Û¡ŽÖJâ¶è£±%+Oœ_ØAOövU¦ÊäòñÔd O±z³O‹¹–Ω¿Ÿ&>:¾§æÅ
+t¡êÖR.õ„z}Þ
+SÜ”ÐËg)p\øœGUr@m”ÈÙvЕA©˜ñ8[˜ïV|°Ý1,lÛû'©ÿu @¤ §–å!Nx°(? !,Žæ~‚Å¥Ñ=j6*_g8±£U•¤ÖíBäáú±±Ÿºãö»pσdKÚK½¹ij¹Ñ‡F…!‹Ò®,@ªÝˆ…Õ‡tÇ¿úpÕ>¼Àc~œ‚K<ˆ+Ì3úzsÖµ~¥É®9Ýydnøü2--±õ “¼S Ï5ìÆÖ1 †Ø1)pÃÆÉx«¸vÚõ
+%ÉÜéê<µ<M ÖA/~ç`E¶‡¶"¶ÖùdÈë>M«±&y l¼É|̘L½ó€>ÞÑ»–9õÀb*ØM˜»žo+tëuSD/ŽàŒíì–Y£€ÉvfCtÈ4ÞSH#Eò‘¬£ÂNM%&ÖÛI·gq=”‰ºÀü½ÅôµûÉBÖ)E4ŒoøRj|\J
+¨ þ¦îèû£R–-ª¸~0Z뎣û¦AceÜ­ESä4Òz©àfã‰ï†Û+©=àC#úº…niÆá8D£DÏJvE°ò­cÈóbz i1´Ðïz
+XšxÃ7ðpÞI½pøÛδÍ—ÝÚõ±(<††›ôûÀ\f˜Ô0yù”Ž¾ÀOâpî@¶pún]æFÔ¼ÇÝ-ˆ¦U—÷ÔZ¯`DÎ) Ý!†&|¥Q¸=“Žtׂ—tÒÙàrv ùÛA˜ü˜(ºÌùƒŒéäõ|ª&O%ó8epðØ÷ü?½¦v~endstream
+endobj
+755 0 obj <<
+/Type /Page
+/Contents 756 0 R
+/Resources 754 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 753 0 R
+/Annots [ 758 0 R 759 0 R 760 0 R 761 0 R ]
+>> endobj
+758 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [0 1 1]
+/Rect [386.11 373.985 499.397 384.929]
+/Subtype /Link /A << /Type /Action /S /URI /URI (ftp://ftp.teleport.com/users/ogawa/macros/latex/contrib/supported/ltxkrnext/) >>
+>> endobj
+759 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [0 1 1]
+/Rect [143.731 362.418 486.446 372.973]
+/Subtype /Link /A << /Type /Action /S /URI /URI (ftp://ftp.teleport.com/users/ogawa/macros/latex/contrib/supported/ltxkrnext/) >>
+>> endobj
+760 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [0 1 1]
+/Rect [336.01 171.357 499.397 182.301]
+/Subtype /Link /A << /Type /Action /S /URI /URI (CTAN:/macros/latex/contrib/supported/carlisle/textcase.dtx) >>
+>> endobj
+761 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [0 1 1]
+/Rect [143.731 159.402 331.029 170.346]
+/Subtype /Link /A << /Type /Action /S /URI /URI (CTAN:/macros/latex/contrib/supported/carlisle/textcase.dtx) >>
+>> endobj
+757 0 obj <<
+/D [755 0 R /XYZ 144.727 740.998 null]
+>> endobj
+22 0 obj <<
+/D [755 0 R /XYZ 144.727 716.092 null]
+>> endobj
+26 0 obj <<
+/D [755 0 R /XYZ 144.727 566.522 null]
+>> endobj
+30 0 obj <<
+/D [755 0 R /XYZ 144.727 416.62 null]
+>> endobj
+754 0 obj <<
+/Font << /F83 563 0 R /F85 571 0 R /F74 556 0 R /F75 558 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+764 0 obj <<
+/Length 1787
+/Filter /FlateDecode
+>>
+stream
+xÚÍkoÛ6ð{~… ˜<ÔœHêY Cšf6t]1¸@u‹¶…È¢+ÑM‚ ÿ}G%K²š8Å6 Bùx¼÷‹¤þ脉Y<‰Ÿ¤i2YlNüÉ
+¶~>¡…‡œDq
+ÁµÚH©%BôÚÈ3)/÷þšÿ
+„{ f4 iÀJI†V-oõBÔ vGßÐ'œ2§ôV,®ÅJýBdÁµ?r·®e%¯îðÛê¤-ò®ÌdUk¥2b˜­C£¤'Í[¥%b;£ÁWkïo¦!˜NÇÕj¬„ãlìVNØ›u¾X;1Ýé¾Ïn§4ô¬• ÜÆR…š²Ð»©_NgœúÞëµ(Wò¥‘øäÇù>`(؉…“^ÂY7¦†±6O(†ÆT8IÀÆQ7¦Î€Yäƒ`”™\šå­z ny ’Cˆ€§§ôÞÀK%o·¢Ìº8f¿·yzjŽÑ‡kiÄ…¼SÇëÀÕ€ÀÀ 4±óiâ{êPeTdy÷Sì¥ñÙ£*G$…ÿ ‡Q´Æ,N”´ Ó
+ 5ÆÀ†ÛòÓ.¯ä;Œ¾{“<†­I ‡»A1H\y„.MØÝj›T Uµ!¯j÷¹› (åÂúÆA39[N!&òÙËCf”ŸvMtf”>¡Ö÷ß.
+Q׳m­!‰¸]cÆþã 0˜å]¥ oeíìe@Æ\ðy!ÀÇñ¦Ïá½uýûV窬-ÄðîAŸÃ™ÍùR‚E+‰<`ƒdðíhŸD,n µ!üªÌÅv´¶‰£À sdQ_¨6Ê€¬2‘ùÙVŪ÷¥í;°¾iÉÆ„ÇÌfIÆU1§(ö!oNfÊ}‹3·©À¨Ì ü£'›ì¡Æž±ˆ€:ð1:Š?í(,b©euœóƒ£¿¨Kaµ©m¿‰kù~»&®F x ýYfîàQℇâpŸ0¨1{y†‚Ì!&Œ06 Â<ÂÝÑí±þ Ç_má7ê柷pò•6ÂeáNÎÇ„ù¬—óó)Œp•›£´jF sÌAâCF'<ubª\iqUŒe>¶mÄ#c͉bÚO¦ôi·ˆíÖ5pÛHÎ3µØmdi¬
+7ì¡PiÆj§9ʲ’ö†dŒV)¸à­€Å) Àq½KŠêÌíy¹jZS3σ 6ÍÀïúÕM^8@]áLïÚØNœí?ú¡?o‰TÒt废tî*?Ny8D¿4Nv殄ýw™ÃÈœA9<Ï—¥Ò ²¶o‡å¬ µÃ
+vÿ0*ÖXÚtM¸6ñ#rÔxú˜,£YÑ‘ ™õd
+Ÿ/“óB­½š†÷àÐý‘­mQp½]ègûáìHµ¢'BàáXŸÅÇ•Ê„ú<ˆzc+ç°b‰ˆA]Ôq“öþ”Ëj¼t„5—PwâRš4/]_(UHQº´|_77vûÐèî´4!‘»Òš§¦ ¾-#t•ºeb
+7.2áÓø¸¥ÝJõÉZ}Wh<Þ±ÙÇébT˜h}Ì7š„ƒ3®Ü.ø,lÓ
+%(iNè|ÓòF>Qcèý{'””ÄL)ý7ÎÖeP/6¢û< 맬ò¦ª”®íKQ¹SÂÆêåð]ÒD†d`äæh?¢cÏÌ4Æšé?úÀœ‰R‰8KúO×ϸôúendstream
+endobj
+763 0 obj <<
+/Type /Page
+/Contents 764 0 R
+/Resources 762 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 753 0 R
+>> endobj
+765 0 obj <<
+/D [763 0 R /XYZ 144.727 740.998 null]
+>> endobj
+34 0 obj <<
+/D [763 0 R /XYZ 144.727 265.043 null]
+>> endobj
+38 0 obj <<
+/D [763 0 R /XYZ 144.727 234.866 null]
+>> endobj
+762 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+768 0 obj <<
+/Length 1863
+/Filter /FlateDecode
+>>
+stream
+xÚ½YKoã6¾çWø²¨ Ô,)Š¤¸½d ìöô–CnŠ-;BeÉÐcÓ Èï I)’E;Š7»X`Mñ13~óq†a
+ÿØ‚EQ¡Z¨ˆ­ãÅzE;úõŠ¹)\p"UmÏàŠ‹˜H! ‘Xê᜷þíuÆ’P¥¬A¿Ü\ýôI‰EL´”‹›­™s³ù;øÌx´Î“º¾ÎŠ¬¹+Ë—ÿÜüqõñ¦—3s¬#":fC ÑBƒ>Ôps—.W!ƒN¸1¤Ÿe2<kÍX® åÂ-Èj+;+ê&ÉótÓ}6åT•ä„†r¢jS®Û}ZœPÇ'Âœ+®úäG4H
+§¨¹K«t…«àhiL”V‹cDÃYãüdÛ¤L•*¨—,H«/K&‚´¶]‰ûmîp̶·å:ÉmóPB7l¥p‚`ŸØÁºÜ¤€¤±}»lŠ`¤e“n— lamî„}ÁYIÞÚ92
+G˜RBa¯8áþ.[ßYç¥EÝVæ8Ñצåü\ßg ÌcšÏuA1´vª?†pÕz} »HŸAWÙ®<Ý: ÐaŸ) Áe¤—'‰†ÿAÞŠé˜P¸b‚ð؈ãÞÌþ !´˜Xy|Œ.ˆñ4L ?¾óè²B†ŽõT@˜jõ2# ö`W kz~OóìÓìeWLáŒûBW¼¤Äú[‡ç•¼;•Œ‡$ѹ۬_¢àxY<ã6:ÆßPñPÈåwR Ñi8¸]˜¸,êlWdõiÞ;½Iå†p1:êno4÷ÈÕåÊê´C»*󇧄Óh:š¿>td/sÃFG3ÂÆÇ–¸-TôJ¶œobN¼y¯E¸Òo‹ámY6Yq›Ý~; ˳f‘8cÎáŒü–=†1)›¢lºeå  ö¸ï:mlGVt"ÜXgå®JwK<,¥€„ÊäNÈ$ÕãÜ©în¶Që ˜lhˆHéð/¿þÕ%øwÇ€ŠÌQøñ?<¬9øw/Å¿TD†lþgW‡*=T¹Ö̓'Þ¤¢ˆB}&š5訨à¶r_  wévuEƒýÂDÈ —ΰÔ~C“`e‚=Yá
+Ò7èQ‡½m9µýÙÏÏTÐ5Ô–ñ””Í"ôX25Cp¨›ãn*ÌŠÇ ÆÖp9HØÕ¨âì
+NM¤‰I¤aZ×Ö-T˶£,ì¯Ý6°¼nr÷uHv)*'€Tñg¡îêgS<ãLŒvá¢7¥X—?C­¨ÊC“•žcWÏEÙù¦h÷·PJ{^!hDXGh›‚¸¯õànìRJo’H‘±Ý’Œ†/„ÌÛqÿZÎx‘0f²E·õh†Ac.zV MÕ^bAçq1_i
+—†˜ÅWB¦æðÕßÍ|×ôPÂå‰jÄÏ°#±Ò§lK•áÉJ T¸,Õ´œÖ翲nbél2³"ÃøÒÕÞÀ“µÂŒÝ_È€¦ª¦ëùJ†£
+ðÚÀ5,±’ÏOUS_@Ìu7T– ›Äœ«í;F›Ç`ˆw½ª+ä¡”íGéÀq1}‰o/
+/¡Ô(ßcT~7öV—°·C4ª:ÅÝ=è_Ûñå¼ ^äóò<˜‰95ή*ÛCÒ‚S«ÚÞC9_Áž òÊ“Ý4ô¹ !Wç :Â;$‡óS(ë)ÈÐÊpꨜ–9™cNuø¦»âT¹™““l1H·éºé§]‘ÏIx{@…£ˆ‚­çïCꨔ»¶æ]ÓÕ©/„m2žeM Ì0*Õ›tH¶[` ) ¢D1Gþ!„cÄFùôû_~|ïÞòp[Ñ@æ9ÑSHvå\Ý1 û—Ç36.õKò,©»<°Zô¼Æ·Àµ{‚òP—|{PÊ\ÏB¾€SF…²Ö¿pý\>k³endstream
+endobj
+767 0 obj <<
+/Type /Page
+/Contents 768 0 R
+/Resources 766 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 753 0 R
+>> endobj
+769 0 obj <<
+/D [767 0 R /XYZ 144.727 740.998 null]
+>> endobj
+766 0 obj <<
+/Font << /F75 558 0 R /F74 556 0 R /F102 750 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+772 0 obj <<
+/Length 2377
+/Filter /FlateDecode
+>>
+stream
+xÚ½Y_Û¸ϧؗZàÌŠ”HŠíË&éµ½(ȾMdK¶ÕÈ’!ÑÙìùîr†²dËÇm‚V$5š’3¿ùc~ÿãiÊ´Ðw:™1ÙÝj÷*¾ÛÀ«¿¼âD’È„)Âxæå"‘SR e™2³4†³TjdðæñÕïÿ¬å]ÆŒRwkOóXü+zÏ“´;4U“EWöýCÿtÿïÇ¿½úùq`4æs*$e&ãcéÉXÄ㶼_Gïã8É7Ž½×e L$K¹~Y¡)k“1žú¢¯6M¼EÙ£»Í-ŽòƒÝ¶‘_yÏ#¢Ë;R̶ø\Òäã jØéi,pË 7'ÄìÁ«”I™]qðùz]Õsg>fqË™ÿ²>?f3ų‹â§Œ”a:QD\Á¥q­ï9œZÝ—?Á<ÑQÇ”Ž‰qSÞ }¼ç2*;¤ëÊU wÕ—’äDú^ˆÉŸ`˜Ó¦˜2´Û²+×-\h{·Èb–ÈônÁ93à Nϼv
+>y-Ÿá«D%QÙXø .½ÀyÕ¸Ûv#ëì2Q"Ê×N´³ ºÊmÕ6ø¾®zû“Ó ƶû}Õl~Óµ‡=±o×øÌA‚76Zw8Òç»’^Ñi¹]Äý—%ÊH`÷»¼ÞÜK÷´î¸Ü©#ä
+âšÆ ­3lû8«lD0\›<Uu£%½ÞwÀ4ðÇ€q…¥æ°[úÛƒq»žQÙV»àv9]Es<ùâ¢IÅt¦ç=ì0¹Æƒúmûôëë·ïæ\hÄ#¸$(ìèqÿùŸ/ˆ;2ú¹­a‰H.oyÊH§
+B…hëœßªÜÔ×¢ë¼F¡pBâ+wœæ`GCd‹ù*œ¡ƒ4Œëk`h]·¹‹ãc·çN™ŽÞà±Íø‡óøKªœÄtÁÔ…¬ $Ø-8±Oœ`âR5Çg˜(e
+%XX–²²ø#„ˆXFÕéƉ‚0*dd'Œ•gìÁÃ%Ç©˜†/,%a2Ë*»Î+·Þ¢oÃkã½Ãø]O^¦QÑ®;H Â#O¢7ÏK¯é¡¶^Sqdç"Ÿ”}óÖ–+îf$¼·yx;&·ŒS5\$Ldýfàé·
+ÏÕ6o6~§@´|&¢-½ ›!ÚÚÝ[Oœ<RÂþ¾múrÌ_F‡¶$âhÑ—u¹²(AEíÞA="!Ô&
+Ÿª#´(‚5•4•#š(B÷i‹Ï%}vDEh2æ_´ ù
+7­^Ûù>gŒ¯í›rS5
+jž÷y &t†\©éëq=ùRZƒïöGy çC*¹Õ8¶¸u,Õ‡÷šª®)ë™f ”+ñ¤îhʧj}®"صfYl&ç쬶3ñ*c2sÕún|öºEŽ+´¨Ž½­v¦VLÀB”¼ÖœÀô†¨8W‰X@xL¦UO~X”ÞRt„ãQkŽã©|KÉ!¯PçÈ%ÓÜ:u 
+ÿ2Yõú\/_Ý\òùº®ä*Ý\ƒ™E—¯í\3bp;bR$vña4³X_PfÊÂC:ÜÐ fšQ
+A˜iƘ©)&9Âqsì `Žú#^\ÚµE颬¾u©G„N×fø$|Ú¼¢ž³ËO!Û `¸ËŸÃ2 œØƺn_ÛLÛ×C›#Dð!þÎ Qì’Á9£Þg‡—–è@sDH¢†N{Ú”ˆÌ ’1’`D“5ë#Ù-0BåD]
+U_/µýXvëC]w‡Ú©÷«â8’îÕþáË)‰×ë·‡«õñÿÖEWAÊÕ¿CÙj³Û®á¾ÛïP ëËz)z‚+3%(©Îfˤ,dó8"Ù ¸À&† »Û’bD´Ë A*ÜyWPÊ
+òlšrå»ö@} íúÇ3ý‰­yXßÁ¶{ìX„&Fè+À`ÐÍMª@×â|IDXAÁ
+endobj
+771 0 obj <<
+/Type /Page
+/Contents 772 0 R
+/Resources 770 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 753 0 R
+>> endobj
+773 0 obj <<
+/D [771 0 R /XYZ 144.727 740.998 null]
+>> endobj
+770 0 obj <<
+/Font << /F75 558 0 R /F74 556 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+776 0 obj <<
+/Length 1595
+/Filter /FlateDecode
+>>
+stream
+xÚåXYoÛF~÷¯ÐK
+à(ŽH—=Àé€uÙO—j4¦q0¼Â˜É…foôh²
+YAû
+Å=ê°ÞõeÌð1cJÚ»©œÏ›²RàÀÆ;}Í‹¨“÷plöÅ‘âœÿ p¼°Éª3k‰ßŒUe%gYÒJGýåÓGìØÇ'.{$-§.
+,TH4TÖ¿¯l)õŒ:±>&Ж´ q,Þ-Uò5+ÞØ’g‚Çׯ‹y¸˜ÉÜzýÏZûß·p0äÝð€hA\×vWÝ9£}V,ìÖE¥¡ôuBvÀ)s<fªýfU•‰ªkªpÞ„ê=>Tít2à½,¨isÅÄ.ô}¦ûyrß
+° à{Îgüúµ¨çΞD, ÎâG ºq¨
+Ÿ‚«µËç¹l\4e…„²ñmŽÌËÂuB®ƒÐHË<+Ê4R1ÝmÅt×K9¢xx;"Â'Ž :øi=Ÿúö.×õØß½˜^ªãRAh€öM2v‹ÕGy#0bÄ—sÝ@Cß·eð´%¤Ýf%“ú…mùCÅe½RI–ˆ1ìñPS›¥*,%õ"L£Rú·£ôºÊe¢PÓK»h$×ç/ÏÝQÏ0ËsKééÊ0ÎóR;kã9èÆB:«”üê¸i[GWN¤\([ú°UOT
+¢êfÛ_Çýç´Éªuö·ÚÚ{ãä÷Ñ÷ñí»OO3§ÏõÛÅ_OÅúÛ-]Mts6YÚ‘àe3ÑÒ ž
+Üg@= …4‡º_û´5BïÕÌÕ‹+Iú­mý½ŸY$¨hGN?µ~´«ÿŠá§f›«ïü‚„ÉFôÉÅÏÖ “?Mÿê'Ø‹•¤“Ý'Š0;Ù~†E"x¤Y$ôhà;rðKØ?áÕ>Tendstream
+endobj
+775 0 obj <<
+/Type /Page
+/Contents 776 0 R
+/Resources 774 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 753 0 R
+>> endobj
+777 0 obj <<
+/D [775 0 R /XYZ 144.727 740.998 null]
+>> endobj
+42 0 obj <<
+/D [775 0 R /XYZ 144.727 530.174 null]
+>> endobj
+46 0 obj <<
+/D [775 0 R /XYZ 144.727 508.055 null]
+>> endobj
+50 0 obj <<
+/D [775 0 R /XYZ 144.727 164.42 null]
+>> endobj
+774 0 obj <<
+/Font << /F75 558 0 R /F74 556 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+780 0 obj <<
+/Length 1265
+/Filter /FlateDecode
+>>
+stream
+xÚ½XKoã6¾çWø@Ö¬H½(ôâìnú<lÐøR´=È ‘IU¢j»Fþ{‡+ÎÚ)¯Qˆ)>æ›ù8Î|øÃ#†(!É( }”¦t”¯nüÑ ýxƒí”
+Pœ„Ð>18 ¢‘H5BDãTÍù8»ùîX£þÏzê¬øÃÃQ8þkö F#ŠÒ8Vƒ„@+´3þÄAX°…ú™Ö¢ä²-ÿe;L^ní©»r‚Aõ(µÑ1&ˆø{„“’쌷’â3’”’ŸY^e ûRËRðÝ*ã]›'ØkÊZ¾ìœ¡’P Šè!
+#ÉG1xûƒð ÖóDP
+ð³Èªö ÷8€ «Å¥8¾È}ž™Òx;Ä}’ Ýç×û߇º½;é7¸Ï3ÂOâ_ê>@Ð@÷Ið£]h£ÝǬÊxÎL8“KÛ€›DšV=Ù¾õã棴¿Ò„¾I.ªnÅ¿^òÔ”Eo\¯’ÊP…Z—Ÿ0‡ÞZ-Á[b:4‚ê0Ÿ¯@ …Å‚n‹óÖhle…pómÍغl—VŒ0=óÞlÕ¹´2Œ­ù‹¯F-))ô-¶(ÒÆÌ–êrÅi
+ˆUsà93=…ඕuR¬2YæYUmMW¹0“¥æ¸ßæž2RÐÄî³\ Ë÷·ˆ%ý5[ô)‚ÂÈMz šûô€Øt@/EË8‚Î40†(û`JˆÀóÞ˜™åv9î %ÆPÕ#»†³Âô‡$òf`¾5ŠÐc I€"²×œ »AŠs½ÇG–b£§vè€1w)«ºbÊô¬± Êzඵzi>«£Âa`í5çå¬.)AtZU¡:I¨ZaDNyÿ”+ЉÞ( @( {ØÉàfÔÔÉÛ^Õ,¸ Ðï‰Q˜q@8 ¯ï“è‚x¯t×éf~ [ñ%a¿::UJWr5º¨]Y]ÛÌÔ%/åR}CºÓ”:Ór±é8€•6^izãÇ@Óε( þÿæÉ6‡¤øŒ™/;ç’†’o¹äI Aôõ’Þ+i Æô¯ñTïVsu÷4ç
+˜ÀêyIŠ®Š<Ss©
+íýã„>ïgYI¿±Ý€Ÿ¶5k$ÛX² º[¥H‡·¥B3Uü½¢çjŠ[…t'ïyñeñIç8@ÏÅ®[óРO"{7mDW»
+§îÂÙþ]I²U¹ëŸž‡ÀÄbTL:ŠMýb¹`›:ã:BNs8&©oÞ¾ãJ§
+endobj
+779 0 obj <<
+/Type /Page
+/Contents 780 0 R
+/Resources 778 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 782 0 R
+>> endobj
+781 0 obj <<
+/D [779 0 R /XYZ 144.727 740.998 null]
+>> endobj
+54 0 obj <<
+/D [779 0 R /XYZ 144.727 645.367 null]
+>> endobj
+58 0 obj <<
+/D [779 0 R /XYZ 144.727 490.199 null]
+>> endobj
+62 0 obj <<
+/D [779 0 R /XYZ 144.727 285.591 null]
+>> endobj
+66 0 obj <<
+/D [779 0 R /XYZ 144.727 239.618 null]
+>> endobj
+778 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+785 0 obj <<
+/Length 1605
+/Filter /FlateDecode
+>>
+stream
+xÚ­YmoÛ6þž_( 5GR¢D uk‡Ý
+lé§u‹¶µè ÕÔ òßw'R‰\©³EjŠwºã=÷BÅ.)üc—,HÄ£Ë( $Žåå&¿ —; ýrÁ‹/|FŒ'ˆk_Â"Ãy^__|÷^I ÿ_o;Öëä/ÅÁêïëw@—’ÄaˆDÆ §ãx¹Z3N©÷‰ùÁÕ&kô£‹&-‹{;do0ûðÒÉ([;k‰Ø)§‡ w¾Àpž@\¶þR©"Q[£ë¹Ò£Ò‹dW—m5W´œ/úÊè¼RsǧÀÃGŽ€ø,A Û;¶_·«5—Ò;”-bo¯VœzŸWLxÚ’”#¬„w¨
+ÕËPö'K‹Û)Q7KOô©6s„
+Àé×í{©µŽÙÕ Ê‚"±û½C e}ÛØDz°¿•B×á‘©
+ ¹^E¦¡õúŸàŒq–c
+Þo:IÕDµ{.‚’¸Õ‡‹W¯ÜBqõõlŒ&ÎR/èµtÇèF›L;³Ç‡n›Þët·7¸±0ïžÇQžO„¨c•çI߇žÂ6Öx—&MÛ»ÿ=ì… uÊP'Íjí!^§X '£ç€³3l.œŒNÈ9pöZùb8ož§8Å"8ƒ3Á…Kà\^ª2m°=Ä£ .`6¤á e,-æ#QIh¨|¢;•U¨s ®°°ø€
+çùІς´ ‘Σt ‹Ã~Rý$ÄÑy<{„ÉäAÐç]“9¼Âƒ`삯ӛZ³æD¿û¶. “+[ßý(ö¶eiì‹k_R¯ÖM›AW`ìã¶.sÇwô"6eÞcÄ‹ÈR{4HÌÃ":Wi6^ª/ˆ û¦êÕXœãaìâ5^P% ðA,¿-ií F˜ôG#4°j»M³Ta>L4r1 ÃàQðšSîAÎLMI$ù`±Ð—·þ ‘A.ﺨw‹éñNà]ÝA"qo]õ¾ªê2iÁc› ¼Ö°«ASÉðH›±ªÒÿ´&¼¸eý87V‰m,œ PŠ§‹M¹ûήU ûV6zŒÃ®¾xsýxùïúœ Ælêó
+endobj
+784 0 obj <<
+/Type /Page
+/Contents 785 0 R
+/Resources 783 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 782 0 R
+>> endobj
+786 0 obj <<
+/D [784 0 R /XYZ 144.727 740.998 null]
+>> endobj
+70 0 obj <<
+/D [784 0 R /XYZ 144.727 571.643 null]
+>> endobj
+74 0 obj <<
+/D [784 0 R /XYZ 144.727 454.312 null]
+>> endobj
+78 0 obj <<
+/D [784 0 R /XYZ 144.727 189.555 null]
+>> endobj
+783 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+789 0 obj <<
+/Length 1738
+/Filter /FlateDecode
+>>
+stream
+xÚ½XKoã6¾çWäR@b-)ê¹—º‹Ýí¡Û‡{(º=Èe«‘E—’ÖkùïáPŽl+%ÛbŠ™o†3‡ä× þø5÷}7ò¢ëÈgn’Ä×ÙöŠ]¯aè»+n§ˆ@¸aäC{dpÞÎ…ïÆa‚sÞ,¯^} ]‰›„âzY˜©Ëü§•z6÷áJµµjeƒŸ¾“¶ÔÝnäÃ8 ©âl¨-ÛJÒØ.]Kw6s–0üçòP<¨å1wÃ8´ÊWåŠTÒ¼¼€¹Âì´¬J›†T©][ªšt岺9bÙÚ–¢Ñ–Ô_Ï=á¹L€[8w“ èW¥Zët·™ÎaŽ{º üsîQ?‘YçyñѦ°†Æ&Ïõ˜o±~àÂ+±–ï Ö;2r6çŽlîïp|±Rª’iÝêNâwï†E³¿ÿj )˜sˆ‡ ±@’g©*B ¨ìJ‘VÍ‹±6KºÛÁ†aËlçBÖy®²áleÝn”º5ˆÒ®U @1];ö².Q%j¿½{RSl5y#š"7ˆ‡šeñ©«AYYË|àQT…^}Úíw㦓¢SÓÅ@Ñw“û—‚=ZCÁ•lñ§Ðªn·i L²0$b#l±Ó*ï29:g0‘€+rã¤KxVí)¼à »ï§[þ–fuN55zÊÔÉ–>E]½¤X<ð0Já,š{¡Ë‘gäz.g`
+cÌùvæhRYCœ}†B# }ßy>uFz™a”D‹¦ÐDêðÙ H”Bîe°è˜Q¯òÀâ§rëÔ´jÓâc^‘‡'ôçý*¬5üÙÖE&*K«jܹ4¯ŸcŒ‚5SÚ÷¾XsØ®Tõˆ§/ášÉg‡/þó³£×ä¿äì°Ö¡ª §9×<ç,ñƒ/¡‡³@öl 7ÝNê!1 êÏ9!vÍš¥©$=ÏÁŠ
+›4lVÁ6ªŸJÜqž°>€°Ùß’° a ðŒÞÛ±ƒê¨%'ª‚‚¥Ì(`Ìš,S[•§¦jÅo«a“ÖkÛuΖZµªçfû/¦Y~3\Æ¿2§¨Òxy“uF÷Mf¯m–1š „aù u¯0÷»z\‚‰J¸6»‰ïŸ¨üê¬×”òÆl(˜f£@xWåô ©Á½7~@,]ßÒ(ð‹éÕšZ†‚ñ=¤3õSC6¡Ûö·T7Ss•†‘Éæb:‚ö›3opiö]ßOlHá]ò"$€~yÒߪ׊rØKÈ«Ü'é{¸O¹!Cá¼GFÚ—à”FÒì–Øæ¯ÛÐÞ¤¶³¶B7jgŪ€_ãF¥oú¡ð…Õ£lÁ]`V㊨/ýç—‡”1˜Í}ÖLç€M9˜Ïê¡>EÍ¥Î(ÄÊci|"i< }J]uQ(\:ëˆ}Mù–¦~-·»J~zõ¶ÃÊÉŸL­Ç^t.| xVcB¥ú@]sÍÈÛxïâöáj¯š2——ŠüÀ ‚>[Ò:{„r1¿h†‚CïQ9}JARKݾBi¼ß™·ßÔÈÑ38Ÿ¬!Ú>@y‘Ë£ä$Ñã<;62¥¬Qæ ½biÙì°‚@æþˆÓdŸD3‘óMK«ŽOpMº•¶«ÜJ+do»R­‰¸ñÃÀ<ßyÅ
+}ž=ïyæMo„Ï׺IhYP$A›º1=°ÓÂàÕui
+,ÊTÕmk è(úÌÒ®y4ôx5†7ê²Xhù¨L‚L7ˆ ·Û5敵å]ááa+¬1¡™0(r
+endobj
+788 0 obj <<
+/Type /Page
+/Contents 789 0 R
+/Resources 787 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 782 0 R
+>> endobj
+790 0 obj <<
+/D [788 0 R /XYZ 144.727 740.998 null]
+>> endobj
+82 0 obj <<
+/D [788 0 R /XYZ 144.727 556.179 null]
+>> endobj
+86 0 obj <<
+/D [788 0 R /XYZ 144.727 511.362 null]
+>> endobj
+90 0 obj <<
+/D [788 0 R /XYZ 144.727 434.457 null]
+>> endobj
+94 0 obj <<
+/D [788 0 R /XYZ 144.727 330.574 null]
+>> endobj
+98 0 obj <<
+/D [788 0 R /XYZ 144.727 201.968 null]
+>> endobj
+787 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R /F102 750 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+793 0 obj <<
+/Length 1913
+/Filter /FlateDecode
+>>
+stream
+xÚåXKÛ6¾çW쥀 Ä,¢=9iÓ"Úô࢚¸2m«+K†HÇY,ö¿w†¤´’­d• ·b5Ÿóüf8#vCáÝ°8&)OoÒ˜’<ÏnŠÃ z³ƒ­Ÿ^°pDHA’4†ñÄæRHI¸ÄAL²$Ç3¯×/¾ý.$$‡ÿë­;ºÞüq)¯†My“‘<Ip“qÂiN¼g"þA•jõ»£-›úÁžSnKéÇÜ^Ý6M¥Umۓƹ? Wæ¼X&”:«ÃQµæ\Úb¿Ux·2ú1°ȵ ¼— ”—y1þb›ZO˸UÀx,ä…x¶Åk§NºLÜäÀTxé(IÀ5KžÉ¥ãN˜„+4]/Ò8:/šå÷Mu:Ô‹%—4ú —ÔNûÙO-ˆÄ_¼Y¼FbÔ[&„%ñЯÿ·ßÞ"©$‚eäÀÿÓëÁ•…36"î®C"—b’glH?~ruG½§ pÚ{J…Úõ@ìŠ'>#͘nÆËY8nÊ]]a®gb,Ú+&ëMSœ¶ê°SvÇøóè6Ü6íAY«7~¹¬‡„`Áh¢X
+š€n’®÷=eðÚ˜W@Ž³7L•é„²z¼rlŒ)o«ð"Б.%ÑäeÈi[«Û›¬>?¬J××ÎLs(BøÀ™Çðkp2±Á t¹€nlªN–JQøE£g¡N–3êd‡£wÛï10¾™['”S"G±…9­ÚUoÓ,üÕ1‹ôšç0‡scôê"m=Ñ çÇt³gDœ-a>Ãêxì퀩§¬KŸs §xÞÁ‘ a‹U¹ýØ¿ÎCã¸î
+ 4ÉnÊD ›`uU<dùêÒý9†µ䪣 Öžä˜5FÓLJÇÙjˆÿÊÓÉs ç€R¶1Ä8¶†@‡ó>û]¿ï9‰yW°~æ –éSà ä+D_4ùÊPŽUƒ)çÞtµfW¯ZUoT»ñË]ìU]šƒŸB—ЙªÞ¹‡ »ìyÎ ÍÇy|Ø`Éþ\a´»rñƒÉd—¾*ûqºÝ k¹DgΣ*î µ“)÷0üˆÑ%º4øG~ÍG PÂuö‡úqvâK’9‘xýýà ¹ÊŸgð›ÎE¼B]èËð<šŸÄTBxÖÕu樋¾ùteÝðµ½ìÿà½ÝLù'åzèÑ3”d_ó¹æ«¼“w†_~PMävø÷¤ô?qÏ ‘ûkß@‹Î7úpÂâÚfØ}úZÐ<Ä8Å{ŒJ»ö*œÄN)?íúýΫ¸õOå–wVX!fIôãÛ?yó]¸àŠ(<òŒKR,wYfßœ*L/ÒÐë`è‹#]ØǾ«îý>6ÏW†É¡ROF‘vE‘±÷“ C. ²ï2߃ƒ;A…„³è×wØ ®R¸’”/ÈŒ_Æ^žÚh?tM:lAzÕ­ ul&à¸mì>„ÂÐê]‡Ú`noíÉdFdŠ„% !€Š}q¬
+endobj
+792 0 obj <<
+/Type /Page
+/Contents 793 0 R
+/Resources 791 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 782 0 R
+>> endobj
+794 0 obj <<
+/D [792 0 R /XYZ 144.727 740.998 null]
+>> endobj
+102 0 obj <<
+/D [792 0 R /XYZ 144.727 679.219 null]
+>> endobj
+791 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+797 0 obj <<
+/Length 1394
+/Filter /FlateDecode
+>>
+stream
+xÚ¥XMoã6½çWø²¨ Ô\’ú Ø^‚Ån[ -ÐæP é–hK]Yt$
+Aø¿w¨¡lË‘c;…“G3ÃyoÈ¡Ø„ÂMXÁÅD„”H™LÒõ ¬`êë ó"AX„Йœ÷³ó $I,̧û›wI0‘DÆÁä~Ù‰ÞgOá„ų9£”NkµZéla¬5ëÙœGtjjl( Ú&_ÌØgÿ¹ÿåãØ8P8g ‰“Në}®á=N§i©š»fc S5þÍhÿ¦ DˆÄû3pá•ÉC/ªªìµ2“HH/±,Ï'tÅ‚ÈPxÉL[]¯‹Ê»ý”k›ëv·S¶k\ÁHÂy«fDFQ§åFt£VZ¯:UµÆ® û»
+2# X…ØÝ·¿~ýòz¿†°–ûoúѯ
+¶[í¿I¨5D³YšÊ6îž á7¿}˜þ†P­zá¶ÊtÝÝoü¦’Ï¢©¿Ñú×Ud=hÅèã>.ðã&zǵ–ƒ§“›,ªMkñ!úz»=Žï<à”аûÖ
+endobj
+796 0 obj <<
+/Type /Page
+/Contents 797 0 R
+/Resources 795 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 782 0 R
+/Annots [ 799 0 R ]
+>> endobj
+799 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [446.344 198.867 465.771 209.81]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.22.2) >>
+>> endobj
+798 0 obj <<
+/D [796 0 R /XYZ 144.727 740.998 null]
+>> endobj
+106 0 obj <<
+/D [796 0 R /XYZ 144.727 716.092 null]
+>> endobj
+110 0 obj <<
+/D [796 0 R /XYZ 144.727 622.681 null]
+>> endobj
+114 0 obj <<
+/D [796 0 R /XYZ 144.727 549.58 null]
+>> endobj
+118 0 obj <<
+/D [796 0 R /XYZ 144.727 421.083 null]
+>> endobj
+122 0 obj <<
+/D [796 0 R /XYZ 144.727 331.668 null]
+>> endobj
+126 0 obj <<
+/D [796 0 R /XYZ 144.727 272.121 null]
+>> endobj
+795 0 obj <<
+/Font << /F83 563 0 R /F74 556 0 R /F75 558 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+802 0 obj <<
+/Length 1736
+/Filter /FlateDecode
+>>
+stream
+xÚÕYߣ6~ß¿"Ò©*©/ƒáTU{×ë][Uj¥Ë[¯Npº(8·]Eùß;öB6Ü-p}©ò`ã_óÍxüÍØ¡3~tF#Üã3Î\ÇÑl½¿qg[èzwCí?ðIÈÔ{:MïÂg$
+c=æõòæömäÏb‡þl¹1C—É'ñ¼ù‚º®ë|p]¿ª¾•yÒÔç.¹} «u¦.hDÂÈÌ_îd-ç /dNQª´Èkýá;ë"WU‘}«¿¸ó18Fí$ö¿.ŠLŠÜ®œW§'4-¼Ôg›L㸫®¡1á¼ke=ì$H©P^«…** UX®æÔ±Mût[ %-d¶ðhHbÄA`Ö7“×ê
+iôeH¿,þHãHEY&r£k€¸®ïÒ<U»Â€½?~5L’ïº=’8 ¢®¤»tóÏ!ai.“ŽÆZTýðyG;O½XPb‰,:Kù,–r –Æ.Þ3;ЬÔeO½B ÌA/<3©o™T¥*“¥ØÊÛ¼hëèÔ÷â3•ê3•ú,6TzMšnL|ßëX¯ÚË›œîÆgÞÔ ·¼©e&3½VWY±¾Çjj¡iJ4]vH-•U ÇR Òˆ—Ñ :­žf\dL Õ°åÍËs$c$Žô¬($ ÌÜ vÿ÷²U‘ħFr¥»Žè~fG»†ê.òTÚ°³>»Î––C/ÅöÚÁü€pÆûWä?lܱN·y
+ {²F!j'Ö†ìMQ­e‚Mæ ˜Úª’â¤ÍÌËM‘Y{ó€ýªÁoݵYè¥u?ˆæÔ /£y«E¥Òuf?šùº½,¥¨jásÛœ VX¦ª–ÙÆx0$pÚÙ…440ˆOæ=³yA4üC­9ÀÆ:úTæX
+[‰¶©Á¨ƒÐŒòN¥kÀâˆÚ†’ ì`ñ5k™“¬+FAs¢íˆ¢Âr_TÒš—E²]&KõaU«ÇLÖ:+c¡!±4ßBN¤¿çP“B 7† Dí&©‚R
+:¾¢C³ËñÈÅÚz_Ïõí íÐöÎÂCÂ/w:I+ËSµªDºÝ©zØ•ÄwýÑ)4–I¡·²ÿVÒå´ÓÐÄ•F‚9—ÉÊË+,m6? L0*_¿ô`À3<]§¤ÈV%-ɨ5@ñY;ÿ/3ef3å÷6PØøÚ\©¡y1Bö~>uþb-OÒ˜9u±N¥zÄÖ¨±"2H)Ûº’2ÇÁÈ´2Ñ¡Êeúð§›G잪š¥û¹GuõbOÑ×A‡KÓºA䈲
+MË–›«4F¼ï¸z¾C†àÀÚÍråmn‘;‘ëÍG /è8ÇŒ8¦t§ä¾ÇtðmŒNº¥ZU´ÇÓq°°žk¨ç=ÝOv<+ÓÝâ“1\¿<»Î¥¼ž«¦ÿ"±Æ+þƒ¨òãE¾ÉÒµ2ºôìÕ¡~¬k1}÷}é5¶•s‰ÇFÿÓ`ÍØ3Û6˜dh0À2©ºŸ-1tãÃLÖ=¾-“é§AŸ›q?ɪ½EÈ'o€f#íí¡}…JfsýÊdvÕÌxú®øê÷÷Â4ÿ"'Jû§}÷’L_÷ôþUª\dÇÓéYrh
+é®Já^=}Ýú><úendstream
+endobj
+801 0 obj <<
+/Type /Page
+/Contents 802 0 R
+/Resources 800 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 782 0 R
+>> endobj
+803 0 obj <<
+/D [801 0 R /XYZ 144.727 740.998 null]
+>> endobj
+130 0 obj <<
+/D [801 0 R /XYZ 144.727 716.092 null]
+>> endobj
+134 0 obj <<
+/D [801 0 R /XYZ 144.727 580.236 null]
+>> endobj
+138 0 obj <<
+/D [801 0 R /XYZ 144.727 362.677 null]
+>> endobj
+800 0 obj <<
+/Font << /F83 563 0 R /F74 556 0 R /F75 558 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+806 0 obj <<
+/Length 1770
+/Filter /FlateDecode
+>>
+stream
+xÚÝXYÛ6~ϯðKˆñÒ‘§M“M¤MÑh€$²EÛJ-É•äÍ.ûß;ÃÑ,uWv6@Q°x¿Î|’N|øÑ ‚„,œ„Â'qM–ù²†®žP;„KN‚P@y sÆ¥$LbA(ˆqÌ÷ó'Ï^Ä€Äð?_é¡óô½Ç™œ~œÿ r‘8°“2Â|aG| \¼RËmR©·»&+‹Û*ßÝÝbótF½å&)Öê¢.—™jnn“]}‡]©ZáçâS¹¯Šd«çÜ}g—“–â¸ÔŒú$
+KA8íå¯o§Â÷æ—Ïȃ9%‚1‹¬RWë}–*Ò¨ë¾ÜPvš–ÊFoQ6¦«µ±Ñ_L©ônú F!‰dËNŸþz2 ,ŠíÐa,T (ë¾ð
+•"Ø*?äX€”í€2$¦íøÛ×j—,ÿJÖêÖév7à-,"¾³AÝ$BTdˆx@$¥Ýc†Ó“™À€Ñ¬<5šrX!Æ Ô^Èò‡Þù §´>9~×çÁßû¬R¿eö¬ì.þ€²ã Tœl¶¢DÀ¨…=Þpr„ᶪéNS—ÊqÉ]s3ÖFÁ£ÙhLÂð¢¹,Ò·«—üa“DVòÐQµ%_d«ë}…Ø2šÃy–ÍJ:VÖÏHïê²T‡¼ BBŠø>òþ2…ŸÇ“q}“/z\Üš{>Á‹y³ êã9:ø1íp1ˆoÜ:5&Ù¹­8:Ö\ u7Zs1 9Ìjq1ÔZ\ ƒ¾p±‘Ñ´Ì ‰;üÜ'`ÔgñEÀ Ž~Öå_áŸÃ¿€Ýx1žE=ƒ~Qå{ØW[äaòµA+Øc‹àç‘oJ æñVgp/šå,êòÑ,<:õ:ÉáùÔ‹Öp^uļڕƯˆ¾’x£G%Þ<i6ÿ%âuxþ/Ä‹úœH¼æzäÇ]ÑN#ßC&‹ñ=G³™©\á=PUµ¾b%Ì>øÒOA2ˆÏÁB;ÔFˆãð™ÏŸ1FPÓVVæ»…ñÕTJ¸»ÍÔq/{º3¶/™Wªº°Ú’ºÅ‡)±$p™þS£&‡ (ž%FÍ@w}ζú¦:Ûu,DÇobCÂáöˆHˆôé„’›#éEeN"á+•3×òÁ£ðe "O˜æKÛÌ/­ïÐ ïàêùtÆ¡øRUè¦}
+~»³œô½Ì¾©ìª ¹ã
+ÿ Ÿ?â°åö˺@Þéó…-;D·êØ×Îm ¯z÷Ë%è,…ó0IC/kLêˆß4Ó”öÁ÷Ùr¿µø„‹_UÔ{¤.¹Ù,ÝŠ;¯{«
+#‹õ>ϵ `E‡™ž³P¦t/Ü.¬”vzc¢_¿uG#Pd]"_r{z]øj³ÃçXéÆ4«"}
+¥Px ôÑ}Ó7-…ÃÍcl¶m®×U–XV~x4ÙnK4ÌçÚ‚X.Ë|·Íjt0ê­¤Ìö_e‰X˜/j\Uû]£Áí¯ÃFÓ(î0SjÖrÏo*pAü€')¯Ü1ÓÓ%BuîÔd¹λÁ—h
+endobj
+805 0 obj <<
+/Type /Page
+/Contents 806 0 R
+/Resources 804 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 808 0 R
+>> endobj
+807 0 obj <<
+/D [805 0 R /XYZ 144.727 740.998 null]
+>> endobj
+804 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+811 0 obj <<
+/Length 1579
+/Filter /FlateDecode
+>>
+stream
+xÚ­Y[oÛ6~ϯ0
+ °š©+ßÜ¢ÛСÅ
+ÌÖ=0 ‘%M”’AþûÎ!)G²•šòŠ
+Õˆˆ-Ä•E|&ÙžÓ+9S:ÏÎÀÏÔ»{=ós=éÙY“Ëò{JÇäìGmÜwß:Žr[Ÿ¶¡‹1ÏóÞyô mQ0âYñý—?Œ€Ïi+EÓB3ïB^q
+vŒ(‹Â³K˪ÑYd–a
+É’«Î ¾‰›D7|ÚÂÚ$˜?Hsm KÃSÝݘ“BÄŠ,–.êïø(D§ñ±@µP/Z€Ô|Û¼ …q§Š!»°yYÞ©­:£d—4äàÇ.ö‘æ¡€r­6uV5¯§Pª^’ŒDWØèªl_ua…Š/°`Oð!ó"¿Eí0aÊÙ=™‡¡<2‘A"rJq=šADôw»PÐãPÀ”V§#Æ`x'ÓŽðþ¦\Ðp~?V0—M¹ß›èÀaBËÀ æŸìhY§æŸ'³%ØùÐxßÀáJÖ‘5Gzí*ìŠ(¨&Ës#Vµ¡–¥ö©-RìL%²ÜÈT›ãEúÿ¡ÐŠ—0UžI PVKMÙ²ÅÆ îò£Hç«ø¯uýhÄO^F¨ 6&§´ÜŒt
+endobj
+810 0 obj <<
+/Type /Page
+/Contents 811 0 R
+/Resources 809 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 808 0 R
+>> endobj
+812 0 obj <<
+/D [810 0 R /XYZ 144.727 740.998 null]
+>> endobj
+142 0 obj <<
+/D [810 0 R /XYZ 144.727 306.616 null]
+>> endobj
+809 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+815 0 obj <<
+/Length 1883
+/Filter /FlateDecode
+>>
+stream
+xÚ½YÛnã6}ÏWø¥X¨Y‘"uéK³‹f‹-Z(Übnh‹¶‰È’ Ë&A°ÿÞ’’e[ Ëé"ó2â ‡3‡g$:óáÎ(ç$bÑ,â>I’x¶Þßø³-LýrCH FÚ#“‹@Â68‰ÃeÞ-o~x„$ÿË]¦ÿxÜ÷çÿ.…I1‹I†8Ia>wŸhÀeY¦jƒ­u&ëúVçºÙÅ|A½ûçï܃Õn……-ˆÄi¢#š""⡦[½ylsP¦s•âÀ¶*ÚR¶¨
+TVõmýðl )nÍœJešVª®¿<5Ū86…]Øt¿’˜%  
+òbÁ!“ß‘ÚµK˜T7iL™ â~2}?§@)\ŽŽ©Ã,ÜA’œð˜ZîAO×9ØaÒsæÜ1TõþÃÇßï~£"æéÍ(ãcQ08Ø.BO£ó
+)b=òļùÓ4zFÅÕ(fÏ£‚,;Ïéˆ^‡hCUXŽk/b3#ÅÒÔü_ Ø’×åiÌŸˆlq0à+°B5ø‚…€6t!G Á e9¸÷Tx¹
+eõdÿ¼û{iaÀ
+…ÒžJ,s¸3‚ðÙaìãyŠA¾p(àq13#¶ì°ÇàŽ(˜ ?ÏçêǤØÕS¥>7êñ\ð¾;fUëm®ýÔYíõT´®Þ2ð’7'hø‰±`9ý îˆ
+endobj
+814 0 obj <<
+/Type /Page
+/Contents 815 0 R
+/Resources 813 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 808 0 R
+>> endobj
+816 0 obj <<
+/D [814 0 R /XYZ 144.727 740.998 null]
+>> endobj
+146 0 obj <<
+/D [814 0 R /XYZ 144.727 345.865 null]
+>> endobj
+150 0 obj <<
+/D [814 0 R /XYZ 144.727 274.362 null]
+>> endobj
+813 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+819 0 obj <<
+/Length 2194
+/Filter /FlateDecode
+>>
+stream
+xÚÍY[oãº~ß_‘—pÌŠÝ°/Ùöœ§(° Ðgσ"ѶY4$*É"Èï g¤Ø±²VТ(Ä9š;g>Rò*‚?y%©J¯R‰<Ï®Êý§èj Ký$™DÇZ$©ñÌâZÇ™HâFdI~Ló¿þt2™02#…ÿtûéIã«LäIru» 4·Õo«oR››MãÝÃæú÷Û¿}úåvbpüþ%!k)Eö/ÕûûwD½2y+Lj<“Ǧ˜«øëcþ·;{½VY¾ú;²4©Ð©B‰,M¯¤Hu ý2‘Ll´ÈT†Œ$·H‚J®ÖJ(£Âô/<Áóëì¿HòýµŒV¶kmÏ9;×ÑÒÞö}±µ,7~•›'"Ñé|8N5Œ#‘F1Sî‹ïĸu×*^=’À;vAÁµg鮳4µ³Ía344íÿîxuèm÷9X¸–™Z&ShQhS“…AbÝãKq´Úa€lÎìKŒ2ŸÏ3û´”£}ì¯ÀØmÎùšTDZ3u㟶]]ó4"e˜JLë‰Èá?¬¯U±Ì ˜©ESèJ'ySKˆvdŽìØVvs¯ç?Ìpç—ÖêJœ3ól†y*âì˜ùMSxûthž3½qÊ9?笌FηžDdOûFC{è\ ζMl®×rÕ¸Â÷sb™Ý‰X]‹A’”ö\f»¦îýMÿøüòŒ¢>“Xß±BeSô= ÝÁ×®¥ñoÔiS?ýþ²X/yÁÑ/ÁÓvw·Ð¿Z]H‹—‹91'½ ÁŽò öËâüÒfy~=][·ÛŦ㠡þÂI„Á¢aÍÁìýPÞÓð[GeѶ~ÇdX¹ð÷Ð¥­€B.sòš~é¥ô[ìõlQÞwÔ5u̵LçúG€dz%—ÂÄéÀÀÕö¦n7<ùVö1Ÿw…e‰ˆ #/nð‡ÁWönØÎHdfÿü M¶òØä>¤œýyÿI#%ÙiÿA‡œ÷ $JŽ¾h«s^ôllìG–^`凮%]KÊ¢ün_øôõŒWlRUÛÖõ¾.{êîJ%BÇꤻ?Ö~W'eF08åý,nISÀ-jQÿÕSÿ]ë(_}m›ïÌܺCÂwŽ-š‘ D¢h=+Žµ£–X]pD^ã—ê¦ Æ32 8¶¬ FOû^©| yÐÖ¬þŒÑ—«¡ñDX¹rØÛÖTpŠ
+Œ#h_¹y\ì8×2[A žèñ0áÛ­·;žÂp‘dS}:¯™ˆ–¤–NÔYjÅz]
+rËÓŒ·X6žø U쉂ŒÐ˜RuGö€T4´Î6„Ç¡ëòë;»g¯Œ˜
+Ž#
+gWP·+>‡NÌ ^“iË¿¬–É)…óï"=•¥"Ëgkß·gͤ';äÀ§³‘¥kª÷Y&™HÍx}RYˆõ¾nÕEp
+äóÒM¬?¾iBàpÓO¿³‡bñ!b>C‚¤wôÁÌgåÿ@©xRÅáÀ÷ 
+ËýG ï³ôŒ„{ÆÏvCU·5ƒà˸Ï£Ç0& (T ó„OY0`$V…
+Îb4Q"ŒäS\úŠ5à B„|€Ä_8c²Œš‹‘dÔ¦-ö å€å¡ҕµõßyn토Sš±Ò0À—Ó|UºŠîÁµŸv;Ó"82ë±â‹Î?ûïÉÔ>¾E‘
+ˆ ¤áì«H`¸Nçܼ
+y Gœ_²)õ–+~gÊÞ~gü7"¹£ëendstream
+endobj
+818 0 obj <<
+/Type /Page
+/Contents 819 0 R
+/Resources 817 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 808 0 R
+>> endobj
+820 0 obj <<
+/D [818 0 R /XYZ 144.727 740.998 null]
+>> endobj
+154 0 obj <<
+/D [818 0 R /XYZ 144.727 463.184 null]
+>> endobj
+158 0 obj <<
+/D [818 0 R /XYZ 144.727 355.584 null]
+>> endobj
+162 0 obj <<
+/D [818 0 R /XYZ 144.727 194.581 null]
+>> endobj
+817 0 obj <<
+/Font << /F75 558 0 R /F74 556 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+823 0 obj <<
+/Length 1810
+/Filter /FlateDecode
+>>
+stream
+xÚµXÝoÛ6Ï_ &5§oÉ{J?Ò­Ö¨û´î‘([‹,j"ÝØ3ò¿ïŽ<)²­6Êà &äÝï>y”wéŸwé…!Küä2 ]¶X¤—Ùæ½\ÁÒ¯m ¢€ÅIã‘ÅyEÌp²4^àž×Ë‹ŸßÁ˜-àÿ²0[—ùŸNy³¿–¿Ãbt™²Eã¢ç3ß iÇ/ߊ¬â­øØèRÖ?~ #~s:3÷
+YUræGXætorÿËH”¼+[¥¡0!ÅZ
+ ”£“Z ­Qn)  aèº?ZÙRxq½|ma!>õ"7f?Èüß¿=„ì¤ökýÒ3ˆ5wfºZCá¬Nõòø¦ ¨)ñ"é­6AÜfÿ-Äë‘ÕÙG.kXj­¿û+N§?&68L~2Ž|€
+Êq%Ì«îJæy!¥‹McßrøÒë6ˆ¯¢>Þ1ƒØÁHÜ 0º73JAEͳÒ§áˆa%pº.Êʼ0+µæ°è ½áíÝèCsŒ÷ 0`ƒåÐK5O_#¹-Wk+zÍ ^‰épüg¸hsw+õ‡(ÇOI¡QÉÈ·(ĉ?¢´‚j• %¼x᡾£ñFÇ• '(ÓC7__ŒeÿàwâsÓàK :r®„•8L;º¡ÜuÞXÚy \ÖQ<¬&GƒàgŒS¼äO*ÈpÝê½endstream
+endobj
+822 0 obj <<
+/Type /Page
+/Contents 823 0 R
+/Resources 821 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 808 0 R
+>> endobj
+824 0 obj <<
+/D [822 0 R /XYZ 144.727 740.998 null]
+>> endobj
+166 0 obj <<
+/D [822 0 R /XYZ 144.727 537.338 null]
+>> endobj
+170 0 obj <<
+/D [822 0 R /XYZ 144.727 464.245 null]
+>> endobj
+174 0 obj <<
+/D [822 0 R /XYZ 144.727 269.094 null]
+>> endobj
+821 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+827 0 obj <<
+/Length 1054
+/Filter /FlateDecode
+>>
+stream
+xÚÕXMã(½÷¯ˆ4jiú/`ÀpY+í¬´Òܲ§Ý98 ‰­$¶'vÏ—åÿ¾€I·v¹73Ò¨•Žcཪ¢xPàÒx†) "Í"Š)Ålu¸C³­núó».! Qýìiœ‡Œ„™.MŸßw¿½×x õÿÅÆv]¬ÿyK#öðqñ—nd3HÎM£OC×ã_Òl“?æ!ûsWj¥ß¬UY§Ýëwsl۾ǯG6w€s¬=bÒóKb΄H¸N•¦ª³"7¿>=&kº5D
+ÞÄá-HPHÓGx-&Aô2}Ê*>|KU²ÎòmåY7rÈÀ¯$hŸa¯j;kÅz½)ŠîYÊú›k|šVõYåÃײ÷ÜŒ`†sÔ²G7÷e²Uæј‘n²½]Lû*MJÕ¸©Mâ·÷PcÄctL¬-Í«1Æ.5KmÞœLsÃÍ‘¦è°[uj·År©_)€<ÁyzBÕã‚á DQ<q™àøœ†H2Â×MÅÝ‹ÞÞP³TŠ¢¥¶·ýž? Áº/“¼Û¬»¸Gˆz¾é¥šëlµW±žž*[«sþÖ(ãcí-›Â[äê%ÞgÀ«ä\2:Da 1„º<ªò˜åõ9§z¹8uSu;/rd8I/]0Àb))`7×~ŸuhRe¶é¥õéãô:^Ï´Ìì`vMÕj—åëÄŠ¬:éH3¶zHlª'y;IüUû­E~Ás>íÇÀ½Q-<;Hþ
+ÌŽd€Ç)zÍD;Ñp๔váea¨ôÉ
+ÈäÙDÑO@q7d^Áu }2†Ð2À²kŠ—,û¸Â"¯x“åÉÞN=˜(üµ¥„!ú«JÉÉöc¥D8þS¤„¡è'I CbBMû¼´uåsu…xi$° 5®@+Y†}e² ï£~Hvj¡¾Ö—¥:®’ÊBpÆðB9¶•rã-’ñÛwÝíJÛ\Þ‹¤Õ.+»R«ƒ]%jŸ|mhAÉ°¯œF'½úÔ‡åú ±Â‘P¶à¨Ñ1¤ŽÅ@‡ýñ²a/‡»Ø‹÷6gŽ~ܽ Ãâ6éçê97-7HIy»”$c—`-4rÿï4:!‘[N¤ºIÊÒåäjŸTUœåYZ/vàÓ ¡#L÷6ºÚ5®¾ÀÇ.´îÛq,·> ź¨ëqÀ¢HÏ“¤#¾bG8lPÄÓ™.PµÌô
+Í.>`¡Ça1,Øÿ .$endstream
+endobj
+826 0 obj <<
+/Type /Page
+/Contents 827 0 R
+/Resources 825 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 808 0 R
+>> endobj
+828 0 obj <<
+/D [826 0 R /XYZ 144.727 740.998 null]
+>> endobj
+825 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+831 0 obj <<
+/Length 1594
+/Filter /FlateDecode
+>>
+stream
+xÚµXYsÛ6~÷¯ÐKg¨™@€G^ªÔã^iÓLë·¦ I¬(‚áaÇãñïâ BZL 9õxÆ\ËýöÂîBd†áÌc(¤á,dÅq4Kx¶…­Ÿ.ˆeñ¹‚=±¹ð9G”+‚¡(ˆÏ×Ëáƒ
+ÔP>ˆ•7y¦­XÉ,ÛHÙjKw›\Z(ºÝ‰*Ùjž]’©gºé>/³¤–»˜4ÜŽ#ç*&nDùY3¥ངfô.S)rïá?ÇxG ›Y>sÀ(D«ÅökÙî4¹•ë5¼¾U–®öpw¬F¤m.ËCRïx:É„+XpX·>ÁÓ†)]ñþ·šã»Ôœ>$6©4Ý•PtÉ)EöÔÉïãŸÖ§×Í/4kÃ癦òù¦õ`äLÓFhg›FÐÞ´WeöÇæ²HšÆ¹8³‰2@BÄ£¡ä¤ªlýO•ðU&Óî JeE»“r?f¤ŒÑØ‹×5Æ_°®õÁs;š;DøìÞäŽ=û‡'ãj:‹êÓÅÕõ`èBL%# 1
+™?œË¾õy„ t ¡™úÌD7POjÒ´ª¯ª®-’µ(«;õˆ¡8"C6‹Å¢üÕU•¬ÛùÂœ¡ßS…‡`/é
+»sI sžYÈÍÑ­GyħÓQˆ2Sºcuä…¡7„yØ°¢ù"àÄ{—ÄQºU&o,x’ΉWK³ú€9NÊì³Æº°<ùÑún¬È‡¬‰p!/8×ü{e¹˜îÝ™C*^›˜×¥Z†Þ¦–‡Ç¡ÄAl/JÇÃìíg=õöî“@\^¿y÷z ¦Ö²Y0}Z¦²lk°<_/aõ²O‡ÇДq„ûP?ΊBΞȂۼÝCS™iñÊ7 ùqï›@óɪÍy bA9öš"ßîÚânpˆãÄ™D< ááÃ5Æà»Oõ³_ÏBÎ-„‡’oV0
+*
+„–[+67…B5^µ¼É'’Œ†Hþ…«—Žå6õ³ª´tZˆï§Ê%Tt¬ëå°éG/uOäñ™÷DÈ©þžØªÎä|G \~.<ÍÙ¯·¥À姾ÉK€‹púÍ÷¨^’ïØï"¦¦FŒžJ L5c >Ç{
+U0çpnûYò½¾p¤{0´9½”õ³(cDCÿyÓõép­&ë9Ñgq smºìê5íÝÉ€€ äK¿Ó÷»fš™b!!<1…S~r½‹à;qÿøµ!ªendstream
+endobj
+830 0 obj <<
+/Type /Page
+/Contents 831 0 R
+/Resources 829 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 835 0 R
+/Annots [ 833 0 R 834 0 R ]
+>> endobj
+833 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [0 1 1]
+/Rect [210.293 420.278 457.367 431.221]
+/Subtype /Link /A << /Type /Action /S /URI /URI (CTAN:/macros/latex/contrib/other/lastpage) >>
+>> endobj
+834 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [0 1 1]
+/Rect [143.731 121.627 408.737 131.759]
+/Subtype /Link /A << /Type /Action /S /URI /URI (CTAN:macros/latex/contrib/other/misc/url.sty) >>
+>> endobj
+832 0 obj <<
+/D [830 0 R /XYZ 144.727 740.998 null]
+>> endobj
+178 0 obj <<
+/D [830 0 R /XYZ 144.727 163.371 null]
+>> endobj
+829 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+838 0 obj <<
+/Length 1175
+/Filter /FlateDecode
+>>
+stream
+xÚ¥VÝkä6Ï_±/¡^¨UË–d»”RîÊ¥´½}(4}P¼ÚX=¯íÚò%KÈÿÞ¼ñ~„ìH£™ùÍ·ù"‚?¾àB°4N©ˆXžg‹b{-îõë÷O™0•
+ Ï0ÃDJK$ËTŽo®W?¼Årø¿ÚŒOWë¿©ÄòŸÕ 0å"c¹RÈä1‹#á_ÜòDüiþlg>êâ³¾7OCW=_’X–
+uÊ!E"ó ¿¢tۮͩ¢Ò}ekð¹bäÁç§Ës†HvF.'Kꌥ”Élni^ W­o<´ƒÅö|Ö© S¹7•~‹©©A¾Þ\öF ¿~lp?6>5…5nRr±Gâf × þ@ªÃO­)ìmÅñiÖcK^¼[Í#c.²˜I®æ³ó[÷&`0§yFƒ™†î,Ñ,èWÿz@~ r®àX»`ù8•f}6.I÷W;FÁ™ÞUšª…&6^ ½ñ¡ÔýI ÈPÈA{,ÏÅéUDg¼½ݵ›Ç§¹ßH‰e†Ç«¶ÓÏÔA8ùgEå+†Gñ¬¦ãSIý4ñÅ ªT¥žïí…=VÈÆB}((«Þ¸¡=§™glÒüói1‡æ©ŒÒC„èËƾŽýx­Áƒ˜e+SA5;R[{_:"+ûפgÐÞS0ä:WÒQy¶£Ãm$#»!ZûͲ3^ÙP¯ 6ImÖðŽÓeãÕ¬mïl}?ؾôŒÚ-½õMS…{/_FoE«d© ®›¦2ºîÇÁ‹}ž q ðGãÌ0سhÒ-§4Ñ¡îz·«<kŠ Ü—ÍPÁÆYÓ±©«Qºr ù¢ñ ¢ÒÕàÍf:º
+endobj
+837 0 obj <<
+/Type /Page
+/Contents 838 0 R
+/Resources 836 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 835 0 R
+>> endobj
+839 0 obj <<
+/D [837 0 R /XYZ 144.727 740.998 null]
+>> endobj
+182 0 obj <<
+/D [837 0 R /XYZ 144.727 689.057 null]
+>> endobj
+186 0 obj <<
+/D [837 0 R /XYZ 144.727 562.826 null]
+>> endobj
+836 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R /F102 750 0 R /F104 752 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+842 0 obj <<
+/Length 2315
+/Filter /FlateDecode
+>>
+stream
+xÚÕZ[Û¸~ϯ (jV$uíÓ¤‹¤@‹Ý.šAÑ" ´E[Ú‘(­(Åëûß{x“uóŒílŠó`J¢Îç|ç¢Áwüá;ìû("Ñ]ä{(Iâ»mùÊ»Ûã?½Âv (
+#Ö ï)%(
+ˆZ jÏ_ýþ,”„ôîq§·>¦V?`ê?ÔU.Z™ÿ›¯?>þöù§}˜FÈ}·Û <ìÙ]Áp"±ÝƒñŒ’ tÁ¯×÷$ðV)¯¹Hs±7—•0¿mÆíâXÛ•Ì×xÕ‹8`~CÐÔÕ\‚^­]Uµ¹Øä›yxI±¶é,›|g~ÕÛ¢j¹4—¬qUæwÃݾ¦ÁXÛòÔR˜ê
+ˆoxã zÈÛÌ8›.7¢–5l“oo™OøO¼l8qŒ±†ýR«Y×fU#o•Ú¾n.Š\ö.*y­|¶a-/Ž—ál›Ù×Ó´áRÞà¯7›¹rn[¥Ý–Ol¯©ƒÜ½?;eíoÍû¸ÚMÁ$o “Eµ}ºÆ‰²êðý›oÞ;_'dõfí{«oÞ›øúÚüåí?¿’6Ok n´Æ€1µ¬àÌšô+Ó šØn—7ÌÀ÷wk@¾óH‘kˆ²Ø.Íñh/çéëó±£CïŠ#i:‘ q_ï£àíó—:ƒ>Ž´ðæøÞ¸^.hÚ°Ýuž—u‘óøOœ^}QØsq'Ò^.a›ï³–‹"\Þ”ûÇYSBuâüQÖl{•,û6Ûf|ût“(æ}³ÖTúR)—ãrƒƒÇ†«ä§+ÄÛþ©å?)0!ªN8$øª
+7 °²VÜØ<ó··T¬îp£(Jîî ">Ñ,Þê>Šáút÷@Î_Љ‚.Ø f á£f{~[É4@Ÿ\.×|’·ãr•ÙûÊkkVÈíù5Ž{¨¶UÑ•â&Wi ØÞôjßäéM”?S5BU%àé–A¤ã•õ‰ +˜˜¥Ã_žI“í­F–yÊ¿ÔãUÝÏÈ¡A†H»ºÐ9ð猩à½\Ò]Q±öÛ©ƒg…œK Œ*"“ã(sèFTÍê²€ÓŠ»ÁÙ;­¶]ɯj´ØõÍ)X¤g„>EjX¦Žu“/lÁ‹ä+宂&ë%yÁ»g¤cDñ°—æeÝç”| ¨FíÆ×Ë-ÑŒxà!bûÒy)Õ6ì¶éª·` 4‰P’»úÚ]ä{n‡C:8Êt1ßQ–Œðy‹Êc¹ùŸ7è²¾(¥Ø“þŠö„íI²€ œy©¦ ̓IüfíDÊwP ¥ î”@^Ÿ·ì‹”F ®hì S¢$Fþ@„óêEI|š9áYyhwrÙ˜AŒ<ÎÛÓª·‡M¾1ãÿ‡sQèž—_b¨¦@çÝiiæß•ÿ°¾÷}¼¨ P&¥žOþ±‡âÀÙH”æãÀ” ¾4ÇJÈì(*¼§8\m*UøB`œòX‘R¢ &Ìží×<1™öø;kÀ†ÄKF‰ 8«ªŽÆ±®êhœèÂY]sÝê©Â­ï#X>f 9$ %ÎH{År”(9 즪6}£æ)TŸóiM {™öxa¬RxÎ •à¶{><À$>¡Ð0é®5ÜÒŠ[2é[¬WÒ\·K:‚+Q
+ã`ù#Ediðu"†S §_' ¿ ‹áÛŽôŒ…gú—¥ÕÃ"/KæDeÊÈG‰F¯ž?ÿ΢ÍGéiF£Ö\„(-Æp줚 Ø(—T$eÍ·ùîh.ZÇTS
+?)dáBA\«Î<Ü2aýYª ¸©RœÝR•›\¸¹¤
+ìÝRŽÑø 2&žä‹¥ôŒòaÍÃK– Š(ƒód ,ÃÇóì’U%4nÓL—œ2ïË Oè &Q4YÑêQ°ÞÎ+
+§âŒcqL:u]?£4±‘•¸8I
+ÞjoÞ=üXåâ¤ÌÃÊ`U..åF_8#÷(%šÖQ@‚¥´5K_>¸(½$C.§­áëgy„4î}ôEN§ã™²³”N„nÎ’á_a¦§ãpöb1½$UFp†U0‘LÍ…SsK§ O´äîTJ&/ÁUɶM¥€‚àhuÈrý½{¢zJ‹®îåÖ×î[™ÊÂd<;³#,=ÅeÍ)K-µlÖE¹‡öÿw‘¹Oo¦ºÕÅ'ƒþÑÞƒä¹î ´èx–쉟á;j}—
+endobj
+841 0 obj <<
+/Type /Page
+/Contents 842 0 R
+/Resources 840 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 835 0 R
+>> endobj
+843 0 obj <<
+/D [841 0 R /XYZ 144.727 740.998 null]
+>> endobj
+190 0 obj <<
+/D [841 0 R /XYZ 144.727 343.753 null]
+>> endobj
+194 0 obj <<
+/D [841 0 R /XYZ 144.727 317.465 null]
+>> endobj
+840 0 obj <<
+/Font << /F75 558 0 R /F74 556 0 R /F102 750 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+846 0 obj <<
+/Length 2398
+/Filter /FlateDecode
+>>
+stream
+xÚY[Û¸~ϯ *c./¢(öÉÙ"Û¢ÀîC3{š>hlz¬®,¹ºÄóß{IÉ’,ÇšA0ERçÆï~¤Ù…쎅!Q\Ý©­ã»õþ½{‚¡¿¿c~Š‚D*„öÄàRHI¸ÄFHâHãœÞýð| ÿ?líԇͿ©¢Åþ ƒò.&:Šp)"ãÐÏøÂD˜™«jW”uÖ™±¯f¨K<{=ùK/cÉÀ ©½.õ
+]VÍ*i¾ßPö¬Ö™IJ³™«6žPË §­Ú—8áݧ‡^ IÃË&E?Êãg÷E¤‰±[îž:ÚsÐ{öß"ÍÇjû2®*R’ƒ‹ \”¯Q·ëó¢Î’®*e«£»%D³¹JGkÕWÝ
+ìä]`Ü­
+Z|Ò¿¡¥¡$QØNô@
+?V>û†ï€¬;
+ÅvÂsØÈ…j=GÛþ²2˜HE¨¿ŒöSÑ'óP&
+
+¤£… ¢“;t[ѸIiÈã§Öþéç@´X€ Šv›š'ŠµÙ4íWûWÞ-åºü6©GþZÙ]T» ÑíK¶¨Ð¶¨Ð^Ý„¶·›_¨¤—kcJëÞê틯fõñ׉åS$æ-d@»wrGn L-wUûÅ…Óóœ?n]#*Â}ÒEa@cºâáÈA9(
+|:m2çÊ2É‹e™2[j¢TÔ³Û›P¹8 “3-^'•oí“gÏvÍÿš´4S¤ˆ‰Un@Šä RTK‹lÊŸ+Ä ¹ü‡Å2ΓîYºNk÷öžÍ=͹ÙX9u+8Qœ^úЀN'Ÿ{R¯¿jð,ŒIJ˜Ò³hX $Q«9ƒïñ¿¾”«ªt¿âG·þ^ÚYØ[XàçƒY§[È3Z®Ú.ÌŸ>)ÄÞéÜ›îÑ–n$ÏÛ>¡®0kÜöÇÀº0X_ÀU<,à±ß§¹Ò¨Vß’u=»¡ãö„K’3’zÎ^’¨c'¨7¨Xú3)h¬LíJÜŠŒHž\»JŸrˆò&û^ïÜ¥¯Pdˆ3}A. 54ÎHL© úa=.úÌ€³{’„‰ 1PøKQ›¿ÂVNᬔYjOë–U`Båz’ºÆkI{È„WKrá™>áâ»#«Ö5Z_ ÆvµÆâw[ÿ¬Ýól¼™/ý~ÓG†3¹J7HVÐM`1yr
+Z“2Ÿ”ëçåNÜçÁyI„}¹U]Bú^ÄËá¶uHÖÆoe•{9l%YV–ørLëkõ®^’ͦ´WíUûñ¥O­¶·lè¿áÁ¯•™Öéô¹C;Ž²Î>ír™Ÿ~ï:›¼‚ãOÛk-÷#ÈtñY69d ûèÃ-?<}ÐâÆ
+¿Ì^Óð_N³/Zµ|%©±ïE‘™ÄÞõÖec.È™&[s‰ŽÞN|€‡Ð(žE|ìsˆO‚4OëÉ_=^Å{äl}W~íèó9K¯ý]„ÍÕkÕÂ*^Ñ{vëç«¥$Ž¢ÙþÄ®üˆut‹Æ.ýéq®ÎÉŸ²¼¬³¨[Zú£Ñk´^AÒYÒ[èì?LÙþòÐ5²lÄn“õÚÖGl;¦ {c˽n/~ëѯ¶½IjÏraçhÖuãOpw´¥c%ÀÚët| -—tVÇ%¡ë+òŠ$küümÇVû¼–
+ÂøDyºyƦ@—ÕáöZÖ»¹p¤ô÷9·×oû
+endobj
+845 0 obj <<
+/Type /Page
+/Contents 846 0 R
+/Resources 844 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 835 0 R
+>> endobj
+847 0 obj <<
+/D [845 0 R /XYZ 144.727 740.998 null]
+>> endobj
+198 0 obj <<
+/D [845 0 R /XYZ 144.727 592.704 null]
+>> endobj
+202 0 obj <<
+/D [845 0 R /XYZ 144.727 520.671 null]
+>> endobj
+844 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R /F102 750 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+850 0 obj <<
+/Length 1566
+/Filter /FlateDecode
+>>
+stream
+xÚµX[oÛ6~ϯ0Z/’¨7gÃ2tÀ¶—{X÷ Ë”£Ö I®Sþï=‡¤lÉVc:KP ¦Éó?–ŒøGF„s?¦ñ(æŸ$b”­n‚Ѧ~¿!v ™ÅÆ“†> qÀ}%¸æ—‡›÷°!òøûë¥ó½0‰Çÿ=ü“áHøIá$¡> ¸]ñ™0>—9þLÓMó¨ªi¶”i%ç»ñ„x»ýn¿gut
+'.ÀÝ’w®ª\z?!»Ý-ýi³€ ¯v´ÉõG[‡z
+õƒ!¦·Ìù,‘SK)Œž Ù›¶ñEŸÜ¢4_µ\§UÚ¨j¯CwËöÃѳúûv°ÿ={Š Yô´ò Z§å<ÍYE¸#pOç šÁBÍfKyKÐè ë淇έís¢DøDÐîÅ~ú{Ø…ω0,ÀÜð‹‚óŽqŠÙݪœû‰ ]Õ|”€jÖUý§“Ðû†äx±×<êAä­TÝQ%3YÚ± †YѨޖØ[í•›%Ù¦ªNöÖ>D0÷17â­laÆÄC¤åw#˜s»ñ­ŽB ¡áó·Ëa}ûqX¯ß'Œ2°»¨a$žù
+tNpÐ& Ç[¸ÙÓçV2擈t¬üõï©ZWçæñŽWÍ×þ4T¯ÖRw10Ø<Œ<Õ¶¨­Y­áÀ> –g¦@;O|ÂÏ’|÷é'_pf òº
+òÜnWô5…Jpï\o4zëz‹ßºÞÄ[Õ[òÒzÓÒ©Þ, Þ Þy­zc—X±3¯e—Þª—ßöˆ2þʯÞÖÂÐEïL)¸9Ê<]ÖòØï1åÇžï
+9QýÛ5ôrBÚ$„9±]ùA;°Ý6f9­~<…îªy éýg ìégÞ\~Zê/ªùוÊä|SY)ò\ÃùZ%°»XÛø!ÍÇ4ôP˲0lNÏ»«.Ê…ÙùeƒÄÅ3™«ÊbkŽ¦Šfie³¥Ê¾j¾×g¸ÈPix°{•6@´ž2zðç沑Yƒcº™J3ÎÒڮس´4¢–¢lQÁsÀÛ¬ÍW Y*«3‡SèìyN;Ÿ(;‹Å¹'
+¡úARã{%$ÂûK"ÄSƒf^-¸¡ :Ž-«‡Îk““ 7´CíĆ2éäÅh—Ùic_]£5„x3ôvÓ˜¹RYçî´aù„Âû¨ãÏ–À«•ÕµµÉ•iX‡üEÚ8#ÞEó"]”ª.š"3‚X“.p¯ˆÀ‹¹‘¦º qP›™Â êEOžøðZè´‚R¥y^tÊéä¡ù!m_"™Z­È©̤, à¢À€˜×n‰ ‘÷ÑÔè„2xÓˆ°—³CUÑê¾Ç!3‚ßcMâÕ$~t¶²áNq0)봨̾æ1mŒl R« ’«´@‹‰½{ÔlÚ€n0[/Ô-EëÑ-å¤qb"hÿI4Ô:I (û皧a$]­DÀ¾Óÿ„øPgE¢endstream
+endobj
+849 0 obj <<
+/Type /Page
+/Contents 850 0 R
+/Resources 848 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 835 0 R
+>> endobj
+851 0 obj <<
+/D [849 0 R /XYZ 144.727 740.998 null]
+>> endobj
+848 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+854 0 obj <<
+/Length 2102
+/Filter /FlateDecode
+>>
+stream
+xÚ¥Y[ã¶~ß_a`Tb†Q—öÅÓE¶HQ$/³@€n46e3+‹Ž$ïdjø¿÷’’%[Ž5S,vEÑäùÎ!Ïå;Z6£ð‡ÍX’˜Ç³8¤$M“Ùj÷Î6ðÓ?>0¿DHA¢8„ñÈ‹ö×…I¥¸æïO~øS)I#1{ÊíÒ§õ¿ƒç¬¾Î\Ò`—½ºAiæ\/îe_™•Rk2ÿÏÓ?­ˆˆ¤ð/ˆX0"ã‚HYi‘ˆý:9K
+þ+zR Õàc[ù‹¯ÕÊ”k“£úÍ‹ò"†Pb:\ŒÙW,×UÝ„Ê߀NÇúøËÿ‰%'`­Š¬®—/YUëú°Ó%¢l拈R» n*¸9•&Ës]è¬Ñ¦´?í³•r+sS·8ï=Ýr¢®‰×5šàDª\¿É…â79¦K…¨}iÃã¹Èʯ=ÓOß ”±fã±µæ{!(À®Ÿªn2AÝÛIgTdz'kNÍ’Þû¼ýÙ~™x¾´=ÇÇxËB×M›qÀµO“áÙ›á—ê[VÜG÷œ ÎßSÉmë?¿MñÎyªŸÒÿu*\ø¸OwJÕéxº[Š|‘Ñ"{šZ@e< Læ
+´`n–’ëà¢,ê÷}(æÙTÃå|0’DÔ.ìEÄÛöJ°6Iz®½¾p"‰`ƒ“qûÇÁ•µt`-L¤Áç¢Ñ;XQ¼Î#ië9ån¼0t=ÐÞ¿e• ,Ú·Vªm¬ûÈÎ ~Èrt›jô¼×Ë…Nq—_ÖœxH¢Xö‹"´ËÞÚpH‡âörÀ.Ìà'Ov‡ºi¥{êR7:+ôÕºK¬×ð”BP,[‘G¼®"¸%47‘ÃûùÙ4
+{º4èü¥‡'$ÜýEÄŽ;9¤Þ9ù¨¯Æ$Œä7²š·iõ¯Èä§#’4|Bû‡ãr¯xÕöY©Ì¯„[¯½ac´Vz_«/vn•;#&á†-i9ŸÑŪöÂ&?àÔXP6]«õsáoÒ û S8¿á÷*ŠÃܘËký²i¥rSù­/3 ý†ŽšÁâJgÏ…ÿÚšÔÆKv Šƒ¥¤aÚÕâÖ:0cŸéêªðî<0„¾./É*¦qg *áyÿŸ•gI¨Œ}Å”Ó+æåwÑ[U’шˆ$šT&yD’tJ™ôÞÚÇëï}³$ÀÛ*½Ñ¥½}xûWwr11·9Š\#1äMÜú8Ò.‘„#ñëÖ<ÙË IÈá̹m qúG?„|vžýÕaCß‚ÍUˆÀ‚Ü ž‹¡¦åHa”DSêhH ûò Wf·sð. ÏU¶oÖÍCËݬ“Wû—nÏVéʇcÊ€ ›°l½® `M Áo.‘ÂhmT]þeÎ’ÀO¸°¯ð¿+(³îæw(.{­”öT ] ¿º·z›Uî€pCU¶ÓÁµqrmÔPŒí…Øo¯#ñ·Öu†Iâ:ËR3yí’Ã3æj}?¡_Ä Œ ¸øGŽ&a¥Jõâ/Í£Ý7dû­³®—ªªì pøF­¿èâ[1šÏÒ4nPö{SayaÁútrš$¢G€aGÖ‡#¸û؃Ú[ð+ãG§”o¸mÝ6>…e¹«àP¾çÌ×®±”‘€4NÊ(&¦´q½Æ—°}ïɹëšð#B¶²›þƒ4NÚÌÍú^ˬ£λY›½Y—½Y뺰ÈùnlúìÙﲟ0ºÅµCÖ#œ€CV%¿}CËb—·DD
+ݪá¹ïJ€*µGžqqõìžtÜ=‹‘zEwn_ÐK¡,}—ßþœpx3endstream
+endobj
+853 0 obj <<
+/Type /Page
+/Contents 854 0 R
+/Resources 852 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 835 0 R
+>> endobj
+855 0 obj <<
+/D [853 0 R /XYZ 144.727 740.998 null]
+>> endobj
+206 0 obj <<
+/D [853 0 R /XYZ 144.727 161.535 null]
+>> endobj
+852 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+858 0 obj <<
+/Length 1881
+/Filter /FlateDecode
+>>
+stream
+xÚ­XmÛ6þž_±À¢€ ¬y¤(¾õKMïh?mÑڧȴ­F–|’œdkä¿ßðE–dÉkº‚©!9óÌ ÉyHò€áy I‚D,D‚‘Rò!Û¿Á[èúñ ñC(£ˆ‹Ú3Ë®wI$¹2c¾~ów RHqúð¼±CŸ×¿EíN/þxþ7t²¾“0”$ÜøÐ$Ýlò"OÛ¼*ýè*ÁÆÔΪý>-×ß.– Vû’Æ2j^šVï]ûS^¦¥¢µnõ‚DYë>ûÑù>/Ò:o_Ü7(t#~Ç ç'<6y¹uÍY'–
+ƒêaIRŒYtÍñ ë&«óC›®×µnš©;„`“Οê`œ»d±ŒyUeñbZ4:ÔyÙ:¡ndéf3@‰ã.Z~R¦ŸL“Gµö¸Gó¸ ƒÙ‚ߧõ‡Á‘®ŒEÈ$ RIâ‡q;ì×6f%õÜ™È$1žÞ±DŒÓkôÇQÞ8;ºÌªcÙêZ¯—
+{Ç +;Öµ¶a‚ñé±ÝUµëðJ Ü9N ÂRŒßÖÕñ
+þ7ëpÄbbB8¤µÏ¹8§_BB¹]à1Šq2HÿZoÌ`YÙü®Ò¬Í?‚A|‡ù_Ó~²ëÅöùf„S¾„õ«˜ò ä §9óF¶]zótêͺA_­«ð -œ¬«  L‹öeI16¢ZéçÛæ}0_êO~g¶£±]•§PO™1%“CSû
+|ûKß|7§ÝÍk´¿×[8Ýì~ ÔJ§ZãZC­“•9ÕíçŒu'ºWs‡ß ½ìFJƒ×¦àáksô‘„/
+68ÃîJš ÐYèÖÂ~ûnõg•—½ «?íºÎËPk*ÀšW ±:=’ùøUûÍ)qP&ßüðܳ+8å%üÄT BÈ€]þž§HŒ¸Ž­9&6°‡‡ç@u±‡–‡Z.M8PøUª÷KÌ!ÆѲ°E壩žºðuè\×á£É·e¾y‘hÛUÊ®ìÍ×ÌA‰®ºòl«º¯w»Ô3-‚ãY, @i›’±%¬KƤ0»º»ŒŒB3¬¼Ï;ÇN˜g)<Ê÷‡Bï±­®ÐñþÅu˜3Å22¥Ýàûž§Ç#LîáO‚Où³A±ÖÞkGÙX´ÍûÔ”OÞ½D!6¦‚N¥ 6ÍÔý@xhêE²´8šŒÑÄdfâ‹‚uˆÕð/ÒòëL'ÝC¥¨
+*Ös%JÒ®|³XrŒÝáï ÔÛúp:7K‡àR&CŠmO.*š±UžæÖß,€Y—Y¸Ë¯0Ÿ9×øת÷ò:>Ùˆ†Ž_¯G„r”HV8l zä·jVèÔ\J. Ò@ÍU[v6í7k Å¼ÌÛKs^S¯è–pr EMZWͧ+NžU]wÎyàKÊ#ŽB²'~:E½ž«&C”€Ÿ‰@2uÔ²±Õ¥Q¯ª×t3¡L!!ø=F¯$´WôwXÍ?ÝÕ˜w×N âNâßW@’eæ­Ç
+u•éõ±¶WqèÛØ'‰Ñh(es9$Z§mê7m}ÌZÐb’8ú¹jõ…š&ß›šØ=dQk) Ö. Is§YÚ‘@|…öüp2Ž ÃÌ®†zÌl„ÙR™ šŒ‰Å¯ ‰#sóW8Zkãi¿LP¬°£F4 ¦ks†ÂÆdËx² ¦ ŠDrfU˜áCíɱÒjóÎcÈŽÒg²·oån[y`FS<±´N߉Ǽ×uN ìr 5’‘ÑË[|ãÏLF)¢B\?ý.ˆ$A‚4ŠŽ¾¯*8ÂJ³Ã«›Öµ
+ßq™·úÇ^:vp›Wäk‘)ߘnyZ¢ip¯òÍçÓ5ÇŒSáiR4
+endobj
+857 0 obj <<
+/Type /Page
+/Contents 858 0 R
+/Resources 856 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 860 0 R
+>> endobj
+859 0 obj <<
+/D [857 0 R /XYZ 144.727 740.998 null]
+>> endobj
+856 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F102 750 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+863 0 obj <<
+/Length 1923
+/Filter /FlateDecode
+>>
+stream
+xÚ­YÝ£6ß¿"}X5‘6® ˜>eOíV­T©RóÖë!fƒD€¹Üu•ÿ½ãˆ Þ…½žVZÆØž/ÏüfLÈÃYÆPè…‹aE|‘ïðâ¦~¹#f õ)
+B´crM}Žß‚!DöšÛg¿‡qÄ× ?lï~x
+ýGQ,¶©Z³ÝÿµüH(;–ŸÄæñiõ÷ö·»Ÿ·={ÿ-s†"NlÖlkj³þ½\ùIþ«5‰ð²=âX6­¦j‘ˆÂÐqºòüåGŒ½<‹Û ¶/ ³±¼ap»Ô¬{®ËS…Vkè_Sýî,lIù=Úg{ÃIš­|ÓàEba`yh§i–o²"kÍrËÞ ³úAÎÃ1y8\¬ Aœ›œjYªùxÙ=cý(Êu ZwŒÁ`¼&È%ˆ (!&½¾ýYd1KݽH­s}¹w±Ö{ÖÒ oÏÁ;D>g#W$¹ˆëMs~¹XÜ{¬I€°²žæžÚû§€Sö‚@áÈå+w]Å´âXÿ1oÃÙtÞ–q!y¦+ÞÌñ
+eÅÚ&ˆùÃøuRæyÜŠ½\Ì—e%ê¸-k=j@iíc.ý2Ö1:ŽêcÜ&‡±Ò#r³<.ŒL¥óøøBÄ(·YËó‹ÇL}Òép(ó}V<•µ ¸:Z;?\&åÑ8F‡ÞÀ#UY(ðé^¦cµA$òF;Ô"ˆ÷®¢Ø`䜜êZH,2’FAc6œYrÐKT‚óHÇ'Œw†•rµØB1/RåE·’b@¸ñ§ÓaXôËÃå!n4±*8„…¡ä»´¬Åƒ#2 M¹Ì̾€wŽ:gyÞ±ÖÏF çÚpxÑÖ'—Ä0@„x·ñ’8ã%Äþ;äippá¢`“í)¡*è(¥®ü—¯‹Óq'êÃ*|¦Âì6 Z»µbï°ÂG$ðVH1Ò
+ùTVHBZ¡žñŠ~߯|2]O °Šë/z¸ÛiãIèxtÆëʱUAF£å‡²ð.Æö@ÂÆE¯qÆ”7B»sÙ ÅÀ¼b=¬ q¼®(ÚF¿5…PRB%ºÜX—GIñ¥µ£ÖsµhOuÑˈ ï²ÉÚìºØ˜îAÑŒ†R‹æ”·Ú7êcƒém_—«ºLÄþT =<5¢»‰{ˆôhë(e
+=† 7žÔ ±v:hSZ.%®BÌ^ÝØp#ƒÍ‘‹öê0EÑ~™ÑõNþ3úŒrödN¾Á˜/¥p™° ¹ø\ÁÙÅ)tJLšA•-ó2mÏ¥éo©¨uEû¼”œ¡>á }ŒDÙ•Uýb •t¿qUár?W4Ÿ!zÜ…M0&Îíòry3ê× ”{ÝíŠúK¨|VPC’<$ùQ6 ~6ƽ'¬Ö%œá®„3Ü•põN–p$Yº}`Ø®r(뀦Ryƒª5­{ †_»ò°¤x€‘F
+m²ôóËoÞR'·ù¶´Î|:' Ò$%%í/ƒ;ãÛÙIÀM#D°- ò«i6gˆ7_½~È×ÖP®YßÚ>^s*€Ö>+ ,&] ¸*o]rf¥M'BOO²µ‘”JIìÌÔ>KS!ýïê5†êêþű1Ü«“—™§ÖÙ@€R>«;ݲ¢i?Äý\M‰¹Ì>‚)4Ÿ]H4‘
+ÃB5Úg=ˆ÷{è’³'+’ZõMT"¶®n㧢U]y‡ãð|Vw°+ßS‘ýs2šüú“žRéb±ºJ·KÆjW2Í©&ªJt´f'‹MoŒ@Ù³opj—6ðá†YZ–-ä§ár-Mæ…ÕHØ-1×ͧgSÌ„I×û&2¼oU®¼™x­«Á‹U–tû8è(e7y­OóaÜc3>Z
+SõÍGiòïæ2÷Û¥çOÁÉ|mƒÚ6­¨L:¼hoÌÖ4ü:g@PJAòXÞ!웡¬ÍP[c£ú†™!µn_¬KÁ´¦½¡x¶Ü“R·é·}FÉ;$‚þª­›÷EõÞoªU~”Ü÷ØIÿwùÑ×G"+è÷ÕwÙá„ó±÷•: ~ây…õõû©Ü‚FmmšyU löM~øƒÐÛ@Lý‰WÜa¢W 3b
+Ÿ4'û§<¨°P[P×y$”ßx‚‰ŸóttÚ\ ‡}·¿þ9ÒJ“endstream
+endobj
+862 0 obj <<
+/Type /Page
+/Contents 863 0 R
+/Resources 861 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 860 0 R
+>> endobj
+864 0 obj <<
+/D [862 0 R /XYZ 144.727 740.998 null]
+>> endobj
+861 0 obj <<
+/Font << /F75 558 0 R /F74 556 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+867 0 obj <<
+/Length 1829
+/Filter /FlateDecode
+>>
+stream
+xÚÍYKoÛF¾ûW0P@´Ù7Éö"7ˆ‚öÐjŸšie¡H•¤ì‚ÿ{g¤–eREE
+cTjYä«ÖÚä*kp2Þl´58e›O÷žÇ ®• 9±ð}êGÿ¶ˆ"F$Œ¬[çôÔÅÞþ·Å“šß=Ü-N•ö%œŠç(Žˆ/œObÎ|áw»ÊW­­Ú÷@š˜Fžw‹ùc¹k­ß.äÀ2æÖ%}’àtÂú’†%ÕE ‚ =Aó»»ó,­êsY’!"©§DlU9%Qð¨ìc’O‰^ìC®¦TÏç°µÄHKÐø
+$:Žù­OØ0ã26vÕ²ó¢£0"ƒgeg’Ò véò›q;ýÐèbU¬ìCšk™é\ÿÒó¼w›¥@ó¨»ÙÆÑž7U›bŸ­.ùÓiöf…'üåü}gì”®¿ŽÕL©í®~Ñ9øõÐ]²è.±¯ër¯æÕ³}X'YOúãç×ÎÔóøÊAŒÈå—•Üå
+áÄù‘ ‹>6èéÖ¯õ;•fÕ÷]’WíŠb}îîìŠQù„ ˆ7 ˆjUXæõŒ§~èh9Õì5ŒËR¡+š®Ï~ÍhÈŒî=É6‚dF®`¥ðÕÁ)Œƒ}¥Iw^ZPŬk€bWö
+P€‰.ïöáØ+Ê("\º @lŠ·\6Abë7àG:6°ÈÇ ÁÂÞ kš ¡¿ë«i#þux6®tºi/L×V…´¶@:ÿë_ȈN·¬TÉê¥U¿T&œØàÀŠq7{_ .åw[‚?û‰+0b„øÄM¥¡ËÄ–¸–µ:5ZÖêòb*„­sMwÄyxR|ÕÊ+ºÎcKŒhLÇ™SB“M?ÑÔ®‰ýqáQ«æb8Á´Ã^A'Üçé?{u.ŸÆH⦸Pƒ÷¨zË‚¶˜ò <‚m~µYÕ‹B¦.x=Œå¼èéÌÁÀ¡Y–k¸KhVJ­§c‡ À£Ú×¢ÈT’›ÊÄ”0€
+J†û¶‹ÁF`¸ÆÈy·ÙÛ÷ù6©—=Ô»z#Œõ¢ò1;;sÔ¡b„Pg §Ð+¶§´Òi| ½8åÚ<žõzmääuqÃѸ^~9G½x0P—_D4`ÃñGPåu, äÅÇ&±Eš'Yö2•"p k¾ÏŽ­ÈIPÞ&˲p1p£q¶jõv‘ß]»Ä6¦Ñví“—ªÚ©em»~Ó‡ZGvF’Œ€™ª{Û¢qQOÒ+ ÿ ‚ ô/Ãó`ɯ¿æ´×‚3(sQ„åÿëž³ÓeüÈ{Îûêmrx§{ëFÚ6ÖdsÃpèj«å²TµÒÔ‰£†!PwÚg]ž]¨¦eKÑí.õAú ¼r
+p-)Â/§l‘ªgME5kJ¼Ø ù…´HM§ÆH`>ÿZ”ön æ¨|Su,æþUìÇ?.ªÞ©A®Uœ†gu ¼kº7O5\¨_`ëè”U ßR""xÎI9Ðt2Ư¯]õ¡_êãôµ/iú8á˜+FÜÑÚ„§GË,©ªyš§à_…Nw߆ÿƒ¥‰rÄ¥Œ h-ÞŒi}w22¼:áÉL¹q§IÑIÈV3v*“Dð9 ÿ¬%Áendstream
+endobj
+866 0 obj <<
+/Type /Page
+/Contents 867 0 R
+/Resources 865 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 860 0 R
+>> endobj
+868 0 obj <<
+/D [866 0 R /XYZ 144.727 740.998 null]
+>> endobj
+865 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F102 750 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+871 0 obj <<
+/Length 2221
+/Filter /FlateDecode
+>>
+stream
+xÚ½Y[oãº~ß_a 886°fÅ;µOÞâl¶@Ÿš¢ºªHr¢®,¹’|²A°ÿ½3$%ëæDÉéy°D‘3Ãá7ßÌ0tÀ]Q!ˆfz¥E@ÂЬâû`uŸ~}Gý.9QZÀóÌÇ-—†()áA£Âþœño·F†„jãþñæÝ®µ\*µºÙÛ97É?Ö_(»×¿îò¬n6ÿ¼ùÓ»O7ˆ¾„±xABCûÂÅ*á¼/üæ>Ýl™ Ö‡(®J”nèæ IBx¿`ÉP¦bDÂÆÝÜ(Ž«´Ië©Hôf=‘¯wwÕq*OPb÷ߣ™fý5÷S‘L‚ËÕ@ä_v屚ʔQT´6Önïs]gE“Vñ†®Ë<š4q£åq‹‚V[¦(Ñ<\m)%!5ÊH«¨)«”kb'Qðºƒ)7÷*’ ¨üº¡Á:-Ü«u£}j'¤‡c^â”G«FÀšûvATøѲÈýwü8q %¢õÈ]UžŽi%I•ÖõÔ)FˆÚÉ­)™×™î7L®÷iÜïC‰bÌoQÙEŸý>§vG·i·£Æ›ùOÎÝn•ë»¬(6èû;¿·ýhZRƧCZ8ýÖr hù–*"DåàvmmÑÊt邉2ÂÑCHt<&éŸâ<ªë]V
+ÑE‡»ëü³¾k•\Õ:6+ê&*b¿ø|=öæys=òÿ@(R„ß<Šç=½å…DÒTøȬ‡pÈmŸ\vÁoàž^ü8Ú‹£Í,3˜¤êÁ¡=‡iÃÚ í’g—9­ª¤Vá=‘C~ú)l}ûèáŽLÎÕ «4÷UÚB´Šât›¤yvȺèÒiG*Âu•!ÃW
+[a T‡Dt¶®ÓDØjå9æ¢d,¸·ê-Tx†Û˜Ž~Æ€÷€9ÙN~âç_ü†#çŠât¸Fñ>
+()ÿæ.Cã?g†ÝQ0Í?[εˠ\ùÔa+ƒºl,m¹lÛkœx¬Ê8M èró%ÿÅõVˆoZa0ºÛ@Í–ÁîŠV•;]xøºM­~öS§”°xy¸Ïœl½¾÷-üp#·i{Z6Úî1›¹7•IûظÖwÓXùúÔHh
+Ï ´g5~ù@ ¨é;*~ºb³nš•N_)=yºË¥³a¹· IÔbIâ@_Ša#_Ý6A&fœʹ2“jÈKR½t %&÷¶ÖÑQgô_;ªæUendstream
+endobj
+870 0 obj <<
+/Type /Page
+/Contents 871 0 R
+/Resources 869 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 860 0 R
+>> endobj
+872 0 obj <<
+/D [870 0 R /XYZ 144.727 740.998 null]
+>> endobj
+873 0 obj <<
+/D [870 0 R /XYZ 144.727 547.559 null]
+>> endobj
+874 0 obj <<
+/D [870 0 R /XYZ 144.727 527.633 null]
+>> endobj
+875 0 obj <<
+/D [870 0 R /XYZ 144.727 496.505 null]
+>> endobj
+869 0 obj <<
+/Font << /F75 558 0 R /F74 556 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+878 0 obj <<
+/Length 1911
+/Filter /FlateDecode
+>>
+stream
+xÚ¥Yßoã¸~ß¿"€±¨ ¬Y‘)²O¾·‡»‡¢úÐ=\Yvt‘%A?šlû¿w†¤ÉRÎtŠ
++5omŸº©ÒìÐÛ<Ò ‡L,‡Ï!PÅéåÌ?,ǾºÚ±IóBÅÂ&…ÚˆãK“éÒ$€8çC¸”Vçs_æiÒe#`-\ÄÐ{õŸ?﫺Yñņžk B`“t »Õ¨ß*X?TnÂúaÊ¥ÏôÛ†~÷vBßçäáÛ†ù;aþN²¬ê[|ŒóëÆ)sÖ‹¬›–Åèu…3“5¬8_÷Ñ î÷è¸ÈÛÎ׸ðO\VnJ›|?³P.H¤™µP /j±kešþ³L켇YîTÑÀ Ež´¶Y—" GLú@ˆ@Õ1ˆ—çǬ\c"ø ò0ö•ŒÄ#êå.B‹ç#'ìÓ‡¯KW2$Bé+T}!®BJ$ÕSDL U|FU?# ƒ¢3$ ×/aÈP b;±—sÒ¥¶Y¹ÞFš.G¥ø¤¾Ë«Ò>.û3HÍ ¦û
+žS˜uMÎ
+*9vYƒ·Ç—h:S»Í8‡]_ÓðàÏÕ*d7†‘L£À¨0’oîïЗ¿=æN9“¾œì¤ø?ض¨R¶œÀºòaË>ï¯òòÒéÔÀ{ir \1áJL¼§m™œ3t¸ˆfnWk±xÂjøIb/“ÞÂNä`[ˆ¹ù
+Ò0"áŒä2Ø×K¯ O”#, -3‡f«sV'§l…ä‡|þ¥)?uIùÔ^å'Kµ
+“¾èì³Ü½³&ãYö TŠ¹fMS5¶Ó9k[Xbæ j0/SÔºÏ\rÍú¤ÌŽ§¾
+£‰O[^…}R•ÅWÛrÀ1—kuÒty
+Ã苤™hµé‰%fæ>;¬Š-"ÆãÅØñÁµÝ“)ªºv²'-’¶Ýç%„WUH’Oþ:dMÔÅ õ§žÜ¶v¨³YÍ·½†‡ÖÐÜá5YçOšÚ#Iƒ0táÚP7ÃöÎ =rdçà9iÊu»+© +"1hMí¶]“—§‘Œ>½îÈíÉ”c^iýªšµ.óÑ؈TæýšÓ…9»2 ý­õŽ¥ƒ×gÐx'Û´ËBÀFOŸüÊÔ|¿:NÔÑȳ.aóúz: $è eIð#Âa! éoâ0ÕÊDÒ¿`¦‘
+¼ä¥ëp™bUðéöyÂKðqØ
+í!øF¥3õ8ýú=jï—¾u
+Fkva½Q$¾ÙöÆCoóêfó¿-ö*Àµ
+•k•DA
+endobj
+877 0 obj <<
+/Type /Page
+/Contents 878 0 R
+/Resources 876 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 860 0 R
+>> endobj
+879 0 obj <<
+/D [877 0 R /XYZ 144.727 740.998 null]
+>> endobj
+210 0 obj <<
+/D [877 0 R /XYZ 144.727 202.403 null]
+>> endobj
+876 0 obj <<
+/Font << /F75 558 0 R /F74 556 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+882 0 obj <<
+/Length 1886
+/Filter /FlateDecode
+>>
+stream
+xÚµXmoÛ6þÞ_ *5'¾ˆû)íÐ+öR Ù§$À™¶µÊ’'ÑMº ÿ}w$åH–’Ȇ"_ŽwGò¹çŽ¦'!ü£'T³ø$!Q*9É6¯Â“LýôŠzq"cí‘É9"Â"l’H…2ïÏ_ýðH¢àÿó¥=_\ U³«óO0$DI‰“”
+/qÿ謞{‰9#å4±ðM—”‹RßdÕf“–‹ï±«7i^\Ыٜ
+™º*ól6—a¤‹E­›æ­ë]Ýá‚k½ÊËU]í¶ØkÒ27ù¿¸ZŸíêÇάλSz?Ýs:Áó…^>¨?¥§ìn²z6¢>&QÒU¯Ë…ÝÖ˜N'Û×É'è<{÷ñìï*/á0°»®õò½Çó2ÕÛSvãÇ4fSL‚Ê«ç,ÇG$¦²‹ÖÃï~@;Ô‡°í˜ ;»[W½MWúÐfWÁ¡vATB»ºÅ‰ݼ«ûÓ®1³¹ˆ¢À¤Ù—›20kíÆþüãרJ?SyáV"ÛÕµ.›Mwf]Õ~…ÿ¦Ë‹‚Ë0dEžš¼*Él®˜ ~«Œ°ÇŒ
+VCµÕ3”záºy¹¿„ŽçsJអѳéï2’„%Êo5‡Ý±( ²¢jÐ
+~ÍķƘɠáìEñØ/šsÑ~,V9q.óùe
+X'!ŸV³NKH5»Ë_’ÉÎ1%!§C©!Ó`Úù:£Q€ÃBùvÝä˜Ë¬ÜrÈýJ9êiß&­œ·)ðüä“Kê•çƌ޸dÍ¥8&"æ]>òÙsh,&Ikëw½*¤PuȤ§p¹Ì‹}”$¢µüz9ºõ}w;Gq¤ .{™6‡ü]s’‹Ô¤£ÙŽDqÜÏu\LÏ î¸!~m œo¶Ežå6®ÝÈ)Ù# –1›ˆ‡ `D§—íë”/&|™X°IA”HÂ>Diaìýº¢êÐrWÍK‚ég8{ ¤j°PâIlªZ»v<QA¯7Rä_f4 ô&y(ŸQX3·(¿ž±0ا½Y§ð0rm[v¢ñAUéæ³j.׈i‚µeü¾ÅÙ´p¸¦±$4I<®¥ ßzF“`…)-*l vÓo®}­ÝwgKF®˜-qdÕcœÑؾÝi™šªö
+ŒõªmgåÄÿòµsá%“~ƒ"ÎM¦æµ=_cÝŠC7yQìÂíô+a°›µeíµ^Úû²äÓò¢az
+É—î»k`·r؉ºÏ²ªL uús¡û‰/k[c”»›¼`WWÓsxrD¤ßae:š5G~ê À1j,¶¥[ÄÂp°Ã8ì³…[Wµ³-íÉ×cË1±Mpéþ¶2¸¤ª(Ò몶‡ô¦Í6þâÒe7Ñ…HIˆt”ükšÕb*V
+|Ï9Ö´=4KnÖy¶vÍZÿ³Ë-W@g»+3³k=Æ%{®°ó— žöI¼{ãúïýw¯øGoFÐîƒ
+ŒÌ!ñðŠ‰¨F›3ܢŞm O‰˜£XìSí@+p”%Õq¥–|Æ´*Eôi­]Š´*ñ†¯M,ÆÔC)À¹ƒÀ@%ÌÀV€OŸÊîµKp$û·ìœü ¨jðÉ©¢`ãaC•´gn‘\†E… éU"P m³ÒŒ¥hÚËÖŽÁEàp§¿rhìGë4ûâ&
+ÑÓúÎ8Ñ-ð,ûÈ] G#‡Uß™_2< •º/5êm¦³Z»”åH>õ­^
+|¤¡1
+fË÷Ó/uØ÷ð]xwûˆÿ->ž{N.Åño?,W¸"4äctCcx„GòÂqOΑ%°ŽüÞÿyÑÅMendstream
+endobj
+881 0 obj <<
+/Type /Page
+/Contents 882 0 R
+/Resources 880 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 860 0 R
+>> endobj
+883 0 obj <<
+/D [881 0 R /XYZ 144.727 740.998 null]
+>> endobj
+214 0 obj <<
+/D [881 0 R /XYZ 144.727 327.932 null]
+>> endobj
+880 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+886 0 obj <<
+/Length 1999
+/Filter /FlateDecode
+>>
+stream
+xÚíYÝoä¸ ß¿"Å` ¨–-ù£@‹éõîŠöÚ>Ù§nfÆ=lØšËAþ÷’¢äxÆÞÄÙ¶oE€Ñ‡%’¢ÈI…_Eðǯ¸,‹³«LD¬(ò«òø!ºÚç?~à~I"–fú3o)Y,±#Xž¸æ»»¿þ6¤¬€ß»[z·ýÇ:Ùõ?ïþ åUΊ4Å<fq$üŠÏ<[½Ã¦×vSW½-›ãQmÊæú–¯OÆ®øÓGOdÄáÖS¹åp Yxnùn›jgNǧÿ-ŽìÃæy9ýbýZ[Çf8
+Ž:]«/ ¹Èè .Ë–ü[v#¼pð»”iü–ü‹ÅO–S*`AB”"–‚ßrÁ
+!ܺïÝ_ƒåòµ=hìDkUÚ“ªi²mZšlZÝ)[5æÆYŠ« }ÙkƒŸEÍwMsÍ×µV†Æ‡ª<P·×µ.á£õ;£}gG½$°âášk< ë–sP€tb«¾¯öæ¨ ‰aÏ®é N%K"9¶ðá&§ÚÅ™LübæxÇ”q.ÎXÿ­±ú7 GA+ϾíšRoO¦!8l?‡Gp!Ëcõ±-nî•ÖÚ†èvús%º´4tŠÂ¸í½î¨ZĶÚ^: ÚöÈxýºX®wlÎâr0‰ÇNÀProrb9`m:˜¥Ê_Å«§Ðc†éån*§LãzL
+Wɬ÷øÕD5%]@u¸›UüNÑRgKè{´´ý¸”|¾Èù?üp7ŠML8Ýæ Kx2_oµ ‘3ÁsŠ}×Fü£1l‚)³½”a¼ÿ’8
+:yALcgò£ûÆþtÿ% K£wݸ2PŽÂý™¦~çùùéf@·IQÊÿ3y6Ÿ~z]$‡Á7¯.$KáÄåQÆd‘.ܲ©kußP©±Ñ]wÉÿŒÖ·coùúÍliðPÕXòD4Cæïܺ<Yí×U;jUç—UÆOÌøH&˜ˆXí»æÔê­Ún! î§N’§,ÍC±ÒWPƒ€àëAL;8šòtëq+å“"…€Š@nµ2!_š3‹ š«¤³K˜”gÁó½C½$8Ëòü BïÁì
+`^wZmipP=uî5b,öª¾?¡ n-4yA­:rfœ?‚òÔÞôUoÇ9{Pv&nÈ”E.f/<%„Î 6Ÿ©5„퇮 à‚÷OµXøXª^ûXÞ{ä!¸„¯î#†”Gêï›ûûZ¿…G™÷ÿøþáQèÿ]‡eÙâ,}ë­á£Sg 5ùæ®êé÷ ’l\J㥬ñ5'\.g;¸ªÉP‰ˆ‹·Ä3’4
+F’F.0€6·¿Z—âýå’G¹"†:8Yr2aY±$­Ü6êdÍÙƾ©<RÁÑ廦ö¡]„²ÿ@ph0ø=x<p²„<±{±NûØb±Îf`mšQ¬øÔ`™!èߨµ Ptÿ8¥-#vV$¿¨
+wÈN!>ãÿøbQOi'’åi€Ê›)¼§xDæÐu‹h5¡4Üö+”øXµU»]UW_eÈ‚†xô™{ã
+¥1a€Kós2àˆqqžK­’…*£zs]_vUëCrÙ:$>Y(v*ÿX¥ÂÒÚ›í©×/AÅqÇ”«®·@B$!$›2öå+GšuÑf Þ9* qÜoÛú#¸Ð+Á.ÜJEM‰r½°1áC ­ ú•ßvT]Ð㌇àó‘¯
+Y£,Ó0ÆžIàÏ] `.Ó7Ân’MJ”ö]>tþ÷g5endstream
+endobj
+885 0 obj <<
+/Type /Page
+/Contents 886 0 R
+/Resources 884 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 888 0 R
+>> endobj
+887 0 obj <<
+/D [885 0 R /XYZ 144.727 740.998 null]
+>> endobj
+884 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+891 0 obj <<
+/Length 1977
+/Filter /FlateDecode
+>>
+stream
+xÚµX[oã6~Ÿ_ (Vj.o’È>¹Óv-¶ƒu>ÈkcK^IžLä¿ïáM¦,e¬dÄâõœÃsãwHn0ü‘Â9Jiz“rŒ¤7ùá ¾¹ƒ©½!n ‹JRí‰É%‹cDcÝàH$R¯y»~óÏw°!A~×[³t]ü‰”,þ^ÿ“ñ@2Iô$¥ÐânÅóÓ7nE°}é–, ÈKGŠNˆqOê–M’²K†¤ØRã…ÚêϪS‡c¹ýôtKŸgÓç3è¯4уiC³{|^,IôôlfóúpÈVí1Ë•în›ºêYשfµ­ë®ª;¥E›/[|Í"³ ’\¡¤å5‚/– ÆöÐû²í²ª˜Ë"³ Q<öÍOëÀ?‡é¥HNÓЃ/¿ýÎfÒº»uå€óý»U}l.9†Û/is$ )ó ”YHùÇß~øn±¤1ŽÖ;eÕé°QÍã~ˆÌÚ¶Îˬ[Hv¨«Ý×o̶ G0¦{XYÖ•.ŠFµšV†"©ÍJº¤1Ê'Ÿ ĉ˜¡¦U·Ëªûv¤§`ÿ×èéw8½ê—íQå¥>b®Ç£ú¨ÚÚÎ!{´d¸S¶ÝíÊõžÔ&‰@±HɃ`ë=´_žrD{ß.¿Ì~ZuÌš¬«Ý£ÒVzPª²ý¬øO¶ÔAÁœ"ƒ›póØÐÊUÕY;ùˆî¥ „ zIJ¹q%>‰ÌX%L*:Íô‰Å±~~É38Ps=åÓ
+RY¾{mOù­©sUœ5¶9hŸ ´ˆ0$Æ%JY˜›HZzº•™e•ëCÀµc~)FœËAùÝ'‘ ~)Ô-üÜóèØÔ›²º³ LŒë†N¡¶Uo ã¨×ÓwM}:¶Îí ­2âÜ.1Lt6^ת®3lLª°Ÿ·u½W™Kåv0w09tf'[ﻧê"-ݺ̥óΩ=eûýãE¾ÊOMÓ{ÿ ÉË£OZ
+Žã§}R\¿}?mx@[©åSv¶¼¡o´<­åõ¶¼‘¯*ÿ{R>³@®¸H-]Ùí•ËIû:¿×ÍLös™Æ¸Ì•ÙÕ‘™²ÆŒ½Íâ>I¹aµ qô©ƒ+ŒQÈy;ŸóÜúÄ´icgû=íØùN|ö$*;;Ni]4tÏom¯PšG¥66Ft€nm&â#Ƙ[8ºXílÛõÖOfy{2mÓ
+G–Ì€|sóÞtýp¾%ó«1ý†²ÃƺWלT¯(}Y¶lÜö!þjux5À.’+Nñ|Õ<¥y¸|Ž£~‚y<Â-›
+òuCÁ‘•økB]7– 5Iþß¡ é ¡À¯…ÂËapÉ‚Í`*ióR¶˜¤þzA&_-Èä«™üŠâ×Wq©„;‡Ïë„ÄâdZŸz{¸”`@ík°û­/n=”€‹öñ¨¦@ªG7\žÑMx/±àógð-;I%þÎŽà:'"ºs|q:îË<Óµ—)¹_€š¿feÕÁkzf?˜AË`øºrõpéûÚše·sƒ®ÂHi%à Í‚&ÑÇ2×Ç¡2ŽþЈϔ¿ž”Ê,œ9Çò` ƒ–í·k²ÅÑG ÝTÓZ½b4A9þ@ÒU ÐØ×õ}¿ÐâE=m?Óþ{Zfm(‚Ç‹æ8IôóÖî2PÃ9’z87æ‡Xð³hŽAl‰ÍîG9ˆO¢FµÇº*ì¡HlõûŠÐÊòµd€n­24%ë‘vYé°-4-GbSÊPL Ô+å5÷céƒêÁ?LزgÉ 
+*–endstream
+endobj
+890 0 obj <<
+/Type /Page
+/Contents 891 0 R
+/Resources 889 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 888 0 R
+>> endobj
+892 0 obj <<
+/D [890 0 R /XYZ 144.727 740.998 null]
+>> endobj
+889 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+895 0 obj <<
+/Length 1533
+/Filter /FlateDecode
+>>
+stream
+xÚÅWQ‹ã6~ß_8
+ \TÉ’,ùÍô
+…ÞÓö©×ÇV“Ä6¶³·!ìïÈ’'+Ÿ•ãJYX˱ô}3£™O#2ÃðGf„1$1 £(’³ôð„gøôû±S(§( ÆŽKÊ9
+¸0$ÃHÏùôüôëgX¢þ?¯»©ÏÙßó‹žÿ€|&Q†úcÀˆÙ_ e{ÕêGܪCµêF0hOvå
+ðw­³3n‘‚ $m]RUV¢Ò}Ò4q^äí¶Ô{SîÎÞLÔ#›}¹JöÃFáR5ýÑ=Ö/8ãÄ~Zœ¸Gœl®‚Ù‰¥¶ü"˜ˆÀB€íUò¢^e¦|C"<PóõVCv™ÙN¯q³îj³óÇœMM•¤j¤mY¿é÷¢\Õ*ÙuAÈ} ’}ÐJmòb¬B\G|àsÄoOlÑ>/vM›Ô­Õýþ¦<7ò¢ŽŠ§:ñ!÷ô±®M8¨DÿT«}òê ·°·ôăþÒrlպЉy¶-G×æ
+‡úèÃXâ8…§ZJ:#Öq…Q—LlNLùÁ*
+NaÈíç-$yÀñ|· x®Nßô£¬³Æüš–‡Cböîé·çÁÍ1­‡Œb$ÂáÝôþyYYw\|½¤ÜÀƒìÀˆÎ€;Î!À8K„ˆà´ñŠ+%38W˜{&†"I†Þ°Y tÈðWsLö&Ž›Ÿƒž|4oM²ðüeAøÜFšwxymÍ[^˜gb‡$­p˜›·uY›ÜPRÕ4 ¼æ}uºäÇÅ”
+1‘‡øôö ‡‹§äÍWxj•ªüEe#"÷^wÞ2‰lÓ2€R$|/yóžÎ‚\0&Ý£ÉpÚ½$MUÕŽºwE™r& ¦ý«Ž+¸…lŒç
+3ž#…PWK«‚“G‡3U ÆbÒ?A ÓþÅ£ cp®0“[()
+eèÃèL sE™t1â(d.Ž&Á¹ÂŒ2† q®‹Cû‰iÊÑ´±H k
+u×&„H²1ƒ`6”¦Ð¾’‹ê‰#ÅÀHír÷SÇ·¸m‹²¡™ŒºeíÎFŒ¤vf×1iŽž-¶ŽJ/v…pR>¢gïƒq9ÙDýÊ&2 ÆÑMd’ËÝhè«@¤c
+wkC PС AD¬ Ab¿- c§ó/%ôJûýÉ|-‹½£q$Œ €ye§ý4šz¥Ìóù†ØOæ™Û-ØÈð\ç#&}>Bp@["œ°ƒ¬Õ!É‹LÙž÷ØôíAgvß÷vO•åpak€Ý—3¡“<í”<œ(eÓ†1‰„uäîBò/§}ÐRendstream
+endobj
+894 0 obj <<
+/Type /Page
+/Contents 895 0 R
+/Resources 893 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 888 0 R
+>> endobj
+896 0 obj <<
+/D [894 0 R /XYZ 144.727 740.998 null]
+>> endobj
+218 0 obj <<
+/D [894 0 R /XYZ 144.727 307.011 null]
+>> endobj
+222 0 obj <<
+/D [894 0 R /XYZ 144.727 201.635 null]
+>> endobj
+893 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R /F85 571 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+899 0 obj <<
+/Length 1862
+/Filter /FlateDecode
+>>
+stream
+xÚÛnÛ6ô=_a &1+RÔm{IÖvC‡­? Hû@Kt¬EO’ãzFþ}‡<”,Ùj"LŠ<<7ž+éĆPΉÏü‰Ïm†Á$Ê.ìÉlývA ˆã:Äó9Ì6gŽß‘“À È/ó‹·¿|HBϙ̗rß[ïoßý49¶kÝT8.‹rúeþ;€»p ºÌœùLþ(wÛ¢Œ+Ê{ ~Ð+ÀICk1e¶µ©‘@½J ©:É$Îâ"ÿaJË€|¶mG<à\à°RÛežäf=YªÑt²4X¼y#¬3×zJª¤È£“eŒx¡ 
+¹šÇXÔpž¹¶U­e”
+ŠóC¬X±íhÕî(Tkàˆb÷ð·)øă«kàkt® !ŽŠc*PF´+Å@Q}cô=XJ3 ày/•Ò£„Š‡qÇ$Bߥ3Þ(•„oè~´½¤4(˜C¯‹Z,¡VÌÄ£¬“:•×Ñêq¤”oEÕ s$}bîb­w$àÁ㱿–¨Æÿœ  Ø|¾Ô‰”K]+­l¡oÙ‚ÊÏO¿½yw‡³|“- P>'^xx‡ÜÎ!×…ÞËíúR)×e’×<Ÿ¸¼-¹bMW%`ñ@FÁnntrFBlX
+ƒ-Ì\·œpý(†ãò³p69¬þmØ*dÕöäšyQJ“`ÚvËü&]åKès@ýLâP­§­–ÓëLæ«ä(ÍõzÓ/8„⤔iê9À6«ÙË:ÝT<ØOxÐ9Ò~õ^+n.ûå‡6iuWÚRµ_/Š"•"¯Ëlw¯«í9þŒ÷g±€¬-¢A_¶Á>'sU <%º=-rÝž'pÌb9]HwÎKùûµñ€úigL~9Å×c–ºÇO^»×>í`'ó¶7Üད5%pðm^f† ƒ Ãبêܒí¾,}÷{²wW½að*qBK('r<+Éq¼ùó':#ÉÊ€e›ªÆuõ ÆÎûj‘Ú¬óžø„Rjh.¤ªnß’ƒ%w‚ŽÂÛraàå'$¾ß¤!‚ïv _ÿ´VB…ôp#]çe­ÜÍ0Ò0Ÿ‡õŸ÷êUÒ¼lÖ&Êä§<sð/4Ó>ÃœBÀtZ†OƒMB´ ‚ÍkÄ%–ºnX‰üAVû'Nä󞆡ŠÖ[›¾uèóÈ”è9¯ÓcîWEñ˜,w£óq‚|*Ô£ªšá3ÎÌ’¶3%ÔR·&jI=*©qUl€[§Ñ_‰¯M5µcwÇ1V‰Z·ÖšzÙð,  Åø®s]™N Kh¨j}²¼nXÞ&q½ºË w†‰ ÑT|!Ý•1ý•!Gp««÷z Ëd,Ãþ« Å9ý8éA…äE:êƒgé÷â—b·±Ò
+endobj
+898 0 obj <<
+/Type /Page
+/Contents 899 0 R
+/Resources 897 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 888 0 R
+>> endobj
+900 0 obj <<
+/D [898 0 R /XYZ 144.727 740.998 null]
+>> endobj
+226 0 obj <<
+/D [898 0 R /XYZ 144.727 517.824 null]
+>> endobj
+230 0 obj <<
+/D [898 0 R /XYZ 144.727 393.914 null]
+>> endobj
+234 0 obj <<
+/D [898 0 R /XYZ 144.727 346.342 null]
+>> endobj
+238 0 obj <<
+/D [898 0 R /XYZ 144.727 273.636 null]
+>> endobj
+897 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R /F85 571 0 R /F102 750 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+903 0 obj <<
+/Length 1625
+/Filter /FlateDecode
+>>
+stream
+xÚ­YKoã6¾çWø²€HTK~IíÅ[ô…íÉ@ t{ %Ê""‘‚HÅqŒü÷’‡²ee=)‚6´DÍ|3ó̓R8™éá$\,‚u´ž¬³ IâIZÝÍ&{}ë×»Ðm™/çÁj½Ðë‘›óå2ˆ–f±âUböü¸½ûîýÀ*HôÿÛÜnÝfÿL“UüùßíïúærÉjen†QÍnǧÏ«Ùlúmh·:À_&‹n¥D÷WReáTnÙIÕTu¿‡êX»»ÖÝ”äÉ]bî
+9£»òù!œrwÕ='žï»UÕ¦GÉ©³æÌÔgÎC¨ý¹LœÙ ÎloÉ×p¾H«Ìü©g5ÙS³îìMEUžu;3Ae€„±žÝ„âìùS(
+–õ¶Æá”g?0u6­E£˜p±ù@åO¬¼¢\aG8à;ºg\ó”‹x*2oŽ &UBªÒ‘'kë’¥DQye¥¶‚yAÇÐêí7<´aL?Øh¢ƒ=Ç™úE]y5»¿Ì=ɪÚØ 6ê q™Ófð`*¸Ò¡oDkÈiëAÇk¤I œI}æ÷é{ J´¼0(ü¦Sc‡`ùQ´BBq O´„”ÒXc
+YÝã%ÎH’+úm"v#äUÂÂ@Q–¾cæ¢^2…+²{|¹¦<Ä>ëA«t%úào¤®)L>Øù{4–léßßc1®±Œñ³¾¤´’—lG=÷ýLNŸõ˜!ýXxÅ
+òtœâôpV1-Ï}ˆú¼¹¸ŒÜó‡ûFæ‡ðª.)ØÔÙzèaC#»óÈÓ &²W,ï’è£b8G×W$£Ô; ¤)¼~×eŒ‡îûÄÈX/‰”žNÌÑ󤟆séëXÛÝÒ¼B8°1©Ì
+ì< âyx¦<¥h66ˆo wÏ „‡8ámÅ,S…ù©tÓ·?ÐJ"„’B²:ІV0G(Øtïl}Š2+zÑÜj¨ê\çP ¡t羚xw_— »£_ŸoL7ýóûÅ<¹Aã\"pêfdq‚Is!o„ÁTE”Nž‹û·
+endobj
+902 0 obj <<
+/Type /Page
+/Contents 903 0 R
+/Resources 901 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 888 0 R
+>> endobj
+904 0 obj <<
+/D [902 0 R /XYZ 144.727 740.998 null]
+>> endobj
+901 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+907 0 obj <<
+/Length 1890
+/Filter /FlateDecode
+>>
+stream
+xÚµYÝoÛ6Ï_ (& 'RÔöb ؆Ûž‚íaÝ-Ñ1IÔ$ª‰[ôßñË–l%VÒjŠ<Þï¾x<^ðuÿð5¦¥$½Niˆò<».ê«ðú–~¾ÂŽ$Š#”¤Æ3‹7Qœ¡$Ža@Q–äcšÓßÃå(KcËñ‡Û«ï~‚ åIr}»5D·å_Á{Ñm'U3¥x·ÞJ©©¸â«<ªÕß·ï®~¼=°p=Ť(Ïð^ç
+¼Ñ’€½“ a’Ã
+’aœ9qwû8òí¹Vqˆ"LYËŠ{vÇAfl9³¦´®…zTÜ å ¥#,
+VÖ²dÚ·zj·ŠÛ#«DBÍ’‰¿KCe S~$z;j;Yðrè‰
+Š¦Wœ•–µÜž3†L…ù2Æ¥ÑXǘ°96DiFžH 5»çÛfÞŠ`&‚r2›ƒ
+:ÔfUÀ(éä€?ƒ1ÑÖ”ÃÿZ8KˆäúüÅ(§† ‡p©Ö“p+ÙÜéß’oO´Ö9pAoð§·sØ–å †ü盜cëxˆÇصhD 'Úƒ¬[QÜÏ ¸'Ñ9B”"2èxÏèÐ(£›P¬ù ’epD/ p\W‰†·¼a•‚sŸ„¡]ÑhzÕ£©
+_ o+¡”lû{ÑÁ ¦
+ÁmOqðN.hB›ÌÖ³<` óà¡ÇϨüÒ”@é—§]\z:"h‚2B—‰_Z _N"bÌöëæugn×sèí3Ø&—Ó<P®?ás<Hy¼
+(ñ\Ö"Ôf&X±™‰èF¡ÌLIû[‰­:!ªD-Ô‹^` ú)Õц±tƒMÇÙ½pç3éL×¢®9‡Ác”NVÑ É‚m’Ìø&´¶ú·íx ÷¿²Ë½ÚW\w€"⶘ž‘À1ÍÃmå¬ß;ÁI¬ ZéL]óR€#«½Û¼éci\ïS'·3ù½y´kÁ>ÜhPë0`ûrÇ4ò¡MB+ò5#Œ¸
+&tÚ]½›0§©±ºAý°ÅÎn«Ùþ@Í+·Ó»G﵇éˆÓ›²oðïÀß&Ðb;£QÃáQسn¯ûÌ‹3lòåÖ'²åÕ5M¿r9™]Ðâí±»£® VU‹¥]R´û3 §uÝ?ÌšbVôx®±QM ×ÛA­ûã×YÞnË o|ùQþA7ÞN½ÛÚ?®¦ß°ð½“…˜$ ÝÖ¶U =ÞšR¨:½u˜gÔtÎgnDœ‚êæONÏ݉öÁ1¹f3Øgþ’3búµ®2Óendstream
+endobj
+906 0 obj <<
+/Type /Page
+/Contents 907 0 R
+/Resources 905 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 888 0 R
+>> endobj
+908 0 obj <<
+/D [906 0 R /XYZ 144.727 740.998 null]
+>> endobj
+905 0 obj <<
+/Font << /F75 558 0 R /F74 556 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+911 0 obj <<
+/Length 1420
+/Filter /FlateDecode
+>>
+stream
+xÚX]£6}Ÿ_‘—Q©¸°1/U¶ÕÎJUUUj*í Á“d¦Ñü÷^Û@˜ ;˜Q¤
+~ll]è dgc²'c™¥8”µ ”CVdËBÖÚhB‰.ýQ¡Œ÷xåžÛ”¹ç6
+ݱqáÈJ ð|H¸mvYi"ȹÆÊ{ñcs÷ÃųÑàÅPªqJ!hÄcèÑßÏ Ã[òÝ›øì¯þHd®ö™j"ª¹þÙù.Fa´›¤
+ÍÃÃDšvMÈ$š/Õ†N‡Gñ|–UªðÕ±˜œN ‰¨îX%©ïQøæà
+ ßlÿ¦¨Ôendstream
+endobj
+910 0 obj <<
+/Type /Page
+/Contents 911 0 R
+/Resources 909 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 913 0 R
+>> endobj
+912 0 obj <<
+/D [910 0 R /XYZ 144.727 740.998 null]
+>> endobj
+242 0 obj <<
+/D [910 0 R /XYZ 144.727 436.695 null]
+>> endobj
+909 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R /F78 560 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+916 0 obj <<
+/Length 1343
+/Filter /FlateDecode
+>>
+stream
+xÚµXKoã6¾çWø²€ Ĭ(R¯½TiÑÛÛ`7·íh‰rTË’@ÑylÿÞ!EÙ²-¬©‹Ïù¾’3Câ™ ?<ԢРg!uQG³tsáÎVÐõç6CˆOPR(t.ˆ¡DP (
+b5æ·Û‹_®aB€bø¿ÍõÐÛ웃Ý8œ¿ý zýY„â P½ØGAŒÍóEàºÎ¿˜Ð’KõIÖüé¡Y«+|ÓÌØ‘OFÎ
+<0Š)í0Ø×ײ?ÉnÏçžïä<•…*ÜϱïðòÉtªÚ£nJ·²Ç+ª¶È ƒ•¨·i©2S(çØuÔ{2S—[Q™Ê¶ç_wß[È"…©ºeSg¼ÓÀ5äMþs-ùÇù‚ÈyPDßam»Ýè2ƒ0Ù•ŠþÛvßþîF+;Õ]±å²Ÿe¦çu-+@èji½­$fŒ™ô,ãSa;=LN]" èçS;èUª,FVƒuú¶,ïíªÔidQW¿Žœ¹@ ,Òþ¸DgŽ‹Ú´ÏÇö®Š?)uGcâÏÈ9ÇÈ ‡XK¾*ªncôbw;|亡¶EHô”¯ O µðLº_U3£k¨ê|«óÃqí÷¾.vÌv`8"“xxvµ‹?¥EÁ©Qb^Î>Žaý›‚gn.êÍ©üÀC‘o&1µ}!c/\\ØJKXßSA°¡)"Ú,û½~øNåú1
+ÃÀÈE# @Ît¼Wð„ÐÞ›xXÖ KÉ$·ÀxB˜O”ºyµab½¯*DÝ”LÃø“^½r^+Ø}ãDl2%éà†u%ö†Ip>É Û6eÀtzÜTìV^hí+iHì{mýö-,°*ë%Ó jš mð#±6tðêÍulè}¯5xh®a œK<'Ýæj¡B‹JÓZùTòg“a*¥VüE«Î–¼|¾.D+o`Ø Û»pß$:pÈ7&«9É1Jˆ½?I~Ï>žh-]Å$žϩ^É”må]-ºrY´ò£e õlœ£ŽkBk•É÷ êa‹Ä{h’dh“ä0¨žÉÉ=ïlNnOž¼|›Š¢‘Öìé9öoÙ̸óÖv3{þÄÍüåËÕ $$}å+Væ dÚ, U57ÀT`W7GCžµëSêŽÞ¿Lß/|'‚§¼¸çÙy*;‹DïFå¾h'1‰ß‰ KSÞÈ)TˆûNTšíüåÝ$.øÍÇÿÌ•/[)X*/»êÍ<öœ«9uß¿^op]«û¦¾·>髧zÕ»<º™òݵÒÍ¥š ¶¬¹C–‚xB¯†NŸ6NØ$“IÃÒ¶ŽØ5XCPˆþ©ô
+endobj
+915 0 obj <<
+/Type /Page
+/Contents 916 0 R
+/Resources 914 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 913 0 R
+>> endobj
+917 0 obj <<
+/D [915 0 R /XYZ 144.727 740.998 null]
+>> endobj
+914 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+920 0 obj <<
+/Length 1988
+/Filter /FlateDecode
+>>
+stream
+xÚµYKo¤:Þ÷¯È¦%Jêòõ°fS=£™ÑÜuF³˜ž…CQ j
+P7‰¢ü÷9Ç6”)HŠ¤uÕJÇàÃyÙçñ°
+ÿØ “’$<¹I$%Z§7Ùñ ½¹‡­~ažD(AâDÂzas+TJ‘ÂB’4ÖHó×Û/¿ý>ˆ‰†ÿo–ôvÿ߈1‘lþwû;쪛”è8Æ]ÎM˜'ùÁ„Ì«ý}[ŸO0ÚzÚ-m•˜¦s¦L‘XL_¿"Á—¿ßŽjSBS:3’¦,´ëÏþ=úIE¸RΫÎcú4pÇ¡­«þhú>ow}Ñ—ù®iëÍ–EûS–_6a{)T²P¢¼Ñ Q„oòÍ–'2Úç‡ £‘9•½{q¨[Ðb⾨îÝ+P$Ë÷§6)Ü¢˜˜¶/²Ò>ˆÈ*O6[‘rSt <DÔ=Ô§rïÙ˜Ÿ¨‚ç•™AN}@³Aá-cp”UÜÉT4úcÃT”£`Sº7]c2¿y——õ†«èÑ=Žõ†ê!gž’rÂþ÷úÔV¦¥%ÑÑ<ãTAa^b ,Š}î6zk ÒŽ~ƒg%£» §Ñ©w›EïÈâcÝænUÎøòy`hü7¨4|vOEY:ŠS—Ÿ ÐŒí‚uý³ãe<~® K“wo¹«ÁÐ(Ãrü˜IAdÌý×ßæÜS¢´~—¹¿\ ¬5‘rä¼Á<Síç"¶BP§éÄØeYx¯YA¼9èΦ\¿Ã9žø#<Žšº¨zÐNÈ8zÌÝncúìÁ-a³žkÌ G%Jn)ó~w4íϹn*!t$íêA¾é|{ñUVuåÖÈ ’¨%(öE}\P²?…ŒsV\I… Ù´èœk„¥¸ö®‰]úˆ­\Tù…U} é\t¼ž®i2ds}%›£Šœ–γ¢M˜_¾.Hôœ¦DÒUé.¿‡¼÷‘º$ÙÛ˜HÅ®ÇÙ6 ´@ŽûüBÿ” 9”„Ý5Ab… Ç}5K¹†eqxz9óÞ™ÓÓð„¸7;¨3pÝö¯/¯‹'¿,^ÍÅcS &ýÈS)ÇÀuSO¢ðüX÷UÝç¤
+¿.éäE]è_qÉëzó’ÞmL{_:ð»Öi}… MéÅ¡AIo{ë›]Ài»üØôϯˆP}]0ã^2&¾»ºNॆϫ%+ºÎä£Ø§q®Dc¬—þý€YüšÁQf¥éºÝ£i«—WÐeìq‹EV®£r1o—Å}Uc®WE¬ôðzŽòS úôlÐ\ /¥þ4£âUhf•’¥Ô4¯¦CûñâÐCO€?m^š§9–Ú:X±T
+n+O'àƒøNqðOrárž@©6Ò^9
+ýÈ÷Â94Aþq.áL|ea3¬ß/<*îNMÞvY[4=èÔnXå§éúç2«ÂP%)
+-‹—uŸ+èòsýèL¨PCl5]™Îcö¹L‡§iQË;>pÖãÑxÍüèýñ×:ŠpHgÓ‰§…°càå]^Àãâõ›a+ †Ëxœw#÷ÿ<Ø!¤dCdÑ÷" È0²z,u<F}ÿþ·]@胉
+òµ³ú'[ü³DÍÂx\jB•žÌÐòc“U "TLØY}ªúAŒÁi³3sè=5#©=í0+AR¢oç’5SIÑ™:f®Œ”Dˆq*Ýì*á9Y ã_¿a`(‡û"³_@Ö›ƒìÔ¶ö.؇º,¡]iíy‘Ù_ó¬cT,U#–€T|õ¸Ià´ÄÁw,–¸ÿM®ˆÇendstream
+endobj
+919 0 obj <<
+/Type /Page
+/Contents 920 0 R
+/Resources 918 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 913 0 R
+>> endobj
+921 0 obj <<
+/D [919 0 R /XYZ 144.727 740.998 null]
+>> endobj
+246 0 obj <<
+/D [919 0 R /XYZ 144.727 258.796 null]
+>> endobj
+918 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+924 0 obj <<
+/Length 1895
+/Filter /FlateDecode
+>>
+stream
+xÚµY[o£F~ß_‘—JDÚLؾ8½¤7µ}h¢VêöÛc›.ÄeÓ´êï¹ lã¨ÕJ;WÎý|çL,¯\ø'¯¤R"ô«P¹"Ž£«Õþ{µ…£¯ßH{Å|¡Có‰ÃßDèèD¤c¼òùý›Oïà~,bí_Ýoèæýú7çÇ¢1ï®á¦rš]Z_ßx:tʪX™u[^¶µ©¯¿ÿ(=é*û–Ì{é«Û‡Ecö¥½9à¸BEÒÞl
+&º+²5ϲ´nxVlìAÛ슊竢Í+Þ¦Û4Éj×gY²¼AÞW72t…0‘"†ÙUÒ¤E.@Ué¢Ö×Ò!Åa•d5
+¥âg4C!£h )é¹Ê›äTWí /‡ºÙU±ß·yºJÃKÓ<“óâ`í¥scçžAò$[c•
+b¡Ô‘RÍ”[Dz³…cmï"OßóŸ¾Ë“¥Y%`\`p Áxn®eàüY&y å»à²SIü@¸ñÈn··_,ÈÏÓ¢tv{L³Œé6UºÝšÊ2ɳ'»½³VñBO¸@­¢ékÿ3«¶!½Àå¨Â±­ìäÚ œG{:tB'œK*îÑ
+˜@Ò¡¸ÀDJ­*G …Æ‹~(<9P83Í 3È06O,øÓt_w,‚ó,îÅÅ_‹SËB:Ïõ`TB[Ò¿\G.yÒþ1­w8 (\qçCΦáÝ]¿PÎ>ÉÑ°O¼â­ù^RY‚iÎ3–6'¨ÍB 0q3ò¾U¶UYÔi–èT\¡"±R£L cC`a¦=“•º‹®$_O«Q¨‡®jýÍ-Šèàa“SBz#‰¾1Ÿ®ë<Ò(¤®ÓmÎ{ѦIÖ¢ž¸fHƒKd
+ÜIóÆTdµÆ¬y«( Ø NôÀNei’*Í·¼ó˜†ç§Êy¡Jûó2p&<Xâ-ëç Ð)’¢2¡<J8ÛÍ.A8]ˆ™UU¼Å¹v*º»ÆÆŠv:ÃäO¸H;ê ò0Ãp†Âeè;· öx@^­kËh•™„,Š Á¡-9ß—O<š} fQ`™äÝ6f)MÑÀxÀ©NÄà=E±ï‚’u›5ät0šÁgèCß'­NÜ"ˆ¼9•”bïà ï2lû Ä›«(Îïp\VÉÊܬM¶O–Â> ½L^[)ÙÈxdéäí~ ¸ËÑ­"á+=R¶2%¨iòÞtìÅàðétÁ³ˆì\”:ï>¢(±fÛxëù|·(JJC"Ql‹å23s‘8<Ïhm6ÖyÀèoâÑu0ÒYP3ì>™Ë<šÍü‹ŸzælQdn­ÚË0,H—‹ϨJ'øò2ÍÐ=OÓ`˱N0Û{UqFöeS/0ï1ÙNË ï IAÜ—Á¹0U¹ ˆ>
+ç”ÖöÃÙ¤6Ì“ âù{×õ²”L]?‹]éUÐÆtAyÞ¨"àUe{šPE
+¹3è™|=NÏÌ»B{!7WzÔçЋ û¡pÚ¡pÑžôZG}¢øÉ‹ÁÞ-ªu÷ÊÀ=þ«¡Ȭç>"¢ÿ›¢‹±iY|4¾©m#õªJËÙ!éOzŒ°ÐPÿpÈúãòš‡‘º˜ãíÝÏc´"€¬)k-f\ªv0_Ð÷ë‹Ò8үДÞPC*
+endobj
+923 0 obj <<
+/Type /Page
+/Contents 924 0 R
+/Resources 922 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 913 0 R
+>> endobj
+925 0 obj <<
+/D [923 0 R /XYZ 144.727 740.998 null]
+>> endobj
+922 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+928 0 obj <<
+/Length 2050
+/Filter /FlateDecode
+>>
+stream
+xÚ­YKÛ6¾çW,`,`1Ë—^íÅ)Úí!—nOM´M{…êU=v“ûß;CRZÉ’cyQˆ)j43œùæÅewþ±;&% xpHJ¢(¼Û¥ïèÝ^ýòŽ9á âÖ/× I BXHúÒüøðî»ðO"øÿá`Hö.‹¼Õ_¿Á[ï.$‘ïã[æ?bŽäå ÞýüÐI „†ânÍA?Îû*üß¿Ý‘B
+
+ö¼ö,=mÛ³|fBnTS?æåf—7Y}®wŸË¹I¢õÈ»ˆ¾€‡Ç¸Z­¹G—O+æ-uYÅyf7òCgÅî3Ÿß÷zÊ}øc“¥#ìñ‡ !¡Ñ܉©µ]dMºÕe'ÊüÚ“®ØÒǵý-Ê|§«JW¤“Ô¹}Í'¤®™ ‘ Z øW0€Úïõadá;­Ö̼Vû'•íô‚¢L÷iùv›è1ÖÖê= ^EãaÌŸ…]ž$j›—ª7mŠRW¨«ãbÀó-ÀøˆpÈËT¡ „X*û3P€¬Ö‚Ê姼ÖömýØ’?»œ™¦z«Z'_ížÎö-¹£*T©Ž¥*Ûý¦²«­F5ŽMöŸ}xÞ©¦ÒxZÐ\O"Ï3ú>;X噫ª)Š¼¬'@ì Ü10¿+ã¢Vû=سc™Ñ€x‘ï¾XWõ×DpgGLPÈ‹ˆ| ™5¤ÞR%UnWÖP’úÖ¸eNúÅᮩMâ6††ýBÛ@æ¾Ù½ö‚!T¯]¶E¢vNBœUñÞqiÙ*§7@BÊÚÇ2oŠì9¹ ÔR«*ϪaÔ‚µVÜsYöe„ûàÔ4íÌ3â)?6GPD„Ë x|¿Zû!èVÆÇ8S 8Ò÷–ày¶çGB—7pmN¿“€3ËÊ>Ç™ýÕj÷hWÜÚ­g4“r_Tu^ê}÷õ3S2Yë´Pù‘P
+/ð®8]6 ó I¼°²Ž/ò
+åã†?‹–unŸûÆg<þæMÙt°¼M‹4ßÇŸ)å-kq°HµÊÀ/ÖûNÙþÙ¦’?£$ˆúÙhÎÙ]`ˆ€øa4ñ`£ß[&ªªíJµ‡€õ>ÏÜûØí8“‰æAe³ƒ1²<N8‘E <Ñ?BWõ.OÓ‰cø!¡]Ôo•upÏ;uœx@äÚž’‡h¢¡%/¹¶ÂeçeÑÂÁ> [Àv—qÇõσê']õ ÛêÜPýΊ
+VÀšÆR¸à qºŸ*º–Ù0yQ+5KåŒÐ /rý?GvÆ/šÁo«!Y˜d5“-§t‚­O¤×g{(ó¬†êWëòÕ@hc$xzÒSò,›3yl†¼¶¯(¬éOŸ©Gq¼Fÿ몀L^-8î6Yõw\
+þöÂ|„]¼c6 „Ó¢þúMÈz3ïÛ¬t ³FªlÂ1óÊøj°Çò-
+endobj
+927 0 obj <<
+/Type /Page
+/Contents 928 0 R
+/Resources 926 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 913 0 R
+>> endobj
+929 0 obj <<
+/D [927 0 R /XYZ 144.727 740.998 null]
+>> endobj
+926 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+932 0 obj <<
+/Length 1695
+/Filter /FlateDecode
+>>
+stream
+xÚ­YmkãFþž_a2Ô[íûê à.å
+½/M¡ÐëÅZÇjËÈrs¹ÿÞYíJ^ÙëhÝ+gi_ffgfçyFÁ“þá f I"'’¥(ËÔdñx•N`ê§+ì–PN‘ ž“3Ê’TÁCJdfÍwWßßÂ2øÿnÙ.½+þH0!túçÝÏ0Ë'
+eB˜YÌ‘È°[òn:Ã*M“Ϙ²|»-ôÒ<Íon›¯Ë]³É‹¹¹WÛú忾¾s"=…3's†áT<딳å”_ ’GŠ46?èfž/—å:Zº—..³WŽI´²®>Üõ!NQªèd& Q¸ôsàø·Ï Œ¢\ØŒ±Ùàé벡 ±qÇ|[ëÞ4óÝ¢.·Í±þ´c] e
+ûŠØ$EÔWt³™Îhš%ùºÌwæQ%Õ²÷C¿œIxbžq6Çz×b¤u ¿„&ͪÜY-ÛºZèb_kûÚ C2Oq².uaß›êÔŒ3”2é™pHü+AŠ·öi¥Ý!—Uý˜7M¹y°'mVÚì̈ÄH¦ÂD‚·Ûòå”ðäsšpMSVclÆ“ý¦Ðõ©}’ ŒtÚí·º¶Ë‹"¸;µ§ñ¬;šÎ$ãÉÇÆ*)ÅKš}½±#à#pÐîT±¢{ÙIÞòe¨Va$ú
+R"ºÚc–Ë/QÚwxî›Ånòà× Nø0Дĸo¨›ƒÜæùåš¼¾œ‘n71
+Η ,al˜º˜h€“¢©‹¯¾`®þ_jʳˆÌõÙËà¦Z`(±X‚Âá kÅàO
+öa5Äí
+Ó¸ùendstream
+endobj
+931 0 obj <<
+/Type /Page
+/Contents 932 0 R
+/Resources 930 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 913 0 R
+>> endobj
+933 0 obj <<
+/D [931 0 R /XYZ 144.727 740.998 null]
+>> endobj
+930 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F102 750 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+936 0 obj <<
+/Length 1210
+/Filter /FlateDecode
+>>
+stream
+xÚµXI£F½÷¯°ddKíJµ"‘(‹’CNÎ)ÉÆå6Š ðLgÿ=µ
+endobj
+935 0 obj <<
+/Type /Page
+/Contents 936 0 R
+/Resources 934 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 938 0 R
+>> endobj
+937 0 obj <<
+/D [935 0 R /XYZ 144.727 740.998 null]
+>> endobj
+934 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+941 0 obj <<
+/Length 2437
+/Filter /FlateDecode
+>>
+stream
+xÚ­Y[Û¸~ϯ X@b.II”˜—õ4M¶Ó‡ÝÅbÑôA#Ó¶[ruÉdv0ÿ½çðP²dɱRŒ)’:÷ËGJÜpø7"X$£›(àLëø&=¼â7[Xúù•p[üÐg*
+`<±¸ôØE~ ƒ€ÅJãž¿Ü¿úñ¼ ˜†ÿ÷»õ~ý/Oø\/þ}ÿwX ob¦•ÂU)„ÛòòüƒÛÑ{é¶,jGKð ZŠaKë“ðƒU¶ùúŒƒ?W¯ÅËó‹'ÇãÚlKA[js8&ÏÏ°þò2Ɉžqs¸'›M¶_KS™¼^Ui™ëÙä5[Í7•?&%B¦ô7I¹g¤‚+¤¬ÞDzø’­ Ù ©wE¹:&%Z¼úœCpØ2Žý ä|bÌ™‚˜D³„2$Æ’i&
+æ:ñµ¡ÐZ3úŽL­î~ÁÞnjS”]xtoCý´ž#ˆ`&¸+Á|:opÃÍ2ã‰$õÎ,–¾= –šuSÚÇ
+gêÂýÚèî¨à“sqŽ"¾FOYšCŸÒûƽ3V¼£JÇâ¿+ö{ WÚ½m%¶|±œf{hyû'z:‚à ˆ+Ó=ÊEzaM,îm8[
+§”ÆÇCƒîÄ‘É«n¶Þ!Ÿºm
+È  )“m™wíÆvWV·å?)kÇkkÚ‘AÇÒí’ƒožÊ |Þy¡YpLYߦ®k—áŒv `dª,b?8•gªÍÏóµšPÌâiPô¯¡’hLÖ˜ìSÝ›zÐù þtxk8½ºÄž¨žq¯sw— Yææ²Ñ³•¼ýðëª8Bº+
+endobj
+940 0 obj <<
+/Type /Page
+/Contents 941 0 R
+/Resources 939 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 938 0 R
+>> endobj
+942 0 obj <<
+/D [940 0 R /XYZ 144.727 740.998 null]
+>> endobj
+250 0 obj <<
+/D [940 0 R /XYZ 144.727 635.383 null]
+>> endobj
+939 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R /F102 750 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+945 0 obj <<
+/Length 1331
+/Filter /FlateDecode
+>>
+stream
+xÚµXÝo£8ï_iU)‘ÎÛ@¥•èv·§½‡½Óªût½L‚Ž˜HÓÝ(ÿû?H!!Å­zªRü93ž™ßÌØx„à0!Žïú#Ÿ ' ƒÑ|uF ˜úý›%õæh÷LN=8¾@ƒ8 åšO÷¿ÝÁæ„ðÿ>UKï“¿ÇØsÃÉ?÷À,NȘœu±ƒ|l–<`Ìø"‹²Ø¬Íâ©©Y=Å / Y’õ°xm² Oåçæ.ªùj½û€÷—“iˆ×!4FŸ°×ÃÑ:âˆ-8*FsQDzó+²¦íZÐÎy­Nó#*Ö¥–_ö7Ž™ ž¨¡·ͳgûçû³'¯²%°ß)]Çišå_?GóÉ‹¨[Æîcÿ¡¨¹onn£<«êÕÖzŠ*†Å®_â„„¨-_ÓÉÔ¥h,
+ý7õ²(+ÝÙT
+¡gZ®t»ú7[ëVV;}BB
+endobj
+944 0 obj <<
+/Type /Page
+/Contents 945 0 R
+/Resources 943 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 938 0 R
+>> endobj
+946 0 obj <<
+/D [944 0 R /XYZ 144.727 740.998 null]
+>> endobj
+943 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+949 0 obj <<
+/Length 1934
+/Filter /FlateDecode
+>>
+stream
+xÚÅYmoãÆþ~¿B€pD›}åî@NrW\¦ýàzý@K+K0Eª$ûjø¿wö…IQ&} p¤v‡óº³ó̘Ì0ü#3Â9’TÎ$ÇHk5[ÞáÙ=lýå $L0Kï›K&’LÁ G*Ö–æ§Ûw?|‚b¤áÿÛ­#½Ýü;"LÒÅnÿ
+»b¦Žc»ËRŒ’/„ñcRªe [PTèš»äG ²ÍÏd›û"?˜ÚS~É”ëšé{˵<$iZ>ì‡Øê[1Âöå½%x÷ñ¶ñ.FX±Ù€i»ÿÏ~6áW18Pú³áãÞ²·‚°J¶Û}úù—Õ:?eUßÐ6›1YKBÀ«bºÄCR­wW$žyõÅq¤iÆgÄ°¶˜ÛY,‰ÆÑ:Ϫ"OýÒü÷d²uØÊ’ƒißp X#&uKÝ›O«üx>ø %g_q Ü—žé1MÖfãß÷™Vµ2É©ÚåÅÉvAEôcšî“jA¢}(Ó}Yù·/XàåxŒˆh»òææç•ûêB=¡‘”µzÀŽX{-h„9i‚ew·y±XR#“@<Ü›•Ÿ«ç£ûÖ-v­¿÷ëûÊ~Æ5˜
+ Ó†åÒ?÷Ux+…¨èþt0Y…œŠÌyGAN*âs8ís8í¯+á$a¦„“#¦y+œ–i’…'–òmXòc‘CÀOEТÊkEm2ù¥Zùìt¸3…‘1Q‡!vB-gÆX8&eøQ…§}ðèÞëÙßDD&ó«g…÷·Ý¹rŽE²ã•Ë[ ë¥Q³öirZÙƒcŸÖlû<¦4YåeÛ£mmwz÷•>›éüA)…´‹;QÖ!FÔ«·É€æ¼¥9Z,9aöL•60
+}\åþGÐÒÿN\hè½ qôä,XŸ*›ävõqgí±„E BµÏîýïS¶1E°8šKMá&£“]94›d³ùå€1ÿî:¶Äë4)CåGr4Pñ4AÔ¥;`ÝT¼x¤âYÇnÌöòdÌ!ð$šÓ9{~?¹¾Ê,#.†¤UæpÜoŸžçìeH@øÎ Pµ
+ÑÊÅdÉ|4œ’J|Cι;­Î¹é§â èû"ã†Ïæ Wr‚€é×Q'µR:’×íêè¢îKÒÄÆEéË&˜PóÒø÷›pŸ[®åÝšŒY0Ý
+ðÜ9¥_?
+ñó}‹+îSã·¼ž¬Óþ\W’ho£Þÿ­.UT-ìõvÓ@t–»Ó:µKØ àQuzIßÄÕ=œdù2?ú -%´]ñ`b=Z'È8Ú% ŠÃÑö+kple¶–Â:É©B0í5èM£ök£¬„þZ(g`aLüY¤—öÀåÃ
+Ð]Ú¦Ž´öÌ-¡EŸ>ÿëoaíCPÓ…^NecJ¹ÛAÍaŸ••I6߇nN€~«í¯ùÉ»í!Ë]Ÿ½ˆE4„àx’÷
+ùÊŽÕW;E¬íüù¸R¸
+ «ŠˆÍ+”A/:@ß9XÝbúWéYƒendstream
+endobj
+948 0 obj <<
+/Type /Page
+/Contents 949 0 R
+/Resources 947 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 938 0 R
+>> endobj
+950 0 obj <<
+/D [948 0 R /XYZ 144.727 740.998 null]
+>> endobj
+947 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F102 750 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+953 0 obj <<
+/Length 1393
+/Filter /FlateDecode
+>>
+stream
+xÚµXYoã6~ϯ0˜%ERGŸ”]ìm±‹Ö}(Ú>(m ±EA¢× ÿ÷ò’"ËrL X<†3Ã9¾!‰&PþÐB?œ„‚8Ž&‹í œ¬äÔ¯7È’`ŠAÙ˜œaG²A@ÄŠæÃüæçÏrA
+¯HÁ*rP:]*uÓ,«X];sŽÏ9ãø/êhN!ø2#­aö#-L5Á¶å¢©êl•m“‚¹ŠBç¢ü
+dPÒnHö¿mˆ"Ë L
+AH”{ ªÙmòZLÕŒ·H7›¼X™Î°ÊÒƒ$ê˜$ãÆ{çËÝùQlIל?¶ÚàòËÒÅÚ´,J=0”Â>*±mC; CÆ–Cñ¥bK›ûÝúg@BäJ
+*Y++sÁ·Û4©ËtÁ͸’;4'Ø¢–ίêE•—âp§ïŽÇ MTk<u¸EÇí?
+0þ‘.)ÔΙ³°p4:ÍLòÏb$½ :E’2]ÀIº©–¡Ã³Ý‚õåv¹¼¾Mcß»Ÿè}ü~g’áqŠdn¨ì}Ú«&¯²Ú¦I‘™F–
+V¥
+0 ýD‰F$Jw¯·è ÜæžUÕG
+‚£s¡!ðÍ
+ AoVhÈ«Ÿ äéóLuo}ƒa¼½ôbÕÀïó`O«/(B€D({U^¥Ž¾k6êÈLÖÆÈy󪫄-9öª /¦Óèb¯úE‚>‡¼Ob/ÏW~ÝxàBð­½°/{“"Û,ÓÓ7‘ ’JÒK©¤òÑDZ×1Œèh$»ë΋…y`¬0­ŠeyÅ‚e¦¯µWßuCš?lr¾ªÒr=U[¨§nRÄ—$¹°Ï7›†±ù¦æSð/þ³“ ˜‡‘Š-Á/ço (†Ï7 R—ÆÁ§NŠe–´¯7—9jªØ$܈GŽ~ô©ÀÓØO÷ºOˆCÝß0¡A~þá«zëšC©ðùËI:Á u›|þò5ÑW®\®« H7Ým5bTGc‹®dÎBÇ?e@ 2p
+P|vòŒä:"Þÿ–é Uendstream
+endobj
+952 0 obj <<
+/Type /Page
+/Contents 953 0 R
+/Resources 951 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 938 0 R
+>> endobj
+954 0 obj <<
+/D [952 0 R /XYZ 144.727 740.998 null]
+>> endobj
+951 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+957 0 obj <<
+/Length 1694
+/Filter /FlateDecode
+>>
+stream
+xÚµY_kã8倫6:˲d›{ñÜÞ±pp”¾ÝÞƒë(·Žl¥ÝòÝoF’S;q%K)Ô²<š‘fæ7:ñáNh’(ˆ&Qè“$‰'ùêÆŸ<§?o¨%aœ…0ù8c<&‹a’X$HóûýÍ/_` ü¿_hÒûù¿‹§ÿÝ…¯|“DüJ9 µ$ß( çru#[Y©ôËß颮U5Q¯Vò–Þ»O–MOÈÌò™Q8 O:É©À€?ê |EõØÔ›õ[K=dËý¶‚„¼Ï6o«l%§3áû^žâLºZ/*Èjž·x ¤¸¥8ÕÈ2û1&ß°=’Oä[=¦j)Õ*kžvø
+o«5Š^TûOÎòy‹¦®Ô*SJ6Æb`-…’äµ» .ÆŒ*¼Ìdá×ÛŸuª¸cÅݽøX)Úè ˜tÝÔóM.S8¾»»4N¹ùãþ€RŸø1C61 CÖÇññó€kØ: aPoÝ“ç¿avtµºÆ3jëïcÀôXdH’˜öå…“ä±¾¼û%à)ˆ"¯¨ð{ª›P…*íð¡¬ó§Ï0Žùë÷Î!Í[»]=Ô¥añÍçþ¦•óŽ®1ƒ¬„U™Y{Ùbp õƒ)õÊ"SEm·Uvi»©æÍØQ»ÇÖìÕ;ÏŒR°©8h1]TvSˆE@Y èíq˜êGYã¶^d“g­´SM1 }ï³%mÍ`ë2Wú¬0ñ°ðz¨ëRfqDÆ´W89À ºè$:˜‹ìÜq;Ä°[¶X¥QCھ託f(±\/÷»¶÷:P•s0I.ÆàÌø÷LÄ„»b0H¥—bp•=a¼ÇóBÌ?`ŸçO@y`Ù)Eç¡Þ¦Tf‚Z.ç›F“˜¸žRbͬê8ô1x˜¡ÌüK¡–à}â×#N9÷ÈtÆ
+,LÚ+cŒì^õ‚1¯>8­9
+N†ƒ=M±ä=>ñ1çØï‡êŠ‘œõü
+Ù›h\4%vÚБ?‚ 0l²{ó0°—@Ù.ëMiÇÒPÛZg¶æ¹ª[eFßA[ÓÀ÷:ÏãœÐ ”iCÿæ¡UÛRŽéCôôûy_ åÈ¥ob.ä$Žb»ÔZ„™s²c ϵ¯à÷­ù®ºÝ}7.2–Ih:üçv].Ñ&ÆFMŸè’*4
+*¤F®êgYf­jŸ
+ç̈È]v$.¼Û=ØZ ÊµŒ¢3rÌ=8TèÎã¸'Ž’Ÿ¾'îXÅ\¼Fâݯ¦7¹@½äW•× v‰_Ç.wi±Håj­¶»[ºßíwgoü»®1Á)£$fGÜŸWõ\ꨔٳԯûú!Îm*„ÓP›øV<VÐç´ë ØÈå8:ƒØ6V¯ÐvÁÅ™ŠÅü¶0(õbXGãa©÷?4Eíendstream
+endobj
+956 0 obj <<
+/Type /Page
+/Contents 957 0 R
+/Resources 955 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 938 0 R
+>> endobj
+958 0 obj <<
+/D [956 0 R /XYZ 144.727 740.998 null]
+>> endobj
+955 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+961 0 obj <<
+/Length 1637
+/Filter /FlateDecode
+>>
+stream
+xÚÕYÝo›HÏ_a©ªKÇÞ.°Àöɽ¶wRŸ¢6oדŽ
+„,‹ Y’(9¡¾‡z%aØ<$ª:¦eÔ¯Öt$ÛZ™hç\ˆiˆûŒ¸âdÄ/Ëët¡8ëu–_Õå¾ Þ¥<u&ŽPÇhWî Ó.×ú»©¢Ø¬é`ƒ¡PXQa¦ÖK‡[ˆYž;Áa}
+/¸–áy½Ô6ÕÆ
+å®o}ì&d\\íec¶¡áÙÊúª¢ùEwZq#Ý­÷…™¡<//àž£nZ!ë_Cš´ŠjpëD;ê¥ #q¹ÛE¦®+’¶,@fíâãù‡wÆÏ•Üê.îQ×—AE9•7iZ´On }?.µªaV3µðgV{ÀIÙØ•¶©»éwŒà‰—\d¶ÊÖ›]™hoj¶YµÂF5R%Àþ¾h­*… !o±sY§Ñ›vZQ¸¿›þF,Â'„|»´}
+¸EÍ;ÝB6×ÈÇ&<ý>™8ù-º »‚7ä/ø4Y/|´ê(–Ú§<M>úÕÚõIR”3AŒZÅØGÅÐ èÏ«®vôî2âÄÆ#ó¯l7í.t>‰ÚÒ™qVùP%\æe¼äœÎ¼#p¨,¥5£±;N¸ÉD•Ó™WADLåê¿Ç´Ž
+endobj
+960 0 obj <<
+/Type /Page
+/Contents 961 0 R
+/Resources 959 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 963 0 R
+>> endobj
+962 0 obj <<
+/D [960 0 R /XYZ 144.727 740.998 null]
+>> endobj
+959 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+966 0 obj <<
+/Length 1441
+/Filter /FlateDecode
+>>
+stream
+xÚX[‹ã6~Ÿ_XœR«–dùÒ§°t§tiaòPèöA±•ÄÔ±íìÎæ¿ïÑÅŽ’¸kÈ]ÎwÎÑ‘¾OÆ‹
+ö©mÿ7±]âÀãDz_ú„žQ­®)Ms[·º¡ü&.±·héS0ð¹>¶/;=ö½(Kݪ—˜yßähÛ"7kû}af6m‰üØ‚ˆLù¡~ÁGŸ¡
+>†ÌK¯Á]Ì‚ØL´’…ŠRle,ÛëÄtÇÒÇÞJšþåõqD³B2ã…O
+’Ôò¦\u"SòäÆŸ¤% ymIÐ~! è˜=ï‡ÖDÔ šYdÁü/Hƒêê¡Ó3^éÆFîR’x²¶n@H´ï…Ð ÒóÀ¥¼èE†¤1œÐ Tb©-×Þ­nÂÁêBIi–ËýðµJ ¢ ¾8/2ѽ%A¥– CÅ;0\#KSœ·ùGj‚ÞìillÄâoëc3%‚ôì+³ôîýëGpœô=› „•‹¦ßûZš=+Þ,àÀÌd‚ÀH„Bf"žr|Û‹vªˆle§V^A07ˆŸïYîs¹Y>=Îöy‚¾RرÀ>³YWñ\Óò×ÜÛºkÅ,¾BIî LÞñÓ¦Ò©(Eoß|v[±‹}ÞI fài«’¯fçžâg œv:YôžO§ÔAVÚ$s²™Þ±atÁœ”"jÈ „«¦Íuþ2Á¶À|$Ddð˜ÍÌÏêcu~,×ûñ«AYÖK¼ï#7›çc!Oøð.l‡
+òê¯7|3¼5‹¨¹È¸ù” ÕšÖëÎ,)ª©‡s|6ÔxVò®ƒ«=63ÄjÙå'ê »ÕÛZ*ûBi "¥hdz½çš["Œp¼å›"S"_u¾¾ i¿‡iôž5`vC=‰u/tâùÁÆîÁšhËfR°ªïu>¤ƒ2oV¢Æ—ÛÙ©Mß•ÚÑÊ«C …Á;²ª!ÛúÀUÍžLïüĆØ=±Vf%*tk꺞ì/pÇDÆöÄ·Nc”(1úÖ×N][Å ¬»þ€ú…ù¨|endstream
+endobj
+965 0 obj <<
+/Type /Page
+/Contents 966 0 R
+/Resources 964 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 963 0 R
+>> endobj
+967 0 obj <<
+/D [965 0 R /XYZ 144.727 740.998 null]
+>> endobj
+254 0 obj <<
+/D [965 0 R /XYZ 144.727 497.869 null]
+>> endobj
+258 0 obj <<
+/D [965 0 R /XYZ 144.727 279.017 null]
+>> endobj
+262 0 obj <<
+/D [965 0 R /XYZ 144.727 249.235 null]
+>> endobj
+964 0 obj <<
+/Font << /F75 558 0 R /F74 556 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+970 0 obj <<
+/Length 1278
+/Filter /FlateDecode
+>>
+stream
+xÚµXÛnã6}ÏW(‚Ê@ÍŠ”xÑ’¶iÑböÁv÷–i[ˆ,©Mjäß;)[I„˜r²bñ:gæpf8ž„ð‡'8Ž'|Âã%‰˜¤Û‹p²†©ß/°[Ñ1C{`rQx$ #Á³æçùÅ¿Á†ø¯Ú¥óå§
+ä%IÏ×V9¸‡q¸U-S•ÅK6gÝ®¾m@ËKñ˜#Æx?†¹
+¼†3ÚlÊZÛƒÃ1C1çÎ8fU5kÕ ø¦(d1ì‹ ¼¹‹ozÄw£tZîLâØë²²‘ÞÆ÷žx§0ˆÿ벬:ò÷(ñ‡ ãlY”Z—[w1‚I{ì5âö·8G‹ Ü«â±'¤enΨ­0À¨ÈjÄoîУI#ˆq«?EcÑ8à㸃ð·~ðˆÓ.:¬w´Å9Û#’QHOXlK'qås;Gîvþ˜5.ÉÜÓYVO±Êb eEóJÊ<+º’‚ù¤œB}Uˆ·¢÷wP(›r.}ib‡@î¤}(HÍÃüÿd~®l”Ö(nó3⃼í‡U:]"ŽH_¦)ñU™æWÓ3Å“Ί¥}½Ðv
+ ª¶"PUÁ‚Ãdo“{©¡~¦`|ZÁ:[oôVÖ묰L¯LÏ(æFäòN©êM„UªUø±SíÓ—K_½Ne0ÿéš d*‚QÈûFÂk„átè`íÒgúJH—§
+s܉ãÃèß\]
+CEò œœ‡§}hÀ_[×ðtŽýâÈÊï¶W͈€àäq F€‡¸>öûÑ}Uå»Æ¾ÑŸ<z{tdÅ9::Iì¼à{Çpþ-Cxv¦Ö‘À‚×}c5y?çáû;‡ÀïåbÄÇÂ¥jÒ:«L¾l?¬v¿Ã–‰‹›ùá{¥+t˜“3ðEsŒ¼¯…ýO™½ÏÚV¬}ÉXÀ>(Åž|&ýÓ,¥endstream
+endobj
+969 0 obj <<
+/Type /Page
+/Contents 970 0 R
+/Resources 968 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 963 0 R
+>> endobj
+971 0 obj <<
+/D [969 0 R /XYZ 144.727 740.998 null]
+>> endobj
+266 0 obj <<
+/D [969 0 R /XYZ 144.727 603.503 null]
+>> endobj
+270 0 obj <<
+/D [969 0 R /XYZ 144.727 407.862 null]
+>> endobj
+968 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+974 0 obj <<
+/Length 1331
+/Filter /FlateDecode
+>>
+stream
+xÚ­XKoã6¾çW(ŠJÅZ)Š¢nÙ.v‹öT´¾¥9È Ñ ’¼nkè¿ï I=ì¸5µˆ)q8ß7Ž†$+þÈŠ0æE4ZEÌ÷âX¬vÅ¿z†©_îˆ ÂÀãƒñ•Éu
+/
+ ˜'xŒ2?oî~ú ¸ÃÿÍ“ݤ Eà>n~ƒÙp%¼˜sœ¥Üc!1"‘€íÛ:ÙIåÉVæ­¬Ý5÷}5WVM‘¸kâäOUÙá›íS+›L¶Zæ;ò½A˜á¯ Äš€‘a<pa¯¹ÐãñÀ¥¿¦ÊHà/¥dPÞP¥¨Ë£,?gMU²ìN©lw Z’Õ]V•ýéÑΈó+N$žÍÑò¬íNוÙ ¥Ñk¥AäÑ3Žc–v{|ú÷~
+KÖÉBÙR¦`ÛZ ˧®Hšç¬¼BAkÖ ÄÀ@X0*æEò"|¸p¤zr4:¾áÉÞÚ±+›ì‹
+%ªCÙɦÕ*`¹lö2kôð÷Æ%±S¥…Ö^±8ô|Î
+ñ”e#…¨Ñâ%ÏMRïU#~¨XlªÆEPÀîF·¾dl™Ê'üéö3Q•VâœðÕì*Ÿ½.¹¶•d!_ºkFÏÁ‡üí­‰=p}?á
+ĵG¡Ë̳
+ ,|Ÿ×ûi-±1Xdã <c;9ŸÞÙc³Å–Ïðù
+endobj
+973 0 obj <<
+/Type /Page
+/Contents 974 0 R
+/Resources 972 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 963 0 R
+>> endobj
+975 0 obj <<
+/D [973 0 R /XYZ 144.727 740.998 null]
+>> endobj
+274 0 obj <<
+/D [973 0 R /XYZ 144.727 597.989 null]
+>> endobj
+278 0 obj <<
+/D [973 0 R /XYZ 144.727 575.87 null]
+>> endobj
+282 0 obj <<
+/D [973 0 R /XYZ 144.727 363.417 null]
+>> endobj
+972 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+978 0 obj <<
+/Length 1287
+/Filter /FlateDecode
+>>
+stream
+xÚµXKoã6¾çW5—I=.…[ô±-¶hæ¶Ù-Ѷ½ Ñézÿ÷E*–%b‹
+ÀÆ• îŠ"†è^aìý½$ØZ®|Ž½¿jYÊÆêag @
+¢~}+•U%¬  Ô¡6äª3™šñã’pO6¡²ÂÌl›ÊŽ¹ô¹÷¨¤–ùJͤ¨ÛU+ÐrE1÷~®dkæËJ™‘®ó,ÉT~4s©{­ÆÁ ºÊJµÒ.ôVsnÌξIãeUkû[ôäçS´Wá€Á2ŠbgO(KåVÿÔÊÎ&àí2½+1üè9>%(¢c|‘¦m-Ù1ùuØé l»ä
+;vÀ^‹­’MV¦²T[‘·ÒbtHœµŽN?hõèu/8ìÀ †¸o@¯ãó-ùrëwï\w€úÏøáð"JÙ¶<ýæ&kp
+ ÿÔ~¹
+0ñ~Ð󟔧IµíJ-}®¶o #­Ü¶JÖIu(aºãfÖ]á³y|È«¤èRµyVÊNUÉ©ƒ‚&º)œzoÕ^·7)Hdqº%îvð™ð¾%f]…°fÆ'푉^÷‚ååJ[8g¹»á‘CŽmä.+wM-ÕvªÀCäQÁmSÜ:Uq?õm}7b·Óá‘i“íöjª({@£8²ŠžWœéœÕ[
+Ï™W0]“ÚS—x®.'ûó)öI4;yáf{ë$+E!ï}h`ɨ„\ÓŽÑy
+1šGœOö)`‡³ö"ÕO„Œúˆ°À2~&d̲”H4)ë©°•€ÕÎP²HÐHMåô€Æp
+Q‚@
+ä ®zØûÑ
+O1²Ã¦UÇܲ²ÿ²<7£<3èižækšúYFÙd©•W`Ç^¶öé“žÙ?‡À¬FC}×$1éª÷É ˜þ^¸w¬æe"Jó*9´
+H+ñ s ‰ ª–ÙVM!”²(ý³‘æY7‘,9ä¢1ϹἽ¹™ÚÍŠÁòrg ‘h‡Þ?eÚˆÊýáçŒÛ‹r§Ùõz æÏr…@ãh¸=TÍspãqë½1p ÂÞÛ \ŸCë¦ø´Ï bá¡°{?¶F¸s¹`â@‚Zcü¢J[t¯‘ÙfÁ²ÿzùwÏù
+Ð@â5s¤tæØrÇ›9A:Œ¢¤8Ÿë:?´:éy¦ÐçfVZ3‡üá»ÅÍ/wOßÀì÷–ÀnåÄW2Âå
+endobj
+977 0 obj <<
+/Type /Page
+/Contents 978 0 R
+/Resources 976 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 963 0 R
+>> endobj
+979 0 obj <<
+/D [977 0 R /XYZ 144.727 740.998 null]
+>> endobj
+286 0 obj <<
+/D [977 0 R /XYZ 144.727 690.572 null]
+>> endobj
+290 0 obj <<
+/D [977 0 R /XYZ 144.727 258.422 null]
+>> endobj
+976 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+982 0 obj <<
+/Length 842
+/Filter /FlateDecode
+>>
+stream
+xÚí˜K‹Û0Çïù¹’ƒU½·¥Ð…^J ‡¶ÅQ6†µõƒ† ýî•bËëdM­d³mea­H£ÿŒåùid£)´hŠ(‹© (%§q:Ó[;ô~‚ZÂà‚ÚöÀ`D˜‚HÛ @rålÞ,&¯ßÙ (û±>˜.V_gˆs>ÿ¾øhGÙTŹ%`ÔZì!`qúóUkÕÓˆ³Ù8™òrbDî"4Ë‹Tß­ó¬r¿JÛ¾så<B³uiŠÄ”áåS‡ˆ®¼ÇA¥ÖÂ]õJjDÉŸ2ëCÌõ²4q•äÙþ·òýH|ª9 ¬¯SVº¨Zíåv‰2YôÇpƒ×UàM.Erâá&\Žè§óˆCØ,éö®.‘ÙõzÒÄ¥ZV—MÀfîyáEz5þ‡yâÙ¼ /%Ïæ fºåQ/ÅŒ„ÌœC‘„Káëb#ÉßÄFÒk`Ó©±Ë±9ÜDUnôÖ„ûãÔH2UÖ€4) ·•Ü% ì‘"€f#€v?×Y’Í#ÌàìƒÑ«r  §VI
+È)a’­LVïðêÊ«1Œ#dÂARôlš_¥£(y0¢Î¤I±kÙ?«]@ƒ/Eƒ’ãè Æc¡R«ÑÉŽ–H€ÙQÝyZ‰\ò¥ÉE•H@|E€$W
+endobj
+981 0 obj <<
+/Type /Page
+/Contents 982 0 R
+/Resources 980 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 963 0 R
+>> endobj
+983 0 obj <<
+/D [981 0 R /XYZ 144.727 740.998 null]
+>> endobj
+294 0 obj <<
+/D [981 0 R /XYZ 144.727 461.432 null]
+>> endobj
+298 0 obj <<
+/D [981 0 R /XYZ 144.727 235.529 null]
+>> endobj
+980 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+986 0 obj <<
+/Length 1450
+/Filter /FlateDecode
+>>
+stream
+xÚÍXÁŽÛ6½ïW¸‚ÊË"%Q(
+lÚ&A‹¢-P=4=Ðm©‘HC¢×Ùþ÷EÊ–me—»¹>˜"©÷f†3ÃáI?<Á”¢4J') Q–±É²¾ 'kXzƒÝ”¤Æ#‹³~uF(bIfö|?¿yýŽ‘ Æ(‹ãÉ|ÕíçöNg8 Ã`>Mip¿ÓY‡Áå¿bö£Ø™ ©ÝœÐº”ëvú÷üç×ï€"CYB,Ü 3”°óW¥ I]pmG5—S÷öiÃ^ -šöLÐ0à­]؉ª²#;Ã
+ýÕQŒD¥mc&àÂàž¶Žš†Ùñ ˆ›tÚÅ ùÐöû—#Àî py=sÐ8¼†Ž0
+Ó!´ø´á2ç+p[óXÊÍV»yˆ  _Û›¹Û*¥î<o–@lmºívÑêûJÜŠOú0&œã¼?¢wuà#4^Š(£}°§.ØßtqöÿÝööíç‘B“^°Èã@à|—
+" ÓŠ¥ÜÖ¹èÌ¥‹Ãž: ²í©ˆUUJÑ~,7Öäx£½Ÿz Ûdò|ŽØƒòŽù[ðVtDºë{c/|xém¬Äƒê¶R;Hî¼Ò“1ebì­KêCP‹üDk=ù0åº8R˜ó€Ìäm$Ÿlr»kˆsÞœ±Ìº%s(z*…>´péI»ãù"VìÃZjQ9Iø Ρ#ŸìÀ›†ß/\p.¢ˆDE>9AóÅ>z<õ•¿ÙVbW溰ˆ>Ä++¨í¢†ÅW³sðÉ&¥Ù Ý¬”‚"¯µ<ßٿЦloJŸü°Z¨O>]npD…O0ó¤1¦;×çtFã—&³,&ý¥ÉÜ¥ù®\o›©©Èº+òæíüTuS”1S|' bY4,Ìÿoÿ§F.s0fx솆섕ÑY\ª;|õ×Zb€zÖ'XÔ?§,4µ ¡ŠíaI÷dêý«R;†šGWc“ E¬/]¡¼„‚þ®l”¬¡;fYð ‡:Ä,@MÓnXÒ]iÊ!3*TÓºIÞ@Ý’÷Lt›Q©[;8ö#ݬ´¥q–¡0;ïT“gW\ieÿùr©j•ƒ0ת2p·(:p¥¸noÛݵÆ`–ôXÚ£±°¡Ð”%ñyùÜ|Rì„<šoßÙÜä
+Ó¸ˆü[²:½ëðô¶‘ýËÅ §µƒ¶­.Mv9òkrIì瀕k]t%ÈBÝYST²ëN|Ý0y*ÛB@%ø\¶Ô¯_|X·=ÍÒæÖ?ØØSyÇ´ÜG´Ã*ˆøäYã|ƒÎo†Y¾À/"ÿÏtì3F‚h<d„Æbì˃Ýv÷XÛðÒ–S¶=^4‚ô5òõ®/KO~ðYW€x°t=Þ.ûGaû«ŽdW‚#ge¾˜AS¯x]V÷—yÎ|3¥)"„Œe:èP¡MÉu ¾DÅ Þ»LŸÿe·‘Þendstream
+endobj
+985 0 obj <<
+/Type /Page
+/Contents 986 0 R
+/Resources 984 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 988 0 R
+>> endobj
+987 0 obj <<
+/D [985 0 R /XYZ 144.727 740.998 null]
+>> endobj
+302 0 obj <<
+/D [985 0 R /XYZ 144.727 716.092 null]
+>> endobj
+306 0 obj <<
+/D [985 0 R /XYZ 144.727 612.189 null]
+>> endobj
+310 0 obj <<
+/D [985 0 R /XYZ 144.727 370.484 null]
+>> endobj
+984 0 obj <<
+/Font << /F83 563 0 R /F74 556 0 R /F75 558 0 R /F102 750 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+991 0 obj <<
+/Length 1415
+/Filter /FlateDecode
+>>
+stream
+xÚ­W[£6~Ÿ_‘*Z5‘S©UºÚn¥>ô)RfW*¬áVp63Íïñ†dèàT«Ñ|ûÎáówŽñÂ?¼À¾B7\„¾ƒ¢ˆ.’òÎY`è÷;l¦xÄCAèÃûÄàÆ#……Ñ ’sÞïî~ü Áï.SSwéý
+‡>YÞý£dAQrÔÈzØLù„=¿Û×ò¹¬là=>¿3«F˜³lƒÁqõøÁ~ˆÜ1|Á„|ôÿ9‹S^¶I;eD­½²¾mc‰ZoÇY-Ýw¶t†–g{" †·<Kyy–¯§ô‚jíù/ë VóŽeÏöügžÿ=;
+[€~éx£ó@QŸ’¸¼® O’4k©ß`"~1AAô&fÆ•ÓÞ ”ô5eÙK°¾ªôYëÙÞÚD¼º9áEz›™¢D/¸B&6È<«Ø£Hò¸½Wí³ |ȶnÄ–?»'Yœ¶|» oØí§vý~‰åw|^ºç¬Ñ¬•M?°¬À៥5{C‘Åþ¼qæLÒ: ôy•²JüŒYiŒ-«ZÏöaº :“‚«:‡v¦^/ ¯dPØ 3ôfL.±=–o%ò»ßvC}ì ‡zƒ=Y% è¹çP`“áêê[WÖ#ëΈ7‘³ŒŽ-»öaŒp â1¸¿ˆ
+ÁKcú”sˆÿ$×­”A†këŒc™v¡?9L÷‰÷ÎöA/>ÎCŽK.â±6Œ^"ßöl8JLö­ÿˆÛ(D“q1[%ô^LðL„£hô‘Sá‹©‹<8P/ã—b YÆMc”™q×mSM·Ô¤6‘ÌÙ”Ri ÿ6S¢êEUµ¢ìðh_CQï›÷Ôÿ,Á=T%—Ú´#j°hs/«B÷EühMOp{YP!Àxª(Ã!\ÙUNx«,Ówà1*¦°_UzÿxEendstream
+endobj
+990 0 obj <<
+/Type /Page
+/Contents 991 0 R
+/Resources 989 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 988 0 R
+>> endobj
+992 0 obj <<
+/D [990 0 R /XYZ 144.727 740.998 null]
+>> endobj
+314 0 obj <<
+/D [990 0 R /XYZ 144.727 240.863 null]
+>> endobj
+989 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R /F85 571 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+995 0 obj <<
+/Length 2115
+/Filter /FlateDecode
+>>
+stream
+xÚ­Y[ë¶~?¿Â}("5CRâ-/Ý&inhŠ¢X 9*[´-Yr$9{6Æþ÷Ì”V²µgåMq€cÞ43Îå›Y¶ ð-X’ÅÕB%”£›Ã;ºØÁÖ·ïX8‹˜H•Àxbs M¤0Hˆ–fxæÖßž¦$fÚ3üòþÝçß(±ÐÄH¹¸ßº3÷ÙOÑ{'Ç:/Ûm¾;Õ¶Yþ|ÿûÜ÷T†D.9$Äh6¤Ÿ, Їôï÷v¹âZG§ÆÖKN£Ua—\D¿.™ˆlá÷6Õá.YTfÈÞ Úb”êôö’¸cÆš¡t8žÙÖÖ‡¼„ƒŽÑÃÞÖNµ`ï)åž–›¦uXo«°p<Ú´FF‹Óž‰Ã€Ï…<òr¹Š¥‰RøQ4ʪÍé`K¸Mëºý‡}¾ÙOÝHI1¸ß¶¨Ò¶¹k®/'c’ˆîlÞxÂÛ%£QZ4–,WRêèû­gÜ‚ xI;í»Ó NBAýðÕüÒ2¨kéÀ!G[f^¸kÉVÜ¢•©fS¤ ªVÇ6¯J³(…wv‹^ò¼hüºÓx‚iÛpvB&®H,Ù-Áh§4gjeöW¤Îƒ
+ûk›—;?ÌìÖֵ͙¼u×¢£·KÕ©tÔõ/¿©ÿ)«Uu$½¦%1ð? T&@&&&ÑŽ SZõOØG&ˆ4Ã,íC¸õè=—+Á£œÿ<Á+ÐX1¹¢g¦¯™qdÈì.ß6mZŸqÜÖ' ®ötöž‡ A‰GXšØF'ÃÙÓ”<—Çtò˜Wä9Ï&eè) Þyå wÎIÏÞ!¼èî^¥MéÎNKï)]°d¯Hÿtƒøüâ?¡ìóEŽ_y¾ÄÉ+†ëI ³åʧD°MCÊ?•ÆoOÓwb=þ¿Óô—2æ
+Ó•ÂkT~Ôî»ÝºÚØ ^f*0³Oˆ;f¬QԄ㘸Œ¬àRÚXH¿EnÃz'MŠáÏAÏÏÅxw%ÙŠíø #¶7°kÑbMâ>奸 Ðe!
+€ÚÒô‚蓤Ùu˜ëàôx„ÓqAã$·õs{cB8I.‡ÂmêüØ6ùo¢IA”èñ3̵^tô}ÙÚÒÖih®<V§.ââ6À‡ È ˆôèçÿ»êäºD”P
+só¢§\fˆˆ;wmžµOFž8QcûxØc}ЧԀcœÄ8(r_ÇbeèӜ+ƒ'þü’„é”ßvÖ%‰ª¨êó²DÙ¦€Aý)úî%0bÀwüó7×8ºðRê}>áSÊ#Ú5Ÿ>å£2¾$
+Á•èËàïK©2¯endstream
+endobj
+994 0 obj <<
+/Type /Page
+/Contents 995 0 R
+/Resources 993 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 988 0 R
+>> endobj
+996 0 obj <<
+/D [994 0 R /XYZ 144.727 740.998 null]
+>> endobj
+318 0 obj <<
+/D [994 0 R /XYZ 144.727 461.432 null]
+>> endobj
+993 0 obj <<
+/Font << /F75 558 0 R /F74 556 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+999 0 obj <<
+/Length 1453
+/Filter /FlateDecode
+>>
+stream
+xÚµX[â6~Ÿ_ÁK%-®oqœ7ºÚnÕ>Ô‡Ý>0`mHÒ$,ÓEóß{|If†ÕHCìØçûÎÍñ9d„áŒç(¦ñ(æ%‰-¶x´†W<¿„E ‰˜ÃóÀË)‹$Š™„Ž¤HÌšO¿~† %ðÿie—>-¿Œ‰$tòÏÓ_ð6I”aÞ’‰„ø%_ ãKµ2?M:ÏÔlSßfXoÓl2%ãìå/£‡0õB¦Ôˆ’…£Õÿî”ú¡,èÁÍ´A&‹J—M­¨—¸ð
+¹0êRÞ@šLxýÄ2#׌îYF¸Cì8ú–}0Mv7Ÿ2þNŸ>;µƒŒÞåÔÇÛ½*îèÕøçyõ~™ÊÞ©'_¯[•‡$ªÞnÕR§êÜI×θ’­1Uyš›Êáø ÷9¿c&sús”ƒ0y“jaÙÿðûSW÷c„¡2œr¨úcõ;×~»Î€
+I×Vp-ƒ<~½êÓèË8à(‘¤/¾W“´âŸlÕC¡2«U5ß)—Fãï•)’(/Ší6Í—%3ˆàº *q*ýê“p÷U)×´œºb&Óª,ühe©ÒÊ uî^§mq
+`Rž§Ë¶\žR» ðëŠâ ÕâE’;—Š ‚d[mëÚ‰]Mˆ­8¡8ÒDŒÿ\¹y§<Xƒ·LLIh¬_|3ÛT}\{isÁ¼-'óbõJ‚'Hv¬Œ÷z´tÖ"Î\ Ò™úæÒ90´Æ’Ϊ§<†üˆoð}ëyM@2G{tÎ8ßF€§¹k…Û.‚aÓœØRBQíÕ+Vn¢“Úú¼m`Ž8°îëi=Óo
+hŠ^Ȉ™åP» ‚4mˆxÞ}=/!^×ÿÙ;A}Ãarû°ŸuUìÊàCYܳVwÅcpÝÆãûË·ÂËûU¬i¾Øj7 ‡4*ÊJµE[§§kÑV†ƒ^¯UåÔž•iÞ%‰BÚ깄¨MWð 9ã²0àužšž§ÀøØ—{ô÷ƒ…}陞°´¦«ÂÍ‘»2íÅi}Ê5œÑÀµŠÁljõ¹ZÙn Ù¨—³rWoÄû]gâÙ…®I¦ 2¸º¡`"qåŽ"ø¹T"a9»öü¡<Â7endstream
+endobj
+998 0 obj <<
+/Type /Page
+/Contents 999 0 R
+/Resources 997 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 988 0 R
+>> endobj
+1000 0 obj <<
+/D [998 0 R /XYZ 144.727 740.998 null]
+>> endobj
+322 0 obj <<
+/D [998 0 R /XYZ 144.727 668.26 null]
+>> endobj
+997 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R /F85 571 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1003 0 obj <<
+/Length 1283
+/Filter /FlateDecode
+>>
+stream
+xÚ­X[o£F~ϯpV©žÎp§O¨j¶j¥JÕÖ•š>ŒÍØ ` 0ØÉ¢ü÷ž¹Ø&„㻊„çÆùÎoBþÈ‚x
+pzÅq´Øìïðb[¿Ü}Äõ]„Œ'6—®¡Ð`à¡(ˆÅ™ŸVw?|†Ãsµ•GWé߉|Ïþgõìú‹ÅA v
+éM¾¨šbüпۜ¦Ûupé“ÀøÂþíò†ý¡Òµé%` Åf …6 nmÛ$­6Ô üšIëÌá"ƒ® Ô[— ¨–¾²¬7ïð±Á7ªJþ\ƒ _úŸ{ô"°à§_’,>ÂWL{‡§Nê‘oÆ#Ç<kyU‹j’ßÕ¬ÈK&Âb2Ó5Ç÷¿Æœã™Ã¬+þ¿L;ŸèZ-;”¬Õf·È„QkiÓÐç&´+x˜‘m&¼úÒ^56± LÓ{IF‹|WòªWl;kó¯ìe†*& ¢`\ëQ°-OÚǼ–fËQ¼Ù3ÆŽoÃ>Íåõù¤¼ š"ÇxòÈèÙèNæðx˙܄|žÊÐßb±3 ·ËÓ%Ðò†z ôeÓݽ]/*ͳÜ3ÇVÝTǤnØØòW›×ÐOí+öoD× R‹Jó,nÂnù–·æèáè–·|¦åѬ{oZ.©£qÿŒMHy|õÇdL«}„4ˆ}NkÁ 9õપ”Qÿ£J&¼7¾”ü)Ÿúkendstream
+endobj
+1002 0 obj <<
+/Type /Page
+/Contents 1003 0 R
+/Resources 1001 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 988 0 R
+>> endobj
+1004 0 obj <<
+/D [1002 0 R /XYZ 144.727 740.998 null]
+>> endobj
+326 0 obj <<
+/D [1002 0 R /XYZ 144.727 470.273 null]
+>> endobj
+1001 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1007 0 obj <<
+/Length 2201
+/Filter /FlateDecode
+>>
+stream
+xÚXYã6~Ÿ_ÑÀ`³yˆ”” €396{ X`ÈC&²DÛBË’!ÑÛãmÌß*²ÜÖÄê Í£îúªHvGáݱ8& Oî’˜’,KïŠýz·…¥¿½a~‹‚¨$†ñÄâRÈ”$"…ALR•ážodðÿac·>”¿G,£tñÇÃ?`UÞ¥$S
+W¹"±d~ËG&âZüä]—ŸV]û´:ôÃÄbÉ¢arUêM~¬§9â¸ôD— Ô’YàÎæs7ùºÖ³ê«CøÌÃÜ«yóWñÞWå˜õ¾BÞå_ã,^Ź«¶» µ‘óyòÕÜãÜóÃÈz~Ç:ïV»¶}|Æ äî…[íòºÚ6¦µ?ôþ`NŸßÍ–CNÈÁM‚Ӥ܎¤Ô5)&‰ÊRÏS´üG+ ´’[´<©T@®+G‹Y»š<v´$˜ŠRý¼à2j[Ó´F/–\Òèa‘ñH²>{óÓü”P »d‚EÅ8½_~‡tWÉ Ûé9ÏG‚Ó‘KWûüQo3ÁvLãŠÁ Éâ䚤7Œ‡‚øÀÉó–ÝöÏàëlFøzë¼×uÕèÞtÚ»g†±;?BÙlìt¯ÍjÓ66#6Þͽ…‡ÿéÙ¬æ
+éÇ¡òߺE{”½ûÕ¢»ÿ‹ÿp&w˶
+_±–ŠP‘ÝŠƒ„$2l:S¬(uÝ{NîS´ûý¤’™$r¬ã¯ß?¬°üÕ€Acž)n<+è“'Ì–@ÆÉÉïͽ­šCŒMDMOÕ…±žv•<pú:ä!‚‘è7´ ÞMEEBäEù[ŽM1!X§A¹`±Ë`\kݸQ‰§K`&%iv©Ào‹”F  `Î/8õ™‡3ý‚ 9Ü÷îÇSevP„0q²$ã:S!»Ê¸™²E3⊌ä¨Ú–¹ñ’Õ›ü5ôOU³u;ÛûV¦÷jƒÅÄäjŒù`¤,Úƒ­zd±¸vš1Ë¢½Î›Þmñî´£¶¿<ç7{¿cí—›/ OÛp&à×Mµ×ni˜
+b¡ÜôÂO5TC”PÐ $ÔÞ@·„p'Ñ“v_hºu1‘§ Ê>•Á7=T“¯À˜¯S¹C SCR; Êþ8\°Åˆâ Äúä8£0Eí ?ÛÆ}óÚèb¡B*>®œK2
+W=±¿‘VÕ •[_uG¨€¿ëa4@‚(ˆÇlÌ›ž³¹\˜ÕAÄ"#ð‰©Œ:½×XÜcê­‡“`ë£í—ÁÖq,"÷Ì€+Ní‹Í¶ñ›°0$2~QÚ E'€?Ýml{ØbýD6O;ùèXAQÌ—¾¾+A–]ÚÎcKCœB¦7ÆOÕmã'?RI¯%NR2Ôüòï,lýŽ9fÛµØB.Ãi.1ÄT"ç³ 5å;6bcCXœÙ%¿`2 `3.bhò/!iZ6Õ$ý ¢q ‹ À誦°˜¯zÃwû%_\k°s‘‰)“çÞr"ÞàBÆçW%ƒô.[Þc‚¾}ãDvЖWì–<aWx5m+.HÆBt#p–¥/ ¾þÃQÛÔ'7
+MöD·(ˆLÙ<A÷ÌCYATAʈDøµÎJxô‹ƒ4}öO·ˆi»aCå!ÿ‘Þàé Ög§ÇÆ£[ÛpÈ÷a¾
+þÍõý6r‰/èœpÿÙãòË‹;%ÇöÄüÎ=†6úÉß‘ñ]mûwö‡}ªÓþ‰wà‚½->¿eŸÝƒ‘í:ÏOWï®Ê¡¡Âž ›zg`ì©Tc'”ºzhIá{ñþlendstream
+endobj
+1006 0 obj <<
+/Type /Page
+/Contents 1007 0 R
+/Resources 1005 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 988 0 R
+/Annots [ 1009 0 R 1010 0 R ]
+>> endobj
+1009 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [0 1 1]
+/Rect [306.122 380.959 499.397 391.902]
+/Subtype /Link /A << /Type /Action /S /URI /URI (ftp://ctan.tug.org/macros/latex/contrib/supported/natbib) >>
+>> endobj
+1010 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [0 1 1]
+/Rect [143.731 369.626 289.186 379.758]
+/Subtype /Link /A << /Type /Action /S /URI /URI (ftp://ctan.tug.org/macros/latex/contrib/supported/natbib) >>
+>> endobj
+1008 0 obj <<
+/D [1006 0 R /XYZ 144.727 740.998 null]
+>> endobj
+330 0 obj <<
+/D [1006 0 R /XYZ 144.727 612.739 null]
+>> endobj
+334 0 obj <<
+/D [1006 0 R /XYZ 144.727 434.433 null]
+>> endobj
+338 0 obj <<
+/D [1006 0 R /XYZ 144.727 412.314 null]
+>> endobj
+1005 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1013 0 obj <<
+/Length 2672
+/Filter /FlateDecode
+>>
+stream
+xÚµYYÛÈ~÷¯ÀØ„2,º/^yš °d6Áb,àø¢Z3<–•ÿ{ªºº)Râx80‚†Í>êRu}UE~Çàßq¥üHDw‘b~’ÄwYù†Ýíaé/o¸Ý"金‚ñÌâZÊØ$<•‡ nùóÛ?ÃþÄOBy÷°3;¶½ŸW<ðêfµ–qèÕÝA7«O¿ÀÞà²Wq #ì*í6ùÆn”‰ñÐnÊú¶«Ëü¿i—×Uû~µV‚yçºG6‘W¦gâwlêLë-½¤-­æ;z¶Ÿt£ij_çÕž†]M‹}«Q–»uúwkÎý$Œ Í­2<ð9O&ÊøÙn«P(àG°ûþŘ(ôŸ@ƽ´B›»ƒF$0J;Y¡q*ƒ]f¦¬·ùîL“›3ÍÁÑ–fJV-Mº©ÝŠ3/͚ݯ/-WÜÓ>pW‘÷·*³G‘Ëd¢ño?ýãÁ,
+åË
+îç O9bàZÇî~p.U¥Oºúœ7uUêª{oÚä«5÷6E^ï›ôx8}‚¿f¸ZZk8H,SÁ0-t‡û"o»ÜŒtyì΋yð<~ÓÿéóFÿ=ÍÓ½þØÖM÷T,«Ëc£ÛöÓý
+_?ò$I>°àƒˆWë1/òÙ§åúŠåúþúãý1°5.ŠÆ¥ñ4L-æ._Ç]WÛr'n¸:^Y&ƒs3¡–Ë0¦ßvçeÐ÷EÚé/sË&¼ùéáô9Ü`8P¾
+ǸpýŽÄ d‰D!F‚²‘Œh ,ïtÛ ÆœÇT®Y(?‰ù˜Á ýs3"¼â‰×h6f"7@ž
+_Œ`•ÛôÇUx-Q6X³í›9ÂÅ·´²ˆzcŠÛBîyv F¹aƒF ¿à?õFT\=tE£Vwk
+äB`$§ØEH'•—ÒÃÓfM~ìh$4ð
+¸„Â{˜;É|%’‘n‡ö˜fúV)°8Àª€,]Ö¨Àg£Åñ/Š½¼²‚¹ho¤I[ ¶`ðÜ
+Øê¾Ø:JiQ˜­€‚ˆf·²®yWƒñ‰¾)2¤%JZ‘ßYŒÂ¼
+é¿1Ô)T­9Ô
+; ÷ç#aÌü˜Å‹"a¨Àfñ²@ØÚàsÅuLâ¥fˆó²%-ñ«úò™–È…Ô³\¡æ…œ®±„¼áL)oó´”BÏÜ[KëÜ Ì
+ÅtZnn‘ÅRºz–g
+-[›2ÞÀ Žº)Γ¬ù9'+êæÃY§í]
+9*T°»¾jÆàæ‘òýô{úLtÇÁ«®’Š¡âeÌ{¾ ­$8}ô\ì¸ý†ºÈ|²d˜)ÌdKÒçr\J‹4Ó÷Dz3×…N‚Qñ…W.\™˜b˜1S,ãL³¦vÃ
+ò8ë0B&77¦Oaª ¶¤lSB©Úl“Ïf›4û;v£#fŠm)C[Õ1—¥Ó´³îLÞÈ!í`I²Ì¾&,##±-Ÿ‘§m\øå¶Y
+¡J“¯pÎpè{ÌdâŠC‰$¯ÊÅ^•ŠÛÄaù'Å4GïóÝúòLß0vUZêY³½R%t¸ióRØ•'J¾ óק›Rá$V¦NŸIÛxÄG|;q £›fJ çøU-ñ?’B žendstream
+endobj
+1012 0 obj <<
+/Type /Page
+/Contents 1013 0 R
+/Resources 1011 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1015 0 R
+>> endobj
+1014 0 obj <<
+/D [1012 0 R /XYZ 144.727 740.998 null]
+>> endobj
+1011 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F102 750 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1018 0 obj <<
+/Length 1566
+/Filter /FlateDecode
+>>
+stream
+xÚ½XKÛ6¾ï¯p•ÛZ%QS½ Ò EÑ^ ôÐô@É´­®õ¨He×5ö¿w†¤lyW‰©mP,°¤ø˜of8œùh2óàÌHº±ÏâÐsÓ4™åå7ÛÂÔ»b–4p£8„þÈä" ‰ tB7‰R\ózuóÃO°!rSø¿Ú¨¥«õIÃpþçêg˜¥³ÄM£gýÈ )1K> Üs‰ÍrÇªí¦­K±<—E]ÍÄ9Í,Õ”7
+‰¦§0ðÅ)$š˜BF¯Ù¸ä/—&¢ iÔl X–Ùž«ÚÉË]"Ö`ÒCÅï³}ß)×Ï‘çM±*šžü ƒoJm'ZÕXCÆö¶ÐtŒíYÎUléñŒ·,M,`oåÛjýÛæÍž aŸj#›œÀšÆ•£ôåºÎ»Ò¤¡]]ß­¯KìÙðµbóÐAžÛ_Ÿœ·<Ÿ8ïx•"ö !Iq“`$L P2¨’ƒè6òžØê_±õñhOtãà‹ñÑ8´J,7oW§‡çzI€ÏÔ‚pø&yÚžÞ(Iб~ÀèÇÉ
+v>ø~
+NÝÎ)F”ßÁlø#h
+‘õFÃÔ¹«¸qÍ…¼Oþ«±Ô9qA7õO©…N*ÉK<øg­ Å1ñÛ¶zÅÑ´§È9ϼ"f_'c›÷AÆ·Eµmk{’'~›A½‡žÁ—ÔÅ—Yý€}lm1Ïcxð½9x Ÿ8üq<b78|Ñ@q?~†eŽ£ø(¨þñ™ 5°'^­­‚©g:Éô¾Ð5tAÒ
+}€û¶~^ËÂȨÙS1 $q¤ŽQ79-úK¬Ð‚Å¡’ìûÀ
+üéG¥*øµþ0eê‘Ù#ͼ%u‡éýƒƒ}‹tagÌÈÔHúëƒG=&tmJ|—zQYꦩ’¨
+ˆ.ò Èˆ¢8 5ÆT²;t-zb@”p63ë/¬ÔSu«§.ÖSLô(\äLA¥ªÅJ2†=‘zN x%º–÷œ‰É3{RCÎ.yB^Wx¼EÕ)5q™¢afo}’!zÁ}`)¢€î3¦?[
+endobj
+1017 0 obj <<
+/Type /Page
+/Contents 1018 0 R
+/Resources 1016 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1015 0 R
+>> endobj
+1019 0 obj <<
+/D [1017 0 R /XYZ 144.727 740.998 null]
+>> endobj
+1016 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1022 0 obj <<
+/Length 2294
+/Filter /FlateDecode
+>>
+stream
+xÚ­[oÛºù½¿"@0ÌjN$E]°¯ÛéΆ­†
+§â.!iá)$J©»ò å¡<·j‡«¬M³ÎË\ï«j¹¢‹¯Ï¿q
+%mOO“óòBŠYx‚Y
+`!‹÷–*
+Vt+Ë ^‘åJ0ÚÁ?@H5¼dÁU²*ò¯KjÔÏ]¨rÀd]•ðÆÆ^<ȳ=¶Ö[µúo›×
+@ƒìðd±YÂt/<;)ûà”…Ýi$ž[R±pg¨a{Ò6¼#&*K5Áb+> 0CÍ]
+®¹þYÕÆ̓ž¦1Ê~Ë·î@ÚŸ-˜¸Ú¡d[h»§k%5²o?‘&cRÑÆj{‚ª±gU]«­ƒPÙ]c¸12Èß;…]S.-“ÿ©Úº”…ýhÚM£Ï…²_‡üq¯íòdèF:Y˜Z‡„]˨o]~q×úÊO¡º ”É«Ò=Ø]›4Ï Âäûzå Á…Ô7£TÉf, ]A`J¶Ë•tF®¬U©Nªì óÙJÖ—ëùå3ý2¿,KÙŒ
+èÓÖ£8û|xéüÚ&åsJ­¬h7G*×g[pÚOÄ[³q…3pJ”>­«cíëÖ‰t ß[(Åö>þýÓz^ÚEt« |ƒ¦gÕºQ;ç%`6óÉ Ðª+’³"D© ¹Q…)ìŒzk¹É³g´´L×/o°«tŽ® ®¿A¶üoþyn.|ÁL¹ªE«ól4tšÇ¢‚4ç¯lu…‘ÈÈñ©ÃQÏÇÉþOí€â3¢—3€Qµäž=ÏG6ǽ±šù<_ËSîA­íƒÄþ£iªn²:?êI‚Ý#ßú„sJîC/±Â*v[§r†½=":žöçóº–9Sо}5î¶? kãte¶¯êFËZ?{Y}}O_¼‹æ’²MÙ¤EL—Ì n£¡^ª«ö8ì„»ó˜0j¶ÞU•6¶EmÖ,äÓónŸ·áû¢—GdF˜Óéb !ù›DCÙ ~¹i°=¨[ÉúË=sõý\£á¬`ã7»+ÛÌš™V4lw_m·)e@Gt£±7´2S&µ‡ h²±’ö 
+þRj¿ ºôë‚$Q×èþv)Ä¢™jþ åÂOI;¬L¹ ÂX'ÑÚùl}d,¼>XÊ;·ÜV(9d»t##A`HÅ ­—EQ¡~NN¢A@­ê=ؾJÉÒîB/5ÕQÎI%C+SÞ&"%ñpö2NðiBD»f(î‚…xC91r' Å ã{ú<•³!µÍ¯jhôcd€gŸïé—׃[âé¬Ø™$Ún‡¶5NIÇýׯ¢9 €š¹¡¬¬¦09 ×Áë:t2ði
+¡“öéwÑjÀ´ö[ÐÆd]Œ£§ƒÚý‘!)OâÅ)op.•D&FáÎJŠ³ÝʪÃ!×Ú¥’ø•A`ÈHHÅÐi<NãÉ%%a?|hK£YD!‹ºZ wŽUÓ
+ØâÀÑë±í½-ê
+åŠÅIh:ŠÃü
+B‘8 ÇYšÚ¿#¬xgy¸íS^ä²>Ûhß…2cTsÜTSÏœöfzŠW6Pã×ÊÓ½«›I›äD„¾Èº y5ôOb~!Ú¯9äWÖ×96‡;~âÈÐdð8îÔt£aؿ̲ñÀ‰Äò,áÝœ¯±Ãù¶7¡~HÏQ y‘ff:¥!ø•€«Dáþ4Y%¬º(%M‡úvú‚Äê‡\ýɯS"’ÉOc(„Dt#ÆGéUêHàM†Yòÿ sendstream
+endobj
+1021 0 obj <<
+/Type /Page
+/Contents 1022 0 R
+/Resources 1020 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1015 0 R
+>> endobj
+1023 0 obj <<
+/D [1021 0 R /XYZ 144.727 740.998 null]
+>> endobj
+1020 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1026 0 obj <<
+/Length 2113
+/Filter /FlateDecode
+>>
+stream
+xÚ­XK㸾ϯèEc±20fø–”K<‹L²É!‡E# 03Ú¦ÛÚ•%G¢ÆÝiôßâC²$ËcõbÑ@›¤¨úªŠUÅúDî0ü‘;Â9Ši|sŒÒ4¹ÛÞá»Gxô÷w$la‚!sO<\2– ˜Á/G‰Lí–Þýéo°?E©dw;·óaû)zØëJïÊJ¿_,)“ÑIÛ_íµÚ•ÙìýÔìú9-ŽJ?9VåFo›J×v΢¬X|yø'
+ᄪbc·á߇_ÿ> Tó”噪žýô3Æ4Êýå‘š°‹p„9 :&Œo2£LV—Ö RvnÊÃA[‚Óĺ¿XgÏÂdàY«c¥'Tà1JhÜSa:èKü%#°'#l'DJ”Ä}‰E9-\œp6"ïwÎPË
+‘xúã¹MOAÜÓ­nà
+éÚâ>l_ÄuP[»ùh« 8/é,hŒÅ¡©"}‹¦ÙÚÃBXð«6%Éz›¶#:7kpÇÆ‘Q¿Z
+â¯ó¸mÿâ蘫MBk8É„Ä ËrØO¤#Ž[MC#GÙá˜k:cÜV&t’–Ô Dãa—íéY2Ý%S ¿¥V!Ûr×›*;šKÍÑòžM®êÚK.–ѹ.ïgaù UQ·ØŽ­’VoXÚ†Tð³z_6ùÖ×aÇAUÞÕÛÐRCÒÉxØr6Pì(îYûßlç[š–O–δí6Á´gSŠ$móšÎ‰¾ÚêŽG¸¨ñþÑ®Ùã"œ „®¯§ÆsÙس 4®AWÿóKÙT…Êý¤n7 ‚TØk»ho<†Ð—tÐs”±ÑÀÎv»F”G?ËÿýàdÈG=)òï$|t 8½;¯þ×Ë:eyîG¾ùdлÖ~°váG&<R¹ñ](kC“E»²öf2Ï×X Lì
+_K$‚ƒ|)˜HMš¢$iùQÝéà|ÄXŠr.µÎ¼Ü*zåžÏ‚s; ¼ ²4å| ع%¾„„ca$ »ÚþzÂLf²g´÷Ð\­8‰èåü¥¸ñ¤Ÿ@í0Ó²€Í&ï·ßDœ¦6¶îªãQ6hì£õsk_¢JŒ(z²«ƒW=õ¤Ø !ܹHèRØØ6.²a©,ôŸö ,+-üó,l÷q#íwœ¤ÿc[ìkS5äÁÛ»XVÕ Có^¦;,ËÆZÜZ‚š®œHÑFª¥»1Öt`®)}yšøžG}î{è`Vð‚žøð%ŠEû•è/‹¥`2úPÔ']«¸ÄÁUŒ†Ïqv
+“3ÀFè,¹ñÆXò{‚{õ†xNgœã®±ÝcàWç*Õ~v˜,©7šã?ÌGœÌðQ^Ó¾räêžÌw§3iþË¥»luµ€vþªÏÙŒHu´Ýe[¿Ž»óSîëB­WõéV· Îo%ø[ÔŸ“ÕC¯nÁy¬j¬öW@§²Od7#(a7@ßPû-<úh5H}]Á Ì^_,šÇý¦5‚œ(œ"‘ÞˆF,È5Ô>ÛÆ€*’ ™¢Ú$/yƒlÇx,Õöe }3ø h' aendstream
+endobj
+1025 0 obj <<
+/Type /Page
+/Contents 1026 0 R
+/Resources 1024 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1015 0 R
+>> endobj
+1027 0 obj <<
+/D [1025 0 R /XYZ 144.727 740.998 null]
+>> endobj
+1024 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F102 750 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1030 0 obj <<
+/Length 1574
+/Filter /FlateDecode
+>>
+stream
+xÚ­XÝ£6ß¿"ÕêTòcüAŸØS磌Ú>T‘zR¯„8º pºYEû¿wŒ „ Þê´Ò†Œ'¿Ï÷€g>üáCÄ>ã¡¢HÌÒý?{„£Ÿï°e!” ÆCx9\*'B$X¤yÞ/ï~ø?`(‚ÿËMú\ÿå~Íÿ^þ§t&PĘ> 9ðYŽ/˜„›dW˸~¶œ=œ…a]`ЕF’ú#‚sùún ¨a¸
+|-žDЫZ&(0#8zy˱Ëj•åõÈ=8][Dóe‘·ÜÚì¥t(êç2IŸ’ÇÆÝpmîƒ|†Ä`HÚüXÉZÕ×z€…(íÏé6)5ê¸*-#ÌÏÛ,ÝΠÞ6©õóòbPïÙPW£ùÝÅm|_ ƒ°â”X.UŒØôŽh¦’»ä8â ˜™|Ñz¢6š%FÛ:[KC­÷F¦êZƒ¦ ܯ:œÂHÖÞêû9¥žu¨­OXôÙÀ'بïýÚrDxÐÜ  ša’†óaD$¸CV-˲‘¢0
+B÷,YÀ÷3õ³ÕñÚ® ‘ VÀC¾–›,—ëk%8#s[ìSŠÁeÿœ ¿É=Ÿ{iqбC|æ‡Êоø~p4´,7¤ÚrqˆÞj_›CµM”!>g»¡å…%­¬€uVW‡ReÚ­]ÒkäÍH
+„ 1¸ä
+ï^¬«q€B2L¿µÔ÷Ó6l<®¯ ?ÕV£è§²Èr…FŠ"EÐ
+‹ (l÷:o×»ìuº,yÕ=ãÔë-=†¸sö¹F r¶€®Í,àMá§iZHÆÈŽ¢gX»§ô¦­| ž’רƒ2g Ò•M1ðŠp¿zTêØ´ßQX®“ã {åÎæ"Dï9/Óq>~úüÛ‡éV¦Oæq;§Þ tÕJÚ¤mº¸]e¦q|§ñï>,»…ÍG>(³ V)(U½•nê³[ùh„0f4»^Ïá~Ï û,ÏâÖ}%úSbÚxV'ÿÊ[ÂÎ0W’¬Ml0ßÞ`9vrÖÁýO‚:È5ep\¿¾û´/wŒFóó}Â]çQ¸«ÓYèßî#/'.k•’%ÔÏö´)
+¥Å4í<vòÐALYnªä:>ÚKÅj+7¹–´Oª§ÆÐ@iêGÜ)â<#r§ñ»ÅÕ‘ÙÛ¿Ç8Y¯Uïõõ’´*œ…ñ· {ÃÒÇÅÛ OîÈo\Mª4±ÑfR¶ å*SøÿGæéxÆ5ÕÓëé>p31RD"X3ü›/­,ÇÔ·Ûœ…Ëæ¼+òÇ^M‰»dPÚ`ú{|êŸ+éԼǯƒìÑ~šV®-"tQÎLçÂÚ”û²Qîå+½3‚ˆà·za×*BBìÒûzSE_dÿ÷—à0E܇î -ôLwo§Ç
+}¹¡é¹]Ú\Щ`v6…§¤,å\Çkm¿«–C³âÈ­{`@0'@XÛW%zÝÃÂ{Ð㥞-›CÝ·4÷?‡º'I‹Ñ£§?˜9Ÿ·²’#ó.ƒýPéaò´F’ƒ¦Þí²FØØœŠa†òùÅ *¨{Ó´*¸·KÁÞ­ôÛ§îÅÝ &g Ø“ Ãc‚av”MĈQú XÀï.Ãî?[éÁendstream
+endobj
+1029 0 obj <<
+/Type /Page
+/Contents 1030 0 R
+/Resources 1028 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1015 0 R
+>> endobj
+1031 0 obj <<
+/D [1029 0 R /XYZ 144.727 740.998 null]
+>> endobj
+342 0 obj <<
+/D [1029 0 R /XYZ 144.727 388.31 null]
+>> endobj
+1028 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R /F85 571 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1034 0 obj <<
+/Length 1254
+/Filter /FlateDecode
+>>
+stream
+xÚµX]kó6¾ï¯”B
+‹¦#[–tÛ`°]å®oan¬$^;8ÍKèß‘ì8ŠíÖòÞ•ÒÖ¶Žžó¡s &`aHR¢”œ,wwt²Æ¡ßï  x@"âsÏà,à’ˆ@âCHd¤ŒÌ/‹»Ÿà Qøw±²¢‹äiʨÏ‹?p”O$QQdFYDBµÈ7ÂxUêb]äǽy›¯ò¼ÌòRïâÇL‹×ÁÁŸÕ3@'¸ºè’ãué,1ªJmTJoUÊCÕ<]eúT.7qñt~ð…V´ 
+¨¹³BʼÀÂrJ̤uSfXXÙ..^ÏNÞª¶Æ ðˆ$*G l z†@{êhàUGŸ¥OŽÈÐ:Â6Úþ¸OnIl™Vëh>›Å®‡Î·+îM<@xÀ‹x"ETàC<uçºÚå]µ.ÆPÐÔãØs&øbBþaD–ùDp€ðaâ¦÷éFÄik‰’à⇌_¸ø‹i¨.óÝ“ìÐÄ¥ Ãȱg¿èm“\\À±ÍäµÜO]œp80i–èÓ0QƒeS4¬‹‡¡’9€ëm~8ÄÅ÷.&öÉBÉ[Ì·MºÜT¾ÇE„"ydtz<”é7J™NªÏ«¼èªGò"ãŽ~SuEºÞ”]SÑ-ÉMÉ`åEvN¯W)„Û'É2Çî,+Û4Ó]l…y‚ã¯=2ÛôõèT?2>}Kõ×?Íç.41
+&3%G%•¹ÜBÿez+Wnê‡CºK·q‘–ßë¼ë­MâºU½áÌ!‡H‹Ñ€@]éâRÑÒ£¢·y¶î¡l,,SÔå=Œ nσÅéˆi¾Â…K¶óÌ¥w+Ð×Â\m™~³u]ËÖ³¾]ÞÎnia-ë-ÊBÇ;£Ån@ÿä/Y¼Ó-âìï3ú,`ä»NÒ¸r4ßë #i}¶a½ø]vü´ ë3&<‹½û¯`ø­(
+REÇ–@òŠ÷×iè„… W˜®^Öú®æÇìª6~ÙêËaÆÓiæGfó47<Û#›ß?}y‰ÁˆÈ¶µU¾zo-l,º¬oO5ž«û"­v½y’×|Ø>*œïÍ4x÷¦i|Ái…£Ï!³ªÇ± $·/9ˆ”_ya|ôAÄØãߧ°è«.@‰1 ™î½µí½l`ò»¦þã ¥­Sæ@ß{ors+Fh„ý²PDPèK ¨”Gç1ÁÚÀ q´rí_^›åendstream
+endobj
+1033 0 obj <<
+/Type /Page
+/Contents 1034 0 R
+/Resources 1032 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1015 0 R
+>> endobj
+1035 0 obj <<
+/D [1033 0 R /XYZ 144.727 740.998 null]
+>> endobj
+1032 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1038 0 obj <<
+/Length 1258
+/Filter /FlateDecode
+>>
+stream
+xÚµXm‹ã6þ¾¿"ph\É–d¹P…m¹ÒO%”ƒ»û ÄJb6¶ƒ­Üfòß;zqâ$Þ³vɱ°Öë<£ÑÌ3£à‚?<„„I”Œ‚Â4å£Eñ€F+˜úó»%1C–h÷LNbÊÃ$æÐ !g©^óûìá—?` Sø?[š¥³ìsá¿Îþ‚Y:âaʘžqÈcì–|Á1™Ê2++%•Ü+·¼#lâÖO0hLÓV0¾±ÐVðñ§QnÅ•¨èV¦!K/E=<ÎNV@!âñhB"Ð,íšéú{2G 0±6µöê ¡®1öÎ¥³F·+åÂ)…ã0%|è^â3kU2¹¼Ñèó<žààë¡Ï¼N•yÉÀMiŒ¹\å媮v[ï[£·bá>`þ,u1]V•ÒªÀº_ËØ÷
+5W\
+зG¨Y{%“ hzôW/ñ8t^2Ë…’ÆØ›ª9ù‹´þâ\È”{€®6Õ\ltk#Õ•¯jPç¯ÎW½¡Sh㦠%kñ
+÷J§>5L!ž¤Pp(%koÁØçšÊíNÉkKMUKQµ¹üÏy@À»ìß1CµqKÉ
+ÄK;*ÔÕ|[ÚÞ¢Ú•š¾Lg%Uc[PãJ³1 Ä&!@­Š@]r²¶VÛŠ¥(˜K­*Ðm …ª–ö{Z£CB‡ChÄa°ç•´°#Fä¤c£»q
+DAöDiÚWX€D i6PZ$ñµTÌaæ—5ÒÿØžtÇendstream
+endobj
+1037 0 obj <<
+/Type /Page
+/Contents 1038 0 R
+/Resources 1036 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1040 0 R
+>> endobj
+1039 0 obj <<
+/D [1037 0 R /XYZ 144.727 740.998 null]
+>> endobj
+1036 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1043 0 obj <<
+/Length 1800
+/Filter /FlateDecode
+>>
+stream
+xÚ­YKÛ6¾ï¯ð¥€ ĪH=‰\œ¢MÑÍi‹šd™ö²‘%W¢²ëûß;ÇV’嘛bŠùæÅáÌ,Yð,Hù)MiøŒe‹âp,ö°ôó1[Â8ô“4‚ñÌâ*Œ3?‰cD~–°ážéo&Kü M5Áî゚ƋÌgI²¸ß©=÷Û?½$ŒÖ¼ÚVµä­¨6b³üëþ×»Ÿî{:C2W±€Š±ÄgÀçë KQï—+â5ùñá4Å·¤_(OÑ#Ÿed(g´`
+~’d†ãg 5”÷yF`û1eæÜ[#pŒÃF+¶hxe.%
+ŒcsýÓž*°?‰½ÓA«Ž€gEVqÉ‹â(1Rm»Æ|ÊÓ‘·\¶æËîÚÕµT–³ó¨BåýÁÚL<oô 0&3ÐÂØ{ ³4|YÞòš)ïJ©50b\+ÀʪðPXq8–'#ÓäÕÞ(Í£w>ô3õ’xJ=QÔ]Õ+ÑܘÅõ`èÊ %ã/8D­më¢;ðJΨ~â³í£ÅC–úŒÿYÿENÔ:—ràmh䟿¸÷ØS'Ú_†mmÅg‘ÏømÀå
+ŽûNþÀ÷¢úшsé³+šÆ~§#áŠz 0!cÆGB–yÅZ¥µÓfýÀóJI‡[@‹,ácõY²^xÉKœúiJÌV¤Æ,´Ý¦•Bvò‚ÁeÑ[g¯5?Ÿ†ñHÖWQÈR|DG”>(—ÔÆ| NÖtZ§8:ä:ŽM Ÿ·àmw8ªÀA‡[2ÆÛñ£km03OAÚÌÆßIøšó„$õ)MF¸¿ Ë|&ƒëïî×…lf,ÊÀ¢ÉPqj=è)Ì4„a¢bDB¨ÚFIJ{Ðþ½&±Ÿ02@…0siºów3æèŠ@ºo§Á/1(äbˆww½M«ü'þ]ÏÐ7Ç4}féG7dx¾ÉjO*þZu”cñ³;`â þt„+šïÀGªBD«®Áž3~ƒŽfVóêLXZ‹ÝÓy¨…º“ê³Ãû„“¨øöùü|vÇÍfp!#Š‡¸âpà[‘k™‹²n{`®´ay™Õ´& Ìt_Ö›¼ÄQÉåXhµ‚¡]¡³ÀÏ%Àb r%L\Y;y6 ʲneÃó
+4ï+³Pô†¯Üv;%²ð›Ýâ,r¸Åw™‹\”yÛ®M¢ úPןÜïp;\ë9hÐ]uÈ›OkÈHùâM\/L–¼צqùÓÅ’3¶K@Â*8®ÛG÷8¹Ä#–e}àÇήËÜaF*2@…¹/©m”¯
+Q
+yÒ3z%ÂÔROä›Ò¨õÒ#ª!î©ÙCݼ
+ÔsG´+Nm±·µþ*J‰÷ËÎèJ)Ž%¿ÚĘˆ‹ †L÷RpÐð:Ñ`†_ƒ8àþÞm† 5øj;¾ä°LÌ’zåQ”¥m E]î*Òí±®Z±±
+Š@pc§‡ý¾¿ë®©òrÆeZy*ù¸eD%êì¢ÞKˆOâ+·mRî%PpÚþ—¥+¤q“º{쨯¾s \µß ¿󊼚öqV3À¹Š’PêÇAˆ]``&²+q¯¡¬|îÅ$s­NÖÊû“úzÿÛ‡u)ZyÆ8îy]òDê3ÿÁó©Þ,¨CÎΩ4›ÉGBâgá(£ÊË2õÇ¢fïˆ( nåÏÎ Ò€80(›îUüÝÊ žÝÙ o¾º®¦§Aä`úë¢ÎóCþþ6Øœ¶ÒUyw~¾Öhwͨàýß…_/Löê ,…؃½þ™tƒ¤àjqr#áÐ]£Ñœ28G&9Ì]ã"Çendstream
+endobj
+1042 0 obj <<
+/Type /Page
+/Contents 1043 0 R
+/Resources 1041 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1040 0 R
+>> endobj
+1044 0 obj <<
+/D [1042 0 R /XYZ 144.727 740.998 null]
+>> endobj
+1041 0 obj <<
+/Font << /F75 558 0 R /F74 556 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1047 0 obj <<
+/Length 1626
+/Filter /FlateDecode
+>>
+stream
+xÚ­XÛnã6}ÏW¸ÈÀšIQ—¾¬wÑm±Zô!E tû@[´-DU]âuƒü{gDJ‘lïZbŠ—s†‡ÃÑŒèÌ…?:£žGÌÏ%QÎÖÙ;ÛÂÐÏ7ÔNá‚?ð }fpÁEH|! á‘ІsŽû5¾G„ àûû›ï
+Ä,$‘ïÏî7íœûøoçåÞ2Ö*s]«ù?÷¿Ü|¸ï1†'ø.qC>[PN"/|!ñf>‰àÿ€„17Bè± T?¢;bµ›sKoÙvÍÔY%«¤VÙÓ-}¾eÏø©G¸×â-¨K|yÁAIæµ°Ô‡¥®ë:ó¤Nd:_0á:•ª›ÂäÍ"0ˆsŒ†ÖÁÒßP‹\§ÞÉ[ZIeúÖ:¶£¦‡:jN…óÿ©uS«ØŒÂÊnã=å> h0Øù»ú½Ú&ùzÝd*¯OM‹B"¸°+ê$ë¸síËX•ÖXmºvrN<N•y”f´åœ¹Î`·\&(GIÞeÀ×M*K#0%ùÖ´‹R¯R•‘ù‚S×ù=UHP)3kó §f™F%[9,–ÑNôÚAKæ8á`”,ÓD•ßõ»ïýh!ˆë{½«—¢î—’Ea½jʪ×jFªwZ?<ÝjÝû¸Vä?úsº¸ŽFW•*kÓÖMis&œ}n
+¹µs«úÚ¦ÎÓƒi%øõ"k¥cÛ§ÒÊÎÛÉÊ4bw(T÷Aõ?€ÙŽî“jמ >à¡ãﺩÌѺã3ÕYòbqܶJÐfÎ+F]™‘}’¦f`eçÊUÚ­ÒfÎsáXÁ‡ôÃœMpæ/ŸåÁð0P#ȉæ>'nÙ¹ke2-²q‘ýN•ª·Áx¯O‰'ÆÝ©ÎY•ÌÀz2Õ™ègZ&›ÏMþ”ä*n;Ô£ÊwèLJÆWzá²èR‘ˆ:2ö*2Ǹ=ä.þZ®F.]_Áå½ZÄMËu™˜@nP” xx}XVû+Àý)àղÿ„Û»Yp÷ù
+Ãi6ÊBúàÎ]‚½ô¦~žl!s/îö
+0ú-ÁØ·ãßìÌb‚ãq Í›l¥À÷¶O²”«dýŒ7è]}D#&ÐäºÌdZá«c*¬?¶–«Ø]©^jša_*Wø,.u‰ˆRµ©3YBb5~B¥’É[
+§0¡ùû$®w§Lm?Ê|­ÆS×l¼7'š´ñº¬iRÕIßú8•ƒ»8 ø× ¼_;ÄK—÷®uŒ½®’Xa¤¾"òKwùîÅÍJ¹Ýªx¥kȈ&ã_ºÞwÏ_M"ž£$²Íe—>µISöY²¬»–íú6(“w%¥†tÈÁ¤í†
+›Ng¤Šy—yËòÁ´º|ÊKyPÐmvJøé2ê¦,—*£žL&‰Þž×Ï“ƒŸ„p;–eDŠdåyåa_|œ½ï0åç~ˆRÔ&kö#§)Qdl¯uÚdvÒ¶Lâ7ÐŒBg¯LTSÌíËìi3bX(ÓK¯¶kgÇ TZ«¸=Sœ²ÑvÂjo@èઈÉf­¹Ãlö½Z˦R§©5GŸò†!u¯ÍÐôSI€x¬›_ª›¤T˜ôžV2…Ødl‚ƒcGÑñ·ÒxºØ*4¦S ŽçÆ~ÓŸ5•Í‚¨Ë†‡Á >‡°möe*k,Ol„{’X‡eFÚ«îVbh4•mèÍ©>Ô×läDúQaT>¥œQGûæÊ'4ŒŽÊd»;‘ ð{( ó3…Q
+®’3[„OX¯,V{§h> ƒáW’V÷/  µ·7ŠE>XŒdøéã_¿~øÁìà]Šxÿä¡ •©.
+ì9¼}{.Œ¹ÄuãڑOJzºú¥:ä|„<—æøPõ¡u¡ò¥ÏÒÚ°-ÏQ˜•ãLŠ‡( l"ÚM@]nR-ë"•k5úêuÛs§`Ç«ô•ðtŠ è'‡ÉlŠÅ+­S%ó ¤Üê%YY·•±õœãï³öa?÷•–”„Â~}ñ4ü8F¦!¬£GŸ~ÿ° Àšendstream
+endobj
+1046 0 obj <<
+/Type /Page
+/Contents 1047 0 R
+/Resources 1045 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1040 0 R
+>> endobj
+1048 0 obj <<
+/D [1046 0 R /XYZ 144.727 740.998 null]
+>> endobj
+346 0 obj <<
+/D [1046 0 R /XYZ 144.727 675.504 null]
+>> endobj
+1045 0 obj <<
+/Font << /F75 558 0 R /F74 556 0 R /F83 563 0 R /F102 750 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1051 0 obj <<
+/Length 1095
+/Filter /FlateDecode
+>>
+stream
+xÚÅWM£6¾Ï¯ˆ´Z‰Hkc0æÆ´jWí¡§¹íô@ÀI¬CÁÙ™m”ÿÞ×Æ$$ƒŠ3»R5ÒàøãyÞo¿& dA¢%a²H"ŒÒ”/Šý^laéÓq[hLK"O,®hÌQB9 "ÄYjöüôôðã¯p€¡þ?mìÖ§òs†]þùô;¬Æ ŽRÆÌjÈP·å™Ð¨Ú|:¡³JvZªR¨af¹"Áh6sp#²•Ã[Ð(Nâh‚˜ œ ħãÇ)¬~Ë Vì¡DÝ•uuØ«¬VÂLeJx‹Ë<(Œ€a§½QÔlSÕ¹nª¼{°°76÷Á.×Õ;áSƒTuÓ|ƒä2Æo!IŒX:@~\®Æ¹Í·[Q®k­ëý¾;v-rL¾-ÖM¨g³&o»]ÞxQÎżwÈÇtÆV§PRXoŒ—…
+Fv#q1ÈãÑÆ™%o }Jù:!`%qbåh'^4çJªÄ‹Ü˜Ü øµ:3¤p^IM€”öÔü!è]®è‡/Rï¤êÇ°YŒÒ@ü}ȵ¬UçÖ[w^ökÑŠò-D'ŠÑgã (ü"hÂ1Â,ºõU<c c‚RlÆvž,~ÓQÍf‚ÊÀB¤ÎEÖ9 ×]ü¥Ûƒð–•{È
+©WÔ¥E{t8™éìMãéL‡µ#34=¡7Ã÷“õ|†ì¬ ?ñàs¥wâ¢ÛѺ®5¬ùZ#­Oþ¥‡…w³_0ÔVˆªÙ¯–î‘€zHåe©ëV€ÝCîŸ ý9ªüù¢»4ز¦i(_ƒ1=¨­¦¤"\J݆'Ë×ê
+e¡Ç){¹OiÉä¦Óy;ß­ †ù4=£ø…îAuYƒ6ÓJL]ºŒßE7å¼Gt]úýúÚ¿ÛR&¿Œôÿ]S$ä»u)IøM]JX!é»Ê`hþ~Þåj+Õv¸üÝ-Þä[7Ú¶²¼€&îŸ<РЉF8"ðq Ÿà üjYž‘?;²Œ¢{Û—
+-ðåí;Š?<ÊkÁáQ‰”*}«ðÚ,çÊEÜsQÕ/óò ­ó¡(øÌS?¡þmè­alÇ
+endobj
+1050 0 obj <<
+/Type /Page
+/Contents 1051 0 R
+/Resources 1049 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1040 0 R
+>> endobj
+1052 0 obj <<
+/D [1050 0 R /XYZ 144.727 740.998 null]
+>> endobj
+350 0 obj <<
+/D [1050 0 R /XYZ 144.727 579.862 null]
+>> endobj
+354 0 obj <<
+/D [1050 0 R /XYZ 144.727 323.474 null]
+>> endobj
+358 0 obj <<
+/D [1050 0 R /XYZ 144.727 293.297 null]
+>> endobj
+1049 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R /F85 571 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1055 0 obj <<
+/Length 1663
+/Filter /FlateDecode
+>>
+stream
+xÚµXmoÛ6þž_a (&3+’zc¿Ì]—v°bk³úŠMÛZeI“èºiÿ¾;‘Td[©¸C€HæË=wÏñȇ¢³
+QÆCæùJ*ùQ-6š·Ø¡S
++“ˆÖ•]Eàå/¸2~½|íÇ‘÷»/˜‡>‹Àû¾êò?¨·ÌJÝzúy-uG»oL‹‚Ì ÇPX3¦«‹L¬K.šÀp¿ñç!§Þ³WoÞ^¾6d­PVª‹šdÑÊyÉ|$”ÃV6òk~#ÿÞç–ìëJmÍbîó”„1a’õŽòPªeUìwå¢=œ× §ÂÏÊÕ¹A“´[0Ö ­qÔ¤`„F¡™ L‚¯ÓkLL“~bLü‡‰s–„$bÂç@ƒ®WÆRÚ;Õ/v‘XÐS+¹Æ‡^ó‹j¯V°<n± v¯É7[µËØ+æئ JQ[ü™­>`Ñâk?§ne}÷xÄiã
+ìU2a}f>Rá£/Xã5"cûBîju3…سÄKye_=·2ÂÝow·î1†çˆ,&atcÞªÛq£fì‰ÑèÜ(OÚTU É€ÚJátÀ†O‹ö}—¯zFÏ>A‰§QÐóNˆRç$6XØ„XºÙ.™†Ë•ÜY,þ°Ô!6¹6å0
+«ÉÙ½xÊ=Ãá‘rD1èÓ9KIDS«"¹U‘M¾èļÜè_¿ù<ñòÌŒ)ç$ ™Á,ÔÇ š8;îævÜ@dþÐÕU
+£•ç'*O¬Ýþx·ŽçsÂÍØm'Àîµ”!ׂÈg `ßãÙ*W¨ÂÔk¹Zn‚~ßh"`ľÕ,@£ÚÊñ‘V—
+\`ïí}‰ˆ¿Úž»0B+ªå{£Æ \I‡NªÝ´6‰Y£ºå'¼LÙ„Y3U}œJ£çKiå6Þ¥²|P°¿ªðFƬ“Ü°„#z몱m]'Õ÷±ÊósÊP4Š)2 ¡AB"›IlÔI}»Î
+}—CŒ4=7º,XûW*Ž"Ñu×ÕOE'€¹0\aCUʹ­2ü´è!è"¸²G›îƒél¤‚›æÀ&<3cºËT5fÞt½s}cA¯ƒ#wáœ/ó:Ãz<-G“Ý} åˆsNÂÙ1çpîÀϸŽIKõ˜ü§PÉ4'ò_$îòÿ´jQm¬QwM+FÄ£pc‚9†¸®*…׸ü=ÜôÄáp`Â9>lò p°|-qËnª}ílvL!Q’ò‘«ÌÂR‚J Ö ®*êÚTJ6GýcŠJÛ=q€¹;ÐJÕcô×;tà¬c‘çS¤Ö>áÀ#úØ9˜ÐM/ý»¹ˆ°q¡1e9þ’zÀÇzàAâ(ö&‹—©ûNqz6t;Å­;”pàÅœE†É\´‡ñ{ð-4ø¿¶ :õ9åñýewjÍŒrCÙ7w·w“<ØÚ£ÜiyŒ
+ÃPêt†I2uþ²:"̆¾D’鯩Fkym?¨Úhýi<ÔZVá·iÓ¹éo9 B¶ösl?·]Vµ<=åóöáo«ÃA7„ 0…HØí¢x"È$9Ó³)Ì;åí $•endstream
+endobj
+1054 0 obj <<
+/Type /Page
+/Contents 1055 0 R
+/Resources 1053 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1040 0 R
+>> endobj
+1056 0 obj <<
+/D [1054 0 R /XYZ 144.727 740.998 null]
+>> endobj
+362 0 obj <<
+/D [1054 0 R /XYZ 144.727 716.092 null]
+>> endobj
+366 0 obj <<
+/D [1054 0 R /XYZ 144.727 448.729 null]
+>> endobj
+1053 0 obj <<
+/Font << /F83 563 0 R /F74 556 0 R /F75 558 0 R /F85 571 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1059 0 obj <<
+/Length 1148
+/Filter /FlateDecode
+>>
+stream
+xÚµXM³6¾ï¯È¥‘Š±ÍÇ õSí¡§Üú¾œ-‹8ÉnWùï“%Y¯˜d·ŠŒ±ç{ϘÌø‘aÌÃx³ÀOÓd¶~zf[øôDZK(§~3;>.(Mü˜Â“ùI”ê%?/~úÖ§~ÑÙrcV.‹¼¿¥óOír¥GÄ;Ú™N؉¼mý$æÄ«Ug§VrN¸wÐvy^ý·•¨ä<äÞq ,æß—þÆ? `ȹ•âXB)ñ¬ì‘  h 6è×ùóEĈ·Ü‰NX9ÚwÂvšÈlƉ¥ñlAˆá¤÷W"/DÛý8_„¶Èþ©5^ú·cYUý¨(»¼iDÞÂ+K=m=÷&ߊ~´jEþèŸEüþAô÷ƒˆ
+§Ünꩃzì‡câ6> õv_ 3Ø”•‹‡ÙzÉ" ¦YºÙN”ÛŠ>¶‘‹™0ÑiÒÉ@*Äú1ºÍ!ˆÈ:ÖBv_p¯¤2®Ó±ˆ7o~‹3 ѨݾŒþÿ€Œ¿Î ²kYíŸj ’hÊ)‚rQ÷nTW8¦l°,/y½—Ë‹æö°rÑ
+¹ÞCd›\ÜIùˆ‡yæjHˆÄÎϺ£€ûW¤cÜq˜}Ô¼^Ïn5mÓX‚?ˆU©*‘õê Ën)ŽXŠg¼®d7f¬ßïf̃ 7žð~ãä ýi%^ðžã!¦êhEÓ–µêÔËe@ž^+Fò R‹˜¿ìòzÈ^wBÛl†ÊË^] ϪÂÞWðÉn
++îŸ{Ábå3W7FÐ9×/aÀÕ
+endobj
+1058 0 obj <<
+/Type /Page
+/Contents 1059 0 R
+/Resources 1057 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1040 0 R
+>> endobj
+1060 0 obj <<
+/D [1058 0 R /XYZ 144.727 740.998 null]
+>> endobj
+1057 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1063 0 obj <<
+/Length 1925
+/Filter /FlateDecode
+>>
+stream
+xÚ½XKÛ8¾çWø²€¼ˆ9¢DIäœ:;›,dØña9Ð2ms#‰†“n4ú¿oñ!µ,Ó¶2ž¤Q4YõUÕÇb•ð"„x AY”-2"Æè"/ß„‹=üô¯7Ø-‰“¥±çÇUœP”& ¢)¯¹÷9èÈcjücýæ›Y² ˆ¥éb½3kÖÛÿ¿à˜´²-ÄC®Š®¬–¿®?¾y¿¤Œ…L5Ä(Ë' òã±üŸjµÄIð›ÜŠå*J€ÛÇVì–Þº¢µ¥à•¬ööe§j Ä@Dâ£'W€ŸB !ÂŒ¹å²²’sÞ8 Ò)þbp4ö¥ËÐjÈ¢î‘þ†Q%¶hP‘"ÿƒŠU¦ˆdt±Â1b„UQœâýàpœ ”áx~<‚ô(/xÓ<ÈJ¶¥–+|~þ›G—“°ÂÀ¹„õª¢sUà§0«z»Ç®mÌ9Në2Îóêsb&úb>ðA2ÖWˆvžþ]«ìç
+Ã鎈Yˆ†aðc±uôÕ$R•#X®Ê’WÛƃ,AaJ À
+JÎwU†ï§Uá¥U1õP)Ë­ž-º[îÅ–_À–ÏÇÏÇöoµém«±ýÝ\:¼°ú5ªæ‹lsƒ¡ì kæ#"÷"*e{‘uä˵ÌEˆa›™£Ðeæ÷Õ¾Íaõ‰WûŽï]°^²(ms^;„FN¤Í
+Œ!F‰±¢äŸu©£÷6”?‚7TôÕì4?w[çlN\3Ü>6°±éË5Ð 8¸¹Úº‘uüÖHÈ©¼¶³Î|ûÒ´O…Ц˜qä5o]””1Jë-Š«ll¬>X§«´GS¸¹[¸÷ÓÝÖP^:À²2vÂhÃ7¢
+ﯳÿqŒRŸoT$ô’àªÓDEñ×T$&nÏßõ¾…«ê"“I
+V‘?–É…ÚýùLŽ2r-[%)õ#šP9DÉpõ›db]²‚Ñ…dEɸ݂»U»ÜC|ëjÒu,uí,ÈÙ©3O[àђ㲙ðãInR—y©›Î¡®9F1P…hÊŒÎÑ :»Ï̧lŽæ³Ù…îù“Ôß7t¦;9]æ~°¿Níä¦vû$é(¾Lí%„øeé0¦ã, b]–†‘—ÚŠñ³Mªö;ƒÊ6¤¯ÄŽ‰ËÐ }œ¡­2ó´C††·ÈÏêeԲϠ5öó{yÿ,^Ç_Ãëö¯×Æßg´«,„Ò*õ‘ gQs'_£™-wÇB1…}SæþØÛ°endstream
+endobj
+1062 0 obj <<
+/Type /Page
+/Contents 1063 0 R
+/Resources 1061 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1065 0 R
+>> endobj
+1064 0 obj <<
+/D [1062 0 R /XYZ 144.727 740.998 null]
+>> endobj
+370 0 obj <<
+/D [1062 0 R /XYZ 144.727 631.668 null]
+>> endobj
+374 0 obj <<
+/D [1062 0 R /XYZ 144.727 499.813 null]
+>> endobj
+1061 0 obj <<
+/Font << /F75 558 0 R /F74 556 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1068 0 obj <<
+/Length 1668
+/Filter /FlateDecode
+>>
+stream
+xÚÅYÛŽ£F}Ÿ¯ðK[Š;ô…Kçe×{Õ&+e´ñC¤l¤`Óc“±ž] í¿§  ìÆãu4ÒÐîË©¢ëTuUƒGüáf ÙÄÙÌ@œ;£åöέ`èýVS¨I‘e3hw N©é Ë4¡Ácñúœö³ZÃÄ°#_Íï~~g›#qËÍŠ9sï¯ñgLY,w+&Ͻ{;¯
+ã=(x<F6•$™+@A¾LªæÌó9°Ñ VN "Lv¿UÝ#£CïŸR•E>ãSJ( 
+ÇÊl®?j[”½xq•SÆ
+~¹Y]%GÒ ’nßåúVÏR^;@œ.íàÆ©¿Ü”vPßk„¦)˜1  ?lJV4 ÿ¸iü~
+7»­øÍò”'<…70Í€J÷°1YÑ,ÊΛzÌ7ÞåG«ÊluÖOb)ü§
+ëøtí½!q¬!ôÉOzd*¤
+è싪ï"çdΖK¥§_ô
+endobj
+1067 0 obj <<
+/Type /Page
+/Contents 1068 0 R
+/Resources 1066 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1065 0 R
+>> endobj
+1069 0 obj <<
+/D [1067 0 R /XYZ 144.727 740.998 null]
+>> endobj
+1066 0 obj <<
+/Font << /F75 558 0 R /F74 556 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1072 0 obj <<
+/Length 1421
+/Filter /FlateDecode
+>>
+stream
+xÚÅYÝoÛ6Ï_`( ³*R–Úc];l(öÐeÛCÛZ¢l"”htÒ,ðÿ¾ã‡\9ñ*50±(òx÷»û”„.øC—(Ëâ^\.²$®ªò²î.’Ë5 ýr¼Hš§q±È }bp>ŒÎÓ,.‹ÊÈütuñò]™‚î8ÍŠË«ÖÊ^5#Œfs”$Iôž®I}7›ã<‰Þˆ®#}£fŸ¯~{ùTUqU¤nÚã ;ùïY™Dæ”UÔÐv†óèS’àÞv•‘¬…¶ŸÓV»~1Cytc~¨t=­“òÝŠ‰Þ ¥1úZU /¼fƤt“
+”Ddǽ…Ž’žõkÏæ.¢? $ðÊ8‚P\å¹u¤¡7Ó`L¹Ô¤wu×1VÉš†úqæ¯z†¢—mD½ëh¯ÝÝVRÒ­ø GÏc}Íw m¼,©¯Éš^ƒøª²ìêïBEEÙ¸y¤7¾£'U €¾š÷hˆúhÐMàìÚ‰zzó¯ô¢²ˆK0ärãJ³oÿZ:9”ூ¸ŠË²ôrFõãTÁYŒqáEˆôwÊz
+(6TRÃ焸&0àú™¶®C4ò¸Bé‘óÌ“Ó ÚšSâã©7ÄwsÀ’ÏeÑÃÃäZ4@•gcè\ÓžJ¹ŸhÚ^q¿àÕ<“Â0’3¥[BY²8„²÷íCy\ThIHMs!M#©R÷¦-é–]°£¥'k$b›mË8#&/÷/N ñV` CŒªN9×8€êÑAj¸{®*
+]±gb-Évsç§÷JSÒÄûy Î£!Ë
+ðhíyµq³è-¯qi„â~¿?|
+Ç!²ø §°”øÔ<Œ`(Ôì)¨áHóðEÕHÒê A(¦§ªÛ¢ ¥K'#£´„½î€Àvmmç«X)Á©¦¯?a”˜ÿß~íoĵ]d^b«í®kÚVÓƒŒ}ÿE€gË•
+–V…½#zSo«ƒ+wv¢š¥(.ÓA­Í»ÍJ|¹·-zCå1cïfw4HÈ;¥ïÌ{›Ô¼!Ûÿ€öû“kÖ«~€}àÛ`Ð@V†ŠX†¿€ªí²dÛBjVÃ~´½¶KÅþq{û¨I9­ukO™½ž±ôL€k9Àþ¼
+HŽÏ_ðótrÁ¿x{uø¸‘\Î ïý‰Oh«4/ÜwûÍãøÛ…³P¢‡ZQ óPyü=å_®Á®§endstream
+endobj
+1071 0 obj <<
+/Type /Page
+/Contents 1072 0 R
+/Resources 1070 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1065 0 R
+>> endobj
+1073 0 obj <<
+/D [1071 0 R /XYZ 144.727 740.998 null]
+>> endobj
+378 0 obj <<
+/D [1071 0 R /XYZ 144.727 716.092 null]
+>> endobj
+1070 0 obj <<
+/Font << /F83 563 0 R /F74 556 0 R /F75 558 0 R /F102 750 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1076 0 obj <<
+/Length 1365
+/Filter /FlateDecode
+>>
+stream
+xÚ­X]o£8}ï¯È¨³R"5^ íK´»ÕŽæaUE»m 8)* i#”ÿ¾×6$$!Å$UÕ`ðåžcûÞëcÈ
+hL`¨–[3²®aTðwÁ¨¨èPv5û:ù,tÂeMÈ´¯&ä|¡YVÓºŽ;åc؈Z5á|ù“œE˜,òÇ•ý‘c·Å1AØi:æQÎÛ*»C‡6Ö`‹‰»%­ã? Éj¯Dƒæ<Ô&iœº#²ÝÚ]+³ÊâÈ•ÙáJ0û“Ï"/ã©¿Ê‹?Ò8ö’@Dˆè{¸ÿwâÇä¹ÔǤ³ˆy>yó²d“ œ¦£±H‹,%4v^d,20ã;Õ¿Œ¸§Lð0J½@µŠ—ê‘WfÞìÕ[ð/íKØ:ç–éE”ú^$Z//ñ›ñÈ{ײ?oqÅ ø\\¾ý¹Ÿúy
+Üùd–Æb‰ÅR«î°¬ìÃÇ°=`]}ØÄ˲ô 6‚b/`k
+5üÞLŸ†ƒõiÄ<Wq'½Y7ºä8DƒFÂßx²³4‰yR”?W^Ê­Ñó¡âëg´ch$ŒjÒDU$мl[Fi²P¨Úét•®> ZIws?݉(Œ03h0ÒY]×½3á¸J¡)õÕ
++'{ççÑFÌ8ê ft¢­²èd•ƒÝûǹŒ4#\pm6]ÿ= “´Pvµì-»¸ øÆFƒ;u¿G†5\ˆ5ÜYÌGÒmUbî%RmÉ»"U×Ï
+/LªU…rÔ’IÂ6…è‚å¢NH–FÙñ–˪
+ȳj½ôÞ Æ*ƒÁF¶a|´ô¯ÿ>7têÿÎsµ5ÉÄd‡{fèËAä–èg(3û ý®˶¨QåSí•ŒŸĵ–wOÁâÿû‡š_¸”º_=§˜Æ¡Ÿ*Ža“¼à^€z„½èÔP¸×¹Y—JËDÎáW¤³1köd2˜_ `4ÏòcÔ¦ëB×î/q%/Uù·‘9ýƒù^" 8‰®¢¨lÌͶ=žkgI»
+Ý8^³ç‚ºÌW>i_„i’o¿l…ý
+endobj
+1075 0 obj <<
+/Type /Page
+/Contents 1076 0 R
+/Resources 1074 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1065 0 R
+>> endobj
+1077 0 obj <<
+/D [1075 0 R /XYZ 144.727 740.998 null]
+>> endobj
+1074 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1080 0 obj <<
+/Length 2544
+/Filter /FlateDecode
+>>
+stream
+xÚµÙŽã¸ñ}¾¢_È@¬QÒæev“™d›A#› “Z¢»5+KŽ%oјO]’å£gÚA-²X¬‹Å:hu—ÀŸºSÖÆ™Îî2›ÄE‘ß•›7ÉÝ,ýñ“šØeÆW—ãêÒØ8wâ|ÿæ›÷¹Ú±±îî~M¸÷Õ¿#­K•$Iô®­ü&,–:M¢õB§Q·ãÉð(Ð?tå~Úg¿o|ß/þsÿã7ïYÎ0á¥Ö±v‘¿¬{`PäQÊ¡îZœdQÙµƒ¯[YªÂ‡$ÑmëÚ……Š?„ŠçC'_”¡­–Ýz X%ÉAÀí®+Cß×í÷ cn£'Á~Z¨$ò-`§ôP]× (¹Rq‘¦$9FŸ|94Ö÷éÑ‹æ~» ()NZFb¢.¬=!ôó"O"´ MP@Äþµ®`ŠhMF†ÏŸZ›ÝŠ7¾|ÞèË_üC€eË€áѳ68)A50uüv»‰É™}qã+iu`$>e$6ž+hq© Ê«
+GÆL£O:Ø,p”$ê¡Mç«>ú…žìATJA`Çpãù:P<Ð7{™vkñ´ôèi:)b“eâÈ”±àcí~ãw~U—oû§Kç,ÒØY-;~ò( ,ÙE8C%ìj1€IÒ8Qʼnð¤Tm
+Ù7à|<yª‡G^gÓˆO7ËÉÂP Æ1p 'gßô‚7eðpþQ9î¯Âá B/Cµß…þŠw×-Ü€ ‹ª<6ÚÎ úÝ
+P»ýbi$«àJíqzþL!×Å6? q k…H‡n¿cP5e œ±‡!Ä÷¨Æ ‚“•ðÖCêV$ØÝòŠa7~¨K¸``V«3°¥Ng×ÊjˆK5¦F\a`4FSÈ ¨8,Â2‡pzÿ¸GW±H¸>'Áv€ïvd#˜b¼n„!
+¾wqYÏT8ø(Ñ„xŸ¾~U¡
+ OU˜Æ
+‚›1ƒ^?}íb“N¦%w¢Xéø”p K:–&ÁÓC¥>#hþ»m)K­ßÀÙP¶!g¦l3ß‹®tY4¤) Yº·—ÒÃÕÈbW¸“³)¡¨(.rR–¤H!*T¤sSvV-¥”_ð+µNzYÿ¦Rf'H}-žœ,pᆣ•_˜KǪéïïþqO'l¬ŠÂJq«H‡w´
+(TýZ÷¼f¼Æ¨©Ç©£Ÿ&÷Í Ö& %ƒ&*Î ©ñÝ¥‡›8×XÒŽ(÷âØ_ôUÑ_ó—‡=ù»1Ü^ì<&B(¹NÆ%Øâaš¸²q5|*›žˆÄämènHL
+ÜØeùé]ïÆߪÐø5iBÇû¥Ä±ÎJjK“äÿ•ùÓD½"ó¿­×ŸömÖPV³Ä€™LT ¼…R² ¾]û¦W2Ô¸çµõAšèWHwÆãù«Ô'³š+Ô¡zOçÔAkülßN?ÓØ:ªŠÞ}¦„}=›ÙåYZìÜȬ¬Û³¬|¾uz“†HFæ&¹QIw›’3VÚŽzµçjO¸·hžÝªùL"¥oT>¿Yù77W‚Ÿ[àÜóÊ~YÔ8²kµ¡ÊTœCüru˜›sª*‡}*?-8ÿ¿¨·òendstream
+endobj
+1079 0 obj <<
+/Type /Page
+/Contents 1080 0 R
+/Resources 1078 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1065 0 R
+>> endobj
+1081 0 obj <<
+/D [1079 0 R /XYZ 144.727 740.998 null]
+>> endobj
+382 0 obj <<
+/D [1079 0 R /XYZ 144.727 716.092 null]
+>> endobj
+386 0 obj <<
+/D [1079 0 R /XYZ 144.727 583.449 null]
+>> endobj
+390 0 obj <<
+/D [1079 0 R /XYZ 144.727 344.147 null]
+>> endobj
+1078 0 obj <<
+/Font << /F83 563 0 R /F74 556 0 R /F75 558 0 R /F85 571 0 R /F102 750 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1084 0 obj <<
+/Length 1639
+/Filter /FlateDecode
+>>
+stream
+xÚ­XYoÛF~÷¯¥ŠpÃ=H.‹"Uì8MÚ¦ ·iÑôW&aIÙV ý÷Τ)š1™¬å³ßÌ|;3»xæÀžaÆOü™Ï|¶ÊŽœÙ9 ý|„ÍêRäù Úƒ6u9ò)‡CÜ äœã³£'/`‡ø¶VSÏ¢-â:Áü¿³_`Ôqxž%9>6Sö7ûGfJG€mæØPº†»Â°‹¼ fDq:úJÈð@c›pÄ|¢eDç0à8ÖË¢¸˜Û€ÔZωk¥þˆÄ:ܦµþ¸œcÇ
+Ó­¨ôw±Ö¿ÇE‘Š0¯Z€EµlÌ‘ÇÕngqbnŠ²NŠüPJ ÝX‘i­µ^Êk•†•‘òÁqH*ô¦Ø!·»bÏCÔq5²mUßE–e<0SÂÍF„f«°îÁ­]K”;ý%òIiG§g-䀩müF¨ÔÿmÙÃÁ¯©¥iÓñeC›˜2cÿjKÿôöíJéoÁPÀqwƒ¯8Æ! "eÜÚ”ÅJDÛR´Äjçz׽ѡlî#ìR3¿Š‹mé=bQŠåN·—j__ÛXvÜÚX~‹kݪ‹în%yU‡i*¢æ&Ülc æÀÙlØo ?«Åy’?/VÛLä¤à1bÀ£¹Í(·ÞÏ9xœPi' ô2Q ˆ•Ôzà*©cÝ
+QŒÌ9yyzòëëÓ4››æR/CñÜbCÜFÀ­Öø²' kÑOpÇÄÁp égp.÷ÌüŸÂ!u@!`¼)âðkâ!‰‡Ú÷§yôÇúD†›¡PkVôB-‰ÛR4DPL¶TpZD ¿l¬ x3=²Óí<Ä\<jÄŽd½ '™% é ݉ég‚y½ ž[$ëëmZ'¹ˆn ­kŒp#{SQß±ŽZ.²M½;ȯ-á¢ØW)ŠÍ& ɧ²R?ñ !ƒA*PGòÓk´ôG´|ôã%ÝÞTõÓÛÔ è˜wº)E®¯“)i÷»]¶,Ò
+4Å®àv`LcM/Åe‹6ò
+`?ÀŠ®’¾oÂÕEx.Þke~/~†ßû›x¯9ÛMù¶Îë6¡P~²à¾bcì·é«Æ‹‘4Ì–Q¸„J©‡ª+áŽxS‡Ü_'g‚QŸ 8-¥x[,¡²;Ѽ‘æ<€8=Æ<!è.ÏËRðÄhKÒõ Æ¢†ø¢Õ+z’2ó‘ªÉñ²¸¨'ö$uµé,äÐ¥„«(ûq1tòÔ²žxw\|¼\\× -v÷ àÔáš^Ê»eå«l^EŸÄm–õäûä_–2DÚ„aåË«$ªcÔÙOÒò£Rm‹ä<®–݉ L7=cÀxŒO
+eÖ
+endobj
+1083 0 obj <<
+/Type /Page
+/Contents 1084 0 R
+/Resources 1082 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1065 0 R
+>> endobj
+1085 0 obj <<
+/D [1083 0 R /XYZ 144.727 740.998 null]
+>> endobj
+394 0 obj <<
+/D [1083 0 R /XYZ 144.727 679.659 null]
+>> endobj
+398 0 obj <<
+/D [1083 0 R /XYZ 144.727 474.885 null]
+>> endobj
+1082 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R /F102 750 0 R /F85 571 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1088 0 obj <<
+/Length 1818
+/Filter /FlateDecode
+>>
+stream
+xÚ­ZYÛ6~ϯ0àšå!‰R/¸GZ4}KE$(´6í"KŽ$gwkø¿wxèX[ZÑ+#ÀZâ1ßp8ÇG*d‚á™×Eœò w1
+Ã`²Ü¾Â“ týþŠ˜!ÌcÈç.<wtΙ ßóàÁE¶ÇœþÖsü…,оyõÍoÜ›(ôýÉÍZ¹Y½w>æ.³<Å.KWÅìãÍÛWonj!m½@ 9‡EÍ A!è8—}ù*+Ï°Œ˜FÊ e($VxË8_öàÕBNa\¤m>wÖðY[þ[)Fr FBØÓ Ôê}ŽQÀ¨ü1=Y>#³™Í) ?Óh·)¼0ìûÍF`ÕUÞ Ýœ‹qvI´[‘–Å·³9òU5I µìZ-2ä·oŸ®‚»“ÀŒ¾Ë».‰à°aK`™ÇQºIÄçsq^ˆ8÷Íدµ˜G Xí²«Èöy—ö4D”3?ÚÅãööÅ%(p™õÄçýar=Þã 'Ús„}þ¬1(Do@[Ò¶Qy—Çé¦Cšv®Ê·Z7lg§ž¢´Ú·$*Å#—>gxOL'Jûˆá (n;Øj²ÎEÁ‚¿ñ…9„Dï¾3†\î6û.­:°x¤½‹pŠ¸Œ0µD_uý”Έç<JÈÀÙ2<îdkÝ5½M#„[5n™m·‘ Õq'‰n‡ Ú'¥nSÝ™A3‚(O¥¨ö­(Šh# `©uHCƒHWgèf5q\÷É~%ÙFÛîÆ4öÀþXëF#;M”%°³‹¤«}2z`'.ôoš•ú!É¢•X™­‰ôÏJHœ4.ã,Õ-•°óy‹2yÔ/·Fê.Ϥ=¿Ä
+Õ{æ£þJô ¦äŠ Ǻ\­ˆz.©] Î×ÄC~HZnõ«X&Q.Þe·û¢üEoÊlNNsÚA¾›X˜½;"_åÌ:q¿êPÔ(0'â^XiJGjZe›>5«þ&—È™éæÙT”Ùà9eëG9Ó^?w¤~ïÞü½¨·î`ëãR‚p]_Ôz“ì^䈊ùrw›=~8•Ç|y:GÜÛ”àvñëÜ#þD`ýl5¿‚)Õ¾'/°d0`I)z‘¥e¶ËÖ‡)Ñö[JŸ9$4Œ=Vžå+Õ ¦¦1´2b›ÜÍ5{ƒ
+ó‰av¡^Â\ì—Ë"Þžb¶çØ’å].ž²àÊž¢¹Ãd9ÚÕ×éÇc³P?E
+ùW#Rœ_L¤ª¸ÇòBf—ˆBD¸U"êÍD- /¹ú+ÚšÏ1‘ùÈg¿u¡"ošüì´¨ÁoÌë
+<`CïT( `ÞéÝðÿYhŸ#endstream
+endobj
+1087 0 obj <<
+/Type /Page
+/Contents 1088 0 R
+/Resources 1086 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1090 0 R
+>> endobj
+1089 0 obj <<
+/D [1087 0 R /XYZ 144.727 740.998 null]
+>> endobj
+1086 0 obj <<
+/Font << /F75 558 0 R /F74 556 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1093 0 obj <<
+/Length 1410
+/Filter /FlateDecode
+>>
+stream
+xÚÍXÛnÛF}÷W(° P@´Ý—K?ª§h€¼¤FÑ¢î%’Š¸l'ð¿wöB™’’•´0ì½ÏœÙ¹ì1ÉÃÎQ@ƒQÀ1
+C9š¯.ðhK¿^·…ù ‰€C¿cqÂ|‰&¡Ã‘¡Þsswñã{8 PïR³õ.þÛ£¾Äãî>Àª?’(B¯R¸OÜ–{¸JêYù¨{étSév ã¯W—þ%Oˆwõüƒ“ÒÒ1qb& ñÃF9J_ý0ÕM±És£¶¶“ZéôeâËt<›³ñºuÎ`y(::
+endobj
+1092 0 obj <<
+/Type /Page
+/Contents 1093 0 R
+/Resources 1091 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1090 0 R
+>> endobj
+1094 0 obj <<
+/D [1092 0 R /XYZ 144.727 740.998 null]
+>> endobj
+1091 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1097 0 obj <<
+/Length 1317
+/Filter /FlateDecode
+>>
+stream
+xÚ­X[oÛ6}ϯ0°˜åÔ°^°®Øž†ÁØ˺É¢mÁ²äJr›ÄÈ)RŠl+1å b^¿sø]I¡Ôh„(‹‘ -¶7p´ÒSŸo[B\PÝ& R7(<0kîæ7~Ó8ôÿù²^:ÿcŽÉäßùz–$87³ˆ ·ä "4VKós—¬Vit0Í¿>ý=‹ò4žLÑ8ß©l2厛EOïÐäÔI"}.4ðt|Y Ëlg
+Wƒ‹—TÐ…|ú`˜¼vz?™ÀAÈ—O…í òç`0wÛèüÅãsñ(ºâ×Q~ß+Ò­<Ù“½0”uE–ªÒBMëqös‹q‹zãvŸÀP˜*²)€XmMo‘ï,¤3¶Ñó¦ó=¶ÞèÌÝÚ@úÿSàƒà-Vxˆ-¤T=‡ò‘ÜîÉßÝ.¥ÿx§pX¬™ø~Nî·èÖX×á¿ «õóÔ¡‡wz!~÷ôäŸ(ΫÎ9g”êÑWØÜ|š·— $Fé”u¯5§¿í5'@ÚÖÂÞìý¦ÃvÈþRÝ©U’ýš/ö[•U§Ð]9§ u!è(Ф ñç±q¸Ø„+`˜Áq¬´-b•-UÚ‘°pSU¸™ 86¦Â4/Ú‰|Ùj½@$åë'9æH€v;ªd«@o@$Õv'õýÐÙûÛ½Pßʇm4K²D{^¾1v÷/”x”Y²¼ßk-.“LÕ¹*Žã¼ª½É ¥ªj«;Oÿh¦ô"U‘„Ù*5,Ôך#ã&Ô׆P;0ˆ»†T¹_,Êd[¢CÉ ›f˜V®7ˆ ¿†Í®P}lÜ°cãzƒØˆkؤª,{ظáÆX®;ˆŽ¼†Îª*j6óy·wwCª;6ˆYp 3“´—Ehµé2s㛆UÓˆÁkEÑÁ0:áE]6QäÃ¥)½ ½©Š€ËöX—²æûŸ>¸lùÑ®ÔeQ@(·B!Ð/.ýT'€1b…šµÁçk嶰ÎÆ
+¨“Žà®êK$€H¸5‹4,]ÊwU’g?N¦D¡ªW<‚`!<ä7…i›ÇûT×¢)& 0ÈuÌE½ØœiŠ>þ!nwuŠ¡
+èl—'YU&=
+Ódl`ÖaiV˜8ÀTk¤]˜Ùʾv׆o¬ïéÞuµ7õ8.ÓÚ…Äß’‹~ûƒÑþÇ×Á$Àßq²¼Ø†©Q‚ÿ¥õ”E‚€$GÚÕ/½enõ{TëzÅý®:hM²ÞwO¹råßTœ”»4|(7ÉΦlë²7³ÉÞÚ?Ý—øyÔ¦úÙ6Éö%sþ¼„¯H¥ù÷3^ ãZ-ÝÙ Ðm•CU²Î‹Êâ#ìTq¦2ßsCÏý Î߈͡¶«R³4)«¤mýîñ¶êÔ J>àN_êHIýã‘û|x9ÇÃzãzu,Âb±÷)Ï}¾ÃôÇ¢¬y<…ž HÒôÅ€<"×D÷ùLój@r—ü²_/|¨^ÎcâñT+øùøGOuí·
+endobj
+1096 0 obj <<
+/Type /Page
+/Contents 1097 0 R
+/Resources 1095 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1090 0 R
+>> endobj
+1098 0 obj <<
+/D [1096 0 R /XYZ 144.727 740.998 null]
+>> endobj
+402 0 obj <<
+/D [1096 0 R /XYZ 144.727 338.995 null]
+>> endobj
+1095 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R /F85 571 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1101 0 obj <<
+/Length 893
+/Filter /FlateDecode
+>>
+stream
+xÚ͘Mo›0Çïù¹TJñl0~¹e“ºVSOSnÛi U‚Q I;Ôï>›·ÀB‹MÒiª”6ÏÿñûσѪ?4FêÐ1ÅpÎÆËÍŽUÓí•]\Ï„buÜÑ8u=¨ËÔŒpÝçË|ô髺
+ûuR'A\Àzƒ§µeÚ™êO'^lëtœÎtôÎè4»dœþdDlêlÙ*¸=3èµw°*> …<@ø»¡Êú?Ǩ
+åõ„jÌë•”i$Ó ¿ƒì]…Ö¸‰ÁÊ™%Aº’QªC7¥ô“­®ÍöBˆ8Í8ðâÔ–‰«,ä>¨\¥48!LJz Û
+e¶fW§U&¬Ù´“6•æ¶DÚ>«›w­CóÑ3xžÕ»ozÁÙNÏÐÇ9=sþÓ3×ÎéÝ´V†ÿ#ŸgÞGû<#gû|ŠžíóU$fnóÉr«lÖÎäY—¥
+ûçU^ÅÇqIg.’dæËån“UEéZÊ's^šð«ç]¤EøùÛë á炳äå}¤ ƒE´Z„IÐè£Ú_3s’ÈdÙCgæûÖõ• ++CéûZ ¨×ÕuG]ŸêѤÎMѺŠÁ>ˆš’¤VÄŠ%yçÐXT!=µpåÍÈ Úî¡N=Ò¯SÄW¥üAøéºÐAÚéô™Æ«Å<cŸp¼âkÐ4i>ð!´„F7óz_×àñ””s«cçQ˜GŠmájË—+u·¹å[|•4##¦îC¬½ü³¿˜üendstream
+endobj
+1100 0 obj <<
+/Type /Page
+/Contents 1101 0 R
+/Resources 1099 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1090 0 R
+>> endobj
+1102 0 obj <<
+/D [1100 0 R /XYZ 144.727 740.998 null]
+>> endobj
+1099 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1105 0 obj <<
+/Length 940
+/Filter /FlateDecode
+>>
+stream
+xÚ­X]oÓ0}߯èˤV(Æßv*$@ð\‰à!kÝÕZšDM6†ÿ¸‰“fóÚk@“Ö4±ï9÷úÜÓØd†Û?2#œ#EÕLqŒÒTÏÖû+<»m}¼"ý&’Š·×‡ )¦Û Ž´Lݘw««×Ú ¥íÿÕö8tµù:§ŠâÅ÷Õçö©˜i”Jéž2…(éG|#Œï³Ã­-ªìðÃnšÝ"‘Ï®š~æIܤ›š–»H=yA ÂÊcü¾DêG< EŸ‡"ÉÔ‡ºÆꇸOÁ©Å.Äš¤^›ªK\óž ÀMYu ]øD’Ë
+
+)œöÃ_=§Ÿ%P
+¦‘Ì] ŇuL/õ‹šUÕÆlÝUmšee×ÙrW–‹„Ìï~]C%Ãð…n?ò7Í©&ßvBVk¨0òïVà¥Â(Dˆ-ç£rŠDgPä b3ë2¿ßc]˜‚Ç
+C‚4(¼g8(è&?³B®(gj±BœÂȼ¼HäT2ñ t*\qÄå¶jäF§z¢Z²µ98yÃrÖ.‰Á0¼›²ù?ùAÌsé¤v¾¤Nn1°
+ {¶²±° {¶À
+âá/ÔÆ!XøÖKJbøKè2·uó ¾M“¡C‰¸ÓŸ~sÝbCµ.À$
+@:=aá½ =JǤëÎMbÂÀ7Žd
+C8€‚mÌþÿWa pÉ>º­ÇÕûÕp–(–|–È~Xà´‘(‚´ÝQ¤?fŽ-ü1£NŸF&ºGôôó[Î%rendstream
+endobj
+1104 0 obj <<
+/Type /Page
+/Contents 1105 0 R
+/Resources 1103 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1090 0 R
+>> endobj
+1106 0 obj <<
+/D [1104 0 R /XYZ 144.727 740.998 null]
+>> endobj
+1103 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1109 0 obj <<
+/Length 923
+/Filter /FlateDecode
+>>
+stream
+xÚ½X]oÓ0}߯èˤ)Æ×ßFMH€à¹oÀC¶¦k´´‰·Œ!þ;vâ´é¨Cª©Rc'×ç\_ßã/˜`ûƒ 0†$‘É0ÒZMîVWxro?}ºoB9EB2[îùS®¤ÊRB;›÷³«×m´ýŸ-jÓÙükD¤Óï³/ö+Ÿ(¤…p_#¡Á›|Êòä6Í«´œÆ㈕Ʒé ƾ‘{jÖ‚Ë
+ã³IûÊEÿ]˜†ðIo]lVIîb<ï)ܳ"P‰ÈQl«Ô,Š&º77´on³Òü«µ^u7€Ïˆéyâä¶Ø¥ó¬*óägõù &€£îîs›°›]zò¶ÞòŠ¿îy{=cç=³sbñãijÚgçÜs¿ÿM¬Zb>0$Ëbcª‡z¿g=
+endobj
+1108 0 obj <<
+/Type /Page
+/Contents 1109 0 R
+/Resources 1107 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1090 0 R
+>> endobj
+1110 0 obj <<
+/D [1108 0 R /XYZ 144.727 740.998 null]
+>> endobj
+406 0 obj <<
+/D [1108 0 R /XYZ 144.727 297.525 null]
+>> endobj
+1107 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R /F85 571 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1113 0 obj <<
+/Length 1041
+/Filter /FlateDecode
+>>
+stream
+xÚÅX[Ú8}Ÿ_ÁËHP ×÷˪ªØ•º­ª>­xÛîCfÅÚ@"b(SÔÿ^;q22ƒÍ0ªFšÇ>çääˉm4€ö ¥@`1¥äà~yßì¥7Èw!Œ
+àMîòm:Óe‘%åÿÚrq‡ºkÅÄýBµ¾"Û”ø±Ö­K½Ú”Ì7‡ê±ºùÚ4âj9?º"œ4©h¸K³ü{¿~âDWÄ‘?±Úh€6_Š“L—FïÝi–ÎÍ2YÓ+W/‡-:˜›r+ˆ”n“eê+¥ß§à‰bÁOšáyjA²ÄɺDb…éi z´I—­ ŽÀPy¦
+˜é¡Px8Ïóܬr“º ÏhŒ/Èè–ÊYäÛ&zW˜=BçQSá˜\Ó2&¥i\
+aú
+))½,¤ioDçR¿6þûB‹È¦¯Ò­ ÒøIA×Èh¬^?£ ¼ZFôÛ2šàg4m HÄú~mç±q Mzòs@Ù³³hOäüñù¼Õn½W€õÞ›‡<âf/²é
+ó¾î&ÉÀ'”׈p,ìã#
+!nG±ÇQ„Ô¾Ž¬ÍîœA ¸òÝtYc®ÓdVŸ¹å‚;Þ=ÔG3BÃE—€¢fnMº£§dngUaßk–ßo–éÊÔÀ¹Žs~Š/`¯È¤Èu]Ƨ4VŒ€ Í")]· ±|Œ­ßÚES¹hèv„Ù0É6þ' §j€œÍ>;[´oœûUÑÞ|˜¶ÛÄŒûÎ=ÉHØ™³
+»;ÈíM6;È
+##iÇUUÕý¢}¯ endstream
+endobj
+1112 0 obj <<
+/Type /Page
+/Contents 1113 0 R
+/Resources 1111 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1115 0 R
+>> endobj
+1114 0 obj <<
+/D [1112 0 R /XYZ 144.727 740.998 null]
+>> endobj
+410 0 obj <<
+/D [1112 0 R /XYZ 144.727 185.674 null]
+>> endobj
+1111 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R /F85 571 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1118 0 obj <<
+/Length 909
+/Filter /FlateDecode
+>>
+stream
+xÚÅXËrÚ0Ýç+Øt¨z?V¥I3ídÕ²k»p“xjlvhÓ¯$„c@É!É0=î9ëÜ+  þ ¢,‚B ”\ÎOààZw 7„0¸ úÙÓ9&LA¤~ @reÆ|šž¼ÿ¬'p ôßéÌ^ýbÉøè×ô«îe ç¦1ÀrC~"B¯Ò™ù*ÊÅ<Éëì!}|çfubŽÝ´1ÒÄ™ZÇ»ñ1”uãOê´™•EcBo
+†ßÔ— ½Ý»!P¨ÏÙwërý2³W*.Û+ü,¡6B‘p¡š¬¸ˆöÈ@8aŒJZ"Ì:ß+v<a"î˜r´bOŸë%‹Ñ9 .Í.AF­y<qT¸8çQâ({ˆs¾)ÎÒš
+ãuDÇRGA¡ÎÇog§ê>êŒ'uÌþ³(mèñ´aáÚÜ܆,¹ŽPx·•1¶Ýêrg<Eàe<ÅOA$ÌÉé´½êÖUŠÓÁ˜»ažËp$öŒÓ¹o@ë[ðU èFFRÏCró†ýòìiendstream
+endobj
+1117 0 obj <<
+/Type /Page
+/Contents 1118 0 R
+/Resources 1116 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1115 0 R
+>> endobj
+1119 0 obj <<
+/D [1117 0 R /XYZ 144.727 740.998 null]
+>> endobj
+1116 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1122 0 obj <<
+/Length 946
+/Filter /FlateDecode
+>>
+stream
+xÚµXÉnÛ0½û+| àÃ]"ÐF.è©ßÚ‹¶„È¢`ÑM
+›0Ã,êAá ðý÷‚ÐJú4F#៊Žà èï¬Ï:Ê®$BC vk„yÉ•m-Ó°(æ‘Zî6Ff4Ët¬Ôãþæ-:³å™høðK>Œ
+ÓBvlÌøaèó§¦9ó‡8øs„Þ»Ó`³wXXE‘Þ„Ûubv(
+Ì€ Óᨦžq0ù[f'$x$ w ©ÀÍy}J"s²<n8ø`ÃÊ V0^y>Rqð#90¼PwJG !Ý7<ÆC™äp㘔0q(_mè…Ì«ÀQ¿º½ ÔA«¼»vñ‡ñQCÀbF±LÖ±®ÀoœÈÍ Zy0s—Çw“§xL.ÐÞår²RJÑÉt1® RÏódÎM³õeD-#ð¢Zf×[ÚD<KM_ñzA« #SÕìçóHKe“ϺÚ÷œ3Àl_>w¦p)æga¸WPB`½Ša!K½•zï‘•ª?wõ¥AB¯/?-»ÒmÀF8ίÎßMÙ$þõù»É~ÄåˆÛ½×-[<p>äD8à/UºÛdÎÕ¡++…cð·»T¾UÞû" È1 fJËc #BÀ6Ã6DIV4u”¥Âüfyº«»i^W©M’5}#êu©éõ±hâ¶Â–¹ñ±¼úo3¯r­,mGÕËMX’U¦ÛÌü‹\[me>—¹Àu]\.«T…º\jo숾T ÷¨EG¨ÅÐÑL--ü÷®¸\4’Ì:SI‚_‘„Ž÷£»0.W’è!=
+BàZ›ÀÍ“ÓåáãWgòiÑ>
+endobj
+1121 0 obj <<
+/Type /Page
+/Contents 1122 0 R
+/Resources 1120 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1115 0 R
+>> endobj
+1123 0 obj <<
+/D [1121 0 R /XYZ 144.727 740.998 null]
+>> endobj
+414 0 obj <<
+/D [1121 0 R /XYZ 144.727 673.117 null]
+>> endobj
+1120 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1126 0 obj <<
+/Length 999
+/Filter /FlateDecode
+>>
+stream
+xÚ­˜Moã6†ïùº°ârøÍ¢(‚mÑž}ëîA±äX¨l –¬n¶í/iQŠlk#2ÄŠDÎ3ïLdB„ÍDÀ’DF’a¤µŠÖ»½˜G¿=€[B9EB2s=ò0¦\!I•¹`H m×ü¼zøô«Ù 6¿W›óÒUúç‚h¦—_V˜§<RH aŸGBƒ[ò({Ú”õ¡\Æã.ëö¢,NU{›¼pVŒØ™‰ÁµãqìÇ«2ǃ ÙäËþPðƒ>êy‚$>¼ô¹˜È« 2K½±ï¤lz‹Go(󆾛^X9"”wXîÝ%Ç—|_&ÇòTm[Ž4è „èÂaŒWåïÔð}žÍ¤êxÒ—ïÓlï@À§í÷•Rö³]v|Éöëת>fõz«ÎÐ'o†ö‹ÁȾ— ip«†îö.ß÷÷ý«'|M‘mêV$v (ë öO¨€0„e…`@Fî2Eü…'h£éâÉ b4®@< Ñ•BTå3ÒlszE^Õ¿ÿ3¤ZYçûåÙ‚uäë
+î¯ï ‚.n™®°ÖNUXƒŠ‘!Cb|À°;_;ÂÞn@Ûœâ»>8ÓWzS>äu¶›LÆyL< Æ„Ÿ#}2¦¦Õ¾Â^ã&yΊ>(1-»î¿„@ÙåùPw6M/7ºË}5#‰G½Î±ý§õös–|nï%i“ì×Ùåâø"/žu“4PÄßm&ëÝÇõ#™‡æ¾êaëÉM3ºÀC{ià“/CÜÝ&½e°‡J¶å:Ž(Ù_Êên)Ï­e¨åù5¤p Œíßßž.äôæ!,ÆÜûöñ.Sð‰;‡|d6‰+*ñfzV7¾Wì^7óê[ñù2úòÕL¾|ùçUÞ™×¹Óªf{uQ:4­Ó/÷DÖøÞÄÎ<5Ì&X=5UüPÖÿÚ¯ ?µk€!ÊDk#AdSŠ(–­Ye¢ÆfÊ­¶™ÛÂ[¸@ ™³Ÿ”ÕˆU¢ë<XIe¾\Ž‡²Îû–1¼¨G¦ˆH9ik·dwHOEÖçK›,Ð6õ Ñæ“ "Z%Úx [,>cLúMümeˆòGÇúë­iÆI¼[•W­Éc–¤í•ý|~m?û@‡$ab ]YSg_Ù)=¬O»ó¹ŒµêÒznníKfŠD‡dÕagõë-ÄÔS3å–n“êÂk# –Vx`4Ü
+¯Y¾HŠÓH`„"Eàº~CH¤i²Ï~Yõ§Ë&X §â‘óg€íátwðÜ[ïž5»¶ Êìuy¨ý?†ð̹endstream
+endobj
+1125 0 obj <<
+/Type /Page
+/Contents 1126 0 R
+/Resources 1124 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1115 0 R
+>> endobj
+1127 0 obj <<
+/D [1125 0 R /XYZ 144.727 740.998 null]
+>> endobj
+418 0 obj <<
+/D [1125 0 R /XYZ 144.727 170.238 null]
+>> endobj
+1124 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R /F85 571 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1130 0 obj <<
+/Length 1958
+/Filter /FlateDecode
+>>
+stream
+xÚµY]Û6}ϯpÈE­©ï¢XÔIÝîI3ím€mh™s*‰Z‰šŒ×Èß{IÊ–?2cXˆH‰â9¼÷ððjLFü##nLãQxnš&£¬xåîáÑO¯ˆ⇾Å´Ï<œø~âÆ>\7‰Ròfþê?ÂøÔM#4_é‘óå¿ñš3ž^âdrÉÇ?Žœ¦â™øÓóhfúJšëôöÎ4d[—,o°;¢±¯ñŠÕLñ¥éÊV™Æª–…hÍÍ+¿Í~Ÿÿšÿ<¢ ,$ FêÒ€jJ3ý
+îï1Á\@h7¸G´VœÕN%¦Q°¬–§
+I $é²Oüà{KùT(!ʶêÚˆRxìÓj¿HÈõ$„ÈË3’ô¡„=À©š•Ë«·¸ÇNAãؽNÀߎ'Išpõ¡U_ŽA‹<ßÉ… †~ÄòÜ4ºõ@‡ÂZ4j“óF¿8f"êÔœ-ÍpQÚ÷Õ)÷ ñ©B úË}y ‰çzžo× D¡³ Zn´Æ=g#[ÓhÖ²Í1‹>ˆM*s³m¸i˜ec+“EÁÊ¥éˆòð1é61JÎwÞëlà
+®µ2·¦Ðè/3æ€Û
++ýdLÁƒÔQ ‡”Kih69» ÌÝç@¡–$>º€ ˆ»/$
+
++ÝÍ~Ùü>lÖ |¨ˆKã
+ çσφ‚ÇCÀóçÁÏ}R¼šÍ÷?$v?ÂDâÌ$&nFæ—È/þÌhþ|ÓŸ›$ðIÁüZÿ3åendstream
+endobj
+1129 0 obj <<
+/Type /Page
+/Contents 1130 0 R
+/Resources 1128 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1115 0 R
+>> endobj
+1131 0 obj <<
+/D [1129 0 R /XYZ 144.727 740.998 null]
+>> endobj
+422 0 obj <<
+/D [1129 0 R /XYZ 144.727 578.596 null]
+>> endobj
+426 0 obj <<
+/D [1129 0 R /XYZ 144.727 440.738 null]
+>> endobj
+1128 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1134 0 obj <<
+/Length 1549
+/Filter /FlateDecode
+>>
+stream
+xÚíYÝoÛ6Ï_a ( Ç}PØCÓݺ Ã²Ö¬{PdÚV+KšDÇHüï;Š”,ÛjM{ö°N§ãÝñGò>2ÁðG&Ä÷QD£IäcÇ|’®®ðdŸ~º"F„ …‘ôÈGEŒá#ÆJæ‡éÕw?€Åð;·¢ÓÙŸÔ»Moàk0á(Cõ•(Œ‰ùH˜?sõ¨WÕö½¸GŠv½cç—rÖ¿çvùÐ >>Í»žQí˜\w>Äö>TM•‰ím]¦KÊÔõˆ3àÜ.KYz¿VrÀû¹hd½^ 8oŠÅ%þ2lïoóéo±ýPA»п)¿×I!×+ãR.RY—ÅE~{¿îëíïY“•…¶ñ^4ƒ…49›úm£ö¥G9
+oõÉ`¼¾ýàz4€µr]õÇàÓ;Î#…zÜ[Q ×cÌw6æ91¦…y“Ëž=w q’u.5£‚…³u-ý>/kM´öñ©\×E’7Èõ‚¢Ï\âd. œûl¶Nò¯ˆë·Uò \o½53wK—Àhõ#ê:› =Qp²1¤ñ>“€'îÀNž†( A"·©K¸“ÉÜhºËËôó ô¦
+2§©Dš)Ëi£Ô)çúƒì$¤Ñ d«@a>w^WUþ`$J=4ÉsÍÐ D‡Ì÷ê5v²b¶‡b+Ðöø)†Â¯%†¹;Þ¬£P6BʬXh¯ÞLû¸†H=aDF¾§çÓóéùôü¿ž}åĈD\—eºä$b<ÈÁ×ó¢yXÝ•ùaj8T“¡ò½ü€©Âè»>‡DˆETÉPŒ|•Ñ¡8le_§†8!Æv"Ó6jûȧ!d0D}Ú²ß6‡÷÷mù³K0ýBäǹQs KueJo™säûükí{‚MÀTËfQºŸ£g¢@ceÔÇ@0û¼«›¨}ÝÔûõŒlŸ[fìØ
+bfZH"L‹Ø2‡Ã,!ÕHQ_'w¬“öxÉ¥HfY±8ôeOñ%íš¾kãÔ¹ÙÝ¢qfîâ€Ý© }¡§>ݹÄi“š¡\Û“QÉÊHoT/–<¸aà¼NŒM&—Zª(w
+z8rÞ–ê‚o#Úk>swçãnh6×z;ëFÔ#×zËÄ´dýõ¤˜õ×|Ç_È󙤪EUg…<núŒ¤-–æIÓõ}•*[^öŠ©–PËÀ…@n:Óe¢n&õD°ùÐB2r‚(C‰ºÇàŒÿ n°¶F×Ì;ãÜÆe‡&ÄDur­S~h“’îÄ<®ËÁeÿ‰Ó‹º)…\*ÀéE›ö’z4MŒ–P¡MÁlNµ,Ô±UlSÆBqzªÔ± ˆÓh,>TቇGA‡Ã8rPçü›É»*endstream
+endobj
+1133 0 obj <<
+/Type /Page
+/Contents 1134 0 R
+/Resources 1132 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1115 0 R
+>> endobj
+1135 0 obj <<
+/D [1133 0 R /XYZ 144.727 740.998 null]
+>> endobj
+430 0 obj <<
+/D [1133 0 R /XYZ 144.727 657.696 null]
+>> endobj
+434 0 obj <<
+/D [1133 0 R /XYZ 144.727 599.389 null]
+>> endobj
+1132 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1138 0 obj <<
+/Length 1473
+/Filter /FlateDecode
+>>
+stream
+xÚÅXK£8¾÷¯Èe¤DZX ˜ÇníCÚÃj¥Ímf˜„L§{Zóß·Ê64IHÇé™Õª¥Ž±ËõÕî*Y8ðGÄ÷íÐ ¡ïØq-Òý³ØÂÒïwD“xÔ³ƒÐ‡ñÌ¢åÑȽ¾1Ò<¬ï~þ 6v ÿ×¹$]g—žø«ÖÀ*]Dv¸ê¶O‰&ùD<ŸWÙ¶­ûF“NYšÖ" -¦t†)±p`úíåÛ‡9fŠæ„YpÎŒP;ˆGf’ÕݯëÑŽíDÞÂò];òâ©‘NG£ŸÚ.¥Ê¤Ê\8gb‹¼­+±gBð6a›N´,‡•E–E&v§‚±=õí8"SD¢7E¼/Ë•åRgyÿ×ßjð¹îÛŠ•úê¸P±ãj€2­ÈÅÒ+õ EÇözt@™íGPXųc?ü^ñZ'ãùœ‘Ð>ÒPøâ;5ɹç,eyvC3Ïy1¾×sy¢UâÌqS®ÿ“ã6uö|Ùu+[žW]^s`880ú~æ0ý2wu5£“«_‰ÕíØÊ0„ŽdžµE•ñJ¾Çï–—ìÉ °ìs߉×û?Ü}#
+ ¯DQžCP(Âw‚p/ø¶¨~©Óî8‡°ÜÆ$>RYÀqýI§fž2eÜivÎ~ÚÍ9ÛoJ½¼g:áËm Á'¥žMw¬Úž²ìÄèµ:Ö˜Fx\¹t ¹Ž ˜r‘IÖ`M£GZ²®K´nxÄ®®¿˜§Èä…qìóùð3Ê¢™àï(û§Ì“"ê¡ È‹Šg2rê ÃâIª:J¢íù” .¼W4Ò‰¾×Þ+
+ì&Ø+Ësèr=ÌAÌdÁ†E§~Á¢Tímj<Xy¡.fËÁÑ–ó²QíÇ¢4R üÊjèI†A×—]ÃR®VئƵGü§§”ð0øä8n+UBÂAWØ©a ¡ÎaW¤;M´¯û\vÅ^ù…CkEN)àM}M(ƦZÈ
+±¬±<;œt²ª
+endobj
+1137 0 obj <<
+/Type /Page
+/Contents 1138 0 R
+/Resources 1136 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1140 0 R
+>> endobj
+1139 0 obj <<
+/D [1137 0 R /XYZ 144.727 740.998 null]
+>> endobj
+1136 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1143 0 obj <<
+/Length 1295
+/Filter /FlateDecode
+>>
+stream
+xÚµXK£8¾÷¯Èe$¯9eVÚ‡F{í䶳’˜3" ݽÓêÿ¾å„:1¨G‘‚ñ£Êv}õUdáG„1úá"dÅq´Øìïðâ†þ¸#f
+ (â!ƒöÈ Gƒ…4‚Cåœ_Ww¿ü 8Šá•ª©«í?%8pÿ]}‚Ñ`¡˜s9ê„Cb¦|%”-ÓüXïîó£oõ÷ì°4«z2=³Ì#°ñ nåóKù$@<nå¿“"•8TYÑÔÍËúñùåù݈|³l ?¼%ßõ8ÆêÉvûP’xÆJéòÅ^MtKÍYñ YZÔÝo«Î¨áˆ.<оՇÏ„Dã@cDÛ¿§÷Œ›VeÑ쓦Õ2Y—b™¸qÒ4Ëï«òxîåLòP/CqDúJÙ"¥´¯tµ®ç³ØÙŠÔ%ØIŽy´öå±hô`™ê§2˜^—. œùgD$©ëÎWŒý<Kš¬,ëÁ ;?Ñ>•ÇªHòZ¿í×Çg|¦eJ ?Ý·öÖ­B—8ç:eo!¯ãf Ô¡.6¢çªD#Èæ $P³È
+þÔðèßJô'ؔώŽ„‡ˆ†Ô.>a29…Õ6–—vNaä":öÏ Eó\Ó±Ðøv
+ðV “Ð6;1äíÜí‚öù”:Ù‹[T¶gº\Ž¼ãòr&8‚ ÅÕû$Ïe#k¬áφ2Œ, ¢0DšmmÊ<þ¨:<éÄçQ}ásõùï¿>h *hw9Æ]Þ@®{Yµ$µðšÒ“Ï‘zÉZtf"oJ^’º­ÓMÙË’é<kMYÔ¿Å~dŽXp¶Ñ¤’‘˜´ójB¡´°7ãkØÇà™ QÊÅ>Q³¾´¬Ö¦«u]ò/‚r3)•µ´Éy›¬i»×y¹ùnðª²âº­²·Ô©Y«ƒ2ìãhñRnåe–> 8BVˆ­ìP ¹rx½Ÿ×€6Žb›4t“—K¥El!¤W¢®­Myë;ÔËó•àË4ЮÐåëô‰}ä ¦Ñ'‘H}Q³Ã/$Çf²q
+¿òM…_ÙP
+endobj
+1142 0 obj <<
+/Type /Page
+/Contents 1143 0 R
+/Resources 1141 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1140 0 R
+>> endobj
+1144 0 obj <<
+/D [1142 0 R /XYZ 144.727 740.998 null]
+>> endobj
+1141 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1147 0 obj <<
+/Length 1499
+/Filter /FlateDecode
+>>
+stream
+xÚµXÝ£6ß¿"Òé$"> Ø@ûÂöÔVªÔjµ›>uûà€I¸%€ÀÙ¯hÿ÷Žm`Ù,½8¹‹VÚØx<3ž/ÿÆxæÀžaßGÌßAQÎ’Í…3[ÁÒï¸#ñˆ‡hàÃxbÑöHˆ(!0ðQH£1Íþï°­QÍñ—ÅÅçß2 QDél‘)¢Eúu dYS•bÄàM,rQðxnc‹-«{>ÿwñÇů‹ë¦ß¡¤Ù£Ô>^¬j6J ñ^Íû•õA Ø®‡"|¢–¼¨þÏ ã}Ù>ŠB<6½?‹@¦7–yYsÛ%Žuyu£_«mS²¢Õ³– =k®¬ù[IÑÍ•–{4-Ûp$õ…¨C‘ïN"ÿªÿin{رnj–äåJo‚£oÞ³¬:© r+ÖU£§y§žëéߺÊKÑ}[²–Û¢²å¯RBœ¢þÃÉm×AŽJÏ ÈÁJ%ûnG9ò &ˆFx䜔gS>’â±
+Õ\gizßÂÉøŽÊi¿¼|œÐ£cocÈGözxß«‡ŒZ&”"kV\–YË›œ·rœð6€Õ•n¬iïòZî”ÓçXÎkõÚúß«­Šì–8n[¯MCDˆgVkÜa|l­Ù°;ž•:Ï›»w96æy–üZ³fÈž>ªë¢½Jxºíײ>ð!Å1C¾©„©Ùj ®D YÖ-ò9&Ö£˜Ê‚êëTè]JÌ]3•’qE;iD¯ yó¢§ÅtœÎÇíÌåïå¹9ÁX^,ø£h·5oÚ¤Ék1ɾ۵Ç>œ`O‘OÆìK™£E‡ÑÂÖ\ŸbJˆÞ»W%¢gx1Ö—8ÌoîI‚Oó¤Œ"éɪÑÕÀ\ IÑ~­ÆG‡&ñŒl3U·°ë"œ#]__^Å™6Ûf
+¡L`¤
+ÂÅèFǵ˷¶-ן»:DàÞÚM7Ñ‘&íê׈ôÖu½k æ Ïç.±îe‘âé'¹J­k®¾åíð…‹ÍGîó<¸žµ,ªäN3«J-f஄ Îì!kä0¡jñËš•} -_A
+P ”a/Ø"ÝÁU?³Lªë8n‘3‘kõ+­äç‡ò-´I™8ˆSú€<ñ¾•Á"C¥æ@ ªY µ¬8TºŽÔ€ã€QŒ¹ óqnSÇQÌë†×t¤xŠ[À
+*Iët×"üQ~jxÁÍ‘1)üüž7O GÉ\/+%h¹jª­Æ`qÔ°ª–KÀþg÷|S¥<ÞÖp%€h§+û¤M"…º`éUŠóì^ÊYe[J£€fX@éªHåµÿb®ýq =⢩·e"Tì~î Š¦>ÄkT¼uƺÑ8ì»UCàÁµðW™?Ö¬LY9 §ÒY
+endobj
+1146 0 obj <<
+/Type /Page
+/Contents 1147 0 R
+/Resources 1145 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1140 0 R
+>> endobj
+1148 0 obj <<
+/D [1146 0 R /XYZ 144.727 740.998 null]
+>> endobj
+1145 0 obj <<
+/Font << /F75 558 0 R /F74 556 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1151 0 obj <<
+/Length 1553
+/Filter /FlateDecode
+>>
+stream
+xÚ­X[ã4~Ÿ_1R…H¥­±û ê  „Ø‚X<‰; “&!N;3Tóß9ÇvÚ´ SwYUjœ““sýüÙ»¥ðc·,HÌãÛ8 $M“Ûl}CoïáÑw7̪ø¡O¢8€ñÈÙ&$ö$‰RÔùjqóÅ·ðBDRø_,µê"ÿÃóYB§.~€§ámBÒ(§>#‰Ï¬ÊæM[ç›LΛV6mQu
+…x71OK¬‘‹™µ2cG˜öîع;‘ ìݽ|6bÊjœ˜âLa¥ìt¬r+«•¹¾©óÆ{îìÌwp–ËeoY×ÝÎ=•À¡ «»ùS7ÇÑ?ó^îž[¹íä“~¨05Z½ñF„..—Eél0r’P÷<W:‹n%qÑË—Ýåø“Þ]ìàîïéx¶’ÙCQ墓Îé$Ÿº>é'C~J¯D>¢q€L,vçìldƲDé«q[Sü‚©Á$êÁ=@ºÆÈâfñÜH%AQêÝ=›ë/ï~CÝ…üpd‚ºy·Øó"%4ñ10Nž™óôºgRF9á,6<k8t9} O½™:sÔÇæ“4ˆ/vê»ñ4,ͶsïØ1qFh<6©±3£6/œX0¼íêÆ4·«ÍÕÒŸûTqa¥rBɲ¨¤êZÙe«{Áz93jêÂHj-JgÊH]8ÈÎó¾ G Áø³zã¾<§©ƒGmÑ.D¦y¥XV›õÎ<D§¨ð¥f÷ÇùËε„œŽmFb˜8GË`ý4nQ+­œŽWÀ 8t( &y¬ÊBÐØ9I€¿îÏ” ¨ ’0Ô…WþëEz¹Tœ½¡K»Žk:^îÜ¥Bg­kà‘LDYÜW»~•žL48Û Cgfœµî¥Š/{l„süÉek[¥\­]š³Î›BÎèÿÞ£ô3± +ÇlöÆ Îø§ÚƒpvÕòiyq³Bç
+ÁÇøC†5þ4‚E¾U&Éw^É+Â?" Í|6 Ã\š|ߘ¥ø¥÷[—lúÆ;%œ^!µižŸp°Bá­÷ȦŒz2ŸÎxH½ïáTv€úÞS ‰ œÞš9ã<ñÞþüÞ þª7m%J…w±×l:#æÒȶ¨s3þ@CJàAØÜçÞ².ËzÊCïQZ Ü@âO f¤‘I«/–lŽ*ö¹Ìº¢®ŒsXùî@# =2ùÔ‡hUý3ÒI0èB¤³¨j“ñJT÷Euon¦àfhê¼±!¡Q°ß%Ú¾Fî}ƒ¯¬ê–u»ÐÖÝΪki÷Y+i:-«ÜÈIºlñAa5æ˶^OØ„O| 6îavÑ3@ m맺î0l@°Ø+ª^"àÐt(<6–УôX¨•ÑÂM&JôÑâèýC—@ŠßŒxÓ
+¬IFy8ë}­ŠÌF`ú¥ÌM>˜$eݘf'=(M¸&QØ9‘úG‰6›¶©•|ÉC ž3wδÞ}ã°vƒ …N‡cŸX¢pøIãhÑ5¾˜9ˆ}ÀH€zizüã__&ª endstream
+endobj
+1150 0 obj <<
+/Type /Page
+/Contents 1151 0 R
+/Resources 1149 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1140 0 R
+>> endobj
+1152 0 obj <<
+/D [1150 0 R /XYZ 144.727 740.998 null]
+>> endobj
+438 0 obj <<
+/D [1150 0 R /XYZ 144.727 282.706 null]
+>> endobj
+1149 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R /F102 750 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1155 0 obj <<
+/Length 727
+/Filter /FlateDecode
+>>
+stream
+xÚŘMÚ0†ïüŠH¨ÒrÀµ=öľ­*õC•z©è©í! †º” -â¿×N lŠ T!¡Ä¿&~Ÿ`³ˆÚ‹˜$æq J´VÑxÞ£ÑÌv}î±&$Œ…½né‚T$e/Q¨]̇Qïý';
+{ýä.¦…+ˆÉSS´ÌV«œ¤ûg›¬´šÙ,TS/ExM[|Æ$A}V©‰8–ê‘r?tb¦Õ²zL²Ù4_Ìïk·¹šf}Öç}Øõo\ãÖ5}Kþ˜‘Y—?–K““¸1›>lÏg(‰»Yx‚Åê¡áÀ&¼
+IÞ=$tÄ)¹  Ò6
+‡Ì„³Cö…ǯïªÍJúlj³WFŸºzË¢¸è-{…PÞÊ ˆþ—ìå†@ŸÇä6ô!ªË Ñû8ÚÌ4즮-G7 5”õ¹ÎîÌfÏÏÝ™ £ìTš)A€êã¡¿}ÿk^endstream
+endobj
+1154 0 obj <<
+/Type /Page
+/Contents 1155 0 R
+/Resources 1153 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1140 0 R
+>> endobj
+1156 0 obj <<
+/D [1154 0 R /XYZ 144.727 740.998 null]
+>> endobj
+442 0 obj <<
+/D [1154 0 R /XYZ 144.727 297.048 null]
+>> endobj
+1153 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1159 0 obj <<
+/Length 1129
+/Filter /FlateDecode
+>>
+stream
+xÚÅXMoã6½çWšå÷z1
+l[èÍ=íö ÈT,¬-’\$kä¿—)[r”IbŠ"ß9o4D3hþÐ Q
+3A!PJÎ²Ý œÝ›W¿Þ ?„0¸ ¦=ñrA˜‚HÓ @reÇü¼ºùñ3eþ¯ònèjý%!˜«ù_«ßÍ[6“@qnß0ò#Ž`¦æ aòºÜo õÌ(Ùå¡q}
+”DC§Ó™2´dHû›®õ|AˆHÒ¾ÑnºOr{|Û¶(ïÝ‹}]ez}¨uãž›½ÎŠ¯â9J2?·aØ9½3»f(ÙêŸÌ£Dg¦ªÜ>ºë"Ÿc–äƬ2óEc×n î7ÓÞnRŠt(¶±ÑéºqÍn1¶aÌ#‡fã¶:÷sŒ[íæš î¹ÊÝo¦ËÖP¯ÁDx2
+^WÝTè+5,nÝq{Ÿ¸)b‹¶)r%mSaL10ï#´­KÓ/j[‡rÁÆÂÚ†é{µMñ+i›ÿJÛb¡äÛÄb¨]âèU-^/”ú ½0I'B/â%ãŠK…¯#²Ç#ÿ£dH¯(²ëHüÝ’Q¸/ûMº×qŠA ø@Å P^G1TñŠq*4) È|ýa„]ÕôÙWxöÃÆ4þž#–h[ÿ!Õfš>lj²osíúm‘דŸ°¥
+endobj
+1158 0 obj <<
+/Type /Page
+/Contents 1159 0 R
+/Resources 1157 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1140 0 R
+>> endobj
+1160 0 obj <<
+/D [1158 0 R /XYZ 144.727 740.998 null]
+>> endobj
+1157 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1163 0 obj <<
+/Length 1209
+/Filter /FlateDecode
+>>
+stream
+xÚÍXIoã6¾çW0È@ÍERËM˜™NÑ^zñmÚƒlQ–m©,üßû¸ÈV§¦’ŠFE¿ï}oå ^¸ð/0¥(ð‚E@]EábWݸ‹=|úí›#„äÖ>®Ç¯kBQèGòÌ×ÍÍ—!YD(òÉb“©£›ô§ã…ˆ ºZc×uÍ*òœd[òÕÚc®Ódúù­©¯Åaõ÷æ/?@ðDʇȕ¨M.G]G4;¹ÀÎCQ–z«^fz]%w+ì:æpRë³
+<ŠòfDÅ3w Öá]¨ ž(›b”\¨G|à;YxâCrÏSµ%­6n_2‘õ“¾Såð¾Ùª†
+ú üOlM‡Y tÅ>‡»¢5ùSòLHêpè «¶ìz…³¢T¿ãeòh­‰oã@P"6¤¤•‚W©Ìtk†  dÿûC›ì8ܽ<ÆŸqÆÚñŒ(²*#pßãg§n³·£ç2HdU« ÝWMÊå[±¯¡$JžÊ·‡%–»}=µn¶Oîä2÷”Olu¢®…Nù6~ñ³ÈSõ&ÏTý,µNù¶yÔŽ>žôY¿
+×üreÛ)¶Ë<kÞ6åÉXw¦›)±(¨¼Ng•SJ­zÎͯ›óôJQʇÇfþtÀý¿=O*³á ÔÓ¸š´§|ÝišLïmSÖS /ÅkƒL„Ó×cüw£PUÔf\}È‹]®—›?¿é^òŠ×0)Ã0¯6’Îü"éEq±KJ5B39†ËvÀÓk3o0:›Íº>©ò?˜Ô³îeÔŸwGƒ f˜)­³&7̹æÏÚÏÔf0,ãQða8cô軆Jðß«¶,v…iÛK²¤ÖÉ}ÚͺfómŰݘÙ^ºWª1óÉ~¦ež˜éäðeÚÈåG‰øV#¿ˆhS|¡sÛŠ£öìØÁ›•ýv¾ký™i`G5Ý?ž,ø¼„çšíl¹Sš6ùwÉÈEŒ°K-û">»Ò$°K^ŠÅ!EÄž7žŸ”Ÿ¯endstream
+endobj
+1162 0 obj <<
+/Type /Page
+/Contents 1163 0 R
+/Resources 1161 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1165 0 R
+>> endobj
+1164 0 obj <<
+/D [1162 0 R /XYZ 144.727 740.998 null]
+>> endobj
+446 0 obj <<
+/D [1162 0 R /XYZ 144.727 716.092 null]
+>> endobj
+1161 0 obj <<
+/Font << /F83 563 0 R /F74 556 0 R /F75 558 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1168 0 obj <<
+/Length 1554
+/Filter /FlateDecode
+>>
+stream
+xÚ­XÛŽÛ6}߯X`ÀbV¤î}Ò¦izyh Ä@š>Ð2e©+‰‚Hu³1üï’’V¾Ä¦Š`5EIçÌ3g†Â÷üá{ìy($á}è9(Ž£û´ºsîwpë§;Ü?âú.
+BÆn®\?B¡ÁÀCQ«gÞ­ï¾û
+/ꃾ¦êÛå*pœÅ/USi!ÍÕƒûàõ,V=Í
+ƒ£~ÜÛ8çö`ñ`PœCõOœ@áPʵ-ËŒ‡ m鮥Mþ€È^97ƒ‰Ìa‚åš)& œÅ
+)ä¨<îÑžÁhk[P –Kzé#'ðNå2¶lÚ4}R¥%"é}Óâ•sþ´·Î£Ð±¨ÛI‘}îj`©ØN¢@ñ ‘`”ec6\¶»-‡ýÅ?*àÃ:„Ø°üý0§ c[“&=›•Èû‰7¶MDH,›+! z!Y/c² càѲØÕ¯©•@¡Þý¸›1¨«@±"1 xñ´]ûÖ¿cû‡Hä80Í¡iü&«àL6A‹k&ñT4IVr*OÍ?ºÂHQJŸÕ¼U±½Jk
+\Ä6Ôm±Ë¯úÜ#Ž€·¹]Pµà¶ß´méKÒògÝ]%E¼Íî…("sÈ…¼N>žrBÁŠð4°ŽŠ¦óZ/]â™z©M·%…ã
+½YVe¦®K¦@hÞ•óè¿?‹ù(1u…úF 0£Ý>MÑ©¹j¸5×5@ßýW®‘x[©C^¬™Ñ‡áÿ2U'ôÔÔ†)£Ž=R/«‹Yu1ìëâ•IœËšMU¦gZèäêS¯wØ.#gh˜ÓŽlïIÖ½‚­ˆ][ÖÓŠñ±¡6¥k7½÷TõVFÕ u]…îµ=¾€'ndQb“Š>± ¤äó™ÚN1Îú¾AËIxã NÙÍÄž<£Ù´ùHÔSl¨`*”„l(óõSÊÅÖ-²ékáÎ æùäq Ö¦+£I -0±ù~Ò®Ò³Ê×µÀmà˜í}-ç
+endobj
+1167 0 obj <<
+/Type /Page
+/Contents 1168 0 R
+/Resources 1166 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1165 0 R
+>> endobj
+1169 0 obj <<
+/D [1167 0 R /XYZ 144.727 740.998 null]
+>> endobj
+450 0 obj <<
+/D [1167 0 R /XYZ 144.727 557.675 null]
+>> endobj
+454 0 obj <<
+/D [1167 0 R /XYZ 144.727 442.129 null]
+>> endobj
+458 0 obj <<
+/D [1167 0 R /XYZ 144.727 326.791 null]
+>> endobj
+1166 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1172 0 obj <<
+/Length 2195
+/Filter /FlateDecode
+>>
+stream
+xÚµYYoÛH~ϯ`#a£ž>yx^œØòŒ‰ÈÊb“} $Êâ„"5$5¶×ðߪ>(J¢-Åë @Øl5ëø꫃4ëPøÇ:LJâs¿ãKJÂ0èLohç~úõ ³G„Äó%¬[~ì»_ûB’À ñ̇ћŸÏÑ Iè‰Îh¦Ž¦ty@ z}F)í¾ïqÕ].ãlšÜõþ3úç›Áh-U’0€ ˆ·aÓöµ~
+ZjKF"‹×ÊY5É ]gJ(/S“`°‹uYÛïƒýX©pÓÊÑ8°ê­â9p›¤Pì¸ÒÒ3³Çæ
+ÎOíν¹î©
+zH͆2àûÞºpJvoµÍ6I„`Сنy‘Ü$`HŠá»&†ä;fxauž‚ U|w˜X¡Ç˜M«Êh¨æ‘]™)WšÊp]¬&s{*ÏÍâ&Îâ"™˜Ó`QÎóUj×c+ä&Á4&i3›I¼™
+¦O¤p£Ô?‘ÁŠ„Ûù«Ç$ýš†Î=T°\¦ Ž ¸­Ý°0ãygDfF!}¦q¢4â à’¦ÊpTBä™–¯$0¦`5)“1¤VußóT×±žÂL 61õ¨IX^¸µ¼j©ø2 x 3¹XyZÈÝ€º
+X5lù®ìÙö^Æ/õ,ú‚ƒ[õ¼azŽ ´BanÉf Á£ÜÊ]DßbM —Z<TÄW¢™¢–þ¸˜Lâee×®º7*Ti¸M*Ì'®«è,OÓ嶮°1âw‡q¨:Þùø6q¬ŠTéè´}ýò‰ôùž1ƒíLK§^2·\ ÏËË_Wçæ:œ†ƒËÓðýúض”cl[0Äõ³Üìá|Qij¸ˆ³ f)î%¶åÅTÊvf¸ž&•:q„øåÉOÀª—"Ä_¡÷Èø/£ß®†Æ‰Ëž€ôiàpI,.Ù¢Ÿd
+ñÚP\~ùôa0ܤÊHŠ€ÐRóÎl0nSiá¸ÁøȪ"v©æòÐÍVø¦h—ËfšÊ‚Xå0IþHìäkc7ú÷çÁyÏ—
+endobj
+1171 0 obj <<
+/Type /Page
+/Contents 1172 0 R
+/Resources 1170 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1165 0 R
+>> endobj
+1173 0 obj <<
+/D [1171 0 R /XYZ 144.727 740.998 null]
+>> endobj
+462 0 obj <<
+/D [1171 0 R /XYZ 144.727 716.092 null]
+>> endobj
+466 0 obj <<
+/D [1171 0 R /XYZ 144.727 471.249 null]
+>> endobj
+1174 0 obj <<
+/D [1171 0 R /XYZ 144.727 305.342 null]
+>> endobj
+1175 0 obj <<
+/D [1171 0 R /XYZ 144.727 285.417 null]
+>> endobj
+1176 0 obj <<
+/D [1171 0 R /XYZ 144.727 265.88 null]
+>> endobj
+1177 0 obj <<
+/D [1171 0 R /XYZ 144.727 245.566 null]
+>> endobj
+1178 0 obj <<
+/D [1171 0 R /XYZ 144.727 214.074 null]
+>> endobj
+1179 0 obj <<
+/D [1171 0 R /XYZ 144.727 194.149 null]
+>> endobj
+1180 0 obj <<
+/D [1171 0 R /XYZ 144.727 162.269 null]
+>> endobj
+1181 0 obj <<
+/D [1171 0 R /XYZ 144.727 141.955 null]
+>> endobj
+1170 0 obj <<
+/Font << /F83 563 0 R /F75 558 0 R /F74 556 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1184 0 obj <<
+/Length 1541
+/Filter /FlateDecode
+>>
+stream
+xÚÅ™[s›FÇßý)ôf˜ ”»DúdÉëX©,y@J:Óv& V
+(—oß³ìY%ÅîÄÐŽgÌÞ€Ýÿ=çì‘>ÐàOè–¥á`hiªëŽëÝ…6x€®w:1mSu†”Ït*¦iªCkK9îÙ1CÕüþñòâ—x˜«ºŽ9Xnê!ËèÉUå¿–ï/Èòp[ë®ã'Zª;Ò_xàrºœY1lMZÜðë•';tLfä-o‰ájêšTÅ•"ëR\ñæ?5[[ʦ Å‘UÄkèÐç©ðÙ(:LÁ°ÏÐ Õ²­&¬k'Ú÷ý ƒÖ‚ù*ZPî=â“ùR†"ƒa¹Ò7„ñÈh|kHÌ3^Š*^ CÃpüú,ç<ôÎy¼_¬¼9û®W3¾
+^¹C$7‹†\
+Á”QU‰Rì&ï³}‘I‹/¦Y± ’—¹¼F'Fç\–dr;ŸNÜ/¸rڪїPlš‚ %lo™¡&ÑõVåýͳ¢:A”ÄŸeèÅZ˜eŸË~y™ýëèƒl™™­îÈ£/²¡IY”tiÓú ë† íûÝCõ»›¬Î)4‹F‹²šO–+Öx%뺲YÌÇšáÐ\#WÖÙî_ãj‹7f»]Я<ìÎÁÜË®
+t\Û®§Q}¥4E¼I¶~!26uu4zÆîã«ñØ#¦ÈüGî/¼k^ûÔŽŽ˜[»Ä}Ã7úƒÁº-!¾Ä1aÛ°¥/1x´¨WëlXÿ žÃ–4ž Gl¾ݘ?‹æ5°û˜yÁ±<8õ§¤„bËäÛ‹±¢qÕ^~œ¥ýznÃéYµùá9 ï‰0Xh|*ŠôÛ‘,€Ày]`c‰¥Ñe¿ †½ø´ž§+á׳"â^­N_Á±²`λqaÿN¯Ù ÝG½>:r‚†â‡§*áÑ…:¼O„ÛÙ¬4Øõ÷ÝǽuêîI²÷Áàçò(ãK« Qê|/ÊdZ'xQ#xòîù(iöñ½ÆÝÂ0 G³Â3s¿óúuû¬íšP„æ¡tÃŒ ™]3ý°:KZŽ)¡\ N‘‚¦åH4/â´ª+¶´/l†’Qˆ®Yh}ê´gÅX³‡ ™jM¢Rd€’$!×¥Ú°‹H4ŽDIL3$õ¹ «0Ÿç"ö:€Ò_ñ»Øçäc+]—|‚±:V'·,pH5
+£—nʲ•´¿ñý~Åkô.^ž‹~*“3â­iµÄËêßߊt-Þ¶¸l-ˆ¸ïTzý’ë>îöÈ ñÈ|BÄñîî~1'µ€À¼!(qŸòÙЂ¦"—§•<Ki*²öÁCÙ†îã땇ª%yÄ? Ý"üIA5YEë%þ8Žá®>â‚lT‘Ô6 ^k7¯…‚« ñÝA^ô‹…8°5?ÇP ÇÁø4n»þÞÇܺ¿ iÀãOnÕ–Š\D’dlÐטMú“ÄÛlŸ /h¹Oª·'_ '©¸¦êXgŸÕW5ûÅŸ'“Ï5²TSsŸ~¯
+endobj
+1183 0 obj <<
+/Type /Page
+/Contents 1184 0 R
+/Resources 1182 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1165 0 R
+>> endobj
+1185 0 obj <<
+/D [1183 0 R /XYZ 144.727 740.998 null]
+>> endobj
+1186 0 obj <<
+/D [1183 0 R /XYZ 144.727 716.092 null]
+>> endobj
+1187 0 obj <<
+/D [1183 0 R /XYZ 144.727 700.376 null]
+>> endobj
+1188 0 obj <<
+/D [1183 0 R /XYZ 144.727 680.062 null]
+>> endobj
+1189 0 obj <<
+/D [1183 0 R /XYZ 144.727 660.136 null]
+>> endobj
+1190 0 obj <<
+/D [1183 0 R /XYZ 144.727 640.211 null]
+>> endobj
+1191 0 obj <<
+/D [1183 0 R /XYZ 144.727 620.674 null]
+>> endobj
+1192 0 obj <<
+/D [1183 0 R /XYZ 144.727 600.361 null]
+>> endobj
+1193 0 obj <<
+/D [1183 0 R /XYZ 144.727 580.435 null]
+>> endobj
+1194 0 obj <<
+/D [1183 0 R /XYZ 144.727 560.51 null]
+>> endobj
+1195 0 obj <<
+/D [1183 0 R /XYZ 144.727 540.585 null]
+>> endobj
+1196 0 obj <<
+/D [1183 0 R /XYZ 144.727 520.659 null]
+>> endobj
+1197 0 obj <<
+/D [1183 0 R /XYZ 144.727 501.123 null]
+>> endobj
+1198 0 obj <<
+/D [1183 0 R /XYZ 144.727 480.809 null]
+>> endobj
+1199 0 obj <<
+/D [1183 0 R /XYZ 144.727 460.884 null]
+>> endobj
+1200 0 obj <<
+/D [1183 0 R /XYZ 144.727 429.392 null]
+>> endobj
+1201 0 obj <<
+/D [1183 0 R /XYZ 144.727 409.078 null]
+>> endobj
+1202 0 obj <<
+/D [1183 0 R /XYZ 144.727 389.541 null]
+>> endobj
+1203 0 obj <<
+/D [1183 0 R /XYZ 144.727 369.616 null]
+>> endobj
+1204 0 obj <<
+/D [1183 0 R /XYZ 144.727 349.691 null]
+>> endobj
+1205 0 obj <<
+/D [1183 0 R /XYZ 144.727 329.765 null]
+>> endobj
+1206 0 obj <<
+/D [1183 0 R /XYZ 144.727 309.451 null]
+>> endobj
+1207 0 obj <<
+/D [1183 0 R /XYZ 144.727 289.915 null]
+>> endobj
+1208 0 obj <<
+/D [1183 0 R /XYZ 144.727 257.646 null]
+>> endobj
+1209 0 obj <<
+/D [1183 0 R /XYZ 144.727 238.109 null]
+>> endobj
+1210 0 obj <<
+/D [1183 0 R /XYZ 144.727 217.795 null]
+>> endobj
+1211 0 obj <<
+/D [1183 0 R /XYZ 144.727 197.87 null]
+>> endobj
+1182 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1214 0 obj <<
+/Length 1582
+/Filter /FlateDecode
+>>
+stream
+xÚ­X›6þÿ>E4­j® ’@ÿ[»»éªþR/­&­“jÀ$¾›Ù¦—Û)ß}¯± $!DšÖªÅ1æyÞ߯mäÁ_仜.GËÀs£(%Å…7Zëß/|³d6Ÿ¹‹e
+MlÐ÷ Ÿd
+.±Â4{Ъšà’ªtóÇÏ'ðÏÈîIZ{,k*²Gœ§ÆJI½íÏs3Ž”­}Hc)Kg
+|]©ÌOà’ØŠGÍ¿|V|ïö=E™¬ï°ã#4kŽ+Ÿq†ë¦¶{¨s'£Øn%Z‹Ãn¶Ž
+h¿þCéïš‚ÊÆ¿ýTâbp£™ ÑDèõím³¯ÕQªP$ÞÊ8›tΔE¹™4VèÐí/ Ýí†O‹kL1xëƒ"JëÁ]­k½“WÇ·ÝS{¢<
+endobj
+1213 0 obj <<
+/Type /Page
+/Contents 1214 0 R
+/Resources 1212 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1165 0 R
+>> endobj
+1215 0 obj <<
+/D [1213 0 R /XYZ 144.727 740.998 null]
+>> endobj
+1212 0 obj <<
+/Font << /F75 558 0 R /F74 556 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1218 0 obj <<
+/Length 1731
+/Filter /FlateDecode
+>>
+stream
+xÚÝYKÛ6¾çWÈ@ÍŠ¤¨ÇÍ)Цè!(šŠ"ÉA–hK]Y2(z­áÿÞ¡HzeIÓÛäR,`Sù g曽xæÞá @‰fQà£$‰gÙö•?ÛÀ«w¯°YBEaÀxâå¾]Ð
+!%X“GM‹yÿÇ»ç©BbÄFx
+耇Ï(ÐacEwgº2Éh t”ÄZŒ†g³àà xL Ín_gr(¥0D_ĸ=qô;åf‡Þº©ªfNpYy•Äøe vßB$µz¼ ÖÊjð0ÇÌãÕ£à@‰UU¶…~”ØQíWÜRS‡¢ÌŠq´ðaÄ=­³Ròq´Pµ ›epÈó C/†ˆ$a(ˆ“ &®Ñ‘9GÀZ ã_s¬˜¿7,L ãT(ß®íW‘$ž
+%3£-Ï›jjÎsž[RowMÍk©Aö`#x´*›HwÅœyóy‡f1ô˜ýn
+üNj)S-8N£ù(ì¹vÃî²é¢X¢QÖ^¢H§ Dk†YÑ”o/…éS¿o¤Ê!øœ²`Ôr)ÁFÎ|DiÏõïßÞ-ÛFȱûYö±,±¸à´VTÑ£tÔ#û®nìòFå¯Gý0Ikàó“G:ÄT•½ÀÙÄ•‚¼¯ÿ¦7V'ˆœÕ¨S9YhŒ(¸N/:SGpˆ¨>RK±f§=ß=¤f²jRCH©¸åè,ÌŸªú@Ü…a g§e•,`ÿ|æsF"ùžHKǧãçÓñ‡Ó±>ç ì©ñ›QJÔi‘( X?e ¿Ï;Â
+nb ²¦çW³ÃÀs ù¡J gý†üùÒhÇ7èfÛCc‰Å'ø!
+X—Š)<½l€GÇx O˜X¼7óEèû¬<4YSí·õ²=ÕdØLÑ­›Üˆ2?OSšÀäÀA%ጾÜíÛÂY1æ
+öÂÉW,3-à;ù/Á®&^ìäÁÞ8%aWô|1ĉ 9þæÕЉK5Ë"Hãs3ãr9ênWÕXœFzzVf@‘O“Þ îz¹ß ¥ŒÞ%ðaæÚ´  Åáuk~XUMvÿÌíë åÿÚ_¨Æ0²\¯Äðeƒaxø¿&G÷hd«å¹|o€}±.+×fˆ¸TŽ]=z³íµ§.ÐÔwËípý”Py[Uîuò<Ê&ÓÕЈ<ués'à>–ÉŽÏûíŠ µãxRÏPµëtËÝëÅîy¼xÜq±Lk¸)ŠŽênØ7èîgjŽ÷þ–R»«¾j©ÿtŸË]µoˆÓYSÙžWé—kÖ´­¨MêÇÒØz2+žæ\´Vb_g¼Ü)‘P„ÎF‡v¯ç|' 4õ¦ÃQz ÔÀÓô·ç‹¹Ä©•ÒYÍÙ½á-Ð=|„ [+ƒhw|Õn4bcsÙI…qÅZ>Š˜2Ø•E
+IjÚ´“êGßϲñ‹-k‰äj^Ö»*\Úøâ“¡­h7k“ÞrW»$ßÍäÿb“]­’ 2ÛI'W2Óè2·”‹—˜Ü á–“S§ÆÞåB׎8¬–påt>§S"¾Eñké×½PÑ·ƒrI]—ƒ[IG^¾íb@>»x3”hª…Çp…¡Ðݽ‰Ç~<úR ê'—W­Z‘:úendstream
+endobj
+1217 0 obj <<
+/Type /Page
+/Contents 1218 0 R
+/Resources 1216 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1165 0 R
+/Annots [ 1220 0 R ]
+>> endobj
+1220 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [306.041 679.454 325.468 690.009]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.28.5) >>
+>> endobj
+1219 0 obj <<
+/D [1217 0 R /XYZ 144.727 740.998 null]
+>> endobj
+1216 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1223 0 obj <<
+/Length 1254
+/Filter /FlateDecode
+>>
+stream
+xÚ­Xߣ6~ß¿"/§Bu¸6ÆÆô)w×½êN=iu·R+õú@ÀIÜ#€€\våïC–dic¢Õ*ëÁ?æ›o<Ɔ?2#A€B?œ…FQ$fÉæÏV0ôë é¦PFG=Ê
+|-¹Òé\ù‹q í¹¶ï«Öæž«æBÚ)ßuÎ6ÔÈ Q»Ù°c£òm=Hæm"?Ëâ¾à[¶†r_×Å1"úº8èŠâ.aN±­t“Ç™÷¥”‰Ò÷šÄ\:Þ©¼T3·*€eóæî‹þ¥ °~ pgj Wè®·pýy4r¢u›Þª~Ö×"ÝÞ}~£×3Ò[—8LJw¯û ¿¥Û£ô['ÅyÚÂø¤þüéÎ%„ÀåÉ£,ntK²’5„™^ùmñOô-«·Õ6LR:TÿÝ4¸á­Ís[€)íº‡j,¨P̘¾Êé! ñƒ öצ»ãËÖ}¼u¬ê¤Re3by¢šXk­-ï}¡°Ën¿æeïáwЇÏ>þ£k€
+Î’ èô‹T?Hx„(g>k%"@G§Ÿžþ°
+Æendstream
+endobj
+1222 0 obj <<
+/Type /Page
+/Contents 1223 0 R
+/Resources 1221 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1225 0 R
+>> endobj
+1224 0 obj <<
+/D [1222 0 R /XYZ 144.727 740.998 null]
+>> endobj
+470 0 obj <<
+/D [1222 0 R /XYZ 144.727 620.834 null]
+>> endobj
+474 0 obj <<
+/D [1222 0 R /XYZ 144.727 297.276 null]
+>> endobj
+1221 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1228 0 obj <<
+/Length 1548
+/Filter /FlateDecode
+>>
+stream
+xÚÍX[oÛ6~ϯ0P“˜EêÂ=¥ÁšnV©=¬{%:Ñ"‹š.m#ÿ}‡äÑŶR{¨ *Š<:·ï;‡Ç¡3þÑ圄^8 ¹K„ˆfÉæÂÝÃÑû Š"Ìg$9¬'ŒE$dðä$
+„¹^^¼¹yADÀf˵‘\¦8T#œ/˜ë;̓œ/<NDsî:ŸçÔwdÑdðjö3ótA0«íNª’v"ø]×sêàY'Ó<ÄM·’VAÝ®êæ)Gs›¶FB5V@iÓÖ~Ue)
+Æ…Þyšÿ¹üu¶ œÎáI‰ð}‹ÔÇ_Ë<K2£GŒ‘£JHm÷S '•LíÑêÉ‹èÄg‰ñ
+g#ãõua>û<÷|'®2բ̵Ry÷…pÔÚxîîøüQ&&ÁprñnÙCHCÂDç1"¨ÅXoW÷x~÷þeHÃ}e©È›¦ŠG¸°'/ªÛÄ:=¾ë¬¤}BJ³ûÂ$Þd…ûªÈQ2[ۧΠÜ;ÁºÉòÜ.Û"•Ÿ\×ëÕ™¤ú=Ç`UªL#a@÷ 7Àƽ ºªtŠ=g£:*ÅÆl©õù<çííG»øKµUaóúRïð¡ìQ¾He)ÁCKp
+££¢%„çT2›LãnÙj2 9-ã{‰NÅEú"eÁ´åJ®•É¼ÊÍJ¦©É ¼™º3B¸NY.žœ çg¥í‘ƒ•.ßKMÞ.&øæî·[»À(´bTW·ký±Öšd­‰B»a
+ª‘E=
+±ó:¤s Õ×4YqD@4U‹ €R!ÐÈYƨ¢’ƆÒHꨳۚ2‰Ìxs±1s^@|ϺäE„ŠRþ …ÍÑ’¼¬b+ÿƒÄ‚0ƒ>
+ÕDÜ2(éÏ"ÐhIê“@PÔõ‰2~•­¿nÍ©¤×f9_hr^ÁçíëÞfï'Œ†`œ`¡Q÷®ÀÒ°ýÃîÅ=AÀÁ×p£„FžLÄX…ûÆ]œá‘8Ÿ·Ï¯“¯•^ˆlgÞQV'C‚Õ$C·w×
+—¡Ý`O à\°SÆqÏ9ݘ°[}õ^3óJÆ)Þ µÄ:oKl㪫Ûå¿dÍÃÐâÉþ]µ€Ù'bð¤%œûãKë¿~ö>ÀpÂÜ5ºGDsGʶHšý(Æ
+öµëÛ˜¹s¯ñÊL$
+9nóæÒîX"šÆ™ÃèPíg(
+ÿ
+endobj
+1227 0 obj <<
+/Type /Page
+/Contents 1228 0 R
+/Resources 1226 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1225 0 R
+/Annots [ 1230 0 R ]
+>> endobj
+1230 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [176.109 679.065 183.083 690.009]
+/Subtype /Link
+/A << /S /GoTo /D (section.7) >>
+>> endobj
+1229 0 obj <<
+/D [1227 0 R /XYZ 144.727 740.998 null]
+>> endobj
+478 0 obj <<
+/D [1227 0 R /XYZ 144.727 629.626 null]
+>> endobj
+482 0 obj <<
+/D [1227 0 R /XYZ 144.727 570.273 null]
+>> endobj
+486 0 obj <<
+/D [1227 0 R /XYZ 144.727 341.755 null]
+>> endobj
+490 0 obj <<
+/D [1227 0 R /XYZ 144.727 281.232 null]
+>> endobj
+494 0 obj <<
+/D [1227 0 R /XYZ 144.727 220.709 null]
+>> endobj
+498 0 obj <<
+/D [1227 0 R /XYZ 144.727 160.186 null]
+>> endobj
+1226 0 obj <<
+/Font << /F74 556 0 R /F83 563 0 R /F85 571 0 R /F75 558 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1233 0 obj <<
+/Length 1654
+/Filter /FlateDecode
+>>
+stream
+xÚÅYYoã6~ϯÈKˆUR·
+,ྲྀh‹`7Eº} %:b-Kª$ÇÉþïáÐg”5½mQ‡äp¾ásÐâ× þø57öâë8`nš&×ÙâŠ]?ÀÔ÷WÜ°ø¡ïFq
+¡G™¼€v=æaèÆ~wÓ0ÔH…¹«§yà¦Ap4ùHüÿ8â¡#ÛQÀ´‡¿UÇ‹œwr&[Ye²£>Ê$J™AMN’Tfö…è‰Zˆg"¦rËÚe­šJ#H *ë²z0¬ìðs³ÉÃmDdM4H…˜ŠN–ª’7Ô9µM­È’@¯T¾e~¦Ö;eBýU6×BXÐ'0²Ê´^Œ¸ÓÈVUf ¦VPSˆrv žHUé±£#Ñ•ì:.\Â÷ÐÖ á>Nk<#:(ò"j÷J§zó4ª•€Gn )K:sêú|Ïñr»»Ä‘›Â¸Äc¸ëZ<4LµÆ~ÈÂW$pÛ#dô¸Ëbn®ûî5{ZVàZp.9OáZOºÕZ3M뺔¢êÛ¥<àÁùÍzóÅ€>çD¡ÈF!ƒ5e§ÁzݪD…¶^¸Ö˜ñKLºQºÅü1JÙ@í›;•Xh-&rÑôϨF¡&[ÔÄb§`tcL?Öö–LäGnÊoD;$ØŽåqf!o*À‘ÚzÙX‹å/ÅúÜMü#±&*tsÕx‘V|2
+^© ð`AjèÕb¨
+HË·y=5™úg#A˜ÊDI™ÿN™BA”@˜“ErVCž±MèÜ*—‰¦1™%+E×Mò:[.t>¯ú¢®çƒYæ(‹íð’Ï) Èa3Dw=­!vyÝðžKên“ýŽÅ¯­ã˜Ç,RÊ;r¼;òòµŽ,öIÄãçÎŒç16µhXò‹õIzÞ‹m.0N–½¨àœ!†“s#ï8iÜ’;Á«‘ˆ¼Ö¯¢QXA¢赇ezµ\Lõ F÷ êpG×agr[æy6v6ò rÙôÅ›1-ÄS®ð!ÍÙ%Å_ ÜþŠž+£}ŽÏ?ó:(”ÙmVçfzYõÊ 95çscæ±
+"êc^iè­œ–Þ’8RÙ†'Ϧ¼ßG§NöT™hׂÓ`ðb‹
+Kœ·`oÿrÛŒ~!#È 7šïI©¦?cŸmìðƒóÀbZ?Ê\uM)žñy4G¢ýÃ…èzC‰¹}=íGªZv᫪Áƒ Ï+†¿W¬^(¦UFÅNÕ¶Ž.´HQ·}7G@Ô`—1ÅgÂÇîû>ú‡èÉytó+ŤT]¯vÔ[[„ô_rÈ€Y;d~RZûbÀ/÷EBÀCH÷^xÖ wˆÞç:aøª†ÃN\ä„ÿ?9aüwNxõíýî£
+endobj
+1232 0 obj <<
+/Type /Page
+/Contents 1233 0 R
+/Resources 1231 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1225 0 R
+>> endobj
+1234 0 obj <<
+/D [1232 0 R /XYZ 144.727 740.998 null]
+>> endobj
+1231 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1237 0 obj <<
+/Length 1597
+/Filter /FlateDecode
+>>
+stream
+xÚíXKoã6¾çWä²€ Ô,Iñ¥ÃÞŦE
+,°Ø ÐÝd™ŽÕÈ’ ÊyÔÈïP¤dÙV"%MÑKÀb¨ñ|óüÈ19ÇðGÎ cHRy.Fa¨ÎãÍ>¿†W?Ÿ/ð
+aß2Šxè%¾“€-tšß-S¤ÑƒYçeen¦32IŠéL`\‹D‹üV7"7ðÆ)í@ΜַàéÑÅ0zª+û˜§‰©’vu9Až"Qâßõ(rGŠÔóŠ¬eŸtœF¥þUëoÉ_ÚìµBüVö3|܉ñˆákq‹ˆí§´|4&ǯÀ ‘Å´î9Dü"DÒƒH
+Ú ízU9§K5ºè°õK½²,/7QjÀþÝhKƒáb]­ò¬²Š÷06<ÍÎü¾põ|Ÿ$E5²Š9†>iÁº9]=Ø÷Å|ß®ó"Ýz²»I²­á~{¤e/å›ڰƽŽ:¸xaH‰‹ÐÆ\\þ—¼ÉÕ¿Í›<|#Þx¨¿Û»UÕCT Æ÷TÑ«ÌËr…èá
+J–ÏÚå%Žìê!‘UïêT…çàˆy‘ÄÑ|ç¶ nz)Èk8‚b!¨¬²ífç=O½ß3A©Ó辟VBÕ‚òZ¥•¾¯Ö:¹^W®ºß»‡ÂO2JšÅP8;íû,¯Yla=ŽŒN“L?Ñ]ýQ–/° ZÞFY¬Œ±¸Þ Åþ۫¼x‘ê ê½UùÔÑ‚DP“
+
+ˆM …ŒÕbÙr:£OòU«°§!
+¯¯(ÓS}#F™—ˆó¥F=ö‹IAì—xÀþ}0T°´J=t*wl/Û±Þ^˜ek½©¢E_É‚xÀ@ŸD€¼qdÀ8ß–÷®)ÿÌ·e¥v]/ë2Mç³Û˜'y
+ÕŸ
+Ñœfå¦85¿ofDA"j¹¯:ò1I2÷„nt ëŸ[­Ê|ãV‘{|ǘ¦½Îs„…õ=
+>ðÁÛ…­]?´—‰Îµâ$ÍB"rʨ0—ß½í@[ëÜhÓê6ž“€(,Ûó|1}TˆÚsû‹ø.Ú£q3_æñv£k.ª`.}ÁL*ÅÀ$ÝK}žYêD<»ìFOÜRŽƒý Gæ¶ê{Xw{ždéØŸ¤úé`7þǾ&zž$­©7…GÄÍ—EËÃ;(æRß>Z°“ÃÇv eHÀ)ÐÃÈF¹@ðN&„«%
+&ž,øm;endstream
+endobj
+1236 0 obj <<
+/Type /Page
+/Contents 1237 0 R
+/Resources 1235 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1225 0 R
+>> endobj
+1238 0 obj <<
+/D [1236 0 R /XYZ 144.727 740.998 null]
+>> endobj
+502 0 obj <<
+/D [1236 0 R /XYZ 144.727 413.237 null]
+>> endobj
+506 0 obj <<
+/D [1236 0 R /XYZ 144.727 352.714 null]
+>> endobj
+510 0 obj <<
+/D [1236 0 R /XYZ 144.727 293.167 null]
+>> endobj
+1235 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R /F85 571 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1241 0 obj <<
+/Length 2028
+/Filter /FlateDecode
+>>
+stream
+xÚ­Ymoã¸þ¾¿"÷aqrsEŠ¢Ä¢8dïºw·Åí!¸ Ú+ºJ[t¬V–‰Ê Œü÷Δ-Ûj¬d‹
+ t²”M•u…ÞÙK‚"gz
+v™3F˜pÄ}l| C¶û*Þ`ˆÛ 'y8å Ø“²_•·Že£U樼tÏÅ£{î6:”$`lgL}gô?#)«–ÝF—Æq]ªõ¢óÕ)ÿ„ÃaEþË/4âWmµÌµy<ç*QnéZµZ>XìALı]u7cq Šndc,")ëO°w*…°õ^5Uf§<¨ i’ •G0!Æ”g©*PCå-ñŒ¢1',Ç@ò¦ ‘Qo}â¬AÁ°"æÖøGÂXb¡ÀXQÆ8}`@—~¦ZÍ4U Ï<p’™°
+ÌÃ%¬‰XÐVî#Uî£L#’ËÜäUé…«^À#¿-0~q‰f j¹Í
+ûµGLÓ LÒ¥nòåßTSÂ!n?ÎærÞ¦k R àFœ#… À'‚
+Hù¨€¤Ïï@Ùüb€õO÷èó«_ÓšÝëw S(Œ ¾ØtFfsž²à£gØvËõË¥jõåiæÛÓ³ä}^}ÐÉßÒFœAîÓŽ• œB$‹†Ùñ8¤@e¦Ü±Ý!G‚ØD1'w¸¯-F°·Sƒ—äÐd«¨«{}X«;ïÿ¦rñà4ؤÖ7–èk[÷¶Ê›Ö|ó¯§
+W¥9âø¯®õT»®PûZ-Ûom ¤NÇÀƒþ¢¢Î}9¥ÜsË ¯‰MÇ÷îp¶ÖT˜2²
+Qçüv?„ϲ2~ÀÙν âÈ¿ãM‹«Eʦ eÝ6mGðÙÉå[Ïúè«Fg§
+‚õ|sªã½g}v÷ЮIé+ÔX袺ÿ_6Øs}6Ÿ¹ÎaôºXŒ¢‰üImŸ¦‡dþµñx”±¥À/ª¹ÕH,V-trÚ¼ÙGlPËÂúgm¿½Ó&_ª_u§çŸt–wìØ>UäKìÓÜZÊëQWßMüµ»±§l7£²ìÎ:ç–2|¯¯žzýèäu¾ècÂ}éªRS jM_vf]5_Ÿdz¼¿Ì…ôó^ôêÌóYc×&|ùœ9Î8 Ü2y† éÝ &§4…˜·T65àä}ÿÜåË¿r\3ÏÕ4Ý^ €ÌÓ¶8p k uŠ¸ë¥¨v$ÑTu]µÚ_,¡ƒ«Ê_vèKH”0{IB)J’È]½?mÃðºUb£Û¯¹ñ×Lœ‰ ·ON6–ûh®0—nä~c3Šäíàâ¯í¯UmJ÷wbu…mÓßžµÀ¥õ×¥‚ÚKÖ¡~…þÛÿàë®âªÒ'Ýþ¢ನ‰[I%a R¿ÃŸµ¿Œ[ ®ß¡OÙD?ñhCÊÀÂôðRM„âu¾Œº#Ðä!2Vw°ý„ˆTŒž
+I"Ÿ<¥Ñ‰¥`€PºÑ]D¾Pendstream
+endobj
+1240 0 obj <<
+/Type /Page
+/Contents 1241 0 R
+/Resources 1239 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1225 0 R
+>> endobj
+1242 0 obj <<
+/D [1240 0 R /XYZ 144.727 740.998 null]
+>> endobj
+514 0 obj <<
+/D [1240 0 R /XYZ 144.727 658.404 null]
+>> endobj
+518 0 obj <<
+/D [1240 0 R /XYZ 144.727 349.453 null]
+>> endobj
+1239 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R /F85 571 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1245 0 obj <<
+/Length 1771
+/Filter /FlateDecode
+>>
+stream
+xÚÅXYoã6~ϯ0, k†E}r[ô@-Ùô©Û´­F–TNR#ÿ½Ce˶²–ƒtbŠÇ|œáÉ&þØ„9ñloâ9”?‰×Wt²„¡_®˜™Â'®ç@{`pÆ…O<îCÃ!¾¨9?Ü]Ýü \Àÿ»…žz—üiq—zÓ¿î~ƒQ1ñIàºjÔf„zÌLù̸SV²¬Ò¼©›§yý°U]›ú>-§3fQ"ÊXõT2 Ÿ·ÏïŒÀÜÌHœ1ÐI´?zÞÈu©°BýµÈÚzµÌZ9$²«¾þOg.¥V ‚ª¥g9ß)9›ÑØU¸\ʤJ—«F}†É&Ìc½LÁÊE£´'"Í/Çgë¾7÷h{Œ…•ŠÖÕž3V:?•ÎqƒN:ºÛÕOw»
+[a -P¸º9µÞ~i]ÃR0ƒ Ê 'ÊÛ'Üç•OC@ÓÒO´ŸuBPwgµ sø°áuÑæFE<xjÕewÃW€µà_×µW °Q7#5Í÷ÒOÔÇm NÚd&Iæ8ݽ/ˆð3êR&߃½¨­Ýl(P\ÊƘ«™êhž×q•–3ãÔ#Œ»^ ¬f ¥—Jª¾pº ¨è®×yl êUˆò¢’ °DЭ 膌ññüß‹F~ÞËè@PšýäfgÝ^Bù ( éÖ‰Ê÷ØÉ£ò†ÄŽJìŠf6Žú&’Y¡†29¤`ª‚Ÿ“Àñ»LîœÉäêX¹Jc*ÅîRYÞlßaþUfÙ¤qˆŸÁ èbìÇÀU1¢nÕë0Ët#«Wa©Kd-37* oéš…ЗæR6Àºâ§ ; ¹_1ïò!ÿó¡à+ð!›Žb,c\Ôf¯ HhÚV»Ø–[4f²ÑÉ{ë½ôùÙŒ¥¦ Ya†}™ ±ˆé *Mšfn~¡šíÝyuì7QóÀ‘>‚ð½>c÷Ãßp?¦`ô¯?û¼O8ótZ l¦%’9õ-Që­ê
+­y[Âõ)â=¾Þs>~_ÆW»AŽß(Ø­Ú׳îjsý¢EÓzèt¬§ÎaÑ,„;œÊá;,nD_Ž¤ö–¹Ê0º¬µyº`âÍH+?WaÞõì{t®J•þÙ^³k[ë(K(üár†úüÞË;ùØüÕšKá‚leÒ±ÎT×l|‚âc¸žÔöšAáÝŽNN| 9qF|~$VgeaýùŒN<„eDb9tÖ.t¸¦Ë¼Pä Ro}ÍÜiÄüÓ†Éè-°3ÆŸÖûâåý"lSÿÿ|RŽê¦
+cý¤¼2w¯·~Rþô À. þ0D–W_§ôª¥7JoOõá8x†R[¿b»âŒâ _ ŒéÃÕŒ‡Æü—SÂendstream
+endobj
+1244 0 obj <<
+/Type /Page
+/Contents 1245 0 R
+/Resources 1243 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1225 0 R
+>> endobj
+1246 0 obj <<
+/D [1244 0 R /XYZ 144.727 740.998 null]
+>> endobj
+1243 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1249 0 obj <<
+/Length 1393
+/Filter /FlateDecode
+>>
+stream
+xÚXYo£8ï§ÈK%"-ŽlC¥•²3š£+ÍìJÍÃH»û@‚Ó @@zL”ï¾c“ЄNœªR¿ÿ}…Œ0ü‘ $©É
+G‹õÝÃÖ—+b0μlúŒ‡H²^ŠHŸù0»š|† Eð¶lÎ’<&‚`üßìOØå£EBè]J–Äù—° ¬TY¥yS7/Óúi{m¯ô
+Ë
+Yv¡òFÓ÷ú#‹«{5
+²@G~â’ß–EÑäE£êô§rv@î
+ú¾«­®5mE1å]"i×Î9ÝŠw&xmoM?~Å
+TÄîÖlLBï¯öë«Šm‘Lkó¬u·gê`m‚Ž‚
+endobj
+1248 0 obj <<
+/Type /Page
+/Contents 1249 0 R
+/Resources 1247 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1251 0 R
+>> endobj
+1250 0 obj <<
+/D [1248 0 R /XYZ 144.727 740.998 null]
+>> endobj
+522 0 obj <<
+/D [1248 0 R /XYZ 144.727 415.484 null]
+>> endobj
+526 0 obj <<
+/D [1248 0 R /XYZ 144.727 358.859 null]
+>> endobj
+1247 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1254 0 obj <<
+/Length 1546
+/Filter /FlateDecode
+>>
+stream
+xÚµY[oÛ6~ϯ0“™åM¢ô–nk·ë0t0`݃"Ó‘Y$¹Ifø¿ï’²åDm¤4A‹<<<÷‰Í(ü±“’(®fJREá,ÙœÑÙ ý|Æ‹ð ”„öÀà¢]I Bž–g¯ß…bƉ|¶\ÞåêOPÂç F)õþÔI›•EV\Íÿ]¾ýD$‚_`_ø„ ’)„ÒÎ BæýYH¢ @Fæ“ bNø'&äJ¯ñѦºŠëv‡íå&.v¨õ€´ßϨ5 ÕIûÀî¨SË'©m¬[ͨ¶Ø9*(«UŒ×Z]tJÇ‹—ÓœÚ^öýzƒNåUº;Ò÷,ìTû“<;Õܦ¨º 2ïo0Ù߃bÔh”Çu|™%»“Á USý>ºŽ&œÖy™ Á§)¾ªcH· BŽÆ@ç@ž‚hJNõ‚!¨øËî¥n|L":µ@ŽæuÙ9ÖÇb±‰åq´á«Õ1³4‘ûYîÅ,C"‰`
+ D`¬ù`ÁýÈûøá9cÌûÞv«m €z±ëë:+W¶ý‰ú”ÀCÞ€yë2ÏË9÷½½²“.ï,ga¤@£©âD;öxÝêÚò™Z0ãBí¬Í%pø¾Gæ !”÷&oJ3™{il·ðA’HâÖâö&ðʼn£}q´gÚhúë·C|Šc|¢¨0š1¢„‘øæa yj;–¥1G {ï‚.¹!¿uäP²Ù‘ú·Õ éŸ3ˆí6o1Žd¨¶0G2º_\ö0ÜL’¢]—õ&nÏÙ¡º“¦ˆ7Únž‹s†D]¬,Ý”QÚ\g%¾Þ`¯Öy|»Ç鯾\Q6hÂïe Ò%“ }énmçÆo²&Å–ðÚÒRÝ:Bª;ŠËRS¯,y[A&qR±˜$THãdÜ Íq5®ñS<çÔûœÁðc\çY“ëï°¸šC(Î FàC|­—ú¶ýË ÆQEüH¹4@áAäýâ`¿ŸçÌ÷ %EŒIþ¥Nbc,ä|Ïh)êUu™èÕ¶vP*0{9ŠÉïo\7ÚÍËZpÔµã]_8¤8Ó¬WöWÛ. 삆yY^ã 
+{´!Î!
+endobj
+1253 0 obj <<
+/Type /Page
+/Contents 1254 0 R
+/Resources 1252 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1251 0 R
+>> endobj
+1255 0 obj <<
+/D [1253 0 R /XYZ 144.727 740.998 null]
+>> endobj
+530 0 obj <<
+/D [1253 0 R /XYZ 144.727 716.092 null]
+>> endobj
+1252 0 obj <<
+/Font << /F83 563 0 R /F74 556 0 R /F75 558 0 R /F102 750 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1258 0 obj <<
+/Length 1669
+/Filter /FlateDecode
+>>
+stream
+xÚµXYoã6~ϯ0µš/Ûc·Ùb ô¥0Š
+éP ÛïÄ~‡dpšä •×û'Lª§ÑØ÷¼á&ÝV´ÙdI¾­¾ËÔÓ~7¦*»Â³a²Z¼(³8­’îfËJ•‰ªpb+•‚Ë´t—½YD¹wÊŠJâG «sœ,á6œ¨CnTªžÛ¼Vå®.æ µ©!\è*ë€|ütÿÛÝ;³^Ç•Yä…ùUË%8 åÜÜMÛÒòˆòÁ8a²[zÿ÷o[ÚP÷@‚w¨éŽ¼Žùñf£òEòtlA—ÁE)Ô ˆŒ|XPp»ì6YÇùjYÙä’؆ãáeá”AøA8ãBï,»º,ÜrlöÎ% §ƒáÈy…ÅW_2üÀðD¨M*Ê ´¬9ë)"{‹Œz»ÞÚj«”;ÔVªê—a·
+Ñ£Íx¨žL‡…|ö¤—,tZóŽ>‹ªPcŒ„Ñ‘Í‹Ú`Í¢0¿U<©ŽÙ€‚c„xA?5B"hª4« R̬ÖñˆAà«,U’W54Zµ0ÛøŒG
+þM(¡NïÜÇV7Õ$ÕfãV»ÄÄÕ&~? ­ÎÁLDàî؆`–ž 4C¾ˆÁi]
+endobj
+1257 0 obj <<
+/Type /Page
+/Contents 1258 0 R
+/Resources 1256 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1251 0 R
+>> endobj
+1259 0 obj <<
+/D [1257 0 R /XYZ 144.727 740.998 null]
+>> endobj
+534 0 obj <<
+/D [1257 0 R /XYZ 144.727 410.991 null]
+>> endobj
+538 0 obj <<
+/D [1257 0 R /XYZ 144.727 230.844 null]
+>> endobj
+1256 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1262 0 obj <<
+/Length 1958
+/Filter /FlateDecode
+>>
+stream
+xÚ½Y[sÚV~ϯð[¥N¥êè.úD°ãá‘ÖÓt&„Q£ #‰ÿûîž=âbHì!¢ã­ö\Ðùv÷ÛÝcv¥Á»b¦©:ºs嘚êyîÕ,{§]=ÁЇwLL1,CµäƒŠa¸ªcÀÓT]ÛÃ)ïÃw¿ÞÀ|Oõlã*\ð™áü/)”]M*d…yºôçqÕ±üwx³­ÝlÓQ]ÓK¢UUf+uZÕbâÞ¶–§:Ž-&þ"+ºfJëêÄŽ &2OLœ­«ºÈ”i2=ÞÑfªíébâW™YR\VI‘Ó'ªëÍʆT”¤Ká¥lY’
+¿ï1i´“ëå©Ñ-Õq-ñ§O¥:|®m^)Œ©žeñ©-øUSƒ£c¦«ºÖ|x}‰akµŽ7'Ž_`{ YšôoR/I¯æ¢HÓBÖ-ËŸHU¬j€¢êàžïüpë¦ê¹:úê‚œrG5Ü盾ÁÔ—ûî­z¹#þ${eÃqøxïÓ—oèÙë‡2Ø®+3Ƥ°? ƈài0x>ËLú¤Y©»ëz 뚤<ÇQù¬ªÈZy‘+Uå󨜓&ÉÁ/2î9‹aGöòt
+|EõtëlØô¶aë¢3OÂÛáHyô»#ÀE7¤ñäáa8’m B˜ãÐtè%jLËáÐQ±ÅG&(`XrЫÄ<Súj©iaœ¾…¼ßæßăì{ Luáy.ˆFÛ G×þ¨|8t¿‘ãü çƒ“5ž÷³ð<D®›®–Ñ4®“Y”âi»Ï˜9.œCƒ³ȃžô‰
+_Pù !v…ÿÀ¡;¤Þ ×ÀÙ¿b„ù†´<ü
+U´@~æâ R|‹˜uYäñ]˺\|©@ dÃ’ºÊ°lNe–Τ<S
+@Ê[¡ü]<ïÀÕ«¶8ÛvÛ¦xŽû˜E£ünô‡#ÞÿäeZb5½¢ îÖyRˆ\2ƒ R‘˜F•˜ Í~Å2oD*7.˜Sœ¶
+&ƒ÷Hû0íü¸¡Â”Ó‚åˆLGÎ’¼Ñìp¬—e,Òïª,²U]5™WÀ˜¾Dí³ArÛ)||ðodǤè‚$ÜèH7ç&s÷ñ¢‘~@÷ýqHB‹#Û<3îÐÀž¶i',j€ÔFQ™Ç‹q‹àNªX¸è<FªÈcQ×DT‰1çô{¢ÎešjxMû‰&¤zd\r\“: :Ö̾xm›ìf ô–)Ì„B¢}4ê}rÆw4„Y
+Ÿ1wwƒëŸèq5l›øGu .±þ0Á3h‡”2#-‚Iëó¹XÎϼ(³(%¹ñç»a€æCìr‚£î°–D_ÒUõK¡ªÛœ«ñyÔ’’ú¾ûÞ¿“ÌÖ)ôÿÜ jäÓƈ)Vi¦±
+oY»×=ÚÀ±YRGÜ‹ýöÛŒ¢ÛªÆô=J‡]â¶åGœßhÝL}ÄT—þ¸õ~“&`ôÇcèñ:4,˜
+ççÍsI3Р‡H¨¦i”!ñßeœÓÚßýGR•ñ*f@ÿÇŸ%Uµ½Š‰¶h«E“›–eGÕè.ãbáa¶Žû5V>"ÄÕMSc‹q*Úåy­L9ØO»‚ð:ÂB[”„¢ïÛU½Z0Û?€…Õ:xå2òÇc:Ã
+endobj
+1261 0 obj <<
+/Type /Page
+/Contents 1262 0 R
+/Resources 1260 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1251 0 R
+>> endobj
+1263 0 obj <<
+/D [1261 0 R /XYZ 144.727 740.998 null]
+>> endobj
+1264 0 obj <<
+/D [1261 0 R /XYZ 144.727 686.039 null]
+>> endobj
+1265 0 obj <<
+/D [1261 0 R /XYZ 144.727 666.114 null]
+>> endobj
+1266 0 obj <<
+/D [1261 0 R /XYZ 144.727 634.622 null]
+>> endobj
+1267 0 obj <<
+/D [1261 0 R /XYZ 144.727 614.308 null]
+>> endobj
+1268 0 obj <<
+/D [1261 0 R /XYZ 144.727 582.816 null]
+>> endobj
+1269 0 obj <<
+/D [1261 0 R /XYZ 144.727 550.936 null]
+>> endobj
+1270 0 obj <<
+/D [1261 0 R /XYZ 144.727 530.622 null]
+>> endobj
+1271 0 obj <<
+/D [1261 0 R /XYZ 144.727 510.697 null]
+>> endobj
+1272 0 obj <<
+/D [1261 0 R /XYZ 144.727 479.205 null]
+>> endobj
+1273 0 obj <<
+/D [1261 0 R /XYZ 144.727 447.324 null]
+>> endobj
+1274 0 obj <<
+/D [1261 0 R /XYZ 144.727 415.444 null]
+>> endobj
+1275 0 obj <<
+/D [1261 0 R /XYZ 144.727 383.564 null]
+>> endobj
+1276 0 obj <<
+/D [1261 0 R /XYZ 144.727 351.683 null]
+>> endobj
+1277 0 obj <<
+/D [1261 0 R /XYZ 144.727 319.414 null]
+>> endobj
+1278 0 obj <<
+/D [1261 0 R /XYZ 144.727 299.489 null]
+>> endobj
+1279 0 obj <<
+/D [1261 0 R /XYZ 144.727 279.564 null]
+>> endobj
+1280 0 obj <<
+/D [1261 0 R /XYZ 144.727 259.638 null]
+>> endobj
+1281 0 obj <<
+/D [1261 0 R /XYZ 144.727 239.713 null]
+>> endobj
+1282 0 obj <<
+/D [1261 0 R /XYZ 144.727 219.788 null]
+>> endobj
+1283 0 obj <<
+/D [1261 0 R /XYZ 144.727 199.862 null]
+>> endobj
+1284 0 obj <<
+/D [1261 0 R /XYZ 144.727 179.937 null]
+>> endobj
+1285 0 obj <<
+/D [1261 0 R /XYZ 144.727 160.4 null]
+>> endobj
+1286 0 obj <<
+/D [1261 0 R /XYZ 144.727 140.087 null]
+>> endobj
+1260 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1289 0 obj <<
+/Length 1684
+/Filter /FlateDecode
+>>
+stream
+xÚÅYmS£Hþî¯È—+ÁŽá5ì}J"Y³§‰â¹UçUÂDq p@V½_=Lò¦~jµJfz†fæé§{ºGÒQà—tˆ®Ë–ju,]‘m»ÛY¬N”Î }=!8E34Ù´th”4M“-½ ]îšöÑ9D•uôg'¿A›-Û¦Ö™-Ë9³àoAÕeñŸÙ·g¶yqû½}¥ºlwÉ*o&îh6šŒEI5a2äÏÑV…ž¨+ÂWÇýÂežQ„4•"‘^^pù½b(7"1ïæ\äáƒsÞòEUÖ(öé2É(NÙ«¯¼'ÍAÙߥķ"[¶ŒÏ
+7†ˆ®Ó4£y^ <‹`É>œá„{UÕøg ¥¿gÈ1>a³q|›ÜNÇ¢f½+¾Þ¹vÍ·ãÁì–±¹'B„ìL€¼~A^?Å+饦´›z‹Š£Ë‚£“’u{ÃçÖHj5ïå·ý«‘{Éyª£ñ¶›OñìØ
+Ô¬|=­|}íK©—m9úÚÂü±‚#Œq¾—Ѹx¤yËîÛm™*îãÀ<…J
+4`~R† 8¼Hó±·¢|ëÒ ,’Œaq.ZŠPj¶yR¯ô2Œ#Ìq´:ö‚†tïœ|F¹ÖE²Zy[‘úÃÃKÿÔjãP×HÍ,œ5Ó.Ó…:W`#>< ÝœýW.áDÄÑ$ùQ„EIºÉ€M®Ë•E‰
+±žœÓà´] º­¼%<ºa°Œ0¤E,&xaþ€ðÃáȹÄÃgˆ3¯ð|/§¬§ ¹Ç.<~†ñ]­¼•fÉ
+q6rx®®è*É^[ UÍ× .¦/:Þ›ÕxyÀ¡YÑíÉó·JËÞ1~Õ'
+ú÷/¶ïhl š ¶„!‹VÎÕE™C?c.jjÒF™óAÚ«é¦@Ó,Œ‹²cë,B1´$HÖøw°~+‹·C'Ü^Ú)¯hª¨4
+ZÍ|õæ+Œ±sW]k ì.Ùõϵƒ\Œ‘‹ñ2Ïk]·]Úi­ÓŽíeßÀGhW¢µE;ÖEPvÛ´0/à§C«Ž“¦=äšÏó§ÎЙ:ã&WƒÉõÍd씂À„@±Ü³Â'C|üÐãeRc“Ñ%Ô˜qu
+õRšÄPçóná=ÔØt$¾I%²¡hÜ„5ŽQ鯰^£^¯
+›Q,\´—æÙ*•ÿ 'nmÌTeÕ4q"jãAõßuÈ# üñ¢ze¸‡â‘V7;ÕÅ<œúDxÀ»õÇdáy•Ñ|_̬Úr·Ûs™X;vþÐ4F§ ;0·Mó›(™PáßMã”]ü³n,ò" ÓMHS ¤Ùû/¤õV~Dßž%üˆ9"-GÞÔrvvÆÌÛèwV%§^2UìëåZËÏ‹úwOãàãõ—»Lòâƒiûßk$Kþ\¬ó"Y…ÿÑRˬ–µ ¹žm‹‚JÛMs/bÚ²f8!öÏvuYSì]§ýzvËendstream
+endobj
+1288 0 obj <<
+/Type /Page
+/Contents 1289 0 R
+/Resources 1287 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1251 0 R
+>> endobj
+1290 0 obj <<
+/D [1288 0 R /XYZ 144.727 740.998 null]
+>> endobj
+1291 0 obj <<
+/D [1288 0 R /XYZ 144.727 716.092 null]
+>> endobj
+1292 0 obj <<
+/D [1288 0 R /XYZ 144.727 700.07 null]
+>> endobj
+1293 0 obj <<
+/D [1288 0 R /XYZ 144.727 668.356 null]
+>> endobj
+1294 0 obj <<
+/D [1288 0 R /XYZ 144.727 648.596 null]
+>> endobj
+1295 0 obj <<
+/D [1288 0 R /XYZ 144.727 628.837 null]
+>> endobj
+1296 0 obj <<
+/D [1288 0 R /XYZ 144.727 609.078 null]
+>> endobj
+1297 0 obj <<
+/D [1288 0 R /XYZ 144.727 589.707 null]
+>> endobj
+1298 0 obj <<
+/D [1288 0 R /XYZ 144.727 569.559 null]
+>> endobj
+1299 0 obj <<
+/D [1288 0 R /XYZ 144.727 538.234 null]
+>> endobj
+1300 0 obj <<
+/D [1288 0 R /XYZ 144.727 506.519 null]
+>> endobj
+1301 0 obj <<
+/D [1288 0 R /XYZ 144.727 474.805 null]
+>> endobj
+1302 0 obj <<
+/D [1288 0 R /XYZ 144.727 443.09 null]
+>> endobj
+1303 0 obj <<
+/D [1288 0 R /XYZ 144.727 422.942 null]
+>> endobj
+1304 0 obj <<
+/D [1288 0 R /XYZ 144.727 403.572 null]
+>> endobj
+1305 0 obj <<
+/D [1288 0 R /XYZ 144.727 383.813 null]
+>> endobj
+1306 0 obj <<
+/D [1288 0 R /XYZ 144.727 351.71 null]
+>> endobj
+1307 0 obj <<
+/D [1288 0 R /XYZ 144.727 331.95 null]
+>> endobj
+1308 0 obj <<
+/D [1288 0 R /XYZ 144.727 312.58 null]
+>> endobj
+1309 0 obj <<
+/D [1288 0 R /XYZ 144.727 280.865 null]
+>> endobj
+1310 0 obj <<
+/D [1288 0 R /XYZ 144.727 261.106 null]
+>> endobj
+1311 0 obj <<
+/D [1288 0 R /XYZ 144.727 240.958 null]
+>> endobj
+1287 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1314 0 obj <<
+/Length 1735
+/Filter /FlateDecode
+>>
+stream
+xÚX[oÛ6~ϯ0qK•â[ܧ¦[Ò5]Ò¡v‹ë€P3¡HA¤AþûER7;ô0ŽeŠ<ß¹ó#ÃA
+uÍK3
+ÙŒ®9Ã0?ìhrÖ³?ó
+üZe¾0ºUOá0%…ÖXëd˜Š “‘õ0‘QѨvþñ› ŒÜRüN‹Zfà7³äÊ×ß—¾øÝ |6ßW ´ØѺç¿{VPQîªdD»>ƺǀÌHG¾fö±ð)’ÑÌBýA@N4ªr³e=¶xÔº+§fFF„ ì®ñ©ÃÌq 7a`¯Ñ†de¦yªÃÀàE¢²–(Ûÿeý‘Êꟕ~lbüMؼƒAÂpÒgkŠµ’Xõ(!åõâPÄSHÔÒÇfg¨=ió±.Ø}ÊìU µ¨Ò;¤…²'V‰‹„He\8¬ñcN)Ž%±…KÉî:¶ÑĉÌ+ê´»=g‰Â9éÚÉx‘Ù\ëwõåæbi€™1ÿêüúbyÈBŠ"õiûú[eá^ÆD¢ÆØ]ÿÂ{üj„{èo7Û‚þÀÈ
+EÓ´>ßÙ“;°¸c)ÏsWßçwÞ×Pd¡Š…uXŽîl0Ê,r3©<÷Ô>oeþ KM)!# ÛþYZA?ª ÛÚ¸KìÞöÊÌÛ@¬™)¥I|]kÇÕ,ÖÛœêf,ʼÊ~ûâINóö-ì7ÊšÊXæŠçîkI÷*Õ;iîòfyÀ5ko–%U÷_[q¤a¤p|XcávØèP‡Àv0â5ÊAñQ“NáDDÌJþÄbZ&¦B>-?ÜØ
+.Zõ6jž)–ö'–±ï†¯Á,û09Äš'$V¤Ø!'-/ßÞÔÍG”r®˜EUW'¯ú}´CùUxGMÁVEÕžäÔ(Ú6F6~Ò˜uVbùo³±øÐôÂS£>ìÏ6œ¾ßÞÜr^­HDÚ-éWÛx ïaù„íæQ÷h¯×vÏh]¬IÒÚ{j"ÕN¾ÝBé8¾:Ðô¢møž¨9Ÿ³QÕñVMÊ(€¢Hï×Õ~µ6÷»ûfžûîÖš™ž´BíÇÀI'‰²Á k`0Û6Ü OD²ggkV–•ñÚ2
+‰=‚×pf ªš¦ù ØÎJ#a)·ª}Å)®3˜Ù­ê0‡ã¸eõ݉>1§(%¨}èQm˜¬ÅØ#§]*!æ®}7¢&€—ËeçN&¬¤(¥£ÖUX–Ûs>ìë-¸î$ìËËþÞbßa†!$Xßoªî+[«C­ ùòÜ\„õ.öÜÞEHÆk%kïL{{9Ÿ fþþ¯Ò7õƒÙf-üÅ鬚5žÏB3±uWNýÙ"4†Õ½^ž›KºÈ“xŸðØeÕ·ð‡ç}hFJÛ
+endobj
+1313 0 obj <<
+/Type /Page
+/Contents 1314 0 R
+/Resources 1312 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1251 0 R
+>> endobj
+1315 0 obj <<
+/D [1313 0 R /XYZ 144.727 740.998 null]
+>> endobj
+1312 0 obj <<
+/Font << /F75 558 0 R /F74 556 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1318 0 obj <<
+/Length 2465
+/Filter /FlateDecode
+>>
+stream
+xÚ­Y[¯ã¶~ß_q€ €\¬Y^tM^œ¦Ý›¦ EÑí-Ó¶ptq%:''Æùï™!)Y7×ê"Xì1EgÈá\¾!Ù…ì‰ù>‰xôù”$Iü”ïèÓ†þòŽ9F>´g×"ˆI$bhø$¤ùãöÝ>À„$ðw{0¤Ûý¿=…bõŸíG žb’„!Žòøs$Ÿ˜ð÷ê€?›]¶kôk®®òÜÔÅùíwnnóÚM^3X~´Rü)ŒÐ¨•òvgfiFÌ‚)30é˜Vïþ¼í”B ÅÓTø¼¯µño§EPqÚ§7õõ¤Ñžn@'çK™ê±È>ƒ1wŸ$1ëóöŸà-ú¼·'µZ νC•çÕŠÞKV±‹yiU²Ü7–@pô Ra㧠<•¿ZR¥å.Ïš“%Õ-SsŒ–"+m×Ë)KOf»õðê‹ÞŽÓL«î¬::!M|G6\ \1¯6SàD“€0Á‘28ÒÀPªºZ«=zF½­ü­.«5¨—ÊÒ6ô)+Ÿm³:´]ª€–Ÿx²ézl£QiUîm»Tj¯\–v®JUjû ²Gá@ó¬:Öò|ZÞë* <bÖÎàØ|°ò°a õ.gûkØaC^ô ÚœzëW%]'hNê¬*PÈ— -¦ uUN•ÎJDô”þ·¯·›Fé *¿™j?H%Ž^¡ülÌ ½ ¹þ‰Tê©,?&ÜjgÑꘕ×}•^
+PÓÛTbB8 ªÐY¡@{SçT…¸õDaDÉåNåS!`v<li_²<w§Ó¯;@]Må`|Œã‘öî‹Š"Ñ–œ8;e œÀp‹?(8G%Þ·²ÎÐ{¢Øû
+¬Y‚ ¢¯uUµ¿8UùŒyÅ%×ÙÙ¸#°¸Ùˆá/k×ߨ³\ÛµÍb-5¸`‰·CÏg1L(²´ÊÈ"ô9×Äu~/h‡¬-I’¯à+Þ×»]¥µå&KÇöÇ"Ó'CxœRêhÿ¹#®j£3Þâx“n›øœpùÔ-<4 ¿mžsÑß<~âV8÷oBG# ×rþe†-™°Q·ÄyÜî–óö£riIŒÕÀ™c¬¡Ìh‚%IàfA3’n¶w¸2Xwp Ï.*Õ.´€›ƒÞÆmº851Î’çw2ÈÐ0ƒð¸õê(0Wã0‡±Ì2hƒÔš FDÍ,VØ-å}¼\>_tc[Ò’ºžƒFóǦŽÚC€NȆÃ6ðaWÖØž²r’2G{û.›/ñ,¸9‹¿*u×È[—‡ÃsQŽ(ìNh„BCßðñiÂ8¤W\Ïþeoׯޮòí
+‘Ô{ÿv}?Ek›ÓAÄ8/ÂBœ Ú0F›qûû“?_˜`†:üNÖ.«þ©ÂHÀàýÔjÃd¤¥;(€ˆZŽ,sÆZÈó¹M¿wÂ5Ñ÷y†yLDЦ„Ì¡‚¿÷ÀæÍ™
+8‰ƒÔ—RÃ^fð‹M2–ÈÔÿ,#ã³LŸSyt_Pð–rû0»* .JeÞ.(E«s´ËÍ"/Ŷ»·_°wàà¶o!5 ¡ˆÅHáEJ„ež-ߦ×?°æA) ;,TÌ+
+²VJ
+0@lh‹ôûoÜéä
+Sis÷ábk®m1Fºl†Õ§Ì\ž&.ÙBW…IÑfƺÎöÊN
+AŠç™endstream
+endobj
+1317 0 obj <<
+/Type /Page
+/Contents 1318 0 R
+/Resources 1316 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1320 0 R
+>> endobj
+1319 0 obj <<
+/D [1317 0 R /XYZ 144.727 740.998 null]
+>> endobj
+542 0 obj <<
+/D [1317 0 R /XYZ 144.727 187.438 null]
+>> endobj
+1316 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1323 0 obj <<
+/Length 766
+/Filter /FlateDecode
+>>
+stream
+xÚ­VK›0¾çW E«’^ðKª*ú~\zhnmL‚ÄKàmÕEùï^ ¡Y´Q°Áþ>Ï73ÌÃÄu·¹Á]Œ¤F®°±ƒWW¤_âP1îÂøÂKË¡1Jaà"ÁäxÍô~ÜC%"\t€o¶«ûœIÆŒmÔ®Ù†ßÍÄqux^”gzósûeõ~{„#Lá]$ƒ»†pg þMéeSlê½êQ^¦¾Öq¶ëæÁÞ/ý@«2Þ³ÒqPuÏóh²Ñйg¡ÊN› ¿ÔO,ßnˆ0¿¾EEíÙ’p…³YaæqtE{L‡ Þ/)D(b’Œd
+Ut¦V}w½ßep4•¼øÞ&ó1|”ç:˵ªâGÕÌË4òÓ8ù{¤ß;!‘3HzšÝ\ªÂZ¶x—奪ŠELxTîæòJ|E»ÃU7H2ß ^˜ëJ5E´ÐÅ8t­.>-.Çô¶ù’x•
+tœg·Î—w
+2!³>ˆÿìã`ÏÝD%*U$Œî³Å/GYù~Ó>êrF…sSAÚ‹R!Q‘öÚPzô³B:‹HÂ8õ@–š6óÂ;4A:ŸËÏuôl=?f錴K¼¸ªõ=`Hf1ŒÍÏi‘ÄA¬»ÙÚY»³Ó=;ýŽP|‘R¿f‹ud ÅꇺëÄxÙä­d/•í¤Ü’H˜,Uo jh@Ä3îgk(°}; ¯}îž±1nMÖv½€nÑ7ú WúžeéÓvÞçA`º08Fd­agf+†‹ÂÁ-@eÛ-ÎkÐbcSówsñµºÜõS™C‰¯ ‘ºT
+ö |âZü½¼/ÓâÕ“ž €ï°vé'5”c•…ÕÄ =x7MUùbC©Ù¿s¨æÁTuí7!¦†bí
+endobj
+1322 0 obj <<
+/Type /Page
+/Contents 1323 0 R
+/Resources 1321 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1320 0 R
+>> endobj
+1324 0 obj <<
+/D [1322 0 R /XYZ 144.727 740.998 null]
+>> endobj
+1321 0 obj <<
+/Font << /F75 558 0 R /F74 556 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1327 0 obj <<
+/Length 2497
+/Filter /FlateDecode
+>>
+stream
+xÚí\Ý“›Fß¿B/Wµ®³&ÓÓóù&'wëJª.U—ì=ÅyÐJìZ)­¤“äŠóßg€a`ÐÇ)?,0Lwÿú»&Ôþƒ pNSÅ)1FOÏ7tòdO½¿w
+$Rq{89ÍÎN'†ÊÐ5ÔžÑÄ'¿½¿ùæN£}0A.'÷ÉE÷Ë_n¿ß,£Ïo~½ÿáæß÷'÷ÂCËr `ל2C´Ö§kb$ž.ýóÏÛõ!^ü›;%ò ¦Ù"
+*¥+&ê³Ùãv{ÜlÑ1úŠŒ"¨e‰ž¸ŠÃ¨ÊòLFS¼žén.V=f³Íj=ëâÚäØgÄL¿ÈÓn7ÇínûXÞ­´Y´ÑU»ÅÀ„b±cµ³äÚêʼÆtWj`ŒÕ@ñn¾RhõÌ1%bQ¼{÷Ýl½
+îQø«ârñ©Z70!HGàÄq ‘cØ„Á&Ä0!úõmµu-Smkän¥ ±¹“‚eÕI®â7iáqÊ‘üÜ)Y–¯/"‘ºŽ=t9_ÀºS@ž”]ƒb™"0›_LÑ&—‰ÏH~¥²_…#Æ­}VFEŽõ
+¦)—ïf¿mW›
+ü¿Î¸…Ž»é4®†/Ùµ<é5È®”'Jè¼á‡9òÑùa(s‹”`q÷Ÿ‡„E"wË:U¿â©Ï'e-Ž¡™Å1~úÈ0/8ÎE¨à3癑²æÄ—MÁ¨—´ý$ùiû<dŠ–ÁÂzØ!JóÉ`™¦¡M»]”°xÿí³ín?žb@ÈvÙX¿€lÈ,®bT¢G¥Ì±Ès´ñåHÖ+ k¾XD»c´ìÁpÄÃKq j‰H¶‚Du„k¨U©
+•3$umH—#$)«Í**»–À«ƒ©¿ÜØ
++œÓß6d
+'ÔWRU®øÄ•Ò’«×ÌZ1–vÂpÐñôf†û;æ “P„éóº ‡¼[/Ù¢c´ÿÍ—«ÍS«ª‹>
+@CªK] ÆfljäÙãj³:4®#Æè–Xîá³D Z¶óÓöáa5%?Î%ˆÄç!™(¶ÂXþ62j%¡ia…³÷…iËÁùQ8MfðWÝÉAVx‰¼Ú2tÊ!Ëõ)¢5P\'_ÿ6”…X ÒX7(R>W§ÿåOËæóïI¦«þ bÙsÌendstream
+endobj
+1326 0 obj <<
+/Type /Page
+/Contents 1327 0 R
+/Resources 1325 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1320 0 R
+/Annots [ 1329 0 R 1330 0 R 1331 0 R 1332 0 R 1333 0 R 1334 0 R 1335 0 R 1336 0 R 1337 0 R 1338 0 R 1339 0 R 1340 0 R 1341 0 R 1342 0 R 1343 0 R 1344 0 R 1345 0 R 1346 0 R 1347 0 R 1348 0 R 1349 0 R 1350 0 R 1351 0 R 1352 0 R 1353 0 R 1354 0 R 1355 0 R 1356 0 R 1357 0 R 1358 0 R 1359 0 R 1360 0 R 1361 0 R 1362 0 R 1363 0 R 1364 0 R 1365 0 R 1366 0 R 1367 0 R 1368 0 R 1369 0 R 1370 0 R 1371 0 R 1372 0 R 1373 0 R 1374 0 R 1375 0 R 1376 0 R 1377 0 R 1378 0 R 1379 0 R 1380 0 R 1381 0 R 1382 0 R 1383 0 R 1384 0 R 1385 0 R 1386 0 R 1387 0 R 1388 0 R 1389 0 R 1390 0 R 1391 0 R 1392 0 R 1393 0 R ]
+>> endobj
+1329 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [283.208 582.009 290.182 595.957]
+/Subtype /Link
+/A << /S /GoTo /D (page.6) >>
+>> endobj
+1330 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 582.009 305.126 595.957]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+1331 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [268.264 570.054 285.2 584.002]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+1332 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 570.054 305.126 584.002]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+1333 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 558.099 305.126 572.046]
+/Subtype /Link
+/A << /S /GoTo /D (page.107) >>
+>> endobj
+1334 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [248.339 546.143 265.275 560.091]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+1335 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [268.264 546.143 285.2 560.091]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+1336 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 546.143 305.126 560.091]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+1337 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [243.357 534.188 250.331 548.136]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+1338 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [253.32 534.188 260.294 548.136]
+/Subtype /Link
+/A << /S /GoTo /D (page.7) >>
+>> endobj
+1339 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [263.283 534.188 275.238 548.136]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+1340 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 534.188 290.182 548.136]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+1341 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 534.188 305.126 548.136]
+/Subtype /Link
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+1342 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [283.208 522.233 290.182 536.181]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+1343 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 522.233 305.126 536.181]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+1344 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 510.278 305.126 524.226]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+1345 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [218.451 438.547 230.406 452.495]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1346 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [233.395 438.547 245.35 452.495]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+1347 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [248.339 438.547 260.294 452.495]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+1348 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [263.283 438.547 275.238 452.495]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+1349 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 438.547 290.182 452.495]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+1350 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 438.547 305.126 452.495]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+1351 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 390.726 305.126 404.674]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1352 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [218.451 342.906 230.406 356.853]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1353 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [233.395 342.906 245.35 356.853]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1354 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [248.339 342.906 260.294 356.853]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1355 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [263.283 342.906 275.238 356.853]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+1356 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 342.906 290.182 356.853]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+1357 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 342.906 305.126 356.853]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+1358 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [248.339 295.085 260.294 309.033]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+1359 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [263.283 295.085 275.238 309.033]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1360 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 295.085 290.182 309.033]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+1361 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 295.085 305.126 309.033]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+1362 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 259.219 290.182 273.167]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+1363 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 259.219 305.126 273.167]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+1364 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 235.309 305.126 249.257]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+1365 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 187.488 305.126 201.436]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+1366 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [263.283 139.668 275.238 153.615]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1367 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 139.668 290.182 153.615]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1368 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 139.668 305.126 153.615]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+1369 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 641.785 499.397 655.733]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1370 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 617.874 484.453 631.822]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1371 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 617.874 499.397 631.822]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1372 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 593.964 484.453 607.912]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1373 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 593.964 499.397 607.912]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1374 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 546.143 484.453 560.091]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1375 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 546.143 499.397 560.091]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1376 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 486.368 484.453 500.315]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+1377 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 486.368 499.397 500.315]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+1378 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 462.457 499.397 476.405]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+1379 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 438.547 484.453 452.495]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+1380 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 438.547 499.397 452.495]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+1381 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 414.637 484.453 428.584]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+1382 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 414.637 499.397 428.584]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+1383 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 378.771 499.397 392.719]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1384 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [427.666 318.995 439.621 332.943]
+/Subtype /Link
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+1385 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [442.61 318.995 454.565 332.943]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+1386 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [457.554 318.995 469.509 332.943]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+1387 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 318.995 484.453 332.943]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1388 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 318.995 499.397 332.943]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1389 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [457.554 235.309 469.509 249.257]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+1390 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 235.309 484.453 249.257]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1391 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 235.309 499.397 249.257]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+1392 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 127.713 484.453 141.66]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+1393 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 127.713 499.397 141.66]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+1328 0 obj <<
+/D [1326 0 R /XYZ 144.727 740.998 null]
+>> endobj
+546 0 obj <<
+/D [1326 0 R /XYZ 144.727 680.241 null]
+>> endobj
+1325 0 obj <<
+/Font << /F83 563 0 R /F75 558 0 R /F74 556 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1396 0 obj <<
+/Length 2402
+/Filter /FlateDecode
+>>
+stream
+xÚÍËrã6òî¯ÐÑS!èFãuónÕ&[9lÕîú–ä Ù´GYT$:ãùû!°9A‹”%kƈ Ðï7a"Ã?˜
+Ò¥•0–Â:ópÚ<*ÎøzÏßo¯~üÉê‰Þ¨ÉíCÜz{ÿëõo èfö\}.77ÿ+«O¿ßþvR»ÓiA
+Òvñ)œ.Oú㬾ÖÞÖ\ýã–¡­±%í'ST ëŸW¿þ.'÷¯_®¤P_ÂZ
+ð~òt$<Qúïòê¿WÿnoÏ
+ G!~ÓÅ܃ éÞ€ùFy=ÛlÿX¬»HƒTBj±6¨¯ ýðiŠ-P–áµÉÔ(¡üS
+›ÉDHí† Ôü›æß éòùHÀ°2¿aI|ÄÔu gz¤¤i~«ŸvO!Ù`CLs‚vÕ
+ÎN¹Ü˜Ä/IµyοCAe@dÔ±<¯|³ú×5Å¢vâR`1­X4Y ë‡å§y1ÇÅ€Še‹¹†¬¨U–¨Æ4ØÝà›ß3Å©(N縋Žð¬=žAô†WÍ>%³x)Κ”lârå™ÁlqHêfP–“]`‰eƒBÈòŒ +ˆéFyå&æ±rkÏ¢o›×[ç³vËVƒLÙ¤˜5¹‰UÒeR)Ë’OηJ [GÇ$ÿ›pín¶þ²¸¯>¿WÌTÇuÊêœr¦ ;Êy·¨2ZI!çvö]‚àá Tà
+²6n¸¯P½;ž°‘(õ­5=´ªÚŠ,Otu'_??d\ƒVû¢·cúÒßɸ`õÜjn‡tK­±/R7´°¨ÎQ<ÇÔYÐZ¸«6Y¹‹…K¼¬—ŠQ®ÌöÓõ]^>o6{ÿÜ=Æøȵ¡SÄ­&,lŸéí½½§|úºCª/‰ž}w#œÐýì"Áií=uz]ž„!{]ƺw-þ ç±FQOa[;Ÿ¡Ñ|ù°,gUO’v"ׂåk s’úr2ÛÑz9»+žòV'Ú÷nTeƒaG.£M] Ú‘ÂS7ÜÖ ¬çåÙ‰ƒ–—›ôX⬷ÅúÙ"5¢ª¼D¦…Ç@T¬sE‡¼ÓÙŒs„Qaã£P£íË(cY¬îWeÎ>ÅÀ^ÏbA{ Jh0HxˆÔê
+‡c%ìGêú“eÐ?ÐâÆᵩd²Ÿf›?N£1µyj; Ή£Mçöì؆ ˜èËŽmĈ*(¹ÓþõŒ®Î®’\¾Ú5dÓ’]·_ël›öõ!6™Pb½´íÒñÒÚØ2‚ºA’é<å%Ân«ùb~ït´ìª ƒôY;vŒc×€W}/á#Iávå8 Áâ+ux³›Ó>S>drã°Z.ÊÇÍlýùkcäfÉð9‘®õP©Ü–?¡s0£#ó\õRøèó•0o-ÂðYã˜Z/{è¬ hã!¥ãl d·\ (¤;ۘΈ™!Õ¤ªi
+f߈©qFl={ÌM_Ðøî!YC¢¡(Mªiôé*e‰Îeh•"e.Wi”¹¼5Þ’ç`ÿlã‰IRÐZ9&I
+@ùY•òÒ£m6EÐ×ÚÊÉø_Åê¡QŽ©C2 ;È5b_'|úF µj&F4µ+vsÈ)‘/¨ªÙGãs1»‡ÏfãI—Ó<—E£©Äi³Ô¤[4x.܈ÁÃ"Hê6ÈÊãÑ(ÁRå JWdÀÚl«ò¡Ì.&÷Åw^NŒµ|^_4˜88Á£]þÁð×QhdóJ#ÕÁìŽÐˆVõ¥<‘gÁ\\b ©Ò¢/:Œû\§d®K–Ç­²#Œo,{ÏË—ºÙVÏ8 ±@¼V{O_š01©Åv€)û% Ò¹¯*ÿzø>½´Azlëxntƒ—ÕãïO´X¹Äž/>ÝðDï•Ù¥\ }ðiN„Œ>G90>HUj—¿òíC'E ™’PÒïóãÿoQã3endstream
+endobj
+1395 0 obj <<
+/Type /Page
+/Contents 1396 0 R
+/Resources 1394 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1320 0 R
+/Annots [ 1398 0 R 1399 0 R 1400 0 R 1401 0 R 1402 0 R 1403 0 R 1404 0 R 1405 0 R 1406 0 R 1407 0 R 1408 0 R 1409 0 R 1410 0 R 1411 0 R 1412 0 R ]
+>> endobj
+1398 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [263.283 653.725 275.238 667.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.10) >>
+>> endobj
+1399 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 653.725 290.182 667.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+1400 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 653.725 305.126 667.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+1401 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 570.039 305.126 583.987]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+1402 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 522.218 305.126 536.166]
+/Subtype /Link
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+1403 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 235.294 305.126 249.242]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+1404 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 211.384 305.126 225.332]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+1405 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [452.573 474.398 464.528 488.346]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1406 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [467.517 474.398 479.472 488.346]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1407 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [482.461 474.398 499.397 488.346]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+1408 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 402.667 499.397 416.615]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+1409 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 378.756 499.397 392.704]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+1410 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 318.981 499.397 332.928]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+1411 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 211.384 499.397 225.332]
+/Subtype /Link
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+1412 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 127.698 499.397 141.646]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+1397 0 obj <<
+/D [1395 0 R /XYZ 144.727 740.998 null]
+>> endobj
+1394 0 obj <<
+/Font << /F75 558 0 R /F74 556 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1415 0 obj <<
+/Length 2251
+/Filter /FlateDecode
+>>
+stream
+xÚí[IoëF¾ûWèè<÷tuõz$‚¹ÌŒ$9È-+щÎsþý—.RRS"-ÉÀ
+åmµ¼í^g‹·ìX3…¦÷>A3´4¹=ï¡6¨M/j•¹Gòë—EWˆ„†4L‚ýZñátã#KºéŠç¤*ÈIt:’Vú† #¹ÏÃ/k‹µ"é2ÔúléýƒðöXU6XíþZ>­Ç&°Nh²þuMpè~„7:ØуvÂ+µF÷ˆÚη¿¾L®ía0t{[è¸}
+,
+¼mÈAh×ÚÃx¶~zZ$r %$põ^À¬e NнY-~týÅ$ÏÞË+'TY©Õªt¬¼R
+Oq¯öýµ­1ÒÍ"IòcQ| ª JB©¯e‹&¨$$Ö«ß<^oó´N,DnoìõÒ}øN³¸Á¤d¬MȸË6Ÿ%£nd”ƒdÌן&#Û:èpNÆ€Vñ5^d“?³åzšß6›lû<Ù}ûDØiB‚°ï2$B(‹ª&WU\è`‹L9}‚c[°õ&χ"Y™;5 ’¹ÄÊ5®•óoãË3¢ŠÎC¤=—ÙZR¼NóÙ*__½¦ð Ñd*×Öü­fã—ízyóN šS2Z½Ò‘³p»Ë# ƒŒ¶š¥5tÚh®Ü0rÛ¢<÷*. ݧlT0¾¾« ¥…¡ªóA¡‚ÖA”¨Žëªªmýxc 7Ô öããdB¸ºšÎ“µÜ‘eŠ’1$Êþªô¡²ßÃee}‹Vw±k'¤Ý/Q¨v?±õ
+ëýe½ ×E=[Öù.{ÎçëUBå䳡W0\gxeÂMëþ‹·\:› ±âwFhë÷`¶Ot Ÿ˜Ä!eö¡ÈãÍ6Ûlç«œ*]þWßÚ£~é²nD&tPˆD9w'C8ÑœŒ]ò"‹úïàíôäÝ W>˜Uî®z0ªï´Ý÷a MbÅ3I¾Óq³ùì5¿Ý ¸šˆ¨lʨT!T¯v, Gn:Y¤BÈSX#\ b(+kð©n²â},Ðz™m&³ì“†—½F7šdâm‡ˆ·×“%ãyÀ'Û‘®Âr>}ŸçYª°%ØTÈVvIÚr,j—¬wËUŽªþùË8[nRž~Sß*&eÖÊgû­ÞŸŽ9U´ãêú’D"usÕ¸xU›ã3Е¥$=­Ñ3éU<|ÐÕ1GEbú}wI­rÈ jþ2/¯2Ð(lup:0Üùã¬é¬ðH*vŤÚñvw”º4š‘!4òÏGÝüåµ{\߯Ϣ¨ïi~1žL³i‡£»ë€Ú¦–“]àລÿsò˜ý7‘°%
+´©±ÏÒ‘Eã|¼½µ+ù(Ï™a¶# »”œ@oÏÚgùšQzýì“4Ô”Wz †²khèôòÝZeïùóëd{~xäög‹JzF.4à£E×ù6[LÞ/›Xõÿ)D÷8àtD|ë÷_Ã'ÞbÎñš)ã˜
+¿¨JOdá`nîK¨S¤äÄéd¼ŠhãU46™818Ζ2fK¨Ñ%©¡&Ødò¥F™³%•ßLZÝ•-SöÝLž§‚®8BÚ¦@Q Ë3ll* > Å*!aõ^ÂZí;±˜úÜ`÷–­ºC©€?ì?²ßu:S u«û %‹˜mŠ¨e±äá QõÑ¿À;ÿa©újEíiÅhÎÕL{VÙå)\)û·žè[aŽ÷¬'
+%ÛÕ&öm5Í^æ«”}ÊîZ˜“j¼0P±l@H¶^•Æ‡µ^ªë5ù³£ÔÂ>dÖ| Š´Ds¬… ™š#ÔLÆH ?R3!;§tUÄ0ÔZž½Y®î­Žƒj/VBéýhrå)?JIFª<ô¨(©
+ƒK
+R@霔ˆYPÞÆkÞI¦"sïUŠ‘ üÒro•LÅUÐMUd˜6‹ú€]!¿ªj¥’ôÉ 2Ýu©À/¢4 Ù\æA©!€·kèY¤zôT¥%Œ¤IwnJ꘮ˆ4Eʤ_Ï—¬aÒÉ$h%9Ç_´io’?cÓ!©Pr:žø©’S•qЃrÅ{WãÞqLåªs9àZ+4Y9ใÂý¥O`àù/dxŒÌ”Ÿ6ßÉì§P1¾@ºHd
+˜ÒLù´gÆe˜Š‘F¾)ãPaÒ=ǹ²Q” LÙHLºÆÕQÇ­¡‰”fFšåÕ:Y±iËå]p\ôoùªˆ@îªÓî.»{à8Q
+endobj
+1414 0 obj <<
+/Type /Page
+/Contents 1415 0 R
+/Resources 1413 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1320 0 R
+/Annots [ 1417 0 R 1418 0 R 1419 0 R 1420 0 R 1421 0 R 1422 0 R 1423 0 R 1424 0 R 1425 0 R 1426 0 R ]
+>> endobj
+1417 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 701.546 305.126 715.494]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+1418 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 629.815 290.182 643.763]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+1419 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 629.815 305.126 643.763]
+/Subtype /Link
+/A << /S /GoTo /D (page.96) >>
+>> endobj
+1420 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 593.95 305.126 607.897]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+1421 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [268.264 366.801 285.2 380.749]
+/Subtype /Link
+/A << /S /GoTo /D (page.100) >>
+>> endobj
+1422 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 366.801 305.126 380.749]
+/Subtype /Link
+/A << /S /GoTo /D (page.116) >>
+>> endobj
+1423 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 330.936 305.126 344.884]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+1424 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 199.429 305.126 213.377]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+1425 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 450.487 499.397 464.435]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+1426 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 115.743 499.397 129.69]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1416 0 obj <<
+/D [1414 0 R /XYZ 144.727 740.998 null]
+>> endobj
+1413 0 obj <<
+/Font << /F75 558 0 R /F74 556 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1429 0 obj <<
+/Length 2512
+/Filter /FlateDecode
+>>
+stream
+xÚÍKoã¸ùž_áã аüøñy3
+´‹n{i›
+ìîAc+‰šDre%™í¯/EI”lQ²äÈÞ`æX2ù½ß ¬¨ý+àœ(¦VŠSbŒ^m^nèêÁ>úáêWP ‘ŠÛuàámóô9ÑÒ”ïüéîæQbeˆ‘¸º»w¯Þmþò _ÿ'KÒ¯¿Þýh_áí+‰Ðª~|µÛÒSZ‰/BþÞ2û…Ö¬„)÷¿ùó‡'qu D–0þ÷æç_éjkñùñ†´˜¿Û5%`Ìêå81œ×ÿ}¾ù×Í?Ú­ªG~£
+YÞG¶ÆèÛAn áJÙ#D—:¯y=÷ $6‹>ÕÇ%65;––ò‡úþ0Œ“:ÞÎCádŒ$ðcÖüx2 Ðãnù
+».F|
+­ñ‘³-p5çšž-ÐœH+Å·¨¬C˜Â Aîtì£}ÌÙiQµØ¾gùvUE,—N +-zuO©-J\ün¨QÍÒâr!ÔX—i‚Œw¤Xïòlûº ð,4VôZ3›£8Â1 ˜•/­ÒI½ [ÃÓl}ŽŠøû:Îó,±ðžá²ÍYÈM×'ôH\õåi’>ô3Š –ç
+à–±Öä1$æ4äKq)'¶,¤õcŒ¢iì å C«ìÐêÛ§¢ôxöSÏ°ÜÏɾøk D¶ú.;Ð-aaÌÃ"eãX™j—šªBCðË´lÜ3Rz„Ú/yû­ÐA·$ÎD.J·Ë¸K‰®•+eâ<ÙEyYÙ]ŽXÂZ-YÑJ6&«téˆ}ÕAîm²——èCÊtÌjÝ,Õgæ$“X0/‡Ù¡8ªO
+,%Z°Ô¼À'y»4Í4÷Ài<E³#èÞ.n7jM c¨U†ñâRg:4s(˜½ïâ4z.~ øk‹DBUvÞ!+0e–Š…ä¼þuïÄ—(I£×ï×M„JŸÄ@ê‚/»`>Å›hW$YzfÆ•ö*æMʆSHlæü‘ÊRýhr8…Š›p¼{ëKÂKU/'”¹J"ߧ/QþtZú.ãç]ÙàÐ[d¾ Ð.½äsi¼(_Ë·ñàá> Úb¦o€A·KÓø^D­fø²–rëMRœ®uš~¦æåpµ—ÉeÞñ`{["ÊQt] 2„¯ fH^Tÿ8f:^)«ÀRh}‡Y%‡fóÂBU\IŠÃÍ/ûØtinÞÊ.ŸÎ¡ó/
+k.Mø
+i|Ÿ<ÇÖM>f®J±ŸÞ>—U†³°È`àbòŸ¥ÏI‡3Ý`a¼ÐÙ¥ñ
+aæTª²´ÈvÙ}@J8±Á`}¢*2!«¹!;_õ§r}¬?užoɉ±]´Ù/2‡<ý£äˆý¡M‹—pµ·ë™âœúCI´±¡BqÆP!c#C…Mf¹¸„à4 ¢"j–¸>à=,þ¿CÚlS‹oÙ÷Á¬j ,[ê6óXQVÝ
+EÊ㪟œnÇË\'^¿Åù>Xiž4RWæëèûN¨äŒ9ºƒó×îâIY©îçK‚¸«f¡U
+G!ÅÉ™]y
+ݪë­uw–Ê{’HÝ. u_p·‹à*4[ØvŸ©9Ì€\¹¹‹kV¼¢–³’úI&úQËë·çdÿo—t.×äŸ,לÕëÎãMœ¼…¨2Gµ—m-Ÿ5¡ÎéEÅç‚túŒB4G#B´‹u´¹œ¹&1?ÍO9 Ù…î-ÙÇ—» 3À?C• ¢ØÕ¨O2°C¢}¼Ù¤Å}–¿DÅ9Ed~\ ¥™“Ù“³t›ÝïÙeïJÎfÜ=쀵ï‡úCÅn'®Ês)N[Á<xö"s Ž1í=pD1§m¡( ý#bQÇ4)+úv ÖcˆÇøV¯doåQ‘å§óà£ìðAþ1¦‰’®lgƒ80!‡
+endobj
+1428 0 obj <<
+/Type /Page
+/Contents 1429 0 R
+/Resources 1427 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1320 0 R
+/Annots [ 1431 0 R 1432 0 R 1433 0 R 1434 0 R 1435 0 R 1436 0 R 1437 0 R 1438 0 R 1439 0 R 1440 0 R 1441 0 R 1442 0 R 1443 0 R 1444 0 R 1445 0 R 1446 0 R 1447 0 R 1448 0 R 1449 0 R 1450 0 R 1451 0 R 1452 0 R 1453 0 R ]
+>> endobj
+1431 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [248.339 689.591 255.313 703.539]
+/Subtype /Link
+/A << /S /GoTo /D (page.7) >>
+>> endobj
+1432 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [258.301 689.591 270.257 703.539]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+1433 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [273.245 689.591 285.2 703.539]
+/Subtype /Link
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+1434 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 689.591 305.126 703.539]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+1435 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 570.039 305.126 583.987]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+1436 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 498.308 305.126 512.256]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+1437 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [248.339 474.398 260.294 488.346]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+1438 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [263.283 474.398 275.238 488.346]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+1439 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 474.398 290.182 488.346]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+1440 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 474.398 305.126 488.346]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+1441 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 390.712 305.126 404.659]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+1442 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 163.563 305.126 177.511]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+1443 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 641.77 499.397 655.718]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+1444 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 605.905 499.397 619.852]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+1445 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 522.218 499.397 536.166]
+/Subtype /Link
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+1446 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 390.712 499.397 404.659]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+1447 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [427.666 330.936 439.621 344.884]
+/Subtype /Link
+/A << /S /GoTo /D (page.14) >>
+>> endobj
+1448 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [442.61 330.936 454.565 344.884]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1449 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [457.554 330.936 469.509 344.884]
+/Subtype /Link
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+1450 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 330.936 484.453 344.884]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+1451 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 330.936 499.397 344.884]
+/Subtype /Link
+/A << /S /GoTo /D (page.91) >>
+>> endobj
+1452 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 247.25 499.397 261.197]
+/Subtype /Link
+/A << /S /GoTo /D (page.14) >>
+>> endobj
+1453 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 223.339 499.397 237.287]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+1430 0 obj <<
+/D [1428 0 R /XYZ 144.727 740.998 null]
+>> endobj
+1427 0 obj <<
+/Font << /F75 558 0 R /F74 556 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1456 0 obj <<
+/Length 2415
+/Filter /FlateDecode
+>>
+stream
+xÚí\ÝoÛ8÷_áÇXs9~¾ Ü-°ow›·íbá:rêküq¶²ÍÞ_¤$c‹J¤ÄJÝbQžHôhHÎç#Ôû0)™fj$gÎÙéb=áÓ[ëç 4CP!ÓFz:ssïÎP2«]óÓõäÇ5uÌiœ^/«¡×7¿½û
+áä€-ãkL)ÞAy“æ)º=Þ; @0>›¡üƒADç 1ÜJ͉]
+Á$è#k“Z’ßw:‘fHØÍ÷e[Ré˜Òêl׆P )xΆ©æ¡m‡²+·Ÿ‹ÍÛF…§üxIeÈ÷”Ï÷ôPgÀs6€gS¾±+ì¡à2j«'q@Ä,½šåó ƒL=Z¾›Û·´–C‰wßκB•Á)0ÑàäÒ›†qÛ)YÅ¢\m3ŠäÀÏÌžyÃêÊÄ;)ÏW& 5+1É«G¤µ• hJ¿Q€#‘R©ò™¸ Ü…I£mâ숳vÙÊ §Þ
+NWE>Aà ׉¤À­ Æ‘À&®‘Iø’" A)”¡äðŸ "hίO$äñ'û¨ÌH “ÂT¥Ëåêî"RÁ*| Máo<a…®n÷Ûû]&BrÇPÂ+"I3ýÁN\}C9°±®=uɤr!3´€¯‚Ùf‰—¿-qÈ ‹ýj—Ë~@1÷Ìë¹é'æÖ ç™›¢ßÜ>Ž% Ðqôpz%=]?>÷Ø+à>ûÚ$D ±Z1äú-'*¢ŽXìx ©NÝ30Ž,ÞHÝZX½H€9^Hÿ¿a4YôÕqÕÑITTVCÈ¥A‘Qó:E3–F¹D¹¡*½)/è¬ôÆ(¶^¹½›r>î8SI­/Á~.¢¼„•Pü„€Ñõýæ{H¯¾™øw±{%CöÏ)N¥ÄÌ€cµ äjùÐÓÏÖPn EAc)ª%*‚1V›%¶´Äè£n£GË{ºÌÊT}Ê*fùÓm ¶ýjc %#e¨ˆYÇsˆFÕ¬Óà8H询±tÕê2ã¯w¦­ùE?|^åÀ±
+ýhk‡¡=…ü¥ÓQ†F¢"Óâøqþ®"×C¹X•EG45/QÚêÊY:„r®ó¬Àä%:ÜïŠ}w¥,™Š‚¤#!™Ûfxû9Ëí>cªÈ”5oáVŽS0ÛiÓÓ:N)?Í7ŸVLÉ7É«=¶¦U¬—Ìë¬O“ C£ÎDØHħb¹YÏ÷Ÿ{Ù8áÒ[0/Ðq5ŒtvÉXJEW«žÆb‚OªÛ?¼‘W ‚Ó¹£à–'’aH½…ÀUAçù@Â@lÉp"ù–¸^a/Ä4Eg¹™9ç5Jª:œ)|ëö8LdΫ`RY—1Ñ°$WóûL˜5>ÞE(SQ”Utˆ­,¤‡ÊèèëN¸£î¼ºÐ°EAž«Å]1ß™,Åëãä>Ž$;ÝÞº]%•6îõ{‚SeŸÎ
+ÇR››Í¶³:ìT3SõŒ{jÒ´¥¨é|–#{„/‡/{ó!‚¸õ q’ÞtË—Ø“Ï “³@ìž]ϳٞs¢Gø{XÞmç¥÷DÅn4W~ÎF=^8ÁçD|nÔå¨
+yãÔ
+Ð/ÿ9£r‡ÿ™øã|Ú®ßä^Ο:½ñ+&J©¾ð ßÌ:4‚È~ §AæKŸÒcÄ+ÛNß1±ù757óÜÜà›çPY¡½.GXãf»)jYGÅÅÝüp¨Éí®z·`¦,<á÷¢×lðÞ¹³f,7Öžíˇ¯Šýž3à¸Tðj5=¢L!?t¼
+Æ—Óê(s¬{êþŠê]–ª¿¢>­®ºêíÊpÕ×ùWQ8Õëóè•K®¾„ñ‡e4´ls&@Wï $ÞHÓЮB ø“ë¢aYÉ»c=ü?µÍ(ßendstream
+endobj
+1455 0 obj <<
+/Type /Page
+/Contents 1456 0 R
+/Resources 1454 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1500 0 R
+/Annots [ 1458 0 R 1459 0 R 1460 0 R 1461 0 R 1462 0 R 1463 0 R 1464 0 R 1465 0 R 1466 0 R 1467 0 R 1468 0 R 1469 0 R 1470 0 R 1471 0 R 1472 0 R 1473 0 R 1474 0 R 1475 0 R 1476 0 R 1477 0 R 1478 0 R 1479 0 R 1480 0 R 1481 0 R 1482 0 R 1483 0 R 1484 0 R 1485 0 R 1486 0 R 1487 0 R 1488 0 R 1489 0 R 1490 0 R 1491 0 R 1492 0 R 1493 0 R 1494 0 R 1495 0 R 1496 0 R 1497 0 R 1498 0 R 1499 0 R ]
+>> endobj
+1458 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [238.376 558.084 245.35 572.032]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+1459 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [248.339 558.084 255.313 572.032]
+/Subtype /Link
+/A << /S /GoTo /D (page.7) >>
+>> endobj
+1460 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [258.301 558.084 270.257 572.032]
+/Subtype /Link
+/A << /S /GoTo /D (page.18) >>
+>> endobj
+1461 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [273.245 558.084 285.2 572.032]
+/Subtype /Link
+/A << /S /GoTo /D (page.94) >>
+>> endobj
+1462 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 558.084 305.126 572.032]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+1463 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 510.263 305.126 524.211]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+1464 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 486.353 305.126 500.301]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+1465 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 390.712 305.126 404.659]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+1466 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [233.395 378.756 245.35 392.704]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1467 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [248.339 378.756 260.294 392.704]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1468 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [263.283 378.756 275.238 392.704]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+1469 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 378.756 290.182 392.704]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+1470 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 378.756 305.126 392.704]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+1471 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 283.115 305.126 297.063]
+/Subtype /Link
+/A << /S /GoTo /D (page.10) >>
+>> endobj
+1472 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 271.16 305.126 285.108]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1473 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 235.294 290.182 249.242]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1474 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 235.294 305.126 249.242]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+1475 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [263.283 199.429 275.238 213.377]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1476 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 199.429 290.182 213.377]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1477 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 199.429 305.126 213.377]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1478 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 163.563 305.126 177.511]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+1479 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [233.395 151.608 245.35 165.556]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+1480 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [248.339 151.608 260.294 165.556]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+1481 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [263.283 151.608 275.238 165.556]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+1482 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 151.608 290.182 165.556]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+1483 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 151.608 305.126 165.556]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+1484 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 139.653 290.182 153.601]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1485 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 139.653 305.126 153.601]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1486 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 318.981 499.397 332.928]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+1487 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 295.07 484.453 309.018]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+1488 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 295.07 499.397 309.018]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+1489 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [477.479 247.25 484.453 261.197]
+/Subtype /Link
+/A << /S /GoTo /D (page.3) >>
+>> endobj
+1490 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 247.25 499.397 261.197]
+/Subtype /Link
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+1491 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 235.294 499.397 249.242]
+/Subtype /Link
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+1492 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [462.535 223.339 469.509 237.287]
+/Subtype /Link
+/A << /S /GoTo /D (page.3) >>
+>> endobj
+1493 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 223.339 484.453 237.287]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+1494 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 223.339 499.397 237.287]
+/Subtype /Link
+/A << /S /GoTo /D (page.93) >>
+>> endobj
+1495 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 211.384 499.397 225.332]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+1496 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [462.535 199.429 469.509 213.377]
+/Subtype /Link
+/A << /S /GoTo /D (page.3) >>
+>> endobj
+1497 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 199.429 484.453 213.377]
+/Subtype /Link
+/A << /S /GoTo /D (page.91) >>
+>> endobj
+1498 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 199.429 499.397 213.377]
+/Subtype /Link
+/A << /S /GoTo /D (page.93) >>
+>> endobj
+1499 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 187.474 499.397 201.421]
+/Subtype /Link
+/A << /S /GoTo /D (page.91) >>
+>> endobj
+1457 0 obj <<
+/D [1455 0 R /XYZ 144.727 740.998 null]
+>> endobj
+1454 0 obj <<
+/Font << /F75 558 0 R /F74 556 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1503 0 obj <<
+/Length 2481
+/Filter /FlateDecode
+>>
+stream
+xÚí\Ks"9¾ûWøhG4¥R©Çވ퉘Ûîômfh7k0,ÐÝ;ÿ~³R¹(Tñ°qÌDHƒJJ}ùN©n%ÿƒ[ÐZXeo­–Â{w;^ÜÈÛGþéç(‡ ¡0V3øq€€Â)dB g|6æŸo~úÄxá Þ~þ’ý<ùíÑÙ÷%Õj‰é#I2V«÷|þ…Ÿ
+S9¥#idEºH:HJ›0J›´Ž$Åo=ˆ ¥Lƒ'½@ -èuøÈÁ0–Ñ°
+wÀSû†—5œ±“푱ˆö¦G´'™ŠçN ã0¡ ÛÙ÷é5TÅY¼2&ÅzÉK3ÉXŽ—‹Åè,©ªÉ9 0c|
+ÆbÚŒ“Éxù¼ÍTl>{N©˜DÁ™Ö€¶h²£5¦§­YuQ[ë ‚)ì,Xԥɻ&Wµ5Êþn2YO7‰
+Ä®1reÔ]F? ׫·ôC,’s[ϵYÙ»®À+è ¾¤µw•H6rKcC©Ð÷æÀTRVÉ gÂB]y-fÍ:”<*?((Š” T¾BAa½\X%–‹ý¿ò8©Ö d$£Øn­?­R
+see[Ul—«õ9¬agOÑ›¼Cu.ÚoÍ„»&èúÔ'—È›4:χ½¶/G$GÒ-q¢å$m)¤Ê6 ïcu0}g›’ ͱŽ}ƒGåD‡rv¨Â&€ÅñPQéz3
+endobj
+1502 0 obj <<
+/Type /Page
+/Contents 1503 0 R
+/Resources 1501 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1500 0 R
+/Annots [ 1505 0 R 1506 0 R 1507 0 R 1508 0 R 1509 0 R 1510 0 R 1511 0 R 1512 0 R 1513 0 R 1514 0 R 1515 0 R 1516 0 R 1517 0 R 1518 0 R 1519 0 R 1520 0 R 1521 0 R 1522 0 R 1523 0 R 1524 0 R 1525 0 R 1526 0 R 1527 0 R 1528 0 R 1529 0 R 1530 0 R 1531 0 R 1532 0 R 1533 0 R 1534 0 R 1535 0 R 1536 0 R 1537 0 R 1538 0 R 1539 0 R 1540 0 R 1541 0 R 1542 0 R 1543 0 R 1544 0 R 1545 0 R 1546 0 R 1547 0 R 1548 0 R 1549 0 R 1550 0 R 1551 0 R 1552 0 R 1553 0 R 1554 0 R 1555 0 R 1556 0 R 1557 0 R ]
+>> endobj
+1505 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 500.301 305.126 514.248]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+1506 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [268.264 464.435 275.238 478.383]
+/Subtype /Link
+/A << /S /GoTo /D (page.2) >>
+>> endobj
+1507 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 464.435 290.182 478.383]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+1508 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 464.435 305.126 478.383]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+1509 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 452.48 305.126 466.428]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+1510 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 416.615 305.126 430.562]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+1511 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [239.621 368.794 251.577 382.742]
+/Subtype /Link
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+1512 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 356.839 305.126 370.786]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+1513 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 320.973 305.126 334.921]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+1514 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 261.197 305.126 275.145]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+1515 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 177.511 290.182 191.459]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+1516 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 177.511 305.126 191.459]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1517 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [233.395 129.69 245.35 143.638]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+1518 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [248.339 129.69 260.294 143.638]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+1519 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [263.283 129.69 275.238 143.638]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+1520 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 129.69 290.182 143.638]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+1521 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 129.69 305.126 143.638]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+1522 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 677.636 499.397 691.583]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+1523 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [442.61 641.77 454.565 655.718]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1524 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [457.554 641.77 469.509 655.718]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1525 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 641.77 484.453 655.718]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+1526 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 641.77 499.397 655.718]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+1527 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 581.994 484.453 595.942]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1528 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 581.994 499.397 595.942]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+1529 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [442.61 558.084 454.565 572.032]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1530 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [457.554 558.084 469.509 572.032]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1531 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 558.084 484.453 572.032]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1532 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 558.084 499.397 572.032]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1533 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 522.218 499.397 536.166]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+1534 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [427.666 462.443 439.621 476.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+1535 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [442.61 462.443 454.565 476.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1536 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [457.554 462.443 469.509 476.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+1537 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 462.443 484.453 476.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+1538 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 462.443 499.397 476.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+1539 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [442.61 307.025 454.565 320.973]
+/Subtype /Link
+/A << /S /GoTo /D (page.14) >>
+>> endobj
+1540 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [457.554 307.025 469.509 320.973]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1541 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 307.025 484.453 320.973]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1542 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 307.025 499.397 320.973]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+1543 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [462.535 223.339 469.509 237.287]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+1544 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 223.339 484.453 237.287]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1545 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 223.339 499.397 237.287]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+1546 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [489.933 211.384 496.907 225.332]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+1547 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [377.853 202.796 389.808 211.802]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+1548 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [477.479 175.519 484.453 189.466]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+1549 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 175.519 499.397 189.466]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+1550 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 163.563 499.397 177.511]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+1551 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [462.535 139.653 469.509 153.601]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+1552 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 139.653 484.453 153.601]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1553 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 139.653 499.397 153.601]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+1554 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [477.479 127.698 484.453 141.646]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+1555 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 127.698 499.397 141.646]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+1556 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 115.743 484.453 129.69]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+1557 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 115.743 499.397 129.69]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1504 0 obj <<
+/D [1502 0 R /XYZ 144.727 740.998 null]
+>> endobj
+1501 0 obj <<
+/Font << /F74 556 0 R /F83 563 0 R /F75 558 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1560 0 obj <<
+/Length 2492
+/Filter /FlateDecode
+>>
+stream
+xÚåËr¹ñ®¯àÑ®Z!ènt¸ÉN6[µ—Tç´Ù%Q^íR"CRöîßó
+tqÎÒ‚PjJ5D0‰,Ÿž"èìdÒ2$‘5hlzj?³{Àêˆ5VÊP‚Òt>=%í(«þ”('“°&›ÀÄibÉÏÁÖ\ì1´„ ÈY>¯ÃËw“‰“ŸeÄM:rDÇ–¶£„L.~«–9„Ö—iÆ¿8 ±QDM8Í:­Ù@µ0¯ *2»ô[­²-7Ze¢vǸ·’,gÏ÷¿g¸‡
+ÅÖ8c
+‘9’$I[¡6IC¬‡Î…Ù¾)r¬_rp,Ø.¹<ŠÒ²Kp¡cûHn ùóo o—µB<!º­¹³YÜe´„•!è+
+ÙNˆ LÊõŠ'«Ïõ«üp˜»ÜJª!ùœ8,¢)éìøáÂÞÝÒV`ÊÅ´õT™M[®?[ç3/o99_"ylq§ƒ$œ¾„$zäDÔ†ìÚf"¦„qo_0½¬ÉÌé¬íêõ€0/_ÉIæ­²·Fûä.MŒÄÅ*4nÏæ×É™–üX<oV/=ŠÙf¨gk#±Zd2eCŠ½dRV§a9§_#³út¹Î¤÷Z…T Fú~q÷ò4{ÞTr»›O×ë
+\,7‹çz9ÈX‰JkBT¢BG+aòµœ#ñº+Ýÿ»ûŒÞq€Î8xs‚µ<‰½ð¢«íhKuñ’L ù÷)h$¢mQB>É…„½ V›ß{©GôïÔž¡+ì«{`DÊ{ÀÕËQ9­7|K9 ¥
+ †­f_Ôíz“ɘ¬2Áã¿•gû,@£BÛ}skîßÆàhØN6æ aÜßþ:˜0NSR£ û3X#ƒ²æi9¨žÊpC³æVkÀÆš2ú^MoïÆãZL qˆB¤,R.$ü±&¢MÆJXÓ% ÂÞÍBbæR)¶©³r*ý°©³sfê›â$Õ7½î|­VÓ?nîgÓ—yfÛzrôGPæ§iuNryW5S~ýÕâëÍr•Ë†½‰© 8Ÿxë<7`[9­(G!U
+zh­lëè¾®†˜ÚOرršNÐÔ-|ó­*CÊâÕ¹UÈÞIöëýþÀ^ç×ÍÃ|1Í­ŽA[íÖ¯E®YV"ál™ î¤ìd[ñKYžåé%ʆȜ/ÙW
+i4!¤½Îm‚úËW˜ºÞtª¼"Ô<G…Öï(T›*jaY™új—³Z²4gyÁ¢bRœ™2:.Ïï»Å|=Ë”|lp]ÜC§K‰–Å\«F½D­ÕË|öõñ~óKo…°€„9­6]mïæ3¢×*J­ü•6X4p)'üÍk7ÝSt¹l/‹„¡^‘xcÉô[Î:¯,!΂Ä(Ëöô0týÛÃbµø2[}]=n‚"çHaæ·ƒ²ÍvÕ­sÐõ:c‚»•£!×€•çlå¾Âiß`}Ø|œ}~|þËÝ¢2mViR$çÓ\M†HÊCׂ4œq€ˆ'kMäB4‹û¨kTaã ‚ÝÝ
+$\w$LïHØa"„¡‘°f H𘠆£ØP7†ÖÙ áÇ€hÓ­®Þvˆç3‘Ù‘øT0Äðb ul'½R »`ƒÊ+½õõ\3û°ùþùþ0¥Ê+=Êâ×|Ètá,¾}v’Aâ ÙG_rÏõPiô§—ÕJTþöðç\Eȇ$ˆÏm;ä1¤
+TlfOËÁëâì+ZåYW×-  þ4–IÑw
+ÂyÞhHåÚãîÍúk®ë´èä‹žlŠäll~­Wb·ÜÒ4ƒ'•$íOÿ‰ˆÛéz6|ž­{\~›)8¯ÓÈùav9®d®@ªšê·$Ý^ –œëFc´Ý
+u¦ëB õ:œãˆWTúÔ×ü´kàŒ"íwåð_èdåèendstream
+endobj
+1559 0 obj <<
+/Type /Page
+/Contents 1560 0 R
+/Resources 1558 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1500 0 R
+/Annots [ 1562 0 R 1563 0 R 1564 0 R 1565 0 R 1566 0 R 1567 0 R 1568 0 R 1569 0 R 1570 0 R 1571 0 R 1572 0 R 1573 0 R 1574 0 R 1575 0 R 1576 0 R 1577 0 R 1578 0 R 1579 0 R 1580 0 R 1581 0 R 1582 0 R 1583 0 R 1584 0 R 1585 0 R 1586 0 R 1587 0 R 1588 0 R 1589 0 R 1590 0 R 1591 0 R 1592 0 R 1593 0 R 1594 0 R 1595 0 R 1596 0 R 1597 0 R 1598 0 R 1599 0 R 1600 0 R 1601 0 R 1602 0 R 1603 0 R 1604 0 R 1605 0 R 1606 0 R 1607 0 R 1608 0 R 1609 0 R 1610 0 R 1611 0 R 1612 0 R 1613 0 R 1614 0 R 1615 0 R 1616 0 R 1617 0 R 1618 0 R 1619 0 R 1620 0 R 1621 0 R 1622 0 R 1623 0 R 1624 0 R 1625 0 R 1626 0 R 1627 0 R ]
+>> endobj
+1562 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 366.801 305.126 380.749]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+1563 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 342.891 305.126 356.839]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+1564 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [270.755 271.16 277.729 285.108]
+/Subtype /Link
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+1565 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [280.717 271.16 287.691 285.108]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+1566 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [290.68 271.16 302.635 285.108]
+/Subtype /Link
+/A << /S /GoTo /D (page.94) >>
+>> endobj
+1567 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [183.582 261.387 200.518 271.578]
+/Subtype /Link
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+1568 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [203.507 261.387 220.443 271.578]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+1569 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [283.208 247.25 290.182 261.197]
+/Subtype /Link
+/A << /S /GoTo /D (page.7) >>
+>> endobj
+1570 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 247.25 305.126 261.197]
+/Subtype /Link
+/A << /S /GoTo /D (page.94) >>
+>> endobj
+1571 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 235.294 305.126 249.242]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+1572 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [268.264 223.339 285.2 237.287]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+1573 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 223.339 305.126 237.287]
+/Subtype /Link
+/A << /S /GoTo /D (page.107) >>
+>> endobj
+1574 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 211.384 305.126 225.332]
+/Subtype /Link
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+1575 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 199.429 305.126 213.377]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+1576 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 187.474 305.126 201.421]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+1577 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [460.045 558.084 467.019 572.032]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+1578 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [470.007 558.084 481.963 572.032]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+1579 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [484.951 558.084 496.907 572.032]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+1580 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [377.853 548.311 389.808 558.502]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+1581 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [392.797 548.311 404.752 558.502]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+1582 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 510.263 499.397 524.211]
+/Subtype /Link
+/A << /S /GoTo /D (page.16) >>
+>> endobj
+1583 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [440.12 498.308 447.093 512.256]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+1584 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [450.082 498.308 457.056 512.256]
+/Subtype /Link
+/A << /S /GoTo /D (page.6) >>
+>> endobj
+1585 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [460.045 498.308 467.019 512.256]
+/Subtype /Link
+/A << /S /GoTo /D (page.9) >>
+>> endobj
+1586 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [470.007 498.308 481.963 512.256]
+/Subtype /Link
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+1587 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [484.951 498.308 496.907 512.256]
+/Subtype /Link
+/A << /S /GoTo /D (page.16) >>
+>> endobj
+1588 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [377.853 488.535 389.808 498.727]
+/Subtype /Link
+/A << /S /GoTo /D (page.18) >>
+>> endobj
+1589 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [393.153 488.535 405.108 498.727]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+1590 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [408.453 488.535 420.408 498.727]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+1591 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [423.752 488.535 435.708 498.727]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+1592 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [439.052 488.535 451.007 498.727]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+1593 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [454.352 488.535 466.307 498.727]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+1594 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [469.652 488.535 481.607 498.727]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+1595 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [484.951 488.535 496.907 498.727]
+/Subtype /Link
+/A << /S /GoTo /D (page.75) >>
+>> endobj
+1596 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [377.853 476.58 389.808 486.771]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+1597 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [392.797 476.58 404.752 486.771]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+1598 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [407.741 476.58 419.696 486.771]
+/Subtype /Link
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+1599 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [422.685 476.58 434.64 486.771]
+/Subtype /Link
+/A << /S /GoTo /D (page.97) >>
+>> endobj
+1600 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [437.629 476.58 454.565 486.771]
+/Subtype /Link
+/A << /S /GoTo /D (page.104) >>
+>> endobj
+1601 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [462.535 438.532 469.509 452.48]
+/Subtype /Link
+/A << /S /GoTo /D (page.6) >>
+>> endobj
+1602 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 438.532 484.453 452.48]
+/Subtype /Link
+/A << /S /GoTo /D (page.16) >>
+>> endobj
+1603 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 438.532 499.397 452.48]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+1604 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [430.157 414.622 437.131 428.57]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+1605 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [440.12 414.622 452.075 428.57]
+/Subtype /Link
+/A << /S /GoTo /D (page.14) >>
+>> endobj
+1606 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [455.064 414.622 467.019 428.57]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+1607 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [470.007 414.622 481.963 428.57]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+1608 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [484.951 414.622 496.907 428.57]
+/Subtype /Link
+/A << /S /GoTo /D (page.61) >>
+>> endobj
+1609 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [377.853 404.849 389.808 415.04]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+1610 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [392.797 404.849 404.752 415.04]
+/Subtype /Link
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+1611 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 354.846 484.453 368.794]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1612 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 354.846 499.397 368.794]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+1613 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [397.778 318.981 409.733 332.928]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+1614 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [412.722 318.981 424.677 332.928]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1615 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [427.666 318.981 439.621 332.928]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+1616 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [442.61 318.981 454.565 332.928]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+1617 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [457.554 318.981 469.509 332.928]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+1618 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 318.981 484.453 332.928]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+1619 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 318.981 499.397 332.928]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+1620 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 283.115 499.397 297.063]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+1621 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [442.61 259.205 454.565 273.152]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+1622 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [457.554 259.205 469.509 273.152]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1623 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 259.205 484.453 273.152]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1624 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 259.205 499.397 273.152]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+1625 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 235.294 499.397 249.242]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+1626 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 177.511 499.397 191.459]
+/Subtype /Link
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+1627 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 141.646 499.397 155.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.89) >>
+>> endobj
+1561 0 obj <<
+/D [1559 0 R /XYZ 144.727 740.998 null]
+>> endobj
+1558 0 obj <<
+/Font << /F75 558 0 R /F74 556 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1630 0 obj <<
+/Length 2345
+/Filter /FlateDecode
+>>
+stream
+xÚí\K㸾÷¯ð±ˆEòæì"Y`’ômw²,wc[ŽížÉüû”^”ݢܒŸZ`1‡æÈz?²ª¾* #Nÿ`J1#ÌÈ(Îœ³£xõÄG¯ôÓÏOPÞ"µdhµ?Ž%Hf…¤†b]vÏ/Oý=à˜C9z™ç·¾Ì~}ù_~ .ž%pY5`ÕÔ
+‰^À{P¢cwÑ õíD·Ÿ‰Ž‡¨ItÉ{L˜e´þÍç‹å"
+Ç–Ê9ƒüTÆ6‹“úêK
+Üùhé[¡•Å¶Ò0[ë—V¿‰Œ2èI+Þx4­ÓôK@瑺
+œ[˜Bj á`˜}ôÜ”•=Vb\©«…®ö_Ý
+NF§r]¶r]ù1)¹Jk²c¹®¿£óM¶‰™¯qIÏ€yuj~”W(ÜÍ\[©…î¡ÒûhúØH‰›Ï"¥ƒi-z\‡4²ûºqí’;¯H~¾×2˜nY¢Œ£ý$NW«h’Ŭ_“ΉP–¢=‘5ݳŸ$JœÎ’‡ó7DÓ=âgé~7˜¥­z¬šÄ¯&ÛEh£4qÚïû%QÄ芣Žxv$Iy†Ê”*O¾È
+Ô9Z
+’­?yJù“§@û“§„0¾©ÂG<íyŽ°uÓù#$¯ÓPØÜáùv
+„–!o 4%–Qh{Ì(аŠIîŽ}üÿæà}endstream
+endobj
+1629 0 obj <<
+/Type /Page
+/Contents 1630 0 R
+/Resources 1628 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1500 0 R
+/Annots [ 1632 0 R 1633 0 R 1634 0 R 1635 0 R 1636 0 R 1637 0 R 1638 0 R 1639 0 R 1640 0 R 1641 0 R 1642 0 R 1643 0 R 1644 0 R 1645 0 R 1646 0 R 1647 0 R 1648 0 R 1649 0 R 1650 0 R 1651 0 R 1652 0 R 1653 0 R 1654 0 R 1655 0 R 1656 0 R 1657 0 R 1658 0 R 1659 0 R 1660 0 R 1661 0 R 1662 0 R ]
+>> endobj
+1632 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 641.77 305.126 655.718]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+1633 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 438.532 305.126 452.48]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+1634 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [253.32 390.712 265.275 404.659]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+1635 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [268.264 390.712 285.2 404.659]
+/Subtype /Link
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+1636 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 390.712 305.126 404.659]
+/Subtype /Link
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+1637 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [265.773 366.801 272.747 380.749]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+1638 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [275.736 366.801 287.691 380.749]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+1639 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [290.68 366.801 302.635 380.749]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+1640 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [183.582 357.028 195.537 367.22]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+1641 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [198.526 357.028 215.462 367.22]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+1642 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [218.451 357.028 235.387 367.22]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+1643 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 307.025 305.126 320.973]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+1644 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 295.07 305.126 309.018]
+/Subtype /Link
+/A << /S /GoTo /D (page.102) >>
+>> endobj
+1645 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [290.68 283.115 302.635 297.063]
+/Subtype /Link
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+1646 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [183.582 273.342 200.518 283.533]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+1647 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [203.507 273.342 220.443 283.533]
+/Subtype /Link
+/A << /S /GoTo /D (page.111) >>
+>> endobj
+1648 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 235.294 290.182 249.242]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+1649 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 235.294 305.126 249.242]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+1650 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [273.245 199.429 285.2 213.377]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+1651 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 199.429 305.126 213.377]
+/Subtype /Link
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+1652 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 139.653 290.182 153.601]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+1653 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 139.653 305.126 153.601]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+1654 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 581.994 484.453 595.942]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1655 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 581.994 499.397 595.942]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+1656 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [492.423 534.174 499.397 548.121]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+1657 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [492.423 522.218 499.397 536.166]
+/Subtype /Link
+/A << /S /GoTo /D (page.9) >>
+>> endobj
+1658 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [492.423 498.308 499.397 512.256]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+1659 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 438.532 499.397 452.48]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+1660 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 426.577 484.453 440.525]
+/Subtype /Link
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+1661 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 426.577 499.397 440.525]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1662 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 297.063 499.397 311.011]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+1631 0 obj <<
+/D [1629 0 R /XYZ 144.727 740.998 null]
+>> endobj
+1628 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1665 0 obj <<
+/Length 2523
+/Filter /FlateDecode
+>>
+stream
+xÚÝ[K㸾÷¯ð±sYÅ7F‚d½Iú¶³­îqÖ¶?0™Ÿ¢,R–EÙ–»ÕíshŽL‘Åb=¾zFœþÁ¤dÍÈHÎœ³£éò^觟 š"”`ÚH'~‡_ÇB2«Ÿó§§‡ŸþjÔÈ1§Åè鹜ú4ûõñ 9ý–­^òɶ˜ÎóÝO¿=ýBse=82
+0_µü³i4ÖÈPëÑ€9¥ÊÙR‰jÁ£ÍÇÂ1« 1±&dÛ¦@)¦¤¨`Ÿè„|¨?Ö¨G§1AtEÄh}Lôz—o>”èâàá/OQ@:&½(’}ÿ|óRMøÇÏ•\ȶ\8]î0%-q h+.â…^!qÇ3G7ŒÜðKWÜËÍ,þ@rA»>äæÓßç«Y¶ËÛ$[Òe‡É M¥ËÒÉ8RÕHqQ)¶D&dS_/(¯ÿÕ¢i°æ’Þ©Ð|—íæŪM­¦pþžj KéÈxIÃ,öÔ–Ãí\Жη?Ÿ¾,™³^¾^eùí*«/«ì<%MÂ0 }îç„Bã˜áýªÍðûçÒ‡&¸m;æ¤| ØŸ „kȸÝk½
+¼¡_¦­ @FVC§bF¨?üú͈¿<p&R~÷l%?àFË “ ªþ»xøçÃß8×â Ïr(ÍÔÄâÀžY1Ý/óÕîà#¦‹l»¥sXs£Á>ÐÖWJÔYa{…A=(º¢›ÈëáàŠÇÈà¬Î^:¸””íwÅvº™¯w pB¯×’pQZü°X+X¢(P² 8QÂWpï ²Q0ðŽûJ1ˆÌžl¿'";DÆ£DÐ]V7Š
++äWÁÅãKD®e˜Ž¨XeËü¹X¥/\Š×[ÏÖ¥–S®º•¾^ìà^$¡›R0eÍûû‘ÖÝ£ï½ ®»Ý ¨ˆID7ùî~.ü¼«£>HØmÇv÷rõäö.^}ÓøýȳÍÛ¶lB¨Nd¥ò‡]ZTyW:É–[o“Ù6g˜°úvâιȾ@É *Y=!½î °G¨8² æWowr™í¾%ö:‚m1¿Ü:úg¡D¥Ä±Z¤e‰ÂÖÛ˯Woý‘éî¿?Ê«1Ó%e]¼ŠS)÷[QüžBgÀÐ]0qçì¸êÇÏí78r‹£q™GjƯ0ô
+Õ£qÕµÚ ï6Ô=(ª©Ð1…Ø'Ž-“¡ðŒ…r(Á‚
+O­1á©Óî°oh*‚.õœ# ­ C„øTH†
+°¹F…Ñ wa
+i]5ÜŠ0:L ð-¹†P`j+mÑÐý—wž¯f§×ÞŒä5EÑä=OYô5úlHþN 0ý¦Y8â¢a\ÃjŒª“Á° {jqâFOYÒr:OŒ%ÂPK<x¡‚f‘Îk
+C~AÕC‡½¥o“Â_†I÷_gÈ hèÅS1qµKš®ùê¹hf“FkK¢SÙj×.Bç·<R,K0p‡Îk8N$|šRŒ¹òÒ»´­²2ç!¾`ÚÚËÙÞŠ'‰d¯ÿG1i|ÆZ•ïuA\ð˜¤ãq„»`IÕ,£øŧi¥Ë)Gq$ã(þ*dÊe‘ý¨& ¯£ ‹£raäÂHržZHÆ=eékýHaXHéøÌ„yš'¨vá%_2:PiL Ò–œò#‡É…( .…èetÌ(îk}bnpäñ²Œ%bÙRz”L‘Ì5¼ÿA[Oµ–¼¢j¤¬b–‹+uö{¶YuœQÕgÔù@¼ƒ¼.dÇpÏÔ'H×P5åEC”ˆ(ŽÙˆ2d È‹žV{y‘Â<º’),)…OÇ–A–^±|*…KöXÊƸ.‘èÏ-ïÝßË™“ärkº¿BÄ
+3áÝÔ®[bÇæP´ïÞ»‘^‘ é•fÆA‚îuêýj[lvgoä€Ø«ÍypR2™‰ø¾}÷Û|2-û媣1 ÅZëÁ`Ò£Ô¡‡ß¡%D5BöÁ5Q“Yþœí Wà±#-Aj¤Á‰†r–D iY™@Oy[õºF­°Öå6­Ö)_6óÚ§˜ƒ pWÙ…7‚iC›À+ÎL’L!¢k·Ö&PŒaáuuåOzº”méâØ´œÒ­b¿ÖmãÆö@€û¯ë|•-R™ÜŽ”SEz'zÀåeB0-Žå-Ó*æ¼bÒKCï ø¯aœ‰˜ÝWz¼A hçÄ$»X]râ(®ÃQgíÕ¦ëÏ›ëD¦›´QiõÖUÝ1–NEjhL߸Ýà>ÁïqD¨k8q³åíLŠÓc$òl:Ôt, ©¦ h‡@¥Áf&Yˆ ~P×èAØúiHðT:«Sðm¤ø8-fùáÕí:ŸÎ¿pŽÓÃÿwEõ÷[5á_Å6Ëþ˜ò+†P
+endobj
+1664 0 obj <<
+/Type /Page
+/Contents 1665 0 R
+/Resources 1663 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1500 0 R
+/Annots [ 1667 0 R 1668 0 R 1669 0 R 1670 0 R 1671 0 R 1672 0 R 1673 0 R 1674 0 R 1675 0 R 1676 0 R 1677 0 R 1678 0 R 1679 0 R 1680 0 R 1681 0 R 1682 0 R 1683 0 R 1684 0 R 1685 0 R 1686 0 R 1687 0 R 1688 0 R 1689 0 R 1690 0 R 1691 0 R 1692 0 R 1693 0 R 1694 0 R 1695 0 R 1696 0 R 1697 0 R 1698 0 R 1699 0 R 1700 0 R 1701 0 R 1702 0 R 1703 0 R 1704 0 R 1705 0 R ]
+>> endobj
+1667 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 665.681 305.126 679.628]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+1668 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 605.905 290.182 619.852]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+1669 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 605.905 305.126 619.852]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+1670 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [223.432 593.95 235.387 607.897]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+1671 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [238.376 593.95 250.331 607.897]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+1672 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [253.32 593.95 265.275 607.897]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+1673 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [268.264 593.95 285.2 607.897]
+/Subtype /Link
+/A << /S /GoTo /D (page.108) >>
+>> endobj
+1674 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 593.95 305.126 607.897]
+/Subtype /Link
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+1675 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [283.208 570.039 290.182 583.987]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+1676 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 570.039 305.126 583.987]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+1677 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 534.174 305.126 548.121]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+1678 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 498.308 305.126 512.256]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+1679 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 486.353 305.126 500.301]
+/Subtype /Link
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+1680 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 462.443 305.126 476.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+1681 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 426.577 305.126 440.525]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1682 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 390.712 305.126 404.659]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1683 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 366.801 305.126 380.749]
+/Subtype /Link
+/A << /S /GoTo /D (page.10) >>
+>> endobj
+1684 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [280.717 283.115 287.691 297.063]
+/Subtype /Link
+/A << /S /GoTo /D (page.6) >>
+>> endobj
+1685 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [290.68 283.115 302.635 297.063]
+/Subtype /Link
+/A << /S /GoTo /D (page.16) >>
+>> endobj
+1686 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [183.582 274.607 195.537 283.533]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+1687 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 211.384 305.126 225.332]
+/Subtype /Link
+/A << /S /GoTo /D (page.10) >>
+>> endobj
+1688 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 617.86 499.397 631.808]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+1689 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 605.905 499.397 619.852]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+1690 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [432.648 558.084 439.621 572.032]
+/Subtype /Link
+/A << /S /GoTo /D (page.6) >>
+>> endobj
+1691 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [442.61 558.084 454.565 572.032]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+1692 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [457.554 558.084 469.509 572.032]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+1693 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 558.084 484.453 572.032]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+1694 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 558.084 499.397 572.032]
+/Subtype /Link
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+1695 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 414.622 499.397 428.57]
+/Subtype /Link
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+1696 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [442.61 342.891 454.565 356.839]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+1697 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [457.554 342.891 469.509 356.839]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1698 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 342.891 484.453 356.839]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+1699 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 342.891 499.397 356.839]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+1700 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [436.384 295.07 443.357 309.018]
+/Subtype /Link
+/A << /S /GoTo /D (page.7) >>
+>> endobj
+1701 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [442.61 283.115 454.565 297.063]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+1702 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [457.554 283.115 469.509 297.063]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1703 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 283.115 484.453 297.063]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1704 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 283.115 499.397 297.063]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+1705 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 139.653 499.397 153.601]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+1666 0 obj <<
+/D [1664 0 R /XYZ 144.727 740.998 null]
+>> endobj
+1663 0 obj <<
+/Font << /F75 558 0 R /F74 556 0 R /F102 750 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1708 0 obj <<
+/Length 2512
+/Filter /FlateDecode
+>>
+stream
+xÚí]K“âF¾ó+8öDL×VUÖóFسö†cŽwìÅöA ‚VX Vˆq÷þúM€J Ñ­ž˜Ù’¨ÊÊç—Y%†)þcc&Ñ\µ ÄZ3ž.Gt¼À[?ŽXöH J ¤7ïó»÷ ˆQ6}滇Ñß~Ðrl‰U0~˜ï}˜ýv÷;1Ö/þxø Ÿå ‰bÙSäJ«JË;.ùøážã®@”¤,I ÀÀý~ü{ƈ•òˆ—8X<%+oéW™²Œj.påü°)«`e:æèï…´X"´FF€hµ“öF¿ýAÇ3ìO#J
+Î9Uò˜*¹Ý¸X/yjm“¤ä)Àü¯Z³.£ƒc£«ýöÇÓ/ b kmù À„;dÁY÷ƒæîwK iò!Ñ͵¨õaâ9AéÖ9a2ÂÀïœ+“?
+½G?¼»™49ÊE²ÚmÒŠØol#æ>T©2˜&äXI ½\ßÎÄžuGât㈪ú# %Yt>ÛÚ¦3("€)É¢·Kµ(IélóR­ ܧKhh]¨F`³½—Mò:jz£ ÓyšãB±VÈb‘òX‹høI°•ÎŒRÃKTå€KÌ âíš0‡¥HW70ã°º˜‰7ŸádGËEm]%g„[u15V X¬+SGfì»BGû®¯Y³N=
+Tî0£žPGÖŽQ§‡sCêà„K>T³N.5˜OöÕ»Ão$¹XÊ¥pžé2ÐîÚ2Þä0®h›¬·Éäçÿ³ë³DŒ:³c«$c% WðPˆRy¿ž›ÊP*ën‘šoj]ôHMã“O³ÈÛ&OQ|S8A—ìg_¸o´%¡ßU«¬r„)ŠÙJã »ß@ÕÛTv«èŒD³s)J¤f% yæå?Ž–\—çúºà¸EM7 µšæóm,ÍoæÛX­ûzgͳ©Y9võ,+âÎRÏ¡¸½åf­\ùC–J×Kû4p×
+¦Ï÷¾‚Ìòô²öãØŸ÷,›JÉ·3[µÊæ}êîH
+÷ß³÷×qƒM¬››zqGRѬ7©D«Eâ=ºêo‰¼rÓ9æ¸Òu»íyPgÀmx°×Gòó LžqP9²˜:hi .3
+ûHÅ50 Û å€¢_M/tå%ÎàîÅ yáíK© 7ê[Ñ):âþ[í·ówA^χBbÔ ì*è úá¼]&’‚h+ÅŸè‹»÷̾u|cÿKâ?‹¦øõôgþ /-u=„ÃPChi á
+SoS…f­2µ ÝUq8­› ‰bú-Nuܪ ¬{±½áÉñþþÙé)òã·Ê]'î³3`ßBÌUym[ž0‡]åŒÝZUÎf›îf·„ÿ?fuèÍ6ø7Ûxç`붡.½ŒÐÏ‹B ŽA²wÙ~l´£Xýo²Ý#Ç3LY*;Q?-TºÎÔÏü?¨H›endstream
+endobj
+1707 0 obj <<
+/Type /Page
+/Contents 1708 0 R
+/Resources 1706 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1500 0 R
+/Annots [ 1710 0 R 1711 0 R 1712 0 R 1713 0 R 1714 0 R 1715 0 R 1716 0 R 1717 0 R 1718 0 R 1719 0 R 1720 0 R 1721 0 R 1722 0 R 1723 0 R 1724 0 R 1725 0 R 1726 0 R 1727 0 R 1728 0 R 1729 0 R 1730 0 R 1731 0 R 1732 0 R 1733 0 R 1734 0 R 1735 0 R 1736 0 R 1737 0 R 1738 0 R 1739 0 R 1740 0 R 1741 0 R 1742 0 R 1743 0 R 1744 0 R 1745 0 R 1746 0 R 1747 0 R 1748 0 R 1749 0 R 1750 0 R 1751 0 R 1752 0 R 1753 0 R 1754 0 R 1755 0 R 1756 0 R 1757 0 R 1758 0 R 1759 0 R 1760 0 R 1761 0 R 1762 0 R 1763 0 R 1764 0 R 1765 0 R 1766 0 R 1767 0 R 1768 0 R 1769 0 R 1770 0 R 1771 0 R 1772 0 R 1773 0 R 1774 0 R 1775 0 R 1776 0 R 1777 0 R 1778 0 R 1779 0 R 1780 0 R 1781 0 R 1782 0 R 1783 0 R 1784 0 R 1785 0 R 1786 0 R 1787 0 R 1788 0 R 1789 0 R 1790 0 R 1791 0 R 1792 0 R 1793 0 R 1794 0 R 1795 0 R 1796 0 R 1797 0 R 1798 0 R 1799 0 R 1800 0 R 1801 0 R 1802 0 R 1803 0 R ]
+>> endobj
+1710 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 677.636 305.126 691.583]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+1711 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 653.725 305.126 667.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+1712 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 641.77 305.126 655.718]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+1713 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [263.283 593.95 275.238 607.897]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+1714 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 593.95 290.182 607.897]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1715 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 593.95 305.126 607.897]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+1716 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [285.699 498.308 302.635 512.256]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+1717 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [183.582 489.8 200.518 498.727]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+1718 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 440.525 290.182 454.473]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+1719 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 440.525 305.126 454.473]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+1720 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 392.704 305.126 406.652]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+1721 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 332.928 305.126 346.876]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+1722 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 309.018 305.126 322.966]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+1723 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 285.108 305.126 299.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+1724 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 153.601 290.182 167.549]
+/Subtype /Link
+/A << /S /GoTo /D (page.18) >>
+>> endobj
+1725 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 153.601 305.126 167.549]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+1726 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 629.815 499.397 643.763]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+1727 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 558.084 484.453 572.032]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+1728 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 558.084 499.397 572.032]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+1729 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [492.423 522.218 499.397 536.166]
+/Subtype /Link
+/A << /S /GoTo /D (page.6) >>
+>> endobj
+1730 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [462.535 498.308 469.509 512.256]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+1731 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 498.308 484.453 512.256]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1732 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 498.308 499.397 512.256]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+1733 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [477.479 486.353 484.453 500.301]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+1734 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 486.353 499.397 500.301]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+1735 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [462.535 474.398 469.509 488.346]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+1736 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 474.398 484.453 488.346]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1737 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 474.398 499.397 488.346]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+1738 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [432.648 462.443 439.621 476.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+1739 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [442.61 462.443 454.565 476.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+1740 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [457.554 462.443 469.509 476.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+1741 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 462.443 484.453 476.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+1742 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 462.443 499.397 476.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+1743 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [492.423 450.487 499.397 464.435]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+1744 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [492.423 438.532 499.397 452.48]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+1745 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [477.479 426.577 484.453 440.525]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+1746 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 426.577 499.397 440.525]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+1747 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 414.622 499.397 428.57]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+1748 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [462.535 402.667 479.472 416.615]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+1749 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [482.461 402.667 499.397 416.615]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+1750 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 390.712 499.397 404.659]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+1751 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [492.423 378.756 499.397 392.704]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+1752 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 366.801 484.453 380.749]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+1753 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 366.801 499.397 380.749]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+1754 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 354.846 499.397 368.794]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+1755 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 342.891 499.397 356.839]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+1756 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 330.936 479.472 344.884]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+1757 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [482.461 330.936 489.435 344.884]
+/Subtype /Link
+/A << /S /GoTo /D (page.6) >>
+>> endobj
+1758 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [492.423 330.936 499.397 344.884]
+/Subtype /Link
+/A << /S /GoTo /D (page.9) >>
+>> endobj
+1759 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [405.25 318.981 412.224 332.928]
+/Subtype /Link
+/A << /S /GoTo /D (page.3) >>
+>> endobj
+1760 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [415.213 318.981 422.187 332.928]
+/Subtype /Link
+/A << /S /GoTo /D (page.8) >>
+>> endobj
+1761 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [425.176 318.981 437.131 332.928]
+/Subtype /Link
+/A << /S /GoTo /D (page.16) >>
+>> endobj
+1762 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [440.12 318.981 452.075 332.928]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+1763 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [455.064 318.981 467.019 332.928]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+1764 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [470.007 318.981 481.963 332.928]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+1765 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [484.951 318.981 496.907 332.928]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+1766 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [377.853 310.537 389.808 319.26]
+/Subtype /Link
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+1767 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [492.423 295.07 499.397 309.018]
+/Subtype /Link
+/A << /S /GoTo /D (page.8) >>
+>> endobj
+1768 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [462.535 283.115 469.509 297.063]
+/Subtype /Link
+/A << /S /GoTo /D (page.8) >>
+>> endobj
+1769 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 283.115 484.453 297.063]
+/Subtype /Link
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+1770 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 283.115 499.397 297.063]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+1771 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [482.461 271.16 499.397 285.108]
+/Subtype /Link
+/A << /S /GoTo /D (page.111) >>
+>> endobj
+1772 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [467.517 259.205 474.491 273.152]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+1773 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [477.479 259.205 484.453 273.152]
+/Subtype /Link
+/A << /S /GoTo /D (page.6) >>
+>> endobj
+1774 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 259.205 499.397 273.152]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+1775 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [415.213 247.25 422.187 261.197]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+1776 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [425.176 247.25 432.149 261.197]
+/Subtype /Link
+/A << /S /GoTo /D (page.6) >>
+>> endobj
+1777 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [435.138 247.25 447.093 261.197]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+1778 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [450.082 247.25 462.037 261.197]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+1779 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [465.026 247.25 476.981 261.197]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+1780 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [479.97 247.25 496.907 261.197]
+/Subtype /Link
+/A << /S /GoTo /D (page.108) >>
+>> endobj
+1781 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [377.853 237.476 394.79 247.668]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+1782 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [397.778 237.476 414.715 247.668]
+/Subtype /Link
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+1783 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [492.423 223.339 499.397 237.287]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+1784 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [420.194 211.384 427.168 225.332]
+/Subtype /Link
+/A << /S /GoTo /D (page.1) >>
+>> endobj
+1785 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [430.157 211.384 437.131 225.332]
+/Subtype /Link
+/A << /S /GoTo /D (page.8) >>
+>> endobj
+1786 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [440.12 211.384 452.075 225.332]
+/Subtype /Link
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+1787 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [455.064 211.384 467.019 225.332]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+1788 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [470.007 211.384 481.963 225.332]
+/Subtype /Link
+/A << /S /GoTo /D (page.91) >>
+>> endobj
+1789 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [484.951 211.384 496.907 225.332]
+/Subtype /Link
+/A << /S /GoTo /D (page.94) >>
+>> endobj
+1790 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [377.853 202.876 394.79 211.802]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+1791 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [482.461 187.474 489.435 201.421]
+/Subtype /Link
+/A << /S /GoTo /D (page.8) >>
+>> endobj
+1792 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [492.423 187.474 499.397 201.421]
+/Subtype /Link
+/A << /S /GoTo /D (page.9) >>
+>> endobj
+1793 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [482.461 175.519 499.397 189.466]
+/Subtype /Link
+/A << /S /GoTo /D (page.111) >>
+>> endobj
+1794 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [477.479 151.608 484.453 165.556]
+/Subtype /Link
+/A << /S /GoTo /D (page.3) >>
+>> endobj
+1795 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 151.608 499.397 165.556]
+/Subtype /Link
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+1796 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [462.535 139.653 469.509 153.601]
+/Subtype /Link
+/A << /S /GoTo /D (page.3) >>
+>> endobj
+1797 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 139.653 484.453 153.601]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+1798 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 139.653 499.397 153.601]
+/Subtype /Link
+/A << /S /GoTo /D (page.93) >>
+>> endobj
+1799 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [462.535 127.698 469.509 141.646]
+/Subtype /Link
+/A << /S /GoTo /D (page.3) >>
+>> endobj
+1800 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 127.698 484.453 141.646]
+/Subtype /Link
+/A << /S /GoTo /D (page.91) >>
+>> endobj
+1801 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 127.698 499.397 141.646]
+/Subtype /Link
+/A << /S /GoTo /D (page.93) >>
+>> endobj
+1802 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [477.479 115.743 484.453 129.69]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+1803 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 115.743 499.397 129.69]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+1709 0 obj <<
+/D [1707 0 R /XYZ 144.727 740.998 null]
+>> endobj
+1706 0 obj <<
+/Font << /F75 558 0 R /F74 556 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1806 0 obj <<
+/Length 2413
+/Filter /FlateDecode
+>>
+stream
+xÚí]Isã6¾ûWè4Õ®Šbn]S•IUn3ã[’%Ñ2'©pi·ÿý<.¢-”HŠ¡Ä•C#¼ï{ (¼ðà?¼ÀŒ!IäB2i­«í·ØÀG?ßáæÊ)’ÁØðá¥I¦`Àº|æŸw?þKò…FZÐÅãSõèãú×/þ6Ûúùóýï¿Àìí&—¤y
+Ý?PîÍý¬y÷ÓcK7&qÜ2Uþ)Ý4Ÿýçç†Öeëã™êGÌÂÁT#&% 0ÒœŸNöº]^I8ÇâÀ ŽG‹ƒOÄVäP½_þÁôeì’JvYW¬Aà ê8"Rh$©Í-;)´)'óh_Wëš Ðºõ­‡IÇ’`&Æ®«Œé2zl@œ´¥ùñ*ˆü,ßù› kš#ªé {˜ ƒ©-ƒ_†Ë8Ƀë:¨ŽT┎—ŠG.؃äb@Cˆ à»”¯4Àè.¹fï¹aöØžÆ_Óà[|¿Dã£l VaøEžd«4Üå]ÙÀ¦fXŒÎL,Ko:˧ñúON)GK«»ßamoñú)JüÜ’@+‘–#ø‰Öœiðg¬âb;;„sî1$<9žsré€;ž­-PÄSøéEŽ¤RdÏË$σmHŒ˜¢Kf.¸”Ö„$yC`i.ç
+¯1±–cmü(
+^ YF\_ÉJ€>C±p
+Ò"
+²`g¼y(k‹`„ÿpÿ@`%J¥xJÃzÍ7;ë™
+ý ÎFñ.€Mì‘= „Ý©Ú¹2I¢Y®C™ù Œ"®.¹ýS’ª…·§‰aþ6òš÷HwêåQ©!¿š»Æ½j˜ìò0‰ï@çÑö4HÂ#ö3Ç+/fÓR_³—®†Lâ:eÒ‰7°0¾½¾ôJ=tõÀDRŠV*šÏ0ÀEõ^È?ï~ýÝ[¬¦_î XÑjñRò‰°Ö‹íÝ>7­þ7ºûïÝ¿ÓÖv¢­íOµ@¡q3:0ÔÖ}‚/¹`UM÷“Áˆ!ÌÒXw0&XO;–èý , ¸%R(ÚŒ$aíHî /G0ó‚  ü`a”2¡‹â¸K¢)E¤ Túôût ÷¼®T³Q“ö.+6¶~Y@óSø
+ $,ž´ûþ¼‘á;°Æ»"Ÿ–]•{ŸhÝÀ‡µCm²ØzRƒIlÃ84¿?À
+v‘QØe~e/爳+)"žâæ#-\—-Ø_ ¤nöÕõGƒ}5ÁF×Óë«k} ¾_è|*Y`Ov{j€$”º²,0ž ‹2lñ -½Z"ªº¯pW­ô¶hfÓ!NùPÌß4–ºúr¼š¸übEËÙ&=—˜Ëø…k}‘
+ßwyˆ2æÌè2—ÈaMÁo³¼AM»r÷,#û€øÊ$öÃbî/‹ÈO¿>'ɦ÷PDÅÀân%"0þ¾c–90pʦɟƒe¸ŒÂd“ú»ç×áQë€bëè^:m51½€Ù²n…5¡ `) ì#au§Å`”zICÀÐ* ¡ªÚD”´4cXÞ|¹»fV¤ù×c$…}#f³¸r³SšÒ¬Ô%î›{¥¹÷•ÆµêjrÜxÔÜaº2Yqàßú3Ù™ßì¼oi’e40ö܃8p–Ë\èºPÖ®¼U ‚¾²‡•x
+›Ï„†½é>;Ñ$۽觢ž>\ùÿ·°dÒendstream
+endobj
+1805 0 obj <<
+/Type /Page
+/Contents 1806 0 R
+/Resources 1804 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1924 0 R
+/Annots [ 1808 0 R 1809 0 R 1810 0 R 1811 0 R 1812 0 R 1813 0 R 1814 0 R 1815 0 R 1816 0 R 1817 0 R 1818 0 R 1819 0 R 1820 0 R 1821 0 R 1822 0 R 1823 0 R 1824 0 R 1825 0 R 1826 0 R 1827 0 R 1828 0 R 1829 0 R 1830 0 R 1831 0 R 1832 0 R 1833 0 R 1834 0 R 1835 0 R 1836 0 R 1837 0 R 1838 0 R 1839 0 R 1840 0 R 1841 0 R 1842 0 R 1843 0 R 1844 0 R 1845 0 R 1846 0 R 1847 0 R 1848 0 R 1849 0 R 1850 0 R 1851 0 R 1852 0 R 1853 0 R 1854 0 R 1855 0 R 1856 0 R 1857 0 R 1858 0 R 1859 0 R 1860 0 R 1861 0 R 1862 0 R 1863 0 R 1864 0 R 1865 0 R 1866 0 R 1867 0 R 1868 0 R 1869 0 R 1870 0 R 1871 0 R 1872 0 R 1873 0 R 1874 0 R 1875 0 R 1876 0 R 1877 0 R 1878 0 R 1879 0 R 1880 0 R 1881 0 R 1882 0 R 1883 0 R 1884 0 R 1885 0 R 1886 0 R 1887 0 R 1888 0 R 1889 0 R 1890 0 R 1891 0 R 1892 0 R 1893 0 R 1894 0 R 1895 0 R 1896 0 R 1897 0 R 1898 0 R 1899 0 R 1900 0 R 1901 0 R 1902 0 R 1903 0 R 1904 0 R 1905 0 R 1906 0 R 1907 0 R 1908 0 R 1909 0 R 1910 0 R 1911 0 R 1912 0 R 1913 0 R 1914 0 R 1915 0 R 1916 0 R 1917 0 R 1918 0 R 1919 0 R 1920 0 R 1921 0 R 1922 0 R 1923 0 R ]
+>> endobj
+1808 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 701.546 305.126 715.494]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+1809 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [283.208 689.591 290.182 703.539]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+1810 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 689.591 305.126 703.539]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+1811 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [233.395 677.636 240.369 691.583]
+/Subtype /Link
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+1812 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [243.357 677.636 250.331 691.583]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+1813 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [253.32 677.636 265.275 691.583]
+/Subtype /Link
+/A << /S /GoTo /D (page.94) >>
+>> endobj
+1814 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [268.264 677.636 285.2 691.583]
+/Subtype /Link
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+1815 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 677.636 305.126 691.583]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+1816 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 665.681 305.126 679.628]
+/Subtype /Link
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+1817 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 653.725 305.126 667.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.102) >>
+>> endobj
+1818 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [253.32 641.77 265.275 655.718]
+/Subtype /Link
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+1819 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [268.264 641.77 285.2 655.718]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+1820 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 641.77 305.126 655.718]
+/Subtype /Link
+/A << /S /GoTo /D (page.111) >>
+>> endobj
+1821 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 629.815 305.126 643.763]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+1822 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 617.86 305.126 631.808]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+1823 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 605.905 305.126 619.852]
+/Subtype /Link
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+1824 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 593.95 305.126 607.897]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+1825 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [268.264 581.994 275.238 595.942]
+/Subtype /Link
+/A << /S /GoTo /D (page.6) >>
+>> endobj
+1826 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 581.994 290.182 595.942]
+/Subtype /Link
+/A << /S /GoTo /D (page.17) >>
+>> endobj
+1827 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 581.994 305.126 595.942]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+1828 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 570.039 305.126 583.987]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+1829 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 558.084 305.126 572.032]
+/Subtype /Link
+/A << /S /GoTo /D (page.17) >>
+>> endobj
+1830 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 546.129 305.126 560.077]
+/Subtype /Link
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+1831 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 534.174 290.182 548.121]
+/Subtype /Link
+/A << /S /GoTo /D (page.16) >>
+>> endobj
+1832 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 534.174 305.126 548.121]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1833 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [260.792 522.218 272.747 536.166]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+1834 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [275.736 522.218 287.691 536.166]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+1835 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [290.68 522.218 302.635 536.166]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1836 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [183.582 512.445 195.537 522.637]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1837 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [198.526 512.445 210.481 522.637]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+1838 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [213.469 512.445 225.425 522.637]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+1839 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [228.413 512.445 240.369 522.637]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+1840 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [243.357 512.445 255.313 522.637]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+1841 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [258.301 512.445 270.257 522.637]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+1842 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [273.245 512.445 290.182 522.637]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+1843 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [298.152 498.308 305.126 512.256]
+/Subtype /Link
+/A << /S /GoTo /D (page.7) >>
+>> endobj
+1844 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 486.353 305.126 500.301]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+1845 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 474.398 305.126 488.346]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+1846 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 462.443 305.126 476.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+1847 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 450.487 305.126 464.435]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+1848 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 438.532 305.126 452.48]
+/Subtype /Link
+/A << /S /GoTo /D (page.10) >>
+>> endobj
+1849 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 426.577 305.126 440.525]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+1850 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 414.622 290.182 428.57]
+/Subtype /Link
+/A << /S /GoTo /D (page.16) >>
+>> endobj
+1851 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 414.622 305.126 428.57]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1852 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 402.667 305.126 416.615]
+/Subtype /Link
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+1853 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 390.712 295.163 404.659]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+1854 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [298.152 390.712 305.126 404.659]
+/Subtype /Link
+/A << /S /GoTo /D (page.7) >>
+>> endobj
+1855 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 378.756 305.126 392.704]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+1856 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 366.801 285.2 380.749]
+/Subtype /Link
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+1857 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 366.801 305.126 380.749]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+1858 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [263.283 354.846 270.257 368.794]
+/Subtype /Link
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+1859 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [273.245 354.846 285.2 368.794]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+1860 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 354.846 305.126 368.794]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+1861 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 342.891 285.2 356.839]
+/Subtype /Link
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+1862 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 342.891 305.126 356.839]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+1863 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 330.936 285.2 344.884]
+/Subtype /Link
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+1864 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 330.936 305.126 344.884]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+1865 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 318.981 285.2 332.928]
+/Subtype /Link
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+1866 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 318.981 305.126 332.928]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+1867 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 307.025 290.182 320.973]
+/Subtype /Link
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+1868 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 307.025 305.126 320.973]
+/Subtype /Link
+/A << /S /GoTo /D (page.96) >>
+>> endobj
+1869 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [258.301 295.07 265.275 309.018]
+/Subtype /Link
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+1870 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [268.264 295.07 285.2 309.018]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+1871 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 295.07 305.126 309.018]
+/Subtype /Link
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+1872 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 283.115 285.2 297.063]
+/Subtype /Link
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+1873 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 283.115 305.126 297.063]
+/Subtype /Link
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+1874 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 271.16 305.126 285.108]
+/Subtype /Link
+/A << /S /GoTo /D (page.17) >>
+>> endobj
+1875 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [258.301 259.205 265.275 273.152]
+/Subtype /Link
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+1876 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [268.264 259.205 285.2 273.152]
+/Subtype /Link
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+1877 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 259.205 305.126 273.152]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+1878 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [263.283 247.25 275.238 261.197]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+1879 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 247.25 290.182 261.197]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+1880 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 247.25 305.126 261.197]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+1881 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 235.294 305.126 249.242]
+/Subtype /Link
+/A << /S /GoTo /D (page.17) >>
+>> endobj
+1882 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 223.339 305.126 237.287]
+/Subtype /Link
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+1883 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 211.384 305.126 225.332]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+1884 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 199.429 305.126 213.377]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+1885 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 187.474 305.126 201.421]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+1886 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [290.68 175.519 302.635 189.466]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+1887 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [183.582 165.745 195.537 175.937]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+1888 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [198.526 165.745 210.481 175.937]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1889 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [213.469 165.745 225.425 175.937]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+1890 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [228.413 165.745 240.369 175.937]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+1891 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [243.357 165.745 255.313 175.937]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+1892 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [258.301 165.745 270.257 175.937]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+1893 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [273.245 165.745 290.182 175.937]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+1894 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 151.608 290.182 165.556]
+/Subtype /Link
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+1895 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 151.608 305.126 165.556]
+/Subtype /Link
+/A << /S /GoTo /D (page.16) >>
+>> endobj
+1896 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 139.653 305.126 153.601]
+/Subtype /Link
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+1897 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 127.698 305.126 141.646]
+/Subtype /Link
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+1898 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [263.283 115.743 275.238 129.69]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+1899 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 115.743 290.182 129.69]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+1900 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 115.743 305.126 129.69]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+1901 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [482.461 701.546 499.397 715.494]
+/Subtype /Link
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+1902 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [477.479 689.591 484.453 703.539]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+1903 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 689.591 499.397 703.539]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+1904 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [492.423 677.636 499.397 691.583]
+/Subtype /Link
+/A << /S /GoTo /D (page.8) >>
+>> endobj
+1905 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 617.86 499.397 631.808]
+/Subtype /Link
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+1906 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 605.905 484.453 619.852]
+/Subtype /Link
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+1907 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 605.905 499.397 619.852]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1908 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [442.61 524.211 454.565 538.159]
+/Subtype /Link
+/A << /S /GoTo /D (page.14) >>
+>> endobj
+1909 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [457.554 524.211 469.509 538.159]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1910 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 524.211 484.453 538.159]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1911 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 524.211 499.397 538.159]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+1912 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 380.749 499.397 394.697]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+1913 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 249.242 499.397 263.19]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+1914 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [462.535 165.556 469.509 179.504]
+/Subtype /Link
+/A << /S /GoTo /D (page.2) >>
+>> endobj
+1915 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 165.556 484.453 179.504]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+1916 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 165.556 499.397 179.504]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+1917 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 153.601 499.397 167.549]
+/Subtype /Link
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+1918 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 141.646 499.397 155.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+1919 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [482.461 129.69 499.397 143.638]
+/Subtype /Link
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+1920 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [447.592 117.735 454.565 131.683]
+/Subtype /Link
+/A << /S /GoTo /D (page.3) >>
+>> endobj
+1921 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [457.554 117.735 469.509 131.683]
+/Subtype /Link
+/A << /S /GoTo /D (page.61) >>
+>> endobj
+1922 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 117.735 484.453 131.683]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+1923 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 117.735 499.397 131.683]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+1807 0 obj <<
+/D [1805 0 R /XYZ 144.727 740.998 null]
+>> endobj
+1804 0 obj <<
+/Font << /F75 558 0 R /F74 556 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1927 0 obj <<
+/Length 2332
+/Filter /FlateDecode
+>>
+stream
+xÚí\K“›F¾ëWèhWe'ó~ää¤b»Ê•’ìÍöI¬–= hmçקyˆ•Ä Ä°Èqù°XBL÷×ÝÓ¦›L1ü#SÂ9RTMÇÈ=¯&xº„¯ÞNHq  IÅáÚòå c )®á‚#-MzÏ/·“ß(15ÈH6½½Ën½]¼nÖËÄ›…þË·ïàþx‹0H
+‡Û>u$­ÂÜÚ
+Ïe;½8Î/7Û$ج+Ü0Ö¡(q6y¸@ÆP!‘­NÉ‘ºQi+·Š\ø¯âÏ–8”H°‹m£¢ç°Qé¦ÆçZTõ’ì+ ™|UʳJ$/ÌP‹¯Ê=å¨aÕ\¾R,)a‰¢{?ÜZ6(gCnÞ
+ ØB{AŠ…ô•ÇÖx^A$¨¤#ê3B¹…ÐbÕ
+¡þ:†ÈuåEË`m‰ÁbºJ¬¤àÌa{¹*"2K@(—8ªÌÀ·¦T€ôÆý¥±Ð º ±Ñ}]yÉ}•Äbë+ •süR Kâ¸àùGBY<Ú9„H¾®¦Ò³ó*Š2-¤ÄÕÔ¤‚]V÷­]yöO
+ ÐìÐze–¥ÝP ‘èlÙ76C!ˆ`QáäîUüë&sZª·mDÅ¢Uw–jR¡¨…Ú ÷Ïšfê&4üHéæ*ç…±ou cÊuù&e¿ QZï/µPûÅqj ™mR0f£ŽmóÒ6aoAÝló%-·Y¨#HP·GŠù²62cÿ™|HA­jæ7êv¦ûTåø¤>ÐpλVk1aRó0ûhÄì £À±–ÌV›ë<ç@. nÓ=å:oÑò[Ë ;׸µ·8$«™€l>(6rhlt¶Ñ<zDV-T=/ åÜÆ5ìö“üŽMÄ8PÉ+ÛZåñHñÔ#Ÿ1-ƒŠº¾ù­ÈÛYNPƒ$3Cä†uMÂ}”¿öET¸:á€f³pXIUBŽ$Vã8’CÉisÐ ÍÂåsZQÝ¡”¼FÕ^`— õ”lj3¤NvQ”«:BæÞl´;eˆÎç„Zð
+·‡_\ò.¥.§h¿êõ•NGŸ6Š—cH®LïN⌧Á¹1ôð†JˆBLN…Hcö”Á|µ Ž`-;IA‡5­ž¶5mU'ÚǦ?«ŒS=í
+&N›÷ˆ5TÑp†5yöѥK!¨>n?i¼nÑD!å-ý»treaÇ„"À|M—w ‚"†y·†$¡ÜÛî%|g½Ì"·|:N¤ø¥츉ZžÃOGåw%4s'úZö×DÈ1ˆ£QÃ9ܹ ˆ¯Ú-ΠÎ0ŒK@dK`Pqélä‰bºd‚óæS3Â]|?Û$Éf嶘1ElcoªÁgI’ºÇâ2S†¸pùâ‚O”Hðcq\‚–RzÆùh/Cçj  Чþ)|ÁzÙMÏTÖÐ/h9hFšrØ£`ÍÕ*qV;T©GµJ‡T…c8¢éHLyf>HºÒ÷$ b²¨I×KŠU'³j±–>Öû½“Hendstream
+endobj
+1926 0 obj <<
+/Type /Page
+/Contents 1927 0 R
+/Resources 1925 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1924 0 R
+/Annots [ 1929 0 R 1930 0 R 1931 0 R 1932 0 R 1933 0 R 1934 0 R 1935 0 R 1936 0 R 1937 0 R 1938 0 R 1939 0 R 1940 0 R 1941 0 R 1942 0 R 1943 0 R 1944 0 R 1945 0 R 1946 0 R 1947 0 R 1948 0 R 1949 0 R 1950 0 R 1951 0 R 1952 0 R 1953 0 R 1954 0 R 1955 0 R 1956 0 R 1957 0 R 1958 0 R 1959 0 R 1960 0 R 1961 0 R 1962 0 R 1963 0 R 1964 0 R 1965 0 R 1966 0 R 1967 0 R 1968 0 R 1969 0 R 1970 0 R 1971 0 R 1972 0 R 1973 0 R 1974 0 R 1975 0 R 1976 0 R 1977 0 R 1978 0 R 1979 0 R 1980 0 R 1981 0 R 1982 0 R 1983 0 R 1984 0 R 1985 0 R 1986 0 R 1987 0 R 1988 0 R 1989 0 R 1990 0 R 1991 0 R 1992 0 R 1993 0 R 1994 0 R 1995 0 R 1996 0 R 1997 0 R 1998 0 R 1999 0 R 2000 0 R 2001 0 R 2002 0 R 2003 0 R 2004 0 R 2005 0 R 2006 0 R 2007 0 R 2008 0 R 2009 0 R 2010 0 R 2011 0 R 2012 0 R 2013 0 R 2014 0 R 2015 0 R ]
+>> endobj
+1929 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 701.546 305.126 715.494]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+1930 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [253.32 689.591 260.294 703.539]
+/Subtype /Link
+/A << /S /GoTo /D (page.3) >>
+>> endobj
+1931 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [263.283 689.591 275.238 703.539]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+1932 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 689.591 290.182 703.539]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+1933 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 689.591 305.126 703.539]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+1934 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 677.636 305.126 691.583]
+/Subtype /Link
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+1935 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [260.792 665.681 272.747 679.628]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+1936 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [275.736 665.681 287.691 679.628]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+1937 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [290.68 665.681 302.635 679.628]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+1938 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [183.582 655.907 195.537 666.099]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+1939 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [198.526 655.907 215.462 666.099]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+1940 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [218.451 655.907 235.387 666.099]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+1941 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 641.77 305.126 655.718]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+1942 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 629.815 305.126 643.763]
+/Subtype /Link
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+1943 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 510.263 305.126 524.211]
+/Subtype /Link
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+1944 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [295.661 474.398 302.635 488.346]
+/Subtype /Link
+/A << /S /GoTo /D (page.6) >>
+>> endobj
+1945 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [183.582 464.625 195.537 474.816]
+/Subtype /Link
+/A << /S /GoTo /D (page.17) >>
+>> endobj
+1946 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [198.526 464.625 210.481 474.816]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+1947 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 450.487 290.182 464.435]
+/Subtype /Link
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+1948 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 450.487 305.126 464.435]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1949 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [253.32 237.287 260.294 251.235]
+/Subtype /Link
+/A << /S /GoTo /D (page.3) >>
+>> endobj
+1950 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [263.283 237.287 275.238 251.235]
+/Subtype /Link
+/A << /S /GoTo /D (page.61) >>
+>> endobj
+1951 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 237.287 290.182 251.235]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+1952 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 237.287 305.126 251.235]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+1953 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 225.332 305.126 239.28]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+1954 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 201.421 305.126 215.369]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+1955 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [283.208 165.556 290.182 179.504]
+/Subtype /Link
+/A << /S /GoTo /D (page.6) >>
+>> endobj
+1956 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 165.556 305.126 179.504]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+1957 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [268.264 153.601 285.2 167.549]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+1958 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 153.601 305.126 167.549]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+1959 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 141.646 305.126 155.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.107) >>
+>> endobj
+1960 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [248.339 129.69 265.275 143.638]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+1961 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [268.264 129.69 285.2 143.638]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+1962 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 129.69 305.126 143.638]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+1963 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [243.357 117.735 250.331 131.683]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+1964 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [253.32 117.735 260.294 131.683]
+/Subtype /Link
+/A << /S /GoTo /D (page.7) >>
+>> endobj
+1965 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [263.283 117.735 275.238 131.683]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+1966 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 117.735 290.182 131.683]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+1967 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 117.735 305.126 131.683]
+/Subtype /Link
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+1968 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [477.479 701.546 484.453 715.494]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+1969 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 701.546 499.397 715.494]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+1970 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 689.591 499.397 703.539]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+1971 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 677.636 499.397 691.583]
+/Subtype /Link
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+1972 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 665.681 499.397 679.628]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+1973 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 653.725 499.397 667.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.91) >>
+>> endobj
+1974 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [477.479 641.77 484.453 655.718]
+/Subtype /Link
+/A << /S /GoTo /D (page.7) >>
+>> endobj
+1975 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 641.77 499.397 655.718]
+/Subtype /Link
+/A << /S /GoTo /D (page.94) >>
+>> endobj
+1976 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 629.815 499.397 643.763]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+1977 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [462.535 617.86 479.472 631.808]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+1978 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [482.461 617.86 499.397 631.808]
+/Subtype /Link
+/A << /S /GoTo /D (page.107) >>
+>> endobj
+1979 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [482.461 605.905 499.397 619.852]
+/Subtype /Link
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+1980 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [482.461 593.95 499.397 607.897]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+1981 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [482.461 581.994 499.397 595.942]
+/Subtype /Link
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+1982 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 570.039 499.397 583.987]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+1983 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [492.423 558.084 499.397 572.032]
+/Subtype /Link
+/A << /S /GoTo /D (page.6) >>
+>> endobj
+1984 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [492.423 546.129 499.397 560.077]
+/Subtype /Link
+/A << /S /GoTo /D (page.6) >>
+>> endobj
+1985 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [492.423 534.174 499.397 548.121]
+/Subtype /Link
+/A << /S /GoTo /D (page.6) >>
+>> endobj
+1986 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [492.423 522.218 499.397 536.166]
+/Subtype /Link
+/A << /S /GoTo /D (page.6) >>
+>> endobj
+1987 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [462.535 510.263 479.472 524.211]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+1988 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [482.461 510.263 499.397 524.211]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+1989 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 498.308 499.397 512.256]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+1990 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 486.353 499.397 500.301]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+1991 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [462.535 474.398 479.472 488.346]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+1992 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [482.461 474.398 499.397 488.346]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+1993 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 462.443 499.397 476.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+1994 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [492.423 450.487 499.397 464.435]
+/Subtype /Link
+/A << /S /GoTo /D (page.7) >>
+>> endobj
+1995 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [492.423 438.532 499.397 452.48]
+/Subtype /Link
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+1996 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [477.479 426.577 484.453 440.525]
+/Subtype /Link
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+1997 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 426.577 499.397 440.525]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+1998 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [482.461 414.622 499.397 428.57]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+1999 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 402.667 499.397 416.615]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+2000 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [492.423 390.712 499.397 404.659]
+/Subtype /Link
+/A << /S /GoTo /D (page.6) >>
+>> endobj
+2001 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [492.423 378.756 499.397 392.704]
+/Subtype /Link
+/A << /S /GoTo /D (page.6) >>
+>> endobj
+2002 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [492.423 366.801 499.397 380.749]
+/Subtype /Link
+/A << /S /GoTo /D (page.6) >>
+>> endobj
+2003 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [482.461 354.846 499.397 368.794]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+2004 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [492.423 342.891 499.397 356.839]
+/Subtype /Link
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+2005 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 283.115 499.397 297.063]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+2006 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 271.16 484.453 285.108]
+/Subtype /Link
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+2007 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 271.16 499.397 285.108]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2008 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 235.294 499.397 249.242]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+2009 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [412.722 211.384 424.677 225.332]
+/Subtype /Link
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+2010 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [427.666 211.384 439.621 225.332]
+/Subtype /Link
+/A << /S /GoTo /D (page.18) >>
+>> endobj
+2011 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [442.61 211.384 454.565 225.332]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2012 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [457.554 211.384 469.509 225.332]
+/Subtype /Link
+/A << /S /GoTo /D (page.61) >>
+>> endobj
+2013 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 211.384 484.453 225.332]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+2014 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 211.384 499.397 225.332]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+2015 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [433.893 139.653 445.848 153.601]
+/Subtype /Link
+/A << /S /GoTo /D (page.17) >>
+>> endobj
+1928 0 obj <<
+/D [1926 0 R /XYZ 144.727 740.998 null]
+>> endobj
+1925 0 obj <<
+/Font << /F75 558 0 R /F74 556 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2018 0 obj <<
+/Length 2153
+/Filter /FlateDecode
+>>
+stream
+xÚí\KsâF¾ó+8®«–ÉtÏûF¥*»©½eãÛf„M™‡8NòëÓz
+ЙžùÞŒ÷ãÂÊVÒG2ÛBïÄËíåX!O±Bï ´yž½tnlÑ»0‡!=¥O)«i=Ž†“h­ç³Í6˜°"ã>:KÌÍ$1÷©)9Ø_\zŽIÁý•n`À—áËz5þtýÒÙË°&Ñ&UÁ! ¦­ôé]MÝ §³Ç×uU©­»-µ³Ì3Tjë2=H¸Š6Àe´˜v¸­¯¿O_˲¡bä¡.dá¦îH‡6“IXÃz4.oG¦á‚xÅÂÐe¨“JöùºÒ¶Îè%eq?FãÊ5L¦­¾h2}SZL0«”k"Ú•1µkýcõi±},k¨ëÕâJ’ þ@Ô>r ÿ*Ô Zè]q—ÛÅhK¹öpô°ú+Ž¦ÓÙüq½ºƒ¯TCRàäåÍ;òŒdÄw¢ §Å”•æ²L3Ñ]±¥BCw×âQ Z<PnlƵ<vÑâi,ŒÆ[‚Ú@N6Ðl´%Åíó®!|Øš#b Ý®}®Ô ´_3¹U]¿‡ß‘R
+ISPȡѦÔZÀšR·D!ìBÃÍx={ÙþϤ‹2Iͤ†vJëÊvE(ñ#Jœ$TUVµÙR¥´KüÉ+juH$™´ e)éHɬÀ´x#
+(I0e÷;‘Në¢kþR–ÐÒS»TWÆ×öbçgó´—;Ìaƨ«{š°ýS4šÌ–Ä“ÇæàES¾t°eÉ•{Ÿôš«[B€¼Èþšïh&y‡¡ “Bõ•¥
+2mv·CL
+dä¾5„\{ ^†L^QtÁk¿XsLgËÑ|ó2
+¥” Cnç 2v“à ÚÖÖà§â©d9¨Ï-YÎ*®«‡ºA†åaÈðŒM7oÞàÑálåo00¹ë€ieO;TËóäÌòܳZÃýU޲ΖõHkkÛ
+endobj
+2017 0 obj <<
+/Type /Page
+/Contents 2018 0 R
+/Resources 2016 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1924 0 R
+/Annots [ 2020 0 R 2021 0 R 2022 0 R 2023 0 R 2024 0 R 2025 0 R 2026 0 R 2027 0 R 2028 0 R 2029 0 R 2030 0 R 2031 0 R 2032 0 R 2033 0 R 2034 0 R 2035 0 R 2036 0 R 2037 0 R 2038 0 R 2039 0 R 2040 0 R 2041 0 R 2042 0 R ]
+>> endobj
+2020 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [237.131 677.636 254.067 691.583]
+/Subtype /Link
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+2021 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [263.283 665.681 275.238 679.628]
+/Subtype /Link
+/A << /S /GoTo /D (page.10) >>
+>> endobj
+2022 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 665.681 290.182 679.628]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2023 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 665.681 305.126 679.628]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+2024 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 617.86 290.182 631.808]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2025 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 617.86 305.126 631.808]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+2026 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 354.846 305.126 368.794]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+2027 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [237.131 307.025 254.067 320.973]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+2028 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [229.659 259.205 241.614 273.152]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+2029 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [244.603 259.205 261.539 273.152]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+2030 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [229.659 211.384 241.614 225.332]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+2031 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [244.603 211.384 261.539 225.332]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+2032 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [423.93 641.77 435.885 655.718]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+2033 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [438.874 641.77 455.811 655.718]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+2034 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [426.421 581.994 438.376 595.942]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2035 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [441.365 581.994 453.32 595.942]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+2036 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [433.893 558.084 445.848 572.032]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+2037 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [426.421 510.263 438.376 524.211]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2038 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [441.365 510.263 453.32 524.211]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+2039 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 366.801 499.397 380.749]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2040 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [423.93 307.025 435.885 320.973]
+/Subtype /Link
+/A << /S /GoTo /D (page.14) >>
+>> endobj
+2041 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [438.874 307.025 455.811 320.973]
+/Subtype /Link
+/A << /S /GoTo /D (page.102) >>
+>> endobj
+2042 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [433.893 223.339 445.848 237.287]
+/Subtype /Link
+/A << /S /GoTo /D (page.14) >>
+>> endobj
+2019 0 obj <<
+/D [2017 0 R /XYZ 144.727 740.998 null]
+>> endobj
+2016 0 obj <<
+/Font << /F75 558 0 R /F74 556 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2045 0 obj <<
+/Length 2430
+/Filter /FlateDecode
+>>
+stream
+xÚí[K“âF¾÷¯à8±ÔVÖ»n؎ݱ}òŽ;b¶j 0 V¨=Óÿ~SBP•@Ac‡cTƒ¦ê«Ì¬Ì/³R0¢øF ÑL´ ÄZ3š®Ÿèh?}z‚â.9QZàØóã˜#ÔৠFÙì‘oŸŸþùo|Þ«øèyž?ù<ûåù8æ’|
+„¢{þñé_ÏÕÂr4¢9ϦÿßÓ/¿ÑÑ ‘üøD GÌ_pL X;Z?®Êdñçêéç§ÿT3å?©Q5Q+Î !4ÄÌ@
+”0Æj@Òô+p1OâMºÒ4L&ëà÷p¾Iïi ¸D¥ªì›dQüôùSûŽkN´įr¸åÙˆ•ò
+èÇhPÞ„QÝ´|.“!”kªSöD9”ö jÓr”Y«
+Jº” ‘Q^@4ü|+b…B“/ûɳI‰”®€“`6KãÉ:˜&±» H2ÎíF#8[¥,ŒjåY¿˜épýE°Z…opôûEgñôunÒýäÓU°Ûí‡ñ6âs|¸@ù£sU]ˆéZ@u `§k¯®3ëËÝÂÖ<p/ôIüšÎ2©ºׄåhÜdÈL™³0.¥OÉûÿìÙ~ÍÝ—{—SÜ£`ç—q ·¬Åõ“È|uÌUg½ÝÃ'h–¨øbùþ§î•ÍkÓ(óîwUÙ¥i%Ûí,œ»{—’HÁoj#‡fn¥/@ Ðá&L_H!I`w­ó³éÁ¼‡Ð„ü)ƒMØÌãÛÅT¡€îñµ€øß ÙD›E?'e­®Š‡ÆôpRa: æóhÕ×Ie›V÷I°º‡1Ÿ—,¦kVË«—¬ÆœâŽw’¯\
+Ë0˜-Ãh±ô”g5'B÷³¸ÜªtÕcǬ·(QLì( ±D›ÅdšœÇ’qCaË⃰劒òj$
+]ñ¬±íXY’ÕšꜸŽ!îÂmKÝp€» ª¨Ú
+„nµm¹Š6¾+DNЮڰ©üFÊ°_SøYÕSyÕŒCíQL뀈×á6X X¥lFS†º1YM ±‹­û½Ôð2\^"³—pè^M=k-ÃÛcK¶ŠçÈ@yie˜û›DH3Äɸž«[Î2ñ]vpMµC³ë"U5¥V:dÃéýDr¾c¹Ûú_–g]yuØ÷,©Ûž%K`’()jyÙ¼j£jÎÄl5äeÔEZT]Èì¦7 Ô¨]°ºIˆž3Ýõ÷¯¾_<\ú`Z…YMË‹fª÷¿pȪ8LMRå_\®ªËQ½‡ ¤¬aðzXm܈‚u2"}‘ø›­!Ö´«ÞYàR{›$A´ gH$~ïÛ¡‘—ë„25o. ˜DG+Š¥•ÄÑ*ú0°·m˜L‚Ít'áfÖ¡ÒØŽK!ƒv
+W9BôPÿÄ]$ée/rä[_ä°Õ%`d}¥šiÝ+ÓN­9gïº9ïÖ«s ¨M‚”sÌ×{U7¯Õ0rÞ¸Ù󲪭mÆ Ð}Ù’y
+VÑbó®<¿ü”Ê—o(Ðóóô^ŒÃךh½^£@ØttÑ|2×Û ^¢U”¾ùN©%\ôëãÌ8ü‡t?™+ÓÉ<Z…woùÊ܉”p®ëâhþ&»p$‹h3ˆ¼šçZ¶tÑÏÐ37–·d¸ýôK<W¯ëÍ :~oÀ¦ý=šÃÊcÍÂAjo÷– ÜV6Áv‹\$úonÔΘû¶ó¬ LC^44š{ûwžQU¬]<ܱ0‚ð<ß>˜õÿ_TÈ„endstream
+endobj
+2044 0 obj <<
+/Type /Page
+/Contents 2045 0 R
+/Resources 2043 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1924 0 R
+/Annots [ 2047 0 R 2048 0 R 2049 0 R 2050 0 R 2051 0 R 2052 0 R 2053 0 R 2054 0 R 2055 0 R 2056 0 R 2057 0 R 2058 0 R 2059 0 R 2060 0 R 2061 0 R 2062 0 R 2063 0 R 2064 0 R 2065 0 R 2066 0 R 2067 0 R 2068 0 R 2069 0 R 2070 0 R 2071 0 R 2072 0 R 2073 0 R 2074 0 R 2075 0 R 2076 0 R 2077 0 R 2078 0 R 2079 0 R 2080 0 R 2081 0 R 2082 0 R ]
+>> endobj
+2047 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 689.591 305.126 703.539]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+2048 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 570.039 305.126 583.987]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+2049 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 534.174 305.126 548.121]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+2050 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 450.487 305.126 464.435]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2051 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 414.622 305.126 428.57]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2052 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [239.621 366.801 251.577 380.749]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2053 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 237.287 290.182 251.235]
+/Subtype /Link
+/A << /S /GoTo /D (page.16) >>
+>> endobj
+2054 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 237.287 305.126 251.235]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2055 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 213.377 305.126 227.324]
+/Subtype /Link
+/A << /S /GoTo /D (page.10) >>
+>> endobj
+2056 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 117.735 305.126 131.683]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+2057 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [492.423 689.591 499.397 703.539]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+2058 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [440.12 677.636 452.075 691.583]
+/Subtype /Link
+/A << /S /GoTo /D (page.10) >>
+>> endobj
+2059 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [455.064 677.636 467.019 691.583]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+2060 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [470.007 677.636 481.963 691.583]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+2061 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [484.951 677.636 496.907 691.583]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2062 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [377.853 669.128 389.808 678.054]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+2063 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [410.232 605.905 422.187 619.852]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+2064 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [425.176 605.905 437.131 619.852]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+2065 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [440.12 605.905 452.075 619.852]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+2066 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [455.064 605.905 467.019 619.852]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+2067 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [470.007 605.905 481.963 619.852]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2068 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [484.951 605.905 496.907 619.852]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+2069 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [377.853 596.131 389.808 606.323]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+2070 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [392.797 596.131 404.752 606.323]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+2071 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [407.741 596.131 419.696 606.323]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+2072 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [422.685 596.131 439.621 606.323]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+2073 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [442.61 440.525 454.565 454.473]
+/Subtype /Link
+/A << /S /GoTo /D (page.14) >>
+>> endobj
+2074 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [457.554 440.525 469.509 454.473]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2075 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 440.525 484.453 454.473]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+2076 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 440.525 499.397 454.473]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2077 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 404.659 499.397 418.607]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+2078 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 237.287 484.453 251.235]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+2079 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 237.287 499.397 251.235]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+2080 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 155.593 499.397 169.541]
+/Subtype /Link
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+2081 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 143.638 499.397 157.586]
+/Subtype /Link
+/A << /S /GoTo /D (page.16) >>
+>> endobj
+2082 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 131.683 499.397 145.631]
+/Subtype /Link
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+2046 0 obj <<
+/D [2044 0 R /XYZ 144.727 740.998 null]
+>> endobj
+2043 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2085 0 obj <<
+/Length 2162
+/Filter /FlateDecode
+>>
+stream
+xÚÍ[KÛ6¾ûWø¸j–Ãá(Šm¶hZh»·¦­­Ý¸ñCµì$ý÷½(Ë¢lË+;‹Ì•(òã¼g81§0)™fl$gÎÙñt9âãgzõÓÊ)¨i#ix9©ÞNP2«]6çû‡Ñ×?5vÌi?<åSfݽ”??ý8_Ä?|ž§ÛôÍßoi¦¬gZÅ$B9½¡ÕùE?Ö¨;©D¹Á”I¹Ã€9¥<¬ùÓr¹žÅmDJ1%qDB¢ýêÍDÐFWîÖF÷Ûw÷é.‰7m„Æ1©@Øø¡]F?<x6ƒ¤MˆÉ™ƒB²Ç›çòý?•\—m®kw¸Z1%,O h'^‘@Ÿ”§’4Ÿ¢6a´a’DzXÂL1œÐ¹÷¹ iCƒ–Ûå9ú±[ñËÙ­N³ûyµÞÄiMã+š-Ô¤«´Ãx"I)›\µZ“#ˆ;à(ò!ÞàP=•˧AëðÆÈ%”¶
+ÝçF¡½D#/MšÅ}ƒMœ$Ýô Øü›·¡2 °ÈÖþ™&¯/Q/í_ÈÒ”ÐZÇX®_í1°Ç1ÖiôêÜ<á†t~ôZ’!B~2*(ßCSŇ³õt·Ì¬p®‰ÓE”¦ÅplçëY] ç¦:E\>An™•¢o:{¸œdΊRŒ¯ˆ¥¹£0ô8¿y3¡9ÄÈ݆ÂÚIšÄÓù;ÎÅ´àQowÉ·X—KÆEÅâdA¹ÌûõbVQ+’5FõÒ(ý03UÌfÁ%eå¢{˜çv2ŸÓVªósêÝ'›èeA¤-Ò5ëóJ«Ïkƒ p5
+{
+… ˜Âz_Î(OÒb6
+_}¥Äññ (D¢Uš£™ERnI!à¾\Ê7˜\;•%)çØCºƒœëSÈKh™nC–ÖQÂau H¹§ô{šP˜Z~Ü%Ë›e2ÈÉU{Ÿ<\G2EèdK¬(‚—Æq‹±/*«Müb@¯å’—t…ØðÅcSÓ›¶³þ_ë1¸ ¤E–ü«k¤E¿„Ò"ÎT»|ø!Ž“t¾è“uó“—3øùuÎñŸÖ›Y v¥©›ä>¡B>á•aÆbÏG^PÉgG8W§VÆ>‡¶]Ôw$eyQ¿tj'¬ÅôR†‹úÅ+¿Ð©¢>p¨d7iÊè†vüÖ(t/î¯^×T& YÍËš¾ Ú"^°g™\Üߧñ4Ë!ÓÓ~1+í!¹`_Rººª´ç˜æÍ–òXïµóŸ[ÞYí
+ðü©z]ÿM'霬ùó.™¾T¥óhuM`ŠÜ‹]Ú¨’h=o¢äý
+~ ITz‹=\!åî‹®ÆÙ+Ý…E ú¢rûÜè1^¼‚¢n+'ÏúJÔ…¶U¨3lë´ü­e="áù–e'
+4¤<ì*Úã’ 2L7xd4xZ ë÷9fº«ÛÈœ¿ç¹œËÇYÔ‘øǼ㒜ó;Rú5]I~ÀÇhs«$?¿R‚w^ ‘¼äòö¢¬I ¥¡ ´£,EbwÍ[]`%Cîš¡åÿ:›jendstream
+endobj
+2084 0 obj <<
+/Type /Page
+/Contents 2085 0 R
+/Resources 2083 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1924 0 R
+/Annots [ 2087 0 R 2088 0 R 2089 0 R 2090 0 R 2091 0 R 2092 0 R 2093 0 R 2094 0 R 2095 0 R 2096 0 R 2097 0 R ]
+>> endobj
+2087 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 677.636 305.126 691.583]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+2088 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 653.725 305.126 667.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+2089 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 558.084 305.126 572.032]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+2090 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 534.174 305.126 548.121]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+2091 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [298.152 213.377 305.126 227.324]
+/Subtype /Link
+/A << /S /GoTo /D (page.7) >>
+>> endobj
+2092 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [239.621 177.511 251.577 191.459]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+2093 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 595.942 499.397 609.89]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+2094 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [482.461 550.114 499.397 564.062]
+/Subtype /Link
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+2095 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 466.428 499.397 480.375]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+2096 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 358.831 484.453 372.779]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+2097 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 358.831 499.397 372.779]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+2086 0 obj <<
+/D [2084 0 R /XYZ 144.727 740.998 null]
+>> endobj
+2083 0 obj <<
+/Font << /F75 558 0 R /F74 556 0 R /F83 563 0 R /F102 750 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2100 0 obj <<
+/Length 2337
+/Filter /FlateDecode
+>>
+stream
+xÚí\Ks7¾óWðhWYX4Ï›6U‰«R›Ãf•S’%(–ÄGÈQ쟿=/€ä`È™!‡¢“”j‹ Ðèç× @0æôÆ %3ÂŒäÌ9;~˜øxJ}A92m$Ñ‘oªOoP2«]6滻ѿ~0jì˜Ó8¾{ʇÞ=þúá7@ùŸÿüùû¿ßýHCd"‘)kÊqì#M˳À…ú çŸ>Þú‘P‘Vª@êOÙœÄ3¨Ç7
+Zúµ´3´SáTœZ‰~œséj÷¨¹lÏÿkþ9ºÀ´ dt6 IÒVæœr‘ñ¯iJ¹†Š„l¯ÙD|gD¬d…J8ObÔ]d°Iï—_ëRPŠ)‰5)œõ‡3êÒf#ì–Ëok¿bw5™&·«·ôurŸ¼ÖP ÁáÜÒÒJñìë£ïï¼·fÞ.•k iVrÖ?F¿þÎÇäØ?Ž8C
+_ˆæ œÏG ™“²üïëè£ÿÏ÷“gBàQÏÏ6·y™­ê{ÒÀ”8AÙnAã“y±Ê¶…¼NÒ䫈ùˆdˆ²äèqùð6Oi1ùmcCºµæW5Ñ;F’¬–ÏCiöûõ´ðóçR|².>«ö§+†ÄC2(ZŠãöZ‡“L“õ&¢Á„®B… ««ŒBWî(Q²ŠÂB0 »Á>õŽ-%ïàÂÉS:Y¯—_"ü&É`ÏìÄ™Û
+¥MÌ„ŠknK,Î)ÚÎu 2Is h¼Á‘Y»+ÄÚpEz¥+½2"Ö“Ö”Úf$îFz!ª˜N¤õ¤õ¤ÖΓVÄ"½0>é¿hŒOÆ*O:ŸÃù!¤'EH>Æ/b­ŒÎá´íÂhgüÅ@êÝ9ÊÌí¬ëfÑ…¹Ì"öB¾«†ML…¡âÍ7”JÕ9ÐXtŒ’͆²¥ääá骗œ#‚¶†©M›ð§4Æ‚¬ÐŽ¤„)ĞҵǢ¥á¤èÇb„GÈ\®£´çÖTñWQªSfOÆ)D¼õ[c{1þçqÙú5J—.H“­×¹‡Â¥û¤ìÃâŸÇÝL² šw¡äpPA^Ç4¯ Üé@š^Œ¶°Sø
+²t‡e©_¡¬p“ðz6}nÊÄž´ºSÔ*Ó¬Š0QÎcb
+µ`²ìVøÕJ]üJVÎ]úÅ6æAé1'ùyEÊnØ<½%Xör}p³º«áÊÑÆ{+Ã
+TåE¥•®éü÷\í
+®![Ê6ÙòUÿ½’/o|’X/‹õ‰ŠQD:WkˆÏ'/É$}MÒ4Võåhñ˜M€ò²Áò¦ÃƒÝ[<ÙÚ÷›”¥É
+ØÈc×Sô–*²Ga«Ézõ¶yîÊPŽšŒ ï½T‡‹1~åM²:µÞî l‡ÚvÖÿ2{LŸ[¿ÿ)^DBx)ümCYYí½‹ à]ÒÂú¥¸ ?xqàŒi®\)b3/ùK½K¬C™/d]Éáºb!sBy§[„¹ôùþ>RÌ;¦´ºüOüªçÞÀÀ©¡ÌŠ¿Ú^þ,„çäÞ;3 wS ÿjC×_BÝ€“Œ<=?»³¨bÛíÊW*‡ò`½è¡ü€Üí
+íÿ1ƒendstream
+endobj
+2099 0 obj <<
+/Type /Page
+/Contents 2100 0 R
+/Resources 2098 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1924 0 R
+/Annots [ 2102 0 R 2103 0 R 2104 0 R 2105 0 R 2106 0 R 2107 0 R 2108 0 R 2109 0 R 2110 0 R 2111 0 R 2112 0 R 2113 0 R 2114 0 R 2115 0 R 2116 0 R 2117 0 R 2118 0 R 2119 0 R 2120 0 R 2121 0 R 2122 0 R 2123 0 R 2124 0 R 2125 0 R 2126 0 R 2127 0 R 2128 0 R 2129 0 R 2130 0 R 2131 0 R 2132 0 R 2133 0 R 2134 0 R 2135 0 R 2136 0 R 2137 0 R 2138 0 R 2139 0 R 2140 0 R 2141 0 R 2142 0 R 2143 0 R 2144 0 R 2145 0 R 2146 0 R 2147 0 R ]
+>> endobj
+2102 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 581.994 305.126 595.942]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+2103 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 271.16 305.126 285.108]
+/Subtype /Link
+/A << /S /GoTo /D (page.75) >>
+>> endobj
+2104 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 235.294 290.182 249.242]
+/Subtype /Link
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+2105 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 235.294 305.126 249.242]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2106 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 187.474 290.182 201.421]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+2107 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 187.474 305.126 201.421]
+/Subtype /Link
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+2108 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 139.653 305.126 153.601]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2109 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 701.546 499.397 715.494]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+2110 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 689.591 499.397 703.539]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2111 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 665.681 499.397 679.628]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2112 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 653.725 499.397 667.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+2113 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 641.77 499.397 655.718]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+2114 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 617.86 499.397 631.808]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+2115 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 558.084 499.397 572.032]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+2116 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 522.218 479.472 536.166]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+2117 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [482.461 522.218 489.435 536.166]
+/Subtype /Link
+/A << /S /GoTo /D (page.6) >>
+>> endobj
+2118 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [492.423 522.218 499.397 536.166]
+/Subtype /Link
+/A << /S /GoTo /D (page.9) >>
+>> endobj
+2119 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 510.263 499.397 524.211]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+2120 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 498.308 499.397 512.256]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+2121 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [492.423 462.443 499.397 476.39]
+/Subtype /Link
+/A << /S /GoTo /D (page.6) >>
+>> endobj
+2122 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [450.082 450.487 457.056 464.435]
+/Subtype /Link
+/A << /S /GoTo /D (page.3) >>
+>> endobj
+2123 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [460.045 450.487 467.019 464.435]
+/Subtype /Link
+/A << /S /GoTo /D (page.8) >>
+>> endobj
+2124 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [470.007 450.487 481.963 464.435]
+/Subtype /Link
+/A << /S /GoTo /D (page.16) >>
+>> endobj
+2125 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [484.951 450.487 496.907 464.435]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+2126 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [377.853 440.714 389.808 450.906]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+2127 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [392.797 440.714 404.752 450.906]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2128 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [407.741 440.714 419.696 450.906]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+2129 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [422.685 440.714 434.64 450.906]
+/Subtype /Link
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+2130 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [492.423 426.577 499.397 440.525]
+/Subtype /Link
+/A << /S /GoTo /D (page.6) >>
+>> endobj
+2131 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [433.893 390.712 445.848 404.659]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2132 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [492.423 378.756 499.397 392.704]
+/Subtype /Link
+/A << /S /GoTo /D (page.8) >>
+>> endobj
+2133 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [462.535 366.801 469.509 380.749]
+/Subtype /Link
+/A << /S /GoTo /D (page.8) >>
+>> endobj
+2134 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 366.801 484.453 380.749]
+/Subtype /Link
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+2135 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 366.801 499.397 380.749]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+2136 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [492.423 354.846 499.397 368.794]
+/Subtype /Link
+/A << /S /GoTo /D (page.6) >>
+>> endobj
+2137 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [462.535 309.018 479.472 322.966]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+2138 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [482.461 309.018 499.397 322.966]
+/Subtype /Link
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+2139 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [462.535 285.108 479.472 299.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.100) >>
+>> endobj
+2140 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [482.461 285.108 499.397 299.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.116) >>
+>> endobj
+2141 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [427.666 249.242 439.621 263.19]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2142 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [442.61 249.242 454.565 263.19]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+2143 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [457.554 249.242 469.509 263.19]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+2144 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 249.242 484.453 263.19]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+2145 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 249.242 499.397 263.19]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+2146 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 153.601 499.397 167.549]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+2147 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 141.646 499.397 155.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+2101 0 obj <<
+/D [2099 0 R /XYZ 144.727 740.998 null]
+>> endobj
+2098 0 obj <<
+/Font << /F75 558 0 R /F74 556 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2150 0 obj <<
+/Length 2315
+/Filter /FlateDecode
+>>
+stream
+xÚÝ\KoãF¾ëWè8¬;ý~Üœ
+?lΤ$†›¹‘”8gç‹ÍŒÎ_àÑ3V½"” ÚH#ê§B«]þÎwO³o¾7jîˆÓbþ´*^}Zþþá&ä&È^ŸWÿ|úÞ‘‡w¤#J«êEòæ¥cýrF}àB»Š‰wŒ>T\<0FœRGL/‚u›k¥ˆ’b\®Kv@Ø­È£ì¾é2Dm‘j
+q÷Va÷°w½ì>ÝLíëK¡îØ9ìÂE%ñeç``z°MÝdVÁ6y?_°›D^dü@AÎpmÿ© ³Z—Éb¿ 㬔Ébìv@ɚ˶'ANHby_|ÉkOHœš_6§m÷y †aIŒª£0S¼I²˜¬‡Bª: ÈÊ0PNÒ¢úœ|nS §Ù rÊÍŽ9sH eƒß¥ÆpII°eêá2Úo²ðsvl'QÈÝí~
+w»à%ü. ±TÆ*"E?êÜWÙ:: ‹íb5mk£8zŒ“lÐ9‡ Œ2^ï5¬ùçñ…Þù׋ÞykG¡—T›wKj†¶®Ò[Øüã;ùàtm1ΈfdüãyÅÖ*I²\0Ë4Ù¶y¬]9*0M;ìƉMžÒÈ M ²*uàFWÉ3„‰c‰rAurÐ)¯a^^$Óy†ü}q‘ŒÒs‹ä¦ÞÜõI†NyÙF‹¿.¯—ó^ëEV'Ñâ.À¾wº]±ÖZFòwøøí÷ãeP·¦* üŸR¼'\âvÔ\¥KhGÉ¿¦u×¢Fº©èÆjË»«
+endobj
+2149 0 obj <<
+/Type /Page
+/Contents 2150 0 R
+/Resources 2148 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 2190 0 R
+/Annots [ 2152 0 R 2153 0 R 2154 0 R 2155 0 R 2156 0 R 2157 0 R 2158 0 R 2159 0 R 2160 0 R 2161 0 R 2162 0 R 2163 0 R 2164 0 R 2165 0 R 2166 0 R 2167 0 R 2168 0 R 2169 0 R 2170 0 R 2171 0 R 2172 0 R 2173 0 R 2174 0 R 2175 0 R 2176 0 R 2177 0 R 2178 0 R 2179 0 R 2180 0 R 2181 0 R 2182 0 R 2183 0 R 2184 0 R 2185 0 R 2186 0 R 2187 0 R 2188 0 R 2189 0 R ]
+>> endobj
+2152 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 629.815 305.126 643.763]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+2153 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 486.353 305.126 500.301]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+2154 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 426.577 305.126 440.525]
+/Subtype /Link
+/A << /S /GoTo /D (page.111) >>
+>> endobj
+2155 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 223.339 305.126 237.287]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+2156 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 187.474 305.126 201.421]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+2157 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 163.563 305.126 177.511]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+2158 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 139.653 305.126 153.601]
+/Subtype /Link
+/A << /S /GoTo /D (page.75) >>
+>> endobj
+2159 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 127.698 305.126 141.646]
+/Subtype /Link
+/A << /S /GoTo /D (page.75) >>
+>> endobj
+2160 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 115.743 305.126 129.69]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+2161 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [467.517 689.591 474.491 703.539]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+2162 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [477.479 689.591 484.453 703.539]
+/Subtype /Link
+/A << /S /GoTo /D (page.6) >>
+>> endobj
+2163 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 689.591 499.397 703.539]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+2164 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 677.636 499.397 691.583]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+2165 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 665.681 499.397 679.628]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+2166 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [482.461 607.897 499.397 621.845]
+/Subtype /Link
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+2167 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 560.077 499.397 574.024]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+2168 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [467.517 476.39 479.472 490.338]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+2169 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [482.461 476.39 499.397 490.338]
+/Subtype /Link
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+2170 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [467.517 464.435 479.472 478.383]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+2171 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [482.461 464.435 499.397 478.383]
+/Subtype /Link
+/A << /S /GoTo /D (page.108) >>
+>> endobj
+2172 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 452.48 499.397 466.428]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+2173 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [462.535 392.704 479.472 406.652]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+2174 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [482.461 392.704 499.397 406.652]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+2175 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [465.026 380.749 472 394.697]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+2176 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [474.989 380.749 481.963 394.697]
+/Subtype /Link
+/A << /S /GoTo /D (page.6) >>
+>> endobj
+2177 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [484.951 380.749 496.907 394.697]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+2178 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [377.853 370.976 389.808 381.167]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+2179 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [392.797 370.976 404.752 381.167]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+2180 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [407.741 370.976 424.677 381.167]
+/Subtype /Link
+/A << /S /GoTo /D (page.108) >>
+>> endobj
+2181 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [427.666 370.976 444.603 381.167]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+2182 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [447.592 370.976 464.528 381.167]
+/Subtype /Link
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+2183 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 356.839 499.397 370.786]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+2184 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [433.893 273.152 445.848 287.1]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2185 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 225.332 484.453 239.28]
+/Subtype /Link
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+2186 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 225.332 499.397 239.28]
+/Subtype /Link
+/A << /S /GoTo /D (page.16) >>
+>> endobj
+2187 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 165.556 484.453 179.504]
+/Subtype /Link
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2188 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 165.556 499.397 179.504]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+2189 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 117.735 499.397 131.683]
+/Subtype /Link
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+2151 0 obj <<
+/D [2149 0 R /XYZ 144.727 740.998 null]
+>> endobj
+2148 0 obj <<
+/Font << /F75 558 0 R /F74 556 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2193 0 obj <<
+/Length 2359
+/Filter /FlateDecode
+>>
+stream
+xÚí[K“"¹¾ó+8ÎD ²2õHéÖ¶ÃÞˆ ÇîØÛv÷@C5M,P¸€µ½³^* ]E=á˜ÃdWR*•/S)JþCÐZÒ´Þ»ád9ÿúf
+­†ã
+›“ø¬¥@’ ¤3ôºHØ ¬Ç@)뢲67jT„Õ#ZP2ÁÏ]ý ÿ"ÊÒ@ ó…EÆ@ªÅ Ð5¤¯%¢TÉZNZ)#Þ… 3‡otb1_%›_æë¶^xÊÙ^z‘ût Ð&ªÑâLlæÿM'L×±ÿp½#ÜÞtï/¡×Lמ1]´³¶¡<ö!šš4µÁDLmií¹­YS): ‰46f5üœ «")˜›QØ*jyÆÔ®†Il¬ô&%éj’Ðõ±¼m²Y—‘µ$4œ[îè Õgµ$ê«úäo«ú7“Ëq'è Šª½†=êàŠ´z}ÍŠ/úÊæ^ p-å-¸süŽÝ>ò[§Ãêj¯þûˆ1Ø5æÐãäBJŸ6é"Ù&“t¹Œâu
+
+øSÜSνËá}Á2¡­;LáЭ1¤»ÚÚ†t³¼Û¼DxFè©ÅsÅl• ‡µ·Ç4ÌF-9Â!s—GçHEV ¥toCŽ!|ÊñôµBsK„Ÿ®òúC¼}ÿôÿ:5úß¡lŠºw1]­fjYÓ:Y=”öô°\lã[e;¢µ"áL,†Í«qÎ1ÀÆs´y•{À@tbc¢©ÛÂÔ‚_£O§nŠ„ñþ¾§'…DvÛw”
+ª_ìèæ.µÐÆõö—&†ÉྀŽ:ðp‘ËæÙö·gªï—¶ïá½CøŠä¶Û®wÛiò´›]=A¶WJ= ¿ðØ4ž «k%Èô¢ ò‡8ûîKùS¶ß¹6Êz’C«h€ cåµÑæ×$›Ì³Éõ3ð7Gå{[“3ý»;z Çw‘S…Iàkiè(¥CÏE œ‹‹ÞÑ}ܪ¹Ü­ÚNz0McM$ÿ·—÷—Ó×f/µ$žw‹E¶[Dì†qè5`|QîŒ]”´R=fj³gï±=֜ޞ¼\îÞ|<¦«ã1söxìs,³Á€¡%°õC²Ú-çóû ŒrJ×ûlÎOïÒ¥°…14MB±n”jüýú‚‹óÙj ,Ù\³ñ,¯#5Lbõ4­´–•MCC¼TŽØÖ&™ÔÀ»ÏöQ9+„fÙ4W8Õg·6»§3’8}«Eû0§‡îýJÅœ'×í¼°!Õã9T³DÓ,1Veª~ŸîÌŒeujo»ËþÙtÚä»[÷F8ÜFfæäXKë>'¿ŒgÉ¿ÆÙj¾š}—þm-»Uî±J~LÔÏ7>ôh¹ãI$+¼]·E+¹Nz£Ž=çŸZ¾^‡oIwŠWj˜çM{8Z騻ù0*;Fš¾íô?ÿñÏ?<|á͹È5ÚÐa©äíªËU‚__p’¾–í1¬} vU\ðM3Z´K±£­—³$KžOT6;Æ…BÎ&´F€AÙt…ÛSuKŒ2³Ùþg‘\3l¾ÐP ß÷l‰Þ€êmuY'ÙK2Ÿ½lß%ïìÄÏœ¯•ìœ‹C6ÔZŸ1
+0¿j` R1 *Zö‹§¶h.Ÿzˆ5IY_-
+¤‡ÐÀŒÎ6$E˜)Ü @ßô2Ë0œ‚p«AéøÕÓ\4°á&‚R:á’„Ò'®Øf ëÃ$Ãä&¨b÷(ø9õ°÷l“¬_¿™2º†Âmoƒ2£ ÞÇRµE#/˜Ó£FópƒƒÅÓôœ‡‹!H¡u‰0¾O¡-lCR óÆ›X³:úðI3œ£À’kôÅëK)cô¡ÿ=5=—|®w²×&¼°[¹kܪ³ä87ÏÀØ!(R}/eø«w]phfnëø³øÍ>¨ôVwE8A@ G®µ¹ÐeÃHöy!¼øê^ǾìFàµÀ¼\¦•pÊÄ„È>™óaSJøtSS¤sÂi¡¤?ÜšÿÂîõ†endstream
+endobj
+2192 0 obj <<
+/Type /Page
+/Contents 2193 0 R
+/Resources 2191 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 2190 0 R
+/Annots [ 2195 0 R 2196 0 R 2197 0 R 2198 0 R 2199 0 R 2200 0 R 2201 0 R 2202 0 R 2203 0 R 2204 0 R 2205 0 R 2206 0 R 2207 0 R 2208 0 R 2209 0 R 2210 0 R 2211 0 R 2212 0 R 2213 0 R 2214 0 R 2215 0 R 2216 0 R ]
+>> endobj
+2195 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 701.546 305.126 715.494]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+2196 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 665.681 305.126 679.628]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+2197 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 641.77 305.126 655.718]
+/Subtype /Link
+/A << /S /GoTo /D (page.10) >>
+>> endobj
+2198 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 546.129 305.126 560.077]
+/Subtype /Link
+/A << /S /GoTo /D (page.61) >>
+>> endobj
+2199 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 474.398 305.126 488.346]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+2200 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [239.621 344.884 251.577 358.831]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2201 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [232.149 285.108 244.105 299.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.16) >>
+>> endobj
+2202 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [247.093 285.108 259.049 299.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2203 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 201.421 305.126 215.369]
+/Subtype /Link
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+2204 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 189.466 305.126 203.414]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+2205 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [482.461 701.546 489.435 715.494]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+2206 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [492.423 701.546 499.397 715.494]
+/Subtype /Link
+/A << /S /GoTo /D (page.7) >>
+>> endobj
+2207 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [492.423 689.591 499.397 703.539]
+/Subtype /Link
+/A << /S /GoTo /D (page.7) >>
+>> endobj
+2208 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [433.893 665.681 445.848 679.628]
+/Subtype /Link
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2209 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 641.77 499.397 655.718]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+2210 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [492.423 617.86 499.397 631.808]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+2211 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 605.905 499.397 619.852]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+2212 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 368.794 499.397 382.742]
+/Subtype /Link
+/A << /S /GoTo /D (page.75) >>
+>> endobj
+2213 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 356.839 499.397 370.786]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2214 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 320.973 499.397 334.921]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2215 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 141.646 484.453 155.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+2216 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 141.646 499.397 155.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.75) >>
+>> endobj
+2194 0 obj <<
+/D [2192 0 R /XYZ 144.727 740.998 null]
+>> endobj
+2191 0 obj <<
+/Font << /F75 558 0 R /F74 556 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2219 0 obj <<
+/Length 2434
+/Filter /FlateDecode
+>>
+stream
+xÚí\Koã8¾ûWø˜
+õáþ×ÇŸÍ»
+
+~W ;î Õú€#¨àŒŽ 0z\,›Àí
+BZÙÛMÞV9†pþåC~2_¶9àqFOgAµÑcàÃ%”™;vÝü`.󰯥;2ZÏ¢çÓd$³bú3!¯Ò ”jWYÎì¢d3_¥WÕ’½ÃÃRFmûñéw}ÙbïîpƒÍUÐvH0ÔC?#Ô½*7Jd`\È„±îzà‰䬛ÝÊP÷Üõ^y;¦‘ÖÃ.Ä? ã­kT ¬GÅЮé¨ñHZîi”r* Ðj*\yˆrÆN*^ó¤'ç»8>€óäëiœ­:ò÷höˆ¼†ÙëÚ‰‰FË.”Ÿ{W½JŸÓådQ'
+²a]ˆ¢H¨Þ}ÊpÆQ^Ø8ž°yžXGžòlmy¢G–4í•¥4Ü?Ï_¶óæXgƒãIr d¹…#ùü…/ýÛ¬‘÷°KÅ­‰Vò¦.d¦ÁÓÂÅ`ÿÌOGÌybäk㛽s|‹ëí~ŽrEdúa·…òÅÍVÔ¥oE}ÑQQ§C[ÔÊølµsråDš_íüòd%|ÿ3èa‡Q’ü+ßÄdºÒèwGèfƒû<d¯œo ½\x¶ £©MV9–)@S]ÝT¸ÎðÒn…§H
+uÎx×Gã ^>}úëÃÀ“{p@Á ©ýÛà9»¬¥?(‰@ÒÐ"/§µ%“Ô}³F\Ù…ï¾Y#¨ì“ˆ0ÁL˜F³iälAðJD¸Bý^7-_7ó“³N£²j2¨Ö&Ée]ìJ¿؉,¢Û D²JUq‰8åTÁööç>uƒåË|…ñr¬f}I4˜àwŠV™E‰‹D{ÑOeªG˜óvm}}Éǹ«Ñ뼶®Ãäqs¢dՀ݄¸¿ëшwÊñ™ ç!ÿ¼œUÉËÿ)¤õW‰
+»¢Ê.J:«)öÓ‡{kw{0Úøòº™Üe…g¢5¢²™-•ž*²Þ$&Äqøÿ
+Q.:Ï'Ý™>çéí¹­ëdlÒyè2I’šãhÐÝ» Žõ%fBÀU|(§o™qKÑôy¾
+\·Š±Aÿ—câT„bšÄ«(1:á*Á
+endobj
+2218 0 obj <<
+/Type /Page
+/Contents 2219 0 R
+/Resources 2217 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 2190 0 R
+/Annots [ 2221 0 R 2222 0 R 2223 0 R 2224 0 R 2225 0 R 2226 0 R 2227 0 R 2228 0 R 2229 0 R 2230 0 R 2231 0 R 2232 0 R 2233 0 R 2234 0 R 2235 0 R 2236 0 R 2237 0 R 2238 0 R 2239 0 R 2240 0 R 2241 0 R 2242 0 R 2243 0 R 2244 0 R 2245 0 R 2246 0 R 2247 0 R 2248 0 R 2249 0 R 2250 0 R 2251 0 R 2252 0 R 2253 0 R 2254 0 R 2255 0 R 2256 0 R 2257 0 R 2258 0 R 2259 0 R 2260 0 R 2261 0 R 2262 0 R 2263 0 R 2264 0 R 2265 0 R 2266 0 R 2267 0 R 2268 0 R ]
+>> endobj
+2221 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 665.681 305.126 679.628]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+2222 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 605.905 290.182 619.852]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2223 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 605.905 305.126 619.852]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+2224 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [298.152 498.308 305.126 512.256]
+/Subtype /Link
+/A << /S /GoTo /D (page.7) >>
+>> endobj
+2225 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 486.353 305.126 500.301]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+2226 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 450.487 285.2 464.435]
+/Subtype /Link
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+2227 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 450.487 305.126 464.435]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+2228 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [263.283 426.577 270.257 440.525]
+/Subtype /Link
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+2229 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [273.245 426.577 285.2 440.525]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+2230 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 426.577 305.126 440.525]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+2231 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 402.667 285.2 416.615]
+/Subtype /Link
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+2232 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 402.667 305.126 416.615]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+2233 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 378.756 285.2 392.704]
+/Subtype /Link
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+2234 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 378.756 305.126 392.704]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+2235 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 354.846 285.2 368.794]
+/Subtype /Link
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+2236 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 354.846 305.126 368.794]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+2237 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 295.07 290.182 309.018]
+/Subtype /Link
+/A << /S /GoTo /D (page.10) >>
+>> endobj
+2238 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 295.07 305.126 309.018]
+/Subtype /Link
+/A << /S /GoTo /D (page.99) >>
+>> endobj
+2239 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [290.68 271.16 302.635 285.108]
+/Subtype /Link
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+2240 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [183.582 262.572 195.537 271.578]
+/Subtype /Link
+/A << /S /GoTo /D (page.96) >>
+>> endobj
+2241 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 211.384 290.182 225.332]
+/Subtype /Link
+/A << /S /GoTo /D (page.10) >>
+>> endobj
+2242 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 211.384 305.126 225.332]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2243 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [245.848 187.474 257.803 201.421]
+/Subtype /Link
+/A << /S /GoTo /D (page.10) >>
+>> endobj
+2244 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [260.792 187.474 272.747 201.421]
+/Subtype /Link
+/A << /S /GoTo /D (page.16) >>
+>> endobj
+2245 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [275.736 187.474 287.691 201.421]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2246 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [290.68 187.474 302.635 201.421]
+/Subtype /Link
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+2247 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [183.582 178.886 195.537 187.892]
+/Subtype /Link
+/A << /S /GoTo /D (page.97) >>
+>> endobj
+2248 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 701.546 484.453 715.494]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+2249 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 701.546 499.397 715.494]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+2250 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 593.95 484.453 607.897]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+2251 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 593.95 499.397 607.897]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+2252 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [457.554 570.039 469.509 583.987]
+/Subtype /Link
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+2253 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 570.039 484.453 583.987]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+2254 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 570.039 499.397 583.987]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+2255 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [457.554 546.129 469.509 560.077]
+/Subtype /Link
+/A << /S /GoTo /D (page.16) >>
+>> endobj
+2256 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 546.129 484.453 560.077]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+2257 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 546.129 499.397 560.077]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+2258 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [452.573 510.263 459.547 524.211]
+/Subtype /Link
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+2259 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [462.535 510.263 479.472 524.211]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+2260 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [482.461 510.263 499.397 524.211]
+/Subtype /Link
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+2261 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 474.398 499.397 488.346]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+2262 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 426.577 499.397 440.525]
+/Subtype /Link
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+2263 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [492.423 366.801 499.397 380.749]
+/Subtype /Link
+/A << /S /GoTo /D (page.8) >>
+>> endobj
+2264 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [492.423 354.846 499.397 368.794]
+/Subtype /Link
+/A << /S /GoTo /D (page.8) >>
+>> endobj
+2265 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 307.025 479.472 320.973]
+/Subtype /Link
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+2266 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [482.461 307.025 499.397 320.973]
+/Subtype /Link
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+2267 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 175.519 499.397 189.466]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+2268 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 139.653 499.397 153.601]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+2220 0 obj <<
+/D [2218 0 R /XYZ 144.727 740.998 null]
+>> endobj
+2217 0 obj <<
+/Font << /F74 556 0 R /F75 558 0 R /F102 750 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2271 0 obj <<
+/Length 2479
+/Filter /FlateDecode
+>>
+stream
+xÚí\[oã6~ϯðcÔ,ï—7o±ÓÅØf‚Å.Ú>ȶ’Æ–<’œÌô×ï‘D]lQ±äÈŽ
+Œ™H&¿s? ™aøGf„s¤¨š)Ž‘1z¶ÚÞàÙ<úé†ØW˜`H*cÇÃ9à Ê`À‘–&{燇›ïÔlf‘löð˜¿ú°þíö×»?~þþG%êGs‘0!È‘¿ö;aüËÞ[Û·yý6§ˆqbgãJ~w7§ßrMË‘áÕHØ‘À¬ÁS˜t6§ˆ›ƒ5ÃåKŒØ#Z•CJÊŘ丠¬¹E‚‘Ö&†)‰Î§¼wïV1u°rì==ùëe”¦Ñ¶½c%‘Š¯£Õ~ë‡éÝ\Py»ÚxIR £Ý¼ØSpÜÎ/ó/¥AÞÍ &æÝÍì`äXøæÃC…£À\i`«¦ÀLöûøɾpÿSæ6K„Õš.Å=" â˜Uì,±×dy9sª‚Õ«h³ß†‹ä¥Ím`†óµ_9g÷™<qaJ‚ûoóöTÈpþÞ['˜Š[ªŒE?ÕØŠdHv
+X Ä] u
+p|ü÷u>Çs³H‰œ‡"A'`B ßór&t=ÃÁ%iò9Ø9l†BLSO™
+"\qrìlmä„þ‹>qæáaÛ¹3)©$ËT!.æƱPù~3Ž,VÚm¼•¿XEÛ­®{D2‹8VµAÔ¯Ä N¿S*á³öß9É%
+_¡¯,t¾ÎªU ZsÎKêZ§|÷x¡{ÿË>ˆý{«ÏÞ“?Êù7,¦”ÙÖ v …È,²á8ÓÔŽ«F¹öÌGÛ‘6ÿæ!ºÊ¤ÀL¤:ª*ƒÂÅõðd0×ÄKâÇ™GåuXn1šbƒ¹nEÃé2à•ÄO‘ "4fNÄŬb©c]-F±¿ø—÷àÿ÷L‡³3YFén*ì|- øÏÂá*$ÉÔB]ëÒpVCš‹Z‚Œ‹ËeôõºÁTá¯
+×i˺{éÈ3g…OuN—d•.QÎÔK±è±ÖÈiŒ6ëÕ&r¥‚´A²21`Tnd•À¥’»T”ýš“!°X´óÃÓk±b-*ëµð°µÖëuäÐ4RŸ¥Ï5`UM‘KùÙù]=¥qlGQÐ-BÔ´èþÚ0£eã'‰›FÑ3š²Tðš
+øìŒ.*¶^úi¹¼¸ÉÊ…WŠ“C¶ˆ{Œ½Ï§À*L•³•¤q"f^wÛåÛb[•ï²*ªdóº ÚÉÄÄþêÍð8y$Âí>tã%Ù¯®BFVêMÇ7G…jg²VírõIãÀ Ÿ6þ—¡Ut ±æ§œœBrbÿùi¬} ¹Øufù@ó2Å.–¿täLÌe#çç qåž'’7»H½à/Í­ËgìQÙ…gÊ4ùvÌ?Þ ÃB ¤1ë‘ØϹבׇI†Ø2ÃÕd³ûÏÉ·ír„Aú)Š>wåJ›†K;Ó@./äãÿ~ùañâÅ.—YÁé±Ê !•"L•þ—¸L›rÐŽô( $q]²u× ²lÃa…ÿ Ê-“.×Z]§Ø˜Ë‚¶µX9¸@œÑ@{)‘‚A´#ðã×ô]Z— ï›l¸ÚÂ1îàGŒñVKN†×¢%Ç]žl~_µâ×qôÜ­&PE0΂ØÙœ
+,á ‚6HejŽ¤¦½*•VþÑj“\<0 Íg°‚ì¡FÞ¢Ñ:ýú7^áOþŸN5xú”zq½\'Ù&ä€|dNœ»¬{~¶öÍ¥sì…=¬×ù‡èH|Q¤àï]>*IW a)lU,·»÷é:µ †©î×2åÜÅ ýì§5F»¼[¼åÀa`ÞBþŠ™,Bûx SsVY›íÅ.K<raïìxJÌÊ=ê°;yFíÂÂn‘˜Röè>Úzá9÷¤®4‘<±c¯ÉhRi¿Æûâ`R/õÝ•ô‹˜Ý¼íG+zªjÚ0ûïî˜Àæ¬D¾Ì\°4˜ ~zËýÆ‹^ÏÁbaöÃ;Žo«6*ø¹›ki2–uãÖT\Àñ> Bo½Žý$÷•ýU‹ga,Îtí(ž@NÇÍG¼1;"ðoì£&
+1  Ù{T‡‰9Ü9ÖnÔüÒõF,]›ˆIpB0És0tÜEKÈ@U0m˜/ä57ú¦š›}TMt²åݔř¼«7W˜J!zØ„ËIÙúÅ«aÒuq– žÝˆm\œýèj
+!ˆêvÿRâmý³ó¶O›CÞÇ©D}ß·n $…qëÕÕxaú‹}¼é(/vvRfm«ºjÏÑUŸ­¦®õí\mžýE¥þ5]&ŠÛ­õ”"N$
+äUM\Èf²¤Ù€j!€-®Ü8/!uÂ.ùäíüw̧¸Û.ß$7ñWá~ëÅÞ2XM=X"j*Ë‘QþâÆh¢Ö`µ3\2Hèá]bôÞˆá1B/ÆM"P¹4š]2Zr@¨ß_.ÉÏMmD1žRº¶UÖZÆÕ—c‰˜œB{‡ãÌÞ¥p#Õ"Š¿˜Åò·fÂõ„š´¯ÅÜ„· Wš#†ÍáÊÿ!²Cendstream
+endobj
+2270 0 obj <<
+/Type /Page
+/Contents 2271 0 R
+/Resources 2269 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 2190 0 R
+/Annots [ 2273 0 R 2274 0 R 2275 0 R 2276 0 R 2277 0 R 2278 0 R 2279 0 R 2280 0 R 2281 0 R 2282 0 R 2283 0 R 2284 0 R 2285 0 R 2286 0 R 2287 0 R 2288 0 R 2289 0 R 2290 0 R 2291 0 R 2292 0 R 2293 0 R 2294 0 R 2295 0 R 2296 0 R 2297 0 R 2298 0 R 2299 0 R 2300 0 R 2301 0 R 2302 0 R 2303 0 R 2304 0 R 2305 0 R 2306 0 R 2307 0 R 2308 0 R 2309 0 R 2310 0 R 2311 0 R 2312 0 R 2313 0 R 2314 0 R 2315 0 R 2316 0 R 2317 0 R ]
+>> endobj
+2273 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 631.808 305.126 645.755]
+/Subtype /Link
+/A << /S /GoTo /D (page.17) >>
+>> endobj
+2274 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 619.852 305.126 633.8]
+/Subtype /Link
+/A << /S /GoTo /D (page.104) >>
+>> endobj
+2275 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [298.152 572.032 305.126 585.979]
+/Subtype /Link
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+2276 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 560.077 290.182 574.024]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+2277 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 560.077 305.126 574.024]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+2278 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 500.301 305.126 514.248]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+2279 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 464.435 290.182 478.383]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+2280 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 464.435 305.126 478.383]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+2281 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 320.973 305.126 334.921]
+/Subtype /Link
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+2282 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [283.208 141.646 290.182 155.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+2283 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 141.646 305.126 155.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+2284 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 129.69 305.126 143.638]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+2285 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [482.461 653.725 499.397 667.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+2286 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 641.77 499.397 655.718]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+2287 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [450.082 629.815 457.056 643.763]
+/Subtype /Link
+/A << /S /GoTo /D (page.1) >>
+>> endobj
+2288 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [460.045 629.815 467.019 643.763]
+/Subtype /Link
+/A << /S /GoTo /D (page.8) >>
+>> endobj
+2289 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [470.007 629.815 481.963 643.763]
+/Subtype /Link
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+2290 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [484.951 629.815 496.907 643.763]
+/Subtype /Link
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+2291 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [377.853 620.042 389.808 630.233]
+/Subtype /Link
+/A << /S /GoTo /D (page.91) >>
+>> endobj
+2292 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [392.797 620.042 404.752 630.233]
+/Subtype /Link
+/A << /S /GoTo /D (page.94) >>
+>> endobj
+2293 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [407.741 620.042 424.677 630.233]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+2294 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [492.423 605.905 499.397 619.852]
+/Subtype /Link
+/A << /S /GoTo /D (page.6) >>
+>> endobj
+2295 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [492.423 593.95 499.397 607.897]
+/Subtype /Link
+/A << /S /GoTo /D (page.6) >>
+>> endobj
+2296 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [492.423 581.994 499.397 595.942]
+/Subtype /Link
+/A << /S /GoTo /D (page.6) >>
+>> endobj
+2297 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 558.084 499.397 572.032]
+/Subtype /Link
+/A << /S /GoTo /D (page.75) >>
+>> endobj
+2298 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [452.573 522.218 459.547 536.166]
+/Subtype /Link
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+2299 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [462.535 522.218 479.472 536.166]
+/Subtype /Link
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+2300 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [482.461 522.218 499.397 536.166]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+2301 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [482.461 510.263 499.397 524.211]
+/Subtype /Link
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+2302 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [470.007 426.577 481.963 440.525]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+2303 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [484.951 426.577 496.907 440.525]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+2304 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [377.853 418.069 389.808 426.996]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+2305 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [442.61 402.667 454.565 416.615]
+/Subtype /Link
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+2306 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [457.554 402.667 469.509 416.615]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+2307 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 402.667 484.453 416.615]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+2308 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 402.667 499.397 416.615]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2309 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 249.242 499.397 263.19]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+2310 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 165.556 499.397 179.504]
+/Subtype /Link
+/A << /S /GoTo /D (page.17) >>
+>> endobj
+2311 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [447.592 153.601 454.565 167.549]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+2312 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [457.554 153.601 469.509 167.549]
+/Subtype /Link
+/A << /S /GoTo /D (page.17) >>
+>> endobj
+2313 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 153.601 484.453 167.549]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2314 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 153.601 499.397 167.549]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+2315 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [447.592 129.69 459.547 143.638]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+2316 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [462.535 129.69 479.472 143.638]
+/Subtype /Link
+/A << /S /GoTo /D (page.100) >>
+>> endobj
+2317 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [482.461 129.69 499.397 143.638]
+/Subtype /Link
+/A << /S /GoTo /D (page.116) >>
+>> endobj
+2272 0 obj <<
+/D [2270 0 R /XYZ 144.727 740.998 null]
+>> endobj
+2269 0 obj <<
+/Font << /F83 563 0 R /F75 558 0 R /F74 556 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2320 0 obj <<
+/Length 2319
+/Filter /FlateDecode
+>>
+stream
+xÚíMsã¶õî_¡SÇ;!xïá󦶓f&½´/™$­LÛl$S+ÑãÝüú‚$
+À¬”õÏÑ‘UäxMÜR
+•ÀÈߟÆè鱜õQÒÄ„»c J.€*pФ¸ã/î«e9»Ë7Ûò±(³>:˜àgq¨ógO?Á)¦pAhf¯Q}¾¹÷þó£×2Ñײ¾º7GÒÞ¤{Š·&sZòÃX¦T°Ot—ïãâL Yžÿ*^t!A!”SêÜùc“úxW5ÉÏùmùpL =¤•›ŽÚ›¬–L¨®Þ#ñऑÆ™o¹Yž'ð#Ŭ Á¡y¬FÅjæ¾ë¨ýø÷—ù¶\«Õ¼1Û~û˜ö‡‡œfj­Fj?©KkÿÙÄ*§Fð¾±»·km`š†˜„`Ö9‡¤I4_Å‹Ž˜D-|
+ܨÀb=õÃv`Ð ¬ ›€ƒ}ïÙÜ’þ!Ø\Ûƒ+-³»ù¢,6¯Yl)§õƒû´Éå{ÏB×Ù"Ÿ/ôÙðM‚p5Ø°FjX&Ríõ2/Wó¯·Ù:5k>ç é`jöí/í¥0*e±N;9._Ô«ôø¤äÙ\ÝãÌ—§,û3+矗Ùë£3ÈìÎÚÉPtQ³»(Wj!™~—\LZWY¢jï¸Eup¡€ÉK™µ=¤Úüͳ=u-盲šd½i~ AŸÊvQÌÖõC6Üe;1^ë8 ³<Ž¹‹xNž*ö…|þÉ-ϬÊMþxŸH±-“J¾C¹*Í!ŸZ¦¡‹s±ŠjúÊÁCRŠ
+ä-(#ØfÿÂP²V¶­7âú§ã‡Lã¡ 6Äæ‰ ¶S6>J7žÊÏÅ××7~ããc(Éx²óÀÖŸ>çe¶zŸL£n‡ M#rŒ§Ïëùf~¿™¯N¬ñÁΕhk¦T÷ûzÏÜ[>°Ò)›ª9¶º¸½0¤`‰DLáÞÊæcæ5±›ÇB2çßö±ôÛ  3¶7Ä>aýåÍfᤠ%ÆA½0ÐÆÛÚÈžôƲ³W鸲lã¢2ÄEå0[óÓöŽÛ„ Y’Ôpà*¿-³Yöµšï§M¾¯P¡'ƒ±ï,» 0èÖƒY_Æ=R’±}CÒêQrg,8ð '7ž÷‘;h­Ç«U­6­Ñª0%q^Sš½Nh;0ÀG²¯o¶Ÿà:a¹‰Å§QÆ©†gµ–¦Å[Ûæb‘žÈpûN#™jÐt`$Ãm¿¸t$g_¯2ÍJ±Õ[ZUÙÁ”±/ßBWƒ6-}*$R¶fÆ}U_g›Ù"OíÚ¿²§8^ý2+èÌž“æ-~ߎCµ†û¡ã‡©„#ù³‹í7|tÂgïÐ
+£‡Vi3ÀW7ƒsÙa!·Å¼èí£¸T0¬÷ò]`6ÉÿÙÑU .ŠÉ†¬Ã».¢K`TG®[ÿ©¾Xuendstream
+endobj
+2319 0 obj <<
+/Type /Page
+/Contents 2320 0 R
+/Resources 2318 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 2190 0 R
+/Annots [ 2322 0 R 2323 0 R 2324 0 R 2325 0 R 2326 0 R 2327 0 R 2328 0 R 2329 0 R 2330 0 R 2331 0 R 2332 0 R 2333 0 R 2334 0 R 2335 0 R 2336 0 R 2337 0 R ]
+>> endobj
+2322 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 593.95 305.126 607.897]
+/Subtype /Link
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2323 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 522.218 305.126 536.166]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+2324 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 486.353 305.126 500.301]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+2325 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 307.025 305.126 320.973]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+2326 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 295.07 290.182 309.018]
+/Subtype /Link
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+2327 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 295.07 305.126 309.018]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2328 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 247.25 305.126 261.197]
+/Subtype /Link
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+2329 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 235.294 290.182 249.242]
+/Subtype /Link
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+2330 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 235.294 305.126 249.242]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2331 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 115.743 290.182 129.69]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+2332 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 115.743 305.126 129.69]
+/Subtype /Link
+/A << /S /GoTo /D (page.92) >>
+>> endobj
+2333 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 605.905 499.397 619.852]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+2334 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 581.994 499.397 595.942]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+2335 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 522.218 499.397 536.166]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+2336 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 163.563 499.397 177.511]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+2337 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 127.698 499.397 141.646]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+2321 0 obj <<
+/D [2319 0 R /XYZ 144.727 740.998 null]
+>> endobj
+2318 0 obj <<
+/Font << /F75 558 0 R /F74 556 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2340 0 obj <<
+/Length 2422
+/Filter /FlateDecode
+>>
+stream
+xÚÕ[I㶾ûWøؤ‹ë­ [ÞëC€Lj[¶…ñ[==ù÷)m”mQ¶ämÌ¡9–DV±ŠU_-„!§0)™fh$gÎÙáh1àÃ)=úu
+Õ¢äÕd¹’ãQ%ïÂ÷ÏÄìðtÈ eûD kq_Kß4>ßÁÝhù
+۰͸?»¿QÕÝDtŸÊZ×+&ŸÇ›$½q…­—܃2)zѲHÆ-¸ÏЦ«,”ÉWrõJjø\´˜àÈ¢GП0L˜CT
+83à‘Òø¨År»
+¹!r‡ZÝÅåv‡{(oÓ—h±]Déìåk¼é^¤ÔYȧª,*šfnÆhf1gË9±+ÄCa!TCE.ÐòÓ0ñ5þã^NE“ÎV¹C»ÐÏ}„Rh˜æî;¸ÁÂÿ
+]«å×Äþ´GÑ67Éöˈ `¼‰Ç!(^ÌZÂ5%ƒ¿tS „ÀæqÚ²ªë–GTÑŠaÕ~™EÛ¸¥ÝŽµÛ‘NžÃYã‚%†ÌAßÇQŸ`½ƒë@Ãc=m~0‘…Àw©¡àû—ÁÍÙ¨Gߧü 9{ÌgZ¸¢Ï):íD¼GÛÙ½ìˆ>eGôqE;X¨]&2OP—¥â„Á
+†
+4cÅL!;ÙD£ªïµÿê§wCõ#gg–Î’RyrEW¸†6‚û@(c$)öm8°ËZ)é¯iCíGè F,}Š"“²JíÉ`ú´­BT¬Éñ®ÆGo^HnætK •T«OBºMÿ™·•r/åzv„ô™PX ¶•rÃÞ§Û»­àqy Ttƒ–×ûmvM‘eª&<“ ”¬‡u@¨U©u4¥ÜOb‚0ù'\<rS %ø_]¡¾4œ«Pì)8Tk¡t¼—î¦iK@%ï k3ƒe1Ô9QÒÒÀdœÎZ*·æFÔg¦§ ü/÷õTdÙŠ"HpœC>DJUýjµ)%Ã$‚âtèc2n¤ÖY ¶»gÑòËöB>ðß>#O6IX웧 fÄ}Q©0@ªKˆhëý?ƒŽëoÆäMð±³p äË’ u›‹m¦G²šèž jïb/ù‰Žˆ¤p?¬Ff¡ë=Š£É$™?R0•3|æm+ÛA«[ªC=è{nVæ4AÕbñ€dß’·y²šn¢õìŸð)/é;!<†hmÙ‡î'×r‚è<ÑZŸ;YÅép‡a]N(ÏJË®yãŒ3Ç åe©<sa¬š«CÚi¸j©­6ˆ¦Ò?Û õ-o{õ=©úüùÏ´ßßüÞW]î½Ý˜~7‡½£ílÁ«ƒ>‡ýïßÝâÒ;ß‹uEq¼|_$'¢yPè£Û:„§¡ïÃWzDóåªIßæÛ¼ýK¡® 0'h^øÚ# éœZ*—võz¼Ên¥‚Ý¥¿^½ÙZIQS„ý6ãï÷(œõ»Vý¹¸”ÇÛSÁ×èlê]¶ª9YoâIò­{îl7 äS‹ùUŒ}™Ó^] ÷™I¡e=´=šÎfDæô}ß÷6å‘z£PLË{¾iV«4Ü¿¨²yRÀß,á¾áP@ÕÑ‘m·æûÀY€ðit@ÝMFYFx9Ž¿¨žß2×Ò}Vuß8@Z¬'Ë–¶«~R–ÏøÅ9âÜ{#©Bf¿\"pxˆ¤VŹìCFU´ý,^GÓøD£“4•“‘ÆW|ƒô×ओíNÒ©²Iqô#YûT#%CÙI«›ÈßI& ”mºRЮ¼Œp,gÍXÉ»}…ünÅXendstream
+endobj
+2339 0 obj <<
+/Type /Page
+/Contents 2340 0 R
+/Resources 2338 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 2190 0 R
+/Annots [ 2342 0 R 2343 0 R 2344 0 R 2345 0 R 2346 0 R 2347 0 R 2348 0 R 2349 0 R 2350 0 R 2351 0 R 2352 0 R 2353 0 R 2354 0 R 2355 0 R 2356 0 R 2357 0 R 2358 0 R 2359 0 R 2360 0 R 2361 0 R 2362 0 R 2363 0 R 2364 0 R 2365 0 R 2366 0 R 2367 0 R 2368 0 R 2369 0 R 2370 0 R 2371 0 R 2372 0 R 2373 0 R 2374 0 R 2375 0 R 2376 0 R 2377 0 R 2378 0 R 2379 0 R ]
+>> endobj
+2342 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 701.546 305.126 715.494]
+/Subtype /Link
+/A << /S /GoTo /D (page.110) >>
+>> endobj
+2343 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [215.96 677.636 227.915 691.583]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+2344 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [230.904 677.636 242.859 691.583]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+2345 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [245.848 677.636 257.803 691.583]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+2346 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [260.792 677.636 272.747 691.583]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2347 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [275.736 677.636 287.691 691.583]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+2348 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [290.68 677.636 302.635 691.583]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+2349 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [183.582 667.862 195.537 678.054]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+2350 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [198.526 667.862 215.462 678.054]
+/Subtype /Link
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+2351 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [253.32 560.077 260.294 574.024]
+/Subtype /Link
+/A << /S /GoTo /D (page.3) >>
+>> endobj
+2352 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [263.283 560.077 275.238 574.024]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+2353 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 560.077 290.182 574.024]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+2354 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 560.077 305.126 574.024]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+2355 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 548.121 305.126 562.069]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+2356 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 452.48 305.126 466.428]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+2357 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 392.704 305.126 406.652]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+2358 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 368.794 305.126 382.742]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+2359 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 225.332 305.126 239.28]
+/Subtype /Link
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+2360 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 189.466 290.182 203.414]
+/Subtype /Link
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+2361 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 189.466 305.126 203.414]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+2362 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [298.152 141.646 305.126 155.593]
+/Subtype /Link
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+2363 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [482.461 653.725 489.435 667.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.8) >>
+>> endobj
+2364 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [492.423 653.725 499.397 667.673]
+/Subtype /Link
+/A << /S /GoTo /D (page.9) >>
+>> endobj
+2365 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 641.77 499.397 655.718]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+2366 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [427.666 426.577 439.621 440.525]
+/Subtype /Link
+/A << /S /GoTo /D (page.14) >>
+>> endobj
+2367 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [442.61 426.577 454.565 440.525]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2368 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [457.554 426.577 469.509 440.525]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+2369 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 426.577 484.453 440.525]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2370 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 426.577 499.397 440.525]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+2371 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 402.667 499.397 416.615]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+2372 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [484.951 342.891 496.907 356.839]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+2373 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [377.853 333.118 389.808 343.309]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+2374 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [392.797 333.118 404.752 343.309]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+2375 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [407.741 333.118 419.696 343.309]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+2376 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [422.685 333.118 439.621 343.309]
+/Subtype /Link
+/A << /S /GoTo /D (page.105) >>
+>> endobj
+2377 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [442.61 333.118 459.547 343.309]
+/Subtype /Link
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+2378 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 318.981 499.397 332.928]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+2379 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 187.474 499.397 201.421]
+/Subtype /Link
+/A << /S /GoTo /D (page.80) >>
+>> endobj
+2341 0 obj <<
+/D [2339 0 R /XYZ 144.727 740.998 null]
+>> endobj
+2338 0 obj <<
+/Font << /F75 558 0 R /F74 556 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2382 0 obj <<
+/Length 2377
+/Filter /FlateDecode
+>>
+stream
+xÚÕ\Io#7¾ëWèèZ ß{\oB€L€ÜfÆsJrP[²,D[´Lÿýµ’Š%Uioø`º’õ½}¡¡ËÝtA¦QwµàÌZÓ}›uxwìnýÚâ’Ä”nœ¸Ù+ïöH0£¬æç×ÎOÿвk™UÔ}}Ï}þþòØ|Œ–ƒÕ`¼,?¾üùú›{RÄ'f ©xW_¿ôPr?´Å”1_ý›ÝžÐŒ»=
+v»Úc(ùËôâßßÿäÝ¡Ó¡¿u8#g˜¿{½ÌÀÚî¬n»(‹?§wþ¹£dÃdœ¡3Ž§•ìd½ŒGëÍg
+ã‚––ë@M
+…pPˆÒ €(5:s‡2†Tö¼‡N„÷í3Ká9+ÚhÂMJI bÒèY­³#ŠŒÈðdêâ¹ðó†G*[EЩ}i½2p™êŹÜmÍ ê¿-¦ÛYÂâÉÁµJ3N[ £íÍY¦ËT°.ÀMÐ$L*¨÷ø˜&º³Ã·óAýáè}°& ÎÞ8s_Ê„ I©ú ùWø†âV˜è¸OâI§W:•µT¤%ãÕd˜@ÀI•Ô°ÍÔËŒƒû’i¼°‘³à,N—cê{¿Moõ—«Åpû–ЂÎbî++­3'¿ O{ÆEâÀ9q·+àXÁ”8J\ÈãŠ-XÜ5‰øÎy Ö\[ÕûÈŽ¸°Gä¼™"o(ç§ù
+ð'ä“Û@äã+"U&žÉpð|•J^¯ØU°Ý,Ú&F›-\Ì‘Ò,ËÕèvùγ9缘þ.üsK¼
+jR¤¦:•®P³†9*ÍÖ/¦J¬?-7ýÙvžr­fdTeùšª.„˜âàüåÚ5W£õf‘"Í~tåfçq¡ªþÖŠÒE\î2Í!ó¸ÈPìJ†áÔ„u†“Y6¹N‰9M„ú”¶©˜´˜8Útô¾éßJ
+·…'Ô`uWÞÅ›oguö†R–Yh"Y[ ¦”žfuÒwÌÚ¥ÒUdÏ,Îœ“µÂ6*ñq y"#™çÊz-†ƒÏ"sNö.Ð6¼tè´Ï8Äj =Yîa±|_ ê:“Ü\ò
+NG–t‘2U'/–¨ªêål°§lYoE¬¬6®Q„2#¦êUÅüUݽ\m§TC` Ö¹j)[·\– V·LîÖóⱕe ¬
+eX42}W^Ðeö{œP*‚´ŠC qÚÄtÙ¨tÐ_d ì÷Bƒ¡}Ìh ÃІV%û‹ÐêPŠ´:t@XSÛŸ‘"òú¯Éò‰ ´!¦LëÞÆ ”ªj¢B.M粩£l–C’J·à{§Ì&óñ`:½y£ežJNÖ.êÜâ|sËé`RW¼`wEjêâ©Äv&ƒùø­c(…lî¶Ûüûš¶àbAšl+‡ò¦rx œLN­Ø!"NÚÌ=ÊÇ£Uÿ}ºø°kU<‡ƒméF&{lóÇ« mÓIû6*(3…Z„ÖNmLÜLY2É”ÝçQäBþá[>y,”#‡8'ìÏÎw$‡¾è(ÅÃüúýHH¥´]±ÃêǼf“éçÔKzŸ5ÉÑï‰4S„ý¸
+Ò>^h›Á$}Ó
+endobj
+2381 0 obj <<
+/Type /Page
+/Contents 2382 0 R
+/Resources 2380 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 2416 0 R
+/Annots [ 2384 0 R 2385 0 R 2386 0 R 2387 0 R 2388 0 R 2389 0 R 2390 0 R 2391 0 R 2392 0 R 2393 0 R 2394 0 R 2395 0 R 2396 0 R 2397 0 R 2398 0 R 2399 0 R 2400 0 R 2401 0 R 2402 0 R 2403 0 R 2404 0 R 2405 0 R 2406 0 R 2407 0 R 2408 0 R 2409 0 R 2410 0 R 2411 0 R 2412 0 R 2413 0 R 2414 0 R 2415 0 R ]
+>> endobj
+2384 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 665.681 305.126 679.628]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+2385 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 450.487 290.182 464.435]
+/Subtype /Link
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+2386 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 450.487 305.126 464.435]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2387 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 414.622 305.126 428.57]
+/Subtype /Link
+/A << /S /GoTo /D (page.111) >>
+>> endobj
+2388 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 378.756 305.126 392.704]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2389 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 354.846 305.126 368.794]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+2390 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 247.25 290.182 261.197]
+/Subtype /Link
+/A << /S /GoTo /D (page.18) >>
+>> endobj
+2391 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 247.25 305.126 261.197]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2392 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 223.339 305.126 237.287]
+/Subtype /Link
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+2393 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 199.429 305.126 213.377]
+/Subtype /Link
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+2394 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [288.189 163.563 305.126 177.511]
+/Subtype /Link
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+2395 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 665.681 499.397 679.628]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+2396 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 641.77 499.397 655.718]
+/Subtype /Link
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+2397 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 534.174 499.397 548.121]
+/Subtype /Link
+/A << /S /GoTo /D (page.89) >>
+>> endobj
+2398 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 474.398 499.397 488.346]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+2399 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 390.712 499.397 404.659]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2400 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [482.461 378.756 499.397 392.704]
+/Subtype /Link
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+2401 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [426.421 354.846 438.376 368.794]
+/Subtype /Link
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+2402 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [441.365 354.846 453.32 368.794]
+/Subtype /Link
+/A << /S /GoTo /D (page.16) >>
+>> endobj
+2403 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [442.61 342.891 454.565 356.839]
+/Subtype /Link
+/A << /S /GoTo /D (page.10) >>
+>> endobj
+2404 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [457.554 342.891 469.509 356.839]
+/Subtype /Link
+/A << /S /GoTo /D (page.16) >>
+>> endobj
+2405 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 342.891 484.453 356.839]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2406 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 342.891 499.397 356.839]
+/Subtype /Link
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+2407 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 295.07 499.397 309.018]
+/Subtype /Link
+/A << /S /GoTo /D (page.75) >>
+>> endobj
+2408 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 247.25 499.397 261.197]
+/Subtype /Link
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+2409 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 235.294 499.397 249.242]
+/Subtype /Link
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+2410 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 223.339 484.453 237.287]
+/Subtype /Link
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+2411 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 223.339 499.397 237.287]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2412 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [442.61 153.601 454.565 167.549]
+/Subtype /Link
+/A << /S /GoTo /D (page.16) >>
+>> endobj
+2413 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [457.554 153.601 469.509 167.549]
+/Subtype /Link
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+2414 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [472.498 153.601 484.453 167.549]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2415 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 153.601 499.397 167.549]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+2383 0 obj <<
+/D [2381 0 R /XYZ 144.727 740.998 null]
+>> endobj
+2380 0 obj <<
+/Font << /F75 558 0 R /F74 556 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2419 0 obj <<
+/Length 1581
+/Filter /FlateDecode
+>>
+stream
+xÚÍZKsÛ6¾ëWðhÏD(‹çMÓ™63¹µõô•ä K´£‰d*Ûýõ]ð)’IÉ’ãñA.?,¾Ýý4Dœþ )™&2’3çl4[xtK—Þ ˜‚
+™6’Æ‹ãòê%³Úù9?_~úÕ¨È1§1ººÉ¦^Í?^|”÷w›x›&›x>Yo’4ž¥4zœÇ7—Ÿ¯>Ðm²¾MSŽ,0§Tf]Òy߇¤œ¿»‹lˆº°¾j0ŸÜ~]¬hSZ+†ã…Z¨ %ì;%;f D«3VkZ!‚¸
+1+ŠÝ±‚²hj7«ÊiÚ§ø[€AÈ”5Ç$CÙžx´C)Um¨žæê
+B¾°Þ§xºy• ÅCl)žÔ
+„ÝÅÜ/ã“Ç$Šª‹FQǤ0Äd¨§;h<п"H–Z[ªO“À©
+Ë ˆG8 ÑLXW hñ†r9ÚÅR6¤vßõTúÆžSé?li¨ŠKf«rYëd°’×ÊÔ
+TCTϹ¹NöŸLn–É4=R=f5Ëb
+Õp±˜?ÿzq½\$·›éúËuy¹¨ mŸ@æÞ½œAêa»^@+°0°õ©d=Àu =eÁ¿L{šò€6'ÉcÅ¥á§aª\ÀÔC,Ó‚?Yh®‹®šz¢ èÎ¬Õ ]ó÷ðŽÇ õʳ/?æ\õ¹Ô£ ÒfZ™Bã@òâ!© ÅXë­]pŽŠÅ£åýÝåó^=JÍûc^£Ê—FÖ¸½Ç¼@OsÊ[êã5¥ÑP§KŽ`Òu»ÉÇuúFû]F€9¾q´
+°¾öXw±O§§Âi,ÛdÊØ’(-ì9¬¨bpmeŸiÿÅ–-ãØåÀX2-°ÁÃpà:øoòfOzÕÒrr°ÁCßdˆã)Ò/ þ› ûçà$€Ú™ª!¨rAVïàIýíü÷€j½¶¯´#j謊
+¯dÂtå›ã‚5F;†®çÒ)HÝÙ+r×ôÚÿÞ\°endstream
+endobj
+2418 0 obj <<
+/Type /Page
+/Contents 2419 0 R
+/Resources 2417 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 2416 0 R
+/Annots [ 2421 0 R 2422 0 R 2423 0 R 2424 0 R 2425 0 R 2426 0 R 2427 0 R 2428 0 R 2429 0 R 2430 0 R 2431 0 R 2432 0 R ]
+>> endobj
+2421 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [263.283 617.86 275.238 631.808]
+/Subtype /Link
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+2422 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 617.86 290.182 631.808]
+/Subtype /Link
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+2423 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 617.86 305.126 631.808]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+2424 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [268.264 570.039 275.238 583.987]
+/Subtype /Link
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+2425 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [278.227 570.039 290.182 583.987]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+2426 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 570.039 305.126 583.987]
+/Subtype /Link
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+2427 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 514.248 305.126 528.196]
+/Subtype /Link
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+2428 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 219.354 305.126 233.302]
+/Subtype /Link
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+2429 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 183.489 305.126 197.436]
+/Subtype /Link
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+2430 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [293.171 115.743 305.126 129.69]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+2431 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 655.718 499.397 669.666]
+/Subtype /Link
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+2432 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [487.442 609.89 499.397 623.837]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+2420 0 obj <<
+/D [2418 0 R /XYZ 144.727 740.998 null]
+>> endobj
+2417 0 obj <<
+/Font << /F75 558 0 R /F74 556 0 R /F83 563 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2433 0 obj <<
+/Type /Encoding
+/Differences [ 0 /.notdef 1/dotaccent/fi/fl/fraction/hungarumlaut/Lslash/lslash/ogonek/ring 10/.notdef 11/breve/minus 13/.notdef 14/Zcaron/zcaron/caron/dotlessi/dotlessj/ff/ffi/ffl 22/.notdef 30/grave/quotesingle/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/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 127/.notdef 130/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE 141/.notdef 147/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe 157/.notdef 159/Ydieresis 160/.notdef 161/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/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]
+>> endobj
+752 0 obj <<
+/Type /Font
+/Subtype /Type1
+/Encoding 2433 0 R
+/BaseFont /Courier-Oblique
+>> endobj
+750 0 obj <<
+/Type /Font
+/Subtype /Type1
+/Encoding 2433 0 R
+/BaseFont /Times-Italic
+>> endobj
+571 0 obj <<
+/Type /Font
+/Subtype /Type1
+/Encoding 2433 0 R
+/BaseFont /Courier-Bold
+>> endobj
+563 0 obj <<
+/Type /Font
+/Subtype /Type1
+/Encoding 2433 0 R
+/BaseFont /Times-Bold
+>> endobj
+560 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /Symbol
+>> endobj
+558 0 obj <<
+/Type /Font
+/Subtype /Type1
+/Encoding 2433 0 R
+/BaseFont /Courier
+>> endobj
+556 0 obj <<
+/Type /Font
+/Subtype /Type1
+/Encoding 2433 0 R
+/BaseFont /Times-Roman
+>> endobj
+590 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2434 0 R
+/Kids [550 0 R 592 0 R 636 0 R 679 0 R 717 0 R 731 0 R]
+>> endobj
+753 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2434 0 R
+/Kids [746 0 R 755 0 R 763 0 R 767 0 R 771 0 R 775 0 R]
+>> endobj
+782 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2434 0 R
+/Kids [779 0 R 784 0 R 788 0 R 792 0 R 796 0 R 801 0 R]
+>> endobj
+808 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2434 0 R
+/Kids [805 0 R 810 0 R 814 0 R 818 0 R 822 0 R 826 0 R]
+>> endobj
+835 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2434 0 R
+/Kids [830 0 R 837 0 R 841 0 R 845 0 R 849 0 R 853 0 R]
+>> endobj
+860 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2434 0 R
+/Kids [857 0 R 862 0 R 866 0 R 870 0 R 877 0 R 881 0 R]
+>> endobj
+888 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2435 0 R
+/Kids [885 0 R 890 0 R 894 0 R 898 0 R 902 0 R 906 0 R]
+>> endobj
+913 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2435 0 R
+/Kids [910 0 R 915 0 R 919 0 R 923 0 R 927 0 R 931 0 R]
+>> endobj
+938 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2435 0 R
+/Kids [935 0 R 940 0 R 944 0 R 948 0 R 952 0 R 956 0 R]
+>> endobj
+963 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2435 0 R
+/Kids [960 0 R 965 0 R 969 0 R 973 0 R 977 0 R 981 0 R]
+>> endobj
+988 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2435 0 R
+/Kids [985 0 R 990 0 R 994 0 R 998 0 R 1002 0 R 1006 0 R]
+>> endobj
+1015 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2435 0 R
+/Kids [1012 0 R 1017 0 R 1021 0 R 1025 0 R 1029 0 R 1033 0 R]
+>> endobj
+1040 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2436 0 R
+/Kids [1037 0 R 1042 0 R 1046 0 R 1050 0 R 1054 0 R 1058 0 R]
+>> endobj
+1065 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2436 0 R
+/Kids [1062 0 R 1067 0 R 1071 0 R 1075 0 R 1079 0 R 1083 0 R]
+>> endobj
+1090 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2436 0 R
+/Kids [1087 0 R 1092 0 R 1096 0 R 1100 0 R 1104 0 R 1108 0 R]
+>> endobj
+1115 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2436 0 R
+/Kids [1112 0 R 1117 0 R 1121 0 R 1125 0 R 1129 0 R 1133 0 R]
+>> endobj
+1140 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2436 0 R
+/Kids [1137 0 R 1142 0 R 1146 0 R 1150 0 R 1154 0 R 1158 0 R]
+>> endobj
+1165 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2436 0 R
+/Kids [1162 0 R 1167 0 R 1171 0 R 1183 0 R 1213 0 R 1217 0 R]
+>> endobj
+1225 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2437 0 R
+/Kids [1222 0 R 1227 0 R 1232 0 R 1236 0 R 1240 0 R 1244 0 R]
+>> endobj
+1251 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2437 0 R
+/Kids [1248 0 R 1253 0 R 1257 0 R 1261 0 R 1288 0 R 1313 0 R]
+>> endobj
+1320 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2437 0 R
+/Kids [1317 0 R 1322 0 R 1326 0 R 1395 0 R 1414 0 R 1428 0 R]
+>> endobj
+1500 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2437 0 R
+/Kids [1455 0 R 1502 0 R 1559 0 R 1629 0 R 1664 0 R 1707 0 R]
+>> endobj
+1924 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2437 0 R
+/Kids [1805 0 R 1926 0 R 2017 0 R 2044 0 R 2084 0 R 2099 0 R]
+>> endobj
+2190 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2437 0 R
+/Kids [2149 0 R 2192 0 R 2218 0 R 2270 0 R 2319 0 R 2339 0 R]
+>> endobj
+2416 0 obj <<
+/Type /Pages
+/Count 2
+/Parent 2438 0 R
+/Kids [2381 0 R 2418 0 R]
+>> endobj
+2434 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 2439 0 R
+/Kids [590 0 R 753 0 R 782 0 R 808 0 R 835 0 R 860 0 R]
+>> endobj
+2435 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 2439 0 R
+/Kids [888 0 R 913 0 R 938 0 R 963 0 R 988 0 R 1015 0 R]
+>> endobj
+2436 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 2439 0 R
+/Kids [1040 0 R 1065 0 R 1090 0 R 1115 0 R 1140 0 R 1165 0 R]
+>> endobj
+2437 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 2439 0 R
+/Kids [1225 0 R 1251 0 R 1320 0 R 1500 0 R 1924 0 R 2190 0 R]
+>> endobj
+2438 0 obj <<
+/Type /Pages
+/Count 2
+/Parent 2439 0 R
+/Kids [2416 0 R]
+>> endobj
+2439 0 obj <<
+/Type /Pages
+/Count 146
+/Kids [2434 0 R 2435 0 R 2436 0 R 2437 0 R 2438 0 R]
+>> endobj
+2440 0 obj <<
+/Type /Outlines
+/First 7 0 R
+/Last 547 0 R
+/Count 31
+>> endobj
+547 0 obj <<
+/Title 548 0 R
+/A 545 0 R
+/Parent 2440 0 R
+/Prev 523 0 R
+>> endobj
+543 0 obj <<
+/Title 544 0 R
+/A 541 0 R
+/Parent 523 0 R
+/Prev 539 0 R
+>> endobj
+539 0 obj <<
+/Title 540 0 R
+/A 537 0 R
+/Parent 523 0 R
+/Prev 535 0 R
+/Next 543 0 R
+>> endobj
+535 0 obj <<
+/Title 536 0 R
+/A 533 0 R
+/Parent 523 0 R
+/Prev 531 0 R
+/Next 539 0 R
+>> endobj
+531 0 obj <<
+/Title 532 0 R
+/A 529 0 R
+/Parent 523 0 R
+/Prev 527 0 R
+/Next 535 0 R
+>> endobj
+527 0 obj <<
+/Title 528 0 R
+/A 525 0 R
+/Parent 523 0 R
+/Next 531 0 R
+>> endobj
+523 0 obj <<
+/Title 524 0 R
+/A 521 0 R
+/Parent 2440 0 R
+/Prev 515 0 R
+/Next 547 0 R
+/First 527 0 R
+/Last 543 0 R
+/Count -5
+>> endobj
+519 0 obj <<
+/Title 520 0 R
+/A 517 0 R
+/Parent 515 0 R
+>> endobj
+515 0 obj <<
+/Title 516 0 R
+/A 513 0 R
+/Parent 2440 0 R
+/Prev 419 0 R
+/Next 523 0 R
+/First 519 0 R
+/Last 519 0 R
+/Count -1
+>> endobj
+511 0 obj <<
+/Title 512 0 R
+/A 509 0 R
+/Parent 419 0 R
+/Prev 475 0 R
+>> endobj
+507 0 obj <<
+/Title 508 0 R
+/A 505 0 R
+/Parent 475 0 R
+/Prev 503 0 R
+>> endobj
+503 0 obj <<
+/Title 504 0 R
+/A 501 0 R
+/Parent 475 0 R
+/Prev 499 0 R
+/Next 507 0 R
+>> endobj
+499 0 obj <<
+/Title 500 0 R
+/A 497 0 R
+/Parent 475 0 R
+/Prev 495 0 R
+/Next 503 0 R
+>> endobj
+495 0 obj <<
+/Title 496 0 R
+/A 493 0 R
+/Parent 475 0 R
+/Prev 491 0 R
+/Next 499 0 R
+>> endobj
+491 0 obj <<
+/Title 492 0 R
+/A 489 0 R
+/Parent 475 0 R
+/Prev 487 0 R
+/Next 495 0 R
+>> endobj
+487 0 obj <<
+/Title 488 0 R
+/A 485 0 R
+/Parent 475 0 R
+/Prev 483 0 R
+/Next 491 0 R
+>> endobj
+483 0 obj <<
+/Title 484 0 R
+/A 481 0 R
+/Parent 475 0 R
+/Prev 479 0 R
+/Next 487 0 R
+>> endobj
+479 0 obj <<
+/Title 480 0 R
+/A 477 0 R
+/Parent 475 0 R
+/Next 483 0 R
+>> endobj
+475 0 obj <<
+/Title 476 0 R
+/A 473 0 R
+/Parent 419 0 R
+/Prev 431 0 R
+/Next 511 0 R
+/First 479 0 R
+/Last 507 0 R
+/Count -8
+>> endobj
+471 0 obj <<
+/Title 472 0 R
+/A 469 0 R
+/Parent 431 0 R
+/Prev 467 0 R
+>> endobj
+467 0 obj <<
+/Title 468 0 R
+/A 465 0 R
+/Parent 431 0 R
+/Prev 463 0 R
+/Next 471 0 R
+>> endobj
+463 0 obj <<
+/Title 464 0 R
+/A 461 0 R
+/Parent 431 0 R
+/Prev 459 0 R
+/Next 467 0 R
+>> endobj
+459 0 obj <<
+/Title 460 0 R
+/A 457 0 R
+/Parent 431 0 R
+/Prev 455 0 R
+/Next 463 0 R
+>> endobj
+455 0 obj <<
+/Title 456 0 R
+/A 453 0 R
+/Parent 431 0 R
+/Prev 451 0 R
+/Next 459 0 R
+>> endobj
+451 0 obj <<
+/Title 452 0 R
+/A 449 0 R
+/Parent 431 0 R
+/Prev 447 0 R
+/Next 455 0 R
+>> endobj
+447 0 obj <<
+/Title 448 0 R
+/A 445 0 R
+/Parent 431 0 R
+/Prev 443 0 R
+/Next 451 0 R
+>> endobj
+443 0 obj <<
+/Title 444 0 R
+/A 441 0 R
+/Parent 431 0 R
+/Prev 439 0 R
+/Next 447 0 R
+>> endobj
+439 0 obj <<
+/Title 440 0 R
+/A 437 0 R
+/Parent 431 0 R
+/Prev 435 0 R
+/Next 443 0 R
+>> endobj
+435 0 obj <<
+/Title 436 0 R
+/A 433 0 R
+/Parent 431 0 R
+/Next 439 0 R
+>> endobj
+431 0 obj <<
+/Title 432 0 R
+/A 429 0 R
+/Parent 419 0 R
+/Prev 427 0 R
+/Next 475 0 R
+/First 435 0 R
+/Last 471 0 R
+/Count -10
+>> endobj
+427 0 obj <<
+/Title 428 0 R
+/A 425 0 R
+/Parent 419 0 R
+/Prev 423 0 R
+/Next 431 0 R
+>> endobj
+423 0 obj <<
+/Title 424 0 R
+/A 421 0 R
+/Parent 419 0 R
+/Next 427 0 R
+>> endobj
+419 0 obj <<
+/Title 420 0 R
+/A 417 0 R
+/Parent 2440 0 R
+/Prev 415 0 R
+/Next 515 0 R
+/First 423 0 R
+/Last 511 0 R
+/Count -5
+>> endobj
+415 0 obj <<
+/Title 416 0 R
+/A 413 0 R
+/Parent 2440 0 R
+/Prev 411 0 R
+/Next 419 0 R
+>> endobj
+411 0 obj <<
+/Title 412 0 R
+/A 409 0 R
+/Parent 2440 0 R
+/Prev 407 0 R
+/Next 415 0 R
+>> endobj
+407 0 obj <<
+/Title 408 0 R
+/A 405 0 R
+/Parent 2440 0 R
+/Prev 403 0 R
+/Next 411 0 R
+>> endobj
+403 0 obj <<
+/Title 404 0 R
+/A 401 0 R
+/Parent 2440 0 R
+/Prev 399 0 R
+/Next 407 0 R
+>> endobj
+399 0 obj <<
+/Title 400 0 R
+/A 397 0 R
+/Parent 2440 0 R
+/Prev 383 0 R
+/Next 403 0 R
+>> endobj
+395 0 obj <<
+/Title 396 0 R
+/A 393 0 R
+/Parent 383 0 R
+/Prev 391 0 R
+>> endobj
+391 0 obj <<
+/Title 392 0 R
+/A 389 0 R
+/Parent 383 0 R
+/Prev 387 0 R
+/Next 395 0 R
+>> endobj
+387 0 obj <<
+/Title 388 0 R
+/A 385 0 R
+/Parent 383 0 R
+/Next 391 0 R
+>> endobj
+383 0 obj <<
+/Title 384 0 R
+/A 381 0 R
+/Parent 2440 0 R
+/Prev 379 0 R
+/Next 399 0 R
+/First 387 0 R
+/Last 395 0 R
+/Count -3
+>> endobj
+379 0 obj <<
+/Title 380 0 R
+/A 377 0 R
+/Parent 2440 0 R
+/Prev 375 0 R
+/Next 383 0 R
+>> endobj
+375 0 obj <<
+/Title 376 0 R
+/A 373 0 R
+/Parent 2440 0 R
+/Prev 371 0 R
+/Next 379 0 R
+>> endobj
+371 0 obj <<
+/Title 372 0 R
+/A 369 0 R
+/Parent 2440 0 R
+/Prev 355 0 R
+/Next 375 0 R
+>> endobj
+367 0 obj <<
+/Title 368 0 R
+/A 365 0 R
+/Parent 355 0 R
+/Prev 363 0 R
+>> endobj
+363 0 obj <<
+/Title 364 0 R
+/A 361 0 R
+/Parent 355 0 R
+/Prev 359 0 R
+/Next 367 0 R
+>> endobj
+359 0 obj <<
+/Title 360 0 R
+/A 357 0 R
+/Parent 355 0 R
+/Next 363 0 R
+>> endobj
+355 0 obj <<
+/Title 356 0 R
+/A 353 0 R
+/Parent 2440 0 R
+/Prev 351 0 R
+/Next 371 0 R
+/First 359 0 R
+/Last 367 0 R
+/Count -3
+>> endobj
+351 0 obj <<
+/Title 352 0 R
+/A 349 0 R
+/Parent 2440 0 R
+/Prev 347 0 R
+/Next 355 0 R
+>> endobj
+347 0 obj <<
+/Title 348 0 R
+/A 345 0 R
+/Parent 2440 0 R
+/Prev 331 0 R
+/Next 351 0 R
+>> endobj
+343 0 obj <<
+/Title 344 0 R
+/A 341 0 R
+/Parent 335 0 R
+/Prev 339 0 R
+>> endobj
+339 0 obj <<
+/Title 340 0 R
+/A 337 0 R
+/Parent 335 0 R
+/Next 343 0 R
+>> endobj
+335 0 obj <<
+/Title 336 0 R
+/A 333 0 R
+/Parent 331 0 R
+/First 339 0 R
+/Last 343 0 R
+/Count -2
+>> endobj
+331 0 obj <<
+/Title 332 0 R
+/A 329 0 R
+/Parent 2440 0 R
+/Prev 327 0 R
+/Next 347 0 R
+/First 335 0 R
+/Last 335 0 R
+/Count -1
+>> endobj
+327 0 obj <<
+/Title 328 0 R
+/A 325 0 R
+/Parent 2440 0 R
+/Prev 259 0 R
+/Next 331 0 R
+>> endobj
+323 0 obj <<
+/Title 324 0 R
+/A 321 0 R
+/Parent 319 0 R
+>> endobj
+319 0 obj <<
+/Title 320 0 R
+/A 317 0 R
+/Parent 259 0 R
+/Prev 311 0 R
+/First 323 0 R
+/Last 323 0 R
+/Count -1
+>> endobj
+315 0 obj <<
+/Title 316 0 R
+/A 313 0 R
+/Parent 311 0 R
+>> endobj
+311 0 obj <<
+/Title 312 0 R
+/A 309 0 R
+/Parent 259 0 R
+/Prev 307 0 R
+/Next 319 0 R
+/First 315 0 R
+/Last 315 0 R
+/Count -1
+>> endobj
+307 0 obj <<
+/Title 308 0 R
+/A 305 0 R
+/Parent 259 0 R
+/Prev 303 0 R
+/Next 311 0 R
+>> endobj
+303 0 obj <<
+/Title 304 0 R
+/A 301 0 R
+/Parent 259 0 R
+/Prev 299 0 R
+/Next 307 0 R
+>> endobj
+299 0 obj <<
+/Title 300 0 R
+/A 297 0 R
+/Parent 259 0 R
+/Prev 275 0 R
+/Next 303 0 R
+>> endobj
+295 0 obj <<
+/Title 296 0 R
+/A 293 0 R
+/Parent 275 0 R
+/Prev 291 0 R
+>> endobj
+291 0 obj <<
+/Title 292 0 R
+/A 289 0 R
+/Parent 275 0 R
+/Prev 287 0 R
+/Next 295 0 R
+>> endobj
+287 0 obj <<
+/Title 288 0 R
+/A 285 0 R
+/Parent 275 0 R
+/Prev 283 0 R
+/Next 291 0 R
+>> endobj
+283 0 obj <<
+/Title 284 0 R
+/A 281 0 R
+/Parent 275 0 R
+/Prev 279 0 R
+/Next 287 0 R
+>> endobj
+279 0 obj <<
+/Title 280 0 R
+/A 277 0 R
+/Parent 275 0 R
+/Next 283 0 R
+>> endobj
+275 0 obj <<
+/Title 276 0 R
+/A 273 0 R
+/Parent 259 0 R
+/Prev 271 0 R
+/Next 299 0 R
+/First 279 0 R
+/Last 295 0 R
+/Count -5
+>> endobj
+271 0 obj <<
+/Title 272 0 R
+/A 269 0 R
+/Parent 259 0 R
+/Prev 267 0 R
+/Next 275 0 R
+>> endobj
+267 0 obj <<
+/Title 268 0 R
+/A 265 0 R
+/Parent 259 0 R
+/Prev 263 0 R
+/Next 271 0 R
+>> endobj
+263 0 obj <<
+/Title 264 0 R
+/A 261 0 R
+/Parent 259 0 R
+/Next 267 0 R
+>> endobj
+259 0 obj <<
+/Title 260 0 R
+/A 257 0 R
+/Parent 2440 0 R
+/Prev 191 0 R
+/Next 327 0 R
+/First 263 0 R
+/Last 319 0 R
+/Count -9
+>> endobj
+255 0 obj <<
+/Title 256 0 R
+/A 253 0 R
+/Parent 191 0 R
+/Prev 243 0 R
+>> endobj
+251 0 obj <<
+/Title 252 0 R
+/A 249 0 R
+/Parent 243 0 R
+/Prev 247 0 R
+>> endobj
+247 0 obj <<
+/Title 248 0 R
+/A 245 0 R
+/Parent 243 0 R
+/Next 251 0 R
+>> endobj
+243 0 obj <<
+/Title 244 0 R
+/A 241 0 R
+/Parent 191 0 R
+/Prev 239 0 R
+/Next 255 0 R
+/First 247 0 R
+/Last 251 0 R
+/Count -2
+>> endobj
+239 0 obj <<
+/Title 240 0 R
+/A 237 0 R
+/Parent 191 0 R
+/Prev 235 0 R
+/Next 243 0 R
+>> endobj
+235 0 obj <<
+/Title 236 0 R
+/A 233 0 R
+/Parent 191 0 R
+/Prev 231 0 R
+/Next 239 0 R
+>> endobj
+231 0 obj <<
+/Title 232 0 R
+/A 229 0 R
+/Parent 191 0 R
+/Prev 227 0 R
+/Next 235 0 R
+>> endobj
+227 0 obj <<
+/Title 228 0 R
+/A 225 0 R
+/Parent 191 0 R
+/Prev 223 0 R
+/Next 231 0 R
+>> endobj
+223 0 obj <<
+/Title 224 0 R
+/A 221 0 R
+/Parent 191 0 R
+/Prev 219 0 R
+/Next 227 0 R
+>> endobj
+219 0 obj <<
+/Title 220 0 R
+/A 217 0 R
+/Parent 191 0 R
+/Prev 199 0 R
+/Next 223 0 R
+>> endobj
+215 0 obj <<
+/Title 216 0 R
+/A 213 0 R
+/Parent 199 0 R
+/Prev 211 0 R
+>> endobj
+211 0 obj <<
+/Title 212 0 R
+/A 209 0 R
+/Parent 199 0 R
+/Prev 207 0 R
+/Next 215 0 R
+>> endobj
+207 0 obj <<
+/Title 208 0 R
+/A 205 0 R
+/Parent 199 0 R
+/Prev 203 0 R
+/Next 211 0 R
+>> endobj
+203 0 obj <<
+/Title 204 0 R
+/A 201 0 R
+/Parent 199 0 R
+/Next 207 0 R
+>> endobj
+199 0 obj <<
+/Title 200 0 R
+/A 197 0 R
+/Parent 191 0 R
+/Prev 195 0 R
+/Next 219 0 R
+/First 203 0 R
+/Last 215 0 R
+/Count -4
+>> endobj
+195 0 obj <<
+/Title 196 0 R
+/A 193 0 R
+/Parent 191 0 R
+/Next 199 0 R
+>> endobj
+191 0 obj <<
+/Title 192 0 R
+/A 189 0 R
+/Parent 2440 0 R
+/Prev 187 0 R
+/Next 259 0 R
+/First 195 0 R
+/Last 255 0 R
+/Count -10
+>> endobj
+187 0 obj <<
+/Title 188 0 R
+/A 185 0 R
+/Parent 2440 0 R
+/Prev 183 0 R
+/Next 191 0 R
+>> endobj
+183 0 obj <<
+/Title 184 0 R
+/A 181 0 R
+/Parent 2440 0 R
+/Prev 179 0 R
+/Next 187 0 R
+>> endobj
+179 0 obj <<
+/Title 180 0 R
+/A 177 0 R
+/Parent 2440 0 R
+/Prev 175 0 R
+/Next 183 0 R
+>> endobj
+175 0 obj <<
+/Title 176 0 R
+/A 173 0 R
+/Parent 2440 0 R
+/Prev 35 0 R
+/Next 179 0 R
+>> endobj
+171 0 obj <<
+/Title 172 0 R
+/A 169 0 R
+/Parent 35 0 R
+/Prev 167 0 R
+>> endobj
+167 0 obj <<
+/Title 168 0 R
+/A 165 0 R
+/Parent 35 0 R
+/Prev 163 0 R
+/Next 171 0 R
+>> endobj
+163 0 obj <<
+/Title 164 0 R
+/A 161 0 R
+/Parent 35 0 R
+/Prev 159 0 R
+/Next 167 0 R
+>> endobj
+159 0 obj <<
+/Title 160 0 R
+/A 157 0 R
+/Parent 35 0 R
+/Prev 155 0 R
+/Next 163 0 R
+>> endobj
+155 0 obj <<
+/Title 156 0 R
+/A 153 0 R
+/Parent 35 0 R
+/Prev 151 0 R
+/Next 159 0 R
+>> endobj
+151 0 obj <<
+/Title 152 0 R
+/A 149 0 R
+/Parent 35 0 R
+/Prev 43 0 R
+/Next 155 0 R
+>> endobj
+147 0 obj <<
+/Title 148 0 R
+/A 145 0 R
+/Parent 43 0 R
+/Prev 143 0 R
+>> endobj
+143 0 obj <<
+/Title 144 0 R
+/A 141 0 R
+/Parent 43 0 R
+/Prev 139 0 R
+/Next 147 0 R
+>> endobj
+139 0 obj <<
+/Title 140 0 R
+/A 137 0 R
+/Parent 43 0 R
+/Prev 135 0 R
+/Next 143 0 R
+>> endobj
+135 0 obj <<
+/Title 136 0 R
+/A 133 0 R
+/Parent 43 0 R
+/Prev 131 0 R
+/Next 139 0 R
+>> endobj
+131 0 obj <<
+/Title 132 0 R
+/A 129 0 R
+/Parent 43 0 R
+/Prev 127 0 R
+/Next 135 0 R
+>> endobj
+127 0 obj <<
+/Title 128 0 R
+/A 125 0 R
+/Parent 43 0 R
+/Prev 123 0 R
+/Next 131 0 R
+>> endobj
+123 0 obj <<
+/Title 124 0 R
+/A 121 0 R
+/Parent 43 0 R
+/Prev 119 0 R
+/Next 127 0 R
+>> endobj
+119 0 obj <<
+/Title 120 0 R
+/A 117 0 R
+/Parent 43 0 R
+/Prev 115 0 R
+/Next 123 0 R
+>> endobj
+115 0 obj <<
+/Title 116 0 R
+/A 113 0 R
+/Parent 43 0 R
+/Prev 111 0 R
+/Next 119 0 R
+>> endobj
+111 0 obj <<
+/Title 112 0 R
+/A 109 0 R
+/Parent 43 0 R
+/Prev 107 0 R
+/Next 115 0 R
+>> endobj
+107 0 obj <<
+/Title 108 0 R
+/A 105 0 R
+/Parent 43 0 R
+/Prev 103 0 R
+/Next 111 0 R
+>> endobj
+103 0 obj <<
+/Title 104 0 R
+/A 101 0 R
+/Parent 43 0 R
+/Prev 99 0 R
+/Next 107 0 R
+>> endobj
+99 0 obj <<
+/Title 100 0 R
+/A 97 0 R
+/Parent 43 0 R
+/Prev 95 0 R
+/Next 103 0 R
+>> endobj
+95 0 obj <<
+/Title 96 0 R
+/A 93 0 R
+/Parent 43 0 R
+/Prev 91 0 R
+/Next 99 0 R
+>> endobj
+91 0 obj <<
+/Title 92 0 R
+/A 89 0 R
+/Parent 43 0 R
+/Prev 87 0 R
+/Next 95 0 R
+>> endobj
+87 0 obj <<
+/Title 88 0 R
+/A 85 0 R
+/Parent 43 0 R
+/Prev 83 0 R
+/Next 91 0 R
+>> endobj
+83 0 obj <<
+/Title 84 0 R
+/A 81 0 R
+/Parent 43 0 R
+/Prev 79 0 R
+/Next 87 0 R
+>> endobj
+79 0 obj <<
+/Title 80 0 R
+/A 77 0 R
+/Parent 43 0 R
+/Prev 75 0 R
+/Next 83 0 R
+>> endobj
+75 0 obj <<
+/Title 76 0 R
+/A 73 0 R
+/Parent 43 0 R
+/Prev 71 0 R
+/Next 79 0 R
+>> endobj
+71 0 obj <<
+/Title 72 0 R
+/A 69 0 R
+/Parent 43 0 R
+/Prev 67 0 R
+/Next 75 0 R
+>> endobj
+67 0 obj <<
+/Title 68 0 R
+/A 65 0 R
+/Parent 43 0 R
+/Prev 63 0 R
+/Next 71 0 R
+>> endobj
+63 0 obj <<
+/Title 64 0 R
+/A 61 0 R
+/Parent 43 0 R
+/Prev 59 0 R
+/Next 67 0 R
+>> endobj
+59 0 obj <<
+/Title 60 0 R
+/A 57 0 R
+/Parent 43 0 R
+/Prev 55 0 R
+/Next 63 0 R
+>> endobj
+55 0 obj <<
+/Title 56 0 R
+/A 53 0 R
+/Parent 43 0 R
+/Prev 51 0 R
+/Next 59 0 R
+>> endobj
+51 0 obj <<
+/Title 52 0 R
+/A 49 0 R
+/Parent 43 0 R
+/Prev 47 0 R
+/Next 55 0 R
+>> endobj
+47 0 obj <<
+/Title 48 0 R
+/A 45 0 R
+/Parent 43 0 R
+/Next 51 0 R
+>> endobj
+43 0 obj <<
+/Title 44 0 R
+/A 41 0 R
+/Parent 35 0 R
+/Prev 39 0 R
+/Next 151 0 R
+/First 47 0 R
+/Last 147 0 R
+/Count -26
+>> endobj
+39 0 obj <<
+/Title 40 0 R
+/A 37 0 R
+/Parent 35 0 R
+/Next 43 0 R
+>> endobj
+35 0 obj <<
+/Title 36 0 R
+/A 33 0 R
+/Parent 2440 0 R
+/Prev 31 0 R
+/Next 175 0 R
+/First 39 0 R
+/Last 171 0 R
+/Count -8
+>> endobj
+31 0 obj <<
+/Title 32 0 R
+/A 29 0 R
+/Parent 2440 0 R
+/Prev 23 0 R
+/Next 35 0 R
+>> endobj
+27 0 obj <<
+/Title 28 0 R
+/A 25 0 R
+/Parent 23 0 R
+>> endobj
+23 0 obj <<
+/Title 24 0 R
+/A 21 0 R
+/Parent 2440 0 R
+/Prev 19 0 R
+/Next 31 0 R
+/First 27 0 R
+/Last 27 0 R
+/Count -1
+>> endobj
+19 0 obj <<
+/Title 20 0 R
+/A 17 0 R
+/Parent 2440 0 R
+/Prev 15 0 R
+/Next 23 0 R
+>> endobj
+15 0 obj <<
+/Title 16 0 R
+/A 13 0 R
+/Parent 2440 0 R
+/Prev 11 0 R
+/Next 19 0 R
+>> endobj
+11 0 obj <<
+/Title 12 0 R
+/A 9 0 R
+/Parent 2440 0 R
+/Prev 7 0 R
+/Next 15 0 R
+>> endobj
+7 0 obj <<
+/Title 8 0 R
+/A 5 0 R
+/Parent 2440 0 R
+/Next 11 0 R
+>> endobj
+2441 0 obj <<
+/Names [(Doc-Start) 554 0 R (Item.1) 720 0 R (Item.10) 729 0 R (Item.100) 1309 0 R (Item.101) 1310 0 R (Item.102) 1311 0 R (Item.11) 734 0 R (Item.12) 735 0 R (Item.13) 736 0 R (Item.14) 737 0 R (Item.15) 738 0 R (Item.16) 739 0 R (Item.17) 740 0 R (Item.18) 741 0 R (Item.19) 742 0 R (Item.2) 721 0 R (Item.20) 743 0 R (Item.21) 744 0 R (Item.22) 873 0 R (Item.23) 874 0 R (Item.24) 875 0 R (Item.25) 1174 0 R (Item.26) 1175 0 R (Item.27) 1176 0 R (Item.28) 1177 0 R (Item.29) 1178 0 R (Item.3) 722 0 R (Item.30) 1179 0 R (Item.31) 1180 0 R (Item.32) 1181 0 R (Item.33) 1186 0 R (Item.34) 1187 0 R (Item.35) 1188 0 R (Item.36) 1189 0 R (Item.37) 1190 0 R (Item.38) 1191 0 R (Item.39) 1192 0 R (Item.4) 723 0 R (Item.40) 1193 0 R (Item.41) 1194 0 R (Item.42) 1195 0 R (Item.43) 1196 0 R (Item.44) 1197 0 R (Item.45) 1198 0 R (Item.46) 1199 0 R (Item.47) 1200 0 R (Item.48) 1201 0 R (Item.49) 1202 0 R (Item.5) 724 0 R (Item.50) 1203 0 R (Item.51) 1204 0 R (Item.52) 1205 0 R (Item.53) 1206 0 R (Item.54) 1207 0 R (Item.55) 1208 0 R (Item.56) 1209 0 R (Item.57) 1210 0 R (Item.58) 1211 0 R (Item.59) 1264 0 R (Item.6) 725 0 R (Item.60) 1265 0 R (Item.61) 1266 0 R (Item.62) 1267 0 R (Item.63) 1268 0 R (Item.64) 1269 0 R (Item.65) 1270 0 R (Item.66) 1271 0 R (Item.67) 1272 0 R (Item.68) 1273 0 R (Item.69) 1274 0 R (Item.7) 726 0 R (Item.70) 1275 0 R (Item.71) 1276 0 R (Item.72) 1277 0 R (Item.73) 1278 0 R (Item.74) 1279 0 R (Item.75) 1280 0 R (Item.76) 1281 0 R (Item.77) 1282 0 R (Item.78) 1283 0 R (Item.79) 1284 0 R (Item.8) 727 0 R (Item.80) 1285 0 R (Item.81) 1286 0 R (Item.82) 1291 0 R (Item.83) 1292 0 R (Item.84) 1293 0 R (Item.85) 1294 0 R (Item.86) 1295 0 R (Item.87) 1296 0 R (Item.88) 1297 0 R (Item.89) 1298 0 R (Item.9) 728 0 R (Item.90) 1299 0 R (Item.91) 1300 0 R (Item.92) 1301 0 R (Item.93) 1302 0 R (Item.94) 1303 0 R (Item.95) 1304 0 R (Item.96) 1305 0 R (Item.97) 1306 0 R (Item.98) 1307 0 R (Item.99) 1308 0 R (page.1) 553 0 R (page.10) 769 0 R (page.100) 1152 0 R (page.101) 1156 0 R (page.102) 1160 0 R (page.103) 1164 0 R (page.104) 1169 0 R (page.105) 1173 0 R (page.106) 1185 0 R (page.107) 1215 0 R (page.108) 1219 0 R (page.109) 1224 0 R (page.11) 773 0 R (page.110) 1229 0 R (page.111) 1234 0 R (page.112) 1238 0 R (page.113) 1242 0 R (page.114) 1246 0 R (page.115) 1250 0 R (page.116) 1255 0 R (page.117) 1259 0 R (page.118) 1263 0 R (page.119) 1290 0 R (page.12) 777 0 R (page.120) 1315 0 R (page.121) 1319 0 R (page.122) 1324 0 R (page.123) 1328 0 R (page.124) 1397 0 R (page.125) 1416 0 R (page.126) 1430 0 R (page.127) 1457 0 R (page.128) 1504 0 R (page.129) 1561 0 R (page.13) 781 0 R (page.130) 1631 0 R (page.131) 1666 0 R (page.132) 1709 0 R (page.133) 1807 0 R (page.134) 1928 0 R (page.135) 2019 0 R (page.136) 2046 0 R (page.137) 2086 0 R (page.138) 2101 0 R (page.139) 2151 0 R (page.14) 786 0 R (page.140) 2194 0 R (page.141) 2220 0 R (page.142) 2272 0 R (page.143) 2321 0 R (page.144) 2341 0 R (page.145) 2383 0 R (page.146) 2420 0 R (page.15) 790 0 R (page.16) 794 0 R (page.17) 798 0 R (page.18) 803 0 R (page.19) 807 0 R (page.2) 594 0 R (page.20) 812 0 R (page.21) 816 0 R (page.22) 820 0 R (page.23) 824 0 R (page.24) 828 0 R (page.25) 832 0 R (page.26) 839 0 R (page.27) 843 0 R (page.28) 847 0 R (page.29) 851 0 R (page.3) 638 0 R (page.30) 855 0 R (page.31) 859 0 R (page.32) 864 0 R (page.33) 868 0 R (page.34) 872 0 R (page.35) 879 0 R (page.36) 883 0 R (page.37) 887 0 R (page.38) 892 0 R (page.39) 896 0 R (page.4) 681 0 R (page.40) 900 0 R (page.41) 904 0 R (page.42) 908 0 R (page.43) 912 0 R (page.44) 917 0 R (page.45) 921 0 R (page.46) 925 0 R (page.47) 929 0 R (page.48) 933 0 R (page.49) 937 0 R (page.5) 719 0 R (page.50) 942 0 R (page.51) 946 0 R (page.52) 950 0 R (page.53) 954 0 R (page.54) 958 0 R (page.55) 962 0 R (page.56) 967 0 R (page.57) 971 0 R (page.58) 975 0 R (page.59) 979 0 R (page.6) 733 0 R (page.60) 983 0 R (page.61) 987 0 R (page.62) 992 0 R (page.63) 996 0 R (page.64) 1000 0 R (page.65) 1004 0 R (page.66) 1008 0 R (page.67) 1014 0 R (page.68) 1019 0 R (page.69) 1023 0 R (page.7) 748 0 R (page.70) 1027 0 R (page.71) 1031 0 R (page.72) 1035 0 R (page.73) 1039 0 R (page.74) 1044 0 R (page.75) 1048 0 R (page.76) 1052 0 R (page.77) 1056 0 R (page.78) 1060 0 R (page.79) 1064 0 R (page.8) 757 0 R (page.80) 1069 0 R (page.81) 1073 0 R (page.82) 1077 0 R (page.83) 1081 0 R (page.84) 1085 0 R (page.85) 1089 0 R (page.86) 1094 0 R (page.87) 1098 0 R (page.88) 1102 0 R (page.89) 1106 0 R (page.9) 765 0 R (page.90) 1110 0 R (page.91) 1114 0 R (page.92) 1119 0 R (page.93) 1123 0 R (page.94) 1127 0 R (page.95) 1131 0 R (page.96) 1135 0 R (page.97) 1139 0 R (page.98) 1144 0 R (page.99) 1148 0 R (section*.1) 564 0 R (section*.2) 546 0 R (section.1) 6 0 R (section.10) 182 0 R (section.11) 186 0 R (section.12) 190 0 R (section.13) 258 0 R (section.14) 326 0 R (section.15) 330 0 R (section.16) 346 0 R (section.17) 350 0 R (section.18) 354 0 R (section.19) 370 0 R (section.2) 10 0 R (section.20) 374 0 R (section.21) 378 0 R (section.22) 382 0 R (section.23) 398 0 R (section.24) 402 0 R (section.25) 406 0 R (section.26) 410 0 R (section.27) 414 0 R (section.28) 418 0 R (section.29) 514 0 R (section.3) 14 0 R (section.30) 522 0 R (section.4) 18 0 R (section.5) 22 0 R (section.6) 30 0 R (section.7) 34 0 R (section.8) 174 0 R (section.9) 178 0 R (subsection.12.1) 194 0 R (subsection.12.10) 254 0 R (subsection.12.2) 198 0 R (subsection.12.3) 218 0 R (subsection.12.4) 222 0 R (subsection.12.5) 226 0 R (subsection.12.6) 230 0 R (subsection.12.7) 234 0 R (subsection.12.8) 238 0 R (subsection.12.9) 242 0 R (subsection.13.1) 262 0 R (subsection.13.2) 266 0 R (subsection.13.3) 270 0 R (subsection.13.4) 274 0 R (subsection.13.5) 298 0 R (subsection.13.6) 302 0 R (subsection.13.7) 306 0 R (subsection.13.8) 310 0 R (subsection.13.9) 318 0 R (subsection.15.1) 334 0 R (subsection.18.1) 358 0 R (subsection.18.2) 362 0 R (subsection.18.3) 366 0 R (subsection.22.1) 386 0 R (subsection.22.2) 390 0 R (subsection.22.3) 394 0 R (subsection.28.1) 422 0 R (subsection.28.2) 426 0 R (subsection.28.3) 430 0 R (subsection.28.4) 474 0 R (subsection.28.5) 510 0 R (subsection.29.1) 518 0 R (subsection.30.1) 526 0 R (subsection.30.2) 530 0 R (subsection.30.3) 534 0 R (subsection.30.4) 538 0 R (subsection.30.5) 542 0 R (subsection.5.1) 26 0 R (subsection.7.1) 38 0 R (subsection.7.2) 42 0 R (subsection.7.3) 150 0 R (subsection.7.4) 154 0 R (subsection.7.5) 158 0 R (subsection.7.6) 162 0 R (subsection.7.7) 166 0 R (subsection.7.8) 170 0 R (subsubsection.12.2.1) 202 0 R (subsubsection.12.2.2) 206 0 R (subsubsection.12.2.3) 210 0 R (subsubsection.12.2.4) 214 0 R (subsubsection.12.9.1) 246 0 R (subsubsection.12.9.2) 250 0 R (subsubsection.13.4.1) 278 0 R (subsubsection.13.4.2) 282 0 R (subsubsection.13.4.3) 286 0 R (subsubsection.13.4.4) 290 0 R (subsubsection.13.4.5) 294 0 R (subsubsection.13.8.1) 314 0 R (subsubsection.13.9.1) 322 0 R (subsubsection.15.1.1) 338 0 R (subsubsection.15.1.2) 342 0 R (subsubsection.28.3.1) 434 0 R (subsubsection.28.3.10) 470 0 R (subsubsection.28.3.2) 438 0 R (subsubsection.28.3.3) 442 0 R (subsubsection.28.3.4) 446 0 R (subsubsection.28.3.5) 450 0 R (subsubsection.28.3.6) 454 0 R (subsubsection.28.3.7) 458 0 R (subsubsection.28.3.8) 462 0 R (subsubsection.28.3.9) 466 0 R (subsubsection.28.4.1) 478 0 R (subsubsection.28.4.2) 482 0 R (subsubsection.28.4.3) 486 0 R (subsubsection.28.4.4) 490 0 R (subsubsection.28.4.5) 494 0 R (subsubsection.28.4.6) 498 0 R (subsubsection.28.4.7) 502 0 R (subsubsection.28.4.8) 506 0 R (subsubsection.7.2.1) 46 0 R (subsubsection.7.2.10) 82 0 R (subsubsection.7.2.11) 86 0 R (subsubsection.7.2.12) 90 0 R (subsubsection.7.2.13) 94 0 R (subsubsection.7.2.14) 98 0 R (subsubsection.7.2.15) 102 0 R (subsubsection.7.2.16) 106 0 R (subsubsection.7.2.17) 110 0 R (subsubsection.7.2.18) 114 0 R (subsubsection.7.2.19) 118 0 R (subsubsection.7.2.2) 50 0 R (subsubsection.7.2.20) 122 0 R (subsubsection.7.2.21) 126 0 R (subsubsection.7.2.22) 130 0 R (subsubsection.7.2.23) 134 0 R (subsubsection.7.2.24) 138 0 R (subsubsection.7.2.25) 142 0 R (subsubsection.7.2.26) 146 0 R (subsubsection.7.2.3) 54 0 R (subsubsection.7.2.4) 58 0 R (subsubsection.7.2.5) 62 0 R (subsubsection.7.2.6) 66 0 R (subsubsection.7.2.7) 70 0 R (subsubsection.7.2.8) 74 0 R (subsubsection.7.2.9) 78 0 R]
+/Limits [(Doc-Start) (subsubsection.7.2.9)]
+>> endobj
+2442 0 obj <<
+/Kids [2441 0 R]
+>> endobj
+2443 0 obj <<
+/Dests 2442 0 R
+>> endobj
+2444 0 obj <<
+/Type /Catalog
+/Pages 2439 0 R
+/Outlines 2440 0 R
+/Names 2443 0 R
+ /PageMode /UseOutlines /URI << /Base () >> /ViewerPreferences << >>
+/OpenAction 549 0 R
+>> endobj
+2445 0 obj <<
+/Producer (pdfTeX-0.14h)
+ /Author () /Title () /Subject () /Creator (LaTeX with hyperref package) /Producer (pdfTeX14.h) /Keywords ()
+/Creator (TeX)
+/CreationDate (D:20010803094700)
+>> endobj
+xref
+0 2446
+0000000001 65535 f
+0000000002 00000 f
+0000000003 00000 f
+0000000004 00000 f
+0000000555 00000 f
+0000000009 00000 n
+0000045152 00000 n
+0000550148 00000 n
+0000000054 00000 n
+0000000084 00000 n
+0000048203 00000 n
+0000550061 00000 n
+0000000129 00000 n
+0000000156 00000 n
+0000052307 00000 n
+0000549972 00000 n
+0000000202 00000 n
+0000000239 00000 n
+0000054809 00000 n
+0000549883 00000 n
+0000000285 00000 n
+0000000348 00000 n
+0000058307 00000 n
+0000549757 00000 n
+0000000394 00000 n
+0000000439 00000 n
+0000058368 00000 n
+0000549696 00000 n
+0000000490 00000 n
+0000000533 00000 n
+0000058429 00000 n
+0000549607 00000 n
+0000000579 00000 n
+0000000628 00000 n
+0000060648 00000 n
+0000549479 00000 n
+0000000674 00000 n
+0000000700 00000 n
+0000060709 00000 n
+0000549405 00000 n
+0000000751 00000 n
+0000000801 00000 n
+0000067670 00000 n
+0000549278 00000 n
+0000000852 00000 n
+0000000886 00000 n
+0000067731 00000 n
+0000549204 00000 n
+0000000942 00000 n
+0000000987 00000 n
+0000067792 00000 n
+0000549117 00000 n
+0000001043 00000 n
+0000001076 00000 n
+0000069476 00000 n
+0000549030 00000 n
+0000001132 00000 n
+0000001176 00000 n
+0000069537 00000 n
+0000548943 00000 n
+0000001232 00000 n
+0000001301 00000 n
+0000069598 00000 n
+0000548856 00000 n
+0000001357 00000 n
+0000001400 00000 n
+0000069659 00000 n
+0000548769 00000 n
+0000001456 00000 n
+0000001491 00000 n
+0000071684 00000 n
+0000548682 00000 n
+0000001547 00000 n
+0000001575 00000 n
+0000071745 00000 n
+0000548595 00000 n
+0000001631 00000 n
+0000001660 00000 n
+0000071806 00000 n
+0000548508 00000 n
+0000001716 00000 n
+0000001743 00000 n
+0000073964 00000 n
+0000548421 00000 n
+0000001800 00000 n
+0000001828 00000 n
+0000074025 00000 n
+0000548334 00000 n
+0000001885 00000 n
+0000001918 00000 n
+0000074086 00000 n
+0000548247 00000 n
+0000001975 00000 n
+0000002002 00000 n
+0000074147 00000 n
+0000548160 00000 n
+0000002059 00000 n
+0000002092 00000 n
+0000074208 00000 n
+0000548071 00000 n
+0000002149 00000 n
+0000002189 00000 n
+0000076555 00000 n
+0000547980 00000 n
+0000002247 00000 n
+0000002287 00000 n
+0000078552 00000 n
+0000547888 00000 n
+0000002345 00000 n
+0000002392 00000 n
+0000078614 00000 n
+0000547796 00000 n
+0000002450 00000 n
+0000002482 00000 n
+0000078676 00000 n
+0000547704 00000 n
+0000002540 00000 n
+0000002571 00000 n
+0000078737 00000 n
+0000547612 00000 n
+0000002629 00000 n
+0000002664 00000 n
+0000078799 00000 n
+0000547520 00000 n
+0000002722 00000 n
+0000002750 00000 n
+0000078861 00000 n
+0000547428 00000 n
+0000002808 00000 n
+0000002840 00000 n
+0000081018 00000 n
+0000547336 00000 n
+0000002898 00000 n
+0000002934 00000 n
+0000081080 00000 n
+0000547244 00000 n
+0000002992 00000 n
+0000003033 00000 n
+0000081142 00000 n
+0000547152 00000 n
+0000003091 00000 n
+0000003136 00000 n
+0000085258 00000 n
+0000547060 00000 n
+0000003194 00000 n
+0000003255 00000 n
+0000087562 00000 n
+0000546982 00000 n
+0000003313 00000 n
+0000003350 00000 n
+0000087624 00000 n
+0000546891 00000 n
+0000003402 00000 n
+0000003460 00000 n
+0000090239 00000 n
+0000546799 00000 n
+0000003512 00000 n
+0000003559 00000 n
+0000090301 00000 n
+0000546707 00000 n
+0000003611 00000 n
+0000003674 00000 n
+0000090363 00000 n
+0000546615 00000 n
+0000003726 00000 n
+0000003760 00000 n
+0000092594 00000 n
+0000546523 00000 n
+0000003812 00000 n
+0000003854 00000 n
+0000092656 00000 n
+0000546445 00000 n
+0000003906 00000 n
+0000003941 00000 n
+0000092718 00000 n
+0000546352 00000 n
+0000003988 00000 n
+0000004041 00000 n
+0000096572 00000 n
+0000546258 00000 n
+0000004088 00000 n
+0000004125 00000 n
+0000098168 00000 n
+0000546164 00000 n
+0000004173 00000 n
+0000004214 00000 n
+0000098230 00000 n
+0000546070 00000 n
+0000004262 00000 n
+0000004316 00000 n
+0000100994 00000 n
+0000545936 00000 n
+0000004364 00000 n
+0000004396 00000 n
+0000101056 00000 n
+0000545857 00000 n
+0000004449 00000 n
+0000004486 00000 n
+0000103889 00000 n
+0000545725 00000 n
+0000004539 00000 n
+0000004604 00000 n
+0000103951 00000 n
+0000545646 00000 n
+0000004662 00000 n
+0000004718 00000 n
+0000108400 00000 n
+0000545553 00000 n
+0000004776 00000 n
+0000004820 00000 n
+0000120184 00000 n
+0000545460 00000 n
+0000004878 00000 n
+0000004932 00000 n
+0000122491 00000 n
+0000545381 00000 n
+0000004990 00000 n
+0000005063 00000 n
+0000129113 00000 n
+0000545288 00000 n
+0000005116 00000 n
+0000005156 00000 n
+0000129175 00000 n
+0000545195 00000 n
+0000005209 00000 n
+0000005267 00000 n
+0000131471 00000 n
+0000545102 00000 n
+0000005320 00000 n
+0000005356 00000 n
+0000131533 00000 n
+0000545009 00000 n
+0000005409 00000 n
+0000005450 00000 n
+0000131595 00000 n
+0000544916 00000 n
+0000005503 00000 n
+0000005528 00000 n
+0000131657 00000 n
+0000544823 00000 n
+0000005581 00000 n
+0000005625 00000 n
+0000137732 00000 n
+0000544691 00000 n
+0000005678 00000 n
+0000005724 00000 n
+0000141843 00000 n
+0000544612 00000 n
+0000005782 00000 n
+0000005854 00000 n
+0000152949 00000 n
+0000544533 00000 n
+0000005912 00000 n
+0000005980 00000 n
+0000164558 00000 n
+0000544454 00000 n
+0000006034 00000 n
+0000006091 00000 n
+0000164620 00000 n
+0000544321 00000 n
+0000006139 00000 n
+0000006163 00000 n
+0000164682 00000 n
+0000544242 00000 n
+0000006216 00000 n
+0000006244 00000 n
+0000166381 00000 n
+0000544149 00000 n
+0000006297 00000 n
+0000006333 00000 n
+0000166443 00000 n
+0000544056 00000 n
+0000006386 00000 n
+0000006423 00000 n
+0000168195 00000 n
+0000543924 00000 n
+0000006476 00000 n
+0000006515 00000 n
+0000168257 00000 n
+0000543845 00000 n
+0000006573 00000 n
+0000006623 00000 n
+0000168318 00000 n
+0000543752 00000 n
+0000006681 00000 n
+0000006732 00000 n
+0000170026 00000 n
+0000543659 00000 n
+0000006790 00000 n
+0000006821 00000 n
+0000170088 00000 n
+0000543566 00000 n
+0000006879 00000 n
+0000006912 00000 n
+0000171351 00000 n
+0000543487 00000 n
+0000006970 00000 n
+0000007001 00000 n
+0000171413 00000 n
+0000543394 00000 n
+0000007054 00000 n
+0000007078 00000 n
+0000173284 00000 n
+0000543301 00000 n
+0000007131 00000 n
+0000007179 00000 n
+0000173346 00000 n
+0000543208 00000 n
+0000007232 00000 n
+0000007267 00000 n
+0000173408 00000 n
+0000543076 00000 n
+0000007320 00000 n
+0000007347 00000 n
+0000175258 00000 n
+0000543011 00000 n
+0000007405 00000 n
+0000007448 00000 n
+0000177807 00000 n
+0000542893 00000 n
+0000007501 00000 n
+0000007527 00000 n
+0000179682 00000 n
+0000542828 00000 n
+0000007585 00000 n
+0000007627 00000 n
+0000181404 00000 n
+0000542734 00000 n
+0000007675 00000 n
+0000007702 00000 n
+0000184504 00000 n
+0000542601 00000 n
+0000007750 00000 n
+0000007783 00000 n
+0000184567 00000 n
+0000542497 00000 n
+0000007836 00000 n
+0000007889 00000 n
+0000184630 00000 n
+0000542418 00000 n
+0000007947 00000 n
+0000007979 00000 n
+0000196723 00000 n
+0000542339 00000 n
+0000008037 00000 n
+0000008084 00000 n
+0000204165 00000 n
+0000542245 00000 n
+0000008132 00000 n
+0000008165 00000 n
+0000205704 00000 n
+0000542151 00000 n
+0000008213 00000 n
+0000008242 00000 n
+0000205767 00000 n
+0000542018 00000 n
+0000008290 00000 n
+0000008332 00000 n
+0000205830 00000 n
+0000541939 00000 n
+0000008385 00000 n
+0000008426 00000 n
+0000207936 00000 n
+0000541846 00000 n
+0000008479 00000 n
+0000008527 00000 n
+0000207999 00000 n
+0000541767 00000 n
+0000008580 00000 n
+0000008625 00000 n
+0000211869 00000 n
+0000541673 00000 n
+0000008673 00000 n
+0000008710 00000 n
+0000211932 00000 n
+0000541579 00000 n
+0000008758 00000 n
+0000008800 00000 n
+0000215805 00000 n
+0000541485 00000 n
+0000008848 00000 n
+0000008883 00000 n
+0000220512 00000 n
+0000541352 00000 n
+0000008931 00000 n
+0000008981 00000 n
+0000220575 00000 n
+0000541273 00000 n
+0000009034 00000 n
+0000009071 00000 n
+0000220638 00000 n
+0000541180 00000 n
+0000009124 00000 n
+0000009160 00000 n
+0000222734 00000 n
+0000541101 00000 n
+0000009213 00000 n
+0000009268 00000 n
+0000222797 00000 n
+0000541007 00000 n
+0000009316 00000 n
+0000009363 00000 n
+0000228507 00000 n
+0000540913 00000 n
+0000009411 00000 n
+0000009469 00000 n
+0000232414 00000 n
+0000540819 00000 n
+0000009517 00000 n
+0000009575 00000 n
+0000233898 00000 n
+0000540725 00000 n
+0000009623 00000 n
+0000009681 00000 n
+0000236550 00000 n
+0000540631 00000 n
+0000009729 00000 n
+0000009764 00000 n
+0000237979 00000 n
+0000540498 00000 n
+0000009812 00000 n
+0000009868 00000 n
+0000240380 00000 n
+0000540419 00000 n
+0000009921 00000 n
+0000009973 00000 n
+0000240443 00000 n
+0000540326 00000 n
+0000010026 00000 n
+0000010059 00000 n
+0000242422 00000 n
+0000540193 00000 n
+0000010112 00000 n
+0000010141 00000 n
+0000242485 00000 n
+0000540114 00000 n
+0000010199 00000 n
+0000010230 00000 n
+0000249797 00000 n
+0000540021 00000 n
+0000010288 00000 n
+0000010321 00000 n
+0000250968 00000 n
+0000539928 00000 n
+0000010379 00000 n
+0000010410 00000 n
+0000254090 00000 n
+0000539835 00000 n
+0000010468 00000 n
+0000010505 00000 n
+0000256074 00000 n
+0000539742 00000 n
+0000010563 00000 n
+0000010604 00000 n
+0000256137 00000 n
+0000539649 00000 n
+0000010662 00000 n
+0000010703 00000 n
+0000256200 00000 n
+0000539556 00000 n
+0000010761 00000 n
+0000010800 00000 n
+0000258825 00000 n
+0000539463 00000 n
+0000010858 00000 n
+0000010886 00000 n
+0000258888 00000 n
+0000539370 00000 n
+0000010944 00000 n
+0000010976 00000 n
+0000268846 00000 n
+0000539291 00000 n
+0000011035 00000 n
+0000011060 00000 n
+0000268909 00000 n
+0000539159 00000 n
+0000011113 00000 n
+0000011154 00000 n
+0000271066 00000 n
+0000539080 00000 n
+0000011212 00000 n
+0000011235 00000 n
+0000271129 00000 n
+0000538987 00000 n
+0000011293 00000 n
+0000011316 00000 n
+0000271192 00000 n
+0000538894 00000 n
+0000011374 00000 n
+0000011397 00000 n
+0000271255 00000 n
+0000538801 00000 n
+0000011455 00000 n
+0000011478 00000 n
+0000271318 00000 n
+0000538708 00000 n
+0000011536 00000 n
+0000011559 00000 n
+0000271381 00000 n
+0000538615 00000 n
+0000011617 00000 n
+0000011640 00000 n
+0000275429 00000 n
+0000538522 00000 n
+0000011698 00000 n
+0000011724 00000 n
+0000275492 00000 n
+0000538443 00000 n
+0000011782 00000 n
+0000011805 00000 n
+0000275555 00000 n
+0000538364 00000 n
+0000011858 00000 n
+0000011900 00000 n
+0000278026 00000 n
+0000538231 00000 n
+0000011948 00000 n
+0000012008 00000 n
+0000278089 00000 n
+0000538166 00000 n
+0000012061 00000 n
+0000012092 00000 n
+0000282050 00000 n
+0000538033 00000 n
+0000012140 00000 n
+0000012161 00000 n
+0000282113 00000 n
+0000537954 00000 n
+0000012214 00000 n
+0000012246 00000 n
+0000284089 00000 n
+0000537861 00000 n
+0000012299 00000 n
+0000012329 00000 n
+0000286202 00000 n
+0000537768 00000 n
+0000012382 00000 n
+0000012437 00000 n
+0000286265 00000 n
+0000537675 00000 n
+0000012490 00000 n
+0000012536 00000 n
+0000298408 00000 n
+0000537596 00000 n
+0000012589 00000 n
+0000012626 00000 n
+0000313184 00000 n
+0000537516 00000 n
+0000012674 00000 n
+0000012699 00000 n
+0000014715 00000 n
+0000019166 00000 n
+0000012751 00000 n
+0000018980 00000 n
+0000019042 00000 n
+0000000557 00000 f
+0000533658 00000 n
+0000000559 00000 f
+0000533569 00000 n
+0000000562 00000 f
+0000533500 00000 n
+0000015038 00000 n
+0000000570 00000 f
+0000533408 00000 n
+0000019104 00000 n
+0000015232 00000 n
+0000015388 00000 n
+0000015545 00000 n
+0000015702 00000 n
+0000015859 00000 n
+0000000749 00000 f
+0000533314 00000 n
+0000016011 00000 n
+0000016173 00000 n
+0000016330 00000 n
+0000016486 00000 n
+0000016647 00000 n
+0000016809 00000 n
+0000016976 00000 n
+0000017142 00000 n
+0000017309 00000 n
+0000017475 00000 n
+0000017642 00000 n
+0000017809 00000 n
+0000017976 00000 n
+0000018143 00000 n
+0000018310 00000 n
+0000018478 00000 n
+0000018646 00000 n
+0000018814 00000 n
+0000533751 00000 n
+0000028384 00000 n
+0000021299 00000 n
+0000019290 00000 n
+0000028322 00000 n
+0000021750 00000 n
+0000021917 00000 n
+0000022085 00000 n
+0000022253 00000 n
+0000022420 00000 n
+0000022588 00000 n
+0000022756 00000 n
+0000022924 00000 n
+0000023092 00000 n
+0000023260 00000 n
+0000023428 00000 n
+0000023596 00000 n
+0000023764 00000 n
+0000023932 00000 n
+0000024094 00000 n
+0000024256 00000 n
+0000024418 00000 n
+0000024580 00000 n
+0000024742 00000 n
+0000024904 00000 n
+0000025061 00000 n
+0000025218 00000 n
+0000025376 00000 n
+0000025533 00000 n
+0000025691 00000 n
+0000025854 00000 n
+0000026017 00000 n
+0000026185 00000 n
+0000026352 00000 n
+0000026520 00000 n
+0000026688 00000 n
+0000026851 00000 n
+0000027014 00000 n
+0000027176 00000 n
+0000027339 00000 n
+0000027502 00000 n
+0000027665 00000 n
+0000027823 00000 n
+0000027991 00000 n
+0000028158 00000 n
+0000037213 00000 n
+0000030381 00000 n
+0000028482 00000 n
+0000037151 00000 n
+0000030824 00000 n
+0000030982 00000 n
+0000031145 00000 n
+0000031308 00000 n
+0000031471 00000 n
+0000031634 00000 n
+0000031802 00000 n
+0000031970 00000 n
+0000032137 00000 n
+0000032305 00000 n
+0000032473 00000 n
+0000032636 00000 n
+0000032799 00000 n
+0000032962 00000 n
+0000033125 00000 n
+0000033293 00000 n
+0000033456 00000 n
+0000033624 00000 n
+0000033782 00000 n
+0000033940 00000 n
+0000034103 00000 n
+0000034271 00000 n
+0000034439 00000 n
+0000034597 00000 n
+0000034754 00000 n
+0000034912 00000 n
+0000035075 00000 n
+0000035238 00000 n
+0000035401 00000 n
+0000035559 00000 n
+0000035717 00000 n
+0000035875 00000 n
+0000036033 00000 n
+0000036195 00000 n
+0000036358 00000 n
+0000036520 00000 n
+0000036678 00000 n
+0000036835 00000 n
+0000036993 00000 n
+0000045212 00000 n
+0000039094 00000 n
+0000037324 00000 n
+0000045090 00000 n
+0000039497 00000 n
+0000039655 00000 n
+0000039813 00000 n
+0000039976 00000 n
+0000040138 00000 n
+0000040301 00000 n
+0000040468 00000 n
+0000040634 00000 n
+0000040802 00000 n
+0000040970 00000 n
+0000041137 00000 n
+0000041301 00000 n
+0000041468 00000 n
+0000041636 00000 n
+0000041803 00000 n
+0000041972 00000 n
+0000042134 00000 n
+0000042302 00000 n
+0000042470 00000 n
+0000042638 00000 n
+0000042806 00000 n
+0000042974 00000 n
+0000043142 00000 n
+0000043310 00000 n
+0000043478 00000 n
+0000043640 00000 n
+0000043798 00000 n
+0000043960 00000 n
+0000044118 00000 n
+0000044281 00000 n
+0000044444 00000 n
+0000044607 00000 n
+0000044770 00000 n
+0000044932 00000 n
+0000048884 00000 n
+0000048022 00000 n
+0000045323 00000 n
+0000048141 00000 n
+0000048264 00000 n
+0000048326 00000 n
+0000048388 00000 n
+0000048450 00000 n
+0000048512 00000 n
+0000048574 00000 n
+0000048636 00000 n
+0000048698 00000 n
+0000048760 00000 n
+0000048822 00000 n
+0000052368 00000 n
+0000051445 00000 n
+0000048995 00000 n
+0000051564 00000 n
+0000051626 00000 n
+0000051688 00000 n
+0000051750 00000 n
+0000051812 00000 n
+0000051874 00000 n
+0000051936 00000 n
+0000051998 00000 n
+0000052060 00000 n
+0000052122 00000 n
+0000052184 00000 n
+0000052246 00000 n
+0000054870 00000 n
+0000054628 00000 n
+0000052466 00000 n
+0000054747 00000 n
+0000000751 00000 f
+0000533220 00000 n
+0000000000 00000 f
+0000533123 00000 n
+0000533869 00000 n
+0000058489 00000 n
+0000057164 00000 n
+0000054996 00000 n
+0000058245 00000 n
+0000057327 00000 n
+0000057565 00000 n
+0000057804 00000 n
+0000058024 00000 n
+0000060770 00000 n
+0000060467 00000 n
+0000058600 00000 n
+0000060586 00000 n
+0000062992 00000 n
+0000062811 00000 n
+0000060868 00000 n
+0000062930 00000 n
+0000065729 00000 n
+0000065548 00000 n
+0000063091 00000 n
+0000065667 00000 n
+0000067852 00000 n
+0000067489 00000 n
+0000065814 00000 n
+0000067608 00000 n
+0000069720 00000 n
+0000069295 00000 n
+0000067950 00000 n
+0000069414 00000 n
+0000533987 00000 n
+0000071867 00000 n
+0000071503 00000 n
+0000069818 00000 n
+0000071622 00000 n
+0000074269 00000 n
+0000073783 00000 n
+0000071965 00000 n
+0000073902 00000 n
+0000076617 00000 n
+0000076374 00000 n
+0000074381 00000 n
+0000076493 00000 n
+0000078923 00000 n
+0000078189 00000 n
+0000076715 00000 n
+0000078490 00000 n
+0000078328 00000 n
+0000081204 00000 n
+0000080837 00000 n
+0000079021 00000 n
+0000080956 00000 n
+0000083333 00000 n
+0000083152 00000 n
+0000081302 00000 n
+0000083271 00000 n
+0000534105 00000 n
+0000085320 00000 n
+0000085077 00000 n
+0000083418 00000 n
+0000085196 00000 n
+0000087686 00000 n
+0000087381 00000 n
+0000085418 00000 n
+0000087500 00000 n
+0000090425 00000 n
+0000090058 00000 n
+0000087784 00000 n
+0000090177 00000 n
+0000092780 00000 n
+0000092413 00000 n
+0000090523 00000 n
+0000092532 00000 n
+0000094193 00000 n
+0000094012 00000 n
+0000092878 00000 n
+0000094131 00000 n
+0000096634 00000 n
+0000095952 00000 n
+0000094278 00000 n
+0000096510 00000 n
+0000096099 00000 n
+0000096303 00000 n
+0000534223 00000 n
+0000098292 00000 n
+0000097987 00000 n
+0000096732 00000 n
+0000098106 00000 n
+0000101118 00000 n
+0000100813 00000 n
+0000098418 00000 n
+0000100932 00000 n
+0000104013 00000 n
+0000103708 00000 n
+0000101230 00000 n
+0000103827 00000 n
+0000105952 00000 n
+0000105771 00000 n
+0000104125 00000 n
+0000105890 00000 n
+0000108462 00000 n
+0000108219 00000 n
+0000106037 00000 n
+0000108338 00000 n
+0000110702 00000 n
+0000110521 00000 n
+0000108560 00000 n
+0000110640 00000 n
+0000534341 00000 n
+0000112985 00000 n
+0000112804 00000 n
+0000110801 00000 n
+0000112923 00000 n
+0000115160 00000 n
+0000114979 00000 n
+0000113070 00000 n
+0000115098 00000 n
+0000117927 00000 n
+0000117560 00000 n
+0000115259 00000 n
+0000117679 00000 n
+0000117741 00000 n
+0000117803 00000 n
+0000117865 00000 n
+0000120246 00000 n
+0000120003 00000 n
+0000118012 00000 n
+0000120122 00000 n
+0000122553 00000 n
+0000122310 00000 n
+0000120344 00000 n
+0000122429 00000 n
+0000124911 00000 n
+0000124730 00000 n
+0000122651 00000 n
+0000124849 00000 n
+0000534459 00000 n
+0000127234 00000 n
+0000127053 00000 n
+0000124996 00000 n
+0000127172 00000 n
+0000129237 00000 n
+0000128932 00000 n
+0000127319 00000 n
+0000129051 00000 n
+0000131719 00000 n
+0000131290 00000 n
+0000129348 00000 n
+0000131409 00000 n
+0000133730 00000 n
+0000133549 00000 n
+0000131844 00000 n
+0000133668 00000 n
+0000135966 00000 n
+0000135785 00000 n
+0000133815 00000 n
+0000135904 00000 n
+0000137794 00000 n
+0000137551 00000 n
+0000136051 00000 n
+0000137670 00000 n
+0000534577 00000 n
+0000139509 00000 n
+0000139328 00000 n
+0000137905 00000 n
+0000139447 00000 n
+0000141905 00000 n
+0000141662 00000 n
+0000139594 00000 n
+0000141781 00000 n
+0000144159 00000 n
+0000143978 00000 n
+0000142003 00000 n
+0000144097 00000 n
+0000146555 00000 n
+0000146374 00000 n
+0000144244 00000 n
+0000146493 00000 n
+0000148596 00000 n
+0000148415 00000 n
+0000146640 00000 n
+0000148534 00000 n
+0000150166 00000 n
+0000149985 00000 n
+0000148695 00000 n
+0000150104 00000 n
+0000534695 00000 n
+0000153011 00000 n
+0000152768 00000 n
+0000150251 00000 n
+0000152887 00000 n
+0000154715 00000 n
+0000154534 00000 n
+0000153123 00000 n
+0000154653 00000 n
+0000156995 00000 n
+0000156814 00000 n
+0000154800 00000 n
+0000156933 00000 n
+0000158748 00000 n
+0000158567 00000 n
+0000157094 00000 n
+0000158686 00000 n
+0000160788 00000 n
+0000160607 00000 n
+0000158833 00000 n
+0000160726 00000 n
+0000162771 00000 n
+0000162590 00000 n
+0000160873 00000 n
+0000162709 00000 n
+0000534813 00000 n
+0000164744 00000 n
+0000164377 00000 n
+0000162856 00000 n
+0000164496 00000 n
+0000166505 00000 n
+0000166200 00000 n
+0000164842 00000 n
+0000166319 00000 n
+0000168380 00000 n
+0000168014 00000 n
+0000166603 00000 n
+0000168133 00000 n
+0000170150 00000 n
+0000169845 00000 n
+0000168478 00000 n
+0000169964 00000 n
+0000171475 00000 n
+0000171170 00000 n
+0000170248 00000 n
+0000171289 00000 n
+0000173470 00000 n
+0000173103 00000 n
+0000171573 00000 n
+0000173222 00000 n
+0000534931 00000 n
+0000175320 00000 n
+0000175077 00000 n
+0000173582 00000 n
+0000175196 00000 n
+0000177869 00000 n
+0000177626 00000 n
+0000175431 00000 n
+0000177745 00000 n
+0000179743 00000 n
+0000179500 00000 n
+0000177967 00000 n
+0000179619 00000 n
+0000181467 00000 n
+0000181218 00000 n
+0000179854 00000 n
+0000181340 00000 n
+0000184693 00000 n
+0000183848 00000 n
+0000181566 00000 n
+0000184440 00000 n
+0000184000 00000 n
+0000184220 00000 n
+0000187732 00000 n
+0000187545 00000 n
+0000184792 00000 n
+0000187668 00000 n
+0000535051 00000 n
+0000189666 00000 n
+0000189479 00000 n
+0000187832 00000 n
+0000189602 00000 n
+0000192314 00000 n
+0000192127 00000 n
+0000189752 00000 n
+0000192250 00000 n
+0000194781 00000 n
+0000194594 00000 n
+0000192400 00000 n
+0000194717 00000 n
+0000196785 00000 n
+0000196536 00000 n
+0000194881 00000 n
+0000196659 00000 n
+0000198419 00000 n
+0000198232 00000 n
+0000196897 00000 n
+0000198355 00000 n
+0000200031 00000 n
+0000199844 00000 n
+0000198505 00000 n
+0000199967 00000 n
+0000535176 00000 n
+0000202185 00000 n
+0000201998 00000 n
+0000200117 00000 n
+0000202121 00000 n
+0000204228 00000 n
+0000203978 00000 n
+0000202271 00000 n
+0000204101 00000 n
+0000205893 00000 n
+0000205517 00000 n
+0000204341 00000 n
+0000205640 00000 n
+0000208062 00000 n
+0000207749 00000 n
+0000206005 00000 n
+0000207872 00000 n
+0000209590 00000 n
+0000209403 00000 n
+0000208174 00000 n
+0000209526 00000 n
+0000211995 00000 n
+0000211682 00000 n
+0000209676 00000 n
+0000211805 00000 n
+0000535301 00000 n
+0000214030 00000 n
+0000213843 00000 n
+0000212094 00000 n
+0000213966 00000 n
+0000215868 00000 n
+0000215618 00000 n
+0000214116 00000 n
+0000215741 00000 n
+0000217614 00000 n
+0000217427 00000 n
+0000215981 00000 n
+0000217550 00000 n
+0000220701 00000 n
+0000220325 00000 n
+0000217700 00000 n
+0000220448 00000 n
+0000222860 00000 n
+0000222547 00000 n
+0000220827 00000 n
+0000222670 00000 n
+0000225072 00000 n
+0000224885 00000 n
+0000222986 00000 n
+0000225008 00000 n
+0000535426 00000 n
+0000226836 00000 n
+0000226649 00000 n
+0000225158 00000 n
+0000226772 00000 n
+0000228570 00000 n
+0000228320 00000 n
+0000226922 00000 n
+0000228443 00000 n
+0000229843 00000 n
+0000229656 00000 n
+0000228682 00000 n
+0000229779 00000 n
+0000231137 00000 n
+0000230950 00000 n
+0000229929 00000 n
+0000231073 00000 n
+0000232477 00000 n
+0000232227 00000 n
+0000231223 00000 n
+0000232350 00000 n
+0000233961 00000 n
+0000233711 00000 n
+0000232589 00000 n
+0000233834 00000 n
+0000535551 00000 n
+0000235250 00000 n
+0000235063 00000 n
+0000234073 00000 n
+0000235186 00000 n
+0000236613 00000 n
+0000236363 00000 n
+0000235336 00000 n
+0000236486 00000 n
+0000238042 00000 n
+0000237792 00000 n
+0000236712 00000 n
+0000237915 00000 n
+0000240506 00000 n
+0000240193 00000 n
+0000238154 00000 n
+0000240316 00000 n
+0000242548 00000 n
+0000242235 00000 n
+0000240605 00000 n
+0000242358 00000 n
+0000244388 00000 n
+0000244201 00000 n
+0000242647 00000 n
+0000244324 00000 n
+0000535676 00000 n
+0000246037 00000 n
+0000245850 00000 n
+0000244474 00000 n
+0000245973 00000 n
+0000247890 00000 n
+0000247703 00000 n
+0000246123 00000 n
+0000247826 00000 n
+0000249860 00000 n
+0000249610 00000 n
+0000247976 00000 n
+0000249733 00000 n
+0000251031 00000 n
+0000250781 00000 n
+0000249973 00000 n
+0000250904 00000 n
+0000252527 00000 n
+0000252340 00000 n
+0000251130 00000 n
+0000252463 00000 n
+0000254153 00000 n
+0000253903 00000 n
+0000252613 00000 n
+0000254026 00000 n
+0000535801 00000 n
+0000256263 00000 n
+0000255887 00000 n
+0000254252 00000 n
+0000256010 00000 n
+0000259462 00000 n
+0000258638 00000 n
+0000256362 00000 n
+0000258761 00000 n
+0000258951 00000 n
+0000259015 00000 n
+0000259079 00000 n
+0000259142 00000 n
+0000259206 00000 n
+0000259270 00000 n
+0000259334 00000 n
+0000259398 00000 n
+0000263032 00000 n
+0000261183 00000 n
+0000259561 00000 n
+0000261306 00000 n
+0000261370 00000 n
+0000261434 00000 n
+0000261498 00000 n
+0000261562 00000 n
+0000261626 00000 n
+0000261690 00000 n
+0000261754 00000 n
+0000261818 00000 n
+0000261882 00000 n
+0000261945 00000 n
+0000262009 00000 n
+0000262073 00000 n
+0000262137 00000 n
+0000262201 00000 n
+0000262265 00000 n
+0000262329 00000 n
+0000262393 00000 n
+0000262457 00000 n
+0000262521 00000 n
+0000262585 00000 n
+0000262649 00000 n
+0000262713 00000 n
+0000262777 00000 n
+0000262841 00000 n
+0000262905 00000 n
+0000262969 00000 n
+0000264968 00000 n
+0000264781 00000 n
+0000263118 00000 n
+0000264904 00000 n
+0000267238 00000 n
+0000266866 00000 n
+0000265054 00000 n
+0000267174 00000 n
+0000267010 00000 n
+0000268972 00000 n
+0000268659 00000 n
+0000267324 00000 n
+0000268782 00000 n
+0000535926 00000 n
+0000271444 00000 n
+0000270700 00000 n
+0000269071 00000 n
+0000271002 00000 n
+0000270844 00000 n
+0000273478 00000 n
+0000273291 00000 n
+0000271556 00000 n
+0000273414 00000 n
+0000275618 00000 n
+0000275242 00000 n
+0000273564 00000 n
+0000275365 00000 n
+0000278152 00000 n
+0000277839 00000 n
+0000275730 00000 n
+0000277962 00000 n
+0000280303 00000 n
+0000280116 00000 n
+0000278264 00000 n
+0000280239 00000 n
+0000282176 00000 n
+0000281863 00000 n
+0000280389 00000 n
+0000281986 00000 n
+0000536051 00000 n
+0000284152 00000 n
+0000283902 00000 n
+0000282275 00000 n
+0000284025 00000 n
+0000286328 00000 n
+0000286015 00000 n
+0000284265 00000 n
+0000286138 00000 n
+0000290123 00000 n
+0000288466 00000 n
+0000286427 00000 n
+0000288589 00000 n
+0000288653 00000 n
+0000288717 00000 n
+0000288781 00000 n
+0000288845 00000 n
+0000288909 00000 n
+0000288973 00000 n
+0000289037 00000 n
+0000289101 00000 n
+0000289165 00000 n
+0000289229 00000 n
+0000289293 00000 n
+0000289357 00000 n
+0000289421 00000 n
+0000289485 00000 n
+0000289549 00000 n
+0000289613 00000 n
+0000289677 00000 n
+0000289741 00000 n
+0000289805 00000 n
+0000289869 00000 n
+0000289933 00000 n
+0000289997 00000 n
+0000290059 00000 n
+0000293500 00000 n
+0000291974 00000 n
+0000290209 00000 n
+0000292097 00000 n
+0000292161 00000 n
+0000292225 00000 n
+0000292288 00000 n
+0000292352 00000 n
+0000292416 00000 n
+0000292480 00000 n
+0000292544 00000 n
+0000292608 00000 n
+0000292672 00000 n
+0000292736 00000 n
+0000292800 00000 n
+0000292864 00000 n
+0000292927 00000 n
+0000292991 00000 n
+0000293055 00000 n
+0000293119 00000 n
+0000293182 00000 n
+0000293245 00000 n
+0000293308 00000 n
+0000293372 00000 n
+0000293436 00000 n
+0000295589 00000 n
+0000295402 00000 n
+0000293586 00000 n
+0000295525 00000 n
+0000298471 00000 n
+0000298221 00000 n
+0000295675 00000 n
+0000298344 00000 n
+0000536176 00000 n
+0000299604 00000 n
+0000299417 00000 n
+0000298570 00000 n
+0000299540 00000 n
+0000313247 00000 n
+0000302268 00000 n
+0000299690 00000 n
+0000313120 00000 n
+0000302988 00000 n
+0000303143 00000 n
+0000303299 00000 n
+0000303454 00000 n
+0000303611 00000 n
+0000303768 00000 n
+0000303925 00000 n
+0000304080 00000 n
+0000304237 00000 n
+0000304392 00000 n
+0000304546 00000 n
+0000304702 00000 n
+0000304858 00000 n
+0000305014 00000 n
+0000305169 00000 n
+0000305325 00000 n
+0000305481 00000 n
+0000305637 00000 n
+0000305792 00000 n
+0000305948 00000 n
+0000306104 00000 n
+0000306260 00000 n
+0000306416 00000 n
+0000306572 00000 n
+0000306728 00000 n
+0000306883 00000 n
+0000307039 00000 n
+0000307195 00000 n
+0000307351 00000 n
+0000307507 00000 n
+0000307663 00000 n
+0000307819 00000 n
+0000307975 00000 n
+0000308131 00000 n
+0000308287 00000 n
+0000308443 00000 n
+0000308599 00000 n
+0000308755 00000 n
+0000308911 00000 n
+0000309067 00000 n
+0000309223 00000 n
+0000309379 00000 n
+0000309535 00000 n
+0000309691 00000 n
+0000309847 00000 n
+0000310003 00000 n
+0000310159 00000 n
+0000310315 00000 n
+0000310471 00000 n
+0000310627 00000 n
+0000310783 00000 n
+0000310939 00000 n
+0000311095 00000 n
+0000311251 00000 n
+0000311407 00000 n
+0000311563 00000 n
+0000311719 00000 n
+0000311874 00000 n
+0000312030 00000 n
+0000312186 00000 n
+0000312342 00000 n
+0000312498 00000 n
+0000312654 00000 n
+0000312810 00000 n
+0000312965 00000 n
+0000318505 00000 n
+0000315829 00000 n
+0000313346 00000 n
+0000318441 00000 n
+0000316099 00000 n
+0000316255 00000 n
+0000316411 00000 n
+0000316567 00000 n
+0000316723 00000 n
+0000316880 00000 n
+0000317036 00000 n
+0000317192 00000 n
+0000317348 00000 n
+0000317504 00000 n
+0000317661 00000 n
+0000317817 00000 n
+0000317973 00000 n
+0000318129 00000 n
+0000318285 00000 n
+0000322770 00000 n
+0000320923 00000 n
+0000318591 00000 n
+0000322706 00000 n
+0000321148 00000 n
+0000321304 00000 n
+0000321460 00000 n
+0000321616 00000 n
+0000321771 00000 n
+0000321926 00000 n
+0000322083 00000 n
+0000322239 00000 n
+0000322395 00000 n
+0000322551 00000 n
+0000329438 00000 n
+0000325449 00000 n
+0000322856 00000 n
+0000329374 00000 n
+0000325791 00000 n
+0000325946 00000 n
+0000326102 00000 n
+0000326256 00000 n
+0000326413 00000 n
+0000326569 00000 n
+0000326725 00000 n
+0000326881 00000 n
+0000327037 00000 n
+0000327193 00000 n
+0000327349 00000 n
+0000327505 00000 n
+0000327661 00000 n
+0000327816 00000 n
+0000327972 00000 n
+0000328128 00000 n
+0000328284 00000 n
+0000328440 00000 n
+0000328595 00000 n
+0000328751 00000 n
+0000328907 00000 n
+0000329063 00000 n
+0000329218 00000 n
+0000339135 00000 n
+0000332020 00000 n
+0000329524 00000 n
+0000339071 00000 n
+0000332533 00000 n
+0000332687 00000 n
+0000332842 00000 n
+0000332998 00000 n
+0000333152 00000 n
+0000333309 00000 n
+0000333465 00000 n
+0000333621 00000 n
+0000333777 00000 n
+0000333932 00000 n
+0000334088 00000 n
+0000334244 00000 n
+0000334400 00000 n
+0000334556 00000 n
+0000334712 00000 n
+0000334867 00000 n
+0000335023 00000 n
+0000335179 00000 n
+0000335335 00000 n
+0000335491 00000 n
+0000335647 00000 n
+0000335803 00000 n
+0000335958 00000 n
+0000336114 00000 n
+0000336270 00000 n
+0000336426 00000 n
+0000336582 00000 n
+0000336738 00000 n
+0000336894 00000 n
+0000337050 00000 n
+0000337205 00000 n
+0000337360 00000 n
+0000337514 00000 n
+0000337669 00000 n
+0000337825 00000 n
+0000337980 00000 n
+0000338136 00000 n
+0000338292 00000 n
+0000338448 00000 n
+0000338603 00000 n
+0000338759 00000 n
+0000338915 00000 n
+0000536301 00000 n
+0000350699 00000 n
+0000341783 00000 n
+0000339221 00000 n
+0000350635 00000 n
+0000342395 00000 n
+0000342551 00000 n
+0000342706 00000 n
+0000342862 00000 n
+0000343018 00000 n
+0000343173 00000 n
+0000343329 00000 n
+0000343485 00000 n
+0000343641 00000 n
+0000343797 00000 n
+0000343953 00000 n
+0000344109 00000 n
+0000344265 00000 n
+0000344419 00000 n
+0000344574 00000 n
+0000344729 00000 n
+0000344884 00000 n
+0000345039 00000 n
+0000345195 00000 n
+0000345349 00000 n
+0000345504 00000 n
+0000345659 00000 n
+0000345814 00000 n
+0000345970 00000 n
+0000346126 00000 n
+0000346281 00000 n
+0000346437 00000 n
+0000346593 00000 n
+0000346749 00000 n
+0000346905 00000 n
+0000347060 00000 n
+0000347214 00000 n
+0000347369 00000 n
+0000347524 00000 n
+0000347679 00000 n
+0000347834 00000 n
+0000347990 00000 n
+0000348146 00000 n
+0000348302 00000 n
+0000348457 00000 n
+0000348613 00000 n
+0000348769 00000 n
+0000348924 00000 n
+0000349080 00000 n
+0000349235 00000 n
+0000349391 00000 n
+0000349547 00000 n
+0000349702 00000 n
+0000349858 00000 n
+0000350014 00000 n
+0000350169 00000 n
+0000350325 00000 n
+0000350480 00000 n
+0000364431 00000 n
+0000353371 00000 n
+0000350798 00000 n
+0000364367 00000 n
+0000354100 00000 n
+0000354256 00000 n
+0000354412 00000 n
+0000354566 00000 n
+0000354720 00000 n
+0000354874 00000 n
+0000355031 00000 n
+0000355188 00000 n
+0000355342 00000 n
+0000355497 00000 n
+0000355653 00000 n
+0000355808 00000 n
+0000355965 00000 n
+0000356122 00000 n
+0000356279 00000 n
+0000356436 00000 n
+0000356591 00000 n
+0000356747 00000 n
+0000356903 00000 n
+0000357059 00000 n
+0000357215 00000 n
+0000357371 00000 n
+0000357525 00000 n
+0000357680 00000 n
+0000357835 00000 n
+0000357991 00000 n
+0000358147 00000 n
+0000358303 00000 n
+0000358459 00000 n
+0000358615 00000 n
+0000358771 00000 n
+0000358927 00000 n
+0000359083 00000 n
+0000359239 00000 n
+0000359395 00000 n
+0000359550 00000 n
+0000359705 00000 n
+0000359860 00000 n
+0000360014 00000 n
+0000360170 00000 n
+0000360324 00000 n
+0000360479 00000 n
+0000360634 00000 n
+0000360788 00000 n
+0000360942 00000 n
+0000361097 00000 n
+0000361252 00000 n
+0000361407 00000 n
+0000361562 00000 n
+0000361717 00000 n
+0000361873 00000 n
+0000362029 00000 n
+0000362185 00000 n
+0000362341 00000 n
+0000362497 00000 n
+0000362652 00000 n
+0000362808 00000 n
+0000362964 00000 n
+0000363120 00000 n
+0000363276 00000 n
+0000363431 00000 n
+0000363587 00000 n
+0000363743 00000 n
+0000363899 00000 n
+0000364055 00000 n
+0000364211 00000 n
+0000372262 00000 n
+0000366956 00000 n
+0000364530 00000 n
+0000372198 00000 n
+0000367370 00000 n
+0000367525 00000 n
+0000367681 00000 n
+0000367836 00000 n
+0000367991 00000 n
+0000368148 00000 n
+0000368303 00000 n
+0000368459 00000 n
+0000368614 00000 n
+0000368769 00000 n
+0000368925 00000 n
+0000369081 00000 n
+0000369238 00000 n
+0000369394 00000 n
+0000369549 00000 n
+0000369706 00000 n
+0000369863 00000 n
+0000370019 00000 n
+0000370175 00000 n
+0000370329 00000 n
+0000370486 00000 n
+0000370642 00000 n
+0000370798 00000 n
+0000370954 00000 n
+0000371110 00000 n
+0000371265 00000 n
+0000371420 00000 n
+0000371575 00000 n
+0000371730 00000 n
+0000371886 00000 n
+0000372042 00000 n
+0000381583 00000 n
+0000374965 00000 n
+0000372361 00000 n
+0000381519 00000 n
+0000375451 00000 n
+0000375607 00000 n
+0000375763 00000 n
+0000375919 00000 n
+0000376074 00000 n
+0000376229 00000 n
+0000376383 00000 n
+0000376537 00000 n
+0000376693 00000 n
+0000376848 00000 n
+0000377004 00000 n
+0000377160 00000 n
+0000377317 00000 n
+0000377474 00000 n
+0000377629 00000 n
+0000377785 00000 n
+0000377941 00000 n
+0000378097 00000 n
+0000378252 00000 n
+0000378407 00000 n
+0000378563 00000 n
+0000378719 00000 n
+0000378874 00000 n
+0000379030 00000 n
+0000379185 00000 n
+0000379340 00000 n
+0000379496 00000 n
+0000379652 00000 n
+0000379808 00000 n
+0000379963 00000 n
+0000380118 00000 n
+0000380274 00000 n
+0000380430 00000 n
+0000380586 00000 n
+0000380740 00000 n
+0000380895 00000 n
+0000381051 00000 n
+0000381207 00000 n
+0000381363 00000 n
+0000399935 00000 n
+0000384276 00000 n
+0000381683 00000 n
+0000399871 00000 n
+0000385257 00000 n
+0000385413 00000 n
+0000385569 00000 n
+0000385724 00000 n
+0000385879 00000 n
+0000386034 00000 n
+0000386189 00000 n
+0000386346 00000 n
+0000386501 00000 n
+0000386657 00000 n
+0000386813 00000 n
+0000386969 00000 n
+0000387125 00000 n
+0000387281 00000 n
+0000387437 00000 n
+0000387593 00000 n
+0000387749 00000 n
+0000387905 00000 n
+0000388061 00000 n
+0000388217 00000 n
+0000388372 00000 n
+0000388527 00000 n
+0000388683 00000 n
+0000388839 00000 n
+0000388994 00000 n
+0000389150 00000 n
+0000389305 00000 n
+0000389461 00000 n
+0000389617 00000 n
+0000389771 00000 n
+0000389925 00000 n
+0000390080 00000 n
+0000390235 00000 n
+0000390390 00000 n
+0000390545 00000 n
+0000390699 00000 n
+0000390854 00000 n
+0000391010 00000 n
+0000391165 00000 n
+0000391322 00000 n
+0000391479 00000 n
+0000391635 00000 n
+0000391790 00000 n
+0000391946 00000 n
+0000392102 00000 n
+0000392258 00000 n
+0000392414 00000 n
+0000392569 00000 n
+0000392724 00000 n
+0000392879 00000 n
+0000393033 00000 n
+0000393188 00000 n
+0000393344 00000 n
+0000393499 00000 n
+0000393655 00000 n
+0000393811 00000 n
+0000393967 00000 n
+0000394122 00000 n
+0000394276 00000 n
+0000394431 00000 n
+0000394587 00000 n
+0000394743 00000 n
+0000394899 00000 n
+0000395054 00000 n
+0000395209 00000 n
+0000395365 00000 n
+0000395519 00000 n
+0000395673 00000 n
+0000395828 00000 n
+0000395983 00000 n
+0000396138 00000 n
+0000396293 00000 n
+0000396449 00000 n
+0000396606 00000 n
+0000396761 00000 n
+0000396916 00000 n
+0000397071 00000 n
+0000397226 00000 n
+0000397382 00000 n
+0000397538 00000 n
+0000397694 00000 n
+0000397850 00000 n
+0000398005 00000 n
+0000398160 00000 n
+0000398317 00000 n
+0000398472 00000 n
+0000398628 00000 n
+0000398783 00000 n
+0000398939 00000 n
+0000399095 00000 n
+0000399250 00000 n
+0000399406 00000 n
+0000399562 00000 n
+0000399716 00000 n
+0000421822 00000 n
+0000402528 00000 n
+0000400034 00000 n
+0000421758 00000 n
+0000403707 00000 n
+0000403863 00000 n
+0000404018 00000 n
+0000404174 00000 n
+0000404329 00000 n
+0000404484 00000 n
+0000404639 00000 n
+0000404794 00000 n
+0000404951 00000 n
+0000405107 00000 n
+0000405264 00000 n
+0000405418 00000 n
+0000405572 00000 n
+0000405728 00000 n
+0000405884 00000 n
+0000406039 00000 n
+0000406195 00000 n
+0000406350 00000 n
+0000406505 00000 n
+0000406661 00000 n
+0000406817 00000 n
+0000406973 00000 n
+0000407129 00000 n
+0000407286 00000 n
+0000407442 00000 n
+0000407598 00000 n
+0000407754 00000 n
+0000407910 00000 n
+0000408065 00000 n
+0000408221 00000 n
+0000408377 00000 n
+0000408533 00000 n
+0000408689 00000 n
+0000408845 00000 n
+0000409001 00000 n
+0000409158 00000 n
+0000409313 00000 n
+0000409469 00000 n
+0000409625 00000 n
+0000409780 00000 n
+0000409936 00000 n
+0000410091 00000 n
+0000410247 00000 n
+0000410402 00000 n
+0000410557 00000 n
+0000410713 00000 n
+0000410868 00000 n
+0000411023 00000 n
+0000411179 00000 n
+0000411332 00000 n
+0000411489 00000 n
+0000411644 00000 n
+0000411798 00000 n
+0000411955 00000 n
+0000412108 00000 n
+0000412265 00000 n
+0000412418 00000 n
+0000412575 00000 n
+0000412728 00000 n
+0000412885 00000 n
+0000413041 00000 n
+0000413197 00000 n
+0000413351 00000 n
+0000413505 00000 n
+0000413661 00000 n
+0000413814 00000 n
+0000413971 00000 n
+0000414126 00000 n
+0000414281 00000 n
+0000414436 00000 n
+0000414593 00000 n
+0000414748 00000 n
+0000414903 00000 n
+0000415058 00000 n
+0000415214 00000 n
+0000415370 00000 n
+0000415526 00000 n
+0000415682 00000 n
+0000415839 00000 n
+0000415994 00000 n
+0000416150 00000 n
+0000416306 00000 n
+0000416462 00000 n
+0000416618 00000 n
+0000416774 00000 n
+0000416930 00000 n
+0000417087 00000 n
+0000417243 00000 n
+0000417399 00000 n
+0000417555 00000 n
+0000417711 00000 n
+0000417866 00000 n
+0000418021 00000 n
+0000418176 00000 n
+0000418333 00000 n
+0000418488 00000 n
+0000418644 00000 n
+0000418799 00000 n
+0000418954 00000 n
+0000419110 00000 n
+0000419266 00000 n
+0000419421 00000 n
+0000419577 00000 n
+0000419733 00000 n
+0000419889 00000 n
+0000420045 00000 n
+0000420200 00000 n
+0000420355 00000 n
+0000420511 00000 n
+0000420667 00000 n
+0000420823 00000 n
+0000420979 00000 n
+0000421135 00000 n
+0000421290 00000 n
+0000421446 00000 n
+0000421602 00000 n
+0000536426 00000 n
+0000438865 00000 n
+0000424334 00000 n
+0000421921 00000 n
+0000438801 00000 n
+0000425252 00000 n
+0000425408 00000 n
+0000425562 00000 n
+0000425718 00000 n
+0000425874 00000 n
+0000426030 00000 n
+0000426186 00000 n
+0000426342 00000 n
+0000426498 00000 n
+0000426653 00000 n
+0000426809 00000 n
+0000426966 00000 n
+0000427123 00000 n
+0000427278 00000 n
+0000427434 00000 n
+0000427591 00000 n
+0000427746 00000 n
+0000427902 00000 n
+0000428058 00000 n
+0000428214 00000 n
+0000428370 00000 n
+0000428524 00000 n
+0000428680 00000 n
+0000428836 00000 n
+0000428992 00000 n
+0000429147 00000 n
+0000429303 00000 n
+0000429458 00000 n
+0000429614 00000 n
+0000429769 00000 n
+0000429926 00000 n
+0000430083 00000 n
+0000430239 00000 n
+0000430393 00000 n
+0000430549 00000 n
+0000430704 00000 n
+0000430858 00000 n
+0000431014 00000 n
+0000431170 00000 n
+0000431326 00000 n
+0000431481 00000 n
+0000431637 00000 n
+0000431793 00000 n
+0000431949 00000 n
+0000432105 00000 n
+0000432261 00000 n
+0000432415 00000 n
+0000432570 00000 n
+0000432726 00000 n
+0000432882 00000 n
+0000433038 00000 n
+0000433195 00000 n
+0000433351 00000 n
+0000433508 00000 n
+0000433664 00000 n
+0000433819 00000 n
+0000433974 00000 n
+0000434129 00000 n
+0000434284 00000 n
+0000434441 00000 n
+0000434598 00000 n
+0000434754 00000 n
+0000434910 00000 n
+0000435067 00000 n
+0000435224 00000 n
+0000435379 00000 n
+0000435534 00000 n
+0000435688 00000 n
+0000435843 00000 n
+0000435999 00000 n
+0000436155 00000 n
+0000436311 00000 n
+0000436466 00000 n
+0000436621 00000 n
+0000436776 00000 n
+0000436933 00000 n
+0000437088 00000 n
+0000437244 00000 n
+0000437399 00000 n
+0000437554 00000 n
+0000437710 00000 n
+0000437866 00000 n
+0000438022 00000 n
+0000438177 00000 n
+0000438333 00000 n
+0000438489 00000 n
+0000438645 00000 n
+0000445190 00000 n
+0000441198 00000 n
+0000438964 00000 n
+0000445126 00000 n
+0000441540 00000 n
+0000441697 00000 n
+0000441853 00000 n
+0000442009 00000 n
+0000442165 00000 n
+0000442320 00000 n
+0000442475 00000 n
+0000442631 00000 n
+0000442788 00000 n
+0000442944 00000 n
+0000443101 00000 n
+0000443257 00000 n
+0000443414 00000 n
+0000443568 00000 n
+0000443724 00000 n
+0000443880 00000 n
+0000444035 00000 n
+0000444191 00000 n
+0000444347 00000 n
+0000444502 00000 n
+0000444658 00000 n
+0000444813 00000 n
+0000444970 00000 n
+0000453922 00000 n
+0000447787 00000 n
+0000445276 00000 n
+0000453858 00000 n
+0000448246 00000 n
+0000448402 00000 n
+0000448558 00000 n
+0000448714 00000 n
+0000448870 00000 n
+0000449025 00000 n
+0000449181 00000 n
+0000449337 00000 n
+0000449493 00000 n
+0000449649 00000 n
+0000449805 00000 n
+0000449960 00000 n
+0000450115 00000 n
+0000450271 00000 n
+0000450427 00000 n
+0000450583 00000 n
+0000450739 00000 n
+0000450895 00000 n
+0000451051 00000 n
+0000451206 00000 n
+0000451362 00000 n
+0000451518 00000 n
+0000451674 00000 n
+0000451830 00000 n
+0000451986 00000 n
+0000452142 00000 n
+0000452299 00000 n
+0000452454 00000 n
+0000452610 00000 n
+0000452766 00000 n
+0000452922 00000 n
+0000453078 00000 n
+0000453234 00000 n
+0000453390 00000 n
+0000453546 00000 n
+0000453702 00000 n
+0000458277 00000 n
+0000456264 00000 n
+0000454021 00000 n
+0000458213 00000 n
+0000456498 00000 n
+0000456654 00000 n
+0000456810 00000 n
+0000456966 00000 n
+0000457122 00000 n
+0000457277 00000 n
+0000457433 00000 n
+0000457588 00000 n
+0000457745 00000 n
+0000457901 00000 n
+0000458057 00000 n
+0000468580 00000 n
+0000460808 00000 n
+0000458390 00000 n
+0000468516 00000 n
+0000461357 00000 n
+0000461513 00000 n
+0000461668 00000 n
+0000461824 00000 n
+0000461980 00000 n
+0000462136 00000 n
+0000462292 00000 n
+0000462448 00000 n
+0000462604 00000 n
+0000462760 00000 n
+0000462916 00000 n
+0000463072 00000 n
+0000463227 00000 n
+0000463382 00000 n
+0000463538 00000 n
+0000463693 00000 n
+0000463848 00000 n
+0000464003 00000 n
+0000464159 00000 n
+0000464315 00000 n
+0000464469 00000 n
+0000464624 00000 n
+0000464779 00000 n
+0000464935 00000 n
+0000465091 00000 n
+0000465247 00000 n
+0000465403 00000 n
+0000465559 00000 n
+0000465714 00000 n
+0000465869 00000 n
+0000466025 00000 n
+0000466180 00000 n
+0000466335 00000 n
+0000466491 00000 n
+0000466647 00000 n
+0000466802 00000 n
+0000466959 00000 n
+0000467116 00000 n
+0000467273 00000 n
+0000467430 00000 n
+0000467585 00000 n
+0000467739 00000 n
+0000467894 00000 n
+0000468049 00000 n
+0000468204 00000 n
+0000468360 00000 n
+0000477537 00000 n
+0000471075 00000 n
+0000468679 00000 n
+0000477473 00000 n
+0000471552 00000 n
+0000471708 00000 n
+0000471864 00000 n
+0000472021 00000 n
+0000472177 00000 n
+0000472333 00000 n
+0000472489 00000 n
+0000472645 00000 n
+0000472801 00000 n
+0000472956 00000 n
+0000473111 00000 n
+0000473266 00000 n
+0000473422 00000 n
+0000473578 00000 n
+0000473734 00000 n
+0000473891 00000 n
+0000474047 00000 n
+0000474202 00000 n
+0000474358 00000 n
+0000474514 00000 n
+0000474671 00000 n
+0000474826 00000 n
+0000474983 00000 n
+0000475140 00000 n
+0000475291 00000 n
+0000475446 00000 n
+0000475602 00000 n
+0000475758 00000 n
+0000475914 00000 n
+0000476071 00000 n
+0000476228 00000 n
+0000476385 00000 n
+0000476541 00000 n
+0000476695 00000 n
+0000476850 00000 n
+0000477005 00000 n
+0000477161 00000 n
+0000477317 00000 n
+0000536551 00000 n
+0000483898 00000 n
+0000480076 00000 n
+0000477636 00000 n
+0000483834 00000 n
+0000480409 00000 n
+0000480565 00000 n
+0000480721 00000 n
+0000480876 00000 n
+0000481032 00000 n
+0000481188 00000 n
+0000481344 00000 n
+0000481500 00000 n
+0000481656 00000 n
+0000481812 00000 n
+0000481968 00000 n
+0000482123 00000 n
+0000482278 00000 n
+0000482433 00000 n
+0000482589 00000 n
+0000482744 00000 n
+0000482898 00000 n
+0000483054 00000 n
+0000483210 00000 n
+0000483366 00000 n
+0000483522 00000 n
+0000483678 00000 n
+0000494612 00000 n
+0000486512 00000 n
+0000483997 00000 n
+0000494548 00000 n
+0000487079 00000 n
+0000487235 00000 n
+0000487391 00000 n
+0000487547 00000 n
+0000487702 00000 n
+0000487858 00000 n
+0000488011 00000 n
+0000488168 00000 n
+0000488323 00000 n
+0000488477 00000 n
+0000488634 00000 n
+0000488787 00000 n
+0000488944 00000 n
+0000489097 00000 n
+0000489254 00000 n
+0000489407 00000 n
+0000489564 00000 n
+0000489719 00000 n
+0000489874 00000 n
+0000490028 00000 n
+0000490184 00000 n
+0000490340 00000 n
+0000490496 00000 n
+0000490652 00000 n
+0000490808 00000 n
+0000490964 00000 n
+0000491119 00000 n
+0000491275 00000 n
+0000491431 00000 n
+0000491587 00000 n
+0000491742 00000 n
+0000491897 00000 n
+0000492053 00000 n
+0000492209 00000 n
+0000492365 00000 n
+0000492521 00000 n
+0000492677 00000 n
+0000492833 00000 n
+0000492988 00000 n
+0000493145 00000 n
+0000493302 00000 n
+0000493458 00000 n
+0000493614 00000 n
+0000493769 00000 n
+0000493924 00000 n
+0000494079 00000 n
+0000494236 00000 n
+0000494392 00000 n
+0000504885 00000 n
+0000497272 00000 n
+0000494712 00000 n
+0000504821 00000 n
+0000497812 00000 n
+0000497968 00000 n
+0000498123 00000 n
+0000498278 00000 n
+0000498434 00000 n
+0000498590 00000 n
+0000498746 00000 n
+0000498902 00000 n
+0000499058 00000 n
+0000499214 00000 n
+0000499369 00000 n
+0000499525 00000 n
+0000499680 00000 n
+0000499837 00000 n
+0000499992 00000 n
+0000500147 00000 n
+0000500302 00000 n
+0000500458 00000 n
+0000500614 00000 n
+0000500770 00000 n
+0000500926 00000 n
+0000501083 00000 n
+0000501238 00000 n
+0000501392 00000 n
+0000501547 00000 n
+0000501703 00000 n
+0000501858 00000 n
+0000502015 00000 n
+0000502172 00000 n
+0000502329 00000 n
+0000502485 00000 n
+0000502641 00000 n
+0000502797 00000 n
+0000502952 00000 n
+0000503108 00000 n
+0000503264 00000 n
+0000503420 00000 n
+0000503575 00000 n
+0000503731 00000 n
+0000503886 00000 n
+0000504042 00000 n
+0000504198 00000 n
+0000504354 00000 n
+0000504509 00000 n
+0000504665 00000 n
+0000510217 00000 n
+0000507384 00000 n
+0000504984 00000 n
+0000510153 00000 n
+0000507663 00000 n
+0000507818 00000 n
+0000507974 00000 n
+0000508130 00000 n
+0000508286 00000 n
+0000508441 00000 n
+0000508596 00000 n
+0000508751 00000 n
+0000508907 00000 n
+0000509063 00000 n
+0000509218 00000 n
+0000509373 00000 n
+0000509529 00000 n
+0000509685 00000 n
+0000509841 00000 n
+0000509997 00000 n
+0000519267 00000 n
+0000512806 00000 n
+0000510303 00000 n
+0000519203 00000 n
+0000513283 00000 n
+0000513440 00000 n
+0000513595 00000 n
+0000513751 00000 n
+0000513907 00000 n
+0000514063 00000 n
+0000514219 00000 n
+0000514374 00000 n
+0000514530 00000 n
+0000514687 00000 n
+0000514841 00000 n
+0000514997 00000 n
+0000515153 00000 n
+0000515309 00000 n
+0000515465 00000 n
+0000515620 00000 n
+0000515776 00000 n
+0000515932 00000 n
+0000516087 00000 n
+0000516243 00000 n
+0000516399 00000 n
+0000516554 00000 n
+0000516709 00000 n
+0000516864 00000 n
+0000517019 00000 n
+0000517175 00000 n
+0000517330 00000 n
+0000517486 00000 n
+0000517642 00000 n
+0000517798 00000 n
+0000517954 00000 n
+0000518110 00000 n
+0000518266 00000 n
+0000518422 00000 n
+0000518578 00000 n
+0000518735 00000 n
+0000518891 00000 n
+0000519047 00000 n
+0000527299 00000 n
+0000521824 00000 n
+0000519366 00000 n
+0000527235 00000 n
+0000522247 00000 n
+0000522403 00000 n
+0000522559 00000 n
+0000522715 00000 n
+0000522871 00000 n
+0000523027 00000 n
+0000523183 00000 n
+0000523338 00000 n
+0000523493 00000 n
+0000523650 00000 n
+0000523807 00000 n
+0000523964 00000 n
+0000524120 00000 n
+0000524275 00000 n
+0000524431 00000 n
+0000524587 00000 n
+0000524743 00000 n
+0000524900 00000 n
+0000525056 00000 n
+0000525211 00000 n
+0000525366 00000 n
+0000525522 00000 n
+0000525678 00000 n
+0000525834 00000 n
+0000525989 00000 n
+0000526144 00000 n
+0000526300 00000 n
+0000526456 00000 n
+0000526612 00000 n
+0000526767 00000 n
+0000526923 00000 n
+0000527079 00000 n
+0000536676 00000 n
+0000531233 00000 n
+0000529060 00000 n
+0000527398 00000 n
+0000531169 00000 n
+0000529303 00000 n
+0000529458 00000 n
+0000529613 00000 n
+0000529768 00000 n
+0000529923 00000 n
+0000530079 00000 n
+0000530235 00000 n
+0000530391 00000 n
+0000530547 00000 n
+0000530703 00000 n
+0000530858 00000 n
+0000531014 00000 n
+0000531332 00000 n
+0000536765 00000 n
+0000536885 00000 n
+0000537006 00000 n
+0000537132 00000 n
+0000537258 00000 n
+0000537338 00000 n
+0000537439 00000 n
+0000550221 00000 n
+0000558622 00000 n
+0000558663 00000 n
+0000558703 00000 n
+0000558884 00000 n
+trailer
+<<
+/Size 2446
+/Root 2444 0 R
+/Info 2445 0 R
+>>
+startxref
+559091
+%%EOF
diff --git a/obsolete/macros/latex/contrib/revtex4-0/src/textcase.dtx b/obsolete/macros/latex/contrib/revtex4-0/src/textcase.dtx
new file mode 100644
index 0000000000..60010e5ee6
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-0/src/textcase.dtx
@@ -0,0 +1,404 @@
+% \iffalse
+%% Source File: textcase.dtx
+%% Copyright 1997 1998 David Carlisle
+%%
+%% This file may be distributed under the terms of the LPPL.
+%% See 00readme.txt for details.
+%
+%<*dtx>
+ \ProvidesFile{textcase.dtx}
+%</dtx>
+%<package>\NeedsTeXFormat{LaTeX2e}
+%<package>\ProvidesPackage{textcase}
+%<driver> \ProvidesFile{textcase.drv}
+% \fi
+% \ProvidesFile{textcase.dtx}
+ [1998/11/12 v0.06 Text only upper/lower case changing (DPC)]
+%
+% \iffalse
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage{textcase}
+\begin{document}
+\DocInput{textcase.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \GetFileInfo{textcase.dtx}
+% \CheckSum{110}
+%
+% \changes{v0.01}{1997/09/28}
+% {Posted to c.t.t}
+% \changes{v0.02}{1997/09/28}
+% {Support \cs{ensuremath}}
+% \changes{v0.03}{1997/12/12}
+% {Donald Arseneau: support \cs{ref} \cs{cite} \cs{label}}
+% \changes{v0.04}{1997/12/14}
+% {Convert to dtx form, add \cs{NoCaseChange}}
+% \changes{v0.04}{1997/12/14}
+% {Support (most uses of) optional argument of \cs{cite}}
+% \changes{v0.05}{1997/12/16}
+% {More comments from Donald,
+% perhaps I should just give him this package for Christmas}
+% \changes{v0.06}{1998/11/12}
+% {overload option}
+%
+%
+% \title{The \textsf{textcase} package\thanks{This file
+% has version number \fileversion, last
+% revised \filedate.}}
+% \author{David Carlisle\thanks{%^^A
+% Reorganisation to suppport skipping a wider class of
+% things than just math done by Donald Arseneau}}
+%
+% \date{\filedate}
+%
+% \maketitle
+%
+% \section{Introduction}\label{intro}
+% |\MakeTextUppercase| and |\MakeTextLowercase| are versions of the
+% standard |\MakeUppercase| and |\MakeLowercase| that do not change
+% the case of any math sections in their arguments.
+%\begin{verbatim}
+% \MakeTextUppercase{abc\ae\ \( a = b \) and $\alpha \neq a$
+% or even \ensuremath{x=y} and $\ensuremath{x=y}$}
+%\end{verbatim}
+% Should produce:
+% \begin{quotation}
+% ABC\AE\ \( a = b \) AND $\alpha \neq a$
+% OR EVEN \ensuremath{x=y} AND $\ensuremath{x=y}$
+% \end{quotation}
+%
+% Version 0.03 of this package incorporates some changes suggested by
+% Donald Arseneau so that as well as math mode, the arguments of
+% |\cite|, |\label| and |\ref| are also prevented from being uppercased.
+% So you can now go
+%\begin{verbatim}
+% \MakeTextUppercase{%
+% Text in section~\ref{intro}, about \cite[pp 2--4]{bbb}}
+%\end{verbatim}
+% which produces
+% \begin{quotation}
+% \MakeTextUppercase{%
+% Text in section~\ref{intro}, about \cite[pp 2--4]{bbb}}
+% \end{quotation}
+% If, instead, the standard |\MakeUppercase| were used here, the keys
+% `into' and `bbb' would be uppercased and generate errors about
+% undefined references to INTRO and BBB.
+%
+% Sometimes there may be a special section of text that should not be
+% uppercased. This can be marked with |\NoCaseChange|, as follows.
+%\begin{verbatim}
+% \MakeTextUppercase{%
+% Text \NoCaseChange{More Text} yet more text}
+%\end{verbatim}
+% which produces
+% \begin{quotation}
+% \MakeTextUppercase{%
+% Text \NoCaseChange{More Text} yet more text}
+% \end{quotation}
+%
+% |\NoCaseChange| has other uses. If for some reason you need a
+% tabular environment within an uppercased section, then you need
+% to ensure that the name `tabular' and the preamble (eg `ll')
+% does not get uppercased:
+%\begin{verbatim}
+% \MakeTextUppercase{%
+% Text \NoCaseChange{\begin{tabular}{ll}}%
+% table&stuff\\goes&here
+% \NoCaseChange{\end{tabular}}
+% More text}
+%\end{verbatim}
+% which produces
+% \begin{quotation}
+% \MakeTextUppercase{%
+% Text \NoCaseChange{\begin{tabular}{ll}}%^^A
+% table&stuff\\goes&here
+% \NoCaseChange{\end{tabular}}
+% More text}
+% \end{quotation}
+%
+% \section{Features and Foibles}
+%
+% \subsection{Nested text}
+% The commands defined here only skip math sections and |\ref| arguments
+% if they are not `hidden' inside a |{ }| brace group. All text inside
+% such a group will be made uppercase just as with the standard
+% |\MakeUppercase|.
+%\begin{verbatim}
+% \MakeTextUppercase{a b {c $d$} $e$}
+%\end{verbatim}
+% produces
+% \begin{quotation}
+% \MakeTextUppercase{a b {c $d$} $e$}
+% \end{quotation}
+% Of course, this restriction does not apply to the arguments of the
+% supported commands |\ensuremath|, |\label|, |\ref|, and |\cite|.
+%
+% If you cannot arrange for your
+% mathematics to be at the outer level of brace grouping, you should
+% use the following basic technique (which works even with the standard
+% |\MakeUppercase| command). Define a new command that expands to your
+% math expression, and then use that command, with |\protect|, in the
+% text to be uppercased. Note that if the text being uppercased is in a
+% section title or other moving argument you may need to make the
+% definition in the document preamble, rather than just before the
+% section command, so that the command is defined when the table of
+% contents file is read.
+%\begin{verbatim}
+% \MakeTextUppercase{%
+% Text \fbox{$a=b$ and $x=y$}}%
+%
+% \newcommand{\mathexprone}{$a=b$}
+% \newcommand{\mathexprtwo}{$x=y$}
+% \MakeTextUppercase{%
+% Text \fbox{\protect\mathexprone\ and \protect\mathexprtwo}}%
+%\end{verbatim}
+% which produces
+% \begin{quotation}
+% \MakeTextUppercase{%
+% Text \fbox{$a=b$ and $x=y$}}%
+%
+% \newcommand{\mathexprone}{$a=b$}
+% \newcommand{\mathexprtwo}{$x=y$}
+% \MakeTextUppercase{%
+% Text \fbox{\protect\mathexprone\ and \protect\mathexprtwo}}%
+% \end{quotation}
+%
+% \subsection{Citations}
+% As documented above, |\cite| and |\ref| commands are not uppercased by
+% |\MakeTextUppercase|. If you are using a non-numeric citation scheme
+% you may want the replacement text for |\cite| to be uppercased.
+%
+% It is difficult to arrange that |\MakeTextUppercase| uppercases such
+% text, not least because this would lead to interaction with the many
+% bibliography packages which redefine |\cite| one way or another. One
+% possibility to achieve this is to use Donald Arseneau's cite package
+% and to locally redefine |\citeform| to add |\MakeUppercase| around
+% the final text string produced by |\cite|.
+%\begin{verbatim}
+% \MakeTextUppercase{%
+% Text \cite{bbb} and \cite{ccc}}
+%
+% {\renewcommand\citeform{\MakeUppercase}\MakeTextUppercase{%
+% Text \cite{bbb} and \cite{ccc}}}
+%\end{verbatim}
+% which produces\footnote{This is faked, so this document does not
+% rely on \texttt{cite.sty} being installed}
+% \begin{quotation}
+% TEXT [1] AND [David Carlisle 1997]
+%
+% TEXT [1] AND [DAVID CARLISLE 1997]
+% \end{quotation}
+%
+% \subsection{overload Option}
+% By default the package only defines new commands, |\MakeTextUppercase|
+% and |\MakeTextlowercase| as described above. You may wish to redefine
+% the standard |\MakeUppercase| and |\MakeLowercase| commands to be
+% the same as these new commands. So that for example headings in the
+% book class have this new feature without any further redefinition.
+% You may use the package option |[overload]| in which case these
+% new definitions will be overloaded on to the existing command names.
+%
+% \begin{thebibliography}{9}
+%
+% \bibitem{bbb} Something numeric
+% \bibitem[David Carlisle 1997]{ccc} Something textual
+% \end{thebibliography}
+%
+% \StopEventually{}
+%
+% \section{Implementation}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \begin{macro}{\@uclcnotmath}
+% This is the main macro of this package. It is basically
+% a copy of |\MakeTextUppercase| and |\MakeTextLowercase|
+% from the \LaTeX\ kernel, modified slightly so that they
+% can share code (that modification could be done to the
+% standard versions as well) and then further changed to
+% skip certain features like math mode and |\label| arguments.
+%
+% The arguments are:\\
+% |#1|: Extra commands to apply for case changing.
+% Used to locally redefine |\i| and |\j| for uppercasing.\\
+% |#2|: Either |##1##2| or |##2##1| to control the order
+% in which |\let| is applied to the pairs of control
+% sequences in |\@uclclist|.\\
+% |#3|: |\uppercase| or |\lowercase|.\\
+% |#4|: The text to be upper (or lower) cased.
+% \begin{macrocode}
+\def\@uclcnotmath#1#2#3#4{\begingroup
+% \end{macrocode}
+% Run extra commands (currently just to redefine |\i| and |\j|).
+% \begin{macrocode}
+ #1%
+% \end{macrocode}
+%
+% Locally set |\( \)| to be just |$ $|, so that the math skipping
+% code can be simplified, just to look for |$|.
+% \begin{macrocode}
+ \def\({$}\let\)\(%
+% \end{macrocode}
+%
+% Set up the `non-math' things that also have to be skipped.
+% \begin{macrocode}
+ \def\NoCaseChange##1{\noexpand\NoCaseChange{\noexpand##1}}%
+ \@nonchangecase\label
+ \@nonchangecase\ref
+ \@nonchangecase\ensuremath
+% \end{macrocode}
+%
+% |\cite| a bit trickier, as we want to uppercase any optional argument.
+% This will fail if the optional argument contains a brace group, but
+% should catch most cases.
+%
+% |text \cite[page 1]{foo} more text| ends up as
+%\begin{verbatim}
+% \uppercase{text \toks@{\cite[page1]}%
+% \the\toks@{foo}%
+% \uppercase{ more text}
+%\end{verbatim}
+% \begin{macrocode}
+ \def\cite##1##{\toks@{\noexpand\cite##1}\@citex}%
+ \def\@citex##1{\NoCaseChange{\the\toks@{##1}}}%
+% \end{macrocode}
+% (|\@citex| is a scratch macro here, not a redefinition of the existing
+% |\@citex|.)
+%
+% The following is essentially taken from |\MakeUppercase|.
+% Recursively execute |\reserved@a| to |\let| the pairs in |\@uclclist|.
+% The strange construction with |\@gobble| at the end just gobbles the
+% final recursive call.
+%
+% Incidentally, packages should not use the |\reserved@|\ldots\ scratch
+% macros, which are `reserved' for use within the \LaTeX\ kernel, but
+% (a) this code is essentially a copy from the kernel, and
+% (b) I'm allowed to break the rules, so there.
+% \begin{macrocode}
+ \def\reserved@a##1##2{\let#2\reserved@a}%
+ \expandafter\reserved@a\@uclclist\reserved@b{\reserved@b\@gobble}%
+% \end{macrocode}
+%
+% Expand everything first so that the `skipping' code can see what to
+% skip and so that tokens are revealed to |\uppercase|.
+% This makes the argument `moving'.
+% The |$\valign$| is just a fake math expression used to terminate
+% the parsing done by |\@skipmath|.
+% \begin{macrocode}
+ \protected@edef\reserved@a{\endgroup
+ \noexpand\@skipmath#3#4$\valign$}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \reserved@a}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@nonchangecase}
+% \begin{macrocode}
+\def\@nonchangecase#1{\def#1##1{\NoCaseChange{#1{##1}}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\NoCaseChange}
+% For hiding arbitrary text from |\uppercase|. This innocuous
+% definition is used for any occurrence of |\NoCaseChange|
+% in text that is not passed to |\MakeTextUppercase|. For example a
+% section heading may be uppercased, but the toc entry may not.
+% It is also used for nested definitions of |\cite| etc, where the
+% |\NoCaseChange| is inserted by expansion, but not removed as it is
+% hidden by the brace group.
+% \begin{macrocode}
+\let\NoCaseChange\@firstofone
+% \end{macrocode}
+% \end{macro}
+%
+%\begin{macro}{\@skipmath}
+% |#1|: operation |\uppercase| / |\lowercase|\\
+% |#2|: text up to first (next) |$|\\
+% |#3|: first math mode material (or |\valign| sentinel)
+% \begin{macrocode}
+\def\@skipmath#1#2$#3${%
+ \@skip@nonchangecase#1#2\NoCaseChange\valign
+ \ifx\valign#3%
+ \else
+ $#3$%
+ \expandafter\@skipmath\expandafter#1%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+%\begin{macro}{\@skip@nonchangecase}
+% |#1|: |\uppercase| or |\lowercase|\\
+% |#2|: Text up to the first command (such as |\cite|) made `safe'.
+% or the first use of |\NoCaseChange|.
+% \begin{macrocode}
+\def\@skip@nonchangecase#1#2\NoCaseChange#3{%
+ #1{#2}%
+ \ifx\valign#3%
+ \else
+ #3%
+ \expandafter\@skip@nonchangecase\expandafter#1%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\MakeTextUppercase}
+% \changes{v0.06}{1998/11/12}
+% {Add edef to make behaviour more like \cs{MakeUppercase}}
+% Put it all together. Arrange for \i\ and \j\ to uppercase, and
+% to read the pairs in the ucase list `forwards'.
+% \begin{macrocode}
+\DeclareRobustCommand\MakeTextUppercase{%
+ \@uclcnotmath{\def\i{I}\def\j{J}}{##1##2}\uppercase}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\protected@edef\MakeTextUppercase#1{\MakeTextUppercase{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\MakeTextLowercase}
+% \changes{v0.06}{1998/11/12}
+% {Add edef to make behaviour more like \cs{MakeLowercase}}
+% probably will never be used, but it is easy to implement.
+% Use |\lowercase| and read the pairs in the uppercase list `backwards'.
+% \begin{macrocode}
+\DeclareRobustCommand\MakeTextLowercase{%
+ \@uclcnotmath{}{##2##1}\lowercase}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\protected@edef\MakeTextLowercase#1{\MakeTextLowercase{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\MakeUppercase}
+% \begin{macro}{\MakeLowercase}
+% \changes{v0.06}{1998/11/12}
+% {Option to overload added. latex/2906}
+% \begin{macrocode}
+\DeclareOption{overload}{%
+ \expandafter\let\csname MakeUppercase \expandafter\endcsname
+ \csname MakeTextUppercase \endcsname
+ \expandafter\let\csname MakeLowercase \expandafter\endcsname
+ \csname MakeTextLowercase \endcsname}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\ProcessOptions
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%
+% \Finale
+%
diff --git a/obsolete/macros/latex/contrib/revtex4-1/00readme.tex b/obsolete/macros/latex/contrib/revtex4-1/00readme.tex
new file mode 100644
index 0000000000..888e4158d8
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/00readme.tex
@@ -0,0 +1,165 @@
+\title{%
+ The \classname{revtex4-1} document class of the American Physical Society%
+ \protect\thanks{Work under hire to The American Physical Society.}%
+}%
+\author{Arthur Ogawa%
+ \protect\thanks{First revision of REV\TeX4.0 (unreleased) by David Carlisle}%
+}%
+\date{Version \fileversion, dated \filedate}%
+\newcommand\revtex{REV\TeX}
+
+\maketitle
+
+This file embodies the implementation of the APS \revtex\ 4.1 document class
+for electronic submissions to journals.
+
+The distribution point for this work is
+\url{http://publish.aps.org/revtex4/},
+which contains fully unpacked, prebuilt runtime files and documentation.
+
+\tableofcontents
+
+\section{Using \protect\revtex}
+
+The file \file{README} has retrieval and installation information.
+
+User documentation is presented separately in \file{auguide.tex}.
+
+The file \file{template.aps} is a boilerplate file.
+
+\changes{4.0a}{1998/01/16}{Initial version}
+\changes{4.0a}{1998/01/31}{Move after process options, so \cs{clearpage} not in scope of twocolumn}
+\changes{4.0a}{1998/01/31}{Rearrange the ordering so numerical ones come first. AO: David, what does this mean?}
+\changes{4.0a}{1998/01/31}{use font-dependent spacing}
+\changes{4.0a}{1998/01/31}{4.0d had twoside option setting twoside switch to false}
+\changes{4.0a}{1998/01/31}{Move after process options, so the following test works}
+\changes{4.0a}{1998/01/31}{print homepage}
+\changes{4.0a}{1998/01/31}{protect against hyperref revtex kludges which are not needed now}
+\changes{4.0a}{1998/06/10}{multiple preprint commands}
+\changes{4.0a}{1998/06/10}{comma not space between email and homepage}
+\changes{4.0a}{1998/06/10}{single space footnotes}
+\changes{4.0b}{1999/06/20}{First modifications by Arthur Ogawa (mailto:arthur\_ogawa at sbcglobal dot net)}
+\changes{4.0b}{1999/06/20}{Added localization of \cs{figuresname}}
+\changes{4.0b}{1999/06/20}{Added localization of \cs{tablesname}}
+\changes{4.0b}{1999/06/20}{AO: all code for \protect\classoption{10pt} is in this module.}
+\changes{4.0b}{1999/06/20}{AO: all code for \protect\classoption{11pt} is in this module.}
+\changes{4.0b}{1999/06/20}{AO: all code for \protect\classoption{12pt} is in this module.}
+\changes{4.0b}{1999/06/20}{AO: made aps.rtx part of revtex4.dtx}
+\changes{4.0b}{1999/06/20}{AO: remove duplicates}
+\changes{4.0b}{1999/06/20}{call \cs{print@floats}}
+\changes{4.0b}{1999/06/20}{Defer assignment until \cs{AtBeginDocument} time.}
+\changes{4.0b}{1999/06/20}{Defer decision until \cs{AtBeginDocument} time}
+\changes{4.0b}{1999/06/20}{Define three separate environments, defer assignment to \cs{AtBeginDocument} time.}
+\changes{4.0b}{1999/06/20}{Frank Mittelbach, has stated in \protect\classname{multicol}: ``The kernel command \cs{@footnotetext} should not be modified.'' Thus, I have removed David Carlisle's redefinition of that command. Note, however, that later versions of \protect\classname{multicol} do not require this workaround. Belt and suspenders.}%
+\changes{4.0b}{1999/06/20}{Move this ``complex'' option to the front, where it can be overridden by ``simple'' options.}
+\changes{4.0b}{1999/06/20}{New option}
+\changes{4.0b}{1999/06/20}{One-line caption sets flush left.}
+\changes{4.0b}{1999/06/20}{only execute if appropriate}
+\changes{4.0b}{1999/06/20}{Processing delayed to \cs{AtBeginDocument} time}
+\changes{4.0b}{1999/06/20}{Removed invocation of nonexistent class option \protect\classoption{groupauthors} and all other class options that should only be invoked by the document. (Otherwise precedence of class options does not work.)}
+\changes{4.0b}{1999/06/20}{Restore all media size class option of \protect\file{classes.dtx}}
+\changes{4.0b}{1999/06/20}{Stack \cs{preprint} args flush right at right margin.}
+\changes{4.0c}{1999/11/13}{(AO, 115) If three or more preprints specified, set on single line, with commas.}
+\changes{4.0c}{1999/11/13}{(AO, 129) section* within appendix was producing appendixname}
+\changes{4.0c}{1999/11/13}{*-form mandates pagebreak}
+\changes{4.0c}{1999/11/13}{also spelled ``acknowledgements''.}
+\changes{4.0c}{1999/11/13}{Do not put by REVTeX in every page foot}
+\changes{4.0c}{1999/11/13}{grid changes via ltxgrid procedures}
+\changes{4.0c}{1999/11/13}{grid changes with ltxgrid}
+\changes{4.0c}{1999/11/13}{Insert procedure \cs{checkindate}}
+\changes{4.0c}{1999/11/13}{Lose compatability mode.}
+\changes{4.0c}{1999/11/13}{New ltxgrid-based code, other bug fixes}
+\changes{4.0c}{1999/11/13}{New option ``checkin''}
+\changes{4.0c}{1999/11/13}{Prevent an inner footnote from performing twice}
+\changes{4.0d}{2000/04/10}{Also alter how lists get indented.}
+\changes{4.0d}{2000/04/10}{eprint takes an optional argument, syntactical only in this case.}
+\changes{4.0d}{2000/04/10}{New option}
+\changes{4.0d}{2000/05/10}{More features and bug fixes: compatability with longtable and array packages. Now certainly incompatible with multicol.}
+\changes{4.0d}{2000/05/17}{make longtable trigger the head, too}
+\changes{4.0d}{2000/05/18}{But alternative spelling is deprecated.}
+\changes{4.0e}{2000/09/20}{New option showkeys}
+\changes{4.0e}{2000/11/14}{Bug fixes and minor new features: title block affiliations can have ancillary data, just like authors; clearpage processing revamped, with floats staying in order; widetext ornaments.}
+\changes{4.0e}{2000/11/21}{adornments above and below.}
+\changes{4.0f}{2001/02/13}{Last bug fixes before release.}
+\changes{4.0rc1}{2001/06/17}{Running headers always as if two-sided}
+\changes{4.0rc1}{2001/06/18}{grid changes with push and pop}
+\changes{4.0rc1}{2001/06/18}{grid changes with push and pop}
+\changes{4.0rc4}{2001/07/23}{hyperref is no longer loaded via class option: use a usepackage statement instead}
+\changes{4.1a}{2008/01/18}{(AO, 457) Endnotes to be sorted in with numerical citations.}%
+\changes{4.1a}{2008/01/18}{(AO, 451) ``Cannot have more than 256 cites in a document''}%
+\changes{4.1a}{2008/01/18}{(AO, 457) Endnotes to be sorted in with numerical citations.}%
+\changes{4.1a}{2008/01/18}{(AO, 460) ``Proper style is "FIG. 1. ..." (no colon)''}%
+\changes{4.1a}{2008/01/18}{(AO, 478) \cs{ds@letterpaper}, so that ``letterpaper really is the default''}%
+\changes{4.1a}{2008/01/18}{(AO, 488) Change processing of options to allow an unused option to specify society and journal}%
+\changes{4.1a}{2008/01/19}{(AO, 461) Change the csname revtex uses from @dotsep to ltxu@dotsep. The former is understood in mu. (What we wanted was a dimension.)}%
+\changes{4.1a}{2008/01/19}{For natbib versions before 8.21, \cs{NAT@sort} was consulted only as natbib was being read in. Now it is fully dynamic.}
+\changes{4.1b}{2008/05/29}{The csname substyle@ext is now defined without a dot (.), to be compatible with \LaTeX usage (see @clsextension and @pkgextension).}
+\changes{4.1b}{2008/06/01}{(AO) Implement bibnotes through \cs{frontmatter@footnote@produce} instead of \cs{bibnotes@sw}}%
+\changes{4.1b}{2008/06/01}{Add option reprint, opposite of preprint, and preferred alternative to twocolumn}
+\changes{4.1b}{2008/06/29}{(AO, 455) Be nice to a list within the abstract (assign \cs{@totalleftmargin}).}
+\changes{4.1b}{2008/06/30}{(AO) Structure the Abstract using the \texttt{bibliography} environment}
+\changes{4.1b}{2008/07/01}{(AO) coordinate \cs{if@twoside} with \cs{twoside@sw}}
+\changes{4.1b}{2008/07/01}{(AO) make settings at class time instead of deferring them to later.}
+\changes{4.1b}{2008/07/01}{(AO) No longer need to test \cs{chapter} as of \texttt{natbib} version 8.2}
+\changes{4.1b}{2008/07/01}{(AO) No longer use \cs{secnumarabic@sw}, instead use \cs{setup@secnums}}
+\changes{4.1b}{2008/07/01}{(AO) Provide more diagnostics when \cs{@society} is assigned.}
+\changes{4.1b}{2008/07/01}{(AO) provide option longbibliography}
+\changes{4.1b}{2008/07/01}{Add \cs{@hangfroms@section}}
+\changes{4.1b}{2008/07/01}{Break out \cs{@caption@fignum@sep}}
+\changes{4.1b}{2008/07/01}{Class option galley sets \cs{preprintsty@sw} to false}
+\changes{4.1b}{2008/07/01}{Code relating to new syntax for frontmatter has been placed in \file{ltxfront.dtx}}
+\changes{4.1b}{2008/07/01}{Package textcase is now simply a required package}
+\changes{4.1b}{2008/07/01}{Procedures \cs{@parse@class@options@society} and \cs{@parse@class@options@journal} and friends}
+\changes{4.1b}{2008/07/01}{Read in all required packages together}
+\changes{4.1b}{2008/07/01}{Remove options newabstract and oldabstract}
+\changes{4.1b}{2008/08/01}{Section numbering via procedures \cs{secnums@rtx} and \cs{secnums@arabic}.}
+\changes{4.1b}{2008/08/04}{As with author formatting, rag the right more, and assign \cs{@totalleftmargin}. Also neutralize \cs{def@after@address}.}%
+\changes{4.1b}{2008/08/04}{Rag the right even more: .8\cs{hsize}. Also, assign \cs{@totalleftmargin}.}%
+\changes{4.1b}{2008/08/04}{The \texttt{rmp} journal substyle selects \texttt{groupedaddress} by default.}%
+\changes{4.1b}{2008/08/04}{Use \cs{setup@hook} to initialize all.}
+\changes{4.1c}{2008/08/15}{Document class option longbibliography via \cs{substyle@post}}
+\changes{4.1d}{2009/03/27}{Definition of \cs{ @fnsymbol} follows fixltx2e.sty}
+\changes{4.1e}{2008/06/29}{(AO, 455) be nice to a list within the abstract}
+\changes{4.1f}{2009/07/07}{(AO, 513) Add class option linenumbers: number the lines a la \classname{lineno}}
+\changes{4.1f}{2009/07/07}{(AO, 516) Merged references are separated with a semicolon}
+\changes{4.1f}{2009/07/10}{(AO, 520) Automatically produce \cs{bibliography} command when needed}%
+\changes{4.1f}{2009/07/11}{(AO, 521) Lonely bibliography head}%
+\changes{4.1f}{2009/07/11}{(AO, 522) Warn if software is expired}%
+\changes{4.1f}{2009/07/15}{(AO, 523) Add class option nomerge, to turn off new natbib 8.3 syntax}
+\changes{4.1f}{2009/07/20}{(AO, 524) Makes no sense if citations are superscript numbers and so are footnotes}
+\changes{4.1f}{2009/10/05}{(AO, 530) \cs{@fnsymbol}: Failed to import fixltx2e.sty technology. Return to LaTeX core.}
+\changes{4.1g}{2009/10/07}{(AO, 525) Remove phantom paragraph above display math that is given in vertical mode}%
+\changes{4.1g}{2009/10/07}{(AO, 538) \cs{MakeTextUppercase} inappropriately expands the double backslash}
+\changes{4.1h}{2009/10/09}{(AO) Remove expiry code in the release software}%
+\changes{4.1i}{2009/10/23}{(AO, 541) Defer assignment of \cs{cite} until after natbib loads}
+\changes{4.1j}{2009/10/24}{(AO, 549) Repairing natbib's \cs{BibitemShut} and \cs{bibAnnote}}
+\changes{4.1j}{2009/10/25}{(AO, 545) hypertext capabilities off by default; enable with \classoption{hypertext}}
+\changes{4.1j}{2009/10/25}{(AO, 552) Repair spacing in \cs{onlinecite}}
+\changes{4.1k}{2009/11/06}{(AO, 554) give the \cs{newlabel} command syntax appropriate to the hyperref package}
+\changes{4.1n}{2009/11/06}{(AO, 565) restore 4.0 behavior: invoking class option preprint implies class option preprintnumbers}
+\changes{4.1n}{2009/11/30}{(AO, 566) restore 4.0 behavior: flush column bottoms}
+\changes{4.1n}{2009/12/05}{(AO, 569) Use of \classname{hyperref} interferes with column balancing of last page}%
+\changes{4.1n}{2009/12/09}{(AO, 569) execute the after-last-shipout procedures from within the safety of the output routine}%
+\changes{4.1n}{2010/01/02}{(AO, 571) Interface \cs{set@footnotewidth} for determining the set width of footnotes}%
+\changes{4.1n}{2010/01/02}{(AO, 572) Independent footnote counter for title block. Abstract footnote counter shared with body.}%
+\changes{4.1n}{2009/12/13}{(AO, 573) arrange to load \classname{lineno} after any other packages.}%
+\changes{4.1n}{2010/01/04}{(AO, 575) the default for journal prstper is longbibliography}%
+\changes{4.1n}{2010/01/04}{(AO, 576) In .bst files, remove support for the annote field}%
+\changes{4.1n}{2010/01/02}{(AO) fine-tune spacing above and below widetext}%
+\changes{4.1n}{2010/01/02}{(AO, 571) class file must set \cs{splittopskip}; fine tune \cs{skip}\cs{footins}; \cs{footnoterule} defined in terms of \cs{skip}\cs{footins}}%
+\changes{4.1n}{2010/01/02}{(AO, 572) \cs{@makefntext} and \cs{frontmatter@makefntext} must be defined harmoniously}%
+\changes{4.1o}{2010/02/02}{(AO, 575) Automatically incorporate the (Bib\TeX-generated) .bbl into an explicit \env{thebibliography}}%
+\changes{4.1o}{2010/02/05}{(AO, 549) Remove patch to natbib, which is now at version 8.31a}
+\changes{4.1o}{2010/02/07}{(AO, 578) accommodate the possible space character preceding \cs{BibitemShut}.}
+\changes{4.1o}{2010/02/05}{(AO, 579) Endnote shall comprise their own Bib\TeX\ entry type: @FOOTNOTE.}
+\changes{4.1o}{2010/02/10}{(AO, 580) Provide a document class option to turn off production of eprint field in bibliography.}
+\changes{4.1o}{2010/02/12}{(AO, 580) Control .bst at run time.}%
+\changes{4.1o}{2010/02/09}{(AO, 581) Handle case: merged references, with first ending in a stop character.}
+\changes{4.1p}{2010/02/24}{(AO, 583) Provide interface to \classname{ltxgrid} \cs{onecolumn@grid@setup} and \cs{twocolumn@grid@setup}}
+\changes{4.1p}{2010/02/24}{(AO, 584) Per MD, remove trailing space character from each journal abbreviation: it had caused an extraneous space in the .bbl}
+\changes{4.1q}{2010/04/01}{(AO, 586) When .bbl is pasted into the document, prevent automatic bibliography inclusion.}%
+\changes{4.1q}{2010/04/13}{(AO, 588) Only write \revtex-specific BibTeX .bib data if the .bst style is set by REVTeX.}%
+\changes{4.1r}{2010/06/22}{(AO, 595) Provide \cs{lovname} along with other List of Videos definitions.}%
+
+\iffalse ltxdoc klootch
+This file has version number 4.1r, last revised 2010/07/25/20:33:00.\fi
diff --git a/obsolete/macros/latex/contrib/revtex4-1/DOWNLOAD b/obsolete/macros/latex/contrib/revtex4-1/DOWNLOAD
new file mode 100644
index 0000000000..e0425b621f
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/DOWNLOAD
@@ -0,0 +1,120 @@
+Last updated August 9, 2010
+
+To download REVTeX 4 (version 4.1), download the files listed below, or, more
+conveniently, download revtex4-1.zip which contains all of the files.
+
+All files in this release are contained within a second zip file within the
+main zip file called revtex4-1-tds.zip. This contains all of the REVTeX 4.1
+files in the TeX Directory Structure (TDS) layout used with most current TeX
+distributions. Install REVTeX 4.1 by unzipping the files in the appropriate
+place (usually the texmf-local directory of your local TeX installation) and
+run texhash or the equivalent command to index the files. Please consult your
+TeX distribution's guide for installing new packages.
+
+NOTE: The only files necessary for running REVTeX 4.1 are those under
+tex/latex/revtex and bibtex/bst/revtex, but it is a good idea to install
+the entire distribution, especially the documentation.
+
+TeX inputs: tex/latex/revtex/
+ -----------------
+revtex4-1.cls - The REVTeX 4.1 class file
+aps4-1.rtx - APS-specific customizations for REVTeX 4.1
+aip4-1.rtx - AIP-specific customizations for REVTeX 4.1
+apsrmp4-1.rtx - APS-specific customizations for REVTeX 4.1,
+ specifically for Rev. Mod. Phys.
+aps10pt4-1.rtx - 10-point size class option file for REVTeX.
+aps11pt4-1.rtx - 11-point size class option file for REVTeX.
+aps12pt4-1.rtx - 12-point size class option file for REVTeX.
+revsymb4-1.sty - A collection of common symbols for use outside of REVTeX.
+
+ltxdocext.sty - Part of ltxgrid package used for page layout in REVTeX.
+ltxfront.sty - Part of ltxgrid package used for page layout in REVTeX.
+ltxgrid.sty - Part of ltxgrid package used for page layout in REVTeX.
+ltxutil.sty - Part of ltxgrid package used for page layout in REVTeX.
+
+BibTeX inputs: bibtex/bst/revtex/
+ ------------------
+apsrev4-1.bst - BibTeX styles for use for Phys. Rev. journals
+apsrmp4-1.bst - BibTeX styles for use for Rev. Mod. Phys.
+aipauth4-1.bst - BibTeX styles for AIP journals with author/year style citations
+aipnum4-1.bst - BibTeX styles for AIP journals with numerical style citations
+
+
+Documentation: doc/latex/revtex/
+ -----------------
+README - How to get started
+DOWNLOAD - How to download REVTeX4.1
+
+Author guide: doc/latex/revtex/auguide/
+ ------
+auguide4-1.tex (pdf) - REVTeX 4.1 Author's Guide
+whatsnew4-1.tex (pdf) - What's New in REVTeX 4.1
+summary.tex (pdf) - REVTeX 4.1 Command and Options Summary
+docs.sty - Package used by REVTeX documentation
+
+APS guide: doc/latex/revtex/aps
+ ------
+apsguide4-1.tex (pdf) - APS Author Guide for REVTeX 4.1
+
+AIP guide: doc/latex/revtex/aip
+ ------
+aipguide4-1.tex (pdf) - Author's Guide to AIP Substyles for REVTeX 4.1
+
+APS Sample document: doc/latex/revtex/sample/aps
+ -------
+apssamp.tex (pdf) - A sample file showing most common features of an APS
+ REVTeX 4.1 document
+fig_1.eps - sample figure for apssamp.tex
+fig_2.eps - sample wide figure for apssamp.tex
+vid_1a.eps - sample video frame for apssamp.tex
+vid_1b.eps - sample video frame for apssamp.tex
+apssamp.bib - sample BibTeX source file for apssamp.tex
+apstemplate.tex - A template for APS authors to follow
+
+AIP Sample document: doc/latex/revtex/sample/aip
+ -------
+aipsamp.tex (pdf) - A sample file showing most common features of an AIP
+ REVTeX 4.1 document
+fig_1.eps - sample figure for apssamp.tex
+fig_2.eps - sample wide figure for apssamp.tex
+aipsamp.bib - sample BibTeX source file for apssamp.tex
+aiptemplate.tex - A template for APS authors to follow
+
+
+Programmer's docs: doc/latex/revtex/source/
+ -------
+ltxdocext.pdf - Programmer's documentation for the ltxdocext package
+ltxfront.pdf - Programmer's documentation for the ltxfront package
+ltxgrid.pdf - Programmer's documentation for the ltxgrid package
+ltxutil.pdf - Programmer's documentation for the ltxutil package
+revtex4-1.pdf - Programmer's documentation for the revtex4-1 document class
+aip.pdf - Programmer's documentation for the AIP journal styles
+
+Source files: source/latex/revtex
+ -------------------
+ltxdocext.dtx - The source file for the ltxdocext package
+ltxfront.dtx - The source file for the ltxfront package
+ltxgrid.dtx - The source file for the ltxgrid package
+ltxutil.dtx - The source file for the ltxutil package
+revtex4-1.dtx - The source file for revtex4.cls and revsymb.sty.
+aip.dtx - The source file for AIP journal styles
+
+Not Included
+------------
+The following packages are required by REVTeX but are not
+included in this distribution. Please obtain from CTAN
+(Comprehensive TeX Archive Network), e.g. <http://www.ctan.org/>. Direct
+links to the necessary files can be found at <http://authors.aps.org/revtex4/>.
+
+natbib.dtx - Version 8.31a or later; found in latex/contrib/natbib on CTAN
+natbib.ins - LaTeX this to create natbib.sty and natbib
+ documentation from natbib.dtx
+bm.dtx - Bold math style - part of (current!) standard LaTeX2e tools
+bm.sty - generated from bm.dtx by running tools.ins
+textcase.dtx - Found in latex/contrib/textcase on CTAN
+textcase.ins - LaTeX this to generate textcase.sty from textcase.dtx
+url.sty - Found in latex/contrib/misc on CTAN
+
+An up-to-date installation of AMS-LaTeX is also required for certain
+documentclass options. Version 2.0 or higher is needed. It is
+available from <http://www.ams.org/tex/>.
diff --git a/obsolete/macros/latex/contrib/revtex4-1/README b/obsolete/macros/latex/contrib/revtex4-1/README
new file mode 100644
index 0000000000..f80a5108f5
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/README
@@ -0,0 +1,212 @@
+%% ****** Start of file README ****** %
+%%
+%% This file is part of the APS files in the REVTeX 4 distribution.
+%% Version 4.1r of REVTeX, August 2010.
+%%
+%% Copyright (c) 1999, 2000, 2001, 2009, 2010 The American Physical Society.
+%%
+
+Last updated 09 August 2010
+
+This file describes the contents of this distribution of REVTeX 4.1.
+The definitive source of information about REVTeX 4 is the APS web
+page http://authors.aps.org/revtex4/.
+
+User queries should be directed to revtex@aps.org.
+
+Manifest
+--------
+
+All files in this release are contained within the compressed archive
+revtex4-1.zip. For installation instructions, see below.
+
+NOTE: The only files necessary for running REVTeX 4.1 are those under
+tex/latex/revtex and bibtex/bst/revtex, but it is a good idea to install
+the entire distribution, especially the documentation.
+
+TeX inputs: tex/latex/revtex/
+ -----------------
+revtex4-1.cls - The REVTeX 4.1 class file
+aps4-1.rtx - APS-specific customizations for REVTeX 4.1
+aip4-1.rtx - AIP-specific customizations for REVTeX 4.1
+apsrmp4-1.rtx - APS-specific customizations for REVTeX 4.1,
+ specifically for Rev. Mod. Phys.
+aps10pt4-1.rtx - 10-point size class option file for REVTeX.
+aps11pt4-1.rtx - 11-point size class option file for REVTeX.
+aps12pt4-1.rtx - 12-point size class option file for REVTeX.
+revsymb4-1.sty - A collection of common symbols for use outside of REVTeX.
+
+ltxdocext.sty - Part of ltxgrid package used for page layout in REVTeX.
+ltxfront.sty - Part of ltxgrid package used for page layout in REVTeX.
+ltxgrid.sty - Part of ltxgrid package used for page layout in REVTeX.
+ltxutil.sty - Part of ltxgrid package used for page layout in REVTeX.
+
+BibTeX inputs: bibtex/bst/revtex/
+ ------------------
+apsrev4-1.bst - BibTeX styles for use for Phys. Rev. journals
+apsrmp4-1.bst - BibTeX styles for use for Rev. Mod. Phys.
+aipauth4-1.bst - BibTeX styles for AIP journals with author/year style citations
+aipnum4-1.bst - BibTeX styles for AIP journals with numerical style citations
+
+
+Documentation: doc/latex/revtex/
+ -----------------
+README - How to get started
+DOWNLOAD - How to download REVTeX4.1
+
+Author guide: doc/latex/revtex/auguide/
+ ------
+auguide4-1.tex (pdf) - REVTeX 4.1 Author's Guide
+whatsnew4-1.tex (pdf) - What's New in REVTeX 4.1
+summary.tex (pdf) - REVTeX 4.1 Command and Options Summary
+docs.sty - Package used by REVTeX documentation
+
+APS guide: doc/latex/revtex/aps
+ ------
+apsguide4-1.tex (pdf) - APS Author Guide for REVTeX 4.1
+
+AIP guide: doc/latex/revtex/aip
+ ------
+aipguide4-1.tex (pdf) - Author's Guide to AIP Substyles for REVTeX 4.1
+
+APS Sample document: doc/latex/revtex/sample/aps
+ -------
+apssamp.tex (pdf) - A sample file showing most common features of an APS
+ REVTeX 4.1 document
+fig_1.eps - sample figure for apssamp.tex
+fig_2.eps - sample wide figure for apssamp.tex
+vid_1a.eps - sample figure for apssamp.tex
+vid_1b.eps - sample figure for apssamp.tex
+apssamp.bib - sample BibTeX source file for apssamp.tex
+apstemplate.tex - A template for APS authors to follow
+
+AIP Sample document: doc/latex/revtex/sample/aip
+ -------
+aipsamp.tex (pdf) - A sample file showing most common features of an AIP
+ REVTeX 4.1 document
+fig_1.eps - sample figure for apssamp.tex
+fig_2.eps - sample wide figure for apssamp.tex
+aipsamp.bib - sample BibTeX source file for apssamp.tex
+aiptemplate.tex - A template for APS authors to follow
+
+
+Programmer's docs: doc/latex/revtex/source/
+ -------
+ltxdocext.pdf - Programmer's documentation for the ltxdocext package
+ltxfront.pdf - Programmer's documentation for the ltxfront package
+ltxgrid.pdf - Programmer's documentation for the ltxgrid package
+ltxutil.pdf - Programmer's documentation for the ltxutil package
+revtex4-1.pdf - Programmer's documentation for the revtex4-1 document class
+aip.pdf - Programmer's documentation for the AIP journal styles
+
+Source files: source/latex/revtex
+ -------------------
+ltxdocext.dtx - The source file for the ltxdocext package
+ltxfront.dtx - The source file for the ltxfront package
+ltxgrid.dtx - The source file for the ltxgrid package
+ltxutil.dtx - The source file for the ltxutil package
+revtex4-1.dtx - The source file for revtex4.cls and revsymb.sty.
+aip.dtx - The source file for AIP journal styles
+
+Not Included
+------------
+The following packages are required by REVTeX but are not
+included in this distribution. Please obtain from CTAN
+(Comprehensive TeX Archive Network), e.g. <http://www.ctan.org/>. Direct
+links to the necessary files can be found at <http://authors.aps.org/revtex4/>.
+
+natbib.dtx - Version 8.31a or later; found in latex/contrib/natbib on CTAN
+natbib.ins - LaTeX this to create natbib.sty and natbib
+ documentation from natbib.dtx
+bm.dtx - Bold math style - part of (current!) standard LaTeX2e tools
+bm.sty - generated from bm.dtx by running tools.ins
+textcase.dtx - Found in latex/contrib/textcase on CTAN
+textcase.ins - LaTeX this to generate textcase.sty from textcase.dtx
+url.sty - Found in latex/contrib/misc on CTAN
+
+An up-to-date installation of AMS-LaTeX is also required for certain
+documentclass options. Version 2.0 or higher is needed. It is
+available from <http://www.ams.org/tex/>.
+
+Recommended styles and packages
+--------------------------
+With REVTeX implemented as a native LaTeX2e document class, users can
+take advantage of many of the well-supported LaTeX2e packages available.
+Here are some that are particularly useful and recommended.
+
+longtable.sty for tables running to multiple pages - part of a
+standard LaTeX2e distribution.
+
+hyperref.sty for hyperlinking - should work well with REVTeX 4.1.
+
+graphics.sty and graphicx.sty for figure inclusion - part of LaTeX2e's
+standard distribution.
+
+Installation
+------------
+You already started the installation process by unzipping revtex4-1.zip.
+As you will have seen, it created a directory revtex4.1 containing
+this file README, the file DOWNLOAD, and the file revtex4-1-tds.zip, which
+contains the bulk of the installation.
+
+To install this software into a TDS-compliant TeX installation, like
+TeX Live, working as root, issue a shell command like
+
+ unzip revtex4-1-tds.zip -d /usr/local/texlive/texmf-local/
+
+where the destination for the unzipped files is, in this example,
+appropriate for a local modificaton of a sufficiently recent distribution
+of TeX Live. You may of course choose a different destination depending
+on your particular requirements.
+
+After installation, files will be located as per the Manifest above.
+
+Run the appropriate update command (mktexlsr, initexmf -u, etc.); under
+TeX Live that would be (as root)
+
+ mktexlsr /usr/local/texlive/texmf-local
+
+Install required packages (AMS-LaTeX, natbib, textcase, and bm).
+Please consult the documentaton for your local TeX package for more information.
+MikTeX users should use a recent version (see http://miktex.org/) and consult
+the documentation there. There are several steps you will have to do. Please
+note that the steps given here may change with future versions of MikTeX, but
+the basic steps should be quite similar.
+ 1) Create a texmf-local directory if needed. For example, you might create
+ a directory such as C:\local\miktex\texmf-local.
+ 2) Tell MikTeX where your texmf-local directory is. Find the MikTeX Options
+ window and look for the "Roots" tab. If your texmf-local directory
+ is not listed, click "Add" and add it.
+ 3) Unzip the revtex4-1-tds.zip (part of the REVTeX distribtution) in your
+ texmf-local directory.
+ 4) Update the "File Name Database (FNDB)." This step is essential and
+ it registers all of the files in your texmf-local directory with MikTeX.
+ Do this by clicking on "Refresh FNDB" in the General tab of the MikTeX
+ Options window.
+
+MikTex also comes with a package manager. This can be an easier way to maintain
+the packages installed on your system. However, please note that the packages
+available may not be the most current version of the packages.
+
+Credits
+-------
+David Carlisle created the first draft of REVTeX 4; Arthur Ogawa has
+supported the TeX development since. Patrick Daly was so kind as to
+incorporate needed changes into natbib and custom-bib. All worked under
+commission from the APS. Mark Doyle, APS Assistant Director, Journal
+Information Systems coordinated the effort, which was partly underwritten
+by the American Institute of Physics. The APS is the maintainer of REVTeX,
+and all bugs are our responsibility. Please e-mail feedback to revtex@aps.org.
+
+Backwards compatibility
+-----------------------
+The REVTeX 4.1 class file has been named revtex4-1.cls to distinguish it
+from its predecessors. If the class file is copied to revtex4.cls,
+files created with earlier versions of REVTeX 4 should still work.
+
+LaTeX2e requirements
+--------------------
+REVTeX 4 requires:
+LaTeX2e [1996/06/01],
+natbib [2009/11/07]
+textcase
diff --git a/obsolete/macros/latex/contrib/revtex4-1/bibtex/bst/revtex/aipauth4-1.bst b/obsolete/macros/latex/contrib/revtex4-1/bibtex/bst/revtex/aipauth4-1.bst
new file mode 100644
index 0000000000..97a52a3044
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/bibtex/bst/revtex/aipauth4-1.bst
@@ -0,0 +1,3487 @@
+%%
+%% This is file `aipauth4-1.bst',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% merlin.mbs (with options: `head,ay,nat,lang,pres,pres-bf,vonx,nm-rev,mcite,mct-1,mct-x3,nmft,nmft-def,fnm-def,nmfted,nmand-rm,lab,lab-def,and-rm,blkyear,yr-par,date-nil-x,tit-qq,inproceedings-chapter,jtit-x,inproceedings-chapter,article-booktitle,article-series,jttl-rm,journal-address,book-bt,thesis-title-o,techreport-institution-par,vol-bf,vnum-x,volp-com,jpg-1,book-editor-booktitle,inbook-editor-booktitle,bookaddress,num-xser,number-cap,chapter-cap,series-number,numser-booktitle,ser-vol,ser-rm,volume-cap,ser-ed,jnm-x,pg-bk,book-chapter-pages,pub-date,ay-empty-pub-parens-x,pre-pub,pre-edn,doi-link,doi,edby,blk-com,fin-endbibitem,pp,ed,abr,ednx,ord,jabr,etal-it,revdata,eprint,url,url-blk,translation,SLACcitation,numpages-x,url,url-prefix-x,bibinfo,bibfield,nfss,,{}')
+%% physjour.mbs (with options: `ay,nat,lang,pres,pres-bf,vonx,nm-rev,mcite,mct-1,mct-x3,nmft,nmft-def,fnm-def,nmfted,nmand-rm,lab,lab-def,and-rm,blkyear,yr-par,date-nil-x,tit-qq,inproceedings-chapter,jtit-x,inproceedings-chapter,article-booktitle,article-series,jttl-rm,journal-address,book-bt,thesis-title-o,techreport-institution-par,vol-bf,vnum-x,volp-com,jpg-1,book-editor-booktitle,inbook-editor-booktitle,bookaddress,num-xser,number-cap,chapter-cap,series-number,numser-booktitle,ser-vol,ser-rm,volume-cap,ser-ed,jnm-x,pg-bk,book-chapter-pages,pub-date,ay-empty-pub-parens-x,pre-pub,pre-edn,doi-link,doi,edby,blk-com,fin-endbibitem,pp,ed,abr,ednx,ord,jabr,etal-it,revdata,eprint,url,url-blk,translation,SLACcitation,numpages-x,url,url-prefix-x,bibinfo,bibfield,nfss,,{}')
+%% geojour.mbs (with options: `ay,nat,lang,pres,pres-bf,vonx,nm-rev,mcite,mct-1,mct-x3,nmft,nmft-def,fnm-def,nmfted,nmand-rm,lab,lab-def,and-rm,blkyear,yr-par,date-nil-x,tit-qq,inproceedings-chapter,jtit-x,inproceedings-chapter,article-booktitle,article-series,jttl-rm,journal-address,book-bt,thesis-title-o,techreport-institution-par,vol-bf,vnum-x,volp-com,jpg-1,book-editor-booktitle,inbook-editor-booktitle,bookaddress,num-xser,number-cap,chapter-cap,series-number,numser-booktitle,ser-vol,ser-rm,volume-cap,ser-ed,jnm-x,pg-bk,book-chapter-pages,pub-date,ay-empty-pub-parens-x,pre-pub,pre-edn,doi-link,doi,edby,blk-com,fin-endbibitem,pp,ed,abr,ednx,ord,jabr,etal-it,revdata,eprint,url,url-blk,translation,SLACcitation,numpages-x,url,url-prefix-x,bibinfo,bibfield,nfss,,{}')
+%% photjour.mbs (with options: `ay,nat,lang,pres,pres-bf,vonx,nm-rev,mcite,mct-1,mct-x3,nmft,nmft-def,fnm-def,nmfted,nmand-rm,lab,lab-def,and-rm,blkyear,yr-par,date-nil-x,tit-qq,inproceedings-chapter,jtit-x,inproceedings-chapter,article-booktitle,article-series,jttl-rm,journal-address,book-bt,thesis-title-o,techreport-institution-par,vol-bf,vnum-x,volp-com,jpg-1,book-editor-booktitle,inbook-editor-booktitle,bookaddress,num-xser,number-cap,chapter-cap,series-number,numser-booktitle,ser-vol,ser-rm,volume-cap,ser-ed,jnm-x,pg-bk,book-chapter-pages,pub-date,ay-empty-pub-parens-x,pre-pub,pre-edn,doi-link,doi,edby,blk-com,fin-endbibitem,pp,ed,abr,ednx,ord,jabr,etal-it,revdata,eprint,url,url-blk,translation,SLACcitation,numpages-x,url,url-prefix-x,bibinfo,bibfield,nfss,,{}')
+%% merlin.mbs (with options: `tail,ay,nat,lang,pres,pres-bf,vonx,nm-rev,mcite,mct-1,mct-x3,nmft,nmft-def,fnm-def,nmfted,nmand-rm,lab,lab-def,and-rm,blkyear,yr-par,date-nil-x,tit-qq,inproceedings-chapter,jtit-x,inproceedings-chapter,article-booktitle,article-series,jttl-rm,journal-address,book-bt,thesis-title-o,techreport-institution-par,vol-bf,vnum-x,volp-com,jpg-1,book-editor-booktitle,inbook-editor-booktitle,bookaddress,num-xser,number-cap,chapter-cap,series-number,numser-booktitle,ser-vol,ser-rm,volume-cap,ser-ed,jnm-x,pg-bk,book-chapter-pages,pub-date,ay-empty-pub-parens-x,pre-pub,pre-edn,doi-link,doi,edby,blk-com,fin-endbibitem,pp,ed,abr,ednx,ord,jabr,etal-it,revdata,eprint,url,url-blk,translation,SLACcitation,numpages-x,url,url-prefix-x,bibinfo,bibfield,nfss,,{}')
+%% ----------------------------------------
+%% *** REVTeX-compatible aipauth4-1.bst 2010-07-25 ***
+%%
+%% Copyright 1994-2007 Patrick W Daly
+ % ===============================================================
+ % IMPORTANT NOTICE:
+ % This bibliographic style (bst) file has been generated from one or
+ % more master bibliographic style (mbs) files, listed above.
+ %
+ % This generated file can be redistributed and/or modified under the terms
+ % of the LaTeX Project Public License Distributed from CTAN
+ % archives in directory macros/latex/base/lppl.txt; either
+ % version 1 of the License, or any later version.
+ % ===============================================================
+ % Name and version information of the main mbs file:
+ % For use with BibTeX version 0.99a or later
+ %-------------------------------------------------------------------
+ % This bibliography style file is intended for texts in ENGLISH
+ % This is an author-year citation style bibliography. As such, it is
+ % non-standard LaTeX, and requires a special package file to function properly.
+ % Such a package is natbib.sty by Patrick W. Daly
+ % The form of the \bibitem entries is
+ % \bibitem[Jones et al.(1990)]{key}...
+ % \bibitem[Jones et al.(1990)Jones, Baker, and Smith]{key}...
+ % The essential feature is that the label (the part in brackets) consists
+ % of the author names, as they should appear in the citation, with the year
+ % in parentheses following. There must be no space before the opening
+ % parenthesis!
+ % With natbib v5.3, a full list of authors may also follow the year.
+ % In natbib.sty, it is possible to define the type of enclosures that is
+ % really wanted (brackets or parentheses), but in either case, there must
+ % be parentheses in the label.
+ % The \cite command functions as follows:
+ % \citet{key} ==>> Jones et al. (1990)
+ % \citet*{key} ==>> Jones, Baker, and Smith (1990)
+ % \citep{key} ==>> (Jones et al., 1990)
+ % \citep*{key} ==>> (Jones, Baker, and Smith, 1990)
+ % \citep[chap. 2]{key} ==>> (Jones et al., 1990, chap. 2)
+ % \citep[e.g.][]{key} ==>> (e.g. Jones et al., 1990)
+ % \citep[e.g.][p. 32]{key} ==>> (e.g. Jones et al., p. 32)
+ % \citeauthor{key} ==>> Jones et al.
+ % \citeauthor*{key} ==>> Jones, Baker, and Smith
+ % \citeyear{key} ==>> 1990
+ %---------------------------------------------------------------------
+
+FUNCTION {id.bst} {"merlin.mbs aipauth4-1.bst 2010-07-25 4.21a (PWD, AO, DPC) hacked"}
+ENTRY
+{
+ address
+ archive
+ archivePrefix
+ author
+ bookaddress
+ booktitle
+ chapter
+ collaboration
+ doi
+ edition
+ editor
+ eid
+ eprint
+ howpublished
+ institution
+ isbn
+ issn
+ journal
+ key
+ language
+ month
+ note
+ number
+ organization
+ pages
+ primaryClass
+ publisher
+ school
+ SLACcitation
+ series
+ title
+ translation
+ type
+ url
+ volume
+ year
+}{
+}{
+ label
+ extra.label sort.label
+ short.list
+}
+
+INTEGERS
+{
+ output.state before.all
+ after.word after.punctuation
+ after.sentence after.block
+}
+
+INTEGERS
+{
+ punctuation.state punctuation.no punctuation.space punctuation.yes
+}
+
+STRINGS { bibfield output.bibfield }
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {non.stop}
+{ duplicate$
+ "}" * add.period$
+ #-1 #1 substring$ "." =
+}
+
+INTEGERS { arith.mulitplier arith.multiplicand }
+
+FUNCTION {multiply}
+{
+ 'arith.multiplicand :=
+ 'arith.mulitplier :=
+ #0
+ { arith.mulitplier #0 > }
+ { arith.multiplicand +
+ arith.mulitplier #1 - 'arith.mulitplier :=
+ }
+ while$
+}
+
+FUNCTION {chr.to.hex}
+{
+ chr.to.int$
+ duplicate$ "0" chr.to.int$ -
+ duplicate$ duplicate$ #0 < swap$ #9 > or not
+ { swap$ pop$ }
+ { pop$
+ duplicate$ "A" chr.to.int$ -
+ duplicate$ duplicate$ #0 < swap$ #5 > or not
+ { swap$ pop$ #10 + }
+ { pop$
+ duplicate$ "a" chr.to.int$ -
+ duplicate$ duplicate$ #0 < swap$ #5 > or not
+ { swap$ pop$ #10 + }
+ { pop$
+ pop$ #-1
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+INTEGERS { arith.accumulator }
+
+FUNCTION {str.to.hex}
+{ #0 'arith.accumulator :=
+ { duplicate$ empty$ not }
+ { duplicate$ #1 #1 substring$ chr.to.hex
+ duplicate$ #0 <
+ { pop$ pop$ ""
+ }
+ { arith.accumulator #16 multiply + 'arith.accumulator :=
+ #2 global.max$ substring$
+ }
+ if$
+ }
+ while$
+ pop$ arith.accumulator
+}
+
+FUNCTION {diagn.cmntlog}
+{
+ duplicate$ top$ "%" swap$ * write$ newline$
+}
+
+INTEGERS { control.key control.author control.editor control.title control.pages control.eprint control.year }
+
+INTEGERS { control.author.jnrlst control.author.dotless control.author.nospace control.author.initials control.author.nocomma control.author.first control.author.reversed }
+
+FUNCTION { control.init }
+{
+ #0
+ 'control.key :=
+ #0
+ #1 +
+ #8 +
+ 'control.author :=
+ #0
+ 'control.author.jnrlst :=
+ #0
+ 'control.author.dotless :=
+ #0
+ 'control.author.nospace :=
+ #1
+ 'control.author.initials :=
+ #0
+ 'control.author.nocomma :=
+ #0
+ 'control.author.first :=
+ #1
+ 'control.author.reversed :=
+ #0
+ 'control.editor :=
+ #-1
+ 'control.title :=
+ #0
+ 'control.pages :=
+ #0
+ 'control.eprint :=
+ #1
+ 'control.year :=
+}
+
+FUNCTION {warning.dependency}
+{
+ " (dependency: " * swap$ * ") set " * swap$ int.to.str$ * warning$
+}
+
+FUNCTION {control.check}
+{
+ control.editor
+ {
+ "editor formatted same as author"
+ control.author.reversed {
+ duplicate$ #0 swap$ "reversed" warning.dependency
+ #0 'control.author.reversed :=
+ } 'skip$ if$
+ control.author.first {
+ duplicate$ #0 swap$ "first" warning.dependency
+ #0 'control.author.first :=
+ } 'skip$ if$
+ control.author.nocomma {
+ duplicate$ #0 swap$ "nocomma" warning.dependency
+ #0 'control.author.nocomma :=
+ } 'skip$ if$
+ pop$
+ } 'skip$ if$
+ control.author.reversed 'skip$
+ {
+ "not reversed"
+ control.author.nospace {
+ duplicate$ #0 swap$ "nospace" warning.dependency
+ #0 'control.author.nospace :=
+ } 'skip$ if$
+ control.author.jnrlst 'skip$ {
+ duplicate$ #1 swap$ "jnrlst" warning.dependency
+ #1 'control.author.jnrlst :=
+ } if$
+ control.author.initials {
+ duplicate$ ", initials" *
+ control.author.dotless {
+ duplicate$ #0 swap$ "dotless" warning.dependency
+ #0 'control.author.dotless :=
+ } 'skip$ if$
+ pop$
+ } 'skip$ if$
+ pop$
+ }
+ if$
+ control.author.initials 'skip$ {
+ "not initials"
+ control.author.nocomma {
+ duplicate$ #0 swap$ "nocomma" warning.dependency
+ #0 'control.author.nocomma :=
+ } 'skip$ if$
+ control.author.nospace {
+ duplicate$ #0 swap$ "nospace" warning.dependency
+ #0 'control.author.nospace :=
+ } 'skip$ if$
+ control.author.dotless 'skip$ {
+ duplicate$ #1 swap$ "dotless" warning.dependency
+ #1 'control.author.dotless :=
+ } if$
+ pop$
+ } if$
+}
+
+FUNCTION {control.parse}
+{
+ duplicate$ duplicate$ missing$
+ {
+ pop$ pop$ pop$
+ }
+ { empty$
+ {
+ pop$ #-1
+ }{
+ str.to.hex
+ }
+ if$
+ swap$ :=
+ }
+ if$
+}
+
+FUNCTION {control.dump}
+{
+ duplicate$ missing$ { pop$ "N/A" } 'skip$ if$
+ "{" swap$ * "}, " *
+ *
+}
+
+INTEGERS { decode.threshold }
+
+FUNCTION {control.decode}
+{
+ - duplicate$
+ #0 <
+ {
+ skip$ pop$ swap$ #0
+ }
+ {
+ swap$ pop$ swap$ #1
+ }
+ if$
+ swap$ :=
+}
+
+FUNCTION {control.author.decode}
+{
+ control.author
+ duplicate$ duplicate$ #0 < swap$ #128 < not or
+ {
+ int.to.str$ "(" swap$ * ")" *
+ "Control cannot interpret author " swap$ *
+ warning$
+ }{
+ 'control.author.jnrlst swap$ duplicate$ #64 control.decode
+ 'control.author.dotless swap$ duplicate$ #32 control.decode
+ 'control.author.nospace swap$ duplicate$ #16 control.decode
+ 'control.author.initials swap$ duplicate$ #8 control.decode
+ 'control.author.nocomma swap$ duplicate$ #4 control.decode
+ 'control.author.first swap$ duplicate$ #2 control.decode
+ 'control.author.reversed swap$ duplicate$ #1 control.decode
+ duplicate$ #0 =
+ 'skip$
+ {
+ "Control: residue of author"
+ "(" swap$ * ")" * *
+ warning$
+ }
+ if$
+ pop$
+ }
+ if$
+}
+
+FUNCTION {control.setup}
+{
+ type$ cite$ "{" swap$ * "}, " * *
+ "control.key" key control.dump *
+ "control.author" author control.dump *
+ "control.editor" editor control.dump *
+ "control.title" title control.dump *
+ "control.pages" pages control.dump *
+ "control.year" year control.dump *
+ "control.eprint" eprint control.dump *
+ top$
+ 'control.key key control.parse
+ 'control.author author control.parse
+ 'control.editor editor control.parse
+ 'control.title title control.parse
+ 'control.pages pages control.parse
+ 'control.year year control.parse
+ 'control.eprint eprint control.parse
+ control.author.decode
+}
+
+FUNCTION {control.pass}
+{ type$ "control" = 'control.setup 'skip$ if$
+}
+
+FUNCTION {control.presort}
+{
+}
+
+FUNCTION {control.forward}
+{
+}
+
+FUNCTION {control.reverse}
+{
+}
+
+FUNCTION {control.sort}
+{
+}
+
+FUNCTION {control.longest.label}
+{
+}
+
+FUNCTION {control.key.bib}
+{
+ "Control: key "
+ control.key
+ duplicate$ "(" swap$ int.to.str$ * ") " * swap$
+ pop$ *
+ diagn.cmntlog
+}
+
+FUNCTION {control.author.bib}
+{
+ "Control: author "
+ control.author "(" swap$ int.to.str$ * ")" * *
+ control.author.reversed { " reversed" * }{} if$
+ control.author.first { " first" * }{} if$
+ control.author.nocomma { " nocomma" * }{} if$
+ control.author.initials { " initials" * }{} if$
+ control.author.nospace { " nospace" * }{} if$
+ control.author.dotless { " dotless" * }{} if$
+ control.author.jnrlst { " jnrlst" * }{} if$
+ diagn.cmntlog
+}
+
+FUNCTION {control.editor.bib}
+{
+ "Control: editor formatted "
+ control.editor
+ duplicate$ "(" swap$ int.to.str$ * ") " * swap$
+ duplicate$ #0 < {
+ pop$
+ "disabled!"
+ } {
+ #0 > {
+ "identically to author"
+ } {
+ "differently from author"
+ } if$
+ } if$ * *
+ diagn.cmntlog
+}
+
+FUNCTION {control.title.bib}
+{
+ "Control: production of article title "
+ control.title
+ duplicate$ "(" swap$ int.to.str$ * ") " * swap$
+ duplicate$ #0 < {
+ pop$
+ "disabled"
+ } {
+ #0 > {
+ "required"
+ } {
+ "allowed"
+ } if$
+ } if$ * *
+ diagn.cmntlog
+}
+
+FUNCTION {control.pages.bib}
+{
+ "Control: page "
+ control.pages
+ duplicate$ "(" swap$ int.to.str$ * ") " * swap$
+ duplicate$ #0 < {
+ pop$
+ "none"
+ } {
+ #0 > {
+ "range"
+ } {
+ "single"
+ } if$
+ } if$ * *
+ diagn.cmntlog
+}
+
+FUNCTION {control.year.bib}
+{
+ "Control: year "
+ control.year
+ duplicate$ "(" swap$ int.to.str$ * ") " * swap$
+ duplicate$ #0 < {
+ pop$
+ "disabled!"
+ } {
+ #0 > {
+ "truncated"
+ } {
+ "verbatim"
+ } if$
+ } if$ * *
+ diagn.cmntlog
+}
+
+FUNCTION {control.eprint.bib}
+{
+ "Control: production of eprint "
+ control.eprint
+ duplicate$ "(" swap$ int.to.str$ * ") " * swap$
+ #0 < { "disabled" } { "enabled" } if$ * *
+ diagn.cmntlog
+}
+
+FUNCTION {control.bib}
+{
+ control.key.bib
+ control.author.bib
+ control.editor.bib
+ control.title.bib
+ control.pages.bib
+ control.year.bib
+ control.eprint.bib
+}
+
+FUNCTION {init.state.consts}
+{
+ #0 'before.all :=
+ #1 'after.word :=
+ #2 'after.punctuation :=
+ #3 'after.sentence :=
+ #4 'after.block :=
+ #0 'punctuation.no :=
+ #1 'punctuation.space :=
+ #2 'punctuation.yes :=
+ "" 'bibfield :=
+ "" 'output.bibfield :=
+}
+
+STRINGS { s t}
+FUNCTION {block.punctuation}
+{ ""
+ "," *
+}
+
+FUNCTION {word.space}
+{
+ "\ "
+}
+
+FUNCTION {show.stackstring.one}{
+ "(" *
+ output.state int.to.str$ *
+ "," * punctuation.state int.to.str$ *
+ ")" * top$
+ duplicate$ "1(" swap$ * ")" * top$
+}
+
+FUNCTION {show.stackstring.two}{
+ "(" *
+ output.state int.to.str$ *
+ "," * punctuation.state int.to.str$ *
+ ")" * top$
+ swap$
+ duplicate$ "1(" swap$ * ")" * top$
+ swap$
+ duplicate$ "2(" swap$ * ")" * top$
+}
+
+FUNCTION {bibfield.command}{ "\bibfield "}
+
+FUNCTION {output.nonnull}
+{
+ swap$
+ output.state after.word =
+ {
+ block.punctuation *
+ word.space *
+ }
+ {
+ output.state after.punctuation =
+ {
+ word.space *
+ }
+ {
+ output.state after.block = output.state after.sentence = or
+ {
+ add.period$
+ "\EOS\ " *
+ }{
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ output.bibfield duplicate$ empty$ 'pop$
+ {
+ bibfield.command
+ " {" * swap$ * "} {" * swap$ * "}" *
+ }
+ if$
+ write$
+ bibfield 'output.bibfield := "" 'bibfield :=
+ output.state after.block =
+ {
+ newline$
+ "\newblock " write$
+ }
+ 'skip$
+ if$
+ punctuation.state duplicate$
+ punctuation.yes 'punctuation.state :=
+ punctuation.no =
+ { pop$ before.all }
+ { punctuation.yes = { after.word }{ after.punctuation } if$ }
+ if$
+ 'output.state :=
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ {
+ pop$
+ "" 'bibfield :=
+ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.nopunct}
+{
+ punctuation.no 'punctuation.state :=
+ output.nonnull
+}
+
+FUNCTION {output.check}
+{ swap$
+ duplicate$ empty$
+ { pop$ "empty " swap$ * " in " * cite$ * warning$ }
+ { swap$ pop$ output.nonnull }
+ if$
+}
+
+FUNCTION {bbl.open} { "\BibitemOpen " }
+
+FUNCTION {bbl.shut} { "\BibitemShut " }
+
+FUNCTION {bibitem.shut.stop} { bbl.shut "{Stop}%" * }
+
+FUNCTION {bibitem.shut.nostop} { bbl.shut "{NoStop}%" * }
+
+FUNCTION {bibitem.shut}
+{
+ non.stop
+ {
+ bibitem.shut.nostop *
+ }{
+ bibitem.shut.stop *
+ }
+ if$
+}
+
+FUNCTION {html.itag} {
+ "p"
+}
+
+FUNCTION {html.ltag} {
+ ""
+}
+
+FUNCTION {output.SLACcitation}
+{ SLACcitation empty$
+ 'skip$
+ {
+ newline$
+ SLACcitation write$
+ }
+ if$
+}
+
+FUNCTION {fin.entry}
+{
+ bibitem.shut
+ write$
+ output.SLACcitation
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.block.comma}
+{
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block = output.state before.all = or
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence.comma}
+{
+}
+
+FUNCTION {sentence.or.colon}
+{
+ new.sentence
+}
+
+FUNCTION {add.blank}
+{
+ word.space *
+ before.all 'output.state :=
+}
+
+FUNCTION {no.blank.or.punct}
+{
+ "\hspace {0pt}" *
+ before.all 'output.state :=
+}
+
+FUNCTION {date.block}
+{
+ new.block.comma
+ skip$
+}
+
+STRINGS {z}
+FUNCTION {remove.dots}
+{
+ control.author.dotless {
+ 'z :=
+ ""
+ { z empty$ not }
+ { z #1 #1 substring$
+ z #2 global.max$ substring$ 'z :=
+ duplicate$ "." = 'pop$
+ { * }
+ if$
+ }
+ while$
+ } 'skip$ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{
+ duplicate$ empty$
+ { pop$ "" }
+ {
+ "\emph {" swap$ * "}" *
+ }
+ if$
+}
+
+FUNCTION {bolden}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "\textbf {" swap$ * "}" * }
+ if$
+}
+
+FUNCTION {bib.name.font}
+{
+ duplicate$ empty$
+ { pop$ "" }
+ {
+ "\bibnamefont {" swap$ * "}" *
+ }
+ if$
+}
+
+FUNCTION {bib.fname.font}
+{
+ duplicate$ empty$
+ { pop$ "" }
+ {
+ "\bibfnamefont {" swap$ * "}" *
+ }
+ if$
+}
+
+FUNCTION {cite.name.font}
+{
+ duplicate$ empty$
+ { pop$ "" }
+ {
+ "\citenamefont {" swap$ * "}" *
+ }
+ if$
+}
+
+FUNCTION {tie.or.space.prefix}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { word.space }
+ if$
+ swap$
+}
+
+FUNCTION {capitalize}
+{
+ "u" change.case$ "t" change.case$
+}
+
+FUNCTION {space.word}
+{ word.space swap$ * word.space * }
+
+ % Here are the language-specific definitions for explicit words.
+ % Each function has a name bbl.xxx where xxx is the English word.
+ % The language selected here is ENGLISH
+
+FUNCTION {bbl.and}
+{
+ "and"
+}
+
+FUNCTION {bbl.etal}
+{
+ "et~al."
+}
+
+FUNCTION {bbl.editors}
+{
+ "eds."
+}
+
+FUNCTION {bbl.editor}
+{
+ "ed."
+}
+
+FUNCTION {bbl.edby}
+{ "edited by" }
+
+FUNCTION {bbl.edition}
+{
+ "ed."
+}
+
+FUNCTION {bbl.volume}
+{
+ "vol."
+}
+
+FUNCTION {bbl.of}
+{ "of" }
+
+FUNCTION {bbl.number}
+{
+ "no."
+}
+
+FUNCTION {bbl.nr}
+{ "no." }
+
+FUNCTION {bbl.in}
+{ "in" }
+
+FUNCTION {bbl.pages}
+{
+ "pp."
+}
+
+FUNCTION {bbl.page}
+{
+ "p."
+}
+
+FUNCTION {bbl.eidpp}
+{ "pages" }
+
+FUNCTION {bbl.chapter}
+{
+ "chap."
+}
+
+FUNCTION {bbl.techrep}
+{
+ "Tech. Rep."
+}
+
+FUNCTION {bbl.mthesis}
+{ "Master's thesis" }
+
+FUNCTION {bbl.phdthesis}
+{ "Ph.D. thesis" }
+
+FUNCTION {bbl.first}
+{
+ "1st"
+}
+
+FUNCTION {bbl.second}
+{
+ "2nd"
+}
+
+FUNCTION {bbl.third}
+{
+ "3rd"
+}
+
+FUNCTION {bbl.fourth}
+{
+ "4th"
+}
+
+FUNCTION {bbl.fifth}
+{
+ "5th"
+}
+
+FUNCTION {bbl.st}
+{ "st" }
+
+FUNCTION {bbl.nd}
+{ "nd" }
+
+FUNCTION {bbl.rd}
+{ "rd" }
+
+FUNCTION {bbl.th}
+{ "th" }
+
+MACRO {jan} {"Jan."}
+
+MACRO {feb} {"Feb."}
+
+MACRO {mar} {"Mar."}
+
+MACRO {apr} {"Apr."}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"Jun."}
+
+MACRO {jul} {"Jul."}
+
+MACRO {aug} {"Aug."}
+
+MACRO {sep} {"Sep."}
+
+MACRO {oct} {"Oct."}
+
+MACRO {nov} {"Nov."}
+
+MACRO {dec} {"Dec."}
+
+FUNCTION {bbl.url.prefix}
+{
+ "\urlprefix "
+}
+
+FUNCTION {eng.ord}
+{ duplicate$ "1" swap$ *
+ #-2 #1 substring$ "1" =
+ { bbl.th * }
+ { duplicate$ #-1 #1 substring$
+ duplicate$ "1" =
+ { pop$ bbl.st * }
+ { duplicate$ "2" =
+ { pop$ bbl.nd * }
+ { "3" =
+ { bbl.rd * }
+ { bbl.th * }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+ %-------------------------------------------------------------------
+ % Begin module:
+ % \ProvidesFile{physjour.mbs}[2002/01/14 2.2 (PWD)]
+MACRO {aa}{"Astron. \& Astrophys."}
+MACRO {aasup}{"Astron. \& Astrophys. Suppl. Ser."}
+MACRO {aj} {"Astron. J."}
+MACRO {aph} {"Acta Phys."}
+MACRO {advp} {"Adv. Phys."}
+MACRO {ajp} {"Amer. J. Phys."}
+MACRO {ajm} {"Amer. J. Math."}
+MACRO {amsci} {"Amer. Sci."}
+MACRO {anofd} {"Ann. Fluid Dyn."}
+MACRO {am} {"Ann. Math."}
+MACRO {ap} {"Ann. Phys. (NY)"}
+MACRO {adp} {"Ann. Phys. (Leipzig)"}
+MACRO {ao} {"Appl. Opt."}
+MACRO {apl} {"Appl. Phys. Lett."}
+MACRO {app} {"Astroparticle Phys."}
+MACRO {apj} {"Astrophys. J."}
+MACRO {apjsup} {"Astrophys. J. Suppl."}
+MACRO {apss} {"Astrophys. Space Sci."}
+MACRO {araa} {"Ann. Rev. Astron. Astrophys."}
+MACRO {baas} {"Bull. Amer. Astron. Soc."}
+MACRO {baps} {"Bull. Amer. Phys. Soc."}
+MACRO {cmp} {"Comm. Math. Phys."}
+MACRO {cpam} {"Commun. Pure Appl. Math."}
+MACRO {cppcf} {"Comm. Plasma Phys. \& Controlled Fusion"}
+MACRO {cpc} {"Comp. Phys. Comm."}
+MACRO {cqg} {"Class. Quant. Grav."}
+MACRO {cra} {"C. R. Acad. Sci. A"}
+MACRO {fed} {"Fusion Eng. \& Design"}
+MACRO {ft} {"Fusion Tech."}
+MACRO {grg} {"Gen. Relativ. Gravit."}
+MACRO {ieeens} {"IEEE Trans. Nucl. Sci."}
+MACRO {ieeeps} {"IEEE Trans. Plasma Sci."}
+MACRO {ijimw} {"Interntl. J. Infrared \& Millimeter Waves"}
+MACRO {ip} {"Infrared Phys."}
+MACRO {irp} {"Infrared Phys."}
+MACRO {jap} {"J. Appl. Phys."}
+MACRO {jasa} {"J. Acoust. Soc. America"}
+MACRO {jcp} {"J. Comp. Phys."}
+MACRO {jetp} {"Sov. Phys.--JETP"}
+MACRO {jfe} {"J. Fusion Energy"}
+MACRO {jfm} {"J. Fluid Mech."}
+MACRO {jmp} {"J. Math. Phys."}
+MACRO {jne} {"J. Nucl. Energy"}
+MACRO {jnec} {"J. Nucl. Energy, C: Plasma Phys., Accelerators, Thermonucl. Res."}
+MACRO {jnm} {"J. Nucl. Mat."}
+MACRO {jpc} {"J. Phys. Chem."}
+MACRO {jpp} {"J. Plasma Phys."}
+MACRO {jpsj} {"J. Phys. Soc. Japan"}
+MACRO {jsi} {"J. Sci. Instrum."}
+MACRO {jvst} {"J. Vac. Sci. \& Tech."}
+MACRO {nat} {"Nature"}
+MACRO {nature} {"Nature"}
+MACRO {nedf} {"Nucl. Eng. \& Design/Fusion"}
+MACRO {nf} {"Nucl. Fusion"}
+MACRO {nim} {"Nucl. Inst. \& Meth."}
+MACRO {nimpr} {"Nucl. Inst. \& Meth. in Phys. Res."}
+MACRO {np} {"Nucl. Phys."}
+MACRO {npb} {"Nucl. Phys. B"}
+MACRO {nt/f} {"Nucl. Tech./Fusion"}
+MACRO {npbpc} {"Nucl. Phys. B (Proc. Suppl.)"}
+MACRO {inc} {"Nuovo Cimento"}
+MACRO {nc} {"Nuovo Cimento"}
+MACRO {pf} {"Phys. Fluids"}
+MACRO {pfa} {"Phys. Fluids A: Fluid Dyn."}
+MACRO {pfb} {"Phys. Fluids B: Plasma Phys."}
+MACRO {pl} {"Phys. Lett."}
+MACRO {pla} {"Phys. Lett. A"}
+MACRO {plb} {"Phys. Lett. B"}
+MACRO {prep} {"Phys. Rep."}
+MACRO {pnas} {"Proc. Nat. Acad. Sci. USA"}
+MACRO {pp} {"Phys. Plasmas"}
+MACRO {ppcf} {"Plasma Phys. \& Controlled Fusion"}
+MACRO {phitrsl} {"Philos. Trans. Roy. Soc. London"}
+MACRO {prl} {"Phys. Rev. Lett."}
+MACRO {pr} {"Phys. Rev."}
+MACRO {physrev} {"Phys. Rev."}
+MACRO {pra} {"Phys. Rev. A"}
+MACRO {prb} {"Phys. Rev. B"}
+MACRO {prc} {"Phys. Rev. C"}
+MACRO {prd} {"Phys. Rev. D"}
+MACRO {pre} {"Phys. Rev. E"}
+MACRO {ps} {"Phys. Scripta"}
+MACRO {procrsl} {"Proc. Roy. Soc. London"}
+MACRO {rmp} {"Rev. Mod. Phys."}
+MACRO {rsi} {"Rev. Sci. Inst."}
+MACRO {science} {"Science"}
+MACRO {sciam} {"Sci. Am."}
+MACRO {sam} {"Stud. Appl. Math."}
+MACRO {sjpp} {"Sov. J. Plasma Phys."}
+MACRO {spd} {"Sov. Phys.--Doklady"}
+MACRO {sptp} {"Sov. Phys.--Tech. Phys."}
+MACRO {spu} {"Sov. Phys.--Uspeki"}
+MACRO {st} {"Sky and Telesc."}
+ % End module: physjour.mbs
+ %-------------------------------------------------------------------
+ % Begin module:
+ % \ProvidesFile{geojour.mbs}[2002/07/10 2.0h (PWD)]
+MACRO {aisr} {"Adv. Space Res."}
+MACRO {ag} {"Ann. Geophys."}
+MACRO {anigeo} {"Ann. Geofis."}
+MACRO {angl} {"Ann. Glaciol."}
+MACRO {andmet} {"Ann. d. Meteor."}
+MACRO {andgeo} {"Ann. d. Geophys."}
+MACRO {andphy} {"Ann. Phys.-Paris"}
+MACRO {afmgb} {"Arch. Meteor. Geophys. Bioklimatol."}
+MACRO {atph} {"Atm\'osphera"}
+MACRO {aao} {"Atmos. Ocean"}
+MACRO {ass}{"Astrophys. Space Sci."}
+MACRO {atenv} {"Atmos. Environ."}
+MACRO {aujag} {"Aust. J. Agr. Res."}
+MACRO {aumet} {"Aust. Meteorol. Mag."}
+MACRO {blmet} {"Bound.-Lay. Meteorol."}
+MACRO {bams} {"Bull. Amer. Meteorol. Soc."}
+MACRO {cch} {"Clim. Change"}
+MACRO {cdyn} {"Clim. Dynam."}
+MACRO {cbul} {"Climatol. Bull."}
+MACRO {cap} {"Contrib. Atmos. Phys."}
+MACRO {dsr} {"Deep-Sea Res."}
+MACRO {dhz} {"Dtsch. Hydrogr. Z."}
+MACRO {dao} {"Dynam. Atmos. Oceans"}
+MACRO {eco} {"Ecology"}
+MACRO {empl}{"Earth, Moon and Planets"}
+MACRO {envres} {"Environ. Res."}
+MACRO {envst} {"Environ. Sci. Technol."}
+MACRO {ecms} {"Estuarine Coastal Mar. Sci."}
+MACRO {expa}{"Exper. Astron."}
+MACRO {geoint} {"Geofis. Int."}
+MACRO {geopub} {"Geofys. Publ."}
+MACRO {geogeo} {"Geol. Geofiz."}
+MACRO {gafd} {"Geophys. Astrophys. Fluid Dyn."}
+MACRO {gfd} {"Geophys. Fluid Dyn."}
+MACRO {geomag} {"Geophys. Mag."}
+MACRO {georl} {"Geophys. Res. Lett."}
+MACRO {grl} {"Geophys. Res. Lett."}
+MACRO {ga} {"Geophysica"}
+MACRO {gs} {"Geophysics"}
+MACRO {ieeetap} {"IEEE Trans. Antenn. Propag."}
+MACRO {ijawp} {"Int. J. Air Water Pollut."}
+MACRO {ijc} {"Int. J. Climatol."}
+MACRO {ijrs} {"Int. J. Remote Sens."}
+MACRO {jam} {"J. Appl. Meteorol."}
+MACRO {jaot} {"J. Atmos. Ocean. Technol."}
+MACRO {jatp} {"J. Atmos. Terr. Phys."}
+MACRO {jastp} {"J. Atmos. Solar-Terr. Phys."}
+MACRO {jce} {"J. Climate"}
+MACRO {jcam} {"J. Climate Appl. Meteor."}
+MACRO {jcm} {"J. Climate Meteor."}
+MACRO {jcy} {"J. Climatol."}
+MACRO {jgr} {"J. Geophys. Res."}
+MACRO {jga} {"J. Glaciol."}
+MACRO {jh} {"J. Hydrol."}
+MACRO {jmr} {"J. Mar. Res."}
+MACRO {jmrj} {"J. Meteor. Res. Japan"}
+MACRO {jm} {"J. Meteor."}
+MACRO {jpo} {"J. Phys. Oceanogr."}
+MACRO {jra} {"J. Rech. Atmos."}
+MACRO {jaes} {"J. Aeronaut. Sci."}
+MACRO {japca} {"J. Air Pollut. Control Assoc."}
+MACRO {jas} {"J. Atmos. Sci."}
+MACRO {jmts} {"J. Mar. Technol. Soc."}
+MACRO {jmsj} {"J. Meteorol. Soc. Japan"}
+MACRO {josj} {"J. Oceanogr. Soc. Japan"}
+MACRO {jwm} {"J. Wea. Mod."}
+MACRO {lao} {"Limnol. Oceanogr."}
+MACRO {mwl} {"Mar. Wea. Log"}
+MACRO {mau} {"Mausam"}
+MACRO {meteor} {"``Meteor'' Forschungsergeb."}
+MACRO {map} {"Meteorol. Atmos. Phys."}
+MACRO {metmag} {"Meteor. Mag."}
+MACRO {metmon} {"Meteor. Monogr."}
+MACRO {metrun} {"Meteor. Rundsch."}
+MACRO {metzeit} {"Meteor. Z."}
+MACRO {metgid} {"Meteor. Gidrol."}
+MACRO {mwr} {"Mon. Weather Rev."}
+MACRO {nwd} {"Natl. Weather Dig."}
+MACRO {nzjmfr} {"New Zeal. J. Mar. Freshwater Res."}
+MACRO {npg} {"Nonlin. Proc. Geophys."}
+MACRO {om} {"Oceanogr. Meteorol."}
+MACRO {ocac} {"Oceanol. Acta"}
+MACRO {oceanus} {"Oceanus"}
+MACRO {paleoc} {"Paleoceanography"}
+MACRO {pce} {"Phys. Chem. Earth"}
+MACRO {pmg} {"Pap. Meteor. Geophys."}
+MACRO {ppom} {"Pap. Phys. Oceanogr. Meteor."}
+MACRO {physzeit} {"Phys. Z."}
+MACRO {pps} {"Planet. Space Sci."}
+MACRO {pss} {"Planet. Space Sci."}
+MACRO {pag} {"Pure Appl. Geophys."}
+MACRO {qjrms} {"Quart. J. Roy. Meteorol. Soc."}
+MACRO {quatres} {"Quat. Res."}
+MACRO {rsci} {"Radio Sci."}
+MACRO {rse} {"Remote Sens. Environ."}
+MACRO {rgeo} {"Rev. Geophys."}
+MACRO {rgsp} {"Rev. Geophys. Space Phys."}
+MACRO {rdgeo} {"Rev. Geofis."}
+MACRO {revmeta} {"Rev. Meteorol."}
+MACRO {sgp}{"Surveys in Geophys."}
+MACRO {sp} {"Solar Phys."}
+MACRO {ssr} {"Space Sci. Rev."}
+MACRO {tellus} {"Tellus"}
+MACRO {tac} {"Theor. Appl. Climatol."}
+MACRO {tagu} {"Trans. Am. Geophys. Union (EOS)"}
+MACRO {wrr} {"Water Resour. Res."}
+MACRO {weather} {"Weather"}
+MACRO {wafc} {"Weather Forecast."}
+MACRO {ww} {"Weatherwise"}
+MACRO {wmob} {"WMO Bull."}
+MACRO {zeitmet} {"Z. Meteorol."}
+ % End module: geojour.mbs
+ %-------------------------------------------------------------------
+ % Begin module:
+ % \ProvidesFile{photjour.mbs}[1999/02/24 2.0b (PWD)]
+
+MACRO {appopt} {"Appl. Opt."}
+MACRO {bell} {"Bell Syst. Tech. J."}
+MACRO {ell} {"Electron. Lett."}
+MACRO {jasp} {"J. Appl. Spectr."}
+MACRO {jqe} {"IEEE J. Quantum Electron."}
+MACRO {jlwt} {"J. Lightwave Technol."}
+MACRO {jmo} {"J. Mod. Opt."}
+MACRO {josa} {"J. Opt. Soc. America"}
+MACRO {josaa} {"J. Opt. Soc. Amer.~A"}
+MACRO {josab} {"J. Opt. Soc. Amer.~B"}
+MACRO {jdp} {"J. Phys. (Paris)"}
+MACRO {oc} {"Opt. Commun."}
+MACRO {ol} {"Opt. Lett."}
+MACRO {phtl} {"IEEE Photon. Technol. Lett."}
+MACRO {pspie} {"Proc. Soc. Photo-Opt. Instrum. Eng."}
+MACRO {sse} {"Solid-State Electron."}
+MACRO {sjot} {"Sov. J. Opt. Technol."}
+MACRO {sjqe} {"Sov. J. Quantum Electron."}
+MACRO {sleb} {"Sov. Phys.--Leb. Inst. Rep."}
+MACRO {stph} {"Sov. Phys.--Techn. Phys."}
+MACRO {stphl} {"Sov. Techn. Phys. Lett."}
+MACRO {vr} {"Vision Res."}
+MACRO {zph} {"Z. f. Physik"}
+MACRO {zphb} {"Z. f. Physik~B"}
+MACRO {zphd} {"Z. f. Physik~D"}
+
+MACRO {CLEO} {"CLEO"}
+MACRO {ASSL} {"Adv. Sol.-State Lasers"}
+MACRO {OSA} {"OSA"}
+ % End module: photjour.mbs
+%% Copyright 1994-2007 Patrick W Daly
+MACRO {acmcs} {"ACM Comput. Surv."}
+
+MACRO {acta} {"Acta Inf."}
+
+MACRO {cacm} {"Commun. ACM"}
+
+MACRO {ibmjrd} {"IBM J. Res. Dev."}
+
+MACRO {ibmsj} {"IBM Syst.~J."}
+
+MACRO {ieeese} {"IEEE Trans. Software Eng."}
+
+MACRO {ieeetc} {"IEEE Trans. Comput."}
+
+MACRO {ieeetcad}
+ {"IEEE Trans. Comput. Aid. Des."}
+
+MACRO {ipl} {"Inf. Process. Lett."}
+
+MACRO {jacm} {"J.~ACM"}
+
+MACRO {jcss} {"J.~Comput. Syst. Sci."}
+
+MACRO {scp} {"Sci. Comput. Program."}
+
+MACRO {sicomp} {"SIAM J. Comput."}
+
+MACRO {tocs} {"ACM Trans. Comput. Syst."}
+
+MACRO {tods} {"ACM Trans. Database Syst."}
+
+MACRO {tog} {"ACM Trans. Graphic."}
+
+MACRO {toms} {"ACM Trans. Math. Software"}
+
+MACRO {toois} {"ACM Trans. Office Inf. Syst."}
+
+MACRO {toplas} {"ACM Trans. Progr. Lang. Syst."}
+
+MACRO {tcs} {"Theor. Comput. Sci."}
+
+FUNCTION {bibinfo.command} { "\bibinfo " }
+
+FUNCTION {bibinfo.check}
+{ swap$
+ duplicate$ missing$
+ {
+ pop$
+ pop$ ""
+ }{
+ duplicate$ empty$
+ {
+ swap$ pop$
+ }{
+ swap$
+ bibinfo.command "{" * swap$ * "} {" * swap$ * "}" *
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {bibinfo.warn}
+{ swap$
+ duplicate$ missing$
+ {
+ swap$ "missing " swap$ * " in " * cite$ * warning$ pop$
+ ""
+ }{
+ duplicate$ empty$
+ {
+ swap$ "empty " swap$ * " in " * cite$ * warning$
+ }{
+ swap$
+ bibinfo.command " {" * swap$ * "} {" * swap$ * "}" *
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {archiv.base}
+{
+ "http://arxiv.org/abs"
+}
+
+FUNCTION {archiv.prefix.base}
+{
+ "arXiv"
+}
+
+FUNCTION {eprint.command}
+{
+ "\Eprint "
+}
+
+FUNCTION {format.eprint}
+{
+ eprint duplicate$ empty$
+ control.eprint #0 <
+ or
+ { pop$ "" }
+ {
+ duplicate$
+ ""
+ archive duplicate$ empty$ { pop$ archiv.base } 'skip$ if$ *
+ "/" *
+ swap$ *
+ "{" swap$ * "} " *
+ swap$
+ ""
+ archivePrefix duplicate$ empty$ { pop$ "" } { ":" * } if$ *
+ swap$ *
+ primaryClass duplicate$ empty$ { pop$ "" } { " [" swap$ * "]" * } if$ *
+ "{" swap$ * "} " *
+ *
+ eprint.command swap$ *
+ }
+ if$
+}
+
+FUNCTION {format.translation}
+{ translation duplicate$ empty$
+ 'skip$
+ { ""
+ "\translation{" * swap$ * "}" *
+ punctuation.space 'punctuation.state :=
+ }
+ if$
+}
+
+FUNCTION {format.url}
+{
+ url duplicate$ empty$
+ { pop$ "" }
+ {
+ "\url "
+ "{" * swap$ * "}" *
+ }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {check.speaker}
+{ key empty$ 'skip$
+ { key nameptr int.to.str$ =
+ {
+ bolden
+ }
+ 'skip$
+ if$
+ }
+ if$
+}
+
+
+STRINGS { bibinfo}
+
+FUNCTION {format.names.fname}
+{
+ control.author.initials {
+ control.author.dotless {
+ control.author.nospace {
+ "f{}"
+ } {
+ "f{~}"
+ } if$
+ } {
+ control.author.nospace {
+ "f{.}."
+ } {
+ "f."
+ } if$
+ } if$
+ } {
+ "ff"
+ } if$
+}
+
+FUNCTION {bracify}
+{
+ "{" swap$ * "}" *
+}
+
+FUNCTION {name.comma}
+{
+ control.author.nocomma 'skip$ { "," swap$ * } if$
+}
+
+FUNCTION {format.names.format.onefont}
+{
+ "{vv~}{ll}"
+ nameptr #1 >
+ control.author.first
+ and
+ control.author.reversed not
+ or
+ {
+ control.author.initials {
+ "f"
+ control.author.dotless 'skip$ {
+ "." *
+ } if$
+ "~" *
+ } {
+ "ff"
+ } if$
+ bracify
+ swap$
+ } {
+ format.names.fname
+ " " swap$ *
+ name.comma
+ bracify
+ }
+ if$
+ "jj"
+ " " swap$ *
+ name.comma
+ bracify
+ control.author.jnrlst 'skip$ 'swap$ if$
+ * *
+}
+
+FUNCTION {format.names.onefont}
+{
+ s nameptr format.names.format.onefont format.name$
+ remove.dots
+ bib.name.font
+}
+
+FUNCTION {format.names.morfont}
+{ s nameptr
+ "{vv~}{ll}" format.name$ bib.name.font
+ nameptr #1 >
+ control.author.first
+ and
+ control.author.reversed not
+ or
+ {
+ s nameptr
+ control.author.initials {
+ "f" % default: name + surname + comma junior
+ } {
+ "ff"
+ } if$
+ control.author.dotless 'skip$ {
+ "." * % nm-init % Initials. + surname (J. F. Smith) control.author.initials
+ } if$
+ bracify
+ format.name$ duplicate$ empty$ 'skip$
+ { tie.or.space.prefix bib.fname.font swap$ * }
+ if$
+ swap$
+ *
+ s nameptr
+ "{jj}" format.name$ duplicate$ empty$ 'skip$
+ { bib.fname.font ", " swap$ * }
+ if$
+ } {
+ "," *
+ s nameptr
+ format.names.fname
+ "jj"
+ " "
+ name.comma
+ control.author.jnrlst {
+ swap$ * skip$
+ } {
+ skip$ * swap$
+ } if$
+ bracify swap$ bracify swap$
+ *
+ format.name$
+ remove.dots
+ duplicate$ empty$ 'skip$
+ { bib.fname.font " " swap$ * }
+ if$
+ } if$
+ *
+}
+
+FUNCTION {names.punctuate}
+{
+ "," *
+ " " *
+}
+
+FUNCTION {format.names}
+{ 'bibinfo :=
+ duplicate$ empty$ { pop$ "" } {
+ duplicate$ num.names$
+ duplicate$ 'numnames :=
+ 'namesleft :=
+ 's :=
+ #1 'nameptr :=
+ ""
+ { namesleft #0 > }
+ {
+ format.names.morfont
+ bibinfo bibinfo.check
+ type$ "presentation" =
+ 'check.speaker
+ 'skip$
+ if$
+ 't :=
+ nameptr #1 > not
+ {
+ t *
+ } {
+ namesleft #1 >
+ {
+ names.punctuate
+ t *
+ } {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ numnames #2 >
+ 'names.punctuate
+ 'skip$
+ if$
+ t "others" =
+ {
+ " " *
+ bbl.etal
+ emphasize
+ *
+ } {
+ bbl.and
+ space.word *
+ t *
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ } if$
+}
+
+FUNCTION {format.names.ed.onefont}
+{
+ s nameptr
+ control.author.initials {
+ control.author.dotless {
+ control.author.nospace {
+ "{f{}~}{vv~}{ll}{ jj}" % nm-rvx|nm-rvcx
+ } {
+ "{f{~}~}{vv~}{ll}{ jj}" % nm-rv
+ } if$
+ } {
+ control.author.nospace {
+ "{f{.}.~}{vv~}{ll}{ jj}" % nm-rvv|nm-rvvc
+ }{
+ "{f.~}{vv~}{ll}{, jj}" % nm-init|nm-rev|nm-rev1
+ } if$
+ } if$
+ } {
+ "{ff~}{vv~}{ll}{, jj}"
+ } if$
+ format.name$
+ remove.dots
+ bib.name.font
+}
+
+FUNCTION {format.names.ed.morfont}
+{
+ control.author.reversed { %
+ control.author.initials { %
+ control.author.dotless { %
+ s nameptr
+ control.author.nospace { % nm-rvx nm-rvcx
+ "{f{}}"
+ } { % nm-rv
+ "{f{~}}"
+ } if$
+ format.name$ duplicate$ empty$ 'skip$
+ { tie.or.space.prefix bib.fname.font swap$ * }
+ if$
+ s nameptr
+ "{vv~}{ll}" format.name$ bib.name.font *
+ s nameptr
+ "{jj}" format.name$
+ remove.dots
+ duplicate$ empty$ 'skip$
+ { bib.fname.font " " swap$ * }
+ if$
+ } { % !control.author.dotless
+ s nameptr
+ control.author.nospace { % nm-rvv
+ "{ff}"
+ } { % nm-rev nm-rev1
+ "{f.}"
+ } if$
+ format.name$ duplicate$ empty$ 'skip$
+ { tie.or.space.prefix bib.fname.font swap$ * }
+ if$
+ s nameptr
+ "{vv~}{ll}" format.name$ bib.name.font *
+ s nameptr
+ "{jj}" format.name$
+ duplicate$ empty$ 'skip$
+ { bib.fname.font ", " swap$ * }
+ if$
+ } if$
+ } { % Full names !control.author.initials nm-revf nm-revv1
+ s nameptr
+ "{ff}"
+ format.name$ duplicate$ empty$ 'skip$
+ { tie.or.space.prefix bib.fname.font swap$ * }
+ if$
+ s nameptr
+ "{vv~}{ll}" format.name$ bib.name.font *
+ s nameptr
+ "{jj}" format.name$
+ duplicate$ empty$ 'skip$
+ { bib.fname.font ", " swap$ * }
+ if$
+ } if$
+ } { % !control.author.reversed nm-init
+ s nameptr
+ "{f.}"
+ format.name$ duplicate$ empty$ 'skip$
+ { tie.or.space.prefix bib.fname.font swap$ * }
+ if$
+ s nameptr
+ "{vv~}{ll}" format.name$ bib.name.font *
+ s nameptr
+ "{jj}" format.name$
+ duplicate$ empty$ 'skip$
+ { bib.fname.font ", " swap$ * }
+ if$
+ } if$
+ *
+}
+
+FUNCTION {format.names.ed}
+{
+ control.editor #0 > {
+ format.names
+ } {
+ 'bibinfo :=
+ duplicate$ empty$ 'skip$ {
+ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ {
+ format.names.ed.morfont
+ bibinfo bibinfo.check
+ 't :=
+ nameptr #1 >
+ {
+ namesleft #1 >
+ {
+ names.punctuate
+ t *
+ }{
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ numnames #2 >
+ 'names.punctuate
+ 'skip$
+ if$
+ t "others" =
+ {
+ " " * bbl.etal emphasize *
+ }{
+ bbl.and
+ space.word * t *
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ } if$
+ } if$
+}
+
+FUNCTION {format.key}
+{ empty$
+ { key field.or.null }
+ { "" }
+ if$
+}
+
+FUNCTION {format.authors}
+{ author "author" format.names
+ duplicate$ empty$ 'skip$
+ { collaboration "collaboration" bibinfo.check
+ duplicate$ empty$ 'skip$
+ { " (" swap$ * ")" * }
+ if$
+ *
+ }
+ if$
+ "author" 'bibfield :=
+}
+
+FUNCTION {get.bbl.editor}
+{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$
+}
+
+FUNCTION {format.editors}
+{ editor "editor" format.names duplicate$ empty$ 'skip$
+ {
+ "," *
+ word.space *
+ get.bbl.editor
+ *
+ }
+ if$
+}
+
+FUNCTION {format.isbn.output}
+{
+}
+
+FUNCTION {format.issn.output}
+{
+}
+
+FUNCTION {doi.base}
+{
+ "http://dx.doi.org/"
+}
+
+FUNCTION {doi.base.command}
+{
+ "\doibase "
+}
+
+FUNCTION {noop.command}
+{
+ "\href@noop "
+}
+
+FUNCTION {href.command}
+{
+ "\href "
+}
+
+FUNCTION {link.tag.open}
+{
+ doi duplicate$ empty$
+ {
+ pop$
+ url duplicate$ empty$
+ {
+ pop$ "" noop.command
+ }{
+ href.command
+ }
+ if$
+ }
+ {
+ doi.base.command swap$ *
+ href.command
+ }
+ if$
+ "{" * swap$ * "} {" *
+}
+
+FUNCTION {link.tag.shut}
+{
+ "}"
+}
+
+FUNCTION {link.open}
+{
+ link.tag.open output.nopunct
+}
+
+FUNCTION {link.shut}
+{
+ link.tag.shut *
+}
+
+FUNCTION {add.doi}
+{
+ link.tag.open swap$ * link.tag.shut *
+}
+
+FUNCTION {select.language}
+{ duplicate$ empty$
+ 'pop$
+ { language empty$
+ 'skip$
+ { "{\selectlanguage {" language * "}" * swap$ * "}" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.note}
+{
+ note empty$
+ { "" }
+ { note #1 #1 substring$
+ duplicate$ "{" =
+ 'skip$
+ {
+ output.state after.word = output.state after.punctuation = or
+ { "l" }
+ { "u" }
+ if$ change.case$
+ }
+ if$
+ note #2 global.max$ substring$ * "note" bibinfo.check
+ }
+ if$
+}
+
+FUNCTION {bbl.enquote}
+{
+ "\enquote "
+}
+
+FUNCTION {string.enquote}
+{
+ punctuation.no 'punctuation.state :=
+ non.stop {
+ block.punctuation
+ } { "" } if$
+ swap$ pop$
+ *
+ bbl.enquote "{" * swap$ * "}" *
+ word.space *
+}
+
+FUNCTION {format.title}
+{ title
+ duplicate$ empty$ 'skip$ { "t" change.case$ } if$
+ duplicate$ "title" bibinfo.check swap$
+ duplicate$ empty$ 'pop$
+ {
+ punctuation.yes 'punctuation.state :=
+ string.enquote
+ select.language
+ }
+ if$
+}
+
+FUNCTION {end.quote.title}
+{ title empty$
+ 'skip$
+ { before.all 'output.state := }
+ if$
+}
+
+FUNCTION {format.name.apply}
+{
+ s nameptr
+ "{vv~}{ll}"
+ format.name$
+ cite.name.font
+}
+
+FUNCTION {format.full.names}
+{
+ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { format.name.apply
+ 't :=
+ nameptr #1 >
+ {
+ namesleft #1 >
+ { ", " * t * }
+ {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ {
+ 't :=
+ }
+ 'pop$
+ if$
+ t "others" =
+ {
+ " " * bbl.etal
+ emphasize *
+ }{
+ numnames #2 > { "," * }{ skip$ } if$
+ bbl.and
+ space.word * t *
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {make.full.names}
+{
+ key editor author
+ type$ "proceedings" =
+ type$ "book" =
+ type$ "inbook" =
+ or { pop$ }{ { pop$ "" }{ swap$ pop$ "" swap$ } if$ } if$
+ duplicate$ empty$
+ { pop$
+ duplicate$ empty$
+ { pop$
+ duplicate$ empty$
+ { pop$
+ cite$ #1 #3 substring$
+ }{
+ skip$
+ }
+ if$
+ }
+ { swap$ pop$ format.full.names }
+ if$
+ }
+ { swap$ pop$ swap$ pop$ format.full.names }
+ if$
+}
+
+FUNCTION {year.bibitem}
+{
+ year duplicate$ empty$
+ { pop$ ""
+ }{
+ skip$
+ } if$
+ extra.label *
+}
+
+FUNCTION {output.bibitem}
+{
+ newline$
+ ""
+ label
+ * ")" *
+ make.full.names duplicate$ short.list =
+ { pop$ }{ * } if$
+ bracify
+ "[" swap$ * "]" *
+ cite$ bracify "%" *
+ *
+ "\bibitem "
+ swap$ *
+ write$ newline$
+ " "
+ duplicate$ bbl.open * write$ newline$
+ before.all 'output.state :=
+ punctuation.yes 'punctuation.state :=
+}
+
+FUNCTION {n.dashify}
+{
+ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }{
+ { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }{
+ t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {word.in}
+{
+ bbl.in
+ word.space *
+}
+
+FUNCTION {date.encapsulate}
+{
+ duplicate$ empty$
+ 'skip$
+ {
+ before.all 'output.state :=
+ " (" swap$ * ")" *
+ }
+ if$
+}
+
+FUNCTION {format.date}
+{
+ year "year" bibinfo.check duplicate$ empty$
+ {
+ }
+ 'skip$
+ if$
+ extra.label *
+ date.encapsulate
+}
+
+FUNCTION {format.date.output.check}
+{
+ format.date
+ "year" output.check
+}
+
+FUNCTION {format.date.output}
+{
+ format.date.output.check
+}
+
+FUNCTION {format.btitle}
+{
+ booktitle duplicate$ empty$ { pop$
+ title
+ } 'skip$ if$
+ "title" bibinfo.check
+ duplicate$ empty$ 'skip$
+ {
+ emphasize
+ select.language
+ }
+ if$
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {editor.check.book}
+{ editor empty$ 'skip$
+ {
+ "can't use both author and editor fields in " cite$ *
+ ": try using @inbook instead" *
+ warning$
+ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume duplicate$ empty$
+ { pop$ "" }
+ {
+ "volume and number" number either.or.check
+ bbl.volume
+ capitalize
+ swap$
+ tie.or.space.prefix "volume" bibinfo.check * *
+ series "series" bibinfo.check duplicate$ empty$ 'pop$
+ {
+ ", "
+ * swap$ *
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.number}
+{
+ bbl.number
+ output.state after.word = output.state after.punctuation = or
+ #1 or
+ #0 and
+ 'skip$
+ { capitalize }
+ if$
+ number tie.or.space.prefix "number" bibinfo.check * *
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ {
+ series empty$
+ {
+ number "number" bibinfo.check
+ }{
+ format.number
+ series "series" bibinfo.check
+ word.space * swap$ *
+ }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {is.num}
+{ chr.to.int$
+ duplicate$ "0" chr.to.int$ < not
+ swap$ "9" chr.to.int$ > not and
+}
+
+FUNCTION {extract.num}
+{ duplicate$ 't :=
+ "" 's :=
+ { t empty$ not }
+ { t #1 #1 substring$
+ t #2 global.max$ substring$ 't :=
+ duplicate$ is.num
+ { s swap$ * 's := }
+ { pop$ "" 't := }
+ if$
+ }
+ while$
+ s empty$
+ 'skip$
+ { pop$ s }
+ if$
+}
+
+FUNCTION {convert.edition}
+{ extract.num "l" change.case$ 's :=
+ s "first" = s "1" = or
+ { bbl.first 't := }
+ { s "second" = s "2" = or
+ { bbl.second 't := }
+ { s "third" = s "3" = or
+ { bbl.third 't := }
+ { s "fourth" = s "4" = or
+ { bbl.fourth 't := }
+ { s "fifth" = s "5" = or
+ { bbl.fifth 't := }
+ { s #1 #1 substring$ is.num
+ { s
+ eng.ord
+ 't := }
+ { edition 't := }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ t
+}
+
+FUNCTION {format.edition}
+{ edition duplicate$ empty$ 'skip$
+ {
+ convert.edition
+ output.state after.word = output.state after.punctuation = or
+ { "l" }
+ { "t" }
+ if$ change.case$
+ "edition" bibinfo.check
+ word.space * bbl.edition *
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages duplicate$ empty$
+ 'skip$
+ { duplicate$ multi.page.check
+ {
+ bbl.pages swap$
+ n.dashify
+ }{
+ bbl.page swap$
+ }
+ if$
+ tie.or.space.prefix
+ "pages" bibinfo.check
+ * *
+ }
+ if$
+}
+
+FUNCTION {first.page}
+{ 't :=
+ ""
+ { t empty$ not t #1 #1 substring$ "-" = not and }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+}
+
+FUNCTION {format.book.pages}
+{
+ pages duplicate$ empty$ 'skip$
+ {
+ "pages" bibinfo.check word.space bbl.pages * *
+ }
+ if$
+}
+
+FUNCTION {volnum.punct}
+{
+ ","
+ word.space *
+}
+
+FUNCTION {format.journal.pages}
+{ pages duplicate$ empty$ 'pop$
+ { swap$ duplicate$ empty$
+ { pop$ pop$ format.pages }
+ { volnum.punct *
+ swap$
+ control.pages duplicate$ #0 < {
+ pop$ pop$
+ }{
+ #0 >
+ {
+ n.dashify
+ }{
+ first.page
+ } if$
+ } if$
+ "pages" bibinfo.check
+ *
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.journal.eid}
+{ eid "eid" bibinfo.check
+ duplicate$ empty$ 'pop$
+ { swap$ duplicate$ empty$ 'skip$
+ { volnum.punct * }
+ if$
+ swap$ *
+ }
+ if$
+}
+
+FUNCTION {eid.or.pages}
+{
+ eid empty$
+ { format.journal.pages }
+ { format.journal.eid }
+ if$
+}
+
+FUNCTION {format.ser.vol.num}
+{
+ series "series" bibinfo.check output
+ volume field.or.null
+ duplicate$ empty$ 'skip$
+ {
+ "volume" bibinfo.check
+ }
+ if$
+ bolden
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ {
+ format.pages
+ }
+ { type empty$
+ {
+ bbl.chapter
+ capitalize
+ }{
+ type
+ capitalize
+ "type" bibinfo.check
+ }
+ if$
+ chapter tie.or.space.prefix
+ "chapter" bibinfo.check
+ * *
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.booktitle}
+{
+ booktitle duplicate$ "booktitle" bibinfo.check swap$
+ duplicate$ empty$ 'pop$
+ {
+ punctuation.yes 'punctuation.state :=
+ pop$ emphasize
+ select.language
+ }
+ if$
+}
+
+FUNCTION {format.editor.in}
+{
+ editor "editor" format.names.ed duplicate$ empty$ 'skip$
+ {
+ bbl.edby
+ word.space * swap$ *
+ }
+ if$
+}
+
+FUNCTION {output.article.booktitle}
+{
+ format.booktitle
+ "booktitle" 'bibfield :=
+ output
+ bookaddress "address" bibinfo.check duplicate$ empty$ 'pop$
+ {
+ "address" 'bibfield :=
+ output.nonnull after.punctuation 'output.state :=
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{
+ format.booktitle duplicate$ empty$ 'pop$
+ {
+ add.doi
+ word.in swap$ * output.nonnull
+ bookaddress "address" bibinfo.check output
+ format.number.series "series and number" bibinfo.check output
+ format.bvolume output
+ format.editor.in "editor" bibinfo.check output
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle.inbook}
+{
+ format.booktitle duplicate$ empty$ 'pop$
+ {
+ add.doi
+ word.in swap$ * output.nonnull
+ bookaddress "address" bibinfo.check output
+ format.number.series "series and number" bibinfo.check output
+ format.bvolume output
+ author empty$ 'skip$
+ { format.editor.in "editor" bibinfo.check output }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type duplicate$ empty$
+ 'pop$
+ { swap$ pop$
+ "t" change.case$ "type" bibinfo.check
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ number "number" bibinfo.check
+ type duplicate$ empty$
+ { pop$ bbl.techrep }
+ 'skip$
+ if$
+ "type" bibinfo.check
+ swap$ duplicate$ empty$
+ { pop$ "t" change.case$ }
+ { tie.or.space.prefix * * }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{
+ word.in
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.book.crossref}
+{ volume duplicate$ empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ pop$ word.in
+ }
+ { bbl.volume
+ swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word *
+ }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{
+ word.in
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.org.or.pub}
+{ 't :=
+ ""
+ address "address" bibinfo.check
+ duplicate$ empty$
+ { pop$ t }
+ { t duplicate$ empty$
+ { pop$ }
+ {
+ "," word.space *
+ * swap$ *
+ }
+ if$
+ }
+ if$
+ *
+ year duplicate$ empty$
+ {
+ "empty year in " cite$ *
+ warning$
+ pop$ ""
+ }
+ 'skip$
+ if$
+ duplicate$ empty$
+ { pop$ }
+ {
+ "year" bibinfo.check
+ swap$
+ duplicate$ empty$
+ { pop$ }
+ {
+ "," *
+ word.space *
+ swap$ *
+ }
+ if$
+ }
+ if$
+ duplicate$ empty$ 'skip$ {
+ ""
+ "(" * swap$ * ")" *
+ after.punctuation 'output.state :=
+ punctuation.space 'punctuation.state :=
+ } if$
+}
+
+FUNCTION {format.publisher.address}
+{ publisher "publisher" bibinfo.warn format.org.or.pub
+}
+
+FUNCTION {format.organization.address}
+{ organization "organization" bibinfo.check format.org.or.pub
+}
+
+FUNCTION {format.organization.publisher.address}
+{
+ publisher empty$
+ { format.organization.address }
+ { organization "organization" bibinfo.check output
+ format.publisher.address
+ }
+ if$
+}
+
+FUNCTION {format.school.address.output}
+{
+ school "school" bibinfo.warn
+ address "address" bibinfo.check
+ duplicate$ empty$ 'skip$
+ {
+ swap$
+ duplicate$ empty$ 'skip$
+ {
+ ", " *
+ }
+ if$
+ swap$
+ }
+ if$
+ *
+ output
+}
+
+FUNCTION {article.title.produce}
+{
+ control.title duplicate$ #0 <
+ { pop$
+ }{
+ format.title
+ "title" 'bibfield :=
+ swap$ #0 >
+ {
+ "title" output.check
+ }{
+ output
+ } if$
+ new.block.comma
+ } if$
+}
+
+FUNCTION {control}
+{
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors
+ booktitle empty$ {
+ "author" output.check
+ }{ output } if$
+ author format.key output
+ new.block.comma
+ article.title.produce
+ output.article.booktitle
+ crossref missing$
+ {
+ link.open
+ journal
+ "journal" bibinfo.warn
+ "journal" 'bibfield :=
+ output
+ add.blank
+ format.ser.vol.num
+ output
+ eid.or.pages
+ format.date.output.check
+ pages empty$ {
+ doi output
+ } 'skip$ if$
+ link.shut
+ }{
+ format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ format.issn.output
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ format.translation output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ {
+ format.editors "author and editor" output.check
+ editor format.key output
+ }{
+ format.authors output.nonnull
+% crossref missing$ { editor.check.book } 'skip$ if$
+ }
+ if$
+ new.block.comma
+ link.open
+ format.btitle
+ "title" output.check
+ link.shut
+ format.edition output
+ author empty$
+ {
+ }
+ {
+ format.editor.in output
+ editor format.key output
+ }
+ if$
+ format.number.series output
+ crossref missing$
+ {
+ format.bvolume output
+ new.block.comma
+ format.publisher.address output
+ }{
+ new.block.comma
+ format.book.crossref output.nonnull
+ format.date.output.check
+ }
+ if$
+ format.isbn.output
+ format.chapter.pages
+ output
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ new.block.comma
+ link.open
+ format.title
+ "title" output.check
+ link.shut
+ new.block.comma
+ howpublished "howpublished" bibinfo.check output
+ address "address" bibinfo.check output
+ format.date.output
+ format.isbn.output
+ format.book.pages output
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {footnote}
+{ output.bibitem
+ format.note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ {
+ format.editors "editor" output.check
+ editor format.key output
+ }{
+ format.authors output.nonnull
+ author format.key output
+ }
+ if$
+ new.block.comma
+
+ format.title output
+ new.block.comma
+
+ crossref missing$
+ {
+ format.in.ed.booktitle.inbook
+ format.publisher.address output
+ format.chapter.pages
+ "chapter and pages"
+ output.check
+ new.block.comma
+ format.edition output
+ new.block.comma
+ }{
+ format.chapter.pages
+ "chapter and pages"
+ output.check
+ new.block.comma
+ format.book.crossref output.nonnull
+ format.date.output.check
+ }
+ if$
+ crossref missing$
+ { format.isbn.output }
+ 'skip$
+ if$
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ new.block.comma
+ article.title.produce
+ crossref missing$
+ {
+ format.in.ed.booktitle
+ format.publisher.address output
+ format.edition output
+ format.chapter.pages output
+ format.isbn.output
+ }{
+ format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ new.block.comma
+ article.title.produce
+ crossref missing$
+ {
+ format.in.ed.booktitle
+ format.organization.publisher.address output
+ format.chapter.pages output
+ format.isbn.output
+ format.issn.output
+ }{
+ format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+FUNCTION {manual}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ new.block.comma
+ link.open
+ format.btitle
+ "title" output.check
+ link.shut
+ organization "organization" bibinfo.check output
+ address "address" bibinfo.check output
+ format.edition output
+ format.date.output
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ new.block.comma
+ format.btitle
+ output
+ new.block.comma
+ link.open
+ bbl.mthesis
+ format.thesis.type
+ output.nonnull
+ link.shut
+ format.school.address.output
+ format.date.output.check
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ new.block.comma
+ link.open
+ format.title
+ output
+ link.shut
+ new.block.comma
+ howpublished "howpublished" bibinfo.check output
+ format.date.output
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ new.block.comma
+ format.btitle
+ output
+ new.block.comma
+ link.open
+ bbl.phdthesis
+ format.thesis.type
+ output.nonnull
+ link.shut
+ format.school.address.output
+ format.date.output.check
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {presentation}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ new.block.comma
+ link.open
+ format.title
+ output
+ link.shut
+ new.block.comma
+ format.organization.address "organization and address" output.check
+ month "month" output.check
+ year "year" output.check
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ new.sentence
+ type missing$ 'skip$
+ {"(" type capitalize * ")" * output}
+ if$
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ format.editors output
+ editor format.key output
+ new.block.comma
+ link.open
+ format.btitle
+ "title" output.check
+ link.shut
+ bookaddress "address" bibinfo.check output
+ format.number.series output
+ format.bvolume output
+ format.organization.publisher.address output
+ format.isbn.output
+ format.issn.output
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ new.block.comma
+ link.open
+ format.title
+ "title" output.check
+ link.shut
+ new.block.comma
+ format.tr.number
+ output.nonnull
+ institution "institution" bibinfo.warn
+ format.org.or.pub output
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ new.block.comma
+ link.open
+ format.title
+ "title" output.check
+ link.shut
+ format.date.output
+ new.block.comma
+ new.sentence.comma
+ format.note "note" output.check
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+READ
+
+EXECUTE {control.init}
+
+ITERATE {control.pass}
+
+EXECUTE {control.check}
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+FUNCTION {cite.name.font.apply}
+{
+ word.space * bbl.etal
+ emphasize
+ *
+}
+
+FUNCTION {format.lab.names}
+{ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ {
+ format.name.apply
+ 't :=
+ nameptr #1 >
+ {
+ nameptr
+ #2
+ =
+ numnames
+ #3
+ > and
+ {
+ "others" 't :=
+ #1 'namesleft :=
+ }
+ 'skip$
+ if$
+ namesleft #1 >
+ { ", " * t * }
+ {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ t "others" =
+ {
+ cite.name.font.apply
+ }{
+ numnames #2 > { "," * } 'skip$ if$
+ bbl.and
+ space.word * t *
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.label}
+{ editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {calc.short.authors}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.label
+ 'author.key.label
+ if$
+ }
+ if$
+ 'short.list :=
+}
+
+FUNCTION {calc.label}
+{
+ calc.short.authors
+ short.list
+ year duplicate$ empty$
+ {
+ pop$ ""
+ }{
+ control.year #0 > { purify$ #-1 #4 substring$ } 'skip$ if$
+ }
+ if$
+ "(" swap$ *
+ * 'label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{ll{ }}"
+ control.author.initials {
+ "{ f{ }}" *
+ }{
+ "{ ff{ }}" *
+ } if$
+ "{ jj{ }}" *
+ format.name$ 't :=
+ nameptr #1 >
+ {
+ " " *
+ namesleft #1 = t "others" = and
+ { "zzzzz" * }
+ {
+ t sortify *
+ }
+ if$
+ }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {year.sort.key}
+{
+ year
+}
+
+FUNCTION {editor.sort}
+{ editor empty$
+ { key empty$
+ { "to sort, need editor or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+INTEGERS { seq.num }
+
+FUNCTION {init.seq}
+{ #0 'seq.num :=}
+
+EXECUTE {init.seq}
+
+FUNCTION {int.to.fix}
+{ "000000000" swap$ int.to.str$ *
+ #-1 #10 substring$
+}
+
+FUNCTION {label.presort}
+{
+ calc.label
+ label sortify
+ " "
+ *
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.sort
+ 'author.sort
+ if$
+ }
+ if$
+ #1 entry.max$ substring$
+ 'sort.label :=
+ sort.label
+ *
+ " "
+ *
+ title field.or.null sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+FUNCTION {presort.pass}
+{ type$ "control" = 'control.presort 'label.presort if$
+}
+
+ITERATE {presort.pass}
+
+SORT
+
+STRINGS { last.label next.extra }
+
+INTEGERS { last.extra.num number.label }
+
+FUNCTION {initialize.extra.label.stuff}
+{ #0 int.to.chr$ 'last.label :=
+ "" 'next.extra :=
+ #0 'last.extra.num :=
+ #0 'number.label :=
+}
+
+FUNCTION {label.forward}
+{
+ last.label label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ label 'last.label :=
+ }
+ if$
+ number.label #1 + 'number.label :=
+}
+
+FUNCTION {label.reverse}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+ extra.label
+ duplicate$ empty$
+ 'skip$
+ { "{\natexlab{" swap$ * "}}" * }
+ if$
+ 'extra.label :=
+ label extra.label * 'label :=
+}
+
+EXECUTE {initialize.extra.label.stuff}
+
+FUNCTION {forward.pass}
+{ type$ "control" = 'control.forward 'label.forward if$
+}
+
+ITERATE {forward.pass}
+
+FUNCTION {reverse.pass}
+{ type$ "control" = 'control.reverse 'label.reverse if$
+}
+
+REVERSE {reverse.pass}
+
+FUNCTION {sortkey.sort}
+{ sort.label
+ " "
+ *
+ year.sort.key
+ field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+FUNCTION {bib.sort.pass}
+{ type$ "control" = 'control.sort 'sortkey.sort if$
+}
+
+ITERATE {bib.sort.pass}
+
+SORT
+
+FUNCTION {init.bib.eprint}
+{
+ "\texttt {"
+ pop$
+ "\providecommand \url [0]{\begingroup\@sanitize@url \@url }%" write$ newline$
+ "\providecommand \@url [1]{\endgroup\@href {#1}{" "}}%" bbl.url.prefix swap$ * * write$ newline$
+ "\providecommand " " [0]{URL }%" bbl.url.prefix swap$ * * write$ newline$
+ eprint.command "\providecommand " swap$ * "[0]{\href }%" * write$ newline$
+}
+
+FUNCTION {init.bib.doi}
+{
+ "\providecommand \doibase [0]{" doi.base "}%" * * write$ newline$
+}
+
+FUNCTION {init.bib.hypertex}
+{
+ "\providecommand " noop.command "[0]{\@secondoftwo}%" * * write$ newline$
+ "\providecommand " href.command "[0]{\begingroup \@sanitize@url \@href}%" * * write$ newline$
+ "\providecommand \@href[1]{\@@startlink{#1}\@@href}%" write$ newline$
+ "\providecommand \@@href[1]{\endgroup#1\@@endlink}%" write$ newline$
+ "\providecommand \@sanitize@url [0]{\catcode `\\12\catcode `\$12\catcode `\&12\catcode `\#12\catcode `\^12\catcode `\_12\catcode `\%12\relax}%" write$ newline$
+ "\providecommand \@@startlink[1]{}%" write$ newline$
+ "\providecommand \@@endlink[0]{}%" write$ newline$
+}
+
+FUNCTION {init.bib.namefont}
+{
+ "\providecommand \bibnamefont [1]{#1}%" write$ newline$
+ "\providecommand \bibfnamefont [1]{#1}%" write$ newline$
+ "\providecommand \citenamefont [1]{#1}%" write$ newline$
+}
+
+FUNCTION {init.bib.quote}
+{
+ "\providecommand " bbl.enquote * " [1]{" *
+ "``" "''"
+ "#1" swap$ "}%" * * * * write$ newline$
+}
+
+FUNCTION {init.bib.ay}
+{
+ "\providecommand \natexlab [1]{#1}%"
+ write$ newline$
+}
+
+FUNCTION {init.bib.bibinfo}
+{
+ bibinfo.command "\providecommand " swap$ * " [0]{\@secondoftwo}%" * write$ newline$
+ bibfield.command "\providecommand " swap$ * " [0]{\@secondoftwo}%" * write$ newline$
+}
+
+FUNCTION {init.bib.lang}
+{
+ "\providecommand \selectlanguage [0]{\@gobble}%" write$ newline$
+}
+
+FUNCTION {init.bib.endbibitem}
+{
+ "\providecommand " bbl.open * "[0]{}%" * write$ newline$
+ "\providecommand \bibitemStop [0]{}%" write$ newline$
+ "\providecommand \bibitemNoStop [0]{.\EOS\space}%" write$ newline$
+ "\providecommand \EOS [0]{\spacefactor3000\relax}%" write$ newline$
+}
+
+FUNCTION {init.bib.translation}
+{
+ "\providecommand \translation [1]{[#1]}%" write$ newline$
+}
+
+FUNCTION {warn.bib}
+{
+}
+
+FUNCTION {init.bib}
+{
+ warn.bib
+ "\makeatletter" write$ newline$
+ "\providecommand \@ifxundefined [1]{%" write$ newline$
+ " \@ifx{#1\undefined}" write$ newline$
+ "}%" write$ newline$
+ "\providecommand \@ifnum [1]{%" write$ newline$
+ " \ifnum #1\expandafter \@firstoftwo" write$ newline$
+ " \else \expandafter \@secondoftwo" write$ newline$
+ " \fi" write$ newline$
+ "}%" write$ newline$
+ "\providecommand \@ifx [1]{%" write$ newline$
+ " \ifx #1\expandafter \@firstoftwo" write$ newline$
+ " \else \expandafter \@secondoftwo" write$ newline$
+ " \fi" write$ newline$
+ "}%" write$ newline$
+ init.bib.ay
+ init.bib.quote
+ init.bib.namefont
+ init.bib.hypertex
+ init.bib.eprint
+ init.bib.doi
+ init.bib.lang
+ init.bib.bibinfo
+ init.bib.translation
+ init.bib.endbibitem
+ "\providecommand " bbl.shut * " [1]{\csname bibitem#1\endcsname}%" * write$ newline$
+ "\let\auto@bib@innerbib\@empty" write$ newline$
+ "%</preamble>" write$
+}
+
+FUNCTION {begin.bib}
+{
+ id.bst diagn.cmntlog
+ control.bib
+ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "\begin{thebibliography}{"
+ number.label int.to.str$
+ * "}%" *
+ write$ newline$
+ init.bib
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+ "\end{thebibliography}%"
+ write$ newline$
+}
+
+EXECUTE {end.bib}
+
+%% End of customized bst file
+%%
+%% End of file `aipauth4-1.bst'.
diff --git a/obsolete/macros/latex/contrib/revtex4-1/bibtex/bst/revtex/aipnum4-1.bst b/obsolete/macros/latex/contrib/revtex4-1/bibtex/bst/revtex/aipnum4-1.bst
new file mode 100644
index 0000000000..5233cc659d
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/bibtex/bst/revtex/aipnum4-1.bst
@@ -0,0 +1,3477 @@
+%%
+%% This is file `aipnum4-1.bst',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% merlin.mbs (with options: `head,ay,nat,lang,pres,pres-bf,seq-no,vonx,nm-init,ed-au,mcite,mct-1,mct-x3,nmft,nmft-def,fnm-def,nmfted,nmand-rm,lab,lab-def,and-rm,blkyear,yr-par,date-nil-x,tit-qq,inproceedings-chapter,jtit-x,inproceedings-chapter,article-booktitle,article-series,jttl-rm,journal-address,book-bt,thesis-title-o,techreport-institution-par,vol-bf,vnum-x,volp-com,jpg-1,book-editor-booktitle,inbook-editor-booktitle,bookaddress,num-xser,number-cap,chapter-cap,series-number,numser-booktitle,ser-vol,ser-rm,volume-cap,ser-ed,jnm-x,pg-bk,book-chapter-pages,pub-date,ay-empty-pub-parens-x,pre-pub,pre-edn,doi-link,doi,edby,blk-com,fin-endbibitem,pp,ed,abr,ednx,ord,jabr,etal-it,revdata,eprint,url,url-blk,translation,SLACcitation,numpages-x,url,url-prefix-x,bibinfo,bibfield,nfss,,{}')
+%% physjour.mbs (with options: `ay,nat,lang,pres,pres-bf,seq-no,vonx,nm-init,ed-au,mcite,mct-1,mct-x3,nmft,nmft-def,fnm-def,nmfted,nmand-rm,lab,lab-def,and-rm,blkyear,yr-par,date-nil-x,tit-qq,inproceedings-chapter,jtit-x,inproceedings-chapter,article-booktitle,article-series,jttl-rm,journal-address,book-bt,thesis-title-o,techreport-institution-par,vol-bf,vnum-x,volp-com,jpg-1,book-editor-booktitle,inbook-editor-booktitle,bookaddress,num-xser,number-cap,chapter-cap,series-number,numser-booktitle,ser-vol,ser-rm,volume-cap,ser-ed,jnm-x,pg-bk,book-chapter-pages,pub-date,ay-empty-pub-parens-x,pre-pub,pre-edn,doi-link,doi,edby,blk-com,fin-endbibitem,pp,ed,abr,ednx,ord,jabr,etal-it,revdata,eprint,url,url-blk,translation,SLACcitation,numpages-x,url,url-prefix-x,bibinfo,bibfield,nfss,,{}')
+%% geojour.mbs (with options: `ay,nat,lang,pres,pres-bf,seq-no,vonx,nm-init,ed-au,mcite,mct-1,mct-x3,nmft,nmft-def,fnm-def,nmfted,nmand-rm,lab,lab-def,and-rm,blkyear,yr-par,date-nil-x,tit-qq,inproceedings-chapter,jtit-x,inproceedings-chapter,article-booktitle,article-series,jttl-rm,journal-address,book-bt,thesis-title-o,techreport-institution-par,vol-bf,vnum-x,volp-com,jpg-1,book-editor-booktitle,inbook-editor-booktitle,bookaddress,num-xser,number-cap,chapter-cap,series-number,numser-booktitle,ser-vol,ser-rm,volume-cap,ser-ed,jnm-x,pg-bk,book-chapter-pages,pub-date,ay-empty-pub-parens-x,pre-pub,pre-edn,doi-link,doi,edby,blk-com,fin-endbibitem,pp,ed,abr,ednx,ord,jabr,etal-it,revdata,eprint,url,url-blk,translation,SLACcitation,numpages-x,url,url-prefix-x,bibinfo,bibfield,nfss,,{}')
+%% photjour.mbs (with options: `ay,nat,lang,pres,pres-bf,seq-no,vonx,nm-init,ed-au,mcite,mct-1,mct-x3,nmft,nmft-def,fnm-def,nmfted,nmand-rm,lab,lab-def,and-rm,blkyear,yr-par,date-nil-x,tit-qq,inproceedings-chapter,jtit-x,inproceedings-chapter,article-booktitle,article-series,jttl-rm,journal-address,book-bt,thesis-title-o,techreport-institution-par,vol-bf,vnum-x,volp-com,jpg-1,book-editor-booktitle,inbook-editor-booktitle,bookaddress,num-xser,number-cap,chapter-cap,series-number,numser-booktitle,ser-vol,ser-rm,volume-cap,ser-ed,jnm-x,pg-bk,book-chapter-pages,pub-date,ay-empty-pub-parens-x,pre-pub,pre-edn,doi-link,doi,edby,blk-com,fin-endbibitem,pp,ed,abr,ednx,ord,jabr,etal-it,revdata,eprint,url,url-blk,translation,SLACcitation,numpages-x,url,url-prefix-x,bibinfo,bibfield,nfss,,{}')
+%% merlin.mbs (with options: `tail,ay,nat,lang,pres,pres-bf,seq-no,vonx,nm-init,ed-au,mcite,mct-1,mct-x3,nmft,nmft-def,fnm-def,nmfted,nmand-rm,lab,lab-def,and-rm,blkyear,yr-par,date-nil-x,tit-qq,inproceedings-chapter,jtit-x,inproceedings-chapter,article-booktitle,article-series,jttl-rm,journal-address,book-bt,thesis-title-o,techreport-institution-par,vol-bf,vnum-x,volp-com,jpg-1,book-editor-booktitle,inbook-editor-booktitle,bookaddress,num-xser,number-cap,chapter-cap,series-number,numser-booktitle,ser-vol,ser-rm,volume-cap,ser-ed,jnm-x,pg-bk,book-chapter-pages,pub-date,ay-empty-pub-parens-x,pre-pub,pre-edn,doi-link,doi,edby,blk-com,fin-endbibitem,pp,ed,abr,ednx,ord,jabr,etal-it,revdata,eprint,url,url-blk,translation,SLACcitation,numpages-x,url,url-prefix-x,bibinfo,bibfield,nfss,,{}')
+%% ----------------------------------------
+%% *** REVTeX-compatible aipnum4-1.bst 2010-07-25 ***
+%%
+%% Copyright 1994-2007 Patrick W Daly
+ % ===============================================================
+ % IMPORTANT NOTICE:
+ % This bibliographic style (bst) file has been generated from one or
+ % more master bibliographic style (mbs) files, listed above.
+ %
+ % This generated file can be redistributed and/or modified under the terms
+ % of the LaTeX Project Public License Distributed from CTAN
+ % archives in directory macros/latex/base/lppl.txt; either
+ % version 1 of the License, or any later version.
+ % ===============================================================
+ % Name and version information of the main mbs file:
+ % For use with BibTeX version 0.99a or later
+ %-------------------------------------------------------------------
+ % This bibliography style file is intended for texts in ENGLISH
+ % This is an author-year citation style bibliography. As such, it is
+ % non-standard LaTeX, and requires a special package file to function properly.
+ % Such a package is natbib.sty by Patrick W. Daly
+ % The form of the \bibitem entries is
+ % \bibitem[Jones et al.(1990)]{key}...
+ % \bibitem[Jones et al.(1990)Jones, Baker, and Smith]{key}...
+ % The essential feature is that the label (the part in brackets) consists
+ % of the author names, as they should appear in the citation, with the year
+ % in parentheses following. There must be no space before the opening
+ % parenthesis!
+ % With natbib v5.3, a full list of authors may also follow the year.
+ % In natbib.sty, it is possible to define the type of enclosures that is
+ % really wanted (brackets or parentheses), but in either case, there must
+ % be parentheses in the label.
+ % The \cite command functions as follows:
+ % \citet{key} ==>> Jones et al. (1990)
+ % \citet*{key} ==>> Jones, Baker, and Smith (1990)
+ % \citep{key} ==>> (Jones et al., 1990)
+ % \citep*{key} ==>> (Jones, Baker, and Smith, 1990)
+ % \citep[chap. 2]{key} ==>> (Jones et al., 1990, chap. 2)
+ % \citep[e.g.][]{key} ==>> (e.g. Jones et al., 1990)
+ % \citep[e.g.][p. 32]{key} ==>> (e.g. Jones et al., p. 32)
+ % \citeauthor{key} ==>> Jones et al.
+ % \citeauthor*{key} ==>> Jones, Baker, and Smith
+ % \citeyear{key} ==>> 1990
+ %---------------------------------------------------------------------
+
+FUNCTION {id.bst} {"merlin.mbs aipnum4-1.bst 2010-07-25 4.21a (PWD, AO, DPC) hacked"}
+ENTRY
+{
+ address
+ archive
+ archivePrefix
+ author
+ bookaddress
+ booktitle
+ chapter
+ collaboration
+ doi
+ edition
+ editor
+ eid
+ eprint
+ howpublished
+ institution
+ isbn
+ issn
+ journal
+ key
+ language
+ month
+ note
+ number
+ organization
+ pages
+ primaryClass
+ publisher
+ school
+ SLACcitation
+ series
+ title
+ translation
+ type
+ url
+ volume
+ year
+}{
+}{
+ label
+ extra.label sort.label
+ short.list
+}
+
+INTEGERS
+{
+ output.state before.all
+ after.word after.punctuation
+ after.sentence after.block
+}
+
+INTEGERS
+{
+ punctuation.state punctuation.no punctuation.space punctuation.yes
+}
+
+STRINGS { bibfield output.bibfield }
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {non.stop}
+{ duplicate$
+ "}" * add.period$
+ #-1 #1 substring$ "." =
+}
+
+INTEGERS { arith.mulitplier arith.multiplicand }
+
+FUNCTION {multiply}
+{
+ 'arith.multiplicand :=
+ 'arith.mulitplier :=
+ #0
+ { arith.mulitplier #0 > }
+ { arith.multiplicand +
+ arith.mulitplier #1 - 'arith.mulitplier :=
+ }
+ while$
+}
+
+FUNCTION {chr.to.hex}
+{
+ chr.to.int$
+ duplicate$ "0" chr.to.int$ -
+ duplicate$ duplicate$ #0 < swap$ #9 > or not
+ { swap$ pop$ }
+ { pop$
+ duplicate$ "A" chr.to.int$ -
+ duplicate$ duplicate$ #0 < swap$ #5 > or not
+ { swap$ pop$ #10 + }
+ { pop$
+ duplicate$ "a" chr.to.int$ -
+ duplicate$ duplicate$ #0 < swap$ #5 > or not
+ { swap$ pop$ #10 + }
+ { pop$
+ pop$ #-1
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+INTEGERS { arith.accumulator }
+
+FUNCTION {str.to.hex}
+{ #0 'arith.accumulator :=
+ { duplicate$ empty$ not }
+ { duplicate$ #1 #1 substring$ chr.to.hex
+ duplicate$ #0 <
+ { pop$ pop$ ""
+ }
+ { arith.accumulator #16 multiply + 'arith.accumulator :=
+ #2 global.max$ substring$
+ }
+ if$
+ }
+ while$
+ pop$ arith.accumulator
+}
+
+FUNCTION {diagn.cmntlog}
+{
+ duplicate$ top$ "%" swap$ * write$ newline$
+}
+
+INTEGERS { control.key control.author control.editor control.title control.pages control.eprint control.year }
+
+INTEGERS { control.author.jnrlst control.author.dotless control.author.nospace control.author.initials control.author.nocomma control.author.first control.author.reversed }
+
+FUNCTION { control.init }
+{
+ #0
+ 'control.key :=
+ #0
+ #8 +
+ 'control.author :=
+ #0
+ 'control.author.jnrlst :=
+ #0
+ 'control.author.dotless :=
+ #0
+ 'control.author.nospace :=
+ #1
+ 'control.author.initials :=
+ #0
+ 'control.author.nocomma :=
+ #0
+ 'control.author.first :=
+ #0
+ 'control.author.reversed :=
+ #1
+ 'control.editor :=
+ #-1
+ 'control.title :=
+ #0
+ 'control.pages :=
+ #0
+ 'control.eprint :=
+ #1
+ 'control.year :=
+}
+
+FUNCTION {warning.dependency}
+{
+ " (dependency: " * swap$ * ") set " * swap$ int.to.str$ * warning$
+}
+
+FUNCTION {control.check}
+{
+ control.editor
+ {
+ "editor formatted same as author"
+ control.author.reversed {
+ duplicate$ #0 swap$ "reversed" warning.dependency
+ #0 'control.author.reversed :=
+ } 'skip$ if$
+ control.author.first {
+ duplicate$ #0 swap$ "first" warning.dependency
+ #0 'control.author.first :=
+ } 'skip$ if$
+ control.author.nocomma {
+ duplicate$ #0 swap$ "nocomma" warning.dependency
+ #0 'control.author.nocomma :=
+ } 'skip$ if$
+ pop$
+ } 'skip$ if$
+ control.author.reversed 'skip$
+ {
+ "not reversed"
+ control.author.nospace {
+ duplicate$ #0 swap$ "nospace" warning.dependency
+ #0 'control.author.nospace :=
+ } 'skip$ if$
+ control.author.jnrlst 'skip$ {
+ duplicate$ #1 swap$ "jnrlst" warning.dependency
+ #1 'control.author.jnrlst :=
+ } if$
+ control.author.initials {
+ duplicate$ ", initials" *
+ control.author.dotless {
+ duplicate$ #0 swap$ "dotless" warning.dependency
+ #0 'control.author.dotless :=
+ } 'skip$ if$
+ pop$
+ } 'skip$ if$
+ pop$
+ }
+ if$
+ control.author.initials 'skip$ {
+ "not initials"
+ control.author.nocomma {
+ duplicate$ #0 swap$ "nocomma" warning.dependency
+ #0 'control.author.nocomma :=
+ } 'skip$ if$
+ control.author.nospace {
+ duplicate$ #0 swap$ "nospace" warning.dependency
+ #0 'control.author.nospace :=
+ } 'skip$ if$
+ control.author.dotless 'skip$ {
+ duplicate$ #1 swap$ "dotless" warning.dependency
+ #1 'control.author.dotless :=
+ } if$
+ pop$
+ } if$
+}
+
+FUNCTION {control.parse}
+{
+ duplicate$ duplicate$ missing$
+ {
+ pop$ pop$ pop$
+ }
+ { empty$
+ {
+ pop$ #-1
+ }{
+ str.to.hex
+ }
+ if$
+ swap$ :=
+ }
+ if$
+}
+
+FUNCTION {control.dump}
+{
+ duplicate$ missing$ { pop$ "N/A" } 'skip$ if$
+ "{" swap$ * "}, " *
+ *
+}
+
+INTEGERS { decode.threshold }
+
+FUNCTION {control.decode}
+{
+ - duplicate$
+ #0 <
+ {
+ skip$ pop$ swap$ #0
+ }
+ {
+ swap$ pop$ swap$ #1
+ }
+ if$
+ swap$ :=
+}
+
+FUNCTION {control.author.decode}
+{
+ control.author
+ duplicate$ duplicate$ #0 < swap$ #128 < not or
+ {
+ int.to.str$ "(" swap$ * ")" *
+ "Control cannot interpret author " swap$ *
+ warning$
+ }{
+ 'control.author.jnrlst swap$ duplicate$ #64 control.decode
+ 'control.author.dotless swap$ duplicate$ #32 control.decode
+ 'control.author.nospace swap$ duplicate$ #16 control.decode
+ 'control.author.initials swap$ duplicate$ #8 control.decode
+ 'control.author.nocomma swap$ duplicate$ #4 control.decode
+ 'control.author.first swap$ duplicate$ #2 control.decode
+ 'control.author.reversed swap$ duplicate$ #1 control.decode
+ duplicate$ #0 =
+ 'skip$
+ {
+ "Control: residue of author"
+ "(" swap$ * ")" * *
+ warning$
+ }
+ if$
+ pop$
+ }
+ if$
+}
+
+FUNCTION {control.setup}
+{
+ type$ cite$ "{" swap$ * "}, " * *
+ "control.key" key control.dump *
+ "control.author" author control.dump *
+ "control.editor" editor control.dump *
+ "control.title" title control.dump *
+ "control.pages" pages control.dump *
+ "control.year" year control.dump *
+ "control.eprint" eprint control.dump *
+ top$
+ 'control.key key control.parse
+ 'control.author author control.parse
+ 'control.editor editor control.parse
+ 'control.title title control.parse
+ 'control.pages pages control.parse
+ 'control.year year control.parse
+ 'control.eprint eprint control.parse
+ control.author.decode
+}
+
+FUNCTION {control.pass}
+{ type$ "control" = 'control.setup 'skip$ if$
+}
+
+FUNCTION {control.presort}
+{
+}
+
+FUNCTION {control.forward}
+{
+}
+
+FUNCTION {control.reverse}
+{
+}
+
+FUNCTION {control.sort}
+{
+}
+
+FUNCTION {control.longest.label}
+{
+}
+
+FUNCTION {control.key.bib}
+{
+ "Control: key "
+ control.key
+ duplicate$ "(" swap$ int.to.str$ * ") " * swap$
+ pop$ *
+ diagn.cmntlog
+}
+
+FUNCTION {control.author.bib}
+{
+ "Control: author "
+ control.author "(" swap$ int.to.str$ * ")" * *
+ control.author.reversed { " reversed" * }{} if$
+ control.author.first { " first" * }{} if$
+ control.author.nocomma { " nocomma" * }{} if$
+ control.author.initials { " initials" * }{} if$
+ control.author.nospace { " nospace" * }{} if$
+ control.author.dotless { " dotless" * }{} if$
+ control.author.jnrlst { " jnrlst" * }{} if$
+ diagn.cmntlog
+}
+
+FUNCTION {control.editor.bib}
+{
+ "Control: editor formatted "
+ control.editor
+ duplicate$ "(" swap$ int.to.str$ * ") " * swap$
+ duplicate$ #0 < {
+ pop$
+ "disabled!"
+ } {
+ #0 > {
+ "identically to author"
+ } {
+ "differently from author"
+ } if$
+ } if$ * *
+ diagn.cmntlog
+}
+
+FUNCTION {control.title.bib}
+{
+ "Control: production of article title "
+ control.title
+ duplicate$ "(" swap$ int.to.str$ * ") " * swap$
+ duplicate$ #0 < {
+ pop$
+ "disabled"
+ } {
+ #0 > {
+ "required"
+ } {
+ "allowed"
+ } if$
+ } if$ * *
+ diagn.cmntlog
+}
+
+FUNCTION {control.pages.bib}
+{
+ "Control: page "
+ control.pages
+ duplicate$ "(" swap$ int.to.str$ * ") " * swap$
+ duplicate$ #0 < {
+ pop$
+ "none"
+ } {
+ #0 > {
+ "range"
+ } {
+ "single"
+ } if$
+ } if$ * *
+ diagn.cmntlog
+}
+
+FUNCTION {control.year.bib}
+{
+ "Control: year "
+ control.year
+ duplicate$ "(" swap$ int.to.str$ * ") " * swap$
+ duplicate$ #0 < {
+ pop$
+ "disabled!"
+ } {
+ #0 > {
+ "truncated"
+ } {
+ "verbatim"
+ } if$
+ } if$ * *
+ diagn.cmntlog
+}
+
+FUNCTION {control.eprint.bib}
+{
+ "Control: production of eprint "
+ control.eprint
+ duplicate$ "(" swap$ int.to.str$ * ") " * swap$
+ #0 < { "disabled" } { "enabled" } if$ * *
+ diagn.cmntlog
+}
+
+FUNCTION {control.bib}
+{
+ control.key.bib
+ control.author.bib
+ control.editor.bib
+ control.title.bib
+ control.pages.bib
+ control.year.bib
+ control.eprint.bib
+}
+
+FUNCTION {init.state.consts}
+{
+ #0 'before.all :=
+ #1 'after.word :=
+ #2 'after.punctuation :=
+ #3 'after.sentence :=
+ #4 'after.block :=
+ #0 'punctuation.no :=
+ #1 'punctuation.space :=
+ #2 'punctuation.yes :=
+ "" 'bibfield :=
+ "" 'output.bibfield :=
+}
+
+STRINGS { s t}
+FUNCTION {block.punctuation}
+{ ""
+ "," *
+}
+
+FUNCTION {word.space}
+{
+ "\ "
+}
+
+FUNCTION {show.stackstring.one}{
+ "(" *
+ output.state int.to.str$ *
+ "," * punctuation.state int.to.str$ *
+ ")" * top$
+ duplicate$ "1(" swap$ * ")" * top$
+}
+
+FUNCTION {show.stackstring.two}{
+ "(" *
+ output.state int.to.str$ *
+ "," * punctuation.state int.to.str$ *
+ ")" * top$
+ swap$
+ duplicate$ "1(" swap$ * ")" * top$
+ swap$
+ duplicate$ "2(" swap$ * ")" * top$
+}
+
+FUNCTION {bibfield.command}{ "\bibfield "}
+
+FUNCTION {output.nonnull}
+{
+ swap$
+ output.state after.word =
+ {
+ block.punctuation *
+ word.space *
+ }
+ {
+ output.state after.punctuation =
+ {
+ word.space *
+ }
+ {
+ output.state after.block = output.state after.sentence = or
+ {
+ add.period$
+ "\EOS\ " *
+ }{
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ output.bibfield duplicate$ empty$ 'pop$
+ {
+ bibfield.command
+ " {" * swap$ * "} {" * swap$ * "}" *
+ }
+ if$
+ write$
+ bibfield 'output.bibfield := "" 'bibfield :=
+ output.state after.block =
+ {
+ newline$
+ "\newblock " write$
+ }
+ 'skip$
+ if$
+ punctuation.state duplicate$
+ punctuation.yes 'punctuation.state :=
+ punctuation.no =
+ { pop$ before.all }
+ { punctuation.yes = { after.word }{ after.punctuation } if$ }
+ if$
+ 'output.state :=
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ {
+ pop$
+ "" 'bibfield :=
+ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.nopunct}
+{
+ punctuation.no 'punctuation.state :=
+ output.nonnull
+}
+
+FUNCTION {output.check}
+{ swap$
+ duplicate$ empty$
+ { pop$ "empty " swap$ * " in " * cite$ * warning$ }
+ { swap$ pop$ output.nonnull }
+ if$
+}
+
+FUNCTION {bbl.open} { "\BibitemOpen " }
+
+FUNCTION {bbl.shut} { "\BibitemShut " }
+
+FUNCTION {bibitem.shut.stop} { bbl.shut "{Stop}%" * }
+
+FUNCTION {bibitem.shut.nostop} { bbl.shut "{NoStop}%" * }
+
+FUNCTION {bibitem.shut}
+{
+ non.stop
+ {
+ bibitem.shut.nostop *
+ }{
+ bibitem.shut.stop *
+ }
+ if$
+}
+
+FUNCTION {html.itag} {
+ "p"
+}
+
+FUNCTION {html.ltag} {
+ ""
+}
+
+FUNCTION {output.SLACcitation}
+{ SLACcitation empty$
+ 'skip$
+ {
+ newline$
+ SLACcitation write$
+ }
+ if$
+}
+
+FUNCTION {fin.entry}
+{
+ bibitem.shut
+ write$
+ output.SLACcitation
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.block.comma}
+{
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block = output.state before.all = or
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence.comma}
+{
+}
+
+FUNCTION {sentence.or.colon}
+{
+ new.sentence
+}
+
+FUNCTION {add.blank}
+{
+ word.space *
+ before.all 'output.state :=
+}
+
+FUNCTION {no.blank.or.punct}
+{
+ "\hspace {0pt}" *
+ before.all 'output.state :=
+}
+
+FUNCTION {date.block}
+{
+ new.block.comma
+ skip$
+}
+
+STRINGS {z}
+FUNCTION {remove.dots}
+{
+ control.author.dotless {
+ 'z :=
+ ""
+ { z empty$ not }
+ { z #1 #1 substring$
+ z #2 global.max$ substring$ 'z :=
+ duplicate$ "." = 'pop$
+ { * }
+ if$
+ }
+ while$
+ } 'skip$ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{
+ duplicate$ empty$
+ { pop$ "" }
+ {
+ "\emph {" swap$ * "}" *
+ }
+ if$
+}
+
+FUNCTION {bolden}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "\textbf {" swap$ * "}" * }
+ if$
+}
+
+FUNCTION {bib.name.font}
+{
+ duplicate$ empty$
+ { pop$ "" }
+ {
+ "\bibnamefont {" swap$ * "}" *
+ }
+ if$
+}
+
+FUNCTION {bib.fname.font}
+{
+ duplicate$ empty$
+ { pop$ "" }
+ {
+ "\bibfnamefont {" swap$ * "}" *
+ }
+ if$
+}
+
+FUNCTION {cite.name.font}
+{
+ duplicate$ empty$
+ { pop$ "" }
+ {
+ "\citenamefont {" swap$ * "}" *
+ }
+ if$
+}
+
+FUNCTION {tie.or.space.prefix}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { word.space }
+ if$
+ swap$
+}
+
+FUNCTION {capitalize}
+{
+ "u" change.case$ "t" change.case$
+}
+
+FUNCTION {space.word}
+{ word.space swap$ * word.space * }
+
+ % Here are the language-specific definitions for explicit words.
+ % Each function has a name bbl.xxx where xxx is the English word.
+ % The language selected here is ENGLISH
+
+FUNCTION {bbl.and}
+{
+ "and"
+}
+
+FUNCTION {bbl.etal}
+{
+ "et~al."
+}
+
+FUNCTION {bbl.editors}
+{
+ "eds."
+}
+
+FUNCTION {bbl.editor}
+{
+ "ed."
+}
+
+FUNCTION {bbl.edby}
+{ "edited by" }
+
+FUNCTION {bbl.edition}
+{
+ "ed."
+}
+
+FUNCTION {bbl.volume}
+{
+ "vol."
+}
+
+FUNCTION {bbl.of}
+{ "of" }
+
+FUNCTION {bbl.number}
+{
+ "no."
+}
+
+FUNCTION {bbl.nr}
+{ "no." }
+
+FUNCTION {bbl.in}
+{ "in" }
+
+FUNCTION {bbl.pages}
+{
+ "pp."
+}
+
+FUNCTION {bbl.page}
+{
+ "p."
+}
+
+FUNCTION {bbl.eidpp}
+{ "pages" }
+
+FUNCTION {bbl.chapter}
+{
+ "chap."
+}
+
+FUNCTION {bbl.techrep}
+{
+ "Tech. Rep."
+}
+
+FUNCTION {bbl.mthesis}
+{ "Master's thesis" }
+
+FUNCTION {bbl.phdthesis}
+{ "Ph.D. thesis" }
+
+FUNCTION {bbl.first}
+{
+ "1st"
+}
+
+FUNCTION {bbl.second}
+{
+ "2nd"
+}
+
+FUNCTION {bbl.third}
+{
+ "3rd"
+}
+
+FUNCTION {bbl.fourth}
+{
+ "4th"
+}
+
+FUNCTION {bbl.fifth}
+{
+ "5th"
+}
+
+FUNCTION {bbl.st}
+{ "st" }
+
+FUNCTION {bbl.nd}
+{ "nd" }
+
+FUNCTION {bbl.rd}
+{ "rd" }
+
+FUNCTION {bbl.th}
+{ "th" }
+
+MACRO {jan} {"Jan."}
+
+MACRO {feb} {"Feb."}
+
+MACRO {mar} {"Mar."}
+
+MACRO {apr} {"Apr."}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"Jun."}
+
+MACRO {jul} {"Jul."}
+
+MACRO {aug} {"Aug."}
+
+MACRO {sep} {"Sep."}
+
+MACRO {oct} {"Oct."}
+
+MACRO {nov} {"Nov."}
+
+MACRO {dec} {"Dec."}
+
+FUNCTION {bbl.url.prefix}
+{
+ "\urlprefix "
+}
+
+FUNCTION {eng.ord}
+{ duplicate$ "1" swap$ *
+ #-2 #1 substring$ "1" =
+ { bbl.th * }
+ { duplicate$ #-1 #1 substring$
+ duplicate$ "1" =
+ { pop$ bbl.st * }
+ { duplicate$ "2" =
+ { pop$ bbl.nd * }
+ { "3" =
+ { bbl.rd * }
+ { bbl.th * }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+ %-------------------------------------------------------------------
+ % Begin module:
+ % \ProvidesFile{physjour.mbs}[2002/01/14 2.2 (PWD)]
+MACRO {aa}{"Astron. \& Astrophys."}
+MACRO {aasup}{"Astron. \& Astrophys. Suppl. Ser."}
+MACRO {aj} {"Astron. J."}
+MACRO {aph} {"Acta Phys."}
+MACRO {advp} {"Adv. Phys."}
+MACRO {ajp} {"Amer. J. Phys."}
+MACRO {ajm} {"Amer. J. Math."}
+MACRO {amsci} {"Amer. Sci."}
+MACRO {anofd} {"Ann. Fluid Dyn."}
+MACRO {am} {"Ann. Math."}
+MACRO {ap} {"Ann. Phys. (NY)"}
+MACRO {adp} {"Ann. Phys. (Leipzig)"}
+MACRO {ao} {"Appl. Opt."}
+MACRO {apl} {"Appl. Phys. Lett."}
+MACRO {app} {"Astroparticle Phys."}
+MACRO {apj} {"Astrophys. J."}
+MACRO {apjsup} {"Astrophys. J. Suppl."}
+MACRO {apss} {"Astrophys. Space Sci."}
+MACRO {araa} {"Ann. Rev. Astron. Astrophys."}
+MACRO {baas} {"Bull. Amer. Astron. Soc."}
+MACRO {baps} {"Bull. Amer. Phys. Soc."}
+MACRO {cmp} {"Comm. Math. Phys."}
+MACRO {cpam} {"Commun. Pure Appl. Math."}
+MACRO {cppcf} {"Comm. Plasma Phys. \& Controlled Fusion"}
+MACRO {cpc} {"Comp. Phys. Comm."}
+MACRO {cqg} {"Class. Quant. Grav."}
+MACRO {cra} {"C. R. Acad. Sci. A"}
+MACRO {fed} {"Fusion Eng. \& Design"}
+MACRO {ft} {"Fusion Tech."}
+MACRO {grg} {"Gen. Relativ. Gravit."}
+MACRO {ieeens} {"IEEE Trans. Nucl. Sci."}
+MACRO {ieeeps} {"IEEE Trans. Plasma Sci."}
+MACRO {ijimw} {"Interntl. J. Infrared \& Millimeter Waves"}
+MACRO {ip} {"Infrared Phys."}
+MACRO {irp} {"Infrared Phys."}
+MACRO {jap} {"J. Appl. Phys."}
+MACRO {jasa} {"J. Acoust. Soc. America"}
+MACRO {jcp} {"J. Comp. Phys."}
+MACRO {jetp} {"Sov. Phys.--JETP"}
+MACRO {jfe} {"J. Fusion Energy"}
+MACRO {jfm} {"J. Fluid Mech."}
+MACRO {jmp} {"J. Math. Phys."}
+MACRO {jne} {"J. Nucl. Energy"}
+MACRO {jnec} {"J. Nucl. Energy, C: Plasma Phys., Accelerators, Thermonucl. Res."}
+MACRO {jnm} {"J. Nucl. Mat."}
+MACRO {jpc} {"J. Phys. Chem."}
+MACRO {jpp} {"J. Plasma Phys."}
+MACRO {jpsj} {"J. Phys. Soc. Japan"}
+MACRO {jsi} {"J. Sci. Instrum."}
+MACRO {jvst} {"J. Vac. Sci. \& Tech."}
+MACRO {nat} {"Nature"}
+MACRO {nature} {"Nature"}
+MACRO {nedf} {"Nucl. Eng. \& Design/Fusion"}
+MACRO {nf} {"Nucl. Fusion"}
+MACRO {nim} {"Nucl. Inst. \& Meth."}
+MACRO {nimpr} {"Nucl. Inst. \& Meth. in Phys. Res."}
+MACRO {np} {"Nucl. Phys."}
+MACRO {npb} {"Nucl. Phys. B"}
+MACRO {nt/f} {"Nucl. Tech./Fusion"}
+MACRO {npbpc} {"Nucl. Phys. B (Proc. Suppl.)"}
+MACRO {inc} {"Nuovo Cimento"}
+MACRO {nc} {"Nuovo Cimento"}
+MACRO {pf} {"Phys. Fluids"}
+MACRO {pfa} {"Phys. Fluids A: Fluid Dyn."}
+MACRO {pfb} {"Phys. Fluids B: Plasma Phys."}
+MACRO {pl} {"Phys. Lett."}
+MACRO {pla} {"Phys. Lett. A"}
+MACRO {plb} {"Phys. Lett. B"}
+MACRO {prep} {"Phys. Rep."}
+MACRO {pnas} {"Proc. Nat. Acad. Sci. USA"}
+MACRO {pp} {"Phys. Plasmas"}
+MACRO {ppcf} {"Plasma Phys. \& Controlled Fusion"}
+MACRO {phitrsl} {"Philos. Trans. Roy. Soc. London"}
+MACRO {prl} {"Phys. Rev. Lett."}
+MACRO {pr} {"Phys. Rev."}
+MACRO {physrev} {"Phys. Rev."}
+MACRO {pra} {"Phys. Rev. A"}
+MACRO {prb} {"Phys. Rev. B"}
+MACRO {prc} {"Phys. Rev. C"}
+MACRO {prd} {"Phys. Rev. D"}
+MACRO {pre} {"Phys. Rev. E"}
+MACRO {ps} {"Phys. Scripta"}
+MACRO {procrsl} {"Proc. Roy. Soc. London"}
+MACRO {rmp} {"Rev. Mod. Phys."}
+MACRO {rsi} {"Rev. Sci. Inst."}
+MACRO {science} {"Science"}
+MACRO {sciam} {"Sci. Am."}
+MACRO {sam} {"Stud. Appl. Math."}
+MACRO {sjpp} {"Sov. J. Plasma Phys."}
+MACRO {spd} {"Sov. Phys.--Doklady"}
+MACRO {sptp} {"Sov. Phys.--Tech. Phys."}
+MACRO {spu} {"Sov. Phys.--Uspeki"}
+MACRO {st} {"Sky and Telesc."}
+ % End module: physjour.mbs
+ %-------------------------------------------------------------------
+ % Begin module:
+ % \ProvidesFile{geojour.mbs}[2002/07/10 2.0h (PWD)]
+MACRO {aisr} {"Adv. Space Res."}
+MACRO {ag} {"Ann. Geophys."}
+MACRO {anigeo} {"Ann. Geofis."}
+MACRO {angl} {"Ann. Glaciol."}
+MACRO {andmet} {"Ann. d. Meteor."}
+MACRO {andgeo} {"Ann. d. Geophys."}
+MACRO {andphy} {"Ann. Phys.-Paris"}
+MACRO {afmgb} {"Arch. Meteor. Geophys. Bioklimatol."}
+MACRO {atph} {"Atm\'osphera"}
+MACRO {aao} {"Atmos. Ocean"}
+MACRO {ass}{"Astrophys. Space Sci."}
+MACRO {atenv} {"Atmos. Environ."}
+MACRO {aujag} {"Aust. J. Agr. Res."}
+MACRO {aumet} {"Aust. Meteorol. Mag."}
+MACRO {blmet} {"Bound.-Lay. Meteorol."}
+MACRO {bams} {"Bull. Amer. Meteorol. Soc."}
+MACRO {cch} {"Clim. Change"}
+MACRO {cdyn} {"Clim. Dynam."}
+MACRO {cbul} {"Climatol. Bull."}
+MACRO {cap} {"Contrib. Atmos. Phys."}
+MACRO {dsr} {"Deep-Sea Res."}
+MACRO {dhz} {"Dtsch. Hydrogr. Z."}
+MACRO {dao} {"Dynam. Atmos. Oceans"}
+MACRO {eco} {"Ecology"}
+MACRO {empl}{"Earth, Moon and Planets"}
+MACRO {envres} {"Environ. Res."}
+MACRO {envst} {"Environ. Sci. Technol."}
+MACRO {ecms} {"Estuarine Coastal Mar. Sci."}
+MACRO {expa}{"Exper. Astron."}
+MACRO {geoint} {"Geofis. Int."}
+MACRO {geopub} {"Geofys. Publ."}
+MACRO {geogeo} {"Geol. Geofiz."}
+MACRO {gafd} {"Geophys. Astrophys. Fluid Dyn."}
+MACRO {gfd} {"Geophys. Fluid Dyn."}
+MACRO {geomag} {"Geophys. Mag."}
+MACRO {georl} {"Geophys. Res. Lett."}
+MACRO {grl} {"Geophys. Res. Lett."}
+MACRO {ga} {"Geophysica"}
+MACRO {gs} {"Geophysics"}
+MACRO {ieeetap} {"IEEE Trans. Antenn. Propag."}
+MACRO {ijawp} {"Int. J. Air Water Pollut."}
+MACRO {ijc} {"Int. J. Climatol."}
+MACRO {ijrs} {"Int. J. Remote Sens."}
+MACRO {jam} {"J. Appl. Meteorol."}
+MACRO {jaot} {"J. Atmos. Ocean. Technol."}
+MACRO {jatp} {"J. Atmos. Terr. Phys."}
+MACRO {jastp} {"J. Atmos. Solar-Terr. Phys."}
+MACRO {jce} {"J. Climate"}
+MACRO {jcam} {"J. Climate Appl. Meteor."}
+MACRO {jcm} {"J. Climate Meteor."}
+MACRO {jcy} {"J. Climatol."}
+MACRO {jgr} {"J. Geophys. Res."}
+MACRO {jga} {"J. Glaciol."}
+MACRO {jh} {"J. Hydrol."}
+MACRO {jmr} {"J. Mar. Res."}
+MACRO {jmrj} {"J. Meteor. Res. Japan"}
+MACRO {jm} {"J. Meteor."}
+MACRO {jpo} {"J. Phys. Oceanogr."}
+MACRO {jra} {"J. Rech. Atmos."}
+MACRO {jaes} {"J. Aeronaut. Sci."}
+MACRO {japca} {"J. Air Pollut. Control Assoc."}
+MACRO {jas} {"J. Atmos. Sci."}
+MACRO {jmts} {"J. Mar. Technol. Soc."}
+MACRO {jmsj} {"J. Meteorol. Soc. Japan"}
+MACRO {josj} {"J. Oceanogr. Soc. Japan"}
+MACRO {jwm} {"J. Wea. Mod."}
+MACRO {lao} {"Limnol. Oceanogr."}
+MACRO {mwl} {"Mar. Wea. Log"}
+MACRO {mau} {"Mausam"}
+MACRO {meteor} {"``Meteor'' Forschungsergeb."}
+MACRO {map} {"Meteorol. Atmos. Phys."}
+MACRO {metmag} {"Meteor. Mag."}
+MACRO {metmon} {"Meteor. Monogr."}
+MACRO {metrun} {"Meteor. Rundsch."}
+MACRO {metzeit} {"Meteor. Z."}
+MACRO {metgid} {"Meteor. Gidrol."}
+MACRO {mwr} {"Mon. Weather Rev."}
+MACRO {nwd} {"Natl. Weather Dig."}
+MACRO {nzjmfr} {"New Zeal. J. Mar. Freshwater Res."}
+MACRO {npg} {"Nonlin. Proc. Geophys."}
+MACRO {om} {"Oceanogr. Meteorol."}
+MACRO {ocac} {"Oceanol. Acta"}
+MACRO {oceanus} {"Oceanus"}
+MACRO {paleoc} {"Paleoceanography"}
+MACRO {pce} {"Phys. Chem. Earth"}
+MACRO {pmg} {"Pap. Meteor. Geophys."}
+MACRO {ppom} {"Pap. Phys. Oceanogr. Meteor."}
+MACRO {physzeit} {"Phys. Z."}
+MACRO {pps} {"Planet. Space Sci."}
+MACRO {pss} {"Planet. Space Sci."}
+MACRO {pag} {"Pure Appl. Geophys."}
+MACRO {qjrms} {"Quart. J. Roy. Meteorol. Soc."}
+MACRO {quatres} {"Quat. Res."}
+MACRO {rsci} {"Radio Sci."}
+MACRO {rse} {"Remote Sens. Environ."}
+MACRO {rgeo} {"Rev. Geophys."}
+MACRO {rgsp} {"Rev. Geophys. Space Phys."}
+MACRO {rdgeo} {"Rev. Geofis."}
+MACRO {revmeta} {"Rev. Meteorol."}
+MACRO {sgp}{"Surveys in Geophys."}
+MACRO {sp} {"Solar Phys."}
+MACRO {ssr} {"Space Sci. Rev."}
+MACRO {tellus} {"Tellus"}
+MACRO {tac} {"Theor. Appl. Climatol."}
+MACRO {tagu} {"Trans. Am. Geophys. Union (EOS)"}
+MACRO {wrr} {"Water Resour. Res."}
+MACRO {weather} {"Weather"}
+MACRO {wafc} {"Weather Forecast."}
+MACRO {ww} {"Weatherwise"}
+MACRO {wmob} {"WMO Bull."}
+MACRO {zeitmet} {"Z. Meteorol."}
+ % End module: geojour.mbs
+ %-------------------------------------------------------------------
+ % Begin module:
+ % \ProvidesFile{photjour.mbs}[1999/02/24 2.0b (PWD)]
+
+MACRO {appopt} {"Appl. Opt."}
+MACRO {bell} {"Bell Syst. Tech. J."}
+MACRO {ell} {"Electron. Lett."}
+MACRO {jasp} {"J. Appl. Spectr."}
+MACRO {jqe} {"IEEE J. Quantum Electron."}
+MACRO {jlwt} {"J. Lightwave Technol."}
+MACRO {jmo} {"J. Mod. Opt."}
+MACRO {josa} {"J. Opt. Soc. America"}
+MACRO {josaa} {"J. Opt. Soc. Amer.~A"}
+MACRO {josab} {"J. Opt. Soc. Amer.~B"}
+MACRO {jdp} {"J. Phys. (Paris)"}
+MACRO {oc} {"Opt. Commun."}
+MACRO {ol} {"Opt. Lett."}
+MACRO {phtl} {"IEEE Photon. Technol. Lett."}
+MACRO {pspie} {"Proc. Soc. Photo-Opt. Instrum. Eng."}
+MACRO {sse} {"Solid-State Electron."}
+MACRO {sjot} {"Sov. J. Opt. Technol."}
+MACRO {sjqe} {"Sov. J. Quantum Electron."}
+MACRO {sleb} {"Sov. Phys.--Leb. Inst. Rep."}
+MACRO {stph} {"Sov. Phys.--Techn. Phys."}
+MACRO {stphl} {"Sov. Techn. Phys. Lett."}
+MACRO {vr} {"Vision Res."}
+MACRO {zph} {"Z. f. Physik"}
+MACRO {zphb} {"Z. f. Physik~B"}
+MACRO {zphd} {"Z. f. Physik~D"}
+
+MACRO {CLEO} {"CLEO"}
+MACRO {ASSL} {"Adv. Sol.-State Lasers"}
+MACRO {OSA} {"OSA"}
+ % End module: photjour.mbs
+%% Copyright 1994-2007 Patrick W Daly
+MACRO {acmcs} {"ACM Comput. Surv."}
+
+MACRO {acta} {"Acta Inf."}
+
+MACRO {cacm} {"Commun. ACM"}
+
+MACRO {ibmjrd} {"IBM J. Res. Dev."}
+
+MACRO {ibmsj} {"IBM Syst.~J."}
+
+MACRO {ieeese} {"IEEE Trans. Software Eng."}
+
+MACRO {ieeetc} {"IEEE Trans. Comput."}
+
+MACRO {ieeetcad}
+ {"IEEE Trans. Comput. Aid. Des."}
+
+MACRO {ipl} {"Inf. Process. Lett."}
+
+MACRO {jacm} {"J.~ACM"}
+
+MACRO {jcss} {"J.~Comput. Syst. Sci."}
+
+MACRO {scp} {"Sci. Comput. Program."}
+
+MACRO {sicomp} {"SIAM J. Comput."}
+
+MACRO {tocs} {"ACM Trans. Comput. Syst."}
+
+MACRO {tods} {"ACM Trans. Database Syst."}
+
+MACRO {tog} {"ACM Trans. Graphic."}
+
+MACRO {toms} {"ACM Trans. Math. Software"}
+
+MACRO {toois} {"ACM Trans. Office Inf. Syst."}
+
+MACRO {toplas} {"ACM Trans. Progr. Lang. Syst."}
+
+MACRO {tcs} {"Theor. Comput. Sci."}
+
+FUNCTION {bibinfo.command} { "\bibinfo " }
+
+FUNCTION {bibinfo.check}
+{ swap$
+ duplicate$ missing$
+ {
+ pop$
+ pop$ ""
+ }{
+ duplicate$ empty$
+ {
+ swap$ pop$
+ }{
+ swap$
+ bibinfo.command "{" * swap$ * "} {" * swap$ * "}" *
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {bibinfo.warn}
+{ swap$
+ duplicate$ missing$
+ {
+ swap$ "missing " swap$ * " in " * cite$ * warning$ pop$
+ ""
+ }{
+ duplicate$ empty$
+ {
+ swap$ "empty " swap$ * " in " * cite$ * warning$
+ }{
+ swap$
+ bibinfo.command " {" * swap$ * "} {" * swap$ * "}" *
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {archiv.base}
+{
+ "http://arxiv.org/abs"
+}
+
+FUNCTION {archiv.prefix.base}
+{
+ "arXiv"
+}
+
+FUNCTION {eprint.command}
+{
+ "\Eprint "
+}
+
+FUNCTION {format.eprint}
+{
+ eprint duplicate$ empty$
+ control.eprint #0 <
+ or
+ { pop$ "" }
+ {
+ duplicate$
+ ""
+ archive duplicate$ empty$ { pop$ archiv.base } 'skip$ if$ *
+ "/" *
+ swap$ *
+ "{" swap$ * "} " *
+ swap$
+ ""
+ archivePrefix duplicate$ empty$ { pop$ "" } { ":" * } if$ *
+ swap$ *
+ primaryClass duplicate$ empty$ { pop$ "" } { " [" swap$ * "]" * } if$ *
+ "{" swap$ * "} " *
+ *
+ eprint.command swap$ *
+ }
+ if$
+}
+
+FUNCTION {format.translation}
+{ translation duplicate$ empty$
+ 'skip$
+ { ""
+ "\translation{" * swap$ * "}" *
+ punctuation.space 'punctuation.state :=
+ }
+ if$
+}
+
+FUNCTION {format.url}
+{
+ url duplicate$ empty$
+ { pop$ "" }
+ {
+ "\url "
+ "{" * swap$ * "}" *
+ }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {check.speaker}
+{ key empty$ 'skip$
+ { key nameptr int.to.str$ =
+ {
+ bolden
+ }
+ 'skip$
+ if$
+ }
+ if$
+}
+
+
+STRINGS { bibinfo}
+
+FUNCTION {format.names.fname}
+{
+ control.author.initials {
+ control.author.dotless {
+ control.author.nospace {
+ "f{}"
+ } {
+ "f{~}"
+ } if$
+ } {
+ control.author.nospace {
+ "f{.}."
+ } {
+ "f."
+ } if$
+ } if$
+ } {
+ "ff"
+ } if$
+}
+
+FUNCTION {bracify}
+{
+ "{" swap$ * "}" *
+}
+
+FUNCTION {name.comma}
+{
+ control.author.nocomma 'skip$ { "," swap$ * } if$
+}
+
+FUNCTION {format.names.format.onefont}
+{
+ "{vv~}{ll}"
+ nameptr #1 >
+ control.author.first
+ and
+ control.author.reversed not
+ or
+ {
+ control.author.initials {
+ "f"
+ control.author.dotless 'skip$ {
+ "." *
+ } if$
+ "~" *
+ } {
+ "ff"
+ } if$
+ bracify
+ swap$
+ } {
+ format.names.fname
+ " " swap$ *
+ name.comma
+ bracify
+ }
+ if$
+ "jj"
+ " " swap$ *
+ name.comma
+ bracify
+ control.author.jnrlst 'skip$ 'swap$ if$
+ * *
+}
+
+FUNCTION {format.names.onefont}
+{
+ s nameptr format.names.format.onefont format.name$
+ remove.dots
+ bib.name.font
+}
+
+FUNCTION {format.names.morfont}
+{ s nameptr
+ "{vv~}{ll}" format.name$ bib.name.font
+ nameptr #1 >
+ control.author.first
+ and
+ control.author.reversed not
+ or
+ {
+ s nameptr
+ control.author.initials {
+ "f" % default: name + surname + comma junior
+ } {
+ "ff"
+ } if$
+ control.author.dotless 'skip$ {
+ "." * % nm-init % Initials. + surname (J. F. Smith) control.author.initials
+ } if$
+ bracify
+ format.name$ duplicate$ empty$ 'skip$
+ { tie.or.space.prefix bib.fname.font swap$ * }
+ if$
+ swap$
+ *
+ s nameptr
+ "{jj}" format.name$ duplicate$ empty$ 'skip$
+ { bib.fname.font ", " swap$ * }
+ if$
+ } {
+ "," *
+ s nameptr
+ format.names.fname
+ "jj"
+ " "
+ name.comma
+ control.author.jnrlst {
+ swap$ * skip$
+ } {
+ skip$ * swap$
+ } if$
+ bracify swap$ bracify swap$
+ *
+ format.name$
+ remove.dots
+ duplicate$ empty$ 'skip$
+ { bib.fname.font " " swap$ * }
+ if$
+ } if$
+ *
+}
+
+FUNCTION {names.punctuate}
+{
+ "," *
+ " " *
+}
+
+FUNCTION {format.names}
+{ 'bibinfo :=
+ duplicate$ empty$ { pop$ "" } {
+ duplicate$ num.names$
+ duplicate$ 'numnames :=
+ 'namesleft :=
+ 's :=
+ #1 'nameptr :=
+ ""
+ { namesleft #0 > }
+ {
+ format.names.morfont
+ bibinfo bibinfo.check
+ type$ "presentation" =
+ 'check.speaker
+ 'skip$
+ if$
+ 't :=
+ nameptr #1 > not
+ {
+ t *
+ } {
+ namesleft #1 >
+ {
+ names.punctuate
+ t *
+ } {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ numnames #2 >
+ 'names.punctuate
+ 'skip$
+ if$
+ t "others" =
+ {
+ " " *
+ bbl.etal
+ emphasize
+ *
+ } {
+ bbl.and
+ space.word *
+ t *
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ } if$
+}
+
+FUNCTION {format.names.ed.onefont}
+{
+ s nameptr
+ control.author.initials {
+ control.author.dotless {
+ control.author.nospace {
+ "{f{}~}{vv~}{ll}{ jj}" % nm-rvx|nm-rvcx
+ } {
+ "{f{~}~}{vv~}{ll}{ jj}" % nm-rv
+ } if$
+ } {
+ control.author.nospace {
+ "{f{.}.~}{vv~}{ll}{ jj}" % nm-rvv|nm-rvvc
+ }{
+ "{f.~}{vv~}{ll}{, jj}" % nm-init|nm-rev|nm-rev1
+ } if$
+ } if$
+ } {
+ "{ff~}{vv~}{ll}{, jj}"
+ } if$
+ format.name$
+ remove.dots
+ bib.name.font
+}
+
+FUNCTION {format.names.ed.morfont}
+{
+ control.author.reversed { %
+ control.author.initials { %
+ control.author.dotless { %
+ s nameptr
+ control.author.nospace { % nm-rvx nm-rvcx
+ "{f{}}"
+ } { % nm-rv
+ "{f{~}}"
+ } if$
+ format.name$ duplicate$ empty$ 'skip$
+ { tie.or.space.prefix bib.fname.font swap$ * }
+ if$
+ s nameptr
+ "{vv~}{ll}" format.name$ bib.name.font *
+ s nameptr
+ "{jj}" format.name$
+ remove.dots
+ duplicate$ empty$ 'skip$
+ { bib.fname.font " " swap$ * }
+ if$
+ } { % !control.author.dotless
+ s nameptr
+ control.author.nospace { % nm-rvv
+ "{ff}"
+ } { % nm-rev nm-rev1
+ "{f.}"
+ } if$
+ format.name$ duplicate$ empty$ 'skip$
+ { tie.or.space.prefix bib.fname.font swap$ * }
+ if$
+ s nameptr
+ "{vv~}{ll}" format.name$ bib.name.font *
+ s nameptr
+ "{jj}" format.name$
+ duplicate$ empty$ 'skip$
+ { bib.fname.font ", " swap$ * }
+ if$
+ } if$
+ } { % Full names !control.author.initials nm-revf nm-revv1
+ s nameptr
+ "{ff}"
+ format.name$ duplicate$ empty$ 'skip$
+ { tie.or.space.prefix bib.fname.font swap$ * }
+ if$
+ s nameptr
+ "{vv~}{ll}" format.name$ bib.name.font *
+ s nameptr
+ "{jj}" format.name$
+ duplicate$ empty$ 'skip$
+ { bib.fname.font ", " swap$ * }
+ if$
+ } if$
+ } { % !control.author.reversed nm-init
+ s nameptr
+ "{f.}"
+ format.name$ duplicate$ empty$ 'skip$
+ { tie.or.space.prefix bib.fname.font swap$ * }
+ if$
+ s nameptr
+ "{vv~}{ll}" format.name$ bib.name.font *
+ s nameptr
+ "{jj}" format.name$
+ duplicate$ empty$ 'skip$
+ { bib.fname.font ", " swap$ * }
+ if$
+ } if$
+ *
+}
+
+FUNCTION {format.names.ed}
+{
+ control.editor #0 > {
+ format.names
+ } {
+ 'bibinfo :=
+ duplicate$ empty$ 'skip$ {
+ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ {
+ format.names.ed.morfont
+ bibinfo bibinfo.check
+ 't :=
+ nameptr #1 >
+ {
+ namesleft #1 >
+ {
+ names.punctuate
+ t *
+ }{
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ numnames #2 >
+ 'names.punctuate
+ 'skip$
+ if$
+ t "others" =
+ {
+ " " * bbl.etal emphasize *
+ }{
+ bbl.and
+ space.word * t *
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ } if$
+ } if$
+}
+
+FUNCTION {format.key}
+{ empty$
+ { key field.or.null }
+ { "" }
+ if$
+}
+
+FUNCTION {format.authors}
+{ author "author" format.names
+ duplicate$ empty$ 'skip$
+ { collaboration "collaboration" bibinfo.check
+ duplicate$ empty$ 'skip$
+ { " (" swap$ * ")" * }
+ if$
+ *
+ }
+ if$
+ "author" 'bibfield :=
+}
+
+FUNCTION {get.bbl.editor}
+{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$
+}
+
+FUNCTION {format.editors}
+{ editor "editor" format.names duplicate$ empty$ 'skip$
+ {
+ "," *
+ word.space *
+ get.bbl.editor
+ *
+ }
+ if$
+}
+
+FUNCTION {format.isbn.output}
+{
+}
+
+FUNCTION {format.issn.output}
+{
+}
+
+FUNCTION {doi.base}
+{
+ "http://dx.doi.org/"
+}
+
+FUNCTION {doi.base.command}
+{
+ "\doibase "
+}
+
+FUNCTION {noop.command}
+{
+ "\href@noop "
+}
+
+FUNCTION {href.command}
+{
+ "\href "
+}
+
+FUNCTION {link.tag.open}
+{
+ doi duplicate$ empty$
+ {
+ pop$
+ url duplicate$ empty$
+ {
+ pop$ "" noop.command
+ }{
+ href.command
+ }
+ if$
+ }
+ {
+ doi.base.command swap$ *
+ href.command
+ }
+ if$
+ "{" * swap$ * "} {" *
+}
+
+FUNCTION {link.tag.shut}
+{
+ "}"
+}
+
+FUNCTION {link.open}
+{
+ link.tag.open output.nopunct
+}
+
+FUNCTION {link.shut}
+{
+ link.tag.shut *
+}
+
+FUNCTION {add.doi}
+{
+ link.tag.open swap$ * link.tag.shut *
+}
+
+FUNCTION {select.language}
+{ duplicate$ empty$
+ 'pop$
+ { language empty$
+ 'skip$
+ { "{\selectlanguage {" language * "}" * swap$ * "}" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.note}
+{
+ note empty$
+ { "" }
+ { note #1 #1 substring$
+ duplicate$ "{" =
+ 'skip$
+ {
+ output.state after.word = output.state after.punctuation = or
+ { "l" }
+ { "u" }
+ if$ change.case$
+ }
+ if$
+ note #2 global.max$ substring$ * "note" bibinfo.check
+ }
+ if$
+}
+
+FUNCTION {bbl.enquote}
+{
+ "\enquote "
+}
+
+FUNCTION {string.enquote}
+{
+ punctuation.no 'punctuation.state :=
+ non.stop {
+ block.punctuation
+ } { "" } if$
+ swap$ pop$
+ *
+ bbl.enquote "{" * swap$ * "}" *
+ word.space *
+}
+
+FUNCTION {format.title}
+{ title
+ duplicate$ empty$ 'skip$ { "t" change.case$ } if$
+ duplicate$ "title" bibinfo.check swap$
+ duplicate$ empty$ 'pop$
+ {
+ punctuation.yes 'punctuation.state :=
+ string.enquote
+ select.language
+ }
+ if$
+}
+
+FUNCTION {end.quote.title}
+{ title empty$
+ 'skip$
+ { before.all 'output.state := }
+ if$
+}
+
+FUNCTION {format.name.apply}
+{
+ s nameptr
+ "{vv~}{ll}"
+ format.name$
+ cite.name.font
+}
+
+FUNCTION {format.full.names}
+{
+ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { format.name.apply
+ 't :=
+ nameptr #1 >
+ {
+ namesleft #1 >
+ { ", " * t * }
+ {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ {
+ 't :=
+ }
+ 'pop$
+ if$
+ t "others" =
+ {
+ " " * bbl.etal
+ emphasize *
+ }{
+ numnames #2 > { "," * }{ skip$ } if$
+ bbl.and
+ space.word * t *
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {make.full.names}
+{
+ key editor author
+ type$ "proceedings" =
+ type$ "book" =
+ type$ "inbook" =
+ or { pop$ }{ { pop$ "" }{ swap$ pop$ "" swap$ } if$ } if$
+ duplicate$ empty$
+ { pop$
+ duplicate$ empty$
+ { pop$
+ duplicate$ empty$
+ { pop$
+ cite$ #1 #3 substring$
+ }{
+ skip$
+ }
+ if$
+ }
+ { swap$ pop$ format.full.names }
+ if$
+ }
+ { swap$ pop$ swap$ pop$ format.full.names }
+ if$
+}
+
+FUNCTION {year.bibitem}
+{
+ year duplicate$ empty$
+ { pop$ ""
+ }{
+ skip$
+ } if$
+ extra.label *
+}
+
+FUNCTION {output.bibitem}
+{
+ newline$
+ ""
+ label
+ * ")" *
+ make.full.names duplicate$ short.list =
+ { pop$ }{ * } if$
+ bracify
+ "[" swap$ * "]" *
+ cite$ bracify "%" *
+ *
+ "\bibitem "
+ swap$ *
+ write$ newline$
+ " "
+ duplicate$ bbl.open * write$ newline$
+ before.all 'output.state :=
+ punctuation.yes 'punctuation.state :=
+}
+
+FUNCTION {n.dashify}
+{
+ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }{
+ { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }{
+ t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {word.in}
+{
+ bbl.in
+ word.space *
+}
+
+FUNCTION {date.encapsulate}
+{
+ duplicate$ empty$
+ 'skip$
+ {
+ before.all 'output.state :=
+ " (" swap$ * ")" *
+ }
+ if$
+}
+
+FUNCTION {format.date}
+{
+ year "year" bibinfo.check duplicate$ empty$
+ {
+ }
+ 'skip$
+ if$
+ extra.label *
+ date.encapsulate
+}
+
+FUNCTION {format.date.output.check}
+{
+ format.date
+ "year" output.check
+}
+
+FUNCTION {format.date.output}
+{
+ format.date.output.check
+}
+
+FUNCTION {format.btitle}
+{
+ booktitle duplicate$ empty$ { pop$
+ title
+ } 'skip$ if$
+ "title" bibinfo.check
+ duplicate$ empty$ 'skip$
+ {
+ emphasize
+ select.language
+ }
+ if$
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {editor.check.book}
+{ editor empty$ 'skip$
+ {
+ "can't use both author and editor fields in " cite$ *
+ ": try using @inbook instead" *
+ warning$
+ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume duplicate$ empty$
+ { pop$ "" }
+ {
+ "volume and number" number either.or.check
+ bbl.volume
+ capitalize
+ swap$
+ tie.or.space.prefix "volume" bibinfo.check * *
+ series "series" bibinfo.check duplicate$ empty$ 'pop$
+ {
+ ", "
+ * swap$ *
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.number}
+{
+ bbl.number
+ output.state after.word = output.state after.punctuation = or
+ #1 or
+ #0 and
+ 'skip$
+ { capitalize }
+ if$
+ number tie.or.space.prefix "number" bibinfo.check * *
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ {
+ series empty$
+ {
+ number "number" bibinfo.check
+ }{
+ format.number
+ series "series" bibinfo.check
+ word.space * swap$ *
+ }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {is.num}
+{ chr.to.int$
+ duplicate$ "0" chr.to.int$ < not
+ swap$ "9" chr.to.int$ > not and
+}
+
+FUNCTION {extract.num}
+{ duplicate$ 't :=
+ "" 's :=
+ { t empty$ not }
+ { t #1 #1 substring$
+ t #2 global.max$ substring$ 't :=
+ duplicate$ is.num
+ { s swap$ * 's := }
+ { pop$ "" 't := }
+ if$
+ }
+ while$
+ s empty$
+ 'skip$
+ { pop$ s }
+ if$
+}
+
+FUNCTION {convert.edition}
+{ extract.num "l" change.case$ 's :=
+ s "first" = s "1" = or
+ { bbl.first 't := }
+ { s "second" = s "2" = or
+ { bbl.second 't := }
+ { s "third" = s "3" = or
+ { bbl.third 't := }
+ { s "fourth" = s "4" = or
+ { bbl.fourth 't := }
+ { s "fifth" = s "5" = or
+ { bbl.fifth 't := }
+ { s #1 #1 substring$ is.num
+ { s
+ eng.ord
+ 't := }
+ { edition 't := }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ t
+}
+
+FUNCTION {format.edition}
+{ edition duplicate$ empty$ 'skip$
+ {
+ convert.edition
+ output.state after.word = output.state after.punctuation = or
+ { "l" }
+ { "t" }
+ if$ change.case$
+ "edition" bibinfo.check
+ word.space * bbl.edition *
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages duplicate$ empty$
+ 'skip$
+ { duplicate$ multi.page.check
+ {
+ bbl.pages swap$
+ n.dashify
+ }{
+ bbl.page swap$
+ }
+ if$
+ tie.or.space.prefix
+ "pages" bibinfo.check
+ * *
+ }
+ if$
+}
+
+FUNCTION {first.page}
+{ 't :=
+ ""
+ { t empty$ not t #1 #1 substring$ "-" = not and }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+}
+
+FUNCTION {format.book.pages}
+{
+ pages duplicate$ empty$ 'skip$
+ {
+ "pages" bibinfo.check word.space bbl.pages * *
+ }
+ if$
+}
+
+FUNCTION {volnum.punct}
+{
+ ","
+ word.space *
+}
+
+FUNCTION {format.journal.pages}
+{ pages duplicate$ empty$ 'pop$
+ { swap$ duplicate$ empty$
+ { pop$ pop$ format.pages }
+ { volnum.punct *
+ swap$
+ control.pages duplicate$ #0 < {
+ pop$ pop$
+ }{
+ #0 >
+ {
+ n.dashify
+ }{
+ first.page
+ } if$
+ } if$
+ "pages" bibinfo.check
+ *
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.journal.eid}
+{ eid "eid" bibinfo.check
+ duplicate$ empty$ 'pop$
+ { swap$ duplicate$ empty$ 'skip$
+ { volnum.punct * }
+ if$
+ swap$ *
+ }
+ if$
+}
+
+FUNCTION {eid.or.pages}
+{
+ eid empty$
+ { format.journal.pages }
+ { format.journal.eid }
+ if$
+}
+
+FUNCTION {format.ser.vol.num}
+{
+ series "series" bibinfo.check output
+ volume field.or.null
+ duplicate$ empty$ 'skip$
+ {
+ "volume" bibinfo.check
+ }
+ if$
+ bolden
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ {
+ format.pages
+ }
+ { type empty$
+ {
+ bbl.chapter
+ capitalize
+ }{
+ type
+ capitalize
+ "type" bibinfo.check
+ }
+ if$
+ chapter tie.or.space.prefix
+ "chapter" bibinfo.check
+ * *
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.booktitle}
+{
+ booktitle duplicate$ "booktitle" bibinfo.check swap$
+ duplicate$ empty$ 'pop$
+ {
+ punctuation.yes 'punctuation.state :=
+ pop$ emphasize
+ select.language
+ }
+ if$
+}
+
+FUNCTION {format.editor.in}
+{
+ editor "editor" format.names.ed duplicate$ empty$ 'skip$
+ {
+ bbl.edby
+ word.space * swap$ *
+ }
+ if$
+}
+
+FUNCTION {output.article.booktitle}
+{
+ format.booktitle
+ "booktitle" 'bibfield :=
+ output
+ bookaddress "address" bibinfo.check duplicate$ empty$ 'pop$
+ {
+ "address" 'bibfield :=
+ output.nonnull after.punctuation 'output.state :=
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{
+ format.booktitle duplicate$ empty$ 'pop$
+ {
+ add.doi
+ word.in swap$ * output.nonnull
+ bookaddress "address" bibinfo.check output
+ format.number.series "series and number" bibinfo.check output
+ format.bvolume output
+ format.editor.in "editor" bibinfo.check output
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle.inbook}
+{
+ format.booktitle duplicate$ empty$ 'pop$
+ {
+ add.doi
+ word.in swap$ * output.nonnull
+ bookaddress "address" bibinfo.check output
+ format.number.series "series and number" bibinfo.check output
+ format.bvolume output
+ author empty$ 'skip$
+ { format.editor.in "editor" bibinfo.check output }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type duplicate$ empty$
+ 'pop$
+ { swap$ pop$
+ "t" change.case$ "type" bibinfo.check
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ number "number" bibinfo.check
+ type duplicate$ empty$
+ { pop$ bbl.techrep }
+ 'skip$
+ if$
+ "type" bibinfo.check
+ swap$ duplicate$ empty$
+ { pop$ "t" change.case$ }
+ { tie.or.space.prefix * * }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{
+ word.in
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.book.crossref}
+{ volume duplicate$ empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ pop$ word.in
+ }
+ { bbl.volume
+ swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word *
+ }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{
+ word.in
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.org.or.pub}
+{ 't :=
+ ""
+ address "address" bibinfo.check
+ duplicate$ empty$
+ { pop$ t }
+ { t duplicate$ empty$
+ { pop$ }
+ {
+ "," word.space *
+ * swap$ *
+ }
+ if$
+ }
+ if$
+ *
+ year duplicate$ empty$
+ {
+ "empty year in " cite$ *
+ warning$
+ pop$ ""
+ }
+ 'skip$
+ if$
+ duplicate$ empty$
+ { pop$ }
+ {
+ "year" bibinfo.check
+ swap$
+ duplicate$ empty$
+ { pop$ }
+ {
+ "," *
+ word.space *
+ swap$ *
+ }
+ if$
+ }
+ if$
+ duplicate$ empty$ 'skip$ {
+ ""
+ "(" * swap$ * ")" *
+ after.punctuation 'output.state :=
+ punctuation.space 'punctuation.state :=
+ } if$
+}
+
+FUNCTION {format.publisher.address}
+{ publisher "publisher" bibinfo.warn format.org.or.pub
+}
+
+FUNCTION {format.organization.address}
+{ organization "organization" bibinfo.check format.org.or.pub
+}
+
+FUNCTION {format.organization.publisher.address}
+{
+ publisher empty$
+ { format.organization.address }
+ { organization "organization" bibinfo.check output
+ format.publisher.address
+ }
+ if$
+}
+
+FUNCTION {format.school.address.output}
+{
+ school "school" bibinfo.warn
+ address "address" bibinfo.check
+ duplicate$ empty$ 'skip$
+ {
+ swap$
+ duplicate$ empty$ 'skip$
+ {
+ ", " *
+ }
+ if$
+ swap$
+ }
+ if$
+ *
+ output
+}
+
+FUNCTION {article.title.produce}
+{
+ control.title duplicate$ #0 <
+ { pop$
+ }{
+ format.title
+ "title" 'bibfield :=
+ swap$ #0 >
+ {
+ "title" output.check
+ }{
+ output
+ } if$
+ new.block.comma
+ } if$
+}
+
+FUNCTION {control}
+{
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors
+ booktitle empty$ {
+ "author" output.check
+ }{ output } if$
+ author format.key output
+ new.block.comma
+ article.title.produce
+ output.article.booktitle
+ crossref missing$
+ {
+ link.open
+ journal
+ "journal" bibinfo.warn
+ "journal" 'bibfield :=
+ output
+ add.blank
+ format.ser.vol.num
+ output
+ eid.or.pages
+ format.date.output.check
+ pages empty$ {
+ doi output
+ } 'skip$ if$
+ link.shut
+ }{
+ format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ format.issn.output
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ format.translation output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ {
+ format.editors "author and editor" output.check
+ editor format.key output
+ }{
+ format.authors output.nonnull
+% crossref missing$ { editor.check.book } 'skip$ if$
+ }
+ if$
+ new.block.comma
+ link.open
+ format.btitle
+ "title" output.check
+ link.shut
+ format.edition output
+ author empty$
+ {
+ }
+ {
+ format.editor.in output
+ editor format.key output
+ }
+ if$
+ format.number.series output
+ crossref missing$
+ {
+ format.bvolume output
+ new.block.comma
+ format.publisher.address output
+ }{
+ new.block.comma
+ format.book.crossref output.nonnull
+ format.date.output.check
+ }
+ if$
+ format.isbn.output
+ format.chapter.pages
+ output
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ new.block.comma
+ link.open
+ format.title
+ "title" output.check
+ link.shut
+ new.block.comma
+ howpublished "howpublished" bibinfo.check output
+ address "address" bibinfo.check output
+ format.date.output
+ format.isbn.output
+ format.book.pages output
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {footnote}
+{ output.bibitem
+ format.note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ {
+ format.editors "editor" output.check
+ editor format.key output
+ }{
+ format.authors output.nonnull
+ author format.key output
+ }
+ if$
+ new.block.comma
+
+ format.title output
+ new.block.comma
+
+ crossref missing$
+ {
+ format.in.ed.booktitle.inbook
+ format.publisher.address output
+ format.chapter.pages
+ "chapter and pages"
+ output.check
+ new.block.comma
+ format.edition output
+ new.block.comma
+ }{
+ format.chapter.pages
+ "chapter and pages"
+ output.check
+ new.block.comma
+ format.book.crossref output.nonnull
+ format.date.output.check
+ }
+ if$
+ crossref missing$
+ { format.isbn.output }
+ 'skip$
+ if$
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ new.block.comma
+ article.title.produce
+ crossref missing$
+ {
+ format.in.ed.booktitle
+ format.publisher.address output
+ format.edition output
+ format.chapter.pages output
+ format.isbn.output
+ }{
+ format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ new.block.comma
+ article.title.produce
+ crossref missing$
+ {
+ format.in.ed.booktitle
+ format.organization.publisher.address output
+ format.chapter.pages output
+ format.isbn.output
+ format.issn.output
+ }{
+ format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+FUNCTION {manual}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ new.block.comma
+ link.open
+ format.btitle
+ "title" output.check
+ link.shut
+ organization "organization" bibinfo.check output
+ address "address" bibinfo.check output
+ format.edition output
+ format.date.output
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ new.block.comma
+ format.btitle
+ output
+ new.block.comma
+ link.open
+ bbl.mthesis
+ format.thesis.type
+ output.nonnull
+ link.shut
+ format.school.address.output
+ format.date.output.check
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ new.block.comma
+ link.open
+ format.title
+ output
+ link.shut
+ new.block.comma
+ howpublished "howpublished" bibinfo.check output
+ format.date.output
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ new.block.comma
+ format.btitle
+ output
+ new.block.comma
+ link.open
+ bbl.phdthesis
+ format.thesis.type
+ output.nonnull
+ link.shut
+ format.school.address.output
+ format.date.output.check
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {presentation}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ new.block.comma
+ link.open
+ format.title
+ output
+ link.shut
+ new.block.comma
+ format.organization.address "organization and address" output.check
+ month "month" output.check
+ year "year" output.check
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ new.sentence
+ type missing$ 'skip$
+ {"(" type capitalize * ")" * output}
+ if$
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ format.editors output
+ editor format.key output
+ new.block.comma
+ link.open
+ format.btitle
+ "title" output.check
+ link.shut
+ bookaddress "address" bibinfo.check output
+ format.number.series output
+ format.bvolume output
+ format.organization.publisher.address output
+ format.isbn.output
+ format.issn.output
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ new.block.comma
+ link.open
+ format.title
+ "title" output.check
+ link.shut
+ new.block.comma
+ format.tr.number
+ output.nonnull
+ institution "institution" bibinfo.warn
+ format.org.or.pub output
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ new.block.comma
+ link.open
+ format.title
+ "title" output.check
+ link.shut
+ format.date.output
+ new.block.comma
+ new.sentence.comma
+ format.note "note" output.check
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+READ
+
+EXECUTE {control.init}
+
+ITERATE {control.pass}
+
+EXECUTE {control.check}
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+FUNCTION {cite.name.font.apply}
+{
+ word.space * bbl.etal
+ emphasize
+ *
+}
+
+FUNCTION {format.lab.names}
+{ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ {
+ format.name.apply
+ 't :=
+ nameptr #1 >
+ {
+ nameptr
+ #2
+ =
+ numnames
+ #3
+ > and
+ {
+ "others" 't :=
+ #1 'namesleft :=
+ }
+ 'skip$
+ if$
+ namesleft #1 >
+ { ", " * t * }
+ {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ t "others" =
+ {
+ cite.name.font.apply
+ }{
+ numnames #2 > { "," * } 'skip$ if$
+ bbl.and
+ space.word * t *
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.label}
+{ editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {calc.short.authors}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.label
+ 'author.key.label
+ if$
+ }
+ if$
+ 'short.list :=
+}
+
+FUNCTION {calc.label}
+{
+ calc.short.authors
+ short.list
+ year duplicate$ empty$
+ {
+ pop$ ""
+ }{
+ control.year #0 > { purify$ #-1 #4 substring$ } 'skip$ if$
+ }
+ if$
+ "(" swap$ *
+ * 'label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{ll{ }}"
+ control.author.initials {
+ "{ f{ }}" *
+ }{
+ "{ ff{ }}" *
+ } if$
+ "{ jj{ }}" *
+ format.name$ 't :=
+ nameptr #1 >
+ {
+ " " *
+ namesleft #1 = t "others" = and
+ { "zzzzz" * }
+ {
+ t sortify *
+ }
+ if$
+ }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {year.sort.key}
+{
+ year
+}
+
+FUNCTION {editor.sort}
+{ editor empty$
+ { key empty$
+ { "to sort, need editor or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+INTEGERS { seq.num }
+
+FUNCTION {init.seq}
+{ #0 'seq.num :=}
+
+EXECUTE {init.seq}
+
+FUNCTION {int.to.fix}
+{ "000000000" swap$ int.to.str$ *
+ #-1 #10 substring$
+}
+
+FUNCTION {label.presort}
+{
+ calc.label
+ label sortify
+ " "
+ *
+ seq.num #1 + 'seq.num :=
+ seq.num int.to.fix
+ 'sort.label :=
+ sort.label
+ *
+ " "
+ *
+ title field.or.null sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+FUNCTION {presort.pass}
+{ type$ "control" = 'control.presort 'label.presort if$
+}
+
+ITERATE {presort.pass}
+
+SORT
+
+STRINGS { last.label next.extra }
+
+INTEGERS { last.extra.num number.label }
+
+FUNCTION {initialize.extra.label.stuff}
+{ #0 int.to.chr$ 'last.label :=
+ "" 'next.extra :=
+ #0 'last.extra.num :=
+ #0 'number.label :=
+}
+
+FUNCTION {label.forward}
+{
+ last.label label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ label 'last.label :=
+ }
+ if$
+ number.label #1 + 'number.label :=
+}
+
+FUNCTION {label.reverse}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+ extra.label
+ duplicate$ empty$
+ 'skip$
+ { "{\natexlab{" swap$ * "}}" * }
+ if$
+ 'extra.label :=
+ label extra.label * 'label :=
+}
+
+EXECUTE {initialize.extra.label.stuff}
+
+FUNCTION {forward.pass}
+{ type$ "control" = 'control.forward 'label.forward if$
+}
+
+ITERATE {forward.pass}
+
+FUNCTION {reverse.pass}
+{ type$ "control" = 'control.reverse 'label.reverse if$
+}
+
+REVERSE {reverse.pass}
+
+FUNCTION {sortkey.sort}
+{ sort.label
+ " "
+ *
+ year.sort.key
+ field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+FUNCTION {bib.sort.pass}
+{ type$ "control" = 'control.sort 'sortkey.sort if$
+}
+
+ITERATE {bib.sort.pass}
+
+SORT
+
+FUNCTION {init.bib.eprint}
+{
+ "\texttt {"
+ pop$
+ "\providecommand \url [0]{\begingroup\@sanitize@url \@url }%" write$ newline$
+ "\providecommand \@url [1]{\endgroup\@href {#1}{" "}}%" bbl.url.prefix swap$ * * write$ newline$
+ "\providecommand " " [0]{URL }%" bbl.url.prefix swap$ * * write$ newline$
+ eprint.command "\providecommand " swap$ * "[0]{\href }%" * write$ newline$
+}
+
+FUNCTION {init.bib.doi}
+{
+ "\providecommand \doibase [0]{" doi.base "}%" * * write$ newline$
+}
+
+FUNCTION {init.bib.hypertex}
+{
+ "\providecommand " noop.command "[0]{\@secondoftwo}%" * * write$ newline$
+ "\providecommand " href.command "[0]{\begingroup \@sanitize@url \@href}%" * * write$ newline$
+ "\providecommand \@href[1]{\@@startlink{#1}\@@href}%" write$ newline$
+ "\providecommand \@@href[1]{\endgroup#1\@@endlink}%" write$ newline$
+ "\providecommand \@sanitize@url [0]{\catcode `\\12\catcode `\$12\catcode `\&12\catcode `\#12\catcode `\^12\catcode `\_12\catcode `\%12\relax}%" write$ newline$
+ "\providecommand \@@startlink[1]{}%" write$ newline$
+ "\providecommand \@@endlink[0]{}%" write$ newline$
+}
+
+FUNCTION {init.bib.namefont}
+{
+ "\providecommand \bibnamefont [1]{#1}%" write$ newline$
+ "\providecommand \bibfnamefont [1]{#1}%" write$ newline$
+ "\providecommand \citenamefont [1]{#1}%" write$ newline$
+}
+
+FUNCTION {init.bib.quote}
+{
+ "\providecommand " bbl.enquote * " [1]{" *
+ "``" "''"
+ "#1" swap$ "}%" * * * * write$ newline$
+}
+
+FUNCTION {init.bib.ay}
+{
+ "\providecommand \natexlab [1]{#1}%"
+ write$ newline$
+}
+
+FUNCTION {init.bib.bibinfo}
+{
+ bibinfo.command "\providecommand " swap$ * " [0]{\@secondoftwo}%" * write$ newline$
+ bibfield.command "\providecommand " swap$ * " [0]{\@secondoftwo}%" * write$ newline$
+}
+
+FUNCTION {init.bib.lang}
+{
+ "\providecommand \selectlanguage [0]{\@gobble}%" write$ newline$
+}
+
+FUNCTION {init.bib.endbibitem}
+{
+ "\providecommand " bbl.open * "[0]{}%" * write$ newline$
+ "\providecommand \bibitemStop [0]{}%" write$ newline$
+ "\providecommand \bibitemNoStop [0]{.\EOS\space}%" write$ newline$
+ "\providecommand \EOS [0]{\spacefactor3000\relax}%" write$ newline$
+}
+
+FUNCTION {init.bib.translation}
+{
+ "\providecommand \translation [1]{[#1]}%" write$ newline$
+}
+
+FUNCTION {warn.bib}
+{
+}
+
+FUNCTION {init.bib}
+{
+ warn.bib
+ "\makeatletter" write$ newline$
+ "\providecommand \@ifxundefined [1]{%" write$ newline$
+ " \@ifx{#1\undefined}" write$ newline$
+ "}%" write$ newline$
+ "\providecommand \@ifnum [1]{%" write$ newline$
+ " \ifnum #1\expandafter \@firstoftwo" write$ newline$
+ " \else \expandafter \@secondoftwo" write$ newline$
+ " \fi" write$ newline$
+ "}%" write$ newline$
+ "\providecommand \@ifx [1]{%" write$ newline$
+ " \ifx #1\expandafter \@firstoftwo" write$ newline$
+ " \else \expandafter \@secondoftwo" write$ newline$
+ " \fi" write$ newline$
+ "}%" write$ newline$
+ init.bib.ay
+ init.bib.quote
+ init.bib.namefont
+ init.bib.hypertex
+ init.bib.eprint
+ init.bib.doi
+ init.bib.lang
+ init.bib.bibinfo
+ init.bib.translation
+ init.bib.endbibitem
+ "\providecommand " bbl.shut * " [1]{\csname bibitem#1\endcsname}%" * write$ newline$
+ "\let\auto@bib@innerbib\@empty" write$ newline$
+ "%</preamble>" write$
+}
+
+FUNCTION {begin.bib}
+{
+ id.bst diagn.cmntlog
+ control.bib
+ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "\begin{thebibliography}{"
+ number.label int.to.str$
+ * "}%" *
+ write$ newline$
+ init.bib
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+ "\end{thebibliography}%"
+ write$ newline$
+}
+
+EXECUTE {end.bib}
+
+%% End of customized bst file
+%%
+%% End of file `aipnum4-1.bst'.
diff --git a/obsolete/macros/latex/contrib/revtex4-1/bibtex/bst/revtex/apsrev4-1.bst b/obsolete/macros/latex/contrib/revtex4-1/bibtex/bst/revtex/apsrev4-1.bst
new file mode 100644
index 0000000000..5cd3c4cf01
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/bibtex/bst/revtex/apsrev4-1.bst
@@ -0,0 +1,3457 @@
+%%
+%% This is file `apsrev4-1.bst',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% merlin.mbs (with options: `head,ay,nat,lang,pres,pres-bf,seq-no,vonx,nm-init,ed-au,jnrlst,nmft,nmft-def,fnm-def,nmfted,nmand-rm,lab,lab-def,and-rm,keyxyr,blkyear,yr-par,dtrev,date-nil-x,tit-qq,inproceedings-chapter,jtit-x,inproceedings-chapter,article-booktitle,article-series,jttl-rm,journal-address,book-bt,thesis-title-o,trtit-b,techreport-institution-par,vol-bf,vnum-x,volp-com,jpg-1,book-editor-booktitle,inbook-editor-booktitle,bookaddress,num-xser,number-cap,chapter-cap,series-number,numser-booktitle,ser-vol,ser-rm,volume-cap,ser-ed,jnm-x,pg-bk,book-chapter-pages,pub-date,ay-empty-pub-parens-x,pre-pub,pre-edn,doi-link,doi,edby,blk-com,fin-endbibitem,pp,ed,abr,ednx,ord,jabr,etal-it,revdata,eprint,url,url-blk,translation,SLACcitation,numpages-x,url,url-prefix-x,bibinfo,bibfield,nfss,,{}')
+%% physjour.mbs (with options: `ay,nat,lang,pres,pres-bf,seq-no,vonx,nm-init,ed-au,jnrlst,nmft,nmft-def,fnm-def,nmfted,nmand-rm,lab,lab-def,and-rm,keyxyr,blkyear,yr-par,dtrev,date-nil-x,tit-qq,inproceedings-chapter,jtit-x,inproceedings-chapter,article-booktitle,article-series,jttl-rm,journal-address,book-bt,thesis-title-o,trtit-b,techreport-institution-par,vol-bf,vnum-x,volp-com,jpg-1,book-editor-booktitle,inbook-editor-booktitle,bookaddress,num-xser,number-cap,chapter-cap,series-number,numser-booktitle,ser-vol,ser-rm,volume-cap,ser-ed,jnm-x,pg-bk,book-chapter-pages,pub-date,ay-empty-pub-parens-x,pre-pub,pre-edn,doi-link,doi,edby,blk-com,fin-endbibitem,pp,ed,abr,ednx,ord,jabr,etal-it,revdata,eprint,url,url-blk,translation,SLACcitation,numpages-x,url,url-prefix-x,bibinfo,bibfield,nfss,,{}')
+%% geojour.mbs (with options: `ay,nat,lang,pres,pres-bf,seq-no,vonx,nm-init,ed-au,jnrlst,nmft,nmft-def,fnm-def,nmfted,nmand-rm,lab,lab-def,and-rm,keyxyr,blkyear,yr-par,dtrev,date-nil-x,tit-qq,inproceedings-chapter,jtit-x,inproceedings-chapter,article-booktitle,article-series,jttl-rm,journal-address,book-bt,thesis-title-o,trtit-b,techreport-institution-par,vol-bf,vnum-x,volp-com,jpg-1,book-editor-booktitle,inbook-editor-booktitle,bookaddress,num-xser,number-cap,chapter-cap,series-number,numser-booktitle,ser-vol,ser-rm,volume-cap,ser-ed,jnm-x,pg-bk,book-chapter-pages,pub-date,ay-empty-pub-parens-x,pre-pub,pre-edn,doi-link,doi,edby,blk-com,fin-endbibitem,pp,ed,abr,ednx,ord,jabr,etal-it,revdata,eprint,url,url-blk,translation,SLACcitation,numpages-x,url,url-prefix-x,bibinfo,bibfield,nfss,,{}')
+%% photjour.mbs (with options: `ay,nat,lang,pres,pres-bf,seq-no,vonx,nm-init,ed-au,jnrlst,nmft,nmft-def,fnm-def,nmfted,nmand-rm,lab,lab-def,and-rm,keyxyr,blkyear,yr-par,dtrev,date-nil-x,tit-qq,inproceedings-chapter,jtit-x,inproceedings-chapter,article-booktitle,article-series,jttl-rm,journal-address,book-bt,thesis-title-o,trtit-b,techreport-institution-par,vol-bf,vnum-x,volp-com,jpg-1,book-editor-booktitle,inbook-editor-booktitle,bookaddress,num-xser,number-cap,chapter-cap,series-number,numser-booktitle,ser-vol,ser-rm,volume-cap,ser-ed,jnm-x,pg-bk,book-chapter-pages,pub-date,ay-empty-pub-parens-x,pre-pub,pre-edn,doi-link,doi,edby,blk-com,fin-endbibitem,pp,ed,abr,ednx,ord,jabr,etal-it,revdata,eprint,url,url-blk,translation,SLACcitation,numpages-x,url,url-prefix-x,bibinfo,bibfield,nfss,,{}')
+%% merlin.mbs (with options: `tail,ay,nat,lang,pres,pres-bf,seq-no,vonx,nm-init,ed-au,jnrlst,nmft,nmft-def,fnm-def,nmfted,nmand-rm,lab,lab-def,and-rm,keyxyr,blkyear,yr-par,dtrev,date-nil-x,tit-qq,inproceedings-chapter,jtit-x,inproceedings-chapter,article-booktitle,article-series,jttl-rm,journal-address,book-bt,thesis-title-o,trtit-b,techreport-institution-par,vol-bf,vnum-x,volp-com,jpg-1,book-editor-booktitle,inbook-editor-booktitle,bookaddress,num-xser,number-cap,chapter-cap,series-number,numser-booktitle,ser-vol,ser-rm,volume-cap,ser-ed,jnm-x,pg-bk,book-chapter-pages,pub-date,ay-empty-pub-parens-x,pre-pub,pre-edn,doi-link,doi,edby,blk-com,fin-endbibitem,pp,ed,abr,ednx,ord,jabr,etal-it,revdata,eprint,url,url-blk,translation,SLACcitation,numpages-x,url,url-prefix-x,bibinfo,bibfield,nfss,,{}')
+%% ----------------------------------------
+%% *** REVTeX-compatible Phys Rev 2010-07-25 ***
+%%
+%% Copyright 1994-2007 Patrick W Daly
+ % ===============================================================
+ % IMPORTANT NOTICE:
+ % This bibliographic style (bst) file has been generated from one or
+ % more master bibliographic style (mbs) files, listed above.
+ %
+ % This generated file can be redistributed and/or modified under the terms
+ % of the LaTeX Project Public License Distributed from CTAN
+ % archives in directory macros/latex/base/lppl.txt; either
+ % version 1 of the License, or any later version.
+ % ===============================================================
+ % Name and version information of the main mbs file:
+ % For use with BibTeX version 0.99a or later
+ %-------------------------------------------------------------------
+ % This bibliography style file is intended for texts in ENGLISH
+ % This is an author-year citation style bibliography. As such, it is
+ % non-standard LaTeX, and requires a special package file to function properly.
+ % Such a package is natbib.sty by Patrick W. Daly
+ % The form of the \bibitem entries is
+ % \bibitem[Jones et al.(1990)]{key}...
+ % \bibitem[Jones et al.(1990)Jones, Baker, and Smith]{key}...
+ % The essential feature is that the label (the part in brackets) consists
+ % of the author names, as they should appear in the citation, with the year
+ % in parentheses following. There must be no space before the opening
+ % parenthesis!
+ % With natbib v5.3, a full list of authors may also follow the year.
+ % In natbib.sty, it is possible to define the type of enclosures that is
+ % really wanted (brackets or parentheses), but in either case, there must
+ % be parentheses in the label.
+ % The \cite command functions as follows:
+ % \citet{key} ==>> Jones et al. (1990)
+ % \citet*{key} ==>> Jones, Baker, and Smith (1990)
+ % \citep{key} ==>> (Jones et al., 1990)
+ % \citep*{key} ==>> (Jones, Baker, and Smith, 1990)
+ % \citep[chap. 2]{key} ==>> (Jones et al., 1990, chap. 2)
+ % \citep[e.g.][]{key} ==>> (e.g. Jones et al., 1990)
+ % \citep[e.g.][p. 32]{key} ==>> (e.g. Jones et al., p. 32)
+ % \citeauthor{key} ==>> Jones et al.
+ % \citeauthor*{key} ==>> Jones, Baker, and Smith
+ % \citeyear{key} ==>> 1990
+ %---------------------------------------------------------------------
+
+FUNCTION {id.bst} {"merlin.mbs apsrev4-1.bst 2010-07-25 4.21a (PWD, AO, DPC) hacked"}
+ENTRY
+{
+ address
+ archive
+ archivePrefix
+ author
+ bookaddress
+ booktitle
+ chapter
+ collaboration
+ doi
+ edition
+ editor
+ eid
+ eprint
+ howpublished
+ institution
+ isbn
+ issn
+ journal
+ key
+ language
+ month
+ note
+ number
+ organization
+ pages
+ primaryClass
+ publisher
+ school
+ SLACcitation
+ series
+ title
+ translation
+ type
+ url
+ volume
+ year
+}{
+}{
+ label
+ extra.label sort.label
+ short.list
+}
+
+INTEGERS
+{
+ output.state before.all
+ after.word after.punctuation
+ after.sentence after.block
+}
+
+INTEGERS
+{
+ punctuation.state punctuation.no punctuation.space punctuation.yes
+}
+
+STRINGS { bibfield output.bibfield }
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {non.stop}
+{ duplicate$
+ "}" * add.period$
+ #-1 #1 substring$ "." =
+}
+
+INTEGERS { arith.mulitplier arith.multiplicand }
+
+FUNCTION {multiply}
+{
+ 'arith.multiplicand :=
+ 'arith.mulitplier :=
+ #0
+ { arith.mulitplier #0 > }
+ { arith.multiplicand +
+ arith.mulitplier #1 - 'arith.mulitplier :=
+ }
+ while$
+}
+
+FUNCTION {chr.to.hex}
+{
+ chr.to.int$
+ duplicate$ "0" chr.to.int$ -
+ duplicate$ duplicate$ #0 < swap$ #9 > or not
+ { swap$ pop$ }
+ { pop$
+ duplicate$ "A" chr.to.int$ -
+ duplicate$ duplicate$ #0 < swap$ #5 > or not
+ { swap$ pop$ #10 + }
+ { pop$
+ duplicate$ "a" chr.to.int$ -
+ duplicate$ duplicate$ #0 < swap$ #5 > or not
+ { swap$ pop$ #10 + }
+ { pop$
+ pop$ #-1
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+INTEGERS { arith.accumulator }
+
+FUNCTION {str.to.hex}
+{ #0 'arith.accumulator :=
+ { duplicate$ empty$ not }
+ { duplicate$ #1 #1 substring$ chr.to.hex
+ duplicate$ #0 <
+ { pop$ pop$ ""
+ }
+ { arith.accumulator #16 multiply + 'arith.accumulator :=
+ #2 global.max$ substring$
+ }
+ if$
+ }
+ while$
+ pop$ arith.accumulator
+}
+
+FUNCTION {diagn.cmntlog}
+{
+ duplicate$ top$ "%" swap$ * write$ newline$
+}
+
+INTEGERS { control.key control.author control.editor control.title control.pages control.eprint control.year }
+
+INTEGERS { control.author.jnrlst control.author.dotless control.author.nospace control.author.initials control.author.nocomma control.author.first control.author.reversed }
+
+FUNCTION { control.init }
+{
+ #0
+ 'control.key :=
+ #0
+ #8 +
+ #64 +
+ 'control.author :=
+ #1
+ 'control.author.jnrlst :=
+ #0
+ 'control.author.dotless :=
+ #0
+ 'control.author.nospace :=
+ #1
+ 'control.author.initials :=
+ #0
+ 'control.author.nocomma :=
+ #0
+ 'control.author.first :=
+ #0
+ 'control.author.reversed :=
+ #1
+ 'control.editor :=
+ #-1
+ 'control.title :=
+ #0
+ 'control.pages :=
+ #0
+ 'control.eprint :=
+ #1
+ 'control.year :=
+}
+
+FUNCTION {warning.dependency}
+{
+ " (dependency: " * swap$ * ") set " * swap$ int.to.str$ * warning$
+}
+
+FUNCTION {control.check}
+{
+ control.editor
+ {
+ "editor formatted same as author"
+ control.author.reversed {
+ duplicate$ #0 swap$ "reversed" warning.dependency
+ #0 'control.author.reversed :=
+ } 'skip$ if$
+ control.author.first {
+ duplicate$ #0 swap$ "first" warning.dependency
+ #0 'control.author.first :=
+ } 'skip$ if$
+ control.author.nocomma {
+ duplicate$ #0 swap$ "nocomma" warning.dependency
+ #0 'control.author.nocomma :=
+ } 'skip$ if$
+ pop$
+ } 'skip$ if$
+ control.author.reversed 'skip$
+ {
+ "not reversed"
+ control.author.nospace {
+ duplicate$ #0 swap$ "nospace" warning.dependency
+ #0 'control.author.nospace :=
+ } 'skip$ if$
+ control.author.jnrlst 'skip$ {
+ duplicate$ #1 swap$ "jnrlst" warning.dependency
+ #1 'control.author.jnrlst :=
+ } if$
+ control.author.initials {
+ duplicate$ ", initials" *
+ control.author.dotless {
+ duplicate$ #0 swap$ "dotless" warning.dependency
+ #0 'control.author.dotless :=
+ } 'skip$ if$
+ pop$
+ } 'skip$ if$
+ pop$
+ }
+ if$
+ control.author.initials 'skip$ {
+ "not initials"
+ control.author.nocomma {
+ duplicate$ #0 swap$ "nocomma" warning.dependency
+ #0 'control.author.nocomma :=
+ } 'skip$ if$
+ control.author.nospace {
+ duplicate$ #0 swap$ "nospace" warning.dependency
+ #0 'control.author.nospace :=
+ } 'skip$ if$
+ control.author.dotless 'skip$ {
+ duplicate$ #1 swap$ "dotless" warning.dependency
+ #1 'control.author.dotless :=
+ } if$
+ pop$
+ } if$
+}
+
+FUNCTION {control.parse}
+{
+ duplicate$ duplicate$ missing$
+ {
+ pop$ pop$ pop$
+ }
+ { empty$
+ {
+ pop$ #-1
+ }{
+ str.to.hex
+ }
+ if$
+ swap$ :=
+ }
+ if$
+}
+
+FUNCTION {control.dump}
+{
+ duplicate$ missing$ { pop$ "N/A" } 'skip$ if$
+ "{" swap$ * "}, " *
+ *
+}
+
+INTEGERS { decode.threshold }
+
+FUNCTION {control.decode}
+{
+ - duplicate$
+ #0 <
+ {
+ skip$ pop$ swap$ #0
+ }
+ {
+ swap$ pop$ swap$ #1
+ }
+ if$
+ swap$ :=
+}
+
+FUNCTION {control.author.decode}
+{
+ control.author
+ duplicate$ duplicate$ #0 < swap$ #128 < not or
+ {
+ int.to.str$ "(" swap$ * ")" *
+ "Control cannot interpret author " swap$ *
+ warning$
+ }{
+ 'control.author.jnrlst swap$ duplicate$ #64 control.decode
+ 'control.author.dotless swap$ duplicate$ #32 control.decode
+ 'control.author.nospace swap$ duplicate$ #16 control.decode
+ 'control.author.initials swap$ duplicate$ #8 control.decode
+ 'control.author.nocomma swap$ duplicate$ #4 control.decode
+ 'control.author.first swap$ duplicate$ #2 control.decode
+ 'control.author.reversed swap$ duplicate$ #1 control.decode
+ duplicate$ #0 =
+ 'skip$
+ {
+ "Control: residue of author"
+ "(" swap$ * ")" * *
+ warning$
+ }
+ if$
+ pop$
+ }
+ if$
+}
+
+FUNCTION {control.setup}
+{
+ type$ cite$ "{" swap$ * "}, " * *
+ "control.key" key control.dump *
+ "control.author" author control.dump *
+ "control.editor" editor control.dump *
+ "control.title" title control.dump *
+ "control.pages" pages control.dump *
+ "control.year" year control.dump *
+ "control.eprint" eprint control.dump *
+ top$
+ 'control.key key control.parse
+ 'control.author author control.parse
+ 'control.editor editor control.parse
+ 'control.title title control.parse
+ 'control.pages pages control.parse
+ 'control.year year control.parse
+ 'control.eprint eprint control.parse
+ control.author.decode
+}
+
+FUNCTION {control.pass}
+{ type$ "control" = 'control.setup 'skip$ if$
+}
+
+FUNCTION {control.presort}
+{
+}
+
+FUNCTION {control.forward}
+{
+}
+
+FUNCTION {control.reverse}
+{
+}
+
+FUNCTION {control.sort}
+{
+}
+
+FUNCTION {control.longest.label}
+{
+}
+
+FUNCTION {control.key.bib}
+{
+ "Control: key "
+ control.key
+ duplicate$ "(" swap$ int.to.str$ * ") " * swap$
+ pop$ *
+ diagn.cmntlog
+}
+
+FUNCTION {control.author.bib}
+{
+ "Control: author "
+ control.author "(" swap$ int.to.str$ * ")" * *
+ control.author.reversed { " reversed" * }{} if$
+ control.author.first { " first" * }{} if$
+ control.author.nocomma { " nocomma" * }{} if$
+ control.author.initials { " initials" * }{} if$
+ control.author.nospace { " nospace" * }{} if$
+ control.author.dotless { " dotless" * }{} if$
+ control.author.jnrlst { " jnrlst" * }{} if$
+ diagn.cmntlog
+}
+
+FUNCTION {control.editor.bib}
+{
+ "Control: editor formatted "
+ control.editor
+ duplicate$ "(" swap$ int.to.str$ * ") " * swap$
+ duplicate$ #0 < {
+ pop$
+ "disabled!"
+ } {
+ #0 > {
+ "identically to author"
+ } {
+ "differently from author"
+ } if$
+ } if$ * *
+ diagn.cmntlog
+}
+
+FUNCTION {control.title.bib}
+{
+ "Control: production of article title "
+ control.title
+ duplicate$ "(" swap$ int.to.str$ * ") " * swap$
+ duplicate$ #0 < {
+ pop$
+ "disabled"
+ } {
+ #0 > {
+ "required"
+ } {
+ "allowed"
+ } if$
+ } if$ * *
+ diagn.cmntlog
+}
+
+FUNCTION {control.pages.bib}
+{
+ "Control: page "
+ control.pages
+ duplicate$ "(" swap$ int.to.str$ * ") " * swap$
+ duplicate$ #0 < {
+ pop$
+ "none"
+ } {
+ #0 > {
+ "range"
+ } {
+ "single"
+ } if$
+ } if$ * *
+ diagn.cmntlog
+}
+
+FUNCTION {control.year.bib}
+{
+ "Control: year "
+ control.year
+ duplicate$ "(" swap$ int.to.str$ * ") " * swap$
+ duplicate$ #0 < {
+ pop$
+ "disabled!"
+ } {
+ #0 > {
+ "truncated"
+ } {
+ "verbatim"
+ } if$
+ } if$ * *
+ diagn.cmntlog
+}
+
+FUNCTION {control.eprint.bib}
+{
+ "Control: production of eprint "
+ control.eprint
+ duplicate$ "(" swap$ int.to.str$ * ") " * swap$
+ #0 < { "disabled" } { "enabled" } if$ * *
+ diagn.cmntlog
+}
+
+FUNCTION {control.bib}
+{
+ control.key.bib
+ control.author.bib
+ control.editor.bib
+ control.title.bib
+ control.pages.bib
+ control.year.bib
+ control.eprint.bib
+}
+
+FUNCTION {init.state.consts}
+{
+ #0 'before.all :=
+ #1 'after.word :=
+ #2 'after.punctuation :=
+ #3 'after.sentence :=
+ #4 'after.block :=
+ #0 'punctuation.no :=
+ #1 'punctuation.space :=
+ #2 'punctuation.yes :=
+ "" 'bibfield :=
+ "" 'output.bibfield :=
+}
+
+STRINGS { s t}
+FUNCTION {block.punctuation}
+{ ""
+ "," *
+}
+
+FUNCTION {word.space}
+{
+ "\ "
+}
+
+FUNCTION {show.stackstring.one}{
+ "(" *
+ output.state int.to.str$ *
+ "," * punctuation.state int.to.str$ *
+ ")" * top$
+ duplicate$ "1(" swap$ * ")" * top$
+}
+
+FUNCTION {show.stackstring.two}{
+ "(" *
+ output.state int.to.str$ *
+ "," * punctuation.state int.to.str$ *
+ ")" * top$
+ swap$
+ duplicate$ "1(" swap$ * ")" * top$
+ swap$
+ duplicate$ "2(" swap$ * ")" * top$
+}
+
+FUNCTION {bibfield.command}{ "\bibfield "}
+
+FUNCTION {output.nonnull}
+{
+ swap$
+ output.state after.word =
+ {
+ block.punctuation *
+ word.space *
+ }
+ {
+ output.state after.punctuation =
+ {
+ word.space *
+ }
+ {
+ output.state after.block = output.state after.sentence = or
+ {
+ add.period$
+ "\EOS\ " *
+ }{
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ output.bibfield duplicate$ empty$ 'pop$
+ {
+ bibfield.command
+ " {" * swap$ * "} {" * swap$ * "}" *
+ }
+ if$
+ write$
+ bibfield 'output.bibfield := "" 'bibfield :=
+ output.state after.block =
+ {
+ newline$
+ "\newblock " write$
+ }
+ 'skip$
+ if$
+ punctuation.state duplicate$
+ punctuation.yes 'punctuation.state :=
+ punctuation.no =
+ { pop$ before.all }
+ { punctuation.yes = { after.word }{ after.punctuation } if$ }
+ if$
+ 'output.state :=
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ {
+ pop$
+ "" 'bibfield :=
+ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.nopunct}
+{
+ punctuation.no 'punctuation.state :=
+ output.nonnull
+}
+
+FUNCTION {output.check}
+{ swap$
+ duplicate$ empty$
+ { pop$ "empty " swap$ * " in " * cite$ * warning$ }
+ { swap$ pop$ output.nonnull }
+ if$
+}
+
+FUNCTION {bbl.open} { "\BibitemOpen " }
+
+FUNCTION {bbl.shut} { "\BibitemShut " }
+
+FUNCTION {bibitem.shut.stop} { bbl.shut "{Stop}%" * }
+
+FUNCTION {bibitem.shut.nostop} { bbl.shut "{NoStop}%" * }
+
+FUNCTION {bibitem.shut}
+{
+ non.stop
+ {
+ bibitem.shut.nostop *
+ }{
+ bibitem.shut.stop *
+ }
+ if$
+}
+
+FUNCTION {html.itag} {
+ "p"
+}
+
+FUNCTION {html.ltag} {
+ ""
+}
+
+FUNCTION {output.SLACcitation}
+{ SLACcitation empty$
+ 'skip$
+ {
+ newline$
+ SLACcitation write$
+ }
+ if$
+}
+
+FUNCTION {fin.entry}
+{
+ bibitem.shut
+ write$
+ output.SLACcitation
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.block.comma}
+{
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block = output.state before.all = or
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence.comma}
+{
+}
+
+FUNCTION {sentence.or.colon}
+{
+ new.sentence
+}
+
+FUNCTION {add.blank}
+{
+ word.space *
+ before.all 'output.state :=
+}
+
+FUNCTION {no.blank.or.punct}
+{
+ "\hspace {0pt}" *
+ before.all 'output.state :=
+}
+
+FUNCTION {date.block}
+{
+ new.block.comma
+ skip$
+}
+
+STRINGS {z}
+FUNCTION {remove.dots}
+{
+ control.author.dotless {
+ 'z :=
+ ""
+ { z empty$ not }
+ { z #1 #1 substring$
+ z #2 global.max$ substring$ 'z :=
+ duplicate$ "." = 'pop$
+ { * }
+ if$
+ }
+ while$
+ } 'skip$ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{
+ duplicate$ empty$
+ { pop$ "" }
+ {
+ "\emph {" swap$ * "}" *
+ }
+ if$
+}
+
+FUNCTION {bolden}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "\textbf {" swap$ * "}" * }
+ if$
+}
+
+FUNCTION {bib.name.font}
+{
+ duplicate$ empty$
+ { pop$ "" }
+ {
+ "\bibnamefont {" swap$ * "}" *
+ }
+ if$
+}
+
+FUNCTION {bib.fname.font}
+{
+ duplicate$ empty$
+ { pop$ "" }
+ {
+ "\bibfnamefont {" swap$ * "}" *
+ }
+ if$
+}
+
+FUNCTION {cite.name.font}
+{
+ duplicate$ empty$
+ { pop$ "" }
+ {
+ "\citenamefont {" swap$ * "}" *
+ }
+ if$
+}
+
+FUNCTION {tie.or.space.prefix}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { word.space }
+ if$
+ swap$
+}
+
+FUNCTION {capitalize}
+{
+ "u" change.case$ "t" change.case$
+}
+
+FUNCTION {space.word}
+{ word.space swap$ * word.space * }
+
+ % Here are the language-specific definitions for explicit words.
+ % Each function has a name bbl.xxx where xxx is the English word.
+ % The language selected here is ENGLISH
+
+FUNCTION {bbl.and}
+{
+ "and"
+}
+
+FUNCTION {bbl.etal}
+{
+ "et~al."
+}
+
+FUNCTION {bbl.editors}
+{
+ "eds."
+}
+
+FUNCTION {bbl.editor}
+{
+ "ed."
+}
+
+FUNCTION {bbl.edby}
+{ "edited by" }
+
+FUNCTION {bbl.edition}
+{
+ "ed."
+}
+
+FUNCTION {bbl.volume}
+{
+ "vol."
+}
+
+FUNCTION {bbl.of}
+{ "of" }
+
+FUNCTION {bbl.number}
+{
+ "no."
+}
+
+FUNCTION {bbl.nr}
+{ "no." }
+
+FUNCTION {bbl.in}
+{ "in" }
+
+FUNCTION {bbl.pages}
+{
+ "pp."
+}
+
+FUNCTION {bbl.page}
+{
+ "p."
+}
+
+FUNCTION {bbl.eidpp}
+{ "pages" }
+
+FUNCTION {bbl.chapter}
+{
+ "chap."
+}
+
+FUNCTION {bbl.techrep}
+{
+ "Tech. Rep."
+}
+
+FUNCTION {bbl.mthesis}
+{ "Master's thesis" }
+
+FUNCTION {bbl.phdthesis}
+{ "Ph.D. thesis" }
+
+FUNCTION {bbl.first}
+{
+ "1st"
+}
+
+FUNCTION {bbl.second}
+{
+ "2nd"
+}
+
+FUNCTION {bbl.third}
+{
+ "3rd"
+}
+
+FUNCTION {bbl.fourth}
+{
+ "4th"
+}
+
+FUNCTION {bbl.fifth}
+{
+ "5th"
+}
+
+FUNCTION {bbl.st}
+{ "st" }
+
+FUNCTION {bbl.nd}
+{ "nd" }
+
+FUNCTION {bbl.rd}
+{ "rd" }
+
+FUNCTION {bbl.th}
+{ "th" }
+
+MACRO {jan} {"Jan."}
+
+MACRO {feb} {"Feb."}
+
+MACRO {mar} {"Mar."}
+
+MACRO {apr} {"Apr."}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"Jun."}
+
+MACRO {jul} {"Jul."}
+
+MACRO {aug} {"Aug."}
+
+MACRO {sep} {"Sep."}
+
+MACRO {oct} {"Oct."}
+
+MACRO {nov} {"Nov."}
+
+MACRO {dec} {"Dec."}
+
+FUNCTION {bbl.url.prefix}
+{
+ "\urlprefix "
+}
+
+FUNCTION {eng.ord}
+{ duplicate$ "1" swap$ *
+ #-2 #1 substring$ "1" =
+ { bbl.th * }
+ { duplicate$ #-1 #1 substring$
+ duplicate$ "1" =
+ { pop$ bbl.st * }
+ { duplicate$ "2" =
+ { pop$ bbl.nd * }
+ { "3" =
+ { bbl.rd * }
+ { bbl.th * }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+ %-------------------------------------------------------------------
+ % Begin module:
+ % \ProvidesFile{physjour.mbs}[2002/01/14 2.2 (PWD)]
+MACRO {aa}{"Astron. \& Astrophys."}
+MACRO {aasup}{"Astron. \& Astrophys. Suppl. Ser."}
+MACRO {aj} {"Astron. J."}
+MACRO {aph} {"Acta Phys."}
+MACRO {advp} {"Adv. Phys."}
+MACRO {ajp} {"Amer. J. Phys."}
+MACRO {ajm} {"Amer. J. Math."}
+MACRO {amsci} {"Amer. Sci."}
+MACRO {anofd} {"Ann. Fluid Dyn."}
+MACRO {am} {"Ann. Math."}
+MACRO {ap} {"Ann. Phys. (NY)"}
+MACRO {adp} {"Ann. Phys. (Leipzig)"}
+MACRO {ao} {"Appl. Opt."}
+MACRO {apl} {"Appl. Phys. Lett."}
+MACRO {app} {"Astroparticle Phys."}
+MACRO {apj} {"Astrophys. J."}
+MACRO {apjsup} {"Astrophys. J. Suppl."}
+MACRO {apss} {"Astrophys. Space Sci."}
+MACRO {araa} {"Ann. Rev. Astron. Astrophys."}
+MACRO {baas} {"Bull. Amer. Astron. Soc."}
+MACRO {baps} {"Bull. Amer. Phys. Soc."}
+MACRO {cmp} {"Comm. Math. Phys."}
+MACRO {cpam} {"Commun. Pure Appl. Math."}
+MACRO {cppcf} {"Comm. Plasma Phys. \& Controlled Fusion"}
+MACRO {cpc} {"Comp. Phys. Comm."}
+MACRO {cqg} {"Class. Quant. Grav."}
+MACRO {cra} {"C. R. Acad. Sci. A"}
+MACRO {fed} {"Fusion Eng. \& Design"}
+MACRO {ft} {"Fusion Tech."}
+MACRO {grg} {"Gen. Relativ. Gravit."}
+MACRO {ieeens} {"IEEE Trans. Nucl. Sci."}
+MACRO {ieeeps} {"IEEE Trans. Plasma Sci."}
+MACRO {ijimw} {"Interntl. J. Infrared \& Millimeter Waves"}
+MACRO {ip} {"Infrared Phys."}
+MACRO {irp} {"Infrared Phys."}
+MACRO {jap} {"J. Appl. Phys."}
+MACRO {jasa} {"J. Acoust. Soc. America"}
+MACRO {jcp} {"J. Comp. Phys."}
+MACRO {jetp} {"Sov. Phys.--JETP"}
+MACRO {jfe} {"J. Fusion Energy"}
+MACRO {jfm} {"J. Fluid Mech."}
+MACRO {jmp} {"J. Math. Phys."}
+MACRO {jne} {"J. Nucl. Energy"}
+MACRO {jnec} {"J. Nucl. Energy, C: Plasma Phys., Accelerators, Thermonucl. Res."}
+MACRO {jnm} {"J. Nucl. Mat."}
+MACRO {jpc} {"J. Phys. Chem."}
+MACRO {jpp} {"J. Plasma Phys."}
+MACRO {jpsj} {"J. Phys. Soc. Japan"}
+MACRO {jsi} {"J. Sci. Instrum."}
+MACRO {jvst} {"J. Vac. Sci. \& Tech."}
+MACRO {nat} {"Nature"}
+MACRO {nature} {"Nature"}
+MACRO {nedf} {"Nucl. Eng. \& Design/Fusion"}
+MACRO {nf} {"Nucl. Fusion"}
+MACRO {nim} {"Nucl. Inst. \& Meth."}
+MACRO {nimpr} {"Nucl. Inst. \& Meth. in Phys. Res."}
+MACRO {np} {"Nucl. Phys."}
+MACRO {npb} {"Nucl. Phys. B"}
+MACRO {nt/f} {"Nucl. Tech./Fusion"}
+MACRO {npbpc} {"Nucl. Phys. B (Proc. Suppl.)"}
+MACRO {inc} {"Nuovo Cimento"}
+MACRO {nc} {"Nuovo Cimento"}
+MACRO {pf} {"Phys. Fluids"}
+MACRO {pfa} {"Phys. Fluids A: Fluid Dyn."}
+MACRO {pfb} {"Phys. Fluids B: Plasma Phys."}
+MACRO {pl} {"Phys. Lett."}
+MACRO {pla} {"Phys. Lett. A"}
+MACRO {plb} {"Phys. Lett. B"}
+MACRO {prep} {"Phys. Rep."}
+MACRO {pnas} {"Proc. Nat. Acad. Sci. USA"}
+MACRO {pp} {"Phys. Plasmas"}
+MACRO {ppcf} {"Plasma Phys. \& Controlled Fusion"}
+MACRO {phitrsl} {"Philos. Trans. Roy. Soc. London"}
+MACRO {prl} {"Phys. Rev. Lett."}
+MACRO {pr} {"Phys. Rev."}
+MACRO {physrev} {"Phys. Rev."}
+MACRO {pra} {"Phys. Rev. A"}
+MACRO {prb} {"Phys. Rev. B"}
+MACRO {prc} {"Phys. Rev. C"}
+MACRO {prd} {"Phys. Rev. D"}
+MACRO {pre} {"Phys. Rev. E"}
+MACRO {ps} {"Phys. Scripta"}
+MACRO {procrsl} {"Proc. Roy. Soc. London"}
+MACRO {rmp} {"Rev. Mod. Phys."}
+MACRO {rsi} {"Rev. Sci. Inst."}
+MACRO {science} {"Science"}
+MACRO {sciam} {"Sci. Am."}
+MACRO {sam} {"Stud. Appl. Math."}
+MACRO {sjpp} {"Sov. J. Plasma Phys."}
+MACRO {spd} {"Sov. Phys.--Doklady"}
+MACRO {sptp} {"Sov. Phys.--Tech. Phys."}
+MACRO {spu} {"Sov. Phys.--Uspeki"}
+MACRO {st} {"Sky and Telesc."}
+ % End module: physjour.mbs
+ %-------------------------------------------------------------------
+ % Begin module:
+ % \ProvidesFile{geojour.mbs}[2002/07/10 2.0h (PWD)]
+MACRO {aisr} {"Adv. Space Res."}
+MACRO {ag} {"Ann. Geophys."}
+MACRO {anigeo} {"Ann. Geofis."}
+MACRO {angl} {"Ann. Glaciol."}
+MACRO {andmet} {"Ann. d. Meteor."}
+MACRO {andgeo} {"Ann. d. Geophys."}
+MACRO {andphy} {"Ann. Phys.-Paris"}
+MACRO {afmgb} {"Arch. Meteor. Geophys. Bioklimatol."}
+MACRO {atph} {"Atm\'osphera"}
+MACRO {aao} {"Atmos. Ocean"}
+MACRO {ass}{"Astrophys. Space Sci."}
+MACRO {atenv} {"Atmos. Environ."}
+MACRO {aujag} {"Aust. J. Agr. Res."}
+MACRO {aumet} {"Aust. Meteorol. Mag."}
+MACRO {blmet} {"Bound.-Lay. Meteorol."}
+MACRO {bams} {"Bull. Amer. Meteorol. Soc."}
+MACRO {cch} {"Clim. Change"}
+MACRO {cdyn} {"Clim. Dynam."}
+MACRO {cbul} {"Climatol. Bull."}
+MACRO {cap} {"Contrib. Atmos. Phys."}
+MACRO {dsr} {"Deep-Sea Res."}
+MACRO {dhz} {"Dtsch. Hydrogr. Z."}
+MACRO {dao} {"Dynam. Atmos. Oceans"}
+MACRO {eco} {"Ecology"}
+MACRO {empl}{"Earth, Moon and Planets"}
+MACRO {envres} {"Environ. Res."}
+MACRO {envst} {"Environ. Sci. Technol."}
+MACRO {ecms} {"Estuarine Coastal Mar. Sci."}
+MACRO {expa}{"Exper. Astron."}
+MACRO {geoint} {"Geofis. Int."}
+MACRO {geopub} {"Geofys. Publ."}
+MACRO {geogeo} {"Geol. Geofiz."}
+MACRO {gafd} {"Geophys. Astrophys. Fluid Dyn."}
+MACRO {gfd} {"Geophys. Fluid Dyn."}
+MACRO {geomag} {"Geophys. Mag."}
+MACRO {georl} {"Geophys. Res. Lett."}
+MACRO {grl} {"Geophys. Res. Lett."}
+MACRO {ga} {"Geophysica"}
+MACRO {gs} {"Geophysics"}
+MACRO {ieeetap} {"IEEE Trans. Antenn. Propag."}
+MACRO {ijawp} {"Int. J. Air Water Pollut."}
+MACRO {ijc} {"Int. J. Climatol."}
+MACRO {ijrs} {"Int. J. Remote Sens."}
+MACRO {jam} {"J. Appl. Meteorol."}
+MACRO {jaot} {"J. Atmos. Ocean. Technol."}
+MACRO {jatp} {"J. Atmos. Terr. Phys."}
+MACRO {jastp} {"J. Atmos. Solar-Terr. Phys."}
+MACRO {jce} {"J. Climate"}
+MACRO {jcam} {"J. Climate Appl. Meteor."}
+MACRO {jcm} {"J. Climate Meteor."}
+MACRO {jcy} {"J. Climatol."}
+MACRO {jgr} {"J. Geophys. Res."}
+MACRO {jga} {"J. Glaciol."}
+MACRO {jh} {"J. Hydrol."}
+MACRO {jmr} {"J. Mar. Res."}
+MACRO {jmrj} {"J. Meteor. Res. Japan"}
+MACRO {jm} {"J. Meteor."}
+MACRO {jpo} {"J. Phys. Oceanogr."}
+MACRO {jra} {"J. Rech. Atmos."}
+MACRO {jaes} {"J. Aeronaut. Sci."}
+MACRO {japca} {"J. Air Pollut. Control Assoc."}
+MACRO {jas} {"J. Atmos. Sci."}
+MACRO {jmts} {"J. Mar. Technol. Soc."}
+MACRO {jmsj} {"J. Meteorol. Soc. Japan"}
+MACRO {josj} {"J. Oceanogr. Soc. Japan"}
+MACRO {jwm} {"J. Wea. Mod."}
+MACRO {lao} {"Limnol. Oceanogr."}
+MACRO {mwl} {"Mar. Wea. Log"}
+MACRO {mau} {"Mausam"}
+MACRO {meteor} {"``Meteor'' Forschungsergeb."}
+MACRO {map} {"Meteorol. Atmos. Phys."}
+MACRO {metmag} {"Meteor. Mag."}
+MACRO {metmon} {"Meteor. Monogr."}
+MACRO {metrun} {"Meteor. Rundsch."}
+MACRO {metzeit} {"Meteor. Z."}
+MACRO {metgid} {"Meteor. Gidrol."}
+MACRO {mwr} {"Mon. Weather Rev."}
+MACRO {nwd} {"Natl. Weather Dig."}
+MACRO {nzjmfr} {"New Zeal. J. Mar. Freshwater Res."}
+MACRO {npg} {"Nonlin. Proc. Geophys."}
+MACRO {om} {"Oceanogr. Meteorol."}
+MACRO {ocac} {"Oceanol. Acta"}
+MACRO {oceanus} {"Oceanus"}
+MACRO {paleoc} {"Paleoceanography"}
+MACRO {pce} {"Phys. Chem. Earth"}
+MACRO {pmg} {"Pap. Meteor. Geophys."}
+MACRO {ppom} {"Pap. Phys. Oceanogr. Meteor."}
+MACRO {physzeit} {"Phys. Z."}
+MACRO {pps} {"Planet. Space Sci."}
+MACRO {pss} {"Planet. Space Sci."}
+MACRO {pag} {"Pure Appl. Geophys."}
+MACRO {qjrms} {"Quart. J. Roy. Meteorol. Soc."}
+MACRO {quatres} {"Quat. Res."}
+MACRO {rsci} {"Radio Sci."}
+MACRO {rse} {"Remote Sens. Environ."}
+MACRO {rgeo} {"Rev. Geophys."}
+MACRO {rgsp} {"Rev. Geophys. Space Phys."}
+MACRO {rdgeo} {"Rev. Geofis."}
+MACRO {revmeta} {"Rev. Meteorol."}
+MACRO {sgp}{"Surveys in Geophys."}
+MACRO {sp} {"Solar Phys."}
+MACRO {ssr} {"Space Sci. Rev."}
+MACRO {tellus} {"Tellus"}
+MACRO {tac} {"Theor. Appl. Climatol."}
+MACRO {tagu} {"Trans. Am. Geophys. Union (EOS)"}
+MACRO {wrr} {"Water Resour. Res."}
+MACRO {weather} {"Weather"}
+MACRO {wafc} {"Weather Forecast."}
+MACRO {ww} {"Weatherwise"}
+MACRO {wmob} {"WMO Bull."}
+MACRO {zeitmet} {"Z. Meteorol."}
+ % End module: geojour.mbs
+ %-------------------------------------------------------------------
+ % Begin module:
+ % \ProvidesFile{photjour.mbs}[1999/02/24 2.0b (PWD)]
+
+MACRO {appopt} {"Appl. Opt."}
+MACRO {bell} {"Bell Syst. Tech. J."}
+MACRO {ell} {"Electron. Lett."}
+MACRO {jasp} {"J. Appl. Spectr."}
+MACRO {jqe} {"IEEE J. Quantum Electron."}
+MACRO {jlwt} {"J. Lightwave Technol."}
+MACRO {jmo} {"J. Mod. Opt."}
+MACRO {josa} {"J. Opt. Soc. America"}
+MACRO {josaa} {"J. Opt. Soc. Amer.~A"}
+MACRO {josab} {"J. Opt. Soc. Amer.~B"}
+MACRO {jdp} {"J. Phys. (Paris)"}
+MACRO {oc} {"Opt. Commun."}
+MACRO {ol} {"Opt. Lett."}
+MACRO {phtl} {"IEEE Photon. Technol. Lett."}
+MACRO {pspie} {"Proc. Soc. Photo-Opt. Instrum. Eng."}
+MACRO {sse} {"Solid-State Electron."}
+MACRO {sjot} {"Sov. J. Opt. Technol."}
+MACRO {sjqe} {"Sov. J. Quantum Electron."}
+MACRO {sleb} {"Sov. Phys.--Leb. Inst. Rep."}
+MACRO {stph} {"Sov. Phys.--Techn. Phys."}
+MACRO {stphl} {"Sov. Techn. Phys. Lett."}
+MACRO {vr} {"Vision Res."}
+MACRO {zph} {"Z. f. Physik"}
+MACRO {zphb} {"Z. f. Physik~B"}
+MACRO {zphd} {"Z. f. Physik~D"}
+
+MACRO {CLEO} {"CLEO"}
+MACRO {ASSL} {"Adv. Sol.-State Lasers"}
+MACRO {OSA} {"OSA"}
+ % End module: photjour.mbs
+%% Copyright 1994-2007 Patrick W Daly
+MACRO {acmcs} {"ACM Comput. Surv."}
+
+MACRO {acta} {"Acta Inf."}
+
+MACRO {cacm} {"Commun. ACM"}
+
+MACRO {ibmjrd} {"IBM J. Res. Dev."}
+
+MACRO {ibmsj} {"IBM Syst.~J."}
+
+MACRO {ieeese} {"IEEE Trans. Software Eng."}
+
+MACRO {ieeetc} {"IEEE Trans. Comput."}
+
+MACRO {ieeetcad}
+ {"IEEE Trans. Comput. Aid. Des."}
+
+MACRO {ipl} {"Inf. Process. Lett."}
+
+MACRO {jacm} {"J.~ACM"}
+
+MACRO {jcss} {"J.~Comput. Syst. Sci."}
+
+MACRO {scp} {"Sci. Comput. Program."}
+
+MACRO {sicomp} {"SIAM J. Comput."}
+
+MACRO {tocs} {"ACM Trans. Comput. Syst."}
+
+MACRO {tods} {"ACM Trans. Database Syst."}
+
+MACRO {tog} {"ACM Trans. Graphic."}
+
+MACRO {toms} {"ACM Trans. Math. Software"}
+
+MACRO {toois} {"ACM Trans. Office Inf. Syst."}
+
+MACRO {toplas} {"ACM Trans. Progr. Lang. Syst."}
+
+MACRO {tcs} {"Theor. Comput. Sci."}
+
+FUNCTION {bibinfo.command} { "\bibinfo " }
+
+FUNCTION {bibinfo.check}
+{ swap$
+ duplicate$ missing$
+ {
+ pop$
+ pop$ ""
+ }{
+ duplicate$ empty$
+ {
+ swap$ pop$
+ }{
+ swap$
+ bibinfo.command "{" * swap$ * "} {" * swap$ * "}" *
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {bibinfo.warn}
+{ swap$
+ duplicate$ missing$
+ {
+ swap$ "missing " swap$ * " in " * cite$ * warning$ pop$
+ ""
+ }{
+ duplicate$ empty$
+ {
+ swap$ "empty " swap$ * " in " * cite$ * warning$
+ }{
+ swap$
+ bibinfo.command " {" * swap$ * "} {" * swap$ * "}" *
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {archiv.base}
+{
+ "http://arxiv.org/abs"
+}
+
+FUNCTION {archiv.prefix.base}
+{
+ "arXiv"
+}
+
+FUNCTION {eprint.command}
+{
+ "\Eprint "
+}
+
+FUNCTION {format.eprint}
+{
+ eprint duplicate$ empty$
+ control.eprint #0 <
+ or
+ { pop$ "" }
+ {
+ duplicate$
+ ""
+ archive duplicate$ empty$ { pop$ archiv.base } 'skip$ if$ *
+ "/" *
+ swap$ *
+ "{" swap$ * "} " *
+ swap$
+ ""
+ archivePrefix duplicate$ empty$ { pop$ "" } { ":" * } if$ *
+ swap$ *
+ primaryClass duplicate$ empty$ { pop$ "" } { " [" swap$ * "]" * } if$ *
+ "{" swap$ * "} " *
+ *
+ eprint.command swap$ *
+ }
+ if$
+}
+
+FUNCTION {format.translation}
+{ translation duplicate$ empty$
+ 'skip$
+ { ""
+ "\translation{" * swap$ * "}" *
+ punctuation.space 'punctuation.state :=
+ }
+ if$
+}
+
+FUNCTION {format.url}
+{
+ url duplicate$ empty$
+ { pop$ "" }
+ {
+ "\url "
+ "{" * swap$ * "}" *
+ }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {check.speaker}
+{ key empty$ 'skip$
+ { key nameptr int.to.str$ =
+ {
+ bolden
+ }
+ 'skip$
+ if$
+ }
+ if$
+}
+
+
+STRINGS { bibinfo}
+
+FUNCTION {format.names.fname}
+{
+ control.author.initials {
+ control.author.dotless {
+ control.author.nospace {
+ "f{}"
+ } {
+ "f{~}"
+ } if$
+ } {
+ control.author.nospace {
+ "f{.}."
+ } {
+ "f."
+ } if$
+ } if$
+ } {
+ "ff"
+ } if$
+}
+
+FUNCTION {bracify}
+{
+ "{" swap$ * "}" *
+}
+
+FUNCTION {name.comma}
+{
+ control.author.nocomma 'skip$ { "," swap$ * } if$
+}
+
+FUNCTION {format.names.format.onefont}
+{
+ "{vv~}{ll}"
+ nameptr #1 >
+ control.author.first
+ and
+ control.author.reversed not
+ or
+ {
+ control.author.initials {
+ "f"
+ control.author.dotless 'skip$ {
+ "." *
+ } if$
+ "~" *
+ } {
+ "ff"
+ } if$
+ bracify
+ swap$
+ } {
+ format.names.fname
+ " " swap$ *
+ name.comma
+ bracify
+ }
+ if$
+ "jj"
+ " " swap$ *
+ name.comma
+ bracify
+ control.author.jnrlst 'skip$ 'swap$ if$
+ * *
+}
+
+FUNCTION {format.names.onefont}
+{
+ s nameptr format.names.format.onefont format.name$
+ remove.dots
+ bib.name.font
+}
+
+FUNCTION {format.names.morfont}
+{ s nameptr
+ "{vv~}{ll}" format.name$ bib.name.font
+ nameptr #1 >
+ control.author.first
+ and
+ control.author.reversed not
+ or
+ {
+ s nameptr
+ control.author.initials {
+ "f" % default: name + surname + comma junior
+ } {
+ "ff"
+ } if$
+ control.author.dotless 'skip$ {
+ "." * % nm-init % Initials. + surname (J. F. Smith) control.author.initials
+ } if$
+ bracify
+ format.name$ duplicate$ empty$ 'skip$
+ { tie.or.space.prefix bib.fname.font swap$ * }
+ if$
+ swap$
+ *
+ s nameptr
+ "{jj}" format.name$ duplicate$ empty$ 'skip$
+ { bib.fname.font ", " swap$ * }
+ if$
+ } {
+ "," *
+ s nameptr
+ format.names.fname
+ "jj"
+ " "
+ name.comma
+ control.author.jnrlst {
+ swap$ * skip$
+ } {
+ skip$ * swap$
+ } if$
+ bracify swap$ bracify swap$
+ *
+ format.name$
+ remove.dots
+ duplicate$ empty$ 'skip$
+ { bib.fname.font " " swap$ * }
+ if$
+ } if$
+ *
+}
+
+FUNCTION {names.punctuate}
+{
+ "," *
+ " " *
+}
+
+FUNCTION {format.names}
+{ 'bibinfo :=
+ duplicate$ empty$ { pop$ "" } {
+ duplicate$ num.names$
+ duplicate$ 'numnames :=
+ 'namesleft :=
+ 's :=
+ #1 'nameptr :=
+ ""
+ { namesleft #0 > }
+ {
+ format.names.morfont
+ bibinfo bibinfo.check
+ type$ "presentation" =
+ 'check.speaker
+ 'skip$
+ if$
+ 't :=
+ nameptr #1 > not
+ {
+ t *
+ } {
+ namesleft #1 >
+ {
+ names.punctuate
+ t *
+ } {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ numnames #2 >
+ 'names.punctuate
+ 'skip$
+ if$
+ t "others" =
+ {
+ " " *
+ bbl.etal
+ emphasize
+ *
+ } {
+ bbl.and
+ space.word *
+ t *
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ } if$
+}
+
+FUNCTION {format.names.ed.onefont}
+{
+ s nameptr
+ control.author.initials {
+ control.author.dotless {
+ control.author.nospace {
+ "{f{}~}{vv~}{ll}{ jj}" % nm-rvx|nm-rvcx
+ } {
+ "{f{~}~}{vv~}{ll}{ jj}" % nm-rv
+ } if$
+ } {
+ control.author.nospace {
+ "{f{.}.~}{vv~}{ll}{ jj}" % nm-rvv|nm-rvvc
+ }{
+ "{f.~}{vv~}{ll}{, jj}" % nm-init|nm-rev|nm-rev1
+ } if$
+ } if$
+ } {
+ "{ff~}{vv~}{ll}{, jj}"
+ } if$
+ format.name$
+ remove.dots
+ bib.name.font
+}
+
+FUNCTION {format.names.ed.morfont}
+{
+ control.author.reversed { %
+ control.author.initials { %
+ control.author.dotless { %
+ s nameptr
+ control.author.nospace { % nm-rvx nm-rvcx
+ "{f{}}"
+ } { % nm-rv
+ "{f{~}}"
+ } if$
+ format.name$ duplicate$ empty$ 'skip$
+ { tie.or.space.prefix bib.fname.font swap$ * }
+ if$
+ s nameptr
+ "{vv~}{ll}" format.name$ bib.name.font *
+ s nameptr
+ "{jj}" format.name$
+ remove.dots
+ duplicate$ empty$ 'skip$
+ { bib.fname.font " " swap$ * }
+ if$
+ } { % !control.author.dotless
+ s nameptr
+ control.author.nospace { % nm-rvv
+ "{ff}"
+ } { % nm-rev nm-rev1
+ "{f.}"
+ } if$
+ format.name$ duplicate$ empty$ 'skip$
+ { tie.or.space.prefix bib.fname.font swap$ * }
+ if$
+ s nameptr
+ "{vv~}{ll}" format.name$ bib.name.font *
+ s nameptr
+ "{jj}" format.name$
+ duplicate$ empty$ 'skip$
+ { bib.fname.font ", " swap$ * }
+ if$
+ } if$
+ } { % Full names !control.author.initials nm-revf nm-revv1
+ s nameptr
+ "{ff}"
+ format.name$ duplicate$ empty$ 'skip$
+ { tie.or.space.prefix bib.fname.font swap$ * }
+ if$
+ s nameptr
+ "{vv~}{ll}" format.name$ bib.name.font *
+ s nameptr
+ "{jj}" format.name$
+ duplicate$ empty$ 'skip$
+ { bib.fname.font ", " swap$ * }
+ if$
+ } if$
+ } { % !control.author.reversed nm-init
+ s nameptr
+ "{f.}"
+ format.name$ duplicate$ empty$ 'skip$
+ { tie.or.space.prefix bib.fname.font swap$ * }
+ if$
+ s nameptr
+ "{vv~}{ll}" format.name$ bib.name.font *
+ s nameptr
+ "{jj}" format.name$
+ duplicate$ empty$ 'skip$
+ { bib.fname.font ", " swap$ * }
+ if$
+ } if$
+ *
+}
+
+FUNCTION {format.names.ed}
+{
+ control.editor #0 > {
+ format.names
+ } {
+ 'bibinfo :=
+ duplicate$ empty$ 'skip$ {
+ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ {
+ format.names.ed.morfont
+ bibinfo bibinfo.check
+ 't :=
+ nameptr #1 >
+ {
+ namesleft #1 >
+ {
+ names.punctuate
+ t *
+ }{
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ numnames #2 >
+ 'names.punctuate
+ 'skip$
+ if$
+ t "others" =
+ {
+ " " * bbl.etal emphasize *
+ }{
+ bbl.and
+ space.word * t *
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ } if$
+ } if$
+}
+
+FUNCTION {format.key}
+{ empty$
+ { key field.or.null }
+ { "" }
+ if$
+}
+
+FUNCTION {format.authors}
+{ author "author" format.names
+ duplicate$ empty$ 'skip$
+ { collaboration "collaboration" bibinfo.check
+ duplicate$ empty$ 'skip$
+ { " (" swap$ * ")" * }
+ if$
+ *
+ }
+ if$
+ "author" 'bibfield :=
+}
+
+FUNCTION {get.bbl.editor}
+{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$
+}
+
+FUNCTION {format.editors}
+{ editor "editor" format.names duplicate$ empty$ 'skip$
+ {
+ "," *
+ word.space *
+ get.bbl.editor
+ *
+ }
+ if$
+}
+
+FUNCTION {format.isbn.output}
+{
+}
+
+FUNCTION {format.issn.output}
+{
+}
+
+FUNCTION {doi.base}
+{
+ "http://dx.doi.org/"
+}
+
+FUNCTION {doi.base.command}
+{
+ "\doibase "
+}
+
+FUNCTION {noop.command}
+{
+ "\href@noop "
+}
+
+FUNCTION {href.command}
+{
+ "\href "
+}
+
+FUNCTION {link.tag.open}
+{
+ doi duplicate$ empty$
+ {
+ pop$
+ url duplicate$ empty$
+ {
+ pop$ "" noop.command
+ }{
+ href.command
+ }
+ if$
+ }
+ {
+ doi.base.command swap$ *
+ href.command
+ }
+ if$
+ "{" * swap$ * "} {" *
+}
+
+FUNCTION {link.tag.shut}
+{
+ "}"
+}
+
+FUNCTION {link.open}
+{
+ link.tag.open output.nopunct
+}
+
+FUNCTION {link.shut}
+{
+ link.tag.shut *
+}
+
+FUNCTION {add.doi}
+{
+ link.tag.open swap$ * link.tag.shut *
+}
+
+FUNCTION {select.language}
+{ duplicate$ empty$
+ 'pop$
+ { language empty$
+ 'skip$
+ { "{\selectlanguage {" language * "}" * swap$ * "}" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.note}
+{
+ note empty$
+ { "" }
+ { note #1 #1 substring$
+ duplicate$ "{" =
+ 'skip$
+ {
+ output.state after.word = output.state after.punctuation = or
+ { "l" }
+ { "u" }
+ if$ change.case$
+ }
+ if$
+ note #2 global.max$ substring$ * "note" bibinfo.check
+ }
+ if$
+}
+
+FUNCTION {bbl.enquote}
+{
+ "\enquote "
+}
+
+FUNCTION {string.enquote}
+{
+ punctuation.no 'punctuation.state :=
+ non.stop {
+ block.punctuation
+ } { "" } if$
+ swap$ pop$
+ *
+ bbl.enquote "{" * swap$ * "}" *
+ word.space *
+}
+
+FUNCTION {format.title}
+{ title
+ duplicate$ empty$ 'skip$ { "t" change.case$ } if$
+ duplicate$ "title" bibinfo.check swap$
+ duplicate$ empty$ 'pop$
+ {
+ punctuation.yes 'punctuation.state :=
+ string.enquote
+ select.language
+ }
+ if$
+}
+
+FUNCTION {end.quote.title}
+{ title empty$
+ 'skip$
+ { before.all 'output.state := }
+ if$
+}
+
+FUNCTION {format.name.apply}
+{
+ s nameptr
+ "{vv~}{ll}"
+ format.name$
+ cite.name.font
+}
+
+FUNCTION {format.full.names}
+{
+ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { format.name.apply
+ 't :=
+ nameptr #1 >
+ {
+ namesleft #1 >
+ { ", " * t * }
+ {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ {
+ 't :=
+ }
+ 'pop$
+ if$
+ t "others" =
+ {
+ " " * bbl.etal
+ emphasize *
+ }{
+ numnames #2 > { "," * }{ skip$ } if$
+ bbl.and
+ space.word * t *
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {make.full.names}
+{
+ key editor author
+ type$ "proceedings" =
+ type$ "book" =
+ type$ "inbook" =
+ or { pop$ }{ { pop$ "" }{ swap$ pop$ "" swap$ } if$ } if$
+ duplicate$ empty$
+ { pop$
+ duplicate$ empty$
+ { pop$
+ duplicate$ empty$
+ { pop$
+ cite$ #1 #3 substring$
+ }{
+ skip$
+ }
+ if$
+ }
+ { swap$ pop$ format.full.names }
+ if$
+ }
+ { swap$ pop$ swap$ pop$ format.full.names }
+ if$
+}
+
+FUNCTION {year.bibitem}
+{
+ year duplicate$ empty$
+ { pop$ ""
+ }{
+ skip$
+ } if$
+ extra.label *
+}
+
+FUNCTION {output.bibitem}
+{
+ newline$
+ ""
+ label
+ * ")" *
+ make.full.names duplicate$ short.list =
+ { pop$ }{ * } if$
+ bracify
+ "[" swap$ * "]" *
+ cite$ bracify "%" *
+ *
+ "\bibitem "
+ swap$ *
+ write$ newline$
+ " "
+ duplicate$ bbl.open * write$ newline$
+ before.all 'output.state :=
+ punctuation.yes 'punctuation.state :=
+}
+
+FUNCTION {n.dashify}
+{
+ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }{
+ { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }{
+ t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {word.in}
+{
+ bbl.in
+ word.space *
+}
+
+FUNCTION {date.encapsulate}
+{
+ duplicate$ empty$
+ 'skip$
+ {
+ before.all 'output.state :=
+ " (" swap$ * ")" *
+ }
+ if$
+}
+
+FUNCTION {format.date}
+{
+ year "year" bibinfo.check duplicate$ empty$
+ {
+ }
+ 'skip$
+ if$
+ extra.label *
+ date.encapsulate
+}
+
+FUNCTION {format.date.output.check}
+{
+ format.date
+ "year" output.check
+}
+
+FUNCTION {format.date.output}
+{
+ format.date.output.check
+}
+
+FUNCTION {format.btitle}
+{
+ booktitle duplicate$ empty$ { pop$
+ title
+ } 'skip$ if$
+ "title" bibinfo.check
+ duplicate$ empty$ 'skip$
+ {
+ emphasize
+ select.language
+ }
+ if$
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {editor.check.book}
+{ editor empty$ 'skip$
+ {
+ "can't use both author and editor fields in " cite$ *
+ ": try using @inbook instead" *
+ warning$
+ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume duplicate$ empty$
+ { pop$ "" }
+ {
+ "volume and number" number either.or.check
+ bbl.volume
+ capitalize
+ swap$
+ tie.or.space.prefix "volume" bibinfo.check * *
+ series "series" bibinfo.check duplicate$ empty$ 'pop$
+ {
+ ", "
+ * swap$ *
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.number}
+{
+ bbl.number
+ output.state after.word = output.state after.punctuation = or
+ #1 or
+ #0 and
+ 'skip$
+ { capitalize }
+ if$
+ number tie.or.space.prefix "number" bibinfo.check * *
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ {
+ series empty$
+ {
+ number "number" bibinfo.check
+ }{
+ format.number
+ series "series" bibinfo.check
+ word.space * swap$ *
+ }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {is.num}
+{ chr.to.int$
+ duplicate$ "0" chr.to.int$ < not
+ swap$ "9" chr.to.int$ > not and
+}
+
+FUNCTION {extract.num}
+{ duplicate$ 't :=
+ "" 's :=
+ { t empty$ not }
+ { t #1 #1 substring$
+ t #2 global.max$ substring$ 't :=
+ duplicate$ is.num
+ { s swap$ * 's := }
+ { pop$ "" 't := }
+ if$
+ }
+ while$
+ s empty$
+ 'skip$
+ { pop$ s }
+ if$
+}
+
+FUNCTION {convert.edition}
+{ extract.num "l" change.case$ 's :=
+ s "first" = s "1" = or
+ { bbl.first 't := }
+ { s "second" = s "2" = or
+ { bbl.second 't := }
+ { s "third" = s "3" = or
+ { bbl.third 't := }
+ { s "fourth" = s "4" = or
+ { bbl.fourth 't := }
+ { s "fifth" = s "5" = or
+ { bbl.fifth 't := }
+ { s #1 #1 substring$ is.num
+ { s
+ eng.ord
+ 't := }
+ { edition 't := }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ t
+}
+
+FUNCTION {format.edition}
+{ edition duplicate$ empty$ 'skip$
+ {
+ convert.edition
+ output.state after.word = output.state after.punctuation = or
+ { "l" }
+ { "t" }
+ if$ change.case$
+ "edition" bibinfo.check
+ word.space * bbl.edition *
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages duplicate$ empty$
+ 'skip$
+ { duplicate$ multi.page.check
+ {
+ bbl.pages swap$
+ n.dashify
+ }{
+ bbl.page swap$
+ }
+ if$
+ tie.or.space.prefix
+ "pages" bibinfo.check
+ * *
+ }
+ if$
+}
+
+FUNCTION {first.page}
+{ 't :=
+ ""
+ { t empty$ not t #1 #1 substring$ "-" = not and }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+}
+
+FUNCTION {format.book.pages}
+{
+ pages duplicate$ empty$ 'skip$
+ {
+ "pages" bibinfo.check word.space bbl.pages * *
+ }
+ if$
+}
+
+FUNCTION {volnum.punct}
+{
+ ","
+ word.space *
+}
+
+FUNCTION {format.journal.pages}
+{ pages duplicate$ empty$ 'pop$
+ { swap$ duplicate$ empty$
+ { pop$ pop$ format.pages }
+ { volnum.punct *
+ swap$
+ control.pages duplicate$ #0 < {
+ pop$ pop$
+ }{
+ #0 >
+ {
+ n.dashify
+ }{
+ first.page
+ } if$
+ } if$
+ "pages" bibinfo.check
+ *
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.journal.eid}
+{ eid "eid" bibinfo.check
+ duplicate$ empty$ 'pop$
+ { swap$ duplicate$ empty$ 'skip$
+ { volnum.punct * }
+ if$
+ swap$ *
+ }
+ if$
+}
+
+FUNCTION {eid.or.pages}
+{
+ eid empty$
+ { format.journal.pages }
+ { format.journal.eid }
+ if$
+}
+
+FUNCTION {format.ser.vol.num}
+{
+ series "series" bibinfo.check output
+ volume field.or.null
+ duplicate$ empty$ 'skip$
+ {
+ "volume" bibinfo.check
+ }
+ if$
+ bolden
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ {
+ format.pages
+ }
+ { type empty$
+ {
+ bbl.chapter
+ capitalize
+ }{
+ type
+ capitalize
+ "type" bibinfo.check
+ }
+ if$
+ chapter tie.or.space.prefix
+ "chapter" bibinfo.check
+ * *
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.booktitle}
+{
+ booktitle duplicate$ "booktitle" bibinfo.check swap$
+ duplicate$ empty$ 'pop$
+ {
+ punctuation.yes 'punctuation.state :=
+ pop$ emphasize
+ select.language
+ }
+ if$
+}
+
+FUNCTION {format.editor.in}
+{
+ editor "editor" format.names.ed duplicate$ empty$ 'skip$
+ {
+ bbl.edby
+ word.space * swap$ *
+ }
+ if$
+}
+
+FUNCTION {output.article.booktitle}
+{
+ format.booktitle
+ "booktitle" 'bibfield :=
+ output
+ bookaddress "address" bibinfo.check duplicate$ empty$ 'pop$
+ {
+ "address" 'bibfield :=
+ output.nonnull after.punctuation 'output.state :=
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{
+ format.booktitle duplicate$ empty$ 'pop$
+ {
+ add.doi
+ word.in swap$ * output.nonnull
+ bookaddress "address" bibinfo.check output
+ format.number.series "series and number" bibinfo.check output
+ format.bvolume output
+ format.editor.in "editor" bibinfo.check output
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle.inbook}
+{
+ format.booktitle duplicate$ empty$ 'pop$
+ {
+ add.doi
+ word.in swap$ * output.nonnull
+ bookaddress "address" bibinfo.check output
+ format.number.series "series and number" bibinfo.check output
+ format.bvolume output
+ author empty$ 'skip$
+ { format.editor.in "editor" bibinfo.check output }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type duplicate$ empty$
+ 'pop$
+ { swap$ pop$
+ "t" change.case$ "type" bibinfo.check
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ number "number" bibinfo.check
+ type duplicate$ empty$
+ { pop$ bbl.techrep }
+ 'skip$
+ if$
+ "type" bibinfo.check
+ swap$ duplicate$ empty$
+ { pop$ "t" change.case$ }
+ { tie.or.space.prefix * * }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{
+ word.in
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.book.crossref}
+{ volume duplicate$ empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ pop$ word.in
+ }
+ { bbl.volume
+ swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word *
+ }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{
+ word.in
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.org.or.pub}
+{ 't :=
+ ""
+ address "address" bibinfo.check
+ duplicate$ empty$
+ { pop$ t }
+ { t duplicate$ empty$
+ { pop$ }
+ {
+ "," word.space *
+ * swap$ *
+ }
+ if$
+ }
+ if$
+ *
+ year duplicate$ empty$
+ {
+ "empty year in " cite$ *
+ warning$
+ pop$ ""
+ }
+ 'skip$
+ if$
+ duplicate$ empty$
+ { pop$ }
+ {
+ "year" bibinfo.check
+ swap$
+ duplicate$ empty$
+ { pop$ }
+ {
+ "," *
+ word.space *
+ swap$ *
+ }
+ if$
+ }
+ if$
+ duplicate$ empty$ 'skip$ {
+ ""
+ "(" * swap$ * ")" *
+ after.punctuation 'output.state :=
+ punctuation.space 'punctuation.state :=
+ } if$
+}
+
+FUNCTION {format.publisher.address}
+{ publisher "publisher" bibinfo.warn format.org.or.pub
+}
+
+FUNCTION {format.organization.address}
+{ organization "organization" bibinfo.check format.org.or.pub
+}
+
+FUNCTION {format.organization.publisher.address}
+{
+ publisher empty$
+ { format.organization.address }
+ { organization "organization" bibinfo.check output
+ format.publisher.address
+ }
+ if$
+}
+
+FUNCTION {format.school.address.output}
+{
+ school "school" bibinfo.warn
+ address "address" bibinfo.check
+ duplicate$ empty$ 'skip$
+ {
+ swap$
+ duplicate$ empty$ 'skip$
+ {
+ ", " *
+ }
+ if$
+ swap$
+ }
+ if$
+ *
+ output
+}
+
+FUNCTION {article.title.produce}
+{
+ control.title duplicate$ #0 <
+ { pop$
+ }{
+ format.title
+ "title" 'bibfield :=
+ swap$ #0 >
+ {
+ "title" output.check
+ }{
+ output
+ } if$
+ new.block.comma
+ } if$
+}
+
+FUNCTION {control}
+{
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors
+ booktitle empty$ {
+ "author" output.check
+ }{ output } if$
+ author format.key output
+ new.block.comma
+ article.title.produce
+ output.article.booktitle
+ crossref missing$
+ {
+ link.open
+ journal
+ "journal" bibinfo.warn
+ "journal" 'bibfield :=
+ output
+ add.blank
+ format.ser.vol.num
+ output
+ eid.or.pages
+ format.date.output.check
+ pages empty$ {
+ doi output
+ } 'skip$ if$
+ link.shut
+ }{
+ format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ format.issn.output
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ format.translation output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ {
+ format.editors "author and editor" output.check
+ editor format.key output
+ }{
+ format.authors output.nonnull
+% crossref missing$ { editor.check.book } 'skip$ if$
+ }
+ if$
+ new.block.comma
+ link.open
+ format.btitle
+ "title" output.check
+ link.shut
+ format.edition output
+ author empty$
+ {
+ }
+ {
+ format.editor.in output
+ editor format.key output
+ }
+ if$
+ format.number.series output
+ crossref missing$
+ {
+ format.bvolume output
+ new.block.comma
+ format.publisher.address output
+ }{
+ new.block.comma
+ format.book.crossref output.nonnull
+ format.date.output.check
+ }
+ if$
+ format.isbn.output
+ format.chapter.pages
+ output
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ new.block.comma
+ link.open
+ format.title
+ "title" output.check
+ link.shut
+ new.block.comma
+ howpublished "howpublished" bibinfo.check output
+ address "address" bibinfo.check output
+ format.date.output
+ format.isbn.output
+ format.book.pages output
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {footnote}
+{ output.bibitem
+ format.note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ {
+ format.editors "editor" output.check
+ editor format.key output
+ }{
+ format.authors output.nonnull
+ author format.key output
+ }
+ if$
+ new.block.comma
+
+ format.title output
+ new.block.comma
+
+ crossref missing$
+ {
+ format.in.ed.booktitle.inbook
+ format.publisher.address output
+ format.chapter.pages
+ "chapter and pages"
+ output.check
+ new.block.comma
+ format.edition output
+ new.block.comma
+ }{
+ format.chapter.pages
+ "chapter and pages"
+ output.check
+ new.block.comma
+ format.book.crossref output.nonnull
+ format.date.output.check
+ }
+ if$
+ crossref missing$
+ { format.isbn.output }
+ 'skip$
+ if$
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ new.block.comma
+ article.title.produce
+ crossref missing$
+ {
+ format.in.ed.booktitle
+ format.publisher.address output
+ format.edition output
+ format.chapter.pages output
+ format.isbn.output
+ }{
+ format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ new.block.comma
+ article.title.produce
+ crossref missing$
+ {
+ format.in.ed.booktitle
+ format.organization.publisher.address output
+ format.chapter.pages output
+ format.isbn.output
+ format.issn.output
+ }{
+ format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+FUNCTION {manual}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ new.block.comma
+ link.open
+ format.btitle
+ "title" output.check
+ link.shut
+ organization "organization" bibinfo.check output
+ address "address" bibinfo.check output
+ format.edition output
+ format.date.output
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ new.block.comma
+ format.btitle
+ output
+ new.block.comma
+ link.open
+ bbl.mthesis
+ format.thesis.type
+ output.nonnull
+ link.shut
+ format.school.address.output
+ format.date.output.check
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ new.block.comma
+ link.open
+ format.title
+ output
+ link.shut
+ new.block.comma
+ howpublished "howpublished" bibinfo.check output
+ format.date.output
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ new.block.comma
+ format.btitle
+ output
+ new.block.comma
+ link.open
+ bbl.phdthesis
+ format.thesis.type
+ output.nonnull
+ link.shut
+ format.school.address.output
+ format.date.output.check
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {presentation}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ new.block.comma
+ link.open
+ format.title
+ output
+ link.shut
+ new.block.comma
+ format.organization.address "organization and address" output.check
+ month "month" output.check
+ year "year" output.check
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ new.sentence
+ type missing$ 'skip$
+ {"(" type capitalize * ")" * output}
+ if$
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ format.editors output
+ editor format.key output
+ new.block.comma
+ link.open
+ format.btitle
+ "title" output.check
+ link.shut
+ bookaddress "address" bibinfo.check output
+ format.number.series output
+ format.bvolume output
+ format.organization.publisher.address output
+ format.isbn.output
+ format.issn.output
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ new.block.comma
+ link.open
+ format.btitle
+ "title" output.check
+ link.shut
+ new.block.comma
+ format.tr.number
+ output.nonnull
+ institution "institution" bibinfo.warn
+ format.org.or.pub output
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ new.block.comma
+ link.open
+ format.title
+ "title" output.check
+ link.shut
+ format.date.output
+ new.block.comma
+ new.sentence.comma
+ format.note "note" output.check
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+READ
+
+EXECUTE {control.init}
+
+ITERATE {control.pass}
+
+EXECUTE {control.check}
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+FUNCTION {cite.name.font.apply}
+{
+ word.space * bbl.etal
+ emphasize
+ *
+}
+
+FUNCTION {format.lab.names}
+{ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ format.name.apply
+ s num.names$ duplicate$
+ #2 >
+ { pop$
+ cite.name.font.apply
+ }{
+ #2 <
+ 'skip$
+ {
+ s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ {
+ cite.name.font.apply
+ }{
+ bbl.and space.word *
+ s #2 "{vv~}{ll}" format.name$
+ cite.name.font
+ *
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.label}
+{ editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {calc.short.authors}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.label
+ 'author.key.label
+ if$
+ }
+ if$
+ 'short.list :=
+}
+
+FUNCTION {calc.label}
+{
+ calc.short.authors
+ short.list
+ year duplicate$ empty$
+ short.list key field.or.null = or
+ {
+ pop$ ""
+ }{
+ control.year #0 > { purify$ #-1 #4 substring$ } 'skip$ if$
+ }
+ if$
+ "(" swap$ *
+ * 'label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{ll{ }}"
+ control.author.initials {
+ "{ f{ }}" *
+ }{
+ "{ ff{ }}" *
+ } if$
+ "{ jj{ }}" *
+ format.name$ 't :=
+ nameptr #1 >
+ {
+ " " *
+ namesleft #1 = t "others" = and
+ { "zzzzz" * }
+ {
+ t sortify *
+ }
+ if$
+ }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {year.sort.key}
+{
+ year
+}
+
+FUNCTION {editor.sort}
+{ editor empty$
+ { key empty$
+ { "to sort, need editor or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+INTEGERS { seq.num }
+
+FUNCTION {init.seq}
+{ #0 'seq.num :=}
+
+EXECUTE {init.seq}
+
+FUNCTION {int.to.fix}
+{ "000000000" swap$ int.to.str$ *
+ #-1 #10 substring$
+}
+
+FUNCTION {label.presort}
+{
+ calc.label
+ label sortify
+ " "
+ *
+ seq.num #1 + 'seq.num :=
+ seq.num int.to.fix
+ 'sort.label :=
+ sort.label
+ *
+ " "
+ *
+ title field.or.null sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+FUNCTION {presort.pass}
+{ type$ "control" = 'control.presort 'label.presort if$
+}
+
+ITERATE {presort.pass}
+
+SORT
+
+STRINGS { last.label next.extra }
+
+INTEGERS { last.extra.num number.label }
+
+FUNCTION {initialize.extra.label.stuff}
+{ #0 int.to.chr$ 'last.label :=
+ "" 'next.extra :=
+ #0 'last.extra.num :=
+ #0 'number.label :=
+}
+
+FUNCTION {label.forward}
+{
+ last.label label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ label 'last.label :=
+ }
+ if$
+ number.label #1 + 'number.label :=
+}
+
+FUNCTION {label.reverse}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+ extra.label
+ duplicate$ empty$
+ 'skip$
+ { "{\natexlab{" swap$ * "}}" * }
+ if$
+ 'extra.label :=
+ label extra.label * 'label :=
+}
+
+EXECUTE {initialize.extra.label.stuff}
+
+FUNCTION {forward.pass}
+{ type$ "control" = 'control.forward 'label.forward if$
+}
+
+ITERATE {forward.pass}
+
+FUNCTION {reverse.pass}
+{ type$ "control" = 'control.reverse 'label.reverse if$
+}
+
+REVERSE {reverse.pass}
+
+FUNCTION {sortkey.sort}
+{ sort.label
+ " "
+ *
+ year.sort.key
+ field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+FUNCTION {bib.sort.pass}
+{ type$ "control" = 'control.sort 'sortkey.sort if$
+}
+
+ITERATE {bib.sort.pass}
+
+SORT
+
+FUNCTION {init.bib.eprint}
+{
+ "\texttt {"
+ pop$
+ "\providecommand \url [0]{\begingroup\@sanitize@url \@url }%" write$ newline$
+ "\providecommand \@url [1]{\endgroup\@href {#1}{" "}}%" bbl.url.prefix swap$ * * write$ newline$
+ "\providecommand " " [0]{URL }%" bbl.url.prefix swap$ * * write$ newline$
+ eprint.command "\providecommand " swap$ * "[0]{\href }%" * write$ newline$
+}
+
+FUNCTION {init.bib.doi}
+{
+ "\providecommand \doibase [0]{" doi.base "}%" * * write$ newline$
+}
+
+FUNCTION {init.bib.hypertex}
+{
+ "\providecommand " noop.command "[0]{\@secondoftwo}%" * * write$ newline$
+ "\providecommand " href.command "[0]{\begingroup \@sanitize@url \@href}%" * * write$ newline$
+ "\providecommand \@href[1]{\@@startlink{#1}\@@href}%" write$ newline$
+ "\providecommand \@@href[1]{\endgroup#1\@@endlink}%" write$ newline$
+ "\providecommand \@sanitize@url [0]{\catcode `\\12\catcode `\$12\catcode `\&12\catcode `\#12\catcode `\^12\catcode `\_12\catcode `\%12\relax}%" write$ newline$
+ "\providecommand \@@startlink[1]{}%" write$ newline$
+ "\providecommand \@@endlink[0]{}%" write$ newline$
+}
+
+FUNCTION {init.bib.namefont}
+{
+ "\providecommand \bibnamefont [1]{#1}%" write$ newline$
+ "\providecommand \bibfnamefont [1]{#1}%" write$ newline$
+ "\providecommand \citenamefont [1]{#1}%" write$ newline$
+}
+
+FUNCTION {init.bib.quote}
+{
+ "\providecommand " bbl.enquote * " [1]{" *
+ "``" "''"
+ "#1" swap$ "}%" * * * * write$ newline$
+}
+
+FUNCTION {init.bib.ay}
+{
+ "\providecommand \natexlab [1]{#1}%"
+ write$ newline$
+}
+
+FUNCTION {init.bib.bibinfo}
+{
+ bibinfo.command "\providecommand " swap$ * " [0]{\@secondoftwo}%" * write$ newline$
+ bibfield.command "\providecommand " swap$ * " [0]{\@secondoftwo}%" * write$ newline$
+}
+
+FUNCTION {init.bib.lang}
+{
+ "\providecommand \selectlanguage [0]{\@gobble}%" write$ newline$
+}
+
+FUNCTION {init.bib.endbibitem}
+{
+ "\providecommand " bbl.open * "[0]{}%" * write$ newline$
+ "\providecommand \bibitemStop [0]{}%" write$ newline$
+ "\providecommand \bibitemNoStop [0]{.\EOS\space}%" write$ newline$
+ "\providecommand \EOS [0]{\spacefactor3000\relax}%" write$ newline$
+}
+
+FUNCTION {init.bib.translation}
+{
+ "\providecommand \translation [1]{[#1]}%" write$ newline$
+}
+
+FUNCTION {warn.bib}
+{
+}
+
+FUNCTION {init.bib}
+{
+ warn.bib
+ "\makeatletter" write$ newline$
+ "\providecommand \@ifxundefined [1]{%" write$ newline$
+ " \@ifx{#1\undefined}" write$ newline$
+ "}%" write$ newline$
+ "\providecommand \@ifnum [1]{%" write$ newline$
+ " \ifnum #1\expandafter \@firstoftwo" write$ newline$
+ " \else \expandafter \@secondoftwo" write$ newline$
+ " \fi" write$ newline$
+ "}%" write$ newline$
+ "\providecommand \@ifx [1]{%" write$ newline$
+ " \ifx #1\expandafter \@firstoftwo" write$ newline$
+ " \else \expandafter \@secondoftwo" write$ newline$
+ " \fi" write$ newline$
+ "}%" write$ newline$
+ init.bib.ay
+ init.bib.quote
+ init.bib.namefont
+ init.bib.hypertex
+ init.bib.eprint
+ init.bib.doi
+ init.bib.lang
+ init.bib.bibinfo
+ init.bib.translation
+ init.bib.endbibitem
+ "\providecommand " bbl.shut * " [1]{\csname bibitem#1\endcsname}%" * write$ newline$
+ "\let\auto@bib@innerbib\@empty" write$ newline$
+ "%</preamble>" write$
+}
+
+FUNCTION {begin.bib}
+{
+ id.bst diagn.cmntlog
+ control.bib
+ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "\begin{thebibliography}{"
+ number.label int.to.str$
+ * "}%" *
+ write$ newline$
+ init.bib
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+ "\end{thebibliography}%"
+ write$ newline$
+}
+
+EXECUTE {end.bib}
+
+%% End of customized bst file
+%%
+%% End of file `apsrev4-1.bst'.
diff --git a/obsolete/macros/latex/contrib/revtex4-1/bibtex/bst/revtex/apsrmp4-1.bst b/obsolete/macros/latex/contrib/revtex4-1/bibtex/bst/revtex/apsrmp4-1.bst
new file mode 100644
index 0000000000..77e253c9bf
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/bibtex/bst/revtex/apsrmp4-1.bst
@@ -0,0 +1,3448 @@
+%%
+%% This is file `apsrmp4-1.bst',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% merlin.mbs (with options: `head,ay,nat,lang,pres,pres-bf,vonx,nm-rev1,jnrlst,nmft,nmft-def,fnm-def,nmfted,nmand-rm,lab,lab-def,and-rm,keyxyr,dt-beg,yr-par,dtrev,date-nil-x,tit-qq,inproceedings-chapter,jtit-x,inproceedings-chapter,article-booktitle,article-series,jttl-rm,journal-address,book-bt,thesis-title-o,trtit-b,techreport-institution-par,vol-bf,vnum-sp,volp-com,jpg-1,pp-last,book-editor-booktitle,inbook-editor-booktitle,bookaddress,num-xser,number-cap,chapter-cap,series-number,numser-booktitle,ser-vol,ser-rm,volume-cap,ser-ed,jnm-x,pg-bk,book-chapter-pages,pub-par,ay-empty-pub-parens-x,pre-edn,school-par,doi-link,doi,bkedcap,edby,blk-com,fin-endbibitem,pp,ed,abr,ednx,ord,jabr,and-com,etal-it,revdata,eprint,url,url-blk,translation,SLACcitation,numpages-x,url,url-prefix-x,bibinfo,bibfield,nfss,,{}')
+%% physjour.mbs (with options: `ay,nat,lang,pres,pres-bf,vonx,nm-rev1,jnrlst,nmft,nmft-def,fnm-def,nmfted,nmand-rm,lab,lab-def,and-rm,keyxyr,dt-beg,yr-par,dtrev,date-nil-x,tit-qq,inproceedings-chapter,jtit-x,inproceedings-chapter,article-booktitle,article-series,jttl-rm,journal-address,book-bt,thesis-title-o,trtit-b,techreport-institution-par,vol-bf,vnum-sp,volp-com,jpg-1,pp-last,book-editor-booktitle,inbook-editor-booktitle,bookaddress,num-xser,number-cap,chapter-cap,series-number,numser-booktitle,ser-vol,ser-rm,volume-cap,ser-ed,jnm-x,pg-bk,book-chapter-pages,pub-par,ay-empty-pub-parens-x,pre-edn,school-par,doi-link,doi,bkedcap,edby,blk-com,fin-endbibitem,pp,ed,abr,ednx,ord,jabr,and-com,etal-it,revdata,eprint,url,url-blk,translation,SLACcitation,numpages-x,url,url-prefix-x,bibinfo,bibfield,nfss,,{}')
+%% geojour.mbs (with options: `ay,nat,lang,pres,pres-bf,vonx,nm-rev1,jnrlst,nmft,nmft-def,fnm-def,nmfted,nmand-rm,lab,lab-def,and-rm,keyxyr,dt-beg,yr-par,dtrev,date-nil-x,tit-qq,inproceedings-chapter,jtit-x,inproceedings-chapter,article-booktitle,article-series,jttl-rm,journal-address,book-bt,thesis-title-o,trtit-b,techreport-institution-par,vol-bf,vnum-sp,volp-com,jpg-1,pp-last,book-editor-booktitle,inbook-editor-booktitle,bookaddress,num-xser,number-cap,chapter-cap,series-number,numser-booktitle,ser-vol,ser-rm,volume-cap,ser-ed,jnm-x,pg-bk,book-chapter-pages,pub-par,ay-empty-pub-parens-x,pre-edn,school-par,doi-link,doi,bkedcap,edby,blk-com,fin-endbibitem,pp,ed,abr,ednx,ord,jabr,and-com,etal-it,revdata,eprint,url,url-blk,translation,SLACcitation,numpages-x,url,url-prefix-x,bibinfo,bibfield,nfss,,{}')
+%% photjour.mbs (with options: `ay,nat,lang,pres,pres-bf,vonx,nm-rev1,jnrlst,nmft,nmft-def,fnm-def,nmfted,nmand-rm,lab,lab-def,and-rm,keyxyr,dt-beg,yr-par,dtrev,date-nil-x,tit-qq,inproceedings-chapter,jtit-x,inproceedings-chapter,article-booktitle,article-series,jttl-rm,journal-address,book-bt,thesis-title-o,trtit-b,techreport-institution-par,vol-bf,vnum-sp,volp-com,jpg-1,pp-last,book-editor-booktitle,inbook-editor-booktitle,bookaddress,num-xser,number-cap,chapter-cap,series-number,numser-booktitle,ser-vol,ser-rm,volume-cap,ser-ed,jnm-x,pg-bk,book-chapter-pages,pub-par,ay-empty-pub-parens-x,pre-edn,school-par,doi-link,doi,bkedcap,edby,blk-com,fin-endbibitem,pp,ed,abr,ednx,ord,jabr,and-com,etal-it,revdata,eprint,url,url-blk,translation,SLACcitation,numpages-x,url,url-prefix-x,bibinfo,bibfield,nfss,,{}')
+%% merlin.mbs (with options: `tail,ay,nat,lang,pres,pres-bf,vonx,nm-rev1,jnrlst,nmft,nmft-def,fnm-def,nmfted,nmand-rm,lab,lab-def,and-rm,keyxyr,dt-beg,yr-par,dtrev,date-nil-x,tit-qq,inproceedings-chapter,jtit-x,inproceedings-chapter,article-booktitle,article-series,jttl-rm,journal-address,book-bt,thesis-title-o,trtit-b,techreport-institution-par,vol-bf,vnum-sp,volp-com,jpg-1,pp-last,book-editor-booktitle,inbook-editor-booktitle,bookaddress,num-xser,number-cap,chapter-cap,series-number,numser-booktitle,ser-vol,ser-rm,volume-cap,ser-ed,jnm-x,pg-bk,book-chapter-pages,pub-par,ay-empty-pub-parens-x,pre-edn,school-par,doi-link,doi,bkedcap,edby,blk-com,fin-endbibitem,pp,ed,abr,ednx,ord,jabr,and-com,etal-it,revdata,eprint,url,url-blk,translation,SLACcitation,numpages-x,url,url-prefix-x,bibinfo,bibfield,nfss,,{}')
+%% ----------------------------------------
+%% *** REVTeX-compatible RMP 2010-07-25 ***
+%%
+%% Copyright 1994-2007 Patrick W Daly
+ % ===============================================================
+ % IMPORTANT NOTICE:
+ % This bibliographic style (bst) file has been generated from one or
+ % more master bibliographic style (mbs) files, listed above.
+ %
+ % This generated file can be redistributed and/or modified under the terms
+ % of the LaTeX Project Public License Distributed from CTAN
+ % archives in directory macros/latex/base/lppl.txt; either
+ % version 1 of the License, or any later version.
+ % ===============================================================
+ % Name and version information of the main mbs file:
+ % For use with BibTeX version 0.99a or later
+ %-------------------------------------------------------------------
+ % This bibliography style file is intended for texts in ENGLISH
+ % This is an author-year citation style bibliography. As such, it is
+ % non-standard LaTeX, and requires a special package file to function properly.
+ % Such a package is natbib.sty by Patrick W. Daly
+ % The form of the \bibitem entries is
+ % \bibitem[Jones et al.(1990)]{key}...
+ % \bibitem[Jones et al.(1990)Jones, Baker, and Smith]{key}...
+ % The essential feature is that the label (the part in brackets) consists
+ % of the author names, as they should appear in the citation, with the year
+ % in parentheses following. There must be no space before the opening
+ % parenthesis!
+ % With natbib v5.3, a full list of authors may also follow the year.
+ % In natbib.sty, it is possible to define the type of enclosures that is
+ % really wanted (brackets or parentheses), but in either case, there must
+ % be parentheses in the label.
+ % The \cite command functions as follows:
+ % \citet{key} ==>> Jones et al. (1990)
+ % \citet*{key} ==>> Jones, Baker, and Smith (1990)
+ % \citep{key} ==>> (Jones et al., 1990)
+ % \citep*{key} ==>> (Jones, Baker, and Smith, 1990)
+ % \citep[chap. 2]{key} ==>> (Jones et al., 1990, chap. 2)
+ % \citep[e.g.][]{key} ==>> (e.g. Jones et al., 1990)
+ % \citep[e.g.][p. 32]{key} ==>> (e.g. Jones et al., p. 32)
+ % \citeauthor{key} ==>> Jones et al.
+ % \citeauthor*{key} ==>> Jones, Baker, and Smith
+ % \citeyear{key} ==>> 1990
+ %---------------------------------------------------------------------
+
+FUNCTION {id.bst} {"merlin.mbs apsrmp4-1.bst 2010-07-25 4.21a (PWD, AO, DPC) hacked"}
+ENTRY
+{
+ address
+ archive
+ archivePrefix
+ author
+ bookaddress
+ booktitle
+ chapter
+ collaboration
+ doi
+ edition
+ editor
+ eid
+ eprint
+ howpublished
+ institution
+ isbn
+ issn
+ journal
+ key
+ language
+ month
+ note
+ number
+ organization
+ pages
+ primaryClass
+ publisher
+ school
+ SLACcitation
+ series
+ title
+ translation
+ type
+ url
+ volume
+ year
+}{
+}{
+ label
+ extra.label sort.label
+ short.list
+}
+
+INTEGERS
+{
+ output.state before.all
+ after.word after.punctuation
+ after.sentence after.block
+}
+
+INTEGERS
+{
+ punctuation.state punctuation.no punctuation.space punctuation.yes
+}
+
+STRINGS { bibfield output.bibfield }
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {non.stop}
+{ duplicate$
+ "}" * add.period$
+ #-1 #1 substring$ "." =
+}
+
+INTEGERS { arith.mulitplier arith.multiplicand }
+
+FUNCTION {multiply}
+{
+ 'arith.multiplicand :=
+ 'arith.mulitplier :=
+ #0
+ { arith.mulitplier #0 > }
+ { arith.multiplicand +
+ arith.mulitplier #1 - 'arith.mulitplier :=
+ }
+ while$
+}
+
+FUNCTION {chr.to.hex}
+{
+ chr.to.int$
+ duplicate$ "0" chr.to.int$ -
+ duplicate$ duplicate$ #0 < swap$ #9 > or not
+ { swap$ pop$ }
+ { pop$
+ duplicate$ "A" chr.to.int$ -
+ duplicate$ duplicate$ #0 < swap$ #5 > or not
+ { swap$ pop$ #10 + }
+ { pop$
+ duplicate$ "a" chr.to.int$ -
+ duplicate$ duplicate$ #0 < swap$ #5 > or not
+ { swap$ pop$ #10 + }
+ { pop$
+ pop$ #-1
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+INTEGERS { arith.accumulator }
+
+FUNCTION {str.to.hex}
+{ #0 'arith.accumulator :=
+ { duplicate$ empty$ not }
+ { duplicate$ #1 #1 substring$ chr.to.hex
+ duplicate$ #0 <
+ { pop$ pop$ ""
+ }
+ { arith.accumulator #16 multiply + 'arith.accumulator :=
+ #2 global.max$ substring$
+ }
+ if$
+ }
+ while$
+ pop$ arith.accumulator
+}
+
+FUNCTION {diagn.cmntlog}
+{
+ duplicate$ top$ "%" swap$ * write$ newline$
+}
+
+INTEGERS { control.key control.author control.editor control.title control.pages control.eprint control.year }
+
+INTEGERS { control.author.jnrlst control.author.dotless control.author.nospace control.author.initials control.author.nocomma control.author.first control.author.reversed }
+
+FUNCTION { control.init }
+{
+ #0
+ 'control.key :=
+ #0
+ #1 +
+ #2 +
+ #8 +
+ #64 +
+ 'control.author :=
+ #1
+ 'control.author.jnrlst :=
+ #0
+ 'control.author.dotless :=
+ #0
+ 'control.author.nospace :=
+ #1
+ 'control.author.initials :=
+ #0
+ 'control.author.nocomma :=
+ #1
+ 'control.author.first :=
+ #1
+ 'control.author.reversed :=
+ #0
+ 'control.editor :=
+ #-1
+ 'control.title :=
+ #0
+ 'control.pages :=
+ #0
+ 'control.eprint :=
+ #1
+ 'control.year :=
+}
+
+FUNCTION {warning.dependency}
+{
+ " (dependency: " * swap$ * ") set " * swap$ int.to.str$ * warning$
+}
+
+FUNCTION {control.check}
+{
+ control.editor
+ {
+ "editor formatted same as author"
+ control.author.reversed {
+ duplicate$ #0 swap$ "reversed" warning.dependency
+ #0 'control.author.reversed :=
+ } 'skip$ if$
+ control.author.first {
+ duplicate$ #0 swap$ "first" warning.dependency
+ #0 'control.author.first :=
+ } 'skip$ if$
+ control.author.nocomma {
+ duplicate$ #0 swap$ "nocomma" warning.dependency
+ #0 'control.author.nocomma :=
+ } 'skip$ if$
+ pop$
+ } 'skip$ if$
+ control.author.reversed 'skip$
+ {
+ "not reversed"
+ control.author.nospace {
+ duplicate$ #0 swap$ "nospace" warning.dependency
+ #0 'control.author.nospace :=
+ } 'skip$ if$
+ control.author.jnrlst 'skip$ {
+ duplicate$ #1 swap$ "jnrlst" warning.dependency
+ #1 'control.author.jnrlst :=
+ } if$
+ control.author.initials {
+ duplicate$ ", initials" *
+ control.author.dotless {
+ duplicate$ #0 swap$ "dotless" warning.dependency
+ #0 'control.author.dotless :=
+ } 'skip$ if$
+ pop$
+ } 'skip$ if$
+ pop$
+ }
+ if$
+ control.author.initials 'skip$ {
+ "not initials"
+ control.author.nocomma {
+ duplicate$ #0 swap$ "nocomma" warning.dependency
+ #0 'control.author.nocomma :=
+ } 'skip$ if$
+ control.author.nospace {
+ duplicate$ #0 swap$ "nospace" warning.dependency
+ #0 'control.author.nospace :=
+ } 'skip$ if$
+ control.author.dotless 'skip$ {
+ duplicate$ #1 swap$ "dotless" warning.dependency
+ #1 'control.author.dotless :=
+ } if$
+ pop$
+ } if$
+}
+
+FUNCTION {control.parse}
+{
+ duplicate$ duplicate$ missing$
+ {
+ pop$ pop$ pop$
+ }
+ { empty$
+ {
+ pop$ #-1
+ }{
+ str.to.hex
+ }
+ if$
+ swap$ :=
+ }
+ if$
+}
+
+FUNCTION {control.dump}
+{
+ duplicate$ missing$ { pop$ "N/A" } 'skip$ if$
+ "{" swap$ * "}, " *
+ *
+}
+
+INTEGERS { decode.threshold }
+
+FUNCTION {control.decode}
+{
+ - duplicate$
+ #0 <
+ {
+ skip$ pop$ swap$ #0
+ }
+ {
+ swap$ pop$ swap$ #1
+ }
+ if$
+ swap$ :=
+}
+
+FUNCTION {control.author.decode}
+{
+ control.author
+ duplicate$ duplicate$ #0 < swap$ #128 < not or
+ {
+ int.to.str$ "(" swap$ * ")" *
+ "Control cannot interpret author " swap$ *
+ warning$
+ }{
+ 'control.author.jnrlst swap$ duplicate$ #64 control.decode
+ 'control.author.dotless swap$ duplicate$ #32 control.decode
+ 'control.author.nospace swap$ duplicate$ #16 control.decode
+ 'control.author.initials swap$ duplicate$ #8 control.decode
+ 'control.author.nocomma swap$ duplicate$ #4 control.decode
+ 'control.author.first swap$ duplicate$ #2 control.decode
+ 'control.author.reversed swap$ duplicate$ #1 control.decode
+ duplicate$ #0 =
+ 'skip$
+ {
+ "Control: residue of author"
+ "(" swap$ * ")" * *
+ warning$
+ }
+ if$
+ pop$
+ }
+ if$
+}
+
+FUNCTION {control.setup}
+{
+ type$ cite$ "{" swap$ * "}, " * *
+ "control.key" key control.dump *
+ "control.author" author control.dump *
+ "control.editor" editor control.dump *
+ "control.title" title control.dump *
+ "control.pages" pages control.dump *
+ "control.year" year control.dump *
+ "control.eprint" eprint control.dump *
+ top$
+ 'control.key key control.parse
+ 'control.author author control.parse
+ 'control.editor editor control.parse
+ 'control.title title control.parse
+ 'control.pages pages control.parse
+ 'control.year year control.parse
+ 'control.eprint eprint control.parse
+ control.author.decode
+}
+
+FUNCTION {control.pass}
+{ type$ "control" = 'control.setup 'skip$ if$
+}
+
+FUNCTION {control.presort}
+{
+}
+
+FUNCTION {control.forward}
+{
+}
+
+FUNCTION {control.reverse}
+{
+}
+
+FUNCTION {control.sort}
+{
+}
+
+FUNCTION {control.longest.label}
+{
+}
+
+FUNCTION {control.key.bib}
+{
+ "Control: key "
+ control.key
+ duplicate$ "(" swap$ int.to.str$ * ") " * swap$
+ pop$ *
+ diagn.cmntlog
+}
+
+FUNCTION {control.author.bib}
+{
+ "Control: author "
+ control.author "(" swap$ int.to.str$ * ")" * *
+ control.author.reversed { " reversed" * }{} if$
+ control.author.first { " first" * }{} if$
+ control.author.nocomma { " nocomma" * }{} if$
+ control.author.initials { " initials" * }{} if$
+ control.author.nospace { " nospace" * }{} if$
+ control.author.dotless { " dotless" * }{} if$
+ control.author.jnrlst { " jnrlst" * }{} if$
+ diagn.cmntlog
+}
+
+FUNCTION {control.editor.bib}
+{
+ "Control: editor formatted "
+ control.editor
+ duplicate$ "(" swap$ int.to.str$ * ") " * swap$
+ duplicate$ #0 < {
+ pop$
+ "disabled!"
+ } {
+ #0 > {
+ "identically to author"
+ } {
+ "differently from author"
+ } if$
+ } if$ * *
+ diagn.cmntlog
+}
+
+FUNCTION {control.title.bib}
+{
+ "Control: production of article title "
+ control.title
+ duplicate$ "(" swap$ int.to.str$ * ") " * swap$
+ duplicate$ #0 < {
+ pop$
+ "disabled"
+ } {
+ #0 > {
+ "required"
+ } {
+ "allowed"
+ } if$
+ } if$ * *
+ diagn.cmntlog
+}
+
+FUNCTION {control.pages.bib}
+{
+ "Control: page "
+ control.pages
+ duplicate$ "(" swap$ int.to.str$ * ") " * swap$
+ duplicate$ #0 < {
+ pop$
+ "none"
+ } {
+ #0 > {
+ "range"
+ } {
+ "single"
+ } if$
+ } if$ * *
+ diagn.cmntlog
+}
+
+FUNCTION {control.year.bib}
+{
+ "Control: year "
+ control.year
+ duplicate$ "(" swap$ int.to.str$ * ") " * swap$
+ duplicate$ #0 < {
+ pop$
+ "disabled!"
+ } {
+ #0 > {
+ "truncated"
+ } {
+ "verbatim"
+ } if$
+ } if$ * *
+ diagn.cmntlog
+}
+
+FUNCTION {control.eprint.bib}
+{
+ "Control: production of eprint "
+ control.eprint
+ duplicate$ "(" swap$ int.to.str$ * ") " * swap$
+ #0 < { "disabled" } { "enabled" } if$ * *
+ diagn.cmntlog
+}
+
+FUNCTION {control.bib}
+{
+ control.key.bib
+ control.author.bib
+ control.editor.bib
+ control.title.bib
+ control.pages.bib
+ control.year.bib
+ control.eprint.bib
+}
+
+FUNCTION {init.state.consts}
+{
+ #0 'before.all :=
+ #1 'after.word :=
+ #2 'after.punctuation :=
+ #3 'after.sentence :=
+ #4 'after.block :=
+ #0 'punctuation.no :=
+ #1 'punctuation.space :=
+ #2 'punctuation.yes :=
+ "" 'bibfield :=
+ "" 'output.bibfield :=
+}
+
+STRINGS { s t}
+FUNCTION {block.punctuation}
+{ ""
+ "," *
+}
+
+FUNCTION {word.space}
+{
+ "\ "
+}
+
+FUNCTION {show.stackstring.one}{
+ "(" *
+ output.state int.to.str$ *
+ "," * punctuation.state int.to.str$ *
+ ")" * top$
+ duplicate$ "1(" swap$ * ")" * top$
+}
+
+FUNCTION {show.stackstring.two}{
+ "(" *
+ output.state int.to.str$ *
+ "," * punctuation.state int.to.str$ *
+ ")" * top$
+ swap$
+ duplicate$ "1(" swap$ * ")" * top$
+ swap$
+ duplicate$ "2(" swap$ * ")" * top$
+}
+
+FUNCTION {bibfield.command}{ "\bibfield "}
+
+FUNCTION {output.nonnull}
+{
+ swap$
+ output.state after.word =
+ {
+ block.punctuation *
+ word.space *
+ }
+ {
+ output.state after.punctuation =
+ {
+ word.space *
+ }
+ {
+ output.state after.block = output.state after.sentence = or
+ {
+ add.period$
+ "\EOS\ " *
+ }{
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ output.bibfield duplicate$ empty$ 'pop$
+ {
+ bibfield.command
+ " {" * swap$ * "} {" * swap$ * "}" *
+ }
+ if$
+ write$
+ bibfield 'output.bibfield := "" 'bibfield :=
+ output.state after.block =
+ {
+ newline$
+ "\newblock " write$
+ }
+ 'skip$
+ if$
+ punctuation.state duplicate$
+ punctuation.yes 'punctuation.state :=
+ punctuation.no =
+ { pop$ before.all }
+ { punctuation.yes = { after.word }{ after.punctuation } if$ }
+ if$
+ 'output.state :=
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ {
+ pop$
+ "" 'bibfield :=
+ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.nopunct}
+{
+ punctuation.no 'punctuation.state :=
+ output.nonnull
+}
+
+FUNCTION {output.check}
+{ swap$
+ duplicate$ empty$
+ { pop$ "empty " swap$ * " in " * cite$ * warning$ }
+ { swap$ pop$ output.nonnull }
+ if$
+}
+
+FUNCTION {bbl.open} { "\BibitemOpen " }
+
+FUNCTION {bbl.shut} { "\BibitemShut " }
+
+FUNCTION {bibitem.shut.stop} { bbl.shut "{Stop}%" * }
+
+FUNCTION {bibitem.shut.nostop} { bbl.shut "{NoStop}%" * }
+
+FUNCTION {bibitem.shut}
+{
+ non.stop
+ {
+ bibitem.shut.nostop *
+ }{
+ bibitem.shut.stop *
+ }
+ if$
+}
+
+FUNCTION {html.itag} {
+ "p"
+}
+
+FUNCTION {html.ltag} {
+ ""
+}
+
+FUNCTION {output.SLACcitation}
+{ SLACcitation empty$
+ 'skip$
+ {
+ newline$
+ SLACcitation write$
+ }
+ if$
+}
+
+FUNCTION {fin.entry}
+{
+ bibitem.shut
+ write$
+ output.SLACcitation
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.block.comma}
+{
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block = output.state before.all = or
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence.comma}
+{
+}
+
+FUNCTION {sentence.or.colon}
+{
+ new.sentence
+}
+
+FUNCTION {add.blank}
+{
+ word.space *
+ before.all 'output.state :=
+}
+
+FUNCTION {no.blank.or.punct}
+{
+ "\hspace {0pt}" *
+ before.all 'output.state :=
+}
+
+FUNCTION {date.block}
+{
+ new.block.comma
+ skip$
+}
+
+STRINGS {z}
+FUNCTION {remove.dots}
+{
+ control.author.dotless {
+ 'z :=
+ ""
+ { z empty$ not }
+ { z #1 #1 substring$
+ z #2 global.max$ substring$ 'z :=
+ duplicate$ "." = 'pop$
+ { * }
+ if$
+ }
+ while$
+ } 'skip$ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{
+ duplicate$ empty$
+ { pop$ "" }
+ {
+ "\emph {" swap$ * "}" *
+ }
+ if$
+}
+
+FUNCTION {bolden}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "\textbf {" swap$ * "}" * }
+ if$
+}
+
+FUNCTION {bib.name.font}
+{
+ duplicate$ empty$
+ { pop$ "" }
+ {
+ "\bibnamefont {" swap$ * "}" *
+ }
+ if$
+}
+
+FUNCTION {bib.fname.font}
+{
+ duplicate$ empty$
+ { pop$ "" }
+ {
+ "\bibfnamefont {" swap$ * "}" *
+ }
+ if$
+}
+
+FUNCTION {cite.name.font}
+{
+ duplicate$ empty$
+ { pop$ "" }
+ {
+ "\citenamefont {" swap$ * "}" *
+ }
+ if$
+}
+
+FUNCTION {tie.or.space.prefix}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { word.space }
+ if$
+ swap$
+}
+
+FUNCTION {capitalize}
+{
+ "u" change.case$ "t" change.case$
+}
+
+FUNCTION {space.word}
+{ word.space swap$ * word.space * }
+
+ % Here are the language-specific definitions for explicit words.
+ % Each function has a name bbl.xxx where xxx is the English word.
+ % The language selected here is ENGLISH
+
+FUNCTION {bbl.and}
+{
+ "and"
+}
+
+FUNCTION {bbl.etal}
+{
+ "et~al."
+}
+
+FUNCTION {bbl.editors}
+{
+ "eds."
+}
+
+FUNCTION {bbl.editor}
+{
+ "ed."
+}
+
+FUNCTION {bbl.edby}
+{ "edited by" }
+
+FUNCTION {bbl.edition}
+{
+ "ed."
+}
+
+FUNCTION {bbl.volume}
+{
+ "vol."
+}
+
+FUNCTION {bbl.of}
+{ "of" }
+
+FUNCTION {bbl.number}
+{
+ "no."
+}
+
+FUNCTION {bbl.nr}
+{ "no." }
+
+FUNCTION {bbl.in}
+{ "in" }
+
+FUNCTION {bbl.pages}
+{
+ "pp."
+}
+
+FUNCTION {bbl.page}
+{
+ "p."
+}
+
+FUNCTION {bbl.eidpp}
+{ "pages" }
+
+FUNCTION {bbl.chapter}
+{
+ "chap."
+}
+
+FUNCTION {bbl.techrep}
+{
+ "Tech. Rep."
+}
+
+FUNCTION {bbl.mthesis}
+{ "Master's thesis" }
+
+FUNCTION {bbl.phdthesis}
+{ "Ph.D. thesis" }
+
+FUNCTION {bbl.first}
+{
+ "1st"
+}
+
+FUNCTION {bbl.second}
+{
+ "2nd"
+}
+
+FUNCTION {bbl.third}
+{
+ "3rd"
+}
+
+FUNCTION {bbl.fourth}
+{
+ "4th"
+}
+
+FUNCTION {bbl.fifth}
+{
+ "5th"
+}
+
+FUNCTION {bbl.st}
+{ "st" }
+
+FUNCTION {bbl.nd}
+{ "nd" }
+
+FUNCTION {bbl.rd}
+{ "rd" }
+
+FUNCTION {bbl.th}
+{ "th" }
+
+MACRO {jan} {"Jan."}
+
+MACRO {feb} {"Feb."}
+
+MACRO {mar} {"Mar."}
+
+MACRO {apr} {"Apr."}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"Jun."}
+
+MACRO {jul} {"Jul."}
+
+MACRO {aug} {"Aug."}
+
+MACRO {sep} {"Sep."}
+
+MACRO {oct} {"Oct."}
+
+MACRO {nov} {"Nov."}
+
+MACRO {dec} {"Dec."}
+
+FUNCTION {bbl.url.prefix}
+{
+ "\urlprefix "
+}
+
+FUNCTION {eng.ord}
+{ duplicate$ "1" swap$ *
+ #-2 #1 substring$ "1" =
+ { bbl.th * }
+ { duplicate$ #-1 #1 substring$
+ duplicate$ "1" =
+ { pop$ bbl.st * }
+ { duplicate$ "2" =
+ { pop$ bbl.nd * }
+ { "3" =
+ { bbl.rd * }
+ { bbl.th * }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+ %-------------------------------------------------------------------
+ % Begin module:
+ % \ProvidesFile{physjour.mbs}[2002/01/14 2.2 (PWD)]
+MACRO {aa}{"Astron. \& Astrophys."}
+MACRO {aasup}{"Astron. \& Astrophys. Suppl. Ser."}
+MACRO {aj} {"Astron. J."}
+MACRO {aph} {"Acta Phys."}
+MACRO {advp} {"Adv. Phys."}
+MACRO {ajp} {"Amer. J. Phys."}
+MACRO {ajm} {"Amer. J. Math."}
+MACRO {amsci} {"Amer. Sci."}
+MACRO {anofd} {"Ann. Fluid Dyn."}
+MACRO {am} {"Ann. Math."}
+MACRO {ap} {"Ann. Phys. (NY)"}
+MACRO {adp} {"Ann. Phys. (Leipzig)"}
+MACRO {ao} {"Appl. Opt."}
+MACRO {apl} {"Appl. Phys. Lett."}
+MACRO {app} {"Astroparticle Phys."}
+MACRO {apj} {"Astrophys. J."}
+MACRO {apjsup} {"Astrophys. J. Suppl."}
+MACRO {apss} {"Astrophys. Space Sci."}
+MACRO {araa} {"Ann. Rev. Astron. Astrophys."}
+MACRO {baas} {"Bull. Amer. Astron. Soc."}
+MACRO {baps} {"Bull. Amer. Phys. Soc."}
+MACRO {cmp} {"Comm. Math. Phys."}
+MACRO {cpam} {"Commun. Pure Appl. Math."}
+MACRO {cppcf} {"Comm. Plasma Phys. \& Controlled Fusion"}
+MACRO {cpc} {"Comp. Phys. Comm."}
+MACRO {cqg} {"Class. Quant. Grav."}
+MACRO {cra} {"C. R. Acad. Sci. A"}
+MACRO {fed} {"Fusion Eng. \& Design"}
+MACRO {ft} {"Fusion Tech."}
+MACRO {grg} {"Gen. Relativ. Gravit."}
+MACRO {ieeens} {"IEEE Trans. Nucl. Sci."}
+MACRO {ieeeps} {"IEEE Trans. Plasma Sci."}
+MACRO {ijimw} {"Interntl. J. Infrared \& Millimeter Waves"}
+MACRO {ip} {"Infrared Phys."}
+MACRO {irp} {"Infrared Phys."}
+MACRO {jap} {"J. Appl. Phys."}
+MACRO {jasa} {"J. Acoust. Soc. America"}
+MACRO {jcp} {"J. Comp. Phys."}
+MACRO {jetp} {"Sov. Phys.--JETP"}
+MACRO {jfe} {"J. Fusion Energy"}
+MACRO {jfm} {"J. Fluid Mech."}
+MACRO {jmp} {"J. Math. Phys."}
+MACRO {jne} {"J. Nucl. Energy"}
+MACRO {jnec} {"J. Nucl. Energy, C: Plasma Phys., Accelerators, Thermonucl. Res."}
+MACRO {jnm} {"J. Nucl. Mat."}
+MACRO {jpc} {"J. Phys. Chem."}
+MACRO {jpp} {"J. Plasma Phys."}
+MACRO {jpsj} {"J. Phys. Soc. Japan"}
+MACRO {jsi} {"J. Sci. Instrum."}
+MACRO {jvst} {"J. Vac. Sci. \& Tech."}
+MACRO {nat} {"Nature"}
+MACRO {nature} {"Nature"}
+MACRO {nedf} {"Nucl. Eng. \& Design/Fusion"}
+MACRO {nf} {"Nucl. Fusion"}
+MACRO {nim} {"Nucl. Inst. \& Meth."}
+MACRO {nimpr} {"Nucl. Inst. \& Meth. in Phys. Res."}
+MACRO {np} {"Nucl. Phys."}
+MACRO {npb} {"Nucl. Phys. B"}
+MACRO {nt/f} {"Nucl. Tech./Fusion"}
+MACRO {npbpc} {"Nucl. Phys. B (Proc. Suppl.)"}
+MACRO {inc} {"Nuovo Cimento"}
+MACRO {nc} {"Nuovo Cimento"}
+MACRO {pf} {"Phys. Fluids"}
+MACRO {pfa} {"Phys. Fluids A: Fluid Dyn."}
+MACRO {pfb} {"Phys. Fluids B: Plasma Phys."}
+MACRO {pl} {"Phys. Lett."}
+MACRO {pla} {"Phys. Lett. A"}
+MACRO {plb} {"Phys. Lett. B"}
+MACRO {prep} {"Phys. Rep."}
+MACRO {pnas} {"Proc. Nat. Acad. Sci. USA"}
+MACRO {pp} {"Phys. Plasmas"}
+MACRO {ppcf} {"Plasma Phys. \& Controlled Fusion"}
+MACRO {phitrsl} {"Philos. Trans. Roy. Soc. London"}
+MACRO {prl} {"Phys. Rev. Lett."}
+MACRO {pr} {"Phys. Rev."}
+MACRO {physrev} {"Phys. Rev."}
+MACRO {pra} {"Phys. Rev. A"}
+MACRO {prb} {"Phys. Rev. B"}
+MACRO {prc} {"Phys. Rev. C"}
+MACRO {prd} {"Phys. Rev. D"}
+MACRO {pre} {"Phys. Rev. E"}
+MACRO {ps} {"Phys. Scripta"}
+MACRO {procrsl} {"Proc. Roy. Soc. London"}
+MACRO {rmp} {"Rev. Mod. Phys."}
+MACRO {rsi} {"Rev. Sci. Inst."}
+MACRO {science} {"Science"}
+MACRO {sciam} {"Sci. Am."}
+MACRO {sam} {"Stud. Appl. Math."}
+MACRO {sjpp} {"Sov. J. Plasma Phys."}
+MACRO {spd} {"Sov. Phys.--Doklady"}
+MACRO {sptp} {"Sov. Phys.--Tech. Phys."}
+MACRO {spu} {"Sov. Phys.--Uspeki"}
+MACRO {st} {"Sky and Telesc."}
+ % End module: physjour.mbs
+ %-------------------------------------------------------------------
+ % Begin module:
+ % \ProvidesFile{geojour.mbs}[2002/07/10 2.0h (PWD)]
+MACRO {aisr} {"Adv. Space Res."}
+MACRO {ag} {"Ann. Geophys."}
+MACRO {anigeo} {"Ann. Geofis."}
+MACRO {angl} {"Ann. Glaciol."}
+MACRO {andmet} {"Ann. d. Meteor."}
+MACRO {andgeo} {"Ann. d. Geophys."}
+MACRO {andphy} {"Ann. Phys.-Paris"}
+MACRO {afmgb} {"Arch. Meteor. Geophys. Bioklimatol."}
+MACRO {atph} {"Atm\'osphera"}
+MACRO {aao} {"Atmos. Ocean"}
+MACRO {ass}{"Astrophys. Space Sci."}
+MACRO {atenv} {"Atmos. Environ."}
+MACRO {aujag} {"Aust. J. Agr. Res."}
+MACRO {aumet} {"Aust. Meteorol. Mag."}
+MACRO {blmet} {"Bound.-Lay. Meteorol."}
+MACRO {bams} {"Bull. Amer. Meteorol. Soc."}
+MACRO {cch} {"Clim. Change"}
+MACRO {cdyn} {"Clim. Dynam."}
+MACRO {cbul} {"Climatol. Bull."}
+MACRO {cap} {"Contrib. Atmos. Phys."}
+MACRO {dsr} {"Deep-Sea Res."}
+MACRO {dhz} {"Dtsch. Hydrogr. Z."}
+MACRO {dao} {"Dynam. Atmos. Oceans"}
+MACRO {eco} {"Ecology"}
+MACRO {empl}{"Earth, Moon and Planets"}
+MACRO {envres} {"Environ. Res."}
+MACRO {envst} {"Environ. Sci. Technol."}
+MACRO {ecms} {"Estuarine Coastal Mar. Sci."}
+MACRO {expa}{"Exper. Astron."}
+MACRO {geoint} {"Geofis. Int."}
+MACRO {geopub} {"Geofys. Publ."}
+MACRO {geogeo} {"Geol. Geofiz."}
+MACRO {gafd} {"Geophys. Astrophys. Fluid Dyn."}
+MACRO {gfd} {"Geophys. Fluid Dyn."}
+MACRO {geomag} {"Geophys. Mag."}
+MACRO {georl} {"Geophys. Res. Lett."}
+MACRO {grl} {"Geophys. Res. Lett."}
+MACRO {ga} {"Geophysica"}
+MACRO {gs} {"Geophysics"}
+MACRO {ieeetap} {"IEEE Trans. Antenn. Propag."}
+MACRO {ijawp} {"Int. J. Air Water Pollut."}
+MACRO {ijc} {"Int. J. Climatol."}
+MACRO {ijrs} {"Int. J. Remote Sens."}
+MACRO {jam} {"J. Appl. Meteorol."}
+MACRO {jaot} {"J. Atmos. Ocean. Technol."}
+MACRO {jatp} {"J. Atmos. Terr. Phys."}
+MACRO {jastp} {"J. Atmos. Solar-Terr. Phys."}
+MACRO {jce} {"J. Climate"}
+MACRO {jcam} {"J. Climate Appl. Meteor."}
+MACRO {jcm} {"J. Climate Meteor."}
+MACRO {jcy} {"J. Climatol."}
+MACRO {jgr} {"J. Geophys. Res."}
+MACRO {jga} {"J. Glaciol."}
+MACRO {jh} {"J. Hydrol."}
+MACRO {jmr} {"J. Mar. Res."}
+MACRO {jmrj} {"J. Meteor. Res. Japan"}
+MACRO {jm} {"J. Meteor."}
+MACRO {jpo} {"J. Phys. Oceanogr."}
+MACRO {jra} {"J. Rech. Atmos."}
+MACRO {jaes} {"J. Aeronaut. Sci."}
+MACRO {japca} {"J. Air Pollut. Control Assoc."}
+MACRO {jas} {"J. Atmos. Sci."}
+MACRO {jmts} {"J. Mar. Technol. Soc."}
+MACRO {jmsj} {"J. Meteorol. Soc. Japan"}
+MACRO {josj} {"J. Oceanogr. Soc. Japan"}
+MACRO {jwm} {"J. Wea. Mod."}
+MACRO {lao} {"Limnol. Oceanogr."}
+MACRO {mwl} {"Mar. Wea. Log"}
+MACRO {mau} {"Mausam"}
+MACRO {meteor} {"``Meteor'' Forschungsergeb."}
+MACRO {map} {"Meteorol. Atmos. Phys."}
+MACRO {metmag} {"Meteor. Mag."}
+MACRO {metmon} {"Meteor. Monogr."}
+MACRO {metrun} {"Meteor. Rundsch."}
+MACRO {metzeit} {"Meteor. Z."}
+MACRO {metgid} {"Meteor. Gidrol."}
+MACRO {mwr} {"Mon. Weather Rev."}
+MACRO {nwd} {"Natl. Weather Dig."}
+MACRO {nzjmfr} {"New Zeal. J. Mar. Freshwater Res."}
+MACRO {npg} {"Nonlin. Proc. Geophys."}
+MACRO {om} {"Oceanogr. Meteorol."}
+MACRO {ocac} {"Oceanol. Acta"}
+MACRO {oceanus} {"Oceanus"}
+MACRO {paleoc} {"Paleoceanography"}
+MACRO {pce} {"Phys. Chem. Earth"}
+MACRO {pmg} {"Pap. Meteor. Geophys."}
+MACRO {ppom} {"Pap. Phys. Oceanogr. Meteor."}
+MACRO {physzeit} {"Phys. Z."}
+MACRO {pps} {"Planet. Space Sci."}
+MACRO {pss} {"Planet. Space Sci."}
+MACRO {pag} {"Pure Appl. Geophys."}
+MACRO {qjrms} {"Quart. J. Roy. Meteorol. Soc."}
+MACRO {quatres} {"Quat. Res."}
+MACRO {rsci} {"Radio Sci."}
+MACRO {rse} {"Remote Sens. Environ."}
+MACRO {rgeo} {"Rev. Geophys."}
+MACRO {rgsp} {"Rev. Geophys. Space Phys."}
+MACRO {rdgeo} {"Rev. Geofis."}
+MACRO {revmeta} {"Rev. Meteorol."}
+MACRO {sgp}{"Surveys in Geophys."}
+MACRO {sp} {"Solar Phys."}
+MACRO {ssr} {"Space Sci. Rev."}
+MACRO {tellus} {"Tellus"}
+MACRO {tac} {"Theor. Appl. Climatol."}
+MACRO {tagu} {"Trans. Am. Geophys. Union (EOS)"}
+MACRO {wrr} {"Water Resour. Res."}
+MACRO {weather} {"Weather"}
+MACRO {wafc} {"Weather Forecast."}
+MACRO {ww} {"Weatherwise"}
+MACRO {wmob} {"WMO Bull."}
+MACRO {zeitmet} {"Z. Meteorol."}
+ % End module: geojour.mbs
+ %-------------------------------------------------------------------
+ % Begin module:
+ % \ProvidesFile{photjour.mbs}[1999/02/24 2.0b (PWD)]
+
+MACRO {appopt} {"Appl. Opt."}
+MACRO {bell} {"Bell Syst. Tech. J."}
+MACRO {ell} {"Electron. Lett."}
+MACRO {jasp} {"J. Appl. Spectr."}
+MACRO {jqe} {"IEEE J. Quantum Electron."}
+MACRO {jlwt} {"J. Lightwave Technol."}
+MACRO {jmo} {"J. Mod. Opt."}
+MACRO {josa} {"J. Opt. Soc. America"}
+MACRO {josaa} {"J. Opt. Soc. Amer.~A"}
+MACRO {josab} {"J. Opt. Soc. Amer.~B"}
+MACRO {jdp} {"J. Phys. (Paris)"}
+MACRO {oc} {"Opt. Commun."}
+MACRO {ol} {"Opt. Lett."}
+MACRO {phtl} {"IEEE Photon. Technol. Lett."}
+MACRO {pspie} {"Proc. Soc. Photo-Opt. Instrum. Eng."}
+MACRO {sse} {"Solid-State Electron."}
+MACRO {sjot} {"Sov. J. Opt. Technol."}
+MACRO {sjqe} {"Sov. J. Quantum Electron."}
+MACRO {sleb} {"Sov. Phys.--Leb. Inst. Rep."}
+MACRO {stph} {"Sov. Phys.--Techn. Phys."}
+MACRO {stphl} {"Sov. Techn. Phys. Lett."}
+MACRO {vr} {"Vision Res."}
+MACRO {zph} {"Z. f. Physik"}
+MACRO {zphb} {"Z. f. Physik~B"}
+MACRO {zphd} {"Z. f. Physik~D"}
+
+MACRO {CLEO} {"CLEO"}
+MACRO {ASSL} {"Adv. Sol.-State Lasers"}
+MACRO {OSA} {"OSA"}
+ % End module: photjour.mbs
+%% Copyright 1994-2007 Patrick W Daly
+MACRO {acmcs} {"ACM Comput. Surv."}
+
+MACRO {acta} {"Acta Inf."}
+
+MACRO {cacm} {"Commun. ACM"}
+
+MACRO {ibmjrd} {"IBM J. Res. Dev."}
+
+MACRO {ibmsj} {"IBM Syst.~J."}
+
+MACRO {ieeese} {"IEEE Trans. Software Eng."}
+
+MACRO {ieeetc} {"IEEE Trans. Comput."}
+
+MACRO {ieeetcad}
+ {"IEEE Trans. Comput. Aid. Des."}
+
+MACRO {ipl} {"Inf. Process. Lett."}
+
+MACRO {jacm} {"J.~ACM"}
+
+MACRO {jcss} {"J.~Comput. Syst. Sci."}
+
+MACRO {scp} {"Sci. Comput. Program."}
+
+MACRO {sicomp} {"SIAM J. Comput."}
+
+MACRO {tocs} {"ACM Trans. Comput. Syst."}
+
+MACRO {tods} {"ACM Trans. Database Syst."}
+
+MACRO {tog} {"ACM Trans. Graphic."}
+
+MACRO {toms} {"ACM Trans. Math. Software"}
+
+MACRO {toois} {"ACM Trans. Office Inf. Syst."}
+
+MACRO {toplas} {"ACM Trans. Progr. Lang. Syst."}
+
+MACRO {tcs} {"Theor. Comput. Sci."}
+
+FUNCTION {bibinfo.command} { "\bibinfo " }
+
+FUNCTION {bibinfo.check}
+{ swap$
+ duplicate$ missing$
+ {
+ pop$
+ pop$ ""
+ }{
+ duplicate$ empty$
+ {
+ swap$ pop$
+ }{
+ swap$
+ bibinfo.command "{" * swap$ * "} {" * swap$ * "}" *
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {bibinfo.warn}
+{ swap$
+ duplicate$ missing$
+ {
+ swap$ "missing " swap$ * " in " * cite$ * warning$ pop$
+ ""
+ }{
+ duplicate$ empty$
+ {
+ swap$ "empty " swap$ * " in " * cite$ * warning$
+ }{
+ swap$
+ bibinfo.command " {" * swap$ * "} {" * swap$ * "}" *
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {archiv.base}
+{
+ "http://arxiv.org/abs"
+}
+
+FUNCTION {archiv.prefix.base}
+{
+ "arXiv"
+}
+
+FUNCTION {eprint.command}
+{
+ "\Eprint "
+}
+
+FUNCTION {format.eprint}
+{
+ eprint duplicate$ empty$
+ control.eprint #0 <
+ or
+ { pop$ "" }
+ {
+ duplicate$
+ ""
+ archive duplicate$ empty$ { pop$ archiv.base } 'skip$ if$ *
+ "/" *
+ swap$ *
+ "{" swap$ * "} " *
+ swap$
+ ""
+ archivePrefix duplicate$ empty$ { pop$ "" } { ":" * } if$ *
+ swap$ *
+ primaryClass duplicate$ empty$ { pop$ "" } { " [" swap$ * "]" * } if$ *
+ "{" swap$ * "} " *
+ *
+ eprint.command swap$ *
+ }
+ if$
+}
+
+FUNCTION {format.translation}
+{ translation duplicate$ empty$
+ 'skip$
+ { ""
+ "\translation{" * swap$ * "}" *
+ punctuation.space 'punctuation.state :=
+ }
+ if$
+}
+
+FUNCTION {format.url}
+{
+ url duplicate$ empty$
+ { pop$ "" }
+ {
+ "\url "
+ "{" * swap$ * "}" *
+ }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {check.speaker}
+{ key empty$ 'skip$
+ { key nameptr int.to.str$ =
+ {
+ bolden
+ }
+ 'skip$
+ if$
+ }
+ if$
+}
+
+
+STRINGS { bibinfo}
+
+FUNCTION {format.names.fname}
+{
+ control.author.initials {
+ control.author.dotless {
+ control.author.nospace {
+ "f{}"
+ } {
+ "f{~}"
+ } if$
+ } {
+ control.author.nospace {
+ "f{.}."
+ } {
+ "f."
+ } if$
+ } if$
+ } {
+ "ff"
+ } if$
+}
+
+FUNCTION {bracify}
+{
+ "{" swap$ * "}" *
+}
+
+FUNCTION {name.comma}
+{
+ control.author.nocomma 'skip$ { "," swap$ * } if$
+}
+
+FUNCTION {format.names.format.onefont}
+{
+ "{vv~}{ll}"
+ nameptr #1 >
+ control.author.first
+ and
+ control.author.reversed not
+ or
+ {
+ control.author.initials {
+ "f"
+ control.author.dotless 'skip$ {
+ "." *
+ } if$
+ "~" *
+ } {
+ "ff"
+ } if$
+ bracify
+ swap$
+ } {
+ format.names.fname
+ " " swap$ *
+ name.comma
+ bracify
+ }
+ if$
+ "jj"
+ " " swap$ *
+ name.comma
+ bracify
+ control.author.jnrlst 'skip$ 'swap$ if$
+ * *
+}
+
+FUNCTION {format.names.onefont}
+{
+ s nameptr format.names.format.onefont format.name$
+ remove.dots
+ bib.name.font
+}
+
+FUNCTION {format.names.morfont}
+{ s nameptr
+ "{vv~}{ll}" format.name$ bib.name.font
+ nameptr #1 >
+ control.author.first
+ and
+ control.author.reversed not
+ or
+ {
+ s nameptr
+ control.author.initials {
+ "f" % default: name + surname + comma junior
+ } {
+ "ff"
+ } if$
+ control.author.dotless 'skip$ {
+ "." * % nm-init % Initials. + surname (J. F. Smith) control.author.initials
+ } if$
+ bracify
+ format.name$ duplicate$ empty$ 'skip$
+ { tie.or.space.prefix bib.fname.font swap$ * }
+ if$
+ swap$
+ *
+ s nameptr
+ "{jj}" format.name$ duplicate$ empty$ 'skip$
+ { bib.fname.font ", " swap$ * }
+ if$
+ } {
+ "," *
+ s nameptr
+ format.names.fname
+ "jj"
+ " "
+ name.comma
+ control.author.jnrlst {
+ swap$ * skip$
+ } {
+ skip$ * swap$
+ } if$
+ bracify swap$ bracify swap$
+ *
+ format.name$
+ remove.dots
+ duplicate$ empty$ 'skip$
+ { bib.fname.font " " swap$ * }
+ if$
+ } if$
+ *
+}
+
+FUNCTION {names.punctuate}
+{
+ "," *
+ " " *
+}
+
+FUNCTION {format.names}
+{ 'bibinfo :=
+ duplicate$ empty$ { pop$ "" } {
+ duplicate$ num.names$
+ duplicate$ 'numnames :=
+ 'namesleft :=
+ 's :=
+ #1 'nameptr :=
+ ""
+ { namesleft #0 > }
+ {
+ format.names.morfont
+ bibinfo bibinfo.check
+ type$ "presentation" =
+ 'check.speaker
+ 'skip$
+ if$
+ 't :=
+ nameptr #1 > not
+ {
+ t *
+ } {
+ namesleft #1 >
+ {
+ names.punctuate
+ t *
+ } {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ names.punctuate
+ t "others" =
+ {
+ " " *
+ bbl.etal
+ emphasize
+ *
+ } {
+ bbl.and
+ space.word *
+ t *
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ } if$
+}
+
+FUNCTION {format.names.ed.onefont}
+{
+ s nameptr
+ control.author.initials {
+ control.author.dotless {
+ control.author.nospace {
+ "{f{}~}{vv~}{ll}{ jj}" % nm-rvx|nm-rvcx
+ } {
+ "{f{~}~}{vv~}{ll}{ jj}" % nm-rv
+ } if$
+ } {
+ control.author.nospace {
+ "{f{.}.~}{vv~}{ll}{ jj}" % nm-rvv|nm-rvvc
+ }{
+ "{f.~}{vv~}{ll}{, jj}" % nm-init|nm-rev|nm-rev1
+ } if$
+ } if$
+ } {
+ "{ff~}{vv~}{ll}{, jj}"
+ } if$
+ format.name$
+ remove.dots
+ bib.name.font
+}
+
+FUNCTION {format.names.ed.morfont}
+{
+ control.author.reversed { %
+ control.author.initials { %
+ control.author.dotless { %
+ s nameptr
+ control.author.nospace { % nm-rvx nm-rvcx
+ "{f{}}"
+ } { % nm-rv
+ "{f{~}}"
+ } if$
+ format.name$ duplicate$ empty$ 'skip$
+ { tie.or.space.prefix bib.fname.font swap$ * }
+ if$
+ s nameptr
+ "{vv~}{ll}" format.name$ bib.name.font *
+ s nameptr
+ "{jj}" format.name$
+ remove.dots
+ duplicate$ empty$ 'skip$
+ { bib.fname.font " " swap$ * }
+ if$
+ } { % !control.author.dotless
+ s nameptr
+ control.author.nospace { % nm-rvv
+ "{ff}"
+ } { % nm-rev nm-rev1
+ "{f.}"
+ } if$
+ format.name$ duplicate$ empty$ 'skip$
+ { tie.or.space.prefix bib.fname.font swap$ * }
+ if$
+ s nameptr
+ "{vv~}{ll}" format.name$ bib.name.font *
+ s nameptr
+ "{jj}" format.name$
+ duplicate$ empty$ 'skip$
+ { bib.fname.font ", " swap$ * }
+ if$
+ } if$
+ } { % Full names !control.author.initials nm-revf nm-revv1
+ s nameptr
+ "{ff}"
+ format.name$ duplicate$ empty$ 'skip$
+ { tie.or.space.prefix bib.fname.font swap$ * }
+ if$
+ s nameptr
+ "{vv~}{ll}" format.name$ bib.name.font *
+ s nameptr
+ "{jj}" format.name$
+ duplicate$ empty$ 'skip$
+ { bib.fname.font ", " swap$ * }
+ if$
+ } if$
+ } { % !control.author.reversed nm-init
+ s nameptr
+ "{f.}"
+ format.name$ duplicate$ empty$ 'skip$
+ { tie.or.space.prefix bib.fname.font swap$ * }
+ if$
+ s nameptr
+ "{vv~}{ll}" format.name$ bib.name.font *
+ s nameptr
+ "{jj}" format.name$
+ duplicate$ empty$ 'skip$
+ { bib.fname.font ", " swap$ * }
+ if$
+ } if$
+ *
+}
+
+FUNCTION {format.names.ed}
+{
+ control.editor #0 > {
+ format.names
+ } {
+ 'bibinfo :=
+ duplicate$ empty$ 'skip$ {
+ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ {
+ format.names.ed.morfont
+ bibinfo bibinfo.check
+ 't :=
+ nameptr #1 >
+ {
+ namesleft #1 >
+ {
+ names.punctuate
+ t *
+ }{
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ numnames #2 >
+ 'names.punctuate
+ 'skip$
+ if$
+ t "others" =
+ {
+ " " * bbl.etal emphasize *
+ }{
+ bbl.and
+ space.word * t *
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ } if$
+ } if$
+}
+
+FUNCTION {format.key}
+{ empty$
+ { key field.or.null }
+ { "" }
+ if$
+}
+
+FUNCTION {format.authors}
+{ author "author" format.names
+ duplicate$ empty$ 'skip$
+ { collaboration "collaboration" bibinfo.check
+ duplicate$ empty$ 'skip$
+ { " (" swap$ * ")" * }
+ if$
+ *
+ }
+ if$
+ "author" 'bibfield :=
+}
+
+FUNCTION {get.bbl.editor}
+{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$
+}
+
+FUNCTION {format.editors}
+{ editor "editor" format.names duplicate$ empty$ 'skip$
+ {
+ "," *
+ word.space *
+ get.bbl.editor
+ capitalize
+ *
+ }
+ if$
+}
+
+FUNCTION {format.isbn.output}
+{
+}
+
+FUNCTION {format.issn.output}
+{
+}
+
+FUNCTION {doi.base}
+{
+ "http://dx.doi.org/"
+}
+
+FUNCTION {doi.base.command}
+{
+ "\doibase "
+}
+
+FUNCTION {noop.command}
+{
+ "\href@noop "
+}
+
+FUNCTION {href.command}
+{
+ "\href "
+}
+
+FUNCTION {link.tag.open}
+{
+ doi duplicate$ empty$
+ {
+ pop$
+ url duplicate$ empty$
+ {
+ pop$ "" noop.command
+ }{
+ href.command
+ }
+ if$
+ }
+ {
+ doi.base.command swap$ *
+ href.command
+ }
+ if$
+ "{" * swap$ * "} {" *
+}
+
+FUNCTION {link.tag.shut}
+{
+ "}"
+}
+
+FUNCTION {link.open}
+{
+ link.tag.open output.nopunct
+}
+
+FUNCTION {link.shut}
+{
+ link.tag.shut *
+}
+
+FUNCTION {add.doi}
+{
+ link.tag.open swap$ * link.tag.shut *
+}
+
+FUNCTION {select.language}
+{ duplicate$ empty$
+ 'pop$
+ { language empty$
+ 'skip$
+ { "{\selectlanguage {" language * "}" * swap$ * "}" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.note}
+{
+ note empty$
+ { "" }
+ { note #1 #1 substring$
+ duplicate$ "{" =
+ 'skip$
+ {
+ output.state after.word = output.state after.punctuation = or
+ { "l" }
+ { "u" }
+ if$ change.case$
+ }
+ if$
+ note #2 global.max$ substring$ * "note" bibinfo.check
+ }
+ if$
+}
+
+FUNCTION {bbl.enquote}
+{
+ "\enquote "
+}
+
+FUNCTION {string.enquote}
+{
+ punctuation.no 'punctuation.state :=
+ non.stop {
+ block.punctuation
+ } { "" } if$
+ swap$ pop$
+ *
+ bbl.enquote "{" * swap$ * "}" *
+ word.space *
+}
+
+FUNCTION {format.title}
+{ title
+ duplicate$ empty$ 'skip$ { "t" change.case$ } if$
+ duplicate$ "title" bibinfo.check swap$
+ duplicate$ empty$ 'pop$
+ {
+ punctuation.yes 'punctuation.state :=
+ string.enquote
+ select.language
+ }
+ if$
+}
+
+FUNCTION {end.quote.title}
+{ title empty$
+ 'skip$
+ { before.all 'output.state := }
+ if$
+}
+
+FUNCTION {format.name.apply}
+{
+ s nameptr
+ "{vv~}{ll}"
+ format.name$
+ cite.name.font
+}
+
+FUNCTION {format.full.names}
+{
+ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { format.name.apply
+ 't :=
+ nameptr #1 >
+ {
+ namesleft #1 >
+ { ", " * t * }
+ {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ {
+ 't :=
+ }
+ 'pop$
+ if$
+ t "others" =
+ {
+ " " * bbl.etal
+ emphasize *
+ }{
+ numnames #2 > { "," * }{ skip$ } if$
+ bbl.and
+ space.word * t *
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {make.full.names}
+{
+ key editor author
+ type$ "proceedings" =
+ type$ "book" =
+ type$ "inbook" =
+ or { pop$ }{ { pop$ "" }{ swap$ pop$ "" swap$ } if$ } if$
+ duplicate$ empty$
+ { pop$
+ duplicate$ empty$
+ { pop$
+ duplicate$ empty$
+ { pop$
+ cite$ #1 #3 substring$
+ }{
+ skip$
+ }
+ if$
+ }
+ { swap$ pop$ format.full.names }
+ if$
+ }
+ { swap$ pop$ swap$ pop$ format.full.names }
+ if$
+}
+
+FUNCTION {year.bibitem}
+{
+ year duplicate$ empty$
+ { pop$ ""
+ "????" *
+ }{
+ skip$
+ } if$
+ extra.label *
+}
+
+FUNCTION {output.bibitem}
+{
+ newline$
+ ""
+ label
+ * ")" *
+ make.full.names duplicate$ short.list =
+ { pop$ }{ * } if$
+ bracify
+ "[" swap$ * "]" *
+ cite$ bracify "%" *
+ *
+ "\bibitem "
+ swap$ *
+ write$ newline$
+ " "
+ duplicate$ bbl.open * write$ newline$
+ before.all 'output.state :=
+ punctuation.yes 'punctuation.state :=
+}
+
+FUNCTION {n.dashify}
+{
+ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }{
+ { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }{
+ t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {word.in}
+{
+ bbl.in
+ word.space *
+}
+
+FUNCTION {date.encapsulate}
+{
+ duplicate$ empty$
+ 'skip$
+ {
+ before.all 'output.state :=
+ " (" swap$ * ")" *
+ }
+ if$
+}
+
+FUNCTION {format.date}
+{
+ year "year" bibinfo.check duplicate$ empty$
+ {
+ "empty year in " cite$ * "; set to ????" * warning$
+ pop$ "????"
+ }
+ 'skip$
+ if$
+ extra.label *
+ date.encapsulate
+}
+
+FUNCTION {format.date.output.check}
+{
+ format.date
+ "year" output.check
+}
+
+FUNCTION {format.date.output}
+{
+ format.date.output.check
+}
+
+FUNCTION {format.btitle}
+{
+ booktitle duplicate$ empty$ { pop$
+ title
+ } 'skip$ if$
+ "title" bibinfo.check
+ duplicate$ empty$ 'skip$
+ {
+ emphasize
+ select.language
+ }
+ if$
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {editor.check.book}
+{ editor empty$ 'skip$
+ {
+ "can't use both author and editor fields in " cite$ *
+ ": try using @inbook instead" *
+ warning$
+ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume duplicate$ empty$
+ { pop$ "" }
+ {
+ "volume and number" number either.or.check
+ bbl.volume
+ capitalize
+ swap$
+ tie.or.space.prefix "volume" bibinfo.check * *
+ series "series" bibinfo.check duplicate$ empty$ 'pop$
+ {
+ ", "
+ * swap$ *
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.number}
+{
+ bbl.number
+ output.state after.word = output.state after.punctuation = or
+ #1 or
+ #0 and
+ 'skip$
+ { capitalize }
+ if$
+ number tie.or.space.prefix "number" bibinfo.check * *
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ {
+ series empty$
+ {
+ number "number" bibinfo.check
+ }{
+ format.number
+ series "series" bibinfo.check
+ word.space * swap$ *
+ }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {is.num}
+{ chr.to.int$
+ duplicate$ "0" chr.to.int$ < not
+ swap$ "9" chr.to.int$ > not and
+}
+
+FUNCTION {extract.num}
+{ duplicate$ 't :=
+ "" 's :=
+ { t empty$ not }
+ { t #1 #1 substring$
+ t #2 global.max$ substring$ 't :=
+ duplicate$ is.num
+ { s swap$ * 's := }
+ { pop$ "" 't := }
+ if$
+ }
+ while$
+ s empty$
+ 'skip$
+ { pop$ s }
+ if$
+}
+
+FUNCTION {convert.edition}
+{ extract.num "l" change.case$ 's :=
+ s "first" = s "1" = or
+ { bbl.first 't := }
+ { s "second" = s "2" = or
+ { bbl.second 't := }
+ { s "third" = s "3" = or
+ { bbl.third 't := }
+ { s "fourth" = s "4" = or
+ { bbl.fourth 't := }
+ { s "fifth" = s "5" = or
+ { bbl.fifth 't := }
+ { s #1 #1 substring$ is.num
+ { s
+ eng.ord
+ 't := }
+ { edition 't := }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ t
+}
+
+FUNCTION {format.edition}
+{ edition duplicate$ empty$ 'skip$
+ {
+ convert.edition
+ output.state after.word = output.state after.punctuation = or
+ { "l" }
+ { "t" }
+ if$ change.case$
+ "edition" bibinfo.check
+ word.space * bbl.edition *
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages duplicate$ empty$
+ 'skip$
+ { duplicate$ multi.page.check
+ {
+ bbl.pages swap$
+ n.dashify
+ }{
+ bbl.page swap$
+ }
+ if$
+ tie.or.space.prefix
+ "pages" bibinfo.check
+ * *
+ }
+ if$
+}
+
+FUNCTION {first.page}
+{ 't :=
+ ""
+ { t empty$ not t #1 #1 substring$ "-" = not and }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+}
+
+FUNCTION {format.book.pages}
+{
+ pages duplicate$ empty$ 'skip$
+ {
+ "pages" bibinfo.check word.space bbl.pages * *
+ }
+ if$
+}
+
+FUNCTION {volnum.punct}
+{
+ ","
+ word.space *
+}
+
+FUNCTION {format.journal.pages}
+{ pages duplicate$ empty$ 'pop$
+ { swap$ duplicate$ empty$
+ { pop$ pop$ format.pages }
+ { volnum.punct *
+ swap$
+ control.pages duplicate$ #0 < {
+ pop$ pop$
+ }{
+ #0 >
+ {
+ n.dashify
+ }{
+ first.page
+ } if$
+ } if$
+ "pages" bibinfo.check
+ *
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.journal.eid}
+{ eid "eid" bibinfo.check
+ duplicate$ empty$ 'pop$
+ { swap$ duplicate$ empty$ 'skip$
+ { volnum.punct * }
+ if$
+ swap$ *
+ }
+ if$
+}
+
+FUNCTION {eid.or.pages}
+{
+ eid empty$
+ { format.journal.pages }
+ { format.journal.eid }
+ if$
+}
+
+FUNCTION {format.ser.vol.num}
+{
+ series "series" bibinfo.check output
+ volume field.or.null
+ duplicate$ empty$ 'skip$
+ {
+ "volume" bibinfo.check
+ }
+ if$
+ bolden
+ number "number" bibinfo.check duplicate$ empty$ 'skip$
+ {
+ swap$ duplicate$ empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ swap$
+ "~(" swap$ * ")" *
+ }
+ if$ *
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ {
+ ""
+ }
+ { type empty$
+ {
+ bbl.chapter
+ capitalize
+ }{
+ type
+ capitalize
+ "type" bibinfo.check
+ }
+ if$
+ chapter tie.or.space.prefix
+ "chapter" bibinfo.check
+ * *
+ }
+ if$
+}
+
+FUNCTION {format.booktitle}
+{
+ booktitle duplicate$ "booktitle" bibinfo.check swap$
+ duplicate$ empty$ 'pop$
+ {
+ punctuation.yes 'punctuation.state :=
+ pop$ emphasize
+ select.language
+ }
+ if$
+}
+
+FUNCTION {format.editor.in}
+{
+ editor "editor" format.names.ed duplicate$ empty$ 'skip$
+ {
+ bbl.edby
+ word.space * swap$ *
+ }
+ if$
+}
+
+FUNCTION {output.article.booktitle}
+{
+ format.booktitle
+ "booktitle" 'bibfield :=
+ output
+ bookaddress "address" bibinfo.check duplicate$ empty$ 'pop$
+ {
+ "address" 'bibfield :=
+ output.nonnull after.punctuation 'output.state :=
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{
+ format.booktitle duplicate$ empty$ 'pop$
+ {
+ add.doi
+ word.in swap$ * output.nonnull
+ bookaddress "address" bibinfo.check output
+ format.number.series "series and number" bibinfo.check output
+ format.bvolume output
+ format.editor.in "editor" bibinfo.check output
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle.inbook}
+{
+ format.booktitle duplicate$ empty$ 'pop$
+ {
+ add.doi
+ word.in swap$ * output.nonnull
+ bookaddress "address" bibinfo.check output
+ format.number.series "series and number" bibinfo.check output
+ format.bvolume output
+ author empty$ 'skip$
+ { format.editor.in "editor" bibinfo.check output }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type duplicate$ empty$
+ 'pop$
+ { swap$ pop$
+ "t" change.case$ "type" bibinfo.check
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ number "number" bibinfo.check
+ type duplicate$ empty$
+ { pop$ bbl.techrep }
+ 'skip$
+ if$
+ "type" bibinfo.check
+ swap$ duplicate$ empty$
+ { pop$ "t" change.case$ }
+ { tie.or.space.prefix * * }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{
+ word.in
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.book.crossref}
+{ volume duplicate$ empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ pop$ word.in
+ }
+ { bbl.volume
+ swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word *
+ }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{
+ word.in
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.org.or.pub}
+{ 't :=
+ ""
+ address "address" bibinfo.check
+ duplicate$ empty$
+ { pop$ t }
+ { t duplicate$ empty$
+ { pop$ }
+ {
+ "," word.space *
+ * swap$ *
+ }
+ if$
+ }
+ if$
+ *
+ duplicate$ empty$ 'skip$ {
+ ""
+ "(" * swap$ * ")" *
+ after.punctuation 'output.state :=
+ punctuation.space 'punctuation.state :=
+ } if$
+}
+
+FUNCTION {format.publisher.address}
+{ publisher "publisher" bibinfo.warn format.org.or.pub
+}
+
+FUNCTION {format.organization.address}
+{ organization "organization" bibinfo.check format.org.or.pub
+}
+
+FUNCTION {format.organization.publisher.address}
+{
+ publisher empty$
+ { format.organization.address }
+ { organization "organization" bibinfo.check output
+ format.publisher.address
+ }
+ if$
+}
+
+FUNCTION {format.school.address.output}
+{
+ school "school" bibinfo.warn
+ address "address" bibinfo.check
+ duplicate$ empty$ 'skip$
+ {
+ swap$
+ duplicate$ empty$ 'skip$
+ {
+ ", " *
+ }
+ if$
+ swap$
+ }
+ if$
+ *
+ duplicate$ empty$ 'skip$ { "(" swap$ * ")" * } if$ after.punctuation 'output.state :=
+ output
+}
+
+FUNCTION {article.title.produce}
+{
+ control.title duplicate$ #0 <
+ { pop$
+ }{
+ format.title
+ "title" 'bibfield :=
+ swap$ #0 >
+ {
+ "title" output.check
+ }{
+ output
+ } if$
+ new.block.comma
+ } if$
+}
+
+FUNCTION {control}
+{
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors
+ booktitle empty$ {
+ "author" output.check
+ }{ output } if$
+ author format.key output
+ format.date.output.check date.block
+ article.title.produce
+ output.article.booktitle
+ crossref missing$
+ {
+ link.open
+ journal
+ "journal" bibinfo.warn
+ "journal" 'bibfield :=
+ output
+ add.blank
+ format.ser.vol.num
+ output
+ eid.or.pages
+ pages empty$ {
+ doi output
+ } 'skip$ if$
+ link.shut
+ }{
+ format.article.crossref output.nonnull
+ eid.or.pages
+ }
+ if$
+ format.issn.output
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ format.translation output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ {
+ format.editors "author and editor" output.check
+ editor format.key output
+ }{
+ format.authors output.nonnull
+% crossref missing$ { editor.check.book } 'skip$ if$
+ }
+ if$
+ format.date.output.check date.block
+ link.open
+ format.btitle
+ "title" output.check
+ link.shut
+ format.edition output
+ author empty$
+ {
+ }
+ {
+ format.editor.in output
+ editor format.key output
+ }
+ if$
+ format.number.series output
+ crossref missing$
+ {
+ format.bvolume output
+ new.block.comma
+ format.publisher.address output
+ }{
+ new.block.comma
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.isbn.output
+ format.chapter.pages
+ output
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ format.date.output date.block
+ link.open
+ format.title
+ "title" output.check
+ link.shut
+ new.block.comma
+ howpublished "howpublished" bibinfo.check output
+ address "address" bibinfo.check output
+ format.isbn.output
+ format.book.pages output
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {footnote}
+{ output.bibitem
+ format.note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ {
+ format.editors "editor" output.check
+ editor format.key output
+ }{
+ format.authors output.nonnull
+ author format.key output
+ }
+ if$
+ format.date.output.check date.block
+
+ format.title output
+ new.block.comma
+
+ crossref missing$
+ {
+ format.in.ed.booktitle.inbook
+ format.chapter.pages
+ "chapter"
+ output.check
+ new.block.comma
+ format.edition output
+ new.block.comma
+ format.publisher.address output
+ }{
+ format.chapter.pages
+ "chapter"
+ output.check
+ new.block.comma
+ format.book.crossref output.nonnull
+ }
+ if$
+ crossref missing$
+ { format.isbn.output }
+ 'skip$
+ if$
+ format.pages "pages" output.check
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date.output.check date.block
+ article.title.produce
+ crossref missing$
+ {
+ format.in.ed.booktitle
+ format.edition output
+ format.chapter.pages output
+ format.publisher.address output
+ format.isbn.output
+ }{
+ format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ format.pages "pages" output.check
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date.output.check date.block
+ article.title.produce
+ crossref missing$
+ {
+ format.in.ed.booktitle
+ format.organization.publisher.address output
+ format.isbn.output
+ format.issn.output
+ }{
+ format.incoll.inproc.crossref output.nonnull
+ }
+ if$
+ format.chapter.pages "chapter and pages" output.check
+ format.pages "pages" output.check
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+FUNCTION {manual}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ format.date.output date.block
+ link.open
+ format.btitle
+ "title" output.check
+ link.shut
+ organization "organization" bibinfo.check output
+ address "address" bibinfo.check output
+ format.edition output
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date.output.check date.block
+ format.btitle
+ output
+ new.block.comma
+ link.open
+ bbl.mthesis
+ format.thesis.type
+ output.nonnull
+ link.shut
+ format.school.address.output
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ format.date.output
+ date.block
+ link.open
+ format.title
+ output
+ link.shut
+ new.block.comma
+ howpublished "howpublished" bibinfo.check output
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date.output.check date.block
+ format.btitle
+ output
+ new.block.comma
+ link.open
+ bbl.phdthesis
+ format.thesis.type
+ output.nonnull
+ link.shut
+ format.school.address.output
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {presentation}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ new.block.comma
+ link.open
+ format.title
+ output
+ link.shut
+ new.block.comma
+ format.organization.address "organization and address" output.check
+ month "month" output.check
+ year "year" output.check
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ new.sentence
+ type missing$ 'skip$
+ {"(" type capitalize * ")" * output}
+ if$
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ format.editors output
+ editor format.key output
+ format.date.output.check date.block
+ link.open
+ format.btitle
+ "title" output.check
+ link.shut
+ bookaddress "address" bibinfo.check output
+ format.number.series output
+ format.bvolume output
+ format.organization.publisher.address output
+ format.isbn.output
+ format.issn.output
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date.output.check date.block
+ link.open
+ format.btitle
+ "title" output.check
+ link.shut
+ new.block.comma
+ format.tr.number
+ output.nonnull
+ institution "institution" bibinfo.warn
+ format.org.or.pub output
+ new.block.comma
+ new.sentence.comma
+ format.note output
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date.output date.block
+ link.open
+ format.title
+ "title" output.check
+ link.shut
+ new.block.comma
+ new.sentence.comma
+ format.note "note" output.check
+ format.eprint output
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+READ
+
+EXECUTE {control.init}
+
+ITERATE {control.pass}
+
+EXECUTE {control.check}
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+FUNCTION {cite.name.font.apply}
+{
+ word.space * bbl.etal
+ emphasize
+ *
+}
+
+FUNCTION {format.lab.names}
+{ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ format.name.apply
+ s num.names$ duplicate$
+ #2 >
+ { pop$
+ cite.name.font.apply
+ }{
+ #2 <
+ 'skip$
+ {
+ s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ {
+ cite.name.font.apply
+ }{
+ bbl.and space.word *
+ s #2 "{vv~}{ll}" format.name$
+ cite.name.font
+ *
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.label}
+{ editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {calc.short.authors}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.label
+ 'author.key.label
+ if$
+ }
+ if$
+ 'short.list :=
+}
+
+FUNCTION {calc.label}
+{
+ calc.short.authors
+ short.list
+ year duplicate$ empty$
+ short.list key field.or.null = or
+ {
+ pop$ ""
+ "????" *
+ }{
+ control.year #0 > { purify$ #-1 #4 substring$ } 'skip$ if$
+ }
+ if$
+ "(" swap$ *
+ * 'label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{ll{ }}"
+ control.author.initials {
+ "{ f{ }}" *
+ }{
+ "{ ff{ }}" *
+ } if$
+ "{ jj{ }}" *
+ format.name$ 't :=
+ nameptr #1 >
+ {
+ " " *
+ namesleft #1 = t "others" = and
+ { "zzzzz" * }
+ {
+ t sortify *
+ }
+ if$
+ }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {year.sort.key}
+{
+ year
+}
+
+FUNCTION {editor.sort}
+{ editor empty$
+ { key empty$
+ { "to sort, need editor or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+INTEGERS { seq.num }
+
+FUNCTION {init.seq}
+{ #0 'seq.num :=}
+
+EXECUTE {init.seq}
+
+FUNCTION {int.to.fix}
+{ "000000000" swap$ int.to.str$ *
+ #-1 #10 substring$
+}
+
+FUNCTION {label.presort}
+{
+ calc.label
+ label sortify
+ " "
+ *
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.sort
+ 'author.sort
+ if$
+ }
+ if$
+ #1 entry.max$ substring$
+ 'sort.label :=
+ sort.label
+ *
+ " "
+ *
+ title field.or.null sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+FUNCTION {presort.pass}
+{ type$ "control" = 'control.presort 'label.presort if$
+}
+
+ITERATE {presort.pass}
+
+SORT
+
+STRINGS { last.label next.extra }
+
+INTEGERS { last.extra.num number.label }
+
+FUNCTION {initialize.extra.label.stuff}
+{ #0 int.to.chr$ 'last.label :=
+ "" 'next.extra :=
+ #0 'last.extra.num :=
+ #0 'number.label :=
+}
+
+FUNCTION {label.forward}
+{
+ last.label label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ label 'last.label :=
+ }
+ if$
+ number.label #1 + 'number.label :=
+}
+
+FUNCTION {label.reverse}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+ extra.label
+ duplicate$ empty$
+ 'skip$
+ { "{\natexlab{" swap$ * "}}" * }
+ if$
+ 'extra.label :=
+ label extra.label * 'label :=
+}
+
+EXECUTE {initialize.extra.label.stuff}
+
+FUNCTION {forward.pass}
+{ type$ "control" = 'control.forward 'label.forward if$
+}
+
+ITERATE {forward.pass}
+
+FUNCTION {reverse.pass}
+{ type$ "control" = 'control.reverse 'label.reverse if$
+}
+
+REVERSE {reverse.pass}
+
+FUNCTION {sortkey.sort}
+{ sort.label
+ " "
+ *
+ year.sort.key
+ field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+FUNCTION {bib.sort.pass}
+{ type$ "control" = 'control.sort 'sortkey.sort if$
+}
+
+ITERATE {bib.sort.pass}
+
+SORT
+
+FUNCTION {init.bib.eprint}
+{
+ "\texttt {"
+ pop$
+ "\providecommand \url [0]{\begingroup\@sanitize@url \@url }%" write$ newline$
+ "\providecommand \@url [1]{\endgroup\@href {#1}{" "}}%" bbl.url.prefix swap$ * * write$ newline$
+ "\providecommand " " [0]{URL }%" bbl.url.prefix swap$ * * write$ newline$
+ eprint.command "\providecommand " swap$ * "[0]{\href }%" * write$ newline$
+}
+
+FUNCTION {init.bib.doi}
+{
+ "\providecommand \doibase [0]{" doi.base "}%" * * write$ newline$
+}
+
+FUNCTION {init.bib.hypertex}
+{
+ "\providecommand " noop.command "[0]{\@secondoftwo}%" * * write$ newline$
+ "\providecommand " href.command "[0]{\begingroup \@sanitize@url \@href}%" * * write$ newline$
+ "\providecommand \@href[1]{\@@startlink{#1}\@@href}%" write$ newline$
+ "\providecommand \@@href[1]{\endgroup#1\@@endlink}%" write$ newline$
+ "\providecommand \@sanitize@url [0]{\catcode `\\12\catcode `\$12\catcode `\&12\catcode `\#12\catcode `\^12\catcode `\_12\catcode `\%12\relax}%" write$ newline$
+ "\providecommand \@@startlink[1]{}%" write$ newline$
+ "\providecommand \@@endlink[0]{}%" write$ newline$
+}
+
+FUNCTION {init.bib.namefont}
+{
+ "\providecommand \bibnamefont [1]{#1}%" write$ newline$
+ "\providecommand \bibfnamefont [1]{#1}%" write$ newline$
+ "\providecommand \citenamefont [1]{#1}%" write$ newline$
+}
+
+FUNCTION {init.bib.quote}
+{
+ "\providecommand " bbl.enquote * " [1]{" *
+ "``" "''"
+ "#1" swap$ "}%" * * * * write$ newline$
+}
+
+FUNCTION {init.bib.ay}
+{
+ "\providecommand \natexlab [1]{#1}%"
+ write$ newline$
+}
+
+FUNCTION {init.bib.bibinfo}
+{
+ bibinfo.command "\providecommand " swap$ * " [0]{\@secondoftwo}%" * write$ newline$
+ bibfield.command "\providecommand " swap$ * " [0]{\@secondoftwo}%" * write$ newline$
+}
+
+FUNCTION {init.bib.lang}
+{
+ "\providecommand \selectlanguage [0]{\@gobble}%" write$ newline$
+}
+
+FUNCTION {init.bib.endbibitem}
+{
+ "\providecommand " bbl.open * "[0]{}%" * write$ newline$
+ "\providecommand \bibitemStop [0]{}%" write$ newline$
+ "\providecommand \bibitemNoStop [0]{.\EOS\space}%" write$ newline$
+ "\providecommand \EOS [0]{\spacefactor3000\relax}%" write$ newline$
+}
+
+FUNCTION {init.bib.translation}
+{
+ "\providecommand \translation [1]{[#1]}%" write$ newline$
+}
+
+FUNCTION {warn.bib}
+{
+}
+
+FUNCTION {init.bib}
+{
+ warn.bib
+ "\makeatletter" write$ newline$
+ "\providecommand \@ifxundefined [1]{%" write$ newline$
+ " \@ifx{#1\undefined}" write$ newline$
+ "}%" write$ newline$
+ "\providecommand \@ifnum [1]{%" write$ newline$
+ " \ifnum #1\expandafter \@firstoftwo" write$ newline$
+ " \else \expandafter \@secondoftwo" write$ newline$
+ " \fi" write$ newline$
+ "}%" write$ newline$
+ "\providecommand \@ifx [1]{%" write$ newline$
+ " \ifx #1\expandafter \@firstoftwo" write$ newline$
+ " \else \expandafter \@secondoftwo" write$ newline$
+ " \fi" write$ newline$
+ "}%" write$ newline$
+ init.bib.ay
+ init.bib.quote
+ init.bib.namefont
+ init.bib.hypertex
+ init.bib.eprint
+ init.bib.doi
+ init.bib.lang
+ init.bib.bibinfo
+ init.bib.translation
+ init.bib.endbibitem
+ "\providecommand " bbl.shut * " [1]{\csname bibitem#1\endcsname}%" * write$ newline$
+ "\let\auto@bib@innerbib\@empty" write$ newline$
+ "%</preamble>" write$
+}
+
+FUNCTION {begin.bib}
+{
+ id.bst diagn.cmntlog
+ control.bib
+ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "\begin{thebibliography}{"
+ number.label int.to.str$
+ * "}%" *
+ write$ newline$
+ init.bib
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+ "\end{thebibliography}%"
+ write$ newline$
+}
+
+EXECUTE {end.bib}
+
+%% End of customized bst file
+%%
+%% End of file `apsrmp4-1.bst'.
diff --git a/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/00readme.tex b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/00readme.tex
new file mode 100644
index 0000000000..888e4158d8
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/00readme.tex
@@ -0,0 +1,165 @@
+\title{%
+ The \classname{revtex4-1} document class of the American Physical Society%
+ \protect\thanks{Work under hire to The American Physical Society.}%
+}%
+\author{Arthur Ogawa%
+ \protect\thanks{First revision of REV\TeX4.0 (unreleased) by David Carlisle}%
+}%
+\date{Version \fileversion, dated \filedate}%
+\newcommand\revtex{REV\TeX}
+
+\maketitle
+
+This file embodies the implementation of the APS \revtex\ 4.1 document class
+for electronic submissions to journals.
+
+The distribution point for this work is
+\url{http://publish.aps.org/revtex4/},
+which contains fully unpacked, prebuilt runtime files and documentation.
+
+\tableofcontents
+
+\section{Using \protect\revtex}
+
+The file \file{README} has retrieval and installation information.
+
+User documentation is presented separately in \file{auguide.tex}.
+
+The file \file{template.aps} is a boilerplate file.
+
+\changes{4.0a}{1998/01/16}{Initial version}
+\changes{4.0a}{1998/01/31}{Move after process options, so \cs{clearpage} not in scope of twocolumn}
+\changes{4.0a}{1998/01/31}{Rearrange the ordering so numerical ones come first. AO: David, what does this mean?}
+\changes{4.0a}{1998/01/31}{use font-dependent spacing}
+\changes{4.0a}{1998/01/31}{4.0d had twoside option setting twoside switch to false}
+\changes{4.0a}{1998/01/31}{Move after process options, so the following test works}
+\changes{4.0a}{1998/01/31}{print homepage}
+\changes{4.0a}{1998/01/31}{protect against hyperref revtex kludges which are not needed now}
+\changes{4.0a}{1998/06/10}{multiple preprint commands}
+\changes{4.0a}{1998/06/10}{comma not space between email and homepage}
+\changes{4.0a}{1998/06/10}{single space footnotes}
+\changes{4.0b}{1999/06/20}{First modifications by Arthur Ogawa (mailto:arthur\_ogawa at sbcglobal dot net)}
+\changes{4.0b}{1999/06/20}{Added localization of \cs{figuresname}}
+\changes{4.0b}{1999/06/20}{Added localization of \cs{tablesname}}
+\changes{4.0b}{1999/06/20}{AO: all code for \protect\classoption{10pt} is in this module.}
+\changes{4.0b}{1999/06/20}{AO: all code for \protect\classoption{11pt} is in this module.}
+\changes{4.0b}{1999/06/20}{AO: all code for \protect\classoption{12pt} is in this module.}
+\changes{4.0b}{1999/06/20}{AO: made aps.rtx part of revtex4.dtx}
+\changes{4.0b}{1999/06/20}{AO: remove duplicates}
+\changes{4.0b}{1999/06/20}{call \cs{print@floats}}
+\changes{4.0b}{1999/06/20}{Defer assignment until \cs{AtBeginDocument} time.}
+\changes{4.0b}{1999/06/20}{Defer decision until \cs{AtBeginDocument} time}
+\changes{4.0b}{1999/06/20}{Define three separate environments, defer assignment to \cs{AtBeginDocument} time.}
+\changes{4.0b}{1999/06/20}{Frank Mittelbach, has stated in \protect\classname{multicol}: ``The kernel command \cs{@footnotetext} should not be modified.'' Thus, I have removed David Carlisle's redefinition of that command. Note, however, that later versions of \protect\classname{multicol} do not require this workaround. Belt and suspenders.}%
+\changes{4.0b}{1999/06/20}{Move this ``complex'' option to the front, where it can be overridden by ``simple'' options.}
+\changes{4.0b}{1999/06/20}{New option}
+\changes{4.0b}{1999/06/20}{One-line caption sets flush left.}
+\changes{4.0b}{1999/06/20}{only execute if appropriate}
+\changes{4.0b}{1999/06/20}{Processing delayed to \cs{AtBeginDocument} time}
+\changes{4.0b}{1999/06/20}{Removed invocation of nonexistent class option \protect\classoption{groupauthors} and all other class options that should only be invoked by the document. (Otherwise precedence of class options does not work.)}
+\changes{4.0b}{1999/06/20}{Restore all media size class option of \protect\file{classes.dtx}}
+\changes{4.0b}{1999/06/20}{Stack \cs{preprint} args flush right at right margin.}
+\changes{4.0c}{1999/11/13}{(AO, 115) If three or more preprints specified, set on single line, with commas.}
+\changes{4.0c}{1999/11/13}{(AO, 129) section* within appendix was producing appendixname}
+\changes{4.0c}{1999/11/13}{*-form mandates pagebreak}
+\changes{4.0c}{1999/11/13}{also spelled ``acknowledgements''.}
+\changes{4.0c}{1999/11/13}{Do not put by REVTeX in every page foot}
+\changes{4.0c}{1999/11/13}{grid changes via ltxgrid procedures}
+\changes{4.0c}{1999/11/13}{grid changes with ltxgrid}
+\changes{4.0c}{1999/11/13}{Insert procedure \cs{checkindate}}
+\changes{4.0c}{1999/11/13}{Lose compatability mode.}
+\changes{4.0c}{1999/11/13}{New ltxgrid-based code, other bug fixes}
+\changes{4.0c}{1999/11/13}{New option ``checkin''}
+\changes{4.0c}{1999/11/13}{Prevent an inner footnote from performing twice}
+\changes{4.0d}{2000/04/10}{Also alter how lists get indented.}
+\changes{4.0d}{2000/04/10}{eprint takes an optional argument, syntactical only in this case.}
+\changes{4.0d}{2000/04/10}{New option}
+\changes{4.0d}{2000/05/10}{More features and bug fixes: compatability with longtable and array packages. Now certainly incompatible with multicol.}
+\changes{4.0d}{2000/05/17}{make longtable trigger the head, too}
+\changes{4.0d}{2000/05/18}{But alternative spelling is deprecated.}
+\changes{4.0e}{2000/09/20}{New option showkeys}
+\changes{4.0e}{2000/11/14}{Bug fixes and minor new features: title block affiliations can have ancillary data, just like authors; clearpage processing revamped, with floats staying in order; widetext ornaments.}
+\changes{4.0e}{2000/11/21}{adornments above and below.}
+\changes{4.0f}{2001/02/13}{Last bug fixes before release.}
+\changes{4.0rc1}{2001/06/17}{Running headers always as if two-sided}
+\changes{4.0rc1}{2001/06/18}{grid changes with push and pop}
+\changes{4.0rc1}{2001/06/18}{grid changes with push and pop}
+\changes{4.0rc4}{2001/07/23}{hyperref is no longer loaded via class option: use a usepackage statement instead}
+\changes{4.1a}{2008/01/18}{(AO, 457) Endnotes to be sorted in with numerical citations.}%
+\changes{4.1a}{2008/01/18}{(AO, 451) ``Cannot have more than 256 cites in a document''}%
+\changes{4.1a}{2008/01/18}{(AO, 457) Endnotes to be sorted in with numerical citations.}%
+\changes{4.1a}{2008/01/18}{(AO, 460) ``Proper style is "FIG. 1. ..." (no colon)''}%
+\changes{4.1a}{2008/01/18}{(AO, 478) \cs{ds@letterpaper}, so that ``letterpaper really is the default''}%
+\changes{4.1a}{2008/01/18}{(AO, 488) Change processing of options to allow an unused option to specify society and journal}%
+\changes{4.1a}{2008/01/19}{(AO, 461) Change the csname revtex uses from @dotsep to ltxu@dotsep. The former is understood in mu. (What we wanted was a dimension.)}%
+\changes{4.1a}{2008/01/19}{For natbib versions before 8.21, \cs{NAT@sort} was consulted only as natbib was being read in. Now it is fully dynamic.}
+\changes{4.1b}{2008/05/29}{The csname substyle@ext is now defined without a dot (.), to be compatible with \LaTeX usage (see @clsextension and @pkgextension).}
+\changes{4.1b}{2008/06/01}{(AO) Implement bibnotes through \cs{frontmatter@footnote@produce} instead of \cs{bibnotes@sw}}%
+\changes{4.1b}{2008/06/01}{Add option reprint, opposite of preprint, and preferred alternative to twocolumn}
+\changes{4.1b}{2008/06/29}{(AO, 455) Be nice to a list within the abstract (assign \cs{@totalleftmargin}).}
+\changes{4.1b}{2008/06/30}{(AO) Structure the Abstract using the \texttt{bibliography} environment}
+\changes{4.1b}{2008/07/01}{(AO) coordinate \cs{if@twoside} with \cs{twoside@sw}}
+\changes{4.1b}{2008/07/01}{(AO) make settings at class time instead of deferring them to later.}
+\changes{4.1b}{2008/07/01}{(AO) No longer need to test \cs{chapter} as of \texttt{natbib} version 8.2}
+\changes{4.1b}{2008/07/01}{(AO) No longer use \cs{secnumarabic@sw}, instead use \cs{setup@secnums}}
+\changes{4.1b}{2008/07/01}{(AO) Provide more diagnostics when \cs{@society} is assigned.}
+\changes{4.1b}{2008/07/01}{(AO) provide option longbibliography}
+\changes{4.1b}{2008/07/01}{Add \cs{@hangfroms@section}}
+\changes{4.1b}{2008/07/01}{Break out \cs{@caption@fignum@sep}}
+\changes{4.1b}{2008/07/01}{Class option galley sets \cs{preprintsty@sw} to false}
+\changes{4.1b}{2008/07/01}{Code relating to new syntax for frontmatter has been placed in \file{ltxfront.dtx}}
+\changes{4.1b}{2008/07/01}{Package textcase is now simply a required package}
+\changes{4.1b}{2008/07/01}{Procedures \cs{@parse@class@options@society} and \cs{@parse@class@options@journal} and friends}
+\changes{4.1b}{2008/07/01}{Read in all required packages together}
+\changes{4.1b}{2008/07/01}{Remove options newabstract and oldabstract}
+\changes{4.1b}{2008/08/01}{Section numbering via procedures \cs{secnums@rtx} and \cs{secnums@arabic}.}
+\changes{4.1b}{2008/08/04}{As with author formatting, rag the right more, and assign \cs{@totalleftmargin}. Also neutralize \cs{def@after@address}.}%
+\changes{4.1b}{2008/08/04}{Rag the right even more: .8\cs{hsize}. Also, assign \cs{@totalleftmargin}.}%
+\changes{4.1b}{2008/08/04}{The \texttt{rmp} journal substyle selects \texttt{groupedaddress} by default.}%
+\changes{4.1b}{2008/08/04}{Use \cs{setup@hook} to initialize all.}
+\changes{4.1c}{2008/08/15}{Document class option longbibliography via \cs{substyle@post}}
+\changes{4.1d}{2009/03/27}{Definition of \cs{ @fnsymbol} follows fixltx2e.sty}
+\changes{4.1e}{2008/06/29}{(AO, 455) be nice to a list within the abstract}
+\changes{4.1f}{2009/07/07}{(AO, 513) Add class option linenumbers: number the lines a la \classname{lineno}}
+\changes{4.1f}{2009/07/07}{(AO, 516) Merged references are separated with a semicolon}
+\changes{4.1f}{2009/07/10}{(AO, 520) Automatically produce \cs{bibliography} command when needed}%
+\changes{4.1f}{2009/07/11}{(AO, 521) Lonely bibliography head}%
+\changes{4.1f}{2009/07/11}{(AO, 522) Warn if software is expired}%
+\changes{4.1f}{2009/07/15}{(AO, 523) Add class option nomerge, to turn off new natbib 8.3 syntax}
+\changes{4.1f}{2009/07/20}{(AO, 524) Makes no sense if citations are superscript numbers and so are footnotes}
+\changes{4.1f}{2009/10/05}{(AO, 530) \cs{@fnsymbol}: Failed to import fixltx2e.sty technology. Return to LaTeX core.}
+\changes{4.1g}{2009/10/07}{(AO, 525) Remove phantom paragraph above display math that is given in vertical mode}%
+\changes{4.1g}{2009/10/07}{(AO, 538) \cs{MakeTextUppercase} inappropriately expands the double backslash}
+\changes{4.1h}{2009/10/09}{(AO) Remove expiry code in the release software}%
+\changes{4.1i}{2009/10/23}{(AO, 541) Defer assignment of \cs{cite} until after natbib loads}
+\changes{4.1j}{2009/10/24}{(AO, 549) Repairing natbib's \cs{BibitemShut} and \cs{bibAnnote}}
+\changes{4.1j}{2009/10/25}{(AO, 545) hypertext capabilities off by default; enable with \classoption{hypertext}}
+\changes{4.1j}{2009/10/25}{(AO, 552) Repair spacing in \cs{onlinecite}}
+\changes{4.1k}{2009/11/06}{(AO, 554) give the \cs{newlabel} command syntax appropriate to the hyperref package}
+\changes{4.1n}{2009/11/06}{(AO, 565) restore 4.0 behavior: invoking class option preprint implies class option preprintnumbers}
+\changes{4.1n}{2009/11/30}{(AO, 566) restore 4.0 behavior: flush column bottoms}
+\changes{4.1n}{2009/12/05}{(AO, 569) Use of \classname{hyperref} interferes with column balancing of last page}%
+\changes{4.1n}{2009/12/09}{(AO, 569) execute the after-last-shipout procedures from within the safety of the output routine}%
+\changes{4.1n}{2010/01/02}{(AO, 571) Interface \cs{set@footnotewidth} for determining the set width of footnotes}%
+\changes{4.1n}{2010/01/02}{(AO, 572) Independent footnote counter for title block. Abstract footnote counter shared with body.}%
+\changes{4.1n}{2009/12/13}{(AO, 573) arrange to load \classname{lineno} after any other packages.}%
+\changes{4.1n}{2010/01/04}{(AO, 575) the default for journal prstper is longbibliography}%
+\changes{4.1n}{2010/01/04}{(AO, 576) In .bst files, remove support for the annote field}%
+\changes{4.1n}{2010/01/02}{(AO) fine-tune spacing above and below widetext}%
+\changes{4.1n}{2010/01/02}{(AO, 571) class file must set \cs{splittopskip}; fine tune \cs{skip}\cs{footins}; \cs{footnoterule} defined in terms of \cs{skip}\cs{footins}}%
+\changes{4.1n}{2010/01/02}{(AO, 572) \cs{@makefntext} and \cs{frontmatter@makefntext} must be defined harmoniously}%
+\changes{4.1o}{2010/02/02}{(AO, 575) Automatically incorporate the (Bib\TeX-generated) .bbl into an explicit \env{thebibliography}}%
+\changes{4.1o}{2010/02/05}{(AO, 549) Remove patch to natbib, which is now at version 8.31a}
+\changes{4.1o}{2010/02/07}{(AO, 578) accommodate the possible space character preceding \cs{BibitemShut}.}
+\changes{4.1o}{2010/02/05}{(AO, 579) Endnote shall comprise their own Bib\TeX\ entry type: @FOOTNOTE.}
+\changes{4.1o}{2010/02/10}{(AO, 580) Provide a document class option to turn off production of eprint field in bibliography.}
+\changes{4.1o}{2010/02/12}{(AO, 580) Control .bst at run time.}%
+\changes{4.1o}{2010/02/09}{(AO, 581) Handle case: merged references, with first ending in a stop character.}
+\changes{4.1p}{2010/02/24}{(AO, 583) Provide interface to \classname{ltxgrid} \cs{onecolumn@grid@setup} and \cs{twocolumn@grid@setup}}
+\changes{4.1p}{2010/02/24}{(AO, 584) Per MD, remove trailing space character from each journal abbreviation: it had caused an extraneous space in the .bbl}
+\changes{4.1q}{2010/04/01}{(AO, 586) When .bbl is pasted into the document, prevent automatic bibliography inclusion.}%
+\changes{4.1q}{2010/04/13}{(AO, 588) Only write \revtex-specific BibTeX .bib data if the .bst style is set by REVTeX.}%
+\changes{4.1r}{2010/06/22}{(AO, 595) Provide \cs{lovname} along with other List of Videos definitions.}%
+
+\iffalse ltxdoc klootch
+This file has version number 4.1r, last revised 2010/07/25/20:33:00.\fi
diff --git a/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/DOWNLOAD b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/DOWNLOAD
new file mode 100644
index 0000000000..e0425b621f
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/DOWNLOAD
@@ -0,0 +1,120 @@
+Last updated August 9, 2010
+
+To download REVTeX 4 (version 4.1), download the files listed below, or, more
+conveniently, download revtex4-1.zip which contains all of the files.
+
+All files in this release are contained within a second zip file within the
+main zip file called revtex4-1-tds.zip. This contains all of the REVTeX 4.1
+files in the TeX Directory Structure (TDS) layout used with most current TeX
+distributions. Install REVTeX 4.1 by unzipping the files in the appropriate
+place (usually the texmf-local directory of your local TeX installation) and
+run texhash or the equivalent command to index the files. Please consult your
+TeX distribution's guide for installing new packages.
+
+NOTE: The only files necessary for running REVTeX 4.1 are those under
+tex/latex/revtex and bibtex/bst/revtex, but it is a good idea to install
+the entire distribution, especially the documentation.
+
+TeX inputs: tex/latex/revtex/
+ -----------------
+revtex4-1.cls - The REVTeX 4.1 class file
+aps4-1.rtx - APS-specific customizations for REVTeX 4.1
+aip4-1.rtx - AIP-specific customizations for REVTeX 4.1
+apsrmp4-1.rtx - APS-specific customizations for REVTeX 4.1,
+ specifically for Rev. Mod. Phys.
+aps10pt4-1.rtx - 10-point size class option file for REVTeX.
+aps11pt4-1.rtx - 11-point size class option file for REVTeX.
+aps12pt4-1.rtx - 12-point size class option file for REVTeX.
+revsymb4-1.sty - A collection of common symbols for use outside of REVTeX.
+
+ltxdocext.sty - Part of ltxgrid package used for page layout in REVTeX.
+ltxfront.sty - Part of ltxgrid package used for page layout in REVTeX.
+ltxgrid.sty - Part of ltxgrid package used for page layout in REVTeX.
+ltxutil.sty - Part of ltxgrid package used for page layout in REVTeX.
+
+BibTeX inputs: bibtex/bst/revtex/
+ ------------------
+apsrev4-1.bst - BibTeX styles for use for Phys. Rev. journals
+apsrmp4-1.bst - BibTeX styles for use for Rev. Mod. Phys.
+aipauth4-1.bst - BibTeX styles for AIP journals with author/year style citations
+aipnum4-1.bst - BibTeX styles for AIP journals with numerical style citations
+
+
+Documentation: doc/latex/revtex/
+ -----------------
+README - How to get started
+DOWNLOAD - How to download REVTeX4.1
+
+Author guide: doc/latex/revtex/auguide/
+ ------
+auguide4-1.tex (pdf) - REVTeX 4.1 Author's Guide
+whatsnew4-1.tex (pdf) - What's New in REVTeX 4.1
+summary.tex (pdf) - REVTeX 4.1 Command and Options Summary
+docs.sty - Package used by REVTeX documentation
+
+APS guide: doc/latex/revtex/aps
+ ------
+apsguide4-1.tex (pdf) - APS Author Guide for REVTeX 4.1
+
+AIP guide: doc/latex/revtex/aip
+ ------
+aipguide4-1.tex (pdf) - Author's Guide to AIP Substyles for REVTeX 4.1
+
+APS Sample document: doc/latex/revtex/sample/aps
+ -------
+apssamp.tex (pdf) - A sample file showing most common features of an APS
+ REVTeX 4.1 document
+fig_1.eps - sample figure for apssamp.tex
+fig_2.eps - sample wide figure for apssamp.tex
+vid_1a.eps - sample video frame for apssamp.tex
+vid_1b.eps - sample video frame for apssamp.tex
+apssamp.bib - sample BibTeX source file for apssamp.tex
+apstemplate.tex - A template for APS authors to follow
+
+AIP Sample document: doc/latex/revtex/sample/aip
+ -------
+aipsamp.tex (pdf) - A sample file showing most common features of an AIP
+ REVTeX 4.1 document
+fig_1.eps - sample figure for apssamp.tex
+fig_2.eps - sample wide figure for apssamp.tex
+aipsamp.bib - sample BibTeX source file for apssamp.tex
+aiptemplate.tex - A template for APS authors to follow
+
+
+Programmer's docs: doc/latex/revtex/source/
+ -------
+ltxdocext.pdf - Programmer's documentation for the ltxdocext package
+ltxfront.pdf - Programmer's documentation for the ltxfront package
+ltxgrid.pdf - Programmer's documentation for the ltxgrid package
+ltxutil.pdf - Programmer's documentation for the ltxutil package
+revtex4-1.pdf - Programmer's documentation for the revtex4-1 document class
+aip.pdf - Programmer's documentation for the AIP journal styles
+
+Source files: source/latex/revtex
+ -------------------
+ltxdocext.dtx - The source file for the ltxdocext package
+ltxfront.dtx - The source file for the ltxfront package
+ltxgrid.dtx - The source file for the ltxgrid package
+ltxutil.dtx - The source file for the ltxutil package
+revtex4-1.dtx - The source file for revtex4.cls and revsymb.sty.
+aip.dtx - The source file for AIP journal styles
+
+Not Included
+------------
+The following packages are required by REVTeX but are not
+included in this distribution. Please obtain from CTAN
+(Comprehensive TeX Archive Network), e.g. <http://www.ctan.org/>. Direct
+links to the necessary files can be found at <http://authors.aps.org/revtex4/>.
+
+natbib.dtx - Version 8.31a or later; found in latex/contrib/natbib on CTAN
+natbib.ins - LaTeX this to create natbib.sty and natbib
+ documentation from natbib.dtx
+bm.dtx - Bold math style - part of (current!) standard LaTeX2e tools
+bm.sty - generated from bm.dtx by running tools.ins
+textcase.dtx - Found in latex/contrib/textcase on CTAN
+textcase.ins - LaTeX this to generate textcase.sty from textcase.dtx
+url.sty - Found in latex/contrib/misc on CTAN
+
+An up-to-date installation of AMS-LaTeX is also required for certain
+documentclass options. Version 2.0 or higher is needed. It is
+available from <http://www.ams.org/tex/>.
diff --git a/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/README b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/README
new file mode 100644
index 0000000000..f80a5108f5
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/README
@@ -0,0 +1,212 @@
+%% ****** Start of file README ****** %
+%%
+%% This file is part of the APS files in the REVTeX 4 distribution.
+%% Version 4.1r of REVTeX, August 2010.
+%%
+%% Copyright (c) 1999, 2000, 2001, 2009, 2010 The American Physical Society.
+%%
+
+Last updated 09 August 2010
+
+This file describes the contents of this distribution of REVTeX 4.1.
+The definitive source of information about REVTeX 4 is the APS web
+page http://authors.aps.org/revtex4/.
+
+User queries should be directed to revtex@aps.org.
+
+Manifest
+--------
+
+All files in this release are contained within the compressed archive
+revtex4-1.zip. For installation instructions, see below.
+
+NOTE: The only files necessary for running REVTeX 4.1 are those under
+tex/latex/revtex and bibtex/bst/revtex, but it is a good idea to install
+the entire distribution, especially the documentation.
+
+TeX inputs: tex/latex/revtex/
+ -----------------
+revtex4-1.cls - The REVTeX 4.1 class file
+aps4-1.rtx - APS-specific customizations for REVTeX 4.1
+aip4-1.rtx - AIP-specific customizations for REVTeX 4.1
+apsrmp4-1.rtx - APS-specific customizations for REVTeX 4.1,
+ specifically for Rev. Mod. Phys.
+aps10pt4-1.rtx - 10-point size class option file for REVTeX.
+aps11pt4-1.rtx - 11-point size class option file for REVTeX.
+aps12pt4-1.rtx - 12-point size class option file for REVTeX.
+revsymb4-1.sty - A collection of common symbols for use outside of REVTeX.
+
+ltxdocext.sty - Part of ltxgrid package used for page layout in REVTeX.
+ltxfront.sty - Part of ltxgrid package used for page layout in REVTeX.
+ltxgrid.sty - Part of ltxgrid package used for page layout in REVTeX.
+ltxutil.sty - Part of ltxgrid package used for page layout in REVTeX.
+
+BibTeX inputs: bibtex/bst/revtex/
+ ------------------
+apsrev4-1.bst - BibTeX styles for use for Phys. Rev. journals
+apsrmp4-1.bst - BibTeX styles for use for Rev. Mod. Phys.
+aipauth4-1.bst - BibTeX styles for AIP journals with author/year style citations
+aipnum4-1.bst - BibTeX styles for AIP journals with numerical style citations
+
+
+Documentation: doc/latex/revtex/
+ -----------------
+README - How to get started
+DOWNLOAD - How to download REVTeX4.1
+
+Author guide: doc/latex/revtex/auguide/
+ ------
+auguide4-1.tex (pdf) - REVTeX 4.1 Author's Guide
+whatsnew4-1.tex (pdf) - What's New in REVTeX 4.1
+summary.tex (pdf) - REVTeX 4.1 Command and Options Summary
+docs.sty - Package used by REVTeX documentation
+
+APS guide: doc/latex/revtex/aps
+ ------
+apsguide4-1.tex (pdf) - APS Author Guide for REVTeX 4.1
+
+AIP guide: doc/latex/revtex/aip
+ ------
+aipguide4-1.tex (pdf) - Author's Guide to AIP Substyles for REVTeX 4.1
+
+APS Sample document: doc/latex/revtex/sample/aps
+ -------
+apssamp.tex (pdf) - A sample file showing most common features of an APS
+ REVTeX 4.1 document
+fig_1.eps - sample figure for apssamp.tex
+fig_2.eps - sample wide figure for apssamp.tex
+vid_1a.eps - sample figure for apssamp.tex
+vid_1b.eps - sample figure for apssamp.tex
+apssamp.bib - sample BibTeX source file for apssamp.tex
+apstemplate.tex - A template for APS authors to follow
+
+AIP Sample document: doc/latex/revtex/sample/aip
+ -------
+aipsamp.tex (pdf) - A sample file showing most common features of an AIP
+ REVTeX 4.1 document
+fig_1.eps - sample figure for apssamp.tex
+fig_2.eps - sample wide figure for apssamp.tex
+aipsamp.bib - sample BibTeX source file for apssamp.tex
+aiptemplate.tex - A template for APS authors to follow
+
+
+Programmer's docs: doc/latex/revtex/source/
+ -------
+ltxdocext.pdf - Programmer's documentation for the ltxdocext package
+ltxfront.pdf - Programmer's documentation for the ltxfront package
+ltxgrid.pdf - Programmer's documentation for the ltxgrid package
+ltxutil.pdf - Programmer's documentation for the ltxutil package
+revtex4-1.pdf - Programmer's documentation for the revtex4-1 document class
+aip.pdf - Programmer's documentation for the AIP journal styles
+
+Source files: source/latex/revtex
+ -------------------
+ltxdocext.dtx - The source file for the ltxdocext package
+ltxfront.dtx - The source file for the ltxfront package
+ltxgrid.dtx - The source file for the ltxgrid package
+ltxutil.dtx - The source file for the ltxutil package
+revtex4-1.dtx - The source file for revtex4.cls and revsymb.sty.
+aip.dtx - The source file for AIP journal styles
+
+Not Included
+------------
+The following packages are required by REVTeX but are not
+included in this distribution. Please obtain from CTAN
+(Comprehensive TeX Archive Network), e.g. <http://www.ctan.org/>. Direct
+links to the necessary files can be found at <http://authors.aps.org/revtex4/>.
+
+natbib.dtx - Version 8.31a or later; found in latex/contrib/natbib on CTAN
+natbib.ins - LaTeX this to create natbib.sty and natbib
+ documentation from natbib.dtx
+bm.dtx - Bold math style - part of (current!) standard LaTeX2e tools
+bm.sty - generated from bm.dtx by running tools.ins
+textcase.dtx - Found in latex/contrib/textcase on CTAN
+textcase.ins - LaTeX this to generate textcase.sty from textcase.dtx
+url.sty - Found in latex/contrib/misc on CTAN
+
+An up-to-date installation of AMS-LaTeX is also required for certain
+documentclass options. Version 2.0 or higher is needed. It is
+available from <http://www.ams.org/tex/>.
+
+Recommended styles and packages
+--------------------------
+With REVTeX implemented as a native LaTeX2e document class, users can
+take advantage of many of the well-supported LaTeX2e packages available.
+Here are some that are particularly useful and recommended.
+
+longtable.sty for tables running to multiple pages - part of a
+standard LaTeX2e distribution.
+
+hyperref.sty for hyperlinking - should work well with REVTeX 4.1.
+
+graphics.sty and graphicx.sty for figure inclusion - part of LaTeX2e's
+standard distribution.
+
+Installation
+------------
+You already started the installation process by unzipping revtex4-1.zip.
+As you will have seen, it created a directory revtex4.1 containing
+this file README, the file DOWNLOAD, and the file revtex4-1-tds.zip, which
+contains the bulk of the installation.
+
+To install this software into a TDS-compliant TeX installation, like
+TeX Live, working as root, issue a shell command like
+
+ unzip revtex4-1-tds.zip -d /usr/local/texlive/texmf-local/
+
+where the destination for the unzipped files is, in this example,
+appropriate for a local modificaton of a sufficiently recent distribution
+of TeX Live. You may of course choose a different destination depending
+on your particular requirements.
+
+After installation, files will be located as per the Manifest above.
+
+Run the appropriate update command (mktexlsr, initexmf -u, etc.); under
+TeX Live that would be (as root)
+
+ mktexlsr /usr/local/texlive/texmf-local
+
+Install required packages (AMS-LaTeX, natbib, textcase, and bm).
+Please consult the documentaton for your local TeX package for more information.
+MikTeX users should use a recent version (see http://miktex.org/) and consult
+the documentation there. There are several steps you will have to do. Please
+note that the steps given here may change with future versions of MikTeX, but
+the basic steps should be quite similar.
+ 1) Create a texmf-local directory if needed. For example, you might create
+ a directory such as C:\local\miktex\texmf-local.
+ 2) Tell MikTeX where your texmf-local directory is. Find the MikTeX Options
+ window and look for the "Roots" tab. If your texmf-local directory
+ is not listed, click "Add" and add it.
+ 3) Unzip the revtex4-1-tds.zip (part of the REVTeX distribtution) in your
+ texmf-local directory.
+ 4) Update the "File Name Database (FNDB)." This step is essential and
+ it registers all of the files in your texmf-local directory with MikTeX.
+ Do this by clicking on "Refresh FNDB" in the General tab of the MikTeX
+ Options window.
+
+MikTex also comes with a package manager. This can be an easier way to maintain
+the packages installed on your system. However, please note that the packages
+available may not be the most current version of the packages.
+
+Credits
+-------
+David Carlisle created the first draft of REVTeX 4; Arthur Ogawa has
+supported the TeX development since. Patrick Daly was so kind as to
+incorporate needed changes into natbib and custom-bib. All worked under
+commission from the APS. Mark Doyle, APS Assistant Director, Journal
+Information Systems coordinated the effort, which was partly underwritten
+by the American Institute of Physics. The APS is the maintainer of REVTeX,
+and all bugs are our responsibility. Please e-mail feedback to revtex@aps.org.
+
+Backwards compatibility
+-----------------------
+The REVTeX 4.1 class file has been named revtex4-1.cls to distinguish it
+from its predecessors. If the class file is copied to revtex4.cls,
+files created with earlier versions of REVTeX 4 should still work.
+
+LaTeX2e requirements
+--------------------
+REVTeX 4 requires:
+LaTeX2e [1996/06/01],
+natbib [2009/11/07]
+textcase
diff --git a/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/aip/aipguide4-1.pdf b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/aip/aipguide4-1.pdf
new file mode 100644
index 0000000000..dfa356ad84
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/aip/aipguide4-1.pdf
Binary files differ
diff --git a/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/aip/aipguide4-1.tex b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/aip/aipguide4-1.tex
new file mode 100644
index 0000000000..d4cc34a7a3
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/aip/aipguide4-1.tex
@@ -0,0 +1,428 @@
+%% ****** Start of file auguide.tex ****** %
+%%
+%% This file is part of the AIP distribution of substyles for REVTeX 4.1
+%% For version 4.1r of REVTeX, August 2010
+%%
+%% Copyright (c) 2009,2010 American Institute of Physics
+%%
+\listfiles
+\documentclass[%
+ reprint,%
+%secnumarabic,%
+ amssymb, amsmath,%
+ aip,cha,%
+%groupedaddress,%
+%frontmatterverbose,
+]{revtex4-1}
+
+\usepackage{docs}%
+\usepackage{bm}%
+\usepackage[colorlinks=true,linkcolor=blue]{hyperref}%
+%\nofiles
+\expandafter\ifx\csname package@font\endcsname\relax\else
+ \expandafter\expandafter
+ \expandafter\usepackage
+ \expandafter\expandafter
+ \expandafter{\csname package@font\endcsname}%
+\fi
+\hyphenation{title}
+
+\begin{document}
+
+\title{Author's Guide to AIP Substyles for \revtex~4.1}%
+
+\author{AIP Journal Program}%
+\email{tex@aip.org}
+\affiliation{American Institute of Physics\\Suite 1NO1, 2 Huntington Quadrangle\\Melville, New York 11747-4502, USA}%
+
+\date{March 2010}%
+\revised{August 2010}%
+
+\maketitle
+
+\tableofcontents
+
+\section{Introduction}
+
+This is the author's guide to the AIP substyles for \revtex~4.1,
+providing a useful formatting tool
+for \LaTeX\ users submitting papers to journals
+published by the American Institute of Physics.
+This guide is intended as an adjunct to the documentation for \revtex\ itself
+(published by the American Physical Society),
+so information contained therein is not repeated here,
+except as it bears on the specific features of the AIP substyles.
+
+
+\subsection{Prerequisite Documentation}
+
+The following documentation should be considered your first source of information
+on how to prepare your document for use with this format;
+they are to be found within the APS \revtex~4.1 distribution.
+Updated versions of these are maintained at
+the \revtex~4.1 homepage located at \url{http://authors.aps.org/revtex4/},
+are also available at the Comprehensive \TeX\ Archive Network (CTAN, see \url{http://www.ctan.org/}),
+and form part of the \TeX Live distribution of \TeX.
+\begin{itemize}
+\item \textit{Author's Guide to \revtex~4.1}
+\item \textit{\revtex~4.1 Command and Options Summary}
+\item \textit{What's New in \revtex~4.1}
+\end{itemize}
+The present guide builds upon these documents, with which you should already be familiar.
+
+The AIP substyles distribution for \revtex~4.1 includes
+a sample document (\file{aipsamp.tex}),
+a good starting point for
+the manuscript you are preparing for submission to an AIP journal.
+
+By using \revtex's \textit{Author's Guide to \revtex~4.1}, you can develop your
+document until it contains all of the content you desire.
+This guide informs you on document class options, commands, and
+markup guidelines specific to AIP journals.
+
+\subsection{Software Requirements}
+
+This guide assumes a working \revtex~4.1 installation including the AIP substyles.
+Please see the installation guide included with the distribution.\cite{Note1}
+
+Please note that the AIP substyles work {\it only} with \revtex~4.1:
+the original \revtex~4.0 release does {\it not} make the AIP substyle available, nor is it compatible with them.
+
+For your computer to run \revtex~4.1 with the AIP substyles, the following are required:
+\begin{itemize}
+\item
+a working installation of \LaTeX\,
+\item
+\revtex~4.1 and all packages it requires,
+\item
+the AIP substyles for \revtex~4.1, and
+\item
+any further \LaTeX\ packages used in your document.
+\end{itemize}
+
+The easiest way to obtain all of the needed software is to install an up-to-date distribution of \TeX,
+like \TeX Live, available on CTAN.
+
+To obtain the most up-to-date version of this software, please see \url{http://www.aip.org/pubservs/compuscript.html}.
+
+
+\subsection{Submitting to AIP Journals}
+
+Authors preparing a manuscript for submission to
+AIP journals should consult the Information for Contributors for the applicable journal,
+available through links at \url{http://journals.aip.org/}.
+These requirements are not covered systematically in this author's guide;
+you are responsible for understanding the requirements of the particular journal to which
+you will submit your article.
+
+For further information about journal requirements, contact the Editorial
+Office of the appropriate journal. (Follow links at \url{http://journals.aip.org/}.)
+
+\subsection{Contact Information}\label{sec:resources}%
+Any bugs, problems, or inconsistencies concerning the AIP journal substyles
+should be reported to AIP support at \href{mailto:tex@aip.org}{tex@aip.org}.
+Reports should include information on the error and a
+\textit{small} sample document that manifests the problem, if possible.
+(Please don't send large files!)
+
+Feedback concerning \revtex~4.1 itself should be sent, as usual,
+to the American Physical Society at\\ \href{mailto:revtex@aps.org}{revtex@aps.org}.
+
+To determine if the problem you are experiencing belongs to \revtex\ or is specific to the
+AIP substyles, simply remove \texttt{aip} from your document class options and rerun
+your document. If the problem goes away, you may assume that it is due to the AIP substyles;
+if not, it belongs to \revtex.
+
+\section{Sample \LaTeXe\ Document}
+As the \revtex\ documentation makes clear, your document employs a \LaTeXe\ document class
+(specifically \texttt{revtex4-1.cls}), so you should use
+the \LaTeXe\ commands and environments familiar to you with, say, the
+standard article class \texttt{revtex4-1.cls}, and you will be able to
+employ many of the packages you are used to using with \LaTeXe.
+
+Using \texttt{aipsamp.tex} as an example,
+your document will start with the usual \revtex\ \cmd\documentclass\ statement, but with
+a particular document class option \texttt{aip} that specifies the AIP substyle:
+\begin{verbatim}
+\documentclass[aip]{revtex4-1}
+\end{verbatim}
+You will then invoke the \LaTeXe\-compatible packages your document requires, say:
+\begin{verbatim}
+\usepackage{graphicx}%
+\usepackage{dcolumn}%
+\usepackage{bm}%
+\end{verbatim}
+follow up with your document content:
+\begin{verbatim}
+\begin{document}
+...
+\end{verbatim}
+and finish with a statement specifying your Bib\TeX\ database:
+\begin{verbatim}
+\bibliography{aipsamp}
+\end{document}
+\end{verbatim}
+
+The books
+in the bibliography of this guide provide extensive coverage of all topics
+pertaining to preparing documents under \LaTeXe\; they are highly recommended.
+
+\section{\revtex\ Class Options Specific to AIP}
+
+\subsection{Journal Substyle}
+To access particular features of the AIP substyle, you will specify an additional document class option: the journal substyle, e.g.,
+\begin{verbatim}
+\documentclass[aip,jcp]{revtex4-1}
+\end{verbatim}
+in this case, \textit{J. Chem. Phys.}, the default.
+A complete list of AIP journals with the corresponding journal substyle appears in Table~\ref{tab:journals}.
+\begin{table}
+\caption{\label{tab:journals}AIP journal substyles}
+\begin{ruledtabular}
+\begin{tabular}{ll}
+\textbf{Journal} & \textbf{class option} \\
+\itshape Appl. Phys. Lett. &\texttt{apl}\\
+\itshape Biomicrofluidics &\texttt{bmf}\\
+\itshape Chaos &\texttt{cha}\\
+\itshape J. Appl. Phys. &\texttt{jap}\\
+\itshape J. Chem. Phys. &\texttt{jcp}\footnotemark[1]\\
+\itshape J. Math. Phys. &\texttt{jmp}\\
+\itshape J. Renewable Sustainable Energy&\texttt{rse}\\
+\itshape Phys. Fluids &\texttt{pof}\\
+\itshape Phys. Plasmas &\texttt{pop}\\
+\itshape Rev. Sci. Instrum.&\texttt{rsi}\\
+\end{tabular}
+\end{ruledtabular}
+\footnotetext[1]{Default journal substyle.}
+\end{table}
+
+\subsection{Options for Citations and Bibliography}
+The citation style for AIP journals is:
+\begin{itemize}
+\item
+numerical (default style),
+\item
+author-year, and
+\item
+numerical author-year,
+\end{itemize}
+the latter two styles being only allowed for \textit{Chaos} or \textit{J. Math. Phys.}
+
+The familiar numerical citations and numbered bibliography are the default for most journals:
+citations are superscript numbers, and the (numbered) bibliographic entries appear in the order cited.
+
+Author-year citations are only allowed for
+\textit{Chaos} or \textit{J. Math. Phys.}, with citations given in author-and-year format.
+Bibliographic entries are sorted by alphabetical order of first author's surname, then by year.
+
+Numerical author-year citations
+(only allowed for \textit{Chaos} or \textit{J. Math. Phys.})
+are superscript numbers, just like numerical citations,
+but the bibliographic entries are sorted like the author-year entries and are numbered.
+This means that the first citation will not necessarily be~1.
+
+To obtain the numerical style, simply accept the default, or supply a class option of \texttt{numerical}:
+\begin{verbatim}
+\documentclass[aip,numerical]{revtex4-1}
+\end{verbatim}
+For author-year citations for \textit{Chaos} or \textit{J. Math. Phys.},
+you may specify the \texttt{author-year} option:
+\begin{verbatim}
+\documentclass[aip,author-year]{revtex4-1}
+\end{verbatim}
+Each of the above two options are part of standard \revtex.
+
+To obtain numerical author-year citations
+for \textit{Chaos} or \textit{J. Math. Phys.},
+give the author-numerical option:
+\begin{verbatim}
+\documentclass[aip,author-numerical]{revtex4-1}
+\end{verbatim}
+Note that the \texttt{author-numerical} option is not part of standard \revtex\, so use of it
+outside of the AIP substyles may not have any effect.
+
+\subsection{Formatting Options}
+There are two commonly used formats for an article you may write.
+One will comply with the manuscript submission formatting requirements of the editorial office of the journal you are submitting to.
+The other will emulate the format of your article in the published journal itself.
+
+For journal submission, accept the default, or you may specify the \texttt{preprint} option:
+\begin{verbatim}
+\documentclass[aip,preprint]{revtex4-1}
+\end{verbatim}
+To emulate the formatting of the journal, specify the \texttt{reprint} option:
+\begin{verbatim}
+\documentclass[aip,reprint]{revtex4-1}
+\end{verbatim}
+Note that emulation is not by any means complete: the fonts used will differ, and therefore
+the length of the article will not represent an accurate estimate.
+Other details may also differ.
+
+A summary of class options of interest to AIP authors appears in Table~\ref{tab:options}.
+\begin{table}
+\caption{\label{tab:options}Other class options}
+\begin{ruledtabular}
+\begin{tabular}{ll}
+\textbf{Function} & \textbf{class option} \\
+\multicolumn{2}{l}{\textit{Citation and References}}\\
+superscript numbered&\texttt{numerical}\footnotemark[1]\textsuperscript{,}\footnotemark[2]\\
+author-year&\texttt{author-year}\footnotemark[3]\\
+numbered author-year&\texttt{author-numerical}\footnotemark[3]\\
+%
+\multicolumn{2}{l}{\textit{Format}}\\
+journal submission&\texttt{preprint}\footnotemark[1]\\
+journal emulation&\texttt{reprint}\\
+\end{tabular}
+\end{ruledtabular}
+\footnotetext[1]{Default option.}%
+\footnotetext[2]{Standard}%
+\footnotetext[3]{Only allowed for \textit{Chaos} or \textit{J. Math. Phys.}}%
+\end{table}
+
+\section{Useful \LaTeXe\ Markup}
+\LaTeXe\ markup is the preferred way to structure your file.
+In general, the use of low-level commands like \TeX\ primitives or Plain \TeX\ macros
+is less preferable.
+Please see the \revtex\ User's Guide,\cite{Note2}
+the \LaTeX\ manual,\cite{LaTeXman}
+and the \LaTeXe\ book\cite{Compan}
+for further details.
+
+\subsection{Title and Front Matter}\label{sec:front}
+
+The \revtex\ User's Guide has complete information on using \revtex's special markup for your
+article's title, author list, abstract, and other front matter elements.
+Note that class option \texttt{superscriptaddress} is the default for the AIP substyles,
+as required by all AIP journals.
+
+\subsection{Lead Paragraph}
+One AIP journal, \textit{Chaos}, requires a paragraph of text to precede the first
+\cmd\section\ of the article;
+this is known as a lead paragraph and is formatted boldface.
+To give your article a lead paragraph,
+include a quotation environment ahead of the first \cmd\section\ command:
+\begin{verbatim}
+\documentclass[aip]{revtex4-1}
+\begin{document}
+ \begin{quotation}
+ Here is my lead paragraph!
+ \end{quotation}
+ \section{Introduction}
+...
+\end{verbatim}
+
+The \texttt{quotation} environment functions normally after the first \cmd\section\ command in the document.
+
+\section{Body}
+
+For general information on commands used in the body of the document, see the \revtex\ User's Guide.
+Herein are some features specific to the AIP author.
+
+\subsection{Footnotes}
+
+If you are using numbered citations (numerical or numbered author-year),
+footnotes are by default incorporated into the reference section
+along with your bibliographic entries.
+This automated feature is only effective if you use Bib\TeX\ to prepare your
+bibliography.
+
+Author-year style bibliography does not lend itself to such a treatment,
+so by default footnotes appear in text as is usual.
+However, be advised that, if your article is accepted for publication,
+footnotes may be incorporated into text during the production process.
+
+\section{Citations and References}\label{sec:endnotes}
+
+The preparation of your bibliography ``by hand'' is possible;
+however, if you do so,
+you will be entirely responsible
+for compliance with submission requirements for your bibliographic entries,
+for incorporating any text footnotes into the references,
+and for checking bibliographic entries.
+(In this connection, you may find useful the file \texttt{reftest.tex}, distributed with \revtex.)
+
+There are numerous reasons to use Bib\TeX, not least because it automates the first and second of the above checks.
+
+\subsection{\label{sec:use-bib}Using Bib\protect\TeX}
+
+Refer to the \revtex\ User's Guide, the \LaTeX\ manual, and the Bib\TeX\ manual
+for full information about using Bib\TeX.
+
+When using Bib\TeX\, keep in mind that changing your bibliography style or citation style
+(via the document class options described above) will require you to rerun Bib\TeX.
+The standard litany (using \texttt{aipsamp.tex} as an example) for this is:
+\begin{verbatim}
+> latex aipsamp
+> bibtex aipsamp
+> latex aipsamp
+> latex aipsamp
+\end{verbatim}
+Here, the first invocation of \texttt{latex} has the effect of rewriting the
+\texttt{aipsamp.aux} file,
+and the invocation of \texttt{bibtex} creates a new \texttt{aipsamp.bbl} file.
+The next two runs of \texttt{latex} are then required:
+the first to update the \texttt{aipsamp.aux} file reflecting the new values of your citations
+and the second to employ those citations correctly.
+Be sure to check the end of the \texttt{aipsamp.log} file for any message advising you to
+rerun \texttt{latex}.
+
+\subsection{Multiple References per Citation}
+In an article using numerical citations,
+it is not uncommon to encounter the need for a citation
+that refers to more than one article or other reference.
+To accommodate such a case, \revtex~4.1 implements markup similar to that of the
+\texttt{mcite} package for \LaTeXe.
+
+Let's say that two citation keys \texttt{able} and \texttt{baker}
+need to be combined into a single reference.
+The syntax for the \cmd\cite\ command is:
+\begin{verbatim}
+word\cite{able,*baker} further text
+\end{verbatim}
+When you run Bib\TeX\, the resulting bibliography will contain the two entries, but run together
+as a single numbered reference.
+In the \cmd\cite\ command argument, any cite key that starts with the * character
+signifies that its bibliographic entry is to be joined together with the one preceding it;
+the \texttt{*} may join together any number of entries into a single reference.
+
+\begin{thebibliography}{9}\label{sec:TeXbooks}%
+\bibitem{Note1}
+For help regarding the installation of this software and its use, please send email to \href{mailto:tex@aip.org}{tex@aip.org}.
+%
+\bibitem{Note2}
+Available with the \revtex\ distribution, see \url{http://authors.aps.org/revtex4/}.
+%
+\bibitem[Lamport(1996)]{LaTeXman}
+L. Lamport,
+\emph{\LaTeX\, a Document Preparation System}
+(Addison-Wesley, Reading, MA, 1996).
+%
+\bibitem[Goossens(1994)]{Compan}
+M. Goosens, F. Mittelbach, and A. Samarin,
+\emph{The \LaTeX\ Companion}
+(Addison-Wesley, Reading, MA, 1994).
+%
+\bibitem[Knuth(1986)]{TeXbook}
+D. E. Knuth,
+\emph{The \TeX book}
+(Addison-Wesley, Reading, MA, 1986).
+%
+\bibitem[Kopka(1995)]{Guide}
+H. Kopka and P. Daly,
+\emph{A Guide to \LaTeXe}
+(Addison-Wesley, Reading, MA, 1995).
+%
+\bibitem[Goossens(1997)]{CompanG}
+M. Goossens, S. Rahtz, and F. Mittelbach,
+\emph{The \LaTeX\ Graphics Companion}
+(Addison-Wesley, Reading, MA, 1997).
+%
+\bibitem[Rahtz(1999)]{CompanW}
+S. Rahtz, M. Goossens \emph{et al.},
+\emph{The \LaTeX\ Web Companion}
+(Addison-Wesley, Reading, MA, 1999).
+%
+\end{thebibliography}
+
+\end{document}
+
diff --git a/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/aip/docs.sty b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/aip/docs.sty
new file mode 100644
index 0000000000..f401506cb6
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/aip/docs.sty
@@ -0,0 +1,129 @@
+% authguide.rty - macros for processing revguide.tex under \documentclass{revtex4}
+% Text entities
+\DeclareRobustCommand\SNG{\emph{Physical Review Style and Notation Guide}}
+\DeclareRobustCommand\LUG{\emph{\LaTeX{} User's Guide \& Reference Manual}}
+\DeclareRobustCommand\revtex{REV\TeX}
+\DeclareRobustCommand\marglat{\marginpar[\textbf{2e}]{\textbf{2e}}}
+\DeclareRobustCommand\margrev{\marginpar[\textbf{4}]{\textbf{4}}}
+\DeclareRobustCommand\AmS{%
+ {\protect\the\textfont\tw@ A\kern-.1667em\lower.5ex\hbox{M}\kern-.125emS}%
+}%
+\DeclareRobustCommand\AmSLaTeX{\AmS-\LaTeX}
+\DeclareRobustCommand\BibTeX{{\rm B}{\sc ib}\TeX}
+%
+% Various forms of self-indexing commands:
+% \begin{macrocode}
+\DeclareRobustCommand{\m}[1]{%
+ \meta{#1}%
+ \index{#1=\string\meta{#1} placeholder}\index{placeholder>#1=\string\meta{#1}}%
+}%
+\DeclareRobustCommand\meta[1]{%
+ \mbox{\m@th\LANGLE\itshape#1\/\RANGLE}%
+}%
+\def\LANGLE{$\langle$}%
+\def\RANGLE{$\rangle$}%
+\DeclareRobustCommand{\marg}[1]{%
+ {\ttfamily\string{}\meta{#1}{\ttfamily\string}}%
+ \index{#1=\string\ttt{#1}, argument}\index{argument>#1=\string\ttt{#1}}%
+}%
+\DeclareRobustCommand{\aarg}[1]{%
+ {\ttfamily\string{}#1{\ttfamily\string}}%
+}%
+\let\oarg\undefined
+\DeclareRobustCommand{\oarg}[1]{%
+ {\ttfamily[%]
+ }\meta{#1}{\ttfamily%[
+ ]}%
+ \index{#1=\string\ttt{#1}, optional argument}%
+ \index{argument, optional>#1=\string\ttt{#1}}%
+}%
+\DeclareRobustCommand\cmd{\begingroup\makeatletter\@cmd}%
+\long\def\@cmd#1{%
+ \endgroup
+ \cs{\expandafter\cmd@to@cs\string#1}%
+ \expandafter\cmd@to@index\string#1\@nil
+}%
+\def\cmd@to@cs#1#2{\char\number`#2\relax}%
+\def\cmd@to@index#1#2\@nil{%
+ \index{#2=\string\cmd#1#2}%\index{command>#2=\string\cmd#1#2}%
+}%
+\DeclareRobustCommand\cs[1]{{\ttfamily\char`\\#1}}%
+\def\scmd#1{%
+ \cs{\expandafter\cmd@to@cs\string#1}%
+ \expandafter\scmd@to@index\string#1\@nil
+}%
+\def\scmd@to@index#1#2\@nil#3{%
+ \index{\string$#3=\string\cmd#1#2---#3}%
+%\index{command>\string$#3=\string\cmd#1#2---#3}%
+}%
+\DeclareRobustCommand\env{\name@idx{environment}}%
+\DeclareRobustCommand\envb[1]{%
+ {\ttfamily\string\begin\string{}\env{#1}{\ttfamily\string}}%
+}%
+\DeclareRobustCommand\enve[1]{{\ttfamily\string\end\string{}\env{#1}{\ttfamily\string}}}%
+\DeclareRobustCommand*{\file}[1]{%
+ {\ttfamily#1}%
+ \index{#1=\string\ttt{#1}}\index{file>#1=\string\ttt{#1}}%
+}%
+\DeclareRobustCommand\substyle{\name@idx{document substyle}}%
+\DeclareRobustCommand\classoption{\name@idx{document class option}}%
+\DeclareRobustCommand\classname{\name@idx{document class}}%
+\def\name@idx#1#2{%
+ {\ttfamily#2}%
+ \index{#2\space#1=\string\ttt{#2}\space#1}\index{#1>#2=\string\ttt{#2}}%
+}%
+%
+% Needed for index:
+%
+\def\ttt{\texttt}%
+\def\pfill{\ }%
+\def\efill{\ }%
+\let\scan@allowedfalse\relax
+%\makeindex
+\AtEndDocument{\@input@{\jobname.ind}\null}%
+%
+% Processing options
+%
+%
+% Layout: override revtex4|aps
+\c@secnumdepth2
+\prepdef\@verbatim{\topsep.5\baselineskip}%
+\renewenvironment{quotation}{%
+ \list{}{%
+ \listparindent 10\p@
+ \itemindent\listparindent
+ \leftmargin10\p@
+ \rightmargin\leftmargin
+ \parsep \z@ \@plus\p@
+ \small
+ }%
+ \item[]%
+}{%
+ \endlist
+}%
+\renewenvironment{quote}{%
+ \list{}{%
+ \leftmargin\z@
+ \rightmargin\leftmargin
+ }\item[]%
+}{%
+ \endlist
+}%
+\leftmargini\parindent
+\def\descriptionlabel#1{%
+ \hspace\labelsep\ignorespaces
+ #1\unskip
+}%
+\def\toprule{\hline\hline\frstrut}%
+\def\colrule{\hline\frstrut}%
+\def\frstrut{\vrule height2.5ex width\z@ depth\z@\relax}%
+\def\lrstrut{\vrule height\z@ width\z@ depth.5ex\relax}%
+%
+% Klootches
+%
+\let\savenofiles\nofiles
+%
+% Patches:
+%
+%
+\endinput
diff --git a/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/aps/apsguide4-1.pdf b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/aps/apsguide4-1.pdf
new file mode 100644
index 0000000000..48b76d005d
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/aps/apsguide4-1.pdf
Binary files differ
diff --git a/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/aps/apsguide4-1.tex b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/aps/apsguide4-1.tex
new file mode 100644
index 0000000000..268e0badec
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/aps/apsguide4-1.tex
@@ -0,0 +1,429 @@
+%% ****** Start of file apsguide4-1.tex ****** %
+%%
+%% This file is part of the APS files in the REVTeX 4.1 distribution.
+%% Version 4.1r of REVTeX, August 2010.
+%%
+%% Copyright (c) 2009, 2010 The American Physical Society.
+%%
+%% See the REVTeX 4.1 README file for restrictions and more information.
+%%
+\documentclass[twocolumn,secnumarabic,amssymb, nobibnotes, aps, prd]{revtex4-1}
+%\usepackage{acrofont}%NOTE: Comment out this line for the release version!
+\newcommand{\revtex}{REV\TeX\ }
+\newcommand{\classoption}[1]{\texttt{#1}}
+\newcommand{\macro}[1]{\texttt{\textbackslash#1}}
+\newcommand{\m}[1]{\macro{#1}}
+\newcommand{\env}[1]{\texttt{#1}}
+\setlength{\textheight}{9.5in}
+
+\begin{document}
+
+\title{APS Author Guide for \revtex~4.1\\(Version 1.0)}%
+
+\author{The American Physical Society}%
+\email[REVTeX Support: ]{revtex@aps.org}
+\affiliation{1 Research Road, Ridge, NY 11961}
+\date{August 10, 2010}%
+\maketitle
+\tableofcontents
+
+\section{Introduction}
+Articles published in American Physical Society journals are converted to
+an XML file during final journal production. Other formats such
+as PDF are derived directly from the XML, which constitutes the version of record.
+Even before journal production, the APS editorial process can make use
+of the information in a properly prepared manuscript. Information such
+as title, authors, affiliations, PACS codes, etc., can be automatically
+extracted and used to populate our manuscript database. References can
+also be culled, cross-checked for accuracy, and used to create a
+linked version for referees and editors. Moreover, time can be saved
+as referrals can be made electronically rather than by conventional
+mail. Thus, a well-prepared electronic manuscript can enhance the
+entire peer review process from author to reader while making the
+whole process less expensive. To this end, authors should follow the
+guidelines in this document when preparing their submissions to \textit{Physical Review Letters},
+ \textit{Reviews of Modern Physics}, \textit{Physical Review A-E}, \textit{Physical Review Special Topics - Accelerators and Beams}, and \textit{Physical Review Special Topics - Physics Education Research}.
+
+Updated versions of this document will be made available at \url{http://authors.aps.org/revtex4/}. For more complete
+descriptions of how to use the \revtex\ 4.1 macros, please see the
+\textit{\revtex~4.1 Author's Guide} included with the \revtex~4.1
+distribution. Questions about \revtex\ 4.1 and using it to submit to APS journals may be
+emailed to \texttt{revtex@aps.org}.
+
+\section{Formatting}
+\subsection{Preprint, reprint, and twocolumn options}
+\revtex~4.1 offers a new \classoption{reprint} class option to typeset a manuscript
+in a format that is a close approximation to the actual journal's appearance. It should
+be emphasized that this is only an \textit{approximation}; a manuscript may be substantially different
+in length or appearance after it goes through our production process. This is mostly due to the choice
+of fonts and the scaling of figures.
+
+\revtex\ 4.1 is designed to
+make it straightforward to switch between two-column and single-column
+formatting just by changing the class option. Authors may submit with
+either the \classoption{reprint} or the \classoption{twocolumn} class options.
+The \classoption{preprint} primarily does three things: It increases
+the font size to 12pt, increases the line spacing, and changes the
+formatting to single column.
+
+\subsection{Paper size}
+Manuscripts should be submitted to APS formatted for letter size
+paper. Papers are sent electronically to referees who may
+want to print them out. Letter size formatting ensures that this will
+be trouble free for all referees.
+
+\section{Marking up front matter}
+Perhaps the most important macros are those
+pertaining to the markup of the front matter (title, authors,
+affiliations, abstract, PACS codes, etc.). Note that proper
+use of the \revtex\ 4.1 macros means that explicit centering environments
+in the front matter are not needed and should not be used.
+
+\subsection{Title}
+The title of the manuscript should be specified using the \m{title} macro. A
+double backslash {\textbackslash\textbackslash} may be used to force a line break in a long
+title.
+
+\subsection{Authors, affiliations, and collaborations}
+\label{sec:authors}
+\revtex\ 4.1 makes it straightforward to markup up author names and link them up properly with affiliations. Authors should let \revtex\ 4.1 do the work of grouping authors and affiliations and, if using the superscript style, numbering affiliations. Please follow these guidelines:
+\begin{itemize}
+\item Use a single \m{author} macro for each author's name. \revtex\ 4.1 automatically puts in all commas and the word `and.'
+\item Use the \m{surname} macro to explicitly indicate if an author's family name consists of more than one name or if the family name is not the author's last name.
+\item The \m{email} macro may be used to specify an author's e-mail
+address. The \m{thanks} macro must not be used for this. Only the
+e-mail address itself may appear in the macro's required argument.
+\item The \m{homepage} macro may be used to specify a URL associated
+with an author. The \m{thanks} macro must not be used for this. Only the
+URL may appear in the macro's required argument.
+\item The \m{altaffiliation} macro may be used to specify an alternate
+affiliation or temporary address for an author. The \m{thanks} macro
+must not be used for this. Only the affiliation
+may appear in the macro's required argument.
+\item The \m{thanks} macro may be used only if one of the more
+specific macros list above does not apply.
+\item Use a single \m{affiliation} for each affiliation.
+\item Superscripts linking authors to affiliations must be
+accomplished using the \classoption{superscriptaddress} class option
+rather than putting in explicit superscripts by hand.
+\item A collaboration may be specified by using the \m{collaboration}
+macro. The \m{author} macro must not be used for collaborations.
+\end{itemize}
+\subsection{Abstract}
+The abstract must be specified using the \env{abstract}
+environment. Note that in \revtex\ 4.1, the abstract must come before
+the \m{maketitle} command. \revtex\ 4.1 now allows the the use of the \env{description}
+environment within the abstract to provide \textit{structured abstracts}. For instance, \textit{Physical Review C} would like authors to provide abstracts with sections summarizing the paper's \textbf{Background}, \textbf{Purpose}, \textbf{Method}, \textbf{Results}, and \textbf{Conclusions}. This can be accomplished in the following manner:
+\begin{verbatim}
+\begin{abstract}
+\begin{description}
+\item[Background] This part would describe the
+context needed to understand what the paper
+is about.
+\item[Purpose] This part would state the purpose
+of the present paper.
+\item[Method] This part describe the methods
+used in the paper.
+\item[Results] This part would summarize the
+results.
+\item[Conclusions] This part would state the
+conclusions of the paper.
+\end{description}
+\end{abstract}
+\end{verbatim}
+
+
+\subsection{PACS codes}
+If supplying suggested PACS codes, they must be supplied as a
+comma-separated list using a single \m{pacs} macro.
+
+\section{References and footnotes}
+Authors are strongly encouraged
+to use Bib\TeX\ when preparing their bibliographies. If Bib\TeX\ is used, current production processes
+require that the \texttt{.bbl} file be included directly into the
+manuscript's main \texttt{.tex} file. \revtex\ 4.1 comes with two Bib\TeX\ style files for formatting
+references, one for the \textit{Physical Review} journals and one
+for \textit{Review of Modern Physics}. The Bib\TeX\ styles support the optional display of journal article titles in the bibliography. To display the titles, use the \texttt{longbibliography} class option.
+
+The following apply whether
+Bib\TeX\ is used or not.
+\begin{itemize}
+\item Authors should use the \m{cite} and \m{bibitem} commands to create
+bibliographies and to refer to items in the bibliography. ``By hand"
+numbering of references should be avoided.
+\item \revtex~4.1 provides new syntax for combining multiple citations into a single entry in the bibliography and for putting extra text before and after a reference. Please refer to \textit{\revtex~4.1 Author's Guide} included with the \revtex~4.1 distribution for full details.
+\item Footnotes must be specified using the \m{footnote}
+macro. \revtex\ 4.1 will place the footnotes in
+the bibliography for the \textit{Physical Review}
+journals. Please note that even if you don't use Bib\TeX, you may have to run Bib\TeX\ to get the footnotes to appear. Footnotes giving additional information about authors (such
+as e-mail addresses) must not be specified using the \m{footnote}
+macro (see Section~\ref{sec:authors}).
+\item Avoid custom footnotes using \m{footnotemark} and \m{footnotetext} [except in the context of tables (see
+Section~\ref{sec:tablenotes})].
+\item References should be formatted and specified according to the
+\textit{Physical Review Style Guide}. Note that using Bib\TeX\ automatically ensures this.
+\item In journal styles that use superscript citations (\textit{e.g.}, Phys.~Rev.~B), use \m{onlinecite} to create references that appear on the baseline (\textit{i.e.}, Ref.~4). For superscript citations, use the proper journal class option rather than creating superscripts by hand.
+\item URLs should be specified using the \m{url} macro. Bib\TeX\ will automatically take
+care of this if the \texttt{url} field is used.
+\item E-print identifiers should be included using the \m{eprint} macro. Bib\TeX\ will automatically take care of this if the \texttt{eprint} field is used.
+\end{itemize}
+
+\section{Body of the paper}
+\subsection{Sectioning and cross-referencing}
+For sectioning a manuscript, the basic rule is to use the appropriate
+sectioning commands (\m{section}, \m{subsection}, \m{subsubsection},
+\textit{etc.}). Cross-referencing a section must be done by using the
+proper \m{label} and \m{ref} commands. Cross-referencing by hand is
+not allowed. \m{part}, \m{chapter}, and \m{subparagraph} should not be
+used.
+
+\subsection{Appendices}
+Appendices should be specified using the \m{appendix} command which
+specifies that all following sections create with the \m{section}
+commands are appendices. If there is only one appendix, then the
+\m{appendix*} command should be used instead.
+
+\subsection{Acknowledgments}
+Any acknowledgments should be included by using the
+\env{acknowledgments} environment. Note that in \revtex~4.1, this is
+an environment and not a command.
+
+\subsection{Counters}
+No counters may be created and the standard ones may not be
+altered. If an exceptional label is needed for an equation, the \m{tag}
+command (requires the \classoption{amsmath} class option) should be used. Please
+note that the use of the \m{tag} command may conflict with the use of the \classoption{hyperref} package
+due an incompatibility between \classoption{amsmath} and \classoption{hyperref}.
+
+\subsection{Fonts}
+It is preferable to avoid the older \TeX\ and \LaTeX\ 2.09 macros for
+controlling fonts such as \m{rm}, \m{it}, \textit{etc.} Rather, it is
+better to use the macros introduced in \LaTeXe. If the older font
+commands are used (they really should be avoided!), be sure to use
+curly braces to properly limit the extent of the font
+change. \verb+{\bf ...}+ is the correct method.
+Commands for controlling text and math font changes are summarized in
+Table~\ref{tab:fonts}.
+
+\begin{table}
+\caption{\label{tab:fonts}\LaTeXe\ and AMS-\LaTeX\ font summary.}
+\begin{ruledtabular}
+\begin{tabular}{lp{2in}}
+\m{textit} & Italics. Replaces \m{it}\\
+\m{textbf} & Bold face. Replaces \m{bf}\\
+\m{textrm} & Roman. Replaces \m{rm}\\
+\m{textsl} & Slanted. Replaces \m{sl}\\
+\m{textsc} & Small caps. Replaces \m{sc}\\
+\m{textsf} & Sans serif. Replaces \m{sf}\\
+\m{texttt} & Typewriter. Replaces \m{tt}\\
+\m{textmd} & Medium series\\
+\m{textnormal} & Normal\\
+\m{textup} & Upright\\
+\m{mathbf} & Bold face\\
+\m{mathcal} & Replaces \m{cal}\\
+\m{mathit} & Italics\\
+\m{mathnormal} & Replaces \m{mit}\\
+\m{mathsf} & Sans serif\\
+\m{mathtt} & Typewriter\\
+\m{mathfrak} & Fraktur: Requires \classoption{amsfonts} or \classoption{amssymb} class option\\
+\m{mathbb} & Bold blackboard: Requires \classoption{amsfonts} or \classoption{amssymb} class option\\
+\m{bm} & Bold Greek and other math symbols: Requires
+\verb+\usepackage{bm}+ and may require the \classoption{amsfonts} class
+option
+\end{tabular}
+\end{ruledtabular}
+\end{table}
+
+Bold Greek letters and other bold math symbols should be accomplished
+with the use of \texttt{bm.sty} which is distributed as a required
+tool with the latest versions of \LaTeXe\ and should be loaded via
+\verb+\usepackage{bm}+. This package introduces the \m{bm}
+macro. Some bold characters may require using the
+\classoption{amsfonts} class option.
+
+New fonts may not be declared with \m{newfont}. Font attribute
+commands for selecting a font family, shape, and series are all
+disallowed; the standard \LaTeXe\ font selection macros list above
+should be used instead.
+
+Finally, the \m{symbol} macro is also not allowed.
+
+\subsection{Environments}
+\subsubsection{Lists}
+The standard list environments \texttt{itemize}, \texttt{enumerate},
+and \texttt{description} are allowed. The \m{item} macro with or without
+the optional argument is also allowed. Customization of the list environments
+(with macros such as \m{labelstyle}, \m{labelitemi}, \m{labelenumi},
+\m{itemsep}, etc.) is allowed but may be ignored in production.
+Generalized lists (\m{begin\{list\}}) and trivial lists
+(\m{begin\{trivlist\}}) are not allowed.
+
+\subsubsection{Other Environments}
+Creating generalized new environments with \m{newenvironment} is not
+allowed. Creating a new theorem environment with \m{newtheorem} is
+allowed though.
+
+The tabbing environment and the macros \m{=}, \m{$>$}, \m{`}, and
+\m{'} are allowed but may be ignored in production. Conversion
+programs used in production should recognize the escapes \m{a=},
+\m{a'}, and \m{a`} for using the corresponding accents within a
+tabbing environment though.
+
+The \env{verbatim} environment is allowed.
+
+\subsection{Boxes}
+Most boxes and macros to manipulate them are not allowed. These
+include \m{raisebox}, \m{parbox}, \m{minipage}, \m{rulebox},
+\m{framebox}, \m{mbox}, \m{fbox}, \m{savebox}, \m{newsavebox},
+\m{sbox}, \m{usebox}, and the environment \m{begin\{lrbox\}}. Rules
+produced with \m{rule} are not allowed.
+
+\subsubsection{Margin Notes}
+Margin notes created with \m{marginpar} are not allowed, as are the
+associated style parameters \m{marginparwidth}, \m{marginparsep}, and
+\m{marginparpush}.
+
+
+\section{Math Markup}
+In general, all math markup and the standard math environments from
+\LaTeXe\ are allowed. These include \m{begin\{math\}},
+\m{begin\{displaymath\}}, \m{begin\{equation\}},
+\m{begin\{eqnarray\}}, and \m{begin\{eqnarray*\}}. The shortcuts \$,
+\$\$, \m{[}, and \m{]} are allowed. In addition, authors may use
+almost all of the additional markup introduced by AMS-\LaTeX\ by using
+the \classoption{amsmath} class option. The explicit exceptions are
+\m{genfrac}, \m{boxed}, and \m{smash}. The markup contained in
+\texttt{amsextra} and \texttt{amsthm} may not be used
+though. Commutative diagrams created with the \texttt{amscd} package
+are acceptable.
+
+\section{Figures}
+\subsection{Figure inclusions}
+Figures should be included into a \revtex~4.1 manuscript by using the
+standard \LaTeXe\ macros. \LaTeXe\ includes
+several powerful packages for including the files in various
+formats. The two main packages are \texttt{graphics} and
+\texttt{graphicx}. Both offer a macro called
+\m{includegraphics};
+they mainly differ in how arguments for
+controlling figure placement (\textit{e.g.}, scaling and rotation)
+are passed to the \m{includegraphics}.
+
+The \env{figure} environment should be used to add a caption to the
+figure and to allow \LaTeX\ to number and place the figures where they
+fit best. If a figure needs to be referred to in the text,
+rather than manually numbering the figures a \m{label} should be added
+to the figure environment (best practice is to put the label within
+the argument of the \m{caption} command) and the \m{ref} macro should be used to
+reference this label. Figures that span the page should use the
+\m{figure*} environment. The \env{picture} environment must not be
+used directly (one can include an Encapsulated PostScript figure that
+was produced using the \env{picture} environment of course).
+
+\subsection{\label{sec:figplace}Figure placement}
+Figures should be placed as close as possible to the point where they are first
+referenced. There is no need to place all figures
+separately at the end of the manuscript and it is preferred that
+authors leave the figures in their natural locations. Authors may
+also find useful the \revtex~4.1 \classoption{floatfix} class option
+which adds emergency float placement processing to avoid ``stuck''
+floats which would otherwise be deferred to the end of the job (and
+can lead to the fatal \texttt{``Too many unprocessed floats''}
+message).
+
+
+\section{Tables}
+\label{sec:tables}
+The standard \LaTeXe\ table formatting environments are supported as is
+the use of the \texttt{longtable} package. Tables may be reformatted
+during production to meet APS style guidelines.
+Here are some helpful hints for trying to get tables formatted correctly:
+\begin{itemize}
+\item Use the \texttt{longtable} package to get tables to break
+across pages.
+\item The macro \m{squeezetable} will reduce the font size of the
+table. This macro must occur within a group outside the table
+environment. The proper markup is:
+\begin{verbatim}
+\begingroup
+\squeezetable
+\begin{table}
+...
+\end{table}
+\endgroup
+\end{verbatim}
+\item Try using the float placement option \texttt{H} which will
+enable \LaTeX\ to break a float across pages. Long tables are more
+attractively set with \env{longtable} however.
+\begin{verbatim}
+\begin{table}[H]
+\begin{ruledtabular}
+\begin{tabular}
+...
+\end{tabular}
+\end{ruledtabular}
+\end{table}
+\end{verbatim}
+\end{itemize}
+
+\subsection{Doubled rules and table formatting}
+\revtex\ 4.1 provides the \env{ruledtabular} environment which
+automatically puts the scotch rules (double lines) around tables and
+formats all enclosed \env{tabular} environments to the full width of
+the tables and improves inter-column spacing. This environment should
+be used whenever possible.
+
+\subsection{Wide tables}
+When typesetting using \classoption{twocolumn}, tables can either span
+a single column or both columns. Using the '\verb+*+'-ed version of
+the \env{table} or \env{longtable} environments produces wide tables
+that span the columns.
+
+Tables that are very wide and that may be better typeset in a
+landscape orientation (rotated 90 degrees) should be enclosed in a
+\env{turnpage} environment. This will place the rotated table on its own
+page. Note that some dvi previewers may not be able to show the table
+properly, but \texttt{dvips} and \texttt{pdflatex} work correctly.
+
+\subsection{Table placement}
+Tables should be placed as close as possible to the point where they
+are first referenced. There is no need to place all tables separately
+at the end of the manuscript and this is not desirable for APS
+purposes. The class option \classoption{floatfix} may be helpful for
+table placement as well as figure placement (see Section~\ref{sec:figplace}).
+
+\subsection{Aligning columns on a decimal point}
+The standard \LaTeXe\ macro package \classoption{dcolumn} should be
+used to accomplish this.
+
+\subsection{Tablenotes}
+\label{sec:tablenotes}
+Footnotes in tables (tablenotes) should use the \m{footnote}
+macro. However, if more than one reference to the same footnote is
+needed, authors may use \m{footnotetext} and \m{footnotemark}. This
+will produce notes (labeled by lower-case roman letters) inserted
+below the table rather than in the reference section or at the bottom
+of the page.
+
+
+\section{Author-defined macros}
+Authors may define convenience macros to save keystrokes. This means
+that the macros may not invoke \TeX\ macros such as \m{if} or other
+context dependent commands. Also, \LaTeXe\ provides three macros for
+declaring new commands: \m{providecommand}, \m{newcommand}, and
+\m{renewcommand} (as well as their `\verb+*+'-ed versions). These
+should be used. Authors may not use \TeX\relax's low-level commands
+\m{def}, \m{edef}, and \m{gdef}.
+
+\section{Summary}
+To ensure the best use of \TeX\ manuscripts, authors need to follow
+the guidelines specified here. Use of low-level formatting commands to
+finely control horizontal and vertical spacing may be ignored during
+production, or even worse, make it impossible to convert the
+manuscript to XML. Authors should keep
+things as simple as possible and correctly use the proper \revtex~4.1
+or \LaTeXe\ macros. Any questions about usage may be directed to
+\texttt{revtex@aps.org}.
+
+\end{document}
+
diff --git a/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/auguide/auguide4-1.pdf b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/auguide/auguide4-1.pdf
new file mode 100644
index 0000000000..913a77e877
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/auguide/auguide4-1.pdf
Binary files differ
diff --git a/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/auguide/auguide4-1.tex b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/auguide/auguide4-1.tex
new file mode 100644
index 0000000000..10833641c8
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/auguide/auguide4-1.tex
@@ -0,0 +1,1737 @@
+%% ****** Start of file authguide.tex ****** %
+%%
+%% This file is part of the APS files in the REVTeX 4 distribution.
+%% Version 4.1r of REVTeX, August 2010
+%%
+%% Copyright (c) 2009, 2010 The American Physical Society.
+%%
+%% See the REVTeX 4.1 README file for restrictions and more information.
+%%
+\listfiles
+\documentclass[%
+,aps%
+ ,twocolumn%
+ ,secnumarabic%
+,amssymb, amsmath,nobibnotes, aps, prl, floatfix]{revtex4-1}
+\usepackage{docs}%
+\usepackage{bm}%
+%\usepackage[colorlinks=true,linkcolor=blue]{hyperref}%
+%\nofiles
+\expandafter\ifx\csname package@font\endcsname\relax\else
+ \expandafter\expandafter
+ \expandafter\usepackage
+ \expandafter\expandafter
+ \expandafter{\csname package@font\endcsname}%
+\fi
+
+\begin{document}
+
+\title{\revtex~4.1 Author's Guide}%
+\author{American Physical Society}%
+\email{revtex@aps.org}
+\affiliation{1 Research Road, Ridge, NY 11961}
+\date{August 2010}%
+\maketitle
+\tableofcontents
+\clearpage
+\section{Introduction}
+
+This is the author's guide to \revtex~4.1, the preferred submission
+format for all APS and AIP journals. This guide is intended to be a concise
+introduction to \revtex~4.1. The documentation has been separated out
+into smaller units to make it easier to locate essential
+information.
+
+The following documentation is also part of the \revtex~4.1
+distribution. Updated versions of these will be maintained at
+the \revtex~4.1 homepage located at \url{http://authors.aps.org/revtex4/}.
+\begin{itemize}
+\item \textit{APS Author Guide for \revtex~4.1}
+\item \textit{Author's Guide to AIP Substyles for \revtex~4.1}
+\item \textit{\revtex~4.1 Command and Options Summary}
+\item \textit{What's New in \revtex~4.1}
+\end{itemize}
+This guide assumes a working \revtex~4.1
+installation. Please see the installation instructions included with the
+distribution.
+\subsection{Changes in \revtex~4.1}
+The \revtex\ system for \LaTeX\ began its development in 1986 and has
+gone through three major revisions since then. \revtex~4 was released in August, 2001. Since that time,
+many user requests for new features were received. The main goals for \revtex~4.1 are to incorporate
+this user feedback and provide support for the journals of the American Institute of Physics (AIP) . It incorporates the following changes:
+
+\begin{itemize}
+\item \textbf{Added support for APS journal \textit{Physical Review Special Topics -- Physics Education Research}}.
+\item \textbf{Added support for AIP journals.} There is now an explicit \texttt{aip} society option along with support for AIP journals. Please see the \textit{Author's Guide to AIP Substyles for \revtex~4.1}. In addition, \revtex~4.1 provides an extensible system for the easy addition of new collections of journals.
+\item \textbf{Endnotes now ordered correctly.} Endnotes in the bibliography now appear in the correct order, interleaved with citations.
+\item \textbf{Multiple references in a single citation supported using a special starred (*) argument to the \cmd\cite\ command.} One of the major new features in 4.1 made possible by the joint work on \texttt{natbib 8.3}. Multiple Bib\TeX\ entries can be combined into a single \cmd\bibitem\ command.
+\item \textbf{Free form text can be prepended and appended to a bibliographic entry using the special starred (*) argument to the \cmd\cite\ command.} Often a citation in the bibliography will have explanatory text such as \textit{See also} or \textit{and references therein} before and after the actual citation. The new \revtex~4.1 \cmd\cite\ command allows the specification of both text to precede and follow a citation.
+\item \textbf{Structured Abstracts.} Use of the \texttt{description} environment in abstracts now provides for ``structured" abstracts.
+\item \textbf{Figures referring to videos now supported.} A ``figure" may now be labeled as a \textbf{Video} by using the \texttt{video} environment. A frame from the video may be included in the figure and a URL to link the caption's label to the online video also may be included. There is also a \cmd\listofvideos\ command.
+\item \textbf{Better support for arXiv.org in Bib\TeX\ } Three more Bib\TeX\ fields have been added: \texttt{SLACcitation}, \texttt{archivePrefix}, and \texttt{primaryClass} in addition to the existing field \texttt{eprint}.
+\item \textbf{Improved Bib\TeX\ \texttt{bst} files.} In addition to the new features above, numerous other improvements to the APS \texttt{bst} files have been made, including support for displaying journal article titles (using the new \texttt{longbibliography} option) and many fixes for \textit{Reviews of Modern Physics}. Also, long author lists are no longer automatically truncated.
+\item \textbf{\cmd\footnote\ in \cmd\widetext\ and \texttt{table*} environments improved.} \cmd\footnote\relax s in the \cmd\widetext\ or \texttt{table*} environments are now correctly placed and formatted.
+\item \textbf{Email addresses no longer print twice on papers less than one page long.}
+\item \textbf{\texttt{eqnarray} alignment improved.}
+\item \textbf{\cmd\collaboration\ can be used with the \texttt{groupedaddress} option now.}
+\item \textbf{\texttt{letterpaper} now ensured as default paper size.}
+\item \textbf{Table of Contents formatting improved.}
+\item \textbf{Support for the \texttt{longtable} package improved.}
+\item \textbf{\texttt{reftest} restored.}
+\item \textbf{Compatibility with the \texttt{geometry, lineno, lscape} and \texttt{colortbl} packages improved.} For line numbering, rather than using \texttt{lineno.sty} directly, the \texttt{linenumbers} class option should be used (this will call in \texttt{lineno.sty} with a proper set of default parameters).
+\item \texttt{hyperref} \textbf{fixes}. Improvements were to make footnotes work better with the \texttt{hyperref} package. In particular, table footnotes were fixed. More anchors for \texttt{hyperref} were also added (titlepage, abstract, and acknowledgements).
+\item \textbf{Documents can have more than 256 \cmd\cite\ commands now.}
+\item \textbf{\cmd\listoffigures\ and \cmd\listoftables\ fixed.}
+\item \textbf{Figure and table labels in captions now reflect proper APS style.}
+\item \textbf{RMP style files conform better to RMP style guidelines.}
+\item \textbf{Section heading upper-casing improved.}
+\item \textbf{Repeated characters at start of affiliation no longer disappear when using \texttt{groupedaddress} option.}
+\item \textbf{There have been many other bug fixes and improvements to the internal \texttt{ltxgrid} package as well.}
+\end{itemize}
+
+\subsection{\revtex~4 Backwards Compatibility}
+Documents prepared under \revtex~4 should process correctly under \revtex~4.1. However, the formatting of the pages and, if using Bib\TeX, the references may change.
+
+
+
+\subsection{Submitting to APS Journals}
+
+Authors using \revtex~4.1 to prepare a manuscript for submission to
+\textit{Physical Review Letters}, \textit{Physical Review}, \textit{Reviews of Modern Physics},
+or other APS journals must also read the companion document \textit{APS Author Guide for \revtex~4.1}
+distributed with \revtex\ and follow the guidelines detailed there.
+
+The \revtex~4.1 distribution includes both a template
+(\file{apstemplate.tex}) and a sample document (\file{apssamp.tex}).
+The template is a good starting point for a manuscript. In the
+following sections are instructions that should be sufficient for
+creating a paper using \revtex~4.1.
+
+Further information about submissions to the American
+Physical Society may be found at \url{http://publish.aps.org/}.
+
+\subsection{Submitting to AIP Journals}
+
+\revtex~4.1 includes support for the journals of the American Institute of Physics.
+The style files and authoring guides for these journals are distributed as part
+\revtex~4.1 distribution. The distribution includes both a template
+(\file{aiptemplate.tex}) and a sample document (\file{aipsamp.tex}).
+The template is a good starting point for a manuscript. In the
+following sections are instructions that should be sufficient for
+creating a paper using \revtex~4.1.
+
+
+
+More information may be found at
+\url{http://www.aip.org/pubservs/compuscript.html}. Please consult the \textit{Author's Guide to AIP Substyles for \revtex~4.1} for more information about submissions to AIP journals, AIP styles files, and other AIP-specific information.
+
+\subsection{Contact Information}\label{sec:aipresources}%
+Any bugs, problems, or inconsistencies with \revtex\ or the APS journal style files should be reported to
+\revtex\ support at \verb+revtex@aps.org+. Reports should include information on the error and a \textit{small}
+sample document that manifests the problem if possible (please don't send large files!). Issues related to the AIP journal styles should be sent directly to \verb+tex@aip.org+.
+
+\section{Some \LaTeXe\ Basics}
+\revtex~4.1 must sometimes patch the underlying
+\LaTeX\ kernel. This means that \revtex~4.1 requires a fairly recent version of
+\LaTeXe. Versions prior to 2005/12/01 may not work
+correctly. \revtex~4.1 will be maintained to be compatible with future
+versions of \LaTeXe.
+
+\subsection{Useful \LaTeXe\ Markup}
+\LaTeXe\ markup is the preferred way to accomplish many basic tasks.
+
+\subsubsection{Fonts}
+
+Because \revtex~4.1 is based upon \LaTeXe, it inherits all of the
+macros used for controlling fonts. Of particular importance are the
+\LaTeXe\ macros \cmd{\textit}, \cmd{\textbf}, \cmd{\texttt} for changing to
+an italic, bold, or typewriter font respectively. One should always
+use these macros rather than the lower-level \TeX\ macros \cmd{\it},
+\cmd{\bf}, and \cmd{\tt}. The \LaTeXe\ macros offer
+improvements such as better italic correction and scaling in super-
+and subscripts for example. Table~\ref{tab:fonts}
+summarizes the font selection commands in \LaTeXe.
+
+\begin{table}
+\caption{\label{tab:fonts}\LaTeXe\ font commands}
+\begin{ruledtabular}
+\begin{tabular}{ll}
+\multicolumn{2}{c}{\textbf{Text Fonts}}\\
+\textbf{Font command} & \textbf{Explanation} \\
+\cmd\textit\marg{text} & Italics\\
+\cmd\textbf\marg{text} & Boldface\\
+\cmd\texttt\marg{text} & Typewriter\\
+\cmd\textrm\marg{text} & Roman\\
+\cmd\textsl\marg{text} & Slanted\\
+\cmd\textsf\marg{text} & Sans Serif\\
+\cmd\textsc\marg{text} & Small Caps\\
+\cmd\textmd\marg{text} & Medium Series\\
+\cmd\textnormal\marg{text} & Normal Series\\
+\cmd\textup\marg{text} & Upright Series\\
+ &\\
+\multicolumn{2}{c}{\textbf{Math Fonts}}\\
+\cmd\mathit\marg{text} & Math Italics\\
+\cmd\mathbf\marg{text} & Math Boldface\\
+\cmd\mathtt\marg{text} & Math Typewriter\\
+\cmd\mathsf\marg{text} & Math Sans Serif\\
+\cmd\mathcal\marg{text} & Calligraphic\\
+\cmd\mathnormal\marg{text} & Math Normal\\
+\cmd\bm\marg{text}& Bold math for Greek letters\\
+ & and other symbols\\
+\cmd\mathfrak\marg{text}\footnotemark[1] & Fraktur\\
+\cmd\mathbb\marg{text}\footnotemark[1] & Blackboard Bold\\
+\end{tabular}
+\end{ruledtabular}
+\footnotetext[1]{Requires \classname{amsfonts} or \classname{amssymb} class option}
+\end{table}
+
+\subsubsection{User-defined macros}
+\LaTeXe\ provides several macros that enable users to easily create new
+macros for use in their manuscripts:
+\begin{itemize}
+\footnotesize
+\item \cmd\newcommand\marg{\\command}\oarg{narg}\oarg{opt}\marg{def}
+\item \cmd\newcommand\verb+*+\marg{\\command}\oarg{narg}\oarg{opt}\marg{def}
+\item \cmd\renewcommand\marg{\\command}\oarg{narg}\oarg{opt}\marg{def}
+\item \cmd\renewcommand\verb+*+\marg{\\command}\oarg{narg}\oarg{opt}\marg{def}
+\item \cmd\providecommand\marg{\\command}\oarg{narg}\oarg{opt}\marg{def}
+\item \cmd\providecommand\verb+*+\marg{\\command}\oarg{narg}\oarg{opt}\marg{def}
+\end{itemize}
+Here \meta{\\command} is the name of the macro being defined,
+\meta{narg} is the number of arguments the macro takes,
+\meta{opt} are optional default values for the arguments, and
+\meta{def} is the actually macro definiton. \cmd\newcommand\ creates a
+new macro, \cmd\renewcommand\ redefines a previously defined macro,
+and \cmd\providecommand\ will define a macro only if it hasn't
+been defined previously. The *-ed versions are an optimization that
+indicates that the macro arguments will always be ``short'' arguments. This is
+almost always the case, so the *-ed versions should be used whenver
+possible.
+
+The use of these macros is preferred over using plain \TeX's low-level
+macros such as
+\cmd\def{},\cmd\edef{}, and \cmd\gdef{}. APS authors must follow the
+\textit{APS Author Guide for \revtex~4.1} when defining macros.
+
+\subsubsection{Symbols}
+
+\LaTeXe\ has added some convenient commands for some special symbols
+and effects. These are summarized in Table~\ref{tab:special}. See
+\cite{Guide} for details.
+
+\begin{table}
+\caption{\label{tab:special}\LaTeXe\ commands for special symbols and effects}
+\begin{ruledtabular}
+\begin{tabular}{lc}
+Command & Symbol/Effect\\
+\cmd\textemdash & \textemdash\\
+\cmd\textendash & \textendash\\
+\cmd\textexclamdown & \textexclamdown\\
+\cmd\textquestiondown & \textquestiondown\\
+\cmd\textquotedblleft & \textquotedblleft\\
+\cmd\textquotedblright & \textquotedblright\\
+\cmd\textquoteleft & \textquoteleft\\
+\cmd\textquoteright & \textquoteright\\
+\cmd\textbullet & \textbullet\\
+\cmd\textperiodcentered & \textperiodcentered\\
+\cmd\textvisiblespace & \textvisiblespace\\
+\cmd\textcompworkmark & Break a ligature\\
+\cmd\textcircled\marg{char} & Circle a character\\
+\end{tabular}
+\end{ruledtabular}
+\end{table}
+
+\LaTeXe\ provides additional symbols in a
+separate package called \classname{latexsym}. To use these symbols, include
+the package using:
+\begin{verbatim}
+\usepackage{latexsym}
+\end{verbatim}
+
+\subsection{Using \LaTeXe\ packages with \revtex}\label{sec:usepackage}%
+
+Many \LaTeXe\ packages are available, for instance, on CTAN at
+\url{http://www.ctan.org/tex-archive/macros/latex/required/}
+and at
+\url{http://www.ctan.org/tex-archive/macros/latex/contrib/}
+or may be available on other distribution media, such as the \TeX\
+Live CD-ROM \url{http://www.tug.org/texlive/}. Some of these packages
+are automatically loaded by \revtex~4.1 when certain class options are
+invoked and are, thus, ``required.'' They will either be distributed
+with \revtex\ or are already included with a standard \LaTeXe\
+distribution.
+
+Required packages are automatically loaded by \revtex\ on an as-needed
+basis. Other packages should be loaded using the
+\cmd\usepackage\ command. To load the
+\classname{hyperref} package, the document preamble might look like:
+\begin{verbatim}
+\documentclass{revtex}
+\usepackage{hyperref}
+\end{verbatim}
+
+Some common (and very useful) \LaTeXe\ packages are \textit{a priori}
+important enough that \revtex~4.1 has been designed to be specifically
+compatible with them.
+A bug stemming from the use of one of these packages in
+conjunction with any of the APS journals may be reported by contacting
+\revtex\ support.
+\begin{description}
+\item[\textbf{AMS packages}] \revtex~4.1 is compatible with and depends
+ upon the AMS packages
+\classname{amsfonts},
+\classname{amssymb}, and
+\classname{amsmath}. In fact, \revtex~4.1 requires use of these packages
+to accomplish some common tasks. See Section~\ref{sec:math} for more.
+\revtex~4.1 requires version 2.0 or higher of the AMS-\LaTeX\ package.
+
+\item[\textbf{array and dcolumn}]
+The \classname{array} and \classname{dcolumn} packages are part of
+\LaTeX's required suite of packages. \classname{dcolumn} is required
+to align table columns on decimal points (and it in turn depends upon
+the \classname{array} package).
+
+\item[\textbf{longtable}]
+\file{longtable.sty} may be used for large tables that will span more than one
+page. \revtex~4.1 dynamically applies patches to longtable.sty so that
+it will work in two-column mode.
+
+\item[\textbf{hyperref}] \file{hyperref.sty} is a package by Sebastian Rahtz that is
+used for putting hypertext links into \LaTeXe\ documents.
+\revtex~4.1 has hooks to allow e-mail addresses and URL's to become
+hyperlinks if \classname{hyperref} is loaded.
+
+\item[\textbf{lineno}] \revtex~4.1 improves compatibility with \classname{lineno.sty}. This package should only be loaded via the new \classoption{linenumbers} class option. See Section~\ref{sec:lineno} for more information.
+
+\item[\textbf{lscape}] \revtex~4.1 improves compatibility with \classname{lscape.sty}.
+
+\item[\textbf{geometry}] \revtex~4.1 improves compatibility with \classname{geometry.sty}.
+
+\item[\textbf{colortbl}] \revtex~4.1 improves compatibility with \classname{colortbl.sty}.
+
+\end{description}
+
+Other packages will conflict with \revtex~4.1 and should be
+avoided. Usually such a conflict arises because the package adds
+enhancements that \revtex~4.1 already includes. Here are some common
+packages that clash with \revtex~4.1:
+\begin{description}
+\item[\textbf{multicol}] \file{multicol.sty} is a package by Frank Mittelbach
+that adds support for multiple columns. In fact, early versions of
+\revtex~4.1 used \file{multicol.sty} for precisely this. \revtex~4.1
+incorporates its own support for multiple-column typesetting.
+
+\item[\textbf{cite}] Donald Arseneau's \file{cite.sty} is often used to provide
+support for sorting a \cmd\cite\ command's arguments into numerical
+order and to collapse consecutive runs of reference numbers. \revtex~4.1
+has this functionality built-in already via the \classname{natbib} package.
+
+\item[\textbf{mcite}] \revtex~4.1 already contains a lot of this
+functionality through its updated syntax for the \cmd\cite\ command and
+the latest \classname{natbib} package.
+
+\item[\textbf{endfloat}] The same functionality can be accomplished
+using the \classoption{endfloats} class option.
+
+\item[\textbf{float}] \texttt{float.sty} provides a mechanism for creating new float classes with just a few commands. \revtex~4.1 has limited compatible with float.sty. If attempting to use this package, be sure to put any \cmd\newfloat\ commands after the \verb+\begin{document}+ line.
+
+\end{description}
+
+\section{The Document Preamble}
+
+The preamble of a \LaTeX\ document is the set of commands that precede
+the \envb{document} line. It contains a
+\cmd\documentclass\ line to load the \revtex~4.1 class (\textit{i.e.},
+all of the \revtex~4.1 macro definitions), \cmd\usepackage\ macros to
+load other macro packages, and other macro definitions.
+
+\subsection{The \emph{documentclass} line}
+The basic formatting of the manuscript is controlled by setting
+\emph{class options} using
+\cmd\documentclass\oarg{options}\aarg{\classname{revtex4-1}}.
+The optional arguments that appear in the square brackets control the layout of the
+document. At this point, one only needs to choose:
+\begin{itemize}
+\item Either the \classoption{aps} (default) or \classoption{aip} society option
+\item One of the chosen society's journal styles such as \classoption{prl} or \classoption{apl}
+\item A layout option such as \classoption{preprint} (single-column formatting), \classoption{reprint} (an approximation
+to the selected journal's actual layout which may be one- or two-column depending on the journal), or \classoption{twocolumn}
+\end{itemize}
+Usually, one would want to use \classoption{preprint} for draft papers. Paper size options are also
+available as well. In particular, \classoption{a4paper} is available
+as well as the rest of the standard \LaTeX\ paper sizes. A
+full list of class options is given in the \textit{\revtex~4.1 Command
+and Options Summary}.
+
+\subsection{Loading other packages}
+Other packages may be loaded into a \revtex~4.1 document by using the
+standard \LaTeXe\ \cmd\usepackage\ command. For instance, to load
+the \classoption{graphics} package, one would use
+\verb+\usepackage{graphics}+.
+
+\section{The Front Matter}\label{sec:front}
+
+After choosing the basic look and feel of the document by selecting
+the appropriate class options and loading in whatever other macros are
+needed, one is ready to move on to creating a new manuscript. After
+the preamble, be sure to put in a \envb{document} line (and put
+in an \enve{document} as well). This section describes the macros
+\revtex~4.1 provides for formatting the front matter of the
+article. The behavior and usage of these macros can be quite
+different from those provided in the \LaTeXe\ \classname{article} class.
+\subsection{Setting the title}
+
+The title of the manuscript is simply specified by using the
+\cmd\title\aarg{title} macro. A \verb+\\+ may be used to put a line
+break in a long title.
+
+\subsection{Specifying a date}%
+
+The \cmd\date\marg{date} command outputs the date on the
+manuscript. Using \cmd\today\ will cause \LaTeX{} to insert the
+current date whenever the file is run:
+\begin{verbatim}
+\date{\today}
+\end{verbatim}
+
+\subsection{Specifying authors and affiliations}
+
+The \revtex~4.1 macros for specifying authors and their affiliations are designed
+ to save labor for authors and during production. Authors and affiliations are
+arranged into groupings called, appropriately enough, \emph{author
+groups}. Each author group is a set of authors who share the same set
+of affiliations. Author names are specified with the \cmd\author\
+macro while affiliations (or addresses) are specified with the
+\cmd\affiliation\ macro. Author groups are specified by sequences of
+\cmd\author\ macros followed by \cmd\affiliation\ macros. An
+\cmd\affiliation\ macro applies to all previously specified
+\cmd\author\ macros which don't already have an affiliation supplied.
+
+For example, if Bugs Bunny and Roger Rabbit are both at Looney Tune
+Studios, while Mickey Mouse is at Disney World, the markup would be:
+\begin{verbatim}
+\author{Bugs Bunny}
+\author{Roger Rabbit}
+\affiliation{Looney Tune Studios}
+\author{Mickey Mouse}
+\affiliation{Disney World}
+\end{verbatim}
+The default is to display this as
+\begin{center}
+Bugs Bunny and Roger Rabbit\\
+\emph{Looney Tune Studios}\\
+Mickey Mouse\\
+\emph{Disney World}\\
+\end{center}
+This layout style for displaying authors and their affiliations is
+chosen by selecting the class option
+\classoption{groupedaddress}. Journal styles usually default this option,
+ so it need not be specified explicitly. The other major way of displaying this
+information is to use superscripts on the authors and
+affiliations. This can be accomplished by selecting the class option
+\classoption{superscriptaddress}. To achieve the display
+\begin{center}
+Bugs Bunny,$^{1}$ Roger Rabbit,$^{1,2}$ and Mickey Mouse$^{2}$\\
+\emph{$^{1}$Looney Tune Studios}\\
+\emph{$^{2}$Disney World}\\
+\end{center}
+one would use the markup
+\begin{verbatim}
+\author{Bugs Bunny}
+\affiliation{Looney Tune Studios}
+\author{Roger Rabbit}
+\affiliation{Looney Tune Studios}
+\affiliation{Disney World}
+\author{Mickey Mouse}
+\affiliation{Disney World}
+\end{verbatim}
+
+Note that \revtex~4.1 takes care of any commas and \emph{and}'s that join
+the author names together and font selection, as well as any
+superscript numbering. Only the author names and affiliations should
+be given within their respective macros. See below for further information
+regarding the proper way to add footnotes to author names and affiliations.
+
+There is a third class option, \classoption{unsortedaddress}, for
+controlling author/affiliation display. The default
+\classoption{groupedaddress} will actually sort authors into the
+approriate author groups if one chooses to specify an affiliation for
+each author. The markup:
+\begin{verbatim}
+\author{Bugs Bunny}
+\affiliation{Looney Tune Studios}
+\author{Mickey Mouse}
+\affiliation{Disney World}
+\author{Roger Rabbit}
+\affiliation{Looney Tune Studios}
+\end{verbatim}
+will result in the same display as for the first case given
+above even though Roger Rabbit is specified after Mickey Mouse. To
+avoid Roger Rabbit being moved into the same author group as Bugs
+Bunny, use the
+\classoption{unsortedaddress} option instead. In general, it is safest
+to list authors in the order they should appear and specify
+affiliations for multiple authors rather than one at a time. This will
+afford the most independence for choosing the display option. Finally,
+it should be mentioned that the affiliations for the
+\classoption{superscriptaddress} are presented and numbered
+in the order that they are encountered. These means that the order
+will usually follow the order of the authors. An alternative ordering
+can be forced by including a list of \cmd\affiliation\ commands before
+the first \cmd{\author} in the desired order. Then use the exact same
+text for each affilation when specifying them for each author.
+
+If an author doesn't have an affiliation, the \cmd\noaffiliation\
+macro may be used in the place of an \cmd\affiliation\ macro.
+
+
+\subsubsection{Collaborations}
+
+A collaboration name can be specified with the \cmd\collaboration\
+command. This is very similar to the \cmd\author\ command. In \revtex~4.1, it can
+be used with both the \classoption{superscriptaddress} and \classoption{groupedaddress} class options. The
+\cmd\collaboration\ command should appear at the end of the list of
+authors. The collaboration name will be appear centered in parentheses
+between the list of authors and the list of
+affiliations. Because collaborations
+don't normally have affiliations, one needs to follow the
+\cmd\collaboration\ with \cmd\noaffiliation.
+
+\subsubsection{Footnotes for authors, collaborations, affiliations or title}\label{sec:footau}
+
+Often one wants to specify additional information associated with an
+author, collaboration, or affiliation such as an e-mail address, an
+alternate affiliation, or some other ancillary information.
+\revtex~4.1 introduces several new macros just for this purpose. They
+are:
+\begin{itemize}
+\item\cmd\email\oarg{optional text}\aarg{e-mail address}
+\item\cmd\homepage\oarg{optional text}\aarg{URL}
+\item\cmd\altaffiliation\oarg{optional text}\aarg{affiliation}
+\item\cmd\thanks\aarg{miscellaneous text}
+\end{itemize}
+In the first three, the \emph{optional text} will be prepended before the
+actual information specified in the required argument. In the APS journal style files, \cmd\email\ and \cmd\homepage\ no longer have a default value. However, in the AIP styles, each have a default text for their optional arguments
+(`Electronic address:' and `URL:' respectively). The \cmd\thanks\
+macro should only be used if one of the other three do not apply. Any
+author name can have multiple occurences of these four macros. Note
+that unlike the
+\cmd\affiliation\ macro, these macros only apply to the \cmd\author\
+that directly precedes it. Any \cmd\affiliation\ \emph{must} follow
+the other author-specific macros. A typical usage might be as follows:
+\begin{verbatim}
+\author{Bugs Bunny}
+\email[E-mail me at: ]{bugs@looney.com}
+\homepage[Visit: ]{http://looney.com/}
+\altaffiliation[Permanent address: ]
+ {Warner Brothers}
+\affiliation{Looney Tunes}
+\end{verbatim}
+This would result in the footnote ``E-mail me at: \texttt{bugs@looney.com},
+Visit: \texttt{http://looney.com/}, Permanent address: Warner
+Brothers'' being attached to Bugs Bunny. Note that:
+\begin{itemize}
+\item Only an e-mail address, URL, or affiliation should go in the
+required argument in the curly braces.
+\item The font is automatically taken care of.
+\item An explicit space is needed at the end of the optional text if one is
+desired in the output.
+\item Use the optional arguments to provide customized
+text only if there is a good reason to.
+\end{itemize}
+
+The \cmd\collaboration\ , \cmd\affiliation\ , or even \cmd\title\ can
+also have footnotes attached via these commands. If any ancillary data
+(\cmd\thanks, \cmd\email, \cmd\homepage, or
+\cmd\altaffiliation) are given in the wrong context (e.g., before any
+\cmd\title, \cmd\author, \cmd\collaboration, or \cmd\affiliation\
+command has been given), then a warning is given in the \TeX\ log, and
+the command is ignored.
+
+Duplicate sets of ancillary data are merged, giving rise to a single
+shared footnote. However, this only applies if the ancillary data are
+identical: even the order of the commands specifying the data must be
+identical. Thus, for example, two authors can share a single footnote
+indicating a group e-mail address.
+
+Duplicate \cmd\affiliation\ commands may be given in the course of the
+front matter, without the danger of producing extraneous affiliations
+on the title page. However, ancillary data should be specified for
+only the first instance of any particular institution's
+\cmd\affiliation\ command; a later instance with different ancillary
+data will result in a warning in the \TeX\ log.
+
+It is preferable to arrange authors into
+sets. Within each set all the authors share the same group of
+affiliations. For each author, give the \cmd\author\ (and appropriate
+ancillary data), then follow this author group with the needed group
+of \cmd\affiliation\ commands.
+
+If affiliations have been listed before the first
+\cmd\author\ macro to ensure a particular ordering, be sure
+that any later \cmd\affiliation\ command for the given institution is
+an exact copy of the first, and also ensure that no ancillary data is
+given in these later instances.
+
+
+Each journal class option has a default behavior for the placement of these
+ancillary information footnotes. For instance, the \classoption{prb} option puts all
+such footnotes at the start of the bibliography while the \classoption{prl}
+journal styles displays them on the first page. One can override a
+journal style's default behavior by specifying explicitly the class
+option
+\classoption{bibnotes} (puts the footnotes at the start of the
+bibliography) or \classoption{nobibnotes} (puts them on the first page).
+Please consult the documentation for the various journal style files for further information.
+
+\subsubsection{Specifying first names and surnames}
+
+Many authors have names in which either the surname appears first
+or in which the surname is made up of more than one name. To ensure
+that such names are accurately captured for indexing and other
+purposes, the \cmd\surname\ macro should be used to indicate which portion
+of a name is the surname. Similarly, there is a \cmd\firstname\ macro
+as well, although usage of \cmd\surname\ should be sufficient. If an
+author's surname is a single name and written last, it is not
+necessary to use these macros. These macros do nothing but indicate
+how a name should be indexed. Here are some examples:
+\begin{verbatim}
+\author{Andrew \surname{Lloyd Weber}}
+\author{\surname{Mao} Tse-Tung}
+\end{verbatim}
+
+\subsection{The abstract}
+An abstract for a paper is specified by using the \env{abstract}
+environment:
+\begin{verbatim}
+\begin{abstract}
+Text of abstract
+\end{abstract}
+\end{verbatim}
+Note that in \revtex~4.1 the abstract must be specified before the
+\cmd\maketitle\ command and there is no need to embed it in an explicit
+minipage environment.
+
+\subsubsection{Structured abstracts}
+A new feature in \revtex~4.1 is support for \textit{structured abstracts}. A ``structured" abstract is an abstract divided into labeled sections. For instance, \textit{Physical Review C} would like authors to provide abstracts with sections summarizing the paper's \textbf{Background}, \textbf{Purpose}, \textbf{Method}, \textbf{Results}, and \textbf{Conclusions}. This can be accomplished by using the \texttt{description} environment within the \texttt{abstract} environment. For example:
+\begin{verbatim}
+\begin{abstract}
+\begin{description}
+\item[Background] This part would describe the
+context needed to understand what the paper
+is about.
+\item[Purpose] This part would state the purpose
+of the present paper.
+\item[Method] This part describe the methods
+used in the paper.
+\item[Results] This part would summarize the
+results.
+\item[Conclusions] This part would state the
+conclusions of the paper.
+\end{description}
+\end{abstract}
+\end{verbatim}
+
+\subsection{PACS codes}
+APS and AIP authors are asked to supply suggested PACS codes with their
+submissions. The \cmd\pacs\ macro is provided as a way to do this:
+\begin{verbatim}
+\pacs{23.23.+x, 56.65.Dy}
+\end{verbatim}
+The actual display of the PACS numbers below the abstract is
+controlled by two class options: \classoption{showpacs} and
+\classoption{noshowpacs}. In particular, this is now independent of
+the \classoption{preprint} option. \classoption{showpacs} must be
+explicitly included in the class options to display the PACS codes.
+
+\subsection{Keywords}
+A \cmd\keywords\ macro may also be used to indicate keywords for the
+article.
+\begin{verbatim}
+\keywords{nuclear form; yrast level}
+\end{verbatim}
+This will be displayed below the abstract and PACS (if supplied). Like
+PACS codes, the actual display of the the keywords is controlled by
+two classoptions: \classoption{showkeys} and
+\classoption{noshowkeys}. An explicit \classoption{showkeys} must be
+included in the \cmd\documentclass\ line to display the keywords.
+
+\subsection{Institutional report numbers}
+Institutional report numbers can be specified using the \cmd\preprint\
+macro. If the \classoption{preprintnumbers} class option is specified, these will be displayed in the upper right corner of the first page. Multiple \cmd\preprint\ macros maybe supplied (space is
+limited though, so only three or less may actually fit). Please note that the \classoption{preprint} class option does not automatically invoke \classoption{preprintnumbers}.
+
+\subsection{maketitle}
+After specifying the title, authors, affiliations, abstract, PACS
+codes, and report numbers, the final step for formatting the front
+matter of the manuscript is to execute the \cmd\maketitle\ macro by
+simply including it:
+\begin{verbatim}
+\maketitle
+\end{verbatim}
+The \cmd\maketitle\ macro must follow all of the macros listed
+above. The macro will format the front matter in accordance with the various
+class options that were specified in the
+\cmd\documentclass\ line (either implicitly through defaults or
+explicitly).
+
+\section{The body of the paper}
+
+For typesetting the body of a paper, \revtex~4.1 relies heavily on
+standard \LaTeXe\ and other packages (particulary those that are part
+of AMS-\LaTeX). Users unfamiliar with these packages should read the
+following sections carefully.
+
+\subsection{Section headings}
+
+Section headings are input as in \LaTeX.
+The output is similar, with a few extra features.
+
+Four levels of headings are available in \revtex{}:
+\begin{quote}
+\cmd\section\marg{title text}\\
+\cmd\subsection\marg{title text}\\
+\cmd\subsubsection\marg{title text}\\
+\cmd\paragraph\marg{title text}
+\end{quote}
+
+Use the starred form of the command to suppress the automatic numbering; e.g.,
+\begin{verbatim}
+\section*{Introduction}
+\end{verbatim}
+
+To label a section heading for cross referencing, best practice is to
+place the \cmd\label\marg{key} within the argument specifying the heading:
+\begin{verbatim}
+\section{\label{sec:intro}Introduction}
+\end{verbatim}
+
+In some journal substyles, such as those of the APS,
+all text in the \cmd\section\ command is automatically set uppercase.
+If a lowercase letter is needed, use \cmd\lowercase\aarg{x}.
+For example, to use ``He'' for helium in a \cmd\section\marg{title text} command, type
+\verb+H+\cmd\lowercase\aarg{e} in \marg{title text}.
+
+Use \cmd\protect\verb+\\+ to force a line break in a section heading.
+(Fragile commands must be protected in section headings, captions, and
+footnotes and \verb+\\+ is a fragile command.)
+
+\subsection{Paragraphs and General Text}
+
+Paragraphs always end with a blank input line. Because \TeX\
+automatically calculates linebreaks and word hyphenation in a
+paragraph, it is not necessary to force linebreaks or hyphenation. Of
+course, compound words should still be explicitly hyphenated, e.g.,
+``author-prepared copy.''
+
+Use directional quotes for quotation marks around quoted text
+(\texttt{``xxx''}), not straight double quotes (\texttt{"xxx"}).
+For opening quotes, use one or two backquotes; for closing quotes,
+use one or two forward quotes (apostrophes).
+
+\subsection{One-column vs. two-column layouts}\label{sec:widetext}
+
+One of the hallmarks of \textit{Physical Review} and many of the AIP journals is their two-column
+formatting. \revtex~4.1 provides the \classoption{reprint} class option that provides for each
+journal class option a close approximation to the journal's actual production formatting. Note that
+the \classoption{reprint} option will give either one or two-column formatting as appropriate for the particular journal.
+For most APS and AIP journals, the \classoption{reprint} option will take care of formatting the front matter
+(including the abstract) as a single column and will typeset the body in two columns. \revtex~4.1 has its own
+built-in two-column formatting macros to provide well-balanced columns as well as reasonable control over the placement of floats in either
+one- or two-column modes. When drafting papers, it is common to use a one-column format. This is best achieved by using the
+\classoption{preprint} class option. Authors may override a particular journal's formatting by using the lower level options \classoption{onecolumn} and \classoption{twocolum}, but best practice is to stick with the \classoption{preprint} and \classoption{reprint} options.
+
+Please note that the \classoption{reprint} class option is only an \textit{approximation} of a journal's final layout. Because of font differences, figure rescaling, and other factors, authors should not expect the \classoption{reprint} option to give fully accurate estimates of an article's ultimate length after being typeset for the journal.
+
+Occasionally it is necessary to change the formatting from two-column to
+one-column to better accommodate very long equations that are more
+easily read when typeset to the full width of the page. This is
+accomplished using the \env{widetext} environment:
+\begin{verbatim}
+\begin{widetext}
+long equation goes here
+\end{widetext}
+\end{verbatim}
+In two-column mode, this will temporarily return to one-column mode,
+balancing the text before the environment into two short columns, and
+returning to two-column mode after the environment has
+finished. \revtex~4.1 will also add horizontal rules to guide the
+reader's eye through what may otherwise be a confusing break in the
+flow of text. The
+\env{widetext} environment has no effect on the output under the
+\classoption{preprint} class option because this already uses
+one-column formatting.
+
+Use of the \env{widetext} environment should be restricted to the bare
+minimum of text that needs to be typeset this way. However, short pieces
+of paragraph text and/or math between nearly contiguous wide equations
+should be incorporated into the surrounding wide sections.
+
+Low-level control over the column grid can be accomplished with the
+\cmd\onecolumngrid\ and \cmd\twocolumngrid\ commands. Using these, one
+can avoid the horizontal rules added by \env{widetext}. These commands
+should only be used if absolutely necessary. Wide figures and tables
+should be accommodated using the proper \verb+*+ environments.
+
+\subsection{Cross-referencing}\label{sec:xrefs}
+
+\revtex{} inherits the \LaTeXe\ features for labeling and cross-referencing
+section headings, equations, tables, and figures. This section
+contains a simplified explanation of these cross-referencing features.
+The proper usage in the context of section headings, equations,
+tables, and figures is discussed in the appropriate sections.
+
+Cross-referencing depends upon the use of ``tags,'' which are defined by
+the user. The \cmd\label\marg{key} command is used to identify tags for
+\revtex. Tags are strings of characters that serve to label section
+headings, equations, tables, and figures that replace explicit,
+by-hand numbering.
+
+Files that use cross-referencing (and almost all manuscripts do)
+need to be processed through \revtex\ at least twice to
+ensure that the tags have been properly linked to appropriate numbers.
+If any tags are added in subsequent editing sessions,
+\LaTeX{} will display a warning message in the log file that ends with
+\texttt{... Rerun to get cross-references right}.
+Running the file through \revtex\ again (possibly more than once) will
+resolve the cross-references. If the error message persists, check
+the labels; the same \marg{key} may have been used to label more than one
+object.
+
+Another \LaTeX\ warning is \texttt{There were undefined references},
+which indicates the use of a key in a \cmd\ref\ without ever
+using it in a \cmd\label\ statement.
+
+\revtex{} performs autonumbering exactly as in standard \LaTeX.
+When the file is processed for the first time,
+\LaTeX\ creates an auxiliary file (with the \file{.aux} extension) that
+records the value of each \meta{key}. Each subsequent run retrieves
+the proper number from the auxiliary file and updates the auxiliary
+file. At the end of each run, any change in the value of a \meta{key}
+produces a \LaTeX\ warning message.
+
+Note that with footnotes appearing in the bibliography, extra passes
+of \LaTeX\ may be needed to resolve all cross-references. For
+instance, putting a \cmd\cite\ inside a \cmd\footnote\ will require at
+least three passes.
+
+Using the \classname{hyperref} package to create hyperlinked PDF files
+will cause reference ranges to be expanded to list every
+reference in the range. This behavior can be avoided by using the
+\classname{hypernat} package available from \url{www.ctan.org}.
+
+\subsection{Acknowledgments}
+Use the \env{acknowledgments} environment for an acknowledgments
+section. Depending on the journal substyle, this element may be
+formatted as an unnumbered section title \textit{Acknowledgments} or
+simply as a paragraph. Please note the spelling of
+``acknowledgments.''
+\begin{verbatim}
+\begin{acknowledgments}
+The authors would like to thank...
+\end{acknowledgments}
+\end{verbatim}
+
+\subsection{Appendices}
+The \cmd\appendix\ command signals that all following sections are
+appendices, so \cmd\section\marg{title text} after \cmd\appendix\ will set
+\marg{title text} as an appendix heading (an empty \marg{title text}
+is permitted). For a single appendix, use a
+\cmd\appendix\verb+*+ followed by \cmd\section\marg{title text}
+command to suppress the appendix letter in the section heading.
+
+\subsection{\label{sec:lineno}Line numbering}
+\revtex~4.1 provides the \classoption{linenumbers} class option to enable line numbering. While it is
+possible to directly call in the \classname{lineno.sty}, using the class option ensures
+that the default parameters needed to properly typeset the line numbers are set up correctly. It is
+still possible for authors to override parameters such as \cmd\linenumbersep\ as usual, however.
+
+\section{Math and equations}\label{sec:math}
+
+\subsection{Math in text}
+
+Not surprisingly, \revtex\ uses the \TeX\ math \verb+$+ delimiters
+for math embedded in text. For example,
+\verb|$a^{z}$| give $a^{z}$. Within math mode, use
+\verb+^+\marg{math} for superscripts and
+\verb+_+\marg{math} for subscripts. If the braces after the
+\verb+^+ are omitted, \TeX{} will
+superscript the next \emph{token} (generally a single character or
+command). Thus it is safest to use explicit braces \verb+{}+.
+
+As with text, math should not require extensive explicit vertical or
+horzontal motion commands, because \TeX\ calculates math spacing
+itself automatically. In particular, explicit spacing around
+relations (e.g., $=$) or operators (e.g., $+$) should be
+unnecessary. These suggestions notwithstanding, some fine-tuning of
+math is required in specific cases, see Chapter~18 in the \TeX
+book\cite{TeXbook}.
+
+\subsection{Text in math}\label{sec:textinmath}
+
+There are times when normal, non-italic text needs to be inserted
+into a math expression. The \cmd\text\marg{text} command is the
+preferred method of accomplishing this. It produces regular text
+\emph{and} scales correctly in superscripts:
+\verb+$y=x \text{ for } x_{\text{e-p}}$+ gives
+``$y=x \text{ for } x_{\text{e-p}}$''. To use the \cmd\text\ command,
+the \classname{amsmath} package must be loaded: include a
+\cmd\usepackage\aarg{\classname{amsmath}} command in the document
+preamble or use the class option \classoption{amsmath}. Please note
+that \revtex~4.1 requires version 2.0 or higher of \classname{amsmath}.
+
+Other common alternatives may be less desirable. Using the standard
+\LaTeXe\ \cmd\mbox\marg{text} will give normal text, including a hyphen,
+but will not scale correctly in superscripts:
+\verb+$x_{\mbox{e-p}}$+ gives ``$x_{\mbox{e-p}}$''.
+The \cmd\rm\ command
+only switches to Roman font for math letters. It does not, for
+example, handle hyphens correctly:
+\verb+$$x_{\rm{e-p}}$+ gives ``$x_{\rm e-p}$''. But note that
+\cmd\textrm{}, it does work: \verb+$x_{\textrm{e-p}}$+ gives ``$x_{\textrm{e-p}}$''.
+
+\subsection{Displayed equations}\label{sec:dispmath}
+
+Equations are set centered in the column width or flush left depending
+on the selected journal substyle.
+
+For the simplest type of displayed equation, a numbered, one-line
+equation, use the \env{equation} environment.
+\revtex\ takes care of the equation number%
+---the number will be set below the equation if necessary.
+Use \cmd\[\dots\cmd\] for a single, one-line unnumbered display equation.
+
+Use the \env{eqnarray} environment when more than one consecutive
+equation occurs, putting each equation in a separate row of the
+environment, and using \cmd\nonumber\ before the row end (\cmd\\) to
+suppress the equation number where necessary. If the equations are
+related to each other, align each on the respective relation operator
+(such as $=$).
+
+When an equation is broken over lines or is continued over multiple
+relation operators, it is called a multi-line or continued equation,
+respectively; here, too, use the \env{eqnarray} environment.
+
+For a continued equation, align each row on the relation operator just
+as with multiple equations, and use the \cmd\nonumber\ command to
+suppress auto-numbering on broken lines. Also, use the starred form
+of the row end (\cmd\\\verb+*+) to prevent a pagebreak at that
+juncture.
+
+Short displayed equations that can appear together on a single line
+separated by \cmd\qquad\ space may be placed in a single
+\env{equation} environment.
+
+As explained in Section~\ref{sec:widetext}, occasionally in two-column
+mode a long equation, in order to fit it in the narrow column width,
+would need to be broken into so many lines that it would affect
+readibility. Set it in a wide column using the \env{widetext}
+environment. Then return to the normal text width as soon as
+possible.
+
+The sample file \file{apssamp.tex} illustrates how to obtain each of
+the above effects.
+
+\subsection{Numbering displayed equations}
+
+\revtex~4.1 automatically numbers equations.
+For single-line and multi-line equations, use the
+\env{equation} and \env{eqnarray} environments as described above.
+For unnumbered single-line equations, use the \verb+\[+\dots\verb+\]+
+construction. The command \cmd\nonumber\ will suppress the numbering
+on a single line of an
+\env{eqnarray}.
+For a multi-line equation with no equation numbers at all,
+use the \env{eqnarray*} environment.
+
+A series of equations can be a labeled with a lettered sequence,
+e.g., (3a), (3b), and (3c), by
+putting the respective \env{equation} or \env{eqnarray} environment within a
+\env{subequations} environment.
+The \classname{amsmath} package (can be loaded with the
+\classoption{amsmath} class option) is required for this.
+
+Use the command \cmd\tag\marg{number} to produce an idiosyncratic
+equation number: $(1')$, for example. Numbers assigned by \cmd\tag\
+are completely independent of \revtex's automatic numbering. The
+package \classname{amsmath} is required for using the \cmd\tag\
+command. Please
+note that the use of the \texttt{tag} command may conflict with the use of the \classoption{hyperref} package
+due an incompatibility between \classoption{amsmath} and \classoption{hyperref}.
+
+To have \revtex{} reset the equation numbers at the start of each section,
+use the \classoption{eqsecnum} class option in the document preamble.
+
+See the sample file \file{apssamp.tex} for some examples.
+
+\subsection{Cross-referencing displayed equations}
+
+To refer to a numbered equation, use
+the \cmd\label\marg{key} and \cmd\ref\marg{key} commands.
+The \cmd\label\marg{key} command is used within the referenced equation
+(on the desired line of the \env{eqnarray}, if a multi-line equation):
+\begin{verbatim}
+\begin{equation}
+ A=B \label{pauli}
+\end{equation}
+ ... It follows from Eq.~(\ref{pauli})
+that this is the case ...
+\begin{eqnarray}
+ A & = &B,\label{pauli2}\\
+ A'& = &B'
+\end{eqnarray}
+\end{verbatim}
+gives
+\begin{equation}
+A=B \label{pauli}
+\end{equation}
+ ... It follows from Eq.~(\ref{pauli})
+that this is the case ...
+\begin{eqnarray}
+A & = &B,\label{pauli2}\\
+A'& = &B'
+\end{eqnarray}
+
+Please note the parentheses surrounding the \cmd\ref\ command.
+These are \emph{not} provided automatically and, thus, must be
+explicitly incorporated.
+
+Numbers produced with \cmd\tag\ can also be cross-referenced by adding
+a \cmd\label\ command after the \cmd\tag\ command.
+
+Using a \cmd\label\ after \envb{subequations} to reference the
+\emph{general} number of the equations in the
+\env{subequations} environment. For example, if
+\begin{verbatim}
+\begin{subequations}
+ \label{allequations} % notice location
+ \begin{eqnarray}
+ E&=&mc^2,\label{equationa}
+ \\
+ E&=&mc^2,\label{equationb}
+ \\
+ E&=&mc^2,\label{equationc}
+ \end{eqnarray}
+\end{subequations}
+\end{verbatim}
+%
+gives the output
+\begin{subequations}
+\label{allequations} % notice location
+\begin{eqnarray}
+E&=&mc^2,\label{equationa}
+\\
+E&=&mc^2,\label{equationb}
+\\
+E&=&mc^2,\label{equationc}
+\end{eqnarray}
+\end{subequations}
+%
+then \verb+Eq.~(\ref{allequations})+ gives ``Eq.~(\ref{allequations})''.
+
+{\bf Note:} incorrect cross-referencing will result if
+\cmd\label\ is used in an unnumbered single-line equation
+(i.e., within the \verb+\[+ and \verb+\]+ commands),
+or if \cmd\label\ is used on a line of an eqnarray that is not being numbered
+(i.e., a line that has a \cmd\nonumber).
+
+\subsection{Using the AMS packages \classoption{amsfonts},
+\classoption{amssymb}, and \classoption{amsmath}}\label{AMS}
+
+The American Mathematical Society's AMS-\LaTeX\ packages provided extra
+fonts, symbols, and math markup that are quite convenient. \revtex~4.1
+supports the use of these packages directly. To use the \classoption{amsfonts},
+\classoption{amssymb}, and \classoption{amsmath} class options,
+AMS-\LaTeX\ (and perhaps the additional AMS fonts) will need to be
+installed. Please note that \revtex~4.1 requires version 2.0 or higher
+of AMS-\LaTeX. These packages can be downloaded from
+\url{http://www.ams.org/tex/}.
+
+There are two class options for accessing the AMS fonts:
+\classoption{amsfonts} and \classoption{amssymb}.
+The \classoption{amsfonts} option defines the \cmd\mathfrak\ and
+\cmd\mathbb\ commands to switch to the Fraktur and
+Blackboard Bold fonts, respectively.
+These fonts are selected with the \cmd\mathfrak\ and \cmd\mathbb\
+font-switching commands:
+\verb+${\mathfrak{G}}$+ gives a Fraktur ``$\mathfrak{G}$''
+and \verb+${\mathbb{Z}}$+ gives a Blackboard Bold ``$\mathbb{Z}$''.
+\revtex{} does not currently support the use of the extra Euler fonts
+(the AMS fonts starting with \texttt{eur} or \texttt{eus}) or the
+Cyrillic fonts (the AMS fonts starting with \texttt{w}).
+
+The \classoption{amssymb} class option gives all the font
+capabilities of the
+\classoption{amsfonts} class option and further defines the commands
+for many commonly used math symbols. These symbols will scale
+correctly in superscripts and other places. See the AMS-\LaTeX\
+documentation for the complete list of symbols available.
+
+\subsection{Bold symbols in math}\label{sec:bboxamsfonts}
+
+\revtex~4.1 uses the standard \LaTeXe\ Bold Math (\classname{bm}) package as the
+basis for creating bold symbols in math mode. As usual, this requires
+an explicit \cmd\usepackage\aarg{\classname{bm}} in the document
+preamble. The command
+\cmd\bm\marg{symbol} makes \marg{symbol} bold in math mode, ensuring
+that it is the correct size, even in superscripts. If the correct font
+in the correct size is not available then result is the \marg{symbol}
+set at the
+correct size in lightface and a \LaTeXe\ warning that says
+``\texttt{No boldmath typeface in this size}\dots''. Most bold special
+characters will require that the AMS fonts be installed and the
+\classoption{amsfonts} class option be invoked.
+
+\cmd\bm\ is the proper means to get bold Greek characters---upper- and
+lowercase---and other symbols.
+The following will come out bold with \cmd\bm:
+normal math italic letters, numbers,
+Greek letters (uppercase and lowercase),
+small bracketing and operators, and \cmd\mathcal. Fraktur
+characters will come out bold in a \cmd\bm; however, Blackboard Bold
+requires using the \cmd\mathbb\ command rather than \cmd{\bm}.
+The \classoption{amsfonts} option adds support for bold math
+letters and symbols in smaller sizes and in superscripts when a
+\cmd\bm\marg{symbol} is used.
+For example, \verb+$\pi^{\bm{\pi}}$+ gives a bold
+lowercase pi in the superscript position: $^{\pi\bm{\pi}}$.
+
+Note that \cmd\bm\marg{math} is a fragile command and, thus, should be
+preceded by \cmd\protect\ in commands with moving arguments.
+
+\section{Footnotes}
+\LaTeX's standard \cmd\footnote\ command is available in
+\revtex~4.1. The footnote text can either appear at the bottom of a page or
+as part of the bibliography. This choice can be controlled by two class options:
+\classoption{footinbib} and \classoption{nofootinbib}. \revtex~4.1
+defaults to the former. Specific journal options may select a
+different value than the default.
+
+Please note that even if Bib\TeX\ is not being used for the references, you
+may have to run Bib\TeX\ if you are using footnotes without the \classoption{nofootinbib} option.
+The log file will contain errors about missing references such as \texttt{Note1} in this case and a file ending in
+\texttt{Notes.bib} will have been produced during the processing of the \TeX\ file.
+
+Note that in the latter case, the
+argument of the
+\cmd\footnote\ command is a moving argument in the sense of the \LUG,
+Appendix~C.1.3: any fragile command within that argument must be
+preceded by a \cmd\protect\ command.
+
+The \cmd\footnote\ macro \emph{should not} be used in the front
+matter for indicating author/affiliation relationships or to provide
+additional information about authors (such as an e-mail
+address). See Section~\ref{sec:footau} for the proper way to do
+this.
+
+Finally, footnotes that appear in tables behave differently. They
+will be typeset as part of the table itself. See
+Section~\ref{sec:tablenote} for details.
+
+\section{Citations and References}\label{sec:endnotes}
+
+\revtex~4.1 adds significant new functionality to \revtex~4's
+typesetting of citations and references. The new functionality is
+designed to make it easier to use Bib\TeX\ and produce the desired output
+in the reference section without having to edit Bib\TeX's output. The new features include:
+\begin{itemize}
+\item Endnotes created with the \cmd\footnote\ command are automatically interleaved with the bibliographic references. \revtex~4 would typeset all endnotes at the end of the bibliography.
+\item Combining multiple references automatically into a single entry in the bibliography. \revtex~4 required by-hand editing of Bib\TeX\ output. This is achieved by prepending an asterisk (*) to the reference's \textit{key} in the \cmd\cite\ command. \verb+\cite{{key1,*key2}+ would make a single entry in the bibliography by combining into one \cmd\bibitem\ the entries from the \texttt{.bib} file with keys \textit{key1} and \textit{key2}. See Section~\ref{sec:multiple} for more details.
+\item Text can be prepended or appended to an entry in the bibliography. \revtex~4 required by-hand editing of the Bib\TeX\ output. See Section~\ref{sec:prepend} for an example of how to do this.
+\end{itemize}
+
+Proper formatting of references requires Patrick Daly's \classname{natbib} citation package. \BibTeX\ style files
+for APS and AIP journals are created using his \classname{custom-bib} tool kit. From an author's point of view, all this means is that a proper
+\revtex~4.1 installation requires having \classname{natbib} (version 8.31a
+or higher) installed. It also means that the full set of
+\classname{natbib} functionality is available from within \revtex~4.1
+(but see the \textit{APS Author Guide for \revtex~4.1} and \textit{Author's Guide to AIP Substyles for \revtex~4.1} for restrictions if
+submitting to an APS or AIP journal). The \classname{natbib} documentation contains many examples; see in
+particular the \verb+natnotes.tex+ file for a convenient summary. Please also note that \classname{natbib 8.3} and later now gives an error (rather than merely a warning as in earlier versions) if you try to use a Bib\TeX\ file that isn't compatible with author-year style citations with a journal style that requires author-year citations (such as \textit{Reviews of Modern Physics}).
+
+\subsection{Citing a reference}
+As in standard \LaTeX, references are cited in text using the
+\cmd\cite\marg{key} command and are listed in the bibliography using
+the \cmd\bibitem\marg{key} command. The \cmd\cite{} macro enables
+\revtex~4.1 to automatically number the references in the manuscript.
+
+A typical example might be:
+\begin{verbatim}
+String theory\cite{GSW} attempts to
+provide a theory of everything.
+\end{verbatim}
+The corresponding \cmd\bibitem{} would be:
+\begin{verbatim}
+\bibitem{GSW} M.~Greene, J.~Schwarz, and
+E.~Witten, \textit{Superstring Theory:
+Introduction}, (Cambridge University
+Press, London, 1985).
+\end{verbatim}
+
+Journals differ in how the \cmd\cite\ will be displayed. Most APS journals
+display the citation in-line, as a number, enclosed in square brackets,
+\textit{e.g.}, ``String theory[1] attempts\dots.'' Other journals
+(most notably \textit{Physical Review B})
+instead use a number in a superscript: ``String theory$^{1}$ attempts\dots.''
+Selecting the journal substyle using a class option (such as
+\classoption{prb}) will invoke the appropriate style.
+In journal substyles using superscripts,
+the macro the \cmd\onlinecite\marg{key} is necessary to get the number
+to appear on the baseline.
+For example, ``String theory (see, for example,
+\verb+Ref.~\onlinecite{GSW}+)'' will give the output
+``String theory (see, for example, Ref.~1).''
+
+The \cmd{\onlinecite} command has the same semantics as
+\classname{natbib}'s \cmd{\citealp} command.
+
+A \cmd\cite\ command with multiple keys is formatted with consecutive
+reference numbers collapsed; e.g., [1,2,3,5] will be output as
+[1--3,5]. To split the list over more than one line, use
+a \verb+%+ character immediately following a comma:
+\begin{verbatim}
+. . . \cite{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}
+\end{verbatim}
+The \verb+%+ avoids unwanted spaces.
+
+\subsection{Author/Year (Non-numeric) Citations}
+
+\textit{Reviews of Modern Physics} uses a citation style based on the
+first author's last name and the year of the reference rather than a
+simple number. Support for this style of citing references is the
+primary reason \revtex~4.1 uses the \classname{natbib}
+package. \classname{natbib} uses an optional argument to the
+\cmd\bibitem\ macro to specify what text to use for the \cmd\cite\
+text:
+\begin{quote}
+\cmd\bibitem\verb+[+\meta{short-name}\verb+(+\meta{year}\verb+)+\meta{long-name}\verb+]+
+\end{quote}
+where \meta{short-name} is the author name used in a parenthetical citation,
+\meta{long-name} that used in a textual citation, and
+\meta{year} is the year. More concretely, the \cmd\bibitem\ example
+above would appear as
+\begin{verbatim}
+\bibitem[Greene et al.(1985)Green,
+Schwarz, and Witten]{GSW}
+M.~Greene, J.~Schwarz, and E.~Witten,
+\textit{Superstring Theory},
+(Cambridge Press, London, 1985).
+\end{verbatim}
+
+When the citation constitutes part of the grammar of the sentence,
+the \cmd\textcite\marg{key} command may be used (analogous to the
+\cmd\onlinecite\ command above). Both \cmd\textcite\ and
+\cmd\onlinecite\ are built upon \classname{natbib}'s rich repertoire of
+macros (\cmd\citep{}, \cmd\citet{}, etc.). These macros are available in
+\revtex~4.1; however, APS authors must follow the
+\textit{APS Author Guide for \revtex~4.1}
+guidelines regarding \classname{natbib}'s macros.
+
+\subsection{Combined Author/Year and Numeric Citations}
+
+AIP's \textit{Journal of Mathematical Physics} uses a combined author/year and numerical citation style. \revtex~4.1 supports this referencing style. Please see the \textit{Author's Guide to AIP Substyles for \revtex~4.1} for more information about this style.
+
+\subsection{\label{sec:use-bib}Using Bib\TeX}
+
+The \cmd\bibitem{} entries can be coded by hand as above, of course, but the
+use of \BibTeX\ with the new style files provided with \revtex~4.1 makes
+it particularly simple to generate marked-up references that can, for
+instance, take advantage of packages like
+\classname{hyperref} for linking. They also save the trouble of having
+to specify formatting like the italics for the book title in the above
+example. And, for those wishing to use author/year citations, \BibTeX\
+will automatically generate the appropriate optional arguments for the
+\cmd\bibitem\ commands.
+
+\BibTeX\ is an adjunct to \LaTeX\ that aids in the
+preparation of bibliographies. \BibTeX\ allows authors to build up a
+database or collection of bibliography entries that may be used for many
+manuscripts. A \BibTeX\ style file then specifies how to transform the
+entries into a proper \cmd\bibitem{} for a particular journal. Here we
+give a brief summary of how to get started with \BibTeX. More details can be
+found in the LaTeX books listed in the references.
+
+Selecting a journal style by using an appropriate class option will
+automatically select the correct \BibTeX\ style file from those included in
+\revtex~4.1. Four basic \BibTeX\ style files are included: \file{apsrev4-1.bst} (APS journals using a numeric citation style, \textit{i.e.}, all but RMP), \file{apsrmp4-1.bst} (author/year style citations for RMP),
+\file{aipauth4-1.bst} (AIP journal using an author/year citation style), and \file{aipnum4-1.bst} (AIP journals using a numeric citation style). In addition, there are ``long" versions for each of these that add the titles of cited articles to the bibliography. The selection can be overridden by specifying an
+alternative \file{.bst} file using the standard \LaTeXe
+\cmd\bibliographystyle\ macro. This must appear in the preamble
+before the \envb{document} line in \revtex~4.1 (this differs from
+standard \LaTeX).
+
+The \BibTeX\ database files will contain entries such as:
+\begin{verbatim}
+@Book{GSW,
+ author=``M. Greene, J. Schwarz,
+ E. Witten'',
+ title=``Superstring theory:
+ Introduction'',
+ publisher=``Cambridge University
+ Press'',
+ address=``London'',
+ year=``1985''
+}
+\end{verbatim}
+There are entry formats for articles, technical reports, e-prints,
+theses, books, proceedings, and articles that appear in books or
+proceedings. The styles provided with
+\revtex~4.1 also allows URL's and e-print identifiers to be specified
+for any of the different entry types. There is also an additional
+``collaboration'' field that can be used in addition to ``author'.'
+
+To actually create the bibliography in the manuscript, the
+\cmd\bibliography\marg{bib files} macro is used.
+Here \meta{bib files} is a comma-separated list of \BibTeX\ bibliography
+database files, each with the \file{.bib} extension. The
+\cmd\bibliography\ macro should be placed at the location where the
+references are to appear (usually after the main body of the
+paper). When the manuscript is processed with \LaTeX\ for the first
+time, the keys corresponding for the \cmd\cite{} macros used in the
+manuscript are written out to the \file{.aux} file. Then \BibTeX\ should
+be run (if the manuscript is called \file{paper.tex}, the command would
+be \verb+bibtex paper+. This will produce a \file{.bbl} file containing all
+of the \cmd\bibitem{}'s for the manuscript. Subsequent runs of \LaTeXe\
+will call this file in to resolve the references. \LaTeXe\ should be run
+repeatedly until all references are resolved.
+
+The \BibTeX-produced \cmd\bibitem{}'s created using the \revtex\ style files appear considerably more complex than the example given
+above. This is because the style files add in \cmd\bibinfo{},
+\cmd\bibnamefont{}, \cmd\eprint{}, and \cmd\url{} macros for
+specifying additional formatting and tagging. The \cmd\bibinfo\ macro
+is mostly a do-nothing macro that serves merely to tag the information with
+the field information from the original entry in the \BibTeX\ database.
+The \cmd\eprint\ and \cmd\url\ macros can be used to create the
+appropriate hyperlinks in target formats such as PDF.
+
+For more information on using \BibTeX\ with \LaTeX, see Sections~4.3.1
+and~C.11.3 of the \LUG\cite{LaTeXman}, Section~13.2 of \cite{Compan},
+or the online \BibTeX\ manual \file{btxdoc.tex} from
+\url{http://www.ctan.org/tex-archive/biblio/bibtex/distribs/doc/}.
+
+\subsubsection{\texttt{arXiv.org} support in Bib\TeX}
+
+
+\revtex~4.1 has better support for citing e-prints from \texttt{arXiv.org} For instance, the \texttt{.bib} entry
+\begin{verbatim}
+@Unpublished{Ginsparg:1988ui,
+ author = "Ginsparg, Paul H.",
+ title = "{Applied Conformal Field Theory}",
+ year = "1988",
+ eprint = "hep-th/9108028",
+ archivePrefix = "arXiv",
+ SLACcitation = "%%CITATION=HEP-TH/9108028;%%"
+}
+\end{verbatim}
+will include the arXiv.org e-print identifier as \texttt{arXiv:hep-th/9108028} and hyperlink it (if using \texttt{hyperref}). The newer format for arXiv identifiers with primary classificiations will produce output such as \texttt{arXiv:0905.1949 [hep-ph]}.
+
+
+
+\subsection{\label{sec:multiple}Multiple references in a single bibliography entry}
+One of the most frequently requested features since the release of \revtex~4 has been to allow more than one reference to appear in a single bibliography entry when using Bib\TeX. This can now be done in \revtex~4.1 by using a starred (*) argument to the \cmd\cite\ command. This requires the latest version of \texttt{natbib}, developed in conjunction with \revtex~4.1, and the new \texttt{bst} files that come with \revtex~4.1. To combine multiple references into a single \cmd\bibitem, precede the second, third, etc. citation keys in the \cmd\cite\ command with an asterisk (*). For example \verb+\cite{bethe, *feynman, *bohr}+ will combine the \cmd\bibitem\relax s with keys \texttt{bethe}, \texttt{feynman}, and \texttt{bohr} into a single entry in the bibliography separated by semicolons.
+
+\subsection{\label{sec:prepend}Prepending and/or appending text to a citation}
+The expanded syntax for the \cmd\cite\ command argument can also be used to specify text before and/or after a citation. For instance, a citation such as:
+\begin{verbatim}
+[19] A similar expression was derived in
+A. V. Andreev, Phys. Rev. Lett. 99, 247204
+(2007) in the context of carbon nanotube
+p-n junctions. The only difference is that no
+integration over ky is present there.
+\end{verbatim}
+may be created by the following \cmd\cite\ command:
+\begin{verbatim}
+\cite{*[{A similar expression was derived
+in }] [{ in the context of carbon nanotube
+p-n junctions. The only difference is that
+no integration over ky is present
+there.}] andreev2007}
+\end{verbatim}
+Please note the use of curly braces to enclose the text within the square brackets as well as the spaces next to the brackets.
+
+\section{Figures and Artwork}\label{sec:figures}
+\subsection{\texttt{figure} environment}
+
+Figures may be included into a \revtex~4.1 manuscript by using the
+standard \LaTeXe\ macros. It should be noted that \LaTeXe\ includes
+several powerful packages for including the files in various
+formats. The two main packages are \classname{graphics} and
+\classname{graphicx}. Both offer a macro called
+\cmd\includegraphics\oarg{args}\marg{filename};
+they mainly differ in how arguments for
+controlling figure scaling, translation, and orientation
+are specified. For more information on the enhancements of the \classname{graphicx} package,
+see \cite{CompanG} or the guide \file{grfguide.pdf} available at
+\url{http://www.ctan.org/tex-archive/macros/latex/required/graphics/}.
+\revtex~4.1 no longer has the \classoption{epsf} class option, though
+the \classname{epsfig} package provides a similar interface.
+
+
+The \env{figure} environment should be used to add a caption to the figure and
+to allow \LaTeX\ to number and place the figures where they fit best.
+\LaTeX\ will label and automatically number the captions FIG.~1,
+FIG.~2, etc. For example:
+\begin{verbatim}
+\begin{figure}
+ \includegraphics{fig1.eps}
+ \caption{\label{fig1}Text of first caption.}
+\end{figure}
+\end{verbatim}
+Note how the \cmd\label\marg{key} command is used to cross-reference
+figures in text. The \cmd\label\marg{key} command should be inserted
+inside the figure caption. As usual, the \cmd\ref\marg{key} macro can
+then by used to refer to the label: ``As depicted in
+FIG.\verb+~\ref{fig1}+\dots''.
+
+Figures are normally set to the width of the column in
+which they are placed. This means that in two-column mode, the figure
+will be placed in a single, narrow column. For wide figures, the
+\cmd\figure\verb+*+ environment should be used
+instead. This will place the figure across both columns (the figure
+usually will
+appear either at the top or the bottom of the following page).
+
+
+Captions less than one line long are centered under the figure,
+otherwise they span the width of the figure.
+
+Note that is unnecessary (and undesirable) to use explicit centering
+commands inside the float environments.
+
+\subsection{\texttt{video} environment}
+Papers often refer to multimedia material such as videos. The \texttt{video} environment is identical to the \texttt{figure} environment, but the caption will be labeled as a \textbf{Video} (with its own counter independent of figures). A URL can also be specified so that the caption label can be linked to the online video (if using the \texttt{hyperref} package). The included graphic (using \cmd\includegraphics\ from the \texttt{graphics} or \texttt{graphicx} package) would be a representation frame from the video. A \texttt{\cmd\listofvideos} is also provided. For example:
+\begin{verbatim}
+\begin{video}
+\includegraphics{videoframe.jpg}
+\setfloatlink{http://some.video.com/fun.mov}
+\caption{\label{vid:interest}This is a video
+of something fun.}
+\end{video}
+\end{verbatim}
+There is also a corresponding \cmd\listofvideos\ command.
+
+\section{Tables}\label{sec:tables}
+
+Tables are very similar to figures. They should be input using the
+\env{table} environment as detailed below, and
+\LaTeX\ will label and number the captions TABLE~1, TABLE~2, etc.
+(or in whatever format required by the chosen journal
+substyle). Tables without captions won't be numbered.
+
+Each table must begin with \envb{table}, end with \enve{table}. A
+caption can be specified using the \cmd\caption\marg{text} command.
+Captions less than one line long are centered under the figure,
+otherwise they span the width of the figure.
+To refer to the table via cross-referencing, a \cmd\label\marg{key}
+command should appear within the \cmd{\caption}. Use the
+\cmd\ref\marg{key} command to cite tables in text. The \env{table}
+environment will set the table to the width of the column. Thus, in
+two-column mode, the table will be confined to a single column. To set a
+table to the full width of the page, rather than the column, use the
+\env{table*} environment.
+
+The heart of the table is the
+\env{tabular} environment. This will behave for the most part as in
+standard \LaTeXe\ (please refer to Section~3.6.3 and Appendix~C.10.2 of the
+\LUG{} for more details about the \env{tabular} environment).
+Note that \revtex~4.1 no longer automatically adds double (Scotch) rules
+around tables. Nor does the \env{tabular} environment set various
+table parameters for column spacing as before. Instead, a new
+environment \env{ruledtabular} provides this functionality. This
+environment should surround the \env{tabular} environment:
+\begin{verbatim}
+\begin{table}
+\caption{\label{<key>}....}
+\begin{ruledtabular}
+\begin{tabular}
+...
+\end{tabular}
+\end{ruledtabular}
+\end{table}
+\end{verbatim}
+
+A basic table looks as follows:
+\begin{verbatim}
+\begin{table}
+\caption{\label{tab:example}Text of table caption.}
+\begin{ruledtabular}
+\begin{tabular}{ll}
+ Heading 1 & Heading 2\\
+ Cell 1 & Cell 2\\
+\end{tabular}
+\end{ruledtabular}
+\end{table}
+\end{verbatim}
+
+The \env{quasitable} environment is no longer in \revtex~4.1. The
+standard \env{tabular} environment can be used instead because it
+no longer puts in the double rules.
+
+\subsection{Aligning on a decimal point}
+Numerical columns should align on the decimal point (or
+decimal points if more than one is is present). This is accomplished
+by again using a standard \LaTeXe\ package, \classname{dcolumn} which
+must be loaded in the manuscript's preamble:
+\begin{verbatim}
+\usepackage{dcolumn}
+\end{verbatim}
+Once this package is loaded, the column specifier `\texttt{d}' can be
+used in the table's \env{tabular}\marg{preamble} enviroment preamble.
+The `\texttt{d}' should be used for simple numeric data with a single
+decimal point.
+%
+The entry of a \texttt{d} column is typeset in math mode; do not
+insert any \verb+$+ math delimiters into a `\texttt{d}' column. Items
+without a decimal point are simply set in math mode, centered. If
+text is required in the column, use \cmd\text\ or \cmd\mbox\ as
+appropriate. If multiple decimal points are present then the last is
+used for alignment. To escape from the `\texttt{d}' column use
+\cmd\multicolumn\ as usual. See the sample file \file{apssamp.tex} for examples.
+
+\subsection{Footnotes in Tables}\label{sec:tablenote}
+
+Footnotes in a table are labeled \emph{a}, \emph{b}, \emph{c},
+etc. They can be specified by using the \LaTeX\ \cmd\footnote\
+command. Furthermore,
+\cmd\footnotemark\ and \cmd\footnotetext\ can be used so that multiple entries
+can to refer to the same footnote. The footnotes for a table are typeset
+at the bottom of the table, rather than at the bottom of the page or
+at the end of the references. The arguments for \cmd\footnotemark\ and
+\cmd\footnotetext\ should be numbers 1, 2, \dots. The journal style
+will convert these to letters. See sample file \file{apssamp.tex} for
+examples and explanations of use.
+
+\subsection{Dealing with Long Tables}
+By default, tables are set in a smaller size than the text body
+(\cmd\small). The \cmd\squeezetable\ declaration makes the table font
+smaller still (\cmd\scriptsize). Thus, putting the
+\cmd\squeezetable\ command before the \envb{table} line in a table
+will reduce the font size. If this isn't sufficient to fit
+the table on a page, the standard \LaTeXe\ \classname{longtable}
+package may be used. The scope of the
+\cmd\squeezetable\ command must be limited by enclosing it with a group:
+\begin{verbatim}
+\begingroup
+\squeezetable
+\begin{table}
+[...]
+\end{table}
+\endgroup
+\end{verbatim}
+
+Tables are normally set to the width of the column in
+which they are placed. This means that in two-column mode, the table
+will be placed in a single, narrow column. For wide tables, the
+\cmd\table\verb+*+ environment should be used
+instead. This will place the table across both columns (the table
+usually will
+appear either at the top or the bottom of the following page).
+
+
+To break tables across pages, \revtex~4.1requires adding to the
+table a float placement option of [H] (meaning put the table ``here''
+and effectively ``unfloating'' the table) to the \envb{table}
+command. The commands \verb+\\*+ and \cmd{\samepage} can be used to
+control where the page breaks occur (these are the same as for the
+\env{eqnarray} environment).
+
+Long tables are more robustly handled by using the
+\classname{longtable.sty} package included with the standard \LaTeXe\
+distribution (put \verb+\usepackage{longtable}+ in the preamble). This
+package gives precise control over the layout of the table.
+The \revtex~4.1 package contains patches that enable the
+\classname{longtable} package to work in two-column mode. Of course, a
+table set in two-column mode needs to be narrow enough to fit within
+the column. Otherwise, the columns may overlap. \revtex~4.1 provides
+an additional environment \env{longtable*} which allows a longtable to
+span the whole page width. Currently, the \env{longtable*} and
+\env{ruledtabular} environments are incompatible. In order to get the
+double (Scotch) rule, it is necessary to add the \verb+\hline\hline+
+manually (or define \verb+\endfirsthead+ and \verb+\endlastfoot+
+appropriately). For more documentation on the \env{longtable}
+environment and on the package options of the
+\classname{longtable} package, please see the documentation available at
+\url{http://www.ctan.org/macros/latex/required/tools/longtable.dtx} or
+refer to \cite{Compan}.
+
+\section{Placement of Figures, Tables, and Other Floats}
+\label{sec:place}
+
+By default, figures and tables (and any other ``floating'' environments
+defined by other packages) float to the top or bottom of the page
+using the standard \LaTeX\ float placement mechanism. Initially, each
+\env{figure} or \env{table} environment should be put immediately
+following its first reference in the text; this will usually result in
+satisfactory placement on the page. An optional argument for either
+environment adjusts the float placement. For example:
+\begin{quote}
+\envb{figure}\oarg{placement}\\
+\dots\\
+\enve{figure}
+\end{quote}
+where \meta{placement} can be any combination of \verb|htbp!|, signifying
+``here'', ``top'', ``bottom'', ``page'', and ``as soon as possible'',
+respectively. The same placement argument may be added to a
+\envb{table}. For more details about float placement,
+see the instructions in the \LUG, Appendix~C.9.1.
+
+In two-column mode, a page may contain both a \env{widetext}
+environment and a float. \revtex~4.1 may not always be able to
+automatically put the float in the optimal place. For instance, a
+float may be placed at the bottom of a column just before the
+\env{widetext} begins. To workaround this, try moving the float
+environment below the \env{widetext} environment. Alternative
+\meta{placements} may also alleviate the problem.
+
+\env{figure} and \env{table} environments should not
+be enclosed in a \env{widetext} environment to make them span
+the page to accommodate wide figures or tables. Rather, the
+\env{figure*} or \env{table*} environments should be used instead.
+
+Sometimes in \LaTeX\ the float placement mechanism breaks down and a
+float can't be placed. Such a ``stuck'' float may mean that it and all
+floats that follow are moved to the end of the job (and if there are
+too many of floats, the fatal error \texttt{Too many unprocessed floats}
+will occur). \revtex~4.1 provides the class option
+\classoption{floatfix} which attempts to invoke emergency float
+processing to avoid creating a ``stuck'' float. \revtex~4.1 will provide
+a message suggesting the use of
+\classoption{floatfix}. If \classoption{floatfix} doesn't work or if
+the resulting positioning of the float is poor, the float should be
+repositioned by hand.
+
+\revtex~4.1 offers an additional possibility for placing the floats. By
+using the either the \classoption{endfloats} or the
+\classoption{endfloats*} class option all floats may be held
+back (using an external file) and then set elsewhere in the document
+using the the commands \cmd\printtables\ and \cmd\printfigures{},
+placed where the tables and figures are to be printed (usually at the
+end of the document). (This is similar to the standard
+\cmd\printindex\ command). Using a \texttt{*}-form of the commands
+(\cmd\printfigures\verb+*+ and
+\cmd\printtables\verb+*+) will begin the figures
+or tables on a new page. Alternatively, the option
+\classoption{endfloats*} may be used to change the behavior of the
+non-\texttt{*}-forms so that every float will appear on a separate
+page at the end.
+
+Without one of the \classoption{endfloats} class options, these float
+placement commands are silently ignored, so it is always safe to use
+them. If one of the \classoption{endfloats} class options is given,
+but the \cmd\printtables\ command is missing, the tables will be
+printed at the end of the document. Likewise, if \cmd\printfigures\ is
+missing, the figures will be printed at the end of the document.
+Therefore it is also safe to omit these commands as long as \revtex's
+default choices for ordering figures and tables are satisfactory.
+
+The \classoption{endfloats} option (or perhaps some journal substyle
+that invokes it), requires explicit \envb{figure}, \enve{figure},
+\envb{table}, and \enve{table} lines. In particular, do \emph{not}
+define typing shortcuts for table and figure environments, such as
+\begin{verbatim}
+\def\bt{\begin{table}}% Incompatible!
+\def\et{\end{table}}%
+\end{verbatim}
+
+Please note that it is generally undesirable to have all floats moved
+to the end of the manuscript. APS no longer requires this for
+submissions. In fact, the editors and referees will have an easier time
+reading the paper if the floats are set in their normal positions.
+
+\section{Rotating Floats}
+
+Often a figure or table is too wide to be typeset in the standard
+orientation and it is necessary to rotate the float 90
+degrees. \revtex~4.1 provides a new environment \env{turnpage} as an
+easy means to accomplish this. The \env{turnpage} environment depends
+on one of the packages \classname{graphics} or \classname{graphicx}
+being loaded. To use the \env{turnpage} environment, simply enclose
+the \env{figure} or \env{table} environment with the \env{turnpage}
+environment:
+\begin{verbatim}
+\documentclass[...]{revtex4}
+\usepackage{graphicx}
+[...]
+\begin{turnpage}
+\begin{figure} or \begin{table}
+[...]
+\end{figure} or \end{table}
+\end{turnpage}
+\end{verbatim}
+A turnpage float will be typeset on a page by itself. Currently, there
+is no mechanism for breaking such a float across multiple pages.
+
+\section{\revtex~4.1 symbols and the \classname{revsymb4-1} package}
+
+Symbols made available in earlier versions of \revtex\ are
+defined in a separate package, \classname{revsymb4-1},
+so that they may be used with other classes.
+This might be useful if, say, copying text from a \revtex\ document to
+a non-\revtex\ document. \revtex~4.1 automatically includes these
+symbols so it is not necessary to explicitly call them in with a
+\cmd\usepackage\ statement.
+
+Table~\ref{tab:revsymb} summarizes the symbols defined in this package.
+Note that \cmd{\overcirc}, \cmd{\overdots}, and \cmd{\corresponds} are
+no longer in \revtex~4.1. Use \cmd{\mathring} (standard in \LaTeXe),
+\cmd{\dddot} (with the \classoption{amsmath} package loaded), and
+\cmd\triangleq\ (with the \classoption{amssymb} class option) respectively.
+\cmd{\succsim}, \cmd{\precsim}, \cmd{\lesssim}, and \cmd{\gtrsim} are
+also defined either in \classname{amsmath} or \classname{amssymb}. The
+AMS versions of these commands will be used if the appropriate AMS
+package is loaded.
+
+\begin{table}
+\caption{\label{tab:revsymb}Special \revtex~4.1 symbols, accents, and
+boldfaced parentheses defined in \file{revsymb.sty}}
+\begin{ruledtabular}
+\begin{tabular}{ll|ll}
+\cmd\lambdabar & $\lambdabar$ &\cmd\openone & $\openone$\\
+\cmd\altsuccsim & $\altsuccsim$ & \cmd\altprecsim & $\altprecsim$ \\
+\cmd\alt & $\alt$ & \cmd\agt & $\agt$ \\
+\cmd\tensor\ x & $\tensor x$ & \cmd\overstar\ x & $\overstar x$ \\
+\cmd\loarrow\ x & $\loarrow x$ & \cmd\roarrow\ x & $\roarrow x$ \\
+\cmd\biglb\ ( \cmd\bigrb ) & $\biglb( \bigrb)$ &
+\cmd\Biglb\ ( \cmd\Bigrb )& $\Biglb( \Bigrb)$ \\
+& & \\
+\cmd\bigglb\ ( \cmd\biggrb ) & $\bigglb( \biggrb)$ &
+\cmd\Bigglb\ ( \cmd\Biggrb\ ) & $\Bigglb( \Biggrb)$ \\
+\end{tabular}
+\end{ruledtabular}
+\end{table}
+
+\section{Other \revtex~4.1 Features}
+%\subsection{Hooks}
+%To be written....
+
+\subsection{Job-specific Override Files}
+\revtex~4.1 allows manuscript-specific macro definitions to be put
+in a file separate from the main \TeX\ file. One merely creates a file
+with the same basename as the \TeX\ file, but with the extension
+`.rty'. Thus, if the \TeX\ file is names man.tex, the macro
+definitions would go in man.rty. Note that the .rty file should be in
+the same directory as the \TeX\ file. APS authors should follow the
+guidelines in the \textit{APS Author Guide for \revtex~4.1} when
+submitting. Similarly, AIP authors should refer to the \textit{Author's Guide to AIP Substyles for \revtex~4.1}
+
+
+\begin{thebibliography}{}\label{sec:TeXbooks}
+\bibitem[Knuth(1986)]{TeXbook} D.E. Knuth, \emph{The \TeX book},
+(Addison-Wesley, Reading, MA, 1986).
+\bibitem[Lamport(1996)]{LaTeXman} L. Lamport, \emph{\LaTeX, a Document
+Preparation System}, (Addison-Wesley, Reading, MA, 1996).
+\bibitem[Kopka(1995)]{Guide} H. Kopka and P. Daly, \emph{A Guide to
+\LaTeXe}, (Addison-Wesley, Reading, MA, 1995).
+\bibitem[Goossens(1994)]{Compan} M. Goossens, F. Mittelbach, and
+A. Samarin, \emph{The \LaTeX\
+Companion}, (Addison-Wesley, Reading, MA, 1994).
+\bibitem[Goossens(1997)]{CompanG} M. Goossens, S. Rahtz, and
+F. Mittelbach, \emph{The
+\LaTeX\ Graphics Companion}, (Addison-Wesley, Reading, MA, 1997).
+\bibitem[Rahtz(1999)]{CompanW} S. Rahtz, M. Goossens, \emph{et
+al.},\emph{The \LaTeX\ Web Companion}, (Addison-Wesley, Reading, MA, 1999).
+\end{thebibliography}
+
+\end{document}
+
diff --git a/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/auguide/docs.sty b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/auguide/docs.sty
new file mode 100644
index 0000000000..f401506cb6
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/auguide/docs.sty
@@ -0,0 +1,129 @@
+% authguide.rty - macros for processing revguide.tex under \documentclass{revtex4}
+% Text entities
+\DeclareRobustCommand\SNG{\emph{Physical Review Style and Notation Guide}}
+\DeclareRobustCommand\LUG{\emph{\LaTeX{} User's Guide \& Reference Manual}}
+\DeclareRobustCommand\revtex{REV\TeX}
+\DeclareRobustCommand\marglat{\marginpar[\textbf{2e}]{\textbf{2e}}}
+\DeclareRobustCommand\margrev{\marginpar[\textbf{4}]{\textbf{4}}}
+\DeclareRobustCommand\AmS{%
+ {\protect\the\textfont\tw@ A\kern-.1667em\lower.5ex\hbox{M}\kern-.125emS}%
+}%
+\DeclareRobustCommand\AmSLaTeX{\AmS-\LaTeX}
+\DeclareRobustCommand\BibTeX{{\rm B}{\sc ib}\TeX}
+%
+% Various forms of self-indexing commands:
+% \begin{macrocode}
+\DeclareRobustCommand{\m}[1]{%
+ \meta{#1}%
+ \index{#1=\string\meta{#1} placeholder}\index{placeholder>#1=\string\meta{#1}}%
+}%
+\DeclareRobustCommand\meta[1]{%
+ \mbox{\m@th\LANGLE\itshape#1\/\RANGLE}%
+}%
+\def\LANGLE{$\langle$}%
+\def\RANGLE{$\rangle$}%
+\DeclareRobustCommand{\marg}[1]{%
+ {\ttfamily\string{}\meta{#1}{\ttfamily\string}}%
+ \index{#1=\string\ttt{#1}, argument}\index{argument>#1=\string\ttt{#1}}%
+}%
+\DeclareRobustCommand{\aarg}[1]{%
+ {\ttfamily\string{}#1{\ttfamily\string}}%
+}%
+\let\oarg\undefined
+\DeclareRobustCommand{\oarg}[1]{%
+ {\ttfamily[%]
+ }\meta{#1}{\ttfamily%[
+ ]}%
+ \index{#1=\string\ttt{#1}, optional argument}%
+ \index{argument, optional>#1=\string\ttt{#1}}%
+}%
+\DeclareRobustCommand\cmd{\begingroup\makeatletter\@cmd}%
+\long\def\@cmd#1{%
+ \endgroup
+ \cs{\expandafter\cmd@to@cs\string#1}%
+ \expandafter\cmd@to@index\string#1\@nil
+}%
+\def\cmd@to@cs#1#2{\char\number`#2\relax}%
+\def\cmd@to@index#1#2\@nil{%
+ \index{#2=\string\cmd#1#2}%\index{command>#2=\string\cmd#1#2}%
+}%
+\DeclareRobustCommand\cs[1]{{\ttfamily\char`\\#1}}%
+\def\scmd#1{%
+ \cs{\expandafter\cmd@to@cs\string#1}%
+ \expandafter\scmd@to@index\string#1\@nil
+}%
+\def\scmd@to@index#1#2\@nil#3{%
+ \index{\string$#3=\string\cmd#1#2---#3}%
+%\index{command>\string$#3=\string\cmd#1#2---#3}%
+}%
+\DeclareRobustCommand\env{\name@idx{environment}}%
+\DeclareRobustCommand\envb[1]{%
+ {\ttfamily\string\begin\string{}\env{#1}{\ttfamily\string}}%
+}%
+\DeclareRobustCommand\enve[1]{{\ttfamily\string\end\string{}\env{#1}{\ttfamily\string}}}%
+\DeclareRobustCommand*{\file}[1]{%
+ {\ttfamily#1}%
+ \index{#1=\string\ttt{#1}}\index{file>#1=\string\ttt{#1}}%
+}%
+\DeclareRobustCommand\substyle{\name@idx{document substyle}}%
+\DeclareRobustCommand\classoption{\name@idx{document class option}}%
+\DeclareRobustCommand\classname{\name@idx{document class}}%
+\def\name@idx#1#2{%
+ {\ttfamily#2}%
+ \index{#2\space#1=\string\ttt{#2}\space#1}\index{#1>#2=\string\ttt{#2}}%
+}%
+%
+% Needed for index:
+%
+\def\ttt{\texttt}%
+\def\pfill{\ }%
+\def\efill{\ }%
+\let\scan@allowedfalse\relax
+%\makeindex
+\AtEndDocument{\@input@{\jobname.ind}\null}%
+%
+% Processing options
+%
+%
+% Layout: override revtex4|aps
+\c@secnumdepth2
+\prepdef\@verbatim{\topsep.5\baselineskip}%
+\renewenvironment{quotation}{%
+ \list{}{%
+ \listparindent 10\p@
+ \itemindent\listparindent
+ \leftmargin10\p@
+ \rightmargin\leftmargin
+ \parsep \z@ \@plus\p@
+ \small
+ }%
+ \item[]%
+}{%
+ \endlist
+}%
+\renewenvironment{quote}{%
+ \list{}{%
+ \leftmargin\z@
+ \rightmargin\leftmargin
+ }\item[]%
+}{%
+ \endlist
+}%
+\leftmargini\parindent
+\def\descriptionlabel#1{%
+ \hspace\labelsep\ignorespaces
+ #1\unskip
+}%
+\def\toprule{\hline\hline\frstrut}%
+\def\colrule{\hline\frstrut}%
+\def\frstrut{\vrule height2.5ex width\z@ depth\z@\relax}%
+\def\lrstrut{\vrule height\z@ width\z@ depth.5ex\relax}%
+%
+% Klootches
+%
+\let\savenofiles\nofiles
+%
+% Patches:
+%
+%
+\endinput
diff --git a/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/auguide/summary4-1.pdf b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/auguide/summary4-1.pdf
new file mode 100644
index 0000000000..77d0e0d640
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/auguide/summary4-1.pdf
Binary files differ
diff --git a/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/auguide/summary4-1.tex b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/auguide/summary4-1.tex
new file mode 100644
index 0000000000..a8957e67d5
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/auguide/summary4-1.tex
@@ -0,0 +1,370 @@
+%% ****** Start of file summary4-1.tex ****** %
+%%
+%% This file is part of the APS files in the REVTeX 4 distribution.
+%% Version 4.1r of REVTeX, August, 2010
+%%
+%% Copyright (c) 2000, 2001, 2009, 2010 The American Physical Society.
+%%
+%% See the REVTeX 4.1 README file for restrictions and more information.
+%%
+\listfiles
+\documentclass[%
+twocolumn,secnumarabic,amssymb, amsmath, nofootinbib,tightenlines,
+nobibnotes, aps,
+prl,
+%outputdebug,
+]{revtex4-1}
+%\usepackage{amsmath}%
+\usepackage{longtable}%
+\usepackage{bm}%
+\usepackage{docs}
+%\usepackage[colorlinks=true,linkcolor=blue]{hyperref}%
+%\nofiles
+\expandafter\ifx\csname package@font\endcsname\relax\else
+ \expandafter\expandafter
+ \expandafter\usepackage
+ \expandafter\expandafter
+ \expandafter{\csname package@font\endcsname}%
+\fi
+
+\begin{document}
+
+\title[Command Option Summary]{\revtex~4.1 Command and Options Summary}%
+
+\author{American Physical Society}%
+\email{revtex4@aps.org}
+\affiliation{One Research Road, Ridge, NY 11961}
+\date{August 2010}%
+\maketitle
+
+This is the \textit{\revtex~4.1 Command and Options Summary}. It details
+usage for many of the new commands and options that are available in
+\revtex~4. Please see the \textit{\revtex~4.1 Author's Guide} for
+complete information on how to use \revtex~4.1. Class options for the
+\verb+\documentclass+ line are marked with square
+brackets. Environments are indicated by \verb+\begin{<env>}+ and always
+require a matching \verb+\end{<env>}+.
+
+\setlength\LTleft{0pt}
+\setlength\LTright{0pt}
+%
+\begin{longtable*}{@{\extracolsep{0in}}p{3in}p{4in}}
+\caption{\label{tab:summary}\revtex~4.1 Command Summary}\\*
+%
+\noalign{\vspace{3pt}}%
+\toprule\rule{0pt}{12pt}
+\textbf{\revtex~4/\LaTeXe\ Markup}&\textbf{Details and Usage}\\*[3pt]
+\endfirsthead
+%
+\multicolumn{2}{c}{TABLE~\ref{tab:summary} (continued): \revtex~4.1 Command Summary}%
+\rule{0pt}{12pt}\\[3pt]
+\colrule\rule{0pt}{12pt}
+\textbf{\revtex~4/\LaTeXe\ Markup}&\textbf{Details and Usage}\\*[3pt]
+\endhead
+%
+\noalign{\nobreak\vspace{3pt}}%
+\colrule
+\endfoot
+%
+\noalign{\nobreak\vspace{3pt}}%
+\botrule
+\endlastfoot
+%
+\multicolumn{2}{c}{\textsc{Frequently Used Class Options}\rule[-6pt]{0pt}{18pt}}\\*
+\verb+[aps]+ & \textit{American Physical Society} styling. Default.\\
+\verb+[aip]+ & \textit{American Institute of Physics} styling.\\
+\verb+[prl]+, \verb+[pra]+, \verb+[prb]+, \verb+[prc]+, \verb+[prd]+, \verb+[pre]+, \verb+[prstab]+, \verb+[prstper]+, \verb+[rmp]+& Further customize \verb+[aps]+ styling for APS journals.\\
+\verb+[apl]+, \verb+[bmf]+, \verb+[cha]+, \verb+[jap]+, \verb+[jcp]+, \verb+[jmp]+, \verb+[rse]+, \verb+[pof]+, \verb+[pop]+, \verb+[rsi]+& Further customize \verb+[aip]+ styling for AIP journals.\\
+%\verb+[rmp]+ & Further customize \verb+[aps]+ styling for \textit{Reviews of Modern Physics}.\\
+\verb+[twocolumn]+ & Two-column formatting.\\
+\verb+[onecolumn]+ & Single-column formatting.\\
+\verb+[preprint]+ & Single-column formatting with increased interline spacing.\\
+\verb+[reprint]+ & Closely approximate a given journal's style. Can be either single or two-column formatting depending on the journal.\\
+\verb+[10pt]+, \verb+[11pt]+, \verb+[12pt]+ & Set font size. \verb+[preprint]+ gives \verb+[12pt]+, \verb+[twocolumn]+ gives
+\verb+[10pt]+ by default.\\
+\verb+[groupedaddress]+ & Group authors with same affiliations together. Default. \\
+\verb+[superscriptaddress]+ & Associate authors with affiliations via superscript numbers. Appropriate for collaborations or if several authors share some, but not all, affiliations.\\
+\verb+[draft]+ & Mark overfull lines.\\
+\verb+[linenumbers]+ & Number lines (requires lineno.sty).\\
+\verb+[longbibliography]+ & Use alternative Bib\TeX\ style files that show journal article titles in the bibliography.\\
+\verb+[amsfonts]+, \verb+[noamsfonts]+ & Load (don't load)
+\verb+amsfonts+ package. Adds AMS font support.\\
+\verb+[amssymb]+, \verb+[noamssymb]+ & Load (don't load)
+\verb+amssymb+ package. Adds additional AMS symbols.\\
+\verb+[amsmath]+, \verb+[noamsmath]+ & Load (don't load)
+\verb+amsmath+ package. Adds AMS-\LaTeX\ features.\\
+%
+\multicolumn{2}{c}{\textsc{Other Class Options}\rule[-6pt]{0pt}{18pt}}\\*
+\verb+[preprintnumbers]+, \verb+[nopreprintnumbers]+ & Control display of preprint numbers given by \verb+\preprint+ command. \verb+[preprintnumbers]+ is default for \verb+[preprint]+; otherwise \verb+[nopreprintnumbers]+ is default.\\
+\verb+[floatfix]+ & Invoke emergency processing to avoid the \LaTeX\ error \verb+``Too many unprocessed floats''+ or all subsequent floats being moved to the end of the job. \revtex~4 will display a message recommending this option if warranted.\\
+\verb+[bibnotes]+, \verb+[nobibnotes]+ & Control location of author footnotes. Default varies with journal style.\\
+\verb+[footinbib]+, \verb+[nofootinbib]+ & Control location of footnotes. Default varies with journal style.\\
+\verb+[altaffilletter]+, \verb+[altaffillsymbol]+ & Use letters or symbols for
+\verb+\altaffiliation+ superscripts. \verb+[altaffillsymbol]+ is default.\\
+\verb+[unsortedaddress]+ & Like \verb+[groupedaddress]+, but doesn't combine authors together who share the same affiliations.\\
+\verb+[runinaddress]+ & Like \verb+[groupedaddress]+, but joins multiple affiliations together into a single sequence separated by commas.\\
+\verb+[showpacs]+, \verb+[noshowpacs]+ & Control display of PACS: line.\\
+\verb+[showkeys]+, \verb+[noshowkeyws]+ & Control display of Keywords: line.\\
+\verb+[tightenlines]+ & Single space manuscript (for use with \verb+[preprint]+).\\
+\verb+[floats]+ & Position floats near call outs. Default.\\
+\verb+[endfloats]+ & Move all floats to the end of the document.\\
+\verb+[endfloats*]+ & Move all floats to the end of the document and put each on a separate page.\\
+\verb+[titlepage]+, \verb+[notitlepage]+ & Control appearance of title page.\\
+\verb+[final]+ & Don't mark overfull lines. Default.\\
+\verb+[letterpaper]+, \verb+[a4paper]+, \verb+[a5paper]+ & Select paper size. \verb+[letterpaper]+ is default.\\
+\verb+[oneside]+, \verb+[twoside]+ & Control book syle layout. \verb+[oneside]+ is default.\\
+\verb+[fleqn]+ & Flush displayed equations left. \\
+\verb+[eqsecnum]+ & Number equations by section.\\
+\verb+[balancelastpage]+, \verb+[nobalancelastpage]+ & Control
+\verb+[twocolumn]+ balancing on last page. \verb+[balancelastpage]+ is default.\\
+\verb+[raggedbottom]+, \verb+[flushbottom]+ & Control \verb+[twocolumn]+ balancing. \verb+[flushbottom]+ is default.\\
+\verb+[raggedfooter]+, \verb+[noraggedfooter]+ & Control positioning of footer. \verb+[noraggedfooter]+ is default.\\
+\verb+[byrevtex]+ & Display ``Typeset by \revtex~4''.\\
+\verb+[citeautoscript]+ & Fix up spacing and punctuation when switching from non-superscript style citations to superscript citation styles. \verb+\cite+ commands and associated spacing and punctuation should be as for the non-superscript style.\\
+\verb+[galley]+ & Typeset in a single narrow column.\\
+\verb+[nomerge]+ & Allows processing of legacy documents that use square brackets as part of the key in a \verb+cite+ command.\\
+%
+\multicolumn{2}{c}{\textsc{Frontmatter Commands}\rule[-6pt]{0pt}{18pt}}\\*
+\verb+\title{<title>}+ & The manuscript title.\\
+\verb+\author{One Author}+ & Specify one author's name.\\
+\verb+\surname{Lloyd Weber}+, \verb+\surname{Mao}+ & Indicate which part of a name within
+\verb+\author+ should be used for alphabetizing and indexing.\\
+\verb+\email[<optional text>]{author@any.edu}+& Specify an e-mail address for an author.\\
+\verb+\homepage[<optional text>]+ \verb+ {http://any.edu/homepage/}+& Specify a URL for an author's web site.\\
+\verb+\altaffiliation[optional text]+ \verb+ {affiliation information}+&Specify an alternate or temporary address for an author.\\
+\verb+\thanks{text}+& Additional information about an author not covered by the more specific macros above.\\
+\verb+\collaboration{<The Collaboration>}+ & Specify a collaboration name for a group of authors. Should be placed after the authors. \\
+\verb+\affiliation{text}+ & Specify a single affiliation. Applies to all previous authors without a specified affiliation.\\
+\verb+\noaffiliation+ & For an author or collaboration without an affiliation.\\
+\verb+\date{<date>}+ & Show the date on the manuscript. \verb+\date{\today}+ gives the current date.\\
+\verb+\begin{abstract}+ & Start the manuscript's abstract. Must appear before \verb+\maketitle+ command.\\
+\verb+\pacs{<pacs codes>}+& PACS codes for manuscript. Multiple PACS codes should be specified together in a single \verb+\pacs+ macro.\\
+\verb+\keywords{<keywords>}+ & Suggested keywords for indexing.\\
+\verb+\preprint{<report number>}+ & Specify an institutional report number to appear in the upper-righthand corner of the first page. Multiple
+\verb+\preprint+ macros may be supplied, but space may limit how many can appear.\\
+\verb+\maketitle+ & Typeset the title/author/abstract block.\\
+%
+\multicolumn{2}{c}{\textsc{Sectioning Commands}\rule[-6pt]{0pt}{18pt}}\\*
+\verb+\section{<heading>}, \subsection{<heading>}+,
+\verb+\subsubsection{<heading>}+ & Start a new section or subsection.\\
+\verb+\section*{<heading>}+ & Start a new section without a number.\\
+\verb+\appendix+ & Makes all following sections appendices.\\
+\verb+\appendix*+ & Signifies there is a single appendix section to follow.\\
+\verb+\begin{acknowledgments}+ & Start an Acknowledgments section. Note spelling.\\
+\verb+\lowercase{<text>}+ & Escape a letter or word from being uppercased in a top-level \verb+\section+ heading.\\
+%
+\multicolumn{2}{c}{\textsc{Citation, Footnote, and Cross-referencing Commands}\rule[-6pt]{0pt}{18pt}}\\*
+\verb+\bibliography{<bib file basename>}+ & Specify a list of .bib
+files in which to find references. Read in the resulting .bbl file. For use with Bib\TeX\ . \\
+\verb+\bibliographystyle{<bst stylefile>}+ & Specify a Bib\TeX\ (.bst) style file to use. APS journal options select the proper default (\texttt{apsrev} or \texttt{apsrmp}).\\
+\verb+\begin{thebibliography}+ & Start the reference section (when not using Bib\TeX). \\
+\verb+\bibitem[<optional text>]{<key>}+ & Specify a single reference.\\
+\verb+\cite{<list of keys>}+ & Cite one or more references. \verb+<key>+ is same as that of \verb+\bibitem+. Prepend a * in front of a key to merge the reference with the previous one in the bibliography.\\
+\verb+\cite{*[{<prepended>}][{<appended>}]{<keys>}+ & Prepend and/or append text to a bibliography entry. Note use of curly braces within the square brackets.\\
+\verb+\onlinecite{<key>}+ & For superscript style citations, place the corresponding number on the baseline rather than as a superscript.\\
+\verb+\bibinfo[<tag>]{<text>}+ & A pure markup macro that adds tagging information to the components of a reference. \revtex~4 Bib\TeX\ style files automatically add them appropriately. Doesn't affect the typesetting.\\
+\verb+\url{<url>}+ & Typeset a URL (\revtex~4 automatically loads \texttt{url.sty}).Bib\TeX\ styles automatically add this markup.\\
+\verb+\eprint{<e-print id>}+ & Typeset an e-print identifier. Bib\TeX\ styles automatically add this markup.\\
+\verb+\footnote{<text>}+ & Create a footnote or endnote in bibliography depending on class options. \verb+\footnote+ within a table will create a footnote attached to the table.\\
+\verb+\footnotemark{<key>}+, \verb+\footnotetext[<key>]{<text>}+ & In a table, allows for multiple items to share the note. \\
+\verb+\label{<key>}+ & Label an item for cross-referencing. \verb+\label+ should appear within the argument of the cross-referenced item (e.g., \verb+\section{\label{<key>}...}+ or \verb+\caption{\label{<key>}...}+.\\
+\verb+\ref{<key>}+ & Refer to an item labeled by \verb+\label{<key>}+.\\
+\verb+\pageref{<key>}+ & Refer to the page on which an item labeled by \verb+\label{<key>}+ appears.\\
+%
+\multicolumn{2}{c}{\textsc{Math and Equation Commands}\rule[-6pt]{0pt}{18pt}}\\*
+\verb+$+ & Inline math delimiter.\\
+\verb+\begin{equation}+ & Display numbered one-line equation.\\
+\verb+\[+, \verb+\]+ & Display unnumbered one-line equation.\\
+\verb+\begin{eqnarray}+ & Display multiple equations together or a
+long equation that requires multiple lines. Use \verb+widetext+
+environment for an equation that must span the page in two-column formatting.\\
+\verb+\nonumber+ & Suppress numbering of an equation with
+\verb+eqnarray+.\\
+\verb+\begin{eqnarray*}+ & Display multiple equations with no equation
+numbering at all.\\
+\verb+&+ & Alignment character for equations within \verb+eqnarray+.\\
+\verb+\\+ & End a row in \verb+eqnarray+.\\
+\verb+\\*+ & Prevent a page break at this point in an
+\verb+eqnarray+.\\
+\verb+\label{<key>}+ & Label an equation or group of equations for
+cross-referencing.\\
+\verb+\ref{<key>}+ & Refer to an equation by its label (e.g.,
+\verb+Eq~(ref{<key>})+).\\
+\verb+\tag{<key}}+ & Specify an alternative labeling separate from the
+automatic numbering of equations. Requires \verb+[amsmath]+.\\
+\verb+\text{<text>}+ & Non-italicized text within a math
+context. Requires \verb+[amsmath]+. Do not use \verb+\rm+,
+\verb+\textrm+, or \verb+\mbox+.\\
+%
+\multicolumn{2}{c}{\textsc{Some} AMS-\LaTeX\ \textsc{Commands}\rule[-6pt]{0pt}{18pt}}\\*
+\verb+\begin{split}+ & Split equations with alignment.\\
+\verb+\begin{multline}+ & Split equations without alignment.\\
+\verb+\begin{align}+ & Equation groups with alignment.\\
+\verb+\begin{gather}+ & Equation groups without alignment.\\
+\verb+\begin{subequations}+ & Create an equation array in which each
+equation is individually numbered (4a, 4b, 4c, etc.) as part of a
+single group of equations that can be referenced as a whole.\\
+\verb+\intertext+ & Textual interjections witin a display equation.\\
+\verb+\usepackage{amscd}+ & Create commutative diagrams.\\
+\verb+\begin{pmatrix}+ & Matrices with parentheses as delimiters.\\
+\verb+\begin{bmatrix}+ & Matrices with square brackets as delimiters.\\
+\verb+\begin{Bmatrix}+ & Matrices with curly braces as delimiters.\\
+\verb+\begin{vmatrix}+ & Matrices with vertical bars as delimiters.\\
+\verb+\begin{Vmatrix}+ & Matrices with double vertical bars as
+delimiters.\\
+\verb+\hdotsfor+ & Row of dots in a matrix.\\
+\verb+\Hat+ & Alternative \verb+\hat+ accent for stacking.\\
+\verb+\Check+ & Alternative \verb+\check+ accent for stacking.\\
+\verb+\Tilde+ & Alternative \verb+\tilde+ accent for stacking.\\
+\verb+\Acute+ & Alternative \verb+\acute+ accent for stacking.\\
+\verb+\Grave+ & Alternative \verb+\grave+ accent for stacking.\\
+\verb+\Dot+ & Alternative \verb+\dot+ accent for stacking.\\
+\verb+\Ddot+ & Alternative \verb+\ddot+ accent for stacking.\\
+\verb+\Breve+ & Alternative \verb+\breve+ accent for stacking.\\
+\verb+\Vec+ & Alternative \verb+\vec+ accent for stacking.\\
+\verb+\xleftarrow+ & Extensible left arrow.\\
+\verb+\xrightarrow+ & Extensible right arrow.\\
+\verb+\overset+ & Place a symbol over another.\\
+\verb+\underset+ & Place a symbol under another.\\
+\verb+\lvert+ & Vertical bar with spacing rules appropriate for use as
+a left delimiter.\\
+\verb+\rvert+ & Vertical bar with spacing rules appropriate for use as
+a right delimiter.\\
+\verb+\lVert+ & Double vertical bar with spacing rules appropriate for use as
+a left delimiter.\\
+\verb+\rVert+ & Double vertical bar with spacing rules appropriate for use as
+a right delimiter.\\
+\verb+\DeclareMathOperator+ & Declare a new math operator so that
+spacing and font is correct.\\
+\verb+\text+ & Words and phrases in display math.\\
+\verb+\boldsymbol+ & Make symbol bold. Also available in bm.sty.\\
+\verb+\sideset+ & Sets subscripts and superscripts at the corners of a
+summation or product.\\
+\verb+\substack+ & Create a stack of subexpressions (for example,
+stacked summation limits).\\
+\verb+\begin{subarray}+ & Like \verb+\substack+, but allows finer
+control of subexpression alignment.\\
+\verb+\mathfrak+ & Replaces \verb+\frak+.\\
+\verb+\mathbb+ & Replaces \verb+\Bbb+.\\
+%
+\multicolumn{2}{c}{\textsc{Font Commands}\rule[-6pt]{0pt}{18pt}}\\*
+\verb+\textbf{<text>}+ & Text boldface font.\\
+\verb+\textit{<text>}+ & Text italicixed font.\\
+\verb+\textrm{<text>}+ & Text Roman font.\\
+\verb+\textsl{<text>}+ & Text Slanted font.\\
+\verb+\textsc{<text>}+ & Text Small Caps font.\\
+\verb+\textsf{<text>}+ & Text Sans Serif font.\\
+\verb+\textmd{<text>}+ & Text Medium Series font.\\
+\verb+\textnormal{<text>}+ & Text Normal Series font.\\
+\verb+\textup{<text>}+ & Text Upright Series font.\\
+\verb+\texttt{<text>}+ & Text Typewriter font.\\
+\verb+\mathit{<text>}+ & Math italics font. \\
+\verb+\mathbf{<text>}+ & Math boldface font.\\
+\verb+\mathtt{<text>}+ & Math typewriter font.\\
+\verb+\mathsf{<text>}+ & Math sans serif font.\\
+\verb+\mathcal{<text>}+ & Math calligraphic font. \\
+\verb+\mathfrak{<text>}+ & Math fraktur font. Requires
+\verb+[amsfonts]+ or \verb+[amssymb]+.\\
+\verb+\mathbb{<text>}+ & Math blackboard bold font. Requires
+\verb+[amsfonts]+ or \verb+[amssymb]+.\\
+\verb+\bm{<text>}+ & Bold math symbols (Greek and other symbols). Requires \verb+\usepackage{bm}+.\\
+%
+\multicolumn{2}{c}{\textsc{Table Commands}\rule[-6pt]{0pt}{18pt}}\\*
+\verb+\begin{table}[<placement>]+ & Start a table float environment set to the
+current column width. The
+placement options may be any combination of h, t, b, p, or ! signifying
+here, top, bottom, page, and ``as soon as possible'',
+respectively. A placement option of H will allow a long table to break
+across pages. \LaTeX\ may not be able to honor placement
+requests.\\
+\verb+\begin{table*}+ & Start a non-floating table environment set to the
+current page width. Will be deferred to the following page.\\
+\verb+\begin{ruledtabular}+ & Adds \textit{Physical Review} style double
+(Scotch) rules around a table and adjusts the intercolumn spacing.\\
+\verb+\begin{tabular}[<position>]{<column specs>}+ & The
+\verb+\tabular+ envrionment sets the positions and the number of
+columns (as well as alignment) in the table.\\
+\verb+\begin{tabular*}{<width>}[<pos>]{<col specs>}+ & Like
+\verb+tabular+, but with a set width.\\
+\verb+\squeezetable+ & Set table in a smaller font smaller. Place this
+macro before the \verb+\begin{table}+ line and sandwich everything
+between \verb+\begingroup+ and \verb+\endgroup+.\\
+\verb+\begin{longtable}{<column specs>}+ & Create a table set to the current column
+width that spans more than one
+page or column. \verb+\usepackage{longtable}+ required.\\
+\verb+\begin{longtable*}{<column specs>}+ & Create a table set to the
+current page width that spans more than one page. \verb+\usepackage{longtable}+ required.\\
+\verb+\caption{<text>}+ & Adds a caption for the table.\\
+\verb+\printtables+ & With \verb+[endfloats]+, control where the
+held back tables actually appear.\\
+\verb+\begin{turnpage}+ & Rotate a table or figure by 90 degrees
+(landscape mode). Will put figure or table on a page by
+itself. Requires \verb+\graphics+ package.\\
+%
+\multicolumn{2}{c}{\textsc{Graphics Commands}\rule[-6pt]{0pt}{18pt}}\\*
+\verb+\begin{figure}[<placement>]+ & Start a figure float environment
+set to the current column width.
+The placement options may be any combination of h, t, b, p, or ! signifying
+here, top, bottom, page, and ``as soon as possible'',
+respectively. A placement option of H will allow a long table to break
+across pages. \LaTeX\ may not be able to honor placement
+requests.\\
+\verb+\begin{figure*}+ & Start a non-floating figure environment set
+to the current page width. Will be deferred to the following page.\\
+\verb+\includegraphics[<scale,rotation>]+\verb+{fig file}+& Defined
+by invoking either \verb+\usepackage{graphics}+ or
+\verb+\usepackage{graphicx}+, the standard \LaTeXe\ packages for calling
+in figures. \verb+graphicx+ is the same as \verb+graphics+, but uses
+key-value pairs for optional arguments.\\
+\verb+\usepackage{epsfig}+ & Provides an alternative interface to the
+\verb+graphics+ package similar to the epsf class option in \revtex~3.\\
+\verb+\printfigures+ & With \verb+[endfloats]+, control where the
+held back figures actually appear.\\
+%
+\multicolumn{2}{c}{\textsc{Miscellaneous Commands}\rule[-6pt]{0pt}{18pt}}\\*
+\verb+\begin{widetext}+ & Change column width to be the page
+width. Will add guiding rules.\\
+\verb+\twocolumngrid+ & Low-level switch to a two column layout.\\
+\verb+\onecolumngrid+ & Low-level switch to a single page-wide column layout.\\
+\verb+\protect+ & Protect a fragile command within a macro with a
+``moving'' argument. \verb+\caption+ and \verb+\footnote+ are common
+macros that have moving arguments.\\
+\verb+\frac{numerator}{denominator}+ & Create a fraction. Use in place of \verb+\over+.\\
+%
+\multicolumn{2}{c}{\textsc{\revtex~4 and Miscellaneous Symbols}\rule[-6pt]{0pt}{18pt}}\\*
+\verb+\textemdash+ & \textemdash\\
+\verb+\textendash+ & \textendash\\
+\verb+\textexclamdown+ & \textexclamdown\\
+\verb+\textquestiondown+ & \textquestiondown\\
+\verb+\textquotedblleft+ & \textquotedblleft\\
+\verb+\textquotedblright+ & \textquotedblright\\
+\verb+\textquoteleft+ & \textquoteleft\\
+\verb+\textquoteright+ & \textquoteright\\
+\verb+\textbullet+ & \textbullet\\
+\verb+\textperiodcentered+ & \textperiodcentered\\
+\verb+\textvisiblespace+ & \textvisiblespace\\
+\verb+\textcompworkmark+ & Break a ligature.\\ % ``fluffier''
+%vs. ``f\textcompworkmark luf\textcompworkmark fier''.\\
+\verb+\textcircled{<char>}+ & Circle a character. \textcircled{e}.\\
+\verb+\lambdabar+ & $\lambdabar$ \\
+\cmd\openone & $\openone$\\
+\cmd\altsuccsim & $\altsuccsim$ \\
+\cmd\altprecsim & $\altprecsim$ \\
+\cmd\alt & $\alt$ \\
+\cmd\agt & $\agt$ \\
+\cmd\tensor\ x & $\tensor x$ \\
+\cmd\overstar\ x & $\overstar x$ \\
+\cmd\loarrow\ x & $\loarrow x$ \\
+\cmd\roarrow\ x & $\roarrow x$ \\
+\verb+\mathring{x}+ & $\mathring{x}$ (Replaces
+\verb+\overcir+). Standard \LaTeXe\ . \\
+\verb+\dddot{x}+ & $\dddot{x}$ (Replaces \verb+\overdots+). Requires \verb+[amsmath]+.\\
+\verb+\triangleq+ & $\triangleq$ (Replaces
+\verb+\corresponds+). Requires \verb+[amssymb]+.\\
+\cmd\biglb\ ( \cmd\bigrb ) & $\biglb( \bigrb)$ \\
+\cmd\Biglb\ ( \cmd\Bigrb ) & $\Biglb( \Bigrb)$ \\
+\cmd\bigglb\ ( \cmd\biggrb ) & $\bigglb( \biggrb)$ \\
+\cmd\Bigglb\ ( \cmd\Biggrb\ ) & $\Bigglb( \Biggrb)$
+\end{longtable*}
+
+\end{document}
diff --git a/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/auguide/whatsnew4-1.pdf b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/auguide/whatsnew4-1.pdf
new file mode 100644
index 0000000000..df229b415e
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/auguide/whatsnew4-1.pdf
Binary files differ
diff --git a/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/auguide/whatsnew4-1.tex b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/auguide/whatsnew4-1.tex
new file mode 100644
index 0000000000..88f15bea65
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/auguide/whatsnew4-1.tex
@@ -0,0 +1,166 @@
+%% ****** Start of file whatsnew4-1.tex ****** %
+%%
+%% This file is part of the APS files in the REVTeX 4 distribution.
+%% Version 4.1r of REVTeX, August, 2010
+%%
+%% Copyright (c) 2009, 2010 The American Physical Society.
+%%
+%% See the REVTeX 4.1 README file for restrictions and more information.
+%%
+\documentclass[%
+%prl%
+%,preprint%
+,twocolumn%
+,secnumarabic%
+%,tightenlines%
+,amssymb,aps,pra,nobibnotes]{revtex4-1}
+\usepackage{docs}
+%\usepackage{acrofont}%NOTE: Comment out this line for the release version!
+%\usepackage[colorlinks=true,linkcolor=blue]{hyperref}%
+%\nofiles
+\expandafter\ifx\csname package@font\endcsname\relax\else
+ \expandafter\expandafter
+ \expandafter\usepackage
+ \expandafter\expandafter
+ \expandafter{\csname package@font\endcsname}%
+\fi
+\DeclareRobustCommand\substyle{\name@idx{document substyle}}%
+\DeclareRobustCommand\classoption{\name@idx{document class option}}%
+\DeclareRobustCommand\classname{\name@idx{document class}}%
+\def\name@idx#1#2{%
+ {\ttfamily#2}%
+ \index{#2\space#1=\string\ttt{#2}\space#1}\index{#1>#2=\string\ttt{#2}}%
+}%
+
+\DeclareRobustCommand\revtex{REV\TeX}
+\begin{document}
+\title{What's New in \revtex~4.1}%
+\author{American Physical Society}%
+%\email{revtex4@aps.org}
+\affiliation{1 Research Road, Ridge, NY 11961}
+\date{August 2010}%
+
+%\tableofcontents
+
+\begin{abstract}
+This document gives a brief summary of what's new in \revtex~4.1. The changes include bug fixes, improved functionality, and support for a wider range of journals, including those of the American Institute of Physics (AIP). \revtex~4.1 was developed jointly by APS, AIP, and Arthur Ogawa. Additional work was done by Patrick Daly to incorporate our suggested improvements into \texttt{natbib 8.3} to address many new features concerning bibliographies. \texttt{natbib 8.31a} or later is required to run \revtex~4.1.
+\end{abstract}
+\maketitle
+
+\section{New Syntax and Features in \revtex~4.1}
+\revtex~4.1 introduces support for more journals, several new commands, and some new syntax. This section outlines these changes. \textbf{A document using these new features will not process under \revtex~4}. See Sec.~\ref{sec:additional} for more details about these items.
+
+\begin{itemize}
+\item \textbf{Added support for APS journal \textit{Physical Review Special Topics -- Physics Education Research}}.
+\item \textbf{Added support for AIP journals.} There is now an explicit \texttt{aip} society option along with support for AIP journals. Please see the \textit{Author's Guide to AIP Substyles for \revtex~4.1}. In addition, \revtex~4.1 provides an extensible system for the easy addition of new collections of journals.
+\item \textbf{Endnotes now ordered correctly.} Endnotes in the bibliography now appear in the correct order, interleaved with citations.
+\item \textbf{Multiple references in a single citation supported using a special starred (*) argument to the \cmd\cite\ command.} One of the major new features in 4.1 made possible by the joint work on \texttt{natbib 8.3}. Multiple Bib\TeX\ entries can be combined into a single \cmd\bibitem\ command.
+\item \textbf{Bib\TeX\ style files can now display journal article titles in the bibliography.} Use the \texttt{longbibliography} class option.
+\item \textbf{Free form text can be prepended and appended to a bibliographic entry using the special starred (*) argument to the \cmd\cite\ command.} Often a citation in the bibliography will have explanatory text such as \textit{See also} or \textit{and references therein} before and after the actual citation. The new \revtex~4.1 \cmd\cite\ command allows the specification of both text to precede and follow a citation.
+\item \textbf{Structured Abstracts.} Use of the \texttt{description} environment in abstracts now provides for ``structured" abstracts.
+\item \textbf{Figures referring to videos now supported.} A ``figure" may now be labeled as a \textbf{Video} by using the \texttt{video} environment. A frame from the video may be included in the figure and a URL to link the caption's label to the online video also may be included. There is also a \cmd\listofvideos\ command.
+\item \textbf{Better support for arXiv.org in Bib\TeX\ } Three more Bib\TeX\ fields have been added: \texttt{SLACcitation}, \texttt{archivePrefix}, and \texttt{primaryClass} in addition to the existing field \texttt{eprint}.
+\end{itemize}
+
+\section{Bug Fixes in \revtex~4.1}
+One of the main goals of \revtex~4.1 is, of course, to fix the bugs that were released in \revtex~4. The following is a list of bugs that have been fixed.
+
+\begin{itemize}
+\item \textbf{Improved Bib\TeX\ \texttt{bst} files.} In addition to the new features above, numerous other improvements to the APS \texttt{bst} files have been made, including support for displaying journal article titles and many fixes for \textit{Reviews of Modern Physics}. Also, long author lists are no longer automatically truncated.
+\item \textbf{\cmd\footnote\ in \cmd\widetext\ and \texttt{table*} environments improved.} \cmd\footnote\relax s in the \cmd\widetext\ or \texttt{table*} environments are now correctly placed and formatted.
+\item \textbf{Email addresses no longer print twice on papers less than one page long.}
+\item \textbf{\texttt{eqnarray} alignment improved.}
+\item \textbf{\cmd\collaboration\ can be used with the \texttt{groupedaddress} option now.}
+\item \textbf{\texttt{letterpaper} now ensured as default paper size.}
+\item \textbf{Table of Contents formatting improved.}
+\item \textbf{Support for \texttt{longtable} and \texttt{lscape} packages improved.}
+\item \textbf{\texttt{reftest} restored.}
+\item \textbf{Compatibility with the \texttt{geometry, lineno,} and \texttt{colortbl} packages improved.} For line numbering, rather than using \texttt{lineno.sty} directly, the \texttt{linenumbers} class option should be used (this will call in \texttt{lineno.sty} with a proper set of default parameters).
+\item \texttt{hyperref} \textbf{fixes}. Improved compatibility between footnotes and the \texttt{hyperref} package. In particular, table footnotes were fixed. More anchors for \texttt{hyperref} were also added (titlepage, abstract, and acknowledgements).
+\item \textbf{Documents can have more than 256 \cmd\cite\ commands now.}
+\item \textbf{\cmd\listoffigures\ and \cmd\listoftables\ fixed.}
+\item \textbf{Figure and table labels in captions now reflect proper APS style.}
+\item \textbf{RMP style files conform better to RMP style guidelines.}
+\item \textbf{Section heading upper-casing improved.}
+\item \textbf{Repeated characters at start of affiliation no longer disappear when using \texttt{groupedaddress} option.}
+\item \textbf{There have been many other bug fixes and improvements to the internal \texttt{ltxgrid} package as well.}
+\end{itemize}
+
+\section{\revtex~4 Backwards Compatibility}
+The vast majority of documents prepared under \revtex~4 should process correctly under \revtex~4.1. However, the formatting of the pages and, if using Bib\TeX, the references may change. Also, the behavior of some macros may be different. For instance, the \texttt{title} macro now requires the use of \texttt{protect} for fragile arguments. This may cause some documents prepared under \revtex~4 to fail under 4.1. Some macro packages that depend on the internals of \revtex~4 may also no longer work. Documents using those packages will, of course, also will not process under 4.1.
+
+\section{\label{sec:additional}Additional Details}
+
+\subsection{Multiple references in a single bibliography entry}
+One of the most frequently requested features since the release of \revtex~4 has been to allow more than one reference to appear in a single bibliography entry when using Bib\TeX. This can now be done in \revtex~4.1 by using a starred (*) argument to the \cmd\cite\ command. This requires the latest version of \texttt{natbib}, developed in conjunction with \revtex~4.1, and the new \texttt{bst} files that come with \revtex~4.1. To combine multiple references into a single \cmd\bibitem, precede the second, third, etc. citation keys in the \cmd\cite\ command with an asterisk (*). For example \verb+\cite{bethe, *feynman, *bohr}+ will combine the \cmd\bibitem\relax s with keys \texttt{bethe}, \texttt{feynman}, and \texttt{bohr} into a single entry in the bibliography separated by semicolons.
+
+\subsection{Prepending and/or appending text to a citation}
+The expanded syntax for the \cmd\cite\ command argument can also be used to specify text before and/or after a citation. For instance, a citation such as:
+\begin{verbatim}
+[19] A similar expression was derived in
+A. V. Andreev, Phys. Rev. Lett. 99, 247204
+(2007) in the context of carbon nanotube
+p-n junctions. The only difference is that no
+integration over ky is present there.
+\end{verbatim}
+may be created by the following \cmd\cite\ command:
+\begin{verbatim}
+\cite{*[{A similar expression was derived
+in }] [{ in the context of carbon nanotube
+p-n junctions. The only difference is that no
+integration over ky is present there.}]andreev2007]
+\end{verbatim}
+Please note the use of curly braces to enclose the text within the square brackets.
+\subsection{Structured Abstracts}
+A ``structured" abstract is an abstract divided into labeled sections. For instance, \textit{Physical Review C} would like authors to provide abstracts with sections summarizing the paper's \textbf{Background}, \textbf{Purpose}, \textbf{Method}, \textbf{Results}, and \textbf{Conclusions}. This can be accomplished by using the \texttt{description} environment within the \texttt{abstract} environment. For example:
+\begin{verbatim}
+\begin{abstract}
+\begin{description}
+\item[Background] This part would describe the
+context needed to understand what the paper
+is about.
+\item[Purpose] This part would state the purpose
+of the present paper.
+\item[Method] This part describe the methods
+used in the paper.
+\item[Results] This part would summarize the
+results.
+\item[Conclusions] This part would state the
+conclusions of the paper.
+\end{description}
+\end{abstract}
+\end{verbatim}
+
+\subsection{Video Environment}
+Papers often refer to multimedia videos. The \texttt{video} environment is identical to the \texttt{figure} environment, but the caption will be labeled as a \textbf{Video} (with its own counter independent of figures). A URL can also be specified so that the caption label can be linked to the online video (if using the \texttt{hyperref} package). The included graphic (using \cmd\includegraphics\ from the \texttt{graphics} or \texttt{graphicx} package) would be a representation frame from the video. A \texttt{\cmd\listofvideos} is also provided. For example:
+\begin{verbatim}
+\begin{video}
+\includegraphics{videoframe.jpg}
+\setfloatlink{http://some.video.com/fun.mov}
+\caption{\label{vid:interest}This is a video of
+something fun.}
+\end{video}
+\end{verbatim}
+
+\subsection{Better arXiv.org support in Bib\TeX\ }
+
+
+There have been substantial improvements in the \revtex\ Bib\TeX\ style files. For instance, the \texttt{.bib} entry
+\begin{verbatim}
+@Unpublished{Ginsparg:1988ui,
+ author = "Ginsparg, Paul H.",
+ title = "{APPLIED CONFORMAL FIELD THEORY}",
+ year = "1988",
+ eprint = "hep-th/9108028",
+ archivePrefix = "arXiv",
+ SLACcitation = "%%CITATION = HEP-TH/9108028;%%"
+}
+\end{verbatim}
+will include the arXiv.org e-print identifier as \texttt{arXiv:hep-th/9108028} and hyperlink it (if using \texttt{hyperref}). The newer format for arXiv identifiers with primary classificiations will produce output such as \texttt{arXiv:0905.1949 [hep-ph]}.
+
+
+\begin{acknowledgments}
+The development of \revtex~4.1 was managed by Mark Doyle (APS). The development of the new AIP style files and their accompanying documentation was managed by Susan Joy (AIP) with the help of Chris McMahon (AIP) and Rich O'Keeffe (AIP). Testing and evaluation were done by Michele Hake (APS), Liz Belmont (AIP), Brian Goss (AIP), Alison Waldron (AIP), and Phil Robertson (AIP). Additional detailed testing and feedback were provided by Lev Bishop (Yale).
+\end{acknowledgments}
+
+\end{document}
diff --git a/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aip/aipsamp.bib b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aip/aipsamp.bib
new file mode 100644
index 0000000000..458a4b7a19
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aip/aipsamp.bib
@@ -0,0 +1,482 @@
+@PREAMBLE{
+ "\providecommand{\noopsort}[1]{}"
+ # "\providecommand{\singleletter}[1]{#1}%"
+}
+
+@BOOK{Bire82,
+ author = {N. D. Birell and P. C. W. Davies},
+ year = 1982,
+ title = {Quantum Fields in Curved Space},
+ publisher = {Cambridge University Press}
+}
+
+@ARTICLE{feyn54,
+ author = "R. P. Feynman",
+ year = "1954",
+ journal = "Phys.\ Rev.",
+ volume = "94",
+ pages = "262",
+}
+
+@ARTICLE{epr,
+ author = "A. Einstein and {\relax Yu} Podolsky and N. Rosen",
+ year = "1935",
+ journal = "Phys.\ Rev.",
+ volume = "47",
+ pages = "777",
+}
+
+@ARTICLE{Berman1983,
+ author = "Berman, Jr., G. P. and Izrailev, Jr., F. M.",
+ title = "Stability of nonlinear modes",
+ journal = "Physica D",
+ volume = "88",
+ pages = "445",
+ year = "1983",
+}
+
+@ARTICLE{Davies1998,
+ author = "E. B. Davies and L. Parns",
+ title = "Trapped modes in acoustic waveguides",
+ journal = "Q. J. Mech. Appl. Math.",
+ volume = "51",
+ pages = "477--492",
+ year = "1988",
+}
+
+@MISC{witten2001,
+ author = "Edward Witten",
+ eprint = "hep-th/0106109",
+ year = "2001",
+}
+
+@INBOOK{Beutler1994,
+ author = "E. Beutler",
+ editor = "E. Beutler and M. A. Lichtman and B. W. Coller and T. S. Kipps",
+ title = "Williams Hematology",
+ chapter = "7",
+ pages = "654--662",
+ publisher = "McGraw-Hill",
+ year = "1994",
+
+ edition = "5",
+ address = "New York",
+ volume = "2",
+}
+
+@INBOOK{inbook-full,
+ author = "Donald E. Knuth",
+ title = "Fundamental Algorithms",
+ volume = 1,
+ series = "The Art of Computer Programming",
+ publisher = "Addison-Wesley",
+ address = "Reading, Massachusetts",
+ edition = "Second",
+ month = "10~" # jan,
+ year = "\noopsort{1973b}1973",
+ type = "Section",
+ chapter = "1.2",
+ pages = "10--119",
+ note = "A full INBOOK entry",
+}
+
+@ARTICLE{Smith2005,
+ author = "J. S. Smith and G. W. Johnson",
+ journal = "Philos. Trans. R. Soc. London, Ser. B",
+ title = "",
+ year = "2005",
+
+ volume = "777",
+ pages = "1395",
+}
+
+@UNPUBLISHED{Smith2010,
+ author = "W. J. Smith and T. J. Johnson and B. G. Miller",
+ title = "Surface chemistry and preferential crystal orientation on a silicon surface",
+ note = "{J. Appl. Phys.} (unpublished)",
+
+ month = "",
+ year = "",
+}
+
+@UNPUBLISHED{Smith2010a,
+ author = "V. K. Smith and K. Johnson and M. O. Klein",
+ title = "Surface chemistry and preferential crystal orientation on a silicon surface",
+ note = "{J. Appl. Phys.} (submitted)",
+
+ month = "",
+ year = "",
+}
+
+@UNPUBLISHED{unpublished-full,
+ author = "Ulrich {\"{U}}nderwood and Ned {\~N}et and Paul {\={P}}ot",
+ title = "Lower Bounds for Wishful Research Results",
+ month = nov # ", " # dec,
+ year = 1988,
+ note = "Talk at Fanstord University (A full UNPUBLISHED entry)",
+}
+
+@MISC{JohnsonMillerSmith2007,
+
+ author = "M. P. Johnson and K. L. Miller and K. Smith",
+ title = "",
+ howpublished = "personal communication",
+ month = "1~" # may,
+ year = "2007",
+ note = "",
+}
+
+@PROCEEDINGS{Smith2007,
+ title = "AIP Conf. Proc.",
+ year = "2007",
+
+ editor = "J. Smith",
+ volume = "841",
+ number = "21",
+ series = "",
+ address = "",
+ month = "",
+ organization = "",
+ publisher = "",
+ note = "",
+}
+
+@PROCEEDINGS{proceedings-full,
+ editor = "Wizard V. Oz and Mihalis Yannakakis",
+ title = "Proc. Fifteenth Annual",
+ number = 17,
+ series = "All ACM Conferences",
+ month = mar,
+ year = 1983,
+ address = "Boston",
+ organization = "ACM",
+ publisher = "Academic Press",
+ note = "A full PROCEEDINGS entry",
+}
+
+@UNPUBLISHED{Burstyn2004,
+ author = "Y. Burstyn",
+ title = "{Proceedings of the 5th International Molecular Beam Epitaxy Conference, Santa Fe, NM}",
+ note = "(unpublished)",
+
+ month = "5--8~" # oct,
+ year = "2004",
+}
+
+@PROCEEDINGS{Quinn2001,
+ title = "{Proceedings of the 2003 Particle Accelerator Conference, Portland, OR, 12-16 May 2005}",
+ year = "2001",
+
+ editor = "B. Quinn",
+ address = "New York",
+ publisher = "Wiley",
+ note = "Albeit the conference was held in 2005, it was the 2003 conference, and the proceedings were published in 2001; go figure",
+}
+
+@ARTICLE{Agarwal2001,
+ author = "A. G. Agarwal",
+ title = "{Proceedings of the Fifth Low Temperature Conference, Madison, WI, 1999}",
+ journal = "Semiconductors",
+ year = "2001",
+
+ volume = "66",
+ pages = "1238",
+}
+
+@ARTICLE{SmithDA01,
+ author = "R. Smith",
+ title = "Hummingbirds are our friends",
+ journal = {J. Appl. Phys. (these proceedings)},
+ year = "",
+ volume = "",
+ number = "",
+ pages = "",
+ month = "",
+ note = "Abstract No. DA-01",
+}
+
+@ARTICLE{Smith2007a,
+ author = "J. Smith",
+ title = "",
+ journal = "Proc. SPIE",
+ year = "2007",
+
+ volume = "124",
+ pages = "367",
+ note = "Required title is missing",
+}
+
+@TECHREPORT{techreport-full,
+ author = "Tom T{\'{e}}rrific",
+ title = "An {$O(n \log n / \! \log\log n)$} Sorting Algorithm",
+ institution = "Fanstord University",
+ type = "Wishful Research Result",
+ number = "7",
+ address = "Computer Science Department, Fanstord, California",
+ month = oct,
+ year = 1988,
+ note = "A full TECHREPORT entry",
+}
+
+@TECHREPORT{Nelson1999,
+ author = "J. Nelson",
+ type = "{TWI Report}",
+ number = "666/1999",
+ institution = "",
+ year = jan # "~1999",
+
+ note = "Required institution missing",
+}
+
+@TECHREPORT{Fields2005,
+ author = "W. K. Fields",
+ type = "{ECE Report No.}",
+ number = "AL944",
+ institution = "",
+ year = "2005",
+
+ note = "Required institution missing",
+}
+
+@MISC{Zalkins2008,
+
+ author = "Y. M. Zalkins",
+ title = "",
+ howpublished = "e-print arXiv:cond-mat/040426",
+ month = "",
+ year = "2008",
+ note = "",
+}
+
+@MISC{Nelson2005,
+
+ author = "J. Nelson",
+ howpublished = "{U.S. Patent No.} 5,693,000",
+ year = "12~" # dec # "~2005",
+}
+
+@MASTERSTHESIS{Nelson1999a,
+ author = "J. K. Nelson",
+ title = "",
+ school = "New York University",
+ year = "1999",
+
+ type = "M.{S}. thesis",
+ address = "",
+ month = "",
+ note = "",
+}
+
+@MASTERSTHESIS{mastersthesis-full,
+ author = "{\'{E}}douard Masterly",
+ title = "Mastering Thesis Writing",
+ school = "Stanford University",
+ type = "Master's project",
+ address = "English Department",
+ month = jun # "-" # aug,
+ year = 1988,
+ note = "A full MASTERSTHESIS entry",
+}
+
+@PHDTHESIS{Smith2003,
+ author = "S. M. Smith",
+ title = "",
+ school = "Massachusetts Institute of Technology",
+ year = "2003",
+
+ type = "{Ph.D.} thesis",
+ address = "",
+ month = "",
+ note = "",
+}
+
+@ARTICLE{KawaLin2003,
+ author = "S. R. Kawa and S.-J. Lin",
+ title = "",
+ journal = "J. Geophys. Res.",
+ year = "2003",
+
+ volume = "108",
+ number = "D6",
+ pages = "4201",
+ month = "",
+ note = "{DOI:10.1029/2002JD002268}",
+}
+
+@PHDTHESIS{phdthesis-full,
+ author = "F. Phidias Phony-Baloney",
+ title = "Fighting Fire with Fire: Festooning {F}rench Phrases",
+ school = "Fanstord University",
+ type = "{PhD} Dissertation",
+ address = "Department of French",
+ month = jun # "-" # aug,
+ year = 1988,
+ note = "A full PHDTHESIS entry",
+}
+
+@BOOK{book-full,
+ author = "Donald E. Knuth",
+ title = "Seminumerical Algorithms",
+ volume = 2,
+ series = "The Art of Computer Programming",
+ publisher = "Addison-Wesley",
+ address = "Reading, Massachusetts",
+ edition = "Second",
+ month = "10~" # jan,
+ year = "\noopsort{1973c}1981",
+ note = "A full BOOK entry",
+}
+
+@BOOKLET{booklet-full,
+ author = "Jill C. Knvth",
+ title = "The Programming of Computer Art",
+ howpublished = "Vernier Art Center",
+ address = "Stanford, California",
+ month = feb,
+ year = 1988,
+ note = "A full BOOKLET entry",
+}
+
+@INBOOK{ballagh2000,
+ author = "R. Ballagh and C.M. Savage",
+ editor = "C.M. Savage and M. Das",
+ title = "Bose-Einstein condensation: from atomic physics to quantum fluids, Proceedings of the 13th Physics Summer School",
+ year = "2000",
+ publisher = "World Scientific",
+ address = "Singapore",
+ eprint = "cond-mat/0008070",
+}
+
+@inBook{Magnetism,
+ author = "W. Opechowski and R. Guccione",
+ title = "Introduction to the Theory of Normal Metals",
+ volume = "IIa",
+ pages = "105",
+ editor = "G. T. Rado and H. Suhl",
+ booktitle = "Magnetism",
+ publisher = "Academic Press",
+ address = "New York",
+}
+ year = "1965",
+
+@INPROCEEDINGS{Magnetismb,
+ author = "W. Opechowski and R. Guccione",
+ title = "Introduction to the Theory of Normal Metals",
+ editor = "G. T. Rado and H. Suhl",
+ booktitle = "Magnetism",
+ volume = "IIa",
+ pages = "105",
+ publisher = "Academic Press",
+ address = "New York",
+ year = "1965",
+}
+
+@INBOOK{Smith80,
+ author = "J. M. Smith",
+ title = "Molecular Dynamics",
+ publisher = "Academic",
+ year = "1980",
+ address = "New York",
+ editor = "C. Brown",
+}
+
+@article{ZS71,
+ author = "V. E. Zakharov and A. B. Shabat",
+ year = "1971",
+ title = "Exact theory of two-dimensional self-focusing and one-dimensional self-modulation of waves in nonlinear media",
+ journal = "Zh. Eksp. Teor. Fiz.",
+ volume = "61",
+ pages = "118--134",
+ translation = "Sov. Phys. JETP \textbf{34}, 62 (1972)"
+}
+
+@INCOLLECTION{Beutler1994a,
+ author = "E. Beutler",
+ year = "1994",
+ booktitle = "Williams Hematology",
+ edition = "5",
+ chapter = "7",
+ editor = "E. Beutler and M. A. Lichtman and B. W. Coller and T. S. Kipps",
+ publisher = "McGraw-Hill",
+ address = "New York",
+ volume = "2",
+ pages = "654--662",
+}
+
+@INCOLLECTION{ballagh2000a,
+ author = "R. Ballagh and C.M. Savage",
+ year = "2000",
+ title = "Bose-Einstein condensation: from atomic physics to quantum fluids",
+ booktitle = "Proceedings of the 13th Physics Summer School",
+ editor = "C.M. Savage and M. Das",
+ publisher = "World Scientific",
+ address = "Singapore",
+ eprint = "cond-mat/0008070",
+}
+
+@INCOLLECTION{Magnetisma,
+ author = "W. Opechowski and R. Guccione",
+ year = "1965",
+ title = "Introduction to the Theory of Normal Metals",
+ booktitle = "Magnetism",
+ editor = "G. T. Rado and H. Suhl",
+ publisher = "Academic Press",
+ address = "New York",
+ volume = "IIa",
+ pages = "105",
+}
+
+@INCOLLECTION{Smith80a,
+ author = "J. M. Smith",
+ year = "1980",
+ booktitle = "Molecular Dynamics",
+ editor = "C. Brown",
+ publisher = "Academic",
+ address = "New York",
+}
+
+@INCOLLECTION{incollection-full,
+ key = "incol-ful",
+ author = "Daniel D. Lincoll",
+ year = 1977,
+ title = "Semigroups of Recurrences",
+ booktitle = "High Speed Computer and Algorithm Organization",
+ edition = "Third",
+ series = "Fast Computers",
+ number = 23,
+ chapter = 3,
+ type = "Part",
+ editor = "David J. Lipcoll and D. H. Lawrie and A. H. Sameh",
+ publisher = "Academic Press",
+ address = "New York",
+ month = sep,
+ pages = "179--183",
+ note = "A full INCOLLECTION entry",
+}
+
+@INPROCEEDINGS{inproceedings-full,
+ author = "Alfred V. Oaho and Jeffrey D. Ullman and Mihalis Yannakakis",
+ title = "On Notions of Information Transfer in {VLSI} Circuits",
+ editor = "Wizard V. Oz and Mihalis Yannakakis",
+ booktitle = "Proc. Fifteenth Annual ACM",
+ number = 17,
+ series = "All ACM Conferences",
+ pages = "133--139",
+ month = mar,
+ year = 1983,
+ address = "Boston",
+ organization = "ACM",
+ publisher = "Academic Press",
+ note = "A full INPROCEDINGS entry",
+}
+
+@MANUAL{manual-full,
+ author = "Larry Manmaker",
+ title = "The Definitive Computer Manual",
+ organization = "Chips-R-Us",
+ address = "Silicon Valley",
+ edition = "Silver",
+ month = apr # "-" # may,
+ year = 1986,
+ note = "A full MANUAL entry",
+}
diff --git a/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aip/aipsamp.pdf b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aip/aipsamp.pdf
new file mode 100644
index 0000000000..bf8d88da21
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aip/aipsamp.pdf
Binary files differ
diff --git a/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aip/aipsamp.tex b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aip/aipsamp.tex
new file mode 100644
index 0000000000..0b48b9673b
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aip/aipsamp.tex
@@ -0,0 +1,613 @@
+% ****** Start of file aipsamp.tex ******
+%
+% This file is part of the AIP files in the AIP distribution for REVTeX 4.
+% Version 4.1 of REVTeX, October 2009
+%
+% Copyright (c) 2009 American Institute of Physics.
+%
+% See the AIP README file for restrictions and more information.
+%
+% TeX'ing this file requires that you have AMS-LaTeX 2.0 installed
+% as well as the rest of the prerequisites for REVTeX 4.1
+%
+% It also requires running BibTeX. The commands are as follows:
+%
+% 1) latex aipsamp
+% 2) bibtex aipsamp
+% 3) latex aipsamp
+% 4) latex aipsamp
+%
+% Use this file as a source of example code for your aip document.
+% Use the file aiptemplate.tex as a template for your document.
+\documentclass[%
+ aip,
+ jmp,%
+ amsmath,amssymb,
+%preprint,%
+ reprint,%
+%author-year,%
+%author-numerical,%
+]{revtex4-1}
+
+\usepackage{graphicx}% Include figure files
+\usepackage{dcolumn}% Align table columns on decimal point
+\usepackage{bm}% bold math
+%\usepackage[mathlines]{lineno}% Enable numbering of text and display math
+%\linenumbers\relax % Commence numbering lines
+
+\begin{document}
+
+\preprint{AIP/123-QED}
+
+\title[Sample title]{Sample Title:\\with Forced Linebreak\footnote{Error!}}% Force line breaks with \\
+\thanks{Footnote to title of article.}
+
+\author{A. Author}
+ \altaffiliation[Also at ]{Physics Department, XYZ University.}%Lines break automatically or can be forced with \\
+\author{B. Author}%
+ \email{Second.Author@institution.edu.}
+\affiliation{
+Authors' institution and/or address%\\This line break forced with \textbackslash\textbackslash
+}%
+
+\author{C. Author}
+ \homepage{http://www.Second.institution.edu/~Charlie.Author.}
+\affiliation{%
+Second institution and/or address%\\This line break forced% with \\
+}%
+
+\date{\today}% It is always \today, today,
+ % but any date may be explicitly specified
+
+\begin{abstract}
+An article usually includes an abstract, a concise summary of the work
+covered at length in the main body of the article. It is used for
+secondary publications and for information retrieval purposes.
+%
+Valid PACS numbers may be entered using the \verb+\pacs{#1}+ command.
+\end{abstract}
+
+\pacs{Valid PACS appear here}% PACS, the Physics and Astronomy
+ % Classification Scheme.
+\keywords{Suggested keywords}%Use showkeys class option if keyword
+ %display desired
+\maketitle
+
+\begin{quotation}
+The ``lead paragraph'' is encapsulated with the \LaTeX\
+\verb+quotation+ environment and is formatted as a single paragraph before the first section heading.
+(The \verb+quotation+ environment reverts to its usual meaning after the first sectioning command.)
+Note that numbered references are allowed in the lead paragraph.
+%
+The lead paragraph will only be found in an article being prepared for the journal \textit{Chaos}.
+\end{quotation}
+
+\section{\label{sec:level1}First-level heading:\protect\\ The line
+break was forced \lowercase{via} \textbackslash\textbackslash}
+
+This sample document demonstrates proper use of REV\TeX~4.1 (and
+\LaTeXe) in manuscripts prepared for submission to AIP
+journals. Further information can be found in the documentation included in the distribution or available at
+\url{http://authors.aip.org} and in the documentation for
+REV\TeX~4.1 itself.
+
+When commands are referred to in this example file, they are always
+shown with their required arguments, using normal \TeX{} format. In
+this format, \verb+#1+, \verb+#2+, etc. stand for required
+author-supplied arguments to commands. For example, in
+\verb+\section{#1}+ the \verb+#1+ stands for the title text of the
+author's section heading, and in \verb+\title{#1}+ the \verb+#1+
+stands for the title text of the paper.
+
+Line breaks in section headings at all levels can be introduced using
+\textbackslash\textbackslash. A blank input line tells \TeX\ that the
+paragraph has ended.
+
+\subsection{\label{sec:level2}Second-level heading: Formatting}
+
+This file may be formatted in both the \texttt{preprint} (the default) and
+\texttt{reprint} styles; the latter format may be used to
+mimic final journal output. Either format may be used for submission
+purposes; however, for peer review and production, AIP will format the
+article using the \texttt{preprint} class option. Hence, it is
+essential that authors check that their manuscripts format acceptably
+under \texttt{preprint}. Manuscripts submitted to AIP that do not
+format correctly under the \texttt{preprint} option may be delayed in
+both the editorial and production processes.
+
+The \texttt{widetext} environment will make the text the width of the
+full page, as on page~\pageref{eq:wideeq}. (Note the use the
+\verb+\pageref{#1}+ to get the page number right automatically.) The
+width-changing commands only take effect in \texttt{twocolumn}
+formatting. It has no effect if \texttt{preprint} formatting is chosen
+instead.
+
+\subsubsection{\label{sec:level3}Third-level heading: Citations and Footnotes}
+
+Citations in text refer to entries in the Bibliography;
+they use the commands \verb+\cite{#1}+ or \verb+\onlinecite{#1}+.
+Because REV\TeX\ uses the \verb+natbib+ package of Patrick Daly,
+its entire repertoire of commands are available in your document;
+see the \verb+natbib+ documentation for further details.
+The argument of \verb+\cite+ is a comma-separated list of \emph{keys};
+a key may consist of letters and numerals.
+
+By default, citations are numerical; \cite{feyn54} author-year citations are an option.
+To give a textual citation, use \verb+\onlinecite{#1}+: (Refs.~\onlinecite{witten2001,epr,Bire82}).
+REV\TeX\ ``collapses'' lists of consecutive numerical citations when appropriate.
+REV\TeX\ provides the ability to properly punctuate textual citations in author-year style;
+this facility works correctly with numerical citations only with \texttt{natbib}'s compress option turned off.
+To illustrate, we cite several together \cite{feyn54,witten2001,epr,Berman1983},
+and once again (Refs.~\onlinecite{epr,feyn54,Bire82,Berman1983}).
+Note that, when numerical citations are used, the references were sorted into the same order they appear in the bibliography.
+
+A reference within the bibliography is specified with a \verb+\bibitem{#1}+ command,
+where the argument is the citation key mentioned above.
+\verb+\bibitem{#1}+ commands may be crafted by hand or, preferably,
+generated by using Bib\TeX.
+The AIP styles for REV\TeX~4 include Bib\TeX\ style files
+\verb+aipnum.bst+ and \verb+aipauth.bst+, appropriate for
+numbered and author-year bibliographies,
+respectively.
+REV\TeX~4 will automatically choose the style appropriate for
+the document's selected class options: the default is numerical, and
+you obtain the author-year style by specifying a class option of \verb+author-year+.
+
+This sample file demonstrates a simple use of Bib\TeX\
+via a \verb+\bibliography+ command referencing the \verb+aipsamp.bib+ file.
+Running Bib\TeX\ (in this case \texttt{bibtex
+aipsamp}) after the first pass of \LaTeX\ produces the file
+\verb+aipsamp.bbl+ which contains the automatically formatted
+\verb+\bibitem+ commands (including extra markup information via
+\verb+\bibinfo+ commands). If not using Bib\TeX, the
+\verb+thebibiliography+ environment should be used instead.
+
+\paragraph{Fourth-level heading is run in.}%
+Footnotes are produced using the \verb+\footnote{#1}+ command.
+Numerical style citations put footnotes into the
+bibliography\footnote{Automatically placing footnotes into the bibliography requires using BibTeX to compile the bibliography.}.
+Author-year and numerical author-year citation styles (each for its own reason) cannot use this method.
+Note: due to the method used to place footnotes in the bibliography, \emph{you
+must re-run BibTeX every time you change any of your document's
+footnotes}.
+
+\section{Math and Equations}
+Inline math may be typeset using the \verb+$+ delimiters. Bold math
+symbols may be achieved using the \verb+bm+ package and the
+\verb+\bm{#1}+ command it supplies. For instance, a bold $\alpha$ can
+be typeset as \verb+$\bm{\alpha}$+ giving $\bm{\alpha}$. Fraktur and
+Blackboard (or open face or double struck) characters should be
+typeset using the \verb+\mathfrak{#1}+ and \verb+\mathbb{#1}+ commands
+respectively. Both are supplied by the \texttt{amssymb} package. For
+example, \verb+$\mathbb{R}$+ gives $\mathbb{R}$ and
+\verb+$\mathfrak{G}$+ gives $\mathfrak{G}$
+
+In \LaTeX\ there are many different ways to display equations, and a
+few preferred ways are noted below. Displayed math will center by
+default. Use the class option \verb+fleqn+ to flush equations left.
+
+Below we have numbered single-line equations, the most common kind:
+\begin{eqnarray}
+\chi_+(p)\alt{\bf [}2|{\bf p}|(|{\bf p}|+p_z){\bf ]}^{-1/2}
+\left(
+\begin{array}{c}
+|{\bf p}|+p_z\\
+px+ip_y
+\end{array}\right)\;,
+\\
+\left\{%
+ \openone234567890abc123\alpha\beta\gamma\delta1234556\alpha\beta
+ \frac{1\sum^{a}_{b}}{A^2}%
+\right\}%
+\label{eq:one}.
+\end{eqnarray}
+Note the open one in Eq.~(\ref{eq:one}).
+
+Not all numbered equations will fit within a narrow column this
+way. The equation number will move down automatically if it cannot fit
+on the same line with a one-line equation:
+\begin{equation}
+\left\{
+ ab12345678abc123456abcdef\alpha\beta\gamma\delta1234556\alpha\beta
+ \frac{1\sum^{a}_{b}}{A^2}%
+\right\}.
+\end{equation}
+
+When the \verb+\label{#1}+ command is used [cf. input for
+Eq.~(\ref{eq:one})], the equation can be referred to in text without
+knowing the equation number that \TeX\ will assign to it. Just
+use \verb+\ref{#1}+, where \verb+#1+ is the same name that used in
+the \verb+\label{#1}+ command.
+
+Unnumbered single-line equations can be typeset
+using the \verb+\[+, \verb+\]+ format:
+\[g^+g^+ \rightarrow g^+g^+g^+g^+ \dots ~,~~q^+q^+\rightarrow
+q^+g^+g^+ \dots ~. \]
+
+\subsection{Multiline equations}
+
+Multiline equations are obtained by using the \verb+eqnarray+
+environment. Use the \verb+\nonumber+ command at the end of each line
+to avoid assigning a number:
+\begin{eqnarray}
+{\cal M}=&&ig_Z^2(4E_1E_2)^{1/2}(l_i^2)^{-1}
+\delta_{\sigma_1,-\sigma_2}
+(g_{\sigma_2}^e)^2\chi_{-\sigma_2}(p_2)\nonumber\\
+&&\times
+[\epsilon_jl_i\epsilon_i]_{\sigma_1}\chi_{\sigma_1}(p_1),
+\end{eqnarray}
+\begin{eqnarray}
+\sum \vert M^{\text{viol}}_g \vert ^2&=&g^{2n-4}_S(Q^2)~N^{n-2}
+ (N^2-1)\nonumber \\
+ & &\times \left( \sum_{i<j}\right)
+ \sum_{\text{perm}}
+ \frac{1}{S_{12}}
+ \frac{1}{S_{12}}
+ \sum_\tau c^f_\tau~.
+\end{eqnarray}
+\textbf{Note:} Do not use \verb+\label{#1}+ on a line of a multiline
+equation if \verb+\nonumber+ is also used on that line. Incorrect
+cross-referencing will result. Notice the use \verb+\text{#1}+ for
+using a Roman font within a math environment.
+
+To set a multiline equation without \emph{any} equation
+numbers, use the \verb+\begin{eqnarray*}+,
+\verb+\end{eqnarray*}+ format:
+\begin{eqnarray*}
+\sum \vert M^{\text{viol}}_g \vert ^2&=&g^{2n-4}_S(Q^2)~N^{n-2}
+ (N^2-1)\\
+ & &\times \left( \sum_{i<j}\right)
+ \left(
+ \sum_{\text{perm}}\frac{1}{S_{12}S_{23}S_{n1}}
+ \right)
+ \frac{1}{S_{12}}~.
+\end{eqnarray*}
+To obtain numbers not normally produced by the automatic numbering,
+use the \verb+\tag{#1}+ command, where \verb+#1+ is the desired
+equation number. For example, to get an equation number of
+(\ref{eq:mynum}),
+\begin{equation}
+g^+g^+ \rightarrow g^+g^+g^+g^+ \dots ~,~~q^+q^+\rightarrow
+q^+g^+g^+ \dots ~. \tag{2.6$'$}\label{eq:mynum}
+\end{equation}
+
+A few notes on \verb=\tag{#1}=. \verb+\tag{#1}+ requires
+\texttt{amsmath}. The \verb+\tag{#1}+ must come before the
+\verb+\label{#1}+, if any. The numbering set with \verb+\tag{#1}+ is
+\textit{transparent} to the automatic numbering in REV\TeX{};
+therefore, the number must be known ahead of time, and it must be
+manually adjusted if other equations are added. \verb+\tag{#1}+ works
+with both single-line and multiline equations. \verb+\tag{#1}+ should
+only be used in exceptional case - do not use it to number all
+equations in a paper.
+
+Enclosing single-line and multiline equations in
+\verb+\begin{subequations}+ and \verb+\end{subequations}+ will produce
+a set of equations that are ``numbered'' with letters, as shown in
+Eqs.~(\ref{subeq:1}) and (\ref{subeq:2}) below:
+\begin{subequations}
+\label{eq:whole}
+\begin{equation}
+\left\{
+ abc123456abcdef\alpha\beta\gamma\delta1234556\alpha\beta
+ \frac{1\sum^{a}_{b}}{A^2}
+\right\},\label{subeq:1}
+\end{equation}
+\begin{eqnarray}
+{\cal M}=&&ig_Z^2(4E_1E_2)^{1/2}(l_i^2)^{-1}
+(g_{\sigma_2}^e)^2\chi_{-\sigma_2}(p_2)\nonumber\\
+&&\times
+[\epsilon_i]_{\sigma_1}\chi_{\sigma_1}(p_1).\label{subeq:2}
+\end{eqnarray}
+\end{subequations}
+Putting a \verb+\label{#1}+ command right after the
+\verb+\begin{subequations}+, allows one to
+reference all the equations in a subequations environment. For
+example, the equations in the preceding subequations environment were
+Eqs.~(\ref{eq:whole}).
+
+\subsubsection{Wide equations}
+The equation that follows is set in a wide format, i.e., it spans
+across the full page. The wide format is reserved for long equations
+that cannot be easily broken into four lines or less:
+\begin{widetext}
+\begin{equation}
+{\cal R}^{(\text{d})}=
+ g_{\sigma_2}^e
+ \left(
+ \frac{[\Gamma^Z(3,21)]_{\sigma_1}}{Q_{12}^2-M_W^2}
+ +\frac{[\Gamma^Z(13,2)]_{\sigma_1}}{Q_{13}^2-M_W^2}
+ \right)
+ + x_WQ_e
+ \left(
+ \frac{[\Gamma^\gamma(3,21)]_{\sigma_1}}{Q_{12}^2-M_W^2}
+ +\frac{[\Gamma^\gamma(13,2)]_{\sigma_1}}{Q_{13}^2-M_W^2}
+ \right)\;. \label{eq:wideeq}
+\end{equation}
+\end{widetext}
+This is typed to show the output is in wide format.
+(Since there is no input line between \verb+\equation+ and
+this paragraph, there is no paragraph indent for this paragraph.)
+\section{Cross-referencing}
+REV\TeX{} will automatically number sections, equations, figure
+captions, and tables. In order to reference them in text, use the
+\verb+\label{#1}+ and \verb+\ref{#1}+ commands. To reference a
+particular page, use the \verb+\pageref{#1}+ command.
+
+The \verb+\label{#1}+ should appear in a section heading, within an
+equation, or in a table or figure caption. The \verb+\ref{#1}+ command
+is used in the text where the citation is to be displayed. Some
+examples: Section~\ref{sec:level1} on page~\pageref{sec:level1},
+Table~\ref{tab:table1},%
+\begin{table}
+\caption{\label{tab:table1}This is a narrow table which fits into a
+text column when using \texttt{twocolumn} formatting. Note that
+REV\TeX~4 adjusts the intercolumn spacing so that the table fills the
+entire width of the column. Table captions are numbered
+automatically. This table illustrates left-aligned, centered, and
+right-aligned columns. }
+\begin{ruledtabular}
+\begin{tabular}{lcr}
+Left\footnote{Note a.}&Centered\footnote{Note b.}&Right\\
+\hline
+1 & 2 & 3\\
+10 & 20 & 30\\
+100 & 200 & 300\\
+\end{tabular}
+\end{ruledtabular}
+\end{table}
+and Fig.~\ref{fig:epsart}.
+
+\section{Figures and Tables}
+Figures and tables are typically ``floats''; \LaTeX\ determines their
+final position via placement rules.
+\LaTeX\ isn't always successful in automatically placing floats where you wish them.
+
+Figures are marked up with the \texttt{figure} environment, the content of which
+imports the image (\verb+\includegraphics+) followed by the figure caption (\verb+\caption+).
+The argument of the latter command should itself contain a \verb+\label+ command if you
+wish to refer to your figure with \verb+\ref+.
+
+Import your image using either the \texttt{graphics} or
+\texttt{graphix} packages. These packages both define the
+\verb+\includegraphics{#1}+ command, but they differ in the optional
+arguments for specifying the orientation, scaling, and translation of the figure.
+Fig.~\ref{fig:epsart}%
+\begin{figure}
+\includegraphics{fig_1}% Here is how to import EPS art
+\caption{\label{fig:epsart} A figure caption. The figure captions are
+automatically numbered.}
+\end{figure}
+is small enough to fit in a single column, while
+Fig.~\ref{fig:wide}%
+\begin{figure*}
+\includegraphics{fig_2}% Here is how to import EPS art
+\caption{\label{fig:wide}Use the \texttt{figure*} environment to get a wide
+figure, spanning the page in \texttt{twocolumn} formatting.}
+\end{figure*}
+is too wide for a single column,
+so instead the \texttt{figure*} environment has been used.
+
+The analog of the \texttt{figure} environment is \texttt{table}, which uses
+the same \verb+\caption+ command.
+However, you should type your caption command first within the \texttt{table},
+instead of last as you did for \texttt{figure}.
+
+The heart of any table is the \texttt{tabular} environment,
+which represents the table content as a (vertical) sequence of table rows,
+each containing a (horizontal) sequence of table cells.
+Cells are separated by the \verb+&+ character;
+the row terminates with \verb+\\+.
+The required argument for the \texttt{tabular} environment
+specifies how data are displayed in each of the columns.
+For instance, a column
+may be centered (\verb+c+), left-justified (\verb+l+), right-justified (\verb+r+),
+or aligned on a decimal point (\verb+d+).
+(Table~\ref{tab:table4}%
+\begin{table}
+\caption{\label{tab:table4}Numbers in columns Three--Five have been
+aligned by using the ``d'' column specifier (requires the
+\texttt{dcolumn} package).
+Non-numeric entries (those entries without
+a ``.'') in a ``d'' column are aligned on the decimal point.
+Use the
+``D'' specifier for more complex layouts. }
+\begin{ruledtabular}
+\begin{tabular}{ccddd}
+One&Two&\mbox{Three}&\mbox{Four}&\mbox{Five}\\
+\hline
+one&two&\mbox{three}&\mbox{four}&\mbox{five}\\
+He&2& 2.77234 & 45672. & 0.69 \\
+C\footnote{Some tables require footnotes.}
+ &C\footnote{Some tables need more than one footnote.}
+ & 12537.64 & 37.66345 & 86.37 \\
+\end{tabular}
+\end{ruledtabular}
+\end{table}
+illustrates the use of decimal column alignment.)
+
+Extra column-spacing may be be specified as well, although
+REV\TeX~4 sets this spacing so that the columns fill the width of the
+table.
+Horizontal rules are typeset using the \verb+\hline+
+command.
+The doubled (or Scotch) rules that appear at the top and
+bottom of a table can be achieved by enclosing the \texttt{tabular}
+environment within a \texttt{ruledtabular} environment.
+Rows whose columns span multiple columns can be typeset using \LaTeX's
+\verb+\multicolumn{#1}{#2}{#3}+ command
+(for example, see the first row of Table~\ref{tab:table3}).%
+\begin{table*}
+\caption{\label{tab:table3}This is a wide table that spans the page
+width in \texttt{twocolumn} mode. It is formatted using the
+\texttt{table*} environment. It also demonstrates the use of
+\textbackslash\texttt{multicolumn} in rows with entries that span
+more than one column.}
+\begin{ruledtabular}
+\begin{tabular}{ccccc}
+ &\multicolumn{2}{c}{$D_{4h}^1$}&\multicolumn{2}{c}{$D_{4h}^5$}\\
+ Ion&1st alternative&2nd alternative&lst alternative
+&2nd alternative\\ \hline
+ K&$(2e)+(2f)$&$(4i)$ &$(2c)+(2d)$&$(4f)$ \\
+ Mn&$(2g)$\footnote{The $z$ parameter of these positions is $z\sim\frac{1}{4}$.}
+ &$(a)+(b)+(c)+(d)$&$(4e)$&$(2a)+(2b)$\\
+ Cl&$(a)+(b)+(c)+(d)$&$(2g)$\footnote{This is a footnote in a table that spans the full page
+width in \texttt{twocolumn} mode. It is supposed to set on the full width of the page, just as the caption does. }
+ &$(4e)^{\text{a}}$\\
+ He&$(8r)^{\text{a}}$&$(4j)^{\text{a}}$&$(4g)^{\text{a}}$\\
+ Ag& &$(4k)^{\text{a}}$& &$(4h)^{\text{a}}$\\
+\end{tabular}
+\end{ruledtabular}
+\end{table*}
+
+The tables in this document illustrate various effects.
+Tables that fit in a narrow column are contained in a \texttt{table}
+environment.
+Table~\ref{tab:table3} is a wide table, therefore set with the
+\texttt{table*} environment.
+Lengthy tables may need to break across pages.
+A simple way to allow this is to specify
+the \verb+[H]+ float placement on the \texttt{table} or
+\texttt{table*} environment.
+Alternatively, using the standard \LaTeXe\ package \texttt{longtable}
+gives more control over how tables break and allows headers and footers
+to be specified for each page of the table.
+An example of the use of \texttt{longtable} can be found
+in the file \texttt{summary.tex} that is included with the REV\TeX~4
+distribution.
+
+There are two methods for setting footnotes within a table (these
+footnotes will be displayed directly below the table rather than at
+the bottom of the page or in the bibliography).
+The easiest
+and preferred method is just to use the \verb+\footnote{#1}+
+command. This will automatically enumerate the footnotes with
+lowercase roman letters.
+However, it is sometimes necessary to have
+multiple entries in the table share the same footnote.
+In this case,
+create the footnotes using
+\verb+\footnotemark[#1]+ and \verb+\footnotetext[#1]{#2}+.
+\texttt{\#1} is a numeric value.
+Each time the same value for \texttt{\#1} is used,
+the same mark is produced in the table.
+The \verb+\footnotetext[#1]{#2}+ commands are placed after the \texttt{tabular}
+environment.
+Examine the \LaTeX\ source and output for Tables~\ref{tab:table1} and
+\ref{tab:table2}%
+\begin{table}
+\caption{\label{tab:table2}A table with more columns still fits
+properly in a column. Note that several entries share the same
+footnote. Inspect the \LaTeX\ input for this table to see
+exactly how it is done.}
+\begin{ruledtabular}
+\begin{tabular}{cccccccc}
+ &$r_c$ (\AA)&$r_0$ (\AA)&$\kappa r_0$&
+ &$r_c$ (\AA) &$r_0$ (\AA)&$\kappa r_0$\\
+\hline
+Cu& 0.800 & 14.10 & 2.550 &Sn\footnotemark[1]
+& 0.680 & 1.870 & 3.700 \\
+Ag& 0.990 & 15.90 & 2.710 &Pb\footnotemark[2]
+& 0.450 & 1.930 & 3.760 \\
+Au& 1.150 & 15.90 & 2.710 &Ca\footnotemark[3]
+& 0.750 & 2.170 & 3.560 \\
+Mg& 0.490 & 17.60 & 3.200 &Sr\footnotemark[4]
+& 0.900 & 2.370 & 3.720 \\
+Zn& 0.300 & 15.20 & 2.970 &Li\footnotemark[2]
+& 0.380 & 1.730 & 2.830 \\
+Cd& 0.530 & 17.10 & 3.160 &Na\footnotemark[5]
+& 0.760 & 2.110 & 3.120 \\
+Hg& 0.550 & 17.80 & 3.220 &K\footnotemark[5]
+& 1.120 & 2.620 & 3.480 \\
+Al& 0.230 & 15.80 & 3.240 &Rb\footnotemark[3]
+& 1.330 & 2.800 & 3.590 \\
+Ga& 0.310 & 16.70 & 3.330 &Cs\footnotemark[4]
+& 1.420 & 3.030 & 3.740 \\
+In& 0.460 & 18.40 & 3.500 &Ba\footnotemark[5]
+& 0.960 & 2.460 & 3.780 \\
+Tl& 0.480 & 18.90 & 3.550 & & & & \\
+\end{tabular}
+\end{ruledtabular}
+\footnotetext[1]{Here's the first, from Ref.~\onlinecite{feyn54}.}
+\footnotetext[2]{Here's the second.}
+\footnotetext[3]{Here's the third.}
+\footnotetext[4]{Here's the fourth.}
+\footnotetext[5]{And etc.}
+\end{table}
+for an illustration.
+
+All AIP journals require that the initial citation of
+figures or tables be in numerical order.
+\LaTeX's automatic numbering of floats is your friend here:
+just put each \texttt{figure} environment immediately following
+its first reference (\verb+\ref+), as we have done in this example file.
+
+\begin{acknowledgments}
+We wish to acknowledge the support of the author community in using
+REV\TeX{}, offering suggestions and encouragement, testing new versions,
+\dots.
+\end{acknowledgments}
+
+\appendix
+
+\section{Appendixes}
+
+To start the appendixes, use the \verb+\appendix+ command.
+This signals that all following section commands refer to appendixes
+instead of regular sections. Therefore, the \verb+\appendix+ command
+should be used only once---to set up the section commands to act as
+appendixes. Thereafter normal section commands are used. The heading
+for a section can be left empty. For example,
+\begin{verbatim}
+\appendix
+\section{}
+\end{verbatim}
+will produce an appendix heading that says ``APPENDIX A'' and
+\begin{verbatim}
+\appendix
+\section{Background}
+\end{verbatim}
+will produce an appendix heading that says ``APPENDIX A: BACKGROUND''
+(note that the colon is set automatically).
+
+If there is only one appendix, then the letter ``A'' should not
+appear. This is suppressed by using the star version of the appendix
+command (\verb+\appendix*+ in the place of \verb+\appendix+).
+
+\section{A little more on appendixes}
+
+Observe that this appendix was started by using
+\begin{verbatim}
+\section{A little more on appendixes}
+\end{verbatim}
+
+Note the equation number in an appendix:
+\begin{equation}
+E=mc^2.
+\end{equation}
+
+\subsection{\label{app:subsec}A subsection in an appendix}
+
+You can use a subsection or subsubsection in an appendix. Note the
+numbering: we are now in Appendix~\ref{app:subsec}.
+
+\subsubsection{\label{app:subsubsec}A subsubsection in an appendix}
+Note the equation numbers in this appendix, produced with the
+subequations environment:
+\begin{subequations}
+\begin{eqnarray}
+E&=&mc, \label{appa}
+\\
+E&=&mc^2, \label{appb}
+\\
+E&\agt& mc^3. \label{appc}
+\end{eqnarray}
+\end{subequations}
+They turn out to be Eqs.~(\ref{appa}), (\ref{appb}), and (\ref{appc}).
+
+\nocite{*}
+\bibliography{aipsamp}% Produces the bibliography via BibTeX.
+
+\end{document}
+%
+% ****** End of file aipsamp.tex ******
diff --git a/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aip/aiptemplate.tex b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aip/aiptemplate.tex
new file mode 100644
index 0000000000..30c1763369
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aip/aiptemplate.tex
@@ -0,0 +1,107 @@
+%% ****** Start of file aiptemplate.tex ****** %
+%%
+%% This file is part of the files in the distribution of AIP substyles for REVTeX4.
+%% Version 4.1 of 9 October 2009.
+%%
+%
+% This is a template for producing documents for use with
+% the REVTEX 4.1 document class and the AIP substyles.
+%
+% Copy this file to another name and then work on that file.
+% That way, you always have this original template file to use.
+
+\documentclass[aip,graphicx]{revtex4-1}
+%\documentclass[aip,reprint]{revtex4-1}
+
+\draft % marks overfull lines with a black rule on the right
+
+\begin{document}
+
+% Use the \preprint command to place your local institutional report number
+% on the title page in preprint mode.
+% Multiple \preprint commands are allowed.
+%\preprint{}
+
+\title{} %Title of paper
+
+% repeat the \author .. \affiliation etc. as needed
+% \email, \thanks, \homepage, \altaffiliation all apply to the current author.
+% Explanatory text should go in the []'s,
+% actual e-mail address or url should go in the {}'s for \email and \homepage.
+% Please use the appropriate macro for the type of information
+
+% \affiliation command applies to all authors since the last \affiliation command.
+% The \affiliation command should follow the other information.
+
+\author{}
+%\email[]{Your e-mail address}
+%\homepage[]{Your web page}
+%\thanks{}
+%\altaffiliation{}
+\affiliation{}
+
+% Collaboration name, if desired (requires use of superscriptaddress option in \documentclass).
+% \noaffiliation is required (may also be used with the \author command).
+%\collaboration{}
+%\noaffiliation
+
+\date{\today}
+
+\begin{abstract}
+% insert abstract here
+\end{abstract}
+
+\pacs{}% insert suggested PACS numbers in braces on next line
+
+\maketitle %\maketitle must follow title, authors, abstract and \pacs
+
+% Body of paper goes here. Use proper sectioning commands.
+% References should be done using the \cite, \ref, and \label commands
+\section{}
+%\label{}
+\subsection{}
+\subsubsection{}
+
+% If in two-column mode, this environment will change to single-column format so that long equations can be displayed.
+% Use only when necessary.
+%\begin{widetext}
+%$$\mbox{put long equation here}$$
+%\end{widetext}
+
+% Figures should be put into the text as floats.
+% Use the graphics or graphicx packages (distributed with LaTeX2e).
+% See the LaTeX Graphics Companion by Michel Goosens, Sebastian Rahtz, and Frank Mittelbach for examples.
+%
+% Here is an example of the general form of a figure:
+% Fill in the caption in the braces of the \caption{} command.
+% Put the label that you will use with \ref{} command in the braces of the \label{} command.
+%
+% \begin{figure}
+% \includegraphics{}%
+% \caption{\label{}}%
+% \end{figure}
+
+% Tables may be be put in the text as floats.
+% Here is an example of the general form of a table:
+% Fill in the caption in the braces of the \caption{} command. Put the label
+% that you will use with \ref{} command in the braces of the \label{} command.
+% Insert the column specifiers (l, r, c, d, etc.) in the empty braces of the
+% \begin{tabular}{} command.
+%
+% \begin{table}
+% \caption{\label{} }
+% \begin{tabular}{}
+% \end{tabular}
+% \end{table}
+
+% If you have acknowledgments, this puts in the proper section head.
+%\begin{acknowledgments}
+% Put your acknowledgments here.
+%\end{acknowledgments}
+
+% Create the reference section using BibTeX:
+\bibliography{your-bib-file}
+
+\end{document}
+%
+% ****** End of file aiptemplate.tex ******
diff --git a/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aip/fig_1.eps b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aip/fig_1.eps
new file mode 100644
index 0000000000..8bc5bc8a74
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aip/fig_1.eps
@@ -0,0 +1,5 @@
+%!PS-Adobe-3.0
+%%BoundingBox: 0 0 100 100
+0 0 moveto 100 0 lineto 100 100 lineto 0 100 lineto 0 0 lineto stroke
+20 50 moveto /Times findfont 10 scalefont setfont (Test Figure) show
+%%EOF
diff --git a/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aip/fig_2.eps b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aip/fig_2.eps
new file mode 100644
index 0000000000..cda61493ce
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aip/fig_2.eps
@@ -0,0 +1,5 @@
+%!PS-Adobe-3.0
+%%BoundingBox: 0 0 500 80
+0 0 moveto 500 0 lineto 500 80 lineto 0 80 lineto 0 0 lineto stroke
+200 40 moveto /Times findfont 10 scalefont setfont (Wide Test Figure) show
+%%EOF
diff --git a/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aps/apssamp.bib b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aps/apssamp.bib
new file mode 100644
index 0000000000..ff2eace3e8
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aps/apssamp.bib
@@ -0,0 +1,484 @@
+@PREAMBLE{
+ "\providecommand{\noopsort}[1]{}"
+ # "\providecommand{\singleletter}[1]{#1}%"
+}
+
+@BOOK{Bire82,
+ author = {N. D. Birell and P. C. W. Davies},
+ year = 1982,
+ title = {Quantum Fields in Curved Space},
+ publisher = {Cambridge University Press}
+}
+
+@ARTICLE{feyn54,
+ author = "R. P. Feynman",
+ year = "1954",
+ journal = "Phys.\ Rev.",
+ volume = "94",
+ pages = "262",
+}
+
+@ARTICLE{epr,
+ author = "A. Einstein and {\relax Yu} Podolsky and N. Rosen",
+ collaboration = "EPR",
+ year = "1935",
+ journal = "Phys.\ Rev.",
+ volume = "47",
+ pages = "777",
+}
+
+@ARTICLE{Berman1983,
+ author = "G. P. Berman, Jr. and F. M. Izrailev, Jr.",
+ title = "Stability of nonlinear modes",
+ journal = "Physica D",
+ volume = "88",
+ pages = "445",
+ year = "1983",
+}
+
+@ARTICLE{Davies1998,
+ author = "E. B. Davies and L. Parns",
+ title = "Trapped modes in acoustic waveguides",
+ journal = "Q. J. Mech. Appl. Math.",
+ volume = "51",
+ pages = "477--492",
+ year = "1988",
+}
+
+@MISC{witten2001,
+ author = "Edward Witten",
+ eprint = "hep-th/0106109",
+ year = "2001",
+}
+
+@INBOOK{Beutler1994,
+ author = "E. Beutler",
+ editor = "E. Beutler and M. A. Lichtman and B. W. Coller and T. S. Kipps",
+ booktitle = "Williams Hematology",
+ chapter = "7",
+ pages = "654--662",
+ publisher = "McGraw-Hill",
+ year = "1994",
+
+ edition = "5",
+ address = "New York",
+ volume = "2",
+}
+
+@INCOLLECTION{Beutler1994a,
+ author = "E. Beutler",
+ editor = "E. Beutler and M. A. Lichtman and B. W. Coller and T. S. Kipps",
+ booktitle = "Williams Hematology",
+ chapter = "7",
+ pages = "654--662",
+ publisher = "McGraw-Hill",
+ year = "1994",
+
+ edition = "5",
+ address = "New York",
+ volume = "2",
+}
+
+@INBOOK{inbook-full,
+ author = "Donald E. Knuth",
+ booktitle = "Fundamental Algorithms",
+ volume = 1,
+ series = "The Art of Computer Programming",
+ publisher = "Addison-Wesley",
+ address = "Reading, Massachusetts",
+ edition = "Second",
+ month = "10~" # jan,
+ year = "\noopsort{1973b}1973",
+ type = "Section",
+ chapter = "1.2",
+ pages = "10--119",
+ note = "A full INBOOK entry",
+}
+
+@ARTICLE{Smith2005,
+ author = "J. S. Smith and G. W. Johnson",
+ journal = "Philos. Trans. R. Soc. London, Ser. B",
+ title = "",
+ year = "2005",
+
+ volume = "777",
+ pages = "1395",
+}
+
+@UNPUBLISHED{Smith2010,
+ author = "W. J. Smith and T. J. Johnson and B. G. Miller",
+ title = "Surface chemistry and preferential crystal orientation on a silicon surface",
+ note = "{J. Appl. Phys.} (unpublished)",
+
+ month = "",
+ year = "2010",
+}
+
+@UNPUBLISHED{Smith2010a,
+ author = "V. K. Smith and K. Johnson and M. O. Klein",
+ title = "Surface chemistry and preferential crystal orientation on a silicon surface",
+ note = "{J. Appl. Phys.} (submitted)",
+
+ month = "",
+ year = "2010",
+}
+
+@UNPUBLISHED{unpublished-full,
+ author = "Ulrich {\"{U}}nderwood and Ned {\~N}et and Paul {\={P}}ot",
+ title = "Lower Bounds for Wishful Research Results",
+ month = nov # ", " # dec,
+ year = 1988,
+ note = "Talk at Fanstord University (A full UNPUBLISHED entry)",
+}
+
+@MISC{JohnsonMillerSmith2007,
+
+ author = "M. P. Johnson and K. L. Miller and K. Smith",
+ title = "",
+ howpublished = "personal communication",
+ month = "1~" # may,
+ year = "2007",
+ note = "",
+}
+
+@PROCEEDINGS{Smith2007,
+ title = "AIP Conf. Proc.",
+ year = "2007",
+
+ editor = "J. Smith",
+ volume = "841",
+ number = "21",
+ series = "",
+ address = "",
+ month = "",
+ organization = "",
+ publisher = "",
+ note = "",
+}
+
+@PROCEEDINGS{proceedings-full,
+ editor = "Wizard V. Oz and Mihalis Yannakakis",
+ title = "Proc. Fifteenth Annual",
+ number = 17,
+ series = "All ACM Conferences",
+ month = mar,
+ year = 1983,
+ address = "Boston",
+ organization = "ACM",
+ publisher = "Academic Press",
+ note = "A full PROCEEDINGS entry",
+}
+
+@UNPUBLISHED{Burstyn2004,
+ author = "Y. Burstyn",
+ title = "{Proceedings of the 5th International Molecular Beam Epitaxy Conference, Santa Fe, NM}",
+ note = "(unpublished)",
+
+ month = "5--8~" # oct,
+ year = "2004",
+}
+
+@PROCEEDINGS{Quinn2001,
+ title = "{Proceedings of the 2003 Particle Accelerator Conference, Portland, OR, 12-16 May 2005}",
+ year = "2001",
+
+ editor = "B. Quinn",
+ address = "New York",
+ publisher = "Wiley",
+ note = "Albeit the conference was held in 2005, it was the 2003 conference, and the proceedings were published in 2001; go figure",
+}
+
+@ARTICLE{Agarwal2001,
+ author = "A. G. Agarwal",
+ title = "{Proceedings of the Fifth Low Temperature Conference, Madison, WI, 1999}",
+ journal = "Semiconductors",
+ year = "2001",
+
+ volume = "66",
+ pages = "1238",
+}
+
+@ARTICLE{SmithDA01,
+ author = "R. Smith",
+ title = "Hummingbirds are our friends",
+ journal = {J. Appl. Phys. (these proceedings)},
+ year = "2001",
+ volume = "",
+ number = "",
+ pages = "",
+ month = "",
+ note = "Abstract No. DA-01",
+}
+
+@ARTICLE{Smith2007a,
+ author = "J. Smith",
+ title = "",
+ journal = "Proc. SPIE",
+ year = "2007",
+
+ volume = "124",
+ pages = "367",
+ note = "Required title is missing",
+}
+
+@TECHREPORT{techreport-full,
+ author = "Tom T{\'{e}}rrific",
+ title = "An {$O(n \log n / \! \log\log n)$} Sorting Algorithm",
+ institution = "Fanstord University",
+ type = "Wishful Research Result",
+ number = "7",
+ address = "Computer Science Department, Fanstord, California",
+ month = oct,
+ year = 1988,
+ note = "A full TECHREPORT entry",
+}
+
+@TECHREPORT{Nelson1999,
+ author = "J. Nelson",
+ type = "{TWI Report}",
+ number = "666/1999",
+ institution = "",
+ year = jan # "~1999",
+
+ note = "Required institution missing",
+}
+
+@TECHREPORT{Fields2005,
+ author = "W. K. Fields",
+ type = "{ECE Report No.}",
+ number = "AL944",
+ institution = "",
+ year = "2005",
+
+ note = "Required institution missing",
+}
+
+@MISC{Zalkins2008,
+
+ author = "Y. M. Zalkins",
+ title = "",
+ howpublished = "e-print arXiv:cond-mat/040426",
+ month = "",
+ year = "2008",
+ note = "",
+}
+
+@MISC{Nelson2005,
+
+ author = "J. Nelson",
+ howpublished = "{U.S. Patent No.} 5,693,000",
+ year = "12~" # dec # "~2005",
+}
+
+@MASTERSTHESIS{Nelson1999a,
+ author = "J. K. Nelson",
+ title = "",
+ school = "New York University",
+ year = "1999",
+
+ type = "M.{S}. thesis",
+ address = "",
+ month = "",
+ note = "",
+}
+
+@MASTERSTHESIS{mastersthesis-full,
+ author = "{\'{E}}douard Masterly",
+ title = "Mastering Thesis Writing",
+ school = "Stanford University",
+ type = "Master's project",
+ address = "English Department",
+ month = jun # "-" # aug,
+ year = 1988,
+ note = "A full MASTERSTHESIS entry",
+}
+
+@PHDTHESIS{Smith2003,
+ author = "S. M. Smith",
+ title = "",
+ school = "Massachusetts Institute of Technology",
+ year = "2003",
+
+ type = "{Ph.D.} thesis",
+ address = "",
+ month = "",
+ note = "",
+}
+
+@ARTICLE{KawaLin2003,
+ author = "S. R. Kawa and S.-J. Lin",
+ title = "",
+ journal = "J. Geophys. Res.",
+ year = "2003",
+
+ volume = "108",
+ number = "D6",
+ pages = "4201",
+ month = "",
+ note = "{DOI:10.1029/2002JD002268}",
+}
+
+@PHDTHESIS{phdthesis-full,
+ author = "F. Phidias Phony-Baloney",
+ title = "Fighting Fire with Fire: Festooning {F}rench Phrases",
+ school = "Fanstord University",
+ type = "{PhD} Dissertation",
+ address = "Department of French",
+ month = jun # "-" # aug,
+ year = 1988,
+ note = "A full PHDTHESIS entry",
+}
+
+@BOOK{book-full,
+ author = "Donald E. Knuth",
+ title = "Seminumerical Algorithms",
+ volume = 2,
+ series = "The Art of Computer Programming",
+ publisher = "Addison-Wesley",
+ address = "Reading, Massachusetts",
+ edition = "Second",
+ month = "10~" # jan,
+ year = "\noopsort{1973c}1981",
+ note = "A full BOOK entry",
+}
+
+@BOOKLET{booklet-full,
+ author = "Jill C. Knvth",
+ title = "The Programming of Computer Art",
+ howpublished = "Vernier Art Center",
+ address = "Stanford, California",
+ month = feb,
+ year = 1988,
+ note = "A full BOOKLET entry",
+}
+
+@INBOOK{ballagh2000,
+ author = "R. Ballagh and C.M. Savage",
+ editor = "C.M. Savage and M. Das",
+ title = "Bose-Einstein condensation: from atomic physics to quantum fluids, Proceedings of the 13th Physics Summer School",
+ year = "2000",
+ publisher = "World Scientific",
+ address = "Singapore",
+ eprint = "cond-mat/0008070",
+}
+
+@INCOLLECTION{ballagh2000a,
+ author = "R. Ballagh and C.M. Savage",
+ title = "Bose-Einstein condensation: from atomic physics to quantum fluids",
+ editor = "C.M. Savage and M. Das",
+ booktitle = "Proceedings of the 13th Physics Summer School",
+ year = "2000",
+ publisher = "World Scientific",
+ address = "Singapore",
+ eprint = "cond-mat/0008070",
+}
+
+@inBook{Magnetism,
+ author = "W. Opechowski and R. Guccione",
+ title = "Introduction to the Theory of Normal Metals",
+ volume = "IIa",
+ pages = "105",
+ editor = "G. T. Rado and H. Suhl",
+ booktitle = "Magnetism",
+ publisher = "Academic Press",
+ address = "New York",
+ year = "1965",
+}
+
+@INCOLLECTION{Magnetisma,
+ author = "W. Opechowski and R. Guccione",
+ title = "Introduction to the Theory of Normal Metals",
+ editor = "G. T. Rado and H. Suhl",
+ booktitle = "Magnetism",
+ volume = "IIa",
+ pages = "105",
+ publisher = "Academic Press",
+ address = "New York",
+ year = "1965",
+}
+
+@INPROCEEDINGS{Magnetismb,
+ author = "W. Opechowski and R. Guccione",
+ title = "Introduction to the Theory of Normal Metals",
+ editor = "G. T. Rado and H. Suhl",
+ booktitle = "Magnetism",
+ volume = "IIa",
+ pages = "105",
+ publisher = "Academic Press",
+ address = "New York",
+ year = "1965",
+}
+
+@INBOOK{Smith80,
+ author = "J. M. Smith",
+ title = "Molecular Dynamics",
+ publisher = "Academic",
+ year = "1980",
+ address = "New York",
+ editor = "C. Brown",
+}
+
+@article{ZS71,
+ author = "V. E. Zakharov and A. B. Shabat",
+ title = "Exact theory of two-dimensional self-focusing and one-dimensional self-modulation of waves in nonlinear media",
+ journal = "Zh. Eksp. Teor. Fiz.",
+ volume = "61",
+ year = "1971",
+ pages = "118--134",
+ translation = "Sov. Phys. JETP \textbf{34}, 62 (1972)"
+}
+
+@INCOLLECTION{Smith80a,
+ author = "J. M. Smith",
+ booktitle = "Molecular Dynamics",
+ editor = "C. Brown",
+ publisher = "Academic",
+ year = "1980",
+ address = "New York",
+}
+
+@INCOLLECTION{incollection-full,
+ author = "Daniel D. Lincoll",
+ title = "Semigroups of Recurrences",
+ editor = "David J. Lipcoll and D. H. Lawrie and A. H. Sameh",
+ booktitle = "High Speed Computer and Algorithm Organization",
+ number = 23,
+ series = "Fast Computers",
+ chapter = 3,
+ type = "Part",
+ pages = "179--183",
+ publisher = "Academic Press",
+ address = "New York",
+ edition = "Third",
+ month = sep,
+ year = 1977,
+ note = "A full INCOLLECTION entry",
+}
+
+@INPROCEEDINGS{inproceedings-full,
+ author = "Alfred V. Oaho and Jeffrey D. Ullman and Mihalis Yannakakis",
+ title = "On Notions of Information Transfer in {VLSI} Circuits",
+ editor = "Wizard V. Oz and Mihalis Yannakakis",
+ booktitle = "Proc. Fifteenth Annual ACM",
+ bookaddress = "Boston, 1982",
+ number = 17,
+ series = "All ACM Conferences",
+ pages = "133--139",
+ month = mar,
+ year = 1983,
+ address = "New York",
+ organization = "ACM",
+ publisher = "Academic Press",
+ note = "A full INPROCEDINGS entry",
+}
+
+@MANUAL{manual-full,
+ author = "Larry Manmaker",
+ title = "The Definitive Computer Manual",
+ organization = "Chips-R-Us",
+ address = "Silicon Valley",
+ edition = "Silver",
+ month = apr # "-" # may,
+ year = 1986,
+ note = "A full MANUAL entry",
+}
diff --git a/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aps/apssamp.pdf b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aps/apssamp.pdf
new file mode 100644
index 0000000000..dbe9cea9c8
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aps/apssamp.pdf
Binary files differ
diff --git a/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aps/apssamp.tex b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aps/apssamp.tex
new file mode 100644
index 0000000000..b4b477900f
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aps/apssamp.tex
@@ -0,0 +1,757 @@
+% ****** Start of file apssamp.tex ******
+%
+% This file is part of the APS files in the REVTeX 4.1 distribution.
+% Version 4.1r of REVTeX, August 2010
+%
+% Copyright (c) 2009, 2010 The American Physical Society.
+%
+% See the REVTeX 4 README file for restrictions and more information.
+%
+% TeX'ing this file requires that you have AMS-LaTeX 2.0 installed
+% as well as the rest of the prerequisites for REVTeX 4.1
+%
+% See the REVTeX 4 README file
+% It also requires running BibTeX. The commands are as follows:
+%
+% 1) latex apssamp.tex
+% 2) bibtex apssamp
+% 3) latex apssamp.tex
+% 4) latex apssamp.tex
+%
+\documentclass[%
+ reprint,
+%superscriptaddress,
+%groupedaddress,
+%unsortedaddress,
+%runinaddress,
+%frontmatterverbose,
+%preprint,
+%showpacs,preprintnumbers,
+%nofootinbib,
+%nobibnotes,
+%bibnotes,
+ amsmath,amssymb,
+ aps,
+%pra,
+%prb,
+%rmp,
+%prstab,
+%prstper,
+%floatfix,
+]{revtex4-1}
+
+\usepackage{graphicx}% Include figure files
+\usepackage{dcolumn}% Align table columns on decimal point
+\usepackage{bm}% bold math
+%\usepackage{hyperref}% add hypertext capabilities
+%\usepackage[mathlines]{lineno}% Enable numbering of text and display math
+%\linenumbers\relax % Commence numbering lines
+
+%\usepackage[showframe,%Uncomment any one of the following lines to test
+%%scale=0.7, marginratio={1:1, 2:3}, ignoreall,% default settings
+%%text={7in,10in},centering,
+%%margin=1.5in,
+%%total={6.5in,8.75in}, top=1.2in, left=0.9in, includefoot,
+%%height=10in,a5paper,hmargin={3cm,0.8in},
+%]{geometry}
+
+\begin{document}
+
+\preprint{APS/123-QED}
+
+\title{Manuscript Title:\\with Forced Linebreak}% Force line breaks with \\
+\thanks{A footnote to the article title}%
+
+\author{Ann Author}
+ \altaffiliation[Also at ]{Physics Department, XYZ University.}%Lines break automatically or can be forced with \\
+\author{Second Author}%
+ \email{Second.Author@institution.edu}
+\affiliation{%
+ Authors' institution and/or address\\
+ This line break forced with \textbackslash\textbackslash
+}%
+
+\collaboration{MUSO Collaboration}%\noaffiliation
+
+\author{Charlie Author}
+ \homepage{http://www.Second.institution.edu/~Charlie.Author}
+\affiliation{
+ Second institution and/or address\\
+ This line break forced% with \\
+}%
+\affiliation{
+ Third institution, the second for Charlie Author
+}%
+\author{Delta Author}
+\affiliation{%
+ Authors' institution and/or address\\
+ This line break forced with \textbackslash\textbackslash
+}%
+
+\collaboration{CLEO Collaboration}%\noaffiliation
+
+\date{\today}% It is always \today, today,
+ % but any date may be explicitly specified
+
+\begin{abstract}
+An article usually includes an abstract, a concise summary of the work
+covered at length in the main body of the article.
+\begin{description}
+\item[Usage]
+Secondary publications and information retrieval purposes.
+\item[PACS numbers]
+May be entered using the \verb+\pacs{#1}+ command.
+\item[Structure]
+You may use the \texttt{description} environment to structure your abstract;
+use the optional argument of the \verb+\item+ command to give the category of each item.
+\end{description}
+\end{abstract}
+
+\pacs{Valid PACS appear here}% PACS, the Physics and Astronomy
+ % Classification Scheme.
+%\keywords{Suggested keywords}%Use showkeys class option if keyword
+ %display desired
+\maketitle
+
+%\tableofcontents
+
+\section{\label{sec:level1}First-level heading:\protect\\ The line
+break was forced \lowercase{via} \textbackslash\textbackslash}
+
+This sample document demonstrates proper use of REV\TeX~4.1 (and
+\LaTeXe) in mansucripts prepared for submission to APS
+journals. Further information can be found in the REV\TeX~4.1
+documentation included in the distribution or available at
+\url{http://authors.aps.org/revtex4/}.
+
+When commands are referred to in this example file, they are always
+shown with their required arguments, using normal \TeX{} format. In
+this format, \verb+#1+, \verb+#2+, etc. stand for required
+author-supplied arguments to commands. For example, in
+\verb+\section{#1}+ the \verb+#1+ stands for the title text of the
+author's section heading, and in \verb+\title{#1}+ the \verb+#1+
+stands for the title text of the paper.
+
+Line breaks in section headings at all levels can be introduced using
+\textbackslash\textbackslash. A blank input line tells \TeX\ that the
+paragraph has ended. Note that top-level section headings are
+automatically uppercased. If a specific letter or word should appear in
+lowercase instead, you must escape it using \verb+\lowercase{#1}+ as
+in the word ``via'' above.
+
+\subsection{\label{sec:level2}Second-level heading: Formatting}
+
+This file may be formatted in either the \texttt{preprint} or
+\texttt{reprint} style. \texttt{reprint} format mimics final journal output.
+Either format may be used for submission purposes. \texttt{letter} sized paper should
+be used when submitting to APS journals.
+
+\subsubsection{Wide text (A level-3 head)}
+The \texttt{widetext} environment will make the text the width of the
+full page, as on page~\pageref{eq:wideeq}. (Note the use the
+\verb+\pageref{#1}+ command to refer to the page number.)
+\paragraph{Note (Fourth-level head is run in)}
+The width-changing commands only take effect in two-column formatting.
+There is no effect if text is in a single column.
+
+\subsection{\label{sec:citeref}Citations and References}
+A citation in text uses the command \verb+\cite{#1}+ or
+\verb+\onlinecite{#1}+ and refers to an entry in the bibliography.
+An entry in the bibliography is a reference to another document.
+
+\subsubsection{Citations}
+Because REV\TeX\ uses the \verb+natbib+ package of Patrick Daly,
+the entire repertoire of commands in that package are available for your document;
+see the \verb+natbib+ documentation for further details. Please note that
+REV\TeX\ requires version 8.31a or later of \verb+natbib+.
+
+\paragraph{Syntax}
+The argument of \verb+\cite+ may be a single \emph{key},
+or may consist of a comma-separated list of keys.
+The citation \emph{key} may contain
+letters, numbers, the dash (-) character, or the period (.) character.
+New with natbib 8.3 is an extension to the syntax that allows for
+a star (*) form and two optional arguments on the citation key itself.
+The syntax of the \verb+\cite+ command is thus (informally stated)
+\begin{quotation}\flushleft\leftskip1em
+\verb+\cite+ \verb+{+ \emph{key} \verb+}+, or\\
+\verb+\cite+ \verb+{+ \emph{optarg+key} \verb+}+, or\\
+\verb+\cite+ \verb+{+ \emph{optarg+key} \verb+,+ \emph{optarg+key}\ldots \verb+}+,
+\end{quotation}\noindent
+where \emph{optarg+key} signifies
+\begin{quotation}\flushleft\leftskip1em
+\emph{key}, or\\
+\texttt{*}\emph{key}, or\\
+\texttt{[}\emph{pre}\texttt{]}\emph{key}, or\\
+\texttt{[}\emph{pre}\texttt{]}\texttt{[}\emph{post}\texttt{]}\emph{key}, or even\\
+\texttt{*}\texttt{[}\emph{pre}\texttt{]}\texttt{[}\emph{post}\texttt{]}\emph{key}.
+\end{quotation}\noindent
+where \emph{pre} and \emph{post} is whatever text you wish to place
+at the beginning and end, respectively, of the bibliographic reference
+(see Ref.~[\onlinecite{witten2001}] and the two under Ref.~[\onlinecite{feyn54}]).
+(Keep in mind that no automatic space or punctuation is applied.)
+It is highly recommended that you put the entire \emph{pre} or \emph{post} portion
+within its own set of braces, for example:
+\verb+\cite+ \verb+{+ \texttt{[} \verb+{+\emph{text}\verb+}+\texttt{]}\emph{key}\verb+}+.
+The extra set of braces will keep \LaTeX\ out of trouble if your \emph{text} contains the comma (,) character.
+
+The star (*) modifier to the \emph{key} signifies that the reference is to be
+merged with the previous reference into a single bibliographic entry,
+a common idiom in APS and AIP articles (see below, Ref.~[\onlinecite{epr}]).
+When references are merged in this way, they are separated by a semicolon instead of
+the period (full stop) that would otherwise appear.
+
+\paragraph{Eliding repeated information}
+When a reference is merged, some of its fields may be elided: for example,
+when the author matches that of the previous reference, it is omitted.
+If both author and journal match, both are omitted.
+If the journal matches, but the author does not, the journal is replaced by \emph{ibid.},
+as exemplified by Ref.~[\onlinecite{epr}].
+These rules embody common editorial practice in APS and AIP journals and will only
+be in effect if the markup features of the APS and AIP Bib\TeX\ styles is employed.
+
+\paragraph{The options of the cite command itself}
+Please note that optional arguments to the \emph{key} change the reference in the bibliography,
+not the citation in the body of the document.
+For the latter, use the optional arguments of the \verb+\cite+ command itself:
+\verb+\cite+ \texttt{*}\allowbreak
+\texttt{[}\emph{pre-cite}\texttt{]}\allowbreak
+\texttt{[}\emph{post-cite}\texttt{]}\allowbreak
+\verb+{+\emph{key-list}\verb+}+.
+
+\subsubsection{Example citations}
+By default, citations are numerical\cite{Beutler1994}.
+Author-year citations are used when the journal is RMP.
+To give a textual citation, use \verb+\onlinecite{#1}+:
+Refs.~\onlinecite{[][{, and references therein}]witten2001,Bire82}.
+By default, the \texttt{natbib} package automatically sorts your citations into numerical order and ``compresses'' runs of three or more consecutive numerical citations.
+REV\TeX\ provides the ability to automatically change the punctuation when switching between journal styles that provide citations in square brackets and those that use a superscript style instead. This is done through the \texttt{citeautoscript} option. For instance, the journal style \texttt{prb} automatically invokes this option because \textit{Physical
+Review B} uses superscript-style citations. The effect is to move the punctuation, which normally comes after a citation in square brackets, to its proper position before the superscript.
+To illustrate, we cite several together
+\cite{[See the explanation of time travel in ]feyn54,*[The classical relativistic treatment of ][ is a relative classic]epr,witten2001,Berman1983,Davies1998,Bire82},
+and once again in different order (Refs.~\cite{epr,feyn54,Bire82,Berman1983,witten2001,Davies1998}).
+Note that the citations were both compressed and sorted. Futhermore, running this sample file under the \texttt{prb} option will move the punctuation to the correct place.
+
+When the \verb+prb+ class option is used, the \verb+\cite{#1}+ command
+displays the reference's number as a superscript rather than in
+square brackets. Note that the location of the \verb+\cite{#1}+
+command should be adjusted for the reference style: the superscript
+references in \verb+prb+ style must appear after punctuation;
+otherwise the reference must appear before any punctuation. This
+sample was written for the regular (non-\texttt{prb}) citation style.
+The command \verb+\onlinecite{#1}+ in the \texttt{prb} style also
+displays the reference on the baseline.
+
+\subsubsection{References}
+A reference in the bibliography is specified by a \verb+\bibitem{#1}+ command
+with the same argument as the \verb+\cite{#1}+ command.
+\verb+\bibitem{#1}+ commands may be crafted by hand or, preferably,
+generated by Bib\TeX.
+REV\TeX~4.1 includes Bib\TeX\ style files
+\verb+apsrev4-1.bst+, \verb+apsrmp4-1.bst+ appropriate for
+\textit{Physical Review} and \textit{Reviews of Modern Physics},
+respectively. To display titles for cited journal articles, use the \texttt{longbibliography} class option.
+
+\subsubsection{Example references}
+This sample file employs the \verb+\bibliography+ command,
+which formats the \texttt{\jobname .bbl} file
+and specifies which bibliographic databases are to be used by Bib\TeX\
+(one of these should be by arXiv convention \texttt{\jobname .bib}).
+Running Bib\TeX\ (via \texttt{bibtex \jobname})
+after the first pass of \LaTeX\ produces the file
+\texttt{\jobname .bbl} which contains the automatically formatted
+\verb+\bibitem+ commands (including extra markup information via
+\verb+\bibinfo+ and \verb+\bibfield+ commands).
+If not using Bib\TeX, you will have to create the \verb+thebibiliography+ environment
+and its \verb+\bibitem+ commands by hand.
+
+Numerous examples of the use of the APS bibliographic entry types appear in the bibliography of this sample document.
+You can refer to the \texttt{\jobname .bib} file,
+and compare its information to the formatted bibliography itself.
+
+\subsection{Footnotes}%
+Footnotes, produced using the \verb+\footnote{#1}+ command,
+usually integrated into the bibliography alongside the other entries.
+Numerical citation styles do this%
+\footnote{Automatically placing footnotes into the bibliography requires using BibTeX to compile the bibliography.};
+author-year citation styles place the footnote at the bottom of the text column.
+Note: due to the method used to place footnotes in the bibliography,
+\emph{you must re-run Bib\TeX\ every time you change any of your document's footnotes}.
+
+\section{Math and Equations}
+Inline math may be typeset using the \verb+$+ delimiters. Bold math
+symbols may be achieved using the \verb+bm+ package and the
+\verb+\bm{#1}+ command it supplies. For instance, a bold $\alpha$ can
+be typeset as \verb+$\bm{\alpha}$+ giving $\bm{\alpha}$. Fraktur and
+Blackboard (or open face or double struck) characters should be
+typeset using the \verb+\mathfrak{#1}+ and \verb+\mathbb{#1}+ commands
+respectively. Both are supplied by the \texttt{amssymb} package. For
+example, \verb+$\mathbb{R}$+ gives $\mathbb{R}$ and
+\verb+$\mathfrak{G}$+ gives $\mathfrak{G}$
+
+In \LaTeX\ there are many different ways to display equations, and a
+few preferred ways are noted below. Displayed math will center by
+default. Use the class option \verb+fleqn+ to flush equations left.
+
+Below we have numbered single-line equations; this is the most common
+type of equation in \textit{Physical Review}:
+\begin{eqnarray}
+\chi_+(p)\alt{\bf [}2|{\bf p}|(|{\bf p}|+p_z){\bf ]}^{-1/2}
+\left(
+\begin{array}{c}
+|{\bf p}|+p_z\\
+px+ip_y
+\end{array}\right)\;,
+\\
+\left\{%
+ \openone234567890abc123\alpha\beta\gamma\delta1234556\alpha\beta
+ \frac{1\sum^{a}_{b}}{A^2}%
+\right\}%
+\label{eq:one}.
+\end{eqnarray}
+Note the open one in Eq.~(\ref{eq:one}).
+
+Not all numbered equations will fit within a narrow column this
+way. The equation number will move down automatically if it cannot fit
+on the same line with a one-line equation:
+\begin{equation}
+\left\{
+ ab12345678abc123456abcdef\alpha\beta\gamma\delta1234556\alpha\beta
+ \frac{1\sum^{a}_{b}}{A^2}%
+\right\}.
+\end{equation}
+
+When the \verb+\label{#1}+ command is used [cf. input for
+Eq.~(\ref{eq:one})], the equation can be referred to in text without
+knowing the equation number that \TeX\ will assign to it. Just
+use \verb+\ref{#1}+, where \verb+#1+ is the same name that used in
+the \verb+\label{#1}+ command.
+
+Unnumbered single-line equations can be typeset
+using the \verb+\[+, \verb+\]+ format:
+\[g^+g^+ \rightarrow g^+g^+g^+g^+ \dots ~,~~q^+q^+\rightarrow
+q^+g^+g^+ \dots ~. \]
+
+
+\subsection{Multiline equations}
+
+Multiline equations are obtained by using the \verb+eqnarray+
+environment. Use the \verb+\nonumber+ command at the end of each line
+to avoid assigning a number:
+\begin{eqnarray}
+{\cal M}=&&ig_Z^2(4E_1E_2)^{1/2}(l_i^2)^{-1}
+\delta_{\sigma_1,-\sigma_2}
+(g_{\sigma_2}^e)^2\chi_{-\sigma_2}(p_2)\nonumber\\
+&&\times
+[\epsilon_jl_i\epsilon_i]_{\sigma_1}\chi_{\sigma_1}(p_1),
+\end{eqnarray}
+\begin{eqnarray}
+\sum \vert M^{\text{viol}}_g \vert ^2&=&g^{2n-4}_S(Q^2)~N^{n-2}
+ (N^2-1)\nonumber \\
+ & &\times \left( \sum_{i<j}\right)
+ \sum_{\text{perm}}
+ \frac{1}{S_{12}}
+ \frac{1}{S_{12}}
+ \sum_\tau c^f_\tau~.
+\end{eqnarray}
+\textbf{Note:} Do not use \verb+\label{#1}+ on a line of a multiline
+equation if \verb+\nonumber+ is also used on that line. Incorrect
+cross-referencing will result. Notice the use \verb+\text{#1}+ for
+using a Roman font within a math environment.
+
+To set a multiline equation without \emph{any} equation
+numbers, use the \verb+\begin{eqnarray*}+,
+\verb+\end{eqnarray*}+ format:
+\begin{eqnarray*}
+\sum \vert M^{\text{viol}}_g \vert ^2&=&g^{2n-4}_S(Q^2)~N^{n-2}
+ (N^2-1)\\
+ & &\times \left( \sum_{i<j}\right)
+ \left(
+ \sum_{\text{perm}}\frac{1}{S_{12}S_{23}S_{n1}}
+ \right)
+ \frac{1}{S_{12}}~.
+\end{eqnarray*}
+
+To obtain numbers not normally produced by the automatic numbering,
+use the \verb+\tag{#1}+ command, where \verb+#1+ is the desired
+equation number. For example, to get an equation number of
+(\ref{eq:mynum}),
+\begin{equation}
+g^+g^+ \rightarrow g^+g^+g^+g^+ \dots ~,~~q^+q^+\rightarrow
+q^+g^+g^+ \dots ~. \tag{2.6$'$}\label{eq:mynum}
+\end{equation}
+
+\paragraph{A few notes on \texttt{tag}s}
+\verb+\tag{#1}+ requires the \texttt{amsmath} package.
+Place the \verb+\tag{#1}+ command before the \verb+\label{#1}+, if any.
+The numbering produced by \verb+\tag{#1}+ \textit{does not affect}
+the automatic numbering in REV\TeX;
+therefore, the number must be known ahead of time,
+and it must be manually adjusted if other equations are added.
+\verb+\tag{#1}+ works with both single-line and multiline equations.
+\verb+\tag{#1}+ should only be used in exceptional cases---%
+do not use it to number many equations in your paper.
+Please note that this feature of the \texttt{amsmath} package
+is \emph{not} compatible with the \texttt{hyperref} (6.77u) package.
+
+Enclosing display math within
+\verb+\begin{subequations}+ and \verb+\end{subequations}+ will produce
+a set of equations that are labeled with letters, as shown in
+Eqs.~(\ref{subeq:1}) and (\ref{subeq:2}) below.
+You may include any number of single-line and multiline equations,
+although it is probably not a good idea to follow one display math
+directly after another.
+\begin{subequations}
+\label{eq:whole}
+\begin{eqnarray}
+{\cal M}=&&ig_Z^2(4E_1E_2)^{1/2}(l_i^2)^{-1}
+(g_{\sigma_2}^e)^2\chi_{-\sigma_2}(p_2)\nonumber\\
+&&\times
+[\epsilon_i]_{\sigma_1}\chi_{\sigma_1}(p_1).\label{subeq:2}
+\end{eqnarray}
+\begin{equation}
+\left\{
+ abc123456abcdef\alpha\beta\gamma\delta1234556\alpha\beta
+ \frac{1\sum^{a}_{b}}{A^2}
+\right\},\label{subeq:1}
+\end{equation}
+\end{subequations}
+Giving a \verb+\label{#1}+ command directly after the \verb+\begin{subequations}+,
+allows you to reference all the equations in the \texttt{subequations} environment.
+For example, the equations in the preceding subequations environment were
+Eqs.~(\ref{eq:whole}).
+
+\subsubsection{Wide equations}
+The equation that follows is set in a wide format, i.e., it spans the full page.
+The wide format is reserved for long equations
+that cannot easily be set in a single column:
+\begin{widetext}
+\begin{equation}
+{\cal R}^{(\text{d})}=
+ g_{\sigma_2}^e
+ \left(
+ \frac{[\Gamma^Z(3,21)]_{\sigma_1}}{Q_{12}^2-M_W^2}
+ +\frac{[\Gamma^Z(13,2)]_{\sigma_1}}{Q_{13}^2-M_W^2}
+ \right)
+ + x_WQ_e
+ \left(
+ \frac{[\Gamma^\gamma(3,21)]_{\sigma_1}}{Q_{12}^2-M_W^2}
+ +\frac{[\Gamma^\gamma(13,2)]_{\sigma_1}}{Q_{13}^2-M_W^2}
+ \right)\;.
+ \label{eq:wideeq}
+\end{equation}
+\end{widetext}
+This is typed to show how the output appears in wide format.
+(Incidentally, since there is no blank line between the \texttt{equation} environment above
+and the start of this paragraph, this paragraph is not indented.)
+
+\section{Cross-referencing}
+REV\TeX{} will automatically number such things as
+sections, footnotes, equations, figure captions, and table captions.
+In order to reference them in text, use the
+\verb+\label{#1}+ and \verb+\ref{#1}+ commands.
+To reference a particular page, use the \verb+\pageref{#1}+ command.
+
+The \verb+\label{#1}+ should appear
+within the section heading,
+within the footnote text,
+within the equation, or
+within the table or figure caption.
+The \verb+\ref{#1}+ command
+is used in text at the point where the reference is to be displayed.
+Some examples: Section~\ref{sec:level1} on page~\pageref{sec:level1},
+Table~\ref{tab:table1},%
+\begin{table}[b]%The best place to locate the table environment is directly after its first reference in text
+\caption{\label{tab:table1}%
+A table that fits into a single column of a two-column layout.
+Note that REV\TeX~4 adjusts the intercolumn spacing so that the table fills the
+entire width of the column. Table captions are numbered
+automatically.
+This table illustrates left-, center-, decimal- and right-aligned columns,
+along with the use of the \texttt{ruledtabular} environment which sets the
+Scotch (double) rules above and below the alignment, per APS style.
+}
+\begin{ruledtabular}
+\begin{tabular}{lcdr}
+\textrm{Left\footnote{Note a.}}&
+\textrm{Centered\footnote{Note b.}}&
+\multicolumn{1}{c}{\textrm{Decimal}}&
+\textrm{Right}\\
+\colrule
+1 & 2 & 3.001 & 4\\
+10 & 20 & 30 & 40\\
+100 & 200 & 300.0 & 400\\
+\end{tabular}
+\end{ruledtabular}
+\end{table}
+and Fig.~\ref{fig:epsart}.%
+\begin{figure}[b]
+\includegraphics{fig_1}% Here is how to import EPS art
+\caption{\label{fig:epsart} A figure caption. The figure captions are
+automatically numbered.}
+\end{figure}
+
+\section{Floats: Figures, Tables, Videos, etc.}
+Figures and tables are usually allowed to ``float'', which means that their
+placement is determined by \LaTeX, while the document is being typeset.
+
+Use the \texttt{figure} environment for a figure, the \texttt{table} environment for a table.
+In each case, use the \verb+\caption+ command within to give the text of the
+figure or table caption along with the \verb+\label+ command to provide
+a key for referring to this figure or table.
+The typical content of a figure is an image of some kind;
+that of a table is an alignment.%
+\begin{figure*}
+\includegraphics{fig_2}% Here is how to import EPS art
+\caption{\label{fig:wide}Use the figure* environment to get a wide
+figure that spans the page in \texttt{twocolumn} formatting.}
+\end{figure*}
+\begin{table*}
+\caption{\label{tab:table3}This is a wide table that spans the full page
+width in a two-column layout. It is formatted using the
+\texttt{table*} environment. It also demonstates the use of
+\textbackslash\texttt{multicolumn} in rows with entries that span
+more than one column.}
+\begin{ruledtabular}
+\begin{tabular}{ccccc}
+ &\multicolumn{2}{c}{$D_{4h}^1$}&\multicolumn{2}{c}{$D_{4h}^5$}\\
+ Ion&1st alternative&2nd alternative&lst alternative
+&2nd alternative\\ \hline
+ K&$(2e)+(2f)$&$(4i)$ &$(2c)+(2d)$&$(4f)$ \\
+ Mn&$(2g)$\footnote{The $z$ parameter of these positions is $z\sim\frac{1}{4}$.}
+ &$(a)+(b)+(c)+(d)$&$(4e)$&$(2a)+(2b)$\\
+ Cl&$(a)+(b)+(c)+(d)$&$(2g)$\footnotemark[1]
+ &$(4e)^{\text{a}}$\\
+ He&$(8r)^{\text{a}}$&$(4j)^{\text{a}}$&$(4g)^{\text{a}}$\\
+ Ag& &$(4k)^{\text{a}}$& &$(4h)^{\text{a}}$\\
+\end{tabular}
+\end{ruledtabular}
+\end{table*}
+
+Insert an image using either the \texttt{graphics} or
+\texttt{graphix} packages, which define the \verb+\includegraphics{#1}+ command.
+(The two packages differ in respect of the optional arguments
+used to specify the orientation, scaling, and translation of the image.)
+To create an alignment, use the \texttt{tabular} environment.
+
+The best place to locate the \texttt{figure} or \texttt{table} environment
+is immediately following its first reference in text; this sample document
+illustrates this practice for Fig.~\ref{fig:epsart}, which
+shows a figure that is small enough to fit in a single column.
+
+In exceptional cases, you will need to move the float earlier in the document, as was done
+with Table~\ref{tab:table3}: \LaTeX's float placement algorithms need to know
+about a full-page-width float earlier.
+
+Fig.~\ref{fig:wide}
+has content that is too wide for a single column,
+so the \texttt{figure*} environment has been used.%
+\begin{table}[b]
+\caption{\label{tab:table4}%
+Numbers in columns Three--Five are aligned with the ``d'' column specifier
+(requires the \texttt{dcolumn} package).
+Non-numeric entries (those entries without a ``.'') in a ``d'' column are aligned on the decimal point.
+Use the ``D'' specifier for more complex layouts. }
+\begin{ruledtabular}
+\begin{tabular}{ccddd}
+One&Two&
+\multicolumn{1}{c}{\textrm{Three}}&
+\multicolumn{1}{c}{\textrm{Four}}&
+\multicolumn{1}{c}{\textrm{Five}}\\
+%\mbox{Three}&\mbox{Four}&\mbox{Five}\\
+\hline
+one&two&\mbox{three}&\mbox{four}&\mbox{five}\\
+He&2& 2.77234 & 45672. & 0.69 \\
+C\footnote{Some tables require footnotes.}
+ &C\footnote{Some tables need more than one footnote.}
+ & 12537.64 & 37.66345 & 86.37 \\
+\end{tabular}
+\end{ruledtabular}
+\end{table}
+
+The content of a table is typically a \texttt{tabular} environment,
+giving rows of type in aligned columns.
+Column entries separated by \verb+&+'s, and
+each row ends with \textbackslash\textbackslash.
+The required argument for the \texttt{tabular} environment
+specifies how data are aligned in the columns.
+For instance, entries may be centered, left-justified, right-justified, aligned on a decimal
+point.
+Extra column-spacing may be be specified as well,
+although REV\TeX~4 sets this spacing so that the columns fill the width of the
+table. Horizontal rules are typeset using the \verb+\hline+
+command. The doubled (or Scotch) rules that appear at the top and
+bottom of a table can be achieved enclosing the \texttt{tabular}
+environment within a \texttt{ruledtabular} environment. Rows whose
+columns span multiple columns can be typeset using the
+\verb+\multicolumn{#1}{#2}{#3}+ command (for example, see the first
+row of Table~\ref{tab:table3}).%
+
+Tables~\ref{tab:table1}, \ref{tab:table3}, \ref{tab:table4}, and \ref{tab:table2}%
+\begin{table}[b]
+\caption{\label{tab:table2}
+A table with numerous columns that still fits into a single column.
+Here, several entries share the same footnote.
+Inspect the \LaTeX\ input for this table to see exactly how it is done.}
+\begin{ruledtabular}
+\begin{tabular}{cccccccc}
+ &$r_c$ (\AA)&$r_0$ (\AA)&$\kappa r_0$&
+ &$r_c$ (\AA) &$r_0$ (\AA)&$\kappa r_0$\\
+\hline
+Cu& 0.800 & 14.10 & 2.550 &Sn\footnotemark[1]
+& 0.680 & 1.870 & 3.700 \\
+Ag& 0.990 & 15.90 & 2.710 &Pb\footnotemark[2]
+& 0.450 & 1.930 & 3.760 \\
+Au& 1.150 & 15.90 & 2.710 &Ca\footnotemark[3]
+& 0.750 & 2.170 & 3.560 \\
+Mg& 0.490 & 17.60 & 3.200 &Sr\footnotemark[4]
+& 0.900 & 2.370 & 3.720 \\
+Zn& 0.300 & 15.20 & 2.970 &Li\footnotemark[2]
+& 0.380 & 1.730 & 2.830 \\
+Cd& 0.530 & 17.10 & 3.160 &Na\footnotemark[5]
+& 0.760 & 2.110 & 3.120 \\
+Hg& 0.550 & 17.80 & 3.220 &K\footnotemark[5]
+& 1.120 & 2.620 & 3.480 \\
+Al& 0.230 & 15.80 & 3.240 &Rb\footnotemark[3]
+& 1.330 & 2.800 & 3.590 \\
+Ga& 0.310 & 16.70 & 3.330 &Cs\footnotemark[4]
+& 1.420 & 3.030 & 3.740 \\
+In& 0.460 & 18.40 & 3.500 &Ba\footnotemark[5]
+& 0.960 & 2.460 & 3.780 \\
+Tl& 0.480 & 18.90 & 3.550 & & & & \\
+\end{tabular}
+\end{ruledtabular}
+\footnotetext[1]{Here's the first, from Ref.~\onlinecite{feyn54}.}
+\footnotetext[2]{Here's the second.}
+\footnotetext[3]{Here's the third.}
+\footnotetext[4]{Here's the fourth.}
+\footnotetext[5]{And etc.}
+\end{table}
+show various effects.
+A table that fits in a single column employs the \texttt{table}
+environment.
+Table~\ref{tab:table3} is a wide table, set with the \texttt{table*} environment.
+Long tables may need to break across pages.
+The most straightforward way to accomplish this is to specify
+the \verb+[H]+ float placement on the \texttt{table} or
+\texttt{table*} environment.
+However, the \LaTeXe\ package \texttt{longtable} allows headers and footers to be specified for each page of the table.
+A simple example of the use of \texttt{longtable} can be found
+in the file \texttt{summary.tex} that is included with the REV\TeX~4
+distribution.
+
+There are two methods for setting footnotes within a table (these
+footnotes will be displayed directly below the table rather than at
+the bottom of the page or in the bibliography). The easiest
+and preferred method is just to use the \verb+\footnote{#1}+
+command. This will automatically enumerate the footnotes with
+lowercase roman letters. However, it is sometimes necessary to have
+multiple entries in the table share the same footnote. In this case,
+there is no choice but to manually create the footnotes using
+\verb+\footnotemark[#1]+ and \verb+\footnotetext[#1]{#2}+.
+\texttt{\#1} is a numeric value. Each time the same value for
+\texttt{\#1} is used, the same mark is produced in the table. The
+\verb+\footnotetext[#1]{#2}+ commands are placed after the \texttt{tabular}
+environment. Examine the \LaTeX\ source and output for
+Tables~\ref{tab:table1} and \ref{tab:table2}
+for examples.
+
+Video~\ref{vid:PRSTPER.4.010101}
+illustrates several features new with REV\TeX4.1,
+starting with the \texttt{video} environment, which is in the same category with
+\texttt{figure} and \texttt{table}.%
+\begin{video}
+\href{http://prst-per.aps.org/multimedia/PRSTPER/v4/i1/e010101/e010101_vid1a.mpg}{\includegraphics{vid_1a}}%
+ \quad
+\href{http://prst-per.aps.org/multimedia/PRSTPER/v4/i1/e010101/e010101_vid1b.mpg}{\includegraphics{vid_1b}}
+ \setfloatlink{http://link.aps.org/multimedia/PRSTPER/v4/i1/e010101}%
+ \caption{\label{vid:PRSTPER.4.010101}%
+ Students explain their initial idea about Newton's third law to a teaching assistant.
+ Clip (a): same force.
+ Clip (b): move backwards.
+ }%
+\end{video}
+The \verb+\setfloatlink+ command causes the title of the video to be a hyperlink to the
+indicated URL; it may be used with any environment that takes the \verb+\caption+
+command.
+The \verb+\href+ command has the same significance as it does in the context of
+the \texttt{hyperref} package: the second argument is a piece of text to be
+typeset in your document; the first is its hyperlink, a URL.
+
+\textit{Physical Review} style requires that the initial citation of
+figures or tables be in numerical order in text, so don't cite
+Fig.~\ref{fig:wide} until Fig.~\ref{fig:epsart} has been cited.
+
+\begin{acknowledgments}
+We wish to acknowledge the support of the author community in using
+REV\TeX{}, offering suggestions and encouragement, testing new versions,
+\dots.
+\end{acknowledgments}
+
+\appendix
+
+\section{Appendixes}
+
+To start the appendixes, use the \verb+\appendix+ command.
+This signals that all following section commands refer to appendixes
+instead of regular sections. Therefore, the \verb+\appendix+ command
+should be used only once---to setup the section commands to act as
+appendixes. Thereafter normal section commands are used. The heading
+for a section can be left empty. For example,
+\begin{verbatim}
+\appendix
+\section{}
+\end{verbatim}
+will produce an appendix heading that says ``APPENDIX A'' and
+\begin{verbatim}
+\appendix
+\section{Background}
+\end{verbatim}
+will produce an appendix heading that says ``APPENDIX A: BACKGROUND''
+(note that the colon is set automatically).
+
+If there is only one appendix, then the letter ``A'' should not
+appear. This is suppressed by using the star version of the appendix
+command (\verb+\appendix*+ in the place of \verb+\appendix+).
+
+\section{A little more on appendixes}
+
+Observe that this appendix was started by using
+\begin{verbatim}
+\section{A little more on appendixes}
+\end{verbatim}
+
+Note the equation number in an appendix:
+\begin{equation}
+E=mc^2.
+\end{equation}
+
+\subsection{\label{app:subsec}A subsection in an appendix}
+
+You can use a subsection or subsubsection in an appendix. Note the
+numbering: we are now in Appendix~\ref{app:subsec}.
+
+Note the equation numbers in this appendix, produced with the
+subequations environment:
+\begin{subequations}
+\begin{eqnarray}
+E&=&mc, \label{appa}
+\\
+E&=&mc^2, \label{appb}
+\\
+E&\agt& mc^3. \label{appc}
+\end{eqnarray}
+\end{subequations}
+They turn out to be Eqs.~(\ref{appa}), (\ref{appb}), and (\ref{appc}).
+
+% The \nocite command causes all entries in a bibliography to be printed out
+% whether or not they are actually referenced in the text. This is appropriate
+% for the sample file to show the different styles of references, but authors
+% most likely will not want to use it.
+\nocite{*}
+
+\bibliography{apssamp}% Produces the bibliography via BibTeX.
+
+\end{document}
+%
+% ****** End of file apssamp.tex ******
diff --git a/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aps/apstemplate.tex b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aps/apstemplate.tex
new file mode 100644
index 0000000000..a258e43354
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aps/apstemplate.tex
@@ -0,0 +1,176 @@
+%% ****** Start of file apstemplate.tex ****** %
+%%
+%%
+%% This file is part of the APS files in the REVTeX 4 distribution.
+%% Version 4.1r of REVTeX, August 2010
+%%
+%%
+%% Copyright (c) 2001, 2009, 2010 The American Physical Society.
+%%
+%% See the REVTeX 4 README file for restrictions and more information.
+%%
+%
+% This is a template for producing manuscripts for use with REVTEX 4.0
+% Copy this file to another name and then work on that file.
+% That way, you always have this original template file to use.
+%
+% Group addresses by affiliation; use superscriptaddress for long
+% author lists, or if there are many overlapping affiliations.
+% For Phys. Rev. appearance, change preprint to twocolumn.
+% Choose pra, prb, prc, prd, pre, prl, prstab, prstper, or rmp for journal
+% Add 'draft' option to mark overfull boxes with black boxes
+% Add 'showpacs' option to make PACS codes appear
+% Add 'showkeys' option to make keywords appear
+\documentclass[aps,prl,preprint,groupedaddress]{revtex4-1}
+%\documentclass[aps,prl,preprint,superscriptaddress]{revtex4-1}
+%\documentclass[aps,prl,reprint,groupedaddress]{revtex4-1}
+
+% You should use BibTeX and apsrev.bst for references
+% Choosing a journal automatically selects the correct APS
+% BibTeX style file (bst file), so only uncomment the line
+% below if necessary.
+%\bibliographystyle{apsrev4-1}
+
+\begin{document}
+
+% Use the \preprint command to place your local institutional report
+% number in the upper righthand corner of the title page in preprint mode.
+% Multiple \preprint commands are allowed.
+% Use the 'preprintnumbers' class option to override journal defaults
+% to display numbers if necessary
+%\preprint{}
+
+%Title of paper
+\title{}
+
+% repeat the \author .. \affiliation etc. as needed
+% \email, \thanks, \homepage, \altaffiliation all apply to the current
+% author. Explanatory text should go in the []'s, actual e-mail
+% address or url should go in the {}'s for \email and \homepage.
+% Please use the appropriate macro foreach each type of information
+
+% \affiliation command applies to all authors since the last
+% \affiliation command. The \affiliation command should follow the
+% other information
+% \affiliation can be followed by \email, \homepage, \thanks as well.
+\author{}
+%\email[]{Your e-mail address}
+%\homepage[]{Your web page}
+%\thanks{}
+%\altaffiliation{}
+\affiliation{}
+
+%Collaboration name if desired (requires use of superscriptaddress
+%option in \documentclass). \noaffiliation is required (may also be
+%used with the \author command).
+%\collaboration can be followed by \email, \homepage, \thanks as well.
+%\collaboration{}
+%\noaffiliation
+
+\date{\today}
+
+\begin{abstract}
+% insert abstract here
+\end{abstract}
+
+% insert suggested PACS numbers in braces on next line
+\pacs{}
+% insert suggested keywords - APS authors don't need to do this
+%\keywords{}
+
+%\maketitle must follow title, authors, abstract, \pacs, and \keywords
+\maketitle
+
+% body of paper here - Use proper section commands
+% References should be done using the \cite, \ref, and \label commands
+\section{}
+% Put \label in argument of \section for cross-referencing
+%\section{\label{}}
+\subsection{}
+\subsubsection{}
+
+% If in two-column mode, this environment will change to single-column
+% format so that long equations can be displayed. Use
+% sparingly.
+%\begin{widetext}
+% put long equation here
+%\end{widetext}
+
+% figures should be put into the text as floats.
+% Use the graphics or graphicx packages (distributed with LaTeX2e)
+% and the \includegraphics macro defined in those packages.
+% See the LaTeX Graphics Companion by Michel Goosens, Sebastian Rahtz,
+% and Frank Mittelbach for instance.
+%
+% Here is an example of the general form of a figure:
+% Fill in the caption in the braces of the \caption{} command. Put the label
+% that you will use with \ref{} command in the braces of the \label{} command.
+% Use the figure* environment if the figure should span across the
+% entire page. There is no need to do explicit centering.
+
+% \begin{figure}
+% \includegraphics{}%
+% \caption{\label{}}
+% \end{figure}
+
+% Surround figure environment with turnpage environment for landscape
+% figure
+% \begin{turnpage}
+% \begin{figure}
+% \includegraphics{}%
+% \caption{\label{}}
+% \end{figure}
+% \end{turnpage}
+
+% tables should appear as floats within the text
+%
+% Here is an example of the general form of a table:
+% Fill in the caption in the braces of the \caption{} command. Put the label
+% that you will use with \ref{} command in the braces of the \label{} command.
+% Insert the column specifiers (l, r, c, d, etc.) in the empty braces of the
+% \begin{tabular}{} command.
+% The ruledtabular enviroment adds doubled rules to table and sets a
+% reasonable default table settings.
+% Use the table* environment to get a full-width table in two-column
+% Add \usepackage{longtable} and the longtable (or longtable*}
+% environment for nicely formatted long tables. Or use the the [H]
+% placement option to break a long table (with less control than
+% in longtable).
+% \begin{table}%[H] add [H] placement to break table across pages
+% \caption{\label{}}
+% \begin{ruledtabular}
+% \begin{tabular}{}
+% Lines of table here ending with \\
+% \end{tabular}
+% \end{ruledtabular}
+% \end{table}
+
+% Surround table environment with turnpage environment for landscape
+% table
+% \begin{turnpage}
+% \begin{table}
+% \caption{\label{}}
+% \begin{ruledtabular}
+% \begin{tabular}{}
+% \end{tabular}
+% \end{ruledtabular}
+% \end{table}
+% \end{turnpage}
+
+% Specify following sections are appendices. Use \appendix* if there
+% only one appendix.
+%\appendix
+%\section{}
+
+% If you have acknowledgments, this puts in the proper section head.
+%\begin{acknowledgments}
+% put your acknowledgments here.
+%\end{acknowledgments}
+
+% Create the reference section using BibTeX:
+\bibliography{basename of .bib file}
+
+\end{document}
+%
+% ****** End of file apstemplate.tex ******
+
diff --git a/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aps/fig_1.eps b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aps/fig_1.eps
new file mode 100644
index 0000000000..2cd607454d
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aps/fig_1.eps
@@ -0,0 +1,5 @@
+%!PS-Adobe-3.0
+%%BoundingBox: 0 0 100 100
+0 0 moveto 100 0 lineto 100 100 lineto 0 100 lineto 0 0 lineto stroke
+20 50 moveto /Times-Roman findfont 10 scalefont setfont (Test Figure) show
+%%EOF
diff --git a/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aps/fig_2.eps b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aps/fig_2.eps
new file mode 100644
index 0000000000..eb637e2429
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aps/fig_2.eps
@@ -0,0 +1,5 @@
+%!PS-Adobe-3.0
+%%BoundingBox: 0 0 500 80
+0 0 moveto 500 0 lineto 500 80 lineto 0 80 lineto 0 0 lineto stroke
+200 40 moveto /Times-Roman findfont 10 scalefont setfont (Wide Test Figure) show
+%%EOF
diff --git a/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aps/vid_1a.eps b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aps/vid_1a.eps
new file mode 100644
index 0000000000..2388bd4104
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aps/vid_1a.eps
@@ -0,0 +1,5 @@
+%!PS-Adobe-3.0
+%%BoundingBox: 0 0 100 100
+0 0 moveto 100 0 lineto 100 100 lineto 0 100 lineto 0 0 lineto stroke
+20 50 moveto /Times-Roman findfont 10 scalefont setfont (Clip A Frame) show
+%%EOF
diff --git a/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aps/vid_1b.eps b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aps/vid_1b.eps
new file mode 100644
index 0000000000..a64a6dc4f0
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/sample/aps/vid_1b.eps
@@ -0,0 +1,5 @@
+%!PS-Adobe-3.0
+%%BoundingBox: 0 0 100 100
+0 0 moveto 100 0 lineto 100 100 lineto 0 100 lineto 0 0 lineto stroke
+20 50 moveto /Times-Roman findfont 10 scalefont setfont (Clip B Frame) show
+%%EOF
diff --git a/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/source/aip.pdf b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/source/aip.pdf
new file mode 100644
index 0000000000..77d18c30a8
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/source/aip.pdf
Binary files differ
diff --git a/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/source/ltxdocext.pdf b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/source/ltxdocext.pdf
new file mode 100644
index 0000000000..14c3812c1e
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/source/ltxdocext.pdf
Binary files differ
diff --git a/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/source/ltxfront.pdf b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/source/ltxfront.pdf
new file mode 100644
index 0000000000..29c722a83b
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/source/ltxfront.pdf
Binary files differ
diff --git a/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/source/ltxgrid.pdf b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/source/ltxgrid.pdf
new file mode 100644
index 0000000000..ef3189faf1
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/source/ltxgrid.pdf
Binary files differ
diff --git a/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/source/ltxutil.pdf b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/source/ltxutil.pdf
new file mode 100644
index 0000000000..4f46afd589
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/source/ltxutil.pdf
Binary files differ
diff --git a/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/source/revtex4-1.pdf b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/source/revtex4-1.pdf
new file mode 100644
index 0000000000..e17db70990
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/doc/latex/revtex/source/revtex4-1.pdf
@@ -0,0 +1,21270 @@
+%PDF-1.4
+%ÐÔÅØ
+1 0 obj
+<< /S /GoTo /D (section.1) >>
+endobj
+4 0 obj
+(Using REVTeX)
+endobj
+5 0 obj
+<< /S /GoTo /D (subsection.1.1) >>
+endobj
+8 0 obj
+(Bill of Materials)
+endobj
+9 0 obj
+<< /S /GoTo /D (subsubsection.1.1.1) >>
+endobj
+12 0 obj
+(Primary Source)
+endobj
+13 0 obj
+<< /S /GoTo /D (subsubsection.1.1.2) >>
+endobj
+16 0 obj
+(Generated by tex revtex4-1.dtx)
+endobj
+17 0 obj
+<< /S /GoTo /D (subsubsection.1.1.3) >>
+endobj
+20 0 obj
+(Generated by pdflatex revtex4-1.dtx)
+endobj
+21 0 obj
+<< /S /GoTo /D (subsubsection.1.1.4) >>
+endobj
+24 0 obj
+(Auxiliary)
+endobj
+25 0 obj
+<< /S /GoTo /D (section.2) >>
+endobj
+28 0 obj
+(Code common to all modules)
+endobj
+29 0 obj
+<< /S /GoTo /D (section.3) >>
+endobj
+32 0 obj
+(The driver module driver)
+endobj
+33 0 obj
+<< /S /GoTo /D (subsubsection.3.0.5) >>
+endobj
+36 0 obj
+(Docstrip and info directives)
+endobj
+37 0 obj
+<< /S /GoTo /D (subsection.3.1) >>
+endobj
+40 0 obj
+(The Frontmatter File)
+endobj
+41 0 obj
+<< /S /GoTo /D (subsection.3.2) >>
+endobj
+44 0 obj
+(The Document Body)
+endobj
+45 0 obj
+<< /S /GoTo /D (section.4) >>
+endobj
+48 0 obj
+(Overview)
+endobj
+49 0 obj
+<< /S /GoTo /D (section.5) >>
+endobj
+52 0 obj
+(Writing journal-specifc extensions to REVTeX)
+endobj
+53 0 obj
+<< /S /GoTo /D (section.6) >>
+endobj
+56 0 obj
+(The revtex4 Document Class)
+endobj
+57 0 obj
+<< /S /GoTo /D (subsection.6.1) >>
+endobj
+60 0 obj
+(Compatibility Processing)
+endobj
+61 0 obj
+<< /S /GoTo /D (section.7) >>
+endobj
+64 0 obj
+(Extensions to the LaTeX Kernel)
+endobj
+65 0 obj
+<< /S /GoTo /D (subsection.7.1) >>
+endobj
+68 0 obj
+(Hooks)
+endobj
+69 0 obj
+<< /S /GoTo /D (section.8) >>
+endobj
+72 0 obj
+(Compatability with the geometry package)
+endobj
+73 0 obj
+<< /S /GoTo /D (section.9) >>
+endobj
+76 0 obj
+(Options)
+endobj
+77 0 obj
+<< /S /GoTo /D (subsection.9.1) >>
+endobj
+80 0 obj
+(Define Booleans Used in Options)
+endobj
+81 0 obj
+<< /S /GoTo /D (subsection.9.2) >>
+endobj
+84 0 obj
+(Declare Options)
+endobj
+85 0 obj
+<< /S /GoTo /D (subsubsection.9.2.1) >>
+endobj
+88 0 obj
+(Checkin: for Editorial Use)
+endobj
+89 0 obj
+<< /S /GoTo /D (subsubsection.9.2.2) >>
+endobj
+92 0 obj
+(Preprint Style)
+endobj
+93 0 obj
+<< /S /GoTo /D (subsubsection.9.2.3) >>
+endobj
+96 0 obj
+(Showing PACS and keywords)
+endobj
+97 0 obj
+<< /S /GoTo /D (subsubsection.9.2.4) >>
+endobj
+100 0 obj
+(Balance the last page when in two-column page grid)
+endobj
+101 0 obj
+<< /S /GoTo /D (subsubsection.9.2.5) >>
+endobj
+104 0 obj
+(Showing preprint numbers)
+endobj
+105 0 obj
+<< /S /GoTo /D (subsubsection.9.2.6) >>
+endobj
+108 0 obj
+(Hypertext Option)
+endobj
+109 0 obj
+<< /S /GoTo /D (subsubsection.9.2.7) >>
+endobj
+112 0 obj
+(Type Size)
+endobj
+113 0 obj
+<< /S /GoTo /D (subsubsection.9.2.8) >>
+endobj
+116 0 obj
+(Media Size)
+endobj
+117 0 obj
+<< /S /GoTo /D (subsubsection.9.2.9) >>
+endobj
+120 0 obj
+(Bibnotes)
+endobj
+121 0 obj
+<< /S /GoTo /D (subsubsection.9.2.10) >>
+endobj
+124 0 obj
+(Footinbib)
+endobj
+125 0 obj
+<< /S /GoTo /D (subsubsection.9.2.11) >>
+endobj
+128 0 obj
+(altaffilletter)
+endobj
+129 0 obj
+<< /S /GoTo /D (subsubsection.9.2.12) >>
+endobj
+132 0 obj
+(superbib)
+endobj
+133 0 obj
+<< /S /GoTo /D (subsubsection.9.2.13) >>
+endobj
+136 0 obj
+(citeautoscript)
+endobj
+137 0 obj
+<< /S /GoTo /D (subsubsection.9.2.14) >>
+endobj
+140 0 obj
+(Variants on the Bibliography Style)
+endobj
+141 0 obj
+<< /S /GoTo /D (subsubsection.9.2.15) >>
+endobj
+144 0 obj
+(Simplex/Duplex Pages)
+endobj
+145 0 obj
+<< /S /GoTo /D (subsubsection.9.2.16) >>
+endobj
+148 0 obj
+(Two-Column Page Grid)
+endobj
+149 0 obj
+<< /S /GoTo /D (subsubsection.9.2.17) >>
+endobj
+152 0 obj
+(raggedbottom or flushbottom)
+endobj
+153 0 obj
+<< /S /GoTo /D (subsubsection.9.2.18) >>
+endobj
+156 0 obj
+(tightenlines)
+endobj
+157 0 obj
+<< /S /GoTo /D (subsubsection.9.2.19) >>
+endobj
+160 0 obj
+(lengthcheck)
+endobj
+161 0 obj
+<< /S /GoTo /D (subsubsection.9.2.20) >>
+endobj
+164 0 obj
+(Draft and Final)
+endobj
+165 0 obj
+<< /S /GoTo /D (subsubsection.9.2.21) >>
+endobj
+168 0 obj
+(eqsecnum)
+endobj
+169 0 obj
+<< /S /GoTo /D (subsubsection.9.2.22) >>
+endobj
+172 0 obj
+(secnumarabic)
+endobj
+173 0 obj
+<< /S /GoTo /D (subsubsection.9.2.23) >>
+endobj
+176 0 obj
+(floats/endfloats)
+endobj
+177 0 obj
+<< /S /GoTo /D (subsubsection.9.2.24) >>
+endobj
+180 0 obj
+(titlepage/notitlepage)
+endobj
+181 0 obj
+<< /S /GoTo /D (subsubsection.9.2.25) >>
+endobj
+184 0 obj
+(Substyle and Sub-substyle)
+endobj
+185 0 obj
+<< /S /GoTo /D (subsubsection.9.2.26) >>
+endobj
+188 0 obj
+(Optical Society of America)
+endobj
+189 0 obj
+<< /S /GoTo /D (subsubsection.9.2.27) >>
+endobj
+192 0 obj
+(Presenting Authors and Their Affiliations)
+endobj
+193 0 obj
+<< /S /GoTo /D (subsubsection.9.2.28) >>
+endobj
+196 0 obj
+(Typeset by REVTeX)
+endobj
+197 0 obj
+<< /S /GoTo /D (subsection.9.3) >>
+endobj
+200 0 obj
+(Attempt to fix float placement failure)
+endobj
+201 0 obj
+<< /S /GoTo /D (subsection.9.4) >>
+endobj
+204 0 obj
+(Option to relax page height)
+endobj
+205 0 obj
+<< /S /GoTo /D (subsection.9.5) >>
+endobj
+208 0 obj
+(Selecting procedure for processing abstract)
+endobj
+209 0 obj
+<< /S /GoTo /D (subsection.9.6) >>
+endobj
+212 0 obj
+(Option to turn on diagnostics in the frontmatter)
+endobj
+213 0 obj
+<< /S /GoTo /D (subsection.9.7) >>
+endobj
+216 0 obj
+(Default Option, Society, Journal, and pointsize)
+endobj
+217 0 obj
+<< /S /GoTo /D (subsection.9.8) >>
+endobj
+220 0 obj
+(Class-Asserted Options)
+endobj
+221 0 obj
+<< /S /GoTo /D (section.10) >>
+endobj
+224 0 obj
+(Procedures Dependent Upon Options)
+endobj
+225 0 obj
+<< /S /GoTo /D (section.11) >>
+endobj
+228 0 obj
+(Required Packages)
+endobj
+229 0 obj
+<< /S /GoTo /D (section.12) >>
+endobj
+232 0 obj
+(Incompatible Packages)
+endobj
+233 0 obj
+<< /S /GoTo /D (section.13) >>
+endobj
+236 0 obj
+(Society- and Journal-Specific Code)
+endobj
+237 0 obj
+<< /S /GoTo /D (section.14) >>
+endobj
+240 0 obj
+(Body)
+endobj
+241 0 obj
+<< /S /GoTo /D (subsection.14.1) >>
+endobj
+244 0 obj
+(counters)
+endobj
+245 0 obj
+<< /S /GoTo /D (subsection.14.2) >>
+endobj
+248 0 obj
+(float parameters)
+endobj
+249 0 obj
+<< /S /GoTo /D (subsection.14.3) >>
+endobj
+252 0 obj
+(List Environments)
+endobj
+253 0 obj
+<< /S /GoTo /D (subsection.14.4) >>
+endobj
+256 0 obj
+(Sectioning Commands)
+endobj
+257 0 obj
+<< /S /GoTo /D (subsubsection.14.4.1) >>
+endobj
+260 0 obj
+(Sectioning Commands and Their Productions)
+endobj
+261 0 obj
+<< /S /GoTo /D (subsubsection.14.4.2) >>
+endobj
+264 0 obj
+(The Acknowledgments Environment)
+endobj
+265 0 obj
+<< /S /GoTo /D (subsubsection.14.4.3) >>
+endobj
+268 0 obj
+(Part Opener)
+endobj
+269 0 obj
+<< /S /GoTo /D (subsubsection.14.4.4) >>
+endobj
+272 0 obj
+(Stacked Heads)
+endobj
+273 0 obj
+<< /S /GoTo /D (subsubsection.14.4.5) >>
+endobj
+276 0 obj
+(Runin Heads)
+endobj
+277 0 obj
+<< /S /GoTo /D (subsection.14.5) >>
+endobj
+280 0 obj
+(Math)
+endobj
+281 0 obj
+<< /S /GoTo /D (subsection.14.6) >>
+endobj
+284 0 obj
+(Type Size-Dependent Settings)
+endobj
+285 0 obj
+<< /S /GoTo /D (subsection.14.7) >>
+endobj
+288 0 obj
+(All Point Sizes)
+endobj
+289 0 obj
+<< /S /GoTo /D (subsection.14.8) >>
+endobj
+292 0 obj
+(Figures)
+endobj
+293 0 obj
+<< /S /GoTo /D (subsubsection.14.8.1) >>
+endobj
+296 0 obj
+(Deferring figure Floats)
+endobj
+297 0 obj
+<< /S /GoTo /D (subsection.14.9) >>
+endobj
+300 0 obj
+(Tables)
+endobj
+301 0 obj
+<< /S /GoTo /D (subsubsection.14.9.1) >>
+endobj
+304 0 obj
+(Deferring table Floats)
+endobj
+305 0 obj
+<< /S /GoTo /D (subsection.14.10) >>
+endobj
+308 0 obj
+(Videos)
+endobj
+309 0 obj
+<< /S /GoTo /D (subsubsection.14.10.1) >>
+endobj
+312 0 obj
+(Deferring video Floats)
+endobj
+313 0 obj
+<< /S /GoTo /D (section.15) >>
+endobj
+316 0 obj
+(Tabular)
+endobj
+317 0 obj
+<< /S /GoTo /D (section.16) >>
+endobj
+320 0 obj
+(Footnote Text)
+endobj
+321 0 obj
+<< /S /GoTo /D (subsection.16.1) >>
+endobj
+324 0 obj
+(Citations, Bibliography, Endnotes)
+endobj
+325 0 obj
+<< /S /GoTo /D (subsubsection.16.1.1) >>
+endobj
+328 0 obj
+(Bibliography)
+endobj
+329 0 obj
+<< /S /GoTo /D (subsubsection.16.1.2) >>
+endobj
+332 0 obj
+(`endnotes and `rtx@bibnotes)
+endobj
+333 0 obj
+<< /S /GoTo /D (section.17) >>
+endobj
+336 0 obj
+(Initial setup)
+endobj
+337 0 obj
+<< /S /GoTo /D (section.18) >>
+endobj
+340 0 obj
+(`appendix)
+endobj
+341 0 obj
+<< /S /GoTo /D (section.19) >>
+endobj
+344 0 obj
+(Changing the page grid)
+endobj
+345 0 obj
+<< /S /GoTo /D (subsection.19.1) >>
+endobj
+348 0 obj
+(Avoiding Grid Changes)
+endobj
+349 0 obj
+<< /S /GoTo /D (subsection.19.2) >>
+endobj
+352 0 obj
+(Galley Style: Margin Changes)
+endobj
+353 0 obj
+<< /S /GoTo /D (subsection.19.3) >>
+endobj
+356 0 obj
+(Grid Changing Via ltxgrid)
+endobj
+357 0 obj
+<< /S /GoTo /D (section.20) >>
+endobj
+360 0 obj
+(Old font commands)
+endobj
+361 0 obj
+<< /S /GoTo /D (section.21) >>
+endobj
+364 0 obj
+(English-Language Texts)
+endobj
+365 0 obj
+<< /S /GoTo /D (section.22) >>
+endobj
+368 0 obj
+(Legacy Commands)
+endobj
+369 0 obj
+<< /S /GoTo /D (section.23) >>
+endobj
+372 0 obj
+(Patches for lineno.sty)
+endobj
+373 0 obj
+<< /S /GoTo /D (section.24) >>
+endobj
+376 0 obj
+(Endgame for the Document Class)
+endobj
+377 0 obj
+<< /S /GoTo /D (subsection.24.1) >>
+endobj
+380 0 obj
+(Job Macro Package)
+endobj
+381 0 obj
+<< /S /GoTo /D (subsection.24.2) >>
+endobj
+384 0 obj
+(Endgame Processing for the Document Class)
+endobj
+385 0 obj
+<< /S /GoTo /D (section.25) >>
+endobj
+388 0 obj
+(Symbols: the revsymb module)
+endobj
+389 0 obj
+<< /S /GoTo /D (section.26) >>
+endobj
+392 0 obj
+(The 10pt class option: the 10pt module)
+endobj
+393 0 obj
+<< /S /GoTo /D (subsection.26.1) >>
+endobj
+396 0 obj
+(Defend Against Forseeable Errors)
+endobj
+397 0 obj
+<< /S /GoTo /D (section.27) >>
+endobj
+400 0 obj
+(The 11pt class option: the 11pt module)
+endobj
+401 0 obj
+<< /S /GoTo /D (subsection.27.1) >>
+endobj
+404 0 obj
+(Defend Against Forseeable Errors)
+endobj
+405 0 obj
+<< /S /GoTo /D (section.28) >>
+endobj
+408 0 obj
+(The 12pt class option: the 12pt module)
+endobj
+409 0 obj
+<< /S /GoTo /D (subsection.28.1) >>
+endobj
+412 0 obj
+(Defend Against Forseeable Errors)
+endobj
+413 0 obj
+<< /S /GoTo /D (section.29) >>
+endobj
+416 0 obj
+(Page parameters)
+endobj
+417 0 obj
+<< /S /GoTo /D (section.30) >>
+endobj
+420 0 obj
+(The aps class extension: the aps module)
+endobj
+421 0 obj
+<< /S /GoTo /D (subsection.30.1) >>
+endobj
+424 0 obj
+(Defend Against Forseeable Errors)
+endobj
+425 0 obj
+<< /S /GoTo /D (subsection.30.2) >>
+endobj
+428 0 obj
+(Abbreviations)
+endobj
+429 0 obj
+<< /S /GoTo /D (subsection.30.3) >>
+endobj
+432 0 obj
+(APS Setup)
+endobj
+433 0 obj
+<< /S /GoTo /D (subsubsection.30.3.1) >>
+endobj
+436 0 obj
+(Title block)
+endobj
+437 0 obj
+<< /S /GoTo /D (subsubsection.30.3.2) >>
+endobj
+440 0 obj
+(Stacked Heads)
+endobj
+441 0 obj
+<< /S /GoTo /D (subsubsection.30.3.3) >>
+endobj
+444 0 obj
+(Runin Heads)
+endobj
+445 0 obj
+<< /S /GoTo /D (subsubsection.30.3.4) >>
+endobj
+448 0 obj
+(Table of Contents)
+endobj
+449 0 obj
+<< /S /GoTo /D (subsubsection.30.3.5) >>
+endobj
+452 0 obj
+(Default column bottom)
+endobj
+453 0 obj
+<< /S /GoTo /D (subsubsection.30.3.6) >>
+endobj
+456 0 obj
+(Table alignment style)
+endobj
+457 0 obj
+<< /S /GoTo /D (subsubsection.30.3.7) >>
+endobj
+460 0 obj
+(Footnote formatting)
+endobj
+461 0 obj
+<< /S /GoTo /D (subsubsection.30.3.8) >>
+endobj
+464 0 obj
+(Appendix)
+endobj
+465 0 obj
+<< /S /GoTo /D (subsubsection.30.3.9) >>
+endobj
+468 0 obj
+(Bibliography)
+endobj
+469 0 obj
+<< /S /GoTo /D (subsubsection.30.3.10) >>
+endobj
+472 0 obj
+(Comparing apsrev.bst and apsrmp.bst)
+endobj
+473 0 obj
+<< /S /GoTo /D (subsubsection.30.3.11) >>
+endobj
+476 0 obj
+(Index)
+endobj
+477 0 obj
+<< /S /GoTo /D (subsection.30.4) >>
+endobj
+480 0 obj
+(Journal- and Pointsize-Specific Code)
+endobj
+481 0 obj
+<< /S /GoTo /D (subsection.30.5) >>
+endobj
+484 0 obj
+(Typesize-Specific Code)
+endobj
+485 0 obj
+<< /S /GoTo /D (subsubsection.30.5.1) >>
+endobj
+488 0 obj
+(pra)
+endobj
+489 0 obj
+<< /S /GoTo /D (subsubsection.30.5.2) >>
+endobj
+492 0 obj
+(prb)
+endobj
+493 0 obj
+<< /S /GoTo /D (subsubsection.30.5.3) >>
+endobj
+496 0 obj
+(prc)
+endobj
+497 0 obj
+<< /S /GoTo /D (subsubsection.30.5.4) >>
+endobj
+500 0 obj
+(prd)
+endobj
+501 0 obj
+<< /S /GoTo /D (subsubsection.30.5.5) >>
+endobj
+504 0 obj
+(pre)
+endobj
+505 0 obj
+<< /S /GoTo /D (subsubsection.30.5.6) >>
+endobj
+508 0 obj
+(prl)
+endobj
+509 0 obj
+<< /S /GoTo /D (subsubsection.30.5.7) >>
+endobj
+512 0 obj
+(per)
+endobj
+513 0 obj
+<< /S /GoTo /D (subsubsection.30.5.8) >>
+endobj
+516 0 obj
+(prstab)
+endobj
+517 0 obj
+<< /S /GoTo /D (subsubsection.30.5.9) >>
+endobj
+520 0 obj
+(rmp)
+endobj
+521 0 obj
+<< /S /GoTo /D (subsection.30.6) >>
+endobj
+524 0 obj
+(Establish APS Defaults)
+endobj
+525 0 obj
+<< /S /GoTo /D (subsection.30.7) >>
+endobj
+528 0 obj
+(APS Sanity Checking)
+endobj
+529 0 obj
+<< /S /GoTo /D (section.31) >>
+endobj
+532 0 obj
+(The rmp journal substyle: the rmp module)
+endobj
+533 0 obj
+<< /S /GoTo /D (subsection.31.1) >>
+endobj
+536 0 obj
+(Frontmatter)
+endobj
+537 0 obj
+<< /S /GoTo /D (section.32) >>
+endobj
+540 0 obj
+(:)
+endobj
+541 0 obj
+<< /S /GoTo /D (subsection.32.1) >>
+endobj
+544 0 obj
+(General Text)
+endobj
+545 0 obj
+<< /S /GoTo /D (subsection.32.2) >>
+endobj
+548 0 obj
+(Sectioning)
+endobj
+549 0 obj
+<< /S /GoTo /D (subsection.32.3) >>
+endobj
+552 0 obj
+(Figure and Table Caption Formatting)
+endobj
+553 0 obj
+<< /S /GoTo /D (subsection.32.4) >>
+endobj
+556 0 obj
+(Citations and Bibliography)
+endobj
+557 0 obj
+<< /S /GoTo /D (subsection.32.5) >>
+endobj
+560 0 obj
+(Table of Contents)
+endobj
+561 0 obj
+<< /S /GoTo /D (section*.3) >>
+endobj
+564 0 obj
+(Index)
+endobj
+565 0 obj
+<< /S /GoTo /D [566 0 R /Fit ] >>
+endobj
+588 0 obj <<
+/Length 1705
+/Filter /FlateDecode
+>>
+stream
+xÚÝXYsÛ6~÷¯à#5¸¼9¶“NÚNÜØM2“äi 5u”¢|üû.¸ LJví8m“ôE
+·ÑÄ굶=¨+ 0Y•¡ßj€¥Ó·é) Ø4ÀjÒ—qn3)±ã§‹ªl5kÓ&oÚc†ñ ÓÞD–îãÈÛÃw'­F9Ü×2÷%LJ<Íaû"J¨¤7ü—ÂݱSày"§L`NœjÙµ !¸ÍÙ<¨Lˆ´¬ÊqSÏg~¾eº\Ný2€¼Ä ÍÛ?æ«z–WKÒîÊ€Øp¤ÁžÁZ2á(€³ljºB „ué¡óÎÂ#ÀŸM‹{º
+Ïë üòíÀhM.’®÷3X/ï«“A,gMšfñ|ww±:­ürBòÅ’ÌëóÝh©»qWtC^0 ^oô Š¾apÛ« @Ç <ã@“yT¾ïÀ;[UÕ vW³EÞ.¸j*‹g8¼¨ËÓ•¯üªW¸ƒŸ–¨dbÜ-ŸØi•n;¥wt#ÈsAƒv„Ô­-Q8>]i<õ>Q€u(Ù!­Ïì¼ ¨Öƒ… PÏq•þ¾ô³ó BqËdcÁ÷É@äÐôˆ¬ uÈëá5$¶Ê‰TÝ{¢ýjG„VC°`Œrž¾ðU…HµpüDí¾›Re,%£LQúÈF:÷e þõfóJ–ê5Ž]àÛÄ3áÀ
+&·l1o“Õ~š×7ß1ÿ¸Ü$êÿ9Jt zUÎÊ:Æ€è4beû\uà«©ê\
+x 8XÏ:o Esý7.É)Â…é–Á4°EÙÅ} ”ø* ÅY•1ZŒA`·âŸ†ëiÈpƉ²v›B2"³·ºö•V¶!À
+öYÖ£!Ó@¶v2aˆU™.Çà³ÒHJ @ãùtŠÉ†ÄŒÆò6@gç®B$Ý:—¡n}°»ì¿nP¸@á˜éÀÎEí/C -kÝ“tÁðÁÐõË!,†…C2
+šÚz¦
+
+ÆÚ4V…‡Ïq"Ô‘”aÇÆ9½S¿ôõ²Aaàk},ÄÂW[dQ½0a‹1L÷G“ô?@4Á¥Ÿ¨¢«Y]Ve¾, øb8~Ú^ûy¸Ô¥/«ý¼®ür#%»ûU¨1`UÒ€IË®†Õ_<ù äçUc
+endstream
+endobj
+566 0 obj <<
+/Type /Page
+/Contents 588 0 R
+/Resources 587 0 R
+/MediaBox [0 0 612 792]
+/Parent 604 0 R
+/Annots [ 567 0 R 568 0 R 569 0 R 570 0 R 571 0 R 572 0 R 573 0 R 574 0 R 575 0 R 576 0 R 577 0 R 578 0 R 579 0 R 580 0 R 581 0 R 582 0 R 583 0 R 584 0 R ]
+>> endobj
+567 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [341.463 476.491 505.596 487.616]
+/Subtype/Link/A<</Type/Action/S/URI/URI(http://publish.aps.org/revtex4/)>>
+>> endobj
+568 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.697 409.672 247.661 420.797]
+/A << /S /GoTo /D (section.1) >>
+>> endobj
+569 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 399.931 263.338 408.842]
+/A << /S /GoTo /D (subsection.1.1) >>
+>> endobj
+570 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 386.038 292.451 396.776]
+/A << /S /GoTo /D (subsubsection.1.1.1) >>
+>> endobj
+571 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 374.083 375.569 384.931]
+/A << /S /GoTo /D (subsubsection.1.1.2) >>
+>> endobj
+572 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 361.851 401.721 372.976]
+/A << /S /GoTo /D (subsubsection.1.1.3) >>
+>> endobj
+573 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 350.173 265.137 361.021]
+/A << /S /GoTo /D (subsubsection.1.1.4) >>
+>> endobj
+574 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.697 330.192 316.251 339.103]
+/A << /S /GoTo /D (section.2) >>
+>> endobj
+575 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.697 308.274 298.781 317.185]
+/A << /S /GoTo /D (section.3) >>
+>> endobj
+576 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 294.382 345.115 305.23]
+/A << /S /GoTo /D (subsubsection.3.0.5) >>
+>> endobj
+577 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 284.364 285.865 293.275]
+/A << /S /GoTo /D (subsection.3.1) >>
+>> endobj
+578 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 270.472 284.149 281.32]
+/A << /S /GoTo /D (subsection.3.2) >>
+>> endobj
+579 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.697 250.491 216.693 259.402]
+/A << /S /GoTo /D (section.4) >>
+>> endobj
+580 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.697 226.359 403.468 237.484]
+/A << /S /GoTo /D (section.5) >>
+>> endobj
+581 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.697 206.655 314.945 215.566]
+/A << /S /GoTo /D (section.6) >>
+>> endobj
+582 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 192.763 302.137 203.611]
+/A << /S /GoTo /D (subsection.6.1) >>
+>> endobj
+583 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.697 170.569 327.488 181.693]
+/A << /S /GoTo /D (section.7) >>
+>> endobj
+584 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 160.827 219.447 169.738]
+/A << /S /GoTo /D (subsection.7.1) >>
+>> endobj
+589 0 obj <<
+/D [566 0 R /XYZ 152.694 705.06 null]
+>> endobj
+590 0 obj <<
+/D [566 0 R /XYZ 153.694 667.198 null]
+>> endobj
+598 0 obj <<
+/D [566 0 R /XYZ 153.694 452.733 null]
+>> endobj
+587 0 obj <<
+/Font << /F15 591 0 R /F16 592 0 R /F21 593 0 R /F17 594 0 R /F26 595 0 R /F8 596 0 R /F28 597 0 R /F30 599 0 R /F31 600 0 R /F32 601 0 R /F27 602 0 R /F22 603 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+647 0 obj <<
+/Length 1556
+/Filter /FlateDecode
+>>
+stream
+xÚÝšÛr›8€ïó\ÂLq§½Ksèngv6Ó¸éî…Œe[Œ¨'É>ýê%à4)MÓ+d‘ôñë?*pÖNà¼;
+Úkà
+SW »êÇ]1\?@?¾€ƒØ‹c€A ìjÔÝPµ ×Ù¥'Uï‰ê>½2"„K«®®L¢äéN>£ža|9T[ >8ÉSáÄ_á ç-.p™[UeL”dPàZ˜V¥l’¾y³!å}….4V…‹ù9+vÛ²ÿŸ5§Ë8_fuO}ãÓW½ý]ÝÞmÕ“ mÇ|n˜D‡¹3Æà‰-žßï*¹^)í\[ѵÒý±²d‚J#&±hæJ4žÄµÂ|Eÿ#C-
+~)Va0†UhXÕ»Æ4î.˜“Ü~&7h¸åT¼¬Î9­Ä@ÄÂ_Ä@Žc„ £OJƒa½'Ô&LXãU7N¸´ ekŽ«Žï öb
+±ÙË1ëX·°ñ¨å”È,1Ìñ‚æƒÍ„Ó«ˆ<ŸtYZ™5†E}LÊeÓ5L(¾Ý‹(ƒ5ÆPDå™KÖ¶.cNÈÎÂÑxÒ»E­³ñw…q îipyׯÍ{#ŇiÊF!±Î´Êcç¦>(ù˜útN‰¡dÝÈ•¹žl —Ïöç¦ññˆÇ¨_ëJ_rR“R;´\Û…ïĆñºW
+퉆©d[Y ‚˜êÈmÛT¦ÊVÙ
+œ“-é–ÙV˜;>¬<gem¤À}VY0¶\f27̬“ßÞ/…B4ñÛ0b˦cµá÷'|"‹êŠ$o””i©¸Éãçd¹kŽË´G<ªöf]· K+Æq>`‚óŸ‰Bü ;n{š;KŠ×%«¥ ³ÙAÚÏ®83›k‹÷%óS½öÒ[#”´Ç¢VxWÜ«3¿yÀ>§Èµ·Þ3 +·æMÏ­1 zfKùõžRc‚’—ƒïÏm¥–ÅiëÚ?©kU{_vOŠí9&6õz|,'Ñ;gé7gõÑÆÔ°Sõ?Ò‘Q»&´J£6g*ÏH¥;eÄ$mŽlsºò£êf[¥0Í€ ÑYªzššÉòeG¹þz©ÊÔÊaÛÃœpo;„H~{?6P³äÐ ôG™ëÓ¥tQî`:Ñ==:Pz0É×Mïœg‚fI/IéÐŒÞûÃùüèÇ Ø\
+endstream
+endobj
+646 0 obj <<
+/Type /Page
+/Contents 647 0 R
+/Resources 645 0 R
+/MediaBox [0 0 612 792]
+/Parent 604 0 R
+/Annots [ 585 0 R 586 0 R 605 0 R 606 0 R 607 0 R 608 0 R 609 0 R 610 0 R 611 0 R 612 0 R 613 0 R 614 0 R 615 0 R 616 0 R 617 0 R 618 0 R 619 0 R 620 0 R 621 0 R 622 0 R 623 0 R 624 0 R 625 0 R 626 0 R 627 0 R 628 0 R 629 0 R 630 0 R 631 0 R 632 0 R 633 0 R 634 0 R 635 0 R 636 0 R 637 0 R 638 0 R 639 0 R 640 0 R 641 0 R 642 0 R 643 0 R ]
+>> endobj
+585 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.697 654.302 380.26 665.15]
+/A << /S /GoTo /D (section.8) >>
+>> endobj
+586 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.697 632.384 208.856 643.232]
+/A << /S /GoTo /D (section.9) >>
+>> endobj
+605 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 620.429 336.342 631.277]
+/A << /S /GoTo /D (subsection.9.1) >>
+>> endobj
+606 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 608.474 262.785 619.322]
+/A << /S /GoTo /D (subsection.9.2) >>
+>> endobj
+607 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 598.456 339.248 607.367]
+/A << /S /GoTo /D (subsubsection.9.2.1) >>
+>> endobj
+608 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 584.563 285.782 595.412]
+/A << /S /GoTo /D (subsubsection.9.2.2) >>
+>> endobj
+609 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 572.608 352.504 583.456]
+/A << /S /GoTo /D (subsubsection.9.2.3) >>
+>> endobj
+610 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 560.653 452.961 571.501]
+/A << /S /GoTo /D (subsubsection.9.2.4) >>
+>> endobj
+611 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 548.698 339.414 559.546]
+/A << /S /GoTo /D (subsubsection.9.2.5) >>
+>> endobj
+612 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 536.743 302.497 547.48]
+/A << /S /GoTo /D (subsubsection.9.2.6) >>
+>> endobj
+613 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 524.788 267.323 535.525]
+/A << /S /GoTo /D (subsubsection.9.2.7) >>
+>> endobj
+614 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 514.77 271.751 523.681]
+/A << /S /GoTo /D (subsubsection.9.2.8) >>
+>> endobj
+615 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 502.814 262.536 511.725]
+/A << /S /GoTo /D (subsubsection.9.2.9) >>
+>> endobj
+616 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 490.859 266.078 499.77]
+/A << /S /GoTo /D (subsubsection.9.2.10) >>
+>> endobj
+617 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 478.904 275.376 487.815]
+/A << /S /GoTo /D (subsubsection.9.2.11) >>
+>> endobj
+618 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 465.012 261.871 475.86]
+/A << /S /GoTo /D (subsubsection.9.2.12) >>
+>> endobj
+619 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 453.057 283.734 463.64]
+/A << /S /GoTo /D (subsubsection.9.2.13) >>
+>> endobj
+620 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 441.101 375.778 451.95]
+/A << /S /GoTo /D (subsubsection.9.2.14) >>
+>> endobj
+621 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 428.593 323.28 440.548]
+/A << /S /GoTo /D (subsubsection.9.2.15) >>
+>> endobj
+622 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 417.191 328.718 428.039]
+/A << /S /GoTo /D (subsubsection.9.2.16) >>
+>> endobj
+623 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 405.236 352.67 416.084]
+/A << /S /GoTo /D (subsubsection.9.2.17) >>
+>> endobj
+624 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 393.281 274.574 404.129]
+/A << /S /GoTo /D (subsubsection.9.2.18) >>
+>> endobj
+625 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 381.326 275.072 392.174]
+/A << /S /GoTo /D (subsubsection.9.2.19) >>
+>> endobj
+626 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 371.308 293.088 380.219]
+/A << /S /GoTo /D (subsubsection.9.2.20) >>
+>> endobj
+627 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 357.415 265.995 367.765]
+/A << /S /GoTo /D (subsubsection.9.2.21) >>
+>> endobj
+628 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 347.397 282.904 356.308]
+/A << /S /GoTo /D (subsubsection.9.2.22) >>
+>> endobj
+629 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 332.951 291.51 344.907]
+/A << /S /GoTo /D (subsubsection.9.2.23) >>
+>> endobj
+630 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 320.996 315.199 332.951]
+/A << /S /GoTo /D (subsubsection.9.2.24) >>
+>> endobj
+631 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 309.595 338.612 320.443]
+/A << /S /GoTo /D (subsubsection.9.2.25) >>
+>> endobj
+632 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 297.639 342.071 308.488]
+/A << /S /GoTo /D (subsubsection.9.2.26) >>
+>> endobj
+633 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 285.684 406.081 296.532]
+/A << /S /GoTo /D (subsubsection.9.2.27) >>
+>> endobj
+634 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 273.522 316.361 284.577]
+/A << /S /GoTo /D (subsubsection.9.2.28) >>
+>> endobj
+635 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 261.774 356.683 272.622]
+/A << /S /GoTo /D (subsection.9.3) >>
+>> endobj
+636 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 249.819 313.235 260.667]
+/A << /S /GoTo /D (subsection.9.4) >>
+>> endobj
+637 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 237.864 379.652 248.712]
+/A << /S /GoTo /D (subsection.9.5) >>
+>> endobj
+638 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 225.908 404.725 236.757]
+/A << /S /GoTo /D (subsection.9.6) >>
+>> endobj
+639 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 213.953 397.696 224.801]
+/A << /S /GoTo /D (subsection.9.7) >>
+>> endobj
+640 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 201.998 293.863 212.846]
+/A << /S /GoTo /D (subsection.9.8) >>
+>> endobj
+641 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.697 180.08 358.518 190.928]
+/A << /S /GoTo /D (section.10) >>
+>> endobj
+642 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.697 158.162 263.56 169.011]
+/A << /S /GoTo /D (section.11) >>
+>> endobj
+643 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.697 136.245 283.236 147.093]
+/A << /S /GoTo /D (section.12) >>
+>> endobj
+648 0 obj <<
+/D [646 0 R /XYZ 152.694 705.06 null]
+>> endobj
+645 0 obj <<
+/Font << /F31 600 0 R /F8 596 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+687 0 obj <<
+/Length 1362
+/Filter /FlateDecode
+>>
+stream
+xÚÝZMSÛH½ó+t”«b1ß{Z Àn*©PÁ•K²af*BrÉ2 ùõéÑHÆhìØÅœd¹FÓ3¯_¿îi EãE§{h~EŽJwã~|9Ý;ìíŸPéD "¢Áe„9M„f‘à2!”GƒQô-ƴקÅç\I<´¦êÁõ®·ŠÆi>r?Xü¡˜•yšõÏ'õ83´ßfC?êÈ?<2½ækŠ¾õ1'ÇT4ÿw××>Á‰Æ²Y ó‹9læ»ëÎG–:¦rÅ|û'jq¿,ÑŒE} ¸h-$¸×çvZÌòQqeÊi× W8N`BÏwaZ?ûœO»t}E‘¸‡v­œËj@ùPâ>ð"­Às”Æ“´L¯Mez}—=kÍwÔ¥ø©Íñ£¿vZƒÇâc
+Yå>}J«« fÝ)ò¼ ¸ts
+
+ëÀEè]#hžˆç×íO—äMÿ½™Ô‰Éä#S×Mž›ª‚üð•J¾ ÚF7ÏÒãue:%¶ImûÓ„‡è9é<ó”GòÄŽgeˆF¯(¨_ýíÀ\!‘ª­<ß›KS–®ð„‰öOÈâ™]òDj SÕO]Öèûa‹£(0ÑvÔIÇÎð OékqF£Œ_›j0¥ Ã"
+~?s·RôÿÆ[à …‰ 7ª£#ÒëÈß¹­lšyõ˜šj6 BT¸ö¶P}禖8¡Q”'¤“ x×Þ>°ÖY9%2!rî;¡W-¡OIˆ+mlQû-]¥ùØ÷¥aUÝÍqš¤ãF4Ç¥»Æ±Õ&!˜º̃'
+5¹qW^·/õ:Ì™3ê«M—…Ò‰€j(«nªwtÁxÑŽß™nôZ@ƒZMpÐ üP/òzñ9y]¸,r÷íBåõbؾÐê*ÑJÆ’<R öVŽóqf§WýàÆÙ\Š|ýÜ¿uUÕ’Ú) øzcí–ˆ7öÑŒÓá]ûqÅŠ}P·KÉ;uó¡Ç™ƒ(­†îre¦-r¥-³¹É‹dê? ¡CÅRþ†‘X²„2Pv!17¶¶ŒŽ{¿
+endstream
+endobj
+686 0 obj <<
+/Type /Page
+/Contents 687 0 R
+/Resources 685 0 R
+/MediaBox [0 0 612 792]
+/Parent 604 0 R
+/Annots [ 644 0 R 649 0 R 650 0 R 651 0 R 652 0 R 653 0 R 654 0 R 655 0 R 656 0 R 657 0 R 658 0 R 659 0 R 660 0 R 661 0 R 662 0 R 663 0 R 664 0 R 665 0 R 666 0 R 667 0 R 668 0 R 669 0 R 670 0 R 671 0 R 672 0 R 673 0 R 674 0 R 675 0 R 676 0 R 677 0 R 678 0 R 679 0 R 680 0 R 681 0 R 682 0 R ]
+>> endobj
+644 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.697 654.302 344.968 665.15]
+/A << /S /GoTo /D (section.13) >>
+>> endobj
+649 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.697 632.384 196.242 643.232]
+/A << /S /GoTo /D (section.14) >>
+>> endobj
+650 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 622.366 228.884 630.779]
+/A << /S /GoTo /D (subsection.14.1) >>
+>> endobj
+651 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 608.474 263.504 619.322]
+/A << /S /GoTo /D (subsection.14.2) >>
+>> endobj
+652 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 598.456 272.941 607.256]
+/A << /S /GoTo /D (subsection.14.3) >>
+>> endobj
+653 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 584.563 289.463 595.412]
+/A << /S /GoTo /D (subsection.14.4) >>
+>> endobj
+654 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 572.608 423.709 583.456]
+/A << /S /GoTo /D (subsubsection.14.4.1) >>
+>> endobj
+655 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 560.653 382.392 571.501]
+/A << /S /GoTo /D (subsubsection.14.4.2) >>
+>> endobj
+656 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 548.698 278.863 559.435]
+/A << /S /GoTo /D (subsubsection.14.4.3) >>
+>> endobj
+657 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 538.68 287.581 547.591]
+/A << /S /GoTo /D (subsubsection.14.4.4) >>
+>> endobj
+658 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 526.725 280.801 535.636]
+/A << /S /GoTo /D (subsubsection.14.4.5) >>
+>> endobj
+659 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 514.77 216.071 523.681]
+/A << /S /GoTo /D (subsection.14.5) >>
+>> endobj
+660 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 500.877 323.917 511.725]
+/A << /S /GoTo /D (subsection.14.6) >>
+>> endobj
+661 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 490.859 256.669 499.77]
+/A << /S /GoTo /D (subsection.14.7) >>
+>> endobj
+662 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 476.967 224.595 487.704]
+/A << /S /GoTo /D (subsection.14.8) >>
+>> endobj
+663 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 464.735 330.088 475.86]
+/A << /S /GoTo /D (subsubsection.14.8.1) >>
+>> endobj
+664 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 454.994 220.554 463.905]
+/A << /S /GoTo /D (subsection.14.9) >>
+>> endobj
+665 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 441.101 324.857 451.95]
+/A << /S /GoTo /D (subsubsection.14.9.1) >>
+>> endobj
+666 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 431.083 221.661 439.994]
+/A << /S /GoTo /D (subsection.14.10) >>
+>> endobj
+667 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 417.191 324.857 428.039]
+/A << /S /GoTo /D (subsubsection.14.10.1) >>
+>> endobj
+668 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.697 397.21 208.419 406.121]
+/A << /S /GoTo /D (section.15) >>
+>> endobj
+669 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.697 375.293 240.507 384.121]
+/A << /S /GoTo /D (section.16) >>
+>> endobj
+670 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 361.4 340.189 372.248]
+/A << /S /GoTo /D (subsection.16.1) >>
+>> endobj
+671 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 349.445 280.219 360.293]
+/A << /S /GoTo /D (subsubsection.16.1.1) >>
+>> endobj
+672 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 338.597 359.587 348.338]
+/A << /S /GoTo /D (subsubsection.16.1.2) >>
+>> endobj
+673 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.697 315.572 230.691 326.42]
+/A << /S /GoTo /D (section.17) >>
+>> endobj
+674 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.697 293.378 216.707 304.502]
+/A << /S /GoTo /D (section.18) >>
+>> endobj
+675 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.697 271.736 287.649 282.585]
+/A << /S /GoTo /D (section.19) >>
+>> endobj
+676 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 259.781 294.817 270.629]
+/A << /S /GoTo /D (subsection.19.1) >>
+>> endobj
+677 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 247.826 323.875 258.674]
+/A << /S /GoTo /D (subsection.19.2) >>
+>> endobj
+678 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 235.594 315.877 246.719]
+/A << /S /GoTo /D (subsection.19.3) >>
+>> endobj
+679 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.697 215.89 267.891 224.801]
+/A << /S /GoTo /D (section.20) >>
+>> endobj
+680 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.697 192.035 288.897 202.884]
+/A << /S /GoTo /D (section.21) >>
+>> endobj
+681 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.697 170.117 263.948 180.966]
+/A << /S /GoTo /D (section.22) >>
+>> endobj
+682 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.697 148.2 277.627 159.048]
+/A << /S /GoTo /D (section.23) >>
+>> endobj
+688 0 obj <<
+/D [686 0 R /XYZ 152.694 705.06 null]
+>> endobj
+685 0 obj <<
+/Font << /F31 600 0 R /F8 596 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+730 0 obj <<
+/Length 1277
+/Filter /FlateDecode
+>>
+stream
+xÚíšMsâ8†ïù>šŽ¾?ö–™Ifwª¶*5p›Ýƒ‡¸ÖØ”m¶’ýõÛ²ÛÀ!H¸DÆV$ùÑ«VwËÈ›zÈûzV%ò°—›æâû׋OËËŠ=hA„7¼ó0§ÐÌ\„ro8ñ~ø„õú”#ÿ:LÃY?õï²Ü\0¿¼ww¾dP¼˜Ei.J{ûsEïïá·Õ@¼}̾Tî~}`—7j}P,ÐŒy}ŒÍWc
+p¯Ï ñ¿e#èˆRÿÏpœ›!PæßöˆòñùûOs?œFõ0¬ý
+0.6õIÑÇѧ¦{zÇ
+:ÒÒ¹1t2§Œ4+¥»,Ÿ…eiòµ.%¥Ç¹žZÑð.h”Es5ŸW\ÀCêÍ !ޙǹ'°õL[`ŸâQgÓ<œßW ªieÈ;¡$ºÈ
+CŒ™Ù²fZ¯RüŽB˜Œ
+gÂe@hÌæÕƒºø¨x‹×Äökø¯ê5ÿH'ÑCÓÕ“§pÎóBn[ rÿ™ƒ-OÖy&ý A¸Ãµ,vžNü_Ô8 5ŽÿB˜mýÏÖœO¢7MGwز¸e3¬L‹{ïؾ
+<>yñ½Ú'CÍÜ–ÃRËÄ×<7ßLgH*–uO5Ò=<ï>—ÀÍ,Èvà£3ð§ÛÏÀëÀEwàl;ðÉøóíÀ£3ðÛ'gà/¾î¥È­À£ü ¼\uW¸Ú®ð¢ æ¨0Jß󎔥 i e½2DûgYï\Ü&oá>±4ÂMââÞ²ÛcÑU–¼å,JŸàiÝŽ¨šAµ¬Ÿ‡i\šÔø£ £ï#û1oK&#¬O<‘‡ë_ϸÇæ³"†˜LHí>cÙÌY\/þ·œUƒ
+endstream
+endobj
+729 0 obj <<
+/Type /Page
+/Contents 730 0 R
+/Resources 728 0 R
+/MediaBox [0 0 612 792]
+/Parent 604 0 R
+/Annots [ 683 0 R 684 0 R 689 0 R 690 0 R 691 0 R 692 0 R 693 0 R 694 0 R 695 0 R 696 0 R 697 0 R 698 0 R 699 0 R 700 0 R 701 0 R 702 0 R 703 0 R 704 0 R 705 0 R 706 0 R 707 0 R 708 0 R 709 0 R 710 0 R 711 0 R 712 0 R 713 0 R 714 0 R 715 0 R 716 0 R 717 0 R 718 0 R 719 0 R 720 0 R 721 0 R 722 0 R 723 0 R 724 0 R 725 0 R ]
+>> endobj
+683 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.697 654.302 338.938 665.15]
+/A << /S /GoTo /D (section.24) >>
+>> endobj
+684 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 642.347 276.982 653.195]
+/A << /S /GoTo /D (subsection.24.1) >>
+>> endobj
+689 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 630.392 388.895 641.24]
+/A << /S /GoTo /D (subsection.24.2) >>
+>> endobj
+690 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.697 608.197 316.742 619.322]
+/A << /S /GoTo /D (section.25) >>
+>> endobj
+691 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.697 586.279 365.969 597.404]
+/A << /S /GoTo /D (section.26) >>
+>> endobj
+692 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 574.601 339.082 585.449]
+/A << /S /GoTo /D (subsection.26.1) >>
+>> endobj
+693 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.697 552.406 365.969 563.531]
+/A << /S /GoTo /D (section.27) >>
+>> endobj
+694 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 540.728 339.082 551.576]
+/A << /S /GoTo /D (subsection.27.1) >>
+>> endobj
+695 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.697 518.533 365.969 529.658]
+/A << /S /GoTo /D (section.28) >>
+>> endobj
+696 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 506.855 339.082 517.703]
+/A << /S /GoTo /D (subsection.28.1) >>
+>> endobj
+697 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.697 484.937 253.48 495.702]
+/A << /S /GoTo /D (section.29) >>
+>> endobj
+698 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.697 462.742 370.848 473.867]
+/A << /S /GoTo /D (section.30) >>
+>> endobj
+699 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 451.064 339.082 461.912]
+/A << /S /GoTo /D (subsection.30.1) >>
+>> endobj
+700 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 441.046 253.514 449.957]
+/A << /S /GoTo /D (subsection.30.2) >>
+>> endobj
+701 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 427.154 240.563 437.891]
+/A << /S /GoTo /D (subsection.30.3) >>
+>> endobj
+702 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 417.136 271.751 426.047]
+/A << /S /GoTo /D (subsubsection.30.3.1) >>
+>> endobj
+703 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 405.18 287.581 414.092]
+/A << /S /GoTo /D (subsubsection.30.3.2) >>
+>> endobj
+704 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 393.225 280.801 402.136]
+/A << /S /GoTo /D (subsubsection.30.3.3) >>
+>> endobj
+705 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 381.27 301.971 390.181]
+/A << /S /GoTo /D (subsubsection.30.3.4) >>
+>> endobj
+706 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 369.315 326.684 378.226]
+/A << /S /GoTo /D (subsubsection.30.3.5) >>
+>> endobj
+707 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 355.423 318.022 366.271]
+/A << /S /GoTo /D (subsubsection.30.3.6) >>
+>> endobj
+708 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 343.467 312.598 354.316]
+/A << /S /GoTo /D (subsubsection.30.3.7) >>
+>> endobj
+709 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 331.512 266.77 342.36]
+/A << /S /GoTo /D (subsubsection.30.3.8) >>
+>> endobj
+710 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 319.557 280.219 330.405]
+/A << /S /GoTo /D (subsubsection.30.3.9) >>
+>> endobj
+711 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 307.602 391.054 318.45]
+/A << /S /GoTo /D (subsubsection.30.3.10) >>
+>> endobj
+712 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 297.584 248.782 306.495]
+/A << /S /GoTo /D (subsubsection.30.3.11) >>
+>> endobj
+713 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 283.692 352.31 294.54]
+/A << /S /GoTo /D (subsection.30.4) >>
+>> endobj
+714 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 271.736 292.507 282.585]
+/A << /S /GoTo /D (subsection.30.5) >>
+>> endobj
+715 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 259.505 240.119 270.131]
+/A << /S /GoTo /D (subsubsection.30.5.1) >>
+>> endobj
+716 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 247.549 240.119 258.176]
+/A << /S /GoTo /D (subsubsection.30.5.2) >>
+>> endobj
+717 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 235.594 240.119 246.221]
+/A << /S /GoTo /D (subsubsection.30.5.3) >>
+>> endobj
+718 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 223.639 240.119 234.266]
+/A << /S /GoTo /D (subsubsection.30.5.4) >>
+>> endobj
+719 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 211.684 240.119 222.311]
+/A << /S /GoTo /D (subsubsection.30.5.5) >>
+>> endobj
+720 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 199.729 240.119 210.356]
+/A << /S /GoTo /D (subsubsection.30.5.6) >>
+>> endobj
+721 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 187.774 240.119 198.4]
+/A << /S /GoTo /D (subsubsection.30.5.7) >>
+>> endobj
+722 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 175.818 255.811 186.445]
+/A << /S /GoTo /D (subsubsection.30.5.8) >>
+>> endobj
+723 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 163.863 240.119 174.49]
+/A << /S /GoTo /D (subsubsection.30.5.9) >>
+>> endobj
+724 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 154.122 295.246 163.033]
+/A << /S /GoTo /D (subsection.30.6) >>
+>> endobj
+725 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 140.23 286.501 151.078]
+/A << /S /GoTo /D (subsection.30.7) >>
+>> endobj
+731 0 obj <<
+/D [729 0 R /XYZ 152.694 705.06 null]
+>> endobj
+728 0 obj <<
+/Font << /F31 600 0 R /F8 596 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+741 0 obj <<
+/Length 1259
+/Filter /FlateDecode
+>>
+stream
+xÚÝWKoÛF¾ûWð`Dë}’ÜÜb×6Z4Há(E€´J\Kl)ŠXRŽýï;û CR2bÇAkô´äpvß|;;$Ñ:"ÑÕ éWÑÈØûp}ur¶89½ä4RXÅ,Ž7•ÇJD±L0ã2ZäÑgÄélÎ%A‹žý¹øåô’¥ƒ-<Å\(0étͶö:c³
+KÚ©üµÛ›*+ÁfÊQ³_6íŒ3tŠôŒ¢7³¹¤ µG½Q’àD=ÅÝvžÊ÷¥³×Ã}žS*”B”‘ðaŠÏéåÐõœ&3&àb%{p0À#C—3ÈÇìªKQ»ÍÚV›©C!S„A›ºX<¾cß$͔Ā*‰¡;*Úœ
+¬ Ë
+yH@›%8MUà$îXyV”¥'¥k°¾³¦ÈÊ#¡ÙÞ~gÅß6e¹³…øâØÍ`¨µ!3©lÈöµ,`¨wëÁJì4ï>î  _;9ì4Å´÷pVɪµ­ºUÎV«Éƒk…Ú×bJЭ LWYµêÁ¡ãt˜Ä©Š{P<,0cþfŠmf,•à²ý
+aJh
+Áas¿­qÓÞ?ƒ‡üy<¬óÛ <ím7á7¾ Û¼{Ä´*¿zwIc•ðÔÿk*œ
+endstream
+endobj
+740 0 obj <<
+/Type /Page
+/Contents 741 0 R
+/Resources 739 0 R
+/MediaBox [0 0 612 792]
+/Parent 604 0 R
+/Annots [ 726 0 R 727 0 R 732 0 R 733 0 R 734 0 R 735 0 R 736 0 R 737 0 R 738 0 R ]
+>> endobj
+726 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.697 654.025 376.616 665.15]
+/A << /S /GoTo /D (section.31) >>
+>> endobj
+727 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 644.284 245.599 653.084]
+/A << /S /GoTo /D (subsection.31.1) >>
+>> endobj
+732 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.697 622.366 172.816 630.779]
+/A << /S /GoTo /D (section.32) >>
+>> endobj
+733 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 610.411 249.653 619.322]
+/A << /S /GoTo /D (subsection.32.1) >>
+>> endobj
+734 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 596.519 237.38 607.256]
+/A << /S /GoTo /D (subsection.32.2) >>
+>> endobj
+735 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 584.563 357.818 595.412]
+/A << /S /GoTo /D (subsection.32.3) >>
+>> endobj
+736 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 572.608 310.938 583.456]
+/A << /S /GoTo /D (subsection.32.4) >>
+>> endobj
+737 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [167.641 562.59 270.091 571.501]
+/A << /S /GoTo /D (subsection.32.5) >>
+>> endobj
+738 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [152.697 540.672 183.063 549.583]
+/A << /S /GoTo /D (section*.3) >>
+>> endobj
+742 0 obj <<
+/D [740 0 R /XYZ 152.694 705.06 null]
+>> endobj
+2 0 obj <<
+/D [740 0 R /XYZ 153.694 526.656 null]
+>> endobj
+6 0 obj <<
+/D [740 0 R /XYZ 153.694 446.837 null]
+>> endobj
+10 0 obj <<
+/D [740 0 R /XYZ 153.694 400.836 null]
+>> endobj
+14 0 obj <<
+/D [740 0 R /XYZ 153.694 325.86 null]
+>> endobj
+18 0 obj <<
+/D [740 0 R /XYZ 153.694 226.78 null]
+>> endobj
+739 0 obj <<
+/Font << /F31 600 0 R /F28 597 0 R /F8 596 0 R /F30 599 0 R /F35 743 0 R /F7 744 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+747 0 obj <<
+/Length 1967
+/Filter /FlateDecode
+>>
+stream
+xڥˎÛFòî¯Pd—³°ZýâËXq;@5|ÐÁ€GìÑÇ–lN<ûß·ª«É!%N$c/R³º»ÞU]U|µ_ñÕo/¸ÿÿeûbóN‰UÊÒHF«íÍJ„ŠE©^Ea̤
+WÛ|õ)L0}µ"äÁ›þKQYûpõçö÷Í»dr—¯Ö"a*IéÖöÖ\­•RÁMS–Í•L‚¿Šz d­ßËFtîó3º4Ú›Ú´™59í5ý[«ƒ]Ó·ÇÓÜÐÛ×µ§¢‚?ˆÇx±4V ò(Óˆ…b%×’Ø|s*ˆ!âÕzrh‹‡V! •F¸Ð^3oGx¸š€?¾Bø¨æát® i$³VBà`ä,•žÔO­¹·æ‹f š«u(Ã`
+–H1õ(qþq%p‘xp‘(ª ¿èüg ÔÜÑgF¯ KßwþݡŸÝÒÍD/‘¯(¸î-Ýø ·ÍdÕøëw<€®5ÿí‹ÖkêÒ3ÑÔt(³_‚Sú[†Þþö¶@Ö©wh\Á[ã˜|`÷Ȫi»Âé
+gLÝõO<eÃ.p7•Ê{ĽC>ð
+è0öþ^;ý›Ö‡jGÿf*DžS$kTšô<à!÷a1êIÌñΚj=Wõ{Ê,@"Ô£ø¸ÎÍ®ti?H6Z™ÎÇdƒ;Ð[½q5*?ú9rD
+{K«¥ü¢“©t F]’`Ô3 F/'þÉXj1Ëà
+””€’˜NýéO9®ÉvµÖ" Þx-d‡CÛÚ á8
+÷¡mî‹Üt¿–Y×=ú7j-¾]F+<O „˜zW”怗‰Î--øåtâót?ØEB¸q9¥äJâ9Jâ{(¥P’ÏQ’ÏR‘Œç¤_ å>Ê»ò”Þ‡lwëÑï}IqI̯/E(Ï"<ÑÔ3,·_Îr>d7uç›ïá\_¢Š¤ëüÐ,Ô ÝÅèà ÐßS!r1Î¥À!ƒcÀùIrÁ7<ÞÈp#ù+¥^qNÕ4<G-­>óßZ{xµÙúë²èn8/kÚýÆ›fCáE¢¨µ¯L ÕZ5n 0…60ï ˜Õ˲øX9ç¢Ä—˜ó9íO‹€'MQa5)ËÓ$ØõíäuF
+>j+6> Ÿ´uêZ*â 
+yT%øÖäE/Û ¿~Þ[S²¥sô¸i§©|§IžmdÞ÷WÐGºvbÞVú‚7š"‘`±Hñ6Ü\ðvî¨ už'Ž
+˜©`[•rèuë®è,9œpÎ'¾{ƒÅ¡uÍ„Æ0`gvhTúBøà½ÅØîE³o³ª2í?ÝVJ®Cø­—Z˙㼜µL˜`†‹oáŽCòIšÈASœ·&Ë+Ãì{ª¯(büÉ…¨Å„ººËЉÊȪã*¦2ž‚ÿk(f}ŽÚ™G¡÷‹Ùe½›áÄ|Ð ZnXõ5Î\b!±M¾n\3›eQ»QÞ¸¡ÿ·¡G”Ù#Ì>1í‹aJ4¹ë›vXù¦Ø^è9Ñ/la{ë:çðeGW*:ç•J³äÉw'>H¨ Û™òí¬cêãý†ëWqÑa>AuAʲnðq ¾œíïØq
+Ýߘ~± 8åNB”…O™gf@Œ-ø9NTð’T¥¸d‘˜«Ê¹ŽCb3®!œQÍr󃎠m† —vhVñ@èEþBCaD0b&0æ—:ÜÛã›^Ï2)gI:ú4¼Ím‹ÃBƒž0‘D VñάD
+Á!æó‘ÿÌŒÇ!< ]z( 7ÐUaá­Ç]åg p¬njx²LiÜëÊõ0ÊéËMqø0àUáqLýëé«Dˆý4œ‹_¸RX¿Kó/•-$šùfº6hH‚MÔÒ=? Ù.zŸäLdz·ßÔùãP,};µˆ{GËaV3„ã®ìóall‡¹óqêµã`¸íëÅÑ€›Ç&®ìæ""ýž²2êÅä‚X¤"L'jÒjŽÞn_ü±•
+endstream
+endobj
+746 0 obj <<
+/Type /Page
+/Contents 747 0 R
+/Resources 745 0 R
+/MediaBox [0 0 612 792]
+/Parent 604 0 R
+>> endobj
+748 0 obj <<
+/D [746 0 R /XYZ 152.694 705.06 null]
+>> endobj
+22 0 obj <<
+/D [746 0 R /XYZ 153.694 667.198 null]
+>> endobj
+26 0 obj <<
+/D [746 0 R /XYZ 153.694 591.205 null]
+>> endobj
+30 0 obj <<
+/D [746 0 R /XYZ 153.694 257.236 null]
+>> endobj
+745 0 obj <<
+/Font << /F31 600 0 R /F8 596 0 R /F7 744 0 R /F35 743 0 R /F30 599 0 R /F11 749 0 R /F28 597 0 R /F16 592 0 R /F37 750 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+753 0 obj <<
+/Length 1558
+/Filter /FlateDecode
+>>
+stream
+xÚ­X[oÛ6~ï¯ðË
+W(-ù†f¬4‚VÂ,•»…„£#Çæ F.%4;N–0
+ [â@ üR°v€~Ë149¸%ñ‰Ÿíi”z"-[:žÛŠ Ê®A¿¢(t4Œnæa2j¢˜·Ù$KSûËñÖ÷«S–¼øÛéú©"$Û3{!:Ck@s† À„Ëä˜ µ0¥8T@æ”Z`ŠF$™Pû¾î«|5Öq%H'0å[ÜÞnL%b»ÝW³d ËìꔹñÂ<Û(.Ú#
+Ûy =¬Ú#¢::a0̽º.Ñ°©KÝ:£5èí+ð(¦¡ S?ß÷¾/Y^‚×ØîQ˜ºuHšë†õ®­¥'¹~0âðÀáØBb¾ô•PzÃîØdšÙpÎ ÑëøÕã=/·Lò@r˜½­ïÌ3{/
+Îôk@#§V’JºîzºRýG!¯ŒDì’¤Ö\Zµå¢ÕЙœn]Æ̉OFÒ¹—¤nmPÞéZÈþ¥Ôug­ýs“ßäÎb’tô%—M7Èx˜ï^Àã+öwD|›h~ìw­„gPH
+‡‘…C·wt†gÉ`þS
+endstream
+endobj
+752 0 obj <<
+/Type /Page
+/Contents 753 0 R
+/Resources 751 0 R
+/MediaBox [0 0 612 792]
+/Parent 755 0 R
+>> endobj
+754 0 obj <<
+/D [752 0 R /XYZ 152.694 705.06 null]
+>> endobj
+34 0 obj <<
+/D [752 0 R /XYZ 153.694 509.795 null]
+>> endobj
+38 0 obj <<
+/D [752 0 R /XYZ 153.694 410.715 null]
+>> endobj
+751 0 obj <<
+/Font << /F8 596 0 R /F28 597 0 R /F7 744 0 R /F35 743 0 R /F31 600 0 R /F37 750 0 R /F30 599 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+758 0 obj <<
+/Length 1913
+/Filter /FlateDecode
+>>
+stream
+xÚÅZÛrãÆ}߯à‹KZ—¼€€_b­µr­+»Jm”TªâT4šà”Àxf JfñßÓ
+¼h1 G·«‘?ŸzA4ó…7™ÎG·ÉèߧóÙÛÿÜþ‚8÷Ç^4ìÝyy÷âŸ
+½(fÕçÇ^0Yà£Õ#·kx{>ŸÌOW<³W¿úÓYùÛîóûË«ï÷õÝ5Óõ…£8<°¬þ•‰¤¾àB–eÌp)èÎJªMuëtí8·@jÄ¡EµcñU;þ¡AÕ§&2.6 Lˆ…ž+Ðø°ˆ5äL1Ùá=p
+VÔS°ÇÔ×÷Y‘¤TWÛuéBÊ¦à€Š@BíLÈ­³aÑÿmXpá÷»M‘žSŸÂ¾Úñ2RÉUs„ã`ªSÖ¾E·³°uÆ• ¥ºÚ³?³Æº ÷u°®¤4h¸;ïÅ}rY‰J r]Ò½¥n™ð6‡ª°­ï¬4ºTf]X¸IÙÖºû×ñ|\:IÊ?ýU•ÇýW¶ÏP³ÐË8Íä’ZOÒ¦°Á¯ñ ž4ø2i*&“Ø ùï¥H}ܪ€O ÔŒ‚m`ï pö'4l™½ß|(>¨ö©â“&U‹Ï²_õmÓºn;œ›}­:H4¢êÈ™(`]Þ"øÖFù¯hEjñ­šüF…¯eÔ†‘-8yÊØþ‰3é×JÝ]g^bQF¯…RÁ¦ÑRI‘g%¿ºÓ{8ˆ#nBo£jÔ?®2ÉŒvæŒÐã
+V¤"1½x*6J/„á}ˆ—æ¤\\ÙAÞŽ_¦TB÷D '¯‡9˜ë†ƒó bvV›át8`.š9Pô×V
+~+¸‚ÃŽR·LÉ¢ù2s Ùu¡«Y_ioÿkÞ U>íTÜ‚½»CŸâ$ôH¡ìNùæÙXŒ¥gÎ:³ùœ"ÄD?WðL¥8jBÑ—äwwš—÷ÏÕîU8T2}‚m÷dW©U57γ†èbÖߪذ¬²BÛ©9ƒ•q÷ÊPy"­“áâ‚h—¯Hª`¥`Æšr†4T‹ü­ÞÛ4›˜2öD„âHï%k8#Ž†ª–Ï]ÊãâAÆGF !<rmšNUO'%³øªÆM‘hrV˜µT´ZoH¦ÑN X?DèC¾ì2› TÎ¥5÷dÕrÃôòÂkçë›òì-×í®%F¢ñÁæù
+n§Î-kÞ1â<wßô`µ¥qµh>ТïÏËw¯4(‹¤:i>Na©€Ý;c ba½ÀäÈ2"¿»;¬!·x#…j99q^øD‹ ®Åh^˜>)~ÿÏ[øW€(òSëÇviëìÌp îT‘þ·ÏXeN4š™Çö‘êMR®0ñE ¾¶¶-À£€fÞ<
+û€üñQ1Q?é„èƒÐ@+¡Æ!ý—½kˆïyU${w\þ@\•ÔÓË ‚¶ä7OÍ„ø…ú(–É@,–·Ñ9_2]Ö©ÄX- Ïž ¡e‘Ò ãÇ/ä×Q¨ÓׂÚÕ8…Õ1<9©4ÿ>sqŽ"<gTçSoáG£óéØ Ã™Õ×½¼¿}ó?9Ö¡œ
+endstream
+endobj
+757 0 obj <<
+/Type /Page
+/Contents 758 0 R
+/Resources 756 0 R
+/MediaBox [0 0 612 792]
+/Parent 755 0 R
+>> endobj
+759 0 obj <<
+/D [757 0 R /XYZ 152.694 705.06 null]
+>> endobj
+756 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+762 0 obj <<
+/Length 2381
+/Filter /FlateDecode
+>>
+stream
+xÚÝZkÛÆýî_!(²v)’"õh¾Èvã EêÎ-ÐȈJ“¥8ÌÌpwUÿ½wȹÃÇÊ6¹\E?‰”ø¸ç>Î=sGîl?sg?¼rÍçÛÛWó÷«ÙÒÙ¬ëÙm2ó‚³òýÙ2\9þ"œÝƳ^ynðú_·ž¿‡/ÖÎf¹ êKp³†ÇT×üâ-‚è@²=•çÀq£òìm6›¹çͽEyþ(è=ÍÔë›Ð¯HV²,£¢>L8WWÔœ ~¬r*.Ž,Û×çêE´¬i›}cŒ¹ñ\gnÐìp¬Ùqyö]×»ÁÜsËó›TrcsªÐÖ¨R&•¬÷T!¦pÒØùª‘k4r9ÑHš †®UäŽÊ®—y®ÏHj¾ûâ^קò”))áï<KOˆDWêÀÌ#"©3Üù«‰¸>Ї6‚á/^?ûÅaõâ¿p‰H‰*DãѸ>Ø&öHåwø1'ŠìXÊ”qáS“*<Û+òÚ»Ú¥´÷0"1×ç$º#`“SŸ~ÀD‹¨P„µ"S¿‹Ù‡5/:)D“§#â´™â®Uy>BεQZ«”`û=V:˜o”Ä&ûçƒÍôÜ)f®ËóÛBµJ9÷Ý‹dNÓÔR f{ uE#2¨–­‘ÞX#)¹™ûOsÞØŒsGOr¸þsÍÐth_µ¼—°ÀÆÜ5Cs±PL-(¦0 v)îÌ’ŠCWÆfIÅ <{[KS"LºÇPU&a~+¤BîŤ#…:p!¿3K)9‘©(Á#*¥ .´!rÌ)&`S7IÊ ’¹TäÔ¤Ò¨ˆ©øo‹©¢
+Ɉ¦T9"Oä{å™ÄðÖê¥Æ ;~ß'–MùÛF÷ø¤²É›»~Õã"œÝ…ôÙÑÄÒª ¥1½ÄÝÈEä¡uËŠ¥>Yfƒª9ˆ
+ô]ú@Nxl>Y‚zƒßHˆv<¸{Ëi¦Sí3!4Wõ“5/ä¡ìœçý¹úß7q=ÞÄ
+Ik]Dì¹iÛ–<=Z­Ë2© Ù†Û=RÁ^ϹŽÌ/nè¾ù«á· \Á¹WŸ|ŸÅZbKì½X—Æn.:9¯ g¢Q4*1g
+ÇÍœž¨†ÒyoÓ§Ú<~´«L»VE½Š³8\ižÄ
+ÌSõVÚ¬„¥ô «Ùê1N¬GÄnjƒÿØžãjý¡7¼?³ô‘ „ü©#ãý½`V›âPØ»`jƒÿ¨§-q³a‘!é¶jç[3yéPŸÙÁoÁIJO—'‚Ñ,¾;LíìŸZëj;9úB ì˜iOA–ˆá††“ =Úm¹ÎÄ J¨«ê­3yã/Ãí|~C]Wvþ\ó·ïh#äì†H~9¹Lûß
+(U³1’ů¨ÅE9¼««)¸hYO¶¥êÍâf0F*ÝkÄŽ ý…ˆ`ûƒjt…]‘BUÇm­ðåu˜™ý4&ÊhNÙ¿»z
+Tô–$z¡Oâü,ËÓù`=ÑYŸ¾„^ÿ{«ñƒÙ
+sÖÆðƒ(m˜×sÀU_õÏ”›‰(o/¬1Å1/;³âî
+U"û7¼ó^ð"§1Ít»Sg6?cèNÄø·‹:ýÀù]O[°Œ)ÖÊCˆÊðZ8ZgD™^XžÿÄë ¶Ïì·^Ö»=RB„…þkU=®ÌAò áhÑPÿ­h3ws(ô ”5÷†of™dòtÜqì ×[ÒþIO©³i¸¢GË:tdµ{¡‘U…ÅþÙtþ~=Û€¥þ²²t¹pVÞfv³põ:¨ ÞtnøþöÕ
+endstream
+endobj
+761 0 obj <<
+/Type /Page
+/Contents 762 0 R
+/Resources 760 0 R
+/MediaBox [0 0 612 792]
+/Parent 755 0 R
+>> endobj
+763 0 obj <<
+/D [761 0 R /XYZ 152.694 705.06 null]
+>> endobj
+760 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+766 0 obj <<
+/Length 2574
+/Filter /FlateDecode
+>>
+stream
+xÚµZßsÛ¸~Ï_¡—NíNDó7©Ë‹“&é]'×ܤº»Ì4}
+
+ÜԜƖglqϹ;™Bû Ìîx·ø=
+ 7¸ã¹À Í%=ô]ÊÑvqCU
+
+'' ÍûʹÍöµ¸1Yà/dÌpÂ9k_Aýù&½!kz2þh²8âOá{ÑZR©jß²MdÒ Ù1Qþ€.܉›Ö¡éàQ=%+ IÈÛ DoâFTnç ‹x#¹†-²Ê+¹ÁÀÈ«­“¥EÒéHÜïFâQ}a`Å´v.Ú*c²Mü.t,‘x´æ;’ä„wû'‡y†÷zB¼s °xÊ
+Q©¶„NiV•½.ǪD‰¨ix¤$YQTÅh†öK˜·À©K8Ö›`ÿ»Œ¢eìxwh”¨'+~ªýL½IÕ5–,·,S›=–1%&)v¡å–ñÖõ!¨B3e2h®:}ð¼èÝ>úŒþ!Káò0Î+®PuµØS­È­»@é)}^'R•$ýö\r²rÔ_JDvo}Û.(Æ¢ðŒ­âŒÄfÔk ²Ô7¦/-Ÿèïd&Ḡ2ʃ\'­ îÎqÿHsF½t×.æ8ú«€B+¶¢”ª@Xçå‚ß9hKM
+|1lóÖu^Ä+Fó ­«hñ,;·Ãµ‚P›«ŠÓ#ʲW§·Ê ›¸m¹ˆÖòøäÕÇöŸÆº=ý£cz:«%P¤cN %
+yÊý«fwiS`?ŽØ[3Çš„—ûW#šÊ*ÇR¶
+¶¥¤gŸ£b4î)€!á–ÔývrÛ£/¨_+…•®ÆK„ ̨¿†ïªA5nörB0O–oEÜí½G‚™Ö ¯ƒ*CÝ­K–îý ƒH›vĵþú¤SU<’ñÕ­=Ù ûy­Ñk;þ‚uÅÏoHt()YÞ:ø›z«kOP‚Iì „!IRÒ«_lb/O¡šÁ7Á¤’€]®‡%p
+Rg´„QDk†ÓM:Yþ&õA ŽLÚ«€~oÊÐS1E€TÒug‘T_6f…œ¸k)– Èzì÷ ¹òJ˃ 4³pÏ0ø{ªà#G-x[2Õ+
+Ù+Xý+‚)˜k‰ð—OSS
+tE™BB„ •3{ѳgŽÓnódÛ
+Ýh6w#+ŽM~ö,÷rî8°ð¥v¯oakxÎE½.á@5—ß4—³ûfîx¶€¹¡žY/$ql–ý#Õ­s/¶ë ÐŸuèèƒ &qc37¨ærR_ÕßEú±wÞó.h»f1G=XÔÑ­H³·¿×-×qûæy+ÒŸ¸îÃŽØV´¦ÌaÅvú‰ôu".Û§ahÍÝ ²l0bmØ°¹Qmj žw÷FT«J}öÅvüœZ—sß÷Á¾Í ÿ¢y
+endstream
+endobj
+765 0 obj <<
+/Type /Page
+/Contents 766 0 R
+/Resources 764 0 R
+/MediaBox [0 0 612 792]
+/Parent 755 0 R
+>> endobj
+767 0 obj <<
+/D [765 0 R /XYZ 152.694 705.06 null]
+>> endobj
+42 0 obj <<
+/D [765 0 R /XYZ 153.694 193.232 null]
+>> endobj
+764 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F30 599 0 R /F8 596 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+770 0 obj <<
+/Length 2537
+/Filter /FlateDecode
+>>
+stream
+xÚÍYYãÈ ~Ÿ_aVÆš:UÒ$H°Yôl&ȹéìäA¶ªmMË’¡£]俇,–Ëòt'yÉ“KE‹E²>’e¶Ú¯ØêÛ7ÌÿþæöÍ»f…‰‘ñêönÅU!V‘6¡zu›­~x¯ÿyû»w`"“(RÄê$1Žç—êÏu^¶ßÒroZ0½ñ 6œ…‰NzÑÉ«DÛ2û)«vÝÑ–í¿hE¼J`ˆH6 qˆ{$JѺ¯Ël½‘Rí!mi”7ø«`ÆÒ„íyª»%«ó‡µˆ[᮪{ižãTWû:=mý•›­yP­7°Êiº&hÓ6¯J˜,"a(@iøU†”Œ½hŸÿòØâWž!UªHœB
+¿Zo8:øÓÃZr8ÐCn/mÈVÁÃXpZôÝÍßo‘i%LÈAIråãáÆÍëPƒŽ“éïÁIL6†ßLðûËsKF&¥L ïªKuàL±Ám¦Ûa[õJu¸f ÑœOd{ƒox¨,?»Ô 93« OvæÛ8hé »"mš·ëâ*hª£}¤pJ‘ß»:3ÈÃây[ç}»È2Å š6-³´ÎܱÀ¡*Œ!¤Á…pmüÙŒ*B•—M]1©¾bRunR'SL…BÀ™Dö¡¹­ªûË…
+léyàtKr’Pš‘§nó]a/EI‚RžÍ™Þ6!™*1à+qn©olݦy Þa*8¥;4þýZGAŠ ³ö²DþÄ4kUWdDØ‚»M`ašÓDQ¥™Íˆy‹ž}¦ùö74ë¢É~ÓÔáÀ³§§}¿pz‘ÀñõpúcÓ<· §ÂˆFz» h#5À+‹¼¢Aà1mÿÀ(dñ€<Ûã¥
+W>@ø’¼Š,i×Vpø|—Å3Mõ~ÄqïG“qäýˆÃǃõ›¥žVÕµmN ´gy¹÷—•ÒÏ™¾½(L2'— \®8¤~rëY· ¦(-.õÀUÂøË|ÀÈ)„ ð2@5î$™˜A¶d
+=#†
+h&D&·-|»ÓÀïy¬âÌ,ùc {n;'ürGl¾ŸŽyPÃ~ÒÁ>Ê«=ÆYç&%"Ü|AK¡Ïä$3¯3ë;DowNl6Éõ}﹃ˆq& ù6³½jÊX®¥.ñ¤÷TA F"
+kÄ`€¥ë(ó—¿Ý|‡õ÷øn!‚zÉN‘¬OzÛ¡/˜™I‡fÌþW_ ’èå>Y±P‹¡³O-½ó%2hž}õúôÖg„Cã@-«–ä{<•+UÜ\^zäŠc¬YmSNnŠƒ
+ˆXÐb‚hl”öåcŸógÞr¸­ØL“ÒÏxDô>Õkƒ%7ò1“~ÁMâ7AFäBz7y°•_t6cÎMBÇÓ ÅÏ“+õª|€*ÈŠ?ö­sC<1õžZkç)¸n£÷–ëÄ]u­±£Á?ŒrJà´¡±§§Å~[ÜòŠç~CqQ'®“ƒëÔ’ë|}-Uïºåý/^wdh”þß}&"@cί–ZôÙÍô J0àŒþ@aI ’˦ÇA;nš{#æî1‡û¸.¯|'‡’¬s¶
+endstream
+endobj
+769 0 obj <<
+/Type /Page
+/Contents 770 0 R
+/Resources 768 0 R
+/MediaBox [0 0 612 792]
+/Parent 755 0 R
+>> endobj
+771 0 obj <<
+/D [769 0 R /XYZ 152.694 705.06 null]
+>> endobj
+46 0 obj <<
+/D [769 0 R /XYZ 153.694 601.625 null]
+>> endobj
+772 0 obj <<
+/D [769 0 R /XYZ 153.694 234.46 null]
+>> endobj
+773 0 obj <<
+/D [769 0 R /XYZ 153.694 215.088 null]
+>> endobj
+774 0 obj <<
+/D [769 0 R /XYZ 153.694 183.207 null]
+>> endobj
+775 0 obj <<
+/D [769 0 R /XYZ 153.694 151.327 null]
+>> endobj
+768 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R /F30 599 0 R /F11 749 0 R /F28 597 0 R /F31 600 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+778 0 obj <<
+/Length 2158
+/Filter /FlateDecode
+>>
+stream
+xÚ•YYsÛ6~ϯÐ[© ÅÉ£OIZ§“N¯i=δ}€EÚfC‘Š@&u~}w±à)Êc¿X
+8K'ˆni4ñ²ŽÉË z9F/ã Ê;Ú[üWº¶¬ïûiGÓmj´èEj´_…Ž´ªÂ¾¿¹ÐU8¾}î'%93IÜ»€ÚÇs7íOÀáñÜæt:Ûî4O£Ÿ›„Ji@úMJ}Ab’1¡ÔÓ¥bÂdc\  :s¿ÝA`ÔôР¶Ÿ()`½v*óáa
+ŠONó¤ Ž§
+~€º‹À›±ŽWJ°¤Ò>M±(øν+h( &Ìl' 5ŽM6gÑ#•Zv Þ~®»·³|J¡±7gË/Y .Õs Àpg»ª¥‡áöŽžï<+Ë0RNö€ýsXè±E_+2MTª q˜`GNH 7†¦êÝû?ºþ†(Uïi“>/CX À€ÐšÞú#‰ZR³ ŽÖÙ¬~Ûô¢¸H&®{†)ÿ¶-ÃtUýþâ‘F6|Làó ’æe=C 5U›ˆªï‰±€M.GoB)/ÌOǯ©Ó#²>~ÂKóDaHJW\ð%ù4.+Lý%.ã¤'=ð;’ÎCs1bœ_@øV$ydÃœ‘ÃË*'È Ì‚)žL᥹¾‚Q”çt¥i4鼶öäô¼k5,9íïGM¡MÓ‹¾åÛâÔZŸWHž?a(&|£}
+¨ÚÛÒ®6ªê‚WTý‡.ÌâU2VM_Ê59§výfBHFR!æ
+­×öß{Òq`k7=O‘HÇ !.ÒÂà-e[ö¯MùDÃAØ «°=¼x¥¸Né†Ë-OÛæpØÁú«>ã[ߥtAöª#/Wôílí
+â¾mCËÉh
+=ë¿ à|xÀòƒX‘ÿ vê\07sЃý–P×;¿¾PýÂ÷
+`K"g›®o^ýù¤xb
+endstream
+endobj
+777 0 obj <<
+/Type /Page
+/Contents 778 0 R
+/Resources 776 0 R
+/MediaBox [0 0 612 792]
+/Parent 755 0 R
+>> endobj
+779 0 obj <<
+/D [777 0 R /XYZ 152.694 705.06 null]
+>> endobj
+780 0 obj <<
+/D [777 0 R /XYZ 153.694 667.198 null]
+>> endobj
+781 0 obj <<
+/D [777 0 R /XYZ 153.694 639.358 null]
+>> endobj
+782 0 obj <<
+/D [777 0 R /XYZ 153.694 583.29 null]
+>> endobj
+783 0 obj <<
+/D [777 0 R /XYZ 153.694 551.479 null]
+>> endobj
+784 0 obj <<
+/D [777 0 R /XYZ 153.694 463.739 null]
+>> endobj
+785 0 obj <<
+/D [777 0 R /XYZ 153.694 430.143 null]
+>> endobj
+786 0 obj <<
+/D [777 0 R /XYZ 153.694 413.649 null]
+>> endobj
+787 0 obj <<
+/D [777 0 R /XYZ 153.694 397.709 null]
+>> endobj
+788 0 obj <<
+/D [777 0 R /XYZ 153.694 370.367 null]
+>> endobj
+789 0 obj <<
+/D [777 0 R /XYZ 153.694 318.506 null]
+>> endobj
+790 0 obj <<
+/D [777 0 R /XYZ 153.694 264.486 null]
+>> endobj
+791 0 obj <<
+/D [777 0 R /XYZ 153.694 232.882 null]
+>> endobj
+792 0 obj <<
+/D [777 0 R /XYZ 153.694 201.002 null]
+>> endobj
+793 0 obj <<
+/D [777 0 R /XYZ 153.694 180.8 null]
+>> endobj
+794 0 obj <<
+/D [777 0 R /XYZ 153.694 161.151 null]
+>> endobj
+795 0 obj <<
+/D [777 0 R /XYZ 153.694 141.226 null]
+>> endobj
+776 0 obj <<
+/Font << /F8 596 0 R /F28 597 0 R /F7 744 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+798 0 obj <<
+/Length 2424
+/Filter /FlateDecode
+>>
+stream
+xÚ•X[Û6~ϯðKPÍ"戩KIÓ´M`­±-Ðl‰c«#‹†$g6Èï9<”,ÙšNú$òˆ—sùÎáb½?< ý÷ÛÕ³ËïÓEƲXÄ‹ÕÍ‚Ç)‹£t«„‰H-VÅâ÷ài:]ÖË(Šsw!’ÀÔ" º–hº14€9rüµ1ž2‘olsñßÕO—ß‹É]2b"NwË'ɼÒmûÆÔEaóýÖÔÝÆÚ[Ú:ÙÉS¥Ãήܚ—¸jk±±dRÈÅ’gL¤-älºê÷¥
+Ãàª)IbÖîÝ@ÝÆKµ-×îza>…\YM¢Ë
+÷ŠiÌ΃Ôe‰ØíMÙc™¹:ŒY¤x*Óûûó›…dBŽnæ²2Œ–E!@œE2¸T²DÅ‹e$XzD*p.TðëE&ƒ¦ìÊz ,%*øÓî›ZWËvs˜!„¾åþšûÎÔmikDaâEúϸæýVÈÀ"‚‹èn1žzp½wR¦’x1"ÿv.Ø2’œ…)Wâ,œþZv›‹¥ÌPge‹#Ü¡ÉMƒìÐ/Ä~î9á"b©pãR9QLEr1"ÿ£À$eèïž ¡¬Øçž®éþÖnÍa£;"%!2MDZâcÒÖïô Œ"2@…s–)σ.ôÎ["IáB#D5ÂÃÊžø)º;ö!‰2¸À¹#÷Ë‘{™Ñc€«
+™žÓ˜.Z]¤p”®;w‘¢SD< 3hÞî¯Á›áž‡Ê¼ ÒNíž&ã#jØkN<†fúeA;= “©£šDa=óz’OëI9k Šr²F<bI2•µõA¦4$ŠBÈ0 ZM”sV“YÒ»§……çÉD±8¼ÜŸ¨]ä蚎vg´ ùD´E{S¦¾i‰îM×úãlm¦'6%A’¦e¿Ð%P/M*›s‘„=ÆqÏðŸ ÔŒT"f\‰£T¤V²,<Aû¾%¨g©j–¹w5Ct2Ðý‚4x{õ QtKMÓõ¾, þ-cj¢A,ue¾¯tƒrr`:GßÐfÒJÖƒ±!jmDîñ†2„SæÛÝWhª˜-ÆzÀoõ@ó /Õó¡|YŒ+7­E#>œkt'>3çAz“Ùä<€óódÂÂ$²
+„;zEˆ®I×0 ]ek<ñPV|¾&Ã
+07D½©n†°Óê­O7}¹¢+Ÿè'¾Ü˜J_Ÿ/µÏÿ`DÝx3éÜ%e@Ñ
+_&唟ÕÆÔ`~Sü]
+8xÄ»qñ"C®ëCŽµ'Ù¦1.€Â²º@þg¼†‡ ¡!°¦›Kæ‹’“dî™À0‡—9tº[u;‡¬XÁÎüM”5\A0ãžñ1㺛¦}ÜÑÀ› Å(†Ã‹ªÑ( Qw.y&AîBz¦ÜƒÎð_ëp¸ÏÖtk0…x_®ëí¨ÔwDÚ4¹³5fÎ9‘ɶüPÀzf¢Õq”d=žÖãّצ6Íq½Þíª2×וñû--Óýf@’lPP8˜Þ»%<ëÎGø'p&Âk{ÆÚPwfǺSïÚG¬ EÆ°Š°§jú4}¢ÕU Ãÿ»açŠ)‘p'.£z GÇb ]Ð/ô9ÁÛÊI ¿0´ õÇÁ >zô(øSÖyµ/| I ÅI9䣈ɉ+×öø`œ(|£G]Ð1¾ ™}µ­»Éré“5t¢½õ…RUÞºúrÚàõ_¨²”³YKT4P„Œ ßi<Çàª(—7÷ŸÇÇ~øÆ]ÿåóóà‡*ëÏ b>]“1ÉeoÏ -áhAÄT:,È-ªiwXÇCæw3D±ûnüïQ*Ÿ\‡ås&‡ØUú%cÁ—"JuÕ ïîÜ/Ÿ¿ühÓžœâ6Ôüpk·Ñ
+=süh€‡ß¡œò¥OÈÉ2=©,FBEJô=® š8õmÍn»¥%]XW–ÀÀoÕûb¿f®†à,>“G2¾j¤Ó E‡•2×W>nV[¿â"¹?Ω2ACC¡È§¢OºËQ3Ø%M˜H£¯ê„æ{á Z`žN[áط«^;<ïQ‰3¶—¼1w¹—s‡ÃÂP åñwÖõÏô4ƒŽåw®›9oz9$¦-ï[ÊL}^`ƒ´KØ‚Ÿ5à.jÑTw*öÍCçN„¯þñËé…Âmt`„–ô#q“,À“(¥Î$õú ¥ðÌÌÔ“ÔÀŽ­F¶øš–›8ñ )}ê!vg %ãR÷ª±wPh´W:¿EQÏ8L±Ø‰Æ´;^8-På#Kåiöí‹ò©4\PûzÆåøŽóLËíÖeßÀ}åŒ{KÐk½vc«Š‚ƒ'Ìû£P £dVÒGГ
+æäš8a˜ÑhÕgè·[äÜÚÍ®6­‹¤nö 5ì?~šc‘.>aQ>ÉâV—Ug_R¼{ƒ¦mÖÿä
+õäËÂ=&ac_häIaòñêêãK¸tÓu»———‡Ã宑•K`k©›|Sޙ˭ÎÛ^Biî/¯5æwsYAñκûî+˜î_ÀÃøI¦ß6Ýfïùü÷Z4 _iGÿŸ=’´·n{¯+{Ý›«°ž^›îõ?Qhò$oßêA›ÖCå`›[]?Ð÷; ¡„†ïtS•må•ýª8þéy/r¿„fkk–[¶¿}ý|RŸ¾jÅL |…ËXÚ?óòh²ãýêÙ_'•/
+endstream
+endobj
+797 0 obj <<
+/Type /Page
+/Contents 798 0 R
+/Resources 796 0 R
+/MediaBox [0 0 612 792]
+/Parent 806 0 R
+>> endobj
+799 0 obj <<
+/D [797 0 R /XYZ 152.694 705.06 null]
+>> endobj
+800 0 obj <<
+/D [797 0 R /XYZ 153.694 652.897 null]
+>> endobj
+801 0 obj <<
+/D [797 0 R /XYZ 153.694 632.183 null]
+>> endobj
+802 0 obj <<
+/D [797 0 R /XYZ 153.694 612.575 null]
+>> endobj
+803 0 obj <<
+/D [797 0 R /XYZ 153.694 592.968 null]
+>> endobj
+50 0 obj <<
+/D [797 0 R /XYZ 153.694 561.757 null]
+>> endobj
+54 0 obj <<
+/D [797 0 R /XYZ 153.694 277.929 null]
+>> endobj
+796 0 obj <<
+/Font << /F8 596 0 R /F28 597 0 R /F30 599 0 R /F35 743 0 R /F39 804 0 R /F40 805 0 R /F16 592 0 R /F7 744 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+809 0 obj <<
+/Length 1834
+/Filter /FlateDecode
+>>
+stream
+xÚ­Xmœ6þž_±Ò)*[åü˜¨Š6.MÛ|¨ªU›*í¼ 9VÆÜKO÷ß;~aX®G¥~Âû™ñxæ™üÅná/~xá»ç÷ë¯?D‹Åå‹õvYŒ"Ba!BƒÅ:[|ñˆÏ—­zý&8ŠÃ™¥1¢~0fÍŸ˜²Õ®ÞlJa×öQ/ÝÚKì£8ˆ;Ôx
+•¡ æêãK·Ä_` [bá|€#âœÛ¥!ÂËKŒI཯÷‡D›¢,Ô’bï~yI£ÀûEÖ0À^*š¦¨v˜/b X
+ø‚"ßwðnJrˆÚ/ŽËÖ†Í8
+(Óó¸cý«n>
+½éÏV‡Ÿ…¬D9Åœ!ÆAp-']šÃüYk½üîõµ}{NÜ ?Ž
+Ç…)Ʊ »)ÇŒJ¶ªûGÑýíÐ층ßoóB £ÌìH fEš ³sg¼Àä‚þ‡h›×ÜiAi]º!Œ×\Îÿç@¦z<J#Q_R¾©ïºúýïÕ¤·q$bª1¢áa“7Í¢]7BŒg!Bí
+ê&œÃñh
+endstream
+endobj
+808 0 obj <<
+/Type /Page
+/Contents 809 0 R
+/Resources 807 0 R
+/MediaBox [0 0 612 792]
+/Parent 806 0 R
+>> endobj
+810 0 obj <<
+/D [808 0 R /XYZ 152.694 705.06 null]
+>> endobj
+58 0 obj <<
+/D [808 0 R /XYZ 153.694 631.589 null]
+>> endobj
+62 0 obj <<
+/D [808 0 R /XYZ 153.694 481.623 null]
+>> endobj
+66 0 obj <<
+/D [808 0 R /XYZ 153.694 386.826 null]
+>> endobj
+807 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F30 599 0 R /F8 596 0 R /F28 597 0 R /F31 600 0 R /F37 750 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+813 0 obj <<
+/Length 2096
+/Filter /FlateDecode
+>>
+stream
+xÚ­XÝÛ6Ï_a 8TbF¢H}ä¡Ø¦—\{hQ pï\ú [”M¬$
+½»í"ÿûÍ”W²åµ6È‹MŽ†¿ùàpfH±[ø‹½òÝÿûõ«·ãEDÒ8Lëb°”Ä”."òÅ:_üÏ£a°üsýï·4Š²2JFÆð|B&‹\V8¸Ïñ÷F‹ªÙ¨‡ì{œí;ù·°0C+³
+|’ò´H'rJ({¯ƒÇ×ôÝrÅ)÷¾¼QÄ¡îneƒ£ZmZ‘Ýâð®=”¨s/s½ÇÑß7f¾r·×B.½·ˆ„#e“u¢”µX"Ohït²Ú'½öá,w‰²›ïvÕ!ÆÉànk€VG§?šQ!Kc’zíMÿíË?®YwT…ϲ®³m‹æ¹«ÎwmVÌF'PÄ@p¨“6;–°ä*˜uw71B £ÉóêY–1ó'À(#~> æXNÀ¦{ÀOO4;f‘ÓÿÅ*å$
+qGREÑ“ƒZµ9túf£Ê¼ÊଠQÞ~L)¤
+L8ñý¨ø»Y'‹¿–+Æ©§÷îàÐá’ˆ“ÀO†û1”3†g1ñã£s¶ªª²:'ËUâÞÏJ ½õ2ažX®/«¬Ü_Î}–I² Ä‡4`?LH#a»Ÿ˜ÖÈ´à„c`P0—j? èò'+ÿ³Ï}ÕZí²zIÏ9¤É¶8»]rîe;|ý î.ÜšÐ&@A$…3C1(Øz'%kաΗc!äûÿÙ؃¬w8càxÙYz[YŠêÝ/iŒ®2cY–v´Y®@¸B îízu€TªÁÏŒqcÍúhY®˜ŒßËL‹n¬ÏæàTy¦ŒC' 1úBðcÕôjTcÄä¢À?°N‹­†Ù1V§89@SéNBøÏ&Ÿ=4sY¡Ek2²,j¥[Qf&Ao»:«„ÍåÇ063— -Ãã—i½¬´½ØÕ,a$—Y×ÝȺPÇcg Þéæ8ú%[‹OßuSŸz ÂÓ™âNÚ ²Ÿ¥ô‰3K¡_àÄóTqY¯¾Æ³èkôráuBújðéq‚Õ¦3n‰©éº}/ðv|5t¿Ì·df!™u¨ÒYç7kçã\m•¨5D²Ô{¥nç`îÏ:ÀIb®kx0Û5¡BQ 瓈BKRÂWYÈ•lúªj2md)õ2 °8„1‡„ŒQ#¬›f°ªºu X=€ýv…X=Îë—á@½\ñš,¿ ŒÒ^ý£„ób½?’“Ê
+%ÔSþ‡ÞO2Ê’þ¨Ä­´Tð;.¹ƒý˜Ù÷HÎ\YD‚v‹»ÆT"±5R¬'€•”[‡£°è¶BF8šŽ ¤Y1¬Êe†ÃêpniQG¥Ó‹ßÁT» õþ»i®1åÒpm)¨).uwhŒÞgîëïþc8„¥¡mØiËÀò' ’#0àvv
+%Æ
+ÕŠm©:'KÕ®/àÐwa|›Q«w‡>2óÀìþÛ¶
+ã66
+Ì}ÓAI_u÷í ªlwƒÍ ^ä*YÜè{eö5‘âÎ]t¾¯wöBnxv"â'§ŠVÐPÖ·û È^ŠØBðÁ¹z ´ùÁØ|ì©£A¢q?õz1 ` ¦Ë-•[¼‚‡,=ë~ q›Õv`Ÿc„ØÚ>µ2ÏőɵÏW&ç:¢´î²k %ñ:iQŠkŒÉ(yšŽ->i­Xß³ºÖ*¶­U8j­ÞXÎν
+IÇÒíա̇¯Ork®FòÙ¦ìãÏŸ~ýðn¹Š|ý°°ƒcƒ„ÓÈÃ>É-\®¡Íí ÷ÝZ)·YYþe©w¨»’Ž;«‹ýáîÇñQê‡l
+ÉõõˆÇ®êÝäišÒó*ö’sJ&ï ŽÇÞAóRwý­ÑRõå ×Óþ’$p””nÍ?>þÕînú÷. ¥ÈêÎ’þèÐÓ82±Ÿˆ9¹ª 4Çé°ÑN"¸ï”¥}‰4oYHzo;ø^’²Ö±:º¹õ
+endstream
+endobj
+812 0 obj <<
+/Type /Page
+/Contents 813 0 R
+/Resources 811 0 R
+/MediaBox [0 0 612 792]
+/Parent 806 0 R
+>> endobj
+814 0 obj <<
+/D [812 0 R /XYZ 152.694 705.06 null]
+>> endobj
+70 0 obj <<
+/D [812 0 R /XYZ 153.694 388.465 null]
+>> endobj
+74 0 obj <<
+/D [812 0 R /XYZ 153.694 190.513 null]
+>> endobj
+78 0 obj <<
+/D [812 0 R /XYZ 153.694 160.755 null]
+>> endobj
+811 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R /F28 597 0 R /F30 599 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+817 0 obj <<
+/Length 1343
+/Filter /FlateDecode
+>>
+stream
+xÚÍWIsÛ6¾çWð’jÆ‚ €à’“ÒÔ®§i3zè$9À$qB‚´ªjôßû°P¦d:–Tr!ï{ Þx /ð~y¸ñ§é›ëÛÄKQ‘È›Î=Ì(ŠÒЋXŒeÞtæ}öåˆ$þƒþˆºÎgBÆ”†>/õH}®T¾(W¢Ô'ûoÅgÂþ½×»wÃn©ö^5f»hôuúëõ- <ŒQÊÑ\Þ˜Ä(‰‰ÅO1&ÌÿYd¯5å˜ùTM.Kåàžp'ˆ&éþ>š üK‘(ñ¿åå»Ñ˜aìÏe ô’п™å¬s^è%õÿRÂ’Nž§üÞÞœÉ0ìg€á·#쯄žíõ'€m¥,]iØv<y¹°ËfÉ›n&ìiC:ñ³¶§_øŸ+;Þ›¿bO¡ôÚ]J‰YwÌÁ‘¹Œ(FåVÑ“^Û¨á_Ly<¢4 ÝùÈžŸ. ´'XX-e[
+ž7†ùÒ&`ÁxwåŽvó¢°3õ¢0|mLàH5Ò¬ÿæÈŽ †¹0?!*¾
+Æ!¦À* ~Ï‚JÓèÐÂ{mf±“Uïås;Óë_¢Ì
+©Lœœ ™7N‰öæmø} ò©ui‚Ò¤;µäÊ¢è̤A¬‰uH3»õbE¯Œ€c‚!Í…é¡œ}B¶öQfz±äåÂ=ÙÜ…£?øÿùáë•{O.ÊÔbÕÓäá­^^ÈkQlFè[Éb/BiLóöH0‘¢8u¬F\ºcHE¡QVˆXº×ÕLC—'m†Üfó ßí¶o`Üå1@iC`HˆÀ]û0“{) Á˦n…^뜗ÞMÔzH {ÿ)¼© vªÙœÆN›‰¹Á¬¤FÈÿ[LvoO‰.’HG°ï?|:Gœøb¤ßnþ> )9GqójRÕ2›,·z¥ÃÏzbâ Äô ¸r!ÔËêL:èôè»ÿÝIÏ9Û>äìžu©ä˜~‘XßXs^¨|jŠœåT梃ÆÙnͤâŽ÷f.g\/ðn·Ý!<=‡£A³mO
+)Ài Õ5ßL`ÁÛ¢Ù>€LcF—qÌ"Ó EO\¶ÔSù Ü_“‡˜³G̱“˜{ò æTJ?ƒùÈe!^ŸÇèäwOË¥
+endstream
+endobj
+816 0 obj <<
+/Type /Page
+/Contents 817 0 R
+/Resources 815 0 R
+/MediaBox [0 0 612 792]
+/Parent 806 0 R
+>> endobj
+818 0 obj <<
+/D [816 0 R /XYZ 152.694 705.06 null]
+>> endobj
+82 0 obj <<
+/D [816 0 R /XYZ 153.694 641.374 null]
+>> endobj
+86 0 obj <<
+/D [816 0 R /XYZ 153.694 620.605 null]
+>> endobj
+90 0 obj <<
+/D [816 0 R /XYZ 153.694 273.364 null]
+>> endobj
+815 0 obj <<
+/Font << /F8 596 0 R /F30 599 0 R /F31 600 0 R /F21 593 0 R /F28 597 0 R /F7 744 0 R /F35 743 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+821 0 obj <<
+/Length 1555
+/Filter /FlateDecode
+>>
+stream
+xÚ­XKoã6¾ï¯ð¥€ ¬¹|ˆ¢ˆ½dŸEÛCÄ—¢Ûƒl˱Y4ô¨7òß;CR¶%ˉíæbÑÃÇ|ói8ÑÑýˆŽ~}Gýóóô݇ïj­D<š.G,ÔDq>Š¤"\ÈÑt1ú;àJÿ™þþá;b¢£(´K54‚cìšL„ó<©ª›mRO_ͼY§E=žH.;á†fSg¦pãuR4Õ¼Ì6~YÖ®™U&Oëô£ûÛT©lÊtSfîÐ0ÈŠªN“Åó/Û¡mÂ(ÑR·VÄgYñíg:oêôO ´zj•¾®'nõè!=!‘:nõ æ–tAÇôÕÃôÍÌ
+ëtn¢^ù=uVç©“Ír3žÀæ9žðàÕXYn3pa@ LKKÞe­05OÂ0 î²u–'eþ{E€îJ”&^=IùÓ4–íò¤XàÙ­ äѦ[|˜rQïoìà pMI80;á€_Gî,ÀAÄL‘4¸[™±àÁ6+îáX ñv¬%p 2Ë%Hœj< 5Â5\CdI¡E{Ø©› ÉøšB´)ýõ}Bj6ɼz~:yãtÿÆñ=<$”‰¡Wƒk :fG“ßßÓ$Þ2P„gŠ.=…9ƒ #Mò"‚v!醢·dH]Á‚~HÏá§ÿq|µunñô¼e¦Ñôj:“ &v½]Èæoɸ.¿ìøêÂëUu(êÅqJ"®|¢gû0ú0þ9É“bžº8 ’mzŒÃ
+[ÎáÓ–W+S¥˜IáÍ )¼®ù~¹3G3«:uKê¦,Ò…›0? `´kü{¢â”áa ñeWH¦ç{ÇÄà¿l×Zx°ŸœµhÔp7;ÖÎÍz“§-CIéË@ß=aÕæøx?
+C³¯9DÁñ‹ôèy²åŠÃÂeÒä~:óëjÌç¹qµÖ
+endstream
+endobj
+820 0 obj <<
+/Type /Page
+/Contents 821 0 R
+/Resources 819 0 R
+/MediaBox [0 0 612 792]
+/Parent 806 0 R
+>> endobj
+822 0 obj <<
+/D [820 0 R /XYZ 152.694 705.06 null]
+>> endobj
+94 0 obj <<
+/D [820 0 R /XYZ 153.694 575.604 null]
+>> endobj
+98 0 obj <<
+/D [820 0 R /XYZ 153.694 396.014 null]
+>> endobj
+102 0 obj <<
+/D [820 0 R /XYZ 153.694 234.916 null]
+>> endobj
+819 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R /F28 597 0 R /F31 600 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+825 0 obj <<
+/Length 1329
+/Filter /FlateDecode
+>>
+stream
+xÚ­WmoÛ6þÞ_! “*’z-0 Ý–n-¶uèÜOë
+0mi‘%M¢âxFþûŽ<2±lÅyA?‰/w÷ïxÏQ³rççùþ0ñê#Næg1ùÒ!óã,tâ(ñ)‹œyîüåf>õã™GH¸¿lۙǨ+:)®% Sæ~leÙÔ³¿ç^½KœØÏ–*cƒ!u<’ø,ch‹
+‚ñ`ãPÆ~”eà“–ùBXø“XT¼hzWl[Ñuby³;CítÏg~Lø4‹ÑƼàcªfFSwSÖ+µº‹fæÁBn$
+žãàB/ QãtѬ×0¦‰+…‘hùŽJ‰¶Êç5bàDvCµÅ}>¶•ºòµ:Ám
+û=X OEžöL…ì­<¯óË+Þ÷§#±™ÑHÇ÷B¬ ]3´÷’
+Yê^ ÆÂ?C/QnÍ/gèÆX¿æVŸãBUÖ—ÚLbÍÀ
+endstream
+endobj
+824 0 obj <<
+/Type /Page
+/Contents 825 0 R
+/Resources 823 0 R
+/MediaBox [0 0 612 792]
+/Parent 806 0 R
+>> endobj
+826 0 obj <<
+/D [824 0 R /XYZ 152.694 705.06 null]
+>> endobj
+106 0 obj <<
+/D [824 0 R /XYZ 153.694 667.198 null]
+>> endobj
+110 0 obj <<
+/D [824 0 R /XYZ 153.694 360.148 null]
+>> endobj
+114 0 obj <<
+/D [824 0 R /XYZ 153.694 231.928 null]
+>> endobj
+823 0 obj <<
+/Font << /F31 600 0 R /F7 744 0 R /F35 743 0 R /F8 596 0 R /F28 597 0 R /F43 827 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+830 0 obj <<
+/Length 1344
+/Filter /FlateDecode
+>>
+stream
+xÚ½XËŽ£8Ý÷Wd3‘:nü†]Ôš®‘f3›ì¦gA'a
+pNU—JõïsBU B³ 6˜û:Ççšø‹ýÂ_üñů¯ß7_¾=È…@¡¤Áb³[`"IÈBp‰å‹M¼øÛ£/ÿÙüùín(‚¹¥ˆ‡˜©Ö¼ÿæ–\[ÕKVØG!c䦱Ÿ˜²ßÕ6
+õ×Ñ$:{äÇ訊÷·›n‚Æ pC)b¤ã¦T&UùÞì¤òqPÉþ`–+N¸÷F¸Ÿeƒ¹Õ¦z¹±;¾$±9,Á÷½7,Å$§|NtÄè¤ÊUŒE¨u%ç@ã$ŸP«`€Ä'9 gˆúw´Ò©øP< >lJ©(ùñi¤‚Ò9ñawà£~©íÉ$Ïj2F|Œüi„¦b” ÃLó*ç„)¸gEy\n!‘)…Ókµ6*;ÆIA©¸€z°¯óçàG¿ Þñ<éTd‚s2š.Á"„DØ Q,+,ý >ÿüøécª¶°?—$ðTúºÌ+U
+7riB
+äÜ8¹hŽ×Þà˜Å)k–¢!Rq‚˜ ˆ"¿MŽ"o\®¯œS|áÝL0N8¢¹7CDPµÇPûïÉc®*í»í¡ñÖµ”R —
+UžRS?/tÖŽ®_ßê,³{ÝÍÒä©~
+:Ð|µµÖÖåË'Ͷ~½N»Òk„Þ£Ó÷›ª(ÙIܑОϞ+‚ÎݯLöy§.fµÌz„¾ªÅBõ˸{}ͳ÷€êõ2}j74Ý
+endstream
+endobj
+829 0 obj <<
+/Type /Page
+/Contents 830 0 R
+/Resources 828 0 R
+/MediaBox [0 0 612 792]
+/Parent 832 0 R
+>> endobj
+831 0 obj <<
+/D [829 0 R /XYZ 152.694 705.06 null]
+>> endobj
+118 0 obj <<
+/D [829 0 R /XYZ 153.694 384.729 null]
+>> endobj
+122 0 obj <<
+/D [829 0 R /XYZ 153.694 247.396 null]
+>> endobj
+828 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R /F28 597 0 R /F31 600 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+835 0 obj <<
+/Length 1918
+/Filter /FlateDecode
+>>
+stream
+xÚ¥Xß›8~ï_©:•HëØ@Ÿ¶Õµ§»‡Vº‹ª“Ú>°‰³áJ ÒíªÚÿýf<†BvÓÝ'ŒmfÆã™o¾Ï®f|öÇ3îŸo—Ï^½Wb–°ÄH3[nfB+f’pftĤҳåzö9H˜dBÌBh¤y“~áÂä¹m[Í¿.ÿêä=ôezƒ2¢²E²PÎ"f*NHסBT±Ùd^ÃE}=Pòê}Ü3˜Dpúøw ûwYaç ™ð ÙúÁ¾*a+»>T¥½z/ûR„à,Ûøðñ¦,›¢lüýýF3£»í‡Ú®IQVÐsS•Å6»Ž
+jFçˆf†%‘ŠÝ (â À3ŒIªÒ‚6îJ„L'IßA¿ÛUžVöã¾ÉÊâçðÎn⎋˲ÌmZ4ÕÁNÞëío&yM ¸’D'­Mò 6Õ7»Ë2Ú´IóúÉF©³ŒzX¥ÓODÔdd4[HÍâÄôQúD¬{¸eØê2»¼7 Çikƹ9λ}ž®ìH+»ËQjãßKð‡\b@ë$z8Ï" ßÅ}çLè©J˜¹ËÌVÃú°²5)mZí.ã;‘Ë<ƒ q6£[›®iTnî–ŽÍ]#˜ Õ0íÐl08kìîØÜP°ø^BƇ”ž¡”d@(E
+è„ví¡ªcŒm·e+ë!¢²x)VG¨tJÖå¡PÏcA^(IzÍt½F"ªzâQPo ³pœæ9‰ûÔ4·K«o8‚CìiÆ^ÑìÚs¢!ÒÜh²¥RØ ·wصçR {½CΉT¶d¦‡aŠI®:ì,'p
+[oÒ˱ïjpŽê:«ý¾Æ…%ŠicÇŽ:ãrQú‰Ò‹£ƒbõ‹Äð Øt5­Äþ[ƒP¼öþ®sOà§ið´ÎÇágÁÇÕ Stº½>Jãó!͈³l:êd'‘ãlD =¢}š'b(K‹9ô³ ^0qwoq[„`ðÖ7MÈ °q‚½7´òOã^ò‰?5|w¿û´t×-#è¤Á&°Âßõ;7¯™'ô¦ÿ…;†Æ+%Ÿ­²=
+endstream
+endobj
+834 0 obj <<
+/Type /Page
+/Contents 835 0 R
+/Resources 833 0 R
+/MediaBox [0 0 612 792]
+/Parent 832 0 R
+>> endobj
+836 0 obj <<
+/D [834 0 R /XYZ 152.694 705.06 null]
+>> endobj
+126 0 obj <<
+/D [834 0 R /XYZ 153.694 667.198 null]
+>> endobj
+130 0 obj <<
+/D [834 0 R /XYZ 153.694 576.337 null]
+>> endobj
+134 0 obj <<
+/D [834 0 R /XYZ 153.694 376.386 null]
+>> endobj
+138 0 obj <<
+/D [834 0 R /XYZ 153.694 257.381 null]
+>> endobj
+833 0 obj <<
+/Font << /F31 600 0 R /F35 743 0 R /F8 596 0 R /F28 597 0 R /F7 744 0 R /F43 827 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+839 0 obj <<
+/Length 2504
+/Filter /FlateDecode
+>>
+stream
+xÚ¥YßÛ¸~Ï_á—Ceà̈?DRyé&Mr¸C¯½k÷ŠM´6×V#K†$g/ò¿w†CÉ’,ï:[À€(’Éá÷}CÇ‹í"^üð"~âùæöÅË÷2YX–j­·÷ -YjùB'† h¸Ý,þ}àR¹C—í+³»ÂÝ4ËÿÜþÔ›yùÞ.R0!4š°)3\Bƒÿøvç–+aâhSÁÓFëãÞ•K(´T½.²¦¡buhóªlÐôË÷bh’ Á¸±Mr†ú »IÅbÓœ•›9S–%º>euÉ–R,‘ªë·Í?¡Ïa*m7§cãêQ²»|É£"o—ÂDŸCcžÇºÄ‘+ÁS–³XqÎÒ$¬sõ!ær¹’RF‡šVks\ãšPeuOåÇ:ŸX*™°éKdâ~‰`@åŠ ™ÏËÎ<LÀQù.¿+òj[g‡ÎÿóÒʈ‘U³Ð,5Ò¢Õ—0ˆ (0«Y—:¡®£ã°°iï'ÆÖ[AP»¿úíÿBžý‚-7wUU¸¬l룛‹Â¯ßÍùB¬x K›v®èg¸ÒEÇØ™û¬hþ_oÌUÞ<5ý`„öÇÑX"a66d+ep|’%[GÏ÷‡Âýþòí°ÍVE¿,¥ˆ²­kFÇzúœø»Òœ)S³L¦'¯Û‡ªÉ7O€DøvÒX È$ÛÎD·Š·f¸8ãaά÷1ÞäÛ2÷ÞÐí.k»Rv›°:ᄄèyç{…oî«zŸµ­Ûô¯Á­«?æ<†iÚÉ1ÇMôƒäå–-WJêèõ}‹@"y
+ ´nÉÍ€è
+PHÀkôÉñ€RÞ,§û‰=Û]ÌÓì ,RX¤¢ Ú¬ðû”yíz¢ˆ0>“€—*|BéCð§Î·^m·äÓÌåž@Ô)Þ3&þ)tÒRy„_L=º^ÖàK5` _ÎãaB R5(‰_ae~{÷7ŒÝ½¢Žëª®}0øÏöU¾vœ›Àûÿùó»W”wÀD¹r
+:e1O'‘°?dµ—»ó00¸²?ÚEF¢
+†À9 høœ7µ®Úp ¨ÅlïL'¿qWEóŸƒxÈ椞0——@Ö^N9ž§?
+žà턧Ǘ§3k%2vœÉй~<— Ÿs¥Ëe@ÚdÂó£&öAôÜ(ŸÁq‚öU!ŸÁÂL>£%¾_EÏÓÁW£|_½ 6)—Ј•šZ÷ˆR­üy‚YÀñÚ“ « Ú'(!øãƒQ–ö¦wþˆ˜¦â¨DçdÚ‹_Y;8Íž˜±‰üƒi,Ca„*Uz’­>¶*§^wt›1C?ô¶mÎëöÖy»®¼Ú›ϖŧ†HÚ/™„Ô3‰Ñ’õÌ­‘—[* ‚óœ„/}ªÖ ,
+@lûY(`‹vNgX¦ÍäNúMwoWçîðX0+ÄÎð–òaZa­ ò"wm·Pë³Nxþ·Â[SâïˆnEørŸ >¨Ý
+s
+®Ê¹C¼â€RIÌÏiÂg³íMXÒù£ÍcÉÔ`þžÖi½®öá¯Ø_Ÿ&Ò±-óÅ$ÚW^?ĘÆfe(DUôŠù SCõÓèÛ`¤»Ã%‡F³¹ ˆBë_ªÖuéÉü)êÑ\upe·0u.úúàÌ6›ÀˆyëöÍ)ÛåD?gÝ_CÿXZX­ºÍ×~s¡æÏyCY’ôQÏ5Ðl›îàÊ€Õxl]3Fõh3 bàƒÒSÂ鯯Aw¯pM§pMÔ^–´ŒBÐT>rµ
+
+ë|²O"hòæ# Öô¹=t#@ñ6ÔšÑë·»ŽxK`½«ƒqúÈ€Èmw8¹°Fç{ßm¦
+9h¸6¸tm¢!”¼†ñRÙwÛea²¢vÙ&È&¥²—™P:¨éSžÍ^âÅ̤f è¸MŠ÷ÉfrÍ>¡Û”}ùŠSÂ%í9XÐ-í…\Žk΄HAô¤ÔY2'øè‹w·/þ‰·4L
+endstream
+endobj
+838 0 obj <<
+/Type /Page
+/Contents 839 0 R
+/Resources 837 0 R
+/MediaBox [0 0 612 792]
+/Parent 832 0 R
+>> endobj
+840 0 obj <<
+/D [838 0 R /XYZ 152.694 705.06 null]
+>> endobj
+142 0 obj <<
+/D [838 0 R /XYZ 153.694 593.673 null]
+>> endobj
+146 0 obj <<
+/D [838 0 R /XYZ 153.694 367.47 null]
+>> endobj
+837 0 obj <<
+/Font << /F35 743 0 R /F8 596 0 R /F28 597 0 R /F7 744 0 R /F31 600 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+843 0 obj <<
+/Length 1726
+/Filter /FlateDecode
+>>
+stream
+xÚ­XKÛ6¾çW‚Ê@̈¤dzqÚlô\ ôÐô µ¸k5²äê‘Íb±ÿ½3$%K2ck“ž,QäÌ7ß çaq»ðïŸùö÷·Í³WïâEDdÌÅbs³ $1c‹(Œ ãáb“.þòx,–oþxõ‘Qè­’p?1zÏgʃæ®Ü–y»/ÖõÝà sd(|e¬¨Od(;áÒ!œħÜ-ü¶ÊÒu­šöàPaªþ,åAë^Ï%á~A/’ó8Ÿ ÁæA-”“Þ³sÁ(ŸøÕpBj{±\…,<’Ò«Cpn„Ùe‡G6–É¿LÔ|ž—°€„Rœf¶Lâ#¼( ©H‡TÝàÓ6Oêz–Ûv¯ŠfW–_.*ë‘G³.S­rµmÖ/Ϧ&žIÍ™  :8BQms•T½á#!¯Þ‰…},B}Â'ì¨ïÏ¥àžZ®ʼ¬¨›$Ï»—%^SÄl(!’$ŠÂ!%†uU¤CâÍÉáA
+¬Ð¸?™MM•ð‰{7ee—vÒ¡*—+À±Ui[)J ù qHnÕ©þ÷)á1x…‚WlmvI³\ñPzIÓ¨ý¡©Í˜®Á*»€ xä{Û¶ª–Y£žaÉl@¥ï'ó6»ÌŠ1ÄÞwƒp°²r
+¥Ò‰²km­2/;•¤‡¤Ù¢ŠJû>
+% üQ'q¢t¢+&Awêì¶È>û4€ä«ušZŽO&»šç¤²XØèžÛºû¢µ­îíf
+[ÍŽmÖ$MVµ©h”GDè°¤ÿ*ºX™\ Š óÕ1ö ¸ªl›t©¼f꣫” kŽ2î“àèÈ,pã(5>
+‹œ…强 ©(Š ô§©èÚ"u> …4[l”†8g: Åži9¿›†b29´b¤p¢ _8Sê³ã§]2/µ ¯.ï]ïÌl¤2ÛnÓAï‹Ò8¤æ[V˜eƒË&%ˆ[:fjÓçêû¹æM]«Ê4ËÐ%t9çˆHás‰Q‡»"u&ÀçmöÐuã–*áAŸñ÷‰iz5òn’HÛ-²&}°¾J
+=‘Àg Ðf0Âtó: é5$ø!Œd5äˆ[t
+”´è"‡óY»
+~‹²û
+Å“"œþÁÐiS‡Uä}ü´¹zm”™@´_t|Õæµ(;,¶4øhþ±Á*&ÞîF:%½ׯ}üàjþè8WJÓaàû?P½ ŽÇÙãaàÓY³ÇÕ7µm«¥~èÿ7´Ç“;Rh ðß6I„°v16:qµyöˆÀ!5
+endstream
+endobj
+842 0 obj <<
+/Type /Page
+/Contents 843 0 R
+/Resources 841 0 R
+/MediaBox [0 0 612 792]
+/Parent 832 0 R
+>> endobj
+844 0 obj <<
+/D [842 0 R /XYZ 152.694 705.06 null]
+>> endobj
+841 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R /F28 597 0 R /F43 827 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+847 0 obj <<
+/Length 1502
+/Filter /FlateDecode
+>>
+stream
+xÚXKoã6¾ï¯ð¥¨ ÔZ’z·—EѤM¶
+t{`$ÚV#‹†D%»ä¿wHŽdI¡7Z_Ì×pf8oF&«ýŠ¬~}Gpüyûîým²Šý, ÒÕv·¢aæ'Œ­â(ñY­¶Åê/$lýïö÷÷·°‘úY‡š”…>¡°14i~¸—²¼VM'ôzÏ«J|þÐ>ÙÛc9¼½¡ÄÏ¢¬—|“œ¯Z#èÔˆSSÖªUK¤¥½´p‘4~:b§g­PÝéÃAʇçï?)r ?déDHñÈëÜ<F‰Oê©,Ôa£W¹¬ºcÝŠ“C ²™ Œ ¤øÑd¹XLò¦ñ^–)u0£¡eéW™!ÉŒYö&3gÍ¢5 « ®³ØJ"¾žnXä§Yl¹d>ói²ÞP¯áû½(î×›€yR)y„Yx²Ñcè}$4êÚÃNÇ4 iÈÅ·ÆÙ‹6iä*ÑÔÒìü0«‰|͈G:zr@£lb½œ÷rx’Wñ¶µKyR¥¬[k6¾Ÿ€1‚á>Z`xØTVù”ö¤¼.ìôC²¤§ÙU`¯KÜ¢ÌOoB‰æXÖFýØ{:uU^póH³/RðÓQH!på>’ˆœø^ÀHÁE óx#ìÄ>ÍÎÁ},\ ÆÅ0ö.žSùëMïO©›:pegOk–x¸[H;Ö[Q‰çiÄŽw•2 ¨=#¼XüTAÐóB¯líN!µqôì~ j}¶§Æ6zó?Ù55¯ì¢íî[e¨*á»Ð
+uFñ6Õf
+»‚ (Êzo=g%íhEØE׊bz ¾ì™#ÍeT@cM½»ÝB
+F¢â+€ìmwšÅÃràO®~gü-± A¬õ^rca†‡oKIâ3ó Yw‰|çÃiL2ôÒ]€
+ß;21Èü˜fcÓ¼–6Qtî@§‰èsزí¦;mD=»[â岶£Ðí0F¯‰næÝ©)iwÂeÔ ª'™É!Ó–!J–uQ>–X¡³MWx¹CF¼Rº±ÕÓRµöl|dsäJ!:‡ÏsÙèd®>¯áÛãkÉ3éâÒëÂõ-' Á
+¼²0×Lv®™lT3™³f²¡f²¾ÀéÉξ^WB½,,ÚçÝQXdDvÚ‹ºœÉ®BJ耩k^vgP JÏUš$ ˆgµ“m[Þk/é-£‘žìFþÐk¹³#”;æÊx^ÏÏ›ƒF•ùÀN"7ž—U©¸šŠêL}–Í÷­ë‹
+endstream
+endobj
+846 0 obj <<
+/Type /Page
+/Contents 847 0 R
+/Resources 845 0 R
+/MediaBox [0 0 612 792]
+/Parent 832 0 R
+>> endobj
+848 0 obj <<
+/D [846 0 R /XYZ 152.694 705.06 null]
+>> endobj
+150 0 obj <<
+/D [846 0 R /XYZ 153.694 564.59 null]
+>> endobj
+154 0 obj <<
+/D [846 0 R /XYZ 153.694 428.897 null]
+>> endobj
+158 0 obj <<
+/D [846 0 R /XYZ 153.694 299.681 null]
+>> endobj
+845 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F31 600 0 R /F8 596 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+852 0 obj <<
+/Length 1500
+/Filter /FlateDecode
+>>
+stream
+xÚ½XK£F¾Ï¯°"EÂÒ¸·ß@NÖfw¢ä²ß²9`Ó¶É`ð
+}hg †t2#ðä¾5‘Sf‚ÍxCrã ŽD‚§Ìš¯„ñh¿ÕZJUöómž?Ðá¶ÎF¡k%|HIˆ–m%öä+pãã¼|>ê©ù2ÏSeUqPúÝX“/ó2ù®`Õéx<†Þ;†¸ik-Œ‘8´IýÉŒ
+„Ò® EC¸ˆÀÞ§"Zk÷
+OèéýütñY¿Ÿ¿!‚ÑyÐŽ3GŒ@Ï}üªŠ*Ò¡à˜xûÈ°àãT/ÚèðëÙ]¤'¿ÕKZ/:š6üÀ­vJGÞ<5Rô`•F¥”ïͺK¬R
+íBº
+ÚöJOÏ¥x†™Ô8æ…‘z:D:²îDÚ­ÈíóÌ´ð’é&¼3n¾0¬ ŸžÛðȺ‘?«™Í‚âRt³¦Õ7)´A÷¶kÑ–}~æFz\€C¦ˆ0x’Ÿ®%é%£×p¼Ÿºƒ>xÙ5êWÂt¼Êâ/{¨-¢aÒÀúÏ*/ÿXòt}f0¤ÍÉè!&Fis¾‚øÖºæûB­“CQ-“U£ÝVß+o:òµ^îÂwþÍà¿VÃ8àˆŸ³r ¨`H÷&µêðûJW®TkW®ÌØd& ½IN*êä„Q;9áÕ&'å69a✜ðb
+æ@rÂ'œIfs1Àˆ“^*º •£ó+•_ÝÒQ{j¸~µÒä4>ÃQ縨Ô9²©§®„œ ˆEýeðq·FÀ7ð›³Gº&PƒúaMÔg š¨O»<¯',”ô2bsûÔ_Vùn'Ä ËlÈíDƒ,=éåÈ<P‰H@mÀ™ÎXñ t§>·lûÂH‡+1\eU|
+endstream
+endobj
+851 0 obj <<
+/Type /Page
+/Contents 852 0 R
+/Resources 850 0 R
+/MediaBox [0 0 612 792]
+/Parent 832 0 R
+>> endobj
+853 0 obj <<
+/D [851 0 R /XYZ 152.694 705.06 null]
+>> endobj
+162 0 obj <<
+/D [851 0 R /XYZ 153.694 606.682 null]
+>> endobj
+166 0 obj <<
+/D [851 0 R /XYZ 153.694 459.781 null]
+>> endobj
+170 0 obj <<
+/D [851 0 R /XYZ 153.694 281.748 null]
+>> endobj
+850 0 obj <<
+/Font << /F8 596 0 R /F7 744 0 R /F35 743 0 R /F31 600 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+856 0 obj <<
+/Length 1904
+/Filter /FlateDecode
+>>
+stream
+xÚ¥XÝoã6ß¿Â@Q@>ÔŒHŠ¢t} í{@ï€k
+´}PlÚÑU–\IÞlìÿ~3œ¡-ÙrÖIŸÄÎ÷CųÍ,žýô.æïû»w7²Y.òT¥³»õL-Ò<™¥Æ
+¥Íìn5û-º{pó…É’hÙÌ*‹V<튞F+÷{,“Úuó?îþuóAŽŒ­°Z<ØïR'[ÖûmwÛöŸ‰aHŸfÂdò¢^Mœ©¤ÈÒ|êÈ¢-îËåù©Y"”Õ‡Sw;o‰+ÚŽ,(kúþâ– äžÁ¶‰Ig )EnØ}ÙÔ¸ ŒgrÖ¢qðߟÞÍ~[h­#™ˆ„)ÈÇÀ%F ¯ýÞ|€@d`Iš % E(e@ÁXäJ’^ëÊýU¤ŒÍg6ÿÃÇ_þñŸóE’™hbZá< Ïò›Åºw-­Ûn ¶i߉ù"eô‘ˆê†(ª¦Þµ‰öõʵ]Ñó{ÈùDæëŠrE£þ¡ìÄD˜cv~:0R,«æ<¼&Ò–í+!¨‹ºéqDÍwÅÕøsnÀ´ûŽV»†¾%/‹š7Êí®z¢ñ=åËT~§RØl”ße½Û÷çJj)ô‘ ¶³TäVg>´*±Âh°Z‹<±D—$–(GY
+4–mž$c¶»oŽ H9¶–ýU€RÞ(w˜‘ÍaÓ»Î"wDÄQ¢ÕOsQµç‚ÄUS» ›nÜE9çõ£c%¤<ÔDÕÞ÷eu^:ÆVÄ©[yr¼äÔ(Wã°O”3 3}VλérN…’zºœA]®£!ú-*1¤iˆâÞç‚£IçzÚ%?Â
+^æ~¦~Ï w˜<±Õ€UѲ0
+Û˜A`¢˜È¨yUp"$¤:
+ÀI(\ó ;8ú^Ææz¤Jß È î/@êÛt±¯B³Ia¯B4ÈöËþ¾ëçZEO> Ó¡Wô°µè†Û¯)×,Ê[yòdé{ÏÛ®Y–®ºú7³ý¯Ù·uQ½Pç,wÈÿû™4åì‡AÇ8„æV›ö;꧰‰~l"/Ð?BÈú~³èh\TP­+ææ׫iê;cè|S»Ÿ†É³fì‡itf˜”ýT#þ>2ü–õ†[5,ÂOsÿiËÕÊÕ_+B.»*á ?Ú7òòOÀ؇0¿ôÐLȹíÝvW<#éÇÝ…Kxµ%ñA _–¤ÌˆãÇ»wÿéÌ]ã
+endstream
+endobj
+855 0 obj <<
+/Type /Page
+/Contents 856 0 R
+/Resources 854 0 R
+/MediaBox [0 0 612 792]
+/Parent 858 0 R
+/Annots [ 849 0 R ]
+>> endobj
+849 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [173.176 644.284 192.88 652.93]
+/A << /S /GoTo /D (subsection.14.4) >>
+>> endobj
+857 0 obj <<
+/D [855 0 R /XYZ 152.694 705.06 null]
+>> endobj
+174 0 obj <<
+/D [855 0 R /XYZ 153.694 561.85 null]
+>> endobj
+178 0 obj <<
+/D [855 0 R /XYZ 153.694 315.074 null]
+>> endobj
+182 0 obj <<
+/D [855 0 R /XYZ 153.694 188.099 null]
+>> endobj
+854 0 obj <<
+/Font << /F8 596 0 R /F28 597 0 R /F35 743 0 R /F7 744 0 R /F31 600 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+861 0 obj <<
+/Length 1797
+/Filter /FlateDecode
+>>
+stream
+xÚ­XmoœFþž_qRT‰“r„}–´ªì&i›*M¢úªFJóÃÚ&æà
+\lëäÿÞ™…ãî°ï%ùÄ2Ìî<ó>‹7ºy£ßžxöùËôÉó_ÃQàF¡P£éňÉÈ 9~èrá¦éè“#oüyúÇó_ Ü(¤a\ápŒáù— y’]Ü.ŠT_d…N ¡.“L7wËh_ÒÄîŸ0Ïü¨•Ä$qézLô%%y\×'YqQ.Ït®“&+.ÇŸûŽ•H/C£góø~=—¨ß A®›¾†+I»ätšŠ6½?Ànr/Ôè¡å
+k_ƒûå°¸aðþ8¡³í¥›¸*–/Ëâ"Ïvû駟û˜~¤ÏEÙØMÆ×:ö¦¿3Øi–ûý•w{l‡©¡Ã¤ëGêñÈeã°hçahVÈLã–«¸¸Ô'_ÊEUÄùS¶Ü[N¸_°rȣ˧l«„ìÈBc•Ù0mš‡ü •xx¡ét+ïðBÊïYhBÿèBc58¨Ð„Á·šüd ýúÍ…& ¿c¡ Õw,4a´w¡Q£8x€Ò,|pgÄö»®ôxÂ#é\Å)-Îá¡­ zm®,ƒq-Ëy“•…}©t“k {¹±íôÙK«wå¾i¿Ç ­â<§E]ÉØ%2mèajW$%<ØÁÎ0%@B8±yJGÿ·À @ÒU"°gDj®²šV }L5½Y:YÑ2Ú•®çd ˆ½¯^“Qyߪœ…n¤¢ÖðnÕÜn›b‚ËU|{ j€kÈz|<†4f"R)«hä1ƒò¾ç¼ã'FO%3PEpc³1<ï*œò‚ž§3]ï6 ©\õƒÀX’reëu¤‘×Ç̱ï+Ç«•kÖ“=œ@=[ùíxGTƒX-Ncѧߕ~ú{*tbø¾ÙŒOîy
+\
+Ÿd›oE~‡+@qvJ¤"t‘[çF|O³º©²ó(Ø
+:PVé“yœ\Ç—º^“µžùPÊ\_²V¿)µKîÌ+ªS æ·N±UC]'ðA|ß:Éß˸Ê®âÄI²˜™‚
+zã·¯™• Qšg5ŠÉDo~6˜Ìü « SO9_\¥=./ Kì+Ò Â&£ÐåÑF^ádÅ[»(¬?ó¼š>ÃòÀ
+öŒŸn<IÊÙ
+^{wBXkYFËÚöIº†ŠáÄ ]÷dÌ)þhâ”x|3ñ|J<8ñ,ù㋵66 )MÁ\)lGäÁ×ëé“ÿÎ{²¦
+endstream
+endobj
+860 0 obj <<
+/Type /Page
+/Contents 861 0 R
+/Resources 859 0 R
+/MediaBox [0 0 612 792]
+/Parent 858 0 R
+>> endobj
+862 0 obj <<
+/D [860 0 R /XYZ 152.694 705.06 null]
+>> endobj
+186 0 obj <<
+/D [860 0 R /XYZ 153.694 397.273 null]
+>> endobj
+859 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R /F28 597 0 R /F31 600 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+865 0 obj <<
+/Length 1485
+/Filter /FlateDecode
+>>
+stream
+xÚ½XIÛ6¾çWè@b).¢zrÚÌ-¤(\4@’ƒÆ¢g„È’*ѳ`0ÿ½‹l˖㥓žL==¾õ{)ãà&ÀÁ¯¯ð‘¿?O_]\QH”Á‚é< œ"‘°@ðEðfšŸÃ×_ei]gjnV­ÒËzr[Ußž^¾NSc‚Q¯>óˆ‡FU=Ôi™¥s­šž¦ÜÑ,”6?³¶Lʉ?¤ßÔ_u­šYÚªA›ö±Ìü¦áP"‚q8dzªôùö¥–›ÚûêþG¦6dþˆÔž÷´„+Øc#Êâ`NDœNºhçU©ÛžêÅ• @W$ ºü6ì6Lo!6Êd8+Ò¶5Ë8¬jW¥1qqmn9Š
+
+ 1.ªÁÂë×#6*]Œ¢8¼.¼ñYUŽmùÆ*Ãa¤Æ„@…‹F§y©2P¥4Lr¤ÅŒv±›Ž-[U§³oézêR~ÞÍ™ŠÈº8­Nµê¢EN=Jb*ú˜pŽdLaAQý°»˜LœjŸâI²Ò;íjÔGÛ¨uTŽ
+¶¹Ý=(±ø‰‚nlúñdc±1éÜ<ÑŸêŸeÞ¨?¶ ó<‚7¼ٗꪈÏ{ó‘ÛÆ¢ƒÆvëVVGTnÇ=ªrßô*g$µ¨õãÑEb/Y$~T‘Ö‡L£&kôÄ@{B¥Ä»d“lAòùòf.Ðöü´+ÎÙ™în,‰,àÞó9Ãq á‰6Z‘_û¸¸þÏF¼õhV®i–ûiV &øÍvž¶`ÄbÙgYÙ±,,<ËÊËJϲ2q,k7
+>è0Lòá¸Äž¸ø qYˆ{ô«lÙ¨ÖÉoSƒ 'I}Äis [rݤÍc÷&óÆÀ|©æ’…j½1°ª›|¶ú¤ˆCWú#c1Ȇ¹Lu·Rnµ°Ñø‡k‡G÷
+<æÐK'2™Ò1â³eáåºrrU¶KψæÑ5Ê(Xh…¦1T`Dír±p
+endstream
+endobj
+864 0 obj <<
+/Type /Page
+/Contents 865 0 R
+/Resources 863 0 R
+/MediaBox [0 0 612 792]
+/Parent 858 0 R
+>> endobj
+866 0 obj <<
+/D [864 0 R /XYZ 152.694 705.06 null]
+>> endobj
+863 0 obj <<
+/Font << /F35 743 0 R /F8 596 0 R /F28 597 0 R /F7 744 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+869 0 obj <<
+/Length 1004
+/Filter /FlateDecode
+>>
+stream
+xÚ­XKoÛ8¾çW
+È@Ãð¡çMíb»@ÑêCÛ؈¶…Ø’–’R†ÿ{‡"åØ– QnN>4ß<ø ‡ÆÎÒÁÎ?7Øü¾ŸßÜ
+ØO±Ìò¥,šÒ:‘UK~R±l;p[é>/»® Ï ’7T'hO @Š’/8jÒqH ôf è$w,hõž0T.X„LY ÛØ_\惚Ígª‡jGQäœû·hfwpŸº+þ$´dZ¬V6n½Õ£î¦l·­UUÎ7â°Ú…Uõ³Z†®[ï¸}«†ŸEUñ匸â½üqÀ cÜ™lÔŸM­¨WY¥¥6`Z4¯©ê’ýÞ ib¢²Ž^|P€ã>teÒóF}ø²¼2±lʵü\4Æ
+M¡VÌòªæk0 <AÖôGÚÞþpcÄÙ[S eûF×¥½½2»6ú¤ÚéãW¼I|2å&éöÅßcrÏ{ÍŠ°ß}þªµ_K ÁëØÔȈ, ´…4„hú(Š#Š Ó½#ÄÇîõzÍgŒº5\838\žû®W¹¬Ô€¹<Oµ0_‰Lš ß1 ÖY{Ü+ ¡bÀ‹LDþ2Ôgž[”ú0wÑÒfKmŒ jŽ7@hcF;Vf(ü†ŠÖ»™Ôzø‰5z·z-/”Ú_z6°ÓË…Ñ”™G=·@6Í?]ëz»E^£´Þö (
+!¿&«-ñÿ¤9ÇÇ@®A¸=½Gwþ‡MÏo~ ?M
+endstream
+endobj
+868 0 obj <<
+/Type /Page
+/Contents 869 0 R
+/Resources 867 0 R
+/MediaBox [0 0 612 792]
+/Parent 858 0 R
+>> endobj
+870 0 obj <<
+/D [868 0 R /XYZ 152.694 705.06 null]
+>> endobj
+190 0 obj <<
+/D [868 0 R /XYZ 153.694 202.946 null]
+>> endobj
+867 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F31 600 0 R /F8 596 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+873 0 obj <<
+/Length 2030
+/Filter /FlateDecode
+>>
+stream
+xÚÍYm‹ãFþ¾¿Â„ÈpîU¿ªE¾ì&·{\'²ù Ûm[Œ¬6’<Þa˜ÿž*UK~ÍX»9Â}·úµºê©§ªzâÉfOþý&¿ßÏß¼ý(ù$e©f2_O¸–̤jbt„ԓùjò{”2Á„Î8×q4ŸJ=ì§3øqµk ae´h{±­¢ÿ~øu>ýcþã„K豓,çŠöúÐŽ§zrÖýv÷rÝú¡õÄ‚ÐF¡Ð3K¦d:™qˤMiËO\ªÅCåî÷ù]}¼8àíG{vicO ´ëæ[÷ˆMô)æ:ÛືÅù|iYbD7àœ«í5³<é¦×ù¦Ìakåj<&‰ší”GYÓ}„ÃW~:6Zv®œB#Œ×[(V4eÑÎpYECYIÝùn_åçkO¸7*ÆcÅt‚êâ,ÕÁÈd’n‰k¤„¹­DREyè9âŽYMk_í²¦q+[àØC·2“†®
+¿ˆÑÏ}Sû,Œï‹léЫpu­³¼8TîU½¦Í4e¥BÖ<#M€ÈÒ½[¹µ«Š¼n^çΰGPÎ ð tÜÕ0Ü{⟉45ú"¶K]9º²,6²;¦h>oª|õÜÏe
+¦êfí³¦wS­£lãı§`#åæKôÔ-º¯ ÇcÇ}¾:À‹¼
+=t¾ûܸ²†€ºM’FÿYSé1T(`¥Œ:¶®Ø¯}ì\]ƒ⇈º«ô¹
+F$ì€ÏvBë|ØQøMØ4/Wù2kòrB$ðÖ¥Š¶÷:R`jüYæâ«»ž*(WaÆ6Ĭ¦f ¡ŽPí­Ð¥º¡¾"tu`]Ï øåf¯#˜~Iû²8¥¨oI"3J¢g¾Ü&3(YÒDµáL£@ýÎë¢ñ÷ëÁÕðç@Ýüº¹{%è©„I•Lž§­Úú¦dÒ˜¿Á7ñ|â5 Ñ‚¾ÛD£[å1Ôiu”µüÂ,'å]É«™:¥Þ»¬£c8²lé‘>]fŠGg¡¯-* ±óUP[ÏøÑz.þö‹µŒó«Jr†ê;òß"ïèœGǼ^½öUW“ Ý6ʼă–vY~¢øžÈCüz(]I™Qövºb˜á}!9Ä8BX&°„¾äœd”KmÀyÎløxÓem·¿ÚÖX_¨«È0çu@kxsZrÅéÀæB±ø¤‰¹
+Ȃ
+‘ò*nkíkm çV3¡’/‰3åáÏ%VŒáu*¼.ù}"ðqýÊeEf]½Ýõ倊jç:á饲{ ó¢èJxά¾z&­]A¤¢}PmS hvå4ZÑEô4±¬€!ý¼6ÌÈiq%+¼¬ Bˆ1 öôÐyõö÷$ ꬜r–$öò©ñ€/•ƒ…ë6¨¯rHÊá±TÐ{ ¯¿TξTEñ«@“~EÙræPOãCN 9WEÙ
+ËœqÓÓø´3Q_e™ç¬>Ê0úo…ùK§ÝBÁà‘ɨ#›
+R˜àãcwþâð~IRÜà¿6€Xe 1>«H/V|˜¿ùFLu
+endstream
+endobj
+872 0 obj <<
+/Type /Page
+/Contents 873 0 R
+/Resources 871 0 R
+/MediaBox [0 0 612 792]
+/Parent 858 0 R
+>> endobj
+874 0 obj <<
+/D [872 0 R /XYZ 152.694 705.06 null]
+>> endobj
+194 0 obj <<
+/D [872 0 R /XYZ 153.694 667.198 null]
+>> endobj
+198 0 obj <<
+/D [872 0 R /XYZ 153.694 563.619 null]
+>> endobj
+871 0 obj <<
+/Font << /F31 600 0 R /F35 743 0 R /F8 596 0 R /F28 597 0 R /F7 744 0 R /F30 599 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+877 0 obj <<
+/Length 2059
+/Filter /FlateDecode
+>>
+stream
+xÚ­XYã¸~Ÿ_á—
+'ÜÙŠ§;Ú8¢mÓnôpô00U«$
+³(KYß‘’@…Dy°í«ŠF^¡ÜKÉógt?QWÊÝÒ¸ìÜ9¿Yè­ê+.W’óàÇ-­Â…MYïÎh‡;çÁ}iö4Rô¹[Ê$Pm©Ö•u
+v¢{¥ëÙÄ,s™Ú¾®IL¶K€)á
+¡•ûÒÞF‡¯v‡VtGû#}­5á[XŠûÚŸ´úÁhuò LHÇaë)AK ÁOC<˜ÉmºÍ¦©úC F± þ³/+<%Áôiõ¦9t]ÐTíTYw†&ECŽdÐ5Öè*ëØm|¶»=¬‚âµí•ãÓÁmÌîÝN3gvº}Ÿ‚ Þ»!%EºHÂ<3› 1 9°€¯H‰…Ls"œ¤2‰Cú`¯7•j5AÈ—VívºØ6 H}ú‚û×릩´ª·ªêôEÒ?ýiF'dÅ"¸‘ƒ ™E_¡NÝ<¯iûçõ™Â'j’ðt±âi˜y
+M(×EŒ-ù¸‡1õLŽt„ËzrÈ{sì͇$ÚoT]{Y³qGi±dˆ;¼~sq1h瓈ƒzÌãPH1M¡6m°ùàPFt§)0qeŠ‰ho‚»Ï4 ÔÀ‘ËúGw|è{ê{-qCßòp¬ôÁq÷|0=q´íë :BU¥A‚ÇeƒÖ«TD”ÄV­\ˆiót€Àê¨ÅñíŒDM[·xPÄ&JLûGJ» ÌÁëØ ã‹ÚÅS„À¬4îtAÂ6½¿´²¡6ƒbŸ#}o˸†",9orwwîoÔ¥ZP7kñ6IîG·.{2jdgj.Çñ³êÐArîg^9,Œ¢¡6·ú}Ùb kk£KÖ Y¿­2LOEíÓG€÷«Fº j ˆ±¢Xà³4›ÄšBµE¡“A+ oºVCÁÒh–,9E3¸Þ*è2¢ Ûéà.¤ôÁ +Ï9\ì!‚¨ˆ”°ÚÑ&Õ1<ÚjE(R¹Ëg€þª´Z“‹6šW†ø9èÍž¯ #¬|úò,Êgç(/æDA¯ɱ(u<‚Iç˜éSù&¦ }×]M"³ošÛy½gE$3"¸
+endstream
+endobj
+876 0 obj <<
+/Type /Page
+/Contents 877 0 R
+/Resources 875 0 R
+/MediaBox [0 0 612 792]
+/Parent 858 0 R
+>> endobj
+878 0 obj <<
+/D [876 0 R /XYZ 152.694 705.06 null]
+>> endobj
+202 0 obj <<
+/D [876 0 R /XYZ 153.694 667.198 null]
+>> endobj
+206 0 obj <<
+/D [876 0 R /XYZ 153.694 550.185 null]
+>> endobj
+210 0 obj <<
+/D [876 0 R /XYZ 153.694 503.963 null]
+>> endobj
+875 0 obj <<
+/Font << /F30 599 0 R /F35 743 0 R /F8 596 0 R /F28 597 0 R /F7 744 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+881 0 obj <<
+/Length 1481
+/Filter /FlateDecode
+>>
+stream
+xÚÍX[›F~ϯ@‰ªâªL˜ 3©Ò¦m¶J^R)~kúÀÂx—† pê­åÿÞ3À³kÜlš<1Ìœ9ç;·ï`‡Þµz¿= íóçå“ç—4ô0FIo¹òpDO˜Ç#¼eîýá'H,ŒIäÿ*Wé¦ì‘ÿvÝuõ£yyWÃûY!»<ï óíÑ›zÓTiißÒ*7‹µ¾P•’ïÚâ¹øsùæùeì%(á„+8¡àÑ81@–7E»H"ülAbÿ&­®¥yÿ»(K³ªêÎ,®™~0Ë·ï^šE(áb¶¹••ÒÐYuWz[f馵
+»›Ôêiíå<ïÌn¤í–¯6Eiï€SFK­|Ònè7ù±“[†ÔÙ!Ó'd&òbˆg*f/ !J1zÞcÊ.ÖiÓÊ‹¬LÛö¢Öi/ÚZ¡½sê÷($xŒè^M#ãÜ`La‰7Ô³¼ð1.üu£¢y’ù¦±‰%ÃÛ<A,ä v¶'ëG”ö÷õÕÖ˜î î[h•¹•0Y ‰ |ŠN×#Ì‹è‹®©mêk€FbU7fOÙ<ö:©åÐÉ{b…âàZGþëÎê!•ÅUƒ.cFœÇC[¿7u&Ûö­ ÑE#^Û?XKUïQÚÛîL´hHP ¥7ŠVš)²u
+Jb<Ò—m`–[qDÑ}Šæ±6‚GÚäÖ…mœ›kGò
+.ÅX!´,C£¶RóÈjð¬]k««¼¨®]ÕÊ xrð¢é¶ÇŽ†>ÄU¹RJEì õ pª3ö kËž¶ ÂV…Â6˜fV¡C'PRu£0–wÆ,BÄb:)<=F8õs©PTJ-'ÚaØ\—i&oê2—Ù°M«–‡xƒ¸n`µipÁ¢=ÆrÝzÙ´ý­Moý}…ê0¶‡`Ø]÷¨06Ö‡À-|¦`m½iŠZ_¥Ìª -tX >Œ„gj¡>5ë[è¹ô‡¦×Ú1 cã.¦
+‘Ñ©†Ø½t#ANÓ±ƒ‡q‚¨GDLmL%ÇS÷{+ñ‰¡©É…­wŠÂi½§‡n¢=9©µ²ë·\n Š0Ž†ne­›0(,óƘûXä2·ä!<ŽAc3Œ10‚¢B
+qÍ(áFr4·!3Q’ ärujÜí¾sÙ4š _
+¾é×»“°L°åBL‚]¬ 1Y¦ÛAQ|"çí…Ûƒ*7b»½µ9BÇÃÐ…NõêÜëÕeQÊW[Èe»so7WmwWÊ‹uÝvh´£²ì¤ÍLð`J#ñÑÊô
+endstream
+endobj
+880 0 obj <<
+/Type /Page
+/Contents 881 0 R
+/Resources 879 0 R
+/MediaBox [0 0 612 792]
+/Parent 883 0 R
+>> endobj
+882 0 obj <<
+/D [880 0 R /XYZ 152.694 705.06 null]
+>> endobj
+214 0 obj <<
+/D [880 0 R /XYZ 153.694 667.198 null]
+>> endobj
+879 0 obj <<
+/Font << /F30 599 0 R /F8 596 0 R /F35 743 0 R /F28 597 0 R /F21 593 0 R /F7 744 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+886 0 obj <<
+/Length 1939
+/Filter /FlateDecode
+>>
+stream
+xÚ­YÝ㸠ß¿"/8‹‰Ö²å¯û(f·Ý9l±h \8àîœX™¸ãØåìÌ4Èÿ^R”<v¢$Û>LR$EþHQr?ñ'?¿ñÍßó7ïî’I̲$L'óÕ„‹Œ%A0‰£„a4™“ß½8 ¦Îÿþî)ËâXhÑŒ…~ j´Ìá;*›‘÷YeVYèR&X”¥¯+#R–Ze⬲?x(
+¹Â?·Û¼UòvYåJÝ6Û®ljµ?k«w<:4"­±Nn¶ùžì¢©ªT}.wm[çÉú/ùÔ®a|™'OÛ¼.òU'[mhÕ´ò_Ñ|ÝýSûxÄÿþèû'üžrΦ#Ûì/w;q¸æóð5·ËUÝt­¬ò'ü\*ŒÜt‘W¨[÷ ê‚Äœ¾‹G¾¥.ßR(†¡k y_Ö÷m³Ûºôjé#µ™Cm2ŒðyÕ¡¦Æ±má_dâû´«´e- BkSÖ*ÿãŸÛwÙJÂ0µuñµèá#µÁÙ#®p2¼ÌÉ1þ¬Ï–©ôcÀöñ;bî¡rÆÎ’EÂ6:!ÎGâò@Dg ñpyéˆø’Òù´º++ùñ š Ú;®v Õ=W£:6¢`{t;ä¨9‘\„û£¬-×y}/oU³,e÷|œ¹‡¯vú-îT²»º1hlAcîž/ö-;—ºÃþpiÜ#ÿ<ª.UÄÿ#G\<r¤“ $‚% yªRÃH¤ÅækHFfžž!`)| Ú ÷'Œ[ ëç­l;@ò©¡Èg"êƒ$ë|QIEv:m¬,veÕÍÊšÈëizÏÛ)$Â3ZÉ­|›/ʪìJ©np#÷×å¥×hG0æã±8DÈLxKhH˲@S¾ï=–ÝšVݺQ†Ø¬'Ì òqf_îT×lf‹rá8b
+—ÿ@h®ÝX„54qaœý8 È¿ÁÖŒ|À‚„N‹5yƒé÷±jZã`S›EÕès6xLìåxž6s"tÆ“„Eñø2aÊUP4Ù,³Ç@o)·˜¿ÇªŸyz<Ð $/e·ô°òFW•2
+¶mCY¢ À–Èý»!¯ˆªÇñáÅœ LorœF·q|µ¤£¦@ŸeÝ_:_Á±¦¾D
+O`cÃÐì—3
+‚$èÉ5ÿ$ý µ3~Åë#ý&CðØ·W½r²ëßYoõË…ÖðtýF928ä° xÌY
+endstream
+endobj
+885 0 obj <<
+/Type /Page
+/Contents 886 0 R
+/Resources 884 0 R
+/MediaBox [0 0 612 792]
+/Parent 883 0 R
+>> endobj
+887 0 obj <<
+/D [885 0 R /XYZ 152.694 705.06 null]
+>> endobj
+884 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R /F28 597 0 R /F43 827 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+890 0 obj <<
+/Length 1464
+/Filter /FlateDecode
+>>
+stream
+xÚ½X]oÛ6}ï¯P“šEJ¤°wkºµ+°ÀuJD7ÚdIå$]ÿ¾K^J–mu‘Œ /6¿ïå!yî¹
+¼/^àýô"pÿ?¬_¼y/½„$q{ëG#Fâ„{q$HÈ"oyúoKƘ¯«Å2”þU®Úü5­Ü×»KõBá¸mºv3?SŸÊKו·gUfÆm‰­UÝæU©_cí&O­?¾y CJ(ÀkëÒgÊø;uU¤údgã”á ÁHöˆà-C‘–ÄÞ’R’DýþÀ™¬ÇÂo¯T™™BìW›®'×Ø’9 v[U¦‚7ÚnBDþ­iw+Õ¯´>0A
+ݱB¹•v:/¿Œ
+)'·>Þ˜ŸêŸÎã'ÙÉŽ¼hJ5™’Ä£'4FI•ÿ£$y|ä™”älÍ ¤ä\Jê{%Ma¡Î5Ìb¡në³LÐ'a™î‚ˆð–T§žš`ç-°ÊªUGO“ñçÚÕl’¾1<äæîRLga1…ÆbaϾÓø⃉g6ïóB]ÜåºÕðX&„°û‹ó•.Ó­Âwl|Ź 먟aß ˜“§
+vïF„·ä(¼M±O%Fô2 {‹4¨ÛS›!øÒnÌë‘eb"öY¥SYBÂÁ5ËjbÉ^ÃÓpt9NïY0µQ6oëBu8XY.vw™”½ø}mc-¥’L
+>üh®þò­ÖªÁ-"ÿÓP¢ ™8€Õ$aÝ*† £ Ï¤y|¨Ûô²Èõ5vY5…þ‰ØÊ©N2Íöã\¤Ú§ý¦ÕI&à_‘˜ˆ[i·¤Éômœ,k¢Bð ™
+endstream
+endobj
+889 0 obj <<
+/Type /Page
+/Contents 890 0 R
+/Resources 888 0 R
+/MediaBox [0 0 612 792]
+/Parent 883 0 R
+>> endobj
+891 0 obj <<
+/D [889 0 R /XYZ 152.694 705.06 null]
+>> endobj
+218 0 obj <<
+/D [889 0 R /XYZ 153.694 191.24 null]
+>> endobj
+888 0 obj <<
+/Font << /F8 596 0 R /F28 597 0 R /F7 744 0 R /F35 743 0 R /F30 599 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+894 0 obj <<
+/Length 1050
+/Filter /FlateDecode
+>>
+stream
+xÚÍXMoã6½çWX°bø%ŠºFѦE¢=xOÝd‹²…È’*ÉÝM ÿ÷’"啽܄tb)*3ïq8ó82 6 ~ºƒfü~y÷ðH`€( ”á`™("€%4`Q 0‰‚eü1Cp"„£Ùïm= š­E¶oE'çq4ûA4â¨2QÍå¤×ëïõr]éÇßš¾¨«nþçò—‡G$ a˜)H„Ž‘ûY´bR‚gç8ž™yQÍ1Ÿõ
+_ŽÙ~-´#<õÄ#@9–Gë2í:Ѭÿô%(“ˆÿš‰ѪРÀ¼nõ¤ßȬI7†L×+2Ï¥èô›~›öúM3ÐuSŽ{(ÊR¡!¢1 ˜È Id"+>‹µ
+šrUëq¥—Õ¥«Rœ¿Þw(·§£ü¯£Ìƒ(à2<Œªð„Œ3I–ÂcMö"´é[‘fEµé¬øA˜
+òúàpqïOòDƒ„«n%œ›#!ôÌâÇåÝ¿¾ï«œ
+endstream
+endobj
+893 0 obj <<
+/Type /Page
+/Contents 894 0 R
+/Resources 892 0 R
+/MediaBox [0 0 612 792]
+/Parent 883 0 R
+>> endobj
+895 0 obj <<
+/D [893 0 R /XYZ 152.694 705.06 null]
+>> endobj
+222 0 obj <<
+/D [893 0 R /XYZ 153.694 667.198 null]
+>> endobj
+892 0 obj <<
+/Font << /F30 599 0 R /F8 596 0 R /F28 597 0 R /F35 743 0 R /F7 744 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+899 0 obj <<
+/Length 1481
+/Filter /FlateDecode
+>>
+stream
+xÚµX[£6~Ÿ_iU‰H ÁséCE[uªÞV•š>uúà€“Ð
+Á&fEuX®&Æ×òüSxQÿWUÂs¹;ˆcRh*Ä2yR²”>^Η1„` Ño!:cᬈïÞ¡QvšèJcòšE/“ç¾Êê<™7Â̶Mû/kH®˜ù¯2“¾ˆÙN>D½m\–ÑòÆ<OŒ™
+ãá©o ù;Ö[Åg˜³´Sø3c´ƒ‰Þ4FüªU/ÓMh¿A`µÉèŒ%#rL¼Ì¬!Y!bj™‘W™õ¢ôÀhœäû0*•ë\ºM…oA#&É>ç%S[ñ"
+ *á…;E!¢dE™äÕùEE.Ëm옲GD„<ŽwœWJÍÃ.I›¨-è^©ù¡¦±Šô‹ŽIÓŠµ”£Z7‚® ù³ ±,ÿÿ1sÍ$câ<]
+£©Ô°JŸ–¾™†`‰€<.ƒ9“ó(>?¸c} ¦m¹}AÉ.„~ËÄiŒ¯¦¾â;­[mÙ‚¿äu1µ_¸øÖÌ9Ûiü‘æzv‹Âv”È`R¿5Ž^ÏÝ®=IN’e,Nš™äT&zÒú‘×z¤„ù^®rvÒÞùüõ`ºœÏÝ‹C¡öêw¹=4?CéL23Ô‹IFnÃÏ%“¢b—LwrÛT`â*¥HGþ˜‹Š¦)¤$ä"Õ¢Ô)±¸.e± <#ÉUâqM«*gDuÆô¹&ZdäKdÄ{]%Ì„Ð¥YVª­ô
+|¨þf©hÿbí?¢¡Q•F­tI%‡EB÷KÃò[XÀ j¶ƒcÓThËhŸ1Ï›;×JŒ‡Œ­Ò‰í¸Òn”mŸ˜žÕ}:0!:ŸÛÛ¦‹ºwÊ Aû"ˆ¤­RÅíK M·@­q™ÐÛœWúFÉ>ÔIÉšjiAd@ƒÔ†pµ:×7]õãL’Òi¤Ý¡þ‹+ ²}mðNDk! 6àI*ýTù)äqN/•û#Yœ û¶ D£ï½bF§ß¬•Á¥„øÆ{^1-[Ç’B¤¢^S!$šperÑç¼1&æu¯ÙÕ¥ln#X¡Zg†»r!tã:%2ÃlÛicLotJ‚Bź\éaBþ[(RÞ$ÞX¯ó Ô÷)Ù켶8L›:iQ4ý.J-Ø«¬™ñ²ìú·ÊÚà›gÌC0ôÒ0ŠÒãìõ¥+öÓ^2GgÊ)­Ï›öŽ)‹ãS¸å¡H>±Pœt‹ápÂ\Tµ_ŸnLAˆ@<@!€êÃMÓô§ÍîÆ÷›»
+endstream
+endobj
+898 0 obj <<
+/Type /Page
+/Contents 899 0 R
+/Resources 897 0 R
+/MediaBox [0 0 612 792]
+/Parent 883 0 R
+/Annots [ 896 0 R ]
+>> endobj
+896 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [227.169 316.015 443.606 327.97]
+/Subtype/Link/A<</Type/Action/S/URI/URI(CTAN:/macros/latex/contrib/other/lastpage)>>
+>> endobj
+900 0 obj <<
+/D [898 0 R /XYZ 152.694 705.06 null]
+>> endobj
+897 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+904 0 obj <<
+/Length 1506
+/Filter /FlateDecode
+>>
+stream
+xÚ­WÝoÛ6ï_á—b2PÑ"©Ï>y-’¡V­±X÷@KtÌY–4‰jbýßwäQŽe»i¼î!É;Þçïxç`r3 &¿< Ü÷ÕâÙì:™Ä$Kx:Y¬&4ÌHÂØ$ŽÂx4Y“?½$¡Ó¿og×p’,ŽCËšÄ Æò|}Ž,‡Â|ÇâÓ€dQ6cç„…$ÊÒÇ…!
+Kaü»Â>S6mýE2¯·[Qæä¶UZÎóºì·Õ\×Z”Ýý –Fc†Š3ð‚3’…1
+¥têSÊ"ïƒü§W­,¦>O"ïý”SOäæÿfsOÜÈÎÈ„€S°'˜l&ÃêWˆ<K'X ÂAO0ñ%)£¨áõâçw/·"oënV
+-ïfy]éV-gµ^Ëv¶U]>ëÛ’tzçT`NÂÆaÉÀ ø†û¨…OŠšhšB®ÌªÕwó=7"ß¿î¿›¤}Æ£ïÂÇ(q¡|òïÁ· @?TOÉ.sÙ}Sd¡Õ²”Gf&ÃlŸáÙõ#¹ücšrÏHïvÊRO(mv©×Wf«U‰D±Ò²E
+$ÏšVŠ­áB€¤ºRO} ä²ëdñbê‡5÷*$çS–xk™›»<ZÕNº°zwNŽp<Q„þØS½Úxfœ¡bí^ƒ­ºY[£so-Œš/æDâÉÒ%­°-kQØúà¡w»VVÕI·û[¡·©j³»EŠ®ñÔÈJ5Ά ´õáê÷…µ–CB£
+‚Òlÿöm¿ÉŒ„É#-6’ð5)B5¥Þ¾Ö–hΙpÜ3Æ/ '9󳈓8Œ›Kras)ê¼ßÊJÏUù¯ëÍ%}Rg9DÚпîMÔ/h0Ù×´½LUü€*÷"] þ/Ó•å®s~48…GBjÓ1w>¶O˜¾pñ¶î[(ÿccùd®>4Ì‘ø/r4Øüè÷ÈG?b$€2ujØùßhÛÑTuXóÅu.Ùi,Àµ,l_í <é;,N »³®™ØœeÌ%Ï­ujuwh¦Y»å¼iÅW¬{÷ ÏC
+³q–)£ƒîå ƒy808%~×@¶Vð¬B#¯“ºoÎ "BéCê Ê|Ê„žgzëåJ=âÄñ¤ð“å(Iàå8·‡ƒKB½Rm†ñˆvà€Ó<¡}k&lÜwÍ00ê Ÿƒ(P+¼,:üîÌ+,5núªÓ•,€—â¡¿à[¨N«ê¦WÝÚªs³€—U]–8Á-Ó+ô®.¥¨:œd ¡Yx4Ǽ«µ|9õã8Aia™ÄM×/±`ø®t䃸Y†uÝ—…YG`f¹ÃSQÚQÕBÓ¦žÄõ—i­w[Ó w]€-ÝÐWÏX=rüeÔ³ÁfÔŇ<Ž¥;×îhLØŠ ºLjV
+sŠ'¨l„]Œ `PÎø ö0îºÙ½~Ðn¿·fp¶«­ @:²¾¨-°rCë!~¾ FœBÍ C†+ü­SõS‡©¯«…š)c¯§™ËBV¹›-nÐâöa*±¬ûl9AÔà ?Ì2Ü6ßÆÚõ›O¿]½4þ…è;ŽîÌÈÀè[qÜc¦à‘¼[‹êaÿ#h¥B÷ bfeAÏ>æŠ(ËA°»ÐˆVl%`ÒéAW€°w…íDZó˜ËKѹ
+ŒUµœ'4Na:F’„¹çŠÇ#¦«Å³Ù´gÔ
+endstream
+endobj
+903 0 obj <<
+/Type /Page
+/Contents 904 0 R
+/Resources 902 0 R
+/MediaBox [0 0 612 792]
+/Parent 883 0 R
+/Annots [ 901 0 R ]
+>> endobj
+901 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [152.697 577.341 384.825 588.466]
+/Subtype/Link/A<</Type/Action/S/URI/URI(CTAN:macros/latex/contrib/other/misc/url.sty)>>
+>> endobj
+905 0 obj <<
+/D [903 0 R /XYZ 152.694 705.06 null]
+>> endobj
+226 0 obj <<
+/D [903 0 R /XYZ 153.694 618.312 null]
+>> endobj
+230 0 obj <<
+/D [903 0 R /XYZ 153.694 528.925 null]
+>> endobj
+234 0 obj <<
+/D [903 0 R /XYZ 153.694 368.554 null]
+>> endobj
+902 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F30 599 0 R /F28 597 0 R /F8 596 0 R /F39 804 0 R /F40 805 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+908 0 obj <<
+/Length 1834
+/Filter /FlateDecode
+>>
+stream
+xÚÕYÛŽÛ6}ÏW}© ÄŒ(Šºôi“ )ÐEÐE‹¦@e‹¶ˆÈ’"Q»qƒü{‡7Y²´ñJéÈËÚ–È™9g†sá:‹ÃÂYüøÄ1Ÿ/6Ož½vÃE„"ßõ›ýò1]ø4D¡-6ÉâÏå;L¼›²à¹¨ù?lõ×æ§g¯{›\Œ‚ˆ€H½Ü¡vô²¾p‚BØeHrç· \„Ÿ®Ö„eÂÊÕÚ —,Ox~ÐÏŠ\~zK‘2ý@¬`ÅÉ,ÔÎ÷LYcÏGNŸE”žqî‹Bð|Ë·7õÝU¤¢jŒ¾×¦ìWxY(ý…È Ájý8®¬……þÜvmÜÕ1‚%z1ÏÍZ ¬Éxq¨â2U
+ï½L ìt'­+ªdèAˆHãð ”äŒÒ3(‰2˜ˆò&Þïy6ÿÐuXþÎÁ~ÆUþ0Ùغˆ/Kž^$È êOÂP59ÏãDݯÌÆ-‹]¦Àý4¯áÑc“*ÞOÌüXfœ õåÙy8ËF
+d[{Àì)\ðC*XžñœÕóêùhí«¡±ç³.ãÝC¬ê˜±ü Ò]Êvïç¥èg:ò˜N¦3:­­i š@]›dçöT±[Á>~uþˆó¼hr›;”cºMCÍL†ØêîF­úõÕo©uÃÑ(\¬]„=cÝ+õ†"Jè¢óø÷ïÆðLQßøTþ)ã›Ù .“›Ma–r ÚS,ÍKѶ¬@‰}® »­6ÉCâ®ØYsÌçÅ‘ò‚NÝk-§c‡Zq¨xòZ¤ŒaIKèžÚä¸Ze¾‹³ÌÊ6Îâü¢.yKmD}O}ÍâZL¡Üï¬y¾úLèžÿlD}ÑÙ%M™±¥Gžï)ÞØgE,”ùöqV…¬A¥„žC`?È Múˆ˜
+ãÌÄÔôæûðrÆP ì/ç—ö<¹A›rŠüb0‹mç2ñ(î ¦ê›øXï ˜µ®Ú ?”!LÜvŠ–½ ;–â4F|ÒÛ•OÇg¡¡|˜éq€í¶ûmõ(¾gשš¬Öx¤ (D!í"˜uG0‡Èõ#»¤WÑÁ±ÉxÙ$N
+endstream
+endobj
+907 0 obj <<
+/Type /Page
+/Contents 908 0 R
+/Resources 906 0 R
+/MediaBox [0 0 612 792]
+/Parent 910 0 R
+>> endobj
+909 0 obj <<
+/D [907 0 R /XYZ 152.694 705.06 null]
+>> endobj
+238 0 obj <<
+/D [907 0 R /XYZ 153.694 307.588 null]
+>> endobj
+242 0 obj <<
+/D [907 0 R /XYZ 153.694 278.937 null]
+>> endobj
+906 0 obj <<
+/Font << /F28 597 0 R /F8 596 0 R /F43 827 0 R /F30 599 0 R /F7 744 0 R /F35 743 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+913 0 obj <<
+/Length 1146
+/Filter /FlateDecode
+>>
+stream
+xÚµX[£6~Ÿ_Á˨ /¶1˜J•fÛÎV­VjòPiw04Ü
+N¶Û(ÿ½Ç&aw y˜`ìóó‹ÍxÖÆò¬_o¼þùÓêæÍ»Ð
+PRn­R û
+ ±"B™µJ¬vçÓê÷7ï@ÀQ¾YŠXÄAM·æ#¦~"Sý¨ïd¹-²Ý~4É2=Q²ŸŒÂ1´Û+t1C‘? Ó%ȹXË<S²È:l%ÿQëmžKõM8E,ðüëð `Y5…ÈÓªTz¶N[Ùd²L‘e"Ú‡ù¦°+M99/Z´±,a “ùØÁuØ»#t ÀU2 xîpn-6:Ö€Qnö¢ë,î!¨ga ž0b@<ÀrIˆ8çFè#Ž‹1aöG³J(Ç¥!³kPTH°·5ª¸ °y Š#Úó“6Uá¸~HlÈh3¨òÄ DÝ¢V9„Û_Nmä¸<ð
+=fäùÔ˜üöÒ'Q5§E+½ÈbˆQ_˱ßÇåþ(×:⿾ë­o•(ÝnK1E8À@W³0fÇÇvœ‹¶•z›OìTd¹ï´oà=¶qÝëÚqAZÁohWMÞK5“†uØW7Y,¼Jh-b­ìñ³þíq‰WE-ä äiÍ+pØ>jÛ9,°E¾•]t19‘VáŒI„d
+}<NÎ4‡ŒÒš6"VYU^2A¨‚a(“)½qHÿq±­óª!­QÀŽ•R&šFÈ&M$$äºcUa#²ö|Ðüt©²Ä•ø<å#n¤PPP<”ÚPò,¤Ž¥¾Ý>T2oN5m|‹&º…!
+endstream
+endobj
+912 0 obj <<
+/Type /Page
+/Contents 913 0 R
+/Resources 911 0 R
+/MediaBox [0 0 612 792]
+/Parent 910 0 R
+>> endobj
+914 0 obj <<
+/D [912 0 R /XYZ 152.694 705.06 null]
+>> endobj
+246 0 obj <<
+/D [912 0 R /XYZ 153.694 576.545 null]
+>> endobj
+250 0 obj <<
+/D [912 0 R /XYZ 153.694 381.824 null]
+>> endobj
+911 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F30 599 0 R /F8 596 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+917 0 obj <<
+/Length 1232
+/Filter /FlateDecode
+>>
+stream
+xÚÝXKÛ6¾ï¯••"R"%õ´mÑ(z(Z-ä [´M¬,zì&5üß;CRZÚ±cÉÙS/kŠä|ß¼Ènà¬Àùõ.0¿?ÍïÞ¾‹î§q˜8ó•C¢Ô)u8‹}2gž;ïÝ„¦³óßÞ¾ƒ‰ÄO9ôVŸ¥ À¨=‡ïôÌ3[<Âü42Xapë £\¬ôO³¬å®•UYd Q¼!û¯~ÊÒž‰œa¢‘ÐfÚ4»l)p¤±›yŒ2µVVõ6+VUÙâ×bÕˆZŠF¯¿!8וͣÜýpN)Cu¢}EW†£\YŠgQ>ɺ*·¢l÷–KœãJý0à6W!›vVo>eg`ÃÐè‘ *2Ï2o7øõïÃK„d+¶²ÌÁ0Om«v›ÕkYžÑÀàžhÀÇi T
+l³G¡”9—œ£)㫾<\õ`Òƒ%×jB˜ÓQaeŽ‘å(ôaࢌj¸Àçá@Ž8Œf!‰%z_–ë™ÆÌý¹Ún³2o qR y€
+HhaøQXpŒ’„/(ð¹0ÒÓóµþQW0 nÞ)I×|I—>y4MÜUUÕŒÆî3¤(q×8›ºËª+g4q[Q7z_V ½”‹3œëùnû¬—~Ïæ3PPüó}£'š”Íj³5aó²ƒc¯À W‘5hü™…¡û·B0TÚ¡TW!Ъò¥Å³lÄ=XFn»D….@ɵƒž,[ëO3Æݬèð²Äµ¶$õÄ®ÖÚõ¼7xHõŒ2ÙꀀT…OJ‹º–9*æ¨Á‚êðõ‡#"coHŒ
+Z}ÝõF?â¿j×a¯}|³›L¢MðT2ÑS†¯Wx`Y>ëû” nK§p«:¡©#î~<^5>œÜŸ¡·¹¢¾1ætjˆ¸Ïº
+~,v»ežà¾pbœl~NM–¿î'ÐG¯=öMÑ; à…G÷Išª«VÁê¦ ¿Ìïþ5—ª
+endstream
+endobj
+916 0 obj <<
+/Type /Page
+/Contents 917 0 R
+/Resources 915 0 R
+/MediaBox [0 0 612 792]
+/Parent 910 0 R
+>> endobj
+918 0 obj <<
+/D [916 0 R /XYZ 152.694 705.06 null]
+>> endobj
+254 0 obj <<
+/D [916 0 R /XYZ 153.694 520.996 null]
+>> endobj
+258 0 obj <<
+/D [916 0 R /XYZ 153.694 499.037 null]
+>> endobj
+915 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F30 599 0 R /F31 600 0 R /F8 596 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+921 0 obj <<
+/Length 1027
+/Filter /FlateDecode
+>>
+stream
+xÚ½XK£8¾÷¯à²Xu<~€±o=#M¯fŽ«Üvç@'AMÄ£Ó«¨ÿû–1Ð$©q‚FŠ¸ÊU_ù«²ËÁÞÆÃÞ_w¸{~]Þ}~Œ=ŽdÌ„·\{$”(¦ÔãQŒ(‹¼åÊûÇœ?—?>?€@’óШÒaÂÀL«ó/aáJ­Í£Þªªy2?•ÖÙ^‹ˆFþш’2yÊÒã‰øíík}ŒcÑY_Œd${± Žâá Á¶8 D;j¾îG¨G£ã=.q‘ˆaÞãz;^4×)…)?4g
+åÖFœÆ
+_åvl—”ÏMaß‹rû«&UÝ”Ä>¶*YÙ·L›Ùu«)Œf¦7VR›(B¨þ$ Àˆ‰4†(̬ê4Bé'ze`·H ,q·(Ijâ Eè'ýÓ<"ÿ
+½Ãnj£[ÝfgByê\«SÔÝ_AÝöcþSS›°Ô#NÊÊŽ2
+†¸Š]¨H#A öE_‘lÒ}N«ƒÒ}ÍÔÇw8-š·É7;‰§ÂgªÃqú&3íèU¯ÔP²–º«j…Iþ<û>^
+endstream
+endobj
+920 0 obj <<
+/Type /Page
+/Contents 921 0 R
+/Resources 919 0 R
+/MediaBox [0 0 612 792]
+/Parent 910 0 R
+>> endobj
+922 0 obj <<
+/D [920 0 R /XYZ 152.694 705.06 null]
+>> endobj
+262 0 obj <<
+/D [920 0 R /XYZ 153.694 248.027 null]
+>> endobj
+919 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F31 600 0 R /F8 596 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+925 0 obj <<
+/Length 981
+/Filter /FlateDecode
+>>
+stream
+xÚ½XKâF¾Ï¯°„"™÷ËK„¢d#E‰’·Í .Àè¶ì†™]‹üö´Ýf¬f\h69Qî)õþº<¡·ñBïׇ°ÿýiñðø)ö¢ Yâ-ÖáiSêE"(Þ"÷>ûiO¿,~{üd’ "ÞªR„„˜NçoÂx™UVïqÖëÍH¤"=#&8Äm&µÚ×°Ò…’càÉ<Egy¾RRƒÔõ®Ðhµ:5½©SÓ™¯”6Ï­(û%TÞ©{yõ$Õóò;ÙN?`£'¡ÃA’,ŒÎ:Áz•qñ@¤É+XãD³:4:êÚíR»ýcãþáÝã£`­{ó¥R;0½SÀQ­yýŒ6(P%<ƒ<•’­æÍtï)@„*@å.[Áü}«ƒ¸ïhªø»6U‚Š d>pxÌÝóÄ“ÝcŒx©Q¡‘E ƒˆÆfLE XfÞã›Î¡ÿ×”Q?«ôtÆîÿYš_êÔøú H.ðBƒ˜,é?óÖŒÅÄ<èCiÅ•* È­|œÒćj™éboOÖ•ê¤Ð¯à¨á…Ù㬬UÓ™±ÿ³šÎÚkûG©´à¥Ü«Bï¾ZˆJ«(óÖÝÎCb2×S{çc¾UR…l½Ñuñ Ús  …`F$™Ì‘¾4DMKëžDtó›¸Z‰ºØŽ&æÒPû±.Í|4^ܼܽ2À¦ìy¶ÖP27 ºÎv5`ÑÝ´LŸy›žN¨[éÝ(D@Âøl‡ßSƒÎÊç ù2¡øy¦5Ïóbm®Í®Â«¹ Ì<˜vÔ[ÓÁTø?¶çû¹„Dâ¢%ê"GA*âkr\×Ê•:˜ë½jn¦¯óšKhŒ²áÜ:K]Àz çúmm'ØŸ&dÜ×XÇIóžÌ¹’Ó áÕ ß{Œkkì{.8Œ ºm ›Bn*eH ìšwÆNãÁ®c§Ýöm{ômþ&WÙfyUl¶ÚÅ’n`˜¡ m÷¶e(Af;ýµ›©?ÐF8Êȇ†ÔmX Zí÷¬ÚÀ[—ë7¹m¸v£þçb’ð½¡ÌÌnqSË
+²§1ð39°x4©§æ„OU‚ªÑö0È>…ŸP´³<D9»Ïª§¥ÒÛæd¿”Ü—»ÛÂÍIƒ=ñÝ9CXÔ½~»\·9GÝæÇú©(må¼`¡9~ ÙB–ÖÃ"‹~Š]î<ºkÏè–˜ išSêÕJrLÿ”ÊÿÛqåˆq%}úNXP›Ú‹îýïÐõ· 1„ÈM_¥A’ôY·óúªÿËâá_]ì›
+endstream
+endobj
+924 0 obj <<
+/Type /Page
+/Contents 925 0 R
+/Resources 923 0 R
+/MediaBox [0 0 612 792]
+/Parent 910 0 R
+>> endobj
+926 0 obj <<
+/D [924 0 R /XYZ 152.694 705.06 null]
+>> endobj
+266 0 obj <<
+/D [924 0 R /XYZ 153.694 511.399 null]
+>> endobj
+923 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F31 600 0 R /F8 596 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+929 0 obj <<
+/Length 913
+/Filter /FlateDecode
+>>
+stream
+xÚÅXKsÛ6¾ûWð’rÆDˆ7xs:“G{lukz )Hb͇†4¶Çÿ½ R$Y-AGNF3"^ûáÛå~VI°’àãUâž¿,®Þ~@©¤*X¬ÌR$ —ˆP,–ÁŸaÊqô×â··`@¡Tf–RŠQ
+öÃm–*¼/µaá?EéæÊâÎÌèòÞÎ4¦÷ejÛb©í*p²s¦‡îD8pˆF
+ã”±c¿Ö@]€U3úhš£Es  ŒÌNÍ`gò̭·®o*³®€-LCÛ™1Ú¦!¬²¾ß£Ž!%‚C8Æþ6kû"ʬµýR[§J»êv ‡ãæ<ª××£ñ9G4Z£k›ä0?F %G ºÉêõªmª÷vŸ'U*rgÌŸãb‚HÂŽpÍk´ˆyÝ[ÿŸCã$EŠî±ÑõÆÇü£à§ÚÉž‘D‚§é! HmópDßœÁwF'êfgà C ¦ÇNöðâŽwÂ}´8Áæ“'Ç£ƒ|zã}‰iP<NNÙ
+endstream
+endobj
+928 0 obj <<
+/Type /Page
+/Contents 929 0 R
+/Resources 927 0 R
+/MediaBox [0 0 612 792]
+/Parent 910 0 R
+>> endobj
+930 0 obj <<
+/D [928 0 R /XYZ 152.694 705.06 null]
+>> endobj
+270 0 obj <<
+/D [928 0 R /XYZ 153.694 630.343 null]
+>> endobj
+274 0 obj <<
+/D [928 0 R /XYZ 153.694 242.596 null]
+>> endobj
+927 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F31 600 0 R /F8 596 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+933 0 obj <<
+/Length 1148
+/Filter /FlateDecode
+>>
+stream
+xÚÍWM¯£6Ýϯ`S‰HÅãÀ°¨”Ví«TµR¥Fê¢ÓIœÄ*Á 8Í{ÞŸkìÈÐÓnfE0¾çø^ßìüø»çw«wïŸx¢œ³,XíçˆS¤ G”%ÁjüæY¾øsõÓû'XÈPž¦±ÝŠ’<˜nÏÂâ­Ø™G{Z×ES웢>\¾²–CŽÈYF£<ÉGŽ'8hŒ0aCŽe«‹F·b£¥ª&°…ÅήØd›1Óþü—á©_§Níößš>FNfÀ±Çp&
+pRYmE¥g@Ç¡¢‰x^D Ml°ëòÔ’ÑÊQV§Ö¾#*žgð'ù#"Ž3S¿`Uª9åNUúöÖÊ„y[ïZÑHÑÎ`åká
+Æp@˜&Ô¦=F)Má™!ÎR»Õ."B œ¿ú`ìúâüÒŸw1ˆÒÎ;ÿX–ßJV„øx*®;°Ï‚Ì!&`î¬]_d,‹ˆan4 EµïÞIxöCݨE߶'Û ºEµ»ÛÕs[0uª”‡Z4v¡Uö©…¶–gÃç¸6…³+6utt…Waoš=Á‚îÚ­+â#t«êt´;‡ã‘´ïnª6§Dy=™@¨#ÂPfrÉæa6§'î`FKžlû9b8R °—u#vòÙ¬B/]ËÍåúe²À(4œ.c¬ã©I
+u>äì®é¿“úõ²¥ÔâØSÒt¦Ÿ£è¿>Q4Mñ²Qe+\e±•Eü:„.ÖC:‡!ö÷¢9•â,· ƬÊçðxöuZ—Âùz3¾¿þ`Úœ­áz§L§Û¿±ü˜±¢Ä¯[ìÖê¹ó¨ëŽ‡!ü8‚7¦Ì›ÉÄoìÑí®¦†5wÒ›÷S5sSõIîO_¬ºf0Æ«ë]wî7Dµ3ºÕ”„[ñª¢êÞè¿Ù”vY‡ïÉî8@:f½ QùoÙ¨êhk´ˆâ˜„?ƒln¾6|ñMb÷YvšÎtPMë‹TÇÖ.Ÿ¥©E³*ukEQZêÄR”ƒ°al,º¥‘팅ªÙvBŸÅ¡Vvé^Éî7Á1Ęò­T…n—íùsÿ
+‚¸WñSú¤  »»3žô©î7¸*qÕ5 úb¯áÕ»%Ñ©A•Á?
+žþ%/;¯ðSøÎèŸøáà ´¯oäkuJ€‚æ(Ë\OˆÙÈà‡Õ»Oý¥—
+endstream
+endobj
+932 0 obj <<
+/Type /Page
+/Contents 933 0 R
+/Resources 931 0 R
+/MediaBox [0 0 612 792]
+/Parent 935 0 R
+>> endobj
+934 0 obj <<
+/D [932 0 R /XYZ 152.694 705.06 null]
+>> endobj
+278 0 obj <<
+/D [932 0 R /XYZ 153.694 564.029 null]
+>> endobj
+282 0 obj <<
+/D [932 0 R /XYZ 153.694 457.905 null]
+>> endobj
+286 0 obj <<
+/D [932 0 R /XYZ 153.694 437.191 null]
+>> endobj
+290 0 obj <<
+/D [932 0 R /XYZ 153.694 197.322 null]
+>> endobj
+931 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F30 599 0 R /F8 596 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+938 0 obj <<
+/Length 1273
+/Filter /FlateDecode
+>>
+stream
+xÚ­XËnë6Ýç+„k°‹šI=[ 
+4E»ö.¹ Ú¢,ÕiÈtœÔð¿w(J~]9¦Š,>DΙǙ!i×Y:®óçƒÛ¶¿ÏžžC'@qH#g–9ØóQèc'ðCD¨ïÌRçeŒ]B&ßg?=ÃL„â ðšµòƒä4‹^1õßqñVÔRT\¨}V,·5ÿé`öžÃLÛ½Sì¢Ø0´&Š0{“¤ó2+%ë }í>!<;.Ò#ʧÒc“à(Ý·òSÊ3Ý”ÅFÉ̘°iP×u!T¢äb_Êìpx´÷\081 ­3¥R<в|{Œ|^öQhŒGÆÜkÁ3°;Sú|‚N*¶â ¶V…Ÿž#œh/fNè¢(ò:ÿÊ&SJé¸Ûo\l̤Üt´ÞæS kðxù³)i¾Ï'SÛÅ .&$+^óôW3Ud'9­lµ­E'%çÂLn¸2¶U¼ºØã)ê QˆbB„(´'â…¶)Tr±T¹°¹|ë|¶Yk{:DÃÁæ¼”»ÿ[÷n[¶ÇnÃÿľXPw8ìµ{rzNDQ¦AôŒ¸Y¤l8HȘ™a.ŠÉ•‘C.‘ëÒs•’V…b[%¾þ»!ŠÜ¨Û—ÉÚ@¥¨[¢K3ü4º€V3Õ-ÌdYÊ hµ›jéºTQ¨ít0ø±­íFLä¶bÂx ¼ö¡è™Y¡l+ý¿Í¢Z§EŒÇ-QÓ%MÏ…N<„¿¡ÉÔ¼ñó$‚ ­+^—·»v:÷Z œ¥$å:—o‡…2ß›ô…ñ)}µv€õ @Ðhü­•)Œ•‘î¥uÆ(õ²ìÊGÎ6e¡ËK¶àÝ7ÐóÃô™iÖ­ý…‰ujf_]ßͶeÙV%×0ƒ­«ÅV$å—gõû¼–Žðˆìí
+Úw’ÐíTt›”`uÈvÝÕ‘Jé]!bÄ75GÎkÎVö
+{V
+¿ét¶¬™fœ€|+ 9_BÎÔr;@rßáL
+b|Q©*V–ºSW«
+È›Ú]×
+-Ÿ'ï*9¦Y“ŠyV4…w+òëÙ}î-7Á_YX|»û“X÷J>v®Z<ú¯¾w÷z0à¡ëza_'ÜÀË’ß—Ö„"†WEý=¾¨S³àöœÀ[rež×YQëg>¼Væ—…÷5)Ëàß«6ªžM7Ëà:}’ÔÿS@«ÉµÒáÝÀêºsã!2"öŠ¾4²ñ Èö”ë‘ \»Èž£XG À¶´ü]-rV¿ª3 t-çS¯ J@åÜ€—þÙvìX)oXn¯uvgBGxÿøɯJ8Àˆ¸©±ø¬‘eî ÇÌþ&éWy
+endstream
+endobj
+937 0 obj <<
+/Type /Page
+/Contents 938 0 R
+/Resources 936 0 R
+/MediaBox [0 0 612 792]
+/Parent 935 0 R
+>> endobj
+939 0 obj <<
+/D [937 0 R /XYZ 152.694 705.06 null]
+>> endobj
+936 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+942 0 obj <<
+/Length 1653
+/Filter /FlateDecode
+>>
+stream
+xÚ­M«6ðþ~Eªª*‘^ü0` ‡JQÕnÕzZ©‡¾Ju“ LÁéfm{glCBÛÀª'ìñx¾<Ÿø‹ýÂ_üôÁwßï?|zà‹˜¤<LÙ‚FŒpF1ã$Ùâq·øÝ£~Ì–<þòé Iã8BÜ $ç@Ç }¦a”ÇöW{‹|MwåWÔ')K{ºñ$ºµhòj'+ý•å=âIOœO"^)K{ºÐÉ$º‡Íú¤× ðÙìÚ?ëR<ɬ*EóôúÍtŽé]Ž_Óéä¸?BŽ&„ÅiGnT8‡rKÞ¥†šïdf °µÎUµÎò}u,×­¬Ïd¹b›Å3˜Ã³•:+”ÐE^=¯à¸FèÖá$Ö…ÔCFyYÖúï÷xï»XÅœ„Io bôÂA$ØðØȽOÉ"¹‚åb1áqÐÉõxËU†ÞgŸFæ&ì"o«ŽÕ2H<-{,ª]Ç@~‹Vb+KiQí9ØQ Ý’ëq’F!/„o’<šd¼J>£P ÐÙªø:ýyØ$4<ÊÒèŠÞ74©_Y‹Flò-.·ë4׆F)p¹¢èYF¿* ”"žzú€VŒxâ=£ùtŸÿ}µÓ·øó«o—«$ñ½R-Wp¾Ëñ½ðqÀfpïÅ®ý ¢SxÞ¼µpûMá!íWP5N­Ü)27¨|w‘tK­(³ºоT»F•è/€ô|Ì+»ö³[RÔƒzY·h`ј:°½8à£FÕ®µ›\·²ÈìúXýu…ÕØ]ÌTcÏ.ÈÁ©÷À)E¡¹A=^Æ„ßK­±&ÝŠ¦É aðhçöyaß3¸~ÐÔ',¸Ì¶¢©Å^~ùú, ¡vÈcÑ@™Oxʾˆ‡xNËêÖyàYoê1ÁgqÑ/µìøÐ\’9\$ÔFÇ£PÙ .é,]°Ä86fo–•(å?ƒx3¢ù0¢[&!ºw˜2O…ϭЛ`€ÏÆ€:×Éâ6r1I]Žˆuj@>¶î²‰(8Ñ@øÅ:,@MVÀÅVÇÒ¡äÕcà [»W™Åq!ÖÚ]Õ˜FC›©°ò­ܺlâOz
+¼d&!uò0óĽœÐ—Ã$d$ði‡öP˜wñâ
+»jäÃYö|pûJw¸¿Ã4Á=sáe«47¯û(+hhŒÛé‘8­ uí²á¶m»Þ©íŠ¨>(õtžÞ÷&ᤩg§Öy¶6moÛ5og’íO÷Ç‹bÑÿ9Ÿ$ì]f‚X¯¥&µW>n[ÒBœ&Ïp Ÿh£É“ÆýI$¡„Q7ˆoë³÷I’„ÃYbê_³*äß&( ëó/s+|^®`4êðûl×ZF¦•Åeä‚—…ƒÔ[Ñ#(¨W6ËP°OØ0˸|" %AjŠ:~…ýt©àØw±¬ç¤‡ÜÖö1僀Ðôæ Úº}iJ#Â’^sl?E&ŠÓeD}L—fTǾE/Q?<™×^pÇ$KIÒÏ™:Ù[õ(ôcCÝÍDÈA+cþà:²s(3‘îÜ /p–W «¶01&4Ü,d3% QÐã;üˆc&v;Õ ³+÷À­- (QWýŒoðTéMBþvÎƃܘþãÎõ
+endstream
+endobj
+941 0 obj <<
+/Type /Page
+/Contents 942 0 R
+/Resources 940 0 R
+/MediaBox [0 0 612 792]
+/Parent 935 0 R
+>> endobj
+943 0 obj <<
+/D [941 0 R /XYZ 152.694 705.06 null]
+>> endobj
+294 0 obj <<
+/D [941 0 R /XYZ 153.694 370.318 null]
+>> endobj
+940 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R /F28 597 0 R /F31 600 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+946 0 obj <<
+/Length 1852
+/Filter /FlateDecode
+>>
+stream
+xÚXßã4~¿¿¢<œHõʼn;¼P8~B•xàȶn]š'½Ý½jùÛ™»i’Íí6÷ÒØ®í¿ùf<þl7óg?¼ðÝ÷õêÅ«7r³D†j¶Úθˆ˜Œø,Ž$ Âh¶ÚÌþò¸Ÿˆùß«Ÿ_½Å’887Y %ìC“^Ú)ÝÝnÊ‚û,‰’v·hd7®X'ýÝZ=‡ßÙBqj.`U(•]ó–‡by·ÍË´YVFW½^½Q³„1
+“>SJœ…ý9W¡§ç‹ ‘^•6ëy ½½ífvšÒöš=ÍR^epDyk½9mOtð f‚Gg cªõ5Š%K’v>›/Dz«}Vª•VUžéÚ*cµS^šç¶ñÖçHrKßú‘_”͈’ žÐ¾®Ç]ö6ÛµGêN“~xV0ÍËBÃÎ|¾AÑ´Ø`Cx‡ôÝ삪á8 ǽ¯@#鹡µ.p°Ñ† G,1¨2Þâ&~7hh0ÎFo‡&?áÓ-âS>‹öœ*57åÑuS}Â!8œ,+vSüB={¾—¸w®’
+ÆÖÛâšwƒî2O}wýy“+ý¦ø3 –Àîç3„Ü*ã‘sC.X2H‘·š'ÂKor€Ã#<ùÖyßýþíW
+Mhö¶•!¡aã Ó¯‚위,–AßÌYaÙ§4mÿ”Ž¨Öëò`¹{*!Ç,Tq×щDêe}ûøüQÀ dƈŒÇ‚ÅaØc2îûW1Y¡ouq6gs¢;x¸Ö­¹ÏG„¨„qÙ
+!ªZÒùÜîcÛ»5Ãíƒë¶×ÅÆJ˜°uøÉæùb‚}Ä•öÙÜä“L¤Z Ñõ&: yx&ñáèÕÉ9õI.Ö
+²n1¶°>Á.=æýÓå¶SåéZ“ÇCŽd‡€ óÔ¤MVõ˜[@º#†N_{ë¨*¨9Ù!äUŒ&‡d5]ÃZ0üQÂ8EøeW|?¯raB!$-vçßJ ›…Áöh7!/Lˆ£»ì}§G‰6þùìóùB)ß;³V†ÌW„Ü ÅïmÛ]ÃéÜ¥Ž8n¿ö
+ûEêKãT@b¤‰¹ñ§Ì6cý>»Ö÷Å‚.¢&ÝîµÑD¸´ }6€àÙž†Zˆ%©:ðù‹6µí
+^“à*åšåáåõ†‰®’ë^•ùå´ùòR øhF2õ ˆ‚,„ØoP»!¹Ë}Y¾¹>•Tz|NWøïQëÏ&?Tó gÝÕßÔ5<ÈÚl‡
+îqaËå Œ±/©‚R7+jtTBB*)·H 2¤¶`Tã3’m†/e!úzÑ\È~ µi_œ[ šÑÚSÏXÕ+=Õ¬ =.ép‚ç¥æ$•€ÄalÏ0`\…½=V;`B´[w’A«8•‰$•‰° ö=¸g³L…ñ ã@õ)å×ÄrÖ˜‚U«žëµÉª¦Î>ŒÅhÉ¢Ku
+•æt€ì§hÒ‘¨‰OèØ—`ñXÚO|î}MÅÑÊX ™ôù àÄS˜óbÖS þ)t)§ëºÁé %Z0Nbn5µàIOH[ŠÔÍ©¯È ¦>¸3
+Ê‘²ˆ{ ¾_½ø}u1
+endstream
+endobj
+945 0 obj <<
+/Type /Page
+/Contents 946 0 R
+/Resources 944 0 R
+/MediaBox [0 0 612 792]
+/Parent 935 0 R
+>> endobj
+947 0 obj <<
+/D [945 0 R /XYZ 152.694 705.06 null]
+>> endobj
+298 0 obj <<
+/D [945 0 R /XYZ 153.694 556.008 null]
+>> endobj
+944 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R /F28 597 0 R /F30 599 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+950 0 obj <<
+/Length 1287
+/Filter /FlateDecode
+>>
+stream
+xÚµXÉnãF½û+x @£ž^¹Ü” q09È!“-¶¤†)¶@RÖ‚ÿ=Õ ©Å´EZš›Íb½Úzy…ƒe€ƒ?ï°þöx÷õ‘ EiD£àqÁP”ò 1¢LyðOH8J™L 8ü].dU©r9ù÷ñ¯¯49ú;¥‹TÛßšì©NêƒÂ°z(tÖÔNêXÕ”PPFc$ˆ%©“þuÑÈj2¥) ³¢pƒM6ŸÐ8|žˆ(Ì–²öŸ+i,ý¹Ì¿L¦ ãp7¡I(D.çàR¨&†NV-Ü'k¹W´S-ÐwLëDuuþù GÊM”dîÞ¶¥ÁmTÑ3 ”
+ëï„ñ „·ñ6¼ L!œˆ.Æj-‘
+¦‚ ÂÉ©¶¿' 3&1Æ `µv£\f…q°¾Y¹¹fåÅ6Ö ]×êIª1†ÿç„õ¢Ç|""”`ÒÚSèry”÷cIƒÊò‚Ò†äEUº\»qS#÷SDP ,±e@)¸%P
+$$õ…%‚"nmIСúL ! æQËffšÉ²Elêý/=pNÅ”`ˆaÒ‚QÜF¢ñ Ú–ò¬Þí_{uû?œò´SNú”Ç(Mø±ò|8²~ßzfa_¯½ØNá96½ûu¶«T3
+›]‡}ÿÆñû1èüJôcÜñ¾‹O¡7ÛªÜÀ×zÞ¾AŽ®B>`Ž÷9¾¸ˆ^G¬šdÐ’ÌõL-\¸ê½/YÔ<ýƒôÞN¥ÚíEζ†/j3vg›ß»r=ßšÌT {µÖÏû‹`éŒ
+Rÿö88@ŒÞ @mld€æEV×`yÞFjlø  Éæµ’EöcxˆÄMC
+Q)wý†[¹cB
+‘Õ;s«íøŒøàTêVr9Zc¬OYä°ö_2¶[Ðß2µœ\•Úûñ¹åôŠÜÞO.g7M.ç?!¹í7]·üSëöìÀ›aËV­×2WY#»<›Í«}ÛÛ3¢1”ÏŒžäR•‡ Á˜Ôßv]óôg¸•ò)çÄÐ} #ß—žÁ46ÔŠ" Qò.?ìþxCIµà†ßÑX„ÛZVÓB¾Î, 77×ëuVæ}ôÃeÇCÙ©@w ¹º¾V¥åÒ€³[IKËãÈñM3×qmgÝWí'6ŽŽÊ¬r$—Ä qÎOY®* Í&aæ¹·¶ÿØÛ€%–î«“ƾRs3½êu—¡ô`ÿ «ëa´QÜ›ò ƒÅ„®mz @ͧœáðÛ™àœ6 Úµ1¬Uˆc~¶Ý ¯ˆ9(賑1GÝu½Ô‹wZ(œ£˜w¾øü@åcQvÂE¦ŒÉœ¦6ö Q%Ù¸¹¬ÇŽ˜¢SÒðqaÄ3ÖŠû‚ûÚua±Ð¾ ¼k¬˜Ù®±b¦ ˆMªé­XÓ÷¡S"[GáäGIÜ:9d ©`)÷ýŽT¼­ÈYÏo§‚<´Ý"¿Pì„I¸y.•[L¥qƒ½ÛÆ©ö #/f‹ÛL—ºq3Þ1ÓK³ïmÓÈè!8Tö :oekíÛIµkË4¾«“¹G©§zÓ×I…ÌM*œÇݶ5øÂáSv–èûµvÓ°ç˲ÒÛÍð½—Ý®á¨õpZ+nÚH.nEç³r¾ÒP{cÀ‡õ6•l¹Zç©=táÌ].e圞m²êì€<Ý@ TQBÀFÔ±Uïn8Ý<Þý)³ø6
+endstream
+endobj
+949 0 obj <<
+/Type /Page
+/Contents 950 0 R
+/Resources 948 0 R
+/MediaBox [0 0 612 792]
+/Parent 935 0 R
+>> endobj
+951 0 obj <<
+/D [949 0 R /XYZ 152.694 705.06 null]
+>> endobj
+302 0 obj <<
+/D [949 0 R /XYZ 153.694 667.198 null]
+>> endobj
+948 0 obj <<
+/Font << /F31 600 0 R /F28 597 0 R /F8 596 0 R /F7 744 0 R /F35 743 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+954 0 obj <<
+/Length 1123
+/Filter /FlateDecode
+>>
+stream
+xÚ­WK«6Þϯ`S)¹j<ØÆÆèn¢+u*U]Fí¢· '8‰
+ÒOU0òRp™oÛN6.ãjÙ>ÍÀˆUÃpà“,Z3šB‡Ò™ ÉËΆýÕ¤€å!’µÌÔ ýwb3ÞuŽSø‹[ùsîkž'Ÿ™Oñ`}SDâø¢"Ë4kªÃPÖ;ãëu‡* Äxò!Kgr½]M³,Õ“*ó¦*÷ªmM©b)ËÍ®jT:Ëw ©—0^­õ‰"/„VuëêYÿû±Ô¿0r;HejX=wOyÚíô`=1JÌ«›X{¸Sy¶ëüÓŒ§Ã”àø·yáOQøU‚—Â}µÆ‰×ªMÕÉNAd_“Ðv³>æÃÅ<NÞ’³•¾ÿª¦a€1ÌeÄÆ1DœÄFû8ŽÜzÂá|1äòyªªVOíŽ×Ï+ØŠ„™¡ÂQ|ÔË\¬rÿ ‚&nš±ã¸þ9tÇ ñYª¾‡:ˆÅ3Èoë9ŸÍ)ŠzG{¨K’ Ò“‘*çDÌN-Iÿï,€,eQeÕ¡-^,~W}„Œ#ŒðÛ.²Í³C£þ N#$h_p†Z*A,$'³ÿ¼ãE4àÅBÛ‚ö :!º†tŒ¹5;yØ~Wh4˵¯”ÎòÖ=ígÏÊ9ÉSkh|ƒMe-$XšÒ¾7R£,…BŽ`ˆ÷I…ÅM›…Á8Žu ¾®Åøö`ÊØmóvõ£¡E~Ëþl¦t v³>_ŽÞ-ZpOÒuq£F±¿F'+Ó»-&XðØ4“ #äM (˱ÞÂ
+Y_3«:K^›Î›êàJ ùÙ~„žÃ€–ý\CMr£ËCu 0ƒë<]ëfµp‰-³ö£Š Hàþr-„oÄ5C`çY o¡H¼
+™‚^˜[öïyÛÙ¨U[û´Ûø x,Z…K}
+yNâÙK ±‰Í†|2—üvPCôÅ1!^t’’uëtìÖõ£I(ÝK}ŠW4…MËŠÃÞ\%É?çÅwÕ/c‡9†Ý^wÅÄu{`$.fü²ºû-3ä
+endstream
+endobj
+953 0 obj <<
+/Type /Page
+/Contents 954 0 R
+/Resources 952 0 R
+/MediaBox [0 0 612 792]
+/Parent 935 0 R
+>> endobj
+955 0 obj <<
+/D [953 0 R /XYZ 152.694 705.06 null]
+>> endobj
+306 0 obj <<
+/D [953 0 R /XYZ 153.694 379.648 null]
+>> endobj
+952 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F30 599 0 R /F8 596 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+958 0 obj <<
+/Length 1803
+/Filter /FlateDecode
+>>
+stream
+xÚ½XIÛ6¾çWŠÊÀ˜á"RRQFЦËy€š8e ‘%WË,0üßûÈGi¼(9(z1WñmßÛL›]üòŽúñÃý»÷£…"I$âÅ}¾`¡$‘d %#Â…\Üg‹?Ƶüëþ÷÷a'&‰R¡»©xÇ]úÄD¨÷ûÌäv–Õi¿3U·.ª¢ÛÖõç÷øÂ)±•aÅ(Id2‹&ˆqAx[ùs_½¢2™ÝH×yYënݽìÍá8Iп‚ã‘`<E0"IžÜ”õƒ.í¬5]Z÷UgšÃ+Éã!>NÒć.…LÞòø¦ÃkœÒ7í3¼/¸Á€;]±$aˆÿXÆ"0Ë•Hd Ë²^®x¤ºs[*Ð8<ÀvÔKøyÆ»Ù-¨ÏóÚOúÖXTx¯ƒG_Šjƒ»ÝÖ§uÙïü•¢JíÃ[ÓâºÎñÎ'Ê$¨»ÅÕ°Ûm—,(Z+»b 4ã‘Û-÷—½Á u‚mBßãQ›lÚÍó^W™ÎAf»¬ÌÓCýì€ØVzbI.ƒöÖv3·Y?™©ÝÇUæ¯Ít Nù×pPý®ìb —³asï ± «4ÒåŠ=Xfg'¦²–ètWÔÖÆõ
+b–³•¦4ú,Ü|¦ß|觌ÀHÃ|6H)¤lwƒð1!uuŽV»hUv‡;–çWR¯Bìôgo<‡$ÿL£÷'òÝ{¸:%ˆýÎE“¢$æãí”ÝJ„‚„âh>{X±vn¬´\H«¢ø¬TiôC‘‘ã5'Q ž?ÂTRÈKù”„ŠH:_BFB>"¸h‘é
+œ£îp>xpF@³Jnˆ†0¯˜
+~­­ÂŸœÖÑÇšÇî»Ö"!`~¦±Ê‘QÖS0ôÛj¿Ù›-Æ·¬<·øD%Õ–_bê…=E¢¨‡v‡A2ü†Cª«‘ “Êë
+QèmÙÞ‚é#3HÉU ŽGpà©ïŸÚÕÍ¿&x°€5€÷îp–wûZ¶„²¦ÎO·»±o
+¨l»:=”õãñøíü.o‰*åk^.×y±éï`‚M.Iœ "†¶@†IüdrÖÜ×èM"År ~¸Îˆp˜F#Æ?–®›ˆoPëFR9ñEœ\Ô“ÌbÊ’]Qùe‘㈺Źnü¡ 00ú¢.±À8„ÿª•ÏeBXõ˜ÙŠr*·‰”tœ1=×Þ
+:U£·vÅ0¶
+Eüæ9oë;ž(4NŠŸcói  à2{‡kSá#$¦¶kŒÞ ›œ¨°x*ʯ4&5ÅãÉ[ãÇ'’ûägkõ~¨ð6®[{µ_ò‘ë xkË犡õÐøÝÖóq:¯çËjèú°ÍkÎhÇyÌžoi•âÙ­Ò¾“¯ÒÔÙ·)j4 £³u‚j»lL©Ÿg«ˆ±™*ÿGø¿GÀ,”P ®8pÎùÝyüâªdbјÝ]ëÂÃ^KÕ•ŒÅ2:_‰·Òz·³‰n¢ ‘œß^Ä«NÇàØ"'—ò`ÊÑáíÞ)í¦nü¦”v”aXÔ¾a‡pÇ΃öá y:4àt¸õÚ£L‰“Xž‰‹®¹nŸ&jwÐy¢.+Ÿ\—­ ª¶¨qA5aCUçìÑŒì
+²D8Ø9æ ;;«›94ÒTEíhã›M—:”Ĥ£†ÌKµ¡Ô“ÃIx °ž Zïô‰ÁO°ŽkqsãYå*F<ôœü·cùi<5[>žV}ê¬5Àö$Þá²ð©Oïêþ¤a¾
+±±îªÞ¿•£1.Îûúu/ú…‘oȇLÌý´ítãªÒ®é 8Þñ0úá–GÖãìꆤÉÂ7Ù9Üðšœõ+–ÙN’!×Ûíº2z¯7fþŸ­œ©·ÿl½…ÿèkù¿…çø¿üƒ˜%·¦ôóhÄ oå`*C‘&g_ü|ÿî G,S
+endstream
+endobj
+957 0 obj <<
+/Type /Page
+/Contents 958 0 R
+/Resources 956 0 R
+/MediaBox [0 0 612 792]
+/Parent 960 0 R
+>> endobj
+959 0 obj <<
+/D [957 0 R /XYZ 152.694 705.06 null]
+>> endobj
+310 0 obj <<
+/D [957 0 R /XYZ 153.694 411.165 null]
+>> endobj
+956 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R /F28 597 0 R /F31 600 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+963 0 obj <<
+/Length 1184
+/Filter /FlateDecode
+>>
+stream
+xÚ¥XÛnã6}߯P , µ"ÞtÙ'÷’] Å¢k š>0 –%U¢s©àïP¤mɱcÑ‚ˆ9sÎŽÔΣ8?Ìó‡Ù‡›;8ˆú„†Ø™-Ĉ&Ô YäcÂœYêüå"æMÂÌy uùÃ&çµ÷÷ìóÍ]ì$~âP™Î#?ÆHÝ>y8vEýêM(KÜï¿|…A¸RÙ{ÈÝ|ɽƒëGZnr¡×î|—r®\-a†ôžz³ÛÁ¼ ŽÜRm
+f ΂QàïÜ ¯ýM¡›ˆu%_/_º÷ÕŒ]®f—†/_¹-nmŒŒ¾Á›Júû6Ôß-ÑîÛ:4M¥;ÕT*½ An)ác >¿HÔõšˆ+^¤U×! }¤âÐoDu±æ+±(ä9ÇÝŸžÍš×«£®A¿?cûÆx1Q}(Õ;™oY®á²¨§ªÔuW "5¦eÄeVz¹\èU³¸‹²ëBí㯟OªßCÝLêíÏYžëEئ¦í¥'™„œœûŠ F@yB@¥šºþì7ÝÎ>üÏ AB
+endstream
+endobj
+962 0 obj <<
+/Type /Page
+/Contents 963 0 R
+/Resources 961 0 R
+/MediaBox [0 0 612 792]
+/Parent 960 0 R
+>> endobj
+964 0 obj <<
+/D [962 0 R /XYZ 152.694 705.06 null]
+>> endobj
+314 0 obj <<
+/D [962 0 R /XYZ 153.694 667.198 null]
+>> endobj
+318 0 obj <<
+/D [962 0 R /XYZ 153.694 164.516 null]
+>> endobj
+961 0 obj <<
+/Font << /F30 599 0 R /F8 596 0 R /F28 597 0 R /F35 743 0 R /F7 744 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+968 0 obj <<
+/Length 2404
+/Filter /FlateDecode
+>>
+stream
+xÚ­Y[Û¸~ϯ0°hWbŽx§(0I7éö‚mÑÚM42m#K^IÎd6ÈïáE’¥¡cOÐ'‹”xî—ïÐéb»Hx•†ß·w¯nÞË…@™¤jq·Y`Æ‘äx!¸D„òÅÝzñŸΖÿ½ûÓÍ{ØQ(‚¹oâ":²µÞØŸÛ}þ 7U§?ußáÏ¿ñGO¹¬ÂÑNQƳ p!eŠE¸Üç­.M¥Û®Ñ]±ûŒ¿Ä8…ãž“8‰«8òÆTk]uXï/ÕW¯jOûzºê*º»ûÛOÝ-FJï?¿@è,Bœ$2<!Þ¶'ÞçÍC„C86ã Ò‹â¹^^/Rû¿€¹6 ®'I/æÌ—ësC|KZÿ¼ ÿD4ÿ("RN¬þ,ÿé,×Äu¹vkËE{<è¦-sè^»B^»UÝìórSWç·{q«ÿkg­ý墕j2½:ÚhºÀÎrâc!E‚H'¥R½×ˆ²üÞtygêª}½\QÉ“·æ¾4õ¶É»%ÅÉÓ2cIxõ®ZWu§ÛÀ/2„Ë%u1G³‘¼gÀÓ)AÝiõü°
+§ÿRçë劒ümIT’w)–D&~óǼ|ú>È@NÉ(‰0V½5ª¼»7÷Ï™QŠx&ú¯yay<,9Oò­~m¿‡îiã*]<,ú§?¿šñ¢Ö ¼§²é?ÜÜ]^¡î¸Eu³½ÙçES·7eaS@L6æþÆR]y†„´Ùé¼äI@fê¦Óë›Qð¡O5À eŒ…ãÂÿü²\1š&Ý.ï"Æañ˶áHˆ!§ò¶=îÁÛ#Ù#Yb:¿S‚›Z¿U[÷|´†ÔßÉý7ë|¦’èTöu8Z”@‚Šq
+Š;ìü›|`§#J¬2…°âSËåMgŠRG´G:dnÏ“R”¡”%;ËÐnåe£óõ“_¬õ‡³J¯#2@i±ùדAïÇ
+0{J®Œ*Á`Ag£Î@îÞ.Žm¬»B-Ç“¬¼ìZŒ˜T§®µ,B½¹V TLF¡_oŸSÅüt`òýÈŽj°Ìª!nåz¼G’"1o“=JŠI¤TøŒÒ˜9–º*©˜h -í+Í‘¤òeZ÷­‘BCÃ3uÞXè™J›é€g[¨ ~C!ò:V)€Ë®€Öl,LUÈ(G·ªý/tº­Ëx¾7Õ:Èãp7üúT‚2j3 j؃®Ú„×&l™pÞâÚ^m‚™!SA–s„»=ADÎ+÷¨z˜›}Ù·ÏE^ù×›Fëò)l:È”ƒ±tS)N¿¥9Ål¡BäœØ™¸@BÓIòJ¤öè T©ôc´>gI.§Ý°ç¸×ÍV_âæeÐáÒÐA7 ïîµÇoƒA!ÊýËÑ4GžBKà¦#ÿz—§)âÇv
+PÑ:MÍòû ¸
+Y*¡ÉeËüwvçS ’ÐmWý ¡ÑÝÛE©AL"
+Øè¤p…7í4¶ K˜ a”†V|Æñä›ww¯þûùê"
+endstream
+endobj
+967 0 obj <<
+/Type /Page
+/Contents 968 0 R
+/Resources 966 0 R
+/MediaBox [0 0 612 792]
+/Parent 960 0 R
+/Annots [ 965 0 R 970 0 R ]
+>> endobj
+965 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [312.376 414.016 508.364 425.141]
+/Subtype/Link/A<</Type/Action/S/URI/URI(ftp://ctan.tug.org/macros/latex/contrib/supported/natbib)>>
+>> endobj
+970 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [152.697 402.06 238.375 413.185]
+/Subtype/Link/A<</Type/Action/S/URI/URI(ftp://ctan.tug.org/macros/latex/contrib/supported/natbib)>>
+>> endobj
+969 0 obj <<
+/D [967 0 R /XYZ 152.694 705.06 null]
+>> endobj
+322 0 obj <<
+/D [967 0 R /XYZ 153.694 467.205 null]
+>> endobj
+326 0 obj <<
+/D [967 0 R /XYZ 153.694 445.246 null]
+>> endobj
+966 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F30 599 0 R /F31 600 0 R /F8 596 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+973 0 obj <<
+/Length 1230
+/Filter /FlateDecode
+>>
+stream
+xÚ½XKoã6¾çW(•Š5#’zP=¥¯衇Â@»{ %:b= Q¶ƒ`ÿ{‡"ý£&T¾˜”LÎÇÎ7?ß¹s|çÏ+ß´¿Î¯®o s”D$ræKG E”9Q#BCgž9_ܯ˜Øܤ¹|]—]á}›ÿu}{:‘Qä30ÚO¨›Ê#ÌÝä™h½Y®Þ »;éa·ãkõ.tÁ—yUš!Û•h„î¶]íÍÀ€hÚ´Ék©ßƇ.‡Ñ° g–0ä“À™aŒ’Ð,Y®À¥ÔÍÄ’wk‰`Nºó•hÍíªêÖ™î/4š~àiªÖ*Ú6_¬Í»MÎuGÙí}DøJ‚hハ—Š•|& Ø§ûiU¼Ìöƒþ ‡ŽÌUT–•Š ‰»õHìš~#
+Q¨8›å7úõªýV=Àz+ý23-ׯK5¤+D“§j7Ô?ûèêb£FˆÒ ®ö=W ·ÖÒÌôêq
+£ät;Ä®†@ó¥zü]¤kÈŸªE×Êßô.Œ ;3ìƒOÉ’¼rO iC§â<~²7Œ'‘8~Ɖ…¸ËË»¦‚Í
+dfŸ…c@°—,x.ZrwÓny­kΘ¶ ÁŽÙ½ìîfL_æM+eu©øÜÑ·xŽ(ˆÉ ´%/€7!鋤@ßíWRfæߧ˜ÆÐ9&{1+¾OHƒäâôaþ[èç=þ@1r!1úñ:‚% ÿ@ø9©$°§>¯,zO
+±øòbo¤ÐáÎ,ù@%þ…X”à7³h<h㉋ò(¡äÑ5xO%¡UžÁýØμœsú'v ¯¬ Ile}-¤jzãªó÷/óéIƦ@)„bQíT_µö0ÉåăàÍ©SêÙŽúþT¯Úš§bð®¦
+endstream
+endobj
+972 0 obj <<
+/Type /Page
+/Contents 973 0 R
+/Resources 971 0 R
+/MediaBox [0 0 612 792]
+/Parent 960 0 R
+>> endobj
+974 0 obj <<
+/D [972 0 R /XYZ 152.694 705.06 null]
+>> endobj
+971 0 obj <<
+/Font << /F28 597 0 R /F8 596 0 R /F7 744 0 R /F35 743 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+977 0 obj <<
+/Length 2497
+/Filter /FlateDecode
+>>
+stream
+xÚ­]›Êõ=¿ÂWÑUqæ‹aÚ÷JI•J½êÃJ½RÓc- pv£Õþ÷ž3gÀ€gcoU­´ ÃÌùþv´Ø-¢ÅßÞEîùÛÝ»O_ô"Éân»`R…Z±E¬tÈ…ZÜmÿ˜`|ùŸ»¿ú;IhâXâY®C“H€c}cBÛïÅ\åe›ãs¹R\ß"½ðŸáÞ¶ `c¼+lÅ¢Ð(3à>¼"äZñ"6L:H0“¦¼ÊË{öëí$ª›Hô3=&ð 1¾éj³kêÓñv¸Ú—%¡ŠM÷Åò=˜Çü‰£P(
+eÌ&W×]Q”uûH7Æb°e3ØûG
+2¡òl;žp+ ‰n¦lóeOÅüìK@îî,¬óè¦t±.¶Oëüpì~Xl`à^4þìÁÙM%
+þù³›ÛB.啻묬ÛÜÁ„’©k÷ï맟„^#!h.„
+“ØA¸Ã\Ê¡v™–O­/BŠ‡kÑOØžbÓ B®ÎÅÃ%HòH¼
+ñ,Œ)\É0ŽâQU‚ À|©_
+'8ØÑgoÒa¬YÉ7'6¤(ŒL<qàWUaÄ`‡4C[°œ¸§%r¦€(äX«Çd[¡@Z¹bH
++¯Üµü N–ôÒ×ßmˆ%²$Ç-”ÅÞÛÓ»­çÁmV¾Š}[7"^
+<‡
+¼³ß”mWW<dÒíöÕb´ý@ÕÖ³@U‡CÞ´´ñ¸G|ÂŽ¶¢ÑšÌÇDµ·¼‰²þúv=rn›FZ§%íBûˆ¦$8»}Ÿ©tâ|ÉήÒÎ…Ò
+-“ÌGVãxñÀŽö¢¾. 7Ž‚UWЊ¡ºtàÖ¤.ø¼©‰<¼S£YƒaºQlõÏ”n¹!YçrcaK{óÔd  FHJSŸîK· íóÑSëq¤¶«‡AKïƒß—Jiyr¯þ’T€1vcÙ`Ä`ͽǧ„ÿØ€.™úr®‚J}V›´ØÇ^s™_úÔÌÒ§‘®ƒÞçu[ åê›z(GÎTº ¿+*T§âN®j˜Ã*õÕæ ´`†ñbuñ†^
+@kW:ãr›Ó
+T$GÕ-ýNÀ£PGÌWPÐd g2÷Ô$¦Ý4lÉ Ê{ÓÛR) ä9tãö‹²ýJÕ|>äiúçÖæF ûi¾ºßpf’-1¾yÕ¨å[çFBŽœÏ7FÎŽØ@AÖ‘}ƒr&^·´›p’º
+endstream
+endobj
+976 0 obj <<
+/Type /Page
+/Contents 977 0 R
+/Resources 975 0 R
+/MediaBox [0 0 612 792]
+/Parent 960 0 R
+>> endobj
+978 0 obj <<
+/D [976 0 R /XYZ 152.694 705.06 null]
+>> endobj
+975 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+981 0 obj <<
+/Length 1164
+/Filter /FlateDecode
+>>
+stream
+xÚÍX]›8}Ÿ_¶m"m(¶±­vÅTꬴ}i¤}èô€3a—/3“Q”ÿ¾×˜`Hc¢iÕ—Øûžûab†eüuc5í‡åÍû{×ðLaf,×b®Éˆk0ꘘPc_f÷q$ÉËܵg¿Í¶Mg«ù;3”ðˆñ,ÎT›ÆY¤zbˆc«ÎÇì1‰«zx°¨'WyÚ̹Ky‡AcŽG±ÈË
+æ"5åªÍr1ÿºüÛX ÛôlZdz´ñ¶H‚ÌbÏÙY8_ Yž¦Í£tÞñu^6Ójeç¼úåw51ß–j¼(ózMÈ£mÉ+5(‘³d(«­hM½¨^˜o“¨¨ÆKþ\ÆBð¬ŽÀêûþ‹Z£¨ esXþ$xÝqžÉ¤˜ÒÄû{Ç`¦ç@Ñ ~ BÀ(ÖUFÁ®š u¡ÔÌ®KíšÔê92òˆ¯eSŠ_=…Æ‚ûÛµt,ðÜkA¼LLìôP.dóéné 9¶#˜¥(±®õÃ$¯ø+h5|É6µ]ïÀ*ß½†‡Aýèñ¥º´ËGÈÄ=Òº¬¿Eˆ­•¬¤±~Ì[Å‹  €Úúh€g²EµÐƒè)ÈÂzc„¾Ä E ég\ŠiAùñ:Û¦u„@™ðÿ”]ñìöÂrÆ°€\ûÖ1¬?NȇúMPãÉú·Ÿ÷Ã~<õ
+xè£{1“Bö´B>³¤ûçãÒʾÌ=—wgK$6:sþ˜wñ0Ô¡oø¢µsÇYà~ÑÚì×¼­GEÉÏì\Κ°é›‚]_¸
+¦”Á™^½ËîájAð]**X ^vbŒžnþ΋ýÈDYÄTÞŠh66[Ù9L)°÷–¦Ö”9g1(V‹[ÐrÌt-s
+ÝK<e›ŽÕRúp/«–ž\“ Õ£ æ™ÈA¯Å›Â(6ñ±›Ä(Lïkz›UÿÅú'š¡ïÆSmŽþÑ<ÅÈ䩪ýÓñ£?;O1ö–<ÅMž:«ìÎ+¾–Ë€Lp#¿nÕ÷MþG<”ÿbfѾ§æ_ÈWU¯úïÄŽ³·sx¤ÖPí´GëŒ2]Ê žéºÍS÷r»âãòæ½.´
+endstream
+endobj
+980 0 obj <<
+/Type /Page
+/Contents 981 0 R
+/Resources 979 0 R
+/MediaBox [0 0 612 792]
+/Parent 960 0 R
+>> endobj
+982 0 obj <<
+/D [980 0 R /XYZ 152.694 705.06 null]
+>> endobj
+979 0 obj <<
+/Font << /F8 596 0 R /F7 744 0 R /F35 743 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+985 0 obj <<
+/Length 1807
+/Filter /FlateDecode
+>>
+stream
+xÚ½YÛŽÛ6}ÏWÒÊ@Ì)J¢úäMŠ^ЩÑHò@Û´-D·HTv]cÿ½Ã‹dÉ–Ù-úH¦È9‡3g†—u'Û‰;ùá‰kŸ/Oî^{þ„¡(èd±™`ßCAD'"_ëÉ{çÙt†]ßu>`®ÅF=æR¤?<õõ¯xóp86ë7x‘ûÇÃãáÙôãâ'€(ò££I?ôµÉ¥ØÆÙásK.ã<Ó³<ÎÖ"“½±¬K°kèHñ «Õág±ÿN›Î|â;O‰zoþÙ>/²Ì"t»Y¦ÈÖ’g¥õÏ_•±x›å¥¨
+¾Õ`ß &º!XÆ˘ÿ¾«åá"4Þ½'ŠB©
+*
++Èúª.DÙH¶mP–Úâ~úœÌ"WçüŒ¨'9ÚVFa•YÚ˜PºŠ:êþÐȺ¸<„A xž.§ÎÇaŠ0Áv`ЫAË$_}5»Àà`j›Ts‡g–ŠrÛ§w÷šM p$PQòdâG( -ÅwSæ9b:£!qÖ⃋°úå9 RóR‰•ZAâlk~Cî§<[›127ue{ßïDf>U°|8’—rŠvpkµ#À)aÎÞ´*»ÍºÐ™àlB'™@7Ï
+ÊtÎŒIoŽ±c¹4ÕÉtëöò”ß½¦Wl¬çÆx]i¶žG [Õ¶ÉË”Ki?xNQBg³ëê i”;. ,XG,Ì
+0ÜÉ“!Ï æõìÉûù¹%½_ÂÝ°»A7$‚ªY—YeøCÈÏ¡BØÑSüb 0$HKèÛ!ÅF([ ¦jë7@8‚TjÁV¼àË81ŠJ¥J×]»â1H
+êv²¶þ®6gv0¨Ø°Èëϳ!÷SDèQVp\«ö&`‹ÕK]8Õê²
+£¡3«ë#7T{qª°=WÄõ^_o_›³Ç±eô19¼ûp<› VFaŽºß°·
+endstream
+endobj
+984 0 obj <<
+/Type /Page
+/Contents 985 0 R
+/Resources 983 0 R
+/MediaBox [0 0 612 792]
+/Parent 987 0 R
+>> endobj
+986 0 obj <<
+/D [984 0 R /XYZ 152.694 705.06 null]
+>> endobj
+983 0 obj <<
+/Font << /F35 743 0 R /F7 744 0 R /F8 596 0 R /F28 597 0 R /F43 827 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+990 0 obj <<
+/Length 1621
+/Filter /FlateDecode
+>>
+stream
+xÚµXKÛ6¾çWøÄjF|‰zqS$EzÈ!1ÚM²L¯ÕÈ’!ÑÙ],ö¿w†¤´’­Ý•¶íÅ"‡ä|3ÃyÑÁìjÌ~yøï»õ«·Ô,$±âÑl½›Q!‰’tJE—³õvöçœòX.þZÿúöP"‡¡°{#"ÃøØM_)[½ÃÏ&Û§Ãî`îpvÌ“T¯m£«û׎UuéY-i@b·¨á(Ô\ü|úi½:èêJãÄì«Õê9 ¨RSÒÌè[T8oÆãõŠ¦À•EžApVéï<Éãñâ)xFߘs4ãD³γÐa‡K*H,„c³ÞëÅ’s>ß•y^.X4¿ÎŠ+$‰yV»¥Bë­Þºñ©X057Yîø³.
+¥K„­uvUd(ê°îÆD(C"© ¨Óƒ#9-Ý,ÉŠÚ»eˆñ¾B`Y:Y\*_XªõCR}; $ÂùÇÝ>¶
+÷5àkMTYi¡ìV ×-&2¿» ¼Ü„á×Ğב3hÎ. ƒEÈ’žqƒg€cgGÙ·yƒfÚtöaFèì1€¨$TD
+W
+·TÀBé†OؗɘH¦&ZxÙë©Yà[ f5OŽGçüIU;JVà7rÂ#aÀiÜ>È…„xe4˜,£ÇÒ¤ŒPÁIÄ_àïËæd/\gyîÂrãòNH *ê"î’¼FŠŠ÷RÐYáá±ð­—j ¿˜Ò¥^jœC]¹yâ^Çô`SŸ9}Û®6¥ÍS¦:éÇ®¦ÃF–|?¡U÷.j$±W5ÞK´ÌÊ7Jl¸­Wm[ÏçûdÛó]øéÉo°Y^û:”N‚LÈhZÍùŽ‘¤«:k2¶ú Õž™t D¿;|Ý¿jÛÌšòx×ÜZ¿¡¶ÍUç–º§ñUଠ÷š»áûƒÛ3Û™ÿ ,²â¤§1ùTNaóˆR——;$ªº%;ˆÎ€"ˆ¡KökInt•`C\;°W¨ÎÏ7"\gÐ'ÒúD‹áÀSLß.#o£ÝƦ<âØåó²^ú*§bEýœY»K¨‰ÐìÙ!ŸÛ¦oŸTIjl[W9ò±Ò©Þ¢”䶢µwÓ¥¶!#*l·cÑ–`W,EdÛi”ÜËä*:m1±#ûþ€%ûgÉÖ)É
+-¢ì×¹Jït¥¡B=ts UÛµVnÐé\°Wµq» ËóÖG¿k—Û;¸Ã¸NÑðHìš±ª
+Ê»(jJîÉqÙ7šò*~&†-}üÛ8~ ô“‘?
+—>ÿ¯ÈÓåKÂMµÌèÄ"‹";&Ü÷ßþ‘³Ò‡£¹=OëwÄþ…‚ѽO,í_}«ÃáÐ’ï)ãLÊÿK“Š˜´ñ‚)F•ÿÖ¨?þ¿F Gõ‘?x(¼$µ¡ôDÜ7?2ìx¿~õX^›
+endstream
+endobj
+989 0 obj <<
+/Type /Page
+/Contents 990 0 R
+/Resources 988 0 R
+/MediaBox [0 0 612 792]
+/Parent 987 0 R
+>> endobj
+991 0 obj <<
+/D [989 0 R /XYZ 152.694 705.06 null]
+>> endobj
+988 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+994 0 obj <<
+/Length 1646
+/Filter /FlateDecode
+>>
+stream
+xÚ½X[oÛ6~ï¯0PS€˜/ºa/Y»vÆ¡ °ëh™¶µêâIÔšÌÈß9$¥HŠR+Û°Ë:$Ïõ;Ê_íWþ껾{¾¾yñê]´
+Iñxu³[Q( «0ˆãÁêf»úÕ£‚F—¿ÝüðêPb’„¡0{c„ ð1›>R.¶j‡M¶É´*ÞT¥ÎÊV]ÐÕñta9 …­‡5õI$½°xFã„EÑPØu¶»½VÅQß™7'ôáÕ'$4G™ªLuU›õ¢(zòýizä~N='Óª÷ê%g}Ñq‹W ì`!î„ÓxÙm?_ÆÜS—kι×6jkÿé
+ŸÂKÛFWEö—ÛP•ÝŸ]×G8Öp‚ÅÞ¶MuV•M¿ÍèÀ†J00%Jx§g)5øà±®œ³nוe¸iµ\V–Wå^Õ÷€ú¯ž÷®à‘R€
+ƒX0j»À(æJÏ`n†µ¾E]ÿp3±¢‚$B€0Jêÿ½ª¿U¹m&!H]Ô8„ F6ÂÂS·*mue©gÂCÀ¢”¾®ÕmV«k€î'¹W͌”
+uuV(2hîSr0°G4óÿ¢Ñ‹øwíÜe6¾W[õѧ •…žÄGä2E”"e˜qBbœÅ¥ !ïÝÓ8†ú µ“¢ê½q0Pkµƒˆ•©jœ"&|°©QGYKÝíûœéÃ@ÕÖ/×Ô+²µËš2AD€>0®"¦€ò'nõ„Y¾uÀ‚/O
+i“—+{ QÚ¤}%ÖUK4O ÚÔÂF6
+ÝgÑS›øÊ| B †yÕñh*EeÊ=RP, b¯i튪›´ÎŽ€O8GíPÒýiìft½¥ s@óAÕŽÝA–v \YW”ÎR™#¿+¬H ’£qÒ eü‰›T~‡!=ŽÐ€Ðð XSï÷ª­K™ã u7qè]®,Å¥!l,ä'ò± ÝëCQ4l¦V[Um×aɲ±Û0
+C…»ô”˜Ä¢SH£#¼@Ì6Vø@DçCÕæ[»¢Ê¦Åú LdÑ<lbŒ$Ùêj„ÄÊFbZYÅ2xD^«+™BÉiƒªc©:…† œÑ¼÷ic#Ñu¢áž+ȹ5cËí?Câ¦(‚:ifª˜vÖã4
+wv"†ûgmZ uŸ(œ.Ò\ä<Êžž¡í\gãáÉ蓺=Bá;­ê§r°éQœf5²b¦ñ³?Ë@ñ¿xõFæm ÎÛø Ãóˆ[ž&<ZT_àþø¼êÂãÅ;|«äÉ¢£®V 5®ROÌNnìŒP£Fèº`N¼½yñ7.™\
+endstream
+endobj
+993 0 obj <<
+/Type /Page
+/Contents 994 0 R
+/Resources 992 0 R
+/MediaBox [0 0 612 792]
+/Parent 987 0 R
+>> endobj
+995 0 obj <<
+/D [993 0 R /XYZ 152.694 705.06 null]
+>> endobj
+992 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+998 0 obj <<
+/Length 1764
+/Filter /FlateDecode
+>>
+stream
+xÚÍXIÛ6¾çW•˜©=½8:M‹6P=$9Ð5f£Å•èxƒùï}¤4’"g4·ž(qyûò‘îêfå®~}á>1¾Û½x}í«˜$aè¯vù*ðI†«0ˆƒ…]¶úä4êv«b/÷…¬o~<Ü­¿ì~ÿŽÚŠú„2¶ÚPJ’ÀþL=ÿ؈VTj ªZ‰Ñá××ñ*ö,Döq@\7\ ü½Ž=G¬7Œ1çxR惛AqYØ®Ò5‹œƒù•ÕšÅŽª‘Õëk6dA]F¼Äæ½|å¬n©\†Iw‚WÙHˆƒàÙrö %qU6cݱIB¼(ìNÜ°ÚxALbšŒíý^4`¬0¦ÎeÐß®sljï›ÌÖÔ±ëÜ ™Èù©PfŸjW¥0â›õ¼nÌZÞÔQ@¢\o€€R®¡[Ûžžh‘Y‚µ‘B#ñý±¨ õzx¾3Ðßý g½
+‡íî݇m}l.†÷eŽqÏÑ[Äq{ýç‡m!!««â?娇ÎþÃE*!CjÀÁ‹ÌÎÝÁV^…N±³¬nL4²²‹º”òÖL§uÙUHa£­>©7³-q:N„Æb2›þ/µ= èr*+°¸NwlÝ`ƒÐ|{­fò›’е~R5úu+«J4–ݤóÄ$ôXw(“H•üf+“Pç€vñ×ÙëT`ý[š‚¥wff+tÒ,ê18t#í©.ãSѶèÓ<@7…“îý˜YRð!°/ãÇ„Yoâ„‚M oI”jl)xÕvç±VŒ(¥µuo×FpºA¿kƶQ@;;=ÙÐ7Ý‘N†aW]:æ…Â^™©ZQäæÓ˜w¸Ó(èÛ’+™š_h왎l?ri©ÕùäÙï ó…Í°h» tvØî­ýº€ˆ­Ó£>˜ ¾§}jJ8üTBdÂ.œ}P§Â kq\9µˆ$pJ‡NykòË×xJÏÙýc!"Ñ“¨Íh—ѧŒ6=1ÎúÍ3*e6„N~ÀD7æe
+A[—Bl¹ðÀÂÿždÓ•„ý -½ýø—íF•]}ûÛG³$2© k‚eáàŒM±ºúQßò`|,´Á¢B{!Ù—Üppt®+Xz
+žD2Oá“>¸ºYÏO Â½bË‘P° ¡ ý´Ü»Á,
+<ŠÇW@q«ÚÓQ4mÚÈ£š•Úžš2˜C##aBG¸±nJ^äu5‡sìö)å`å÷wÛ†ËVd€W¾êt;Ü"[^¥‡ºioÔ=ÞÝT©/l`ãtÄölD\+\$×»ºåå”ç²Ý‹à¾>º•¤mÅK¼¶±ÀI·ºä”Ǽ²YjV¯(þ6¢à·sì Í)ûxû1±äu­.
+ßË8¹vD$Š{ƒœL
+endstream
+endobj
+997 0 obj <<
+/Type /Page
+/Contents 998 0 R
+/Resources 996 0 R
+/MediaBox [0 0 612 792]
+/Parent 987 0 R
+>> endobj
+999 0 obj <<
+/D [997 0 R /XYZ 152.694 705.06 null]
+>> endobj
+996 0 obj <<
+/Font << /F35 743 0 R /F8 596 0 R /F28 597 0 R /F7 744 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1002 0 obj <<
+/Length 2843
+/Filter /FlateDecode
+>>
+stream
+xÚ¥YK㸾ϯp0VÆ\ñ¡×î!=ÁÎn&‡ I€Ù9°-º­Yòê1ÝFÿ÷T±HÙ’å7r"E‘¬b±_ÃÅÝ"\üò&tí_×o¾ÿ9]d,‹E¼Xo<NY,ÓE%LÈh±ÎŸ‚õÎ,?¯ÿþýÏb45c) „4ç7.ÕmqÛv¥›|:We,QÒÏÝÔû½®òåJÄiP´Ô견—" î—" Œû©èÀ·nhà¾è uKí{EEmwOÎ2žxâL÷ç
+É¢Œ‡ ¹* [®”Á¿—©
+¥ªFîîqýb%Ã…B.VDNV¹)5ãq¹’RZ– £Ýwõ^wņÆ+ª;ú¨·4çÿ‘da]'è(d2Sg‚¶¬ÔG*vÀø?§ôíÀïõ-£3ò4eÆgD}X !‚C{Âa7&ï›9ÞcÅ"9bnnà
+Ô‡‡i|ÜÒ¢ªîÞ-Wq(‚¢£z&ͦs+`~P.yàö5fÓñi®½»19˜Çù©Ã1çW;KYf…>UÈ‘&J¦H´ï]ÿEvp èZSn©ÿ[…÷îø]Wå£_††Œ=«|iäµûÞÝ[ s ï1±QW§‰«_xÙN/'ÝäŠeJ²Ž‰sêäNAû=: —zƒ__Zú4‡²ØÀµÌXŸŠ€LúJeâà`¦_µ×Í—þ€·[gEE„íÏÐwÃÁ»Äç—ŠÆ“ëN×}wÓ˜¯çÄSÉât0ºw$:M&¾«­¶Ö_ès[;ÉþóÿÖVª)gœ Ïàä´Ãû#²–|2üŸ•üµnü} ¡mÁ¿1â.YÄ,K ¬àÁx’2‘ K{ÉÚ͸Š%Í")%VVŽà}’SÙçfû‚yúó=»Ø"ˆ1¨©jD2"wSlú
+ˆ•É½ð‰Ôó,1·Å”Z4G-aYªN©‚ñémgšY=»Á÷0™ù4bëy–)¢4e*¾Š©s.Ú{8üŒ&¾†vòMñ?¿B¼éU—yWÖ·ºÄ^iº´5Æ®g û–î>_­™Ix¼ï>TùOµõkÝÓ ‡!Âà›¶‹U³4#
+Áq
+9Bd$¡+‡™…£Š—cœ¥ èüï¾ÅL³y¤Ý轜ÐúŒ|‹šÓn8®œÃË8Üîê­û.ß¡D¶CžŠ€ 8š–ÚbKí©O‚OÂÀ>e„,ïÔô9bð}5ÍÀkH ãøĶGÞÌ`þzk5ÈY´Iò±?#u·õƒ-µÈUÝÓä76#Ût®AÍïu߀§ssÐJ½çt%íæÛd‘&MÙ£ñA$ÈmÊ\
+ÁT–W/cpÚê¾(KW“NI9>©Mº$÷:ÂíCÀ»ýìÜ]v”iq¯ÅýÎ^wÞÏsW+/º€ Rï‘?ºààGŽ·ð±<”1·EœŠÑzñ{íÎBPd¬Ýÿ° ©5=QCˆApÇk?лzÓ@Gmvc§¹„Ý:eøqë*=øÏf´v”œYâœæÒÑ òî[CÓ\HlÏä²6æíÌÍëËœ7à¦Ô™™I8ÈZßé¢jçR]˜'1%¸ç…è V%„šDOÀ Œg“€ñ7°õïP<J¡!a¶Ó¡Õ`Ÿn¶.Èåü€yrŒežŠ~n%9}Ü¢¹;qP8j9!ùÁæÄ7z)
+ˆÙÇt„GaR†,¥‰¾#3ðš êS&†ŸêžlË:ðŒ¬o5Ô~U1ßêíj'5MÝ üDèl&|€Í¼`‡ò dÓÛó¡Ý!CÈìÂIé¯k¬áKzÅÅv¯«á‚CÑBò±éè µÓŠ†D;=^¾DÅÏ[[ ÊŽÿ+óà—=²¥ÚR«©)!ªSB¼îêæÝ\ôÒ|¿»:ß]ºÝ xHW®›{_ ¤{9V‚ù+^DNêNŸÞòÏOîõ¹Û
+endstream
+endobj
+1001 0 obj <<
+/Type /Page
+/Contents 1002 0 R
+/Resources 1000 0 R
+/MediaBox [0 0 612 792]
+/Parent 987 0 R
+>> endobj
+1003 0 obj <<
+/D [1001 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1000 0 obj <<
+/Font << /F8 596 0 R /F28 597 0 R /F7 744 0 R /F35 743 0 R /F43 827 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1006 0 obj <<
+/Length 1394
+/Filter /FlateDecode
+>>
+stream
+xÚµYKoã6¾çWŠ•„+R|ˆíÅYt·hQôPøP Û#Ѷ[,j“ Èï”?”µ”u.1If¾ys”p²œ„“ß.Âæ÷Óüâã1áHŠ(žÌL O8ˆDl2O'ÿ˜
+1ýoþÇÇ/p#É9µ´A\bà㈾âˆVwY9³‹µªŒÝø·v\7o]ãI&;ñ u>„kÜq•Ã`×¥ÞÎ’ÌèÙZ›Á˜ã°‡;HÆ´åþüôS»†æ Vçép°ä4ØX£n8FŒËïrkH¹Ñ“ܬæ©^{ëi„Ög‚!vÅ,jSo5°¶+bfŠ;ˆNV:¹ë³—çw(šŸÕ^âö‚€c¯x½ÔÂèír[Ô¥3˜ô`Wú¡TyꞺmž¾½)Õ)ëuiËsZO†o´žsùûI<È~³lñðtk³ªtëWJHo˜ÉÓI>¨„ô'½ŒNê3
+, ¶ºWåp´§³ýyس&°–Àë"_ö‡¢µÄ%‹Ãrù gmh»HMª\môôšlÍÃLÕ¦Øßô%n2Ý8éfŠƒÇ¡Ñ%¼”'CãîV, ÇFZÿ5àîøœiÁÂ÷ÌaFçµ,=c’±1ÉXÈ%ÙAÈ7}ÿµGýþ8•xTW?Œ*~T?ÿ0*ù¨~ù.ªx"AáVE†%€‰`/n¾Ž”ã`%­˜^ã` ‹u1%"¸Ïò¥}›)‰ƒº2žT?è¤6Ú?*òõ£?vx½P²+ †$í®ü¹2·Ùí1¸¨ºË*Ï}]¨T§ ÿ<õ‡+Uù“JR—þ 3•e *ŽbÆÀþìßL}¥Ú‚
+FÓk.yðû «¬6Vø¶J¶YÙ ‚¨LVä‚!b’ì+¸RÖOßìðN„ãàÖsÒ¹Ýk˜ë9¤àæ+8%a-u¶ðd‚¢O_ŒàêÚ¢·•Ú†`òHWÁQ¿PÃ
+Ä"ÞhÎ[ךÄÒ¬ìë,Èr»1EÔ~8ŒÀwŽúPy¶í…¨<«6þdøGÙr«Œö›²ÎÁº‰5³©a¥Z…Y `bðæfÎÌnÑúöÊ+¯ªN §±ˆÇѾ«½=Õƒ>1±ë£cåE„F-Í}f¬Õ¢è·G2©%vMú5óÐå\CêÝŒúj#ã
+ƒh‹#6ƨ²l®Î³´É¶UQŒ˜e6ËìG9\SG\|ð°‹Ï˸d…ÙÅ_7s·vÖñÅ…áhЗ¦¡X1NŽq3¬í)ÍvèG†é€/FÏ#0ã<¸€ááSNO£Äâ“z²¿uU¬ÛÒJ8‡ªim–&ÌþFÝfkh@ðè4µ×ÝO›êÖSV™@˜Ó“‰¢tÉ¥Úò>+(²£Yg•^õ¨‡wÛ´Jˆ¿ XÜkel#wëR¹îx7e ð²­Àœ#.öë«y¥Q²|ÉJ•ÝEáUW–^š³¯ê´éûv‘Þ¦nóÒ9Ž¥K
+@åAè÷Ä(쬷m`%k—ÑV¯ÕC¯›ïXµ€•ÿ©²ÔVüHÐ÷q¤}‡è‘Æ
+ù[š©«ÆM‘èÀKÅÂWú?ÈÖâXL
+!2ñMo^ÄÐywˆæNƒŽÌì9¦¤Ï;ç;Çÿ|¨zoˆˆÊƒ’]R/²\§=}J‡¤;‚]—éþ0þ" T|0@738÷h>Ï/þ3¾1
+endstream
+endobj
+1005 0 obj <<
+/Type /Page
+/Contents 1006 0 R
+/Resources 1004 0 R
+/MediaBox [0 0 612 792]
+/Parent 987 0 R
+>> endobj
+1007 0 obj <<
+/D [1005 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1004 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1010 0 obj <<
+/Length 1214
+/Filter /FlateDecode
+>>
+stream
+xÚW[£6~Ÿ_E"RãÁæfö)­´Sµ+µJUU³ó@‚ ¨83!þûcC ! Ù—8Ž¿s¿`h;ÍÐ~2ÔùÛúéù…jòâhëPÃEŽI5Çv1mmh¯ú¿ jêl±´(Ö·Ùa» TÄ#ѳC!éß l%-N%©œ®äÄ:gž” <ò¹$~ÄI"ii¦H›Åà™¤qYr¿/ZÖãpñ¶þóù…ôõ&ÔF¦GÀ¨FãïØ´¶‘ŸƒPÉÜçµäX-g\
+miÕsm‰1òle¸¿å?I>KÓ4õ€ #SˆGK62
+2L÷~ñãcxrëùtÉx’ä•ÈXá<!j:8™ÎŽ94)?T®Û­ü àÙjïo¡'Ë2•5øÉz½z
+*¨eˆŒ®W¦¯å"ØíZ-~…ycxºÜ'‹2ÎRIÈByf®$ñ&’/&’Xø
+ón0Ó€%N[VuçiòR9yWØÒ³B²|D¬`£›,,>–7ìª1tmiiy9—í•áîÚÓr|½\51€»·j¶‰¢„WW–Ç®Ø7l§»";äW±a gS² çh÷~àªÒ­í.·nÂ本ÆÅëU[°íªÎuìe×5Øú ‡^âôoÕÚYß•>6J¡RüvŒNG:›^Ygï^póñÐäíVȯȾñÑ/i±ãaÒ]¸ýzKxpj ÒôJá/uÿu†ßTt:YWã~Þ¶Î<yf†»¯+—6Œ¶KUͲ°ÍVßpè7ö!ÿ„™šgÂ÷Ðåïãw&Ò‚•<+ÀU#I¦œ—ø–TßTš<”oþGYñ >ªùÞŒáC‚ÚðÁ >öLKB9xpãëúéy~O
+endstream
+endobj
+1009 0 obj <<
+/Type /Page
+/Contents 1010 0 R
+/Resources 1008 0 R
+/MediaBox [0 0 612 792]
+/Parent 1012 0 R
+>> endobj
+1011 0 obj <<
+/D [1009 0 R /XYZ 152.694 705.06 null]
+>> endobj
+330 0 obj <<
+/D [1009 0 R /XYZ 153.694 598.712 null]
+>> endobj
+1008 0 obj <<
+/Font << /F8 596 0 R /F28 597 0 R /F35 743 0 R /F31 600 0 R /F7 744 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1015 0 obj <<
+/Length 1631
+/Filter /FlateDecode
+>>
+stream
+xÚ¥XMÏâ6¾ï¯@­V
+RñƱ8=¡•v«öPõ€´•º=b ]H¨öe…øï±@xí ÎÇã™g†„£Õ(ýò&ô¿ïgoÞ}db$IÇ|4[Ž¨`$Nù( ‰`g–þ
+ÞŽ' Ãà3e|_]Õ¥ÑÙtgÊZ/j2½ÄÍi½ÖËb«Ì—#N‹RvªÈplôÒ®Mu‘po£Æ4˜ëÍéôvü÷ì70gBC’Š´UIE"‚Ó±¿-ÿŸEgí¨úuÍ·v[Å ë¸U S.ÊLŸnœ‘>©êçW¶ŸqÂÛ«¸X–5NoÚŠâ?™pBÝ`±VÅJW÷ü›ëU^Ü÷†¢ÅceÊý¯; ?7ÞkÀðX8ÞÞÓeãO-kmpºÈtåcàHÞß}LF1I&1& I9ƒc‚p¹cSÔ짚$"‘öLÇA£¿NÑP4çGzRâ®öl%Ñ€’ˆ‘(éiùNH.,ðr/M`÷ü<=î3ˆ‹Zê§ A¶Ñõyô1z¡ø!*tèqÙÉcè·ôù ÑBøF!¡ ï3gê͹¾‰™AÁq¾3Ï癪ÕTívOß¹ÔóàS£Oq ÖÅ[JÝÝÙZ',NËV†¨{EPƬ—}—®4pš6ÇóÊ ¯-ŸC
+AáÆp_U^nº, âóaµ?ä›\™o×w×å&Ë‹Us¸7 Êzb¹°I—Q$4¹"ã OSëô §”Ç]O/âÊÓ(n ˆ¤)‚ ‰¼^G¤}PD2踠Á¾Ò™[ªK·¸mýÊÚ*ÔV;(¢žÑ>åŽ1(üáÁû|>³§yHPï$üÑvCHøQgùO'
+稻žlòreÔn÷¾% lòŒ(‡^‰÷ ú„Û¨+”A¡-IÀÈš¿™F8Š¡Ç“!aýÜ=õ8ÀQ‚HÖRZ#na ûw¨#þŸrŽu·”Г8l-Cœ(³DkU¾Œ­F§¨ðšåÜó”BâA™søÄþÁæ›o×j]î7™g°Wp‰ÄÂ3…/”¢‡ ¾¡ÇÅ).·6‘ê5Ä Vîá7ù—ñù ê±Ä‚üñÈaRöüW¬›\Z-ðþÚÍ@Lj—>ô`m« 7ÍÕÆͬið{6s
+°P$ŒûÏÑyL5”f†<åD¤=а{7ùj= BøìÃÍÖˆ%QW Ê²EY@øÕÕ&oR²—‘Ðȸç.óQ'^òÊçÒ€sk`\Ò´F’°(íãñ‡q„¾€j7Xê8”ùôV¥›Ú*pew
+wxÔí‰#I})’a  Çõk7°gЂ§O•×¤=þ²Æ|î)„Ë-SF$v¾î”®Dzp_ÎÙ”-7Ùµ`U®+…ƒ•Þ)|cÉÎ, ’ž±ö×®êšÝÆú¸Ò…6jÓÜ­ÍÞ«·N4ß:¤ÿÁ-U±
+endstream
+endobj
+1014 0 obj <<
+/Type /Page
+/Contents 1015 0 R
+/Resources 1013 0 R
+/MediaBox [0 0 612 792]
+/Parent 1012 0 R
+>> endobj
+1016 0 obj <<
+/D [1014 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1013 0 obj <<
+/Font << /F35 743 0 R /F7 744 0 R /F8 596 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1019 0 obj <<
+/Length 1616
+/Filter /FlateDecode
+>>
+stream
+xÚ¥X_oÛ6ï§0“˜)Š”H‹µöÐîÁoëd‹ŽµÊ¢'ÑM‚ ûì»#)Ù²™ÚÝ žÈãñx~wt<¹›Ä“__Å~|?õæc’N2’ Á'óÕ„¦ 9ŸˆT+óròGôz:c4Ž£/4áª)mÔm«êâaúçü74£1ÉÓü”¹ÚlTYFáÇ}[9âÖËÐ;ó„ßi«æή”Ú¯=2ÖÅBÕÏS=]Óçç×£S³áT§ƒŠw­ÞmƒÚm”†É7Y6ÉÁLXSp’s>™1àcÌñ•t›÷ˆ˜d)閻꦳$I"½èt­Œ"¸a0~?y`&S"ó ô±¬÷
+æå ­pˆrÔ—˜òZõtB‚ À žbö—…) ÅIˆC’€PêA³[ÿ%LNÙتp—ÂœâÖó`ö7Î8í­ïlTºô+:·V„’<ÎHšÈ^™ÛŸ?Ï?}ž8Õ:I’Z+kNÓ>N3°–:žü8ìæÕƗņêÏà**£Rãì©>9%<¥—Þª&hF.H ”gíÖzW—îœ!Äñ£< ×)†,RÈOóh×`X˜
+æk·ÉÆý¨»ªi†kèÕžÉ]<e„³d|ñÒ'0ĸ³Õ z!óÞÑrd@䌧"¹_†,Ò¸ýÞܘÏ8nŠ¯Sw[Ën7…q4Fm«¾<ñ%¥y «½¯¼ÃT}Dº·Ð½3.xðÒ8aÖ=ª/ë¢ëˆó‹œ’Ë$s
+›+e®X;LY‡*3£Ð7 ÞýªO…A¥O˜Ü#/åÊb†Hm:r!
+‘íå2> œ~¿D@«êøm‡îæîñgÐ]÷¶‹Y§f<z
+]`H)öÞp±P¼å$‘ìÐ;ðè„—<omülK‚é+íÉGÅ(åå¯ïúF—û¦/ µ2,!LÊQ©Œ°Ø!ál!=\® ^^¾«u×íãž#€ŒîèÑ5 ¥ø-—èˆáð°.­ZüýæÙwÊòEQzoZù#JÛ‡òþo°°Fîá{Ž ~€FBþ'¥³K•þg$ü‚š@SÈø“ª7·K%[”´Ã–ÿ•z¡lPüër~Æc’õ-ŠHF;>Ì_ý ÁaCÆ
+endstream
+endobj
+1018 0 obj <<
+/Type /Page
+/Contents 1019 0 R
+/Resources 1017 0 R
+/MediaBox [0 0 612 792]
+/Parent 1012 0 R
+>> endobj
+1020 0 obj <<
+/D [1018 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1017 0 obj <<
+/Font << /F35 743 0 R /F28 597 0 R /F8 596 0 R /F7 744 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1023 0 obj <<
+/Length 1873
+/Filter /FlateDecode
+>>
+stream
+xÚ¥Xm㸠þ¾¿"8`QØhmKò Š¹½î(z½Ã5hèöPÅV&ê:V`;“ óßKŠr'Þ™ÌÝ'I”D‰ùT8¹›„“¿¼ }ûañæý§t’°<åÙd±šDB²TF“D¦,ær²('ÿ")óé}ÿ (Ë“DàÚ˜³8M[ô%â¢ÒÝt&céÛÆvº8#Ìwµ~تºTËJÏûiÇ÷ü
+3Ïw…,—y…$¼é
+µÞW¦ÖÅZ5ÿÅñ¯¿þø7EþV çIƹ€6gyìE;Æ“DrlaëàžoGäIY.ø-ˆݪQl–úÎÔØit¥N*õÓº.O“7+4¹A”1™äý žžWr Ag9¬ãètïùÒ,KÕ)»ëæ¦6Ý(Ÿ‰`iˆ÷Šà^Éøfµm{ßÊ& È$Nðº™da˜LÎ|?³À›U|¾ž7”ñ¹r¿ï> ^ÿl‹ÝF×~Ï€}Ê’$ë·tf£ßMg"J‚ý4N ý0 ìv:ÃQMÃníéÿ³Ë?´Ômô}§Ä,be÷À¦Q
+{E¥Úv^zÃX[ûõq̪ŸÆÜÝó%o;]AÜtþåA/trky°˜ÍF—Fuv«k8êâdqÝS˜"êÏõC÷'¹qn4ý­w|B³×+tßêœÛynÖ§˜#À^q#H9LÔÏš‘ºµê°'‚Âú[µ4•üY·­©ïh™]õ=S‡EÈøpHÌ°°}@¦eë™,цµj‰¨Ï¯Ží0ÃßË.NhHq¥±L°Ç );…éTg@X7úŠ‡ê ¾„2üåã??‹è‡“:€ÑIl5ÈÃ!Ù0÷n{å÷+jˆØ´ÇC§ÝsIâ5ï‰ýU‚íצÀ kØ̽¢áM/@ß©ç USÇ!3.DÀE‚! tN×ù)bÆ)``çôØ3ÙÆ
+endstream
+endobj
+1022 0 obj <<
+/Type /Page
+/Contents 1023 0 R
+/Resources 1021 0 R
+/MediaBox [0 0 612 792]
+/Parent 1012 0 R
+>> endobj
+1024 0 obj <<
+/D [1022 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1021 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1027 0 obj <<
+/Length 1994
+/Filter /FlateDecode
+>>
+stream
+xÚYK“£8¾÷¯ð¥cqD[ƒ@{ñlÄÎ>sª=lïÂr™h ]UQQÿ}2•Â#—é>aI)åC©/WO«põO¡ûþíáÓ/¿¥«ŒeI”¬ö+ž¤,é*‰‹D¼zØ­þ<ôz#’48µÍz¥A¡w}kç²À¬aâõdçu§MG¤æàÖ÷¸E©£;·ç"ËÏÇ4nâäŽÊ[š(ëaÏšŽø±|¬Êæ©ÍOËý¯ëÿ?ü{µá’eR—³,v²“J;½Ïû
+Ù*”MZ®ðíÊã©z¥5`̃6¯Ÿ4÷M눇£ödR‰¦
+˜âA;ë5hkt;eðHJÑ ;!¹¡an®ÎïìbÞ«V8U¨Ù‘¨… vdà¢?jâÍì6Ÿ1~·òFQän€~¡1¢ˆt€ý;MÃcþmM2™û‘w]<™²©‰l|’#)š¾Æ­Ö
+8ÑwzGÔp› Ü/¿Ec§‹TÆd
+Š76ºßW¢“o¢L2]éZÌOæ! ùùä¯\Èbûû¯Û´ós㈉P ÄdÅTL(åX%´ôOm½Veβáê2ºº¦r®š†Á©Ê ·ö|À}!#Åx2rß4¦¬Á
+Ûîy.§âL©h ?äN†¼¦¯þr¡ 󆲵´RßîYÑé5©qÁR•LM
+W]>Õeý´ÞÈ%¾müñ}'A^õš­7‰TÁ¿öû:º}^uÄKëÓ< Y<½Ÿ¼7‡¦}…çï×`‰gÆ‘iûh[ãd8}¥Ž0o}…bJ¨©¾‡¼ÞUè©ø¾-²Ðsom "08êßì*á¾í͉¬V Ëà(º«‚‡(€“`RfĉÇ)'JÀØ´K¤µGÊb5¶ðÃ<E½E§@U¶ºÞá÷í³‡°¿Ïâ ¯ÈÃ+,Rê–×yw[®O¾ÓAéT޼طw?ÚuÍ@zˆˆ%3¨ÌËÅF§¾;x¸]× âE Üe€3Oûú ÁԶóL–)¥ÍX·cÞ~Ãq«¿o‹Òh/g©~†¥Ñ/f` ž‡C$K¦
+ã”:œC
+ôšŒQÅlOµþï:˜¨HÛ_pÍ94¤ŠI\œ¹ê±x)K31Ô[Ìåå<cêb;›)yéM úE`Ä“Õx€‡"X"ø<Q¢LbœFx„¡º”p¦<"ç0 ¾B.ñì:8>âï¾3õ_ M`£¿Ô±À_PLT%ú:\òXä}§Âá(ç•vàõÀÍ ÖL§³]/qnâ â\Á2ƒ£qH>û#u`0O6Ử‚+8
+¬a1äÊ5Ÿ¸¸´¿àwwîÌàÈ«Öó—ž moÊŠíÌ‹çA)¹ôÙ˜ûŠXÃcV1•±ñÎU±×©æ$Ï\ZÅ&Ნ僷°ŸÅ=…žï¦ã·¾«MWcÀ‰Hù« ϶(e‘ÍŽo'[næÕ¿€˜GÑ|/@›Ù>>V®Õ2ßè)†€ž[)I*?´¬kÝÞÑTN[n.~ƒÛ~4Tê ig l wî)wÒêmK&QÐ5ˆ=Q"‚¢lÁ%;“CÕÖ}A QÁ€E¸~y׸ïºåM4Ôþ„åyÌÄeÔþ˜›²È«êuJˆqÛ<³‡´¯Ý»sÑ€º»)öŒ£LíPøþ=ç²Å¨‡ó×M¯(K,ÎãÚ…p’ÄÎ(ä[*+>’ÍÅÏmg™ê””g*V¡ ìë¦Cêß-¯Ï='OΣX¨Ä—MÌ ‰R ÿ"À¯}KòXC­w97Î]€ÖøÃf=ö@·âÉzdz1ÁT}ê­bx¢Ÿ3 ¦7MÈ*âs?x“Àsƒp–ÊèÚ Øªì å<…3C^ÖŽ)öAð«_NUY”Æ›|%,J'úqÿ]A¶ÆÏi<€çœÓVš‚ÛŒ|‚¥©Ë©“xBõ÷‡O>ÕÞ·
+endstream
+endobj
+1026 0 obj <<
+/Type /Page
+/Contents 1027 0 R
+/Resources 1025 0 R
+/MediaBox [0 0 612 792]
+/Parent 1012 0 R
+>> endobj
+1028 0 obj <<
+/D [1026 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1025 0 obj <<
+/Font << /F8 596 0 R /F28 597 0 R /F7 744 0 R /F35 743 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1031 0 obj <<
+/Length 1543
+/Filter /FlateDecode
+>>
+stream
+xÚXKÛ6¾çWøRTjF©W… [¤@“Cè¡éA¶(/³’èHTv·‹ü÷9´,;ÚXòÅâc8ß¼9´¿Ø-üů|÷}sûêõM²HIÑâ¶XÐ(!KQ“€…‹Û|ñ÷^i±\qß÷ô]¦#Ù.W,M½"ÛÊRêe{O¸bv M­q¶) ~–Aâ©æg•jz€%õ²'ªÞºåýrô¢ÁYL
+°E¡ÁŽ?«®©³'-žµ†C4<,„6Ö–¯o‚׳”0šøDÏ:­Ö¹Aê!qHIBéöÀ\êÑT#w²¥Y-ënµ=-έ­Ça²AC:ߥ”Pvªv#VÒ:ú«  {ã+‘{`Ì×ïjÃ1ôö²¬·"ïFµ‡xc:My?fZðq†Ñ€D”7à
+¼pW¬ífµ/j3uŽ»¿™Ùëo£‚8îçj&c‚Äú—¡ ºéh8ÆiÏÙ¦õ›#%õ§I Ux mŽ¤”^–t† ÁŨùv9LŽìؤ0¹ ÷¸¤ü²¤3½œ–ßf$–|/GåxÖÑø²”3„L.r›£r:Iåaižá ÀŸà Êô…2¥?4¥#9ç\ä6rk`žÃ&]¥ÐC[k-ÔtëðÉÖ9é'€‹žk–ðÖ6B­¶/–¸¦Ž%t¬“3ûØÉ!Éð‘PÚhql™Õ»žifï{Xî·Õö•—øƒÞÒÀh¬µ;¾,Ú9¶Á·­ŒBñ„ƒP­Ì®gøÁí‡q¥;¸°mói‡þ‘v'ÇsŽW+«}ù„¹l·Y“‹Ü<?¡¥Lá½ -%wªá¬X¶ í®;ëŸnfb»X³ýBCÆ"Âá52¥™ç!¡QŸàÎп‚
+ðvÇ×2÷¾t¢³^;Èż7îT‚Xd4üS¦áyo„sÒlp«ÌɱhRŽµBoÔ#ö+æ÷«›mvêöÓ-žT5]Fƒ›‹™¿_Y^×÷ÓKj2B ¢´¨ë»
+ý &_]A:LÖ…š‡Õ+Æü9XºÉê¶ÌÌËp€7ŒÎ{ƒ‰ôa/ê—åq¬`®ë£Vûk°ØXïÕµh|ÚÛ¯Á¯ðÔÇ»N_ÑLóý^›?„nd)®úø*Ä!Ú]#fh8«|ÀE¯7Å Kö•ƒÍªwg(ý¿äg‘Ûÿ>¹}_$P™-§(:9ñööÕÿ`úèy
+endstream
+endobj
+1030 0 obj <<
+/Type /Page
+/Contents 1031 0 R
+/Resources 1029 0 R
+/MediaBox [0 0 612 792]
+/Parent 1012 0 R
+>> endobj
+1032 0 obj <<
+/D [1030 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1029 0 obj <<
+/Font << /F8 596 0 R /F28 597 0 R /F7 744 0 R /F35 743 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1035 0 obj <<
+/Length 1169
+/Filter /FlateDecode
+>>
+stream
+xÚµXMâ8½÷¯@ŠFiñÄßña¤h¤™Õî™[OÒÄì%¦éYÄ_;@œÙÙ“Ô+—«ž„“Õ$œüþ¶íçÅÓǯ|€à8š,² $p
+'Œr€0,ÒÉó2Î^~üjF" #v-â@DÄØi}ƒ˜Ä¯eYÈDeIQK;ðš¿æZnâzïö_BÍÛýsAE½ 
+©/
+ÄkÆŠíÎ!‚·p±–n%º\Š E4´Ó…_.g ð°‹q^ÏæX°i¢lK§I‘'íPVVhŒ
+A¥#ÈÿÉð¾Fø2ü·F#À½S_§Àß"B„
+™ºþ‰õšíCS€ ?¡ÍOú´s{·÷ˆÝM4†hîdD
+`þ*À#0lç›øܹCŸ¯½)bÑ(póheeQ”3“ùûî«×å®H[í^K÷±M*ízJ7o]OEú}§óâQ:ò.Ø+E©Vm,fsŠ¨“ª«Òh©×•”n4€
+ðaÌ1w`Ö[žÊVîÇÅêï
+endstream
+endobj
+1034 0 obj <<
+/Type /Page
+/Contents 1035 0 R
+/Resources 1033 0 R
+/MediaBox [0 0 612 792]
+/Parent 1037 0 R
+>> endobj
+1036 0 obj <<
+/D [1034 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1033 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1040 0 obj <<
+/Length 2335
+/Filter /FlateDecode
+>>
+stream
+xÚÅYKã6¾Ï¯0 "cFR[#ØÉîìNrj$6 „–h[Ûzx)jº;ƒùï[Å¢dÉ­žVç°{Y&YV}¬*û›ãÆßüõï¾ßß¾ùî‡ÈßœE<7·‡M "g|‹„…‘ØÜ›zA²ÝA(¼MiJYmwQ"¼N™þ¼ý×íß¿û!Ýd,‹ÃOð7»0`iÐÞÛ“Úîb{‘M!u3á}”·Û4òÔ¯4-Úí.L½¼¯U³…¡=y%»Nu4Q*ï;-WÚȲq“¶®áðŽÎ2'é¶K­P>)X&œ:{ËKu¸* ½B”Ö
+K"¯'þeEš…SÕ²ˆÁ>ò[q+ßMÑZ¹Í©mïžÚ#ðcæ'é°Í”µb`N°·÷7¥Õ»í.©w\‰ ~óƒHå¦üd‰Õ#‘»sUš©vA–±H3%Q¼³<ª¦¯÷J—Íñ©dIÂx:
+V’âpÜ^@è„r„“¬@œÌsx÷¥9ÑO’>`GÙWf˜€Ý¥mˆrhõ‚ð¡6 ©QÍI¡àOååàV<–Â…;ö½ä]†ö÷™JòØòI’DQ䵇AâŒaL/÷fYŒ†ÑEŒ¥+ B$ñë=%„Ø»ò«Zèg,
+Å\5Y‘ˆ¼ZÉ/ØN•KBÆël,X$²ai.:Õ…ŒcnA¾©uYj\¤Gw. Keˆ
+ÁþJ¼·½ndegà^š6Hë~÷'å‚vD!ñÕ}¢×a؇<‚@W4(¶7$ä¡wÖ²Æé¾Â@ cŸÜf¶;o]Ì+M„Òtª:Ðø¾¬*¡ Ïí9kðGci®tÆ:–MãânD ˜´€K²žh·D'üK&â3ºšd³,‰Rç ˬ{GðM2Ç §•€Õ)ÜbÌ­'¥L$Óû†Øœ\ûgßH-÷e~ñô/oŸºÃ.ðZør`ÊéÀŸZDá(ŽÔÒ¨ìp$ÀœVýÂ-!òˆÞÍ–£ÞžDÌbо17ËádÙ4Zœ(­ãQU-¡˜¬§ÅÂ(g+hÛuå¾Dhµ~Jñ†êFÁÜõ†KÜ?!÷Çç É£÷ÃužÁ!eŽKî¶$9Ò"îUåýfÄÓÐ;ª¶VF?¾ƒKŽØÃ.œ«¤£«ˆ5®"Ïgç-ã~»ÄÅîDÉ@ìG¼À#ŒX˜Ì˜¹ßClt
+î@@b´JîU…”§¬Ü×¼’U¼*u0µÔŽóY¹žQºŽ*p_æô”­,>É&Wóe»?§v¶Rmcü*;SŽ£«Ù¤þ*6tþúSƒ—|ðËK¾6ús¾tÖ[ˆðÀ÷­ {äϵÌu›·…ú²Ö£Óèe.kâ+ÆpøEÑW5]¯Ý˜°–FŽôûïªùTê¶ÁœâÛo‰Éð¹m€@SpÁ;c¾ðËú\)\@ŒÄ= Õã%e¥>WæáÀÆ
+óð6«Õ+ÕÃ7Á~‡älæ¬Û³ÒÕãEàO¥¤‰û ½s»Ý3c@¬²N÷L45zÈêG¥Øj­âÿ‰—%¯Ãæ§ùäzŒN×ÁÙ±j÷²ºä6Úµ>Ô×áÔ P¯õuçσV‹H°Ì+[V ŽÉœçkX­D°±Êþ7» Àê!Äop1[sX‘·U_7‹Bovœ%þBmi÷ÒÆsßÎ6Ïó•T0ß7Ó~9Ùš!¶MCµ‹M"!L]ræd²‹°\€"ø~KI8’OòRˆLS?q]¡ŒÙªÛ0CÕ‚*,¼"mLaPKj¡w€¯]õ;„÷½Êeß-åršòYºsß’>¨ÉB!.XuŸVÿéKcÈÌ !u°FBd]íflkE#—Ôºj¾³UODåü#ý¦vC}•0?¾ºÚË}d‰Wã®û$8Sðv´hþGšC9x•›m³ÞH¬ïÜWCÅK‹¥¸]§jÝ]¹ÐUÀöÃtZû/Ž6‹w]OϲèÂ{A4œ»\Ýg æUÛÄÊ_œ¯-‹«r½âùVCC™?Ó»n?)Ô}!Ù‡;J&b.øó/Mœá0«ø3Jó‰Ò(ã3ÆŒÏZg©»“<«—dZ" &sïú`«ÅÔ…`¹F¹Á¾.DS¯3Z6G¥ivPÒô6$¦‹o-§ Æ0
+mÍcù¼·¿&"¾™˜H3²ëÃYÃËJ
+×ìÁåXD¹q{uĶ?Š£Ÿm«U›2·½[8ä#Þ@à™%ˆsæÏÈeÓ´ÎÝÇöN´ª'[\üˆŠ\IÊ"­(†Ÿ÷CAlgÔ=´K°Á⢧Ԯ~†<øÐCíì MæÔÙ¸–ÄÜÁ°Ù(°§kdY-… ¯àéŸ ¾O¯“„)'JˆJâuÄYÒ‡z@ÖHD±UÐý áÇŸ?ÒÀuRá7Hi‰¤±'­ `¤éÔ÷|ŠXÌ!ª;•›Û‡è^­.ÿhÕ*Dj¤}
+»gF²º`4×
+ñ{pÍÐùW8ø-eÄé•Œ–†>;ÛË«¶ûÊÛŠOkè{pc8_ÄÑÜ HAÆïgDâA·õp„¢µ7¶
+84ÿÂèûžýÖ¥{súƞ˱¹m¯/I®ÿp0À®q¯Q.ú„C+&ø'Ƀ*¾ÖíðkðÍÞyv¿¾<Ì¢UµÔ´
+endstream
+endobj
+1039 0 obj <<
+/Type /Page
+/Contents 1040 0 R
+/Resources 1038 0 R
+/MediaBox [0 0 612 792]
+/Parent 1037 0 R
+>> endobj
+1041 0 obj <<
+/D [1039 0 R /XYZ 152.694 705.06 null]
+>> endobj
+334 0 obj <<
+/D [1039 0 R /XYZ 153.694 667.198 null]
+>> endobj
+1038 0 obj <<
+/Font << /F30 599 0 R /F8 596 0 R /F28 597 0 R /F7 744 0 R /F35 743 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1044 0 obj <<
+/Length 1194
+/Filter /FlateDecode
+>>
+stream
+xÚµWË’£6Ý÷WP™ê*\4z€Y¹“ÊL%‹T½KgAƒÜV‚€<ž‰«ÿ=Wüjz =•òÕ9÷Íž|¼ÁþùãýÍû"à(, îW‰$ðD ʒྠþ ÏøâÏû_߀eœÇF–2D…
+Ñn§×æåKe§–e6n;UJ÷·–Ÿõwf™„ªw[¹{ÔMÔ´þL^—^ÜÚ ÂZéÊCxÓ-{c‡˜Uzg l:m>™Ÿ¦²gÎåˆSÃYƘóŸ] *Bk¿z×ɹϋˆ š&ûl|É1›­Mþ5Jx©²9TTM?zè<\žóôôïà-㋘d!TS¾­´{ÙȼöîmÕø)Šž‚˜³9X€_·áB ŠOyÕ— ÔŒãgU~iâ9&‡ZÎ’AÞŒÈ1í  zyïƒÌ±w#p{ÆÆé¹+w 7,/"µPK—(yÅà˜L`Ò/T cÜîæ/3¸+¸7I(ÂBImè‹û»ñX5Û®Î+÷Þ%á&ùÇÞÉVv“Ûªq€ýˆ³†„à“#@#oG.OøÍøÁ oØrfqX¸š,ÁJévvªª\…Õv‹ÆXï}õ'Ç®$É\v`ÁàÂ!}6™sÑ8õÎ;2ãºA§ÍBU+ÓVM£Á:¹„÷é7}z}ìyGn¿Ræ$á(Š§¢$ö½…gg'~¾¿ùöÚK
+endstream
+endobj
+1043 0 obj <<
+/Type /Page
+/Contents 1044 0 R
+/Resources 1042 0 R
+/MediaBox [0 0 612 792]
+/Parent 1037 0 R
+>> endobj
+1045 0 obj <<
+/D [1043 0 R /XYZ 152.694 705.06 null]
+>> endobj
+338 0 obj <<
+/D [1043 0 R /XYZ 153.694 542.845 null]
+>> endobj
+342 0 obj <<
+/D [1043 0 R /XYZ 153.694 274.947 null]
+>> endobj
+346 0 obj <<
+/D [1043 0 R /XYZ 153.694 245.106 null]
+>> endobj
+1042 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F30 599 0 R /F16 592 0 R /F8 596 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1048 0 obj <<
+/Length 1473
+/Filter /FlateDecode
+>>
+stream
+xÚ¥XiÛDþÞ_©ªp$<õ\>*)e[@¢‚v¡B”Þx’˜:מ4»]íçÃÞ^2¡_b{Žç=æ=žI4YN¢É«G‘{~ùèéËd£,¡éär1ÁŒ£„ãIÌD(Ÿ\“¿œtú÷åÏO_ÂHŠ²8fz-¡ˆ$ à˜Eï1eë².›|)RªZ*1Ó/vç®Ðí q„2ž B²!8E<Îz!wOFÐÜ‹–öh4:‰¦U.ÄB?æ•ìÄl.«Íº¾=)dP™b/¿Ôb«Ýâí J¼=A£ Æ°—«f„bn‚‚^†È4ĘðàU^UâfÒ„oÕ”âà¦Ϧ!¢à—¼]–µ{±Êë¥è¬ˆt’€
+"ã š:UŸÃrJƒOS΃¼-ózJÒ@ÙA¹°Ï¦M À$égšVNCX8]WÖK4 cÁÅZoÞT¹z þ‘›¶Î+»'o³Gäm^Ï…ìäZlW¹BZÑ!¨Ÿ~ Ó‘,EˆÒIJ- ¡Äµš-­‡vñö=àv»cøá×Ϭ.ï¦) ÄW­SÍxŒXö×ê*m!xÜ}¡Ò¾î™ÛG%¯ìöô*Ü’²kªÜ Ø9a¼ý©le½¶ïÖÄ(c NʆUô·ß/Þh ÿÔêFið£Ô²µó\keð­]l߯¬¿íG·1†ÁZþ>^œ·î¥tHƒÝ°EÛh»¿ƒ“¦qðüõÛwož¹]¤ëEaÔÇôUG-ZñµõF+>nÊÖEŠÓ †­ÒR­lè’Ý“ƒ@I’î&¦ÚJ›ó³n{ì Fó~}^c ¢ ÙÅtñ®:u3ŠšbÐ"îwÜ{´_ä`%)4ŠNµK(”g:Ô zN³G2“UˆZÝ꡶\®ÔÚ$~hÊ q$ƒZéϼø¤“íá•hîΨ–ÌKÝJ(ýRÒ)¬ÇfbݨÜK ”gQ÷y¤njÁÝ9ý ë Êàìv-,;u;Žë6³d—&ˆf{†(ÙÀ‰@’¨çzàó¬ûP6ce÷ªŸz‰Ñê7Pîk},Ð< ±˜À†¼åe^òJ%Ö½0‚içKc‘Ÿubá}GÚ癿ì%ô?<+áMµéÌü‰—ÄÄòǧ^ø­¨òkPv2UîN&È=÷J<Iÿ¥êàñi:vë]#X⥪¨ gÞ%‚¥_Ä“#ÎH{ÎØ–Å+Âf¿þ(s ‡ã]8Ì¢ñÐß*u½Ô
+³!óœ[í§×U^ÙË“þp ÎÍØ{…‰UÂâøÀ8— ª.NÁ"ÙÇšóŸ¬Eè‚Þ,0w^3£õãµPÉ9dµ,;‡Õ…ác|aãÑÿûc¾ýÿØàØ«âƒûË™GsâÄ üJèÓÊMã<Úö Š3<B×g½o4ÅÐ àÓ@¤”íÞÜC° ‡òO_ž|S.kÙŠo¡dF<ÚÕ§j;\hŽgÐCüƒ…û9D]Ïj9È9eïÐÁy|þ1~âï>ožqfX¤^¸#ÍÙ<û²?è"˜Çˆ· IÂy<‰öv\\>úÀZ¥
+endstream
+endobj
+1047 0 obj <<
+/Type /Page
+/Contents 1048 0 R
+/Resources 1046 0 R
+/MediaBox [0 0 612 792]
+/Parent 1037 0 R
+>> endobj
+1049 0 obj <<
+/D [1047 0 R /XYZ 152.694 705.06 null]
+>> endobj
+350 0 obj <<
+/D [1047 0 R /XYZ 153.694 598.88 null]
+>> endobj
+354 0 obj <<
+/D [1047 0 R /XYZ 153.694 330.387 null]
+>> endobj
+1046 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F30 599 0 R /F8 596 0 R /F28 597 0 R /F16 592 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1052 0 obj <<
+/Length 1043
+/Filter /FlateDecode
+>>
+stream
+xÚ½XO›8¿Ï§àR‰HÛ€m©ªPµ;+í¡§H{h÷à' 2€À“´廯 C"²1™iO6ç÷{ÿüüìÀÛy÷×]`ÇO«»ûâÅ€L½ÕÖƒaH½8"
+}™Y¬¥q ùÖYaX:ÌŽvÈe–Ûÿvaè·›JIFÄ·ßÕ¶gÈ[3
+‘øû¼©ÊGaÐ6Bm=ÀB
+ÑM¶y1…cŸã`'œ}/<ÉD¾Ëd|Ñ_`«þ:ÎpNt{¨ã¹‘Ž¯¦ñqF’’[7ź’®ušÎŒt*j™9zØõ„ýž¼¥Á[†…Â_Ø_Qä$ܢࢿ/wë Ó\&mäT­åé^w§§¬i}Îê®Vè¤Öf”—Ní–½Ü5˜U#"Ù¼”vÿ%Ûª’¥ê”B2›$&ªv®#4vÏ‚xn¸U•ºuòÈ•â5—›Ì]<½ÞcÏè=(sí=œ{ ü:ç2øÊ’=³aè¦Ö¢¯ S[I)2ãteøT8óxeá[Öq½®Úˆ¹TCÅê®VüêjØçÒÕ÷ ¢â4w‹¸Ý&N^ 4aWTkÞelbòI6OÂÕ­Ž$¢Lk'É}9¡Á[>EÑ
+endstream
+endobj
+1051 0 obj <<
+/Type /Page
+/Contents 1052 0 R
+/Resources 1050 0 R
+/MediaBox [0 0 612 792]
+/Parent 1037 0 R
+>> endobj
+1053 0 obj <<
+/D [1051 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1050 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1056 0 obj <<
+/Length 1578
+/Filter /FlateDecode
+>>
+stream
+xÚµXÝÛ6 ï_‘—Îи¶äÏ=¥ëÚað [ÞÖ=(¶’¨•­ÀRš;ò¿eçãÜ%ÁmÀá¤Pù#EѤ¢ÉzM~|ùñûÅ«7òI–9-&‹Õ$NÒ0OãI–æ!¡édQOþ
+â"¢Ó¿?¿ù
+ÿ˜ÖbÝ6¼µ4£qÍ ïÑräÙo˜Á…mg·AÅë]Ç=7ë¼Zãe.aÈ¿™?ðjgx,û hkÀÖYƒc¼û…N£ ;Ê´Êx¸ÚN²`/j³AšÐ8VÖ@&ÁB7ÛÁD2»1j˜¿®Ú%lz¯<Såå9[,§µÅ–ŽÇ#©T³Å=š×~ƒÇf ±kéUÕØY¨•4Øl…ÓYlo‘¢½w§õè7v8~R»®‹”½ÐáÎVœûa¬ý¨@G¼ç•Ò/X±_¦öŒ:ˆ^Þ#§Ž˜P!œP>ò¢?…±b<‹q`-’Ó—Üô7i¥ðÜ çp#Fô{©——,»€=U8ÐAŸ%Þ ¿Àœ·_D§ì 4O`)ܼsf.½¾¹¦øèúâË0’Ï1Ñ\þvšo7¸¼ËãÒºö¨÷ô÷}zãèj:=ŒfgÏs).þÏÎIɯŸÜQ5¹Iõ¶ãÛN´F›Ç¯}HFI|þix·aíÚf1J}®µÙœõ$çs7ƒXljKl6»KyóÅéU7Cþi…@öSü˜8P]عjL“’¿ÆµÊþìMz{鉽 ëÖ¢ÅeÕÊÇ)ä¿kV惕cŸpJ¬ŒOO
+!žÒ™dÏc™“æ!-Ë‘k4›Ú™âðD«§Œ)Fi—Š³«6žwr=Þs7Šë·üŽK^^-ô·t$º©ldÛí±rÜmç¥>?=+${½4‚*5¤IFPsf$w¾.“ …‚^øL“4øMÚ«›Ûz¦Ò80ø >` Ô=ú+QMÜ¥+H2ØßdǼ’p AéÕšw¨ÄÒ57¶ªk˜0©+Öùˆk 3à»Ý¹ä… ôj ”^]‚¾ÛAÑ‚2f ”1— €ïvPÉ A-G=µ\iÞ ® –÷x*}!(1ê)aô†mù“¸ÇQÙKCJŽ†”<Á4o•…å¹o‡–¿Z5
+­ú
+´êhÅ=ÐþPËî‘}ë*<&Q½¥÷ÂTBÇ%{èOxî
+ÞÁ™6P©¯5þø¢ð×’ù‡9@àJêNù=î±àTØÔ`ôÓð¡™„žþóK¥çá8³‡¬¯|ÏDBÉKŽµZË>R¶Ó8¡õ;÷Ú¯Ð-7% T$pî ÌF‹sŒ$é+uh²™aK!…ê(hà«xŒ˜ø‡
+-T‹„¸,Ë7Q
+ž†Ùƒ¯å;$Ù7 .;Ó?UãåªÕÐôª±Þ¸S•–óú¢¥p-–ÒwCsqùj3ÓøTÄ+aãê->}LÞ(ÿïñ"OÎRyæJÀ’“gGU³Ç3dç'ÍCII¿Ÿ½ŽQ’‡i|þ®Ù+¸›„y4D§»å5zY´g­«m¨¤oð\rôaƒèØÈžîíåÖö®ö<s~.“¢ 3
+Ž¢ðA*|å“3ž÷‹Wÿ
+endstream
+endobj
+1055 0 obj <<
+/Type /Page
+/Contents 1056 0 R
+/Resources 1054 0 R
+/MediaBox [0 0 612 792]
+/Parent 1037 0 R
+>> endobj
+1057 0 obj <<
+/D [1055 0 R /XYZ 152.694 705.06 null]
+>> endobj
+358 0 obj <<
+/D [1055 0 R /XYZ 153.694 364.265 null]
+>> endobj
+362 0 obj <<
+/D [1055 0 R /XYZ 153.694 234.1 null]
+>> endobj
+1054 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R /F30 599 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1060 0 obj <<
+/Length 1523
+/Filter /FlateDecode
+>>
+stream
+xÚÅX]oÛ6}ϯðK¨ñK¤ÞævI× k‡Î
+¬{m:æH†,w Œþ÷]’úY6†½ÄÔ ÉsÉ{îá%½ÑÃÈ}¸òòßwó«ë[1òQ ¨Í×#Ì8|.¡|4_þcI½É_ó»ë[°Hø>3}%â~
+_º­—áNéÖSgº‘¤vª:ê4ŸjŠ=ð DÅT"P YzÆû0}É'žrÂÇ·j‘¶m¿†éò±n˜mÓhÓìÑp·ÕQos¬·²ô–ô{»ß4Pfû‡ý.«[~WÛL=-TZ7~^fIËô)ùÞéö³Z–¶uÔçwµË´×o=ãn.Í–Äû¢üÖB7í/*LèIKžµGSá#éQð |!¤‚‰“LíâðI5Æ_ßÊQ
+ŠáÅ
+ÂÆ¿$z]ÿèU©ïº©RØ{Æ=mƒ/‹ÿêöÿzbØ_Ÿ!ês:† ç ª'3í¾SÊÆÙ£Ò ØËÂ3óµ—ѦØNkI“'Ûúró‡Ýý¯Èî©<ð–Ir/ÞÔ$£ŒÁá“nö˜þ5ª¾i`Œ€xȃu(´ Ó¬Avh‡Avù%ƒ¤›A$²Ï` ÇC4(Ó(Ê·ÔòE﹓/ "&ºú“FèÎN1t$Q\ºÊ‘‰šbŠ&Ê”gCä¼XÞá7hôå5œ€Þ J–,{b¢L8²Ó“²š²†ó5À‡&­Ç„aVä0`¹c’#Iœ…‹JÖËD§ræHc B#Kžèd…€‡; ²Rß<Ìb‹ix`Ì&µa—…ñ*LWy“
+Úq3¿úþJ˹
+endstream
+endobj
+1059 0 obj <<
+/Type /Page
+/Contents 1060 0 R
+/Resources 1058 0 R
+/MediaBox [0 0 612 792]
+/Parent 1062 0 R
+>> endobj
+1061 0 obj <<
+/D [1059 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1058 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1065 0 obj <<
+/Length 1570
+/Filter /FlateDecode
+>>
+stream
+xÚµXYÛ6~ϯ•˜©ƒRûÝæ(ÐE,Ú‡¦@i‰¶Õ•%AÇnÂþ÷9”,ÙÎÚZ´/6Îð›ár¬åX?¾pÎüÿpóâõ×·Bgݬ-/"¡YÏ ƒ›ÄúÃþB]OÄ·yqŸÉd³“ySçb'Þü4œôúChEp
+ Ô)ÔqIìp³][þÓ,–® ƒ|ÁB»Iõ÷ Nyý¹}JøÀû„ðC™œDpŽáKk”ÖÖ2Q#ÏNó²<¸aÔ3:ÂCâùƒn ¸ˆ»¡"X²È!^à[Kª ð†GÚ Ø4$~ošÈõW.Ü]O×'ðþ[KÐqA‡ø!ÝKø»h«\dg „r>ØoÛ£Yo‹63x®KÆm‰“Zë®Ðªz±ÙJÃV
+Á0²Æ¼gÀ-+Yê`!ó#·qHøÿ¨òȵrÉ·ŸqE»n»SK+äª0~¸v%ë’,–žç~ϾUtòA{}Q%—»­OçØcf÷ñZiê3ßÎÛÝ
+”ûgßœm\RЊÙl–ìÁ*ÝÏpSuˉȧ^KXûFYž{<Œ€V—¿²<ûtJ±1ÇT"ßÈ–rç …WëÊò¹ï­zÙ#¸ ] M½zŠ˜×#æîƒMÕ¤qf`¬äZV2åå¸yspÛ_»Ãásñ»+²Ê™ÿ¿;ýÀÕÉ/‘` ÉíCΟƒÜþŸ‹Ü;ÑÈ䉈½¤¡ŒÇíO2–éÝ“¼á7œÁ˜ó.­Ÿ:æɼŽcY6ÏbýØ® wnOñN½$t‹B•ÉCFW©GÎR£‰E%§­Aï
+X°÷”Q„lbM@ÿ¸;`P5ûÉCÒ8©ÈL6Š‹ÝRõɘF}ŸpÎ|,˜ãc{×èôð9gV·2ñ¨®ŸÍκwÆÎLæ‹œUŽN¼¸ëg³…³Š»©ÿwÃt*Öu,xï®0쀹Œ@G„g2¶€Ç<¿ÈˆU Æ}û­ñÅc_†ŠÜ~xJ¿ëØáv"¿8ÔËõ,„ÞngF½cã,“ëé U¤é˜,+Ü[WÅ÷p4³+l@¨ = ÂòX c·âÛ¤=½š%}¥&;)rHøªëÕÏZGÆ£^÷Twšj Ô†Hï™\‹“B 2JWi’HC”æÈ¥{[}¢émUX7Ý’Z†:V`Ïú+äL‡“â¬Õ5®Z…šQÁt»<¥¿èK eåÈ󦻿Šhܵr.g¦ñ†å35-u pµ‰Æpej'#f)–È'‚ sHDáØC?½ÿí
+)!+~-
+žþXà J‡ÃwŒÈ|ˆÈpƒ-dáWØŽ³ 0€•OM³S,öYÝ„Ûþ‹¶Í0€/ª>Ì ³(òÑçŠbmrÅð¹#FÛ&ýÙ&ƒld.+‘eCY·Ù×
+ṽYÍ„HèdêN¡5ÊÀ–W桶õp½N³T(Ïžfµ"kÎ)4Pô³ç©uYŸË{™ß¥U‘«bÝP½ÕÝ Y§j_ÝÐþ ˜þ‘‰º¾ºU~½i§ëPƒ÷Bq>RR³¡]Q ê¶,‹
+rÇ÷8×ΫêÝR{•BŒ/6•(·愼n¤HÈã©Ž¨(Þ)îä_t§±ëþÚ® ÇX‰îñqJtN=´ç —Y–âÝ
+Ìspƒ§¾Uûñ!Í-Y1É
+endstream
+endobj
+1064 0 obj <<
+/Type /Page
+/Contents 1065 0 R
+/Resources 1063 0 R
+/MediaBox [0 0 612 792]
+/Parent 1062 0 R
+>> endobj
+1066 0 obj <<
+/D [1064 0 R /XYZ 152.694 705.06 null]
+>> endobj
+366 0 obj <<
+/D [1064 0 R /XYZ 153.694 285.668 null]
+>> endobj
+1063 0 obj <<
+/Font << /F35 743 0 R /F8 596 0 R /F28 597 0 R /F7 744 0 R /F30 599 0 R /F43 827 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1069 0 obj <<
+/Length 873
+/Filter /FlateDecode
+>>
+stream
+xÚÅXËnÛ0¼ç+$’ƒRO²½M“¢AOÛKš
+!;«ÎÇhõL?`ü³¯Ò+Öˆ€ÖüF”%1U#ÉíÃ4Z6Û’vEEÛÝË`i GKûŽ±>°Ûç"@žÉ"HcN¦jP‘'*ŽÒ¦¥æïÔ5¯âÔ„€oB€Sé"*Ã&]À.TcC(™ØX. ¦Â˜Pc:áNt&qõ¸•’
+Z¦¥îM¨¡¨ ò&¶RSAËÔÔ½ µíg¶ÓÆ—~°¹‘‰q;È¥ìUZs"yQjÏü¤}ªÃ@«4_‰4çŠÜ²ä™‹ËEn¯~EjÆwðÞ`£Áz¯ŠÐøMÛh°žƒùdÂ2}ÿ®–·Ob1NǬHõ ¯ó2×± çÈu÷ö6­Gä…Tï*S}—\¶å;ïr×8ì€Ù1œÍÖv_‹»JÁß‚’¾Íï9
+:9†'&¦îy3Ø‹ ÙLùtNá!ì÷ò8sx Ýþzý:üØïÛáaŸŸm0 ÷wØIç¯Ýæ‹kda‰ç5^
+endstream
+endobj
+1068 0 obj <<
+/Type /Page
+/Contents 1069 0 R
+/Resources 1067 0 R
+/MediaBox [0 0 612 792]
+/Parent 1062 0 R
+>> endobj
+1070 0 obj <<
+/D [1068 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1067 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1073 0 obj <<
+/Length 1076
+/Filter /FlateDecode
+>>
+stream
+xÚ­XmoÛ6þž_¡¡(`5#¾IÔöa€xhÑC`lÒ ,Æ*‰®$')Œü÷M9~“cÑÉS¦zîÈçž;Ú÷fžïýyá·ã“‹Ëqè(
+©ð&·f…{¡Ü›¤ÞÍ
+Y¦ö'Tâ„z}õÚ•º –²ªôC£›£è/˜‹…J³Eñ¢/x//Jõ Êû¬Òe¡Êfùc!묑I®ž–XA¯ì€¸âm0ÀYä²zZ溜YÐþIÂÓYâ‚è™tÏ’wjôFŒ"Á 
+endstream
+endobj
+1072 0 obj <<
+/Type /Page
+/Contents 1073 0 R
+/Resources 1071 0 R
+/MediaBox [0 0 612 792]
+/Parent 1062 0 R
+>> endobj
+1074 0 obj <<
+/D [1072 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1071 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1077 0 obj <<
+/Length 2052
+/Filter /FlateDecode
+>>
+stream
+xÚµYK“㶾ï¯ÐÅeªjÅ% €\2•”××zíÃTrˆ}€(H¢‡"d>F35µÿ=ý
+|™¥@K4Ìò’•~E=Õ^çó(õæJyzc@¡¼•iMÞ6Üi·4{¹nÜüakjs6»ŸÃö€W‚¼â#¯­n˜`9_À$Œ†ž©x®´zeVÜÖÕêÈ”ž-”òAO°žŸ)gÍ•&©—w;`v¾±ò
+ê<â}À_°ï¥yRáGAÒoü—PH4Q©—¦¼´’Š|Èžø=ÈÉRoÙ9-lvò¤ò“ U·[šº¹'¾ÈTOžÛÝŽ¬€Èlب¬“éì'ëD2õã$Û§hšÎ¬þ ¤ôŠ *½¶6šS€q ×ÊQ@èîi7ª+^cêÚÖ>IϤËùê¤2™á÷€¬j0Š­6¨mÀžSä e±uàdžyÚ®yvê@a¸yæž~bòÖòø’¨[köÜ­V£ÅÛŠ»çNÖ›ÚTcÀüħȲ!xúœå¡mvúaÎÌ–tÜV°·Â:Ëi¥…º®
+4ÔVÔîD¶lçÞÞâÄÞ>&³ØÏ‘¢‡,ÐS€ž
+¾îò‡™L A&gŠ%…ŸÔW#×[™5~î>}¾ûô‰ÜÙzóòÍ„^»°F:H‘R"¸DcÿYç`×ïPÀ /“BÜR–’ RÔ”Øv*O¥4m ¦]Z†Ó…sP`E»µxA±s¹dt Çz±°s½â«»Ó6“«Ûü¡kœöq{ZYº­FÿòÝÖ|6î¬ájwµ£~”~ÂtøÍí»L¯ïò ›Ìnò˜»].Ks3Û8¸æî_®9õ‘Wø•W§lŸ^n—½åêü‡ãÄW\žX\õª{ËÎÑ˹ E®éK2u¯†´D—ÌÖï¹ùl;Çyð[J?¯
+ôpv±;rÅo‡ØË?Óocõ×ømüŠ¯ÅÙ¹’# á‹0^À_$.ß®]ºØïk»¯ Ýš÷.qTU¢´‚–åQJcÝ]ʬ‡D„q²¨úDÔçÿ%œ‘Î[NùÁ81ÞhP2ðv†r)¤¯¢Ùñ¨TÆÍoLej]–Ï>S•xÿDèaxŽ= d,æÒ')À5*ÇŽ?T)›§Ö‘¸ùö`^Ïã,(Ç4šó¯
+%"ŽK¸–€kêôŒ÷º¾<‘(ö9
+ºÖUîbžíƒ*DZû÷‘’[PjpSzダG]ÁÕgÛø\v}o™ð— ”ÀfÿÕ ø&CºHn&°‡NòR7Í]·Ö>¼ ¤·e¼býôr†„&jŠ7A–ì&¼Ï›+ªµ}ùéAýH‘ü¶œ¨òåvÜ›7iQšöÊîÞ.4¼¡¤xlI¢[qÏ@“ß[¾g&â&s¡»tP¯AÀêe2ÄÃ_ÞpLS0Mœ…p}_›ý Èy¯Ÿ’ìØKVo’l›öTò‰ßôúf·oŸ/Ê[ôŠ¯žÄõk0Àè$ù“=2ýCˆ—Á‘ýDéN¤P·ôÏFÐá$U–ÜÓÍàÌ–ʼnS*…¯]¶a£‰ƒÆ8Za€ï _î°qá0‡RŒ!A$“˜þ[›êä
+†’×Ñ(¤euûwŒ]±ƒÒ"A;sÞo&o δ˜ãÄÐ#Ò¸­’ ²á΀îýºwKÝÓ'¨¶8Ðût”R¾6¿wÈ›!Û€üR
+ W<Élªx"㩈€‰C(h­k½9:Ž®€/i† g29­¥÷o™žã,ÖqbG»„¡ ¾ÎcÝumwØ
+z*öa˜i¶E{-ÀH8«8IÜYÁÐïiøñ’ÖÌj; f$“Ã`Ž‡m%‘K´Ž`ÆLé6m¾=+INÛ0P:Â,ftθ¦uoÓE5zyuG?<¶:ãlÙX÷èjú£&7ø´
+&d6ü£3 “ÐO+Cy”¹0Är ùîþÝÿ
+endstream
+endobj
+1076 0 obj <<
+/Type /Page
+/Contents 1077 0 R
+/Resources 1075 0 R
+/MediaBox [0 0 612 792]
+/Parent 1062 0 R
+>> endobj
+1078 0 obj <<
+/D [1076 0 R /XYZ 152.694 705.06 null]
+>> endobj
+370 0 obj <<
+/D [1076 0 R /XYZ 153.694 667.198 null]
+>> endobj
+1075 0 obj <<
+/Font << /F30 599 0 R /F8 596 0 R /F28 597 0 R /F7 744 0 R /F35 743 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1081 0 obj <<
+/Length 2598
+/Filter /FlateDecode
+>>
+stream
+xÚ¥YëÛ6ÿž¿Â(p¨ Ĭ(êÅÜ—ícsHÑŠbÑöp½Z‹»VbK[IÎî6¸ÿýæE½,7) ¬¨ÑCÎüæE«ûU°úÇ‹@žßܼøêµ V:R&JÂÕÍÝJÇF%6Z%qªB¯nŠÕ¿×a´ÙjÆë몸Ïn³5i¼¾«t{¡|WÃS¯w§£«60è˜üí!oÛÍn¾ÿêu¶²Ê&a‚¢‚Õ6Ô* 5 ùe“™5,éú¡©7a¶þPB Y8Èùñ›6Ñ»ú–_Ž°»u¾ƒ9<9ßáä÷›8Yç÷î ¤f°É¼ãﻼâËÀ®izQ…û-ÐQUve]µ<7¯
+‘Þ¶å}µÅ³àöµV6á‘a¥¦­9®gŒYß"ù™Ç¬)ø¼#•´¤¼1ÖÀÙðŽ“öÇ‘Yedzu^´Š•‹–¤…^½©Ê²ÌÛPi±â÷¨84Ì[VD{$‚¤$DI‹Ó™2–Wü¬>f"-JÂõ®qy瘘3i0ÐŽb(ÎNös³©áó3ê£>5L.`03¶`Ð1“˜ËÃi mÊ/°‚ÊjÉnù©«yWîòÔÙhí> 
+¶]86^«$Ja*Ãõ9oàЧ:÷tné$UÖÆž¶i‹è­Xá"ù\Z©ÌÚsiM÷|.- =£VŒ/bÄ€ŒHÏw§¶ö‚:Ù†q âHOUÓR¸
+Öy‹OMŠÆwQ4÷¸>RùÎLÌÎ¥u¢R­ý~Ú§Ö’ß‚?NÎùßóƒj“©pÐkÛ«{È üòxtE äó?U¬‚ ™žê®>(z=–Õ=„gÄ,âfÑi·\ÔäGÝn92§ (ry—Šw¥ÃD™l¶«_Ênö ­õÛ·XÚQœ¨`ØÑ2(B£lõ»& M ¦3AÀ‘EJàvL¦˜d00Ö|„¦>ðü ×¿ÃO®Ú W€iyȱůA綑²ÆȱÞš
+V fXm58H¼Õóל?PFÁwIÄ8œ%bÔN…ÁìÆñ|>,Fi"Ê-0–ÍÑš(>6/êö‰t•(›šŒ|Rü ¢Y¾>w›ˆãΈéf„«ÏÛ±ÙúþÄNCÞw6.100xâ'‚¡Ü,8º1ʘÁ“--}!¯Böû´HΫ{…eŒ xÖ•lmÑI¶ ˜†R!Y¿Ð3¥®\œŠ3}æ¤ S<Xý^jÆò}èQMº` bÍÿa‘ès-ù¶>>ä„&É1‰QaMcí mê¡‹…‡IUšôe$.ÈèÝ…º­1¤Ÿò’‚£MØeâ~&rÛdªt9ÿÚxÈ¿ôÆq¡ââr±¸;„¶*š‡›¡s‰ÑÕ¹A¶P—E˜bxò$mS+õ IÅ&àBËLÅé8çç…»ÃQÓ=]5î÷SÙ¸+©\Ú[Æklu
+2G@¸8 ‹ å¶{hyXn0ÑpÜ@«Ïƒðu)u&CêÄ¥ª>ÔŸhªƒzãXV“E:ŒÊ¹‚Â|
+qHÄ•Ž3,¦.,Ì2ësðKI•Ì\YJqQþá˜~×ÔG‰jír þ²e.ß5ð~ðE Lê•Ë½9 ±ë å>ƒÃ™PDÁDæÈ2iÎ 3<¹Ýia²* {¤:„
+ƒÞVÅ©qíå¤þÏšBJæ›X i¢ä”*: úFÇØâÓ=±z¥¢Uj~4Öÿ ±‰Dî¸L ’ï)øéí»˜Â=|P„ö*ÑÑP‹!µ_Úƒ¯@„èT §}YÌgà¢ÏÂg¦ Ã$깡äe[¦»ZÀBo¶Ç}IUÏ~RÏM1ŠèÕ/¬LÈ•¢Y:Òµ‡Å#4A}©X6¾
+€vCu!¼’‡ÁÓ‘ã»â•ï?èLõ ³yb·
+Qz‹¤¿õšïkÞK)Æ¥nŠø«¥"< Td—®8® ¹uûjß³Ä Í¼Ž’É%W8 (·e¹€­TÙ™Uq6õ^‚*#^7åý^î'ñ5—§¨4ñ€¿/«JRI,1eô—LGkž> Ceíäô”)¯¼.ß*“Žøø
+þA*Š¨JB™‚rvÕ
+endstream
+endobj
+1080 0 obj <<
+/Type /Page
+/Contents 1081 0 R
+/Resources 1079 0 R
+/MediaBox [0 0 612 792]
+/Parent 1062 0 R
+>> endobj
+1082 0 obj <<
+/D [1080 0 R /XYZ 152.694 705.06 null]
+>> endobj
+374 0 obj <<
+/D [1080 0 R /XYZ 153.694 667.198 null]
+>> endobj
+378 0 obj <<
+/D [1080 0 R /XYZ 153.694 607.581 null]
+>> endobj
+382 0 obj <<
+/D [1080 0 R /XYZ 153.694 369.218 null]
+>> endobj
+1079 0 obj <<
+/Font << /F30 599 0 R /F8 596 0 R /F28 597 0 R /F7 744 0 R /F35 743 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1085 0 obj <<
+/Length 2153
+/Filter /FlateDecode
+>>
+stream
+xÚÝYK“ÛÈ ¾ûWè²)åée³_d6•oö‘ÊÁ9dªöÍ–zFŒ9䄤vìuå¿h ù5VÖ·œÔì'øðh%›‡M²ùñU¿ßÞ½úú·±"w*ÛÜÝo¤6¹±Æ‰T™ÍÝaó­Ì³t÷Ï»¿~ýôd"·V‡¹™06‡}¤Ÿ¥Ò·OEÛùÛ}UtÝmóÔ—MÝÝv;ôýGÚ Ûä°>µ¸^ %³ÍÔ"ך6¹;úúõîF½}Þ¥ÙÖC[%Û²~:õÔìÜ×5»˜{ãÌ¿ë¸ÿô®£žŠgþœ˜äùXîw©Û©ë±3âî¼õ©åVå‹÷5ÜÓ@„©ô]àuÙo¤¹amý«}Š
+æYµ”ÆêmÓÒHA?Oá È
+&(úØòÔ
+¿¾mw&E.=“Ú*‘Øáêd8¨ c—QƒàU¬¡¾û¢¬ø. Á$UpŠÊÖ½cÀ2á2ù%αŠ‚Ô«rh = 0×€ÀxŸ/î{ßÎ(ÅZLù´&ò%ÊC˜€”àEsÊS¹‰Ž’Gÿ…Æ:åáH %l q·8†€ýKd èAµƒ/Öewôêb[Ú£­¢apôgèñ"ë¨e|&ÇÇ(ýš†ÞR‘®\ô¯‹Q/OÍrYá7SË"Úθe [Æ€Ÿè¹‡ƒ””Aü–à˜J¡ ñ#rq®ì—‘Ë 2½@/ÊNk–ô£¬XÌã¦éâ
+©_ÙF „eüíh$ÄøF!C˜h‘É)Ý€Ô1ÀÄå,ï„E‡ìÊN $SÌ*' ^ ¦V¨K&½Ì2I…iæTOR%å6\\bÊ® ­‰Î€ÜÈÒnì°(IØòiA¦‡„m1ƒFŸ%R™ÈÀsf´pY„þØѶåÁׄpVsÈTˇúѾ¦8¸ÒƒgjÐ@¥–,龄%c¬ò䙩>Ç”ŒŽ·þÚÀ
+Òøú
+¼ížWª‰\¤ãûCìbÖq«¥ßç2„7ƒoj<…Dä]ÜD#8$V¸eÎÕÔþB¶Ïˆ_’Ï"èâ­Yo)QãzbjowhýµÉIž\"_‚$Æ)aü„¥Jцl-Ù–xÕDºžz ¤
+եܞڂH'€ŸZp!âœ;Õ.Ì %&tp‡N_ï*JPqõ‘ºKÞ—UÕôÙ5÷ýPëªJS‘en™OäòsÊú꿇®iýŸÖ´ÂL| ÈM>ì¹ö‡SªDêf€R+æ*÷e}ûèêSšÈ$Ö^séi94J¯~ËIMÝ?%’º@üÒXaR 'ç 7>Ñå³ßß½ú/|s
+endstream
+endobj
+1084 0 obj <<
+/Type /Page
+/Contents 1085 0 R
+/Resources 1083 0 R
+/MediaBox [0 0 612 792]
+/Parent 1087 0 R
+>> endobj
+1086 0 obj <<
+/D [1084 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1083 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R /F28 597 0 R /F43 827 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1090 0 obj <<
+/Length 1254
+/Filter /FlateDecode
+>>
+stream
+xÚµWm£6þ¾¿"Òݪ¤jlÞ̵ZEÛîZõMwQOU¯œà´˜MÒ(ÿ½cì°„e ¹Û~ Á?óÌÌ3cÇ­GæèÝ•©Ÿ·ó«é[oä"ß³èh¾aÛAžƒG®ã!b9£y0úËÀ¾oÿžÿ4} +ù®kK[b!ây€S}–ð•|äb7[EÉ,`ûƒ‰×joÓÍDï`ùŽ_»q>ÇÍ–åÉ¡× ­¸]N<äS»éd­’rsh:Ús–ßÈrùïÕï<f»ce*ò’ÏŠí±›rÒÚëàcäú¸‡Ï&MDØ$T-\ÂH»i3¢]Œ<dù~#¨x“¼^ÄF¹h³ñ;ØØaÓm²Y±¸Ð¸Úø —˜¦Ùåq(K@ýU<­
+X~±UÇ©üm[ƒÆQÂOÎÒ2”¡táz×2Ýlx"·U:“¶i)Œ¥¾< }¶òdBV!›„èDI²,Ó‡º’9O‚ ]–@A„izh÷ªVªY˜ë§©®2lGŒ|ì)³»äÑJ«se•óSâ±sÔ% ‚(•Å³
+°3èv««5|“±þëêcžºŽsÛ…”ZMøp‘î:Qµi›t×i踈ÚDÍYTpäY•!?ÿ™uøÐÛ>è áb¶3…ÝÁ3è]g¦ë ÷qLIÌ{ž'ˆ8òë6x6
+/4%.Á/@ÉÿRJÅ2²) ;ÿMªqà]å‹:PN`‡õiIͳwó«¬Ú
+endstream
+endobj
+1089 0 obj <<
+/Type /Page
+/Contents 1090 0 R
+/Resources 1088 0 R
+/MediaBox [0 0 612 792]
+/Parent 1087 0 R
+>> endobj
+1091 0 obj <<
+/D [1089 0 R /XYZ 152.694 705.06 null]
+>> endobj
+386 0 obj <<
+/D [1089 0 R /XYZ 153.694 393.156 null]
+>> endobj
+1088 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R /F30 599 0 R /F16 592 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1094 0 obj <<
+/Length 1698
+/Filter /FlateDecode
+>>
+stream
+xÚµXYÛ6~ϯ0°) 1#ºÒ›¦Ù")é¶(¤mÓ¶°º"Ñ›Ã0ú×;<$Ë^Ù–¡öeÍg>‡ó 厖#wôó#×þþxûèéM0òQÐpt»aæ¡ÀÃ#ß ¡Þèv>z痺㷯ŸÞ€$D‘ï3¥Ë|b
+v´Òæ=¦¬ršV£¯×êï
+þÛ<Ö3³2.¤ý+¿$B žNçüñV¯¥H ¾ýÆ8jcšXGì¢È‹L¸ P²“²+–e¾.:¬ZUc5l¬’«8DžÕV Æ&†‡¿£ ļ€°LÈJ^ˆ,ÏÄÞê§7á(GÄ×! eAíè§__<Oˆï:oO’/jŒj•¯“¹‘¯+aÜÌ-òlLBG¡\q;Š³Y²ž‹ÊhÉU\ù2ùR¬Ðxˆëüž-òR®3.…qå:Y.ÍŠ83‚ço~Sèàc›MØTõd<¡”:ÓµTæ(J –ê‰)˜<™[ÍYª N§Ê=óœ÷®ç¾23€/»³Z À6¥]£–¬„þ¹ƒø‰qvóêÏ7/ŸêÎÁÆA ŽŒ€cc*Í(üî‚žMu¶?‰YÂKñ6ŸØyšòlÞ:s};ÁïÅ}šÏEs7ôÕHáp±ey ã*þªîD™M¥"ÅÛ³9ÀqëœÃ;\³¼,EUäÙ¼ê´
+&(®M𴪾¤Ó‡ž¨ü]iþv<ñ]ïDhC4Ú‹Lû0l‚¸ø\XÚ JÊ媌³åCsPñÜ€îb2ñ ÌÝ>s‘4÷.Rõ™ˆ#Û'½·?¡p ˜ëuçt} ÂàBÈع0äG¤ˆùÌu
+¬Ø†FΫC5[
+ =dsä7d3ö|Ç@¾á6˜Ôühœð¹ÐĆ#½+A•Y,ã<3}\ÇBËvp©a(aR (såý>ëý‹ b¬VQÔôdïÍõ¬Se¯äuvoÖóa÷æ £U[ŸŽ!¬çÛÅçtþ`tªlœB§æ›Šp ´`´·/ÿ¸nÎksÛ°«Û¦ˆÁÞ É?‰ñ¹iq¾ßn7»v&ðDúW;i:·n bˆzöæ§vÔ\æ¤>»wøÃqdølõk(Ïd^ä‹Í6Ñ›©|Ùn0r·uNçå\OAÉQdÿã §ZÏfUœöî‹R\¤Ÿ
+m&²k€;ú
+ ͘OÎv—“Zq/n£&-±@G‹2öÆ‚Ó²‰·©“pWp"‘þ­¥qZ <©.¨¸Œ EgÓ|S§|ƒ×G!ë¢eCµ¸þUÓ¿ÔŸÝü~(úïo8ÝÙ¢±iz‘4ã‚R©ŸÛÀÉÀˆßm·—D?ŒÎ”§~à~¸ \44o7­š»íí×F¬PO7»º}[ÜËí\,š€^á+rw{¤wëˆê»®?‚Þ«.¨??{´×wÍ)¯Dg¢º‹ Œ<ãîÜgÎÖËÉ
+›Wò(Ö>@›Lô‡U]›'Ã{:²—¡ÅƒÐ–gÐöH€ ¹°=Ѻc#B
+endstream
+endobj
+1093 0 obj <<
+/Type /Page
+/Contents 1094 0 R
+/Resources 1092 0 R
+/MediaBox [0 0 612 792]
+/Parent 1087 0 R
+>> endobj
+1095 0 obj <<
+/D [1093 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1092 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1098 0 obj <<
+/Length 1259
+/Filter /FlateDecode
+>>
+stream
+xÚµX]›F}ϯ r*a©ž0_ “‡ÊÝf)R_«jÕ4ÒØà5
+Ä`íz-ÿ÷^>1^ÃÚ}Ø…˜{ÎÜ{çÞƒ-ãÁ°ŒOo¬ ×»Ù›w)7$m›³¥-Œl* › DàÉÌ5þ1¿aʦQ˜Fq´ÿ;û\¯÷Q6’‚:ÙZÆÆĘ`Š$ÅRbÙ$[Ò†q·%بí»Þ² 3Â#2¢»Ÿ‹µM”I¹v‚-$¹¬ah ¡ˆQÁtZ+_i[c]Ö’k’^«tµXEþÂë²\¼Þ¶Ì;,S¨¬Ý±ËQyb7Âû݈ÀÝçŽòu¨­N·7ž›ðœŠ^$~œ–³sËÜwm·Dj“²¯$•zO6#–uFâJF§èÙó!”œÛP:€_ÍH^Ìù}ÿœÖŃZX;[NŒ‰ <À2Áêq¦|8†(bgPÜFÂ&ÔWµÎG©©tveæ—û?gÙr¨MHbpA˜•ê>Àòé¿è/…u”x…•()fOkÔá!ÁÓ¢,bNí<¨ˆW±ñ•L^µG{é<zÊÙÿŒvo ¿ízg9t ØrºIp|DÁ±péc¾¹p9jÚ˜,ÏÓñ„—EЋ<¾@îdÞ‹ÜÔ_ºþ:?ênñëaùg¿à‘Ë¥÷\
+1`lbCa^÷×÷ Ô„múË‹:±¬%„Zë%ô3}j‘qDaå{a”–L#åznÖy95]ï›…Yè¹Å3?,®z³Ç,÷¦ÊÍfSjL„¹-çuqM£jœï âf3$,7XvûeÕÛÓ•J‹n±©™Åcn›êÁC°oÆÍß•Ú@« v[ªŒ
+f7Úëò § ´óÝç¤l‡~¨SO¹]šƒd»hK‡õ’¼E ïK4ßèô÷h½V¡[åÀ
+ìëßÜMUøœrì‹Ç´¤~èå:Müð¡ÚJ>+øÐÊ_Ø„zÇQ’zîûïß?8ââ"“8ð”®pª›cFUÌ[¬ª ãÜRÁ;²W‚h®r9xiÓÁÇ©|°ÎQiõìc³Þ„Ä=‹p¯¼–äªSù>­¼2à4Iúž&É®9MgrwÂÇ‹=O’:O:öþr[ ÒU9[w˜|”UñrVo×ór2Ný(üi
+endstream
+endobj
+1097 0 obj <<
+/Type /Page
+/Contents 1098 0 R
+/Resources 1096 0 R
+/MediaBox [0 0 612 792]
+/Parent 1087 0 R
+>> endobj
+1099 0 obj <<
+/D [1097 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1096 0 obj <<
+/Font << /F35 743 0 R /F7 744 0 R /F8 596 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1102 0 obj <<
+/Length 1194
+/Filter /FlateDecode
+>>
+stream
+xÚ­˜moÛ6€¿çW¨HØ̈¤^ 0²&Ã
+º è°­€^h…ˆ$jÝ43üßGŠ”"«ž-jùdòDÝ=w<ž²­Ì²­Ÿ/lý{}quë[}X÷ :.ð]hy®v­ûÔúc –ݸº’
+ÑK.íº" OX%ö¡¯hrÁô ­çºöœFPŽÀ„#>…Ø0
+¡¡õ QˆgDÙ¦¹PF!ÉYCf¤‚††ëcZŸê{2Í€ÿòÝpó64|Ú÷Yûî˜ H“U_BƒÖ MëböÍ åBÞÙF§í¨zåèŸõ½™K¸ŸÞ¹ ’¥GR—+`#RÈYªgeµ&O©N7L6®¶ØÎ+„†îOÖŒíIšëˆ6äˆ[ÓíÀWh=ûbÑkÞ†06=~‡åþ^¢]×t¾ˆwƒÃº{+½ÝïM°œ9Xm!: j%'`N´´Ð¶Æá÷=mM¾Ê{Èš–¢IeìñDw„À‡¨#þU¶KªC}\ÊÞ.Ó­TJ*Õ Š;W™P¢{.Ñ®éžK7©¥’'ýÙh¶+ù‘&pBoT¶Õºƒ>dõl¸}âsZp,'] éNÎï÷Ë5Ù¯q Š9žöyaM7ßúlk9Mß nb­ KŒv²ß\
+¬FÊ;®¡Ì ̓뿉¾vHÙø»™žÇ»£_:˜86CqL¿”ŒîÖ‰š†]xúràƒ7nî/þÅò@
+endstream
+endobj
+1101 0 obj <<
+/Type /Page
+/Contents 1102 0 R
+/Resources 1100 0 R
+/MediaBox [0 0 612 792]
+/Parent 1087 0 R
+>> endobj
+1103 0 obj <<
+/D [1101 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1100 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1106 0 obj <<
+/Length 1172
+/Filter /FlateDecode
+>>
+stream
+xÚÅXQo¤6~ϯ ‘ØJë`ÛPUUzjrº>U§U{RÓ6k«, ð¦Ù‹òß;¶Y²›u.ærUŸ0Æžï›™oÆ@ÝDIôþ$®ï'g—"â(4‹e„S†ÃgÊ¢Å*ú3&0;ûkñëÙ%Ìd(ç<µk3Äxvì¢ÓÏ:y×o×ËŸ†µ XC4åÄ,žãq£9%(Où`˜Ïæ/n¥Û„ùþ&ÎÁt‡€“VûLÓåÉÈãº*ú~6§‚ÅM«USÿ0›³$‰µ‚’,Ÿ†±n
+Þ»F:{ô‚a^ï~Úšàß°í 1¥í—M£køør&²¯êþûhöùR
+Ž±VO Xþ†s€O©†©§@–ü_§@†ÿ“SàÉÿñãáo ø D™ùµc~xÑá×N–ì¸Xœü Ÿ62
+endstream
+endobj
+1105 0 obj <<
+/Type /Page
+/Contents 1106 0 R
+/Resources 1104 0 R
+/MediaBox [0 0 612 792]
+/Parent 1087 0 R
+>> endobj
+1107 0 obj <<
+/D [1105 0 R /XYZ 152.694 705.06 null]
+>> endobj
+390 0 obj <<
+/D [1105 0 R /XYZ 153.694 640.23 null]
+>> endobj
+394 0 obj <<
+/D [1105 0 R /XYZ 153.694 558.64 null]
+>> endobj
+1104 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F30 599 0 R /F16 592 0 R /F8 596 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1110 0 obj <<
+/Length 960
+/Filter /FlateDecode
+>>
+stream
+xÚµ˜M“›8†ïó+¸L>XÑ' Ú‹“ª|T*§-ß6{ ƒ<&Á@lgÖ•ÿ¾f4cÉq.FM¿­‡–Ü÷ >ÞÀþún}óæCD€Ç$ Ö›
+·©4mÚšF®Feß®´‹ci:u#6¢å]‡N9SÇ’}‘M,úG4šR¯ÐCUÆiÛæ÷åNtPþõ à<ôoCÀ„†Y¥ã(ï-©Iú Æ´®‡RMÈ}½ÚVÕç@9ˆFÃsÀ–ù”
+endstream
+endobj
+1109 0 obj <<
+/Type /Page
+/Contents 1110 0 R
+/Resources 1108 0 R
+/MediaBox [0 0 612 792]
+/Parent 1112 0 R
+>> endobj
+1111 0 obj <<
+/D [1109 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1108 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1115 0 obj <<
+/Length 734
+/Filter /FlateDecode
+>>
+stream
+xÚ½˜ËŽ›0†÷ólFšYÄÁÆ6fQ Ujªv]ÛE&˜` 7“iUõÝ áža’ã4Ó’cóËï;¶µ³lëóÝ>?®ï–+×âÈsa­C S†\†-Î\Df­ëÛ!„?þX]®ª<Îéq®@Œ{Õ{Ž“¾c‡FrDRí"ý¸`„=–ëfᘱh.°<æõ Ì(eÞ
+ätš~ñÏmƒi (†gY¤‹)%ätÜ ˆ©´›:ÌB/›ËŸ{°‘P mœmô XòZIdFI&B¢p›™ClX0Ô$˜)©´çÖe™Ø#…YWðÿ‡1h,ïÖ¥©vafè‡yõüü$
+ª^Šì33‰!ù”ée ;&ùµênW[fPoV^† ¨ÿRáɶf0·K6ÅN¥ù¦È÷eÔžÝ 6ƒÙXõþá:—™G0
+Eª4©¾âÏ`6$YìdºýUêBêm$Ž\Þ"ͤ¾ô>7_¾Wg,“.Â<'–¡nô¢®¸Û1a
+é(&_æSZL5É5
+F™¨;&çx?V¥þbp‚çs¶@\ä :ŸÄ©¢gNÇÍê$zjËë¶,m¡ß¶d<pÜ´oZÇ$ˆ![
+bìârÔ4
+…Ò2yÏZàu¥ÿËk¹–WM%ü8•cDH}ÙömŸŸ¬ø´¾û ½šºã
+endstream
+endobj
+1114 0 obj <<
+/Type /Page
+/Contents 1115 0 R
+/Resources 1113 0 R
+/MediaBox [0 0 612 792]
+/Parent 1112 0 R
+>> endobj
+1116 0 obj <<
+/D [1114 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1113 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1119 0 obj <<
+/Length 920
+/Filter /FlateDecode
+>>
+stream
+xÚ½Xßo³6}ï_ÁK%˜„ëßØÓ4uÓÚI{š¦hš´o$qZ$B8YÛiÿû.àPè‡VS¢>a;ö9×÷žƒqpðààç+ìž?®®nî“@"0¬vá%‚R$ˆ2¬¶ÁŸ!¥RG­~¹¹‡…´”¼«pÚI_ãyº6ymÊ(T„¼´Ýª!AìVÅD ÍÏø öÂßš]ó¸Í³ÚfÙ?×ÿ‘ºÇ'ø4AZñQüfg÷iõã^–M0¹åo™¨S“©¿³­}ü8óbJ·§´Ø˜1i<ª–7#÷b´‡òUÍ@yÛuÊüXÓáÀ>+Žµx'Õ!¼‚(Óª‚¾ âƒ1¼&BzÅY³ïƒåM“¼ëŠ¯½-¦>`±YÓ =æ/}…šlùl—):Ûe¸b³MÖô_f0p_†áF§öù²dŸâcFv1yÓÈ Y%ó|šác¥–ùø䟽ÌÆþL’‹ûcJ“ ”œôhtvÍç”\³E%ŸQ¾¨â'ÿô‹Ï~mkyÑ‚Ï7ùÉã°~ÍÏ2“ŸüP½ÌäþL ãO®9Ãärïu†ß÷øõw7—ö{7Ãu 1.iŠ‘¤I3
+ Ò¡&QLZ«GÓ-"r¸H
+DIŸBÎ7¶14ãHã>ˆMžÖu³D„‡Òf‡â[81í4¡a¥çqì@@Âí1w˜*Ð*»bÀå”P ‚uživ3IÂ/˜ð<"¡[I‡KY‚pB†± Ê>}M·`Îú¼du‡\µ¨1 Óm3€Ã¬èžëˆ&ás×îÓ0"N$"Bœ+s²æ‰OðbDqÏ»…,PnŽ{SDаæ ¡ÙaZ7­ÚŲ›¢Õp‹½1nËCVØ:{™H¬$Ö>ÈG€‡) ((
+endstream
+endobj
+1118 0 obj <<
+/Type /Page
+/Contents 1119 0 R
+/Resources 1117 0 R
+/MediaBox [0 0 612 792]
+/Parent 1112 0 R
+>> endobj
+1120 0 obj <<
+/D [1118 0 R /XYZ 152.694 705.06 null]
+>> endobj
+398 0 obj <<
+/D [1118 0 R /XYZ 153.694 248.698 null]
+>> endobj
+402 0 obj <<
+/D [1118 0 R /XYZ 153.694 167.108 null]
+>> endobj
+1117 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F30 599 0 R /F16 592 0 R /F8 596 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1123 0 obj <<
+/Length 859
+/Filter /FlateDecode
+>>
+stream
+xÚÅXÍo›0½÷¯`‡Jí¡aûUj«îXEÛ¤uš˜ÎNÖ6êÿ>À”|™ÄNÒõø½çg¿gCà=yw{´Ç«áÉå õBŸSļaìL|J€êCD¼áØûyQ@Î ¿^ÞT-Ìçaˆëg!ò!¥Uæ¡€ðXÄõa Ä$æ§úåòí; ð9á]ùÐTžúœáåò"Ë4Ÿ*S]ý°®ËººÔªî­HE!Gߣ"•éÓüîü‚@r6™–JŸ=
+},D4Ög2mï¼èãýõ·¡øñE_<$¸ŠdRÕÒ ÙTUmàítñ… l§Þoòr«ÑÏy”Ž£X‰¢¹LJa +¥W'ˆƒ
+?$´—DÍl|œ ê‰}Zf#îœÙø#3Ι |ŽÙü—ÈÆð˜‘ÑgE6ÆGŒlLœ¶×£¢Úæ:6¶ûû´±Çî°š»3Yï°çÜ'¿50=PªÕjÌE+%Ó•ø^*Õ(­>í—ȬçKĬ Ž P·§µ¤JQ—‰Dà^50‹´9ÀºGÝ_ÚËæñª ºø àÆ}ŒR]—±•7®‡'ÿ
+endstream
+endobj
+1122 0 obj <<
+/Type /Page
+/Contents 1123 0 R
+/Resources 1121 0 R
+/MediaBox [0 0 612 792]
+/Parent 1112 0 R
+>> endobj
+1124 0 obj <<
+/D [1122 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1121 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1127 0 obj <<
+/Length 1146
+/Filter /FlateDecode
+>>
+stream
+xÚ½X]oÛ6}ϯð
+È̈¤ø¡aÒbIÚaC`l–=È1“%A¢\'Aÿû.?"Û‰ÚHI°'‘yyî¹$¥xr=‰'çGqx~˜Ÿ‰ G© r2_MpÂ`x™@„²É|9ù;‚þ3ÿíø Z$J9O\_‰OÇuúúÎwÙG›….3£”¥Zò,Ú%¦ÉR­ìã÷¬¾V÷Ï¢Ëõ R™ì£Ÿ4ʬÊÂ4úNu4îÅVo*seïŠÐãñ7ÕGŒÒçýÅùéýtù2},×g£5DÈÒ·ˆÇcºi‡øgŽ{À©@4M¿§eñòl­8¬2½
+@9É›ÊCÇÈóq¤<É‹ìóq'Í.CŸût9ÍÙ+õa(Mp‡ö|¶¾ûùãÊü:Æ°1"špâQcĉ€X@åUNgÍo”„ùþ ÎÁB˜T¦š&(»I\åYÓLÁ2,*+£Ëâ§éŒÅqdú)0!(–é8Žu 8Z¶yÀ”“4!ÜGŽL00’Ä° œA–D—1Nò)ŽÂ@²?l ¼?T›íS8nÚÉ¢\;ÔŽ²¥mˆ#]øçbJDtëË
+Ä‚#ÌØ`­6Fm“Þ‘¸ã]‚DFWíZS(Ïpe§`W˜5¶Ô„¹¬úhS8.÷‡ªÔÞþOÙ9U»IÞ
+_9ö“!÷°u:ˆ:[”µÔM•g·Í¿ºzÕ¾«NB¹32oú¤u­‹¶¡yèÔä°íh¡òòË“©õNzèåTâñ¢Ü”µñô6÷þ.H°¯ÉàÅ“ñ‹4ŽXxzÚ]€FÏ‘šc®ŒãÈuctWú4œ&yƒO…Œ9Bȯ|Ä *ù‹ÙÑ„v)ŒØ¨$–âI,Çä0kù?çðŽ9}M?Ðß}KÀîþ¹^|1ƒ/+ø0´?îü~6݈ÓùÑOÿå¤
+endstream
+endobj
+1126 0 obj <<
+/Type /Page
+/Contents 1127 0 R
+/Resources 1125 0 R
+/MediaBox [0 0 612 792]
+/Parent 1112 0 R
+>> endobj
+1128 0 obj <<
+/D [1126 0 R /XYZ 152.694 705.06 null]
+>> endobj
+406 0 obj <<
+/D [1126 0 R /XYZ 153.694 492.783 null]
+>> endobj
+410 0 obj <<
+/D [1126 0 R /XYZ 153.694 411.193 null]
+>> endobj
+1125 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F30 599 0 R /F16 592 0 R /F8 596 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1131 0 obj <<
+/Length 880
+/Filter /FlateDecode
+>>
+stream
+xÚ½XÉnÛ0¼ç+t 0Ã}º¤’EEë[Ûƒ˱PY,&m’ößKZ²¼Ñ0é¸9iáÓ¼áC
+F·Œ®N`{ý089»J Æ¢ †"ÎÀ„EƒQô-ÆDÁÞÁ§³KóFÅ9µ±X
+a¢ÐµŸBKttB×K…îç5†qDU"$Ñû/W!ÑÃ$²i‰ìV‡­A˜U "Ðä.l
+ùô¦>6K+­1wèã¶a,ªòÒ'Oµ½|4Ìß,ºàíšdŸ¾>C¦ŽÞ¶02çB9nP!àØœ–’£Uõú™ÆçAqrkŒ‚Åf¯a:ÕÛ‡?hf·ƒIV7§Ì›²×Ç2¥Ísùz:-‹æ^—MÛÐDŠ¸ÔÇ)°ä‹.!Tém˜#ú"&)F. ˆèb¬.3Š¸‹®ê‚N·y Æ+KþO7"Ý¿´uˆ›c3ÜX)Û ÚüF뾸œüâ/Ó3
+endstream
+endobj
+1130 0 obj <<
+/Type /Page
+/Contents 1131 0 R
+/Resources 1129 0 R
+/MediaBox [0 0 612 792]
+/Parent 1112 0 R
+>> endobj
+1132 0 obj <<
+/D [1130 0 R /XYZ 152.694 705.06 null]
+>> endobj
+414 0 obj <<
+/D [1130 0 R /XYZ 153.694 172.758 null]
+>> endobj
+1129 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R /F28 597 0 R /F30 599 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1135 0 obj <<
+/Length 731
+/Filter /FlateDecode
+>>
+stream
+xÚ½˜ÉnÛ0†ïy
+]
+83â2¤t(`¨ ôì[ÛƒQaY,:)äÝ«ÍZRÁ¦NO¶ir¾Y8ÿÈö½GÏ÷¾ÝøÝë—ÍÍÝZy’„ŠÞ&ö¨
+ƒ¹à=U¨½vr:|W\1Âw „páÐË5À—@\nå׳- $½1ŽÒ…>¥.ÚÐùDÏC
+bób\É%W@!½mÛEÁÎ#¦‰—hFŸ&g¬0Ö6OåÎ ë0 @Ê"5¶£ŒØZ„(Jœçvˆƒ;Ü'ðqyÒ¿m[ìÏRz­X¡!ôLL`¸‰YG¡³ÔdºDÍÀQ×Åp¿-u±m’:¯K³*⪓àŸ'à⺼¦@ƒº¢@C€¾ëãñ$‡vÂõëCž÷z
+¿Î±ƒRIRªÈìu¶šIAûåSõ¸6ݯŽtkI@9±Ó‡l9Å$Õjú„€ÉN[‡xGä{\âæ~œæ[Û\ZÁ|AÅßW‰Í\%ár»ñj3xÃhå ó?Àœ0™¬ö§q…ËêçÞ\b„»+ã
+)œ~E÷é(-’Á‡IQ¬3Ó:5ìë”i’œ"®â¢zŽDý46)>‹œŽ«·;1–yŸÛ‹aöàÜ­/¬ì1ÙØ“”0V±9#A¥:ÙNN|ÝÜü ðkâ
+endstream
+endobj
+1134 0 obj <<
+/Type /Page
+/Contents 1135 0 R
+/Resources 1133 0 R
+/MediaBox [0 0 612 792]
+/Parent 1137 0 R
+>> endobj
+1136 0 obj <<
+/D [1134 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1133 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1140 0 obj <<
+/Length 892
+/Filter /FlateDecode
+>>
+stream
+xÚµ˜Ko›@Çïù\"ÙovöMUUQ¥¦jϾµ=³ŽWÅØ2˜&}|÷.æQˆ‰½Ó ó›ÇF^pðàà㮯ïçW7w2(”Tóe
+…`[…¸­ŸƒÑW ì6¾O–Û|³Î8á¼Í«›m²Ïª;Xš¤rÕ¥ÎjW3À(äaKÔL×TÀ‹½>ÇU-Wzpï7ù«³eÑR•uíLºvÛ}¶ª0Ò’ÏPþu2t¢XÿÙws¢§‘½6*ìŠ4i¬ÓšÜN½Ö».ž²|§óÅJ¸·î⚉Vt@Í£µI»Ï\»¨¨S ‰^æ•^Ìt\ÚX°OU™/¥Ä`Ž'Dø`¸7ÆÔ%#ç1íT+á‹)šl¼Š&=1EÝ >åKiZ^:sÛ±^bb²üÓ¯>øH‡eãšÓŒ¯±‚zcâ9¬áÐÚ!…ŠucïN*àçq°£(Ä‹aÔ¾Ÿ‡Na˜\¯G*Ç qœß]®…:. è^'mZÂCy!óVž1§¥gÜ¥ÃzvÈóÕsRù;Š‹(]è¾á¬WçÞ o)ÿ I§0ºƒýŒZrqÊ :a9cÂç…cü
+9ŸÓ³³ 9† =²¢9&ÞŠ_JSoA—¿ÞöTÕ r(Ÿ—DÈ^'ö:&g UìÂ_ìÅi­îR——I½[éjÔÒúÿ!;]Y÷¾¨°c×`̺ñ¯ëéõ\¸og —Uvìå lÔÒžß-×oo
+Д½ä/‡P
+)!{ßÞ²ÍÂèüé˜Ç1âmÓWQÖK¡ ”’·W^‹´˜r1‰’ýPš„#IåQ»&À‘[  Ò ýÂ
+endstream
+endobj
+1139 0 obj <<
+/Type /Page
+/Contents 1140 0 R
+/Resources 1138 0 R
+/MediaBox [0 0 612 792]
+/Parent 1137 0 R
+>> endobj
+1141 0 obj <<
+/D [1139 0 R /XYZ 152.694 705.06 null]
+>> endobj
+418 0 obj <<
+/D [1139 0 R /XYZ 153.694 168.969 null]
+>> endobj
+1138 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F30 599 0 R /F16 592 0 R /F8 596 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1144 0 obj <<
+/Length 1607
+/Filter /FlateDecode
+>>
+stream
+xÚíËn7ðž¯PV…E“ÜwPN»M/ R£ ä@­(™éjWà®l«†ÿ½3®–ÔÈj=øDîp8oÎCâ½I÷~yÁýúúêÅÙeÖËYžÈ¤w5î‰$cI˜õ’8e2Œ{W£ÞçàWmõiF<(êþ@fÁHÃg˜ÍÌ}êÂ|á"*˜mM‡¯ÞÿN€oõÜV}¨²!€ñk£gʪVèB=o >¶õ”@íµ&Ї‹?®ú_¯~ëÉ<c2 {ÉD‘€î$f1H¼þDWG(sóC„"ci,{!X{§ºêƒ&(
+Uyó¦­§æ/Mð•ü"b"ÍIþx·üñJ~¸:ì¿í›ùlV.L5¡OËx¹jÿ¶BJg—rç"d|ʉ*³ía­#¥ä¶UЫ¥f`áDÙs°îÎÕµs§äd5ØŠ<Ðw­®SWtBtho<Š¢ÏiQ%ǵ¥õ=¢ Ô¸ž{2frÝ9>o­i5ÝZ ù
+9D³ ;E¢Ëò¼>¯Ïëóú[Ï.¡šf\““+‡ä—3‡”üNúƒXÆ[Iù~\ן%çâŒçgBÖ`~÷¦.0'~=qyirH¨yGs+¥wÅDrÆ#ör¹Á›¥>õf¾­È‚Âè“ðÂCçæuå¿ìZ ÈÃçxÑú«ªÛ8Ì[W;êãÚ;¸Gœ""ô'ô5òØj³,_‚ʱ„ʌջÒûk§¯! ŽÕ¼l©˜|‰±ñSåîzq°€*.ç߈ڹçr?³êáP?prø•+«(pM²–ØÉý‰VÑ·¦ñÚP'²^g®õ«Áy2uEhñ^þ7
+΀r‹ô–*
+þð¯"­Ÿ…ÎçiâZ0ë\KŸÂÆÞÔ#µÐbÌ7Æw¶
+|ÿ–rðÔ•BÜ 5­¸Ãxp' ZÑÛúÓ>yCJ|­Léâõ¼Å4÷pr¸àâ»ö~8ܼRä=}7ƒÉR!}¹Ï²Ñßc‘-Y„Yz3@žbèÆfÅípkűr¿@œcÛwÿA߀÷É×MÍš WET—…ôèaG‰pã=Ö¼8«ŸÖ|’±úqýð¿|`}pþOiVCåY ïõ£º¢¼Üeɲ,}œ\ä¾4Ÿäë&x£A«ß91\ãuï,s­ª‰îªƒïô´'ø8’Ò£x÷ðÀ{åúì(ÞÅÞÅ“xçGñíá=z
+ïÅ[ïá­ŸÄ[Å»Üû|oyï¦UûÂÍ=E‚ðH fÚîÏž"Ct„ v:ÛÉáÄ{mâÙü/A0)süÁR‘Ïà W/þÑy
+
+endstream
+endobj
+1143 0 obj <<
+/Type /Page
+/Contents 1144 0 R
+/Resources 1142 0 R
+/MediaBox [0 0 612 792]
+/Parent 1137 0 R
+>> endobj
+1145 0 obj <<
+/D [1143 0 R /XYZ 152.694 705.06 null]
+>> endobj
+422 0 obj <<
+/D [1143 0 R /XYZ 153.694 368.651 null]
+>> endobj
+1142 0 obj <<
+/Font << /F8 596 0 R /F28 597 0 R /F35 743 0 R /F7 744 0 R /F30 599 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1148 0 obj <<
+/Length 1447
+/Filter /FlateDecode
+>>
+stream
+xÚ­X]oÛ6}ï¯ÐË
+Цq¡¹¨/e;â±ìh3ž„³Bôy®Z ßüÚÄžq˜NLº¸(ANNþqŠg£XÓPy ÓÒk.ØK­Ô &8¤¸;ºeÃï ÝÃȵHR\låî¼Ù²Él}l7jC«ZŒcû3ó½*¸ '—¤yS´»±c¿Ý°úqŽq€vÉ 7µ˜@åD—ÔM\rét‚¬±Fj‹bìµµCR%™# '£‚ƒ2¹#¥ÕË(½y>¥Ø)·S}´ê}…÷’v\ÂGä@Á%ÿ6Tí~§ªïØóB4¥hA]²©(vSíߊºî]Ö˜Ø%aŠêÜó¶G0—D{™m^Žh.)®íèc¸Olû²hŠ'àÕi`—˜I€‹ÓÀoŸŸÒâÌ ¸< ü‹Ãˆs'`vxñ|à$t®N;zvâ’˜ººÝMѦk¨ãê¸ä§V¶4ï&+Ât}¸Ü%æÓ´rÊ®/‹Æe˜¸$5©7ðWb;9+ü›øÄ%çm»lêàt¾w’ãÌLOú$A
+ikÅÚ¾•5Ë}¥¥0`ºdÀP
+`ð¸½R¨„3=UCa{ úà«?Œvúc¯ÝOP„¹çMyÐxüûû¥•¯xsmU=ÜH}ïûQÌã$H“…Ð1X~^7ò¡^‰j‚>”¡m8š„ÿâë°E(Iæé'¶Ög_Ï1ùM€ÉÑhiTŒƒ]‘AÈÅ¡>öFÕZü[+jÃ*[û¨­ÿ0èh ŸG7 ¿¡Á£¡“
+iÊx~Mµ­¹÷´ÑYד^D‚œi³½TßÔ§¹_ömÅ ªLÎL!Y@Ç‘_3[Z3s’ÖV§ ýžt }^Ã<Z{ÍÔN̘OòhÖ+®%Âñ7öZW‹Çßþh>zýà:ѧd” `d¶À›BÔ-U|U 5wÜÈ­?->Û8Áa벑BNG
+øeœ¤°HØÞ
+
+Ygèúþ7p½apõÈ6ËÉÄh±|õ÷ε
+endstream
+endobj
+1147 0 obj <<
+/Type /Page
+/Contents 1148 0 R
+/Resources 1146 0 R
+/MediaBox [0 0 612 792]
+/Parent 1137 0 R
+>> endobj
+1149 0 obj <<
+/D [1147 0 R /XYZ 152.694 705.06 null]
+>> endobj
+426 0 obj <<
+/D [1147 0 R /XYZ 153.694 667.198 null]
+>> endobj
+430 0 obj <<
+/D [1147 0 R /XYZ 153.694 292.402 null]
+>> endobj
+434 0 obj <<
+/D [1147 0 R /XYZ 153.694 232.979 null]
+>> endobj
+1146 0 obj <<
+/Font << /F30 599 0 R /F8 596 0 R /F7 744 0 R /F35 743 0 R /F31 600 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1152 0 obj <<
+/Length 1464
+/Filter /FlateDecode
+>>
+stream
+xÚ­XYÛ6~ϯP‹šuPTóP§mR´è…Ôh 4}ÐJ”Í®$½ÞÍvÿ{‡‡Û«ÔônžxhøÍ¡#ÍDÁ"ˆ‚ïžDnüzþäŨ 1 æM€³‘" H–£8É‚yür5™&ù Ç8ì…ÛhEY³ú ½ áfÓÙÝ$ÎÃõàÄVRègW¼vK‹Ó±²çýÂî5BNþžÿðâM¼oOå(*0k,y‡“tήÕ/ò§R-­ü¾8X%ÉVzkØ’WZÿÒ*RËRYý«Òì_N2– ¦á‚iLRDâ4˜bŒŠÌE +/w:
+c ñþeHP‘j
+¢´pÒOï[
+V¥,²\-ÏU‘|„ëd—äžÃM…«eTýûQxwæ>=M—sù’ggòåaÌ!ç2goÊÚùkÊB£G°Š>ŒU¢YáÁƒs‰@£áA÷âGPâ¡ì ñ'`ÇÃÉB“OD–Ç°‡¦IÊ7%Q¿ô1«”dò ‰×g·áÞŸZšŸüI¸óÿ- ôd ïÎbqM{[®Vî7©Õºc½šñž«¥—·þÊŠÈëoiÆ›ëuúxÏêÃÿøÓ¿O»K^`¯÷ø-«ÚR²·æÇþÑue¬ÓÙÔu¢ffÑ”pñgÃæά”\›Åø;eDŸfÄíœ(’Oɉ"õâDË”qÉ!Ôxlf~Ô6GK¬KP»šã MlÕõà0ðEo瀣'YXCíS6ÓuÀá&­²OW-[éÊßœ‚
+ J¤›Ö-uCˆ½úõ·—N‡þP€•­]WàÖ¶54ßVÞp˜÷ƒ*ûÊ5p
+…ƽނQ §Ó8º(´ )M¿Dï^ìIpƒ~¥åĥ鞘s½M̆©ÁGZ9Eù‡6‚ÕŠÙý¸Çá,ÞÊ!¤«Qœš¦Žq˜ÕP¤ VYÍt7îßÎV3¾}ý»-1$Oß&ÂXÅ–@!—"TlEæE=íßBŠõŠÕe]ƒÑ¦rÞ5ÃNÁ”äPöRÇAüø‘öñmO)¢¸¸g9ñ²\²žmXÅ¥èu½Ýi¼;'‘ú•†î†nÊAmD%ZÈRÆI³Xw=¬ýSõR ôµØ ½?xá¡Û¾›ÿƒÝ¾E^°jÉ;(H{/Ä;Ÿ“Èï[SÍ4®ž½¹žšŒ‘iüØÜâ:6¦»SÁ‡I'=—‘¾„››¦öË,¯Z†ªvpÉ)טÓ~¹™p)®g¹$|ϤøêéÛ!¡`D3—” J\†¶7s'ôzþä?«š¡i
+endstream
+endobj
+1151 0 obj <<
+/Type /Page
+/Contents 1152 0 R
+/Resources 1150 0 R
+/MediaBox [0 0 612 792]
+/Parent 1137 0 R
+>> endobj
+1153 0 obj <<
+/D [1151 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1150 0 obj <<
+/Font << /F8 596 0 R /F28 597 0 R /F7 744 0 R /F11 749 0 R /F35 743 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1156 0 obj <<
+/Length 1438
+/Filter /FlateDecode
+>>
+stream
+xÚ­XMoã6½çWøR@VŠø!QB/ÞMÛ=X=t{P,ÚVV– ‰Ž7 òßw†¤$ÛQV4Ò“Åñh†ó4|3Ãp¶™…³ßnBûûËòæöNÌâ ,™-×3£@DdG" ,š-óÙ?C:ÿwùéö$IÆ1׺IÅ)ØÑJ/Ï?Ss¾ÕñI¤QÚ›c#æ¨Ò„wæ¾ÆY«Žõª.íñfuØU›¦È_´¨’Ç}¶‘/cέEã<éóéX´µ¥©_ðÑ€ˆ“‚+J‡ÖM]©]¦”lÙ}«šl¥¶2Ë‹jsæâö.™¥°›¯@ž²n;ÿü<÷9 ½Oõ¡©²²Åñ²²4âVÎ}â)³
+
+&nÜî°Ø;2áÆëPcIä×,³oSN¨''YþphÕëãèHêÈNXÓðš;¶ñ+>,%NðäÅNV ÝÛÊoƉqþ˜U+9hø“üæ(¥Ž»z,ry±¿ãÂÝ sr³¤–Wö”;º
+M6Yá©5©RÚ%~ý ï-XÁù€´ùl„¶ æ~”
+oÙ™³r³ØÙ–N/jìñÌ,Þ4P®ŒôÞh˜©Üp~Qµ²QxýâóPxž?bK‰×•‘®LphS+UcøÝã³ü…æõ°_lëúëkL#DŒùäÇqìý{±þpâú]á¡÷H½+þ³û
+endstream
+endobj
+1155 0 obj <<
+/Type /Page
+/Contents 1156 0 R
+/Resources 1154 0 R
+/MediaBox [0 0 612 792]
+/Parent 1137 0 R
+>> endobj
+1157 0 obj <<
+/D [1155 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1154 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1160 0 obj <<
+/Length 1332
+/Filter /FlateDecode
+>>
+stream
+xÚÍX_£6ßO‘—•ˆT8°Á†·\¥^«{¨*5o½>8‰³¡G
+cȈßÚ"Žõ¦(*L—‡¼Ä’Äc¯ÈK·YíiÜRží48@zªÍ7”ºìOšj•v'*LtÜSn4[^`«†ËÒ«\q³Ét*±oÏ̈)ž2ŠéÝ·PUÂ$Ús……üy\ ,{A<·±e<ðâ”·!…b>–ÎÎ^åìn3ô÷iuéòq‡¯}!ý_*]-O¯¨F1›[Tcòm¡ç+ʯ+zUÏôÄ-¾Zû‰Û³AÝXc[aaÁxzݨuæP5
+I1+ &—½è÷Ei˜8ÄÁæýUuM ­ŸÈЈhbÁ NP ”
+£¸¡gÂiÄ'hiZR½¤SIøpÈ{<‡$u¬º"À²¢ ÇZZ[æДIªÈ`pW/éH¹x#ÝÛú² ÅÒŽËÕ]WÖMn
+ ºFt– 'ŠqÛ•QÅ°Äã/ˆÝ¨Vû¦ò°m°5X 7‰°"2xf`SžÒ#™¦:ï Þ_’â)¨Á
+endstream
+endobj
+1159 0 obj <<
+/Type /Page
+/Contents 1160 0 R
+/Resources 1158 0 R
+/MediaBox [0 0 612 792]
+/Parent 1162 0 R
+>> endobj
+1161 0 obj <<
+/D [1159 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1158 0 obj <<
+/Font << /F8 596 0 R /F28 597 0 R /F7 744 0 R /F35 743 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1165 0 obj <<
+/Length 1301
+/Filter /FlateDecode
+>>
+stream
+xÚ­WKo£H¾çWp±„¥¡CwóÌɳÒfW£Õj´ãÛÎÚvc“`@ÐNfÇÊŸê6$cÇ' ©®ê®ªï«*×Z[®õÇkž¿ÍonïC+@qH#kžXØóQèc+ðCD¨oÍWÖ¿6 |oúßüËí=¬D(OÉFÈbУ„^&Rä ùõÓrp€‘O=Ë!.
+(Ñ»¾cê%U‘‹-‚W3¶(žøŒ%Iš¥L¤EÞ«Ôr(A1ÓÁžþH]³zY¥¥è¨¼½¬®D}%Š"?¶Újç>u(õìOØ.òƒÚl[ìò) mó]$Z¨.ÙÒȳÅÔBJ=MId7ëß]˜#¡©ãy¾ýùë7ýïK±«r–Õúk3Å6{½=/´EþCT¬m®Wê¸Dž
+¹ýYéà¹9ÄNlŠJkZWŮԯ«B‰!aL-‹í¶ÈÍÅ;§WYÑN 'D±GáÒ‘ø?þÉü‘Ñ â~ÒcÛht° .ˆƃã„"†mãõcZÎäË,Évõfíx ³ïµ‰p”‰£fùõs6u|âÛ%,"*W6uúSýªxÆ~Œ·²¾ä9x4Í×ãÇ\Kùq´‰Àe‚­VO*Ë÷ùr¡œ½LÆÁ#ékT>äjÉ|Ft”£ÊŠ—cQ‹ÿgõóþ¥±Ðf9ûˆJ&ÆŠ¼°CsÔNŠ,Ó, SEñ@–æ¼Ms’³¬x‹¨VúÝpÏÜï°$¸‘(v ‰š§Ø¤†ñJM™©Þ€KÊ‘Â;>‘C… ô½&dÝ$¤CjKËÙ“Zki†˜x'crN–úW(²>AÇ'Šì1Xª‡F^LóŸ³LìP¯ ð’UóCLy«`Llg kŠº®.DͶüT)!/£¯{ís°7ŽÞë-Ë2ù’ŠSAª£+=•^d‚Nûƒ¾XÿTºˆ*&
+|à"JHs„¯ÿüu§c=\RMôUOr'{ÏÆô ì–°md¬æŽ(ù4™¢©C‘Ï“”棌 ¾4+zürFf„î%¬<žB|šaÎQ×Wºx4ò:Çe•¬â¸)µƒ-‰ÞýÚ½&3†×?\¹^0ÌŒÀ^Ð ¿‹ØCé²!ö bß~8R!n¨–5ÑÁŠHEÆõZÉÖfqWë:Û”Œ¨—€©ÀôËWF
+x¿)¤ãò9¼B>SP}¢Ð« õpýQ‹‡B74y )Iä-E¿–¶HÉ‚gÅóPÕ!Io€×bŒ?ÒsT"]foS÷ØrȆ¤i; Í1™ÖrÃß…àwz:ÿ¡m<´Ãp±­Ñ×R]¼¬S'Ò[
+ÍÏvìCø$Š‚70ˆ.…A+)öÝ®80Mñ³Pì:­Ô92V­Õ
+endstream
+endobj
+1164 0 obj <<
+/Type /Page
+/Contents 1165 0 R
+/Resources 1163 0 R
+/MediaBox [0 0 612 792]
+/Parent 1162 0 R
+>> endobj
+1166 0 obj <<
+/D [1164 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1163 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1169 0 obj <<
+/Length 1232
+/Filter /FlateDecode
+>>
+stream
+xÚ½WÝo£FÏ_aõ KgÂòMûB5•*åܧ¦kX gÌ"vq’³ò¿wöÃ'\iÓ{Yfæ7ÌÎÌþÆš­gÖì÷3Kÿÿº<»¸f¾N8[f3äzfà¡™ï¦íx³e:ûË°ýЙÿ½üãâvB3ò}WÈÚŽiØ‘BwÈqcN8kkÒ°¤)j¾?Wj}„…V[ ËŒ¼¨Cp‡3
+Ý>BE›-.3Zq…—“¬Úâf3„£”NØáxo~ÉÓ¯ýk(4=?zÕšyn-xÓšøê”dâ/k
+[Ì9ibÜòœ6+RÒûý¼pÔ©â4ݱ'dïˆÇ:ž hd€º”|þ0 ÎÛ`Ù¶~õp{{yg"9ø‰µ‹ëp°íK`Û6…ù²,ç ÇEÆåÍWµøFÛ¦Â%SO-#bafj‡á­^i¬Ãú 7G†ÖÞ’„»¹$ý,¶ã–ì
+Ö=,28(%baþ4_¸~h¬J:‡ô…MøÙ( Z‰ïÏA€ue*ÇÇà/åÒ5j¼&¦F®¹î©ÆUŽ«µVª('?¤ë â©Í Cƒ•p›3µ¹Z¬”qˆùVm©”»ÀwòËó<”/R*4ï+¥À©ÞÅ\yõ<ml3 EÚ8àkW¥‘õÞJè%„JˆÐ¨îà÷”£[Md2š
+/ªµ’îç«HyËE`X¤ÔYÎ<£e©b-”e´Ë¢Ò/i¦þ*Ï3ÕÉ!§j½’o©’Û-Q§N´m¹>lýÏó‚é,“zHóÕ>ãI(D.÷ŠOßu>_x¶'CR7¤†ˆpÆcv¿ÚËMÜ°MQ›y )ñƒêÒRï<‡ÎÂî:°»Ö"gÔ ‘i^º‘¯¨Ä_­ÚÖw–gÉ›hMW«’Ä%Á;²¥)‰Û®Á32Ü-ûsLÃq— NûƒGq‘í¤ŽS[‰0cHú®Üb1(<MñÆû//·ÈŸRÒu[%\óþ—ÓÏ8fÉéILqeÒ=ûÊÑ~BŸlsòPã*Ųxü‚7d TèÏÓ{Ç¡á;îæòêëðwÂà W6zÑQÃ÷vÔ씎:tñ;pýFh˜[ ô
+¹ÐŠ§eÂÈ(åâªcÅw2Þ6éÿ·–ñ¯opÂï‹8Àa‡a€²-ª”(Êû=ÿ ÎXó²aHãb5À H“ %ãízÿiÜG6µ ‚ÎIÿ½Õƒ_P|`²‡–ìGŒèC“Y“‹ýû\ \£—½½f±¤í~0´0dç
+ƒŠ×²\I4Å:—*Ïù-|¿”¢š_Ït#÷ys@ö$²ÓK„ 9SØbLÓTâ~4 иþžgÅàTôƒ‚òÆõ}ü‚ÿŸ¿6Ò»9 Ž(=")òÑiü¶<ûP­Çx
+endstream
+endobj
+1168 0 obj <<
+/Type /Page
+/Contents 1169 0 R
+/Resources 1167 0 R
+/MediaBox [0 0 612 792]
+/Parent 1162 0 R
+>> endobj
+1170 0 obj <<
+/D [1168 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1167 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1173 0 obj <<
+/Length 1174
+/Filter /FlateDecode
+>>
+stream
+xÚµX[ã4~ß_Q©B¤õúšË Ê»¬@ˆ-‰åÁMÜi˜4 ‰Û™¡šÿŽoÉ´Ý2qVÃK}Íw.þÎ9váìfgß¿‚®ýfõêõ»h‚$"ñlµ™!Ê@ÄÐ,dÀ„ÍVùì
+ìpRø’Q€£ÉQ ©yJÓ1YCüâkñ‹bÀÂäYÍÝ–KÍ“Q´“˜ê‰~ÆzÍžÕC#:!K†Y°~°í/oÓûVâwÅ(«ÓŒ/[­†Êl¥ ƧD½È¬g@çVÆ! Q¤ÀHèà2§ù‰¼9:ú;”\Ë!˜
+G^?ÿ€C^ú«œ§übÉbìáž3Ä0¯ÿj1Ó)Ì ~¥ýÙmý•÷¬ò¼,nªc_ðçsÃþvŽl›µSüúÝ”ø+"/ÈC×ùC¾è…&£õéq´ h ¾äe„¡iuz ™ªÐ=ÆÅ ÁÇðç‰Ó©VIÔ“<?ð*çu#­Ä£Égia²ã`·ÉÎ_Ù‹Äc/œ Y¢qh¥Cbu€˜8 -0@ëb‰ƒÁɳÁÁ­þùbIb¼W4GÕø kˆ3â*ûŠ 0xóóÛù«Þ·/;;jöÒv¸nP n>8
+D[¨«ŽƒÜ.~„ õƒ”˜¡`S—e½PëwúGäöÛµ<Ø/ô£Âöº†gÂ}gžÛvZ=hܺÈdQW¢Òûþ]D ´‰Æ*¤Î†õfuµÂ$„U­[lyuST7vr
+endstream
+endobj
+1172 0 obj <<
+/Type /Page
+/Contents 1173 0 R
+/Resources 1171 0 R
+/MediaBox [0 0 612 792]
+/Parent 1162 0 R
+>> endobj
+1174 0 obj <<
+/D [1172 0 R /XYZ 152.694 705.06 null]
+>> endobj
+438 0 obj <<
+/D [1172 0 R /XYZ 153.694 211.912 null]
+>> endobj
+1171 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F31 600 0 R /F8 596 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1177 0 obj <<
+/Length 993
+/Filter /FlateDecode
+>>
+stream
+xÚÅXMoã6½çWšËï[P Û¢À^
+÷´ÙcÓ–[Dy“]#ÿ½¤(Ù’ãDRâ ‹sÞ¼Í<›‚Ñ*‚ÑŸW°¾þ>»úüEF
+(Žy4[FˆÀ8
+@1@¿ScÆi85(Ü«Û>¨¢„ÐØM‰Þ¥±gT7ˆ$—cié0y‹†ÈãIÆàñÐ)þW ‘òâ"Õ%5DÁ÷hˆ;0&:7ƒ%D¡ËJÈ_RByaìù34‚ZgOã—î´ ¤ªˆˆ;<#ãviõnÁ’ÿ2za_9&Šê}EÈö2j)Q® ½*tž¼¨BüÙ_SÅÞ&C‡·N'ïm¨»<QÇãÙÕMì‘×
+endstream
+endobj
+1176 0 obj <<
+/Type /Page
+/Contents 1177 0 R
+/Resources 1175 0 R
+/MediaBox [0 0 612 792]
+/Parent 1162 0 R
+>> endobj
+1178 0 obj <<
+/D [1176 0 R /XYZ 152.694 705.06 null]
+>> endobj
+442 0 obj <<
+/D [1176 0 R /XYZ 153.694 163.344 null]
+>> endobj
+1175 0 obj <<
+/Font << /F8 596 0 R /F43 827 0 R /F28 597 0 R /F7 744 0 R /F35 743 0 R /F31 600 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1181 0 obj <<
+/Length 830
+/Filter /FlateDecode
+>>
+stream
+xÚ½˜ÏoÚ0Çïý+"¡JpÀõÏÄÖ.hÒºiÒnì´î¢AÅFj‹ú¿ÏÆ–-v!;Åy~þ¼gã÷µŒ–Œ>ßÀöùq~swŸD1 áÑ<e a(ŠY0aÑ|ýãDÄ“Ÿó¯w÷ƈcj}Iˆ†³wÚÕi“.›´^½Þ:çcî´už"nÒÏ¥ý<~àñ~Þ"ÔäZ” Yê\…ûeæåöC§HnBÈ/ϲj6é:¯Jýö¦Šiß
+­Vi-C¢âŽ¨ˆ¢vÒZ—)b
+„Ø¡©¶-ê Ö´’é¢íÝÏËvÛª•³®e®]«(•6ÞΧÊ1“¥MO›à б­N…?Sz„ƒ”þÏŸ.@ðPðõ|Ç Ñc…ðâ.1Èã
+×­•,ßJ¸wuÖ“ 4Ú?ù#I™­Òr™7ÕfÖ!.#4Â#²;ñÛYã«5}Kɹ|ÒßëZ6YªänD^'(䢋YàE÷2Äñ€
+ˆ¯+o¸búÆ!¼!¾äˆÇ­p@ $_}Hð5%t9Å
+endstream
+endobj
+1180 0 obj <<
+/Type /Page
+/Contents 1181 0 R
+/Resources 1179 0 R
+/MediaBox [0 0 612 792]
+/Parent 1162 0 R
+>> endobj
+1182 0 obj <<
+/D [1180 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1179 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1185 0 obj <<
+/Length 1251
+/Filter /FlateDecode
+>>
+stream
+xÚ­XËŽ£FÝ÷WXj„¥¸†z;2Q&RV‘â]& l
+›4E·;Vÿ{n=Œ›‰¡“E¹¸ç>Î}”ýÅná/~yðÝóËúáó×`!PÐp±Î˜qp¼<@„òÅ:]üá‘‘åŸë_?…EB0}–ˆFÈ1‡N(Ü–+N¸÷ S×E×by¼Ú9äe×ÚwDäñí“•y ¿r2WØGzx:žo÷E†½Hv_ä ùˆ4FöÅYšvAY5‡¤ÈªRé·Ö…^äªÝ'µAs"nÑĽ+‚}ß ne©d“—»
+Ù5ŒkVEÜÊ­.uq›<Ët°5æ&+çÒTŒ]µˆÕK|®/‚üǨ •§³*ÜEßGüHNÓÃ/؇ÂïH;‡
+I?Ýç­•šØÇó’sæŒÄN.Ñ!+«çt¥`,‹Â¥ÎÞ™¿V$
+‹ÈprÉËQ{‘ }huƒTyRu|/.„œÒóÑÑé&@¾™þãfõhãm“®@×æyõj^µÑî}N–†“šÁFî€.MÕÕ“k¼ˆ&¥ Lº‡¥ù!Öwàì|#é¦:&§Çñ™g<_Ê寿tk
+™©³K-®þ×Á®p–›Ëu#‹ä8¹?tZDA‡Ø™ 8ÅY§›×9`“€!!žÛ:ÙJÇ —WVøx‘&Öz¸ÈKP7Ù÷ ô1±§@Ûx>T©¹èæ»:—±´}Äz§+Ï^-«M#“'½ÜŸ÷L@¦«LRi¿‰*Ï”¡½£VWî!¹üÖkµzGØý…z5øaXk1‹%TWr†ŽœØ§ƒO~^?ü1 ¤
+endstream
+endobj
+1184 0 obj <<
+/Type /Page
+/Contents 1185 0 R
+/Resources 1183 0 R
+/MediaBox [0 0 612 792]
+/Parent 1187 0 R
+>> endobj
+1186 0 obj <<
+/D [1184 0 R /XYZ 152.694 705.06 null]
+>> endobj
+446 0 obj <<
+/D [1184 0 R /XYZ 153.694 526.075 null]
+>> endobj
+1183 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R /F31 600 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1190 0 obj <<
+/Length 1223
+/Filter /FlateDecode
+>>
+stream
+xÚ­X[oÛ6~ﯘu£¸'eÝ2t@Ñb5°‡u´DÛZiI¨©‘ÿ¾Ã‹âKÔZJýÒä¹|üyN<gíxÎo<ûýuñææŽ81¢$HœÅÊÁa„H„8"È"g‘;ÿ¸~B’Ù¿‹?oî`&A4ŽCµÖ'ˆ&!èÑ‹¾à ¬YcÖªœÛusì!Ñg•t”ʲZ6œ}Í#?rßžÓžôÚoH{€|Bµó2_7UWé5‹O¼Nð€^œ (¦½Þ'íå3Ä—þ:ó˜  IÀCðÌ÷÷Áˆ´å™,ªòÈþÍ]âPpÕ•«QŒHì÷®þÆ%o¶EÉgó ܇M‘Í|ânÌpññ¸à[^ª_dkfXc·°NV[&‹Œ ñ¨¦B·(sµ8q%Ï‘rH…h¨Ž”–SÏP ;<â‚Rìrir£gkYÙoÿK+Y™³&7ª•™ýëÃ'¥™Ù÷vööÓg#lXk„BZ¡RN>”Vg=*¹<+¾x8̘Âñ~Â
+_ù»)§E'ŸÖ°­ÃÂ'D&Ç5Ó-à|?‹b—InÞiSaزÆAê}þõ;³¤nÌŸñ¶-ÊõÐíûn÷“7šzÞ¨¨—öíL놈©öiäaQO¶VµGò½
+GT•+Ö UÓ$!”D¢Ûª J³%||·’P2¾< O‡XÜö%•©ß
+¥GÁmIºaª¤2Õ“™B.êZ[Ì.õ©iÛí÷ê*ßžyFqÜ›.«JpV®˜hõ‘×<7¡§íÃ$c‹âbF™KÁ ŽLëRUဠ4p0
+ØR78}Az[ª7Q­ÍIô&_¸0MÒµíolÈnš¢ì;Åõs‰µ¿ž¦5/¸g[—ãzoÓßøøzáD'ŽlªÛ߬EÇÇ?pÔ‹&>åþÏ„¿÷"žâÅ@i/6¢(ù‘PVú®Ò¿Þ+Ÿµ–
+hÏ5yý4ÅKòJ/û|Ýôée0'ÿÈ9Éõ(AÊó9Áì–SØPêyËï‹7ÿ( ìf
+endstream
+endobj
+1189 0 obj <<
+/Type /Page
+/Contents 1190 0 R
+/Resources 1188 0 R
+/MediaBox [0 0 612 792]
+/Parent 1187 0 R
+>> endobj
+1191 0 obj <<
+/D [1189 0 R /XYZ 152.694 705.06 null]
+>> endobj
+450 0 obj <<
+/D [1189 0 R /XYZ 153.694 317.516 null]
+>> endobj
+454 0 obj <<
+/D [1189 0 R /XYZ 153.694 259.283 null]
+>> endobj
+1188 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R /F31 600 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1194 0 obj <<
+/Length 1020
+/Filter /FlateDecode
+>>
+stream
+xÚ½W]£6}Ÿ_­Rñà/0}Ê®ÔiÕ§JÔ‡¶Lb&tƒÀÓ™4ʯ da1Rf_°1Üs܃#ïÉ‹¼Ÿï";~YÝÝ?`è¥ Qì­rR â”x1M
+³ºÕ7‡ª¥âu›£v=ë@9³-묹Ҧúµh,šrÊ ux6``ïUVÉWz€¢É­„á=ý†6(´«šCðƒÅá }œ8 üâ€ÈLj¢ßQPìDöËaYgª¦7j—Ÿ-ç¡RÕ¥ª_U~#³Z;Uôü­ÊÄ&ËÕ½¾UŸ…ÖÈö\·|⯗F ª\´bcžž® Ô“¿(ùxÁCì;
+Jo)x8º©àaxsÁÃÈQð®Î&FOCDAaçlÂìÙäsUµUPÅÛ¬}Š@¤$£w@ÑqeU5æ…$Q‚­âÄCÂ6Oê‹Ù/§
+endstream
+endobj
+1193 0 obj <<
+/Type /Page
+/Contents 1194 0 R
+/Resources 1192 0 R
+/MediaBox [0 0 612 792]
+/Parent 1187 0 R
+>> endobj
+1195 0 obj <<
+/D [1193 0 R /XYZ 152.694 705.06 null]
+>> endobj
+458 0 obj <<
+/D [1193 0 R /XYZ 153.694 667.198 null]
+>> endobj
+462 0 obj <<
+/D [1193 0 R /XYZ 153.694 294.09 null]
+>> endobj
+1192 0 obj <<
+/Font << /F31 600 0 R /F8 596 0 R /F35 743 0 R /F7 744 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1198 0 obj <<
+/Length 2351
+/Filter /FlateDecode
+>>
+stream
+xÚµYms›Hþž_¡ªÔUÐ5˼ð–ûÇÆ9¹9%+[¹Ú\U°„,6´€çÖ÷߯{È#+»¹û£¡gæ駟î&öàn`Þ<³ëëëÙ³Ÿ.¼ËOúƒÙrÀ•Ã<‡\ÇcB:ƒÙbð‹%åÿ5»üéF|¸®Òs}æ¸ØÑ“þóšÒµ6ª§Œ¸Í'h­yG­}äR-â%^^­¢ìnYäëòU´ÙÄÙ"¹Ο‹ß®ç·ëù†õ„dÂóšõТÉ`=kÿ
+Ý5÷(W4{9› ¹çù5£á&*†ÜºƒP³¶pƒÁË-Ú)ýŽ(0@‰cÜIÕU.>íû @©xû„ÁZ;
+—ûh;vÒYR.r&ómbo"Kà@Œ^Ød9L–ž­'ãµÌa Î@£eÍpÝ–qAwk\
+§(J$¤Ðm=í€
+HÁå<Mz𒀊Oô±«ñÊ‹ƒ]å1n·§[GŸc°ÌªøÞp<O3ªpB«
+’&šÏãMU6ô‡2'Ú¦UyÒÄEµÚãÔ2OÓ‘úZóMYñ=ZÂ$ò²§¼ƒQ  º0AÜêŠ÷Õ~ðËȱmëêtòæý)Ú}"¾¾u1¯Î_ª#Î%Ô5-_ dÿû-©^@ ˜òZ S¨p „ÇäÒyx_Æ´-œ½îô“§!NôS•Ó` °Íñ(+_iÉØ@¸êTKQYj|Þ÷ü&ª€`YÙ@]ÀURí%5x ˆ#á;M§`DöÝ4¼ ':O‡>èûøzrcÄÕVÌvZÆâÅeÒužÂ¸¹«W6 Ò'øgt»4Ø‚ý»-9ÞÁ¼Z¤4H5[KÔsTzÏŠ£Ï˜wtNjå9O5VÑüBP1J/¨1jªh#F×Óóp:ž¼›G®/è: /Âi89 Íp¹(›-Cæ†øcvð$ ]æ{-\eüÛ(Ë dæÀöψ¶˜ o±JØfe^TñâÁ¹J>S–&ÆA4ºöãà¢BqÂ
+à8ÅÔaø`I¨®'týnÞiòM5ûŒP
+ Žß佉y¶òŽ@ÙêxžÝˆçv‰‡À‰6‡—oë4¸ð°‰š9ˆí"¦û4¢ëÛº–µ5Èʇ¬ôA~­ 9‚pMPLj°VÆ÷³\OI&§oèMÍq,X°k’?¡½8ÎÖ£$Kª“x1Š¶×xЗµ“Æ05‰ÒZÂþFÛ-±C\ÇMáåØ—Œî/MÀ³¬1Ö1ápËtRôÙèšïúfŒ"‡ ¥ `¤uù~2¾žšÙ¥·ÝâõWS {š}Á.ÒÍŠÔ”ì÷ùr›%ÔK ,ਖ@/¬³q0ªGnÖ
+ê!œí2_ii´¹uY°}ˆ<Ît|w òŒÍþù.¼rΉXgr”7:h§ôpŠj«)wCã ]¯Æ73ºÓØÂõi¡ždŠ·åÿöOä—¹»â3[/«ü3‚jå
+¹s¡´ÁŸãéÍŒnµ`Ù¯0ëÿw üWíÙ— F¿Hp"ßÑÿ")tC {CœJÚ~’ÑPÝ{Â]×5vǤ¶(
+j/¥ð‘ì&ÛÚCË'\Ô£‘ÁE¾bNô£-0z(<ÏtTA0“pí¢x‚¡ñäìúê*<k4KYáìÌHÐhí²`dÒ©ÎWËC:åuã(^Õ©p‘@+RkQ’Í¡þ磺ņlçúþÞ÷ j  ZÚú£Uå^XíKôÅ{Æíc¼÷:Ò…Ÿ†(lM&çp÷‚n¼¢|Á±™» „â10
+öæ?øÝ»…Z­Q±6ØáÌWíBŸN³…Þ#'úÃ3ü´œÒ}G€<NÉózª
+endstream
+endobj
+1197 0 obj <<
+/Type /Page
+/Contents 1198 0 R
+/Resources 1196 0 R
+/MediaBox [0 0 612 792]
+/Parent 1187 0 R
+>> endobj
+1199 0 obj <<
+/D [1197 0 R /XYZ 152.694 705.06 null]
+>> endobj
+466 0 obj <<
+/D [1197 0 R /XYZ 153.694 597.466 null]
+>> endobj
+1200 0 obj <<
+/D [1197 0 R /XYZ 153.694 468.547 null]
+>> endobj
+1201 0 obj <<
+/D [1197 0 R /XYZ 153.694 436.667 null]
+>> endobj
+1202 0 obj <<
+/D [1197 0 R /XYZ 153.694 416.465 null]
+>> endobj
+1203 0 obj <<
+/D [1197 0 R /XYZ 153.694 384.308 null]
+>> endobj
+1204 0 obj <<
+/D [1197 0 R /XYZ 153.694 352.427 null]
+>> endobj
+1205 0 obj <<
+/D [1197 0 R /XYZ 153.694 332.502 null]
+>> endobj
+1206 0 obj <<
+/D [1197 0 R /XYZ 153.694 312.853 null]
+>> endobj
+1207 0 obj <<
+/D [1197 0 R /XYZ 153.694 280.696 null]
+>> endobj
+1208 0 obj <<
+/D [1197 0 R /XYZ 153.694 248.816 null]
+>> endobj
+1209 0 obj <<
+/D [1197 0 R /XYZ 153.694 219.426 null]
+>> endobj
+1210 0 obj <<
+/D [1197 0 R /XYZ 153.694 185.055 null]
+>> endobj
+1211 0 obj <<
+/D [1197 0 R /XYZ 153.694 153.174 null]
+>> endobj
+1212 0 obj <<
+/D [1197 0 R /XYZ 153.694 135.74 null]
+>> endobj
+1196 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F31 600 0 R /F8 596 0 R /F37 750 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1215 0 obj <<
+/Length 1969
+/Filter /FlateDecode
+>>
+stream
+xÚÍXÛr£H}ï¯PìËàƒ©âVøM¶q›YrÈx&6f6b„lº%PséK„?~3É ©ÚÒlïüˆ¢TÔåäÉÌ“ežæàý;sïy½»¸ßð]î¢å€¹¦!„?pÏà–3ˆƒ?4fgÿ‰>t_ þÐÓÔnθІgÂÒ¢àL·,G î¢_âØ‹[‹íLësÃö8|Ü̧ӈÝu-C0¿ý_ÎÀwàvÜvÀ"®=KWú·Ã™nX¦ÕŽ| —´5ü[®––Ô“¬7žà;žàœþ«^’LŽÏ©'Ë+êØÐÃõ<¡ŒËtf ƒÁöuÆ ß‘ •uQäu¶H³gni›:›Wu\¥yFšŽ¹‰‹$+›ÕmmVÄsÜÑ'üI*궴y¾Ê39dž¯×1|ÈúÑ™gxŒÁ€à­Ù¥Ù¢0¡½`É-=‡ÓÆŠáõ(PYqÓpÌÎ|‹CÐ]Ãr·ÍÇÜξUZéŸ?+HÀ Kt˼FiµJhƒq¶ FDèHås‘׳vôç:¯’RÚÆdL¯oDþOfÙÍ
+çÿ"˜ ã®®ÄÕU⎦h¸ÉuÜ„ã÷@εë»áCLée8¾¡Æ>ÄáïƒÇsê…¿Ô
+Ït¦¯&“_Ϙ¦²÷-ÃsÜŸq(×pmÖH3 ÷<I­¥>‰7URNÊLß–×Yˆ ¶|0¿Íûï» ð?~NJjÆKœžÐz’îë²¢ÿb9<•fW4iþéú{oÒ_ØÚÃ4x ƽ„c|:/Øä çÔŽ¯'£Qp…“ñ9 nìH_í½1àÛËH•-p,ÖYá›Ê±LÛ;âX~çyѳ¾ìXmIP§ÏY^$‹=X!l Û݃UüÓØÿ]7cìçÿ'ö Ããmðwÿ1ì÷•fÚ‰ô0«éjsëð*]â’ÞTÈ1‚e·(ÄE•ÎW‰>ËóOUëÜ„0|ÖYëu™븢ft y,ò»Ü0­½tÚÍ}äܪŽŸÐ| ¦aðHíCÛòÐ.:âÁ¡Ë¤H)ÑôOìYçÿ^åp™ÍãŒìûÒx;ËÎÙ¸åÜõû™‡3åá>Lž¦ãáˆfïZà¶ñG<—"¥ƒdñD·EÛmÀÖÿ‘§ZéÅZzÀÓØ6ô|Èë"‹W´Õ,^'´Õ 9!{—ÚaãÕ¾±…gXÖæob3O‚­ßÃèŽZÛ°¹2$3.Ì;\Ü·†p»#¤ëñbQ$¥Š,°-YÂl¾ª í3^t>N$Dß'hB©%™¬„&Ê›6j4³Áó%)“²‘8^@TJeú5­^dô90Ï g)mÐÄoݶ½6ãbó6 F7jØ1GùìgbºoØn'ü1é³ê(!oÓ6ÜÜ_ýh„P‚ÙèˆÎ¶çhyACÓ%=ãY)ÑÅwј¡ý?^Hê:°~?EüÕD´_Îûy·àu[ ÿN}ê2-º CˆtïÄÙ6y@=3]Ò«:ê p9ÑÉv`PZêÍvôühÔ“*'ÇÓáòù…{¼‚5¼f¹$7PHX{ò+ÂYW?á$ ʪd!ß—ôÜÖq'@ôƒ’(¸¾‡×Må®6 &”/è=Â…9%q]âE§
+fÿcqÔ1¿*PÄÍŽ7 &$ d׊dCÄ)*ÚxÕVPž¶J©ª¤?úL?È=Pð[ÌÙË=î1èP»íB×h¹ñ#pî ©vI=*
+kÚ†kuªóX]ëµ¢4ç®i¸Â߃U¼ +H*„t‘|¡šã§û«`ªöpß0Mq¤Jsß.7„×ÙáKV¯O¨Ò:©„»ûrÖ@Œµ’àMÂÎë
+ÿZ†,©×8€,AüC\Ãí»@+9-û„{®.!$|O÷²\{x_GOtظ¹AÛ1¼í¥Ü\qkg˜>?ùºˆºÑç¹BnÚ *VKIUÜ+)l5iÔDP µï±î\‚)˜á¸{l³Ùœàê–º$Ù-‚¥to(¨–G&Ør˱¥J¯ï8Øq½¾yÖÙá$äÙ6 ¼N²ÕwY£TqQm]üŒ)Qú¿kŸ€»¨Øìnö†l´|O nÂrIÓþýb‚ ñò´§èn2½¤¥nè&zRŠû*/Þ*S÷Ëû«ø[Ø41?)ZAîÙMÜÓtë´*[Q‚
+ ’ûûêÀæèË{ê`¸Zåx¢¯h]vÂSæ·¶Fj–ºØ*(OÖ
+ÉyOÐp[ÚüBš¯>³m(ý ƒÉ¨E7¦×Dïþ j :M
+endstream
+endobj
+1214 0 obj <<
+/Type /Page
+/Contents 1215 0 R
+/Resources 1213 0 R
+/MediaBox [0 0 612 792]
+/Parent 1187 0 R
+>> endobj
+1216 0 obj <<
+/D [1214 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1217 0 obj <<
+/D [1214 0 R /XYZ 153.694 667.198 null]
+>> endobj
+1218 0 obj <<
+/D [1214 0 R /XYZ 153.694 638.804 null]
+>> endobj
+1219 0 obj <<
+/D [1214 0 R /XYZ 153.694 606.924 null]
+>> endobj
+1220 0 obj <<
+/D [1214 0 R /XYZ 153.694 575.597 null]
+>> endobj
+1221 0 obj <<
+/D [1214 0 R /XYZ 153.694 543.44 null]
+>> endobj
+1222 0 obj <<
+/D [1214 0 R /XYZ 153.694 511.836 null]
+>> endobj
+1223 0 obj <<
+/D [1214 0 R /XYZ 153.694 481.893 null]
+>> endobj
+1224 0 obj <<
+/D [1214 0 R /XYZ 153.694 461.968 null]
+>> endobj
+1225 0 obj <<
+/D [1214 0 R /XYZ 153.694 439.828 null]
+>> endobj
+1226 0 obj <<
+/D [1214 0 R /XYZ 153.694 407.671 null]
+>> endobj
+1227 0 obj <<
+/D [1214 0 R /XYZ 153.694 376.344 null]
+>> endobj
+1228 0 obj <<
+/D [1214 0 R /XYZ 153.694 344.464 null]
+>> endobj
+1229 0 obj <<
+/D [1214 0 R /XYZ 153.694 324.539 null]
+>> endobj
+1230 0 obj <<
+/D [1214 0 R /XYZ 153.694 292.658 null]
+>> endobj
+1231 0 obj <<
+/D [1214 0 R /XYZ 153.694 272.179 null]
+>> endobj
+1232 0 obj <<
+/D [1214 0 R /XYZ 153.694 242.79 null]
+>> endobj
+1233 0 obj <<
+/D [1214 0 R /XYZ 153.694 208.972 null]
+>> endobj
+1234 0 obj <<
+/D [1214 0 R /XYZ 153.694 188.77 null]
+>> endobj
+1235 0 obj <<
+/D [1214 0 R /XYZ 153.694 157.166 null]
+>> endobj
+1213 0 obj <<
+/Font << /F8 596 0 R /F31 600 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1238 0 obj <<
+/Length 1893
+/Filter /FlateDecode
+>>
+stream
+xÚ­X[sÚ8}ï¯`úg«ºÚrß%-ݘ@vgo3uÀIØ›ÓËNü~²dù‚l»/`K²,óé|ç3î<tpçí Üú¿˜½xu);Štf÷`$eÔ Dˆ(Ù¢ó‡Ç:ÿköÞ>ÕùÃ{ýñèrp3õç>‘×{óæf0ê›Ës*½ñ ÜØ»îêöá¨qÓ_] ú³áxd›|õ® QHHÇ'E¬crSLÚ Þ Go§ð§¼ÝúZ=þê’‘Æ®(
+)ÅóÄzH}߉°ì63Ðz¿DQdŸ¿Ë²ñb±I¶[ÇL!Œ—C¿ óxµœë•ÞÁC/ƒ_éeóe¾JtÇý9ñ²•Þ¸OG’Í­¯2µÉÏêž!ÞâÜgŒÁŒÐðµ¼.æ5³Ÿ‹À+×ÝÜ[¦zØ&{ŠÓ&¾;BlS“Τn¯/@+çÒëÞ¨‹È›n†ƒ©n´Ä«õc‰Wí-âuÿ!žÁ'O¥QÉÆO.âêßÅ|ˆxd¤»'ÿË6ÙìÏà ’œYÚ{+ÃØV¯5U7»'õ«y‚9ŠŽÏËü1Ûå†z ÖÜ:¼l™l5uqºÐ\nwëµb¶ì(â"Û˜Þ—Ž—½<…qádüWM(PÂò¯®û½Épv.™×»þ>0,ÿíÑE´¨ -.º“( í¹‹.Ñçèòmàì.Ùøóx혎"†«ÃÚ×Ku^ÿI,®a‰+ó>8p=3Ìl_«(ÞËÑÉÐM(kb„‰h!@DÒë¿ëMf
+S…mœG ˆcù#˜Šx ì ñ:?hSýꀪÅÛ@ÕáÎ!
+¥lÒõa®Æèwœé€6èrïC_·kT9=;%ªÃÉëúb8ÝPi'´JA6‹@U‡•Da!ù²D€06£ òV/ô)÷u¨:& !ýØ·}›MPkt ‹WHDA¹àVHN×›eú ¡äÞU2Ïwõ£,/…e”!ׄŠ“À–N°'ãéPI=†P¾Ôÿ%æ‡sÕxsJ ä;æ¬
+Sg c„aMÌw_es‹÷&” ²Â½wŸ[t# Xò&º­ \ h²|M¾™7ÏÒûd“¤óÄÄ·ÎÓÝÖ0Ãç}¶1ã’Å2Ï6ටP9©ø¥“«Ûk0m‚U4ð¦0¯IãêÖʸ¤2÷ôU•²ÝüHø[!qX#Žy6ט˜ÒÚ¡ð?e«ýy@'ƒêì|ÓŒ0"‘ĢɈ>)ØO…š¯>”
+¯þë¸SÊLf…Žòœ¨ëªR„›vE•…áâ@OZ§T?¶9 qÙ!*èó™»Ê!ê¼%‹£çÍflXf¡ïê¢v2tG‘^ŠËf&19¤|¸8žDDˆX(‚z²ƒ™Œñlº0´ºKü÷ãÛ›Qïʘ^¡w.“ÛQvÛSq¦ˆrâ,!Kþ#)D¤2=§PyíOBða5œ×ñ¼Ì¶÷yénþÎv›4^éö4ÞS"J!&BÙ
+twý;)„F1÷¶z¦*Wý¯ÂÔ H< Ø¡ÌJüúÁ¿ûØU®Å/­ø:~HùLTVþe«ZsغÁXŽÈS½6ú¯ %-ÿØz’ƒùQOê+ÆÅ)Jï.6'·WÃé;ý…ÐrÎêeo£Ù»Áô€%$ òâ;Üa„˜ÇõîÎ_Äyr´ÐŸìîVËí£ÂC-Xç=µäÚ"UØ«`›§Õ½âE4ëì¡Â:LL•Ï½?±À Ùã/p¾]ÝF¢ˆC;9á„»‹ËÁõdö›*Îh{„9Å‘ª¶üž$ µ%«üOüÕOžÖùW_á_€°uz‚#$™|Ö“Õòi™€-°!
+B$¥~+(acÐ`öâ_ûI!
+endstream
+endobj
+1237 0 obj <<
+/Type /Page
+/Contents 1238 0 R
+/Resources 1236 0 R
+/MediaBox [0 0 612 792]
+/Parent 1187 0 R
+>> endobj
+1239 0 obj <<
+/D [1237 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1240 0 obj <<
+/D [1237 0 R /XYZ 153.694 667.198 null]
+>> endobj
+1241 0 obj <<
+/D [1237 0 R /XYZ 153.694 627.52 null]
+>> endobj
+1242 0 obj <<
+/D [1237 0 R /XYZ 153.694 583.919 null]
+>> endobj
+1243 0 obj <<
+/D [1237 0 R /XYZ 153.694 551.996 null]
+>> endobj
+1244 0 obj <<
+/D [1237 0 R /XYZ 153.694 520.627 null]
+>> endobj
+1245 0 obj <<
+/D [1237 0 R /XYZ 153.694 488.981 null]
+>> endobj
+1246 0 obj <<
+/D [1237 0 R /XYZ 153.694 457.335 null]
+>> endobj
+1247 0 obj <<
+/D [1237 0 R /XYZ 153.694 425.689 null]
+>> endobj
+1248 0 obj <<
+/D [1237 0 R /XYZ 153.694 394.043 null]
+>> endobj
+1249 0 obj <<
+/D [1237 0 R /XYZ 153.694 362.12 null]
+>> endobj
+1250 0 obj <<
+/D [1237 0 R /XYZ 153.694 320.733 null]
+>> endobj
+1251 0 obj <<
+/D [1237 0 R /XYZ 153.694 298.828 null]
+>> endobj
+1252 0 obj <<
+/D [1237 0 R /XYZ 153.694 267.458 null]
+>> endobj
+1253 0 obj <<
+/D [1237 0 R /XYZ 153.694 235.259 null]
+>> endobj
+1254 0 obj <<
+/D [1237 0 R /XYZ 153.694 204.166 null]
+>> endobj
+1255 0 obj <<
+/D [1237 0 R /XYZ 153.694 172.52 null]
+>> endobj
+1256 0 obj <<
+/D [1237 0 R /XYZ 153.694 152.553 null]
+>> endobj
+1257 0 obj <<
+/D [1237 0 R /XYZ 153.694 132.862 null]
+>> endobj
+1236 0 obj <<
+/Font << /F8 596 0 R /F31 600 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1260 0 obj <<
+/Length 1999
+/Filter /FlateDecode
+>>
+stream
+xÚ¥XÛrÛ6}ÏWèÍtÇB ðæM¶éT­"y$¹i§íL(ŠS¤JRI:“ïË‹HC–[=$IXœ=»{æàÓÀ¼{cöþ^/ßüxÇ>ñ]æ–›uM¹?p0Ë,£Á†CÉå_ËŸ›_ þ:¦iŒ‹éåв,cúðþ:˜¿•“~¼³èÁz¾MÓƒ_©…~À‡:Äc¼þ^­À'x„ún=!.ŠôùÌ$>£õœïãtì#¦ÕFÚÆ&ËñÕîrȸ!ò8ƒgDñ:LŠî‡”qb9 ° «q`ZngãË¡ÍéË00Õ†:× jjÛõŒ(‹‡Iœ>]Áàùb.#žÛÌý~ s”}€À¶C&¨7r •~(¾ØíW SÆYz%·
+u¥£
+VÓÅz°fMÒåFôŠW‹âèúzü:FN¸úé°Ùüöñ^â:’ïÞ‹ -¸®OXËÂÿ“‘;…i·{¾¤l»™ðŒ{ÂOâ W+€0_â°¬SgXîN½í4™r·#}¼|FÖ§÷:Àz<}Ä\z*ÎT)< *Ç9H˜'¡
+ fù@ $_øWD&ŸK˜0B\CêPDyMÈr-v³åOÁÐñhu±9dsiÕTŸp•kÀrˆë·µeT㕺âm{,ÎøVeµ,žg0(hPñºÁçŸæ’*²xÝ!›ðA‘ >!èËz ïDñõyË¥ôÛ‘â˺tp.о.ŸhuÒp]ô aÔ}ju©ù˜ADE¬§všM¢Mÿ—
+G,®ð›•GÕ;Q®û¼¾
+Ћ÷‡9ľÃ]™ æÁBÖ&…Û:!Êk[Ä:’w¹ØÄßt@q‹¸¼ •_ãò1Û—òÁ3àç€oøIvº‘Ø„û¤|[ËOhÈ¨× ¦j-IÊ‹Wvâ®^Åσ»`LoÙ€yÆÍìýýlÈZb—UÇãJSe£3n=üC§È.2Ýd'»î¹Øˆ\¤20¥™Ð¨c#˜¥È:j`Úª:HȾϺ·eø©(Iü$O(4ÆY>ô(ͶRË>j¡M ·›©qÚ¹­²ÁD´HT†Õ‚ZSTA~8ý-«Öºñ^wop¸MlÇëy\ß{“à½r°åù§ Í·ežu­Å 5¼‰«X×àת„ Û+°´òŒ”¿¸Ö_$Õï؆Þ!ó”Ãä6Êa0
+endstream
+endobj
+1259 0 obj <<
+/Type /Page
+/Contents 1260 0 R
+/Resources 1258 0 R
+/MediaBox [0 0 612 792]
+/Parent 1281 0 R
+>> endobj
+1261 0 obj <<
+/D [1259 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1262 0 obj <<
+/D [1259 0 R /XYZ 153.694 667.198 null]
+>> endobj
+1263 0 obj <<
+/D [1259 0 R /XYZ 153.694 651.313 null]
+>> endobj
+1264 0 obj <<
+/D [1259 0 R /XYZ 153.694 621.37 null]
+>> endobj
+1265 0 obj <<
+/D [1259 0 R /XYZ 153.694 586.999 null]
+>> endobj
+1266 0 obj <<
+/D [1259 0 R /XYZ 153.694 557.609 null]
+>> endobj
+1267 0 obj <<
+/D [1259 0 R /XYZ 153.694 523.791 null]
+>> endobj
+1268 0 obj <<
+/D [1259 0 R /XYZ 153.694 503.589 null]
+>> endobj
+1269 0 obj <<
+/D [1259 0 R /XYZ 153.694 473.923 null]
+>> endobj
+1270 0 obj <<
+/D [1259 0 R /XYZ 153.694 453.998 null]
+>> endobj
+1271 0 obj <<
+/D [1259 0 R /XYZ 153.694 434.072 null]
+>> endobj
+1272 0 obj <<
+/D [1259 0 R /XYZ 153.694 412.21 null]
+>> endobj
+1273 0 obj <<
+/D [1259 0 R /XYZ 153.694 392.008 null]
+>> endobj
+1274 0 obj <<
+/D [1259 0 R /XYZ 153.694 374.296 null]
+>> endobj
+1275 0 obj <<
+/D [1259 0 R /XYZ 153.694 330.461 null]
+>> endobj
+1276 0 obj <<
+/D [1259 0 R /XYZ 153.694 310.535 null]
+>> endobj
+1277 0 obj <<
+/D [1259 0 R /XYZ 153.694 288.396 null]
+>> endobj
+1278 0 obj <<
+/D [1259 0 R /XYZ 153.694 256.239 null]
+>> endobj
+1279 0 obj <<
+/D [1259 0 R /XYZ 153.694 224.912 null]
+>> endobj
+1280 0 obj <<
+/D [1259 0 R /XYZ 153.694 194.139 null]
+>> endobj
+1258 0 obj <<
+/Font << /F8 596 0 R /F31 600 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1284 0 obj <<
+/Length 1427
+/Filter /FlateDecode
+>>
+stream
+xÚ½XYoã6~ϯðË"GM­ï÷-ib]d»hÜEݦ$ÊbL‘
+I9qƒü÷-’–/Ù؇Ht‘3ß\ß Ój̭Ưg­×ÛÉÙû»n¿q ƒ^c’4Úýn0öƒþ‡ _&qãï‹wßÛÝåy¡/Q¿Ó¿ˆE¤´¤ùå?“1ÈAíV0ì+ksIp2²±àÚ.@'þì•~uuUbøcôuBþB‘Èr¬©Ñµzý%]*»€,Ê›N«ÝB­jwÊg#âpÂã½Ø7ŒJ^1âq©F$å5*”ý—Ø÷¡²^Lh¤VY4'$W …ëƒK°š'BŠ‘Ï’j’`¦Ë‹Ib.÷·"×êÕÜ&Rd¯‘Œò ÕÛ뻽›/á±ßºH Ž›^~Û~/6‡P=ŠB–‚mno›ñ»òTèØV5]cʪֽäG\ï2¼l¾ûXæÃM¡S!Ñ’`Y¾x¦:-ï”Èl~sÁ¤±´ùD¹&2Á©Sñöz>cÒÐæ °º
+E¶•òʺE?èÚ´¶µu*æ3¯óO'Þ¼-ðŒ¸ Ìš¡…5
+ßu)|'§ºtËV §eŠ›]#xN–/Kéó­%ž[^
+L¾
+dÆŠ®T- ³|Wueç&€žwµáÎQ•ÖÀ‚UÏ:_+2²}®q…´:‡‰;°7“§pì8F¯ XSá´ê1Í=gØ:þqê»=£Äÿ_êýÝuc ÁêRƒaÐô¨Û
+®¯{%€v»µ±e49û'r&
+endstream
+endobj
+1283 0 obj <<
+/Type /Page
+/Contents 1284 0 R
+/Resources 1282 0 R
+/MediaBox [0 0 612 792]
+/Parent 1281 0 R
+>> endobj
+1285 0 obj <<
+/D [1283 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1282 0 obj <<
+/Font << /F35 743 0 R /F8 596 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1288 0 obj <<
+/Length 1632
+/Filter /FlateDecode
+>>
+stream
+xÚ•X[o›H~ﯰ*U±% ææKßš4]u•M£Æ­VÚ®”31f3ÄÉVýï{†¹
+ä¡%I…3Æ?s”“X«T&ämJ0œ¨‡Ï­RÒwHE÷¨3ÁµŸ®ú/Îz‘79Hk•p€è¡BauY
+úÁVêÉ[PA]oO`;F¥As‰J"œñ>Öy/¥Ït1¨oo:˜]Ï5g¨ä¯·¨ÄMÞ_Ê}yxgc&¥çl Þ½ëø³ëôÖÆ]YAêýkóZ åúì uô›ƒ¿Ã³Þ0C©Ÿš—‰LévRÐ<¦EŠ+\ÄúJãžX0P´ì„‡là´#ßX†ìÔzþ)%UK¦
+ –¸â¤0® o-´Çµß¬nBZ½ u‚3šn„E­™ÏEœ×‰zÍÏw7†ÚgV»Î1×·˜ÇθöŸvîŽíÀ DhBb”bO(±sRì,XÝ)iùLH^„¬bjªg!ÜqiŒ:NFE É&5y htI@ÖÕ?Bw8‰ž;N8â «åˆãÙÅq”‘à@ºšOEôz¢\ÀN%{”ïzSôe;/G˜°¦ô(§ñn4
+Ù
+endstream
+endobj
+1287 0 obj <<
+/Type /Page
+/Contents 1288 0 R
+/Resources 1286 0 R
+/MediaBox [0 0 612 792]
+/Parent 1281 0 R
+>> endobj
+1289 0 obj <<
+/D [1287 0 R /XYZ 152.694 705.06 null]
+>> endobj
+470 0 obj <<
+/D [1287 0 R /XYZ 153.694 171.315 null]
+>> endobj
+1286 0 obj <<
+/Font << /F35 743 0 R /F31 600 0 R /F8 596 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1293 0 obj <<
+/Length 2005
+/Filter /FlateDecode
+>>
+stream
+xÚµX[Û¶~ϯð[d4bt¡níKÒKÒ¤hœìAQ´BKܵ²2¥ŠT¶ œf8”,y•±À¾ØE‘3Ão¾ùÈ`sµ 6¯Ÿ'ÿß_<yþ*
+7+Ò(Ý\\nÂ4giœoÒ$cQœl.ªÍŸÞ_A˜mÿ¾x;}å³l ^ØÁZþ㫇?5‡,ΧQÿÛúq{?ÔF˜ºUøĽ¶¯dO/þ
+’`Pºí¬žQWS_o£Ü“4^ö†í´‘á©qs| s¾ñÂ¥ðGüZÕ晬|1Üu+ÍXQ$'n½jÑh2õêÔC¯ÄAý{Ëèý+F}µÙÕ L²»³k®o¥èWö'eiŸ8òk­u­®ÈÎJg}#/ µvP×÷‡?eI–<Ø^\ÔWuãÿ{×ä$bqÀç&G…÷æ’þµÐª5ýËCgA·Û<ö,¨Ïì·!B*ôƒð²ji°j 5ºzðÅPºùÌÞ5`GûvPEǪôÑÎïlóöËå‘&°:ÑK¥ŸQxw=˜"Êm”yt£ò˶i•U¶‡ƒø*H(„y­ÀéRJtLûå^tF® &
+–ÇÙ dNâ…=âJºT—fÌð}¤©kŸíP%4ý׎Þ¨ïqÒÌkïÇZgEñ`Ç,÷½ì€u 絩̀ûåwkùÆ +òbæ=O¸wÙöa¨ ³áfîé æµqÉ©c¶u Ÿv4š~¯ Tãš Tuî©õžvè‘ñY ‡µ \%õ·-2]C[÷]j‡ä`¸vp»¬0:€þ€Ý`›Šýcþô1è[¶¸ãLœóSN|?Å{rÉÙ[U½ÔÎh¡*jY³Vc>@ÖcX€H´ÔG:øí_€ÏXî¢à_Íó N®]/}ðþœbq離†ÍB¼¢‰9?"Ï=»½ÒvØÏf9ž;.€z—¤©÷®µ‘Ébæ ®áPoC
+/- ùΠð¯ÑW#C猌~ÉJ1rláÿ,¢ÌM$:Ý:Ví>­Ô˜„¥ÑTcö#&©ĘðMÓ¢ß7®NÆ«v$³Ç:^¸k]˜ÆŒ‡“œ@Ãäçs «h¡MP½¾½8QÆYšÆ.üaºl ÏÁN^x¿)p»¹¥X‡÷–ëáÁi¢<†´
+þïxDA–*8ÆÙvätµ(±ýid6|ÐÃnª84Õôû`ªoøú×¢ À'„æl,h_a,§cçζkå’!g?9Hj#šfÒ“A„WòR ê´#×¾|ÿaU&5ÂŒ™??•jéÞ¥=ÐÞ›pÓ#
+eg¿?h§ÿ–ÂÒ| ||œtWïðöÂÜsàâ ™¸ø¢.Lî(à0¥K
+Ui !b„e¸U0HŠmõ¡Qfœo–^8Ì’9tƒr¦+ƒ•ýŠ²tÓ"H€•]$PL\5™Iš0ÈXš®…¥PŽt°7²•˜&‘÷RH;ÐËR(j˜}­®Iº°\—<På‰`Ì}hhY¢²hQW4FIYÉÊÍÚÜ•r¥˜Æ º˜&BÓg³ãkØʦn¯zÑí§ë.Ò½k\òA´x4àbIHÓc‡¥ l8ñ6¦²†Ûã e DöhÞûà“õ°;wm3ÏÞa¯ -6šV€ÏÄ Y3‚¾™÷ËD¸`c{?&“ÍÊbßו{mÕÌüª­K<~):îŒæ¶6`ÎîúÚ–×°ðL»Çœ3~¼6PÂÀŽ¬DÎ’d5}è~ÖËYÚõ¢ñªL]a‚Ý]®(XFsð¿{yñïÎWôTÀ">å°³Ö7ËXÐj謞í!öø(YX¤ËÀÜX…?4€Õ¨p×¥Øp
+˜L‹…êrGˆ›‰
+¾Ã¥@¨‹¾9™x/Ü>fÇIéÿ
+áç^¬PBmò36!žh›
+endstream
+endobj
+1292 0 obj <<
+/Type /Page
+/Contents 1293 0 R
+/Resources 1291 0 R
+/MediaBox [0 0 612 792]
+/Parent 1281 0 R
+/Annots [ 1290 0 R ]
+>> endobj
+1290 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [384.052 242.149 403.756 254.104]
+/A << /S /GoTo /D (subsection.30.6) >>
+>> endobj
+1294 0 obj <<
+/D [1292 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1291 0 obj <<
+/Font << /F21 593 0 R /F28 597 0 R /F8 596 0 R /F35 743 0 R /F7 744 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1297 0 obj <<
+/Length 1272
+/Filter /FlateDecode
+>>
+stream
+xÚÕXK¤6¾Ï¯@Z­DKÛ^°ñåÒ‰”I”C.i)‡Ý=ðð4dhŒÀ=3Ôÿ}mL?`éÆ=»)' ”ë«úª\Uà9Çs~»óúë/ë»÷÷Ì AH qÖŽ aàLDØY§Î7’‹%ò[ˆ(Õ«À•ù–ƒÅ2@{¿`È­ÅÖˆ<- syÝä¢4’ @ß¼å»Å§õïïá
+1@ÖܘZ
+i¬KH]±+{¿£Î(g ™†ÎÒ÷Aˆ40Ô! ¤ˆiˆ%a€”$Œ# C ¤¢˜)kHЙÎ
+’Ž ÕF¿ql=´ÃÈãUÊŸò„wTòùœ§2Û·0À
+&JÓ§¦Ši~x…¢ ä»B_sÄ ô³ÙqCS'á…ªvªÓó=ª Oö„>¡'8Ë “tÄì¢Òe6*W0¢“^]
+endstream
+endobj
+1296 0 obj <<
+/Type /Page
+/Contents 1297 0 R
+/Resources 1295 0 R
+/MediaBox [0 0 612 792]
+/Parent 1281 0 R
+>> endobj
+1298 0 obj <<
+/D [1296 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1295 0 obj <<
+/Font << /F8 596 0 R /F28 597 0 R /F7 744 0 R /F35 743 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1301 0 obj <<
+/Length 1175
+/Filter /FlateDecode
+>>
+stream
+xÚµXMÛ6½ï¯Ð%€\TZ‘õÑ“Û"[$@] šd‰¶Ù•EA¤âuŒü÷EJönœ˜J¶‹¤FïÍÃá£#oãEÞo7‘}þrs{—zI˜§$óî׊i˜Rä%4 1¡Þ}åýãã<Ç‹÷÷ooï`$ ó$‰µ-NÃ<‹g0z‡H¼•ÒØCÖ.@Q˜Ó|‚$— IˆÓt„üôêš11hÙ„_@CYH“ü«hÖä¹oô*š·hÛŠ­uK2Õ·Ë­Ç,ÉÕÐØ5Sú±â«¶cÅnU3Ý]²]«×æçÄ•:q‰d­n}\êߎÕÅ£;IæDbç¬aûU-ʇ£î,Š©Ã‚Ÿ¸rÇŸrýùÓ Ç
+NÂŽ¨k¡tÏ›*õr+a@ñ9*ÂI#|>Ùj/JQ÷»æs( £d´…|¶+:iöiùÚ-`[±óvg{¼1–jðWÿˆàÄ«ƒEaœbh ˜x;S›ŽW_Ûwžé´F‰Ó¾ƒšÉš|ß1Ø0™\¯À§9{Ïí$0áÁaÐõ53ÕÙ îi—Í#2$„êÁvMîF³”¬lú]ÅZµ ôÈ®x¬8L£3Šœ˜DÃLL:–m/·î nu"Q\4ÃÁ9¬SìØŒ‚€°ÚrÙ&Õ¡fǶ.x3‡„8‘´E§ChÔÌìB±+¼|àVј kë^†Äd™³Æ™NDçˆ6®Øn8xõ¨Ûîá%ß’k¢u'H¯
+3ª
+ʮ½ruø ùË)|áë:gr*ÞVÎŒ¹p´ù9\œŠfc¶ÉÑ82ù9'"ü’‘9É~åÐé$ÙBm)ÙG<†:'Öøûcv4¦3cý®pÉ·„›¼äÒ¦sÂŽ—Áõ1ÜSHte5]ô$^]aéùÀŽ7½|^r'Íyƒl¢ø$:ÓAgÙäukÅ PoEߘஓR¿h*ÓøcA/@§ì+xÈçYð'¸ã¬äúRVÓ_Å0X±«ºõçµbÖ‘¯ÏBÓÒ 0èÀƒÖEzd|·óJëÄôâÐÈ‘ÑŠÖlÏu -öÈÊ^±Ù6J{¯³]iëäû`,ž}$Y b€U¦÷/LN0HÒÈjQûÌèï8Jϸifa ! wÉ™ÒÂ÷p«‘šò‹ú’'yO:<ìÔ…+
+endstream
+endobj
+1300 0 obj <<
+/Type /Page
+/Contents 1301 0 R
+/Resources 1299 0 R
+/MediaBox [0 0 612 792]
+/Parent 1281 0 R
+>> endobj
+1302 0 obj <<
+/D [1300 0 R /XYZ 152.694 705.06 null]
+>> endobj
+474 0 obj <<
+/D [1300 0 R /XYZ 153.694 474.179 null]
+>> endobj
+478 0 obj <<
+/D [1300 0 R /XYZ 153.694 172.608 null]
+>> endobj
+1299 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R /F31 600 0 R /F28 597 0 R /F30 599 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1306 0 obj <<
+/Length 2066
+/Filter /FlateDecode
+>>
+stream
+xÚµXßoä¶~¿¿b_‚j/#J¤~´/{Nîm`øM\¸+®­œVR%®c׸ÿ=3œ‘¬ÝSÎvÑ€EQÃápæ›™.náâ‡7!?/7o¾}Ÿ-r‘'Q²ØìRÇ"ÉÕ"Ñ©ˆb½Ø‹_‚ƒÙuÍrGQð1Ôa¹Ç± Ü­¥ÉÊ8g;—==ëÆ‘Ta?†RÕ¶¸Àw”Ž~+«jù¯Í_¿}æ" 5Xç·þ(cÕÙÊÜ“èT2VBgé ØØ&År¥” ~´¥í[Fi`OM!Fó »7ÇÊá‹U$•ˆóh±’RäšðksìjS 2"]$"Oã X¥"W1HÇB©„¤ã0ÊH˜½‰ò'Ë„N§ç‚}ñ±fík¶ã±íÌçoXA¸ ;"¿™ E¥`d*”wz ÖF:Ø,c<´p*ؾü]}à—]‰'ßÁKªƒï|,áØ_ú4„=2g9é~»÷qUaÞÂÈ*=,²`WZ·„çÍ¢þÊ’ì ÙYSðL ÑWQŽáÈóð‚mÇ:mßÛÙpDó<O¦N\·MY;<ì—§ ëX Ò«¾õ›<97ÚÑÎ…ÿ<‚E§ág4Åñš`<A¼šb5 éåXÉ_ƒ•ñ´#Zd8€ezt
+Õ!“på/âhZdÍê#tã¹ âºæ4(9æþé8mìMàL*
+mS!õÒÃ:j–_0àÇWQgáj…TI%C=PÞË~09×ÔŽþèÈä8ÚL¨ì½³u_Þq>`Žqé¼ë¡:WÖ7ôZò4°*’ä4l8[i²·­éŒã80
+E\
+×ú,aT³˜¤8¡½ÿïçâ
+Á¸%Ù~¦"añÊÇU<#dž2VAdBþ
+@›; Î[REÁy1BÅhàZi5[ŸâˆñÿÒZ¢_”ê•uøØwMíþǪõ¾iú` e¶8îìsß×@1ñýå -y‘i¦m¹Ô'íú¶i>=¾¢m¦s»€¯25Ýe€Üãgø»øüØã?8`…P“†rßæ{6i<ß<{Ñæì}¸1–µÅ^H?êÝ­¹/ÖÇÃs[fã–ù³^¥üa–.V™Z~™–mg×à§Â83«
+endstream
+endobj
+1305 0 obj <<
+/Type /Page
+/Contents 1306 0 R
+/Resources 1304 0 R
+/MediaBox [0 0 612 792]
+/Parent 1308 0 R
+/Annots [ 1303 0 R ]
+>> endobj
+1303 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [314.723 519.302 321.697 530.15]
+/A << /S /GoTo /D (section.9) >>
+>> endobj
+1307 0 obj <<
+/D [1305 0 R /XYZ 152.694 705.06 null]
+>> endobj
+482 0 obj <<
+/D [1305 0 R /XYZ 153.694 616.333 null]
+>> endobj
+486 0 obj <<
+/D [1305 0 R /XYZ 153.694 423.103 null]
+>> endobj
+490 0 obj <<
+/D [1305 0 R /XYZ 153.694 345.077 null]
+>> endobj
+1304 0 obj <<
+/Font << /F8 596 0 R /F28 597 0 R /F7 744 0 R /F35 743 0 R /F30 599 0 R /F31 600 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1311 0 obj <<
+/Length 1259
+/Filter /FlateDecode
+>>
+stream
+xÚÍXËŽÛ6ÝÏWh@bF¤(JêJi;SLÑ
+0Dr³M…pFNÅ̆¡Gè8AÑh÷ñ••À§±à
+”R[åÜ&̺Ë@\L š'LD?hyëPiå.U¦“T.ÅNy+‡§ñÍÌÅCBu§gšmEë¶eC˜v?sÙ0 /mài6Êef
+úƒnºò«x|ˆ‰±æä5ÿcLÊœ‰gæ*œ¤·–ËVð­>¶ß·{}öÆÿ¢.h*\Ì ÇÚn[„1;[r»¸ùG±¯T
+endstream
+endobj
+1310 0 obj <<
+/Type /Page
+/Contents 1311 0 R
+/Resources 1309 0 R
+/MediaBox [0 0 612 792]
+/Parent 1308 0 R
+>> endobj
+1312 0 obj <<
+/D [1310 0 R /XYZ 152.694 705.06 null]
+>> endobj
+494 0 obj <<
+/D [1310 0 R /XYZ 153.694 587.753 null]
+>> endobj
+498 0 obj <<
+/D [1310 0 R /XYZ 153.694 507.602 null]
+>> endobj
+502 0 obj <<
+/D [1310 0 R /XYZ 153.694 427.451 null]
+>> endobj
+506 0 obj <<
+/D [1310 0 R /XYZ 153.694 347.301 null]
+>> endobj
+1309 0 obj <<
+/Font << /F8 596 0 R /F28 597 0 R /F7 744 0 R /F35 743 0 R /F31 600 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1315 0 obj <<
+/Length 1238
+/Filter /FlateDecode
+>>
+stream
+xÚÍX]oÛ6}ï¯ðKhTQ$Er@dè:tX‡ Í°‡uŠEÇœeK“¨$áÿ¾Ëɱ­ÕRÒµ{)êòòÞs.iG“›I4ùñYäÛﯞ½|Ã&I(æ“«ù2Š& eaŒéä*›üà(!Ó?®~zùFx(’„[‡‰@àÇ}D˜¤Yv[—éLn0ïåùö¹›øãÌO<CQ(¨è0hFÌBÁI‹ÑëÍ›8o¼ó–ôyÃaÌØ¡7>`'Ö¢!ÆÆ !ÎðíªÌåJ®§1ô
+‰ 5‚P'ÎOÛ«¦g‹ ¬
+35˜Éº†8¸AU»¶’5ª’™yƒ˜nt•.-‚{3‘²yQÁ>tk]4ºl´ûtmÖé&€›ªi§{.x°’ºR3Rز[²çs17&¸µ%ÁŸESMQ°Nó°‡`À/‚ØÊzø™ ‰ØSDYfrnzµÔMy¾(Šå¦Å~ê!
+?© ãÛ±q\ž×w›*ƒtýÞåî2-*ËÕ^õÄ$d„
+ cæü6å8H•YPàÚk“(Á.LBY4F'fÄ0×J̰׎¤sm¹Viž[IpqùÁ -ÒÚ™A•7+Œƒ»µ¿3/©y|r6ñ`•ŽžÐµ öc©^ô‘EYÙ[ù­§5 .²âÚ’ÝSèø‘àLÍÒܱëR¹ÖˆÖš€R€d`‚Ê}š®¦Ô–v]Uþ¿¶<‰öÙú6Ѩ0mMrœ9žø¯š‹Á,F-[Ytú„Øœ>#:u1tRÃýgDšîË/|Òßÿì’¹R(k÷êØ‹´£“gŽ¥@³2O_Û|•ÄA-gZëúsU CÛé™Å'O=“žÙ9x^7«L–zñêÌ ­ÒûL™3nØ‘øK¡åwpÎbTæU€¨u²j‹«ò{Ÿ¹Pd~¿ã¼ò2i5_´•j¹+ðõ·ï}ŒÔ9gè<c8SR)µ>#ÖÅŠÑàÊí§r‹ ªÜçjyØØn UI› ¿B‘¨džÞo7#øLUó§Eÿ õÝ©0 ±Ø;ó|Øò´é÷zwS½÷¨$ÑîÎbÃ逺iµƒAqH·D>sëô®QùÉ=mGìAŒ‰ÐÚÜrr³‘aâÑ£Âô
+»A„ä'¯†Û7AñŸßsPôÔ{Ž«£¥Þ¿é<ø1»÷¦aÁ>¡å‰ÿéÛ›òÃÕ³
+endstream
+endobj
+1314 0 obj <<
+/Type /Page
+/Contents 1315 0 R
+/Resources 1313 0 R
+/MediaBox [0 0 612 792]
+/Parent 1308 0 R
+>> endobj
+1316 0 obj <<
+/D [1314 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1313 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1319 0 obj <<
+/Length 1306
+/Filter /FlateDecode
+>>
+stream
+xÚÍWËnã6ÝÏW¸
+ÈÀˆ#>$J‹N0™vÀp tÑéB¶h[,º=Iôß{)R²-+¶“fÑ•IŠ¼sÏ¥ƒÁr ~y¸ßë黟ø B §ñ`º`"âArDh8˜fƒ?<Š<üsúåÃ'X‰QEÌìeá ;õ¦o˜²t&¿‹,¯6EúXÝ囡’ÐÃù¶Ù™6Ŷ"G«ë¼ÜV¡[®ýí‡æ;>P&mhä¢Ðf¢÷G¡õ}ÆsÜz¦/e%•¶îq¯ò¿Ëœ½<óÿצ¿s^侺.n‘W:oGŸ/wõ¸¡Ñ$iÜüóS5·¥k÷Y#(JðikvK×ZÜcp”ĬµöÔkÏmêÚKúìQD8?ÛÒ±†ƒ³ÖL=´xÐ+‘/WÚ’âgû% ûw1$`…DµÇ
+
+sì¥k7KÝçñäÚ¾ÏõÊíܺ
+«j®òs4ÏuªsYV½T‡HiyÂZäØEȵ•™‚|QWúñ°ŽÍFõ5Uw6þÒ¬?¢) H$@Ÿ˜a—g 0#Ýúî…,—³|8¹\ªt³î=cæÊÛ0³í¸8¼(ñÑLÊB¤¥V[Q· ëºñû8ªîŸ‘4|È søèűɬDš¹|Òæ>Ïê’Ê"{ïÊ)Jƒ—† ŸÙ­±‰\§ÎHýy»*-r¿Aý˜Ò!%46Àþh„Ì|Œáæ¸×Ø•Òù¼)†Îu!\D™cq)ô«Ô@ü½®jC@¥ä¶ÌòréJ%·³Bøo¥Õ}î.Ðõx§ë³·Óõ]Õ£ÿ¢ë¼G×ãçt=ÚeRétöœ´GVÚc§eÓÕ‘¸—®mºÿËžÄÂø\<Cä¤ÈGqØÒ•¿RäÓÙK4>~;¿ºîWøç_B»d“·fPr–Aj½9C‡ÒçÅÐg!ù4ä1#¹±ŠcÆ«Ô-Z™­7(€‚°˜x÷î’›O÷yQ˜õ”}[@wÊ짼l|¹½¥™p÷¸j¦ %×݆´ <Ç©w4¨é#`Í1!A4`ÆÒ``Ï“%·Ç¼’ã8na  ¸1,„¦«òЫ)cmß©ŒÍö/îÿí·ÃBŸ#=`„¹ )u^B×rÍjïü>šî´CóÊžrÖ@š[TÙ™x˜‹úÕãÉ×±PO@U©!‰it¶YvO^·ªzMÞ5m„ÛNLÍ æíӸ͠‡p ’VÛ,ÝÜî(ò~7Ï1çF™@LKZRqzȲ¦)»wG’_+,‡\LF¦©¶B˺b¬FË]—T*o¿®š‡hS¾,צ­sO?÷X9RX\¤°ÝÇÊ……ÇaŒŒ{¸ýÐ^Ý{Åém{äfúî_<ƒl•
+endstream
+endobj
+1318 0 obj <<
+/Type /Page
+/Contents 1319 0 R
+/Resources 1317 0 R
+/MediaBox [0 0 612 792]
+/Parent 1308 0 R
+>> endobj
+1320 0 obj <<
+/D [1318 0 R /XYZ 152.694 705.06 null]
+>> endobj
+510 0 obj <<
+/D [1318 0 R /XYZ 153.694 515.026 null]
+>> endobj
+514 0 obj <<
+/D [1318 0 R /XYZ 153.694 331.263 null]
+>> endobj
+518 0 obj <<
+/D [1318 0 R /XYZ 153.694 251.113 null]
+>> endobj
+522 0 obj <<
+/D [1318 0 R /XYZ 153.694 193.406 null]
+>> endobj
+1317 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R /F28 597 0 R /F31 600 0 R /F30 599 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1323 0 obj <<
+/Length 1829
+/Filter /FlateDecode
+>>
+stream
+xÚ•XYÛ6~ϯ0*kF$%Š*PÀI)Úf‘,ÐMh›^+‘%C’÷h°ÿ½3ʶlùÈ“yŒææ73wƒpðë‹ðÌï›Û¯ÞËx YªT4¸”d©æ'LÀÅílðOð…Ëh<É&3Ó˜rÝŒ³"k†ÿÞþvÀn±$L#ÎYùجêη¯ÞëA
+â…Bñ:fa¨» nªr8:˜ÚÙº²øí«÷b÷›(e:I€Ù)y{bR&Õæ“…©‡£8 ƒfaqÁƒ¯C”Z—sº|¨²&+î:”a0-‹¡H‚¦*s:¨ì´¬f´ÎàNM‰
+€WdÊDuÝCŒt|-'?Õ}ÖÅ,‰õ®u@Y˜¥=´*âLG¢%­ì}c£g³æ‘GHΗG¹½ŽT” [yùR÷ûåh‰V™}]×þt£f¹j²²¨‰¢µL'LuÍÚNlt°r±L –À5ø“ÁB„IðÁ“dµÿ-êÆä¹µ[ïJØ%­:x A1yöŸAµv…œH˜ðt†¶é½—2ðFxÜ:üA€MêE‘ïÕ´XZS€®<¸óþ¼¶ -&hÇ­Q$‚Úkœ¸ç‰N¿„qøúæ3üp¢÷â$˺*LμûIµŽQï‡Ze…ä &†4Šx0Y7´øôÇ \Óý
+µtSÛÜN=•×/ nN­:›šœN>aüì}fh_“â¹…x&*Aù‘—¿áÃÜ4õ‡SScFJ£|¸Hmb£ÈŒ)Þ,Lq ¤Œ€¸Ö¯ÉÕw׸“ÁÊy™ãÎID¢)%ÜÌo!4‡ùÀH¼- Fµ\±ªy<Ì‚X0Ê–’A2P,M¤F‚‘‚q… ³4":É'ÒÖrÍân™Õjfçûùoé{ª=¿ì‘N,G<¦áâá=’AÊ÷Ë¥È)B2ÑÅæl¹´³Ì47ˆ©vOj+q×íèLü‚ÒçÆk|ïÒÁ#0dÆžˆ¾ièÎÁ³vð\ÓÝ‚ÕéÜã<÷ÉŠ”{ìhy΄£´¦ŸX/íɳroÝgæy ¿ýøçí§¿ŸCö¾´ƒ"˜hÄ
+endstream
+endobj
+1322 0 obj <<
+/Type /Page
+/Contents 1323 0 R
+/Resources 1321 0 R
+/MediaBox [0 0 612 792]
+/Parent 1308 0 R
+>> endobj
+1324 0 obj <<
+/D [1322 0 R /XYZ 152.694 705.06 null]
+>> endobj
+526 0 obj <<
+/D [1322 0 R /XYZ 153.694 190.244 null]
+>> endobj
+1321 0 obj <<
+/Font << /F35 743 0 R /F8 596 0 R /F28 597 0 R /F7 744 0 R /F37 750 0 R /F30 599 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1327 0 obj <<
+/Length 2057
+/Filter /FlateDecode
+>>
+stream
+xÚY[ã¶~ß_á>Ðk­HQ·´¼[lÒô¡ ’A é-ÑcueÉÕe.ÌÏ9<GÉCw<}±(êçÊé`u³
+Vß½ øùéú݇oÓUæg±ŒW×»•ˆB?ÎÔ*Ž_†ÑêºXýæõ{S_­Ca‹Esµ–©—øžºï°Ý UA¯{ï·øÃãv4®éë¦7õéšÅó²×}ÙÔÜ¿eÑ=‹qw7íÓvy[Y³nõ¶Ì¯þ}ýpl-„ŸEl½µo8àïvø…¡·pt¨¼². ΚxZ0"ñúê„ãMÁÜíA'ïùuæ>NOâô’_­…×ÔWÂÛ ]YßøÖV¡üL©¥Á­FÔžJ¯ã@—¦ŸzäA÷ôýØ66Æeaà =»¦%¡yüàÕ7vzGæé
+'ÐQAqoît[?þíyS,m2Ô
+¢ÈO³h”´ì:Ý _,×EÈeð¹Å}ýÚS š“ØÑ4akn{s¯5ø2˜–”ëp ÅЊŽØ¹ôepl]ìÌ›®Áú|p8 ÅO¶íÇ“LTS¤nÅ}{4JWƒËY%çу8;8
+endstream
+endobj
+1326 0 obj <<
+/Type /Page
+/Contents 1327 0 R
+/Resources 1325 0 R
+/MediaBox [0 0 612 792]
+/Parent 1308 0 R
+>> endobj
+1328 0 obj <<
+/D [1326 0 R /XYZ 152.694 705.06 null]
+>> endobj
+530 0 obj <<
+/D [1326 0 R /XYZ 153.694 389.171 null]
+>> endobj
+1325 0 obj <<
+/Font << /F8 596 0 R /F28 597 0 R /F7 744 0 R /F35 743 0 R /F30 599 0 R /F16 592 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1331 0 obj <<
+/Length 1900
+/Filter /FlateDecode
+>>
+stream
+xÚÅX_“Û¶÷§P2¡fN8‚I°}‘›ÚM2v榾iÓ‰3H‚$ÆÉ!¨»^4÷Ý»‹y¢DŸxöC^$` ì?ìþv²™ø“¾òÝÿßo_]¿M&1K“PNn×."–D|G Âhr»šüâ…<’Ó_o¼~ ÉÒ8¸6Y$ÀÇ.úÈC±Ì•1ó{U‡›\+£§³(ˆ<Sée¶~ I³uÔ½ù÷­þ™ÆeÕdeahò‹ªÌU½«~ýËã7$öXÙ;ã>K£´Ó0¥á|®‹Õ%¦²eûL¹dQœ¶L­’r’š ¶ü€g\°TZú®ÜLga’ ÂPx¿—ûº˜rOå47û…i¦ôrÍ´L€YLCøR’¿àl²b]^ß| O[ù(ÜžÇûw\:×ËF¯ZÃBÂ9¸%
+È´ˆ®à²„IÙùŸñéŒsØývš
+¯.‹iȽf§šF×çþñda»ý?Szà e¶)p,ÈQHl²&וÚh¢wN¢éº¬i˜ð7")"¬Êé V.÷;]à–†¾f…iT±tÌwj$ÞMJ\v‡]×ÙÊ-YXyh‡UÝzƒTÏ
+·Az姬ØÐA–…¦£.×'GnÁ}kƒþi¡°Yaåp²0–àgIIÂÞØ/‹ÀÿG䟇b…§1“°â4Z‚‹!MÑRÎ7u¹¯ôJ­Vµa[‡ö?&XÄ|@ÆüIó5Äž‹»¹Ñ;ê)Þw’Œ™°YßwQ8ÊE+½”w-·ý´b1*u‹²Þ©| rpfÖkµËò×j³Ñ«:Ûl›ÑHG—Aí›gO{2‹H^yîü›×ß}°øâôãÜb–ÄA+ê3Gcþ&©÷^ÕŸhôÒeø`wà„
+}w¼c•™*Wv­!
+a n¦é¯1“¿ûp…$陲[óàö—Å· ï‘‹ê`â˜Õo{(eÇÉ“òfkÕ¼¯ÔÒ|KùK\êÂAAÅ/k\Šï›K žt‡¿$;·:_•ôÓNé¿(G°Žs5÷3þJl¬55‚#4ÑR`à
+ø}–»Ò±°ÀÕ „j[8žKÞ"3uá ç®…ü¹Z”wzÛd&Xâ'}4f²Æüi†¹Œf²Ðyyÿ –p(õ äzØcò¥Prdþáñˆ"¿N ¹ê€ß©z£q°X]gÚœ
+¨WxO‹nz©á+êõX$‚MíóæÊý6[¢Á[ú¸É¨6úê
+Õ}t¦ÑoM4è«€™±)1™AÃÞwÍOe£ÿ
+EH`äAFÙà³Ü¡p¾FN™“™2¹¨`£=<eÁ¢ºh
+lWª…S¤m[õµ‹†œŠÙP‚ôúñi£”ø_š Ç±ÿ‚~)wÕ©j]AÝjLó07„
+½sAö©È”E²+ŽK‡‰u™#r|m0Ô4&¸i¨3½ì•þÕGŸÇNŒ!(æ©`>†^™* *‰Hö6Å^•Çg’K2\D©‡²Ÿ±Gp²aúYã±÷#XöÖÃU*÷° 2½' û’±"«B?eB}«~ßckAÛ€›4ªÚ=ŸhhêÐkH¼ÏÀ§vD ~Ý÷FŸ1°k‘On9wBGLÂ}겜„ó·¶–Eÿ]/>ÒµI‘Œ=µ+÷z£¡9ž>.h/40´¥1ÁÒ˜¸ÒèèÇrÏqΊ' v) »£9JéÛ¤ÌJÜîy ÚŒ8òmàK€ã”,LÓç//gœ›eUC¹dŒÄq4ÑË•jÚŽ£Ê`ØuIoÀÌš$|ÖXÈ-.ºwÍOˆ-F*û÷ëãî§;Lªâùȯ-Å¢º¢/Ôÿ\S7D$Ûíê‡.µCÝ=ùâûÊ ÎNoV4MѨ`t³$ýQÕÈì ÙAn¶ª²Å•^€Û§…‚yVh¬O "¢T¯Î®"D£x¸LÎO<à½on_ýtT\¯
+endstream
+endobj
+1330 0 obj <<
+/Type /Page
+/Contents 1331 0 R
+/Resources 1329 0 R
+/MediaBox [0 0 612 792]
+/Parent 1333 0 R
+>> endobj
+1332 0 obj <<
+/D [1330 0 R /XYZ 152.694 705.06 null]
+>> endobj
+534 0 obj <<
+/D [1330 0 R /XYZ 153.694 590.493 null]
+>> endobj
+1329 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R /F30 599 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1336 0 obj <<
+/Length 1395
+/Filter /FlateDecode
+>>
+stream
+xÚµXKoã6¾çWX, kZ$õl/n‹l‹[,²F»@Ó-Q¶YR%ÊiÖðïð!Çv”˜NÓ‹IÉyÏÇ‘ÝÑräŽ~¾rÍøãüjú1(i4šg#ìù(ôñ(ðCD¨?š§£?Š#<þkþëô#P"'ÏŠHuèSo&øºnïòš©UVtíjYt\_>”31—'ØE±ïå;9{Îrõm6žøÄwj ¢HRVmþí¬Ðh/”Z mØrÉÓ&_®„\²tÃÊD)PðLH«‘Ÿ—ê$/Ø?ö6{¯°ùÑÓör|ËV‚Ò¤5k–Ú Þ@{Y•¬‚+W¦<›±LðfÆÒ´ám;HœÅâÁ^…p@!?ˆ{v︙#§Ü¢³ÜŒÒrÈšª÷ ¥ý¢Úp°$Ë‹eSuõV'Oºik–ð-”™$Ô³h£Òör‘W%+ôºà,ÍË¥Ù”ÜÌ´”£ç°N¬ªÆÞ’ø ,É™ÔðÄÑGSlÕ‰Ý7SgÖ&M^‹m/=ÅÀ‘’£‡ÀrHÑ
+ÝçE¡iy©)¢kÊÁXŸ¸  D¦Ë
+ ­@")ª™ÂXžš7C^Û7;çF)ž’ø&Naçææ‡Ï3((Xq?ÆL’zí~«ÿN¹w’§@%òœÆu¦ î•w45伬„> ¯S§nxÝä!¤ÎZOªã¿¯(ê¤L.}¨è#?áž©áÑ%<Õ53„<Öü‹ԋ<ašÉOÓ"1*@°¢EmLT„¦3-õ ;ßÁ¢‹Úh6Y %86ŠÂ'B^ûŒÄs{Á³5Ø3BòFÞ¡¼Ãw¾‡„˜›§B<+!íú5{¦¾Ó7èv‡Åÿ{ºoìã7mã‹Z@(%YE*½ÞáK2+¶ŠÏ,ÏtC¼}‡wÛÝÖ:«ˆ;ÔqQ€«Ÿج«”oµëÙ†«ån;è2sÿT¶Õ•2¬·®ïÊ4=•|+¡jÚwøh_­þîXj¯9ëÍÝ®£– õÒãCc‚Ï<2 ^ó†%
+$bHÊW=ÐÀU¦-/S®>1Oû]³)[Nø¬VDÀx
+ºV
+|ôÎÓvpjÚÒBÑ(ø q°wï†(é¯íû—<æGHê0!1ô¡¦` Û?ºr=¿úf›t(
+endstream
+endobj
+1335 0 obj <<
+/Type /Page
+/Contents 1336 0 R
+/Resources 1334 0 R
+/MediaBox [0 0 612 792]
+/Parent 1333 0 R
+>> endobj
+1337 0 obj <<
+/D [1335 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1334 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1340 0 obj <<
+/Length 1367
+/Filter /FlateDecode
+>>
+stream
+xÚ¥WÛnã6}ÏWø%€ T´xE(àîb³›{Ac º}-:"K‚H¯sAþ½C‘R,G©•î‹IS䜹œƒÉÍ$˜|< Üønq6»Œ&Å“Åz‚Yˆ¢Ox!BÃÉ"üíQ‚Ãé?‹ßg—°"PÌ93{ E$Š@N³é;¦l]–º(µTÙƒ´eûq'›’½1B)̼šŸ’.:éÑ(é¹\ku›U¿(ÌŠñº‹QÒ«¤ÎŠTÚüy˜?×¥NrcÂ6©o²âРÑX$ÀÂ…<n±žÎÍ–Ž<Ç#H 9„ˆ&ä€uY€rZËz^Õ2Y*]'+­ªd%eN|†¢@€H J†¯H*•~]ÔìRLb°ô1–„ <”wÝœñYzÉrêá•Søùa~Úõ"µÕîežÝ*ófó¾=oÕ°ÿ€Aͨ3;AË|ŠA¼9¹š’È»ES_pá]oÊ]î0œ`û‡å°²ºT´2V‚…=×,%}]úfD1PÌ(¡0v¹AðÉ—§r}*†ŠlbZŽ¡;™ÇŒ#ÿþ8ð„!ÞWà0ø Q,+±•|yõ×çSŸRê})µ™0/51*
+ ª:9~»+6emÛ.?‡Oƒ·[þŒÿÓæS<
+>—–dy¦tÖÍ®ÆÓéô4>s(=™þO'S½+&”,YC톀¡¸»àm¿a.N{/Ù7’-ª[WmÕÅRnP~\GéßbÒ‘!F$,Ãï:îYf(ÕÂe…²P”PW쌵KMpõ‚¼E¡q/¹¶]tæ×»\ž¾>žAĨë#…^¨˜Øo?þÈRÙߦ7õ|>úŠ¡ñ(-ne]ø}œ±×:wŸ¥zc^³íÖç£aÁèè÷ðDÀï]`ÛÞ^Ë•ÎÊÂ4=¯µ~ÂiñgÓrBºððð}V×àd³Ê]3Ÿ·2)leö®‡º&¢ ¢=ËU±Ûªy­ïú&‚"Þ9¼Þbã€Wy¢”C«Œ=ˆ’—òV‚Kêd™­Ð8bA§Ü>Ëó¦[„J!Ž¸kÝSaUÚ®Ó6Ÿmû¯KÛšíÍbYßžz F]¨ßô<pÚãù>»2°Ð
+endstream
+endobj
+1339 0 obj <<
+/Type /Page
+/Contents 1340 0 R
+/Resources 1338 0 R
+/MediaBox [0 0 612 792]
+/Parent 1333 0 R
+>> endobj
+1341 0 obj <<
+/D [1339 0 R /XYZ 152.694 705.06 null]
+>> endobj
+538 0 obj <<
+/D [1339 0 R /XYZ 153.694 508.723 null]
+>> endobj
+542 0 obj <<
+/D [1339 0 R /XYZ 153.694 452.538 null]
+>> endobj
+546 0 obj <<
+/D [1339 0 R /XYZ 153.694 177.867 null]
+>> endobj
+1338 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R /F30 599 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1344 0 obj <<
+/Length 1453
+/Filter /FlateDecode
+>>
+stream
+xÚµYmoÛ6þÞ_a * +Š"%}K·µÛŠu
+°#Ó¶½A’Ût‚ÿûîHZ’c1]ïKD÷öÜNŽ?[ÏüÙO/|ûü~ñâõ»h&H±x¶XÍhÈIÄéLðˆŒÏËÙ_ Â`þ÷âýëw@‰I"Dˆ¼#AÍô‰²ð.[=nË¥Ze¥Z"¡Û¨Z6]ÿ¹>Õtk¯ßRŸ$<4±Sš"’ÄáTè˜ÊÇõǪeÛÝî¤>#Äè‹}᳞íúƒýüâHµ*í²ªt –p –U1¿e"âÞ$löàŒÈÊ#åõÝ ; |ßë]4ÅWÆ(¹£í½;LÜw…iÐ2¿ (F Þäõ¦\°âÔ«©"°©2&qÑ\=ξ =
+Ž´àÈÓv
+‹yÌàâmèC#OÁ†:×…‹{]§¦‚°Õt¨<<Õ•gØN"¤$ñÁ\ƒý|ÕTÅÝq,%œ´Ù'ã^ï&ÛƒŠ¿ £è~ècw55–W¶e, ¦¯v; ‰ iøm‹ ºs½mÌK²jÕ©ö cA5çóFuۜݿšÅy³ù]ÛɦۋßSõt§ûÿ¿w»Þ'qZ˜W@o[ªͦÈÊmKõˆ,aZ¸ÌrÏÏíýùVtjÆf =(¢Bæ¹^¬V²Èò¯¸¾_µ0Ù¨ÖÄ8÷WUÙPmå=q$¢g©†©q­–M¶Þ8ˆÎ Ý;ƒA¿ì \ç‹~œv
+­+õu„WÞ.^ü*¹b{
+endstream
+endobj
+1343 0 obj <<
+/Type /Page
+/Contents 1344 0 R
+/Resources 1342 0 R
+/MediaBox [0 0 612 792]
+/Parent 1333 0 R
+>> endobj
+1345 0 obj <<
+/D [1343 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1342 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F8 596 0 R /F28 597 0 R /F43 827 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1348 0 obj <<
+/Length 923
+/Filter /FlateDecode
+>>
+stream
+xÚµWKo£0¾÷W E•’C\?
+,h}»ÝóËòæî‘Z.à”0ké[Èv
+8³wðõí´n‰Bc=š}
+{“ºw:X 1­|*b/ŠÚï{q½¶cÉûiRêç×2—{A Öylô¡9¼ª28A{4<¦281Q†dÀ r/Û «¢W2·/PEo¨®lEÌ‘0wÆw /êÓëé]W|D=GÔÈ°RHbo_V(Þ«¢¬
+“‡Åò°ïÏáe™HÖáËYw¬¹M¤Dr„$GÎAîn¼$ðó4^ 
+é'û‹€öïv­™{27ù<Ž4G
+endstream
+endobj
+1347 0 obj <<
+/Type /Page
+/Contents 1348 0 R
+/Resources 1346 0 R
+/MediaBox [0 0 612 792]
+/Parent 1333 0 R
+>> endobj
+1349 0 obj <<
+/D [1347 0 R /XYZ 152.694 705.06 null]
+>> endobj
+550 0 obj <<
+/D [1347 0 R /XYZ 153.694 179.036 null]
+>> endobj
+1346 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F30 599 0 R /F8 596 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1352 0 obj <<
+/Length 2231
+/Filter /FlateDecode
+>>
+stream
+xÚµY]sÛ6}ϯÐL§³ÔŽ…_é}‰ãH©¼Žœ‘åN;Í>Pe±¡H•¤œdëýï{/
+IfœôIÀ½õ€6ˆè(k—ikÀú®¤ç só&giñPÆ›UŸSÏ*9ìE°%0–}
+‘ìRoHDp<šÄ®ëè1 h‰Jß
+¤¬Ô„U˜g€«|a‚
+¦äñ:!ýˆ$l “º¦ÂW‰AŒ*EBz€Øç4Ë d°\n@›kó6>˜…™0×ñþ|âŠB¤ü—väsë)æÜ4³©…[Ä,ý ý­rÑʈÂ`GÓ<s'=Áº<+A;eÐY?ä,/¸ò’<)ãÚJ¦AË~¼©ÊõÆ-É÷ù^ŠGR6™„‚Ü`²ßÀ™7quÙ²`Ô]V%ßœ„Ñ‚š{,šxÍ`%HLIéM·vâsYÔå%ïùš²ƒ×V”g³Bê·˜­ãO X$uòű?¥%µ_@6i½Ú%=´,²¬ÀÝn5T˜.3bq'WauØØ2†i7¯÷~Hß÷ng¿\±×áÞÍÈ\/ÇZýPx³ñÍäöÜÆÝ—#‹ £iå;¶Ev¤;´;
+Ty±“ÝÓŶ^åà«æ?.¯&¸«
+,x—ù
+¸>WÚMüÝ“bÑË8ÑHîõ äþAæibú«™ÒfƦ¿IºúâM»¢ï¡¡0óÍwÜDÒ4%:‘ìAÃÐ\_LÞÝi|ÞÆ„½ÑxxýÖ©'Ê¡;jõäÈmœÐ]÷ä
+©Z²¸9×vš[ÖyºƒÌ¤ÝÂÙÛøA?)7“la^Õ…¬
+dÑÈ»™À•ùÞOè‹~€Á½©†Ï¼vÈ!Qíšû/.
+pÂ[°ËËÌÕ;uO¿OWÛ<ÕݸqRo³Øc;Ò`(B´ÊÏU+8Ý]U_•ä8x¡¼Ù/†£>¥Ô¨ùêcÌé„15˜ª´ÎoÍÀxb®×ãÛ™¹CÔñ:Ž†ÓáäÒLq8Nµ}òöO$eø®Í×Ëú ÿ ‰++C‹vYÙ
+ÝUMVXس¸ýu"ÖÍWSÁš“.>ad8OßЗKzpúƈƒÏëc•ÃaD¸hÚûs[ääÒ6AJ”Ø£:ÁÑxzkÇu–2£Î¸ÐUýEŠÂ¨›%ä*'9©j”êô„"X•q0ÍÍ9øãÈ?ø¢åÄGhªƒ³Þ3DMJд|§Ž–<M2ìF4ò.š†oÇ3ÍKÄ[2"a‚
+†Æ“Ë›ëëá¥Iiøf8»tFcp¡¥ª°)µM€ë± 6\¤pö«Œ³i~§³äÞž3˜€œüz¡ÛDÓT§ŸšßhÚت‚«P8V8u…a«ùçQ;k8{õ_þ –^
+endstream
+endobj
+1351 0 obj <<
+/Type /Page
+/Contents 1352 0 R
+/Resources 1350 0 R
+/MediaBox [0 0 612 792]
+/Parent 1333 0 R
+>> endobj
+1353 0 obj <<
+/D [1351 0 R /XYZ 152.694 705.06 null]
+>> endobj
+554 0 obj <<
+/D [1351 0 R /XYZ 153.694 542.942 null]
+>> endobj
+1354 0 obj <<
+/D [1351 0 R /XYZ 153.694 402.269 null]
+>> endobj
+1355 0 obj <<
+/D [1351 0 R /XYZ 153.694 372.953 null]
+>> endobj
+1356 0 obj <<
+/D [1351 0 R /XYZ 153.694 353.654 null]
+>> endobj
+1357 0 obj <<
+/D [1351 0 R /XYZ 153.694 320.464 null]
+>> endobj
+1358 0 obj <<
+/D [1351 0 R /XYZ 153.694 300.888 null]
+>> endobj
+1359 0 obj <<
+/D [1351 0 R /XYZ 153.694 269.358 null]
+>> endobj
+1360 0 obj <<
+/D [1351 0 R /XYZ 153.694 238.105 null]
+>> endobj
+1361 0 obj <<
+/D [1351 0 R /XYZ 153.694 209.342 null]
+>> endobj
+1362 0 obj <<
+/D [1351 0 R /XYZ 153.694 175.598 null]
+>> endobj
+1363 0 obj <<
+/D [1351 0 R /XYZ 153.694 144.344 null]
+>> endobj
+1350 0 obj <<
+/Font << /F7 744 0 R /F35 743 0 R /F30 599 0 R /F8 596 0 R /F37 750 0 R /F28 597 0 R /F31 600 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1366 0 obj <<
+/Length 2164
+/Filter /FlateDecode
+>>
+stream
+xÚ­Yßs¢J~Ÿ¿ÂÚ—1[¡/Ý4 Ü—-cÈČє’¹;ug«‚B&ŠbfR›?~Ï¡Tl%÷f,hºOç×wŽfë¡e¶>}0k׳àÃonË#ž`¢Ü·¨0‰ëz-a;„Yv+ˆZ¶)%'ÿ ®ª¯Z¶i¶/N˜Û‚Ãr˜ºÉ›»Îàü#i»7ú½qð;.óÛ…E·w´M"l .öÊä”m™8q¨[¾WK°í ñìjB:ÓÈÈæšu(qyµÑë]'”ŒI*eLÙ<œÉñý"ÅårÆ7Ó6¯†ŒË¶ ê:„
+
+{+˜`_˜lYí«Îµ?†/è.juà$ø‘G,[(lY¶ÌµÛà ¼Šv·œ¸¼Ý9q­vÐäÛ~çÌï匞zøÿVßê0g°«é±Šõ>V‚XÂ>†¹€s‹rÂ,œœÂψâûý¥À’l‹W°ß®âLJÅßLÊÓ8’˜2aƒÉ‰]L§IæÉ"•ÀnéÄâ…Nt’¡WjþF-‹Äi8áó\sT0¯:«Nm\|bWoV“Þ¾ñ ¼Q>ÁKj ú´PŸ¼ÐçX>Öº‰K ÛˆyÀM¼ã*s½ÊM9‰E‰åV–ñÚè"%Xø Êþ‚JÁq¥›]ðã 7¯Çµà† º¥´ýÇ¥qƒš
+—û<Îäé%D«=ÿõˆpÝÚÙÅÏ®|øZ>”Ïô80"Z
+¨q-ØÜy3/™1]ÌÿË,žÆQI(&(ö‹|ëÌC…²®»Sy¥žg}¬ãe£qÚ5¼-^½A·{® º†Àw9Ö‚C]bZÿ7l—yþ¸¿„Úhzét¶Ž:s ON>+n•Q"„¯v|H «G,W{ü‘ÿÅýs¹Ø¾ñè±àĤÎûõÄÆa²øù
+/(­ŒW;øÔ±p O‹F0*bõ »Á
+Ü ðO™KOåˆfÃ~ßïb®;•“´•_Ýæ=ìúþ¹Qœ¥’eë$ÀL´ÐÑÊé4fþ…øUö«1;”ȧÜ>y
+¢þ svfùÁ‡ÿwMÏ
+endstream
+endobj
+1365 0 obj <<
+/Type /Page
+/Contents 1366 0 R
+/Resources 1364 0 R
+/MediaBox [0 0 612 792]
+/Parent 1390 0 R
+>> endobj
+1367 0 obj <<
+/D [1365 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1368 0 obj <<
+/D [1365 0 R /XYZ 153.694 667.198 null]
+>> endobj
+1369 0 obj <<
+/D [1365 0 R /XYZ 153.694 639.089 null]
+>> endobj
+1370 0 obj <<
+/D [1365 0 R /XYZ 153.694 607.778 null]
+>> endobj
+1371 0 obj <<
+/D [1365 0 R /XYZ 153.694 590.913 null]
+>> endobj
+1372 0 obj <<
+/D [1365 0 R /XYZ 153.694 557.111 null]
+>> endobj
+1373 0 obj <<
+/D [1365 0 R /XYZ 153.694 538.032 null]
+>> endobj
+1374 0 obj <<
+/D [1365 0 R /XYZ 153.694 518.676 null]
+>> endobj
+1375 0 obj <<
+/D [1365 0 R /XYZ 153.694 499.32 null]
+>> endobj
+1376 0 obj <<
+/D [1365 0 R /XYZ 153.694 480.24 null]
+>> endobj
+1377 0 obj <<
+/D [1365 0 R /XYZ 153.694 460.608 null]
+>> endobj
+1378 0 obj <<
+/D [1365 0 R /XYZ 153.694 429.02 null]
+>> endobj
+1379 0 obj <<
+/D [1365 0 R /XYZ 153.694 397.985 null]
+>> endobj
+1380 0 obj <<
+/D [1365 0 R /XYZ 153.694 366.951 null]
+>> endobj
+1381 0 obj <<
+/D [1365 0 R /XYZ 153.694 337.577 null]
+>> endobj
+1382 0 obj <<
+/D [1365 0 R /XYZ 153.694 318.221 null]
+>> endobj
+1383 0 obj <<
+/D [1365 0 R /XYZ 153.694 296.651 null]
+>> endobj
+1384 0 obj <<
+/D [1365 0 R /XYZ 153.694 265.063 null]
+>> endobj
+1385 0 obj <<
+/D [1365 0 R /XYZ 153.694 234.305 null]
+>> endobj
+1386 0 obj <<
+/D [1365 0 R /XYZ 153.694 202.994 null]
+>> endobj
+1387 0 obj <<
+/D [1365 0 R /XYZ 153.694 183.638 null]
+>> endobj
+1388 0 obj <<
+/D [1365 0 R /XYZ 153.694 163.729 null]
+>> endobj
+1389 0 obj <<
+/D [1365 0 R /XYZ 153.694 144.373 null]
+>> endobj
+1364 0 obj <<
+/Font << /F8 596 0 R /F31 600 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1393 0 obj <<
+/Length 1984
+/Filter /FlateDecode
+>>
+stream
+xÚ­X[sÚ8~ï¯`úg'(–,ÙrÞqº dÀig·³3qˆ“°ìÁ¦mvòã÷èbaŒ¸l»/ ˲,ß¹|縭ç–ÛúðÎmüŸÇïN/y+D¡OüVüÔ¾‹8[> ñX+~l}q<ÿ4Oµ¾´™ë:·ÇÜs:Ç„;¢ã¶çyNÿîæ<ŽÎÄêÓK×7vò©ÏË-ŸÔ’ú«)bÜÜ×[ú‚
+oBˆs ozñH]Ľø::Qc±du­}\r (¦lÆì¹À¼ol1±3óÃ]Æ VJ•N懒I\DBcoŠ4J0¼Î['­3f⋾+@—Ådþ¬M^@ùR#éTOJ–ôëOêÌéåTs~ªéÛAQå•¢î  £~‚*a¡Ó¹¸F£‘º¸NB|å:'j^ñj.ºƒëë¨+‚‘™RflÎQÃãv(7íF@kÿÞ „6g­‘Ë·#x7ÙÁ.®9
+CRwÛäñq‘…e§
+]êÜwÕ¼B•’£¬Óž¼nÎ{}ˆ"íÆP „Mi¨br»¡‚Šùn¤ðM |äR·zàØÄ ååmeª–ÍH?F«¼tLgÜR
+Õ£“†Ê¸ÿ$z5
+qÉE°^„C,á¥\‚³V!C9ÊÑ!2ÄßÁEe-"¸øÿ$=€÷(èe.ó'Ü«\EŒWõ \4ë>x¨*6J
+Ï|dþÜ~øz"›J•âÎeÔÒQbˆ­6~ëê 5!­&´žecùLç
+ïÇNúMÁò%-6Ì„PD(Y·9f¯ó¢›ÛøQ'‘:>,ôÁ…¸áU™·%™±=e^ ºäµ-Zům Q:/lžÙìM+«ò0G\öÕkV•N'³É<)ÓÊ”ÖSî<-³ç´\ý¤€žgåËDÈå窛ULŽAÊQ¦ y3®^Š _[ÅïþtùZÃ
+endstream
+endobj
+1392 0 obj <<
+/Type /Page
+/Contents 1393 0 R
+/Resources 1391 0 R
+/MediaBox [0 0 612 792]
+/Parent 1390 0 R
+>> endobj
+1394 0 obj <<
+/D [1392 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1395 0 obj <<
+/D [1392 0 R /XYZ 153.694 667.198 null]
+>> endobj
+1396 0 obj <<
+/D [1392 0 R /XYZ 153.694 651.036 null]
+>> endobj
+1397 0 obj <<
+/D [1392 0 R /XYZ 153.694 631.111 null]
+>> endobj
+1398 0 obj <<
+/D [1392 0 R /XYZ 153.694 599.507 null]
+>> endobj
+1399 0 obj <<
+/D [1392 0 R /XYZ 153.694 567.073 null]
+>> endobj
+1400 0 obj <<
+/D [1392 0 R /XYZ 153.694 523.791 null]
+>> endobj
+1401 0 obj <<
+/D [1392 0 R /XYZ 153.694 479.956 null]
+>> endobj
+1402 0 obj <<
+/D [1392 0 R /XYZ 153.694 447.799 null]
+>> endobj
+1403 0 obj <<
+/D [1392 0 R /XYZ 153.694 416.195 null]
+>> endobj
+1404 0 obj <<
+/D [1392 0 R /XYZ 153.694 384.314 null]
+>> endobj
+1405 0 obj <<
+/D [1392 0 R /XYZ 153.694 352.434 null]
+>> endobj
+1406 0 obj <<
+/D [1392 0 R /XYZ 153.694 332.509 null]
+>> endobj
+1407 0 obj <<
+/D [1392 0 R /XYZ 153.694 300.628 null]
+>> endobj
+1408 0 obj <<
+/D [1392 0 R /XYZ 153.694 268.471 null]
+>> endobj
+1409 0 obj <<
+/D [1392 0 R /XYZ 153.694 226.849 null]
+>> endobj
+1410 0 obj <<
+/D [1392 0 R /XYZ 153.694 204.71 null]
+>> endobj
+1411 0 obj <<
+/D [1392 0 R /XYZ 153.694 173.106 null]
+>> endobj
+1412 0 obj <<
+/D [1392 0 R /XYZ 153.694 152.904 null]
+>> endobj
+1391 0 obj <<
+/Font << /F8 596 0 R /F31 600 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1415 0 obj <<
+/Length 2061
+/Filter /FlateDecode
+>>
+stream
+xÚ­Y[sâ6~ß_Á[L´–,ßúÒ!ÁÙe‡@ض3mgb°²qclÆ6ÝîÌþø]lc#-}H,ɲtôïÜ„ÙûÒ3{Þ™çíêÝû{¯ç#ß!NoõÜÃŽ‰<Ïï9¶‹ˆe÷VQï7ÃƨÿÇêSýUï·¡mšÆãçÛédù1Xô‡–eóåd5™Ï~äsßß[øpYËF&õák± “S7¶±qõ^-A'¸ûN5a—³!‹Òãe,9˜TÓ¾Q\ÆY*\÷‡Ä3Øs–39°Û¯“¸xayûtCìQ„M>²lG@´ ,ï>ÎçSÝ™¹¤‘øXVYŽ}îÈõ„bó’eÉpæð²L«>u±éÃA_2qÞ,yFQΊB:hPbiñcH)5ž~7m³óÙ@ÎWÃ|ÓÅÉÂȲ´q²´8M–·3¹àìóÃm°Ð!æ;È$5I~БÄ€.%I\¬5 !&òIÍ´ï“t“ì#EˆJHj
+6qÜ0¸ :Â ÖÐoò „€Û–cð
+"#c]UèyB€¢fímÓkëUPëY¢Ì Íy­ ¥c¢ízpQªR”¤‘*³¬<RcPpuÉccyu}±ŒåJŸæŸ"ò D ÞPŸ¡¹Èó® J §?µÕÉÏF-Âþ™íó´ÂMäQGîí8ôiÿÝüáaÄý;†ÔIYN ûO£ÙXïƒ)…u¯Ê@0ZgCØÿMÒÄec2±ï1°UŒ|ËÙ"òîK(£
+Õ)ªœÔvrÒ§w Ù¶ºõHÐÃ<ÿvs‰»ÖW
+VÊ…Oõèš>òœ¦F×À‚
+^\ä³2L†qyö¾lóâMeYÊ“#_gw©¥ÏÏGcé~¸]A 4ÀU  Ù¯²?æðHßÍÿäèý$˜Žõ^Ê÷©mGc84ã½í§ZŒ*
+ËpÀvyœ–ƒ}žð¿!dðƒ2Ó"1LãÇ|({톕’XØœcw
+ʃ«§u|Þç›ó– õ¦,‰
+9¾É’¤*asua ¦±8ªZ\dŽ^©Â\†Ö¸©wa”I¶Ô†BV³-duÊs×WË©Hpï6q6×­B‰ZÂÒµ~Ò9Š/vŸ°w³ï¹k›Ç\¥üûºHщN+e¹T"R¥$®¾2€@û( -3ØÖlw YbUl(j!‹\sÓdo J÷ÛdûÅðï³7ÈãLŠ–f¥lÄ‚Å™zÁO²‡þ–»ß4`eÞ,äIõÓC&íxW_#,‚û`Ìîx ‚½ F=Îgw¤ ]©²Ê5>œð¦0Å+nQ|d\LAš>ggÃÓ‚=³œ¥œ^\Lˆh²Úfá*Tq›Ue*<®{U†_Tæ“įâ.@#œÅ¬·ý[ô¤„ÔFØ©§Æië*‘‚ˆR"¦«ÒuÝA^ÓüFSí©*÷Z}íÍE°uÝÎo)®¾´ ¦ÁƒÐ°ÑzÕ˜^Ã&q¬ëîÉ,êhø9V”í
+ã»…A6TôáE‹pH‡ô9P$Õ+Ò"ÉrF‘‘ï ù¯ýŠO1ñ[Ÿ«wÿ
+endstream
+endobj
+1414 0 obj <<
+/Type /Page
+/Contents 1415 0 R
+/Resources 1413 0 R
+/MediaBox [0 0 612 792]
+/Parent 1390 0 R
+>> endobj
+1416 0 obj <<
+/D [1414 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1417 0 obj <<
+/D [1414 0 R /XYZ 153.694 667.198 null]
+>> endobj
+1418 0 obj <<
+/D [1414 0 R /XYZ 153.694 651.321 null]
+>> endobj
+1419 0 obj <<
+/D [1414 0 R /XYZ 153.694 631.688 null]
+>> endobj
+1420 0 obj <<
+/D [1414 0 R /XYZ 153.694 612.886 null]
+>> endobj
+1421 0 obj <<
+/D [1414 0 R /XYZ 153.694 593.53 null]
+>> endobj
+1422 0 obj <<
+/D [1414 0 R /XYZ 153.694 564.156 null]
+>> endobj
+1423 0 obj <<
+/D [1414 0 R /XYZ 153.694 530.908 null]
+>> endobj
+1424 0 obj <<
+/D [1414 0 R /XYZ 153.694 499.043 null]
+>> endobj
+1425 0 obj <<
+/D [1414 0 R /XYZ 153.694 470.222 null]
+>> endobj
+1426 0 obj <<
+/D [1414 0 R /XYZ 153.694 436.974 null]
+>> endobj
+1427 0 obj <<
+/D [1414 0 R /XYZ 153.694 417.341 null]
+>> endobj
+1428 0 obj <<
+/D [1414 0 R /XYZ 153.694 388.244 null]
+>> endobj
+1429 0 obj <<
+/D [1414 0 R /XYZ 153.694 368.888 null]
+>> endobj
+1430 0 obj <<
+/D [1414 0 R /XYZ 153.694 349.532 null]
+>> endobj
+1431 0 obj <<
+/D [1414 0 R /XYZ 153.694 328.239 null]
+>> endobj
+1432 0 obj <<
+/D [1414 0 R /XYZ 153.694 308.606 null]
+>> endobj
+1433 0 obj <<
+/D [1414 0 R /XYZ 153.694 277.572 null]
+>> endobj
+1434 0 obj <<
+/D [1414 0 R /XYZ 153.694 260.153 null]
+>> endobj
+1435 0 obj <<
+/D [1414 0 R /XYZ 153.694 216.887 null]
+>> endobj
+1436 0 obj <<
+/D [1414 0 R /XYZ 153.694 197.531 null]
+>> endobj
+1437 0 obj <<
+/D [1414 0 R /XYZ 153.694 175.961 null]
+>> endobj
+1438 0 obj <<
+/D [1414 0 R /XYZ 153.694 144.926 null]
+>> endobj
+1413 0 obj <<
+/Font << /F8 596 0 R /F31 600 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1441 0 obj <<
+/Length 1567
+/Filter /FlateDecode
+>>
+stream
+xÚ­XmsÚ8þÞ_Á—NM»¶Áò-é‘®i3Wz×N{3¶lÉ‘ä¤\¯ÿýV–dÌKLîæ2lË«Ýgß-ø›ŽßyóÌß¹žÏŸ½ºuÆÞx;ó´ }o4w†Ñ‰ö£Î<é|uNú^÷Ïù¬ÞÕùêF¾ï¼þpyÕõ³îhà̧çÓwÓù—®;}çéü-ÜcçêÝÙô½^œO>Ÿ*=¯.úAÃdè^ôV¦^j&¤È; Gö½Q6FÞ8­
+)~¨Û”³üGŽyF¨—/ÄÏÏnîÂcä;KŒ’^­ý|ÔP¥¶X®Å-+¹Vüäm7˜ý‡]Å’ÉãÛF»Ûš®KD²¦w?ŸGÔ2´î=?ÕõpVÊ%ãî#®4!©;ÁrSÕ”QÊ‚&ˆ›z"Tbž¢·™¡HÖvÞ#¹ SƒÌØ*Þ5Jr÷‘×7em6d̶™Ì½©m~²êÕj‰n°mœ7™U®€Ø X®‹%„Q½
+¯¿¯y­øK}*,€BW†]€M·M¾ØŽ.2 *“«œQÍ»•¬\­ésCôçÄó¹œHw7Ôþ {le+¦EÍš»Àƒ$–n^C‹í®Wàƒñ¸(ðÛ!œFÏæ¤Í!ËVU°Ù¥$s7$?5ó]Rë%F/Î ¹6T$ë%Ì)·‚³¤Œq-gˆ¶äœ•4!p¢ÙÌ%eÙ¨Y*<˜Yp¯°´ÐÊõV}Y:*8AÝ»»Ú·9‘vŒ®»p©+ë¡û®d7Òt}]©ê½0àyÇ8
+¾\pcœ@Ý
+7^¢Šª¶³æ±Wzv‹~º-wÏ {àLé9c«ÖSIEåû¡ ØL“hihø%ÿ—?íî@9ªz9æÌ$ΰ»
+endstream
+endobj
+1440 0 obj <<
+/Type /Page
+/Contents 1441 0 R
+/Resources 1439 0 R
+/MediaBox [0 0 612 792]
+/Parent 1390 0 R
+>> endobj
+1442 0 obj <<
+/D [1440 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1443 0 obj <<
+/D [1440 0 R /XYZ 153.694 667.198 null]
+>> endobj
+1439 0 obj <<
+/Font << /F8 596 0 R /F31 600 0 R /F28 597 0 R /F35 743 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1446 0 obj <<
+/Length 1589
+/Filter /FlateDecode
+>>
+stream
+xÚ•XmoÛ6þÞ_a(’
+\r¡ô&Q¬‡”Ü›QÊù½<þgõ ƒµx9_vŒƒ1m%"L‚J΢ ç¯àb‹¬˜þÒµ·² ÙÐÏÊ*¥Dn°hÁ9kÃÙq¥…sý•Ójë¶Bs=BRÿÿñm2KÒBÿ€•ÏßÀ«¶ðoÚóæD²t^>ñJ0D=ðµÜÎ’fÂtЧe”ñmï–ˆ2Ñ„[Ôv+=cIJ yû^®£‰sõ'£Oz$²¹*ÑÚxËi'seQ$•3xk :KÌLRÒÊ<I1Ƹ@Ì
+Q’5"à©CÁk`Øæí©™dŒ´"ø±ûú4=J,Ú—-’9ºsKX@™,‰dU–5ûâ óæ
+¿´©·G_cÕ8/\߀*¸bÉÃáÃœçKH±kýÜ÷·‡]þe¢&ý褷té}ÛsPwSzö¸%6u{d=‘i³,£Un@¼=¿vòàuÜãfL±²?±Êâ°ùS?·]?О“ ÑàyÉ9‰(a÷c8Ûï9iDͦÜvîÌÊ5· ‘Ÿ¡ Õésú áVÙô‚¤Yà+…­% ÔÌÜãܼ»kdm\îåa|Øî“QÊw¶yò:h%,}‡:9œ§O^à;‚åÙî6Mql,Ôܵ·dŽM…±­d-BrèªÒûÖMᢹ¤X=`[KRʳ𥮠,‚Æ<%)@î´Âõ¢¯/q™¼ðY¾#4©ªï6;i*ðŽ 2›®2n¢,ãŽyÕæNçÈÎ;p.ƒÇ¥^ëj­Ée;²²WߺæÊ0ŸØc6˜Â}‡ó 
+Sg:THLfkÖdÛànn¦Ña¹ÍDÞˆQ°ÎöFÅb~Qaƒá
+òèyùòùªçr©§5Ÿir\ Š*{"Ý¢ÃAM ewî>ãÖuX]r½“É
+endstream
+endobj
+1445 0 obj <<
+/Type /Page
+/Contents 1446 0 R
+/Resources 1444 0 R
+/MediaBox [0 0 612 792]
+/Parent 1390 0 R
+>> endobj
+1447 0 obj <<
+/D [1445 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1444 0 obj <<
+/Font << /F35 743 0 R /F8 596 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1451 0 obj <<
+/Length 2158
+/Filter /FlateDecode
+>>
+stream
+xÚY[Û¶~ϯ0Ž ¬Yñ¢Û9(à´hŠ^N$Šƒ¦´E¯ÕÈ’!ÑÙ‹ýïg†CÉ–-gwû²¢Éásûf†Nî&áäÇW¡ÿ~·xõÍ[MR–űš,ÖIgjG °²È'¯?r©L•/µ]mÖEi¦-~3²,Ê<N~ó6dÀLÄŽ™b™R“™
+B8KCw‡=p蘣&àžòÂM“bƉA^œB{𠧤#§ÉD28¦ØnM^hëBá¾)hprêÃÒ#‚üð%È'4¥F€¡B;ÙÔtÀôHmimU“Í›ºlií褈ØmëÜIÑüøu:FJ@{k¾¨g¹ý–dxÎàRª44ÞhÏÜ{Xsð¬œïxÃŽÄÙÌ¿ÿý·Åûß½”_q–*Ñ©œJ‰8Xl0ZqÔiàð/?˜jhôÉaí~ív¢³DoJŠ_W¨´àL™Šzò[Äì,¸ß+¼Â†ÎiMóÙ믣»/~’€ÖšÖ'K@7©˜PÉPN•û-þõ±Ú<ßã³1_ÒTu7ï”=êàžôÌÃU8ÂU
+(høõ¹²P,QéЕ?ô(IP¦q0A?¦Ǻ±îA fʽG?eQß5z·9aÕ’–žÁÇ0
+ Ãà‡Ï³0ÇÑŠ©pe®ô$z¹„ À`ÍÇ@«çþl»(þ¤ P¬'GÍäwž›IŒ’0yL#·àßÞ„òæàȺñÍíNß™öÛ~sk [7‡‰£ ®çOJùøyÔ äùnLž°—§‡?-ÎÑhÑÓâ¼@šøÉÐ||AH&O&Ççæ“w¥^™®q¸ÄI‰…Ô •u•ë%ÿªü¬—§ ­}‡D²ñŬÞ)ÊBc¾Àc»œBMKÓu•»4åJԎͦ+ZI*¶±PÌ$“Ø'Åâ3óõzŽ-YWCmBÔç6y|¿R€J°p­Šm@ìSM?œáëã \%
+Ÿ%ïºx¶ ¿RWÅÙÐù®ø/ýNf1UÊ/€ËݾZÙÑãÀ˜âjˆÞ~WkN»Öó}«Âttß®1z»¤^ýr#ć~‘6ÆÇ•¹_–õêÓø®ë§m4øÿÕ=ÉÉvã[®(ÃM×) >
+àW¾u-¹SÿÚÏ̽_µŒªñ¼ýÎÖ3ù¾+¥£(pm T×Å®ôl{ÇÁŸ¡ *w·îsPX›n\Õ Ý•ùŠÆ­Ù«
+d|%P1HÀî˜â=†xé–x–eÿao–ôèY[K|tå™Øvã7ˆ0 ý†?P uEã‚Fb ȹî¼& ‰§LÂ3éqæDz™%Â%=à›-wÏ+8{JŠ`…£ÝI’uÂãáoü«n©‰F6îÑ%ܽKF +ÐO䆉¾¥Ê
+ÇK ûl¥<Ê»¨(šî1¸¹Ã
+endstream
+endobj
+1450 0 obj <<
+/Type /Page
+/Contents 1451 0 R
+/Resources 1449 0 R
+/MediaBox [0 0 612 792]
+/Parent 1390 0 R
+/Annots [ 1448 0 R ]
+>> endobj
+1448 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [457.14 622.421 489.574 633.27]
+/A << /S /GoTo /D (subsubsection.30.3.10) >>
+>> endobj
+1452 0 obj <<
+/D [1450 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1449 0 obj <<
+/Font << /F35 743 0 R /F8 596 0 R /F7 744 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1455 0 obj <<
+/Length 1786
+/Filter /FlateDecode
+>>
+stream
+xÚÍÛŠÛFô=_a
+!ÚO4I#¥PœÒnI m(.}h[ãµXYruÉfköß{Îœ‘Ö—I,Ó<Œç~îWù“›‰?ùù‰oÇæO^\'“”¥qOæ« ‹dG’"šÌ³ÉŸÞW‰ðôÕTáeú½ÏÃÒ®Úµ™„^£—m^•yyCËj³QefoUt©kì³»µ.iÖ´ªní«°'¼E¾(òê¦VÛõUx÷H
+ûÛ„t.uÖÕ–p”Ž(Z‚¤Õ¦¢óØÓ…ZÀ#éUµj s „T°‹Cil»rÙv
+5/Cá­ªš&¿½}÷’fÖ4j74 ¥xéâTÆÌ“}V‘E§Ô¢xZUgÚbÝ£°'qh€¼^ÙSâ©i®¦Ümp¯ÐÏtL_²˜²Š€Zý©uSJæKÑSÔ¬«®
+è&ø}¢ŒCc ‹Ì]m·`í8ktÛmg몺Ý=uè€ .`ñè@2˜ ŠËrKñC<Æ^ øÊe·’ñ8=o·AÊB9Ø­ YàôGï¨Yg"s1
+ÝöNo…6ôëͶ½‹_b ¥¾[ÕòÖ¨
+—¦qšw#S¡P‹± Ò^|d ؼBÉþ
+2R/
+„é6`‘x¯iïñÓIFûFSæÄvAºßW-¨ò…S"}#9þB²ÑõC4QÈ9ôjMEÀ{4d‡¸C±
+-Úc
+ùY
+/³Êt؈Àœ Ò¦%!6opVêô®RŒë]/´xw3+Ç|z¹ í“Ñ(óžå«²Ûì"Ô÷Ô‘ë‡Ý^c1œ‡—sÑ·Dµ„,Õì(†]‚èsãñ«ÝQ½†ÀúXâô‚ qðä§ù“w-=ó
+endstream
+endobj
+1454 0 obj <<
+/Type /Page
+/Contents 1455 0 R
+/Resources 1453 0 R
+/MediaBox [0 0 612 792]
+/Parent 1457 0 R
+>> endobj
+1456 0 obj <<
+/D [1454 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1453 0 obj <<
+/Font << /F8 596 0 R /F28 597 0 R /F7 744 0 R /F35 743 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1460 0 obj <<
+/Length 1427
+/Filter /FlateDecode
+>>
+stream
+xÚ­XKoã6¾çW ‚ÊÀšßbQnÓfw -Z=t{P,: W%zÓ¬‘ÿÞ¡HÅ–c7CÂ!5ÎÌGrÆQpDÁû‹è•ñ‡åÅõ-åAŒ”,X®Œ1Š8 —ˆÀ—eü~”éºÉJ3û{ùó³ôõm($ÂJ2‚@Eä$~ÿå·ÙœÅ4lô?۬ѭ›™¶®oÉ¡dÌ‘¤;²ªçŒ0ÓyêTgåÞDGÜewŽÐåŒÈÐ4ž¡òßgs‡ž¹ÕÆ(¥Ž|ÈÌf “…3©šÔî,˜c"Q¤b 0Rü8V–Õ|…œ2HI['æ)FAŠÂ;)Jeì8‡Ùˆ—‡IõzŸK¼óšsÂÃKütåuDÛéìá "ƒ9l7Ž{ƒñlä–3ÅÂä.©äaµvãMUÎ(vCû2¨Ž•SùçÌ„©§%¶µY¸®·lM5o³/Yyï:{À±ÒIlíâò×Gè\>mË
+áý±+¥Ö©NÝbðئ¼[9ç À*üx’/^º€áp+Üs!ÀœnýÌú$§<¼ÍÊ$ÏgpÖlî$¶¹“¡ßg²2ÙççabüŠ¿P
+ú¼M8ŒrÔ!ɽêv÷´ó$xÑÕJ‹:ÏVY_9ÑK6þ°ÄoxXÔ´PmïÆFë\*š­>V»½½7ˆ›Âo7E&Çm|èöVèôÐí#¶X}‹
+endstream
+endobj
+1459 0 obj <<
+/Type /Page
+/Contents 1460 0 R
+/Resources 1458 0 R
+/MediaBox [0 0 612 792]
+/Parent 1457 0 R
+>> endobj
+1461 0 obj <<
+/D [1459 0 R /XYZ 152.694 705.06 null]
+>> endobj
+558 0 obj <<
+/D [1459 0 R /XYZ 153.694 615.399 null]
+>> endobj
+1462 0 obj <<
+/D [1459 0 R /XYZ 153.694 199.431 null]
+>> endobj
+1458 0 obj <<
+/Font << /F35 743 0 R /F8 596 0 R /F28 597 0 R /F7 744 0 R /F30 599 0 R /F34 1463 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1466 0 obj <<
+/Length 2930
+/Filter /FlateDecode
+>>
+stream
+xÚåZÝ“ã4Ÿ¿"ÅËyªˆ±¾,™—[8Xꨂ½ƒycyðÄJâǶÃ,üõ×­–;£ÌfŠ™âž,ɲÔjõç¯,6‹dñÍUâŸ_Þ\}öVÈ…‰³4•‹›õ‚i§‹Té˜ µ¸)?Eß5×<‹~½æ&²×Ë”¥Q¾îmKÍ}Û\/áÍÊv4û¾lêîSèuÍõÏ7ßÂ&j²‰Œ3ÃK–Ä™Êh“÷LÈUeóvŸo¬ÿdJ—’±Jíf×M½4@UYãÓDݪÙRˆãÍ×X,ýg´•¡{<Î=Ç“ÞT‡®#d_/…`¡äÝg¦FEŠè8ÁâÈ|.v‡Üoa5!y´¾^²¨©®YT5¸É}YoèMo»[¹<lï`¥å…‡<s,NûïpÉCÕ—ûÊÒ&ûÖî[¸@÷Û®šÝ.¯ <™Ö7ÈÄ°A2_ûd™m³³NŒ–F‹g¸=Åx¤>¥µ™ ÐôvÛ§I囼¬;×aÑéúÍËfÛÚ5Íií¯½ýpî®îªC±±ŽùIt¿-W¸È–ºyk©átÀ5¬-l1’5Y§nHÔωö3Êtp¦Ñ™g@íÛ¼Æ K•$IM•
+KLô®øîó¿Ê2–…¿þûmî…¬ EÄűÛoËŽº³yýO$5»X7:8ä Ý>_!ÑÔ[7NršnÛ:ç^ˆbbä½JfBë Í¡7!íYvO‡ª [£mèé{¤‰îA$g7µóÄØ/3hž­}•w=jé›ý¡¯ò[[¬¾‘±l°úŸƒD%©3 $YûD{鸛f±6z~‰s£)AýÀY°h°›’qS(WÃæsPKš}¢žè¦ÜåNÜŽƒ›"é9ã’R©2Z‰ §È–”YÝìmÝÔ!ª…ŽSð‹GóL‘`ð,}\0p&
+iâ’óX39??ÉLè /o{‚daOawR}×ÿö¦»pP'qšd2 ŒqžÌµS'Œ¨8MOD9ˆÂ
+=l¢Àx˜ô`;ÃDÖEMyUþž“,¹qBαu [×åæÐÚ®ÎwAÀc‘¤W_H^&YBªc>ʉç€?2Ï8Ù7p[ëË!—>¿­Îž|ŽÖú…Ï8: q&÷ƒ«i•Q^UØ@¼À¹7´ Ø]7m(Šgq&ÆS°dr¯½ffŒõѥザã†ÎÉ;Ú ù'AîŽn¢8T³ &_1©6òlpõ|c+ŽéWàÿ[q,û8Ç”‘Ñ.wZù¾‹Ûþv¤#mOØìâHk=Å÷öÄø­ÖÉ »ìé!3þñC¢ÿkínÏâ·Åa_Aêáð­äÓèQ““ž fXl˜Y(HÒ‘*
+Q0N ‚ª9Vá‰7ëªÉû.œ¶ò4{Û~e¡1K½×fÚ'RvÙÇ”"ïºrSïì€ÕºÁEËeu¹Óú¢ÿÒnÊú«fu€ÅBª¦M,̨öåÕÆ(uæöSM íé7súQûìªìÈÓbÜO§Ò Ûs3»“ 1Dâ4.Þ¹,Lü‰Ñë|&™ÇÛÆÃL-€9ÛÖúf‰U *‚=„‘\ÒZ¶MýH>O Ƽ”±”ûÝMd™~ H8Ö‡¼ä5„'{(<žoËë
+8#®$4ó(ÂCÂrŸg@?;Ád»[B& \ÝTÍ-7„®x˜¥¶=¼‚£1Lâô‹UÝ={mÒ¨Íë;ôÆ<ú®ì{[ÝæTyA8Ã×ùlu=ˆrA3Ëú#†Ëo°C `ÕT—€°ŒAÚŠÂzã@˜ŒGwÎß´µ­¨¿jvC:MÏuQ‡Tqk)¦féͺ¡ÒøÝ *ð˜±ÑKtÛæP>CK’ؤ<€w£ ôP&uf¢o‹ø8`š%Ñ ‰**¸óþ;”Æoó©·ñ=ñÀ Žpuÿ•·UÙUö]hÍÖd¦J;æc&+ïiÄ£4qh…ïcŸ"úÀ£m3J½%®õoüR<ªœ9hú)Aà¶#›À• '®‚ÅJŒ—ñ˜<eÓhÔ–ˆŸâå`£µ¿ÊÖÒ=Bä*õ)C˜¦I<ˆÓÞ]ƒæms@~¸šã—¶êi
+ÒÀ°îÐ…ñh_ð`Q]ضsèÁKÚöY ů»š—Ú•LýÑ•TTïivûÊ~ø„ÞNJoûÔÙÓ$Z· …6HGª¢û­mý«²§ç*G€ ʨ/Ø™”¶,
+W
+9URÄü“¯o®þê\ô
+endstream
+endobj
+1465 0 obj <<
+/Type /Page
+/Contents 1466 0 R
+/Resources 1464 0 R
+/MediaBox [0 0 612 792]
+/Parent 1457 0 R
+>> endobj
+1467 0 obj <<
+/D [1465 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1464 0 obj <<
+/Font << /F34 1463 0 R /F35 743 0 R /F8 596 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1470 0 obj <<
+/Length 2830
+/Filter /FlateDecode
+>>
+stream
+xÚÕZß“Û¶~÷_¡É/c1ñ“ÎËÙcÇã¦M2ÉM§¦…“УH IY¾þõÝ@Š’(.gŸÓ—#€£
+Ó\ýûæ/ð36ø1Sætš²,ª²¸Ç‰Ì'“oZã‡í­êõgšL‰9£“)IâŒg~Šu]ÁŠ“)ÅWSJÉ™Gúð+¾)•Š˜ Ò •2%,Îó;Ìä@)Íõº6N5)%!Ñ[skjl&ÑÜ䶱Uéÿ±)¯Rµ¶ÛÀ˜Šp¯Û7faË·U¾Y™ÑMHS¥ºM´vå){H%¨ Êƶ’Ñ~1ª‹Ö¶…Yë…Ù‡ 1ÉØ@R’è·Vç(õÝÈBTÅ,é7î!xRÕSÅbÁÕ¾‚t½h@ ¢¢ßÂ7W$j–¾_ÛÅò*Í¢Öwu;:¼‚ l Ê”GYö`Ô•®ëj;²S*ÝFwz ŒF¯qÕŸC§6«
+ûññcóͺ°9˜D (2¶0ùÑvšeµýñÝ?»n¶—àWüÉl±V¼nF¹’I¨ŠÈ¨…5Žvæ<J©Wca2N$ÚUÍçfî›Eu5ð亰ÿÕ~“8\ÝŽª&Iš[wi'v
+îaOÕbOÕ»ÃHaÄÓÄ…@ø´%Æ?®¹ v\¤ã†0Ò9T¼Úc¹:x-‡@‚¤_@ÅgCF5°à|WÅfU^;ˉ«Y,)¦,”F  ;C›wç F(»Ì¨b¥iÔI?E–¥_Ê•Á.À½<&ˆ†#-[H0ZS_ëYÓÖ:‡”c4A'RS8ö^3Þk$)èë mß Ê8ºº”úˆ ;z>÷µ®›;»ö¶
+ÏåhˆÙm1NÙ³fw™¸T«[;7­ùԞ—ËKø0oã,­=BÁ¤Ó]BBïŽ`ŽÉ¢Á¤&yªÜPK¨
+2×ÎÂÚm5VÎâ1Ýq(@½wR`˹½=ëJb*Ó?‰u õ¨â"ÖºníÂÇ%P€Ô¸‹Î%ã!:ï1€A¸Î¹x>{` oþhU\^|& $I* “¡.`Í¡:ÆjÎ_Q®hÖ×å»çQq^ÄJ² §Òqè@?$“¦/F7Q9(à@_&À·ÛŠ
+ŒJ”‹¥|ºÒkõuåê8Ô× FÓÜ]ñ@dÄDšºÀŸ¡x
+yÃkWa–ÆÊR‹™
+ö–Bë;…mZwe1iý˜-§'ë¡óPe2st6*ýŠ€;ÈLï+3Á4J^êÖz‹÷ƒo.
+ŸuAšbÿ¯9x¨AÑå
+U¹€ð +Œ´µ],œ é²2×X B£màŒ¾²¯ï³Ïd€ö7ù(ÀÖ­Ñm¨DbÉ¿œûaWY†«,™æÕI‹ªVë]•Ìqz±¼OY°T=~•âÖcŠEº®u(²aw­]fxwÅe<‚¡‘oõ“¯¤ûwrS†f­¶ÆT0€qŽÕÜ¢ù£f]:%h´Â%7Ek§ãQYájñùúà¾Èi]+Ξg³}aõèã hÒã á¼yï[šE¯Ñ`‘±£='2ªzNÜeÐôðÊÎó$¸_Ï“ yr Uú$} ó?.NjøuÈ™oÔÑ7 €A)õ3}æ F¢¸‡ØáæR°Ç‡ÅÞÎì]Ýë0È?ˆK¼çÅâé2ÜyÏëǵ–µ‰x
+L/ø`êà6u1VT1xËü<I¢]éûòÆ®+:'d@Þn4ø°)•:¸€_lœMirÌÙ4³±åoÝÄÿg»j›¯Ø‡‚ì„@ÙÊìøËðóª.ûëS¼ÍµÎdàO÷Y’{ù3g{:R.<Õ c ìOCîçYý ’¶àIGÚ¾ãdÆÆÊ–®òÍ™@ÿ'#F çM!"”uJ£Y4ÏÐnLÊ¢°î£¦ÆåºáR‡OÅ\0ŸB®ËÜ…Æ\>v†¼Mã' ŠDÿÙ4­,ì]ÿ 6ãÄ¿¬êæ{,¢$Q^]û²
+÷m^¥iLò¨i}ÜâfÅ»/v¨>UõÜÔ߇KS¼óeóàÊküT"
+ù½;ahõG|’L=“âyüª‚ì—†¿ûAM%©ðU›4¦ŒôNßm˜P±÷“w7/þ’„
+endstream
+endobj
+1469 0 obj <<
+/Type /Page
+/Contents 1470 0 R
+/Resources 1468 0 R
+/MediaBox [0 0 612 792]
+/Parent 1457 0 R
+>> endobj
+1471 0 obj <<
+/D [1469 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1468 0 obj <<
+/Font << /F35 743 0 R /F34 1463 0 R /F8 596 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1474 0 obj <<
+/Length 2872
+/Filter /FlateDecode
+>>
+stream
+xÚåZK“Û¸¾ûW¨|¢ª,,ž蓼[kצR›­dªrÈæÀ¡¨c‰Tñá±þýv EJàh&¯9áEDãë¯ûD ºøô†úòÇ»7?|raHÇrq·]0%HœÈE¬4áB-î6‹E’ÐíòßwY0I)+Æ¥Æ ~Ê˼N÷ï—+EEô×´i]í¾{p•ß)“_ó2º_®¸‰òmUçn´ÎWÓWS’¨Ä½zŸ§MN–+#e…Ì|ÒzªxÅ'c£"e?uÅbŒñfHÕ»¶Rri¥XÇÑC]l\-[‚9viù€ŽǢݹڱkv³¦IKx<:‚A“¨‚B'É·2Obx¤Þá„"bL:+ÀW>ÅÂß»²,JØwÓh—§›¼n\#Ý?.á;S\î û4üXáÀÕ¿o´Ê󈿩VM±ÉaÍ&Ö*†mGQ#GY…vùw&ä}qßäY[T¥ÿÕؽ#Ú€ëÙ§ß#²µÖ&`À kl#â©u,@,<Ä †ª×3‰Iì»x‰ŽÍúXçǺ(Ûb"‚'ñ=ØЃt¿ò˜cDIáÍàA7–5Gã¬À²åFKõHbŒš—™H yƒä38 Q*ÚáG܆åðYuoÝHѸ²¬°”ѾDÔó,Y¥v=21Ñ—"Å
+@iŸ6ë«ŽÆ÷èk:êšÜ=Ú÷Ñé«`ô˜føaŸ—
+žyÈ›6móC^âHëm[6-l‘û*ØÌ‹ú¶\ür
+^Ì¢žÃŒ÷*F„¾à0IX
+í´ 3è,%NÞòºÈÒ½ëÊ
+ØoÀLƒ˜gó¦FˆåKX¡·V› ÑBÌK&JèÄB¶c°6À=7Ä„+6å†ÞP±r†‚Òg ®1
+ê`([:ÓÈXzÓ¬Bö›µŠ¸…FxFE1*
+0˜_ubWv°qö$l@)pÂx2]öÙ»u =CÜ€wXÜ@·Ç Ô,Ož]
+»²"£nž^‘ ­óº„uu+¯7Sø`‡TÌÒŽÂÞü”–`Ll'à¾,­£ÍÅ­ƒÕ
+ìÙˆW òŠ}bÄ!ø r–ŽCfdYœÔ±
+’nÏ*v #VÑÒ¼®Ú»µ{1W°h$q·nlÿd³x¬K@·¯dM™ò¹ÖùˆŠðý”c†Úäñ¶®®o½©ZHÏ\ÃsÕø÷í×Î?fÍGw8·I‚û`íukp(»2èB˜v·ÎÉ,i#ÏÅ -SX,»!e)îöŸ»´uc6σ ‡ÍÒ-mÄÅ-´)yÚ'ín+7¸px$ΚLiåµ'Ï¢„|Ojc_q_¤‚Ÿ³>T F7ÍzŸ·m^Ó£ ÑES¿@
+Dû€Áà3bz1Zki<¾ñ¿¿±v°ÎÓýÆN®‰[ƒ%b&¸5Û´Û#¹ûn!D[c|Þ
+Þ'¤ˆ£cí •åMc%vV³ç
+ïL€Ç½ÄfUî­²0ûrpø…ÚNïÉðLM˜aaX^ ¿&‹@lרhm­(Ihgíg%p/…=ƒm»ýþäYìT_d6×W7³çœ1iŸm™ví®ªOyZ¯›Ç
+«(½gbÝÉ…žr°ÇÛʘk"ù±ø{NçÙHÈq¬šˆ(H¿+&â ˜¢´O˜V %†‹ eÜ󔤎§lÍþÊ~¡XÒlLÖH/³xà%a¤ç%a„å%ÎtÄD0n™Èx&‚vÏDPÝœfB”£'Ók¤?Ið™Û'É€Ù”ì±Ø¸£ðêÜЋ³Û3Ÿ OÖŸÒd”º³Xj¢}ú‡5—þµ9þGÓT¤O ½D’Â¥…§ix±:—! d’²ˆ%/±f[eëõ¶*Ûç¡!.Ž ´ŽxÐè“:¬÷IkðÅ‹À¤¤ÖÔ&ñRûPÃQkõ‡'œ>1^ñ€g¢t=8êEOȳ¬’,j'‰\¶·q#VACy°$l唉z}±“pyyë¸oöSvÿôQõdë×éñ˜—›âkV¶hš4„“°á„³c}ØlB ÓtAÀ¼ò5¢÷³YÏß…%ŠH3 í‹XÞàá$ f—\ÖûÂcRÎÁ]×ûlë »64aè\ÔÎççZo‹‡²;¬­k
+ù7ã·Öm7nÁÞ©8°àcZ7ùÚÞý¬½fZ?A5ŽËŒÂj«½Üé®1 y/˜qÓÕà¯×ʼny<³Ái*S¡ÜkåßpuËÀ70öyãfçBy†J,0—CèF\
+ð’ftõñÍ‚¢½P¼>ƒ6õ|+ ÉkÏ¿Ð÷Ëá¸ßÌAä.ïœ;xmwuÕ=ì–‚LÏEÀ‡ËˆBªÅ¯A¼oº,t¿r/¸HbÜE¡å='ñ/S4NxÂÇÓöK˜Q7’p™<á@3'xN£8¿ð› £j)1·²G¡þâÕö•99ÖZ?
+ß×ÎÈß
+dÏî`ñû—O,âщ»qûÅí†AE;fx×ýôþ˜óþ@œÎNëô¾È°ӊ¦Çùž`gtã Ex•ÿá$š¼íŽk7qšP€|RÏÄùM›rŸHhC„ŒŸvª
+ ÙÍPÂùD´ÛuûXá?wBa<ŒKø‡C
+N²A¹+B¡'?ùùîÍ+g"H
+endstream
+endobj
+1473 0 obj <<
+/Type /Page
+/Contents 1474 0 R
+/Resources 1472 0 R
+/MediaBox [0 0 612 792]
+/Parent 1457 0 R
+>> endobj
+1475 0 obj <<
+/D [1473 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1472 0 obj <<
+/Font << /F34 1463 0 R /F35 743 0 R /F8 596 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1478 0 obj <<
+/Length 2588
+/Filter /FlateDecode
+>>
+stream
+xÚåZ[Û¸~ϯð£ˆYñNåÉ“b[´(Ð  lú Û´G,¹’œdö×÷’²%›šK:³;Û}±HJ–Èïœó ™Î¶³töç7i¸¾¿yó‡?q13$SJÌn63ª Q3%5a\ÎnÖ³Ÿ’O©L¯¯X–üZôjÎYšì›G¾këê}WÔ•o—uµ]˲¨·ó«Ýüu&HfØlNS’ÉÌ¿´É÷·ø†»«¹Ò&!ðON¾°gxÒè,‘o¡+xÂR7Áy?CJR*Η Ïš4M„”
+­®ö×Ü_Ê¢í¦ÿµèn
+Öùù
+©z‹LLiÒÙoÝ*o]%EëG«Ú³l‹Ý¾¼ó7òÉèÆþçPxO
+íiá- |t½*lw£à!©MÀÀø÷ Ç_~Š* 9ñà·þ]Àw–±o…7Œðö> Þ€Éã±°Öj âÓô—'¦ˆ>‚»M¤<D{ØòîÑ {t}ëC‚*tÑ]¾›Ò/b"ÐjB•"{Ûž|™û2&†^’‹T&×à#Ñ?KM§Ý2D6DP:–ô÷:gþ/®™
+?{°mŽÚÀSä+w…‰af’ í†OviÐ.[?ÚÕ“IËÖ‚ødu%EÏx$÷Ñî|n†k³hü,8Ã;Ô¹ ¸uÊ6p0XklÕu¹>=« ö%Ÿh›%|:!ûGÈ0V’I…k8ìp¥Ác5Î9ÂMyiƒDuRœÀ‰S„Ȇqê7$(Nµ‹¼Õ¥j«Œ!ûçãÌóa&wbôïΛ|Y¬bÎ3%*å@ÉØÜ=È–xˆ6$‘Ù™O¼¹…½4#Zhv±`"×,;ήgî¹
+#yèh,àغî|ó}‚99LUAn!^$u Ê_ž^Õ»=…ËÒõÓ½aëo+Æg’d´ –ÌgŒ¤‚…¤/(‡Ç–ÁS7n’PšÁTHÆýðƒáÓè‡Cqfà%â<<”ik­'pú- j«ÖÙ5ËRïÉݽýç­ýÏžýBùBfü…ùÖ˜ôÄOl’ŸþÙÚ‰€'c*éûÅm]ŽÀ/ž ³ &(8²¢+|jêúàÐHÈ‚aZ¿ÎD.Â=œY3g…7À(/»|³)  À %žx“ëwì¥æ¢X‰c;H¢]µÅ#”fΑ`jÕú¹æÎÆE²òé$6»bŠ5EÕv>À€áP(JÏë@Îq_àÛ =Èa„Ú
+½cˆ)Ëþ_0–O¡†M] Ëb‡YQB³¡*Ê.`Ʊ“*Êf0ñ.ð„P„Iz¾Mã„À”ñ\ מ‹UÖs1 ž¸:Ž‹áº¶ÑàuàÛ|5ˆ&÷†ÐKªŸŽ+Íž¤»u³² §¸_ù‚yl  ¢ÉsÆ
+¸ƒ†œ=ç#TÙìÓlê*ÔÑ}•dC±<euÚCzêÓ)ÖÌe–tÜ{Ö©ì=§*yENëÛaÿqûÏ0’ûîqÿ9ý ï=ûò¤…!m?—JRQ&ÂC©`QäX:š §Ã­ fnêååb~Ûr¡ƒB¬KâØS¦¯}O9l(³_cC™ &Cå½.8 ¢2#ͤåDâ…ñr¤¥ý™ßaÅ Ã<´”…í qÿv}•ÛAÙ/µ4
+endstream
+endobj
+1477 0 obj <<
+/Type /Page
+/Contents 1478 0 R
+/Resources 1476 0 R
+/MediaBox [0 0 612 792]
+/Parent 1457 0 R
+>> endobj
+1479 0 obj <<
+/D [1477 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1476 0 obj <<
+/Font << /F34 1463 0 R /F35 743 0 R /F23 1480 0 R /F8 596 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1483 0 obj <<
+/Length 2569
+/Filter /FlateDecode
+>>
+stream
+xÚíZ]oã6}Ÿ_áG³ü¿ú”ÙíNÅ º(l}ÐØ´-D–\I™$ÿ¾÷’”,ÙrœdšiwÑ‹¤d‘<¼<÷ÜKÑÙfFg?¾¡ñú·ë7ß½rfˆU*]¯gL¢„™)© ‡;׫Ù’OL¤›¬(ÜÃUs7ÿïõ?áOéàO©&T x£úûù–ü½Èš‹4©öm^•¡9¼_2[N·³£ÄJþݸ¶‰]ŒÆeåi×h_»}—mÓž•DÖý¥­æ ‘Šd›/à2á|¢'"*Åa1BYzè±på¦Ý.·nys¦GJµRÅ“OTÒwsn“Ÿ ÄBÛ.»™s“¸Pƒ)/ R¥ä6/7€#W&ÉÚp]h¹²pwçBc^6­ËV¡R­Ãuå›éøkWt›€H»³Äíb%ÂTd­«É|!™Nà"`åÎ_ø ¦I¸˜Ä5%6MOaý˜Ý¸Õ«—¬Ì)ªJKùUË’!~Ùq½™Kdn´î¾í^€â¤Íxò9@—r•”þû+:iòݾx7²p©Ý¯·yíV¡¶Mâé{—bt±×xRp0
+ÿØp6©š¼\5`‚Pj¸µ==„³[úµœá“ˆºóUÌ –Y›ÁÿºÐˆO­HÐ4`î³dY·;/½ÓWvÀ~uÔsV§Î6·
+#<³<qËSõW÷=ÙU^æí¶ªn&€5tN°V³`­¦X´¹
+<÷wͧøYC@® ðS&’
+pƒL€©Ô8‘_hì Ê«Ð~I'²”²gh\œU›o¶­+‹¼tÍ·Øiß.tEܾñNáÚn‹4 ªb„Y9Œ!Øi>
+%‡U1–%LøoŸîî®3+ˆ¿,Á1ƒåûúÑ•®Î
+ŒÀäl‡œEä ]wœàŸé€ë—k¤2Ïãf"nêOˆÛøIed"câ‚
+ M’÷ö»ºd¿l`¿ë•iU<Å~¡eòƒû;
+Ÿ˜C_ l·1HۨΖȃF~Íé±xÔýl]We»ËZð÷WÝ(0ù<±ÂŒi¢ÌàÈ#n@î½áØÄ{ý#"s
+ìW®ÊªuM^xöaYN¬ªGÍÙÈý˜ ¼£âh‡IN°ð›¼»m+XÌ| áœßYxXRo»º]ºGXÝ~a´
+p½DYV»ÏáÌÝÖÅ3>4V_έ0y¤ÍW»¼<ͬ.oþRÇ
+\!߆[RN¬Ù#C…¸í@ÇXy/2¶/Îò GsN”ŧ—(Z’TœPtˆ÷ aÇgÀž¶ý\KÌ––*}åm9°ƒKت¸”³€-V>T¥CD±|ÅœAwë$’ÙWg¯D€O À‘s8)+“#ÓfÈÀXË×ᑦZw‡-Öïߊ—àSîþÔô"ÑïÃÙ°Uüµ`aT§qSñDÛ¸» }Úü-È É#çbÅs."çÚÃ']gÖ¿¬vHØ1¥Þgq!´÷bXªÀ%ŠP,Ý],d-˜×ÕsEêx¡xvŠ‹‰ocOÏØ<)’O£»‚ÊǘƒlB¸ß_WâGh),š6-ó³\Õfˆ52/ Ì ™4·û¨îYR7Ë:ß·áFïäLïɚɖÊxàÐTÁR«ñ¹ c«Ö‹j\p{$kxojŒÙ§á$@t?"اy©`4ÕH› N»ÃÒ…w„nk&È5iídä,­ Íš‚éOÀÚ©µá©¸Wk*q¿„jg Àyµh³ªZ =5‰nØx‰°¡g¬ œMž÷ßØþcO,x€«È¢ç”F˜
+:JÆ~÷ÞÌ,¼†«¸ †üš0æü똰£ÿüãúÍo/7˜L
+endstream
+endobj
+1482 0 obj <<
+/Type /Page
+/Contents 1483 0 R
+/Resources 1481 0 R
+/MediaBox [0 0 612 792]
+/Parent 1485 0 R
+>> endobj
+1484 0 obj <<
+/D [1482 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1481 0 obj <<
+/Font << /F35 743 0 R /F34 1463 0 R /F8 596 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1488 0 obj <<
+/Length 2742
+/Filter /FlateDecode
+>>
+stream
+xÚíZKwã¶ÞϯЮô9B¼dc§mrÒ“49©³êtAIÅZ"yHj<þ÷½
+£ËmÖ4¸ìlΡÌÎæ4%VÚ°^YµyYÜÌyJ“¢ô{ø{6iË0Úîëø¼|ŸR§º'¿fW3aµ"kù¦–‚sOšçâ†ÁzÙÇ›¹…>aN/ü°³Ï´1 O#H}dçT+üR¢˜8"[”­kŠlw²F{d°„5°Bçnß–»¬O
+“W¸Bc” Tên·GUáiP•
+Rš¸P¤ñ½dâ¦à]•ûÅÖE·’-Q „J IÅùçCï
+… Ž
+~g²¼J­ü£:g.Ù|.±Zì– á½bdWì„Y¾Ì3dzõÆÍ&¯¢ÑÂs¸0_ºÕÞ£‹ƒë/1¸Ðç’ŽÉˬ„ek×ÆöËukÊ}[…ϱ¤†N^Ôùµ(0ø•:†( LÀ÷¶¬³ÉKbmˆ¢ƒÊYãÚÛuY¶˜€>_7df+>Äl]bíÌba>·Ë ¯\ÌîŸÀÒ¡ÖõÍ‘æuú[Fšú´(ðÔ¼íÍä+|‹qP×À®Î‚ æÝ%^þáðÎhä>A4®Nòð`³ªæ1¯^¼­ûoqR]5þ÷ ¨½wØ!_|õô‹ð%üE]È‹æŠNF ÒèN±êývòæU)BÇñÃÊ…s`&äð·Шջ&NZØô“N¥‰9³OseøXð ,1*ºK;_Áb
+©1T_ÐqkAØù¾X¹˜RA+†
+ðDŒÈp&Y–ûŽêxa£•RI›·[š‹m4a>O#¨ð™»ÅdèÚ´u¶lÿø·
+é¯`µÀ: MTˆ±é Ðp»Ëݺ8S†V‚€ž~j‰ÜLÑî²}æP*ýò[3ƒˆB1Õýƒ¯ÓÆ À¯DE:xåï÷ïþsþš
+endstream
+endobj
+1487 0 obj <<
+/Type /Page
+/Contents 1488 0 R
+/Resources 1486 0 R
+/MediaBox [0 0 612 792]
+/Parent 1485 0 R
+>> endobj
+1489 0 obj <<
+/D [1487 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1486 0 obj <<
+/Font << /F35 743 0 R /F34 1463 0 R /F8 596 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1492 0 obj <<
+/Length 2729
+/Filter /FlateDecode
+>>
+stream
+xÚíZKs㸾ϯБ®Šâ ääÙ­ÙÍæI%NUª²9Ðd1K‘*’šÿût£AŠ¤)[ÞÉTRs1~|ýuCÙêa•­~|“Åçwwo~ÿƒ+›:­åên·bV¤Êò•V&åB­î¶«&‡î’SÛݬ…ÉýÍšÛÄSgëΘ¬ü»<ÙçÍ¡®ŠúÔ–7ÿºûÓŠ¥ÒÊÕše©SŽVKaª`“_d_x¦³<Q¿£c°L…í®u*µ†ý²4ãñô?g*{‹x“¹4‰2Ævt’7M^=xzÓÕ4XÖù×᪱p3‘Í@ôaᲨ|UÇyc%ÀÖRcÜTlù®ó í6¯p;Ô©»½¿aI|uÌ7øî—e’üÁ·pN­^Œ¶*‰)Èå.@
+õnÑžá#²ÿÈþñè›Æïv#³ÔŠa7E0_°æo<ª”ù±èöÔÚÔå:îÀCŠ©°O‡Š$zŸ—yµ)ª‡è»h29ÁO@¯tFìÜX›pþAêy»½=ä¿ø]ÕùOKg™M¹6#‰3D‚(r‹"‡r"ç˜JNj`Ò°Ê­þ
+ñõ£-ºža¯q=tetâÛã©+ó{_.¨ÂÊÔ6R…Ój
+s8ÐÃEx—k¦*ðŸüæ„&m…!ж`Ê!â®qëv_DŒ?uK¶}lÈ56~{
+˜æ฀l™`ú€z¡Ë/¨ªÍw¾‡õÝ,„À—A4Ø@ÈÆv7‘±I„z•Œ‘‚œ÷¾ioÛ×Ä#ÝTÀ800"ìäÍz!ŽDAE²$™
+d ŸÈ’<u/R%Á°ÙO‹ Wí9n^§§;AÞÔô¡bƒÞ4&M&SŸÏ=ÐöEö¢^ÔY/ÇÆ›¢ê–•¢€¥Úi¨qbª•0¢´ê±Èq`3Q/’¥jWÛ®n0\2žÈ4£Á´ßç¸è‡¢nðKÊéæ-8‡ Ãò„áAËeÚ @³çí¿|\À[¥'ßÕ%‚ŸK>¶Ku¨†njü‰¶{¼`é6µgTÿÚffqo"îí©¶[ q·ÀuûÀ>ßœJÓ#«3ÎY"·ˆs=ÀÎOUT·ÎRafœuÆ0,2 ÉìŒ`À²–Œƒ|˜†
+ò‘šz凧ÿt,‹MÑ-ÀË<öL9ã¥DP=“¾Ri#mYH
+¤2!8 ï-Œ})Ñ™9Sì
+„ÙÖf¿-»J
+Ëì:³kö+Ø5ûÿb×üJRbé‡Å°"MòǼÚ0šd“·èY˜—|óÓäãm<Þ[V›pM,¹³Ô$Øý
+ìÀAzÀÇõñøù_O£
+œÿƒ®[æ+NàüĆ":È‘ÓöÙï'Ø+/²®¹Ú×/@£3ØüœÃ`çíé¹òÅ8½aŽQTç4¦É²†7úÉ]¬;ûê@æ8O]æ®Iify‹Evòl y ¥íÄ4³¤<jâ™\F¢¬x/«+R“Ú³lŸ¿ü6@ûç,²_¬©O¯*m6ÒoèM“Ô *Å_]°dÚÅËrhñoiéu•vüÕ’±âI©ý8-®,–oþ¶j
+˜8¢lü-@è<®/j4 ØÑoÂòM?Ö-ü3²ûÔÿHgTZµ+ó‘ÓÆàÄäp«þI6ùŸwwoþ:8ý
+endstream
+endobj
+1491 0 obj <<
+/Type /Page
+/Contents 1492 0 R
+/Resources 1490 0 R
+/MediaBox [0 0 612 792]
+/Parent 1485 0 R
+>> endobj
+1493 0 obj <<
+/D [1491 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1490 0 obj <<
+/Font << /F34 1463 0 R /F35 743 0 R /F8 596 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1496 0 obj <<
+/Length 1199
+/Filter /FlateDecode
+>>
+stream
+xÚåW_oÛ6ϧУ Ä,ÿ‹Ü“W,-0lh1]u²ÌÄdÉ“ä¤ùö»#©XJ”ÔZ`Åžx<’wÇ»ûÝ‘4¹Ihòö‚ÆñõúâÕ¡C¬Ö2Y_'Ì¢ O´Ê‡•õ6ù#ýÄ„ljW4Õq_¯nÚr»ê\<,þ\ÿ çåø<ã„e¤û“y½›ÆJ–î%£Ä*{ÒÒß5gi¡š(É-d±‚Í mTªP
+*fDq›¨˜*úã‚ÛôÝ%œá6³ÔH`³0‹®Å Oýé2­Û7 nÒ[¿x}›—ÕÒë’Ä‚'7,ë›ÅRI“v‡¼pHfi"vy›=j@ÖuÛìÃ>—(|çÒ©°¿šc[çÕb™I‘æ`ñfÓºÛ2ï˦þa±d\eiÙ‡å]¾QäÇÎmA uÝg¸Cíšc惩@–õœ~‡w—àéͬ±Ö>À3Ñaÿj§14U—A§•³é¾—ò¥ìêîf²J3¬’
+|h´ž&2”!3ŒVéû¶ Ñ^JM¸šª¼-·a ºD@„¯½7=¯ofl·’ÐŒ6TýgÄAЗžÜê{DffLÊYĤÐDr;U) û{ƾIdÍɺզÜló>oŽý*?t3†eŠ¦GÁåšMƒË5ä•1!¸¸ú®®îƒ‰šñØõwmÙûÌ·éoW
+ï‰ã
+"ø#-!:‚Ä“%@O`Hðß±ÿLL¸·ÄóäÁÛ>ûF9=˜4lúþñeUt;ÎàW‚ÖøÿÇÞÐ#XVÍmïçB2BééçP5ø¬¥we¿CJ¦ 8° Ì_Ê®E5œ›hj®ƒ>€qMtâÖaÔê¿®>4­ýRî›Ì>|¥™< ^½1‰Û¹öXœøÀNC´åÁ
+&ùäÌÕúâ¹÷
+endstream
+endobj
+1495 0 obj <<
+/Type /Page
+/Contents 1496 0 R
+/Resources 1494 0 R
+/MediaBox [0 0 612 792]
+/Parent 1485 0 R
+>> endobj
+1497 0 obj <<
+/D [1495 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1494 0 obj <<
+/Font << /F35 743 0 R /F34 1463 0 R /F8 596 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1534 0 obj <<
+/Length 2152
+/Filter /FlateDecode
+>>
+stream
+xÚíZIo7¾ûWÌQb–|äãr
+4]hã[Òƒl!’FZùó}³Ú8#;-z±)®ßÛß#‡' O~¼â[ÿ¿¿¹úîä‰PL* ÉÍC"P2íT¢0
+‘q_ÐÔôÌGù ©CtJ™vAÝ«ki÷ðͯq,9L(](Mé”’^a4¦×ÍA»
+óöÝðíÛ4ϳ›dRš~èlY—8m¿
+gx I³i’á$´`ÄùV4#H<ž-Ç7»tŸåGAÄ‚¾Ç“ªÏoóÏçÄé±®tãÆtºñ aê—"§ª…]¼®lU·ß³éh¶‹MI¦”}Ö[Á<ZÊ7pváß|ÿn˜Í#FK.TquaßXAV
+b
+\el¨±BH‰<y#»ÅTöõàÑOÛòfb±S*ä§Yx÷½¢p½¯«º+öV/q,M”ñ@ÉÖ¨«WäS²1rÏö4OO; ¤­$õÉMW/ Z×rÊ_ä9/£…$.n^阚»» •9RƳqqw³G»* Ý/^IŸpU^µèJM %¹!-Ú2îÌAÊRçGÍ ˆL&Ĺ–§5/8üBoÏcÔ!î¡øÚ=(­WþÙ4¶ƒ‚)±u–—Ϧ“OÏŸkyKnQa™íugý*`ƒR© µ1Ñ
+}®iIÍ(U¤õv|Ó^%r?Ã\”¾O‹ÐòçÉ·T¯Šbõ\ëçš°“Q¡¥ý¨³ñ~ÊQ›¹Š‡>!BË#VÂDw"g\Î0v dE§¡UR„>ç[È¿ª’þØèéRhšó0p« R·<]hâ¼F ÍyäWtGhÅËçäæ'è
+endstream
+endobj
+1533 0 obj <<
+/Type /Page
+/Contents 1534 0 R
+/Resources 1532 0 R
+/MediaBox [0 0 612 792]
+/Parent 1485 0 R
+/Annots [ 1498 0 R 1499 0 R 1500 0 R 1501 0 R 1502 0 R 1503 0 R 1504 0 R 1505 0 R 1506 0 R 1507 0 R 1508 0 R 1509 0 R 1510 0 R 1511 0 R 1512 0 R 1513 0 R 1514 0 R 1515 0 R 1516 0 R 1517 0 R 1518 0 R 1519 0 R 1520 0 R 1521 0 R 1522 0 R 1523 0 R 1524 0 R 1525 0 R 1526 0 R 1527 0 R 1528 0 R 1529 0 R 1530 0 R 1531 0 R ]
+>> endobj
+1498 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [270.035 569.99 281.99 583.938]
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+1499 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 569.99 298.041 583.938]
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1500 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 569.99 314.092 583.938]
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+1501 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [276.123 558.035 293.06 571.983]
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+1502 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 558.035 314.092 571.983]
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+1503 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [276.123 546.08 293.06 560.028]
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+1504 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 546.08 314.092 560.028]
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+1505 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [307.118 534.125 314.092 548.073]
+/A << /S /GoTo /D (page.6) >>
+>> endobj
+1506 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [200.85 522.17 212.805 536.117]
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+1507 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [216.901 522.17 228.856 536.117]
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+1508 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [232.952 522.17 244.907 536.117]
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+1509 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [249.003 522.17 260.958 536.117]
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1510 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [265.054 522.17 277.009 536.117]
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1511 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [281.105 522.17 293.06 536.117]
+/A << /S /GoTo /D (page.93) >>
+>> endobj
+1512 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 522.17 314.092 536.117]
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+1513 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 510.215 298.041 524.162]
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+1514 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 510.215 314.092 524.162]
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+1515 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 498.259 314.092 512.207]
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1516 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 390.663 314.092 404.611]
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+1517 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 342.842 314.092 356.79]
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+1518 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 271.111 314.092 285.059]
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+1519 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 247.201 298.041 261.149]
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+1520 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 247.201 314.092 261.149]
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+1521 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [276.123 211.335 293.06 225.283]
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+1522 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 211.335 314.092 225.283]
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+1523 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 175.47 314.092 189.418]
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+1524 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 151.559 314.092 165.507]
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+1525 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 593.901 508.364 607.848]
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+1526 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 306.977 508.364 320.924]
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+1527 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 271.111 508.364 285.059]
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+1528 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 259.156 508.364 273.104]
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+1529 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 223.29 508.364 237.238]
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+1530 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 139.604 508.364 153.552]
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1531 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 115.694 508.364 129.642]
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1535 0 obj <<
+/D [1533 0 R /XYZ 152.694 705.06 null]
+>> endobj
+562 0 obj <<
+/D [1533 0 R /XYZ 153.694 660.155 null]
+>> endobj
+1532 0 obj <<
+/Font << /F30 599 0 R /F31 600 0 R /F28 597 0 R /F8 596 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1556 0 obj <<
+/Length 2134
+/Filter /FlateDecode
+>>
+stream
+xÚÍ[Kã6¾÷¯ÐѤ’ÅçÍ° ìewû°Àd²-?0¶åµÕ3äÏoI–hÉ&å¦ÛræÒ"dIüX¬ÇWUlš,šüöDëë//O?ÿÊMb‰U\%/ó„I ÊŠDIM8Èäe–|ýÁ@Œ§¯ûý6ÝdŸ¾¼üþó¯íw#`~°z˜|zÎ[ÉÍHZýÞ
+PLYÕ̦)÷ÍÖ¼áŸn7Éo^ùùÍöEK:â\²Z*\h-ŠÝ!Û ˆž°]ß&uŽ­ÈÄ&ì [¤6g»by L s ˜æzÄÁɸS-mê!§œú
+jESÝÑ ÄòSø…Ò~¤íU¹Žµ}NmDët’­/Å¡-&Zâ`G}ecÀR¨ÓÐë‰ëOxvà8óaµ¬&÷Tö^Á*)X%{¶š¡–×±ei*µúÇËÓÿžX ž[ L³DRJ‡dºyúü…&3üñ÷„°&ù^=ºI"â‡ëä?Oÿê¡ZÂXb0Ú¸^å‹}º[zLŠ¢a—®¢ßƒŠ^©7ß¼"ö^T– wp|§Wȉdw¤’Ù#È"{ó0& @Ü!…BX$¹QF!®¸tpwâ–Zûœ–£ñmU&u"$'ŠFoU7šPÃñS@,¾WÁ©'*hžÜ6¹_O'Tp¿ðÆ~âÃ(^}ý~N³²FÞoõ´ÞýÞ¥ R)‰ bXŠöÎp[.ú|6°¾ý.Û¦k›¸ac4Ž°!ª¬Ø¿>ŽW0µµÞ”"Äv³oÙvžÇ¤‰¦ à¶IȵKÒ5³Í=n*ו<sF$œeYZ4醖ͻ“/sÄx'¨—Y:‹EÍjëP+‡ZúP×Óê:£,Q+‡šÙÔóÕþPäóÜ—Vôú]*•ËÐêòÎŽ±×ËõB~¿ª>Lò·}vÈŠÁì„1e'×j"–½eFÍ”•M}FSorüÈ%ñž¯‹üÛÜ“ /ÁÑã«^ɯ¤GÐ>ÿ0«4¸ )µ/z¤¯H!ŒêÞ‚X!Þ½¹QDñ3IŠ¯—Dð‘¡öûGYåõýFwŵ¼Ï~+N4ëJâõ°\¬_ÿ¦úÔùÁØ‚‰Ç9‹éF)®„ 0J4Åp®$; U©2]ÙõkøkùåëÒVC‰ªT®Ë»À4¯ïâŽ_¢]DøCS]
+}Ûß›I¾¢ªeWeùÁÆ–l?3 Ök½êv æ².šx“$N‘ã QÝ#Ib–kD{Ýù¶8|_Óå}ré*ÊÞðFÚ8惷LÖ6éþë;êkÃ{ö+õ¬N¹N ³J¦TQ—ÐsU9lC/òÉdíË…™ÄhD¤ R6*Þ­%î_w*¤¾q»F(nD HrëÚ$"´¢bì‘×#µ®GÊ]Tu´+ e¬Œ–Ú$4šo»ÆèVåëûG̺)æzPB‹`Ê—Á:‰Ã¢Õ'´‰ÖÛ[­:¡åQhv=^gé·l“ϲñën—í§éÁcëU[ª³ñ¢d¯\YpÌÆzË
+Íg*ÆŠ]úåÚU$öW+‚©Õ2]¯Û"0:þÑÓŒƒ;kÂ% žà^lÛÅx¾Ï7­8bò&¯V•æa¸FK§"…·¢µã»ö¸<3ĵrµMÛ3CÀ{|ð(ãá¶4ÈSeåYdªÄ¸¸íØ…[jŠ!f;[½]=…¹ \f8…)pNa >l>Òƒ÷Ežµ]›­ê©j£1’ò['ïˆ
+ò2%¡ñJOT‡lZ¬òíãzPâÖÔ; 3ŠÙ¤‹΀ Üg—!PbÄÙ÷K£:mŠ f ,à‹Ú°Æ»}¶Û¯0{õžK‰g8A
+_z…«TÇ'ÁÃÝ „)¢ÑÞÃ@˜!èfc ä¶ÉýBaZ{eõ^u+ƒD£nZÙuC¡ª“;WWÕ­³‡Ùj±,¢).õšL½9¹Wv;4\;¹×&2ÍG$Á–é a˜úm3†W³·RÆÛÖ%áÊœ÷ þH°ñ¼š‡N°ICN< ¨X|¹‹V‡¶Šú.0Ûh’Ugá€3*ÖÔ†ü;T¾Õ|¶Ú<4ódT¸ô…ú™O'óT´ëq:ËfCíî#%Ï‘®w¾9Š¡58ÇÿL_²ÿƶ/o@Ònež)Æû‡ò¨À:f+"M§B’Ú-½èw
+¶¡+@Ù£Å-_6€ø®
+ê­÷çÅ=dû:d
+gÿ†`ËS;Ï‚ÂÈ‚¨FÉ\EÑÊ›8ÔÍPQÝmvªæßl”ü ÿ˜ºAŠÑXý…LÓ;Õ ý]Rª]fþøÖ#Ì]:ýš.p¿½nç<n°hžÜ™g£fRи(Ñž6ä?‡6!íÌÛ­<3aPŸ¡J\Œ€†ñt‹
+endstream
+endobj
+1555 0 obj <<
+/Type /Page
+/Contents 1556 0 R
+/Resources 1554 0 R
+/MediaBox [0 0 612 792]
+/Parent 1485 0 R
+/Annots [ 1536 0 R 1537 0 R 1538 0 R 1539 0 R 1540 0 R 1541 0 R 1542 0 R 1543 0 R 1544 0 R 1545 0 R 1546 0 R 1547 0 R 1548 0 R 1549 0 R 1550 0 R 1551 0 R 1552 0 R 1553 0 R ]
+>> endobj
+1536 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 568.966 314.092 582.914]
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+1537 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 533.101 298.041 547.049]
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+1538 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 533.101 314.092 547.049]
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+1539 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 509.19 298.041 523.138]
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+1540 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 509.19 314.092 523.138]
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+1541 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 485.28 314.092 499.228]
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+1542 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 461.37 298.041 475.318]
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+1543 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 461.37 314.092 475.318]
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+1544 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 437.459 314.092 451.407]
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+1545 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 425.504 314.092 439.452]
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1546 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 305.953 314.092 319.9]
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+1547 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 282.042 314.092 295.99]
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+1548 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 210.311 298.041 224.259]
+/A << /S /GoTo /D (page.94) >>
+>> endobj
+1549 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 210.311 314.092 224.259]
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+1550 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 174.446 314.092 188.393]
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+1551 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [470.395 497.235 487.331 511.183]
+/A << /S /GoTo /D (page.101) >>
+>> endobj
+1552 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 497.235 508.364 511.183]
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+1553 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 473.325 508.364 487.273]
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+1557 0 obj <<
+/D [1555 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1554 0 obj <<
+/Font << /F28 597 0 R /F8 596 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1576 0 obj <<
+/Length 2210
+/Filter /FlateDecode
+>>
+stream
+xÚÍZßoã6~Ï_¡G/аäÃoÆ×â}i›‡¶}ÐÆJê‹-ùl%»Åþó7”HÙ²)ÇŠïLPçãð›áÌ<{Ìxöó ÿÿ¸»ùñ'°™cNƒÎî2’i§2†Äìn–}œü!¤šÎVùýSþX,ª|VÌ>üy÷ïÚýÔ9æ[¼ýÿðáVJI-×´Ô%µè»ì3Fg·B0‡AŠF¾
+åô—ü®øÏ!V† š^
+I#žñLdkO6ßøíç›ìã­Ñb¢yxÞòp:XJ›/ËjVN‘)®.0£ÜÈ>ÜŠIпÎSJ2S(¿"”‚)'ßIÙ#>÷ Wž[žá–IÜÓ³2HóCl”¸m6lc&Bq{›wý8¼?†PNøw”òMÛ4q"P@ìu:öJpœA}™ËUý÷¡Šµ¡é¸C[bœà¨£ÉÎ7 å!5¶N¹ë›=Æí›6~¯ÀÆ^Íq$øcöèÈÝ؈_òF¶à´\<¶Œˆ-§p’¥¤ÝsRÍ· ÍEÛÒÝjŸúH\l)Ÿj‘\JÝ.”׊ð®m<µï³hbKwOušV»ø®‘ñ]ÓõYèZ:>u<=’óò—Ô²¡%h§hš@ë£ãsê”ý!ÂÊ’KÕ_A( èxGÈvRÔ+AA=Àí;.~ (»Þ0ˆïÕbGj¢wQæ‹Å/í²]c" pÐ ÿ·z^¾‹xáÁmÂúýPö¶ ó‡á¼=7ò7N?ߺ7…·*Íbgö$^\Oë§ÛVtâžpeùWeUpÙÁô›– ]kû¼±'¬E›è0uª&Æ6ÙÍ?ïnþw#‚ž(ddš¼¨´œYÙýòæãŸ<›ÑC”Ig³ÏÍ«ËL(攟ö"ûýæ×6ÝU §ÉH
+9ƒHt»Îª
+¢å†[œŸóu9/‘ZdààHlZ¥°‡yÇ¢¨§uõT”WcÍé&ˆÇM0àKèû]æÔا²Û8Ó%7ãaTK–ÏËOÅz•Ê3/Æ‚S|›9ªØY®:…Æ£8ƒ¯R¸jSÿ+‘¸Krööë¨MÌßAèXÃ
+G@½ƒ¡¤jE'Ü%¹›Ïóúþ¯¾Å 픑dúÄ<ŒšP\‡§^?§àgQ®%“ š±S˜!
+²Ž»E0Ý­jºqK_òL¡ßîRš·]ʹælÿ£`\¦[•uµª(œîœpY íWà:»R†ãÁKGÅxðð8ªjâÍ;VµŽ;üæøÐŽ*qUÏõŠ~#~Oüq:¿w`•ß7' å(a¦Èó"”gÚބןª/ëbSWëw ðàû0µ˜Þ/òÍfØ&„@&^ý~ªe2ˆ œ$~šºX*˜À×
+endstream
+endobj
+1575 0 obj <<
+/Type /Page
+/Contents 1576 0 R
+/Resources 1574 0 R
+/MediaBox [0 0 612 792]
+/Parent 1578 0 R
+/Annots [ 1558 0 R 1559 0 R 1560 0 R 1561 0 R 1562 0 R 1563 0 R 1564 0 R 1565 0 R 1566 0 R 1567 0 R 1568 0 R 1569 0 R 1570 0 R 1571 0 R 1572 0 R 1573 0 R ]
+>> endobj
+1558 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 592.877 314.092 606.824]
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+1559 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [249.003 413.549 260.958 427.497]
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+1560 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [265.054 413.549 277.009 427.497]
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+1561 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [281.105 413.549 293.06 427.497]
+/A << /S /GoTo /D (page.93) >>
+>> endobj
+1562 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 413.549 314.092 427.497]
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+1563 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 365.728 314.092 379.676]
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+1564 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 305.953 314.092 319.9]
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+1565 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 282.042 314.092 295.99]
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+1566 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 222.266 314.092 236.214]
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+1567 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.357 449.415 492.313 463.362]
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+1568 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 449.415 508.364 463.362]
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+1569 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 365.728 508.364 379.676]
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+1570 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 317.908 508.364 331.856]
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+1571 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 270.087 508.364 284.035]
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1572 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [443.274 198.356 455.23 212.304]
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1573 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 138.58 508.364 152.528]
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+1577 0 obj <<
+/D [1575 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1574 0 obj <<
+/Font << /F28 597 0 R /F8 596 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1622 0 obj <<
+/Length 2157
+/Filter /FlateDecode
+>>
+stream
+xÚÝZKsã6 ¾çWèèÌlX ø¸m;Óv¦ÓKÛ:³}Œ×VvÝul×VºiÓ_ˆ’¨X¦d+ÍcÛ“94)àGàH™½Ëdöõ™¬¿¸<ûì+p™Þ€É.¯2E(Œ×™!+
+O{K®n®?.æÅûÕŒHþÞJ°÷ƒ©Î£C¼QpڧĬ—Lˆ¹^¬ŠÝ⯼œÅ¶•™Ê¶¥ËÆ÷_Ÿu$7B+ÛH®\=©ÚîyÕó•ìM°!⨠z‚vä
+ÖœàôH‘Üé"]€dì¾ÕÝX a{3º[‹^8:¶³ÏÀú‡N€(¨Å6°‚dƒ<S­ˆJÞ¡B>YàÍÄhZ–[±Ï©;ã°ú†Ü×Î8WŸIå MFŠ´:ü£Öy=ϯ¦7Ë"ᤠ¡ÏL½›æÙoŒFz¸n¦–åaŠ(Ú`<¶ÞÙÚ€(Á§½Z5#±Ü6ßlyŨ”@§ž
+TÁ¹Ye’έZ9%ìz–ïv¯[ßlWÓå¡Ìž…¶½2ÞI&ag¾¼<ûýLÕû„B—Îg³ë³7?ËlÎ2\z—} C¯3¥…ך›Ë쇳直u_pVHü)+ŒÓ•$-¾)¹=ˆ¬±ÐxàðÂú¸š ƒôQÔ|WM{\M“Ps·ž-òâÏ'ØXíãl,Ÿ%k±«1ŽÜØ‚©Ër±+žÛ›qv–Ï%ªAßÕÏ=ÆëDà&ä÷e¤«Ý¿‰<Í #@=ÇD{¡¹õ¤VM4u‡ruµ¬…>Ôr—Ïf«âj½½ž&¬m½@¥OÔÕòÙKº !`’N¹þæáÙeQ69{ãÔ±µ ´ãŒäq¦Á8ç’òTŸNš¦Äá€y”D@÷Ä
+kzŒae:ŒÖS‹òj}ú!Vxà@ÑP ç:Ü¢èJ]Ùú¤2Ô˜ZY›^Õ„O #;*ó¿%\@—ÓÃéM
+ÒÑ*®©UüˆŽ¬êÝöÚäG˜õ¶TÎÉÈ…#Cf¦-ÇÐbÆe“DBKýĘ,I7“þ¤ !rèŠÜëX¯5:5Uc“_›Ëº‘"ù±+(ƒádÏææ$›s¶gb ¬q¨ ÔàÔFǾƑ‡Vu¨¼1ÇQïmœ›v÷½
+M ÃE–¾Zn‘_o¦ÿÒi”4J“¾O¥=c…A¾ÊY‚±mŒáÄ>Œ-Šÿ¦yT•>•cy‘zl•H•}¦"Ye«b"忦0œjñ-ˤËÔ-¥­Màf !e/HÕƒJ öŽÉ_$‚<©¦"Œ½¤{˜˜l‰›’‘‰©H¢ÐD&†¶ï#6~„Z&F—§ÈÄP‘|µ¢m™ã
+°U!Ç3®+D‘Š‘é=ªu»‹òúÒc²qÛ Š›íêÑÄŠlæü·)Üm1[yOž+{ˆCv¸*Q‰yÈm^J³*ôV8¡gv7›|»›m›¢§–ðQe«øp7ù›I¤ê鉅ßçW«ëéöÃ#×£Z2aX“ð‡²XÖ·É–ª¦t¤–ÊMÓŸÅò¿>DˆÓ‘Z#Ž<DëG¼í»—€°EŽBmï\¬‹ér™_¥Ä‹Õ PSÒ%ZÝQÆ^pž€Þø Ö[ù–\(?Ψ×»Ey²Üå=¥.z<ÃkeoŒú%,¶7ÏWü’³¯2v³b3.Vùüô3
+c‘ ª&×ÑNÆÂÓáXñ·œÖ± 
+LA¸ùb·YNÿܽ_o‹´„½%„cuLë…•G^ãÄ{unºø0Ç5wJ€ÊîßRdÌ–/zïxÕÉ39‰û¾4€È
+endstream
+endobj
+1621 0 obj <<
+/Type /Page
+/Contents 1622 0 R
+/Resources 1620 0 R
+/MediaBox [0 0 612 792]
+/Parent 1578 0 R
+/Annots [ 1579 0 R 1580 0 R 1581 0 R 1582 0 R 1583 0 R 1584 0 R 1585 0 R 1586 0 R 1587 0 R 1588 0 R 1589 0 R 1590 0 R 1591 0 R 1592 0 R 1593 0 R 1594 0 R 1595 0 R 1596 0 R 1597 0 R 1598 0 R 1599 0 R 1600 0 R 1601 0 R 1602 0 R 1603 0 R 1604 0 R 1605 0 R 1606 0 R 1607 0 R 1608 0 R 1609 0 R 1610 0 R 1611 0 R 1612 0 R 1613 0 R 1614 0 R 1615 0 R 1616 0 R 1617 0 R 1618 0 R 1619 0 R ]
+>> endobj
+1579 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [219.115 628.742 231.07 642.69]
+/A << /S /GoTo /D (page.18) >>
+>> endobj
+1580 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [235.166 628.742 247.121 642.69]
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+1581 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.217 628.742 263.172 642.69]
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+1582 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [267.268 628.742 279.223 642.69]
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+1583 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [283.319 628.742 295.274 642.69]
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+1584 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [299.37 628.742 311.325 642.69]
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+1585 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.548 618.436 204.503 628.786]
+/A << /S /GoTo /D (page.89) >>
+>> endobj
+1586 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.599 618.436 225.535 628.786]
+/A << /S /GoTo /D (page.115) >>
+>> endobj
+1587 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 568.966 298.041 582.914]
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+1588 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 568.966 314.092 582.914]
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+1589 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 497.235 314.092 511.183]
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1590 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 473.325 314.092 487.273]
+/A << /S /GoTo /D (page.18) >>
+>> endobj
+1591 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [216.901 317.908 228.856 331.856]
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+1592 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [232.952 317.908 244.907 331.856]
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1593 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [249.003 317.908 260.958 331.856]
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1594 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [265.054 317.908 277.009 331.856]
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+1595 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [281.105 317.908 293.06 331.856]
+/A << /S /GoTo /D (page.92) >>
+>> endobj
+1596 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 317.908 314.092 331.856]
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+1597 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 270.087 314.092 284.035]
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+1598 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 198.356 314.092 212.304]
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+1599 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 616.787 508.364 630.735]
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+1600 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 425.504 508.364 439.452]
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+1601 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [501.39 365.728 508.364 379.676]
+/A << /S /GoTo /D (page.6) >>
+>> endobj
+1602 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [482.571 353.773 489.545 367.721]
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+1603 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [493.641 353.773 505.596 367.721]
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+1604 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.819 343.468 398.775 353.818]
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+1605 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.87 343.468 419.807 353.818]
+/A << /S /GoTo /D (page.135) >>
+>> endobj
+1606 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [482.571 329.863 489.545 343.811]
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+1607 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [493.641 329.863 505.596 343.811]
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+1608 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.819 319.557 398.775 329.907]
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+1609 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.87 319.557 414.826 329.907]
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+1610 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.921 319.557 435.858 329.907]
+/A << /S /GoTo /D (page.135) >>
+>> endobj
+1611 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 305.953 508.364 319.9]
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+1612 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [482.571 293.997 489.545 307.945]
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+1613 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [493.641 293.997 505.596 307.945]
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+1614 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.819 283.692 398.775 294.042]
+/A << /S /GoTo /D (page.89) >>
+>> endobj
+1615 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.87 283.692 414.826 294.042]
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+1616 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.921 283.692 435.858 294.042]
+/A << /S /GoTo /D (page.135) >>
+>> endobj
+1617 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 270.087 508.364 284.035]
+/A << /S /GoTo /D (page.89) >>
+>> endobj
+1618 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [470.395 236.214 487.331 250.162]
+/A << /S /GoTo /D (page.135) >>
+>> endobj
+1619 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 236.214 508.364 250.162]
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+1623 0 obj <<
+/D [1621 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1620 0 obj <<
+/Font << /F28 597 0 R /F8 596 0 R /F31 600 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1670 0 obj <<
+/Length 2245
+/Filter /FlateDecode
+>>
+stream
+xÚÕZKs9¾ûWôQ®q€àã–™ª©ÚÛîú–ƒl)%²¤•”xRþó‹~rKì–Ú–ÌEb±ùÀã‚ÐÅÇB¿_éæÿ×›«ŸóEPÁ¢-n>H±1…e§¸¸™ïGHh~º£1Ò$[5YšR¯±×hüéú›Êúc
+šŽp‘fxucœåÇä!‚è…?}& &·ÛÝfr·;V½a–¢êgËkô£¯óÍjy_·w×cÐ:œ
+Y] FPlJ«)ÿþýªx?v¢nGÍ÷Ú ©nÉ ·&}9¹Ÿ“ïH‰=¹§PývÂZÀ{>;LaÞ˜jËÜ\ýï
+‚ЀC£‘©¦¸»¿zÿ‡.¦òQP£(øâ¡z/Kdi.Šÿ\ýëØ£¡¥m¥Ät1Ô4Dƒ´:DG„Úç`Ú)r|Ìò/ww³õn6}×ÁsPæΧô)àÙf„$¾ ($†¡Bjñ LÊS°åÁ7öu÷y¹zX̦gb7»í1—Þ)­mŸu¢Í?2ºmÍêm›O4u‘ʹç‘ähäL?MõòÇݦëÝöá˜4ÐA¡Æ' ðG¡ô†4~ql=Œ‡n•ù”c´åQ
+ þÉŸ‡Ò~¿Ñ/µfŸSRë µ²œ¨ š£¼Jë­äåµòú`}ñ,îØhb€cÐ àñ"FcÀ+ |ÂÖtz·ZîJ–óe†¥
+Å'½ØÁ÷êÄb¯NŽu2˜x–ÍBãIE+èŸ0ê‡A8Ø ƒ„çét3Ûf ÞeÐ^,Ì;Ã[ÈÑÝБ“çn%zÆAQŠ\<£<ó¾ér;7Kdvþôe»{ç‡ùt÷ç``½D}¶Œ?+M:–ù@‘u¤Ðé÷ºüÚÎø0_Ì'»ùjÙ@\.’ïUc³W†ÀÝlóq³ú’¹iX‰8cξÜǘc€©BêRP`MÆÑ)Ö¡ xù<è.ô1“Ø\ ×³‹“Ó«Û6Ô¹ˆ èÙ‹8aôVY|*”Åbõðîv3›|ž/?¾ÛMn³mît‘P“»ñÏ%þ9Â_Ž:<hCŠ'i€Ö~Y¬ÿ¼ŒÚœÄ5®¹SÓÈ[Œ(sˆ)¾åüµªÞîR—%ÎGæNÄÙçO÷ô,XüMñNNÎÁËÀ­ò&´dÒyDvù§Š¦q£˜S]³eW»^WïYaÀK&mº$ý¡~MÊw`¡O°§¨ZÌvrPuÜ?Ha…®”•g1ä@-Q¯\RÀžÿúiT0æ Tƒ„2Û¨^ofwÛùý`T—q”˜c¼\¡¾ÃÈìsqNâ¶ír¶_î^BHÌsbI‡6¼'Ä2 ûí‡U6’dVF›· „KTzP!uh.ƒ
+CU­N
+Ý ìø<"°ÁçöÛýíƒO|7>9ˆ÷p] ,± ˉU•—Â%*·Žá
+cnÓ"a_…_LUµOE(Ñ~ªÕ²I&Xí’[DD‡‡À©€*•U‘Neu¤9¯Ò‰pÒŽREUÒEvÄzó‚%™m—8=uõ7³åtþW&&Þx_ê.í–^4KP&GnÊ©²=– NzIÅ)iøàE(1½|7AÜóöÎÆp茲îXd³Ž"‡·Ì{Ÿ(òêÌ0¿: u˜m¸GC‚ÂËhˆµrö˜½ž¶§Oо›VBe+ä˜Ttâª|
+ÊŒŠµh‡p`Ìu,2ʱ;p"ÝçX÷j¹Û|y==;½o¬7«Ìµ¡|Qsð=^ýê ÔäE[SÕ¾«¯s¯ÏAiÀÁ÷ô1C8ÃØ:#34ëqþ-µòtŽœeÑÃÓë­Úìþz…€·;ƒ$ê
+endstream
+endobj
+1669 0 obj <<
+/Type /Page
+/Contents 1670 0 R
+/Resources 1668 0 R
+/MediaBox [0 0 612 792]
+/Parent 1578 0 R
+/Annots [ 1624 0 R 1625 0 R 1626 0 R 1627 0 R 1628 0 R 1629 0 R 1630 0 R 1631 0 R 1632 0 R 1633 0 R 1634 0 R 1635 0 R 1636 0 R 1637 0 R 1638 0 R 1639 0 R 1640 0 R 1641 0 R 1642 0 R 1643 0 R 1644 0 R 1645 0 R 1646 0 R 1647 0 R 1648 0 R 1649 0 R 1650 0 R 1651 0 R 1652 0 R 1653 0 R 1654 0 R 1655 0 R 1656 0 R 1657 0 R 1658 0 R 1659 0 R 1660 0 R 1661 0 R 1662 0 R 1663 0 R 1664 0 R ]
+>> endobj
+1624 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 545.056 314.092 559.004]
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+1625 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 533.101 314.092 547.049]
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+1626 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 497.235 314.092 511.183]
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+1627 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 485.28 314.092 499.228]
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+1628 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 449.415 314.092 463.362]
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+1629 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 413.549 314.092 427.497]
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+1630 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 210.311 314.092 224.259]
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+1631 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [283.319 138.58 295.274 152.528]
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+1632 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [299.37 138.58 311.325 152.528]
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+1633 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.548 128.275 204.503 138.625]
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+1634 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.599 128.275 220.554 138.625]
+/A << /S /GoTo /D (page.82) >>
+>> endobj
+1635 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [493.641 652.653 505.596 666.6]
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+1636 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.819 644.284 398.775 652.697]
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1637 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [464.307 616.787 476.262 630.735]
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+1638 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.357 616.787 492.313 630.735]
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1639 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 616.787 508.364 630.735]
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+1640 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 604.832 508.364 618.78]
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1641 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [461.539 580.922 473.494 594.869]
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+1642 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [477.59 580.922 489.545 594.869]
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+1643 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [493.641 580.922 505.596 594.869]
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+1644 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.819 572.553 398.775 580.966]
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+1645 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [493.641 557.011 505.596 570.959]
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+1646 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.819 548.643 398.775 557.055]
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1647 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 473.325 508.364 487.273]
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+1648 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 270.087 508.364 284.035]
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+1649 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [482.571 198.356 489.545 212.304]
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+1650 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [493.641 198.356 505.596 212.304]
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+1651 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.819 188.05 398.775 198.4]
+/A << /S /GoTo /D (page.92) >>
+>> endobj
+1652 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.87 188.05 419.807 198.4]
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+1653 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [443.274 174.446 455.229 188.393]
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+1654 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [459.325 174.446 471.28 188.393]
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+1655 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [475.376 174.446 487.331 188.393]
+/A << /S /GoTo /D (page.92) >>
+>> endobj
+1656 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 174.446 508.364 188.393]
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+1657 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 162.491 508.364 176.438]
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+1658 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 150.535 508.364 164.483]
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+1659 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 138.58 508.364 152.528]
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+1660 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [449.363 126.625 466.299 140.573]
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+1661 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [470.395 126.625 487.331 140.573]
+/A << /S /GoTo /D (page.111) >>
+>> endobj
+1662 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 126.625 508.364 140.573]
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+1663 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [470.395 114.67 487.331 128.618]
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+1664 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 114.67 508.364 128.618]
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+1671 0 obj <<
+/D [1669 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1668 0 obj <<
+/Font << /F8 596 0 R /F28 597 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1721 0 obj <<
+/Length 2361
+/Filter /FlateDecode
+>>
+stream
+xÚÝ[M“Û8½÷¯ÐÑ]5æ
+ò:"c ‰îgÑçQ¼ÞnžÖb6ù÷í÷¿þøiÿRâ¯åOŠÛ14þÁƒ›ü –@F*Údbdÿúå&ú<vèGJ©òBDþèÝo "¿Cß@Ùx£…Á¸Ôi¬”ð¦‰Á&ýz úé”H±¶®­í_oŒ ×ôw…:ÞÄ“ùôPSBkwM «¢Ñüp›Ä:,¯Qn¼hŒÂx×”ÌYÍÙ‘s6¿¢‘óªºçM}åËÿõÙUö9Ùü’ҚʕUÅâz„`ty P¿ záLù-ÚÇk»›%ñó"=„ÍzJƒŒUò(À <å—ÌÚ¬^îÖ›äL¶õ@Ëz9­v—æì•»!Q „2W"‡¥$¹8öPÙòƒ.‘öÓ)ÑÃb‡äQìÚ„•<{
+ƒ#™Wnÿè‘B8=*š³q)\ÍÛ@ÕÁ®†Ærõa…rÔ[uháµnVû‹gK”Y!ÃÀKW%ŸqUc|™â[Å;°Ä“Ä?MšÈÏ3ŠM1
+OW$¬kÁÉòÑ¡@Š«1ÃÚBF»¯SŒÕ‚lÆ«»É|rh>c ýÖ™#cøƒ]ž¨×KMBþûFºg½+Ô¶rD’º»ô†¬ ×1¶‘ÂÒ¡ÂwÉÓ:ý¨-GümÖPõ#ß.·Îá5oz2בpRÄŸ/—É&h8%Q@þõ>Ëu{Ÿö#㆒ÿ~NY‰Ôé~}êp!O{±;‹˜2 X)œ¦VG0h¥:žd]!ï‡Z Õ~ •Z(•}„¯œìcˆG˜Œ´˜Þ$^ÄËiÂ\ ]ÇÞ“yÑÓÃ%Ø —`£®Ö·j4.
+÷gwRTÚe-4)ëÈÆTèiS7‡µ©¢‹$[Î v‡³—¾æT :ÛבÚÇÉäÊíµë€§Ô·®Ÿ4wõâÞ§ÚyW‘Ýâ0lèœ
+§ÉÓIç
+ å'DJ `è©¿á£E: ·CÝd c±+ªÓßsuFíTÓöÌS~Ÿ„Çh*ìË¥i¿o˜S>°Û· Y𻿯~KWëð ¾vC.ë_Å U@¥e°cY¼Ú¹â6y_´Ûž›ãßN›ÂÀ¡y{½”óÂ8•ð¥¸º—àu {Jo‰ˆu ™vŽãŽþ X¿\çÌfѧÝO¯H#ß­ŽOæà÷O¤í_ü—Ô6,äþ‰¹à|ùœ ÐæéK×ÓO¥Ã?˜(>rlñã)e˜v¿]a­ê×ãàÛ¿ëk=ˆÆ¤…5 0.ÎU53{ñÿ
+endstream
+endobj
+1720 0 obj <<
+/Type /Page
+/Contents 1721 0 R
+/Resources 1719 0 R
+/MediaBox [0 0 612 792]
+/Parent 1578 0 R
+/Annots [ 1665 0 R 1666 0 R 1667 0 R 1672 0 R 1673 0 R 1674 0 R 1675 0 R 1676 0 R 1677 0 R 1678 0 R 1679 0 R 1680 0 R 1681 0 R 1682 0 R 1683 0 R 1684 0 R 1685 0 R 1686 0 R 1687 0 R 1688 0 R 1689 0 R 1690 0 R 1691 0 R 1692 0 R 1693 0 R 1694 0 R 1695 0 R 1696 0 R 1697 0 R 1698 0 R 1699 0 R 1700 0 R 1701 0 R 1702 0 R 1703 0 R 1704 0 R 1705 0 R 1706 0 R 1707 0 R 1708 0 R 1709 0 R 1710 0 R 1711 0 R 1712 0 R 1713 0 R 1714 0 R 1715 0 R 1716 0 R 1717 0 R 1718 0 R ]
+>> endobj
+1665 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [255.091 652.653 272.028 666.6]
+/A << /S /GoTo /D (page.111) >>
+>> endobj
+1666 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [276.123 652.653 293.06 666.6]
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+1667 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 652.653 314.092 666.6]
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+1672 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [277.23 640.697 294.167 654.645]
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+1673 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 640.697 314.092 654.645]
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+1674 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 449.415 298.041 463.362]
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+1675 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 449.415 314.092 463.362]
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+1676 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 425.504 314.092 439.452]
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+1677 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [251.217 413.549 263.172 427.497]
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+1678 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [267.268 413.549 279.223 427.497]
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+1679 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [283.319 413.549 295.274 427.497]
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+1680 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [299.37 413.549 311.325 427.497]
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+1681 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.548 403.243 204.503 413.593]
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+1682 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.599 403.243 220.554 413.593]
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+1683 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [270.035 389.639 281.99 403.587]
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+1684 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 389.639 298.041 403.587]
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+1685 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 389.639 314.092 403.587]
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1686 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 365.728 314.092 379.676]
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+1687 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [307.118 353.773 314.092 367.721]
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+1688 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [249.003 317.908 260.958 331.856]
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+1689 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [244.021 305.953 255.977 319.9]
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+1690 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [260.072 305.953 272.028 319.9]
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+1691 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [276.123 305.953 293.06 319.9]
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+1692 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 305.953 314.092 319.9]
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+1693 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 270.087 298.041 284.035]
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+1694 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 270.087 314.092 284.035]
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+1695 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 234.222 298.041 248.169]
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+1696 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 234.222 314.092 248.169]
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+1697 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 164.483 314.092 178.431]
+/A << /S /GoTo /D (page.17) >>
+>> endobj
+1698 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 616.787 508.364 630.735]
+/A << /S /GoTo /D (page.82) >>
+>> endobj
+1699 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 580.922 508.364 594.869]
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+1700 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 389.639 508.364 403.587]
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+1701 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 377.684 508.364 391.631]
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+1702 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 353.773 508.364 367.721]
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+1703 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [470.395 329.863 487.331 343.811]
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+1704 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 329.863 508.364 343.811]
+/A << /S /GoTo /D (page.129) >>
+>> endobj
+1705 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [470.395 305.953 487.331 319.9]
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+1706 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 305.953 508.364 319.9]
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+1707 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [454.344 270.087 466.299 284.035]
+/A << /S /GoTo /D (page.76) >>
+>> endobj
+1708 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [470.395 270.087 487.331 284.035]
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+1709 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 270.087 508.364 284.035]
+/A << /S /GoTo /D (page.129) >>
+>> endobj
+1710 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [403.424 246.177 415.379 260.124]
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+1711 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.475 246.177 431.43 260.124]
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+1712 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [435.525 246.177 447.481 260.124]
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+1713 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [451.576 246.177 463.532 260.124]
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+1714 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [467.627 246.177 484.564 260.124]
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+1715 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [488.66 246.177 505.596 260.124]
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+1716 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.819 235.871 403.756 246.221]
+/A << /S /GoTo /D (page.129) >>
+>> endobj
+1717 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.852 235.871 424.788 246.221]
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+1718 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 198.356 508.364 212.304]
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+1722 0 obj <<
+/D [1720 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1719 0 obj <<
+/Font << /F28 597 0 R /F8 596 0 R /F31 600 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1777 0 obj <<
+/Length 2310
+/Filter /FlateDecode
+>>
+stream
+xÚÍ[Is㶾ûWðè©!èn¬7gRIªrHê½ñm’ƒ,Ó¶m‘èä¹üç_“)S)RÖâ‹EK$ðõ¾ )“ÇD&?_Éðùåö껟Ð%^xƒ&¹}H@“0^%F[¤“ÛûäÛõï@ên|7ÎÒé¯ó¯Ù|ñéÛ_¾ûéísN ã-
+Ïÿëáz4®VëËù"Ïg-49N%»ûŸW~[ŽÐ7HêfÏÓ‡iDè#ÉÁñª•© ʾqE·H¸<ÕµŠ¬ivÞ¤´ÒÅy³©¥êùÉb™§w±¨ÓTü­“ß(摱$„ÔpŒŒ¬9x2ôVF67V€¶GÙÜY!F7'ÒØ"­Ã6K Q(ui=ÏF%ÕšëHu6ÓɶJ㉰Õ8±$údçj‹>*¼Rm¹ uµå¤^S½¢'¹®ÖÔö›—jÛ¼]mÛ<ª¶èÐõq•ŽÊ¹å\¹nÒþTεKöFíñb//zÓä‚«µ$«b̃rªNž%©ÒûtÍŸFÜVDmËÔ[
+k·b\U€UE+/‡äêê(ªbPXØæk¤£ˆý°;ºžäUT{0Éí™ðFY£µ“Q¶wœÑšå\w© ¥æi"ÉáÕ•?(d|?î’FÀá”NGZñ›åúliå€Ñn|Àq,î7À©pæø…‘› rÙ“åFî6ȱ/Ï'wgó–m¿åu –%gÔ›óœø£¸3°^ȲM[ÊðcqÂÅàÄÜÕãò#Á[P þ–},øØ>s?¦;d…²pÎH¸¥B6ê Ö¨b2øDø>D°$–¬Wº Éh#\¢¬çtï­`.AS{Ë©1º7i×t—ÔBC×°Gw >D:Ê/}u‰~7j(Î}c3l´Î™÷$àÊq­/Å5•«íyŠ r[u_Œ@ÂnæI"â|—Ð)ÖÚ¼_ˆ­É2@ûQÄì®pç“ûé0{:1З>ݽx}EëY©WTÕ቗6šÌǪ»ùü¯ˆÍ(ª£¾XiŽ:jÓAC¼³ås¬ZTž­ÔœGAŠV9R<3YãˆÏæӇ尡W“·Y<ÞÜq2ªa]l/ËôŸèIéÑÌ®èoX„²onÑïÕßÒÛ5¢c7
+FuÓἪÙw:f‹Ž~«^†-Y=;=ýìZÑ=êÙ_œn³kæô”š¼‘kB)c„‚N³5Jx¥öÇßØlÍF# j6CBW¼Èl€³ˆª.c±ÃÝ<ŒŸ—é…bš7ò¤Õ]£E€<™³›ìe‘žiT¼í3*Êçó,?4?s'Ïì‘<¨‡?ºùõûÛ›Q¶l8óųžtoDtÂëpÒg¦z=•Dºš§×ÍØÃÇ´¡à/QÿuHJk]kìÇ¢Õqˆµ¦û3a,Mteq…&žˆÔ ÔÏ*Íž§÷é"–$[_$5!Ò9|Ùﶲ^ä°^Îsr¶½­’á>®Ý³žTu@%}ui±qj b|͆w"Ueÿß'UÝü3¾Oç¸ó½€'jŸ·=^PÂÖ²·ŸþÖ†«ôÃ’âTŸ£Ñý<[}¸NšTЧë4JgYºÏ"Ç3Ú ›YR¹v@ìÙù~=_*W}«]ðFàx‘­.0›û.ùùÒcq©995ºüÖ†òo}x=Hn-â6…–£Ò/£«z„qÐèÊž†³ÇôæÏùór³±âUsøUaPºžÌ+ZRq{æ
+öeóšëey)' ÔÛi¨Ñ¼¢Ž¢ƒtBE£þšÌÕ|4N³—î5º±ØD-Cc’Ðò“ƽ‹ZCÂ(䥌0†jÔ*'_•S›Ù[‡[¦‡Ã½F ùÕ…bæâÅÀ§\¿‚§^¡ài¸`‹½ îÖwÌŒì9QlÚ;eÍHGg÷ÃXdо*=±JãluvmÃà
+endstream
+endobj
+1776 0 obj <<
+/Type /Page
+/Contents 1777 0 R
+/Resources 1775 0 R
+/MediaBox [0 0 612 792]
+/Parent 1578 0 R
+/Annots [ 1723 0 R 1724 0 R 1725 0 R 1726 0 R 1727 0 R 1728 0 R 1729 0 R 1730 0 R 1731 0 R 1732 0 R 1733 0 R 1734 0 R 1735 0 R 1736 0 R 1737 0 R 1738 0 R 1739 0 R 1740 0 R 1741 0 R 1742 0 R 1743 0 R 1744 0 R 1745 0 R 1746 0 R 1747 0 R 1748 0 R 1749 0 R 1750 0 R 1751 0 R 1752 0 R 1753 0 R 1754 0 R 1755 0 R 1756 0 R 1757 0 R 1758 0 R 1759 0 R 1760 0 R 1761 0 R 1762 0 R 1763 0 R 1764 0 R 1765 0 R 1766 0 R 1767 0 R 1768 0 R 1769 0 R 1770 0 R 1771 0 R 1772 0 R ]
+>> endobj
+1723 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 616.787 298.041 630.735]
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+1724 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 616.787 314.092 630.735]
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+1725 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 533.101 298.041 547.049]
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+1726 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 533.101 314.092 547.049]
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+1727 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [267.268 485.28 279.223 499.228]
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+1728 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [283.319 485.28 295.274 499.228]
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+1729 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [299.37 485.28 311.325 499.228]
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+1730 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.548 474.974 204.503 485.324]
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+1731 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.599 474.974 225.535 485.324]
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+1732 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [229.631 474.974 246.568 485.324]
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+1733 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 425.504 314.092 439.452]
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+1734 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [276.123 389.639 293.06 403.587]
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+1735 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 389.639 314.092 403.587]
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+1736 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [299.37 377.684 311.325 391.631]
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+1737 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.548 367.378 209.484 377.728]
+/A << /S /GoTo /D (page.115) >>
+>> endobj
+1738 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [213.58 367.378 230.517 377.728]
+/A << /S /GoTo /D (page.116) >>
+>> endobj
+1739 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 353.773 298.041 367.721]
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+1740 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 353.773 314.092 367.721]
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+1741 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [281.105 317.908 293.06 331.856]
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+1742 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 317.908 314.092 331.856]
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+1743 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 293.997 314.092 307.945]
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+1744 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 246.177 314.092 260.124]
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+1745 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 628.742 508.364 642.69]
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+1746 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 616.787 508.364 630.735]
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+1747 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 592.877 508.364 606.824]
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+1748 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 545.056 508.364 559.004]
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+1749 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.357 533.101 492.313 547.049]
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+1750 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 533.101 508.364 547.049]
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+1751 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 463.362 508.364 477.31]
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+1752 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.357 451.407 492.313 465.355]
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+1753 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 451.407 508.364 465.355]
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+1754 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 427.497 508.364 441.445]
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+1755 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.357 236.214 492.313 250.162]
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+1756 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 236.214 508.364 250.162]
+/A << /S /GoTo /D (page.61) >>
+>> endobj
+1757 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [454.344 200.349 466.299 214.296]
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+1758 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [470.395 200.349 487.331 214.296]
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+1759 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 200.349 508.364 214.296]
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+1760 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [401.21 176.438 413.165 190.386]
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+1761 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.261 176.438 429.216 190.386]
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+1762 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [433.312 176.438 445.267 190.386]
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+1763 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [449.363 176.438 466.299 190.386]
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+1764 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [470.395 176.438 487.331 190.386]
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+1765 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 176.438 508.364 190.386]
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+1766 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [448.256 152.528 460.211 166.476]
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+1767 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [464.307 152.528 476.262 166.476]
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+1768 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.357 152.528 492.313 166.476]
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+1769 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 152.528 508.364 166.476]
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+1770 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [475.376 140.573 487.331 154.521]
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+1771 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 140.573 508.364 154.521]
+/A << /S /GoTo /D (page.115) >>
+>> endobj
+1772 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 128.618 508.364 142.565]
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+1778 0 obj <<
+/D [1776 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1775 0 obj <<
+/Font << /F28 597 0 R /F8 596 0 R /F31 600 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1817 0 obj <<
+/Length 2353
+/Filter /FlateDecode
+>>
+stream
+xÚÍZKsÛ8¾ûWð(WE4€ÆãæÚ­™©šËÖîæ–™ƒ"1¶veQ#ÉëIùÏoƒ “)Q–“\b„‰~÷×ÝàÅ}Á‹_oxøû·7?ý"lá˜ÓB¿€’i§
+† ‰ÅÇEñi2_îËÙÓ¾ÚÍ·ËÍþö¿ýôËë—Œf
+%}±Þ½¨n§ÂNæOåú–ûÛ©j2_Ív»fYm¦þ#ÅTj¦¹,¦
+1Þ…s·SH±D:“ÓY8ó˜JŸKîf;KvÇ´Zd‰«)¯WÐÆÛÛpœ¤\Ÿ•ãApÊÉz¥h¥sl¯3Ç?Îö™h옄~e{"Ûp4%‚@æˆ_ë—ÁîëãçÑD\è‚oQæû0Ò¨ÔEir¥É/梪×þ¡ªþÛÃk_@‰12ΙX5žý…
+f:¾£íH½˜e…ÙEfŽ þÚG­i1èO:øÐà\M*ÃŽb½OKàÄŠ¸\×KãñOQËæKÐ šG×mM° pMœÎÖA®Ëõâã„íñÁÔr¬I §®xúÕ¨ï¸#R • ª³|yç0é’‹‚ŽBçIï@x*.w£å¿\©ŽÉÖ†lȽ%ZC²U*¦­S†Üµ­S™d’ª¶±zé´ Ö)8Wá©
+ õG”¢¥©íZáD ÀðTr á)-Uö#’×7Û½VÂväé)Êø”$Ÿÿ€N FkÄ—-ï¡‘³·ô­”´ô »*¿gÀ}
+{Aå9ö…#KUuY5xg¡Õíi]**yZµ «2A
+f]Ò0gE†Ê»U. Ô]¼È*ÿ|Epo#‹Mª»L7˜ròí>òÎZïi‡û 'Y¾ï·ÕÓ¦\Ì‹m¹Ëu
+×*óCÀf¡D8%GÅ‹]nD]ã0ñ}[wÞ»
+MO˜p6nGN!¹‹ïh‰¤d’÷náDLRÂaœ6J¡ãS)Ÿ4ô´ÝÞ•ëÿ-·W‰×e—>ôÝiù;QU®÷ÿè›Ê^
+endstream
+endobj
+1816 0 obj <<
+/Type /Page
+/Contents 1817 0 R
+/Resources 1815 0 R
+/MediaBox [0 0 612 792]
+/Parent 1578 0 R
+/Annots [ 1773 0 R 1774 0 R 1779 0 R 1780 0 R 1781 0 R 1782 0 R 1783 0 R 1784 0 R 1785 0 R 1786 0 R 1787 0 R 1788 0 R 1789 0 R 1790 0 R 1791 0 R 1792 0 R 1793 0 R 1794 0 R 1795 0 R 1796 0 R 1797 0 R 1798 0 R 1799 0 R 1800 0 R 1801 0 R 1802 0 R 1803 0 R 1804 0 R 1805 0 R 1806 0 R 1807 0 R 1808 0 R 1809 0 R 1810 0 R 1811 0 R 1812 0 R 1813 0 R 1814 0 R ]
+>> endobj
+1773 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [299.37 640.697 311.325 654.645]
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+1774 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.548 632.329 204.503 640.742]
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+1779 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [276.123 604.832 293.06 618.78]
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+1780 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 604.832 314.092 618.78]
+/A << /S /GoTo /D (page.127) >>
+>> endobj
+1781 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 592.877 314.092 606.824]
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+1782 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 568.966 298.041 582.914]
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+1783 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 568.966 314.092 582.914]
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+1784 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 545.056 314.092 559.004]
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+1785 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 509.19 314.092 523.138]
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+1786 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [267.268 485.28 279.223 499.228]
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+1787 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [283.319 485.28 295.274 499.228]
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+1788 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [299.37 485.28 311.325 499.228]
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+1789 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.548 474.974 204.503 485.324]
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+1790 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.599 474.974 220.554 485.324]
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+1791 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 425.504 298.041 439.452]
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+1792 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 425.504 314.092 439.452]
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+1793 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [307.118 329.863 314.092 343.811]
+/A << /S /GoTo /D (page.6) >>
+>> endobj
+1794 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 222.266 314.092 236.214]
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+1795 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 210.311 314.092 224.259]
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1796 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 138.58 314.092 152.528]
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+1797 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [253.984 126.625 265.939 140.573]
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+1798 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [270.035 126.625 281.99 140.573]
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+1799 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 126.625 298.041 140.573]
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+1800 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 126.625 314.092 140.573]
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+1801 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 640.697 508.364 654.645]
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+1802 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.357 604.832 492.313 618.78]
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+1803 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 604.832 508.364 618.78]
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+1804 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 580.922 508.364 594.869]
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+1805 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 557.011 508.364 570.959]
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+1806 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [443.274 521.146 455.23 535.093]
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+1807 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 497.235 508.364 511.183]
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+1808 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 413.549 508.364 427.497]
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+1809 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 377.684 508.364 391.631]
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+1810 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 353.773 508.364 367.721]
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+1811 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [448.256 234.222 460.211 248.169]
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1812 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [464.307 234.222 476.262 248.169]
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1813 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.357 234.222 492.313 248.169]
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+1814 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 234.222 508.364 248.169]
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+1818 0 obj <<
+/D [1816 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1815 0 obj <<
+/Font << /F28 597 0 R /F8 596 0 R /F21 593 0 R /F43 827 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1945 0 obj <<
+/Length 2163
+/Filter /FlateDecode
+>>
+stream
+xÚå[Is㸾ûWð¨®j¡±/7Õd¦'IU*•ß:s $ÚÍ
+%*ÝcÇ~IP)Ò“ä¥+ EÀ[¿·
+P
+"¥m¸ÏîG„V?J¸WÚyõre”×/W–†ˆó›ˆ+’CÒ#Ò‰³H;éÜô^íÍFFv”×1êš“’ïŠ?ႾºÏ–Þ±õ3°5Ÿ,ãE€9mÀÝÕ™s@$³ªö¡_noþ{ü’8
+#¥qD0yYõêÌI **äȸA%{jû˜ü’O¡òê—7"‡8`²Š…†«¶ñï ° 6È|DƒaSf0n›‚’IÎêšs̈îV=ð¶ªW¥,•l«¡*‡nûÔÑæ©£2X½2ÇŒÿœS&üçàÛâþì^Iœ/Äî¹. LWtûJÙçðô* ¬¿±»é®aŒ3Ú°
+ÐlH³…›Þüg6³uZ¹sO“ìt<k3«¤Y€€8o6 ú}(7O!}™œ^ ëÒCŒ/+g1NmŸ:ß• ¢\û8¶1$.\cHRËæ©Ôªyª_ëš—Þº åîs½{jüSQm¸¿ˆ7<xá(<O7«,~ÚOYrBo«0àšìœÝ6™2-i«år¶æÀÿ†¬ü®ˆbú
+‰†âfl:h´ÁÃZüu-hpž‚
+H³5;Æí£ÃEX«èÑ­ýó‡bõPLf³ìû WFÛS«Ž*泿-´`ÃQRùš©ò`ÇÚåI÷àÑ«M¤¸$´iëL‡RªÚ"Š›;HƆ#!©òÒÖ;cÈl‡qdÏUäËó)ÏzWP È•/“.U¬\”aeA‘Ò>RõÈbó´˜þŸÙ BNãu‘ÎB‘íb›9Q”e±¶ …7ˆé"Т¤zóî÷0ê³êYh³šçÿ dŽ(ú—KØóD·ÏèÒÐIÆÅì 8»=ã4”Cî )^reÔM6d^<NKÚ¼¼ÃW­üá3,OÊé'³Ž{ì §Ÿ a1‡°̯pêÚ9M­™h¡soWúÊèŒtˆã½êß'ù")ÖO×䦗F]&&
+ëRkLãÅ°ŽWßÒÙã;T*ÇÕoO«d½Nî°Üôçç ­tXÅIŠu_‰NÉ#OÞ¡¦ÏȨ³t™,]ɈTú\ðuI£ëƒMŒ™p×VwÍu ­³tS¤ËûÍ;Ô·ÆÃu–/ï‹xª ” ’]!•¼nQÀ†“
+Ot›ÇâqžÏδé똖ˠîXº[çËâ=†‰7Ââñ~Î{ÖíX%HÃlOêÅeÖs„8Ö>9µ86ª!€´¼P¥º÷ã6§5wñ^=Üó©Ú@\<>iöÆM ‰U·B»GÙî+ÒÅkg½lT§Ìàù×ôBG»×f¢:þÆz‚Vžç¤ÍôCV¤Pà½^=ôâM &ð6¼Œ‹`QF îoS7°æsï`ë¼X$Dȶ¼‰­DçòŽÂ°£P¡Gd7Jën‚y|c‘®41D {Cpt‰!NS~—ü{²#ßØ
+X'ß¡Ü•gäjèœ
+endstream
+endobj
+1944 0 obj <<
+/Type /Page
+/Contents 1945 0 R
+/Resources 1943 0 R
+/MediaBox [0 0 612 792]
+/Parent 1947 0 R
+/Annots [ 1819 0 R 1820 0 R 1821 0 R 1822 0 R 1823 0 R 1824 0 R 1825 0 R 1826 0 R 1827 0 R 1828 0 R 1829 0 R 1830 0 R 1831 0 R 1832 0 R 1833 0 R 1834 0 R 1835 0 R 1836 0 R 1837 0 R 1838 0 R 1839 0 R 1840 0 R 1841 0 R 1842 0 R 1843 0 R 1844 0 R 1845 0 R 1846 0 R 1847 0 R 1848 0 R 1849 0 R 1850 0 R 1851 0 R 1852 0 R 1853 0 R 1854 0 R 1855 0 R 1856 0 R 1857 0 R 1858 0 R 1859 0 R 1860 0 R 1861 0 R 1862 0 R 1863 0 R 1864 0 R 1865 0 R 1866 0 R 1867 0 R 1868 0 R 1869 0 R 1870 0 R 1871 0 R 1872 0 R 1873 0 R 1874 0 R 1875 0 R 1876 0 R 1877 0 R 1878 0 R 1879 0 R 1880 0 R 1881 0 R 1882 0 R 1883 0 R 1884 0 R 1885 0 R 1886 0 R 1887 0 R 1888 0 R 1889 0 R 1890 0 R 1891 0 R 1892 0 R 1893 0 R 1894 0 R 1895 0 R 1896 0 R 1897 0 R 1898 0 R 1899 0 R 1900 0 R 1901 0 R 1902 0 R 1903 0 R 1904 0 R 1905 0 R 1906 0 R 1907 0 R 1908 0 R 1909 0 R 1910 0 R 1911 0 R 1912 0 R 1913 0 R 1914 0 R 1915 0 R 1916 0 R 1917 0 R 1918 0 R 1919 0 R 1920 0 R 1921 0 R 1922 0 R 1923 0 R 1924 0 R 1925 0 R 1926 0 R 1927 0 R 1928 0 R 1929 0 R 1930 0 R 1931 0 R 1932 0 R 1933 0 R 1934 0 R 1935 0 R 1936 0 R 1937 0 R 1938 0 R 1939 0 R 1940 0 R 1941 0 R ]
+>> endobj
+1819 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [299.37 628.742 311.325 642.69]
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1820 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.548 618.436 209.484 628.786]
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+1821 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [213.58 618.436 230.517 628.786]
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+1822 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 570.959 314.092 584.907]
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+1823 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 523.138 314.092 537.086]
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+1824 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 463.362 314.092 477.31]
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+1825 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 439.452 314.092 453.4]
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+1826 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 415.542 314.092 429.489]
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+1827 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 367.721 298.041 381.669]
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+1828 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 367.721 314.092 381.669]
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+1829 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 128.618 314.092 142.565]
+/A << /S /GoTo /D (page.10) >>
+>> endobj
+1830 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [448.256 640.697 460.211 654.645]
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+1831 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [464.307 640.697 476.262 654.645]
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+1832 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.357 640.697 492.313 654.645]
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+1833 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 640.697 508.364 654.645]
+/A << /S /GoTo /D (page.82) >>
+>> endobj
+1834 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [464.307 628.742 476.262 642.69]
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+1835 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.357 628.742 492.313 642.69]
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1836 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 628.742 508.364 642.69]
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+1837 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [448.256 616.787 460.211 630.735]
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+1838 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [464.307 616.787 476.262 630.735]
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+1839 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.357 616.787 492.313 630.735]
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+1840 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 616.787 508.364 630.735]
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+1841 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.357 604.832 492.313 618.78]
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+1842 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 604.832 508.364 618.78]
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+1843 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 592.877 508.364 606.824]
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+1844 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 580.922 508.364 594.869]
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+1845 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [448.256 568.966 460.211 582.914]
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+1846 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [464.307 568.966 476.262 582.914]
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+1847 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.357 568.966 492.313 582.914]
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+1848 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 568.966 508.364 582.914]
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+1849 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 557.011 508.364 570.959]
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1850 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [454.344 545.056 466.299 559.004]
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1851 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [470.395 545.056 487.331 559.004]
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+1852 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 545.056 508.364 559.004]
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+1853 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 533.101 508.364 547.049]
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+1854 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [459.325 521.146 471.28 535.093]
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+1855 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [475.376 521.146 487.331 535.093]
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+1856 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 521.146 508.364 535.093]
+/A << /S /GoTo /D (page.116) >>
+>> endobj
+1857 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 509.19 508.364 523.138]
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+1858 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [438.293 497.235 450.248 511.183]
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+1859 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [454.344 497.235 466.299 511.183]
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+1860 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [470.395 497.235 487.331 511.183]
+/A << /S /GoTo /D (page.140) >>
+>> endobj
+1861 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 497.235 508.364 511.183]
+/A << /S /GoTo /D (page.141) >>
+>> endobj
+1862 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 485.28 508.364 499.228]
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+1863 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [438.293 473.325 450.248 487.273]
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1864 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [454.344 473.325 466.299 487.273]
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+1865 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [470.395 473.325 487.331 487.273]
+/A << /S /GoTo /D (page.139) >>
+>> endobj
+1866 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 473.325 508.364 487.273]
+/A << /S /GoTo /D (page.141) >>
+>> endobj
+1867 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 461.37 508.364 475.318]
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+1868 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.357 449.415 492.313 463.362]
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+1869 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 449.415 508.364 463.362]
+/A << /S /GoTo /D (page.14) >>
+>> endobj
+1870 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 437.459 508.364 451.407]
+/A << /S /GoTo /D (page.10) >>
+>> endobj
+1871 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 425.504 508.364 439.452]
+/A << /S /GoTo /D (page.14) >>
+>> endobj
+1872 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.368 413.549 425.341 427.497]
+/A << /S /GoTo /D (page.3) >>
+>> endobj
+1873 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [429.437 413.549 441.392 427.497]
+/A << /S /GoTo /D (page.14) >>
+>> endobj
+1874 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [445.488 413.549 457.443 427.497]
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+1875 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [461.539 413.549 473.494 427.497]
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1876 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [477.59 413.549 489.545 427.497]
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+1877 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [493.641 413.549 505.596 427.497]
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1878 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.819 403.243 398.775 413.593]
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+1879 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.87 403.243 414.826 413.593]
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+1880 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.921 403.243 435.858 413.593]
+/A << /S /GoTo /D (page.141) >>
+>> endobj
+1881 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [439.954 403.243 456.89 413.593]
+/A << /S /GoTo /D (page.142) >>
+>> endobj
+1882 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.357 389.639 492.313 403.587]
+/A << /S /GoTo /D (page.14) >>
+>> endobj
+1883 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 389.639 508.364 403.587]
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+1884 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 377.684 508.364 391.631]
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+1885 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.357 365.728 492.313 379.676]
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+1886 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 365.728 508.364 379.676]
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+1887 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [459.325 353.773 471.28 367.721]
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+1888 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [475.376 353.773 487.331 367.721]
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+1889 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 353.773 508.364 367.721]
+/A << /S /GoTo /D (page.135) >>
+>> endobj
+1890 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [446.595 341.818 458.55 355.766]
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+1891 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [461.539 341.818 473.494 355.766]
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+1892 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [477.59 341.818 489.545 355.766]
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+1893 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [493.641 341.818 505.596 355.766]
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+1894 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.819 331.512 398.775 341.862]
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+1895 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [401.763 331.512 413.719 341.862]
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+1896 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.146 331.512 430.102 341.862]
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+1897 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [434.529 331.512 446.485 341.862]
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+1898 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [450.912 331.512 462.868 341.862]
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+1899 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [467.295 331.512 484.232 341.862]
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+1900 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [488.66 331.512 505.596 341.862]
+/A << /S /GoTo /D (page.115) >>
+>> endobj
+1901 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.819 319.557 403.756 329.907]
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+1902 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.852 319.557 424.788 329.907]
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+1903 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 305.953 508.364 319.9]
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+1904 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.368 293.997 425.341 307.945]
+/A << /S /GoTo /D (page.1) >>
+>> endobj
+1905 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [429.437 293.997 441.392 307.945]
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+1906 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [445.488 293.997 457.443 307.945]
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+1907 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [461.539 293.997 473.494 307.945]
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+1908 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [477.59 293.997 489.545 307.945]
+/A << /S /GoTo /D (page.89) >>
+>> endobj
+1909 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [493.641 293.997 505.596 307.945]
+/A << /S /GoTo /D (page.92) >>
+>> endobj
+1910 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.819 285.629 403.756 294.042]
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+1911 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [501.39 270.087 508.364 284.035]
+/A << /S /GoTo /D (page.1) >>
+>> endobj
+1912 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 258.132 508.364 272.08]
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+1913 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 246.177 508.364 260.124]
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+1914 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [448.256 222.266 455.229 236.214]
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+1915 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [459.325 222.266 471.28 236.214]
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+1916 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [475.376 222.266 487.331 236.214]
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+1917 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 222.266 508.364 236.214]
+/A << /S /GoTo /D (page.135) >>
+>> endobj
+1918 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [432.205 210.311 439.178 224.259]
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+1919 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [443.274 210.311 455.229 224.259]
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+1920 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [459.325 210.311 471.28 224.259]
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+1921 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [475.376 210.311 487.331 224.259]
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+1922 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 210.311 508.364 224.259]
+/A << /S /GoTo /D (page.135) >>
+>> endobj
+1923 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [432.205 198.356 439.178 212.304]
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+1924 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [443.274 198.356 455.229 212.304]
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+1925 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [459.325 198.356 471.28 212.304]
+/A << /S /GoTo /D (page.89) >>
+>> endobj
+1926 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [475.376 198.356 487.331 212.304]
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+1927 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 198.356 508.364 212.304]
+/A << /S /GoTo /D (page.135) >>
+>> endobj
+1928 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.357 186.401 492.313 200.349]
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+1929 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 186.401 508.364 200.349]
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1930 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 174.446 508.364 188.393]
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1931 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.357 162.491 492.313 176.438]
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+1932 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 162.491 508.364 176.438]
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1933 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [448.256 150.535 455.229 164.483]
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+1934 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [459.325 150.535 471.28 164.483]
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+1935 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [475.376 150.535 487.331 164.483]
+/A << /S /GoTo /D (page.92) >>
+>> endobj
+1936 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 150.535 508.364 164.483]
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+1937 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 138.58 508.364 152.528]
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+1938 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 126.625 508.364 140.573]
+/A << /S /GoTo /D (page.17) >>
+>> endobj
+1939 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [454.344 114.67 466.299 128.618]
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+1940 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [470.395 114.67 487.331 128.618]
+/A << /S /GoTo /D (page.115) >>
+>> endobj
+1941 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 114.67 508.364 128.618]
+/A << /S /GoTo /D (page.116) >>
+>> endobj
+1946 0 obj <<
+/D [1944 0 R /XYZ 152.694 705.06 null]
+>> endobj
+1943 0 obj <<
+/Font << /F8 596 0 R /F28 597 0 R /F31 600 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2043 0 obj <<
+/Length 2034
+/Filter /FlateDecode
+>>
+stream
+xÚå[Is¤6½ûWpJµ«ÆíËm*U™Tå–Ä·I4à6 èq\ùó Ú†‹Ü›3¹ØÐÒ{úöOzz?Þ@óÿûû›Ÿ±ôPsïþÁC‚
+u^¥ê¿2­bt’˜AÛ#¥áC’ù•EBŒ
+ÒÝö v5
+•µBØQ\•œûYQwãlø!þFœþC²+×YUeér'#4}ZJ{–UqºŽ×çó&.ŽÉå¾Â0ØøI=_ÊWŒ»FW;šËýˆq›"Ûå:ÅxÌ
+KÊÎáKÚ8Ì&ñšÙûâ©ñF¡†ö¬bAFä‚pÆ3æ;ÏyTèü³:ƒŒBEPk qṏBgëø#+}ÿݧAˆ8§AITUQ‘ûZz×uºH9;Ý$K7Úå&q¶)üüÑ⼤XˆÓØEfÊ€vºž£Iª¿7EÆéCvå¨æ¾ÀÛº»ªÖUÏØô=žüuY~P]W:‹#ÍÖ~â§A”øe•û‹h˜- \Óæ8RÍ<x£õÆÕ³Q䜦ÙXyxu6T,gÃ;6óÎA0ys_eìf,ô6*lº|õuž1Q»ÖäEkºF]G¶Üòª&ºÓk~r©2e‘qbçt,KÂÿž7¦˜¥Q%»mz¥ÆÓÀÎçË3Õ•U>iTÆaômDúÁ0L.ÒBs'9Sì}’»*ßUa´Þmþsiªµv¹ €&›®mÀ¹ÞMxyáK À–/
+I¤3'ª‡¢:øš¦À‹#›#¢ËW9̶Šø«µ‚=«É¬²âue5]ܾ6ÛצP~š<}+Y“m¿
+£‹ì¨Ž{ÿŽ2ŠÁ”øpk>¨“æÇÝSN˜yŠ(åVØŽ{`YÑÖ“w«B“õÉ̹g›ÏoׇæÒ๬Š¨
+-çÌÀT’Íl µ!Û–ÚüÜ2qn™Œ @¹B߯û§š®&±çÑ-¸C*iè¦ÙS…›&}³Õ
+`¸”Ymiªí”)í@‡”†A™ú[KÞȵ‹•øº­tï LÛúž™j’ã(ð‹S¤iWÆÈÀb0­ßü.ëxsÅWŒbs)e®8Äæ)GÐZ«ñÆ—5ïbÒ½‹»Ñ9û+Õ=¥Ò>’¨= RçÙ6—¢¾DÝ]„ðË%±Žk&¤õž"kÆ£¬îR¢î.†¨»‹kr¯1J¨ëR²]ˆýë’íï*ÒÝ¥õ„6$TÉîuù?úê~Ãa‹ºZ¶•À
+¿Ô é½~æ.!/­‘§>í­“êœ7Š%"‡xšÆ²~|ê¯m[ªÆ$7: µt¶t¾ŽùECeSÅkœ7hl¾2Nóí#3©õ’qЮ˜ÂÄT®Zûˆ€Ý]†º¦’@¢\u!;8%{Ç)L6ÁDJ£ó¬ßÈÒ™ö¿ÕõÚÙ
+endstream
+endobj
+2042 0 obj <<
+/Type /Page
+/Contents 2043 0 R
+/Resources 2041 0 R
+/MediaBox [0 0 612 792]
+/Parent 1947 0 R
+/Annots [ 1942 0 R 1948 0 R 1949 0 R 1950 0 R 1951 0 R 1952 0 R 1953 0 R 1954 0 R 1955 0 R 1956 0 R 1957 0 R 1958 0 R 1959 0 R 1960 0 R 1961 0 R 1962 0 R 1963 0 R 1964 0 R 1965 0 R 1966 0 R 1967 0 R 1968 0 R 1969 0 R 1970 0 R 1971 0 R 1972 0 R 1973 0 R 1974 0 R 1975 0 R 1976 0 R 1977 0 R 1978 0 R 1979 0 R 1980 0 R 1981 0 R 1982 0 R 1983 0 R 1984 0 R 1985 0 R 1986 0 R 1987 0 R 1988 0 R 1989 0 R 1990 0 R 1991 0 R 1992 0 R 1993 0 R 1994 0 R 1995 0 R 1996 0 R 1997 0 R 1998 0 R 1999 0 R 2000 0 R 2001 0 R 2002 0 R 2003 0 R 2004 0 R 2005 0 R 2006 0 R 2007 0 R 2008 0 R 2009 0 R 2010 0 R 2011 0 R 2012 0 R 2013 0 R 2014 0 R 2015 0 R 2016 0 R 2017 0 R 2018 0 R 2019 0 R 2020 0 R 2021 0 R 2022 0 R 2023 0 R 2024 0 R 2025 0 R 2026 0 R 2027 0 R 2028 0 R 2029 0 R 2030 0 R 2031 0 R 2032 0 R 2033 0 R 2034 0 R 2035 0 R 2036 0 R 2037 0 R 2038 0 R 2039 0 R 2040 0 R ]
+>> endobj
+1942 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 652.653 314.092 666.6]
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+1948 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 640.697 298.041 654.645]
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+1949 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 640.697 314.092 654.645]
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+1950 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 628.742 314.092 642.69]
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+1951 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 616.787 314.092 630.735]
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+1952 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 604.832 298.041 618.78]
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+1953 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 604.832 314.092 618.78]
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+1954 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 592.877 314.092 606.824]
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+1955 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [270.035 580.922 281.99 594.869]
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+1956 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 580.922 298.041 594.869]
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+1957 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 580.922 314.092 594.869]
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+1958 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 568.966 314.092 582.914]
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+1959 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 557.011 314.092 570.959]
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+1960 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 545.056 314.092 559.004]
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+1961 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 533.101 298.041 547.049]
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+1962 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 533.101 314.092 547.049]
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+1963 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 521.146 314.092 535.093]
+/A << /S /GoTo /D (page.135) >>
+>> endobj
+1964 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 509.19 314.092 523.138]
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+1965 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [281.105 497.235 293.06 511.183]
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+1966 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 497.235 314.092 511.183]
+/A << /S /GoTo /D (page.140) >>
+>> endobj
+1967 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 485.28 314.092 499.228]
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+1968 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 473.325 314.092 487.273]
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+1969 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 461.37 314.092 475.318]
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+1970 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 449.415 314.092 463.362]
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+1971 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 437.459 314.092 451.407]
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+1972 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 425.504 314.092 439.452]
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1973 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 413.549 314.092 427.497]
+/A << /S /GoTo /D (page.17) >>
+>> endobj
+1974 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 401.594 314.092 415.542]
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+1975 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 389.639 314.092 403.587]
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+1976 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 377.684 314.092 391.631]
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+1977 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 365.728 314.092 379.676]
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1978 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 353.773 314.092 367.721]
+/A << /S /GoTo /D (page.17) >>
+>> endobj
+1979 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 341.818 314.092 355.766]
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+1980 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 329.863 314.092 343.811]
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1981 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 317.908 298.041 331.856]
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+1982 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 317.908 314.092 331.856]
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+1983 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 305.953 314.092 319.9]
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+1984 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 293.997 314.092 307.945]
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+1985 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 282.042 314.092 295.99]
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+1986 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 270.087 293.06 284.035]
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+1987 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 270.087 314.092 284.035]
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+1988 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 258.132 293.06 272.08]
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+1989 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 258.132 314.092 272.08]
+/A << /S /GoTo /D (page.115) >>
+>> endobj
+1990 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [244.021 246.177 250.995 260.124]
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+1991 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [255.091 246.177 272.028 260.124]
+/A << /S /GoTo /D (page.115) >>
+>> endobj
+1992 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [276.123 246.177 293.06 260.124]
+/A << /S /GoTo /D (page.116) >>
+>> endobj
+1993 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 246.177 314.092 260.124]
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+1994 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 234.222 293.06 248.169]
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+1995 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 234.222 314.092 248.169]
+/A << /S /GoTo /D (page.116) >>
+>> endobj
+1996 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 222.266 293.06 236.214]
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+1997 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 222.266 314.092 236.214]
+/A << /S /GoTo /D (page.116) >>
+>> endobj
+1998 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 210.311 293.06 224.259]
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+1999 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 210.311 314.092 224.259]
+/A << /S /GoTo /D (page.116) >>
+>> endobj
+2000 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 198.356 298.041 212.304]
+/A << /S /GoTo /D (page.16) >>
+>> endobj
+2001 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 198.356 314.092 212.304]
+/A << /S /GoTo /D (page.96) >>
+>> endobj
+2002 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 186.401 314.092 200.349]
+/A << /S /GoTo /D (page.17) >>
+>> endobj
+2003 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [265.054 174.446 272.028 188.393]
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+2004 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [276.123 174.446 293.06 188.393]
+/A << /S /GoTo /D (page.116) >>
+>> endobj
+2005 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 174.446 314.092 188.393]
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+2006 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 162.491 293.06 176.438]
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+2007 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 162.491 314.092 176.438]
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+2008 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 150.535 314.092 164.483]
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+2009 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [253.984 138.58 260.958 152.528]
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+2010 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [265.054 138.58 272.028 152.528]
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+2011 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [276.123 138.58 293.06 152.528]
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+2012 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 138.58 314.092 152.528]
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+2013 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [281.105 126.625 293.06 140.573]
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+2014 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 126.625 314.092 140.573]
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+2015 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 114.67 314.092 128.618]
+/A << /S /GoTo /D (page.16) >>
+>> endobj
+2016 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 652.653 508.364 666.6]
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2017 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 640.697 508.364 654.645]
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2018 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 628.742 508.364 642.69]
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+2019 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 616.787 508.364 630.735]
+/A << /S /GoTo /D (page.116) >>
+>> endobj
+2020 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 604.832 508.364 618.78]
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+2021 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 592.877 508.364 606.824]
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+2022 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.357 580.922 492.313 594.869]
+/A << /S /GoTo /D (page.17) >>
+>> endobj
+2023 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 580.922 508.364 594.869]
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+2024 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 568.966 508.364 582.914]
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+2025 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 557.011 508.364 570.959]
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+2026 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [464.307 545.056 471.28 559.004]
+/A << /S /GoTo /D (page.6) >>
+>> endobj
+2027 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [475.376 545.056 487.331 559.004]
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+2028 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 545.056 508.364 559.004]
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+2029 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.357 533.101 492.313 547.049]
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+2030 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 533.101 508.364 547.049]
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+2031 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 485.28 508.364 499.228]
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+2032 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 473.325 508.364 487.273]
+/A << /S /GoTo /D (page.14) >>
+>> endobj
+2033 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 413.549 508.364 427.497]
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+2034 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.357 401.594 492.313 415.542]
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+2035 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 401.594 508.364 415.542]
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2036 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [501.39 377.684 508.364 391.631]
+/A << /S /GoTo /D (page.6) >>
+>> endobj
+2037 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 319.9 508.364 333.848]
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+2038 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 272.08 508.364 286.027]
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+2039 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [435.249 152.528 447.204 166.476]
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2040 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [451.3 152.528 463.255 166.476]
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+2044 0 obj <<
+/D [2042 0 R /XYZ 152.694 705.06 null]
+>> endobj
+2041 0 obj <<
+/Font << /F28 597 0 R /F8 596 0 R /F31 600 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2144 0 obj <<
+/Length 2306
+/Filter /FlateDecode
+>>
+stream
+xÚå[IsÛF¾ëWàHUY~ݯ·œ˜©²S•CR3ÑÍÎ!Šn©Åã??@CÈȦ@Ò5s‘
+`¿ïíx2Nxòë÷¿ÿq}ñÓ'aÇœ:¹¾K@I¦&Z&¤J®GÉçÁ˜ÍG¿ÿr=\ßg7“›éd1ÎÓåý·Ë¿®ûéSã „a@òêQvyå4
+~L“?/þÙÅr)™Û<fÏëm>ºYš#ñ¡À[ÍÇñ¿~½H>_âˆþÿ•mŠÔÖ&ÑÓ ñ’³’+äbT?’㤔ÀšgÓô9€Ö1 ø´­òqŠoʇNøÐþ€”8в[ µ­í¤!ºA¡ü@ŸHI—
+ÛE§œf\÷#:eS¨ÖéÍÃ4͇÷‹ÅßÛ¸0¡ÝAÂ+µRÞÍ"èÙ”B×D¶Ó{“& .¢Ðu: e;u«>/¤\}[rÝjŒ?ûŸ?œÓÅâa Cãø&&ÑÕW+ͯ>ij)a +«Þ¤¡ªÃ§nÿ”OÈ8曆4àoIë…ÛÉ9ƒn
+$gÈN5AÕÇkù­»=X}÷æñ“ù({þßÈ '£lq‡Ü¼¥#8Ä?Ç:\tÑ÷‰ø²^›rç ¸fÃí5›ŠºµêYý¼gݳoNׯf—®½ÿ#œaðÞ~21KƒK„ÕL×ýä|ý¼Gïž&`»ußÑ°Eñ/û¡—‹6žÜ*ZsL"©'ˆñÞÆp I fàÈ)á>·”°©逭‰©¢ÔŠ3£Oév»@[Ñ“º'YKËlÝI.½*9Õá8N³o‡ù%#eI±ú 4³uÃø@>,вD††
+ŒÏDÂ`„*Û™}´¿ ³îMcÿ㞾ͷŸ?Ò2ØW µúʆå2Ÿ{3¯Ñž¡gÙËmNv÷Ÿ<ÕçFYN œÅfM1Y™Èf•u±Úù–va ãVÐ}œ9ë•Óϼ(¿éWxxÐ4À8Æ…7ô66Kªõø‹eŒ—W”`•]Áª¿\Ò|;MW«j8°X®'‹y13À]Ùè.…üÉÛ3’Òa6/âèpõÍQú‚íNU“ˆ¥¯?›L6‚´ hEH7“‘¹2õØ%aRndC¤DBƒ2¯ó‡Y@4äò œÃi•ÞÊ¡êÐSÒ1#°=%S'ßèõôë*» ²I_°KS…ƒZS‹K¯©íh+bËWEœÙðÒc ·2ÇlhIÆó$h }­T´ï ‹ŠÙlDlþÞÔA~’*yE*ïȪN‹|ãÃ"˜¡ d“èC*‚´R”@A¬ûM·KH)#ÕHu•}8Ïï³éòôûP-ŒtežšmMÍóY¶Z¥ãìd£à±*j ü˜ÍW”ÿÎÒ|<™:<Ϩì:«îá]Ûè}rZúÅD%ËEŒX\ê—KÁ?TCgRFº’Jå]º`[¸-R—kÙ ×ÿÒý¦¤¿ÓSPÇíwpaÕ«žÜ>ëy™ÎGéÝ:ˤ%:å[¢£Š¬­wuÄ•
+àÆFY‘ÙÒî(Ú VµÃÀƒÄV'‰miSœ‚X牕Ð\L"m&ÓD,ø8ð)„ªèµÈ€Ý W“ÿd-å“;Nùd®-•Œ6ªÓ·rû»áC¬Aì몠|ºv8ܨïôÃøÍ$ºtô·…Ê_a™,lddc\Ô]:]…‹
+òȱŸõ [¬v¹È\QðØ™`ôZt{'Ï‚¦Y¦_% ܺZQ@c½^&àeÿS« Õe6j#p®~^(Qr½Y<Íå^äz`K’CЙ6¸ª›$¯²3§~žp³oÒפšm…/\ñÀ‡>*×-ìIU iƒT‡#Š¹fæÝü:'—N3Ê”b
+GnU8¯KóÀ‘ÒL( ­Ÿ!jz§×ÿQRÛ‚
+endstream
+endobj
+2143 0 obj <<
+/Type /Page
+/Contents 2144 0 R
+/Resources 2142 0 R
+/MediaBox [0 0 612 792]
+/Parent 1947 0 R
+/Annots [ 2045 0 R 2046 0 R 2047 0 R 2048 0 R 2049 0 R 2050 0 R 2051 0 R 2052 0 R 2053 0 R 2054 0 R 2055 0 R 2056 0 R 2057 0 R 2058 0 R 2059 0 R 2060 0 R 2061 0 R 2062 0 R 2063 0 R 2064 0 R 2065 0 R 2066 0 R 2067 0 R 2068 0 R 2069 0 R 2070 0 R 2071 0 R 2072 0 R 2073 0 R 2074 0 R 2075 0 R 2076 0 R 2077 0 R 2078 0 R 2079 0 R 2080 0 R 2081 0 R 2082 0 R 2083 0 R 2084 0 R 2085 0 R 2086 0 R 2087 0 R 2088 0 R 2089 0 R 2090 0 R 2091 0 R 2092 0 R 2093 0 R 2094 0 R 2095 0 R 2096 0 R 2097 0 R 2098 0 R 2099 0 R 2100 0 R 2101 0 R 2102 0 R 2103 0 R 2104 0 R 2105 0 R 2106 0 R 2107 0 R 2108 0 R 2109 0 R 2110 0 R 2111 0 R 2112 0 R 2113 0 R 2114 0 R 2115 0 R 2116 0 R 2117 0 R 2118 0 R 2119 0 R 2120 0 R 2121 0 R 2122 0 R 2123 0 R 2124 0 R 2125 0 R 2126 0 R 2127 0 R 2128 0 R 2129 0 R 2130 0 R 2131 0 R 2132 0 R 2133 0 R 2134 0 R 2135 0 R 2136 0 R 2137 0 R 2138 0 R ]
+>> endobj
+2045 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 628.742 314.092 642.69]
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+2046 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 604.832 298.041 618.78]
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+2047 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 604.832 314.092 618.78]
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+2048 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 568.966 314.092 582.914]
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+2049 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 473.325 314.092 487.273]
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2050 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 461.37 314.092 475.318]
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+2051 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 449.415 314.092 463.362]
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+2052 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [270.035 437.459 277.009 451.407]
+/A << /S /GoTo /D (page.6) >>
+>> endobj
+2053 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [281.105 437.459 293.06 451.407]
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+2054 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 437.459 314.092 451.407]
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+2055 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [226.864 425.504 233.837 439.452]
+/A << /S /GoTo /D (page.3) >>
+>> endobj
+2056 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [237.933 425.504 249.888 439.452]
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+2057 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [253.984 425.504 265.939 439.452]
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2058 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [270.035 425.504 281.99 439.452]
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2059 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 425.504 298.041 439.452]
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+2060 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 425.504 314.092 439.452]
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2061 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 413.549 314.092 427.497]
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+2062 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [260.072 401.594 267.046 415.542]
+/A << /S /GoTo /D (page.3) >>
+>> endobj
+2063 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [271.142 401.594 283.097 415.542]
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2064 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 401.594 298.041 415.542]
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+2065 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 401.594 314.092 415.542]
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2066 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 389.639 314.092 403.587]
+/A << /S /GoTo /D (page.16) >>
+>> endobj
+2067 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [267.268 377.684 279.223 391.631]
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2068 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [283.319 377.684 295.274 391.631]
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+2069 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [299.37 377.684 311.325 391.631]
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+2070 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.548 367.378 204.503 377.728]
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+2071 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.322 367.378 220.277 377.728]
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+2072 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.096 367.378 236.051 377.728]
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+2073 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [239.87 367.378 251.826 377.728]
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2074 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [255.645 367.378 272.581 377.728]
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+2075 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [276.4 367.378 293.337 377.728]
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+2076 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 367.378 314.092 377.728]
+/A << /S /GoTo /D (page.141) >>
+>> endobj
+2077 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 353.773 314.092 367.721]
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+2078 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 341.818 314.092 355.766]
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2079 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [275.016 329.863 281.99 343.811]
+/A << /S /GoTo /D (page.3) >>
+>> endobj
+2080 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 329.863 298.041 343.811]
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+2081 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 329.863 314.092 343.811]
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+2082 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 317.908 314.092 331.856]
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+2083 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 198.356 314.092 212.304]
+/A << /S /GoTo /D (page.134) >>
+>> endobj
+2084 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 174.446 314.092 188.393]
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+2085 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [299.37 138.58 311.325 152.528]
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+2086 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.548 128.275 204.503 138.625]
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+2087 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.599 128.275 220.554 138.625]
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+2088 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 114.67 298.041 128.618]
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+2089 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 114.67 314.092 128.618]
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2090 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 616.787 508.364 630.735]
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+2091 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 568.966 508.364 582.914]
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+2092 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [443.274 463.362 455.229 477.31]
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+2093 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [459.325 463.362 471.28 477.31]
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+2094 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [475.376 463.362 487.331 477.31]
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+2095 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 463.362 508.364 477.31]
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+2096 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [450.469 391.631 457.443 405.579]
+/A << /S /GoTo /D (page.3) >>
+>> endobj
+2097 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [461.539 391.631 473.494 405.579]
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+2098 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [477.59 391.631 489.545 405.579]
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2099 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [493.641 391.631 505.596 405.579]
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2100 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.819 381.326 398.775 391.676]
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+2101 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.87 381.326 414.826 391.676]
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2102 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 367.721 508.364 381.669]
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2103 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 343.811 508.364 357.758]
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2104 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [464.307 307.945 476.262 321.893]
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+2105 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.357 307.945 492.313 321.893]
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+2106 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 307.945 508.364 321.893]
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+2107 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [470.395 295.99 487.331 309.938]
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+2108 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 295.99 508.364 309.938]
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+2109 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [470.395 284.035 487.331 297.983]
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+2110 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 284.035 508.364 297.983]
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+2111 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [501.39 272.08 508.364 286.027]
+/A << /S /GoTo /D (page.6) >>
+>> endobj
+2112 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [395.121 260.124 407.077 274.072]
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+2113 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [411.172 260.124 423.128 274.072]
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+2114 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [427.223 260.124 439.178 274.072]
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+2115 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [443.274 260.124 455.229 274.072]
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+2116 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [459.325 260.124 471.28 274.072]
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+2117 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [475.376 260.124 487.331 274.072]
+/A << /S /GoTo /D (page.93) >>
+>> endobj
+2118 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 260.124 508.364 274.072]
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+2119 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.357 248.169 492.313 262.117]
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+2120 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 248.169 508.364 262.117]
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+2121 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 236.214 508.364 250.162]
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+2122 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [501.39 224.259 508.364 238.207]
+/A << /S /GoTo /D (page.6) >>
+>> endobj
+2123 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 212.304 508.364 226.252]
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+2124 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 200.349 508.364 214.296]
+/A << /S /GoTo /D (page.89) >>
+>> endobj
+2125 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [470.395 188.393 487.331 202.341]
+/A << /S /GoTo /D (page.135) >>
+>> endobj
+2126 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 188.393 508.364 202.341]
+/A << /S /GoTo /D (page.138) >>
+>> endobj
+2127 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [443.274 176.438 455.229 190.386]
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+2128 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [459.325 176.438 471.28 190.386]
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+2129 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [475.376 176.438 487.331 190.386]
+/A << /S /GoTo /D (page.92) >>
+>> endobj
+2130 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 176.438 508.364 190.386]
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+2131 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 164.483 508.364 178.431]
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2132 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 152.528 508.364 166.476]
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+2133 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 140.573 508.364 154.521]
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+2134 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [449.363 128.618 466.299 142.565]
+/A << /S /GoTo /D (page.109) >>
+>> endobj
+2135 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [470.395 128.618 487.331 142.565]
+/A << /S /GoTo /D (page.111) >>
+>> endobj
+2136 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 128.618 508.364 142.565]
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+2137 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [470.395 116.662 487.331 130.61]
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+2138 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 116.662 508.364 130.61]
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+2145 0 obj <<
+/D [2143 0 R /XYZ 152.694 705.06 null]
+>> endobj
+2142 0 obj <<
+/Font << /F28 597 0 R /F8 596 0 R /F31 600 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2204 0 obj <<
+/Length 2081
+/Filter /FlateDecode
+>>
+stream
+xÚÝ[KsãD¾çWèèT‘azÞs3»PXr[8(¶œñ I^váÏÓz9‘<#[²ì,œ¤È£™¯§__÷(4x hðý ­®ßÞß|ý–™À«˜
+îhNØ@IM—Áý<x? ·i²Ú’ù÷¿ßÿøõÛ—/HK¸±8[1’ÜÞqÆž/8£I¾b~óîû›àýáv
+P0Óìï`„Ú=îâyD²È!•’„+=Dª®!ËN *@ fË0M£”̳ËKà…®:×°§Û¯p!‚?µ6¨+ %jU"™'ñÇ(9Ä+€3²¹ 6%Õ)X¶¡ŽÅ2úsMfËÃÁ9À.$[§‚X·KTÀr|ø¼’$Z¸}â*f%ìéfÕFfŸ/‡úËѽ±/³OóÍÌ|xn87}èÞé ”#ú”y”  .{¾(çì~ ¡õ"Ù¬³ÑìÝ‹ÏJ:a¦'Ù8Â5<öô˜Äó×OjÐ?!#ö]/GÃîŵ¡d_êGyo‘VáSôf£±$/@‰U}Ebª¿HŸÃ$‹gË í%<ý,ÒñÒÇðº¹Òƒ·ŠIë0{ˆ^‡$ùË+E‹‹•ÂÙâñZé­Sz'¶Í6‹7ëÔ¡M—ÓÇñ+ºÕQâk
+“†î2ôõ…áC„ùc½»¬l[G¼Ãe[ïÞ|óÝÏo¾øzHžîöU K¢lÙhgBõ¶³,Zm—a‘p›zH¢¼<§:®ˆ
+‰{â-äYù )Ða-†ñp±ˆ—Ñ!`Ž¶f¹°df"åW··‘º¸i«'ªPýʈ‚#†pÙÂ?ÊC2·ÄȦÁçßþt˜I"AŽV|bók¸Ä©0ª oj8t€.¢á².Ü9Ään,ÊbïÍýÍŸ7PÙ³†€d§– ŠƒÙêæýï4˜ã?”pk‚¿Š¡«
+ÍÝÃôèù¢0Ýúw²ñÍ&‹×Ά´Ì£½BÇ‘w¡ÞÌåÂÖæà˜SÚÕ…Rj‰é´mî~ú’‡{iú"ûÒ=WèqL†ã‰0­V @7¥)š)p®ö‘.'ÐÂÒ!B1H#°9‡µɈÔg’Dbøn°iؾ³DUÙYºS‚èvo‰×ß\5PrdDT s’%»É"*¨¼&ÕD À©8ò´&¹âÏ 0¼åû4¥”cã”Dé¡Êæã4V~I©´¢­l×!‹%‚]µ>ÂÙvÚcÒ§H©ò¢žñº›‚·æ™tÖM¼­z—w-²Åløóëxk¼}Lë­7Ytå6Wg‹£wdT=Z`ꪲlŒŠš‚1ª;¬®ÂäéJtÌÝ‹/V“ݲaÌù3º~¶n^Ç(Æ­ï¬,/Ÿ—‡çåå åã¿£«zžctr Æ´:\/êÃ<ЀÞo:è} Á¿ë§øwh€(Ú
+4 S
+äh”à ³(¤AN¦ NÅSÍþµT´Nêicëc&©T/7ÙN·Éf6ýÁÓd¶BSœE9µV­ï…üáU!›~So{ä’e<ÕªW·aúz"ÝÙ²ç@ï©j‚õuF®
+endstream
+endobj
+2203 0 obj <<
+/Type /Page
+/Contents 2204 0 R
+/Resources 2202 0 R
+/MediaBox [0 0 612 792]
+/Parent 1947 0 R
+/Annots [ 2139 0 R 2140 0 R 2141 0 R 2146 0 R 2147 0 R 2148 0 R 2149 0 R 2150 0 R 2151 0 R 2152 0 R 2153 0 R 2154 0 R 2155 0 R 2156 0 R 2157 0 R 2158 0 R 2159 0 R 2160 0 R 2161 0 R 2162 0 R 2163 0 R 2164 0 R 2165 0 R 2166 0 R 2167 0 R 2168 0 R 2169 0 R 2170 0 R 2171 0 R 2172 0 R 2173 0 R 2174 0 R 2175 0 R 2176 0 R 2177 0 R 2178 0 R 2179 0 R 2180 0 R 2181 0 R 2182 0 R 2183 0 R 2184 0 R 2185 0 R 2186 0 R 2187 0 R 2188 0 R 2189 0 R 2190 0 R 2191 0 R 2192 0 R 2193 0 R 2194 0 R 2195 0 R 2196 0 R 2197 0 R 2198 0 R 2199 0 R 2200 0 R 2201 0 R ]
+>> endobj
+2139 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [255.091 652.653 272.028 666.6]
+/A << /S /GoTo /D (page.111) >>
+>> endobj
+2140 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [276.123 652.653 293.06 666.6]
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+2141 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 652.653 314.092 666.6]
+/A << /S /GoTo /D (page.130) >>
+>> endobj
+2146 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [277.23 640.697 294.167 654.645]
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+2147 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 640.697 314.092 654.645]
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+2148 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [307.118 628.742 314.092 642.69]
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+2149 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 616.787 314.092 630.735]
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2150 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 604.832 314.092 618.78]
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+2151 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [307.118 592.877 314.092 606.824]
+/A << /S /GoTo /D (page.6) >>
+>> endobj
+2152 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 580.922 314.092 594.869]
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+2153 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 568.966 314.092 582.914]
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+2154 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [307.118 557.011 314.092 570.959]
+/A << /S /GoTo /D (page.7) >>
+>> endobj
+2155 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [307.118 545.056 314.092 559.004]
+/A << /S /GoTo /D (page.7) >>
+>> endobj
+2156 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [307.118 533.101 314.092 547.049]
+/A << /S /GoTo /D (page.7) >>
+>> endobj
+2157 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 521.146 298.041 535.093]
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+2158 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 521.146 314.092 535.093]
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+2159 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 509.19 314.092 523.138]
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+2160 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [281.105 497.235 293.06 511.183]
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+2161 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 497.235 314.092 511.183]
+/A << /S /GoTo /D (page.103) >>
+>> endobj
+2162 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [276.123 485.28 293.06 499.228]
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+2163 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 485.28 314.092 499.228]
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+2164 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 473.325 314.092 487.273]
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+2165 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 461.37 314.092 475.318]
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+2166 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 449.415 314.092 463.362]
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+2167 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 437.459 314.092 451.407]
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2168 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 425.504 314.092 439.452]
+/A << /S /GoTo /D (page.14) >>
+>> endobj
+2169 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 413.549 314.092 427.497]
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+2170 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 401.594 314.092 415.542]
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+2171 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [307.118 389.639 314.092 403.587]
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+2172 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 377.684 314.092 391.631]
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2173 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [307.118 365.728 314.092 379.676]
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+2174 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 353.773 314.092 367.721]
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+2175 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 293.997 314.092 307.945]
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+2176 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 270.087 314.092 284.035]
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2177 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 258.132 298.041 272.08]
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+2178 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 258.132 314.092 272.08]
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2179 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 234.222 314.092 248.169]
+/A << /S /GoTo /D (page.38) >>
+>> endobj
+2180 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [222.989 210.311 234.944 224.259]
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+2181 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [239.04 210.311 250.995 224.259]
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2182 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [255.091 210.311 267.046 224.259]
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+2183 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [271.142 210.311 283.097 224.259]
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2184 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 210.311 298.041 224.259]
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+2185 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 210.311 314.092 224.259]
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+2186 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [249.003 150.535 260.958 164.483]
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+2187 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [440.784 616.787 457.72 630.735]
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+2188 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [429.437 604.832 441.392 618.78]
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+2189 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [445.488 604.832 457.443 618.78]
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2190 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [461.539 604.832 473.494 618.78]
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+2191 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [477.59 604.832 489.545 618.78]
+/A << /S /GoTo /D (page.61) >>
+>> endobj
+2192 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [493.641 604.832 505.596 618.78]
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+2193 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.819 596.463 403.756 604.876]
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+2194 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 557.011 508.364 570.959]
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+2195 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.357 521.146 492.313 535.093]
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2196 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 521.146 508.364 535.093]
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+2197 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 401.594 508.364 415.542]
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+2198 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 270.087 508.364 284.035]
+/A << /S /GoTo /D (page.82) >>
+>> endobj
+2199 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [440.784 234.222 457.72 248.169]
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+2200 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [440.784 186.401 457.72 200.349]
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+2201 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [440.784 138.58 457.72 152.528]
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+2205 0 obj <<
+/D [2203 0 R /XYZ 152.694 705.06 null]
+>> endobj
+2202 0 obj <<
+/Font << /F28 597 0 R /F8 596 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2228 0 obj <<
+/Length 2214
+/Filter /FlateDecode
+>>
+stream
+xÚÝZMsãƽëWਭ
+ÇÓó=7:®ì&>9kUù°ñ"AŠµÁ€Ð~Tþ|>E!Ùå!B÷¼é~ݯ<ZE<úpëϿßÝüð^¸È3o„‰î–iÉŒW‘Ñ– ©£»Eôéö?$Õ2M¶Ùã,Ëât:»ßgélž-ñÕ»ßï~þá}ëÒ0Ë= ÿ, éü¦›ÜÝü÷†ð5(ž3Å%ìhæEóÇ›O¿óhŽ8“ÞE_‹[#£…Æå&úõæߥχö$á~,¢åòßr“Ñ„¾8•_0¯«ß¤ uêyÉ´ÂÊ•dΙK=
+£(%\;ƒâC<[¬·«S 1Ÿ[¾³w)DëCüEŸÂðâR0N™Ü{«¯A\hx$Md1ikÀ'RJ`ËØ
+íÇ_h;Œ-÷LÑl¿®ÙC D•fܸ:Düʘá0@ò îžlÚ¡Åb œ«H{#×-€Æ“,S¦…³
+VSÁ¬Ò—mï4Þ.ÂAùpÿ*We§«Cêå‰«Ý 
+‡?4$G^ÒEYæñ!U,Ê\»Yü-;[XÉjùâÂú9þ¾Ÿv×Õv·<Ôñ Š‘¥AǸ¦QØx"³)ìòãìs¼Ü>ÎÒÏ…e$õ¡{3Zêq4Âý8š.ï t—2.ïØÓ°ã^ðÇ!rHƒ¸ðŽéŽòùË?ý:8FŒwÝ hI> g˜é’Ï»dŸÕ2o¿›Í_¹ÏÁ%u÷9ÂJ&F¶vÌv Û]ÿy Õ"ÍH‹†Òu¼Cƒ|üøã/ÓÁÊÀóne uÆ™6µî6‘ÝÂ@@_äÛ5
+†hœïÀpgO»
+ O'‹·¯ZÊóŸ]Ê3ôÚÀÃýô[6¤É‹×¼c×yÝ”>Û4\’i$†ðkÞ™Áo\ÊO(,N®úVðB9–ßZ_>‰5måü¤¸Ý¯ ·»æѽqñ­¶ýŠÇ„·Tìm=Á¥ÚƳÅC¼^=„Fè¾µÝÒÖC;ü¸w<‘F¥oµ¦"„¨çا`=îó
+ýÚtžðÊÁ–¥Ú”%[m¯õ{+6w¤,r–i~¦Vé&È¥;¦íæ>r)Ô`\½a#7¨Õè‘Êéàf¼É*« ±ÏA~Ù¥ËÏÍz”æ°–:½Äž{Pšpÿ#(Ɇxºž‡I¢|ì©Ér¹ -ÿZ1I¼›­â·ïñ/m¯Û¯y5JyâP³ û'%su &ÝF Àÿ<áW§
+endstream
+endobj
+2227 0 obj <<
+/Type /Page
+/Contents 2228 0 R
+/Resources 2226 0 R
+/MediaBox [0 0 612 792]
+/Parent 1947 0 R
+/Annots [ 2206 0 R 2207 0 R 2208 0 R 2209 0 R 2210 0 R 2211 0 R 2212 0 R 2213 0 R 2214 0 R 2215 0 R 2216 0 R 2217 0 R 2218 0 R 2219 0 R 2220 0 R 2221 0 R 2222 0 R 2223 0 R 2224 0 R 2225 0 R ]
+>> endobj
+2206 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [246.512 568.966 263.449 582.914]
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+2207 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 473.325 314.092 487.273]
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2208 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [249.003 449.415 260.958 463.362]
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+2209 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [249.003 377.684 260.958 391.631]
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+2210 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 198.356 314.092 212.304]
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+2211 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [493.641 535.093 505.596 549.041]
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2212 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.819 526.725 398.775 535.138]
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2213 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 499.228 508.364 513.176]
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2214 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [477.59 439.452 489.545 453.4]
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+2215 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [493.641 439.452 505.596 453.4]
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+2216 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.819 431.083 403.756 439.496]
+/A << /S /GoTo /D (page.116) >>
+>> endobj
+2217 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 391.631 508.364 405.579]
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+2218 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 367.721 508.364 381.669]
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+2219 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 343.811 508.364 357.758]
+/A << /S /GoTo /D (page.135) >>
+>> endobj
+2220 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 331.856 508.364 345.803]
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2221 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 307.945 508.364 321.893]
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+2222 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 214.296 508.364 228.244]
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+2223 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 166.476 508.364 180.423]
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+2224 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 130.61 508.364 144.558]
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+2225 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 118.655 508.364 132.603]
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+2229 0 obj <<
+/D [2227 0 R /XYZ 152.694 705.06 null]
+>> endobj
+2226 0 obj <<
+/Font << /F28 597 0 R /F8 596 0 R /F31 600 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2259 0 obj <<
+/Length 2132
+/Filter /FlateDecode
+>>
+stream
+xÚÕZÉnãF½û+x”¨ÓûrSd² Ä·I´DÛœhaDjìA~>Å­EREJ´eE¹Ø4Mv¿ªîzýªŠ4x hðý ­~{wóõnGœæ:¸{˜D;he*¸['0!Ÿ¶ÑÃíŸw?}ý¡ù¸`D:cÏ‘Û©à¼õK`7ÏøˆÓl¨Ò%´–)Ó
+Ü”1âTÓ”4 çÑ¡1R)íûsìu
+„§}4´}PA1”X©Û{ˆ;£O„RÀ@ùS*´ßn‹Íí”ÛÉ|·ŠÖ·p‘•@æË0MsWQ=Ä:÷$k±ŒùUÿ ¹¿¥;ù…©‚µïÐ)“tÔ„À1’ Ù€ûÈ"{A¶¹ B˜wbíAJîøî VJ`¸)iö妳HƒEæueÑ YŠáäi{;ߊ›$‹7ë2à,qµãí,˦ F#ÝM~pöQ©>öÉ}3‹Öáý2š-±ýËp@Su( b­êN+Y¾#XsN ç=8wÊaNx»x÷GŒŽ€EµÕ‡àâp?®¯BåNS…ÁïÓ51B¦\ÅÔ+¡ŸQ¨šT0ŽÙSaDì™Í7«$Ìâûxcäà@ËבƒÍÌ(†§Ãó/£ôùˆÖp.{ &<%³«J'Ê œõþ…?-6q5
+61¸a›>ÇÙüé¢f5¸\©‘ÔÀ‡³–\Ò-#·Ñçh›F«pû¯ß¶Úç4I3i`ÃdÏ›ùf¹[­¯éîØÊ™¶7'HŽ  h{w6c.º|vÄÞ0I@¹Ç/› ,_Á†â)FÏŠüøðé»—8ÍÒ÷@X»”V ¦åqp­€^­6Ø^‘²O}>Ïyšu¼æ\‡;±šYæ_¾¹›¥;&פœ¾2H kžC$F–½—Œ)OxjЃ­œùìãrã¢ô4bÿæÞ1Rù¶Nê Õš:C “lÇE‚SæOaáÏf1ªL¯VÑ"3ŒÑj¯|‰ISÍ—Ϋ)+¬\Û!¦tn"—2¿´Å¥ÊE}Ô”¨î‚¶¨¢s…/ÓÀÜcÊñºÖ^ Òaþ
+±ÒÐP/2&cÿ1•VÕóÈl‹É„!Ò°ÿ°”Zþo N‡‹• ×oq¿
+Ï8X‡«èÒdsšX(ˆB ŸýMfÒ²¬<°DY*ùîîæïVáæ E Ä9 æ«›Ò`ÿ„Ø&ÂÙà¹xt0@ÄsªY¿ßüZ¶-Z™Ÿ5„ZCAÈÕ¦Õ\@Êw¢€m¶Ç=-‚3K¿æ~”ãçIŸb['»ìÿI#¼-j»¿ZRÎ %q®!só‡5!£‚pŽt.õŒõª‡¿«×ÏgÑv¯#Ìá²7W?ZDQ2o-ˆê¬tÒô&èñ’¥QÒ´ü­A˹¾E¡]¯Ôá¶Íçô̽ÂsìÚ¢Î2dL¯0ÎzêLgÔôJ8 HîûZø†Ö¦·Š¤êÊ¢ÕéŽ70¯eu*ayûX^·³€O}¦Q¨Ðº³ÕÙÀ±ªWoag)àÌiv¡JX3Ö²ZÂZV÷ÿ¬ðzX؆
+žpžRõ@c_Ga}²Â­THÍžÔµKÞ?õ”¼’û~ša]Ò‹°R^€eZ«à‡C?ŸæÉå?º8•HÕ(KV›ëµdÔç#Ÿ6÷¸X>w­ç´úIzšmò¼Ž0ÜÀl‘tÓix½kiÆ­e†×–™‚öÔÌ´Ç
+„ÐD
+Û°5I®6õQt7þ]oG1èˆo"~F"%ë',gïŸì½Sù¯P˜Bsr3kl™=K£y~
+ ÛAÅ«ÚAãì(>Š°Ög'Öùr‡u­¶Šîö|n'„£¾­âÄÑK7Á>Ôh/É`«Óo€ñãn‹p€RDÒS¿Á(Št_Q`Ì'D5<( ·áã6LžÎã±¢Êeݾiäô8%è¥Å'Kî?`Œ7U…úš­,w1^ë‡ßdÊ’}•Æ-"D\•îòKåïZŽI
+I´Q³ Þ˜{KCQ
+´bÝÁ(Hˆ1MŒ•,$ñ
+ö¿5à t
+endstream
+endobj
+2258 0 obj <<
+/Type /Page
+/Contents 2259 0 R
+/Resources 2257 0 R
+/MediaBox [0 0 612 792]
+/Parent 1947 0 R
+/Annots [ 2230 0 R 2231 0 R 2232 0 R 2233 0 R 2234 0 R 2235 0 R 2236 0 R 2237 0 R 2238 0 R 2239 0 R 2240 0 R 2241 0 R 2242 0 R 2243 0 R 2244 0 R 2245 0 R 2246 0 R 2247 0 R 2248 0 R 2249 0 R 2250 0 R 2251 0 R 2252 0 R 2253 0 R 2254 0 R 2255 0 R 2256 0 R ]
+>> endobj
+2230 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 640.697 314.092 654.645]
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+2231 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [283.319 509.19 295.274 523.138]
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+2232 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [299.37 509.19 311.325 523.138]
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+2233 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.548 498.885 209.484 509.235]
+/A << /S /GoTo /D (page.140) >>
+>> endobj
+2234 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [213.58 498.885 230.517 509.235]
+/A << /S /GoTo /D (page.141) >>
+>> endobj
+2235 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 485.28 314.092 499.228]
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+2236 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [307.118 473.325 314.092 487.273]
+/A << /S /GoTo /D (page.7) >>
+>> endobj
+2237 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [238.487 449.415 250.442 463.362]
+/A << /S /GoTo /D (page.32) >>
+>> endobj
+2238 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [254.538 449.415 271.474 463.362]
+/A << /S /GoTo /D (page.140) >>
+>> endobj
+2239 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 355.766 298.041 369.714]
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+2240 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 355.766 314.092 369.714]
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+2241 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 343.811 298.041 357.758]
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+2242 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 343.811 314.092 357.758]
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+2243 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 331.856 314.092 345.803]
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+2244 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 319.9 298.041 333.848]
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+2245 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 319.9 314.092 333.848]
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+2246 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 272.08 314.092 286.027]
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+2247 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 176.438 314.092 190.386]
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+2248 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 152.528 314.092 166.476]
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2249 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 116.662 314.092 130.61]
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+2250 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [475.376 427.497 487.331 441.445]
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+2251 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 427.497 508.364 441.445]
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+2252 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 391.631 508.364 405.579]
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+2253 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [443.274 355.766 455.23 369.714]
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+2254 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 286.027 508.364 299.975]
+/A << /S /GoTo /D (page.134) >>
+>> endobj
+2255 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 274.072 508.364 288.02]
+/A << /S /GoTo /D (page.103) >>
+>> endobj
+2256 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 202.341 508.364 216.289]
+/A << /S /GoTo /D (page.103) >>
+>> endobj
+2260 0 obj <<
+/D [2258 0 R /XYZ 152.694 705.06 null]
+>> endobj
+2257 0 obj <<
+/Font << /F28 597 0 R /F8 596 0 R /F31 600 0 R /F21 593 0 R /F43 827 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2283 0 obj <<
+/Length 2012
+/Filter /FlateDecode
+>>
+stream
+xÚÍZKo7¾ûWìQb†3Ãç--Ð(riëC´ÙÞ8BmÙ•ÖIþùÎr—¤%q×ZÙ–ÍÝ%?Î‹ß )««JVNdÿûãÙÉ»ŸÑU^xƒ¦:û\&a¼ªŒ¶IWg—Õ§ÙŸ@êúýúþ¼ýW_4‹Û囿Î~y÷óÃ/=4ž‡ Ÿˆ7§„Øþ€´8Cçõ[î"5#òø¶ý¼:Õ øê@xÝÏÅu7ø®SòÂéÍW;XÍüüºÞ…£¼PÜÚ“~¨ÔyØ+ÞÀ
+NMÂSb=Ž‚„PµÂR±$ôÇ"ˆ•Îl «—P+'KÂr> K–……^eÙêüzÒC”faiN °¤íÕþÞœ_Î ¤‘„Rî@·†(Ñþ‡’Šñ»Ÿ·[œçóUAÓ È½5òq'Ó“ŸÎNþ9žê¡'L‡ÈIá,V7'Ÿþ’Õ%?dµ ò®ú^½©€Ñ¢ææuõûɯ#YYþ ¯ûã¿}øi24å̓¥̓´ÍÍ>@  »Å”PaúD¡š`Qç««ºˆØÙÃ|ïv†ìŸÐµ0eì%­r³wžÈš˜2Ę‚q“| ŒXók‰0Î6²b+Yð64¡±—4Æ^}¨#áüÉç‡.:¼‘.:¼±) 8ƒÉ6œÂ
+ü2Üê®[ —±nÁ pv{/…È›-• €A«ÉÀ)Ùlt©Ö·XÖ5¾ÌãQ
+M£”ÂŽo#=Ìã®,\Vñ:y²~ë![ØZ\ËÂ)â­JîW—óm½~bÀÙ’ïc´î¸LÓÒQZôIõha®L{ZÁÝßœ‹s/ZfxŠynœ´›'®d»¥4g <èÏÓ?3‡Üz¥Mç´+Ñ–Ç!UœôshÒOªú“²ÜÖs á¼*.³t©ÁzA ŸÏjºÅ–ï.uSñ™]V2¿J­=‡HÁjÝ,–W¥j8{¶Qûòyr3™m…lrœ õ
+2]7·Ÿ?/®îWõúåµ¾O ñ ñÐ8ÌñŽ§$êi†Ûb •¿¯xLûÇãW[N¹zÚU·€0\°>BN7wúSïsïÀ'¢~C×›[ ‡ùÿa(@
+endstream
+endobj
+2282 0 obj <<
+/Type /Page
+/Contents 2283 0 R
+/Resources 2281 0 R
+/MediaBox [0 0 612 792]
+/Parent 2285 0 R
+/Annots [ 2261 0 R 2262 0 R 2263 0 R 2264 0 R 2265 0 R 2266 0 R 2267 0 R 2268 0 R 2269 0 R 2270 0 R 2271 0 R 2272 0 R 2273 0 R 2274 0 R 2275 0 R 2276 0 R 2277 0 R 2278 0 R 2279 0 R 2280 0 R ]
+>> endobj
+2261 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 604.832 298.041 618.78]
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+2262 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 604.832 314.092 618.78]
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+2263 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 282.042 314.092 295.99]
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+2264 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 222.266 314.092 236.214]
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+2265 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 473.325 508.364 487.273]
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+2266 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.357 413.549 492.313 427.497]
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+2267 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 413.549 508.364 427.497]
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2268 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [464.307 377.684 476.262 391.631]
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2269 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.357 377.684 492.313 391.631]
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+2270 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 377.684 508.364 391.631]
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+2271 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [443.274 305.953 455.23 319.9]
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+2272 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 293.997 508.364 307.945]
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+2273 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [456.558 270.087 468.513 284.035]
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+2274 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [472.609 270.087 484.564 284.035]
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+2275 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [488.66 270.087 505.596 284.035]
+/A << /S /GoTo /D (page.139) >>
+>> endobj
+2276 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.819 261.719 403.756 270.131]
+/A << /S /GoTo /D (page.141) >>
+>> endobj
+2277 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 246.177 508.364 260.124]
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+2278 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 186.401 508.364 200.349]
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+2279 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 174.446 508.364 188.393]
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2280 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 150.535 508.364 164.483]
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2284 0 obj <<
+/D [2282 0 R /XYZ 152.694 705.06 null]
+>> endobj
+2281 0 obj <<
+/Font << /F28 597 0 R /F8 596 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2329 0 obj <<
+/Length 2129
+/Filter /FlateDecode
+>>
+stream
+xÚå[Koã6¾çWè˜
+# ³,Ì
+Yx”ñÆ¡LºòÀ,‚%LhÉu秄í³í>Ë¿9ôµ„Q‡N#Ž¤IýmWT¬0,þSQÑNûº˜åÏI¡ —öZT`­SQT ³Fþíþ)MóUœ}r4Óœp®ûËQ+HÓH.–Õ5>:U¿é(…ö׿_Æyâ
+3àÈ÷¼Ñ®Æ½«5ßðš»Nóä~“nŠ&Lè°*éZZg”×ï@òyûìJ/NXYÅ,Ý¢ßÅÎ|pgVõEï¢èæ<x·õnU¾Ûm=¸ÛžõÇï6ß-¬ƒw{¶nvl6¦OÊÆr˵toyùÖ®èÍ¿ÍÒ©£: ¢)¥Ü';äQàz¥! ô´ nçQ‚'Ûüï—î‘‚„¯*„o¯qζª4ãÑmŸ/'.YrΰȕhhÑöLŽ’€m@©:i 1ÐÖœˆÉÌ¥2.µþQ°·Ìu¾â–ÓS6fž-fÀGÎÏìß¹¦·ü¼ö}Øj6~@0)%ïÒ Ó
+\h|>8tmŒ}À¾øÍÆgðñ€j\9¯-XG³þÎÒ;õ:ß’ ä*ãG+; ‡
+¡y37eÊ6ó5¦•Ù=6×’€(z`3¬™r¦eý&|Tcù¦ÉÃ|‘{ÀÙËT¨òp–…fcÏ–ž‘E|ºO#‹J€Ò2ϸì€ïG}ˆy‡b߀é\vPž©67Ä5U]ÅÙ|±ÞÄ™{ŒäˆRܲVÜ2¡·Ýêwú¡øÕöµ†içß¼úòæTþmó– ÁCŽKZ@žó¥SNO½y4àӊߧ>1ªõ*cPò"…Û y\Õ¼($¡pÐf¡Wé v!}Bñ÷e‘½Øì¤<?P–†œÕ0³Åü9U¦î×álx
+endstream
+endobj
+2328 0 obj <<
+/Type /Page
+/Contents 2329 0 R
+/Resources 2327 0 R
+/MediaBox [0 0 612 792]
+/Parent 2285 0 R
+/Annots [ 2286 0 R 2287 0 R 2288 0 R 2289 0 R 2290 0 R 2291 0 R 2292 0 R 2293 0 R 2294 0 R 2295 0 R 2296 0 R 2297 0 R 2298 0 R 2299 0 R 2300 0 R 2301 0 R 2302 0 R 2303 0 R 2304 0 R 2305 0 R 2306 0 R 2307 0 R 2308 0 R 2309 0 R 2310 0 R 2311 0 R 2312 0 R 2313 0 R 2314 0 R 2315 0 R 2316 0 R 2317 0 R 2318 0 R 2319 0 R 2320 0 R 2321 0 R 2322 0 R 2323 0 R 2324 0 R 2325 0 R 2326 0 R ]
+>> endobj
+2286 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 616.787 314.092 630.735]
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2287 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 580.922 314.092 594.869]
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+2288 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 568.966 314.092 582.914]
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+2289 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 521.146 298.041 535.093]
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+2290 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 521.146 314.092 535.093]
+/A << /S /GoTo /D (page.14) >>
+>> endobj
+2291 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 509.19 314.092 523.138]
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+2292 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 497.235 314.092 511.183]
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2293 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 305.953 314.092 319.9]
+/A << /S /GoTo /D (page.10) >>
+>> endobj
+2294 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [307.118 293.997 314.092 307.945]
+/A << /S /GoTo /D (page.7) >>
+>> endobj
+2295 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [307.118 282.042 314.092 295.99]
+/A << /S /GoTo /D (page.7) >>
+>> endobj
+2296 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 270.087 314.092 284.035]
+/A << /S /GoTo /D (page.14) >>
+>> endobj
+2297 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 258.132 298.041 272.08]
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+2298 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 258.132 314.092 272.08]
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+2299 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [272.249 246.177 279.223 260.124]
+/A << /S /GoTo /D (page.3) >>
+>> endobj
+2300 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [283.319 246.177 295.274 260.124]
+/A << /S /GoTo /D (page.14) >>
+>> endobj
+2301 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [299.37 246.177 311.325 260.124]
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+2302 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.548 235.871 204.503 246.221]
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2303 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [208.599 235.871 220.554 246.221]
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2304 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [224.65 235.871 236.605 246.221]
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+2305 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [240.701 235.871 252.656 246.221]
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+2306 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [256.752 235.871 268.707 246.221]
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+2307 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [272.803 235.871 289.739 246.221]
+/A << /S /GoTo /D (page.141) >>
+>> endobj
+2308 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [293.835 235.871 310.772 246.221]
+/A << /S /GoTo /D (page.142) >>
+>> endobj
+2309 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 222.266 314.092 236.214]
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+2310 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [249.003 174.446 260.958 188.393]
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2311 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 150.535 298.041 164.483]
+/A << /S /GoTo /D (page.14) >>
+>> endobj
+2312 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 150.535 314.092 164.483]
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+2313 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [281.105 138.58 293.06 152.528]
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+2314 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 138.58 314.092 152.528]
+/A << /S /GoTo /D (page.103) >>
+>> endobj
+2315 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 640.697 508.364 654.645]
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+2316 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 628.742 508.364 642.69]
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+2317 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [470.395 592.877 487.331 606.824]
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+2318 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 592.877 508.364 606.824]
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+2319 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [470.395 557.011 487.331 570.959]
+/A << /S /GoTo /D (page.100) >>
+>> endobj
+2320 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 557.011 508.364 570.959]
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+2321 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 473.325 508.364 487.273]
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+2322 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 449.415 508.364 463.362]
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+2323 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 401.594 508.364 415.542]
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+2324 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 389.639 508.364 403.587]
+/A << /S /GoTo /D (page.82) >>
+>> endobj
+2325 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 293.997 508.364 307.945]
+/A << /S /GoTo /D (page.82) >>
+>> endobj
+2326 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 150.535 508.364 164.483]
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+2330 0 obj <<
+/D [2328 0 R /XYZ 152.694 705.06 null]
+>> endobj
+2327 0 obj <<
+/Font << /F28 597 0 R /F8 596 0 R /F31 600 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2388 0 obj <<
+/Length 2106
+/Filter /FlateDecode
+>>
+stream
+xÚÕ[KoãF ¾çWèè
+ÓÇíüúÏÛŸ¾ûôöJ2¥>-¿“]O¥µ?’úðø[ˆï¼ 8!
+05øÓ΀y]ÂÏ §‹UD€× Œ¬ÀßÇ×Sá&³Ý*Z_ãEŠ¥œÌ–áv{=ÎÍ2|"“$™E³‹ß~¼
+>O]†lyCaí=¬…ôÖÊÔiúžL-5uÿëý"3ážZ3ÅÕ
+Xå'’sÿ![!…—–t†RÞ>»øë>: Ly9
+h)º
+f««Ïòà¿ü)àLz<å·®@´Bãå2øýê׎¬©¥eÆ)Bïí ¾cq-2­ª°¢%ïã*ª úÊ<ŽÓ ÜMv±0ÐDÂ1eZáò¨L® wõèV{2Òyæôˆðÿ
+‘~AÄ{!JGL'|÷6ûƒIä­&ñ?Ñ2š§#æã£oi Ð3®3>ײ¹©ë—,ÓKÇ–Á4+aî¯\ú^}P´ÄÊW»eº˜ÅËAèw«™H¸{ñÕ‡èL5“ÐÐ d7ï!BËê9LÐˈ%éóiºã–NµÝ.J%öW]½k]$Ôˆ&~D“‰WÀû…¬8Eä†u˜$ñÓ·`„ò`š7oa¾ßð¡¡O
+ûåûÛ››¬`H7ïÉÏ
+ŠÓkÏ\\›’
+“a –Âû
+<a½W›d;zܺÀ³¥‡ž}c
+Ó}LX€?NQÅ,?îÈ´=àinˆ³Ò[1¾¥›8ž™à"7§{ÍŸ)c‰àÖ¡Œ¶½žnš ªÃp ïùƒÆåaH}‚3oLæ€>3Õ‘;°Àü`œôx6›?œÇ˜ÏTé®VàTrû5k¯w«ùŠÈüÈé„?V=“ hê׌çIzU>²JÛÄqPŠÃû
+ÂñAÇ}ÒnʼnW{e×ÑSx·M“pFãs¦ÀwZáy5›"œ¯Qóñ3pø˜Æ8ïI8Bh{ÓÙHy´!f¢§»e<û2H7’¬y$>M- ZìYEOQoI‹?ÃòémÍ#¼åíõֲ˂‹.eyÈQî0+qªpQOó¯ÑˆÚ!
+S_>ªí‘ãGØY´
+Å„K%ZF.9šqykdŸ£– øbÝV^Ž2êcxŸ">%ä›±lY÷³i.ÄëEÊcð7ýçyÌY÷’V¸y¹¼žÂ„ž™)%ÕÙD|.Ãõ,BNf³ìÄÄŒ`Nv¾ÜâßohÁ¼kìéê…ïäøCnÅ^íOåãh“,¨á¥|âWõ~½§£³%ÆRdà|‡éö2
+°^•aßÉjdÑ›Š5{SZx[½ôÌðÁô.+ˆÇۼɯDÖû«>,#ªK¥Õ‡zOej³Úå¯!:WN¥C£õ„õÆ@3IÌ
+endstream
+endobj
+2387 0 obj <<
+/Type /Page
+/Contents 2388 0 R
+/Resources 2386 0 R
+/MediaBox [0 0 612 792]
+/Parent 2285 0 R
+/Annots [ 2331 0 R 2332 0 R 2333 0 R 2334 0 R 2335 0 R 2336 0 R 2337 0 R 2338 0 R 2339 0 R 2340 0 R 2341 0 R 2342 0 R 2343 0 R 2344 0 R 2345 0 R 2346 0 R 2347 0 R 2348 0 R 2349 0 R 2350 0 R 2351 0 R 2352 0 R 2353 0 R 2354 0 R 2355 0 R 2356 0 R 2357 0 R 2358 0 R 2359 0 R 2360 0 R 2361 0 R 2362 0 R 2363 0 R 2364 0 R 2365 0 R 2366 0 R 2367 0 R 2368 0 R 2369 0 R 2370 0 R 2371 0 R 2372 0 R 2373 0 R 2374 0 R 2375 0 R 2376 0 R 2377 0 R 2378 0 R 2379 0 R 2380 0 R 2381 0 R 2382 0 R 2383 0 R 2384 0 R 2385 0 R ]
+>> endobj
+2331 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 640.697 314.092 654.645]
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+2332 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 592.877 298.041 606.824]
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+2333 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 592.877 314.092 606.824]
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+2334 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 580.922 314.092 594.869]
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+2335 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 461.37 314.092 475.318]
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+2336 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 449.415 314.092 463.362]
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+2337 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [283.319 425.504 295.274 439.452]
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+2338 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [299.37 425.504 311.325 439.452]
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+2339 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.548 417.136 209.484 425.549]
+/A << /S /GoTo /D (page.135) >>
+>> endobj
+2340 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 401.594 314.092 415.542]
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+2341 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 389.639 314.092 403.587]
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+2342 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 331.856 314.092 345.803]
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+2343 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 307.945 314.092 321.893]
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+2344 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 260.124 314.092 274.072]
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+2345 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 212.304 298.041 226.252]
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+2346 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 212.304 314.092 226.252]
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+2347 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [281.105 176.438 293.06 190.386]
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2348 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 176.438 314.092 190.386]
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+2349 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [281.105 140.573 293.06 154.521]
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+2350 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 140.573 314.092 154.521]
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+2351 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 116.662 314.092 130.61]
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+2352 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 640.697 508.364 654.645]
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+2353 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 616.787 508.364 630.735]
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+2354 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [443.274 592.877 455.229 606.824]
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+2355 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [459.325 592.877 471.28 606.824]
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2356 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [475.376 592.877 487.331 606.824]
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+2357 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 592.877 508.364 606.824]
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+2358 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [475.376 557.011 487.331 570.959]
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2359 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 557.011 508.364 570.959]
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+2360 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [454.344 545.056 466.299 559.004]
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2361 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [470.395 545.056 487.331 559.004]
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+2362 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 545.056 508.364 559.004]
+/A << /S /GoTo /D (page.113) >>
+>> endobj
+2363 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 485.28 508.364 499.228]
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+2364 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [462.646 473.325 474.601 487.273]
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+2365 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [477.59 473.325 489.545 487.273]
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+2366 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [493.641 473.325 505.596 487.273]
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+2367 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.819 463.019 398.775 473.369]
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+2368 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [404.199 463.019 416.154 473.369]
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2369 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [419.143 463.019 431.098 473.369]
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+2370 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [436.522 463.019 448.477 473.369]
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+2371 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [453.901 463.019 465.856 473.369]
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+2372 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [471.28 463.019 483.236 473.369]
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+2373 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [488.66 463.019 505.596 473.369]
+/A << /S /GoTo /D (page.112) >>
+>> endobj
+2374 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.819 451.064 403.756 461.414]
+/A << /S /GoTo /D (page.115) >>
+>> endobj
+2375 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.852 451.064 424.788 461.414]
+/A << /S /GoTo /D (page.132) >>
+>> endobj
+2376 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [428.884 451.064 445.821 461.414]
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+2377 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 437.459 508.364 451.407]
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2378 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [443.274 377.684 455.23 391.631]
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+2379 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 317.908 508.364 331.856]
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+2380 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 234.222 508.364 248.169]
+/A << /S /GoTo /D (page.17) >>
+>> endobj
+2381 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 222.266 508.364 236.214]
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+2382 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 210.311 508.364 224.259]
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+2383 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 186.401 508.364 200.349]
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+2384 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 174.446 508.364 188.393]
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+2385 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 150.535 508.364 164.483]
+/A << /S /GoTo /D (page.17) >>
+>> endobj
+2389 0 obj <<
+/D [2387 0 R /XYZ 152.694 705.06 null]
+>> endobj
+2386 0 obj <<
+/Font << /F28 597 0 R /F8 596 0 R /F31 600 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2418 0 obj <<
+/Length 2131
+/Filter /FlateDecode
+>>
+stream
+xÚÝ[Ks#·¾ëWÌ‘[eÁèn<oJR¶«\)Û‰•ÊaãÈœ•hó•™¡'>=OrHÌÔ%Ù—%Â
+-}w·½/åÖº ÊRœÊ&èª×MÛôPX Z‰'k¹¥Œ7‚­kÁLBÒúz8I×?Ißö²5½ˆ:< ¢©U‚HÒEz'Ù*^†X‚\‹E¿õŠŸeñ³'¤¯‚¾7¢¬T|G¥âß|uóï¨iB6©`!Ò¨Û¬hº¼ùø“ŒfüGf© ï¢çrè’­¯ð¨¹¹ˆ~¼ù[e;tƒ&a¼Š4°–öèÞ.’´‡ðëh]E±¢PõãP,A8p Lm’Χñâ˜Xå…r ­³5«›Lyøê7òB£p2]ÄYV5×›0ÉçëU¿4*Ç:ÒH°·¦¶Ð2dYl~ÒF-š€:®²õ"É“»éz¹ŒW³cª<{ceYXj_xgAŸSx¼äôxÔBƒ~ÕRj!zjŒÇôÌfÙ|–,ãôq¾:&ÍzÁf{lÒ èAV#º”§„qm„‚mPľ«Š¸ék'¨”p„]3‰ŠTó‘"wÛX/Þ½ÐйB³^Ìâ‡,Oãi°˜R(´"^¶VÄy¶" áEOCÝÅ^@W¯ld$…KP:ÄÀUoâÇ€ÐZ(y®‚hòäz¨¥À4q`%öG–¯š¾ËU2]/¶Ë€”ëÂI¨ý/Öª÷¿øýýçí§ƒ°tœ˜˜ÿŒÐÙvžú‹þÊüľ”OÕÖÜ=¦óÙ]–äÛ@¶ ÅNJûˆ,\¹ 1­'è_¾Xý” «[A°†jÖAÈ5A´öž}@w›up3$Ç ¦E[ñtu~k¥pÊ@ñÆ6Q´Ó$–N4½
+–'_«#\t캉§àˆ8Kóô†,
+RLÐËÔàŽ÷ðOùñî™wðµ«û`Ãñ1V %Ê#ÉáÁþ5¼ârEu/(Ðc— Ï)àºÓ×tH_•ÊÏÚsëž Â4ùôú%æ#«§uP7:µqÓžå¿-’÷[)óTÊ:,Ù$éS2|ʯçpz{7.ݺ C§.èôºó× 4̨þjKœÄQªe-ÅÏóYþtõ›¯Êá¾[¯HïÅ|æøÛãðYòHêð99ý$cøÝÀ0»;KÇ(§ëwuNSˆb0í ÀÔDÌW³d•ãYtá ¨¹FçUs7Î;Õ¼±¡ ßØ4k@šæa ûHΟšÿZrÍ K>üÎuûÎFµOdÐ@û
+ÍJlz­ì™Äú½g9íc*Ç.{=´u<¼ø1Ícò–uù,ÁµÏr,¶½Û^ßóâ½Û=Öé>'`+¤„Õ¶OW Átïø²)ø?Œåõ9
+endstream
+endobj
+2417 0 obj <<
+/Type /Page
+/Contents 2418 0 R
+/Resources 2416 0 R
+/MediaBox [0 0 612 792]
+/Parent 2285 0 R
+/Annots [ 2390 0 R 2391 0 R 2392 0 R 2393 0 R 2394 0 R 2395 0 R 2396 0 R 2397 0 R 2398 0 R 2399 0 R 2400 0 R 2401 0 R 2402 0 R 2403 0 R 2404 0 R 2405 0 R 2406 0 R 2407 0 R 2408 0 R 2409 0 R 2410 0 R 2411 0 R 2412 0 R 2413 0 R 2414 0 R 2415 0 R ]
+>> endobj
+2390 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 604.832 314.092 618.78]
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+2391 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 533.101 314.092 547.049]
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2392 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 497.235 314.092 511.183]
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2393 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 439.452 314.092 453.4]
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+2394 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [249.003 379.676 260.958 393.624]
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+2395 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [240.977 343.811 252.933 357.758]
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+2396 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [257.028 343.811 268.984 357.758]
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2397 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 248.169 314.092 262.117]
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+2398 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 236.214 314.092 250.162]
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2399 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 188.393 314.092 202.341]
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+2400 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 128.618 314.092 142.565]
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+2401 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 640.697 508.364 654.645]
+/A << /S /GoTo /D (page.14) >>
+>> endobj
+2402 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 628.742 508.364 642.69]
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+2403 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 616.787 508.364 630.735]
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+2404 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 604.832 508.364 618.78]
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+2405 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [443.274 580.922 455.23 594.869]
+/A << /S /GoTo /D (page.29) >>
+>> endobj
+2406 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 557.011 508.364 570.959]
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+2407 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 533.101 508.364 547.049]
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+2408 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 521.146 508.364 535.093]
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+2409 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 295.99 508.364 309.938]
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+2410 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 260.124 508.364 274.072]
+/A << /S /GoTo /D (page.96) >>
+>> endobj
+2411 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.357 248.169 492.313 262.117]
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+2412 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 248.169 508.364 262.117]
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2413 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.357 224.259 492.313 238.207]
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+2414 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 224.259 508.364 238.207]
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2415 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 200.349 508.364 214.296]
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+2419 0 obj <<
+/D [2417 0 R /XYZ 152.694 705.06 null]
+>> endobj
+2416 0 obj <<
+/Font << /F8 596 0 R /F28 597 0 R /F31 600 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2480 0 obj <<
+/Length 2379
+/Filter /FlateDecode
+>>
+stream
+xÚÝ[Ýoã6Ï_¡GX³røõæöp-p8àz{y8`ÛÇVomËg9ÝúÏw$QŠ%S²d+Þ /6#Sä|ó73 ~‰xôÃ÷ßß=Ü}ó½°‘cN =<E $Ó#­ REËèÓä'¸›ïÓxwÿóÃ?¾ùþøƤÕò™Vð÷SfÒº|¨'`üSFú§4ÄÙzј@I_Àœò[
+°:ŸˆÙÐäC5B«ò©0ªzjt±o,"¬,§KaËéR¸ê)òêiFdhé°šîª=‘›ò)òji̘-‚.›.¥Ì†6Ò›ŠËB¢5L¥cVùt]Ïó]|ª¥r,•Àhu!j_2ôðš)DY Úg¦” >þp}š mýï…•5ÙóÔÖTò÷ë*dcŽ!^ÙÓŠ“r•¬Dj\)Rú©|ªðæ˜2º¡íß¡‰†Kÿºä€þ©£Ï)§Nüá”r _½c|Åô}Ýj>qâ~
+ä© 3ÈÔv¾yÿgä¥w#þ2‹uRyÛ+1'øïwÿ»ÏŽp’HIÍ„uÑbs÷ég-éG
+(L:}ɧn" J…¢á:úÏÝ¿;⸊áê,'»`(×d²r3ò/]:ˆ°XúZQ>m‰^~™ZøÚÅûÓýˆ ¢Üo™P µ“ÅË&ÞÞÓàPì²XÏÓ´Ø;ÙVÉö~ªÀuÙƒ#QcÍhõíós…@wÈò¤žÐó|{H6i¼ÈI;aÑ*&œèiF¹p[Š× ‰×/yJÊút{R¾õõÃ#Jùñ4ø™/âÙãêqû²y,Ì' ¿:¿N3É+~hÒ z'J ¶3×igž>Âh •-9—*^B‚jdŠæv…d±^êve™rš–R´­,6Íì–<
+$ÁÒiZb*²mÆUÃj%x×ÈŠ‚Š6G%˜ærh¬‘ ’¡¡•$sôZEe~ºcð$TŽ£Ø«®€Ùjp7Š" _µ`Z0‚6Ž9Óx¬aÜ’BQ0Ž¢Á_!Û“@&%“Öžµ°Yú² 1¨Ø3ñ¤Õ,Esàw¸<A2=ö‚ò¼ kÂ)hf¤¹Fh>1‚d
+Ä& @Ÿûùí3Á³S<S}ó¿ ï
+²«þ½¦Çw˜§{íèþÚy¼™v´µƒ'ÚézƒNm+g>š#§pmu›ýâýšƒéo‹wî¬ú²üz¿|¿Ú±gµSV?B\ü%´¿_í¸þ¾ÿUµ“%LËùaÞ‚ÍõZjçÝD‹§†ÆNN=ÑWrš§¡(Ê: ¾¸Iò%Ei2ÚÆVôsÙ2
+Ô(¶(¦h‚¡ÔHâUU ­Èh -EŠ.K¹eòÈ‹ä±Yc
+óF[¬ƒª¼¸p¬)úEiÀæ8Ó¯¸ rˆé2äP’Ý´8‘3[µ¨|°(’?+ÝÁÚv³Ê!ÊU‘*=ü?h(M§l¥xfÛƒëuC›íB¼];JébCHfèý§²än£¹êÏ+#ÕUmBžl™¦üf
+äu®,™Ò––"°Èíw®J|§˜i^ Àü>ž0vD>4D.Ïî¯éêO ~ 1|ëRëêþ§6ÕMO#ʧ ø§R”$ñºk“ìp ÚLcŠ½Y¯:9Äá„ä-OšÖw× nIz§0T¬@JWE¯6ü¹b…D25­"äš1 Îö¿Å³Îâÿ^yO«ô&Šzªº.ªÀ#Ùùü´N懾%+îÊ+4”Uæ¤õqÉJŸ´QªœJ@Y²¢¡9kÒºIì!Yœ»3\TW°ÚŽWÀц[\µ;ƒM1ÅÛefŽ3Ü8&ÞokOèðÖ00âë¡ÅÜ3U=C7CûE=Pƶ»éóÒMsbóiõËË>Èå-0:ª‘5ÚŠÑÇf5K€[] Û¥F‘ýßÆHjΔlòv˜?®ÇÕb§ëF‡8^£è1…‘ëªÚ
+øAw¹¢Æä&W”
+–æÚ®s[ÆËÙ—ýêk%ÉZöN’uˆô߃¯Ë½­–++Á‡å“Ivt-’Íf¾]^J•£¨gLùo• …ñ¹e¨<NŠ?èc`uä˜ÎÙçÙö×­‘?êêh*èð$i ÛYñF(6fû¥ËO€·Kœú£w\‰tŽÄH·‚dgmÉ{=hRüúËŒY6
+endstream
+endobj
+2479 0 obj <<
+/Type /Page
+/Contents 2480 0 R
+/Resources 2478 0 R
+/MediaBox [0 0 612 792]
+/Parent 2285 0 R
+/Annots [ 2420 0 R 2421 0 R 2422 0 R 2423 0 R 2424 0 R 2425 0 R 2426 0 R 2427 0 R 2428 0 R 2429 0 R 2430 0 R 2431 0 R 2432 0 R 2433 0 R 2434 0 R 2435 0 R 2436 0 R 2437 0 R 2438 0 R 2439 0 R 2440 0 R 2441 0 R 2442 0 R 2443 0 R 2444 0 R 2445 0 R 2446 0 R 2447 0 R 2448 0 R 2449 0 R 2450 0 R 2451 0 R 2452 0 R 2453 0 R 2454 0 R 2455 0 R 2456 0 R 2457 0 R 2458 0 R 2459 0 R 2460 0 R 2461 0 R 2462 0 R 2463 0 R 2464 0 R 2465 0 R 2466 0 R 2467 0 R 2468 0 R 2469 0 R 2470 0 R 2471 0 R 2472 0 R 2473 0 R 2474 0 R 2475 0 R 2476 0 R ]
+>> endobj
+2420 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 592.877 314.092 606.824]
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+2421 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 545.056 314.092 559.004]
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2422 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 509.19 293.06 523.138]
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+2423 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 509.19 314.092 523.138]
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+2424 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [249.003 473.325 260.958 487.273]
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+2425 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [265.054 473.325 277.009 487.273]
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2426 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [281.105 473.325 293.06 487.273]
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+2427 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 473.325 314.092 487.273]
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+2428 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 425.504 314.092 439.452]
+/A << /S /GoTo /D (page.119) >>
+>> endobj
+2429 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 377.684 314.092 391.631]
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+2430 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 365.728 314.092 379.676]
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+2431 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 317.908 293.06 331.856]
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+2432 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 317.908 314.092 331.856]
+/A << /S /GoTo /D (page.115) >>
+>> endobj
+2433 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [283.319 293.997 290.292 307.945]
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+2434 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [294.388 293.997 311.325 307.945]
+/A << /S /GoTo /D (page.115) >>
+>> endobj
+2435 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.548 283.692 209.484 294.042]
+/A << /S /GoTo /D (page.116) >>
+>> endobj
+2436 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [213.58 283.692 230.517 294.042]
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+2437 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 258.132 293.06 272.08]
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+2438 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 258.132 314.092 272.08]
+/A << /S /GoTo /D (page.116) >>
+>> endobj
+2439 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 234.222 293.06 248.169]
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+2440 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 234.222 314.092 248.169]
+/A << /S /GoTo /D (page.116) >>
+>> endobj
+2441 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 210.311 293.06 224.259]
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+2442 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 210.311 314.092 224.259]
+/A << /S /GoTo /D (page.116) >>
+>> endobj
+2443 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 198.356 298.041 212.304]
+/A << /S /GoTo /D (page.62) >>
+>> endobj
+2444 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 198.356 314.092 212.304]
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+2445 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 114.67 314.092 128.618]
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+2446 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.357 628.742 492.313 642.69]
+/A << /S /GoTo /D (page.17) >>
+>> endobj
+2447 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 628.742 508.364 642.69]
+/A << /S /GoTo /D (page.99) >>
+>> endobj
+2448 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [493.641 604.832 505.596 618.78]
+/A << /S /GoTo /D (page.16) >>
+>> endobj
+2449 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.819 596.463 398.775 604.876]
+/A << /S /GoTo /D (page.96) >>
+>> endobj
+2450 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.357 545.056 492.313 559.004]
+/A << /S /GoTo /D (page.17) >>
+>> endobj
+2451 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 545.056 508.364 559.004]
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2452 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 509.19 508.364 523.138]
+/A << /S /GoTo /D (page.17) >>
+>> endobj
+2453 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [445.488 497.235 457.443 511.183]
+/A << /S /GoTo /D (page.16) >>
+>> endobj
+2454 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [461.539 497.235 473.494 511.183]
+/A << /S /GoTo /D (page.17) >>
+>> endobj
+2455 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [477.59 497.235 489.545 511.183]
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2456 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [493.641 497.235 505.596 511.183]
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2457 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.819 486.93 398.775 497.28]
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+2458 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.87 486.93 414.826 497.28]
+/A << /S /GoTo /D (page.96) >>
+>> endobj
+2459 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.921 486.93 430.877 497.28]
+/A << /S /GoTo /D (page.97) >>
+>> endobj
+2460 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 425.504 508.364 439.452]
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+2461 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [464.307 353.773 476.262 367.721]
+/A << /S /GoTo /D (page.61) >>
+>> endobj
+2462 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.357 353.773 492.313 367.721]
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+2463 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 353.773 508.364 367.721]
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2464 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.357 329.863 492.313 343.811]
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+2465 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 329.863 508.364 343.811]
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2466 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [464.307 305.953 476.262 319.9]
+/A << /S /GoTo /D (page.22) >>
+>> endobj
+2467 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.357 305.953 492.313 319.9]
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+2468 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 305.953 508.364 319.9]
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2469 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 282.042 508.364 295.99]
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+2470 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [477.59 246.177 484.564 260.124]
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+2471 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [488.66 246.177 505.596 260.124]
+/A << /S /GoTo /D (page.116) >>
+>> endobj
+2472 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.819 237.808 403.756 246.221]
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+2473 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.357 222.266 492.313 236.214]
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+2474 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 222.266 508.364 236.214]
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+2475 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 174.446 508.364 188.393]
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+2476 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 114.67 508.364 128.618]
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+2481 0 obj <<
+/D [2479 0 R /XYZ 152.694 705.06 null]
+>> endobj
+2478 0 obj <<
+/Font << /F28 597 0 R /F8 596 0 R /F21 593 0 R /F43 827 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2515 0 obj <<
+/Length 2319
+/Filter /FlateDecode
+>>
+stream
+xÚÍ[KoãF¾ûWð(£NW¿û¦dw&@°&Ž±H0›%Ñ61©!i{‚ùó[|I¢Ü¤H‰Ræb"ÍþêýUu‹zõ~¾¡ÕçO÷7?|`ƳÄ*¦¼û$'Ê
+OIM—ÞýÒû4ùpñ1‰_Âe~WÁí_÷¿üðaÿß4'œk|gñ<¹rÆÜõeÏGp5DL=ð’v~q÷ó÷iªL,¯î—ˆ3­€Mˆ•W¨¤ù;Ão¸˜
+M¨ŠIõaÑèL—ýÐ꜀O2Kv[ñ1ÙÇêÀ‰Ö|_ØMèõ(4\ˆ€ׇTά[¡zË
+–³È_;¤ÁÄÎ,;Gš©:¬D)Œb%a°Ôª}+=G‹lvw÷ãÇKÔØv;(«Ê94B£ aNÚL¹ðo.ƒIŠ´ÈÁ¾<ûK‡Ó)"ÙVeMÁšŠŠ÷jPõw ë+&ë»L|ÇÃen¢Åöyaªç1‰:IhY_rFÁ!4 yÁ6e¾k•ù€
+&þãc°œÇY¯´èÖ¶ƒ*-jB˜_Æ›i!æ”a½bK•\Ñp{bdó–vþ™; ?…A–ÚYÄ«çu4K_O%ðy¡@Û Gªh¤£Ðpƒ5 +r£ÐXÚƒ+ª}¹Ãtxîµè袵;3ªuíÏÔ@ý-pÚ7ƒÞ½ÿñß¿¾ÿžj€ë^«ß)ô;Ùív-eã.XáKkÕÞ/‰µ0JñàÜ©k_Ì8YþëɃ+°Ø½^™瘢\ðmNDX~a'Ô˜90AÐzº"¥rO‰Å<H‚háÒî«3å$¶Õ’oÓMðàvtl{Sÿ@ wNâtw-©@»ŒÑSJUXÑ*eâeM3ÀpãV…<Üb °„«Í*‚o‰áO‰‚ƒ"¢eIb¦xS¦-Î¥vºfKe Vþ×+gööDœDÚ3AEýÚN+ÀÁk½„I!óÊÆܔ݌u¦“ê}$›•¿f‹x½ö£e:T³<+ÀÖ«|IBÉ^ó>cÄ7üc¶L‚‹oøG r°k§âÐ$)óÅåÓ ÎÅ«8
+ø—ç0 Z¿ç÷}ý(HQëT§ÛUP®)‚Bo`µ/0^y‚Dˆ e¥ôD˜‚K*5–ÖßY[]Ijª»ÒTmº”Ör›MõÖ ­¬s,§Êò®4Hr‚æ_°°J, vÄY­©M„Yœ³ÿø÷Á£r«–d5Ë—|•º{ÿßÙõ¹ÔˆÑ¤Ewoab¹Üóyì(yÝžŠ sœ‚•YÚÄÞ"òMb”ö$v‡ÖêSÁ1pÇg’÷µÛv¬»q¬Vwk<^-«8më¡äébÀè7üÃwͪhõnÙ¾f¼ ¢þ£êreP¸2ØÝÊ|ÈNj¼Ìaø«Í÷´i-á¤MëÑ¥)|‰ix˅ˆETŠBÙ9ÜYÀT,ðMÈçA6È3à‹Ú'0¶SÑózÌêÛ>&Ëó: dÁ’õ'jlñŽ[µÇlO«ºö`9å§Yuí'ŸGtlÉk’
+ÒÔ ëT-!½ÃC‡¤ŽÏÚÏžæóëîüàCÕ–Ã|Hü)Wr‹º±l«ºÝšÁ†ªi³ž3Û,`Ánoý¾¼"Ãw³ÕÆ@òÀÏ7I°Í£º)lG…ª»ôyqU€r(@wÚ­«+r™±ÛY°eÎÄ_­çF˜„~ô¸
+¾ôè‚: ƒï׃š£à%LÛ÷´.`N÷Ö–0º4¡¾ˆ6쬭-.4^K[Acš–þ½žÏÂ(ÌžâøsËÐÖ1{,Û^¹K=\¶ËÀ-#†éqd0Œ0ÕÌ¿ÿùëO³W?éÓÍš"€` œ¹Ýþµõù‰0›#˜]wC.Ú>†sÎÆ_0þ.1’0ÌLDu¢Þ‘|‡}‡%Fvµ¹É8»èž· *ã=¼äýηbÂdƒqqÞ¹íã{4¦ÿ9å)-Î[44PòÌ
+ÂÛ\>>e~’į×%¤T âñÌôs¸ù~[neNk¹,I"AýóGu¬ÊisZªÂèg3òVÅX£|&Ý>çÚ}pJ¤
+üMºIü«ò-NÝûÀ­|«†9}š‹P¶a gÔ¨WVž8h‰¦¶ìúó#ûÆT.ªÙf ?þÊL„
+endstream
+endobj
+2514 0 obj <<
+/Type /Page
+/Contents 2515 0 R
+/Resources 2513 0 R
+/MediaBox [0 0 612 792]
+/Parent 2285 0 R
+/Annots [ 2477 0 R 2482 0 R 2483 0 R 2484 0 R 2485 0 R 2486 0 R 2487 0 R 2488 0 R 2489 0 R 2490 0 R 2491 0 R 2492 0 R 2493 0 R 2494 0 R 2495 0 R 2496 0 R 2497 0 R 2498 0 R 2499 0 R 2500 0 R 2501 0 R 2502 0 R 2503 0 R 2504 0 R 2505 0 R 2506 0 R 2507 0 R 2508 0 R 2509 0 R 2510 0 R 2511 0 R 2512 0 R ]
+>> endobj
+2477 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 652.653 314.092 666.6]
+/A << /S /GoTo /D (page.93) >>
+>> endobj
+2482 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [291.067 628.742 298.041 642.69]
+/A << /S /GoTo /D (page.6) >>
+>> endobj
+2483 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 628.742 314.092 642.69]
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+2484 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [304.351 604.832 311.325 618.78]
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+2485 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [192.548 596.463 209.484 604.876]
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+2486 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 393.624 314.092 407.572]
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+2487 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [307.118 357.758 314.092 371.706]
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+2488 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 297.983 314.092 311.93]
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2489 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [265.054 262.117 277.009 276.065]
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+2490 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [281.105 262.117 293.06 276.065]
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+2491 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 262.117 314.092 276.065]
+/A << /S /GoTo /D (page.115) >>
+>> endobj
+2492 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 202.341 314.092 216.289]
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+2493 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 130.61 314.092 144.558]
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+2494 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 616.787 508.364 630.735]
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2495 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.357 592.877 492.313 606.824]
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2496 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 592.877 508.364 606.824]
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+2497 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 557.011 508.364 570.959]
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2498 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 341.818 508.364 355.766]
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2499 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [466.52 329.863 473.494 343.811]
+/A << /S /GoTo /D (page.1) >>
+>> endobj
+2500 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [477.59 329.863 489.545 343.811]
+/A << /S /GoTo /D (page.13) >>
+>> endobj
+2501 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [493.641 329.863 505.596 343.811]
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+2502 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.819 319.557 398.775 329.907]
+/A << /S /GoTo /D (page.87) >>
+>> endobj
+2503 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.87 319.557 414.826 329.907]
+/A << /S /GoTo /D (page.89) >>
+>> endobj
+2504 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [418.921 319.557 430.877 329.907]
+/A << /S /GoTo /D (page.92) >>
+>> endobj
+2505 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [434.972 319.557 451.909 329.907]
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+2506 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [501.39 305.953 508.364 319.9]
+/A << /S /GoTo /D (page.1) >>
+>> endobj
+2507 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 282.042 508.364 295.99]
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+2508 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [487.553 246.177 494.527 260.124]
+/A << /S /GoTo /D (page.4) >>
+>> endobj
+2509 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [498.622 246.177 505.596 260.124]
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+2510 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.819 235.871 403.756 246.221]
+/A << /S /GoTo /D (page.118) >>
+>> endobj
+2511 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.852 235.871 424.788 246.221]
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+2512 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 162.491 508.364 176.438]
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+2516 0 obj <<
+/D [2514 0 R /XYZ 152.694 705.06 null]
+>> endobj
+2513 0 obj <<
+/Font << /F28 597 0 R /F8 596 0 R /F31 600 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2549 0 obj <<
+/Length 2287
+/Filter /FlateDecode
+>>
+stream
+xÚÍZKsã6¾ûW𨩊tã}SmÕ&U¹eãÛ$Z¢mÕÈ’"Rqf÷Ïo)‘)Qï^fhŠ$¾~ ûënðä5áÉÏ<üÿ§‡B›8æ4êäé%%˜v2ÑÊ0*yš'_'¿ƒÛâïiºÉ7Ûù—?ž~ùñ§Ã—´aB9ú¢š}yˆ­ÿDìæÉGœ†‰àRW ¶`>†%˜S1˜ÙgÃtÁ\~2L…ÁÌ‹ôù©qL€¼R ÀÄ°…E†°m²í18«:¼\@ÕXøz…J·Q=/žólV,Ö«KQé& À»ÔÃ?Ÿþ|
+”I”ÓŒk•ÌÞ¾þÁ“9ýøK™p6ùð¾'@«¢¢ËeòÛïÕ^?„‚Ö0n‘>e˜ "ü@„ µMt×LX{¶(²|µÅ(G1Š
+Dí/È´êHaŒÜ“[>NºÆóÌþÒº‘®•¤›>†qy6èw
+ÆúÝpšn•scÄ£¨¦uÑxË )­h.Ëm]AÅ8èö2ñ„”ð¹Š@`Üé›$<œ)Ñ'Ýj÷Éx†¡ŒU_£¡ƒÚi0'Ãë-yËE‹·ŒŠäåbýºM7oßcÔؾò;W<[}A;ùk±]¯Þ«ë‚nC¥×²½;÷ü  è³ %lro:K…#yÊmøÊ &(e·ÌæEú¼[Ƈ¦Zߪs´A0¥e÷s(¤8GŽz42‡.µ[-Vé|¾Íòœ|ë urWt³Œ€C·”œ6¹%í-WsØßbþ«hóA$,äé{¶¡t,žRLòs+*E)¸¬‰š&œ£T}>è¯lºZÙÿ¤PWUç®ÇÝ()KŠ­7q7N ”Xä^îhá$€V÷ëº>¢K$x¹ˆ61¢#^“ÏŽÑSq«@}JÏètMo1*OÀx쇳íbS„ãEPÒnŸ3­3 õ
+Y³Oºlê 5 Kl‰Ñ#(I¥<•ô(ÇâĽ'^CÙP8yâg ;¬¡ŽÜI«ÿ”ŽÔë=Suþ–n"¸¤#aôõiíìÊ´gc-ày6#r—nÓçE$Ühz£©™æë/D&f»šUP€3r2[¦y^]®7Á9ÓØñF?óð]‘› {ÞîѶôÁ³kÞöiÀáê ×¼bóiŸjïTüŒ´*~P]TüÜC<Eø¥¬iŽ eY‹8Yð=>eQ[O·dÒеJ”.ë y,U#7i%õ{&m†k vú…SÜ×°ºF ®lˆ4 nJª\$…xi©”×tF¤%«:£šàETdCÿÀÎE¥ŽOg¯ŠâïérOPÁ;Êäe[Aš<– …WÈT“T]”8®‚…]sHãu¶×†$ è‡2m¶`T™A’ÁtÍù„Pãp…~ºÙf›íbUÒ„Ť|¯› ÂXÁµœ´ÝÔ&%ÞdºPGœ£éB@Nyø[d«Yž`Ý4ø `ЙÁš`™’W´Æ2#E§Õ?áѯÏ%ášÎÖËÝûjúº]ÌcÍLj|ß&–<áÄ̬Zï¸Zºl¹ËD3¡ñ M{é–žüºoEO}ÕAßMÓa¢C;ÛðhñŠb{Y¯‹²þÿXÌcÚnÑeTÓ6V]š ,Wãü©ƒeZ|¬#x(·GZõÚŠ€ÎC*£>ïä­
+qþtºn¹Xe›l•.‹Et†p§9±1#æÄêJÈÞ¡œÙO䌌{ûà¢y±XͳUq¯³UäçòäÙª^TÓxoñ² àœê«Q4e°'ù£jÌ‘'Ë{Yä½GázÌU¤ÏËlš­êžps*èAò¿Ý
+endstream
+endobj
+2548 0 obj <<
+/Type /Page
+/Contents 2549 0 R
+/Resources 2547 0 R
+/MediaBox [0 0 612 792]
+/Parent 2551 0 R
+/Annots [ 2517 0 R 2518 0 R 2519 0 R 2520 0 R 2521 0 R 2522 0 R 2523 0 R 2524 0 R 2525 0 R 2526 0 R 2527 0 R 2528 0 R 2529 0 R 2530 0 R 2531 0 R 2532 0 R 2533 0 R 2534 0 R 2535 0 R 2536 0 R 2537 0 R 2538 0 R 2539 0 R 2540 0 R 2541 0 R 2542 0 R 2543 0 R 2544 0 R 2545 0 R 2546 0 R ]
+>> endobj
+2517 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 568.966 314.092 582.914]
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+2518 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 545.056 314.092 559.004]
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+2519 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 521.146 314.092 535.093]
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+2520 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 389.639 298.041 403.587]
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+2521 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 389.639 314.092 403.587]
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+2522 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 341.818 298.041 355.766]
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2523 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 341.818 314.092 355.766]
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+2524 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 258.132 314.092 272.08]
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2525 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 152.528 314.092 166.476]
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2526 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [493.641 604.832 505.596 618.78]
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+2527 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.819 596.463 403.756 604.876]
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+2528 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.357 580.922 492.313 594.869]
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+2529 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 580.922 508.364 594.869]
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+2530 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [459.325 557.011 471.28 570.959]
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+2531 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [475.376 557.011 487.331 570.959]
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+2532 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 557.011 508.364 570.959]
+/A << /S /GoTo /D (page.123) >>
+>> endobj
+2533 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [470.395 533.101 487.331 547.049]
+/A << /S /GoTo /D (page.101) >>
+>> endobj
+2534 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 533.101 508.364 547.049]
+/A << /S /GoTo /D (page.124) >>
+>> endobj
+2535 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 461.37 508.364 475.318]
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+2536 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 377.684 508.364 391.631]
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+2537 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [413.386 270.087 425.341 284.035]
+/A << /S /GoTo /D (page.12) >>
+>> endobj
+2538 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [429.437 270.087 441.392 284.035]
+/A << /S /GoTo /D (page.14) >>
+>> endobj
+2539 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [445.488 270.087 457.443 284.035]
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+2540 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [461.539 270.087 473.494 284.035]
+/A << /S /GoTo /D (page.79) >>
+>> endobj
+2541 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [477.59 270.087 489.545 284.035]
+/A << /S /GoTo /D (page.83) >>
+>> endobj
+2542 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [493.641 270.087 505.596 284.035]
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+2543 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.819 259.781 398.775 270.131]
+/A << /S /GoTo /D (page.96) >>
+>> endobj
+2544 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [402.87 259.781 414.826 270.131]
+/A << /S /GoTo /D (page.97) >>
+>> endobj
+2545 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.357 162.491 492.313 176.438]
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+2546 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 162.491 508.364 176.438]
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+2550 0 obj <<
+/D [2548 0 R /XYZ 152.694 705.06 null]
+>> endobj
+2547 0 obj <<
+/Font << /F28 597 0 R /F8 596 0 R /F31 600 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2579 0 obj <<
+/Length 2288
+/Filter /FlateDecode
+>>
+stream
+xÚåZKo#7¾ûWôi¡Æ «ŠÏ›6A ¹ìn|YLrå–­Œ^#µ×›ìŸßê[껥öHö;À@4E5¿"Y_}Ul™<&2ùñFVŸßÞÝ|óºÄ oÐ$w³4 ãUb´H:¹{H>~R»Ùl²œ/þøðÛÝOßüpøí„1ŽŸWŒ‡øñÃ-Œ*šjDheèEÇM~Jr N8pü Âëj.þÚ•s4pÝ’N7‡°žæ›õsvŒJy¡¸U¡<7bãƒbÂHx}eÉ6_ä¼ño’O·ÖÀˆtõ}¹þm#+Ð+×/?ÿÏ_Æ»—cK- "ûõ–v÷ÊÀ6€óD»Pì¸íµ´ýÖ–j-G¨mu*ÑAòû»›/7P™€Þ Иé„Ädº¼ùô›Lø»Ÿ)Ȼ䥹L@ ¯7É/7ïq&í­P¦D¸™Lw‘«
+Ö=¬?Ü¢MŸ—éê7²Ò{¦‹ÉnW¢_o²ùzÕsÞx8˜þóVNYî‚iîÂßþúÝÿÉy»¢¥åy3çœ7m‘?Õeœ¡ùsoæ|ylPž.@‘šÜ¥¢`¦Tª"{”ZGÙ¼œúx;~ÿ’^èk‡x¦nÞFdÊçùæДÆw½±
+úcUŸÝãˆáš‡ùZ%(›“0æîa”)š¼ÄFCÝ«z})H8M¶Bgóc‡*÷.[üDézëB¯ÏåFÕë°|lÂæ/êë"?Ç–¢ôõ¶øܟ燖ÕXÔœ
+cÄžÉ*›m'Óc³˜RÈÁµÌ*Áº(YT3ƒ]N‘õ'¶ÞÒź#ŸdeE2yÙïw¥yÇ1ûWƒpäMPøÞTþŠ‚¬oî[å˜Ö@’ M€²i9`U½X¤1w£ƒwBðn*²×éº×™øCL9g>܆¡×–Hò^Û…ÄîyÆúšgÊš“öqJGBRà$]@ÂÍðh‚šÂ| ‰ i“ s– V9÷AØ‘¸ûLŽÛ­·‘Ü
+•@…ƒ•ê-K’óU`‚4ôºB…ãqî™®—›mº‹mk„Ò½BU sø·e¾JFÙ
+y¥eŽü•|«›[N¯OWÐâü#M¦Ùz{¾æÕl!(¹=7u%÷¸=N’{³˜gÙzH¯ÑÜ6 ˆ>Äp¥N:dÎ/ÏiúgšMîéõÒa»›Ÿ~e^—Ò¼©9Eà†*Ïl%6$ÀæŸV€3½‰ ãC}FbƒŽ]ÝÍÆ»ùŸCµJª+¾R¶x;n€ãýÉÒÍtý¼ÊÒím?ÈA³í|õ)P`Ï:›Ë}²¦ Ú;g¨ JWÕ‰“ÕVЪŲû¦¯t( ¡W[‰ü…¯¢8b"7վׇ^.Á“ ý2õp­ë^CuoP>m ]-6ö!¥H*  ó&uÈØË
+] §m­HÕ:ÁÄe/¼’ß<ßϳtù¾åÕü “Ähöݨ˜šðÍd;yÜN6Oç{/½yW'CMƒH z¾ß¥ÓP keR¬? ž{Ãt†|(¡Øƒz¹ÒKõ”ž™Ç¬6ìÊÙ.‹”í™–é0O5.`(¼ÒYí3ð˜éÙG„VŠɧè"L<Y¥EìZN¶ŸíqZ ÇˆpáÓc ²ÈWÓñ6Â_ˆ1¶ÎÒ@9á(Ñœ>y‡'‘ ¿ÓÔéDß’ìE:Nÿ½–òs3Œ ‡¢¬™-]³(Ó³k]˜"SR’Ç™Š’È<¢ò%°áO’ªƒdâ$ˆl}©ÓC }¶oÖ»˜ñ^PO±äÐjÕ°Ú«™
+\kË cc´Ê"ÓÀ-k€vÀ¥øQ$¬­"Î^·FSI`²%×rÂÝó&&é9(*;ü^¼?3QÔ¾¿LRˆ8&ãO™ØÆÓ§t‰©œ¹aLñçûÂR×Å€²fÙž¸úyßÄéêáüP>0/S6rݦXÖ(…‰²Fè¯Ô*ÁוÉ/7(jà"ÍÞÉ@£„Öî2²(óüØ»—I¤ŒãAà5ïˆÏ8ö%„y] ú›¢¤0êB›BRp2yÀ=÷óû'+ÑG>¨l TæäKÊsÆ{ê­‚|ÆcfÜM·óMÄŒäDÆ÷Aô²†èüÄâ "o†I‚Ae8ÖŽh¿¹‰´é4xòð/C{#Èô™ÍÐJ³ S5ó•ôÍóB…wtÅ—@æçϨ5ÇÔßË<›>ëÕcGE²+ÈœaËÅ bùL‚Æ®æŒTÌu-Óññ³‘<šÑÞÏW»t󦪌5CT?Ãœ®q”ù½)^õÆVuÞض.f:v¿©Ž~•Z–ð¯ù–3ýʸXI3d!AÊn"&†Æ"î"DLR
+„ãYfFLdQåÔ9züˆÞ(_Aÿ§ó£òîdÀÓ-½J} 5~Z¯?¿™+-ä©«—g|k›ºï_ÂQGËjÓ\Fsp*-¬´-‹gÙxØe^q™ˆ^ºáf}™ÈzdHõpþñC:›</"@ è1Æ©
+Niy½[»Û…«+ì5pÍëI µã³^…ü-$I=Šù§½Ì†‚ε7t1_¥Ñx¢öŠœ 5Áê¥Ø?çdÝë°#8ä‰/Ùj²Lß:’Ÿqœ ºFØ3odY‘‹ó¿zvàäF;¼ÈÑB"´Í\gé»Hq/&E`ã· 'êÒCßÂsqR+'éÆ–Å/ .ŒÍ ƶžM׫,]e»÷ÉüOøaGæQèù›Ýº.ž;­¢° í5ÜuÂ{KŸÖÚÖ:ðÖ#ËST…]•PQÁÌ9ÿ_4P&
+endstream
+endobj
+2578 0 obj <<
+/Type /Page
+/Contents 2579 0 R
+/Resources 2577 0 R
+/MediaBox [0 0 612 792]
+/Parent 2551 0 R
+/Annots [ 2552 0 R 2553 0 R 2554 0 R 2555 0 R 2556 0 R 2557 0 R 2558 0 R 2559 0 R 2560 0 R 2561 0 R 2562 0 R 2563 0 R 2564 0 R 2565 0 R 2566 0 R 2567 0 R 2568 0 R 2569 0 R 2570 0 R 2571 0 R 2572 0 R 2573 0 R 2574 0 R 2575 0 R 2576 0 R ]
+>> endobj
+2552 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 628.742 314.092 642.69]
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+2553 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 616.787 298.041 630.735]
+/A << /S /GoTo /D (page.17) >>
+>> endobj
+2554 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 616.787 314.092 630.735]
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2555 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 592.877 314.092 606.824]
+/A << /S /GoTo /D (page.16) >>
+>> endobj
+2556 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 580.922 298.041 594.869]
+/A << /S /GoTo /D (page.17) >>
+>> endobj
+2557 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 580.922 314.092 594.869]
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2558 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 533.101 314.092 547.049]
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+2559 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 461.37 298.041 475.318]
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2560 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 461.37 314.092 475.318]
+/A << /S /GoTo /D (page.90) >>
+>> endobj
+2561 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 365.728 314.092 379.676]
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2562 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 341.818 314.092 355.766]
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2563 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 305.953 314.092 319.9]
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2564 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 497.235 508.364 511.183]
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+2565 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 449.415 508.364 463.362]
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+2566 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 425.504 508.364 439.452]
+/A << /S /GoTo /D (page.116) >>
+>> endobj
+2567 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [443.274 401.594 455.23 415.542]
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+2568 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 377.684 508.364 391.631]
+/A << /S /GoTo /D (page.121) >>
+>> endobj
+2569 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [454.344 295.99 461.318 309.938]
+/A << /S /GoTo /D (page.3) >>
+>> endobj
+2570 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [465.413 295.99 477.369 309.938]
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2571 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.357 295.99 492.313 309.938]
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+2572 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 295.99 508.364 309.938]
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2573 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 284.035 508.364 297.983]
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+2574 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 200.349 508.364 214.296]
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2575 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 140.573 508.364 154.521]
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2576 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 116.662 508.364 130.61]
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2580 0 obj <<
+/D [2578 0 R /XYZ 152.694 705.06 null]
+>> endobj
+2577 0 obj <<
+/Font << /F28 597 0 R /F8 596 0 R /F31 600 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2608 0 obj <<
+/Length 2261
+/Filter /FlateDecode
+>>
+stream
+xÚÍZIoã8¾çWèè
+ ¥›ÚŸ ²>^ÑRÙØñÍNCÇÏæÙcº_§0„Liéq´NŽç¿<ïq¹Ic§qÉ
+òQŸ(OÇ]$CÔœ ç®#D嘖®F@¨÷ËtwŠ”¨t2
+íŠoLРM;š”J9²u¾‰¸$E¾SÙ÷“LOZm¿Á+£
+yƒW‰ò˜y1KWù*-žg_²O( ƒ:+\rùº±òQ1[i¶Šˆƒ@Üß/£Vú.Vs5Àp¦ù•®€qZï²ÿ¼Ñá'!ùTܧ7Â
+›—@¾ý¬ÏlÉá¥øaÝMJÄÀ·¯“*a™ÐæJšÙn‘~ÈÖ´Èæ±¼ ™8ë:lé³Æó÷jƒ¨Pî_%´Œ– œ8üýr™V©6?5¯Ï׫ڇ¸—â!Í#•ª"Á2êùævJÙéÃþ¦–V÷°Lóü–Ò®ûð F2ÎN Qö>DëkD¦¸º6s{iœ²%-"èÜŸú¿¨|•”ƒd7D|² E4!#™N¼gU úDM(ÄUœTšÈm‚³õ<ÍŸ¿©Q [•§y¶½N@/Û
+\Gn¶‰Ÿ¼'ä»Å6b÷––‡ž©Äê QÆ[Qº°kQ6†Žœ‰nëTriFzQ¼cm¥-Ñû‘€T!epc³å¯‹yT“V|H¾ÿ¦0PÃŒÚDeT¼É@™â^÷ýŠž¡ À
+dààjÎx0Žàðt¥SÀl½_-^ÛœA0Ó´³­dŒÕaͪz»E  EOV5’V:B FÕÑjñÆÚ¥Æc
+Ë%žºðT–ñþ~Àž»mG,ç”՗þ¤x¦D§B³A*•ÑyƒA3ÚÚ½¨{•óL¬+I0<ÜŒ —Ьò®·l-uC¼ÕAþ:H]› ]í(uBè„â%3Dµ‚R%dóÄíÂÒ»¼•@<¸(7ÆE²q€“—]ŸŒÚp展72$áN<v°#­‡¬Ì^ò+ÆÑÚ§×V¦+#ÆÈ`Z¨Ë>¯¯; Õ©VÌ %¯Cü³ÖÎvc—êµÿ{Ìw9
+endstream
+endobj
+2607 0 obj <<
+/Type /Page
+/Contents 2608 0 R
+/Resources 2606 0 R
+/MediaBox [0 0 612 792]
+/Parent 2551 0 R
+/Annots [ 2581 0 R 2582 0 R 2583 0 R 2584 0 R 2585 0 R 2586 0 R 2587 0 R 2588 0 R 2589 0 R 2590 0 R 2591 0 R 2592 0 R 2593 0 R 2594 0 R 2595 0 R 2596 0 R 2597 0 R 2598 0 R 2599 0 R 2600 0 R 2601 0 R 2602 0 R 2603 0 R 2604 0 R 2605 0 R ]
+>> endobj
+2581 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 545.056 314.092 559.004]
+/A << /S /GoTo /D (page.16) >>
+>> endobj
+2582 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [307.118 497.235 314.092 511.183]
+/A << /S /GoTo /D (page.5) >>
+>> endobj
+2583 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 485.28 314.092 499.228]
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+2584 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 377.684 314.092 391.631]
+/A << /S /GoTo /D (page.26) >>
+>> endobj
+2585 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [281.105 365.728 293.06 379.676]
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2586 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 365.728 314.092 379.676]
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+2587 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 305.953 314.092 319.9]
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+2588 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 258.132 314.092 272.08]
+/A << /S /GoTo /D (page.95) >>
+>> endobj
+2589 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 174.446 314.092 188.393]
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+2590 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 138.58 314.092 152.528]
+/A << /S /GoTo /D (page.19) >>
+>> endobj
+2591 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [493.641 652.653 505.596 666.6]
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2592 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.819 642.347 398.775 652.697]
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+2593 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [403.793 642.347 415.748 652.697]
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+2594 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [420.766 642.347 432.721 652.697]
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+2595 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [437.74 642.347 449.695 652.697]
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+2596 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [454.713 642.347 466.668 652.697]
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+2597 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [471.686 642.347 483.641 652.697]
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2598 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [488.66 642.347 505.596 652.697]
+/A << /S /GoTo /D (page.106) >>
+>> endobj
+2599 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.819 630.392 403.756 640.742]
+/A << /S /GoTo /D (page.126) >>
+>> endobj
+2600 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [407.852 630.392 424.788 640.742]
+/A << /S /GoTo /D (page.141) >>
+>> endobj
+2601 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 592.877 508.364 606.824]
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+2602 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 580.922 508.364 594.869]
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+2603 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 473.325 508.364 487.273]
+/A << /S /GoTo /D (page.20) >>
+>> endobj
+2604 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 425.504 508.364 439.452]
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2605 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 389.639 508.364 403.587]
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+2609 0 obj <<
+/D [2607 0 R /XYZ 152.694 705.06 null]
+>> endobj
+2606 0 obj <<
+/Font << /F28 597 0 R /F8 596 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2653 0 obj <<
+/Length 2320
+/Filter /FlateDecode
+>>
+stream
+xÚÕ[K“ÚH¾÷¯ÐG 5•Yï±31·ÙíÝ‹= ên€ö8öÏo–TJÑ<¼w„ôeeæ—¯O^žüöÄÃß<?ýü+ÚÄ1§Q'Ï/ (Á´“‰V†¡PÉó4ù8øBæoi>þ<O?üùüûÏ¿îÿD)&¹¤ûײCØø#bö¼Äi
+f­¾ŽðB0 ÕÏ6«ñkºÉ¿ÇôopîŨ9ÿ‰>b 8`yÇ”a¸ç€9Õ€²Ž!äk¡ûÿWO©—õkPÐ?{J>æ$jø¾t½C‰ƒ÷“X 7
+¶tB+„s1G:…p4ÞæÙ5šÑ
+¥ÑtÐPÖéíëÛÓ—¼Ëu±z€|A|§{²~?ÆÙf&¿g
+”>eZnñVÔeS‘[ÍZÊ»ÆÐ,Ç‹Üeµ³—ÒÜã¥,ZùV¨öŒÆwÏ^%¡AÅ™ixìtüýÿ³{^ÚóyÝóDb]Œ:°ê¯Û0
+Q3[u]Ë=X½¬Ç“|–ݯæÓÓ’eµÓÕb¼~F“;Nç¨ ˧JV„KÄ]S]FQ¶õvþàܶ EÄžÉàj“®"¸“ÒãöÞTJVí8*Þ+Ϥú±n»,»êCÁ”³MBA°~›i‹iǵ.–Š–FÖŸ Aù©¿Ö߉ôæšêrÊ7«ËEÑï/>¥2´úT:¿‰ s;‚¬xE1´”§zý;øe¶:Cõ­·±zö€èêñ‚4;Ëë©À|<åéßùUÓÇ3.)ÈÉ4û-> D¦0QÄÏÎâzbÔ4Ûæ«m~WRUÆô"Õõx¹™ïÃý…ë2Ìp6^¾>âXI`bOw·æîò_-tŽm ù@eát Â;KV*.d=Ö¦5Pa$“[Ï^_Óõèež}Ý´>{êªâJZšøĹüadC¶ñŽöEá…Û:¼€®’´:\„ðâ˜:qƒæ6Ä
+ƒÕ¦ÄO’3!umBê>d»µ["ê+ˆ•Lªª90»TÅT¹ÅPJfÅÁv!)õÜ­=µ­HKÓÁ‹Ò¹Šý2[ CY.ÀÁÙ΂2‡–\ï6±ýŒ§/$OëïÍf6³£¥—D‹8>@eO1wxfÌœ<È(U¼»<¿&ʾü)öD¯m´tù–P…áBGNðûó+ÂéDHÅ8×ï"MÊ3…¤;iJ7¡yŒ¡îI¼˜ü{?I5ŒüŸòk’º:¢÷ïh6˸H¬ß.§éËl™N¯’ÖµS$¹Øžï“õûŒðÜ’{»|ûœýÝÒƼ~¬(ˆ¹âõÈ7ÞN
+O méÞmÕ÷28@Á+û-Z#}‡VròqÅ
+}Õíü°¶þ¯æá 4#ZKƒºÃ©]ݲ°FׯHð^Åövùõžj¾ÒœµÛ¤[d=¿wUk|بfñ²nì;Œœ“ÖnLtEöð®™›†Ö*A´Ìʽöðv“®Æ“/ñc±7žÐ7zbßèióÓfŠ#€Í8òŸ–8²;W²g?qOÈL]H˜Ò)}Ãuµ4ºôZ_ß:Ÿ"W0<°ߤku?þš®GãÅf1Îß"Š%ˆz×gÚä>kûNÖÉù=OŸØQA¸'?Xõ’®ÛŽ˜ï{®§cÅ«òAÉ0¢j*LÔAˆS²ê}*=7:Ö†¾ÎkoÈwS+¾{¥†·@Œ¼ZÒò6hñòO½WŸ(Ж©û×Ù:[Viü'ÿœ¡æúLüáíOl§2 _³²Ï€›n&'v²¤L]7¦›Éaø÷™ÚŸ
+endstream
+endobj
+2652 0 obj <<
+/Type /Page
+/Contents 2653 0 R
+/Resources 2651 0 R
+/MediaBox [0 0 612 792]
+/Parent 2551 0 R
+/Annots [ 2610 0 R 2611 0 R 2612 0 R 2613 0 R 2614 0 R 2615 0 R 2616 0 R 2617 0 R 2618 0 R 2619 0 R 2620 0 R 2621 0 R 2622 0 R 2623 0 R 2624 0 R 2625 0 R 2626 0 R 2627 0 R 2628 0 R 2629 0 R 2630 0 R 2631 0 R 2632 0 R 2633 0 R 2634 0 R 2635 0 R 2636 0 R 2637 0 R 2638 0 R 2639 0 R 2640 0 R 2641 0 R 2642 0 R 2643 0 R 2644 0 R 2645 0 R 2646 0 R 2647 0 R ]
+>> endobj
+2610 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 616.787 314.092 630.735]
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+2611 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 580.922 298.041 594.869]
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+2612 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 580.922 314.092 594.869]
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2613 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 557.011 314.092 570.959]
+/A << /S /GoTo /D (page.117) >>
+>> endobj
+2614 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 509.19 314.092 523.138]
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+2615 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 473.325 314.092 487.273]
+/A << /S /GoTo /D (page.120) >>
+>> endobj
+2616 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [270.035 449.415 281.99 463.362]
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+2617 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 449.415 298.041 463.362]
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2618 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 449.415 314.092 463.362]
+/A << /S /GoTo /D (page.96) >>
+>> endobj
+2619 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 425.504 314.092 439.452]
+/A << /S /GoTo /D (page.134) >>
+>> endobj
+2620 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 401.594 314.092 415.542]
+/A << /S /GoTo /D (page.134) >>
+>> endobj
+2621 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 365.728 314.092 379.676]
+/A << /S /GoTo /D (page.134) >>
+>> endobj
+2622 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 270.087 314.092 284.035]
+/A << /S /GoTo /D (page.73) >>
+>> endobj
+2623 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 246.177 314.092 260.124]
+/A << /S /GoTo /D (page.72) >>
+>> endobj
+2624 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 210.311 314.092 224.259]
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+2625 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 616.787 508.364 630.735]
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+2626 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 521.146 508.364 535.093]
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+2627 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [491.427 509.19 508.364 523.138]
+/A << /S /GoTo /D (page.114) >>
+>> endobj
+2628 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [435.249 485.28 447.204 499.228]
+/A << /S /GoTo /D (page.17) >>
+>> endobj
+2629 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [451.3 485.28 463.255 499.228]
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+2630 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [464.307 461.37 476.262 475.318]
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+2631 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.357 461.37 492.313 475.318]
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2632 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 461.37 508.364 475.318]
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+2633 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 425.504 508.364 439.452]
+/A << /S /GoTo /D (page.68) >>
+>> endobj
+2634 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 377.684 508.364 391.631]
+/A << /S /GoTo /D (page.70) >>
+>> endobj
+2635 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 365.728 508.364 379.676]
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+2636 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [464.307 353.773 476.262 367.721]
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+2637 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.357 353.773 492.313 367.721]
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2638 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 353.773 508.364 367.721]
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+2639 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [448.256 307.945 460.211 321.893]
+/A << /S /GoTo /D (page.18) >>
+>> endobj
+2640 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [464.307 307.945 476.262 321.893]
+/A << /S /GoTo /D (page.21) >>
+>> endobj
+2641 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.357 307.945 492.313 321.893]
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+2642 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 307.945 508.364 321.893]
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+2643 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 248.169 508.364 262.117]
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+2644 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [464.307 224.259 476.262 238.207]
+/A << /S /GoTo /D (page.11) >>
+>> endobj
+2645 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.357 224.259 492.313 238.207]
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2646 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 224.259 508.364 238.207]
+/A << /S /GoTo /D (page.78) >>
+>> endobj
+2647 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.408 166.476 508.364 180.423]
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+2654 0 obj <<
+/D [2652 0 R /XYZ 152.694 705.06 null]
+>> endobj
+2651 0 obj <<
+/Font << /F28 597 0 R /F8 596 0 R /F31 600 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2662 0 obj <<
+/Length 1000
+/Filter /FlateDecode
+>>
+stream
+xÚÍWMo7½ëWð(Ãá 9äM(È­­€urmÙ"{]iÅýõý´´Km¤ÄmsZb—ä¾7óføhÔ­2êÝÈÔÏŸæ£×omPQGo½šß(p¨}$åk‹NͯÕÅøóêz™M>Îß¿~»?×FMle£rÒò~bƒLÝd÷wÕ8ŸL9ÐXO¦hmï!Û £@m
+0Åà—w#u1ƒqŒõ÷
+§lÿêøDS8kŽ),è„aZs›èèê0|
+¾ÒY„.LDèj¥ÿ–¢,-
+P½uOM;9„òå—|v™å'
+E?aæVÑZEG[’oÔ:ÿ’Ïîy‘oc“Š‰:t
+°z»X¯—O}¬4s{T|0Î$ÎNy EÌ|Õâ%QÒël§Ê¾E4NvFL4ZrÚ@PÎXMà_¤ÓR ïFf³ºNä´%8).ÞY!áùøiAÑhòð2$XÞ%”˜=æ×Ëû„£˜'ÚW#.
+³ÙÍ:[ä/×»°í¦@ö¬Þ]º\]®WÙífñðçÓ6J9ÙÉzà³í†­|³ç÷ òšMëy
+ ”U½$ v+Ÿû} ¤/‰2º SéܾtàLAj“zYFu_jC>4µLœtk.–§Ï‘h\Îÿ^I¾X'Ü€»ð5í Fd–L=‰‡§Ú—„j›ß“0´ÐÌ/ùïľ:¥pb2ô)'5>düÇÆ¡Ï÷ïÙt5¸³Kƒppæ‡/áû׿“í§Uâ¤#© J¨ÓÝ‹ñÙyr¬‹Ä²Áæm(Ìbuöi;©@90°vŸ
+l¬Ñ7d¶u3¨=J3MzÂ?ØUÌ4
+endstream
+endobj
+2661 0 obj <<
+/Type /Page
+/Contents 2662 0 R
+/Resources 2660 0 R
+/MediaBox [0 0 612 792]
+/Parent 2551 0 R
+/Annots [ 2648 0 R 2649 0 R 2650 0 R 2655 0 R 2656 0 R 2657 0 R 2658 0 R 2659 0 R ]
+>> endobj
+2648 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [275.016 652.653 281.99 666.6]
+/A << /S /GoTo /D (page.3) >>
+>> endobj
+2649 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [286.086 652.653 298.041 666.6]
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+2650 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 652.653 314.092 666.6]
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+2655 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 640.697 314.092 654.645]
+/A << /S /GoTo /D (page.15) >>
+>> endobj
+2656 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 427.497 314.092 441.445]
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+2657 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.137 379.676 314.092 393.624]
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+2658 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [281.105 276.065 293.06 290.012]
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+2659 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [297.156 276.065 314.092 290.012]
+/A << /S /GoTo /D (page.133) >>
+>> endobj
+2663 0 obj <<
+/D [2661 0 R /XYZ 152.694 705.06 null]
+>> endobj
+2660 0 obj <<
+/Font << /F28 597 0 R /F8 596 0 R /F31 600 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2664 0 obj
+[896.3]
+endobj
+2665 0 obj
+[599.5 571 571 856.5 856.5 285.5 314 513.9 513.9 513.9 513.9 513.9 770.7 456.8 513.9 742.3 799.4 513.9 927.8 1042 799.4 285.5 285.5 513.9 856.5 513.9 856.5 799.4 285.5 399.7 399.7 513.9 799.4 285.5 342.6 285.5 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 285.5 285.5 285.5 799.4 485.3 485.3 799.4 770.7 727.9 742.3 785 699.4 670.8 806.5 770.7 371 528.1 799.2 642.3 942 770.7 799.4 699.4 799.4 756.5 571 742.3 770.7 770.7 1056.2 770.7 770.7 628.1 285.5 513.9 285.5 513.9 285.5 285.5 513.9 571 456.8 571 457.2 314 513.9 571 285.5 314 542.4 285.5 856.5 571 513.9 571 542.4 402 405.4 399.7 571 542.4 742.3 542.4 542.4 456.8]
+endobj
+2666 0 obj
+[562.2 587.8 881.7 894.4 306.7 332.2 511.1 511.1 511.1 511.1 511.1 831.3 460 536.7 715.6 715.6 511.1 882.8 985 766.7 255.6 306.7 514.4 817.8 769.1 817.8 766.7 306.7 408.9 408.9 511.1 766.7 306.7 357.8 306.7 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 306.7 306.7 306.7 766.7 511.1 511.1 766.7 743.3 703.9 715.6 755 678.3 652.8 773.6 743.3 385.6 525 768.9 627.2 896.7 743.3 766.7 678.3 766.7 729.4 562.2 715.6 743.3 743.3 998.9 743.3 743.3 613.3 306.7 514.4 306.7 511.1 306.7 306.7 511.1 460 460 511.1 460 306.7 460 511.1 306.7 306.7 460 255.6 817.8 562.2 511.1 511.1 460 421.7 408.9 332.2 536.7 460 664.4]
+endobj
+2667 0 obj
+[525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525]
+endobj
+2668 0 obj
+[399.7 399.7]
+endobj
+2669 0 obj
+[580 591.1 624.4 557.8 535.6 641.1 613.3 302.2 424.4 635.6 513.3 746.7 613.3 635.6 557.8 635.6 602.2 457.8 591.1]
+endobj
+2670 0 obj
+[466.3]
+endobj
+2671 0 obj
+[569.5 569.5 569.5 569.5 569.5 569.5 569.5 569.5 569.5 569.5 323.4 323.4 323.4 877 538.7 538.7 877 843.3]
+endobj
+2672 0 obj
+[525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525]
+endobj
+2673 0 obj
+[413.2 413.2 531.3 826.4 295.1 354.2 295.1 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 295.1 295.1 295.1 826.4 501.7 501.7 826.4 795.8 752.1 767.4 811.1 722.6 693.1 833.5 795.8 382.6 545.5 825.4 663.6 972.9 795.8 826.4 722.6 826.4 781.6 590.3 767.4 795.8 795.8 1091 795.8 795.8 649.3 295.1 531.3 295.1 531.3 295.1 295.1 531.3 590.3 472.2 590.3 472.2 324.7 531.3 590.3 295.1 324.7 560.8 295.1 885.4 590.3 531.3 590.3 560.8 414.1 419.1 413.2 590.3 560.8 767.4 560.8 560.8]
+endobj
+2674 0 obj
+[638.9 963 638.9 963 963 963 963 963 963 963 1222.2 638.9 638.9 963 963 963 963 963 963 963 963 963 963 963 963 1222.2 1222.2 963 963 1222.2 1222.2 638.9 638.9 1222.2 1222.2 1222.2 963 1222.2 1222.2 768.5 768.5 1222.2 1222.2 1222.2 963 365.7 1222.2 833.3 833.3 1092.6 1092.6 0 0 703.7 703.7 833.3 638.9 898.1 898.1 963 963 768.5 989.9 813.3 678.4 961.2 671.3 879.9 746.7 1059.3 709.3 846.3 938.8 854.5 1427.2 1005.7 973 878.4 1008.3 1061.4 762 711.3 774.4 785.2 1222.7 883.7 823.9 884 833.3 833.3 833.3 833.3 833.3 768.5 768.5 574.1 574.1 574.1 574.1 638.9 638.9 509.3 509.3 379.6 638.9 638.9 768.5 638.9 379.6 1000 924.1 1027.8 541.7 833.3 833.3 963 963 574.1 574.1]
+endobj
+2675 0 obj
+[967.9]
+endobj
+2676 0 obj
+[638.9 638.9 958.3 958.3 319.4 351.4 575 575 575 575 575 869.4 511.1 597.2 830.6 894.4 575 1041.7 1169.4 894.4 319.4 350 602.8 958.3 575 958.3 894.4 319.4 447.2 447.2 575 894.4 319.4 383.3 319.4 575 575 575 575 575 575 575 575 575 575 575 319.4 319.4 350 894.4 543.1 543.1 894.4 869.4 818.1 830.6 881.9 755.6 723.6 904.2 900 436.1 594.4 901.4 691.7 1091.7 900 863.9 786.1 863.9 862.5 638.9 800 884.7 869.4 1188.9 869.4 869.4 702.8 319.4 602.8 319.4 575 319.4 319.4 559 638.9 511.1 638.9 527.1 351.4 575 638.9 319.4 351.4 606.9 319.4 958.3 638.9 575 638.9 606.9 473.6 453.6 447.2 638.9 606.9 830.6 606.9 606.9 511.1]
+endobj
+2677 0 obj
+[625 625 937.5 937.5 312.5 343.7 562.5 562.5 562.5 562.5 562.5 849.5 500 574.1 812.5 875 562.5 1018.5 1143.5 875 312.5 342.6 581 937.5 562.5 937.5 875 312.5 437.5 437.5 562.5 875 312.5 375 312.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 312.5 312.5 342.6 875 531.2 531.2 875 849.5 799.8 812.5 862.3 738.4 707.2 884.3 879.6 419 581 880.8 675.9 1067.1 879.6 844.9 768.5 844.9 839.1 625 782.4 864.6 849.5 1162 849.5 849.5 687.5 312.5 581 312.5 562.5 312.5 312.5 546.9 625 500 625 513.3 343.7 562.5 625 312.5 343.7 593.7 312.5 937.5 625 562.5 625 593.7 459.5 443.8 437.5 625 593.7 812.5 593.7 593.7 500]
+endobj
+2678 0 obj
+[525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525]
+endobj
+2679 0 obj
+[583.3 555.6 555.6 833.3 833.3 277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 277.8 277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8 444.4 500 1000 500 500 500]
+endobj
+2680 0 obj
+[472.2]
+endobj
+2681 0 obj
+[272 326.4 272 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 272 272 272 761.6 462.4 462.4 761.6 734 693.4 707.2 747.8 666.2 639 768.3 734 353.2 503 761.2 611.8 897.2 734 761.6 666.2 761.6 720.6 544 707.2 734 734 1006 734 734 598.4 272 489.6 272 489.6 272 272 489.6 544 435.2 544 435.2 299.2 489.6 544 272 299.2 516.8 272 816 544 489.6 544 516.8 380.8 386.2 380.8 544 516.8 707.2]
+endobj
+2682 0 obj
+[500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 761.9 689.7 1200.9 820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7 666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9]
+endobj
+2683 0 obj
+[514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6]
+endobj
+2684 0 obj
+[693.3 654.3 667.6 706.6 628.2 602.1 726.3 693.3 327.6 471.5 719.4 576 850 693.3 719.8 628.2 719.8 680.5 510.9 667.6 693.3 693.3 954.5 693.3 693.3 563.1 249.6 458.6 249.6 458.6 249.6 249.6 458.6 510.9 406.4 510.9 406.4 275.8 458.6 510.9 249.6 275.8 484.7 249.6 772.1 510.9 458.6 510.9 484.7 354.1 359.4 354.1 510.9 484.7 667.6 484.7 484.7]
+endobj
+2685 0 obj <<
+/Length1 2446
+/Length2 21068
+/Length3 0
+/Length 22474
+/Filter /FlateDecode
+>>
+stream
+xÚŒ÷P\ÛÖ
+#A‚kphÜÝÝÝà 4îÜBpw×à‚ww î®Á-¯Ï¹’s¿ÿ¯z¯ºŠÞc͹æcÊÚ %©Š:£¨™ƒ HÊÁÞ•‘•‰… ®(¦ÃÊ`aagbaaC ¤Ô°rµýgR äìbå`Ï÷qgм&t;*:ØäÜl¬ì
+ÿr`
+L®®
+àdaaáæ“
+ž Eð„Øÿ_WmпZÌÁÖìÿÚd]à µ·°ýo­\¤¬<@f*V®¦–ÿj¢ÿTÜÖʤâàbõ×…`deaù?6ð̙ڀ/p­þ6À#õ¿GJÚ›:˜ý5{lພàÒƒ'À›<¤f ¿{ÀÌdïà
+Þ
+–çò‡Ó_ôéú9Áî.àûþ¿Ç‚Y»Ø],ÿÌäOÁ7&³«¥3èEËvuwøÇp ·@pÒ>ý‚u»ÿ£ààÝÿ€àðžÿ€àœxý!Žärþ×Qÿs똺9;ƒßÈ¿ÀWÒð߯ÈdŠ°¼à`ÊÿźîKûC(;ãÞ„à,åžv-£÷²ó·'¸dÚê¬ÏÎw¢ÉÃ=h«;’4·"?I^½OZàB[UÛž}^ŒâÕ¦÷Ú–¦> LžˆÖ÷½'dÔÙ÷yuòÑ
+´n씣ÌsrãAQ)À|pï“ö¨ï/_ YØSݯæ’G|)ŸaŒÖŒÒ,™£Ì7ÉžÇ%ƒue$‚§Ã¸ô@»½›ÅÈüM"Oà{Í^ä­»Éó8ïµV©ÁæÒ…G§‹K}‹16Må-v˜"‡³è]Zµ!¸˜Ã;ôóK_¼¼™Ÿ
+®ó—2FÁÌ
+½õúç3ß3ZC[‡ú»Úé¯óõ!zðà¨L<›¨4&^œ½uÆYë5Ö`ÝbM¡uð†íL¹²½±'6q_}aeÃC9«Èæ’KÛ`™Ç²s!Ô„ÒžR}2Ó9%%œîF™}Íî8+^Q=Ç8å8©EÊD#ÌF0¥;úM
+gîòœçð9ñ5kâ»J$êêÙ¥2gW÷ý8Rámo8†æ?ì¹*øQ‘hgWº+
+§˜ ÇrôžûŒ¨6iˆN“ñ¢€cN>Jjç¾ÎÖFÞf?ê¼Eáù{ZãL.)Ñ`Ê»B§Äø÷G?“t²;fSåîŠÊ›Ø±Åjƒû/›.©šDÄ@¥Êskþ3aò8[2z®Ó
+¢ ¨ýXïÇ[tºÇõó³T¼iDLuÕ]¶â¶‚çJ*êRû*<}ã:ÕÈ/A|‡(Ûk-=\¶xö,&¼!ví—W 'Ì?K‹ô?RpáëÑjJF|RÌW>¥Až¬c’xÙR¨Þ.ÇÕ¿¥Ûyðb§.)¦šJæ*þrÉ–º
+ÑI CO“|“a`\‡+±ñÆ\7•lCƒ1œk“†æXâj|gx$ÖûŠ»=_«/èwüÓè®l4¡á þÓ”² Õ‹ô'‚ܧETß´A^§÷ý©Mï<®Œo.‰èŠ_Òß?P©2ö:~> §ŠHW¤ªãn@oAOqÕÝx~§ïLäïÙ¬Xò“¬þ3]G5j'ÑéÏcš¨‰d‰˜¨z†6…_æÖôIñ§#?:G!ïNr‡³É<Xzî-É¡+6ÜôD~ún.“-! ›ÉÆKÒ½g
+²ò¬¹éÀÕšž½_qÍsÛ«øË>Ö°îe³Èþ“–Š˜•Ð¯Ý©“¢‹Ó•OaZRóú¢–6µiMß`6ѲxÞ‘ÀB¥¿»¸ ƒí
+W’ÅWýTÂËåÕö;œcñÞ.`ÏCK$‘}¼ab0¸œ÷[àb\“Æbïvéq¦ÐX™-5²åµwÅË„†eqô–WC«Æ»½úýƒ‘ÌE\¤a¨^ÓVlp{95†è…#Jé*°Ûõö¡EH¨S”[®š8ŘAÍâ9½qV†›C~+¯ `ßX #àÖÆp½äü¶ŠÇ$HÓ;ÑŽ·Ôú§µgÁGO-c«Vˆ3P6óKy¶só-’šå7KOÒ­Qõ¡oÜ¡²ˆ–C@Ä[¬5‡“áÀû/14ß´Í\4e/ žfÓÑ}fa2âÍäô?–«¡TH{ 6s˜Ñ m(Åî~÷&û`û¨0°úÆ£…þ
+1 6¬©0ìüRŸ•­4S@(ÒVc‰q˜m\­'&ڱΠ@9g§I˜Õ~ˆÙ 
+h§£¨!±wðØb— ÝöüÒ¢èÐ+ÐëŽz N3×äÇãx‹Œ®ËÁS…µnù•ðô¥>>Ö¢-”Ä"uÃa}™”’H««Ý2¼¨¬m•f.Àv{ز˜[ßYTPÂ
+]Ò#cF矶˱tmNŸ3qsv —[—"ò]‘Þ)ˆCZÌ ðٛȽ{RhísŠÅOt>°æ4ìã….WRÓª—C=¨âao^ÇÙ×QžnMÖ`~Hvr]ðO!^y†Ã1ð=rGÀ‰LÛULŸ?_´ôÆàåëWâº[sÜawOO¬|ïãM¿¶cÀ7Å+"˜4$ˆŽ
+Ñ ÙÅЊ ÷è8سÁ=Ž!©1Èï½øeQ‚߶Ú@‚q;Á«5YýòP¥¼M4²*'NxÖˆlP¹õè‹dÈ•‰í9j5jYtH½P£ûÑÚ§çú-
+&ŽãD:‘Y᫇°IGˆ“þm}ç÷Ѽ(¢½›ºŸèËG`«ÄwÛ’'èK‰Vx b±R=#™<Äg–r©>wj–&û.ëËîá‡9“d<àÈY ewmñí¯Hãâ—
+íÜOÌr[pSª¡`ƒŒM¿Å€a׶VÄDSŠb+u@×ñ‘ûe9úç’q!b­£º0åw+ŸÑÈGW=øû&ÜŠ‚Y3Ü8.ÃSöøŸ§Ðš¦ËÝÙ8Öу»Ì˜MÎ%üôh«á,8JòÙ_פ© ˜•‚z(Q“‰–ù«Ú]÷‘!Sù £p‘Ž±{|Ý3°Ñ™!¼ßMV|ea2)Kݱ&Õ݉ˆ,ÜGþ|÷æå¹`;Gûû•¬°ry+Ÿ9¹Ôµ¦iç0“~¿ÌVa
+•êK½sà•¸É‡'€^{q»òEê‘ä}žCÏeZYÎî¡´ªçˆÆOîkÉ•‹í·.§pm?ñ†‚G»x¿@;Lf”OHû,B¿‹ù70;c››)v¯ ' ò„>f1I=¯&BfäRB&I÷â´bYw0PAœФšP¯,gA=N'ˆªHS¯·èÐßùÞó‘~²6ýŽÞ’‡)‹t¸¤A8þ7‡/ }ÿØðM~Ú…™øØB>ÿÝ ±t_GÍ×€Â~]rцÜü²ú‹4“d‹*T§šBùûÏoòK">ËÚU鑳7Ì*Jõ°†SÉìt,ò·»G}¯«Í´¾³ÐßäŽ-Èf(8Ÿx®Œ:,*Ä]ØĹä³sQçs„á'Ú&&ióö“Ã8Ö‘žPVYÉ!{Z+RZšq°eItL³Uî—ü›Y_àןw ‹ú9^±‡¹ˆf“h­‰”‹±}@dCÏ×hüŠ*^ÌÔð[øƒÁ
+Ê‚N÷íRAᤠè•7k‘JB›»þ_¥ÞNC\|ét^{—ä‹­KÒ™:øû¥ót‰ìÄu§±7}µnÙcËýL™ ÉË­4qIáågØÓ%d§Ð« ´Ã{ï~Rßr
+
+1ÞyZH&d§íCÈC„Tâ>”ã®'y7·ÅÊ]¶· ßàE'É»ñ82Ž‹nì@éBŒ9¬&LEùdz'¬\G;UQk¹ÆW¼lü‘d|4Û¢ó°ÌœŠaHiáâצ€>sßiÀJƒNv•0W‚Ãäyï–´ÑÛz@ÞË‚Ýe"Ñ]mÛ©’-)ÍìrvÊ…ÚóœÄ|{Žc(äý®Ê/sZêÓO/“Ý’rZþz¼vEüPa§Îq(ÎP¤Ñ ÓñSþÙó U¥ ´±ô£ÊxkníâcòÌú™ØY¸¤Å‘úáÁV1-iÿM«]½]ÙmQ‘ï‡;™‚5\wÂÕ˜GèQÈ#Òe'ù,J.
+œ·ËGñ
+$¿Ü"c ¹,Œ>=A!(ì;IV(ð“¥m'e×¹špÿ¡ z¿‡á}ßæ:Jb"¸3Ðg„/ÍM릆`WDÆôY«ÛY–9ÞÔº`còȳ¦={ÒY0']ô•þä®<V XaéY%™ö½j’/z7´Rå¡£3@%ë̉Óu·Š>¿…X*gºÍ7L¯NÜÔKH=t–l¼#;r1 J­^Ù6ȲùuÖ£Þ páyºnôfý0š¦¶Ø$p±¸k™‡wfn®èÆÉ´€ë^õ$ÚY—ÿÊ€×ã€Å©.ƒL.Ÿ‹Š£G…´X‰»cÚ”‡sÍ/iÖB‚ö®·nc{@t™úˆžGÄÓSUýÄmý"iRÇë-Çîh™Ýcñ&ÜJž4ºÊÅ-r*Á,²~YÐW¼VGø—m{Pò˜–¿¶™çÚ
+§j\ýô¡Íê ËÉô¢zk›¥úš|Ën4íwl˜
+9N}ÇQǃFÛ«Q4þ¾ß¢ c­4MM½eR~dœïĆãë/¬Uuøße~v”•ã‘FãT€º¦!ÔDd¬ƒã ZÃos2NÑÈ÷ûW&NXÇ„wÚ tZʱĊU®?Ô/-Œà óX‚#¾3JèÌ?xÕÒKû$Àç›%8HJǯl
+ÿ‰¦F¢Ž¹á槂IºÿQä¢ÙöŲZÿŠt¦°0P®WKuëÍÓðp¥êw³ÅW;¿Í ã:]¶¨Ã­©0ŸH˜)ï]Q9ÓTUµ‡B$'{3šuÔ•,Ïôëæ;‰qcr9ñØw«¿dB½Ô€«7ƒ³D*/u¯_“ÐÃG<²ÄEÚÞ¢'ôb£Y&…K_AƒüPºÇ7±ôÁejz6ý“%Ñ¿±°ƒ¦q’€0ÁdåN(†µ& —5ËCïév^üñÞNïO—¯|¾ññ5£iÁ(ʼn)wkz¡ ¯Ê˜\¥«%dPªÏ(¸(8\ÚѪåL ÚeÏ•dqŲœLòéè UHBâ ž¶ÉðÜÔ9v扈T #¬ý[e|ÁûVo3Áeè{nDuÈvÝk ¥É
+&{¤yø.¼qùû³'ôReÝf§A¢¯ ¼“ÖÜâÙ ýfùbcwMK\L,°LáàÙcœÕŨ¬FŸmdGw·C—ivAZø~m› ð„ŸÕàÖÔÄs„ŒÊ¾é˜òƒ.áÄ8ÐAõ°†ªÇ®ˆt³åÛçºÀŒ9YÞý]‰ÿà<á¹ Uœ;É@B¢Öe
+î+Ò|¡ê‹ž WÀÛH‘J>¼¸¦S‚MDRÐù$–ðMK "2­âû«³giB5âšAmYd2µÜ—%Úom«3³Ç 5'áé;,ô"õókJƒÂ78Q…+çÀ6¹
+O¿¼!7ÇÆäVa΋¼ßz´.¯JfÙä1ÕS›GšŠs4<SÈÄé&’ª'2{°h®L=æ\ø§ ù½šXcKHƒ¹t{ù;þ“¹ÊV‹qÆÍÎÌú¦“áê|cäï$ïEäïD÷Ør1š‹wsŽªP,ˆdì”—Ó*ÊóLPxáUâò:ðá¾?“8ô &O#$ÿü2¥Œeµ2 [ڣ䪵ØOø]‹çÇ3³7€V©gù…&t£ËbÉ ªAå´ï™éuos†Nà6Ô¨ÞÓá“ï,F°?")&&Q…Ðp‹!¢ Ô ,1Å€ªw
++ ll´a'ü…þ.ÚLZfèRð‚ÒÛ“ªHnß<F?àBsëx}ê›ÅOŽOc‡2l?ò›ÚÔ$6ÇAU·¾Á\áyäß¡T!¬vm³È#Ì%·,HèšÚ°Y’»mX ”Ú—FŽ^")íæ;ËŸÉÂœ•GH}å>Vß Å}¥Å;sÊýð¡_Pó²í1(2A*%k.ËÉî£Û·^_†s†³¶ØŠÚyH¼:¿©ÈÉÅèóÏ‘UÝÖê§5ár^|fZ)éÝ]Áõ“v@v£'Y“¨UºØ’Nø!•þ÷¿ O”¢Š ÜO‘†g-ÇÊgEÏöý¹^ŸfаÈ0ÅÑÄeë×Ö£~U¯P˜Å2´wõê…xi#Œå¹8„¼Ç‚cÁµc°!ûX4Æ iÈþæÎ7€†hþ­$E+ˆ…âÝ)ÏzLHöÊ|ÞÇ HRŸkg×È–ñO”É ¦¹oZªù"3"P­âËlø ÜÅÝ•Èñ
+£eôHÄ Z:+£Ý›YÁH‘a“LITó]¯ÛÀÆÏkn/ê¡Ú”åÑ„0Xvv,¶³(œÑ‚”flz’˜/žëdVbÆïõ˜¼ñ’R¤ŽØKñhôòÅ<Õ9ÚOÅM7QÎ+õØ#¾ÓÞÀ©•Þx”²E"šÖU²»*¿‹†®ÞQžÒÙ:i9ÎêüöÕc‡Fº~BÏ`ã´ðœ†€àÅêcÎÅJlæ̪9ân©’Z(¥U«’#âËœc\ÿîîQ2M
+·kAYÝ‘Ãx;K{Ŕڽ´eåýÃ[M·jsè÷¢]EÃ…n<ÇÖÉv¿MÚUôì Ù¬­Ò‘Yÿ©PXR|Ñ;œÃMÄË\%ÒÊÏ–|ÃôƒL'éˆDWã%­]»©]{ÄVÑÀÓX¸BÍP‡!µM±8wÙuù ¤tu­1Ùœ^zÓâ¥Fcå†6›6¶) ”¸*vþiý®'J
+¹ 0èè³]&›)³ícW¾G$BÔùï° "÷wÞòD¾R¯9!K½j'ƒ¢"
+ûpoŒ oìpò«>ªÿÜ™ʤœQÑà‘xt†‘KÒ ˆâ¯‹¦úþ€3€†I¬¦M1óŽ­r5Kò¬Ì9¹‚ êóžB»Y] ¬CÒ9\TÖŒjNÁœŒ¥6„D +".}Ü[[#BñoýcÝ M'µP¹Õ†úd?‚ˆðuçÓ]Ü÷ëß—üÛ‡º=n—RŸÐê¯~¿xVŽá@ŸÃr@J¢M".œ8û4ÐA¶ß«LâØë’ï:
+‰xù7rà‹s@ eÝÓ€B¦×½Ø‡t5˜ á$8…1bÛù>Û£>ú ¦řРØyÖ%:þÌÊ8q`‡
+¤½É ®"bqªÿ:kÞ8ò>l)8Ê)ØñiKG·FîsÛHS­…”òØ— Úv¥Ãö‘£2ꯄK¡ñk©g6Ú„µ—ï”ÝÖóÎ×”j6üGƒBI£–• a½sQ…¸ê¥ó„’w] §(LÕŽÛV™jŸ¥ØT}HÇZg÷,!õDn†ZQ‡ãœ“gjŒAÐá²6‹^©q³s^0¤…8¡ˆ\ÚM—Ç´ÙHO¥6E³w›°ÄdíFo{p»_¥ø w‹Ž8ýýèÏo¸àÚX¡‹3¬Æ{_Ûgz[ÉV x/øøbé[„sgW‰Ò°ž!øyÌ"5Q›ÞŠ‚z1]K¯¸/›M¢
+9H™j´1ôéÄÕ2Âe -Åß59‰°DËçÚ6ÏxåÕ_ )K4 8kÓÄéÞGä™ñ×rYÖ\§î¨Ÿ÷½ ¢žΙÌ}ý-ucéöã!ñ2’Õ)׆ß@®a²Ò 2Õ.Bù¸áÏÖr×Ûá8Ã/¿uõàÈ÷q„ SÎÉ]ãj€5mŸ D¼!ŒTRºà§7݃ô :"+MöcúÕêUã&ÇèÁÆ~Ç´Ó(“%rq›¸—-ÑÔ„°²÷AVêãqª^wZ1¥[†Ú{O½9F³ågí¯v9SYïÆ)DdvâosfËf‹¬TSš¡²« Ðdø2Šé¾¦žÅy÷?=—ÛQV¤§u¼„'µÿp™t1%]ؘ
+ÚÖ7†¢CGp6ÃUêR_=£'™ó©~oõÌW÷îÂd“QñÈb B-ZÕxðèԴY€¸qŒëܬ~ÞÉdK¤NªÜ«ù›„µ‰=G²bòÕÑÅ¡V¿ˆ <S×°B4|ßø§‚9~<EuÁú[F¹^•´l©‹™! ‡ßÀmÛ4eUÔ§hØ ³¤ÃØ}ÞÃX³[.Î<†fÍ<ã0Â|†h¦;`èý‘fû>yå<Ëàýo "÷Qu“*i6µ_?ŸÒõb Ôþ~÷k-?
+ý™åezJa# {€±ŸG’¯ÿÌwÑ5ÈeD@@ºD8רÿIM™Ké!ŸjLµÛø–¼G… ³óêcd%¤ÿž] U`–
+b^K¯ò|uÖ_ €&B_ß!Z²)¢{j
+‚¹q¥’âéúvƒtÝ;ú!Žð$>(®KZóè •$Â3hx
+rqó^Ò½%Êî$—`^¤ñŸDU8ò}à:ÑËÿÀxöêõú{-F„±Ž™?+`
+zÓÆÈ%Þö©}OÐRË}ßzž‚à :*Z™erh8#YÕxõýèáœxÅÐ)&èÓì4”'ñËÀ²ùÕ×Äx,Yjf1W‚?f)Tu2aû[{ìÏ"øòBM4H¯7]V±2}A.â'–l軃{±ºewCªE¡w(v‹lR‚K[§‰¼R|ØQ>WîÐAR¤£JIV!ÈÃç[jr+’AðÏ ’¶1YëGn2‡SÝ•Šœ7@(θ1("v Ú4‡©Ã›5¨“ÿùÐûãqNœ5Þ¿àþµÞÔýL®$¶–óëKgGœt †DÄJdµh-ªÙÔlh¨?”ƒDó(g !Ì¥î#¯=´P@ß®8ðA˜&ÈêFVj¼3 Î`(âu–§»V]G¼(Œ(ð…•äó”ȵØÉ£LbK=ã Ík—½ÙUPWרýqö'ìÐÖ¡Y0ãq|ßpåi/ ç,Ü:ÆèÞ"Š™¨\}®ç<]žÅWÌlü£c„TÆç†Ú&åãÃAqy#›ç¾NÐá¬Ýé—Dtc¦!˜žËQè÷¿ûKjæ¸aÚÔA'#¿{gÚkë¿nÎ5µö1bÞ£#Èk}ÑsÓ{Æ7:ʸÆÓqƒÊº¢g²ÔP<ëãJnGðyfì¿ %ÉÚO7`®"žqÉ‚ÿsÎE÷ÊÆ{I\¶ž¥;‡ŒyvÕŸï>˜ãÌc’q0šöõÍYl¼ª©³D¹<o퓶°
+Iï+›Ž–xw"²à¶dµ,ú2.B£=ù¹.|*Ùx§oÉÝÁéà¸ÁÍöìêk„å'Gär 2hž‚š:¨V\‚UZåÓõÃE¢§7lž¿À¨"‰ 7H0R+ hæz°'ÜØûܳöÈ£¥$ØK—êÛæRÚç&íG\z°¡ºaÎ[dÆ
+”K*Ã<öú8•Á…”gñŒ* 9i_Oùõ*5ycįdȪun§]RÐZ8€‡1·Epuú50Û95!Ád"'®\P•ÖY˜6ÃÙ|¼l[%læÊ/„4î92ø…gL/дßUB€fi½°õÜýy‡Ê4/†p&j„"0øS&€kÚyLAhé¸óúô(aX.|›Þ°Õ®°v« °²Ÿà¡—ús;É'ib“á@Ú']XþªøFC•Züw9L,{ôOxJ¹²Á¦‰›±p'¯2ؼlÃ_t†á
+èÖqÝuUÜá&Ç]ûý"⼸=VomRâÊøLdoªÅ“-Ó†…?|7íÐ[êû™ Vz”
+pón2Hð8I
+"oîY8 N¿ºüRÿ­mÛ´4æ0êšR~®ù; 1êBsê5j_É™VÑÎÐPŽTÎá¹Z†j÷ýÆGeÝÞYj}úSV·*ç"|¢ï¼MÑ
+[ðý…FöÓ7^DýRÀ?®ž¼TU^ïWº»éùæàľŽÀâµìÆ-Äú¯ï_PÐö™voJJ:©ʼnä=Ëi“:Œí¶ωýžZZ¦6.. ÐÑDgéæ“AtÅßgÉDöýtCŸéÀ4ÖÑN™|ú*v®ž•bcKS7uÂØ%ÚóúhÅÇGkkF8tê-ºç‘¶¥.³¨ÃÓC“m›ÛÙ¥2~X!Î-tTŒX¶ ãcJ,Ž±H4 }ÄíxÎ5| ƹg î
+eS!TY1ò±r*M¸”ãî*–ºmŠé³ìžïð†‡1**úØTpǾýÄŽ§ë²SÁŸðKøpˆë«‹JfÅ]bZR» ÉßÏQÚ’ˆé!¯€ÓÄI’觬ʲ—­bèÉ<œÌÑ›«ýa «æ3–—'4òF–R(•uÓª¨ÜÔWàÙT)‚ðݤ`)èê&ö³†‡“ª—tC®4Ÿà”¡“ƒ·ÏûO Mœ¢¼x¥ž w¾œX;;MŸ9mIâ{»š*¶<Ãrl¤º>øÅcÞýÈ55;!ý©8{ÅÙsÅßy為Lïçm!ùåy\]Ù•lI’óáªÜcdŒêMˆ´¿¢Ù[+‚>~¥Q T÷Ÿ!H?Ïö>¥aï†Öy ?ûÄ¿ÞÆú±û±ôU-•/â
+3KpzÂ’?éqPÞN$kجͧƮ¡¯ýX½F‘À"Þ„b¥±)æ°mePüUCc–ó½ˆáÞŸ
+ß>ç
+ñöû¯±Kå2PIÕºí€-Ù<€ž t[ø&ñr_Ûú«ûK”Ž˜ª-¿ØuŸW¢«,Ko¾˃Kše/± $¦WÙÍÄb(»ñ_<@ÐZ“üêÕÅvžª"À£[<Áû:H¼m8/Ï£OÜ"Ük^`7—Ãï㑹uá=‘UöàCHN#a– Ä‹…RLgÆÚÑš,1íò‹”›ï¾XFŽ;š*;:ÖXGº 'Û0­©èì»Å.wƒw^¼í†Î4dGåÂ;äpÕç+œ¤kdU\K²ê^ƒn¬Ö=Þ\#é W”UY¦G|— xQ3æùÕÎÓŒIo¾Ùî7Ñ)ßøJKUÉØЇ˜Yg…
+'ztˆ÷Uáº'´Ãó±pËÇAIL³;¥T7jˆ™GiLcKЬ4;=G‰ãéëqz¬€7g?."Óí8–oGkÄPØiÍ‹´#½¦Äçö£#¬õxœÃzïûS]ãM³æ'lZ×VIçp¤ËT£˜?}8ÎeÍ3¼òæÈ/«ïgøõ!+,º%YãƒSüžÙruöâ'œ¬â •WòO£*ëŠãY’k® ›“ؾf}jÔòüEÆÔ'¨NQâd홵=âŽ>J]*ðäWg'Þó¡Ùuxüð>?ú쿪š€MÓ÷ë‹£’Ô2oVÝoàãr³‘ýâ‘ý¿ ®¼VnHƒD~PžQB¶ªxùNõ†³ˆf+ТXC£·kºÕy/€T‡W$tø;l°W(¼ä)8¯û˜¾›?MÂ'îŽÁÓ¿$ÃÂûbÎ fbbŒ¸eY§:YMckØö`[Ý[opÖUÿµ:(Ô2Åž62¥ñ×»«§c•÷O#Î~ö~iB®íèZ Õæ3S Ä8WC~¿Ò.ŽüÒª£+U cE$óP|Î&é|P¤á¹_ŒP¸‚?‰¾Ÿð}¬›™:ÐHjþ¾~¨"GýÄѯœüp›„ Ãþ2#¾4Ì ‚8Gíl©tèx(¼Cørxá-Æ÷#Ôuò,n e.vʃŠ Ogc3t©‘x+z&¯ö€>½IƒtÒƒ*-ÝÎdØ¥æ½Í²Q—ŒX΀ò#fí»³ÿ¤¸YÚ5‡Ù±¸²ÁŸ­Yf:JüVÏݧm¿ïÕ‘E¶øZZ1ß`3%”.R~_àD)xo¤Õ›³.m‰[x5ôÌ:5ìˆFyqØ$ €a½5c¢ ô­SÑ]÷:.x(9’±,iöòÖvÉovÝPK~WùÍ)OTâ™;„7íç} /ÛŒ@'œÆ¼}dßF,)µiHD 65>¹ÂV¬ÌËmØ$e”.9Ú ú·RK1¹” :Ù9ÿ½«/C 4Glœi2_z=“Û)Âͼ| á½k÷gü¿
+µàí–T² P¤½â/"¤6t:¿Üòæ0g+Á¾›ýš^ë{į3HòÁÍ%2º{U^è>3¥´k³"?° 'ĉ@H
+®Ò"9½¯š=e[kÔ˜¾—#à,ú¼Êɨ1–ÉoÂí,±t&¿NVÕý ÝyÜÈ2Ãø¦ë\ùVÄdšž~ éwívánÒÚ¢µØ¬Î;±tV_ˆYJ®öYg¦¤‘0õ- yש*±zÈ ¨Þ™“…?D
+W1ld‰­"'{›9F„CÁEK¯G$I¢oH¨V8D+ï³¹‚“ñÏA#Ø
+YúïŠÉï^Fš¿~pjhå¥tŽßôCpÃЯh þ¶Ø¨Ö0æBMYo•íZ[ÚüâÕÑQEÓ%¨ wÿé`Œ ŒoA­_šzâ–éÙGþN(Ôóczc¬"Ž^ŒO9–e¨„³“Ã+|áÆ—*gm½¡Ê”;7ï)Pö3¡”LåW-žA˜¤æ@¨û4žYœ\ËéI6é ˆ^vLˆgGûnø*¦ÕJ_Ž=¢Ì œÍFmSŽ’Sh³€d¥Ûi5TYuý<Ùr*ãC»„
+C¡ÜžsdBͼ}eìõÖ¨Û#ƒêͲ †9NUÍœÌ=/ã·,;}¹± šÁrwa§Ym-N~àÍcÍò¢’à ˜ü>ÂFï¯PL9Ü-‡mµA[RiUÐ HŠÒS8*ßÊ5%ÿ¾8,%=› ›ÙÚ°b¨¡ÇÿýEŒš¨ÂaÿÙøný*þì‚zïb*¦ú@Â×ïøË.£]ÌL´É
+¸F€#ÌֹZÿí@9¯ô*×xßż‰ø0ý~kø%‘Q# ”ùWäg!’óýÜÉö½;`VVúhÀ4Éße_þ¦éöñˆ¢àS§Ìè$6z/ôêçbù~)oš]®ÛDÎK×Ðè6D‡»fIßE ëä­?¨½?"¿9¡ƒP‘!YÏ­el\yU‹¨ êÏZN)éE XZ$aã*¯k#Wµüf¿Ž üTùÙ·Eû(fÌÀ¦¨µ­Ôî„m"¿z"Ì VK²•î³ûþo¡ÐtSO~½¡ì
+m¹ã¡jŽ‹² S
+OÌb@Œ^Ùi*ë¤&¼›ƒÃ`CòKy¹j»z]2Ò°J$o騚{óï²S7p>wp|ˆŸZo6­–…7Ç):  ãbâ7®D°ú®£]?/olÃ7«JµÖUA­Àâûíz’S‡’­ñnX{Ñò£Â&A¼‰LÝý& ½±s­5,|ÚfotŽ¹ð­׉ø9_ºóAVäÝ锯@sñ5YóE$Ö~}Æuì+q,k‚R—Ü•'×ÍÙYkS»£´J€i¾vÝ„ùíj,·…%­œ7õrVì¨êGôÝnt".Ö¤œjDhüöŽ€l7é´óÌ‹÷ð‚aŽ†§û>™ìºÚ(¥¿ïP8ejÍÜ] KyA~B ©cåøfXÖó(ñd 8æóD‡2V|P<sª¥#™ÔbC[zBæåÒ‡e½ŸˆË†”
+Õ†÷µ¤*YHÈjFLëÞ³E)S¬r¨_+à]Ï
+
+›U[AñÚE÷¿ûh ê†ÙèåCÅ-ßø¬€ŸDA§%7âšžq±†Z½?ᮑl€zýÄ_;Á‹Àæ½è^fªût½š'9ÛŸÍIì–x…¥…$ªFiõ\Œš7,²ŽÑ‚ñÝQ Ý'Ôé*’^ëxF ±GÑ7ZÍÍL1ÎÀ.Ïã…JŒ­dC9P?uhØN¼·¾Yº4myÀ’´­<éÏ´FƼäÂkT#û¾¿8V?‡rJêþ3èÒÈØxŒ7¤L§'Ê%>ùEpÿEÅ{ÀÐkÄç‡ÐJ/=¾ƒ ­G&—,„Uæ$o(³‚Q"ç)Fìô²‘ôQ’>G~SX
+£i_®í1‡Ò¼ñË)[O9U'ÐÃlWšƒµþÚ¯a“À&ïÊntö­z¥…dsj=<Ú§¸ÈÍâ ¶cx&~›òå:L±UèÅ8Žç¸´CÕù\¾¤Îˆv„ÕÊr –RÖ-áíŸ?ù“ßSÙyå<IÒr„ý ¦é%¿Tìu ãýj¦¯c’æŒñÛŸÆ%t3[×ÄË´O]ŒûÓ.²Ìí G Ï­º(уòÒ‚²Ñ<7]¦$RCpÆ«XJ(|¢
+lû6ÓŠ+¤€ÕŽÏZ÷}ÁýŒã#+ ó°2¸Ô}-®ˆÓè-ãHºÔ
+äö
+æRÆd£C—.⇢:ìñ qfŽ²6ô6²‘ßB!/PI
+žv®(<ýL¾½¿&ˆ¥tÓbú⳦?$§¸w=ët $­S~cNúC0дr±÷G¹êÓ–­Å™QeÔ¡¬÷e/;ð U¶m ¾DZÔæ¾}®´¬3zÐ7öó{xU—þˆ¼r‹]5
+-—ßÖ¯8z žš¥Ox!gÉòOOá^Ø‘˜Õ$} éï,³.eÝ’.Ó•¥³ÛÛ+œ@ ¯OE×¼º€HÝ`œ{…[ð¿hÓ[‘Åå-KxÊ¢D®g©2öºß2Í P•ùðHD8 Sy™€IWpib>û¹V· lU溜Er#©«;ädé÷¼
+£¿ÞÚïØø‡¬,½kà\ §V°Š 눾—Š8™AtB+¡É©¡3¬"©˜ˆ–Ñj랸D¥9‰ZkJ÷WÁÀê×Û^~^Eåš8N˜ÿݦİÄL×­
+>dùïh üó‰aDlþÇ™h[½‘YFá^cð×9ä³Eó LO ÕV*_oPð/Žº
+C—ÏYY.høˆQ"¹E˜öνÎôKÛ
+§¡š¥E7$hþt¥9ËÙiÊ.ÙËè§)¾R#¢'Ö2÷ ûþMŸ9½[S’]¢E‹qâ(+ÉpVoÞ nNtné‹–g¹§v¬‚zþë,±$[ZïÒ‚9šm¹bªN’Ÿ÷$pÕŸüTDº¨ ¢­×°†<RC¢!žÕbù‚¨GnU©ºpÜÎEù7 ßEèq|²'D­„ZQKû8o¾ÌvÆ/¢Š-I¿ZéÎã‰ûo‘ò!¤}Cy걄©óPˆvâZ3{d_YºÕŽûˆeàZNQõÿ#¤66ó>~¬½7Â^È$€Ž~‚®aô"ùռ㹥)ƒæáï¿éø8iYÀ
+^Œ £ O¬~ZlÜçU•Ùsaq¸ÓQÔ)xéŒåñ—hîG©`{4l‹…xè+½ê›äƒ¥øÀ‹ÝpÌé×Ôϯé†KXX×—IIÚ(¿¡š—9Y]÷]ý°
+è*‹²_'³y%¨‘o15Ù5J2Ð+Gn¦Ø/s¹I‡xÒƒ·¶O¤È
+J\ˆT¹10 ðŽG¨ÇS°Ç,y­ÎNR»sð†ÆZßöûÚ!ì4çÈÉ¿ò‚@ô„ëþ '¨fÞûLj»*w„[‹[w/rÌ¥›ñý &!&yGŽÍé«ñq?®ár²•ó554áñ^{¹f~_QÌ\Àûl/£¿¿>C‹w]àÒ ¢ve3}L“?0Ð…Õ0}“ÆfaÌ>d©Þ@ãá<« ¹Ñ¾œñÉÂ1&4dl¬ìóu7Ô˜’° ôh¹õÉÞ1–à*Q ÒIÝÀ{ÿfîÏtÖõV r®|)¹ËßvúSõ[u½ã}û@ÔüðÆæ*Ìnì>óù6³ÑóÚ‹;Apx !-e–ðé„ðΟÖ!±ã“û?”jÜh³V•´`£²«*…âÁ¿<dN–L[¯ýhe8Ÿ
+ëVEË>¬ 
+Ç»*»XxxSú•°ýHYR6T3Åm3Q¡Ž:0Æ$ßœl‡M‹¬û˜å÷¶ÇÍzòTûBs€rßA"ö´×
+7žõ¦ºçMÔÅH¾txúĸ-ÌëðÊ‹ÄÈaã†\ýñFn™JNÓhˆòº®ÔÆ«£v'XØ zUkE·¿*¤îA¿-5{~°f ËÖÃÎò%|qÒ\·Ëœ¼ÎoJOB?ÖXæÊ…0⃼eP‚¨+õ|;®ºÚ­`ó¡gÙ¼o2W1¬mŽ“Ò¢qHˆ¼Ú}Û×Nh.¬Å-ÞZ«?!@)îÒ2Qμ.]cƲQ>«©e»R´Ó ’ˆˆ Á½1cdÛ¢)ŒÐ·Í„ó)@B¿ÂÃV©¡ÿÃzCÒ×DJø´¥é‘‡J™ÔèäkæÝ+‰)¾}Ÿ}‡Ä°A$Ð+¸³ ÆZ‘ùŽÿží¨/ F&¯»«ëY‰Ö×ȨìËv^ªk§$(æNH@øçs¸ý ¹Vî Ö½T#µ¤H±~ iÛ(¥ÕDVð3bÝ@–䬻Ý/äGbƧu³Æ­IH"<÷’mJí:Ru~ø²g²Bò5Òñ0ÓÀ› Ûå ôÄA1‡Ži]ô¶à'¡Ï~Žžþî·ÙáÜñºW68‘b} ³£$HµÏ5¿Vªæ¹U,ÙÆë“Tå{®fÎDq™x¥â÷j.¶bZy߉>ùX`à5Ź±=–X¶¡ çSömͶœ×#JÇamjüÝÕÃ#¨™pÇÊ&[5éKSN—l²’ ÎÛ#
+bÐXìÞLŒÒ†‚Эꑃÿ>/ÑÝ^ª÷V «Lì@6y2¼‰Ñl¿¢ôeGîíöÓ|Ë_Î3½²¬­>í½þ"ºùüžQå~¢Œ¶ôöÆàþRP¢v¶Ø±¨gñ|y°B“ÖðgêÔ$·Ô'=V—v½3oã—)Q­³•ª'"ŠÑÚ
+—Ê`B>4æSòxgO„›»&.–—‚9Üòä…)qæD˜U@î(€@~û²Ç®<™vŠ>¢vgJVNžOÁDü>ùÃ@F–cºeX"î±5ºB×9pÒg3«‡câüJ«œ;*œaÎ4  úƒX_3Ýzì/o}Yiéb-gfÃê
+ýžÃ+GŸö¶§ÍD™óý‹nÞyÓÁÚŠ
+€ZÆÄ ,Ñ^ ]Á¨ð‚?à®’ŒØ‚kàO×îãp•Â¡ì$$¿LÔ¾/Ý¢½Æ|’Ó|x³EÝzȳó*+œa'?XVºnÈFl¥•³ 5›CÜä<â[bE4zm)‘ †Ì¨’]E™ôTV€m?й[Èüï•Û«º¼¥‡Æz-ú ‡Cb·2ÝÀ¿K Æ*
+tšÖÕ=ÏÜnðpŒÊ
+~ƶ‡UL  ÏOhóÁ(ý%ëÍÎÿ"OÇèõ6qé؆bàû…âè:$=R‡´LÜ¢$eo—§»X”ƒ™SÀI?l)ž ~õÒcÖOo;ë–¥û„ÐpÅû/à<ïÂ(º°ÏÒ9ü‹`3&Øa£‡VÓ²ƒ\hfìÓ¨¼ò˹SýÇLþ–1E¸¡ ÔlÚýÁwX(ò,ÈJ}þïG 3ñ±ôvdQŽyHŸÕ‰ÌØ~4æª0Úžú}e+±á wI+ÿÚà;ômrŸgßÌA‹ï6_Ô¹´ÖvÓ{ÓdÝ qjwµ§bO8á{v§UÞ÷Bà ì>·?ûÌÈ{NA_4Òynû<Û@ø$žpßôhÑ•oµÐÑÖòÈå&Ù Ñ{õ³á¡äÅí]¾M}B2€J²™ÖçS0Z<È0¸Š¿”+欌4ÏŠz4XF
+<Í'.Š[Åþ~ÒÂ/×:ò¾ßD>!óÓñ°aOJI³` XŽŽñ—ÔÐœ·¦Ë;‹‰´ŒÐ±püÜê-ÑLÆ <”·ÛWÚ8Ö-ÎÔƒŸ¤Mz\!àd -J˜kÌL–'´ Z™£À­Ó¨gà ™Y³usßâJÌ~ŸÊO»ù@Ðœ“Û|'-j<9Ãï>K2ÒðJzs”®ìxh¹³šµ[x4£Ã} Ÿ"4–±„-ÀO:.ÂæƒÝA‹Ãòú¼"¡–Ä gà¡—)Nÿ×`Ä趚L&¡•f,œ€ŸB¦P¡˜†µgùP¥w>ø1ª¢’f ‹ðÎêï{Å ž#8;/kÀû I¨UâE½ýÆö±ÆÏ]£ïIö2wŽ¨¼sê_WèÒâ;ì°øä¬6'!RßâχÐèuåÁJÚ"¿§ÑöÇž*-¯/^„qL#wm©Ù}*Jž\ÚOùþvÚKUÜŽ`VÔpJd6$F!U9+¥íO9Ï,°h hh%fV˘²°<©”Sø_øôR‰Ô=‘Œµ
+endstream
+endobj
+2686 0 obj <<
+/Type /FontDescriptor
+/FontName /CWKDWU+CMBX10
+/Flags 4
+/FontBBox [-56 -250 1164 750]
+/Ascent 694
+/CapHeight 686
+/Descent -194
+/ItalicAngle 0
+/StemV 114
+/XHeight 444
+/CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Z/a/asterisk/b/c/colon/d/e/eight/f/ffi/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/period/q/question/r/s/seven/six/slash/t/three/two/u/v/w/x/y/z/zero)
+/FontFile 2685 0 R
+>> endobj
+2687 0 obj <<
+/Length1 2346
+/Length2 17319
+/Length3 0
+/Length 18672
+/Filter /FlateDecode
+>>
+stream
+xÚŒõtjÛ
+ÇVÓ˜ÛNc»qÒXgbÛmÛhl´acÛlìÆ9ÙûE÷ûýÿZ第5™ëöuã
+Ea[# „-ȉ…‘™ */¢ÉÂ
+`ffcdffE  Pµp²þGŽ@¡tp´°ñþÃBÔhèô.3tz7”·dœ­,l
+€ª¹…ã¿*¶¦N®†@À»ÀÚÂr|wq™
+óÞfq‰¨­ ääˆðW}b@ã÷¾»3ý{¸V [Wç©ÈÄô/&ÎvLj {g ´Ø¿mÞEdf@'
+ïÁ­-@@E[G‹¿
+lMMfÀ†ÃpÒðw´Õqê[¡eâÏãÖØж¥ö'¯gý8婽v„ÅI¬‰Âcáú~BxU¡}¯{/u+ÈVðnŠ\{gnÅü÷®}’nõýå+£!ó{Jû5œ²ˆÏåÓ Qj‘:þ%³yFYs8¤0N „p´èn¨³·w3è9oÄ2qtÞ'QlEžZ›¬Ñsk•ª¬Ž=¸ä¸Z8„·è£S”ž"‡É2Ø ž¥Å12!Ŧ„zóͨ†öìßHº—øÊG&¶Fp~éû‹–£îL…Ä+mSˆ ÿ²VÉéÂAÏ­ç*™~aÑ/@pTê:xÁòˆ¨šÍt°r:Ud MûoMtK-Óuz˜¼À¹ˆ›?ÐÏã3MÕÿæ+·Èj”ç¤Ýëiè†|ÚÁué=1! ‚ËÖ¾Qýr* : F0Lfø“Åœ$çŒÁi¶ÆÐ@5ú›•
+ÙÇÆ‚Ëz|ûBH› öª{ÎA‹&åÚÀ©ètK^™^ÔˆìS8«J~­vâq–ˆºàh¥<x€mPWM©¡aarX>^K¨ÙMÉoEBÞñ†©²é¯ˆ¿LjDL⽦¤Ë'Ï‚¥ô\¿Ê£VWL
+zÂG'¯»e±8ªg ùRUqå‡OH‚p¨q+1³“‘¶É2šµ,{ïÌó‡éRÕ^]kÞ.wžÈcwLnëli(0ŠQ«Oëœ+ìïäv~oaû€=+,xe­æØ[&¢Øü»±+ÚÝTŽtk¾ÛhóÃØgB»è;Åí¡ØZg‡y9~gó²è¹€é!±ñ¥¼¶^ÅÙ½oœæbèžžY„]†Òq5Ú±"¶ÊŸ»©"Wì@=%^ˆ¹aØvb”ù­1ÆÄ)Lc·¶r¬œ”r<êô
+“Âzßk“n±ÿ0žÅæð-©ìä¦_@«âlt]p"zŒ{[Q Üæ0†Ì(¦x3•^ú•³ ?.ñ§Ø…ß\¼G_“zÀ=6Dá>–š¯ä
+H
+è¡°LJ,ÊWÿmˆ.av£ŽÅ æƒÌ˜EæOû‘T€l=À´3÷«;­Ê8Š÷]˜…¤:§«a38ö¹M]ˆ š‡–¾žÜܳ‘²}úÉ
+-×°³ÜçŽq~#ß1Ÿ³gý5øÑ
+áÓ:
+)Æ˽ÅxUÞ‘ÙA“rvËF¡È+jŽlx¡çh…Oÿö~ó?¥¡À–[”5ýÌŠºVí¿½  V˜mP‹­ah
+Õ·‹B$pÙ<òj…œ`~ëZ g?ïÚö—lÊ2©TÖD Ê,j. ¥‚u\­TmŒ‹JæuÓy;á`ÆÔU•1‹¢ôZìÖoFë\¥YpËa
+ËœRÅ–³v#Öáêo~ëòt6²ÍA­ƒ¦ô¤«Ll>}5Ÿžî’¹ò™¸z«øGl”)üÂ÷7AÉ2"MB }ð7Naæ_ßÍ{0”%xjsTç‘<c©ó)S/È7‚c}yGnÌ»ñ~¿ÝÆÈ¿YöÀ–æ -âŸPÄJ@`«½-•Üri€4PáÝ<æ•Ú)Œ6 £ÞûnódT€E掬ñ}ù­ Jiªº\‡ˆ>†Ã˜ÙìÚšä>"ì&#ÂMò£ÏY"^š®›å%ÇDæŒ V£—4 )ºâ‹7ò”ÜN+´-óå¿”¾}%µÔ„n×t„|‘wÀ[<¯i8Éš“{&=$9¡5Å¡Ë W‹›ø D/Ȇ޳ãÆ•|ÉI†ßýfHrÎÿu‡lèãÓ âpÒ°sv„Q~ S†dwý*@Jñ·N™ŽÑÖÎù͘`,S1Þožh¾ Û"jhGÇK\ÕŒ¹e;8"M;ÊÒ€´ú"CRu’;”„nXÌöKŽ+íS­’ø“CN"
+N}\]õ ÎÝۑ̙φªãȳ®|ìw4Üç>\ê’l›V7m¿‘ùБ·Úu\4* ÎgÐzÍ xv«û‰áú FÒ[…œÈÐ é÷–-ÒB“•3Õ¹kÚKMŠ»?˜ÄQjкÝV"ŒÖ„>oiÚõlÑ wÁôÏúÃàÐì)èϼÛIߌÄrÕuƒXš¦Õ/ŒèICem%˜MŒb ñÚNpßFsÖMÙ%õF+­â©=~Œñ®"À¥5¾®ë2
+cåÿ-P màÎUzw8ñªª³¾jÖQ:K1å-4°PA²ÄYÚëö!ˆîmž¹¬‘‘<Ö[ö¢ªâ;gµšëígRñ…'_ÂÉ‹«c~‰˜|ŨSÚ¤ÁnÌ`v^Ónµ<=¢~ܬ3á r R5iÁ7ôŽéR˜™ û´ûÆíÊjÌV«åz„\ßåGüTÈ
+É¿£—LÏ,à ¬šžª¶Œw
+Bz é˜¬Er§|0 =‚3ìç"v)@gj`~Ô0nwˆ™üø+8 ;RÐ÷»:½‰¸ù§âJ'Uå
+ yî^±ß–I¹Ç/žab dìˆ÷bž†e:–ŸšÉAEh&?s¨ÆÆdÅ‘’©ìö gˆîVõE?`ƒ³Ì›  <ÿ|6GYe'í.æÓ>®ô†æòã¢XlK;ð³bb•n²
+£ª*q…4âIB¿óüôe;±ºÛºGÂs±œó.s¿ˆá#½@ õ1A–½½P­V†hDí=
+'î²×•îa6ë`™ç}ËèÞ¾ç~=Aøûr[guh÷Pߦ®ŠWîÇfR6È’02;ý¢©,ŠE3½¸›½æJ‚‰¶ž¥Ë»îiòe"z #wßçµ\¬»â°’µÿäõ™ìà\Ï[`—z¨-šµr¸ô‘.²¹™½Lw©
+«1¢ÿ®îVà¿5„ö%X¨9uÓ@»¹‡ê‘˜m„× H˜K4ÆG“N?µK™LrWX½ÏI7\lݹ«~žÙo›ÖßyzÅãÆh»6 µÿ¸ÂáËÔiqBxmNÅõ®ØÕžš&¥ùØWÎØÅÏ]×›³ã¬ßô–qîcÁQ<$kNŸ
+¹Óã//î¦ú*o¤KOŒfwx"œ’/CÇ"IDÏC&šg±·Ñ­šâÞ`ß2Oƒƒ÷èíú‡9ÖÖJe9_`,lKƒüã%øêcñØfÓžµ _׶(°Ö•`ô\ÇqÖ#~xfPŠWEòæ[ñPÃ~á_¦ˆ”~k–ö*JBÈñ™[Ψ1•-³°r+ÄœyôÚ4¶
+Õ¹îæ´J=­™]ì9lÅÿÎ &9§6ýÅ´¡Ä]ÈKS; -ö— ºg»Œpé“ä­ Ó9"¹(a4Iöw.òŽ”¼l=¢p³ï].nW/r\œ­7Æhµ„RÞ:o„J$VB³¢¹
+,Öøþ²KëKºZE=8wÎòy§®ÞïÄ éÑ• ΨÁ´éÊ|½WÛM¤ç¼ŒÇ>ãi÷p”UO!Kªð‰`rø
+<õ’>üt†ã†yL !íÔ oÝ?gÞxÊÍ[&†ö · @Óˆ²>|«#n©ÛÎî†
+d—JÆØÜ“ òdmýâ€ïUm¯®!ajÚ½ò&§ÇJ]i¯ë¦ a°“®¼kkd#(”º‡òmŸ2h›9ãnŸ·õä¿O»?Iš´ÞÊ”p’ÔQÉ®ÛmÆѧï€ìz±ˆä|4Ä輚hHrV×¹³ÀU`Àj²CËJÕ‘õqM°Í18`¡¡Å±“‚Ç…“e®—Ðña’¶ˆ1?1ú€ÇˆÉάÚhO~*p5r»î8Æ
+$yú®Ád“ôýg÷
+ÁCóçM±È<vf?tmär)_*NÁŠ¦üŽ
+ôr¸Ô¨²DÃìB%ý}~?˜û²±lÍ\P*{¡B~ê}Û÷š"¾,q&î³Ç‚Õª"Vð/™öÀuÃŒ=¦¸YzÓR‡Ð](
+È#&×Ì¥H–0 ÑaJlj¯¢­WŽö &p6móÇ’Æ1÷ úrzã­šMRÈÒD#» Èˆ<, as<•êàÕs¹ýí÷Co'Åʼn³>nš]Ý”6!Bc&GÛ1‹€ÝÆ©áq•å“‰­êøàQå¢îf7œŒöÐkíšö¡ŸÐ`7%™·Å¼OF_B$xë,.¡Äº¹S$Ï$3Ãåã¹À®Hl,«Ý‘6)6Ö5ŽåìÖ
+¢Ä¶Jü˜miè˜aÖôK8OÞ#)KóÜjN†th)_¢ðç;7'Å™l²ßhñ¨Ö#î>úŒYòÝœnx‹9gÅÅìž2Õ]ÁSÛ÷9®ˆa%š!¿×¹I
+Ñ68¹c#lÞt÷ÅÜ;_ÛÞ¿`_²H5%‡ ’‘?ùTg»eqü”c˜Ã¿’
+ÐpþD§g2C©ýÆqeßì–ØlZ“]mÊwúk‰„lþ£½õbÈ­ð0ß8ÑVQNãVØd’÷RW»4˜"Ý Scb["^¾.½æ}×™À‡Eíâl‹e)äÍ,VºîèyªƒêLí F‹·ü£ŠSä‰ÄŸ‚…b,]Ú .#§S=?¬6
+u¤ ÙÔ¿¨ù ­wŒ§zûÇèôG„i|ØI#A}} ÊLºϨQJ¢¿˜(¯ØEPøY¦H«h86¯tÔM ‘,3¢H›çÌ=éš=бW̺K¥°Eêäa§bmîSA¤œÍZÍò
+ýÂŽ2t»p¥]¢•¬%Jçó]Èç×L8þ\ñØN'òKâ5—'Ú„côº…|mi}vNÌÛuÝãfèDI¿6'4>rü«qÎglã°¯2 PÒ?Í¡f'+—✨™³øXl‹E>,Ê6Ô£ª£Ê^ú}Ÿ=É$'“V÷BÊÔݼܯ.j€¯ƒÉO&®Ûúå¿Ä³;ïCÝOî^¬—ûs_!>DÓø­øìtÚg¼ÿêØo\WoSõa£·ULä|³«²²p'8õV9шP ‰I)‚yµ,” £t¶þ vJšŒT:Ö‹åݺ Šã-g„—å4n^j-¤ÕGšz|¶Ìè ØDÄúƃ>Þ"€Ç圛j_lÅ5zƒÄÏtuzÇjýÔª¼øyOïsšžôظˆ.4jê"T&™
+’ÄGˆ0-¦Ãr|,-z0îÏ6iDݺ˜å­gáá' TyÏÖvílxUèr¥ZtÇ{˜£<P}Ç–K¯òîòh;œ3œCF„P ñJ:C[àu'¯F<^ÒkcaøÙËàü¨z¥~˜Í6Ù8Ó¯ij-×ÂøZugpõrDö– Sñhì©ú1!—éVß™Cpã%5#éqÒC¦HwÞ’u ¶=ŽÐ,ôÝELsjvœð-âó·²ØÁ¦6À/ÉÏh“%ûtÚq¯y…wÝ«¿èáV#v@9Q-ÆÐWd”ãòeŸ®Ö¦/Q=ö*‡ äVÄØ©rj¾æ×AmÅã<‹>.[_^¨¼``÷î¤'MÔ¯)iŽa솺¾6Oàú!F@Ý>“E®/Ë]’•¢ ÷È^b·M>í|X?sŽBˆñ úLk›†ÏYîew6«NtÎcËYƒ)2Pâ\ˆ}¤ê% T”Äy ¦xà­ñõNµÎ¼0Š›6÷«`€MÐxLŒ?°Q×~™¬p䘿’n¸ŸcÒ€ÕÄ­v?MÛÔß*ð_NÂÃ
+ÁÀ"Væ8ôé—­‚ž¹®%ïI\ÒMB÷×Â…7±O¬}᎖¡œ-(­Vb”Ö²áäªïx
+Ä:畈z®QVÒ…2ø´9$÷DÍ¿#•Ù”XZJ1HTp—npmyg˜á<³ÿÓ]è}+󶄰óU‹
+¦vŸUhh¹‹!H Â3—v’»þgŽI—J‘5!Õ/‚³`ÈO
+•gZ¼Æ„0j{nµi¦â­n(œo<Ñ1žQßÁ6TxxÖ â¾A_±,UʵGú u¯ûìxu™Ñ92’£N¹
+)òBcÉV)É×u±˜·2Óø*æä,ý¦!á'
+Nú ʦ`Æ:<ˆX}Ñ9‰=¨ Z¤æúK
+'p ÃkÍõh›^Ž"Ýß;H1H@ƒòвWñ=ÁW\WÓnô2Ë.WúKbÕÄZ͹X·ù£ƒüw;(Nô—úÈ— lë6Ô^^þ¯åå*ßÕ˜ ãmoQñx=ì§
+n·‰ñÃR$ ·öŒÒ`½ »ºŸ<;©¹S7£ŒÙû1}⻤^ºŒÏN)x»˜Ênö wt—œ6€Élˆé/kù
+~üSà ˜1W*xÓ¢Âà>õ lL r€îT¸Ú†¡4pÁæ-fG,ŠP¦ÖvÂsýŒæÑîÏÑ…¼ÃQûúdPà…ö<ÇO½¹ú[;´ç¨n¹¶ I¾ã‡léá`ÑÌØêà·sïiA×¹2ô7íʼn© •Ïܞіm”Ô à¿ØmãTÒ™ö©¼¸Ö¶>[ÙM1ê—¥ÜJc^ƒÄ‰eKÐ1š±s…Ùä&ÄŽU˜x¼»9E)‚âÓN…Zà.OVÞ?ÁþÅé ÅÁ%#ímÌq¬Q¼ ûúÉ&|XÿDUgQÆsAÍ e6“^m3í¢3¯dÂ'8ï˜>Îéç­*„ÖW\#ïçD}©HÝ›U¨„ãAÇ£K t
+r1ñâ£Ú—…:ø¶OÁQÝîtÞjò £z,9EW›Aæ;ÔÙBåÏ¿¢Øá¥2Ω.åñ‘/ÏC×5…ß®a.ùô£)Y6.¸¹uâ`ž~»kï½,Î+*ên<6Œ‡ »•/”šÀ[ S÷Ð:ïômêè¡á™¼äÞôÍ›º•ˆŠw­%û6«ßÜVák^ø)v¤ÿ)p‚ÖŠªsy¦Òbg\ˆÌîÀ ‰'Y6ËA¨ßwüÂúLÛLLû{ çoI±ÁN‚;W”5t$WT­o8ü}ÜJzòÛôÇo§PøuMÎðª¾K³ÇŽ­ã©E{¿\þˆ£ih’ö²ätž^º{zš'¡Œ³«¼jÿp1¢•Fg
+ñÇ+ô¦Oµ—t{V‹ê…P»ÚìnÝÙº½H#ú
+j§€v=…É°R<´ŒÀrËT\²š+þ¤1ë,ð95sÔï¬5[VȼèN`HZ¿ü[dFøLz¢YSöå‚{»ÙS^âhá#uÌš:J.Ù¶·Ÿ–XlÂPi½­–hO¸®/N‰;Òú©Äܲ•gr²rM‹a¤GÆX?/¼<Æ;µ Ž[Á­VZ/Qþ‹LÿA™‘C•âg”§¶U=æ%¬ÖUêLô"»ÏfÊn…å¶ËØhX—¾¸Q^Cïôtáx6ˆh°Ü ?ä}ª
+ mˆo'ŒŠ€¸¼•GD¨’ò/ËAÂÕ¶=ƒ½
+O Õø…ýìKwÜ¥ÝO#V'ÂoñØj/¡Êâë¥_¨ÙLèe\G#Î\š0&c\«p­®ÇWñàåTAI‰ê•ìÏõÑ6­]z*o.¶#3EžÛÒDÙT‡K\¼†im&^qDDµÚËiã-dåJ»©¹g±Õ8a}ª^½ªiUá€"Ì>ŽtÖ•(lŽ2‹Ùàýº›”úÇ»[iýz‰ò®YT_¿³9Ý(míÿÚð:e­\çÇH‘0wOÁVèI¯zNƒ…ùE'£%bh2O*¡2œˆÅè•› †+þ‘:ioïjYj½z,.û¸öµu4\!.¾VßHc>?”èvú[s‹±£H׊\ZQ²î`SÅJÝà˜7ÚòÂ8Ü1\NxÑoùû8áZ¿ÎÕáü癊4e³iG!ҭ”ƠbÏ^8aˆYºÎ
+WN!ÉÐ<?^ÓXC"‚¡¹¸âȬ҇cjÕsÝûÍŒ¥Åžò±~M/³Äº7Ö)©0ÈåiêP³:Úã¤Ç•§9´86×;·:qÙ¢QÛô¤Ùtq¼Švf4ãÕ6g¹öøíAÊÊৠkÏ_<݉“ÂÚ¡¾°(
+Ng ¡, r•»ÖR (ÏuôMuåíÈÐÌIa›_
+‡}×äà 2²|A¾9&öyX${9AÌ…±Kâ›s’ýJÂúù¼Rƒ5X C£AÅ$ûËC‡ŠûúÊæ¶N+*•æ‰ôÑ÷yÓE`·È
+"ådi8,੪ÞÌ ÂRß›Ç}˜O½‡à¾Á„ÐÆ…|Ce׳øZ•»=2†±–eÒžðËæ;ZT¹`fÙ‰óÉ+#aâÐæ
+ö(‘·âÊè¶`Üûó†õïô&HÚôYpçX¼L´pb¢:œßæ™Ò%Ìž5š3æEwÈ÷­ÆsÕšõ},¹»Çp87£Â²g…¾Ž}u)O‡;7`$Ê_¨Ýœ8âØòQIÕƒ$›ag>Â$ASy$Ä}‹È¦ÏßÝ­mG…õn¢ÃÑ‚€´Ý‚{jXL™Î´Ì´Õöá·³ÖŽâ†Þ¾çÇšŸt‹³©¤q½÷iñ©„
+?jÄÖ•6(›ý@Îüþf3æ(<(CÆ|6Bûáê
+Ÿ|qp¹DóçÀkrÔ—)„]­×´ÐÒÁʈhAR©ë…5|ö@¨;øRõ´É$pgöïopV ý+.–Ñi;h‚[dóžÈÀÚÀ/¼¶a2’|[¶#ÍZ¦Ý‚S•üë®ú—ŒYzƒÒOŠñ^7ð¿5ñ)Õµ¨¹ú˜ÆaŠr ðJ:If£aîM1> ~FÓµœŠPíÒžÄ5u^ñ(}±ñ®PÿÑRÈ4dŒñÔ™>!¡¿ÕÁOÎ)N²s׺îÀàùÁ;ž9üÓ“6Ì2â§ûzÞµ#Šþ µŠˆU³cËôÍQ¶ý{d&¤šeæHüÆ]ª«d}«œ
+a;QàõôË8¤¤¬Mªu½Õ*šûÜdvWðrh‡¦¢¥/KJÈÈξg°Zãæö8+âD=Š‹5>sLÆ$]–ÏŸŒµH¯ 9¶¾6ãð[F~q˳ßHkbVÌå´–±xeôéE1ýîÆBÙXÊWÇE<Õ¤N[%•¡Ivð<Àa˜-Gw­¼-“®m¬—_­<tôÁ«—Þ³¡©¤x•Ãk¬ìÀ¯‘$å‹ÉA¹)Îx¤Ré-‘Èð„¨”ÛH÷}¹¹ìz xFÜÏc ²é¶Ó‡Ô㎋7§–èþñ€ ñù[„²ò•JÀp$+þú~1*jíü³–"âxöBG~¾_²óSÀÒÍá&EKóÉÛÄÌ9 Wrû1dþÎt”%è‹Û¥>H,³1cšã8nOó¬È@ÖF+!ÁÝ8O*".¥Ä)/s³Vž`Pô=5¬JÒ8
+ü8o;c°Ï£Qä‹ÆðÕ-I²|-}HÎûf™©’ü¶˪l/ ‰õˆPÔay6Ƕ¤%e>g ýsTŽæŸSšÁ’Pz{Õå¼Ø¦Ñ:I8^jºßó=ŸH•šîøïmîÓxøXNŒŸ_DDƹ“‹²ňô€ÄÐû–ŸÇ^…Ïð/òÁ>Lྥè\—üT»s·I÷w8m;D™'îP'o­ŽÌÜÙÔ½©6(±;Y“ò€‚VΤ‹âIìE™4‡æ“]uî=XRÏì»ØG-êëbÖǹÜs¹7º›ÚyžóÝ,«œÕϦåÂ¥ø‹œŸü?Õ(üø°D¶šž›P{½Sdè¨Ôª–F«ÚB/cÈ9Šý ·Ý(
+tUý Ÿ]fôÛ6l²<J¾ÁE¯óih ;Á7bö¤Á#ô+rõ××r¨lenÑ•”­±ó/+Ž'ñ#ª_•3ùÜ”…x<°ÂBN2y¼4zn°¯é¥„¿.±£^§”Àäî~¾5FRy¦ËX‹äÈ‚ñQÓv?W㾌?êk)˜ìãz0,nìXrÉýäÎ[
+Wß ý ÛJãµ4ÃŽ~㎚‘‘¬Q:olÞ82l3§é J8ŽŠYq5Œ¬Tí=¯îž˜!5ìg˜27ÌB¨/\;ÛTØF©Ý— ™YØŸên9Z"åÈfG/s²CŽ¸QÄ=t’Îø̱7sý“ùlšE—m˜ØV-ìÈP<úX‚`úú•ê ­d‘ÔG5åwP6ÝÔú#Þ©Ý<šk°ôîÛ4u"Ø=­7ÎàÜZ¨RNaíÑø¤à;ÁÛÕûåj‹÷K|pº´ôÔ*—•”¡™.6V‡?ôœá¬yÚ%¹ÜEË&+ö$w¤ªâa‚F¬5p0â‰>œØ˜ƒeûq駹×]@‘M$˜‚ß&Á8ˆ²>Â,ñ×þ^8,Ó'ߤU€¹¯íÍëá ÛûcÙÐÅp ËF–K¯¸6À>K¤ÉÞ Pçíöü‚¶ÑžD*8ÛÐhÉ=Œ©b{…ò
+£8ÛÁ„þ?±¡m×üˆâ<§Ym©°¨ØLúñ‹£\]¦&åÏqˆ•”ž©k6ÚLC~Ÿe& §ž·?k•ëqni°cL”r.ø-!•˜â…/OÌæ2Ds};®?Ã¥8Õ¾èçèøÄÊ0JW ÂGÜ&–¦<’VÖ2j«ƒ®´ÊN3QçZxI’î?íTõ £`ÑѼ­Ž¨ C˹¢-±ŒÄâ®ÀoT~ìXû`æêáU§…Æ ä{Õã&¶cû8c-¿9K“#1ߨ•Æ€Ôü%’]-kxú è|ó{¨[Pl¤v0fwf\ ÿ ‚&=ƨ©Tòi,Åx.¹¾oG“j•ÂýçDWË© wˆ—R›”’¬Ó¼9¤©†/œCNÔ +nvù‹î³Ø
+³}’ö÷A®°^SràÎÏpï$JÓ^wo/7:îS¨ö2¿ÆÉÒÀG¢_U¢I|93PΧ‘sÖO‘·ó«…©À:¶éZñ éTÄ9½â¢¶FÛÝi#²|0øV36Xò~7±#N¹´P÷±â
+´ŽÚ±õ.ÂÕ9U¦½ô—AðñùUÄÎi_9u¿J–þ íoÁCŸ`7æ’› ãµñÛíü;Ô¯›Œ&2Küë ?Ú·Y¤ì.Û‹©Ò:ahVä c%A²æÙé“–» ’Â30f WvÇVêêÒ åÔŽ/“äÆÜÝŸïŠ&a•Ã2Í8›Ç_î&
+¾Y;‡Qwø†
+;qÜNÒÚ 0ßü¥˜£µ¬Í®%~Îi#žK´®EY­êCFòç}I´}$#l—èsùfŒ¥o1¹ÞÉÊ°)>r«’µ[Š@ëÒŸ3`%ú¾Î3B2WÎ)Э8¤f!!j¶ „"ï‰ :ÔÂêÅÓÃóºÄ¼ÿô³Z=sÔthw
+ìžšTÚoúƯ·ŸäWÃdj21˜´dbTóã3žYç‹Ö9Ö˜‘+X.ôf4æúÐãPxƒÃ>Â÷×_|0TUð‚yÏžmYŸÐ‘úÁeIª¥s˜éµEÖJ¸iÍÔõ‹o#Jë}™~rÄj²R{‡<Pö½‹lØpðíg*¤Ëàzt&œ›@W_¤»• å¢í’¹‡ó“PFJö#]”s_+ÀBÒճجaᯭ¹ ¾û«tø¯ß’}4[ÎùÍð´bïÈêŢþ,”B.YdålÎÉD¼,™ûf%ší³k33éÓ ®Ò€t*’ë(”ú†SƒæjX”õPêÙByd!kÓw} ô]pN]Ÿý´õ0é]Þl_(Ik œv}ZšûzÄáz ÒÒúqœæ k”gÍŒìƒaDa½ÇÁ]µységÍ‹€‹ýy€€œ(øÚó$=Ç™0·Œé3¶ëh\Š€¸¨»Í¾ô’sÍø\ïzåF?ûÄJy*~
+^@Öç0ã2¤‹¡¡T}XøÓ¥Åq‘´”ÉJÞ49ÉÂJ)"­«8K~ˆ¿]îÄœ÷™º™‹G½´§s<J–Ü™ÙÕ{k{=ÆÍñ v=àbÎzQT³•
+íK½+eùd»¦ê'd²¥LË2êXæ˜Tâ`Ô^Fx
+ì„@ëE°Ý»’Èç¦M6W¾½L"aœÞ#½¦¦l"¦ƒ4D[—uèªùÜo‘á•|nËf&⯶(egØGm.Ï6¹.¬¢l}­åQ/[*/¿ÍZsY÷T‘ëS™Ñó×¢ÐõvÀý;ç²û„û!ʼf¬…Üm*³Å¢7$Oj4ä…²mÝ6„Ût%(êOĸõgL±™«Ì¶Q07Óë¹ Çv”½0§•€! ÑäxŽˆôn°2&¦"‹Wh?`1ýJ¾m¯­Öu ó¦LÀ¡´§à® ¨^:5Öcb¨du«ý±QqŠÿÿ[¤øx­&ü•µïÄd³ýv}b@ÈïG~Ö ¤`ÝÈŠ^à®rRó®Áò¥ö~jo‚ÖWs.D®O4r¨RÙ:‡4!ƒB„±’@u®¾T ãý’S>½ØtõýÌÜp˜;4ƒ&½Æ0õpr ôp´ÿó˜boV  œÌ¯µn,äÄë -N¼ðÿ‘ÎÆjP©4:î1S›£}ypcyþÜk|-6üA<1(Ä»äAN“ ñijëñࡸ?9ŸÖù”Oi÷Ê.Áv&ƒ¢»äI#9x숿duðcBâ7‚nM²6£ÿ!.Šëá™ÍM~?Øó[ŒBÄ׶ȞÍý+{§I¦F=64>ýëI¢ßÃaçã5>€šk±£”üÿ
+K ñ+ÏÏg¬± éÝ–´ `—«z*ß»`0!Ì™‘2ŦŒ‚5ËJ ýqåÄCœ‰³‹pÇ-i®€@q€‘î$:œLZ"×Ð7e’Á!Zœýè
+£+½œ¡Ê¢71ÌÜÄ\W‹WldT¹G
+Â/òÔÁû,FÿZŠq^¥kÊiÈ_ˆÿw¾‹v8ßHkãR5FÅcê£×?!•TA¡@yU둾Š—gïž”6Lo†Æ:Z3äaÃSÜ.7'°
+óÏ~•è'ÉoóÇûo¬W®µn‡hÇH¾1%Þ2Èñoi;?
+c¯À¡nh¨­ëíg;Ò%ßSt­”îê‘„‚ow¦(6ÂŒ¨$ÿ^yVVÃç7.–Jul728ÿõ5œdS±å ga‚.X!JZü\8A¹‰)±OilŠŸ­W"•T¿J×]3fÛ˜m®¹™»aïÈ!KF“ì¼Ë¬Ž=
+jE`Íž¤ >­E½y¿9nžb˜n>Gà ±Šè·À¡§7ûa¼I#fKˆ7H¾jXÙIé$(ƒ5WR6‡or•‡RÍyV¬^©à§Pp€FíÆ»ÂÊr¾Qõš–^S+s¹ÈªÕæ6L
+_“îÖÏŽägxë)‘Edœ
+‚‘þë)9!œ.îù½RÊ3
+­ÅÔ¡aØ¥Àã5Q%¯-,p'ì.Ç[ImOÞ¸œ8Ÿ
+3)ÆôiFaÿe«©~¿U[’À•TÉœW2Çža<à»N掫L+)bEL8•Ð7Œ+
+endstream
+endobj
+2688 0 obj <<
+/Type /FontDescriptor
+/FontName /ABFOIU+CMBX12
+/Flags 4
+/FontBBox [-53 -251 1139 750]
+/Ascent 694
+/CapHeight 686
+/Descent -194
+/ItalicAngle 0
+/StemV 109
+/XHeight 444
+/CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/O/P/R/S/T/U/V/W/X/a/b/c/colon/comma/d/e/eight/f/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/period/q/r/s/seven/six/t/three/two/u/v/w/x/y/z/zero)
+/FontFile 2687 0 R
+>> endobj
+2689 0 obj <<
+/Length1 1383
+/Length2 6026
+/Length3 0
+/Length 6968
+/Filter /FlateDecode
+>>
+stream
+xÚTT”ý³P@¤¤›%%—’îZºAiX––Ø…eé’¤‘”P@JJZJi’îP ¥Kà®ñ}ßýþ÷žsïÙsÞ}3ÏÌüž™y^6&]^y[„ „€£x€ü
+@!= ~ÿÝñ
+ùßöþg–ÿkõÿóB gç_nŽ_þÿá»Àœ}þ
+Œ‡<ÜÞùï&ÂÜA0o¨­. qø½AÍ
+<yÚ,V©KHWd—øV½q¾¼1fª±ù0Vs5 )‘‘ò¨q"ÛÞ† ÈöDñœ#fQˆ¦†•Íñ#[ãÓi0(Åü(2_­Ëö6ño½Ëñ°[/ìF» 3ê_»!.YA “O¤ÊQUY*fE°à'+ugÚI ä8Áâšð7´ÀÃsNrwÖŽOc Ó”aÙÛãWÆžŒ¥]I¥K}b
+Rloë¼ÿšªò`%.Ö·š&mX'ÝêÁFüq X6f‹¯AK ÃÑ•‚çÄšƒ|¢:˜mV­5
+ >Î×O‚xƨ›7´ ‚Ëf?ÖŽ^–M WÌöÓè ßh aVØÉà&†~ê‰a½µ¬©º¤¼Rõ:lIäPË‘IExÌáßêîï™!ï$é8.ì ÙẗuÈ êàcûÐH2ú9fWaÌ\=ïƒÔ½ê™ÀIÆ\LK£¨½yi’YVIšŒµn¢kÆBø=íºþy¾ØƒÎ.Î\ˆo€¸ætÑg’4®>jŒ¹•QJáÖ¾û¤7-Gµff¸|_ŸàíOíyùõ!öB‹Õ}Û{Ïî̲õŸ)§&ÒbŽsüèÛMÑø;°˜SH§&…&¸-å±ÛtŒ)Í•¬o4P¥Þç@äU¿™‰IÝ·×À²ÙT‚—êfÒðÛ.YP‹®ƒ¬pq‰×´³~Ä`ȶyŸÚâ¡ÈFߌC‰ë<ˆ‹Wðˆ+];ÐìwgCèŒv¨”’ÿ¤gA¹ùÞʼn&‹ÚjÁ ÖƒÓDzr§6«`KG.âÎp¬V”H‡1’þ›dü‚1ñq¹9Ó¬ %‘àÆ/²ƒIòþM>áp_ãh,ÈWì=,¿G!X³Kb/fØ*‹Ƨ°KÙûÝ>I¼q½1.’ÐDÂY³D³KÉ%1¯=Ù¡¬O·ˆÓ_øÇÕœÔvð¨èEõ‹´Þ¶PÒRezæõz•\•Súмó0ÐS0¿tÐ’ãɶ:5GñÊ;‘I›²½sݲÙíà·Ú¸¦§Çµå¾·´Î5
+¿˜ÊÌZ
+š.…¾˜j~T†ÏØc Ú²UˆÙÔÜÞI§'ª¼×ünæ
+»a3!C}ç«x“义†“ŽoEö$É٫ú“J«Ü»µAc2¬›æ˜*±¥Ÿ†>Ù›jÇèÄ%/ûgŽÇ¼#°ÜO“T3]ñ\M}×Æq±°C8¢èT¼éÖX•N]ÏbÐZÌņ« µéôHdþ£uÜDuÀT¹¦®Aü+ìÖûŸPt£ÏŠ˜Õ]+èq·‰Šï«b'Ƨ`¬½ ¦ª23ï,lr )¥+h¥aâî4ú8©¢"Mr*®M-`ÉUÄTÅÎ?’bÍÞ3K-Z oÍüŠëÌ)6}æ¿{)mò±Í…X3¯Gè6¬WNBÆïq:æ ªM È58½ºÊ½,¥rTÙlãm»nÕ³i?o
+{™…ÑÒü$«{ˆ¹,}Pš@¢Žì«Íð5:BS}¹)>¾ý±Ýù®l¡ÄAÉÏ:‹›ñjÇ­úå3ùϸáfŠ=ÉïBܬ¬©-à„ËבÏäúzÔ‰µÛ39Ö^5PµO$sq%
+éó[Z‘q›ƒ%pƒƒÂõ¯Û3äÆE{)Ô&n.[øïd‹ˆ{çVè÷š­ÚðÌÓ;{èMA4žl\Æ%<7ZUMߊ|êJ*«*CW(KÐ8o¤j ™ÞÆ×jI¸Ù±¢å”i{+ŸÀÀZô–î“´{E¿Éµ8}ß‘R·½eýQHþdŽNýèLÈ‹ŽI9 < %Q@Ÿ‚5R,I´óu©¿"î¥\Þ–ö½!ys# MÓ˜î®øó®.ðë v^ª‹£bCæDŽå¢Ï0‡v  ôwåEŠ*]ÌÎ%c-Ï쟱hÅ讟lÙ@ªH]Ÿƒ«–Œ|l·’v<‘Ã59Æ«QkLï>GŒ¦5ë–ç£ý"d}U-ž»²e™TG µ[¿ýùþ“öú kö=½"êÕUó œ›¡×ïùuÎØVÂ\>ò6ªšK“:áM6lÓÛ>&¯
+7ªï¹™+“áÈDt5@˜SSi“úœ†ùÒ:ÖÎÄøžI,8w”àÈ<6’ÐÀ"¥x?Ä·%q’yüÔE§¯ÖnI[E4·6E~?Ë:±oÐTªIHÞøû¶¼Y&òaÌêsƒ÷ßqŸy‚éÖæ°Õ—>œÛM?„SÞ=ÓªñÖ%b¯v%,gØPšü”i77~wF.ÁÔ5²ð%ìórö ©@+'Ý}~ý3ŽëN„{ºTc¯¼f†øð¹™²›ðgzÖд ög¼ÙocÏã|ŽJw‡^&|"¸w—çz{z?Pò ÖuNœ³O O%MˆL:f”Ûó©ö Æ=ã"-•pIú[9-Ì»Å(Ú.;G©+"¦q>^–8í%nóêo¤ØË“8)?Ž—ò©Æ´¿/.}ƒòž^]·‘*›Ü·á-qÎ쉆‚¹öp‰µ{YtJœ5Œ¯:ßDÂíXm8¶ß™è^~+º­æ´ùåNGS{EÐÅî]µbEóÊþœ4Ò»ø `1ƒE®Ûö×ÇíÔ§¾HLºhÁ¹6Gª­§ñw(l©Ë“u¥;ר§c¼6—úê>òj‡Îe4·‚HÍ2îÍw«×i¿Ÿ¨ns¢Ú½šíÊÐZ˜nñ;vŽÈ‰é|LøĆ¯œ¥©#üõVÿî#Â÷!ý5!5àÒ›ÖÅ#M¥lC59‘âõ:¥Ïm˜“¸¢½ûË[ö»®ZªÍ÷Ç–9F‹ë.‹ɵ©Ï×î™HÍÚðqZ>Û(« ÞT^{ºÝº8‰â3#Í $¯ÊuûôèŠHƒFüaZ}ƒ %Ý‘²9‰™N—ïÙæYo8Ú`ù4z‘‹ ª#Ósß…¥a.Þd›´üÑm Gì®–Ö^R)œ~-@QÇcPa-zè L92*—FÄ»¿-ŠY²a„\k¶iÀ ² ¬‘üÞ¸ÒÍ)4/W
+˜¹/”FÎG™¥‚LÛÜË'å06B±ÙÕiÏz`jŽ<–9óïK­tkÈì=×2ÜóCMT#ˆï•\¿Ín¡>çdØlV8ãÇtâ³òôéÖ½Ì"º¥t“+_µ‹ü¦ßrÍö¸žQÎùÃÁ ·Zn©~¥pVÉÊD† uð•yR ç;ç~"ŠïTmiÄ×× áu¸ ²±RÿÇÞñVv9yÇyÔ™*ËŠ§ßóŽÖÖ†·¹÷0 •<§Œ©\_ó•×Lø\Í㸺X¹ý¦°z!5jÅìG“0Vˆùƒöy%ÍžvYžƒGÎí)ºÇg\÷SÁÖÃ
+Ò³kÐ!23výKCÝ·VW÷Ίõ§«†¥*>CûÁ¥ í6ïMžfC¹[áõg]!T xg:-ºÀ„‚M@ ä$èUåÞÅ„“”ðÁõY¦­Ñ9’0àæÎŽ‘ÕGC¼¢úW=¥ø{‡%*!õ]ùò!4opoè3w¦Þ=/6|[P¸ÝL6üÕ¤ö’hš,^u©ˆ6°{*3£,?z‡‹OQÛð\´µs­ø†ga[V|Å&öÄ·Õm:qo !(4˜J±u¨ög!ö£Öí¨{IÉoUŠO×=„ ÈgË58ï/›ý`u‡¶5òåpÚ»«dI®¦mé’Öe®J–Q ‘Lu õý2úÒwB?Ë*3$GÛ 9ÛÑÑ·X\|fI¼ì‹ é[y»ø:šr.¶`°»ä+y«J§¿Wãµ ëª*æl‹­vkUfxÃâc2¼±gjaK“*¯qåî5&|~Ù? ì_˜öÝÊÝÀ ÇáÕ›œ:‘\T¨Þc>¸µ|ÈBÏISÏãlòA%ACɱ®¿*§™-˜µÒʪpß+G¶‘³d(˜Ï”5¦Hø¬#Ó¼¶È°‡*0{jUwßïoEB÷γ “èH»Óƒ“àa°×4ªEÈÍÇr=qò/k]ö‚oÕ'ù–Œ-Èåh9íjÛÓsÑ} `é|qÀËx|Ýú:§ô¿×²œ(óF€dF’ç¤~÷;å¨8ݦçzå6
+kóæ~›XV #áî]yׇÙ4ŸÙŒ ]Q+9ì”L«½;´QwöJy ÃäȪ‘íß3a±%·Qhê¿ h˜©TOÅ–¤®¨=´<wZVœÛqé«Q:t\´¤Þa"²ÌzØ'3ÃgÜGtßêT#Ga ´I¸™¬;ûôÊ‹UõÉÜ–drÜáþ{œöU
+6Â]½¼—ø™'ç÷ØH#
+  ÝÉ;Ï’(– £•Ýãë䉊
+ÿ¹‘°1F|Fû×qvÖïW_ßbãXõHiš*ÿÎaÄ·Z,*˜DB}!BÕ7=u“ñËØÉ3Úïu3áìÓ§ŠÖLG`O¾6>Ê<›éóôe,ÒÝvj"®.ˆYˆ—dµ³¾’“TÀ†ñòê­Êk¾¹ï@íBüQpѶ©¥1àRÃÐ@¿SüY³Ù.+†¸þ”s“sML†E2¦&㑤é7Ùk8(àúQ€ø/=k°NŠB2Mr“Êmë,³*F‘´ã€-ïªõ“*›Gƒ¿>ÕCÌ)Þ÷?Z0)]™l澫OÁpŒKA`s_[ÅÓ2‘ÒÇÈÍhôÅÓ 0%:4NSî‰év¥-GpQ·låù2hS£±Œ²³Œ¦oÆxW¯Åܧú(OTžŸ Ãop*ÐÇ•§¯½=zÌ}ú ü5 ]”G<u&„ÿUUV«uŠJò-ªM?NIé$ɘGÃ*ü½GZG¯Ý ÊÂD’£ꃳ)³9ó4;ªT§n@
+¨+CòË«ÞÀÑ‚\•iÓÑ:³Jo!C6Õo œ|‚7Æk3}+cr^<½Æ“tíy«?·_á=OîS–ß¼0æ[¾¯á¶á[º»‘¬­Ðý>\ÑÐE§Åbte’RªFùè³ßgª·¥~Ñ«“ä›l¥KNµR_¨\?Í Jy³&Zô~ÃUrIõ8 ¶_Ö<6jOÂ0‡˜ÓKGÔøâ7·Ie–í"“¹)U1wâéR¨Âåh_ÓÄR®vÔÉO¿BÔ˜·Èi} OÚeL†ÉZ&ÚOŽNC”QùÈòòfI£¸qKÆ5Œwœ«Yž Påõ]U,AÅŽ&bõ°œ/|dÑäå×  V¾Î}íÆ¼á ¦ãV¤X¨cë%(îÆñ’>å›Q×6äÀ`³_BQâƒú‘¸P F“Í+&f|;ŒY°×†ÁëóFÅüNê0ŠÀ¥Úþ¢>¥ ¥Ÿpçgn­5︸g<y3Ö
+¸5<•ŸG§Iöˆ¡ÓOT@ŠôùFa†/¦‘CæjrQ`r¿Éè“‹©ön!,š \ƒ‹S/@“ $#Ã<n{Úê>Rú†ãüqW¿ÄÇâ.Xš[vL9r5 ‚±f¼*MF| ŸÂ^ɲ§ëì $wd†vÁï»/ŽoÃxöO GZÖõCš!TOïÂ>ì‘<cœQ˜à«íƒqvè´Ùñ•zw¬@w‹SÝÄPÃJïJùè»}iŸ'`ñeïîK1T(߀p3O»³j8
+ú)¬RÙÌ…{‡¿}¤¤ÕáÎre‚’9îF8¶¨ Õ>cç:“=Ùræ¶õyÜ0CœŠ»§¿Í±¥)w‘ERùv Wp”í »pÇ>±QøóH#˜XsÛw&Íç éHáw–Ü6—¯“N¡VïQIöL‹,êë?⸺xq:×Èú,%ÍæÚn—\0†QrŸrçˆìš†qæIJðG:•Ê‚ÂÒÅ6U3¿ïÜ’JiC­˜(j[0/¬epŸ$ ˆ…§˜ØÓªzZõ! ‚w%”¸ ÊÜÑ4ΑA?X¯5}øõ²Ò†è¾`éš¹6>µ'}\®=ÓÅò†´&Ô—ýpÚ;tË­^ÔD’í™›ùP®Gfug=n)ƒÊ·¨Ž·ÍU"ÌM©®J”éŠÿßI~œ
+endstream
+endobj
+2690 0 obj <<
+/Type /FontDescriptor
+/FontName /IRYRHS+CMBX7
+/Flags 4
+/FontBBox [-55 -250 1289 751]
+/Ascent 694
+/CapHeight 686
+/Descent -194
+/ItalicAngle 0
+/StemV 127
+/XHeight 444
+/CharSet (/A)
+/FontFile 2689 0 R
+>> endobj
+2691 0 obj <<
+/Length1 1536
+/Length2 7526
+/Length3 0
+/Length 8538
+/Filter /FlateDecode
+>>
+stream
+xÚu4œýÓ¶ÞBÔ¢¬ÞY½÷.ˆ^‚°v«ì
+ku‰D¯Q£„袽D‹Nt¢A¢×Wò”ÿóü¿ïœ÷={Îî}Í\3¿¹æ7s/+£®¯aUEÀ‘¼|@I€’¶’’
+ñ‚¬¬†0¤ôo«1ÔÕ †€Kþƒ¢ä
+!omÊ ä-Shº;„
+Üœ``(Üí6ƺnhh¹@áµþ ð
+sAºñ¹Áœ~‰äÿ•æ¶Ï*pˆÂÙ
+GºüªOæ
+ß6Þ‹ÿ¯ûu„#<à>C[bûKÄÝ…ß{êÕPþ“tk"øÍŠˆ
+?„ ÀöVÔf ½ý!ðq¡ 
+ó„BtaH°ý“ô×Uܦw‚Á¡º7د€W
+s PÖÏbEÂëör©u0¥Ôö
+Uˆ€­Ü»å0>ÐΓ.ñoÚ >ºÏ´Ýò¼o>üü¹åÏÙA‰ç B]%ŽVç¿¥™wPmýR¯êqLi)y£¥bE’Ø¿.Õ›³>T[› –渗mì½ Ò,7pþJÚÇÀ²7tÊ<õ„W:ZäXuü2«óK;Ée0˜¢bçqùžfé¤ôK·Èšþ®Ÿ?¤™C‚}Mñ âF8¢"¥
+!
+©©ö¤*V1WÎd1¥Þ\hl¬¶yiA4Q|Ê®Ž/I¶œNœ*kbÐ%úÐTMñt‡´ÞÏ™´‰l±
+¤iúbwôú3Åq5±I0ªãñŒm¾~eœIÓ?ªšê]¥W¢òLîÍšñAÏGb+¹$!ŸÓzéûù}FÊ+ÒW|‡òܽ`¡š©´Ó¾wn1.¯~þ¼ôC=uˆ$É#ü
+WÄY/‚6À„™ÅBÍâÖªéÄÏŽ"ÕÄü¯ÓÕÞw6 Ë:¬ 4Ö• ¯ðƒÍ/Ó²3 ¹'6<@|‡#áöÂɽ¹¤±õ™Ð%%¯~Þ0ÖÓ<*A\½yýk/¥G*Á6Ú(«H°9ä•'2·l9O*£¢?´Dœx€D~$2?uºOP|µ6æMÂdXcé‚4µâ^ërüú0> .¥m“;?Ü-{>~Ѥ7ydQ£Bû öž‰i£~ãfas—”>!ˆýöãÐÄ–‰µ°Íòù×Ï÷Ç.­®'Û(tߟ¢ó[×öùîl’ÒŸ”£R.Ñn„ð ÂF´Æôôö9âú쾟º¡ga,*4/ïJÛ¾^¦G¿ü
+‘‘/ Z‘QqøLNB3.Æã{Ç"ùG‚ÒÈÍý¨øÓÙI¹û80 ¯
+Î
+7KÀ^ñBßS§Q÷å8•’Ó^¢Ésâ½?#hW6œ~£‡4D²Ü‡—µæ2ö}+ ØWuõ³1n`;7ZÉíqe²,ÿE†¯=;plöÀª+Icüé—Ý]±Wô8íú%m~üš£Â9.ŸÃú´“UÁ¨—š
+_:ɾÍÊQÆi}˜*LŒÚø¤²QΙ$µ£sɽ JÉtS„~Õž‹5s:°*d{oë¸K¼æb]^’žV=42Úÿ^ÎÚw"a’?@r¹Øa]:“ZWòÄô·•FÕ¬á†îǬNçhŠ"Gú¬œ Ìà#n¢5ÝzRŽÔÇè[ÍË#ŒÇù BÙƒs–V»wxñ6ûëOÓ¦ÉõuˆKž¸ì„q‰¢æ¦³n(¬‘ßÃQŒÙjoÂâß\>T(~Ä]fOÇ+qÙ·Gv‡VÏá ]ÊÅ3rG%ÃPƒŽ”§ÊÂei.¿›ïFoÿ†º3Å’¢ðŒ
+-ÝP6 AiŒAËû¼1Ùrr¶NV"uÁÑÃsËMµOM?+ëýè÷˜;OF?Îø¼@æ°ÄÖÞ½ñžÉ ‘yeŽé{¸"Õ6‡Î8üD±Á«¼’!4Kdì}±Ô¼J»9÷"LKl¦ÅŸ~éôÙzJ>GºÖ‹)É|G&u*Ý<b”)!u5£Æ´(è4U‰ÿq'J;*
+'„Z–Þid7i¸{!S>øêaÔŽº³$eTgs|TæòÑ釼ΤŽRèy¶¹ôXãE( ›âÁgÈ»ä²Õ•cQ®¬ˆW×Û‡äŒý‘,¶›Ô‘—ÕE‚O£CÜ/ú<>tŸV4ÓU»c?èÐÀåšX€’ÆŠZß;Šà"<{Ñ«쌆§XUâe[†âûéÎý}u–é"Ò Çg:Ä”ãÄþmðAÖ”¿åW4j~×€ÉÓÐLKK~b¼T"ëÑš‹2ëAMn&¿£¤“Z®O)´t…ëêѬw.m¾,g±,zœ5'àŽ~
+Ò§š"8Rª©Kv¥2²/1’>¼ÿ¥Óœª¶
+ 톞q4&}ÔTá'Ü[œz”‘¹@)ñ”A|(Ð14äPåøü¥â0Ï]ÍM°“aNé¢Qpq¸ÉMéMI™J3¶$'LAýÎ>n«K8‹U6­ï}µWOÑWkï)^ìb€wø™æ9cÔWlÈ>¿ä#¿¹#Û@Ï(Á{ûe8òjNlz8+ÿKâ³p«l  »üôÉúð|’¼ôðEÄjäÏwÚ:©Ò›×ø¬ÂÚt¡M1mSÚBGûê•ŸÏ *=⦖jÙØh/‰ÛR˜›±Mze%OiìgØgƒGñ‰½ðjä2L'Lv‡Gïp³òˆÀÃj`ìc¯Ó—"NK
+Ù1òúâ’Z¹÷ãŽ<„ü›/¤H#fkÜÍ' ùóŽU#KÞ Ϙjf÷ /¹rw^c8â¯ú ìÛ ³.–Y}Sºz6Ãè?™!~Êôäš[ì3­§š "a‘@’1¢ÂÀöHӶ Õ¸úê ˆãSH¾µEç^}hµO„Pð´ÁÌÏi£˜üÎ._õa¼¶g¹Ž›fÛ6äAYj²hmý 'Ý.ÄTÔ865[ýƒâ2÷¯á¡Tváml K”‹
+»¸-áÆ.mÌ|•œá+ÄÚ§/_Å?+˜Z*¿»þ*hƒù¬d¢è|ëL¡yõ’¥¹T˼ãá1ÿ{ðë×Üíô¤©cϼ3§F&¦£z0
+1?RÒO’‡aÏÀÎ-³H†™ÈÑž¼<fäœM½;SY*X¦â†HS«Ù½7äz–3"úY–Å
+s¨Fð¶µò÷ÞX–
+]½Kê°{X³Ž¢#_y»øuí ~å¢ÑÜa »t®QÒt™]ˆ3¨'
+ÆpLÇáÛ-1<òý†Y«Úñú-ɤ´wÝZ±³¡öÓ • Ž²íLgéóê_ù^åæ|ùúDã”;HýÁ^à”_Ï÷¥™>ϲ»f ‘«XØ÷¸Ë¶ÍQ*Ý^£Ã³Êœ¬N-„;'_ãò"ž(i,r¯—¢Ý4øCZø}Æ[—–ŒˆÂ-MB·ôFt38”^oœ’¡3ánè}y ïùÙ=1]S<¦å\iÇZŸ)pÀïO³Ø(\K¿òË¿¬«Ù$ÆØ€íz¹£7áHÙ–UEꜮljÌ&Ç„rù$Èjû¢=Çý ¦9R=8(âV,óÝèHÁˆ'¥3¨c}6aøyŽhߺ#²ÃÀÅŸã6j,uÞÕ‰Ð>%pFÄÏ/d: ’k¢Î—n˜|qºµvqƒî¼Æ|¼±,FVòX£c=¼®Kß0>fËx׈)&FŠõDîi$Õƒ£‰5‚-ì{ĵš/Ër'àú¯O5(¢×uUž;%¡)½”NE‡×Ãý硤ýw 5cH;zºßªòø=/]3Tx:Ú=;x¥ðc
+»b©Zï+†H¸š(ØR‘|æ$ö•wA—b]–D%ƒÈA’ëI­EUŽ,ÿE“VñîE:^Õ™âkݸAÉѵ}¦oìÖŽñeˆf.¿$æ<ül¸éLgÒ\T_ª]suzJpÐX]xÛn&bÜ)Ëá>«ÏÍ&K+þ*™Öúüâ¨L(ˆ.6 ŽåGžqÁÉìØ<âH>–ïZ±ÞB*ùº;äcß:“£Vi—ÛÇóó0º)z<bŠºyùÐ
+/èvøeM¾T|cY1òNe<ß½A²1
+ŸVq!h7— ä €xîréëžÌ;™çûñf¦@ÜÝä®­–>î8oØ$Èͧ‹Ú¥ïŠšÏN‰‹J#µ‰±Cpeˆ-VJ†îÙ->³Ø^
+Þ ÐTl»4¥xˆô ô­ˆò ˜é= </¬Ö,¯)–¯GWdI±~§àÛ'­o™Ì†)ô¶mæ`œ©iEõ…9”¸¹¡bº¾ØüÚp!ÊÀ`ŸÓ‹Úv²|cÆ Ù2™éxrwxÿQ±G^Jà†iå¶Ý.*'¹à*J±{¯$Ñj6éŠÓ^šbƒnïl€*iüx´´1™5ˆô<=v´ÉÄùY¥pÈÀVe#9sðã{Õ$ - |BTOß|òÄyGÿMT¾0Ôë懈OmQ9Óv})×%±ñ{Pî®OÇIsIša7½Ùf½@·‘~vèÙå7vCSpÀc
+Tþ`AÚ¤ £°ç¦D^û}ë w7©83(­[ûìј\Ðeáj»žæ»®¨ð¶Í®Ë¹Ät½Ø
+Dö‚ÃøÜYe\JªüL,Í Çb³òYÏÜ \Ÿ\4sê½qEÁèGZ§i²¢b.F1‚ÌRRáßdVHâðF1jMøm
+ž7³5ISø•<Ǹóƒo‘”]9Yò uòd­u—H:“P¥qï³ÓÊÜ;!ô/]/³™V(š<7§ÚÈÔ…ÛôÓ<Ö~‡6²h-fÑxñêþ@YˆŽêENI[Z²n߶{XkÈ{»8bÂL¾~
+„u¨í¹Kúó5Y Ï„ÙLœÜ$‡ã cÆà”F=
+£ûGRïÐ\2n ˜Ùë¬ Êž‡úEǵõ¯½™ ݦ»ä :k~sæçq;†<Õí'fiG›?ò4‹öQ´=ݪ¿Ÿ‘ „º·Pm1s:ÄÏ›êŠdïÍçÞ³³S"‡ ™;¡>]/IIÿp*öv“>1ã-²ýv-¨7Õ—W‹ašŽˆ¹>8C3•kG´—…6«aõáü”Íý!‚á$rRÆäpÆy2ùôíKÝœðŽGõ¦Z›NRø2!ðTqHÊq`ÆÅÛ•Ò°¼E<ù®ÄÎ' czÇÕ:ùj¯û-}í(-
+-™Ôë}°{ iY‡}h¹süX-ó@´ öÑê9ŸLöÑFÜj$ëXùÞçñ×è¢C"Ó.½ƒðKvIÒ%r<g†·­8-á;ߊ<ˆGýïHÒ$¨›N€0ÿôwÂ|¦Š —~ß“K¹|Ò3™zâ×3æáÑhUKâ²>ý›æ<(²àêíx¥öêúx o…Á3æo[Ý)0"åü$eËáz„ŸîšYŠZl"†+ƒ“»^þ„Ô¼·%¶6ð¦½ɳ(jÁxñ÷M_eÒ,$z—ô¹0œÓDÚ!`E;áYç\]ú± !†£Â1/‚-nÊõ›ús^¦Ú¸âáhŠj AçÕÔ„e¤¿°‹q
+8ç¸g{bÁ"ÉæÛk†w÷ÑÑNDš)DÿàPCS¨täž4£x£šŽ­oZ]óÌwâÍ -Èõ¿“?eµ"N¿žBU­p‰vB„×r8>,RÔËôpÍHy¡¯ðôÁÎd^J”2ª\ÛĘ ¾¸3¿¶•õþˆÜkâ,D✔ÖÿåÑL£><Ta\öÆsðI܇÷’aDÎ&òé'L£©±S{¨Æ™~JN;ÿzæ‡øbŽöç¬-Gí®Êc;+xì@¹‚O]Êì3Jk€åý#BŽ›Ÿ’?Mš”'âv7õýC²)“F,cìƒá²¡9&!¦\Îz}Éf3%ﲋԕ¹uOë™öb"¤jËÌP¦ûì?=íR‡áHù.éòÀ÷~ΧºsOK%Aÿ”"ãgðÛᵕQ Íþú#õ~zݺ‡L
+¤pÚæé5—kuÆV¸ _ÕÛë\ì-#ë‹»ÛëÕj<zKÖ«çKV+?U2
+Õ5ßÍÁ& ÷7pŸQÇÚôNÇZU˜’Å‹d?4]啹ÿpΠhLù) Ùò&hU°2·À¤;$sBô?++ž .ù|DX)2PŒ¹j“ìa”yõH]Fl¾†‡`")䂉c(£Neße]N6¾ØºÕÓÀ_OIrP@î5¤Øä#X‰ùÄ®ôu¢DÜ’°"»{YªÒŒ³öC&1 û±¼ðpe ÜÂ5ªJdÆð
+K³JÛ!ËÆ`Â3Që–÷êÙh»3VJ)Ë•Ï"•ê÷ioX7©#¨ˆx§ð/"õµ7Ñê
+t}aPtU­¶‹|¾Ù¯b¶G °FCfü'üóå…«u­Ø:ýävºuë”À†Î*kùð»¬soßvĆÃÂÎRžxÿTEïœsn·åÞhQ¨~b• MëàRhq
+endstream
+endobj
+2692 0 obj <<
+/Type /FontDescriptor
+/FontName /AZWUCQ+CMCSC10
+/Flags 4
+/FontBBox [14 -250 1077 750]
+/Ascent 514
+/CapHeight 683
+/Descent 0
+/ItalicAngle 0
+/StemV 72
+/XHeight 431
+/CharSet (/b/c/d/i/o/p/r/s/t)
+/FontFile 2691 0 R
+>> endobj
+2693 0 obj <<
+/Length1 1646
+/Length2 3984
+/Length3 0
+/Length 5004
+/Filter /FlateDecode
+>>
+stream
+xÚt 8ÔmÔ>QdK””¥_I¶1‹ì»ìÆ’-3f3–ÍŒ-‘5K¨"Š„²e‰ì{$B„ˆY“”=Û7´¼Þ÷ÿ¿®ï»æºfæ>ç>ç<ç<÷yO™ÀÅÕÐDGŒ6‘@‡¡
+€†¡ž¹9
+@¡’`(T‚IPÐOqÅüu0 ZbHd<‘ °‡¢A )T›&’Be ÀyW
+P( …Êÿ!I
+€&Ò ÁÀy"CfÔ ºûð8'
+µÐŸ¿€0J€ÉËË‚vÃ57 B
+¡øü+…°¢…â®
+ ©-þnŒ"áÝ)d0ïºÓ$d' uÎZ´ÑÍ C ™vΧ‰'aPÔÁû@þܯ èEðý ±x»ÓÚÃbAÀ_òÀèiþ&QMLÿØp
+ …BeeåÌ%
+ •úeÇ“µñÞ´ ž‚rÚUΟ۠–pÅ0&D2~çé¡A¡ÿñQ—åB}^ÈÔ;Ûua¨»õï²Z½³„Ò2
+‚º­hŒ÷®Ä˜@¤PC
+Ëz^DâìA‡B¸(B†…µRÏùÌc½ëÿêSòB¨ $ÜòÙ°IŠŸ'c_Ã¥\‹dm¿Rcóž(1úªdcÑj™ûÕe±z¦EíÄÛÍ%³ 8’pèÚsîËsH›­:™©'iìC
+é·Éñ^¦´Ç=®Š¶.Ò…ŽŒk4&Çõ¦”ÉÀÓ¼{wZÇEÔëš|Á{\ëØ—fç-]”áQÈYyÔù"ecÔ'¤9’y–ÎåÇ•_¥‡¦ÁÍb€V&T‹ÄY°9ÊÎ=[i>xØ¿}rQÀ(1YvôC~gü0X¼>jCkâÈy…”wJétGü¤·ýÓGF¬›æÆÕ\é˜\ì+´ûª‚B/pµ~â/ÔâÕœ¯­yö{µ0‹ýÉLºÚœÏõå|
+ë]ËgÕŒyÕH µùz:äj¨5¢=:±Z{ýy¿†b·æå«Ÿ…ÅÒDÆ3òGÏǼÎâ5¾?”xA4ž‰aë_„m3 ×ÚkõØXE5m¡hò3¹om–éi×lp#LKôj¡ç„ÆFE¡CRU¤LȹDš>¥Üo;Â1€í[×2DŸtñfæGª1SìÙœ¡A§@Oöø$3­"ï„âćª`„AJ IíØu¢\{"2OáaW B‘œÌå)Ï0Á~ZåiÂñúXþ̈Á Xˆ°æ«ãD®T¬b³ØE+" ¾;{t. &zýSôÚþ!áX‘L£C´À±å>u’0Ôº}ä^ÿB()%á°\Ð'Q‡Ä V†PË“tSÑ ‡=±A§ ¨/l£¬q4"ê)oìýÙF«+,-D9Ç;JŽ8ã3*ÊéÙot–»‹.UQ>äuì"ÕéÖмt¡þêÏò¾ço¡ 9Ú}9#"ªz¤û—–æîzlмòB…Ó„ÁV $+X0 }‡8&‚“?x¦2þ³üsD]“éBá{w¹:ÓŠ—'øâ2X‡îñ,}°-( Q¸–Ý;Ò‡+6Sæ6ÞʸøôE"KA‡qöøxêŸ,º4
+…Ixãòª]†`Õ3³$éôx–pCœ^æ6–æ̆2çãðÁ‡ëØ.™›¢«ú®Ð:xÓmg·lÙ]””­©çïfÕo+I¿|SÅËUrÌs°»“‹C'z?ÏÚRÛsû;ŸLà"å2/”î®?Þ O¶®§õñnbP„Ïͪ/^6G–†ŸÿAÿnÝfä׬œû‚ní£­rÃÙE™(v´Ð‹î$ÇŠÞ¸opß jl’gæVÓxk4J?®$Ÿ§q¥£}ùäÛ|½×;Ëkß3„-/kŸ
+ Ò®»E C;›µÇgH½(ié/'M˜žh°FŸ ¹|o%Ç[Û Ž®mëÛËçàþú–€næã¼û÷G#wøy>)Ñœ\¬„-ñIm."(™%©#–\xÌ• ™|YíšÌƒäP{·b%˜\ˆ~ÔoóŠÞÕ>=´(kW³UÛ¿px§y¥2Ñ[éIe½i Íãê%UüEw§ý§¹{›õ–í‡Î[µòJ•[M1ÏÚ÷7nEgÝ6+oyuÒoä¦ó‘L0=Ú³(C|^ß:ÿÕ‡9»Ú€Ë^ÌÒãÑ>ˆ3 Çå‹È½½÷Õ¼ùø•„I_/hÎÒ·&Äss'±~û1·²Œf„r7l²™[F÷œv-ñȲndÇÍ0Ž5ɸå´Ù
+}XÏ?SÜ*RsðR®ŠYžoRˆn:s1‰¦Ã!»”yH¾g«]˜t_(錘ҶÔñI;/àü~ óŽa·­-{¹ƒ\ ϦÑÍlsÌïàðÌT§ÐÜÛ¹ûä½è¸‚%M§ÐðÙ Æ SuµÅ•Z¦ãuNb1O=i:¹£N†÷G½½|2$RêǤ€]²©ˆbÁ»ží42\ë÷Wurt²­fpÄ45Êx5vzLeÔêºçÅ/áod*Ñ`¤±òãímAÝ0Ÿ-Šºµõ·J^ïÉN/š;qO%BäiÓ´¿Cù`Ø1]MT‡î‡q ZHØ™å–o¥V““8±˜DØØð© °?v0 ´ûŒº­ìaFþŸº÷¤‹Q]Ü.:ÙÒm¿ íóÙJ:i?ÝiWáò`¦¦k ˆI
+Xn½‡Ì#Í;QòMÙ–¾T¯õì}ýh,Ÿ·oSË™0»xóuçаµ¡}3g]zÎê/Œ¬ÑÅ~Õè•~lÞ+ækŠ–üx{1Ý‚z"X¬ÍŠ7ûý+Ra«°Ë6bE_0­6çkÄúùTU¾t¯ûÐj1Ynšž{u@gÓ åºU2ýˆ†5ùÖû«pßAV¡«ËC`{=©Á»:¥ƒìåÍD¶%¬h%ƒTÛ/•=ì}´7TË62ÁÜ•t¯Îm_RÄeëŸ`(À%$*ÇþPWmqœ5ö³1ŸíÊ”!û‚Bý7  ‡Í§'aU¥eÃqõ拧šÔÞ±AÎqšÝE¾â;únJüÃ}üÚðõ$‰Óo+}Æ~
+þòÓ¯ ã›eì)wYg-(§Î6g3kšäù._KLTZ7ˆRì.Š5¸£a*Š2Ëu×ãIVRÆJ:]i“t°<V*mé“od®rí+?©€5ÿ¹MõJŒ“´ó싾4r~ö‡\”^ɨsýW¹¸lšÁ-yÁªmÙ»Q6¶¦‹) AÝ+osJÜÆûCÊ õŽGËÞÆyJ*øöxëú­É¹a>ú ¸ÛàDž: …dQLbˆFß-;ß(£¾ïœµ{SB̘Á‚Å^z ®\Ù®#ÑÄA{­Ð-S µÉz'eæW¾ƒõèÐÞ¸‹láüʺ 
+endstream
+endobj
+2694 0 obj <<
+/Type /FontDescriptor
+/FontName /HTWIVK+CMITT10
+/Flags 4
+/FontBBox [11 -233 669 696]
+/Ascent 611
+/CapHeight 611
+/Descent -222
+/ItalicAngle -14
+/StemV 69
+/XHeight 431
+/CharSet (/a/c/d/e/f/h/hyphen/i/j/l/n/o/p/r/s/t/u)
+/FontFile 2693 0 R
+>> endobj
+2695 0 obj <<
+/Length1 1421
+/Length2 6043
+/Length3 0
+/Length 7004
+/Filter /FlateDecode
+>>
+stream
+xÚwTÓmß?‚ !’")S›f£Dº;¤ArŒØÆ6b#¤¥»”TéPR@”I ¥›wÆý<Ïýüÿç¼ïÙ9Ûu}óú\ßÏçwöã½vÛTD†‚À5QHœH( P30Ð@ „((NÍËk†À¹Ãÿ¶SóZÀ1X
+)ûj8G´©ƒqÄ@ ëå
+# P{#`
+ ÇRóª¡Ðx ÂÙGìó÷À
+éŽÿwø¯‹©kjih
+ýü/§ª*Êà'"!—@@IÀMâ"àŸuþu£ÿe½ Fü9ÝTÔA:¡
+öS“âRÒ
+¤í×nº,n®Û]ãOé¼éâ˜âúB8àb@O1«f`
+
+—c`ó"¹Éšú“÷°]™í3Ÿ¸Üt#Ãõð“ã]#sÇ^zé:6¯{Ãø… ’NË¿4ð>‹÷vŠ mý«:aQCˆ%G`-À)ôa/{îÔ.ø¸¥¸L†K›™bÉÔ­°Ö + ZoDF¥ù%±†Ï}Š­wý’§·ÚÛUù&=«b‘ñŒq„¹º)ÿ¬¢‡ ±—õÐÌš85‚Çü®•ï¼~Ÿª8 ‚Ðæ!õuîý8”,€;ïÑZGLX<«hkôõŠ ÝQ;WËI`$e†O·ƒY^õ¢ÚH$¨½Ë‚ã× 'ë¤Y
+Ò•ôP˜H4N´2÷ûµ =di]d¼Å0ŽðZzm²h¤Lç Âô‘ÿm³qèjÒý¸6•¹í–üX±Žñ¯ÛÊ‚)Eo=úœ³¾-áÌÁ¾•£p‰Û¦Ýû r†r¸ü]•Ó¢hö°7dðBã¦åuî¯l¤‹¹Ù/æÀ›«¨;šX£D°”"Þ ˜øf‹OœáÓŠ1mÅõ€ï”s{¬S/µ}­¯¹Þ© u.»DÑ‚´·äè>û;¶»Ä—Bî
+<÷±Ý€Úð]S¾×Z‘ÜÄï;S3e¸°™6…?ä#¿Àˆ>]sš°€&¨{8Ü% «[+H“­¹.‡x¸rU )Á?-1Õ!ÚtkHà^_f¶j„é½Y¬Äëû÷Ý
+„íã IYß ƒ-”`šÁpIUŠ…5&rÆ©£ÞáCІÐÈ$ÃØ9º/– µâhTŽúQΓh²v_ŧwÚu‡6Üvf»Ï]³LúcÅ„ŽhYÖ
+QkN-òß]õŽïñ¸5»ïÎð:l{ðØÑgÞZé-XºâÖ¼Ë>uaöú6ÈïM0;3² úÞÛ<ÍI?ˆÙ³¡6'ŠˆO_ *ü¢õG×ù¢:;©¬ro- ”Ìî}k˜UT
+fš\¬7+xßúfâ“56/Ky5Þ²A-¶IݺÂÅùœ•ôµùR@XA$nyÒêahëõ›A›ž¸°9§Ã€NÆå‘ê™ó¦&cV©ø+Œò9Øzq×T#û¶ùÐVzÞ΋÷Ís[ÃçüÇãÅ
+Ê«©y f—€Ã¼åЯÀ>û¹°H*Æ0Æ\°÷Q/ù® 7Þ†]ê&[#`Ö#ösÊ J”è‹ 9ÎÚ`Õž.øÑÑÕ¾í‹d#×+ô «ËÔÔÛŠÇ/ÍP#
+E‚œLÍ/ñEAn ™(x2͇9Á%AµA¹RÆâw$dYs›8úå­µFü@ûgP ¶j2i~ŒÁõýh\8,((tú±áz„¸žß•Ü:SØàz…É|êÿXåb/ø\[ïC¿íö{ëh¦vƒõB aÁ†îo©
+!î~7px ajÈ)£&ˆ1ý“Žà´›©#‹Ä˜
+ÑS–rcüº§`ìóÐèô&‹ÔqÔ ÙÔwÂÍXôo+%6ô \1T«\65Ø}‹ØxK;©˜z‰¡÷õ^ÔÒÅ¥‚ï\oXv媯ɬÄòlŽùoæ]kÒŒ™Ši>e_ÔO–s¸K 3NÓÕáilMë²îçÏÊâaâ¹Â´W¨kÚè4AOvK8í‰tݧ+ Ã±@
+¸éù?Ø,²½c £¢gÞJ°®yk”Zã>ýú ^s»Ìž ¥ÌFà9 „~º™Æ ï?SùNêRŠÁÒ„?‹r$×}•|êÛÖ2¤¥á2η¢t94PÈ4WÉᘚ» |+öZÊVY?l–ng‚£ùBGè¨ú‹]ðùž¹\„ˆÆûRx2ê©äÓt‡ÔbUSÇñ3ñ”vÅ'_ô|=%ºŠç^:àJ¹*²WÞøX¾ã),k$*Wµ¦ˆnˆÛÏaêŠeóù¹´Ëá+“·‡¦ëÆåªöÞ÷½{àa™³*ò£Á`^e˜€uÄBòâ>œta›•™’±mb¤éy šQatFI/ž¤»‹q±Õr„œÛ_•)ÊjâáŸÙì·7—`ªò̪ßÙXØR#¿þäÌ»#¶yÇõ”$^)#ÿpjP…k¬iYJ´ +Ûn×Ç!§-^þ¬Vɽ£¾Ê̸xJr»xoûœ²ðãštï½»X_"D>"5yêÄíHlÉo–bu$•=\ÀvÿU/Ù—b-^†hôpÛËõÞ&ƒ²c©‡È“<PÓ u©k“òZ©1Ÿ&•Ã¯¥5.ªSÝ‘»x÷ÁfýÙö<W¾ýZµ‚³Ú÷‡‰õÁÓJ+ëïäâì’Û0Ä>íäªh1Ü1M×ÖŠ´Ú£›ZÎ÷Z2^rÈÒ¨*ÜâÙ¹ð£o•'[°I:qç°ßC·s-”Š^.·2x)hÔ²G´ ¸§u
+ÔȘ¦")šQ-6Çû"ªc,{^Lj®z’RA?þì\dxÎo7;a›3…÷ôøvª”'ú¾X¯ñpWÎogǬE2„>¢3ÿÅýRÇãôsínësÝ°9ßç:.
+}¡¥QÅvIv€YRg
+îˆóo³º=^`ñ¬‡•03²æáçýì^—!N0èG”žD=³fˆ=‰ÆAç6>#’»&ÉÅ[ZÚH®Yv°‘Évqúk-û92£|þÊìK§^þ©#ô°úGíëâ|ä"è½ÀêhȶÄ5/-ãÕ”tJþuuy¹:×êî¦ÃÙ:KâXf®‡³G*õÎZɯ Mûb ½âãÇ­ï0Œ¢Ó 7ߪݳWS-˜]©fV˜Æ$Œ8¦m2ç¸{Vð‹ÛMwdÂ9rõVR€u\_”JGÑ ´½4öñ›—˜/38Þ4=ãVЛ>SÒ8XÖãÈÎæ«ÚŠ.ÄØòˆSñؼ‹ó@K´“¬²6PîJÞ HêX€<ÚS¡©H6—éíëA%¢±9h5ŠwÝÝJ!ÊHc¡­!9“Ä8d^R´8þuDK؇ƀ«OWôVßëY˜…Þx"Ã>——ŠÖm÷ÈÍaÑ€2Ò$çw•w)èì¬F—êö9~™b%`â»1“´š@ÖíK%5":éRvƒ²U]›m-ÿ°ŸÚø¼…E·øâBDóFp±¬çy–Þ~¼Þtý©¦œ¼õYþ›ðãÀ.ÿÍ'M³Tã LÛfb˜Ž“îª •nÈZ[_aýÑ¢{9¯;a˜Ä~NV¿­f(©gÛ8½¹¬¤q㇠rt/õúÚ¼Ûéüí$eÓ‚C]³mmÛóÌÂ)£ÞæJêòAƒivEÙ'EßRŸ~O*ÿ4³ªõ¦áy29IS–ÏŠŽÁî<>–$K†ER̀˿º©ãF¾‚£4{/9)y"Ž–iXÆmà*âá
+…<ä 5'¿åõB>k”ÐU9ÚìóZïÞ%ÈÐß4Å ù"jy¢Ýv_)/P6”dÄ‚ ‚¢^¤]a¾1P ÷?Ê؆T}ºšIs§)3RLˆò=¶ÖntU`Öóͽf*Ž*Í(Ÿ´PÁ·¶¸µ‡<v’ö}‰ÃrÂY2ý‰Pzըѭ¥•€!Ö¶4óx{:a_‡¸çOÌÉŸÞïœ} mDéª:¹ £®öyIüi<I"§Í½m¼zʇŽ –%7’ ±à³4Ç9ºŠ.ìîÅ>ÕÍ5C_—èWQæ[Æ+?ûÊòi,DŒ‚"œ´3 %¶{7ÂNãK“ºµ#4Ä"x³qCûµÃ¾±ü6+ÈkÔjv®î£Û[©t˜ö0Mû^M(ÌÍ}sÉo2*ßwuÞ—Fa[$Ç;êü±Ökæ€jë–ohæøvÕk鋉Yþrý¬´KçØGçN1Ã
+b5t| M³
+ÉÓ}ƒv;³¨ÌÀ¿2¼«¸Ž”ŒñÔ®sáoòŠæSî>§Éð©†êÓŸÛ®7;ÏÿØÏÀ@šsÆ¡Èqs¼¸BKèNç`¾j\ÍlLÇšB3¥ ßP°ÙÍ'2w#ndŒÎõv¸§¾á¾ÜÈ]Ûó¬ÙE÷¨©äyçC~×ø3È’ ‹‚?.ŽC:š dìº7mT׿ÂÊ[´ú”÷FSöp rß×d ÝL)ëúXwÀp—€’
+í/žzR+'£×¸›|4À×Åòž¢·´hÿ®~‹¨°~Zäí¤©£ÚE’›žp³¬"–RyH1 «mš­Æ™Y9FpŽ~—5òåñMòýÌðãÞ¾U3[Aù ³Œž³Ã7`ݵà Ô6¡Ä2ôûÐ B¶Â²Mhó|º^][Çñ„ÙyŸÏ°ž‘fåí.!ҘɵMýd>YKë˜î¶ÌDÀ‚óã¢}˜b\t$©Þ…lZå#‰·¶ßL ee²üå|~µd–Ò\iF`qÜÂ;r4‰Šk
+ÊXQŒ‘¦]èî È 2J¢~ò¨ÏÊGê•ØõÁy·Ì2~8ëŒî“v-šæ¹ä«};Ïó8;¨.è³UÞîÍ¥s"&üŠÅ‚ÇT£e_úÅ¥¢\ÚV6ZýuD¥¼ž;ß.Ü›püñ(Ýظ¯q•ÿøžd²kj}ièLX³Ál*Š‹RJKÐQ镉¦Aí\WÐéÛ!ç…{kèN§ÉYR$Ù)I»T/ˆV^Ô’øU¯{ÑFŸßìIU¯ÚÙÈÓ¥ü[Ô€ôê5Ëõ9êá„C˽:-ÒûÂG:fÏy"ãO‡ñÙ"¿%ŸÓNC#Z–Ï, .yv¬î|ghvM˶¼ 7*Zå¹ÑCyM]¶Œ$–$œW€ô3˜u!ÛÀ7ù¤¿ïºƒ~ú¡ç £à¡läpCÜî¦/ÿ—VI4Måm™6ANÑóÞR\yØAˆüν:;}ãà†à~£Þ×ÔwBMÊŠpQ‘IÔã±û+§jl•ltçÓô¹ÐoôŽØ²™]æñîB¥©gN:GÌRžâƒÖ
+VÀÜQ?«"1+‚C»•„‚J—ýÐû6Á|%=|‘gËãÇž¢•±û\ÓoŠ#¯t¯÷¹§XøJì˜å>¾¸Ë«!°S@L cõò(Ù„·¦ÏaW>þ·E ÞÅ^VcWdó½B4¼­ô¾`èç·Î;)b·'’!”ßÂ(ŠRæœÌÒ¿W5¨Å9†þŠPÉOÛ¼àÕØŸ3ªL*9†Úá(ï.[cœHC (•!¾Ûc»Zœ×.ï­V×r½Eµ‡JXq‹­‘Ë1—?ºDÎ9 ÕqYb„EÑè†Y8'V/ضN»32·ˆQUÏÓôQJ^3¾±YŠ'‰Õ΂y)ÃñìÃ=TL*<£Õgé-¹$)løISÃ;ö1š–2†ƒÁ3Bœ­µ"¬\¬øšêÏlU͵°9æcª”¢
+&GÝÍu¿§ê¤/ždÔ¶ryŸM‘é¼™&ëR¸cÊ)z¼×!Âr%À5ê~*)Y[hŸÔzR¯oA€ÛS:k¦+÷<ç ä¸—°£OÞ8•Û¯T Z¹J…(T:í’4g¾Bs²ÞŠWœœ°RÁ—ØR«ON[Â^X¿¦å9#mŠL³ú4–ôš9ZöåuŸ›£ÅÃÿÖ’L
+endstream
+endobj
+2696 0 obj <<
+/Type /FontDescriptor
+/FontName /DFNGEF+CMMI10
+/Flags 4
+/FontBBox [-32 -250 1048 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 72
+/XHeight 431
+/CharSet (/epsilon)
+/FontFile 2695 0 R
+>> endobj
+2697 0 obj <<
+/Length1 2853
+/Length2 24581
+/Length3 0
+/Length 26168
+/Filter /FlateDecode
+>>
+stream
+xÚŒ÷P]Y׊"Á%wÁÝÝÝ!Hðƒw ¸»;A‚»»ÜÝ!¸Û=éþß«º·¨‚=æš2¦­½!'VT¡2¶1ŠÛX;Ò1Ñ3rDä”™ŒŒ,ôŒŒÌðääªæŽ–ÀÄðäê@{skî?DìŽ ™¨#HOÎÆ íd `b0±s3qp32˜¹þ§hcÏ 5p67ÈѤm¬ðä"6¶nöæ¦fŽ 0ÿ{PQ˜¸¸8hÿ2YíÍ ¬rŽf@+PD#K€Š‘9ÐÑí?.¨xÍm¹\\\è ¬èmìMù©i.æŽf
+øwfôðä
+17
+híè
+4V4w42û{†þ×{Ksk ¢ƒù¯Ë@jØÿ9-œÑ'Ð…â
+ª­¥ÓÓð«¤v¿{ú 9þºÒþDæ_BG ±¡åâ²°þ>ø?³ËþÏÉõ¹þ‘þW™é×üÑD&P¥~3d9
+îz>Ûyªû~‚lo—&ϲsâDVÌA»sé‘p­î-Y šÝQÚ­`—Ax*ùA®¦ã[8Mžm˜>ƒMíHG
+áýi¬9¢üå¾y×FÞ|¢L$ÚÄe:ú}æÔ
+så¯ÖõÝßGÚ˜¶³â”x}h۱ߋëÑõìI0*šõ¾¢9~gù$Øo3^i¹Qï4±HÄ_äúQý
+˜FÒ4;òièôx¬±[ꣻ Jlº¬ÚêôÒ(èÀ7uaz/f¦º¼ÄJUâ8
+Ñ¡”BG¡]tŽç|‚2äõð;~ÀeÚÌcdÔâ„êÁÿÉ–åyáUV{&߶>ýnÎÒõ£ÿ«?»ü«a{âÙYŽ‹˜~ZUvªXgHöj$¥O°vÚ¿„ál½ “^´ØH6f“mþ¼Ÿ,ŸUJ¢{g®|0TÇÏÍâž+—þ§z™Zs[®ñöñWºÑýZßaÿÀ®ãýÍ›ÒRa]Œõû³2—`áÁˆ UŽ€ì6eŸÌ…d ¡¯·[3Ýp†¤'ªÂÎÄVõ‘o5Tù¶F;
+ž\hK¤DÉ)óäzex¿x.|œÍïÆ©ôÄ ¹®÷a®jU¸£CLCY‰ OÛ]‚$Õk¬W?ÁÆSQ½Ë!u_ëžû1ºE<<¹EæaY¦SÈÚÓ
+ }1 mXUsªYÄÿž:Ý\;y#L
+ÓʈÎ?v, È+¦L[•Í§AÍ°ØtO| Šlà+wЩZE¿æ ,åÓéÐ'[V;„›Ø}bÏüá*‘­dÝ_Š—Š³m^A>—A<7 /Ë †õ];#åÝÕVþgjâ0“À~°Fûï¾Â‚mñÎP¢TE&œ+£)²ˆeÐqGùnýeBYúm=ÔBO•ˆô˜´c E·tûwxR_õ‰î‰Ž£™YɼØ˯ ÅCÈâs¦.$âlq‘.ç*Ádž¯¾6J¼c{c‰“úÞu¼é„LŒÅž°É¯¼ÍV§5õ÷ói«ƒfg«Yke>°µµ••©ƒ8ú— G˜z#YPÚñm—œ®Š¼¬L3—|Žãw’`‹o‘xØ“¼ìeœ˜XSÔDÀ ÌS0k$˪&§¼nÜ° g_¼ÉuÖìN}tššvYX‰µSõn¥šr*O«+ž0úv¾â2®”^ÈIßËej2~‰tö`_ÃŽ›Õ¹ë@ØgÚ ¦°àðÝBÆ¥«þД¡_–Á>¤î¤Å’’ñ0Ñ–Èh…'$p[¢B•¡ êfV`œRO,g—R$#³|<xøÖ@‹µ®Ý}4 üz× ‹#32GÁLngXáþåVz'™ÖÉÆ[îs¶ûªSLrÖ—iö÷)Íï z»J'_¹ÚÇŠÖzreâ0¨±‡Ço7tÎL3Ë(Š·"Æ{®­¡U\Zcw[ȲŒåuDRóÆnfÇó5˜]‰ö9íˆe”oáÙyo3©3„ ó ~¿z8!fŒéÔ̶q¿';¹Ÿ¸í÷!ï)kŸÄpÙXÝ`þhSÒ½(×{2~ë´Ÿ-lõS‹»– v>Á¶xÀýÖ¯cq@ ŽT€-kͦráBQLw4UY‘!á~WÄuˆÍ7@³M5òÜ"õd&ÿP3ë±­€
+@Nb‚”u6š±Â€2¯-è  ‘;>´ê¬×˜ *ÃÎ+³Z6$g\H‚zÿ ŸrÓ“»Ë`rÝnÙJ®(ÆœÍM¨.D­",Ë°Ë[‚ù“ ­D$C(wí6Ý’§Üc¸Š´iþ”µ8t ìW°$°
+°õ´Ç>¨¿Ã꿼Rʪ@RU|½vöϺ‡ÑÆؾ,âúÛ6‹}hˆuÂ<
+Ó§±ôÀ…½*ÝÎFé š`±³àJ®)8Oºã¨bèUfŽ¢÷i•2¾/ÙîG­ˆ”£é7´õ âñX)ó-SbÁÜWWç™Ïn žBFB-W WÈX7§máä,%ô?î
+4ÍäÓá[$_¿SÍ6|LŠnS÷°¤²4-ïL_4üQ¾BÜ°_2“03¬³ñ|oÀªÄ„U9â (åÚ´SÏo(ÉÄ8è~:Éq0ŽHµFvî„…)ËÝËãžÅ—ÍpÇùñî¬Ä!4?§ÄßY^´í«œ™”¬ù E¬Ð¼)Þ†µ%»øi¸Hq…Ú ^¸#ÅÑ<…!!ì!ç ØÏ«?,s(öjï4wæj(ÆÀ4'vü):r}e
+Y^Ûö7¨ o-Ñ=½Sk8÷è{êhLÆúÝÝŠœý‰6ôª„ݡ¾d]1 8O·ÀBC^¶\Ï}éþ
+÷ÞŽ8J啵À}˜¡_ÐÄ?œ·Æ(µO@Ñ»:¶^öí‚EjSxÚr’‡¢“E²Nøš(
+V§p5¯öÞž½î«"ht5À$ñp‚füñ!Ø=ñ4¸ì´æNÑT&Ž ù¾Q¾XEÃ1ác*ŸðˆÔG<h¦[
+²ùĬ¬MRáÂߥEó#¤wû׊JZ|ÉAÙrÀ°Çðs]N€ß¥ïâ_œ˜­¨Èÿ”X¾hÙÃC‘PAÊ»·˜RyŒ¢6™ÜwOÕ¯ï¯ÈÙ’2T‘¤Hà}…j‰ùùèl Ɖæ›.³¥þ½„¥÷Ò LˆØÍ­e‹û|Š=È8×õ *ÁÏp\îe6dƒÁÄ‹e-!õh¸ ‹D¢8á]Ù¥‰œÃ$Ì4Ñ µg¯§›ÚúÍžÚp]Ÿé9r‹Ñ~bɶӯ
+’¯°ƒ£Dz÷u_yö¿T]|ŽÞ”npÎF®òý¸L
+O¶
+]:æ“nŠ%à–À|kNRp9Ê×dÜÿùSƒ2ýQêõ³3¥O¿=*å¨ÊV—hóÈ‚¥Û6G,f¢æõ¬HuY¯ÕA­n]…„›žD*Ì]íSÁã[G†°i„—õð‘Í3øuÖïLeÖÁz¢ü^¶Ð4»&%¦\fdE½àOåîõçu4JÈÜð°•Bç¹ô5¿Ù–²·;*b1ò[Ó|gîôͧke»û¢uòôøª¦=Êèõ wdø¢1!Œr>ä
+ VÈñâ]I-:õf“AIÞ`“Ùæ8—öt¡Ó+¬Ê6—L NÀ»U™bƒdÛ.¦ƒ±u
+þÚ›®_ñìúýsÝÞHQ%¼¶X °É–HuÕzyšvE»‹n¢©wE¹4k†Ó´>Óâ;ÝëÏëMcj¿¨µü¼
+rÇ¢&a,þ>Ô©ÅÅ¡}iDšÒÝàöÆfXÔET¾ëùì2vç*\UÍw!¤KØ岉¯¬c…?÷RÁÆ)oŽo»ï?‹c«KÈÎÒÒìa:`|“xÉ[×eh(¶«é~3xnÖûöÛý½á7÷
+Ô$a µ‹×3-B°–|ƒÆ„øUÅ-‚&B¸2°Ö½kú挥å‡|ݼãÉË‹æ›~$–¸·^ªkg¸?¤Z†çWÊ1µý_$ߪ͢°K!è%ì-ßð?qªë=B òÏp½—bôÂœªÕ!ñ˜Ç€=eQ[tï;tÚO3YÈ ¼V\+¢‹
+æ|ë÷¤–ŸöàB]~fŠ:Œa7ͽnlAšßX±ŒlcןÖâ`ƒD×(/)Á¹ERæ©4ñb·äa uáîàèç•Û#;S£‚šÏícR2cÕRØ%Är9{¦‚ÀÜÇ=«]m\?û$¦³\IX†it¼ˆíótÿÖzر͂i²/UhÏþ%£¼c²ügDÚ¹‹V†Èî¢&p<^}5** >é)U) F{y•W­ó7þ¿Å%#šòõïp'òÍËÂ*l\AwþÕàá%$ݳ=iÕ¦ûª-+Ûº†Å½°ÐKTUïÉ
+—wT~õ¾‚aÑ-K`ÈÒõ×nm‚29Öl´íéYËîÓ
+¼9¹Æá0NmŸ,°¹½t££Ò®9ÙÊ»÷‡³M´¼]¥¼i.ÆE ˜¡·é#¥Ík‘\.àOå°uÔv‘û’ü½wØ;’ÚßdE
+Ïæ»kßlÃ]Qùøõ::á৥ú[Ô±Øo››í{•o•^sôMúG)É¿/ahÖD§
+ÙØÃ
+Üp ^!â§OwXMžO­¥ j¶ôSrÞ¯iÈjÏOª_I†¤_ŒÈ°Wé
+EbþT£›€£öȨ™®¨})½!Zì|%Sc¢Rv§Ë·0îb¼Ç ïèb¤¤¬À×Ð1ߦ˜¥¼Wž:ūד¦éù)Ö’¦ÎØGË¢y"ª¯^ˆl¯
+fcV'ã6·ì¬Q_ÖRÎÚêÖÁït²Ê×¾Yg[2T±‘ôg?ÆG¯vÔBÞ~‚—æ&ì8<jø,)–¿W¤ª
+!cêy„5ÉDj°ÑÖPWûTæç19Á#B9. ˆ­lƒZøèðòÙûP¤éË ¸á.”ZE»ÝNÇ!¨÷Ë{&”Èç³CODlía4¤Rž^ÁÝ’®ß½»3åB=ÉègêH퀥76²q¹ÊË³Ò ³ËTþ¢k§߇î#"7›GJB=|n(f4‰ü5eö²§Fx­ùÕ‚Ïuªó~yXÒÒÏùH÷Îö‡Ýú躡ó¼ã¹\{‰Cð8m«â¾EƒAzžW¡òVê ÑǵÊõлžñ{ûäIéàZ–õe[ÆX2÷H[­ø ÁO_ÃzT>`$Öe8Qxu™2•NÁ³3ü]”ØM.m*Ï,&ü#û‰2x›ñéÂœ{D
+>Úâ:|‰@ñWQ:ß6-ú@úàÌÍŠOOÇA¹%(Ò¶ÚÖÊ–Ã6?Ó“ÃÏÑÁs>wfT$”ÄèçÃIì*”yGKŒœ‘Šq®77i<ï,œÈË^_bÛíhˆ&ÛS0;­§p~`È;°70çÏ1èt=ß3…ô™¤ Ýy eSÍu’2× ‰ ¡®5Ñ­z…)i¼ c~Tý¢Aë®8
+ËÂE~ÈÈ”lvÿ“DçÅ7¿¡ªÃxªU³›­ûãö{¾à h1 ~Yv^|ìjíªüh8­¤²öÁïc®)rFÔÂs†’õËŽ;ß‘p$%‰à· ?9Ûhq·pÞƵúÐ3mìì;Í-?~[J­³V·Ù%#­Fr ;ëÖ‘Iè‘
+”/ÏF/J(¶a&’q“zC¼ràÚr¡Ë˜C‚—œ}§~p³ÊV°$G2z=·ž5ʸ‰”àÃóî"A–8Ï~µyÎs+u³å cÚ>‹äUšOdü=ºp42û(ºÖ\@÷™žÛ1ãóêÓ®ÆŲ¤jô=xp†UÈK€i¶%1¿­Î×³Û Œ ²µ7HT›îIí¸ÒuO\G¡¤øxw†
+ǧŒ‘»(’¡á Üm”2´j˜‡¬Å‡ÂmV”z(wÆÆFó·XÃŒXÇZÍà–Ü;ÐI}üE… z(Tf™ªf3»”xرÆLŒ"×r„»C“>äžð–¸Œã´`¢â_,¢~×|GB|[:EŸµ-mgr‰ÉÛå1ï ŽN×8Òƒ±g¹"ÂWjf©_Œd9¾xò²Oû˜0ª
+Gí¾PWûÊe-LÑßTç¾ãÞº }W¹ ŽéƒÑ€íYÐói!SœÉ•šZ$g•3e˜_õÁ¨iÎð _¶0N-Ã2µÓ"Ï—Š‹hÀ–ü®»œ‚Êz|Þ˜·Ýgd÷{¬ÚéÄÉÂV,åð[ãÒXÙ΄Xµx“q6»@oÌÎ-kö;ëjÓbû[øvÝ]3 Y^ºe¼s<ÿ çä·ñØ6gñ;üÁÂ#<qDÎÕ`méw=Œ}ïW,匲_~l
+»ö„PÕ(èB¯9Ûj0¾¿Ù¾#™¨É’[c–Êa
+{¤§Ž®Ô±ê)!³âï`#h–éà¡"‚MaÕ=r/ãqÉÞ
+ª ª€t}}Å<óî#<ÚX:t[â`7¢³’D]^‰ƒ7ñ%Ž§ CwmB‚ÙÁ‹ƒ9”‹Y¦rÒžõ££Ü}ÒÇ~:ðiÆoI\[è¹^^ÉŽÏÌ1CšÄó^Ûo2Àu¾fçô`…óÐ3ú¼ðÐiÊŸé@b®ûq% ÒŠ2óÔ½×’Z߸҈##EcíõÓì{îýñ$Ò «)g¼ó¦yÐظ³nî¹sÂ+¼QçÈë ¦h‡?ÏË)@ÁÜj½~‚.r–Js4¦‰q¿U=uõúIzXã~ZçÁ\Š§‚CÀzR¾¹%l’hù´k²TÉH
+Åém†Aððö>«…ãǾA7Lûû‹eø›ïŒ«ñ*_ ô…vÌ2Ã%ãŒjBlƽ”?iÚŠžF6¿ª§¢ž¿çEªË˜olß+lE Ì‘XÚ
+ö‚⸾ä¿
+]«AyœâÐÅLÔ@è0·­#³ŽO’ÿÄA Õ[J^5÷…#ÃíܬöÜÄèó½%Á€p¢[Clllú{U|*‚¡ Öíä˜ÊOn
+Q1ñ™àwYì®üJY!P!Δ#Qpûî…5kCxòndþ¸¹iïSùqÚZBR ë:³ez—4I+ub3ašÏù¨gž¶Ù1üFNT5×SjVá„›Ô·LÙù6ÍÌ#ÛûÇ^ýEVì0#~ -{”qÜPg‹–@»Uwñ»Ú£ÆÙ=W
+*§éyæs’µ’œHœïùgÐÛ%²ôjzÉF$шÃÛ¡o¼¿rìµÞ‡#‘—Õä $ošŠ!3ÛéfKœÄ«g}ó¹ÑNj˜¿úš™‚†üËt„Tógï£l_· ý
+us¶Ÿ[?c øR¤”ðE§³ùTûƒ;‹J±|-ôî$º”ij îðc«Á^•à#ƒ6,É9Þ#8ÀOÃÙÃC€|IæîðƒFLðRÛAxöFöÔ„#±K>íp¾Uæ.™å[ÁÔ½KÃ*w3ãžÚÐüJQÔf¤ÁÑfü-`Gž\žWjxz‹UŠÝö'›qî»mºÈ–r{wOÀîµOà]ª{Œ¶Ö¥â2Iç[dáÒÆh­*ÚÄÜ&ìúÊwÞHÝEíB~¤²ò¢rúÁ×.ùJŽÛx÷óA[”›ia„Á_ÖWøF-cCþµ¢w²0Bï¾÷ž]A±®@þ8,/ž¥*/Ä3£dçJjëîz
+çIéĦԗºÍ+øœNhtÙžW¶ÓO­ïã6Óæ䙽 n£åwj¤uI²PKiMž8Á_`ŠØt1•ÆÏ^â* ?)…‡  ™6s`ÞMúG"î¡iáó_”= ·àaúA6þÀÁ ³V“ÝêRÑ{祀l Ÿ„*¥‡êeÊ Ù•jÿ ТŸ°¦á©P´fG>™gqwy`þp‹ÆØ<?Qñ-¼ôd'Õj/‰6R•ˆ²dth€’¢™•’y%£Ødµâ6ÃReŒíB_c ²Ö°uâë›YÁn7Êc¾é­—~½¤Ó¾Gð‰ÏÑìêˆGVe?DqÕ,ìiž<»2æ7ú±`Ì›}õÕ ý£DÕ6{¿Á—àÑyÙU³ûåcá¼¼Gž€o$~‡„T>‰b:®"ÍRù<MþèL1)7áEÑ‹[ÂŒ]ãšîñy!(‚[à®ôÜCH8
+Ì< ü½~ZŠX•z8–
+ÙÒÛ¢x³–Êñ/›¶×jZ•p\)ˆÙ•®òIÀJäý»-üycóºâ>x #®N©ä×/À‚1Zñ;E2H0ðìMnœÚW Æ´ô“‹d.0¢Å¨™
+ÜÑ`úñ>¸™rÔ„ßnÒâ#fx)>4£p*¾Ä d]ïmyUˆð;Ü%=£ÆæGjZ_ÑÌÉû÷uØŸÝ£°©ÌAõ¼ÙæÆ|Uí?'!nš~—g¸ØèVfîÓ!&#o˜î[‰¿ U9ºœ—Z,Ñ8‰ñ¦Í¿æU¢Óø>ªÉiÒ†VÎØ y‹Ú\ì|^¾Ÿð=þrŸ(ð
+lä›ö‡ €’ں׹ǽ²íú0.¶ûîû‹>'ú¥7ˆbœÎ#{* Õ¾…ò{2™È±<"’…#÷ííÕûWÐPã¢mC2ü] ›ò÷FB³Ìœ"¯Ì?åõS÷òÏzWäN¼ù"¥9N/ïò¼ó ˆv‰µEK[æœ0×?“‰­¦¯ ìS›Ò€5d–1ľ®’çûUé hzqqß÷®dà8Ø,ï´Ž¡ÖÚ¸"… û0š’¤àn—ÆèW'Ú «å}æ­ËЈ_¾ )‚v”)wú*>”ÕÏN¿ØpåX q°ûÎo,Yh/ Þ!ðD—iøZñ§·qn–4ò 8{¿Ð §xš¹~ÚY}}9]
+âhJB\W´Þa¦óô„§¦ºÚaÅ‚ ±Ø
+©|*/Í:'öÖ:Û::A‰;Çù”æ ;|1YLíº19”2õ^°ªeæ÷m
+RÂæºæ˜Gßãr9d(ä¨[KÖgâ%¤ö}1ïP1V i{Õ?/꿤^øØì:SP-R’8šÇQ'êßæÁÄ»ÑÇKÍÚø5¥§)ŽTÞ׬?ô*)Èã(=ßìR:´ ä,x®Ò1¢'êaÄlábùžT(«V…®\Wâo
+Ù!:P+ÌR
+ 義¨înDýàSðÂðbÑ7;äi¥ØÖoKhBV‘åž²UÈ&£¼X¥¥ýœ¢v‰p(7_:Ê!Ó=ûVäÈÝÉB¿¬Ƈ·EŒîµcZÊ„rau$ÄÈ®nP ÷s¡ÿWÌÍ>ð¾¹[! ÒÄy€×O¡‘ÌÀð¤Xw÷ë‹ŸíW|>'KSŦ
+¶Î*ÁH¬E|ñ«ƒµ¦•æ5D6”m!,Ô}BÔP^ñ²§Ëjxkvá«v¡›fnÇÆÂÈi$åá®~çvÐì(W¡+³ N)3Z¢Ú4ÅÆD‹ï…ÄŽ×Ð2æwÖ¾í­UAn¬Ïbá_|¡çB8þ¬gÅOÊx~Eœ¨^ðújT4 P¬¿fp°4{pBí}IÄ0U<n#AZÊ=ú
+ý…ÿ²uìqk =ì¶k¼i9=I±›ÓlެЂN%¾<§tNKŦ;Í$¡ùÎå/\Ų9Ñ󃢲|Žý[É {ûa7ð½Ò%gž9R«%à¡*¡C^—&­JWeÎSm¬Òíâ™Ñ|kW×ÖÕ"†Þ
+,Ságo²¸-ÜÂUY²&â eMª˜«—‹ÁgÑ1bŽuy¡šÉ_gÕY<ÛÉöæJŸP
+”¶ï’ÂGÏd{ŒÍ¡¹Ùïè¸"pƪꌅ5ì[ñŒZ!ä½h¯,õ9sÅÌ*z׎ “×µùU!Œì©/xà\³—èn¬ªÐ¾:ž2 ¿c+Å&¦hÞK”!ÀönÃâ†^fL§3=ßd-_@ÐÅ úâbhütyqo,} ùV¸•áÃ=®¡Ðø1qÌh¿‚ÔöД'º[uQ–<ŠH Í¢æ²ÓàÓ”%úÞÊ)œãOGºÉÕ
+¾Iï,ìÅ0Uˆ¤¢—+YµÝµÄ»Ç¾mYÈP±í»/åà&PÑ1"ue?¿­#*ÛB¤ó_°ú=–(à0 ¤¨{€ó@ÞÛئâ9M¿¼Ïlë‚ õÿ®ΩöŠ•sag”i…
+-àS*4lÍcUdÞ¿>À}kÃhânZg™èd¨±á$ŧ‘žŠ $ùÐyÛ‚a73/eNùQWñgÁLî[1㷬丯ËAúIm0^lÙƒ¥^
+;쨻0/\†›†s*Ðß{^\]L:Í2ýñ;ž!igܨKfÃÇyºÅÓ>••>!IlÚfî*ÏVW½ÃÃ>Ög³è]O·©9ÊL$¢q¼}}†xgÓB2%•º(ÃÁÆ ŽHÑ&œ¯ñFÆac˜i”UÀGÅ“TÇâè~ö홦…#}˜€ì‡·>ªŸè”âó ”1ü Jº¾5YùpËù :©½Õ*£Û.éjNclµ!û¡Υ‹ð,ÍðäNF­«ñð¸è²ÀÙ€U›1´Ù­BY,2ýð%Zú¢'ú‡Íε¹ÎÖl¹ ˜¬ã¼ÎFÿ
+$Aú‚pjé¦ Y@£F¯Ö$/¼_c~R‹«õ /qRÑÜZ“$Â7áÄÄÏßû²Ú`~ÀfW˜ì®ãï¨<Èú"Ý >@yÜ]|ÏE/8“¨øUí¡\~2y GwÖñ´•÷”\×~±óŽ‹O¹~XöéxÆ ·4"fQõíØ}Óìg‘|øx N~žÝö2™ãÙÄE‚°ovßSYRt²*]ŸÎÏJ$½¾et,¢‹õÄ4>†Õ<±H¤Üè +ª6݈٠J *ç÷*@ôx' Ë6ÂØŒ:ƒÓØcz{’¿~²:¾y^FÏnÌOS'<}BûÝ_¥:õ
+%¥¿TeV©A š<­–<:XZë…§Ô›njèt&]ʺ¦ªÛÌÒnFuìΰb†Ëäÿ?>$ÁÛ˜wÖuÓ2¦$ä%ýò\l°šzÜÉ_VJÔ aUÅÒ¶c˜X×)¾QÏiGa5+^:¨uÛ??ÈÄáÅn”Æ$°yæQÙSà¤vÖJGp}o™ Ý9þr- ÀÞÌhƒU ¢ëo§ùdÐ…ÙIæyÿ¿‹µˆT8'¤¾Þר%Á««‰ü}µøóÏ$üV¸I(âW9jÊv:  ¯Ðˆjnø¹Q³Émžª©JV…Ø·#¬gÑÄrÉ(ÿ¾rZ!C=Ncýî—Èî'æ5ƒ^B͉·‰ Ï4Sûo]fŽÖ4C_DÆo§ŒŸAF€Ü LZi·2Fjî¹JÂVª“^½ë‰-®¸¦Ñ%´pNÅm¶”Jɬ G´ _ð±ŠÁX+#l(KÞa+JúLJ}2g»ŽÏ‹©
+Nr')à° ¤n"Ó|#æÑÎNUV ãj§AËíÅôNP×Þ»µ±÷ÙíS WÙT® êy~#Ñ¥ $»µ5c2u@pPþwú5ǤvnÀ‰K½Væ0³ÿ*s€¿¶â
+ù”âÐÕ îìÜ P$l’ïÐoHn“,c):j>h†ÙLÑoD§ojƒ'½
+5LkåÇœ#©ð\ÿ0 kP‹u›Í»ï@y¢lÞ¿{“ÇêÇS©}I*…Bˆ#®í®Š>z9Išó3‹•t„AD€ ô%­ƒ¿s>]M-»ÈêM2’íËÝZ 3¡}ØšÓbKªntÓì²Nh«!þ®^Çñ #MâFáã¼~6š[MîÔ¹û‰ŒHѹšò“LË &Ýý®·–(ë¼PªÿÌ÷¿)û…ÅöMÞJc”XCg»yƒGlú7*¹úP×@fæ¦{º"Gór tø<ßL+7%Ï“O1aþÌDÑ…n6EÜ=Pͤ$H{¶â!Lgðçû w˽y¯mÍËAÝ|¤v” 8ä}º/¦ºýrwðHæÜlE‹2îWNÆ—Îó`Ãô¼ý°âÜÒý$n#:Dˆˆ­è%až«@q–ðn¸T_¸À>ïÄèc¼ «ÄR†Ø“¨ä‹[Ze|³¹Nsx 4,øµ'
+BÇÀxÝ|ˆ¥uQ³™-á†ÐÜW„b[D]Ø™mÜt¬ƒœÇJ'´øÚÏŠåð[‹›5ÖåGe8@âC¢QóšÝœÈ
+FæÜþõK„ôEâ³Z±p蹘Ž{I,—4"Ù ?`¸‡ÐÑ<[+
+Šh¹»ªÛÒú30zøW›èØ0B†»ËY€eO^ö.æ±t¦%ËynÈþÄÌÀ‡à­vXZjPиÂ:*Qk3"/qrÂéW n.0™
+#¹ÎVUddƒtÕ9œÞgŧm@¿mQļ°Ä[—O@šÞAæùµ²€&>0rJÿe¦[á"G}Àžé¨ Q´D92è06]ö4jzù!E‡Ô)ö•
+«ÃŠ
+/­8®ëýôNpÿ„#¬ÏÀv_xPK›§”,ŠV*·.%Ž
+2þdæ0wO ­èT߬aèÀø˜`7…v(-ºá3ƒ²Õ± BHD@}
+¼gÆy²˜t²_øÊBg,2!¤rkˆ¾òq$%nsßX̆M^*G½çá§nzÉ‘M-AzèÖ¬èådqfƒ€9ï·Ûß‚êÜ—ráéL›ê²4—a ÷¦€˜cA`ph_­¶³j®i£ çÏ\qk<€þí#ån³<7áµ—”©hg¿Ô©Ó8PLlI“ÀDAÅí[«Ô@'˜3 :¹É¸öäÓ…Æ6sÞhƒ.ÛËø ÞÙ„®v¼¾öRÜpªj[Wú¬œ Žóè¢\êïr˜JÚ£a8*ÏJÉ)yY”u|=bìYÅô™C^]³ùTþÌ.AÐܹ™„Ø]n9f;-ÛL-béDöqVôƒÊÖe”nñY¿êX¬V•Ö
+›àãå”þù`îbàIæÙÕ¢'Ù¯½xyp]-‚1ºá'å
+ËUkýÆÇ/{ ¿™ŒLv)/»òÛ>É×XG{é²®´‹Ö„¿
+°ÿ™è(U¼FØUJÜÚå
+‘P¡ˆåÅpÞ!u³§2òïuæýL‚Ï„»g"‡ÿR­¼ûc/’sÀV«&‡\!.ƒ¿Ñ¿T]*6<ÍÄ﬽|¬ÞÃ!ÌTáÝ€úåM¢ÝNÍ&ˆ=5íã9ó'÷¼¬ò1=ÊZ€¦KŒ˜¯»ýÇó\ìÌßÈŒ&u‡¦5ÜV}@×¾Ð= œ¢¤JЖѠ»)p¸Ñþ;g1ƒDšVk‚úC´îÎÅâTv”´@÷í‚"Ô
+ž¨qð»x²4¥ÓCÍ]ƒdNíàœ:0+éM¼›‚›íµãÝ``sf…ÃÄ4ü§[²’0óJ"?üB·&ƒ”ýǾëɲ–hÉý?]èÎÎfK!cŽ½^@ø‡Òñê\…x>í eàç–À ¾÷¸/ÿWˆ\ùîŒíÀN;£æ+%Ÿ™Á¨Ûý­M]…w 5q¹ûÚ]“ñ]x:êqüêPjíaئ:O莦a“™ñfá5 ˜Dîýƒ3ÌxðË“˜žwùÝT;í+còî#÷ºÚ¶nÑÂ6Yñ¿F¼ÜU¦`»éoœm66Ag_Â`¥oMx’Ù–D²%Àÿñqw¹
+océÇ
+,ˆ«¢ [›Ù.ÉæxÇeƒ*²NˆŽaT_†¨+µ»Èz¸ŒñâP‰KÈÜhzð“ê߃€“Uª}¾›ÍZb´I)o;~WlÛwB¾²ãëVb(ÊèÆù:a¡?mÿ­t~±&Šd"³e]*Õ×Ö¡lå_Óã’“ #Â.b„”ÒIâ†ÐC…Úd&Å„SÏ;(Û‡{¢J°´rf´¡KáÛ?°xA-Ó-”ìQ{ü‰†AQªê秓TP@ ¢;?Šã_Ž-ÿõrCáä’Ž<¿°©ËRPžX-ðÜEZÖÕ¥‘ V.³ >Ë3ZNåtˆ¿;7ÔO¦QP|g9ú:ˆÏ>+ÑÒ¥þO¡A ñýãظàÂ-^ÍÅwÓ@â¬C2¦r¶ùèë1 o"_j`*1A±o¿JWH;eí?Ðï‰ ™#>à Û˜ ^VAóEÊ)UÉŽÎ¥]ñŽàáéý?Fo¼pôEªÍl—6¦‡.4bЋ@Ôôo”º¶¶ò?¨õ"uf%Ú«á¹ê–7F7Ä9œA;òÍÅÉDumöQ¶^‘oLÜêïKT‹B¨ÿï ÐùS^S·5zî!#+›Ïþ™Q&€À9ì—\A½?¿|ê³gd971}bÇùø’‡òH î÷œÔîúꃟEC6ªê4¶xB¯ö¤Í®k[˜|ƒË“]ÿy]¼œÜ"èvQ¿Kñ™ YYA '6x£Š~l°JØŽFÄÇÌÙ1I#õ2â(|aÞ›wÈ•ÄZ¹ü•éýaZ:”qjœeÕá|P¿càñ•¯‡>I“¿:¿¶Ïq9ÀöÃc0£•N!/¼K¬ÒhçŸÑò–'»’zg~î:[K£pËjJT€ÓþîP#$‚Õȸ°Â©%[“ÒÇÉÏU’Ž"Šr% CæýÇ Âüñwc
+šé>›úçžèC‡‰?¦$¦l¸1%ìÑ’Þçþþ ÉþNîÓi‹~=¼ÜÒŽÃQµ8‘ZÂ?&7%ʼŒÛï°äæÓ‹"pÁé ÝTy< 3ï‹6á¿hêvÒr5NGúPa/64»F?¾kw#-¨ÌcÒÇaêÀ›w¢/uZ²D`X¤näQbŽgìšÄ7.¢7Râ06•eâ8€ŠVÏAZP‰Ï¼}¦ìô.wL?¤“Ñ•wBš¶ùc THz¨û6*%¥²ÆÕ53&¹dáæ Í!_`e59J[è÷®¬y¼²ÏæL"Óná¿!=Ù|˜`]6>ÏgªZúâùŽ\VF7qÔ–Ò5'øk‰JV‚I‰²LÇ‹<\©ó².lbüò>ߌ ìëHèe^’Ä_n¥¨Ó³ú7%ȲY°‚¹>2)1»4„¦øÌ4èÓ£Æݾ@ôjÅ’t~qÉá%‘ÕÖ^Qge{üRïBá34VµX—#Á G˜5¬µô9¢îŽ$ƒ{XJ a©ø-gYݤ.3ðñN»h&ýJ‡‡˜(™Št9Î8ådšÕÕ`F­ÿýavxåÛe?™ßœñB!9ÊÚ(ŸÜú18¶Eï¥GqË)‡æÑþ{îÃ,^Ñ’øÀX“Vèž±x„ŽèM[”ßqröÃU\j>Ìè¦ÔU0ºÌº›Nû%¼ôï×2|HŽˆqòD®Tgw°O+#¤ª‘ýšëÂA½f? 0ÐÔÙÝÎë‹ìéÍ6óð<{1­Ÿû[HìÍ#ч=Cˆw8*·i]á ÈvŒ®+ñïkßÚŠ.Ö%è¥5^Ê óž;óÄ`ëf‹¦.˜…CÚŸêÅ*4¦•èºnkö¬èÄk…ulÌ>#
+4VíW±¶µÜÂ1S¡rlèàÃ!ÑcøÙw³GØ5v,º
+n£p¥‰…+í£¶é<ÚLóî8ÿ…‘ý)nùQšáþþ\w”¿?‰Ó7…§
+?Õ›5§¹’hT‚æØ}j$kž-Sƒø^Ý4Ôx‡g]síH'Ìe¬†zŠêöÝçB¶2¥Z^´*Ê@î´c9J70@ÕhnçËÞaCj mv‹#²rd̓vC>%>ó‡Ìæ'6õ¾åÍ2óCÉŠ‰V‚6vî`9dìc¯™b
+{£M|eb'${d…S‡Î°å¸Äضäñø)d
+OË’|Ju÷Þ¿ìG{¼žþ²Fº7ÝÄ ²Þ¦ÜTsÈ$ЫL,“°t^ƒ£:°êñĪO;$óίÔùäISÏÅp”¸Í%'≙ æ=¹(Y¸CIã˜mqC¬ûÛb—;°¦Á"LƼñâo Žå7_¦˜á´ÙÜL4€¢“kŠË…À-«4]V$ó_í·Ø!sŒW^‚’N»7\×C»ÖŽçLxÛ÷Ë¿lÍìs+yË›hˆ
+gN»šÎyàµÌ"ÜdéÜ$»q%ì®òCäT2W7¤ôGÍf÷'Êe·ç@‰G`¤^Iª{8|.c+(:Ú½¦ÇyÖ,¯‘$ßêÄíðõ“~i8°íÂ3Ž¬bð銈k´£¼±³®X O“»*³Ë²m ã¥(s-g;óŽ·6ÛÇV‚.~Q_HËã¦ækta !ÁÍ¥ÜÙé6rä÷¤w×K’ƒ¼&Ò‡¦Ë#Ùè -ç)T-œ9ñÜõ9¹bQïá’³e´Èr3m•ãB%vñÕB â*RZ|Œs‡PT—¤)ÖÛô1vš@ÓåÁ›9àÝ9:Ieòúö´ÿùŸ~#Ð[é½}t ƒ_÷õÔÔIJALD…ËFQÝøŒš>0ž•(ÀG
+À’A_?O½pžBg¶¼^ZdQ­ö-ÕéÎK©ìøH—2¼ÐÝ'nÏNÌ- ½Bë{ 90Ü,MÜŒwjU¸8ÄüUº¤ˆgï!ÅûUM¶5ðräý5l6I& óþÔÙvGΗQóuŒ¸®ƒ+ÃŒxŠDx9ƼÝõ¤È5ETC¡D|) )DP¦9àHü|³a",ô˜r…f᩹|Í~L£–Òk8‰Êí‚š.œÀdT±ÇeƒCz„´)Š\h‹x…ŽêyÛu­npj†´úólå5"«ôwX ‡bê"o+«ø· 5½Šº¡,üÑöqoMßFÄð>5ãäî̪qšß>“7½L* Êvþâ L\ \<V?û1åì:Ùݧ¶ýiz*­Ê!æ£M2
+º¸÷ˆª»ÄÜaE‡lÖ2ŽJ×Hm0§1 6"m•——G˜®6Þjð+ÊáàÝV”vÍ…Gº°¿ÛݱoÖ¨CI4É“#~´¨+ØòÊ‚™êý !êa43Ï\^™ÓÊÅú ©]¯ûßgG#9º<rhèAXÜxkZ 9ô›ŒŒ_^ù1ñj«0ë©É ¤þ`ý¦9"Ò¦‹F7^õ²‡tØ|Èó„íÔ1€`›ý‰6º_,Ÿòíjòü•ã¡%)ÚqS·`íFN+ñH2H. × |c:»T‡Ð@¼®l\ÛÅàjÉ‚õ§ëujŠøŽ&¢=‘¼¯<jë!ýI‡L&|²í”y´K©Z\sG³`û~ "ƒ|ÿ(}£NhŸÛ°¨Ä—¦óMýe•"F!óK„Ö[ž¬Ú‰ò‘jtÂCo¾#ºp¾w™¼Õ…öô˜Õ…áÁZcf<ëSG*ÙÑ6Xuî¾î@—ï5óå¥M©‚ ×—îí8j’’Ê9Äc™º×Qð–ÞµŸ®³¡LÇÔ'víóa™„¬ð­Üzjí2Ú…s•#Ãó`Ž,C21ºê¤Îw.âÿ1ÙFƷ̶…Ññï K¹r’Å^È¢YÁè?…[ü­V£Q}Yº
+² ȪKZ|ˆß’+‚Æ´–Uá†;kõ'I¢æ¹7Ìl›Ziô®³ŒVV¶D|S&0vê—g7Í…¦Î…¯òáR{/9ä—.Î -†5‚ Vá¶3U"eç±Ý¶N[ôͤ©çq12çA¾{“4S^«ÿ¤´(Ú iµ£óbJù†Úmk²‡àðÞqÓ/ýÊ ÉŠG†O!º:ª|W*RB| úŸ~#
+endstream
+endobj
+2698 0 obj <<
+/Type /FontDescriptor
+/FontName /UBFIJO+CMR10
+/Flags 4
+/FontBBox [-40 -250 1009 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle 0
+/StemV 69
+/XHeight 431
+/CharSet (/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/asterisk/at/b/bracketleft/bracketright/c/colon/comma/d/dieresis/e/eight/emdash/endash/equal/exclam/f/ff/ffi/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/numbersign/o/one/p/parenleft/parenright/period/plus/q/question/quotedblleft/quotedblright/quoteleft/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/v/w/x/y/z/zero)
+/FontFile 2697 0 R
+>> endobj
+2699 0 obj <<
+/Length1 1798
+/Length2 10274
+/Length3 0
+/Length 11416
+/Filter /FlateDecode
+>>
+stream
+xÚ´TØ.ŒS¼¸—PÜ¥¸kqw'@€ Bp(®Š»K¡¸;Å­EŠ»/Т¥ø£3sgæÞÿ_뽕µ’|[¾½¿sö>tÔêZl’VN ×N;§@ZE“‹ÀÉùŠ““ŽN s
+ò³þ‘tAÁ–@@³9>U´:
+vø-‘ã7ÍÓ)ËB¬¤A˜+úïþdÀPåÓ±{qüy³ö'ˆÏ_À ±²þ-ÂÊÍ™Cvq)ÈüòdBÿÇf‚x999ùy
+t`P7ŸÏ¿ÿй¸
+öq>Í€ó÷çï&Oãeåqðú'üûåÐÐU1TdùSñß>))'O€Û+
+ŸL×Ø$º_Ó–œ+ƒÁBþ–¨>›Òí§`+92Y MrVF^ë«FuŒ!3“ºC ¦Ìêýöô_߶ÊtÊ%«+ó²p‹ÐäQßÅ^7#„oŽ¹É}Ù’Yà ßTŒˆ}` +8׫ì=ûxþäS„½ÌFK
+SÕ! ß0G-NùÇt~,/¹©`CÁƒP‰R3²ï÷×èA!>}‘€¥ð€²9YÖuÒœ[—b±N;NÓTÏÔ:ý¾ƒcÿƒÐÈ0)æˆ0©—áˆú%¬i«
+µê*GP샛#V~áÂüö²‹Ž<tKă+Ï5ðÜTUƽ°):çy»\ƒ¤ÃÓðÇ÷¢"ïéÌ[öl­·‰*TLaË"#ÍÑßÝïÕ§mhD¸hÔÌv\W‹Úû‡__Ù¸ÕômYlØ-³ÀPÂ~=&&äŸÜbå:ª—3y2Ül½£çæó1w¶ž³Å‰$¾š¸{ŽFº·9¥T)Ÿ0nWE­8Ç>}Q+®›Q:Eì9•©únIî ~ÿI ³'ç •¥W\#ž(“¡ß°†)õ¡ˆ…,ÒQ£Ÿ_osA¥
+wW&~øiîMØ í¾©þr
+Ž°–é*!+Uš©A…IÊÓä»@Mϼ>êÐ;+êNM ø¤LÿˆŒFæÓ<”À®mÁÝ<b­ª+|û…>² ÚšÝÓ¡°2SX
+Ÿ-/(~M^5Ú/_©P̪֌ÊÇ°QLº9ëPPO–‰ò¦ªöd‰Æ‡öIM;ç™î[;c3µbc³áG/ýu´ÎRj“jïù‰yö¦€ׄ˜¼Ç‘plïe”xÍ ‹ò;•.6A%Õ/ {%AÏ÷mƪÕéßz*¬¾u¥t{æÍHÞ[¤}j›È/¸3°Ze aÊùåceQP ©r£nÆ)Š?¨†!%˜Ð4G:ØÐLƒJS+qöS,x­ð'™ÕdÑxã°ju´moHWÜ»ÛÉ͘à¯gHGi¥33)Ÿ³Œ2¶¨Ä¢Ív,©ßê¾MPsÎÿ4³”6o›ÍûÊ™Û_P%À[a É8ÀpÁ¥˜Á„IVŸ4-ú ".ë» tÁ-ˆ2®¾þÆÀôÙŒg‘ò£Ÿ’A~5K£Õœ˜©åšî[¾A<NYÃAëð=>)Sø'"È FU_9Ë Á}Oâ}`Þ IõÜ€tJPõÈÞ"Ȩ?Šµåh .—L[ ‹Ý@ ƒ21Â_ùö4Uâ=Î}› c‰}÷›°Æl"Êånj3.@Çt¿´Î§øÎ
+3a‹5qJâÌ„e¡)¾3JzÇ»õ‚ëƒtÀ©y¤SÕ¥tMÁJ?¸t@NUcL6X·²ý¥€KYª¦|Fq»¾ñ¤ûü¡ï´…Ò™˜˜“p @
+ŠŽ«‰…°M<ü‹6e¡½è+Š¥ªQg|àBÊ3¡­/\ž×CIgÃÛæñ(ºÝɧô²²¹âM–ÏI°ç~`J/§¥óó×±™-Ò"UWª¸¯£~£üFä[JïÚ=ŽYŧOÝoC±š7JôÀÝ „0†X-Ʀ:Í8Q]•˜…%9qco‰¬¶—¡!DÔR aõà ¼÷T‰Sè2EH4¢µ’Ñþf8÷üsªÏ®¿y#(ì«Æ¾'+èa¡…Ðæ: …ê·9—1Ü@ݘÁms‚P4wGÀWú|cyÌÕšFÕz¶¯GÆ…í/ùr¢_0zÊÕßÎ
+‰T¢ìQ“f#R•ü°)*HlÃ+z¬gê96ʈìØÐÿ¸”#ëÿ¢¦g &@üÜO5÷bN!VæSHRBZdWyF1Uu`ÉÂrÀK?ø¦×]Ýñ‹²ÚøÜÃŽš`´÷½ÐW@"ΡÃêÖ_†ö‘Û£´²èõ}tÉçàªP–ͱʰ7úK9RÓõ,ѱv¸xs½âêÉ90ÛæPtÛ¶ªK.KZû΃²Ÿ3›¾ö#£¢ÇT'ßm `C¹ûñ&…̱ïÝIRV³×
+£Ä 
+)¿¢;95¬{8Úâ¢EÝR‘®ÿÈÌQk}õåŽM|ýE8f.BðJèRÎ..üŠé}rÆè¢
+ƒäÛ’eM1iŠ¶uS¿“0+e)·F´ázÀ¬œ"3ΙZ1œ¾ûÒžƒN]Å`Õè
+`O¨ò×ÜqÖ9ˆ_`Øï'rªX“ù,$ܾ~E‰–¬å!qö“©å<F½9¼ðºÜZ”fI¾—ýË®ù<W
+~y'0ÙrBÇWí¬”¥U‡’¶:)ºWE‰»oØã5M.dÝØä˜91…
+óŠ“ ~Z8ÁÓÈR—3£W¬_eÅÛ¤†9‹ú„M›á §sÎȉ1~npÓëœ.ööÍÔmØÒUPÙª¶f^/ áë%DµÜ«Z2IÍÒäsgó¨bÞQÁYxq}žÂ¤[ð.¾]¤(ešGš}H©ùì³-OÓÀc‹Á
+ŸGn3ð¦]à#Û\ìü·ÐÎ1‰_Œ~G™$w‘»DÚY(Ú*©Y!ꕵAæ?œg"òͽ£}2³"<1#²d$ &ù.›OTÍXì]wP§Ì[uÍîýá
+©ý:ŠDüÓ¿ˆKq¼ìsÌ|M×e£ôæþWfK›K‰…7ŽöÖî¥Ò«Ÿ†ðC°°µ %Þ™â"–„äù›Ë¹›’ƒ4”Ëëù늜»±š‰¬$ö˜4MzmÅ—ŒCÅiŽ< S9Y‘<vżëÏ2›Wž)|uS•’Ça8‚¯?‰%ÐÕ+#Œ¦Öç›eè·Ÿsøû¹þòËÎ8f\öäŠ<îäìÞv]L‹èG¹rCŽÜ½ Þ«q*”ÃòŠ0."–>S„Ëc
+¤_ïvT‰¤#GÚÊíBÍ0F’ìêù2zÆï,]‘W¨\‚W¬(ÕÊyù÷2SóÍu¡ã#Ÿppl%š»úW&|¹ê»­u:œ:kºwj°@ÿw­;[$Ö’ö¨_óñÄFærC7©üš$"Ì&šë¶‘?œëÐï•2!Ó\ÏÔdDÏݲäÓŽÄqï‚ÍÒ?He{»#ý0§0‘>2±dÙœŒn i@fþtÝXµ£BÎÙÚv•?o<6ü€â4Hµ|{îئ‹þµXÛ¨ã¥pqòƒa
+”ÍŠ×.æªÜ£
+D–ÛVsÌHÇnÎþó ÖˆnNr:쑳ÿ³á„kÇ€ñž\ifoÐ@®· ÖÔjÃH<z=ÔܘU‡~aÛÃyZFe§?êÎôVÈ÷ºÔpMà¾:-?;›÷ŸÍ¼(fÔÊ@a&– Ç錊7îŸ4éζÐ[ϧ.P]+v^$ö}çL°~×áðnÒ>.+ƒÙàŒº/ :­9§ÄÝ™9ÒxŽ$Z¸ ¿Oðu4[¯‘‘HÀçE¼£´ÎB³p³ì|+Û¨*Êp½ ×n0£Á×
+œ@RZß—Ò¤¾N?nzÖãÙ:±o_”JC+îh¾þ­×"ÚRÕ¿1ÉF4û-³ˆI¬%+6wi2¡ :Û†–’ªð\—_êÛª$Á"‹ã”~Þ•¡Ê“¢¬}7xáÜ3xŽz5$q…zµ ܘª4©§R—w2 ½1è”>Ú}¡´áòÀŸ7c#³ÞI†¿GûðRbëÅv·gîö·*BíN¹†0&S¥ÝàÛ°Ô‰„,{¹r©+Õ}®Ã_2R œ „ò"§ýn>·¬ïºOÕš±Èͼ¾}
+à9ž4ƒZËnÅe¶Á¿—˜Ìá&»H ÿ%;ÖÕxˆ!¢õíÒ›¦g)âþ>}ý̳ʕ¢
+•Œ4_"\ˆ˜RJÞçyéÈ÷,Ôî6Ew …¿¹×D¨÷ lW”~)åjÛ+d"0•E50¿ŒøòHË Wáðb‹ sFô2eÉ_®Y0ô“EE
+'SøKÈ{¨ŽïبÄÒ€6φIa¬·?Ž2®ºéæ y`”_µôkàv-0!ÄKRó,¾Ù$“ ‚€?äÖ\C•lËNVT”úÀ¯ÿ’W5K¶ Ÿ,N¦.OI WŠ¡´‚º«ÓuÅ÷¡ú{vâ糖ꎎgÏ */×6ò%†û¸‘7k‰Åð±Ør×õ uòŸ-×!ÛµX±š¹Û y ¤rc×颼F›ÈQtŠ!Ã¥ puϬi\I ÙgÊZz cjË8Ú5ñôæ4ÝÂê+REˆ2^Ýß0íà+wyYt@íhw‹‘
+>ÞdÝÕföÝg=~@®˜ÓÜÈ{ñ¢~o¹±P©wÝiKÜ(ùªu–<ðl{ÿ€ñ~É^„̚‹%™%ó­æaC…a…ïw”ú‚„M‹ñ©†e:7qÍÏÆǦ ÖÊì 
+;Ýi®M¤¨ ¦€¡ê¦;¹쪭V2@Ð"ý ïAÝZ‹»¦ŠR-N–¦ÜÙÒY<çYÑ4ÞykÞ‡àI @áíÓ%| øjH…&[\+AŽcË‘[í&RèiV5 oÝŸ¹²bäÁÅßß’ž¡ýR¤Q4Cñõ” ¤áñÖnVcnù™0‡ÿ•ŸEŽ‰¬þ©ËÜéöñ2±9£&ѲsXR)vžs u~»>÷8ýݨ}oeÒÒ
+ÝÇhÚGeKw»u/ãMÚr[0tbãuæöMmåVâ©P1%ßE"…ë\ÓÎ6,¥bvÈC!Eâ­ºAÞ‰Nígµ‰€×†=÷=ðSÄçŽ_Dcƒ­ãâÏ;¿±˜È.N¿mQ& BÍB·G£G¬#HK§÷œmÍr9&Ò#._§FüŒ³%c;0û=eª¿Y\oùkßí¤Ì–ˆ¸ÐŒ]òt…
+óý¨ØÇïzÊû+´t×ecÚr$°¯{‡Ù%ŽCfáÌì×>j
+'z…“8Þ¡ð·Ž>?{axÿ½
+ÝBˆyÑKG㪡œX‰Tvw£Ùú*™Á>B£PýË a”²™ÁºÙ6]‰UÙ¿l’V)ÁW¬¼ G˜S¿Å+G‘1p¿*<• ŒÄmõAã¥åNœÄK)røÆëÅáítnÙs‰ØL¼<'}±À‚ë±›|¾ö&ôÅ8›g‡´¬C6IbÑ þx›`›«¸Ã„‰‘¸´2ÿ•hðº,óÔ…9qçxá:ÆJþ.ïø•êªåbþA˜‚7‚ªÔXçÖÈ/|ÆB%¡$J#“%ÝbY &ï%½[Ü,>˜›MûÝiÝ ˆ0f^Œ·„7±R<’þV%\Uà79µè¡Béëà+Ò¢µÃôg(û®EoôO¨‚ôÐD§ÚœàÀ›ás¼… ì:íÑïæbÌT+] ügI؇)áÍ:ß0É-ôëGÌäMDÉD¼`_ÙnŒ3.è2ÐÒ›uGÅ@<˜ÈælØü ~6Žô‰i¡JFôS˜bà ~¹Rœf:©T–| @Q.Ðq{Cø&.­zš²Á|ðãÙËjs÷~6ÌŹ²†XâPz
+Œô‰¡Gi&0lÀ\%ߺw<mÈfïw¢˜È]–`vžê³9éœÅxT>-¬tœÆ7{½ÃäèKâtw/õ–q]GC¬YY;éÀ®§ó³·(7<k…+Ì‹ôÅÛdP±ÊzéÀÇûeo“Ò~Z]¼úš’É⺹½èÌE¬âÿU]EÏ›º·zï‹•L )¥k-0üõ§›’+_QØ]H
+ð)‚Ôæ#>Ã1ç(–_¬l ˜ˆ+ûÎj)nOýÛÙÅîxÛy0Ü7,{{€”EE·èÍc&uj¬¥ž£üq”(Vâ] •K“&ÝÁ_S«çõQæ‡CªòPX‡£æÇÜŸß•™º…تÊLÅsÜƧ¥mDF­4ïÎàÐû\ô1‰[šÃº‘ß\œØ42­×i»ö4Ô\(Q={eDöŽwi·c<þÞèá&O©T9n:ÕÈYmAîð*D;*´ZO´ëÊO¸ãe‹Æ¶õFEe`;ï¡ÊÖ¦¨ý-˜DztaêºÉ>_¤ !¸Û5
+r»X!ŽIG(”¹íŒ/3ú$'/xí,!½àD&å„®<Þœg|«Á8A棕Mì› »ûóXgÞë´þJ™p›ïuÇbQGÕÁ §ßÙ–ÇJ“Õõl§Ýβ-Ñ/¾¯ÐVDÕÙîs$î‰N®ÇXº–Ðóp–zî*y>Æ]x#®&s#¯ ¾E*ax8ÐÏÊ›£3œdçZW†Ûw.G77":¡=Øoî¹fòù—‰¾€ÈçŠì­•ÔDvÂW <*ƒÅȈwR­‰¦é#†øÚ³@Ñ–Z,g~§:ªÆuŠžä7y-Knѳw@âˆgïÌ1›MÂ'Èö(cÏ(ö¾@B¼ÐüßUæ:™í<†b8iX¡¸úøø[¦ÚØ'4[i8¿ûúÊ'
+…ƒ•ÒCæ{¾ Væ2Wùÿ¤ßâJÂ1æs\ŠvÃ^hœ;æ[Ø‘Õ­X’m%üŠDò+ͽEˆ-HŒ.ÝA—ìV!uÀ“±5¶0ï'õ{ﳋ‹%¿9(¡<W=T“R¶Ê}9Xì3JÝueݯ¢¾×ÒqŠ¸Ï/Þ|ìÂ(¤kQïæ}ï¡”ê…3úkÜçeδKžÐÔ¥+å?2ʈ™tF<_¯"é£ G³¶·öÆx<ïx•
+t¨©ŒÜ8Ns”dDž„þŒž|È6JNÂOŠ#}eeA6 ëxOý!‰ËP²bí}ÉèPáQ¡ÒSš7þαˆ¥5Êïýó’“€º©/훓ñHµ¢·{(ã Þêò4|)B¦ŸZJ ͹Z&©Ž'±™z;°ÈX¿°)RÅóª"¼.oÁx`étá¡&D—ÔšÑëçܶÜ~k jJæ­Zóë†ýÂá_IõD/`à‹£GÐ¼í­ž”õéÈø”-Ï×ÿ°4lâˆïu>²ºðBÂ7][µÛU•£ÒD²z¶E¹!Xºvrå.Ò>Øå—R aQWs—ä–LXdBÍr“ªÍ‹4‡LT¿lÆkK#—|’ðR¼%º‰K/œ<TÇQ0mIò“Ž_- Oùa:šn@™Ñ,˜§C |³C-¤Ýì¼O®Ù°d³Ï!·ˆ3ñ­~]¼Ãœ¼Cß–LêHF<ZðÏ.cÎß8FRÔ¢‘ e8ŠŸËÓ¤êAí¼Nϼ"¸#ð©IÈÄF設븼A¿çíœdÓÒY×r pJÚÃáÛKõäŸf/kù“Õ•|v\çÉŒMþq‘ÿÝ£œ¥¶¼’èHœfŽn®‘/ÆÇðyj=)âü‡z,·:gÇÕÀòÿdµ Ò
+endstream
+endobj
+2700 0 obj <<
+/Type /FontDescriptor
+/FontName /QQEMZJ+CMR12
+/Flags 4
+/FontBBox [-34 -251 988 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle 0
+/StemV 65
+/XHeight 431
+/CharSet (/A/O/V/a/colon/comma/d/e/five/four/g/h/i/n/o/one/period/r/s/seven/slash/t/three/two/u/w/zero)
+/FontFile 2699 0 R
+>> endobj
+2701 0 obj <<
+/Length1 1664
+/Length2 9362
+/Length3 0
+/Length 10424
+/Filter /FlateDecode
+>>
+stream
+xÚ¶PØ-Jpw×Fƒ»wwwk ‘n¤qwîÁIðàîK° ‚KÂàöHfîÌÜûÕ{ÕUt¯-kŸuöÞ§ §ÖÐf“´Xå `(;§0@ZU‹K
+ü\ .
+þ›åoýÿÑþÛªa úëlœÿ*‚m!
+yÞ ðÿ†êÿÜdU  ÈÃù½ŠPËçíÛ9ý} w97ÐFµ¶ÿs„þÓ…gz'¨qýzk
+¸D‡„É—~5’~Ñ7b7‘ZG·ø Ûúóû—¼!{WÌÞ[ö3]ë¼QÍŠ^.ŸRDòeN yôˆö<sF¦ß?(R²ßGÜC>¯Fë6˜ªÊ}ha½_ßéÐï‰;cÕiœ§²A¶Xcÿ¤c‹HÆÿ‡Ñæ'¹¢–Œ„SåÂ}É#k8yŸv|êupKåä²Ö1MªÈ©³|pSùìf#iõ€¹$ Þw­,ˆÂ„]ÖîðÇLÓñ÷ÜO1îß_Á9ÛÕ×v½>^ö–ÕNÌN»è (¦³K’°mW/bænY¾#´³¼á†Ô…ÀÐw™õOÒ)nÔê¾çÀ/†íºùf÷²[ãâ>×ò#VԷ”ªnuÞé<Ùdíámj²_¬üèõ§Ø[,QÏ%6±Bø¸#÷¸mHqÖØÙ¦¦J¤ëÄc¯»›DQxQ Ͻ@§_(0Ê.s¸ Õú£,/emlO¢âb‹Ý‰óæeÖñ°§Øü|ÌÒ5;ðӶɱ¨‚½’ä1eƒ6Ð…»÷òPýI…ûÌV.å|ͽ
+?-ÚKÜ}Ûª¹§ÉLÔ¯•ë6T¬›º"»åÇ™Ž›t÷¢žJS ÆUgRý4C[_ä)…ù~hSŒÉ¶,l`3#µÜH
+zìð¤-à)8¼J‹‡zKª…kìDU›•¾èÄõÌ´¤Ÿª6W®3_â‘D¶D(‘yõÆtÛ,a0šH̱øµn£¿èEiÄ<qdÕÃ×÷„i±›s+_¸ ¨;tü0É‚œ‡ûÝ+{™VžÜ3 ¨Bé ùg¨)¾c¿®D~¾€-‹‰ªÌ12æ”,•ñ“c(Ve=›Ñ¤ó´—™œºÚ¹ÎKÓúÖãÎŒ±ååf!­<ô-ó/ýqÉóò’ÝWǘXÉ%o?v¦—{•éê ¬ ‡mC©øÏMÚ² 1³N?,
+aØûðUYóпűÏ9"[p`U÷žj½\ÉÒñˆn[îQþ ©™ðòÜ@Q÷-L¢K Q9FpÊBzÅÃðL¤óÊeeŠLu?Ä3í\¹2<¨eÓåJØ„À6_½L´…åá>’[4–ú)˜•2"¾\±Žâ¸v@Îñúµß²Bõž‰ÒþézŸæÃHð.sñp˜þNå1™Hì*´ÆåpùÏcç+:óa'™;Ž7ˆ_>̱½{ìƒ{lV·Í•bª‡Ó–¶•doÄPÔçô[Û‘Ÿ{w‘¶‡ÒŒ'U;!…§EâBkß¹Šˆƒ¹ß»¥l¾uÙ«zqµä¯+»–]5Ç<qÄ<´tÚ?£áíÜ“_çF¹O°'8ÅaðI‡„@ [+\ŠÃÝëÆ€;ä:Pÿ“^\= #ÌìÚ^´ÿ£©¿ø†JçU¹ñ^ Wåü¶¤bò[<M®³º;øµP«N½K¸±9ÖæIóðc`ÉØø\¼ÐíK2D“²ÖŠ|Ìe4—Éýêd%>¾ª:D;_8¤;y…šè)iÆ×K³wËMìlE
+"$È$X1‚2JkKFV‹AòsÞDê Çp¡‡ ‡·E7p†ï¿Hîcø µ‘¿ê™É9¯Äˆ–‡S…üüyƒ_–ã8Î~ur·+󎑳œx•WÂ@4xšÇúGçÓª`ÃXÓ.²#ÍÀÜBa§5>ž—o7[ÛSºÉK¸æä =b­Þ-ž»ÂK£—xÀ'hîà íG>)«6¾±AµÏîîªÑæ‘ã®cxo¯X²Déaj³: ò¯æóeåebœècIûU¾G»Á¤¨ä|΢ éûZÞ{½ÛyÒ·txb¾-VKù/¾+’ ²ÆÐv!{¼wÓÛ=ì˳ãÜ¥Lú5%/Õt«¶#è_}Š=_N‰`á•eªdfÒÈ\2.±ujb^Ð^…9¿ñêzc˜B˜â¤©?çÃü
+'%<Ö»´Oûå·OÁ þ醸Að2÷.´Ë!ø‡f™öÂÑQÓýä‰R½ô܇ÕŠ*}‰1ÚÆ=5?í•sÖ÷RËyU)ŽÓökâ2ñ
+Ø˪iˆ8 œ2ô¦¢;f€Šw¬ÞŸúÕ‚>|ÕËòþkµ--)b!dÔmU «Þâ/ÝÒÑœM5ÿ8%r«Å`¼*;[DT»iÒÞä,L?÷â™Ö)ÜÔÝä–ǃŸ UüN¥îzi–¾T³bvó
+s:ljôM¶À[~snUQ}"å :ÿÏ_^²uN,U‹Á¼Ñª‡@qPNAÔ.,;­½ìð"õù=¤š¨‹œÑZ¢?óU·ë:rï”_{ÆsÜ&dÆFþ‘­è©™šËVlÖü½©+UÔÄNãMiuZë™Óa36J 3z´¸q]/ýçÔ¯q41?
+`
+y¶øÚ˜C:ùÚW]œŽ:‚×\ÛïêÇú¸šïT‚æSO(óÙ3ºCš®³¯Ø–{&n—`ÙÈÊç5'Œâˆþ
+–V[ÖðvÜu˜ùÕüBÏwºØøCØé2.c^îÎe9,Žßx(gÄegž)C#IFš^x`õäLŸ¡Í
+‰šBZk0Š'F–§ãT.>}. yZÿî€ñPï˜`œLÛ.X—K¾¥@í,vj´BnåAM|äãKkq
+s¸ãyOŒ[k/W¾Ñ- ;fyBªã0‚Ö=p\b4¨£ë4˱F·I¨5„
+~”†ÝÁÝ‘rôºÖ¥³µÕ¥y¥:{Î"7™r©æ@~Zy{³M
+÷<¥Œ(¤:8û-çø­ Ê ¿Ù¡á.pÏ ®ÜGè–öÍ‹é=çD²†jYe yCY¡t5àC[-#LÐK©•µ×8<£„ Ú÷{¨ò‡¸ÑÌÛa&¹#&aÊ»Œ|‰¥Xlïºðtú¬C^Žß°*ÖqÓÊ¢Ò¬áß×´ ^À!K6‰ Îg¢j‡åŽ
+u'FJkwªöÕw\~
+_ÆÜC@PRÀÏÄ!•W×åu°©éj´ü(C¾k¢± êo­âÙÎÔhÉU+ȼ†å¶«ªªÑjà«wrÍ í ¼Œ? ŸŸû2· ë™Ù¤ÜzDn_qŽb@YÌŠøì±ÿƒÚÅ\<¿ßÚÓ ˜e"Ð!´VHõvDä]ô+Ř陮ö…˜TMö‘¶l˜×z¨èW:‡§5Ýã—œ>Á;2Šœ,ŠL)1 ¼uZPÇ;¯îûá_<‰®?1ª‰2N¼ðzãÏ5{aùÎð]˜‡¨:o?]%‰Î¿ÿ–çn+ÃGtýb´;±hþÞÓ(UV±#æ£Ýæ Eâ?°lãÿ87˜æÞzÏá*ÔâØ´Ñp$c´ñªg×´Ž¬’i ¶|y¾Õ®MÄy¡ö¦|QZ¼¹}C-=„Q–"®ÙFNDdX5ysïÒ¿ M@Çã“­•~y¬õvÙÓPHlÙÑ×ØC 6ö´Os×µ«òÒ…ƒ„N%iší¬NœªzQ÷¨1c”D8ØŒ_š²~â»S¯r¼@ßê ÓT9G°ù"Óȯ6Ñ@XIñþ
+‹¯‹†ÐÌiz­
+ƒž “wÀ8óד¤i†G9P|qÎJ{1«¢µÁñ®,
+Õ!™}µù$üçšË‡ÜDïõ-ï*íg/¬I‡£òm† ÖylûæfHÚ ˜Ok“©Ñ N‡u»¥kÂ1LRu
+-‘ªø`DÚñ:Çlä¢ÏÍbD)µœ|9Ùˆ £Ô¡,NYO¤s•EžA¼cÍg²ze9ûò’„8¾A°<æ‡×ÑÊüñéí}ZTç5ÊËûd«ûì^GíöÜ_E˜'ÑŒN3K7ß–R Ì ÊþÂ*þdò9°ôÉàz¡ù@Ú0 y£èµVó’3QWÁvÃy
+Wì`MµÕû°Ù€‚4p§\d¢¢ûÃ7±#êzÀ 8;ð˜þ‚†4᪚çz^©Ôç…”0±Ú‹D G§LpÙ¨ Žr@ô¢Ås–pïëÚk0j‡¯I@þvb±ºñNÓ¹O óíúL¼-"âÁ‰${«C
+“A‘ª$)º¬ÖLœ;Ñ,C2Ã1ë$E9µÙ?DB@w½e,š\5½lË]2ºå*¿¶ÝVÒ2*%H¼„ ø< z,EImqÆtTÒcû¢Îq~çsŽåÓÔ
+-À¦¸5×)M²²íj6f"?oæÓwŠPï¢;"…RV„šâX¦ÒÆýcMýÅò^Iç&ŽFË;î9™‹' 8óIŸgáW& 蟠îéšÔ9ad½!—Ь‚ùŸžAXþþÎUk ·?§ìm.$Ö*¯„®¯Œ
+GîJS½ÒƒW½T=ð¼o¿>¦zÝÊÎy\*NS..,P)G>¢žDM¦T¡EvŽ…”‚ø0R.TÆ¡_g8Ô ?7âÂ<å|ãö)×åE^åºq ÿþ·2¾ŽÐ*ä› «ÔUÖí»œ=ðíÞ`]µþœÌb,ÚF†E½Õ {â“t_ìÊ•Q$ŠXº™2ÊÅÆ v¾r6®©zù:¬âÝ–ÚŠÕA1ý8MgO쮲YýŸ´a¡Åòà‰\Ü1-ç“9r{†ßTåL`ÆÓ5燴±rOàèÅÐNûF2ÜOžbÛÀs9Ö£ì1Î}p7g³ßãc;úÖ}ö±·ïd»™ Èä2ñÍù®,1ÙÍÌ<ëszš©ÚŠÑx7¯q+¾ Rd.ÊÈÁ/£N>1¹¬ûÖòçê…°KS—e£êº¾]ÉÇbLê2ä^†‡‹ñ5ö¾æ0´ädûû¾,‚)ïÎÄãÅÏÐÏQßn|ƒNnF~0(WÎ…¸icÆó¾ÖFžj»]5«×à™p­ ‘#ÄU½¹u¤ðï6¢²>äXoZÌ2e¹¬ž^ðK—ÜAQMÇb#"ÑO›í£¡…QC¾b$ËÓÅ… „ÉÇN›ËÙ ì86·F»Š·Á˜V_
+Õ‹-i{Þó¥ Ö͆¥ð+ßmNÀ?Ý)ˆ§x:¯
+ö÷¿t-Œë—|a3B¼
+ô±‹=t8N‚ÌÍ`‹ÂH†±´»¤CN×q¯}RÊœT”¥²D>Ì»ã›Â‚[¥&µFFw³|ÌLtPïCÈý—Û‘nеÚ)Á
+­Ÿñ§·Wy•yÌ»q€òtŠB¾ Cæ»ù¥‡™7ÌaÖ]Ëö'k%/}~FEÙñ¥¸.;¥gÃ`²R™¨@œŒô 6ùUÁUC˜œK–3zœû#e”m8£°Ül‰´vfoaÇkt¦O6}Íd¼»:
+_R’¾gjÁ=E—nèõÅÏ7f1åËÄT Á½Š"ßO¥[míj·áÍD‹£³Þ.*ÙZƒ…©½RðèÓïP%Λ¤N£ ùxÞ»ÃM±½®Ò°”ydIÍZ¼}Áæž®ôº¬Îáry?1T#³b;Bí%Å‚"CSw„¯>’[ET^
+Ë„¡Ê™88È»P_£9#KÇí»»…ñspÎ[™ê,õRÇSŽÙÓë í:@AÂc¬}tº„édõÕ #Nm¼°ÂOЭ',¾·²Áá­.ü`€~Ö#ôz>8E­Û‘ôÖò"ïAÞoefÒµÕ®_äÜÚ@ŽCà—›<WVYí¯±É2‘’×Û£œºƒÑ.>V0ThÈÖ*?Î ?cFŽ/sZzX§š÷V݆ÅÔ²u´þf‚Ÿ«@‚¾4E¤o’@“ƒï­+?a(ýî#Þn›åc-Ž-y¿DHÓW¿mšºÓ Uª'ßÊõŒSl`¯ôhNQ3K¿›¬™ƒÇ`²È*žÖ ëcZU¢½²‚›K$ï[
+&$¤½ ÙžŸ¶Ý´êr<‡{Ô]ø±¾(ïiËb#cÞ¿«ÆÐhA½4%¢)vQOÉo,›êQŒOiŽ­ñ©››¯)<öÝšoü«IXUþÍIk)váÜg.
+ÊŒöW„nÔ안P§¾·o0Á&i)qæÉNÚÌ·ý4\¶'zÞCkì1À~µýxUÝ–ÙA΢ˆY+LS÷Ùl½$B†ÐÛ´@R”Ø 7UØèP‚òL%ÛL=5ÆCÛD¶!™Læþië •ÆtDVD+›d³ ÿY‹b¿VG=ËÇKšb¥Tǵu*ÛlArŠ)¢£¨Z‚Ä €ý×ÄŠêÑ$jÞ)Tœ£6º
+uUfa(±K¢%`D}ï1 ý'1¾jš_&“ÛâTCÓ\FŨŠñ蜀W.rôt*eà ûû”×I~Ìw/¬FjUON©ó”¬'ÃXXÊ·ÊßVÉJÏŒÐqƒüâ9a?äd)@9RpX(Ö;Éhl·Ý¼}õn¹Óo)¦D·VªËrï•,º^½…ìq½b!;|kw¸NznguóÞùg ºÉYýŠ€°¸6ñ°øôã*¢ÄJƒˆq< MÏ#®˜ážFëœåâìüRâä4„÷=S³ZÎr½ïRáRû\c‹2[~Èðî2X`µ'}¦ñ†ËF6kÇ©›´,”XàvßndR†Ÿ¡g±5!YT@}·’ÊÇÍöo2l¯ 7ô9¡W“–¶uÆ9áÕ6u&¸ƒ¸"|6?.sdî€^¢(yê4©ì7qA}3\ΤËÍY_Ó
+ gÓç½8jÏ»Çg_S±lQñÚf!XxŒåŠÇŒáp–ïÐ!ÆΈ~Å_ÿ œú¨*_5U‰¬W[ŒˆÝ]VU–Ý
+A˜‚= ZÕwß­Q×¢
+¯¾F]‰(•*í¿K´™™ÊUûã^„{Tp)MÃ`hÛ‘âÉ(˜¨CõЭҾ«_ø±±ñÕÕ˜Rö{_æ”Ï^ˆò8Ó˜Ž;>9Æ°¢á÷öH*梖Ü?¹«­cìÀÆofµãîÂàJJ¬jˆ¸í¾%ëHþ†w7yÍQgáQnY™ ø-¿Rü°©«ìy3Hp hS²§§DÄútqäŠØõî*<±|$(™Q!ð_O½ö=k O†§Ÿ‡±mWý '>Šs!†! |ƒyÃscü†U“¦£mÂ$äÉxZ¥Ê8ç -ˆ=Å]ÿ‰{:CyÞ£.UN{:³ðèí¼( +^´Ž]-ÕIRÛBd¼¼nŠ1℈·M,]p{F#÷aø!Wæf~Ü5jxÛ“¯±5²Í¬ ­É‡æÆõ $Áoô­ÎÔ‘-ú¥¶Ms/?z!àDZ]8ÑÕ±¸¾bxKi4ðÔŽ§Ûá }¾6=¸ïþºŸv¾ ℇÝýêQ?Y0¨»(þ2 0Õè…Q9ÿNÑ™‹»,½5ÔÚË4ÁLY¥3Ö5ƒ
+ÅÑðÏ,3Uÿ(ÕÏ==ªuB'^bT=d°§•å´ßfŽÏÒ%
+>ßJ·Èj=…©cS N#ÐV$ šÞ„KûÂÅMpMÌ ¤Lêšmñ%õE_ÖÛ•†È‰þ0MÎ?XwRòT*ʬLJ,_ÞåεÅÉÂ0úWý\ìœ_jè%æPQÑ‘r˜tXážãæ¡ÑI$L|']k–ÛS‡3ºe*Ró«ÆÎ…ž¤A¸%ôD™\½=à0ÒìMtÄ2D?Úüå0r8Pæ]]§ê_ÂáC|mÀæŒßfrHïøƒØ¨ÜÝL‚«.D³ÛQÆuZÚ%-סßçñ>T”ã£W5Öã|bµ«wÈMÝ¢‡¹QjÏqb ¢P
+Š_ŠH¥tª×ÌÒ&hÊâ_L+U‚L]
+¹K>Øi£x3eÞ‡ég/)4ÍQÔ2S¶ÜQ¿9ÕÝœß6#U/ 6’}1qDV>:ñ‘ÎY‹ ¿l‹xZ4Yñf}ADpŸ§
+Å(Æè¯eëzdÙ1œ6P±Û—ÙeŽŒ å.ú]}G÷f±Qpšà^-vÜ"˜)Ó;á´Z¬õaè x//x„Íö´éC]¤›Àeª•J÷hQÁi­ÅT:“ËŸ|ííH=p‘²2Ùf@£3ŸyÀ¶ ß»góty)èÙeññÃm–>³¢¿u|KR…mi:³5¥äka‚ÇæÊi½Xº ®Q«ÑÝúV‘œ¡ éCvøéH냀
+ÿdiW8Fnõ ¢aô9¶ôø¢Â•…¬ÇpsµCób>ñ6[S6*d¢ ÆÞwµ§gbòGæ·³FþAÑzeŠŠ(Éìj±K¯âÌb3u×(ŸKJç÷)jÀ‚*±¸ö%C‚|/#ÖpàA'ÅâLµq#½´Fÿ® 75¹†Kø-lW¡Þ W37vÞöLÆœÃí±|”/…ý8S¥èÕmR#–²þòíâ…oáÿà £#
+¿iê÷Ü©q–‚’×Ó}ÌGâ°ÖwmH@Ç4=W>Ù”þ¤6 ª*˘X²¾_4
+endstream
+endobj
+2702 0 obj <<
+/Type /FontDescriptor
+/FontName /BXARCG+CMR17
+/Flags 4
+/FontBBox [-33 -250 945 749]
+/Ascent 694
+/CapHeight 683
+/Descent -195
+/ItalicAngle 0
+/StemV 53
+/XHeight 430
+/CharSet (/A/P/S/T/a/c/d/e/f/h/i/l/m/n/o/r/s/t/u/y)
+/FontFile 2701 0 R
+>> endobj
+2703 0 obj <<
+/Length1 1377
+/Length2 6032
+/Length3 0
+/Length 6969
+/Filter /FlateDecode
+>>
+stream
+xÚWT“ÿ»§iT1:Fw—tƒ”0Æ€ l0lt Ò%-!R"*)]Ò 
+
+HÜé¯îïï9÷ž÷œ½ßïÓŸçù<ï9²š(;" 8J@X$PÕ3–
+C¹Aÿ’Í¡H/.óßôªH(…•©QX3= ííKÈKÊ€@
+å!#$äëë+v÷D xø¾0” ÀêEú@¿àôÁîÐßÀI
+÷Â:xáH
+¢Ð(~
+é ôÿïŠßH……Ž0
+¬ÈO×,2yüç/½Ï(ˆÓxjsÂVß•Ózn,~Rç>Všg¹ðßnk"~ØžbôâgÀ¹]’ñøÚ Ò÷ct½£ÅÛÊoïÜ0UZ¸ð 0uÅoÃ}¥ ,ðô–¢0,¢>ñ}£‰n|[±ð.jfÍh½VB‡ì¼bB Þ,Î&´l
+Xè;ÍÀF„¸s÷æšrêøûäÍüÑ+í$>ÒÀxÑ«U‘„Ói¿¥*S¯.FF+†;øÇ7ßsú«l¤kÓÏú?+YA¾Ë˜¦{9üÁ=UØmƒÛoMßø¹ùõ>'pT†›‘AŸF+6n¥ýn²{k2‘XîÁ¢ö
+Zë«d›ƒ¿A2ìÊÀM² j²”uÝæöÝýí•õñ¦-u
+Ñ2”¬&qœÜš¬Û¡Ìk’““´ELx _KwŒ®Ì}XÍ8ª»™Ç2~[àò!áÏr¢_
+G×Ë5ÓªžJæy·ÎT¬0ô¢otƒßsukáQ[*¥gb] I•;••š­ä`{›«€¦Ý’ÍG“!ê:ŒfαnÞÑEjvT¢>“Ô™ó“#¢@™Í×Å7ÖÎT…®
+
+ò›Þ1ýœHr»>žò&^õ`Iľ+$A×[tx‰rõÚá5^ÊiÕ¾rqæ—ãYk^SãºáfŒ® îw+¯kx.˜: ZqlTOd-®·Š¼C»Í×<ôžEw&;knàÉìpêÃ8´ÔÖ÷1ç_–ÃÅ®¾M)”{`¸>3‹f†_=€- .œO2õ•Þ#’zôidØDæ½žë «Q!Åm¨a‰0K£fLÆÈ_F9ÃYB­ÒŽeæÕUÀžEG}_¯~–x—?ê XÒþ8=~ÝÎJîÚ9÷ÐêÕÅöððͦŠL(ÑJ~~pðt~˜gZ´PÑ.kuá%’[¾Îüý:Õ!©G÷=©&Ù:d9à‘ê=ü;Í̉Í©\iiœß ETm+M°Ì¸:ਆ
+uŒú…Õé2ÛTÔàÁø¹f„G³$杻¶«·LVìïÇÞ‘æÀï²úJ=툱uC1' oPÉç3dg*ÄQÓè„
+Uýž!'…ÏÖ9©n‹ÚjŠf ò’üáå[‘²adÊ“Ó"[Ó~ôQù>¸ÏGÝÿfènX‡|p.'4+6qŸåj18Ö•=¨™ûH²êú„Nƒd´H§SnµjÞ{H“Ö]Ø[1,œ~Z,†3ÝvûË|f­ãð•FÈ¢‡û5q«ÙÍZJ—ւɆünFß›ZmGb)¾.“uù²®{1Wð–!ó$àä‚âDíL¾æ µXxÜkµQž…݉ÇDI[árñÏyv€W‰j@O¤ë8âkÄ=nN¢¤Î¾fÁ#ÚD¹ûSíá²ZøÅ…-ƪY_tÎðœŽtïe,ú¿h)c^äl|Šóâ[åMa4È©eY¡´ysÁ}»[^ÍÚ‘Gé|H€
+9Nça6—£7—¡,*®ÏñŒAØ(õšÒ¥rýÍÍ€ÛµÁ/y¬ú!û‹´³±ò‰i£]÷ñÞùsA½§œïÖ’{°¢ºˆÙ¼XOgLžy¼oðÑǹ֟‘J úÌÎ{9FGc·ë>¥&Õ×ܬht‰õµð¶ëþ4-ÑcMל,ßLš`Þg{Û²²UDØAZÝþv‹ç‘Žqj[p
+FÌ‘…Ö[ÔßÊý¾qypš¼Äá5kâ`n|ŸÎü'! lo<®%?ç¸ë“jÇòÞ†yÁ"·ü‡Êjûq½õKñæ²·pë¬Ãίf[Í÷`Õ“ô_ÔB¼G^!|njeØšk=[©‰²1ÙÛcÓJ¨!Z÷¡Î÷"!Jö´ôÈ!5´½¸Â@ÌÇà†àB ›* Úoñ:æ³ÛQb?–AªàK·½¤”{7^äf|¡ø4¼õüªÐOL`gr[·iíËõÆáÚ7x0²ý¥= óz`/ÿ–:¡Ýõê^û1]ƒ×f;ßHûRu^UkÜñ
+®p×~Úg\ªMÝ/uTö¡–c|°ZÓÖ@(`A·+³BÉ/O«b¹Uué^X±š¹eCŠ£(ª)kŠBvÏÞ–5ÜÞQà_õCkÙŽ¡^1-TÞÍ¡ÓQ8EM%FИBÙ+€€5SŽ¦ÓÔ‰\nûBÞÓC¡OZ þ¾b°L0ÛÏ«7ñû6Ôù«m@¾Â3ûJ©¥J²¯­
+ƒ™ú™ñn-ßBç³àbX=pVÆMZåÀ÷éòâQ§ÈÓ)U’ 14v¾ec›e!þªÚ<º%rVÆw.)tñŠôÒ/ÜõØ/HI#7-Ÿ7uäTŽsŒìT‡ìGÜê (•hË
+`YËJì¬ù˜F+£Åþ“«ç-p ª•ÐŠ3—+©Gþó5Ñ’ˆ)­2çÛfyâס!Õý½åÊ/kq?Þä?/ûÊó…NÆx­ràb%ãöj³v"캜F¶äŸÔ·ÚW6…ÛÝæ‚96®÷Š‰¡¸¯køn>íf’ð-Qi†©v{<!«¿I©1Ø¡V³Ηc¦ïá#±´½GdÝéß"xhm4–Zö9²3ËCñä›C‹„tb¨Êgü š ’à=úns"Ë™ÅäŸÛ¨Ûä=øÑßõ‚}
+"tìÏD«@_¶‘zÕ`’+r-:wŸ'c_Ï ¶:Ùžñ“R‡Ëp
+°âa:&=¦ß=š¨ÂýT½:Së¸KNå'´U|¶"Z¼ú€6©˜·‹ûŽ6®á“·\µÅÕÊŸMOš[n U Ùšß9dŠ‰ÙÞ£˜n_Oîüq'SºFÚTîåTþà-ü§‘ýùÒtÖZþ™†g
+áLáâÆÞNî½
+ºï“ Å
+Ÿ\ª†Ã‚|ÙÿMÑ 4Aà ; `'C>Ô¢`ª¢Hj‚ÞQà “b~Zy ±“µñÁáE×fËFNà5¢W¾p~ Ú¿'xéq9²3|ÆѨHóá{‡Ÿä‡Él&¼KÛUÒˆßî~3ãVõéÅ÷U¼;Kò
+Å7DŠ´„ñÔŒó­6µdQæSŒÖ #߉%¶ü(§H”кë\‡PŸázXôÞà°~ë[õ;ÝdÞö¹ƒE…N ë–yö岉w…;ßÂ&ƒ4‚˜°j¯gÖHw“Û#îf{ø°õ§g1™ÕË£ò¸PîsÇcX gÝD‡’|?16 ~DÜÎÆe×V¡û}#]U:ñÏ/5éKå¥ÍD–ÊÖ?„Ó5¶©Ö]”2Kœ¾Kö±á‘€ä:'Ð0Ùà#7{90´ÈqÒÜ7ÒNÍHÖæ";G2¦…[D:’^&ÃŒP;é7{YÍ ^yªÑŠAÈ‚æ/Cî(./L,¸Ž)0± ±÷¥õžÕ‘Ó$˜Šk³ò2¯ÑŸšÐ+•é­K²KqÎì”–`Bágo¤Ÿ,¦Lˆ·ÔiFÔ›.OO D˜Ý$ýQ™±ËgSobÍd°å.J›dèî³ÉOUÉ—j2ÆÐ}QvhºSåz‚9¾a,ÇAF;üy)„äƒÈøçÄ÷VºüÐ÷ò%ªSß÷ë>èKÓI6³W4| ìÕ‹=>ÎY4­ïRlRñ£ý:k<>ÜVPdDÓàWY>k{“Ú+¶ÂtûàhÒPÉ0"‹‚$RS o`,­÷*dͯzí[È(eböž^Çwâ’»ÕyÄè[=Wæ\ÄÉ%‚Ü“^ug²«C+vD¦ùÓyÄ÷¶'¤í™5 #®ŸsZÌC-÷ÃÆåÔSÅLŒ Žj%KîG~ý„å3ol?´ÑF5<Ÿ)!ôëz¨“ÊG€Ö¢5w%õ%®—9:Òk'.pŸ:¯°4ïd/<ýØޚݦw^t`[zÂÛW4ûTúU4ê”Aœé>ÿ‘K}JàÉ.*K[šàó“‚ É+ÂŒ72äsWϾâæ§Ë.5ñ%Û”“(Ô€C
+„Y×”Ûün™ß:£}£•õbë}Ÿ©k‚^º&sA†reÀÂæ4Ú'Qð&DYœ6u½·Çù+Ž“­â ž«^ô“
+Ì«þcñ¢XgþI‘ÜØìè=ø*àïiuû½š]œI• t°ïkÜKµQÙœM÷³¿ ‡å†ÑÄê—›nÔ/ä*÷«»òqâõ( pŽgFyõ„GµGÙɶgUµÐ<ò<æ¶+¿hÍ•Ù휓áÙ £c¶'aR$p¸D½Ô?(%
+èš2œsï ìéŠö®]e—Tf3«|ÍÓaj3k…Þ¾KŽD"Dîå¿ ú¾ Uu5K;²îš˜åcâß®l˜yÍÌÀÀ?„Í€lW ¸òƒú.×ùÛzU"*¡›M—ͱI×ã΋º§ø‹|äÛö7£rXT£+rr0ö–†¼­ëGñSË]RÄ@„$Ux½ÝÀäP¥™ÕQ™øšÄvµ­й ²fZð5g9¿¹Ü‘àJA/Z¤»í¾þƒà=Šnkýi¥´^«çßï¬Ë²»¸,êH~a‘­U]j.
+ûY/Bî«zóqmBÛ$K¯uF­R»ŸŸ}Ø!¸'Æ*"ÚœW€¦ZÉÔù,››0–Šò I“–ÐâÑb#á`Mz3-ôìô¹Tç1"™Û°c¼ÕÝDnfòÔž‚RŽå”†ÕŸñQ®féX7´ƒ/,|[5¬Ñ[¹®Ç“€qÌmÃâmNv’ö`Fþ±z6Ñát>£È‰ªpè[SpU­Ÿ#Òh¯}‚®ˆFH¶;© q>é4Põ÷ŸP¥à€+NHÄÛWûñÂ?µúñn¶ãŠØã$c•CêÙ¥Ôº©ŽÏ=ùBÂ4@H;«OÉ^Ú—˜Ð(F‘ªàÃϧ·|(¼õ¥ËÃ#ÆîSmÂN5è
+œ†˜d¶oº<–'Ir‚äKFUÇD#¬;‚ÂR¸‹´NÏL Þ‘“…_Ѳä¥b¹KÔiy»~*¼ªâZy¸.MÎìBa’±dÏ¿qìƒ5½“`:é¿rõR”Ö sáb?×®9>An{$bRm‡¤ì
+wÙ…v™)¦A”™z0ŒZîÃLpëÀ÷.“LÝäGÇ55îЖ‹RùÊê½ÊIfDU®+GnÿͲW¼²1úcÃ)
+ÉC\o‰kàèýŒDvØW;åå'ÍÓáuE^ì²ó¾ý߇“pqEJÆ0yóôZªÂÊ]ž“"šY|û«ÛÒàkž˜tµâÜöøÞÞär2>}–E‚K»&ß¹J”êTØÈ|MÁèy”Ç!ø‚\=Ûøì.h¯>û)ı4L¥§wj­å™(ˆé~T¢' ʸO˜¥Ü’?ÎâÍžˆ:É×í”7•ÅÓð¸ÒûpÄòÕMK·•|÷¢92ýý-ïuTÙ»7l£ƒcu™%´¼pS+09y¬é‹Õ|¤!ÝrÒòßÒ—+ʪkP–Ý6{6'®¥Å¼ß—¢?:7>¹Ä°‰â÷ê5Ä}§ô‘4«Ät´ùpžÝ!²Þ-¯›_£&4[–lpÑ¥·ÉÝvŒœçq–°½¼KO$+¹rÑã˜j8bGý£‚œÏe´B›û²±îyè¤"iñ½Þ…ƒƒšF–Ù×/Ò‰´-¥mµ‹2‹Êd«}¾ôÕž^?I5»gñpút¸Ó¼œO§‡#—ºñ_Õ/k¤
+endstream
+endobj
+2704 0 obj <<
+/Type /FontDescriptor
+/FontName /BTMECO+CMR6
+/Flags 4
+/FontBBox [-20 -250 1193 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle 0
+/StemV 83
+/XHeight 431
+/CharSet (/A)
+/FontFile 2703 0 R
+>> endobj
+2705 0 obj <<
+/Length1 1547
+/Length2 7695
+/Length3 0
+/Length 8720
+/Filter /FlateDecode
+>>
+stream
+xÚvTîÛ6£»eÒ½ $•î”.©1ŒØ`4£¥$¥EIABEi é–TDÞé¯þ¿ÿ÷ó¾gçlÏ}ÝñÜ×Ï÷M}#aE”=\ …ô†ˆ€e€Êº†’@0XL ps#¼Ýà 
+ýv*ºÃÑ Ô…z;Ãݱ7 n@# ÷øW¾;ÎÞÞ2 ŸŸŸÔÝK…v’ãú!¼†p/8Úî
+»Èÿ65ƒÿ±Äºp„ûk5½¡ØÍPD:¹ý]D„—Âî ð†9ÿ1@õ
+ øÕO q Hñô[†
+ "\I]5ërB5'ï&_Ž3¬xc߆r†{6WP Îô6ÜâWËO>£ñ­ûxü$LŸÔtwµ„~2©Õáš\gç²7¾¿bך]Ó¦ZnÂ"ÚýZc¶O⢤çø¨m¦µ.B¿×8n’ ¡øÔ–ko“òY¯Šmä¤X‚Ñq†“¥‘c€Ï-Òœÿö…â†Åù½³;?sã “,Ÿ–òÍ]Ó$F5³ëå¸Y~l†&ygV³®øKCè¸4¹¯<ëkrV ëR§ m˜ú»’·ûwm+̽›yJc9¯%á¶÷jiZÖYqºj~°Ÿ@†²…3 e?áÛ0G †7[]²Räï\kÏïb§ôn\?‚éW*bº˜ qdçOk ±_gÕŸðb: Ÿ[UBÌÑÍi*w-“JT{E†’¾Èn¥ðqÛ”4DM[ëøëš™Ÿ}ýÔÕ½Â7¿¿ã¾×ÀäØÀDxšÕ0AÌh7óÎXÇýtíxÅ€&AçñGÖp²@íI]6÷×ìE¯‹žîÿ˜$´Ù¬›ðU¬~@©öýT÷g/óeÝÞ1§é¯ˆÛ{`ö6÷9aÏù¸œÿ´r{YË–ø~DêáÞM¿üQ›ÍÒ3ÚÉ΢IßT>¼Ã‘[BÂ…áðöoïG ‰äA†1ËÛò *Õžp϶ôvªgñå¬DÕÂùy%Dþª;»@®£/™ñôIb¨÷‹™ác‚`Œ žÈùeMX—ÜPt4¯lÞýwÝšZ¬
+ŒÓl£gY™m÷“‹%xZÍ…™÷ÐË1¯ÓNåVÊ)Øoñ©wÉ£‹¬‚$²Kȳztøá~íÅŒÉ_:2•ÑcJI°õ™œ<±‡m¾€ìŒ…›o_Ê€1>L:€Ê7g\‚1žbf6J8¥¼Ïfù.i-Špzœ‘à ³NÃD£Eyê3œéNÒKÜí Ë.öªÚ´èDD2òíòøGÙ©¦ºé¼îLþ­LW¥ì†»Uøýð´*7ug½öI…‹­>ÖŒ$/2üÆs º”)Ö×øöçºQ÷y©¾Õòâ•wI¬Ê¯¬n![óê1Osª²Ø…³ јlÕãèm‘ Cw½[L ®ók|´8~4Ùõnb`Ý3Ê2¼–Ü™µE+UœX¦j4àj÷í<QÖ‘Çå΀÷NÀ,1ó<j‡Bî p óâ'Ô6£òÑqk[àžJV¹Hú®÷ˆ&U&£êhÓîµ>’ëûñŽ]çë¦_+ÆSÊç\$M¡¶ÐÞÖƒ#a çÎèÃÚ áûçt€c™uVû»3÷¾ñSíj¼zO8¦hŽ;­ºÕ˜ÚyõâÄÄ)÷Žkç ¦Žj¥òµ‰./G¨œÉ'4ãxI¹®7+L˸‹ˆD‚<3¸Ë<Ü€Ja 2+ÇÍU-ØŒ&ríÜÕý'Ωñ¾þÖâ¤;ëèÝÓôw-q·­¤öÄ}BvWïÉ° ª+‡É¾QäУ 2‡nEYfº3e(z+ måºÏÊV•™vÒh˜åé/ˆ}ºÀÍópÏs45›8H®×~nfê¹gjž³—&RìÝT©ö±9=^Po’Wø–Ñqº¦ixœ›®'â4ý衺î‚AȘl‚~ßžÊÎÊ¡•±G·Å­åcR¦h[ØœÁ3™Ýy—”Íå’y™ñsà`yN^ åFŸ•¸Œ´¹ÉÐ%×0{Þ‰Óz×̳æéže]IòrcØ“¶>äèhž2Þ³½
+A{n4E2Ä‘|-anÎðÛ§¿¤¤"ÕÎ¥ºù½`œ\±±%vŠçé‹Ÿ!¢VaËf®˜ž¯|üHÜL)À—28ÎLnlT4ðnšçþ‹¡žU…q,9À‡?Ñš½!½_ع^Èy­Îí\WY(”œ5ô”ˆŸ—nP¾Ãh6%LâÊÑô\_ƒV~;»Á®(*Ûªt&¿[ø¾Ã0šª
+ÐædÛ+R{qâ)¢D¢ú‡2Œ%n#äÍcíûoEÌ{ŸÀsZâ1âŽM_½Ó‚„lñ¤è8XŠFšdS‰lÝz‘!²ÛhÃ= P4ÌVMߧ2´g)_½ó@òA‚dÿÚ+R2•;úË>볘’@­fšÓ´¼Y‚¯åؾѪ0çÊëÛ^íy£ò´cÓ’tbyae±GïØpŽæˆ¿°ÎGå=rg¤5"£m~7É”œ@z;tpéž!ouºàQšÝ! FAU;ˆ<ufÝ/2Öe:1«&Øç'F3››±ÂohNÁÉVW|V ]äxë›y ÇNû%
+?<L 'R-Lï΢ oö‡¸<ƒØ±dïúcÖ3Q–ÏÆÓÈ]‘òàƒ–>–´ 2Û®4ûŒóIu?]‡ø^©]¹ËR9?X-pÄÎ8DœpB6ÅŒ”&_ÞÈø>à5'õžXppy6’,= ‘Y7µ©"YßK¯ò£ñ¬â€sµòh¦¥z¡«{”"Ëú©ZÝ¸œd“LÿhKÒhpBaØC6ĈPA)=~*”—‡äµ§3íÈn6c?Ü«¡5Ü÷Ùb³]oýVR”3òUKÔþK€¿$íê;#UúFñªÂ´»9“Ã{&eäQ¯<I«)ͬ(~~¤û¶Êžë‹[ÌÀ ?óÑûÎóµåšöîEC!ßJÉGªö8á]k –â´²ÌGrÙg„Yû]OiO 9é¨ «·åD;ç"ˆîŽË»QpxÎñQŒ¨|½uäãz„wË6˜}¦;‡³”§ÈN¯%ú¬WNNÙh«¼úrJéÎ’l¹Ó–ö]rèÚtsçfÔX
+ŸVß«ÏLÒ"Q݆…}%BÂâonÈ ê»sdz!ú°²pÆW!e>±Z¯]üT†!Òû=Ú6f’:W×øj>µ¸jlH¡»B¶•AqôݶDË7G–oÒ6=ˆ„8u8Ùß}²ÿv½Ö'¸öbÉÔe\o[®Êù"8B­c©¼ußþ+ùå`b#ÿ NŸŸðÂÙ ;”î]Á,W7‚cÝ µ|ûBþòð4ÍZ²6c¹ñð2m­…\–R"æx rƒÓî>J×®Nsa屺r,¬kA3Þ°Ï‘êÚ[R…üRÚ¦œ ¡…6!‹²%íCî²T/Z~OC'sþûÇWwT ?;?йÀ‰‹š¡Z*-•¨ }=V˜y—ô¤»ÃMx‰ÛŸœ¦ÆlÁgýƒn«qF^z´$4o@°:ÂÔó3Æ^v u:’@_W‹ý XCë[xÖ¾c£iwd¡Ë3çH¸<&ô¡Ü¹YC–\ìºj¡#Ä©úõ§oDßÄe”|…ÂðMª+wùÒ½ŽO–Úë.G[,v3Z%ÇmLÀQÝßt횧̅¦zQ¸ÅOˆIgô¬#K~~¹ W6Ú/ð°Ÿèmé¹²êÂDŸu1Š
+Aæ y´ ÷”}xˆ/A*ñœUðæÁ” ¾‹àZ6—F…QϳïZ§+[¯!ƺAç¾^
+hd¢& dÅ¥xÙŠž’ϹžØdÄ…¸HãZ_gibª¦N¸ÁÄø|gþP½ÁÁ’úå2m9pw±í2™€ÝÝD2âïIbt·sž,'®Zê5štŸ$lÝäœ'3øÔD¡\•ž£Ù¨YC±œ
+6È…±3+j­Óqß"¾33Râ6:Ac+Ú·“jVãRÖè {·£…}'vÕhÆ^ÊÒÎÑÑ4O2$[à~­L:%vàØkô0J~žt5­`Áf@ Ðk}ô–I_Ô¹ôÙl+œßü›ïLKŠ ÷Þ÷)ÁÖ”ÛHí§óÒu:÷Ûhâ*hËí„ã!¤a‚¯ñÚ¾gdï1V¸t ÷Ïh|?0ó¶Š;Ùý0ü]½U+ÂÑi{µyK1ë»ã¡£T\E™’«T¢~ÉÍ)©ù2­VàÖ(_€&“u™Kw¥¼ø§û’auJ 58¾6á& …~ùQMÆDzë'mµ™eež³¬ØÓ’z+ۮߺr'=(Å7r9bZÒŸH’sù0סI_DR­ÁUy ´€™ÔwÈ^c„?UïxsÎá^‘^ƾˆãnÌ2ß:Ÿ£×=´¤`ÕÄ÷0®l»-×AÃe~$Sú^Çëˆ!-ÊEæÜxc©÷MlXˆÌ-6lJ‚Ì*’­mf1Ø?ûüd½}]˜b”HµðÈÕemhë‹;Ò•ã1Ëgñ.Ç Ñ¸—ËöT+JDs¶©¥»[Ì”®‡é©x¼Ê0f5–°äþv1¬A £üÑåíRö=P,÷é´P •²n`-’6d»—ý¡@¬c´
+;ýÎ=¯Jæt9ÜuÝm“º8 &!EãV>&Ïp*Â:—tüZ×ÛžØhÈAý€¦ˆ‘n–ÕÝdøë=wTj5óÊÎç÷O3†y©¡ç¥"÷VvM^sº„pRȃ,ødð¬'ÆçŹοÄpöí¶A¹$NaŒ­…^™#ÛW îéF å]]pÂDXŽò6Χ«Yð‚±´ç½Ëć=¢< d·©:=£Æ›ô_šBÙò
+ëa¸½ª9ZØšî‹¿¥Ý`ºÏýzë:M£±ý½š†G&N>$‹ɫ‘U9“Ô»äûùO·ïù~(ƒ&ðçð¼ò˜z@GT
+}æ×ul9¸°Vgå>GvY(ì#(.WpˆÎoKmâ]# ÂÈð1œÈ—CI´.œÞßÞª*Éz}(+(¡ãã9/Špã]‡}ó=íÈ­o#ÆûÞ«é éõmÊ| (C‰RxE!˯d€t„z™‡…Ï$Is[§y~3Ê*­òÎr¾ËO8®–lÜÏõóÏsãGPa/iN¤` /®A<5+ì™”.<;Ì'Ò¬µåû+;'VyŽºá[F~Îëö œ9×q¿’AvÈÕ~&\hönEE@‰Ë+ªÎ!z›xeÏôõH†’¥"¾‘q5M„Þª­Y®›”#Cx4a„qé=θÁ¼ÔiÚƤ¸rb}@œ"Ü7îU 8>LÐöɦNζÐÑŒm}x_껆ÕúÇ–‹ŒÇ¥¯lðB7¿ôy=nߊ P)µ9,Uò–L=¡—ëH£!e³Ðð¹¯Ô~¢© ®à<û,M4LõkmªŠÓþ¤î[…³MGâ·@
+‰8hZÝG|ðþ÷ëïO"Bè Ž‹Cî f
+bT®iFÔpyñœŸGŸ½:þŽ$ YWdÑU/5Ù™u6‘Tilx ôºšw®Èðæ×¹ÐüaG€H½ÿ'€Åü
+endstream
+endobj
+2706 0 obj <<
+/Type /FontDescriptor
+/FontName /VDRGYX+CMR7
+/Flags 4
+/FontBBox [-27 -250 1122 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle 0
+/StemV 79
+/XHeight 431
+/CharSet (/A/eight/five/four/nine/one/seven/six/three/two/zero)
+/FontFile 2705 0 R
+>> endobj
+2707 0 obj <<
+/Length1 1911
+/Length2 12500
+/Length3 0
+/Length 13679
+/Filter /FlateDecode
+>>
+stream
+xÚõTÉòÆ #Á‚ÛÆÝÝ]ƒ[°à‡»%¸»»{ xpw×àîܹÌÌ93sþß·Ö½‹µàýUUW?Õ]ÕP(©2ˆ˜€Œ€’ ['Ff^€˜¼
+7€™™‘™™ž‚BÍÂÉø—žBèàh²åý—_Ìhèôn7tz“Ùd­,l
+€š¹…ã_fU©“«¡ðn°¶0Ú:¾/p¶5:
+ðüUÂûÙý· —ÿôõÆ…ð¿;(€Þû þ§íu™9˜ß±ünþ?—üÿëù?²ü¿´ýÿÕ#élmý§—ú÷ÿ×ÐÆÂÚý?þ÷.vvzŸyÐû\ØþßÐÏÀ¿†Xhbáló½2N†ï“!bkfý÷!Z8JZ¸M”,œŒÍÿj ÿÞÁ{zk [ ÈÑâgÀÀÂÌü|ï³flõþ”8¾ßÔŸ.àû(ýï–¶Æ “?fŽ•ƒ`èà`èÿ~ñïÄðdyN ÛŸ} `b´9½/¼—ç 09ÀÿqŸœ
+§á»nçá»n—õ}W÷6{wz
+íÄ@K‹~á†2{s;ƒž=ñF,Kï}ÉV詽Áõ0ç±Z¡Æê؉KŽ«Cyƒ>:Eé)z$‹½àYR¸î0š<‡Õ6¶i“Àb}@í±« rïpx©GI1ÁK‹ÃùQ&<b½Y:Φ˜$š=óbEvÝMæ’맑#½bœÅ›¢5W ²~ï•ÙTmJ›#'ß^b·R²_fr]S¥·º[}§Œ‹l[¯XÖÉpùèKø'•SŸ²âTÌýLé-k>i8ÞQj·X%&¥¡§„7¹Tü˱HÕ{*G£5ü–üßd|h/¥H»D,cE̦ï•"cÅ77?D«5ú·{HiÔÌc‹&ôÄÐPÜ ’p¨U¶Ýé;iè¤×Ãù¶mÀºi±…ö¥3ÚHƒG)"[ø¸©Œ®–`¥ 1"µ{;ãL6ô,NÈ+›.š¯c,ð Q· Ž9½k›þ’4Ö¼ÞDoUl;šð±PH„ò.÷%R
+í }ØôÓEmL>“¡w¤é'²P¨1Š¬lÜK1Ѐ†/2RߌwÚL¹vfýŠF/YÆðb—ò½Õ
+7¸ý×ÓÑ‘\ù×OH[qz?›zƒ¸gƒ[øiä+;#‚¶ùa!lÖ?D–ðî'ÅÄ¡Tz+š°|ÑVÿ¸Od£äo:Æ^=ÛLC˜â-š®T4t`Æ:YcÍb9º%y3~˜†|¾–g‡”¬Öè}áÙP̯ƒ†IÀa!«¨U&86lj®†®ÝNàG~r»ÆÂwξáóæ@; ‚ t)qâ´¥€A=P¼kÊF‚m¼î¤4€
+öä7¤=ÿçV †êÊ"¾¯Ô‹]–»86ô„‹›§º±Ö‡¼;×ÖƒîöÕit¼^ÌP¸&ÉCy3jUð°-@°Ð,͇“f!¾VayŒÑüSQ…õ
+©vÍ›hq ”#¤-"’Ò÷EÕÖnUÍeq(«ãÛˆh³3§Œ®ž+Œêz¸B±ÃCS¦¬aMY#¿¹înCÉüÜNÕÁzÚlš£Ún , ‡¬êÈy› UÊ>.†YHì«7£¶Ì厣fóŸ´n5Ì1êiQþHY"ˆ­áó8
+ =Œô´´Ç6ïÂWq[¶{àÊÌ,Š%S€ZfžË£Òm¹ñ/UÌÈ’øÄ[“Fð³&QYc©eéüG®¼§º`¥2â‹æN3Ž?nXñ,ÕÌû¼ºç᡽”0 òÐÑ3±¹þäùsÏá¹p´ @F;=ö˜ÛÌÿIÐTø:6SŠ§îþ¢f÷Øé´ðÔú[ÿ9‘•½dßsÚ±$.x‹zV1@6j±A¾V«»!reç@ãÊ‘P¢‹2bg’¢eËâ\`g¢s6rjmÕEb­r²ãréΡïˆÞz ODŽ­¡sþ/­ý’u÷©êÉA×õ&·5Î×™âL¿&MI¡R ,öàcâlæ`Xi[
+ÃÂrcG­Š`ëV˜2$Ä8Š“ðõÈ@/ÿÏ`1‡ºgœ3ü½xñ©ÀjŒ[ wÕ/¬Ä˜„_`û¢
+ëú|<ÂÝ"8;Š|mâ±`4o%5ÂnÅ$Ýdƒá-%mŠÌip5‡Ú s æ&ƒÃ¹üד<·azÂóiwùJF€BKF»ë`Ö¯^wãh½S hy–Ç"¦[<õíÏF×¹µpèÜjOË&5–8ì$‡­Í);Àš‡0m—Ymz FÑtÐ!fxmˆÕÓÏ}RÐ.oËÖu>‡gý‹!Õ:rÁÞö°j.6–bó»åFò½è¼fY›§]=Á·p½ŠÇ-Æ÷öã—ÊPˆ*ɼ¦ÜmîØÇèG~g ˜JÞº}~DŽl+o«´slÒ$‰ä´gˆG¡:ÃxÉí‹^Z'e觿jvtª—QÍOþÞ›q®ñFªwjɵ˖!1좚Jý!OMïìÓ-Cž•PÄï¡ó´™8ÆM>Oš¹M;XQslX:öŠƒhgu8ÚšòˆMÞG›øB>~B
+Ço?Hà ·†¸5ÓÇèì(Ùo-S1wpnõZY~ªÙ¹DŠê%Ç|ìí…!ŽH[Fºv#O©?¥3µ¾Þq‹‹ÅÍÝãêªØÂeQåÄ¿pÀ|”Çö
+3žuÐÄìo§¹Ï8n*v:媺H48Ú3½À?m>bÚÛQM…¤¥RyÈBöãmr’×÷þª¨Á€s†ë·ˆú’&+ð{+ŠV;»%2`­+' U
+¼ƒ—ˆZ§!?L\¥Ì>¢¼_MOîJwO²?¬ŒÏ
+/qN•äDh#…½ Vy­EÖ êžêÆ–# X²¼ õÕØê^Lþ£öÖ\6ô‰¾“lf9¦ý@jŒìuVn‚•ó ¨{ ]Yu)‹ô‰œá±Ñ°\ a745í·ÿÍn?Âg#âê/4Ê‘h –¦¶0Ñ#væ_Qw*SùÆucV"n¹yè=Cjj^ eQ$üYu>oöïãZi!äéºÅ§’õ[˺›Ü}"c¹ž`±Læ²¥»’Ê£_è› OÄÜÅðµv|ek]ý&)ó¦&½-Mhv›æ’Ñžx\º+@1Ãh¸çþ)(:´Ò]^ôÁ–¤MÕÙÊÝ…”ãDz¸ü|ñ
+>;ÞÐÝú8X€²å|Ió`çLc³
+Ž1›åLë¢lN"»Í8ҕίNøAs¯ñ/„;ë£ð<² ƒ‘?‰oæægà™+‘綳Í.wp»ôá \m7;<[•E¡l!‹KJ™ÅËH'E|‘@z¨F¾Šùöid¾5îúµ²óRÃŽèn«hÃ8òwÔæ4m$õ(üÚ€—ÏD<E:¤ªÖo`HS£ü`#¦ëb·Ix_ÆÑP•ª?+ƒ„öÆè,¢0‚ÝÍþ}ÊIøù Ð9-oÏ@k}k°eXämÓïÊ6¿×~³¢3ú»Ôèy×}…M ĶDñQ'`âÌs —tžHòNpêºÒs{ò{N¤Æ̈B>½Ò­Züšõx6‚©YŸÌkÛzW¢Piê²èÌüŒ¸ûd ¢Ü‰¼ ¼Ä*}»qÑ|—×!<žw,r2Ô®Àã~õdž17L£Og¬Ïg­aOz»gzŸï>¨‹hp}wSöb’IÈŽš2q€«°#Z¦¯ ×ÍÚ
+CH¢Ì¦ÉPbšx5'Ò½?hFzACÍ
+%Ô™ª€%+´›´½_ùpÃü‘*üšÓ
+yS~D5Ò,Hi²_°gÆÄp‹µy~xÒæœ+’¸æÊ«Û¥ãý;{ÿcóaÕGÒ䃂Y ¬ÔxóÅ-dØØÂ×’„ú“創¾e÷­Zìµ]èò!£_]ÛĬ¡N÷Ê*~dÚ³Hv)›æ°|Øèk OäÑM<?înMß'†XÚ¥î !hЋH# ü0YûBÑôƒÑTÖ#tt[!½Ž*±¶â¢IPÇ:dЊ5àŸw¦…Ž<¤Ý”{ý¢Mà?3ehÒ§Î3ôí•{=£1Ѧ¦ŽµJ‰G®Ÿ^(À’úä1.µ µé6p€ÈJZÓPT%yw‚*©å§§¬Âþu‹²H¶ õ´À»nHc)¶Šóu°ª¯ÐùçæS›AYõˆswÔÒ
+ãªh”‰Û>·Gjâ ‹Nœ0W„&Ì…Ñ&ç­Ä_H·Djg7°1%àÍœz
+€£N«¦EðÜ
+Ÿõbéíý·‡Ò°™ƒ¤BTÝ<åݾúµõèÊ“ö:&»FQoˆã‰¯¨“s½¶Wf$6"Õ†¡ßMø
+bfy8ÚqZ§ƒ¬5.B ZlÑ()….ßbÏ·%=n(â¾|ÉÍÙ{#3;âûEÄ™¥uëÇ„ñz!}È,XïÐÅŸ+´,alB[<¥CÓUñüªîõºFêC:'JíýÚJœQª9ÓÒû_,Â×Û
+˜¯Ý¾{ŨÝöâÎ.G,*T éœe‹¶Å.‹š8m. .9œ¦€ÑºÑø$ Õw­¯×­pÊþo˜¸ŠÖ!!»½F2ŠƒU“«4¿¬€–VÌ"\xÖç¨\žLó“‰ñ0¶+Jüó=]Öy•×ᤪ·z¬‘Ÿ\ƒ]fDødÖ¦zð €R%Þ ½Ëpþ‹'†ÓrI”èB±þ# Nˆò;/ŒÐ•)y€.kS/¤Ó­ÔMQòL0š/Pè:*uj+Û8wt‡  ‚‹æ½„®³²‘žK’¬}ʨ”{“ =´)%XqEÈ[5¦ª6§Ïæ'3mq£x¥#Z—ã`ÏIt:ìPƒ$‹J¾RulŠ
+¤›„¹¶,£hëÜœZ8èq°ßÍ–­ÎüÚSó­¥ëëòðî.ÌôIò÷¯+Ðhª^‰7T†˜$\:·óÚ”~Œ¢.ŸxüÙ=}ƪ¨$°­wn‹ÖWDy9ͺÃlUQ(½OG%åÒ9X¼52[„ø&¤ªÖ •i%Ø)ôgÆ>|UvÅ`|¥ci÷¿ö^ûzÃ76®«šbýIB¸b˜º¯@™tfgíê”BCüª4´"<ª93hzï§û)I3V±¥c)qcâõOÍÊÖ³ Iq3_tt“xoø• ™=hË$êK¦¢`'´€Mù[yƒ á}‘Ùgk/[?X¹¹¸ßÛ’ÑÒÓéº>ÖTøoÈÓq#nþ>ßq~ÚæT/õ=ûžI}m·mŒîþ$?šù¬Hø‘¼~^…Êò›ù{Ü£!dRápZMuÉémÒ~¦ª;£ë´qOáØ&âµËšÆì»8„µoQ7pƒgÝ€Í}õÁ¥«SpâóÈy½€¯F¸ˆ^ºwuhÑ•}ê_Nÿ&ÙÓçèÑËÔè¡båçûðŃ>˺‡‡­›²A/
+±ücä›ûS/eS….|np ]¾‹æFó±³ë#¤Ì÷ähŸìk<3ÿÔ8G{Rj»]åÖâÛRåÎÃbU{·ÐÑ"úýCÓ¡©oí_Ü(‰ÇÑ|­²Sš9$žK¨Ÿ=¢$m’S¿T†^¬Ø¨õxN|3OeñíÕ‹M¡î'ªBqÉpRìÄ#â͵šÌÃÁMg÷á^t)½ùÌæ!–üȶæÛ
+¿[­]}a4¨½v—N ‹"1½h” º.–àÌ_@ã÷§[ÝvÍÈIcÒÿZH§©p¤1.wØ©&#¤5¸—ëlÅIÜï°aVÒl˜ ‡åd/ð€º//Põ*ôè¼ÏîcÎeh)õVê
+>ŸT0’?—ZýbÄýË‹ë°Ç÷àH#½\är žÕQPøÔá—U%¹íîìx0¾måb‡ÁÓÇð‰V“Oâ
+¦9ÄU;¾œÌý~ìd-”œñ7µì<ëßGg^oÆ6з5¥¾+ª¿©Viøó”fQ¥QJF]¨Ol
+kD\·u9|x
+ïjÊê…3a6±zÄÑ+íe EMk'Õß'ÈøùctOž`¸ûK·‘cCy?;zÿp…›)BÓ ¹:\ð*’Í;íw/Cñ[G^æ¥w3ºëôÑôe¾VD.Ê
+{ÑÒw8 ^T²œ˜~ž,w+Á‰ö‡G¹ÛUª5…“ÅpΖ,óö4Óº˜H ÇÆU×µoãØ| p~õb-ÉP‘<
+¨‰7Ô½(ûòüSÊdÒY†¸ÞŠ=:\òæüñTŸƒ† ¼-„iÁ-×›‘¯”Fս˸Á·)ÇJjÿƒuí0rŒ-"(£“Nml$
+.•T°_~ÐB—Øb¡Ûþ]üäòFÁ¾ge!EÎJPœÝíß–9“r†[@<¿ëÝœ¯¬6[ Ýe¶¢ÃFpËfévúî„š!mÙ|a`s±AÕ.±-ÕÅ43¤¸æ'(u4ýÓ—W7¾0ÇA<~ £‹_v‹)ÛƒÀ³¿ «J•õÛ­lÚ »pó^?o¬cô“¥°ëmjʹo|B«¿ÉöoßïkXÖ-
+F¬!·ègNµžFsî¼­úÌŽ@œ<Z`„|ªÅ‘<ùðl^Á¾ÿfÙU]â›^´PmâG%$Õ]äÛÞÈ ^ç†fURP¯í³]´îK¿”å÷CÇFÁ”0ˆJÕHIKæD$=KFÂ$!.sÿ²qMÕßîãÊauÜ{ØQ§?ùÔµÜS«Î*Q”‡Ü«SXù¸:Ù"ÿÒyª–î<»;2)ï‰C†é_f§ä¡½n-Ùöû÷j˜-ÒËk<lvòAùD´m”·žyL
+ÿAnv¬sS..½8ÃÑõ(#»
+–/ÊG@oØJ?q½*§(_JËUt ¶ 
+7;^¸¿†•¸YW=‚žz¦
+åò¶¿ KÊü×E#²TMÊC€T08dÄi×…Bç im§Nrç‡[]îDE¢˜òhüÊj¨RO™û³2ò™*ÞåN ¼ÎÃ…®MEg…••&&‰[I}å ¿ïËLÆÓ0ŽÁN8]Z÷WûüŽŸt$öç*ÙéÐ'0×8Œ4jIª ù0Œ1ˆhŠä+vÙÒV©Ã £‡÷ìØõS[¤¨ÍEkNç›ì5¯DåG¤,Š†óñW™«à¥Xn:ˆÃäVãŠV.(s=ü!ÇÐü^CÖ’À;^tåüóŽ ‘qvÜ‘1Äd± RE•k°D›ð2êºÝÎpwó ´W×b{!OØ4œT”Ÿ–7¯Ê"ÝZ
+VÝޚЇFê«+ˆ«é86÷Ûü¹òd*ÄřϼG‰öÒwtAžcÓÔÚÚÜX¿° „îcjM»™b¢ÂPöƒœXcçveÀuï½QL†÷ÃßüLc¬ør—>¯@Õ¼mã„÷NS—$Äõ5òƒ_yŸôdA$gVX…#,ÃÒ/‚ênmd¿b®ž…uŠEaãˆBU\‡k²÷çz‰ºù&wlŽ¿5n¿Bõ¹i?OÙJìkï^~|6ÁgÜÀ÷ ¬%7=§›è¾ôv€ø ˆù¯@“`M‡z;Ì?¤I/«¤Pò5ŸÇð¡F;býðV?Á£ÍÈ)P®»ÁX{ P–ŽZnÿæÀ~b53°ÇùÑÈ¡à¯í›[1äS±Ü?zÊy ‡ŽDŒýö() ï¯1å?’¡× ,ÜLW×\i³›ä™Ù~c”ÿ|¡£)µ²öù0Ê;¦ñ&™
+²|¤§—UçÜm}î1ö7bL}úK~R¤\Ü'Ÿê*Ö¨©Ë‡å§ ³$é)5ä(ö`vë7Æâ±Ø΃ Od¿ŒàòÁñXNÝÎj“L|Q6øÇü5N±4ã‘lZK
+N[ŸÇ˜A½ÛÅt˜ì†ªÈ´×‚u°}Ò`Ñ©Ó,Ûä3dé+B%™‡ì"òò&–!Úâ3ýŒ—øÌ‚â;¸)óŠ '¦n“‚Éû{pÑc‰«½çâN˜ÕYPƒ³† ÒyÌm¯.±Ÿæ’)»Ú½$_7† >0¡F÷fòµG†÷ÓÎlÙºíŠ]Ö(Í9¤Ä-jõ\zÀ1ì/ªþ¦¹š–¾Ê»˜EoÁj¨9ÔˆÞŸø åÌ4xF¤¡ž8ÌæÈvb…J*(ûvœRTÏ´½prr¬Þ‡ãC–çQL+/«d°‚j‡,M€›É0½÷ìYó¡!1“L9?×Rp;%!³K›ÿÎïo?ì Y@azM­™´Ïy?F¯3†–"JÐYxÙ4uXm2=‘®pø¬¹È VÜáÊŒvùŠÛ,;04KÅzV`7gó£[¬·íiaO\çŒå9h…‘ТÕZÝ
+/Ó»;{íÁ!|4vÈ|Y_ÌÏÏÏŽ|Jɪ\IŒôN U‰7ÛR}åëа
+™*\ÊØÑ:îø»}laŒJoœí‡ÎÀÎ.L*‚›ÈJ>шC´Jè}W‰Ý1úf˜EìŽÉýz°
+¯¶Q~å³æáÔþ¨B\U\{Äï¦tœ¹¿AÞý†Ãoù ’•#ˆ5ÁËèαpùÛsó(xÈf•Xqd®ÊŒ7X;X_’øØÙÂ`¸‘|ƒoüËÃ}#´°-
+¡Ö‰µbS!>©ÛŒêÑí0Þú jE\]@3Ú’ú¦ü•>š˜A;vÇIö¢ú)Çâ–¡­âaî·Vao°É©ŽÁpiyêî¥+¢¶š>™ßFHÄ5ߨ|©¬ò†æ hž¿SÒÄÀË°]7ŽônçñüV![¸U%ú@€™ì³Ñ ›5ɨáN†Î\³|4Ûílá2gD%’íí„ë‰ù,™ë/’\ÿÃfɆ‰;m&y÷;qjåö°4M•ÇY»|Ù[’á+^·¸zWþÖk§Nš‹•%ª†ã{ÃÅS¼íg)¡È~³îs³z„¦—»ÊQV¥lßóo1L!äÜZ}xë+?‘ œ•àž>WÂ[¾5·ù3e>…”OÖ¶´èEtÜ»åLVÉŠ[íµ£‘jëÓÞ]
+7Zˆ°iÏÓ=E$±Ç¿º0¸Ü:7ñ‹4oàácsv`ÍàߣyÈ<ˆé2 ‚è
+i™Ö$»/‰Yc¨¸ïÿç‚õúÝmÀn-¤<ÓFc,ßâ6ci"¬"ïÓcNa§gÖ¤E÷ª¶²ÂÁó±1æáuÔX#L
+ßv߶Õ !rŸôw¨m[’ýº(ƒN´¡'­vø¼V›ž–;ƒ$>\>ùÙ’_ÌYN‹‘xf&<y„ÌÕ ð™5‘Ðdø×TWYÿ´¨´=Š¼I1‡+ÈO‚‰î¡WmýW?4W3ö^O^~;"w9B¦ËáÇÝ
+¤¤sºì¦|H²_ßa¿o™ÖáO ëxÏUÏA8CHµPt4ïàLÓŠýµ´I XœY)?T¶âeµCã¿Á±•êþ¢«Äš5ÝO(a˜¤(õèzµò±DuƒRܹ¯^[à¨Q>îuU«!PEê­í]Wj QƒitóÂã3AŽ”ÝzòÏD\¡‘W›´Q«Sæ4Ì\'в„α+GA¥·[® )”óÅ%n(¬ž”+y¦ZŽÀuÜ—¡Æyà®@ }5XtÎn4žó¤›†²ºU"¨Ë¯õý3£þL+äÎrU{»CâHJ(O
+ýl-’
+>ÍðâBOéöÙx‰;g®ý¿P¬îã
+©›Š‰’’ƒ¬Œ² õ3l‘fšêÀÛ$§t^lQk¨«Á—ŒD;›„í
+(ë„Ka+o}N¸7Êd9^•:ŠTµ¢eÿïåüS¨(~Âîpß8öçàS78g³S(¤a÷I[fý¶.’/dEu§^ø_8ƃ.²¼„e¤ Ë×â­· À °F«U¤¦ð­hõ~C >ηtÀ¡Äkô·Ù#3õ¹¥ûî.Wƒàx`¬B`äKcBW Bû³áÌIîu¼)°#5öÇ¢hÑGÛ&Ü‘çþQbïØ«Y'˜.×›Óœ’S³.õÀ ¨æ%¥¼Õ@ÛK‹$ôxÑúÈI\QèI³±‰3¼›•z”®æêp™|“éï—ÅÚ–ÏQòßrõø¡ØBÃd¡·Ü »ÑÙt¾±ï™RôÇÏ´þ¨0¸ o4ÐúÒ„c¥à==ÑJtŽì{„Ö$øË*G´køà ó
+aGç9Á.e†NÒœè׃š,öøsÚ´‚Â6$¸
+Aohr¸Á ªðÔ$ó;ô"^À^;9’Ù9ØD,ú·šUÏ´ïvTÔÝG-Óóœ9P—˜hSÍ?jèXö´n¼H‚Gý&v€Ç Ìl™*¿Ç<mqºšW< Jpro#÷¾ÅÔ€&ðnja=×H*›íÍüÆñå)ûf'xûQuëȤE(+#ò°oÑc †¬<Œ Æ40²zhT‘G¦``y{îóz³„ƒœâßòJ­öøWºêúÔЮž>ìT$wœÊó[x¾±¶)$4üD¹G¹L]RÌíe=5ZV fÊK½2aœÊÓ/•3óƒ#”ýZP™Ož‰S5ت^ÈëR)i«Ìtg·K¾°l€Í”¿aó–Þ‰ÂÿКr… «ìûbé‚)ù°ˆ‹0™Ñ±jia°iá“[æ}™>ý¹ÍêÇ`cht«ã²>‡ê¢YŽ,1'2Mºo
+Ül ¿Å‹ú8‹Û"ƒN­ÈÍ6K±ž÷+ЉH…4±—KŸȯol¬RŒuE g8ï÷\HdÞ¼{ÁCZ¤Ìçáߟ؟ ,iðuD3Ε£R­P?›€¦Þ{·˜*ò6…Né>pSQš5¶f6ÙÁSj¹¥#5uñFâ
+µAf—y1e›¿¡Ç€.㶠`˜ãÞ*(o÷_E²Ñ„¤ÙܪgĘ}\ºg\ÔsÊ/úh2ésÅêÅoÝÝK–V¥›XˆÀ\¾ú~%7<ÇÑMOð8$ÿI¨WÖèŽÃÞXׯ%'ý-© áH*$µ”#1°m-1qláÆôiÂj»¤Á~ÊMu."¡à‡IŸá
+Ê-„Ç£ B&´wÂÝi¥üp“F,KEÕþé#l§KzÃSç ¡…u ß½’Íûia‹\¤ß‹Rï1–y x³¤7n±_‰ì©°b¸^øݤYÀ ðF¡²H áŸ˨ŽzG—0á#oÁˆõ°Q.•ežg® P¤º>`¿T\÷›6t3*u~ªC)]j¼ÝA×i"H,Ä“• ?¨Ó4ºl#ÕÜY†¤<Ýd®gÖ‹ütvò¶0þ‰•§zâºú:lJ0£’›šüž³. óýUBgÓrúK㤔'Nåø«käNruI°eúí3Ôǯ&ŸÓÕx7} gÁ_j§0££5ÁÿC;¨½üñÛü
+®ZDù¾"HöÕÊõN§à{újâ"7ÛaÕ|Yã}éül ?Tuó÷úEQ~‹/2lòb7^"áEIÕÁœiYŠv¡;VÙu"dβøƒÇö”g´$Í™¶)ÕhüÁ[É_ƒÒ80,jÀØ<QJt/Ì{k÷sî2ÿ×÷ê9
+endstream
+endobj
+2708 0 obj <<
+/Type /FontDescriptor
+/FontName /YXHHTG+CMR8
+/Flags 4
+/FontBBox [-36 -250 1070 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle 0
+/StemV 76
+/XHeight 431
+/CharSet (/A/C/D/E/F/P/R/S/T/V/W/X/a/b/c/d/e/f/four/h/i/k/l/m/n/o/parenleft/parenright/period/r/s/t/u/v/y/zero)
+/FontFile 2707 0 R
+>> endobj
+2709 0 obj <<
+/Length1 2547
+/Length2 20849
+/Length3 0
+/Length 22304
+/Filter /FlateDecode
+>>
+stream
+xÚŒ÷P\ÛÚŠw÷` ‚»»»»{»»»KÐàîÜÜ ®‚;çvö>ggŸÿ½ª{««è5>ó³¹J2e5sS ¤ƒ½+ #3/@LA•ÀÌÌÆÈÌÌŠHI©rµþ-E¤Ô:»€ìyÿ¥sš¸‚eâ&®`3{€¬›-€… ÀÂÉËÂÅËÌ `efæù¯¡ƒ3/@ÜÄdP`È:Ø])ŽœA–V®`–ÿ>¨Íh
+rt%üJTÔÁàÃÀÆ``å`°0³q¸À~ÿåŸüÿ›û_ReÐÎÆü'¢Œ½…€çïÀµûoîÿ™ êÿ¬ àÀs Pÿ{}ff3ð–ÿÏÃÿ—Ëÿ¿™ÿåÿeìÿïy$ÝlmÿÒRÿVÿÿhMì@¶^ÿу§Øͼ
+཰ÿ¿¦ZÀ¿—Xhr³û¿ZWðfˆØ[ÚþSD‹$Èh® r5³ú{€þÛpx[=PÙÁôûš0°03ÿx×ÌlÀW‰ ¸S©€àUú_J {3óß;ÇÊÁ 0qv6ñB7Œ8
+}Oøk'¹®¬ÛÈ™\ §¦Ý(˵ŽÍH¼ße!ºÖq«ÙkaN´Ì3Óð
+˜ç"K®Cɉò_ÓæíAfËË-”õ8/<Iú(#‡k½õhA õ„÷,óö˜ÑÆ]ltLËh£.®ÄrEK÷&]ëVéÉÕ€LŽÜs¨ÿÛbÔ´³Û±ì\Q¬äø2çѽl6žSÔA¨Â QÂi Ô÷ü¬]I¦I;ˆÔª`½q³¡™Úl6öL:·‡»”«È­/ú‚>¬â»núéa.Sà¤ë9î%í¡!Á\äc èÀ,aß’ ·=ºLaLºù¯.@3Er+
+¬îªƒG¬ùvÌ® €Ô«Mãa»Õè¦ka&íðtâcå
+ÏK†|TËön–š›¥kwP.¹´5…œúõù‡!59D°WŸÒ:>÷Ú oâ©ê{Ⱥ#Lª:ÞÖ^ìRû‡Ÿlx‘ò"ã4ÐM-µõÛ¼ëã[òÒM7%–èN°™1ª DÌ̵_ ²+2å±,Œä®åšONŸãe!lãâüNû¼È—íª{ÈŒ(–K<Mg~9r(ê½Ðªz¹¤§¼;â5e:iè|‘{€Æò±(]ÚðÿÈU=Kú á~K0‹¦·Œzb [e!ªÇ“¸MJt²™F ß"ë«mTe«ÀTÁÁ›Ø熀ʢ/ˆß)°$>‡Å7IHs ^R;Õ¹‰àûÜé)©|8ÉeÈ•Ý5l‘gŠí3ýÎrr·¿ý(/8„[p;„ß·†É[õÊA“64 ÎÉL
+$ã©ë‡ˆíZ—{Á´2j¬Õš[uÚï[¥Ö*;e@´¾eÏ…qI0ZïÊ® ¯d:6¥ÿ1½Š[ûcß;#çhw¯K3¸Ï²À¶éŽ`…Û¨ FªÔÚzÒSLR½r @‹¼ƒÅ(›*=YOØO”;E«¤$ÿË°ëg xKË'Ø_ë?à\Öäˆíˆü<õn¾‘1êŠY®‰äÞ¯T’ŽÝ@]óó¸O’ˆSO›[ñLÒ“Ä8ÈM³O
+uk ±çpI$Îz£Ršaí@*³ø£‚9ò¯¥Y™$O'ˆQÃW¥Ð¾ÔP鬂›„d´qAA„ïßFSîGç)!ã¡~ç"‚œËwÄ@¹ÔrÆêfë~ƒ¤è#¿ÄKW+Øÿ\tEÕ?ž–vÓÊ«?z Gsdu9Ê_²æº¼èYdÍ‚¬’SÍÀæ÷)µ€tU[ÍÁ
+]ñ«°Ó©°ÕM%:w&vÉ™ÉZ~ò¢#–A¤v½JH8t"Ãiâ¦öN³súÀäæ E·×¦æ[~vi â~™‡ÜÍ6£ ãª7¾|×Þ°tÒ™cEz„z9
+[í’Z¢p~\ÖJ<
+ãˆ8ÝA”¦>;• ‡ìƒZÈá\ñĈ±²Ï}uT‰•ÏOÉ8Q Dy–ê_GU^Ô*øRIï˜?-Ô°UQBÒ+Ésûúo’ÇžMž¶ÍëWªw°¤h÷ÜßÛ°<Ii‡e÷S&"¡Q9Øvà3ùõ¾¥…2@GðaB³]Ñá8èÛbLèµí×5Txë>ϳؗªëÌ‘>6´]Ø%2©+×úöE Y‚0jø›VŸU3K7Sšy–Îà‹ˆ%¿ÆýBʘÕÆ‹ßõçÖf(Cºè‰µ7¦?ýmW’<8Q»ëxLÐÕ;á„¿ÓVô“`~&ëB72σ0_Ï…o‚¢ÀõJ!À+uÆAVU÷*øÍ©M:ÄÍ¥z!à=_ß·“Ĥ£9ª{Š®Ôö‰‚ˆhäå¨È#ˆo•Ð^¿cŠ¤Ç8`xšŸI \Ïdd*QËƯµ^×»ÃI¥†~³213e
+WŒæ“§^VÁúÕžb}
+aT“ËD¨§w˜ï¬àB&ù¾“Újx–Ñø~ÜU-v´@ Õ‘M•ÆÂêqA}Ë‚HJü³kP€>å;Œ÷Ñ.ªM¨©Í9‘»P¤¬º„7󆶑¥ùºúZ·D×\ò¸ÅÉSãGt$"5ÜScž,ôôå†BH¸Ç×;3þÁ‘ÒE!ñé ¹kƒšûÛŒ]„ÝnÜŒWÑoRB¸õÜä䥮3<wjø4C˜3ƒ¢;ž¼&[‡aûð51âTéF„ü/Ô(\7¯™Šiòï¿Pα<v«CmUsò@y9JF·^n¢Ÿëo¼ó„ò—Wl§™<Ó܃IXO¹i8#Qb^#¬Í˸Žš%觖£ xd¼ŒxÝx+’³%‡$åÑ™èœÉ“#èE•ity°Kõ-D¤QOlmå4,Öàß°CšókuBƒ aÂ9ž€VN¨žx mÈ•c5«&×çׂ°ÎËá¯XåË¥¤&™—´‘¨ØªØtæû=ô©Ÿ¿mk–Ø}nLð︙~™£9¹ó•ÙñÊ*
+hÉ ÆCÌO|¡ŒË`¶·ÂG4ódz‰ •£ÆËÏ•ëúш‚v)¼~™AËRÙl¹}?t x±\Ô‚Y{+¡GªJŒç…É7GSˆ÷ .©³4ÒËìF„' §ž¾>ÿ‹¸ŸÌ–Ój’ú.QU–Š=j¦dw"Â[œú7Pë&ñ U¢U {ÒFm*­ÈsrXˆ)ófâ:ŽÕiX!!‡<R×ñáFfh,¡O~Á“爅É:ÔÇÓPYþfálnF{ÍR–èDZ;í—i*º ºèÊJ×H©t·PS…"çP–o ’ |‚ ݉sQN;HÅ¢ld áiT½”¿îáãÓšr«ùÔ€Õºl8Qgp
+c±±»§a¢ëȃ)Åç°ýª0éi³'R†o’=ÞrëÚ…¾njo7
+?»÷Sïʉ¹Š ò^‡M$ñq˜‘]ˆW ćÚâ° AŸEÂsRñ"l96¨A"o¬÷ba‰'‘ôI¦dDe¨Ò:ò"ÓþÏN!?¿ã1Ÿ¬0ZdijÚߘ9ÐÇT[®qÔ8S„·Þú„ÚÕ0s¬ÃîÎ8È^;HÇ^ˆ5¶8¸ù c¾(³øá~G
+¦Ú¼æ§Déµâ;YËr˜{y—Q'k‚Ô&‹Ñeç£øè“ЛKPþèG½£Z,lE¯XCýg'^Ä`(O ¬ê¬·XTÄ!/¥/jß÷è6Õ)ŒŸdiƒiK«•œÇx‘Xê;¤LÐÉ%µM;àX?*IÒñ~+'8bS§ÑyCm¬ù*‡Hò¦¨®]÷ÃtÞXÜ£pdäZ—ovýŽsaü¯B1K9òKXî´“p(­ø‡Fè³üodLÅ.€z§ñmÂS%”ÁÄÅC„r\1¤Ùs‡ûCªÖIY6¬"™‚»TD!†õkûªÞÓQi4w–Ö"kÉï=#LE•Íùk~ÎÄÓÏ’¡õç¹ÏïÚ-"É’%ÕÑòW×1©ÕCõA
+(Œñøië­¨²m=ˆ°Ò)†˜‘o»¿‘äD¸ù wƈ–71««¨,NHü£ï'©>Nl/)æ¹ÜOAŽ™Fj¹­œYA:¸ð:öv¯yáRœu˜ìø)ÑùS=ÒÖŽ”„Jbã'ŒØÔ¨”¤‹ñ$²¢ß²UMgNówÖq¿*<ªos¿TÅPS23Þ^¢¸ö$#ã_ Dæìß6&سìZÐ콧W€ªÙ›ö÷v;ØëJµ/Káø}Jn´ŠßîPmÞxšEgzÕ,˜ëå©”îsâ®e.œÄ`»ÈŸ¸¼\˜Ï¼Îa RË€¥Â¦BëŒNÒ˜6èÉ6ÕÚÈ#ËW\/r\Â1é?eþ`‘Ða›°fß>‹(!‡Üè·/æÌ{Q{EŒ±;w¬‚-P°ó&i{{,[«‰
+—Û‡$ÉNLc±…¯EÅõ…ðG¶^u´îF9&†õ׌F_(vÒ¡=1~]àäâ)žÃÎîƒx÷/é÷‚m;Õé†}ÏW·éhf°\Ë»ùÔÎ9¶RÕLèË“„‘’Q)§I !¨l’Ï¿HKr<†Çâw& Ÿë£ÙáîèwLÄLŒ+EÙNShãGµL„JžÆ¾bÛûHó–Œc•‘¨—ä1áí'o@ÃÑ\ ÕSÍ,ÏI=òq™)ùbó92Ðù+§ò“Š§8ˆíssØ=e=ž¸- l±‹ÝkîϪ Át ó˜9“¶d„³ÐWàpØi¥x>¸>Aô’xÅžkë&ç¬åG@SsH.É­xXŸ›wTÓ¿îÐ}” æ>ßgÑ;öòôÆ°ƒÁ£{Ùäiï…»ø<¥ö<cò¤lBYÚ) ¥2·ô&ájϵéûà„ DnôD2æ뮵ÆV<R¿*á‰ÕìË2U¾|?Óý(SǾUí¦0ʇñÉL‚7.Sm˜¶©=¼ñ²x¿.øIš+2Ó{ˆ‰¤ÿ “=¨Xœ³ÛQZÑð¶me;ýjÅ®fË,X:m•>@1íøÌ,† ŃN‹Äïx SÁ}=K(7åÔ”×Ä9ïŸÿ–ÞÝJ°ˆEZe¸D.mà>-u'qsJÅ
+Þ}€Ô¶­E:ÁÔOð,j]µªN]F<z©ânN8—ÀÚþÞWu›Ræ¤6M1—6ƒ"ôŽ7ÃP‚Xp9äÄy‹Ò‚GV×3xãó”(2ƒ‡²ˆ¯)q&|L8Zù™²/
+œI85¯›gÎÑÂáƒqJô‚PR ãl‰˜!ò.»ŒîˆhûgͶ:ô7[V‘ŒÞq!(Ö¼UöˆÑ$}gÕ}0ò7GøíÅ¢†tt‰Îµñ%Ϭêi GOçOµ'Þå83Ï Ñ‚v´(v“ÞÃÕŸU?BÚÐC5IÓE¹Q÷™ñ³OÖ¢SÉùîô|šuÚð4«0œN9™³úzn–¹bË÷"£âgZOžtõîó+¶x­ï¦Ü
+MUíæ¿‹¢u´jJɳک¯ðš­æê¿Ó P«IVô°j`²íyq7¢}Š…B‚3ubi348mmìïa14¼òíÀ5‰Ã‰°¼þò®æÉ„Ê¡Ó 4•€Ö9QÔÃÔmÞ@ývéÓˆš»#œÆ-Ø~yÈ Úcpô—ò¤h ê:ÐvÃÆ%éà#Ê7ÕÜ I'àkOGð-‰á/ûˆdüÀ‘\—;ù}òv“¯œGéGr1´7(ËlT
+]ñTú¹…£Dr•ccÊ/&c’·
+ŽFèЋ–Mïý)´©ùØc%Ãè$/õ
+“ Ai
+
+·;qÆ
+ΨCT/¯ëóKÉ™’WyyÖP¤šŠ¦,¿kN8M¶¯ÇßößÇ5…ƒtÒê± m¹ñJy÷’<ÌÖ/o¾×c…CƒŠ¶ù•š¶ö¼ª¼¡=ÙŒ2c'\%=ný¡C‚²BƒˆæctLt©+†šëRåîmh鉇ëƒî½ËRXïBâi5 ä[ŸGûýðY£T3û¯§Ž‹†Ê-ƒ¬H½Mù‹ÙÛXÅAM /YhÖ´o€øu9ÔïH\cO0øeaRﶴ<qæBpÞÎsNº®rÿày0þ¦óÊæB–-qeÔ8À߃ZÂ+MXÖƒRKVh{º~0±fU.µøJÈÚ ó=ôv8¦7LEq/jdîŽOgjä•#ÜFÖØ÷Û£vƒùšõÞ¦É[È–hä§sm?—×Ô(‘Ô»H3*p)Z´y 2ªXIYW¦õQ#•¦<èÔŠ1ܱ]à
+ŸÔ£P#÷ƒá4c5º\nö4<·Kc¯ô8²S¾mWï=yî3'>5AÓöôM¾ù…‘ꪶa
+|^ÆádŽ» ÕàZ¿ƒØñåm›©Â•“ÞÆÚÊ‚šÇ8ðé¨æøR? ú`›|p5¡ÕZmï¾üà@U±5+\UÚë5µ õs`ÍÖ{fÏÛ¤MÑ`«˜‰u.-]?‰ÔÝ‹eI›’‘RŽð‰@rw̦r¡RF"O@–Šu¥?ÈK
+«å«ªÑâ÷«ô§Éð“ŠÅ0ãÝ÷ö¸0,áã%}ú?ƒ+øø0JóÐa‘ç ÜÏ`ÊK~a/}‰¥*½µ¹ çÜFèý6m#KñqžRÔ£,‡ž£…&ËØ=‚¸ ›:ã£úkó²•[*£Û˜?MËórÔiÙ­xƒ4‘ÿ÷²z…“p°ätŽÈóãýÚ›‘ŸG¡IØyÍ¥Ìl‘Oß›­£  Å6wVÃÄ>~ùXS=üLwÙj‚ÑXÔÏA¡k»v"8¿mÆ:Jù]ÃúN
+1`©L³ú>õ“Q0ð‹I”%íÆ/O¨J嶯ÖFFŠôŸ¾¦|t\/î÷yõT±Ò$Ä2ñ5šå‡ È×Ëï±6`@}hß/‡
+A[Uˆ‰Ön¶!Ö`Ù "·ç™}ê<_'Ô\ß¼ñ…:xJ4뇤éC&[¶8¢þØ‚r¥)¢ÄS8_š¥Bö´0ÒæŒâ
+«€z
+ƒœ™Ìü•·ê͵TuqÌ“–n<OïÑGZê”×”/ŸTrA˜É­E‚¼AaŸÞGÙ¦ØͨÇÕ¯Å*í™X¨ñµªèÇŸ‘ݶ累Ê
+L‰d•…9!û¡j›zvþðà’Ù
+阪:1ô˜âVõ§‚'ÐZ רûcn7N׃d9_7Ô¡Xšm¦ñÚpŽx{ä;hž £J™? ð«`÷ NQ2Á{Áb£˜5î)ƒJðUVóIàêe¶èŸÏ¶+£
+ß—}ß
+”¢|âf"z“Xl¶b”>0ÿµîD‡—P³TJÜË<Œ`éøDÄòÖºÅuÙŸDÆÍdpÕWªäÞ:t8±É´¼8z<3A¯¤S¹xD7ÀxÎCd†¤
+ù˜
+‰¸põdÎÙŠ‹£Æ$\4†÷on.VôÎ
+4­ŸáxBÏoú$mÎL¬;š“SêðZŠôlÚáúåIÚ̼Ï3$T"1ØÃNÁ¼v_ÃÅ[vä÷4Ù4AÊlðîrR¼“åÞ†·ú{¦),M8—Öp̘`g”··;óÜËièRl"èó£ôùdèoÚ½(³±>PL>ŠåñK=7ÅÎýu¦ío"A!ôé¶?Àó…
+ÊÔå¤Ü>߄Ó/a^¶Ù@eÒad—æŽ}x¡LúÖ²SŠOþËöùc*c#.%Fb±–˜Æh +Éaq_«Ì ¢$ÿÉjpÊ'‹Iì"½x:Í'lž8çí XUS‰ŠÖŠ RÈfSU…*ÞO—þÊÄ=в–ö©k½ä<^f’vüó<®¦‡XóMƒò-!Fȹ
+(l–òµC¨ÒŒî/h&¾ÜÐ}ù€)2€ø5Áåöž„žŽ<Nâò§r€yÍ/²!Ñï+¡\FïºU8¼îµ‘˜&‚ù¾õÅCÝßFÓvL3Á}ûImb…ÐŒdqúMøÄr|e²,iþ $á–éW*{}™ß°]qÛ^¯ÛtHüz›‘µþ®š;é4¡¯Ç¬#Š³§Fÿt:¤¿ÍFO:.púòÎþ)«¸®Åà î÷ϧdW÷•wæmÚ‹©á)$â}§‰µ<F)‚0J3´PÊ* YÉc»F‹
+â{æL|J*7o¡B ¡óƒà3ͼ^3¾tÇRìˆø{I)‹5 ·ÙÓáv‰|ˆ«jJÐ*7ræµüØ*ùœ-Zw#þ kºðÚØçš[8§ ãÏyÎH&3yxй½RPŒ¸*·ŸÚs\ã’Uz¹Œ2Ô]u 8¸å£')Bái­Û¿Þ2¹¹TÃáRáÍž^J/@jÝÔÑ5-–ŽiÛ.·ÉÝ=†ÁvÎê)è½&©\ž¡O¹œîéñòàxw8|ß>x¦tn
+*Ê4 ájD§’ÕÆ[øÛ/Bó´zØ(w#+à”kV;êž*ààU}<¨ˆkº}4#›£?æ ÌÆ ì-I2ú Z+Ÿ.š·àiDj¥³}û´i¿B¢¥Y´Õ•H8Œ£{ñBΠ})QÒ³Ó5æ›GT¿$§b…ƒŠ¸\°Šdì;+ שl^ÐâzEŽ³&:6™uºÍ¯ñÈ’¿àΊ”hÐO.èWðüæËù™¢¾²Òèñç׎5
+îªÑ ÒIeŸCµ67k-‡k<)cßõË=“·>¾ª.?®,K/Ùc éK~¯5º¨üêí;—()Û
+jÂ’ÞÛxÍô¬'(1wû¼«÷Ö±Z,[ÉF[Š·‚‚ø!6mÁ0øWÖX&.˜ê»|‰4†Øæqî;X™“Á?SRd/YxÇq>-ðÈc
+ž˜âÃMoa—}­îÈÊh‚S‡GippZ£øÖ»Ll40K³Y]²åÄÙÚÊpNzÙ¥·<S¾  $­„¹ã:]ëÆð7ëtj2ß”i$Ì@ïÂße7Ÿ¸‡D·Þ‰ò}ªóí…Þ$‚ýŒHå•šï˜"Ø?êÓÄ×Ï8£m_ÂKufhcãE!_D§.tÛàš
+{iƒ+=0Ö§ž`°j"Im;GüÔTÃn¶¦,â=ÐŒè2€ 6´CêWØMûÚYó³«W¬V÷s/ì»p3ÏïE F°| Èûy»)g¸Þ;š=¾³/ÙΖðòÛnm ^+ª|´\ÜŒ r/âôø‰ƒÜf‹Í¿M3½o ‰Ùü,ìF¼•,×äDÍ(hSË‘«ªëÁ/ }¦<¢À2ëáá9V¾Wx†ßÀóyE]lž'=ÜA> Â㹸õ‹ô§¶’*jÇ,ùiZ‹‚ ®çÕ‡Ýî
+ý“ óvsp+ã-Êßšãc°Á—!Jfl  ëú˜î«I“nɱX3n7¼õŸ‰Í Âs›·äµ$²NmocµFÒÖ,?“ÐÊ؃XÄòc6·ÂÙÖU+žÒê¡úôá‰õçл’fú€rn½1ñð¡uˆ ù< §ï¼Tö‘/ËÁ;» Fm'ª4 $UÄêíSÿÎuVûrÕ ‰c•¾‘u¤3²Šu`º²­»POæQû«pWºº`¼¹Å²0áuµƒ~¨8~Cj”¶–§÷©üîýØ[+b2ÛY"‘:.u¢]ò,`—¯WI­*6ˆ Z }FËòm³ŒÀÏÛ5þäÂRé·tšTC¶äðmç$_ÞÊì{cž!X'éô£ßR I<B1JX½Â½C.‚p’!N•_Óaqóó¡\_Œ³Ý´ÏsŸàAÌÀy ‘"=ü`B=W¦®ýCeZ¿X{å ‰!þº•¾<—+)WSú™!ÑR
+»ßªô=‡=PñäI±åQÏþlÙSe»<v\ùØú„Eð8¨÷ýEÿSLð·–”á¬x‚ç<Kd59¼ÙŠiŒ/‘ LoSvºw}̇,j¶uh¿³ÄðëÒÇB–D)éKîzÔÁ_Âc®IHéÒœw~}åäã, µ‚<×í•ÐøæûXi å£#W“ÛXÏ+?| ßÍ‘ÉŸÿ3Áä)†òdSK´-:ÍèëÛ¸ž¼;©ˆh=ýÒCS¨uZE$þÊœ_[öË¥h4ææÜÐ&e»¼±úÌŽ',žâzËÃvÈg'þP³—?ÌD%I I÷}âÍkEò®à_ùÆ,ôÜ^•Û”=ô—sÚâp&c˜>éú,–ƒŽŠD·ù’–.Âøyç¹%wüÊʶ—&!u¹*MÏ%#â¸ê»Ô? Öó«ZìÛεÐT§×ðËG=9E[€¶©ý?ìÁ8IÓ&ê@2s½1ìüN{‰¾4Ÿ Á®‹~3^ñ"d*?Mwî¨ìh«Y \]cÏW3²{©ó%Ùƒ£vUjA…ÿõçúƒOú”õ.½\W³zë±*Ä…wC‡o_½<&¿â Ö¶ŽÔŠ”³Þ’^Y`,ç¦Mf3_—‰4Ä©?꽑dŸñ°aÚðQ¸M #¾6mäü˜!™—VÕ›’B#”µcåmó:¥ ƒÇ»ÞsS´2 ÈÕÈJE›íõ#"†½$ÌâÕ–õAKÞ/knÐùЯloÂAÇ7Ò¬èaƒÍçxä8oŒMÕÆ+µhEr`˜ ùû³€ 0BÎúÉoá$²%q=×ȯ:$BVÈð/«G‘‚¥+~B´­õ‹Ê.émî9Û#Êwe{Ç£±’#l‡À¬PØϬ§›eîF½áh…•Rb‘„ª‘âÉß>{ßä~#½°ÔØlEÖì D´\8÷Ð)®8BNøé}¸¾m†I˜KÁÓãÌú€Õì›q{8…8¼ ¡ï¯*ÖsÓ™ç¾øöåÊúÇEŽI^çàBzOíøÇÆ«çÅ'¥à9ïÑ˘Õ
+}õ°DÈD!(¬Ìo‰­ænväãRµ:YÐáHÝ{kÖ» ¢Ž×)ë“‚£MÛ²éņ/Sù®Â_‰uýÜl¨&G'-£yì¾óô{‰ÐJOZÔJ-Ðv›ú“JñùQ.9žÑ¿4;X,—9L ‰Ï :yV0Æf{#Ï.ˉê PC ¾]¬š Ôx»xOïÛëXoËž DÈûVÓžßdz+°éöÕ«›Kƒ»:å4xOžæµŠ*[V²_ÝŽ™÷U+ÊCzì<ÓÉìÉWïT?ë³#„ µJèQ V«Jwœ/Š ¸9œgpôÝO¢N¼‘Üɸ¸N6ȼÂWSŠéfUÈÏÍ’S¸Ê"êÜŒ.¥Ù¾müù}»ÔàŠÚ|t¤$‡ëè½²;
+
+êa{îßWJqo×â]Ñ eÊm9îQ‹¹®Ë…Ÿ¦²`•*¬b??RT:QûØú£ßÑe|ô`¨Èæ°ü†; DŽ¹¥p ƒb0ˆû %œ Îêðõ
+N‚Lj¨uhó-¿‹PÛÜH±QÊôû²óæ±¹)jæÕøÛOð7Ŧ_n ¨ð,ýñ’àL"â„–¿'L»ÂðØCNµ é7Ö)ñXòZW榫ò´)\ˆáÎ’ïÖâD'ߧ1 þLB€ÙžDƬ /¾ZÏ ‹²ûT«êbj¬1«í“¡ßGJBEéì¹=o£Ûi_ç$Ùç/Nç3‰r¦\…o' ql\¹Á_¶tÍ'g5:H6Ü(/hJN‘R¼\Ò ‡
+¿){ :-hœÂÎÒSç»®óHæÿñƒhqÉîRG%ªÔûTý½¯/@3/ëóôÍ)}óC9O–Ò\)Ìßs L¥zÞü<Ý“Î0èý]Q$Q ™kx°`H®È–Ó–PEGÂõó1'é[CžÒj*Ž¹°åÓ«Á
+Í?ÎbìÁ¾)–I/f”$Xµ>,Óu‚;¨{'$_ï
+¨‡xî‹žû±*]3VL a¿ê1A_„Yj‡˜ø^±2"‡ÿ¿l•osëÀæ«ÍJ
+Ú.sôNœÀS/ä¨H‹°Ï&­JV1Ÿ_Û¶ .¯¢N‚7ò,4JÓ¹Ê~òÓJHŽ0Ì9wÎK~ÆÑ´÷lÉÌ §kldT×â>Z:5,AÄßGyG»aõŒýJ,cוÇ=” «ùvÒ);‡¾,ᄃñv}mg  ®§Bxñ–çäϸ6ÍW•|S2{6Ò*DO%€Í¼Â èy.ÌâcÞ3• °%ó¨\èî8+/ MUFDÉ 2ƒ­èiJ¹ØQo›ƒú)Ïs:Åÿÿ^¨ÆyujÀSƒþOÒ´œ 0m¡$«oOãê»ñ”Z±1!X+}hÎVö’nb"¿MŠB©ÿb…¶Öý·Bš¼_7@ƒpár£ø~ñ9t©±ÇÀ °XöÐ9Øt…Ïjz5ŽIäÃiÚ!n>¦ƒØ<"±3«§ç-ª ožW®ÇÁ*kN]D1ºªºœ=Or
+εRšò"šÊçÉ.Tä«àßaæ~ûç%Uý»ô!,g;ªîÓK
+hkÀ‹µÑøzïŽ<Þ[:¤’~ñÎBúó’@y û†Ù£Cý€Äîº$ü~Æ쯊ì²)voáÆePVÿþìP5Ì ¯ïö~ÏŸŠcIël!ÇUÔ+ØH4w÷ã`gW¥;©5Ì£ÔZrçÊTz.JÔðÇiק„»xB¶!Z§pW‹‘ÝØ kïOF¬±%4 ¯ÙzíôD¦6ô\.¨©}Àñ¡©Ti†y|¢n`Ný
+½49eï„Àcê‚Ö›óÀ’û à›V|TB¾®.¡ÈƒeË’8o<C<»³6²§F¤Ä{]ãµùCFH}¹hlUœ 9‚~‰Llç QŒä½ÎK·J,A4ú*ÕQEæÁÏä âúÈäËC|‘¡]#Óod .º†"D-Ö€fFUÛ.Ì:: æõ=Êö¤’ƒ)/‡&P:$M‚;)Úª3½@Ý„Ôù…‡;z0=¼íèñÃ1c8ª”s¢_[Û¡*ì9ÝÂõ))‚ÑáPÓ L@fa¥>PCõ~š&uÈJõÙT>ªô¿_Ç£R-ÿŸ±æ 4ÉÔŒÜ/NlcŠÍf·ñêîGe
+èíQS¸Åñ•zŠP…¦ü†ËØppbÌÔÓ‚ºpXÿ+Qnæg3f¼å6ת—Ýʤ¸B¾oô–Úò¬ë «¡ÚáÍ£ÎÝ5eµ*!§¯P#¾Ñ?ó½„í‰Ðð€Ëßà€ŽÑð
+X‰<“ Ú[–n™<›4£f4Ö¯1çþ‘%«W=~ÂczW®îDg’4C†Z8)<؇֭x<¤‰®I!ªq1€˜66 bCXÓ¦Å;N,Q!ó´c
+QF<…D=KxŸ;Y"­Sclˆ¿rMK¨¤E žMk‡*´ô Ê]Ô¼¹G‹×Þ6Bò¶±÷˜ÏD®Ââ,·í%»ôÌ1¶“¥³¡§tzC;A‰´'Ë¿aÀ]ÜÔ´õlcžQ¶7.™|rÅœ®ÚQñ*¬è†Àž™n„ÉÛ–
+õUO.Ä$&ræyßeíÕtŽÙ—€š¢Í®´Y-š„dƒ$%hQžo𠵋ф”àÖAË ÓœÅ¼]æÔuñqŒ¹Ÿ`òíò¿ÚäçêN?Æ=‰ýž 2;!®à KS•˜ykÌd΢ôÌæ‚H›Õ¡¸‹C£a#ÕÅp£Ÿ5Äéu¸ÝÅÒxÚO•e 7É çºšÿ€Êœõ·gVxküKí8$l·÷a†˜P ˜gî Ô=3„ýΚzÏŽ29h)¨¤>~yšouÊå±U ¸¤2‰¹ –gRe¢Ÿ˜n)݉ɴŸ«ºŸ’Ÿ¶
+PÀÔ͈A{ßܨÆsÇÞz0j˜P@D|‘ØzcDjÅ ØÀu)`ßYÎ,e[ÞË<ŽË† +^,¡°øiÈÌ%b|ä‹ gåÔ‰_ Èk¥””­ÆÚ'oæ/»™Å²ÿÿGœ™
+Ûß*¬À{°Ê‹æÛ®…S…F"?»ë±Z®tìö\#âþ[>’oÇH§?dÍ«@ŒŽƒ<=J‡Iu|èÂà&RJuŒ]—já:µf->Q¸ÞØÉ1zõ*Êu´Öêï{®PýZ=Ì­ƒ¼%rCÒŽ
+smáé3æµ¼n“ ;Ÿ2<£7x³æ‡Q™~–ùíßH4N_|ìY@x”šf\ä¬1¤>뀖þ%o|`AˆÙkÒ¿Ô¯_™¢ÆUŽ3EÚwÀÅÔLík¦´÷+f5ø††8¯%Í|#±ÇÆC‚¹äšµ¡­
+pÿ¿µ’Þ§çºeFœG±´í™i‹%SùGÁ4ˆ9‘úeœ«‘Zfî #Qy Í›_€ñH1ýºÌH ç'ß¿3©ôž.Ï·2ìø úŸL¾ÜÉ?T»;4ÊLÄŠpÑ*6☦YÁ/Uw›<ÆF¤¦¿hä3˜/ÇÕÏå•S鞤Lç¸'
+Þ±‡¤,j“ö@=m$e
+l;n!qD‰Ò­½p'ïv¸ WÑ„vˆÎ·ÝF tG¹#OÚëðv¥Wã5•‰T0Ë
+ÓÁj°ã\÷›øU{ûbd’i Û^ÆKJë©å25O‘­G4¯ݳA\;ÊØöûЬC4m8CmÀÂLUªs›B–|A»Š%’âËla{¾^«.0á|ÐÀ D#EC›ë9Ìcm…èaûLUZH@Xî[ʵvN÷Ä­0e<íÆ'8±ïO,¾¸/­ûŃÒrŒ€R­G6-'k9$Ö½x@wc'w4¤ûn‰Ìo< ?YÌtÛÃäh²œ¸ÙYüTWÿ¡Oü§95p±á°R.÷¹Êo¿F´Ù5U*0A[‚ŽÍÅÆ÷©’¶ãù‡Fî°k)~µñ÷Û:o €CºuÖ mîK„ÚóúG©mÃÐAwU!Uø}ÃQ9 r_´2S:~Ž¹Ûu=Œq"äjê+%ùRØ6ÿM:Ë‹Ó{‘Ð\áóˆ;nå9Ý(Ë9¡êª÷=$Æ3ÿŽÊJפy‡êÐv¼B€UÇ7 6M6ðMzüqÆiÏ"øâîì ÿ2€)çî¢õÛOH«»aXm °q"ë^£D: Nuâ5kpC÷>âý×ÑÅœ ‰\ g®zA *}ôÐÊ\Í 
+<‰yÏàYnýÕ£ÔÌàƶc7PèBH4Èð;9Ã)`Ó´ŽÃÄäè‘ ¹³zû”¾—Ø¥ŸZŠÌ¦“žò]nó,‡Žàb† g‡ñÃÌ­yw§ Ot)Z`K"~›”(ÓÌ+Uï‹9¥¯ËØ&±¦N¨ªK¦[%3záÊE Õ“ê?kþgV0Ä·¤·OIpÜ%ô•ŽÈ‚óvX:ñ{b•ÉàP”|Š¶a:g ~9kÀú(Ý‚ŒL Õ„.¹@·’ç*ôyHçNݳ^ /†7—#SC~Ãk0fú<Òì¬ÖÕD½b‘0œ'IæXïsîd^Ü2¥k–ùîׄxS@9h
+–‡ú;”U
+endstream
+endobj
+2710 0 obj <<
+/Type /FontDescriptor
+/FontName /TACIMK+CMR9
+/Flags 4
+/FontBBox [-39 -250 1036 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle 0
+/StemV 74
+/XHeight 431
+/CharSet (/A/B/C/D/E/F/G/H/I/L/M/N/O/P/R/S/T/U/V/W/X/a/asterisk/at/b/c/colon/comma/d/e/eight/f/ff/ffi/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/q/question/quotedblleft/quotedblright/quoteright/r/s/semicolon/seven/six/t/three/two/u/v/w/x/y/z/zero)
+/FontFile 2709 0 R
+>> endobj
+2711 0 obj <<
+/Length1 1531
+/Length2 6918
+/Length3 0
+/Length 7936
+/Filter /FlateDecode
+>>
+stream
+xÚxT“ÛÒ6ÒAª¥¤÷^¤wÞ›”B$t^¥7i‚ tÞ¥ (Uº€t¥wA¾èñÜ{Ïýÿµ¾oe­äÝ3ÏÌìgÏ3;YaaÔ5à‘·ƒÛ‚Uà0$
+wØ£h€ ö`Ô¾è  Ý=À~ÿéøç
+_@
+šºJ\(ÿË© 
+,UvhçCUBмLJz
+¢ºPz×a{“ùk©4
+WKóøï=AE>¸ÍÖÙæAåß
+'¼<¿2Ñf ÓÏRN=.ÚËlN˜D?ýÁšº–eP¹¥|¨IŠ®ï(ð†^%×ö¨¨r4€+J¨xi (*\èfÇ £õ´Ÿ‚‡rÙ>ÈÑÚÙc¨ ¸€ÊÒ‚8—¢˜ö+­õ+6-Ë\"ÖI>AŠÃ4Êt'âÕïƾ|ûcëÁ™>éOk䤉df燣Œ9ö‡eHÎÅd“w^æøù¯é
+½¬6Ók.‹¬ÈN}PÍ×™t!êý#‘>f0x×`ÈHW½ÖÞOc¤ô#‚:œ`ÿ£YU[þß®gW¨E~óYú&M|¹LµÐˆ”{RKºlñ_ /z&Mq÷3×19kÉžÖîÈ®¤¸rN‡‰yÍÜ—^Ð@¬©§È½ÖN±:J‹6ܨ·o‰
+<a ™†k¸•™ 5£mLáã¥d–|Øyü¢Æûåò&Ó¹žÑfAˆîÜ”‚€#®°Á…µºÉ/S~e„Ú¥!hŽ,ˆïeßshÍ3+Ú¯)CÖ7*Œç×GB;¥Y–§_e§¸ Ð÷Žm‘ùД GѤ[(Ïnëblýoj%
+ð]Åæ‰Çr*‹<|nyôŸîg©X&ÃüCÏ×q,Šó¼mË)æöཅ+áÇâ }^z‹q®9œVdD!¼Ó1Q/Fºwj4£Ÿž¾¿½¾t!$‡G-YÈwy™Šl[K­ßè5Bh©×]ß÷ÅÓáà ’ÑE|xMC0h'>¾á8Ú¤-0ÌßC+:·ÐÈ+p./ÿã´X^€Kã÷½_¦ú†n…Á-º1aXj¢÷Å7lòÁã·Í³¦¯© º…ê>ü½¯x1'F÷Y¤<|MªôPùSH²«k•
+gyÉYÍR†ç»Î¤ÝL v÷5醽D(gͮ飳Ž-™¶¬Gœ—4éìÑ?ÆQôH$³“$¹èü(Zù#ñ8Ææå“zª58·ƒM5ºÑŒØ|çÌO>ÈÓÍsàÁöÏGïÖN¶¥’öd&.hŽ,=Þ98þf¥)¹±(:|„zñ¹I°›ñˆ|É(òÊ?-ý!öwã°ûq£˜m7Ýà€‹ë éÛØ,Ôï™nÝ쯈,‰£búø€õN|:.Wù îjî.i§rARÅÁ±ì³)‚äƒôªúç³´$¼ßøTJhh›‡ù Ò‘ú9+-1è¼L´^`GjªN"Ý —àõi×ãýÇ‘ð:¹êšÕôà[ëÃmù‰@¡âU=Šo
+ôƧO™%” Z(¤ñŸYÊÊ¿¾ðóª²&º(TÙw˜ì¬~¡ùu={W¾¤üÞJ»ÛÛÑÃab†åwKãÂõ81ô‘¯ÇöÞèÚ?ø„WqÂ=mЗ'zºÖ†EûÒýu±EÒb—§Í‚¶úšq÷O;½/T™oóhÂ
+·Gyò›Gî~Hm,¹ÿy´Cåcf*¨º&+)DúAe—=ãý; œÃíe¼Ø|[^ؽÑúâ-ìrssϲ| AMír=Ú¬ê.Ïs_ɘ2¾wI É@)‰Ln™&ŒÕ¾^¾ÿä|* KÊç2GÛƒ˜Š³]XÒÞÇ[Ô€ŽÔ®+ì‚
+¾%ir–W·Œä¸¯uIØ`P°yk–>«§‰ÃÆÎL˜b-á´Š§Hb»É¡¯>¸fmô—Zé{ýü¢ƒ~œz¯úÞíö\W*ˆ¨2¨A*ÿ©›Ë.B*Óè[°„+£uz±^ÛüÙ:[‘v¶jÝÁ
+V† z_ÉÇwN–u÷`'B¦2ó}eç”ö‚¤µ/Ãï´ÛÂéâüÜîÛš±Ë0͉s~}Ö1øѹÄGè¾s‰öt­¶ÖM˜ äµÚ|iù:ˆ &‘bÇr2ÅPaÏ3¯à9ª•LR^f
+ã•-Gjdι¯3³³3³¥ðNæ!Ⱦ)ÿªŠ¤UÓ$]îxøä‡Ð‹óç® P½ª—)z›™Ñ˜¶+%|®'wêO^Ò¦¸u¨Œ‹cZÿœ’'Mî„íé}¹-pш÷cõ•”šêÌÅv9^³€ˆ}¥¬ÛÉyuÄÆIyãfdxvŒ”¢™Šu>æÕ-t¡âȵ?m®ÚK[Y-¸ôyȾVeÃ2ïWFCRÌئGŸÃÇÏŠXön>µßR(窘rv ¼|`ŸwÐÑ Ó{Å|ÅüVšœúKÈLŽì¶œˆƒÄR¨Œ:h{Šv
+…S+@¶‡:ó[a®¤¢Ý«• ¬Aw×vªjr§›<Rj’Î(P8‚™¶§Êv±ªø$½Å•³’ãûgŽ5CiGÍ{óUvaý]-­üúÚ0B·~OÖ†ª¡ Åå !m´MsD­—¡®‡_%¢­e´úR7÷Ï‹ÊÒ|£gÏkTÎŒ.u™Z5F""¸ÊÛ&Ì:Àbd²üåìiç¸;š,Í:Ig‰®{ìfê<‰±P›7gû’6S[›òc¸jêÞ¼\1S£³H©_mUðkò
+з2Ï¢"âÆɬRò)]MiîؘZÖõÇgüy3¹î‹ŠtkH÷@¿B$öùÜy¾ªÆ¬®cíSí:‹&Lõ!ëí¨ EÜCCJߥ {¼-<©ÉôÔØëà;6¨oeeéÇlm7+‹Ì6úxØÄ!8óOJ‚HWµí €'pÇbB/I¶ëŽ=W¶;O5Lür´&—„dgâJµŽ-¿?2¡’$'õdH 'ÉÀ2]•Ä
+S`HÆ‹.6%KàÕ]Q—”Íc4|à½Ûˆ ÜÅ87²\š,=nóóîM²HÝ»˜ ÷ -¤ŒtUçZ°­"FÇS+Âvd¼{M>”­á²¯(íúäΓӋټAZÍ`ôÐ|ÝV1$’ýÜCÕWRÃAxþd<Ž^²Ñƒƒé[­äÕgƒ´ônÏöáÃë3ŧµ²C[ù’U˜Dx«ùe¶°ÑO¹>kèM†ñS1 M–Kï!¾-í…zÃ[®Ì”1~ðºÕYä x–„Ü!=,0^.­åª -l¬¨|wM'Sk„Éz3]Úï³µ1Ô›‚c˜«(r­êî°j„ÝK"ò9!òy,«uB}g îÓ´EÕ²õYñÜçÛ„ùUØZžËìN÷‘Å¡kË
+Õr¥T4H×Ö#g±>î9ßm6{Žæ½4îhÀcb~/cäñ¶Æê‹!é’õÏ^Ú/jвGÑÌ—:"˺ëa^=ÖcÑÊü1ŒKBÑcÃLVãßÜ~Jð×Ø+÷³Kº2Iÿ²Íðf;«"ö¦‡w‚×bðt¾íØÜÂ-vMÎðkZ.Q½¯˜®q£ˆÁçUýÂ…§üóÁ'æ7z?èÇ5O N’š(½3¼ð¾tÑ…«4-ec±>e
+[WN‘ùáß iƒIÜGàùƒå’a¾ÊÐb4myFaR}nDí·\Žæsˆôôžzäa§—DéaîcMþÖÐŽ)¥ì•-×V—N„å,´Êû ›¨×ñš¨é[E’N% zª®Hûlv9/Kû"ãÌán‹íÀ§;±*ß¿Ñ[Ë yVà ¬êd{NTÑ6Þñ$À÷½Ú0lZºæŸ[$·}xž}Ç"Û×g4yŠ,P±à<%òÜN_~׆½/\Î/QËÇD¦ó0j]æ*©jËGn³ï¶Ùhå
+÷÷_
+=j’ ¿ôC)[±R(#«wBË!–\i䧃4\»|Ì…võí'hÝÑ7™2/Ø<ö‡ü)e„~ð×ÅÝïi{e5õ&õÇT&_£NBsµÎô• ‰~Iw±÷û¯;¸ Qz}¸§^
+cI«m77­¹ÙL3eÐlÛÃs_Éæš uŸ©'Ê3X]ÃÛÑ®î%ÎZrØrÝ`Öw/…Ò2 =CÑHƒ‹Í^ºà=Ž¯|®ú—KsïʘÖ{àg(ƒ“E.¹zçªÅæÇlÔ¸ä5ÍÅg_¶l£ôÞRŸV@ïå9õ©¨}q<©ÐH–‚VŸ²ð’iø>Ñ&Ï Ûº^» TÞÆá^ NJk݇“qó? yýh‚ÚhNp¼IfP jæ}
+q§žIËËP›³ñ$aNß-¼ ¦'Pj¹ëõòçÙÙQ²„Ýmé±{©f2ëÎ/ßnsË‹À†Ô—UbÒørd¯?Äd®Z¼uÚ|·¤9iþb³IPí«
+‡ÿ5]qúô9Õ§†ü¸mx¬wNè:^³xé=·¸›3îrT=‰ù}w³”´;…K>ß 'yÅð0ïFÍw&Rù`ÔE8箵êõHŽ âóæ sMO™î|wV±“ïÞ~~~F„¡Aô
+È;KÒÍGE3ïs/ƒ¯]¤Šd6wë´ê5àÖúþ1?NjÑþ°eþìè”U/AøËhÖÜEG¡ÓUYr\ÐÔŠæ“g¤Ñæï¶rî2Òªïn%Ô½}£¢±{ñdQ ¤q‚
+Î,=Ããë(4·¸hÙŽ1XÅK\ûAxäÚ……?‰á µäxÒSüÈøí=Ó‚.xjÖE @xŠáùiŒñIHdm©Ü¸÷>ѵ£­ämG䃀C…:™.Ü 7­±:éC²Mež©•q:L}l!ÿûa[v§‡f^ÍY[TÉRNkƒ†1H°õâNêÖÁ'ÂΚfò¹üñG9ƒ¼‰Êr+åÃî6˜ù>¸¬²©ªJ FÕÛ‹.ús,ƒY‰¸ë€O0t.º¼©¾ö€¾ÔTZî ìµÞM&ø°ð…x9øî|võ#gƒWeöA“íâŽA„)ìŸXF·JSMîIê:UðDYÐ+UÈíüˆËÆFÐ_ˆV× ¢ÅœOñZ]÷zžø¯G5-J vU‰šF]ÒXy “ÅP~»´B«_@Ka_ssâÅο?¤—gäô
+è!J'àÕp€¼kƒ z×%lSÉÄ|ƒ)lWl™{·¯·»Cô²~'~£x“Õ¢]xÓÞ\¤(h´ÉO#Ð[ù¾a°?/hDf‰Q9:ª¸ð*—½+Ò¢Þïв?þÒHoÇÐ8ÉÒÌ»E”쫹úÅlD{mÆöÇ®Lï;ž2£A|Çòž†®É¼¯NZŸ=Ï>ã//6˜^YEBìÃÝRiï•ÙãŒï.ÇÌ*û§=O[§&PËÞPΨçœÍ~Wæjo”g±A•ZõN–r§²D §ô»2ìI©sÏ2=àUãøtC7±/ÍU,DÂÍ¥”OÛ­~yÀÅ›¦"¸
+«5{ÔÙA.'æ4>»uqoÕâ{CEŸŽlØÚ“LÜÿOsÓ1‡_L<kÀ«†aŽ“KÏ
+endstream
+endobj
+2712 0 obj <<
+/Type /FontDescriptor
+/FontName /ZBLPKD+CMSY10
+/Flags 4
+/FontBBox [-29 -960 1116 775]
+/Ascent 750
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 40
+/XHeight 431
+/CharSet (/angbracketleft/angbracketright/asteriskmath/braceleft/braceright/bullet)
+/FontFile 2711 0 R
+>> endobj
+2713 0 obj <<
+/Length1 1419
+/Length2 6309
+/Length3 0
+/Length 7278
+/Filter /FlateDecode
+>>
+stream
+xÚvTÓýû6Ò)%2ºÇF§Štw( 6`Â6`#FJ§H7*)!J‡€„ ”J‡4Hþ§>Ïïù?¿÷=ç}ÏÎÙ¾ŸëÎës_÷÷Œ‡ÃÀXD Š²ƒ©¡0$PÖ5¾'
+sàŠŒ5u
+¸»û›†ç_ªàÿkc
+7°ß&n§þ]Wi‚þZ>1I)
+óþ-o€(‰ÂàB
+i8’Y01JÙ-ëøQ÷8¸0}÷¬ib¯¹[¥z˜hš~8Ç‚ÇÝmŠfþ‰ýf›Ö73Ó“ÙÕ™"¾›§ý®\ª4”Ž™ÞG‹#»?¾›™áY¦V-÷®ä¡ò«¤8NæD(ï,¢r ÌÊÊûž„
+ÈñÈI¾Ù*ÐûN±Ž´2› ­½û ùvƒ8{µ³Šp Kë[‡ËÚ®;b cmpww©Iö4•§ôü™Ñóœ~K‚<…y;}Ÿ
+3Áˆ®–¡›%êl>­êœ¶™  ƒŒ&Ή®hó]##Sšƒ±îtoëª^I §Ã'°›ŽÓVS¢qW£o«$¢*}«z–:^ßkœã§)=¡é¡¿ïiª(šà“±|¹ ÅÞ]üèkã 9»ÿ¦ÔÄõJ$6µ'Þ.éÌhA ¨ž Aó6¤”¾Ž‡OJgeãDÇ…©ïÑY„«/Ç6…©£ÊÊ=’ÅËa~ ÷n–¦Ú'þ¶ô’¥ri]BÛÙÅ¥J_]¥«ßQìv n7gô¨Ú”°Àwú±ì6â‚Ñp'Y¨¯ZaÓv{¨Aéwj‡(ü™z†@ÜòÏÝîÎ"—OH í¨›V@~m|[ UÉÊ æ¨¿ᢠ­ÈˆTj.áÍ• :Ô«˜Z åÌL‰·¾«!¨º œ?¡ìà¡À»|åø¶P#h<KAÛÎpê©YFãûšá·.èIú÷šÏi¦²u¨Ë]zhöz7†g8ÈDïµ,W(¬º ÄjäB•
+«ÉåÅ'ò׋#Í(/Þ%k²!B_ÄÞåðÿqD¬²Ôåi#‘^‰@/,I—,¬^Ægþ¨l'n(+@3Ž0}Ž  ¹Y ·_@YÜM»xt€§Ý·Ô ¯†G*¬}z÷$ƒNskqjŽyüÕ@5ò„3Í–¡AmO¹lÿƹ Óʾl »±ÓŸÜÆ”ÔNib¸»ï“kßZ]ˆ\>–±sù|•uu¿ìK¤”nù3¯v®)C.ûÊ@jJõ)ÑxŠ[ÞÓ^IŒY£¹(ô°= î÷a™”< ~ ÑÕNaÎdÞo°ÝT©¶'x2¢ÂŸI’ê(¼ñt"éýPÛ—j¦°\q©#ë·
+æ|£Ï{É„%+$‰¶óoøõ±vö&ªÓѹŒ_(“RYó>s~ð¬|<†ú{¨@<פ`§q">XåÇÃwNǦ)­2¼ïP³T´“‰å']Èá·3/ጚâJ']Ë£ÿær+‡,AÐ;ù¡Ì;úViI2îN*÷,BÀwëäÇJþ©c=܆QH7ôÀä¾R¯:Çë>YÓŽ¬Ñ*•ý9_d$ü¯sÞÚ~}÷1Baz¼}ἺYä’Gi+ƒCŽ•Öfw¯Õ±f.JÂÔ,oM8ÄJ8Ë'}<Kº¦Ëm+}ú6%õubŽÃeîä‰\bTŠík—¢käïŸB¯st7eÛ¸º}Iô¾À?¬¯Í$²f‰Z¡ªf•¥õ}É©?*é+Û='SrL'œç5¨ÊËlr¥µÔ©©ù hŸ‘åhU“âÛz鮞“­À§ù;v~”WÔãm<Hvür” 9¿>öJ%BÕéƒEZk¯gjñÆ|måúÁ
+§7ºò. wyYCgÌs¬î0ì°»Óì‹uËÁj˜ÐDXJ)ª0ŠÕØð“š+ºã›–uþ>Z¾žióÊW_5J^Z¨ODE’ûAge[Ú¸àGA­]î:™¬Ý®£›âl¤õð¢šÎzF¶…x“$UûqòRáÚP»+ÍfØä<WçaÁ !ˆt‰AsåÆÅ.³a¼ë$aJ < ƒ³Ö9ít¬qb,³ý§S¬{
+ ‚û>(¡¦õ£³‰Úæ:ÐáèŠG樂ÕEiÞUÖºšgšóºßOô¿I {÷6yFÝ°£ou+7¸²1üÞļ&ÜÍO{â­ôáªI Ç9èÁEÈw6ù¶A^.ÿ’Ë!Í"ËÞô»4í1L9”ý­×Cã;ìµ?ª6ïu’°–6ÊÎå÷…ÕÎÑQsñÆyQXïõûø£dõweNû,ÙÐj·²ÕÞÅ(lù}Én‹¸b<mñEbýb,å̼—õ–ßqÿ'áÔof»ókÄ2樂–qódçªþhhS´¼$o‘­÷dü>Š’+m‰ *ÏÎÜ2È K\M V¤šr"¢"S|©
+·²lpëMt#V ³¿©Ä£ñé9Á[¨}…Tãcáµ¾Ý!Ÿ™B"·½f»j×òcLr¹ä=®6± +Šyö‚½f·˜Ÿ~Ðüþ.ºOOn£­wÊ2ã9¨*}­†Ô®‚—#?0<á;„dYì¡sÅg‰6ž³Uè 5_ KÐ^`›­Èô~Z?rìr¢ëØTì>íÿqJìwöþíà'2«»›ó$ôU{îŽôã1sÉA÷ª9"m_) ’<ððÂs<H'”­$qµæ?$?­ÏÝÖÌvÍU¯•Ý}]CÁð²Ä/Qü´ØŸˆ¿@ƒÀ*+ô!ÁL™]Ð}êçRÍ <öió.K-uI6û¤mùZW.Ñœúú‰Å—ŽòÔ7ìBCÖÓ
+3Žì –ó“z-{aºµ„uìã*ROŠWxλ°7fæ­ºÝïŒÆ”kçÐAvð§ è8iWî-(‡›ð¿
+>§yšÙâï•ÞqÒ—ä59h>`-”« zÍ]S¥¢l^P~•S¹Âdÿ[Ï6FA u’8±ÏŠw»‡ìSQ$ÓŠŠGj™šBáVLÃØNîYÜæXð5ZÌ#”i£”´ÔÒ¡änœËxb®±fMAä?Š£î¼.<áùrHÑó.5Z½³R‚UIŸÎ¼ÚÏFj9bl\bS*d-W>ðVQ=Ó<þ€Ðó=YU Š,å궳"]÷óD®jŽÇT^ê³Î%vËç=½Þc9Î>òýH1[ëBüq8ÎÁPÁN…Gùl‘iÂrÿYZµˆ±X‰Z™wéÀ›&‡ŠZthüå3d=
+¦ãd²Éçç[QZjuþtF©IÎc™Í@§iüǃ{znl(:úz­Ï}0;¹_µ)dÖKÊò{*`ŸÀJ+l‰üP5á»ÄÁø9¥ç‰M‘F,DRäa‘„"5Åg5û‹%þCϬ$#8¾&P4½Èßz.þn-Ë;z…6êÞyÉq®“¦«dt7
+S#Ä6S"ÒÓ Úíó"ÏöKšà4 È2
+L/57ñ¯
+z­•2àåÆËœÞ%œãª‘åóꖯˌêdmÏ´­øõ}é`náM¾ð;ãO1“ÑJƒ'¶Q¶
+;…Îö…[\¢¿(_×f
+õU kE\ª)ÅÇx¼–¸ìÝÌ@4ìÿáG÷€çñs×’VC‹‹{êÈœ™uÂ<Öþï5ÏdÇI¯“LÈhw5Çú¨òxJ|u°!»6—œç¯½jDë‘úÑ‘Tüú<côâ»ÏnR8©Ô‘™ë×µ¾¹È=®÷‹Ã’#³¡UÖ|‚3“'ÒbM´ˆ%r¸w¯-fcfÞ¹L‘k^É}ÄN}‰˜p.JS$žÅðܾŽ/ùr‚æÁ4¥rí¤‹(ÚZˆ{Ò˜Ñ;{¦m‚X1¸´ðÅ!69 ×mydâ"2uð¼çù[ÐOAÔtkö:ƒºr­<ê‡_ô·>¼ˆ¸ÎÖÛä3ªÖ@í¦EòÞÜØáazͲ¯IͣʞüC¾É‹÷ŸoòÇwä¬ÄÁÏYr}<Æl¹¥&¢ì@*e™Þ†O à|>Ôï²V8h.
+@멺–y‹Õ÷ì;*¶ô$'÷JÈåYBKXûÛ—ÏL¦±LÞQJœ"TÞ„*ÂE¾ež?(¿n·0Ifòé]âù9½3‘¯wMÊ6‘8'þ'U“.ÐyÌE†Sñ^ûÇÃ’ÈÎÛ5”<Ä!¤‘>wHm»¿;èvmó¿ÈΔM|—ªw”õ7VÍ”½^o€ÈóüŽ-¦><Øɲœ”,‡<fÈ @šÎü4ºQR Ïo¸øbW*iÃ(ÓÝO)¸Ön›+¼Ç›/•èÜihYúy°¡<¯#i#¨ðõCJ01 ÑÓ9KÒ÷궨:R¦FÃù)òA’Æ7¦†q ý|­«ßˆ|ºš2{÷ƶ7ë‰O•® 4Â:…  Ï4qïKS¡Ýmþ^{¸N+%¤dGâ`÷@•Ç•ÔÝI¿´dBý!;.œ僕xl|bÔ“Þ¥w|œ39w6ïÀ0Ù'~ä™” }QÃÛÊ2%}dÝjJS+7QË…ñ7ÿÐö0ˆ¨g¼#ƒ'yðSZ6hUn-jY¡TÏ4¹¬—‘¸<aŠ½KÖÇpv̵F*›òà³ ûM"·êFÆ0Ž©|Ù~wßAéæî•XÍô'
+×Õk¾´¶Ty¨CB%Ÿˆó»õÌg'ìp…liƒ-P­—¸\ÆîxÏ°iÔk·øúK=;|ˆˆ±9}ÊѸ‘H?&09¹Æx„ð?ìi/+³§L6r%¯ÊmÓó‰yÖDŠ0e8ý ª|õÚÕùvâû¸!†‰O´C>g×é?,…lÌwUç f`•!6K´á·>¯%vl˜q ë
+é£è=o
+
++‰œá;ÈámæŒéUbNš—äÎ>ʯIw|d ÖwBîòÅ,1f)‰BÆ»Ä ù9ã…¨:ƇÆ44–etzðNÉÛVÑb‹_AʺJI<eÓl„쉺̔kW]SЊhLÓÔ`ƒ;I }-Æ'Z´EOàäÜØz+±x+”›IUquøÜœv¨–²T¸n¿;ãêF{—1UÞð•9 餓ش‘’ô3–†H‚@ ¸òBy¾¾éÖSâ«lGåb6éŒvÑóªg°1i:{ÛÛ¼|µ¬&¢ C«ït[%C§RDYš!×1·Ê”œGL”@kú]OÒi5ùörjTTÄÉ]ènzÐÇ–E•ºÊ¿¿W¹ r{w/òE‚‚éØgÚæCìíi9¼q¼Z ÔU …Êéi~ÅÓG¹{ßÐä…–ä„Í]7ìŸjçˆ!£ÌfJd °Ç™ÌÜ+
+Ž¯‹Ï]Ò]QQ#¦" 䕘ÄW E“,+;."uG[O@—d¤M|…Y, }VÍ‚#ÅEôæýËf+T FZüo˜äIkÇ#Zº×]ت{¸ R¢ï9&Ôhh‡ô1n˜„êäËßnÏÒäòÑS<‡ tž+w™‘ŒÚðÕŽ% Þ=8¨¸L·¾’q….hFî:3½qÞf7sãÙ&öü•ºK¼Ç†¥¥B zJ\qŸªlCg/Ôœ9ˆ§Amá×aàÜ­Îy'øóæ˜{tω
+z]P$ú•ÍkÏ•%?'NÃbĺm~¡æEgfÝlÛ“hö;5ÂJºè–é߬.{Nѯc¶PÎŒÝz­D¥¥=e_@<DO×e1ªón ÊCùÿ#£
+endstream
+endobj
+2714 0 obj <<
+/Type /FontDescriptor
+/FontName /UPJTNE+CMSY6
+/Flags 4
+/FontBBox [-4 -948 1329 786]
+/Ascent 750
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 52
+/XHeight 431
+/CharSet (/asteriskmath/dagger)
+/FontFile 2713 0 R
+>> endobj
+2715 0 obj <<
+/Length1 1396
+/Length2 6070
+/Length3 0
+/Length 7020
+/Filter /FlateDecode
+>>
+stream
+xÚuTÓýû6-N‘ atÃèn–Î:¶#6ØFƒt7Ò JH# òPÒ"H (‚(HHˆtûŸñüžÿó{ßsÞ÷ìœíû¹ósÝ÷u}ÇÅfd*¤
+C9Ào£X!QaPÝÀÔZ‰ ƒ@b
+qš¢ 8Öï_%xœ±X9aˆ;F…vRâú °Î@8Žö†Ã€?ï@Üá¿‘ ¸€fÎÌo»)ÊëAÃ8ƒ
+Gbp^H Ä5šêè =àÈßÁú¿fýO¹?Ù? !¿’!P(ÊÝ‚ôC €Ž78Ðð¶¾0Ö+„ a?!n.â A¸Ap¿nÞV5Bp
+(ûnxãðþC Þ?’áþ»ÃŽËp ï?Ô·I‚ ¸/ÑÿoüJù¿ñþg•ÿõÿûB·½ÜÜ~¹yùÿ7Äáæ÷'
+ƒøùÆÁe@ÿåéêŠ{«`p ûå‚ãDõレH(
+öS}b’R@ ñ€p$ñ @'SÜ÷¿"ÂH—Äa :¢Ð€ŸkŠÀ NN8Ø8à_Å¡^h4Nz¿8€ëü÷ù—Îáp_8ðn•pyÑv\§Êä#ôå ÉÇO±)Ö}1’Xî™ÇÎúWrµ&<ÕîÁªoeÍ>Ÿdâß>ñµíÊ]ÈÔ~„ÅÓì[RÛ*<Ùër‚³ÀPŒN£ÒY±K”ßRo‘ßyXNŸGJw‹¯Ö¬”\t`Vmd7€îÀÒC
+¶L&l¢jAÇA¼5ç'ìkk[Š$*48ÛËLÇ|ô‚ ‘t¤Ö–Àpâ·NÊy=?ÿ*¿¿/K|·H¯§Vª:ŠšÆ_—­`(m€65_·ƒÇ­&y¨þ4#…á‰{÷!¤¯çX¶åå:Â%ñ[êþíæÛlD*LàŽÙ ]!XÃNß³y뮡T¢m[1…дÓùoºë¼M$_T
+Ž#sNëSRÙ!¨;˜xý—öã=õ¡úƒwYŽÖ™¢¾”m ¿6 A–MFräa)“Þ,Ñ&hnP={í Ÿ"w-Æœu d%òÉ‚.¢r=Ò¸Ó´x7ÝãV¤ó߃ÃÜÙìÓ”6 q
+gžŸ˜»(âx’Ž¨?¹? q“ö9q6| •×6%|â6HÉÏ• ’˜Èó¨ùXÈ8‰_·³¿7u}$‹2ä5#©‡¶2§_xñQH¯8«Ó9 ]±™bÄ"'•kð#·óŠlä[õ^ Ö`õ6ÁI agôMIj”›ZÈ£ÌW´Ä@òð½îS¹ËEôU1Òë¯<!~0ø䘽ó‘äR mä0+{.ü€¡4pÌi4¿¾Új¡µÔOV¤ûž²^Ág5ô;R6ŸßÅ CV¸qóf¯vSLXhìuðP7¨âéýBªªwÙÊW=*W# *H$Íßx â)Å"zðÁN¡æ*ÎÃ’paÛ–E@ªÞ žq™‰úšÍ‡8Žó¡ ÿþS³ž}6…h~?:;µÙÂç¾gC r+–6BON›Ž7ǬÐ}Ò¹²òÆ’äOO½¯j‡äŠò't¥ ¿\D/Dð„}"´o—šµéÌ Ú"³µvÿnm¢üį5—M ( ã*L£ÜÔ›;p˜þQvÐô L¨M 7¢ÅØxhwÞKÒŒW­Ï{m¿Zpg²)a•Ì&´Äìº(øH^b9ÔÃ~­éÎ7³
+O5 9Ïlìñ-Obô›¼`J«´“ÞD×ÆÀ’-<"ãŒ~£Æõ÷u½šL1öÉäík-ãÙñ‹Š?¹æm&ùîÅ)A{bK³u×ÚùîºùDs‚Y¿|+´H5£¬=–ºãH xѧøáÑC¢sÂ¥%þäÏ_®#<ªõ5Ñ€^å°eÏtolûØNbú5´é£\³=ŽðÖªª“vÐrÆ0ã…SI£Ý®€[NÔåÙÖÞFU@Ä?æQ[æ¿ø¸«ñøéŒ ÷3g¶þwáOcfÇ·<Øë‰LMzgdªKOˆïK[ MMõeªeø‘†M hˆI3Ÿ-—0úÕ¡r^ÈDŽ°E'P²k,å©Ý9v÷r»yðZs,Õô¶~î[c®ÃA6ÁªZ{Kñô-.NB—7—£²LCYkkv^¸ïp'?{Öo·]Š´ »9
+h¾Èô.uaÊçäøŽØkJ½‘âxáÓ]îÔvÿ¸€3hNê\ÃTNæÞ'cöR/¢—“„/mq¢;œ÷òšõ±Êçžqgp¯yzKûUŽ¨ÎýˆÃë)Ðœf
+$ç[‚šð;*–%öë|&=œ¢/ –$>Å>ª‰|R“%×måu1±\Y·òò…Ómvæ¹Vvº'<ãâB_=¦GB‚9c—‚ßì"˜2cÞð.)‰z±p‹¹•0ÇízЉéÐÝÒ»(Tã™óÑ
+ïgŒ¾×ŒN×ÉXÙ§IŸmWì黼å]Ûö# q …×du»÷ó~{Öš%o{h‡•É_a3çŒ^é‚ ÔéÏÂÑÄQÊ.’íÎîb£2†^cM°Jwïú»YßËéDûŸ7@4sžÑ8Ì\«Ç>;‚J§GùÍ1RÏ¥ä@¬;Œ3 ñ²Ä]’úÆ»vy˜Œ¥O Þßå©ôû¤vm/ÒªVFÉo9­1lèY± Ê="·fâŠë‚§ þyï¨z,I®ƒåž„™”±eèíƒú < ¢EЇj½z„ly¤fÕÝ+nὑÖÏK)t(ÏâcÜžõã»:ù|\7ô<
+Ö¶!¥>¶À›VcstúI_vò®
+%ƒµ§Òã`ß^¢["kEY†dòk+XHØ•r?Ÿî‡TU˜:
+=3 ᡾Ém@ogrþfy^ÓpÀÆT°9¦r(²MÅCp¿ßó>G¹UŸP‡—ÖÃ–Ä ìÇGß߉»Üx(«FÙï%Œ­è¡q0¡0eòÎüÖW‰ÞÈxH»éó16ïÕâf|Zç=šUm
+K-o8_I¢[Ÿ¯ÒGq€yZh–º“×ðM•*<fÃ4—JâX(%ÒÞOµÝåàË?ü¼º£ýFjþÜ©ú¼Ôì´„%hy|+Úo8Ím‘ÿ$-Eás|s;žÎbñœbŽ1jd$úi ¬\ó´{“'a‰?­ÊÎéÞPÊc#qrH…Yø•ëÕå2N)rÀƒ¤±å¦égBóÒE'oêßéñÜ`û:}o7¤óÄ +Úvµ¹Xµ‘È(ÒuÙæ¨uà<³Ô“R_`R˜DF•LD{ùÁ¿Dé|èùH„vgZnÉ!Fò •Ð²a€h®ºø>F]x"G¥Îü´­ÞÀ•zø­Àc§½Ñ‡. +NÆxêxMH›¹hÛåþuö(‚ÑfÉqóŽÏôãÕã
+,d&öEæ¸?¼‹!Ä^5™žÖISú뀬öuð˜æA^º½3àÖ¹¼8›Š IÏz±g¡dç³ÓqÅž½z‰»§Hÿ(nÖ­bú‚3åìå÷  ­‚hùY«*zÆ<µ"-Ö3‹QþÄgÿ®2ÐðˆwYBŒuiå*ëñ]ó™¢!bQ¤ÉOR@f5_JÏÒ>FÊ»bGóy…qz,S¤²§åUYv#“‰ï`¤‘«Ê¶†Üý·zÄÌwRúðw±SÉäÆd…jþƒœú1O=ƒ´Ì㲜–¯ÎŸšÏÖ>jšm)|ò>ST{„œÝG—±¢VŒHÿZÈùt”ï¥1?¸ÇgD{h7´Vê÷¢¦ù)æ ý­'IøLgúú*öéÌÔ<&7b¡(ŒŸ‰´$ƒåøž¡Ìi ×–­CÿÂZÛû¾ÁÜæcøÚ56/ïJLf@5æˆ53¾æµU×S­•¼b'Jg¬®¦ÕÛxiÄØß
+€n5Ñä_ë8‰PÊ)™9&5Y]V ÷™h{Èî=€gra¶5
+¸ü‘Eí~Ùz…þö•¬G-oZjµ™Î§ò©44>4ô)¿È.k|ìÍÉÚºDØK
+Ò–+MSoÕ·ùù£ø3ñúÂDU*³iÈZ{¿,9G”Ÿ¹€Ïkùqòä•ÒkQ]è(³0ðikŽí5ó]zÄé…·µÚ-+ùéÍ;.Þ}®×å"Í–æ†Jnü ‹“3¶}8G¶óÞ<\¼v¸ÈHµ¨S´¤©3Ð!Xpj!Œ‡ðuRRqmˆì­|ѸñD9hÔ†øjã¡R_¦WáÝ°6©N‚W—ZZ Ì=ú†…ê…ß—Eº˸?»“•;ƒlLÖWïûŒ~³Ö.¬[ŒlL [È,LçlÕ@ѸšsX&B©ÓiÛÃT S9 ÐH>Ô?¬íâðøÖ?¼Y“¥[A¤ZÕd#m8˜ý!aý~”GHÂÖ^Þ13aìÈ…”#5½ÕÍ' ã©Ñ(µ%ªÉ?¿0œð!œû@¥_°˜Œ½ûð"ö:Õ(z Àû ­ƒÖkýÂÞÿ]\äl$µ̽Ô..#œMÈ­ÙŸY×vßæ2Ä4D8Ô!t³¥~K &5å+ªØÄ~^˜–62(+#añWÏ®~eblIŠ'9k¤×ÉYóÁ]1“Ëó¡{ˆÖ9yàâH¥Ûé˜Äß;ÃXºÞYôä4.ââÐc)anþZnæF²MŽj04.ª§.sãS*ã}r=¢´;ĦðÃu(ÍÃ00¿JözxßbP£·}@îM"@q_wgÁÃæ{qßUr%8Ü:r#?Š, ‹ËÐBóh)*eÍã@E‡”ŠR긱CDLTIk¿çÙAéañüÂœ™@5p5ià•©æØ>ú%éöWST áõ(É\ݾ}>üL½céødY¡þ&~·ó^Î"³§ —†Qz¬+Ç÷}
+®=Iw5ÍÈ»ŒÓdÙ*)(O–ź¼Ðê©Œ!‚}÷ª…¡ö@]ØcJñ ðÀ¨éJ¹Íç˜ F¤k¬øÉí]åÞs& ¼ŽŒ™9§ï¤Ç)J±”ÛŠu—¹›î‹E¬ÅÃCiÛÕ‘ƒÁBR•Ò °…ú3îf=H~/¸ÏKr-Êy$ªszØdK@WN˜lÎî(9ž¦Y±öª1MœR$_Ýé0€1YÙ{\•:Ÿÿä ¶kÿAÛ{N©ïl¾Å«µËZ#¦föD¯éÜÀpOO¾l¾èX–ö›z`ÇÌðÒš5ŠçªôÁ+!ª—Þ†WŒØ¶¿Ê÷#[vkÔª‡³äoÇ^0¨-Öuüu×òm\‘„=çÆÂͧìõ[yÕjmj&l“P2úlhØê;-Ï¡Â#ïâpú+vS÷zhóË2;íHÔcû¦‹„²>°L=5q¿½éêzŸ¶Š-]„x}*í_4ƃézBÂÅ~ìÃA .ü]ÊJÀÉLÇ]Cq’åƒ6¿F*éç²ý×ÂRäþ$þ±96ÞWAÕ !mÚmgÞIa{þAIµÄT“ÅuÚ3,Þì_†¬âcûn½fp›Í7õ(Œ1“ ÉZ6þqWò³Ù>¸—½$ãj¦^š²iÿ‰po[CááæQZ¸͹–»¤SÈõêüát¹Ë…jOB®ùNF+g1›Š` {(yM@ç<m€ k¤~Xkã7ÝC K1b2|ÝeÕdÇÀ[r¥:½Tj´Ãü7g‰µz0Ä… 󂄬¶÷…wCeg4ׂ{©2¡Ï9_2 ðŸìqOïû ó“ÞÖ÷²yY‹?¡3)X8¡1@WA›¿Ù¡°
+Yψ¡¸$ª¿~ HXR©ÄGºÒ5â`ÑýWãWý^/­M¹î4?á" %Àô%ußÛ ¼t<ÿ¦í6ýÅKÒ¸mŸôë!FóßÖ¯8¨¶í5•‘àå\S ·jgGÔ7>{yÖ/njd¹8{ káÒ=O^ÔÜgÎn ¯ †È¼´>íy8~­ô¦ Qs°®Â÷€îÓ›ýâ…,‹fì’›PŠÙÕ¯ÔŽ7,›z¯`ŒüŠÒʺæ)ÇŠ'ÕœøÈ™ÓôF„ÃätVÇíŒjäy¿`&Ø‹9êj\w|+ž?nš›1¼ûþ-ÿ¼÷sXãÖÊëí7%ë¡Ÿ¶cø9EAÒ„w‚4ï¨á©pJM[N¾ˆxþyå;ú¶¼Í9MÊjo˜heQÎ £(RßÀWEN'X÷gÝë-}&æÌ_6½ôÖ'-­=¢*”´Q{pÓ‘à`—¬}0zõµ‰Œ“CovUÀ#!©´¡)5KÝ1#sy£ÀóxJ† »Â°]¤æ.O'9ƒ”n¦°:n dŒÍDõÎ/帞îCK½4(hÝðo´óZ„ï†4ó|0zp=ô$âö¸¶>]ÐÙ°­*#¹WåN
+©‚¼mäŽPÞ¹?¬:Æ¢Ž´Z‹ŠÏ×÷}Aj‚9¸GÖ/>t,¢†‰Ü~¶ìÞ7Ô2WGXøÑÊH3:À¡ eì+þ2m`ÞúPýÖqÑêîõ]E)3÷/ÓYÚa…¾‘u»ºÕ.-‰“k»ø5«ÄdkàÚ“ªë^{•Ì÷í'JØVÉ“?Ê‘Ýí_ºØPìˆÜzu d=cëá%TZ§ /Ž ›ÖÜn;,Õ«¦v–Jìýðå´Œ,ߎ:vú\¡LÑ3se/®%3Ág´Âˆ•†Ÿ§´•t
+ÈÑ¢oOÚPŽ70wLýÔ]ÜG®j
+§s×Xµ?Ñɬcçc«äX-3m·–€pÉí3mûwã8qƒx¶ç\Å×Û à”'…¯'Ú¡¼QŸ6"Çmr„†hFS¯4fíÙ
+Ý´´¶òÚTŒL:¤¾8Õ1kªìƒ>š+6aé‡1€óŒ)˜ ƒY‚JÏz5 [mÕ »hñ‡§ƒÕÉö‰¬ ì_Ï]…i0¶¥·<otƒàæß
+endstream
+endobj
+2716 0 obj <<
+/Type /FontDescriptor
+/FontName /FJSKST+CMSY8
+/Flags 4
+/FontBBox [-30 -955 1185 779]
+/Ascent 750
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 46
+/XHeight 431
+/CharSet (/dagger)
+/FontFile 2715 0 R
+>> endobj
+2717 0 obj <<
+/Length1 1433
+/Length2 6143
+/Length3 0
+/Length 7106
+/Filter /FlateDecode
+>>
+stream
+xÚtXlÛ¶”"HK×Pô!Fw+%Ý-c0ÛØF‡ Š´tJ‡tJˆtˆt©(-tƒ|3ž÷}Ÿ÷ÿãûŽǶûºÎ+Îû:¯››C×€O‚´…ª X>A~ @YËÀL
+óB$Ü܆0,úÇLÂm Ec`H„Ô
+U¿ÿ‚3‘üÛfÅD’bb¢@
+þ4ãøz£(€ŽÔfÅýxc@nP
+õõþOÇ?O$‚‚
+ÅÞÏôvм–¢:ê¢d)eèKÔý\4òɇùÞ÷ãA˶—Ó jØ+º”¶ù²zNöÚì¡l$“ýxbÈÕV´+…¡ÅX“OçÏÄÛ…—Ë–r/š1Ëæ’ë
+©îÊcâ£èSÅr÷¿Ou®¹‚ø Ônœ•Ìôµlvë<~ÝÕd7³ïºþ&¾?+Qž@ª‰ªzæ1 ×ÐbSh)¯÷Ž5÷Z6¹’s»PšÄÝK?]ë(â#ÞHÊÏ‹1,±Ã+1APöÌ>"äü䛪gWË.˺–æ€ÅÌœÚS˜vê‘×ÑÁ­xÎŒjŽÔ᤭›‚+·“Ãøä™Ü{ií{=væf²ìyø¸ôî°¤Ç3¬¯0‡$ÌìpÞL&yÈÆs’ï-¼(m¢~kC.Ïv߉»fívy”cø—›‘=rNûͺ>t›ã£Ï->×m¶1Q»Âev*´H_Ü,úRZfDhX‰‚¼žç‡\ÚÆ6 …äé,]±`S³ôµV]Wðõæ°!¦¾Z’
+g±ZLå
+âàÓž oÇ~3BùÐÛùHVZòb …ê9Ê×¾ÙR‚œ¿ÅsKú~È$p®x§×”Õ/S¯¼bk¼Ði~.0¥Ø0û@õy/™ëÞVÞ– ]¼œ&*wsû5$<ö /¥Ë¶«øÔ£1WTlÌÈÊÝ‘k»ÖƒùVs·ÇA‘üß²ÔS×u^(¿M0ˆhäÅêVf³[—4lÁ݆Ä>×ÊkÐ*¾bßS( «3¸`לM-û)~ÇŽëedA
+.,w§M#˜~äR›G]QêöÌ—ýQ6}pU;¢iÖÖ«ý!D›ãGª–‘ôsïV,'#ñNŒ¼fBÜ5  ëcK`Äó$×ÖÚ
+[:¶.²Š>}¹Ï/p?§W¿`=·áÙÜô>¢fæVÿ`Àô)I‘æp…SW½ÖýŽ¬<‹,•^gwòG>bÓâerý»O4–WÞû•lšš‘*)±?}“߬krýøa­FIò3Q5Î}uIûÊî[©(‰‚Ïá^^ßüiÔ‡
+ö÷TêmõÂ>E8LiöÄMž'ªHB}–'uÓXe(Ø«=]‰ 9Á—4‰-ȾRËØI¥
+%…¶fŽ¥;7ÒP½Q^.¾ßœóÞÌSœÞú*8èIŽÆú]Y¸AR±íI¾¢ALmÒí]0¡®¬Ù…̸Ôî¸eˆfvUö‰#jGÒ´=.~ô^‡<ßjNm…?.ÜýA=BR¡†R÷˜¹-V¿HþÕÚ ï!f·ŠäÖº¡|b7%eÿù—S{¦;Õ2©T\:xÙ-u“Ëéw!jã¬Â©¤E¢Ò í´(Y1÷h´aL)Þ(.kðY‹Òñù’”›Ì
+amD>AÛ“¶Üm‘s§ÊÉ%ƒ*c}èÀ¿™ƒ¨®OÁD‚û7”9o.ÞzêÝÓÝÞP··½†'Ï,*q>{ í®Ãs ¾ÓíA™NF{‚/W0hy·”kÆA÷6!€¯çç•Ñè²ä‹ÐpBG¥GŽóJrL߇:¾[–"‹Ùzm™òõr_“Ó3®Yí,BѮζX$µhmLæT¡6Ø$%ü>$Rwj.lôw¡›»¥ûà)ÿc°µA²ì •¨jŸÝ8pΉ{_©Ocdô;zjß#Õ` Çr/ˆLMÛIBœ”[„2å½£Ô¢0×â$ñxw—jÐ7¥!t/—ìØ¿È“'Kšg1Ò8àÉWDààJì:DäþrŠÓë#o0vð•¥Ü÷AñP+qf¢Ñl¸ÓZJ*üSKÀÎOþ£z™v}a_¯û5
+R\ã*–£BYO¸\öÇ*ýv(ÙýRù.ÙîV½¼48`í!ÆàÔµCbŽ‚[)¯ûÅ'}si÷4aŽ9]¨ñ'[\Ä"Þ¦'ÇÂtTf9à 3@ÀáÜ\<¨ýË(fÍE(c¨ƒÛ9ÆËÈ+3^ïy_È1Ò_öØ[`¼ðº53yzADƒMÄÝ‹_Ö” Z¡SW"Q.¯¨+¹B iÙ4üÎ|Nè!ðÕŸBkr»çþ.[(Š_丳?£àÆ°©‘s›F‹]ŠñÂ^sÀc€rëµÂëDôM(±ƒà†ÊëEÏnì>ô%–ƒ÷Ì=Jf¶pºŒ‘©fZpY\zþ0ha…ÝŽ’–™KüÄ›Ý.-¢vkÚÔQÎW45r¼bòŽ"¸:aë4$v*·©«Éå|€Dó
+¬
+>áÓc²y=ÿvs.¢xúØØàù¨¿Æµ€ ÅdܨMN
+b’¶‰“G¦O0 sº32¬‹HcXÇî¼P zÒ²àó¾÷)½R˜ø‹÷¥6éÙÊcÑy–´Êû·º_ÜË%ý|bÂiÒ$«ÞÇô¾)¦†5›‰sÈO~ðýUù ñ yR4´í« þ³ÖVsBW(»ÍyF~†{Nj±[ï³Mq¦ŽíFFÞ/“…)ú9Âɳá„—ö—†gó‹õº¶INßÜîž?Í&ÅÃö* ®û/Z6õš²ð/‚èUU×Jd2Ñxû¤>ÙŠÍ,» ¡ªeSã«QCËEª¥îD싹öŽÍ´e¨Uªö=\YêUÇÈüõ¯!ôÂU“Ôß‘ó<»Ì$/ËœBkNË‘d\£ãwÕlµš†fŠ=ï伩ŒÌº”"IZ«Å!ü–ùªï’Ç‘DfTÞ}Úd u|BãW\N“kcx¤T$¥# ãRD¡ô*”E+7æ,18C¶)ûéôœü„c%Úâ0oöÖl×rO~«¹ÞÇDCÁd%s"»8/›R5Ry›"—?¶ÓˆE•£GÎTf•ÊÛöÝë[6=šËäz<Ù'\Ž‡=š»úsm´Ÿúù…qr
+»éÙ=¹r¡3\6}ïà¼d(aгØè­–W¸9­SÕŽæå·?õ¿^´­š—òëtÉO>åÕJ¬„¼ ¯è¹æ¿#?¦ñ.cëm ëðAâÍóŽz'ªYà>ÆCndÖ½GÈVºÙ†>ö‡DÙ'wWb‹d¾WÞ¤æȸòÒkÓž´¡™ùŒg\ˆ¨OøC²lÁð¦ï! oÉs¿ëoTvÚ3LíFabFI2ST‚ªS¬š2¶³ÍÓþl{aVWŸp”A3°
+à•Ð*þmÓù‹µq…÷Ÿc”)éVÇ*ÍžørdÍÃWªÏjse\DÅî>D iz;¥¯ÆŸ|8PÿXÿ…f˜ÕÉä¦ÕýTÃjßN^üÐ ¾º4–˜ƒ ÆH#otðu’Éx+wÁ²žŽBt玄6ºŠ‰WÔ8èEÇ÷n?›‘'èP€W•%!¤×*Ýhq‰RΣ&‡Ø˜QL™ªÈ\<ôâ/B†g²2Pf¦ GÌÜœÂ'3,å—NÊ«WHLá"dÁÜ»R­ÍÝBßìg°Ê:£—²CÖ`ë¾
+ÇS› SñóG©N3 ½J5dQ!ó$SD'
+,ÁzÒɱ½¿Cy­ìÝ
+wPŸ¡°§ö"$]{,CÐ
+ ´¶ˆÙ®û1G=+cЫØõ™Z ÉŠ7ïì{ö`¼£‡bSš«Th –‘×ÑŒ¡žÓ_ 
+|YB4.ò>ME½-·½zÊp <ç©& I9i¡X¸_ñ)žb•ÒØ3±“ÿŠ«‹ãYR—àÓku¿·DrvwrC”õå=0#išp[<.®åTþÅDHZq3©ÃeòpÂÂGj•À$1÷@°<ïãÍDQeBù1áíÒK´KOŽ¨Æv¨ÑVÌ÷áö[~
+;-¢KÙè,÷3žˆ.aæû›BËùd¯ä)×€ñÊTGk7ÎÞK´|3Ô)¿ýŠÏRºx¶²ž·e*ò—¢Y~ðx3±»v` ¾b“À³¹ª'ðJV¬eÑiòö«ÃIÆêELjÄHïIÚwÒ±tñúlæðRü¹Ðz)Ó³¡Qd! ¥Z—V¿±#lê^jhÙžWÓìdùï`®yå¿nTj˜9îWH6°ãº¾)Måû04~•¸üÈCϵ{ñ “ÿÕä±NK2CJJ«u/0Ï|B»)U½åà,cÏ^”lŒ> É…öøÚ¼s9¥ìwyQÆü¸”«§'Ærd–fdŸGç{v‡áºe} „ut¿h‰/Ëus{ß»KŠÆA̵é³ÓsNI¾3x Uár´ÙÈžÇE6¨åô¤.g’ÞèÎRVAνsN‚Å€têlÚ/X™ðoá‡qàÒp%çw{NUÊÉò©žÏožd.UÏKwÓEK rt½Äãq'PQ¢T ³q:5ùkfJÄ™PähÊönP±™-"bQ²úÙ¡«Öª“vXf‹Ð£jÝOº:±¶íŸtéÌÏRÒ'ÕR N#¨sÁ\ZbÍ48”G¸[Hè“ø~D’³™ÖEÚÈŸ$¹„CRÍ®ÏD÷Ó1“ÂïÆVc/uy^4,O¬˜1
+NãKJÂ ˜fIYs·¿PG
+<<›g O<MfÏ <Å—!¥>4ªZŽ |„¾[r¤‰7š‡n½ ~éw!)a$µVKøîâ‰ff\úÙ¢KÁfMeÕ.…p%ÛXe¬›ƒ·D2Ì\¹1oÌ9‚›úÃ=ã/3ê
+k,/7ÍØÆd³Î
+=oVA#9÷àõ
+H#®ôõW›êI£oµ$Ü“8Rr$}9|­Á­ßNþòsfèSJèÓô[ÞþmÍbÝWAZ)Ž%$ä­i`QÚ¿†Õ'Î &ÈI¡M©øxP•…òGì½é¸¢žjqWJj«¸\JŸôèy­FÃÓl­Nì`}Ÿ&7ß/ÓÝO˜ù œãšß®–6×KóúJ>žµ±A×cFê@wË~ßKq¹¶£™QÂm4öë\«váU”+Yñ1¦–õ±R麩J‘Û]å_[Ã9ö•Ã:6¾áþÜÍð]|WÙÏN\rÓÈÞ,)Ï·MòOã̤—Œ?Èe+ý ‡×N
+endstream
+endobj
+2718 0 obj <<
+/Type /FontDescriptor
+/FontName /WGAVVH+CMSY9
+/Flags 4
+/FontBBox [-29 -958 1146 777]
+/Ascent 750
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 43
+/XHeight 431
+/CharSet (/angbracketleft/angbracketright)
+/FontFile 2717 0 R
+>> endobj
+2719 0 obj <<
+/Length1 1700
+/Length2 10923
+/Length3 0
+/Length 12006
+/Filter /FlateDecode
+>>
+stream
+xÚ´Pœ].Œw—„Á!ø ÁÝ%¸ë
+vÃd”9{»BlíàOqþu°X±x„„^±ÿir»B¬@P€nvzŠhrhì `¸÷¹`µƒÃ…¹¸<==9ANnœ0W[qVv€'nл]=ÀÖ€?J¼9ÿ.“ cqûK¡ ³{‚\Á€'#Ä
+ u{2q‡Zƒ]OÑÚJª
+ÿ®ÏÍÊâ wãtƒ8þQ#×nž®Yj-srCán˜ä' q[=Ý»7×ßÍu€Â<¡¾ÿB6¨µÍeX»;séB!.î`%Ù¿9O"ÌÿÈlÁp
+fýÇ
+ù
+äÃé=‰>C×ß”£ðØÖ ‘½>åÍ‹™•ê˜ús½J¸,~lp0 åv0[ñK‹&«mAµ±Ü`÷'»ÙwSuþTio7²à…ZÛ’5jõ{žIN²’±»üÞšÎØUejürùÙî¹þ'6Òhl ¹  /6RX«TFëé*©É©6%·ÉуÄçò»×i=C@þõÞùRvDÈZÕÞŽ³ÊYÆžø‡NJ‹qÀ$ãf§ùí{–³–°`K·am z‘L¥ÍñÅ“ÍX%-ÛFžUäžTd™Õ÷tÇ«RŸ¼,™×ÍD^¶ËžKÖ)ðáåg.í,+S “ÇÀêžÅŸøVÍù‰@ÅOµj`"ÁLÇ-9s2­€}(¨^CûÔw†gÂ
+c(&Ô5Â.Ýú|#P+!+Í~ÆÑ|)d ^¥›ßÒ…§ˆÅH‹ýûöÅ>}ˆ^>µŸÀØá°‚$‡$uø–«…™«©Ÿ0k¡ê¢¯Ëú&öƒç´·[(Æ\!²ûfgTVÛC•Î„¬}“ÂQ\Džk»]ÿÆ~Ò¼&éKÁ”\2n8yži¥„ê·ëF0±™¼oÚ zcúV#ŠIîsWõ ò˜žâ˜y¬Ÿúþ\·jØ&>«Ì,Ç%ÖÌŠ=\²<Ù7²fH 3àhE"ZY»½º´»Æãœ!©æ RCÇð»Zý-fîGšOzsšñûK;è@„“²r^R÷|Äâ¡Q Âj÷€¼ê„õŸ7òR„ÎÛ·ºªèGÔÄŠÑl8- O&ûË6(›q^Lb7ì—üÚ Î™¢S¡É£"œ¿ùTš
+Oëüø×koQ@ÚÚÆøöŽŒ ~´¦•èÛÄù•€×vŸ£¹,æßÈ~ÞZe{çrø{Š-Ïõû .»8C á+¶§‘u%„÷¨S/&í' ÿ4®g’ÖåaœÅ¬‚q‰×Ø,µšS}ß+rFô—b3õgŒ‰÷ŸðÐ}ò”yå¥÷%ß;dÇ}§Y=ýnÍ„Tfše{Úºè+5¹b\I„Žé³„ó»+‘®0}_¶ÎSÂȷѯl—™¦^›¢¶íñiΑ,OvK²Põp‘ê&´‚ÔÏK¾Ôáì0%YÜïÚ­¸)HÑÕl0nãÅ÷Ž¤ÒMØ6‹>ÖÅé½zEøÅŽ>;™ž* Mgl,:Ž¢*ƒøÂ6sê«–Ö=oî‚¿š•¿EçIJ|þ}pšBI… —ÝÔÕô‡W=b&„ÌÞ?~¼‡áúÓf7N_û…uɸޚé—ú’<Ãbñã—EoøFÓ‘†ì,„m©4m?æoƒÐà¯WSú…èšè e_þfè+mÉ \÷ö6É ©#äËáûzÓ½ÏÔ”ò<ãú=Qɦdÿ‘úõcB½€
+CrÁÃVU€ÛVõ·ã±±
+ %Ð8‘¤×¹ ÉirÈÐàŒ¸¥¨4L=Ê>©3)Óâ% ¹±§5\ÛjV‹Ô¬~6šÌ¥7m]³ö}©“íAz{‰¤âZŸ‚)Té÷QÈ"µÒ¹s¦Ôy‘Ý˦@»>je×ÕÉ…9^~%®C±>ð‡ÓV,Ü¡ÍNO”¡Ä\ǶHu¶ÞýåÌÊGHâȬvÒû®ŠE¤<Xµx°w6Ì1{ðê3Y)þyðÈžëç"&Íänã¶ô )5Ó,›iƒŸõ^¦/b MWi?¡ºâ7GÁ¹‹Œƒ÷,:ñ¡i#œÄ8 UÎZÏúa("|YñsÙÃî%½L,‡…­%Ú›%VLÄj9…ˆÀÛ7dàt%w9âP˜„<•-Ö$Ú77¡Òøwµ¸´Agã
+†®]! ?r~Ž>ªnvô\·
+&Ú ïÛ?‡`dÈnYQ¿t æ¼:t<¨èÄósô# ˆÇ.©á*»Zü(ÂœÆÔ0ÅXƒ^NVM]a:štËÜÍ­
+ç%¯½Í`öã˜t ñ'ùÁÞ’-J¢ÜÊETóΧâæR'_usçò'Ci¾–y|÷’Ö€ó ñιž ˆ4°z4Öî:À*¢,Òôq"rUX·÷ÝÛ”“ç}œû–™{{Á¤xP­.Lý.ضc¥·wGžÍ)dÏ5‰÷iuÉKb8Ü@…Ê] Y•&õþ~ÈPqAôâJÜ°†~f·]Øqó¡Ýø³¥Ð`ãòõk­×°ftFnÊÕ£>Ζ¸_–‚Ý:¹i2¾Ñì$îBX(Œt˜m½é<„#ݳ_ ÎÌBTt ”|šŠ?ÍmÚ\¯U»m“"´3—¤ÉC<˜€ƒ–²¢ïðÎÇG/Û‘=¦&CN°Ä Rù"NÈ©z¦˜Öèà¦mº¼'.9MïÁ«F –/€×ÇMNŠöQ<þ.÷Íeæ@R¿%ூ€È¡a‡jµ >Øu¡ùþöü_Ôëbb[$±§iéSñoNcñOËVF¯tù›Ì'q÷°¾M°îžŸ‰9 ®Ý †?Þ7òLÅâ[6 áÈ
+Ý“ùÉ[¼AþÑþ™ûÒj»aš«µÚ¡té\ë Ñ–öáw'Öh[»œ<‚Ï Ñ8š™Êzqkùiâ0ø?ð÷ïý\Ò–#ý1†‡v5Ma±–á“ÃŽQÏ‹f®SIûF±ÑÇUsÕdɈ‚ËRÏ®×ߟ…ùË/Zˆ 7ÅFzÆôý<eü
+R+¶êÊÜçÊ=¤þmiù"P…$=è²\fcC †ÿÍ…ºC¬Š7㊎`öŒÝÆB/7{©O”›ª..ȈŒ‚Õÿ¾^{Ž›œ„çx¤`­eÝ„²ÍÖ†_¶Ù>ä¥GbÝ?†íµÑVÛÖâ1ÛtI¸Ôx6GÁg2Tr¦oá—çL¨HÙì¢ô÷¬ë†Ø}>\÷øÄŒ·Ç¢¢ý,¬`ä¡MÎGèË®¯¬‰Ð§sv»$9´\yŠW6\ïî*‰$eÞ°`™e6àÀë׵̸ #bFTà„G¾Óíx¶Ò5·tÓ+E—G²6W´«+b~1 %š3˜ÈÂw¿YÚ1Œ£»ŠbÝ<^ئ &:”i`ÙRop“׈=ûwzñÞÜTáEvý·dŸ=šDl#v½’ !û‘㕺³wøωø×ÛVŠàaÓCš.Ã_æÒ¾+8X^¬úægbøi}½FºWEÄÇÚ!ë5%ö‘²ÛaèÅcáÏñÜ—„íáñ ]åãV–öGEåhª÷cKyHHĤ&e¯4O#m4Åë9¸‰9zX.å!" øU÷w™´š3ú/®gbò¡VB#É8¯ÄÕ¿ÑkÕ¾èJÅéå±-!L&0ôËú'`·œ+œßíd‚ÅlTýðzl¬«0ü˜L39‹‹†Ò†ÝE%ÂMªÃWGA6*-5lnÍ9²>Ù@·ß=¨Åõ{|lßvÛÚ¢¶„Å¥ Î7:\?æ™ ã¦
+–rtâØ%uBÃE<Ë°.K¦(>V–úô·L­’Žíù€§/Ñ‘—¬Ä|úŽÏA›×ŠÓ d)|Ý7x˜c1«„Šs
+f\ÌptýGýû‰Á»íQwjþ—–=ÈhäBw¯×ck™¦*üçè3_¢/bþxu!¶ý†Ëï¦N¦À
+Sæg¡f$.˜èJݵǡZ‹Jš“ Ö.}9Æ\Ó QË^å÷? ©9¥ÔAzZ•#gf«L÷=!NßvºT‡Šr.Ö¬
+Õ&²Ä•>‹Ü¨Í+ªÌo÷ ¸ò‰ÇÐm¢MÍ ±éÂ×ð¿g’ÿNÔéFnìÿ)S{§ÞdQ3Môeò
+çä;‚íµØÑcÉÕ *_¯Y;rÛtÉ,Vp•˜7¼ã¸ìÃúE¡¨wƒ×¾õÖNÛ¯{7WÀkûÆ]뵸+æ%«g3~o¦ñ ²fZÒFöÀêßfBRÚÄ$ä7ViÓg_aj= ˜¬Þ< ¶Ü‚55U_íÍ5ŸHœrLÇ ðâ~´])výº ”bÜýÕÈËgEðMÂ@.d­Òö+­Ëñådöhoì¾l'ê…àulÅ>äXÛ9ÿ{¥:|2J @” ³M›ûLꛋò
+âR8%:‡&*¦¸—˜2¶‰) £´Þé{JÓæ%\ÞBM{Ù”ø= M=ˆ«[Etéú>Ðœ…®¾}MAþm•°é˜ï$=bléåÒ³îs1_£Ì_ºï`lªŒ#Kb÷•W€,¦æPwÿ2·ÊŽbvÍõJù
+ ­6'PjûÕ"d•r+KÂÛûnß2ÔkÜF—Lõý;}ÍË|I¼ÝE/à…ݹ¦¯lJ¤5½ÉðcZ}
+ÏÞÃ'©×Ã-AªkgMÈ÷FÓ†ª ê¿ ó/½•Ë5Y©;4‘ ¢}-vÌ2ê/*QÆ)p3ikH¥ ÆÏ&"„;âß½å;$ÛAB]^짢F–aÚI Õ˜Ù7íÎS{½·”©V*OPçƒa/Ÿ­«+_æ_Ô<lǺ¦NMÊ"G Gô ¾phz
+p‘²ê§¿*,³²J¥øú#­ÍZµ/ß’»7e¨ æã²]ÑÌqµV(±rQ@üå”B)–ü»9Š _f°£’•€€=cö@î4¦õ\9§ÔS(J,§–ÂÆãˆT¸º4 ¡¯'˜¦ÿÜSE$µ
+­dðGÙë}í-í5In\6–ÚˆÔyÚ”HÅål_´?®åã/N[.pá]¤+«Qñ"Êä¢$e9&ƒ‡D«göÀ2FÞ“Òû¥ú]|ã-ÍD5Ÿ#×·-d¶q?%Ë0ß»Ql¹œÈSþPc({ºŸ é‹
+™lv²éiD½º—¯C
+Œ¦úRm“*–_ZÔJÜ-¼GË,Јˆ–Á’ kÎ:9eU–“Çï\ü~D©­=Š
+ä?¹öíÒ `qXi#ú=¤…ø±*ÜuÍß [ww}¦ gdESüv*R.¼w$㤘FQ_Ç+Û\žKÕé”øˆ;Ær‹:%ëÛ=_ELn6°™H Ž«8¹'ßfÕ=ÿZ–Dæxù„f×-qâx#¬>™¼:i¬ÂˆPPJ )IÅHÍŽ*ÅIîRÁÙ k*ûb#Û\¤™rÓý9Üœ©«¥ú‹ÉFHjv¦xÆcyzâƒM©'•¥©¸ŸÅãõÇáy·m…ËzÙù©LßMŸñlÒQçwÓTÂÇüd0+3Jç·­4‹1ëu$ö¯±Ï-,ן?¢ôÚG‡þæÕÿÙ¡E†r+~ö —knƒ;`ÂêkÑ\§cC‚سxÌ−…ž5•&9”¨Ùë“nÿ.šS€vçÐ|sóžžX-­èÅ‚¨@Â-mt|+bÚ˜¬Äc:aÞ°FŠ—GÁTûeDÂdô=ÃV_l_c¹ÇÀ†ÕÊU¼€àlhÚo°‡»¼¤ª UEKÚèñ|Ë…ÎÌÛb\ÁԈ죺]¥àýÓžlBä{ÎúM±wb£GÍå0Ÿh§IÝQúKßkœÙ×ÊNËÜgj?ƒ¾‹¤qºËz¤R°zJ}<È–cÝ¥F®ý¨…¸J0-{уDû â‹w’¿ôqFrgT[•¥ƒ(¯=ZS;à†#ë®Àfâ[‡…ˆèjõX¦\0V¾•5Ÿ4ÙÌH“NƲÆNg®"Íi§Ö©~Çÿ­ÒhLL>™Mé]¾£Uú‘
+
+åŒ+i­çðƒºrïÍàyÁ÷{RzV7EqöùoŽÙ6eJyË˨Ÿ^Çgqôž±«vi¯Ê쀉0‚ ò­‰p #HªhÀÅÍÞuX^êsôYûÌ‚!”aQ2ö+Ø!,jö0¤#®×𠶮"Ï:h>e¿¹¶×Sà
+O062Á+>HtÒ˜·ƒÐ«Í¬{+zV(éçn.-•b÷jVÄaaäÏòŽÒG«rR®%)±LŸ£¸=S ùæÞ•×LÿªkñëeØL^¤Ø4áÇoÊ4=¼Gç<†šD¢²g‘¢ïtóâ’Îx$ q%xϸ©§èzQá˜QÕ“
+ƹ,á‚jžy%9Ê·B5M^Z
+¨<ÕÁ׉±÷quˆ›)äl$!sf¡ŒÍöv3¯YàûSL¾,‹£š2µ ½XqùcÔ r13dpS Ë©sx颻/©°Úv'IR¿ŽŽüDYêÖËöƒ”D~r¾†A°¢¾¡õM£Ëe©‘ù(ÿ×Ålú®´;±_ºì¥é&;óín©3`ÔÕg
+t'¬#êÒÙéوݥ¾"‚2<;—nZQ…LK6!zC{cxÏ©ï‚Õ>×ìFŠÐ¬6XãÀÇi§ï„]½óùôÇ?{äÝû]#© ÉŠ€ÖS©AJ­±XKó-xwŒº¿U¥škì[,ãkò“0ß©ˆ« Ƕ]¾4óŠ ‡°!Þ ¢²ê|D!Éj•“n çŽ ÏúSŽ}¿1Øü¤ÿÊñ9Ùþ$›ö±'=Yȵ¥¬ì‰{U´0–‡ÏY<VÌq¼÷ðq6šá½¹ÃbPjÇ\僥8«vZýs“rï ã#ÙëhtÜ‚úcRgÍ©þtñî1eOî±\:L¡íkä=°¥^~xp5’’Ù2b¶òiÁ2¡æ­§¦ð–OñòœkñMû²ý"¿Ž5‰¥iAsú—0ïä_®Áì^—Æ¿‚Œ·x‡sÕ€á¥9lóþî‰ô¯#=k’¼ÀªÑåÞš”ÀïM·,UMZ ”I V·T9ˆ1•\âH{•m³­d®æŽÆA˜×€nÃFE´w6Ö"(>[Ij Ô–õó|^=z }`Ñ¡¦’¡Km–t+
+Ûš4µ˜ÙM‘ð+‚ÒTæ±Ê_?xR‘Â:Óe©8¿?¨áî¢È¯¶¹{5†Ð,yØéà¹;àå;Û—k8 t½6ŽÃÂp-3hZ ù¦ÕSY_}¡5ý> t Ÿ„žx:[j][ï-:×ò6HñÔI}ºuIFäÑв¤xŽ*3,¨š“D§ˆO
+bEqJ‚úuKa;+ÂNJ°íո瀤Ï{Ýy…[·]°Eó#ˆªê…ø¢ Bi)®V rÍÛÃPú?Æ1“~dhIèlûÌÙsY!r1/ȹ~RUÝüÙ(hp#óÚ¢›saw?Û&´‹†q±\ã¯ÅA [ER)ó„_Ê7û¨½·’cÖصù7ÆÙõ«Ý8$K
+9[?I–âò"ð{‚T?4Çwpâ ¤ì#×8 "OkŠS ­ÙµH‰“2G&«5ŽÀnX˜ù–@÷$“ÎÎZB,j]˼b°ø
+ŸB÷ŠÄ&C­†ûf¿’é>Ò}k¶”6?o .‰~÷˜@-”TªÒ‹Œ >ÆÍ}ä]ûô#€][yéFØñH­2üE0˜fðþþ@ ùþå'v?Ó “íóqþ%ZS=DÇ4·o²Ç¸W»M·jïZ¾–ôhUe tÛ÷ád£-rÔ>ý ó©‘৵ٱÃ!·R >3BËÖÎeO·flŸ´„AÇlVŠóÑœ.D/q‹Ð«,œsT
+úMÃ/X…šÀ~ÜÅñ®,­Ñ‡°ÝìÄ·ž:bP©—Óˆ¿º¶*&M¦(x Rô6åÂðÎœñQCu†ŽòY˜p¥¦§¾EïdTasAÓyd“ òH؜ޗš01½#Ëu=™\ìᛆñeÄç 9¦ºq/gR Yýþ=u¼nÓȑņ²ÒøCtÄûfÒún`…J°pèntS{<³²oÑc8ÅÕ\X@ŸhTkøV€Y­7 ·Ec/m(ùµð¼þ­"a=0Ó®œ…׬aÆfI½êøz
+Óä×ìoÆÍÎQ
+Žì„—±­ç+ù<Kê#—KâÖ¾9ó•®n*I%µ[±¶À­z;¡Ùþ*MIkÑ_kÅœº²D3#ïMK9§ÁƒQJØ ÓBTć3oìÏ/‰¸¸sV‚Ÿ³˜î9¢Þ‘Ñ£(<û)ŸÑ¸"8çé­ƒ£§¹:°G¹<0`Ÿ¢1¹Ÿ×äfR7îœw bTîeãkV¸|¾e¡M?œŠ  »‘Tb ­ä½œÝÛÆ¡.Å>ÒéUôg"¯¦õˆ÷ú';„»Æ·Ì§Û^ó¬·Wwõ÷¿¼ÀuËMð~¹ðVZñe—eÝY0U†@ø}~ÏÉÏ£Èïqi_ù jËs†æ)è×O©i†Þµ’ˆ®!{—ã•ØÉ…;D(û8`æˆn¬ÞÑó‡`ÙŸ‹fÍFìUg®ßÛÜUwVqù´~½÷Ýv1Yso¢…fþV@‹˜’¨Ï÷e¤&,Ý_Xz0Š÷_yŒ?â 'µ·¹4xím[‰+•…2E×~½ZÚ I­ Ìlë
+ßâ9•ã³¬;^cž½Ø¢Q5S;{‰/Ò~àºßnâج¨´£‡Ê›?xúʼn£ˆ cåžžÅе¼j—­bú©FM{9b®Ùu¥b7;Å ¡'ñÀ[ šûRG,x“Åžè%à«^ºâÕWfs<˜tN´‡€þœ¬X$wT ûÑ 2©ìmŸ?{@¡Æê(ÎdÊGè´£­ñÎøU`(äÚƒXß³’ÝP0ï·Ìàíb´ AêÄBÆÝ;Í@ %`,~Ej
+gv5$¥Ö>”&kpkøe GðÞ7¾‚|¥51ô™ÅìUÁ,‡r¿cbÚ×Ú™úÐÅ>e÷Wmœ%S%¨ËÒL­
+evÝû½¿œOuo´)¿~Ì!»#”_®ýBÍ…yu»Ð†ÏMRÛfg•G_á¥ÙÜ10 ɼfpô¦Ém“ôí°ÐçnÁ„;"øP&àBá=þÀ©#f:ï Ñcù÷¤‡K4Wü:t²»…«ZU(}·öýG„Õ‘Nê› œ.0*&ÆlcCp–öž£@Në‚Ç€v¶FÑ7«Ñ~(—Þ¿£óXJ´çðÜ õ,y’mH#¶xtØñÁ÷^à_1–yùA¼¶‡^aÖ.øØZåÓ›·+ˆèòUNæ
+Ïi h.á¢oyË®£§»`zV&þâᦓߪ‹"Fü\‚‹ÒfZÞMG¼àFÈÈ5h¥KP+?í܈j ú±ùSÛ,³Û~Ñ“LÆ,̹}j‡ñ]æm©>Uë WZFÂ’.ÔdknÙQüê¯ä³•7‹g’‹oÌØ¥ë³9Ù:h/¨Äë›ïŒy¬â»pqSðß*•G?§*úú“±%VÌÃ%õ¥ç¬3Ý›»×€Î…nÇë¡°ôE=ÿ{õ}r§m¡L.Ï÷cËOi$‡g.PKr~ iH’&pÔ¨Œ®»›º·zalièP.°¹ÔC訕 õÔÍËÕ[OlÓÏgÅl VàðÏ™Örž*ËŒ“«Ÿh/‘üákÿ8ºu’¢^ £ö‘ãGÔ÷KªÉWraÒ—àF3£>B†Fþç1œäå0GØ'ã/×;+èG.ø2RÎüµ‚£kÝæ —Ó§Ãß…u?²h
+Ö‘øeò¾Ð‰všO>•ßÅ-Ïä¥oE¡]i°H’âÜÇ"*e%:d6<KÈ·> gÓ{¾¾¬ ‹Õ?c{ÃtÓ5"§Æí€ÃðyP)×¥¬°ôžƒ±˜BHÅ=*§ÌrúÁ4´:7—|Ú2Û8&Óírq$M§ ‚7®ÙÔ<gÀ¤éüº wŒAwBhI4íùšû<†@yG¿?b–ל~m%ûg£V‡®œà®mÇM€5œžßÇoÛU¬¿·rà é¢LëÇxò¸…™ÃC"€c×2ç±xØOùüi×ʱWndxq_ãÌDEîw":Äú­Î®ëæPêÙèK¦ªþǥŭÁŠ¥Jä¬o@­þYáNü@¼õæùüñï{5£>oOóŒVû‡Þlö8éÏP;2ûí‚V—<‰/ëu®IùíƸÁ^2Ú¹Ë÷£[óºée[Ï’x²Èèâò””ƒßÓ¼Èö™¤AÆIü¤ÿ€ªu„¨° Cwb¬Üêµ#G`ÛÙYm‰n¤…ÅÈè (Ùl“çUÁ¸È/XõA‚LpÜV­Þ*„r’] ÁÂE:êÓÐõ F­op„Ù½l>¾R×æx£¤îõÊi0Æ[6d»|hÒžÒŠâó~ë—Ç­cÞÌZØÒª*ÕÀdB¤ìƨˆÏ®%…Pá7 JÿT*Ww8ú]ãl(£U[ñ4Ê‘Y§³‘­ŽN+m¼Ðª6QÆfßéh uOx0„CGà¨ôŽ—6^û\“جñ>½ãÛÇOŸ Ú@Ç‘•Îw6„êºsƒˆNbEyù ™m« +ãýbî·d½ß¹?µÏ#3âgÚO‘¤ÐU-Ñz¿Xqù±ÖÍ÷‹qw×U5”y¼É3®ÎŒN™û½ÿm]$›Äp‹vJ"sãѳē ‘m² óó¬…©wíÕ*¤˜Sj¤<\÷U—Ú¥ÖZ‰Çf¦Á ]ú|($‡øm'?w5Ù”îöÒå&•VfŒÉôöº´U€á ÂîwYŠd6 UìÌJßšÂñ" cãPüˆâW2Ùg“ 2êø ([W4ˆì¾œE)—¸Ê&Ù[ºIöC-8Bx ìy¾eƒ¸|¥B½‚Ÿ·–q~ ìÒÎr0´ \BÃ%Œ¡°±”Ø…ov$7Pw_š_Í»hF)$ötŸLñë«W_üÔd¬ÔT±™²Ç¶EÖt>œ––`QI²®ÞWÒ2~,èQÀBû^,ŽÖ<Dº'i;¢Í«á8—øõÚzq`ÎBLòÉYaˆ”Õ•lXe#ƒh–â5–MGÛ.—醔¥É“%³À¥D5»cŒß»x÷’LÝ„“ºH§
+± Ú²´ÅíŸ ±mgæ=×9'\–
+¸È¢ùŒ=t
+>LÏõªðÉ2o4oBÄ#ÞÞ5%ÅJ îm2!¼Ç¡˜¾0-Å™H¸_f·ó¥ë?Tî ¨Í‰SöVuþ¥®^
+endstream
+endobj
+2720 0 obj <<
+/Type /FontDescriptor
+/FontName /ICPBAR+CMTI10
+/Flags 4
+/FontBBox [-35 -250 1124 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 68
+/XHeight 431
+/CharSet (/a/b/c/d/e/f/fi/h/hyphen/i/j/l/m/n/o/p/r/s/t/u/w)
+/FontFile 2719 0 R
+>> endobj
+2721 0 obj <<
+/Length1 2560
+/Length2 17751
+/Length3 0
+/Length 19239
+/Filter /FlateDecode
+>>
+stream
+xÚŒöT\ÛÒ
+ãîN°ÁÝÝÝÝ¡±àîÁÝ]Cpwwwwî„'@àuÎ=÷äÜïÿÇxoôÝ=«j­Y³VÕڛ⽒*½°™½ PÂÞÎ…ž™‰ *¯¦ÆÌ`bbe`bbA  P³r±þ׎@¡tr¶²·ãùW„¨ÐØd3vÊÛÛd\m
+Ðèä4ü– P0¶þ- fiåü‡ª½¹‹»±
+`gåpps
+ö n¨ÿ4¿;“)è‹ùÿóüµäÿ_çÿÞåÿµùÿoF®66ù©ÿðÿã7¶µ²ñü;ÔÍ®. É·͇Ýÿ ÕþgœåfV®¶ÿ×+íb ša; ›
+iå,aå4S²r1µü«cþ{  Ým¬ì€JöÎV¿ï
+´š»üËÌþ·ù?#øÏ® äMÿAì FS{P÷ý×ÂÆöÛbkûGÒï¶d4û/ð„ßÈÑ4¹@‰›ÿ¡øì]ÿ•0(a‹?€ü¿¥À‡€²ø£™ $ÅÒÓÁh÷¯Íê_tzÖÿ‚ Cùø/’ù'A›ßCõÇ*ÊŸSaÝ©Œÿ¢ÝâŒö’Å‚žóÿrƒ8üqƒÖ:€µvÿslÌ[ÿ÷0Ø@YƒzÅÊþ_å½i0:þ ‚*ñ¯Â0ƒdÿIœ”‹3ÐÖêÿ!HüÿifÑZÐeÂèânÿ/7h…ëŸqüõràljïôo¡ *ºýétl7+g+ÐÝÙÔfÿŠeåþ¯F±yü ‚Jáù/ÚÆëOê
+/ ÓRûŸ‹ÎÔÕ T>—¿žE [ð¿ø¯ ÐhŠ°¶loÊl]ÜùX+LàN8Í¿@q¨™NCï½æÔåú„›BS“¸ít/œ2Ö¶¹/N}'´NòËû¼­6¬=I¹ãÙçÅ0Aeî°augx¦ð\¸aˆž^MèÈç—£FÀGÈ6ðŠ/Ž®\(Jù˜îƒ’ C員ˇÊG5²ˆ/åóô1êÑz%‹y&9Kx¤0.ôDp´?<Pïî0rgÞHd> ø^Ä°yëì°Äþ\òÚªTcqîÅ'Ç×Á#‚¼Ã˜œ£ô9I•Á]ñ.-ŽÞæ_ùÌDÃ
+Þsww É|ÅÖâAƒ£Ñ0ø‡p§fònq°
+žÞG»kPwÚçw²çßêgt½ÆuÍ÷àö°7[D¶Ä~…9úbÉÃÞqõúZg•‘×yXÏ\8,xy¨v Wˆ_º¢ À¦d ¢af6sRŒ%ÜÕa²éÁ×pw˜€ÁëõÑèŽá¯K¨o08^½²}Ë›ÔIç’}örw'lò´Iž)–f7Áh!±6Mø¦ƒ] ’I—Ä™[¸<V.[ÇóH&$³aV-4×!q>%vüÐgXž÷l†Nfñ¡þ霿åDà<jQ''ÌøSkKš&a¤ÂV¤»6ãú>ŸNýpáIa^ØP8øT‘îÄ4å—iÄ~¶“¥‡{äè˜TT<K‡æ-á
+ºUÙ8"/cã×5ý‚*²e úSñ|ª J­½o¨q•Eüwå{º“„Ikúµd~é“: }:«žã£5Ñõau#š”bº §`Y”M‡íK¼¤Ü„!J¾?}»¶{æŒï–­ MÇ|YŸ"iÚ²;Š18{vY õ°m]Â9Ò®NÚ¸ØDfp:ĬŒw0÷fëõáª8Î=ÍáÕ?c¬é¶ô™™ex,Q†ú:V+»i›mso°I©¹éµ5âMÜ’ÿã—­Äà»­ïD9i=ëKc¬ñ²~Ò8¡EœB8jœÂ›òÏŠJ(‘ ¼±[ñÑRã¬Bµê>óúÖ'>~Æ:²ÒÖº_q­ é,`ép؈‘î,ÞÍ‹T༔}átPîŠac2—ÊX\bûáª{ì®Ý5šùù0‡¥S×ev~l<u½ º1[Ðò6#²Õ${÷•v‚ÜÁl¸È(’ ‚’Á€Fø媌&¶ÌG}îûpÙy´9.ÌÏ
+L±¦B—G´E³´þ’/ü•YÙìS7Ÿ>4^ZsöQœ[ ½¥áìaŽ¢ÓàƒÏ…O¨1‚Í:†¿Sßœ•8­{ˆocNvŸ œoÙÊBžË÷ÇeÆ(¨—0PL¥ÏIɹî/vÄ †5È~ÿ AËláþpÌÒ›ÇÆXü%·•µG¨bO¯–ÓkÃØëlŽ™ð”&¢…a'ãÇM@”¸G 6UûhùÃ{¸„é'~;ën–½®%˜eS¬“xwf¤˜—ÇÉV“\iý°ìÈ>ÏÖzžØÉdó弲ͳ¨¤Ã³«âçRs‹ Š‡¼g>«+Ebj*ﲸ¥ú ÷ŠWÕ#U`—ØÛÕÄÁ^ËÌtï‘/ñƒD•¿ÈR©ýBL{Â7L¨ ¾´Kâ\Äóµ7ª”øªPpEï9‰ôˆãÝ,ÍÑ€çÇ^ö­ìB%[áÅÑ_4Vƽ¶Æ ³LqHÂðŒX ÔPr•Ü(ßÕÖî÷U&è?¨¨d•‹‰BÔ°ÿâ&»þ¶ûApDäœüxs„æL(±ž§„Z“êˆ2 ìUdH² ŸÞ)qR-/4e GÛÊ
+5X„îcdé1%Ú§é
+qÒ,׫Ž5í§2£ïèsFÄ`Ô)U T0¶ODˆ²T¨²{ ÈT¹èÙâ;J
+t<ò'Þ‘ª¬’,*(Bz¹;‚ô?– p´b¨ü7Nî>Ià08Z¦@?hä^?Û——ºO®)T«;L•UUÝîeÊs×ÁbÉXÌ›¸¿ßKCšìt W›O«ë…4 ãÑt|¯ÿÉj8Ͻ#Éèí¤°
+6šê°ßhÇÒ
+wbã†uÐ&ÃcÁ áø8·½kä¾¢<hÐP`bìž|ßd
+¾ÈP³/|µóehÑys­õîpÂíS×yã/Ï]^”¬ÞuM`ã^Ø1²Çwìžb ,Üõ;EñØKS ñÉ6ç&Y©ìÕºbpñ0—4ap×ä}É°§ë…Ç-‘ûøQ¶É–ÛÎÂâ…ÜæÔ§‚²“ÀE~Ô˜¶`‘ü>‚¨Çl³Yà‚SýÂôôÓÔ@3lU V˜]«êlÆ4stæq±æ×áŠWØÒµ7M¤²tW˜Üoë¨lœèQž’¨Ôsý¯ÛÛÈ¥Èý½‘¤U^ã{(öŠý†É>•¦:¯„^"…GAB-:þÂ$[Ý?w„Œ €©‡&‚ñǤÓØ)àoc°Ú½!ß/³—q#NÕŠ-Dm 0×b¸ÕIœÉÔ’bè:è÷#®C;L[F¯ö}™îM,½
+U‡àòŸYJòÊ;þÚ-*Øàÿ‘„ûÂC,Å[}÷”§ùF1©•|E¾ƃk2Æí°ß(a`–)2M¼,£B ΡK¯Fûí}vÌœ§6˜•|Ó/jHÄ*¸šoãò˜JÂdÃæ þj¤æ„ѤP‚À‡´W­ÊD•îAñ‘sDýR9ÿ³ÐA0(¤+AK.ÊIlFc4ó ûÔ¤÷¸íLáM?\ÐZäù†¢ µ˜À½º˜·É9ȱ[|Ÿ4ù¶™­­ö89Ž‘w³ÕÁk
+ ¼P æp»ór-Œ2 ‚‚·òh4Þ2rÚÀ tê=&DF‘¾8ƒÁˆÃ[o3@‡ @fV=S5ƒ¾Ã;Ô&¿ 1¢)쯺›Ä[áŽÄ¹ìIA×G|TÁП•®Vûèñ#ËÚÂä³T’5BßÞ÷ŠlB†èYˆ4ŠBÇžò[œO•§^tëÞ‰S¦úNY{öÕ-¡Mmwy£_+]¤’Ô6Eͬ
+7–g°á}@øQÌîºÍ/C¬výT•$Ž ÎUª½Û‚c׊9;ãýRG€Úùø÷ÙåmÞWéå"Ùe;¿DÆ£!…ketA…pc—WÏ{ÜÈuëM;œ€¤©ä–â´µ/<î%„³_oÉÉ.0TA†¤éì5jæ:ã׉ª•õˆ Ð×ÝŠÖ=i]覆×>4Âjß-Í:—É/i¤EÑ”?¦§ÞôíÀ–Ë\ik\Mdq5^ô2÷ý‚1#“‘cÆÄ”oÄ$Ê2)™TîC!üÞÝfnÚ2»ëÔØUƒÈgaãó=-]»Fv†?@õðJÿÜ A(¼Ðß–}IÊy'ðùn{øŒñz¯=jò£á–ë‘ÅÁ§ä_yQË—h¾Tl6)³É‡B?kz ¥·Û8ñ³f½ã  ¼<éÍœ¦ð<Í òº&Iž08e¶ç–¯ƒWzUsÊö©rßxyã·›4-˜~T2ó
+ŽÆƒ5£B®ñk6«p?ó8ãRÀºÓ’ÊóM§{ž®ìYs+HëA§³ÇX.m¡Òë%Eþ<#6YÄ±P´£âÂ{-¯ª~ûN|1”Š—è5„¶š=þ‰
+ÿÆXg`sLXºPyÏù“4oÚÄ_m^(•T™ ÙÝaÚ: ;iÉR‹ù¡—ê®tºÑ Ø•o†úûͧ§>vÉ^Ä` ša¼ñ´"‰!¼YÚ›
+5Rob+ŽZC7' Å œüP8ðxs˜ÔãÜÀrË m Æ Ž¼Z…¹oà ê,‚×¢—XÊXd¾ÚÒ°²º?‡Â麄ӿ«(M’À*}´â{ÐT?L*ŒGÞ97
+w™V OTδ™Œ»Wó¦ÕcRCœ"¦Y?ü¢ð©^š)9ÍÿíÛ«ÜÆd­Æ:äõ¯?Å’`Œ0œ:ÙV’–„ðšu—§õ%»Õ°c5@œµg³±ÅÌU>´˜ò+YA¼9Wlh%p½f.ÎÚÚFùgnðŠWÕÈ êgKùT©&õ×Ö…µ
+î'¢­f–³Sç‹£–§fœ>ž[1aŽµh‘[ܱøúC«ØðƒK2s ð2Š÷véã÷}Ó •Ú/ ¥^J´Êeiª+*‡f´$Ç6
+ßpWãL0­ÇÂÊ° Ü»\ ‡J ñ™¶ñX‹ {lø!O¶?)_Ý6¸šßîå#\QIÃ+@åwì Ža:Z—_eÐ ŒÇžg.ÔøÜœ'Œ12G4딿×QÆA)5›,ʽlëí3ÀéTq#ù“‚'ìZÆéµ™ï+u……¤Aÿ`cƒ_‡Ò)Œ¿ìÞ×E|ܾí'í±‰$ÒÇÖdr,AóNâ´õÌm_ô¶D­‰û“ðcÖ—lª½j!@Î;¿\Gn‰îÄe˜ñ$@
+–+Âä÷ôd«}8K0nt|¢ÄîÀW+Ó#ç©wSŸæ>,hrÑQÝ9b«Èà ÄyÒ°çúîaÞw¬> ^»Úl÷š°«ª„Rãé2»%ŸOiüÞ°(²KLt{Ю†x±sUÜöÛFÄ«Ø I?kúøó.UKs\Æ@$kAPé™EžÈþ¼uöe‰Æ÷V¦q's櫵‹mÅê­‚Á
+¡–åÈž`âCìwþ”ÈwÊòÜˉo"ì›ñ®HNkQ‘ãø™
+ˆ‡dfñª ¢±§1¡”¸ûŠË"ZœüN’.åmRÞÈÓWò¬8w\Æ4qúëMjæç®,â{.‘ñ®Xð1†M$û;✦%×p7Ù–`UÁ)&¾r¢ÎkyƒÏöâ»Ëß“‘ù´ÂÍŒ²È~#;-þàߣtïðÙJ¶¹ÅxZ0q ”4’3ŸÓ«NWJ7#©:£‰H«µD/-º]c¬OšòHàU:>ºÙûTY=\09:üèBPö
+ú _»b‹3*™–™<¤· VhPÕ{üÀ&Fê§ÝÂÉïð‹’?½Í¨N¾cš'uÊ$pΚV­>‚àïŸ÷GzÖ]|^4à{O_ÌL^Ë.—üU]š^àg)YúŒ9ÌŒ,C†û’2C:2„¬03d»ÝlJÛ!‚þ¡´
+{SBÓÎ,TÞwFEÛ5ÃD ²%°Ê-óØTÐÐBþ#»Žý ýÖainCмù—PH?Üío’ý‹/«MçSát¹h_*Ó÷->ŽéCˆsa¶B¦ç®‡+09À” Oï²°XA–>¹LÀS3ê
+íûðŠoƒé;qì/iÝ!k¶ÒAtŠFE‚)âÜG(_Dh•ÉŠÔì[–,:^br!½çc¸ž!è¡ì‘“¨ù~œeÒ“\,/‹Ÿfìmb/›%}d7§lßJà¾dAt͚طã“ ÒíH$ˆþ£‚ê© õ\õiÙ^zYCovCßjYÍb4*F×p[§ÉðÂ:”°ºà5™½°¦”JËU>œöƒ8[4Bä8i0dëBù÷²O»IÆÅ8¼3ÚH±F ¶HuÓÃÀ˜ëïßËHMœw¬èßéØ ”f±õGg'©‹ê,†Wퟋ±;üä*?[Þr›^7+Ÿ kr© ÷dxL­ËY‹ÍY›xXEEãyÑÆÝHù>áŒ6 ró÷,†'.àzc==ÉOtD6ßSúÊÙ¹æÂ+bÛÈÕÐÜùÀobrVJîr_Ï|ÆÐì;¶<²Ðg:÷Rã}PÁÇ—åvñ°Ùº3éµ|Æ÷„8v•::[°Æ=éó¯)€4Û$Ð¥9c<Üót¶|9Oã ¯™Š×¿<¿(P°µÏùýî‰R¡Hb‹&-‘ŽèØpV¤âç3Õ
+RÒ-…JÁV‡¡Í5wJꚇ|ĦL*Sêõhm¤”ÆÀËÌx;/Œ³â§FHûrâŨë È$?{X†šÓoÌ;–¶q«öTº]{1‹^Ð%† tAo÷šs?à³3-âN­9ÕBRåºÀðÎI@YÊÑ®”aûˆíÜöƒŠÜéC–K毰#Nš`šm[Ê(9ÍIåEä}9Î$šª‹{ÿ–€Ð•›„©„fR†ðÞÎ7s@8šxÖ/Ú=ÔZ\ùñû@Nš;ëw¶YéHåŠ¡z°XÛ<° øt
+<GÃä“ ýî3š·x
+x}@C8¾¶¸CÆM%Àæ„‚Ó:ÔÜ(I`«\˜xRnN,†«ž#={$é—ü†Û³§ËŒsº|¿Í†!üÝ __RrìmK ›Ó1¥¥ÄÝZ[&Ñ5H‘Ac¬h¬‹½µ>üiZø[kãF¿VyúÂ,¼—Jt£« g-- ³‰>Æ€èý·æd™T&|ÑWI›d|‡ü Ü©Eýõ vLö,DyÇ_·ùçÀ\TBÕÐä0 ñîco¡isçªRÔè½dðµˆQVfËE¼œö²„ðáÅÜwÕOÒ­A ªÚ¯¯Ý·™•{—®ql<=ÍCŽk%^K­ª7½6³C´F"Žn+wwÌX~yX2i¨«Ì
+։ƚð^·.ô¹æXjÙ¯-~SW€Ô “sV±a*.Î5%]·±èâШƒ˜EnÈH©ð`ÙLWvkC2›„ز3RÍÅFd•€> =Ì8—~[‘ŒN"^’ÓÀ!Í„J‹íÌíj×M¥¨B”I4\ƒÃw{òÑ<û µÏ#BG8k™Pð‘D2—Ojšûdwh¬š°™ %ˆO®9Iuܨڭ-ßNÉøEèé|ã{„:žrÛ?9 ”¦šH{ûa8ihŸï+h<;…ÞêM8 7܇æZxûEA§BÔ€»Û¶CÖó‡LF½Æ&hÐÆPX8ø{m68.¥~ÏYL?5€*¡,¯³Ó·æš1ŒÅV;hŽÇé $º™rWêuׇå;¤~÷ÀuBØúŒ÷‹Ñ@û.¿è1M —| *ú5µ1,öáÑ:Qz)0f¢E¸Âê«
+8KXVSDÅË™X‰áYc¡ÄÜ°Ê\ýÏNÙsúb’’ÁvVôc©£ù3VòÇB¹þïÓ!. "?è‡ZéVÁ(|zB¬˜aH“ý„ÌWµCzRÔá…¢ð6ì8!ã…Ü%Ú.‘~.ÆûqCPü²ußw-ª“ý„›‚ö°ÐêøIþëWaؤR$3œ°OŸ2°"Ò=tTµi(ŠßÍDB¥gC^)¡:åJB,€IÙ;6Š¬‡ÉèìòâBÜéÔ¡Ž ÁÔRË£XÞaêèûUu@ð:´d¨[çÁˆ€ Ýqšú²¯²t+Uóì²¢G½¨‰âÄÍvŠ¿RƒÅà<qŽý£YJªÊI×Aõ¦£ÖØ›'P²†i†6¾#±{½ÓGRõƒ,˜V‚£:gHUðä÷LRÝyŠ\‹-7g‹õÝæ€c×%ðr8ÒæÉ)Yä&ÕwòG$;å•íNßÀ×бÂVPbFrUQ<©±È]øeèPr\¤l›Rk%⽕:Àh\äùÇ=¿\r½§þÆs’ 1gI8Npy§Ø¥¬&.v«CsX®-Þüý¤OUäöËp¥‚¡Áû6F6ײ‰D^oÂqe_3ÉÕX4ÙÜá´aY{ºdq¯æ×o´H.Jdì0£Ž [Vyß
+Ú e‡ÞÏÆvȘ;~2¸v(Å1úTøìÐ&<I¹h¦[“ºÍ6.(Î#äbc=¢Ñü^Nån} 7Ü©.Ÿàfå‘6s“qJE&w«eXA‰$eaUñBöÛFA4úY´sÃ`8zX&´Äqßéšãð.6âÖrÝŸ{0î¬/¾Þ<ÔUÈm §™oþÏX„œŠ¼WÎ1ŸëÕ;5Ñ%˜ŒÍHû2½×ðÍ »a!Èi?쬖P»¢>šœd€à­oƒdä’M¨ÞmXºÐ÷"ì=0Yn†³´$‹ê2V¢ï´©ú?òƒîU £´"ÈÎO˜ÍV¨ŽÍ}CoÞ”u¨C,ËÀï>¦ ½™˜evY½}‡X<úc¸
+[Àìc›¿}úÙ,AR÷Šþ­…Çß‚Ï‘À}<Øä×Ç©dÕ„Á•Ô0%§Ï]ç˜&_Ö…MpÓ+`NƒÔžf Eüàñ¶
+ÊÁPªö ¬Ððfçr«“8ù+Ã0üˆp¡.%êÅ:0ê’Inë¶á™nEÄÒP¶<vi…Ô”Ñä»$?7óME];[§Ÿ˜hhQM
+÷ºnãù£/ F¶Þ£òºv‘‰Oùc›¸VtE&r³ò*øI‘'òU`ÒX‘ua
+¡'a€¥fÂI Å“Ñw¹uÛ{v;–k3öyªñ«`ù•:£1m[Áns"ãÉŠ¥øüØ*lô1û Ïù·ñŸò+þ±O©ïfðô}Õ%²:ž^_!½?? •²ô19»\ú¼^°_n˸.ÂèÐec
+€{U?â¶×9V@l/öCö#½+]4–Tô¯Z¸M¤÷@"ÉHN>/q#­Þ±XÈþùÑÂ76y¿{Sð=¦Ú(}Ê’Škûîd“‰7Ž‡{v_ó¯^LÞ7|L_Í–+“)jÅUš±èE§OZnðÐZÏW÷|)&àº#”9 Æ K‘­ï¿Ôdª m²'SFNÒ~ûÑÐÑûy“¢~Öo¥ï- ÇoY6ó¢o:Ÿzº™ÚkœÜ¿Çyõ¡ó‘© Lü±mØÖÙ"î«Ûáž;†) 44žDš~­Â~þbÞ¿òÍÙcà}ŠÊµÎlOYËV5ʶìuc‘³olªX‚E-Iˆ€ç—˜ëê ™­Ï ®
+ùÈÿŠˆ±?\+¦F·nÁêüB£õšàw”¶Ú»Y›jcŠCéÿÍD‹éóÃz
+Ø"½ò²½4¦ã=ö ÕaÚoºÙ›IgÖ÷J¬__g|#¼cQæåÌmÁö[ë:Eç‰?à±É\<SÐûcɈZ(q5N µ|¡.gòÃæv8T‡X>Z>äp{}=ªýÁ8Ÿ’døc¸qᑱD.ÙéG‚3zÚ©Fa°Ry{ÑÁ›åÛÍ~6F¿‚Ú0PfˆŒ¨x!³/d=S(H†r€ ·ã¶
+1˜xà¼QÊëòÙ¡¤ÛuS Ä÷nSî½ÅÓBÐä7
+¬äQWt±ý¶Õ•[× :.8‚è‘à¬Î>©Y­èŸÁXUEÞlÌE©Gï8PÞBШyÏ\l…³.Røº `Ž¢ïlÈR0› &Ÿ5€¡²åwåƒ)æ/HyÐM3 /•Kæg)¶Ü“{íÜ­ÝÃò’î¯wŸ|îÅPëõ f‡1êÉÃÞˆÜ>4®4M™Üg¾'Cå¡ŽZÒ5ñVÕ²Xâ š-¬uçk ±Ó³x@œ_ÖÖ%Ð!zä½,ÉsBÜ:vôÇãÍ?ÜÂE¬ò…êR]tç­ËnSËÀ!ã­,:ÙÐuz}/à_Ì¡-ôÞ0°×»pXsoÜEI;}NÇÊíûvV¦¾Š{[D½ùüŒŸUà¿ÅdAÔ·6ÂóqJa!ŸZt7=ÎTç <Z…_È} ùá;a† q„€(ÎÔc/•B°Y¬’BÛ’ærñúf¶$Fèey­á}ȱ…aõ-#X„ºˆ½ >««ç‹¬!ùúS9ö;E›ƒ4©4j4(34}«Añî!½ñ‡€ÖéÕÏ(œx#ˆAð½i=tió¶ð>þVïÑœ¡‹u?Ć}ÏUT"h‹0MYXCÞ Û¶+ÂÀpøxDfWalT«Ø{l¾ç2Æ´8Ê-Ça‹ih<E¤0ć%çÇÖ(¶ðÚjËŸäË’‹Ž§sÌ$Tõ+¨rCéÞ½ÜJÄ£tµ &V…‡¿©R5©¨Ú.qÂîøENrTª™ùs`ú™þÌåÖâÕq¼bD¹VóDú£$ YÊ ÌŸc(ÄÊø(TÕqVpenõHkË%Uò˜`Ör*‘Î7$=Žƒ Îz½aÞᨌNæÔsƒµÕÕhg9ª¶ºB·‰º S’?.«¾zꂺm•ˤRÕ¸¡Â©£Ž1"Ï1 1`n…ÃùÉÖ®kDzú$ Ìý•‚ã¸æ¤dIúsWBMš2‡›B߀›m·<zàÏ+¯/Œ§|J_C2© †kn •ÍÓâZ†ýw üM|Tv%1§úœ´äØFÌ©»·þ©_/’ío[æQÛnE·.`{ÝAà)Kø_4ËÚ
+âj×Ì׺íe÷XBzâKU=¨Î&§da6~gNT;¼|Ö¨‡ð1´nˆ’‰”ùàË9ùGRƒÁ;HÜ%òLOOã~0+Ù!)}â:IÈA¤PÍð먛V<<AªwH9
+.*ÑÒÜý„™þb^Êv?öVÿ:ÿD5ÖZ†z8jäZ¬7V»X|©‚wIJ%ÎH$÷}k8C2&–A¤»à}•Â™&©}Η? »º>X„,Ztl4¶×´vg6bŽM(Úyë~ä5þÄåŽ{F£UÅÁw{}áïÃÄÎ]¯>Ù1±®_€³¡Ñ,`ýé6ï±"‹¨£Ì—Yýtÿ»‚E8‰öÕ˃vëX|>ò!ÅS©0ØYëL¤(%zqÜDÝxÂKÈ'yjJYêá
+·4«N•„ˆj$* ²»Ñ¶ß0 /ó¬QÓëêÕ‰xv^Ô¨”ò|ÒYÎGíHçH!éËût1°–¢°+MØÿ±ÎI)O3ÜM”DÖ4ÒNÁÞãÅítqœÃF¥bZ"éVq4z¥‰Åð‡RÚãQ×£…¼Ê+«û£’RSï\ñ±s%ÊÓÓr ²ÞnnÚ`ÀïZzo¹îy¥Šn(§wE!LAƒÌe%çF4öã…–k XYM—­­ÿ¨—ÿíö ¿jŠëQ¼¼z%
+zñºïF‰¿í*gC7ÁBor8iã!ôÏØDr8ʪj.p¦N5w²èLÛ36E£²¡CuØä® åò´Rù™.q6‹&è¯1vr‚öü]ZKžÔ³ˆQª‡{Š®w½l?ú¬ËÏø^>pY­\¨ù ö·|à·Q¸Gç4„)Ñ#XÒÓ–V=6!žûu1]!T(¼ð“A˜xé‹AØQP½ã°B÷ô¤/ŽGóxÔF,{®[Íúí¬Î MÖüüÁE|™6žâÍÃ÷p;¼¤*úºva°‘ä æ¯L¼¬åE,ìA(¯ÐÖjLóñ7>»ù
+A"ï¨"’í7Üâ¢3ám1goQP!N®°„ox"”æ'éƒôUÍ®h~Ôrß« z §ðêÅ:Iv¢ŒPéˆXGfî$»•³4z—ûùÐf][?T?ü"­ñÖ˜Ì.†+j‘%±.OôôN;fÚèÑo9ˆõŽîù⓱@‘«DŸ-ÑÂ5cp&KLóù”v 8@ñâ‘\ûW[Êã§2÷|áN¾ò6#vôúh¢µ²Õ±Îõùw(?á÷œ9Óš¾î'i*¤å-aÃܲ gd¢=D‚ôßoÍWñé™çÕæ°ûŽñ33æñ¾Œë@ñ#¾ò:ŸžÛ º9›Ýè¹ò8ÙaR¾¾lEòךá ù3Õ¡#´x4À],òY×HdÜ\i2
+¬#¿#>Ñ×±Q]vŒŠÂmÌ'8
+é\†óaêÌÏ;Þ’WÆq8‹ôßÊØ0Ã;rÈ#¬tt¸^ß„1gà !Š Õ·Ð=åu†¥ï÷aÙÂÚ´K!ð¾ÖìV›·Xû™üƼúؤˆ‹›±êÝé©àz¥šFší¸%•]+F5Ê;Ï21eîæµJ±0|C®)w
+È 4ÅXHƒe~Ë‚ÁL¿õ<¾šyo³› ±mí9
+vEöòtl+SbÈl,Â!úøoUd(óh~ƒOÏÉ@¥ã§Êxâί©…cèFzŽðþ¶óPÇW‰hõbþ½ñÙÔBPdŸ‘¡Ú0õœw-èÝÄ+x…FÕ.¥èF‰B&8¸ |[T,
+Ì]‘Ÿê³±×C)ÅFäÚ™n;`Š—vtF`»/Ù;
+^gt~)%Õ.xbƒ…/âFãÕnÜTߨ>RÚE¶ëWŽ™ÌF Ä?£9jöøH±0ðCSLÿÄ*¥[
+•ð"{¦€6Vó†lÁŠ=·Ôfåé?ÓX·$cÜ@Üÿ6‚²·¹›“ûkÍõÚz‹*Ø“L¬¦–B'áí«I»À*æÝ e?Ô°+¤ aðÈQ–ãn•,…ÞXV~j
+WÜA÷Ñ.n
+æÄœY?Kµs#ïÛŒg“ÓIýÒÝ±Æ ~Dc|ÅãÑTOš¥?%Š>í†e‡ýiÞl³ù¬-ý‚R1DJºe‡NÇñ3¦³üòGð”ð±ù­÷
+”[Ñhaáõý
+Oª@dUu"¢ðIDÓÛu•«eQæ î^o5ÜýÐñäý°ÜzÕl6l±®ï#M äeMb`¿/e<ˆ“NªÛw—3_Âצ[’šQΰÊ,2Ñ#ÎYÜY.DJ¤'ƾ÷ÐïlÞ§p+GýéwºÇDd'Ø¢1èŒþÍÖÌ)»ŒÑ‘ÞïhU:Ãà¥Ç[fy§^‹‡BnKË/nnbb©Ùl|ÒÒ›|›pëfR'”óÔwfÇs8ÏŽ!Öè«}¿„?ó'–|!C·ØÌ «c×?’ÒÆÒÇ %½ózmf¬Ó S}7˜Q?Bùù-Õ¼è@ï9»$PßÑ"Ùp‡¡Æ¿«ÔºÈCÞ½³h;M¬”Øò6´>uiý‚%Ï(Ó1Æ°ÕÜ4ÝP)²o""¿`z„•ì ¥S·r½!….rß7XÚ§
+ŽûO(oëAúË<SIúg—£9uƒšPµmq¹ˆÔ&gÏŸ—Œ­…}Ó0‡Ål)!]Ý#¨H4›ÌcŸ|S9›p;_Ôh?‰s–Hñwì¼™Ý0øÔîÝzðmÄf9í#¹`(|èÇ™™nêCçc0Ä%VY—6º˜Þ±¬ÊHs@ò{œ+ìŠqƒ§‹/´“ŸL×;O¯ZFh¤§0-
+é?µvŒzwóôÈ
+K¯t¦jv&¦¯!ÿÔú"Õ$öxOóÊÇO÷I"¤öpÏp2Ólš6a½ÃV÷¯Õ‡wÉ Œùwv¶Ù¼@^×g’Í~=RÐŒzѼÖre|/_J­Lôe¾¢RòÆ›¸4þ]ìÑmb ^+©Ù£2Zð»Ó€S{Ÿø|`,FUÒ貎Òvòi©©rD¤þÆÒi
+t5Y¥w¸l§ÉŸ­nÕº¥„œ´ˆŠ50 ‡À¿8I“nv¯°êQÉ -p½=Wßl@,¿̱»/ý6˜ì• Yö[Îhò )Ö$OnX^#^ «{¤@ý·Ë!ôq3«ƒA1ǃ'§Öï”õ)MÚaküÊ<ÙHSÉ0ºX64>ÁN`˜o_Zj]i±Éh[\­åÅïe°"+ì±Ïä¼ÀRô®¥Õ£ñÒÀïZ¢V@+ ètß©ÄØé¾·é¶éŒX¹¼z¬Å’·ؾd¹2/×y;\u›(Uä!^«ë®TùÞezŽDOrÇ3<sŸ´Kiʈ}*£c Ó¸E7p^¹³ÏŒô™yÕÕ|• ÜMÑîº[ò€Ì‰Èß1zT¯*ncVªšô›ëýý¿;QÓ‘g ]éëP`Кa¨³ýþ…ÆÖ*?ÏŠ®<RW&€/Š¥;öÚ„†š·§’ç‘Íj‰‡·Göƒ90ÅÖå0´¶Ü‡¸ û
+¨|ÿƒÄ츢ä·¥“*–_ûʱ+÷³ïhâŬœØ­—æÜCYú§êg-ׇ¦›´wغï)ÍÝ"¬9€³×E#­ÎÔÕæBcUƲµ…sY··p~ÍÔPkpUÍÍ’Ñò€™Ã1³¥³ÎÃRA‰³zö–è¿+6˜Ô,r”¸¢Y3ç Q@C9<è<­›f[e'~”—œ‹W3QÝI½ãú›Wì6VbÁ´ó¢'nbx•Þì³.[¬«o»Íë2ˆŸxx˜bû³êç~½Zõ4£ JëHKÕ
+ ãy8A‘wÆê,þpZ€Bee!¼þ;šdØ;ãË(èVv‰¥ûc*|âÑŒpQ.¤ÖO‡çtªÍ: 1¬Í“†tF•’?D2vëo7A¯i`LQ™Dm:}áXÀk¾&)Ù¯•ò^m?Ü_ªù/=àB¡DéÙ#ïcÓ ]ç¥:“Vì7X‚È毠ç©çT“hÖyF`µàê9²~š¾7Ø0© ¬ãF3kJ5Sùo¢æ°Ørí6¸_,
+0““,ž\E#Bd2„|
+€‹¯–,P­^«åv%ä´ |y:]zÔˆSqÞòæäçºuÐ/»¯UX\!I¯Öä¯Ê
+endstream
+endobj
+2722 0 obj <<
+/Type /FontDescriptor
+/FontName /SUUVMZ+CMTT10
+/Flags 4
+/FontBBox [-4 -233 537 696]
+/Ascent 611
+/CapHeight 611
+/Descent -222
+/ItalicAngle 0
+/StemV 69
+/XHeight 431
+/CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/R/S/T/U/V/W/X/Y/a/ampersand/asciicircum/at/b/backslash/bar/braceleft/braceright/c/colon/comma/d/e/equal/f/four/g/greater/h/hyphen/i/j/k/l/less/m/n/o/one/p/parenleft/parenright/period/q/r/s/semicolon/slash/t/two/u/underscore/v/visiblespace/w/x/y/z/zero)
+/FontFile 2721 0 R
+>> endobj
+2723 0 obj <<
+/Length1 1721
+/Length2 4292
+/Length3 0
+/Length 5345
+/Filter /FlateDecode
+>>
+stream
+xÚt<Ôü¿U ©ŒÆÇ:#Ü°÷vÙ²•â¦;ãŽF(›"$[IÊ‘­DV•Bv$Ù”~§Ý÷ÿ<~¿Ç=w÷|íçû5DÌ-¥´ÐD$FŸH HA¥!Ê€Ž‰•@ 2ÒŒEDÄ
+OqÃü’³ˆØ`Hd<‘ ü—… ƒ Ðdº
+ÍЄH
+áXQx Å÷Ÿbª8
+ÅC ööö–F¸“¥‰$guqIÀOÁ2†ä…A;”S„;æ'5iÀ
+‡'ÿPX±o Ðnx†@¦¹P h  e, Œ3 ᇱñIàçã
+Ðx@bœñ–?Ñib ö¦õŸ„÷Î@hã ;ŸßÿÎÒ& M$¸ùþ1ÿÞb0nahmyâ'åßJmm¢à'¤`2²€LW’þò›ÿ/îߥæüÏÚ â°D@éÚÛý¢áõs.Ä~.8ðoS"mš1€ØŸáw€ÈAP´/èÿy¾»üÿ&'Êÿ:üÿ­HŸêæö]/öÃàÿÑ#Üñn¾?-hÓL¥Ð6ÄHÛÂMm1?ÖÙƒÆSÝÿ«5  h¢Epvûýx²>Þƒ6ÇSP¸ïó« ´ènxÆœHÆïÜ@
+
+üGG[9”+í¦iÍú®ÂÐ6êߌz½³z09y
+iÀ¶fïª*å[5nWvîÒµ,|¢"ý©‘'~ ý¦#¯ÜE ”oÄi°¥?%jZ?:v§÷ ŸŸ“ùÕkƪѦÍÈÂì†U­ˆæS•Ì·Œý8†CÖ¬xØÆÖ2N­Ú{%³¾k®õ÷X' 6™¯yïâ®°Ã)®ã¸÷Ç{F1U<uÌíµ…{Âc¶MNIèš³©‰ÉM_é¦Ï[­±v¸ˆÆHh…gœ°aƒ?bàð_y—{DÉs]Ò²ê¬î4¶iÝIq†ÒYÒ iЯg¼8qÙþc|í[`#*{¤KYyùØ£ôÄ¥¾øQÝ ÖÖ‚¬Çáð”7¥}ó\ìccŠ£å܇.Ì$[Y%UTñËêÅxo-²jöt,i>P¾³q2÷J™ênÇ/ÎÁ ´kiĈíDÉÊ98n&ÎðÝ@o³‰}>·«û6Q¿F4’’4÷ù~vhÉLnÚ³áû5um!-Þ*+B_3î_ ßÓ\ò¼ÎptOœà2—©‹õÿ—ƒ'û6Ì}´Q¶ö’?ÕÌŸ5_«³€w-W§¤+NgÛ¼d3Øóæ¦{IùËR·ɹ-\h®Ÿu™àøÌP‘öWÚä®Ý˜KÃÙÃǬ‚Ÿ[¨Ú×XÚD¯„l3Žz•~Ú7Ðz-š=ü-q^\¬Ã§Êù °7F¼5¬Ó$›íá8{%«Ñ^׸R
+]ÑL‘9ºkÞã` îü"â®Z‚D°DjM’ë?$Æ-û€íݦy]gÒø9j«X¢• ^öl0Gžèây!âtp¨žƒ6C; º©tž5å1Mr¾™v/ï(S„Dhæê´Òn…¶
+½´ÊZóÅRÙ¯<÷G˜´Íj<u'ò¬¹^;ä§z<Ó®¢3Ƈ1z¯KÕö3;CTß'…縲V'ÉbØXŒ@Gz“êÌ—nq¹†’#pê¹¢}—0/°­ƒæzÃè†H›]¢‹šìÌÁ¢í¯*L»HÅŽ­r(wŸ¡÷Ý¡™çž„œ«¢[Ùä–:Ð=71'5¤ô¬Æ2< •¯gí<ßã$*Öâ;Öà1ä ÛÚFÛÇNuŸw|ù°'{ì¹íļŽŠUv1ÈÿÎÒ´IÆBßþ75ÕÌÎE›(9s¶ß¾—ªw<ÇÛ)Ðû,õý…VÇlÆõs¼
+[ß±ÖtI6pqÞCµtsNÈu˜(Z}ö½”kkѦ7<(”<ø”j8Ä÷Œ(üAëaZº½›¤<?Í»›¾
+RH>
+—¶•ä:s®½¡}Ž­«»®¸4üy…ønÚ+=•MýX½¤ÆlËCa/UM÷p§¦
+þ¬†À1v†þE7¥®g3áÖ 7XceÇÄ”ªÿÚ´‘#¥OïÌŒ7‚;šÕèñûBòÕ,{E¼ÚØnÕë)!NU z/^ÿ ³jÃð5šaÍ뢮Ö5†~ŒÛäKFµF3§UúOo—µÊ÷—(lgõ[úí2½†Ùž¾³Â• Þ@žtQÊÒ½5§Rö‘Ýë)óuRfÔ¦QJNÃèîw!¼—Éj –¸4ÈÁj|W?Øj_ êa:ÝÈG7¼‚½{¤Ò¾[z¬Í 'ÏI¹áM—uûù[x
+Qwˆ%n|ÕfÑh4¡Kˆ–%Í‹Qµß„îîµU+Š^ÇÂ2s?ÓÂj]¡B£ð‚rJ…\‰<Á„º ÖäZãæ¾(¦`jvØÕëe"™Ûi“ÓÀtÜ_k»ºþƒ¬zMÿ\vp*¼=]~uk§aí ùø•0òöǤKü—·fqLC‹E!PÌÖHh²Åkü^æ&·½g­djwod¯B…•%KÌUhËtk£\«'«¢ö–[²Ÿ¾»W]ê&úÆ–Y‰M»ÜDÔÀéžáÚo&ÖÙð­H®íµáÛç¿Ùå];.5Î0ñ©Øª]ËåÃd׆ã©a—£½šËå6Ÿý‹î¯" RbÏŒr±d²$éßíj›ƒŽw<Oצ“¤æ÷ïþ†Ì·Íà¼áçÈìŽ
+³—¦žÍ¸ãç剩ö±ç0³O¬¡®v‹Gkµ=ÏÙGo#h¢ç—üEuo3¨°LÔ\TÎW?ÅÿDÍ«ÕßÒa*ópœÌÕðn?U²ß¿nMNŒû¡œgÁIw=ô ðäžÎ˜MG‚ññBü´ïûy×k7ÁB3 ìäT|‡Ò®Í¸É}í4Ðä«õ
+Q:³66®Qˆ>èñ@vj¿¢µ‚¥´1rwXx DTmWEH¢ ¹D5­–} ̉ b…Ü0NRÙ@ÏNÜLÉRoŸ×…ž‚U¡³ldTÎîjd`¸½ªo&5±^ àð?“þ‡ó
+endstream
+endobj
+2724 0 obj <<
+/Type /FontDescriptor
+/FontName /GGRJUS+CMTT12
+/Flags 4
+/FontBBox [-1 -234 524 695]
+/Ascent 611
+/CapHeight 611
+/Descent -222
+/ItalicAngle 0
+/StemV 65
+/XHeight 431
+/CharSet (/a/b/backslash/d/e/four/g/hyphen/i/l/m/n/one/p/r/s/t/two/v/x/y/zero)
+/FontFile 2723 0 R
+>> endobj
+2725 0 obj <<
+/Length1 2963
+/Length2 19182
+/Length3 0
+/Length 20845
+/Filter /FlateDecode
+>>
+stream
+xÚŒöPYÓ
+ãÜ‚ËAƒ»ÜÝÝåàÎÁ‚»„@ ¸[€àîîÁÝ5x‚»†{23ï$óýÕ½E°º{w¯¶ýl*2e5FsGS ¤£ˆ‘•‰… ¦ ®Î `aagbaaC¤¢R·Ùÿ#Ri]\­øþ0sš€À2qØNÁÑ ëf`e°rñ±ró±°
+tqš~% P4±þ"@ÝÊÚõo¹š£ÈÃÄ
+ŽàÕpø¿¦ZÀ¿Yhnífÿµ2 ðrˆ8XÚý[FkWIkO ¹²5ÈÌê¯qù_ÀÞí¬€ÊŽ®Ö¿n
+^¦ÿF”p0s4ÿµulœ\
+0ÿ”ë—ÞÙ |­üë̼v&”š\!‹ß^ÀÖî¸ý¥vtû3,ØÄòw°Þò×;
+èð‡Xfý“·ù‚gÇö®×ï$¸À…±ûu/üÖƒ«ûGF¬`ƒß¡8Á¾À÷Éï"€C;¸Ù›þºÇ-ÿ þZ1;þ& öéøÇ)VVp¢N¿ÕàNà…ÃúÏÁúô¿ÝgS
+òpüã
+-£÷’K»Û*|"meFІËHâ×ôÕm škáeÒgïÍuðá-ŸTZ}žŒâT§v['q&
+~ˆÔö¿"bTÞóyvöÑ ´…n†ì”¥ÊqvãAUÎúóè“ò¬í/Y ›ßUÙ«ä’Cz*™fü ­X4K•kš9‡Gb$F Ã<óD›½¾™ÁÌžx!•£Gô=úÀþÙ[w“-æ~îÝZ™:›k>%¾.1ô5æèµ·èA’,î‚wqaô†ÀB -Ä¢CwÞ™¨¹á óg26F©z¿‹BÓ)îZ€âµ]ðOsW¨ë”-*GÎÆ3vŦDZIåj3Þ †ÕA,¯aåk:oö«‡é•DºÍß6+gZ:"³ÖϲÚð,४×n¦^ͦõw¬IÅD|,ï0‘97†ü\(rÊ4‚ÕêhÔ˜*5ÏL5X:ú"ìš íDÖ»²ÌßyßIÿ´y0+VH÷§Õ
+§aÉ°óh"CŸ‚¤ú}´³Z9饰ƒ_»M ÀlÿAœÞEb \Ö«ïâ>ǽa4´‰‡Ìû¦wŠ½ŒH`SÅû=’½y±7t
+#è·íæc»ÂIÙ-sŠ)¸ø†Uñº…ë•ý¦Ü„gªÅO5õ ]Õ¾ÄóÿôäG –­(›@©xã› yØâ%4ú3ÖPìë5æŽ JåGi)ÐŒ1JÚ¡þ
+®|† Õ³EYÆ8´çàá‘\:ür´ËÑÚjG16ËO~,;þªÞ€…)AG€Øa=9â+ûõÚØÖ«™DC¾á×J>nL†ß¦1öÝ. 2<L¦x[8k
+îÖÌeeC‘«úÎXŽ¯.µ?ž}%vºÉ†Ñ]®mb‘À~u; 5¤Z,¼0&~sȢ #ãýŠ4”ËF ÿjÔ#jñÕ×öÏË‘­#ýÜaøwC)Ïp+GXý÷Ë|Þ…Ø_Ю³[Â…ì¤ëÚRi/’÷yb•*,
+òìµ¢jIRF6’Q”Ó Ú­­.~5ЦFM<}ôô&Há$,³ ’èˆX¯è'mî¿›çuñÊ %éï¤oƒè_ípDGÀü~Æã´@™'ìIýìCrÚWÌ!íÇy-Ë],´™ö6/}²§[¬ú«òÞ$dF`·¯Û»ƒŸÌ[Ë^ HFœ4 >‚œ·ÈË\ü«M½^ñ}~À[íëUc‚–X’ȯ2V3PUŠ^Û”
+IúÇMãE×åqû^¦\A=·'?{ÂZÍ¥ MlxÞY1¥õ\0·|ãÄ%ÝI+ˆÊ+ø¼²š ÂýøFÍ÷# Þ¾OO“G;µ§1@¸Öݾ¾2о9¾1’V[A,Xù¼Ý_ÁJ<#2Q;ã“àÜ4K “÷ÌÇIzÞß. YïzñáKÎðìÀèj=u”P*”lD45
+ÕÉð$ÖÛ§”UñŸ<"j§šG¨µ¯ÉNxgæhíkQ0ìƒ6â»/î‡CIå—«¬ˆ?LîàT…†Ä‹.$x^±Nt¿tͳ!–FÉî‹’‚ üšm±F$WÝjÛ!ûrð¬d¥Ý ýòú†`Š[Ž?&|Ø™ÎSÉÉ:Þ‚¯zójÂ9cR*‡¶”ž…¬ñ èzäÍ'ͨ°ÏZ}Ýò„ \—jlÙz= [¢»äÓN+ÁËKÉU|ü¹èAQ¢Û%§û=¿Àý8»ºr9":pYéôÏa ¸‘oÄÞ_<M3v†lt(Ñê'›…VËr‚¼-‡Ënâ
+8ñ+K+q#Â#ahÖ A´k·íKSª}¢Ø·~^S»²ªhA*sZ¬SMÅü†¥%öæ$ÃUT¹­jaüZNb$jÒÍÚ˽]ØÓ©Û3y<
+*bÆð3\8ƒþ0ËËúýÕ™¢ÐùÆ‚Šjpô¡°¿O±\—ò=:‡súE@5£ÖÖxfbæqÚô ¦aò¶îŽ #oþ|ÿ‡åJ?,üëOñ2g:Ûß\HKQ•ª9ÇÐ]^JÉÂÍ¡³-Ƕ&<|CnWpŽóÒ$¥$ÚIÓ´IÄÉïgP rB!Ÿí(©Q07ÜÛ™t}1sªM5eðÔ¼S¿²q/ œC™>‚G–M· YƒX¸
+
+"'`‰_]÷úšñ,CÊ‹ùW÷[Sµé”’ò2EÇ]Ô ¥_â¥A¶#k&é‚æP{•§oNe8|)r¼ $ÃSo ¨ÔGGŸƒÏ–1}ºÕ^ùÓùw3] ¿ú”âžÚ份$ÆÕÃWjÌï!­V…¹+ÕiÇ
+wt¤–¡6[Â9—eG/ˆ:ÓQÝd‡ÆU¹«Q¡ÓrúåMyñ½Qž ü©@Õ“!Ÿ- Ï´–}ºÆÝ Jÿgpll²-YZXžCæÃ5Ûèû`a•À8:\,÷)ßYÎwìö›‹iÌ×Å•µeÙøuFh‘—~‡“Rg¸RG%qŸ8‚>—¿ÿ.PÈùxG•»Ül°#‘)eáðu%Àóý€*QÝÅC¶<3é›f
+÷kÛÒ~“É¿ÅH‡ÃPøÈ.áõ֛ƹ&šE‚
+ϳ¥DÐ )µ¶Îck97])áË©ç'ÚQ‰X§¿¥ 9+gŸžE­Ó«ÍÝ{£2¦1–8ç\=6Õ?P—~)Ômz¦•.Ç•
+Ï’¬¤‡^®îõÔ×QÂWžQ¼ÿJØcò¦Ñ{6è£u-–ŸœÍÔ®¦èÉùɧwuþÌÚ¬Èj¹;ÎM?­¨¹Ý.Ka¤®4‹DŒf»Ùûžî¿mùõ†¦ƒö XÂk  ¤¨ß=Î.$úNãÝY­×÷¾ßy` ùZ`¶4]õ#6Q-¢á*Α+¢vÃ[E4¡L[b]¬O†Ý&ø'ð2>‚Y1
+!o0QkQ·ìǃùz‰—En±½ûlºèÕO~bBãeŒ@ǺE|ƒ„(-é2̪ãMè5_Ü7ÊŠÆ-jn¢8” ™§s‰3ò7³;—höµ,ö„šè³»¯’ìS‘"Ô•@øù\
+äÚ#ÁÛD7Îm»â1,Ãö®¼BÄ}YiFi±{öÒÆÛ"¡" öÓi-øˆó«åŸLâOó’ ¢Ol,F5WR£{ŲқMòAÌÑ«û}{íî+« ËÊÎD”ŠÊ†FK¡Aæ÷îÕM7EähêÙbz€Ÿ>Åí¨…Ó¬>ܘWÉ¢T3/ A¤ù¸ZåÈÍ»¶¸TàeLÚo§3ÃPû%˜¶Þv¨eZgÜw'cÍ¥ÒbÍÑ×g!RMöÃèó¿ŠMŽªà$ —s”WkMVœ#‰¿±R¶Ú?[nPKÅcì©h&P»8Ü{²ß*ô*ð¢pw®@ç†4Š¬$™ax)¤Ô}B—¨Fº `ü•\Þd/¾‡sž´‡"ßÜ£þP‹JÇ.²Ã—¹.H°B·˜8+Ùí­H‘ã=}ì;,Äíug‰ˆ•b…¯Öš‡¼i Ò-$G¦ÃÇ9P£–s…s³ž•mLóAçZ€²^§t‰˜—Ô¶´ïØ v’6’)-¤­\“WÅÛ¢‹©&l„Ué±üª] á–¦É0O^Beôñ ñGùñr÷ÕæÏ=K_Üz[u¯É`wçFO7t„ïä£"±½ýGÝ7Zâèáß+Òéà|¡w¶6¸C8a6”§Ý&‰ª‹"Ž'´÷Ú`%¸Œ—û^ƒ’Zéçm]òžvXzÎVcNÀP¿Óž>Ž1éqŠÛ¨ýz›pÃØ&¹Z^ˆU
+Vž·;ÙÊÔ§4“ÞÙ„{A–y“†óù¸Cϯú
+fãG|Ž«[hŽÌm‡v :˜sÇW[>HÌ&@;OȾñ(=ÉU´$úgY*­+Uç|Þ0›½jþ„\¡Ÿ!GwÉœ2†ñX‡^Ñ„Úfù±†W÷æ-‹ûŽh\㉖œ@²ÿŽJœ /úÛ‰.Í·Œå
+@SCŸõ€|gÂü.ò>ÉÑj;¬ŸÃX×ï–Ö/S* ¤]˜‡×.30»
+¹`à•ŠŸ¥¦·)·ÄÇâ¯HõTZ÷y\ß*Šs¥XòU*&ûÆòÄŽµ»}òÍ7A@ØÑiÒþaö“,7 ™ôÄ{߉±ìÖNE®ÜÛâ†áË#ºƒ'[…­q³[jŸVÀžqá ’:G}È਽ȸª¢_ÉZ;œ˜nãØØì]þä^_jð­w§ñYµ=wµNçç»ÖOéj^MïIU"Þ$ò)¾šRT«d&C[¤M€ñ÷2ðªVh–tlj¬´<´y|ôtx™3¶gHËèø–þ§ö™üÇc&ÖþÂõc%Ay-‘WšªhIÞbI°LZãn°œ¹r¢k.Œ]'â­y=ªÏè@̪¸P^ÒóƒÏóêj\Œ§Ò9DüÑÔV„Ð’5EãË8K觰6fÞÏýÒ{ èμ[3µéºèŒ»ÅpÊür¥í%S2“‰ZWôÀó жJw¦‰GZ5³Q2iBµî@"
+?¿4Cwt¥~ëi±Mo¹2‘¹Â\¤_MkN1Èæx¦˜BHÁ5«¨)´ Z;C8ÉÚY×´æ'²fiz€þD@ÔÚÅ6קaßÛšãÂAÏ©÷±B÷¤,¬KæËŸäÌóû—¿Ïwr‡e»å£3ðÿ¶¾ó0ÊCHl:N,‹<ï~ßM¦A8í¨JO=Å‘à7<ðbdR‡€Dùq8ö©ù ÿ§›¾üû™ òžÏ)Ül¹ÆðV_Þ"µÂöÉ]ÿL²"Õ¢4,m"Ì+ÕXæ¦Y
+ø‚ñ|Ÿ’µ-ʱÜMõA™:*eB»Ê†îè5Á)~ì·<5ÌlQ@Á‚î<Ë%'¿q¬ß;î:õѵ¡NXú7å$´_4†Û è+±¹Gîšv˜aé?oËÃÆÌ[ Z®øÄwÉ «|ž#­O`U¤sÀOJŸø†ÞŽ‹gÞ»’‘$!R+áW½šOƒOÒÌ„_!KìóÉ0R4œd³ñÒzâÅbªêróT«óË’<L™¸)E¾ rÊŠnÏÓ.ŽBµÙ¸8ÀÑjRQª¦A“õO˜1Àw)mΆ¥º®,—궓ÇÒVÁ7sGX…ϧâÒ2ÆôÞoDž]ŸÎüs£~Nב)*•ˆw¸§–àbã–(õ^&îéaV,úë£ç¨&ÕÐrj8«³výø­0G;^T$›k{lÈ™áÊâ’íbsýÔ›µÅÞ@6€üÞñTI7y—_SæˆÚã–s ä]³ÿèêîºþì”Ë‘º0í°…‘hkLYþ¶&‹Ê!a ^ù­í Ú‘íf‚Ë>ò±Ô9¬–ŒÔ´vÙ5½µh"úƒk-T„ùYtl¡ó9DNuZ)ƒÅ,ÕaoÜÈN„Ëù}‰Af¡ÁûëÑ…žmæ±. A6å/Ú*§¯o)AD.sõEP^­ú|ñÜÎzuµ$ÄÀÏ_ikY?V}$B}ͱšÄÿ¥Eè؉˚Ãݵk]MëzŠ{\nžÝãFð»ßå›t·®pð}Óˆö ©— Nªrb—‘.Y>¶x%
+Gq( ôô¦‹àºY@t}еðÔhê–)@ìêMÔ•™X’…ó 6¤ýÞE¾­oê³–Œ³ÿÍBòfDpµÙ’˜q®ã¦â>õ}6My‘æ£qÿ·t»òõ™Qß^á3š‡Ë—Y£†ž
+Í>F®!™ó­LÈ#¦¹`ŸÍöÚŠV]Ø¡÷I›í/C]ßÊ1©&Zˆ¾ž2ê—€H’F2ÛÙ©OTD¾7ªs6? Õz£¨[µpN)7
+OÇ tU§|€kwãDa˜´Ý¢dûiŠÌ—%|ýôAŽ®”ë„—N¤ì{ŠKöˆ®Å+¼ŒÎ`myž“Zçí›üõI·)¿çM…X¬À0Š¹nô Næ®ø?ï(î]‡—ÅsÜ}ã^1HËê{¾7óh¹tñB!ð:Î&Cíe÷»1/EÕX’LKW,·5ánÊkb²÷îÚ &tÙÁëGý¨H cÄû–Õ–Â
+œhÓ>·ôç²àS=]¬÷¡í»¬¶½ÍžÇŽžÂ<_ü©; ¯­BßÇÍë(ÇÌù°W3ðHvƒ‡w8_K˜Õ$jÇ7A=Çþi†è_ž/= ó³†Àl5d¤2‰Rlâ@ðA‰‚ÌNˆŒ†÷´ „ÍœÒÈKuØþÉ%ã‚aƒ@‰z)áz¹DU
+]/_Z›°Ž}\|T+Ý©B¥`ù@„P(x×F¨‡îÊ ’ó-faˆ‹è™¶ëE¹Å×Õ¿XT]™1x4m{\/Ìr s¹ïRùCؘ’‹!æ<ßœôÀ½=ã—”„{NRÛºÛb»¦CµÂèruiÉ?½6zºƒB**T=Öõ3Š¾›‡ƒæªNüé¸5 6ø®0/2·P1ç18I§0+³Ò7æ2Sܳ_eÄÞ»eo¯§×=á{œÉÛ´bÏóËïGÀ-ó"ž¬Ìê-á¸æ‘;|Iy‚ I¾1\TÒ‚–î˜û/ÅßxYE›1Ñ®¤ƒ^í… Õ}†Ô‡¯:ûiãù}.ãö<±ÂI4 qà~€ùÊñ^¡µzN®úwñæY¶­x$‡½€[]E¬3ÍÇÈ>zWC+Ä—"³ÒI»®ëû——E†;̔η²6ïK¹z¢ê©ún¥­7Ñ·2yXl‡êVñ‘L©Óp¾è_‡Èö3û¶EÇzc's™¿>*<ØãØþŽ‚SË:©_G7¿¬dZià“e£§”ž÷íd[7âmDßekàõÏpõ|-’Eçã®rg k~Mæ5y™šQ)Üïc—œ‹œ€]kC L¡FѤ8j"펭y¹Mªÿ.{7ž³ÅÚý†»/H³/Âèì4 ‚žU§ÝSgCƒ?˜c  £'×MëhQ[É~rB³rgtÒ¾IÃBy¤ôƒŒ_±‚eYGOűR¤xýAÖ¾9è!î¥p*­µÓu–§uRŒá;¦¬K"EÐÚøó³‡UÈȈM
+ ÿþÖ¸ cŒC½ºÐ·¢‰kî ÷j©¦ÿ{€ö‡UXÔÒ‰âät'GNR»rmªÁ'|Ô÷b£J£ô/%¬<øx„Y¯º–«ÎGü<{rÖ·è©xo–Ç"Ê©Dy³êWŸœ²†šÌ5¨÷={ ©ý¢#—é4«Ü #5Ž‰¬8†&‘'Ö\Ó ~DEûŠÛ3òà‰âl=)9ʶa,M,Uˆ°1ãš`RâB36w°7&K˜¯ÿ¼’°mPf•ìJ”–å
+ÐÁÊ}Ì‚=4Ø-æ€Æ»‡·5ÒCùös¡(_%ÙóxÕÏ$7|Pˆjé“hîf»Fþe“tŸ*¨»¢ÚQâúº„Š‡ÅU‘±FÍÕÁ¡5ah};Œ!¬vƺœF¢·.T€Ž—ÃoßeÀ7zsYùÝ”W­kø2Bóg”tµs/Ñ>ÞL¬ÌçL/s¾»ú³Åx_m'LÏ-ò«ç<G½á²®’vñã ¢¡Už‰úPCóè·¿XÀK`<Dr*IÜûâ'HvMá›B£¶€Šb3&'ó:?s”÷ ¾n1ÛòxS/©’¥\ë £•)œÒígêÄÙá§9CõÉ¿ Ý‰½½€!¤ÃŸ22Xe¤œh!$ËÎ÷VTaÝ¢tESs°1£ÂúZE¬AeÔO¯+ºO¡ø`¡wÜÞ S]ôð5=e ßm¥ä.Ìü‡Çiˆ! zY4…ä– Eø¤Ð„³3¹|ÃNÛØ^Á÷mÙ켡OeI v”z‘ 1OèjÖH…PûóG¾Ñ½HÒg}<?W(æ™òÔ£¾DºU‘A¹0æ¯ÁäåZ¹ß|‹)jmÁpáS§­)¢ô¬<žQ±¦¿9o(Nûüè®êÛZRv>˜¿ûøüŽì3Å|]úþÚP‰ñNf›äz¡U8зG’ów|ú乡7K¢R$N‘ÑŒúl~¸(?¦ß.Ô1™Ù|z]8 …/ÂÆ
+“lY_qWwQPâDö}£Gb•>²Ã¹\ ZÒx†f´
+YÕ{šw’iLƒL‚R!mÂp;Å¢
+mM1i'¢X9¹{u|Þi¨l*èÕ©w\1˜KÀ¨P+ù}<qÇJW)8¿C´N«Žt«WöÌvØii^[¼sˆõ Ø/5ydŽoÊ­íö}™V’¦c´ÙEë=)ZGÆ:^ó~^èd/ã¹ÙÑ(d"ÖJá¦ë)ËñQèÍo™²ŽK\} AðMìxÇì‡VšTXÖOªå‡'lkoÒãÕðÊÎŒnyúIçr/ê íªlBõ>0ìc —"æ G²Ýúû¼ËóaÑJ'ª1 ÂÕjwG’jLù«¦("§ºÙÖé}ãðW£F6Û매!H¾‡lßJ¼ULvÕ¼l!å<Ñ™ ÌÂñu‰ì8èʯB;Td62ƒ÷Ú„šº‰¯?‘+Ø
+|û
+å&²]ø¬æMáu5s<eYcHï\À3ì&` L›]
+ÿñs‘0?÷&ôL–ÑíÊ:GQìñŽc)5þÜ^#$λi?(>ÅÌ1MMˆ¼DE¿ÞEÃàsòÓVo¦º÷²CòAbÀÆšPû$C5^.™çñÙÈÆÆ„ï8 aŽWVäܳ!\Ê/E µä«a¡vµšßCYêníæ mZ[µp€˜Õñ“îè- 5cG$%…&¤S ˆÙ ë3¿„óæ6H¨È*E¼‡çG%-ðËÒ´O»%’“Gë×
+-ÜIPšED1Ø”€v+ Ã_ olâ¤úMÄó¡À”ȳŸºXŽm÷
+–ÕÀ».ª¥+²Á0«¥KöˆŒ¹¹s8Š¢­>-Œ¦ŒóÛÚÂe²,’g\‚ŸI‚³Rµi ¼ìžð Ó|ÛNô{Iäa–‰©;o›ß•Q_Š*çxR:éÅëÕ•mЈù†ÂŽ Þ’c¼¬»©Øăv,S$¼€c­"ÛG—–’üf!xè #.¼ž%Æ)É%…æVµg«’uÆL—ÑO}=t½˜†Wfù1ìÂ|<æp!×±eîsUs½»‘±Æ¨’×8ÏGј øõCkk 1Dü+ÈØÕ«Áéw½6_#œZuÍ/[ÞO0[H‡â}Ÿ.Ö Ô’ò¦ððü]ñ~†Â !4ç6 ‹A¼°˜ÞÚÕ#’K†Ô+ Š°Í.Gµ º’ÞHFëߤ¤ {ã°â¡n%ùö<ùº´dy5>Ùy¾*[’ù¤Æ0ïÁÇe_Ó6üAn%é(|ž×|„U& ±ôÀòààžÅÙ|? :•(‡¶¶ ´¶úkm}Ú™‡Ûöí©æ:‚Lè¬ôi¹·þdK$( âRºsÊõGÇi$TW§.á®z’áëÉ~çÜ—òIþöˆZ?¿Ø'Î+eØÑi´xúñ¹L%Ð7ê=šY¸/I]Ê0ëI‡/)1\b‰:·jmåÒöôt& È‹“•Ûã øSž‚—#4Å…¶UB+ËX†=‰ÝV'§k=~™ÌmµŽ ª°{2ðÑg‚MÎPy$ƒ~’¸ù!«ª]€¯kZ WãH£ö {‰¯ +<¦%HíÅjÀDòNr•`žq>À½xéþ»§†ëÉÜ@M-/YëÃIŠš)t?]ëw1Ó.:JÊ´–E'æ3ÙfT¤µO,Ù©\’vºx•²Ù¨œ4Zæçͨfb«÷Êp9\‹Õ›
+bõýdê Çx’ßežŸŽ‘¶ûÒ˜ÄØSÔõ#*¯‡˜Ž.Ç%®RÈÉùzÈET©HVÍÓH¢Àæê‘2©ðebò`B…C6·¸dmçá¡õ£N'C ï†PK¹WG0…³bý„Á<IùqG‡Æ
+ODôp y²
+ò³¢Ç›5ÛJ¸Eê½C~Žö+ëß=f5¯…+g>3ªï½³Êi‘,¯ä^õA?;#þxÿ¦ˆz˜É^ÍÓTÄ›åÕz rkB9]¸â\ºðú‚mqÓµÑ`ê„J5aï㧟H¸´Ù§(ËCE¸²ªpuæ·þLOÓÉéíŸv»¶@Øæ LíøUÒí³‹g“G§Ny™¼%œãå½|Ð¥¸w%t\‰®Ë§Ï6Šô—‡¯*ç yݬ¶„XhtË—¥e¬Qo¶4ñG¦:·›‚˜éÕÙˆMœÆ ú;´Òû!˜W#¥]Ö,l@ªƒ\%!o•‹¼ã›CÞ”½zS^¸—OÔ,aÕsÕþS[‚K_œ9 Öck=Ö} –õlw»œs"ÚLj*DÃÍœáÕkìNPº˜OëÓ¤òÙÐ3Ô1…¬nq±»1òK\™…aË!0
+Þ÷ò|&hýÞúTî§:FŠŒVwìsðqK|’*.kò¬Æ*(RÌ’ypÞ ê\}ó¶¼o],6 >røb…áxãa÷¾}ñ ¦”T´2Va„ÔŒ¨:ø\ÊÞ
+ƒF«üæ6â,Çß,ñzv¿ü^j­žxý㈒u]PÔÛ Ž;“N6y$…. 8Ãó¥2"Å­ÇÂÃx}¬p¬k&·C|É$ž­+fÁÔ'Nêã>¤³^IœMø™/¥.RS‰ˆ¼»Ú¨Û }ËÕ4ùÁ7UóÕ#<¯*u
+ZA­B]
+jD ø¬ù­ðSjG/F¡¯vÁBl«¸
+Ê–íb‹Üfɇ¾BL‘gšªÒû&ô ­é¤2xÿq‘¼Å5¯<ïÖ’2çVžÉÜð•Û[gt±Á>Úéò®ž?W.°†ºZ¢!͈­‚ãü®Õ­Xœw‰†oLrÍ‘ªØš¨ZK å1åi”cg‡Ïg‰+ /iy0?c±n“¶·a[DÄ2+¤ iôçUÏÁØbŠóÛŸ,MAîñŨoð‘þ\ì)ëdcϱUŠ
+°Sœ¦Íè«< PíÍÚ,'¦P,?½ÓÕþ¹&‘ßP¿‡P7õ’`“õ "µç[sÏZ‘MõàôÇœ:?Èe?$NÛi<d_Æ»OK×Õh†ØÊ„õƒ.ùDÆ”.˜Ÿ‚£³®m×¼ì”Õ7ïxJݬª˜–V‰aÅ,"÷O0rHÖh3ÃYluàÈïÛàÞ ÔbŒöÓgÞ Å%ÃŽ½ëÜÈmöÚGåž]/|§;9ò]5O1-)W€È2©Zj–sŠZQŽž¬IUê o’I$y¦áKT¿{Å‚EŸî D;›·ºL\ÿÍãíæ·w5¬"Í6g$Á5Ÿù­€d!L!Êü uoˆ‚·§ÌØ
+Üpà2ýl“ÛØzáBcò¥gv¾"ܲ’6Y8ÌI`¿¢›Žæí¼£!,Ò"ÂÔ
+%î¯=ĆÄðNìûq~¡j½½†1R×1)ä*€rN'™TœpnÝ«9A’ßí^¹KQÁqZCÑö:]J¾ãlj†H-;«’;ŒsVD„¿•c€SxyVºÉ€õ»ƒÍÈþñz>Ã{ŸûÝXNJWjò>\3›‰Š‰œTb œp¶{ãŸPmUË~>’Ÿ#Ê»c¶¯™°UºÛÜU›÷Rò3©R“mœcªëqòÜAíÃ_j(Ìѽ‘‚+)x_å
+‘ì#+ü8ë·ò׉­œ¯‰Z,Ž¨ã§yæHgA»gJ=—œË®ºàë¹ %š%}Ûãìëù©sç Æ_î>j)íÜ3P¶‘pj^cÄXx< d {€R`ˆ’ÁÈ%LhPÀ^Z­³òž‹VXÙ•³LÁ´…[¥5r¦5åû\€»ÊDñz ?ü½ j»>q4ƒܱ¼UÚŠU>…r­È^S6™tϸõÜÁbÛ1BpÁ]À(ÛÍ™¼6ó1ìu](ñÆ0cvÝŽ§5B'‘òǶ° \É•°oß÷Gî&ô;²^ýÔW\­Èç
+;»¾ï•ØÆ:tß±t‹õŠ‘òµöXÒk‰ãd6‹îÃ$Ëêj-rí}&YÔ´+Êe&7Nì4o­èðA`U+®¤ÝãÃÜIöi£+Ä£¯”¶èvù4l¾GPløÒ§P¨7’u2ågÜ™ ¼“DL!1aÚz1-™øBôP&c"‹s¼Æ†ö)ör-H#ÄŠ¬}0…jE)Û®Ëxµ¨«ù.åä®Ù%ýÌ(µüÛ«x?ÆÜÁû àXUècÑÊ•¼Ž&1Õ\Jh ‘†¨1Ìó#ô}ﬠÁ)w!ýÈTÂù›Ç†#çH!„
+/Š}g¶Ý^}¨½AÚßXŒ%/H äý A“®˜ ^c !\N ÷:¿Í‡põà-ÈŸÈ“Cwœšîhc]ºU!Û²ŸËúT(„Þö3•AG l •fôQ~óðŒTËâjof ÃGaJB¶Ã4IRËyw™>°s í~üJ‹ìç+·G B–$µ±‡/ì‚»çeœ¬Q26ê
+€O}Ñ1lûNz¾9Ëç= –qÒ(1«8édÔçsŸ^Z¿ŒFo²p:¨ijÁ1÷õ¦Ï%Y9´÷zA´9*G½FMÙZT®&ýJßhHþŸ
+™ô†aiΊ¹Õ(ö
+­!*YUêÐU yåäÕI‚õ˜ öëÙV[%f9žæ'\:ô¹°Y“ïÝj¿ŠÎ^9¤$ àÍÖnb)öËðëI‚qØ(=ÍàçZÚDžÄ¦Ùá˜&¦÷˼amøÍ-Û‡ïü9¶-&ƒ°|—Øo.TŠ©U˲ÆÖ·ÒY4Ë‹¾EŸt]­3|>¯_î*©¨4üþÍÓ½›Û¢™Cžò×ÍbËßÌ¢îã[¾ˆõíá,MÜ&ˆ 3ŒeŒôÒ9çémeîÃúö@A /¤]þaÞ`G¯ em!û9­[’S ‚a;sq³Z¶
+‹¦D)ºÐ•SÎ0¬•"‹ÓÌ'¾CÓnÉ‘—Å.(BQÎìtƒT_Ð'¯2_˜yëó=ü ˜¤O˜å6„¯·Ý'gT”PÆ€ð;h¸TÈ·Í“>î%òo“F§lÇ[>çÒö¾Í¤— f®ç.ÔjåšÂr­ý¦Ž!»¿ ÕöD¯|Â׿±e¿>mþ¤¸ àâÒ5±/´’ÉBUøã;èoÛÑ
+8òv¾&[éYð`9®ŽD
+ê†ð ÒõqòŒ±C¢€„òqNÝþÅ„è%àJßÑS9dÖïs…Œ˜`€Ú Fâ i}ZjûåkœÞ!S®Ê9p3 +Ó«ßêw¯g›#|"RSÞhøñ1X0ûPX&™ÇŸC}Œw{ºÑx ¼¥Œ!y4é[¾›b;þ‹¾øþÓ\åø´“²Û…p MTËé:J`½3{£vfûiöËz-*ë Gâ’(Äœ[¦^²ÖÊžäÅÔ¼íÚµ`@ tc™@x¡xåA9ùkwpŠ¸Ì1á(ob¨Êå8£ šƒÄ™¯MkrPÔ1ÏnE ]`0£˜«a‚~0ÏPÐŒù¯g¶QpŸ]Û‡†
+ÃUgPzrinÙÙ’'=+ãÝ5m^° Cg†¦Õxa<V!ºšý]4ö*¦yõÍ¿%ùFÃ{ûÐâ›ÚÆ€rknœŠñÒBPÆÑûú”Ò%iŠ¸wUá‚ß«ˆü¶KxÁÒ@Lrl”ŠN` ðF…¦{ŒÑ‡“m:‘Gþ€Oæì‹ÝL"ô†óïYŒ“Ø[¼g‰üD29ƒ#V9åkX«Ý©ÒLÐÇ#¯Ï®è0q§d’Äßd´±†80z¢è›bì¾8†*B­ø& N*ÐÁn¶èÒíB_‡¼¨œ{À]Ù»…ÀWHÊÒµúKï%„ŠðŸŠåi«p刔¯·—kÅÙ €GY ˆÖ€.áÁ™íÆxö¢4)ÿß:}¤a'îG)Z7büþØÉ]*Ë—b6÷Sÿä=Í]B»„øáHL¢aÝEð)o ¿z"Xv]ç;¼-½yž8u¯NÓ keÐI& â>ÞŽ g™ ].¼
+ßðs$:ÉC$¹%b›ˆç;À"°à±AÄrÚñ-—[~ª‹çÔŸ×&•'3ãªè/ò$¶°oÿÙ:¦,pÕ†ä.ëQ÷OA _=†{Œa¼D´W5ñë„F3«<'™W=ÕÕ”å4DL*\ù¹”;ØÆXQ<jÿ¯l Áyo³¦ç«%ߊ7é’@Éøå8é¡P×C®˜þ$›S¦Z±øEf ÿÝëÐË8Òe šRÊߺðµû¾ÏŒË‰0ÂpûîfÙeÉÚ€…è8¦ö.M1~4Xå~žÓ‡þ P>V·ìGh |‚“fÏ»#»,Àži㮩Wð ‡}µð‹K$Ä¥™ÊûY—Õ§ÓâpÔI?e)ó)¶ ˆßúw¯ŽH]õ¶HlÝ
+_P¬?DÏèÿ4VI3<Ù[#9¯¸Ø=1¿©˜¬º°.óˆ ؆ô3ƃ/`ï5”®™úŽMû§¸z˜ÌòEÃBr6‰Ùô9Jhˆ t5þàšÊUhð Â,Ã3츀ò»Ìö,D:T)´ÄŠŸß°«¦a÷Öíz êåÞ·±¼—ÿX¦}65jµ| }¡›EÕ§»HaÔ8íñ¥ùSÁ¤©Òã!†ÃD¸™ìÂØ¡]Ó-:IçÙ<‹ð¶%ÖZ¸q‡.çÉ=Ø
+{šæ²" ÝM•©jÙ‡–NhY¤FÕßOB:è—¢_zmë«Ë” ô4LªÆ"{%ÌÚÐã9ÀOï÷s2ªõi”ŽÅ§@½kíM:v&¿™ m¶“\hti!½a0xš–:¢ úH¥üp;rmÒÃð>ìTK&vnjT)O,"º„„ÔÄPý,Å÷Aæ³ÑçcöÏÇþ£¨›qœzYc­.TpŽh[Øâqµ‹ŠuåÉ/2[¿+˜Í :TøÈ=5ă· S°»²¨wc¬œž×/éÔǸɻZA¶ÖK¯®ÛE<ãŠ`&æìÔg¢X¤¬~ßf‡™ú/Óù*C8 n ›Qub$µ•}©&ÿu.eùiÑ`‹g¿/‰¤Ï¤é,Ѭ˜e”äÛQÎg9]p[ä}áCe‚OsSÓX;Ø3š‘VƒFS°›0‘‡Eø
+ø•Ön\qÃýdŠitW9ç_Å/=±X¯Z 4h©{îÞ­¶và9ùƒÁD…Ä ¶V÷Ôl®ÍŒ0@“À«Buh‹ÑG£Q ä"œ©àp~‰÷Ô/UED£Û¹bvïé-â£AŸ@3Tp„?ŠÏ ?´î3™Ö_Ržpû}XÉÕüãÌ×#Ó
+endstream
+endobj
+2726 0 obj <<
+/Type /FontDescriptor
+/FontName /XOYNYF+CMTT9
+/Flags 4
+/FontBBox [-6 -233 542 698]
+/Ascent 611
+/CapHeight 611
+/Descent -222
+/ItalicAngle 0
+/StemV 74
+/XHeight 431
+/CharSet (/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/a/ampersand/asciicircum/asciitilde/asterisk/at/b/backslash/bar/braceleft/braceright/bracketleft/bracketright/c/colon/comma/d/dollar/e/eight/equal/exclam/f/five/four/g/greater/h/hyphen/i/j/k/l/less/m/n/nine/numbersign/o/one/p/parenleft/parenright/percent/period/plus/q/question/quotedbl/quoteleft/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/underscore/v/visiblespace/w/x/y/z/zero)
+/FontFile 2725 0 R
+>> endobj
+600 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /CWKDWU+CMBX10
+/FontDescriptor 2686 0 R
+/FirstChar 12
+/LastChar 122
+/Widths 2676 0 R
+>> endobj
+599 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /ABFOIU+CMBX12
+/FontDescriptor 2688 0 R
+/FirstChar 12
+/LastChar 122
+/Widths 2677 0 R
+>> endobj
+601 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /IRYRHS+CMBX7
+/FontDescriptor 2690 0 R
+/FirstChar 65
+/LastChar 65
+/Widths 2675 0 R
+>> endobj
+750 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /AZWUCQ+CMCSC10
+/FontDescriptor 2692 0 R
+/FirstChar 98
+/LastChar 116
+/Widths 2669 0 R
+>> endobj
+805 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /HTWIVK+CMITT10
+/FontDescriptor 2694 0 R
+/FirstChar 45
+/LastChar 117
+/Widths 2667 0 R
+>> endobj
+749 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /DFNGEF+CMMI10
+/FontDescriptor 2696 0 R
+/FirstChar 34
+/LastChar 34
+/Widths 2670 0 R
+>> endobj
+596 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /UBFIJO+CMR10
+/FontDescriptor 2698 0 R
+/FirstChar 11
+/LastChar 127
+/Widths 2679 0 R
+>> endobj
+594 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /QQEMZJ+CMR12
+/FontDescriptor 2700 0 R
+/FirstChar 44
+/LastChar 119
+/Widths 2681 0 R
+>> endobj
+591 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /BXARCG+CMR17
+/FontDescriptor 2702 0 R
+/FirstChar 65
+/LastChar 121
+/Widths 2684 0 R
+>> endobj
+1480 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /BTMECO+CMR6
+/FontDescriptor 2704 0 R
+/FirstChar 65
+/LastChar 65
+/Widths 2664 0 R
+>> endobj
+744 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /VDRGYX+CMR7
+/FontDescriptor 2706 0 R
+/FirstChar 48
+/LastChar 65
+/Widths 2671 0 R
+>> endobj
+603 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /YXHHTG+CMR8
+/FontDescriptor 2708 0 R
+/FirstChar 40
+/LastChar 121
+/Widths 2673 0 R
+>> endobj
+1463 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /TACIMK+CMR9
+/FontDescriptor 2710 0 R
+/FirstChar 11
+/LastChar 122
+/Widths 2665 0 R
+>> endobj
+593 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /ZBLPKD+CMSY10
+/FontDescriptor 2712 0 R
+/FirstChar 3
+/LastChar 105
+/Widths 2682 0 R
+>> endobj
+602 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /UPJTNE+CMSY6
+/FontDescriptor 2714 0 R
+/FirstChar 3
+/LastChar 121
+/Widths 2674 0 R
+>> endobj
+595 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /FJSKST+CMSY8
+/FontDescriptor 2716 0 R
+/FirstChar 121
+/LastChar 121
+/Widths 2680 0 R
+>> endobj
+804 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /WGAVVH+CMSY9
+/FontDescriptor 2718 0 R
+/FirstChar 104
+/LastChar 105
+/Widths 2668 0 R
+>> endobj
+827 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /ICPBAR+CMTI10
+/FontDescriptor 2720 0 R
+/FirstChar 12
+/LastChar 119
+/Widths 2666 0 R
+>> endobj
+597 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /SUUVMZ+CMTT10
+/FontDescriptor 2722 0 R
+/FirstChar 32
+/LastChar 125
+/Widths 2678 0 R
+>> endobj
+592 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /GGRJUS+CMTT12
+/FontDescriptor 2724 0 R
+/FirstChar 45
+/LastChar 121
+/Widths 2683 0 R
+>> endobj
+743 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /XOYNYF+CMTT9
+/FontDescriptor 2726 0 R
+/FirstChar 32
+/LastChar 126
+/Widths 2672 0 R
+>> endobj
+604 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2727 0 R
+/Kids [566 0 R 646 0 R 686 0 R 729 0 R 740 0 R 746 0 R]
+>> endobj
+755 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2727 0 R
+/Kids [752 0 R 757 0 R 761 0 R 765 0 R 769 0 R 777 0 R]
+>> endobj
+806 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2727 0 R
+/Kids [797 0 R 808 0 R 812 0 R 816 0 R 820 0 R 824 0 R]
+>> endobj
+832 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2727 0 R
+/Kids [829 0 R 834 0 R 838 0 R 842 0 R 846 0 R 851 0 R]
+>> endobj
+858 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2727 0 R
+/Kids [855 0 R 860 0 R 864 0 R 868 0 R 872 0 R 876 0 R]
+>> endobj
+883 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2727 0 R
+/Kids [880 0 R 885 0 R 889 0 R 893 0 R 898 0 R 903 0 R]
+>> endobj
+910 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2728 0 R
+/Kids [907 0 R 912 0 R 916 0 R 920 0 R 924 0 R 928 0 R]
+>> endobj
+935 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2728 0 R
+/Kids [932 0 R 937 0 R 941 0 R 945 0 R 949 0 R 953 0 R]
+>> endobj
+960 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2728 0 R
+/Kids [957 0 R 962 0 R 967 0 R 972 0 R 976 0 R 980 0 R]
+>> endobj
+987 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2728 0 R
+/Kids [984 0 R 989 0 R 993 0 R 997 0 R 1001 0 R 1005 0 R]
+>> endobj
+1012 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2728 0 R
+/Kids [1009 0 R 1014 0 R 1018 0 R 1022 0 R 1026 0 R 1030 0 R]
+>> endobj
+1037 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2728 0 R
+/Kids [1034 0 R 1039 0 R 1043 0 R 1047 0 R 1051 0 R 1055 0 R]
+>> endobj
+1062 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2729 0 R
+/Kids [1059 0 R 1064 0 R 1068 0 R 1072 0 R 1076 0 R 1080 0 R]
+>> endobj
+1087 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2729 0 R
+/Kids [1084 0 R 1089 0 R 1093 0 R 1097 0 R 1101 0 R 1105 0 R]
+>> endobj
+1112 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2729 0 R
+/Kids [1109 0 R 1114 0 R 1118 0 R 1122 0 R 1126 0 R 1130 0 R]
+>> endobj
+1137 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2729 0 R
+/Kids [1134 0 R 1139 0 R 1143 0 R 1147 0 R 1151 0 R 1155 0 R]
+>> endobj
+1162 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2729 0 R
+/Kids [1159 0 R 1164 0 R 1168 0 R 1172 0 R 1176 0 R 1180 0 R]
+>> endobj
+1187 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2729 0 R
+/Kids [1184 0 R 1189 0 R 1193 0 R 1197 0 R 1214 0 R 1237 0 R]
+>> endobj
+1281 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2730 0 R
+/Kids [1259 0 R 1283 0 R 1287 0 R 1292 0 R 1296 0 R 1300 0 R]
+>> endobj
+1308 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2730 0 R
+/Kids [1305 0 R 1310 0 R 1314 0 R 1318 0 R 1322 0 R 1326 0 R]
+>> endobj
+1333 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2730 0 R
+/Kids [1330 0 R 1335 0 R 1339 0 R 1343 0 R 1347 0 R 1351 0 R]
+>> endobj
+1390 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2730 0 R
+/Kids [1365 0 R 1392 0 R 1414 0 R 1440 0 R 1445 0 R 1450 0 R]
+>> endobj
+1457 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2730 0 R
+/Kids [1454 0 R 1459 0 R 1465 0 R 1469 0 R 1473 0 R 1477 0 R]
+>> endobj
+1485 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2730 0 R
+/Kids [1482 0 R 1487 0 R 1491 0 R 1495 0 R 1533 0 R 1555 0 R]
+>> endobj
+1578 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2731 0 R
+/Kids [1575 0 R 1621 0 R 1669 0 R 1720 0 R 1776 0 R 1816 0 R]
+>> endobj
+1947 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2731 0 R
+/Kids [1944 0 R 2042 0 R 2143 0 R 2203 0 R 2227 0 R 2258 0 R]
+>> endobj
+2285 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2731 0 R
+/Kids [2282 0 R 2328 0 R 2387 0 R 2417 0 R 2479 0 R 2514 0 R]
+>> endobj
+2551 0 obj <<
+/Type /Pages
+/Count 5
+/Parent 2731 0 R
+/Kids [2548 0 R 2578 0 R 2607 0 R 2652 0 R 2661 0 R]
+>> endobj
+2727 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 2732 0 R
+/Kids [604 0 R 755 0 R 806 0 R 832 0 R 858 0 R 883 0 R]
+>> endobj
+2728 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 2732 0 R
+/Kids [910 0 R 935 0 R 960 0 R 987 0 R 1012 0 R 1037 0 R]
+>> endobj
+2729 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 2732 0 R
+/Kids [1062 0 R 1087 0 R 1112 0 R 1137 0 R 1162 0 R 1187 0 R]
+>> endobj
+2730 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 2732 0 R
+/Kids [1281 0 R 1308 0 R 1333 0 R 1390 0 R 1457 0 R 1485 0 R]
+>> endobj
+2731 0 obj <<
+/Type /Pages
+/Count 23
+/Parent 2732 0 R
+/Kids [1578 0 R 1947 0 R 2285 0 R 2551 0 R]
+>> endobj
+2732 0 obj <<
+/Type /Pages
+/Count 167
+/Kids [2727 0 R 2728 0 R 2729 0 R 2730 0 R 2731 0 R]
+>> endobj
+2733 0 obj <<
+/Type /Outlines
+/First 3 0 R
+/Last 563 0 R
+/Count 33
+>> endobj
+563 0 obj <<
+/Title 564 0 R
+/A 561 0 R
+/Parent 2733 0 R
+/Prev 539 0 R
+>> endobj
+559 0 obj <<
+/Title 560 0 R
+/A 557 0 R
+/Parent 539 0 R
+/Prev 555 0 R
+>> endobj
+555 0 obj <<
+/Title 556 0 R
+/A 553 0 R
+/Parent 539 0 R
+/Prev 551 0 R
+/Next 559 0 R
+>> endobj
+551 0 obj <<
+/Title 552 0 R
+/A 549 0 R
+/Parent 539 0 R
+/Prev 547 0 R
+/Next 555 0 R
+>> endobj
+547 0 obj <<
+/Title 548 0 R
+/A 545 0 R
+/Parent 539 0 R
+/Prev 543 0 R
+/Next 551 0 R
+>> endobj
+543 0 obj <<
+/Title 544 0 R
+/A 541 0 R
+/Parent 539 0 R
+/Next 547 0 R
+>> endobj
+539 0 obj <<
+/Title 540 0 R
+/A 537 0 R
+/Parent 2733 0 R
+/Prev 531 0 R
+/Next 563 0 R
+/First 543 0 R
+/Last 559 0 R
+/Count -5
+>> endobj
+535 0 obj <<
+/Title 536 0 R
+/A 533 0 R
+/Parent 531 0 R
+>> endobj
+531 0 obj <<
+/Title 532 0 R
+/A 529 0 R
+/Parent 2733 0 R
+/Prev 419 0 R
+/Next 539 0 R
+/First 535 0 R
+/Last 535 0 R
+/Count -1
+>> endobj
+527 0 obj <<
+/Title 528 0 R
+/A 525 0 R
+/Parent 419 0 R
+/Prev 523 0 R
+>> endobj
+523 0 obj <<
+/Title 524 0 R
+/A 521 0 R
+/Parent 419 0 R
+/Prev 483 0 R
+/Next 527 0 R
+>> endobj
+519 0 obj <<
+/Title 520 0 R
+/A 517 0 R
+/Parent 483 0 R
+/Prev 515 0 R
+>> endobj
+515 0 obj <<
+/Title 516 0 R
+/A 513 0 R
+/Parent 483 0 R
+/Prev 511 0 R
+/Next 519 0 R
+>> endobj
+511 0 obj <<
+/Title 512 0 R
+/A 509 0 R
+/Parent 483 0 R
+/Prev 507 0 R
+/Next 515 0 R
+>> endobj
+507 0 obj <<
+/Title 508 0 R
+/A 505 0 R
+/Parent 483 0 R
+/Prev 503 0 R
+/Next 511 0 R
+>> endobj
+503 0 obj <<
+/Title 504 0 R
+/A 501 0 R
+/Parent 483 0 R
+/Prev 499 0 R
+/Next 507 0 R
+>> endobj
+499 0 obj <<
+/Title 500 0 R
+/A 497 0 R
+/Parent 483 0 R
+/Prev 495 0 R
+/Next 503 0 R
+>> endobj
+495 0 obj <<
+/Title 496 0 R
+/A 493 0 R
+/Parent 483 0 R
+/Prev 491 0 R
+/Next 499 0 R
+>> endobj
+491 0 obj <<
+/Title 492 0 R
+/A 489 0 R
+/Parent 483 0 R
+/Prev 487 0 R
+/Next 495 0 R
+>> endobj
+487 0 obj <<
+/Title 488 0 R
+/A 485 0 R
+/Parent 483 0 R
+/Next 491 0 R
+>> endobj
+483 0 obj <<
+/Title 484 0 R
+/A 481 0 R
+/Parent 419 0 R
+/Prev 479 0 R
+/Next 523 0 R
+/First 487 0 R
+/Last 519 0 R
+/Count -9
+>> endobj
+479 0 obj <<
+/Title 480 0 R
+/A 477 0 R
+/Parent 419 0 R
+/Prev 431 0 R
+/Next 483 0 R
+>> endobj
+475 0 obj <<
+/Title 476 0 R
+/A 473 0 R
+/Parent 431 0 R
+/Prev 471 0 R
+>> endobj
+471 0 obj <<
+/Title 472 0 R
+/A 469 0 R
+/Parent 431 0 R
+/Prev 467 0 R
+/Next 475 0 R
+>> endobj
+467 0 obj <<
+/Title 468 0 R
+/A 465 0 R
+/Parent 431 0 R
+/Prev 463 0 R
+/Next 471 0 R
+>> endobj
+463 0 obj <<
+/Title 464 0 R
+/A 461 0 R
+/Parent 431 0 R
+/Prev 459 0 R
+/Next 467 0 R
+>> endobj
+459 0 obj <<
+/Title 460 0 R
+/A 457 0 R
+/Parent 431 0 R
+/Prev 455 0 R
+/Next 463 0 R
+>> endobj
+455 0 obj <<
+/Title 456 0 R
+/A 453 0 R
+/Parent 431 0 R
+/Prev 451 0 R
+/Next 459 0 R
+>> endobj
+451 0 obj <<
+/Title 452 0 R
+/A 449 0 R
+/Parent 431 0 R
+/Prev 447 0 R
+/Next 455 0 R
+>> endobj
+447 0 obj <<
+/Title 448 0 R
+/A 445 0 R
+/Parent 431 0 R
+/Prev 443 0 R
+/Next 451 0 R
+>> endobj
+443 0 obj <<
+/Title 444 0 R
+/A 441 0 R
+/Parent 431 0 R
+/Prev 439 0 R
+/Next 447 0 R
+>> endobj
+439 0 obj <<
+/Title 440 0 R
+/A 437 0 R
+/Parent 431 0 R
+/Prev 435 0 R
+/Next 443 0 R
+>> endobj
+435 0 obj <<
+/Title 436 0 R
+/A 433 0 R
+/Parent 431 0 R
+/Next 439 0 R
+>> endobj
+431 0 obj <<
+/Title 432 0 R
+/A 429 0 R
+/Parent 419 0 R
+/Prev 427 0 R
+/Next 479 0 R
+/First 435 0 R
+/Last 475 0 R
+/Count -11
+>> endobj
+427 0 obj <<
+/Title 428 0 R
+/A 425 0 R
+/Parent 419 0 R
+/Prev 423 0 R
+/Next 431 0 R
+>> endobj
+423 0 obj <<
+/Title 424 0 R
+/A 421 0 R
+/Parent 419 0 R
+/Next 427 0 R
+>> endobj
+419 0 obj <<
+/Title 420 0 R
+/A 417 0 R
+/Parent 2733 0 R
+/Prev 415 0 R
+/Next 531 0 R
+/First 423 0 R
+/Last 527 0 R
+/Count -7
+>> endobj
+415 0 obj <<
+/Title 416 0 R
+/A 413 0 R
+/Parent 2733 0 R
+/Prev 407 0 R
+/Next 419 0 R
+>> endobj
+411 0 obj <<
+/Title 412 0 R
+/A 409 0 R
+/Parent 407 0 R
+>> endobj
+407 0 obj <<
+/Title 408 0 R
+/A 405 0 R
+/Parent 2733 0 R
+/Prev 399 0 R
+/Next 415 0 R
+/First 411 0 R
+/Last 411 0 R
+/Count -1
+>> endobj
+403 0 obj <<
+/Title 404 0 R
+/A 401 0 R
+/Parent 399 0 R
+>> endobj
+399 0 obj <<
+/Title 400 0 R
+/A 397 0 R
+/Parent 2733 0 R
+/Prev 391 0 R
+/Next 407 0 R
+/First 403 0 R
+/Last 403 0 R
+/Count -1
+>> endobj
+395 0 obj <<
+/Title 396 0 R
+/A 393 0 R
+/Parent 391 0 R
+>> endobj
+391 0 obj <<
+/Title 392 0 R
+/A 389 0 R
+/Parent 2733 0 R
+/Prev 387 0 R
+/Next 399 0 R
+/First 395 0 R
+/Last 395 0 R
+/Count -1
+>> endobj
+387 0 obj <<
+/Title 388 0 R
+/A 385 0 R
+/Parent 2733 0 R
+/Prev 375 0 R
+/Next 391 0 R
+>> endobj
+383 0 obj <<
+/Title 384 0 R
+/A 381 0 R
+/Parent 375 0 R
+/Prev 379 0 R
+>> endobj
+379 0 obj <<
+/Title 380 0 R
+/A 377 0 R
+/Parent 375 0 R
+/Next 383 0 R
+>> endobj
+375 0 obj <<
+/Title 376 0 R
+/A 373 0 R
+/Parent 2733 0 R
+/Prev 371 0 R
+/Next 387 0 R
+/First 379 0 R
+/Last 383 0 R
+/Count -2
+>> endobj
+371 0 obj <<
+/Title 372 0 R
+/A 369 0 R
+/Parent 2733 0 R
+/Prev 367 0 R
+/Next 375 0 R
+>> endobj
+367 0 obj <<
+/Title 368 0 R
+/A 365 0 R
+/Parent 2733 0 R
+/Prev 363 0 R
+/Next 371 0 R
+>> endobj
+363 0 obj <<
+/Title 364 0 R
+/A 361 0 R
+/Parent 2733 0 R
+/Prev 359 0 R
+/Next 367 0 R
+>> endobj
+359 0 obj <<
+/Title 360 0 R
+/A 357 0 R
+/Parent 2733 0 R
+/Prev 343 0 R
+/Next 363 0 R
+>> endobj
+355 0 obj <<
+/Title 356 0 R
+/A 353 0 R
+/Parent 343 0 R
+/Prev 351 0 R
+>> endobj
+351 0 obj <<
+/Title 352 0 R
+/A 349 0 R
+/Parent 343 0 R
+/Prev 347 0 R
+/Next 355 0 R
+>> endobj
+347 0 obj <<
+/Title 348 0 R
+/A 345 0 R
+/Parent 343 0 R
+/Next 351 0 R
+>> endobj
+343 0 obj <<
+/Title 344 0 R
+/A 341 0 R
+/Parent 2733 0 R
+/Prev 339 0 R
+/Next 359 0 R
+/First 347 0 R
+/Last 355 0 R
+/Count -3
+>> endobj
+339 0 obj <<
+/Title 340 0 R
+/A 337 0 R
+/Parent 2733 0 R
+/Prev 335 0 R
+/Next 343 0 R
+>> endobj
+335 0 obj <<
+/Title 336 0 R
+/A 333 0 R
+/Parent 2733 0 R
+/Prev 319 0 R
+/Next 339 0 R
+>> endobj
+331 0 obj <<
+/Title 332 0 R
+/A 329 0 R
+/Parent 323 0 R
+/Prev 327 0 R
+>> endobj
+327 0 obj <<
+/Title 328 0 R
+/A 325 0 R
+/Parent 323 0 R
+/Next 331 0 R
+>> endobj
+323 0 obj <<
+/Title 324 0 R
+/A 321 0 R
+/Parent 319 0 R
+/First 327 0 R
+/Last 331 0 R
+/Count -2
+>> endobj
+319 0 obj <<
+/Title 320 0 R
+/A 317 0 R
+/Parent 2733 0 R
+/Prev 315 0 R
+/Next 335 0 R
+/First 323 0 R
+/Last 323 0 R
+/Count -1
+>> endobj
+315 0 obj <<
+/Title 316 0 R
+/A 313 0 R
+/Parent 2733 0 R
+/Prev 239 0 R
+/Next 319 0 R
+>> endobj
+311 0 obj <<
+/Title 312 0 R
+/A 309 0 R
+/Parent 307 0 R
+>> endobj
+307 0 obj <<
+/Title 308 0 R
+/A 305 0 R
+/Parent 239 0 R
+/Prev 299 0 R
+/First 311 0 R
+/Last 311 0 R
+/Count -1
+>> endobj
+303 0 obj <<
+/Title 304 0 R
+/A 301 0 R
+/Parent 299 0 R
+>> endobj
+299 0 obj <<
+/Title 300 0 R
+/A 297 0 R
+/Parent 239 0 R
+/Prev 291 0 R
+/Next 307 0 R
+/First 303 0 R
+/Last 303 0 R
+/Count -1
+>> endobj
+295 0 obj <<
+/Title 296 0 R
+/A 293 0 R
+/Parent 291 0 R
+>> endobj
+291 0 obj <<
+/Title 292 0 R
+/A 289 0 R
+/Parent 239 0 R
+/Prev 287 0 R
+/Next 299 0 R
+/First 295 0 R
+/Last 295 0 R
+/Count -1
+>> endobj
+287 0 obj <<
+/Title 288 0 R
+/A 285 0 R
+/Parent 239 0 R
+/Prev 283 0 R
+/Next 291 0 R
+>> endobj
+283 0 obj <<
+/Title 284 0 R
+/A 281 0 R
+/Parent 239 0 R
+/Prev 279 0 R
+/Next 287 0 R
+>> endobj
+279 0 obj <<
+/Title 280 0 R
+/A 277 0 R
+/Parent 239 0 R
+/Prev 255 0 R
+/Next 283 0 R
+>> endobj
+275 0 obj <<
+/Title 276 0 R
+/A 273 0 R
+/Parent 255 0 R
+/Prev 271 0 R
+>> endobj
+271 0 obj <<
+/Title 272 0 R
+/A 269 0 R
+/Parent 255 0 R
+/Prev 267 0 R
+/Next 275 0 R
+>> endobj
+267 0 obj <<
+/Title 268 0 R
+/A 265 0 R
+/Parent 255 0 R
+/Prev 263 0 R
+/Next 271 0 R
+>> endobj
+263 0 obj <<
+/Title 264 0 R
+/A 261 0 R
+/Parent 255 0 R
+/Prev 259 0 R
+/Next 267 0 R
+>> endobj
+259 0 obj <<
+/Title 260 0 R
+/A 257 0 R
+/Parent 255 0 R
+/Next 263 0 R
+>> endobj
+255 0 obj <<
+/Title 256 0 R
+/A 253 0 R
+/Parent 239 0 R
+/Prev 251 0 R
+/Next 279 0 R
+/First 259 0 R
+/Last 275 0 R
+/Count -5
+>> endobj
+251 0 obj <<
+/Title 252 0 R
+/A 249 0 R
+/Parent 239 0 R
+/Prev 247 0 R
+/Next 255 0 R
+>> endobj
+247 0 obj <<
+/Title 248 0 R
+/A 245 0 R
+/Parent 239 0 R
+/Prev 243 0 R
+/Next 251 0 R
+>> endobj
+243 0 obj <<
+/Title 244 0 R
+/A 241 0 R
+/Parent 239 0 R
+/Next 247 0 R
+>> endobj
+239 0 obj <<
+/Title 240 0 R
+/A 237 0 R
+/Parent 2733 0 R
+/Prev 235 0 R
+/Next 315 0 R
+/First 243 0 R
+/Last 307 0 R
+/Count -10
+>> endobj
+235 0 obj <<
+/Title 236 0 R
+/A 233 0 R
+/Parent 2733 0 R
+/Prev 231 0 R
+/Next 239 0 R
+>> endobj
+231 0 obj <<
+/Title 232 0 R
+/A 229 0 R
+/Parent 2733 0 R
+/Prev 227 0 R
+/Next 235 0 R
+>> endobj
+227 0 obj <<
+/Title 228 0 R
+/A 225 0 R
+/Parent 2733 0 R
+/Prev 223 0 R
+/Next 231 0 R
+>> endobj
+223 0 obj <<
+/Title 224 0 R
+/A 221 0 R
+/Parent 2733 0 R
+/Prev 75 0 R
+/Next 227 0 R
+>> endobj
+219 0 obj <<
+/Title 220 0 R
+/A 217 0 R
+/Parent 75 0 R
+/Prev 215 0 R
+>> endobj
+215 0 obj <<
+/Title 216 0 R
+/A 213 0 R
+/Parent 75 0 R
+/Prev 211 0 R
+/Next 219 0 R
+>> endobj
+211 0 obj <<
+/Title 212 0 R
+/A 209 0 R
+/Parent 75 0 R
+/Prev 207 0 R
+/Next 215 0 R
+>> endobj
+207 0 obj <<
+/Title 208 0 R
+/A 205 0 R
+/Parent 75 0 R
+/Prev 203 0 R
+/Next 211 0 R
+>> endobj
+203 0 obj <<
+/Title 204 0 R
+/A 201 0 R
+/Parent 75 0 R
+/Prev 199 0 R
+/Next 207 0 R
+>> endobj
+199 0 obj <<
+/Title 200 0 R
+/A 197 0 R
+/Parent 75 0 R
+/Prev 83 0 R
+/Next 203 0 R
+>> endobj
+195 0 obj <<
+/Title 196 0 R
+/A 193 0 R
+/Parent 83 0 R
+/Prev 191 0 R
+>> endobj
+191 0 obj <<
+/Title 192 0 R
+/A 189 0 R
+/Parent 83 0 R
+/Prev 187 0 R
+/Next 195 0 R
+>> endobj
+187 0 obj <<
+/Title 188 0 R
+/A 185 0 R
+/Parent 83 0 R
+/Prev 183 0 R
+/Next 191 0 R
+>> endobj
+183 0 obj <<
+/Title 184 0 R
+/A 181 0 R
+/Parent 83 0 R
+/Prev 179 0 R
+/Next 187 0 R
+>> endobj
+179 0 obj <<
+/Title 180 0 R
+/A 177 0 R
+/Parent 83 0 R
+/Prev 175 0 R
+/Next 183 0 R
+>> endobj
+175 0 obj <<
+/Title 176 0 R
+/A 173 0 R
+/Parent 83 0 R
+/Prev 171 0 R
+/Next 179 0 R
+>> endobj
+171 0 obj <<
+/Title 172 0 R
+/A 169 0 R
+/Parent 83 0 R
+/Prev 167 0 R
+/Next 175 0 R
+>> endobj
+167 0 obj <<
+/Title 168 0 R
+/A 165 0 R
+/Parent 83 0 R
+/Prev 163 0 R
+/Next 171 0 R
+>> endobj
+163 0 obj <<
+/Title 164 0 R
+/A 161 0 R
+/Parent 83 0 R
+/Prev 159 0 R
+/Next 167 0 R
+>> endobj
+159 0 obj <<
+/Title 160 0 R
+/A 157 0 R
+/Parent 83 0 R
+/Prev 155 0 R
+/Next 163 0 R
+>> endobj
+155 0 obj <<
+/Title 156 0 R
+/A 153 0 R
+/Parent 83 0 R
+/Prev 151 0 R
+/Next 159 0 R
+>> endobj
+151 0 obj <<
+/Title 152 0 R
+/A 149 0 R
+/Parent 83 0 R
+/Prev 147 0 R
+/Next 155 0 R
+>> endobj
+147 0 obj <<
+/Title 148 0 R
+/A 145 0 R
+/Parent 83 0 R
+/Prev 143 0 R
+/Next 151 0 R
+>> endobj
+143 0 obj <<
+/Title 144 0 R
+/A 141 0 R
+/Parent 83 0 R
+/Prev 139 0 R
+/Next 147 0 R
+>> endobj
+139 0 obj <<
+/Title 140 0 R
+/A 137 0 R
+/Parent 83 0 R
+/Prev 135 0 R
+/Next 143 0 R
+>> endobj
+135 0 obj <<
+/Title 136 0 R
+/A 133 0 R
+/Parent 83 0 R
+/Prev 131 0 R
+/Next 139 0 R
+>> endobj
+131 0 obj <<
+/Title 132 0 R
+/A 129 0 R
+/Parent 83 0 R
+/Prev 127 0 R
+/Next 135 0 R
+>> endobj
+127 0 obj <<
+/Title 128 0 R
+/A 125 0 R
+/Parent 83 0 R
+/Prev 123 0 R
+/Next 131 0 R
+>> endobj
+123 0 obj <<
+/Title 124 0 R
+/A 121 0 R
+/Parent 83 0 R
+/Prev 119 0 R
+/Next 127 0 R
+>> endobj
+119 0 obj <<
+/Title 120 0 R
+/A 117 0 R
+/Parent 83 0 R
+/Prev 115 0 R
+/Next 123 0 R
+>> endobj
+115 0 obj <<
+/Title 116 0 R
+/A 113 0 R
+/Parent 83 0 R
+/Prev 111 0 R
+/Next 119 0 R
+>> endobj
+111 0 obj <<
+/Title 112 0 R
+/A 109 0 R
+/Parent 83 0 R
+/Prev 107 0 R
+/Next 115 0 R
+>> endobj
+107 0 obj <<
+/Title 108 0 R
+/A 105 0 R
+/Parent 83 0 R
+/Prev 103 0 R
+/Next 111 0 R
+>> endobj
+103 0 obj <<
+/Title 104 0 R
+/A 101 0 R
+/Parent 83 0 R
+/Prev 99 0 R
+/Next 107 0 R
+>> endobj
+99 0 obj <<
+/Title 100 0 R
+/A 97 0 R
+/Parent 83 0 R
+/Prev 95 0 R
+/Next 103 0 R
+>> endobj
+95 0 obj <<
+/Title 96 0 R
+/A 93 0 R
+/Parent 83 0 R
+/Prev 91 0 R
+/Next 99 0 R
+>> endobj
+91 0 obj <<
+/Title 92 0 R
+/A 89 0 R
+/Parent 83 0 R
+/Prev 87 0 R
+/Next 95 0 R
+>> endobj
+87 0 obj <<
+/Title 88 0 R
+/A 85 0 R
+/Parent 83 0 R
+/Next 91 0 R
+>> endobj
+83 0 obj <<
+/Title 84 0 R
+/A 81 0 R
+/Parent 75 0 R
+/Prev 79 0 R
+/Next 199 0 R
+/First 87 0 R
+/Last 195 0 R
+/Count -28
+>> endobj
+79 0 obj <<
+/Title 80 0 R
+/A 77 0 R
+/Parent 75 0 R
+/Next 83 0 R
+>> endobj
+75 0 obj <<
+/Title 76 0 R
+/A 73 0 R
+/Parent 2733 0 R
+/Prev 71 0 R
+/Next 223 0 R
+/First 79 0 R
+/Last 219 0 R
+/Count -8
+>> endobj
+71 0 obj <<
+/Title 72 0 R
+/A 69 0 R
+/Parent 2733 0 R
+/Prev 63 0 R
+/Next 75 0 R
+>> endobj
+67 0 obj <<
+/Title 68 0 R
+/A 65 0 R
+/Parent 63 0 R
+>> endobj
+63 0 obj <<
+/Title 64 0 R
+/A 61 0 R
+/Parent 2733 0 R
+/Prev 55 0 R
+/Next 71 0 R
+/First 67 0 R
+/Last 67 0 R
+/Count -1
+>> endobj
+59 0 obj <<
+/Title 60 0 R
+/A 57 0 R
+/Parent 55 0 R
+>> endobj
+55 0 obj <<
+/Title 56 0 R
+/A 53 0 R
+/Parent 2733 0 R
+/Prev 51 0 R
+/Next 63 0 R
+/First 59 0 R
+/Last 59 0 R
+/Count -1
+>> endobj
+51 0 obj <<
+/Title 52 0 R
+/A 49 0 R
+/Parent 2733 0 R
+/Prev 47 0 R
+/Next 55 0 R
+>> endobj
+47 0 obj <<
+/Title 48 0 R
+/A 45 0 R
+/Parent 2733 0 R
+/Prev 31 0 R
+/Next 51 0 R
+>> endobj
+43 0 obj <<
+/Title 44 0 R
+/A 41 0 R
+/Parent 31 0 R
+/Prev 39 0 R
+>> endobj
+39 0 obj <<
+/Title 40 0 R
+/A 37 0 R
+/Parent 31 0 R
+/Prev 35 0 R
+/Next 43 0 R
+>> endobj
+35 0 obj <<
+/Title 36 0 R
+/A 33 0 R
+/Parent 31 0 R
+/Next 39 0 R
+>> endobj
+31 0 obj <<
+/Title 32 0 R
+/A 29 0 R
+/Parent 2733 0 R
+/Prev 27 0 R
+/Next 47 0 R
+/First 35 0 R
+/Last 43 0 R
+/Count -3
+>> endobj
+27 0 obj <<
+/Title 28 0 R
+/A 25 0 R
+/Parent 2733 0 R
+/Prev 3 0 R
+/Next 31 0 R
+>> endobj
+23 0 obj <<
+/Title 24 0 R
+/A 21 0 R
+/Parent 7 0 R
+/Prev 19 0 R
+>> endobj
+19 0 obj <<
+/Title 20 0 R
+/A 17 0 R
+/Parent 7 0 R
+/Prev 15 0 R
+/Next 23 0 R
+>> endobj
+15 0 obj <<
+/Title 16 0 R
+/A 13 0 R
+/Parent 7 0 R
+/Prev 11 0 R
+/Next 19 0 R
+>> endobj
+11 0 obj <<
+/Title 12 0 R
+/A 9 0 R
+/Parent 7 0 R
+/Next 15 0 R
+>> endobj
+7 0 obj <<
+/Title 8 0 R
+/A 5 0 R
+/Parent 3 0 R
+/First 11 0 R
+/Last 23 0 R
+/Count -4
+>> endobj
+3 0 obj <<
+/Title 4 0 R
+/A 1 0 R
+/Parent 2733 0 R
+/Next 27 0 R
+/First 7 0 R
+/Last 7 0 R
+/Count -1
+>> endobj
+2734 0 obj <<
+/Names [(Doc-Start) 590 0 R (Item.1) 772 0 R (Item.10) 785 0 R (Item.100) 1360 0 R (Item.101) 1361 0 R (Item.102) 1362 0 R]
+/Limits [(Doc-Start) (Item.102)]
+>> endobj
+2735 0 obj <<
+/Names [(Item.103) 1363 0 R (Item.104) 1368 0 R (Item.105) 1369 0 R (Item.106) 1370 0 R (Item.107) 1371 0 R (Item.108) 1372 0 R]
+/Limits [(Item.103) (Item.108)]
+>> endobj
+2736 0 obj <<
+/Names [(Item.109) 1373 0 R (Item.11) 786 0 R (Item.110) 1374 0 R (Item.111) 1375 0 R (Item.112) 1376 0 R (Item.113) 1377 0 R]
+/Limits [(Item.109) (Item.113)]
+>> endobj
+2737 0 obj <<
+/Names [(Item.114) 1378 0 R (Item.115) 1379 0 R (Item.116) 1380 0 R (Item.117) 1381 0 R (Item.118) 1382 0 R (Item.119) 1383 0 R]
+/Limits [(Item.114) (Item.119)]
+>> endobj
+2738 0 obj <<
+/Names [(Item.12) 787 0 R (Item.120) 1384 0 R (Item.121) 1385 0 R (Item.122) 1386 0 R (Item.123) 1387 0 R (Item.124) 1388 0 R]
+/Limits [(Item.12) (Item.124)]
+>> endobj
+2739 0 obj <<
+/Names [(Item.125) 1389 0 R (Item.126) 1395 0 R (Item.127) 1396 0 R (Item.128) 1397 0 R (Item.129) 1398 0 R (Item.13) 788 0 R]
+/Limits [(Item.125) (Item.13)]
+>> endobj
+2740 0 obj <<
+/Names [(Item.130) 1399 0 R (Item.131) 1400 0 R (Item.132) 1401 0 R (Item.133) 1402 0 R (Item.134) 1403 0 R (Item.135) 1404 0 R]
+/Limits [(Item.130) (Item.135)]
+>> endobj
+2741 0 obj <<
+/Names [(Item.136) 1405 0 R (Item.137) 1406 0 R (Item.138) 1407 0 R (Item.139) 1408 0 R (Item.14) 789 0 R (Item.140) 1409 0 R]
+/Limits [(Item.136) (Item.140)]
+>> endobj
+2742 0 obj <<
+/Names [(Item.141) 1410 0 R (Item.142) 1411 0 R (Item.143) 1412 0 R (Item.144) 1417 0 R (Item.145) 1418 0 R (Item.146) 1419 0 R]
+/Limits [(Item.141) (Item.146)]
+>> endobj
+2743 0 obj <<
+/Names [(Item.147) 1420 0 R (Item.148) 1421 0 R (Item.149) 1422 0 R (Item.15) 790 0 R (Item.150) 1423 0 R (Item.151) 1424 0 R]
+/Limits [(Item.147) (Item.151)]
+>> endobj
+2744 0 obj <<
+/Names [(Item.152) 1425 0 R (Item.153) 1426 0 R (Item.154) 1427 0 R (Item.155) 1428 0 R (Item.156) 1429 0 R (Item.157) 1430 0 R]
+/Limits [(Item.152) (Item.157)]
+>> endobj
+2745 0 obj <<
+/Names [(Item.158) 1431 0 R (Item.159) 1432 0 R (Item.16) 791 0 R (Item.160) 1433 0 R (Item.161) 1434 0 R (Item.162) 1435 0 R]
+/Limits [(Item.158) (Item.162)]
+>> endobj
+2746 0 obj <<
+/Names [(Item.163) 1436 0 R (Item.164) 1437 0 R (Item.165) 1438 0 R (Item.166) 1443 0 R (Item.17) 792 0 R (Item.18) 793 0 R]
+/Limits [(Item.163) (Item.18)]
+>> endobj
+2747 0 obj <<
+/Names [(Item.19) 794 0 R (Item.2) 773 0 R (Item.20) 795 0 R (Item.21) 800 0 R (Item.22) 801 0 R (Item.23) 802 0 R]
+/Limits [(Item.19) (Item.23)]
+>> endobj
+2748 0 obj <<
+/Names [(Item.24) 803 0 R (Item.25) 1200 0 R (Item.26) 1201 0 R (Item.27) 1202 0 R (Item.28) 1203 0 R (Item.29) 1204 0 R]
+/Limits [(Item.24) (Item.29)]
+>> endobj
+2749 0 obj <<
+/Names [(Item.3) 774 0 R (Item.30) 1205 0 R (Item.31) 1206 0 R (Item.32) 1207 0 R (Item.33) 1208 0 R (Item.34) 1209 0 R]
+/Limits [(Item.3) (Item.34)]
+>> endobj
+2750 0 obj <<
+/Names [(Item.35) 1210 0 R (Item.36) 1211 0 R (Item.37) 1212 0 R (Item.38) 1217 0 R (Item.39) 1218 0 R (Item.4) 775 0 R]
+/Limits [(Item.35) (Item.4)]
+>> endobj
+2751 0 obj <<
+/Names [(Item.40) 1219 0 R (Item.41) 1220 0 R (Item.42) 1221 0 R (Item.43) 1222 0 R (Item.44) 1223 0 R (Item.45) 1224 0 R]
+/Limits [(Item.40) (Item.45)]
+>> endobj
+2752 0 obj <<
+/Names [(Item.46) 1225 0 R (Item.47) 1226 0 R (Item.48) 1227 0 R (Item.49) 1228 0 R (Item.5) 780 0 R (Item.50) 1229 0 R]
+/Limits [(Item.46) (Item.50)]
+>> endobj
+2753 0 obj <<
+/Names [(Item.51) 1230 0 R (Item.52) 1231 0 R (Item.53) 1232 0 R (Item.54) 1233 0 R (Item.55) 1234 0 R (Item.56) 1235 0 R]
+/Limits [(Item.51) (Item.56)]
+>> endobj
+2754 0 obj <<
+/Names [(Item.57) 1240 0 R (Item.58) 1241 0 R (Item.59) 1242 0 R (Item.6) 781 0 R (Item.60) 1243 0 R (Item.61) 1244 0 R]
+/Limits [(Item.57) (Item.61)]
+>> endobj
+2755 0 obj <<
+/Names [(Item.62) 1245 0 R (Item.63) 1246 0 R (Item.64) 1247 0 R (Item.65) 1248 0 R (Item.66) 1249 0 R (Item.67) 1250 0 R]
+/Limits [(Item.62) (Item.67)]
+>> endobj
+2756 0 obj <<
+/Names [(Item.68) 1251 0 R (Item.69) 1252 0 R (Item.7) 782 0 R (Item.70) 1253 0 R (Item.71) 1254 0 R (Item.72) 1255 0 R]
+/Limits [(Item.68) (Item.72)]
+>> endobj
+2757 0 obj <<
+/Names [(Item.73) 1256 0 R (Item.74) 1257 0 R (Item.75) 1262 0 R (Item.76) 1263 0 R (Item.77) 1264 0 R (Item.78) 1265 0 R]
+/Limits [(Item.73) (Item.78)]
+>> endobj
+2758 0 obj <<
+/Names [(Item.79) 1266 0 R (Item.8) 783 0 R (Item.80) 1267 0 R (Item.81) 1268 0 R (Item.82) 1269 0 R (Item.83) 1270 0 R]
+/Limits [(Item.79) (Item.83)]
+>> endobj
+2759 0 obj <<
+/Names [(Item.84) 1271 0 R (Item.85) 1272 0 R (Item.86) 1273 0 R (Item.87) 1274 0 R (Item.88) 1275 0 R (Item.89) 1276 0 R]
+/Limits [(Item.84) (Item.89)]
+>> endobj
+2760 0 obj <<
+/Names [(Item.9) 784 0 R (Item.90) 1277 0 R (Item.91) 1278 0 R (Item.92) 1279 0 R (Item.93) 1280 0 R (Item.94) 1354 0 R]
+/Limits [(Item.9) (Item.94)]
+>> endobj
+2761 0 obj <<
+/Names [(Item.95) 1355 0 R (Item.96) 1356 0 R (Item.97) 1357 0 R (Item.98) 1358 0 R (Item.99) 1359 0 R (page.1) 589 0 R]
+/Limits [(Item.95) (page.1)]
+>> endobj
+2762 0 obj <<
+/Names [(page.10) 767 0 R (page.100) 1174 0 R (page.101) 1178 0 R (page.102) 1182 0 R (page.103) 1186 0 R (page.104) 1191 0 R]
+/Limits [(page.10) (page.104)]
+>> endobj
+2763 0 obj <<
+/Names [(page.105) 1195 0 R (page.106) 1199 0 R (page.107) 1216 0 R (page.108) 1239 0 R (page.109) 1261 0 R (page.11) 771 0 R]
+/Limits [(page.105) (page.11)]
+>> endobj
+2764 0 obj <<
+/Names [(page.110) 1285 0 R (page.111) 1289 0 R (page.112) 1294 0 R (page.113) 1298 0 R (page.114) 1302 0 R (page.115) 1307 0 R]
+/Limits [(page.110) (page.115)]
+>> endobj
+2765 0 obj <<
+/Names [(page.116) 1312 0 R (page.117) 1316 0 R (page.118) 1320 0 R (page.119) 1324 0 R (page.12) 779 0 R (page.120) 1328 0 R]
+/Limits [(page.116) (page.120)]
+>> endobj
+2766 0 obj <<
+/Names [(page.121) 1332 0 R (page.122) 1337 0 R (page.123) 1341 0 R (page.124) 1345 0 R (page.125) 1349 0 R (page.126) 1353 0 R]
+/Limits [(page.121) (page.126)]
+>> endobj
+2767 0 obj <<
+/Names [(page.127) 1367 0 R (page.128) 1394 0 R (page.129) 1416 0 R (page.13) 799 0 R (page.130) 1442 0 R (page.131) 1447 0 R]
+/Limits [(page.127) (page.131)]
+>> endobj
+2768 0 obj <<
+/Names [(page.132) 1452 0 R (page.133) 1456 0 R (page.134) 1461 0 R (page.135) 1467 0 R (page.136) 1471 0 R (page.137) 1475 0 R]
+/Limits [(page.132) (page.137)]
+>> endobj
+2769 0 obj <<
+/Names [(page.138) 1479 0 R (page.139) 1484 0 R (page.14) 810 0 R (page.140) 1489 0 R (page.141) 1493 0 R (page.142) 1497 0 R]
+/Limits [(page.138) (page.142)]
+>> endobj
+2770 0 obj <<
+/Names [(page.143) 1535 0 R (page.144) 1557 0 R (page.145) 1577 0 R (page.146) 1623 0 R (page.147) 1671 0 R (page.148) 1722 0 R]
+/Limits [(page.143) (page.148)]
+>> endobj
+2771 0 obj <<
+/Names [(page.149) 1778 0 R (page.15) 814 0 R (page.150) 1818 0 R (page.151) 1946 0 R (page.152) 2044 0 R (page.153) 2145 0 R]
+/Limits [(page.149) (page.153)]
+>> endobj
+2772 0 obj <<
+/Names [(page.154) 2205 0 R (page.155) 2229 0 R (page.156) 2260 0 R (page.157) 2284 0 R (page.158) 2330 0 R (page.159) 2389 0 R]
+/Limits [(page.154) (page.159)]
+>> endobj
+2773 0 obj <<
+/Names [(page.16) 818 0 R (page.160) 2419 0 R (page.161) 2481 0 R (page.162) 2516 0 R (page.163) 2550 0 R (page.164) 2580 0 R]
+/Limits [(page.16) (page.164)]
+>> endobj
+2774 0 obj <<
+/Names [(page.165) 2609 0 R (page.166) 2654 0 R (page.167) 2663 0 R (page.17) 822 0 R (page.18) 826 0 R (page.19) 831 0 R]
+/Limits [(page.165) (page.19)]
+>> endobj
+2775 0 obj <<
+/Names [(page.2) 648 0 R (page.20) 836 0 R (page.21) 840 0 R (page.22) 844 0 R (page.23) 848 0 R (page.24) 853 0 R]
+/Limits [(page.2) (page.24)]
+>> endobj
+2776 0 obj <<
+/Names [(page.25) 857 0 R (page.26) 862 0 R (page.27) 866 0 R (page.28) 870 0 R (page.29) 874 0 R (page.3) 688 0 R]
+/Limits [(page.25) (page.3)]
+>> endobj
+2777 0 obj <<
+/Names [(page.30) 878 0 R (page.31) 882 0 R (page.32) 887 0 R (page.33) 891 0 R (page.34) 895 0 R (page.35) 900 0 R]
+/Limits [(page.30) (page.35)]
+>> endobj
+2778 0 obj <<
+/Names [(page.36) 905 0 R (page.37) 909 0 R (page.38) 914 0 R (page.39) 918 0 R (page.4) 731 0 R (page.40) 922 0 R]
+/Limits [(page.36) (page.40)]
+>> endobj
+2779 0 obj <<
+/Names [(page.41) 926 0 R (page.42) 930 0 R (page.43) 934 0 R (page.44) 939 0 R (page.45) 943 0 R (page.46) 947 0 R]
+/Limits [(page.41) (page.46)]
+>> endobj
+2780 0 obj <<
+/Names [(page.47) 951 0 R (page.48) 955 0 R (page.49) 959 0 R (page.5) 742 0 R (page.50) 964 0 R (page.51) 969 0 R]
+/Limits [(page.47) (page.51)]
+>> endobj
+2781 0 obj <<
+/Names [(page.52) 974 0 R (page.53) 978 0 R (page.54) 982 0 R (page.55) 986 0 R (page.56) 991 0 R (page.57) 995 0 R]
+/Limits [(page.52) (page.57)]
+>> endobj
+2782 0 obj <<
+/Names [(page.58) 999 0 R (page.59) 1003 0 R (page.6) 748 0 R (page.60) 1007 0 R (page.61) 1011 0 R (page.62) 1016 0 R]
+/Limits [(page.58) (page.62)]
+>> endobj
+2783 0 obj <<
+/Names [(page.63) 1020 0 R (page.64) 1024 0 R (page.65) 1028 0 R (page.66) 1032 0 R (page.67) 1036 0 R (page.68) 1041 0 R]
+/Limits [(page.63) (page.68)]
+>> endobj
+2784 0 obj <<
+/Names [(page.69) 1045 0 R (page.7) 754 0 R (page.70) 1049 0 R (page.71) 1053 0 R (page.72) 1057 0 R (page.73) 1061 0 R]
+/Limits [(page.69) (page.73)]
+>> endobj
+2785 0 obj <<
+/Names [(page.74) 1066 0 R (page.75) 1070 0 R (page.76) 1074 0 R (page.77) 1078 0 R (page.78) 1082 0 R (page.79) 1086 0 R]
+/Limits [(page.74) (page.79)]
+>> endobj
+2786 0 obj <<
+/Names [(page.8) 759 0 R (page.80) 1091 0 R (page.81) 1095 0 R (page.82) 1099 0 R (page.83) 1103 0 R (page.84) 1107 0 R]
+/Limits [(page.8) (page.84)]
+>> endobj
+2787 0 obj <<
+/Names [(page.85) 1111 0 R (page.86) 1116 0 R (page.87) 1120 0 R (page.88) 1124 0 R (page.89) 1128 0 R (page.9) 763 0 R]
+/Limits [(page.85) (page.9)]
+>> endobj
+2788 0 obj <<
+/Names [(page.90) 1132 0 R (page.91) 1136 0 R (page.92) 1141 0 R (page.93) 1145 0 R (page.94) 1149 0 R (page.95) 1153 0 R]
+/Limits [(page.90) (page.95)]
+>> endobj
+2789 0 obj <<
+/Names [(page.96) 1157 0 R (page.97) 1161 0 R (page.98) 1166 0 R (page.99) 1170 0 R (section*.1) 598 0 R (section*.2) 1462 0 R]
+/Limits [(page.96) (section*.2)]
+>> endobj
+2790 0 obj <<
+/Names [(section*.3) 562 0 R (section.1) 2 0 R (section.10) 222 0 R (section.11) 226 0 R (section.12) 230 0 R (section.13) 234 0 R]
+/Limits [(section*.3) (section.13)]
+>> endobj
+2791 0 obj <<
+/Names [(section.14) 238 0 R (section.15) 314 0 R (section.16) 318 0 R (section.17) 334 0 R (section.18) 338 0 R (section.19) 342 0 R]
+/Limits [(section.14) (section.19)]
+>> endobj
+2792 0 obj <<
+/Names [(section.2) 26 0 R (section.20) 358 0 R (section.21) 362 0 R (section.22) 366 0 R (section.23) 370 0 R (section.24) 374 0 R]
+/Limits [(section.2) (section.24)]
+>> endobj
+2793 0 obj <<
+/Names [(section.25) 386 0 R (section.26) 390 0 R (section.27) 398 0 R (section.28) 406 0 R (section.29) 414 0 R (section.3) 30 0 R]
+/Limits [(section.25) (section.3)]
+>> endobj
+2794 0 obj <<
+/Names [(section.30) 418 0 R (section.31) 530 0 R (section.32) 538 0 R (section.4) 46 0 R (section.5) 50 0 R (section.6) 54 0 R]
+/Limits [(section.30) (section.6)]
+>> endobj
+2795 0 obj <<
+/Names [(section.7) 62 0 R (section.8) 70 0 R (section.9) 74 0 R (subsection.1.1) 6 0 R (subsection.14.1) 242 0 R (subsection.14.10) 306 0 R]
+/Limits [(section.7) (subsection.14.10)]
+>> endobj
+2796 0 obj <<
+/Names [(subsection.14.2) 246 0 R (subsection.14.3) 250 0 R (subsection.14.4) 254 0 R (subsection.14.5) 278 0 R (subsection.14.6) 282 0 R (subsection.14.7) 286 0 R]
+/Limits [(subsection.14.2) (subsection.14.7)]
+>> endobj
+2797 0 obj <<
+/Names [(subsection.14.8) 290 0 R (subsection.14.9) 298 0 R (subsection.16.1) 322 0 R (subsection.19.1) 346 0 R (subsection.19.2) 350 0 R (subsection.19.3) 354 0 R]
+/Limits [(subsection.14.8) (subsection.19.3)]
+>> endobj
+2798 0 obj <<
+/Names [(subsection.24.1) 378 0 R (subsection.24.2) 382 0 R (subsection.26.1) 394 0 R (subsection.27.1) 402 0 R (subsection.28.1) 410 0 R (subsection.3.1) 38 0 R]
+/Limits [(subsection.24.1) (subsection.3.1)]
+>> endobj
+2799 0 obj <<
+/Names [(subsection.3.2) 42 0 R (subsection.30.1) 422 0 R (subsection.30.2) 426 0 R (subsection.30.3) 430 0 R (subsection.30.4) 478 0 R (subsection.30.5) 482 0 R]
+/Limits [(subsection.3.2) (subsection.30.5)]
+>> endobj
+2800 0 obj <<
+/Names [(subsection.30.6) 522 0 R (subsection.30.7) 526 0 R (subsection.31.1) 534 0 R (subsection.32.1) 542 0 R (subsection.32.2) 546 0 R (subsection.32.3) 550 0 R]
+/Limits [(subsection.30.6) (subsection.32.3)]
+>> endobj
+2801 0 obj <<
+/Names [(subsection.32.4) 554 0 R (subsection.32.5) 558 0 R (subsection.6.1) 58 0 R (subsection.7.1) 66 0 R (subsection.9.1) 78 0 R (subsection.9.2) 82 0 R]
+/Limits [(subsection.32.4) (subsection.9.2)]
+>> endobj
+2802 0 obj <<
+/Names [(subsection.9.3) 198 0 R (subsection.9.4) 202 0 R (subsection.9.5) 206 0 R (subsection.9.6) 210 0 R (subsection.9.7) 214 0 R (subsection.9.8) 218 0 R]
+/Limits [(subsection.9.3) (subsection.9.8)]
+>> endobj
+2803 0 obj <<
+/Names [(subsubsection.1.1.1) 10 0 R (subsubsection.1.1.2) 14 0 R (subsubsection.1.1.3) 18 0 R (subsubsection.1.1.4) 22 0 R (subsubsection.14.10.1) 310 0 R (subsubsection.14.4.1) 258 0 R]
+/Limits [(subsubsection.1.1.1) (subsubsection.14.4.1)]
+>> endobj
+2804 0 obj <<
+/Names [(subsubsection.14.4.2) 262 0 R (subsubsection.14.4.3) 266 0 R (subsubsection.14.4.4) 270 0 R (subsubsection.14.4.5) 274 0 R (subsubsection.14.8.1) 294 0 R (subsubsection.14.9.1) 302 0 R]
+/Limits [(subsubsection.14.4.2) (subsubsection.14.9.1)]
+>> endobj
+2805 0 obj <<
+/Names [(subsubsection.16.1.1) 326 0 R (subsubsection.16.1.2) 330 0 R (subsubsection.3.0.5) 34 0 R (subsubsection.30.3.1) 434 0 R (subsubsection.30.3.10) 470 0 R (subsubsection.30.3.11) 474 0 R]
+/Limits [(subsubsection.16.1.1) (subsubsection.30.3.11)]
+>> endobj
+2806 0 obj <<
+/Names [(subsubsection.30.3.2) 438 0 R (subsubsection.30.3.3) 442 0 R (subsubsection.30.3.4) 446 0 R (subsubsection.30.3.5) 450 0 R (subsubsection.30.3.6) 454 0 R (subsubsection.30.3.7) 458 0 R]
+/Limits [(subsubsection.30.3.2) (subsubsection.30.3.7)]
+>> endobj
+2807 0 obj <<
+/Names [(subsubsection.30.3.8) 462 0 R (subsubsection.30.3.9) 466 0 R (subsubsection.30.5.1) 486 0 R (subsubsection.30.5.2) 490 0 R (subsubsection.30.5.3) 494 0 R (subsubsection.30.5.4) 498 0 R]
+/Limits [(subsubsection.30.3.8) (subsubsection.30.5.4)]
+>> endobj
+2808 0 obj <<
+/Names [(subsubsection.30.5.5) 502 0 R (subsubsection.30.5.6) 506 0 R (subsubsection.30.5.7) 510 0 R (subsubsection.30.5.8) 514 0 R (subsubsection.30.5.9) 518 0 R (subsubsection.9.2.1) 86 0 R]
+/Limits [(subsubsection.30.5.5) (subsubsection.9.2.1)]
+>> endobj
+2809 0 obj <<
+/Names [(subsubsection.9.2.10) 122 0 R (subsubsection.9.2.11) 126 0 R (subsubsection.9.2.12) 130 0 R (subsubsection.9.2.13) 134 0 R (subsubsection.9.2.14) 138 0 R (subsubsection.9.2.15) 142 0 R]
+/Limits [(subsubsection.9.2.10) (subsubsection.9.2.15)]
+>> endobj
+2810 0 obj <<
+/Names [(subsubsection.9.2.16) 146 0 R (subsubsection.9.2.17) 150 0 R (subsubsection.9.2.18) 154 0 R (subsubsection.9.2.19) 158 0 R (subsubsection.9.2.2) 90 0 R (subsubsection.9.2.20) 162 0 R]
+/Limits [(subsubsection.9.2.16) (subsubsection.9.2.20)]
+>> endobj
+2811 0 obj <<
+/Names [(subsubsection.9.2.21) 166 0 R (subsubsection.9.2.22) 170 0 R (subsubsection.9.2.23) 174 0 R (subsubsection.9.2.24) 178 0 R (subsubsection.9.2.25) 182 0 R (subsubsection.9.2.26) 186 0 R]
+/Limits [(subsubsection.9.2.21) (subsubsection.9.2.26)]
+>> endobj
+2812 0 obj <<
+/Names [(subsubsection.9.2.27) 190 0 R (subsubsection.9.2.28) 194 0 R (subsubsection.9.2.3) 94 0 R (subsubsection.9.2.4) 98 0 R (subsubsection.9.2.5) 102 0 R (subsubsection.9.2.6) 106 0 R]
+/Limits [(subsubsection.9.2.27) (subsubsection.9.2.6)]
+>> endobj
+2813 0 obj <<
+/Names [(subsubsection.9.2.7) 110 0 R (subsubsection.9.2.8) 114 0 R (subsubsection.9.2.9) 118 0 R]
+/Limits [(subsubsection.9.2.7) (subsubsection.9.2.9)]
+>> endobj
+2814 0 obj <<
+/Kids [2734 0 R 2735 0 R 2736 0 R 2737 0 R 2738 0 R 2739 0 R]
+/Limits [(Doc-Start) (Item.13)]
+>> endobj
+2815 0 obj <<
+/Kids [2740 0 R 2741 0 R 2742 0 R 2743 0 R 2744 0 R 2745 0 R]
+/Limits [(Item.130) (Item.162)]
+>> endobj
+2816 0 obj <<
+/Kids [2746 0 R 2747 0 R 2748 0 R 2749 0 R 2750 0 R 2751 0 R]
+/Limits [(Item.163) (Item.45)]
+>> endobj
+2817 0 obj <<
+/Kids [2752 0 R 2753 0 R 2754 0 R 2755 0 R 2756 0 R 2757 0 R]
+/Limits [(Item.46) (Item.78)]
+>> endobj
+2818 0 obj <<
+/Kids [2758 0 R 2759 0 R 2760 0 R 2761 0 R 2762 0 R 2763 0 R]
+/Limits [(Item.79) (page.11)]
+>> endobj
+2819 0 obj <<
+/Kids [2764 0 R 2765 0 R 2766 0 R 2767 0 R 2768 0 R 2769 0 R]
+/Limits [(page.110) (page.142)]
+>> endobj
+2820 0 obj <<
+/Kids [2770 0 R 2771 0 R 2772 0 R 2773 0 R 2774 0 R 2775 0 R]
+/Limits [(page.143) (page.24)]
+>> endobj
+2821 0 obj <<
+/Kids [2776 0 R 2777 0 R 2778 0 R 2779 0 R 2780 0 R 2781 0 R]
+/Limits [(page.25) (page.57)]
+>> endobj
+2822 0 obj <<
+/Kids [2782 0 R 2783 0 R 2784 0 R 2785 0 R 2786 0 R 2787 0 R]
+/Limits [(page.58) (page.9)]
+>> endobj
+2823 0 obj <<
+/Kids [2788 0 R 2789 0 R 2790 0 R 2791 0 R 2792 0 R 2793 0 R]
+/Limits [(page.90) (section.3)]
+>> endobj
+2824 0 obj <<
+/Kids [2794 0 R 2795 0 R 2796 0 R 2797 0 R 2798 0 R 2799 0 R]
+/Limits [(section.30) (subsection.30.5)]
+>> endobj
+2825 0 obj <<
+/Kids [2800 0 R 2801 0 R 2802 0 R 2803 0 R 2804 0 R 2805 0 R]
+/Limits [(subsection.30.6) (subsubsection.30.3.11)]
+>> endobj
+2826 0 obj <<
+/Kids [2806 0 R 2807 0 R 2808 0 R 2809 0 R 2810 0 R 2811 0 R]
+/Limits [(subsubsection.30.3.2) (subsubsection.9.2.26)]
+>> endobj
+2827 0 obj <<
+/Kids [2812 0 R 2813 0 R]
+/Limits [(subsubsection.9.2.27) (subsubsection.9.2.9)]
+>> endobj
+2828 0 obj <<
+/Kids [2814 0 R 2815 0 R 2816 0 R 2817 0 R 2818 0 R 2819 0 R]
+/Limits [(Doc-Start) (page.142)]
+>> endobj
+2829 0 obj <<
+/Kids [2820 0 R 2821 0 R 2822 0 R 2823 0 R 2824 0 R 2825 0 R]
+/Limits [(page.143) (subsubsection.30.3.11)]
+>> endobj
+2830 0 obj <<
+/Kids [2826 0 R 2827 0 R]
+/Limits [(subsubsection.30.3.2) (subsubsection.9.2.9)]
+>> endobj
+2831 0 obj <<
+/Kids [2828 0 R 2829 0 R 2830 0 R]
+/Limits [(Doc-Start) (subsubsection.9.2.9)]
+>> endobj
+2832 0 obj <<
+/Dests 2831 0 R
+>> endobj
+2833 0 obj <<
+/Type /Catalog
+/Pages 2732 0 R
+/Outlines 2733 0 R
+/Names 2832 0 R
+/PageMode/UseOutlines
+/OpenAction 565 0 R
+>> endobj
+2834 0 obj <<
+/Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.10)/Keywords()
+/CreationDate (D:20100727120602-07'00')
+/ModDate (D:20100727120602-07'00')
+/Trapped /False
+/PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-1.40.10-2.2 (TeX Live 2009) kpathsea version 5.0.0)
+>> endobj
+xref
+0 2835
+0000000000 65535 f
+0000000015 00000 n
+0000046000 00000 n
+0000867100 00000 n
+0000000060 00000 n
+0000000090 00000 n
+0000046060 00000 n
+0000867006 00000 n
+0000000140 00000 n
+0000000175 00000 n
+0000046120 00000 n
+0000866934 00000 n
+0000000230 00000 n
+0000000263 00000 n
+0000046181 00000 n
+0000866848 00000 n
+0000000319 00000 n
+0000000368 00000 n
+0000046241 00000 n
+0000866762 00000 n
+0000000424 00000 n
+0000000478 00000 n
+0000048657 00000 n
+0000866689 00000 n
+0000000534 00000 n
+0000000562 00000 n
+0000048718 00000 n
+0000866601 00000 n
+0000000608 00000 n
+0000000653 00000 n
+0000048779 00000 n
+0000866475 00000 n
+0000000699 00000 n
+0000000742 00000 n
+0000050826 00000 n
+0000866401 00000 n
+0000000798 00000 n
+0000000845 00000 n
+0000050887 00000 n
+0000866314 00000 n
+0000000896 00000 n
+0000000935 00000 n
+0000058918 00000 n
+0000866240 00000 n
+0000000986 00000 n
+0000001022 00000 n
+0000061892 00000 n
+0000866151 00000 n
+0000001068 00000 n
+0000001095 00000 n
+0000068771 00000 n
+0000866062 00000 n
+0000001141 00000 n
+0000001204 00000 n
+0000068832 00000 n
+0000865936 00000 n
+0000001250 00000 n
+0000001295 00000 n
+0000071142 00000 n
+0000865875 00000 n
+0000001346 00000 n
+0000001389 00000 n
+0000071203 00000 n
+0000865749 00000 n
+0000001435 00000 n
+0000001484 00000 n
+0000071264 00000 n
+0000865688 00000 n
+0000001535 00000 n
+0000001559 00000 n
+0000073823 00000 n
+0000865599 00000 n
+0000001605 00000 n
+0000001663 00000 n
+0000073884 00000 n
+0000865471 00000 n
+0000001709 00000 n
+0000001735 00000 n
+0000073945 00000 n
+0000865397 00000 n
+0000001786 00000 n
+0000001836 00000 n
+0000075725 00000 n
+0000865270 00000 n
+0000001887 00000 n
+0000001921 00000 n
+0000075786 00000 n
+0000865196 00000 n
+0000001977 00000 n
+0000002022 00000 n
+0000075847 00000 n
+0000865109 00000 n
+0000002078 00000 n
+0000002111 00000 n
+0000077865 00000 n
+0000865022 00000 n
+0000002167 00000 n
+0000002211 00000 n
+0000077926 00000 n
+0000864933 00000 n
+0000002267 00000 n
+0000002337 00000 n
+0000077987 00000 n
+0000864842 00000 n
+0000002394 00000 n
+0000002438 00000 n
+0000079754 00000 n
+0000864750 00000 n
+0000002495 00000 n
+0000002531 00000 n
+0000079816 00000 n
+0000864658 00000 n
+0000002588 00000 n
+0000002617 00000 n
+0000079878 00000 n
+0000864566 00000 n
+0000002674 00000 n
+0000002704 00000 n
+0000081673 00000 n
+0000864474 00000 n
+0000002761 00000 n
+0000002789 00000 n
+0000081735 00000 n
+0000864382 00000 n
+0000002847 00000 n
+0000002876 00000 n
+0000084091 00000 n
+0000864290 00000 n
+0000002934 00000 n
+0000002968 00000 n
+0000084153 00000 n
+0000864198 00000 n
+0000003026 00000 n
+0000003054 00000 n
+0000084215 00000 n
+0000864106 00000 n
+0000003112 00000 n
+0000003146 00000 n
+0000084277 00000 n
+0000864014 00000 n
+0000003204 00000 n
+0000003258 00000 n
+0000087232 00000 n
+0000863922 00000 n
+0000003316 00000 n
+0000003356 00000 n
+0000087294 00000 n
+0000863830 00000 n
+0000003414 00000 n
+0000003454 00000 n
+0000091335 00000 n
+0000863738 00000 n
+0000003512 00000 n
+0000003559 00000 n
+0000091396 00000 n
+0000863646 00000 n
+0000003617 00000 n
+0000003649 00000 n
+0000091458 00000 n
+0000863554 00000 n
+0000003707 00000 n
+0000003738 00000 n
+0000093396 00000 n
+0000863462 00000 n
+0000003796 00000 n
+0000003831 00000 n
+0000093458 00000 n
+0000863370 00000 n
+0000003889 00000 n
+0000003917 00000 n
+0000093520 00000 n
+0000863278 00000 n
+0000003975 00000 n
+0000004007 00000 n
+0000096038 00000 n
+0000863186 00000 n
+0000004065 00000 n
+0000004101 00000 n
+0000096099 00000 n
+0000863094 00000 n
+0000004159 00000 n
+0000004200 00000 n
+0000096161 00000 n
+0000863002 00000 n
+0000004258 00000 n
+0000004303 00000 n
+0000098396 00000 n
+0000862910 00000 n
+0000004361 00000 n
+0000004407 00000 n
+0000101686 00000 n
+0000862818 00000 n
+0000004465 00000 n
+0000004526 00000 n
+0000104154 00000 n
+0000862740 00000 n
+0000004584 00000 n
+0000004621 00000 n
+0000104216 00000 n
+0000862649 00000 n
+0000004673 00000 n
+0000004731 00000 n
+0000106726 00000 n
+0000862557 00000 n
+0000004783 00000 n
+0000004830 00000 n
+0000106788 00000 n
+0000862465 00000 n
+0000004882 00000 n
+0000004945 00000 n
+0000106850 00000 n
+0000862373 00000 n
+0000004997 00000 n
+0000005065 00000 n
+0000108769 00000 n
+0000862281 00000 n
+0000005117 00000 n
+0000005184 00000 n
+0000112999 00000 n
+0000862203 00000 n
+0000005236 00000 n
+0000005278 00000 n
+0000114486 00000 n
+0000862110 00000 n
+0000005326 00000 n
+0000005379 00000 n
+0000118694 00000 n
+0000862016 00000 n
+0000005427 00000 n
+0000005464 00000 n
+0000118756 00000 n
+0000861922 00000 n
+0000005512 00000 n
+0000005553 00000 n
+0000118818 00000 n
+0000861828 00000 n
+0000005601 00000 n
+0000005655 00000 n
+0000121116 00000 n
+0000861694 00000 n
+0000005703 00000 n
+0000005727 00000 n
+0000121178 00000 n
+0000861615 00000 n
+0000005780 00000 n
+0000005808 00000 n
+0000122775 00000 n
+0000861522 00000 n
+0000005861 00000 n
+0000005897 00000 n
+0000122837 00000 n
+0000861429 00000 n
+0000005950 00000 n
+0000005987 00000 n
+0000124507 00000 n
+0000861297 00000 n
+0000006040 00000 n
+0000006079 00000 n
+0000124569 00000 n
+0000861218 00000 n
+0000006137 00000 n
+0000006198 00000 n
+0000126047 00000 n
+0000861125 00000 n
+0000006256 00000 n
+0000006307 00000 n
+0000127466 00000 n
+0000861032 00000 n
+0000006365 00000 n
+0000006396 00000 n
+0000128804 00000 n
+0000860939 00000 n
+0000006454 00000 n
+0000006487 00000 n
+0000128866 00000 n
+0000860860 00000 n
+0000006545 00000 n
+0000006576 00000 n
+0000130452 00000 n
+0000860767 00000 n
+0000006629 00000 n
+0000006653 00000 n
+0000130514 00000 n
+0000860674 00000 n
+0000006706 00000 n
+0000006754 00000 n
+0000130576 00000 n
+0000860581 00000 n
+0000006807 00000 n
+0000006842 00000 n
+0000130638 00000 n
+0000860449 00000 n
+0000006895 00000 n
+0000006922 00000 n
+0000134365 00000 n
+0000860384 00000 n
+0000006980 00000 n
+0000007023 00000 n
+0000136655 00000 n
+0000860252 00000 n
+0000007076 00000 n
+0000007102 00000 n
+0000138380 00000 n
+0000860187 00000 n
+0000007160 00000 n
+0000007202 00000 n
+0000139941 00000 n
+0000860069 00000 n
+0000007256 00000 n
+0000007282 00000 n
+0000142182 00000 n
+0000860004 00000 n
+0000007341 00000 n
+0000007383 00000 n
+0000143804 00000 n
+0000859910 00000 n
+0000007431 00000 n
+0000007458 00000 n
+0000143866 00000 n
+0000859777 00000 n
+0000007506 00000 n
+0000007539 00000 n
+0000147143 00000 n
+0000859673 00000 n
+0000007592 00000 n
+0000007645 00000 n
+0000147205 00000 n
+0000859594 00000 n
+0000007703 00000 n
+0000007735 00000 n
+0000168150 00000 n
+0000859515 00000 n
+0000007793 00000 n
+0000007840 00000 n
+0000182984 00000 n
+0000859421 00000 n
+0000007888 00000 n
+0000007921 00000 n
+0000184625 00000 n
+0000859327 00000 n
+0000007969 00000 n
+0000007998 00000 n
+0000184688 00000 n
+0000859194 00000 n
+0000008046 00000 n
+0000008088 00000 n
+0000184751 00000 n
+0000859115 00000 n
+0000008141 00000 n
+0000008182 00000 n
+0000186684 00000 n
+0000859022 00000 n
+0000008235 00000 n
+0000008283 00000 n
+0000186746 00000 n
+0000858943 00000 n
+0000008336 00000 n
+0000008381 00000 n
+0000190198 00000 n
+0000858849 00000 n
+0000008429 00000 n
+0000008466 00000 n
+0000190261 00000 n
+0000858755 00000 n
+0000008514 00000 n
+0000008556 00000 n
+0000194170 00000 n
+0000858661 00000 n
+0000008604 00000 n
+0000008639 00000 n
+0000199360 00000 n
+0000858567 00000 n
+0000008687 00000 n
+0000008729 00000 n
+0000202405 00000 n
+0000858434 00000 n
+0000008777 00000 n
+0000008827 00000 n
+0000202468 00000 n
+0000858355 00000 n
+0000008880 00000 n
+0000008917 00000 n
+0000202531 00000 n
+0000858276 00000 n
+0000008970 00000 n
+0000009031 00000 n
+0000206769 00000 n
+0000858182 00000 n
+0000009079 00000 n
+0000009126 00000 n
+0000213652 00000 n
+0000858049 00000 n
+0000009174 00000 n
+0000009232 00000 n
+0000213714 00000 n
+0000857984 00000 n
+0000009285 00000 n
+0000009337 00000 n
+0000217516 00000 n
+0000857851 00000 n
+0000009385 00000 n
+0000009443 00000 n
+0000217579 00000 n
+0000857786 00000 n
+0000009496 00000 n
+0000009548 00000 n
+0000220402 00000 n
+0000857653 00000 n
+0000009596 00000 n
+0000009654 00000 n
+0000220465 00000 n
+0000857588 00000 n
+0000009707 00000 n
+0000009759 00000 n
+0000221805 00000 n
+0000857494 00000 n
+0000009807 00000 n
+0000009842 00000 n
+0000224233 00000 n
+0000857361 00000 n
+0000009890 00000 n
+0000009949 00000 n
+0000226300 00000 n
+0000857282 00000 n
+0000010002 00000 n
+0000010054 00000 n
+0000228194 00000 n
+0000857189 00000 n
+0000010107 00000 n
+0000010140 00000 n
+0000228257 00000 n
+0000857056 00000 n
+0000010193 00000 n
+0000010222 00000 n
+0000228320 00000 n
+0000856977 00000 n
+0000010280 00000 n
+0000010311 00000 n
+0000238576 00000 n
+0000856884 00000 n
+0000010369 00000 n
+0000010402 00000 n
+0000240016 00000 n
+0000856791 00000 n
+0000010460 00000 n
+0000010491 00000 n
+0000242915 00000 n
+0000856698 00000 n
+0000010549 00000 n
+0000010586 00000 n
+0000244585 00000 n
+0000856605 00000 n
+0000010644 00000 n
+0000010685 00000 n
+0000244648 00000 n
+0000856512 00000 n
+0000010743 00000 n
+0000010784 00000 n
+0000246102 00000 n
+0000856419 00000 n
+0000010842 00000 n
+0000010881 00000 n
+0000246165 00000 n
+0000856326 00000 n
+0000010939 00000 n
+0000010967 00000 n
+0000248949 00000 n
+0000856233 00000 n
+0000011025 00000 n
+0000011057 00000 n
+0000264159 00000 n
+0000856140 00000 n
+0000011116 00000 n
+0000011171 00000 n
+0000269981 00000 n
+0000856061 00000 n
+0000011230 00000 n
+0000011255 00000 n
+0000270044 00000 n
+0000855968 00000 n
+0000011308 00000 n
+0000011364 00000 n
+0000272743 00000 n
+0000855836 00000 n
+0000011417 00000 n
+0000011459 00000 n
+0000272806 00000 n
+0000855757 00000 n
+0000011517 00000 n
+0000011540 00000 n
+0000272869 00000 n
+0000855664 00000 n
+0000011598 00000 n
+0000011621 00000 n
+0000274588 00000 n
+0000855571 00000 n
+0000011679 00000 n
+0000011702 00000 n
+0000274651 00000 n
+0000855478 00000 n
+0000011760 00000 n
+0000011783 00000 n
+0000274714 00000 n
+0000855385 00000 n
+0000011841 00000 n
+0000011864 00000 n
+0000274777 00000 n
+0000855292 00000 n
+0000011922 00000 n
+0000011945 00000 n
+0000278139 00000 n
+0000855199 00000 n
+0000012003 00000 n
+0000012026 00000 n
+0000278202 00000 n
+0000855106 00000 n
+0000012084 00000 n
+0000012110 00000 n
+0000278265 00000 n
+0000855027 00000 n
+0000012168 00000 n
+0000012191 00000 n
+0000278328 00000 n
+0000854934 00000 n
+0000012244 00000 n
+0000012286 00000 n
+0000280617 00000 n
+0000854855 00000 n
+0000012339 00000 n
+0000012378 00000 n
+0000283134 00000 n
+0000854722 00000 n
+0000012426 00000 n
+0000012486 00000 n
+0000285494 00000 n
+0000854657 00000 n
+0000012539 00000 n
+0000012570 00000 n
+0000289061 00000 n
+0000854524 00000 n
+0000012618 00000 n
+0000012639 00000 n
+0000289124 00000 n
+0000854445 00000 n
+0000012692 00000 n
+0000012724 00000 n
+0000289187 00000 n
+0000854352 00000 n
+0000012777 00000 n
+0000012807 00000 n
+0000292394 00000 n
+0000854259 00000 n
+0000012860 00000 n
+0000012915 00000 n
+0000295059 00000 n
+0000854166 00000 n
+0000012968 00000 n
+0000013014 00000 n
+0000317656 00000 n
+0000854087 00000 n
+0000013067 00000 n
+0000013104 00000 n
+0000349125 00000 n
+0000854007 00000 n
+0000013152 00000 n
+0000013177 00000 n
+0000015015 00000 n
+0000015283 00000 n
+0000015462 00000 n
+0000015614 00000 n
+0000015771 00000 n
+0000015933 00000 n
+0000016095 00000 n
+0000016257 00000 n
+0000016419 00000 n
+0000016571 00000 n
+0000016723 00000 n
+0000016884 00000 n
+0000017041 00000 n
+0000017197 00000 n
+0000017349 00000 n
+0000017501 00000 n
+0000017653 00000 n
+0000017810 00000 n
+0000017962 00000 n
+0000020607 00000 n
+0000020757 00000 n
+0000018304 00000 n
+0000013229 00000 n
+0000018119 00000 n
+0000018180 00000 n
+0000847919 00000 n
+0000849513 00000 n
+0000848640 00000 n
+0000847774 00000 n
+0000848929 00000 n
+0000847629 00000 n
+0000849367 00000 n
+0000018242 00000 n
+0000846900 00000 n
+0000846754 00000 n
+0000847046 00000 n
+0000848785 00000 n
+0000848351 00000 n
+0000849804 00000 n
+0000020909 00000 n
+0000021066 00000 n
+0000021223 00000 n
+0000021385 00000 n
+0000021547 00000 n
+0000021709 00000 n
+0000021871 00000 n
+0000022033 00000 n
+0000022194 00000 n
+0000022356 00000 n
+0000022517 00000 n
+0000022679 00000 n
+0000022841 00000 n
+0000023004 00000 n
+0000023166 00000 n
+0000023328 00000 n
+0000023490 00000 n
+0000023652 00000 n
+0000023815 00000 n
+0000023977 00000 n
+0000024140 00000 n
+0000024303 00000 n
+0000024466 00000 n
+0000024629 00000 n
+0000024792 00000 n
+0000024954 00000 n
+0000025117 00000 n
+0000025280 00000 n
+0000025443 00000 n
+0000025606 00000 n
+0000025769 00000 n
+0000025926 00000 n
+0000026083 00000 n
+0000026240 00000 n
+0000026397 00000 n
+0000026554 00000 n
+0000026711 00000 n
+0000026863 00000 n
+0000027015 00000 n
+0000029160 00000 n
+0000027229 00000 n
+0000020155 00000 n
+0000018518 00000 n
+0000027168 00000 n
+0000029312 00000 n
+0000029465 00000 n
+0000029623 00000 n
+0000029781 00000 n
+0000029939 00000 n
+0000030097 00000 n
+0000030260 00000 n
+0000030423 00000 n
+0000030586 00000 n
+0000030748 00000 n
+0000030911 00000 n
+0000031068 00000 n
+0000031226 00000 n
+0000031383 00000 n
+0000031541 00000 n
+0000031703 00000 n
+0000031861 00000 n
+0000032023 00000 n
+0000032182 00000 n
+0000032346 00000 n
+0000032498 00000 n
+0000032651 00000 n
+0000032807 00000 n
+0000032970 00000 n
+0000033133 00000 n
+0000033285 00000 n
+0000033438 00000 n
+0000033591 00000 n
+0000033749 00000 n
+0000033907 00000 n
+0000034065 00000 n
+0000034217 00000 n
+0000034370 00000 n
+0000034523 00000 n
+0000036626 00000 n
+0000036778 00000 n
+0000034735 00000 n
+0000028756 00000 n
+0000027313 00000 n
+0000034674 00000 n
+0000036936 00000 n
+0000037093 00000 n
+0000037246 00000 n
+0000037399 00000 n
+0000037557 00000 n
+0000037710 00000 n
+0000037868 00000 n
+0000038021 00000 n
+0000038179 00000 n
+0000038331 00000 n
+0000038484 00000 n
+0000038642 00000 n
+0000038800 00000 n
+0000038958 00000 n
+0000039121 00000 n
+0000039283 00000 n
+0000039446 00000 n
+0000039608 00000 n
+0000039771 00000 n
+0000039934 00000 n
+0000040097 00000 n
+0000040258 00000 n
+0000040421 00000 n
+0000040584 00000 n
+0000040748 00000 n
+0000040904 00000 n
+0000041062 00000 n
+0000041225 00000 n
+0000041388 00000 n
+0000041551 00000 n
+0000041714 00000 n
+0000041877 00000 n
+0000042040 00000 n
+0000042201 00000 n
+0000042364 00000 n
+0000042526 00000 n
+0000042684 00000 n
+0000044535 00000 n
+0000044687 00000 n
+0000042902 00000 n
+0000036190 00000 n
+0000034832 00000 n
+0000042841 00000 n
+0000044845 00000 n
+0000044998 00000 n
+0000045156 00000 n
+0000045313 00000 n
+0000045471 00000 n
+0000045629 00000 n
+0000045786 00000 n
+0000046301 00000 n
+0000044339 00000 n
+0000042999 00000 n
+0000045939 00000 n
+0000849659 00000 n
+0000848208 00000 n
+0000048840 00000 n
+0000048484 00000 n
+0000046436 00000 n
+0000048596 00000 n
+0000847484 00000 n
+0000847190 00000 n
+0000050948 00000 n
+0000050653 00000 n
+0000049014 00000 n
+0000050765 00000 n
+0000849922 00000 n
+0000053263 00000 n
+0000053090 00000 n
+0000051096 00000 n
+0000053202 00000 n
+0000055994 00000 n
+0000055821 00000 n
+0000053359 00000 n
+0000055933 00000 n
+0000058979 00000 n
+0000058745 00000 n
+0000056090 00000 n
+0000058857 00000 n
+0000062200 00000 n
+0000061719 00000 n
+0000059101 00000 n
+0000061831 00000 n
+0000061953 00000 n
+0000062014 00000 n
+0000062076 00000 n
+0000062138 00000 n
+0000065749 00000 n
+0000064587 00000 n
+0000062348 00000 n
+0000064699 00000 n
+0000064760 00000 n
+0000064822 00000 n
+0000064884 00000 n
+0000064945 00000 n
+0000065007 00000 n
+0000065069 00000 n
+0000065131 00000 n
+0000065193 00000 n
+0000065255 00000 n
+0000065317 00000 n
+0000065379 00000 n
+0000065441 00000 n
+0000065503 00000 n
+0000065565 00000 n
+0000065625 00000 n
+0000065687 00000 n
+0000068893 00000 n
+0000068350 00000 n
+0000065845 00000 n
+0000068462 00000 n
+0000068523 00000 n
+0000068585 00000 n
+0000068647 00000 n
+0000068709 00000 n
+0000849075 00000 n
+0000847337 00000 n
+0000850040 00000 n
+0000071325 00000 n
+0000070969 00000 n
+0000069054 00000 n
+0000071081 00000 n
+0000074006 00000 n
+0000073650 00000 n
+0000071473 00000 n
+0000073762 00000 n
+0000075908 00000 n
+0000075552 00000 n
+0000074128 00000 n
+0000075664 00000 n
+0000078049 00000 n
+0000077692 00000 n
+0000076056 00000 n
+0000077804 00000 n
+0000079940 00000 n
+0000079581 00000 n
+0000078171 00000 n
+0000079693 00000 n
+0000849221 00000 n
+0000081797 00000 n
+0000081500 00000 n
+0000080075 00000 n
+0000081612 00000 n
+0000850158 00000 n
+0000084339 00000 n
+0000083918 00000 n
+0000081919 00000 n
+0000084030 00000 n
+0000087355 00000 n
+0000087059 00000 n
+0000084474 00000 n
+0000087171 00000 n
+0000089457 00000 n
+0000089284 00000 n
+0000087477 00000 n
+0000089396 00000 n
+0000091520 00000 n
+0000091162 00000 n
+0000089579 00000 n
+0000091274 00000 n
+0000095821 00000 n
+0000093582 00000 n
+0000093223 00000 n
+0000091642 00000 n
+0000093335 00000 n
+0000096223 00000 n
+0000095689 00000 n
+0000093704 00000 n
+0000095977 00000 n
+0000850276 00000 n
+0000098458 00000 n
+0000098223 00000 n
+0000096345 00000 n
+0000098335 00000 n
+0000100319 00000 n
+0000100146 00000 n
+0000098580 00000 n
+0000100258 00000 n
+0000101748 00000 n
+0000101513 00000 n
+0000100428 00000 n
+0000101625 00000 n
+0000104278 00000 n
+0000103981 00000 n
+0000101870 00000 n
+0000104093 00000 n
+0000106912 00000 n
+0000106553 00000 n
+0000104413 00000 n
+0000106665 00000 n
+0000108831 00000 n
+0000108596 00000 n
+0000107034 00000 n
+0000108708 00000 n
+0000850394 00000 n
+0000111159 00000 n
+0000110986 00000 n
+0000108966 00000 n
+0000111098 00000 n
+0000113060 00000 n
+0000112826 00000 n
+0000111281 00000 n
+0000112938 00000 n
+0000114548 00000 n
+0000114313 00000 n
+0000113182 00000 n
+0000114425 00000 n
+0000116364 00000 n
+0000116613 00000 n
+0000116232 00000 n
+0000114670 00000 n
+0000116552 00000 n
+0000118441 00000 n
+0000118880 00000 n
+0000118309 00000 n
+0000116722 00000 n
+0000118633 00000 n
+0000121240 00000 n
+0000120943 00000 n
+0000119028 00000 n
+0000121055 00000 n
+0000850512 00000 n
+0000122899 00000 n
+0000122602 00000 n
+0000121375 00000 n
+0000122714 00000 n
+0000124631 00000 n
+0000124334 00000 n
+0000123021 00000 n
+0000124446 00000 n
+0000126109 00000 n
+0000125874 00000 n
+0000124766 00000 n
+0000125986 00000 n
+0000127528 00000 n
+0000127293 00000 n
+0000126231 00000 n
+0000127405 00000 n
+0000128928 00000 n
+0000128631 00000 n
+0000127637 00000 n
+0000128743 00000 n
+0000130700 00000 n
+0000130279 00000 n
+0000129050 00000 n
+0000130391 00000 n
+0000850630 00000 n
+0000132349 00000 n
+0000132176 00000 n
+0000130822 00000 n
+0000132288 00000 n
+0000134427 00000 n
+0000134192 00000 n
+0000132458 00000 n
+0000134304 00000 n
+0000136717 00000 n
+0000136482 00000 n
+0000134549 00000 n
+0000136594 00000 n
+0000138442 00000 n
+0000138207 00000 n
+0000136839 00000 n
+0000138319 00000 n
+0000140003 00000 n
+0000139768 00000 n
+0000138564 00000 n
+0000139880 00000 n
+0000142244 00000 n
+0000142009 00000 n
+0000140125 00000 n
+0000142121 00000 n
+0000850748 00000 n
+0000143928 00000 n
+0000143631 00000 n
+0000142366 00000 n
+0000143743 00000 n
+0000146675 00000 n
+0000147267 00000 n
+0000146535 00000 n
+0000144050 00000 n
+0000147082 00000 n
+0000146879 00000 n
+0000148886 00000 n
+0000148713 00000 n
+0000147402 00000 n
+0000148825 00000 n
+0000151746 00000 n
+0000151573 00000 n
+0000148995 00000 n
+0000151685 00000 n
+0000153273 00000 n
+0000153100 00000 n
+0000151855 00000 n
+0000153212 00000 n
+0000155443 00000 n
+0000155270 00000 n
+0000153382 00000 n
+0000155382 00000 n
+0000850866 00000 n
+0000157440 00000 n
+0000157267 00000 n
+0000155565 00000 n
+0000157379 00000 n
+0000159449 00000 n
+0000159276 00000 n
+0000157549 00000 n
+0000159388 00000 n
+0000161576 00000 n
+0000161403 00000 n
+0000159558 00000 n
+0000161515 00000 n
+0000164788 00000 n
+0000164610 00000 n
+0000161685 00000 n
+0000164725 00000 n
+0000166565 00000 n
+0000166387 00000 n
+0000164911 00000 n
+0000166502 00000 n
+0000168213 00000 n
+0000167971 00000 n
+0000166675 00000 n
+0000168087 00000 n
+0000850986 00000 n
+0000170228 00000 n
+0000170049 00000 n
+0000168336 00000 n
+0000170165 00000 n
+0000172215 00000 n
+0000172036 00000 n
+0000170338 00000 n
+0000172152 00000 n
+0000174459 00000 n
+0000174280 00000 n
+0000172325 00000 n
+0000174396 00000 n
+0000176824 00000 n
+0000176645 00000 n
+0000174569 00000 n
+0000176761 00000 n
+0000178738 00000 n
+0000178559 00000 n
+0000176934 00000 n
+0000178675 00000 n
+0000180278 00000 n
+0000180099 00000 n
+0000178848 00000 n
+0000180215 00000 n
+0000851111 00000 n
+0000183047 00000 n
+0000182805 00000 n
+0000180388 00000 n
+0000182921 00000 n
+0000184814 00000 n
+0000184446 00000 n
+0000183170 00000 n
+0000184562 00000 n
+0000186809 00000 n
+0000186505 00000 n
+0000184950 00000 n
+0000186621 00000 n
+0000188249 00000 n
+0000188070 00000 n
+0000186945 00000 n
+0000188186 00000 n
+0000190322 00000 n
+0000190019 00000 n
+0000188359 00000 n
+0000190135 00000 n
+0000192229 00000 n
+0000192050 00000 n
+0000190445 00000 n
+0000192166 00000 n
+0000851236 00000 n
+0000194233 00000 n
+0000193991 00000 n
+0000192339 00000 n
+0000194107 00000 n
+0000195503 00000 n
+0000195324 00000 n
+0000194369 00000 n
+0000195440 00000 n
+0000196937 00000 n
+0000196758 00000 n
+0000195600 00000 n
+0000196874 00000 n
+0000199423 00000 n
+0000199181 00000 n
+0000197047 00000 n
+0000199297 00000 n
+0000202594 00000 n
+0000202226 00000 n
+0000199546 00000 n
+0000202342 00000 n
+0000205131 00000 n
+0000204952 00000 n
+0000202717 00000 n
+0000205068 00000 n
+0000851361 00000 n
+0000206832 00000 n
+0000206590 00000 n
+0000205254 00000 n
+0000206706 00000 n
+0000208914 00000 n
+0000208735 00000 n
+0000206955 00000 n
+0000208851 00000 n
+0000210544 00000 n
+0000210365 00000 n
+0000209024 00000 n
+0000210481 00000 n
+0000212109 00000 n
+0000211930 00000 n
+0000210654 00000 n
+0000212046 00000 n
+0000213776 00000 n
+0000213473 00000 n
+0000212219 00000 n
+0000213589 00000 n
+0000215133 00000 n
+0000214954 00000 n
+0000213912 00000 n
+0000215070 00000 n
+0000851486 00000 n
+0000216238 00000 n
+0000216059 00000 n
+0000215243 00000 n
+0000216175 00000 n
+0000217642 00000 n
+0000217337 00000 n
+0000216335 00000 n
+0000217453 00000 n
+0000218898 00000 n
+0000218719 00000 n
+0000217778 00000 n
+0000218835 00000 n
+0000220528 00000 n
+0000220223 00000 n
+0000218995 00000 n
+0000220339 00000 n
+0000221868 00000 n
+0000221626 00000 n
+0000220664 00000 n
+0000221742 00000 n
+0000222983 00000 n
+0000222804 00000 n
+0000221991 00000 n
+0000222920 00000 n
+0000851611 00000 n
+0000224296 00000 n
+0000224054 00000 n
+0000223080 00000 n
+0000224170 00000 n
+0000226363 00000 n
+0000226121 00000 n
+0000224432 00000 n
+0000226237 00000 n
+0000228383 00000 n
+0000228015 00000 n
+0000226486 00000 n
+0000228131 00000 n
+0000230244 00000 n
+0000230065 00000 n
+0000228519 00000 n
+0000230181 00000 n
+0000232066 00000 n
+0000231887 00000 n
+0000230367 00000 n
+0000232003 00000 n
+0000233769 00000 n
+0000233590 00000 n
+0000232176 00000 n
+0000233706 00000 n
+0000851736 00000 n
+0000235441 00000 n
+0000235262 00000 n
+0000233879 00000 n
+0000235378 00000 n
+0000237031 00000 n
+0000236852 00000 n
+0000235538 00000 n
+0000236968 00000 n
+0000238639 00000 n
+0000238397 00000 n
+0000237141 00000 n
+0000238513 00000 n
+0000240079 00000 n
+0000239837 00000 n
+0000238762 00000 n
+0000239953 00000 n
+0000241306 00000 n
+0000241127 00000 n
+0000240215 00000 n
+0000241243 00000 n
+0000242978 00000 n
+0000242736 00000 n
+0000241403 00000 n
+0000242852 00000 n
+0000851861 00000 n
+0000244711 00000 n
+0000244406 00000 n
+0000243101 00000 n
+0000244522 00000 n
+0000246227 00000 n
+0000245923 00000 n
+0000244821 00000 n
+0000246039 00000 n
+0000249843 00000 n
+0000248770 00000 n
+0000246337 00000 n
+0000248886 00000 n
+0000249012 00000 n
+0000249076 00000 n
+0000249140 00000 n
+0000249204 00000 n
+0000249268 00000 n
+0000249332 00000 n
+0000249396 00000 n
+0000249460 00000 n
+0000249524 00000 n
+0000249588 00000 n
+0000249652 00000 n
+0000249716 00000 n
+0000249780 00000 n
+0000253422 00000 n
+0000252030 00000 n
+0000249979 00000 n
+0000252146 00000 n
+0000252209 00000 n
+0000252273 00000 n
+0000252337 00000 n
+0000252401 00000 n
+0000252465 00000 n
+0000252528 00000 n
+0000252592 00000 n
+0000252656 00000 n
+0000252720 00000 n
+0000252784 00000 n
+0000252848 00000 n
+0000252912 00000 n
+0000252976 00000 n
+0000253040 00000 n
+0000253104 00000 n
+0000253168 00000 n
+0000253231 00000 n
+0000253295 00000 n
+0000253358 00000 n
+0000256823 00000 n
+0000255495 00000 n
+0000253520 00000 n
+0000255611 00000 n
+0000255674 00000 n
+0000255738 00000 n
+0000255801 00000 n
+0000255865 00000 n
+0000255929 00000 n
+0000255993 00000 n
+0000256057 00000 n
+0000256121 00000 n
+0000256185 00000 n
+0000256249 00000 n
+0000256312 00000 n
+0000256376 00000 n
+0000256440 00000 n
+0000256504 00000 n
+0000256568 00000 n
+0000256632 00000 n
+0000256695 00000 n
+0000256759 00000 n
+0000260395 00000 n
+0000259002 00000 n
+0000256921 00000 n
+0000259118 00000 n
+0000259181 00000 n
+0000259245 00000 n
+0000259309 00000 n
+0000259372 00000 n
+0000259436 00000 n
+0000259500 00000 n
+0000259564 00000 n
+0000259628 00000 n
+0000259692 00000 n
+0000259756 00000 n
+0000259820 00000 n
+0000259883 00000 n
+0000259947 00000 n
+0000260011 00000 n
+0000260075 00000 n
+0000260139 00000 n
+0000260203 00000 n
+0000260267 00000 n
+0000260331 00000 n
+0000851986 00000 n
+0000262181 00000 n
+0000262002 00000 n
+0000260493 00000 n
+0000262118 00000 n
+0000264222 00000 n
+0000263980 00000 n
+0000262266 00000 n
+0000264096 00000 n
+0000266557 00000 n
+0000266779 00000 n
+0000266420 00000 n
+0000264333 00000 n
+0000266716 00000 n
+0000268435 00000 n
+0000268256 00000 n
+0000266902 00000 n
+0000268372 00000 n
+0000270107 00000 n
+0000269802 00000 n
+0000268545 00000 n
+0000269918 00000 n
+0000272528 00000 n
+0000272932 00000 n
+0000272391 00000 n
+0000270243 00000 n
+0000272680 00000 n
+0000852111 00000 n
+0000274840 00000 n
+0000274409 00000 n
+0000273068 00000 n
+0000274525 00000 n
+0000276462 00000 n
+0000276283 00000 n
+0000274963 00000 n
+0000276399 00000 n
+0000278391 00000 n
+0000277960 00000 n
+0000276572 00000 n
+0000278076 00000 n
+0000280680 00000 n
+0000280438 00000 n
+0000278527 00000 n
+0000280554 00000 n
+0000283197 00000 n
+0000282955 00000 n
+0000280816 00000 n
+0000283071 00000 n
+0000285557 00000 n
+0000285315 00000 n
+0000283333 00000 n
+0000285431 00000 n
+0000852236 00000 n
+0000287336 00000 n
+0000287157 00000 n
+0000285680 00000 n
+0000287273 00000 n
+0000289250 00000 n
+0000288882 00000 n
+0000287433 00000 n
+0000288998 00000 n
+0000291087 00000 n
+0000290908 00000 n
+0000289373 00000 n
+0000291024 00000 n
+0000292457 00000 n
+0000292215 00000 n
+0000291210 00000 n
+0000292331 00000 n
+0000295762 00000 n
+0000294880 00000 n
+0000292567 00000 n
+0000294996 00000 n
+0000295122 00000 n
+0000295186 00000 n
+0000295250 00000 n
+0000295314 00000 n
+0000295378 00000 n
+0000295442 00000 n
+0000295506 00000 n
+0000295570 00000 n
+0000295634 00000 n
+0000295698 00000 n
+0000299741 00000 n
+0000298157 00000 n
+0000295911 00000 n
+0000298273 00000 n
+0000298336 00000 n
+0000298400 00000 n
+0000298464 00000 n
+0000298528 00000 n
+0000298592 00000 n
+0000298656 00000 n
+0000298720 00000 n
+0000298784 00000 n
+0000298847 00000 n
+0000298910 00000 n
+0000298974 00000 n
+0000299037 00000 n
+0000299101 00000 n
+0000299165 00000 n
+0000299229 00000 n
+0000299293 00000 n
+0000299357 00000 n
+0000299421 00000 n
+0000299485 00000 n
+0000299549 00000 n
+0000299613 00000 n
+0000299677 00000 n
+0000852361 00000 n
+0000303235 00000 n
+0000301905 00000 n
+0000299839 00000 n
+0000302021 00000 n
+0000302084 00000 n
+0000302148 00000 n
+0000302212 00000 n
+0000302276 00000 n
+0000302340 00000 n
+0000302404 00000 n
+0000302468 00000 n
+0000302532 00000 n
+0000302596 00000 n
+0000302660 00000 n
+0000302724 00000 n
+0000302788 00000 n
+0000302852 00000 n
+0000302916 00000 n
+0000302980 00000 n
+0000303044 00000 n
+0000303107 00000 n
+0000303171 00000 n
+0000307062 00000 n
+0000305476 00000 n
+0000303333 00000 n
+0000305592 00000 n
+0000305655 00000 n
+0000305719 00000 n
+0000305783 00000 n
+0000305847 00000 n
+0000305911 00000 n
+0000305974 00000 n
+0000306038 00000 n
+0000306102 00000 n
+0000306166 00000 n
+0000306230 00000 n
+0000306294 00000 n
+0000306358 00000 n
+0000306422 00000 n
+0000306486 00000 n
+0000306550 00000 n
+0000306614 00000 n
+0000306678 00000 n
+0000306742 00000 n
+0000306806 00000 n
+0000306870 00000 n
+0000306934 00000 n
+0000306998 00000 n
+0000309052 00000 n
+0000308809 00000 n
+0000307160 00000 n
+0000308925 00000 n
+0000308988 00000 n
+0000311013 00000 n
+0000310834 00000 n
+0000309163 00000 n
+0000310950 00000 n
+0000313475 00000 n
+0000313701 00000 n
+0000313338 00000 n
+0000311098 00000 n
+0000313638 00000 n
+0000315858 00000 n
+0000315679 00000 n
+0000313811 00000 n
+0000315795 00000 n
+0000852486 00000 n
+0000317783 00000 n
+0000317477 00000 n
+0000315968 00000 n
+0000317593 00000 n
+0000317719 00000 n
+0000848495 00000 n
+0000321111 00000 n
+0000320932 00000 n
+0000317920 00000 n
+0000321048 00000 n
+0000324301 00000 n
+0000324122 00000 n
+0000321210 00000 n
+0000324238 00000 n
+0000327533 00000 n
+0000327354 00000 n
+0000324400 00000 n
+0000327470 00000 n
+0000330481 00000 n
+0000330302 00000 n
+0000327632 00000 n
+0000330418 00000 n
+0000848064 00000 n
+0000333424 00000 n
+0000333245 00000 n
+0000330594 00000 n
+0000333361 00000 n
+0000852611 00000 n
+0000336526 00000 n
+0000336347 00000 n
+0000333523 00000 n
+0000336463 00000 n
+0000339615 00000 n
+0000339436 00000 n
+0000336625 00000 n
+0000339552 00000 n
+0000341174 00000 n
+0000340995 00000 n
+0000339714 00000 n
+0000341111 00000 n
+0000343941 00000 n
+0000344090 00000 n
+0000344240 00000 n
+0000344390 00000 n
+0000344541 00000 n
+0000344693 00000 n
+0000344843 00000 n
+0000344994 00000 n
+0000345144 00000 n
+0000345293 00000 n
+0000345443 00000 n
+0000345593 00000 n
+0000345743 00000 n
+0000345893 00000 n
+0000346042 00000 n
+0000346193 00000 n
+0000346344 00000 n
+0000346495 00000 n
+0000346646 00000 n
+0000346797 00000 n
+0000346947 00000 n
+0000347098 00000 n
+0000347249 00000 n
+0000347400 00000 n
+0000347551 00000 n
+0000347703 00000 n
+0000347854 00000 n
+0000348005 00000 n
+0000348157 00000 n
+0000348308 00000 n
+0000348459 00000 n
+0000348610 00000 n
+0000348760 00000 n
+0000348911 00000 n
+0000349188 00000 n
+0000343507 00000 n
+0000341273 00000 n
+0000349062 00000 n
+0000351805 00000 n
+0000351956 00000 n
+0000352107 00000 n
+0000352258 00000 n
+0000352408 00000 n
+0000352558 00000 n
+0000352708 00000 n
+0000352858 00000 n
+0000353008 00000 n
+0000353159 00000 n
+0000353310 00000 n
+0000353459 00000 n
+0000353609 00000 n
+0000353760 00000 n
+0000353911 00000 n
+0000354062 00000 n
+0000354214 00000 n
+0000354366 00000 n
+0000354580 00000 n
+0000351515 00000 n
+0000349299 00000 n
+0000354517 00000 n
+0000357229 00000 n
+0000357380 00000 n
+0000357531 00000 n
+0000357682 00000 n
+0000357832 00000 n
+0000357984 00000 n
+0000358135 00000 n
+0000358284 00000 n
+0000358434 00000 n
+0000358585 00000 n
+0000358736 00000 n
+0000358887 00000 n
+0000359038 00000 n
+0000359189 00000 n
+0000359340 00000 n
+0000359490 00000 n
+0000359703 00000 n
+0000356957 00000 n
+0000354665 00000 n
+0000359640 00000 n
+0000852736 00000 n
+0000362524 00000 n
+0000362673 00000 n
+0000362823 00000 n
+0000362973 00000 n
+0000363123 00000 n
+0000363273 00000 n
+0000363422 00000 n
+0000363573 00000 n
+0000363725 00000 n
+0000363876 00000 n
+0000364027 00000 n
+0000364178 00000 n
+0000364329 00000 n
+0000364480 00000 n
+0000364631 00000 n
+0000364782 00000 n
+0000364933 00000 n
+0000365083 00000 n
+0000365235 00000 n
+0000365386 00000 n
+0000365537 00000 n
+0000365688 00000 n
+0000365839 00000 n
+0000365988 00000 n
+0000366138 00000 n
+0000366289 00000 n
+0000366440 00000 n
+0000366591 00000 n
+0000366741 00000 n
+0000366892 00000 n
+0000367043 00000 n
+0000367193 00000 n
+0000367345 00000 n
+0000367494 00000 n
+0000367644 00000 n
+0000367795 00000 n
+0000367946 00000 n
+0000368096 00000 n
+0000368248 00000 n
+0000368399 00000 n
+0000368551 00000 n
+0000368766 00000 n
+0000362027 00000 n
+0000359788 00000 n
+0000368703 00000 n
+0000371688 00000 n
+0000371839 00000 n
+0000371990 00000 n
+0000372141 00000 n
+0000372291 00000 n
+0000372442 00000 n
+0000372593 00000 n
+0000372744 00000 n
+0000372894 00000 n
+0000373043 00000 n
+0000373194 00000 n
+0000373345 00000 n
+0000373494 00000 n
+0000373645 00000 n
+0000373796 00000 n
+0000373947 00000 n
+0000374098 00000 n
+0000374248 00000 n
+0000374399 00000 n
+0000374549 00000 n
+0000374700 00000 n
+0000374851 00000 n
+0000375002 00000 n
+0000375153 00000 n
+0000375304 00000 n
+0000375455 00000 n
+0000375605 00000 n
+0000375756 00000 n
+0000375904 00000 n
+0000376052 00000 n
+0000376203 00000 n
+0000376353 00000 n
+0000376504 00000 n
+0000376656 00000 n
+0000376807 00000 n
+0000376958 00000 n
+0000377109 00000 n
+0000377261 00000 n
+0000377413 00000 n
+0000377565 00000 n
+0000377716 00000 n
+0000381036 00000 n
+0000381186 00000 n
+0000381335 00000 n
+0000377930 00000 n
+0000371191 00000 n
+0000368864 00000 n
+0000377867 00000 n
+0000381485 00000 n
+0000381636 00000 n
+0000381788 00000 n
+0000381939 00000 n
+0000382090 00000 n
+0000382241 00000 n
+0000382392 00000 n
+0000382543 00000 n
+0000382694 00000 n
+0000382844 00000 n
+0000382995 00000 n
+0000383146 00000 n
+0000383296 00000 n
+0000383447 00000 n
+0000383598 00000 n
+0000383749 00000 n
+0000383899 00000 n
+0000384050 00000 n
+0000384199 00000 n
+0000384348 00000 n
+0000384497 00000 n
+0000384647 00000 n
+0000384798 00000 n
+0000384949 00000 n
+0000385100 00000 n
+0000385251 00000 n
+0000385402 00000 n
+0000385553 00000 n
+0000385704 00000 n
+0000385855 00000 n
+0000386006 00000 n
+0000386157 00000 n
+0000386309 00000 n
+0000386461 00000 n
+0000386611 00000 n
+0000386761 00000 n
+0000386912 00000 n
+0000387064 00000 n
+0000387216 00000 n
+0000387367 00000 n
+0000387517 00000 n
+0000387668 00000 n
+0000387819 00000 n
+0000387971 00000 n
+0000388122 00000 n
+0000388274 00000 n
+0000388426 00000 n
+0000388640 00000 n
+0000380458 00000 n
+0000378015 00000 n
+0000388577 00000 n
+0000391708 00000 n
+0000391859 00000 n
+0000392010 00000 n
+0000392161 00000 n
+0000392312 00000 n
+0000392462 00000 n
+0000392612 00000 n
+0000392761 00000 n
+0000392912 00000 n
+0000393064 00000 n
+0000393216 00000 n
+0000393367 00000 n
+0000393518 00000 n
+0000393670 00000 n
+0000393820 00000 n
+0000393972 00000 n
+0000394123 00000 n
+0000394274 00000 n
+0000394425 00000 n
+0000394575 00000 n
+0000394727 00000 n
+0000394878 00000 n
+0000395029 00000 n
+0000395179 00000 n
+0000395330 00000 n
+0000395481 00000 n
+0000395632 00000 n
+0000395783 00000 n
+0000395934 00000 n
+0000396085 00000 n
+0000396236 00000 n
+0000396387 00000 n
+0000396538 00000 n
+0000396689 00000 n
+0000396840 00000 n
+0000396991 00000 n
+0000397143 00000 n
+0000397295 00000 n
+0000397445 00000 n
+0000397596 00000 n
+0000397747 00000 n
+0000397899 00000 n
+0000398051 00000 n
+0000398203 00000 n
+0000398354 00000 n
+0000398505 00000 n
+0000398656 00000 n
+0000398807 00000 n
+0000398958 00000 n
+0000399110 00000 n
+0000402327 00000 n
+0000402477 00000 n
+0000399324 00000 n
+0000391130 00000 n
+0000388738 00000 n
+0000399261 00000 n
+0000402628 00000 n
+0000402778 00000 n
+0000402929 00000 n
+0000403081 00000 n
+0000403232 00000 n
+0000403383 00000 n
+0000403534 00000 n
+0000403684 00000 n
+0000403834 00000 n
+0000403984 00000 n
+0000404133 00000 n
+0000404284 00000 n
+0000404435 00000 n
+0000404586 00000 n
+0000404737 00000 n
+0000404887 00000 n
+0000405038 00000 n
+0000405189 00000 n
+0000405339 00000 n
+0000405490 00000 n
+0000405640 00000 n
+0000405791 00000 n
+0000405942 00000 n
+0000406093 00000 n
+0000406243 00000 n
+0000406393 00000 n
+0000406544 00000 n
+0000406695 00000 n
+0000406845 00000 n
+0000406996 00000 n
+0000407148 00000 n
+0000407299 00000 n
+0000407450 00000 n
+0000407601 00000 n
+0000407752 00000 n
+0000407903 00000 n
+0000408117 00000 n
+0000401857 00000 n
+0000399422 00000 n
+0000408054 00000 n
+0000411708 00000 n
+0000411857 00000 n
+0000412009 00000 n
+0000412160 00000 n
+0000412311 00000 n
+0000412462 00000 n
+0000412612 00000 n
+0000412761 00000 n
+0000412912 00000 n
+0000413063 00000 n
+0000413214 00000 n
+0000413365 00000 n
+0000413516 00000 n
+0000413667 00000 n
+0000413818 00000 n
+0000413969 00000 n
+0000414119 00000 n
+0000414269 00000 n
+0000414419 00000 n
+0000414570 00000 n
+0000414721 00000 n
+0000414872 00000 n
+0000415023 00000 n
+0000415173 00000 n
+0000415323 00000 n
+0000415474 00000 n
+0000415625 00000 n
+0000415776 00000 n
+0000415927 00000 n
+0000416078 00000 n
+0000416229 00000 n
+0000416380 00000 n
+0000416531 00000 n
+0000416683 00000 n
+0000416835 00000 n
+0000416986 00000 n
+0000417136 00000 n
+0000417287 00000 n
+0000417439 00000 n
+0000417589 00000 n
+0000417740 00000 n
+0000417891 00000 n
+0000418043 00000 n
+0000418195 00000 n
+0000418345 00000 n
+0000418496 00000 n
+0000418647 00000 n
+0000418799 00000 n
+0000418951 00000 n
+0000419101 00000 n
+0000419252 00000 n
+0000419403 00000 n
+0000419554 00000 n
+0000419705 00000 n
+0000419855 00000 n
+0000420006 00000 n
+0000420157 00000 n
+0000420308 00000 n
+0000420458 00000 n
+0000420609 00000 n
+0000420760 00000 n
+0000420910 00000 n
+0000421062 00000 n
+0000421213 00000 n
+0000421364 00000 n
+0000421515 00000 n
+0000421667 00000 n
+0000421818 00000 n
+0000421969 00000 n
+0000422119 00000 n
+0000422270 00000 n
+0000422422 00000 n
+0000422572 00000 n
+0000422723 00000 n
+0000422873 00000 n
+0000423024 00000 n
+0000423175 00000 n
+0000423326 00000 n
+0000423477 00000 n
+0000423628 00000 n
+0000423779 00000 n
+0000423931 00000 n
+0000424082 00000 n
+0000424234 00000 n
+0000424386 00000 n
+0000424535 00000 n
+0000424685 00000 n
+0000424836 00000 n
+0000424987 00000 n
+0000425138 00000 n
+0000425288 00000 n
+0000425439 00000 n
+0000425591 00000 n
+0000425740 00000 n
+0000425890 00000 n
+0000426042 00000 n
+0000426192 00000 n
+0000426342 00000 n
+0000426493 00000 n
+0000426645 00000 n
+0000426795 00000 n
+0000426946 00000 n
+0000427096 00000 n
+0000427247 00000 n
+0000427399 00000 n
+0000427549 00000 n
+0000427700 00000 n
+0000427850 00000 n
+0000428001 00000 n
+0000428153 00000 n
+0000428304 00000 n
+0000428455 00000 n
+0000428606 00000 n
+0000428757 00000 n
+0000428908 00000 n
+0000429058 00000 n
+0000429208 00000 n
+0000429359 00000 n
+0000429511 00000 n
+0000429661 00000 n
+0000429812 00000 n
+0000429962 00000 n
+0000430113 00000 n
+0000433515 00000 n
+0000430327 00000 n
+0000410473 00000 n
+0000408228 00000 n
+0000430264 00000 n
+0000852861 00000 n
+0000433664 00000 n
+0000433815 00000 n
+0000433966 00000 n
+0000434117 00000 n
+0000434268 00000 n
+0000434418 00000 n
+0000434568 00000 n
+0000434719 00000 n
+0000434869 00000 n
+0000435020 00000 n
+0000435171 00000 n
+0000435322 00000 n
+0000435473 00000 n
+0000435625 00000 n
+0000435776 00000 n
+0000435927 00000 n
+0000436079 00000 n
+0000436230 00000 n
+0000436380 00000 n
+0000436532 00000 n
+0000436682 00000 n
+0000436833 00000 n
+0000436983 00000 n
+0000437134 00000 n
+0000437286 00000 n
+0000437437 00000 n
+0000437588 00000 n
+0000437739 00000 n
+0000437890 00000 n
+0000438041 00000 n
+0000438192 00000 n
+0000438343 00000 n
+0000438494 00000 n
+0000438645 00000 n
+0000438796 00000 n
+0000438947 00000 n
+0000439096 00000 n
+0000439247 00000 n
+0000439397 00000 n
+0000439546 00000 n
+0000439698 00000 n
+0000439846 00000 n
+0000439997 00000 n
+0000440147 00000 n
+0000440299 00000 n
+0000440450 00000 n
+0000440602 00000 n
+0000440751 00000 n
+0000440903 00000 n
+0000441052 00000 n
+0000441204 00000 n
+0000441353 00000 n
+0000441505 00000 n
+0000441656 00000 n
+0000441807 00000 n
+0000441958 00000 n
+0000442108 00000 n
+0000442259 00000 n
+0000442411 00000 n
+0000442560 00000 n
+0000442712 00000 n
+0000442863 00000 n
+0000443012 00000 n
+0000443161 00000 n
+0000443311 00000 n
+0000443462 00000 n
+0000443612 00000 n
+0000443764 00000 n
+0000443914 00000 n
+0000444063 00000 n
+0000444214 00000 n
+0000444364 00000 n
+0000444516 00000 n
+0000444666 00000 n
+0000444818 00000 n
+0000444969 00000 n
+0000445120 00000 n
+0000445271 00000 n
+0000445422 00000 n
+0000445571 00000 n
+0000445722 00000 n
+0000445874 00000 n
+0000446025 00000 n
+0000446176 00000 n
+0000446326 00000 n
+0000446477 00000 n
+0000446628 00000 n
+0000446779 00000 n
+0000446930 00000 n
+0000447079 00000 n
+0000447228 00000 n
+0000447378 00000 n
+0000447529 00000 n
+0000447741 00000 n
+0000432541 00000 n
+0000430425 00000 n
+0000447678 00000 n
+0000451201 00000 n
+0000451351 00000 n
+0000451501 00000 n
+0000451651 00000 n
+0000451802 00000 n
+0000451953 00000 n
+0000452103 00000 n
+0000452254 00000 n
+0000452404 00000 n
+0000452554 00000 n
+0000452706 00000 n
+0000452856 00000 n
+0000453007 00000 n
+0000453158 00000 n
+0000453308 00000 n
+0000453459 00000 n
+0000453610 00000 n
+0000453761 00000 n
+0000453911 00000 n
+0000454062 00000 n
+0000454213 00000 n
+0000454364 00000 n
+0000454515 00000 n
+0000454666 00000 n
+0000454817 00000 n
+0000454967 00000 n
+0000455118 00000 n
+0000455269 00000 n
+0000455420 00000 n
+0000455570 00000 n
+0000455722 00000 n
+0000455872 00000 n
+0000456024 00000 n
+0000456175 00000 n
+0000456326 00000 n
+0000456475 00000 n
+0000456626 00000 n
+0000456777 00000 n
+0000456928 00000 n
+0000457080 00000 n
+0000457231 00000 n
+0000457380 00000 n
+0000457531 00000 n
+0000457682 00000 n
+0000457832 00000 n
+0000457982 00000 n
+0000458133 00000 n
+0000458284 00000 n
+0000458434 00000 n
+0000458583 00000 n
+0000458733 00000 n
+0000458884 00000 n
+0000459034 00000 n
+0000459185 00000 n
+0000459335 00000 n
+0000459486 00000 n
+0000459637 00000 n
+0000459787 00000 n
+0000459938 00000 n
+0000460089 00000 n
+0000460240 00000 n
+0000460391 00000 n
+0000460542 00000 n
+0000460693 00000 n
+0000460844 00000 n
+0000460996 00000 n
+0000461148 00000 n
+0000461296 00000 n
+0000461447 00000 n
+0000461598 00000 n
+0000461749 00000 n
+0000461900 00000 n
+0000462050 00000 n
+0000462201 00000 n
+0000462353 00000 n
+0000462504 00000 n
+0000462655 00000 n
+0000462806 00000 n
+0000462955 00000 n
+0000463106 00000 n
+0000463257 00000 n
+0000463409 00000 n
+0000463561 00000 n
+0000463712 00000 n
+0000463862 00000 n
+0000464013 00000 n
+0000464165 00000 n
+0000464316 00000 n
+0000464467 00000 n
+0000464619 00000 n
+0000464771 00000 n
+0000464923 00000 n
+0000465075 00000 n
+0000465226 00000 n
+0000468360 00000 n
+0000468510 00000 n
+0000468659 00000 n
+0000465440 00000 n
+0000450227 00000 n
+0000447839 00000 n
+0000465377 00000 n
+0000468809 00000 n
+0000468960 00000 n
+0000469112 00000 n
+0000469261 00000 n
+0000469412 00000 n
+0000469562 00000 n
+0000469712 00000 n
+0000469863 00000 n
+0000470014 00000 n
+0000470164 00000 n
+0000470314 00000 n
+0000470464 00000 n
+0000470615 00000 n
+0000470766 00000 n
+0000470916 00000 n
+0000471066 00000 n
+0000471218 00000 n
+0000471368 00000 n
+0000471519 00000 n
+0000471670 00000 n
+0000471820 00000 n
+0000471972 00000 n
+0000472123 00000 n
+0000472274 00000 n
+0000472425 00000 n
+0000472576 00000 n
+0000472726 00000 n
+0000472877 00000 n
+0000473027 00000 n
+0000473178 00000 n
+0000473329 00000 n
+0000473480 00000 n
+0000473630 00000 n
+0000473780 00000 n
+0000473931 00000 n
+0000474082 00000 n
+0000474232 00000 n
+0000474383 00000 n
+0000474534 00000 n
+0000474685 00000 n
+0000474836 00000 n
+0000474987 00000 n
+0000475138 00000 n
+0000475288 00000 n
+0000475438 00000 n
+0000475588 00000 n
+0000475737 00000 n
+0000475887 00000 n
+0000476039 00000 n
+0000476190 00000 n
+0000476341 00000 n
+0000476492 00000 n
+0000476643 00000 n
+0000476794 00000 n
+0000476945 00000 n
+0000477096 00000 n
+0000477309 00000 n
+0000467701 00000 n
+0000465538 00000 n
+0000477246 00000 n
+0000479998 00000 n
+0000480150 00000 n
+0000480301 00000 n
+0000480452 00000 n
+0000480603 00000 n
+0000480755 00000 n
+0000480906 00000 n
+0000481057 00000 n
+0000481208 00000 n
+0000481356 00000 n
+0000481505 00000 n
+0000481657 00000 n
+0000481808 00000 n
+0000481959 00000 n
+0000482111 00000 n
+0000482262 00000 n
+0000482414 00000 n
+0000482565 00000 n
+0000482716 00000 n
+0000482866 00000 n
+0000483080 00000 n
+0000479690 00000 n
+0000477394 00000 n
+0000483017 00000 n
+0000485763 00000 n
+0000485914 00000 n
+0000486064 00000 n
+0000486213 00000 n
+0000486365 00000 n
+0000486516 00000 n
+0000486666 00000 n
+0000486816 00000 n
+0000486967 00000 n
+0000487119 00000 n
+0000487270 00000 n
+0000487421 00000 n
+0000487572 00000 n
+0000487723 00000 n
+0000487874 00000 n
+0000488023 00000 n
+0000488172 00000 n
+0000488322 00000 n
+0000488473 00000 n
+0000488624 00000 n
+0000488774 00000 n
+0000488925 00000 n
+0000489077 00000 n
+0000489228 00000 n
+0000489378 00000 n
+0000489530 00000 n
+0000489681 00000 n
+0000489896 00000 n
+0000485392 00000 n
+0000483178 00000 n
+0000489833 00000 n
+0000492422 00000 n
+0000492572 00000 n
+0000492722 00000 n
+0000492872 00000 n
+0000493023 00000 n
+0000493174 00000 n
+0000493325 00000 n
+0000493476 00000 n
+0000493627 00000 n
+0000493778 00000 n
+0000493929 00000 n
+0000494077 00000 n
+0000494228 00000 n
+0000494379 00000 n
+0000494530 00000 n
+0000494681 00000 n
+0000494833 00000 n
+0000494984 00000 n
+0000495135 00000 n
+0000495286 00000 n
+0000495500 00000 n
+0000492114 00000 n
+0000490020 00000 n
+0000495437 00000 n
+0000852986 00000 n
+0000498293 00000 n
+0000498444 00000 n
+0000498595 00000 n
+0000498746 00000 n
+0000498897 00000 n
+0000499048 00000 n
+0000499198 00000 n
+0000499349 00000 n
+0000499498 00000 n
+0000499648 00000 n
+0000499797 00000 n
+0000499948 00000 n
+0000500098 00000 n
+0000500248 00000 n
+0000500398 00000 n
+0000500549 00000 n
+0000500699 00000 n
+0000500850 00000 n
+0000501001 00000 n
+0000501151 00000 n
+0000501302 00000 n
+0000501453 00000 n
+0000501605 00000 n
+0000501757 00000 n
+0000501908 00000 n
+0000502059 00000 n
+0000502210 00000 n
+0000502361 00000 n
+0000502510 00000 n
+0000502661 00000 n
+0000502812 00000 n
+0000502962 00000 n
+0000503114 00000 n
+0000503266 00000 n
+0000503418 00000 n
+0000503570 00000 n
+0000503721 00000 n
+0000503872 00000 n
+0000504023 00000 n
+0000504174 00000 n
+0000504325 00000 n
+0000504539 00000 n
+0000497796 00000 n
+0000495585 00000 n
+0000504476 00000 n
+0000507448 00000 n
+0000507600 00000 n
+0000507751 00000 n
+0000507902 00000 n
+0000508054 00000 n
+0000508204 00000 n
+0000508355 00000 n
+0000508506 00000 n
+0000508656 00000 n
+0000508808 00000 n
+0000508959 00000 n
+0000509110 00000 n
+0000509261 00000 n
+0000509412 00000 n
+0000509564 00000 n
+0000509715 00000 n
+0000509866 00000 n
+0000510016 00000 n
+0000510168 00000 n
+0000510318 00000 n
+0000510470 00000 n
+0000510620 00000 n
+0000510771 00000 n
+0000510922 00000 n
+0000511073 00000 n
+0000511223 00000 n
+0000511374 00000 n
+0000511526 00000 n
+0000511677 00000 n
+0000511829 00000 n
+0000511980 00000 n
+0000512132 00000 n
+0000512284 00000 n
+0000512435 00000 n
+0000512586 00000 n
+0000512736 00000 n
+0000512887 00000 n
+0000513038 00000 n
+0000513189 00000 n
+0000513340 00000 n
+0000513491 00000 n
+0000513642 00000 n
+0000513792 00000 n
+0000513943 00000 n
+0000514095 00000 n
+0000514247 00000 n
+0000514399 00000 n
+0000514550 00000 n
+0000514700 00000 n
+0000514851 00000 n
+0000515002 00000 n
+0000515153 00000 n
+0000515304 00000 n
+0000515455 00000 n
+0000515606 00000 n
+0000515820 00000 n
+0000506825 00000 n
+0000504637 00000 n
+0000515757 00000 n
+0000518493 00000 n
+0000518644 00000 n
+0000518795 00000 n
+0000518946 00000 n
+0000519095 00000 n
+0000519246 00000 n
+0000519397 00000 n
+0000519548 00000 n
+0000519699 00000 n
+0000519850 00000 n
+0000520001 00000 n
+0000520152 00000 n
+0000520303 00000 n
+0000520453 00000 n
+0000520604 00000 n
+0000520754 00000 n
+0000520904 00000 n
+0000521055 00000 n
+0000521206 00000 n
+0000521357 00000 n
+0000521507 00000 n
+0000521658 00000 n
+0000521809 00000 n
+0000521960 00000 n
+0000522111 00000 n
+0000522262 00000 n
+0000522476 00000 n
+0000518131 00000 n
+0000515918 00000 n
+0000522413 00000 n
+0000525676 00000 n
+0000525827 00000 n
+0000525978 00000 n
+0000526126 00000 n
+0000526277 00000 n
+0000526428 00000 n
+0000526579 00000 n
+0000526729 00000 n
+0000526881 00000 n
+0000527033 00000 n
+0000527184 00000 n
+0000527335 00000 n
+0000527484 00000 n
+0000527636 00000 n
+0000527786 00000 n
+0000527938 00000 n
+0000528090 00000 n
+0000528241 00000 n
+0000528389 00000 n
+0000528540 00000 n
+0000528689 00000 n
+0000528841 00000 n
+0000528990 00000 n
+0000529142 00000 n
+0000529293 00000 n
+0000529444 00000 n
+0000529594 00000 n
+0000529744 00000 n
+0000529894 00000 n
+0000530044 00000 n
+0000530195 00000 n
+0000530346 00000 n
+0000530497 00000 n
+0000530647 00000 n
+0000530798 00000 n
+0000530949 00000 n
+0000531099 00000 n
+0000531250 00000 n
+0000531399 00000 n
+0000531547 00000 n
+0000531696 00000 n
+0000531847 00000 n
+0000531998 00000 n
+0000532149 00000 n
+0000532300 00000 n
+0000532451 00000 n
+0000532602 00000 n
+0000532751 00000 n
+0000532900 00000 n
+0000533049 00000 n
+0000533199 00000 n
+0000533348 00000 n
+0000533499 00000 n
+0000533651 00000 n
+0000533802 00000 n
+0000533953 00000 n
+0000534104 00000 n
+0000537245 00000 n
+0000534317 00000 n
+0000525035 00000 n
+0000522574 00000 n
+0000534254 00000 n
+0000537394 00000 n
+0000537543 00000 n
+0000537693 00000 n
+0000537842 00000 n
+0000537994 00000 n
+0000538145 00000 n
+0000538295 00000 n
+0000538445 00000 n
+0000538596 00000 n
+0000538746 00000 n
+0000538898 00000 n
+0000539049 00000 n
+0000539199 00000 n
+0000539350 00000 n
+0000539501 00000 n
+0000539652 00000 n
+0000539803 00000 n
+0000539954 00000 n
+0000540103 00000 n
+0000540253 00000 n
+0000540404 00000 n
+0000540555 00000 n
+0000540705 00000 n
+0000540856 00000 n
+0000541008 00000 n
+0000541155 00000 n
+0000541305 00000 n
+0000541455 00000 n
+0000541605 00000 n
+0000541757 00000 n
+0000541909 00000 n
+0000542123 00000 n
+0000536829 00000 n
+0000534428 00000 n
+0000542060 00000 n
+0000544988 00000 n
+0000545139 00000 n
+0000545290 00000 n
+0000545441 00000 n
+0000545592 00000 n
+0000545743 00000 n
+0000545894 00000 n
+0000546045 00000 n
+0000546195 00000 n
+0000546346 00000 n
+0000546496 00000 n
+0000546648 00000 n
+0000546799 00000 n
+0000546950 00000 n
+0000547100 00000 n
+0000547251 00000 n
+0000547403 00000 n
+0000547555 00000 n
+0000547707 00000 n
+0000547857 00000 n
+0000548008 00000 n
+0000548159 00000 n
+0000548310 00000 n
+0000548461 00000 n
+0000548612 00000 n
+0000548762 00000 n
+0000548913 00000 n
+0000549064 00000 n
+0000549214 00000 n
+0000549365 00000 n
+0000549579 00000 n
+0000544590 00000 n
+0000542221 00000 n
+0000549516 00000 n
+0000853111 00000 n
+0000552400 00000 n
+0000552550 00000 n
+0000552701 00000 n
+0000552852 00000 n
+0000553003 00000 n
+0000553154 00000 n
+0000553305 00000 n
+0000553456 00000 n
+0000553606 00000 n
+0000553756 00000 n
+0000553907 00000 n
+0000554058 00000 n
+0000554207 00000 n
+0000554358 00000 n
+0000554509 00000 n
+0000554661 00000 n
+0000554811 00000 n
+0000554963 00000 n
+0000555112 00000 n
+0000555262 00000 n
+0000555412 00000 n
+0000555562 00000 n
+0000555713 00000 n
+0000555864 00000 n
+0000556015 00000 n
+0000556228 00000 n
+0000552047 00000 n
+0000549677 00000 n
+0000556165 00000 n
+0000559022 00000 n
+0000559173 00000 n
+0000559323 00000 n
+0000559473 00000 n
+0000559624 00000 n
+0000559774 00000 n
+0000559926 00000 n
+0000560075 00000 n
+0000560225 00000 n
+0000560376 00000 n
+0000560526 00000 n
+0000560675 00000 n
+0000560826 00000 n
+0000560977 00000 n
+0000561128 00000 n
+0000561278 00000 n
+0000561429 00000 n
+0000561580 00000 n
+0000561731 00000 n
+0000561883 00000 n
+0000562035 00000 n
+0000562186 00000 n
+0000562337 00000 n
+0000562488 00000 n
+0000562639 00000 n
+0000562853 00000 n
+0000558669 00000 n
+0000556326 00000 n
+0000562790 00000 n
+0000565810 00000 n
+0000565961 00000 n
+0000566112 00000 n
+0000566263 00000 n
+0000566415 00000 n
+0000566565 00000 n
+0000566717 00000 n
+0000566867 00000 n
+0000567018 00000 n
+0000567169 00000 n
+0000567321 00000 n
+0000567473 00000 n
+0000567625 00000 n
+0000567776 00000 n
+0000567927 00000 n
+0000568078 00000 n
+0000568229 00000 n
+0000568380 00000 n
+0000568531 00000 n
+0000568681 00000 n
+0000568829 00000 n
+0000568979 00000 n
+0000569129 00000 n
+0000569279 00000 n
+0000569430 00000 n
+0000569581 00000 n
+0000569732 00000 n
+0000569883 00000 n
+0000570034 00000 n
+0000570185 00000 n
+0000570336 00000 n
+0000570487 00000 n
+0000570638 00000 n
+0000570789 00000 n
+0000570940 00000 n
+0000571091 00000 n
+0000571242 00000 n
+0000571393 00000 n
+0000572987 00000 n
+0000573134 00000 n
+0000573283 00000 n
+0000571607 00000 n
+0000565340 00000 n
+0000562938 00000 n
+0000571544 00000 n
+0000573432 00000 n
+0000573583 00000 n
+0000573734 00000 n
+0000573885 00000 n
+0000574035 00000 n
+0000574250 00000 n
+0000572787 00000 n
+0000571705 00000 n
+0000574187 00000 n
+0000574348 00000 n
+0000574374 00000 n
+0000575034 00000 n
+0000575680 00000 n
+0000575992 00000 n
+0000576024 00000 n
+0000576156 00000 n
+0000576182 00000 n
+0000576306 00000 n
+0000576706 00000 n
+0000577217 00000 n
+0000577903 00000 n
+0000577929 00000 n
+0000578563 00000 n
+0000579205 00000 n
+0000579601 00000 n
+0000580246 00000 n
+0000580272 00000 n
+0000580691 00000 n
+0000581288 00000 n
+0000581770 00000 n
+0000582128 00000 n
+0000604724 00000 n
+0000605151 00000 n
+0000623945 00000 n
+0000624344 00000 n
+0000631433 00000 n
+0000631655 00000 n
+0000640314 00000 n
+0000640549 00000 n
+0000645674 00000 n
+0000645934 00000 n
+0000653059 00000 n
+0000653289 00000 n
+0000679579 00000 n
+0000680174 00000 n
+0000691712 00000 n
+0000692022 00000 n
+0000702567 00000 n
+0000702825 00000 n
+0000709915 00000 n
+0000710135 00000 n
+0000718976 00000 n
+0000719246 00000 n
+0000733047 00000 n
+0000733365 00000 n
+0000755791 00000 n
+0000756282 00000 n
+0000764339 00000 n
+0000764633 00000 n
+0000772032 00000 n
+0000772272 00000 n
+0000779413 00000 n
+0000779641 00000 n
+0000786868 00000 n
+0000787120 00000 n
+0000799248 00000 n
+0000799518 00000 n
+0000818879 00000 n
+0000819379 00000 n
+0000824845 00000 n
+0000825130 00000 n
+0000846097 00000 n
+0000853227 00000 n
+0000853347 00000 n
+0000853469 00000 n
+0000853595 00000 n
+0000853721 00000 n
+0000853829 00000 n
+0000853930 00000 n
+0000867208 00000 n
+0000867389 00000 n
+0000867574 00000 n
+0000867757 00000 n
+0000867942 00000 n
+0000868124 00000 n
+0000868306 00000 n
+0000868491 00000 n
+0000868674 00000 n
+0000868859 00000 n
+0000869042 00000 n
+0000869227 00000 n
+0000869410 00000 n
+0000869590 00000 n
+0000869760 00000 n
+0000869936 00000 n
+0000870110 00000 n
+0000870284 00000 n
+0000870461 00000 n
+0000870636 00000 n
+0000870813 00000 n
+0000870988 00000 n
+0000871165 00000 n
+0000871340 00000 n
+0000871517 00000 n
+0000871692 00000 n
+0000871869 00000 n
+0000872043 00000 n
+0000872217 00000 n
+0000872399 00000 n
+0000872581 00000 n
+0000872766 00000 n
+0000872949 00000 n
+0000873134 00000 n
+0000873317 00000 n
+0000873502 00000 n
+0000873685 00000 n
+0000873870 00000 n
+0000874053 00000 n
+0000874238 00000 n
+0000874420 00000 n
+0000874598 00000 n
+0000874767 00000 n
+0000874936 00000 n
+0000875107 00000 n
+0000875277 00000 n
+0000875448 00000 n
+0000875618 00000 n
+0000875789 00000 n
+0000875963 00000 n
+0000876140 00000 n
+0000876315 00000 n
+0000876492 00000 n
+0000876666 00000 n
+0000876840 00000 n
+0000877017 00000 n
+0000877202 00000 n
+0000877394 00000 n
+0000877589 00000 n
+0000877781 00000 n
+0000877973 00000 n
+0000878161 00000 n
+0000878368 00000 n
+0000878603 00000 n
+0000878838 00000 n
+0000879070 00000 n
+0000879302 00000 n
+0000879537 00000 n
+0000879763 00000 n
+0000879990 00000 n
+0000880257 00000 n
+0000880532 00000 n
+0000880808 00000 n
+0000881083 00000 n
+0000881358 00000 n
+0000881630 00000 n
+0000881905 00000 n
+0000882178 00000 n
+0000882453 00000 n
+0000882721 00000 n
+0000882898 00000 n
+0000883016 00000 n
+0000883134 00000 n
+0000883251 00000 n
+0000883367 00000 n
+0000883483 00000 n
+0000883601 00000 n
+0000883718 00000 n
+0000883834 00000 n
+0000883949 00000 n
+0000884067 00000 n
+0000884194 00000 n
+0000884332 00000 n
+0000884474 00000 n
+0000884579 00000 n
+0000884698 00000 n
+0000884829 00000 n
+0000884934 00000 n
+0000885037 00000 n
+0000885077 00000 n
+0000885209 00000 n
+trailer
+<< /Size 2835
+/Root 2833 0 R
+/Info 2834 0 R
+/ID [<5CCE3697B5FF19232236427B98CBDB47> <5CCE3697B5FF19232236427B98CBDB47>] >>
+startxref
+885529
+%%EOF
diff --git a/obsolete/macros/latex/contrib/revtex4-1/source/latex/revtex/aip.dtx b/obsolete/macros/latex/contrib/revtex4-1/source/latex/revtex/aip.dtx
new file mode 100644
index 0000000000..13c711fc82
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/source/latex/revtex/aip.dtx
@@ -0,0 +1,2062 @@
+% \iffalse meta-comment
+% aip.dtx: package to change page grid, MVL.
+% Copyright (c) 2008 American Institute of Physics
+% mailto:tex@aip.org
+%
+% Disclaimer
+% This file is distributed WITHOUT ANY WARRANTY;
+% without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+% License
+% You may distribute this file under the conditions of the
+% LaTeX Project Public License 1.3 or later
+% (http://www.latex-project.org/lppl.txt).
+% ReadMe
+% For the documentation and more detailed instructions for
+% installation, typeset this document with \LaTeX.
+% Maintenance Status
+% This work has the LPPL maintenance status "maintained";
+% Current Maintainer of this work is Arthur Ogawa.
+%
+% This work consists of the main source file aip.dtx
+% and the derived files
+% aip.rtx, aip.pdf, aip.ins, aip.drv.
+% Distribution:
+% CTAN:macros/latex/contrib/aip/
+%
+% Unpacking:
+% tex aip.dtx
+%
+% Documentation:
+% latex aip.dtx; ...
+%
+% Programm calls to get the documentation (example):
+% pdflatex aip.dtx
+% makeindex -s gind.ist aip
+% makeindex -s gglo.ist -o aip.gls aip.glo
+% pdflatex aip.dtx
+% makeindex -s gind.ist aip
+% pdflatex aip.dtx
+%
+% Installation:
+% TDS:bibtex/bst/aip/
+% TDS:doc/latex/aip/
+% TDS:source/latex/aip/
+% TDS:tex/latex/aip/
+%
+% Thanks, Heiko!
+% This method of letting a single .dtx file serve as both
+% documentation (via latex) and installer (via tex) follows
+% the example of Heiko Oberdiek. Thanks!
+%<*ignore>
+\begingroup
+ \def\x{LaTeX2e}%
+\expandafter\endgroup
+\ifcase
+ 0\expandafter\ifx\csname processbatchFile\endcsname\relax\else1\fi\ifx\fmtname\x\else 1\fi
+ \relax
+\else
+ \csname fi\endcsname
+%</ignore>
+%<*install>
+%% This file will generate documentation and runtime files
+%% from aip.dtx when run through LaTeX or TeX.
+%% This file requires docstrip version 2.4 or higher available from
+%% ftp://ctan.tug.org/tex-archive/macros/latex/unpacked/docstrip.tex
+\input docstrip
+\preamble
+
+This is a generated file;
+altering it directly is inadvisable;
+instead, modify the original source file.
+See the URL in the file README.
+
+Copyright (c) 2008 American Institute of Physics.
+mailto:tex@aip.org
+
+Maintained by Arthur Ogawa (mailto:arthur_ogawa at sbcglobal.net)
+under contract to American Institute of Physics.
+
+License
+ You may distribute this file under the conditions of the
+ LaTeX Project Public License 1.3 or later
+ (http://www.latex-project.org/lppl.txt).
+
+ This file is distributed WITHOUT ANY WARRANTY;
+ without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE.
+
+\endpreamble
+\askforoverwritefalse
+\keepsilent
+ \generate{%
+ %{ignore}
+% \file{aip.ins}{\from{aip.dtx}{install}}%
+% \file{aip.drv}{\from{aip.dtx}{driver}}%
+% \usedir{tex/latex/aip}%
+ \file{aip4-1.rtx}{\from{aip.dtx}{package}}%
+ }%
+\ifToplevel{
+\Msg{***********************************************************}
+\Msg{*}
+\Msg{* To finish the installation, please move}
+\Msg{* aip.rtx}
+\Msg{* into a directory searched by TeX;}
+\Msg{* in a TDS-compliant installation:}
+\Msg{* texmf/tex/macros/latex/aip/.}
+\Msg{*}
+\Msg{* To produce the documentation,
+ run aip.dtx through LaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing}
+\Msg{***********************************************************}
+}
+\endbatchfile
+%</install>
+%<*ignore>
+\fi
+%</ignore>
+% \fi
+%
+% \GetFileInfo{aip.dtx}\CheckSum{1163}
+%
+% \iffalse ltxdoc klootch
+%<*package>
+%%% @LaTeX-file{
+%%% filename = "aip.dtx",
+%%% version = "4.1r",
+%%% date = "2010/07/25",
+%%% time = "20:32:00 GMT-8",
+%%% checksum = "1163",
+%%% author = "Arthur Ogawa (mailto:arthur_ogawa at sbcglobal.net),
+%%% commissioned by the American Institute of Physics.
+%%% ",
+%%% copyright = "Copyright (C) 2008 American Institute of Physics,
+%%% distributed under the terms of the
+%%% LaTeX Project Public License, see
+%%% ftp://ctan.tug.org/macros/latex/base/lppl.txt
+%%% ",
+%%% address = "AIP Journal Program
+%%% American Institute of Physics,
+%%% Suite 1NO1, 2 Huntington Quadrangle,
+%%% Melville, NY 11747 USA",
+%%% telephone = "",
+%%% FAX = "",
+%%% email = "mailto colon tex at aip.org",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "latex, page grid, main vertical list",
+%%% supported = "yes",
+%%% abstract = "aip substyle for REVTeX",
+%%% docstring = "The checksum field above generated by ltxdoc",
+%%% }
+%</package>
+% \fi
+%
+% \iffalse ltxdoc klootch
+% The following references the \file{README} file,
+% which contains basic information about this package.
+% The contents of this file are generated when
+% you typeset the programmer's documentation.
+% Search on "{filecontents*}{README}" to locate it.
+% \fi\input{README}%
+%
+% \subsection{Bill of Materials}
+%
+% Following is a list of the files in this distribution arranged
+% according to provenance.
+%
+% \subsubsection{Primary Source}%
+% One single file generates all.
+%\begin{verbatim}
+%aip.dtx
+%\end{verbatim}
+%
+% \subsubsection{Generated by \texttt{latex aip.dtx}}%
+% Typesetting the source file under \LaTeX\
+% generates the readme and the installer.
+%\begin{verbatim}
+%README aip.ins
+%\end{verbatim}
+%
+% \subsubsection{Generated by \texttt{tex aip.dtx}}%
+% Typesetting the installer generates
+% the package files.
+%\begin{verbatim}
+%aip.rtx
+%\end{verbatim}
+%
+% \subsubsection{Documentation}%
+% The following are the online documentation:
+% \begin{verbatim}
+%aip.pdf
+% \end{verbatim}
+%
+% \subsubsection{Auxiliary}%
+% The following are auxiliary files generated
+% in the course of running \LaTeX:
+% \begin{verbatim}
+%aip.aux aip.idx aip.ind aip.log aip.toc
+% \end{verbatim}
+%
+% \section{Code common to all modules}%
+%
+% The following may look a bit klootchy, but we
+% want to require only one place in this file
+% where the version number is stated,
+% and we also want to ensure that the version
+% number is embedded into every generated file.
+%
+% Now we declare that
+% these files can only be used with \LaTeXe.
+% An appropriate message is displayed if
+% a different \TeX{} format is used.
+% \begin{macrocode}
+%<*driver|package>
+\NeedsTeXFormat{LaTeX2e}[1996/12/01]%
+%</driver|package>
+% \end{macrocode}
+% As desired, the following modules all
+% take common version information:
+% \begin{macrocode}
+%<package>\ProvidesFile{aip4-1.rtx}%
+%<*driver>
+\expandafter\ProvidesFile\expandafter{\jobname.dtx}%
+%</driver>
+% \end{macrocode}
+%
+% The following line contains, for once and for all,
+% the version and date information.
+% By various means, this information is reproduced
+% consistently in all generated files and in the
+% typeset documentation.
+% \begin{macrocode}
+%<*driver|package>
+%<version>
+ [2010/07/25 4.1r AIP substyle for REVTeX]% \fileversion
+%</driver|package>
+% \end{macrocode}
+%
+%
+% \section{The driver module \texttt{driver}}
+%
+% This module, consisting of the present section,
+% typesets the programmer's documentation,
+% generating the \file{.ins} installer and \file{README} as required.
+%
+% Because the only uncommented-out lines of code at the beginning of
+% this file constitute the \file{driver} module itself,
+% we can simply typeset the \file{.dtx} file directly,
+% and there is thus rarely any need to
+% generate the ``driver'' {\sc docstrip} module.
+% Module delimiters are nonetheless required so that
+% this code does not find its way into the other modules.
+%
+% The \enve{document} command concludes the typesetting run.
+%
+% \begin{macrocode}
+%<*driver>
+% \end{macrocode}
+%
+% \subsection{The Preamble}
+% The programmers documentation is formatted
+% with the \classname{ltxdoc} class with local customizations,
+% and with the usual code line indexing.
+% \begin{macrocode}
+\documentclass{ltxdoc}
+\RequirePackage{ltxdocext}%
+\let\url\undefined
+\RequirePackage[colorlinks=true,linkcolor=blue]{hyperref}%
+\expandafter\ifx\csname package@font\endcsname\relax\else
+ \expandafter\expandafter
+ \expandafter\RequirePackage
+ \expandafter\expandafter
+ \expandafter{\csname package@font\endcsname}%
+\fi
+\gdef\lquote{`}\gdef\rquote{'}%
+\CodelineIndex\EnableCrossrefs % makeindex -s gind.ist aip
+\RecordChanges % makeindex -s gglo.ist -o aip.gls aip.glo
+% \end{macrocode}
+%
+% \subsubsection{Docstrip and info directives}
+% We use so many {\sc docstrip} modules that we set the
+% \texttt{StandardModuleDepth} counter to 1.
+% \begin{macrocode}
+\setcounter{StandardModuleDepth}{1}
+% \end{macrocode}
+% The following command retrieves the date and version information
+% from this file.
+% \begin{macrocode}
+\expandafter\GetFileInfo\expandafter{\jobname.dtx}%
+% \end{macrocode}
+%
+% \subsection{The ``Read Me'' File}
+% As promised above, here is the contents of the
+% ``Read Me'' file. That file serves a double purpose,
+% since it also constitutes the beginining of the
+% programmer's documentation. What better thing, after
+% all, to have appear at the beginning of the
+% typeset documentation?
+%
+% A good discussion of how to write a ReadMe file can be found in
+% Engst, Tonya, ``Writing a ReadMe File? Read This''
+% \emph{MacTech} October 1998, p. 58.
+%
+% Note the appearance of the
+% \cmd\StopEventually\ command, which marks the
+% dividing line between the user documentation
+% and the programmer documentation.
+%
+% The usual user will not be asked to
+% do a full build, not to speak
+% of the bootstrap.
+% Instructions for carrying these processes
+% begin the programmer's manual.
+%
+%\changes{4.1b}{2008/08/06}{Beta candidate b}
+% \begin{macrocode}
+\begin{filecontents*}{README}
+\title{%
+ The \classname{aip} substyle for REV\TeX%
+ \protect\thanks{%
+ \fileversion\ \copyright 2009 American Institute of Physics
+ % For version number and date,
+ % search on "\fileversion" in the .dtx file,
+ % or see the end of the README file.
+ }%
+}%
+
+\author{%
+Arthur Ogawa\thanks{mailto:arthur\_ogawa at sbcglobal.net}%
+}%
+\date{Version \fileversion, dated \filedate}%
+\maketitle
+
+This file embodies the implementation of the
+AIP journal substyles for APS's \revtex\ 4.1 document class
+for electronic submissions to AIP journals.
+
+The distribution point for this work is
+\url{http://authors.aip.org/REVTEX}.
+The archive contains ready-to-Install files, documentation, and full source.
+
+This package is also distributed via CTAN:
+\url{http://www.ctan.org/pub/tex-archive/macros/latex/contrib/aip}, and as a ready-to-install image as
+\url{http://www.ctan.org/pub/tex-archive/install/macros/latex/contrib/aip.tds.zip}.
+
+The \classname{aip} package was commissioned by the American Institute of Physics
+and is distributed under the terms of the \LaTeX\ Project Public License,
+the same license under which all the portions of \LaTeX\ itself is distributed.
+Please see \url{http://ctan.tug.org/macros/latex/base/lppl.txt} for details.
+
+To use this document class, you must have a working
+\TeX\ installation equipped with \LaTeXe\
+and possibly pdftex and Adobe Acrobat Reader or equivalent.
+
+To install, retrieve the distribution,
+unpack it into a directory on the target computer,
+and move the file \file{aip.rtx}
+into a location in your filesystem where it will be found by \LaTeX.
+
+To use, read the user documentation \file{auguide.pdf}.
+
+\tableofcontents
+
+\section{Overview}%
+\revtex\ is a \LaTeXe\ document class, somewhat like a hybrid of
+the standard \LaTeX\ \classname{book} and \classname{article} classes.
+
+This document class implements the AIP society and journal substyles:
+the journals represent a set of mutually exclusive class options that, in this case, allow the
+document class to address multiple journals within the AIP family.
+This society is obtained with class option \classoption{aip}.
+
+\section{Processing Instructions}
+
+The package file \file{aip.rtx}
+is generated from this file, \file{aip.dtx},
+using the {\sc docstrip} facility of \LaTeX
+via |tex aip.dtx|.
+The typeset documentation that you are now reading is generated from
+the same file by typesetting it with \LaTeX\ or pdftex
+via |latex aip.dtx| or |pdflatex aip.dtx|.
+
+\subsection{Build Instructions}
+
+You may bootstrap this suite of files solely from \file{aip.dtx}.
+Prepare by installing \LaTeXe\ (and either tex or pdftex) on your computer,
+then carry out the following steps:
+\begin{enumerate}
+\item
+Within an otherwise empty directory,
+typeset \file{aip.dtx} with \LaTeX\ or pdflatex;
+you will obtain the typeset documentation you are now reading,
+along with
+the installer \file{aip.ins},
+and the file \file{README}.
+
+Note: you will have to run \LaTeX\ twice, then \file{makeindex}, then
+\LaTeX\ again in order to obtain a valid index and table of contents.
+\item
+Now typeset \file{aip.dtx} with \TeX (not \LaTeX),
+thereby generating the package file \file{aip.rtx}.
+\item
+Install \classname{aip.rtx}
+by moving it to a location
+in your filesystem where it will be found by \LaTeX,
+like \file{tex/latex/aip}.
+\item
+Install \classname{aip.pdf}
+by moving it to
+\file{doc/latex/aip}.
+\item
+Using the \file{.dbj} information herein,
+generate the needed \file{.bst} files and install them in
+\file{bibtex/bst/aip}.
+\end{enumerate}
+\end{filecontents*}
+% \end{macrocode}
+%
+% \subsection{The Document Body}
+%
+% Here is the document body, containing only a
+% \cmd\DocInput\ directive---referring to this very file.
+% This very cute self-reference is a common \classname{ltxdoc} idiom.
+% \begin{macrocode}
+\begin{document}%
+\newcommand\revtex{REV\TeX}%
+\expandafter\DocInput\expandafter{\jobname.dtx}%
+% ^^A\PrintChanges
+\end{document}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</driver>
+% \end{macrocode}
+%
+% \section{AIP: A set of journal-specifc extensions to \revtex}
+%
+% To create a journal substyle, you create
+% a \file{.rtx} file, in our case \file{aip.rtx}.
+% Within that file, you override procedures and parameter assignments as you see fit.
+% Ideally they will be generally applicable to all of that society's
+% journals (see the file \file{aps.rtx} for a realization of this scheme).
+% Also within that file, you include a
+% section of code for each journal, that for JMP looks like:
+% \begin{verbatim}
+% \@ifx{\@journal\journal@jmp}{%
+% <code specific to the JMP>
+% }{}%
+% \end{verbatim}
+%
+% \section{The \classoption{aip} class option: the \texttt{aip} module}
+% The file \file{aip.rtx} is read in by the \classname{revtex4} document class
+% if \cmd\@society\ has the value \classoption{aip}.
+%
+% Here, code specific to AIP journals appears.
+%
+% We first give some text entities (amounting to journal abbreviations),
+% then some AIP-specific initialisations,
+% then code for particular AIP journals.
+% In the latter case, the choice is
+% keyed off the macro \cmd\@journal.
+%
+% Note on \cmd\AtEndOfClass:
+% this file, like all journal substyles, is read in at \cmd\AtEndOfClass\ time,
+% so you should not use this command in this file.
+% Note for \LaTeX\ developers: It would be an improvement in \LaTeX\ to
+% \cmd\let\cmd\AtEndOfClass\ to something like \cmd\@firstofone.
+% This change would be effected in \cmd\@onefilewithoptions.
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \subsection{Defend Against Forseeable Errors}%
+% Protect this file from being read in by anything but \revtex.
+% \begin{macrocode}
+\ifx\undefined\substyle@ext
+ \def\@tempa{%
+ \endinput
+ \GenericWarning{I must be read in by REVTeX! (Bailing out)}%
+ }%
+ \expandafter\else
+ \def\@tempa{}%
+ \expandafter\fi\@tempa
+ \class@info{RevTeX society AIP selected}%
+% \end{macrocode}
+%
+% \subsection{Substyle Options}%
+%
+% Here are the class options relating to the AIP:
+% \begin{macrocode}
+\DeclareOption{jcp}{\change@journal{jcp}}%
+\DeclareOption{pop}{\change@journal{pop}}%
+\DeclareOption{rsi}{\change@journal{rsi}}%
+\DeclareOption{jap}{\change@journal{jap}}%
+\DeclareOption{apl}{\change@journal{apl}}%
+\DeclareOption{cha}{\change@journal{cha}}%
+\DeclareOption{pof}{\change@journal{pof}}%
+\DeclareOption{bmf}{\change@journal{bmf}}%
+\DeclareOption{rse}{\change@journal{rse}}%
+\DeclareOption{jmp}{\change@journal{jmp}}%
+% \end{macrocode}
+%
+% Option allowing for ``numerical author-year'' bibliography.
+% \begin{macrocode}
+\DeclareOption{author-numerical}{%
+ \@booleantrue\authoryear@sw
+ \@booleantrue\authornum@sw
+}%
+% \end{macrocode}
+%
+% Optionally allow article title in bibliography entries.
+% A new switch is defined here: \cmd\aip@jtitx@sw\ signifies that
+% the numbered style bibliography is to be prepared without article titles in @ARTICLE entries.
+% Otherwise, such titles are incorporated if present in the \file{.bib} entry.
+% By default, exclude the article titles.
+% \begin{macrocode}
+\DeclareOption{article-title}{%
+ \@booleanfalse\aip@jtitx@sw
+}%
+\@booleantrue \aip@jtitx@sw
+% \end{macrocode}
+%
+% Establish default options for this society.
+%
+% \begin{macrocode}
+\@booleanfalse\authoryear@sw
+\@booleanfalse\authornum@sw
+% \end{macrocode}
+%
+% \begin{macro}{\@bibdataout@init}
+% \begin{macro}{\@bibdataout@aip}
+% \changes{4.1o}{2010/02/12}{(AO, 580) Control .bst at run time.}%
+% Procedure \cmd\@bibdataout@aip\ has the job of writing the control record into the
+% job's \cmd\jobname\filename{.bib} file, where it will adjust the options to \filename{.bst} processing.
+% It is installed into the initialization procedure \cmd\@bibdataout@init, and its meaning
+% is set by the society (AIP) and journal.
+%
+% \begin{macrocode}
+\appdef\@bibdataout@rev{\@bibdataout@aip}%
+\def\@bibdataout@aip{%
+ \immediate\write\@bibdataout{%
+% \end{macrocode}
+% An entry that controls processing of the \filename{.bst} file has entry type \texttt{@CONTROL}.
+% \begin{macrocode}
+ @CONTROL{%
+ aip41Control%
+% \end{macrocode}
+% Say whether we want long bibliography style (the default), or the abbreviated style.
+% \begin{macrocode}
+ \longbibliography@sw{\true@sw}{\aip@jtitx@sw{\false@sw}{\true@sw}}%
+ {%
+ ,pages="1",title="0"%
+ }{%
+ ,pages="0",title=""%
+ }%
+ }%
+ }%
+% \end{macrocode}
+% Place a \cmd\citation\ into the auxiliary file corresponding to this entry.
+% \begin{macrocode}
+ \if@filesw
+ \immediate\write\@auxout{\string\citation{aip41Control}}%
+ \fi
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% For AIP, the preprint style \classoption{preprint} is the default.
+% \begin{macrocode}
+\@booleantrue\preprintsty@sw
+% \end{macrocode}
+%
+% \begin{macro}{\showPACS@sw}
+% \begin{macro}{\showKEYS@sw}
+% If \cmd\showPACS@sw\ is true, print the PACS information in the title block,
+% otherwise not.
+% Similarly for \cmd\showKEYS@sw\ and the keywords.
+% \begin{macrocode}
+\@booleantrue\showPACS@sw
+\@booleantrue\showKEYS@sw
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\refname}
+%
+% In reprint style only, we eliminate the head above the bibliography.
+% \begin{macrocode}
+\appdef\setup@hook{%
+ \preprintsty@sw{}{%
+ \let\refname\@empty
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{AIP Setup}%
+% Here we define the default procedures for AIP journals.
+% Individual AIP journals may override these definitions.
+%
+% \subsubsection{Running header and footer}%
+%
+% Page style for all AIP journals.
+% We assert our own page style only if nobody else has done so.
+% Users wishing to customize their documents will be able to invoke a \cmd\pagestyle\
+% command anywhere in the preamble.
+%FIXME: \cmd\preprintsty@sw\ is defined?
+% \begin{macrocode}
+\appdef\setup@hook{%
+ \preprintsty@sw{%
+ \ps@preprint
+ }{%
+ \ps@article
+ }%
+}%
+% \end{macrocode}
+%
+% The spc says: ``Running title must be provided on title page'',
+% and that journal classes 1b and 2 have no running title.
+% \begin{macrocode}
+\def\ps@preprint{%
+ \def\@oddhead{\@runningtitle\hfil}%
+ \def\@evenhead{\@runningtitle\hfil}%
+ \def\@oddfoot{\hfil\thepage\quad\checkindate\hfil}%
+ \def\@evenfoot{\hfil\thepage\quad\checkindate\hfil}%
+ \let\@mkboth\@gobbletwo
+ \let\sectionmark\@gobble
+ \let\subsectionmark\@gobble
+}%
+\def\ps@article{%
+ \def\@evenhead{\let\\\heading@cr\thepage\quad\checkindate\hfil\@runningtitle}%
+ \def\@oddhead{\let\\\heading@cr\@runningtitle\hfil\checkindate\quad\thepage}%
+ \def\@oddfoot{}%
+ \def\@evenfoot{}%
+ \let\@mkboth\@gobbletwo
+ \let\sectionmark\@gobble
+ \let\subsectionmark\@gobble
+}%
+\def\@runningtitle{\@shorttitle}%
+% \end{macrocode}
+%
+% \subsubsection{Title block}%
+%
+% The specifics of the title block.
+% Apply to all AIP journals; individual journals may override these settings.
+%
+% \begin{macro}{\titlepage}
+% \begin{macrocode}
+\renewenvironment{titlepage}{%
+ \let\wastwocol@sw\twocolumn@sw
+ \onecolumngrid
+ \newpage
+ \thispagestyle{titlepage}%
+ \c@page\z@% article sets this to one not zero???
+}{%
+ \wastwocol@sw{\twocolumngrid}{\newpage}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@fnsymbol}
+% On the title page, footnotes are lettered with right parenthesis: ``a)''.
+% \begin{macrocode}
+\let\@fnsymbol@latex\@fnsymbol
+\let\@fnsymbol\@alph
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\adjust@abstractwidth}
+% This procedure is used by many titlepage elements to indent on the left by a particular
+% amount. The author list uses \cmd\frontmatter@authorformat\ to accomplish the same.
+% \begin{macrocode}
+\def\adjust@abstractwidth{%
+ \parindent1em\relax
+ \advance\leftskip.5in\relax
+ \@totalleftmargin\leftskip
+ \@afterheading\@afterindentfalse
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@abstractheading}
+% AIP Journals all set the abstract head the same way, with no head.
+% \begin{macrocode}
+\def\frontmatter@abstractheading{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@abstractfont}
+% All AIP journals set the abstract body the same way.
+% \begin{macrocode}
+\def\frontmatter@abstractfont{%
+%\small
+ \adjust@abstractwidth
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% All AIP journal preprints use separate titlepage and full-width abstract.
+% \begin{macrocode}
+\appdef\setup@hook{%
+ \preprintsty@sw{%
+ \@booleantrue\titlepage@sw
+% \def\frontmatter@affiliationfont{\it}%
+ \let\section\section@preprintsty
+% \let\@hangfrom@section\@hangfrom@section@preprintsty
+ \let\subsection\subsection@preprintsty
+ \let\subsubsection\subsubsection@preprintsty
+ }{}%
+}%
+% \end{macrocode}
+%
+% \begin{macro}{\frontmatter@authorformat}
+% All AIP journals set the author list the same.
+% The leading is 11.5 points, and
+% there is 11.5 points of extra space above the first author line
+% (which amounts to the same thing as 11.5 points extra below the title)
+% for a total of 23 points base-to-base.
+%
+% \begin{macrocode}
+\def\frontmatter@@indent{%
+ \skip@\@flushglue
+ \@flushglue\z@ plus.3\hsize\relax
+ \raggedright
+ \advance\leftskip.5in\relax
+ \@totalleftmargin\leftskip
+ \@flushglue\skip@
+}%
+\def\frontmatter@authorformat{%
+ \frontmatter@@indent
+ \sffamily
+%\advance\baselineskip\p@
+%\parskip11.5\p@\relax
+}%
+\renewcommand*\email[1][Electronic mail: ]{\begingroup\sanitize@url\@email{#1}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@above@affilgroup}
+% The default amount of space above affiliation.
+% \begin{macrocode}
+\def\frontmatter@above@affilgroup{%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@above@affiliation}
+% \begin{macro}{\frontmatter@above@affiliation@script}
+% The default amount of space above affiliation.
+% \begin{macrocode}
+\def\frontmatter@above@affiliation@script{%
+ \frontmatter@@indent
+%\addvspace{3.5\p@}%
+}%
+\def\frontmatter@above@affiliation{%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@affiliationfont}
+% All AIP journals set the affiliation the same.
+% Like the author, but in italic.
+% \begin{macrocode}
+\def\frontmatter@affiliationfont{%
+ \frontmatter@@indent
+ \preprintsty@sw{}{\small}%
+ \it
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@collaboration@above}
+% \begin{macrocode}
+\def\frontmatter@collaboration@above{%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% Set up the default AIP style for title block authors and affiliations.
+%
+% \begin{macro}{\frontmatter@setup}
+% All AIP journals set the title page using the same font and size.
+% However, justification varies for the title block elements, so
+% we assert none here.
+% \begin{macrocode}
+\def\frontmatter@setup{%
+ \normalfont
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@title@above}
+% \begin{macro}{\frontmatter@title@format}
+% \begin{macro}{\frontmatter@title@below}
+% All AIP journals set the article title 12 point Times Roman, bold, flush left.
+%
+% \begin{macrocode}
+\def\frontmatter@title@above{\addvspace{6\p@}}%
+\def\frontmatter@title@format{%
+ \preprintsty@sw{}{\Large}%
+ \sffamily
+ \bfseries
+ \raggedright
+ \parskip\z@skip
+}%
+\def\frontmatter@title@below{\addvspace{3\p@}}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@makefnmark}
+% All AIP journals share this procedure for setting the titlepage footnote text:
+% superior lowercase letter, with right parenthesis.
+% \begin{macrocode}
+\def\@author@parskip{3\p@}%
+\@booleantrue\altaffilletter@sw
+\def\frontmatter@makefnmark{%
+ \@textsuperscript{%
+ \normalfont\@thefnmark%(
+ )%
+ }%
+}%
+\def\frontmatter@authorbelow{%
+ \addvspace{3\p@}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\affil@cutoff}
+% We override \cmd\affil@cutoff\ to enforce the rule that,
+% if a single affiliation appears on the title page, then
+% no affiliation superscript at all is produced.
+% \begin{macrocode}
+\let\affil@cutoff\tw@
+% \end{macrocode}
+% De awa.
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@RRAP@format}
+% All AIP journals use the same format for the ``Received, Revised, etc.'' block on the title page.
+%
+% Change note: 11.5 points b-b from author/affiliation down to date.
+% \begin{macrocode}
+\def\frontmatter@RRAP@format{%
+ \addvspace{5\p@}%
+ \small
+ \raggedright
+ \advance\leftskip.5in\relax
+ \@totalleftmargin\leftskip
+% \preprintsty@sw{}{\parskip.5ex\relax}%
+ \everypar{%
+ \hbox\bgroup(\@gobble@leavemode@uppercase%)
+ }%
+ \def\par{%
+ \@ifvmode{}{%(
+ \unskip)\egroup\@@par
+ }%
+ }%
+}%
+\def\punct@RRAP{;\egroup\ \hbox\bgroup}%
+\def\@gobble@leavemode@uppercase#1#2{\expandafter\MakeTextUppercase}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@PACS@format}
+%
+% \begin{macrocode}
+\def\frontmatter@PACS@format{%
+ \addvspace{11\p@}%
+% \footnotesize
+ \adjust@abstractwidth
+ \parskip\z@skip
+ \samepage
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@keys@format}
+%
+% \begin{macrocode}
+\def\frontmatter@keys@format{%
+% \footnotesize
+ \adjust@abstractwidth
+ \samepage
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ps@titlepage}
+% Title page style. Currently empty except for preprint header,
+% which consists of all the \cmd\preprint\ arguments,
+% stacked flush right at the right margin.
+% \begin{macrocode}
+\def\ps@titlepage{%
+ \def\@oddhead{%
+ \@runningtitle
+ \hfill
+ \produce@preprints\@preprint
+ }%
+ \let\@evenhead\@oddhead
+ \def\@oddfoot{%
+ \hb@xt@\z@{\byrevtex\hss}%
+ \hfil
+ \preprintsty@sw{\thepage}{}%
+ \quad\checkindate
+ \hfil
+ }%
+ \let\@evenfoot\@oddfoot
+}%
+\def\byrevtex{\byrevtex@sw{Typeset by REV\TeX and AIP}{}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\produce@preprints}
+% \begin{macrocode}
+\def\produce@preprints#1{%
+ \preprint@sw{%
+ \vtop to \z@{%
+ \def\baselinestretch{1}%
+ \small
+ \let\preprint\preprint@count
+ \count@\z@#1\@ifnum{\count@>\tw@}{%
+ \hbox{%
+ \let\preprint\preprint@hlist
+ #1\setbox\z@\lastbox
+ }%
+ }{%
+ \let\preprint\preprint@cr
+ \halign{\hfil##\cr#1\crcr}%
+ \par
+ \vss
+ }%
+ }%
+ }{}%
+}%
+\def\preprint@cr#1{#1\cr}%
+\def\preprint@count#1{\advance\count@\@ne}%
+\def\preprint@hlist#1{#1\hbox{, }}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Lead-in paragraph}%
+%
+% The \env{Lead-in paragraph} environment formats the AIP ``lead paragraph''.
+% To avoid introducing new syntax, we take over the \env{quotation} environment
+% until the first \cmd\section\ (or other sectioning command) appears.
+%
+% \begin{macrocode}
+\newenvironment{Lead@inParagraph}{%
+ \par
+ \bfseries
+ \@afterheading\@afterindentfalse
+}{%
+ \par
+ \hb@xt@\hsize{\hfil\leaders\hrule\hfil\leaders\hrule\hfil\hfil}%
+}%
+% \end{macrocode}
+% At the beginning of the document temporarily change the meaning of
+% the \env{quotation} environment, restoring it once the first sectioning
+% command is given.
+% \begin{macrocode}
+\appdef\frontmatter@init{%
+ \let@environment{quotation@ltx}{quotation}%
+ \let@environment{quotation}{Lead@inParagraph}%
+}%
+\appdef\@startsection@hook{%
+ \let@environment{quotation}{quotation@ltx}%
+}%
+% \end{macrocode}
+%
+% \subsubsection{Stacked Heads}%
+% All AIP journals put a period (.), followed by quad space, after the section number.
+% Also, no hanging section number.
+% \begin{macrocode}
+\def\@seccntformat#1{\csname the#1\endcsname.\quad}%
+\def\@hang@from#1#2#3{#1#2#3}%
+% \end{macrocode}
+%
+% Note that in the following, we wish to set the section head uppercase, so we use
+% David Carlisle's \cmd\MakeTextUppercase. However, because this procedure effectively
+% parses its argument (looking for things to \emph{not} translate), it has to be invoked
+% in such a way that the argument of the \cmd\section\ command is passed to it as its
+% own argument.
+%
+% To accomplish this, we use the \cmd\@hangfrom@\ hook, which was developed for this
+% purpose.
+%
+% \begin{macrocode}
+\def\section{%
+ \@startsection
+ {section}%
+ {1}%
+ {\z@}%
+ {0.8cm \@plus1ex \@minus .2ex}%
+ {0.5cm}%
+ {%
+ \normalfont
+ \small
+ \sffamily
+ \bfseries
+ \raggedright
+ }%
+}%
+\def\@hangfrom@section#1#2#3{\@hangfrom{#1#2}\MakeTextUppercase{#3}}%
+\def\@hangfroms@section#1#2{#1\MakeTextUppercase{#2}}%
+% \end{macrocode}
+%
+% See, e.g., BMF\_044101\_1 (1) or BMF\_044103\_1 (1)
+% \begin{macrocode}
+\def\subsection{%
+ \@startsection
+ {subsection}%
+ {2}%
+ {\z@}%
+ {.8cm \@plus1ex \@minus .2ex}%
+ {.5cm}%
+ {%
+ \normalfont
+ \small
+ \sffamily
+ \bfseries
+ \raggedright
+ }%
+}%
+% \end{macrocode}
+%
+% See, e.g., BMF\_044104\_1 (1), JMP\_123520\_1 (48),
+% \begin{macrocode}
+\def\subsubsection{%
+ \@startsection
+ {subsubsection}%
+ {3}%
+ {\z@}%
+ {.8cm \@plus1ex \@minus .2ex}%
+ {.5cm}%
+ {%
+ \normalfont
+ \small
+ \sffamily
+ \bfseries
+ \itshape
+ \raggedright
+ }%
+}%
+% \end{macrocode}
+%
+% \subsubsection{Runin Heads}%
+% \begin{macrocode}
+\def\paragraph{%
+ \@startsection
+ {paragraph}%
+ {4}%
+ {\parindent}%
+ {\z@}%
+ {-1em}%
+ {\normalfont\normalsize\itshape}%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\subparagraph{%
+ \@startsection
+ {subparagraph}%
+ {5}%
+ {\parindent}%
+ {3.25ex \@plus1ex \@minus .2ex}%
+ {-1em}%
+ {\normalfont\normalsize\bfseries}%
+}%
+% \end{macrocode}
+%
+% \begin{macro}{\section@preprintsty}
+% \begin{macro}{\subsection@preprintsty}
+% \begin{macro}{\subsubsection@preprintsty}
+% Here are the formatting procedures specific to the preprint style;
+% the only difference is that the heads are flush left instead of centered.
+%
+% \begin{macrocode}
+\def\section@preprintsty{%
+ \@startsection
+ {section}%
+ {1}%
+ {\z@}%
+ {0.8cm \@plus1ex \@minus .2ex}%
+ {0.5cm}%
+ {%
+ \normalfont
+ \bfseries
+ \raggedright
+ }%
+}%
+%\def\@hangfrom@section@preprintsty#1#2#3{\@hangfrom{#1#2}\MakeTextUppercase{#3}}%
+% \end{macrocode}
+% \begin{macrocode}
+\def\subsection@preprintsty{%
+ \@startsection
+ {subsection}%
+ {2}%
+ {\z@}%
+ {.8cm \@plus1ex \@minus .2ex}%
+ {.5cm}%
+ {%
+ \normalfont
+ \bfseries
+ \raggedright
+ }%
+}%
+% \end{macrocode}
+% \begin{macrocode}
+\def\subsubsection@preprintsty{%
+ \@startsection
+ {subsubsection}%
+ {3}%
+ {\z@}%
+ {.8cm \@plus1ex \@minus .2ex}%
+ {.5cm}%
+ {%
+ \normalfont
+% \small
+ \itshape\bfseries
+ \raggedright
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% For examples of
+% \env{theorem}, \env{proposition}, \env{lemma}, \env{remark}, \env{corollary}, \env{example},
+% and \env{proof} (with optional title),
+% using independent numbering for each class,
+% and with numbered and roman lists therein,
+% see JMP\_122901\_1 (48).
+%
+% For theorems, etc, numbered by section, (and with theorems in the appendix)
+% but equations numbered throughout,
+% see JMP\_123301\_1 (48).
+%
+% For a (roman) list in text, theorem, and proof,
+% see JMP\_123514\_1 (48).
+%
+% For numbered list in text,
+% and equations numbered by section,
+% see JMP\_123518\_1 (48).
+%
+% All AIP journals use frontmatter footnotes by default.
+% \begin{macrocode}
+\let\frontmatter@footnote@produce\frontmatter@footnote@produce@footnote
+% \end{macrocode}
+%
+%
+% \subsubsection{Table of Contents}%
+% The toc will itself make an entry in the toc,
+% but we temporarily turn off toc formatting for the duration.
+% \begin{macrocode}
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{2}
+\def\ltxu@dotsep{4.5pt}
+\setcounter{tocdepth}{3}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\tableofcontents{%
+ \addtocontents{toc}{\string\tocdepth@munge}%
+ \print@toc{toc}%
+ \addtocontents{toc}{\string\tocdepth@restore}%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\tocdepth@munge{%
+ \let\l@section@saved\l@section
+ \let\l@section\@gobble@tw@
+}%
+\def\@gobble@tw@#1#2{}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\tocdepth@restore{%
+ \let\l@section\l@section@saved
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\l@part#1#2{\addpenalty{\@secpenalty}%
+ \begingroup
+ \set@tocdim@pagenum{#2}%
+% \@tempdima 3em %
+ \parindent \z@
+ \rightskip\tocleft@pagenum plus 1fil\relax
+ \skip@\parfillskip\parfillskip\z@
+ \addvspace{2.25em plus\p@}%
+ \large \bf %
+ \leavevmode\ignorespaces#1\unskip\nobreak\hskip\skip@
+ \hb@xt@\rightskip{\hfil\unhbox\z@}\hskip-\rightskip\hskip\z@skip
+ \par
+ \nobreak %
+ \endgroup
+}%
+% \end{macrocode}
+%
+% \begin{macro}{\l@section}
+% Determine which TOC elements are automatically indented.
+% \begin{macrocode}
+\def\tocleft@{\z@}%
+\def\tocdim@min{5\p@}%
+\def\l@section{%
+ \l@@sections{}{section}% Implicit #3#4
+}%
+\def\l@f@section{%
+ \addpenalty{\@secpenalty}%
+ \addvspace{1.0em plus\p@}%
+ \bf
+}%
+\def\l@subsection{%
+ \l@@sections{section}{subsection}% Implicit #3#4
+}%
+\def\l@subsubsection{%
+ \l@@sections{subsection}{subsubsection}% Implicit #3#4
+}%
+\def\l@paragraph#1#2{}%
+\def\l@subparagraph#1#2{}%
+% \end{macrocode}
+% \end{macro}
+%
+% Activate the auto TOC processing.
+% \begin{macrocode}
+\let\toc@pre\toc@pre@auto
+\let\toc@post\toc@post@auto
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\listoffigures{\print@toc{lof}}%
+\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\listoftables{\print@toc{lot}}%
+\let\l@table\l@figure
+% \end{macrocode}
+%
+% \subsubsection{Default column bottom}%
+% All AIP journal styles have flush bottoms.
+%
+% \begin{macrocode}
+\@booleanfalse\raggedcolumn@sw
+% \end{macrocode}
+%
+%
+% \subsubsection{Table alignment style}%
+%
+% \begin{macro}{\tableft@skip@float}
+% \begin{macro}{\tabmid@skip@float}
+% \begin{macro}{\tabright@skip@float}
+% \begin{macro}{\array@row@pre@float}
+% \begin{macro}{\array@row@pst@float}
+% All AIP publications have the same table specification:
+% Scotch rules above and below, centered in column.
+% \begin{macrocode}
+\def\tableft@skip@float{\z@ plus\hsize}%
+\def\tabmid@skip@float{\@flushglue}%
+\def\tabright@skip@float{\z@ plus\hsize}%
+\def\array@row@pre@float{\hline\hline\noalign{\vskip\doublerulesep}}%
+\def\array@row@pst@float{\noalign{\vskip\doublerulesep}\hline\hline}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{Footnote formatting}%
+% We customize the formatting of footnotes for all AIP journals.
+% \begin{macro}{\@makefntext}
+% \begin{macrocode}
+\def\@makefntext#1{%
+ \def\baselinestretch{1}%
+ \leftskip1em%
+ \parindent1em%
+ \noindent
+ \nobreak\hskip-\leftskip
+ \hb@xt@\leftskip{%
+ \hss\@makefnmark\ %
+ }%
+ #1%
+ \par
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection{Appendix}%
+% \begin{macro}{\appendix}
+% \begin{macro}{\@hangfrom@appendix}
+% \begin{macro}{\@hangfroms@appendix}
+% \begin{macro}{\@appendixcntformat}
+% \begin{macrocode}
+\prepdef\appendix{%
+ \par
+ \let\@hangfrom@section\@hangfrom@appendix
+%\let\@hangfroms@section\@hangfroms@appendix
+ \let\@sectioncntformat\@appendixcntformat
+}%
+\def\@hangfrom@appendix#1#2#3{%
+ #1%
+ \@if@empty{#2}{%
+ #3%
+ }{%
+ #2\@if@empty{#3}{}{:\ #3}%
+ }%
+}%
+\def\@hangfroms@appendix#1#2{%
+ #1#2%
+}%
+\def\@appendixcntformat#1{\appendixname\ \csname the#1\endcsname}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Bibliography}%
+%
+% Customize the \revtex\ for the AIP society.
+% this task requires three components:
+% the \BibTeX\ \file{aipnum.bst} and \file{aipauth.bst} style files,
+% customizing code for \file{natbib}, and
+% customizations of the \env{thebibliography} environment.
+%
+% \begin{macro}{\@bibstyle}
+% Define the argument of the \cmd\bibliographystyle\ command.
+% The user must have installed a \file{.bst} file of the corresponding name.
+% This file will then be used by \BibTeX\ when compiling the document's \file{.bbl} file.
+%
+% The default bibliography style for the AIP journal substyles are \file{aipnum.bst} and \file{aipauth.bst}.
+% To generate them, use \classname{custom-bib} version 4.21 or later.
+% Run the \file{.bst} generator, \file{makebst.tex}, and
+% accept all defaults, with the following exceptions:
+%
+% \begin{enumerate}
+% \item
+% ORDERING OF REFERENCES: c: seq-no (references in order of Citation);
+% \item
+% AUTHOR NAMES: i: nm-init,ed-au (Initials + surname);
+% \item
+% NUMBER OF AUTHORS: l: max 12, min 12 (there will be three prompts total);
+% \item
+% TYPEFACE FOR AUTHORS IN LIST OF REFERENCES: u: nmft,nmft-def (User defined author font);
+% \item
+% FONT FOR FIRST NAMES: u: fnm-def (First names in user defined font);
+% \item
+% EDITOR NAMES IN INCOLLECTION ETC: a: nmfted (Editors incollection like authors);
+% \item
+% DATE FORMAT: p: yr-par (Date in parentheses);
+% \item
+% SUPPRESS MONTH: x: xmth (Date is year only);
+% \item
+% TITLE OF ARTICLE: i: tit-it (Title italic)
+% \item
+% ARTICLE TITLE PRESENT: x: jtit-x (No article title);
+% \item
+% JOURNAL NAME FONT: r: jttl-rm (Journal title normal);
+% \item
+% TECHNICAL REPORT TITLE: b: trtit-b (Tech. report title like books);
+% \item
+% JOURNAL VOLUME: b: vol-bf (Volume bold);
+% \item
+% VOLUME PUNCTUATION: c: volp-com (Volume with comma);
+% \item
+% PAGE NUMBERS: f: jpg-1 (Only start page number);
+% \item
+% JOURNAL NAME PUNCTUATION: x: jnm-x (Space after journal);
+% \item
+% PUBLISHER IN PARENTHESES: d: pub-date (Publisher and date in parentheses);
+% \item
+% PUBLISHER POSITION: p: pre-pub (Publisher before chapter, pages);
+% \item
+% ISBN NUMBER: isbn: (Include ISBN for books, booklets)
+% \item
+% ISSN NUMBER: issn: (Include ISSN for periodicals)
+% \item
+% EDITOR IN COLLECTIONS: b: edby (Booktitle, edited by \dots);
+% \item
+% PUNCTUATION BETWEEN SECTIONS (BLOCKS): c: blk-com (Comma between blocks);
+% \item
+% ABBREVIATE WORD `PAGES': a: pp (`Page' abbreviated);
+% \item
+% ABBREVIATE WORD `EDITORS': a: ed (`Editor' abbreviated);
+% \item
+% OTHER ABBREVIATIONS: a: abr (Abbreviations);
+% \item
+% ABBREVIATION FOR `EDITION': a: ednx (`Edition' abbreviated as `ed');
+% \item
+% EDITION NUMBERS: n: ord (Numerical editions);
+% \item
+% STORED JOURNAL NAMES: a: jabr (Abbreviated journal names);
+% \item
+% FONT OF `ET AL': i: etal-it (Italic et al);
+% \item
+% ADDITIONAL REVTeX DATA FIELDS: r: revdata, eprint, url, url-blk (Include REVTeX data fields collaboration, eid, eprint, numpages, url)
+% \item
+% NEW FONT SELECTION SCHEME: n: nfss (NFSS);
+% \item
+% ADDITIONAL REVTeX DATA FIELDS: y: revdata (additional data fields);
+% \item
+% REFERENCE COMPONENT TAGS: y: reference component tags;
+% \item
+% URL ADDRESS: n: URL as note;
+% \end{enumerate}
+%
+% A file \file{aipnum.dbj} file equivalent to the following should result:
+% \begin{verbatim}
+%\input docstrip
+%\preamble
+%----------------------------------------
+%*** REVTeX-compatible aipnum4-1.bst 2009-10-08 ***
+%\endpreamble
+%\postamble
+%End of customized bst file
+%\endpostamble
+%\keepsilent
+%\askforoverwritefalse
+%\def\MBopts{\from{merlin.mbs}{%
+% head,\MBopta}
+%\from{physjour.mbs}{\MBopta}
+%\from{geojour.mbs}{\MBopta}
+%\from{photjour.mbs}{\MBopta}
+%\from{merlin.mbs}{tail,\MBopta}}
+%\def\MBopta{%
+% lang,%: Use language field to switch hyphenation patterns for title
+% pres,pres-bf,%: Presentation, speaker bold face
+% seq-no,%: Citation order (unsorted, like unsrt.bst)
+% vonx,%: Sort without von part (de la Maire after Mahone)
+% nm-init,ed-au,%: Initials + surname (J. F. Smith)
+% nmft,nmft-def,%: User defined author font (\bibnamefont)
+% fnm-def,%: First names in user defined font (\bibfnamefont)
+% nmfted,%: Editors incollection like authors font
+% nmand-rm,%: `And' in normal font (JONES and JAMES)
+% lab,lab-def,%: User defined citation font (\citenamefont)
+% and-rm,%: Cited `and' in normal font
+% yr-par,%: Date in parentheses as (May 1993)
+% date-nil-x,%: If date is empty, then do not produce the surrounding punctuation (parens, brackets, colon, comma)
+% tit-qq,%: Title and punctuation in double quotes (``Title,'' ..)
+% inproceedings-chapter,%: produce pages after chapter, just as in InBook
+% jtit-x,%: Title is ignored
+% inproceedings-chapter,%: produce pages after chapter just as in InBook
+% article-booktitle,%: format booktitle
+% article-series,%: article can has series
+% jttl-rm,%: Journal name normal font
+% journal-address,%: Include address field (in parentheses) along with journal name
+% book-bt,%: Field `booktitle', or if absent field `title', is book title
+% thesis-title-o,%: Title is optional: no warning issued if empty
+% techreport-institution-par,%: format tech report institution like book publisher
+% vol-bf,%: Volume bold as {\bf vol}(num)
+% vnum-x,%: Journal vol, without number as 34
+% volp-com,%: Volume with comma as vol(num), ppp
+% jpg-1,%: Only start page number
+% book-editor-booktitle,%: Book permits empty author, produces title before editor in this case
+% inbook-editor-booktitle,%: Allow using both title/booktitle, both author/editor
+% bookaddress,%: Italic booktitle followed by bookaddress in roman
+% num-xser,%: Allows number without series and suppresses word "number"
+% number-cap,%: Capitalize word `number' as: "Number 123"
+% chapter-cap,%: Capitalize word `chapter' as: `Chapter 42'
+% series-number,%: Series number as: `Springer Lecture Notes No. 125'
+% numser-booktitle,%: After book title and conference address, and before editors
+% ser-vol,%: Series, vol. 23
+% ser-rm,%: format series roman , even when used with volume
+% volume-cap,%: Capitalize word `volume', as: `Volume 7 in Lecture Series'
+% ser-ed,%: Series and volume after booktitle and before editors
+% jnm-x,%: Space after journal name
+% pg-bk,book-chapter-pages,%: As chapter and page: chapter 42, page 345
+% pub-date,%: Publisher with address and date in parentheses (Oxford, 1994)
+% ay-empty-pub-parens-x,%: eliminate parentheses altogether if nothing inside
+% pre-pub,%: Publisher before volume, chapter, pages
+% pre-edn,%: Edition before publisher
+% pre-pub,pre-edn,%: Edition, publisher, volume, chapter, pages
+% isbn,%: Include ISBN for books, booklets, etc.
+% issn,%: Include ISSN for periodicals
+% doi-link,doi,%: Doi forms a link to the publication, anchored to the volume or title
+% edby,%: In booktitle, edited by .. (where .. is names)
+% blk-com,%: Comma between blocks
+% fin-endbibitem,%: Command at end instead of period
+% pp,%: `Page' abbreviated as p. or pp.
+% ed,%: `Editor' abbreviated as ed. or eds.
+% abr,%: Abbreviations of such words
+% ednx,%: `Edition' abbreviated as `ed'
+% ord,%: Numerical editions as 1st, 2nd, 3rd, etc
+% jabr,%: Abbreviated journal names
+% etal-it,%: Italic et al
+% revdata,eprint,url,url-blk,translation,%: Include REVTeX data fields collaboration, eid, eprint, archive, url, translation
+% SLACcitation,%: Produce SLACcitation field
+% numpages-x,%: Do not include numpages field
+% url,url-prefix-x,%: URL without prefix (default: `URL ')
+% bibinfo,%: Reference component tags like \bibinfo in the content of \bibitem
+% bibfield,%: Element tags like \bibfield in the content of \bibitem
+% nfss,%: Use LaTeX commands which may not work with Plain TeX
+%,{%
+% }}
+%\generate{\file{aipnum4-1.bst}{\MBopts}}
+%\endbatchfile
+% \end{verbatim}
+%
+% Between the two files \file{aipnum.dbj} and \file{aipauth.dbj},
+% the differences are limited:
+% \file{aipnum.dbj} has two lines lacking in \file{aipauth.dbj}:
+% \begin{verbatim}
+% seq-no,%: Citation order (unsorted, like unsrt.bst)
+% nm-init,ed-au,%: Initials + surname (J. F. Smith)
+% \end{verbatim}
+% thus, the ``numbered citation'' bibliography is sorted by citation order, and
+% the names are give first inital, then last name.
+%
+% Likewise, \file{aipauth.dbj} has one line lacking in \file{aipnum.dbj}:
+% \begin{verbatim}
+% nm-rev,%: Surname + comma + initials (Smith, J. F.)
+% \end{verbatim}
+% Thus, the ``author-year'' bibliography is sorted by author name, and
+% names are given last name first, followed by initials.
+%
+% We ensure that the journal substyle has the first word
+% in the matter by installing the (default) AIP code
+% later on (see Section~\ref{sec:aip-defaults}).
+% \end{macro}
+%
+% \begin{macro}{\pre@bibdata}
+%
+% Set up to write endnotes to a .bib file; its data will be incorporated into the bibliography.
+% \begin{macrocode}
+ \def\pre@bibdata{\jobname\bibdata@app}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bibsection}
+% We define the sectioning command to use when starting the bibliography
+% (we use \cmd\refname).
+% \begin{macrocode}
+\def\refname{References}%
+\def\rtx@bibsection{%
+ \@ifx@empty\refname{%
+ \par\vspace{6\p@ plus 6\p@}%
+ }{%
+% \end{macrocode}
+% The following line has been commented out:
+% \begin{verbatim}
+% \let\@hangfroms@section\@hang@froms
+% \end{verbatim}
+% \begin{macrocode}
+ \expandafter\section\expandafter*\expandafter{\refname}%
+ \@nobreaktrue
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bibpreamble}
+% \begin{macro}{\bibsep}
+% \begin{macro}{\newblock}
+% \begin{macrocode}
+\let\bibpreamble\@empty
+\appdef\setup@hook{%
+ \bibsep\z@\relax
+}%
+\def\newblock{\ }%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\bibfont}
+% We define the font switch that applies to the body of the bibliography.
+%
+% \begin{macrocode}
+\appdef\setup@hook{%
+ \def\bibfont{%
+ \preprintsty@sw{}{\footnotesize}%
+ \@clubpenalty\clubpenalty
+ \labelsep\z@
+ }%
+}%
+\let\place@bibnumber\place@bibnumber@sup
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection{Index}%
+% \begin{macrocode}
+\newenvironment{theindex}{%
+ \columnseprule \z@
+ \columnsep 35\p@
+ \c@secnumdepth-\maxdimen
+ \onecolumngrid@push
+ \section{\indexname}%
+ \thispagestyle{plain}%
+ \parindent\z@
+ \parskip\z@ plus.3\p@\relax
+ \let\item\@idxitem
+ \onecolumngrid@pop
+}{%
+}%
+%
+\def\@idxitem{\par\hangindent 40\p@}
+%
+\def\subitem{\par\hangindent 40\p@ \hspace*{20\p@}}
+%
+\def\subsubitem{\par\hangindent 40\p@ \hspace*{30\p@}}
+%
+\def\indexspace{\par \vskip 10\p@ plus5\p@ minus3\p@\relax}
+% \end{macrocode}
+%
+%
+% \subsubsection{Typesize Processing}%
+% The formatting specification for the preprint option is:
+% Times Roman 12 pt, double spacing, with 1-inch margins on letter paper.
+% Paragraphs indented ``five spaces''.
+% Display math on standard indent, with equation number flush right in parenthesis, with subequations roman.
+%
+% That for reprint option is to format similar to the printed journal; with most journals
+% set (approximately analyzed) 10-point, 2-column grid, letter paper.
+% \begin{macrocode}
+\expandafter\def\csname rtx@aip10pt\endcsname{%
+ \let\@currname@class\@currname
+ \def\@currname{aps10pt\substyle@post}%
+ \class@info{Reading file \@currname.\substyle@ext}%
+ \input{\@currname.\substyle@ext}%
+ \let\@currname\@currname@class
+ \class@info{Overriding 10pt}%
+ \aipreprint
+}%
+\expandafter\def\csname rtx@aip11pt\endcsname{\csname rtx@aip12pt\endcsname}%
+\expandafter\def\csname rtx@aip12pt\endcsname{%
+ \let\@currname@class\@currname
+ \def\@currname{aps12pt\substyle@post}%
+ \class@info{Reading file \@currname.\substyle@ext}%
+ \input{\@currname.\substyle@ext}%
+ \let\@currname\@currname@class
+ \class@info{Overriding 12pt}%
+ \aippreprint
+}%
+% \end{macrocode}
+%
+% \begin{macro}{\today}
+% Procedure \cmd\today\ is used in the article class, but not in
+% this document class.
+% \begin{macrocode}
+\def\today{%
+ \number\day\space
+ \ifcase\month
+ \or January\or February\or March\or April\or May\or June%
+ \or July\or August\or September\or October\or November\or December%
+ \fi\space
+ \number\year
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{A. Running Title}
+% User-provided running title \cmd\@shorttitle\ to be set.
+%
+% \subsection{B. Equation numbering, figure and table numbering}
+% Equations can be numbered throughout, or by section, with appendix equations prepended by the appendix label.
+% Figures and tables are numbered throughout.
+%
+%
+% \subsection{C. Title}
+% Title page may break above abstract, within author list.
+% Title notes are signified by superior letter followed by right parenthesis.
+%
+% \subsection{D. Author footnote}
+% Set short line above these footnotes.
+%
+% \subsection{E. Author}
+% Class option \classoption{superscriptaddress} is standard.
+% \begin{macrocode}
+ \clo@superscriptaddress
+% \end{macrocode}
+%
+% \subsection{F. Affiliations}
+% Set italic.
+%
+% \subsection{G. Received date}
+%
+%
+% \subsection{H. Abstract}
+% Single paragraph, no indent.
+%
+% \subsection{J. Lead Paragraph}
+% Set boldface, flush left before main text, single paragraph.
+% Separated from text by a short centered rule.
+%
+% \subsection{K. Headings}
+% Use labels: ROMAN, LETTER, arabic, letter.
+% Set ALLCAPS, boldface; Initial cap, boldface; Initial cap, bold-italic; Initial cap, italic.
+%
+% Theorem, proof title followed by colon. Follow author.
+%
+% \subsection{L. Text Footnotes}
+% Not permitted; use endnotes.
+%
+% \subsection{M. Citations and Bibliography}
+% Numerical \filename{aipnum.bst}, author-year \filename{aipauth.bst}, and numbered author-year \filename{aipnumauth.bst} are the available choices.
+% Numerical is standard, with all styles permitted in journal classes 3a and 4b.
+%
+%
+% \subsection{N. References}
+%
+% Article Title usage:
+%
+% Article title required in all journals with "unpublished", "to be published", "in press" and "submitted" refs.
+%
+% Exceptions:
+%
+% Journal classes 1a,1b,2,4a:
+%
+% Article title not allowed in published references, except in the case of "in press" or submitted" (see sample references below).
+%
+% Journal class 3a:
+%
+% Article title allowed but not required in author-year references (use must be consistent within a single manuscript).
+%
+% Journal class 3b:
+%
+% Article title required in all journal references and report references.
+%
+% Journal class 4b:
+%
+% Article title allowed in journal references in author-year mode.
+%
+% \subsection{O. Examples of Numerical References}
+%
+%
+% \subsection{P. References in Author-year mode}
+%
+%
+% \subsection{Q. Numbered Author-year References}
+%
+%
+% \subsection{R. Tables}
+% Placed within text (floated), labeled with Roman numeral.
+%
+% Table caption placed above table, followed by space,
+% two double lines, space, table column headings, space,
+% single line, table contents, two double lines.
+%
+% Footnotes labeled with superior lower-case letter, set below table contents.
+%
+% \subsection{S. Figures}
+% Placed within text (floated), labeled with arabic numbers.
+%
+% Caption set below figure. A citation to be set inline, not superscripted.
+%
+% \subsection{Society defaults}%
+%
+% After this society file is read in, we will process the
+% \cmd\@journal- and \cmd\@pointsize-specific code.
+% Here we define the defaults.
+%
+% We select \textbf{Chaos} as the default journal substyle, because it is
+% the most permissive in terms of bibliography and citation style,
+% and it is formatted in two column in the reprint style.
+%
+% \begin{macrocode}
+\def\@journal@default{cha}%
+\def\@pointsize@default{12}%
+% \end{macrocode}
+%
+% \subsection{Journal-Specific Code}%
+%
+% For AIP journals, we supply code specific to JCP, POP, RSI, JAP, APL, CHA, POF, BMF, RSE, JMP.
+%
+% \subsubsection{\classoption{jcp}}%
+%A member of the journal class 1a.
+% \begin{macrocode}
+\def\rtx@aipjcp{%
+ \typeout{Using journal substyle \@journal.}%
+% \end{macrocode}
+% Journal class 1a uses the (superscript) numerical citation style by default.
+% \begin{macrocode}
+ \@booleanfalse\authoryear@sw
+% \end{macrocode}
+%
+% End of \classoption{jcp} code.
+% \begin{macrocode}
+}%
+% \end{macrocode}
+%
+% \subsubsection{\classoption{pop}}%
+%A member of the journal class 1a.
+% \begin{macrocode}
+\def\rtx@aippop{%
+ \typeout{Using journal substyle \@journal.}%
+% \end{macrocode}
+% Journal class 1a uses the (superscript) numerical citation style by default.
+% \begin{macrocode}
+ \@booleanfalse\authoryear@sw
+% \end{macrocode}
+%
+% End of \classoption{pop} code.
+% \begin{macrocode}
+}%
+% \end{macrocode}
+%
+% \subsubsection{\classoption{rsi}}%
+%A member of the journal class 1a.
+% \begin{macrocode}
+\def\rtx@aiprsi{%
+ \typeout{Using journal substyle \@journal.}%
+% \end{macrocode}
+% Journal class 1a uses the (superscript) numerical citation style by default.
+% \begin{macrocode}
+ \@booleanfalse\authoryear@sw
+% \end{macrocode}
+%
+% End of \classoption{rsi} code.
+% \begin{macrocode}
+}%
+% \end{macrocode}
+%
+% \subsubsection{\classoption{jap}}%
+%Sole member of the journal class 1b.
+%
+% No running title.
+% \begin{macrocode}
+\def\rtx@aipjap{%
+ \typeout{Using journal substyle \@journal.}%
+% \end{macrocode}
+% Journal class 1b uses the (superscript) numerical citation style by default.
+% \begin{macrocode}
+ \@booleanfalse\authoryear@sw
+ \let\@runningtitle\@empty
+% \end{macrocode}
+%
+% End of \classoption{jap} code.
+% \begin{macrocode}
+}%
+% \end{macrocode}
+%
+% \subsubsection{\classoption{apl}}%
+%Sole member of the journal class 2.
+%
+% No running title.
+% \begin{macrocode}
+\def\rtx@aipapl{%
+ \typeout{Using journal substyle \@journal.}%
+% \end{macrocode}
+% Journal class 2 uses the (superscript) numerical citation style by default.
+% \begin{macrocode}
+ \@booleanfalse\authoryear@sw
+ \let\@runningtitle\@empty
+% \end{macrocode}
+%
+% End of \classoption{apl} code.
+% \begin{macrocode}
+}%
+% \end{macrocode}
+%
+% \subsubsection{\classoption{cha}}%
+%Sole member of the journal class 3a.
+% \begin{macrocode}
+\def\rtx@aipcha{%
+ \typeout{Using journal substyle \@journal.}%
+% \end{macrocode}
+% Article titles are allowed.
+% \begin{macrocode}
+ \@booleanfalse\aip@jtitx@sw
+% \end{macrocode}
+%
+% End of \classoption{cha} code.
+% \begin{macrocode}
+}%
+% \end{macrocode}
+%
+% \subsubsection{\classoption{pof}}%
+%Sole member of the journal class 3b.
+% \begin{macrocode}
+\def\rtx@aippof{%
+ \typeout{Using journal substyle \@journal.}%
+% \end{macrocode}
+% Journal class 3b uses the (superscript) numerical citation style by default.
+% Article titles are required, so we include them if available,
+% but if absent, we can do no more than make a warning in the \file{.blg}.
+% \begin{macrocode}
+ \@booleanfalse\authoryear@sw
+ \@booleanfalse\aip@jtitx@sw
+% \end{macrocode}
+%
+% End of \classoption{pof} code.
+% \begin{macrocode}
+}%
+% \end{macrocode}
+%
+% \subsubsection{\classoption{bmf}}%
+% A member of the journal class 4a,
+% the Biomicrofluidics journal is single column.
+% \begin{macrocode}
+\def\rtx@aipbmf{%
+ \typeout{Using journal substyle \@journal.}%
+% \end{macrocode}
+% Journal class 4a uses the (superscript) numerical citation style by default.
+% Journal is formatted in a single column.
+% \begin{macrocode}
+ \@booleanfalse\authoryear@sw
+ \@booleanfalse\twocolumn@sw
+% \end{macrocode}
+%
+% End of \classoption{bmf} code.
+% \begin{macrocode}
+}%
+% \end{macrocode}
+%
+% \subsubsection{\classoption{rse}}%
+%A member of the journal class 4a.
+% \begin{macrocode}
+\def\rtx@aiprse{%
+ \typeout{Using journal substyle \@journal.}%
+% \end{macrocode}
+% Journal class 4a uses the (superscript) numerical citation style by default.
+% \begin{macrocode}
+ \@booleanfalse\authoryear@sw
+% \end{macrocode}
+%
+% End of \classoption{rse} code.
+% \begin{macrocode}
+}%
+% \end{macrocode}
+%
+% \subsubsection{\classoption{jmp}}%
+% Sole member of the journal class 4b, Journal of Mathematical Physics is single column.
+% For an example of \env{itemize}, see JMP\_122901\_1 (48).
+% \begin{macrocode}
+\def\rtx@aipjmp{%
+ \typeout{Using journal substyle \@journal.}%
+% \end{macrocode}
+% Article titles are allowed.
+% Journal is formatted in a single column.
+% \begin{macrocode}
+ \@booleanfalse\aip@jtitx@sw
+ \@booleanfalse\twocolumn@sw
+% \end{macrocode}
+%
+% End of \classoption{jmp} code.
+% \begin{macrocode}
+}%
+% \end{macrocode}
+%
+% \subsection{Establish AIP Defaults\label{sec:aip-defaults}}
+%
+% \begin{macro}{\footinbib@sw}
+% All AIP journals invoke the \classoption{footinbib} option.
+% \begin{macrocode}
+\@booleantrue\footinbib@sw
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\place@bibnumber}
+% \begin{macro}{\@bibstyle}
+% \begin{macro}{\bibpunct}
+% We install code that will
+% govern the style in which \cmd\cite\ commands are
+% formatted,
+% select the presentation for \cmd\bibitem s
+% and control the \BibTeX\ processing.
+%
+% Note that a journal substyle may override these settings.
+% Likewise, document preamble may itself invoke \cmd\bibpunct\ or \cmd\bibliographystyle,
+% thereby overriding these settings and those of the journal substyle.
+%
+% The numbered citations of \file{aipnum} and \file{aipauthnum}
+% are compatible with \classoption{footinbib} and
+% the compression and coalescing features of \classname{natbib},
+% while \file{aipauth}'s author-year citations are not.
+% Therefore, we de-select such options if we are selecting author-year citations.
+%
+% Note on \classname{natbib} presets:
+% \file{aipnum} and \file{aipauthnum} uses the Chicago \cmd\bibpunct\ style;
+% while \file{aipauth} uses that of Nature.
+%
+% Note on \cmd\NAT@mcite: if not using numerical citations, we set \cmd\NAT@mcite\
+% to a lower value, to turn off the mcite semantics of \classname{natbib}.
+% \begin{macrocode}
+\let\place@bibnumber\place@bibnumber@sup
+\appdef\setup@hook{%
+ \authoryear@sw{%
+ \aip@jtitx@sw{%
+ \def\@bibstyle{aipauth\substyle@post}%
+ }{%
+ \def\@bibstyle{aipauth\substyle@post}%
+ }%
+ \authornum@sw{%
+ \bibpunct{}{}{,}{s}{}{\textsuperscript{,}}%
+ \let\onlinecite\rev@citealpnum
+ }{%
+ \bibhang10\p@
+ \bibpunct{(%)
+ }{%(
+ )}{; }{a}{,}{,}%
+ \@booleanfalse\footinbib@sw
+ \let\NAT@mcite\@ne
+ \let\NAT@sort\z@
+ \def\NAT@cmprs{\z@}%
+ \let\NAT@def@citea\rtx@def@citea
+ \let\NAT@def@citea@close\rtx@def@citea@close
+ }%
+ }{%
+ \aip@jtitx@sw{%
+ \def\@bibstyle{aipnum\substyle@post}%
+ }{%
+ \def\@bibstyle{aipnum\substyle@post}%
+ }%
+ \bibpunct{}{}{,}{s}{}{\textsuperscript{,}}%
+ \let\onlinecite\rev@citealpnum
+ }%
+}%
+\def\make@footnote@endnote{%
+ \footinbib@sw{%
+ \authoryear@sw{\authornum@sw{\false@sw}{\true@sw}}{\false@sw}%
+ {}{%
+ \ltx@footnote@push
+ \def\thempfn{Note\thefootnote}%
+ \let\ltx@footmark\rev@citemark
+ \let\ltx@foottext\rev@endtext
+ \appdef\class@enddocumenthook{\auto@bib}%
+ \let\printendnotes\relax
+ }%
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\aipreprint}%
+% We want to override \filename{aps10pt.rtx}.
+% \begin{macrocode}
+\def\aipreprint{%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\aippreprint}%
+% We want to override \filename{aps12pt.rtx}.
+% \begin{macrocode}
+\def\aippreprint{%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%
+% \Finale
+% %Here ends the programmer's documentation.
+% \endinput
+%
+\endinput
diff --git a/obsolete/macros/latex/contrib/revtex4-1/source/latex/revtex/ltxdocext.dtx b/obsolete/macros/latex/contrib/revtex4-1/source/latex/revtex/ltxdocext.dtx
new file mode 100644
index 0000000000..ec2ccd8870
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/source/latex/revtex/ltxdocext.dtx
@@ -0,0 +1,1257 @@
+% \iffalse meta-comment balanced on line 108
+% ltxdocext.dtx: package to extend the ltxdoc class of standard LaTeX
+% Copyright (c) 2008 Arthur Ogawa
+%
+% Disclaimer
+% This file is distributed WITHOUT ANY WARRANTY;
+% without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+% License
+% You may distribute this file under the conditions of the
+% LaTeX Project Public License 1.3 or later
+% (http://www.latex-project.org/lppl.txt).
+% ReadMe
+% For the documentation and more detailed instructions for
+% installation, typeset this document with \LaTeX.
+% Maintenance Status
+% This work has the LPPL maintenance status "maintained";
+% Current Maintainer of this work is Arthur Ogawa.
+%
+% This work consists of the main source file ltxdocext.dtx
+% and the derived files
+% ltxdocext.sty, ltxdocext.pdf, ltxdocext.ins, ltxdocext.drv.
+% Distribution:
+% CTAN:macros/latex/contrib/revtex/
+%
+% Unpacking:
+% tex ltxdocext.dtx
+%
+% Documentation:
+% latex ltxdocext.dtx; ...
+%
+% Program calls to get the documentation (example):
+% pdflatex ltxdocext.dtx
+% makeindex -s gind.ist ltxdocext.idx
+% makeindex -s gglo.ist -o ltxdocext.gls ltxdocext.glo
+% pdflatex ltxdocext.dtx
+% makeindex -s gind.ist ltxdocext.idx
+% pdflatex ltxdocext.dtx
+%
+% Installation:
+% TDS:doc/latex/revtex/
+% TDS:source/latex/revtex/
+% TDS:tex/latex/revtex/
+%
+% Thanks, Heiko!
+% This method of letting a single .dtx file serve as both
+% documentation (via latex) and installer (via tex) follows
+% the example of Heiko Oberdiek. Thanks!
+%<*ignore>
+\begingroup
+ \def\x{LaTeX2e}%
+\expandafter\endgroup
+\ifcase
+ 0\expandafter\ifx\csname processbatchFile\endcsname\relax\else1\fi\ifx\fmtname\x\else 1\fi
+ \relax
+\else
+ \csname fi\endcsname
+%</ignore>
+%<*install>
+\input docstrip
+\preamble
+
+This is a generated file;
+altering it directly is inadvisable;
+instead, modify the original source file.
+See the URL in the file README.
+
+License
+ You may distribute this file under the conditions of the
+ LaTeX Project Public License 1.3 or later
+ (http://www.latex-project.org/lppl.txt).
+
+ This file is distributed WITHOUT ANY WARRANTY;
+ without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE.
+
+\endpreamble
+\askforoverwritefalse
+\keepsilent
+ \generate{%
+ %{ignore}
+% \usedir{tex/latex/revtex}%
+ \file{ltxdocext.sty}{%
+ \from{ltxdocext.dtx}{package,kernel}%
+ }%
+ \file{acrofont.sty}{\from{ltxdocext.dtx}{fonts}}%
+ }%
+\ifToplevel{
+\Msg{***********************************************************}
+\Msg{*}
+\Msg{* To finish the installation, please move}
+\Msg{* ltxdocext.sty}
+\Msg{* into a directory searched by TeX;}
+\Msg{* in a TDS-compliant installation:}
+\Msg{* texmf/tex/macros/latex/revtex/.}
+\Msg{*}
+\Msg{* To produce the documentation,
+ run ltxdocext.dtx through LaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing}
+\Msg{***********************************************************}
+}
+\endbatchfile
+%</install>
+%<*ignore>
+\fi
+%</ignore>
+% \fi
+%
+% \GetFileInfo{ltxdocext.dtx}\CheckSum{941}
+%
+% \iffalse ltxdoc klootch
+%<*ltxdocext>
+%%% @LaTeX-file{
+%%% filename = "ltxdocext.dtx",
+%%% version = "1.0",
+%%% date = "2008/08/13",
+%%% time = "11:23:00 GMT",
+%%% checksum = "929",
+%%% author = "Arthur Ogawa (mailto:arthur_ogawa at sbcglobal.net),
+%%% commissioned by the American Physical Society.
+%%% ",
+%%% copyright = "Copyright (C) 1999, 2008 Arthur Ogawa,
+%%% distributed under the terms of the
+%%% LaTeX Project Public License, see
+%%% ftp://ctan.tug.org/macros/latex/base/lppl.txt
+%%% ",
+%%% address = "Arthur Ogawa,
+%%% USA",
+%%% telephone = "",
+%%% FAX = "",
+%%% email = "mailto colon arthur_ogawa at sbcglobal.net",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "latex, ltxdoc",
+%%% supported = "yes",
+%%% abstract = "extensions to the ltxdoc class",
+%%% docstring = "The checksum field above generated by ltxdoc",
+%%% }
+%</ltxdocext>
+% \fi
+%
+% \iffalse ltxdoc klootch
+% The following references the \file{README} file,
+% which contains basic information about this package.
+% The contents of this file are generated when
+% you typeset the programmer's documentation.
+% Search on "{filecontents*}{README}" to locate it.
+% \fi\input{README}%
+%
+% \subsection{Bill of Materials}
+%
+% Following is a list of the files in this distribution arranged
+% according to provenance.
+%
+% \subsubsection{Primary Source}%
+% One single file generates all.
+%\begin{verbatim}
+%ltxdocext.dtx
+%\end{verbatim}
+%
+% \subsubsection{Generated by \texttt{latex ltxdocext.dtx}}%
+% Typesetting the source file under pdflatex
+% generates the readme and the documentation.
+%\begin{verbatim}
+%README ltxdocext.pdf
+%\end{verbatim}
+%
+% \subsubsection{Generated by \texttt{tex ltxdocext.ins}}%
+% Typesetting this file with \TeX\ generates
+% the package file.
+%\begin{verbatim}
+%ltxdocext.sty acrofont.sty
+%\end{verbatim}
+%
+% \subsubsection{Documentation}%
+% The following are the online documentation:
+% \begin{verbatim}
+%ltxdocext.pdf
+% \end{verbatim}
+%
+% \subsubsection{Auxiliary}%
+% The following are auxiliary files generated
+% in the course of running \LaTeX:
+% \begin{verbatim}
+%ltxdocext.aux ltxdocext.idx ltxdocext.ind ltxdocext.log ltxdocext.toc
+% \end{verbatim}
+%
+% \section{Code common to all modules}%
+%
+% We want to require only one place in this file
+% where the version number is stated,
+% and we also want to ensure that the version
+% number is embedded into every generated file.
+%
+% Now we declare that
+% these files can only be used with \LaTeXe.
+% An appropriate message is displayed if
+% a different \TeX{} format is used.
+% \begin{macrocode}
+%<*driver|package|fonts>
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]%
+%</driver|package|fonts>
+% \end{macrocode}
+% As desired, the following modules all
+% take common version information:
+% \begin{macrocode}
+%<package>\ProvidesFile{ltxdocext.sty}%
+%<fonts>\ProvidesFile{acrofont.sty}%
+%<*driver>
+\expandafter\ProvidesFile\expandafter{\jobname.dtx}%
+%</driver>
+% \end{macrocode}
+%
+% The following line contains, for once and for all,
+% the version and date information.
+% By various means, this information is reproduced
+% consistently in all generated files and in the
+% typeset documentation.
+% \begin{macrocode}
+%<version>
+ [2008/08/04 1.1b2 ltxdoc extensions package]% \fileversion
+% \end{macrocode}
+%
+%
+% \section{The driver module \texttt{doc}}
+%
+% This module, consisting of the present section,
+% typesets the programmer's documentation,
+% generating the \file{README} as required.
+%
+% Because the only uncommented-out lines of code at the beginning of
+% this file constitute the \file{doc} module itself,
+% we can simply typeset the \file{.dtx} file directly,
+% and there is thus rarely any need to
+% generate the ``doc'' {\sc docstrip} module.
+% Module delimiters are nonetheless required so that
+% this code does not find its way into the other modules.
+%
+% The \enve{document} command concludes the typesetting run.
+%
+% \begin{macrocode}
+%<*driver>
+% \end{macrocode}
+%
+% \subsection{The Preamble}
+% The programmers documentation is formatted
+% with the \classname{ltxdoc} document class, with local customizations,
+% and with the usual code line indexing.
+% \begin{macrocode}
+\documentclass[draft]{ltxdoc}
+\RequirePackage{ltxdocext}%
+\RequirePackage[colorlinks=true,linkcolor=blue]{hyperref}%
+\expandafter\ifx\csname package@font\endcsname\@undefined\else
+ \expandafter\RequirePackage\expandafter{\csname package@font\endcsname}%
+\fi
+\CodelineIndex\EnableCrossrefs % makeindex -s gind.ist ltxdocext
+\RecordChanges % makeindex -s gglo.ist -o ltxdocext.gls ltxdocext.glo
+% \end{macrocode}
+%
+% \subsubsection{Docstrip and info directives}
+% We use so many {\sc docstrip} modules that we set the
+% \texttt{StandardModuleDepth} counter to 1.
+% \begin{macrocode}
+\setcounter{StandardModuleDepth}{1}
+% \end{macrocode}
+% The following command retrieves the date and version information
+% from this file.
+% \begin{macrocode}
+\expandafter\GetFileInfo\expandafter{\jobname.dtx}%
+% \end{macrocode}
+%
+% \subsection{The ``Read Me'' File}
+% As promised above, here is the contents of the
+% ``Read Me'' file. That file serves a double purpose,
+% since it also constitutes the beginining of the
+% programmer's documentation. What better thing, after
+% all, to have appear at the beginning of the
+% typeset documentation?
+%
+% A good discussion of how to write a ReadMe file can be found in
+% Engst, Tonya, ``Writing a ReadMe File? Read This''
+% \emph{MacTech} October 1998, p. 58.
+%
+% Note the appearance of the
+% \cmd\StopEventually\ command, which marks the
+% dividing line between the user documentation
+% and the programmer documentation.
+%
+% The usual user will not be asked to
+% do a full build, not to speak
+% of the bootstrap.
+% Instructions for carrying these processes
+% begin the programmer's manual.
+%
+% \begin{macrocode}
+\begin{filecontents*}{README}
+\title{%
+ Extensions to the \classname{ltxdoc} class%
+ \thanks{%
+ This file has version number \fileversion,
+ last revised \filedate.%
+ }%
+ \thanks{%
+ Version \fileversion\ \copyright\ 2008 The American Physical Society
+ }%
+}%
+\author{%
+Arthur Ogawa%
+ \thanks{\texttt{mailto:arthur\_ogawa at sbcglobal.net}}%
+}%
+%\iffalse
+% For version number and date,
+% search on "\fileversion" in the .dtx file,
+% or see the end of the README file.
+%\fi
+
+\maketitle
+
+This file embodies the \classname{ltxdocext} package,
+the implementation and its user documentation.
+
+The distribution point for this work is
+\url{publish.aps.org/revtex},
+which contains prebuilt runtime files, documentation, and full source,
+ready to add to a TDS-compliant \TeX\ installation.
+
+The \classname{ltxdocext} package was commissioned by the American Physical Society
+and is distributed under the terms of the \LaTeX\ Project Public License,
+the same license under which all the portions of \LaTeX\ itself are distributed.
+Please see \url{http://ctan.tug.org/macros/latex/base/lppl.txt} for details.
+
+To use this document class, you must have a working
+\TeX\ installation equipped with \LaTeXe\
+and possibly pdftex and Adobe Acrobat Reader or equivalent.
+
+To install, retrieve the distribution,
+unpack it into a directory on the target computer,
+and move the files \file{ltxdocext.sty} and \file{acrofont.sty}
+into a location in your filesystem where they will be found by \LaTeX.
+
+If you will be using the \classname{acrofont} package, you must
+also install the virtual fonts
+\file{zpsynocmrv}, \file{zptmnocmr},
+\file{zptmnocmrm}, and \file{zpzcnocmry}.
+The corresponding \file{.tfm}, \file{.vf}, and \file{.vpl}
+files are part of this distribution.
+
+To use, read the user documentation \file{ltxdocext.pdf}.
+The \file{.dtx} file, \file{ltxdocext.dtx}, constitutes
+in itself an instance of use of the \classname{ltxdocext}
+package and the \classname{acrofont} package.
+
+\tableofcontents
+
+\section{Processing Instructions}
+
+The package files \file{ltxdocext.sty} and \file{acrofont.sty}
+are generated from this file, \file{ltxdocext.dtx},
+using the {\sc docstrip} facility of \LaTeX
+via |tex ltxdocext.dtx| (Note: do \emph{not} use \LaTeX\ for this step).
+The typeset documentation that you are now reading is generated from
+the same file by typesetting it with \LaTeX\ or pdftex
+via |latex ltxdocext.dtx| or |pdflatex ltxdocext.dtx|.
+
+\subsection{Build Instructions}
+
+You may bootstrap this suite of files solely from \file{ltxdocext.dtx}.
+Prepare by installing \LaTeXe\ (and either tex or pdftex) on your computer,
+then carry out the following steps:
+\begin{enumerate}
+\item
+Within an otherwise empty directory,
+typeset \file{ltxdocext.dtx} with \TeX\ or pdftex;
+thereby generating the package file \file{ltxdocext.sty},
+and the package file \file{acrofont.sty}.
+Make sure that {\sc docstrip} receives permission
+to overwrite existing versions of these packages.
+\item
+Now
+typeset \file{ltxdocext.dtx} with \LaTeX\ or pdflatex;
+you will obtain the typeset documentation you are now reading,
+along with
+the file \file{README}.
+
+Note: you will have to run \LaTeX, then
+\file{makeindex} \texttt{-s gind.ist ltxdocext.idx}, then
+\file{makeindex} \texttt{-s gglo.ist -o ltxdocext.gls ltxdocext.glo}, then
+\LaTeX\ again in order to obtain a valid index and table of contents.
+\item
+Install the following files into indicated locations within your
+TDS-compliant \texttt{texmf} tree (you may need root access):
+\begin{itemize}
+\item
+\file{$TEXMF/}\file{tex/}\file{latex/}\file{revtex/}\classname{ltxdocext.sty} and
+\file{$TEXMF/}\file{tex/}\file{latex/}\file{revtex/}\classname{acrofont.sty}
+\item
+\file{$TEXMF/}\file{source/}\file{latex/}\file{revtex/}\classname{ltxdocext.dtx}
+\item
+\file{$TEXMF/}\file{doc/}\file{latex/}\file{revtex/}\classname{ltxdocext.pdf}
+\end{itemize}
+where \file{$TEXMF/} stands for \file{texmf-local/}, or some other \texttt{texmf} tree
+in your installation.
+\item
+Run \texttt{mktexlsr} on \file{$TEXMF/} (you may need root access).
+\item
+Build and installation are now complete;
+now put a \cmd\usepackage\texttt{\{ltxutil\}} in your document preamble!
+\end{enumerate}
+\end{filecontents*}
+% \end{macrocode}
+%
+% \subsection{The Document Body}
+%
+% Here is the document body, containing only a
+% \cmd\DocInput\ directive---referring to this very file.
+% This very cute self-reference is a common \classname{ltxdoc} idiom.
+% \begin{macrocode}
+\begin{document}%
+\expandafter\DocInput\expandafter{\jobname.dtx}%
+\PrintChanges
+\end{document}
+%</driver>
+% \end{macrocode}
+%
+% \section{Using the \classname{ltxdoc} and \classname{acrofont} packages}%
+% These packages are an adjunct to the
+% standard \LaTeX\ \classname{ltxdoc} class and may be
+% simply invoked as follows:
+%\begin{verbatim}
+%\documentclass[draft]{ltxdoc}
+%\RequirePackage{ltxdocext}%
+%\RequirePackage{acrofont}%
+%\CodelineIndex\EnableCrossrefs
+%\end{verbatim}
+%
+% Your document should simply cleave to the standards of the
+% \classname{ltxdoc} class, with extensions and alterations as noted.
+%
+% \subsection{Extensions to the \classname{ltxdoc} class}%
+%
+% \subsubsection{Extensions to the \env{verbatim} environment and \cs{verb} command}%
+%
+% The delimiters \verb$<<$ and \verb$>>$ within the scope of the verbatim environment
+% or within the argument of the \cmd\verb\ command produce
+% italics surrounded by angle brackets.
+% This typographic convention usually indicates
+% \emph{metalanguage}, i.e., a placeholder.
+%
+% To obtain the angle bracket character per se,
+% double the character, viz., ``\verb$the delimiter \verb+<<<<+$''.
+%
+% \subsubsection{The -\texttt{matter} Commands Work}
+% The sectioning commands \cmd\frontmatter, \cmd\mainmatter, and \cmd\backmatter
+% of the standard \LaTeX\ \classname{book} class are operative in the
+% \classname{ltxdoc} class.
+%
+% \subsubsection{The \cs{GetFileInfo} command}\label{sec:GetFileInfo}
+% You can use the \cmd\GetFileInfo\ command to extract
+% the date, version, and file info of a file which has registered itself
+% via the \cmd\ProvidesFile\ or \cmd\ProvidesClass\ command
+% (employing the optional argument thereto).
+%
+% For instance, if your document contains the following:
+%\begin{verbatim}
+%\RequirePackage{ltxdocext}%
+%\GetFileInfo{ltxdocext.sty}%
+%\end{verbatim}
+% then the following control sequence names will have
+% a value corresponding to that package's \cmd\ProvidesFile\
+% command:
+% \cmd\filedate: the file's date,
+% \cmd\fileversion: the file's version, and
+% \cmd\fileinfo: the file's info.
+%
+% \subsubsection{Self-Indexing Commands}%
+% Certain commands automatically produce an index entry
+% (or several related entries) according to the meaning.
+%
+% \begin{unnumtable}
+% \begin{tabular}{ll}
+% meta-text &\cmd\marg\arg{text}\\
+% command &\cmd\cmd\cmd\csname\\
+% environment name &\cmd\env\arg{name}\\
+% \cmd\begin\verb`{foo}`&\cmd\envb\arg{foo}\\
+% \cmd\end\verb`{foo}` &\cmd\enve\arg{foo}\\
+% argument &\cmd\arg\arg{name}\\
+% optional &\cmd\oarg\arg{name}\\
+% filename &\cmd\file\arg{name}\\
+% url &\cmd\url\arg{name}\\
+% document class &\cmd\classname\arg{name}\\
+% document substyle &\cmd\substyle\arg{name}\\
+% class option &\cmd\classoption\arg{name}
+% \end{tabular}
+% \end{unnumtable}
+%
+% \subsubsection{Unnumbered Tables}%
+%
+% When your documentation requires the use of an unnumbered table,
+% use the \env{unnumtable} environment:
+% \begin{verbatim}
+%\begin{unnumtable}
+%\begin{tabular}{ll}
+%<table rows>
+%\end{tabular}
+%\end{unnumtable}
+% \end{verbatim}
+%
+% \subsubsection{Structuring Tables}%
+% The commands \cmd\toprule, \cmd\colrule, and \cmd\botrule
+% allow you to mark the beginning of the column heads
+% the beginning of the table body, and the end of
+% the table body, respectively.
+% In context,
+% \begin{verbatim}
+%\begin{tabular}{ll}
+%\toprule
+%<table head rows>
+%\colrule
+%<table rows>
+%\botrule
+%\end{tabular}
+% \end{verbatim}
+%
+% \subsubsection{A Sectioning Command Below \cs{subsection}}%
+% The \cmd\subsubsection\ command is defined.
+%
+%
+% \subsection{Alterations to the \classname{ltxdoc} class}%
+% The following involve no new markup, but they
+% do change the appearance of your formatted documentation:
+% \begin{enumerate}
+% \item
+% Using the \classname{acrofont} package causes your
+% document to be formatted using the standard
+% Acrobat fonts to the greatest extent possible.
+% This means that for most documents, Computer Modern
+% is not used at all.
+% Math that unavoidable must use CM still exists, however.
+% \item
+% An index will be produced at the end of the document
+% without your needing to explicitly mark it up, and
+% it will have an entry in the TOC.
+% \item
+% The \env{quote} environment has a slightly smaller left margin.
+% \item
+% Array columns are set tight by default.
+% \item
+% A host of \cmd\DoNotIndex\ directives are invoked.
+% I intend this list to grow to encompass
+% even more commands. Send me your suggestions.
+% \end{enumerate}
+%
+%
+%
+%\StopEventually{}
+%
+% \section{Extensions to the ltxdoc class}
+% The \file{package} {\sc docstrip} module comprises the
+% package \classname{ltxdocext.sty}, which provides extensions
+% to the standard \LaTeX\ \classname{ltxdoc} class.
+%
+% \subsection{Beginning of the \file{package} {\sc docstrip} module}
+% This portion of code is only present in the \LaTeX\ package (\texttt{.sty} file),
+% not in the kernel portion.
+% \begin{macrocode}
+%<*package>
+\def\class@name{ltxdocext}%
+\expandafter\PackageInfo\expandafter{\class@name}{%
+ An extension to the \protect\LaTeXe\space ltxdoc class
+ by A. Ogawa (arthur\_ogawa sbcglobal.net)%
+}%
+%</package>
+% \end{macrocode}
+%
+% \subsection{Beginning of the \file{kernel} {\sc docstrip} module}
+%
+% The bulk of the code is the kernel portion; a brief tail of \file{package} code then follows.
+% \begin{macrocode}
+%<*kernel>
+% \end{macrocode}
+%
+% \subsection{Incorporate \classname{ltxguide.cls} extensions}
+%
+% Code extracted from \classname{ltxguide.cls}, by Alan Jeffrey.
+% ``This code stolen from \classname{ltxguide.cls}:
+% Some hacks with verbatim... NB: this would be better done with the
+% verbatim package, but this document has to run on any \LaTeX
+% installation.''
+% \begin{macrocode}
+\RequirePackage{verbatim}%
+\let\o@verbatim\verbatim
+\def\verbatim{%
+ \ifhmode\unskip\par\fi
+% \nopagebreak % Overridden by list penalty
+ \ifx\@currsize\normalsize
+ \small
+ \fi
+ \o@verbatim
+}%
+% \end{macrocode}
+%
+% Here we extend the font-setting command to include making \texttt{<>} active
+% (i.e., adjusting the input encoding).
+% \begin{macrocode}
+\renewcommand \verbatim@font {%
+ \normalfont \ttfamily
+ \catcode`\<=\active
+ \catcode`\>=\active
+}%
+% \end{macrocode}
+%
+% Make \verb$|...|$ a synonym for \cmd\verb\verb$|...|$.
+% \begin{macrocode}
+\RequirePackage{shortvrb}
+\AtBeginDocument{%
+ \MakeShortVerb{\|}%
+}%
+% \end{macrocode}
+%
+% Make active bracket characters produce italics surrounded by angle brackets
+% (used in \env{verbatim} and \cmd\verb).
+% \verb|<<| produces a less-than, and \verb|>>| produces a greater-than.
+% \begin{macrocode}
+\begingroup
+ \catcode`\<=\active
+ \catcode`\>=\active
+ \gdef<{\@ifnextchar<\@lt\@meta}
+ \gdef>{\@ifnextchar>\@gt\@gtr@err}
+ \gdef\@meta#1>{\marg{#1}}
+ \gdef\@lt<{\char`\<}
+ \gdef\@gt>{\char`\>}
+\endgroup
+\def\@gtr@err{%
+ \ClassError{ltxguide}{%
+ Isolated \protect>%
+ }{%
+ In this document class, \protect<...\protect>
+ is used to indicate a parameter.\MessageBreak
+ I've just found a \protect> on its own.
+ Perhaps you meant to type \protect>\protect>?
+ }%
+}
+\def\verbatim@nolig@list{\do\`\do\,\do\'\do\-}
+% \end{macrocode}
+% End of code stolen from \file{ltxguide.cls}. Thanks, Alan.
+%
+% Add functionality from doc.dtx:
+% (code stolen from doc.dtx):
+% \begin{macrocode}
+\def\GetFileInfo#1{%
+ \def\filename{#1}%
+ \def\@tempb##1 ##2 ##3\relax##4\relax{%
+ \def\filedate{##1}%
+ \def\fileversion{##2}%
+ \def\fileinfo{##3}}%
+ \edef\@tempa{\csname ver@#1\endcsname}%
+ \expandafter\@tempb\@tempa\relax? ? \relax\relax}
+% \end{macrocode}
+% (end of code stolen from doc.dtx. Thanks FMi.)
+%
+% Various forms of self-indexing commands:
+% \begin{macrocode}
+\DeclareRobustCommand{\marg}[1]{%
+ \meta{#1}%
+ \index{#1=\string\meta{#1} placeholder}\index{placeholder>#1=\string\meta{#1}}%
+}%
+\DeclareRobustCommand\meta[1]{%
+ \mbox{\LANGLE\itshape#1\/\RANGLE}%
+}%
+\def\LANGLE{$\langle$}%
+\def\RANGLE{$\rangle$}%
+\DeclareRobustCommand{\arg}[1]{%
+ {\ttfamily\string{}\meta{#1}{\ttfamily\string}}%
+ \index{#1=\string\ttt{#1}, argument}\index{argument>#1=\string\ttt{#1}}%
+}%
+\let\oarg\undefined
+\DeclareRobustCommand{\oarg}[1]{%
+ {\ttfamily[%]
+ }\meta{#1}{\ttfamily%[
+ ]}%
+ \index{#1=\string\ttt{#1}, optional argument}%
+ \index{argument, optional>#1=\string\ttt{#1}}%
+}%
+\DeclareRobustCommand\cmd{\begingroup\makeatletter\@cmd}%
+\long\def\@cmd#1{%
+ \endgroup
+ \cs{\expandafter\cmd@to@cs\string#1}%
+ \expandafter\cmd@to@index\string#1\@nil
+}%
+\def\cmd@to@cs#1#2{\char\number`#2\relax}%
+\def\cmd@to@index#1#2\@nil{%
+ \index{#2=\string\cmd#1#2}%\index{command>#2=\string\cmd#1#2}%
+}%
+\DeclareRobustCommand\cs[1]{{\ttfamily\char`\\#1}}%
+\def\scmd#1{%
+ \cs{\expandafter\cmd@to@cs\string#1}%
+ \expandafter\scmd@to@index\string#1\@nil
+}%
+\def\scmd@to@index#1#2\@nil#3{%
+ \index{\string$#3=\string\cmd#1#2---#3}%
+%\index{command>\string$#3=\string\cmd#1#2---#3}%
+}%
+\DeclareRobustCommand\env{\name@idx{environment}}%
+\DeclareRobustCommand\envb[1]{%
+ {\ttfamily\string\begin\string{}\env{#1}{\ttfamily\string}}%
+}%
+\DeclareRobustCommand\enve[1]{{\ttfamily\string\end\string{}\env{#1}{\ttfamily\string}}}%
+\DeclareRobustCommand{\file}{\begingroup\@sanitize\@file}%
+\long\def\@file#1{\endgroup
+ {\ttfamily#1}%
+ \index{#1=\string\ttt{#1}}\index{file>#1=\string\ttt{#1}}%
+}%
+\DeclareRobustCommand\substyle{\name@idx{document substyle}}%
+\DeclareRobustCommand\classoption{\name@idx{document class option}}%
+\DeclareRobustCommand\classname{\name@idx{document class}}%
+\def\name@idx#1#2{%
+ {\ttfamily#2}%
+ \index{#2\space#1=\string\ttt{#2}\space#1}\index{#1>#2=\string\ttt{#2}}%
+}%
+\DeclareRobustCommand\url@ltxdocext{\begingroup\catcode`\/\active\catcode`\.\active\catcode`\:\active\@url}%
+\AtBeginDocument{%
+ \ifx\url\undefined\let\url\url@ltxdocext\fi
+}%
+\def\@url#1{%
+ \url@break{\ttfamily#1}%
+ \url@char\edef\@tempa{#1=\string\url{#1}}%
+ \expandafter\index\expandafter{\@tempa}%
+ \expandafter\index\expandafter{\expandafter u\expandafter r\expandafter l\expandafter >\@tempa}%
+ \endgroup
+}%
+{\catcode`\:\active\aftergroup\def\aftergroup:}{\active@colon}%
+\def\colon@break{\colon@char\allowbreak}%
+\def\colon@char{:}%
+{\catcode`\/\active\aftergroup\def\aftergroup/}{\active@slash}%
+\def\slash@break{\slash@char\allowbreak}%
+\def\slash@char{/}%
+{\catcode`\.\active\aftergroup\def\aftergroup.}{\active@dot}%
+\def\dot@break{\dot@char\allowbreak}%
+\def\dot@char{.}%
+\def\url@break{\let\active@slash\slash@break\let\active@dot\dot@break\let\active@colon\colon@break}%
+\def\url@char{\let\active@slash\slash@char\let\active@dot\dot@char\let\active@colon\colon@char}%
+% \end{macrocode}
+%
+% \subsection{Changes to the base class of the ltxdoc class}
+% Modify \env{theindex} environment so that it produces a TOC entry
+% \begin{macrocode}
+\renewenvironment{theindex}
+ {\if@twocolumn
+ \@restonecolfalse
+ \else
+ \@restonecoltrue
+ \fi
+ \columnseprule \z@
+ \columnsep 35\p@
+\def\see##1##2{\textit{See} ##1}%
+\def\seealso##1##2{\textit{See also} ##1}%
+\long\def\cmd##1{\cs{\expandafter\cmd@to@cs\string##1}}%
+\def\@url##1{\url@break\ttt{##1}\endgroup}%
+\def\ttt{\begingroup\@sanitize\ttfamily\@ttt}%
+\def\@ttt##1{##1\endgroup}%
+\mathchardef\save@secnumdepth\c@secnumdepth
+\c@secnumdepth\m@ne
+ \twocolumn[\section{\indexname}]%
+% \@mkboth{\MakeUppercase\indexname}%
+% {\MakeUppercase\indexname}%
+\c@secnumdepth\save@secnumdepth
+ \thispagestyle{plain}\parindent\z@
+ \parskip\z@ \@plus .3\p@\relax
+ \let\item\@idxitem}
+ {\if@restonecol\onecolumn\else\clearpage\fi}
+\renewenvironment{quote}
+ {\list{}{%
+ \leftmargin1em\relax
+ \rightmargin\leftmargin
+ }%
+ \item\relax}
+ {\endlist}
+% \end{macrocode}
+%
+% \subsection{Extensions to the base class of \classname{ltxdoc.cls}}
+%
+% Matter commands from \classname{book.cls}
+% \begin{macrocode}
+\newif\if@mainmatter
+\newif\if@openright
+\@openrighttrue
+\DeclareRobustCommand\frontmatter{%
+ \cleartorecto
+ \@mainmatterfalse
+ \pagenumbering{roman}%
+}%
+\DeclareRobustCommand\mainmatter{%
+ \cleartorecto
+ \@mainmattertrue
+ \pagenumbering{arabic}%
+}%
+\DeclareRobustCommand\backmatter{%
+ \if@openright
+ \cleartorecto
+ \else
+ \clearpage
+ \fi
+ \@mainmatterfalse
+}%
+\ifx\undefined\cleartorecto
+ \def\cleartorecto{\cleardoublepage}%
+\fi
+% \end{macrocode}
+%
+% Unnumbered tables
+%
+% \begin{environment}{unnumtable}
+% An unnumbered table does not float.
+% \begin{macrocode}
+\def\@to{to}%
+\newenvironment{unnumtable}{%
+ \par
+ \addpenalty\predisplaypenalty
+ \addvspace\abovedisplayskip
+ \hbox\@to\hsize\bgroup\hfil\ignorespaces
+ \let\@Hline\@empty
+}{%
+ \unskip\hfil\egroup
+ \penalty\postdisplaypenalty
+ \vskip\belowdisplayskip
+ \aftergroup\ignorespaces
+ \@endpetrue
+}%
+% \end{macrocode}
+% \end{environment}
+%
+% Emulate \cmd\toprule\ and friends
+% \begin{macrocode}
+\providecommand\toprule{\hline\hline}%
+\providecommand\colrule{\\\hline}%
+\providecommand\botrule{\\\hline\hline}%
+% \end{macrocode}
+%
+% Define sectioning command below \cmd\subsubsection.
+% \begin{macrocode}
+\DeclareRobustCommand\subsubsubsection{%
+ \@startsection{subsubsection}{4}%
+ {\z@}{-15\p@\@plus-5\p@\@minus-2\p@}%
+ {5\p@}{\normalfont\normalsize\itshape}%
+}%
+% \end{macrocode}
+%
+% \subsection{In lieu of \file{ltxdoc.cfg}}
+% We don't want everything to appear in the index
+% \begin{macrocode}
+\DoNotIndex{\',\.,\@M,\@@input,\@Alph,\@alph,\@addtoreset,\@arabic}
+\DoNotIndex{\@badmath,\@centercr,\@cite}
+\DoNotIndex{\@dotsep,\@empty,\@float,\@gobble,\@gobbletwo,\@ignoretrue}
+\DoNotIndex{\@input,\@ixpt,\@m,\@minus,\@mkboth}
+\DoNotIndex{\@ne,\@nil,\@nomath,\@plus,\roman,\@set@topoint}
+\DoNotIndex{\@tempboxa,\@tempcnta,\@tempdima,\@tempdimb}
+\DoNotIndex{\@tempswafalse,\@tempswatrue,\@viipt,\@viiipt,\@vipt}
+\DoNotIndex{\@vpt,\@warning,\@xiipt,\@xipt,\@xivpt,\@xpt,\@xviipt}
+\DoNotIndex{\@xxpt,\@xxvpt,\\,\ ,\addpenalty,\addtolength,\addvspace}
+\DoNotIndex{\advance,\ast,\begin,\begingroup,\bfseries,\bgroup,\box}
+\DoNotIndex{\bullet}
+\DoNotIndex{\cdot,\cite,\CodelineIndex,\cr,\day,\DeclareOption}
+\DoNotIndex{\def,\DisableCrossrefs,\divide,\DocInput,\documentclass}
+\DoNotIndex{\DoNotIndex,\egroup,\ifdim,\else,\fi,\em,\endtrivlist}
+\DoNotIndex{\EnableCrossrefs,\end,\end@dblfloat,\end@float,\endgroup}
+\DoNotIndex{\endlist,\everycr,\everypar,\ExecuteOptions,\expandafter}
+\DoNotIndex{\fbox}
+\DoNotIndex{\filedate,\filename,\fileversion,\fontsize,\framebox,\gdef}
+\DoNotIndex{\global,\halign,\hangindent,\hbox,\hfil,\hfill,\hrule}
+\DoNotIndex{\hsize,\hskip,\hspace,\hss,\if@tempswa,\ifcase,\or,\fi,\fi}
+\DoNotIndex{\ifhmode,\ifvmode,\ifnum,\iftrue,\ifx,\fi,\fi,\fi,\fi,\fi}
+\DoNotIndex{\input}
+\DoNotIndex{\jobname,\kern,\leavevmode,\let,\leftmark}
+\DoNotIndex{\list,\llap,\long,\m@ne,\m@th,\mark,\markboth,\markright}
+\DoNotIndex{\month,\newcommand,\newcounter,\newenvironment}
+\DoNotIndex{\NeedsTeXFormat,\newdimen}
+\DoNotIndex{\newlength,\newpage,\nobreak,\noindent,\null,\number}
+\DoNotIndex{\numberline,\OldMakeindex,\OnlyDescription,\p@}
+\DoNotIndex{\pagestyle,\par,\paragraph,\paragraphmark,\parfillskip}
+\DoNotIndex{\penalty,\PrintChanges,\PrintIndex,\ProcessOptions}
+\DoNotIndex{\protect,\ProvidesClass,\raggedbottom,\raggedright}
+\DoNotIndex{\refstepcounter,\relax,\renewcommand}
+\DoNotIndex{\rightmargin,\rightmark,\rightskip,\rlap,\rmfamily}
+\DoNotIndex{\secdef,\selectfont,\setbox,\setcounter,\setlength}
+\DoNotIndex{\settowidth,\sfcode,\skip,\sloppy,\slshape,\space}
+\DoNotIndex{\symbol,\the,\trivlist,\typeout,\tw@,\undefined,\uppercase}
+\DoNotIndex{\usecounter,\usefont,\usepackage,\vfil,\vfill,\viiipt}
+\DoNotIndex{\viipt,\vipt,\vskip,\vspace}
+\DoNotIndex{\wd,\xiipt,\year,\z@}
+\DoNotIndex{\next}
+% \end{macrocode}
+%
+% Direct \classname{ltxdoc} to produce an index.
+% \begin{macrocode}
+\AtEndDocument{\PrintIndex\PrintChanges}%
+% \end{macrocode}
+%
+% \subsection{Extension to \LaTeX's \env{filecontents} Environment}
+% We want to
+% coax the version number into \env{filecontents}-generated files.
+% Note that we expect \cmd\fileversion\ and \cmd\filedate\ to
+% hold the needed information. For this to be the case,
+% your document should execute the \cmd\GetFileInfo\ command
+% (as documented in section~\ref{sec:GetFileInfo}) before
+% any instances of \env{filecontents}.
+% \begin{macrocode}
+\makeatletter
+\def\endfilecontents{%
+ \immediate\write\reserved@c{%
+ \string\iffalse\space ltxdoc klootch^^J%
+ \ifx\undefined\fileversion\else
+ \ifx\undefined\filedate\else
+ This file has version number \fileversion, last revised \filedate.%
+ \fi\fi
+ \string\fi
+ }%
+ \immediate\closeout\reserved@c
+ \def\T##1##2##3{%
+ \ifx##1\@undefined\else
+ \@latex@warning@no@line{##2 has been converted to Blank ##3e}%
+ \fi
+ }%
+ \T\L{Form Feed}{Lin}%
+ \T\I{Tab}{Spac}%
+ \immediate\write\@unused{}%
+}%
+\expandafter\let\csname endfilecontents*\endcsname\endfilecontents
+\makeatother
+% \end{macrocode}
+%
+% Alter formatting in arrays; set them tight.
+% \begin{macrocode}
+\setlength\arraycolsep{0pt}%
+% \end{macrocode}
+%
+% \subsection{End of the \file{kernel} {\sc docstrip} module}
+%
+% \begin{macrocode}
+%</kernel>
+% \end{macrocode}
+%
+% \subsection{Tail of the \file{package} {\sc docstrip} module}
+% Here is the remainder of the package code.
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+% Currently, there is little.
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%
+%
+% \section{Font Package for Acrobat Compatability}%
+% The package \classname{acrofont}
+% substitutes Acrobat-standard fonts for Computer Modern where possible,
+% even in math mode.
+% Documents typeset with this package in effect will require as little
+% downloaded font data as possible, but will not be exemplars of
+% fine math typesetting.
+%
+% \subsection{Beginning of the \file{fonts} {\sc docstrip} module}
+% The document class module comprises this and the next
+% four sections.
+% \begin{macro}{\class@base}
+% We define in exactly one spot the base class.
+% Typically that class will be one of \classname{book},
+% \classname{article}, or \classname{report}.
+% The base class effectively defines the use and the markup scheme
+% of the class of documents to be handled by this class.
+%
+% This class is a variant of the standard \LaTeX\ book class:
+% \url{ftp://ctan.tug.org/tex-archive/macros/latex/unpacked}.
+% \begin{macrocode}
+%<*fonts>
+\def\class@name{ltxdocext}%
+\expandafter\ClassInfo\expandafter{\class@name}{%
+ Written for \protect\LaTeXe\space
+ by A. Ogawa (arthur_ogawa at sbcglobal.net)%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Variants on psfonts packages}%
+% The following uses \file{times.sty} from \url{/packages/psnfss/psfonts.dtx}
+% \begin{macrocode}
+\RequirePackage{times}%
+% \end{macrocode}
+%
+% The following uses \file{mathptm.sty} from \url{/packages/psnfss/psfonts.dtx}
+% \begin{macrocode}
+\RequirePackage{mathptm}%
+% \end{macrocode}
+%
+% The following is a customization of \file{ot1ptmcm.fd}.
+% The virtual font referred to here \file{zptmnocmr} is
+% a variant of Sebastian Rahtz's \file{zptmcmr}, but with
+% even more glyphs moved from CM to Acrobat-standard fonts.
+% \begin{macrocode}
+\DeclareFontFamily{OT1}{ptmcm}{}
+\DeclareFontShape{OT1}{ptmcm}{m}{n}{
+ <-> zptmnocmr
+}{}
+\DeclareFontShape{OT1}{ptmcm}{l}{n}{<->ssub * ptmnocm/m/n}{}
+% \end{macrocode}
+%
+% The following is a customization of \file{omlptmcm.fd}
+% The virtual font referred to here \file{zptmnocmrm} is
+% a variant of Sebastian Rahtz's \file{zptmcmrm}, but with
+% even more glyphs moved from CM to Acrobat-standard fonts.
+% \begin{macrocode}
+\DeclareFontFamily{OML}{ptmcm}{\skewchar \font =127}
+\DeclareFontShape{OML}{ptmcm}{m}{it}{
+ <-> zptmnocmrm
+}{}
+\DeclareFontShape{OML}{ptmcm}{l}{it}{<->ssub * ptmcm/m/it}{}
+\DeclareFontShape{OML}{ptmcm}{m}{sl}{<->ssub * ptmcm/m/it}{}
+\DeclareFontShape{OML}{ptmcm}{l}{sl}{<->ssub * ptmcm/m/sl}{}
+% \end{macrocode}
+%
+% The following is a customization of \file{omspzccm.fd}
+% The virtual font referred to here \file{zpzcnocmry} is
+% a variant of Sebastian Rahtz's \file{zpzccmry}, but with
+% even more glyphs moved from CM to Acrobat-standard fonts.
+% \begin{macrocode}
+\DeclareFontFamily{OMS}{pzccm}{}
+\DeclareFontShape{OMS}{pzccm}{m}{n}{
+ <-> zpzcnocmry
+}{}% cmsy10 Symbol Zapf Chancery Medium-Italic Times-Roman
+\DeclareFontShape{OMS}{pzccm}{l}{n}{<->ssub * pzccm/m/n}{}
+% \end{macrocode}
+%
+% The following is a customization of \file{omxpsycm.fd}
+% The virtual font referred to here \file{zpsynocmrv} is
+% a variant of Sebastian Rahtz's \file{zpsycmrv}, but with
+% even more glyphs moved from CM to Acrobat-standard fonts.
+% \begin{macrocode}
+\DeclareFontFamily{OMX}{psycm}{}
+\DeclareFontShape{OMX}{psycm}{m}{n}{
+ <-> zpsynocmrv
+}{}
+\DeclareFontShape{OMX}{psycm}{l}{n}{<->ssub * psycm/m/n}{}
+%
+\DeclareFontEncoding{8r}{}{}% from file: 8renc.def
+\DeclareFontFamily{8r}{cmr}{\hyphenchar\font45 }% from file: 8rcmr.fd
+\DeclareFontShape{8r}{cmr}{m}{n}{
+ <-> cmr10
+}{}
+% \end{macrocode}
+%
+% \subsection{Font definition files}%
+%
+% The following forces \LaTeX\ to do now what it would do anyway:
+% load the `font definition' information for the fonts that we
+% use. In this way, we prepare for faster processing through
+% the \cmd\dump\ of a preformatted macro package that will not
+% need to read in any packages or font definitions from disk.
+% \begin{macrocode}
+\input{8rphv.fd}%
+\input{8rptm.fd}%
+\input{ot1phv.fd}%
+\input{ot1ptm.fd}%
+\input{t1ptm.fd}%
+% \end{macrocode}
+%
+% \subsection{More math substitutions}%
+%
+% The following definitions arrange to get certain glyphs from the
+% text font instead of out of math pi fonts.
+% In particular, the copyright and registered symbols
+% are single glyphs instead of composites involving
+% the big circle from the \file{cmsy} font.
+% \begin{macrocode}
+ \def\eightRChar#1{{\def\encodingdefault{8r}\fontencoding\encodingdefault\selectfont\char"#1}}%
+ \def\LANGLE{$<$}%{\eightRChar{8B}}%
+ \def\RANGLE{$>$}%{\eightRChar{9B}}%
+%\def\ASTER{\eightRChar{2A}}%
+%\def\DAGGER{\eightRChar{86}}%
+%\def\DDAGGER{\eightRChar{87}}%
+ \def\BULLET{\eightRChar{95}}%
+%\def\SECTION{\eightRChar{A7}}%
+%\def\PARAGRAPH{\eightRChar{B6}}%
+ \def\VERTBAR{\eightRChar{7C}}%
+ \def\COPYRIGHT{\eightRChar{A9}}%
+ \def\REGISTERED{\eightRChar{AE}}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \def\textbar{\VERTBAR}%
+ \def\textbullet{\BULLET}%
+ \def\textcopyright{\COPYRIGHT}%
+ \def\textregistered{\REGISTERED}%
+% \end{macrocode}
+%
+% I have removed \cmd\ensuremath\ from the following definition, and
+% all commands like \cmd\mathsection have been converted to
+% e.g., \cmd\textsection.
+% \begin{macrocode}
+\def\@makefnmark{\@thefnmark}%
+\def\@fnsymbol#1{{\ifcase#1\or *\or \dagger\or \ddagger\or
+ \textsection\or \textparagraph\or \|\or **\or \dagger\dagger
+ \or \ddagger\ddagger \else\@ctrerr\fi}}
+% \end{macrocode}
+%
+% \subsection{End of the \file{fonts} {\sc docstrip} module}
+% Here ends the module.
+% \begin{macrocode}
+%</fonts>
+% \end{macrocode}
+%
+%
+% \section{Programming Conventions}%
+% In writing the above code, I cleave to certain conventions, noted
+% here.
+% My goal in explaining them is to encourage others maintaining this
+% body of code to consider following them as well.
+% The benefits are twofold:
+% Some of the coding conventions aim to avoid programming pitfalls;
+% following them reduces maintenance costs.
+% Others make the code easier to read; following these eases the
+% process of understanding how the code works.
+%
+% And, for my part, I prefer to read code of this type.
+%
+% \subsection{Whitespace Conventions}%
+% Exactly where code lines break and indent, and where additional
+% whitespace is inserted is explained here.
+% \begin{itemize}
+% \item
+% Each new macro definition or register assignment begins a new line.
+% Therefore, \cmd\def, \cmd\newcommand, and their ilk will start in column~1.
+% \item
+% Code is indented one space for each level of nesting within braces
+% \verb|{}|.
+% \item
+% Likewise, if possible, for \cmd\if\dots and matching \cmd\fi.
+% \item
+% However, the closing brace or \cmd\fi\ is outdented by one so that it
+% falls
+% at the same level of indentation as its matching brace or \cmd\if,
+% and it appears alone on its line.
+% \item
+% Use of the |tab| character is deprecated
+% (tabs are not standardized across all applications and operating
+% systems).
+% \item
+% Lines of code are limited to 72 characters.
+% I follow this convention mostly to ease the transmission of files
+% via email (a deprecated practice) and to accomodate people with
+% small monitors.
+% But \classname{ltxdoc} output looks better with the shorter lines, too.
+% \item
+% Extraneous whitespace in the replacement part of a macro definition
+% is avoided by using the comment character |%|.
+% In most cases, if falling at the end of a line of code,
+% a brace will be immediately followed by a comment character,
+% as will the macro parameter |#1| and any one-letter control sequence,
+% like |\\|.
+% \item
+% Extraneous whitespace in the package file is also avoided.
+% When \TeX\ reads in the .sty file, it will process \cmd\def s, and other commands,
+% but will not process blank spaces.
+% This practice is simply a discipline. You don't need to do this.
+% But sometimes \TeX\ has to read in a file while it is in horizontal mode,
+% at which point this practice is essential.
+% \end{itemize}
+% These conventions taken together are illustrated by the following:
+% \begin{verbatim}
+%\def\prepdef#1#2{%
+% \@ifxundefined#1{\toks@{}}{\toks@\expandafter{#1}}%
+% \toks@ii{#2}%
+% \edef#1{\the\toks@ii\the\toks@}%
+%}%
+% \end{verbatim}
+% In the above, the definition of \cmd\prepdef\ would not fit on a single
+% line,
+% and required breaking. The first and last lines have matching braces,
+% and are a the same level of indentation, with the last line containing
+% a single brace.
+%
+% Each of the three intervening lines has balanced braces and is
+% indented by one space. Each line that would otherwise end in a single
+% brace character is terminated by a comment character.
+%
+% Some coders rely on the fact that a space character seen by \TeX's
+% scanner while in vertical mode is a no-op.
+% Be that as it may, I eliminate them unless actually intentional.
+%
+% \subsection{Conventions For Procedures}%
+% Here are some of my preferences when writing procedures:
+% \begin{itemize}
+%
+% \item
+% I dislike defining a macro within another macro, especially when the
+% pattern part is non-nil.
+% You know, you are not saving much space in |mem| when you do this,
+% right?
+% You do save space in the hash table and the string pool, though.
+% On the other hand, we are not dealing with small \TeX\ engines
+% anymore; Team \LaTeX\ has made sure of this.
+%
+% \item
+% If two or more macros have very similar replacement parts, consider
+% layering.
+%
+% \item
+% Macros may perform parsing, may maintain tokens or registers, or may
+% set type (produce marks). I try to avoid combining the three functions
+% in a single macro.
+%
+% \item
+% When a procedure both does assignments and sets type, I try to have a
+% clean separations between the two activities. Try to avoid:
+% \begin{verbatim}
+% \vskip10pt
+% \parindent=0pt
+% \leavevmode
+% \end{verbatim}
+%
+% \item
+% The Boolean calculus (cf. \cmd\@ifx)
+% is very useful and produces code that executes nicely.
+% Using it also helps avoid your having to debug problems where
+% \cmd\if\dots\ and \cmd\fi\ are not properly balanced
+% (a nightmare, in case you have not already experienced it).
+%
+% \end{itemize}
+%
+% \subsection{Conventions For \LaTeX}%
+% Team \LaTeX\ make certain recommendations in \file{clsguide.tex}.
+% Ones that I particularly pay attention to are:
+% \begin{itemize}
+%
+% \item
+% For the sake of ``color safety'',
+% use \cmd\sbox\ rather than \cmd\setbox, \cmd\mbox\ rather than \cmd\hbox, and
+% \cmd\parbox\ or \env{minipage} rather than \cmd\vbox.
+%
+% \item
+% Use \cmd\newcommand\ and \cmd\newenvironment\ to declare user-level commands
+% and environments. Avoid the idiom \cmd\def\cmd\foo, \cmd\def\cmd\endfoo\ to define
+% an environment.
+% Ideally, all user-level markup could be extracted from the
+% document class by grepping on \cmd\newcommand\ and \cmd\newenvironment.
+%
+% \item
+% Prefer to use \cmd\setlength\ to assign registers.
+%
+% \end{itemize}
+% I cannot help but notice that much of the code of \LaTeX\ itself fails
+% to comply with many of the coding recommendations of Team \LaTeX.
+%
+% \Finale
+% \iffalse Here ends the programmer's documentation.\fi
+% \endinput
+%
+\endinput
+%%EOF
diff --git a/obsolete/macros/latex/contrib/revtex4-1/source/latex/revtex/ltxfront.dtx b/obsolete/macros/latex/contrib/revtex4-1/source/latex/revtex/ltxfront.dtx
new file mode 100644
index 0000000000..bfa322ea89
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/source/latex/revtex/ltxfront.dtx
@@ -0,0 +1,3765 @@
+% \iffalse meta-comment balanced on line 108
+% ltxfront.dtx: package to change page grid, MVL.
+% Copyright (c) 2009 Arthur Ogawa
+%
+% Disclaimer
+% This file is distributed WITHOUT ANY WARRANTY;
+% without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+% License
+% You may distribute this file under the conditions of the
+% LaTeX Project Public License 1.3 or later
+% (http://www.latex-project.org/lppl.txt).
+% ReadMe
+% For the documentation and more detailed instructions for
+% installation, typeset this document with \LaTeX.
+% Maintenance Status
+% This work has the LPPL maintenance status "maintained";
+% Current Maintainer of this work is Arthur Ogawa.
+%
+% This work consists of the main source file ltxfront.dtx
+% and the derived files
+% ltxfront.sty, ltxfront.pdf
+% Distribution:
+% CTAN:macros/latex/contrib/revtex/
+%
+% Unpacking:
+% tex ltxfront.dtx
+%
+% Documentation:
+% latex ltxfront.dtx; ...
+%
+% Programm calls to get the documentation (example):
+% pdflatex ltxfront.dtx
+% makeindex -s gind.ist ltxfront.idx
+% makeindex -s gglo.ist -o ltxfront.gls ltxfront.glo
+% pdflatex ltxfront.dtx
+% makeindex -s gind.ist ltxfront.idx
+% pdflatex ltxfront.dtx
+%
+% Installation:
+% TDS:doc/latex/revtex/
+% TDS:source/latex/revtex/
+% TDS:tex/latex/revtex/
+%
+% Thanks, Heiko!
+% This method of letting a single .dtx file serve as both
+% documentation (via latex) and installer (via tex) follows
+% the example of Heiko Oberdiek. Thanks!
+%<*ignore>
+\begingroup
+ \def\x{LaTeX2e}%
+\expandafter\endgroup
+\ifcase
+ 0\expandafter\ifx\csname processbatchFile\endcsname\relax\else1\fi\ifx\fmtname\x\else 1\fi
+ \relax
+\else
+ \csname fi\endcsname
+%</ignore>
+%<*install>
+%% This file will generate documentation and runtime files
+%% from ltxfront.dtx when run through LaTeX or TeX.
+\input docstrip
+\preamble
+
+This is a generated file;
+altering it directly is inadvisable;
+instead, modify the original source file.
+See the URL in the file 00readme.tex.
+
+License
+ You may distribute this file under the conditions of the
+ LaTeX Project Public License 1.3 or later
+ (http://www.latex-project.org/lppl.txt).
+
+ This file is distributed WITHOUT ANY WARRANTY;
+ without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE.
+
+\endpreamble
+\askforoverwritefalse
+\keepsilent
+ \generate{%
+ %{ignore}
+% \usedir{tex/latex/revtex}%
+ \file{ltxfront.sty}{%
+ \from{ltxfront.dtx}{package,options,kernel}%
+ }%
+ }%
+\ifToplevel{
+\Msg{***********************************************************}
+\Msg{*}
+\Msg{* To finish the installation, please move}
+\Msg{* ltxfront.sty}
+\Msg{* into a directory searched by TeX;}
+\Msg{* in a TDS-compliant installation:}
+\Msg{* texmf/tex/macros/latex/revtex/.}
+\Msg{*}
+\Msg{* To produce the documentation,
+ run ltxfront.dtx through LaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing}
+\Msg{***********************************************************}
+}
+\endbatchfile
+%</install>
+%<*ignore>
+\fi
+%</ignore>
+% \fi
+%
+% \GetFileInfo{ltxfront.dtx}\CheckSum{2094}
+%
+% \iffalse ltxdoc klootch
+%<*package>
+%%% @LaTeX-file{
+%%% filename = "ltxfront.dtx",
+%%% version = "4.1r",
+%%% date = "2010/07/25",
+%%% time = "20:33:00 UT-8",
+%%% checksum = "2012",
+%%% author = "Arthur Ogawa (mailto:arthur_ogawa at sbcglobal.net),
+%%% commissioned by the American Physical Society.
+%%% ",
+%%% copyright = "Copyright (C) 1999, 2009 Arthur Ogawa,
+%%% distributed under the terms of the
+%%% LaTeX Project Public License, see
+%%% ftp://ctan.tug.org/macros/latex/base/lppl.txt
+%%% ",
+%%% address = "Arthur Ogawa,
+%%% USA",
+%%% telephone = "",
+%%% FAX = "",
+%%% email = "mailto colon arthur_ogawa at sbcglobal.net",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "latex, page grid, main vertical list",
+%%% supported = "yes",
+%%% abstract = "package to change page grid, MVL",
+%%% docstring = "The checksum field above generated by ltxdoc",
+%%% }
+%</package>
+% \fi
+%
+% \iffalse ltxdoc klootch
+% The following references the \file{00readme} file,
+% which contains basic information about this package.
+% The contents of this file are generated when
+% you typeset the programmer's documentation.
+% Search on "{filecontents*}{00readme.tex}" to locate it.
+% \fi\input{00readme}%
+%
+% \subsection{Bill of Materials}
+%
+% Following is a list of the files in this distribution arranged
+% according to provenance.
+%
+% \subsubsection{Primary Source}%
+% One single file generates all.
+%\begin{verbatim}ltxfront.dtx\end{verbatim}
+%
+% \subsubsection{Generated by \texttt{latex ltxfront.dtx}}%
+% Typesetting the source file under \LaTeX\
+% generates the readme and the documentation.
+%\begin{verbatim}00readme\end{verbatim}
+%
+% \subsubsection{Generated by \texttt{tex ltxfront.dtx}}%
+% Typesetting the installer generates
+% the package files.
+%\begin{verbatim}ltxfront.sty\end{verbatim}
+%
+% \subsubsection{Documentation}%
+% The following are the online documentation:
+% \begin{verbatim}ltxfront.pdf\end{verbatim}
+%
+% \subsubsection{Auxiliary}%
+% The following are auxiliary files generated
+% in the course of running \LaTeX:
+% \begin{verbatim}ltxfront.aux ltxfront.idx ltxfront.ind ltxfront.log ltxfront.toc\end{verbatim}
+%
+% \section{Code common to all modules}%
+%
+% We want to require only one place in this file
+% where the version number is stated,
+% and we also want to ensure that the version
+% number is embedded into every generated file.
+%
+% Now we declare that
+% these files can only be used with \LaTeXe.
+% An appropriate message is displayed if
+% a different \TeX{} format is used.
+% \begin{macrocode}
+%<*doc|package>
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]%
+%</doc|package>
+% \end{macrocode}
+% As desired, the following modules all
+% take common version information:
+% \begin{macrocode}
+%<kernel&!package&!doc>\typeout{%
+%<*package|doc>
+\ProvidesFile{%
+%</package|doc>
+%<*kernel|package|doc>
+ltxfront%
+%</kernel|package|doc>
+%<*doc>
+.dtx%
+%</doc>
+%<package>.sty%
+%<*package|doc>
+}%
+%</package|doc>
+% \end{macrocode}
+%
+% The following line contains, for once and for all,
+% the version and date information.
+% By various means, this information is reproduced
+% consistently in all generated files and in the
+% typeset documentation.
+% \begin{macrocode}
+%<*doc|package|kernel>
+%<version>
+ [2010/07/25/20:33:00 4.1r frontmatter package (AO,DPC)]% \fileversion
+%</doc|package|kernel>
+%<kernel&!package&!doc>}%
+% \end{macrocode}
+%
+%
+% \section{The doc module \texttt{doc}}
+%
+% This module, consisting of the present section,
+% typesets the programmer's documentation,
+% generating the \file{00readme} and sample document as needed.
+%
+% Because the only uncommented-out lines of code at the beginning of
+% this file constitute the \file{doc} module itself,
+% we can simply typeset the \file{.dtx} file directly,
+% and there is thus rarely any need to
+% generate the ``doc'' {\sc docstrip} module.
+% Module delimiters are nonetheless required so that
+% this code does not find its way into the other modules.
+%
+% The \enve{document} command concludes the typesetting run.
+%
+% \begin{macrocode}
+%<*doc>
+% \end{macrocode}
+%
+% \subsection{The Preamble}
+% The programmers documentation is formatted
+% with the \classname{ltxdoc} class with local customizations,
+% and with the usual code line indexing.
+% \begin{macrocode}
+\documentclass{ltxdoc}
+\RequirePackage{ltxdocext}%
+\let\url\undefined
+\RequirePackage[colorlinks=true,linkcolor=blue]{hyperref}%
+\expandafter\ifx\csname package@font\endcsname\@undefined\else
+ \expandafter\RequirePackage\expandafter{\csname package@font\endcsname}%
+\fi
+\CodelineIndex\EnableCrossrefs % makeindex -s gind.ist ltxfront
+\RecordChanges % makeindex -s gglo.ist -o ltxfront.gls ltxfront.glo
+% \end{macrocode}
+%
+% \subsubsection{Docstrip and info directives}
+% We use so many {\sc docstrip} modules that we set the
+% \texttt{StandardModuleDepth} counter to 1.
+% \begin{macrocode}
+\setcounter{StandardModuleDepth}{1}
+% \end{macrocode}
+% The following command retrieves the date and version information
+% from this file.
+% \begin{macrocode}
+\expandafter\GetFileInfo\expandafter{\jobname.dtx}%
+% \end{macrocode}
+%
+% \subsection{The ``Read Me'' File}
+% As promised above, here is the contents of the
+% ``Read Me'' file. That file serves a double purpose,
+% since it also constitutes the beginining of the
+% programmer's documentation. What better thing, after
+% all, to have appear at the beginning of the
+% typeset documentation?
+%
+% A good discussion of how to write a ReadMe file can be found in
+% Engst, Tonya, ``Writing a ReadMe File? Read This''
+% \emph{MacTech} October 1998, p. 58.
+%
+% Note the appearance of the
+% \cmd\StopEventually\ command, which marks the
+% dividing line between the user documentation
+% and the programmer documentation.
+%
+% The usual user will not be asked to
+% do a full build, not to speak
+% of the bootstrap.
+% Instructions for carrying these processes
+% begin the programmer's manual.
+%
+% \begin{macrocode}
+\begin{filecontents*}{00readme.tex}
+\title{%
+ A \LaTeX\ Package for\\the frontmatter and title page%
+ \thanks{%
+ This file has version number \fileversion,
+ last revised \filedate.%
+ }%
+ \thanks{%
+ Version \fileversion\ \copyright\ 2009 The American Physical Society
+ }%
+}%
+
+\author{%
+ Arthur Ogawa%
+ \thanks{\texttt{mailto:arthur\_ogawa at sbcglobal.net}}%
+}%
+%\iffalse
+% For version number and date,
+% search on "\fileversion" in the .dtx file,
+% or see the end of the 00readme file.
+%\fi
+\maketitle
+
+This file embodies the \classname{ltxfront} package,
+the implementation and its user documentation.
+
+The distribution point for this work is
+\url{http://publish.aps.org/revtex},
+which contains fully unpacked, prebuilt runtime files and documentation.
+
+The \classname{ltxfront} package was commissioned by the American Physical Society
+and is distributed under the terms of the \LaTeX\ Project Public License,
+the same license under which all the portions of \LaTeX\ itself is distributed.
+Please see \url{http://ctan.tug.org/macros/latex/base/lppl.txt} for details.
+
+To use this document class, you must have a working
+\TeX\ installation equipped with \LaTeXe\
+and possibly pdftex and Adobe Acrobat Reader or equivalent.
+
+To install, retrieve the distribution,
+unpack it into a directory on the target computer,
+and move the file \file{ltxfront.sty}
+into a location in your filesystem where it will be found by \LaTeX.
+
+To use, read the user documentation \file{ltxfront.pdf}.
+
+\tableofcontents
+
+\section{Processing Instructions}
+
+The package file \file{ltxfront.sty}
+is generated from this file, \file{ltxfront.dtx},
+using the {\sc docstrip} facility of \LaTeX
+via |tex ltxfront.dtx|.
+The typeset documentation that you are now reading is generated from
+the same file by typesetting it with \LaTeX\ or pdftex
+via |latex ltxfront.dtx| or |pdflatex ltxfront.dtx|.
+
+\subsection{Build Instructions}
+
+You may bootstrap this suite of files solely from \file{ltxfront.dtx}.
+Prepare by installing \LaTeXe\ (and either tex or pdftex) on your computer,
+then carry out the following steps:
+\begin{enumerate}
+
+\item
+Within an otherwise empty directory,
+typeset \file{ltxfront.dtx} with \TeX\ or pdftex,
+thereby generating the package file \file{ltxfront.sty}.
+
+\item
+Next typeset \file{ltxfront.dtx} with \LaTeX\ or pdflatex;
+you will obtain the typeset documentation you are now reading,
+along with
+the sample document \file{ltxfront-test.tex}
+and the file \file{00readme}.
+
+Note: you will have to run \LaTeX, then
+\file{makeindex} \texttt{-s gind.ist ltxfront.idx}, then
+\file{makeindex} \texttt{-s gglo.ist -o ltxfront.gls ltxfront.glo}, then
+\LaTeX\ again in order to obtain a valid index and table of contents.
+\item
+Now typeset \file{ltxfront.dtx} with \TeX (not \LaTeX),
+thereby generating the package file \file{ltxfront.sty}.
+\item
+Install the following files into indicated locations within your
+TDS-compliant \texttt{texmf} tree (you may need root access):
+\begin{itemize}
+\item
+\file{$TEXMF/}\file{tex/}\file{latex/}\file{revtex/}\classname{ltxfront.sty}
+\item
+\file{$TEXMF/}\file{source/}\file{latex/}\file{revtex/}\classname{ltxfront.dtx}
+\item
+\file{$TEXMF/}\file{doc/}\file{latex/}\file{revtex/}\classname{ltxfront.pdf}
+\end{itemize}
+where \file{$TEXMF/} stands for \file{texmf-local/}, or some other \texttt{texmf} tree
+in your installation.
+\item
+Run \texttt{mktexlsr} on \file{$TEXMF/} (you may need root access).
+\item
+Build and installation are now complete;
+now put a \cmd\usepackage\texttt{\{ltxfront\}} in your document preamble!
+\end{enumerate}
+
+\subsection{Change Log}
+\changes{4.0b}{1999/06/20}{Change handling of \cs{@author} to prevent parsing problems. (Helps in error recovery when syntax errors exist)}
+\changes{4.0b}{1999/06/20}{Gathered all code for the abstract environment together and abstracted out the formatting details for journals to override.}
+\changes{4.0b}{1999/06/20}{Separate option now controls production}
+\changes{4.0b}{1999/06/20}{Set \cs{footnote} to \LaTeX\ standard version for this scope.}
+\changes{4.0c}{1999/11/13}{grid changes with ltxgrid}
+\changes{4.0d}{1998/01/31}{\cs{comma@space}}
+\changes{4.0d}{1998/01/31}{change name from \cs{tempaffiliation}}
+\changes{4.0d}{1998/01/31}{hookify}
+\changes{4.0d}{1998/01/31}{If empty \cs{abstractname} omit spacing}
+\changes{4.0d}{1998/01/31}{PACS boxed to width of abstract}
+\changes{4.0e}{2000/09/20}{Keywords on same footing as PACS}
+\changes{4.0e}{2000/09/20}{Warn if no production}
+\changes{4.0f}{2001/02/13}{Actually append \cs{AU@grp} to \cs{@AAClist}.}
+\changes{4.0g}{1998/06/10}{multiple preprint commands}
+\changes{4.0h}{1998/06/25}{Changes to support groups of affiliations}
+\changes{4.0h}{1998/06/25}{new hook}
+\changes{4.0l}{1998/09/01}{add optional argument handling back}
+\changes{4.0l}{1998/09/01}{Changes to add collaboration processing, which now means doing comma/and processing on each sublist}
+\changes{4.0l}{1998/09/01}{macro added}
+\changes{4.1a}{2008-06-30}{(AO, 443) create an entry in the PDF bookmarks for the abstract via the toc}
+\changes{4.1a}{2008-07-01}{(AO, 496) remove default prependation to \cs{email}.}
+\changes{4.1a}{2008-07-01}{(AO, 496) remove default prependation to \cs{homepage}.}
+\changes{4.1a}{2008/06/16}{removed code that had been commented out}
+\changes{4.1b}{2008/06/29}{(AO, 455) provide a \texttt{description} environment for the abstract}
+\changes{4.1b}{2008/08/02}{(AO, 486) \cs{collaboration} to work with \texttt{groupedaddress}}
+\changes{4.1b}{2008/08/02}{Change csname \cs{AFS@opr} to \cs{AFG@opr}}
+\changes{4.1b}{2008/08/02}{Make the syntax of this package switch optional}%
+\changes{4.1b}{2008/08/02}{Provide for diagnostics via \cs{frontmatterverbose@sw}}
+\changes{4.1b}{2008/08/02}{Use \cs{@affil@def} for all access to \cs{@affil}}
+\changes{4.1b}{2008/08/02}{Use \cs{frontmatter@init} as the vehicle for all initialization}
+\changes{4.1b}{2008/08/04}{(AO, 443) PDF Bookmark for title page}%
+\changes{4.1b}{2008/08/04}{Provide facility \cs{affil@cutoff}: if there is only one affiliation on the title page, no superscript}%
+\changes{4.1c}{2008/08/04}{Hyperref compatibility: take \cs{maketitle} back.}
+\changes{4.1c}{2008/08/04}{Parametrize the production after the address}%
+\changes{4.1c}{2008/08/04}{Produce PACS, keywords only if specified}%
+\changes{4.1d}{2008/10/17}{(AO, 410) compare \cs{@tempa} to \cs{blankaffiliation}.}%
+\changes{4.1f}{2009/07/07}{(AO, 515) Use \cs{set@footnotefont}, which is defined in ltxutil}
+\changes{4.1g}{2009/10/05}{(AO, 535) Robustify \cs{footnote} while \cs{class@warn} is expanding its argument}
+\changes{4.1g}{2009/10/05}{(AO, 539) Robustify \cs{class@warn} against TOC processing}%
+\changes{4.1i}{2009/10/18}{(AO, 540) More runtime diagnostics via \cs{frontmatterverbose@sw}}
+\changes{4.1i}{2009/10/23}{(AO, 540) Rationalize code that appends to \cs{AF@grp}}
+\changes{4.1i}{2009/10/23}{(AO, 540) Optimize boolean logic }
+\changes{4.1i}{2009/10/23}{(AO, 544) Class options runinaddress and unsortedaddress stopped working}
+\changes{4.1m}{2009/11/20}{(AO, 563) \cs{collaboration} to work with both \texttt{groupedaddress} and \texttt{superscriptaddress}}
+\changes{4.1m}{2009/11/20}{(AO, 563) More complete runtime diagnostics via \cs{frontmatterverbose@sw}}
+\changes{4.1m}{2009/11/20}{(AO, 563) Let \cs{@collaboration@gobble} parse all three arguments of \cs{CO@opr}}
+\changes{4.1n}{2009/11/30}{(AO, 567) Handle \cs{noaffiliation} case}
+\changes{4.1n}{2009/11/30}{(AO, 567) Handle punctuation for \classoption{superscriptaddress} style authors' extra information, such as \cs{email}}
+\changes{4.1n}{2009/12/03}{(AO) remove http:// from \cs{href} call}
+\changes{4.1n}{2010/01/02}{(AO, 571) Interface \cs{set@footnotewidth} for determining the set width of footnotes}%
+\changes{4.1n}{2010/01/02}{(AO, 571) allow split after last line of footnote}%
+\changes{4.1n}{2010/01/02}{(AO, 572) Independent footnote counter for title block. Abstract footnote counter shared with body.}%
+
+\end{filecontents*}
+% \end{macrocode}
+%
+% \subsection{A Gnuly Created Sample Document}
+%
+% \begin{macrocode}
+\begin{filecontents*}{ltxfront-test.tex}
+\documentclass{article}% use any combination of titlepage, twocolumn
+\usepackage[]{ltxfront}% use inactive to turn off features
+\begin{document}
+
+\title{Gnu Veldt Cuisine}
+
+\author{G. Picking}
+\thanks{Supported by a grant from the GSF.}
+\affiliation{Acme Kitchen Products}
+
+\author{R. Dillo}
+\thanks{On leave during 1985.}
+\affiliation{Cordon Puce School}
+
+\date{24 July 1984}%
+\revised{5 January 1985}%
+
+\maketitle
+
+\section{Introduction}%
+We reproduce most features of \LaTeX\ manual, Figure C.4, p. 183.
+\end{document}
+\end{filecontents*}
+% \end{macrocode}
+%
+% \subsection{The Document Body}
+%
+% Here is the document body, containing only a
+% \cmd\DocInput\ directive---referring to this very file.
+% This very cute self-reference is a common \classname{ltxdoc} idiom.
+% \begin{macrocode}
+\begin{document}%
+\expandafter\DocInput\expandafter{\jobname.dtx}%
+% ^^A\PrintChanges
+\end{document}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</doc>
+% \end{macrocode}
+%
+% \section{Using this package}
+% Once this package is installed on your filesystem, you can employ it in
+% adding functionality to \LaTeX\ by invoking it in your document or document class.
+%
+% \subsection{Invoking the package}
+% In your document, you can simply call it up in your preamble:
+% \begin{verbatim}
+%\documentclass{book}%
+%\usepackage{ltxfront}%
+%\begin{document}
+%<your document here>
+%\end{document}\end{verbatim}
+% However, the preferred way is to invoke this package from within your
+% customized document class:
+% \begin{verbatim}
+%\NeedsTeXFormat{LaTeX2e}[1995/12/01]%
+%\ProvidesClass{myclass}%
+%\RequirePackage{ltxfront}%
+%\LoadClass{book}%
+%<class customization commands>
+%\endinput\end{verbatim}
+%
+% Once loaded, the package gives you acccess to certain procedures,
+% usually to be invoked by a \LaTeX\ command or environment.
+%
+% \section{Frontmatter commands}
+%
+% A document using this package will use commands like \cmd\title, \cmd\author, \cmd\thanks,
+% the \texttt{abstract} environment
+% and \cmd\maketitle.
+% These are part of \LaTeX's standard document classes.
+% But this package supplements \LaTeX\ syntax with additional commands, such as
+% \cmd\affiliation, \cmd\collaboration, \cmd\email, \cmd\homepage, and others.
+%
+% Furthermore, you can have multiple \cmd\author, \cmd\affiliation, and \cmd\collaboration\ commands,
+% each with their own set of \cmd\email, \cmd\homepage, etc. commands.
+%
+% \section{The Front Matter}\label{sec:front}
+%
+% This section describes the macros
+% this package provides for formatting the front matter of an
+% article. The behavior and usage of these macros can be quite
+% different from those provided in \LaTeXe.
+%
+% \subsection{Setting the title}
+%
+% The title of the manuscript is simply specified by using the
+% \cmd\title\arg{title} macro. A \verb+\\+ may be used to put a line
+% break in a long title.
+% The \cmd\title\ commnd takes an optional argument, which you will use to
+% give an abbreviated title for use in the running header.
+%
+% \subsection{Specifying a date}%
+%
+% The \cmd\date\marg{date} command outputs the date on the manuscript.
+% Using \cmd\today\ will cause \LaTeX{} to insert the
+% current date whenever the file is run:
+% \begin{verbatim}\date{\today}\end{verbatim}
+%
+% \subsection{Specifying authors and affiliations}
+%
+% Commands specifying author and affilliation have been improved to save
+% labor for authors and in production. Authors and affiliations are
+% arranged into groupings called, appropriately enough, \emph{author
+% groups}. Each author group is a set of authors who share the same set
+% of affiliations. Author names are specified with the \cmd\author\
+% macro while affiliations (or addresses) are specified with the
+% \cmd\affiliation\ macro. Author groups are specified by sequences of
+% \cmd\author\ macros followed by \cmd\affiliation\ macros. An
+% \cmd\affiliation\ macro applies to all previously specified
+% \cmd\author\ macros which don't already have an affiliation supplied.
+%
+% For example, if Bugs Bunny and Roger Rabbit are both at Looney Tune
+% Studios, while Mickey Mouse is at Disney World, the markup would be:
+% \begin{verbatim}
+% \author{Bugs Bunny}
+% \author{Roger Rabbit}
+% \affiliation{Looney Tune Studios}
+% \author{Mickey Mouse}
+% \affiliation{Disney World}\end{verbatim}
+% The default is to display this as
+% \begin{center}
+% Bugs Bunny and Roger Rabbit\\
+% \emph{Looney Tune Studios}\\
+% Mickey Mouse\\
+% \emph{Disney World}\\
+% \end{center}
+% This layout style for displaying authors and their affiliations is
+% chosen by selecting the class option
+% \classoption{groupedaddress}. This option is the default for all APS
+% journal styles, so it does not need to be specified explicitly.
+% The other major way of displaying this
+% information is to use superscripts on the authors and
+% affiliations. This can be accomplished by selecting the class option
+% \classoption{superscriptaddress}. To achieve the display
+% \begin{center}
+% Bugs Bunny,$^{1}$ Roger Rabbit,$^{1,2}$ and Mickey Mouse$^{2}$\\
+% \emph{$^{1}$Looney Tune Studios}\\
+% \emph{$^{2}$Disney World}\\
+% \end{center}
+% one would use the markup
+% \begin{verbatim}
+% \author{Bugs Bunny}
+% \affiliation{Looney Tune Studios}
+% \author{Roger Rabbit}
+% \affiliation{Looney Tune Studios}
+% \affiliation{Disney World}
+% \author{Mickey Mouse}
+% \affiliation{Disney World}\end{verbatim}
+%
+% Note that this package takes care of any commas and \emph{and}'s that join
+% the author names together and font selection, as well as any
+% superscript numbering. Only the author names and affiliations should
+% be given within their respective macros.
+%
+% There is a third class option, \classoption{unsortedaddress}, for
+% controlling author/affiliation display. The default
+% \classoption{groupedaddress} will actually sort authors into the
+% approriate author groups if one chooses to specify an affiliation for
+% each author. The markup:
+% \begin{verbatim}
+% \author{Bugs Bunny}
+% \affiliation{Looney Tune Studios}
+% \author{Mickey Mouse}
+% \affiliation{Disney World}
+% \author{Roger Rabbit}
+% \affiliation{Looney Tune Studios}\end{verbatim}
+% will result in the same display as for the first case given
+% above even though Roger Rabbit is specified after Mickey Mouse. To
+% avoid Roger Rabbit being moved into the same author group as Bugs
+% Bunny, use the
+% \classoption{unsortedaddress} option instead. In general, it is safest
+% to list authors in the order they should appear and specify
+% affiliations for multiple authors rather than one at a time. This will
+% afford the most independence for choosing the display option. Finally,
+% it should be mentioned that the affiliations for the
+% \classoption{superscriptaddress} are presented and numbered
+% in the order that they are encountered. This means that the order
+% will usually follow the order of the authors. An alternative ordering
+% can be forced by including a list of \cmd\affiliation\ commands before
+% the first \cmd{\author} in the desired order. Then use the exact same
+% text for each affilation when specifying them for each author.
+%
+% If an author doesn't have an affiliation, the \cmd\noaffiliation\
+% macro may be used in the place of an \cmd\affiliation\ macro.
+%
+%
+% \subsubsection{Collaborations}
+%
+% A collaboration name can be specified with the \cmd\collaboration\
+% command. This is very similar to the \cmd\author\ command.
+% It should appear at the end of an author group.
+% The collaboration name will appear centered in parentheses.
+% You may have multiple author groups, each with its own \cmd\collaboration.
+% Because collaborations don't normally have affiliations, one needs to follow the
+% \cmd\collaboration\ with \cmd\noaffiliation.
+%
+% \subsubsection{Footnotes for authors, collaborations, affiliations or title}\label{sec:footau}
+%
+% Often one wants to specify additional information associated with an
+% author, collaboration, or affiliation such an e-mail address, an
+% alternate affiliation, or some other ancillary information.
+% This package introduces several new macros just for this purpose. They
+% are:
+% \begin{itemize}
+% \item\cmd\email\oarg{optional text}\arg{e-mail address}
+% \item\cmd\homepage\oarg{optional text}\arg{URL}
+% \item\cmd\altaffiliation\oarg{optional text}\arg{affiliation}
+% \item\cmd\thanks\arg{miscellaneous text}
+% \end{itemize}
+% In the first three, the \emph{optional text} will be prepended before the
+% actual information specified in the required argument. \cmd\email\ and
+% \cmd\homepage\ each have a default text for their optional arguments
+% (`Electronic address:' and `URL:' respectively). The \cmd\thanks\
+% macro should only be used if one of the other three do not apply. Any
+% author name can have multiple instances of these four commands.
+% Note that unlike the
+% \cmd\affiliation\ macro, these macros only apply to the \cmd\author\
+% that directly precedes it. Any \cmd\affiliation\ \emph{must} follow
+% the other author-specific macros. A typical usage might be as follows:
+% \begin{verbatim}
+% \author{Bugs Bunny}
+% \email[E-mail me at: ]{bugs@looney.com}
+% \homepage[Visit: ]{http://looney.com/}
+% \altaffiliation[Permanent address: ]
+% {Warner Brothers}
+% \affiliation{Looney Tunes}\end{verbatim}
+% This would result in the footnote ``E-mail me at: \texttt{bugs@looney.com},
+% Visit: \texttt{http://looney.com/}, Permanent address: Warner
+% Brothers'' being attached to Bugs Bunny. Note that:
+% \begin{itemize}
+% \item Only an e-mail address, URL, or affiliation should go in the
+% required argument in the curly braces.
+% \item The font is automatically taken care of.
+% \item An explicit space is needed at the end of the optional text if one is
+% desired in the output.
+% \item Use the optional arguments to provide customized
+% text only if there is a good reason to.
+% \end{itemize}
+%
+% The \cmd\collaboration\ , \cmd\affiliation, or even \cmd\title\ can
+% also have footnotes attached via these commands. If any ancillary data
+% (\cmd\thanks, \cmd\email, \cmd\homepage, or
+% \cmd\altaffiliation) are given in the wrong context (e.g., before any
+% \cmd\title, \cmd\author, \cmd\collaboration, or \cmd\affiliation\
+% command has been given), then a warning is given in the \TeX\ log, and
+% the command is ignored.
+%
+% Duplicate sets of ancillary data are merged, giving rise to a single
+% shared footnote. However, this only applies if the ancillary data are
+% identical: even the order of the commands specifying the data must be
+% identical. Thus, for example, two authors can share a single footnote
+% indicating a group e-mail address.
+%
+% Duplicate \cmd\affiliation\ commands may be given in the course of the
+% front matter, without the danger of producing extraneous affiliations
+% on the title page. However, ancillary data should be specified for
+% only the first instance of any particular institution's
+% \cmd\affiliation\ command; a later instance with different ancillary
+% data will result in a warning in the \TeX\ log.
+%
+% It is preferable to arrange authors into
+% sets. Within each set all the authors share the same group of
+% affiliations. For each author, give the \cmd\author\ (and appropriate
+% ancillary data), then follow this author group with the needed group
+% of \cmd\affiliation\ commands.
+%
+% If affiliations have been listed before the first
+% \cmd\author\ macro to ensure a particular ordering, be sure
+% that any later \cmd\affiliation\ command for the given institution is
+% an exact copy of the first, and also ensure that no ancillary data is
+% given in these later instances.
+%
+%
+% A journal may determine the placement of these
+% ancillary information footnotes. One journal may put all
+% such footnotes at the start of the bibliography while another
+% journal may display them on the first page, as a footnote. One can override a
+% journal style's default behavior by specifying explicitly the class
+% option
+% \classoption{bibnotes} (puts the footnotes at the start of the
+% bibliography) or \classoption{nobibnotes} (puts them on the first page).
+%
+% \subsubsection{Specifying first names and surnames}
+%
+% Many authors have names in which either the surname appears first
+% or in which the surname is made up of more than one name. To ensure
+% that such names are accurately captured for indexing and other
+% purposes, the \cmd\surname\ macro should be used to indicate which portion
+% of a name is the surname. Similarly, there is a \cmd\firstname\ macro
+% as well, although usage of \cmd\surname\ should be sufficient. If an
+% author's surname is a single name and written last, it is not
+% necessary to use these macros. These macros do nothing but indicate
+% how a name should be indexed. Here are some examples;
+% \begin{verbatim}
+% \author{Andrew \surname{Lloyd Weber}}
+% \author{\surname{Mao} Tse-Tung}\end{verbatim}
+%
+% \subsection{The abstract}
+% An abstract for a paper is specified by using the \env{abstract}
+% environment:
+% \begin{verbatim}
+% \begin{abstract}
+% Text of abstract
+% \end{abstract}\end{verbatim}
+% Note that with this package, the abstract must be specified before the
+% \cmd\maketitle\ command, and there is no need to embed it in an explicit
+% minipage environment.
+%
+% \subsection{PACS codes}
+% Some authors are asked to supply suggested PACS codes with their
+% submissions. The \cmd\pacs\ macro is provided as a way to do this:
+% \begin{verbatim}\pacs{23.23.+x, 56.65.Dy}\end{verbatim}
+% The actual display of the PACS numbers below the abstract is
+% controlled by two class options: \classoption{showpacs} and
+% \classoption{noshowpacs}. In particular, this is now independent of
+% the \classoption{preprint} option. \classoption{showpacs} must be
+% explicitly included in the class options to display the PACS codes.
+%
+% \subsection{Keywords}
+% A \cmd\keywords\ macro may also be used to indicate keywords for the
+% article.
+% \begin{verbatim}\keywords{nuclear form; yrast level}\end{verbatim}
+% This will be displayed below the abstract and PACS (if supplied). Like
+% PACS codes, the actual display of the the keywords is controlled by
+% two classoptions: \classoption{showkeys} and
+% \classoption{noshowkeys}. An explicit \classoption{showkeys} must be
+% included in the \cmd\documentclass\ line to display the keywords.
+%
+% \subsection{Institutional report numbers}
+% Institutional report numbers can be specified using the \cmd\preprint\
+% macro. These will be displayed in the upper lefthand corner of the
+% first page. Multiple \cmd\preprint\ macros may be supplied (space is
+% limited though, so only three or less may actually fit).
+%
+% \subsection{maketitle}
+% After specifying the title, authors, affiliations, abstract, PACS
+% codes, and report numbers, the final step for formatting the front
+% matter of the manuscript is to issue the \cmd\maketitle\ command:
+% \begin{verbatim}\maketitle\end{verbatim}
+% This command must follow all of the macros listed above.
+% The macro will format the front matter in accordance with the various
+% class options that were specified in the
+% \cmd\documentclass\ line (either implicitly through defaults or
+% explicitly).
+%
+%
+% \section{Compatability with \LaTeX's Required Packages}
+% Certain packages, usually ones written by members of the
+% \LaTeX\ Project itself, have been designated ``required'' and
+% are distributed as part of standard \LaTeX.
+% These packages have been placed in a priviledged position
+% vis \'a vis the \LaTeX\ kernel in that they override the definitions of certain kernel macros.
+%
+% The \classname{ltxfront} package will be incompatible with any package that
+% redefines any of the kernel macros that \classname{ltxfront} patches---if that
+% package is loaded \emph{after} \classname{ltxfront}.
+%
+% Hereinafter follows some notes on specific \LaTeX\ packages.
+%
+%\StopEventually{}
+%
+% \section{Implementation of package}
+%
+% \subsection{Beginning of the \file{package} {\sc docstrip} module}
+% \begin{macrocode}
+%<*package>
+\def\package@name{ltxfront}%
+\expandafter\PackageInfo\expandafter{\package@name}{%
+ Title page macros for \protect\LaTeXe,
+ by A. Ogawa (arthur_ogawa at sbcglobal.net)%
+}%
+% \end{macrocode}
+%
+% \subsection{Prerequisites}%
+%
+% This package requires the use of the \classname{ltxutil} package.
+% \begin{macrocode}
+\let\class@name\package@name
+\RequirePackage{ltxutil}%
+%</package>
+% \end{macrocode}
+% End of the preliminary portion of the package code.
+% \begin{macrocode}
+% \end{macrocode}
+%
+% \subsection{Options}%
+% Package options are treated in this portion of the dtx file.
+% This portion is guarded by the \texttt{options} \classname{docstrip} code so that it can be
+% merged into a larger package gracefully.
+% \begin{macrocode}
+%<*options>
+% \end{macrocode}
+%
+% Package option turns on diagnostics that trace its operation.
+% \cmd\frontmatterverbose@sw\ is set false by default: we do not elect to monitor
+% the workings of these procedures.
+% \begin{macrocode}
+\DeclareOption{frontmatterverbose}{\@booleantrue\frontmatterverbose@sw}%
+\@booleanfalse\frontmatterverbose@sw
+% \end{macrocode}
+%
+% Package option inactivates its syntax, for testing purposes.
+% \begin{macrocode}
+\DeclareOption{inactive}{\@booleanfalse\frontmatter@syntax@sw}%
+\@booleantrue\frontmatter@syntax@sw
+% \end{macrocode}
+%
+% \begin{macro}{\runinaddress@sw}
+% The flag \cmd\runinaddress@sw\ signifies that author addresses are to be set on the same
+% line with the author.
+%
+% The \classoption{runinaddress} option is the only one that sets \cmd\runinaddress@sw\ to true.
+%
+% FIXME: this option pertains to cases where \cmd\groupauthors@sw\ is true, but is independant of \cmd\@affils@sw.
+% So, it should be possible to assert both \classoption{runinaddress} and \classoption{unsortedaddress} as well as
+% each separately.
+% \begin{macrocode}
+\@booleanfalse\runinaddress@sw
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@affils@sw}
+% If \cmd\@affils@sw\ is false, an address is never recognised as ``new''
+% and is therefore always entered into the affiliation list,
+% stopping groups of authors at the same address being consolidated
+% into the same list:
+% the address will be printed the same number of times it is entered.
+%
+% The \classoption{unsortedaddress} option is the only one that sets \cmd\@affils@sw\ to false.
+% \begin{macrocode}
+\@booleantrue\@affils@sw
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\groupauthors@sw}
+% The flag \cmd\groupauthors@sw\ signifies that authors are to be grouped,
+% affecting the meaning of \cmd\@author@present.
+%
+% Clients will want to set \cmd\groupauthors@sw\ true if they want grouped addresses
+% or either of the following variants:
+% for unsorted addresses: set \cmd\@affils@sw\ false;
+% for run-in addresses, set \cmd\runinaddress@sw\ true.
+% \begin{macrocode}
+\@booleanfalse\groupauthors@sw
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{groupedaddress}
+% If we take the \classoption{groupedaddress} option as the default, then we can look upon
+% the \classoption{superscriptaddress} option as simply turning \cmd\groupauthors@sw\ to \cmd\false@sw.
+%
+% \classoption{groupedaddress}, the default in APS journals, groups authors above a common address.
+% \begin{macrocode}
+\DeclareOption{groupedaddress}{\clo@groupedaddress}%
+\def\clo@groupedaddress{%
+ \@booleantrue\groupauthors@sw
+ \@booleantrue\@affils@sw
+ \@booleanfalse\runinaddress@sw
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{unsortedaddress}
+% \classoption{unsortedaddress} is similar to \classoption{groupedaddress},
+% but turns off \cmd\@affils@sw,
+% with the result that each address that is entered will be printed.
+% \begin{macrocode}
+\DeclareOption{unsortedaddress}{\clo@unsortedaddress}%
+\def\clo@unsortedaddress{%
+ \@booleantrue\groupauthors@sw
+ \@booleanfalse\@affils@sw
+ \@booleanfalse\runinaddress@sw
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{runinaddress}
+%
+% \classoption{runinaddress} is similar to \classoption{groupedaddress},
+% with the addition of the Boolean \cmd\runinaddress@sw,
+% which causes the authors associated with a particular address group
+% to be formatted in a paragraph instead of on separate lines.
+% \begin{macrocode}
+\DeclareOption{runinaddress}{\clo@runinaddress}%
+\def\clo@runinaddress{%
+ \@booleantrue\groupauthors@sw
+ \@booleantrue\@affils@sw
+ \@booleantrue\runinaddress@sw
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{superscriptaddress}
+% \classoption{superscriptaddress} presents author affiliations
+% as superscripts. Authors with like affiliations share the same
+% superscript.
+%
+% FIXME: if \cmd\groupauthors@sw\ is false, would not \cmd\@affils@sw\ be a don't care?
+% \begin{macrocode}
+\DeclareOption{superscriptaddress}{\clo@superscriptaddress}%
+\def\clo@superscriptaddress{%
+ \@booleanfalse\groupauthors@sw
+ \@booleantrue\@affils@sw
+ \@booleanfalse\runinaddress@sw
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%</options>
+% \end{macrocode}
+%
+% \subsection{Process package options}%
+% \begin{macrocode}
+%<*package>
+\DeclareOption*{\OptionNotUsed}%
+\ProcessOptions*
+%</package>
+% \end{macrocode}
+%
+% \section{Kernel of Front Matter}
+% Here begins the kernel of the \classname{frontmatter} package.
+% \begin{macrocode}
+%<*kernel>
+% \end{macrocode}
+%
+% This package implements a new syntax for the title page of an article.
+%
+% Special acknowledgment: this package uses concepts pioneered
+% and first realized by William Baxter (mailto:web at superscript.com)
+% in his SuperScript line of commercial typesetting tools, and
+% which are used here with his permission.
+%
+% These macros were first coded by David P. Carlisle for the American Physical
+% society in the late 1990s as part of the development of REV\TeX4.
+% That development work was taken over by Arthur Ogawa, who is the author of
+% this package.
+%
+% \subsection{Initialization}%
+%
+% \begin{macro}{\frontmatter@init}
+% The \cmd\frontmatter@init\ procedure sets up all the registers for
+% processing the title page.
+% At present, this is done once, at \cmd\class@documenthook\ time.
+% If multiple title pages are to be processed within a job,
+% the initialization must be done for each.
+% \begin{macrocode}
+\appdef\class@documenthook{\frontmatter@init}%
+\let\frontmatter@init\@empty
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{The title command}%
+%
+% \begin{macro}{\title}
+% \begin{macro}{\do@title}
+% The author uses \cmd\title\ to specify the title. As in the AMS
+% classes, \cmd\title\ has an optional argument specifying a short form
+% for use in running heads.
+%
+% Once the \cmd\title\ is given, you can specify any combination of
+% \cmd\thanks, \cmd\email, \cmd\homepage, and \cmd\altaffiliation\ commands,
+% applying to the title of the document.
+%
+% Compatibility note: as with all of the standard \LaTeX\ commands that we override,
+% we make here a private definition and later switch it in if so required.
+% \changes{4.1b}{2008/08/02}{Make the syntax of this package switch optional}%
+% \begin{macrocode}
+\newcommand\frontmatter@title[2][]{%
+ \def\@title{#2}%
+ \def\@shorttitle{#1}%
+ \let\@AF@join\@title@join
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@title}
+% \begin{macro}{\@shorttitle}
+% The arguments to \cmd\title\ are saved in these internal
+% macros, which are set up to produce a warning if \cmd\title\ has not
+% been used before \cmd\maketitle.
+% \changes{4.1b}{2008/08/02}{Use \cs{frontmatter@init} as the vehicle for all initialization}
+%
+% Extensibility note: by using \cmd\frontmatter@init\ as the initialization procedure,
+% we open the possibility of more than one title page per document.
+% \begin{macrocode}
+\appdef\frontmatter@init{%
+ \def\@title{\class@warn{No title}}%
+ \let\@shorttitle\@empty
+ \let\@title@aux\@title@aux@cleared
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@title@join}
+% \begin{macro}{\@title@join@}
+% \begin{macro}{\@title@aux@cleared}
+%
+% \begin{macrocode}
+\def\@title@join{\expandafter\@title@join@\@title@aux}%
+\def\@title@join@#1#2{%
+ \def\@title@aux{{\@join{\@separator}{#1}{#2}}}%
+}%
+\def\@title@aux@cleared{{}}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{The author, affiliation, and related commands}%
+%
+% \begin{macro}{\c@affil}
+% \begin{macro}{\c@collab}
+% \changes{4.1b}{2008/08/02}{(AO, 486) \cs{collaboration} to work with \texttt{groupedaddress}}
+%
+% \cmd\c@affil\ stores the affiliation numbers used for the superscript marks.
+% The \cmd\newcounter\ command defines \cmd\theaffil, which we never use:
+% this counter is evaluated solely via \cmd\the.
+%
+% \cmd\c@collab\ stores the collaboration numbers.
+% The \cmd\newcounter\ command defines \cmd\thecollab.
+% As with \cmd\c@affil, we never use \cmd\thecollab; only \cmd\the\ \cmd\c@collab.
+%
+% Each counter must be cleared before frontmatter can be processed.
+% \begin{macrocode}
+\newcounter{affil}%
+\newcounter{collab}%
+\appdef\frontmatter@init{%
+ \c@affil\z@
+ \c@collab\z@
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Commands for author or collaboration}%
+%
+% \begin{macro}{\author}
+% Each author is given in a \emph{separate} \cmd\author\ command.
+% This is similar to the AMS classes, but the AMS also try to support
+% the \classname{article} class's \cmd\and\ command for putting multiple
+% authors in one \cmd\author\ command.
+% This package, however, does not support the \cmd\and\ command.
+%
+% When the \cmd\author\ command is encountered,
+% the previous author, author group, affiliation, and affiliation group are at an end.
+% This procedure moves the previous author to the author group (\cmd\move@AU),
+% moves the previous affiliation to the affiliation group (\cmd\move@AF),
+% and terminates the previous author/affiliation group (\cmd\move@AUAF) as the case may require.
+%
+% Compatibility note: as with all of the standard \LaTeX\ commands that we override,
+% we make here a private definition and later switch it in if so required.
+% \changes{4.1b}{2008/08/02}{Make the syntax of this package switch optional}%
+% \begin{macrocode}
+\newcommand\frontmatter@author{% implicit #1
+ \@author@def{}% implicit #2
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\collaboration}
+% Specify the collaboration (given after a group of authors).
+%
+% This procedure does exactly what \cmd\author\ does, and sets
+% a flag signifying that the \cmd\collaboration\ command was given.
+%
+% Note: earlier versions attempted to ignore the collaboration command if it was considered inappropriate.
+% We must not do this, however, because it throws the state machine out of kilter.
+% \changes{4.1b}{2008/08/02}{(AO, 486) \cs{collaboration} to work with \texttt{groupedaddress}}
+% \begin{macrocode}
+\def\collaboration{% implicit #1
+ \@author@def{\@booleantrue\collaboration@sw}% implicit #2
+}%
+\appdef\frontmatter@init{%
+ \@booleanfalse\collaboration@sw
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@author@init}
+% \begin{macro}{\@author@cleared}
+% \begin{macro}{\@authorclear@sw}
+% \begin{macro}{\@author@def}
+% \begin{macro}{\@author@join@}
+% \begin{macro}{\@author@join}
+% \changes{4.0b}{1999/06/20}{Change handling of \cs{@author} to prevent parsing problems. (Helps in error recovery when syntax errors exist)}
+% \changes{4.1b}{2008/08/02}{(AO, 486) \cs{collaboration} to work with \texttt{groupedaddress}}
+% \changes{4.1b}{2008/08/02}{Use \cs{frontmatter@init} as the vehicle for all initialization}
+%
+% Here are all the access procedures for the author data structure.
+%
+% We define a flag value for \cmd\@author (private),
+% a procedure \cmd\@author@gobble\ to read author data without any effect,
+% a procedure for setting \cmd\@author\ to the flag value (\cmd\@author@init),
+% a Boolean to test against the flag value (\cmd\@authorclear@sw),
+% and a procedure to add new ancillary data to the author.
+%
+% Note that expanding the functionality of the \cmd\collaboration\ command entailed changing
+% the data structures, because now all authors must remember the collaboration they belong to.
+% This change affects procedures \cmd\@author@cleared\ and \cmd\@author@gobble.
+% \begin{macrocode}
+\def\@author@cleared{{}{}{}}%
+\def\@author@gobble#1#2#3{}%
+\def\@author@init{%
+ \let\@author\@author@cleared
+ \@booleanfalse\collaboration@sw
+}%
+\def\@authorclear@sw{\@ifx{\@author\@author@cleared}}%
+\appdef\frontmatter@init{%
+ \@author@init
+}%
+% \end{macrocode}
+% \changes{4.1i}{2009/10/18}{(AO, 540) More runtime diagnostics via \cs{frontmatterverbose@sw}}
+% \begin{macrocode}
+\def\@author@def#1#2{%
+ \frontmatterverbose@sw{\typeout{\string\author\space\string\collaboration}}{}%
+ \move@AU\move@AF\move@AUAF
+ \let\@AF@join\@author@join
+ #1%
+ \def\@author{{#2}{}}%
+}%
+\def\@author@join@#1#2#3{%
+ \def\@author{{#1}{\@join{\@separator}{#2}{#3}}}%
+}%
+\def\@author@join{\expandafter\@author@join@\@author}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\move@AU}
+% \begin{macro}{\add@AUCO@grp}
+% \changes{4.1b}{2008/08/02}{(AO, 486) \cs{collaboration} to work with \texttt{groupedaddress}}
+% The \cmd\move@AU\ procedure moves the most recent author to the current author group \cmd\AU@grp,
+% or the most recent collaboration to the collaboration group \cmd\CO@grp.
+% If we recently did a \cmd\@author@init, this is a no-op.
+%
+% To accommodate the expanded syntax of \cmd\collaboration, we add a new field to
+% those associated with an author (collaborator), namely the value of the
+% collaboration counter.
+% \begin{macrocode}
+\def\move@AU{%
+ \@authorclear@sw{}{%
+ \collaboration@sw{%
+ \advance\c@collab\@ne
+ \@argswap{\CO@grp\CO@opr}%
+ }{%
+ \@argswap{\AU@grp\AU@opr}%
+ }%
+ {%
+ \expandafter\@argswap@val
+ \expandafter{\@author}%
+ {\expandafter\@argswap@val\expandafter{\the\c@collab}{\add@AUCO@grp}}%
+ }%
+ }%
+ \@author@init
+}%
+% \end{macrocode}
+% \changes{4.1b}{2008/08/02}{Provide for diagnostics via \cs{frontmatterverbose@sw}}
+% The procedure \cmd\add@AUCO@grp\ adds to the specified group \#3 using the
+% given intercollated operator \#4, with arguments \{\#1\} and \#2,
+% where the first argument is the collaboration number,
+% the second is the author name, and the third the joined attributes of the author.
+% For example, \cmd\move@AU\ could finally execute:
+% \cmd\appdef\ \cmd\AU@grp\ \{\cmd\AU@opr\{1\}\{A. Author\}\{\}\}.
+% \begin{macrocode}
+\def\add@AUCO@grp#1#2#3#4{%
+ \appdef#3{#4{#1}#2}%
+ \frontmatterverbose@sw{\say#3}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@author@finish}
+% We define a procedure to terminate author/affiliation parsing just before the title block is formatted.
+% We detect the case where an author group is not followed by an affiliation group.
+% \changes{4.0f}{2001/02/13}{Actually append \cs{AU@grp} to \cs{@AAClist}.}
+% \changes{4.1b}{2008/08/02}{(AO, 486) \cs{collaboration} to work with \texttt{groupedaddress}}
+% \changes{4.1b}{2008/08/02}{Use \cs{@affil@def} for all access to \cs{@affil}}
+% \changes{4.1b}{2008/08/02}{Provide for diagnostics via \cs{frontmatterverbose@sw}}
+% \changes{4.1g}{2009/10/05}{(AO, 535) Robustify \cs{footnote} while \cs{class@warn} is expanding its argument}
+% \changes{4.1i}{2009/10/18}{(AO, 540) More runtime diagnostics via \cs{frontmatterverbose@sw}}
+% \changes{4.1m}{2009/11/20}{(AO, 563) \cs{collaboration} to work with both \texttt{groupedaddress} and \texttt{superscriptaddress}}
+% \changes{4.1n}{2009/11/30}{(AO, 567) Handle \cs{noaffiliation} case}
+%
+% We first finish off any author- or affiliation groups in progress.
+% Next, we detect the case where there is an author group or a collaboration group in progress, but no affiliation group.
+% If so, we emit a diagnositic message and act as if a \cmd\noaffiliation\ command had been given.
+% In any case, we finish off any author/affiliation pair that may remain.
+% Formatting of the title block may now proceed.
+% \begin{macrocode}
+\def\@author@finish{%
+ \frontmatterverbose@sw{\typeout{\string\@author@finish}}{}%
+ \move@AU\move@AF
+ \@ifx{\AU@grp\@empty}{%
+ \@ifx{\CO@grp\@empty}%
+ }{%
+ \false@sw
+ }%
+ {}{%
+ \@ifx{\AF@grp\@empty}{%
+ \begingroup
+ \let\href\@secondoftwo
+ \let\AU@opr\@secondofthree
+ \let\CO@opr\@secondofthree
+ \let\footnote\@gobble
+ \@ifx{\CO@grp\@empty}{%
+ \class@warn{Assuming \string\noaffiliation\space for authors}%
+ \frontmatterverbose@sw{\say\AU@grp}%
+ }{%
+ \class@warn{Assuming \string\noaffiliation\space for collaboration}%
+ \frontmatterverbose@sw{\say\CO@grp}{}%
+ }%
+ \endgroup
+ \@affil@none\move@AF
+ }{}%
+ }%
+ \move@AUAF
+}%
+\def\@secondofthree#1#2#3{#2}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@join}
+% The procedure \cmd\@join\ inserts
+% a separator between two tokens, or, if the first token is
+% nil, elides both that token and the separator.
+% \begin{macrocode}
+\def\@join#1#2#3{%
+ \@if@empty{#2}{#3}{#2#1#3}%
+}%
+\def\@separator{;\space}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\surname}
+% \begin{macro}{\firstname}
+% No-op to allow better post-processing of the file.
+% \begin{macrocode}
+\let\surname\@firstofone
+\let\firstname\@firstofone
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\and}
+% The original \LaTeX\ idea of using one \cmd\author\ command to capture
+% all authors and their address just doesn't work with multiple authors
+% possibly sharing addresses, so in this class disable \cmd\and.
+% \begin{macrocode}
+\newcommand\frontmatter@and{\class@err{\protect\and\space is not supported}}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection{Commands for affiliation}%
+%
+% \begin{macro}{\affiliation}
+% \changes{4.1b}{2008/08/02}{Use \cs{@affil@def} for all access to \cs{@affil}}
+% After each group of authors with the same address,
+% give that address in \cmd\affiliation.
+% If later in the list you have an author
+% with the address of an earlier author, repeat the \cmd\affiliation\
+% command: the system will detect the equivalence and (if using the \classoption{superscriptaddress} option)
+% only print the affiliation once, reusing the superscript marker.
+%
+% When the \cmd\affiliation\ command is encountered, the current author and author group (if any) are at an end.
+% Also, the current affiliation is at an end.
+%
+% \changes{4.1i}{2009/10/18}{(AO, 540) More runtime diagnostics via \cs{frontmatterverbose@sw}}
+% FIXME: changes to catcode required elsewhere now?
+% \begin{macrocode}
+\def\cat@comma@active{\catcode`\,\active}%
+{\cat@comma@active\gdef,{\active@comma}}%
+\def\active@comma{,\penalty-300\relax}%
+\newcommand\affiliation{%
+ \frontmatterverbose@sw{\typeout{\string\affiliation}}{}%
+ \move@AU\move@AF
+ \begingroup
+ \cat@comma@active
+ \@affiliation
+}%
+\def\@affiliation#1{%
+ \endgroup
+ \let\@AF@join\@affil@join
+ \@affil@def{#1}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\noaffiliation}
+% \changes{4.1b}{2008/08/02}{Use \cs{@affil@def} for all access to \cs{@affil}}
+% \changes{4.1i}{2009/10/18}{(AO, 540) More runtime diagnostics via \cs{frontmatterverbose@sw}}
+% \changes{4.1n}{2009/11/30}{(AO, 567) Handle \cs{noaffiliation} case}
+% User-level command \cmd\noaffiliation\ signifies that the current group of authors, or the current collaboration, has \emph{no} affiliation.
+%
+% This is implemented by acting as if the \cmd\affiliation\ command has been given, and using a
+% flag value of \{\cmd\relax\}, which adds an element to the affiliation group of this author,
+% albeit a nil one (\cmd\AFF@opr\ \{\cmd\relax\} \{\}).
+%
+% Note that this procedure does substantially the same as \cmd\@author@finish. (the latter, If it does not bail out altogether, differs chiefly in providing diagnostics).
+% \begin{macrocode}
+\newcommand\frontmatter@noaffiliation{%
+ \frontmatterverbose@sw{\typeout{\string\noaffiliation}}{}%
+ \move@AU\move@AF
+% \end{macrocode}
+% In \cmd\@author@finish, there is code testing if an effective
+% \cmd\noaffiliation\ should be executed now. Here, we do so in any case.
+% \begin{macrocode}
+ \@affil@none\move@AF
+ \move@AUAF
+}%
+\def\blankaffiliation{{}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@affil@cleared}
+% \begin{macro}{\@affil@nil}
+% \begin{macro}{\@affil@init}
+% \begin{macro}{\@affil@none}
+% \begin{macro}{\@affilclear@sw}
+% \begin{macro}{\@affil@def}
+% \begin{macro}{\@affil@join@}
+% \begin{macro}{\@affil@join}
+% \changes{4.1b}{2008/08/02}{Use \cs{@affil@def} for all access to \cs{@affil}}
+% \changes{4.1n}{2009/11/30}{(AO, 567) Handle \cs{noaffiliation} case}
+%
+% Here are all the access procedures for the affiliation data structure.
+% Note the similarity to those of the \cmd\@author\ data structure.
+%
+% We define a flag value for \cmd\@affil\ (private),
+% a procedure for setting \cmd\@affil\ to the flag value (\cmd\@affil@init),
+% a Boolean to test against the flag value (\cmd\@affilclear@sw),
+% a procedure \cmd\@affil@def\ to load a value into the structure,
+% and a procedure to add new ancillary data to the affiliation.
+% \begin{macrocode}
+\def\@affil@cleared{{{}}{}}%
+\def\@affil@nil{{\relax}{}}%
+\appdef\frontmatter@init{%
+ \@affil@init
+}%
+\def\@affil@none{%
+ \let\@affil\@affil@nil
+}%
+\def\@affil@init{%
+ \let\@affil\@affil@cleared
+}%
+\def\@affilclear@sw{\@ifx{\@affil\@affil@cleared}}%
+\def\@affil@def#1{%
+ \def\@affil{{#1}{}}%
+}%
+\def\@affil@join@#1#2#3{%
+ \def\@affil{{#1}{\@join{\@separator}{#2}{#3}}}%
+}%
+\def\@affil@join{\expandafter\@affil@join@\@affil}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\move@AF}
+% \changes{4.1b}{2008/08/02}{(AO, 486) \cs{collaboration} to work with \texttt{groupedaddress}}
+% \changes{4.1i}{2009/10/23}{(AO, 540) Rationalize code that appends to \cs{AF@grp}}
+% \changes{4.1n}{2009/11/30}{(AO, 567) Handle \cs{noaffiliation} case}
+% Move the most recent affiliation to the affiliation group.
+% If we recently did a \cmd\@affil@init, this is a no-op.
+%
+% Set the \cmd\temp@sw\ to false, then execute the affiliation list (\cmd\@AFF@list)
+% with the intercollated operator set to \cmd\@affil@match\
+% and with \cmd\@tempa\ holding the first component of \cmd\@affil, the current affiliation, which is to be matched.
+%
+% If the current affiliation has been seen before, then by side effect
+% \cmd\temp@sw\ will be set to true,
+% \cmd\@tempc\ will be set to the matching affiliation number,
+% and \cmd\@tempd\ will be set to the affiliation's ancillary data.
+% The Boolean \cmd\@affils@sw\ being false prevents this test from ever returning a ``true'' result.
+%
+% This procedure uses \cmd\@tempa\ and sets \cmd\@tempc, \cmd\@tempd, and \cmd\temp@sw.
+% \begin{macrocode}
+\def\move@AF{%
+ \@affilclear@sw{}{%
+ \@booleanfalse\temp@sw
+ \let\@tempd\@empty
+ \@affils@sw{%
+ \expandafter\@affil@addr@def\expandafter\@tempa\@affil
+ \def\AFF@opr{\@affil@match\@tempa}%
+ \@AFF@list
+ }{}\temp@sw
+% \end{macrocode}
+% True clause: This affiliation has been seen before.
+% If ancillary data for the affiliation have been given, but are not identical to those seen before, give a warning.
+% \begin{macrocode}
+ {%
+ \expandafter\@affil@aux@def\expandafter\@tempb\@affil
+ \@ifx{\@tempb\@empty}{}{%
+ \@ifx{\@tempb\@tempd}{}{%
+ \class@warn{%
+ Ancillary information for \@tempa\space must not be different!
+ Please put all of it on the first instance%
+ }%
+ }%
+ }%
+ }%
+% \end{macrocode}
+% False clause: This affiliation is a new one:
+% increment the affiliation counter to get a unique affiliation ID
+% and append the new ID, collaboration number, address, and auxiliary information
+% to the list \cmd\@AFF@list.
+%
+% Note that, with the expanded syntax of \cmd\collaboration, we need to label each address with
+% its associated collaboration.
+%
+% Note also that the \cmd\noaffiliation\ case is handled by recognizing the flag value \cmd\@affil@nil.
+% \begin{macrocode}
+ {%
+ \@ifx{\@affil\@affil@nil}{%
+ \def\@tempc{0}%
+ \@argswap@val{0}%
+ }{%
+ \advance\c@affil\@ne
+ \expandafter\def\expandafter\@tempc\expandafter{\the\c@affil}%
+ \expandafter\@argswap@val\expandafter{\the\c@affil}%
+ }%
+ {%
+ \expandafter\@argswap@val\expandafter{\the\c@collab}{%
+ \expandafter\@argswap@val\expandafter{\@affil}{%
+ \add@list@val@val@val\@AFF@list\AFF@opr
+ }%
+ }%
+ }%
+ }%
+% \end{macrocode}
+% In either case, append this affiliation number to the \cmd\AF@grp, the affiliation group of the current author group.
+% (It will later be considered for the \cmd\@AFG@list.)
+% Then assign the flag value to \cmd\@affil\ that signifies it has been cleared.
+% \changes{4.1i}{2009/10/18}{(AO, 540) Rationalize code that appends to \cs{AF@grp}}
+% \begin{macrocode}
+ \appdef@eval\AF@grp\@tempc
+ \frontmatterverbose@sw{\say\AF@grp}{}%
+ \@affil@init
+ }%
+}%
+\def\@affil@addr@def#1#2#3{%
+ \def#1{#2}%
+}%
+\def\@affil@aux@def#1#2#3{%
+ \def#1{#3}%
+}%
+% \end{macrocode}
+% \changes{4.1b}{2008/08/02}{Provide for diagnostics via \cs{frontmatterverbose@sw}}
+% Procedure \cmd\add@list@val@val@val\ appends to the given list \#1 using the given intercollated operator \#2,
+% with arguments \#5 (affiliation ID) and \#4 (collaboration ID) delimited by braces, and \#3 bare.
+% In the end, \cmd\move@AF\ may execute something like
+% \cmd\appdef\ \cmd\@AFF@list\ \cmd\AFF@opr\ \{1\} \{3\} \{My Institution\} \{thanks\}.
+% \begin{macrocode}
+\def\add@list@val@val@val#1#2#3#4#5{%
+ \appdef#1{#2{#5}{#4}#3}%
+ \frontmatterverbose@sw{\say#1}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@affil@match}
+% \changes{4.1b}{2008/08/02}{(AO, 486) \cs{collaboration} to work with \texttt{groupedaddress}}
+% The procedure \cmd\@affil@match\ is the definition for \cmd\AFF@opr,
+% the intercollated operator for \cmd\@AFF@list,
+% when adding a new affiliation: it seeks a match with any earlier affiliation.
+% When the affiliation list is executed, this procedure tests each entry against
+% the `new' affiliation (which has been stored in \cmd\@tempa) and its associated
+% collaboration number (in \cmd\@tempb).
+%
+% If \cmd\groupauthors@sw\ is true, then we require the collaboration ID to match,
+% otherwise there is no such requirement,
+% as is appropriate for the \classoption{superscriptaddress} class option.
+%
+% Uses \cmd\temp@sw, \cmd\@tempc, and \cmd\@tempd\ to communicate back:
+% if it returns \cmd\temp@sw\ true, a match was found.
+% Then
+% \cmd\@tempc\ will be the affiliation ID of the matching entry
+% and \cmd\@tempd\ will be the auxiliary information of the matching entry.
+% \begin{macrocode}
+\def\@affil@match#1#2#3#4#5{%
+ \temp@sw{}{%
+ \def\@tempifx{#4}%
+ \@ifx{\@tempifx#1}{%
+ \groupauthors@sw{%
+ \@ifnum{#3=\c@collab}{%
+ \true@sw
+ }{%
+ \false@sw
+ }%
+ }{%
+ \true@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ {%
+ \@booleantrue\temp@sw
+ \def\@tempc{#2}%
+ \def\@tempd{#5}%
+ }{%
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\move@AUAF}
+% \changes{4.0h}{1998/06/25}{Changes to support groups of affiliations}
+% \changes{4.1b}{2008/08/02}{(AO, 486) \cs{collaboration} to work with \texttt{groupedaddress}}
+% \changes{4.1b}{2008/08/02}{Change csname \cs{AFS@opr} to \cs{AFG@opr}}
+% \changes{4.1b}{2008/08/02}{Provide for diagnostics via \cs{frontmatterverbose@sw}}
+% Append \cmd\AF@grp, \cmd\AU@grp, and \cmd\CO@grp\ to \cmd\@AAC@list,
+% append \cmd\CO@grp\ to \cmd\@AFG@list,
+% and merge any new \cmd\AF@grp\ to \cmd\@AFG@list.
+%
+% The entire procedure is predicated on something non-trivial to move.
+%
+% If both author group \cmd\AU@grp\ and affiliation group \cmd\AF@grp\ are nil, bail out.
+%
+% No, try that again:
+%
+% If we have seen any affiliations (\cmd\AF@grp\ is not nil),
+% then it is time to move the current affiliation group and author group to \cmd\@AAC@list.
+% If not, we are picking up authors into an author group, and we should bail out.
+%
+% To extend this scheme to the new \cmd\collaboration\ abilities, we must append an affiliation \cmd\AF@opr\ to \cmd\@AAC@list\
+% also in the case where there was no affiliation specified (e.g., \cmd\noaffiliation). This affiliation will be a nil affiliation:
+% \cmd\AF@opr\verb+{{0}}+.
+%
+%FIXME: only one of \cmd\CO@grp\ or \cmd\AU@grp\ is non-empty at this point,
+% but this code does not appear to recognize this fact!
+% \changes{4.1i}{2009/10/18}{(AO, 540) More runtime diagnostics via \cs{frontmatterverbose@sw}}
+% \begin{macrocode}
+\def\move@AUAF{%
+ \frontmatterverbose@sw{\say\AU@grp\say\AF@grp\say\CO@grp}{}%
+ \@ifx{\AF@grp\@empty}{%
+ \@ifx{\@empty\CO@grp}{%
+% \end{macrocode}
+% Both \cmd\AF@grp\ and \cmd\CO@grp\ are empty: nothing to do. But what if \cmd\AU@grp\ is not empty?
+% \begin{macrocode}
+ }{%
+% \end{macrocode}
+% Append the nil \cmd\AF@opr\ to \cmd\@AAC@list.
+% \begin{macrocode}
+ \appdef \@AAC@list{\AF@opr{{0}}}%
+% \end{macrocode}
+% Append the collaboration group to the \cmd\@AAC@list; no intercollated operator need be added,
+% because we already have \cmd\CO@opr.
+% \begin{macrocode}
+ \appdef@e \@AAC@list{\CO@grp}%
+ \appdef@e \@AFG@list{\CO@grp}%
+ \let\CO@grp\@empty
+ }%
+ }{%
+% \end{macrocode}
+% Append current affiliation group (expansion of \cmd\AF@grp)
+% to the author/affiliation list (\cmd\@AAC@list),
+% using \cmd\AF@opr\ as the intercollated operator;
+% also append the current authors (\cmd\AU@grp).
+% \begin{macrocode}
+ \appdef \@AAC@list{\AF@opr}%
+ \appdef@eval\@AAC@list{\AF@grp}%
+ \appdef@e \@AAC@list{\AU@grp}%
+% \end{macrocode}
+% Determine if either \cmd\AU@grp\ or \cmd\CO@grp\ is non-empty.
+% \begin{macrocode}
+ \@ifx{\@empty\AU@grp}{%
+ \@ifx{\@empty\CO@grp}%
+ }{%
+ \false@sw
+ }%
+% \end{macrocode}
+% At this point, there is a Boolean in \TeX's scanner;
+% it will parse the following two brace-delimited sequences and select one of them.
+% \begin{macrocode}
+ {%
+% \end{macrocode}
+% This branch is executed if and only if both \cmd\AU@grp\ and \cmd\CO@grp\ are empty.
+% \begin{macrocode}
+ }{%
+% \end{macrocode}
+% There was either a \cmd\author\ or a \cmd\collaboration\ command.
+% Append the current affiliation group to \cmd\@AFG@list,
+% (only if it is not already there)
+% using \cmd\AFG@opr\ as the intercollated operator.
+%
+% Note that \cmd\@AFG@list\ is a list of \emph{unique} affiliation \emph{groups},
+% and building it entails an \(N^2\) computation.
+% \begin{macrocode}
+ \@booleanfalse\temp@sw
+ \def\AFG@opr{\x@match\AF@grp}%
+ \let\CO@opr\@author@gobble
+ \@AFG@list
+ \temp@sw{}{%
+ \appdef \@AFG@list{\AFG@opr}%
+ \appdef@eval\@AFG@list{\AF@grp}%
+ }%
+% \end{macrocode}
+% If the collaboration \cmd\CO@grp\ is not empty, we append it to the \cmd\@AFG@list\ and to the \cmd\@AAC@list.
+% \changes{4.1m}{2009/11/20}{(AO, 563) \cs{collaboration} to work with both \texttt{groupedaddress} and \texttt{superscriptaddress}}
+% \begin{macrocode}
+ \@ifx{\@empty\CO@grp}{}{%
+ \appdef@e \@AAC@list{\CO@grp}%
+ \appdef@e \@AFG@list{\CO@grp}%
+ \let\CO@grp\@empty
+ }%
+ }%
+% \end{macrocode}
+% Finally, null out the macros holding the author group \cmd\AU@grp, affiliation group \cmd\AF@grp, and collaboration group \cmd\CO@grp.
+% \begin{macrocode}
+ \let\CO@grp\@empty
+ \let\AU@grp\@empty
+ \let\AF@grp\@empty
+ }%
+ \frontmatterverbose@sw{\say\@AAC@list\say\@AFG@list}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\AU@grp}
+% \begin{macro}{\AF@grp}
+% \begin{macro}{\@AAC@list}
+% \begin{macro}{\@AFG@list}
+% \begin{macro}{\@AFF@list}
+%
+% The control sequence name \cmd\AU@grp\ accumulates
+% consecutive \cmd\author\ entries (with \cmd\AU@opr\ as the intercollated operator)
+% and \cmd\collaboration\ entries (with \cmd\CO@opr\ as the intercollated operator).
+% Ultimately, its contents are appended to the author/affiliation list \cmd\@AAC@list\
+% and to the list of affiliation groups, \cmd\@AFG@list.
+% It must be initialized to \cmd\@empty.
+%
+% Note on \cmd\AU@opr\ and \cmd\CO@opr: it is essential to treat these two operators to the greatest extent possible on an equal footing.
+% Therefore we invariably assign values to the pair of them within the same procedure.
+%
+% The macro \cmd\AF@grp\ accumulates affiliation IDs into an affiliation group.
+% It must be empty at the beginning of the frontmatter.
+%
+% The \cmd\@AAC@list\ macro accumulates
+% authors (using \cmd\AU@opr\ as the intercollated operator),
+% collaborations (using \cmd\CO@opr\ as the intercollated operator),
+% and
+% affiliations (using \cmd\AF@opr\ as the intercollated operator).
+%
+% It must be empty at the beginning of the frontmatter.
+%
+% The macro \cmd\@AFG@list\ accumulates
+% affiliation groups, with \cmd\AFG@opr\ as the intercollated operator,
+% and collaborations, with no intercollated operator.
+% This token list is employed when and only when \classoption{groupedaddress} is in effect.
+%
+% The macro \cmd\@AFF@list\ accumulates the list of affiliations
+% with \cmd\AFF@opr\ as the intercollated operator.
+% It must be empty at the beginning of the frontmatter.
+%
+% Each \cmd\affiliation\ command in the document contributes
+% to this list, as long as the argument of that instance of the command
+% is ``new''.
+%
+% Each entry in this list consists of the \cmd\AFF@opr\ intercollated operator
+% followed by three brace-delimited tokens, representing, in order:
+% \begin{enumerate}
+% \item
+% the affiliation's unique ID, a number increasing monotonically for
+% each new entry,
+% \item
+% the optional argument of the \cmd\affiliation\ command,
+% the footnote to the affiliation, and
+% \item
+% the text of the affiliation.
+% \end{enumerate}
+%
+% At various junctures in the code, the control sequence name
+% \cmd\AFF@opr\ assumes the meaning of
+% \cmd\@affil@group, \cmd\affil@script,
+% or is defined to expand to \cmd\@affil@match\cmd\@tempa,
+% and the list \cmd\@AFF@list\ is expanded.
+%
+% For each of these lists, here is the syntax of an element and the usage of the associated operator:
+% \begin{verbatim}
+%\@AFF@list \AFF@opr{<affiliation ID>}{<collaboration ID>}{<address>}{<auxiliary info>} \frontmatter@author@produce@script \affils@present@group
+%\@AFG@list \AFG@opr{{<affiliation ID>}..{<affiliation ID>}} \frontmatter@author@produce@group
+%\@AAC@list \AF@opr{{<affiliation ID>}..{<affiliation ID>}} (\AU@opr|\CO@opr){<collaboration ID>}{<author>}{<auxilliary info>} \frontmatter@author@produce@script \frontmatter@author@produce@group \affils@present@group
+%
+%\AFF@opr \@affil@match\@tempa \@affil@script \@affil@group
+%\AFG@opr \affils@present@group \x@match\AF@grp
+%\AF@opr \@gobble \@affilID@def \@affilID@count\AF@temp\@tempcnta \@affilID@match\AF@temp
+%\AU@opr \@secondofthree \@author@count\@tempcnta \@author@present \@author@gobble \@author@count#2 \@author@present
+%\CO@opr \@secondofthree \@collaboration@count\AU@temp\@tempcnta \@collaboration@present\AU@temp \@collaboration@present\AU@temp \@collaboration@gobble
+%
+%\CO@opr\@author@cleared
+% \end{verbatim}
+% \begin{macrocode}
+\appdef\frontmatter@init{%
+ \let\AU@grp\@empty
+ \let\CO@grp\@empty
+ \let\AF@grp\@empty
+ \let\@AAC@list\@empty
+ \let\@AFG@list\@empty
+ \let\@AFF@list\@empty
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@AF@join}
+% The \cmd\csname\ \cmd\@AF@join\ is a procedure used within
+% \cmd\email, \cmd\homepage, \cmd\thanks, and \cmd\altaffiliation.
+% When such a command appears after an \cmd\author, \cmd\collaboration, or \cmd\affiliation
+% command, the \cmd\@AF@join\ procedure appends the argument given to the appropriate
+% macro.
+% Its default is to give an error message, since these commands are legal only within
+% the particular context mentioned.
+% \begin{macrocode}
+\appdef\frontmatter@init{%
+ \let\@AF@join\@AF@join@error
+}%
+\def\@AF@join@error#1{%
+ \class@warn{%
+ \string\email, \string\homepage, \string\thanks, or \string\altaffiliation\space
+ appears in wrong context.
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection{Commands for auxiliary information}%
+%
+% \begin{macro}{\email}
+% Just tacks the email address on to the current author or affiliation.
+% \changes{4.1a}{2008-07-01}{(AO, 496) remove default prependation to \cs{email}.}
+% \begin{macrocode}
+\def\sanitize@url{%
+ \@makeother\%%
+ \@makeother\~%
+ \@makeother\_%
+}%
+\newcommand*\email[1][]{\begingroup\sanitize@url\@email{#1}}%
+\def\@email#1#2{%
+ \endgroup
+ \@AF@join{#1\href{mailto:#2}{#2}}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\homepage}
+% Just tacks the URL on to the current author or affiliation.
+% Note: group opened in \cmd\homepage\ is closed in \cmd\@homepage.
+% \changes{4.1a}{2008-07-01}{(AO, 496) remove default prependation to \cs{homepage}.}
+% \changes{4.1n}{2009/12/03}{(AO) remove http:// from \cs{href} call}
+% \begin{macrocode}
+\newcommand*\homepage[1][]{\begingroup\sanitize@url\@homepage{#1}}%
+\def\@homepage#1#2{%
+ \endgroup
+ \@AF@join{#1\href{#2}{#2}}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\href}
+% The document may load a package that defines either of these commands;
+% if not, we give a default meaning.
+% \begin{macrocode}
+\appdef\class@documenthook{%
+ \providecommand\href[1]{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\thanks}
+% \changes{4.1b}{2008/08/02}{Make the syntax of this package switch optional}%
+%
+% The operative version of \cmd\thanks\ appends an item to \cmd\@author, or \cmd\@affil's auxiliary data.
+% \begin{macrocode}
+\def\frontmatter@thanks{% implicit #1
+ \@AF@join
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\altaffiliation}
+% \changes{4.0d}{1998/01/31}{change name from \cs{tempaffiliation}}
+% \changes{4.0l}{1998/09/01}{add optional argument handling back}
+% Implemented more or less like \cmd\thanks\ but shares the affiliation
+% counter.
+% Optional argument may be used to give explanatory text eg
+% `currently staying at'
+% This will be placed before the address, if used in a footnote.
+% \begin{macrocode}
+\newcommand*\altaffiliation[2][]{%
+ \@AF@join{#1#2}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection{Procedures for author, collaboration, and affiliation}%
+%
+% Macros that list off, say, authors, and which require punctuation, like ``A, B, and C'', will use
+% \cmd\set@listcomma@list, \cmd\set@listcomma@count, \cmd\@listand, and \cmd\@listcomma.
+% These macros use the \cmd\@tempcnta\ register to keep track of how many items remain to be listed off.
+%
+% At present, \cmd\@author@present\ will decrement that counter.
+%
+% \begin{macro}{\set@listcomma@list}
+% \begin{macro}{\set@listcomma@count}
+% \changes{4.0l}{1998/09/01}{macro added}
+% Pop the author count for this collaboration.
+%
+% Note: by side effect, it assigns \cmd\@listcomma:
+% for a list of length two, suppress comma addition.
+% \begin{macrocode}
+\def\set@listcomma@list#1{%
+ \expandafter\@reset@ac\expandafter#1#1{0}\@reset@ac{%
+ \let\@listcomma\relax
+ }{%
+ \let\@listcomma\@listcomma@comma
+ }%
+}%
+\def\set@listcomma@count#1{%
+ \@ifnum{#1=\tw@}{%
+ \let\@listcomma\relax
+ }{%
+ \let\@listcomma\@listcomma@comma
+ }%
+}%
+% \end{macrocode}
+% Does the actual pop operation, then generates a Boolean which selects one of the two assignments for \cmd\@listcomma.
+%
+% Note: this procedure sets \cmd\@tempcnta\ to reflect the number of items to list off.
+% \begin{macrocode}
+\def\@reset@ac#1#2#3\@reset@ac{%
+ \def#1{#3}%
+ \@tempcnta#2\relax
+ \@ifnum{#2=\tw@}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\listand}
+% Might need extending with penalties etc.
+%
+% Note: this procedure expects \cmd\@tempcnta\ to reflect the current number of items remaining to list off.
+% \begin{macrocode}
+\def\@listand{\@ifnum{\@tempcnta=\tw@}{\andname\space}{}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@listcomma}
+% This definition, with \cmd\@ne\ puts a comma before and.
+%
+% David Carlisle says: In UK English (at least) would have \cmd\tw@\ here,
+% which would then implement the convention of indicating conjunction with comma or ``and'', but not both.
+%
+% Note: this procedure expects \cmd\@tempcnta\ to reflect the current number of items remaining to list off.
+% \begin{macrocode}
+\def\@listcomma@comma{\@ifnum{\@tempcnta>\@ne}{,}{}}%
+\def\@listcomma@comma@UK{\@ifnum{\@tempcnta>\tw@}{,}{}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@collaboration@gobble}
+% This command will be the synonym of \cmd\CO@grp\ during the expansion of \cmd\@AAC@list,
+% within \cmd\affils@present@group execution (in a \classoption{groupedaddress} situation).
+%
+% \changes{4.1m}{2009/11/20}{(AO, 563) Let \cs{@collaboration@gobble} parse all three arguments of \cs{CO@opr}}
+% \begin{macrocode}
+\def\@collaboration@gobble#1#2#3{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\doauthor}
+% \changes{4.1b}{2008/08/04}{Provide facility \cs{affil@cutoff}: if there is only one affiliation on the title page, no superscript}%
+% \changes{4.1n}{2009/11/30}{(AO, 567) Handle punctuation for \classoption{superscriptaddress} style authors' extra information, such as \cs{email}}
+% Main control over how authors are typeset.
+%
+% |#1| is loaded by \cmd\author
+%
+% |#2| is loaded by \cmd\email, \cmd\homepage, \cmd\altaffiliation, or \cmd\thanks
+%
+% |#3| is the superscript affiliation, if at all used.
+%
+% First, the author name is formatted, followed by a comma,
+% then come any marks relating to affiliation (if present),
+% then come the homepage URL and email address, if any, with
+% appropriate punctuation.
+%
+% Here, as in \cmd\@affil@script, the parameter \cmd\affil@cutoff\
+% controls whether the argument \#3 is produced as a superscript label
+% connecting this author with its affiliation. (If there is only one
+% affiliation on the title page, it makes sense to remove the superscript.)
+%
+% Note that argument \#3 must effectively execute either
+% \cmd\aftergroup\cmd\true@sw\ or \cmd\aftergroup\cmd\false@sw\ (exactly once!).
+% In the case of \classoption{superscriptaddress}, this is done when
+% \cmd\@author@present@script\ invokes \cmd\doauthor\ with its third argument containing
+% \cmd\@affil@present@script.
+% Otherwise (e.g., \classoption{groupedaddress}), \cmd\doauthor\ is invoked by
+% \cmd\@author@present@group\ with its third argument containing \cmd\@affil@present@group.
+% \begin{macrocode}
+\def\doauthor#1#2#3{%
+ \ignorespaces#1\unskip\@listcomma
+ \begingroup
+ #3%
+% \end{macrocode}
+% At this point, we must have queued up a Boolean (either \cmd\true@sw\ or \cmd\false@sw).
+% \begin{macrocode}
+ \@if@empty{#2}{\endgroup{}{}}{\endgroup{\comma@space}{}\frontmatter@footnote{#2}}%
+ \space \@listand
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\x@match}
+% Procedure \cmd\x@match\ is used as an alias \cmd\AFG@opr,
+% probing the list of affiliation groups
+% and setting a Boolean if a match is found to \#1 (usually the current affiliation group).
+%
+% Procedure \cmd\y@match\ is used as an alias to \cmd\@TBN@opr,
+% probing the list of unique title block footnotes for a match to the footnote text:
+% when the first match is found it sets a Boolean,
+% defining \cmd\@tempb\ to the number of that footnote.
+% \begin{macrocode}
+\def\x@match#1#2{%
+ \temp@sw{}{%
+ \def\@tempifx{#2}%
+ \@ifx{\@tempifx#1}{%
+ \@booleantrue\temp@sw
+ }{%
+ }%
+ }%
+}%
+\def\y@match#1#2#3{%
+ \temp@sw{}{%
+ \def\@tempifx{#3}%
+ \@ifx{\@tempifx#1}{%
+ \@booleantrue\temp@sw
+ \def\@tempb{#2}%
+ }{%
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@footnote}
+% Used when typesetting a title block footnote.
+% (Item 290: merge duplicates.)
+%
+% Maintains a list of frontmatter footnotes along with associated device.
+% Uniquifies each footnote by traversing the list and looking for a match to the footnote text.
+% If found, define \cmd\@tempb\ to the corresponding footnote device, and typeset it with \cmd\@footnotemark.
+% If never found, manually increment footnote counter,
+% determine the corresponding footnote device, and
+% add footnote text and device to the list of frontmatter footnotes.
+%
+% The list \cmd\@FMN@list\ is processed later in the title block production.
+%
+% Note that this method of making footnotes runs afoul of \classname{hyperref}'s patches of the \LaTeX\ kernel.
+% Therefore, we avoid trouble by refraining from using \cmd\@footnotemark\ and by creating our own hypertext links.
+% \begin{macrocode}
+\def\frontmatter@footnote#1{%
+ \begingroup
+ \@booleanfalse\temp@sw
+ \def\@tempa{#1}%
+ \let\@tempb\@empty
+ \def\@TBN@opr{\y@match\@tempa}%
+ \@FMN@list
+% \end{macrocode}
+% By side effect, \cmd\@tempb\ holds the value of the footnote counter if
+% This note has been seen before. Otherwise \cmd\temp@sw\ is false.
+% \begin{macrocode}
+ \temp@sw{%
+ \expandafter\frontmatter@footnotemark
+ \expandafter{\@tempb}%
+ }{%
+% \end{macrocode}
+% Execute \cmd\frontmatter@foot@mark, feeding it the value of the current footnote counter.
+% This call requires two levels of pre-expansion to accomplish, the first to expand \cmd\csname, the second to evaluate \cmd\the.
+% \begin{macrocode}
+ \stepcounter\@mpfn
+ \expandafter\expandafter
+ \expandafter\frontmatter@foot@mark
+ \expandafter\expandafter
+ \expandafter{%
+ \expandafter \the\csname c@\@mpfn\endcsname
+ }{#1}%
+ }%
+ \endgroup
+}%
+% \end{macrocode}
+% Procedure \cmd\frontmatter@foot@mark\ lays down the footnote device (mark) and takes care of the footnote text.
+% The latter merely involves queueing that text (along with its associated device) into \cmd\@FMN@list.
+% \begin{macrocode}
+\def\frontmatter@foot@mark#1#2{%
+ \frontmatter@footnotemark{#1}%
+ \g@addto@macro\@FMN@list{\@TBN@opr{#1}{#2}}%
+}%
+\appdef\frontmatter@init{%
+ \global\let\@FMN@list\@empty
+}%
+% \end{macrocode}
+% \changes{4.1n}{2010/01/02}{(AO, 572) Independent footnote counter for title block. Abstract footnote counter shared with body.}%
+% \begin{macrocode}
+\def\frontmatter@footnotemark#1{%
+ \leavevmode
+ \ifhmode\edef\@x@sf{\the\spacefactor}\nobreak\fi
+ \begingroup
+ \hyper@linkstart {link}{frontmatter.#1}%
+ \csname c@\@mpfn\endcsname#1\relax
+ \def\@thefnmark{\frontmatter@thefootnote}%
+ \@makefnmark
+ \hyper@linkend
+ \endgroup
+ \ifhmode\spacefactor\@x@sf\fi
+ \relax
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsection{The keywords command}%
+% \begin{macro}{\keywords}
+% \begin{macro}{\@keywords}
+% Usual game, save text in a macro for processing by \cmd\maketitle.
+% \begin{macrocode}
+\def\keywords#1{%
+ \aftermaketitle@chk{\keywords}%
+ \gdef\@keywords{#1}%
+}%
+\appdef\frontmatter@init{%
+ \let\@keywords\@empty
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{The \cs{date} command and related commands}%
+% \begin{macro}{\date}
+% \begin{macro}{\received}
+% \begin{macro}{\revised}
+% \begin{macro}{\accepted}
+% \begin{macro}{\published}
+% \begin{macro}{\@date}
+% \begin{macro}{\@received}
+% \begin{macro}{\@revised}
+% \begin{macro}{\@accepted}
+% \begin{macro}{\@published}
+% \changes{4.1b}{2008/08/02}{Make the syntax of this package switch optional}%
+% Use the \cmd\date\ command to specify the document date,
+% the \cmd\received\ command to specify the date received,
+% \cmd\revised\ for date revised,
+% \cmd\accepted\ for date accepted, and
+% \cmd\published\ for date published.
+% Normally only \cmd\date\ to be used by author,
+% the remainder used only by editors.
+%
+% DPC: As for \cmd\keywords, but this time don't flag a warning if there is no
+% revision date specified.
+%
+% In each case the user-level command defines the value of a
+% macro which buffers the data entered by the user.
+% For instance, \cmd\received\ causes \cmd\@received\ to
+% acquire a value.
+% The optional argument allows the user to override the
+% text that will be typeset along with the date;
+% the default value of that text is itself
+% a localized macro.
+% \begin{macrocode}
+\newcommand*\frontmatter@date[2][\Dated@name]{\def\@date{#1#2}}%
+\def\@date{}%
+\newcommand*\received[2][\Received@name]{\def\@received{#1#2}}%
+\def\@received{}%
+\newcommand*\revised[2][\Revised@name]{\def\@revised{#1#2}}%
+\def\@revised{}%
+\newcommand*\accepted[2][\Accepted@name]{\def\@accepted{#1#2}}%
+\def\@accepted{}%
+\newcommand*\published[2][\Published@name]{\def\@published{#1#2}}%
+\def\@published{}%
+% \end{macrocode}
+%
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{The pacs command}%
+% PACS, the Physics and Astronomy Classification Scheme.
+% \begin{macro}{\pacs}
+% \begin{macro}{\@pacs}
+% As for \cmd\keywords\
+% \begin{macrocode}
+\def\pacs#1{%
+ \aftermaketitle@chk{\pacs}%
+ \gdef\@pacs{#1}%
+}%
+\appdef\frontmatter@init{%
+ \let\@pacs\@empty
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{The \cs{preprint} command}
+%
+% \changes{4.0g}{1998/06/10}{multiple preprint commands}
+% \begin{macrocode}
+\def\preprint#1{\gappdef\@preprint{\preprint{#1}}}%
+\appdef\frontmatter@init{%
+ \let\@preprint\@empty
+}%
+% \end{macrocode}
+%
+% \subsection{The \env{abstract} environment}%
+%
+% \changes{4.0b}{1999/06/20}{Gathered all code for the abstract environment together and abstracted out the formatting details for journals to override.}
+%
+% \begin{macro}{\absbox}
+%
+% \begin{macrocode}
+\newbox\absbox
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{abstract}
+% Abstract, as in AMS classes, must be specified \emph{before}
+% \cmd\maketitle. It just saves everything up in \cmd\absbox.
+% \changes{4.0d}{1998/01/31}{If empty \cs{abstractname} omit spacing}
+% \changes{4.0d}{1998/01/31}{hookify}
+% Note that the specifics of how the abstract is to be
+% formatted are set by \cmd\frontmatter@abstractwidth,
+% \cmd\frontmatter@abstractheading, and \cmd\frontmatter@abstractfont.
+%
+% Here we wish to set the abstract into type but save it away in a box, much like
+% the \cmd\minipage\ command does.
+%
+% Note that the \cmd\endabstract\ portion of the environment
+% begins with code that mostly duplicates \cmd\endminipage, but without the \cmd\@iiiparbox.
+% At the end, we simply transfer the contents of the \cmd\minipage\
+% into a box of our own.
+%
+% However, we also have to end the gratuitous
+% paragraph begun by \cmd\minipage.
+% We ensure that no trace of that paragraph is left,
+% by absorbing the \cmd\parindent\ box.
+% Doing so destroys the paragraph entirely, except
+% for the \cmd\parskip\ glue, and that morsel is pruned, because we are at the top
+% of a page.
+%
+% This mechanism is vulnerable, however, because anything placed into the horizontal list
+% after the \cmd\parindent\ box will confound it.
+% And that is exactly what happens under Mik\TeX:
+% There seems to be an extension to the \TeX\ standard operating here which inserts a \cmd\special \ at the beginning of every paragraph.
+% (The mechnism is \emph{not} based on \cmd\everypar.)
+%
+% To accomodate this state of affairs,
+% we have a new mechanism that offers an even more complete rewrite of \env{minipage}.
+%
+% Note that an entry is made in the toc for the abstract; this has the side effect
+% of creating a PDF bookmark for this element if the \classname{hyperref} package is in effect.
+% \changes{4.1a}{2008-06-30}{(AO, 443) create an entry in the PDF bookmarks for the abstract via the toc}
+% \begin{macrocode}
+\def\toclevel@abstract{1}%
+\def\addcontents@abstract{%
+ \phantomsection
+ \expandafter\def\csname Parent0\endcsname{section*.2}%
+ \expandafter\@argswap@val\expandafter{\abstractname}{\addcontentsline{toc}{abstract}}%
+}%
+\newenvironment{frontmatter@abstract}{%
+ \aftermaketitle@chk{\begin{abstract}}%
+ \global\setbox\absbox\vbox\bgroup
+ \color@begingroup
+ \columnwidth\textwidth
+ \hsize\columnwidth
+ \@parboxrestore
+% \end{macrocode}
+% The following line switches footnotes to the \texttt{mpfoootnote} series.
+% This action should rather be taken by \cmd\frontmatter@abstractfont, which can be customized.
+% There is also an interaction with \cmd\mini@note.
+% \begin{macrocode}
+ \def\@mpfn{mpfootnote}\def\thempfn{\thempfootnote}\c@mpfootnote\z@
+ \let\@footnotetext\frontmatter@footnotetext
+ \minipagefootnote@init
+ \let\set@listindent\set@listindent@
+ \let\@listdepth\@mplistdepth \@mplistdepth\z@
+ \let@environment{description}{frontmatter@description}%
+ \@minipagerestore
+ \@setminipage
+ \frontmatter@abstractheading
+ \frontmatter@abstractfont
+ \let\footnote\mini@note
+ \expandafter\everypar\expandafter{\the\everypar\addcontents@abstract\everypar{}}%
+}{%
+ \par
+ \unskip
+ \minipagefootnote@here
+ \@minipagefalse %% added 24 May 89
+ \color@endgroup
+ \egroup
+}%
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\frontmatter@footnotetext}
+% We reimplement \cmd\@mpfootnotetext\ under a new name (so as not to be overridden by the \classname{hyperref} package)
+% and extend it to accomodate hyperrefs.
+%
+% Note that this procedure is very like \classname{ltxutil}'s \cmd\mp@footnotetext, except that it
+% uses \cmd\frontmatter@makefntext\ instead of \cmd\@makefntext.
+%
+% \changes{4.1f}{2009/07/07}{(AO, 515) Use \cs{set@footnotefont}, which is defined in ltxutil}
+% \changes{4.1n}{2010/01/02}{(AO, 571) allow split after last line of footnote}%
+% \changes{4.1n}{2010/01/02}{(AO, 572) Independent footnote counter for title block. Abstract footnote counter shared with body.}%
+% \begin{macrocode}
+\long\def\frontmatter@footnotetext#1{%
+ \minipagefootnote@pick
+ \set@footnotefont
+ \set@footnotewidth
+ \@parboxrestore
+ \protected@edef\@currentlabel{\csname p@\@mpfn\endcsname\@thefnmark}%
+ \color@begingroup
+ \frontmatter@makefntext{%
+ \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox\vadjust{\vskip\z@skip}%
+ }%
+ \color@endgroup
+ \minipagefootnote@drop
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ltx@no@footwarn}
+%
+% \begin{macrocode}
+\def\ltx@no@footnote{%
+ \let\ltx@xfootnote\ltx@no@xfootnote\let\ltx@yfootnote\ltx@no@yfootnote
+ \let\ltx@xfootmark\ltx@no@xfootmark\let\ltx@yfootmark\ltx@no@yfootmark
+ \let\ltx@xfoottext\ltx@no@xfoottext\let\ltx@yfoottext\ltx@no@yfoottext
+}%
+\def\ltx@no@xfootnote[#1]#2{\ltx@no@footwarn\footnote}%
+\def\ltx@no@yfootnote#1{\ltx@no@footwarn\footnote}%
+\def\ltx@no@xfootmark[#1]{\ltx@no@footwarn\footnotemark}%
+\def\ltx@no@yfootmark{\ltx@no@footwarn\footnotemark}%
+\def\ltx@no@xfoottext[#1]#2{\ltx@no@footwarn\footnotetext}%
+\def\ltx@no@yfoottext#1{\ltx@no@footwarn\footnotetext}%
+\def\ltx@no@footwarn#1{%
+ \class@warn{%
+ The \string#1\space command is not legal on the title page;
+ using \string\thanks\space instead might suit you: consult the manual for details%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@abstractheading}
+% The default abstract head; journals will override this procedure.
+% \begin{macrocode}
+\def\frontmatter@abstractheading{%
+ \begingroup
+ \centering\large
+ \abstractname
+ \par
+ \endgroup
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@abstractfont}
+% The default type specification for the body of the abstract.
+% Journals will override this setting.
+% \begin{macrocode}
+\def\frontmatter@abstractfont{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{frontmatter@description}
+% \changes{4.1b}{2008/06/29}{(AO, 455) provide a \texttt{description} environment for the abstract}
+% Within the abstract, the description environment is defined as follows:
+% \begin{macrocode}
+\newenvironment{frontmatter@description}{%
+ \list{}{%
+ \leftmargin\z@
+ \labelwidth\z@
+% \end{macrocode}
+% \begin{verbatim}
+% \itemindent-\leftmargin
+% \end{verbatim}
+% \begin{macrocode}
+ \itemindent\z@
+ \let\makelabel\frontmatter@descriptionlabel
+ }%
+}{%
+ \endlist
+}%
+\def\frontmatter@descriptionlabel#1{%
+ \hspace\labelsep
+ \normalfont\bfseries
+ #1:%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@abstractwidth}
+% The default setting is the full text width;
+% journals can override this setting.
+% \begin{macrocode}
+\def\frontmatter@abstractwidth{\textwidth}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@abstract@produce}
+% This procedure determines how the abstract is incorporated
+% into the title block. We split this out in anticipation
+% of the need to lift the limitation that the abstract not break over pages.
+%
+% If we are in preprint style, we provide an easy pagebreak point immediately above the abstract.
+% This means that the abstract will either fit entirely on the same page as the title block,
+% or it will start a page of its own (which may itself break onto a subsequent page if necessary).
+% \begin{macrocode}
+\def\frontmatter@abstract@produce{%
+ \par
+ \preprintsty@sw{%
+ \do@output@MVL{%
+ \vskip\frontmatter@preabstractspace
+ \vskip200\p@\@plus1fil
+ \penalty-200\relax
+ \vskip-200\p@\@plus-1fil
+ }%
+ }{%
+ \addvspace{\frontmatter@preabstractspace}%
+ }%
+ \begingroup
+ \dimen@\baselineskip
+ \setbox\z@\vtop{\unvcopy\absbox}%
+ \advance\dimen@-\ht\z@\advance\dimen@-\prevdepth
+ \@ifdim{\dimen@>\z@}{\vskip\dimen@}{}%
+ \endgroup
+ \begingroup
+ \prep@absbox
+ \unvbox\absbox
+ \post@absbox
+ \endgroup
+ \@ifx{\@empty\mini@notes}{}{\mini@notes\par}%
+ \addvspace\frontmatter@postabstractspace
+}%
+\appdef\frontmatter@init{\let\mini@notes\@empty}%
+\let\prep@absbox\@empty
+\let\post@absbox\@empty
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@preabstractspace}
+% \begin{macro}{\frontmatter@postabstractspace}
+% Space above and space below abstract in title block
+% \begin{macrocode}
+\def\frontmatter@preabstractspace{.5\baselineskip}
+\def\frontmatter@postabstractspace{.5\baselineskip}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+% \subsection{Formatting the title block}%
+%
+% \begin{environment}{titlepage}
+% This is \LaTeXe's \classname{article} class version,
+% with modifications.
+% \changes{4.0c}{1999/11/13}{grid changes with ltxgrid}
+% \changes{4.1b}{2008/08/02}{Make the syntax of this package switch optional}%
+% \begin{macrocode}
+\newenvironment{frontmatter@titlepage}{%
+ \twocolumn@sw{\onecolumngrid}{\newpage}%
+ \thispagestyle{titlepage}%
+ \setcounter{page}\@ne
+}{%
+ \twocolumn@sw{\twocolumngrid}{\newpage}%
+ \twoside@sw{}{%
+ \setcounter{page}\@ne
+ }%
+}%
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\maketitle}
+% \changes{4.0d}{1998/01/31}{hookify}
+% Put it all together to format the title block.
+%
+% Gotcha!
+% If you expand \cmd\csname undefined\cmd\endcsname, you change the meaning of \cmd\undefined\ from
+% ``Undefined'' to \cmd\relax.
+% Watchout!
+% \begin{macrocode}
+\def\frontmatter@maketitle{%
+ \@author@finish
+ \title@column\titleblock@produce
+ \suppressfloats[t]%
+% \end{macrocode}
+% Now save some memory.
+% \begin{macrocode}
+ \let\and\relax
+ \let\affiliation\@gobble
+ \let\author\@gobble
+ \let\@AAC@list\@empty
+ \let\@AFF@list\@empty
+ \let\@AFG@list\@empty
+ \let\@AF@join\@AF@join@error
+ \let\email\@gobble
+ \let\@address\@empty
+ \let\maketitle\relax
+ \let\thanks\@gobble
+ \let\abstract\@undefined\let\endabstract\@undefined
+ \titlepage@sw{%
+ \vfil
+ \clearpage
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\maketitle@Hy}
+% \changes{4.1c}{2008/08/04}{Hyperref compatibility: take \cs{maketitle} back.}
+% We provide the means to take back the definition of \cmd\maketitle\ from \classname{hyperref}:
+% we do not need its help in providing hypertext services in the title page.
+% \begin{macrocode}
+\def\maketitle@Hy{%
+ \let\Hy@saved@footnotemark\@footnotemark
+ \let\Hy@saved@footnotetext\@footnotetext
+ \let\@footnotemark\H@@footnotemark
+ \let\@footnotetext\H@@footnotetext
+ \@ifnextchar[%]
+ \Hy@maketitle@optarg
+ {%
+ \HyOrg@maketitle
+ \Hy@maketitle@end
+ }%
+}%
+\appdef\class@documenthook{%
+ \@ifx{\maketitle\maketitle@Hy}{%
+ \class@info{Taking \string\maketitle\space back from hyperref}%
+ \let\maketitle\frontmatter@maketitle
+ }{%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\titleblock@produce}
+% This procedure produces the title block.
+%
+% It effectively executes inside a group
+% and always returns us to vertical mode.
+%
+% Note: we assume that it is OK to set the footnote counter to zero at this point.
+% Is this a safe assumption?
+% \begin{macrocode}
+\def\titleblock@produce{%
+ \begingroup
+% \end{macrocode}
+% \changes{4.0b}{1999/06/20}{Set \cs{footnote} to \LaTeX\ standard version for this scope.}
+% First, we restore the footnote mechanism to its default state,
+% then we customize the way the footnote mark is produced and how it is formatted.
+% \changes{4.1n}{2010/01/02}{(AO, 572) Independent footnote counter for title block. Abstract footnote counter shared with body.}%
+% \begin{macrocode}
+ \ltx@footnote@pop
+% \end{macrocode}
+% The following three lines establish an independent footnote counter for use in the title block.
+% \changes{4.1n}{2010/01/02}{(AO, 572) Independent footnote counter for title block. Abstract footnote counter shared with body.}%
+% \begin{macrocode}
+ \def\@mpfn{mpfootnote}%
+ \def\thempfn{\thempfootnote}%
+ \c@mpfootnote\z@
+ \let\@makefnmark\frontmatter@makefnmark
+ \frontmatter@setup
+ \thispagestyle{titlepage}\label{FirstPage}%
+% \end{macrocode}
+% Produce the title:
+% \begin{macrocode}
+ \frontmatter@title@produce
+% \end{macrocode}
+% Produce the author list:
+% \begin{macrocode}
+ \groupauthors@sw{%
+ \frontmatter@author@produce@group
+ }{%
+ \frontmatter@author@produce@script
+ }%
+% \end{macrocode}
+% Produce the dates:
+% \begin{macrocode}
+ \frontmatter@RRAPformat{%
+ \expandafter\produce@RRAP\expandafter{\@date}%
+ \expandafter\produce@RRAP\expandafter{\@received}%
+ \expandafter\produce@RRAP\expandafter{\@revised}%
+ \expandafter\produce@RRAP\expandafter{\@accepted}%
+ \expandafter\produce@RRAP\expandafter{\@published}%
+ }%
+% \end{macrocode}
+% Produce the abstract, PACS, and keywords, and end any paragraph.
+% \changes{4.1c}{2008/08/04}{Produce PACS, keywords only if specified}%
+% \begin{macrocode}
+ \frontmatter@abstract@produce
+ \@ifx@empty\@pacs{}{%
+ \@pacs@produce\@pacs
+ }%
+ \@ifx@empty\@keywords{}{%
+ \@keywords@produce\@keywords
+ }%
+ \par
+ \frontmatter@finalspace
+ \endgroup
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@title@produce}
+% The default formatting procedure for the article title.
+% This procedure should take care of the vertical space below the title.
+%
+% Clients may override this procedure, but it is more likely that they will
+% use the hooks \cmd\frontmatter@title@above, \cmd\frontmatter@title@format, and \cmd\frontmatter@title@below.
+% \changes{4.1b}{2008/08/04}{(AO, 443) PDF Bookmark for title page}%
+% \begin{macrocode}
+\def\toclevel@title{0}%
+\def\frontmatter@title@produce{%
+ \begingroup
+ \frontmatter@title@above
+ \frontmatter@title@format
+ \@title
+ \unskip
+ \phantomsection\expandafter\@argswap@val\expandafter{\@title}{\addcontentsline{toc}{title}}%
+ \@ifx{\@title@aux\@title@aux@cleared}{}{%
+ \expandafter\frontmatter@footnote\expandafter{\@title@aux}%
+ }%
+ \par
+ \frontmatter@title@below
+ \endgroup
+}%
+\appdef\let@mark{\let\\\relax}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@title@above}
+% \begin{macro}{\frontmatter@title@format}
+% \begin{macro}{\frontmatter@title@below}
+% The default values for formatting specifications for the article title.
+%
+% The procedure \cmd\frontmatter@title@above\ should take care of the vertical space above the title;
+% \cmd\frontmatter@title@below\ below.
+% The procedure \cmd\frontmatter@title@format\ should invoke any font switches, etc.
+% that may apply to the title.
+%
+% Journals will override this procedure.
+% \begin{macrocode}
+\def\frontmatter@title@above{}%
+\def\frontmatter@title@format{}%
+\def\frontmatter@title@below{\addvspace{\baselineskip}}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Authors and affiliations in superscriptaddress style}
+%
+% \begin{macro}{\frontmatter@author@produce@script}
+% \changes{4.1b}{2008/08/02}{Provide for diagnostics via \cs{frontmatterverbose@sw}}
+% \cmd\frontmatter@author@produce@script\ is an alias for \cmd\frontmatter@author@produce,
+% the procedure that formats the author/affiliation list.
+%
+% In this case, the authors affiliations are being superscripted
+% (class option \classoption{superscriptaddress}).
+%
+% This procedure must ensure that any paragraph that it starts gets ended finally.
+% \changes{4.1i}{2009/10/18}{(AO, 540) More runtime diagnostics via \cs{frontmatterverbose@sw}}
+% \changes{4.1m}{2009/11/20}{(AO, 563) More complete runtime diagnostics via \cs{frontmatterverbose@sw}}
+% \begin{macrocode}
+\def\frontmatter@author@produce@script{%
+ \begingroup
+ \let\@author@present\@author@present@script
+ \frontmatterverbose@sw{\typeout{\string\frontmatter@author@produce@script:}\say\@AAC@list\say\@AFF@list\say\@AFG@list}{}%
+% \end{macrocode}
+% \changes{4.0l}{1998/09/01}{Changes to add collaboration processing, which now means doing comma/and processing on each sublist}
+% When the author/affiliation list \cmd\@AAC@list\ is executed,
+% \cmd\@tempcnt\ counts each author,
+% and
+% \cmd\@tempa\ stores a list of author indices for the current collaboration.
+%
+% Note: this procedure uses \cmd\AU@temp\ to hold a list of author counts for each collaboration.
+% Note: also uses \cmd\@tempcnta\ to communicate between procedures.
+% This usage ot \cmd\@tempcnta\ is OK, because the expansion of \cmd\@AAC@list\ will trigger only the execution of
+% our own procedures.
+% \begin{macrocode}
+ \let\AU@temp\@empty
+ \@tempcnta\z@
+% \end{macrocode}
+%
+% We wish to know how many authors are in each collaboration, for the purposes of \cmd\listcomma\ and \cmd\listand.
+%
+% Here we assign values for the intercollated operators appearing within \cmd\@AAC@list,
+% then execute that macro, registering the authors in each collaboration.
+% Afterwards, clean up by emulating an empty collaboration.
+%
+% The result, stored in \cmd\AU@temp, is a list of brace-delmited tokens, each a number
+% representing the number of authors in that collaboration.
+% \begin{macrocode}
+ \let\AF@opr \@gobble
+ \def\AU@opr{\@author@count\@tempcnta}%
+ \def\CO@opr{\@collaboration@count\AU@temp\@tempcnta}%
+ \@AAC@list
+ \expandafter\CO@opr\@author@cleared
+% \end{macrocode}
+% Next, present the authors and their affiliations, with the collaborations interleaved.
+%
+% We assign values for the intercollated operators appearing within \cmd\@AAC@list.
+% Next, assign \cmd\@listcomma\ based on the number of authors in the first collaboration.
+% Then expand \cmd\@AAC@list.
+%
+% Upon completion, there will be two space tokens following the last author because of \cmd\listand\ processing;
+% remove them, then end the last paragraph.
+%
+% FIXME: this juncture would be a good time to effectively eliminate
+% the unused affiliations in \cmd\@AFF@list.
+% \begin{macrocode}
+ \begingroup
+ \frontmatter@authorformat
+ \let\AF@opr \@affilID@def
+ \let\AU@opr \@author@present
+ \def\CO@opr{\@collaboration@present\AU@temp}%
+ \set@listcomma@list\AU@temp
+ \@AAC@list
+ \unskip\unskip
+ \par
+ \endgroup
+% \end{macrocode}
+% We now list out the affiliations in the order they appeared.
+% \begin{macrocode}
+ \begingroup
+ \frontmatter@above@affiliation@script
+ \let\AFF@opr \@affil@script
+ \@AFF@list
+ \frontmatter@footnote@produce
+ \par
+ \endgroup
+ \endgroup
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@author@count}
+% This version of \cmd\AU@opr\ counts the number of authors it processes.
+% \begin{macrocode}
+\def\@author@count#1{%
+ \advance#1\@ne
+ \@author@gobble
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@collaboration@present}
+% Format a collaboration.
+% Note that we immediately end the paragraph thus begun, because we only support
+% \classoption{superscriptaddress}-style processing.
+%
+% Note also that the execution of the production procedures takes place inside of a group;
+% for reasons of protective programming.
+%
+% Bug note: originally, the number of authors in each collaboration was stored in \cmd\@tempa,
+% but this exposed us to procedures in our production that modified the meaning of \cmd\@tempa.
+%
+% The last action done in this procedure is to assign \cmd\@listcomma\ based on the number of authors in the next collaboration.
+% \begin{macrocode}
+\def\@collaboration@present#1#2#3#4{%
+ \par
+ \begingroup
+ \frontmatter@collaboration@above
+ \@affilID@def{}%
+ \@tempcnta\z@
+ \@author@present{}{(\ignorespaces#3\unskip)}{#4}%
+ \par
+ \endgroup
+ \set@listcomma@list#1%
+}%
+\def\frontmatter@collaboration@above{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@collaboration@count}
+% Simply register each author in this collaboration.
+% Note: \#1 is a \cmd\csname\ to hold the value, \#2 is the \cmd\count\ register holding the count of interest.
+% \begin{macrocode}
+\def\@collaboration@count#1#2{%
+ \appdef@eval#1{\the#2}#2\z@
+ \@author@gobble
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@affilID@def}
+%
+% The \cmd\@affilID@def\ procedure, an alias of \cmd\AF@opr\ used during \cmd\frontmatter@author@produce@script\ processing,
+% memorizes the affiliation in \cmd\@affilID@temp.
+% \begin{macrocode}
+\def\@affilID@def{\def\@affilID@temp}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@affilID@temp}
+%
+% The macro \cmd\@affilID@temp\ is used to communicate between
+% \cmd\doauthor\ and instances of \cmd\AF@opr\ within the author list.
+% \begin{macrocode}
+\let\@affilID@temp\@empty
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\affils@present@script}
+% An alias of \cmd\AFG@opr, this procedure is applied to elements in \cmd\@AFG@list.
+% It builds \cmd\@AFU@list, a list of unique affiliations found within affiliation groups.
+%
+% \changes{4.1a}{2008/06/16}{removed code that had been commented out}
+% \begin{verbatim}
+%\def\affils@present@script#1{%
+% \get@affil#1{}%
+%}%
+%\def\get@affil#1{%
+% \def\@tempa{#1}%
+% \@ifx{\@empty\@tempa}{}{%
+% \@booleanfalse\temp@sw
+% \def\AF@opr{\x@match\@tempa}%
+% \@AFU@list
+% \temp@sw{}{%
+% \appdef\@AFU@list{\AF@opr{#1}}%
+% }%
+% \get@affil
+% }%
+%}%
+% \end{verbatim}
+% \end{macro}
+%
+% \begin{macro}{\affil@present@script}
+% An alias of \cmd\AF@opr, this procedure is applied to \cmd\@AFU@list\ when formatting the affiliations
+% under \classoption{superscriptaddress}.
+% It in turn applies \cmd\affil@script\ to \cmd\@AFF@list, thereby formatting the affiliation
+% associated with this affiliation index.
+%
+% Note: it traverses the \cmd\@AFF@list\ for each entry in the \cmd\@AFU@list, thereby making this
+% portion of code execute in $N^{2}$ time.
+% \changes{4.1a}{2008/06/16}{removed code that had been commented out}
+% \begin{verbatim}
+%\def\affil@present@script#1{%
+% \def\@tempa{#1}%
+% \begingroup
+% \frontmatter@affiliationfont
+% \let\AFF@opr \affil@script
+% \@AFF@list
+% \endgroup
+%}%
+% \end{verbatim}
+% \end{macro}
+%
+% \begin{macro}{\affil@script}
+% Alias of \cmd\AFF@opr, this procedure is applied to \cmd\@AFF@list\ when formatting the affiliations
+% under \classoption{superscriptaddress}.
+% It rejects all entries not matching the affiliation index held in \cmd\@tempa.
+% \begin{macrocode}
+\def\affil@script#1#2#3{%
+ \def\@tempifx{#1}\@ifx{\@tempifx\@tempa}{%
+ \@if@empty{#2}{}{%
+ \par
+ \begingroup
+ \def\@thefnmark{#1}\@makefnmark\ignorespaces
+ #2%
+ \@if@empty{#3}{}{\frontmatter@footnote{#3}}%
+ \par
+ \endgroup
+ }%
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@affil@script}
+% Alias of \cmd\AFF@opr:
+% The affiliations are being formatted in the case
+% where affiliations are being superscripted:
+% make a list out of the affiliations with the numbers printed.
+% Society-specific code can change the formatting
+% by overriding the definition of \cmd\frontmatter@affiliationfont.
+%
+% A client may choose to set \cmd\affil@cutoff\ to either \cmd\@ne\ (the default)
+% or \cmd\tw@. The latter setting will enforce a rule to the effect that
+% if a single affiliation appears on the title page,
+% then no affiliation superscript at all is produced.
+%
+% |#1|---Affiliation ID: a number; zero signifies a \cmd\noaffiliation.
+%
+% |#2|---Collaboration ID
+%
+% |#3|---Affiliation address
+%
+% |#4|---Auxiliary info
+% \begin{macrocode}
+\def\@affil@script#1#2#3#4{%
+% \end{macrocode}
+% If the affiliation is the \cmd\noaffiliation, then we do nothing.
+% \begin{macrocode}
+ \@ifnum{#1=\z@}{}{%
+ \par
+ \begingroup
+ \frontmatter@affiliationfont
+ \@ifnum{\c@affil<\affil@cutoff}{}{%
+ \def\@thefnmark{#1}\@makefnmark
+ }%
+ \ignorespaces#3%
+ \@if@empty{#4}{}{\frontmatter@footnote{#4}}%
+ \par
+ \endgroup
+ }%
+}%
+\let\affil@cutoff\@ne
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@author@present@script}
+% \changes{4.0h}{1998/06/25}{Changes to support groups of affiliations}
+% \changes{4.1n}{2009/11/30}{(AO, 567) Handle \cs{noaffiliation} case}
+% This version of \cmd\AU@opr\ applies to the \classoption{superscriptaddress} class option.
+% Need to add commas between groups
+% of address numbers, which are passed in the macro \cmd\@affilID@temp\ in the form
+% |{3}{4}{7}| if this set of authors is related to addresses, 3, 4 and 7.
+% \begin{macrocode}
+\def\@author@present@script#1#2#3{%
+ \begingroup
+ \gdef\comma@space{\textsuperscript{,\,}}%
+ \doauthor{#2}{#3}{\@affil@present@script}%
+ \endgroup
+ \advance\@tempcnta\m@ne
+}%
+\def\@affilcomma#1#2{%
+ \@ifx{\z@#1}{%
+ \@ifx{\relax#2}{}{%
+ \@affilcomma{#2}%
+ }%
+ }{%
+ #1%
+ \@ifx{\relax#2}{}{%
+ \@ifx{\z@#2}{%
+ \@affilcomma
+ }{%
+ ,\,\@affilcomma{#2}%
+ }%
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@affil@present@script}
+% \begin{macro}{\@affil@present@script@}
+% \changes{4.1n}{2009/11/30}{(AO, 567) Handle punctuation for \classoption{superscriptaddress} style authors' extra information, such as \cs{email}}
+% The \cmd\@affil@present@script\ procedure presents the reference to the affiliations in the case of superscript addresses.
+%
+% The affiliations are presented to \cmd\@affil@present@script@ as a list of brace-delimited tokens, each containing the affiliation ID (a number).
+% The list is terminated by the token \cmd\relax.
+% The macro recurses (via tail recursion) until the terminating token is encountered.
+% Note that an affiliation ID of zero signifies a \cmd\noaffiliation:
+% references to the \cmd\noaffiliation\ are passed over.
+%
+% Upon termination, the affiliations, if any, are produced via \cmd\textsuperscript\ and the appropriate boolean is queued via \cmd\aftergroup.
+% The boolean signifies that a non-trivial affiliation was produced, so that the proper punctuation can be produced.
+% The group in question is that opened and closed by the \cmd\doauthor\ procedure.
+%
+% This procedure uses \cmd\@tempa\ as a scratch register.
+% \begin{macrocode}
+\def\@affil@present@script{%
+ \let\@tempa\@empty
+ \expandafter\@affil@present@script@\@affilID@temp\relax
+}%
+\def\@affil@present@script@#1{%
+ \@ifx{\relax#1}{%
+ \@ifx{\@tempa\@empty}{%
+ \aftergroup\false@sw
+ }{%
+ \textsuperscript{\expandafter\@affilcomma\@tempa\relax\relax}%
+ \aftergroup\true@sw
+ }%
+ }{%
+ \@ifnum{#1=\z@}{}{\appdef\@tempa{{#1}}}%
+ \@affil@present@script@
+ }%
+}%
+\@provide\@author@parskip{\z@skip}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{Authors and affiliations in groupedaddress style}
+%
+% \begin{macro}{\frontmatter@author@produce@group}
+% \changes{4.1b}{2008/08/02}{Provide for diagnostics via \cs{frontmatterverbose@sw}}
+% Alias for \cmd\frontmatter@author@produce when \classoption{groupedaddress} is in effect,
+% the procedure that formats the author/affiliation list.
+%
+% In this case, the authors are being grouped above their shared addresses.
+% How it works: the \cmd\@AFG@list, a list of all unique affiliation groups, is expanded.
+% For each such group, all authors belonging to that group are formatted above the affiliation group.
+% Collaborations are silently passed over.
+%
+% This procedure must ensure that any paragraph that it starts gets ended finally.
+% \changes{4.1i}{2009/10/18}{(AO, 540) More runtime diagnostics via \cs{frontmatterverbose@sw}}
+% \changes{4.1m}{2009/11/20}{(AO, 563) More complete runtime diagnostics via \cs{frontmatterverbose@sw}}
+% \begin{macrocode}
+\def\frontmatter@author@produce@group{%
+ \begingroup
+ \let\@author@present\@author@present@group
+ \frontmatter@authorformat
+ \frontmatterverbose@sw{\typeout{\string\frontmatter@author@produce@group:}\say\@AAC@list\say\@AFF@list\say\@AFG@list}{}%
+ \let\AU@temp\@empty
+ \set@listcomma@list\AU@temp
+ \def\CO@opr{\@collaboration@present\AU@temp}%
+ \let\AFG@opr \affils@present@group
+ \let\@listcomma\relax
+ \@AFG@list
+ \frontmatter@footnote@produce
+ \par
+ \endgroup
+ \frontmatter@authorbelow
+}%
+\@provide\frontmatter@authorbelow{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\affils@present@group}
+% \changes{4.1b}{2008/08/02}{Provide for diagnostics via \cs{frontmatterverbose@sw}}
+% Alias of \cmd\AFG@opr, this procedure is used on every element of
+% \cmd\@AFG@list, the list of unique affiliation groups,
+% when formatting the author/affiliation block:
+% It presents all authors sharing this affiliation group.
+%
+% This procedure is called via the procedure
+% \cmd\frontmatter@author@produce@group, an alias for \cmd\frontmatter@author@produce,
+%
+% Its use pertains to the class options
+% \classoption{groupedaddress}, \classoption{unsortedaddress}, and \classoption{runinaddress}
+% (that is, \cmd\groupauthors@sw\ is true).
+%
+% For each invocation, the entire \cmd\@AAC@list\ is run through (twice),
+% making this process execute in $N^{2}$ time. (Is this really true?)
+% \begin{macrocode}
+\def\affils@present@group#1{%
+% \end{macrocode}
+% Count (using \cmd\@tempcnta) the authors in the author list whose affiliation group
+% matches the argument |#1|.
+%
+% Note that \cmd\AF@temp\ is used as a storage register for the argument
+% of the procedure, for purposes of comparison using \cmd\ifx.
+%
+% Note: here we use \cmd\@tempcnta\ to accumulate the number of authors in the current affiliation set.
+%
+% QUERY: do the value of \cmd\AF@temp\ and \cmd\AF@opr\ need to persist?
+%
+% QUERY: what value does \cmd\AU@opr\ have at this point?
+% ANSWER: the \cmd\@affilID@count\ and \cmd\@affilID@match\ procedures
+% assign meanings to \cmd\AU@opr\ and \cmd\CO@opr\ dynamically.
+% We initialize the two operators to \cmd\@undefined\ so as to catch the
+% pathological cases.
+% \begin{macrocode}
+ \begingroup
+ \def\AF@temp{#1}%
+ \@tempcnta\z@
+ \let\AU@opr \@undefined
+ \let\CO@opr \@undefined
+ \def\AF@opr{\@affilID@count\AF@temp\@tempcnta}%
+ \@AAC@list
+% \end{macrocode}
+%
+% If there are no authors using this affiliation group, skip it.
+% \begin{macrocode}
+ \@ifnum{\@tempcnta=\z@}{}{%
+% \end{macrocode}
+%
+% DPC: If we have a list of length two, need to locally zap a comma.
+% \begin{macrocode}
+ \begingroup
+ \frontmatter@above@affilgroup
+ \set@listcomma@count\@tempcnta
+% \end{macrocode}
+% Run through the author list, presenting (with \cmd\@author@present)
+% those authors whose affiliation matched the given one.
+% \begin{macrocode}
+ \let\AU@opr \@undefined
+ \let\CO@opr \@undefined
+ \def\AF@opr{\@affilID@match\AF@temp}%
+ \@AAC@list
+ \endgroup
+% \end{macrocode}
+% Now that the authors have all been presented, present the affiliations, grouped.
+%
+% Note: \cmd\@tempcnta\ is the number of affiliations for this set of authors.
+% \begin{macrocode}
+ \begingroup
+ \par
+ \frontmatter@above@affiliation
+ \frontmatter@affiliationfont
+ \let\\\frontmatter@addressnewline
+ \@tempcnta\z@
+ \@tfor\AF@temp:=#1\do{%
+ \expandafter\@ifx\expandafter{\expandafter\z@\AF@temp}{}{%
+ \advance\@tempcnta\@ne
+ }%
+ }%
+ \@ifnum{\@tempcnta=\tw@}{%
+ \let\@listcomma\relax
+ }{}%
+ \def@after@address
+ \runinaddress@sw{%
+ }{%
+ \tightenlines@sw{}{%
+% \end{macrocode}
+% The following line determines the space between affilations in grouped mode
+% \begin{macrocode}
+ \parskip\z@
+ }%
+ \appdef\after@address\par
+ }%
+ \let\AFF@opr \@affil@group
+ \do@affil@fromgroup\@AFF@list#1\relax
+ \endgroup
+% \end{macrocode}
+% End of branch handling authors.
+% \begin{macrocode}
+ }%
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \par
+ \endgroup
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\def@after@address}
+% \begin{macro}{\def@after@address@empty}
+% \changes{4.1c}{2008/08/04}{Parametrize the production after the address}%
+%
+% Each of these procedures assigns a meaning to \cmd\after@address, the first
+% a useful default, the second a nil.
+% A society or journal substyle may define it according to its own requirements.
+% \begin{macrocode}
+\def\def@after@address{\def\after@address{\@listcomma\ \@listand}}%
+\def\def@after@address@empty{\let\after@address\@empty}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@affilID@count}
+% \begin{macro}{\@affilID@match}
+%
+% The control sequence name \cmd\AF@opr\ is placed in the
+% author/affiliation list (\cmd\@AAC@list) for each (new) affiliation, with that affiliation as its argument.
+%
+% The control sequence name \cmd\AF@opr\ is an alias of a procedure
+% to count the number of authors at a given affiliation (\cmd\@affilID@count)
+% or to present the given authors (\cmd\@affilID@match).
+% These two procedures are executed when formatting under the \classoption{groupedaddress} class option.
+% \begin{macrocode}
+\def\@affilID@count#1#2#3{%
+ \def\@tempifx{#3}%
+ \@ifx{\@tempifx#1}{%
+ \def\AU@opr{\@author@count#2}%
+ }{%
+ \let\AU@opr \@author@gobble
+ }%
+ \let\CO@opr \@collaboration@gobble
+}%
+\def\@affilID@match#1#2{%
+ \def\@tempifx{#2}%
+ \@ifx{\@tempifx#1}{%
+ \let\AU@opr \@author@present
+ }{%
+ \let\AU@opr \@author@gobble
+ }%
+ \let\CO@opr \@collaboration@gobble
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\do@affil@fromgroup}
+% Executes iteratively:
+% selects the next address ID to print,
+% and then re-execute the list of addresses to print the text of that address.
+%
+% Note: an argument of \cmd\relax\ breaks out of this iteration,
+% while an argument of \cmd\z@\ (\cmd\noaffiliation) is a no-op.
+%
+% Note: we have created an $N^{2}$ computing process.
+% FIXME: can use hashing instead, you know.
+% \begin{macrocode}
+\def\do@affil@fromgroup#1#2{%
+ \@ifx{\relax#2}{}{%
+ \count@#2\relax
+ \@ifnum{\z@=\count@}{}{#1}%
+ \do@affil@fromgroup#1%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@affil@group}
+% The alias of \cmd\AFF@opr\ when the list \cmd\@AFF@list\
+% is executed by \cmd\do@affil@fromgroup\ (\classoption{groupedaddress}):
+% Print the address if its number matches \cmd\count@\ (value set by \cmd\do@affil@fromgroup).
+%
+% Note that we detect a \cmd\noaffiliation\ here by the affiliation address being
+% the same as the expansion of \cmd\blankaffiliation.
+%
+% \changes{4.1d}{2008/10/17}{(AO, 410) compare \cs{@tempa} to \cs{blankaffiliation}.}%
+%
+% I made a mistake when coding the comparison to \cmd\blankaffiliation:
+% it originally read \cmd\@ifx\{\#3\cmd\blankaffiliation\}.
+% This is obviously wrong once you think twice.
+% \begin{macrocode}
+\def\@affil@group#1#2#3#4{%
+ \@ifnum{#1=\count@}{%
+ \def\@tempa{#3}%
+ \@ifx{\@tempa\blankaffiliation}{}{%
+ #3%
+ \@if@empty{#4}{}{%
+ \frontmatter@footnote{#4}%
+ }%
+ \after@address
+ }%
+ \advance\@tempcnta\m@ne
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@author@present@group}
+% \begin{macro}{\@affil@present@group}
+% \changes{4.0d}{1998/01/31}{\cs{comma@space}}
+% This version of \cmd\AU@opr\ applies to the \classoption{groupedaddress} class option and its ilk.
+% Traverse the list calling the \cmd\doauthor\ hook on each author.
+%
+% The third argument of \cmd\doauthor\ fulfills the requirement that it
+% queue up a boolean via \cmd\aftergroup.
+% \begin{macrocode}
+\def\@author@present@group#1#2#3{%
+ \gdef\comma@space{\gdef\comma@space{\textsuperscript{,\,}}}%
+ \doauthor{#2}{#3}{\@affil@present@group}%
+ \advance\@tempcnta\m@ne
+}%
+\def\@affil@present@group{%
+ \aftergroup\false@sw
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\@pacs@produce}
+% PACS, keywords and dates.
+% \changes{4.0d}{1998/01/31}{PACS boxed to width of abstract}
+% \changes{4.0b}{1999/06/20}{Separate option now controls production}
+% \changes{4.0e}{2000/09/20}{Warn if no production}
+% \begin{macrocode}
+\def\@pacs@produce#1{%
+ \showPACS@sw{%
+ \begingroup
+ \frontmatter@PACS@format
+ \@pacs@name#1\par
+ \endgroup
+ }{%
+ \@if@empty{#1}{}{%
+ \class@warn{\PACS@warn}%
+ }%
+ }%
+}%
+\def\PACS@warn{If you want your PACS to appear in your output, use document class option showpacs}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@keywords@produce}
+% \changes{4.0e}{2000/09/20}{Keywords on same footing as PACS}
+% \begin{macrocode}
+\def\@keywords@produce#1{%
+ \showKEYS@sw{%
+ \begingroup
+ \frontmatter@keys@format
+ \@keys@name#1\par
+ \endgroup
+ }{%
+ \@if@empty{#1}{}{%
+ \class@warn{If you want your keywords to appear in your output, use document class option showkeys}%
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@footnote@produce@footnote}
+% \begin{macro}{\frontmatter@footnote@produce@endnote}
+% Produce any footnotes to appear at the bottom of the title page.
+%
+% If frontmatter footnotes have been redirected to the bibliography, this will be a no-op.
+% ref.: \cmd\present@bibnote.
+% \begin{macrocode}
+\def\frontmatter@footnote@produce@footnote{%
+ \let\@TBN@opr\present@FM@footnote
+ \@FMN@list
+ \global\let\@FMN@list\@empty
+}%
+% \end{macrocode}
+% \changes{4.1n}{2010/01/02}{(AO, 572) Independent footnote counter for title block. Abstract footnote counter shared with body.}%
+% \begin{macrocode}
+\def\present@FM@footnote#1#2{%
+ \begingroup
+ \csname c@\@mpfn\endcsname#1\relax
+ \def\@thefnmark{\frontmatter@thefootnote}%
+ \frontmatter@footnotetext{#2}%
+ \endgroup
+}%
+\def\frontmatter@footnote@produce@endnote{%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \section{Package defaults}
+%
+% \begin{macro}{\title@column}
+% \begin{macro}{\preprintsty@sw}
+% \begin{macro}{\collaboration@sw}
+% \begin{macro}{\frontmatter@footnote@produce}
+% \begin{macro}{\do@output@MVL}
+% \begin{macro}{\comma@space}
+% We give meanings to the Booleans and other macros that a client document class would
+% set on our behalf.
+% \begin{macrocode}
+\appdef\frontmatter@init{%
+ \@ifxundefined\title@column {\let\title@column\@empty}{}%
+ \@ifxundefined\preprintsty@sw {\@booleanfalse\preprintsty@sw}{}%
+ \@ifxundefined\frontmatter@footnote@produce{\let\frontmatter@footnote@produce\frontmatter@footnote@produce@footnote}{}%
+ \@ifxundefined\do@output@MVL {\let\do@output@MVL\@firstofone}{}%
+ \@ifxundefined\comma@space {\let\comma@space\@empty}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@thefootnote}
+% \changes{4.1n}{2010/01/02}{(AO, 572) Independent footnote counter for title block. Abstract footnote counter shared with body.}%
+% In the title block, the footnote symbol (used for alternate affiliation and sundry)
+% is a \cmd\@fnsymbol\ or a lowercase letter, as selected by a boolean.
+% The society or journal may override this definition.
+% \begin{macrocode}
+\def\frontmatter@thefootnote{%
+ \altaffilletter@sw{\@alph}{\@fnsymbol}{\csname c@\@mpfn\endcsname}%
+}%
+\@ifx{\altaffilletter@sw\@undefined}{\@booleantrue\altaffilletter@sw}{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@makefnmark}
+% The default procedure for setting the footnote mark within the frontmatter.
+% A client may override this procedure.
+% \begin{macrocode}
+\def\frontmatter@makefnmark{%
+ \@textsuperscript{%
+ \normalfont\@thefnmark
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@makefntext}
+% This procedure is used when setting footnotes within the title block.
+%
+% Note that we are \classname{hyperref} friendly: we invoke \cmd\Hy@raisedlink\
+% so that this footnote becomes a hypertext anchor. If \classname{hyperref} is
+% not loaded, then \classname{ltxutil} has our act covered via some stubs.
+%
+% \changes{4.1n}{2010/01/02}{(AO, 572) Independent footnote counter for title block. Abstract footnote counter shared with body.}%
+% \begin{macrocode}
+\long\def\frontmatter@makefntext#1{%
+ \parindent 1em
+ \noindent
+ \Hy@raisedlink{\hyper@anchorstart{frontmatter.\expandafter\the\csname c@\@mpfn\endcsname}\hyper@anchorend}%
+ \@makefnmark
+ #1%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@setup}
+% The default type specification for the title page.
+% Clients will override this definition.
+% \begin{macrocode}
+\def\frontmatter@setup{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@RRAPformat}
+% \begin{macro}{\punct@RRAP}
+% \begin{macro}{\produce@RRAP}
+% The procedure \cmd\frontmatter@RRAPformat\ is the formatting procedure
+% for the ``Received, Revised, etc.'' block on the title page.
+% The macro \cmd\punct@RRAP\ produces the punctuation between the entries.
+% Clients will override these two definitions.
+%
+% The procedure \cmd\produce@RRAP\ is fairly general, and should be used by most
+% journal substyles.
+%
+% The procedure \cmd\frontmatter@RRAP@format\ will be overridden by the journal.
+% \begin{macrocode}
+\def\frontmatter@RRAPformat#1{%
+ \removelastskip
+ \begingroup
+ \frontmatter@RRAP@format
+ #1\par
+ \endgroup
+}%
+\def\punct@RRAP{; }%
+\def\produce@RRAP#1{%
+ \@if@empty{#1}{}{%
+ \@ifvmode{\leavevmode}{\unskip\punct@RRAP\ignorespaces}%
+ #1%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@authorformat}
+% The default type specification for the author list.
+% Clients will override this definition.
+% For one alternative, see the \classname{revtex4} document class.
+% \begin{macrocode}
+\def\frontmatter@authorformat{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@above@affilgroup}
+% The default amount of space above an affiliation group
+% (in a \cmd\affils@present@group\ production).
+% Clients will override this definition.
+% \begin{macrocode}
+\def\frontmatter@above@affilgroup{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@above@affiliation}
+% \begin{macro}{\frontmatter@above@affiliation@script}
+% The \cmd\frontmatter@above@affiliation\ is the amount of space above affiliations in the \classoption{groupedaddress}
+% style, and \cmd\frontmatter@above@affiliation@script\ is that for \classoption{superscriptaddress}.
+% Clients will override this definition.
+% For one alternative, see the \classname{revtex4} document class.
+% \begin{macrocode}
+\def\frontmatter@above@affiliation{}%
+\def\frontmatter@above@affiliation@script{}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@affiliationfont}
+% The default type specification for the affiliation.
+% Clients will override this definition.
+% For one alternative, see the \classname{revtex4} document class, where
+% several alternative definitions are made.
+% \begin{macrocode}
+\def\frontmatter@affiliationfont{\itshape\selectfont}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@RRAP@format}
+% The default type specification for the dates.
+% Clients will override this definition.
+% \begin{macrocode}
+\def\frontmatter@RRAP@format{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@PACS@format}
+% Specify the formatting of the title page PACS statement.
+%
+% Journals will override.
+% \begin{macrocode}
+\def\frontmatter@PACS@format{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@keys@format}
+% Specify the formatting of the title page keywords statement.
+%
+% Journals will override.
+% \begin{macrocode}
+\def\frontmatter@keys@format{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@finalspace}
+%
+% \begin{macrocode}
+\def\frontmatter@finalspace{\addvspace{18\p@}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@addressnewline}
+% \changes{4.0h}{1998/06/25}{new hook}
+% The definition of \cmd\\\ for address handling. Default puts all the `lines'
+% on a run-in line, separated by comma and space.
+% DPC: was \newline space between lines of addresss.
+% \begin{macrocode}
+\def\frontmatter@addressnewline{%
+ \@ifhmode{\skip@\lastskip\unskip\unpenalty\break\hskip\skip@}{}%
+ % was: \vskip-.5ex
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\frontmatter@preabstractspace}
+% \begin{macro}{\frontmatter@postabstractspace}
+% Space above and space below abstract in title block
+% \begin{macrocode}
+\def\frontmatter@preabstractspace{5.5\p@}
+\def\frontmatter@postabstractspace{6.5\p@}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\aftermaketitle@chk}
+% Error-checking code.
+% \begin{macrocode}
+\def\aftermaketitle@chk#1{%
+ \@ifx{\maketitle\relax}{%
+ \class@err{\protect#1 must be used before \protect\maketitle}%
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ps@titlepage}
+% Default page style for title page.
+% Journals will override this procedure.
+% \begin{macrocode}
+\def\ps@titlepage{\ps@empty}%
+% \end{macrocode}
+% \end{macro}
+%
+%FIXME: there is a limitation to the default meaning of
+% \cmd\@startpage: the label ``FirstPage'' is only
+% defined if the document has a \cmd\maketitle\ command.
+%
+% \begin{macrocode}
+\def\volumeyear#1{\gdef\@volumeyear{#1}}%
+\def\@volumeyear{}%
+\def\volumenumber#1{\gdef\@volumenumber{#1}}%
+\def\@volumenumber{}%
+\def\issuenumber#1{\gdef\@issuenumber{#1}}%
+\def\@issuenumber{}%
+\def\eid#1{\gdef\@eid{#1}}%
+\def\@eid{}%
+%
+\def\startpage#1{\gdef\@startpage{#1}\c@page#1\relax}%
+\def\@startpage{\pageref{FirstPage}}%
+\def\endpage#1{\gdef\@endpage{#1}}%
+\def\@endpage{\pageref{LastPage}}%
+% \end{macrocode}
+%
+%
+% \subsection{Printing out the ``list-of'' elements}%
+%
+% FIXME: The \cmd\appendix@toc\ procedure should change the meaning
+% of \cmd\l@section\ so that the \cmd\section s can be appropriately formatted,
+% reflecting their status as appendices.
+%
+% \begin{macrocode}
+\def\print@toc#1{%
+ \begingroup
+ \expandafter\section
+ \expandafter*%
+ \expandafter{%
+ \csname#1name\endcsname
+ }%
+ \let\appendix\appendix@toc
+ \@starttoc{#1}%
+ \endgroup
+}%
+\def\appendix@toc{}%
+% \end{macrocode}
+%
+% \begin{macro}{\Dated@name}
+% \begin{macro}{\Received@name}
+% \begin{macro}{\Revised@name}
+% \begin{macro}{\Accepted@name}
+% \begin{macro}{\Published@name}
+% These strings are used in the \cmd\date, et al. commands.
+% \begin{macrocode}
+\def\Dated@name{Dated }%
+\def\Received@name{Received }%
+\def\Revised@name{Revised }%
+\def\Accepted@name{Accepted }%
+\def\Published@name{Published }%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \changes{4.1g}{2009/10/05}{(AO, 539) Robustify \cs{class@warn} against TOC processing}%
+% Two commands require robustifying against harsh treatment when TOC entries are written out.
+% Note that \cmd\class@warn\ is not user-level markup, but crops up when
+% the \cmd\title\ command is missing from the document.
+% \begin{macrocode}
+\appdef\robustify@contents{%
+ \let\thanks\@gobble\let\class@warn\@gobble
+ \def\begin{\string\begin}\def\end{\string\end}%
+}%
+% \end{macrocode}
+%
+% \subsection{Syntax switch}%
+% \changes{4.1b}{2008/08/02}{Make the syntax of this package switch optional}%
+%
+% Shall we take over the syntax of \LaTeX?
+% By default, Yes, unless the Boolean below has already been defined.
+% In the package version, this is controlled by an option;
+% in the kernel version, the Boolean remains undefined.
+%
+% \cmd\maketitle\ presents a complication. If this code will execute under
+% \classname{ltxgrid}, then its version of the procedure will do fine.
+%
+% As a package, under \classname{article}, things are different.
+% In this case, what should be done depends upon \cmd\if@titlepage.
+% If true, then just execute \cmd\maketitle\ as it stands.
+% If false, then the \classname{article} class has defined its wrapper
+% procedure, and we should take over the meaning of \cmd\@maketitle\ instead.
+%
+% Here is a list of the commands defined by this package that potentially override
+% those of standard \LaTeX:
+% \cmd\frontmatter@title,
+% \cmd\frontmatter@author,
+% \cmd\frontmatter@and,
+% \cmd\frontmatter@thanks,
+% \cmd\frontmatter@date,
+% \env{frontmatter@abstract},
+% \env{frontmatter@titlepage},
+% \cmd\frontmatter@maketitle.
+%
+% The following code will perform that override, given the appropriate state of the Boolean.
+% \begin{macrocode}
+\@ifxundefined\frontmatter@syntax@sw{\@booleantrue\frontmatter@syntax@sw}{}%
+\frontmatter@syntax@sw{%
+ \let\title \frontmatter@title
+ \let\author \frontmatter@author
+ \let\date \frontmatter@date
+ \@ifxundefined\@maketitle{%
+ \let\maketitle \frontmatter@maketitle
+ \@booleantrue \titlepage@sw
+ }{%
+ \let\@maketitle \frontmatter@maketitle
+ \prepdef\maketitle\@author@finish
+ }%
+ \let\noaffiliation \frontmatter@noaffiliation
+ \let\thanks@latex \thanks
+ \let\thanks \frontmatter@thanks
+ \let\and@latex \and
+ \let\and \frontmatter@and
+ \let@environment{titlepage}{frontmatter@titlepage}%
+ \let@environment{abstract}{frontmatter@abstract}%
+}{%
+ \let\noaffiliation\@empty
+}%
+% \end{macrocode}
+%
+% \subsection{End of the \file{ltxfront} kernel}
+% The kernel portion of the \classname{ltxfront} package is complete.
+% \begin{macrocode}
+%</kernel>
+% \end{macrocode}
+%
+% \subsection{Remainder of the \classname{ltxfront} package}
+%
+% Include any code here that ought to be incorporated into the package,
+% but should not be part of the kernel.
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \begin{macrocode}
+% \end{macrocode}
+% Define formatting as like as possible to the article class.
+% Comands that prepare for \cmd\maketitle: \cmd\author, \cmd\title, \cmd\date.
+%
+% Argument of the above three may contain \cmd\\ and \cmd\thanks; argument of \cmd\author may contain \cmd\and.
+% The \cmd\\ may still work fine; \cmd\and\ will be ignored (warning);
+% \cmd\thanks\ even though it should not reside in the argument, will work.
+%
+% An explicit \cmd\footnote should be treated as if it were \cmd\thanks.
+%
+% \begin{verbatim}
+% \@maketitle: \frontmatter@footnote@produce
+% \end{verbatim}
+% \changes{4.1n}{2010/01/02}{(AO, 572) Independent footnote counter for title block. Abstract footnote counter shared with body.}%
+%
+% \begin{macrocode}
+\def\thanks@latex#1{%
+ \footnotemark
+ \expandafter\expandafter
+ \expandafter\gappdef
+ \expandafter\expandafter
+ \expandafter\@thanks
+ \expandafter\expandafter
+ \expandafter{%
+ \expandafter\expandafter
+ \expandafter\footnotetext
+ \expandafter\expandafter
+ \expandafter[%
+ \expandafter\the\csname c@\@mpfn\endcsname]{#1}}%
+}%
+\@booleanfalse\altaffilletter@sw
+\@if@sw\if@titlepage\fi{\@booleantrue}{\@booleanfalse}\titlepage@sw
+\def\frontmatter@title@above{\newpage\null\vskip2em\relax}%
+\def\frontmatter@title@format{\centering\LARGE\let\thanks\thanks@latex}%
+\def\frontmatter@title@below{\vskip1.5em\relax}%
+\def\frontmatter@authorformat{\centering\large\advance\baselineskip\p@\parskip11.5\p@\let\thanks\thanks@latex\let\and\and@space}%
+\def\frontmatter@authorbelow{\vskip 1em\relax}%
+\def\frontmatter@above@affiliation{}%
+\def\frontmatter@above@affiliation@script{}%
+\def\frontmatter@affiliationfont{\centering\itshape}%
+\def\frontmatter@RRAP@format{\centering\large}%
+\def\frontmatter@preabstractspace{1.5em}%
+% \end{macrocode}
+% \changes{4.1n}{2010/01/02}{(AO, 572) Independent footnote counter for title block. Abstract footnote counter shared with body.}%
+% \begin{macrocode}
+\long\def\frontmatter@footnotetext{%
+ \expandafter\expandafter
+ \expandafter\footnotetext
+ \expandafter\expandafter
+ \expandafter[%
+ \expandafter\the\csname c@\@mpfn\endcsname]%
+}%
+\def\and@space{\\}%
+\def\andname{and}%
+% \end{macrocode}
+% Implement the feature of the article class whereby there is a default \cmd\@date, left over
+% from the \LaTeX\ kernel.
+% This package does not have a default date. The user must put in an explicit command, like
+% \cmd\date\arg{\cmd\today}, which will retore \LaTeX's default behavior.
+%
+% What if the abstract environment falls after the \cmd\maketitle\ command?
+% The environment will be undefined; the user will have to deal with this.
+% \begin{macrocode}
+% \end{macrocode}
+% End of the package.
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%
+% \Finale
+% %Here ends the programmer's documentation.
+% \endinput
+%
+\endinput
+%%EOF
diff --git a/obsolete/macros/latex/contrib/revtex4-1/source/latex/revtex/ltxgrid.dtx b/obsolete/macros/latex/contrib/revtex4-1/source/latex/revtex/ltxgrid.dtx
new file mode 100644
index 0000000000..143cf162dd
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/source/latex/revtex/ltxgrid.dtx
@@ -0,0 +1,6801 @@
+% \iffalse meta-comment balanced on line 109
+% ltxgrid.dtx: package to change page grid, MVL.
+% Copyright (c) 2009 Arthur Ogawa
+%
+% Disclaimer
+% This file is distributed WITHOUT ANY WARRANTY;
+% without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+% License
+% You may distribute this file under the conditions of the
+% LaTeX Project Public License 1.3 or later
+% (http://www.latex-project.org/lppl.txt).
+% ReadMe
+% For the documentation and more detailed instructions for
+% installation, typeset this document with \LaTeX.
+% Maintenance Status
+% This work has the LPPL maintenance status "maintained";
+% Current Maintainer of this work is Arthur Ogawa.
+%
+% This work consists of the main source file ltxgrid.dtx
+% and the derived files
+% ltxgrid.sty, ltxgrid.pdf
+% Distribution:
+% CTAN:macros/latex/contrib/revtex/
+%
+% Unpacking:
+% tex ltxgrid.dtx
+%
+% Documentation:
+% latex ltxgrid.dtx; ...
+%
+% Programm calls to get the documentation (example):
+% pdflatex ltxgrid.dtx
+% makeindex -s gind.ist ltxgrid
+% makeindex -s gglo.ist -o ltxgrid.gls ltxgrid.glo
+% pdflatex ltxgrid.dtx
+% makeindex -s gind.ist ltxgrid.idx
+% pdflatex ltxgrid.dtx
+%
+% Installation:
+% TDS:doc/latex/revtex/
+% TDS:tex/latex/revtex/
+% TDS:source/latex/revtex/
+%
+% Thanks, Heiko!
+% This method of letting a single .dtx file serve as both
+% documentation (via latex) and installer (via tex) follows
+% the example of Heiko Oberdiek. Thanks!
+%<*ignore>
+\begingroup
+ \def\x{LaTeX2e}%
+\expandafter\endgroup
+\ifcase
+ 0\expandafter\ifx\csname processbatchFile\endcsname\relax\else1\fi\ifx\fmtname\x\else 1\fi
+ \relax
+\else
+ \csname fi\endcsname
+%</ignore>
+%<*install>
+%% This file will generate documentation and runtime files
+%% from ltxgrid.dtx when run through LaTeX or TeX.
+\input docstrip
+\preamble
+
+This is a generated file;
+altering it directly is inadvisable;
+instead, modify the original source file.
+See the URL in the file 00readme.tex.
+
+License
+ You may distribute this file under the conditions of the
+ LaTeX Project Public License 1.3 or later
+ (http://www.latex-project.org/lppl.txt).
+
+ This file is distributed WITHOUT ANY WARRANTY;
+ without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE.
+
+\endpreamble
+\askforoverwritefalse
+\keepsilent
+ \generate{%
+ %{ignore}
+% \usedir{tex/latex/revtex}%
+ \file{ltxgrid.sty}{%
+ \from{ltxgrid.dtx}{package,kernel}%
+ }%
+ }%
+\ifToplevel{
+\Msg{***********************************************************}
+\Msg{*}
+\Msg{* To finish the installation, please move}
+\Msg{* ltxgrid.sty}
+\Msg{* into a directory searched by TeX;}
+\Msg{* in a TDS-compliant installation:}
+\Msg{* texmf/tex/macros/latex/revtex/.}
+\Msg{*}
+\Msg{* To produce the documentation,
+ run ltxgrid.dtx through LaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing}
+\Msg{***********************************************************}
+}
+\endbatchfile
+%</install>
+%<*ignore>
+\fi
+%</ignore>
+% \fi
+%
+% \GetFileInfo{ltxgrid.dtx}\CheckSum{5898}
+%
+% \iffalse ltxdoc klootch
+%<*package>
+%%% @LaTeX-file{
+%%% filename = "ltxgrid.dtx",
+%%% version = "4.1r",
+%%% date = "2010/07/25",
+%%% time = "20:33:00 UT-8",
+%%% checksum = "5462",
+%%% author = "Arthur Ogawa (mailto:arthur_ogawa at sbcglobal.net),
+%%% commissioned by the American Physical Society.
+%%% ",
+%%% copyright = "Copyright (C) 1999, 2009 Arthur Ogawa,
+%%% distributed under the terms of the
+%%% LaTeX Project Public License, see
+%%% ftp://ctan.tug.org/macros/latex/base/lppl.txt
+%%% ",
+%%% address = "Arthur Ogawa,
+%%% USA",
+%%% telephone = "",
+%%% FAX = "",
+%%% email = "mailto colon arthur_ogawa at sbcglobal.net",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "latex, page grid, main vertical list",
+%%% supported = "yes",
+%%% abstract = "package to change page grid, MVL",
+%%% docstring = "The checksum field above generated by ltxdoc",
+%%% }
+%</package>
+% \fi
+%
+% \iffalse ltxdoc klootch
+% The following references the \file{00readme} file,
+% which contains basic information about this package.
+% The contents of this file are generated when
+% you typeset the programmer's documentation.
+% Search on "{filecontents*}{00readme}" to locate it.
+% \fi\input{00readme}%
+%
+% \subsection{Bill of Materials}
+%
+% Following is a list of the files in this distribution arranged
+% according to provenance.
+%
+% \subsubsection{Primary Source}%
+% One single file generates all.
+%\begin{verbatim}
+%ltxgrid.dtx
+%\end{verbatim}
+%
+% \subsubsection{Generated by \texttt{latex ltxgrid.dtx}}%
+% Typesetting the source file under \LaTeX\
+% generates the readme and the installer.
+%\begin{verbatim}
+%00readme ltxgrid.ins
+%\end{verbatim}
+%
+% \subsubsection{Generated by \texttt{tex ltxgrid.ins}}%
+% Typesetting the installer generates
+% the package files.
+%\begin{verbatim}
+%ltxgrid.sty
+%\end{verbatim}
+%
+% \subsubsection{Documentation}%
+% The following are the online documentation:
+% \begin{verbatim}
+%ltxgrid.pdf
+% \end{verbatim}
+%
+% \subsubsection{Auxiliary}%
+% The following are auxiliary files generated
+% in the course of running \LaTeX:
+% \begin{verbatim}
+%ltxgrid.aux ltxgrid.idx ltxgrid.ind ltxgrid.log ltxgrid.toc
+% \end{verbatim}
+%
+% \section{Code common to all modules}%
+%
+% The following may look a bit klootchy, but we
+% want to require only one place in this file
+% where the version number is stated,
+% and we also want to ensure that the version
+% number is embedded into every generated file.
+%
+% Now we declare that
+% these files can only be used with \LaTeXe.
+% An appropriate message is displayed if
+% a different \TeX{} format is used.
+% \begin{macrocode}
+%<*driver|package>
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]%
+%</driver|package>
+% \end{macrocode}
+% As desired, the following modules all
+% take common version information:
+% \begin{macrocode}
+%<kernel&!package&!doc>\typeout{%
+%<*package|doc>
+\ProvidesFile{%
+%</package|doc>
+%<*kernel|package|doc>
+ltxgrid%
+%</kernel|package|doc>
+%<*doc>
+.dtx%
+%</doc>
+%<package>.sty%
+%<*package|doc>
+}%
+%</package|doc>
+% \end{macrocode}
+%
+% The following line contains, for once and for all,
+% the version and date information.
+% By various means, this information is reproduced
+% consistently in all generated files and in the
+% typeset documentation.
+% Give credit where due.
+% \begin{macrocode}
+%<*doc|package|kernel>
+%<version>
+ [2010/07/25/20:33:00 4.1r page grid package (portions licensed from W. E. Baxter web at superscript.com)]% \fileversion
+%</doc|package|kernel>
+%<kernel&!package&!doc>}%
+% \end{macrocode}
+%
+%
+% \section{The driver module \texttt{doc}}
+%
+% This module, consisting of the present section,
+% typesets the programmer's documentation,
+% generating the \file{.ins} installer and \file{00readme} as required.
+%
+% Because the only uncommented-out lines of code at the beginning of
+% this file constitute the \file{doc} module itself,
+% we can simply typeset the \file{.dtx} file directly,
+% and there is thus rarely any need to
+% generate the ``doc'' {\sc docstrip} module.
+% Module delimiters are nonetheless required so that
+% this code does not find its way into the other modules.
+%
+% The \enve{document} command concludes the typesetting run.
+%
+% \begin{macrocode}
+%<*driver>
+% \end{macrocode}
+%
+% \subsection{The Preamble}
+% The programmers documentation is formatted
+% with the \classname{ltxdoc} class with local customizations,
+% and with the usual code line indexing.
+% \begin{macrocode}
+\documentclass{ltxdoc}
+\RequirePackage{ltxdocext}%
+\RequirePackage[colorlinks=true,linkcolor=blue]{hyperref}%
+\ifx\package@font\@undefined\else
+ \expandafter\expandafter
+ \expandafter\RequirePackage
+ \expandafter\expandafter
+ \expandafter{%
+ \csname package@font\endcsname
+ }%
+\fi
+\CodelineIndex\EnableCrossrefs % makeindex -s gind.ist ltxgrid
+\RecordChanges % makeindex -s gglo.ist -o ltxgrid.gls ltxgrid.glo
+% \end{macrocode}
+%
+% \subsubsection{Docstrip and info directives}
+% We use so many {\sc docstrip} modules that we set the
+% \texttt{StandardModuleDepth} counter to 1.
+% \begin{macrocode}
+\setcounter{StandardModuleDepth}{1}
+% \end{macrocode}
+% The following command retrieves the date and version information
+% from this file.
+% \begin{macrocode}
+\expandafter\GetFileInfo\expandafter{\jobname.dtx}%
+% \end{macrocode}
+%
+% \subsection{The ``Read Me'' File}
+% As promised above, here is the contents of the
+% ``Read Me'' file. That file serves a double purpose,
+% since it also constitutes the beginining of the
+% programmer's documentation. What better thing, after
+% all, to have appear at the beginning of the
+% typeset documentation?
+%
+% A good discussion of how to write a ReadMe file can be found in
+% Engst, Tonya, ``Writing a ReadMe File? Read This''
+% \emph{MacTech} October 1998, p. 58.
+%
+% Note the appearance of the
+% \cmd\StopEventually\ command, which marks the
+% dividing line between the user documentation
+% and the programmer documentation.
+%
+% The usual user will not be asked to
+% do a full build, not to speak
+% of the bootstrap.
+% Instructions for carrying these processes
+% begin the programmer's manual.
+%
+% \begin{macrocode}
+\begin{filecontents*}{00readme}
+\title{%
+ A \LaTeX\ Package for changing the page grid and MVL%
+ \thanks{%
+ This file has version number \fileversion,
+ last revised \filedate.%
+ }%
+ \thanks{%
+ Version \fileversion\ \copyright\ 2009 The American Physical Society
+ }%
+}%
+\author{%
+ Arthur Ogawa%
+ \thanks{\texttt{mailto:arthur\_ogawa at sbcglobal.net}}%
+}%
+%\iffalse
+% For version number and date,
+% search on "\fileversion" in the .dtx file,
+% or see the end of the 00readme file.
+%\fi
+\maketitle
+
+This file embodies the \classname{ltxgrid} package,
+the implementation and its user documentation.
+
+The distribution point for this work is
+\url{publish.aps.org/revtex},
+which contains the REV\TeX\ package, and includes source and documentation for this package.
+
+The \classname{ltxgrid} package was commissioned by the American Physical Society
+and is distributed under the terms of the \LaTeX\ Project Public License,
+the same license under which all the portions of \LaTeX\ itself is distributed.
+Please see \url{http://ctan.tug.org/macros/latex/base/lppl.txt} for details.
+
+To use this document class, you must have a working
+\TeX\ installation equipped with \LaTeXe\
+and possibly pdftex and Adobe Acrobat Reader or equivalent.
+
+To install, retrieve the distribution,
+unpack it into a directory on the target computer,
+into a location in your filesystem where it will be found by \LaTeX;
+in a TDS-compliant installation this would be:
+\file{texmf/tex/macros/latex/revtex/.}
+
+To use, read the user documentation \file{src/ltxgrid.pdf}.
+
+\tableofcontents
+
+\section{Processing Instructions}
+
+The package file \file{ltxgrid.sty}
+is generated from this file, \file{ltxgrid.dtx},
+using the {\sc docstrip} facility of \LaTeX
+via |tex ltxgrid.dtx|.
+The typeset documentation that you are now reading is generated from
+this same file by typesetting it with \LaTeX\ or pdftex
+via |latex ltxgrid.dtx| or |pdflatex ltxgrid.dtx|.
+
+\subsection{Build Instructions}
+
+You may bootstrap this suite of files solely from \file{ltxgrid.dtx}.
+Prepare by installing \LaTeXe\ (and either tex or pdftex) on your computer,
+then carry out the following steps:
+\begin{enumerate}
+\item
+Within an otherwise empty directory,
+typeset \file{ltxgrid.dtx} with \TeX\ or pdftex;
+thereby generating the package file \file{ltxgrid.sty}.
+
+\item
+Now typeset \file{ltxgrid.dtx} with \LaTeX\ or pdflatex;
+you will obtain the typeset documentation you are now reading,
+along with the file \file{00readme}.
+
+Note: you will have to run \LaTeX\ twice, then \file{makeindex}, then
+\LaTeX\ again in order to obtain a valid index and table of contents.
+
+\item
+Install the following files into indicated locations within your
+TDS-compliant \texttt{texmf} tree (you may need root access):
+\begin{itemize}
+\item
+\file{$TEXMF/}\file{tex/}\file{latex/}\file{revtex/}\classname{ltxgrid.sty}
+\item
+\file{$TEXMF/}\file{source/}\file{latex/}\file{revtex/}\classname{ltxgrid.dtx}
+\item
+\file{$TEXMF/}\file{doc/}\file{latex/}\file{revtex/}\classname{ltxgrid.pdf}
+\end{itemize}
+where \file{TEXMF/} stands for \file{texmf-local/}, or some other \texttt{texmf} tree in your installation.
+\item
+Run \texttt{mktexlsr} on directory \file{$TEXMF/} (you may need root access).
+\item
+Build and installation are now complete;
+now put a \cmd\usepackage\texttt{\{ltxgrid\}} in your document preamble!
+(Note: \texttt{ltxgrid} requires package \texttt{ltxutil}.)
+\end{enumerate}
+
+\subsection{Change Log}
+\changes{4.0a}{2001/06/18}{Introduce \cs{marry@height} }
+\changes{4.0a}{2001/06/18}{Introduce \cs{set@marry@height} }
+\changes{4.0a}{2008/06/26 }{\cs{@yfloat}: de-fang \cs{set@footnotewidth} (see ltxutil.dtx): we have already done its job. }
+\changes{4.1a}{2008/06/29}{Change \cs{LT@array@new}: restore \cs{@tabularcr} and \cs{@xtabularcr}}
+\changes{4.1a}{2008/06/29}{Change \cs{LT@array@new}: set \cs{LT@LL@FM@cr} to \cs{@arraycr@array} instead of \cs{@arraycr}}
+\changes{4.1a}{2008/06/29}{Repair error in \cs{endlongtable@new} involving \cs{@ifx}: argument not delimited.}
+\changes{4.1b}{2008/08/04}{Get rid of the \cs{reserved@a} idiom}
+\changes{4.1b}{2008/08/04}{Turn off the \cs{set@footnotewidth} mechanism; a float `knows' its proper typesetting context}
+\changes{4.1b}{2008/08/04}{(AO, 452) Support length checking: show size of shipped out text.}
+\changes{4.1b}{2008/08/04}{(AO, 456) Compatibility with other packages that override the output routine, following suggestion by David Kastrup.}
+\changes{4.1b}{2008/08/04}{}
+\changes{4.1b}{2008/08/04}{Box \cs{footbox} changed to box \cs{footsofar}}
+\changes{4.1b}{2008/08/04}{Change \cs{@combinepage} to \cs{@combinepage} with argument}
+\changes{4.1b}{2008/08/04}{Change \cs{@makecol} to \cs{@makecolumn} with argument}
+\changes{4.1b}{2008/08/04}{Change \cs{set@colroom} to \cs{set@colht}}
+\changes{4.1b}{2008/08/04}{New procedure \cs{@iffpsbit} replaces \cs{@getfpsbit}}
+\changes{4.1b}{2008/08/04}{New procedure \cs{@output@combined@page}}
+\changes{4.1b}{2008/08/04}{New procedure for showing a box contents, \cs{trace@box}}
+\changes{4.1b}{2008/08/04}{Procedure \cs{@outputpage@head} headpatches \cs{@outputpage}}%
+\changes{4.1b}{2008/08/04}{Procedure \cs{@outputpage@tail} tailpatches \cs{@outputpage}}%
+\changes{4.1b}{2008/08/04}{Procedure \cs{balance@2} defined more transparently}%
+\changes{4.1b}{2008/08/04}{Tally the height of the float}
+\changes{4.1b}{2008/08/04}{Use \cs{document@inithook} instead of \cs{AtBeginDocument}}
+\changes{4.1b}{2008/08/04}{Use \cs{trace@box} instead of \cs{showbox}}
+\changes{4.1f}{2009/07/07}{(AO, 515) Prevent line numbering within a footnote}
+\changes{4.1f}{2009/07/10}{(AO, 518) Tally register overflow when locument is long}
+\changes{4.1f}{2009/07/14}{(AO, 519) \cs{footins} content must be preserved and reintegrated}
+\changes{4.1f}{2009/07/15}{(AO, 519) Preserve footnotes that are in \cs{footsofar} across a page grid change}
+\changes{4.1g}{2009/10/06}{(AO, 531) Fix package \classname{float} }
+\changes{4.1n}{2009/12/02}{Restore the \cs{lastbox} if it is not a footnote}
+\changes{4.1n}{2009/12/02}{More diagnostics of column balancing}
+\changes{4.1n}{2009/12/18}{(AO, 571) Deconstruct balanced footnotes when needed}
+\changes{4.1n}{2010/01/02}{(AO, 571) Interface \cs{set@footnotewidth} for determining the set width of footnotes}%
+\changes{4.1n}{2010/01/02}{(AO, 571) Footnotes, when columns are balanced or when they are composed with their column}%
+\changes{4.1n}{2010/01/02}{(AO, 571) Abandon \cs{recover@footins} in favor of \cs{recover@column}}%
+\changes{4.1n}{2010/01/02}{(AO, 571) Use procedures \cs{output@do@prep} and \cs{output@column@do} as dispatchers}
+\changes{4.1n}{2010/01/02}{(AO, 571) coding convention: use \cs{bgroup}, \cs{egroup} (instead of braces) when a box is being built}%
+\changes{4.1n}{2010/01/02}{(AO, 571) calling sequence of \cs{combine@foot@inserts} and \cs{grid@column} to expose box registers; that of \cs{append@column@} its column counters}%
+\changes{4.1n}{2010/01/02}{(AO, 571) footnote rule is leaders, so that it may be removed by \cs{vsplit}; mechanism of \cs{kern} signals to indicate footnote height}%
+\changes{4.1o}{2010/02/02}{(AO, 576) Allow \classname{lscape} to act on \cs{@outputbox} at the right time}%
+\changes{4.1p}{2010/02/24}{(AO, 583) Provide setup code also for footnotes in a one-column document}%
+
+\end{filecontents*}
+% \end{macrocode}
+%
+% \subsection{The Document Body}
+%
+% Here is the document body, containing only a
+% \cmd\DocInput\ directive---referring to this very file.
+% This very cute self-reference is a common \classname{ltxdoc} idiom.
+% \begin{macrocode}
+\begin{document}%
+\def\revtex{REV\TeX}%
+\expandafter\DocInput\expandafter{\jobname.dtx}%
+\end{document}
+%</driver>
+% \end{macrocode}
+%
+% \section{Using this package}
+% Once this package is installed on your filesystem, you can employ it in
+% adding functionality to \LaTeX\ by invoking it in your document or document class.
+%
+% \subsection{Invoking the package}
+% In your document, you can simply call it up in your preamble:
+% \begin{verbatim}
+%\documentclass{book}%
+%\usepackage{ltxgrid}%
+%\begin{document}
+%<your document here>
+%\end{document}
+% \end{verbatim}
+% However, the preferred way is to invoke this package from within your
+% customized document class:
+% \begin{verbatim}
+%\NeedsTeXFormat{LaTeX2e}[1995/12/01]%
+%\ProvidesClass{myclass}%
+%\LoadClass{book}%
+%\RequirePackage{ltxgrid}%
+%<class customization commands>
+%\endinput
+% \end{verbatim}
+%
+% Note that this package requires the features of the \classname{ltxutil} package,
+% available at
+% \url{publish.aps.org/revtex}.
+%
+% Once loaded, the package gives you acccess to certain procedures,
+% usually to be invoked by a \LaTeX\ command or environment, but not at the document level.
+%
+% \subsection{Changing the page grid}%
+% This package provides two procedures, \cmd\onecolumngrid, \cmd\twocolumngrid,
+% that change the page grid (it can be extended to more columns and to other page grids).
+%
+% They differ from standard \LaTeX's \cmd\onecolumn\ and \cmd\twocolumn\ commands in that
+% they do not force a page break. Also, upon leaving a multiple-column grid, the columns are balanced.
+% In other respects they work same.
+%
+% They differ from the grid-changing commands of Frank Mittelbach's \classname{multicol} package
+% in that they allow floats of all types (single- and double column floats, that is) and
+% preserve compatability with the \classname{longtable} package.
+%
+% These commands must be issued in vertical mode (conceivably via a \cmd\vadjust) such that
+% they are ultimately present in the MVL, where they can do their work.
+% Because they do not work in \LaTeX's left-right mode, they are unsuitable at the
+% document level.
+% Furthermore, packaging a grid command in a \cmd\vadjust, although possible, will probably
+% not acheive satisfactory page layout.
+%
+% Page grid commands are not intended to be issued unnecessarily: only the first of
+% two successive \cmd\onecolumngrid\ commands is effective; the second will be silently ignored.
+%
+% \DescribeMacro\onecolumngrid
+% You command \LaTeX\ to return to the one-column grid with the
+% \cmd\onecolumngrid\ command. If you are already in the one-column grid, this
+% is a no-op. The one-column grid is considered special of all page grids, in that
+% no portion of the page is held back (in \cmd\pagesofar); all items that might go
+% on the current page (with the exception of floats and footnotes) are on the MVL.
+%
+% \DescribeMacro\twocolumngrid
+% You command \LaTeX\ to return to the two-column grid with the
+% \cmd\twocolumngrid\ command. If you are already in the two-column grid, this
+% is a no-op.
+%
+% These two commands should be issued by a macro procedure that can ensure that
+% \TeX\ is in outer vertical mode.
+%
+% \subsection{Changing the MVL}%
+%
+% This package also provides commands to modify the main vertical list (MVL) in a safe way.
+% The scheme here is to structure, insofar possible, \TeX's MVL as follows:
+%\begin{quotation}
+%box or boxes\\
+%penalty\\
+%glue
+%\end{quotation}
+% This should be a familiar sequence. It is the prototype sequence for a vertical list,
+% and is followed when \TeX\ breaks paragraphs into lines, and when \TeX\ generates
+% a display math equation.
+%
+% If you (as a macro programmer) wish to modify the value of the penalty or glue item,
+% you can use one of the MVL-altering commands to do so. Certain operations are implemented
+% here; you can make up your own.
+%
+% Note that these commands must be issued in vertical mode, perhaps via a \cmd\vadjust\ or a \cmd\noalign.
+% They can work directly if you are in inner mode (say within a parbox or a minipage).
+%
+% \DescribeMacro\removestuff
+% You instruct \LaTeX\ to remove both the penalty and the glue item with this command.
+%
+% \DescribeMacro\addstuff
+% You issue the \cmd\addstuff\arg{penalty}\arg{glue} command to add a penalty, glue, or both.
+% If you do not wish to add one or the other, the corresponding argument should be nil.
+% Note that the effect of \cmd\addstuff\ is to stack the penalties and glue items.
+% Therefore, the lesser of the two penalties takes effect,
+% and the two glue items add together.
+%
+% \cmd\addstuff\ is limited because once applied, it cannot be applied again with correct results.
+%
+% \DescribeMacro\replacestuff
+% The \cmd\replacestuff\ command is syntactically the same as \cmd\addstuff, but works
+% differently: the existing penalty and glue are replaced or modified.
+%
+% The specified penalty is not inserted if the existing penalty is greater than 10000
+% (that is, in case of a \cmd\nobreak), otherwise, the lower (non-zero) of the two penalties is inserted.
+%
+% If the specified glue has a larger natural component than the existing glue, we replace the glue.
+% However, if the specified glue's natural component is negative, then the existing glue's natural component is
+% changed by that amount.
+%
+% \cmd\replacestuff\ can be applied mutiple times bceause it retains the list structure in the canonical form.
+%
+% Note that we treat two penalties specially (as does \TeX): a penalty of 10000 is considered
+% a garbage value, to be replaced if found. This is the signal value that \TeX\ inserts on
+% the MVL replacing the penalty that caused the page break (if the page break occurred at a penalty).
+% Also, a penalty of zero is indistinguishable from no penalty at all, so it will always
+% be replaced by the given value.
+%
+% Therefore, it is highly recommended to never set any of \TeX's penalty parameters to
+% zero (a value of, say, 1, is practically the same), nor should a skip parameter be set to zero
+% (instead, use, say, 1sp). Also, to prevent a pagebreak, do not use a penalty of 10000, use, say
+% 10001 instead.
+%
+% You can define your own construct that modifies the MVL:
+% Define a command, say, \cmd\myadjust, as follows:
+%\begin{verbatim}
+%\def\myadjust#1{\noexpand\do@main@vlist{\noexpand\@myadjust{#1}}\@tempa}%
+%\end{verbatim}
+% that is, \cmd\myadjust\ invokes \cmd\do@main@vlist, passing it the procedure name
+% \cmd\@myadjust\ along with the arguments thereof pre-expanded.
+% Next, define the procedure \cmd\@myadjust:
+%\begin{verbatim}
+%\def\@myadjust#1{<meddle with the MVL>}%
+%\end{verbatim}
+% when \cmd\@myadjust\ executes, you will be in the output routine (in inner vertical mode)
+% and the MVL will be that very vertical list.
+%
+%
+%
+%
+% \section{Compatability with \LaTeX's Required Packages}
+% Certain packages, usually ones written by members of the
+% \LaTeX\ Project itself, have been designated ``required'' and
+% are distributed as part of standard \LaTeX.
+% These packages have been placed in a priviledged position
+% vis \'a vis the \LaTeX\ kernel in that they override the definitions of certain kernel macros.
+%
+% Compatability between \classname{ltxgrid} and these packages is complicated
+% by a number of factors. First is that \classname{ltxgrid} alters the meaning of some of the same
+% kernel macros as certain of the ``required'' packages.
+% Second is that fact that certain of the ``required'' packages of \LaTeX\ are incompatible with
+% each other.
+%
+% Examples of the first kind are the \classname{ftnright}, \classname{multicol}, and \classname{longtable}
+% packages.
+% The \classname{ltxgrid} package is not compatible with \classname{multicol},
+% but if you are using \classname{ltxgrid}, you do not need to use \classname{ftnright} or \classname{multicol}
+% anyway. The \classname{ltxgrid} package does however attempt to be compatible with \classname{longtable}.
+%
+% Among the ``required'' packages that are mutually incompatible are \classname{multicol} and \classname{longtable},
+% the incompatibility arising because both packages replace \LaTeX's output routine:
+% if one package is active, the other must not be so.
+% This state of affairs has remained essentially unchanged since the introduction of the two as \LaTeX2.09 packages in the late 1980s.
+%
+% The reason that \classname{ltxgrid} can remain compatible with \classname{longtable} is due to the
+% introduction of a more modern architecture, the ``output routine dispatcher'', which allows all macro packages access to the
+% safe processing environment of the output routine, on an equal footing.
+% The relevant portions of the \classname{longtable} package are reimplemented in \classname{ltxgrid}
+% to take advantage of this mechanism.
+%
+% Timing is critical:
+% the \classname{ltxgrid} package will be incompatible with any package that
+% redefines any of the kernel macros that \classname{ltxgrid} patches---if that
+% package is loaded \emph{after} \classname{ltxgrid}.
+%
+% Hereinafter follows some notes on specific \LaTeX\ packages.
+%
+% \subsection{ftnright}
+% Frank Mittelbach's \classname{ftnright} package effects a change to \LaTeX's
+% \cmd\twocolumn\ mode such that footnotes are set at the bottom of the right-hand
+% column instead of at the foot of each of the two columns.
+%
+% Note that it overwrites three \LaTeX\ kernel macros: \cmd\@outputdblcol, \cmd\@startcolumn, and \cmd\@makecolumn.
+% Fortunately none of the three are patched by \classname{ltxgrid}, so that compatability
+% is not excluded on this basis.
+%
+% At the same time, it changes the meaning of \cmd\footnotesize, the macro that is automatically
+% invoked when setting a document's footnote into type.
+% One might well argue that it is an error for the meaning of \cmd\footnotesize\ to be determined by
+% a package such as \classname{ftnright}, that indeed such a choice should be made in the
+% document class, or in a file such as \file{bk10.clo}.
+%
+% To avoid being tripped up by this misfeature in \classname{ftnright}, it is only necessary to
+% reassert our meaning for \cmd\footnotesize\ later on, after \classname{ftnright} has been loaded.
+%
+% Note that \classname{ftnright} inserts code that demands that \LaTeX's flag \cmd\if@twocolumn\
+% is true, that is, it will complain if deployed in a \cmd\onecolumn\ document.
+% It is therefore necessary for any other multicolumn package to assert that flag in order to
+% avoid this package's complaint. It is an interesting question exactly why this package has
+% this limitation. After all, a one-column page grid is just a degenerate case of the
+% two column.
+%
+% \subsection{longtable}
+% David Carlisle's \classname{longtable} package sets tables that can be so long as to break over pages.
+% According to its author, it uses the same override of \LaTeX's output routine as
+% Frank Mittelbach's \classname{multicol} package. By implication, then, it has a hard
+% incompatability with the latter.
+%
+% The \classname{longtable} package also performs a check of whether the document is in
+% \cmd\twocolumn\ mode, and declines to work if this is the case. It is not clear, however,
+% that there is any true incompatability present if so. It's just that David did not see any reason
+% anyone would want to set such long tables in a multicolumn document, hence the check.
+%
+% There does not appear to be any indication that \classname{longtable} would work less
+% well under \classname{ltxgrid} than under standard \LaTeX's \cmd\twocolumn\ mode.
+% Therefore, this \classname{ltxgrid} patches \classname{longtable} (if loaded) so as to provide
+% compatability. In the course of which, \classname{longtable} becomes more robust
+% (\classname{longtable} has mumerous bugs and incompatabilities of long standing,
+% some of which are repaired by \classname{ltxgrid}).
+%
+% One problem remains, namely that, if a \env{longtable} environment breaks over columns
+% and thereby inserts its special headers and footers at that break, and those columms are then
+% balanced (due to a return to the one-column page grid), then those inserted rows
+% will remain, and may no longer fall at the column break. This will, of course look
+% wrong.
+%
+% The only way to fix this problem is to avoid doing column balancing in the way
+% I have implemented here; such an enhancement to this package is possible.
+%
+% \subsection{multicol}
+% Frank Mittelbach's \classname{multicol} package provides a page grid with many columns,
+% albeit denies the placement of floats in individual columns.
+%
+% It establishes its own \cmd\output\ routine, which is the reason it runs afoul of
+% the \classname{longtable} package. On the other hand, \classname{ltxgrid} specifically
+% allows for the case where a package installs its own \cmd\output\ routine, so
+% there is no incompatability on that basis.
+%
+% Still, it is pointless to use \classname{multicol} if you are using \classname{ltxgrid},
+% since both packages provide multicolumn page layouts.
+% Therefore, \classname{multicol} is not supported by \classname{ltxgrid}.
+%
+% \subsection{ltxgrid}
+% It has been pointed out that one of the disadvantages of adopting the \classname{ltxgrid} package is that
+% it does alter the \LaTeX\ kernel.
+% Any package that itself alters the \LaTeX\ kernel may be incompatible with \classname{ltxgrid}, and new packages
+% (destined perhaps to become part of the successor to \LaTeXe) may break \classname{ltxgrid}.
+%
+% The consequence is that packages introduced in future, and future changes to \LaTeX\ may be incompatible
+% with \classname{ltxgrid}.
+% This is, of course, true.
+% The development plan for \classname{ltxgrid} is that when such packages and \LaTeX\ kernel changes come about,
+% the burden will be on \classname{ltxgrid} to change in a way that provides for continued compatability with
+% those packages and \LaTeX\ kernel changes.
+%
+%
+% \section{How \classname{ltxgrid} places footnotes}
+%
+% In conventional multicolumn layouts, a footnote will appear at the bottom of the column in which it is called out.
+% The \classname{ltxgrid} package implements this conventional layout choice by default.
+% However, other choices are possible (a la \classname{ftnright}, whose compatability with \classname{ltxgrid} has not been tested).
+%
+% One unusual feature of \classname{ltxgrid}'s default implementation must be mentioned, though,
+% namely the case in a two-column page grid, where a footnote is followed by a temporary change to the one-column page grid
+% (e.g., for a wide equation).
+% In such a case, the material above the wide material is split into two columns, and a footnote whose callout
+% appears in the right-hand column will nonetheless be set at the base of the left column.
+%
+% This arrangement was chosen because it ensures that the footnotes at the bottom of any page will appear in
+% numerical order. It can be argued that this choice is ``incorrect'', but be that as it may,
+% the \classname{ltxgrid} package does not foreclose on other arrangements for the footnotes.
+% The package can be adapted to accomodate any page design desired.
+%
+% \section{Limitations in \classname{ltxgrid}'s default column balancing method}%
+%
+% In a multicolumn page grid, when encountering a page that is not completely full,
+% it is customary to set the material in balanced columns (typically with the last column no longer than any of the others).
+% Such a case also crops up when temporarily interrupting the multicolumn grid to set material on the full width of the page:
+% the material on the page above the break is customarily set in balanced columns.
+%
+% An awkward case arises when we have already set one or more complete columns of type before encountering the need to
+% balance columns. In this subset of cases, the default in \classname{ltxgrid} is to
+% do an operation I call ``re-balancing'':
+% the material on the page so far is pasted back together into a single column, and new, balanced column breaks are
+% calculated.
+%
+% This scheme typically works fine, but it has a significant vulnerability:
+% any discardable items trimmed at the original column break are lost, never to be retrieved.
+% Consequently, after re-balancing, an element like, say, a section head can fail to have the correct amount of whitespace above.
+%
+% This problem is due to an unfortunate optimization in \TeX, wherein a certain class of nodes is trimmed from the
+% top of main vertical list upon returning from the output routine:
+% any penalty, glue, or leader node falls in to this class of discardable nodes,
+% and trimming proceeds until a non-discardable node (such as a box, or rule) is encountered.
+% It gets better: a third class of nodes is transparent to this trimming process;
+% they are neither discarded nor do they halt the process of trimming:
+% mark nodes and all whatsits fall into this class of transparent nodes;
+% they are quietly passed over during trimming.
+%
+% An alternative approach for \TeX\ to take would have been,
+% rather than discarding the node entirely, to simply \emph{mark} it as discarded.
+% (Implementors of extended \TeX, please note!)
+% Then, upon shipping out, such nodes would not make it into the DVI.
+% \TeX's optimization, driven by the small computer architectures current when it was developed,
+% does save mem, but at the cost of revisiting page breaks in a reliable way.
+%
+% FIXME: how to fix a column break in the above case? Widetext?
+%
+%\StopEventually{}
+%
+% \section{Implementation of package}
+%
+% Special acknowledgment: this package uses concepts pioneered
+% and first realized by William Baxter (mailto:web at superscript.com)
+% in his SuperScript line of commercial typesetting tools, and
+% which are used here with his permission. His thorough understanding
+% of \TeX's output routine underpins the entire \classname{ltxgrid}
+% package.
+%
+% \subsection{Beginning of the \file{ltxgrid} {\sc docstrip} module}
+% Requires the underpinnings of the \classname{ltxkrnext} package.
+% \begin{macrocode}
+%<*package>
+\def\package@name{ltxgrid}%
+\expandafter\PackageInfo\expandafter{\package@name}{%
+ Page grid for \protect\LaTeXe,
+ by A. Ogawa (arthur_ogawa at sbcglobal.net)%
+}%
+\RequirePackage{ltxutil}%
+%</package>
+% \end{macrocode}
+%
+% \subsection{Banner}%
+% \begin{macrocode}
+%<*kernel>
+% \end{macrocode}
+%
+% \subsection{Sundry}%
+% Here are assorted macro definitions.
+% \begin{macro}{\lineloop}
+% \begin{macro}{\linefoot}
+% The (document-level) command \cmd\lineloop\ sets numbered lines until the
+% specified count is reached.
+% The command \cmd\linefoot\ sets a single, automatically numbered line, but with a footnote (with the specified label);
+% it automatically increments the line counter.
+% These commands are typically used to construct test documents.
+%
+% Because the counter is globally advanced and never reset, successive
+% calls to \cmd\lineloop\ should have an argument ever larger.
+% The formatted output will have each line labeled with its ordinal number.
+% \begin{macrocode}
+\newcounter{linecount}
+\def\loop@line#1#2{%
+ \par
+ \hb@xt@\hsize{%
+ \global\advance#1\@ne
+ \edef\@tempa{\@ifnum{100>#1}{0}{}\@ifnum{10>#1}{0}{}\number#1}%
+ \@tempa\edef\@tempa{\special{line:\@tempa}}\@tempa
+ \vrule depth2.5\p@#2\leaders\hrule\hfil
+ }%
+}%
+\def\lineloop#1{%
+ \loopwhile{\loop@line\c@linecount{}\@ifnum{#1>\c@linecount}}%
+}%
+\def\linefoot#1{%
+ \loop@line\c@linecount{%
+ \footnote{%
+ #1\special{foot:#1}\vrule depth2.5\p@\leaders\hrule\hfill
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Mark Components}%
+%
+% Override LaTeX's mark macros to allow more components.
+%
+% We remain bound by the weakness of LaTeX's scheme in that
+% one cannot emulate the action of \TeX\ whereby
+% material with marks can be inserted in the middle of
+% a vertical list such that the marks are reliably calculated.
+% If we did that, \cmd\@themark\ would no longer be utilized.
+%
+% A more robust scheme involves placing all marks (component and value)
+% into a list (using global scoping, i.e., \cmd\gdef),
+% and using \cmd\@@mark to place an index on that list into the MVL.
+% Then, e.g., \cmd\@@botmark signifies the place where that list is to be cut,
+% and the \cmd\botmark\ of any component is
+% the value of the last element of the cut
+% list having the given component. The \cmd\firstmark\ and \cmd\topmark\
+% can likewise be defined relative to \cmd\@@firstmark\ and \cmd\@@topmark,
+% except in the latter case, we want the first following the cut instead of the last
+% preceding the cut.
+%
+% The limitation of this scheme is its demands upon \TeX's mem.
+% The list of marks would need to be trimmed back to, effectively,
+% \cmd\topmark\ at the beginning of every page.
+%
+% This approach is not yet part of the extended LaTeX kernel.
+%
+% \begin{macro}{\@@mark}
+% \begin{macro}{\@@topmark}
+% \begin{macro}{\@@firstmark}
+% \begin{macro}{\@@botmark}
+% \begin{macro}{\@@splitfirstmark}
+% \begin{macro}{\@@splitbotmark}
+% Remember primitives under a new set of names.
+% \begin{macrocode}
+\let\@@mark\mark
+\let\@@topmark\topmark
+\let\@@firstmark\firstmark
+\let\@@botmark\botmark
+\let\@@splitfirstmark\splitfirstmark
+\let\@@splitbotmark\splitbotmark
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Procedures that expose the component data structure}%
+% This portion of the code exposes the internal representation of
+% the mark components. If we wish to add more components, we will have to revise
+% these macro definitions:
+% \cmd\@themark,
+% \cmd\nul@mark,
+% \cmd\set@mark@netw@,
+% \cmd\set@marktw@,
+% \cmd\set@markthr@@,
+% \cmd\get@mark@@ne,
+% \cmd\get@mark@tw@,
+% \cmd\get@mark@thr@@,
+% \cmd\get@mark@f@ur.
+%
+% \begin{macro}{\@themark}
+%FIXME: is it safer to eliminate \cmd\@themark\ in favor of a message that evaluates \cmd\@@botmark?
+%
+% Note: these definitions expose the data structure of mark components.
+% \begin{macrocode}
+\def\@themark{{}{}{}{}}%
+\def\nul@mark{{}{}{}{}\@@nul}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\set@mark@netw@}
+% \begin{macro}{\set@marktw@}
+% \begin{macro}{\set@markthr@@}
+% These procedures insert the new value of a particular mark component into the given argument.
+% They expose the data structure of mark components.
+%
+% \begin{macrocode}
+\def\set@mark@netw@#1#2#3#4#5#6#7{\gdef#1{{#6}{#7}{#4}{#5}}\do@mark}%
+\def\set@marktw@#1#2#3#4#5#6{\gdef#1{{#2}{#6}{#4}{#5}}\do@mark}%
+\def\set@markthr@@#1#2#3#4#5#6{\gdef#1{{#2}{#3}{#6}{#5}}\do@mark}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\get@mark@@ne}
+% \begin{macro}{\get@mark@tw@}
+% \begin{macro}{\get@mark@thr@@}
+% \begin{macro}{\get@mark@f@ur}
+% These procedures retreive the value of a particular mark component.
+% They expose the data structure of mark components.
+% \begin{macrocode}
+\def\get@mark@@ne#1#2#3#4#5\@@nul{#1}%
+\def\get@mark@tw@#1#2#3#4#5\@@nul{#2}%
+\def\get@mark@thr@@#1#2#3#4#5\@@nul{#3}%
+\def\get@mark@f@ur#1#2#3#4#5\@@nul{#4}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{Procedures that do not expose the component data structure}%
+%
+% \begin{macro}{\mark@netw@}
+% \begin{macro}{\marktw@}
+% \begin{macro}{\markthr@@}
+% These procedures insert the new value of a particular mark component into \cmd\@themark,
+% then execute \cmd\do@mark.
+% They constitute the implementation layer for mark components one, two, and three.
+% An analogous procedure for component four could be defined; call it \cmd\markf@ur.
+%
+% \begin{macrocode}
+\def\mark@netw@{\expandafter\set@mark@netw@\expandafter\@themark\@themark}%
+\def\marktw@{\expandafter\set@marktw@\expandafter\@themark\@themark}%
+\def\markthr@@{\expandafter\set@markthr@@\expandafter\@themark\@themark}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\do@mark}
+% \begin{macro}{\do@@mark}
+% Access procedures \cmd\mark (AKA \cmd\@@mark).
+% The \cmd\do@mark\ procedure is used when a mark is being put down into the MVL;
+% \cmd\do@@mark\ when this happens in the output routine.
+% \begin{macrocode}
+\def\do@mark{\do@@mark\@themark\nobreak@mark}%
+\def\do@@mark#1{%
+ \begingroup
+ \let@mark
+ \@@mark{#1}%
+ \endgroup
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\let@mark}
+% \begin{macro}{\nobreak@mark}%
+% The procedure that makes \cmd\csname s robust within a mark.
+% Use \cmd\appdef\ and \cmd\robust@\ to extend the list.
+% \begin{macrocode}
+\def\let@mark{%
+ \let\protect\@unexpandable@protect
+ \let\label\relax
+ \let\index\relax
+ \let\glossary\relax
+}%
+\def\nobreak@mark{%
+ \@if@sw\if@nobreak\fi{\@ifvmode{\nobreak}{}}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{Using mark components}%
+%
+% These procedures use the component mark mechanism to implement
+% a mark component that remembers the current environment (used in page makeup)
+% and the the two mark components left over from the original \LaTeX.
+% The fourth component is presently unused.
+%
+% \begin{macro}{\mark@envir}
+% The third mark component's access procedures.
+% The \cmd\mark@envir\ and \cmd\bot@envir\ commands are a good model of how to write
+% access procedures for a new mark component.
+% \begin{macrocode}
+\def\mark@envir{\markthr@@}%
+\def\bot@envir{%
+ \expandafter\expandafter
+ \expandafter\get@mark@thr@@
+ \expandafter\@@botmark
+ \nul@mark
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\markboth}
+% \begin{macro}{\markright}
+% \begin{macro}{\leftmark}
+% \begin{macro}{\rightmark}
+% Set procedures for legacy components.
+% \begin{macrocode}
+\def\markboth{\mark@netw@}%
+\def\markright{\marktw@}%
+% \end{macrocode}
+%
+% Retrieval procedures for legacy mark components.
+% The procedure for retrieving the first component from \cmd\botmark\
+% and the second component from \cmd\firstmark have names in \LaTeX;
+% they are called, respectively, \cmd\leftmark\ and \cmd\rightmark.
+%
+% It is possible to retrieve the components of \cmd\topmark\
+% as well: use \cmd\saved@@topmark.
+% \begin{macrocode}
+\def\leftmark{%
+ \expandafter\expandafter
+ \expandafter\get@mark@@ne
+ \expandafter\saved@@botmark
+ \nul@mark
+}%
+\def\rightmark{%
+ \expandafter\expandafter
+ \expandafter\get@mark@tw@
+ \expandafter\saved@@firstmark
+ \nul@mark
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+% \subsection{Output Super-routine}%
+%
+% We want to change \LaTeX's output routine, but do not wish to remain vulnerable
+% to interference from such ``required'' packages as
+% \classname{multicol} (authored by Frank Mittelbach)
+% and \classname{longtable} (authored by David P. Carlisle), which
+% swap in their own output routines when the respective package is active.
+%
+% The better mechanism, used here, is due to William Baxter (web at superscript.com),
+% who has allowed his several ideas to be used in this package.
+%
+% In what follows, we effectively wrap up the old \LaTeX\ output routine inside
+% a new, more flexible ``super routine''. When the output routine is called,
+% the ``super routine'' acts as a dispatcher. If the old routine is needed, it is called.
+%
+% If a package attempts to substitute in their own output routine, they will effectively
+% be modifying a token register by the name of \cmd\output.
+% The primitive \cmd\output\ is now known by a different name, which should no longer be
+% necessary to use.
+%
+% Usage note: to make a visit to the output routine employing the dispatcher, enter
+% with a value of \cmd\outputpenalty\ that corresponds to a macro. Defining as follows:
+%\begin{verbatim}
+%\@namedef{output@10000}{<your code here>}%
+%\end{verbatim}
+% by convention, your output routine should void out \cmd\box\cmd\@cclv.
+%
+% In rewriting \LaTeX's output dispatcher
+% in a much simpler form, we also avoid the sin of multiple \cmd\shipout s
+% within a single visit to the output routine.
+%
+% Conceptually, we divide visits to the output routine into two classes.
+% The first involves natural page breaks
+% (at a \cmd\newpage\ or when \cmd\pagetotal $>$ \cmd\pagegoal)
+% and usually resulting in \cmd\box\cmd\@cclv\ either being shipped out or
+% salted away (e.g., each column in a multicolumn layout).
+% We might call this class the ``natural output routines''; the \cmd\outputpenalty\
+% will never be less than $-10000$.
+% Furthermore, we ensure that \cmd\holdinginserts\ is cleared when
+% calling such routines.
+%
+% The other class involves a forced visit to the output routine
+% via a large negative penalty ($< -10000$). They do not generally
+% result in a \cmd\shipout\ of \cmd\box\cmd\@cclv: they may be dead cycles.
+% We provide a mechanism (call it a ``one-off'' output routine) that allows
+% us to specify certain processing to be done when \TeX\ reaches
+% the current position on the page.
+%
+% One-off output routines themselves fall into two divisions, ones
+% that process \cmd\box\cmd\@cclv, and ones that work on the main vertical list (MVL).
+% The former are typified by changes to the page grid, perhaps
+% even column balancing.
+% The latter involve the insertion of penalties or glue and the processing of floats.
+%
+% The natural output routine is a single procedure. We have not introduced multiple
+% natural output routines based on the \cmd\outputpenalty\ because \TeX\ does not
+% support such a thing: \TeX\ sometimes lays down a penalty whose value is the sum
+% of other penalties. Because of this, we cannot depend on the value of \cmd\outputpenalty\
+% in such areas.
+%
+% We do introduce flexibility in the form of a mechanism for patching into the
+% natural output routine. Three hooks are offered, allowing a procedure
+% to prepare for the upcoming visit to the output routine,
+% access to \cmd\box\cmd\@cclv, and after doing \cmd\shipout\ (or otherwise
+% committing the material to the page).
+%
+% Environments, commands, and even packages can install their
+% own procedures into these hooks.
+% For instance, if the longtable package is loaded, it will install
+% its procedures, but those procedures will punt if the page break
+% being processed does not actually fall within a longtable environment.
+%
+% \begin{macro}{\primitive@output}
+% Here we remember the \TeX\ primitive \cmd\output\ and its value,
+% and then proceed to take over the \cmd\csname\ of \cmd\output,
+% making it a \cmd\toks\ register and installing the old value of
+% the output routine.
+% \begin{macrocode}
+\let\primitive@output\output
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\output@latex}
+% \begin{macro}{\output}
+% Grab the tokens in \cmd\the\cmd\output\ (but without the extra set of braces).
+% The value of \cmd\toks@\ must remain untouched until loaded into the appropriate token
+% register; this is done a few lines below.
+% \begin{macrocode}
+\long\def\@tempa#1\@@nil{#1}%
+ \toks@
+\expandafter\expandafter
+\expandafter{%
+\expandafter \@tempa
+ \the\primitive@output
+ \@@nil
+ }%
+\newtoks\output@latex
+\output@latex\expandafter{\the\toks@}%
+\let\output\output@latex
+% \end{macrocode}
+%
+% A comment on compatibility with other packages that co-opt the output routine.
+%
+% Somewhere on the LaTeX-L list, David Kastrup has urged macro writers to take over
+% the output routine in such a way that others can do likewise. How is this to be
+% accomplished?
+%
+% Consider what the \classname{lineno} package does when it loads.
+% \begin{enumerate}
+% \item
+% It does \cmd\let\ cmd\@tempa\ \cmd\output.
+% This has the effect of identifying \cmd\@tempa\ with the
+% \cmd\toks\ register we created above to hold the old output routine of \LaTeX.
+% Let us say that was \cmd\toks14.
+% \item
+% \classname{lineno} itself effectively does \cmd\newtoks\ \cmd\@LN@output,
+% which assigns that \cmd\csname\ to \cmd\toks 15.
+% \item
+% It loads \cmd\@LN@output\ with the contents of \cmd\@tempa
+% (that is, \cmd\toks14, our copy of \LaTeX's output routine).
+% \item
+% Then it loads \cmd\@tempa\ with its own desired procedure,
+% to be executed at \cmd\output\ time, thereby taking over what it thinks is the output routine,
+% but which is in reality the procedure \revtex\ executes when it wants to pass control
+% to \LaTeX's original output routine.
+% \item
+% It then does \cmd\let\ \cmd\output\ \cmd\@LN@output,
+% which now identifies \cmd\output\ with \cmd\toks15, the output routine of \classname{lineno}.
+% \item
+% When the \cmd\output\ routine is triggered,
+% the primitive output routine \cmd\primitive@output\ is executed, and if
+% appropriate, control is passed to \cmd\output@latex, which \revtex\ had loaded with the old
+% \LaTeX\ output routine, but which is presently loaded with that of \classname{lineno}.
+% \item
+% The output routine of \classname{lineno} is executed, and if appropriate control is passed
+% to \cmd\@LN@output, the old output routine of \LaTeX.
+% \item
+% Furthermore, the \cmd\csname\ \cmd\output\ now points to \cmd\@LN@output\ (\cmd\toks15).
+% This means that someone coming in after \classname{lineno} to take over the output routine
+% will actually get executed after that of \classname{lineno}, but before \LaTeX.
+% \end{enumerate}
+% As you can see, the process of taking over the output routine may continue until all of the
+% \cmd\toks\ registers have been allocated.
+% If, say, \classname{newpackage} would itself like to take over the output routine,
+% and if it uses the above set of steps, then when the output routine is triggered, the order
+% of execution is \revtex, then \classname{lineno}, then \classname{newpackage}, then \LaTeX.
+% Each new package inserts itself on front of \LaTeX.
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\dispatch@output}
+% \changes{4.1b}{2008/08/04}{(AO, 456) Compatibility with other packages that override the output routine, following suggestion by David Kastrup.}
+% We now install our own output routine in place of the original
+% output routine of \LaTeX, which is still available as \cmd\the\ \cmd\output.
+%
+% The output routine is simply the procedure \cmd\dispatch@output.
+% It either dispatches to a procedure based on a particular value of
+% \cmd\outputpenalty\ or it executes \cmd\the\cmd\output@latex\ tokens.
+% \begin{macrocode}
+\primitive@output{\dispatch@output}%
+\def\dispatch@output{%
+ \let\par\@@par
+% \end{macrocode}
+% Try to interpret \cmd\outputpenalty\ as a dispatcher to a message handler,
+% its value is, e.g., \cmd\do@startpage@pen.
+% \begin{macrocode}
+ \expandafter\let\expandafter\output@procedure\csname output@\the\outputpenalty\endcsname
+% \end{macrocode}
+% If we have failed to find a dispatcher, then settle for \cmd\output@latex.
+% \begin{macrocode}
+ \@ifnotrelax\output@procedure{}{%
+ \expandafter\def\expandafter\output@procedure\expandafter{\the\output@latex}%
+ }%
+% \end{macrocode}
+% Now test if the dispatcher is the special case of \cmd\execute@message@pen, in which case execute the \cmd\@message@saved.
+% \changes{4.1n}{2009/12/02}{More diagnostics of column balancing}
+% \begin{macrocode}
+ \expandafter\@ifx\expandafter{\csname output@-\the\execute@message@pen\endcsname\output@procedure}{%
+ \let\output@procedure\@message@saved
+ }{}%
+ \ltxgrid@info@sw{\class@info{\string\dispatch@output}\say\output@procedure\saythe\holdinginserts}{}%
+ \outputdebug@sw{\output@debug}{}%
+ \output@procedure
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\set@output@procedure#1#2{%
+ \count@\outputpenalty\advance\count@-#2%
+ \expandafter\let\expandafter#1\csname output@\the\count@\endcsname
+}%
+% \end{macrocode}
+%
+% \changes{4.1n}{2009/12/02}{More diagnostics of column balancing}
+% The following procedure is executed at the beginning of each visit to the output routine,
+% contingent on the level of diagnostics specified.
+% However, it bails out when the visit is part of a tight sequence of visits to the output routine.
+% \begin{macrocode}
+\def\output@debug{%
+ \def\@tempa{\save@message}%
+ \@ifx{\output@procedure\@tempa}{%
+ \true@sw
+ }{%
+ \@ifnum{\outputpenalty=-\save@column@insert@pen}{%
+ \@ifnum{\holdinginserts>\z@}%
+ }{%
+ \false@sw
+ }%
+ }%
+ {}{\output@debug@}%
+}%
+\def\output@debug@{%
+%<ignore> \saythe\inputlineno
+ \saythe\outputpenalty
+ \saythe\interlinepenalty
+ \saythe\brokenpenalty
+ \saythe\clubpenalty
+ \saythe\widowpenalty
+ \saythe\displaywidowpenalty
+ \saythe\predisplaypenalty
+ \saythe\interdisplaylinepenalty
+ \saythe\postdisplaypenalty
+ \saythe\badness
+ \say\thepagegrid
+ \saythe\pagegrid@col
+ \saythe\pagegrid@cur
+%<ignore> \say\bot@envir
+ \saythe\insertpenalties
+%<ignore> \say\@@topmark
+%<ignore> \say\saved@@topmark
+%<ignore> \say\@@firstmark
+%<ignore> \say\saved@@firstmark
+ \say\@@botmark
+%<ignore> \say\saved@@botmark
+ \saythe\pagegoal
+ \saythe\pagetotal
+ \saythe{\badness\@cclv}%
+ \say\@toplist
+ \say\@botlist
+ \say\@dbltoplist
+ \say\@deferlist
+ \trace@scroll{%
+ \showbox\@cclv
+ \showbox\@cclv@saved
+ \showbox\pagesofar
+% \end{macrocode}
+% Klootch! The following line provides only for two-column page grid; if debugging more columns, you must
+% add more statements here.
+% \begin{macrocode}
+ \showbox\csname col@1\endcsname
+ \showbox\footsofar
+ \showbox\footins
+ \showbox\footins@saved
+ \showlists
+ }%
+}%
+\@ifxundefined{\outputdebug@sw}{%
+ \@booleanfalse\outputdebug@sw
+}{}%
+\def\trace@scroll#1{\begingroup\showboxbreadth\maxdimen\showboxdepth\maxdimen\scrollmode#1\endgroup}%
+\def\trace@box#1{\trace@scroll{\showbox#1}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@outputpage}
+% \begin{macro}{\@outputpage@head}
+% \begin{macro}{\@outputpage@tail}
+% \changes{4.1b}{2008/08/04}{Procedure \cs{@outputpage@tail} tailpatches \cs{@outputpage}}%
+% \changes{4.1b}{2008/08/04}{Procedure \cs{@outputpage@head} headpatches \cs{@outputpage}}%
+% The procedure \cmd\@outputpage\ of standard \LaTeX\ is the sole place where a \cmd\shipout\ is carried out.
+% The procedures that build \cmd\@outputbox\ just before a page is shipped out by \cmd\@outputpage\ are:
+% \cmd\@makecolumn,
+% \cmd\@combinepage, and
+% \cmd\@combinedblfloats.
+%
+% We need to head- and tailpatch this procedure, so we perform here
+% the only modifications to that procedure that are essential.
+% Elsewhere, we will build up the meanings of \cmd\@outputpage@head\ and \cmd\@outputpage@tail.
+% \begin{macrocode}
+\prepdef\@outputpage{\@outputpage@head}%
+\let\@outputpage@head\@empty
+\appdef\@outputpage{\@outputpage@tail}%
+\let\@outputpage@tail\@empty
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\show@box@size}
+% \begin{macro}{\show@text@box@size}
+% \begin{macro}{\show@pagesofar@size}
+% \begin{macro}{\show@box@size@sw}
+% \begin{macro}{\total@text}
+% \changes{4.1b}{2008/08/04}{(AO, 452) Support length checking: show size of shipped out text.}
+% Procedure \cmd\show@box@size\ is a diagnostic for the sizes of boxes;
+% the boolean \cmd\show@box@size@sw\ turns it on and off.
+% \begin{macrocode}
+\def\show@box@size#1#2{%
+ \show@box@size@sw{%
+ \begingroup
+ \setbox\z@\vbox{\unvcopy#2\hrule}%
+ \class@info{Show box size: #1^^J%
+ (\the\ht\z@\space X \the\wd\z@)
+ \the\c@page\space\space\the\pagegrid@cur\space\the\pagegrid@col
+ }%
+ \endgroup
+ }{}%
+}%
+% \end{macrocode}
+% Procedure \cmd\show@text@box@size\ tallies the size of the indicated column.
+% If \cmd\box\ \cmd\pagesofar\ is a factor, then its height has been memorized
+% in the depth of the tally box.
+%
+% \changes{4.1f}{2009/07/10}{(AO, 518) Tally register overflow when locument is long}
+% \begin{macrocode}
+\def\show@text@box@size{%
+ \show@box@size{Text column}\@outputbox
+ \tally@box@size@sw{%
+ \@ifdim{\wd\@outputbox>\z@}{%
+ \dimen@\ht\@outputbox\divide\dimen@\@twopowerfourteen
+ \advance\dimen@-\dp\csname box@size@\the\pagegrid@col\endcsname
+ \@ifdim{\dimen@>\z@}{%
+ \advance\dimen@ \ht\csname box@size@\the\pagegrid@col\endcsname
+ \global\ht\csname box@size@\the\pagegrid@col\endcsname\dimen@
+ \show@box@size@sw{%
+ \class@info{Column: \the\dimen@}%
+ }{}%
+ }{}%
+ }{}%
+ \global\dp\csname box@size@\the\pagegrid@col\endcsname\z@
+ }{}%
+}%
+% \end{macrocode}
+% Take the height of \cmd\box\ \cmd\pagesofar\ into account.
+% \begin{macrocode}
+\def\show@pagesofar@size{%
+ \show@box@size{Page so far}\pagesofar
+ \dimen@\ht\pagesofar\divide\dimen@\@twopowerfourteen
+ \global\dp\csname box@size@1\endcsname\dimen@
+ \show@box@size@sw{%
+ \class@info{Pagesofar: \the\dimen@}%
+ }{}%
+}%
+\@booleanfalse\tally@box@size@sw
+\@booleanfalse\show@box@size@sw
+\expandafter\newbox\csname box@size@1\endcsname
+\expandafter\setbox\csname box@size@1\endcsname\hbox{}%
+\expandafter\newbox\csname box@size@2\endcsname
+\expandafter\setbox\csname box@size@2\endcsname\hbox{}%
+\def\total@text{%
+ \@tempdima\the\ht\csname box@size@2\endcsname\divide\@tempdima\@twopowertwo\@tempcnta\@tempdima
+ \@tempdimb\the\ht\csname box@size@1\endcsname\divide\@tempdimb\@twopowertwo\@tempcntb\@tempdimb
+ \class@info{Total text: Column(\the\@tempcnta pt), Page(\the\@tempcntb pt)}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Further thoughts about inserts}
+%
+% The only safe way to deal with inserts is to either set \cmd\holdininserts\ or
+% to commit to using whatever insert comes your way: you cannot change your mind
+% once you see a non-void \cmd\box\cmd\footins, say.
+%
+% Therefore all output routine processing must proceed with \cmd\holdinginserts\ set
+% until you are sure of the material to be committed to the page. At that point, you
+% can clear \cmd\holdinginserts, spew \cmd\box\cmd\@cclv, put down the appropriate penalty,
+% and exit, with the knowledge that \TeX\ will re-find the same pagebreak, this time
+% visiting the output routine with everything, including inserts, in their proper
+% place.
+% This technique applies to split elements (screens, longtable, index) as well as to
+% manufactured pages (float pages and clearpage pages).
+%
+% Therefore, the output routine must not make assumptions about whether \cmd\holdinginserts\
+% should be cleared; instead this must be left to the one-off output routines or the natural output routine.
+%
+% If we are manufacturing pages (``float page processing''), and if \cmd\pagegoal\ is not equal to
+% \cmd\vsize, then inserts are at hand, and our criterion should take into account the insert
+% material, even though we cannot measure its height based on the size of \cmd\box\cmd\footins\
+% (because \cmd\holdinginserts\ is set, you see).
+%
+% It would be better to take the complement of \cmd\floatpagefraction\ and use that
+% as a standard for the looseness of the page. Since \cmd\pagegoal\ reflects the inserted material,
+% the criterion becomes the difference of the aggregate height of the floats and the \cmd\pagegoal\
+% versus this "page looseness" standard.
+%
+% As a check, consider what happens if we bail out: \cmd\@deferlist\ has never been touched, so it
+% requires no attention. Also, \cmd\holdinginserts\ has never been cleared, so inserts require
+% no attention. So we only have to ensure that marks are preserved, which is already taken
+% care of by the message handler mechanism.
+%
+% If we are doing ordinary page cutting, then the scheme would be to detect whether we are within
+% a screen (or longtable as may be), do the adjustment to the page height, and return, but this time
+% with \cmd\holdinginserts\ cleared. Upon reentering the output routine, we may or may not be within
+% the screen environment, but we are now sure to have a final page break, and we can commit this
+% material (by shipping out or by saving it out as a full column).
+%
+% In the above, the first of the two visits to the output routine is a dead cycle and requires
+% propagation of marks, but nothing else.
+%
+% \subsection{The difference between inserts and floats}
+%
+% While revisiting this package in 2008, I needed to clarify under what circumstances inserts
+% would be added to the \cmd\pagesofar. My conclusion is that I had been treating them
+% exactly the same as floats, but that was a mistake.
+%
+% Floats can be committed at the top of a column, in the middle, or at the bottom.
+% Footnotes (the only \cmd\insert\ that is used in \LaTeX) may only be committed at the bottom
+% of a column. So, it was necessary to provide two versions of \cmd\@combinepage, one
+% that committed \cmd\insert s, and the other that did not, the former used only when
+% a column of text was committed. Note that even after a column is committed, we could change our minds:
+% for instance if in multicolumn grid and we decide to balance the columns.
+%
+%
+% \subsection{The natural output routine}
+%
+% Here is the portion of the output routine that fields cases not handled by
+% the dispatcher.
+%
+% The default is to ship out a page and then look around for more material
+% that might constitute a ``float page''. However, because \cmd\holdinginserts\
+% is normally set, this output routine must first have a dead cycle and
+% come back again with \cmd\holdinginserts\ cleared.
+% Then, after shipping out, it puts down a message that
+% will manufacture zero or more float pages, finally terminating
+% with a procedure that commits floats to a new unfinished page.
+%
+% To accomodate special processing, we execute hooks whose name is based
+% on the value of the "envir" mark component. The default is "document",
+% ensured by an initial mark of that value; the associated procedures
+% are all nil. Any unknown envir value will "\cmd\relax\ out".
+%
+% The test made by \cmd\toggle@insert\ tells whether we are on our first visit to
+% the output routine (with \cmd\holdinginserts\ still positive), or our second
+% (with \cmd\holdinginserts\ zeroed). The output routine will toggle the setting.
+%
+% The commands \cmd\hold@insertions\ and \cmd\move@insertions\ respectively
+% clear and set \cmd\holdinginserts, so this procedure effectively
+% clears \cmd\holdinginserts\ just long enough to pick up the insertions.
+% Important: any output routine that clears \cmd\holdinginserts\
+% must guarentee that it is restored on the subsequent visit to the output routine.
+% Or, to put it another way, if an output routine detects that \cmd\holdinginserts\
+% is cleared, it should take it upon itself to restore it to a positive value before exiting.
+%
+% The branch with \cmd\holdinginserts\ set is executed first; the other
+% branch follows on practically immediately thereafter. In the first branch,
+% we simply execute the appropriate hook and then execute a dead cycle.
+%
+% In the branch with \cmd\holdinginserts\ cleared, the procedure
+% builds up the current column, which is now complete, with \cmd\@makecolumn, then
+% dispatches to the shipout routine associated with the current page grid, \cmd\output@column@.
+% At the end, it triggers the execution of an output routine to prepare the next column (or page).
+%
+% \subsection{Natural output routine}%
+%
+% \begin{macro}{\natural@output}
+% \begin{macro}{\output}
+% Here is the output routine that handles natural pagebreaks:
+% we now have page that needs to be shipped out or a portion of a page that is ready to be committed to the page grid.
+% Processing is of necessity divided into phases, \cmd\output@holding\ is executed upon first encountering the natural page-breaking point, while inserts are being held.
+% The second phase, \cmd\output@moving, is set in motion by the first: here the same material (in most cases) will be processed with \cmd\holdinginserts\ cleared,
+% and the insertions (e.g., footnotes) are split off into their assigned box registers.
+% \begin{macrocode}
+\def\natural@output{\toggle@insert{\output@holding}{\output@moving}}%
+\output@latex{\natural@output}%
+% \end{macrocode}
+%
+% In accordance with the scheme suggested by David Kastrup for allowing another output routine
+% to slip itself into ours, we use a token register called \cmd\output.
+% However, we reserve the ability to restore things if we so desire.
+% This we must do in the case of the \filename{lineno.sty} package, because its functionality
+% is best served by being integrated into our own dispatcher-based output routine.
+%
+% To restore our own output routine, we can repeat the above assignment,
+% \begin{verbatim}
+%\output@latex{\natural@output}%
+% \end{verbatim}
+% some time before the document begins.
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\output@holding}
+% \begin{macro}{\@if@exceed@pagegoal}
+% The procedure \cmd\output@holding\
+% is our first cycle through the output routine; \cmd\holdinginserts\ is still set.
+% We give the current environment a heads up
+% (it is through this means that \classname{longtable} sets its running header and footer),
+% then we execute a dead cycle, which should propagate marks.
+%
+% One corner case that can crop up is the presence of a single unbreakable chunk whose size is larger
+% than \cmd\vsize.
+% Doing a dead cycle under such circumstances will not find the same breakpoint as this time
+% (remember we threw in a \cmd\mark\ node).
+% Instead, we attempt to remove the excess height of the material, so we can continue to propagate marks.
+%
+% The corner case is at hand if the natural size of \cmd\box\cmd\@cclv\ exceeds \cmd\pagegoal\ and
+% the contents cannot be shrunk to fit.
+%
+% \changes{4.1b}{2008/08/04}{New procedure for showing a box contents, \cs{trace@box}}
+% \begin{macrocode}
+\def\output@holding{%
+ \csname output@init@\bot@envir\endcsname
+ \@if@exceed@pagegoal{\unvcopy\@cclv}{%
+ \setbox\z@\vbox{\unvcopy\@cclv}%
+ \outputdebug@sw{\trace@box\z@}{}%
+ \dimen@\ht\@cclv\advance\dimen@-\ht\z@
+ \dead@cycle@repair\dimen@
+ }{%
+ \dead@cycle
+ }%
+}%
+\def\@if@exceed@pagegoal#1{%
+ \begingroup
+ \setbox\z@\vbox{#1}%
+ \dimen@\ht\z@\advance\dimen@\dp\z@
+ \outputdebug@sw{\saythe\dimen@}{}%
+ \@ifdim{\dimen@>\pagegoal}{%
+ \setbox\z@\vbox{\@@mark{}\unvbox\z@}%
+ \splittopskip\topskip
+ \splitmaxdepth\maxdepth
+ \vbadness\@M
+ \vfuzz\maxdimen
+ \setbox\tw@\vsplit\z@ to\pagegoal
+ \outputdebug@sw{\trace@scroll{\showbox\tw@\showbox\z@}}{}%
+ \setbox\tw@\vbox{\unvbox\tw@}%
+ \@ifdim{\ht\tw@=\z@}{%
+ \ltxgrid@info{Found overly large chunk while preparing to move insertions. Attempting repairs}%
+ \aftergroup\true@sw
+ }{%
+ \aftergroup\false@sw
+ }%
+ }{%
+ \aftergroup\false@sw
+ }%
+ \endgroup
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\output@moving}
+% \begin{macro}{\@cclv@nontrivial@sw}
+% The procedure \cmd\output@moving\
+% is our second cycle through the output routine; \cmd\holdinginserts\ is now cleared,
+% and \cmd\insert s will have been split off into their respective box registers, like \cmd\footins.
+%
+% \begin{enumerate}
+% \item
+% Set the values of \cmd\topmark\ and \cmd\firstmark.
+% \item
+% If we got here because of a \cmd\clearpage\ command, remove the protection box that this mechanism has left on the MVL.
+% \item
+% If the contents of \cmd\box\cmd\@cclv\ are non-trivial, commit it to the current page (as a column) or ship it out, as the case may call for.
+% \item
+% If not, discard it (we are at the end of \cmd\clearpage\ processing).
+% \item
+% Set various values, including the available space for setting type on the next column (\cmd\@colroom).
+% \end{enumerate}
+%
+% The processing for a non-trivial \cmd\box\cmd\@cclv\ are:
+% \begin{enumerate}
+% \item
+% Execute the head procedure for the current environment.
+% \item
+% Make up a column and ship it out (or commit it to the current page) via a procedure keyed to the current page grid.
+% \item
+% Put down an interrupt for \cmd\do@startcolumn@pen: this will force a visit to the output routine for the
+% purpose of committing floats to the next column.
+% \item
+% Possibly put down an interrupt to continue \cmd\clearpage\ proccessing.
+% \item
+% Execute the tail procedure for the current environment.
+% \end{enumerate}
+%
+%
+% The processing for a trivial \cmd\box\cmd\@cclv\ are:
+% \begin{enumerate}
+% \item
+% Void out \cmd\box\cmd\@cclv\ and give appropriate warning messages and diagnostics.
+% \item
+% Put down the same interrupts as for the non-trivial case above.
+% \end{enumerate}
+%
+% This instance of \cmd\@makecolumn\ is followed by \cmd\output@column@,
+% that is, it builds a column for \cmd\shipout\ rather than for adding to \cmd\pagesofar.
+%
+% We need to handle cases where the \cmd\output@pre@, \cmd\output@column@, or \cmd\output@post@\
+% dispatchers come up \cmd\relax ed out: the default is to execute the corresponding
+% procedures from the \env{docuemnt} environment and the one-column grid respectively.
+%
+% One such case comes up with frequency: at the end of the document, where the \cmd\botmark\ is
+% now empty.
+% \changes{4.1b}{2008/08/04}{Change \cs{@makecol} to \cs{@makecolumn} with argument}
+% \changes{4.1b}{2008/08/04}{Change \cs{set@colroom} to \cs{set@colht}}
+% \changes{4.1n}{2010/01/02}{(AO, 571) Use procedures \cs{output@do@prep} and \cs{output@column@do} as dispatchers}
+% \begin{macrocode}
+\def\output@moving{%
+ \set@top@firstmark
+ \@ifnum{\outputpenalty=\do@newpage@pen}{%
+ \setbox\@cclv\vbox{%
+ \unvbox\@cclv
+ \remove@lastbox
+ \@ifdim{\ht\z@=\ht\@protection@box}{\box\lastbox}{\unskip}%
+ }%
+ }{}%
+ \@cclv@nontrivial@sw{%
+ \expandafter\output@do@prep\csname output@prep@\bot@envir \endcsname
+ \@makecolumn\true@sw
+ \expandafter\output@column@do\csname output@column@\thepagegrid\endcsname
+ \protect@penalty\do@startcolumn@pen
+ \clearpage@sw{%
+ \protect@penalty\do@endpage@pen
+ }{}%
+ \expandafter\let\expandafter\output@post@\csname output@post@\bot@envir \endcsname
+ \outputdebug@sw{\say\output@post@}{}%
+ \@ifx{\output@post@\relax}{\output@post@document}{\output@post@}%
+ }{%
+ \void@cclv
+ }%
+ \set@colht
+ \global\@mparbottom\z@
+ \global\@textfloatsheight\z@
+}%
+% \end{macrocode}
+% Procedure \cmd\output@do@prep\ dispatches to the proper procedure to prepare page.
+% \begin{macrocode}
+\def\output@do@prep#1{%
+ \outputdebug@sw{\class@info{Prep: \string#1}}{}%
+ \@ifx{#1\relax}{\output@prep@document}{#1}%
+}%
+% \end{macrocode}
+% Procedure \cmd\output@column@do\ dispatches to the proper procedure to output column or page.
+% \begin{macrocode}
+\def\output@column@do#1{%
+ \outputdebug@sw{\class@info{Output column: \string#1}}{}%
+ \@ifx{#1\relax}{\output@column@one}{#1}%
+}%
+\def\void@cclv{\begingroup\setbox\z@\box\@cclv\endgroup}%
+\def\remove@lastbox{\setbox\z@\lastbox}%
+% \end{macrocode}
+%
+% The procedure \cmd\@cclv@nontrivial@sw\ determines if this visit to \cmd\output@moving\
+% is a trivial one, which happens at the end of \cmd\clearpage\ processing and under some pathological circumstances.
+% It emits a Boolean, so it is syntactically like \cmd\true@sw, albeit does not execute solely via expansion.
+%
+% Note: the case where \cmd\box\cmd\@cclv\ is void comes up at the very beginning of the job, when
+% typesetting a (full-page-width) title block in a two-column layout.
+%
+% Note: the code that removes the last box and skip from the output is intended to detect the case
+% where the output has whatsit nodes followed by topskip and a protection box.
+% This is what happens under normal circumstances at the end of \cmd\clearpage\ processing.
+% \changes{4.1b}{2008/08/04}{New procedure for showing a box contents, \cs{trace@box}}
+% \begin{macrocode}
+\def\@cclv@nontrivial@sw{%
+ \@ifx@empty\@toplist{%
+ \@ifx@empty\@botlist{%
+ \@ifvoid\footins{%
+ \@ifvoid\@cclv{%
+ \false@sw
+ }{%
+ \setbox\z@\vbox{\unvcopy\@cclv}%
+ \@ifdim{\ht\z@=\topskip}{%
+ \setbox\z@\vbox\bgroup
+ \unvbox\z@
+ \remove@lastbox
+ \dimen@\lastskip\unskip
+ \@ifdim{\ht\z@=\ht\@protection@box}{%
+ \advance\dimen@\ht\z@
+ \@ifdim{\dimen@=\topskip}{%
+ \aftergroup\true@sw
+ }{%
+ \aftergroup\false@sw
+ }%
+ }{%
+ \aftergroup\false@sw
+ }%
+% \end{macrocode}
+% End of \cmd\box\cmd\z@.
+% \begin{macrocode}
+ \egroup
+ {%
+% \end{macrocode}
+% Normal for \clearpage
+% \begin{macrocode}
+ \false@sw
+ }{%
+ \true@sw
+ }%
+ }{%
+ \@ifdim{\ht\z@=\z@}{%
+ \ltxgrid@info{Found trivial column. Discarding it}%
+ \outputdebug@sw{\trace@box\@cclv}{}%
+ \false@sw
+ }{%
+ \true@sw
+ }%
+ }%
+ }%
+ }{%
+ \true@sw
+ }%
+ }{%
+ \true@sw
+ }%
+ }{%
+ \true@sw
+ }%
+}%
+% \end{macrocode}
+%
+%
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\protect@penalty}
+% The procedure \cmd\protect@penalty\ is the utility procedure for invoking a
+% one-off output routine. Such a routine can expect to find the protection box
+% above it in \cmd\box\cmd\@cclv: it should remove that box.
+%
+% Note that \cmd\execute@message\ does the same thing as \cmd\protect@penalty, but
+% in a slightly different way.
+%
+% We create a specially formulated box that will be universally used when a protection box is needed.
+% In this way, we can always recognize when \cmd\box\cmd\@cclv\ is trivial:
+% it will consist of whatsits followed by \cmd\topskip\ glue and the \cmd\@protection@box.
+% \begin{macrocode}
+\def\protect@penalty#1{\protection@box\penalty-#1\relax}%
+\newbox\@protection@box
+\setbox\@protection@box\vbox to1986sp{\vfil}%
+\def\protection@box{\nointerlineskip\copy\@protection@box}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\dead@cycle}
+% \begin{macro}{\dead@cycle@repair}
+% The procedure \cmd\dead@cycle\ is defined separately as a utility which can be used by
+% any output processing routine to emulate what takes place in the standard output routine.
+%
+% Here, we have entered the output routine with \cmd\holdinginserts\ enabled, which means that we
+% are not yet ready to ship out material, because the \cmd\insert\ registers are being held.
+% We want to clear \cmd\holdinginserts\ and come back here with the same page break as before, whereupon
+% we may properly proceed with page makeup.
+%
+% To do this, we
+% propagate marks, then spew the contents of \cmd\box\cmd\@cclv\ followed by the
+% original output penalty that landed us here (but only if it is not 10000,
+% the flag value for a pagebreak not at a penalty).
+%
+% However, the natural output routine should do this only if \cmd\box\cmd\@cclv\ is nontrivial.
+% A pathological case exists wherein a box of height greater than \cmd\textheight\ would cause an infinite loop involving the output routine.
+% The procedure \cmd\dead@cycle@repair, attempts to catch this case and avoid the loop.
+%
+% The test of the height of \cmd\box\cmd\@cclv\ is not the correct one, because this test will run afoul in
+% the case where \cmd\box\cmd\@cclv\ contains nothing but an \cmd\insert\ node. What to do?
+%
+% It is possible that the pathological case can be detected by looking at \cmd\pagetotal. If that quantity is
+% zero, then \cmd\box\cmd\@cclv\ really is trivial.
+%
+% In the procedure \cmd\dead@cycle@repair, if \cmd\box\cmd\@cclv\ is nontrivial, we execute \cmd\dead@cycle,
+% otherwise it contains nothing but a mark, so we dispense with propagating marks
+% and we simply spew out \cmd\box\cmd\@cclv\ without an accompanying mark.
+% This has the effect of failing to propagate marks, but this problem is preferrable to the infinite loop,
+% which in principle could crash even a robust operating system by filling up the file system.
+%
+% If a document has such a large chunk, it should be fixed, so we give a message in the log.
+%
+% You ask, ``In what way does this infinite loop come about?'' Good question!
+%
+% The setup is a chunk in the MVL that is taller than \cmd\textheight.
+% (Yes, it's that simple.)
+% As soon as the previous page ships out, the MVL will contain a mark (propagated from the previous page) followed
+% by that large chunk (call it the `big bad box', albeit does not need to be a single box).
+% The next visit to the output routine will be a natural page break, but
+% \TeX\ will select the juncture between the mark and the big bad box as the least-cost page break.
+% Unless the test in \cmd\dead@cycle\ is done, the cycle is perpetuated when the macro
+% reinserts the mark.
+%
+% The crux matter is achieving, in a robust way, the goal of going from a \cmd\holdinginserts\ state to one
+% where the insertions are moving.
+%
+% \begin{macrocode}
+\def\dead@cycle@repair#1{%
+ \expandafter\do@@mark
+ \expandafter{%
+ \@@botmark
+ }%
+ \unvbox\@cclv
+ \nointerlineskip
+ \vbox to#1{\vss}%
+ \@ifnum{\outputpenalty<\@M}{\penalty\outputpenalty}{}%
+}%
+\def\dead@cycle@repair@protected#1{%
+ \expandafter\do@@mark
+ \expandafter{%
+ \@@botmark
+ }%
+ \begingroup
+ \unvbox\@cclv
+% \end{macrocode}
+% Remove the protection box
+% \begin{macrocode}
+ \remove@lastbox
+ \nointerlineskip
+ \advance#1-\ht\@protection@box
+ \vbox to#1{\vss}%
+ \protection@box % Reinsert protection box
+ \@ifnum{\outputpenalty<\@M}{\penalty\outputpenalty}{}%
+ \endgroup
+}%
+\def\dead@cycle{%
+ \expandafter\do@@mark
+ \expandafter{%
+ \@@botmark
+ }%
+ \unvbox\@cclv
+ \@ifnum{\outputpenalty<\@M}{\penalty\outputpenalty}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\output@init@document}
+% \begin{macro}{\output@prep@document}
+% \begin{macro}{\output@post@document}
+% The default processing simply provides for insertion of held-over footnotes.
+% At a natural page break, we are either at the bottom of a column or at the bottom
+% of a page. In either case, the \cmd\output@init@\ processing adjusts for the height
+% of the held-over footnotes and bails out.
+% Upon our return, at \cmd\output@prep@\ time, the page break will accomodate the material;
+% it is now actually inserted by concatenating it with the contents of \cmd\footins.
+% The default processing for \cmd\output@post@\ is nil.
+% \changes{4.1b}{2008/08/04}{Box \cs{footbox} changed to box \cs{footsofar}}
+% \changes{4.1n}{2009/12/02}{More diagnostics of column balancing}
+% \begin{macrocode}
+\def\output@init@document{%
+ \ltxgrid@info@sw{\class@info{\string\output@init@document}}{}%
+ \global\vsize\vsize
+}%
+% \end{macrocode}
+% QUERY: the following procedure is very like \cmd\combine@foot@inserts. Should it be the same?
+% Answer: no, the two differ: this procedure makes a local assignment of \cmd\footins;
+% the latter makes a global assignment of \cmd\footsofar.
+%
+% Note: In a multicolumn document, footnotes must \emph{not} be balanced at this point.
+% \changes{4.1n}{2009/12/02}{More diagnostics of column balancing}
+% \begin{macrocode}
+\def\output@prep@document{%
+ \ltxgrid@foot@info@sw{\class@info{\string\output@prep@document}\trace@scroll{\showbox\footins\showbox\footsofar}}{}%
+ \@ifvoid\footsofar{%
+ }{%
+ \global\setbox\footins\vbox\bgroup
+ \unvbox\footsofar
+ \@ifvoid\footins{}{%
+ \marry@baselines
+ \unvbox\footins
+ }%
+ \egroup
+ \ltxgrid@foot@info@sw{\trace@box\footins}{}%
+ }%
+}%
+\def\output@post@document{}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@opcol}
+% The standard \LaTeX\ procedure \cmd\@opcol\ is now completely obsoleted.
+% \begin{macrocode}
+\let\@opcol\@undefined
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@makecolumn}
+% \changes{4.1b}{2008/08/04}{Change \cs{@makecol} to \cs{@makecolumn} with argument}
+% The procedure \cmd\@makecolumn\ packages up a page along with all its insertions and floats.
+% Therefore it is essential that it be executed with \cmd\holdininserts\ cleared.
+%
+% Note that there is a corner case when in a multi-column grid, where the change back to
+% one-column grid occurs just after a complete page ships out. We want to detect when
+% \cmd\@cclv\ contains nothing but a \cmd\mark, but this is a \TeX\ impossibility.
+%
+% Note on \cmd\@kludgeins: we have removed this mechanism from \LaTeX, because the implementation
+% of \cmd\enlargethispage\ no longer requires it.
+% Here, for consistency sake, we remove \cmd\@makespecialcolbox.
+%
+% The argument of \cmd\@makecolumn\ is a Boolean and determines if we combine the footnote material
+% into the present column. If the procedure is building a column for shipping out, then we will
+% combine the footnote material, if not, we return with the \cmd\footins\ box unchanged.
+%
+% \changes{4.1f}{2009/07/14}{(AO, 519) \cs{footins} content must be preserved and reintegrated}
+% \changes{4.1n}{2009/12/02}{More diagnostics of column balancing}
+% \changes{4.1n}{2010/01/02}{(AO, 571) coding convention: use \cs{bgroup}, \cs{egroup} (instead of braces) when a box is being built}%
+% \changes{4.1n}{2010/01/02}{(AO, 571) change calling sequence of \cs{combine@foot@inserts} to expose box registers}%
+% I changed the behavior of this procedure in the case where the argument is \cmd\false@sw:
+% send the unused footnote material to \cmd\footsofar.
+% \begin{macrocode}
+\def\@makecolumn#1{%
+ \ltxgrid@foot@info@sw{\class@info{\string\@makecolumn\string#1}}{}%
+ \setbox\@outputbox\vbox\bgroup
+ \boxmaxdepth\@maxdepth
+ \@tempdima\dp\@cclv
+ \unvbox\@cclv
+ \vskip-\@tempdima
+ \egroup
+ \xdef\@freelist{\@freelist\@midlist}\global\let\@midlist\@empty
+ \show@text@box@size
+ \@combinefloats
+ #1{%
+ \@combineinserts\@outputbox\footins
+ }{%
+ \combine@foot@inserts\footsofar\footins
+ }%
+ \set@adj@colht\dimen@
+ \count@\vbadness
+ \vbadness\@M
+ \setbox\@outputbox\vbox to\dimen@\bgroup
+ \@texttop
+ \dimen@\dp\@outputbox
+ \unvbox\@outputbox
+ \vskip-\dimen@
+ \@textbottom
+ \egroup
+ \vbadness\count@
+ \global\maxdepth\@maxdepth
+}%
+\let\@makespecialcolbox\@undefined
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@combineinserts}
+% The procedure to add the specified insertions to the packaged-up page.
+% All other classes of insertions should also be dealt with at this time.
+%
+% Note that the second argument must be a \cmd\newinsert\ register: we access the \cmd\box\ along with the \cmd\skip.
+% \changes{4.1n}{2009/12/02}{More diagnostics of column balancing}
+% \changes{4.1n}{2010/01/02}{(AO, 571) coding convention: use \cs{bgroup}, \cs{egroup} (instead of braces) when a box is being built}%
+% \changes{4.1n}{2010/01/02}{(AO, 571) footnote rule is leaders, so that it may be removed by \cs{vsplit}; mechanism of \cs{kern} signals to indicate footnote height}%
+% \begin{macrocode}
+\def\@combineinserts#1#2{%
+ \ltxgrid@foot@info@sw{\class@info{\string\@combineinserts\string#1\string#2}\trace@box#2}{}%
+ \setbox#1\vbox\bgroup
+ \unvbox#1%
+ \@ifvoid{#2}{}{%
+ \dimen@\ht#2\advance\dimen@\dp#2\advance\dimen@\skip#2%
+ \show@box@size{Combining inserts}#2%
+ \vskip\skip#2%
+% \end{macrocode}
+% The footnote rule is created as leaders, so that it may be removed automatically (via \cmd\vsplit)
+% in the event the footnote is recovered from this column.
+% Note that if \cmd\color@begingroup\ or \cmd\normalcolor\ produce marks, this technique will be confounded.
+% \begin{macrocode}
+ \setbox\z@\vbox{\footnoterule}\dimen@i\ht\z@
+ \color@begingroup
+ \normalcolor
+ \cleaders\box\z@\vskip\dimen@i\kern-\dimen@i
+ \csname combine@insert@\the\pagegrid@col\endcsname#2%
+ \color@endgroup
+% \end{macrocode}
+% The following tells \cmd\recover@column\ the size of the footnotes added here, including the skip glue above.
+% \begin{macrocode}
+ \kern-\dimen@\kern\dimen@
+ }%
+ \egroup
+ \ltxgrid@foot@info@sw{\trace@box#1}{}%
+}%
+% \end{macrocode}
+% We provide for a layer of abstraction for the laying down of footnotes at the bottom of this column or page.
+% \end{macro}
+%
+% \begin{macro}{\combine@insert@tw@}
+% \begin{macro}{\combine@insert@@ne}
+% \begin{macro}{\twocolumn@grid@setup}
+% \begin{macro}{\onecolumn@grid@setup}
+% \begin{macro}{\columngrid@setup}
+% \changes{4.1p}{2010/02/24}{(AO, 583) Provide setup code also for footnotes in a one-column document}%
+% The following two definitions cover the cases of a two-column document (with footnotes set on a single-column width),
+% and a one-column document.
+% However, the case of a two-column document with footnotes set on full text width is not covered.
+%
+% For a document in an overall two-column page grid, execute the commands
+% \cmd\twocolumn@grid@setup\ followed by \cmd\open@twocolumn;
+% if on the full page width (one-column grid), the command \cmd\onecolumn@grid@setup.
+%
+% The following is the way REVTeX does the initialization.
+% The procedure \cmd\select@column@grid\ is executed at \cmd\AtBeginDocument\ time;
+% the boolean \cmd\twocolumn@sw\ selects between the two alternatives.
+% \begin{verbatim}
+%\def\select@column@grid{%
+% \twocolumn@sw{%
+% \twocolumn@grid@setup
+% \open@twocolumn
+% }{%
+% \onecolumn@grid@setup
+% }%
+%}%
+%\appdef\class@documenthook{%
+% \select@column@grid
+%}%
+% \end{verbatim}
+%
+% \begin{macrocode}
+\def\combine@insert@tw@#1{%
+ \compose@footnotes@two#1\@ifvbox{#1}{\unvbox}{\box}#1%
+}%
+\def\combine@insert@@ne#1{%
+ \compose@footnotes@one#1\@ifvbox{#1}{\unvbox}{\box}#1%
+}%
+\def\twocolumn@grid@setup{%
+ \expandafter\let\csname combine@insert@1\endcsname\combine@insert@tw@
+ \expandafter\let\csname combine@insert@2\endcsname\combine@insert@@ne
+}%
+\def\onecolumn@grid@setup{%
+ \expandafter\let\csname combine@insert@1\endcsname\combine@insert@@ne
+ \expandafter\let\csname combine@insert@2\endcsname\combine@insert@@ne
+}%
+\let\columngrid@setup\onecolumn@grid@setup
+\columngrid@setup
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@floatplacement}
+% In standard \LaTeX, someone (DPC?) makes the assumption that \cmd\@fpmin\ can be assigned
+% locally. This is no longer true now that we ship no more than one page per visit to the output routine.
+% We apply a bandaid.
+% \begin{macrocode}
+\appdef\@floatplacement{%
+ \global\@fpmin\@fpmin
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pagebreak@pen}
+% While we are in the way of registering certain penalty values,
+% let us register the smallest one that will force a visit to the output routine.
+% However, this penalty will not have an assciated macro: we wish to execute the
+% natural output routine instead.
+%
+% Note that this penalty is invoked by \cmd\clearpage\ and \cmd\newpage.
+% \begin{macrocode}
+\mathchardef\pagebreak@pen=\@M
+\expandafter\let\csname output@-\the\pagebreak@pen\endcsname\relax
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Float placement}%
+%
+% \begin{macro}{\do@startcolumn@pen}
+% The procedure \cmd\do@startcolumn@pen\ is executed as a one-off output routine
+% just after a page is shipped out (or, in a multicolumn page grid, a column is salted away).
+%
+% Its job is to either generate a ``float page'' (in reality a column) for shipping out,
+% or to commit deferred floats to the fresh column, concluding with a dead cycle.
+% In the former case, we accomodate split footnotes and other insertions (by comparing \cmd\vsize\ and \cmd\pagegoal):
+% the floats are spewed onto the page, whereupon \LaTeX's output routine will place the footnotes and ship out,
+% iterating the process once again.
+%
+% Note that when this procedure is invoked, \cmd\box\cmd\@cclv\ still has within it the protection box, so we
+% start by removing it. Note also that if there was a split insertion held over from the previous page, the
+% insert node will be present in \cmd\box\cmd\@cclv, \emph{prior to} the protection box. For this reason, we cannot
+% just throw away that box, as we might be tempted to do.
+%
+% FIXME: where else do we possibly inappropriately discard \cmd\box\cmd\@cclv?
+%
+% Note that, because a column or page page had previously just been completed,
+% we can assume that there is nothing of importance on the page,
+% and because no message is being passed, we can preserve marks in a simple way.
+%
+% A Note on terminology:
+% In a single-column page grid, you might expect that we would execute the procedure \cmd\do@startpage.
+% But this is not so.
+% \LaTeX\ has a confustion of long standing,
+% in which the procedures that handle full-page width floats in a two-column page grid all have in their names
+% the string `dbl', which erroneously suggests having something to do with ``double''. It does not:
+% when you see `dbl', think ``full page width''.
+% \changes{4.1b}{2008/08/04}{Change \cs{set@colroom} to \cs{set@colht}}
+% \begin{macrocode}
+\mathchardef\do@startcolumn@pen=10005
+\@namedef{output@-\the\do@startcolumn@pen}{\do@startcolumn}%
+\def\do@startcolumn{%
+ \setbox\@cclv\vbox{\unvbox\@cclv\remove@lastbox\unskip}%
+ \clearpage@sw{\@clearfloatplacement}{\@floatplacement}%
+ \set@colht
+ \@booleanfalse\pfloat@avail@sw
+ \begingroup
+ \@colht\@colroom
+ \@booleanfalse\float@avail@sw
+ \@tryfcolumn\test@colfloat
+ \float@avail@sw{\aftergroup\@booleantrue\aftergroup\pfloat@avail@sw}{}%
+ \endgroup
+ \fcolmade@sw{%
+ \setbox\@cclv\vbox{\unvbox\@outputbox\unvbox\@cclv}%
+% \end{macrocode}
+% Now ask for a return visit, this time with insertions and all.
+% \begin{macrocode}
+ \outputpenalty-\pagebreak@pen
+ \dead@cycle
+ }{%
+ \begingroup
+ \let\@elt\@scolelt
+ \let\reserved@b\@deferlist\global\let\@deferlist\@empty\reserved@b
+ \endgroup
+ \clearpage@sw{%
+ \outputpenalty\@M
+ }{%
+ \outputpenalty\do@newpage@pen
+ }%
+ \dead@cycle
+ }%
+ \check@deferlist@stuck\do@startcolumn
+ \set@vsize
+}%
+\def\@scolelt#1{\def\@currbox{#1}\@addtonextcol}%
+\def\test@colfloat#1{%
+ \csname @floatselect@sw@\thepagegrid\endcsname#1{}{\@testtrue}%
+ \@if@sw\if@test\fi{}{\aftergroup\@booleantrue\aftergroup\float@avail@sw}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@addtonextcol}
+% We must adjust \cmd\@addtonextcol\ to take held-over inserts into account.
+% Now that all deferred floats are queued up together (in order), we must have a way of
+% differentiating them; this is done by the page grid-dependent procedure \cmd\@floatselect@sw@.
+% \begin{macrocode}
+\def\@addtonextcol{%
+ \begingroup
+ \@insertfalse
+ \@setfloattypecounts
+ \csname @floatselect@sw@\thepagegrid\endcsname\@currbox{%
+ \@ifnum{\@fpstype=8 }{}{%
+ \@ifnum{\@fpstype=24 }{}{%
+ \@flsettextmin
+ \@reqcolroom \ht\@currbox
+ \advance \@reqcolroom \@textmin
+ \advance \@reqcolroom \vsize % take into account split insertions
+ \advance \@reqcolroom -\pagegoal
+ \@ifdim{\@colroom>\@reqcolroom}{%
+ \@flsetnum \@colnum
+ \@ifnum{\@colnum>\z@}{%
+ \@bitor\@currtype\@deferlist
+ \@if@sw\if@test\fi{}{%
+ \@addtotoporbot
+ }%
+ }{}%
+ }{}%
+ }%
+ }%
+ }{}%
+ \@if@sw\if@insert\fi{}{%
+ \@cons\@deferlist\@currbox
+ }%
+ \endgroup
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\do@startpage@pen}
+% \begin{macro}{\forcefloats@sw}
+% \begin{macro}{\@output@combined@page}
+% \begin{macro}{\@sdblcolelt}
+% \begin{macro}{\test@dblfloat}
+% \begin{macro}{\@if@notdblfloat}
+% Similar to \cmd\do@startcolumn,
+% the procedure \cmd\do@startpage\ starts up a new page (not column) in a multi-column page grid.
+% It is invoked after a page is shipped out in a multi-column page grid, and
+% it commits full-page-width floats to the fresh page, possibly resulting in a float page.
+% In implementation, it is similar to \cmd\do@startcolumn, except that
+% it commits effectively via \cmd\@addtodblcol\ instead of \cmd\@addtonextcol.
+% Note that this procedure will inevitably be followed by \cmd\do@startcolumn.
+%
+% Some details of the procedure:
+%
+% We begin by removing the protection box from \cmd\box\cmd\@cclv, then setting the values of the
+% float placement parameters appropriately, and resetting \cmd\@colht, \cmd\@colroom, and \cmd\vsize\ to base values.
+%
+% Next we attempt to compose a float page, a page consisting entirely of floats. If successful,
+% we ship out the float page and lay down an interrupt that will send us back here for another try.
+%
+% If no float page is formed, we attempt to commit full-page-width floats to the text page, and return with a dead cycle.
+% We are now ready to compose columns of text.
+%
+% Note that all floats (both column floats and full-page-width floats) move through a single queue.
+% To differentiate between the two, the width of the float is compared to \cmd\textwidth.
+% This comparison is encapsulated in the macro \cmd\@if@notdblfloat, which should be used whenever
+% such a determination must be made. This procedure returns a Boolean.
+%
+% \changes{4.1b}{2008/08/04}{Change \cs{set@colroom} to \cs{set@colht}}
+% \begin{macrocode}
+\mathchardef\do@startpage@pen=10006
+\@namedef{output@-\the\do@startpage@pen}{\do@startpage}%
+\def\do@startpage{%
+ \setbox\@cclv\vbox{\unvbox\@cclv\remove@lastbox\unskip}%
+ \clearpage@sw{\@clearfloatplacement}{\@dblfloatplacement}%
+ \set@colht
+ \@booleanfalse\pfloat@avail@sw
+ \begingroup
+ \@booleanfalse\float@avail@sw
+ \@tryfcolumn\test@dblfloat
+ \float@avail@sw{\aftergroup\@booleantrue\aftergroup\pfloat@avail@sw}{}%
+ \endgroup
+ \fcolmade@sw{%
+ \global\setbox\pagesofar\vbox{\unvbox\pagesofar\unvbox\@outputbox}%
+ \@output@combined@page
+ }{%
+ \begingroup
+ \@booleanfalse\float@avail@sw
+ \let\@elt\@sdblcolelt
+ \let\reserved@b\@deferlist\global\let\@deferlist\@empty\reserved@b
+ \endgroup
+ \@ifdim{\@colht=\textheight}{% No luck...
+ \pfloat@avail@sw{% ...but a float *was* available!
+ \forcefloats@sw{%
+ \ltxgrid@warn{Forced dequeueing of floats stalled}%
+ }{%
+ \ltxgrid@warn{Dequeueing of floats stalled}%
+ }%
+ }{}%
+ }{}%
+ \outputpenalty\@M
+ \dead@cycle
+ }%
+ \check@deferlist@stuck\do@startpage
+ \set@colht
+}%
+% \end{macrocode}
+%
+% Procedure \cmd\@output@combined@page\ is a utility that ships out a page consisting of the
+% result of \cmd\@combinepage\ and \cmd\@combinedblfloats, after which it prepares for
+% the process to repeat.
+%
+% It is coincidentally identical to what needs to happen with
+% a float page that has been built by \cmd\@tryfcolumn, in the multi-column page grid,
+% and also handles the case where a page needs to be shipped out when in multicolumn mode.
+% \changes{4.1b}{2008/08/04}{New procedure \cs{@output@combined@page}}
+% \changes{4.1b}{2008/08/04}{Change \cs{@combinepage} to \cs{@combinepage} with argument}
+% \begin{macrocode}
+\def\@output@combined@page{%
+ \@combinepage\true@sw
+ \@combinedblfloats
+ \@outputpage
+ \global\pagegrid@cur\@ne
+ \protect@penalty\do@startpage@pen
+}%
+\def\@sdblcolelt#1{\def\@currbox{#1}\@addtodblcol}%
+\def\test@dblfloat#1{%
+ \@if@notdblfloat{#1}{\@testtrue}{}%
+ \@if@sw\if@test\fi{}{\aftergroup\@booleantrue\aftergroup\float@avail@sw}%
+}%
+\def\@if@notdblfloat#1{\@ifdim{\wd#1<\textwidth}}%
+\@booleanfalse\forcefloats@sw
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@addtodblcol}
+%
+% The procedure \cmd\@addtodblcol\ is called into play at the beginning of each fresh page
+% and operates on each deferred float, in the hopes of placing one or more such floats
+% at the top of the current page.
+%
+% We alter the procedure of standard \LaTeX\ by putting failed floats into
+% \cmd\@deferlist\ instead of \cmd\@dbldeferlist. Having done so, we must have a means
+% of differentiating full-page-width floats from column-width floats.
+% We assume that the latter will always be narrower than \cmd\textwidth.
+%
+% In aid of detecting a stalled float flushing process, we set a Boolean if we encounter
+% a qualified full-page-width float here. Any that qualify but fail the rest of the tests
+% might still pass when reconsidered on an otherwise blank page.
+% \begin{macrocode}
+\def\@addtodblcol{%
+ \begingroup
+ \@if@notdblfloat{\@currbox}{%
+ \false@sw
+ }{%
+ \@setfloattypecounts
+ \@getfpsbit \tw@
+ \@bitor \@currtype \@deferlist
+ \@if@sw\if@test\fi{%
+ \false@sw
+ }{%
+ \@ifodd\@tempcnta{%
+ \aftergroup\@booleantrue\aftergroup\float@avail@sw
+ \@flsetnum \@dbltopnum
+ \@ifnum{\@dbltopnum>\z@}{%
+ \@ifdim{\@dbltoproom>\ht\@currbox}{%
+ \true@sw
+ }{%
+ \@ifnum{\@fpstype<\sixt@@n}{%
+ \begingroup
+ \advance \@dbltoproom \@textmin
+ \@ifdim{\@dbltoproom>\ht\@currbox}{%
+ \endgroup\true@sw
+ }{%
+ \endgroup\false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }%
+ }%
+ {%
+ \@tempdima -\ht\@currbox
+ \advance\@tempdima
+ -\@ifx{\@dbltoplist\@empty}{\dbltextfloatsep}{\dblfloatsep}%
+ \global \advance \@dbltoproom \@tempdima
+ \global \advance \@colht \@tempdima
+ \global \advance \@dbltopnum \m@ne
+ \@cons \@dbltoplist \@currbox
+ }{%
+ \@cons \@deferlist \@currbox
+ }%
+ \endgroup
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@tryfcolumn}
+% \begin{macro}{\@wtryfc}
+% \begin{macro}{\@xtryfc}
+% \begin{macro}{\@ztryfc}
+% Whenever a page is shipped out, \LaTeX\ automatically tries out a float column:
+% a page containing nothing but floats (and, as we have added here, split footnotes).
+%
+% The following four procedures employ certain macros to communicate between each other:
+%
+% \cmd\fcolmade@sw, a boolean, says whether we were successful in making a float column.
+%
+% \cmd\if@test, a \cmd\newif\ switch, says a float has failed some test.
+%
+% \cmd\@deferlist, is the input to the process, a list, of deferred floats.
+%
+% \cmd\@trylist, a list, stores the deferred floats to be tried out on the float column.
+%
+% \cmd\@failedlist, a list of floats that have failed the selection for the float column.
+%
+% \cmd\@flfail, a list of floats that have failed the second selection for the float column.
+%
+% \cmd\@flsucceed, a list, the floats that have been successfully placed on the float column.
+%
+% \cmd\@freelist, a list, receives any freed floats.
+%
+% \cmd\@colht, a dimen, the available space for the column, including column floats and insertions (footnotes).
+%
+% \cmd\@fpmin, a dimen, the required minimum height for the float column.
+%
+% \cmd\@outputbox, a box, the output of the process.
+%
+% \cmd\@fptop, \cmd\@fpsep, \cmd\@fpbot, glue, placed above, between, and below floats on the float column.
+%
+% \cmd\@currtype, a count, used temporarily for the float's bits.
+%
+% \cmd\@tempcnta, a count, used temporarily for the float's bits.
+%
+% In \cmd\@tryfcolumn, we alter the criterion for a float page, because if footnotes are present at this point
+% (presumably due to a split insertion) then \cmd\@fpmin is no longer the right threshold to apply.
+%
+% Note that we have changed \cmd\@tryfcolumn, \cmd\@xtryfc, and \cmd\@ztryfc\ syntactically so that the procedure
+% to test for the float's being a column float versus a full-page-width float is passed in as an
+% argument.
+%
+% \begin{macrocode}
+\def\@tryfcolumn#1{%
+ \global\@booleanfalse\fcolmade@sw
+ \@ifx@empty\@deferlist{}{%
+ \global\let\@trylist\@deferlist
+ \global\let\@failedlist\@empty
+ \begingroup
+ \dimen@\vsize\advance\dimen@-\pagegoal\@ifdim{\dimen@>\z@}{%
+ \advance\@fpmin-\dimen@
+ }{}%
+ \def\@elt{\@xtryfc#1}\@trylist
+ \endgroup
+ \fcolmade@sw{%
+ \global\setbox\@outputbox\vbox{\vskip \@fptop}%
+ \let \@elt \@wtryfc \@flsucceed
+ \global\setbox\@outputbox\vbox{\unvbox\@outputbox
+ \unskip \vskip \@fpbot
+ }%
+ \let \@elt \relax
+ \xdef\@deferlist{\@failedlist\@flfail}%
+ \xdef\@freelist{\@freelist\@flsucceed}%
+ }{}%
+ }%
+}%
+\def\@wtryfc #1{%
+ \global\setbox\@outputbox\vbox{\unvbox\@outputbox
+ \box #1\vskip\@fpsep
+ }%
+}%
+\def\@xtryfc#1#2{%
+ \@next\reserved@a\@trylist{}{}% trim \@trylist. Ugly!
+ \@currtype \count #2%
+ \divide\@currtype\@xxxii\multiply\@currtype\@xxxii
+ \@bitor \@currtype \@failedlist
+ \@testfp #2%
+ #1#2%
+ \@ifdim{\ht #2>\@colht }{\@testtrue}{}%
+ \@if@sw\if@test\fi{%
+ \@cons\@failedlist #2%
+ }{%
+ \begingroup
+ \gdef\@flsucceed{\@elt #2}%
+ \global\let\@flfail\@empty
+ \@tempdima\ht #2%
+ \def \@elt {\@ztryfc#1}\@trylist
+ \@ifdim{\@tempdima >\@fpmin}{%
+ \global\@booleantrue\fcolmade@sw
+ }{%
+ \@cons\@failedlist #2%
+ }%
+ \endgroup
+ \fcolmade@sw{%
+ \let \@elt \@gobble
+ }{}%
+ }%
+}%
+\def\@ztryfc #1#2{%
+ \@tempcnta \count#2%
+ \divide\@tempcnta\@xxxii\multiply\@tempcnta\@xxxii
+ \@bitor \@tempcnta {\@failedlist \@flfail}%
+ \@testfp #2%
+ #1#2%
+ \@tempdimb\@tempdima
+ \advance\@tempdimb \ht#2\advance\@tempdimb\@fpsep
+ \@ifdim{\@tempdimb >\@colht}{%
+ \@testtrue
+ }{}%
+ \@if@sw\if@test\fi{%
+ \@cons\@flfail #2%
+ }{%
+ \@cons\@flsucceed #2%
+ \@tempdima\@tempdimb
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Clearing pages}%
+%
+% Clearing the page is an elaboration of ending the page: it entails flushing all floats.
+%
+% This package might make number of float flushing algorithms available,
+% a very simple one that does not try to produce excellent pages,
+% another that tries to make the best use of space,
+% and a more complex one that tries to balance columns.
+%
+% At the beginning of the page-clearing process, by definition all of the paragraph text involved is on the MVL and all floats have been encountered.
+% There may be material in \cmd\pagesofar, and (in a multi-column page grid) any number of columns of the page have been composed.
+% Also, there might be footnote material saved up in \cmd\footsofar.
+%
+% Because we did not want to perform multiple \cmd\shipout s per visit to the output routine,
+% our multi-column page makeup will not compose multiple columns per visit.
+% This implementation detail may not require alteration, but it is not a limitation that is truly necessary:
+% it is only multiple \cmd\shipout s per visit that must be avoided.
+%
+% The crux matter is how to continue with flushing floats even after the material in the MVL is exhausted.
+% At that point, we must, upon completion of the output routine,
+% insert into the MVL an interrupt that triggers the next step in the processing.
+%
+% Therefore, after processing a \cmd\do@startcolumn\ interrupt, we must somehow force the completion of that column.
+% This could be done by inserting a \cmd\do@newpage@pen\ interrupt.
+%
+% And after processing a \cmd\do@startpage@pen\ interrupt, that results in \cmd\@dbltopinsert s,
+% we must ensure that the multiple columns on the page get completed, so that the page itself finally gets shipped out.
+% This part will proceed automatically given that \cmd\do@startcolumn\ processing completes successfully.
+%
+% The process will not be complete until all deferred floats have been placed and shipped out, and all saved-up footnotes have been inserted.
+%
+% Full-page-width floats can get out of order of column floats. This problem can be remedied by holding them all in the same list.
+% We therefore stop using \cmd\@dbldeferlist\ entirely, and all of the procedures that formerly used it have been rewritten to
+% use \cmd\@deferlist\ instead. When traversing the list, we apply a selector on the given box that determines whether it is a column-width or page-width float.
+% This selector is different depending on the page grid.
+%
+% When the \cmd\@deferlist\ is processed (by any means), we have to take care of the case where a float of one category is passed over but we are looking for a float of the other category.
+% Here, we must terminate processing, to avoid disordering the floats. This we do by the usual means.
+%
+% The system has a Boolean that says we are clearing pages: \cmd\clearpage@sw; if it is true,
+% then at the tail of \cmd\do@startcolumn\ processing, we should put down a (\cmd\vfil?) \cmd\do@newpage@pen\ interrupt.
+% This is because the MVL is now empty, so we have to force the columns to complete.
+%
+% One potential very pathological case would be where there is one or more deferred floats that never successfully get placed:
+% placing floats has stalled, and we will ship out blank pages indefinitely. How to detect this case?
+%
+% First, \cmd\do@startpage\ will evidently be stalled if the following are all true:
+% a) \cmd\@tryfcolumn\ and \cmd\@sdblcolelt\ both fail,
+% b) there are deferred floats available for page placement, and
+% c) the \cmd\@colht=\cmd\textheight, that is, the full page height is available for placement of column floats.
+%
+% Second, \cmd\do@startcolumn\ will evidently be stalled if the following are all true:
+% a) tryfcolumn fails,
+% b) there are deferred floats available for column placement, and
+% a) the \cmd\@colroom=\cmd\textheight, that is, the full page height is available for placement of column floats.
+%
+%
+% \begin{macro}{\cleardoublepage}
+% \begin{macro}{\clearpage}
+% \begin{macro}{\newpage}
+% \begin{macro}{\newpage@prep}
+% The function of \cmd\clearpage\ is to end the current page with \cmd\newpage\ and then
+% ship out additional pages until (\footins) inserts and (deferred) floats are exhausted.
+%
+% The method involves setting the float placement parameters to completely permissive values
+% and kicking out the current page (using a non-discardable penalty).
+% A possibly short page will be shipped out, followed
+% by any number of float pages. However these float pages, because using permissive float placement,
+% will exhaust all inserts and deferred floats.
+%
+% Bug Note: in the code for \cmd\clearpage, the first penalty we output is an unprotected \cmd\pagebreak@pen.
+% I tried using a protected \cmd\do@newpage@pen, but that gave rise to a corner case where a blank page
+% was output.
+%
+% At present, the \cmd\clearpage\ procedure does the same as \cmd\newpage,
+% except that \cmd\clearpage@sw\ is turned on,
+% and the (discardable) \cmd\newpage\ is inevitably followed by the same procedures
+% that are executed if a page is shipped out.
+%
+% FIXME: it seems that better than \cmd\pagebreak@pen\ would be an unprotected penalty of a special value that would
+% entail output routine processing consisting of the following steps:
+% 3) \cmd\unvbox\cmd\@cclv,
+% 1) set \cmd\clearpage@sw\ to \cmd\true@sw,
+% 2) put down a protected \cmd\do@startcolumn@pen,
+% 4) take a dead cycle.
+%
+% The effect would be to liberalize float placement options for the current column as well as further columns that may be output as part of \cmd\clearpage\ processing.
+% Of course, it would still be necessary to set \cmd\clearpage@sw\ again via an interrupt.
+%
+% An optimization might be to clear \cmd\clearpage@sw\ as part of the same interrupt,
+% but that would actually not work properly, because it is necessary for \cmd\do@endpage\ to
+% possibly invoke further visits to the output routine before clearpage processing ceases.
+% \begin{macrocode}
+\def\newpage@prep{%
+ \if@noskipsec
+ \ifx \@nodocument\relax
+ \leavevmode
+ \global \@noskipsecfalse
+ \fi
+ \fi
+ \if@inlabel
+ \leavevmode
+ \global \@inlabelfalse
+ \fi
+ \if@nobreak \@nobreakfalse \everypar{}\fi
+ \par
+}%
+\def \newpage {%
+ \newpage@prep
+ \do@output@MVL{%
+ \vfil
+ \penalty-\pagebreak@pen
+ }%
+}%
+\def\clearpage{%
+ \newpage@prep
+ \do@output@MVL{%
+ \vfil
+ \penalty-\pagebreak@pen
+ \global\@booleantrue\clearpage@sw
+ \protect@penalty\do@startcolumn@pen
+ \protect@penalty\do@endpage@pen
+ }%
+ \do@output@MVL{%
+ \global\@booleanfalse\clearpage@sw
+ }%
+}%
+\def\cleardoublepage{%
+ \clearpage
+ \@if@sw\if@twoside\fi{%
+ \@ifodd\c@page{}{%
+ \null\clearpage
+ }%
+ }{}%
+}%
+\@booleanfalse\clearpage@sw
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\do@endpage@pen}
+% The penalty \cmd\do@endpage@pen\ simply dispatches to the page grid procedure that forces an end page.
+% That procedure should test whether there is anything to ship out (say committed floats), then act accordingly.
+% Note that as part of this work, it should \cmd\unvbox\cmd\@cclv, which has been left boxed up so it can be
+% measured.
+% \begin{macrocode}
+\mathchardef\do@endpage@pen=10007
+\@namedef{output@-\the\do@endpage@pen}{\csname end@column@\thepagegrid\endcsname}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\do@newpage@pen}
+% The penalty \cmd\do@newpage@pen\ allows a ``non-discardable \cmd\newpage'' command:
+% a \cmd\newpage\ command that will not disappear at a pagebreak.
+% This visit to the output routine will not be dispatched to an interrupt,
+% rather the natural output routine will be executed, where it
+% will remove the protection box.
+%
+% Call this routine by executing \cmd\protect@penalty\cmd\do@newpage@pen.
+% \begin{macrocode}
+\mathchardef\do@newpage@pen=10001
+\expandafter\let\csname output@-\the\do@newpage@pen\endcsname\relax
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@clearfloatplacement}
+% The procedure \cmd\@clearfloatplacement\ sets the float placement parameters
+% to completely permissive values (except for \cmd\@fpmin). The standard values are:
+%
+% \begin{tabular}{ll}
+%\cmd\@topnum &\cmd\c@topnumber\\
+%\cmd\@toproom &\cmd\topfraction\cmd\@colht\\
+%\cmd\@botnum &\cmd\c@bottomnumber\\
+%\cmd\@botroom &\cmd\bottomfraction\cmd\@colht\\
+%\cmd\@colnum &\cmd\c@totalnumber\\
+%\cmd\@fpmin &\cmd\floatpagefraction\cmd\@colht\\
+%\cmd\@dbltopnum &\cmd\c@dbltopnumber\\
+%\cmd\@dbltoproom &\cmd\dbltopfraction\cmd\@colht\\
+%\cmd\@textmin &\cmd\@colht\cmd\advance\cmd\@textmin -\cmd\@dbltoproom\\
+%\cmd\@fpmin &\cmd\dblfloatpagefraction\cmd\textheight
+% \end{tabular}
+% \begin{macrocode}
+\def\@clearfloatplacement{%
+ \global\@topnum \maxdimen
+ \global\@toproom \maxdimen
+ \global\@botnum \maxdimen
+ \global\@botroom \maxdimen
+ \global\@colnum \maxdimen
+ \global\@dbltopnum \maxdimen
+ \global\@dbltoproom \maxdimen
+ \global\@textmin \z@
+ \global\@fpmin \z@
+ \let\@testfp\@gobble
+ \appdef\@setfloattypecounts{\@fpstype16\advance\@fpstype\m@ne}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@doclearpage}
+% \begin{macro}{\@makefcolumn}
+% \begin{macro}{\@makecol}
+% The \cmd\@doclearpage\ procedure is now obsoleted, as is \cmd\@makefcolumn, which it invoked.
+% We also completely avoid using \cmd\@makecol\ (in favor of \cmd\@makecolumn).
+% \begin{macrocode}
+\let\@doclearpage\@undefined
+\let\@makefcolumn\@undefined
+\let\@makecol\@undefined
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\clr@top@firstmark}
+% \begin{macro}{\set@top@firstmark}
+% \begin{macro}{\@outputpage@tail}
+% We want accurate values of \cmd\topmark\ and \cmd\firstmark, but we must deal with
+% the fact that there are many different ways of contributing material
+% to the page. Only upon the first contribution to the page is the value of \cmd\topmark\
+% accurate. However, with \cmd\firstmark\ we must potentially examine each contribution
+% because the first mark on the page may happen to fall in the last piece of material contributed.
+%
+% To begin, we define the procedure that initializes the macros to appropriate flag values.
+% \begin{macrocode}
+\def\clr@top@firstmark{%
+ \global\let\saved@@topmark\@undefined
+ \global\let\saved@@firstmark\@empty
+ \global\let\saved@@botmark\@empty
+}%
+\clr@top@firstmark
+% \end{macrocode}
+%
+% Note that the flag value for \cmd\saved@@topmark\ is \cmd\@undefined, just as one would
+% expect. But that for \cmd\saved@@firstmark\ and \cmd\saved@@botmark\ is \cmd\@empty.
+%
+% Next, we define procedure \cmd\set@top@firstmark; it will be exercised everywhere material is contributed,
+% capturing the mark values if appropriate.
+% \begin{macrocode}
+\def\set@top@firstmark{%
+ \@ifxundefined\saved@@topmark{\expandafter\gdef\expandafter\saved@@topmark\expandafter{\@@topmark}}{}%
+ \@if@empty\saved@@firstmark{\expandafter\gdef\expandafter\saved@@firstmark\expandafter{\@@firstmark}}{}%
+ \@if@empty\@@botmark{}{\expandafter\gdef\expandafter\saved@@botmark\expandafter{\@@botmark}}%
+}%
+% \end{macrocode}
+% When should \cmd\set@top@firstmark\ be called?
+% A good candidate for a universal procedure for handling contributed material is
+% the natural output routine; are any other calls needed?
+%
+% Yes, in \cmd\save@column\ we must execute \cmd\set@top@firstmark\ because we are about to
+% save away \cmd\box\cmd\@cclv, and we will never see its marks again (unless it is unboxed into the MVL),
+% because \TeX\ lets one access a box's marks only within an output routine that has put that box into \cmd\box\cmd\@cclv.
+%
+% As soon as a page is shipped out, we initialize the two macros that
+% hold the values of \cmd\topmark\ and \cmd\firstmark, respectively.
+% \changes{4.1b}{2008/08/04}{Procedure \cs{@outputpage@tail} tailpatches \cs{@outputpage}}%
+% \begin{macrocode}
+\appdef\@outputpage@tail{%
+ \clr@top@firstmark
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Other interfaces to \LaTeX}%
+%
+% \begin{macro}{\@float}
+% \begin{macro}{\@dblfloat}
+% \begin{macro}{\@yfloat}
+% \begin{macro}{\fps@}
+% \begin{macro}{\fpsd@}
+% The \LaTeX\ kernel procedures \cmd\@float\ and \cmd\@dblfloat\ are treated on an equal footing.
+% Each now takes environment-specific float placement defaults.
+% If none are defined for the calling environment, we apply a default.
+%
+% A parameter is passed that will set the width of text within the float, normally \cmd\columnwidth,
+% and in the "dbl" version, \cmd\textwidth. However, an environment such as \env{turnpage}
+% may change the meanings of these macros to allow turnpage floats.
+%
+% \changes{4.0a}{2008/06/26 }{\cs{@yfloat}: de-fang \cs{set@footnotewidth} (see ltxutil.dtx): we have already done its job. }
+%
+% Note on \cmd\@xfloat: the optional argument must come to it fully expanded, because the macro
+% does a weird procedure on this argument, involving \cmd\@onelevel@sanitize, which I do not
+% understand, and which does not work if not so expanded.
+% \changes{4.1b}{2008/08/04}{Get rid of the \cs{reserved@a} idiom}
+% \begin{macrocode}
+\def\@float#1{%
+ \@ifnextchar[{%
+% \end{macrocode}
+% \verb+}]{+Brace-matching klootch
+% \begin{macrocode}
+ \@yfloat\width@float{#1}%
+ }{%
+ \@ifxundefined@cs{fps@#1}{}{\expandafter\let\expandafter\fps@\csname fps@#1\endcsname}%
+ \expandafter\@argswap\expandafter{\expandafter[\fps@]}{\@yfloat\width@float{#1}}%
+ }%
+}%
+\def\@dblfloat#1{%
+ \@ifnum{\pagegrid@col=\@ne}{%
+ \@float{#1}%
+ }{%
+ \@ifnextchar[{%
+% \end{macrocode}
+% \verb+}]{+Brace-matching klootch
+% \begin{macrocode}
+ \@yfloat\widthd@float{#1}%
+ }{%
+ \@ifxundefined@cs{fpsd@#1}{}{\expandafter\let\expandafter\fpsd@\csname fpsd@#1\endcsname}%
+ \expandafter\@argswap\expandafter{\expandafter[\fpsd@]}{\@yfloat\widthd@float{#1}}%
+ }%
+ }%
+}%
+% \end{macrocode}
+% \changes{4.1b}{2008/08/04}{Turn off the \cs{set@footnotewidth} mechanism; a float `knows' its proper typesetting context}
+% \changes{4.1n}{2010/01/02}{(AO, 571) Interface \cs{set@footnotewidth} for determining the set width of footnotes}%
+% \cmd\@yfloat\ is the go-to procdure for creating the proper environment for the content of a float.
+% Argument \verb+#1+ is the width of the float environment (we disable \cmd\set@footnotewidth), and
+% we establish a self-contained (minipage) environment for footnotes.
+% \begin{macrocode}
+\def\@yfloat#1#2[#3]{%
+ \@xfloat{#2}[#3]%
+ \hsize#1\linewidth\hsize
+ \let\set@footnotewidth\@empty
+ \minipagefootnote@init
+}%
+\def\fps@{tbp}%
+\def\fpsd@{tp}%
+\def\width@float{\columnwidth}%
+\def\widthd@float{\textwidth}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\end@float}
+% \begin{macro}{\end@dblfloat}
+% \begin{macro}{\end@@float}
+% \begin{macro}{\check@currbox@count}
+% \begin{macro}{\minipagefootnote@init}
+% \begin{macro}{\minipagefootnote@here}
+% \LaTeX\ kernel procedures \cmd\end@float\ and \cmd\end@dblfloat\
+% have been changed to work alike; in particular, floats of both classes
+% are deferred into the same queue.
+% This measure ensures that they will be placed in their original order,
+% an aspect in which \LaTeX\ is broken.
+%
+% Note: when retrieving floats from the queues, we can differentiate those of the two categories
+% by the width of the box.
+%
+% Floats are processed via an output routine message, and are checked for
+% sanity in re the float placement options. In the case of full-page-width floats,
+% we ensure that the h and b float placement options are never asserted, because they
+% make no sense.
+%
+% Note that if we get to the end of the float box and still have pending
+% footnotes, we put then out.
+%
+% LaTeX Bug note: if a user types \cmd\begin{table*}[h], the float will never succeed in being placed!
+% we try to catch such cases.
+%
+% Note that the macro \cmd\check@currbox@count\ tries to catch cases where the float placement options
+% are such that the float can never be placed.
+%
+% The calls to \cmd\@iffpsbit\ are part of a procedure to deny certain of the float placement
+% parameters: ``h'' and ``b'' are not possible, the former because the \cmd\marginpar\ mechanism
+% cannot place a full-page-width float within a multicolumn page grid, the latter because nobody
+% has yet written the code to do so (pretty bad reason, I know).
+% \changes{4.1b}{2008/08/04}{New procedure \cs{@iffpsbit} replaces \cs{@getfpsbit}}
+% \begin{macrocode}
+\def\end@float{%
+ \end@@float{%
+ \check@currbox@count
+ }%
+}%
+\def\end@dblfloat{%
+ \@ifnum{\pagegrid@col=\@ne}{%
+ \end@float
+ }{%
+ \end@@float{%
+ \@iffpsbit\@ne{\global\advance\count\@currbox\m@ne}{}%
+ \@iffpsbit\f@ur{\global\advance\count\@currbox-4\relax}{}%
+ \global\wd\@currbox\textwidth % Klootch
+ \check@currbox@count
+ }%
+ }%
+}%
+\def\end@@float#1{%
+ \minipagefootnote@here
+ \@endfloatbox
+ #1%
+ \@ifnum{\@floatpenalty <\z@}{%
+ \@largefloatcheck
+ \@cons\@currlist\@currbox
+ \@ifnum{\@floatpenalty <-\@Mii}{%
+ \do@output@cclv{\@add@float}%
+ }{%
+ \vadjust{\do@output@cclv{\@add@float}}%
+ \@Esphack
+ }%
+ }{}%
+}%
+% \end{macrocode}
+% The \classname{float} package of Anselm Lingnau fails when used under \classname{ltxgrid}, but
+% we can fix things.
+% We also repair a bug in that package.
+%
+% \changes{4.1g}{2009/10/06}{(AO, 531) Fix package \classname{float} }
+% \begin{macrocode}
+\newcommand\float@end@float{%
+ \@endfloatbox
+ \global\setbox\@currbox\float@makebox\columnwidth
+ \let\@endfloatbox\relax
+ \end@float
+}%
+\newcommand\float@end@ltx{%
+ \end@@float{%
+ \global\setbox\@currbox\float@makebox\columnwidth
+ \check@currbox@count
+ }%
+}%
+\newcommand\newfloat@float[3]{%
+ \@namedef{ext@#1}{#3} %!
+ \let\float@do=\relax
+ \xdef\@tempa{\noexpand\float@exts{\the\float@exts \float@do{#3}}}%
+ \@tempa
+ \floatplacement{#1}{#2}%
+ \@ifundefined{fname@#1}{\floatname{#1}{#1}}{} %!
+ \expandafter\edef\csname ftype@#1\endcsname{\value{float@type}}%
+ \addtocounter{float@type}{\value{float@type}} %!
+ \restylefloat{#1}%
+ \expandafter\edef\csname fnum@#1\endcsname{%
+ \expandafter\noexpand\csname fname@#1\endcsname{} %!
+ \expandafter\noexpand\csname the#1\endcsname
+ }
+ \@ifnextchar[%]
+ {%
+ \float@newx{#1}%
+ }{%
+ \@ifundefined{c@#1}{\newcounter{#1}\@namedef{the#1}{\arabic{#1}}}{}%
+ }%
+}%
+\newcommand\newfloat@ltx[3]{%
+ \@namedef{ext@#1}{#3}%
+ \let\float@do=\relax
+ \xdef\@tempa{\noexpand\float@exts{\the\float@exts \float@do{#3}}}%
+ \@tempa
+ \floatplacement{#1}{#2}%
+ \@ifundefined{fname@#1}{\floatname{#1}{#1}}{}%
+ \expandafter\edef\csname ftype@#1\expandafter\endcsname\expandafter{\the\c@float@type}%
+ \addtocounter{float@type}{\value{float@type}}%
+ \restylefloat{#1}%
+ \expandafter\edef\csname fnum@#1\endcsname{%
+ \expandafter\noexpand\csname fname@#1\endcsname{}%
+ \expandafter\noexpand\csname the#1\endcsname
+ }
+ \@ifnextchar[%]
+ {%
+ \float@newx{#1}%
+ }{%
+ \@ifundefined{c@#1}{\newcounter{#1}\@namedef{the#1}{\arabic{#1}}}{}%
+ }%
+}%
+\appdef\document@inithook{%
+ \@ifxundefined\newfloat{}{%
+ \@ifx{\float@end\float@end@float}{%
+ \@ifx{\newfloat\newfloat@float}{\true@sw}{\false@sw}%
+ }{\false@sw}%
+ {%
+ \class@warn{Repair the float package}%
+ \let\float@end\float@end@ltx
+ \let\newfloat\newfloat@ltx
+ }{%
+ \class@warn{Failed to patch the float package}%
+ }%
+ }%
+}%
+% \end{macrocode}
+%
+% Boolean procedure \cmd\@iffpsbit\ is similar to the \cmd\@getfpsbit\ of \LaTeX, except
+% that we do not expose the scratch count register or even change its value.
+% \begin{macrocode}
+\def\@iffpsbit#1{%
+ \begingroup
+ \@tempcnta\count\@currbox
+ \divide\@tempcnta#1\relax
+ \@ifodd\@tempcnta{\aftergroup\true@sw}{\aftergroup\false@sw}%
+ \endgroup
+}%
+% \end{macrocode}
+%
+% In procedure \cmd\check@currbox@count, we calculate the net float placement
+% directive (encoded into \cmd\count\ \cmd\@currbox's least significant four bits).
+% If zero, issue a warning.
+% \changes{4.1b}{2008/08/04}{Tally the height of the float}
+% \begin{macrocode}
+\def\check@currbox@count{%
+ \@ifnum{\count\@currbox>\z@}{%
+ \count@\count\@currbox\divide\count@\sixt@@n\multiply\count@\sixt@@n
+ \@tempcnta\count\@currbox\advance\@tempcnta-\count@
+ \@ifnum{\@tempcnta=\z@}{%
+ \ltxgrid@warn{Float cannot be placed}%
+ }{}%
+ \expandafter\tally@float\expandafter{\@captype}%
+ }{%
+% \end{macrocode}
+% In this case, the float is a \cmd\marginpar.
+% \begin{macrocode}
+ }%
+}%
+\providecommand\minipagefootnote@init{}%
+\providecommand\minipagefootnote@here{}%
+\providecommand\tally@float[1]{}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@specialoutput}
+% The \cmd\@add@float\ procedure used to reside in standard \LaTeX's \cmd\@specialoutput,
+% which is no more.
+%
+% Historical Note: \cmd\@specialoutput\ and Lamport's method of an output routine dispatcher
+% is the genesis of our more powerful and refined way of using \TeX's output routine to
+% safely accomplish page makeup tasks. To it and to him we owe acknowledgement and thanks.
+% \begin{macrocode}
+\let\@specialoutput\@undefined
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@add@float}
+% In the following, we do not need to execute \cmd\@reinserts, which was wrong anyway, as you cannot
+% reliably recover insertions when they split (unless you have a way of reinserting the captured insertion
+% ahead of the split-off part).
+%
+% Now that full-page-width floats are being processed the same as column floats, we
+% have to nip in here and cause them always to be deferred.
+%
+% At the very end, the \cmd\vsize\ is adjusted for any newly committed float.
+% \begin{macrocode}
+\def\@add@float{%
+ \@pageht\ht\@cclv\@pagedp\dp\@cclv
+ \unvbox\@cclv
+ \@next\@currbox\@currlist{%
+ \csname @floatselect@sw@\thepagegrid\endcsname\@currbox{%
+ \@ifnum{\count\@currbox>\z@}{%
+ \advance \@pageht \@pagedp
+% \end{macrocode}
+% Do not assume \cmd\holdinginserts is cleared:
+% \begin{macrocode}
+ \advance \@pageht \vsize \advance \@pageht -\pagegoal
+% \end{macrocode}
+% Commit an `h' float:
+% \begin{macrocode}
+ \@addtocurcol
+ }{%
+ \@addmarginpar
+ }%
+ }{%
+ \@resethfps
+ \@cons\@deferlist\@currbox
+ }%
+ }{\@latexbug}%
+ \@ifnum{\outputpenalty<\z@}{%
+ \@if@sw\if@nobreak\fi{%
+ \nobreak
+ }{%
+ \addpenalty \interlinepenalty
+ }%
+ }{}%
+ \set@vsize
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@reinserts}
+% The \cmd\@reinserts\ procedure of standard \LaTeX\ is now obsoleted (it had been erroneous anyway).
+% \begin{macrocode}
+\let\@reinserts\@undefined
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@addtocurcol}
+% We modify the \cmd\@addtocurcol\ procedure of standard \LaTeX\
+% so that a float placed ``here'' may break over pages.
+% \begin{macrocode}
+\def \@addtocurcol {%
+ \@insertfalse
+ \@setfloattypecounts
+ \ifnum \@fpstype=8
+ \else
+ \ifnum \@fpstype=24
+ \else
+ \@flsettextmin
+ \advance \@textmin \@textfloatsheight
+ \@reqcolroom \@pageht
+ \ifdim \@textmin>\@reqcolroom
+ \@reqcolroom \@textmin
+ \fi
+ \advance \@reqcolroom \ht\@currbox
+ \ifdim \@colroom>\@reqcolroom
+ \@flsetnum \@colnum
+ \ifnum \@colnum>\z@
+ \@bitor\@currtype\@deferlist
+ \if@test
+ \else
+ \@bitor\@currtype\@botlist
+ \if@test
+ \@addtobot
+ \else
+ \ifodd \count\@currbox
+ \advance \@reqcolroom \intextsep
+ \ifdim \@colroom>\@reqcolroom
+ \global \advance \@colnum \m@ne
+ \global \advance \@textfloatsheight \ht\@currbox
+ \global \advance \@textfloatsheight 2\intextsep
+ \@cons \@midlist \@currbox
+ \if@nobreak
+ \nobreak
+ \@nobreakfalse
+ \everypar{}%
+ \else
+ \addpenalty \interlinepenalty
+ \fi
+ \vskip \intextsep
+ \unvbox\@currbox %AO
+ \penalty\interlinepenalty
+ \vskip\intextsep
+ \ifnum\outputpenalty <-\@Mii \vskip -\parskip\fi
+ \outputpenalty \z@
+ \@inserttrue
+ \fi
+ \fi
+ \if@insert
+ \else
+ \@addtotoporbot
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \if@insert
+ \else
+ \@resethfps
+ \@cons\@deferlist\@currbox
+ \fi
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\if@twocolumn}
+% The \cmd\newif\ switch \cmd\if@twocolumn\ is entirely unused. However its access words are invoked by
+% \LaTeX's \cmd\document\ procedure, so we de-fang it.
+% \begin{macrocode}
+\@twocolumnfalse
+\let\@twocolumntrue\@twocolumnfalse
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@addmarginpar}
+% The procedure \cmd\@addmarginpar\ used to access \cmd\if@twocolumn, but that switch is not reliable;
+% the better way is to use \cmd\thepagegrid. We establish a convention for a page-grid-oriented
+% procedure, e.g., \cmd\@addmarginpar@one, that emits a boolean, telling this procedure
+% whether to set the marginpar on the left or right.
+% \begin{macrocode}
+\def\@addmarginpar{%
+ \@next\@marbox\@currlist{%
+ \@cons\@freelist\@marbox\@cons\@freelist\@currbox
+ }\@latexbug
+ \setbox\@marbox\hb@xt@\columnwidth{%
+ \csname @addmarginpar@\thepagegrid\endcsname{%
+ \hskip-\marginparsep\hskip-\marginparwidth
+ \box\@currbox
+ }{%
+ \hskip\columnwidth\hskip\marginparsep
+ \box\@marbox
+ }%
+ \hss
+ }%
+ \setbox\z@\box\@currbox
+ \@tempdima\@mparbottom
+ \advance\@tempdima -\@pageht
+ \advance\@tempdima\ht\@marbox
+ \@ifdim{\@tempdima >\z@}{%
+ \@latex@warning@no@line {Marginpar on page \thepage\space moved}%
+ }{%
+ \@tempdima\z@
+ }%
+ \global\@mparbottom\@pageht
+ \global\advance\@mparbottom\@tempdima
+ \global\advance\@mparbottom\dp\@marbox
+ \global\advance\@mparbottom\marginparpush
+ \advance\@tempdima -\ht\@marbox
+ \global\setbox \@marbox
+ \vbox {\vskip \@tempdima
+ \box \@marbox}%
+ \global \ht\@marbox \z@
+ \global \dp\@marbox \z@
+ \kern -\@pagedp
+ \nointerlineskip
+ \box\@marbox
+ \nointerlineskip
+ \hbox{\vrule \@height\z@ \@width\z@ \@depth\@pagedp}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{turnpage}
+% Any float (viz., \env{figure} or \env{table}) within the scope of this environment
+% will be a turnpage float: It will be assumed to occupy an entire page (constitute a float page),
+% the width will be \cmd\textheight, the height \cmd\textwidth, and the entire float will be presented
+% rotated 90 degrees.
+%
+% The implementation requires the services of the \cmd\rotatebox\ command, so we supply a dummy definition
+% that explains things to the user.
+% \begin{macrocode}
+\newenvironment{turnpage}{%
+ \def\width@float{\textheight}%
+ \def\widthd@float{\textheight}%
+ \appdef\@endfloatbox{%
+ \@ifxundefined\@currbox{%
+ \ltxgrid@warn{Cannot rotate! Not a float}%
+ }{%
+ \setbox\@currbox\vbox to\textwidth{\vfil\unvbox\@currbox\vfil}%
+ \global\setbox\@currbox\vbox{\rotatebox{90}{\box\@currbox}}%
+ }%
+ }%
+}{%
+}%
+\def\rotatebox@dummy#1#2{%
+ \ltxgrid@warn{You must load the graphics or graphicx package in order to use the turnpage environment}%
+ #2%
+}%
+% \end{macrocode}
+% \changes{4.1b}{2008/08/04}{Use \cs{document@inithook} instead of \cs{AtBeginDocument}}
+% \begin{macrocode}
+\appdef\document@inithook{%
+ \@ifxundefined\rotatebox{\let\rotatebox\rotatebox@dummy}{}%
+}%
+% \end{macrocode}
+% \end{environment}
+%
+%
+% \subsection{One-off output routines}
+%
+% These procedures are executed in lieu of \cmd\the\cmd\output\ when the output penalty has the associated flag value.
+%
+% \begin{macro}{output@-1073741824}
+% The first one-off output routine handles the end of the job, wherein
+% \LaTeX\ executes \cmd\@@end, and breaks to the output with a penalty of
+% $"40000000 = 2^{32}/4 = 1073741824$.
+% We simply discard \cmd\box\cmd\@cclv\ and leave.
+% This means that \LaTeX\ is obligated to do \cmd\clearpage\ as part of
+% its \enve{document} processing, otherwise material will be lost.
+% \begin{macrocode}
+\@namedef{output@-1073741824}{%
+ \deadcycles\z@
+% \end{macrocode}
+% \begin{verbatim}
+%\showbox\@cclv
+% \end{verbatim}
+% \begin{macrocode}
+ \void@cclv
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\save@column@pen}
+% The one-off output routine associated with \cmd\penalty\cmd\save@column@pen\
+% will be called within a sequence of three such routines by \cmd\execute@message
+% or its companion routine \cmd\execute@message@insert.
+% This procedure must save away any the current page and preserve marks.
+% \begin{macrocode}
+\mathchardef\save@column@pen=10016
+\@namedef{output@-\the\save@column@pen}{\save@column}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@cclv@saved}
+% We take over the \cmd\@holdpg\ box register. Hereafter,
+% we no longer use the \cmd\@holdpg\ box register, so let the world know.
+% This should decisively break packages that assume standard \LaTeX.
+% Breaking decisively is preferred to quietly proceeding erroneously.
+% \begin{macrocode}
+\let \@cclv@saved \@holdpg
+\let \@holdpg \@undefined
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\save@column}
+% The procedure \cmd\save@column\ does the actual work of saving away the material
+% on the page. It is invoked both by \cmd\save@column@pen\ and by \cmd\save@column@insert@pen.
+% We save \cmd\box\cmd\@cclv\ and the primitive \cmd\@@topmark.
+% \begin{macrocode}
+\def\save@column{%
+ \@ifvoid\@cclv@saved{%
+ \set@top@firstmark
+ \global\@topmark@saved\expandafter{\@@topmark}%
+ }{}%
+ \global\setbox\@cclv@saved\vbox{%
+ \@ifvoid\@cclv@saved{}{%
+ \unvbox\@cclv@saved
+ \marry@baselines
+ }%
+ \unvbox\@cclv
+ \lose@breaks
+ \remove@lastbox
+ }%
+}%
+\newtoks\@topmark@saved
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\prep@cclv}
+% The procedure \cmd\prep@cclv\ is used by message handlers to set up their environment
+% to ape that of the usual output routine, with the boxed-up page in \cmd\box\cmd\@cclv.
+% Here, we retrieve the material from \cmd\@cclv@saved, where it was saved away by
+% the one-off output routine associated with \cmd\save@column@pen.
+% \begin{macrocode}
+\def\prep@cclv{%
+ \void@cclv
+ \setbox\@cclv\box\@cclv@saved
+ \vbadness\@M
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\save@column@insert@pen}
+% The one-off output routine associated with \cmd\penalty\cmd\save@column@insert@pen\
+% is similar to that of \cmd\save@column@pen\ augmented with the processing of insertions.
+% It is called by \cmd\execute@message@insert\ (i.e., at a grid change)
+% and saves away the current page and preserves marks.
+% In addition, it saves away any insertions that fall on the current page.
+% As with the natural output routine, it executes in two phases,
+% first with \cmd\holdinginserts\ set, then cleared.
+% \begin{macrocode}
+\mathchardef\save@column@insert@pen=10017
+\@namedef{output@-\the\save@column@insert@pen}{\toggle@insert{\savecolumn@holding}{\savecolumn@moving}}%
+% \end{macrocode}
+% The procedure \cmd\savecolumn@holding\ is the first phase of saving a column with its inserts.
+% This phase must detect and remedy the one circumstance that will confound our efforts to propagate marks.
+% It is similar to \cmd\output@holding, except that we have to deal with the protection box, which must
+% remain, because the messaging mechanism is being used.
+%
+% If it appears that we have the pathological ``Big Bad Box'' case at hand, we use the \cmd\dead@cycle@repair@protected\
+% procedure instead of \cmd\dead@cycle\ to do our dead cycle.
+% \changes{4.1b}{2008/08/04}{Use \cs{trace@box} instead of \cs{showbox}}
+% \begin{macrocode}
+\def\savecolumn@holding{%
+ \@if@exceed@pagegoal{\unvcopy\@cclv\remove@lastbox}{%
+ \setbox\z@\vbox{\unvcopy\@cclv\remove@lastbox}%
+ \outputdebug@sw{\trace@box\z@}{}%
+ \dimen@\ht\@cclv\advance\dimen@-\ht\z@
+ \dead@cycle@repair@protected\dimen@
+ }{%
+ \dead@cycle
+ }%
+}%
+% \end{macrocode}
+% \changes{4.1b}{2008/08/04}{New procedure for showing a box contents, \cs{trace@box}}
+% \changes{4.1n}{2009/12/02}{More diagnostics of column balancing}
+% The procedure \cmd\save@column@moving\ is the second phase of saving a column with its inserts.
+% Now that \cmd\holdinginserts\ is cleared, we can look in the various \cmd\insert\ registers for
+% our inserts (at present there is only one, \cmd\footins, along with \cmd\footins@saved).
+% if anything is there, we save it away and ask for another cycle (because it may have split).
+%
+% Note that the message that is about to be executed had better deal properly with the contents of
+% the \cmd\footins@saved\ box.
+%
+% \begin{macrocode}
+\def\savecolumn@moving{%
+ \ltxgrid@info@sw{\class@info{\string\savecolumn@moving}}{}%
+ \@cclv@nontrivial@sw{%
+ \save@column
+ }{%
+ \void@cclv
+ }%
+ \@ifvoid\footins{}{%
+ \ltxgrid@foot@info@sw{\class@info{\string\savecolumn@moving}\trace@scroll{\showbox\footins@saved\showbox\footins}}{}%
+% \end{macrocode}
+% Save all away in \cmd\footins@saved. Note that if \cmd\footins\ is void, then \cmd\footins@saved\ remains untouched.
+% \begin{macrocode}
+ \@ifvoid\footins@saved{%
+ \global\setbox\footins@saved\box\footins
+ }{%
+ \global\setbox\footins@saved\vbox\bgroup
+ \unvbox\footins@saved
+ \marry@baselines
+ \unvbox\footins
+ \egroup
+ }%
+ \ltxgrid@foot@info@sw{\trace@box\footins@saved}{}%
+ \protect@penalty\save@column@insert@pen
+ }%
+}%
+\newbox\footins@saved
+\newbox\footins@recovered
+\newbox\column@recovered
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\save@message@pen}
+% The one-off output routine associated with \cmd\penalty\cmd\save@message@pen\
+% saves away the message that has been passed.
+% This procedure is penultimate in a sequence of one-off output routine calls;
+% earlier ones have saved away the MVL and preserved marks, the last executes the message.
+%
+% Note that we are passing tokens to \TeX's primitive \cmd\mark\ mechanism, so we must ensure
+% that they are not inappropriately expanded. We use the same mechanism for all such cases,
+% namely \cmd\let@mark.
+%
+% Note: we expect that \cmd\box\cmd\@cclv's contents are well known:
+% \cmd\topskip, protection box, and a \cmd\mark, the latter containing the message.
+% But if we came here via \cmd\penalty 10017, there might be an \cmd\insert\ node present as well,
+% because a footnote may have split.
+% Because this procedure simply voids out \cmd\box\cmd\@cclv, such material would be lost.
+% Perhaps we can repair things by manipulating the \cmd\insert \ mechanism temporarily.
+% \begin{macrocode}
+\mathchardef\save@message@pen=10018
+\@namedef{output@-\the\save@message@pen}{\save@message}%
+\def\save@message{%
+ \void@cclv
+% \end{macrocode}
+%FIXME: what if \cmd\box\cmd\@cclv is not empty?
+% \begin{macrocode}
+ \toks@\expandafter{\@@firstmark}%
+ \expandafter\gdef\expandafter\@message@saved\expandafter{\the\toks@}%
+ \expandafter\do@@mark\expandafter{\the\@topmark@saved}%
+}%
+\gdef\@message@saved{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\execute@message@pen}
+% The one-off output routine associated with \cmd\execute@message@pen\
+% simply executes the given message. It is last in a sequence of one-off output routine calls;
+% earlier ones have saved all that require saving.
+% \begin{macrocode}
+\mathchardef\execute@message@pen=10019
+\@namedef{output@-\the\execute@message@pen}{\@message@saved}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Output messages}
+%
+% Message handlers are procedures that execute output messages, tokens that are passed to
+% the output routine for execution in an environment appropriate to page makeup.
+%
+% How it works. We put down three large negative penalties, each of which will be handled by
+% the output dispatcher (\emph{not} the natural output routine), each penalty being protected by
+% a removable, non-discardable item (i.e., a box).
+% Either three or four invocations of one-off output routines are involved per message.
+%
+% We make the last of the three protection boxes have a depth equal to the value of \cmd\prevdepth\
+% that was current when the procedure is called. This effectively restores \cmd\prevdepth.
+%
+% In each case, the one-off output routine will remove the extraneous box we have inserted.
+% And the second and third one-off routines will simply void \cmd\box\cmd\@cclv, because its contents
+% are entirely artificial.
+%
+% FIXME: not so! If \cmd\holdinginserts\ is cleared, that box may have an insert node; it must be preserved, too.
+%
+% The first routine saves away the current column contents and remembers the \cmd\topmark\ for later
+% use. There is a variant routine that first clears \cmd\holdinginserts, so that the message can
+% handle any inserts present in the boxed-up page; this of course entails yet another
+% visit to the output routine.
+%
+% The penultimate routine saves away the tokens transmitted in via the \cmd\@@mark: the argument of
+% the macro. These tokens are of course the very thing we wish to execute within the safety
+% of the output routine. It also puts down a mark containing the \cmd\topmark\ tokens saved
+% by the first routine. By this means, the mark, which we have clobbered, is restored.
+%
+% The last routine simply executes the given tokens.
+% In the course of doing this, it must take care of \cmd\box\cmd\@cclv, either by shipping it out,
+% or by \cmd\unvbox ing it onto the MVL.
+%
+% \begin{macro}{\execute@message}
+% The procedure \cmd\execute@message\ simply calls the utility procedure \cmd\@execute@message\
+% with a penalty value for the standard treatment.
+% \begin{macrocode}
+\def\execute@message{%
+ \@execute@message\save@column@pen
+% \end{macrocode}
+% Implicit second argument
+% \begin{macrocode}
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\execute@message@insert}
+% The procedure \cmd\execute@message@insert\ is like \cmd\execute@message\ in all respects
+% except that the penalty value is \cmd\save@column@insert@pen, which arranges for the
+% message handler involved to deal with the page's insertions.
+% At the same time, we prepare the \cmd\footins\ box so that these insertions can be dealt with.
+%
+% Note:
+% If more insertions are added to \LaTeX\ (presumably via \cmd\newinsert), then they
+% must be dealt with in a way entirely analogous to \cmd\footins.
+% \changes{4.1n}{2009/12/02}{More diagnostics of column balancing}
+% \begin{macrocode}
+\def\execute@message@insert#1{%
+ \@execute@message\save@column@insert@pen{%
+ \setbox \footins \box \footins@saved
+ \ltxgrid@foot@info@sw{\class@info{\string\execute@message@insert}\trace@box\footins}{}%
+ #1%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@execute@message}
+% The utility procedure \cmd\@execute@message\ is called by \cmd\execute@message\ and \cmd\execute@message@insert.
+% We prepare by creating a \cmd\vbox\ containing all the needed nodes and proceed by simply
+% \cmd\unvbox ing that box onto the MVL.
+% We ensure that \cmd\box\cmd\@cclv\ is properly set up for the output message handler
+% by always inserting \cmd\prep@cclv\ in advance of the argument.
+%
+% Note that each one-off output routine is invoked effectively the same as
+% \cmd\protect@penalty, except that the second invocation involves an additional
+% \cmd\mark\ node, and the third a specially prepared protection box.
+%
+% Note also that \TeX's primitive \cmd\mark\ is called here without any expansion protection.
+% This is the only place where it is called that way, but it's OK because those tokens
+% have have been pre-expanded by procedures that call \cmd\execute@message.
+% FIXME: all procedures calling \cmd\execute@message\ must pre-expand their tokens!
+% \begin{macrocode}
+\long\def\@execute@message#1#2{%
+ \begingroup
+ \dimen@\prevdepth\@ifdim{\dimen@<\z@}{\dimen@\z@}{}%
+ \setbox\z@\vbox{%
+ \protect@penalty#1%
+ \protection@box
+ \toks@{\prep@cclv#2}%
+ \@@mark{\the\toks@}%
+ \penalty-\save@message@pen
+% \end{macrocode}
+%\begin{verbatim}
+% \hbox{\vrule\@height\z@\@width\z@\@depth\dimen@}%
+%\end{verbatim}
+% \begin{macrocode}
+ \setbox\z@\null\dp\z@\dimen@\ht\z@-\dimen@
+ \nointerlineskip\box\z@
+ \penalty-\execute@message@pen
+ }\unvbox\z@
+ \endgroup
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\do@output@cclv}
+% The procedure \cmd\do@output@cclv\ provides access to message handlers at their simplest.
+% The message will execute in the usual environment of the output routine, with
+% the boxed-up page in \cmd\box\cmd\@cclv, and we assume that \cmd\holdinginserts\ remains set.
+% This procedure must be invoked within main vertical mode;
+% it is the obligation of the macro writer to ensure that this is the case.
+% \begin{macrocode}
+\def\do@output@cclv{\execute@message}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\do@output@MVL}
+% The procedure \cmd\do@output@MVL, like \cmd\do@output@cclv, is an interface for messages,
+% but provides two additional services: the command may also be invoked in horizontal mode, and
+% the message handler will execute with the MVL unboxed.
+% \begin{macrocode}
+\def\do@output@MVL#1{%
+ \@ifvmode{%
+ \begingroup\execute@message{\unvbox\@cclv#1}\endgroup
+ }{%
+ \@ifhmode{%
+ \vadjust{\execute@message{\unvbox\@cclv#1}}%
+ }{%
+ \@latexerr{\string\do@output@MVL\space cannot be executed in this mode!}\@eha
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\lose@breaks}
+% The purpose of this procedure is to get rid of all the extraneous
+% \cmd\penalty\cmd\@M\ nodes that tend to build up in the MVL.
+% \begin{macrocode}
+\def\lose@breaks{%
+ \loopwhile{%
+ \count@\lastpenalty
+ \@ifnum{\count@=\@M}{%
+% \end{macrocode}
+% Note: 10000 is a TeX magic number!
+% \begin{macrocode}
+ \unpenalty\true@sw
+ }{%
+ \false@sw
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\removestuff}
+% \cmd\removestuff\ is a document-level command that removes the bottom skip glue item
+% from the MVL.
+% \begin{macrocode}
+\def\removestuff{\do@output@MVL{\unskip\unpenalty}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\removephantombox}
+% The procedure \cmd\removephantombox\ is a special-purpose message handler exclusively for
+% preventing incorrect spacing above display math. It must be issued in
+% horizontal mode within the phantom paragraph generated when display math starts up in
+% vertical mode.
+% \begin{macrocode}
+\def\removephantombox{%
+ \vadjust{%
+ \execute@message{%
+ \unvbox\@cclv
+ \remove@lastbox
+ \unskip
+ \unskip
+ \unpenalty
+ \penalty\predisplaypenalty
+ \vskip\abovedisplayskip
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\addstuff}
+% \cmd\addstuff\ is a document-level command that adds penalty, glue, or both to the
+% MVL. The penalty and glue items are rearranged so that all penalties nodes precede all the glue nodes,
+% which is the canonical arrangement.
+% \begin{macrocode}
+\def\addstuff#1#2{\edef\@tempa{\noexpand\do@output@MVL{\noexpand\@addstuff{#1}{#2}}}\@tempa}%
+\def\@addstuff#1#2{%
+ \skip@\lastskip\unskip
+ \count@\lastpenalty\unpenalty
+ \@if@empty{#1}{}{\penalty#1\relax}%
+ \@ifnum{\count@=\z@}{}{\penalty\count@}%
+ \vskip\skip@
+ \@if@empty{#2}{}{\vskip#2\relax}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\replacestuff}
+% \cmd\replacestuff\ is a document-level command similar to \cmd\addstuff;
+% but it replaces penalty, glue, or both in the MVL.
+% The penalty and glue items are rearranged so that all penalties nodes precede all the glue nodes,
+% which is the canonical arrangement.
+% \begin{macrocode}
+\def\replacestuff#1#2{\edef\@tempa{\noexpand\do@output@MVL{\noexpand\@replacestuff{#1}{#2}}}\@tempa}%
+\def\@replacestuff#1#2{%
+ \skip@\lastskip\unskip
+ \count@\lastpenalty\unpenalty
+ \@if@empty{#1}{}{%
+ \@ifnum{\count@>\@M}{}{%
+ \@ifnum{\count@=\z@}{\count@=#1\relax}{%
+ \@ifnum{\count@<#1\relax}{}{%
+ \count@=#1\relax
+ }%
+ }%
+ }%
+ }%
+ \@ifnum{\count@=\z@}{}{\penalty\count@}%
+ \@if@empty{#2}{}{%
+ \@tempskipa#2\relax
+ \@ifdim{\z@>\@tempskipa}{%
+ \advance\skip@-\@tempskipa
+ }{%
+ \@ifdim{\skip@>\@tempskipa}{}{%
+ \skip@\@tempskipa
+ }%
+ }%
+ }%
+ \vskip\skip@
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\move@insertions}
+% \begin{macro}{\hold@insertions}
+% In order to avoid bolluxing up \cmd\insert\ registers by our one-off
+% output routines, we set \cmd\holdinginserts\ to zero by default and only
+% clear it (briefly) while we handle cases where we want inserts to show up.
+% \begin{macrocode}
+\def\move@insertions{\global\holdinginserts\z@}%
+\def\hold@insertions{\global\holdinginserts\@ne}%
+\hold@insertions
+\def\toggle@insert#1#2{%
+ \@ifnum{\holdinginserts>\z@}{\move@insertions#1}{\hold@insertions#2}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Messages to alter the page grid}%
+%
+% Here is the implementation of the grid-switching procedures.
+% We perform two checks when changing the page grid; first to ensure that
+% the target page grid is known (defensive programming), second to ensure that
+% the switch is a non-trivial one. The latter check must be performed within
+% the safety of the output routine, so requires using an output message.
+% Thus, a grid change requires two messages, for a total of six visits to the output routine.
+%
+% \begin{macro}{\do@columngrid}
+% Utility procedure \cmd\do@columngrid\ changes the page grid.
+% Note that this command forces an end to the current paragraph. This is necessary, because
+% a page grid change makes no sense unless we can alter the \cmd\hsize\ before commencing to
+% typeset the following paragraph. So the command should never be executed in horizontal mode
+% anyway.
+% \begin{macrocode}
+\def\do@columngrid#1#2{%
+ \par
+ \expandafter\let\expandafter\@tempa\csname open@column@#1\endcsname
+ \@ifx{\relax\@tempa}{%
+ \ltxgrid@warn{Unknown page grid #1. No action taken}%
+ }{%
+ \do@output@MVL{\start@column{#1}{#2}}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\start@column}
+% Procedure \cmd\start@column\ lays down the interrupts to switch the page grid.
+% If the change to the page grid would have been trivial, it bails out.
+% It seems a reasonable tradeoff of processing versus security: once we commit
+% to changing the page grid, we clear \cmd\holdinginserts, so there is no turning back.
+%
+% Note that the second argument to the macro allows us to pass an argument to the
+% page grid that is starting up. This can be handy, because a single procedure can
+% handle multiple page grids, differing only by the value of a parameter.
+%
+% FIXME: this means that you cannot switch between mlt page grids in a single step.
+% But do we want to do this, at all, at all?
+% \begin{macrocode}
+\def\start@column#1#2{%
+ \def\@tempa{#1}\@ifx{\@tempa\thepagegrid}{%
+ \ltxgrid@info{Already in page grid \thepagegrid. No action taken}%
+ }{%
+ \expandafter\execute@message@insert
+ \expandafter{%
+ \csname shut@column@\thepagegrid\expandafter\endcsname
+ \csname open@column@#1\endcsname{#2}%
+ \set@vsize
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\thepagegrid}
+% The macro \cmd\thepagegrid\ tracks what kind of page grid we are in.
+%
+% Note: Access \cmd\thepagegrid\ only within the safety of the output routine.
+%
+% Warning: The page grid should be changed only within the safety of the output routine.
+% People who write multicol page grid mechanisms appear not to understand the matter, so they
+% should particularly heed this warning. Think about it: obviously Lamport did so, which is why
+% his \cmd\twocolumn\ command forced a pagebreak, which is limiting, but safe.
+% \begin{macrocode}
+\def\thepagegrid{one}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Application Note: implementing a page grid}
+%
+% If you want to create a new page grid for \LaTeX,
+% you must define five procedures with specific names:
+% \cmd\open@column@ name, \cmd\shut@column@ name, \cmd\end@column@ name,
+% \cmd\output@column@ name, and \cmd\@addmarginpar@ name, where ``name'' is the
+% name of your page grid.
+%
+% The procedure \cmd\open@column@ name starts the new page grid. It should define \cmd\thepagegrid,
+% deal with \cmd\box\cmd\pagesofar\ and \cmd\box\cmd\footsofar\ (perhaps by leaving them alone),
+% and it should set the values of \LaTeX's page layout parameters for the column size and height.
+%
+% The procedure \cmd\shut@column@ name should expect to be called with \cmd\holdinginserts\
+% cleared (it can assume that \cmd\holdinginserts\ will automatically be restored).
+% It should properly deal with insertions (like footnotes); calling \cmd\@makecolumn\
+% with an argument of \cmd\false@sw\ will do this.
+% It should know that the page grid is being terminated
+% in the middle of a page, so it should make arrangements to carry the footnotes down to the
+% bottom of the column or page, and it should possibly salt away the material for later
+% incorporation into the page. The box registers \cmd\footsofar\ and \cmd\pagesofar\ are customarily used
+% for this purpose.
+%
+% The procedure \cmd\end@column@ name should kick out a possibly short page containing all the
+% floats committed to the page. It will be invoked during \cmd\clearpage\ processing.
+% After that, it should \cmd\unvbox\cmd\@cclv.
+%
+% The procedure \cmd\output@column@ name should ship out or commit the current \cmd\@outputbox.
+% In a one-column layout, you ship out; in a multicolumn layout, you commit the box as the contents
+% of a particular column, and if that column is the last, you ship out.
+%
+% The procedure \cmd\@addmarginpar@ name should return a boolean (either \cmd\true@sw\ or \cmd\false@sw\ or an equivalent)
+% to tell the marginpar mechanism to place the marginal material to the right or left, respectively.
+%
+% You can use the existing page grids ``one'' and ``mlt'' as a point of departure for creating others.
+% The former can be the basis for, say, a single-column page grid with a side column.
+%
+% \begin{macro}{\pagesofar}
+% \begin{macro}{\footsofar}
+% The box register \cmd\pagesofar\ holds the portion of the (full-width) page that is already composed into columns.
+% This, plus the finished columns, each with its floats, plus \cmd\box255 constitute the full galley.
+%
+% The box register \cmd\footsofar\ holds all of the footnotes associated with \cmd\pagesofar.
+% \begin{macrocode}
+\newbox\pagesofar
+\newbox\footsofar
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\combine@foot@inserts}
+% \changes{4.1n}{2010/01/02}{(AO, 571) calling sequence of \cs{combine@foot@inserts} and \cs{grid@column} to expose box registers; that of \cs{append@column@} its column counters}%
+% \changes{4.1n}{2010/01/02}{(AO, 571) coding convention: use \cs{bgroup}, \cs{egroup} (instead of braces) when a box is being built}%
+% The procedure \cmd\combine@foot@inserts\ is for the purpose of merging
+% the recently contributed footnotes (usually \cmd\box\cmd\footins)
+% with those saved from earlier on the page (usually \cmd\box\cmd\footsofar).
+%
+% It is employed in a number of circumstances.
+%
+% \cmd\@makecolumn (when its argument is \cmd\false@sw):
+% we are not shipping out, so we need to salt away any footnotes there may be.
+%
+% \cmd\shut@column@one: we are leaving the one-column page grid, so recover the footnotes from that material
+% and combine them with those of \cmd\pagesofar.
+%
+% \expandafter\cmd\csname balance@2\endcsname: two columns of type have been balanced, so now balance the footnotes.
+% The \cmd\combine@foot@inserts\ procedure is first used to gather footnotes from the columns balanced with those of \cmd\pagesofar.
+%
+% Bug 571 note: if balancing a two-column page grid, and there had been footnotes in the \cmd\pagesofar,
+% those footnotes will have been balanced into a page-width box, \cmd\box\cmd\footsofar.
+% We need to now re-cast them into a single, column-width galley, and only then
+% combine them with those in \cmd\box\cmd\footins.
+%
+% \begin{macrocode}
+\def\combine@foot@inserts#1#2{%
+ \ltxgrid@info@sw{\class@info{\string\combine@foot@inserts\string#1\string#2}}{}%
+ \@ifvoid#1{%
+ \ltxgrid@foot@info@sw{\trace@box#2}{}\global\setbox#1\box#2%
+ }{%
+ \global\setbox#1\vbox\bgroup
+ \ltxgrid@foot@info@sw{\trace@box#1}{}\unvbox#1%
+ \@ifvoid#2{}{%
+ \marry@baselines
+ \ltxgrid@foot@info@sw{\trace@box#2}{}\unvbox#2%
+ }%
+ \egroup
+ }%
+ \ltxgrid@foot@info@sw{\trace@scroll{\showbox#1\showbox#2}}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection{One-column page grid}
+%
+% \begin{macro}{\onecolumngrid}
+% \begin{macro}{\open@column@one}
+% \begin{macro}{\shut@column@one}
+% \begin{macro}{\float@column@one}
+% \begin{macro}{\end@column@one}
+% \begin{macro}{\output@column@one}
+% \begin{macro}{\@addmarginpar@one}
+% Here are all the procedures necessary for the standard page grid named ``one'':
+% a single column layout. It is, of course, \LaTeX's familiar \cmd\onecolumn\ layout.
+% We begin with the procedure exposed to the style writer.
+% This is, however, not a \LaTeX\ command; users should not change the page grid.
+% \begin{macrocode}
+\newcommand\onecolumngrid{\do@columngrid{one}{\@ne}}%
+% \end{macrocode}
+%
+% Note that a document class that issues the command \cmd\onecolumn\ will break. This includes
+% \LaTeX's standard classes.dtx-based classes: if your class descends from one of these, you
+% must expunge it of all such commands.
+% \begin{macrocode}
+\let\onecolumn\@undefined
+% \end{macrocode}
+%
+% The procedure \cmd\open@column@one\ takes advantage of the special nature of the one-column
+% page grid to deal with \cmd\box\cmd\pagesofar, therefore it must also reset \cmd\@colroom.
+% \changes{4.1b}{2008/08/04}{Change \cs{set@colroom} to \cs{set@colht}}
+% \changes{4.1n}{2009/12/02}{More diagnostics of column balancing}
+% \begin{macrocode}
+\def\open@column@one#1{%
+ \ltxgrid@info@sw{\class@info{\string\open@column@one\string#1}}{}%
+% \end{macrocode}
+% Throw the \cmd\pagesofar\ back onto the Main Vertical List.
+% At this point, we must also \cmd\insert\ the footnotes back into the MVL.
+% \changes{4.1n}{2010/01/02}{(AO, 571) coding convention: use \cs{bgroup}, \cs{egroup} (instead of braces) when a box is being built}%
+% \begin{macrocode}
+ \unvbox\pagesofar
+ \@ifvoid{\footsofar}{}{%
+ \insert\footins\bgroup\unvbox\footsofar\egroup
+ \penalty\z@
+ }%
+% \end{macrocode}
+% Record which page grid we are using. Then calculate the set width (\cmd\hsize) and the goal height (\cmd\vsize).
+%
+% Klootch: we set the \cmd\count\cmd\footins\ to a magic number. This is only correct in the case of a two-column document.
+% \begin{macrocode}
+ \gdef\thepagegrid{one}%
+ \global\pagegrid@col#1%
+ \global\pagegrid@cur\@ne
+ \global\count\footins\@m
+ \global\divide\count\footins\tw@
+ \set@column@hsize\pagegrid@col
+ \set@colht
+}%
+% \end{macrocode}
+%
+% The procedure \cmd\shut@column@one\ saves away the one-column material into the box register \cmd\pagesofar.
+% Because it is called from a message handler, we are assured that marks are properly taken care of.
+%
+% This instance of \cmd\@makecolumn\ is building a column for saving into \cmd\pagesofar.
+% \changes{4.1b}{2008/08/04}{Change \cs{@makecol} to \cs{@makecolumn} with argument}
+% \changes{4.1b}{2008/08/04}{Change \cs{set@colroom} to \cs{set@colht}}
+% \changes{4.1f}{2009/07/15}{(AO, 519) Preserve footnotes that are in \cs{footsofar} across a page grid change}
+% \changes{4.1n}{2009/12/02}{More diagnostics of column balancing}
+% \changes{4.1n}{2010/01/02}{(AO, 571) calling sequence of \cs{combine@foot@inserts} and \cs{grid@column} to expose box registers; that of \cs{append@column@} its column counters}%
+% We recover the footnotes into \cmd\footsofar\ (globally) and the column into \cmd\pagesofar\ (also globally), voiding \cmd\@outputbox\ by side effect.
+% \begin{macrocode}
+\def\shut@column@one{%
+ \ltxgrid@info@sw{\class@info{\string\shut@column@one}}{}%
+ \@makecolumn\false@sw
+% \end{macrocode}
+% Split text portion of \cmd\@outputbox\ into \cmd\pagesofar,
+% and add its footnote portion to \cmd\footsofar.
+% Then void out \cmd\@outputbox.
+% \begin{macrocode}
+ \global\setbox\pagesofar\vbox\bgroup
+ \recover@column\@outputbox\footsofar\column@recovered\footins@recovered
+ \egroup
+ \begingroup\setbox\z@\box\@outputbox\endgroup
+% \end{macrocode}
+% FIXME: is \cmd\combine@foot@inserts\ needed?
+% Also: if this procedure is immediately followed by \cmd\open@column@ \texttt{grid}, then \cmd\set@colht\ will be unneeded.
+% \begin{macrocode}
+ \combine@foot@inserts\footsofar\footins
+ \set@colht
+}%
+% \end{macrocode}
+%
+%FIXME: the first line of a footnote should have an up-strut, and the last line a down-strut, so that they can marry baselines.
+% The latter is the case; how about the former?
+%
+% The procedure \cmd\float@column@one\ takes care of a float column that has been built by
+% \cmd\@tryfcolumn, in the single-column page grid.
+%
+% This instance of \cmd\@makecolumn\ is followed by \cmd\@outputpage: it is building
+% a column for \cmd\shipout, rather than for saving into \cmd\pagesofar.
+% \changes{4.1b}{2008/08/04}{Change \cs{@makecol} to \cs{@makecolumn} with argument}
+% \begin{macrocode}
+\def\float@column@one{%
+ \@makecolumn\true@sw
+ \@outputpage
+}%
+% \end{macrocode}
+%
+% The procedure \cmd\end@column@one\ is executed at the end of \cmd\clearpage\ processing,
+% if we were in a one-column page grid, once all permissive float pages have been shipped out.
+% At this point, one could perhaps
+% assume that nothing more need be done, but let us anyway test for committed floats and force a shipout.
+%
+% FIXME: this procedure does the same as \cmd\end@column@mlt
+% (except for the test of \cmd\@ifx@empty\cmd\@dbltoplist):
+% the two could almost be the same procedure.
+%
+% I have changed this procedure to avoid the testing it once did: it simply puts down interrupts,
+% upon which it relies to correctly do what \cmd\clearpage\ requires.
+% \begin{macrocode}
+\def\end@column@one{%
+ \unvbox\@cclv\remove@lastbox
+ \protect@penalty\do@newpage@pen
+}%
+% \end{macrocode}
+%
+% The procedure \cmd\output@column@one\ is dispatched from the output routine when
+% we have completed a page (that is, a column in a one-column page grid);
+% it ships out the page using the \cmd\@outputpage.
+% It will be followed up with an output routine message to prepare a new column.
+%
+% Query: by what mechanism do the footnotes get placed onto such a page?
+% \begin{macrocode}
+\def\output@column@one{%
+ \@outputpage
+}%
+% \end{macrocode}
+%
+% The following procedure determines which side of the page a marginpar will appear.
+% It reproduces the behavior of standard \LaTeX.
+% \begin{macrocode}
+\def\@addmarginpar@one{%
+ \@if@sw\if@mparswitch\fi{%
+ \@ifodd\c@page{\false@sw}{\true@sw}%
+ }{\false@sw}{%
+ \@if@sw\if@reversemargin\fi{\false@sw}{\true@sw}%
+ }{%
+ \@if@sw\if@reversemargin\fi{\true@sw}{\false@sw}%
+ }%
+}%
+% \end{macrocode}
+%
+% The following procedure yields a Boolean value; it determines whether a float in the deferred queue
+% is appropriate for placing. In the one-column grid, all floats are so.
+% \begin{macrocode}
+\def\@floatselect@sw@one#1{\true@sw}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\onecolumngrid@push{%
+ \do@output@MVL{%
+ \@ifnum{\pagegrid@col=\@ne}{%
+ \global\let\restorecolumngrid\@empty
+ }{%
+ \xdef\restorecolumngrid{%
+ \noexpand\start@column{\thepagegrid}{\the\pagegrid@col}%
+ }%
+ \start@column{one}{\@ne}%
+ }%
+ }%
+}%
+\def\onecolumngrid@pop{%
+ \do@output@MVL{\restorecolumngrid}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{Two-column page grid}
+%
+% \begin{macro}{\twocolumngrid}
+% \begin{macro}{\open@column@mlt}
+% \begin{macro}{\shut@column@mlt}
+% \begin{macro}{\end@column@mlt}
+% \begin{macro}{\output@column@mlt}
+% \begin{macro}{\@addmarginpar@mlt}
+% \begin{macro}{\set@footnotewidth@mlt}
+% \begin{macro}{\set@footnotewidth@two}
+% \begin{macro}{\compose@footnotes@two}
+% Here are all the procedures necessary for the standard page grid named ``mlt'':
+% the multi-column page grid. With an argument of "2", it is,
+% of course, \LaTeX's familiar \cmd\twocolumn\ layout.
+%
+% We start with the procedure to switch to the two-column page grid.
+% \begin{macrocode}
+\newcommand\twocolumngrid{\do@columngrid{mlt}{\tw@}}%
+% \end{macrocode}
+%
+% The corresponding command of \LaTeX\ is obsolete.
+% \begin{macrocode}
+\let\twocolumn\@undefined
+% \end{macrocode}
+%
+% Of course, \cmd\@topnewpage\ is also obsolete. Just do
+%\begin{quote}
+% \cmd\clearpage\cmd\onecolumngrid<vertical mode material>\cmd\twocolumngrid.
+%\end{quote}
+% \begin{macrocode}
+\let\@topnewpage\@undefined
+% \end{macrocode}
+%
+% If your document class descends from one of \LaTeX's standard classes.dtx-derived
+% classes, it will break. You must expunge from it all such commands.
+%
+% \changes{4.1b}{2008/08/04}{Change \cs{set@colroom} to \cs{set@colht}}
+%
+% Bug 571 note: it is not enough to have the \cmd\pagesofar, we must also deal with the \cmd\footsofar.
+% At this juncture, we should treat the case where the document has an essentially two-column page grid,
+% with occasional excursions into the one-column grid.
+% If a footnote is set within the latter grid, its set width should be that of the two-column grid.
+%
+% When a page is shipped out, if we are currently in a one-column grid, we will compose the footnotes onto the page
+% in the form of balanced columns. This is only one way to handle footnotes: \classname{multicol}
+% appears to set footnotes on the full text width.
+% \begin{macrocode}
+\def\open@column@mlt#1{%
+ \ltxgrid@info@sw{\class@info{\string\open@column@mlt\string#1}}{}%
+% \end{macrocode}
+% At this point, we must \cmd\insert\ the footnotes back into the Main Vertical List.
+% \changes{4.1n}{2010/01/02}{(AO, 571) coding convention: use \cs{bgroup}, \cs{egroup} (instead of braces) when a box is being built}%
+% \begin{macrocode}
+ \@ifvoid{\footsofar}{}{%
+ \insert\footins\bgroup\unvbox\footsofar\egroup
+ }%
+% \end{macrocode}
+% Record which page grid we are using. Then calculate the set width (\cmd\hsize) and the goal height (\cmd\vsize).
+%
+% Klootch: we set the \cmd\count\cmd\footins\ to a magic number. This value is valid whether footnotes are being
+% set on the column width or the full text width.
+% \begin{macrocode}
+ \gdef\thepagegrid{mlt}%
+ \global\pagegrid@col#1%
+ \global\pagegrid@cur\@ne
+ \global\count\footins\@m
+ \set@column@hsize\pagegrid@col
+ \set@colht
+}%
+% \end{macrocode}
+%
+% The procedure \cmd\shut@column@mlt\ ends the current column, balances the columns, and
+% salts away all in \cmd\pagesofar. Because it is called in a message handler,
+% we are assured that marks are handled properly.
+% Attention: because this procedure balances columns, all footnotes are
+% held aside in \cmd\footsofar\ for placement at the bottom of the page.
+%
+% Bug note: the last macro executed by this procedure is \cmd\set@colht,
+% but had been erroneously \cmd\set@colroom.
+% I now believe that the latter should be changed pretty much everywhere to the former.
+%
+% This instance of \cmd\@makecolumn\ is building material for \cmd\pagesofar, rather than
+% for \cmd\shipout.
+% \changes{4.1b}{2008/08/04}{Change \cs{@makecol} to \cs{@makecolumn} with argument}
+% \changes{4.1b}{2008/08/04}{Change \cs{@combinepage} to \cs{@combinepage} with argument}
+% \changes{4.1b}{2008/08/04}{Change \cs{set@colroom} to \cs{set@colht}}
+% \changes{4.1n}{2009/12/02}{More diagnostics of column balancing}
+% \changes{4.1n}{2010/01/02}{(AO, 571) calling sequence of \cs{combine@foot@inserts} and \cs{grid@column} to expose box registers; that of \cs{append@column@} its column counters}%
+% \begin{macrocode}
+\def\shut@column@mlt{%
+ \ltxgrid@info@sw{\class@info{\string\shut@column@mlt}}{}%
+ \@cclv@nontrivial@sw{%
+ \@makecolumn\false@sw
+ \@ifnum{\pagegrid@cur<\pagegrid@col}{%
+ \expandafter\global\expandafter\setbox\csname col@\the\pagegrid@cur\endcsname\box\@outputbox
+ \global\advance\pagegrid@cur\@ne
+ }{}%
+ }{%
+ \void@cclv
+ }%
+ \@ifnum{\pagegrid@cur>\@ne}{%
+ \csname balance@\the\pagegrid@col\endcsname
+ \grid@column\@outputbox{}%
+ \@combinepage\false@sw
+ \@combinedblfloats
+ \global\setbox\pagesofar\box\@outputbox
+ \show@pagesofar@size
+ }{}%
+ \set@colht
+}%
+% \end{macrocode}
+%
+% The procedure \cmd\float@column@mlt\ takes care of a float page that has been built by \cmd\@tryfcolumn,
+% in the multi-column page grid. It is coincidentally identical to what happens in
+% \cmd\do@startpage\ when a page needs to be shipped out.
+% \changes{4.1b}{2008/08/04}{New procedure \cs{@output@combined@page}}
+% \begin{macrocode}
+\def\float@column@mlt{%
+ \@output@combined@page
+}%
+% \end{macrocode}
+%
+% The procedure \cmd\end@column@mlt\ is executed at the end of \cmd\clearpage\ processing,
+% if we were in a multi-column page grid, once all permissive float pages have been shipped out.
+% If no floats are committed and if no columns are yet filled, we have nothing to do.
+% Otherwise, we kick out a column and try again.
+%
+% Note that in our code to kick out a column, we must deal properly with the case where the column
+% is trivial: it will have nothing but \cmd\topskip\ glue plus a protection box. We substitute an ordinary
+% \cmd\null\ for the protection box.
+%
+% \begin{macrocode}
+\def\end@column@mlt{%
+ \@ifx@empty\@toplist{%
+ \@ifx@empty\@botlist{%
+ \@ifx@empty\@dbltoplist{%
+ \@ifx@empty\@deferlist{%
+ \@ifnum{\pagegrid@cur=\@ne}{%
+ \false@sw
+ }{%
+ \true@sw
+ }%
+ }{%
+ \true@sw
+ }%
+ }{%
+ \true@sw
+ }%
+ }{%
+ \true@sw
+ }%
+ }{%
+ \true@sw
+ }%
+ % true = kick out a column and try again
+ {%
+ \@cclv@nontrivial@sw{%
+ \unvbox\@cclv\remove@lastbox
+ }{%
+ \unvbox\@cclv\remove@lastbox\unskip\null
+ }%
+ \protect@penalty\do@newpage@pen
+ \protect@penalty\do@endpage@pen
+ }{%
+ \unvbox\@cclv\remove@lastbox
+ }%
+}%
+% \end{macrocode}
+%
+% The procedure \cmd\output@column@mlt (cf. \cmd\output@column@one)
+% is dispatched from the output routine when
+% we have completed a column in a multi-column page grid).
+% (It replaces the \cmd\@outputdblcol\ of standard \LaTeX.)
+% If a complete set of columns is at hand, it ships out the page and
+% lays down an interrupt for \cmd\do@startpage@pen, which will commit the
+% full-page-width floats to the next page.
+% Like \cmd\output@column@mlt, this is followed by
+% an output routine message to prepare a new column.
+%
+% If a page needs to be shipped out, it uses the same mechanism as \cmd\do@startpage.
+% \changes{4.1b}{2008/08/04}{New procedure \cs{@output@combined@page}}
+% \changes{4.1n}{2010/01/02}{(AO, 571) calling sequence of \cs{combine@foot@inserts} and \cs{grid@column} to expose box registers; that of \cs{append@column@} its column counters}%
+% \begin{macrocode}
+\def\output@column@mlt{%
+ \@ifnum{\pagegrid@cur<\pagegrid@col}{%
+ \expandafter\global\expandafter\setbox\csname col@\the\pagegrid@cur\endcsname\box\@outputbox
+ \global\advance\pagegrid@cur\@ne
+ }{%
+ \set@adj@colht\dimen@
+ \grid@column\@outputbox{}%
+ \@output@combined@page
+ }%
+}%
+% \end{macrocode}
+% The procedure \cmd\output@column@mlt\ obsoletes \LaTeX's \cmd\@outputdblcol
+% \begin{macrocode}
+\let\@outputdblcol\@undefined
+% \end{macrocode}
+%
+% The following procedure yields a Boolean value; it determines whether a float in the deferred queue
+% is appropriate for placement in the column. In the multi-column grid, only those narrower than \cmd\textwidth\ are so.
+% \begin{macrocode}
+\def\@floatselect@sw@mlt#1{\@if@notdblfloat{#1}}%
+% \end{macrocode}
+%
+% The following procedure determines which side of the page a marginpar will appear.
+% It reproduces the behavior of standard \LaTeX.
+% \begin{macrocode}
+\def\@addmarginpar@mlt{% emits a boolean
+ \@ifnum{\pagegrid@cur=\@ne}%
+}%
+% \end{macrocode}
+%
+% \cmd\set@footnotewidth@one\ sets the width of type within footnotes to span the full text width;
+% \cmd\set@footnotewidth@two\ to span a single column of the two-column grid, and
+% more generally \cmd\set@footnotewidth@mlt\ for a multi-column page grid.
+% \begin{macrocode}
+\def\set@footnotewidth@one{%
+ \hsize\columnwidth
+ \linewidth\hsize
+}%
+\def\set@footnotewidth@two{\set@footnotewidth@mlt\tw@}%
+\def\set@footnotewidth@mlt#1{%
+ \hsize\textwidth
+ \advance\hsize\columnsep
+ \divide\hsize#1%
+ \advance\hsize-\columnsep
+ \linewidth\hsize
+}%
+% \end{macrocode}
+%
+% \cmd\compose@footnotes\ is the procedure for arranging the footnotes for
+% placement at the bottom of the page or column.
+% In the former case, the material will be shipped out; in the latter, we must allow
+% the column to possibly be balanced later on.
+%
+% \cmd\compose@footnotes@one\ is a no-op, because the footnotes require no rearrangement.
+% In a scheme where footnotes are set on the full text width, this would be the procedure called.
+%
+% \cmd\compose@footnotes@two\ implements the case where a two-column document has been interrupted
+% with full-page-width text (e.g., the widetext environment or the end of the document),
+% and a natural page break appears.
+%
+% In either case, we assume that argument \verb+#1+ is an \cmd\insert\ register and must be assigned globally,
+% so that when it is accessed with \cmd\box\ or \cmd\unvbox, it will be voided globally as well.
+%
+% To extend this scheme to a three-column page grid \cmd\compose@footnotes@thr@@\ would be created:
+% it would balance the saved up footnotes into three columns.
+%
+% \begin{macrocode}
+\def\compose@footnotes@one#1{%
+ \ltxgrid@foot@info@sw{\class@info{\string\compose@footnotes@one\string#1}\trace@box#1}{}%
+}%
+\let\compose@footnotes\compose@footnotes@one
+\def\compose@footnotes@two#1{%
+ \ltxgrid@foot@info@sw{\class@info{\string\compose@footnotes@two\string#1}\trace@box#1}{}%
+ \setbox\z@\box\@tempboxa
+ \let\recover@column\recover@column@null
+ \let\marry@baselines\@empty
+ \balance@two#1\@tempboxa
+ \global\setbox#1\hbox to\textwidth{\box#1\hfil\box\@tempboxa}%
+ \ltxgrid@foot@info@sw{\trace@box#1}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{Page grid utility procedures}
+%
+% \begin{macro}{\pagegrid@cur}
+% \begin{macro}{\pagegrid@col}
+% \begin{macro}{\pagegrid@init}
+% We take over \LaTeX's \cmd\col@number, and \cmd\@leftcolumn, which are obsolete (\cmd\@holdpg\ could also be taken over).
+% We create two counters to hold the columns in the page grid and the current column within.
+% We also create the first of a set of box registers to hold the committted columns.
+% \begin{macrocode}
+\let\pagegrid@cur\col@number
+\let\col@number\@undefined
+\newcount\pagegrid@col
+\pagegrid@cur\@ne
+\expandafter\let\csname col@\the\pagegrid@cur\endcsname\@leftcolumn
+\let\@leftcolumn\@undefined
+% \end{macrocode}
+%
+% The default is for maximum two columns.
+% If your class will require more columns, assign that number to \cmd\pagegrid@col\
+% before \envb{document} time.
+% \begin{macrocode}
+\pagegrid@col\tw@
+% \end{macrocode}
+%
+% The procedure \cmd\pagegrid@init\ is a loop, exercising \cmd\newbox\ sufficiently to create the
+% boxes for holding the columns in the page grid; these have names like \expandafter\cmd\csname col@1\endcsname, etc.
+% \begin{macrocode}
+\def\pagegrid@init{%
+ \advance\pagegrid@cur\@ne
+ \@ifnum{\pagegrid@cur<\pagegrid@col}{%
+ \csname newbox\expandafter\endcsname\csname col@\the\pagegrid@cur\endcsname
+ \pagegrid@init
+ }{%
+ }%
+}%
+\appdef\class@documenthook{%
+ \pagegrid@init
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\grid@column}
+% \changes{4.1n}{2010/01/02}{(AO, 571) calling sequence of \cs{combine@foot@inserts} and \cs{grid@column} to expose box registers; that of \cs{append@column@} its column counters}%
+% The procedure \cmd\grid@column\ knows how to lay up the columns in a multi-column page grid.
+% It uses utility procedures \cmd\append@column@\ and \cmd\box@column.
+%
+% The first argument is the box register to create, usually \cmd\@outputbox, and provides both input and output.
+% The second argument a dimension, allowing us to strut down the depth of the box we create.
+%
+% \begin{macrocode}
+\def\grid@column#1#2{%
+ \ltxgrid@info@sw{\class@info{\string\grid@column\string#1}}{}%
+ \global\setbox#1\vbox\bgroup
+ \hb@xt@\textwidth\bgroup
+ \vrule\@height\z@\@width\z@\@if@empty{#2}{}{\@depth#2}%
+ \pagegrid@cur\@ne
+ \@ifnum{\pagegrid@cur<\pagegrid@col}{\loopwhile{\append@column@\pagegrid@cur\pagegrid@col}}{}%
+ \box@column#1%
+ \egroup
+% \end{macrocode}
+% FIXME: page depth!
+% \begin{macrocode}
+ \vskip\z@skip
+ \egroup
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\append@column@}
+% \begin{macro}{\box@column}
+% \begin{macro}{\marry@baselines}
+% The procedure \cmd\append@column@\ appends columns for \cmd\grid@column,
+% \cmd\box@column\ builds the columns for \cmd\append@column@,
+% and \cmd\marry@baselines\ pastes vertical things back together.
+% \changes{4.0a}{2001/06/18}{Introduce \cs{marry@height} }
+%
+% Note that \cmd\box@column\ makes an attempt to prevent excessive \cmd\topskip\
+% or \cmd\baselineskip\ glue
+% from being applied by \TeX\ when \cmd\@outputbox\ is contributed to the MVL.
+% If this is not done, it is possible to get into an infinite loop in the corner case,
+% wherein the page grid is changed to one column and the balanced-up columns are
+% already sufficient to fill the page.
+%
+% Note (AO 0920): I have changed the dimension involved with \cmd\box@column\ from
+% \cmd\vsize\ to \cmd\textheight, because the former is certainly not the correct value
+% to use: it will change if floats have been placed in the last column of the page.
+% I believe \cmd\textheight\ is the correct parameter to use here.
+%
+% A REVTeX4 user, Sergey Strelkov (strelkov@maik.rssi.ru), wants the option
+% of ragged-bottom columns. Implementing this feature properly means reboxing the
+% columns to their natural height only if \cmd\raggedcolumn@sw\ is true.
+% Otherwise, they get reboxed to their common height (\cmd\@colht?).
+%
+% Note that the default has hereby changed from ragged to flush.
+% It's not clear that anyone but Sergey will notice.
+%
+% The macro \cmd\marry@skip\ addresses (in a limited way)
+% the fact that neither the value of \cmd\baselineskip\ nor that of \cmd\topskip\
+% can be relied upon for the purpose of marrying the baselines of two split columns.
+% (Because there might have been a local change to their values at the point where
+% the output routine got triggered.)
+%
+% For best results, your document class should call for grid changes only when in basal text
+% settings. The \cmd\marry@baselines\ procedure will use the values appropriate to that point
+% when attempting to put the columns back together.
+%
+% In any case, we are not attempting to solve the more general problem of how to marry baselines
+% where the leading can change arbitrarily within the galley or where glue could have been trimmed
+% at a page top.
+%
+% \changes{4.1n}{2010/01/02}{(AO, 571) calling sequence of \cs{combine@foot@inserts} and \cs{grid@column} to expose box registers; that of \cs{append@column@} its column counters}%
+% Procedure \cmd\append@column@\ composes a column onto the horizontal list along with its \cmd\columnseprule.
+% Its arguments are: \verb+#1+---\cmd\pagegrid@cur, and \verb+#2+---\cmd\pagegrid@col
+% \begin{macrocode}
+\def\append@column@#1#2{%
+ \expandafter\box@column\csname col@\the#1\endcsname
+ \hfil\vrule\@width\columnseprule\hfil
+ \advance#1\@ne
+% \end{macrocode}
+% This procedure is the argument of \cmd\loopwhile, so it must leave a Boolean (e.g., \cmd\true@sw) in \TeX's scanner.
+% \begin{macrocode}
+ \@ifnum{#1<#2}%
+}%
+% \end{macrocode}
+% \changes{4.1n}{2010/01/02}{(AO, 571) calling sequence of \cs{combine@foot@inserts} and \cs{grid@column} to expose box registers; that of \cs{append@column@} its column counters}%
+% \changes{4.1n}{2009/12/02}{More diagnostics of column balancing}
+% \changes{4.1n}{2010/01/02}{(AO, 571) coding convention: use \cs{bgroup}, \cs{egroup} (instead of braces) when a box is being built}%
+% Procdure \cmd\box@column, used by \cmd\append@column@, puts down a box containing the specified column.
+% Its height is adjusted down to \cmd\@colht, if needed; likewise, the width is set to \cmd\columnwidth.
+% The rag at the bottom is controlled by \cmd\raggedcolumn@skip.
+% \begin{macrocode}
+\def\box@column#1{%
+ \ltxgrid@info@sw{\class@info{\string\box@column\string#1}}{}%
+ \raise\topskip
+ \hb@xt@\columnwidth\bgroup
+ \dimen@\ht#1\@ifdim{\dimen@>\@colht}{\dimen@\@colht}{}%
+ \count@\vbadness\vbadness\@M
+ \dimen@ii\vfuzz\vfuzz\maxdimen
+ \ltxgrid@info@sw{\saythe\@colht\saythe\dimen@}{}%
+ \vtop to\dimen@\bgroup
+ \hrule\@height\z@
+ \unvbox#1%
+ \raggedcolumn@skip
+ \egroup
+ \vfuzz\dimen@ii
+ \vbadness\count@
+ \hss
+ \egroup
+}%
+% \end{macrocode}
+% The purpose of procedure \cmd\marry@baselines\ is to ensure that the baseline spacing is correct;
+% it does this by making adjustments to the previous line, compensating for its depth, and by adding in
+% skip glue in an amount that assumes the added material has \cmd\topskip\ glue above.
+% \begin{macrocode}
+\def\marry@baselines{%
+ \begingroup
+ \setbox\z@\lastbox
+ \@ifvoid{\z@}{%
+ \endgroup
+ }{%
+ \aftergroup\kern
+ \aftergroup-%
+ \expandafter\box\expandafter\z@\expandafter\endgroup\the\dp\z@\relax
+ }%
+ \vskip\marry@skip\relax
+}%
+\gdef\marry@skip{\z@skip}%
+\def\set@marry@skip{%
+ \begingroup
+ \skip@\baselineskip\advance\skip@-\topskip
+ \@ifdim{\skip@>\z@}{%
+ \xdef\marry@skip{\the\skip@}%
+ }{}%
+ \endgroup
+}%
+% \end{macrocode}
+% \changes{4.1b}{2008/08/04}{Use \cs{document@inithook} instead of \cs{AtBeginDocument}}
+% \begin{macrocode}
+\appdef\document@inithook{%
+ \@ifxundefined\raggedcolumn@sw{\@booleanfalse\raggedcolumn@sw}{}%
+}%
+\def\raggedcolumn@skip{%
+ \vskip\z@\raggedcolumn@sw{\@plus.0001fil\@minus.0001fil}{}\relax
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@combinepage}
+% The procedure \cmd\@combinepage\ prepends the stored page (\cmd\pagesofar) to \cmd\@outputbox\ and
+% employs \cmd\@combineinserts\ to lay down the footnotes.
+% The next event will usually be shipping out the made-up page, but not always.
+% Therefore the argument of \cmd\@combinepage, which must be a Boolean, determines
+% if the footnotes are to be combined into this page.
+%
+% \changes{4.1b}{2008/08/04}{Change \cs{@combinepage} to \cs{@combinepage} with argument}
+% \changes{4.1b}{2008/08/04}{(AO, 452) Support length checking: show size of shipped out text.}
+% \changes{4.1n}{2009/12/02}{More diagnostics of column balancing}
+%
+% QUERY: In the following, if \cmd\box\cmd\footins\ is not void, its contents are lost. Can this ever happen?
+% \begin{macrocode}
+\def\@combinepage#1{%
+ \ltxgrid@foot@info@sw{\class@info{\string\@combinepage\string#1}}{}%
+ \@ifvoid\pagesofar{}{%
+ \setbox\@outputbox\vbox{%
+ \unvbox\pagesofar
+ \marry@baselines
+ \unvbox\@outputbox
+ }%
+ }%
+ #1{%
+ \@ifvoid\footsofar{}{%
+% \end{macrocode}
+% At this point, \cmd\footins\ is empty; all of the footnotes have been combined into \cmd\footsofar.
+% \begin{macrocode}
+ \show@box@size{Combining page footnotes}\footsofar
+ \setbox\footins\box\footsofar
+% \end{macrocode}
+% Depending on the page grid, we compose the footnotes for placement on the page.
+% \begin{macrocode}
+ \compose@footnotes
+ \@combineinserts\@outputbox\footins
+ }%
+ }{%
+% \end{macrocode}
+%QUERY: The following line was removed, probably to fix a bug. When was this done?
+% \begin{verbatim}
+% \global\setbox\footins\box\footsofar
+% \end{verbatim}
+% \begin{macrocode}
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@cflt}
+% \begin{macro}{\@cflb}
+% \changes{4.1b}{2008/08/04}{}
+% We modify \LaTeX's \cmd\@cflt\ and \cmd\@cflb\ to remove the unwanted glue with \cmd\unskip.
+% \begin{macrocode}
+\def \@cflt{%
+ \let \@elt \@comflelt
+ \setbox\@tempboxa \vbox{}%
+ \@toplist
+ \setbox\@outputbox \vbox{%
+ \boxmaxdepth \maxdepth
+ \unvbox\@tempboxa\unskip
+ \topfigrule\vskip \textfloatsep
+ \unvbox\@outputbox
+ }%
+ \let\@elt\relax
+ \xdef\@freelist{\@freelist\@toplist}%
+ \global\let\@toplist\@empty
+}%
+\def \@cflb {%
+ \let\@elt\@comflelt
+ \setbox\@tempboxa \vbox{}%
+ \@botlist
+ \setbox\@outputbox \vbox{%
+ \unvbox\@outputbox
+ \vskip \textfloatsep\botfigrule
+ \unvbox\@tempboxa\unskip
+ }%
+ \let\@elt\relax
+ \xdef\@freelist{\@freelist\@botlist}%
+ \global \let \@botlist\@empty
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@combinedblfloats}
+% We modify \LaTeX's \cmd\@combinedblfloats\ to be more appropriate for incremental page building:
+% we \cmd\unvbox\ the \cmd\@outputbox.
+% \begin{macrocode}
+\def\@combinedblfloats{%
+ \@ifx@empty\@dbltoplist{}{%
+ \setbox\@tempboxa\vbox{}%
+ \let\@elt\@comdblflelt\@dbltoplist
+ \let\@elt\relax\xdef\@freelist{\@freelist\@dbltoplist}%
+ \global\let\@dbltoplist\@empty
+ \setbox\@outputbox\vbox{%
+ %\boxmaxdepth\maxdepth %% probably not needed, CAR
+ \unvbox\@tempboxa\unskip
+ \@ifnum{\@dbltopnum>\m@ne}{\dblfigrule}{}%FIXME: how is \@dbltopnum maintained?
+ \vskip\dbltextfloatsep
+ \unvbox\@outputbox
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\set@column@hsize}%
+% The procedure \cmd\set@column@hsize\ takes care of setting up the horizontal dimensions
+% for the current page grid. The present routine will certainly not be adequate for more
+% complex page layouts (e.g., with a side column), but works for the common ones.
+% \changes{4.0a}{2001/06/18}{Introduce \cs{set@marry@height} }
+% \begin{macrocode}
+\def\set@column@hsize#1{%
+ \pagegrid@col#1%
+ \global\columnwidth\textwidth
+ \global\advance\columnwidth\columnsep
+ \global\divide\columnwidth\pagegrid@col
+ \global\advance\columnwidth-\columnsep
+ \global\hsize\columnwidth
+ \global\linewidth\columnwidth
+ \skip@\baselineskip\advance\skip@-\topskip
+ \@ifnum{\pagegrid@col>\@ne}{\set@marry@skip}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\set@colht}%
+% \begin{macro}{\set@colroom}%
+% \begin{macro}{\set@vsize}%
+% \begin{macro}{\set@adj@colht}%
+% The story of \cmd\textheight, \cmd\@colht, \cmd\@colroom, and \cmd\vsize.
+%
+% \cmd\textheight---height of the text column. Not a running parameter, however, each time a page is
+% shipped out, the \cmd\textheight\ could in principle be altered. This must be done before
+%
+% \cmd\@colht---\cmd\textheight\ minus the height of any full-page-width floats. The latter are committed
+% only just after shipping out, and only if we are in a multicolumn page grid.
+% Therefore, \cmd\@colht\ should be set after a \cmd\shipout\ (by \cmd\@outputpage) and
+% will be adjusted when full-page-width floats are committed to the fresh page by \cmd\do@startpage.
+%
+% \cmd\@colroom---\cmd\@colht\ (adjusted by \cmd\pagesofar) minus the height of any column-width floats.
+% The latter are committed anywhere on the page, at which point \cmd\@colroom\ must be adjusted.
+% Therefore, \cmd\@colroom\ should be set (by \cmd\set@colroom) whenever a column is prepared (by ).
+%FIXME: committed (by \cmd\output@column@) and
+% will be adjusted (by \cmd\@add@float\ or \cmd\do@startcolumn) whenever a float is committted to the column.
+%
+% \cmd\vsize---\cmd\@colroom.
+% Therefore, \cmd\vsize\ should be set (by \cmd\set@vsize) whenever
+% the \cmd\@colroom\ is set (by \cmd\set@colroom) or adjusted (by \cmd\@add@float\ or \cmd\do@startcolumn)
+%FIXME: or when the \cmd\pagesofar\ box is changed (after invoking \cmd\open@column@).
+%
+% Question: what if there are committed floats? Footnotes?
+% Answer: full-page-width floats are only committed at top, and they are already reckoned with in \cmd\@colht.
+% Column-width committed floats are incorporated by \cmd\@makecolumn.
+%
+% As to footnotes, our scheme is to keep the \cmd\footins\ insert register up to date, and to use the insert mechanism
+% to ensure room for footnotes.
+% When a change is made to the page grid, the footnotes will need to be propagated back into the MVL.
+%
+% Note: FIXME: adjusting for \cmd\pagesofar\ is done at not quite the right time. I need to reexamine \cmd\set@colht,
+% because \cmd\@dbltoplist\ and \cmd\pagesofar\ really should be on the same footing.
+% Perhaps \cmd\@colht\ and \cmd\@colroom\ should both deal with their respective ``lists'' in the same way?
+%
+% These concerns will be particularly germane if we ever extend this package to deal with full-page-width floats
+% placed at the bottom of the page, or committed on the same page as called out.
+%
+% It occurs to me that we should ditch \cmd\set@colroom\ and only ever execute \cmd\set@colht,
+% which sets \cmd\@colroom\ as a side effect.
+% If so, we can make \cmd\@colht\ take \cmd\pagesofar\ into account, as it should. Then \cmd\@colht\ will return to its
+% original significance as the value that \cmd\@colroom\ is set to after a column is committed.
+%
+% On the other hand, why not simply forget all this caching and (re-)calculate \cmd\vsize\ as late as possible?
+% Particularly, \cmd\@colht\ is an artifact of the old way of doing things, where once it was set, it would never change.
+%
+% \changes{4.1n}{2009/12/02}{More diagnostics of column balancing}
+% \begin{macrocode}
+\def\set@colht{%
+ \set@adj@textheight\@colht
+ \global\let\enlarge@colroom\@empty
+ \set@colroom
+}%
+\def\set@adj@textheight#1{%
+ \ltxgrid@info@sw{\class@info{\string\set@adj@textheight\string#1}\saythe\textheight}{}%
+ #1\textheight
+ \def\@elt{\adj@page#1}%
+ \@booleantrue\firsttime@sw\@dbltoplist
+ \let\@elt\relax
+ \global#1#1\relax
+ \ltxgrid@info@sw{\saythe#1}{}%
+}%
+\def\set@colroom{%
+ \ltxgrid@info@sw{\class@info{\string\set@colroom}}{}%
+ \set@adj@colht\@colroom
+ \@if@empty\enlarge@colroom{}{%
+ \global\advance\@colroom\enlarge@colroom\relax
+ \ltxgrid@info@sw{\saythe\@colroom}{}%
+ }%
+ \@ifdim{\@colroom>\topskip}{}{%
+ \ltxgrid@info{Not enough room: \string\@colroom=\the\@colroom; increasing to \the\topskip}%
+ \@colroom\topskip
+ }%
+ \global\@colroom\@colroom
+%<ignore> \ltxgrid@info@sw{\class@info{\string\set@colroom\string\vsize=\string\colroom}\saythe\vsize}{}%
+ \set@vsize
+}%
+%
+\def\set@vsize{%
+ \global\vsize\@colroom
+ \ltxgrid@info@sw{\class@info{\string\set@vsize\string\vsize=\string\colroom}\saythe\vsize}{}%
+}%
+% \end{macrocode}
+% \changes{4.1n}{2009/12/02}{More diagnostics of column balancing}
+% \begin{macrocode}
+\def\set@adj@colht#1{%
+ #1\@colht
+ \ltxgrid@info@sw{\class@info{\string\set@adj@colht\string#1-\string\pagesofar}\saythe#1}{}%
+ \@ifvoid\pagesofar{}{%
+ \advance#1-\ht\pagesofar\advance#1-\dp\pagesofar
+ \ltxgrid@info@sw{\class@info{\string\pagesofar}\saythe#1}{}%
+ }%
+ \def\@elt{\adj@column#1}%
+ \@booleantrue\firsttime@sw\@toplist
+ \@booleantrue\firsttime@sw\@botlist
+ \let\@elt\relax
+}%
+\def\adj@column#1#2{%
+ \advance#1-\ht#2%
+ \advance#1-\firsttime@sw{\textfloatsep\@booleanfalse\firsttime@sw}{\floatsep}%
+ \ltxgrid@info@sw{\class@info{\string\adj@column\string#1-\string#2}\saythe#1}{}%
+}%
+\def\adj@page#1#2{%
+ \advance#1-\ht#2%
+ \advance#1-\firsttime@sw{\dbltextfloatsep\@booleanfalse\firsttime@sw}{\dblfloatsep}%
+ \ltxgrid@info@sw{\class@info{\string\adj@page\string#1-\string#2}\saythe#1}{}%
+}%
+\def\set@adj@box#1#2{%
+ \@ifvoid#2{}{%
+ \advance#1-\ht#2\advance#1-\dp#2%
+ \@booleantrue\temp@sw
+ \ltxgrid@foot@info@sw{\class@info{\string\set@adj@box\string#2}\saythe#1}{}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@outputpage@tail}%
+% \changes{4.1b}{2008/08/04}{Procedure \cs{@outputpage@tail} tailpatches \cs{@outputpage}}%
+% In \cmd\@outputpage@tail, we set \cmd\@colht\ and the float placement parameters
+% (this is the one point where it is appropriate to set \cmd\@colht).
+% At \cmd\do@startpage\ time, we adjust \cmd\@colht's value to reflect committed
+% full-page-width floats.
+%
+% Note: with a correctly written output routine, a call to \cmd\@outputpage\ will inevitably be
+% followed by a call to \cmd\do@startpage, so these procedure calls would be unneeded.
+% \begin{macrocode}
+\appdef\@outputpage@tail{%
+ \set@colht % FIXME: needed?
+ \@floatplacement % FIXME: needed?
+ \@dblfloatplacement % FIXME: needed?
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{balance@2}
+% \changes{4.1b}{2008/08/04}{Procedure \cs{balance@2} defined more transparently}%
+% We define procedures for balancing columns in a multicolumn layout.
+% For now, we define only one: a procedure for the two-column grid.
+% All others will simply \cmd\relax\ out.
+%
+% The following code defines \verb+\balance@2+ without all the clunky \cmd\csname\ commands
+% in the replacement part,
+% which appears on the right-hand side of the assignment to \cmd\toks@.
+%
+% The method is straightforward: balance the two columns of text, and balance the footnotes.
+% Later on, \cmd\@combineinserts\ will be called to place the footnotes after the now-balanced columns.
+%
+% \changes{4.1f}{2009/07/14}{(AO, 519) \cs{footins} content must be preserved and reintegrated}
+% It was necessary to deal with the case where \cmd\box\cmd\footsofar\ was not empty
+% upon execution of this balancing code. We store it away in \cmd\box\cmd\footins\ and
+% add it back in afterwards.
+%
+% Here is a conundrum: if we switch between single-, two-, and three-column page grids:
+% On what measure should the footnotes be set?
+% \begin{macrocode}
+\begingroup
+ \catcode`\1=\cat@letter
+ \catcode`\2=\cat@letter
+% \end{macrocode}
+% \cmd\toks@\ contains the repacement part for an effective \cmd\def\cs{balance@2}.
+% \begin{macrocode}
+ \toks@{%
+% \end{macrocode}
+% \cmd\balance@two, by side effect, strips footnotes into \cmd\box\cmd\footins.
+% \begin{macrocode}
+ \setbox\footins\box\footsofar
+ \balance@two\col@1\@outputbox
+% \end{macrocode}
+% We ensure that the box assignments are global.
+% \begin{macrocode}
+ \global\setbox\col@1\box\col@1
+ \global\setbox\@outputbox\box\@outputbox
+% \end{macrocode}
+% The following line puts all footnotes into the footnote galley, \cmd\footsofar.
+% \begin{macrocode}
+ \combine@foot@inserts\footsofar\footins
+ }%
+ \aftergroup\def\aftergroup\balance@2\expandafter
+\endgroup\expandafter{\the\toks@}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\balance@two}
+% The procedure \cmd\balance@two\ takes two columns and balances them; in the process it removes
+% any footnotes that may be present to a place of safety \cmd\footsofar,
+% for later placement at the foot of the shipped-out page.
+% The box register \cmd\box\cmd\@ne\ is the aggregate of all columns.
+% The box register \cmd\box\cmd \z@\ is the last column.
+% The box register \cmd\box\cmd\tw@\ is the first column.
+% The \cmd\dimen\ register \cmd\dimen@\ is the trial value to \cmd\vsplit\ to,
+% initially half the height of \cmd\box\cmd\@ne.
+% The \cmd\dimen\ register \cmd\dimen@i\ is the increment for the next trial;
+% its initial value is equal to the initial value of \cmd\dimen@.
+% The \cmd\dimen\ register \cmd\dimen@ii\ is the difference of the heights of the two columns.
+%
+% The procedure uses a binary search for that value of \cmd\dimen@\ which is stable to within .5\cmd\p@\ and which
+% makes the last column be shorter than the others.
+%
+% This procedure can be extended to multiple columns simply by changing it to execute \cmd\vsplit\ multiple
+% times (one less than the total number of columns in the page layout) and to calculating \cmd\dimen@ii\
+% to be the difference of the heights of last column and the \cmd\dimen@.
+% Upon termination of the search, one would excute the \cmd\vsplit s once again, this time
+% using the actual \cmd\col@\ box registers to store the
+% balanced columns, thereby clobbering their former contents.
+%
+% Bug Note:
+% as originally written, this macro had a bug, which is well worth avoiding under similar circumstances anywhere.
+% So, learn from the mistakes of others, as they say.
+% In trying to remove the depth of the boxes created via \cmd\vsplit\ within the \cmd\loopwhile\ control,
+% I originally coded
+% \cmd\unvbox
+% \cmd\z@\
+% \cmd\setbox
+% \cmd\z@
+% \cmd\lastbox\
+% \cmd\dimen@
+% \cmd\dp
+% \cmd\z@\
+% \cmd\box
+% \cmd\z@\
+% \cmd\vskip-%
+% \cmd\dimen@.
+% The error here is that the (horizontal) shift of the last box in the vertical list will be lost in the process.
+% Simply put, \cmd\setbox\cmd\z@\cmd\lastbox\ fails to retain the shift of the box node in the vertical list,
+% and when it is put down again via \cmd\box\cmd\z@, it will no longer have the correct shift.
+%
+% This bug affected things placed in the MVL with \cmd\moveleft, \cmd\moveright, \cmd\parshape, and
+% \cmd\hangindent, as well as things shifted by \TeX's primitive mechanisms.
+%
+% A superior strategy for removing the depth of the last line of the list is more expensive, but safer:
+% make a separate copy of the list, measure the depth of the last box as above, but then discard
+% the list, retaining only the value of the dimension.
+%
+% Note that this procedure will not work if the material within is excessively chunky.
+% A particular failure mode exists where none of the material is allocated to the last (right) column.
+% We detect this case and revert to unbalanced columns.
+%
+% Another failure mode is where a large chunk occurs at the beginning of the composite box.
+% In this case, the left column may fill up even when \cmd\dimen@\ is very small.
+% If this configuration leaves the left column longer than the right, then we are done,
+% but \cmd\dimen@\ by no means represents the height of either finished box.
+%
+% Therefore the last step in the process is to rebox the two columns to a common height determined
+% independently of the balancing process.
+%
+% The dimension involved is checked against the current \cmd\@colroom\ to guard against the case where
+% excessive material happens to fall in either column.
+% \changes{4.1b}{2008/08/04}{Change \cs{set@colroom} to \cs{set@colht}}
+% \changes{4.1n}{2009/12/02}{More diagnostics of column balancing}
+% \changes{4.1n}{2010/01/02}{(AO, 571) coding convention: use \cs{bgroup}, \cs{egroup} (instead of braces) when a box is being built}%
+% \changes{4.1n}{2010/01/02}{(AO, 571) Footnotes, when columns are balanced or when they are composed with their column}%
+% \changes{4.1n}{2010/01/02}{(AO, 571) Change \cs{balance@two}'s balancing algorithm to more successfully balance extremely short columns.}
+% \begin{macrocode}
+\def\balance@two#1#2{%
+ \ltxgrid@info@sw{\class@info{\string\balance@two\string#1\string#2}}{}%
+ \outputdebug@sw{\trace@scroll{\showbox#1\showbox#2}}{}%
+% \end{macrocode}
+% The first step is to recover the footnotes from the bottoms of the two columns (globally, into \cmd\footsofar)
+% and to combine the text into \cmd\box\cmd\@ne, but without voiding either of the argument boxes.
+% \begin{macrocode}
+ \setbox\thr@@\copy\footsofar
+ \setbox\@ne\vbox\bgroup
+ \@ifvoid{#1}{}{%
+ \recover@column#1\footsofar\column@recovered\footins@recovered
+ \@ifvoid{#2}{}{\marry@baselines}%
+ }%
+ \@ifvoid{#2}{}{%
+ \recover@column#2\footsofar\column@recovered\footins@recovered
+ }%
+ \egroup
+ \outputdebug@sw{\trace@scroll{\showbox\@ne}}{}%
+ \ltxgrid@foot@info@sw{\trace@scroll{\showbox\footsofar}}{}%
+% \end{macrocode}
+% Hereunder, \cmd\dimen@\ is the split value. We adjust it until the step size is small enough, while the split is acceptable.
+% Also, \cmd\dimen@i\ is the step size. Once this value is greater than a half point, we must iterate.
+% \begin{macrocode}
+ \dimen@\ht\@ne\divide\dimen@\tw@
+ \dimen@i\dimen@
+ \vbadness\@M
+ \vfuzz\maxdimen
+ \splittopskip\topskip
+ \loopwhile{%
+ \setbox\z@\copy\@ne\setbox\tw@\vsplit\z@ to\dimen@
+ \remove@depth\z@\remove@depth\tw@
+% \end{macrocode}
+% The following line would provide a diagnostic of the iterations of column balancing, were we to use it.
+% \begin{verbatim}
+% \outputdebug@sw{\trace@scroll{\showbox\tw@\showbox\z@}}{}%
+% \end{verbatim}
+% Hereunder, \cmd\dimen@ii\ is used to reckon the difference in height between the left box and the right.
+% \begin{macrocode}
+ \dimen@ii\ht\tw@\advance\dimen@ii-\ht\z@
+ \dimen@i=.5\dimen@i
+ \ltxgrid@info@sw{\saythe\dimen@\saythe\dimen@i\saythe\dimen@ii}{}%
+% \end{macrocode}
+% If the columns are within a half-point of each other,
+% \begin{macrocode}
+ \@ifdim{\dimen@ii<.5\p@}{%
+ \@ifdim{\dimen@ii>-.5\p@}%
+ }{%
+ \false@sw
+ }%
+% \end{macrocode}
+% The above results in a Boolean, which now chooses between the following two brace-delimited clauses.
+% If the step size is less than a half-point, then terminate the loop.
+% \begin{macrocode}
+ {%
+ \true@sw
+ }{%
+ \@ifdim{\dimen@i<.5\p@}%
+ }%
+% \end{macrocode}
+% The above results in a Boolean, which now chooses between the following two brace-delimited clauses.
+% The true-part terminates the loop, otherwise iterate.
+% \begin{macrocode}
+ {%
+ \false@sw
+ }%
+ {%
+% \end{macrocode}
+% For the next iteration, the candidate split dimension \cmd\dimen@\ will be one step larger
+% if the height of the left box is less than that of the right box.
+% Otherwise it will be one step smaller.
+% \begin{macrocode}
+ \advance\dimen@\@ifdim{\dimen@ii<\z@}{}{-}\dimen@i
+ \true@sw
+ }%
+ }%
+% \end{macrocode}
+% The loop has terminated.
+% \begin{macrocode}
+ \ltxgrid@info@sw{\saythe\dimen@\saythe\dimen@i\saythe\dimen@ii}{}%
+% \end{macrocode}
+% The algorithm has failed to find a satisfactory result if
+% the left column is of non-zero height and the right column is of zero height.
+% \begin{macrocode}
+ \@ifdim{\ht\z@=\z@}{%
+ \@ifdim{\ht\tw@=\z@}%
+ }{%
+ \true@sw
+ }%
+% \end{macrocode}
+% The \cmd\false@sw\ branch is executed if the algorithm has failed.
+% We restore the original boxes.
+% \begin{macrocode}
+ {%
+ }{%
+ \ltxgrid@info{Unsatifactorily balanced columns: giving up}%
+ \setbox\tw@\box#1%
+ \setbox\z@ \box#2%
+ \global\setbox\footsofar\box\thr@@
+ }%
+ \setbox\tw@\vbox{\unvbox\tw@\vskip\z@skip}%
+ \setbox\z@ \vbox{\unvbox\z@ \vskip\z@skip}%
+ \set@colht
+ \dimen@\ht\z@\@ifdim{\dimen@<\ht\tw@}{\dimen@\ht\tw@}{}%
+ \@ifdim{\dimen@>\@colroom}{\dimen@\@colroom}{}%
+ \ltxgrid@info@sw{\saythe{\ht\z@}\saythe{\ht\tw@}\saythe\@colroom\saythe\dimen@}{}%
+ \setbox#1\vbox to\dimen@{\unvbox\tw@\unskip\raggedcolumn@skip}%
+ \setbox#2\vbox to\dimen@{\unvbox\z@ \unskip\raggedcolumn@skip}%
+ \outputdebug@sw{\trace@scroll{\showbox#1\showbox#2}}{}%
+}%
+% \end{macrocode}
+% Procedure \cmd\remove@depth\ rearranges the given (vertical) box register so that it has zero depth.
+% \begin{macrocode}
+\def\remove@depth#1{%
+ \setbox#1\vbox\bgroup
+ \unvcopy#1%
+ \setbox\z@\vbox\bgroup
+ \unvbox#1%
+ \setbox\z@\lastbox
+ \aftergroup\kern\aftergroup-\expandafter
+ \egroup
+ \the\dp\z@\relax
+ \egroup
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \changes{4.1n}{2010/01/02}{(AO, 571) Abandon \cs{recover@footins} in favor of \cs{recover@column}}%
+% Procedure \cmd\recover@column\ is a utility to separate a column box into text and footnotes;
+% the former being contributed to the current (vertical) list, the latter appended to the given register, usually \cmd\footsofar.
+%
+% Argument \verb+#1+ is the input: it should be a \cmd\vbox, and it remains unaltered.
+% Argument \verb+#2+ is the box into which to (globally) add the footnotes, usually \cmd\footsofar.
+% Arguments \verb+#3+ and \verb+#4+ are scratch box registers to use in this calculation.
+% As a side effect, \verb+#3+ will be unboxed into whatever vertical mode we are in at the moment (should be a \cmd\vbox).
+% \begin{macrocode}
+\def\recover@column#1#2#3#4{%
+ \ltxgrid@info@sw{\class@info{\string\recover@column\string#1\string#2\string#3\string#4}}{}%
+ \setbox#4\vbox{\unvcopy#1}%
+ \ltxgrid@foot@info@sw{\trace@scroll{\showbox#4}}{}%
+ \dimen@\ht#4%
+ \ltxgrid@foot@info@sw{\saythe\dimen@}{}%
+ \setbox#4\vbox\bgroup
+ \unvbox#4\unskip
+% \end{macrocode}
+% We now strip the footnotes from the bottom of this box, adding them to \cmd\footsofar.
+% The method relies on a signal, consisting of a complementary pair of kerns, placed at the bottom of the box by \cmd\@combineinserts.
+% \begin{macrocode}
+ \dimen@i\lastkern\unkern\advance\dimen@i\lastkern
+ \@ifdim{\dimen@i=\z@}{%
+ \dimen@i\lastkern\unkern
+ \ltxgrid@foot@info@sw{\saythe\dimen@i}{}%
+ \aftergroup\dimen@i
+ \expandafter\egroup\the\dimen@i\relax
+ }{%
+ \egroup
+ }%
+% \end{macrocode}
+% Split the column into \verb+#3+ and the footnote into \verb+#4+.
+% Append the footnote to \verb+#2+.
+% \begin{macrocode}
+ \@ifdim{\dimen@i<\z@}{%
+ \advance\dimen@\dimen@i
+ \ltxgrid@foot@info@sw{\saythe\dimen@i\saythe\dimen@}{}%
+ \splittopskip\z@skip
+ \global\setbox#3\vsplit#4 to\dimen@
+ \global\setbox#4\vbox{\unvbox#4}%
+ \ltxgrid@foot@info@sw{\trace@scroll{\showbox#1\showbox#2\showbox#3\showbox#4}}{}%
+ \global\setbox#2\vbox\bgroup\unvbox#2\vskip\z@skip\unvbox#4\egroup
+ }{%
+% \end{macrocode}
+% What if \cmd\dimen@i\ is zero?
+% In that case, \cmd\setbox\#3\cmd\box\#4, and do not touch \cmd\box\#2.
+% \begin{macrocode}
+ \setbox#3\box#4%
+ \ltxgrid@foot@info@sw{\trace@scroll{\showbox#1\showbox#2\showbox#3\showbox#4}}{}%
+ }%
+ \unvbox#3%
+ \loopwhile{\dimen@\lastskip\@ifdim{\dimen@>\z@}{\unskip\true@sw}{\false@sw}}%
+}%
+\def\recover@column@null#1#2#3#4{%
+ \unvcopy#1%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@begindocumenthook}
+% Initialization:
+% we initialize to the page grid named ``one''.
+% If the class decides to initially set type in a different grid, it
+% should execute these same commands, but changing the first to the appropriate procedure.
+%
+% Note that the point where this sequence is executed would be an excellent place to arrange for
+% floats to be committed to the first page of a document.
+% That is, we execute \cmd\do@startpage, which triggers \cmd\do@startcolumn.
+%
+% FIXME: it should be the job of the page grid to determine the procedure to execute at
+% the start of the job. Make this a hook.
+% \begin{macrocode}
+\prepdef\@begindocumenthook{%
+ \open@column@one\@ne
+ \set@colht
+ \@floatplacement
+ \@dblfloatplacement
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% Comment: our technique of balancing columns is severely limited, because it cannot properly work
+% with \env{longtable}, which places material at the bottom and top of the column break.
+%
+% The proper way to handle a grid change in the middle of the page is to accumulate all the material for
+% an entire article (or chapter) and then assemble finished pages therefrom. This approach is fundamentally
+% superior for complex layouts: it corresponds to real-world workflows.
+% Such a scheme is an excellent subject for another \LaTeX\ package.
+%
+%
+% \subsection{Patches for the longtable package}%
+%
+% \LaTeX's ``required'' package \classname{longtable} (written by David P. Carlilsle),
+% which is part of /latex/required/tools, is incmpatible with both
+% \LaTeX's ``required'' package \classname{multicol} and with
+% \LaTeX's native \cmd\twocolumn\ capability. There is no essential reason
+% for this incompatability, aside from implementation details, and the
+% \classname{ltxgrid} package gives us the ability to lift them.
+%
+% Only four of \classname{longtable}'s procedures require rewriting:
+% \cmd\longtable,
+% \cmd\endlongtable,
+% \cmd\LT@start, and
+% \cmd\LT@end@hd@ft.
+% The procedure \cmd\switch@longtable\ checks against their expected meanings
+% and, if all is as expected, applies the patches.
+% In the process, we simplify things considerably and also make them more
+% secure.
+%
+% Why does \classname{longtable} need to access the output routine, anyway?
+% What it comes down to, is what happens when a pagebreak falls within a
+% long table. If this happens, we would like to append a row at the bottom of
+% the broken table and add a row at the top of the next page.
+%
+% These things can be accomodated easily by the \classname{ltxgrid} output
+% routine hooks.
+%
+% \begin{macro}{\longtable}
+% \begin{macrocode}
+\def\longtable@longtable{%
+ \par
+ \ifx\multicols\@undefined\else\ifnum\col@number>\@ne\@twocolumntrue\fi\fi
+ \if@twocolumn\LT@err{longtable not in 1-column mode}\@ehc\fi
+ \begingroup
+ \@ifnextchar[\LT@array{\LT@array[x]}%
+}%
+\def\longtable@new{%
+ \par
+ \@ifnextchar[\LT@array{\LT@array[x]}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\endlongtable}
+% \begin{macrocode}
+\def\endlongtable@longtable{%
+ \crcr
+ \noalign{%
+ \let\LT@entry\LT@entry@chop
+ \xdef\LT@save@row{\LT@save@row}}%
+ \LT@echunk
+ \LT@start
+ \unvbox\z@
+ \LT@get@widths
+ \if@filesw
+ {\let\LT@entry\LT@entry@write\immediate\write\@auxout{%
+ \gdef\expandafter\noexpand
+ \csname LT@\romannumeral\c@LT@tables\endcsname
+ {\LT@save@row}}}%
+ \fi
+ \ifx\LT@save@row\LT@@save@row
+ \else
+ \LT@warn{Column \@width s have changed\MessageBreak
+ in table \thetable}%
+ \LT@final@warn
+ \fi
+ \endgraf\penalty -\LT@end@pen
+ \endgroup
+ \global\@mparbottom\z@
+ \pagegoal\vsize
+ \endgraf\penalty\z@\addvspace\LTpost
+ \ifvoid\footins\else\insert\footins{}\fi
+}%
+% \end{macrocode}
+% \changes{4.1a}{2008/06/29}{Repair error in \cs{endlongtable@new} involving \cs{@ifx}: argument not delimited.}
+% \begin{macrocode}
+\def\endlongtable@new{%
+ \crcr
+ \noalign{%
+ \let\LT@entry\LT@entry@chop
+ \xdef\LT@save@row{\LT@save@row}%
+ }%
+ \LT@echunk
+ \LT@start
+ \unvbox\z@
+ \LT@get@widths
+ \@if@sw\if@filesw\fi{%
+ {%
+ \let\LT@entry\LT@entry@write
+ \immediate\write\@auxout{%
+ \gdef\expandafter\noexpand\csname LT@\romannumeral\c@LT@tables\endcsname
+ {\LT@save@row}%
+ }%
+ }%
+ }{}%
+ \@ifx{\LT@save@row\LT@@save@row}{}{%
+ \LT@warn{%
+ Column \@width s have changed\MessageBreak in table \thetable
+ }\LT@final@warn
+ }%
+ \endgraf
+ \nobreak
+ \box\@ifvoid\LT@lastfoot{\LT@foot}{\LT@lastfoot}%
+ \global\@mparbottom\z@
+ \endgraf
+ \LT@post
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\LT@start}
+% \begin{macrocode}
+\def\LT@start@longtable{%
+ \let\LT@start\endgraf
+ \endgraf\penalty\z@\vskip\LTpre
+ \dimen@\pagetotal
+ \advance\dimen@ \ht\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi
+ \advance\dimen@ \dp\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi
+ \advance\dimen@ \ht\LT@foot
+ \dimen@ii\vfuzz
+ \vfuzz\maxdimen
+ \setbox\tw@\copy\z@
+ \setbox\tw@\vsplit\tw@ to \ht\@arstrutbox
+ \setbox\tw@\vbox{\unvbox\tw@}%
+ \vfuzz\dimen@ii
+ \advance\dimen@ \ht
+ \ifdim\ht\@arstrutbox>\ht\tw@\@arstrutbox\else\tw@\fi
+ \advance\dimen@\dp
+ \ifdim\dp\@arstrutbox>\dp\tw@\@arstrutbox\else\tw@\fi
+ \advance\dimen@ -\pagegoal
+ \ifdim \dimen@>\z@\vfil\break\fi
+ \global\@colroom\@colht
+ \ifvoid\LT@foot\else
+ \advance\vsize-\ht\LT@foot
+ \global\advance\@colroom-\ht\LT@foot
+ \dimen@\pagegoal\advance\dimen@-\ht\LT@foot\pagegoal\dimen@
+ \maxdepth\z@
+ \fi
+ \ifvoid\LT@firsthead\copy\LT@head\else\box\LT@firsthead\fi
+% \end{macrocode}
+% At some point before version 4.11, the \cmd\nobreak\ was added.
+% \begin{macrocode}
+\nobreak
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \output{\LT@output}%
+}%
+\def\LT@start@new{%
+ \let\LT@start\endgraf
+ \endgraf
+ \markthr@@{}%
+ \LT@pre
+ \@ifvoid\LT@firsthead{\LT@top}{\box\LT@firsthead\nobreak}%
+ \mark@envir{longtable}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\LT@end}
+% \begin{macrocode}
+\def\LT@end@hd@ft@longtable#1{%
+ \LT@echunk
+ \ifx\LT@start\endgraf
+ \LT@err{Longtable head or foot not at start of table}{Increase LTchunksize}%
+ \fi
+ \setbox#1\box\z@
+ \LT@get@widths\LT@bchunk
+}%
+\def\LT@end@hd@ft@new#1{%
+ \LT@echunk
+ \@ifx{\LT@start\endgraf}{%
+ \LT@err{Longtable head or foot not at start of table}{Increase LTchunksize}%
+ }%
+ \global\setbox#1\box\z@
+ \LT@get@widths
+ \LT@bchunk
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\LT@array}
+%
+%
+% \begin{macrocode}
+\def\LT@array@longtable[#1]#2{%
+ \refstepcounter{table}\stepcounter{LT@tables}%
+ \if l#1%
+ \LTleft\z@ \LTright\fill
+ \else\if r#1%
+ \LTleft\fill \LTright\z@
+ \else\if c#1%
+ \LTleft\fill \LTright\fill
+ \fi\fi\fi
+ \let\LT@mcol\multicolumn
+ \let\LT@@tabarray\@tabarray
+ \let\LT@@hl\hline
+ \def\@tabarray{%
+ \let\hline\LT@@hl
+ \LT@@tabarray}%
+ \let\\\LT@tabularcr\let\tabularnewline\\%
+ \def\newpage{\noalign{\break}}%
+ \def\pagebreak{\noalign{\ifnum`}=0\fi\@testopt{\LT@no@pgbk-}4}%
+ \def\nopagebreak{\noalign{\ifnum`}=0\fi\@testopt\LT@no@pgbk4}%
+ \let\hline\LT@hline \let\kill\LT@kill\let\caption\LT@caption
+ \@tempdima\ht\strutbox
+ \let\@endpbox\LT@endpbox
+ \ifx\extrarowheight\@undefined
+ \let\@acol\@tabacol
+ \let\@classz\@tabclassz \let\@classiv\@tabclassiv
+ \def\@startpbox{\vtop\LT@startpbox}%
+ \let\@@startpbox\@startpbox
+ \let\@@endpbox\@endpbox
+ \let\LT@LL@FM@cr\@tabularcr
+ \else
+ \advance\@tempdima\extrarowheight
+ \col@sep\tabcolsep
+ \let\@startpbox\LT@startpbox\let\LT@LL@FM@cr\@arraycr
+ \fi
+ \setbox\@arstrutbox\hbox{\vrule
+ \@height \arraystretch \@tempdima
+ \@depth \arraystretch \dp \strutbox
+ \@width \z@}%
+ \let\@sharp##\let\protect\relax
+ \begingroup
+ \@mkpream{#2}%
+ \xdef\LT@bchunk{%
+ \global\advance\c@LT@chunks\@ne
+ \global\LT@rows\z@\setbox\z@\vbox\bgroup
+ \LT@setprevdepth
+% \end{macrocode}
+% At some point before version 4.11, the \cmd\noexpand\ was added.
+% We need not change our own version, because we did it right, back in 1998 (using \cmd\appdef).
+% \begin{macrocode}
+ \tabskip\LTleft \noexpand\halign to\hsize\bgroup
+ \tabskip\z@ \@arstrut \@preamble \tabskip\LTright \cr}%
+ \endgroup
+ \expandafter\LT@nofcols\LT@bchunk&\LT@nofcols
+ \LT@make@row
+ \m@th\let\par\@empty
+ \everycr{}\lineskip\z@\baselineskip\z@
+ \LT@bchunk}%
+\def\LT@LR@l{\LTleft\z@ \LTright\fill}%
+\def\LT@LR@r{\LTleft\fill \LTright\z@ }%
+\def\LT@LR@c{\LTleft\fill \LTright\fill}%
+\def\LT@array@new[#1]#2{%
+ \refstepcounter{table}\stepcounter{LT@tables}%
+ \table@hook
+ \LTleft\fill \LTright\fill
+ \csname LT@LR@#1\endcsname
+ \let\LT@mcol\multicolumn
+ \let\LT@@hl\hline
+ \prepdef\@tabarray{\let\hline\LT@@hl}%
+ \let\\\LT@tabularcr
+ \let\tabularnewline\\%
+ \def\newpage{\noalign{\break}}%
+ \def\pagebreak{\noalign{\ifnum`}=0\fi\@testopt{\LT@no@pgbk-}4}%
+ \def\nopagebreak{\noalign{\ifnum`}=0\fi\@testopt\LT@no@pgbk4}%
+ \let\hline\LT@hline
+ \let\kill\LT@kill
+ \let\caption\LT@caption
+ \@tempdima\ht\strutbox
+ \let\@endpbox\LT@endpbox
+ \@ifxundefined\extrarowheight{%
+ \let\@acol\@tabacol
+ \let\@classz\@tabclassz
+ \let\@classiv\@tabclassiv
+ \def\@startpbox{\vtop\LT@startpbox}%
+ \let\@@startpbox\@startpbox
+ \let\@@endpbox\@endpbox
+% \end{macrocode}
+% Because \classname{ltxutil} patches \LaTeX's \cmd\@tabularcr and \cmd\@xtabularcr,
+% we must restore these procedures in the scope of \env{longtable}.
+% Ironically, the patches in \classname{ltxutil} were for the purpose of extending
+% the \env{tabular} environment to prevent pagebreaks with the *-form of \cmd\\,
+% just the same as is being done here. But the two mechanisms conflict.
+% \changes{4.1a}{2008/06/29}{Change \cs{LT@array@new}: restore \cs{@tabularcr} and \cs{@xtabularcr}}
+% \begin{macrocode}
+ \let\LT@LL@FM@cr\@tabularcr@LaTeX
+ \let\@xtabularcr\@xtabularcr@LaTeX
+ }{%
+ \advance\@tempdima\extrarowheight
+ \col@sep\tabcolsep
+ \let\@startpbox\LT@startpbox
+% \end{macrocode}
+% \changes{4.1a}{2008/06/29}{Change \cs{LT@array@new}: set \cs{LT@LL@FM@cr} to \cs{@arraycr@array} instead of \cs{@arraycr}}
+% \begin{macrocode}
+ \let\LT@LL@FM@cr\@arraycr@array
+ }%
+%
+ \let\@acoll\@tabacoll
+ \let\@acolr\@tabacolr
+ \let\@acol\@tabacol
+%
+ \setbox\@arstrutbox\hbox{%
+ \vrule
+ \@height \arraystretch \@tempdima
+ \@depth \arraystretch \dp \strutbox
+ \@width \z@
+ }%
+ \let\@sharp##%
+ \let\protect\relax
+ \begingroup
+ \@mkpream{#2}%
+ \@mkpream@relax
+ \edef\@preamble{\@preamble}%
+ \prepdef\@preamble{%
+ \global\advance\c@LT@chunks\@ne
+ \global\LT@rows\z@
+ \setbox\z@\vbox\bgroup
+ \LT@setprevdepth
+ \tabskip\LTleft
+ \halign to\hsize\bgroup
+ \tabskip\z@
+ \@arstrut
+ }%
+ \appdef\@preamble{%
+ \tabskip\LTright
+ \cr
+ }%
+ \global\let\LT@bchunk\@preamble
+ \endgroup
+ \expandafter\LT@nofcols\LT@bchunk&\LT@nofcols
+ \LT@make@row
+ \m@th
+ \let\par\@empty
+ \everycr{}%
+ \lineskip\z@
+ \baselineskip\z@
+ \LT@bchunk
+}%
+\appdef\table@hook{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\switch@longtable}
+%
+% Here is the switch from standard \classname{longtable} to the new, \classname{ltxgrid}-compatible values.
+%
+% At this point, we extend \env{longtable} with a \env{longtable*} form, which signifies that we want to
+% use the full page width for setting the table.
+% You can think this way: \env{longtable*} is to \env{longtable} as \env{table*} is to \env{table}.
+%
+% \begin{macrocode}
+\def\switch@longtable{%
+ \@ifpackageloaded{longtable}{%
+ \@ifx{\longtable\longtable@longtable}{%
+ \@ifx{\endlongtable\endlongtable@longtable}{%
+ \@ifx{\LT@start\LT@start@longtable}{%
+ \@ifx{\LT@end@hd@ft\LT@end@hd@ft@longtable}{%
+ \@ifx{\LT@array\LT@array@longtable}{%
+ \true@sw
+ }{\false@sw}%
+ }{\false@sw}%
+ }{\false@sw}%
+ }{\false@sw}%
+ }{\false@sw}%
+ {%
+ \class@info{Patching longtable package}%
+ }{%
+ \class@info{Patching unrecognized longtable package. (Proceeding with fingers crossed)}%
+ }%
+ \let\longtable\longtable@new
+ \let\endlongtable\endlongtable@new
+ \let\LT@start\LT@start@new
+ \let\LT@end@hd@ft\LT@end@hd@ft@new
+ \let\LT@array\LT@array@new
+ \newenvironment{longtable*}{%
+ \onecolumngrid@push
+ \longtable
+ }{%
+ \endlongtable
+ \onecolumngrid@pop
+ }%
+% \end{macrocode}
+% Removed obsolete code.
+% \begin{macrocode}
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\LT@pre}
+% \begin{macro}{\LT@bot}
+% \begin{macro}{\LT@top}
+% \begin{macro}{\LT@post}
+% \begin{macro}{\LT@adj}
+% Note that at the end of the longtable environment, we reestablish the \cmd\mark@envir\ of the
+% containing environment. We have left \cmd\curr@envir\ alone, so this will work.
+% \begin{macrocode}
+\def\LT@pre{\penalty\z@\vskip\LTpre}%
+\def\LT@bot{\nobreak\copy\LT@foot\vfil}%
+\def\LT@top{\copy\LT@head\nobreak}%
+\def\LT@post{\penalty\z@\addvspace\LTpost\mark@envir{\curr@envir}}%
+\def\LT@adj{%
+ \setbox\z@\vbox{\null}\dimen@-\ht\z@
+ \setbox\z@\vbox{\unvbox\z@\LT@bot}\advance\dimen@\ht\z@
+ \global\advance\vsize-\dimen@
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{output@init}
+% \begin{macro}{output@prep}
+% \begin{macro}{output@post}
+% \begin{macrocode}
+\def\output@init@longtable{\LT@adj}%
+\def\output@prep@longtable{\setbox\@cclv\vbox{\unvbox\@cclv\LT@bot}}%
+\def\output@post@longtable{\LT@top}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Patches for index processing}%
+%
+% Another feature that uses the output routine hooks occurs within
+% an index, where one wishes to apply a ``continue head'' when a
+% column breaks within a primary index entry.
+% Some book designs call for the continue head to only be applied
+% at a turnpage break.
+%
+% In any case, it is easy enough for \cmd\output@post@theindex\
+% to do this in conjunction with component marks.
+% Only the bare outlines are shown here.
+%
+% \begin{macro}{\output@init}
+% \begin{macro}{\output@prep}
+% \begin{macro}{\output@post}
+% \begin{macrocode}
+\let\output@init@theindex\@empty
+\let\output@prep@theindex\@empty
+\def\output@post@theindex{%
+ \@ifodd\c@page{}{%
+ \@ifnum{\pagegrid@cur=\@ne}{%
+% \end{macrocode}
+% We have the leftmost column of a verso page:
+% Insert the current top-level continued head.
+% \begin{macrocode}
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Checking the auxiliary file}%
+%
+% We relegate the checking of the auxiliary file to the output routine.
+% This task must wait until the last page is shipped out, because otherwise
+% the stream might get closed before the last page is shipped out.
+% Obviously, we must use \cmd\do@output@MVL\ for the job.
+%
+% \begin{macro}{\check@aux}
+% \begin{macrocode}
+\def\check@aux{\do@output@MVL{\do@check@aux}}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsection{Dealing with stuck floats and stalled float dequeueing}%
+%
+% \LaTeX's float placement mechanism is fundamentally flawed, as evidenced by
+% its warning message ``too many unprocessed floats'', which users understandably find frustrating.
+% The \classname{ltxgrid} package provides tools for ameliorating the situation somewhat.
+%
+% Two cases require detection and rectification:
+% \begin{enumerate}
+% \item
+% A float is ``stuck'' in the \cmd\@deferlist: for whatever reason, the float fails to be committed,
+% even at the start of a fresh page.
+% Once this condition prevails, following floats can never be committed, subsequently all of \LaTeX's
+% float registers are used up.
+%
+% If this condition is detected, we reconsider float dequeueing under permissive (\cmd\clearpage-style) processing.
+%
+% \item
+% The \cmd\@freelist\ is exhausted:
+% a large concentration of floats, say, uses up all of \LaTeX's float registers all at once.
+% This condition commonly occurs when the user collects floats at the end of the document, for some reason.
+%
+% When a float is encountered, \LaTeX\ uses a float register (allocated from a pool of free registers) to contain it until it can be placed.
+% However, no further action is taken until the pagebuilder is visited, so floats can accumulate.
+% Also, even after the pagebuilder is visited, deferred floats can accumulate, and these are not committed
+% until a column (or page) of text is completed.
+%
+% Once the last free float register is used, action should be taken that will commit some of the deferred floats,
+% even if this might require ending the page right where we are (resulting in a short page).
+%
+% Perhaps, committed floats should be stored using some mechanism other than a list, as is currently done.
+% A feasible alternative storage method would be to use a \cmd\box\ register in place of
+% \cmd\@toplist,
+% \cmd\@botlist, and
+% \cmd\@dbltoplist.
+% This is probably just fine, since such committed floats are not reconsidered (I think).
+%
+% \end{enumerate}
+%
+% The emergency processing implemented here immediately ends the current page and begins to output float pages under (\cmd\clearpage-style) rules.
+% It proceeds until all deferred floats have been flushed.
+%
+% Users should expect non-optimal page makeup under these circumstances.
+%
+% Note that there is a weakness in our approach that we have not attempted to repair: if floats are being
+% added as part of a paragraph, we will not be able to take these remedial steps until the paragraph ends.
+% This means that the approach implemented here cannot fix all \LaTeX\ documents. Users can still construct
+% documents that exhaust \LaTeX's pool of float registers!
+%
+% \begin{macro}{\check@deferlist@stuck}
+% \begin{macro}{\@outputpage@tail}
+% \changes{4.1b}{2008/08/04}{Procedure \cs{@outputpage@tail} tailpatches \cs{@outputpage}}%
+% We detect the case where, at the start of a fresh page, there are deferred floats, but none are
+% committed. We memorize the \cmd\@deferlist\ at \cmd\shipout\ time, then examine it at the point where
+% our efforts to commit floats to the new page are complete.
+% If it has not changed, the first float must be stuck, and we
+% attempt to fix things via \cmd\force@deferlist@stuck.
+%
+% This simple approach is comp[letely effective in for typical documents.
+%
+% Note that we try to avoid an infinite loop by examining the value of \cmd\clearpage@sw:
+% if we come here with that boolean true, we are in a loop.
+% \begin{macrocode}
+\def\check@deferlist@stuck#1{%
+ \@ifx{\@deferlist@postshipout\@empty}{}{%
+ \@ifx{\@deferlist@postshipout\@deferlist}{%
+ \@fltstk
+ \clearpage@sw{%
+ \ltxgrid@warn{Deferred float stuck during \string\clearpage\space processing}%
+ }{%
+ \force@deferlist@stuck#1%
+ }%
+ }{%
+% \end{macrocode}
+% We have successfully committed float(s)
+% \begin{macrocode}
+ }%
+ \global\let\@deferlist@postshipout\@empty
+ }%
+}%
+\def\@fltstk{%
+ \@latex@warning{A float is stuck (cannot be placed without \string\clearpage)}%
+}%
+\appdef\@outputpage@tail{%
+ \global\let\@deferlist@postshipout\@deferlist
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@next}
+% \begin{macro}{\@xnext}
+% We rewrite the \LaTeX\ kernel macros that dequeue float registers from, e.g., \cmd\@deferlist,
+% providing a test for the condition where the pool of free registers is about to underflow.
+%
+% In this case, we attempt to fix things via \cmd\force@deferlist@empty.
+% \begin{macrocode}
+\def\@next#1#2{%
+ \@ifx{#2\@empty}{\false@sw}{%
+ \expandafter\@xnext#2\@@#1#2%
+ \true@sw
+ }%
+}%
+\def\@xnext\@elt#1#2\@@#3#4{%
+ \def#3{#1}%
+ \gdef#4{#2}%
+ \def\@tempa{#4}\def\@tempb{\@freelist}%
+ \@ifx{\@tempa\@tempb}{%
+ \@ifx{#4\@empty}{%
+ \force@deferlist@empty%{Float register pool exhausted}%
+ }{}%
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\force@deferlist@stuck}
+% \begin{macro}{\force@deferlist@empty}
+% \begin{macro}{\force@deferlist@sw}
+% \begin{macro}{\do@forcecolumn@pen}
+% \begin{macro}{\do@forcecolumn}
+% The procedure \cmd\force@deferlist@empty\ is an attempt to rectify a situation where \LaTeX's float placement mechanism
+% may fail (``too many unprocessed floats'').
+%
+% We put down interrupts that call for the float placement to be redone, but under permissive conditions,
+% just the same as if \cmd\clearpage\ had been invoked.
+%
+% Note that the attempt to rectify the error is contingent on the setting of \cmd\force@deferlist@sw,
+% default false. A document class using this package that wishes to enable this error recovery mechanism should
+% set this boolean to true.
+%
+% The interrupt \cmd\do@forcecolumn@pen, which invokes the procedure \cmd\do@forcecolumn,
+% does the same as \cmd\do@startcolumn, except under permissive conditions:
+% we are trying to empty out the float registers completely.
+%
+% In order to properly with the case where there is material in \cmd\box\cmd\@cclv,
+% \cmd\@toplist, \cmd\@botlist, \cmd\@dbltoplist, etc,
+% we do what amounts to \cmd\newpage\ to get things rolling.
+%
+% In \cmd\force@deferlist@stuck, we take advantage of already being in the output routine:
+% simply reinvoke \cmd\do@startcolumn\ under permissive conditions.
+%
+% \begin{macrocode}
+\def\force@deferlist@stuck#1{%
+ \force@deferlist@sw{%
+ \@booleantrue\clearpage@sw
+ \@booleantrue\forcefloats@sw
+ #1%
+ }{%
+ }%
+}%
+\def\force@deferlist@empty{%
+ \force@deferlist@sw{%
+ \penalty-\pagebreak@pen
+ \protect@penalty\do@forcecolumn@pen
+ }{%
+ }%
+}%
+\@booleanfalse\force@deferlist@sw
+\mathchardef\do@forcecolumn@pen=10009
+\@namedef{output@-\the\do@forcecolumn@pen}{\do@forcecolumn}%
+\def\do@forcecolumn{%
+ \@booleantrue\clearpage@sw
+ \@booleantrue\forcefloats@sw
+% \end{macrocode}
+% \begin{verbatim}
+%\unvbox\@cclv
+%\vfil
+%\penalty-\pagebreak@pen
+% \end{verbatim}
+% \begin{macrocode}
+ \do@startcolumn
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% A more thorough revision of \LaTeX's float placement mechanism would involve substituting a single \cmd\box\
+% register for the \cmd\@deferlist. This way, \LaTeX's ability to have latent floats would be limited by
+% box memory alone.
+%
+% Because only the \cmd\box\ and \cmd\count\ components of the float box register are actually used by \LaTeX,
+% our scheme can be accomplished if we can find a way to encode the information held in the \cmd\count\ component.
+%
+% A first-in, first-out mechanism exists, wherein a box-penalty pair is dequeued by \cmd\lastbox\cmd\lastpenalty\cmd\unpenalty\ and enqueued
+% by \cmd\setbox\cmd\foo=\cmd\hbox\cmd\bgroup\cmd\penalty\cmd\floatpenalty\cmd\box\cmd\floatbox\cmd\unhbox\cmd\foo\cmd\egroup.
+%
+% Note that this scheme is made possible by our change to \LaTeX's float placement mechanism,
+% wherein we consolidated the two \cmd\@deferlist s into one.
+%
+% \section{Support for legacy \LaTeX\ commands}
+%
+% We provide support for the \cmd\enlargethispage\ command.
+%
+% Note: using a command of this sort does not automatically enlarge both pages of a spread, which would be the convention in page composition.
+%
+% Timing Note: In a multicolumn page grid, the user should issue the \cmd\enlargethispage\ command
+% while the first column of the page is being typeset.
+% We provide a helpful message if the timing is wrong.
+%
+% This code can serve as a model for introducing commands that need to execute within the safety of the output routine.
+% We ensure that the arguments are fully expanded, then execute \cmd\do@output@MVL\ to cause an output procedure,
+% \cmd\@@enlargethispage, to execute. When it does execute, the MVL will be exposed.
+%
+% The \cmd\@@enlargethispage\ procedure simply adjusts the vertical dimensions of the page.
+% The adjustment will persist until the column is committed, at which point the page dimension
+% will revert to its standard value.
+% \begin{macrocode}
+\def\enlargethispage{%
+ \@ifstar{%
+ \@enlargethispage{}%
+ }{%
+ \@enlargethispage{}%
+ }%
+}%
+\def\@enlargethispage#1#2{%
+ \begingroup
+ \dimen@#2\relax
+ \edef\@tempa{#1}%
+ \edef\@tempa{\noexpand\@@enlargethispage{\@tempa}{\the\dimen@}}%
+ \expandafter\do@output@MVL\expandafter{\@tempa}%
+ \endgroup
+}%
+\def\@@enlargethispage#1#2{%
+ \def\@tempa{one}%
+ \@ifx{\thepagegrid\@tempa}{%
+ \true@sw
+ }{%
+ \def\@tempa{mlt}%
+ \@ifx{\thepagegrid\@tempa}{%
+ \@ifnum{\pagegrid@cur=\@ne}{%
+% \end{macrocode}
+% OK to adjust this page
+% \begin{macrocode}
+ \gdef\enlarge@colroom{#2}%
+ \true@sw
+ }{%
+% \end{macrocode}
+% Can only adjust this column; give up
+% \begin{macrocode}
+ \ltxgrid@warn{Too late to enlarge this page; move the command to the first column.}%
+ \false@sw
+ }%
+ }{%
+% \end{macrocode}
+% Unknown page grid
+% \begin{macrocode}
+ \ltxgrid@warn{Unable to enlarge a page of this kind.}%
+ \false@sw
+ }%
+ }%
+ {%
+ \class@info{Enlarging page \thepage\space by #2}%
+ \global\advance\@colroom#2\relax
+ \set@vsize
+ }{%
+% \end{macrocode}
+% Could not adjust this page
+% \begin{macrocode}
+ }%
+}%
+\let\enlarge@colroom\@empty
+% \end{macrocode}
+% The \cmd\@kludgeins\ insert register is now unneeded.
+% Ensure that packages using this mechanism break (preferrable to subtle bugs).
+% \begin{macrocode}
+\let\@kludgeins\@undefined
+% \end{macrocode}
+%
+% \subsubsection{Building the page for shipout}
+%
+% \begin{macro}{\@outputpage@head}
+% We set \cmd\@outputpage@head\ to make the \cmd\@outputbox\ be of fixed height.
+% \changes{4.1b}{2008/08/04}{Procedure \cs{@outputpage@head} headpatches \cs{@outputpage}}%
+% \begin{macrocode}
+\@booleantrue\textheight@sw
+\prepdef\@outputpage@head{%
+ \textheight@sw{%
+ \count@\vbadness\vbadness\@M
+ \dimen@\vfuzz\vfuzz\maxdimen
+ \setbox\@outputbox\vbox to\textheight{\unvbox\@outputbox}%
+ \vfuzz\dimen@
+ \vbadness\count@
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@outputpage@head}
+% For compatibility with David Carlisle's \classname{lscape} package, we need to allow the
+% \cmd\LS@rot\ procedure to mung \cmd\@outputbox.
+%
+% Implementation note: the \classname{lscape} package effectively tailpatches two \LaTeX\ internals to accomplish its purpose,
+% an approach that is not robust. It is more robust to headpatch \cmd\@outputpage, which is what we do here.
+% \changes{4.1o}{2010/02/02}{(AO, 576) Allow \classname{lscape} to act on \cs{@outputbox} at the right time}%
+% \begin{macrocode}
+\appdef\@outputpage@head{%
+ \@ifx{\LS@rot\@undefined}{}{\LS@rot}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Warning message}
+%
+% \begin{macro}{\ltxgrid@info}
+% \begin{macro}{\ltxgrid@warn}
+% Something has happened that the user might be interested in.
+% Print a message to the log, but only if the user selected the verbose option.
+% \begin{macrocode}
+\def\ltxgrid@info{%
+ \ltxgrid@info@sw{\class@info}{\@gobble}%
+}%
+\@booleanfalse\ltxgrid@info@sw
+\def\ltxgrid@warn{%
+ \ltxgrid@warn@sw{\class@warn}{\@gobble}%
+}%
+\@booleantrue\ltxgrid@warn@sw
+\@booleanfalse\ltxgrid@foot@info@sw
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \section{Line-wise processing}%
+% Sometimes we wish to process each line of type that will be placed into the galley,
+% for example, applying line numbering to a document.
+% To accomplish the task, we have to force a visit to the output routine after each such line, whereupon
+% we can process it accordingly (in the case of line numbering, we could do as \filename{lineno.sty} and
+% append an appropriately formed box to the MVL).
+%
+% In implementing such a scheme, we will have to instantiate interrupts for the following cases:
+% \begin{description}
+%
+% \item[\cmd\interlinepenalty\ and friends] These include \cmd\clubpenalty, \cmd\widowpenalty, \cmd\displaywidowpenalty, and \cmd\brokenpenalty.
+%
+%
+% \item[Display math penalties] Includes \cmd\predisplaypenalty, \cmd\postdisplaypenalty, and \cmd\interdisplaylinepenalty.
+%
+%
+% \item[\cs{par}] The penalty following the last line of the paragraph.
+%
+%
+% \item[\cmd\vadjust] A trap for any \cmd\vadjust\ command that falls in the paragraph.
+%
+% \end{description}
+%
+% \begin{macro}{\def@next@handler}
+% \begin{macro}{\def@line@handler}
+% Utility procedures \cmd\def@next@handler\ and \cmd\def@line@handler\ help in the creation of
+% interrupt handlers.
+%
+% \cmd\def@next@handler\ increments the scratch count register (argument 1),
+% using this value to \cmd\mathchardef\ its second argument
+% as the negative of the flag value to be used as a penalty for exciting the interrupt (argument 3).
+% As a byproduct, it leaves the given scratch counter incremented.
+% \begin{macrocode}
+\def\def@next@handler#1#2#3{%
+ \advance#1\@ne\mathchardef#2\the#1%
+ \expandafter\def\csname output@-\the#1\endcsname{#3}%
+% \end{macrocode}
+% The following line is for diagnostic purposes.
+% \begin{verbatim}
+% \typeout{\string#2(\expandafter\string\csname output@\the#1\endcsname:\expandafter\meaning\csname output@\the#1\endcsname)}%
+% \end{verbatim}
+% \begin{macrocode}
+}%
+% \end{macrocode}
+% \cmd\def@line@handler\ uses \cmd\int@parpenalty\ as a base.
+% The interrupt is the sum of that base with the first argument,
+% and the handler is the second argument.
+% \begin{macrocode}
+\def\def@line@handler#1#2{%
+ \begingroup
+ \@tempcnta\int@parpenalty
+ \advance\@tempcnta-#1%
+% \end{macrocode}
+% The following line is for diagnostic purposes.
+% \begin{verbatim}
+% \typeout{Defining: \expandafter\string\csname output@\the\linenopenalty\endcsname}%
+% \end{verbatim}
+% \begin{macrocode}
+ \aftergroup\def
+ \expandafter\aftergroup\csname output@-\the\@tempcnta\endcsname
+ \endgroup{#2}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\int@parpenalty}
+% \begin{macro}{\@handle@line@ltx}
+% \begin{macro}{\@@handle@line@ltx}
+% We first set \cmd\int@parpenalty\ to our chosen base value${}\le -11012$.
+% We then define all the handlers for lines within a paragraph, of which there are 12 different cases.
+% \begin{macrocode}
+\mathchardef\int@parpenalty11012
+\def@line@handler\z@{\@handle@line@ltx{}{}{}}%
+\def@line@handler\@ne{\@handle@line@ltx{}{}{\brokenpenalty@ltx}}%
+\def@line@handler\tw@{\@handle@line@ltx{}{\clubpenalty@ltx}{}}%
+\def@line@handler\thr@@{\@handle@line@ltx{\clubpenalty@ltx}{}{\brokenpenalty@ltx}}%
+\def@line@handler\f@ur{\@handle@line@ltx{\widowpenalty@ltx}{}{}}%
+\def@line@handler{5}{\@handle@line@ltx{\widowpenalty@ltx}{}{\brokenpenalty@ltx}}%
+\def@line@handler{6}{\@handle@line@ltx{\widowpenalty@ltx}{\clubpenalty@ltx}{}}%
+\def@line@handler{7}{\@handle@line@ltx{\widowpenalty@ltx}{\clubpenalty@ltx}{\brokenpenalty@ltx}}%
+\def@line@handler{8}{\@handle@line@ltx{\displaywidowpenalty@ltx}{}{}}%
+\def@line@handler{9}{\@handle@line@ltx{\displaywidowpenalty@ltx}{}{\brokenpenalty@ltx}}%
+\def@line@handler{10}{\@handle@line@ltx{\displaywidowpenalty@ltx}{\clubpenalty@ltx}{}}%
+\def@line@handler{11}{\@handle@line@ltx{\displaywidowpenalty@ltx}{\clubpenalty@ltx}{\brokenpenalty@ltx}}%
+% \end{macrocode}
+%
+% The default handler for lines within a paragraph simply
+% restores the value of the \cmd\penalty\ to the normal value.
+% If something more useful needs to be done, we can change the definition of \cmd\@@handle@line@ltx.
+% \begin{macrocode}
+\def\@handle@line@ltx#1#2#3{%
+ \@@handle@line@ltx
+ \@tempcnta\lastpenalty
+ \@tempcntb\interlinepenalty@ltx\relax
+ \@if@empty{#1}{}{\advance\@tempcntb#1\relax}%
+ \@if@empty{#2}{}{\advance\@tempcntb#2\relax}%
+ \@if@empty{#3}{}{\advance\@tempcntb#3\relax}%
+ \penalty\@ifnum{\@tempcnta<\@tempcntb}{\@tempcntb}{\@tempcnta}%
+}%
+\let\@@handle@line@ltx\@empty
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\int@postparpenalty}
+% \begin{macro}{\int@vadjustpenalty}
+% \begin{macro}{\int@whatsitpenalty}
+% \begin{macro}{\int@predisplaypenalty}
+% \begin{macro}{\int@interdisplaylinepenalty}
+% \begin{macro}{\int@postdisplaypenalty}
+% \begin{macro}{\@handle@display@ltx}
+% \begin{macro}{\@@handle@display@ltx}
+% \begin{macro}{\handle@par@ltx}
+% We herewith define all the handlers for cases relating to display math:
+% last line before a display math,
+% last line of a display math, and a line within a display math.
+% We also handle the last line of a paragraph, a whatsit node, and a \cmd\vadjust.
+% \begin{macrocode}
+\@tempcnta\int@parpenalty
+\def@next@handler\@tempcnta\int@postparpenalty{\reset@queues@ltx\handle@par@ltx}%
+\def@next@handler\@tempcnta\int@vadjustpenalty{\handle@vadjust@ltx}%
+\def@next@handler\@tempcnta\int@whatsitpenalty{\handle@whatsit@ltx}%
+\def@next@handler\@tempcnta\int@predisplaypenalty{\reset@queues@ltx\@handle@display@ltx{\predisplaypenalty@ltx}}%
+\def@next@handler\@tempcnta\int@interdisplaylinepenalty{\@handle@display@ltx{\interdisplaylinepenalty@ltx}}%
+\def@next@handler\@tempcnta\int@postdisplaypenalty{\@handle@display@ltx{\postdisplaypenalty@ltx}}%
+% \end{macrocode}
+% The default handler for display math lines simply
+% restores the value of the \cmd\penalty\ to the normal value.
+% If something more useful needs to be done, we can change the definition of \cmd\@@handle@display@ltx.
+% \begin{macrocode}
+\def\@handle@display@ltx#1{%
+ \@@handle@display@ltx
+ \@tempcnta\lastpenalty
+ \@tempcntb#1%
+ \penalty\@ifnum{\@tempcnta<\@tempcntb}{\@tempcntb}{\@tempcnta}%
+}%
+\let\@@handle@display@ltx\@empty
+% \end{macrocode}
+%
+% We provide stub definitions for the handlers for the last line of a paragraph, a \cmd\vadjust, and a whatsit node (e.g., \cmd\write, \cmd\special).
+% There is no canonical penalty for such cases.
+% \begin{macrocode}
+\def\handle@par@ltx{}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% Note that a whatsit needs to be handled differently from a \cmd\vadjust:
+% a whatsit node does not affect the (crucial) depth of \cmd\box\cmd\@cclv, while the more
+% general \cmd\vadjust\ may cause any kind of vertical mode material to be interposed just below the line
+% we are trying to trap, in particular \cmd\vskip s and \cmd\penalty s.
+%
+% \begin{macro}{\set@linepenalties}
+% \begin{macro}{\restore@linepenalties}
+% \begin{macro}{\set@displaypenalties}
+% Now we define utility procedures that set up for a paragraph to be broken into lines,
+% restoring the penalties afterwards.
+%
+% Utility procedure \cmd\set@linepenalties\ systematically sets the penalties of paragraph breaking
+% to flag values, meanwhile storing away the normal values for access by the output routine.
+% \begin{macrocode}
+\def\set@linepenalties{%
+ \expandafter\def\expandafter\interlinepenalty@ltx\expandafter{\the\interlinepenalty}%
+ \interlinepenalty-\int@parpenalty
+ \expandafter\def\expandafter\brokenpenalty@ltx\expandafter{\the\brokenpenalty}%
+ \brokenpenalty\@ne
+ \expandafter\def\expandafter\clubpenalty@ltx\expandafter{\the\clubpenalty}%
+ \clubpenalty\tw@
+ \expandafter\def\expandafter\widowpenalty@ltx\expandafter{\the\widowpenalty}%
+ \widowpenalty\f@ur
+ \expandafter\def\expandafter\displaywidowpenalty@ltx\expandafter{\the\displaywidowpenalty}%
+ \displaywidowpenalty8\relax
+}%
+% \end{macrocode}
+%
+% Utility procedure \cmd\restore@linepenalties\ restores the values of the penalty parameters that were
+% modified by \cmd\set@linepenalties.
+% \begin{macrocode}
+\def\restore@linepenalties{%
+ \interlinepenalty\interlinepenalty@ltx
+ \brokenpenalty\brokenpenalty@ltx
+ \clubpenalty\clubpenalty@ltx
+ \widowpenalty\widowpenalty@ltx
+ \displaywidowpenalty\displaywidowpenalty@ltx
+ \relax
+}%
+% \end{macrocode}
+%
+% In the following, the first argument should be a boolean (either \cmd\true@sw\ or \cmd\false@sw).
+% \begin{macrocode}
+\def\set@displaypenalties#1{%
+ \expandafter\def\expandafter\predisplaypenalty@ltx\expandafter{\the\predisplaypenalty}%
+ \expandafter\def\expandafter\interdisplaylinepenalty@ltx\expandafter{\the\interdisplaylinepenalty}%
+ \expandafter\def\expandafter\postdisplaypenalty@ltx\expandafter{\the\postdisplaypenalty}%
+ \@ifhmode{\predisplaypenalty-\int@predisplaypenalty\relax}{}%
+ #1{\interdisplaylinepenalty-\int@interdisplaylinepenalty\relax}{}%
+ #1{\postdisplaypenalty-\int@postdisplaypenalty\relax}{}%
+}%
+% \end{macrocode}
+% We provide no procedure to restore the respective penalties, because they are altered within a group:
+% \TeX 's context stack will automatically restore things.
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\enqueue@whatsit@ltx}%
+% \begin{macro}{\handle@whatsit@ltx}%
+% \begin{macro}{\do@whatsit}%
+% \begin{macro}{\@g@pop@ltx}%
+% Here is a facility for dealing with whatsit nodes while we are trapping paragraph lines.
+% We simply enqueue a macro that will create the desired whatsit node, dequeueing it in the output routine.
+% \begin{macrocode}
+\def\enqueue@whatsit@ltx#1{%
+ \gappdef\g@whatsit@queue{{#1}}%
+ \vadjust{\penalty-\int@whatsitpenalty}%
+}%
+\def\handle@whatsit@ltx{%
+ \unvbox\@cclv
+ \g@pop@ltx\g@whatsit@queue\@tempa
+ \expandafter\do@whatsit\expandafter{\@tempa}%
+}%
+\def\do@whatsit#1{}%
+\def\g@pop@ltx#1#2{%
+ \expandafter\@g@pop@ltx#1{}{}\@@#1#2%
+}%
+\def\@g@pop@ltx#1#2\@@#3#4{%
+ \gdef#3{#2}%
+ \def#4{#1}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\vspace}%
+% \begin{macro}{\pagebreak}%
+% \begin{macro}{\nopagebreak}%
+% \begin{macro}{\\}%
+% \begin{macro}{\@arrayparboxrestore}%
+% We wish to prevent \filename{lineno.sty} from patching \cmd\vspace\ and \cmd\pagebreak,
+% because that package does it through global assignments, which is prone to failure.
+%
+% We also wish to prevent that package from patching \cmd\@arrayparboxrestore, because
+% it prevents us from \cmd\unvbox ing vertical mode material into the MVL and numbering those
+% lines.
+%
+% We start by retaining the original definitions of these commands, so we can restore them
+% if \filename{lineno.sty} does get loaded.
+% \begin{macrocode}
+\let\vspace@ltx\vspace
+\let\pagebreak@ltx\pagebreak
+\let\nopagebreak@ltx\nopagebreak
+\let\endline@ltx\\
+\let\@arrayparboxrestore@ltx\@arrayparboxrestore
+% \end{macrocode}
+%
+% Next, we provide for line-wise processing by patching the procedures associated with these same three commands.
+%
+% There are exactly four core \LaTeX\ procedures that use \cmd\vadjust\ to insert vertical mode material
+% into the main vertical list: \cmd\vspace, \cmd\pagebreak, \cmd\nopagebreak, and \cmd\\.
+% Other commands may use \cmd\vadjust, but they are inserting an interrupt (via a penalty${}<10000$),
+% and such a thing does not mask the depth of \cmd\box\cmd\@cclv, hence is permissible.
+%
+% In each case, we replace the core \LaTeX\ procedure with one that itself replaces \cmd\vadjust\ with
+% \cmd\ex@vadjust@ltx. The meaning of this procedure can be left as \cmd\vadjust, or it can be changed to
+% one that accomplishes the equivalent without masking the depth of \cmd\box\cmd\@cclv.
+%
+% The first procedure is \cmd\@vspace, here shown in original form and in the patched alternative form.
+% This procedure and \cmd\@vspacer\ implement the \cmd\vspace\ command.
+% \begin{macrocode}
+\def\@vspace@org #1{%
+ \ifvmode
+ \vskip #1
+ \vskip\z@skip
+ \else
+ \@bsphack
+ \vadjust{\@restorepar
+ \vskip #1
+ \vskip\z@skip
+ }%
+ \@esphack
+ \fi
+}%
+\def\@vspace@ltx#1{%
+ \@ifvmode{%
+ \vskip#1\vskip\z@skip
+ }{%
+ \@bsphack
+ \ex@vadjust@ltx{%
+ \@restorepar
+ \nobreak
+ \vskip#1\vskip\z@skip
+ }%
+ \@esphack
+ }%
+}%
+% \end{macrocode}
+%
+% The second procedure is \cmd\@vspacer.
+% \begin{macrocode}
+\def\@vspacer@org#1{%
+ \ifvmode
+ \dimen@\prevdepth
+ \hrule \@height\z@
+ \nobreak
+ \vskip #1
+ \vskip\z@skip
+ \prevdepth\dimen@
+ \else
+ \@bsphack
+ \vadjust{\@restorepar
+ \hrule \@height\z@
+ \nobreak
+ \vskip #1
+ \vskip\z@skip}%
+ \@esphack
+\fi
+}%
+\def\@vspacer@ltx#1{%
+ \@ifvmode{%
+ \dimen@\prevdepth
+ \hrule\@height\z@
+ \nobreak
+ \vskip#1\vskip\z@skip
+ \prevdepth\dimen@
+ }{%
+ \@bsphack
+ \ex@vadjust@ltx{%
+ \@restorepar
+ \hrule\@height\z@
+ \nobreak
+ \vskip#1\vskip\z@skip
+ }%
+ \@esphack
+ }%
+}%
+% \end{macrocode}
+%
+% The procedure \cmd\@no@pgbk\ implements both \cmd\pagebreak\ and \cmd\nopagebreak.
+% \begin{macrocode}
+\def\@no@pgbk@org #1[#2]{%
+ \ifvmode
+ \penalty #1\@getpen{#2}%
+ \else
+ \@bsphack
+ \vadjust{\penalty #1\@getpen{#2}}%
+ \@esphack
+ \fi
+}%
+\def\@no@pgbk@ltx#1[#2]{%
+ \@ifvmode{%
+ \penalty#1\@getpen{#2}%
+ }{%
+ \@bsphack
+ \ex@vadjust@ltx{%
+ \penalty#1\@getpen{#2}%
+ }%
+ \@esphack
+ }%
+}%
+% \end{macrocode}
+%
+% The command to end a line of type, \cmd\\, is defined via \cmd\DeclareRobustCommand,
+% so we must proceed carefully:
+% A procedure is defined whose \cmd\long\cmd\csname\ is contructed via the incantation:
+% \cmd\csname\cmd\expandafter\cmd\@gobble\cmd\string\cmd\\ \cmd\endcsname.
+% Note the non-trivial space character after the \cmd\\: it is incorporated into
+% the \cmd\csname.
+%
+% Here is the original core \LaTeX\ definition for
+% the procedure involved, along with our revised version.
+% \begin{macrocode}
+\long\def\end@line@org{%
+ \let\reserved@e\relax
+ \let\reserved@f\relax
+ \@ifstar{%
+ \let\reserved@e\vadjust
+ \let\reserved@f\nobreak
+ \@xnewline
+ }%
+ \@xnewline
+}%
+\long\def\end@line@ltx{%
+ \let\reserved@e\relax
+ \let\reserved@f\relax
+ \@ifstar{%
+ \let\reserved@e\ex@vadjust@ltx
+ \let\reserved@f\nobreak
+ \@xnewline
+ }{%
+ \@xnewline
+ }%
+}%
+% \end{macrocode}
+% An additional procedure requiring patching has the following original core \LaTeX\
+% definition; we modify it correspondingly.
+% \begin{macrocode}
+\def\@newline@org[#1]{%
+ \let\reserved@e\vadjust
+ \@gnewline{\vskip#1}%
+}%
+\def\@newline@ltx[#1]{%
+ \let\reserved@e\ex@vadjust@ltx
+ \@gnewline{\vskip#1}%
+}%
+% \end{macrocode}
+% We now install our patches.
+% If some package overrides these macros, we will detect and complain.
+%
+% \begin{macrocode}
+ \@ifx{\@vspace\@vspace@org}{%
+ \@ifx{\@vspacer\@vspacer@org}{%
+ \@ifx{\@no@pgbk\@no@pgbk@org}{%
+ \@ifx{\@newline\@newline@org}{%
+ \expandafter\@ifx\expandafter{\csname\expandafter\@gobble\string\\ \endcsname\end@line@org}{%
+ \true@sw
+ }{\false@sw}%
+ }{\false@sw}%
+ }{\false@sw}%
+ }{\false@sw}%
+ }{\false@sw}%
+ {%
+ \class@info{Overriding \string\@vspace, \string\@vspacer, \string\@no@pgbk, \string\@newline, and \string\\ }%
+ \let\@normalcr\end@line@ltx
+ \expandafter\let\csname\expandafter\@gobble\string\\ \endcsname\@normalcr
+ \let\@newline\@newline@ltx
+ \let\@vspace\@vspace@ltx
+ \let\@vspacer\@vspacer@ltx
+ \let\@no@pgbk\@no@pgbk@ltx
+ }{%
+ \class@warn{%
+ Failed to recognize \string\@vspace, \string\@vspacer, \string\@no@pgbk, \string\@newline, and \string\\;
+ no patches applied. Please get a more up-to-date class,
+ }%
+ }%
+% \end{macrocode}
+% Note that we have assigned the same meaning to \cmd\@normalcr, which is necessary to \LaTeX.
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ex@vadjust@ltx}
+% \begin{macro}{\enqueue@vadjust@ltx}
+% \begin{macro}{\handle@vadjust@ltx}
+% \begin{macro}{\g@vadjust@line}
+% \begin{macro}{\reset@queues@ltx}
+% Here we give the default definition for \cmd\ex@vadjust@ltx\ along with
+% the definitions for the alternative version and its the associated handler.
+% \begin{macrocode}
+\let\ex@vadjust@ltx\vadjust
+\def\enqueue@vadjust@ltx#1{%
+ \gappdef\g@vadjust@queue{{#1}}%
+ \vadjust{\penalty-\int@vadjustpenalty}%
+}%
+\def\handle@vadjust@ltx{%
+ \unvbox\@cclv
+ \g@pop@ltx\g@vadjust@queue\@tempa
+ \expandafter\gappdef\expandafter\g@vadjust@line\expandafter{\@tempa}%
+}%
+\let\g@vadjust@line\@empty
+% \end{macrocode}
+% Procedure \cmd\reset@queues@ltx\ resets the whatsit queue and the \cmd\vadjust\ queues
+% to their empty state. This should be done whenever we leave horizontal mode and
+% complete the processing of these queues: upon executing, effectively, primitive \cmd\par\
+% or interrupting a paragraph with display math.
+% \begin{macrocode}
+\def\reset@queues@ltx{%
+ \global\let\g@whatsit@queue\@empty
+ \global\let\g@vadjust@queue\@empty
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \section{Patching the lineno.sty package}
+%
+% \filename{lineno.sty} is a \LaTeX\ package that applies line numbering to a document.
+% The basic method is to give \cmd\interlinepenalty\ and like penalties such a value as
+% to force a visit to the output routine, where the line of type is given its number.
+% In order to properly measure the depth of \cmd\box\cmd\@cclv, it defers \cmd\vadjust\
+% commands that may insert \cmd\vskip\ or \cmd\penalty\ nodes.
+%
+% The implementation of that package, however, manipulates \cmd\holdinginserts\ in a dangerous
+% way: outside the safety of the output routine. It also alters the meaning of \cmd\vadjust\
+% using global assignments. We patch its code to avoid these problems. The \filename{ltxgrid}
+% package already has the needed mechanisms in place to do these jobs correctly.
+%
+% The methods we use can accomodate any values of penalties like \cmd\clubpenalty, etc:
+% we do not make assumptions about the range of values these penalty parameters could take.
+%
+%
+% \begin{macro}{\linenomathWithnumbers}
+% \begin{macro}{\linenomathNonumbers}
+% \begin{macro}{\endlinenomath}
+% \begin{macro}{\linenumberpar}
+% Here are the definitions of procedures in \filename{lineno.sty}
+% that alter \cmd\holdinginserts. They are current as of version v4.41, 2005/11/02.
+% We patch them to avoid doing this: in ltxgrid-based classes like REVTeX, the output routine properly manages \cmd\holdinginserts, so packages should not attempt to do so.
+% Also, we will want \cmd\linenumberpar\ to set \cmd\interlinepenaly\ to dispatch to \cmd\MakeLineNo.
+%
+% \begin{macrocode}
+\newcommand\linenomathWithnumbers@LN{%
+ \ifLineNumbers
+ \ifnum\interlinepenalty>-\linenopenaltypar
+ \global\holdinginserts\thr@@
+ \advance\interlinepenalty \linenopenalty
+ \ifhmode
+ \advance\predisplaypenalty \linenopenalty
+ \fi
+ \advance\postdisplaypenalty \linenopenalty
+ \advance\interdisplaylinepenalty \linenopenalty
+ \fi
+ \fi
+ \ignorespaces
+}%
+\newcommand\linenomathNonumbers@LN{%
+ \ifLineNumbers
+ \ifnum\interlinepenalty>-\linenopenaltypar
+ \global\holdinginserts\thr@@
+ \advance\interlinepenalty \linenopenalty
+ \ifhmode
+ \advance\predisplaypenalty \linenopenalty
+ \fi
+ \fi
+ \fi
+ \ignorespaces
+}%
+\def\endlinenomath@LN{%
+ \ifLineNumbers
+ \global\holdinginserts\@LN@outer@holdins
+ \fi
+ \global\@ignoretrue
+}
+\def\linenumberpar@LN{%
+ \ifvmode \@@@par \else
+ \ifinner \@@@par \else
+ \xdef\@LN@outer@holdins{\the\holdinginserts}%
+ \advance \interlinepenalty \linenopenalty
+ \linenoprevgraf \prevgraf
+ \global \holdinginserts \thr@@
+ \@@@par
+ \ifnum\prevgraf>\linenoprevgraf
+ \penalty-\linenopenaltypar
+ \fi
+ \@LN@parpgbrk
+ \global\holdinginserts\@LN@outer@holdins
+ \advance\interlinepenalty -\linenopenalty
+ \fi
+ \fi
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\class@documenthook}
+% We patch only if we recognize the definitions of all the procedures we are to patch.
+% \begin{macrocode}
+\appdef\class@documenthook{%
+ \@ifpackageloaded{lineno}{%
+ \@ifx{\linenomathWithnumbers\linenomathWithnumbers@LN}{%
+ \@ifx{\linenomathNonumbers\linenomathNonumbers@LN}{%
+ \@ifx{\endlinenomath\endlinenomath@LN}{%
+ \@ifx{\linenumberpar\linenumberpar@LN}{%
+ \true@sw
+ }{\false@sw}%
+ }{\false@sw}%
+ }{\false@sw}%
+ }{\false@sw}%
+ {%
+ \class@info{Overriding lineo.sty, restoring output routine,}%
+% \end{macrocode}
+% We commence overriding the procedures of \filename{lineno.sty}.
+% \begin{macrocode}
+ \let\linenumberpar\linenumberpar@ltx
+ \let\endlinenomath\endlinenomath@ltx
+ \expandafter\let\csname endlinenomath*\endcsname\endlinenomath@ltx
+ \let\linenomathWithnumbers\linenomathWithnumbers@ltx
+ \let\linenomathNonumbers\linenomathNonumbers@ltx
+% \end{macrocode}
+% Override \filename{lineno.sty}'s equipment for \cmd\vadjust\ and \cmd\linelabel:
+% we have existing interrupts and handlers for these purposes.
+% \begin{macrocode}
+ \let\ex@vadjust@ltx\ex@vadjust@line
+ \let\@LN@postlabel\enqueue@whatsit@ltx
+ \let\do@whatsit\write@linelabel
+% \end{macrocode}
+% Redirect handlers to those provided by \filename{lineno.sty}, and
+% give an appropriate meaning to the respective headpatch within the handlers.
+% \begin{macrocode}
+ \let\handle@par@ltx\handle@par@LN
+ \let\@@handle@line@ltx\Make@LineNo@ltx
+ \let\@@handle@display@ltx\Make@LineNo@ltx
+% \end{macrocode}
+% Next, we undo the action taken by \filename{lineno.sty} wherein it
+% took over the output routine. Instead, we service \filename{lineno.sty}
+% existing equipment of \filename{ltxgrid}.
+% We also revert the core \LaTeX\ definitions of
+% \cmd\vspace, \cmd\pagebreak, \cmd\nopagebreak, and \cmd\\,
+% which that package takes over (we have our own ways of doing these things).
+% \begin{macrocode}
+ \output@latex{\natural@output}%
+ \let\vspace\vspace@ltx
+ \let\pagebreak\pagebreak@ltx
+ \let\nopagebreak\nopagebreak@ltx
+ \let\@arrayparboxrestore\@arrayparboxrestore@ltx
+ \let\\\endline@ltx
+% \end{macrocode}
+% \changes{4.1f}{2009/07/07}{(AO, 515) Prevent line numbering within a footnote}
+% When line numbering is in effect, we must avoid any attempt to number the lines of a footnote.
+% \begin{macrocode}
+ \appdef\set@footnotefont{%
+ \let\par\@@@par
+ \let\@@par\@@@par
+ }%
+% \end{macrocode}
+% At last, we detect if the \cmd\linenumbers\ command has already been given;
+% if so, we do its assignments again, because we have changed the meaning of \cmd\linenumberpar.
+% \begin{macrocode}
+ \@if@sw\ifLineNumbers\fi{%
+ \class@info{Reinvoke \string\linenumbers}%
+ \let\@@par\linenumberpar
+ \@ifx{\@par\linenumberpar@LN}{\let\@par\linenumberpar}{}%
+ \@ifx{\par\linenumberpar@LN}{\let\par\linenumberpar}{}%
+ }{%
+ \class@info{Line numbering not turned on yet}%
+ }%
+% \end{macrocode}
+% Here ends the ``true branch'' of the patch code.
+% \begin{macrocode}
+ }{%
+% \end{macrocode}
+% If the \filename{lineno.sty} package is loaded, but we fail to patch it, notify the user.
+% \begin{macrocode}
+ \class@warn{Failed to recognize lineno.sty procedures; no patches applied. Please get a more up-to-date class.}%
+ }%
+ }{%
+% \end{macrocode}
+% \filename{lineno.sty} is not loaded, so no patches are needed.
+% \begin{macrocode}
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\linenumberpar}
+% \begin{macro}{\@linenumberpar}
+% Procedure \cmd\linenumberpar\ takes the place of \cmd\par\ when line numbering is in effect;
+% It executes the \cmd\par\ primitive if we are in vertical mode.
+% Otherwise we are in horizontal mode in the MVL and wish to end the current paragraph,
+% or we have \cmd\unvbox ed material onto the MVL.
+%
+% \begin{macrocode}
+\def\linenumberpar@ltx{\@ifvmode{\@@@par}{\@linenumberpar}}%
+% \end{macrocode}
+%
+% Procedure \cmd\@linenumberpar
+% \begin{macrocode}
+\def\@linenumberpar{%
+% \end{macrocode}
+% Prepare for our trip into the output routine by
+% saving away the current value of \cmd\prevgraf.
+% \begin{macrocode}
+ \linenoprevgraf\prevgraf
+% \end{macrocode}
+% The following will be used in the output routine dispatcher
+% to sense that we came from here.
+% \begin{macrocode}
+ \set@linepenalties
+% \end{macrocode}
+% Finally, call primitive \cmd\par\ with the signal value of \cmd\interlinepenalty\ and friends.
+% \begin{macrocode}
+ \@@@par
+% \end{macrocode}
+% We are now in vertical mode.
+% If lines of type were contributed to the MVL (non-trivial paragraph),
+% we must force another trip into the output routine to apply
+% line numbering to the last line of the paragraph.
+% \begin{macrocode}
+ \@ifnum{\prevgraf>\linenoprevgraf}{
+ \penalty-\int@postparpenalty
+ }{}%
+% \end{macrocode}
+% Execute procedure \cmd\@LN@parpgbrk, which has been set up in the
+% output routine for us to invoke here.
+%
+% \begin{macrocode}
+ \@LN@parpgbrk
+% \end{macrocode}
+% To wrap things up, we restore the original value of \cmd\interlinepenalty\ and friends.
+%
+% Query: why not employ \TeX's context stack to do the restore?
+% Would there be something wrong with executing primitive \cmd\par\ within a group?
+% \begin{macrocode}
+ \restore@linepenalties
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\linenomathWithnumbers}
+% \begin{macro}{\linenomathNonumbers}
+% Here are the patched definitions for the commands enabling
+% line numbering in display math.
+% \begin{macrocode}
+\newcommand\linenomathWithnumbers@ltx{\@linenomathnumbers@ltx\true@sw}%
+\newcommand\linenomathNonumbers@ltx{\@linenomathnumbers@ltx\false@sw}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@linenomathnumbers}
+% \begin{macro}{\endlinenomath}
+% We have just begun a display math, and any paragraph we are setting will now end.
+% We set all relevant penalties to interrupt values; in the visit to the output routine,
+% we will replace the penalty with its normal value.
+% \begin{macrocode}
+\def\@linenomathnumbers@ltx#1{%
+ \@if@sw\ifLineNumbers\fi{%
+ \set@linepenalties
+ \set@displaypenalties#1%
+ }{}%
+ \ignorespaces
+}%
+\def\endlinenomath@ltx{%
+ \global\@ignoretrue
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% We provide a handler for the last line of a paragraph.
+% \begin{macrocode}
+\def\handle@par@LN{%
+ \Make@LineNo@ltx
+% \end{macrocode}
+% After setting the line number, we arrange for an appropriate penalty to
+% be laid down after this visit to the output routine ends.
+%
+% Query: why not contribute the penalty right here in the visit to the output routine?
+% \begin{macrocode}
+ \@tempcnta\lastpenalty
+ \@ifnum{\@tempcnta=\z@}{}{%
+ \expandafter\gdef
+ \expandafter\@LN@parpgbrk
+ \expandafter{%
+ \expandafter\penalty
+ \the\@tempcnta
+% \end{macrocode}
+% When \cmd\@LN@parpgbrk\ is executed, it resets itself to the default value,
+% \cmd\@LN@screenoff@pen.
+%
+% Query: \cmd\@LN@screenoff@pen\ appears to try to restore the depth of the last box:
+% why is this being done outside the safety of the output routine?
+% \begin{macrocode}
+ \global\let\@LN@parpgbrk\@LN@screenoff@pen
+ }%
+ }%
+}%
+% \end{macrocode}
+%
+% \begin{macro}{\Make@LineNo}
+% The procedure \cmd\Make@LineNo\ sets the box containing the line number itself.
+% \begin{macrocode}
+\def\Make@LineNo@ltx{%
+ \@LN@maybe@normalLineNumber
+% \end{macrocode}
+% We measure the depth of \cmd\box\cmd\@cclv\ and unbox it.
+% At this point, it is crucial that that box have the same depth as that of the last
+% box within it.
+%
+% In the simple case, \cmd\box\cmd\@cclv\ is
+% a \cmd\vbox\ containing as its last box the \cmd\hbox\ of the paragraph we are processing.
+%
+% Query: under what circumstances will this \emph{not} be the case?
+% \begin{macrocode}
+ \boxmaxdepth\maxdimen\setbox\z@\vbox{\unvbox\@cclv}%
+ \@tempdima\dp\z@
+ \unvbox\z@
+% \end{macrocode}
+% Then we create the box with the line number, setting its height to zero.
+% \begin{macrocode}
+ \sbox\@tempboxa{\hb@xt@\z@{\makeLineNumber}}%
+ \ht\@tempboxa\z@
+% \end{macrocode}
+% With these preparations, we invoke \cmd\@LN@depthbox, which
+% lays that box down (with its depth appropriately set):
+% this procedure depends on our having set \cmd\@tempdima\ and \cmd\@tempboxa
+% (kinda kludgy way of passing arguments, really).
+% \begin{macrocode}
+ \@LN@depthbox
+% \end{macrocode}
+% Now increment the line number. I have relocated this token past \cmd\@LN@depthbox:
+% this may induce a bug, but I am going to hereby force the issue:
+% why split up the procedure that lays down boxes with a procedure that sets a register value?
+% \begin{macrocode}
+ \stepLineNumber
+% \end{macrocode}
+% Finally, execute the \cmd\vadjust s that fell within the line that we just handled.
+%
+% Note that \cmd\enqueue@vadjust@ltx\ had queued up all the \cmd\vadjust\ commands for the paragraph
+% into \cmd\g@vadjust@queue, laying down an (\cmd\int@vadjustpenalty) interrupt in each ones' place.
+% The interrupts associated with this line of the paragraph have now moved the tokens to \cmd\g@vadjust@line,
+% which we now expand and execute.
+% \begin{macrocode}
+ \g@vadjust@line
+ \global\let\g@vadjust@line\@empty
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\write@linelabel#1{%
+ \protected@write\@auxout{}{%
+ \string\newlabel{#1}{{\theLineNumber}{\thepage}{}{}{}}%
+ }%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\ex@vadjust@line{%
+ \@if@sw\ifLineNumbers\fi{\enqueue@vadjust@ltx}{\vadjust}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% Note that the \cmd\linelabel\ commands use a mechanism different from \cmd\vadjust,
+% embodied in the procedure \cmd\enqueue@vadjust@ltx, wherein the
+% \cmd\write\ primitives are enqueued while the paragraph is being processed, each replaced with
+% an interrupt, then dequeued and executed by the interrupt handler, leaving a \cmd\write\ node
+% in place of the interrupt (just where the \cmd\vadjust 's vertical mode material would had been)
+% just below the box containing the line of type. This \cmd\write, like all whatsits,
+% does not affect the depth of \cmd\box\cmd\@cclv, unlike the case of general vertical mode material,
+% which could have interfered.
+%
+% \section{End of the \file{ltxgrid} {\sc docstrip} module}
+% Here ends the module.
+% \begin{macrocode}
+%</kernel>
+% \end{macrocode}
+%
+% \Finale
+% %Here ends the programmer's documentation.
+% \endinput
+%
+\endinput
+%%EOF
diff --git a/obsolete/macros/latex/contrib/revtex4-1/source/latex/revtex/ltxutil.dtx b/obsolete/macros/latex/contrib/revtex4-1/source/latex/revtex/ltxutil.dtx
new file mode 100644
index 0000000000..8281ee845c
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/source/latex/revtex/ltxutil.dtx
@@ -0,0 +1,4326 @@
+% \iffalse meta-comment balanced on line 107
+% ltxutil.dtx: utilities package
+% Copyright (c) 2009 Arthur Ogawa
+%
+% Disclaimer
+% This file is distributed WITHOUT ANY WARRANTY;
+% without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+% License
+% You may distribute this file under the conditions of the
+% LaTeX Project Public License 1.3 or later
+% (http://www.latex-project.org/lppl.txt).
+% ReadMe
+% For the documentation and more detailed instructions for
+% installation, typeset this document with \LaTeX.
+% Maintenance Status
+% This work has the LPPL maintenance status "maintained";
+% Current Maintainer of this work is Arthur Ogawa.
+%
+% This work consists of the main source file ltxutil.dtx
+% and the derived files
+% ltxutil.sty, ltxutil.pdf
+% Distribution:
+% CTAN:macros/latex/contrib/revtex/
+%
+% Unpacking:
+% tex ltxutil.dtx
+%
+% Documentation:
+% latex ltxutil.dtx; ...
+%
+% Program calls to get the documentation (example):
+% pdflatex ltxutil.dtx
+% makeindex -s gind.ist ltxutil.idx
+% makeindex -s gglo.ist -o ltxutil.gls ltxutil.glo
+% pdflatex ltxutil.dtx
+% makeindex -s gind.ist ltxutil.idx
+% pdflatex ltxutil.dtx
+%
+% Installation:
+% TDS:doc/latex/revtex/
+% TDS:source/latex/revtex/
+% TDS:tex/latex/revtex/
+%
+% Thanks, Heiko!
+% This method of letting a single .dtx file serve as both
+% documentation (via latex) and installer (via tex) follows
+% the example of Heiko Oberdiek. Thanks!
+%<*ignore>
+\begingroup
+ \def\x{LaTeX2e}%
+\expandafter\endgroup
+\ifcase
+ 0\expandafter\ifx\csname processbatchFile\endcsname\relax\else1\fi\ifx\fmtname\x\else 1\fi
+ \relax
+\else
+ \csname fi\endcsname
+%</ignore>
+%<*install>
+\input docstrip
+\preamble
+
+This is a generated file;
+altering it directly is inadvisable;
+instead, modify the original source file.
+See the URL in the file 00readme.tex.
+
+License
+ You may distribute this file under the conditions of the
+ LaTeX Project Public License 1.3 or later
+ (http://www.latex-project.org/lppl.txt).
+
+ This file is distributed WITHOUT ANY WARRANTY;
+ without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE.
+
+\endpreamble
+\askforoverwritefalse
+\keepsilent
+ \generate{%
+ %{ignore}
+ \file{ltxutil.sty}{%
+ \from{ltxutil.dtx}{package,kernel}%
+ }%
+ \file{ltxutil.krn}{%
+ \from{ltxutil.dtx}{kernel}%
+ }%
+ }%
+\ifToplevel{
+\Msg{***********************************************************}
+\Msg{*}
+\Msg{* To finish the installation, please move}
+\Msg{* ltxutil.sty}
+\Msg{* into a directory searched by TeX;}
+\Msg{* in a TDS-compliant installation:}
+\Msg{* texmf/tex/macros/latex/revtex/.}
+\Msg{*}
+\Msg{* To produce the documentation,
+ run ltxutil.dtx through LaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing}
+\Msg{***********************************************************}
+}
+\endbatchfile
+%</install>
+%<*ignore>
+\fi
+%</ignore>
+% \fi
+%
+% \GetFileInfo{ltxutil.dtx}\CheckSum{4291}
+%
+% \iffalse ltxdoc klootch
+%<*package>
+%%% @LaTeX-file{
+%%% filename = "ltxutil.dtx",
+%%% version = "4.1r",
+%%% date = "2010/07/25",
+%%% time = "20:33:00 UT-8",
+%%% checksum = "4094",
+%%% author = "Arthur Ogawa (mailto:arthur_ogawa at sbcglobal.net),
+%%% commissioned by the American Physical Society.
+%%% ",
+%%% copyright = "Copyright (C) 1999, 2009 Arthur Ogawa,
+%%% distributed under the terms of the
+%%% LaTeX Project Public License, see
+%%% ftp://ctan.tug.org/macros/latex/base/lppl.txt
+%%% ",
+%%% address = "Arthur Ogawa,
+%%% USA",
+%%% telephone = "",
+%%% FAX = "",
+%%% email = "mailto colon arthur_ogawa at sbcglobal.net",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "latex, page grid, main vertical list",
+%%% supported = "yes",
+%%% abstract = "utilities package",
+%%% docstring = "The checksum field above generated by ltxdoc",
+%%% }
+%</package>
+% \fi
+%
+% \iffalse ltxdoc klootch
+% The following references the \file{00readme} file,
+% which contains basic information about this package.
+% The contents of this file are generated when
+% you typeset the programmer's documentation.
+% Search on "{filecontents*}{00readme}" to locate it.
+% \fi\input{00readme}%
+%
+% \subsection{Bill of Materials}
+%
+% Following is a list of the files in this distribution arranged
+% according to provenance.
+%
+% \subsubsection{Primary Source}%
+% One single file generates all.
+%\begin{verbatim}
+%ltxutil.dtx
+%\end{verbatim}
+%
+% \subsubsection{Generated by \texttt{latex ltxutil.dtx}}%
+% Typesetting the source file under pdflatex
+% generates the readme and the documentation.
+%\begin{verbatim}
+%00readme ltxutil.pdf
+%\end{verbatim}
+%
+% \subsubsection{Generated by \texttt{tex ltxutil.dtx}}%
+% Typesetting this file with \TeX\ generates
+% the package file.
+%\begin{verbatim}
+%ltxutil.sty
+%\end{verbatim}
+%
+% \subsubsection{Auxiliary}%
+% The following are auxiliary files generated
+% in the course of running \LaTeX:
+% \begin{verbatim}
+%ltxutil.aux ltxutil.idx ltxutil.ind ltxutil.log ltxutil.toc
+% \end{verbatim}
+%
+% \section{Code common to all modules}%
+%
+% We want to require only one place in this file
+% where the version number is stated,
+% and we also want to ensure that the version
+% number is embedded into every generated file.
+%
+% Now we declare that
+% these files can only be used with \LaTeXe.
+% An appropriate message is displayed if
+% a different \TeX{} format is used.
+% \begin{macrocode}
+%<*doc|package>
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]%
+%</doc|package>
+% \end{macrocode}
+% As desired, the following modules all
+% take common version information:
+% \begin{macrocode}
+%<kernel&!package&!doc>\typeout{%
+%<*package|doc>
+\ProvidesFile{%
+%</package|doc>
+%<*kernel|package|doc>
+ltxutil%
+%</kernel|package|doc>
+%<*doc>
+.dtx%
+%</doc>
+%<package>.sty%
+%<*package|doc>
+}%
+%</package|doc>
+% \end{macrocode}
+%
+% The following line contains, for once and for all,
+% the version and date information.
+% By various means, this information is reproduced
+% consistently in all generated files and in the
+% typeset documentation.
+% Give credit where due.
+% \begin{macrocode}
+%<*doc|package|kernel>
+%<version>
+ [2010/07/25/20:33:00 4.1r utilities package (portions licensed from W. E. Baxter web at superscript.com)]% \fileversion
+%</doc|package|kernel>
+%<kernel&!package&!doc>}%
+% \end{macrocode}
+%
+%
+% \section{The driver module \texttt{doc}}
+%
+% This module, consisting of the present section,
+% typesets the programmer's documentation,
+% generating the \file{00readme} as required.
+%
+% Because the only uncommented-out lines of code at the beginning of
+% this file constitute the \file{doc} module itself,
+% we can simply typeset the \file{.dtx} file directly,
+% and there is thus rarely any need to
+% generate the ``doc'' {\sc docstrip} module.
+% Module delimiters are nonetheless required so that
+% this code does not find its way into the other modules.
+%
+% The \enve{document} command concludes the typesetting run.
+%
+% \begin{macrocode}
+%<*doc>
+% \end{macrocode}
+%
+% \subsection{The Preamble}
+% The programmers documentation is formatted
+% with the \classname{ltxdoc} class with local customizations,
+% and with the usual code line indexing.
+% \begin{macrocode}
+\documentclass{ltxdoc}
+\RequirePackage{ltxdocext}%
+\let\url\undefined
+\RequirePackage[colorlinks=true,linkcolor=blue]{hyperref}%
+\expandafter\ifx\csname package@font\endcsname\@undefined\else
+ \expandafter\RequirePackage\expandafter{\csname package@font\endcsname}%
+\fi
+\CodelineIndex\EnableCrossrefs % makeindex -s gind.ist ltxutil
+\RecordChanges % makeindex -s gglo.ist -o ltxutil.gls ltxutil.glo
+% \end{macrocode}
+%
+% \subsubsection{Docstrip and info directives}
+% We use so many {\sc docstrip} modules that we set the
+% \texttt{StandardModuleDepth} counter to 1.
+% \begin{macrocode}
+\setcounter{StandardModuleDepth}{1}
+% \end{macrocode}
+% The following command retrieves the date and version information
+% from this file.
+% \begin{macrocode}
+\expandafter\GetFileInfo\expandafter{\jobname.dtx}%
+% \end{macrocode}
+%
+% \subsection{The ``Read Me'' File}
+% As promised above, here is the contents of the
+% ``Read Me'' file. That file serves a double purpose,
+% since it also constitutes the beginining of the
+% programmer's documentation. What better thing, after
+% all, to have appear at the beginning of the
+% typeset documentation?
+%
+% A good discussion of how to write a ReadMe file can be found in
+% Engst, Tonya, ``Writing a ReadMe File? Read This''
+% \emph{MacTech} October 1998, p. 58.
+%
+% Note the appearance of the
+% \cmd\StopEventually\ command, which marks the
+% dividing line between the user documentation
+% and the programmer documentation.
+%
+% The usual user will not be asked to
+% do a full build, not to speak
+% of the bootstrap.
+% Instructions for carrying out these procedures
+% begin the programmer's manual.
+%
+% \begin{macrocode}
+\begin{filecontents*}{00readme}
+\title{%
+ A \LaTeX\ Package of utility macros%
+ \thanks{%
+ This file has version number \fileversion,
+ last revised \filedate.%
+ }%
+ \thanks{%
+ Version \fileversion\ \copyright\ 2009 The American Physical Society
+ }%
+}%
+\author{%
+ Arthur Ogawa%
+ \thanks{\texttt{mailto:arthur\_ogawa at sbcglobal.net}}%
+}%
+%\iffalse
+% For version number and date,
+% search on "\fileversion" in the .dtx file,
+% or see the end of the 00readme file.
+%\fi
+\maketitle
+
+This file embodies the \classname{ltxutil} package,
+the implementation and its user documentation.
+
+The distribution point for this work is
+\url{publish.aps.org/revtex},
+which contains prebuilt runtime files, documentation, and full source,
+ready to add to a TDS-compliant \TeX\ installation.
+
+The \classname{ltxutil} package was commissioned by the American Physical Society
+and is distributed under the terms of the \LaTeX\ Project Public License,
+the same license under which all the portions of \LaTeX\ itself are distributed.
+Please see \url{http://ctan.tug.org/macros/latex/base/lppl.txt} for details.
+
+To use this document class, you must have a working
+\TeX\ installation equipped with \LaTeXe\
+and possibly pdftex and Adobe Acrobat Reader or equivalent.
+
+To install, retrieve the distribution,
+unpack it into a directory on the target computer,
+and move the file \file{ltxutil.sty}
+into a location in your filesystem where it will be found by \LaTeX.
+
+To use, read the user documentation \file{ltxutil.pdf}.
+
+\tableofcontents
+
+\section{Processing Instructions}
+
+The package file \file{ltxutil.sty}
+is generated from this file, \file{ltxutil.dtx},
+using the {\sc docstrip} facility of \LaTeX
+via |tex ltxutil.dtx| (Note: do \emph{not} use \LaTeX\ for this task).
+The typeset documentation that you are now reading is generated from
+the same file by typesetting it with \LaTeX\ or pdftex
+via |latex ltxutil.dtx| or |pdflatex ltxutil.dtx|.
+
+\subsection{Build Instructions}
+
+You may bootstrap this suite of files solely from \file{ltxutil.dtx}.
+Prepare by installing \LaTeXe\ (and either tex or pdftex) on your computer,
+then carry out the following steps:
+\begin{enumerate}
+\item
+Within an otherwise empty directory,
+typeset \file{ltxutil.dtx} with \LaTeX\ or pdflatex;
+you will obtain the typeset documentation you are now reading,
+along with the file \file{00readme}.
+
+Note: you will have to run \LaTeX, then
+\file{makeindex} \texttt{-s gind.ist ltxutil.idx}, then
+\file{makeindex} \texttt{-s gglo.ist -o ltxutil.gls ltxutil.glo}, then
+\LaTeX\ again in order to obtain a valid index and table of contents.
+\item
+Now typeset \file{ltxutil.dtx} with \TeX (not \LaTeX),
+thereby generating the package file \file{ltxutil.sty}.
+\item
+Install the following files into indicated locations within your
+TDS-compliant \texttt{texmf} tree (you may need root access):
+\begin{itemize}
+\item
+\file{$TEXMF/}\file{tex/}\file{latex/}\file{revtex/}\classname{ltxutil.sty}
+\item
+\file{$TEXMF/}\file{source/}\file{latex/}\file{revtex/}\classname{ltxutil.dtx}
+\item
+\file{$TEXMF/}\file{doc/}\file{latex/}\file{revtex/}\classname{ltxutil.pdf}
+\end{itemize}
+where \file{$TEXMF/} stands for \file{texmf-local/}, or some other \texttt{texmf} tree
+in your installation.
+\item
+Run \texttt{mktexlsr} on \file{$TEXMF/} (you may need root access).
+\item
+Build and installation are now complete;
+now put a \cmd\usepackage\texttt{\{ltxutil\}} in your document preamble!
+\end{enumerate}
+
+\subsection{Change Log}
+\changes{4.0b}{1999/06/20}{AO: Fixed spurious \texttt{CR} and (return) characters in output file. Also, if the document did not have the \cs{end}\texttt{figure} on a line of its own, the macro wouldn't work. Fixed.}
+\changes{4.0b}{1999/06/20}{AO: Removed superfluous \cs{def}s, changed to using \cs{floats@sw} as the flag. Also stopped using DPC's \cs{if@twocolumn} flag: using \cs{floats@sw} instead. Also added \cs{par}\cs{vskip}\cs{z@skip} after the \cs{minipagefootnotes} so that the float box would have zero depth like the kernel one. }
+\changes{4.0b}{1999/06/20}{only execute if there really were floats of the given type}
+\changes{4.0b}{1999/06/20}{Support the hack with \cs{prepdef}, and delay until \cs{AtBeginDocument} time, since \classname{hyperref} clobbers \cs{caption}.}
+\changes{4.0c}{1999/11/13}{(AO, 110) Install hooks for endfloats processing}
+\changes{4.0c}{1999/11/13}{(AO, 116) Hyperref compatibility}
+\changes{4.0c}{1999/11/13}{(AO, 130) Interference from array package}
+\changes{4.0c}{1999/11/13}{*-form mandates pagebreak at each float; only print section head if there is something there.}
+\changes{4.0d}{2000/04/10}{(AO, 127) Floats placed [h] to allow page breaks}
+\changes{4.0d}{2000/04/10}{(AO, 174) kernel fix}
+\changes{4.0d}{2000/05/19}{(AO, 224) Hyperref compatibility.}
+\changes{4.0d}{2000/05/23}{Allow things to break over pages by setting array@default.}
+\changes{4.0e}{2000/11/16}{(AO, 221) Remove samepage command from @xfloat@prep: If the float can break over pages, we want better control.}
+\changes{4.0f}{2001/07/13}{(AO, 404) Hyperref compatibility}
+\changes{4.1a}{2008/01/19}{(AO, 459) do not assume \cs{class@name} is defined}%
+\changes{4.1a}{2008/01/19}{(AO, 461) Change the csname from \cs{@dotsep} to \cs{ltxu@dotsep}. The former is understood in mu. (What we wanted was a dimension.)}%
+\changes{4.1a}{2008/01/19}{(AO, 475) I had not properly reproduced the LaTeX macro \cs{eqnarray}.}%
+\changes{4.1a}{2008/01/19}{(AO, 479) Per: Dylan Thurston<dpt at math.harvard.edu>}%
+\changes{4.1a}{2008/06/30}{(AO) Make \cs{addtocontents} a \cs{long} \cs{def}; gobble up \cs{footnote}}%
+\changes{4.1a}{2008/06/30}{(AO) Remove code that avoided changes to \cs{@xfootnotemark}}%
+\changes{4.1a}{2008/06/30}{(AO, 438) Complete rewrite of footnote macros.}
+\changes{4.1a}{2008/07/07}{\cs{@xfloat@prep} calls \cs{ltx@footnote@pop} to restore the original \cs{ltx@footmark} and \cs{ltx@foottext} procedures, in case footnote processing has switched.}
+\changes{4.1a}{2008/08/12}{\cs{class@documenthook} is the last \cs{AtBeginDocument} token now}
+\changes{4.1a}{2008/08/12}{Class extension mechanism \cs{@pushfilename@ltx} and \cs{@p@pfilename@ltx}.}
+\changes{4.1a}{2008/08/12}{Class extension mechanism \cs{class@extension}, \cs{class@extensionfile}, and \cs{class@ext@hook}.}
+\changes{4.1a}{2008/08/12}{Get rid of \cs{set@typesize@hook} \cs{set@pica@hook} and the \cs{normalsize} directive}%
+\changes{4.1b}{2008/08/12}{(AO, 487) Support for video figures and the \cs{setfloatlink} command}%
+\changes{4.1b}{2008/08/12}{(AO, 505) try to accommodate \classname{colortbl}.}
+\changes{4.1b}{2008/08/12}{Acquire \classname{hyperref} savoire}
+\changes{4.1b}{2008/08/12}{Default assignment of \cs{float@sw} now, not at \cs{AtBeginDocument} time.}%
+\changes{4.1b}{2008/08/12}{If class option \classoption{lengthcheck} is in effect, log the height of this float class.}
+\changes{4.1b}{2008/08/12}{No need to protect against undefined \cs{float@sw}}
+\changes{4.1b}{2008/08/12}{Patch the array package even later: after all package patches go in.}
+\changes{4.1b}{2008/08/12}{Refine toc processing: provide default.}%
+\changes{4.1b}{2008/08/12}{Tally and log the height of a float class}
+\changes{4.1d}{2009/03/27}{(AO, 511) Compatability with lineno.sty's erroneous way of detecting fleqn.clo}%
+\changes{4.1f}{2009/07/07}{(AO, 515) Hook for setting the font of a footnote}
+\changes{4.1f}{2009/07/10}{(AO, 518) Tally register overflow when locument is long}
+\changes{4.1g}{2009/10/06}{(AO, 532) Both arguments of \cs{href} get sanitized}%
+\changes{4.1g}{2009/10/07}{(AO, 525) Remove phantom paragraph above display math that is given in vertical mode}%
+\changes{4.1g}{2009/10/07}{(AO, 539) Use of double-backslash in argument of \cs{section} gives error. The \classname{textcase} package is involved.}%
+\changes{4.1n}{2009/12/05}{(AO, 569) Use of \classname{hyperref} interferes with column balancing of last page}%
+\changes{4.1n}{2009/12/06}{(AO) Incorporate change to ltmiscen.dtx v1.1i 2000/05/19}%
+\changes{4.1n}{2009/12/09}{(AO, 569) execute \classname{atveryend}'s \cs{Call@AfterLastShipout} at the proper time}%
+\changes{4.1n}{2009/12/13}{(AO, 574) protect against \classname{lineno.sty}, which forces a visit to the output routine, which appears to destroy the value of \cs{@tempdima}}%
+\changes{4.1n}{2010/01/02}{(AO, 571) Interface \cs{set@footnotewidth} for determining the set width of footnotes}%
+\changes{4.1n}{2010/01/02}{(AO, 571) allow split after last line of footnote}%
+\changes{4.1n}{2010/01/06}{(AO, 572) title block footnotes numbered independently from body footnotes}%
+\changes{4.1p}{2010/02/24}{(AO, 582) A patch of \classname{hyperref.sty} to provide backward compatibility to \TeX Live 2007's version 6.75r}%
+
+
+\end{filecontents*}
+% \end{macrocode}
+%
+% \subsection{The Document Body}
+%
+% Here is the document body, containing only a
+% \cmd\DocInput\ directive---referring to this very file.
+% This very cute self-reference is a common \classname{ltxdoc} idiom.
+% \begin{macrocode}
+\begin{document}%
+\expandafter\DocInput\expandafter{\jobname.dtx}%
+\end{document}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</doc>
+% \end{macrocode}
+%
+% \section{Using this package}
+% Once this package is installed on your filesystem, you can employ it in
+% adding functionality to \LaTeX\ by invoking it in your document or document class.
+%
+% \subsection{Invoking the package}
+% In your document, you can simply call it up in your preamble:
+% \begin{verbatim}
+%\documentclass{book}%
+%\usepackage{ltxutil}%
+%\begin{document}
+%<your document here>
+%\end{document}\end{verbatim}
+% However, the preferred way is to invoke this package from within your
+% customized document class:
+% \begin{verbatim}
+%\NeedsTeXFormat{LaTeX2e}[1995/12/01]%
+%\ProvidesClass{myclass}%
+%\RequirePackage{ltxutil}%
+%\LoadClass{book}%
+%<class customization commands>
+%\endinput\end{verbatim}
+%
+% Once loaded, the package gives you acccess to certain procedures,
+% usually to be invoked by a \LaTeX\ command or environment, but not at the document level.
+%
+%
+% \section{Compatibility with \LaTeX's Required Packages}
+% Certain packages, usually ones written by members of the
+% \LaTeX\ Project itself, have been designated ``required'' and
+% are distributed as part of standard \LaTeX.
+% These packages have been placed in a priviledged position
+% vis \'a vis the \LaTeX\ kernel in that they override the definitions of certain kernel macros.
+%
+% The \classname{ltxutil} package will be incompatible with any package that
+% redefines any of the kernel macros that \classname{ltxutil} patches---if that
+% package is loaded \emph{after} \classname{ltxutil}. This means that for
+% greatest compatibility, \classname{ltxutil} should be loaded \emph{after},
+% say, \classname{ftnright}, which overwrites \LaTeX's kernel
+% procedures \cmd\@outputdblcol, \cmd\@startcolumn, and \cmd\@makecol.
+%
+% Hereinafter follows some notes on specific \LaTeX\ packages.
+%
+% \subsection{array}
+% This package alters the way tabular environments are done,
+% therefore it could run afoul of the \LaTeX\ ``required'' package \classname{array} or any
+% package that calls for it to be loaded.
+% However, this package has provisions for remaining compatible with \classname{array}.
+% So long as the version of \classname{array} that is used with this package has the appropriate
+% meanings for the procedures it overwrites, all should be well.
+%
+% \subsection{longtable}
+% David Carlisle's \classname{longtable} package modifies both the \LaTeX\ kernel and the
+% \classname{array} package. This package must therefore alter \cmd\LT@array.
+% For now, that job is handled by \classname{ltxgrid}.
+%
+%
+%\StopEventually{}
+%
+% \section{Implementation of package}
+%
+% Special acknowledgment: this package uses concepts pioneered
+% and first realized by William Baxter (mailto:web at superscript.com)
+% in his SuperScript line of commercial typesetting tools, and
+% which are used here with his permission.
+%
+% \subsection{Beginning of the \file{package} {\sc docstrip} module}
+% \begin{macrocode}
+%<*package>
+\def\package@name{ltxutil}%
+\expandafter\PackageInfo\expandafter{\package@name}{%
+ Utility macros for \protect\LaTeXe,
+ by A. Ogawa (arthur_ogawa at sbcglobal.net)%
+}%
+%</package>
+% \end{macrocode}
+%
+% \subsection{Banner and beginning of the \file{kernel} {\sc docstrip} module}%
+% \begin{macrocode}
+%<*kernel>
+% \end{macrocode}
+%
+% \subsection{Errors and warnings}
+%
+% \begin{macro}{\class@err}
+% \begin{macro}{\class@warn}
+% \begin{macro}{\class@info}
+% A few shorthands for Class messages.
+% Your document class should define \cmd\class@name.
+% \begin{macrocode}
+\def\class@err#1{\ClassError{\class@name}{#1}\@eha}%
+\def\class@warn#1{\ClassWarningNoLine{\class@name}{#1}}%
+\def\class@info#1{\ClassInfo{\class@name}{#1}}%
+\def\obsolete@command#1{%
+ \class@warn@end{Command \string#1\space is obsolete.^^JPlease remove from your document}%
+ \global\let#1\@empty
+ #1%
+}%
+\def\replace@command#1#2{%
+ \class@warn@end{Command \string#1\space is obsolete;^^JUse \string#2\space instead}%
+ \global\let#1#2%
+ #1%
+}%
+\def\replace@environment#1#2{%
+ \class@warn@end{Environment #1 is obsolete;^^JUse #2 instead}%
+ \glet@environment{#1}{#2}%
+ \@nameuse{#1}%
+}%
+\def\incompatible@package#1{%
+ \@ifpackageloaded{#1}{%
+ \def\@tempa{I cannot continue. You must remove the \string\usepackage\ statement that caused that package to be loaded.}%
+ \ClassError{\class@name}{The #1 package cannot be used with \class@name}%
+ \@tempa\stop
+ }{%
+ \class@info{#1 was not loaded (OK!)}%
+ }%
+}%
+\def\class@warn@end#1{%
+ \gappdef\class@enddocumenthook{\class@warn{#1}}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \changes{4.1a}{2008/01/19}{(AO, 459) do not assume \cs{class@name} is defined}%
+% Give \cmd\class@name\ a meaning if it does not already have one.
+% \begin{macrocode}
+\ifx\undefined\class@name
+ \def\class@name{ltxutil}%
+ \class@warn{You should define the class name before reading in this package. Using default}%
+\fi
+% \end{macrocode}
+%
+% \subsection{New Tools}%
+%
+% \begin{macro}{\t@}
+% \begin{macrocode}
+\def\t@{to}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\dimen@iii}
+% \begin{macrocode}
+\dimendef\dimen@iii\thr@@
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\halignt@}
+% \begin{macrocode}
+\def\halignt@{\halign\t@}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\f@ur}
+% Analogous to \cmd\@ne, \cmd\tw@, and \cmd\thr@@.
+% \begin{macrocode}
+\chardef\f@ur=4\relax
+\chardef\cat@letter=11\relax
+\chardef\other=12\relax
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\let@environment}
+% \begin{macro}{\glet@environment}
+% The directive \cmd\let@environment\ takes care of a common programming
+% idiom whereby one environment is made a synonym for another.
+% \begin{macrocode}
+\def\let@environment#1#2{%
+ \expandafter\let
+ \csname#1\expandafter\endcsname\csname#2\endcsname
+ \expandafter\let
+ \csname end#1\expandafter\endcsname\csname end#2\endcsname
+}%
+\def\glet@environment#1#2{%
+ \global\expandafter\let
+ \csname#1\expandafter\endcsname\csname#2\endcsname
+ \global\expandafter\let
+ \csname end#1\expandafter\endcsname\csname end#2\endcsname
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\tracingplain}
+% The command \cmd\tracingplain\ causes \TeX's tracing parameters to
+% return to the values set by default. This command is sometimes
+% useful when you have said \cmd\tracingall\ somewhere and want to
+% restore.
+% The \cmd\traceoutput\ command causes \cmd\tracingoutput\ diagnostics
+% upon \cmd\shipout.
+% \begin{macrocode}
+\newcommand\tracingplain{%
+ \tracingonline\z@\tracingcommands\z@\tracingstats\z@
+ \tracingpages\z@\tracingoutput\z@\tracinglostchars\@ne
+ \tracingmacros\z@\tracingparagraphs\z@\tracingrestores\z@
+ \showboxbreadth5\showboxdepth3\relax %\errorstopmode
+ }%
+\newcommand\traceoutput{%
+ \appdef\@resetactivechars{\showoutput}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\say}
+% \begin{macro}{\saythe}
+% The commands \cmd\say\ and \cmd\saythe\ cause diagnostic messages in the
+% \TeX\ log that give the value of a control sequence name or a register
+% respectively.
+% \begin{macrocode}
+\newcommand\say[1]{\typeout{<\noexpand#1=\meaning#1>}}%
+\newcommand\saythe[1]{\typeout{<\noexpand#1=\the#1>}}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\fullinterlineskip}
+% Resets the \cmd\prevdepth\ so that the full amount of \cmd\baselineskip\ glue will be inserted by
+% the \cmd\baselinesklip\ mechanism.
+% Can be invoked just after a \cmd\hrule\ to undo its default suppression of base line skip.
+% \begin{macrocode}
+\def\fullinterlineskip{\prevdepth\z@}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\count@i}
+% \begin{macro}{\count@ii}
+%
+% \begin{macrocode}
+\countdef\count@i\@ne
+\countdef\count@ii\tw@
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Boolean Control}%
+% We introduce just enough of the Boolean calculus for \TeX.
+% Alan Jeffrey was the pioneer here, with an article in TUGboat
+% (Vol. 11, No. 2, page 237).
+% This implementation owes a debt to
+% William Baxter (web at superscript.com).
+% See articles by Baxter and Ogawa in the proceedings of the
+% 1994 TUG meeting, TUGboat Vol.~15, No.~3.
+%
+% \begin{macro}{\prepdef}
+% \begin{macro}{\appdef}
+% \begin{macro}{\gappdef}
+%
+% Provide the capability of performing head- and tail patches.
+% The procedure \cmd\prepdef\ prepends to the given macro
+% the tokens specified in its second argument.
+% Likewise for \cmd\appdef, except that it appends.
+% Note that the first 10 toks registers are utility registers,
+% and we simply make a control sequence name, \cmd\toks@ii, for one of
+% them.
+% \begin{macrocode}
+\long\def\prepdef#1#2{%
+ \@ifxundefined#1{\toks@{}}{\toks@\expandafter{#1}}%
+ \toks@ii{#2}%
+ \edef#1{\the\toks@ii\the\toks@}%
+}%
+\long\def\appdef#1#2{%
+ \@ifxundefined#1{\toks@{}}{\toks@\expandafter{#1}}%
+ \toks@ii{#2}%
+ \edef#1{\the\toks@\the\toks@ii}%
+}%
+\long\def\gappdef#1#2{%
+ \@ifxundefined#1{\toks@{}}{\toks@\expandafter{#1}}%
+ \toks@ii{#2}%
+ \global\edef#1{\the\toks@\the\toks@ii}%
+}%
+\long\def\appdef@val#1#2{%
+ \appdef#1{{#2}}%
+}%
+\long\def\appdef@e#1#2{%
+ \expandafter\appdef
+ \expandafter#1%
+ \expandafter{#2}%
+}%
+\long\def\appdef@eval#1#2{%
+ \expandafter\appdef@val
+ \expandafter#1%
+ \expandafter{#2}%
+}%
+\toksdef\toks@ii=\tw@
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@ifxundefined}
+% \begin{macro}{\@ifnotrelax}
+% \begin{macro}{\@argswap}
+% \begin{macro}{\@argswap@val}
+%
+% Certain utility procedures use \cmd\@ifxundefined,
+% which is defined here in terms of \cmd\@ifx.
+% Others use \cmd\@ifnotrelax, namely when
+% the control sequence name is manufactured by
+% the use of \cmd\csname.
+%
+% The procedures \cmd\@argswap and \cmd\@argswap@val
+% are used to facilitate control of expansion.
+%
+% \begin{macrocode}
+\long\def\@ifxundefined#1{\@ifx{\undefined#1}}%
+\long\def\@ifnotrelax#1#2#3{\@ifx{\relax#1}{#3}{#2}}%
+\long\def\@argswap#1#2{#2#1}%
+\long\def\@argswap@val#1#2{#2{#1}}%
+\def\@ifxundefined@cs#1{\expandafter\@ifx\expandafter{\csname#1\endcsname\relax}}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@boolean}
+% \begin{macro}{\@boole@def}
+% In order to define \cmd\@ifx, we first must create the
+% ``defining word'' (term taken form our Forth vocabulary)
+% \cmd\@boole@def, which employs \cmd\@boolean\ to do its job.
+% \begin{macrocode}
+\def\@boolean#1#2{%
+ \long\def#1{%
+ #2% \if<something>
+ \expandafter\true@sw
+ \else
+ \expandafter\false@sw
+ \fi
+ }%
+}%
+\def\@boole@def#1#{\@boolean{#1}}% Implicit #2
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@booleantrue}
+% \begin{macro}{\@booleanfalse}
+% The procedures \cmd\@booleantrue\ and
+% \cmd\@booleanfalse\ are assignment operators
+% for Boolean flags.
+% \begin{macrocode}
+\def\@booleantrue#1{\let#1\true@sw}%
+\def\@booleanfalse#1{\let#1\false@sw}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@ifx}
+% \begin{macro}{\@ifx@empty}
+% \begin{macro}{\@if@empty}
+% \begin{macro}{\@ifcat}%
+% \begin{macro}{\@ifdim}%
+% \begin{macro}{\@ifeof}%
+% \begin{macro}{\@ifhbox}%
+% \begin{macro}{\@ifhmode}%
+% \begin{macro}{\@ifinner}%
+% \begin{macro}{\@ifmmode}%
+% \begin{macro}{\@ifnum}%
+% \begin{macro}{\@ifodd}%
+% \begin{macro}{\@ifvbox}%
+% \begin{macro}{\@ifvmode}%
+% \begin{macro}{\@ifvoid}%
+% We can now invoke the defining word to create
+% the procedures \cmd\@ifx\ and friends.
+%
+% Compatibility Note: earlier versions of this package
+% defined a procedure \cmd\@ifempty. However, for compatibility with AMS\LaTeX,
+% we must avoid the following three names:
+% \cmd\@ifempty, \cmd\@xifempty, and \cmd\@ifnotempty.
+%
+% \begin{macrocode}
+\@boole@def\@ifx#1{\ifx#1}%
+\@boole@def\@ifx@empty#1{\ifx\@empty#1}%
+\@boole@def\@if@empty#1{\if!#1!}%
+%\@boole@def\@if@sw#1{\csname if#1\endcsname}%
+\def\@if@sw#1#2{#1\expandafter\true@sw\else\expandafter\false@sw#2}%
+\@boole@def\@ifdim#1{\ifdim#1}%
+\@boole@def\@ifeof#1{\ifeof#1}%
+\@boole@def\@ifhbox#1{\ifhbox#1}%
+\@boole@def\@ifhmode{\ifhmode}%
+\@boole@def\@ifinner{\ifinner}%
+\@boole@def\@ifmmode{\ifmmode}%
+\@boole@def\@ifnum#1{\ifnum#1}%
+\@boole@def\@ifodd#1{\ifodd#1}%
+\@boole@def\@ifvbox#1{\ifvbox#1}%
+\@boole@def\@ifvmode{\ifvmode}%
+\@boole@def\@ifvoid#1{\ifvoid#1}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\true@sw}
+% \begin{macro}{\false@sw}
+%
+% Note that when a Boolean operator expands, it
+% employs two macros that act as selectors, defined here.
+%
+% \begin{macrocode}
+\long\def\true@sw#1#2{#1}%
+\long\def\false@sw#1#2{#2}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\loopuntil}
+% \begin{macro}{\loopwhile}
+%
+% Loop control using the Boolean idiom.
+% Superior to \cmd\loop\dots\cmd\repeat\ because these can be nested.
+% The tail of the argument must have a Boolean predicate.
+%
+% \begin{macrocode}
+\long\def\loopuntil#1{#1{}{\loopuntil{#1}}}%
+\long\def\loopwhile#1{#1{\loopwhile{#1}}{}}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@provide}
+%
+% A defining word that refuses to clobber a prior meaning.
+%
+% \begin{macrocode}
+\def\@provide#1{%
+ \@ifx{\undefined#1}{\true@sw}{\@ifx{\relax#1}{\true@sw}{\false@sw}}%
+ {\def#1}{\def\j@nk}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Begin Document Structure}
+% The standard \LaTeX\ mechanism \cmd\AtBeginDocument\
+% is inadequate because the \cmd\vsize\ is bound much too early.
+% We supply here a mechanism whereby decisions about the
+% page layout can be deferred until \cmd\AtBeginDocument\ time.
+%
+% The problem we are working around is that the \cmd\AtBeginDocument\
+% hook in \cmd\document\ appears long after the calculation of
+% \cmd\vsize\ and \cmd\hsize, that is, \LaTeX\ provides no mechanism
+% for deferring the decision about the page grid until \cmd\AtBeginDocument\ time.
+% We fix things by prepending a hook at the very beginning of \cmd\document.
+%
+% As it turns out, though, it appears feasible to simply invoke the desired
+% column grid command at \cmd\AtBeginDocument\ time, since the MVL has nothing in it
+% at that time that would be problematical.
+%
+% The facility depends on the stability of this part
+% of \LaTeX's kernel code (the first token of \cmd\document),
+% which could change, you see. But considering that \LaTeX\ is
+% at this point essentially stagnant once more, we risk it.
+%
+% \begin{macro}{\document}
+% We begin by installing hooks into \cmd\document\ that
+% we will manage ourselves.
+% First, we do as \cmd\document\ does: end the group
+% begun by \cmd\begin. Last, we conclude our shenanigans by absorbing
+% the first token of the expansion of \cmd\document, which
+% we assume to be \cmd\endgroup.
+% \changes{4.1a}{2008/08/12}{Get rid of \cs{set@typesize@hook} \cs{set@pica@hook} and the \cs{normalsize} directive}%
+% \begin{macrocode}
+\prepdef\document{%
+ \endgroup
+ \document@inithook
+ \true@sw{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\document@inithook}
+% To use, simply \cmd\appdef\cmd\document@inithook\arg{your tokens here}.
+% \begin{macrocode}
+\let\document@inithook\@empty
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\class@documenthook}
+% \begin{macro}{\class@enddocumenthook}
+% \changes{4.1a}{2008/08/12}{\cs{class@documenthook} is the last \cs{AtBeginDocument} token now}
+% We install the last \cmd\AtBeginDocument\ hook, namely the
+% procedure \cmd\class@documenthook. Within the document class,
+% we will use this hook exclusively, so as to avoid interference from other packages.
+% Similarly with \cmd\class@enddocumenthook, installed via \cmd\AtEndDocument.
+%
+% A document class using this package should do as this package does and just say,
+% \cmd\appdef\ \cmd\class@documenthook\ instead of \cmd\AtBeginDocument,
+% and \cmd\appdef\ \cmd\class@enddocumenthook\ instead of \cmd\AtEndDocument.
+% \begin{macrocode}
+\appdef\document@inithook{%
+ \AtBeginDocument{\class@documenthook}%
+}%
+\AtEndDocument{%
+ \class@enddocumenthook
+}%
+\let\class@documenthook\@empty
+\let\class@enddocumenthook\@empty
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\enddocument}
+% \begin{macro}{\check@aux}
+% \begin{macro}{\do@check@aux}
+% \changes{4.1n}{2009/12/05}{(AO, 569) Use of \classname{hyperref} interferes with column balancing of last page}%
+% The standard \LaTeX\ \enve{document} processing is a potential problem,
+% particularly when the output routine has been changed by \classname{ltxgrid}.
+% We separate out the procedure that checks the auxiliary file at the end of
+% the job so that later it can be called from the safety of the output
+% routine.
+% We will do this to ensure that the \cmd\@mainaux\ stream is not closed until
+% the last page of the job is shipped out, and that can only be done by coordinating
+% with the output routine.
+% \begin{macrocode}
+\def\enddocument{%
+% \end{macrocode}
+% \changes{4.1n}{2009/12/06}{(AO) Incorporate change to ltmiscen.dtx v1.1i 2000/05/19}%
+% The following line from \filename{ltmiscen.dtx} `resets \cmd\AtEndDocument for latex/3060'.
+% \begin{macrocode}
+ \let\AtEndDocument\@firstofone
+% \end{macrocode}
+% \begin{macrocode}
+ \@enddocumenthook
+ \@checkend{document}%
+% \end{macrocode}
+% The \cmd\clear@document\ statement ends the current page (we must guarantee no further shipouts),
+% then executes all cleanup procedures that must occur only after the last shipout.
+% Clients will queue up their procedures via \cmd\AfterLastShipout, if it exists, otherwise by doing \cmd\appdef\cmd\clear@document.
+% \begin{macrocode}
+ \clear@document
+% \end{macrocode}
+% We are very close to ending the \TeX\ run, now.
+% \begin{macrocode}
+ \check@aux
+ \deadcycles\z@
+ \@@end
+}%
+\def\check@aux{\do@check@aux}%
+\def\do@check@aux{%
+ \@if@sw\if@filesw\fi{%
+ \immediate\closeout\@mainaux
+ \let\@setckpt\@gobbletwo
+ \let\@newl@bel\@testdef
+ \@tempswafalse
+ \makeatletter
+ \input\jobname.aux\relax
+ }{}%
+ \@dofilelist
+ \@ifdim{\font@submax >\fontsubfuzz\relax}{%
+ \@font@warning{%
+ Size substitutions with differences\MessageBreak
+ up to \font@submax\space have occured.\@gobbletwo
+ }%
+ }{}%
+ \@defaultsubs
+ \@refundefined
+ \@if@sw\if@filesw\fi{%
+ \@ifx{\@multiplelabels\relax}{%
+ \@if@sw\if@tempswa\fi{%
+ \@latex@warning@no@line{%
+ Label(s) may have changed.
+ Rerun to get cross-references right
+ }%
+ }{}%
+ }{%
+ \@multiplelabels
+ }%
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\clear@document}
+% \changes{4.1n}{2009/12/05}{(AO, 569) Use of \classname{hyperref} interferes with column balancing of last page}%
+% The procedure \cmd\clear@document\ is responsible for flushing out the last page of the document,
+% if not already done.
+% The procedure then executes those procedures that must wait for execution until
+% after the last page is shipped out.
+% Clients of \classname{ltxutil}, such as \classname{ltxgrid} and \classname{revtex4}
+% will queue these procedures up via \cmd\AfterLastShipout, if it exists, otherwise by doing \cmd\appdef\cmd\clear@document.
+%
+% The command \cmd\Call@AfterLastShipout\ is provided by Heiko Oberdiek's \classname{atveryend} package.
+% This package is compatible with \classname{ltxutil}.
+%
+% Note on compatibility with \classname{atveryend}:
+% we arrange for \cmd\Call@AfterLastShipout\ to be called from the safety of the output routine,
+% thereby ensuring that all of the procedures queued up by that package's
+% \cmd\AfterLastShipout\ are executed at the right time.
+% We also ensure that \cmd\Call@AfterLastShipout\ has a default definition, in case the package was never loaded.
+% \changes{4.1n}{2009/12/09}{(AO, 569) execute \classname{atveryend}'s \cs{Call@AfterLastShipout} at the proper time}%
+% \begin{macrocode}
+\def\clear@document{%
+ \clearpage
+ \do@output@cclv{%
+ \Call@AfterLastShipout
+ }%
+}%
+\appdef\class@documenthook{%
+ \providecommand\Call@AfterLastShipout{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Class Extensions}%
+% \changes{4.1a}{2008/08/12}{Class extension mechanism \cs{class@extension}, \cs{class@extensionfile}, and \cs{class@ext@hook}.}
+% The \LaTeX\ procedure \cmd\@onefilewithoptions\ is the vehicle for reading in
+% a \LaTeX\ class or package.
+% The APS RevTeX class implements the use of what are called ``substyles'',
+% actually extensions to the class itself.
+% Any document class can do likewise.
+%
+% \begin{macro}{\class@extension}
+% \begin{macro}{\class@extensionfile}
+% \begin{macro}{\class@ext@hook}
+% A procedure similar to \LaTeX's \cmd\@onefilewithoptions, but as an extension to the
+% current document class.
+%
+% Read in the given file as if it were a document class file.
+% Usage: \cmd\class@extensionfile\ \arg{class} \cmd\@extension,
+% where \marg{class} is a file (similar to \file{aps.rtx}) and where \cmd\@extension\ is
+% the file extension for \marg{class}.
+% For instance, to read in the file \file{aps.rtx},
+% do \cmd\class@extensionfile\ \texttt{\{aps\}} \cmd\substyle@ext,
+% where the latter has been define to expand to \file{.rtx}.
+%
+% Features supported include
+% passing existing class options on to the class extension,
+% \cmd\AtEndOfClass\ processing,
+% a stack that restores \cmd\@currname, \cmd\@currext, \cmd\@clsextension, and the \cmd\catcode\ of `@',
+% fall-back to a control sequence name (with leading `rtx@') if no file exists.
+%
+% Note that \cmd\LoadClass\ gives one the ability to write a class that calls in
+% another class as a (sort of) module: this scheme is like \cmd\LoadClass, but
+% turned inside out.
+% \begin{macrocode}
+\def\class@extension#1#2{%
+ \IfFileExists{#1.#2}{%
+ \expandafter\class@extensionfile\csname ver@\@currname.\@currext\endcsname{#1}#2%
+ }{%
+ \csname rtx@#1\endcsname
+ }%
+}%
+\def\class@extensionfile#1#2#3{%
+ \@pass@ptions#3\@unusedoptionlist{#2}%
+ \global\let\@unusedoptionlist\@empty
+ \expandafter\class@ext@hook\csname#2.#3-h@@k\endcsname#1{#2}#3%
+}%
+\def\class@ext@hook#1#2#3#4{%
+ \@pushfilename@ltx
+ \makeatletter
+ \let\CurrentOption\@empty
+ \@reset@ptions
+ \let#1\@empty
+ \xdef\@currname{#3}%
+ \global\let\@currext#4%
+ \global\let\@clsextension\@currext
+ \input{#3.#4}%
+ \@ifl@ter#4{#3}#2{%
+ \class@info{Class extension later than: #2}%
+ }{%
+ \class@info{Class extension earlier: #2}%
+ \@@end
+ }%
+ #1%
+ \let#1\@undefined
+ \expandafter\@p@pfilename@ltx\@currnamestack@ltx\@nil
+ \@reset@ptions
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@pushfilename}
+% \begin{macro}{\@p@pfilename}
+% \changes{4.1a}{2008/08/12}{Class extension mechanism \cs{@pushfilename@ltx} and \cs{@p@pfilename@ltx}.}
+% But! \LaTeX\ does not provide for a class extension other than \file{.cls}, therefore we
+% must extend \LaTeX's file name stack with the file extension of a class extension.
+% This way, procedures like
+% \cmd\ProvidesPackage, \cmd\OptionNotUsed, \cmd\ProcessOptions, \cmd\@reset@ptions\
+% will still work properly.
+% \begin{macrocode}
+\def\@pushfilename@ltx{%
+ \xdef\@currnamestack@ltx{%
+ {\@currname}%
+ {\@currext}%
+ {\@clsextension}%
+ {\the\catcode`\@}%
+ \@currnamestack@ltx
+ }%
+}%
+\def\@p@pfilename@ltx#1#2#3#4#5\@nil{%
+ \gdef\@currname{#1}%
+ \gdef\@currext{#2}%
+ \gdef\@clsextension{#3}%
+ \catcode`\@#4\relax
+ \gdef\@currnamestack@ltx{#5}%
+}%
+\global\let\@currnamestack@ltx\@empty
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% We carefully patch \LaTeX\ so that the current value of \cmd\@clsextension\ can be
+% restored after reading in a class file.
+%
+% \subsection{Type Tools}%
+%
+% \begin{macro}{\flushing}
+% Undoes \cmd\centering. Should also undo \cmd\raggedleft\ and \cmd\raggedright.
+% \begin{macrocode}
+\def\flushing{%
+ \let\\\@normalcr
+ \leftskip\z@skip
+ \rightskip\z@skip
+ \@rightskip\z@skip
+ \parfillskip\@flushglue
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \changes{4.1g}{2009/10/07}{(AO, 539) Use of double-backslash in argument of \cs{section} gives error. The \classname{textcase} package is involved.}%
+% \begin{macro}{\@centercr}
+% The \cmd\@centercr\ command is the replacement for \cmd\@normalcr\ when setting type centered or ragged.
+% Normally, the meaning of \cmd\\ is \cmd\@normalcr, which \LaTeX\ defines via \cmd\DeclareRobustCommand.
+% In centered or ragged typesetting, the meaning of \cmd\\ is \cmd\@centercr,
+% therefore it ought to to be defined via \cmd\DeclareRobustCommand\ (but unfortunately is not).
+% The fact that it is not is yet another of \LaTeX's early failures that will never get fixed.
+%
+% The following exemplar fails under \LaTeX\ version 2005/12/01, package \classname{textcase} 2004/10/07 v0.07:
+% \begin{verbatim}
+%\documentclass{article}%
+%\usepackage[overload]{textcase}
+%\begin{document}
+%\centering
+%\section{\MakeTextUppercase{Section\\title}}
+%Text
+%\end{document}
+% \end{verbatim}
+% The solution is to promote \cmd\@centercr\ to a robust command, just the same as \cmd\\.
+% We do that here without needing to know the meaning of the command.
+% \begin{macrocode}
+\expandafter\DeclareRobustCommand\expandafter\@centercr\expandafter{\@centercr}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Display Math}%
+%
+% \begin{macro}{\eqnarray@LaTeX}
+% \begin{macro}{\eqnarray@fleqn@fixed}
+% Team \LaTeX\ has stated they will never repair Leslie's broken definition of \env{eqnarray}.
+% Let us be bold\dots.
+%
+% Note on \classname{hyperref} package compatibility: that package overrides
+% \cmd\eqnarray\ by wrapping it up in a larger procedure, so its changes
+% are compatible with this package's changes.
+%
+% \changes{4.1a}{2008/01/19}{(AO, 475) I had not properly reproduced the LaTeX macro \cs{eqnarray}.}%
+% \begin{macrocode}
+\def\eqnarray@LaTeX{%
+ \stepcounter{equation}%
+ \def\@currentlabel{\p@equation\theequation}%
+ \global\@eqnswtrue
+ \m@th
+ \global\@eqcnt\z@
+ \tabskip\@centering
+ \let\\\@eqncr
+ $$\everycr{}\halign to\displaywidth\bgroup
+ \hskip\@centering$\displaystyle\tabskip\z@skip{##}$\@eqnsel
+ &\global\@eqcnt\@ne\hskip \tw@\arraycolsep \hfil${##}$\hfil
+ &\global\@eqcnt\tw@ \hskip \tw@\arraycolsep
+ $\displaystyle{##}$\hfil\tabskip\@centering
+ &\global\@eqcnt\thr@@ \hb@xt@\z@\bgroup\hss##\egroup
+ \tabskip\z@skip
+ \cr
+}
+\long\def\eqnarray@fleqn@fixed{%
+ \stepcounter{equation}\def\@currentlabel{\p@equation\theequation}%
+ \global\@eqnswtrue\m@th\global\@eqcnt\z@
+ \tabskip\ltx@mathindent
+ \let\\=\@eqncr
+ \setlength\abovedisplayskip{\topsep}%
+ \ifvmode\addtolength\abovedisplayskip{\partopsep}\fi
+ \addtolength\abovedisplayskip{\parskip}%
+ \setlength\belowdisplayskip{\abovedisplayskip}%
+ \setlength\belowdisplayshortskip{\abovedisplayskip}%
+ \setlength\abovedisplayshortskip{\abovedisplayskip}%
+ $$%
+ \everycr{}%
+ \halignt@\linewidth\bgroup
+ \hskip\@centering$\displaystyle\tabskip\z@skip{##}$\@eqnsel
+ &\global\@eqcnt\@ne
+ \hskip\tw@\eqncolsep
+ \hfil${{}##{}}$\hfil
+ &\global\@eqcnt\tw@
+ \hskip\tw@\eqncolsep
+ $\displaystyle{##}$\hfil\tabskip\@centering
+ &\global\@eqcnt\thr@@\hb@xt@\z@\bgroup\hss##\egroup
+ \tabskip\z@skip
+ \cr
+}%
+\@ifx{\eqnarray\eqnarray@LaTeX}{%
+ \class@info{Repairing broken LaTeX eqnarray}%
+ \let\eqnarray\eqnarray@fleqn@fixed
+ \newlength\eqncolsep
+ \setlength\eqncolsep\z@
+ \let\eqnarray@LaTeX\relax
+ \let\eqnarray@fleqn@fixed\relax
+}{}%
+% \end{macrocode}
+% The macro \cmd\ltx@mathindent\ is assigned to the \cmd\tabskip\ glue just
+% before the alignment preamble is expanded, the value therefore applying at the
+% left of the first column.
+%
+% The below value specifies the display math to be set centered, as is common practice.
+% Alternatively, \cmd\tabskip\ can be set to a different glue value, accomplishing
+% flush-left display math.
+%
+% Note that the \filename{fleqn.clo} package provides its own meaning for
+% the eqnarray environment, which is also broken. We do not patch that package, however.
+%
+% \changes{4.1d}{2009/03/27}{(AO, 511) Compatability with lineno.sty's erroneous way of detecting fleqn.clo}%
+% Bug note: The \filename{lineno.sty} package detects \filename{fleqn.clo}
+% by testing whether \cmd\mathindent\ is defined, instead of using correct \LaTeXe\ means.
+% Even though our eqnarray environment is modelled after \filename{fleqn.clo},
+% we must program defensively here.
+% \begin{macrocode}
+\def\ltx@mathindent{\@centering}%
+\def\set@eqnarray@skips{}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \changes{4.1g}{2009/10/07}{(AO, 525) Remove phantom paragraph above display math that is given in vertical mode}%
+%\begin{macro}{\prep@math}
+%\begin{macro}{\prep@math@patch}
+% If we are in vertical mode when display math mode is entered (via \verb+$$+),
+% \TeX\ will first enter horizontal mode, then display math mode; this results in a phantom paragraph
+% containing a single \cmd\hbox\ consisting of the \cmd\parindent\ box followed by the \cmd\parskipfillskip\ glue.
+% Of course, that \cmd\hbox\ is accompanied by \cmd\parskip\ glue and \cmd\baselineskip\ glue.
+%
+% The \cmd\prep@math\ procedure removes the \cmd\parindent\ box, thereby (magically) eliminating the phantom paragraph.
+% The \cmd\prep@math@patch\ procedure headpatches the \env{equation} and \env{eqnarray} environments
+% to accomplish this removal of the phantom paragraph.
+%
+% Note that there are three remaining ways to enter display math mode that we do not treat:
+% the \env{displaymath} environment (equivalent to \cmd\[/\cmd\]), and the primitive the \verb+$$+ markup.
+% I refrain from treating the first case because \env{displaymath} already detects the case
+% where it is entered from vertical mode: I do not wish to engage in the dubious enterprise of attempting to correct a procedure that is ill conceived from the outset.
+% As to the primitive \verb+$$+, there is no help for users who insist upon employing procedural markup in their documents.
+% in their documents.
+% \begin{macrocode}
+\def\prep@math{%
+ \@ifvmode{\everypar{{\setbox\z@\lastbox}}}{}%
+}%
+\def\prep@math@patch{%
+ \prepdef\equation{\prep@math}%
+ \prepdef\eqnarray{\prep@math}%
+}%
+% \end{macrocode}
+% A document class may invoke \cmd\prep@math@patch\ at any point it wishes to prevent the appearance
+% of the phantom paragraph: it may be a global declaration or a local one.
+% \end{macro}
+% \end{macro}
+%
+% We fail to patch \cmd\[, \cmd\equation, however.
+%
+% \subsection{Footnotes}
+%
+% \changes{4.0d}{2000/04/10}{(AO, 174) kernel fix}
+%
+% \begin{macro}{\footnotemark}
+% \begin{macro}{\footnotetest}
+% \begin{macro}{\ltx@xfootnote}
+% \begin{macro}{\ltx@footmark}
+% \begin{macro}{\ltx@foottext}
+% \begin{macro}{\ltx@make@current@footnote}
+% We repair an error in the \LaTeX\ kernel (see \file{ltfloat.dtx}) involving footnotes.
+% The symptom is that the \cmd\footnotemark\ command does not work properly within a \env{minipage} environment.
+% The source of the problem is in the way the \cmd\footnotemark\ and \cmd\@xfootnotemark\ procedures are defined:
+% they do not share the method, used by \cmd\footnote\ and other procedures, that allows a context switch to
+% change the way footnotes behave within a minipage environment.
+% This is a \LaTeX\ bug of long standing; our fix dates to 1987.
+%
+% While we are at it, we rewrite both the \cmd\footnote, \cmd\footnotemark\ and \cmd\footnotetext\ procedures,
+% achieving a cleaner separation of syntax and semantics.
+% Note that the \cmd\@footnotetext\ procedure is not involved in context switching;
+% \classname{hyperref} will take over that procedure, substituting its own processing around
+% its argument and passing this to \cmd\H@@footnotetext.
+% We anticipate this, and do our context switching on \cmd\H@@footnotetext.
+%
+% The \cmd\@makefnmark\ continues as the method of formatting the footnote mark.
+%
+% A note about the context switch mentioned above:
+% the \env{minipage} environment executes the following in order to alter the way footnotes
+% behave:\begin{verbatim}
+%\def\@mpfn{mpfootnote}%
+%\def\thempfn{\thempfootnote}%
+%\let\@footnotetext\@mpfootnotetext
+%\let\@makefnmark\@mpmakefnmark
+%\c@mpfootnote\z@\end{verbatim}
+% This code changes the counter used in autonumbered footnotes, the choice of footnote marker,
+% and the procedure used on the footnote text. Changing the counter is needed because minipage
+% footnotes are in their own sequence, and the footnote marker is customarily different within
+% a minipage. The procedure that works on the footnote text must be different because the footnotes
+% are placed at the bottom of the minipage, not the bottom of the text column.
+%
+% Note that \LaTeX\ initially defines \cmd\@mpfn\ as \texttt{footnote} and \cmd\thempfn\ as \cmd\thefootnote,
+% so we are initially doing general footnotes.
+%
+% Any procedure that establishes a minipage-like context (e.g., floats) can do the same as the mimipage context switch
+% illustrated above.
+% \changes{4.1a}{2008/06/30}{(AO, 438) Complete rewrite of footnote macros.}
+%
+% Three user-level command, \cmd\footnote, \cmd\footnotemark, and \cmd\footnotetext\ are defined (see the \LaTeX\ manual for user-level details).
+% \begin{macro}{\footnote}
+% The first user-level command is \cmd\footnote.
+% A simple way to look at this command is to think of it as
+% \cmd\footnotemark\ \oarg{number} \cmd\footnotetext\ \oarg{number} \arg{text},
+% where the optional argument is the same in both calls.
+% We also define a syntactical helper procedure \cmd\ltx@xfootnote.
+%
+% We employ the procedures \cmd\ltx@stp@footproc\ and \cmd\ltx@def@footproc,
+% passing in the procedure to execute, in this case \cmd\ltx@footmark,
+% which sets the footnote mark.
+% In any case, we end on the procedure \cmd\ltx@foottext, which sets the footnote text.
+% \begin{macrocode}
+\def\footnote{\@ifnextchar[\ltx@xfootnote\ltx@yfootnote}%
+\def\ltx@xfootnote[#1]{%
+ \ltx@def@footproc\ltx@footmark[#1]%
+ \expandafter\ltx@foottext\expandafter{\the\csname c@\@mpfn\endcsname}%
+}%
+\def\ltx@yfootnote{%
+ \ltx@stp@footproc\ltx@footmark
+ \expandafter\ltx@foottext\expandafter{\the\csname c@\@mpfn\endcsname}%
+}%
+% \end{macrocode}
+% The \cmd\footmark\ user-level command is next.
+% Here we use the procedures \cmd\ltx@stp@footproc\ and \cmd\ltx@def@footproc\ again,
+% but unlike \cmd\footnote, we do not set the footnote text.
+% \begin{macrocode}
+\def\footnotemark{\@ifnextchar[\ltx@xfootmark\ltx@yfootmark}%
+\def\ltx@xfootmark{\ltx@def@footproc\ltx@footmark}%
+\def\ltx@yfootmark{\ltx@stp@footproc\ltx@footmark}%
+\def\ltx@footmark#1{%
+ \leavevmode
+ \ifhmode\edef\@x@sf{\the\spacefactor}\nobreak\fi
+ \begingroup
+ \expandafter\ltx@make@current@footnote\expandafter{\@mpfn}{#1}%
+ \expandafter\@argswap@val\expandafter{\Hy@footnote@currentHref}{\hyper@linkstart {link}}%
+ \@makefnmark
+ \hyper@linkend
+ \endgroup
+ \ifhmode\spacefactor\@x@sf\fi
+ \relax
+}%
+% \end{macrocode}
+% The third user-level command is \cmd\footnotetext.
+% As with \cmd\footnotemark, we use the procedures \cmd\ltx@stp@footproc\ and \cmd\ltx@def@footproc,
+% this time passing in the procedure \cmd\ltx@foottext, which sets the footnote text.
+% \begin{macrocode}
+\def\footnotetext{\@ifnextchar[\ltx@xfoottext\ltx@yfoottext}%
+\def\ltx@xfoottext{\ltx@def@footproc\ltx@foottext}%
+\def\ltx@yfoottext{\ltx@stp@footproc\ltx@foottext}%
+\long\def\ltx@foottext#1#2{%
+ \begingroup
+ \expandafter\ltx@make@current@footnote\expandafter{\@mpfn}{#1}%
+ \@footnotetext{#2}%
+ \endgroup
+}%
+% \end{macrocode}
+% Here are the definitions of the procedures \cmd\ltx@stp@footproc\ and \cmd\ltx@def@footproc.
+% The require argument is the procedure to execute afterwards, and
+% \cmd\ltx@def@footproc\ parses a bracket-delimited argument (it is not optional).
+% In each case the given procedure is executed with an argument prepared for it:
+% the value of the footnote counter.
+% \begin{macrocode}
+\def\ltx@def@footproc#1[#2]{%
+ \begingroup
+ \csname c@\@mpfn\endcsname #2\relax
+ \unrestored@protected@xdef\@thefnmark{\thempfn}%
+ \expandafter\endgroup
+ \expandafter#1%
+ \expandafter{\the\csname c@\@mpfn\endcsname}%
+}%
+\def\ltx@stp@footproc#1{%
+ \expandafter\stepcounter\expandafter{\@mpfn}%
+ \protected@xdef\@thefnmark{\thempfn}%
+ \expandafter#1%
+ \expandafter{\the\csname c@\@mpfn\endcsname}%
+}%
+% \end{macrocode}
+% Here we provide for our good friend \classname{hyperref}
+% to enter in like a bull in a china shop. If it is not loaded,
+% we do what it would have done, but gentlier and without hypertext functionality.
+% \begin{macrocode}
+\appdef\class@documenthook{%
+ \let\footnote@latex\footnote
+ \@ifpackageloaded{hyperref}{}{%
+ \let\H@@footnotetext\@footnotetext
+ \def\@footnotetext{\H@@footnotetext}%
+ \let\H@@mpfootnotetext\@mpfootnotetext
+ \def\@mpfootnotetext{\H@@mpfootnotetext}%
+ }%
+}%
+% \end{macrocode}
+% In the following, we must use \LaTeX's rococco equipment in the form of \cmd\protected@edef,
+% because of the presence of a font switch in the meaning of \cmd\thempfootnote.
+% But, really, isn't this a sloppy conflation of semantics and presentation?
+% \begin{macrocode}
+\def\ltx@make@current@footnote#1#2{%
+ \csname c@#1\endcsname#2\relax
+ \protected@edef\Hy@footnote@currentHref{\@currentHref-#1.\csname the#1\endcsname}%
+}%
+\def\thempfootnote@latex{{\itshape \@alph \c@mpfootnote }}%
+\def\ltx@thempfootnote{\@alph\c@mpfootnote}%
+\@ifx{\thempfootnote\thempfootnote@latex}{%
+ \class@info{Repairing hyperref-unfriendly LaTeX definition of \string\mpfootnote}%
+ \let\thempfootnote\ltx@thempfootnote
+}{}%
+% \end{macrocode}
+%
+% Note on \classname{hyperref} compatibility:
+% In its ``Automated \LaTeX\ hypertext cross-references'',
+% the \classname{hyperref} package alters footnote processing,
+% but it does nothing to address the several issues of concern to us.
+%
+% The \classname{hyperref} package takes over the \cmd\@mpfootnotetext\ and
+% \cmd\@footnotetext\ procedures, wrapping the argument in its own code.
+% It also rewrites \cmd\@footnotemark, making it a hyperlink, and
+% \cmd\@xfootnotenext, removing from it all hypertext capabilities.
+%
+% However, if the \cmd\footnotemark\ command has been supplied with an optional argument,
+% \classname{hyperref}'s changes do not apply: it punts in this case.
+%
+% At the same time, it attempts to turn off its changes during
+% \cmd\maketitle\ processing, destroying one of the capabilities we desire.
+%
+% We make ourself \classname{hyperref} savvy:
+% we re-implement footnote processing, using \classname{hyperref} capabilities if that
+% package has been loaded.
+%
+% Any other package that rewrites \LaTeX's footnote macros will be incompatible
+% with this package.
+% \changes{4.1a}{2008/06/30}{(AO) Remove code that avoided changes to \cs{@xfootnotemark}}%
+%
+% Two thoughts about \classname{hyperref}: what for does it define \cmd\realfootnote?
+% Apparently even SR himself cannot remember.
+%
+% Also: a document class that desires high hypertext capabilities might
+% well wish to reimplement \cmd\maketitle\ so that footnotes called out from there
+% are hypertext links: the \classname{hyperref} package's
+% ``Automated \LaTeX\ hypertext cross-references''
+% does not do any of this:
+%\begin{quotation}
+% But the special footnotes in |\maketitle| are much too hard to deal with properly.
+% Let them revert to plain behaviour.
+%\end{quotation}
+% Note that the document class, in reimplementing \cmd\maketitle, must ensure
+% that the \classname{hyperref} package does not clobber its own definition!
+%
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@footnotetext}
+% \begin{macro}{\@mpfootnotetext}
+% \begin{macro}{\@tpfootnotetext}
+% \begin{macro}{\make@footnotetext}
+% \begin{macro}{\set@footnotewidth}
+% The two procedures \cmd\@footnotetext\ and \cmd\@mpfootnotetext\ share code.
+% We make that explicit here.
+%
+% Note that the procedure calling \cmd\make@footnotetext\ will open a group
+% with \cmd\bgroup\ which is then closed by \cmd\minipagefootnote@drop.
+%
+% Difference from \LaTeX: here we do not set \cmd\floatingpenalty\ to infinity.
+% Doing this must date back to a time when \LaTeX\ could not accomodate split insertions (footnotes).
+% I cannot think of any other reason to do have done this.
+% At any rate, with the \classname{ltxgrid} package, split insertions are properly
+% taken care of, so we allow it.
+%
+% We provide the hook \cmd\set@footnotewidth\
+% that sets the footnote on a particular measure.
+% Some page grids are such as to set a footnote in a context where \cmd\columnwidth
+% is not the right parameter to use for the set width of a footnote.
+% In such a case, for the applicable scope, you should define
+% \cmd\set@footnotewidth\ to perform this job correctly.
+%
+% If we are setting type on multiple page grids, we must still ensure that all footnotes that
+% find their way into the \cmd\footins\ insert register are set on the same width.
+% This implies the need for a document to have an ``overall'' page grid, which determines the set width of all footnotes
+% with the exception of minipage footnotes.
+%
+% In general, remember that footnotes, like all insertions (including floats),
+% are a step outside of the galley context, and all aspects of insertions need to be
+% properly handled, including the set width.
+% \begin{macrocode}
+\def\@makefnmark{%
+ \hbox{%
+ \@textsuperscript{%
+ \normalfont\itshape\@thefnmark
+ }%
+ }%
+}%
+% \end{macrocode}
+% \begin{macrocode}
+\long\def\@footnotetext{%
+ \insert\footins\bgroup
+ \make@footnotetext
+}%
+% \end{macrocode}
+% \begin{macrocode}
+\long\def\@mpfootnotetext{%
+ \minipagefootnote@pick
+ \make@footnotetext
+}%
+% \end{macrocode}
+% Procedure \cmd\make@footnotetext\ sets the footnote \verb+#1+ into type, with the proper
+% font, color, leading, width, and label in effect.
+% It also establishes a strut and null glue at the end of the last paragraph of the footnote;
+% The strut helps compensate for the lack of \cmd\interlineskip\ glue between \cmd\insert s;
+% the glue establishes a feasible \cmd\vsplit\ point between footnotes.
+%
+% Note that in the title block (\classname{ltxfront}), the alternative definition, under the name \cmd\frontmatter@footnotetext, is used.
+% The only material difference there is the reference to \cmd\frontmatter@makefntext\ instead of \cmd\@makefntext.
+%
+% Dependency note: the \cmd\@makefntext\ procedure is used to further process the footnote text
+% and to execute the \cmd\@makefnmark\ procedure to produce the footnote mark.
+% The definition of the former is customarily found in the document class (hereunder that of \filename{article.cls}),
+% the latter in \filename{latex.ltx}. They are as follows:
+% \begin{verbatim}
+%\newcommand\@makefntext[1]{%
+% \parindent 1em\noindent
+% \hb@xt@1.8em{\hss\@makefnmark}%
+% #1%
+%}%
+%\def\@makefnmark{%
+% \hbox{\@textsuperscript{\normalfont\@thefnmark}}%
+%}%
+% \end{verbatim}
+%
+% \changes{4.1n}{2010/01/06}{(AO, 572) title block footnotes numbered independently from body footnotes}%
+% \begin{macrocode}
+\long\def\make@footnotetext#1{%
+ \set@footnotefont
+% \end{macrocode}
+% As noted above, we do \emph{not} do \cmd\floatingpenalty\ \cmd\@MM, as in standard \LaTeX.
+% \begin{macrocode}
+ \set@footnotewidth
+ \@parboxrestore
+ \protected@edef\@currentlabel{%
+% \end{macrocode}
+% Note that we employ \cmd\@mpfn\ as a level of redirection for the footnotecounter.
+% \begin{macrocode}
+ \csname p@\@mpfn\endcsname\@thefnmark
+ }%
+ \color@begingroup
+ \@makefntext{%
+ \rule\z@\footnotesep\ignorespaces#1%
+% \end{macrocode}
+% \changes{4.1n}{2010/01/02}{(AO, 571) allow split after last line of footnote}%
+% The following strut and glue are for spacing and splitting, as mentioned above.
+% \begin{macrocode}
+ \@finalstrut\strutbox\vadjust{\vskip\z@skip}%
+ }%
+ \color@endgroup
+ \minipagefootnote@drop
+}%
+% \end{macrocode}
+% \changes{4.1f}{2009/07/07}{(AO, 515) Hook for setting the font of a footnote}
+% \cmd\set@footnotefont\ is the procedure for setting the font of a footnote.
+% Other aspects of the environment may be set using this hook.
+% \begin{macrocode}
+\def\set@footnotefont{%
+ \reset@font\footnotesize
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\footnotesep
+ \splitmaxdepth\dp\strutbox
+}%
+% \end{macrocode}
+% \cmd\set@footnotewidth\ is the procedure for setting the width of a footnote.
+% The default page grid, a single, full-width column, sets footnotes on the width of the text.
+% \changes{4.1n}{2010/01/02}{(AO, 571) Interface \cs{set@footnotewidth} for determining the set width of footnotes}%
+% \begin{macrocode}
+\def\set@footnotewidth{\set@footnotewidth@one}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Floats}
+%
+% \subsubsection{Usage notes}%
+% We extend the \LaTeX\ kernel for three purposes:
+% \begin{enumerate}
+%
+% \item
+% When the \cmd\footnote\ command is used within the
+% scope of a float, we do as \env{minipage} does.
+%
+% \item
+% We provide a mechanism to write floats out to an external
+% stream for temporary storage (deferred floats).
+%
+% \item
+% We provide mechanism for placing a float \texttt{here}
+% invariably, that is, floats are unfloated.
+% This mechanism is used to read the external stream mentioned above.
+%
+% \end{enumerate}
+%
+% To use these mechanisms, the document class should
+% define a float, say, \env{figure} as per usual, and in addition:
+% \begin{enumerate}
+%
+% \item
+% Optionally define an alternative, say \env{figure@write} as follows:
+% \begin{verbatim}\newenvironment{figure@write}{%
+% \write@float{figure}%
+%}{%
+% \endwrite@float
+%}\end{verbatim}
+% That is, the alternative environment executes \cmd\write@float\
+% instead of \cmd\@float.
+% Note that this step is not needed if the float environment
+% is defined in the simple way of \file{classes.dtx}.
+% However, an environment like \env{longtable} will require it.
+%
+% \item
+% Install into \cmd\AtBeginDocument\ a call to \cmd\do@if@floats,
+% with the float name and an appropriate file extension as its arguments.
+% \begin{verbatim}\appdef\class@documenthook{\do@if@floats{figure}{.fgx}}\end{verbatim}
+%
+% \item
+% Optionally define a text entity \cmd\figuresname\ that will
+% be the text of the head that is set over the
+% deferred floats.
+% If not defined, there will be no head.
+%
+% \item
+% Optionally define a user-level command to allow
+% the document to determine where the figures are printed out
+% (default is to print at end of document). E.g.,
+% \begin{verbatim}\newcommand\printfigures{\print@float{figure}}\end{verbatim}
+% \item
+% Install into \cmd\appdef\cmd\class@enddocumenthook\ a call to \cmd\printfigures,
+% or, if the latter is not defined, as follows:
+% \begin{verbatim}\appdef\class@enddocumenthook{\print@float{figure}}\end{verbatim}
+% Note that installing this command into \cmd\AtBeginDocument
+% is best done earlier than calls that assume the last page of
+% the document is at hand.
+%
+% \end{enumerate}
+%
+% \subsubsection{Robustifying fragile commands}%
+% Certain of \LaTeX's commands cannot be written out to a file or appear within a \cmd\mark\ command argument
+% because they do calculations during expansion.
+% We provide for a little help, but without changing the meanings of these commands.
+%
+% \begin{macro}{\addtocontents}
+% \begin{macro}{\robustify@contents}
+%
+% \changes{4.1a}{2008/06/30}{(AO) Make \cs{addtocontents} a \cs{long} \cs{def}; gobble up \cs{footnote}}%
+% \begin{macrocode}
+\def\robustify@contents{%
+ \let \label \@gobble
+ \let \index \@gobble
+ \let \glossary \@gobble
+ \let\footnote \@gobble
+ \def\({\string\(}%
+ \def\){\string\)}%
+ \def\\{\string\\}%
+}%
+\long\def\addtocontents#1#2{%
+ \protected@write\@auxout{\robustify@contents}{\string \@writefile {#1}{#2}}%
+}%
+% \end{macrocode}
+%
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Preparing for the \classname{hyperref package}}%
+%
+% \begin{macro}{\addcontentsline}
+% \begin{macro}{\label}
+% \begin{macro}{\ltx@contentsline}
+% \changes{4.1b}{2008/08/12}{Refine toc processing: provide default.}%
+% The \classname{hyperref} package assumes that the \cmd\contentsline\ command will be given four arguments.
+% Therefore it cannot successfully process a \filename{.toc} file that had been written by standard \LaTeX.
+% We fix things up by always writing that fourth argument and by supplying a \cmd\contentsline\ command that
+% can read them.
+%
+% We also give the \cmd\newlabel\ command's second argument five tokens.
+%
+% Finally, we wrap \LaTeX's \cmd\contentsline\ command with code to detect the case
+% where the expected procedure is not defined, and we give it a syntax with no semantics.
+%
+% We switch over to this new definition only after \classname{hyperref} has loaded.
+% \begin{macrocode}
+\def\addcontentsline#1#2#3{%
+ \addtocontents{#1}{%
+ \protect\contentsline{#2}{#3}{\thepage}{}%
+ }%
+}%
+\def\label#1{%
+ \@bsphack
+ \protected@write\@auxout{}{%
+ \string\newlabel{#1}{{\@currentlabel}{\thepage}{}{}{}}%
+ }%
+ \@esphack
+}%
+\def\ltx@contentsline#1{%
+ \expandafter\@ifnotrelax\csname l@#1\endcsname{}{%
+ \expandafter\let\csname l@#1\endcsname\@gobbletwo
+ }%
+ \contentsline@latex{#1}%
+}%
+\appdef\document@inithook{%
+ \let\contentsline@latex\contentsline
+ \let\contentsline\ltx@contentsline
+}%
+% \end{macrocode}
+%
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Footnotes within floats, unfloating floats, float font}%
+%
+% \begin{macro}{\caption}
+% DPC: Er a bit of a hack, but seems best way of supporting normal
+% \LaTeX\ syntax at this point: If a caption is used below a table,
+% then put out the footnotes before the caption.
+% \changes{4.0b}{1999/06/20}{Support the hack with \cs{prepdef}, and delay until \cs{AtBeginDocument} time, since \classname{hyperref} clobbers \cs{caption}.}
+% \begin{macrocode}
+\appdef\class@documenthook{%
+ \prepdef\caption{\minipagefootnote@here}%
+}%
+% \end{macrocode}
+%
+% Note on \classname{hyperref} compatibility:
+% this change to the \cmd\caption\ command is compatible with the
+% ``Automated \LaTeX\ hypertext cross-references'' patches of that package.
+%
+% All the same, I think Sebastian's changes to \cmd\caption\ and \cmd\@caption\
+% could bear with some improvement.
+% The following implementation requires knowing only the pattern part of the
+% \cmd\@caption\ macro:
+%\begin{verbatim}
+%\def\caption{%
+% \H@refstepcounter\@captype
+% \hyper@makecurrent{\@captype}%
+% \@dblarg{\H@caption\@captype}%
+%}%
+%\def\H@caption#1[#2]#3{%
+% \@caption{#1}[#2]{%
+% \ifHy@nesting
+% \hyper@@anchor{\@currentHref}{#3}%
+% \else
+% \hyper@@anchor{\@currentHref}{\relax}#3%
+% \fi
+% }%
+%}\end{verbatim}
+%
+% \end{macro}
+%
+% \begin{macro}{\minipagefootnote@init}
+% \begin{macro}{\minipagefootnote@here}
+% \begin{macro}{\minipagefootnote@foot}
+% \begin{macro}{\minipagefootnote@pick}
+% \begin{macro}{\minipagefootnote@drop}
+% Procedure to deal with footnotes accumulated within a minipage environment.
+% These procedures encapsulate all uses of the \cmd\@mpfootins\ box.
+%
+%
+% Note: \cmd\minipagefootnote@here\ must \emph{not} be executed within the MVL!
+% \begin{macrocode}
+\def\minipagefootnote@init{%
+ \setbox\@mpfootins\box\voidb@x
+}%
+\def\minipagefootnote@pick{%
+ \global\setbox\@mpfootins\vbox\bgroup
+ \unvbox\@mpfootins
+}%
+\def\minipagefootnote@drop{%
+ \egroup
+}%
+\def\minipagefootnote@here{%
+ \par
+ \@ifvoid\@mpfootins{}{%
+ \vskip\skip\@mpfootins
+ \fullinterlineskip
+ \@ifinner{%
+ \vtop{\unvcopy\@mpfootins}%
+ {\setbox\z@\lastbox}%
+ }{}%
+ \unvbox\@mpfootins
+ }%
+}%
+\def\minipagefootnote@foot{%
+ \@ifvoid\@mpfootins{}{%
+ \insert\footins\bgroup\unvbox\@mpfootins\egroup
+ }%
+}%
+\def\endminipage{%
+ \par
+ \unskip
+ \minipagefootnote@here
+ \@minipagefalse %% added 24 May 89
+ \color@endgroup
+ \egroup
+ \expandafter\@iiiparbox\@mpargs{\unvbox\@tempboxa}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\floats@sw}
+% \changes{4.1b}{2008/08/12}{Default assignment of \cs{float@sw} now, not at \cs{AtBeginDocument} time.}%
+% The Boolean \cmd\floats@sw\ signifies that floats are to be floated;
+% if false, that floats are to be deferred to the end of the document.
+% Note that the assignment of this Boolean is to be overridden by
+% the document class in response to user-selected options.
+% \begin{macrocode}
+\@booleantrue\floats@sw
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@xfloat}
+% \begin{macro}{\@mpmakefntext}
+% The float start-code is redefined to set up footnotes in the style of minipage.
+% Also, the \cmd\floats@sw\ Boolean informs us that floats are to be
+% all placed \texttt{here}.
+% Note that, to protect against the Boolean being undefined
+% at this late hour, we default it globally to true.
+%
+% \changes{4.0b}{1999/06/20}{AO: Removed superfluous \cs{def}s, changed to using \cs{floats@sw} as the flag. Also stopped using DPC's \cs{if@twocolumn} flag: using \cs{floats@sw} instead. Also added \cs{par}\cs{vskip}\cs{z@skip} after the \cs{minipagefootnotes} so that the float box would have zero depth like the kernel one. }
+% \changes{4.0c}{1999/11/13}{(AO, 110) Install hooks for endfloats processing}
+% \changes{4.0d}{2000/04/10}{(AO, 127) Floats placed [h] to allow page breaks}
+% \changes{4.0d}{2000/05/19}{(AO, 224) Hyperref compatibility.}
+% \changes{4.0e}{2000/11/16}{(AO, 221) Remove samepage command from @xfloat@prep: If the float can break over pages, we want better control.}
+% \changes{4.1a}{2008/07/07}{\cs{@xfloat@prep} calls \cs{ltx@footnote@pop} to restore the original \cs{ltx@footmark} and \cs{ltx@foottext} procedures, in case footnote processing has switched.}
+% \changes{4.1b}{2008/08/12}{No need to protect against undefined \cs{float@sw}}
+%
+% \begin{macrocode}
+\let\@xfloat@LaTeX\@xfloat
+\def\@xfloat#1[#2]{%
+ \@xfloat@prep
+ \@nameuse{fp@proc@#2}%
+ \floats@sw{\@xfloat@LaTeX{#1}[#2]}{\@xfloat@anchored{#1}[]}%
+}%
+\def\@xfloat@prep{%
+ \ltx@footnote@pop
+ \def\@mpfn{mpfootnote}%
+ \def\thempfn{\thempfootnote}%
+ \c@mpfootnote\z@
+ \let\H@@footnotetext\H@@mpfootnotetext
+}%
+\let\ltx@footnote@pop\@empty
+\def\@xfloat@anchored#1[#2]{%
+ \def\@captype{#1}%
+ \begin@float@pagebreak
+ \let\end@float\end@float@anchored
+ \let\end@dblfloat\end@float@anchored
+ \hsize\columnwidth
+ \@parboxrestore
+ \@floatboxreset
+ \minipagefootnote@init
+}%
+\def\end@float@anchored{%
+ \minipagefootnote@here
+ \par\vskip\z@skip
+ \par
+ \end@float@pagebreak
+}%
+\def\begin@float@pagebreak{\par\addvspace\intextsep}%
+\def\end@float@pagebreak{\par\addvspace\intextsep}%
+\def\@mpmakefntext#1{%
+ \parindent=1em
+ \noindent
+ \hb@xt@1em{\hss\@makefnmark}%
+ #1%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{Writing floats out to a file}%
+%
+% \begin{macro}{\do@if@floats}
+% \changes{4.1b}{2008/08/12}{No need to protect against undefined \cs{float@sw}}
+% The procedure \cmd\do@if@floats\ should be executed at
+% \cmd\class@documenthook\ time: it arranges to write out
+% the floats of the given class to a temporary file, to be
+% read back later (deferred floats),
+% given that \cmd\floats@sw\ is false.
+% Note that, to protect against the Boolean being undefined
+% at this late hour, we default it globally to true.
+% \begin{macrocode}
+\def\do@if@floats#1#2{%
+ \floats@sw{}{%
+% \end{macrocode}
+% Open the stream to save out the document's floats of this class.
+% \begin{macrocode}
+ \expandafter\newwrite
+ \csname#1write\endcsname
+ \expandafter\def
+ \csname#1@stream\endcsname{\jobname#2}%
+ \expandafter\immediate
+ \expandafter\openout
+ \csname#1write\endcsname
+ \csname#1@stream\endcsname\relax
+% \end{macrocode}
+% Swap environments.
+% If the class writer has defined, e.g., \env{figure@write},
+% then we use this as the procedure to execute for writing
+% the float out to the external stream.
+% Otherwise, the replacement of \cmd\@float\ by \cmd\write@float\
+% should do the right thing for float environments defined
+% in the simple way of \classname{classes.dtx}.
+% \begin{macrocode}
+ \@ifxundefined\@float@LaTeX{%
+ \let\@float@LaTeX\@float
+ \let\@dblfloat@LaTeX\@dblfloat
+ \let\@float\write@float
+ \let\@dblfloat\write@floats
+ }{}%
+ \let@environment{#1@float}{#1}%
+ \let@environment{#1@floats}{#1*}%
+ \@ifxundefined@cs{#1@write}{}{%
+ \let@environment{#1}{#1@write}%
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\print@float}
+% The procedure \cmd\print@float\ prints out the
+% deferred floats.
+% \changes{4.0b}{1999/06/20}{only execute if there really were floats of the given type}
+% \changes{4.0c}{1999/11/13}{*-form mandates pagebreak at each float; only print section head if there is something there.}
+% \changes{4.0d}{2000/05/23}{Allow things to break over pages by setting array@default.}
+% \changes{4.1b}{2008/08/12}{If class option \classoption{lengthcheck} is in effect, log the height of this float class.}
+%
+% Here, we make use of the \cmd\floats@sw\ Boolean to select
+% the non-floating type of processing.
+% \begin{macrocode}
+\def\triggerpar{\leavevmode\@@par}%
+\def\oneapage{\def\begin@float@pagebreak{\newpage}\def\end@float@pagebreak{\newpage}}%
+\def\print@float#1#2{%
+ \lengthcheck@sw{%
+ \total@float{#1}%
+ }{}%
+ \@ifxundefined@cs{#1write}{}{%
+ \begingroup
+ \@booleanfalse\floats@sw
+ #2%
+ \raggedbottom
+ \def\array@default{v}% floats must
+ \let\@float\@float@LaTeX
+ \let\@dblfloat\@dblfloat@LaTeX
+ \let\trigger@float@par\triggerpar
+ \let@environment{#1}{#1@float}%
+ \let@environment{#1*}{#1@floats}%
+ \expandafter\prepdef\csname#1\endcsname{\trigger@float@par}%
+ \expandafter\prepdef\csname#1*\endcsname{\trigger@float@par}%
+ \@namedef{fps@#1}{h!}%
+ \expandafter\immediate
+ \expandafter\closeout
+ \csname#1write\endcsname
+ \everypar{%
+ \global\let\trigger@float@par\relax
+ \global\everypar{}\setbox\z@\lastbox
+ \@ifxundefined@cs{#1sname}{}{%
+ \begin@float@pagebreak
+ \expandafter\section
+ \expandafter*%
+ \expandafter{%
+ \csname#1sname\endcsname
+ }%
+ }%
+ }%
+ \input{\csname#1@stream\endcsname}%
+ \endgroup
+ \global\expandafter\let\csname#1write\endcsname\relax
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tally@float}
+% \begin{macro}{\total@float}
+% \changes{4.1b}{2008/08/12}{Tally and log the height of a float class}
+% If we are tallying column inches, \cmd\tally@float\ tallies a contribution to \cmd\ftype@\ \cmd\@captype,
+% depending upon the width of \cmd\@currbox.
+% In effect, each float class is tallied in two sections, one for narrow, one for wide floats.
+%
+% If statistics are wanted, \cmd\total@float\ logs the tally for the given float class.
+% \changes{4.1f}{2009/07/10}{(AO, 518) Tally register overflow when locument is long}
+% The quantity \cmd\@twopowerfourteen\ is $2^{14}$, \cmd\@twopowertwo\ is $2^{2}$.
+% \begin{macrocode}
+\chardef\@xvi=16\relax
+\mathchardef\@twopowerfourteen="4000
+\mathchardef\@twopowertwo="4
+\def\tally@float#1{%
+ \begingroup
+% \end{macrocode}
+% We strip all but the least significant 5 bits from \cmd\count\ \cmd\@currbox,
+% and put them into \cmd\@tempcnta. We then subtract 16 from \cmd\count\ \cmd\@currbox
+% (unless this would make it negative), effectively reversing the process
+% carried out in \cmd\@float.
+% \begin{macrocode}
+ \@tempcnta\count\@currbox
+ \divide\@tempcnta\@xxxii
+ \multiply\@tempcnta\@xxxii
+ \advance\count\@currbox-\@tempcnta
+ \divide\@tempcnta\@xxxii
+ \@ifnum{\count\@currbox>\@xvi}{%
+ \advance\count\@currbox-\@xvi\@booleantrue\@temp@sw
+ }{%
+ \@booleanfalse\@temp@sw
+ }%
+% \end{macrocode}
+% If so desired, we log the characteristics of this float object:
+% float class and float placement parameters, height, depth, and width.
+% \begin{macrocode}
+ \show@box@size@sw{%
+ \class@info{Float #1
+ (\the\@tempcnta)[\@temp@sw{16+}{}\the\count\@currbox]^^J%
+ (\the\ht\@currbox+\the\dp\@currbox)X\the\wd\@currbox
+ }%
+ }{}%
+ \endgroup
+% \end{macrocode}
+% Here we tally the height of this float object.
+% \begin{macrocode}
+ \expandafter\let
+ \expandafter\@tempa
+ \csname fbox@\csname ftype@#1\endcsname\endcsname
+ \@ifnotrelax\@tempa{%
+ \@ifhbox\@tempa{%
+ \setbox\@tempboxa\vbox{\unvcopy\@currbox\hrule}%
+ \dimen@\ht\@tempboxa
+ \divide\dimen@\@twopowerfourteen
+ \@ifdim{\wd\@tempboxa<\textwidth}{%
+ \advance\dimen@\ht\@tempa
+ \global\ht\@tempa\dimen@
+ }{%
+ \advance\dimen@\dp\@tempa
+ \global\dp\@tempa\dimen@
+ }%
+ }{}%
+ }{}%
+}%
+\def\total@float#1{%
+ \expandafter\let
+ \expandafter\@tempa
+ \csname fbox@\csname ftype@#1\endcsname\endcsname
+ \@ifnotrelax\@tempa{%
+ \@ifhbox\@tempa{%
+ \@tempdima\the\ht\@tempa\divide\@tempdima\@twopowertwo\@tempcnta\@tempdima
+ \@tempdimb\the\dp\@tempa\divide\@tempdimb\@twopowertwo\@tempcntb\@tempdimb
+ \class@info{Total #1: Column(\the\@tempcnta pt), Page(\the\@tempcnta pt)}%
+ }{}%
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\write@float}
+% \begin{macro}{\write@floats}
+% \begin{macro}{\write@@float}
+% Handles the case where the name of the float is the same as
+% that of the stream. Note that
+% \env{longtable} does \emph{not} fit this case.
+% Note also: \cmd\write@float\ is \emph{not} a user-level environment,
+% therefore it is properly not defined with \cmd\newenvironment.
+% \begin{macrocode}
+\def\write@float#1{\write@@float{#1}{#1}}%
+\def\endwrite@float{\@Esphack}%
+\def\write@floats#1{\write@@float{#1*}{#1}}%
+\def\endwrite@floats{\@Esphack}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\write@@float}
+% \changes{4.0b}{1999/06/20}{AO: Fixed spurious \texttt{CR} and (return) characters in output file. Also, if the document did not have the \cs{end}\texttt{figure} on a line of its own, the macro wouldn't work. Fixed.}
+% \begin{macrocode}
+\def\write@@float#1#2{%
+ \ifhmode
+ \@bsphack
+ \fi
+ \chardef\@tempc\csname#2write\endcsname
+ \toks@{\begin{#1}}%
+ \def\@tempb{#1}%
+ \expandafter\let\csname end#1\endcsname\endwrite@float
+ \catcode`\^^M\active
+ \@makeother\{\@makeother\}\@makeother\%
+ \write@floatline
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\write@floatline}
+% \begin{macro}{\@write@floatline}
+% \begin{macro}{\float@end@tag}
+% The procedure \cmd\write@floatline\ only parses;
+% it passes its result to \cmd\@write@floatline, which
+% writes the line to output, then tests the line
+% for the \cmd\end\arg{float} tokens with
+% aid of the \cmd\float@end@tag\ procedure.
+% \begin{macrocode}
+\begingroup
+ \catcode`\[\the\catcode`\{\catcode`\]\the\catcode`\}\@makeother\{\@makeother\}%
+ \gdef\float@end@tag#1\end{#2}#3\@nul[%
+ \def\@tempa[#2]%
+ \@ifx[\@tempa\@tempb][\end[#2]][\write@floatline]%
+ ]%
+ \obeylines%
+ \gdef\write@floatline#1^^M[%
+ \begingroup%
+ \newlinechar`\^^M%
+ \toks@\expandafter[\the\toks@#1]\immediate\write\@tempc[\the\toks@]%
+ \endgroup%
+ \toks@[]%
+ \float@end@tag#1\end{}\@nul%
+ ]%
+\endgroup
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+% \subsection{Counters}
+% The following definitions override those of the \LaTeX\ kernel,
+% providing for a greater range of inputs.
+% \begin{macrocode}
+\def\@alph#1{\ifcase#1\or a\or b\or c\or d\else\@ialph{#1}\fi}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@ialph#1{\ifcase#1\or \or \or \or \or e\or f\or g\or h\or i\or j\or
+ k\or l\or m\or n\or o\or p\or q\or r\or s\or t\or u\or v\or w\or x\or
+ y\or z\or aa\or bb\or cc\or dd\or ee\or ff\or gg\or hh\or ii\or jj\or
+ kk\or ll\or mm\or nn\or oo\or pp\or qq\or rr\or ss\or tt\or uu\or
+ vv\or ww\or xx\or yy\or zz\else\@ctrerr\fi}
+% \end{macrocode}
+%
+%
+% \subsection{Customization of Sections}%
+%
+% Patch the standard \LaTeX\ sectioning procedure to:
+%\begin{itemize}
+%\item
+% Allow a sectioning command to trigger the title page, or more generally
+% to recognize that it is the first object in the document,
+% so we headpatch \cmd\@startsection.
+%
+%\item
+% Allow a tail command in |#6| to uppercase the title, so we retain
+% DPC's braces.
+%
+%\item
+% Allow each type of sectioning command to format its number differently,
+% so we generalize \cmd\@seccntformat.
+%
+%\item
+% Allow each type of sectioning command to format its argument differently,
+% so we generalize \cmd\@hangfrom.
+%
+%\item
+% Allow the starred form of the command to
+% mark (the running head) and
+% make an entry in the TOC,
+% so we put \cmd\@ssect\ on the same footing as \cmd\@sect.
+%
+% Note that the tokens passed to the TOC now are \emph{not}
+% the optional argument of the command, but the required.
+% This means that the user can no longer use the former
+% to put variant content in to the TOC as the Manual says.
+%
+% Instead, the optional argument is used to put an alternative
+% title into the running headers, a better choice.
+%
+%\end{itemize}
+%
+% \begin{macro}{\@startsection}
+% Patch a head hook into the basic sectioning command.
+% Treat \cmd\@sect\ and \cmd\@ssect\ on an equal footing:
+% now their pattern parts are identical.
+% \begin{macrocode}
+\def\@startsection#1#2#3#4#5#6{%
+ \@startsection@hook
+ \if@noskipsec \leavevmode \fi
+ \par
+ \@tempskipa #4\relax
+ \@afterindenttrue
+ \ifdim \@tempskipa <\z@
+ \@tempskipa -\@tempskipa \@afterindentfalse
+ \fi
+ \if@nobreak
+ \everypar{}%
+ \else
+ \addpenalty\@secpenalty\addvspace\@tempskipa
+ \fi
+ \@ifstar
+ {\@dblarg{\@ssect@ltx{#1}{#2}{#3}{#4}{#5}{#6}}}%
+ {\@dblarg{\@sect@ltx {#1}{#2}{#3}{#4}{#5}{#6}}}%
+}%
+\def\@startsection@hook{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@sect}
+% When defining \cmd\@svsec, do not expand \cmd\@seccntformat.
+% Put brace characters back where they were before David Carlisle got at them
+% (i.e., as if \cmd\@hangfrom\ had two arguments).
+% Protect the mark mechanism from an undefined meaning.
+% Pass |#8| to the TOC instead of |#7|.
+% Remove \cmd\relax\ from the replacement part of \cmd\@svsec.
+%
+% The procedure \cmd\@hangfrom\ and \cmd\@runin@to\ can
+% be used to process the argument of the head.
+% The head can define, e.g., \cmd\@hangfrom@section, to
+% do its own processing.
+%
+% In using \cmd\H@refstepcounter\ in place of \cmd\refstepcounter\ we rely on
+% either loading before any package that patches the latter, or
+% the convention that the former is the original \LaTeX\ procedure.
+%
+% \begin{macrocode}
+\class@info{Repairing broken LateX \string\@sect}%
+\def\@sect@ltx#1#2#3#4#5#6[#7]#8{%
+ \@ifnum{#2>\c@secnumdepth}{%
+ \def\H@svsec{\phantomsection}%
+ \let\@svsec\@empty
+ }{%
+ \H@refstepcounter{#1}%
+ \def\H@svsec{%
+ \phantomsection
+ }%
+ \protected@edef\@svsec{{#1}}%
+ \@ifundefined{@#1cntformat}{%
+ \prepdef\@svsec\@seccntformat
+ }{%
+ \expandafter\prepdef
+ \expandafter\@svsec
+ \csname @#1cntformat\endcsname
+ }%
+ }%
+ \@tempskipa #5\relax
+ \@ifdim{\@tempskipa>\z@}{%
+ \begingroup
+ \interlinepenalty \@M
+ #6{%
+ \@ifundefined{@hangfrom@#1}{\@hang@from}{\csname @hangfrom@#1\endcsname}%
+ {\hskip#3\relax\H@svsec}{\@svsec}{#8}%
+ }%
+ \@@par
+ \endgroup
+ \@ifundefined{#1mark}{\@gobble}{\csname #1mark\endcsname}{#7}%
+ \addcontentsline{toc}{#1}{%
+ \@ifnum{#2>\c@secnumdepth}{%
+ \protect\numberline{}%
+ }{%
+ \protect\numberline{\csname the#1\endcsname}%
+ }%
+ #8}%
+ }{%
+ \def\@svsechd{%
+ #6{%
+ \@ifundefined{@runin@to@#1}{\@runin@to}{\csname @runin@to@#1\endcsname}%
+ {\hskip#3\relax\H@svsec}{\@svsec}{#8}%
+ }%
+ \@ifundefined{#1mark}{\@gobble}{\csname #1mark\endcsname}{#7}%
+ \addcontentsline{toc}{#1}{%
+ \@ifnum{#2>\c@secnumdepth}{%
+ \protect\numberline{}%
+ }{%
+ \protect\numberline{\csname the#1\endcsname}%
+ }%
+ #8}%
+ }%
+ }%
+ \@xsect{#5}%
+}%
+\def\@hang@from#1#2#3{\@hangfrom{#1#2}#3}%
+\def\@runin@to #1#2#3{#1#2#3}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@ssect}
+% Put brace characters back where they were before David Carlisle got at them
+% (as if \cmd\@hangfrom\ has two arguments).
+% Possibly set a mark.
+% Make a TOC entry.
+%
+% Note that, for compatibility with the \classname{hyperref} package, we
+% need to provide the interface required by that package
+% (actually required by \file{pdfmark.def} and \file{nameref.sty}),
+% namely
+% the definition of \cmd\@currentlabelname\ (but now removed),
+% the insertion of the procedure \cmd\Sectionformat\ (but why is this needed?), and
+% the call to \cmd\phantomsection\ (which must precede the call to \cmd\addcontentsline).
+% We also have to sidestep the patch to \cmd\@ssect\ in that same file, therefore
+% we use a different control sequence name in the call from \cmd\@startsection.
+% \changes{4.0c}{1999/11/13}{(AO, 116) Hyperref compatibility}
+% \changes{4.0f}{2001/07/13}{(AO, 404) Hyperref compatibility}
+% \begin{macrocode}
+\def\@ssect@ltx#1#2#3#4#5#6[#7]#8{%
+% \end{macrocode}
+% Removed |\def\@currentlabelname{#8}|
+% \begin{macrocode}
+ \def\H@svsec{\phantomsection}%
+ \@tempskipa #5\relax
+ \@ifdim{\@tempskipa>\z@}{%
+ \begingroup
+ \interlinepenalty \@M
+ #6{%
+ \@ifundefined{@hangfroms@#1}{\@hang@froms}{\csname @hangfroms@#1\endcsname}%
+% \end{macrocode}
+% Removed |{\hskip#3\relax\H@svsec}{\Sectionformat{#8}{#1}}|
+% \begin{macrocode}
+ {\hskip#3\relax\H@svsec}{#8}%
+ }%
+ \@@par
+ \endgroup
+ \@ifundefined{#1smark}{\@gobble}{\csname #1smark\endcsname}{#7}%
+ \addcontentsline{toc}{#1}{\protect\numberline{}#8}%
+ }{%
+ \def\@svsechd{%
+ #6{%
+ \@ifundefined{@runin@tos@#1}{\@runin@tos}{\csname @runin@tos@#1\endcsname}%
+% \end{macrocode}
+% Removed |{\hskip#3\relax\H@svsec}{\Sectionformat{#8}{#1}}|
+% \begin{macrocode}
+ {\hskip#3\relax\H@svsec}{#8}%
+ }%
+ \@ifundefined{#1smark}{\@gobble}{\csname #1smark\endcsname}{#7}%
+ \addcontentsline{toc}{#1}{\protect\numberline{}#8}%
+ }%
+ }%
+ \@xsect{#5}%
+}%
+\def\@hang@froms#1#2{#1#2}%
+\def\@runin@tos #1#2{#1#2}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\init@hyperref}
+% \changes{4.1b}{2008/08/12}{Acquire \classname{hyperref} savoire}
+% Document classes that incorporate this package will be \classname{hyperref}-savvy.
+% (To accomplish this, we ensure that \cmd\hyperanchor\ and \cmd\hyper@last\ are both defined.)
+% Being \classname{hyperref}-savvy levels some requirements on us, but the benefits are many.
+%
+% One is that the TOC will not get amnesia and require a full set of three typesetting runs before its formatting is stable.
+% Instead, only two runs are required: the first updates the auxiliary file, the second the TOC.
+% However, the formatting of the document does not change.
+%
+% Another aspect of being \classname{hyperref}-savvy is that the syntax of commands in the \file{.aux} file will not change
+% if \classname{hyperref} is turned on or off.
+%
+% Note that \cmd\hyper@anchorstart\ and \cmd\hyper@anchorend\ constitute the programming interface
+% for a hypertext anchor (the target of a hypertext link); \cmd\hyper@linkstart\ and \cmd\hyper@linkend\
+% are the interface for a hypertext link.
+% \begin{macrocode}
+\def\init@hyperref{%
+ \providecommand\phantomsection{}%
+ \providecommand\hyper@makecurrent[1]{}%
+ \providecommand\Hy@raisedlink[1]{}%
+ \providecommand\hyper@anchorstart[1]{}%
+ \providecommand\hyper@anchorend{}%
+ \providecommand\hyper@linkstart[2]{}%
+ \providecommand\hyper@linkend{}%
+ \providecommand\@currentHref{}%
+}%
+\let\H@refstepcounter\refstepcounter
+\appdef\document@inithook{%
+ \init@hyperref
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\sec@upcase}
+% Upper case for sections (optional upper case items). These are
+% created so that some headings can be toggled between mixed case and
+% upper case readily.
+% Headings that might be changed can be wrapped in the style file in
+% \cmd\sec@upcase\arg{text} constructs;
+% the expansion of \cmd\sec@upcase\ is
+% controlled here. It is \cmd\relax\ by default (mixed case heads), and
+% can easily be changed to \cmd\uppercase\ if desired.
+% If mixed-case headings are wanted by the editor, authors {\em must}
+% supply mixed case text, although this is what authors should be doing
+% anyway.
+% (Mixed can be converted to upper,
+% but the reverse transformation cannot be automated.)
+%
+% The following setting gives the \LaTeX\ default.
+% \begin{macrocode}
+\def\sec@upcase#1{\relax{#1}}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Patch the \env{tabular} and \env{array} Environments}
+%
+% \begin{macro}{\endtabular}
+% \begin{macro}{\endarray}
+% \changes{4.1b}{2008/08/12}{Patch the array package even later: after all package patches go in.}
+% We headpatch the begin processing and tailpatch the end processing
+% of the \env{tabular} and \env{array} environments.
+% A document class can define these hooks as needed.
+%
+% We proceed with care to make further patches to
+% support tabulars that break over pages.
+% Our patches will not necessarily be effective for
+% other packages that replace the \LaTeX\ \env{array} and \env{tabular}
+% environments. I know of none that do so.
+% \begin{macrocode}
+\appdef\document@inithook{%
+ \@ifpackageloaded{array}{\switch@array}{\switch@tabular}%
+ \prepdef\endtabular{\endtabular@hook}%
+ \@provide\endtabular@hook{}%
+ \prepdef\endarray{\endarray@hook}%
+ \@provide\endarray@hook{}%
+ \providecommand\array@hook{}%
+% \end{macrocode}
+% Install, effectively, a head patch to \cmd\tabular.
+% In order to avoid interference from, e.g., the \classname{array} package,
+% we must perform this patch only \emph{after} packages load.
+% \changes{4.0c}{1999/11/13}{(AO, 130) Interference from array package}
+% \begin{macrocode}
+ \prepdef\@tabular{\tabular@hook}%
+ \@provide\tabular@hook{}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\switch@tabular}
+% \begin{macro}{\switch@array}
+% The two procedures \cmd\switch@tabular\ and \cmd\switch@array\
+% apply needed patches to the various tabular procedures,
+% the former applying to the \LaTeX\ kernel, the latter to the
+% required \classname{array} package (and to the number of other
+% required packages that load it).
+%
+% \begin{macrocode}
+\def\switch@tabular{%
+ \let\@array@sw\@array@sw@array
+ \@ifx{\@array\@array@LaTeX}{%
+ \@ifx{\multicolumn\multicolumn@LaTeX}{%
+ \@ifx{\@tabular\@tabular@LaTeX}{%
+ \@ifx{\@tabarray\@tabarray@LaTeX}{%
+ \@ifx{\array\array@LaTeX}{%
+ \@ifx{\endarray\endarray@LaTeX}{%
+ \@ifx{\endtabular\endtabular@LaTeX}{%
+ \@ifx{\@mkpream\@mkpream@LaTeX}{%
+ \@ifx{\@addamp\@addamp@LaTeX}{%
+ \@ifx{\@arrayacol\@arrayacol@LaTeX}{%
+ \@ifx{\@tabacol\@tabacol@LaTeX}{%
+ \@ifx{\@arrayclassz\@arrayclassz@LaTeX}{%
+ \@ifx{\@tabclassiv\@tabclassiv@LaTeX}{%
+ \@ifx{\@arrayclassiv\@arrayclassiv@LaTeX}{%
+ \@ifx{\@tabclassz\@tabclassz@LaTeX}{%
+ \@ifx{\@classv\@classv@LaTeX}{%
+ \@ifx{\hline\hline@LaTeX}{%
+ \@ifx{\@tabularcr\@tabularcr@LaTeX}{%
+ \@ifx{\@xtabularcr\@xtabularcr@LaTeX}{%
+ \@ifx{\@xargarraycr\@xargarraycr@LaTeX}{%
+ \@ifx{\@yargarraycr\@yargarraycr@LaTeX}{%
+ \true@sw
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ {%
+ \class@info{Patching LaTeX tabular.}%
+ }{%
+ \class@info{Unrecognized LaTeX tabular. Please update this document class! (Proceeding with fingers crossed.)}%
+ }%
+ \let\@array\@array@ltx
+ \let\multicolumn\multicolumn@ltx
+ \let\@tabular\@tabular@ltx
+ \let\@tabarray\@tabarray@ltx
+ \let\array\array@ltx
+ \let\endarray\endarray@ltx
+ \let\endtabular\endtabular@ltx
+ \let\@mkpream\@mkpream@ltx
+ \let\@addamp\@addamp@ltx
+ \let\@arrayacol\@arrayacol@ltx
+ \let\@tabacol\@tabacol@ltx
+ \let\@arrayclassz\@arrayclassz@ltx
+ \let\@tabclassiv\@tabclassiv@ltx
+ \let\@arrayclassiv\@arrayclassiv@ltx
+ \let\@tabclassz\@tabclassz@ltx
+ \let\@classv\@classv@ltx
+ \let\hline\hline@ltx
+ \let\@tabularcr\@tabularcr@ltx
+ \let\@xtabularcr\@xtabularcr@ltx
+ \let\@xargarraycr\@xargarraycr@ltx
+ \let\@yargarraycr\@yargarraycr@ltx
+}%
+% \end{macrocode}
+% \changes{4.1b}{2008/08/12}{(AO, 505) Try to accommodate \classname{colortbl}.}
+% \begin{macrocode}
+\def\switch@array{%
+ \@ifpackageloaded{colortbl}{\let\switch@array@info\colortbl@message}{\let\switch@array@info\array@message}%
+ \let\@array@sw\@array@sw@LaTeX
+ \@ifx{\@array\@array@array}{%
+ \@ifx{\@tabular\@tabular@array}{%
+ \@ifx{\@tabarray\@tabarray@array}{%
+ \@ifx{\array\array@array}{%
+ \@ifx{\endarray\endarray@array}{%
+ \@ifx{\endtabular\endtabular@array}{%
+ \@ifx{\@mkpream\@mkpream@array}{%
+ \@ifx{\@classx\@classx@array}{%
+ \@ifx{\insert@column\insert@column@array}{%
+ \@ifx{\@arraycr\@arraycr@array}{%
+ \@ifx{\@xarraycr\@xarraycr@array}{%
+ \@ifx{\@xargarraycr\@xargarraycr@array}{%
+ \@ifx{\@yargarraycr\@yargarraycr@array}{%
+ \true@sw
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }{%
+ \class@info{Patching array package.}%
+ }{%
+ \switch@array@info
+ }%
+ \let\@array \@array@array@new
+ \let\@@array \@array % Cosi fan tutti
+ \let\@tabular \@tabular@array@new
+ \let\@tabarray \@tabarray@array@new
+ \let\array \array@array@new
+ \let\endarray \endarray@array@new
+ \let\endtabular\endtabular@array@new
+ \let\@mkpream \@mkpream@array@new
+ \let\@classx \@classx@array@new
+ \let\@arrayacol\@arrayacol@ltx
+ \let\@tabacol \@tabacol@ltx
+ \let\insert@column\insert@column@array@new
+ \expandafter\let\csname endtabular*\endcsname\endtabular % Cosi fan tutti
+ \let\@arraycr \@arraycr@new
+ \let\@xarraycr \@xarraycr@new
+ \let\@xargarraycr\@xargarraycr@new
+ \let\@yargarraycr\@yargarraycr@new
+}%
+\def\array@message{%
+ \class@info{Unrecognized array package. Please update this document class! (Proceeding with fingers crossed.)}%
+}%
+\def\colortbl@message{%
+ \class@info{colortbl package is loaded. (Proceeding with fingers crossed.)}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@array@sw}
+% The Boolean \cmd\@array@sw\ must be different depending on
+% whether the \classname{array} package is loaded.
+% \begin{macrocode}
+\def\@array@sw@LaTeX{\@ifx{\\\@tabularcr}}%
+\def\@array@sw@array{\@ifx{\d@llarbegin\begingroup}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@tabular}
+% \changes{4.1b}{2008/08/12}{(AO, 505) try to accommodate \classname{colortbl}.}
+% We provide the old versions of \cmd\@tabular\ along with the respective new versions.
+% The change here is to avoid committing to LR mode. That will be done later (as late as possible, naturally).
+%
+% Compatibility note: I had done \cmd\let\ \cmd\col@sep\ \cmd\@undefined\ here, but
+% this was not compatible with \classname{colortbl}. I have removed that statement.
+% \begin{macrocode}
+\def\@tabular@LaTeX{%
+ \leavevmode
+ \hbox\bgroup$%
+ \let\@acol\@tabacol
+ \let\@classz\@tabclassz
+ \let\@classiv\@tabclassiv
+ \let\\\@tabularcr
+ \@tabarray
+}%
+\def\@tabular@ltx{%
+ \let\@acoll\@tabacoll
+ \let\@acolr\@tabacolr
+ \let\@acol\@tabacol
+ \let\@classz\@tabclassz
+ \let\@classiv\@tabclassiv
+ \let\\\@tabularcr
+ \@tabarray
+}%
+\def\@tabular@array{%
+ \leavevmode
+ \hbox\bgroup$%
+ \col@sep\tabcolsep
+ \let\d@llarbegin\begingroup
+ \let\d@llarend\endgroup
+ \@tabarray
+}%
+\def\@tabular@array@new{%
+ \let\@acoll\@tabacoll
+ \let\@acolr\@tabacolr
+ \let\@acol\@tabacol
+% \end{macrocode}
+% \let\col@sep\@undefined
+% \begin{macrocode}
+ \let\d@llarbegin\begingroup
+ \let\d@llarend\endgroup
+ \@tabarray
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@tabarray}
+% Here we provide old and new versions of the \cmd\@tabarray\ procedure.
+% The change here is to parametrize the default vertical alignment,
+% which is 'c' in standard \LaTeX.
+% Under some circumstances, we want to change this to, say, 'v'.
+%
+% \changes{4.1b}{2008/08/12}{(AO, 505) try to accommodate \classname{colortbl}.}
+% FIXME: must decouple \env{array} and \env{tabular}. Done (it seems).
+%
+% Note on \classname{colortbl}: this package head-patches \cmd\@tabarray
+% with its own command \cmd\CT@start, and tails onto \cmd\endarray\ with \cmd\CT@end.
+% It fortuitously does the former at \cmd\AtBeginDocument\ time, and, fortuitously,
+% we do not patch \cmd\endarray, which it overwrites.
+% \begin{macrocode}
+\def\@tabarray@LaTeX{%
+ \m@th\@ifnextchar[\@array{\@array[c]}%
+}%
+\def\@tabarray@ltx{%
+ \m@th\@ifnextchar[\@array{\expandafter\@array\expandafter[\array@default]}%
+}%
+\def\@tabarray@array{%
+ \@ifnextchar[{\@@array}{\@@array[c]}%
+}%
+\def\@tabarray@array@new{%
+ \@ifnextchar[{\@@array}{\expandafter\@@array\expandafter[\array@default]}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@tabularcr}
+% \begin{macro}{\@tbpen}
+% \begin{macro}{\@tabularcr}
+% \begin{macro}{\@xtabularcr}
+% \begin{macro}{\@xargarraycr}
+% \begin{macro}{\@yargarraycr}
+% \begin{macro}{\@arraycr}
+% \begin{macro}{\@xarraycr}
+% We provide for the \cmd\\ command within \env{tabular} to provide control over page breaking, just the same as
+% that of \env{eqnarray}.
+%
+% The count register \cmd\intertabularlinepenalty\ is similar to \cmd\interdisplaylinepenalty: it is the penalty
+% associated with each row of a tabular. When it is set to \cmd\@M, the tabular will cleave together.
+%
+% The count register \cmd\@tbpen\ is similar to \cmd\@eqpen: it memorizes the penalty to use after the current tabular row.
+% If the \cmd\\ command is in its star form, then \cmd\@eqpen\ is set to \cmd\@M.
+%
+% We append code to \cmd\samepage\ so that a tabular within its scope will cleave together.
+%
+% We keep the standard definition of \cmd\@tabularcr\ in \cmd\@tabularcr@LaTeX\ for reference,
+% and provide a new definition that works like \cmd\@eqncr: it sets \cmd\@tbpen\ to \cmd\@M\ if the star was given.
+%
+% We also provide new versions of \cmd\@xtabularcr, \cmd\@xargarraycr, and \cmd\@yargarraycr, all of which invoke \cmd\@tbpen.
+%
+% The \cmd\switch@tabular\ procedure switches in the new definitions.
+% \begin{macrocode}
+\newcount\intertabularlinepenalty
+\intertabularlinepenalty=100
+\newcount\@tbpen
+\appdef\samepage{\intertabularlinepenalty\@M}%
+\def\@tabularcr@LaTeX{{\ifnum 0=`}\fi \@ifstar \@xtabularcr \@xtabularcr}%
+\def\@tabularcr@ltx{{\ifnum 0=`}\fi \@ifstar {\global \@tbpen \@M \@xtabularcr }{\global \@tbpen \intertabularlinepenalty \@xtabularcr }}%
+\def\@xtabularcr@LaTeX{\@ifnextchar [\@argtabularcr {\ifnum 0=`{\fi }\cr }}%
+\def\@xtabularcr@ltx{\@ifnextchar [\@argtabularcr {\ifnum 0=`{\fi }\cr \noalign {\penalty \@tbpen }}}%
+\def\@xargarraycr@LaTeX#1{\@tempdima #1\advance \@tempdima \dp \@arstrutbox \vrule \@height \z@ \@depth \@tempdima \@width \z@ \cr}%
+\def\@xargarraycr@ltx#1{\@tempdima #1\advance \@tempdima \dp \@arstrutbox \vrule \@height \z@ \@depth \@tempdima \@width \z@ \cr \noalign {\penalty \@tbpen }}%
+\def\@yargarraycr@LaTeX#1{\cr \noalign {\vskip #1}}%
+\def\@yargarraycr@ltx#1{\cr \noalign {\penalty \@tbpen \vskip #1}}%
+% \end{macrocode}
+%
+% If the \classname{array} package has been loaded, we must alter the meanings of
+% \cmd\@arraycr, \cmd\@xarraycr, \cmd\@xargarraycr, and \cmd\@yargarraycr.
+% In this case, it is \cmd\switch@array\ that switches in the new definitions.
+% \begin{macrocode}
+\def\@arraycr@array{%
+ \relax
+ \iffalse{\fi\ifnum 0=`}\fi
+ \@ifstar \@xarraycr \@xarraycr
+}%
+\def\@arraycr@new{%
+ \relax
+ \iffalse{\fi\ifnum 0=`}\fi
+ \@ifstar {\global \@tbpen \@M \@xarraycr }{\global \@tbpen \intertabularlinepenalty \@xarraycr }%
+}%
+\def\@xarraycr@array{%
+ \@ifnextchar [%]
+ \@argarraycr {\ifnum 0=`{}\fi\cr}%
+}%
+\def\@xarraycr@new{%
+ \@ifnextchar [%]
+ \@argarraycr {\ifnum 0=`{}\fi\cr \noalign {\penalty \@tbpen }}%
+}%
+\def\@xargarraycr@array#1{%
+ \unskip
+ \@tempdima #1\advance\@tempdima \dp\@arstrutbox
+ \vrule \@depth\@tempdima \@width\z@
+ \cr
+}%
+\def\@xargarraycr@new#1{%
+ \unskip
+ \@tempdima #1\advance\@tempdima \dp\@arstrutbox
+ \vrule \@depth\@tempdima \@width\z@
+ \cr
+ \noalign {\penalty \@tbpen }%
+}%
+\def\@yargarraycr@array#1{%
+ \cr
+ \noalign{\vskip #1}%
+}%
+\def\@yargarraycr@new#1{%
+ \cr
+ \noalign{\penalty \@tbpen \vskip #1}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\array}
+% We provide old and new versions of the \cmd\array\ procedure for both \LaTeX\ and the \classname{array} package.
+% The change here is to accomodate the new procedures that will be called for the array boundaries, even
+% though at present they are not special.
+% A thought: here is where matrices can be readily accomodated.
+% \begin{macrocode}
+\def\array@LaTeX{%
+ \let\@acol\@arrayacol
+ \let\@classz\@arrayclassz
+ \let\@classiv\@arrayclassiv
+ \let\\\@arraycr
+ \let\@halignto\@empty
+ \@tabarray
+}%
+\def\array@ltx{%
+ \@ifmmode{}{\@badmath$}%
+ \let\@acoll\@arrayacol
+ \let\@acolr\@arrayacol
+ \let\@acol\@arrayacol
+ \let\@classz\@arrayclassz
+ \let\@classiv\@arrayclassiv
+ \let\\\@arraycr
+ \let\@halignto\@empty
+ \@tabarray
+}%
+\def\array@array{%
+ \col@sep\arraycolsep
+ \def\d@llarbegin{$}\let\d@llarend\d@llarbegin\gdef\@halignto{}%
+ \@tabarray
+}
+\def\array@array@new{%
+ \@ifmmode{}{\@badmath$}%
+ \let\@acoll\@arrayacol
+ \let\@acolr\@arrayacol
+ \let\@acol\@arrayacol
+% \end{macrocode}
+% \changes{4.1b}{2008/08/12}{(AO, 505) try to accommodate \classname{colortbl}.}
+% Removed: \verb+\let\col@sep\@undefined+
+% \begin{macrocode}
+ \def\d@llarbegin{$}%
+ \let\d@llarend\d@llarbegin
+ \gdef\@halignto{}%
+ \@tabarray
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@array}
+% Here we provide old and new versions of \cmd\@array.
+% The change here is to provide a convenient, flexible, and extensible
+% mechanism for new vertical alignment options.
+%
+% Instead of testing the optional argument with \cmd\if, we
+% use a dispatcher based on \cmd\csname.
+%
+% We also refrain from using \cmd\ialign, which would set
+% the \cmd\tabskip\ to the wrong value.
+%
+% Finally, the procedure to set the \cmd\@arstrutbox\
+% is broken out so that it can be patched.
+% \begin{macrocode}
+\def\@array@LaTeX[#1]#2{%
+ \if #1t\vtop \else \if#1b\vbox \else \vcenter \fi\fi
+ \bgroup
+ \setbox\@arstrutbox\hbox{%
+ \vrule \@height\arraystretch\ht\strutbox
+ \@depth\arraystretch \dp\strutbox
+ \@width\z@}%
+ \@mkpream{#2}%
+ \edef\@preamble{%
+ \ialign \noexpand\@halignto
+ \bgroup \@arstrut \@preamble \tabskip\z@skip \cr}%
+ \let\@startpbox\@@startpbox \let\@endpbox\@@endpbox
+ \let\tabularnewline\\%
+ \let\par\@empty
+ \let\@sharp##%
+ \set@typeset@protect
+ \lineskip\z@skip\baselineskip\z@skip
+ \ifhmode \@preamerr\z@ \@@par\fi
+ \@preamble
+}%
+\def\@array@ltx[#1]#2{%
+ \@nameuse{@array@align@#1}%
+ \set@arstrutbox
+ \@mkpream{#2}%
+ \prepdef\@preamble{%
+ \tabskip\tabmid@skip
+ \@arstrut
+ }%
+ \appdef\@preamble{%
+ \tabskip\tabright@skip
+ \cr
+ \array@row@pre
+ }%
+% \let\@startpbox\@@startpbox
+% \let\@endpbox\@@endpbox
+ \let\tabularnewline\\%
+ \let\par\@empty
+ \let\@sharp##%
+ \set@typeset@protect
+ \lineskip\z@skip\baselineskip\z@skip
+ \tabskip\tableft@skip\relax
+ \ifhmode \@preamerr\z@ \@@par\fi
+ \everycr{}%
+ \expandafter\halign\expandafter\@halignto\expandafter\bgroup\@preamble
+}%
+%
+\def\set@arstrutbox{%
+ \setbox\@arstrutbox\hbox{%
+ \vrule \@height\arraystretch\ht\strutbox
+ \@depth\arraystretch \dp\strutbox
+ \@width\z@
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@array@array}
+%
+% \begin{macrocode}
+\def\@array@array[#1]#2{%
+ \@tempdima \ht \strutbox
+ \advance \@tempdima by\extrarowheight
+ \setbox \@arstrutbox \hbox{\vrule
+ \@height \arraystretch \@tempdima
+ \@depth \arraystretch \dp \strutbox
+ \@width \z@}%
+ \begingroup
+ \@mkpream{#2}%
+ \xdef\@preamble{\noexpand \ialign \@halignto
+ \bgroup \@arstrut \@preamble
+ \tabskip \z@ \cr}%
+ \endgroup
+ \@arrayleft
+ \if #1t\vtop \else \if#1b\vbox \else \vcenter \fi \fi
+ \bgroup
+ \let \@sharp ##\let \protect \relax
+ \lineskip \z@
+ \baselineskip \z@
+ \m@th
+ \let\\\@arraycr \let\tabularnewline\\\let\par\@empty \@preamble
+}%
+\def\@array@array@new[#1]#2{%
+ \@tempdima\ht\strutbox
+ \advance\@tempdima by\extrarowheight
+ \setbox\@arstrutbox\hbox{%
+ \vrule \@height\arraystretch\@tempdima
+ \@depth \arraystretch\dp\strutbox
+ \@width \z@
+ }%
+ \begingroup
+ \@mkpream{#2}%
+ \xdef\@preamble{\@preamble}%
+ \endgroup
+ \prepdef\@preamble{%
+ \tabskip\tabmid@skip
+ \@arstrut
+ }%
+ \appdef\@preamble{%
+ \tabskip\tabright@skip
+ \cr
+ \array@row@pre
+ }%
+ \@arrayleft
+ \@nameuse{@array@align@#1}%
+ \m@th
+ \let\\\@arraycr
+ \let\tabularnewline\\%
+ \let\par\@empty
+ \let\@sharp##%
+ \set@typeset@protect
+ \lineskip\z@\baselineskip\z@
+ \tabskip\tableft@skip
+ \everycr{}%
+ \expandafter\halign\expandafter\@halignto\expandafter\bgroup\@preamble
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\endarray}
+% Here we provide old and new versions of \cmd\endarray.
+% The change here is to use a single procedure to close
+% out any array-like structure, namely \cmd\endarray@ltx.
+% It merely closes out the \cmd\halign.
+% \begin{macrocode}
+\def\endarray@LaTeX{%
+ \crcr\egroup\egroup
+}%
+\def\endarray@ltx{%
+ \crcr\array@row@pst\egroup\egroup
+}%
+\def\endarray@array{%
+ \crcr \egroup \egroup \@arrayright \gdef\@preamble{}%
+}%
+\def\endarray@array@new{%
+ \crcr\array@row@pst\egroup\egroup % Same as \endarray@ltx
+ \@arrayright
+ \global\let\@preamble\@empty
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\endtabular}
+%
+% \begin{macrocode}
+\def\endtabular@LaTeX{%
+ \crcr\egroup\egroup $\egroup
+}%
+\def\endtabular@ltx{%
+ \endarray
+}%
+\def\endtabular@array{%
+ \endarray $\egroup
+}%
+\def\endtabular@array@new{%
+ \endarray
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{endtabular*}
+% Here we provide a proper definition for the star-form of \enve{endtabular}.
+% It is one of the enduring curiosities that the \LaTeX\ kernel continues to use
+% dangerously and inappropriately ``optimized'' definitions for such commands.
+% \begin{macrocode}
+\@namedef{endtabular*}{\endtabular}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\multicolumn}
+%
+% \begin{macrocode}
+\long\def\multicolumn@LaTeX#1#2#3{%
+ \multispan{#1}\begingroup
+ \@mkpream{#2}%
+ \def\@sharp{#3}\set@typeset@protect
+ \let\@startpbox\@@startpbox\let\@endpbox\@@endpbox
+ \@arstrut \@preamble\hbox{}\endgroup\ignorespaces
+}%
+\long\def\multicolumn@ltx#1#2#3{%
+ \multispan{#1}%
+ \begingroup
+ \@mkpream{#2}%
+ \def\@sharp{#3}%
+ \set@typeset@protect
+ %\let\@startpbox\@@startpbox\let\@endpbox\@@endpbox
+ \@arstrut
+ \@preamble
+ \hbox{}%
+ \endgroup
+ \ignorespaces
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@array@align@}
+% \begin{macro}{\array@default}
+% Here are the various procedures for the vertical alignment options.
+% The change from standard \LaTeX\ is that we do not go into math mode
+% in every case: only when required by \cmd\vcenter.
+% Also, we use \cmd\aftergroup\ to close out the boxes and modes we have started.
+% It requires only that each procedure issue exactly one unmatched \cmd\bgroup.
+%
+% We establish here the default vertical alignment.
+% \begin{macrocode}
+\def\@array@align@t{\leavevmode\vtop\bgroup}%
+\def\@array@align@b{\leavevmode\vbox\bgroup}%
+\def\@array@align@c{\leavevmode\@ifmmode{\vcenter\bgroup}{$\vcenter\bgroup\aftergroup$\aftergroup\relax}}%
+\def\@array@align@v{%
+ \@ifmmode{%
+ \@badmath
+ \vcenter\bgroup
+ }{%
+ \@ifinner{%
+ $\vcenter\bgroup\aftergroup$
+ }{%
+ \@@par\bgroup
+ }%
+ }%
+}%
+\def\array@default{c}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\array@row@pre}
+% \begin{macro}{\array@row@pst}
+% \begin{macro}{\array@row@rst}
+% The procedure \cmd\array@row@rst\ reestablishes a default context for
+% an alignment, so that they can be nested.
+% Any environment or procedure that alters the way alignments are formatted
+% must patch this procedure to restore from that alteration.
+% To start things off, we equate \cmd\@array@align@v\ to \cmd\@array@align@c,
+% because it does not make sense to do the former in any context other
+% than the MVL or in a list that will be unboxed onto the MVL.
+% \begin{macrocode}
+\def\array@row@rst{%
+ \let\@array@align@v\@array@align@c
+}%
+\def\array@row@pre{}%
+\def\array@row@pst{}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\toprule}
+% \begin{macro}{\colrule}
+% \begin{macro}{\botrule}
+% Default definitions for \cmd\toprule, \cmd\colrule, \cmd\botrule
+% \begin{macrocode}
+\newcommand\toprule{\tab@rule{\column@font}{\column@fil}{\frstrut}}%
+\newcommand\colrule{\unskip\lrstrut\\\tab@rule{\body@font}{}{\frstrut}}%
+\newcommand\botrule{\unskip\lrstrut\\\noalign{\hline@rule}{}}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\hline}
+% \begin{macrocode}
+\def\hline@LaTeX{%
+ \noalign{\ifnum0=`}\fi\hrule \@height \arrayrulewidth \futurelet
+ \reserved@a\@xhline
+}%
+\def\hline@ltx{%
+ \noalign{%
+ \ifnum0=`}\fi
+ \hline@rule
+ \futurelet\reserved@a\@xhline
+ % \noalign ended in \@xhline
+}%
+\def\@xhline@unneeded{%
+ \say\reserved@a
+ \ifx\reserved@a\hline
+ \vskip\doublerulesep
+ \vskip-\arrayrulewidth
+ \fi
+ \ifnum0=`{\fi}%
+}%
+\def\tab@rule#1#2#3{%
+ \crcr
+ \noalign{%
+ \hline@rule
+ \gdef\@arstrut@hook{%
+ \global\let\@arstrut@hook\@empty
+ #3%
+ }%
+ \gdef\cell@font{#1}%
+ \gdef\cell@fil{#2}%
+ }%
+}%
+\def\column@font{}%
+\def\column@fil{}%
+\def\body@font{}%
+\def\cell@font{}%
+\def\frstrut{}%
+\def\lrstrut{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@arstrut@hline}
+% \begin{macro}{\@arstrut@org}
+% \begin{macro}{\@arstrut@hook}
+% \begin{macro}{\@arstrutbox@hline}
+% \begin{macro}{\set@arstrutbox}
+% \begin{macro}{\hline@rule}
+% The procedure \cmd\@arstrut@hline\ is substantially the same as
+% \cmd\@arstrut, except the strut copied in is \cmd\@arstrutbox@hline
+% instead of \cmd\@arstrutbox.
+%
+% The procedure \cmd\@arstrut@hook\ is redefined in \cmd\tab@rule!
+%
+% The register \cmd\@arstrutbox@hline.
+%
+% We append to \cmd\set@arstrutbox\ the code necessary to set a strut following an \cmd\hline.
+%
+% The procedure \cmd\hline@rule\ lays down a rule, and changes the meaning of \cmd\@arstrut\
+% so that the next line will be correctly strutted.
+%
+% The \cmd\@arstrut@hline@clnc\ is a klootch, a magic number.
+% \begin{macrocode}
+\def\@arstrut@hline{%
+ \relax
+ \@ifmmode{\copy}{\unhcopy}\@arstrutbox@hline
+ \@arstrut@hook
+}%
+%
+\let\@arstrut@org\@arstrut
+\def\@arstrut@hook{%
+ \global\let\@arstrut\@arstrut@org
+}%
+%
+\newbox\@arstrutbox@hline
+\appdef\set@arstrutbox{%
+ \setbox\@arstrutbox@hline\hbox{%
+ \setbox\z@\hbox{$0^{0}_{}$}%
+ \dimen@\ht\z@\advance\dimen@\@arstrut@hline@clnc
+ \@ifdim{\dimen@<\arraystretch\ht\strutbox}{\dimen@=\arraystretch\ht\strutbox}{}%
+ \vrule \@height\dimen@
+ \@depth\arraystretch \dp\strutbox
+ \@width\z@
+ }%
+}%
+%
+\def\hline@rule{%
+ \hrule \@height \arrayrulewidth
+ \global\let\@arstrut\@arstrut@hline
+}%
+\def\@arstrut@hline@clnc{2\p@}% % Klootch: magic number
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\tableft@skip}
+% \begin{macrocode}
+\def\tableft@skip{\z@skip}%
+\def\tabmid@skip{\z@skip}%\@flushglue
+\def\tabright@skip{\z@skip}%
+\def\tableftsep{\tabcolsep}%
+\def\tabmidsep{\tabcolsep}%
+\def\tabrightsep{\tabcolsep}%
+\def\cell@fil{}%
+\def\pbox@hook{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@arstrut}
+% \begin{macrocode}
+\appdef\@arstrut{\@arstrut@hook}%
+\let\@arstrut@hook\@empty
+\def\@addtopreamble{\appdef\@preamble}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@mkpream}
+% \begin{macrocode}
+\def\@mkpream@LaTeX#1{%
+ \@firstamptrue\@lastchclass6
+ \let\@preamble\@empty
+ \let\protect\@unexpandable@protect
+ \let\@sharp\relax
+ \let\@startpbox\relax\let\@endpbox\relax
+ \@expast{#1}%
+ \expandafter\@tfor \expandafter
+ \@nextchar \expandafter:\expandafter=\reserved@a\do
+ {\@testpach\@nextchar
+ \ifcase \@chclass \@classz \or \@classi \or \@classii \or \@classiii
+ \or \@classiv \or\@classv \fi\@lastchclass\@chclass}%
+ \ifcase \@lastchclass \@acol
+ \or \or \@preamerr \@ne\or \@preamerr \tw@\or \or \@acol \fi
+}%
+\def\@mkpream@ltx#1{%
+ \@firstamptrue
+ \@lastchclass6
+ \let\@preamble\@empty
+ \let\protect\@unexpandable@protect
+ \let\@sharp\relax
+%\let\@startpbox\relax\let\@endpbox\relax
+ \@expast{#1}%
+ \expandafter\@tfor\expandafter\@nextchar\expandafter:\expandafter=\reserved@a
+ \do{%
+ \expandafter\@testpach\expandafter{\@nextchar}%
+ \ifcase\@chclass
+ \@classz
+ \or
+ \@classi
+ \or
+ \@classii
+ \or
+ \@classiii
+ \or
+ \@classiv
+ \or
+ \@classv
+ \fi
+ \@lastchclass\@chclass
+ }%
+ \ifcase\@lastchclass
+ \@acolr % right-hand column
+ \or
+ \or
+ \@preamerr\@ne
+ \or
+ \@preamerr\tw@
+ \or
+ \or
+ \@acolr % right-hand column
+ \fi
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\insert@column}
+% \begin{macrocode}
+\def\insert@column@array{%
+ \the@toks \the \@tempcnta
+ \ignorespaces \@sharp \unskip
+ \the@toks \the \count@ \relax
+}%
+\def\insert@column@array@new{%
+ \the@toks\the\@tempcnta
+ \array@row@rst\cell@font
+ \ignorespaces\@sharp\unskip
+ \the@toks\the\count@
+ \relax
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@mkpream@relax}
+% The procedure \cmd\@mkpream@relax\ participates in a strange and wonderful
+% method of binding the alignment procedure---but only certain parts thereof.
+%
+% Here is how it works: in \LaTeX, the \classname{array} package, and in the
+% \classname{longtable} package alike, there is a need to create an alignment
+% preamble (using \cmd\@mkpream) for use by the upcoming \cmd\halign.
+% Then, in both \classname{array} and \classname{longtable}, \TeX's \cmd\edef\
+% is used to `compile in place' that alignment preamble.
+%
+% In the case of \classname{array},
+% the operation is done in order to pre-expand the use of \texttt{*};
+% in \classname{longtable}, it is to set the widths of the columns.
+%
+% Now, during this \cmd\edef, certain control sequence names must \emph{not}
+% be expanded, and those are robustified by \cmd\@mkpream@relax.
+%
+% \begin{macrocode}
+\def\@mkpream@relax{%
+ \let\tableftsep \relax
+ \let\tabmidsep \relax
+ \let\tabrightsep \relax
+ \let\array@row@rst\relax
+ \let\cell@font \relax
+ \let\@startpbox \relax
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@mkpream}
+% We insert \cmd\@mkpream@relax\ at the head of the procedure.
+% The robustifying of \cmd\@startpbox\ and \cmd\@endpbox\ is taken over by this mechanism.
+% We also invoke \cmd\@acolr\ instead of \cmd\@acol\ when a right-hand column is at hand.
+%
+% \changes{4.1b}{2008/08/12}{(AO, 505) try to accommodate \classname{colortbl}.}
+% Note on \classname{colortbl}: this package head-patches \cmd\@mkpream\ to robustify
+% a number of its commands during the construction of the alignment preamble.
+% The best we can do is to supplement the \cmd\@mkpream@relax\ procedure to perform this action.
+% \begin{macrocode}
+\def\@mkpream@array#1{%
+ \gdef\@preamble{}\@lastchclass 4 \@firstamptrue
+ \let\@sharp\relax \let\@startpbox\relax \let\@endpbox\relax
+ \@temptokena{#1}\@tempswatrue
+ \@whilesw\if@tempswa\fi{\@tempswafalse\the\NC@list}%
+ \count@\m@ne
+ \let\the@toks\relax
+ \prepnext@tok
+ \expandafter \@tfor \expandafter \@nextchar
+ \expandafter :\expandafter =\the\@temptokena \do
+ {\@testpach
+ \ifcase \@chclass \@classz \or \@classi \or \@classii
+ \or \save@decl \or \or \@classv \or \@classvi
+ \or \@classvii \or \@classviii
+ \or \@classx
+ \or \@classx \fi
+ \@lastchclass\@chclass}%
+ \ifcase\@lastchclass
+ \@acol \or
+ \or
+ \@acol \or
+ \@preamerr \thr@@ \or
+ \@preamerr \tw@ \@addtopreamble\@sharp \or
+ \or
+ \else \@preamerr \@ne \fi
+ \def\the@toks{\the\toks}%
+}%
+\def\@mkpream@array@new#1{%
+ \gdef\@preamble{}%
+ \@lastchclass\f@ur
+ \@firstamptrue
+ \let\@sharp\relax
+ \@mkpream@relax
+%\let\@startpbox\relax\let\@endpbox\relax
+ \@temptokena{#1}\@tempswatrue
+ \@whilesw\if@tempswa\fi{\@tempswafalse\the\NC@list}%
+ \count@\m@ne
+ \let\the@toks\relax
+ \prepnext@tok
+ \expandafter\@tfor\expandafter\@nextchar\expandafter:\expandafter=\the\@temptokena
+ \do{%
+ \@testpach
+ \ifcase\@chclass
+ \@classz
+ \or
+ \@classi
+ \or
+ \@classii
+ \or
+ \save@decl
+ \or
+ \or
+ \@classv
+ \or
+ \@classvi
+ \or
+ \@classvii
+ \or
+ \@classviii
+ \or
+ \@classx
+ \or
+ \@classx
+ \fi
+ \@lastchclass\@chclass
+ }%
+ \ifcase\@lastchclass
+ \@acolr % right-hand column
+ \or
+ \or
+ \@acolr % right-hand column
+ \or
+ \@preamerr\thr@@
+ \or
+ \@preamerr\tw@\@addtopreamble\@sharp
+ \or
+ \or
+ \else
+ \@preamerr\@ne
+ \fi
+ \def\the@toks{\the\toks}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@mkpream@relax}
+% \changes{4.1b}{2008/08/12}{(AO, 505) try to accommodate \classname{colortbl}.}
+% David P. Carlisle's \classname{colortbl} package headpatches \cmd\@mkpream\ in place
+% during package loading, so it does not know whom it is working on.
+% Let us try to accomodate this package by doing what it would have liked to have done.
+%
+% Note: it would be far better to break out this mechanism in the \classname{array} package.
+% \begin{macrocode}
+\appdef\@mkpream@relax{%
+ \let\CT@setup \relax
+ \let\CT@color \relax
+ \let\CT@do@color \relax
+ \let\color \relax
+ \let\CT@column@color\relax
+ \let\CT@row@color \relax
+ \let\CT@cell@color \relax
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@addamp}
+% \begin{macrocode}
+\def\@addamp@LaTeX{%
+ \if@firstamp\@firstampfalse\else\edef\@preamble{\@preamble &}\fi
+}%
+\def\@addamp@ltx{%
+ \if@firstamp\@firstampfalse\else\@addtopreamble{&}\fi
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@arrayacol}
+% \begin{macrocode}
+\def\@arrayacol@LaTeX{%
+ \edef\@preamble{\@preamble \hskip \arraycolsep}%
+}%
+\def\@arrayacol@ltx{%
+ \@addtopreamble{\hskip\arraycolsep}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@tabacol}
+% \begin{macrocode}
+\def\@tabacoll{%
+ \@addtopreamble{\hskip\tableftsep\relax}%
+}%
+\def\@tabacol@LaTeX{%
+ \edef\@preamble{\@preamble \hskip \tabcolsep}%
+}%
+\def\@tabacol@ltx{%
+ \@addtopreamble{\hskip\tabmidsep\relax}%
+}%
+\def\@tabacolr{%
+ \@addtopreamble{\hskip\tabrightsep\relax}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@arrayclassz}
+% \begin{macrocode}
+\def\@arrayclassz@LaTeX{%
+ \ifcase \@lastchclass \@acolampacol \or \@ampacol \or
+ \or \or \@addamp \or
+ \@acolampacol \or \@firstampfalse \@acol \fi
+ \edef\@preamble{\@preamble
+ \ifcase \@chnum
+ \hfil$\relax\@sharp$\hfil \or $\relax\@sharp$\hfil
+ \or \hfil$\relax\@sharp$\fi}%
+}%
+\def\@arrayclassz@ltx{%
+ \ifcase\@lastchclass
+ \@acolampacol
+ \or
+ \@ampacol
+ \or
+ \or
+ \or
+ \@addamp
+ \or
+ \@acolampacol
+ \or
+ \@firstampfalse\@acoll
+ \fi
+ \ifcase\@chnum
+ \@addtopreamble{%
+ \hfil\array@row@rst$\relax\@sharp$\hfil
+ }%
+ \or
+ \@addtopreamble{%
+ \array@row@rst$\relax\@sharp$\hfil
+ }%
+ \or
+ \@addtopreamble{%
+ \hfil\array@row@rst$\relax\@sharp$%
+ }%
+ \fi
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@tabclassz}
+% \begin{macrocode}
+\def\@tabclassz@LaTeX{%
+ \ifcase\@lastchclass
+ \@acolampacol
+ \or
+ \@ampacol
+ \or
+ \or
+ \or
+ \@addamp
+ \or
+ \@acolampacol
+ \or
+ \@firstampfalse\@acol
+ \fi
+ \edef\@preamble{%
+ \@preamble{%
+ \ifcase\@chnum
+ \hfil\ignorespaces\@sharp\unskip\hfil
+ \or
+ \hskip1sp\ignorespaces\@sharp\unskip\hfil
+ \or
+ \hfil\hskip1sp\ignorespaces\@sharp\unskip
+ \fi}}%
+}%
+\def\@tabclassz@ltx{%
+ \ifcase\@lastchclass
+ \@acolampacol
+ \or
+ \@ampacol
+ \or
+ \or
+ \or
+ \@addamp
+ \or
+ \@acolampacol
+ \or
+ \@firstampfalse\@acoll
+ \fi
+ \ifcase\@chnum
+ \@addtopreamble{%
+ {\hfil\array@row@rst\cell@font\ignorespaces\@sharp\unskip\hfil}%
+ }%
+ \or
+ \@addtopreamble{%
+ {\cell@fil\hskip1sp\array@row@rst\cell@font\ignorespaces\@sharp\unskip\hfil}%
+ }%
+ \or
+ \@addtopreamble{%
+ {\hfil\hskip1sp\array@row@rst\cell@font\ignorespaces\@sharp\unskip\cell@fil}%
+ }%
+ \fi
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@tabclassiv}
+% \begin{macrocode}
+\def\@tabclassiv@LaTeX{%
+ \@addtopreamble\@nextchar
+}%
+\def\@tabclassiv@ltx{%
+ \expandafter\@addtopreamble\expandafter{\@nextchar}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@arrayclassiv}
+% \begin{macrocode}
+\def\@arrayclassiv@LaTeX{%
+ \@addtopreamble{$\@nextchar$}%
+}%
+\def\@arrayclassiv@ltx{%
+ \expandafter\@addtopreamble\expandafter{\expandafter$\@nextchar$}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@classv}
+% \begin{macrocode}
+\def\@classv@LaTeX{%
+ \@addtopreamble{\@startpbox{\@nextchar}\ignorespaces
+ \@sharp\@endpbox}%
+}%
+\def\@classv@ltx{%
+ \expandafter\@addtopreamble
+ \expandafter{%
+ \expandafter \@startpbox
+ \expandafter {\@nextchar}%
+ \pbox@hook\array@row@rst\cell@font\ignorespaces\@sharp\@endpbox
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@classx}
+% \begin{macrocode}
+\def\@classx@array{%
+ \ifcase \@lastchclass
+ \@acolampacol \or
+ \@addamp \@acol \or
+ \@acolampacol \or
+ \or
+ \@acol \@firstampfalse \or
+ \@addamp
+ \fi
+}%
+\def\@classx@array@new{%
+ \ifcase \@lastchclass
+ \@acolampacol
+ \or
+ \@addamp \@acol
+ \or
+ \@acolampacol
+ \or
+ \or
+ \@firstampfalse\@acoll
+ \or
+ \@addamp
+ \fi
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Repair other broken parts of \LaTeX}
+%
+% \begin{macro}{\@xbitor}
+% Expansion part has extraneous space token. Removed.
+% \begin{macrocode}
+\def\@xbitor@LaTeX #1{\@tempcntb \count#1
+ \ifnum \@tempcnta =\z@
+ \else
+ \divide\@tempcntb\@tempcnta
+ \ifodd\@tempcntb \@testtrue\fi
+ \fi}%
+\def\@xbitor@ltx#1{%
+ \@tempcntb\count#1\relax
+ \@ifnum{\@tempcnta=\z@}{}{%
+ \divide\@tempcntb\@tempcnta
+ \@ifodd\@tempcntb{\@testtrue}{}%
+ }%
+}%
+\@ifx{\@xbitor\@xbitor@LaTeX}{%
+ \class@info{Repairing broken LaTeX \string\@xbitor}%
+}{%
+ \class@info{Unrecognized LaTeX \string\@xbitor. Please update this document class! (Proceeding with fingers crossed.)}%
+}%
+\let\@xbitor\@xbitor@ltx
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Syntax}
+% \begin{macro}{\@gobble@opt@one}
+% The \cmd\@gobble@opt@one\ command eats up an optional argument
+% and one required argument.
+% \begin{macrocode}
+\newcommand*\@gobble@opt@one[2][]{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Auto-indented Contents}
+% Facility to automatically determine the proper indentation of
+% the TOC entries.
+%
+% Note on \classname{hyperref} compatibility:
+% We must respect that
+% \cmd\contentsline\ now has a fourth argument.
+% So, instead of trying to override the meaning of \cmd\contentsline,
+% we use the aux file to remember max values from one run to the next.
+%
+% In this respect, this package retains compatibility with
+% \classname{hyperref}.
+%
+% \begin{macro}{\@starttoc}
+% Install hooks at beginning and end of the TOC processing.
+% \begin{macrocode}
+\def\@starttoc#1{%
+ \begingroup
+ \toc@pre
+ \makeatletter
+ \@input{\jobname.#1}%
+ \if@filesw
+ \expandafter\newwrite\csname tf@#1\endcsname
+ \immediate\openout \csname tf@#1\endcsname \jobname.#1\relax
+ \fi
+ \@nobreakfalse
+ \toc@post
+ \endgroup
+}%
+\def\toc@pre{}%
+\def\toc@post{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\toc@@font}
+% Interface for setting the formatting characteristics of this part
+% of the TOC.
+%
+% Note: \cmd\toc@@font\ is the common font for all auto-sizing toc commands,
+% although this, too, could become a dispatcher.
+% \changes{4.1a}{2008/01/19}{(AO, 461) Change the csname from \cs{@dotsep} to \cs{ltxu@dotsep}. The former is understood in mu. (What we wanted was a dimension.)}%
+% \begin{macrocode}
+\def\toc@@font{}%
+\def\ltxu@dotsep{\z@}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l@section}
+% Interface for determining which TOC elements are automatically indented.
+%
+% All of the \cmd\l@\dots\ commands simply go through the
+% utility procedure \cmd\l@@sections. The calling convention is
+% to pass the name of self and the name of parent.
+% If you want to exclude any of these from the indentation
+% scheme, simply leave the \cmd\l@\dots\ command undefined.
+%
+% Note that the parent of ``section'' is nil, so we have to define a stub.
+% \begin{verbatim}\def\l@section{\l@@sections{}{section}}% Implicit #3#4\end{verbatim}
+% \begin{verbatim}\def\tocleft@{\z@}%\end{verbatim}
+% \begin{verbatim}\def\l@subsection{\l@@sections{section}{subsection}}% Implicit #3#4\end{verbatim}
+% \begin{verbatim}\def\l@subsubsection{\l@@sections{subsection}{subsubsection}}% Implicit #3#4\end{verbatim}
+% \begin{verbatim}\def\l@paragraph{\l@@sections{subsubsection}{paragraph}}% Implicit #3#4\end{verbatim}
+% \begin{verbatim}\def\l@subparagraph#1#2{\l@@sections{paragraph}{subparagraph}}% Implicit #3#4\end{verbatim}
+% \end{macro}
+%
+% Glom some \cmd\dimen\ registers.
+% \begin{macrocode}
+\let\tocdim@section \leftmargini
+\let\tocdim@subsection \leftmarginii
+\let\tocdim@subsubsection \leftmarginiii
+\let\tocdim@paragraph \leftmarginiv
+\let\tocdim@appendix \leftmarginv
+\let\tocdim@pagenum \leftmarginvi
+% \end{macrocode}
+%
+% \begin{macro}{\toc@pre@auto}
+% \begin{macro}{\toc@post@auto}
+% We patch \cmd\@starttoc\ to:
+% 1) before TOC processing,
+% initialize the max registers and
+% set the needed dimensions from
+% the values stored in the auxiliary file, and
+% 2) after TOC processing,
+% store out those max register values into the auxiliary file.
+%
+% Note that the font is set here: all other TOC entries must
+% override these font settings.
+%
+% To activate this override of the standard \LaTeX\ processing,
+% the substyle does: \cmd\let\cmd\toc@pre\cmd\toc@pre@auto\
+% and \cmd\let\cmd\toc@post\cmd\toc@post@auto.
+% \begin{macrocode}
+\def\toc@pre@auto{%
+ \toc@@font
+ \@tempdima\z@
+ \toc@setindent\@tempdima{section}%
+ \toc@setindent\@tempdima{subsection}%
+ \toc@setindent\@tempdima{subsubsection}%
+ \toc@setindent\@tempdima{paragraph}%
+ \toc@letdimen{appendix}%
+ \toc@letdimen{pagenum}%
+}%
+\def\toc@post@auto{%
+ \if@filesw
+ \begingroup
+ \toc@writedimen{section}%
+ \toc@writedimen{subsection}%
+ \toc@writedimen{subsubsection}%
+ \toc@writedimen{paragraph}%
+ \toc@writedimen{appendix}%
+ \toc@writedimen{pagenum}%
+ \endgroup
+ \fi
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\toc@setindent}
+% \begin{macrocode}
+\def\toc@setindent#1#2{%
+ \csname tocdim@#2\endcsname\tocdim@min\relax
+ \@ifundefined{tocmax@#2}{\@namedef{tocmax@#2}{\z@}}{}%
+ \advance#1\@nameuse{tocmax@#2}\relax
+ \expandafter\edef\csname tocleft@#2\endcsname{\the#1}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\toc@letdimen}
+% \begin{macrocode}
+\def\toc@letdimen#1{%
+ \csname tocdim@#1\endcsname\tocdim@min\relax
+ \@ifundefined{tocmax@#1}{\@namedef{tocmax@#1}{\z@}}{}%
+ \expandafter\let\csname tocleft@#1\expandafter\endcsname\csname tocmax@#1\endcsname
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\toc@writedimen}
+% \begin{macrocode}
+\def\toc@writedimen#1{%
+ \immediate\write\@auxout{%
+ \gdef\expandafter\string\csname tocmax@#1\endcsname{%
+ \expandafter\the\csname tocdim@#1\endcsname
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l@@sections}
+% The procedure for formatting the indented TOC entries.
+% We use control sequence names such as \cmd\tocmax@section\ and
+% \cmd\tocleft@section, the former being written to the auxiliary file
+% and the latter only defined for the duration of the TOC processing.
+%
+% Note that the assignment of \cmd\box\cmd\@tempboxa\ by \cmd\set@tocdim@pagenum\
+% must endure over the invocation of |#3|: it contains the
+% page number which will be set just before the \cmd\par.
+%
+% The arguments:\begin{enumerate}
+% \item[\#1] superior section
+% \item[\#2] this section
+% \item[\#3] content, including possible \cmd\numberline
+% \item[\#4] page number\end{enumerate}
+% \begin{macrocode}
+\def\l@@sections#1#2#3#4{%
+ \begingroup
+ \everypar{}%
+ \set@tocdim@pagenum\@tempboxa{#4}%
+ \global\@tempdima\csname tocdim@#2\endcsname
+ \leftskip\csname tocleft@#2\endcsname\relax
+ \dimen@\csname tocleft@#1\endcsname\relax
+ \parindent-\leftskip\advance\parindent\dimen@
+ \rightskip\tocleft@pagenum plus 1fil\relax
+ \skip@\parfillskip\parfillskip\z@
+ \let\numberline\numberline@@sections
+ \@nameuse{l@f@#2}%
+ \ignorespaces#3\unskip\nobreak\hskip\skip@
+ \hb@xt@\rightskip{\hfil\unhbox\@tempboxa}\hskip-\rightskip\hskip\z@skip
+% \end{macrocode}
+% \changes{4.1n}{2009/12/13}{(AO, 574) protect against \classname{lineno.sty}, which forces a visit to the output routine, which appears to destroy the value of \cs{@tempdima}}%
+%
+% By side effect, set the value of, e.g., \cmd\tocdim@section.
+%
+% Note that the \cmd\par\ must not be executed before the value of \cmd\@tempdima\ is expanded (outside the current group).
+% Otherwise, the \classname{lineno.sty} package may interfere (it unfortunately does a global assignment of \cmd\@tempdima).
+% \begin{macrocode}
+ \expandafter\par
+ \expandafter\aftergroup\csname tocdim@#2%
+ \expandafter\endcsname
+ \expandafter\endgroup
+ \the\@tempdima\relax
+}%
+% \end{macrocode}
+% \changes{4.1a}{2008/01/19}{(AO, 479) Per: Dylan Thurston<dpt at math.harvard.edu>}%
+% In the call to \cmd\set@tocdim@pagenum, I am now exposing the use of the particular box register.
+% \begin{macrocode}
+\def\set@tocdim@pagenum#1#2{%
+ \setbox#1\hbox{\ignorespaces#2}%
+ \@ifdim{\tocdim@pagenum<\wd#1}{\global\tocdim@pagenum\wd#1}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\numberline@@sections}
+% \changes{4.1a}{2008/01/19}{(AO, 461) Change the csname from \cs{@dotsep} to \cs{ltxu@dotsep}. The former is understood in mu. (What we wanted was a dimension.)}%
+% The utility procedure for all \cmd\numberline\ processing in indented TOC entries.
+% The first argument is self.
+%
+% We use \cmd\@tempdima\ to pass a value around (via global assignment) because
+% \cmd\numberline\ executes inside a group if the
+% \classname{hyperref} package is loaded.
+% Would that it were not so!
+% \begin{macrocode}
+\def\numberline@@sections#1{%
+ \leavevmode\hb@xt@-\parindent{%
+ \hfil
+ \@if@empty{#1}{}{%
+ \setbox\z@\hbox{#1.\kern\ltxu@dotsep}%
+ \@ifdim{\@tempdima<\wd\z@}{\global\@tempdima\wd\z@}{}%
+ \unhbox\z@
+ }%
+ }%
+ \ignorespaces
+}%
+\def\tocdim@min{\z@}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Lists}
+% \begin{macro}{\list}
+% Using \cmd\parshape\ to implement lists was always suspect
+% (can you get behind \cmd\parshape\cmd\@ne?) and we now see that
+% it was a mistake all along. Why? Because \cmd\parshape, like
+% \cmd\hangindent, achieves its effect via ``shifting'' the \cmd\hbox es
+% in a paragraph
+% instead of using \cmd\leftskip\ and \cmd\parindent, which is
+% robust during column balancing.
+%
+% We introduce the alternative method with a hook into
+% the \LaTeX\ kernel procedure \cmd\list, which is
+% the implementation of all lists.
+%
+% \begin{macrocode}
+\def\list#1#2{%
+ \ifnum \@listdepth >5\relax
+ \@toodeep
+ \else
+ \global\advance\@listdepth\@ne
+ \fi
+ \rightmargin\z@
+ \listparindent\z@
+ \itemindent\z@
+ \csname @list\romannumeral\the\@listdepth\endcsname
+ \def\@itemlabel{#1}%
+ \let\makelabel\@mklab
+ \@nmbrlistfalse
+ #2\relax
+ \@trivlist
+ \parskip\parsep
+ \set@listindent
+ \ignorespaces
+}%
+\def\set@listindent@parshape{%
+ \parindent\listparindent
+ \advance\@totalleftmargin\leftmargin
+ \advance\linewidth-\rightmargin
+ \advance\linewidth-\leftmargin
+ \parshape\@ne\@totalleftmargin\linewidth
+}%
+\def\set@listindent@{%
+ \parindent\listparindent
+ \advance\@totalleftmargin\leftmargin
+ \advance\rightskip\rightmargin
+ \advance\leftskip\@totalleftmargin
+}%
+\let\set@listindent\set@listindent@parshape
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Hypertext capabilities}
+%
+% \begin{macro}{\href}
+% \begin{macro}{\url}
+% \begin{macro}{\URL@prefix}
+% \begin{macro}{\doi}
+% \begin{macro}{\doibase}
+% \changes{4.1b}{2008/08/12}{(AO, 487) Support for video figures and the \cs{setfloatlink} command}%
+% We provide support for the \cmd\href, \cmd\url, and \cmd\doi\ commands.
+% Packages, like \classname{hyperref}, may override these definitions
+% and provide better semantics.
+% \changes{4.1g}{2009/10/06}{(AO, 532) Both arguments of \cs{href} get sanitized}%
+% \changes{4.1j}{2009/10/24}{(AO, 545) Provide definition for \cs{doi} that does hypertext}%
+% \begin{macrocode}
+\providecommand\href[0]{\begingroup\@sanitize@url\@href}%
+\def\@href#1{\@@startlink{#1}\endgroup\@@href}%
+\def\@@href#1{#1\@@endlink}%
+\providecommand \url [0]{\begingroup\@sanitize@url \@url }%
+\def \@url #1{\endgroup\@href {#1}{\URL@prefix#1}}%
+\providecommand \URL@prefix [0]{URL }%
+\providecommand\doi[0]{\begingroup\@sanitize@url\@doi}%
+\def\@doi#1{\endgroup\@@startlink{\doibase#1}doi:\discretionary {}{}{}#1\@@endlink }%
+\providecommand \doibase [0]{http://dx.doi.org/}%
+\providecommand \@sanitize@url[0]{\chardef\cat@space\the\catcode`\ \@sanitize\catcode`\ \cat@space}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@@startlink}
+% \begin{macro}{\@@endlink}
+% \begin{macro}{\pdfstartlink@attr}
+% \begin{macro}{\hypertext@enable@ltx}
+% How we define \cmd\@@startlink\ and \cmd\@@endlink\ will depend on
+% whether we are running under \textsc{pdflatex}.
+% If so, and if PDF output is requested, then we use its primitives
+% to implement hypertext,
+% breaking out the link attributes in \cmd\pdfstartlink@attr\
+% and using the \classname{hyperref} defaults;
+% \cmd\pdfstartlink@attr\ can be redefined by a client package.
+% Otherwise we fall back the Hyper\TeX\ standard and leave things to the DVI translator.
+% \changes{4.1j}{2009/10/25}{(AO, 545) hypertext capabilities off by default; enable with \classoption{hypertext}}
+%
+% A class or package that wishes to employ hypertext capabilities should
+% execute the \cmd\hypertext@enable@ltx\ procedure.
+% \begin{macrocode}
+\def\@@startlink#1{}%
+\def\@@endlink{}%
+\@ifxundefined \pdfoutput {\true@sw}{\@ifnum{\z@=\pdfoutput}{\true@sw}{\false@sw}}%
+{%
+ \def\@@startlink@hypertext#1{\leavevmode\special{html:<a href="#1">}}%
+ \def\@@endlink@hypertext{\special{html:</a>}}%
+}{%
+ \def\@@startlink@hypertext#1{%
+ \leavevmode
+ \pdfstartlink\pdfstartlink@attr
+ user{/Subtype/Link/A<</Type/Action/S/URI/URI(#1)>>}%
+ \relax
+ }%
+ \def\@@endlink@hypertext{\pdfendlink}%
+ \def\pdfstartlink@attr{attr{/Border[0 0 1 ]/H/I/C[0 1 1]}}%
+}%
+\def\hypertext@enable@ltx{%
+ \let\@@startlink\@@startlink@hypertext
+ \let\@@endlink\@@endlink@hypertext
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\href}
+% \changes{4.1p}{2010/02/24}{(AO, 582) A patch of \classname{hyperref.sty} to provide backward compatibility to \TeX Live 2007's version 6.75r}%
+% The \cmd\href\ command of \classname{hyperref} was extend somewhere
+% between versions 6.75r and 6.80e. We apply a repair to the earlier
+% version (if present) so that it works like the later version.
+%
+% The issue is the presence of whitespace, either following the \cmd\href\ token
+% or following the first argument's closing brace character.
+%
+% \begin{macrocode}
+\def\href@Hy{\hyper@normalise \href@ }%
+\def\href@Hy@ltx{\@ifnextchar\bgroup\Hy@href{\hyper@normalise\href@}}%
+\def\Hy@href#{\hyper@normalise\href@}%
+\begingroup
+ \endlinechar=-1 %
+ \catcode`\^^A=14 %
+ \catcode`\^^M\active
+ \catcode`\%\active
+ \catcode`\#\active
+ \catcode`\_\active
+ \catcode`\$\active
+ \catcode`\&\active
+ \gdef\hyper@normalise@ltx{^^A
+ \begingroup
+ \catcode`\^^M\active
+ \def^^M{ }^^A
+ \catcode`\%\active
+ \let%\@percentchar
+ \let\%\@percentchar
+ \catcode`\#\active
+ \def#{\hyper@hash}^^A
+ \def\#{\hyper@hash}^^A
+ \@makeother\&^^A
+ \edef&{\string&}^^A
+ \edef\&{\string&}^^A
+ \edef\textunderscore{\string_}^^A
+ \let\_\textunderscore
+ \catcode`\_\active
+ \let_\textunderscore
+ \let~\hyper@tilde
+ \let\~\hyper@tilde
+ \let\textasciitilde\hyper@tilde
+ \let\\\@backslashchar
+ \edef${\string$}^^A
+ \Hy@safe@activestrue
+ \hyper@n@rmalise
+ }^^A
+ \catcode`\#=6 ^^A
+ \gdef\Hy@ActiveCarriageReturn@ltx{^^M}^^A
+ \gdef\hyper@n@rmalise@ltx#1#2{^^A
+ \def\Hy@tempa{#2}^^A
+ \ifx\Hy@tempa\Hy@ActiveCarriageReturn
+ \Hy@ReturnAfterElseFi{^^A
+ \hyper@@normalise{#1}^^A
+ }^^A
+ \else
+ \Hy@ReturnAfterFi{^^A
+ \hyper@@normalise{#1}{#2}^^A
+ }^^A
+ \fi
+ }^^A
+ \gdef\hyper@@normalise@ltx#1#2{^^A
+ \edef\Hy@tempa{^^A
+ \endgroup
+ \noexpand#1{\Hy@RemovePercentCr#2%^^M\@nil}^^A
+ }^^A
+ \Hy@tempa
+ }^^A
+ \gdef\Hy@RemovePercentCr@ltx#1%^^M#2\@nil{^^A
+ #1^^A
+ \ifx\limits#2\limits
+ \else
+ \Hy@ReturnAfterFi{^^A
+ \Hy@RemovePercentCr #2\@nil
+ }^^A
+ \fi
+ }^^A
+\endgroup
+\def\switch@hyperref@href{%
+ \expandafter\@ifx\expandafter{\csname href \endcsname\href@Hy}{
+ \class@info{Repairing hyperref 6.75r \string\href}%
+ \let\hyper@normalise\hyper@normalise@ltx
+ \let\hyper@@normalise\hyper@@normalise@ltx
+ \let\hyper@n@rmalise\hyper@n@rmalise@ltx
+ \let\Hy@ActiveCarriageReturn\Hy@ActiveCarriageReturn@ltx
+ \let\Hy@RemovePercentCr\Hy@RemovePercentCr@ltx
+ \let\href\href@Hy@ltx
+ }{}%
+}%
+\appdef\document@inithook{\switch@hyperref@href}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\typeout}
+% We make the \cmd\typeout\ procedure of \LaTeX\ be \cmd\long,
+% because sometimes we are talking about \cmd\par.
+% \begin{macrocode}
+\def\typeout@org#1{%
+ \begingroup
+ \set@display@protect
+ \immediate\write\@unused{#1}%
+ \endgroup
+}%
+\long\def\typeout@ltx#1{%
+ \begingroup
+ \set@display@protect
+ \immediate\write\@unused{#1}%
+ \endgroup
+}%
+\@ifx{\typeout\typeout@org}{%
+ \class@info{Making \string\typeout\space \string\long}%
+ \let\typeout\typeout@ltx
+}{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{End of the \file{kernel} {\sc docstrip} module}
+% Here ends the module.
+% \begin{macrocode}
+%</kernel>
+% \end{macrocode}
+%
+% \Finale
+% \iffalse Here ends the programmer's documentation.\fi
+% \endinput
+%
+\endinput
+%%EOF
diff --git a/obsolete/macros/latex/contrib/revtex4-1/source/latex/revtex/revtex4-1.dtx b/obsolete/macros/latex/contrib/revtex4-1/source/latex/revtex/revtex4-1.dtx
new file mode 100644
index 0000000000..92df750df3
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/source/latex/revtex/revtex4-1.dtx
@@ -0,0 +1,8297 @@
+% \iffalse meta-comment balanced on line 122
+% revtex4-1.dtx: package to typeset APS, AIP, OSA, ASA, etc. journal articles
+% Copyright (c) 2009 The American Physical Society.
+% http://publish.aps.org/revtex4/
+% mailto:revtex@aps.org
+%
+% Disclaimer
+% This file is distributed WITHOUT ANY WARRANTY;
+% without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+% License
+% You may distribute this file under the conditions of the
+% LaTeX Project Public License 1.3 or later
+% (http://www.latex-project.org/lppl.txt).
+% ReadMe
+% For the documentation and more detailed instructions for
+% installation, typeset this document with \LaTeX.
+% Maintenance Status
+% This work has the LPPL maintenance status "maintained";
+% Current Maintainer of this work is Arthur Ogawa.
+%
+% This work consists of the main source file revtex4-1.dtx
+% and the derived files
+% revtex4.cls, revtex4.pdf
+% Distribution:
+% CTAN:macros/latex/contrib/revtex/
+%
+% Unpacking:
+% tex revtex4-1.dtx
+%
+% Documentation:
+% latex revtex4-1.dtx; ...
+%
+% Programm calls to get the documentation (example):
+% pdflatex revtex4-1.dtx
+% makeindex -s gind.ist revtex4-1.idx
+% makeindex -s gglo.ist -o revtex4-1.gls revtex4-1.glo
+% pdflatex revtex4-1.dtx
+% makeindex -s gind.ist revtex4-1.idx
+% pdflatex revtex4-1.dtx
+%
+% Installation:
+% TDS:bibtex/bst/revtex/
+% TDS:doc/latex/revtex/
+% TDS:tex/latex/revtex/
+% TDS:source/latex/revtex/
+%
+% Thanks, Heiko!
+% This method of letting a single .dtx file serve as both
+% documentation (via latex) and installer (via tex) follows
+% the example of Heiko Oberdiek. Thanks!
+%<*ignore>
+\begingroup
+ \def\x{LaTeX2e}%
+\expandafter\endgroup
+\ifcase
+ 0\expandafter\ifx\csname processbatchFile\endcsname\relax\else1\fi\ifx\fmtname\x\else 1\fi
+ \relax
+\else
+ \csname fi\endcsname
+%</ignore>
+%<*install>
+%% This file will generate documentation and runtime files
+%% from revtex4-1.dtx when run through TeX.
+\input docstrip
+\preamble
+
+This file is part of the APS files in the REVTeX 4 distribution.
+For the version number, search on the string %FileInfo
+
+Original version by David Carlisle
+Modified by Arthur Ogawa (mailto:arthur_ogawa at sbcglobal dot net)
+
+Copyright (c) 2009 The American Physical Society.
+http://publish.aps.org/revtex4/
+mailto:revtex4@aps.org
+
+See the REVTeX 4 README file for restrictions and more information.
+
+\endpreamble
+\askforoverwritefalse
+\keepsilent
+\generate{%
+ \file{revtex4-1.cls}{%
+ \from{revtex4-1.dtx}{kernel}%
+ \from{ltxutil.dtx}{kernel}%
+ \from{ltxfront.dtx}{kernel}%
+ \from{ltxgrid.dtx}{kernel}%
+ \from{revtex4-1.dtx}{options}%
+ \from{ltxutil.dtx}{options}%
+ \from{ltxfront.dtx}{options}%
+ \from{ltxgrid.dtx}{options}%
+ \from{revtex4-1.dtx}{package}%
+ }%
+ \file{aps4-1.rtx}{\from{revtex4-1.dtx}{aps}}%
+ \file{apsrmp4-1.rtx}{\from{revtex4-1.dtx}{rmp}}%
+ \file{aps10pt4-1.rtx}{\from{revtex4-1.dtx}{10pt}}%
+ \file{aps11pt4-1.rtx}{\from{revtex4-1.dtx}{11pt}}%
+ \file{aps12pt4-1.rtx}{\from{revtex4-1.dtx}{12pt}}%
+ \file{revsymb4-1.sty}{\from{revtex4-1.dtx}{revsymb}}%
+}%
+\ifToplevel{
+\Msg{***********************************************************}
+\Msg{*}
+\Msg{* To finish the installation, please move}
+\Msg{* *.cls, *.rtx, and *.sty }
+\Msg{* into a directory searched by TeX;}
+\Msg{* in a TDS-compliant installation:}
+\Msg{* texmf/tex/macros/latex/revtex/.}
+\Msg{*}
+\Msg{* To produce the documentation,
+ run revtex4-1.dtx through LaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing}
+\Msg{***********************************************************}
+}
+\endbatchfile
+%</install>
+%<*ignore>
+\fi
+%</ignore>
+% \fi
+%
+% \GetFileInfo{revtex4-1.dtx}\CheckSum{7177}
+%
+% \iffalse ltxdoc klootch
+%<*package>
+%%% @LaTeX-file{
+%%% filename = "revtex4-1.dtx",
+%%% version = "4.1r",
+%%% date = "2010/07/25",
+%%% time = "20:33:00 UT-8",
+%%% checksum = "7177",
+%%% author = "Arthur Ogawa (mailto:arthur_ogawa at sbcglobal.net),
+%%% commissioned by the American Physical Society.
+%%% ",
+%%% copyright = "Copyright (C) 1999, 2009 Arthur Ogawa,
+%%% distributed under the terms of the
+%%% LaTeX Project Public License, see
+%%% ftp://ctan.tug.org/macros/latex/base/lppl.txt
+%%% ",
+%%% address = "Arthur Ogawa,
+%%% USA",
+%%% telephone = "",
+%%% FAX = "",
+%%% email = "mailto colon arthur_ogawa at sbcglobal.net",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "latex, page grid, main vertical list",
+%%% supported = "yes",
+%%% abstract = "package to change page grid, MVL",
+%%% docstring = "The checksum field above generated by ltxdoc",
+%%% }
+%</package>
+% \fi
+%
+% \iffalse ltxdoc klootch
+% The following references the \file{00readme.tex} file,
+% which contains the frontmatter for the programmer's docs.
+% The contents of this file are generated when
+% you typeset this file with LaTeX.
+% Search on "{filecontents*}{00readme.tex}" to locate it.
+% \fi\input{00readme.tex}%
+%
+% \subsection{Bill of Materials}
+%
+% Following is a list of the files in this distribution arranged
+% according to provenance.
+%
+% \subsubsection{Primary Source}%
+% One single file generates all.
+%\begin{verbatim}
+%revtex4-1.dtx
+%\end{verbatim}
+%
+% \subsubsection{Generated by \texttt{tex revtex4-1.dtx}}%
+% Typesetting ths file under \TeX\ itself runs the installer,
+% which generates the package files.
+%\begin{verbatim}
+%revtex4-1.cls, revtex4.ins, revtex4.drv, aps4-1.rtx,
+%aps10pt4-1.rtx, aps11pt4-1.rtx, aps12pt4-1.rtx, revsymp.sty
+%\end{verbatim}
+%
+% \subsubsection{Generated by \texttt{pdflatex revtex4-1.dtx}}%
+% Typesetting the source file under \LaTeX\
+% generates the documentation.
+%\begin{verbatim}
+%revtex4.pdf,
+%\end{verbatim}
+%
+% \subsubsection{Auxiliary}%
+% The following are auxiliary files generated
+% in the course of running \LaTeX:
+% \begin{verbatim}
+%revtex4.aux revtex4.idx revtex4.ind revtex4.log revtex4.toc
+% \end{verbatim}
+%
+% \section{Code common to all modules}%
+%
+% The following may look a bit klootchy, but we
+% want to require only one place in this file
+% where the version number is stated,
+% and we also want to ensure that the version
+% number is embedded into every generated file.
+%
+% Now we declare that
+% these files can only be used with \LaTeXe.
+% An appropriate message is displayed if
+% a different \TeX{} format is used.
+% \begin{macrocode}
+%<*doc|kernel|aps|rmp|revsymb>
+\NeedsTeXFormat{LaTeX2e}[1996/12/01]%
+%</doc|kernel|aps|rmp|revsymb>
+%<kernel>\ProvidesClass{revtex4-1}
+%<aps>\ProvidesFile{aps4-1}
+%<rmp>\ProvidesFile{apsrmp4-1}
+%<10pt>\ProvidesFile{aps10pt4-1}
+%<11pt>\ProvidesFile{aps11pt4-1}
+%<12pt>\ProvidesFile{aps12pt4-1}
+%<revsymb>\ProvidesPackage{revsymb4-1}
+%<*doc>
+\ProvidesFile{revtex4-1.dtx}
+%</doc>
+%<*!package&!options>
+%<version>
+ [2010/07/25/20:33:00 4.1r (http://publish.aps.org/revtex4/ for documentation)]% \fileversion
+%</!package&!options>
+% \end{macrocode}
+% The current class name is remembered in \cmd\class@name.
+% This is something of a klootch, relying as it does on knowledge of the implementation of \cmd\ProvidesPackage.
+% \begin{macrocode}
+%<kernel>\let\class@name\@gtempa
+% \end{macrocode}
+%
+% \section{The driver module \texttt{driver}}
+%
+% This module, consisting of the present section,
+% typesets the programmer's documentation,
+% generating the \file{00readme.txt} and sample document as needed.
+%
+% Because the only uncommented-out lines of code at the beginning of
+% this file constitute the \file{driver} module itself,
+% we can simply typeset the \file{.dtx} file directly,
+% and there is thus rarely any need to
+% generate the ``driver'' {\sc docstrip} module.
+% Module delimiters are nonetheless required so that
+% this code does not find its way into the other modules.
+%
+% The \enve{document} command concludes the typesetting run.
+%
+% \begin{macrocode}
+%<*doc>
+% \end{macrocode}
+% The driver uses packages \file{ltxdoc.sty}, \file{ltxdocext.sty},
+% \file{hyperref.sty}, and whatever font package has been selected.
+% \begin{macrocode}
+\documentclass{ltxdoc}
+\RequirePackage{ltxdocext}%
+\let\url\undefined
+\RequirePackage[colorlinks=true,linkcolor=blue]{hyperref}%
+\expandafter\ifx\csname package@font\endcsname\@undefined\else
+ \expandafter\RequirePackage\expandafter{\csname package@font\endcsname}%
+\fi
+% \end{macrocode}
+% We ask for the usual indices and glossaries.
+% \begin{macrocode}
+\CodelineIndex\EnableCrossrefs % makeindex -s gind.ist revtex4
+\RecordChanges % makeindex -s gglo.ist -o revtex4.gls revtex4.glo
+% \end{macrocode}
+%
+% \subsubsection{Docstrip and info directives}
+% We use so many {\sc docstrip} modules that we set the
+% \texttt{StandardModuleDepth} counter to 1.
+% \begin{macrocode}
+\setcounter{StandardModuleDepth}{1}
+% \end{macrocode}
+% The following command retrieves the date and version information
+% from this file.
+% \begin{macrocode}
+\expandafter\GetFileInfo\expandafter{\jobname.dtx}%
+% \end{macrocode}
+%
+% \subsection{The Frontmatter File}
+% As promised above, here is the contents of the frontmatter file.
+% \begin{macrocode}
+\begin{filecontents*}{00readme.tex}
+\title{%
+ The \classname{revtex4-1} document class of the American Physical Society%
+ \protect\thanks{Work under hire to The American Physical Society.}%
+}%
+\author{Arthur Ogawa%
+ \protect\thanks{First revision of REV\TeX4.0 (unreleased) by David Carlisle}%
+}%
+\date{Version \fileversion, dated \filedate}%
+\newcommand\revtex{REV\TeX}
+
+\maketitle
+
+This file embodies the implementation of the APS \revtex\ 4.1 document class
+for electronic submissions to journals.
+
+The distribution point for this work is
+\url{http://publish.aps.org/revtex4/},
+which contains fully unpacked, prebuilt runtime files and documentation.
+
+\tableofcontents
+
+\section{Using \protect\revtex}
+
+The file \file{README} has retrieval and installation information.
+
+User documentation is presented separately in \file{auguide.tex}.
+
+The file \file{template.aps} is a boilerplate file.
+
+\changes{4.0a}{1998/01/16}{Initial version}
+\changes{4.0a}{1998/01/31}{Move after process options, so \cs{clearpage} not in scope of twocolumn}
+\changes{4.0a}{1998/01/31}{Rearrange the ordering so numerical ones come first. AO: David, what does this mean?}
+\changes{4.0a}{1998/01/31}{use font-dependent spacing}
+\changes{4.0a}{1998/01/31}{4.0d had twoside option setting twoside switch to false}
+\changes{4.0a}{1998/01/31}{Move after process options, so the following test works}
+\changes{4.0a}{1998/01/31}{print homepage}
+\changes{4.0a}{1998/01/31}{protect against hyperref revtex kludges which are not needed now}
+\changes{4.0a}{1998/06/10}{multiple preprint commands}
+\changes{4.0a}{1998/06/10}{comma not space between email and homepage}
+\changes{4.0a}{1998/06/10}{single space footnotes}
+\changes{4.0b}{1999/06/20}{First modifications by Arthur Ogawa (mailto:arthur\_ogawa at sbcglobal dot net)}
+\changes{4.0b}{1999/06/20}{Added localization of \cs{figuresname}}
+\changes{4.0b}{1999/06/20}{Added localization of \cs{tablesname}}
+\changes{4.0b}{1999/06/20}{AO: all code for \protect\classoption{10pt} is in this module.}
+\changes{4.0b}{1999/06/20}{AO: all code for \protect\classoption{11pt} is in this module.}
+\changes{4.0b}{1999/06/20}{AO: all code for \protect\classoption{12pt} is in this module.}
+\changes{4.0b}{1999/06/20}{AO: made aps.rtx part of revtex4.dtx}
+\changes{4.0b}{1999/06/20}{AO: remove duplicates}
+\changes{4.0b}{1999/06/20}{call \cs{print@floats}}
+\changes{4.0b}{1999/06/20}{Defer assignment until \cs{AtBeginDocument} time.}
+\changes{4.0b}{1999/06/20}{Defer decision until \cs{AtBeginDocument} time}
+\changes{4.0b}{1999/06/20}{Define three separate environments, defer assignment to \cs{AtBeginDocument} time.}
+\changes{4.0b}{1999/06/20}{Frank Mittelbach, has stated in \protect\classname{multicol}: ``The kernel command \cs{@footnotetext} should not be modified.'' Thus, I have removed David Carlisle's redefinition of that command. Note, however, that later versions of \protect\classname{multicol} do not require this workaround. Belt and suspenders.}%
+\changes{4.0b}{1999/06/20}{Move this ``complex'' option to the front, where it can be overridden by ``simple'' options.}
+\changes{4.0b}{1999/06/20}{New option}
+\changes{4.0b}{1999/06/20}{One-line caption sets flush left.}
+\changes{4.0b}{1999/06/20}{only execute if appropriate}
+\changes{4.0b}{1999/06/20}{Processing delayed to \cs{AtBeginDocument} time}
+\changes{4.0b}{1999/06/20}{Removed invocation of nonexistent class option \protect\classoption{groupauthors} and all other class options that should only be invoked by the document. (Otherwise precedence of class options does not work.)}
+\changes{4.0b}{1999/06/20}{Restore all media size class option of \protect\file{classes.dtx}}
+\changes{4.0b}{1999/06/20}{Stack \cs{preprint} args flush right at right margin.}
+\changes{4.0c}{1999/11/13}{(AO, 115) If three or more preprints specified, set on single line, with commas.}
+\changes{4.0c}{1999/11/13}{(AO, 129) section* within appendix was producing appendixname}
+\changes{4.0c}{1999/11/13}{*-form mandates pagebreak}
+\changes{4.0c}{1999/11/13}{also spelled ``acknowledgements''.}
+\changes{4.0c}{1999/11/13}{Do not put by REVTeX in every page foot}
+\changes{4.0c}{1999/11/13}{grid changes via ltxgrid procedures}
+\changes{4.0c}{1999/11/13}{grid changes with ltxgrid}
+\changes{4.0c}{1999/11/13}{Insert procedure \cs{checkindate}}
+\changes{4.0c}{1999/11/13}{Lose compatability mode.}
+\changes{4.0c}{1999/11/13}{New ltxgrid-based code, other bug fixes}
+\changes{4.0c}{1999/11/13}{New option ``checkin''}
+\changes{4.0c}{1999/11/13}{Prevent an inner footnote from performing twice}
+\changes{4.0d}{2000/04/10}{Also alter how lists get indented.}
+\changes{4.0d}{2000/04/10}{eprint takes an optional argument, syntactical only in this case.}
+\changes{4.0d}{2000/04/10}{New option}
+\changes{4.0d}{2000/05/10}{More features and bug fixes: compatability with longtable and array packages. Now certainly incompatible with multicol.}
+\changes{4.0d}{2000/05/17}{make longtable trigger the head, too}
+\changes{4.0d}{2000/05/18}{But alternative spelling is deprecated.}
+\changes{4.0e}{2000/09/20}{New option showkeys}
+\changes{4.0e}{2000/11/14}{Bug fixes and minor new features: title block affiliations can have ancillary data, just like authors; clearpage processing revamped, with floats staying in order; widetext ornaments.}
+\changes{4.0e}{2000/11/21}{adornments above and below.}
+\changes{4.0f}{2001/02/13}{Last bug fixes before release.}
+\changes{4.0rc1}{2001/06/17}{Running headers always as if two-sided}
+\changes{4.0rc1}{2001/06/18}{grid changes with push and pop}
+\changes{4.0rc1}{2001/06/18}{grid changes with push and pop}
+\changes{4.0rc4}{2001/07/23}{hyperref is no longer loaded via class option: use a usepackage statement instead}
+\changes{4.1a}{2008/01/18}{(AO, 457) Endnotes to be sorted in with numerical citations.}%
+\changes{4.1a}{2008/01/18}{(AO, 451) ``Cannot have more than 256 cites in a document''}%
+\changes{4.1a}{2008/01/18}{(AO, 457) Endnotes to be sorted in with numerical citations.}%
+\changes{4.1a}{2008/01/18}{(AO, 460) ``Proper style is "FIG. 1. ..." (no colon)''}%
+\changes{4.1a}{2008/01/18}{(AO, 478) \cs{ds@letterpaper}, so that ``letterpaper really is the default''}%
+\changes{4.1a}{2008/01/18}{(AO, 488) Change processing of options to allow an unused option to specify society and journal}%
+\changes{4.1a}{2008/01/19}{(AO, 461) Change the csname revtex uses from @dotsep to ltxu@dotsep. The former is understood in mu. (What we wanted was a dimension.)}%
+\changes{4.1a}{2008/01/19}{For natbib versions before 8.21, \cs{NAT@sort} was consulted only as natbib was being read in. Now it is fully dynamic.}
+\changes{4.1b}{2008/05/29}{The csname substyle@ext is now defined without a dot (.), to be compatible with \LaTeX usage (see @clsextension and @pkgextension).}
+\changes{4.1b}{2008/06/01}{(AO) Implement bibnotes through \cs{frontmatter@footnote@produce} instead of \cs{bibnotes@sw}}%
+\changes{4.1b}{2008/06/01}{Add option reprint, opposite of preprint, and preferred alternative to twocolumn}
+\changes{4.1b}{2008/06/29}{(AO, 455) Be nice to a list within the abstract (assign \cs{@totalleftmargin}).}
+\changes{4.1b}{2008/06/30}{(AO) Structure the Abstract using the \texttt{bibliography} environment}
+\changes{4.1b}{2008/07/01}{(AO) coordinate \cs{if@twoside} with \cs{twoside@sw}}
+\changes{4.1b}{2008/07/01}{(AO) make settings at class time instead of deferring them to later.}
+\changes{4.1b}{2008/07/01}{(AO) No longer need to test \cs{chapter} as of \texttt{natbib} version 8.2}
+\changes{4.1b}{2008/07/01}{(AO) No longer use \cs{secnumarabic@sw}, instead use \cs{setup@secnums}}
+\changes{4.1b}{2008/07/01}{(AO) Provide more diagnostics when \cs{@society} is assigned.}
+\changes{4.1b}{2008/07/01}{(AO) provide option longbibliography}
+\changes{4.1b}{2008/07/01}{Add \cs{@hangfroms@section}}
+\changes{4.1b}{2008/07/01}{Break out \cs{@caption@fignum@sep}}
+\changes{4.1b}{2008/07/01}{Class option galley sets \cs{preprintsty@sw} to false}
+\changes{4.1b}{2008/07/01}{Code relating to new syntax for frontmatter has been placed in \file{ltxfront.dtx}}
+\changes{4.1b}{2008/07/01}{Package textcase is now simply a required package}
+\changes{4.1b}{2008/07/01}{Procedures \cs{@parse@class@options@society} and \cs{@parse@class@options@journal} and friends}
+\changes{4.1b}{2008/07/01}{Read in all required packages together}
+\changes{4.1b}{2008/07/01}{Remove options newabstract and oldabstract}
+\changes{4.1b}{2008/08/01}{Section numbering via procedures \cs{secnums@rtx} and \cs{secnums@arabic}.}
+\changes{4.1b}{2008/08/04}{As with author formatting, rag the right more, and assign \cs{@totalleftmargin}. Also neutralize \cs{def@after@address}.}%
+\changes{4.1b}{2008/08/04}{Rag the right even more: .8\cs{hsize}. Also, assign \cs{@totalleftmargin}.}%
+\changes{4.1b}{2008/08/04}{The \texttt{rmp} journal substyle selects \texttt{groupedaddress} by default.}%
+\changes{4.1b}{2008/08/04}{Use \cs{setup@hook} to initialize all.}
+\changes{4.1c}{2008/08/15}{Document class option longbibliography via \cs{substyle@post}}
+\changes{4.1d}{2009/03/27}{Definition of \cs{ @fnsymbol} follows fixltx2e.sty}
+\changes{4.1e}{2008/06/29}{(AO, 455) be nice to a list within the abstract}
+\changes{4.1f}{2009/07/07}{(AO, 513) Add class option linenumbers: number the lines a la \classname{lineno}}
+\changes{4.1f}{2009/07/07}{(AO, 516) Merged references are separated with a semicolon}
+\changes{4.1f}{2009/07/10}{(AO, 520) Automatically produce \cs{bibliography} command when needed}%
+\changes{4.1f}{2009/07/11}{(AO, 521) Lonely bibliography head}%
+\changes{4.1f}{2009/07/11}{(AO, 522) Warn if software is expired}%
+\changes{4.1f}{2009/07/15}{(AO, 523) Add class option nomerge, to turn off new natbib 8.3 syntax}
+\changes{4.1f}{2009/07/20}{(AO, 524) Makes no sense if citations are superscript numbers and so are footnotes}
+\changes{4.1f}{2009/10/05}{(AO, 530) \cs{@fnsymbol}: Failed to import fixltx2e.sty technology. Return to LaTeX core.}
+\changes{4.1g}{2009/10/07}{(AO, 525) Remove phantom paragraph above display math that is given in vertical mode}%
+\changes{4.1g}{2009/10/07}{(AO, 538) \cs{MakeTextUppercase} inappropriately expands the double backslash}
+\changes{4.1h}{2009/10/09}{(AO) Remove expiry code in the release software}%
+\changes{4.1i}{2009/10/23}{(AO, 541) Defer assignment of \cs{cite} until after natbib loads}
+\changes{4.1j}{2009/10/24}{(AO, 549) Repairing natbib's \cs{BibitemShut} and \cs{bibAnnote}}
+\changes{4.1j}{2009/10/25}{(AO, 545) hypertext capabilities off by default; enable with \classoption{hypertext}}
+\changes{4.1j}{2009/10/25}{(AO, 552) Repair spacing in \cs{onlinecite}}
+\changes{4.1k}{2009/11/06}{(AO, 554) give the \cs{newlabel} command syntax appropriate to the hyperref package}
+\changes{4.1n}{2009/11/06}{(AO, 565) restore 4.0 behavior: invoking class option preprint implies class option preprintnumbers}
+\changes{4.1n}{2009/11/30}{(AO, 566) restore 4.0 behavior: flush column bottoms}
+\changes{4.1n}{2009/12/05}{(AO, 569) Use of \classname{hyperref} interferes with column balancing of last page}%
+\changes{4.1n}{2009/12/09}{(AO, 569) execute the after-last-shipout procedures from within the safety of the output routine}%
+\changes{4.1n}{2010/01/02}{(AO, 571) Interface \cs{set@footnotewidth} for determining the set width of footnotes}%
+\changes{4.1n}{2010/01/02}{(AO, 572) Independent footnote counter for title block. Abstract footnote counter shared with body.}%
+\changes{4.1n}{2009/12/13}{(AO, 573) arrange to load \classname{lineno} after any other packages.}%
+\changes{4.1n}{2010/01/04}{(AO, 575) the default for journal prstper is longbibliography}%
+\changes{4.1n}{2010/01/04}{(AO, 576) In .bst files, remove support for the annote field}%
+\changes{4.1n}{2010/01/02}{(AO) fine-tune spacing above and below widetext}%
+\changes{4.1n}{2010/01/02}{(AO, 571) class file must set \cs{splittopskip}; fine tune \cs{skip}\cs{footins}; \cs{footnoterule} defined in terms of \cs{skip}\cs{footins}}%
+\changes{4.1n}{2010/01/02}{(AO, 572) \cs{@makefntext} and \cs{frontmatter@makefntext} must be defined harmoniously}%
+\changes{4.1o}{2010/02/02}{(AO, 575) Automatically incorporate the (Bib\TeX-generated) .bbl into an explicit \env{thebibliography}}%
+\changes{4.1o}{2010/02/05}{(AO, 549) Remove patch to natbib, which is now at version 8.31a}
+\changes{4.1o}{2010/02/07}{(AO, 578) accommodate the possible space character preceding \cs{BibitemShut}.}
+\changes{4.1o}{2010/02/05}{(AO, 579) Endnote shall comprise their own Bib\TeX\ entry type: @FOOTNOTE.}
+\changes{4.1o}{2010/02/10}{(AO, 580) Provide a document class option to turn off production of eprint field in bibliography.}
+\changes{4.1o}{2010/02/12}{(AO, 580) Control .bst at run time.}%
+\changes{4.1o}{2010/02/09}{(AO, 581) Handle case: merged references, with first ending in a stop character.}
+\changes{4.1p}{2010/02/24}{(AO, 583) Provide interface to \classname{ltxgrid} \cs{onecolumn@grid@setup} and \cs{twocolumn@grid@setup}}
+\changes{4.1p}{2010/02/24}{(AO, 584) Per MD, remove trailing space character from each journal abbreviation: it had caused an extraneous space in the .bbl}
+\changes{4.1q}{2010/04/01}{(AO, 586) When .bbl is pasted into the document, prevent automatic bibliography inclusion.}%
+\changes{4.1q}{2010/04/13}{(AO, 588) Only write \revtex-specific BibTeX .bib data if the .bst style is set by REVTeX.}%
+\changes{4.1r}{2010/06/22}{(AO, 595) Provide \cs{lovname} along with other List of Videos definitions.}%
+
+\end{filecontents*}
+% \end{macrocode}
+%
+% \subsection{The Document Body}
+%
+% Here is the document body, containing only a
+% \cmd\DocInput\ directive---referring to this very file.
+% This very cute self-reference is a common \classname{ltxdoc} idiom.
+% \begin{macrocode}
+\begin{document}%
+\expandafter\DocInput\expandafter{\jobname.dtx}%
+\PrintChanges
+\end{document}
+% \end{macrocode}
+% And that is the end of the driver for the programmer's documentation.
+% \begin{macrocode}
+%</doc>
+% \end{macrocode}
+%
+% \section{Overview}%
+% \revtex\ is a \LaTeXe\ document class, somewhat like a hybrid of
+% the standard \LaTeX\ \classname{book} and \classname{article} classes.
+%
+% Certain packages are (should be) loaded by this class in any case:
+% \classname{amssymb}, \classname{amsmath}, \classname{bm}, \classname{natbib}.
+%
+% Certain packages are automatically loaded by this class
+% when a corresponding class option has been invoked:
+%
+% \begin{tabular}{ll}
+% \textbf{\revtex\ option}&\textbf{package}\\
+% \classoption{amsfonts}&\classname{amsfonts}\\
+% \classoption{amssymb}&\classname{amssymb}\\
+% \classoption{aps}&\classname{overcite}\\
+% \end{tabular}
+%
+% Certain other packages are to be loaded by the
+% document through explicit use of \cmd\usepackage.
+% Some mentioned in the user documentation are
+% \classname{graphicx}, \classname{longtable}, \classname{hyperref},
+% and \classname{bm}.
+%
+% Certain commonly used packages are known to be incompatible with
+% \revtex, among them \classname{multicol} and \classname{cite}.
+% If such a package is found to be loaded, \revtex\ issues an error message
+% and halts the job.
+% Halting might be considered severe punishment for loading an incompatible
+% package, but if we were to proceed, an even weirder error might be encountered
+% further down the road.
+%
+% This document class implements the substyle: a set of mutually
+% exclusive class options that, in this case, allow the
+% document class to address multiple societies.
+% It also implements a sub-substyle, giving the
+% journal of the given society.
+% Any society may create a substyle;
+% this file generates one for \classoption{aps}.
+%
+% FIXME: should always load the \classname{graphicx} package. No, allow user to load whichever graphics package is desired.
+%
+% QUERY: since \classname{amsfonts} and \classname{amssymb} extend
+% syntax, why not load them in any case?
+%
+% Certain processing occurs at the endgame for reading in \revtex, thereby establishing
+% precedence for assignments to \LaTeX's (and \revtex's) parameters:
+% \begin{enumerate}
+% \item
+% Figure out which society is operative and read in the indicated \file{.rtx} file.
+% \item
+% Figure out which journal option is operative and execute the indicated journal command. This may lead to reading in a journal substyle \file{.rtx} file.
+% \item
+% Figure out which pointsize is operative and execute the indicateded pointsize command. This may lead to reading in a pointsize \file{.rtx} file.
+% \item
+% Execute all of the document's options, in the order declared within the document.
+% \item
+% Read in all required packages (like \classname{natbib}, \classname{amsfonts}, \classname{amssymb}), that were determined by class, society, and journal.
+% \item
+% The last required package, if existing, is the document's style file, the \file{.rty} file.
+% Note that the \file{.rty} file can override the assignments of \revtex, society, journal, and required packages, and even load its own packages.
+% It can also, via appendations to \cmd\setup@hook, override the setup code itself.
+% \item
+% Execute all of the setup code accumulated. Such code can be queued by \revtex\ itself, by the society, by the journal, or by the pointsize.
+% \item
+% At this point, \revtex\ has completed the process of inputting itself,
+% and \LaTeX\ will now execute the \cmd\AtEndOfClass\ procedures.
+% \end{enumerate}
+%
+% \revtex\ will have enqueued code to execute at \cmd\AtBeginDocument\ time,
+% in two different queues.
+% \cmd\document@inithook\ executes immediately upon encountering the \cmd\begin\env{document} statement,
+% \cmd\class@documenthook\ at the end of all the code enqueued via \cmd\AtBeginDocument.
+% \begin{enumerate}
+% \item
+% Install procedures to execute at the very end of the class's
+% \cmd\AtBeginDocument\ processing, such as
+% \begin{enumerate}
+% \item
+% closing out the page grid
+% \item
+% putting out the LastPage label.
+% \item
+% issuing a \cmd\bibliographystyle\ command, based on the value set
+% by the society substyle.
+% \item
+% setting default values for parameters used in the document.
+%FIXME: differentiate between class's parameters that can wait until
+% they are used in the document, and parameters that are used at \cmd\AtBeginDocument\ time.
+% \end{enumerate}
+% \item
+% Install procedures to execute the very last at \cmd\AtEndDocument\ time,
+% such as the \cmd\clearpage\ processing.
+% \end{enumerate}
+%
+% Certain events are optionally scheduled for \cmd\AtBeginDocument\ time:
+% \begin{enumerate}
+% \item
+% Setting default values for the Booleans and for other procedures used in formatting.
+% \item
+% In response to class options options, adjusting parameters and procedures used in formatting.
+% \item
+% Implementing the \classoption{eqsecnum} option, if required.
+% \item
+% Setting the state engine for data commands.
+% \item
+% Memorizing procedures for later use.
+% \item
+% Setting type size and area, for use by later calculations.
+% \end{enumerate}
+%
+% Certain events are scheduled for \cmd\class@enddocumenthook\ time:
+% \begin{enumerate}
+% \item
+% Print out the migrated floats or the end notes, if needed.
+% \item
+% Close out the page grid.
+% \item
+% Label the last page of the document
+% \item
+% (\classname{natbib}) prepare to read in the \file{.aux} file.
+% \end{enumerate}
+%
+% \section{Writing journal-specifc extensions to \revtex}
+%
+% With this version of \revtex, we introduce a somewhat different
+% scheme for adapting \revtex\ to the needs of a specific journal.
+%
+% To create a journal substyle, you create new class options in
+% \revtex\ for the society, say \classoption{osa}, and any of that society's journals,
+% one of which is, say, \classoption{josaa},
+% using the code for the APS as a guide.
+% In particular, each of your new options should separately define \cmd\@society\
+% and \cmd\@journal. That for the former will be the same for
+% all options relating to a particular society.
+%
+% Then, for the society, you create a corresponding \file{.rtx}
+% file, in our case \file{osa.rtx}.
+% Within that file, you override procedures and parameter assignments as you see fit.
+% Ideally they will be generally applicable to all of that society's
+% journals (see the file \file{aps.rtx} for a realization of this scheme).
+% Also within that file, you include a
+% section of code for each journal, that for josaa looks like:
+% \begin{verbatim}
+% \@ifx{\@journal\journal@josaa}{%
+% <code specific to the josaa>
+% }{}%
+% \end{verbatim}
+%
+% Thus far, the scheme is similar to that used in \revtex\ 3.1.
+% However, the new scheme does differ from the old in that
+% the \file{.rtx} file should define no syntactical extensions
+% to \revtex.
+%
+% \section{The \classname{revtex4} Document Class}
+% Above, we took
+% advantage of 1) the \LaTeX\ definition of \cmd\ProvidesPackage\ and
+% 2) that the line of code immediately afterwards follows the \cmd\ProvidesClass\ statement above.
+% \begin{macrocode}
+%<*kernel>
+% \end{macrocode}
+%
+% Print a banner in the log:
+% \begin{macrocode}
+\GenericInfo{}{\space
+ Copyright (c) 2009 The American Physical Society.^^J
+ mailto:revtex@aps.org^^J
+ Licensed under the LPPL:^^Jhttp://www.ctan.org/tex-archive/macros/latex/base/lppl.txt^^J
+ Arthur Ogawa <arthur_ogawa at sbcglobal dot net>^^J
+ Based on work by David Carlisle <david at dcarlisle.demon.co.uk>%
+ \@gobble
+}%
+% \end{macrocode}
+%
+% \subsection{Compatibility Processing}
+%
+% If the document has \cmd\documentstyle|{revtex4}|,
+% then, instead of attempting to run in compatability mode,
+% just complain and exit.
+% \changes{4.0c}{1999/11/13}{Lose compatability mode.}
+% \begin{macrocode}
+\if@compatibility
+ \edef\reserved@a{\errhelp{%
+ Change your \string\documentstyle\space statement to
+ \string\documentclass\space and rerun.
+ }}\reserved@a
+ \errmessage{You cannot run \class@name\space in compatability mode}%
+ \expandafter\@@end
+\fi
+% \end{macrocode}
+%
+%
+% \section{Extensions to the \LaTeX\ Kernel}
+%
+% \begin{macrocode}
+%</kernel>
+% \end{macrocode}
+%
+% Here, we incorporate the utility, frontmatter, and page grid packages.
+% The \classname{ltxutil}, \classname{ltxfront}, and \classname{ltxgrid} source are distributed with
+% \revtex.
+%
+% Here begins the \file{options} \textsc{docstrip} module.
+% \begin{macrocode}
+%<*options>
+% \end{macrocode}
+%
+% \subsection{Hooks}
+%
+% \begin{macro}{\setup@hook}
+% The procedure
+% \cmd\setup@hook\
+% serves as the vehicle for all code that
+% gives values to the class's parameters once all the
+% society, journal, options, and packages have been processed.
+%
+% Arrange for journal substyles to set their own default values.
+% \begin{macrocode}
+\let\setup@hook\@empty
+% \end{macrocode}
+% \end{macro}
+%
+% After preamble processing is complete,
+% detect whether package \classname{longtable} has been loaded and patch it.
+% \begin{macrocode}
+\appdef\document@inithook{%
+ \switch@longtable
+ \let\LT@makecaption\LT@makecaption@rtx
+}%
+% \end{macrocode}
+%
+% \begin{macro}{\LT@makecaption}
+% We override the caption processing method of the \classname{longtable} package:
+% space below the caption is created via strut instead of whitespace.
+% \begin{macrocode}
+\def\LT@makecaption@rtx#1#2#3{%
+ \LT@mcol\LT@cols c{%
+ \hbox to\z@{%
+ \hss
+ \parbox[t]\LTcapwidth{%
+ \sbox\@tempboxa{#1{#2: }#3\unskip\nobreak\vrule\@width\z@\@height\z@\@depth .5\baselineskip}%
+ \ifdim\wd\@tempboxa>\hsize
+ #1{#2: }#3\unskip\nobreak\vrule\@width\z@\@height\z@\@depth .5\baselineskip
+ \else
+ \hbox to\hsize{\hfil\box\@tempboxa\hfil}%
+ \fi
+ \endgraf
+ }%
+ \hss
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\robust@boldmath}
+% Robustify the \cmd\boldmath command.
+% If Team \LaTeX\ (or any package) ever gets around to fixing this problem,
+% we will bow out. (This fix relates to bug \#394.)
+% \begin{macrocode}
+\def\protectdef@boldmath{%
+ \expandafter\@ifnotrelax\csname boldmath \endcsname{}{%
+ \class@info{Robustifying \string\LaTeX's \string\boldmath\space command}%
+ \expandafter\let\csname boldmath \endcsname\boldmath
+ \expandafter\def\expandafter\boldmath\expandafter{\expandafter\protect\csname boldmath \endcsname}%
+ }%
+}%
+\appdef\document@inithook{%
+ \protectdef@boldmath
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \section{Compatability with the geometry package}
+%
+% The \classname{geometry} package of Hideo Umeki provides a way to
+% specify the metrics of the media and page layout.
+% We want to ensure that \revtex\ does not foreclose on the use of
+% this or any other such package, nor to interfere with
+% explicit assignments of such metric parameters within the
+% document preamble.
+%
+% The \LaTeX\ parameters (resp. \TeX\ primitives) set by \classname{geometry} are:
+% \cmd\paperwidth, \cmd\paperheight,
+% \cmd\textwidth, \cmd\textheight,
+% \cmd\topmargin, \cmd\headheight, \cmd\headsep,
+% \cmd\footskip, \cmd\skip\cmd\footins,
+% \cmd\marginparwidth, \cmd\marginparsep,
+% \cmd\oddsidemargin, \cmd\evensidemargin,
+% \cmd\columnsep,
+% \cmd\hoffset, \cmd\voffset, \cmd\mag,
+% \cmd\if@twocolumn, \cmd\if@twoside, \cmd\if@mparswitch, \cmd\if@reversemargin,
+%
+% \revtex's assignments can be overridden by
+% any package or other statement in the document preamble,
+% so it should be compatible.
+%
+%FIXME: one parameter is rendered semantically void (by \file{ltxgrid.dtx}):
+% \cmd\if@twocolumn.
+%
+% \section{Options}\label{sec:options}%
+%
+% \subsection{Define Booleans Used in Options}%
+% The following Booleans are used within the document class to
+% allow the document or the substyle to make selections
+% of formatting.
+% An explicit document class option overrides an assignment made by a substyle.
+%
+% \subsection{Declare Options}%
+%
+% \subsubsection{Checkin: for Editorial Use}%
+% A document class option declaring that the document is being processed by the
+% editorial staff.
+%
+% This option should:
+% \begin{itemize}
+% \item
+% put date in footer along with folio
+% \item
+% Have the effect of selecting the \classoption{preprint} class option.
+% \item
+% Have the effect of selecting the \classoption{showpacs} class option.
+% \item
+% specify that when a float is placed h or H, it will be allowed to break over pages.
+% (Note: be sure that if the enclosed \env{tabular} has an optional argument, you change it to [v], or remove it entirely.)
+% \end{itemize}
+% \changes{4.0c}{1999/11/13}{New option ``checkin''}
+% \begin{macrocode}
+\DeclareOption{checkin}{%
+ \@booleantrue\dateinRH@sw
+ \@booleantrue\preprintsty@sw
+ \def\@pointsize{12}%
+ \@booleantrue\showPACS@sw
+ \@booleantrue\showKEYS@sw
+ \def\fp@proc@h{\allow@breaking@tables}%
+ \def\fp@proc@H{\allow@breaking@tables}%
+}%
+\@booleanfalse\dateinRH@sw
+\def\checkindate{\dateinRH@sw{{\tiny(\today)}}{}}%
+\def\allow@breaking@tables{%
+ \def\array@default{v}% tabular can break over pages
+ \@booleanfalse\floats@sw % table can break over pages
+}%
+% \end{macrocode}
+%
+% \subsubsection{Preprint Style}%
+%
+% \begin{macro}{\preprintsty@sw}
+% The boolean \cmd\preprintsty@sw\ signifies that
+% the document is to be formatted in preprint style.
+% \changes{4.0a}{1998/01/31}{Rearrange the ordering so numerical ones come first. AO: David, what does this mean?}
+% \changes{4.0a}{1998/06/10}{comma not space between email and homepage}
+% \changes{4.0b}{1999/06/20}{Move this ``complex'' option to the front, where it can be overridden by ``simple'' options.}
+% \changes{4.1b}{2008/06/01}{Add option reprint, opposite of preprint, and preferred alternative to twocolumn}
+% \begin{macrocode}
+\DeclareOption{preprint}{%
+ \@booleantrue\preprintsty@sw
+ \ExecuteOptions{12pt}%
+}%
+\DeclareOption{reprint}{%
+ \@booleanfalse\preprintsty@sw
+ \@booleantrue\twocolumn@sw
+ \ExecuteOptions{10pt}%
+}%
+\DeclareOption{manuscript}{%
+ \class@warn{Document class option manuscript is obsolete; use preprint instead}%
+ \ExecuteOptions{preprint}%
+}%
+\@booleanfalse\preprintsty@sw
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\showPACS@sw}
+% \begin{macro}{\showKEYS@sw}
+% If \cmd\showPACS@sw\ is true, print the PACS information in the title block,
+% otherwise not.
+% Similarly for \cmd\showKEYS@sw\ and the keywords.
+% \subsubsection{Showing PACS and keywords}%
+% \changes{4.0b}{1999/06/20}{New option}
+% \changes{4.0e}{2000/09/20}{New option showkeys}
+% \begin{macrocode}
+\DeclareOption{showpacs}{%
+ \@booleantrue\showPACS@sw
+}%
+\DeclareOption{noshowpacs}{%
+ \@booleanfalse\showPACS@sw
+}%
+\DeclareOption{showkeys}{%
+ \@booleantrue\showKEYS@sw
+}%
+\DeclareOption{noshowkeys}{%
+ \@booleanfalse\showKEYS@sw
+}%
+\@booleanfalse\showPACS@sw
+\@booleanfalse\showKEYS@sw
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Balance the last page when in two-column page grid}%
+%
+% \begin{macro}{\balancelastpage@sw}
+% \changes{4.1b}{2008/07/01}{(AO) make settings at class time instead of deferring them to later.}
+% If we are in a two-column page grid, we may wish to balance the columns
+% of the last page. This will be done automatically if the
+% \classoption{twocolumn} document class option is chosen.
+% This action will be turned off by the \classoption{nobalancelastpage}.
+% A complementary class option, \classoption{balancelastpage} is also provided.
+% \begin{macrocode}
+\DeclareOption{balancelastpage}{%
+ \@booleantrue\balancelastpage@sw
+}%
+\DeclareOption{nobalancelastpage}{%
+ \@booleanfalse\balancelastpage@sw
+}%
+\@booleantrue\balancelastpage@sw
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Showing preprint numbers}%
+%
+% \begin{macro}{\preprint@sw}
+% \changes{4.0d}{2000/04/10}{New option}
+% \changes{4.1b}{2008/07/01}{(AO) make settings at class time instead of deferring them to later.}
+% \changes{4.1n}{2009/11/06}{(AO, 565) restore 4.0 behavior: default value of \cs{preprint@sw} follows \cs{preprintsty@sw}}
+% The boolean \cmd\preprint@sw\ signifies that
+% the preprints (cf. \cmd\preprint) are to be formatted (usually on the title page).
+% The option \classoption{preprintnumbers} declares to do so,
+% \classoption{nopreprintnumbers} declares not to;
+% the default is to follow \cmd\preprintsty@sw.
+% \begin{macrocode}
+\DeclareOption{nopreprintnumbers}{\@booleanfalse\preprint@sw}%
+\DeclareOption{preprintnumbers}{\@booleantrue\preprint@sw}%
+\appdef\setup@hook{%
+ \@ifxundefined\preprint@sw{\let\preprint@sw\preprintsty@sw}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Hypertext Option}%
+%
+% \changes{4.0a}{1998/01/31}{protect against hyperref revtex kludges which are not needed now}
+% \changes{4.0b}{1999/06/20}{Move this ``complex'' option to the front, where it can be overridden by ``simple'' options.}
+% \changes{4.0rc4}{2001/07/23}{hyperref is no longer loaded via class option: use a usepackage statement instead}
+% \begin{macrocode}
+\DeclareOption{hyperref}{%
+% \end{macrocode}
+% The following code had been commented out, it is now truly a comment:
+% \begin{verbatim}
+%\AtEndOfClass{%
+% \begingroup
+% \edef\@tempa{%
+% \let
+% \noexpand\@clsextension
+% \noexpand\@empty
+% \noexpand\RequirePackage{hyperref}%
+% \def\noexpand
+% \@clsextension{\@clsextension}%
+% }%
+% \expandafter
+% \endgroup
+% \@tempa
+%}%
+% \def\@pointsize{10}%
+% \end{verbatim}
+%
+% If you have a hyper-foo enabled browser you may prefer this format
+% which does not print the URL for the home page, but just makes the
+% name a link, but by default print it so it works on paper.
+% \changes{4.0a}{1998/01/31}{print homepage}
+%
+% \begin{macrocode}
+ \class@warn{Class option "hyperref" is no longer supported.^^JEmploy \string\usepackage{hyperref} instead}%
+}%
+% \end{macrocode}
+%
+% \subsubsection{Type Size}%
+% \changes{4.1b}{2008/07/01}{(AO) make settings at class time instead of deferring them to later.}
+% Use \cmd\@pointsize|=10| rather than \cmd\@ptsize|=0| to allow easy extensions
+% to 9pt or whatever.
+% Note: the three alternatives are mutually exclusive.
+%
+% At this point, the parameter \cmd\@pointsize\ is set to \cmd\undefined:
+% a society \emph{must} give it a definition.
+% \begin{macrocode}
+\DeclareOption{10pt}{\def\@pointsize{10}}%
+\DeclareOption{11pt}{\def\@pointsize{11}}%
+\DeclareOption{12pt}{\def\@pointsize{12}}%
+\let\@pointsize\@undefined
+% \end{macrocode}
+%
+% \subsubsection{Media Size}%
+%
+% \begin{macro}{\paperheight}
+% \begin{macro}{\paperwidth}
+% \changes{4.0b}{1999/06/20}{Restore all media size class option of \protect\file{classes.dtx}}
+% \begin{macrocode}
+\DeclareOption{a4paper}{%
+ \setlength\paperheight {297mm}%
+ \setlength\paperwidth {210mm}%
+}%
+\DeclareOption{a5paper}{%
+ \setlength\paperheight {210mm}%
+ \setlength\paperwidth {148mm}%
+}%
+\DeclareOption{b5paper}{%
+ \setlength\paperheight {250mm}%
+ \setlength\paperwidth {176mm}%
+}%
+\DeclareOption{letterpaper}{%
+ \setlength\paperheight {11in}%
+ \setlength\paperwidth {8.5in}%
+}%
+\DeclareOption{legalpaper}{%
+ \setlength\paperheight {14in}%
+ \setlength\paperwidth {8.5in}%
+}%
+\DeclareOption{executivepaper}{%
+ \setlength\paperheight {10.5in}%
+ \setlength\paperwidth {7.25in}%
+}%
+\DeclareOption{landscape}{%
+ \setlength\@tempdima {\paperheight}%
+ \setlength\paperheight {\paperwidth}%
+ \setlength\paperwidth {\@tempdima}%
+}%
+% \end{macrocode}
+%
+% \changes{4.1a}{2008/01/18}{(AO, 478) \cs{ds@letterpaper}, so that ``letterpaper really is the default''}%
+% Effectively select \classoption{letterpaper}.
+% \begin{macrocode}
+\ds@letterpaper
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Bibnotes}%
+%
+% \begin{macro}{\frontmatter@footnote@produce}
+% Frontmatter footnotes result from frontmatter commands like
+% \cmd\email, \cmd\homepage, \cmd\altaffiliation, and \cmd\thanks.
+% The default for \cmd\frontmatter@footnote@produce\ is
+% \cmd\frontmatter@footnote@produce@footnote, which formats the frontmatter footnotes
+% at the foot of the title page. The \classoption{bibnotes} class option
+% defers them to the bibliography.
+% \changes{4.1b}{2008/06/01}{(AO) Implement bibnotes through \cs{frontmatter@footnote@produce} instead of \cs{bibnotes@sw}}%
+% \begin{macrocode}
+\DeclareOption{bibnotes}{\let\frontmatter@footnote@produce\frontmatter@footnote@produce@endnote}%
+\DeclareOption{nobibnotes}{\let\frontmatter@footnote@produce\frontmatter@footnote@produce@footnote}%
+\let\frontmatter@footnote@produce\frontmatter@footnote@produce@footnote
+\appdef\class@enddocumenthook{\auto@bib}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Footinbib}%
+%
+% \begin{macro}{\footinbib@sw}
+% The boolean \cmd\footinbib@sw\ signifies that
+% text footnotes are to be set in the bibliography, as endnotes.
+%
+% The document may set the value one way or the other via
+% the following two class options.
+% \begin{macrocode}
+\DeclareOption{footinbib}{\@booleantrue\footinbib@sw}
+\DeclareOption{nofootinbib}{\@booleanfalse\footinbib@sw}
+% \end{macrocode}
+% The default value is \cmd\false@sw, and the society or journal
+% may override the default.
+% \changes{4.1b}{2008/07/01}{(AO) make settings at class time instead of deferring them to later.}
+% \begin{macrocode}
+\@booleanfalse\footinbib@sw
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{altaffilletter}%
+%
+% \begin{macro}{\altaffilletter@sw}
+% \changes{4.1b}{2008/07/01}{(AO) make settings at class time instead of deferring them to later.}
+% Determine the procedure \cmd\thefootnote\ used in frontmatter:
+% the footnote symbol used in titlepage footnotes.
+% \begin{macrocode}
+\DeclareOption{altaffilletter}{\@booleantrue\altaffilletter@sw}%
+\DeclareOption{altaffilsymbol}{\@booleanfalse\altaffilletter@sw}%
+\@booleanfalse\altaffilletter@sw
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{superbib}%
+%
+% \begin{macro}{\place@bibnumber}
+% \changes{4.1b}{2008/07/01}{(AO) make settings at class time instead of deferring them to later.}
+% The procedure \cmd\place@bibnumber\ produces the number
+% at the head of the \cmd\bibitem, in the bibliography.
+% By default, it has the \cmd\bibnumfmt\ meaning assigned by the \classname{natbib} package.
+% It may be overridden by society, journal, or by the document options.
+%
+% \begin{macrocode}
+\DeclareOption{superbib}{%
+ \let\place@bibnumber\place@bibnumber@sup
+}%
+\def\place@bibnumber{\NATx@bibnumfmt}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\place@bibnumber@sup}
+% \begin{macro}{\place@bibnumber@inl}
+% For producing the \cmd\bibitem\ device,
+% we define two procedures to select from.
+%
+% Note that we could have used \classname{natbib}'s \cmd\ifNAT@super\
+% switch, but it does not allow for altering the meaning of \cmd\bibnumfmt.
+% \begin{macrocode}
+\def\place@bibnumber@sup#1{\textsuperscript{#1}}%
+\def\place@bibnumber@inl#1{[#1]}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{citeautoscript}%
+% \begin{macro}{\citeautoscript@sw}
+% This class option allows you to automatically accomodate a change from non-superscripted, numbered references
+% to superscripted, bunmbered references.
+%
+% Note: you should always mark up your document with the assumption that references are \emph{not} going to be superscripted.
+% Otherwise this option has no hope of working properly.
+%
+% \begin{macrocode}
+\DeclareOption{citeautoscript}{\@booleantrue\citeautoscript@sw}%
+\@booleanfalse\citeautoscript@sw
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Variants on the Bibliography Style}%
+% \changes{4.1b}{2008/07/01}{(AO) provide option longbibliography}
+%
+% \revtex\ anticipates that a society or journal will provide two related Bib\TeX bibliography style variants,
+% designating one as the default.
+% A pair of document class options \classoption{longbibliography} and \classoption{nolongbibliography}
+% allows the user to explicitly select between them.
+% \begin{macro}{\longbibliography@sw}
+%
+% \revtex's default for \cmd\longbibliography@sw\ is \cmd\false@sw.
+%
+% \begin{macrocode}
+\DeclareOption{longbibliography}{\@booleantrue\longbibliography@sw}%
+\DeclareOption{nolongbibliography}{\@booleanfalse\longbibliography@sw}%
+\@booleanfalse\longbibliography@sw
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\eprint@enable@sw}
+% \changes{4.1o}{2010/02/10}{(AO, 580) Provide a document class option to turn off production of eprint field in bibliography.}
+%
+% The document class options \classoption{eprint} and \classoption{noeprint}
+% give the user the ability to turn off production of the \texttt{eprint} field in the bibliography.
+% \begin{macrocode}
+\DeclareOption{eprint}{\@booleantrue\eprint@enable@sw}%
+\DeclareOption{noeprint}{\@booleanfalse\eprint@enable@sw}%
+\@booleantrue\eprint@enable@sw
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Simplex/Duplex Pages}%
+%
+% \begin{macro}{\twoside@sw}
+% \changes{4.1b}{2008/07/01}{(AO) coordinate \cs{if@twoside} with \cs{twoside@sw}}
+% The flag \cmd\twoside@sw\ signifies that the document is to be
+% formatted for duplex printing.
+% After the preamble is processed, we align the value
+% of the kernel \cmd\newif\ switch \cmd\if@twoside\
+% to that of \cmd\twoside@sw.
+% \cmd\if@twoside\ itself is used in the kernel's
+% \cmd\cleardoublepage\ and \cmd\@outputpage\ procedures.
+% \begin{macrocode}
+\@booleanfalse\twoside@sw
+\appdef\document@inithook{%
+ \twoside@sw{\@twosidetrue}{\@twosidefalse}%
+}%
+% \end{macrocode}
+% \changes{4.0a}{1998/01/31}{4.d had twoside option setting twoside switch to false}
+% The complementary options \classoption{twoside} and \classoption{oneside}
+% assert formatting for duplex or simplex printing, respectively.
+% At the same time, we arrange for the selection of the page grid
+% with respect to the marginal column:
+% Because \cmd\if@reversemargin\ remains default (false),
+% if duplex printing, this column will always be on the (right),
+% if simplex printing, it will always be on the (outside).
+% QUERY: correct choice?
+%FIXME: assign \cmd\if@mparswitch\ later (and protect the assignment, too).
+% \begin{macrocode}
+\DeclareOption{twoside}{\@booleantrue \twoside@sw\@mparswitchfalse}%
+\DeclareOption{oneside}{\@booleanfalse\twoside@sw\@mparswitchtrue}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Two-Column Page Grid}%
+%
+% \begin{macro}{\twocolumn@sw}
+% \changes{4.1b}{2008/07/01}{(AO) make settings at class time instead of deferring them to later.}
+% \changes{4.1p}{2010/02/24}{(AO, 583) Provide interface to \classname{ltxgrid} \cs{onecolumn@grid@setup} and \cs{twocolumn@grid@setup}}
+% The flag \cmd\twocolumn@sw\ signifies that the document is to be
+% formatted in the two-column page grid.
+%
+% If no options relating to page grid are invoked by
+% \cmd\AtBeginDcoument\ time, we set default values.
+% Up to that point, the class can check if \cmd\twocolumn@sw\
+% is \cmd\undefined\ to see if any related options have been invoked.
+%
+% \classoption{onecolumn} specifies one-column page grid.
+% The \classoption{twocolumn} class option employs the standard mechanism for
+% changing the column grid: the \classname{ltxgrid} package.
+% \begin{macrocode}
+\DeclareOption{onecolumn}{\@booleanfalse\twocolumn@sw}%
+\DeclareOption{twocolumn}{\@booleantrue \twocolumn@sw}%
+\@booleanfalse\twocolumn@sw
+% \end{macrocode}
+% The column grid is determined by the state of the switch \cmd\twocolumn@sw
+% and is effected at \cmd\class@documenthook\ time.
+% The society or journal file may re-define \cmd\select@column@grid\
+% to accomodate, e.g., more than two choices for the page grid.
+%
+% Note that \cmd\open@column@two\ adds items to the Main Vertical List,
+% so constitutes the true beginning of the document.
+%
+% Note also that if the selected column grid is a one-column grid,
+% there is nothing to do, because \classname{ltxgrid} has already
+% set that up via \cmd\@begindocumenthook.
+% \begin{macrocode}
+\def\select@column@grid{%
+ \twocolumn@sw{%
+ \twocolumn@grid@setup
+ \open@twocolumn
+ }{%
+ \onecolumn@grid@setup
+% \end{macrocode}
+% \begin{verbatim}
+% \open@onecolumn
+% \end{verbatim}
+% \begin{macrocode}
+ }%
+}%
+\appdef\class@documenthook{%
+ \select@column@grid
+}%
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\clear@document}
+% \changes{4.1n}{2009/12/05}{(AO, 569) Use of \classname{hyperref} interferes with column balancing of last page}%
+%
+% We install into \cmd\class@enddocumenthook\
+% a trap for the procedure \cmd\clearpage\ that attempts to end the current page.
+% This procedure needs to be headpatched with \cmd\close@column\ to end the current page grid.
+%
+% This procedure is executed after all typesetting is complete
+% i.e., after items like \cmd\printtables, as well as all commands queued up by \cmd\AtEndDocument.
+%
+% \begin{macrocode}
+\appdef\setup@hook{%
+ \let\clearpage@ltx\clearpage
+ \prepdef\clear@document{\let\clearpage\clearpage@ltx\let\clear@document\@empty\close@column}%
+ \appdef\class@documenthook{%
+ \appdef\class@enddocumenthook{%
+ \let\clearpage\clear@document
+ }%
+ }%
+}%
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\authoryear@sw}
+% \changes{4.1a}{2008/01/18}{(AO, 457) Endnotes to be sorted in with numerical citations.}%
+% The boolean \cmd\authoryear@sw\ signifies that we are to use author-year citations rather than numerical citations.
+%
+% The \classoption{author-year} class option selects ``'author-year'' citations;
+% \classoption{numerical} selectes ``numerical'' citations.
+% The former is the default.
+% \begin{macrocode}
+\DeclareOption{author-year}{\@booleantrue\authoryear@sw}%
+\DeclareOption{numerical}{\@booleanfalse\authoryear@sw}%
+\@booleanfalse\authoryear@sw
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\galley@sw}
+% The boolean \cmd\galley@sw\ signifies that
+% the document is to be formatted in galley style.
+%
+% Asserting both \cmd\galley@sw\ and \cmd\preprintsty@sw\
+% may produce strange formatting results, but it is not illegal.
+% However, it \emph{is} illegal to assert galley and any
+% twocolumn option.
+% \begin{macrocode}
+% \end{macrocode}
+% \classoption{galley} emulates setting the galleys of
+% a two-column journal.
+% CHANGED: this option should effectively set \cmd\preprintsty@sw\ false.
+% NOTE: it makes no sense to assert both galley and twocolumn.
+% \changes{4.1b}{2008/07/01}{Class option galley sets \cs{preprintsty@sw} to false}
+%
+% \begin{macrocode}
+\DeclareOption{galley}{%
+ \ExecuteOptions{onecolumn}%
+ \@booleantrue\galley@sw
+ \@booleanfalse\preprintsty@sw
+ \appdef\setup@hook{%
+ \advance\textwidth-\columnsep
+ \textwidth.5\textwidth
+ }%
+}%
+\@booleanfalse\galley@sw
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{raggedbottom or flushbottom}%
+% \begin{macro}{\raggedcolumn@sw}
+% \changes{4.1b}{2008/07/01}{(AO) make settings at class time instead of deferring them to later.}
+% The class options \classoption{raggedbottom} and \classoption{flushbottom} determine whether the columns (page)
+% are ragged bottom or flush bottom.
+% Note that we do not select a default here; that is done by the journal substyle.
+% \begin{macrocode}
+\DeclareOption{raggedbottom}{\@booleantrue\raggedcolumn@sw}
+\DeclareOption{flushbottom}{\@booleanfalse\raggedcolumn@sw}
+\@booleanfalse\raggedcolumn@sw
+\appdef\setup@hook{%
+ \raggedcolumn@sw{\raggedbottom}{\flushbottom}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{tightenlines}%
+%
+% This class option specifies that standard leading
+% is to be used to set the type.
+% If lacking, the leading will be loose.
+%
+% \begin{macro}{\tightenlines@sw}
+% \changes{4.1b}{2008/07/01}{(AO) make settings at class time instead of deferring them to later.}
+% The boolean \cmd\tightenlines@sw\ signifies that
+% the leading is to be made standard amount.
+% If false, it means that the leading is to be set extra open.
+% Has no effect on 10pt size option.
+%
+% \begin{macrocode}
+\DeclareOption{tightenlines}{\@booleantrue\tightenlines@sw}
+\@booleanfalse\tightenlines@sw
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{lengthcheck}%
+%
+% \begin{macro}{\lengthcheck@sw}
+% \changes{4.1b}{2008/07/01}{(AO) make settings at class time instead of deferring them to later.}
+% The flag \cmd\lengthcheck@sw\ signifies that
+% the length checking is in effect.
+% It is up to the individual journal substyle
+% to alter its formatting accordingly.
+% \begin{macrocode}
+\@booleanfalse\lengthcheck@sw
+% \end{macrocode}
+% This class option specifies that the formatted document
+% should approach as closely as possible the
+% formatting of an actual journal article
+% to facilitate the author's performance of a length check.
+%
+%FIXME: society or journal may have its own definition of this option.
+% \begin{macrocode}
+\DeclareOption{lengthcheck}{%
+ \@booleantrue\lengthcheck@sw
+ \ExecuteOptions{reprint}%
+}%
+% \end{macrocode}
+% In addition, if length checking is in effect, we will enable
+% the tally of text length.
+% \begin{macrocode}
+\appdef\setup@hook{%
+ \lengthcheck@sw{\@booleantrue\tally@box@size@sw}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Draft and Final}%
+%
+% \begin{macro}{\draft@sw}
+% \changes{4.1b}{2008/07/01}{(AO) make settings at class time instead of deferring them to later.}
+% The flag \cmd\draft@sw\ signifies that the document is to be
+% formatted in draft mode.
+%
+% \begin{macrocode}
+\appdef\setup@hook{%
+ \draft@sw{\overfullrule 5\p@}{\overfullrule\z@}%
+}%
+% \end{macrocode}
+%
+% Certain packages may pay attention to the
+% class option \classoption{draft} that sets this Boolean.
+% \begin{macrocode}
+\DeclareOption{draft}{\@booleantrue\draft@sw}%
+\DeclareOption{final}{\@booleanfalse\draft@sw}%
+\@booleanfalse\draft@sw
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \subsubsection{eqsecnum}%
+%
+% \begin{macro}{\eqsecnum@sw}
+% The flag \cmd\eqsecnum@sw\ signifies that equations are to be
+% numbered with the section, e.g., ``Eq. (2.13)''.
+% \begin{macrocode}
+\appdef\setup@hook{%
+ \eqsecnum@sw{%
+ \@addtoreset{equation}{section}%
+ \def\theequation@prefix{\arabic{section}.}%
+ }{}%
+}%
+% \end{macrocode}
+%
+% The \classoption{eqsecnum} class option signifies that equations are
+% to be numbered within sections.
+% \begin{macrocode}
+\DeclareOption{eqsecnum}{\@booleantrue\eqsecnum@sw}%
+\@booleanfalse\eqsecnum@sw
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{secnumarabic}%
+% \changes{4.1b}{2008/07/01}{(AO) No longer use \cs{secnumarabic@sw}, instead use \cs{setup@secnums}}
+% The \classoption{secnumarabic} class option signifies that sectioning commands are
+% to be numbered arabic:
+% the procedure \cmd\secnums@arabic\ is executed as the default.
+% Otherwise, the procedure \cmd\secnums@rtx\ determines things.
+% The society or journal may redefine either procedure,
+% and may change the definition of \cmd\setup@secnums\ itself,
+% thereby establishing a different default.
+% \begin{macrocode}
+\appdef\setup@hook{%
+ \setup@secnums
+}%
+\DeclareOption{secnumarabic}{%
+ \def\setup@secnums{\secnums@arabic}%
+}%
+\def\setup@secnums{\secnums@rtx}%
+% \end{macrocode}
+% The code that defines \cmd\secnums@rtx\ and \cmd\secnums@arabic\ appears
+% in Section~\ref{sec:secnumarabic}.
+%
+% \begin{macro}{fleqn}
+% FIXME: model fleqn after amsfonts. I no longer understand why I said this.
+% \file{fleqn.clo} is not a package, so it can simply be \cmd\input.
+% \begin{macrocode}
+\DeclareOption{fleqn}{%
+ \input{fleqn.clo}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{floats/endfloats}%
+%
+% \begin{macro}{\floats@sw}
+% \begin{macro}{\floatp@sw}
+% \changes{4.1b}{2008/07/01}{(AO) make settings at class time instead of deferring them to later.}
+% The Boolean \cmd\floats@sw\ signifies that floats are to be floated;
+% if false, that floats are to be deferred to the end of the document.
+% By default, the former.
+% Note that the state of this Boolean is to be changed by
+% the document class in response to user-selected options.
+%
+% This boolean and the assignment of its default value is done by
+% the \classname{ltxutil} package.
+%
+% The Boolean \cmd\floatp@sw\ signifies that endfloats are to be set one per page;
+% if false, that endfloats are to be set with multiple floats per page permitted.
+% By default, the latter.
+% Note that the state of this Boolean is to be changed by
+% the document class in response to user-selected options.
+% The default is established here.
+%
+% These options control, via the Boolean \cmd\floats@sw,
+% whether floats are to be migrated to the end of the document.
+% \begin{macrocode}
+\DeclareOption{floats}{\@booleantrue\floats@sw\@booleanfalse\floatp@sw}
+\DeclareOption{endfloats}{\@booleanfalse\floats@sw\@booleanfalse\floatp@sw}
+\DeclareOption{endfloats*}{\@booleanfalse\floats@sw\@booleantrue\floatp@sw}
+\@booleantrue\floats@sw
+\@booleantrue\floatp@sw
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{titlepage/notitlepage}%
+% These options control, via \cmd\titlepage@sw,
+% whether the title block is to be set on a separate page.
+%
+% \begin{macro}{\titlepage@sw}
+% \changes{4.1b}{2008/07/01}{(AO) make settings at class time instead of deferring them to later.}
+% The flag \cmd\titlepage@sw\ signifies that a forced
+% page break is to follow the title page: the article
+% title appears on a page by itself.
+%
+% \begin{macrocode}
+\DeclareOption{titlepage}{\@booleantrue\titlepage@sw}
+\DeclareOption{notitlepage}{\@booleanfalse\titlepage@sw}
+\@booleanfalse\titlepage@sw
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Substyle and Sub-substyle}%
+%
+% \begin{macro}{\change@society}
+% \begin{macro}{\change@journal}
+% \changes{4.1b}{2008/07/01}{(AO) Provide more diagnostics when \cs{@society} is assigned.}
+% If the society or, resp., journal has already been assigned,
+% notify user whether it is being overridden.
+%
+% \begin{macrocode}
+\def\change@society#1{%
+ \def\@tempa{#1}%
+ \@ifxundefined\@society{%
+ \class@info{Selecting society \@tempa}%
+ \let\@society\@tempa
+ }{%
+ \@ifx{\@tempa\@society}{}{%
+ \class@warn{Conflicting society \@tempa<>\@society; not selected}%
+ }%
+ }%
+}%
+\def\change@journal#1{%
+ \def\@tempa{#1}%
+ \@ifxundefined\@journal{%
+ \class@info{Selecting journal \@tempa}%
+ \let\@journal\@tempa
+ }{%
+ \@ifx{\@tempa\@journal}{}{%
+ \class@warn{Conflicting journal \@tempa<>\@journal; not selected}%
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% Here had been the class options relating to the APS.
+% Now that all societies are on an equal footing, this code is in the
+% respective \file{.rtx} file.
+% \begin{macrocode}
+% \end{macrocode}
+%
+% \subsubsection{Optical Society of America}%
+% Here are the class options relating to the Optical Society of America.
+%
+% Note: as of 2008, the only OSA module being distributed by ctan is \file{osajnl.rtx}.
+% The class options declared here are, I think, unused.
+% \begin{macrocode}
+\DeclareOption{osa}{\change@society{osa}\let\@journal\@undefined}%
+\DeclareOption{osameet}{\change@society{osa}\def\@journal{osameet}}%
+\DeclareOption{opex}{\change@society{osa}\def\@journal{opex}}%
+\DeclareOption{tops}{\change@society{osa}\def\@journal{tops}}%
+\DeclareOption{josa}{\change@society{osa}\def\@journal{josa}}%
+% \end{macrocode}
+%
+% \begin{macro}{\rtx@require@packages}
+% \changes{4.1b}{2008/07/01}{Read in all required packages together}
+% The procedure \cmd\rtx@require@packages\ accumulates all \cmd\RequirePackage\ statements
+% in the course of loading the document class.
+% Carrying out these operations at that time is needed:
+% \cmd\ProcessOptions\ must be executed first.
+% \begin{macrocode}
+\let\rtx@require@packages\@empty
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\MakeUppercase}
+% \begin{macro}{\MakeLowercase}
+% \changes{4.1b}{2008/07/01}{Package textcase is now simply a required package}
+% \changes{4.1b}{2008/07/01}{Read in all required packages together}
+% \changes{4.1g}{2009/10/07}{(AO, 538) \cs{MakeTextUppercase} inappropriately expands the double backslash}
+% We load the \classname{textcase} package of David Carlisle.
+% Now that its bug of long standing has been repaired, we no longer need to doctor it up.
+% And, because its loading has been deferred until \cmd\rtx@require@packages\ time,
+% we no longer override \LaTeX\ here. Instead, the \classname{textcase} package
+% will be asked to do that.
+% \begin{macrocode}
+\appdef\rtx@require@packages{%
+ \RequirePackage[overload]{textcase}%
+}%
+% \end{macrocode}
+% The following code used to
+% let the \classname{textcase} commands override those of \LaTeX:
+% \begin{verbatim}
+%\appdef\setup@hook{%
+% \expandafter
+% \let\csname MakeUppercase \expandafter\endcsname
+% \csname MakeTextUppercase \endcsname
+% \expandafter
+% \let\csname MakeLowercase \expandafter\endcsname
+% \csname MakeTextLowercase \endcsname
+% }%
+% \end{verbatim}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{amsfonts}
+% \changes{4.1b}{2008/07/01}{Read in all required packages together}
+% The class option \classoption{amsfonts} has the
+% same effect as if the document preamble contained
+% a \cmd\usepackage\verb${amsfonts}$ statement.
+% \begin{macrocode}
+\DeclareOption{amsfonts}{%
+ \def\class@amsfonts{\RequirePackage{amsfonts}}%
+}%
+\DeclareOption{noamsfonts}{%
+ \let\class@amsfonts\@empty
+}%
+\appdef\rtx@require@packages{%
+ \@ifxundefined\class@amsfonts{}{\class@amsfonts}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{amssymb}
+% \changes{4.1b}{2008/07/01}{Read in all required packages together}
+% The class option \classoption{amssymb} has the
+% same effect as if the document preamble contained
+% a \cmd\usepackage\verb${amssymb}$ statement.
+% \begin{macrocode}
+\DeclareOption{amssymb}{%
+ \def\class@amssymb{\RequirePackage{amssymb}}%
+}%
+\DeclareOption{noamssymb}{%
+ \let\class@amssymb\@empty
+}%
+\appdef\rtx@require@packages{%
+ \@ifxundefined\class@amssymb{}{\class@amssymb}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{amsmath}
+% \changes{4.1b}{2008/07/01}{Read in all required packages together}
+% The class option \classoption{amsmath} has the
+% same effect as if the document preamble contained
+% a \cmd\usepackage\verb${amsmath}$ statement.
+%
+% We require version 1.2 (datestamped 1997/03/20) or later.
+% The \expandafter\cmd\csname ver@amsmath.sty\endcsname, will
+%
+% \LaTeX\ note:
+% Certain \LaTeX\ procedures have an arbitrary and pointless restriction that they may be used only within the preamble.
+% We get around this by preserving the procedures in private \cmd\csname s.
+%
+% FIXME note: it is difficult to ensure that an error summary will be printed on the console at the very end,
+% but \classname{ltxgrid} allows accomplishing this via an interrupt, put down at \cmd\AtEndDocument\ time.
+%
+% \begin{macrocode}
+\DeclareOption{amsmath}{%
+ \def\class@amsmath{\RequirePackage{amsmath}[\ver@amsmath@prefer]}%
+}%
+\DeclareOption{noamsmath}{%
+ \let\class@amsmath\@empty
+}%
+\appdef\rtx@require@packages{%
+ \preserve@LaTeX
+ \@ifxundefined\class@amsmath{}{\class@amsmath}%
+ \appdef\class@enddocumenthook{\test@amsmath@ver}%
+}%
+\appdef\preserve@LaTeX{%
+ \let\@ifl@aded@LaTeX\@ifl@aded
+ \let\@ifpackageloaded@LaTeX\@ifpackageloaded
+ \let\@pkgextension@LaTeX\@pkgextension
+ \let\@ifpackagelater@LaTeX\@ifpackagelater
+ \let\@ifl@ter@LaTeX\@ifl@ter
+ \let\@ifl@t@r@LaTeX\@ifl@t@r
+ \let\@parse@version@LaTeX\@parse@version
+}%
+\appdef\restore@LaTeX{%
+ \let\@ifl@aded\@ifl@aded@LaTeX
+ \let\@ifpackageloaded\@ifpackageloaded@LaTeX
+ \let\@pkgextension\@pkgextension@LaTeX
+ \let\@ifpackagelater\@ifpackagelater@LaTeX
+ \let\@ifl@ter\@ifl@ter@LaTeX
+ \let\@ifl@t@r\@ifl@t@r@LaTeX
+ \let\@parse@version\@parse@version@LaTeX
+}%
+\def\test@amsmath@ver{%
+ \begingroup
+ \restore@LaTeX
+ \@ifpackageloaded{amsmath}{%
+ \@ifpackagelater{amsmath}{\ver@amsmath@prefer}{}{%
+ \class@warn{%
+ You have loaded amsmath, version "\csname ver@amsmath.sty\endcsname",\MessageBreak
+ but this class requires version "\ver@amsmath@prefer", or later.\MessageBreak
+ Please update your LaTeX installation.
+ }%
+ }%
+ }{%
+ }%
+ \endgroup
+}%
+\def\ver@amsmath@prefer{2000/01/15 v2.05 AMS math features}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Presenting Authors and Their Affiliations}%
+% \changes{4.1b}{2008/07/01}{Code relating to new syntax for frontmatter has been placed in \file{ltxfront.dtx}}
+% Class options for presenting authors and their affiliations are now defined in
+% \file{ltxfront.dtx}.
+%
+% \begin{macrocode}
+% \end{macrocode}
+%
+% \subsubsection{Typeset by \revtex}%
+%
+% \begin{macro}{\byrevtex@sw}
+% \changes{4.1b}{2008/07/01}{(AO) make settings at class time instead of deferring them to later.}
+% The flag \cmd\byrevtex@sw\ signifies that the document should
+% bear an imprint to the effect that it was formatted by this document class.
+%
+% The class option \classoption{byrevtex} signifies that you want the
+% ``Typeset by \revtex'' byline to appear on your formatted output.
+% By default, no such byline appears.
+% \begin{macrocode}
+\DeclareOption{byrevtex}{\@booleantrue\byrevtex@sw}%
+\@booleanfalse\byrevtex@sw
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Attempt to fix float placement failure}%
+%
+% \begin{macro}{\force@deferlist@sw}
+% \changes{4.1b}{2008/07/01}{(AO) make settings at class time instead of deferring them to later.}
+% \revtex\ uses the \classname{ltxgrid} package, which provides the ability to attempt repairs when
+% \LaTeX's float placement mechanism is about to fail, but that facility is turned off by default.
+% Users should invoke the \classoption{floatfix} document class option to enable this \LaTeX\ extension.
+% If not, a helpful message is printed in the log, indicating how to work around the difficulty.
+% \begin{macrocode}
+\DeclareOption{floatfix}{\@booleantrue\force@deferlist@sw}%
+\DeclareOption{nofloatfix}{\@booleanfalse\force@deferlist@sw}%
+\@booleanfalse\force@deferlist@sw
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@fltovf}
+% \begin{macro}{\@fltstk}
+% The \LaTeX\ kernel error message \cmd\@fltovf\ may now be a bit more helpful to the user;
+% likewise for the \cmd\@fltstk\ message of \classname{ltxgrid}.
+% \begin{macrocode}
+\gdef\@fltovf{%
+ \@latex@error{%
+ Too many unprocessed floats%
+ \force@deferlist@sw{}{; try class option [floatfix]}%
+ }\@ehb
+}%
+\def\@fltstk{%
+ \@latex@warning{%
+ A float is stuck (cannot be placed)%
+ \force@deferlist@sw{}{; try class option [floatfix]}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ltxgrid@info@sw}
+% \begin{macro}{\outputdebug@sw}
+% The two options \classoption{ltxgridinfo} and \classoption{outputdebug} turn on informative diagnostics within the
+% package \classname{ltxgrid}. Only people who really want to see this output will select these class options.
+% Consult documentation for the \classname{ltxgrid} package to see what output the related switches enable.
+% \begin{macrocode}
+\DeclareOption{ltxgridinfo}{%
+ \@booleantrue\ltxgrid@info@sw
+%\@booleantrue\ltxgrid@foot@info@sw
+}%
+\DeclareOption{outputdebug}{%
+ \@booleantrue\outputdebug@sw
+ \@booleantrue\ltxgrid@info@sw
+ \@booleantrue\ltxgrid@foot@info@sw
+ \traceoutput
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Option to relax page height}%
+%
+% \begin{macro}{\textheight@sw}
+% The \classname{ltxgrid} package can set text pages to their natural height or force them to the full
+% text height; the latter is the default.
+% If setting the pages with a variable length,
+% the running foot will move up or down with the natural length of the text column.
+% While I recommend against doing so, this option will turn that switch to the latter setting.
+% \begin{macrocode}
+\DeclareOption{raggedfooter}{\@booleanfalse\textheight@sw}%
+\DeclareOption{noraggedfooter}{\@booleantrue\textheight@sw}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Selecting procedure for processing abstract}%
+% \changes{4.1b}{2008/07/01}{Remove options newabstract and oldabstract}
+% Code defining options \classoption{newabstract} and \classoption{oldabstract} has been removed.
+%
+% \subsection{Option to turn on diagnostics in the frontmatter}%
+%
+% \begin{macro}{\frontmatterverbose@sw}
+% \changes{4.1b}{2008/07/01}{Code relating to new syntax for frontmatter has been placed in \file{ltxfront.dtx}}
+% A diagnostic option, not for the average enduser, which reveals
+% the workings of the frontmatter.
+% This code interfaces to that of \file{ltxfront.dtx}.
+% \begin{macrocode}
+\DeclareOption{frontmatterverbose}{\@booleantrue\frontmatterverbose@sw}%
+\@booleanfalse\frontmatterverbose@sw
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\linenumbers@sw}
+% \changes{4.1f}{2009/07/07}{(AO, 513) Add class option linenumbers: number the lines a la \classname{lineno}}
+% \changes{4.1n}{2009/12/13}{(AO, 573) arrange to load \classname{lineno} after any other packages.}%
+% An option to number the lines of type in the output in the manner of \classname{lineno}.
+%
+% At present, we use that very package to implement this functionality.
+% This means that users may modify the workings of that package per its documentation (which see).
+%
+% However, compatibility with \classname{amsmath} requires that \classname{lineno} be loaded afterwards.
+% Therefore, we defer loading of this package until after the preamble is completed.
+% \begin{macrocode}
+\DeclareOption{linenumbers}{%
+ \appdef
+ \class@documenthook{%
+ \RequirePackage{lineno}[2005/11/02 v4.41]%
+ \linenumbersep4pt\relax
+ \linenumbers\relax
+ }%
+}%
+% \end{macrocode}
+% By default, line numbering is off.
+% \end{macro}
+%
+% \begin{macro}{\NAT@merge}
+% \changes{4.1f}{2009/07/15}{(AO, 523) Add class option nomerge, to turn off new natbib 8.3 syntax}
+% Add class option nomerge, to turn off natbib 8.3 syntax for citation key.
+% The default value of REVTeX 4.1 for \cmd\NAT@merge is \cmd\thr@@, which turns on
+% the new syntax along with its semantics.
+% Legacy documents that would be incompatible with the new syntax can be successfully processed
+% with class option \classoption{nomerge}.
+% \begin{macrocode}
+\DeclareOption{nomerge}{%
+ \appdef\setup@hook{%
+ \@ifnum{\NAT@merge>\z@}{\let\NAT@merge\z@}{}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Default Option, Society, Journal, and pointsize}%
+%
+% \changes{4.1a}{2008/01/18}{(AO, 488) Change processing of options to allow an unused option to specify society and journal}%
+% This change will not break OSA documents because that society is still built in to revtex4.
+%
+% \begin{macro}{\@parse@class@options@society}
+% \begin{macro}{\@parse@class@options@}
+% \changes{4.1b}{2008/07/01}{Procedures \cs{@parse@class@options@society} and \cs{@parse@class@options@journal} and friends}
+% The procedure \cmd\@parse@class@options@society\ parses the options passed to this document class
+% for the \cmd\@society.
+% It is like \cmd\ProcessOptions*\ in that it accesses
+% \cmd\@ptionlist\{\cmd\@currname.\cmd\@currext\}.
+% Any undefined option is considered: if there is a corresponding \file{.rtx} file,
+% it will change the society accordingly
+% and define a placeholder class option for the society thus found
+% (thus preventing a spurious "option not found" message).
+%
+% The procedure \cmd\@parse@class@options@\ parses the document's options
+% for any that set the \cmd\csname\ provided.
+% \begin{macrocode}
+\def\@parse@class@options@society{%
+ \edef\@tempa{\@ptionlist{\@currname.\@currext}}%
+ \expandafter\@for\expandafter\CurrentOption\expandafter:\expandafter=\@tempa\do{%
+ \expandafter\@ifnotrelax\csname ds@\CurrentOption\endcsname{}{%
+ \IfFileExists{\CurrentOption\substyle@post.\substyle@ext}{%
+ \expandafter\change@society\expandafter{\CurrentOption}%
+ \expandafter\let\csname ds@\CurrentOption\endcsname\@empty
+ }{}%
+ }%
+ }%
+}%
+\def\@parse@class@options@#1{%
+ \edef\@tempa{\@ptionlist{\@currname.\@currext}}%
+ \expandafter\@for\expandafter\CurrentOption\expandafter:\expandafter=\@tempa\do{%
+ \expandafter\@ifnotrelax\csname ds@\CurrentOption\endcsname{%
+ \begingroup\csname ds@\CurrentOption\endcsname
+ \@ifxundefined#1{%
+ \endgroup
+ }{%
+ \expandafter\endgroup\expandafter\def\expandafter#1\expandafter{#1}%
+ }%
+ }{}%
+ }%
+}%
+\def\@parse@class@options@journal{%
+ \edef\@tempa{\@ptionlist{\@currname.\@currext}}%
+ \expandafter\@for\expandafter\CurrentOption\expandafter:\expandafter=\@tempa\do{%
+ \expandafter\@ifnotrelax\csname ds@\CurrentOption\endcsname{%
+ \begingroup
+ \csname ds@\CurrentOption\endcsname
+ \@ifxundefined\@journal{%
+ \endgroup
+ }{%
+ \expandafter\endgroup\expandafter\def\expandafter\@journal\expandafter{\@journal}%
+ }%
+ }{}%
+ }%
+}%
+\def\@parse@class@options{%
+ \edef\@tempa{\@ptionlist{\@currname.\@currext}}%
+ \expandafter\@for\expandafter\CurrentOption\expandafter:\expandafter=\@tempa\do{%
+ \expandafter\@ifnotrelax\csname ds@\CurrentOption\endcsname{%
+ \begingroup
+ \csname ds@\CurrentOption\endcsname
+ \@ifxundefined\@pointsize{%
+ \endgroup
+ }{%
+ \expandafter\endgroup\expandafter\def\expandafter\@pointsize\expandafter{\@pointsize}%
+ }%
+ }{%
+ \IfFileExists{\CurrentOption\substyle@post.\substyle@ext}{%
+ \expandafter\change@society\expandafter{\CurrentOption}%
+ \expandafter\let\csname ds@\CurrentOption\endcsname\@empty
+ }{}%
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \changes{4.1j}{2009/10/25}{(AO, 545) hypertext capabilities off by default; enable with \classoption{hypertext}}
+% The class option \classoption{hypertext} enables the built-in hypertext capabilities,
+% which coincide with those of \classname{custom-bib}-generated BIBTeX styles
+% using the guard code \texttt{hypertext}.
+%
+% Note that APS has these capabilities turned off by default;
+% Loading the hyperref package turns them on.
+% \begin{macrocode}
+\DeclareOption{hypertext}{\hypertext@enable@ltx}%
+\appdef\document@inithook{\@ifpackageloaded{hyperref}{\hypertext@enable@ltx}{}}%
+% \end{macrocode}
+%
+% The default handling for a document class option depends upon whether the \cmd\@society\ is
+% defined.
+%
+% If not, then hunt for a \file{.rtx} file with that name.
+% If it exists, then we will take this option as the name of the society,
+% otherwise, declare the option as not used.
+%
+% (This behavior is similar to the \LaTeX2.09 handling, where
+% one looked for a \file{.sty} file, except that
+% in this case, we must provide for journal substyles that may be
+% defined in the society file, or have their own journal substyle file.)
+%
+% At the point where the class file is finished loading,
+% we then read in the society file.
+% That file can define further class options, such as the journal substyle.
+%
+% For users, this will mean that they can specify the society and journal simply
+% by specifying first the former and then the latter among their document class options.
+% The society \emph{must} have a corresponding \file{.rtx}.
+%
+% \changes{4.1b}{2008/05/29}{The csname substyle@ext is now defined without a dot (.), to be compatible with \LaTeX usage (see @clsextension and @pkgextension).}
+%
+% \begin{macrocode}
+%</options>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \begin{macro}{\@process@society}
+% \begin{macro}{\@process@journal}
+% \begin{macro}{\@process@pointsize}
+% \begin{macrocode}
+\def\substyle@post{4-1}%
+\def\substyle@ext{rtx}%
+\DeclareOption*{\OptionNotUsed}%
+% \end{macrocode}
+% A society substyle may define its own options, via \cmd\DeclareOption.
+%
+% At the end of this document class, we process the society file,
+% using \file{aps.rtx} if none has been specified in the document.
+% \begin{macrocode}
+\def\@process@society#1{%
+ \@ifxundefined\@society{%
+ \class@warn{No Society specified, using default society #1}%
+ \def\@society{#1}\let\@journal\@undefined
+ }{}%
+ \expandafter\input\expandafter{\@society\substyle@post.\substyle@ext}%
+}%
+% \end{macrocode}
+%
+% A society substyle can encompass any number of journal substyles;
+% we use the following procedure to invoke the proper one.
+% \begin{macrocode}
+\def\@process@journal#1{%
+ \@ifxundefined\@journal{%
+ \class@warn{No journal specified, using default #1}%
+ \def\@journal{#1}%
+ }{}%
+ \expandafter\expandafter
+ \expandafter\rtx@do@substyle
+ \expandafter\expandafter
+ \expandafter{\expandafter\@society\@journal}%
+}%
+\def\rtx@do@substyle#1{%
+ \InputIfFileExists{#1\substyle@post.\substyle@ext}{}{\csname rtx@#1\endcsname}%
+}%
+% \end{macrocode}
+%
+% Document class options \classoption{10pt}, \classoption{11pt}, and \classoption{12pt}
+% are implemented by \revtex\ itself and determine \cmd\@pointsize.
+% These provide formatting settings appropriate to the society's journals.
+%
+% If not specified by the document, a value \cmd\@pointsize@default\ is used.
+% This default can be set by the journal. Here, the society sets its default.
+% \begin{macrocode}
+\def\@process@pointsize#1{%
+ \@ifxundefined\@pointsize{%
+ \def\@pointsize{#1}%
+ \class@warn{No type size specified, using default \@pointsize}%
+ }{}%
+ \expandafter\expandafter
+ \expandafter\rtx@do@substyle
+ \expandafter\expandafter
+ \expandafter{\expandafter\@society\@pointsize pt}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Class-Asserted Options}%
+% \changes{4.0b}{1999/06/20}{Removed invocation of nonexistent class option \protect\classoption{groupauthors} and all other class options that should only be invoked by the document. (Otherwise precedence of class options does not work.)}
+% Here we establish the default document class options.
+% Those of the document itself will override these.
+%
+% \section{Procedures Dependent Upon Options}
+%
+% Here we introduce \classname{classes.dtx} definitions for
+% the page styles that people will expect to be able to use.
+% \begin{macro}{\ps@headings}
+% \begin{macro}{\ps@myheadings}
+% \begin{macrocode}
+ \def\ps@headings{%
+ \let\@oddfoot\@empty\let\@evenfoot\@empty
+ \def\@evenhead{\thepage\hfil\slshape\leftmark}%
+ \def\@oddhead{{\slshape\rightmark}\hfil\thepage}%
+ \let\@mkboth\markboth
+ \def\sectionmark##1{%
+ \markboth {\MakeUppercase{%
+ \ifnum \c@secnumdepth >\z@
+ \thesection\quad
+ \fi
+ ##1}}{}}%
+ \def\subsectionmark##1{%
+ \markright {%
+ \ifnum \c@secnumdepth >\@ne
+ \thesubsection\quad
+ \fi
+ ##1}}}%
+\def\ps@myheadings{%
+ \let\@oddfoot\@empty\let\@evenfoot\@empty
+ \def\@evenhead{\thepage\hfil\slshape\leftmark}%
+ \def\@oddhead{{\slshape\rightmark}\hfil\thepage}%
+ \let\@mkboth\@gobbletwo
+ \let\sectionmark\@gobble
+ \let\subsectionmark\@gobble
+ }%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ps@article}
+% \begin{macro}{\ps@article@final}
+% \begin{macro}{\ps@preprint}
+% \changes{4.0a}{1998/01/31}{Move after process options, so the following test works}
+% \changes{4.0b}{1999/06/20}{Defer decision until \cs{AtBeginDocument} time}
+% \changes{4.0c}{1999/11/13}{Insert procedure \cs{checkindate}}
+% \changes{4.0rc1}{2001/06/17}{Running headers always as if two-sided}
+% \begin{macrocode}
+\def\ps@article{%
+ \def\@evenhead{\let\\\heading@cr\thepage\quad\checkindate\hfil{\leftmark}}%
+ \def\@oddhead{\let\\\heading@cr{\rightmark}\hfil\checkindate\quad\thepage}%
+ \def\@oddfoot{}%
+ \def\@evenfoot{}%
+ \let\@mkboth\markboth
+ \let\sectionmark\@gobble
+ \let\subsectionmark\@gobble
+}%
+\def\ps@article@final{%
+ \def\@evenhead{\let\\\heading@cr\thepage\quad\checkindate\hfil{\leftmark}}%
+ \def\@oddhead{\let\\\heading@cr{\rightmark}\hfil\checkindate\quad\thepage}%
+ \def\@oddfoot{}%
+ \def\@evenfoot{}%
+ \let\@mkboth\markboth
+ \def\sectionmark##1{%
+ \markboth{%
+ \MakeTextUppercase{%
+ \@ifnum{\c@secnumdepth >\z@}{\thesection\hskip 1em\relax}{}%
+ ##1%
+ }%
+ }{}%
+ }%
+ \def\subsectionmark##1{%
+ \markright {%
+ \@ifnum{\c@secnumdepth >\@ne}{\thesubsection\hskip 1em\relax}{}%
+ ##1%
+ }%
+ }%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\heading@cr{\unskip\space\ignorespaces}%
+% \end{macrocode}
+%
+% \changes{4.0c}{1999/11/13}{Do not put by REVTeX in every page foot}
+% \changes{4.0c}{1999/11/13}{Insert procedure \cs{checkindate}}
+% \begin{macrocode}
+\def\ps@preprint{%
+ \def\@oddfoot{\hfil\thepage\quad\checkindate\hfil}%
+ \def\@evenfoot{\hfil\thepage\quad\checkindate\hfil}%
+ \def\@oddhead{}%
+ \def\@evenhead{}%
+ \let\@mkboth\@gobbletwo
+ \let\sectionmark\@gobble
+ \let\subsectionmark\@gobble
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\let\@oddhead\@empty
+\let\@evenhead\@empty
+\let\@oddfoot\@empty
+\let\@evenfoot\@empty
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\lastpage@putlabel}
+% Support the default meaning of \cmd\@endpage.
+% \changes{4.0a}{1998/01/31}{Move after process options, so \cs{clearpage} not in scope of twocolumn}
+% \changes{4.1k}{2009/11/06}{(AO, 554) give the \cs{newlabel} command syntax appropriate to the hyperref package}
+% Name of this macro (and the \cmd\label\ key) taken from
+% \url{CTAN:/macros/latex/contrib/other/lastpage}%
+% with code optimised slightly.
+% \begin{macrocode}
+\def\lastpage@putlabel{%
+ \if@filesw
+ \begingroup
+ \advance\c@page\m@ne
+ \immediate\write\@auxout{\string\newlabel{LastPage}{{}{\thepage}{}{}{}}}%
+ \endgroup
+ \fi
+}%
+% \end{macrocode}
+% Install a procedure into document endgame processing that
+% labels the last page of the document.
+% This is done just before the \file{.aux} file
+% is closed, and does not require a \cmd\shipout, because it writes
+% directly to the \file{.aux} file.
+% Note that we assume no further \cmd\shipout s will be done past this point.
+% \changes{4.1n}{2009/12/09}{(AO, 569) execute the after-last-shipout procedures from within the safety of the output routine}%
+% \begin{macrocode}
+\appdef\clear@document{%
+ \do@output@cclv{%
+ \lastpage@putlabel
+ \tally@box@size@sw{\total@text}{}%
+ }%
+}%
+\providecommand\write@column@totals{}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \section{Required Packages}
+% \url{CTAN:macros/latex/contrib/other/misc/url.sty}%
+% \begin{macrocode}
+\appdef\rtx@require@packages{%
+ \RequirePackage{url}%
+}%
+% \end{macrocode}
+%
+% \section{Incompatible Packages}
+%
+% We wait until after the preamble is processed, then check for any packages
+% that might have been loaded which we know to be incompatible with \revtex.
+%
+% The \classname{multicol} package is incompatible with \classname{ltxgrid}, which replaces it.
+% The \classname{cite} package is incompatible with \classname{natbib}, which replaces its functionality.
+% The functionality of the \classname{mcite} package is provided by \classname{natbib}.
+% \begin{macrocode}
+\appdef\document@inithook{%
+ \incompatible@package{cite}%
+ \incompatible@package{mcite}%
+ \incompatible@package{multicol}%
+}%
+% \end{macrocode}
+%
+% \section{Society- and Journal-Specific Code}
+%
+% \begin{macro}{\@journal}
+% Journal test helper, used as
+% \begin{verbatim}
+%\@ifx{\@journal\journal@pra}{%
+% <journal-specific setup>
+%\fi
+% \end{verbatim}
+% Journal code might like to further specify (if as yet undefined) or distinguish on
+% the following Booleans.
+%
+% Note: the journal substyle code should only alter the value of one of these Booleans if
+% the Boolean is \cmd\undefined. This convention is what makes the document's
+% options take precedence over the values set by the journal.
+%
+% FIXME: make this table an exhaustive listing of all the parameters set by
+% the class options.
+%
+% \begin{tabular}{ll}
+% \cmd\@pointsize &(10|11|12), depending on the type size\\
+% \cmd\footinbib@sw &true if footnotes are to be formatted in the bibliography\\
+% \cmd\preprintsty@sw &true for preprint and hyperpreprint\\
+% \cmd\eqsecnum@sw &true means that equations are numbered within sections\\
+% \cmd\groupauthors@sw &true means authors listed separately for each address\\
+% \cmd\preprint@sw &true means to produce the preprint numbers as part of the title block\\
+% \cmd\showPACS@sw &true means to produce the PACS as part of the title block\\
+% \cmd\showKEYS@sw &true means to produce the keywords as part of the title block\\
+% \cmd\@affils@sw &true means each affiliation is printed, for each author\\
+% \cmd\runinaddress@sw &true means author addresses are printed run-in\\
+% \cmd\draft@sw &true implies that PACS will be printed\\
+% \cmd\tightenlines@sw &true if preprint single spaced\\
+% \cmd\lengthcheck@sw &true if length checking is in effect\\
+% \cmd\byrevtex@sw &true means to announce ``typeset by \revtex''\\
+% \cmd\titlepage@sw &true for title is to be set on a separate page\\
+% \cmd\twocolumn@sw &true if two-column page grid\\
+% \cmd\twocolumn@sw &true if we are to automatically balance the columns of the last page\\
+% \cmd\twoside@sw &true means to format pages for duplex printing\\
+% \cmd\floats@sw &false means floats are migrated to end of document\\
+% \cmd\floatp@sw &true means endfloats are set one to a page\\
+% \cmd\class@amsfonts &if \cmd\@empty, means that \classname{amsfonts} will \emph{not} be loaded\\
+% \cmd\class@amssymb &if \cmd\@empty, means that \classname{amssymb} will \emph{not} be loaded\\
+% \cmd\frontmatter@footnote &if \cmd\undefined, means that the default (\cmd\footnote) will be used\\
+% \cmd\place@bibnumber &if \cmd\undefined, means that the default (inline) will be used\\
+% \end{tabular}
+%
+% Note: if \cmd\twocolumn@sw\ and \cmd\preprintsty@sw\ are both false,
+% then `galley' style is in effect. The \classoption{galley} option invokes
+% \classoption{onecolumn}, but does not affect the \cmd\preprintsty@sw.
+%
+% Note: \cmd\paperwidth\ and \cmd\paperheight\ are not integrated into this scheme,
+% and should be selected by the document alone.
+% \end{macro}
+%
+% \section{Body}
+%
+% \subsection{counters}
+% The following definitions are probably identical to those in
+% \file{classes.dtx}%
+% \begin{macrocode}
+\def\labelenumi{\theenumi.}
+\def\theenumi{\arabic{enumi}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\labelenumii{(\theenumii)}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\labelenumiii{\theenumiii.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\labelenumiv{\theenumiv.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\labelitemi{\textbullet}
+\def\labelitemii{\normalfont\bfseries\textendash}
+\def\labelitemiii{\textasteriskcentered}
+\def\labelitemiv{\textperiodcentered}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\pagenumbering{arabic}
+% \end{macrocode}
+%
+% \subsection{float parameters}
+%
+% from the old aps.sty. (DPC: same as article I think)
+% AO: here, \LaTeX's standard classes fail very poorly
+% (the price of backward compatability): the values for
+% \cmd\floatpagefraction\ and \cmd\dblfloatpagefraction\
+% need to be raised to avoid creating extremely short
+% float pages.
+% \begin{macrocode}
+\setcounter{topnumber}{2}
+\def\topfraction{.9}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.9}
+\setcounter{totalnumber}{3}
+\def\textfraction{.1}
+\def\floatpagefraction{.9}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.9}
+\def\dblfloatpagefraction{.9}
+% \end{macrocode}
+%
+% \subsection{List Environments}
+%
+% \begin{macrocode}
+\newenvironment{verse}{%
+ \let\\=\@centercr
+ \list{}{%
+ \itemsep\z@ \itemindent -1.5em\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]%
+}{%
+ \endlist
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newenvironment{quotation}{%
+ \list{}{%
+ \listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin \parsep \z@ \@plus\p@}\item[]%
+}{%
+ \endlist
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newenvironment{quote}{%
+ \list{}{%
+ \rightmargin\leftmargin}\item[]%
+}{%
+ \endlist
+}%
+% \end{macrocode}
+%
+% \changes{4.1b}{2008/06/30}{(AO) Structure the Abstract using the \texttt{bibliography} environment}
+% \begin{macrocode}
+\def\descriptionlabel#1{%
+ \hspace\labelsep \normalfont\bfseries #1\unskip:%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newenvironment{description}{%
+ \list{}{%
+ \labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel
+ }%
+}{%
+ \endlist
+}%
+% \end{macrocode}
+%
+% \subsection{Sectioning Commands\label{sec:secnumarabic}}
+%
+% \subsubsection{Sectioning Commands and Their Productions}%
+% The following counters are defined by LaTeX's standard document classes.
+% We do likewise, then assign flag values to the productions, awaiting
+% overrides.
+% \begin{macrocode}
+\newcounter{part}%
+\let\thepart\@undefined
+\newcounter{section}%
+\let\thesection\@undefined
+\newcounter{subsection}[section]%
+\let\thesubsection\@undefined
+\newcounter{subsubsection}[subsection]%
+\let\thesubsubsection\@undefined
+\newcounter{paragraph}[subsubsection]%
+\let\theparagraph\@undefined
+\newcounter{subparagraph}[paragraph]%
+\let\thesubparagraph\@undefined
+% \end{macrocode}
+% The procedure invoked by \cmd\setup@secnums\ provides meanings for these productions.
+%
+% \begin{macro}{\secnums@rtx}
+% \begin{macro}{\secnums@arabic}
+% These two procedures define the meanings of each of the productions
+% of the counters of the sectioning commands,
+% but only if nothing else has defined it.
+% \begin{macrocode}
+\def\secnums@rtx{%
+ \@ifxundefined\thepart{%
+ \def\thepart{\Roman{part}}%
+ }{}%
+ \@ifxundefined\thesection{%
+ \def\thesection {\Roman{section}}%
+ \def\p@section {}%
+ }{}%
+ \@ifxundefined\thesubsection{%
+ \def\thesubsection {\Alph{subsection}}%
+ \def\p@subsection {\thesection\,}%
+ }{}%
+ \@ifxundefined\thesubsubsection{%
+ \def\thesubsubsection {\arabic{subsubsection}}%
+ \def\p@subsubsection {\thesection\,\thesubsection\,}%
+ }{}%
+ \@ifxundefined\theparagraph{%
+ \def\theparagraph {\alph{paragraph}}%
+ \def\p@paragraph {\thesection\,\thesubsection\,\thesubsubsection\,}%
+ }{}%
+ \@ifxundefined\thesubparagraph{%
+ \def\thesubparagraph {\arabic{subparagraph}}%
+ \def\p@subparagraph {\thesection\,\thesubsection\,\thesubsubsection\,\theparagraph\,}%
+ }{}%
+}%
+\def\secnums@arabic{%
+ \@ifxundefined\thepart{%
+ \def\thepart {\Roman{part}}%
+ }{}%
+ \@ifxundefined\thesection{%
+ \def\thesection {\Roman{section}}%
+ \def\p@section {}%
+ }{}%
+ \@ifxundefined\thesubsection{%
+ \def\thesubsection {\thesection.\arabic{subsection}}%
+ \def\p@subsection {}%
+ }{}%
+ \@ifxundefined\thesubsubsection{%
+ \def\thesubsubsection {\thesubsection.\arabic{subsubsection}}%
+ \def\p@subsubsection {}%
+ }{}%
+ \@ifxundefined\theparagraph{%
+ \def\theparagraph {\thesubsubsection.\arabic{paragraph}}%
+ \def\p@paragraph {}%
+ }{}%
+ \@ifxundefined\thesubparagraph{%
+ \def\thesubparagraph {\theparagraph.\arabic{subparagraph}}%
+ \def\p@subparagraph {}%
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{The Acknowledgments Environment}%
+% This user-level markup produces a head introducing
+% the acknowledgments, and acts as a wrapper for the text.
+% In this implementation, it is an unnumbered section,
+% but appears within the toc.
+%
+% For compatiability's sake, we implement it under the alternative
+% spelling \env{acknowledgements}.
+% \changes{4.0c}{1999/11/13}{also spelled ``acknowledgements''.}
+% \changes{4.0d}{2000/05/18}{But alternative spelling is deprecated.}
+% \begin{macrocode}
+\newenvironment{acknowledgments}{%
+ \acknowledgments@sw{%
+ \expandafter\section\expandafter*\expandafter{\acknowledgmentsname}%
+ }{%
+ \par
+ \phantomsection
+ \addcontentsline{toc}{section}{\protect\numberline{}\acknowledgmentsname}%
+ }%
+}{%
+ \par
+}%
+\@booleantrue\acknowledgments@sw
+\newenvironment{acknowledgements}{%
+ \replace@environment{acknowledgements}{acknowledgments}%
+}{%
+ \endacknowledgments
+}%
+% \end{macrocode}
+%
+% \subsubsection{Part Opener}%
+% section setup copied verbatim from revtex3 aps/osa.
+% Does not explicitly depend on pointsize options.
+% \begin{macrocode}
+\def\part{\par
+ \addvspace{4ex}%
+ \@afterindentfalse
+ \secdef\@part\@spart}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@part[#1]#2{%
+ \@ifnum{\c@secnumdepth >\m@ne}{%
+ \refstepcounter{part}%
+ \addcontentsline{toc}{part}{\thepart\hspace{1em}#1}%
+ }{%
+ \addcontentsline{toc}{part}{#1}%
+ }%
+ \begingroup
+ \parindent \z@ \raggedright
+ \interlinepenalty\@M
+ \@ifnum{\c@secnumdepth >\m@ne}{%
+ \Large \bf \partname~\thepart%
+ \par\nobreak
+ }{}%
+ \huge \bf
+ #2%
+ \markboth{}{}\par
+ \endgroup
+ \nobreak
+ \vskip 3ex
+ \@afterheading
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@spart#1{{\parindent \z@ \raggedright
+ \interlinepenalty\@M
+ \huge \bf
+ #1\par}
+ \nobreak
+ \vskip 3ex
+ \@afterheading}
+% \end{macrocode}
+%
+% \subsubsection{Stacked Heads}%
+% Here are the class default definitions for sectioning commands.
+% A society or a journal substyle will likely override these definitions.
+%
+% In doing so, you can customize the formatting for a particular level by defining,
+% e.g., \cmd\@hangfrom@section\ or \cmd\@subsectioncntformat.
+% \begin{macrocode}
+\def\section{%
+ \@startsection
+ {section}%
+ {1}%
+ {\z@}%
+ {0.8cm \@plus1ex \@minus .2ex}%
+ {0.5cm}%
+ {\normalfont\small\bfseries}%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\subsection{%
+ \@startsection
+ {subsection}%
+ {2}%
+ {\z@}%
+ {.8cm \@plus1ex \@minus .2ex}%
+ {.5cm}%
+ {\normalfont\small\bfseries}%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\subsubsection{%
+ \@startsection
+ {subsubsection}%
+ {3}%
+ {\z@}%
+ {.8cm \@plus1ex \@minus .2ex}%
+ {.5cm}%
+ {\normalfont\small\itshape}%
+}%
+% \end{macrocode}
+%
+% \subsubsection{Runin Heads}%
+% \begin{macrocode}
+\def\paragraph{%
+ \@startsection
+ {paragraph}%
+ {4}%
+ {\parindent}%
+ {\z@}%
+ {-1em}%
+ {\normalfont\normalsize\itshape}%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\subparagraph{%
+ \@startsection
+ {subparagraph}%
+ {5}%
+ {\parindent}%
+ {3.25ex \@plus1ex \@minus .2ex}%
+ {-1em}%
+ {\normalfont\normalsize\bfseries}%
+}%
+% \end{macrocode}
+%
+%
+% \subsection{Math}
+%
+% \begin{macro}{\theequation}
+% We change the production of the equation counter so that
+% we can accomodate the \classoption{eqsecnum} option.
+% \begin{macrocode}
+\def\theequation{%
+ \theequation@prefix\arabic{equation}%
+}%
+\def\theequation@prefix{}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Type Size-Dependent Settings}
+%
+% \subsection{All Point Sizes}
+% \begin{macrocode}
+\setcounter{secnumdepth}{4}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\lineskip 1pt
+\normallineskip 1pt
+\def\baselinestretch{1}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@lowpenalty 51
+\@medpenalty 151
+\@highpenalty 301
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@beginparpenalty -\@lowpenalty
+\@endparpenalty -\@lowpenalty
+\@itempenalty -\@lowpenalty
+% \end{macrocode}
+%
+% \begin{macrocode}
+\arraycolsep 3pt
+\tabcolsep 2pt
+\arrayrulewidth .4pt
+\doublerulesep 2pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\skip\@mpfootins = 0pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\fboxsep = 3.0pt
+\fboxrule = 0.4pt
+% \end{macrocode}
+%
+% \subsection{Figures}
+% \changes{4.0b}{1999/06/20}{Processing delayed to \cs{AtBeginDocument} time}
+%
+% \begin{environment}{figure}
+% We define the \env{figure} environment.
+% Later, we will horse around with its meaning
+% in order to accomodate \cmd\floats@sw.
+% \begin{macrocode}
+\newenvironment{figure}
+ {\@float{figure}}
+ {\end@float}
+\newenvironment{figure*}
+ {\@dblfloat{figure}}
+ {\end@dblfloat}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macrocode}
+\def\listoffigures{\print@toc{lof}}%
+\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}%
+% \end{macrocode}
+%
+% \begin{macro}{\@makecaption}
+% If caption is one line long, to be centered; if lines turn, then set justified.
+% \begin{macrocode}
+\newlength\abovecaptionskip
+\newlength\belowcaptionskip
+\setlength\abovecaptionskip{10\p@}
+\setlength\belowcaptionskip{2\p@}
+% \end{macrocode}
+%
+% \changes{4.0b}{1999/06/20}{One-line caption sets flush left.}
+% \changes{4.0c}{1999/11/13}{Prevent an inner footnote from performing twice}
+% \changes{4.1a}{2008/01/18}{(AO, 460) ``Proper style is "FIG. 1. ..." (no colon)''}%
+% There is a hook \cmd\@caption@fignum@sep\ for determining
+% the separator following the float number, e.g., ``Fig.1''.
+% Formerly, we had defined it to be ``: '', now the colon has been replace by a period (full stop).
+% \begin{macrocode}
+\long\def\@makecaption#1#2{%
+ \par
+% \nobreak
+ \vskip\abovecaptionskip
+ \begingroup
+ \small\rmfamily
+ \sbox\@tempboxa{%
+ \let\\\heading@cr
+ \@make@capt@title{#1}{#2}%
+ }%
+ \@ifdim{\wd\@tempboxa >\hsize}{%
+ \begingroup
+ \samepage
+ \flushing
+ \let\footnote\@footnotemark@gobble
+ \@make@capt@title{#1}{#2}\par
+ \endgroup
+ }{%
+ \global \@minipagefalse
+ \hb@xt@\hsize{\hfil\unhbox\@tempboxa\hfil}%
+ }%
+ \endgroup
+ \vskip\belowcaptionskip
+}%
+\def\@make@capt@title#1#2{%
+ \@ifx@empty\float@link{\@firstofone}{\expandafter\href\expandafter{\float@link}}%
+ {#1}\@caption@fignum@sep#2%
+}%
+\def\@footnotemark@gobble{%
+ \@footnotemark
+ \@ifnextchar[{\@gobble@opt@i}{\@gobble}%
+}%
+\def\@gobble@opt@i[#1]#2{}%
+\def\@mpmakefntext#1{%
+ \flushing
+ \parindent=1em
+ \noindent
+ \hb@xt@1em{\hss\@makefnmark}%
+ #1%
+}%
+\def\@caption@fignum@sep{. }%
+\def\setfloatlink{\def\float@link}%
+\let\float@link\@empty
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\thefigure}
+% The figure counter and float placement defaults.
+% \begin{macrocode}
+\newcounter{figure}
+\renewcommand \thefigure {\@arabic\c@figure}
+% \end{macrocode}
+% Note that we give the `!' modifier by default.
+% This is an effort to avoid the syndrome wherein
+% a deferred float finds itself unqualified for
+% placement, thereby getting carried until \cmd\clearpage.
+% \begin{macrocode}
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{\figurename~\thefigure}
+% \end{macrocode}
+% We allocate a box register for use in tallying the column inches of floats of this type.
+% \begin{macrocode}
+\expandafter\newbox\csname fbox@\ftype@figure\endcsname
+\expandafter\setbox\csname fbox@\ftype@figure\endcsname\hbox{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Deferring \env{figure} Floats}%
+%
+% We determine if figures are to float or be deferred until \cmd\printfigures\ time.
+% If so, we open the stream that will receive the deferred document portions.
+% \begin{macrocode}
+\appdef\class@documenthook{%
+ \do@if@floats{figure}{.fgx}%
+}%
+\appdef\class@enddocumenthook{%
+ \printfigures\relax
+}%
+% \end{macrocode}
+%
+% \begin{macro}{\printfigures}
+% The user-level command \cmd\printfigures\ determines
+% where the figures are to appear in a document in which
+% \cmd\floats@sw\ is false.
+% If the user invokes the \classoption{endfloats} class option and fails to
+% insert a \cmd\printfigures\ command,
+% the figures will be printed at the end of the document.
+% If the command is given, but floats are not being deferred,
+% it amounts to a no-op.
+% \changes{4.0b}{1999/06/20}{call \cs{print@floats}}
+% \changes{4.0c}{1999/11/13}{*-form mandates pagebreak}
+% \begin{macrocode}
+\newcommand\printfigures{%
+ \@ifstar{\true@sw}{\floatp@sw{\true@sw}{\false@sw}}%
+ {%
+ \print@float{figure}{\oneapage}%
+ }{%
+ \print@float{figure}{}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@xfloat@prep}
+% We patch into the procedure \cmd\@xfloat@prep.
+% This patch applies to all floats (not \env{figure} alone)
+% and makes the type center.
+% \begin{macrocode}
+\appdef\@xfloat@prep{%
+ \appdef\@parboxrestore{\centering}%
+%\let\@makefnmark\@makefnmark@latex
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Tables}
+% \changes{4.0b}{1999/06/20}{Processing delayed to \cs{AtBeginDocument} time}
+%
+% DPC: More or less taken from \file{revtex2} \file{aps.sty},
+% but using dcolumn for decimal alignment.
+% \begin{environment}{table}
+% We define the \env{table} environment.
+% Later, we will horse around with its meaning
+% in order to accomodate \cmd\floats@sw.
+% \begin{macrocode}
+\newenvironment{table}
+ {\@float{table}}
+ {\end@float}
+\newenvironment{table*}
+ {\@dblfloat{table}}
+ {\end@dblfloat}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\thetable}
+% Table counter and default float placement declarations.
+% \begin{macrocode}
+\newcounter{table}
+\renewcommand\thetable{\@Roman\c@table}
+% \end{macrocode}
+% Note that we give the `!' modifier by default.
+% This is an effort to avoid the syndrome wherein
+% a deferred float finds itself unqualified for
+% placement, thereby getting carried until \cmd\clearpage.
+% \begin{macrocode}
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{\tablename~\thetable}
+% \end{macrocode}
+% We allocate a box register for use in tallying the column inches of floats of this type.
+% \begin{macrocode}
+\expandafter\newbox\csname fbox@\ftype@table\endcsname
+\expandafter\setbox\csname fbox@\ftype@table\endcsname\hbox{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\def\listoftables{\print@toc{lot}}%
+\let\l@table\l@figure
+% \end{macrocode}
+%
+% \begin{macro}{\table@hook}
+% \begin{macro}{\squeezetable}
+% Assign a meaning to the hook installed into float processing.
+%
+% By default floats are \cmd\small. The \cmd\squeezetable\ declaration
+% makes them smaller (\cmd\scriptsize). In general you can locally
+% redefine \cmd\table@hook\ to be whatever you like.
+% (DPC: |\Huge\color{magenta}|\ldots?)
+% \begin{macrocode}
+\def\table@hook{\small}%
+\def\squeezetable{\def\table@hook{\scriptsize}}%
+\appdef\@floatboxreset{\table@hook}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Deferring \env{table} Floats}%
+%
+% After all packages are loaded, we decide
+% if tables will float or will be deferred until \cmd\printtables\ time.
+%
+% We also deal with the possibility of \env{longtable} environments.
+%
+% \begin{macrocode}
+\def\set@table@environments{%
+ \floats@sw{}{%
+ \let@environment{longtable@float}{longtable}%
+ \let@environment{longtable}{longtable@write}%
+ \let@environment{longtable*@float}{longtable*}%
+ \let@environment{longtable*}{longtable*@write}%
+ \let@environment{turnpage@float}{turnpage}%
+ \let@environment{turnpage}{turnpage@write}%
+ }%
+ \do@if@floats{table}{.tbx}%
+}%
+\appdef\document@inithook{%
+ \set@table@environments
+}%
+\appdef\class@enddocumenthook{%
+ \printtables\relax
+}%
+\newenvironment{longtable@write}{%
+ \write@@float{longtable}{table}%
+}{%
+ \endwrite@float
+}%
+\newenvironment{longtable*@write}{%
+ \write@@float{longtable*}{table}%
+}{%
+ \endwrite@float
+}%
+\newenvironment{turnpage@write}{%
+ \immediate\write\tablewrite{\string\begin{turnpage}}%
+}{%
+ \immediate\write\tablewrite{\string\end{turnpage}}%
+}%
+% \end{macrocode}
+%
+% \begin{macro}{\printtables}
+% The user-level command \cmd\printtables\ determines
+% where the tables are to appear in a document in which
+% \cmd\floats@sw\ is false.
+% If the user invokes the \classoption{nofloats} and fails to
+% insert a \cmd\printtables\ command,
+% the tables will be printed at the end of the document.
+% If the command is given, but floats are not being deferred,
+% it amounts to a no-op.
+% \changes{4.0b}{1999/06/20}{only execute if appropriate}
+% \changes{4.0c}{1999/11/13}{*-form mandates pagebreak}
+% \changes{4.0d}{2000/05/17}{make longtable trigger the head, too}
+% \begin{macrocode}
+\newcommand\printtables{%
+ \begingroup
+ \let@environment{longtable}{longtable@float}%
+ \let@environment{longtable*}{longtable*@float}%
+ \let@environment{turnpage}{turnpage@anchored}%
+ \prepdef\longtable{\trigger@float@par}%
+ \expandafter\prepdef\csname longtable*\endcsname{\trigger@float@par}%
+ \expandafter\prepdef\csname table@floats\endcsname{%
+ \onecolumngrid@push
+ }%
+ \expandafter\appdef\csname endtable@floats\endcsname{%
+ \onecolumngrid@pop
+ }%
+ \@ifstar{\true@sw}{\floatp@sw{\true@sw}{\false@sw}}%
+ {%
+ \print@float{table}{\oneapage}%
+ }{%
+ \print@float{table}{}%
+ }%
+ \endgroup
+}%
+\newenvironment{turnpage@anchored}{%
+ \onecolumngrid@push
+ \setbox\z@\vbox to\textwidth\bgroup
+ \columnwidth\textheight
+}{%
+ \vfil
+ \egroup
+ \rotatebox{90}{\box\z@}%
+ \onecolumngrid@pop
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Videos}
+%\changes{4.1r}{2010/06/22}{(AO, 595) Provide \cs{lovname} along with other List of Videos definitions.}%
+%
+% \begin{environment}{video}
+% We define the \env{video} environment analogously to the
+% \env{figure} and \env{table} environments; it is intended to contain a video.
+%
+% \begin{macrocode}
+\newenvironment{video}
+ {\@float{video}}
+ {\end@float}%
+\newenvironment{video*}
+ {\@dblfloat{video}}
+ {\end@dblfloat}%
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\thevideo}
+% The video counter, float placement defaults, strings.
+% \begin{macrocode}
+\newcounter{video}
+\renewcommand \thevideo {\@arabic\c@video}
+% \end{macrocode}
+%
+% File extension and localizable strings.
+% \begin{macrocode}
+\def\ext@video{lov}%
+\def\fname@video{Video}%
+\def\lovname{List of Videos}%
+% \end{macrocode}
+%
+% Float type and default placement.
+% \begin{macrocode}
+\def\fps@video{tbp}%
+\def\ftype@video{4}%
+\def\fnum@video{\fname@video~\thevideo}%
+\appdef\document@inithook{%
+ \@ifxundefined\c@float@type{}{%
+ \global\setcounter{float@type}{8}%
+ }%
+}%
+% \end{macrocode}
+% We allocate a box register for use in tallying the column inches of floats of this type.
+% \begin{macrocode}
+\expandafter\newbox\csname fbox@\ftype@video\endcsname
+\expandafter\setbox\csname fbox@\ftype@video\endcsname\hbox{}%
+% \end{macrocode}
+% The documentation for the \classname{hyperref} package, \file{hyperref.dtx} states:
+% ``classes or package which introduce new elements need to define
+% an equivalent \verb+\theH<name>+ for every \verb+\the<name>+''
+% We do accordingly here.
+% \begin{macrocode}
+\let\theHvideo\thevideo
+% \end{macrocode}
+% But \file{hyperref.dtx} goes on to say,
+% ``We do make a trap to make \verb+\theH<name>+ be the same as \verb+\arabic{<name>}+,
+% if \verb+\theH<name>+ is not defined\ldots''
+% However, it's not doing that right now (as of 6.77u),
+% and I cannot find any such code in there anymore.
+% \end{macro}
+%
+% \begin{macrocode}
+\def\listofvideos{\print@toc{lov}}%
+\let\l@video\l@figure
+% \end{macrocode}
+%
+% \subsubsection{Deferring \env{video} Floats}%
+%
+% We determine if videos are to float or be deferred until \cmd\printvideos\ time.
+% If so, we open the stream that will receive the deferred document portions.
+% \begin{macrocode}
+\appdef\class@documenthook{%
+ \do@if@floats{video}{.vdx}%
+}%
+\appdef\class@enddocumenthook{%
+ \printvideos\relax
+}%
+% \end{macrocode}
+%
+% \begin{macro}{\printvideos}
+% The user-level command \cmd\printvideos\ determines
+% where the videos are to appear in a document in which
+% \cmd\floats@sw\ is false.
+% If the user invokes the \classoption{endfloats} class option and fails to
+% insert a \cmd\printvideos\ command,
+% the videos will be printed at the end of the document.
+% If the command is given, but floats are not being deferred,
+% it amounts to a no-op.
+% \begin{macrocode}
+\newcommand\printvideos{%
+ \@ifstar{\true@sw}{\floatp@sw{\true@sw}{\false@sw}}%
+ {%
+ \print@float{video}{\oneapage}%
+ }{%
+ \print@float{video}{}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \section{Tabular}
+% Every APS tabular has a double (Scotch) rule above and below.
+% The column specifier ``d'' is implemented using the \classname{dcolumn}
+% package, if available.
+% FIXME: always load dcolumn!
+% \begin{macro}{\tabular@hook}
+% \begin{macro}{\endtabular@hook}
+% \begin{environment}{ruledtabular}
+% \begin{macrocode}
+\def\endtabular@hook{}%
+% \end{macrocode}
+% \begin{verbatim}
+%\RequirePackage{dcolumn}%
+% \end{verbatim}
+% \begin{macrocode}
+\appdef\document@inithook{%
+ \@ifpackageloaded{dcolumn}{%
+ \expandafter\@ifnotrelax\csname NC@find@d\endcsname{}{%
+ \newcolumntype{d}{D{.}{.}{-1}}%
+ }%
+ }{}%
+}%
+\def\toprule{\hline\hline}%
+\def\colrule{\hline}%
+\def\botrule{\hline\hline}%
+\newenvironment{ruledtabular}{%
+ \def\array@default{v}%
+ \appdef\tabular@hook{\def\@halignto{to\hsize}}%
+ \let\tableft@skip@default\tableft@skip
+ \let\tableft@skip\tableft@skip@float
+ \let\tabmid@skip@default\tabmid@skip
+ \let\tabmid@skip\tabmid@skip@float
+ \let\tabright@skip@default\tabright@skip
+ \let\tabright@skip\tabright@skip@float
+ \let\array@row@pre@default\array@row@pre
+ \let\array@row@pre\array@row@pre@float
+ \let\array@row@pst@default\array@row@pst
+ \let\array@row@pst\array@row@pst@float
+ \appdef\array@row@rst{%
+ \let\array@row@pre\array@row@pre@default
+ \let\array@row@pst\array@row@pst@default
+ \let\tableft@skip\tableft@skip@default
+ \let\tabmid@skip\tabmid@skip@default
+ \let\tabright@skip\tabright@skip@default
+ \appdef\tabular@hook{\let\@halignto\@empty}%
+ }%
+}{%
+}%
+% \end{macrocode}
+% \end{environment}
+% \end{macro}
+% \end{macro}
+%
+% \section{Footnote Text}
+%
+% \changes{4.0a}{1998/06/10}{single space footnotes}
+% \changes{4.0b}{1999/06/20}{Frank Mittelbach, has stated in \protect\classname{multicol}: ``The kernel command \cs{@footnotetext} should not be modified.'' Thus, I have removed David Carlisle's redefinition of that command. Note, however, that later versions of \protect\classname{multicol} do not require this workaround. Belt and suspenders.}%
+%
+% \begin{macro}{\@makefntext}
+% \begin{macro}{\@makefnmark}
+% We customize the presentation of the footnote mark: it will not be italic.
+% \begin{macrocode}
+\def\@makefntext#1{%
+ \def\baselinestretch{1}%
+ \parindent1em%
+ \noindent
+ \hb@xt@1.8em{%
+ \hss\@makefnmark
+ }%
+ #1%
+ \par
+}%
+\def\@makefnmark{%
+ \hbox{%
+ \@textsuperscript{%
+ \normalfont\@thefnmark
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Citations, Bibliography, Endnotes}
+%
+% \subsubsection{Bibliography}
+%
+% Load Patrick Daly's \classname{natbib} package,
+% \url{ftp://ctan.tug.org/macros/latex/contrib/supported/natbib}
+%
+% Note that \classname{natbib} assumes that it loads
+% over a document class, such as the \classname{article} class,
+% that has already defined \env{thebibliography} and \cmd\@listi.
+%
+% Note also that \classname{natbib} also installs a command
+% \cmd\NAT@set@cites\ into \cmd\AtBeginDocument\ which presumes
+% that the proper \cmd\bibpunct\ command has been issued.
+%
+% Note that the macro \cmd\NAT@sort\ controls
+% whether citations are left alone (\cmd\NAT@sort=0), sorted (\cmd\NAT@sort=1), or sorted and compressed (\cmd\NAT@sort=2).
+% Since we give \classname{natbib} the \classoption{sort\&compress} option,
+% if you prefer \classoption{sort}, you need only \cmd\let \cmd\NAT@sort\ to be \cmd\@ne.
+% However, if you prefer the effect of having neither \classoption{sort} nor \classoption{sort\&compress},
+% you must \cmd\let \cmd\NAT@sort\ to be \cmd\z@ and you must also define
+% \cmd\let\cmd\NAT@cmprs\ to be \cmd\z@.
+%
+% As of version 8.2, \classname{natbib} now no longer binds at the point where it is read in.
+% This means that we can freely change \cmd\NAT@sort, \cmd\NAT@cmprs, and the new
+% \cmd\NAT@merge. Henceforth, we require that this later version be used.
+%
+% For other \classname{natbib} customizations, you may proceed as if you were going to use
+% the \file{natbib.cfg} file: anything that you can modify by this means is fair game.
+% Once \revtex\ is finished loading, you can assert any definitions for \classname{natbib} that you wish.
+%
+% \begin{macro}{\rev@citet}
+% \begin{macro}{\rev@citealp}
+% \begin{macro}{\rev@citealpnum}
+% We define variants on \classname{natbib}'s commands \cmd\citet, \cmd\citealp, and \cmd\citealpnum.
+% \cmd\rev@citealpnum\ uses a numerical citation.
+% \cmd\rev@citealp\ and \cmd\rev@citealpnum\ are the aliases of \cmd\onlinecite,
+% \cmd\rev@citet\ that of \cmd\textcite.
+%
+% In each case, we invoke \cmd\rtx@swap@citea\ to effect different productions between
+% multiple arguments to the \cmd\cite\ command.
+%
+% \cmd\rev@citealpnum\ provides textual citations where superscript citations are the default.
+% These should be accessible via the \cmd\citet\ command.
+%
+% Therefore we remember how to do a numerical citation
+% even when the superscript citation has been selected.
+% \begin{macrocode}
+\expandafter\DeclareRobustCommand
+\expandafter\rev@citet
+\expandafter{%
+ \expandafter\begingroup
+ \expandafter\rtx@swap@citea
+ \expandafter\g@bblefirsttoken
+ \csname citet \endcsname
+}%
+\expandafter\DeclareRobustCommand
+\expandafter\rev@citealp
+\expandafter{%
+ \expandafter\begingroup
+ \expandafter\rtx@swap@citea
+ \expandafter\g@bblefirsttoken
+ \csname citealp \endcsname
+}%
+\expandafter\DeclareRobustCommand
+\expandafter\rev@citealpnum
+\expandafter{%
+ \expandafter\begingroup
+ \expandafter\rtx@swap@citenum
+ \expandafter\g@bblefirsttoken
+ \csname citealp \endcsname
+}%
+\def\rtx@swap@citenum{%
+ \rtx@swap@citea
+ \let\@cite\NAT@citenum
+ \let\NAT@mbox\mbox
+ \let\citeyear\NAT@citeyear
+ \let\NAT@space\NAT@spacechar
+}%
+\def\g@bblefirsttoken{%
+ \expandafter\true@sw
+ \expandafter\@empty
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\rtx@citesuper}
+% We prepare to redefine \classname{natbib}'s procedure \cmd\NAT@citesuper,
+% which is executed when setting a superscript citation.
+% The \cmd\hspace\ is removed: in any case, it
+% should really be \cmd\hspace*, to prevent an unwanted pagebreak.
+% \begin{macrocode}
+\newcommand\rtx@citesuper[3]{%
+ \ifNAT@swa
+ \leavevmode
+ \unskip
+% \hspace{1\p@}%
+ \textsuperscript{\normalfont#1}%
+ \if*#3*\else\ (#3)\fi
+ \else
+ #1%
+ \fi
+ \endgroup
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@makefnmark@cite}
+% We define a procedure that will set a footnote mark the same way that
+% a citation is set. If footnotes are put in the bibliography with
+% \cmd\footinbib@sw, then the corresponding mark should look the same
+% as the result of a \cmd\cite. This is how we do it.
+% \begin{macrocode}
+\def\@makefnmark@cite{\begingroup\NAT@swatrue\@cite{{\@thefnmark}}{}{}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\rtx@bibsection}
+% Prepare to override \classname{natbib}'s definition of \cmd\bibsection.
+% \begin{macrocode}
+\def\rtx@bibsection{%
+ \@ifx@empty\refname{%
+ \par
+ }{%
+% \let\@hangfroms@section\@hang@froms
+ \expandafter\section\expandafter*\expandafter{\refname}%
+ \@nobreaktrue
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\rtx@swap@citea}
+% \begin{macro}{\rtx@def@citea}
+% \begin{macro}{\rtx@def@citea@close}
+% \begin{macro}{\rtx@def@citea@box}
+% The procedures |\rtx@def@citea|, |\rtx@def@citea@close|, and |\rtx@def@citea@box|
+% can take over the management of \classname{natbib}'s |\@citea| macro to effect more sophisticated
+% behavior of the punctuation between textual citations. The switch is performed by \cmd\rtx@swap@citea.
+%
+% \changes{4.1j}{2009/10/25}{(AO, 552) Repair spacing in \cs{onlinecite}}
+% In these procedures, we use \cmd\count@\ to count the number of arguments of the \cmd\cite\ command,
+% and we use \cmd\c@NAT@ctr\ to keep track of which argument we are processing.
+% The latter counter is created by \classname{natbib} and used there solely in bibliography processing,
+% where it keeps track of the reference number.
+% We take over its use in these macros, but only locally; therefore these procedures should work properly, even within the bibliography.
+%FIXME: check whether this is true!
+%
+% Because we are using a scratch counter \cmd\count@, we are vulnerable to other \TeX\ programmers
+% who patch in to \classname{natbib}'s processing and who might use that counter at the same time we are doing so.
+% This is a potential source of trouble for us.
+%FIXME: store the value of \cmd\count@\ in a private \cmd\csname!
+%
+% Note that \cmd\rtx@def@citea\ begins the same as \cmd\NAT@def@citea, which it replaces,
+% then makes further decisions based on the values of the counters.
+%
+% Note also that, in \classname{natbib}, the replacement part of \cmd\NAT@def@citea@close\ could be rewritten as
+% \cmd\NAT@def@citea\cmd\prepdef\cmd\@citea\verb+{+\cmd\NAT@@close\verb+}+, which
+% would them obviate the need for us to override its meaning.
+%
+% Note, too, the effect of \cmd\rtx@def@citea@box, which replaces \cmd\NAT@def@citea@box,
+% is almost the same as the latter, except the entire \cmd\@citea\ is given as the argument
+% of \cmd\NAT@mbox.
+%
+% Finally, bear in mind that the English (and some American editors) do not place a comma
+% before the ``and''; our procedures do (but they could be rewritten with that convention).
+% \begin{macrocode}
+\def\rtx@swap@citea{%
+ \let\NAT@def@citea\rtx@def@citea
+ \let\NAT@def@citea@close\rtx@def@citea@close
+ \let\NAT@def@citea@box\rtx@def@citea@box
+}%
+\def\rtx@def@citea{%
+ \def\@citea{\NAT@separator\NAT@space}%
+ \advance\c@NAT@ctr\@ne
+ \@ifnum{\count@>\tw@}{%
+ \@ifnum{\c@NAT@ctr=\count@}{\appdef\@citea{\NAT@conj\NAT@space}}{}%
+ }{%
+ \def\@citea{\NAT@space\NAT@conj\NAT@space}%
+ }%
+}%
+\def\rtx@def@citea@close{%
+ \rtx@def@citea
+ \prepdef\@citea{\NAT@@close}%
+}%
+\def\rtx@def@citea@box{%
+ \rtx@def@citea@close
+ \expandafter\def\expandafter\@citea\expandafter{\expandafter\NAT@mbox\expandafter{\@citea}}%
+}%
+\def\NAT@conj{and}%
+% \end{macrocode}
+%
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\BibitemShut}
+% \begin{macro}{\bibAnnote}
+% \changes{4.1j}{2009/10/24}{(AO, 549) Repairing natbib's \cs{BibitemShut} and \cs{bibAnnote}}
+% \changes{4.1o}{2010/02/05}{(AO, 549) Remove patch to natbib, which is now at version 8.31a}
+% \changes{4.1o}{2010/02/07}{(AO, 578) accommodate the possible space character preceding \cs{BibitemShut}.}
+% We remember a temporary patch to \classname{natbib}'s definition of \cmd\BibitemShut.
+% \begin{macrocode}
+\def\NAT@BibitemShut#1{%
+ \def\@bibstop{#1}%
+ \let\bibitem@Stop\bibitemStop
+ \let\bibitem@NoStop\bibitemNoStop
+ \@ifx{\bibitemShut\relax}{\let\@bibitemShut\@empty}{%
+ \expandafter\def\expandafter\@bibitemShut\expandafter{\bibitemShut}%
+ }%
+}%
+% \end{macrocode}
+% The following is a bug fix to \classname{natbib} version 8.31b.
+% \begin{macrocode}
+\def\BibitemShut@ltx#1{%
+ \unskip
+ \def\@bibstop{#1}%
+ \let\bibitem@Stop\bibitemStop
+ \let\bibitem@NoStop\bibitemNoStop
+ \@ifx{\bibitemShut\relax}{\let\@bibitemShut\@empty}{%
+ \expandafter\def\expandafter\@bibitemShut\expandafter{\bibitemShut}%
+ }%
+}%
+% \end{macrocode}
+%
+% \begin{verbatim}
+%\providecommand{\bibAnnote}[3]{%
+% \BibitemShut{#1}%
+% \def\@tempa{#3}\@ifx{\@tempa\@empty}{}{%
+% \begin{quotation}\noindent
+% \textsc{Key:}\ #2\\\textsc{Annotation:}\ \@tempa
+% \end{quotation}%
+% }%
+% \ignorespaces
+%}%
+%\def\@bibitemShut{}%
+% \end{verbatim}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macrocode}
+\newenvironment{thebibliography}{}{}%
+\let\@listi\@empty
+\appdef\rtx@require@packages{%
+ \RequirePackage[sort&compress]{natbib}[2009/11/07 8.31a (PWD, AO)]%
+ \let@environment{NAT@thebibliography}{thebibliography}%
+ \let@environment{thebibliography}{rtx@thebibliography}%
+ \let\bibliographystyle@latex\bibliographystyle
+ \let\NAT@citesuper\rtx@citesuper
+% \end{macrocode}
+%
+% \begin{macro}{\NAT@bibsetnum}
+% \begin{macro}{\NAT@bibsetup}
+% \begin{macro}{\bibpreamble}
+% \begin{macro}{\newblock}
+% \begin{macro}{\bibnumfmt}
+% \begin{macro}{\NAT@merge}
+% We define the sectioning command to use when starting the bibliography
+% and gently coax \classname{natbib} into using
+% the formatting procedures that \emph{we} want it to use.
+%
+% This way of setting up \env{thebibliography}
+% automatically sets the label width based on
+% the largest number used within the bibliography.
+% This scheme will not work properly using the
+% author/year style of bib entry, though.
+%
+% We define \cmd\bibnumfmt\ to be \cmd\place@bibnumber, which is a macro
+% managed by \revtex. If the document defines \cmd\bibnumfmt, then that
+% definition will be used instead, which is what the \classname{natbib}
+% package gives as its programming interface.
+%
+% We set \cmd\NAT@merge\ to \cmd\tw@, which turns on \classname{natbib}'s
+% \classname{mcite} capabilities. This is the default setting.
+% If numerical citations are not to be used, then \cmd\NAT@merge\
+% should be set to \cmd\@ne\ (syntax is still enabled, but semantics are turned off).
+% \begin{macrocode}
+\let\bibsection\rtx@bibsection
+\let\NATx@bibsetnum\NAT@bibsetnum
+\def\NAT@bibsetnum#1{%
+ \setlength{\topsep}{\z@}%
+ \NATx@bibsetnum{\ref{LastBibItem}}%
+}%
+\let\NATx@bibsetup\NAT@bibsetup
+\def\NAT@bibsetup{%
+ \setlength{\labelwidth}{\z@}%
+ \setlength{\labelsep}{\z@}%
+ \setlength{\itemindent}{\z@}%
+ \setlength{\listparindent}{\z@}%
+ \setlength{\topsep}{\z@}%
+ \setlength{\parsep}{\z@}%
+ \NATx@bibsetup
+}%
+\let\bibpreamble\@empty
+\def\newblock{\ }%
+\let\NATx@bibnumfmt\bibnumfmt
+\def\bibnumfmt{\place@bibnumber}%
+\let\NAT@merge\thr@@
+\let\NAT@citeyear\citeyear
+\let\onlinecite\rev@citealp
+\let\textcite\rev@citet
+% \end{macrocode}
+% The following is needed until \classname{natbib} is at 8.31b.
+% \begin{macrocode}
+\@ifx{\BibitemShut\NAT@BibitemShut}{%
+ \class@info{Repairing natbib's \string\BibitemShut}%
+ \let\BibitemShut\BibitemShut@ltx
+}{}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\bibliographystyle}
+% \changes{4.1q}{2010/04/01}{(AO, 586) When .bbl is pasted into the document, prevent automatic bibliography inclusion.}%
+% \changes{4.1q}{2010/04/13}{(AO, 588) Only write \revtex-specific BibTeX .bib data if the .bst style is set by REVTeX.}%
+% We arrange for the selection of bibliography style
+% to occur either due to the document's explicit
+% \cmd\bibliographystyle\ statement or
+% via the journal substyle.
+%
+% Note that \revtex\ is incompatible with
+% any package that patches \cmd\bibliographystyle.
+% Since \classname{natbib} does this, we need a fix.
+%
+% The Boolean \cmd\bibliographystyle@sw\ signifies that the document contains explicit
+% \cmd\bibliographystyle\ markup. If, on the contrary, the bibliography style is set by
+% the the society or the journal, then no explicit \cmd\bibliographystyle\ command appears in the document instance.
+% In this case \cmd\bibliographystyle@sw\ will be \cmd\false@sw.
+% \begin{macrocode}
+\let\bibliographystyle@latex\bibliographystyle
+\def\bibliographystyle{\@booleantrue\bibliographystyle@sw\def\@bibstyle}%
+\@booleanfalse\bibliographystyle@sw
+% \end{macrocode}
+% \end{macro}
+%
+% \changes{4.1j}{2009/11/03}{(AO, 551) Punctuation at end of reference when optional arguments to the cite key are given.}
+% The following had been bug fixes to \classname{natbib} version 8.31a.
+% \begin{verbatim}
+%\def\bibitemStop{\@bibitemShut}%
+%\def\NAT@bibitem@cont{%
+% \let\bibitem@Stop\bibitemContinue
+% \let\bibitem@NoStop\bibitemContinue
+%}%
+% \end{verbatim}
+% The following are alterations to \classname{natbib} version 8.31a to
+% accommodate the possible space character preceding \cmd\BibitemShut,
+% and to handle the case of merged references, where the first ends with a stop character.
+% \changes{4.1o}{2010/02/07}{(AO, 578) accommodate the possible space character preceding \cs{BibitemShut}.}
+% \changes{4.1o}{2010/02/09}{(AO, 581) Handle case: merged references, with first ending in a stop character.}
+% \begin{macrocode}
+\def\NAT@bibitem@cont{%
+ \let\bibitem@Stop\bibitemContinue@Stop
+ \let\bibitem@NoStop\bibitemContinue
+}%
+% \end{macrocode}
+% \begin{macrocode}
+\def\bibitemNoStop{%
+ \@ifx@empty\@bibitemShut{.\spacefactor\@mmm\space}{\@bibitemShut}%
+}%
+% \end{macrocode}
+% \begin{macrocode}
+\def\bibitemContinue{%
+ \@ifx@empty\@bibitemShut{;\spacefactor\@mmm\space}{\@bibitemShut}%
+}%
+% \end{macrocode}
+% \begin{macrocode}
+\def\bibitemContinue@Stop{%
+ \@ifx@empty\@bibitemShut{\spacefactor\@mmm\space}{\@bibitemShut}%
+}%
+% \end{macrocode}
+%
+% \changes{4.1k}{2009/11/11}{(AO, 561) remove dead code relating to \cs{bibitemContinue}}
+% We used to customize one of the productions of \classname{natbib}, but no longer.
+% \begin{verbatim}
+%\let\bibitemContinue\bibitemContinue@rtx
+% \end{verbatim}
+%
+% Here ends the code to be executed at \cmd\rtx@require@packages\ time.
+% \begin{macrocode}
+}%
+% \end{macrocode}
+% \changes{4.1f}{2009/07/07}{(AO, 516) Merged references are separated with a semicolon}
+% Redefine a macro of \classname{natbib} so that merged references are separated with a semicolon.
+% \changes{4.1k}{2009/11/11}{(AO, 561) remove dead code relating to \cs{bibitemContinue}}
+% \begin{verbatim}
+% \def\bibitemContinue@rtx{;\spacefactor\@mmm\space}%
+% \end{verbatim}
+%
+% \begin{macro}{\onlinecite}
+% \begin{macro}{\textcite}
+% We extend \classname{natbib}'s syntax with two commands to set a citation
+% on the baseline (as opposed to superscripted) and as text (rather than parenthetical), respectively.
+% A journal substyle that makes citations be superscripted or parenthetical as the case may be, should ensure
+% that the author has continued access to these two styles.
+%
+% Note that the society or journal substyle override the meanings of \cmd\@onlinecite\ or
+% \cmd\@textcite\ given here.
+%
+% \begin{macrocode}
+\DeclareRobustCommand\onlinecite{\@onlinecite}%
+\DeclareRobustCommand\textcite{\@textcite}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\bibliography}
+% \changes{4.1a}{2008/01/18}{(AO, 457) Endnotes to be sorted in with numerical citations.}%
+% Provide a hook for supplying Bib\TeX\ a bibliographic database that may contain, say,
+% footnotes.
+%
+% Note that Bib\TeX\ chokes if the argument of the \cmd\bibdata\ command has null fields,
+% hence these tests.
+% \begin{macrocode}
+\let\bibliography@latex\bibliography
+\def\bibliography#1{%
+ \auto@bib@empty
+ \begingroup
+ \let\auto@bib@innerbib\@empty
+ \@ifx@empty{\pre@bibdata}{%
+ \bibliography@latex{#1}%
+ }{%
+ \@if@empty{#1}{%
+ \expandafter\bibliography@latex\expandafter{\pre@bibdata}%
+ }{%
+ \expandafter\bibliography@latex\expandafter{\pre@bibdata,#1}%
+ }%
+ }%
+ \endgroup
+}%
+\let\pre@bibdata\@empty
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{rtx@thebibliography}%
+% \begin{macro}{\present@bibnote}%
+% \changes{4.1f}{2009/07/11}{(AO, 521) Lonely bibliography head}%
+% \changes{4.1n}{2010/01/02}{(AO, 572) Independent footnote counter for title block. Abstract footnote counter shared with body.}%
+% \changes{4.1o}{2010/02/02}{(AO, 575) Automatically incorporate the (Bib\TeX-generated) .bbl into an explicit \env{thebibliography}}%
+% \changes{4.1q}{2010/04/01}{(AO, 586) When .bbl is pasted into the document, prevent automatic bibliography inclusion.}%
+% We put a tail patch into \cmd\thebibliogrphy\ and
+% a headpatch into \cmd\endthebibliography.
+%
+% Here we provide a default treatment for frontmatter notes
+% deferred to the bibliography; a journal substyle
+% might want to override the definition of \cmd\present@bibnote.
+%
+% We make provisions for the case where there are no \cmd\bibitem s
+% for the bibliography: we produce no bibliography head at all.
+%
+% \begin{macrocode}
+\newenvironment{rtx@thebibliography}[1]{%
+ \NAT@thebibliography{#1}%
+ \let\@TBN@opr\present@bibnote
+ \@FMN@list
+}{%
+% \end{macrocode}
+% The following line was commented out:
+% \begin{verbatim}
+%\@endnotesinbib
+% \end{verbatim}
+% The \cmd\auto@bib@innerbib\ directive has been moved from the begin processing to the end processing.
+% This means that the content of the \env{thebibliography} environment can itself prevent the
+% automatic reading in of the .bbl file. This would be needed when the user has pasted in the
+% content of the .bbl file into the document itself, something required by APS and AIP editorial direction.
+% \begin{macrocode}
+ \auto@bib@innerbib
+ \edef\@currentlabel{\arabic{NAT@ctr}}%
+ \label{LastBibItem}%
+ \endNAT@thebibliography
+ \aftergroup\auto@bib@empty
+}%
+\def\present@bibnote#1#2{%
+ \item[%
+ \textsuperscript{%
+ \normalfont
+ \Hy@raisedlink{\hyper@anchorstart{frontmatter.#1}\hyper@anchorend}%
+ \begingroup
+ \csname c@\@mpfn\endcsname#1\relax
+ \frontmatter@thefootnote
+ \endgroup
+ }%
+ ]#2\par
+% \end{macrocode}
+% The following line was commented out:
+% \begin{verbatim}
+%\global\let\NAT@bibitem@first@sw\@secondoftwo
+% \end{verbatim}
+% \begin{macrocode}
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{environment}
+%
+% \begin{macro}{write@bibliographystyle}
+% \changes{4.1q}{2010/04/13}{(AO, 588) Only write \revtex-specific BibTeX .bib data if the .bst style is set by REVTeX.}%
+% We wish to delay committing the \cmd\bibliographystyle\ until as late as possible.
+% The journal substyle will define a default bibliography style, and
+% the document's explicit \cmd\bibliographystyle\ command, if any, will override that default.
+%
+% The \cmd\bibstyle\ command is allowed appear quite late in the \file{.aux} file.
+% We now delay the automatic writing of the \cmd\bibstyle\ command to the end of the job.
+%
+% The procedure \cmd\write@bibliographystyle\ tests whether a \cmd\bibliographystyle\ command has
+% already been given.
+% If not, it effectively executes the needed \cmd\bibliographystyle\ command, then neutralizes itself
+% (we only need to do this once per job).
+%
+% If the document lacks explicit \cmd\bibliographystyle\ markup, we execute
+% \cmd\@bibdataout@rev, a hook for \revtex-aware processing.
+% \begin{macrocode}
+\def\write@bibliographystyle{%
+ \@ifxundefined\@bibstyle{}{%
+ \expandafter\bibliographystyle@latex\expandafter{\@bibstyle}%
+ \bibliographystyle@sw{}{\@bibdataout@rev}%
+ }%
+ \global\let\write@bibliographystyle\relax
+}%
+\AtEndDocument{\write@bibliographystyle}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\rtx@@citetp}
+% \begin{macro}{\rtx@citex}
+% \begin{macro}{\super@cite@let}
+% \begin{macro}{\super@cite@end}
+% \begin{macro}{\super@cite@swap}
+% We wish to extend \classname{natbib} to move spaces and citations around
+% a superscript-style citation, imitating Donald Arseneau's \classname{cite} package
+% with the \classoption{super}.
+%
+% The \cmd\rtx@@citetp\ procedure is substituted for \cmd\NAT@@citetp;
+% it then calls the \cmd\rtx@citex\ procedure and implements the features of the
+% \classoption{citeautoscript} class option.
+% In the end, \cmd\@citex\ is called with its customary parameters.
+%
+% The document should be marked up as if citations were \emph{not} superscripted,
+% and then if you select a journal substyle that has superscripted citations, \revtex\ will do its best
+% to alter the formatting of the \cmd\cite s to accomodate superscript style.
+%
+% Only citations set as superscript are affected by this procedure,
+% because we check \cmd\@cite\ against \cmd\NAT@citesuper.
+%
+% Here's a subtle point: when is the argument of \cmd\super@cite@swap\ not the same as the token \cmd\@let@token?
+% Answer: when the latter is \cmd\@sptoken! This case has to be handled separately.
+%
+% Note that whether a punctuation is movable is determined by the definition
+% of a particular control sequence name.
+% A society or journal can alter things: to remove a character from the set,
+% do, say, \cmd\expandafter \cmd\let \cmd\csname \texttt{rtx@automove;} \cmd\endcsname \cmd\relax.
+% To add a character to the set, do, say, \cmd\expandafter \cmd\let \cmd\csname \texttt{rtx@automove;} \cmd\endcsname \cmd\@empty.
+%
+% Implementation note: due to a \TeX\ peculiarity, we have to check for the case
+% where \cmd\@let@token\ is a space token \emph{before} we parse forward.
+% At issue is the corner case where an end of file is at hand. If we
+% were to let \cmd\super@cite@swap\ parse forward, we would encounter a \TeX\ end-of-file
+% error. Note that the test will be true in many distinct cases:
+% the file ends, the next character is a line terminator, the next character is a space.
+% \begin{macrocode}
+\def\rtx@@citetp[#1]{\@ifnextchar[{\rtx@citex[#1]}{\rtx@citex[][#1]}}%
+\def\rtx@citex[#1][#2]#3{%
+ \begingroup
+ \def\@tempa{[#1][#2]{#3}}%
+ \@ifx{\@cite\NAT@citesuper}{%
+ \leavevmode
+ \skip@\lastskip
+ \unskip
+ \super@cite@let
+ }{%
+ \super@cite@end
+ }%
+}%
+\def\super@cite@let{%
+ \futurelet\@let@token\super@cite@check
+}%
+\def\super@cite@end{%
+ \aftergroup\@citex\expandafter\endgroup\@tempa
+}%
+\def\super@cite@check{%
+ \@ifx{\@let@token\@sptoken}{%
+ \super@cite@end
+ }{%
+ \super@cite@swap
+ }%
+}%
+\long\def\super@cite@swap#1{%
+ \expandafter\@ifx\expandafter{\csname rtx@automove#1\endcsname\@empty}{%
+ #1%
+ \super@cite@let
+ }{%
+ \super@cite@end
+ #1%
+ }%
+}%
+\expandafter\let\csname rtx@automove.\endcsname\@empty
+\expandafter\let\csname rtx@automove,\endcsname\@empty
+\expandafter\let\csname rtx@automove:\endcsname\@empty
+\expandafter\let\csname rtx@automove;\endcsname\@empty
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% The following must execute only after \classname{natbib} is loaded and has set
+% up its parameters (which it does at \cmd\AtBeginDocument\ time).
+% If superscript citations have been selected, and
+% if the \classoption{citeautoscript} class option has been selected,
+% we patch into \classname{natbib}'s mechanism to migrate punctuation around the
+% citation, as in class \classname{cite} with the \classoption{superscript} option.
+% \begin{macrocode}
+\appdef\class@documenthook{%
+ \citeautoscript@sw{%
+ \@ifx{\@cite\NAT@citesuper}{%
+ \let\NAT@@citetp\rtx@@citetp
+ }{}%
+ }{}%
+}%
+% \end{macrocode}
+%
+% Resolve an incompatability between \classname{natbib} and \classname{listings}.
+% The latter package tests \cmd\chapter (which has now been \cmd\let\ to \cmd\relax\ as a side effect \classname{natbib}'s use of \LaTeX's \cmd\@ifundefined).
+%
+% We couch our fix in such terms that will not be disruptive if \cmd\chapter\ is actually defined at this point.
+%
+% \changes{4.1b}{2008/07/01}{(AO) No longer need to test \cs{chapter} as of \texttt{natbib} version 8.2}
+% \begin{verbatim}
+%\@ifx{\chapter\relax}{\let\chapter\@undefined}{}%
+% \end{verbatim}
+%
+%
+% \subsubsection{\cs{endnote}s and \cs{rtx@bibnote}s}
+%
+% \begin{macro}{\mini@note}
+% \begin{macro}{\save@note}
+% \changes{4.1n}{2010/01/02}{(AO, 572) Independent footnote counter for title block. Abstract footnote counter shared with body.}%
+% QUERY: how do footnotes get thrown to the bibliography. \cmd\footinbib@sw\ appears to be irrelevant.
+% \begin{macrocode}
+\def\mini@note{\save@note\mini@notes}%Implicit #2
+\def\save@note#1#2{%
+ \stepcounter\@mpfn
+ \protected@xdef\@thefnmark{\thempfn}%
+ \@footnotemark
+ \expandafter\g@addto@macro
+ \expandafter#1%
+ \expandafter{%
+ \expandafter \@@footnotetext
+ \expandafter {\@thefnmark}{#2}%
+ }%
+}%
+\long\def\@@footnotetext#1{\def\@thefnmark{#1}\@footnotetext}%
+\let\mini@notes\@empty
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\endnote}
+% A version of footnote that appears in the bibliography, or where \cmd\printendnotes\ appears.
+% \begin{verbatim}
+%\def\@endnote{%
+% \begingroup
+% \aftergroup\@footnotemark
+% \aftergroup\@endnotetext
+% \@ifnextchar[{%
+% \@xendnote
+% }{%
+% \stepcounter{footnote}%
+% \protected@xdef\@tempa{\thefootnote}%
+% \expandafter\@xendnote\expandafter[\the\c@footnote]%
+% }%
+%}%
+% \end{verbatim}
+% \end{macro}
+%
+% \begin{macro}{\@xendnote}
+% \changes{4.1a}{2008/01/18}{(AO, 457) Endnotes to be sorted in with numerical citations.}%
+% \begin{verbatim}
+%\def\unused@xendnote[#1]{%
+% \begingroup
+% \c@footnote#1\relax
+% \end{macrocode}
+% New for 4.1
+% \begin{macrocode}
+% \unrestored@protected@xdef\@endnotelabel{Note\thefootnote}%
+% \authoryear@sw{%
+% \unrestored@protected@xdef\@thefnmark{\noexpand\ref{\@endnotelabel}}%
+% }{%
+% \unrestored@protected@xdef\@thefnmark{\@endnotelabel}%
+% }%
+% \end{macrocode}
+% Was:
+% \unrestored@protected@xdef\@thefnmark{endnote\thefootnote}%
+% End 4.1 changes
+% \begin{macrocode}
+% \endgroup
+% \endgroup
+%}%
+%\def\@endnotemark{%
+% \expandafter\cite\expandafter{\@thefnmark}%
+%}%
+% \end{verbatim}
+% \begin{macrocode}
+\def\rev@citemark#1{%
+ \expandafter\cite\expandafter{\@thefnmark}%
+}%
+\def\rev@endtext#1{%
+ \let\@endnotelabel\@thefnmark
+ \@endnotetext
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\endnote@ext}
+% \begin{macro}{\bibdata@app}
+% \begin{macro}{\bibdata@ext}
+% The macro \cmd\endnote@ext\ is the file extension for the auxiliary file holding footnotes.
+% The \cmd\bibdata@app\ and \cmd\bibdata@ext\ macros are used to form the name of a
+% Bib\TeX\ database file holding footnotes.
+% \begin{macrocode}
+\def\endnote@ext{.end}%
+\def\bibdata@app{Notes}%
+\def\bibdata@ext{bib}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@endnotetext}
+% \changes{4.1a}{2008/01/18}{(AO, 457) Endnotes to be sorted in with numerical citations.}%
+% The procedure \cmd\@endnotetext\ writes a Bib\TeX\ .bib file for the purpose
+% of insering a footnote into the (numbered, unsorted) bibliography.
+%
+% We need to define \cmd\pre@bibdata\ to be
+% \cmd\jobname\cmd\endnote@ext, and we probably should define \cmd\endnote@ext\ to
+% be something like ``Notes.bib''.
+%
+% In each case, the material to be written out requires robustification, provided by \cmd\endnote@relax.
+% The commands \cmd\label, \cmd\index, and \cmd\glossary,
+% which are robustified for \cmd\markright\ and \cmd\addcontentsline,
+% are likewise robustified here.
+%
+% Procedure \cmd\@endnotetext@note\ is the alias for \cmd\@endnotetext\ when the endnotes are to be
+% processed separately from the bibliography (generally true when citations are not sorted).
+% \begin{verbatim}
+%\long\def\unused@endnotetext@note#1{%
+% \@ifxundefined\@endnoteout{%
+% \newwrite\@endnoteout
+% \gdef\endnote@stream{\jobname\endnote@ext}%
+% \immediate\openout\@endnoteout\endnote@stream\relax
+% }{}%
+% \begingroup
+% \endnote@relax
+% \immediate\write\@endnoteout{\string\@doendnote{\@endnotelabel}{#1}}%
+% \endgroup
+%}%
+% \end{verbatim}
+%
+% \cmd\@doendnote\ is obsolete.
+% \begin{verbatim}
+%\def\@doendnote#1#2{\bibitem{#1}#2}%
+% \end{verbatim}
+%
+% \changes{4.1o}{2010/02/05}{(AO, 579) Endnote shall comprise their own Bib\TeX\ entry type: @FOOTNOTE.}
+% Procedure \cmd\@endnotetext\ is the operative procedure\ when the endnotes are to be
+% collated in with the other references, typically true when numerical citations are being used.
+% The technique involves writing a .bib file (\cmd\@bibdataout) with each endnote typed as
+% a \texttt{@FOOTNOTE} entry.
+%
+% Timing note: doing \cmd\openout\ should be deferred until the beginning of the document,
+% as is done here. This allows one to make a format (\filename{.fmt}) file out of this class.
+% \begin{macrocode}
+\long\def\@endnotetext#1{%
+ \begingroup
+ \endnote@relax
+ \immediate\write\@bibdataout{%
+ @FOOTNOTE{%
+ \@endnotelabel,%
+% \end{macrocode}
+% The \texttt{key} field is recommended in cases where there is no author (see \filename{btxdoc}).
+% \begin{macrocode}
+ key="\@endnotelabel",%
+% \end{macrocode}
+% The \texttt{note} field is simply the content of the footnote.
+% \begin{macrocode}
+ note="#1"%
+ }%
+ }%
+ \endgroup
+}%
+\newwrite\@bibdataout
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\endnote@relax}
+% At \cmd\AtBeginDocument\ time, we open the job's \filename{.bib} file.
+%
+% Procedure \cmd\endnote@relax\ robustifies commands that ought not to be expanded when
+% the endnote is written out.
+% Note the similarity between \cmd\endnote@relax\ and \cmd\protected@write.
+% \begin{macrocode}
+\def\endnote@relax{%
+ \let\label\relax \let\index\relax \let\glossary\relax
+ \let\cite \relax \let\ref \relax \let\pageref \relax
+ \let\( \relax \let\) \relax \let\\ \relax
+ \let~\relax
+% \end{macrocode}
+% \begin{verbatim}
+%\let\protect\noexpand
+% \end{verbatim}
+% \begin{macrocode}
+ \let \protect \@unexpandable@protect
+ \newlinechar`\^^M%
+% \end{macrocode}
+% \begin{verbatim}
+%\newlinechar`\ %
+% \end{verbatim}
+% \begin{macrocode}
+ \let\begin\relax \let\end\relax
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@bibdataout@init}
+% \begin{macro}{\@bibdataout@aps}
+% \changes{4.1o}{2010/02/10}{(AO, 580) Provide a document class option to turn off production of eprint field in bibliography.}
+% \changes{4.1o}{2010/02/12}{(AO, 580) Control .bst at run time.}%
+% \changes{4.1q}{2010/04/13}{(AO, 588) Only write \revtex-specific BibTeX .bib data if the .bst style is set by REVTeX.}%
+% At \cmd\AtBeginDocument\ time, we open the job's \filename{.bib} file.
+% The hook is available for use by a society to place its own @CONTROL record in the \cmd\@bibdataout\ stream.
+% \begin{macrocode}
+\appdef\class@documenthook{\@bibdataout@init}%
+\def\@bibdataout@init{%
+ \immediate\openout\@bibdataout\pre@bibdata.\bibdata@ext\relax
+}%
+\def\@bibdataout@rev{%
+ \immediate\write\@bibdataout{%
+% \end{macrocode}
+% The entry that controls processing of the \filename{.bst} file has entry type \texttt{@CONTROL}.
+% The citation key (REVTEX41Control) is effectively a version number,
+% which the \filename{.bst} can use to interpret the bib entry.
+% \begin{macrocode}
+ @CONTROL{%
+ REVTEX41Control%
+% \end{macrocode}
+% Say if we want the \texttt{eprint} field disabled. Otherwise accept the default of the \filename{.bst}.
+% \begin{macrocode}
+ \eprint@enable@sw{}{,eprint=""}%
+ }%
+ }%
+% \end{macrocode}
+% Place a \cmd\citation\ into the auxiliary file corresponding to this entry.
+% \begin{macrocode}
+ \if@filesw
+ \immediate\write\@auxout{\string\citation{REVTEX41Control}}%
+ \fi
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\printendnotes}
+% \changes{4.1f}{2009/07/10}{(AO, 520) Automatically produce \cs{bibliography} command when needed}%
+% We have removed the endnotes facility from REVTeX, so the \cmd\printendnotes\ command now does nothing.
+%
+% Moving footnotes to the bibliogrphy is now accomplished through
+% the automatic generation of a job BiB\TeX\ database (called \cmd\pre@bibdata) containing the footnotes.
+% \begin{macrocode}
+\def\printendnotes{%
+ \class@warn{The \string\printendnotes\space command no longer serves any function. Please remove it from your document.}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@endnotesinbib}
+% \begin{macro}{\@endnotesinbibliography}
+% \changes{4.1a}{2008/01/18}{(AO, 457) Endnotes to be sorted in with numerical citations.}%
+% We define a function \cmd\@endnotesinbib,
+% and a variant \cmd\@endnotesinbibliography.
+% The former is invoked at the start of
+% the end processing for \enve{thebibliography};
+% the latter is a synonym.
+%
+% The procedure typesets the footnotes that are to
+% appear in the bibliography; the default is to
+% simply arrange for the footnote counter to be
+% reset at the start of the document.
+%
+% Note that this code make the assumption that
+% the counter used in \env{thebibliography} is \cmd\c@NAT@ctr.
+% \changes{4.1f}{2009/07/10}{(AO, 520) Automatically produce \cs{bibliography} command when needed}%
+%
+% Here is the sole place where \cmd\footinbib@sw\ has an effect, other code simple assigning its value.
+% If it is false, or \cmd\authoryear@sw\ is true, then footnotes are handled by the default mechanism.
+% \begin{macrocode}
+\def\make@footnote@endnote{%
+ \footinbib@sw{%
+ \authoryear@sw{}{%
+ \ltx@footnote@push
+ \def\thempfn{Note\thefootnote}%
+ \let\ltx@footmark\rev@citemark
+ \let\ltx@foottext\rev@endtext
+% \end{macrocode}
+% The endnotes facility has been removed.
+% Also, there is no need to queue up \cmd\auto@bib\ here, since it is always queued up elsewhere.
+% \changes{4.1f}{2009/07/10}{(AO, 520) Automatically produce \cs{bibliography} command when needed}%
+% \begin{verbatim}
+% \appdef\class@enddocumenthook{\auto@bib}%
+% \let\printendnotes\relax
+% \end{verbatim}
+% \begin{macrocode}
+ }%
+ }{}%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\ltx@footnote@push{%
+ \let\ltx@footmark@latex\ltx@footmark
+ \let\ltx@foottext@latex\ltx@foottext
+ \let\thempfn@latex\thempfn
+ \def\ltx@footnote@pop{%
+ \let\ltx@footmark\ltx@footmark@latex
+ \let\ltx@foottext\ltx@foottext@latex
+ \let\thempfn\thempfn@latex
+ }%
+}%
+% \end{macrocode}
+%
+% The switchover to setting footnotes in the bibliography
+% changes the meaning of \cmd\footnote\ and
+% substitutes the synonym for \cmd\@endnotesinbib.
+%
+% We arrange for the procedure \cmd\make@footnote@endnote\ to be executed
+% at \cmd\class@documenthook\ time (we mustn't do this earlier because
+% the meaning of \cmd\@footnotemark\ must not be changed before then,
+% for the sake of \file{ltxutil.dtx}).
+% \begin{macrocode}
+\appdef\class@documenthook{%
+ \make@footnote@endnote
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\auto@bib}
+% \begin{macro}{\auto@bib@empty}
+% \begin{macro}{\test@bbl@sw}
+% \begin{macro}{\bibitem@set}
+% \begin{macro}{\auto@bib@innerbib}
+% \begin{macro}{\thebibliography@nogroup}
+% \changes{4.1f}{2009/07/10}{(AO, 520) Automatically produce \cs{bibliography} command when needed}%
+% \changes{4.1n}{2010/01/02}{(AO, 572) Independent footnote counter for title block. Abstract footnote counter shared with body.}%
+% \changes{4.1o}{2010/02/02}{(AO, 575) Automatically incorporate the (Bib\TeX-generated) .bbl into an explicit \env{thebibliography}}%
+% Under some circumstances, we must typeset the bibliography automatically.
+% If the document requires footnotes to be set in the bibliography (effectively, class option \texttt{footinbib}),
+% or that frontmatter footnotes be set in the bibliography (effectively, class option \texttt{bibnotes}),
+% but contains no explicit \cmd\bibliography\ statement.
+%
+% Note that this facility is not able to work more than once per document.
+% If multiple bibliographys are required (e.g., per article), it will be the responsibility of the journal style
+% to restore \cmd\auto@bib\ to its original meaning so it can be re-invoked.
+%
+% In procedure \cmd\auto@bib, we first test for the presence of frontmatter footnotes deferred to the bibliography.
+% If none, we further test for the presence of \cmd\bibitem\ commands in the job's \filename{.bbl} file.
+% If either condition is met, we ask for a bibliography.
+% We know that the document itself lacks a \cmd\bibliography\ statement,
+% so we know the argument of the \cmd\bibliography\ that we will issue.
+% \begin{macrocode}
+\def\auto@bib{%
+ \@ifx@empty\@FMN@list{%
+ \footinbib@sw{%
+ \@ifnum{\csname c@\@mpfn\endcsname>\z@}{%
+ \true@sw
+ }{%
+ \test@bbl@sw
+ }%
+ }{%
+ \test@bbl@sw
+ }%
+ }{%
+ \true@sw
+ }%
+ {%
+ \bibliography{}%
+ }{}%
+}%
+\def\auto@bib@empty{%
+ \let\auto@bib\@empty
+}%
+% \end{macrocode}
+% Testing the \filename{.bbl} file involves defanging all expected commands
+% and processing that file inside a box register (that will be simply discarded).
+% We provide a new meaning for the \cmd\bibitem\ command: it queues a Boolean.
+% \begin{macrocode}
+\def\test@bbl@sw{%
+ \setbox\z@\vbox\bgroup
+ \let\providecommand\providecommand@j@nk
+ \let\bibfield\@gobbletwo
+ \let\bibinfo\@gobbletwo
+ \let\translation\@gobble
+ \let\BibitemOpen\@empty
+ \let\bibitemStop\@empty
+ \let\bibitemNoStop\@empty
+ \let\EOS\@empty
+ \let\BibitemShut\@gobble
+ \let\bibAnnoteFile\@gobbletwo
+ \let\bibAnnote\@gobblethree
+ \let\textbf\@gobble
+ \let\emph\@gobble
+ \@booleanfalse\bibitem@sw
+ \let\bibitem\bibitem@set
+ \auto@bib@innerbib
+ \bibitem@sw{\aftergroup\true@sw}{\aftergroup\false@sw}%
+ \egroup
+}%
+% \end{macrocode}
+% The \cmd\bibitem@set\ is an alias for \cmd\bibitem\ for the purpose of detecting a non-trivial bibliography.
+% \begin{macrocode}
+\newcommand\bibitem@set[1][]{%
+ \bibitem@sw{}{%
+ \@booleantrue\bibitem@sw
+ \aftergroup\@booleantrue\aftergroup\bibitem@sw
+ }%
+}%
+% \end{macrocode}
+% The \cmd\auto@bib@innerbib\ procedure reads in the \filename{.bbl} file (if it exists)
+% within a context where its \env{thebibliography} environment does nothing, not even establishing a group.
+% \begin{macrocode}
+\def\auto@bib@innerbib{%
+ \begingroup
+ \let@environment{thebibliography}{thebibliography@nogroup}%
+ \bibliography{}%
+ \endgroup
+}%
+% \end{macrocode}
+% Environment \env{thebibliography@nogroup} is an alias of the \env{thebibliography} environment that cancels itself.
+% It assumes that it is called within a \env{thebibliography} environment.
+% \begin{macrocode}
+\def\thebibliography@nogroup#1{%
+ \endgroup
+ \def\@currenvir{thebibliography}%
+}%
+\def\endthebibliography@nogroup{\begingroup}%
+% \end{macrocode}
+% The following should be part of \filename{ltxutil}.
+% \begin{macrocode}
+\long\def \@gobblethree #1#2#3{}%
+\def\providecommand@j@nk#1[#2]{%
+ \@ifnum{#2=\z@}{\def\j@nk}{%
+ \@ifnum{#2=\@ne}{\def\j@nk##1}{%
+ \@ifnum{#2=\tw@}{\def\j@nk##1##2}{%
+ \@ifnum{#2=\thr@@}{\def\j@nk##1##2##3}{%
+ }%
+ }%
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \section{Initial setup}
+%
+% The standard LaTeX document classes execute certain commands
+% that are best deferred until \cmd\class@documenthook\ time.
+% Here, we effectively split \cmd\pagenumbering\ into two halves,
+% with a default definition for \cmd\thepage
+% and an initialization of \cmd\c@page\ at \cmd\class@documenthook\ time.
+%
+% The meaning of \cmd\thepage\ can be overridden by society, journal, or
+% anywhere within the document pramble, and the counter itself will be
+% preset at the beginning of the document.
+% \begin{macrocode}
+\def\thepage{\@arabic\c@page}%
+% \end{macrocode}
+% \changes{4.0b}{1999/06/20}{Defer assignment until \cs{AtBeginDocument} time.}
+% Note that this code is executed at \cmd\setup@hook\ time
+% to allow for the possibility of overrides by packages like \classname{geometry}.
+% \begin{macrocode}
+\appdef\setup@hook{%
+ \tabbingsep \labelsep
+ \leftmargin\leftmargini
+ \labelwidth\leftmargin\advance\labelwidth-\labelsep
+ \let\@listi\@listI
+ \@listi
+}%
+% \begin{macrocode}
+%
+% We ensure that the ``environment'' component mark (implemented by \file{ltxgrid.dtx})
+% is initialized properly (via a hook, itself defined via \file{ltxutil.dtx}).
+% \begin{macrocode}
+\appdef\class@documenthook{%
+ \global\c@page\@ne
+ \def\curr@envir{document}%
+ \mark@envir{\curr@envir}%
+}%
+% \end{macrocode}
+%
+% \begin{macro}{\open@onecolumn}%
+% \begin{macro}{\open@column@two}%
+% \changes{4.0c}{1999/11/13}{Grid changes with ltxgrid}
+% \changes{4.0d}{2000/04/10}{Also alter how lists get indented.}
+% When setting the column grid, we have to override the procedure
+% for formatting lists.
+% Because \cmd\twocolumngrid\ requires rebalancing columns at some points,
+% typesetting must employ only the manipulation of
+% \cmd\leftskip\ and \cmd\rightskip, and must avoid the use of
+% \cmd\moveleft, \cmd\moveright, and \cmd\parshape.
+%
+% It is one of the stranger features of \TeX\ that these two separate
+% mechanisms exist. The latter three have the effect of adding things to the
+% Main Vertical List that cannot be removed and later added back with all their
+% properties intact.
+%
+% In detail, \cmd\moveleft, say, adds a box to the MVL with
+% its reference point shifted horizontally by some amount relative to the
+% reference point of the enclosing list. If that box is removed from the
+% MVL (via a \cmd\lastbox\ operation in the output routine), and later
+% thrown back to the MVL, the shift of the box will have been ``forgotten'' by \TeX.
+% This is a bug, but not one ``acceptible to D. E. Knuth'', so it will never be fixed.
+%
+% \begin{macrocode}
+\def\open@onecolumn{%
+ \open@column@one\@ne
+ \set@colht
+ \@floatplacement
+ \@dblfloatplacement
+}%
+\def\open@twocolumn{%
+ \open@column@mlt\tw@
+ \set@colht
+ \@floatplacement
+ \@dblfloatplacement
+ \sloppy
+ \let\set@listindent\set@listindent@
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \section{\cs{appendix}}
+%
+% \begin{macrocode}
+%\newif\ifappendixon
+% \end{macrocode}
+% Note that, within appendices,
+% equations are numbered within sections (appendices).
+% \begin{macrocode}
+\def\appendix{%
+ \par
+%\appendixontrue
+ \setcounter{section}\z@
+ \setcounter{subsection}\z@
+ \setcounter{subsubsection}\z@
+ \def\thesubsection{\arabic{subsection}}%
+ \def\thesubsubsection{\alph{subsubsection}}%
+ \@addtoreset{equation}{section}%
+ \def\theequation@prefix{\thesection}%
+ \addtocontents{toc}{\protect\appendix}%
+ \@ifstar{%
+ \def\thesection{\unskip}%
+ \def\theequation@prefix{A.}%
+ }{%
+ \def\thesection{\Alph{section}}%
+ }%
+}%
+% \end{macrocode}
+%
+% \section{Changing the page grid}
+% \changes{4.0b}{1999/06/20}{Define three separate environments, defer assignment to \cs{AtBeginDocument} time.}
+%
+% \subsection{Avoiding Grid Changes}%
+%
+% In preprint styles, ``wide text'' is a no-op, and the title page
+% processing involves no grid change.
+%
+% \begin{macro}{\title@column}%
+% \begin{macro}{\close@column}%
+% Provide default meanings for \cmd\title@column\ and \cmd\close@column,
+% in case they were never defined.
+% Note that the society or journal substyle may define
+% \cmd\title@column\ or \cmd\close@column: this code will not override.
+% \begin{macrocode}
+\def\title@column#1{%
+ \minipagefootnote@init
+ #1%
+ \minipagefootnote@foot
+}%
+\def\close@column{%
+ \newpage
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Galley Style: Margin Changes}%
+% A variant of preprint processing. Emulate journal appearance somewhat.
+%
+% \begin{environment}{widetext@galley}
+% DPC: We're in galley style so do a lob sided display environment.
+%
+% QUERY: How can we be sure that we are in galley style?
+% ANSWER: as noted elsewhere, require that both \cmd\twocolumn@sw\ and \cmd\preprintsty@sw\ be false.
+% \begin{macrocode}
+\def\galley@outdent{\rightmargin-\columnwidth\advance\rightmargin-\columnsep}%
+\let\widetext@outdent\@empty
+\newenvironment{widetext@galley}{%
+ \list{}{%
+ \topsep \z@skip
+ \listparindent \parindent
+ \itemindent \parindent
+ \leftmargin \z@
+ \parsep \z@\@plus\p@
+ \widetext@outdent
+ \relax
+ }%
+ \item\relax
+}{
+ \endlist
+}%
+% \end{macrocode}
+% \end{environment}
+%
+%
+% \subsection{Grid Changing Via \classname{ltxgrid}}%
+%
+% In case \classoption{twocolumngrid} has been invoked,
+% switch column grid using the column grid-changing commands.
+% Supply stub definitions of those commands here.
+% \changes{4.0c}{1999/11/13}{grid changes with ltxgrid}
+%
+% \begin{macro}{\title@column@grid}%
+% \begin{macro}{\close@column@grid}%
+% The title block always starts at the top of a new page.
+% \changes{4.0c}{1999/11/13}{grid changes with ltxgrid}
+%
+% Note that, for the procedure \cmd\close@column@grid,
+% we balance columns by switching to the one-column page grid.
+% \begin{macrocode}
+\def\title@column@grid#1{%
+ \minipagefootnote@init
+ \onecolumngrid
+ \begingroup
+ \let\@footnotetext\frontmatter@footnotetext
+%<ignore> \let\set@footnotewidth\set@footnotewidth@two
+ \ltx@no@footnote
+ #1%
+ \endgroup
+ \twocolumngrid
+ \minipagefootnote@foot
+}%
+\def\close@column@grid{%
+ \balancelastpage@sw{%
+ \onecolumngrid
+%<ignore> \twocolumngrid
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{environment}{widetext@grid}
+% \changes{4.0c}{1999/11/13}{grid changes via ltxgrid procedures}
+% \changes{4.0e}{2000/11/21}{adornments above and below.}
+% \changes{4.1g}{2009/10/07}{(AO, 525) Remove phantom paragraph above display math that is given in vertical mode}%
+% We slip into the one-column page grid
+% within the scope of this environment.
+%
+% Note that we set adornments above and below the \env{widettext}.
+% These are set as leaders, so they will disappear at a page break.
+% \changes{4.1n}{2010/01/02}{(AO) fine-tune spacing above and below widetext}%
+% \begin{macrocode}
+\newenvironment{widetext@grid}{%
+ \par\ignorespaces
+ \setbox\widetext@top\vbox{%
+%<ignore> \vskip15\p@
+ \hb@xt@\hsize{%
+ \leaders\hrule\hfil
+ \vrule\@height6\p@
+ }%
+%<ignore> \vskip6\p@
+ }%
+ \setbox\widetext@bot\hb@xt@\hsize{%
+ \vrule\@depth6\p@
+ \leaders\hrule\hfil
+ }%
+ \onecolumngrid
+ \vskip10\p@
+ \dimen@\ht\widetext@top\advance\dimen@\dp\widetext@top
+ \cleaders\box\widetext@top\vskip\dimen@
+%<ignore> \let\set@footnotewidth\set@footnotewidth@two
+ \vskip6\p@
+ \prep@math@patch
+}{%
+ \par
+ \vskip6\p@
+ \setbox\widetext@bot\vbox{%
+ \hb@xt@\hsize{\hfil\box\widetext@bot}%
+%<ignore> \vskip14\p@
+ }%
+ \dimen@\ht\widetext@bot\advance\dimen@\dp\widetext@bot
+ \cleaders\box\widetext@bot\vskip\dimen@
+ \vskip8.5\p@
+ \twocolumngrid\global\@ignoretrue
+ \@endpetrue
+}%
+\newbox\widetext@top
+\newbox\widetext@bot
+% \end{macrocode}
+% \end{environment}
+%
+%
+% Decide, finally, how the page grid is to be manipulated.
+% \begin{macrocode}
+\def\set@page@grid{%
+ \twocolumn@sw{%
+% \end{macrocode}
+% The following two assignments determine what procedures are to be executed when
+% the footnote set width is calculated, and how footnotes are to be composed at the bottom of the page.
+% A society or journal wishing to do otherwise will override this code.
+% \begin{macrocode}
+ \let\set@footnotewidth\set@footnotewidth@two
+ \let\compose@footnotes\compose@footnotes@two
+ \let@environment{widetext}{widetext@grid}%
+ \let\title@column\title@column@grid
+ \let\close@column\close@column@grid
+ }{%
+ \let@environment{widetext}{widetext@galley}%
+ \preprintsty@sw{%
+% \end{macrocode}
+% Change the page grid not at all.
+% \begin{macrocode}
+ }{%
+% \end{macrocode}
+% If we are galley style, change the page margin only.
+% \begin{macrocode}
+ \galley@sw{%
+ \let\widetext@outdent\galley@outdent
+ }{}%
+ }%
+ }%
+}%
+\appdef\setup@hook{\set@page@grid}%
+% \end{macrocode}
+%
+% \section{Old font commands}
+%
+% \begin{macrocode}
+\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
+\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
+\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
+\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
+\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
+\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl}
+\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc}
+\DeclareRobustCommand*\cal{\@fontswitch\relax\mathcal}
+\DeclareRobustCommand*\mit{\@fontswitch\relax\mathnormal}
+% \end{macrocode}
+%
+% \section{English-Language Texts}
+% As this class is just for English language journals, we
+% could hardwire these texts,
+% but to make it easier to use this as a
+% basis for the code for similar journal styles, separate out all the
+% fixed text strings into babel-style macros of the form
+% |\|\ldots|name|
+%
+% Note: for babel compatability, use version 1999/05/05 v3.6x or later.
+%
+% Some of these might need changing in the society-specific code.
+%
+% \begin{macro}{\today}
+% Procedure \cmd\today\ is used in the article class, but not in
+% this document class.
+% \begin{macrocode}
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\notesname}
+% Text entity \cmd\notesname\ had been used in \cmd\printendnotes.
+% \changes{4.1f}{2009/07/10}{(AO, 520) Automatically produce \cs{bibliography} command when needed}%
+% However, we have removed the endnotes facility from REVTeX.
+%
+% \begin{verbatim}
+%\def\notesname{Notes}
+% \end{verbatim}
+% \end{macro}
+%
+% \begin{macro}{\partname}
+% Text entity \cmd\partname\ is used in \cmd\@part.
+% \begin{macrocode}
+\def\partname{Part}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tocname}
+% Text entity \cmd\tocname\ is used in \cmd\tableofcontents,
+% as defined in the standard \LaTeX\ book class.
+% \begin{macrocode}
+\def\tocname{Contents}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\lofname}
+% Text entity \cmd\lofname\ is used in \cmd\listoffigures,
+% as defined in the standard \LaTeX\ book class.
+% \begin{macrocode}
+\def\lofname{List of Figures}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\lotname}
+% Text entity \cmd\lotname\ is used in \cmd\listoftables,
+% as defined in the standard \LaTeX\ book class.
+% \begin{macrocode}
+\def\lotname{List of Tables}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\refname}
+% Text entity \cmd\refname\ is used in \env{thebibliography}.
+% \begin{macrocode}
+\def\refname{References}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\indexname}
+% Text entity \cmd\indexname\ is used in \env{theindex},
+% as defined in the standard \LaTeX\ book class.
+% \begin{macrocode}
+\def\indexname{Index}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\figurename}
+% \changes{4.0b}{1999/06/20}{Added localization of \cs{figuresname}}
+% Text entity \cmd\figurename\ is used in \env{figure},
+% \cmd\figuresname\ in \cmd\printfigures.
+% \begin{macrocode}
+\def\figurename{FIG.}
+\def\figuresname{Figures}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tablename}
+% \changes{4.0b}{1999/06/20}{Added localization of \cs{tablesname}}
+% Text entity \cmd\tablename\ is used in \env{table},
+% \cmd\tablesname\ in \cmd\printtables.
+% \begin{macrocode}
+\def\tablename{TABLE}
+\def\tablesname{Tables}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\abstractname}
+% Text entity \cmd\abstractname\ is used in \env{abstract}.
+% \begin{macrocode}
+\def\abstractname{Abstract}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\appendixesname}
+% \begin{macro}{\appendixname}
+% Text entity \cmd\appendixesname\ is used in TOC.
+% \begin{macrocode}
+\def\appendixesname{Appendixes}%
+\def\appendixname{Appendix}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\acknowledgmentsname}
+% Text entity \cmd\acknowledgmentsname\ is used in \env{acknowledgments}.
+% \begin{macrocode}
+\def\acknowledgmentsname{Acknowledgments}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\journalname}
+% This should be set by the society journal options, eg `pra'.
+% \begin{macrocode}
+\def\journalname{??}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\copyrightname}
+% Default layout does not assign copyright, but a journal that wants
+% to might use this.
+% \begin{macrocode}
+\def\copyrightname{??}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\andname}
+% The text string ``and'' for use in author lists.
+% \begin{macrocode}
+\def\andname{and}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@pacs@name}
+% \begin{macro}{\@keys@name}
+% The text string prepended to PACS numbers, resp. to keywords.
+% \begin{macrocode}
+\def\@pacs@name{PACS numbers: }%
+\def\@keys@name{Keywords: }%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ppname}
+% The text string ``pp'' for use in page ranges.
+% \begin{macrocode}
+\def\ppname{pp}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\numbername}
+% The text string ``number'' for use in article reference.
+% \begin{macrocode}
+\def\numbername{number}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\volumename}
+% The text string ``volume'' for use in article reference.
+% \begin{macrocode}
+\def\volumename{volume}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Dated@name}
+% \begin{macro}{\Received@name}
+% \begin{macro}{\Revised@name}
+% \begin{macro}{\Accepted@name}
+% \begin{macro}{\Published@name}
+% These texts are used in the \cmd\date, et al. commands.
+% \begin{macrocode}
+\def\Dated@name{Dated: }%
+\def\Received@name{Received }%
+\def\Revised@name{Revised }%
+\def\Accepted@name{Accepted }%
+\def\Published@name{Published }%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \section{Legacy Commands}
+% We define some commands left over from version 3.1, or give default meanings.
+% Some definitions can be overridden
+% in the document preamble or in included packages.
+%
+% Note on the namespace: command names like \cmd\REV@\emph{name} are used here,
+% because it is not clear that any of this code is generally useful.
+% \begin{macrocode}
+\def\address{\replace@command\address\affiliation}%
+\def\altaddress{\replace@command\altaddress\altaffiliation}%
+\newenvironment{references}{%
+ \class@warn@end{The references environment is not supported; use thebibliography instead.}
+ \gdef\references{\thebibliography{}}\references
+}{%
+ \endthebibliography
+}%
+\def\draft{%
+ \class@warn@end{Command \string\draft\space is obsolete;^^JInvoke option draft instead.}%
+ \@booleantrue\draft@sw
+}%
+\def\tighten{%
+ \class@warn@end{Command \string\tighten\space is obsolete;^^JInvoke option tightenlines instead.}%
+ \@booleantrue\tightenlines@sw
+}%
+\def\tableline{%
+ \noalign{%
+ \class@warn@end{Command \string\tableline\space is obsolete;^^JUse \string\colrule\space instead.}%
+ \global\let\tableline\colrule
+ }%
+ \tableline
+}%
+\def\case{\replace@command\case\frac}%
+\def\slantfrac{\replace@command\slantfrac\frac}%
+\def\tablenote{\replace@command\tablenote\footnote}%
+\def\tablenotemark{\replace@command\tablenotemark\footnotemark}%
+\def\tablenotetext{\replace@command\tablenotetext\footnotetext}%
+% Lose the following definition:
+\DeclareRobustCommand\REV@text[1]{%
+ \relax
+ \ifmmode
+ \mathchoice
+ {\hbox{{\everymath{\displaystyle }#1}}}%
+ {\hbox{{\everymath{\textstyle }#1}}}%
+ {\hbox{{\everymath{\scriptstyle }\let\f@size\sf@size\selectfont#1}}}%
+ {\hbox{{\everymath{\scriptscriptstyle}\let\f@size\ssf@size\selectfont#1}}}%
+ \glb@settings
+ \else
+ \mbox{#1}%
+ \fi
+}%
+% Lose the following definition:
+\DeclareRobustCommand\REV@bbox[1]{%
+ \relax
+ \ifmmode
+ \mathchoice
+ {\hbox{{\everymath{\displaystyle }\boldmath$#1$}}}%
+ {\hbox{{\everymath{\textstyle }\boldmath$#1$}}}%
+ {\hbox{{\everymath{\scriptstyle }\boldmath$#1$}}}%
+ {\hbox{{\everymath{\scriptscriptstyle}\boldmath$#1$}}}%
+ \glb@settings
+ \else
+ \mbox{#1}%
+ \fi
+}%
+\DeclareRobustCommand\REV@bm[1]{%
+ \class@warn@end{To use \string\bm, please load the bm package!}%
+ \global\let\bm\relax
+}%
+\def\FL{\obsolete@command\FL}%
+\def\FR{\obsolete@command\FR}%
+\def\narrowtext{\obsolete@command\narrowtext}%
+\def\mediumtext{\obsolete@command\mediumtext}%
+\newenvironment{quasitable}{%
+ \let@environment{tabular}{longtable}%
+}{%
+}%
+% \end{macrocode}
+%
+% \begin{macro}{\text}
+% \begin{macro}{\bm}
+% \begin{macro}{\bibinfo}
+% \begin{macro}{\eprint}
+% \begin{macro}{\url}
+%
+% If not otherwise defined, give default meanings to certain commands.
+% \changes{4.0d}{2000/04/10}{eprint takes an optional argument, syntactical only in this case.}
+%FIXME: \cmd\bibinfo?
+% \begin{macrocode}
+\let\text\REV@text
+\let\bm\REV@bm
+\appdef\setup@hook{%
+ \providecommand\bibinfo[2]{#2}%
+ \providecommand\eprint[2][]{#2}%
+%\providecommand\url[1]{#1}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\bbox}
+%
+% \begin{macrocode}
+\def\bbox#1{%
+ \class@warn@end{\string\bbox\space is obsolete,^^Jload the bm package and use \string\bm\space instead.}%
+ \global\let\bbox\relax
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\mathletters}
+%
+% \begin{macrocode}
+\newenvironment{mathletters}{%
+ \class@warn@end{Environment {mathletters} is obsolete;^^Jload the amsmath package and use {subequations}!}%
+ \global\let\mathletters\@empty
+}{%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\eqnum}
+%
+% \begin{macrocode}
+\def\eqnum#1{%
+ \class@warn@end{\string\eqnum\space is obsolete, load the amsmath package and use \string\tag!}%
+ \global\let\eqnum\@gobble
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% We read in the symbol definitions.
+% \begin{macrocode}
+\appdef\rtx@require@packages{%
+ \RequirePackage{revsymb4-1}%
+}%
+\appdef\class@documenthook{\revsymb@inithook}%
+% \end{macrocode}
+%
+% \section{Patches for lineno.sty}
+%
+% The \classname{lineno} package detects the case where the package has been loaded
+% and the document invokes \cmd\linelabel, but the \cmd\linenumbers\ command has not been
+% issued: it treats this case as an error.
+%
+% It is wrong for validity of document syntax to be dependent upon package semantics:
+% we make the condition a warning rather than an error.
+%
+% \begin{macrocode}
+\def\@LN@LLerror@org{%
+ \PackageError{lineno}{%
+ \string\linelabel\space without \string\linenumbers
+ }{%
+ Just see documentation. (New feature v4.11)%
+ }%
+ \@gobble
+}%
+\def\@LN@LLerror@ltx{%
+ \PackageWarning{lineno}{%
+ To make the \string\linelabel\space command work, you must issue the \string\linenumbers\ command
+ }%
+ \@gobble
+}%
+% \end{macrocode}
+%
+% If appropriate, enable line numbering within the abstract.
+%
+% This mechanism applies generally:
+% Create the box in a context in which the meaning of \cmd\par\ has been patched by \classname{lineno},
+% then \cmd\unvbox\ the box in a context where \cmd\set@linepenalties\ has been executed, and
+% follow up with \cmd\@linenumberpar, which forces a visit to the output routine just there.
+% Note that here, we have to de-fang \cmd\@LN@parpgbrk, which would otherwise causes the appearance
+% of a box with depth -1000 points. Go figure.
+% \begin{macrocode}
+\appdef\class@documenthook{%
+ \@ifx{\@LN@LLerror\@LN@LLerror@org}{%
+ \class@info{Overriding \string\@LN@LLerror}%
+ \let\@LN@LLerror\@LN@LLerror@ltx
+ }{}%
+ \@ifpackageloaded{lineno}{%
+ \@ifxundefined{\set@linepenalties}{}{%
+ \def\prep@absbox{\set@linepenalties}%
+ \def\post@absbox{\let\@LN@parpgbrk\@empty\@linenumberpar}%
+ }%
+ }{}%
+}%
+% \end{macrocode}
+%
+% One may well ask: how to obtain line numbering within an alignment in a float?
+% This objective, along with line numbering within footnotes, would require extraordinary measures.
+% The float would have to be thrown onto the MVL in order to acquire its line numbers, but
+% that fragment of MVL would then have to be protected from being shipped out.
+% The question of how to coordinate those lines' numbers with those of lines in the MVL would
+% also require dealing with.
+%
+% \section{Endgame for the Document Class}
+%
+% We provide for a ``job macro package'' that can override
+% definitions and assignments made by the class or any other packages it loads.
+%
+% \subsection{Job Macro Package}
+% You can create a ``job macro package'' for your document
+% that will be read in automatically every time
+% your document is processed.
+% Thus, if your job is a file called \file{myarticle.tex},
+% then the file \file{myarticle.rty} will be read in
+% just the same as if you had placed a
+% \cmd\usepackage|{myarticle.rty}| statement
+% immediately following your \cmd\documentclass\ statement.
+%
+% Within your \file{.rty} file,
+% you can define and use control sequence names that use the |@| character
+% and you can override any of the definitions or assignments made
+% by the \revtex\ document class or the selected journal substyle.
+% That is, you have the power to really mess things up badly.
+%
+% If you choose to have a job macro package, you are well
+% advised to read the \LaTeX\ guide to document classes,
+% \file{clsguide.tex} or read up on the subject
+% in a book like the \LaTeX\ Companion.
+%
+% The file \file{template.rty} contains a template for
+% creating your own job macro package.
+%
+% \begin{macrocode}
+\appdef\rtx@require@packages{%
+ \InputIfFileExists{\jobname.rty}{}{}%
+}%
+% \end{macrocode}
+%
+% \subsection{Endgame Processing for the Document Class}
+%
+% The remaining steps in processing the document class involve
+% determining the needed society, journal, and pointsize from
+% the document's class options and inputting the needed files or
+% executing the indicated procedures.
+%
+% Note that the society file is expected to declare options that will
+% allow us to determine the journal involved, and the society and journal
+% themselves determine the which pointsize options are declared, along with
+% their meanings.
+%
+% Note also that required packages are read in only after the document options
+% have been processed, because the latter can affect the former.
+%
+% Finally, the setup code is executed: this is code that depends on the
+% meanings of the switches we define and on the code within the packages we load.
+%
+% Note that there are other hooks in use: \cmd\document@inithook, which is
+% executed right at the beginning of the document, and \cmd\class@documenthook,
+% which serves as a vehicle for any \cmd\AtBeginDocument\ code we might wish to
+% execute.
+%
+%FIXME: use \cmd\class@documenthook\ only for things that bear on the MVL;
+% use \cmd\document@inithook\ for all patches to procedures defined within the preamble.
+%
+% Remember that \classname{natbib} changes its state at \cmd\AtBeginDocument\ time,
+% so we have to install our own code at a later point in the processing.
+%
+% We determine the proper \cmd\@society\ by examining the document's class options.
+% \begin{macrocode}
+\@parse@class@options@society
+% \end{macrocode}
+%
+% Then, we input the society's substyle
+% (which may in turn lead to loading a journal substyle or a pointsize substyle).
+% The substyle should not assume the value of any class option:
+% instead, it should install code into \cmd\setup@hook.
+% \begin{macrocode}
+\@process@society{aps}%
+% \end{macrocode}
+%
+% Now that the society has defined the class options relating to journals,
+% and has defined \cmd\@journal@default, we can process the journal substyle.
+% We parse the options for one that sets \cmd\@journal.
+% \begin{macrocode}
+\@parse@class@options@\@journal
+% \end{macrocode}
+% And we process the journal.
+% Note that \emph{it is an error} for a society file to fail to define
+% \cmd\@journal@default.
+%
+% \begin{macrocode}
+\expandafter\@process@journal\expandafter{\@journal@default}%
+% \end{macrocode}
+%
+% Now that the society and journal have finished defining any options relating to
+% point size, we process the class options for any that set \cmd\@pointsize.
+% \begin{macrocode}
+\@parse@class@options@\@pointsize
+% \end{macrocode}
+% And we process the pointsize.
+% Note that it is an error for the society and journal to leave \cmd\@pointsize@default\
+% undefined at this point, however, the journal may have overriden the assignment of the society.
+%
+% \begin{macrocode}
+\expandafter\@process@pointsize\expandafter{\@pointsize@default}%
+% \end{macrocode}
+%
+% Next, we process the class options for once and all.
+% Doing so sets values for some of the Booleans that were introduced along with
+% the \cmd\DeclareOption\ statements above.
+%
+%CHANGE: We process the options in the order declared in the document; this
+% gives the document greater control.
+%
+% \begin{macrocode}
+\@options
+% \end{macrocode}
+%
+% Now that the class options have been processed, we can load all the
+% packages that we know need loading.
+% \begin{macrocode}
+\rtx@require@packages
+% \end{macrocode}
+%
+% At this point, the society substyle, the journal substyle, and the
+% pointsize have all been processed, along with the document class options.
+% Some of these have left things for later; we do these now.
+%
+% \begin{macro}{\setup@hook}
+%
+% This portion of the code for this class file
+% \emph{must} appear at the very end:
+% The procedure
+% \cmd\setup@hook\
+% should be executed at the very end of the class file.
+% Any code that relies on the value of any of the \texttt{@sw} switches
+% or will patch the code of one of the required packages
+% should be executed here.
+%
+% \begin{macrocode}
+\setup@hook
+% \end{macrocode}
+% \end{macro}
+%
+%
+% Warn if past maturation date. This code to be enabled only in beta software.
+% \changes{4.1f}{2009/07/11}{(AO, 522) Warn if software is expired}%
+% \changes{4.1h}{2009/10/09}{(AO) Remove expiry code in the release software}%
+% \begin{macrocode}
+%<*ignore>
+ \def\rtx@fin@year{2010}%
+ \def\rtx@fin@month{01}%
+ \def\rtx@fin@day{01}%
+ \def\rtx@fin@warn{%
+ \@ifnum{\rtx@fin@year>\the\year\relax}{\true@sw}{%
+ \@ifnum{\rtx@fin@month>\the\month\relax}{\true@sw}{%
+ \@ifnum{\rtx@fin@day>\the\day\relax}{\true@sw}{%
+ \false@sw
+ }%
+ }%
+ }%
+ {%
+ \class@info{Beta software expires \rtx@fin@year-\rtx@fin@month-\rtx@fin@day; updates available at http://publish.aps.org/revtex4/}%
+ }{%
+ \class@warn{Outdated software expired \rtx@fin@year-\rtx@fin@month-\rtx@fin@day; please retrieve an update at http://publish.aps.org/revtex4/}%
+ }%
+ }%
+%</ignore>
+% \end{macrocode}
+% In shipping (non-beta) software, the following line should be commented out.
+% \changes{4.1f}{2009/07/11}{(AO, 522) Warn if software is expired}%
+% \begin{verbatim}
+%\appdef\class@enddocumenthook{\rtx@fin@warn}%
+% \end{verbatim}
+%
+% End of the class file.
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%
+%
+% \section{Symbols: the \texttt{revsymb} module}
+% We immediately define a utility command: this module's warning.
+% \begin{macrocode}
+%<*revsymb>
+\def\REVSYMB@warn#1{\PackageWarningNoLine{revsymb}{#1}}%
+% \end{macrocode}
+%
+% \begin{macro}{\lambdabar}
+% \begin{macrocode}
+\DeclareRobustCommand\lambdabar{%
+ \bgroup
+ \def\@tempa{%
+ \hbox{%
+ \raise.73\ht\z@
+ \hb@xt@\z@{%
+ \kern.25\wd\z@
+ \vrule \@width.5\wd\z@\@height.1\p@\@depth.1\p@
+ \hss
+ }%
+ \box\z@
+ }%
+ }%
+ \mathchoice
+ {\setbox\z@\hbox{$\displaystyle \lambda$}\@tempa}%
+ {\setbox\z@\hbox{$\textstyle \lambda$}\@tempa}%
+ {\setbox\z@\hbox{$\scriptstyle \lambda$}\@tempa}%
+ {\setbox\z@\hbox{$\scriptscriptstyle\lambda$}\@tempa}%
+ \egroup
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\openone}
+% DPC: Really should use a font that includes this glyph.
+% Unfortunately not in AMS ones, but is in bbold, cmbb.
+% (I think, must check),
+% \changes{4.0a}{1998/01/31}{use font-dependent spacing}
+% FIXME: check for bbold.
+% \begin{macrocode}
+\DeclareRobustCommand\openone{\leavevmode\hbox{\small1\normalsize\kern-.33em1}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\corresponds}
+% \begin{macro}{\overdots}
+% \begin{macro}{\overcirc}
+% J\"org Knappen suggests the replacements:
+% replace \cmd\corresponds\ with \cmd\triangleq, source \classname{amssymb};
+% replace \cmd\overcirc\ with \cmd\mathring, source \classname{latex2e};
+% replace \cmd\overdots\ with \cmd\dddot, source \classname{amsmath}.
+%
+% Any use of any of these commands will result in a warning message at the end
+% of the log file. If the corresponding package is not loaded, a
+% definition will quietly be provided.
+% \begin{macrocode}
+\DeclareRobustCommand\corresponds{\replace@command\corresponds\triangleq}%
+\DeclareRobustCommand\overcirc{\replace@command\overcirc\mathring}%
+\DeclareRobustCommand\overdots{\replace@command\overdots\dddot}%
+\DeclareRobustCommand\REV@triangleq{%
+ {\lower.2ex\hbox{=}}{\kern-.75em^\triangle}%
+}%
+\DeclareRobustCommand\REV@dddot[1]{%
+ \@ontopof{#1}{\cdots}{1.0}\mathord{\box2}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\succsim}
+% \begin{macro}{\precsim}
+% \begin{macro}{\lesssim}
+% \begin{macro}{\gtrsim}
+% \begin{macro}{\alt}
+% \begin{macro}{\agt}
+% These version 3.1 commands are always supplied,
+% but the definitions in \classname{amssymb} are preferred.
+% \begin{macrocode}
+\DeclareRobustCommand\altsuccsim{\succ\kern-.9em_\sim\kern.3em}%
+\DeclareRobustCommand\altprecsim{\prec\kern-1em_\sim\kern.3em}%
+\let\REV@succsim\altsuccsim
+\let\REV@precsim\altprecsim
+\DeclareRobustCommand\REV@lesssim{\mathrel{\mathpalette\vereq{<}}}%
+\DeclareRobustCommand\REV@gtrsim{\mathrel{\mathpalette\vereq{>}}}%
+\DeclareRobustCommand\alt{\lesssim}
+\DeclareRobustCommand\agt{\gtrsim}
+\def\vereq#1#2{%
+ \lower3\p@\vbox{%
+ \baselineskip1.5\p@
+ \lineskip1.5\p@
+ \ialign{$\m@th#1\hfill##\hfil$\crcr#2\crcr\sim\crcr}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\tensor}
+% \begin{macro}{\overstar}
+% \begin{macro}{\loarrow}
+% \begin{macro}{\roarrow}
+% \changes{4.0b}{1999/06/20}{AO: remove duplicates}
+% \begin{macrocode}
+\DeclareRobustCommand\tensor[1]{\@ontopof{#1}{\leftrightarrow}{1.15}\mathord{\box2}}
+\DeclareRobustCommand\overstar[1]{\@ontopof{#1}{\ast}{1.15}\mathord{\box2}}
+\DeclareRobustCommand\loarrow[1]{\@ontopof{#1}{\leftarrow}{1.15}\mathord{\box2}}
+\DeclareRobustCommand\roarrow[1]{\@ontopof{#1}{\rightarrow}{1.15}\mathord{\box2}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@ontopof}
+% \begin{macrocode}
+\def\@ontopof#1#2#3{%
+ {%
+ \mathchoice
+ {\@@ontopof{#1}{#2}{#3}\displaystyle \scriptstyle }%
+ {\@@ontopof{#1}{#2}{#3}\textstyle \scriptstyle }%
+ {\@@ontopof{#1}{#2}{#3}\scriptstyle \scriptscriptstyle}%
+ {\@@ontopof{#1}{#2}{#3}\scriptscriptstyle\scriptscriptstyle}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@ontopof}
+% Same as \revtex3, more or less.
+% \begin{macrocode}
+\def\@@ontopof#1#2#3#4#5{%
+ \setbox\z@\hbox{$#4#1$}%
+ \setbox\f@ur\hbox{$#5#2$}%
+ \setbox\tw@\null\ht\tw@\ht\z@ \dp\tw@\dp\z@
+ \@ifdim{\wd\z@>\wd\f@ur}{%
+ \setbox\f@ur\hb@xt@\wd\z@{\hss\box\f@ur\hss}%
+ \mathord{\rlap{\raise#3\ht\z@\box\f@ur}\box\z@}%
+ }{%
+ \setbox\f@ur\hb@xt@.9\wd\f@ur{\hss\box\f@ur\hss}%
+ \setbox\z@\hb@xt@\wd\f@ur{\hss$#4\relax#1$\hss}%
+ \mathord{\rlap{\copy\z@}\raise#3\ht\z@\box\f@ur}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frak}
+% Deal with legacy \cmd\frak:
+% if \classname{amsfonts} not loaded, defined in such a way as to ask for that package.
+% Also, says to use \cmd\mathfrak\ instead.
+% \begin{macrocode}
+\DeclareRobustCommand\frak{%
+ \REVSYMB@warn{%
+ Command \string\frak\space unsupported:^^J%
+ please use \string\mathfrak\space instead.%
+ }%
+ \global\let\frak\mathfrak
+ \frak
+}%
+\DeclareRobustCommand\REV@mathfrak{%
+ \REVSYMB@warn{%
+ Command \string\mathfrak\space undefined:^^J%
+ please specify the amsfonts or amssymb option!%
+ }%
+ \global\let\mathfrak\@firstofone
+ \mathfrak
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Bbb}
+% Deal with legacy \cmd\Bbb:
+% if \classname{amsfonts} not loaded, defined in such a way as to ask for that package.
+% Also, says to use \cmd\mathbb\ instead.
+% \begin{macrocode}
+\DeclareRobustCommand\Bbb{%
+ \REVSYMB@warn{%
+ Command \string\Bbb\space unsupported:^^J%
+ please use \string\mathbb\space instead.%
+ }%
+ \global\let\Bbb\mathbb
+ \Bbb
+}%
+\DeclareRobustCommand\REV@mathfrak{%
+ \REVSYMB@warn{%
+ Command \string\mathbb\space undefined:^^J%
+ please specify the amsfonts or amssymb option!%
+ }%
+ \global\let\mathbb\@firstofone
+ \mathbb
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Bigglb}
+% Deal with legacy bold delimiters.
+% Each of the following takes an implicit argument consisting of
+% the delimiter to be made big and bold.
+% FIXME: \cmd\DeclareBoldMathCommand\ is not the right tool!
+% \begin{macrocode}
+\def\Bigglb{\REV@boldopen \Bigg}%
+\def\Biglb {\REV@boldopen \Big }%
+\def\bigglb{\REV@boldopen \bigg}%
+\def\biglb {\REV@boldopen \big }%
+\def\Biggrb{\REV@boldclose\Bigg}%
+\def\Bigrb {\REV@boldclose\Big }%
+\def\biggrb{\REV@boldclose\bigg}%
+\def\bigrb {\REV@boldclose\big }%
+\def\REV@pmb#1{%
+ \hbox{%
+ \setbox\z@=\hbox{#1}%
+ \kern-.02em\copy\z@\kern-\wd\z@
+ \kern .04em\copy\z@\kern-\wd\z@
+ \kern-.02em
+ \raise.04em\copy\z@
+ }%
+}%
+\def\REV@boldopen #1#2{\mathopen {\REV@pmb{$#1#2$}}}%
+\def\REV@boldclose#1#2{\mathclose{\REV@pmb{$#1#2$}}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\revsymb@inithook}
+% \changes{4.1b}{2008/07/01}{(AO) make settings at class time instead of deferring them to later.}
+% Package dependencies are taken care of at \cmd\setup@hook\ time.
+% \begin{macrocode}
+\def\revsymb@inithook{%
+ \@ifxundefined\dddot{\let\dddot\REV@dddot}{}%
+ \@ifxundefined\triangleq{\let\triangleq\REV@triangleq}{}%
+ \@ifxundefined\succsim{\let\succsim\altsuccsim}{}%
+ \@ifxundefined\precsim{\let\precsim\altprecsim}{}%
+ \@ifxundefined\lesssim{\let\lesssim\REV@lesssim}{}%
+ \@ifxundefined\gtrsim {\let\gtrsim \REV@gtrsim }{}%
+ \@ifxundefined\mathfrak{\let\mathfrak\REV@mathfrak}{}%
+ \@ifxundefined\mathbb{\let\mathbb\REV@mathbb}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%</revsymb>
+% \end{macrocode}
+%
+% \section{The \classoption{10pt} class option: the \texttt{10pt} module}
+% \changes{4.0b}{1999/06/20}{AO: all code for \protect\classoption{10pt} is in this module.}
+% The file \file{aps10pt.rtx} is read in by the \classname{revtex4} document class
+% if \cmd\@pointsize\ has the value 10.
+%
+% \begin{macrocode}
+%<*10pt>
+% \end{macrocode}
+%
+% \subsection{Defend Against Forseeable Errors}%
+% Protect this file from being read in by anything but \revtex.
+% \begin{macrocode}
+\ifx\undefined\substyle@ext
+ \def\@tempa{%
+ \endinput
+ \GenericWarning{I must be read in by REVTeX! (Bailing out)}%
+ }%
+ \expandafter\else
+ \def\@tempa{}%
+ \expandafter\fi\@tempa
+ \class@info{RevTeX pointsize 10pt selected}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\normalsize{%
+ \@setfontsize\normalsize\@xpt{11.5}%
+ \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \abovedisplayskip
+ \belowdisplayshortskip \abovedisplayskip
+ \let\@listi\@listI
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\small{%
+ \@setfontsize\small\@ixpt{10.5}%
+ \abovedisplayskip 8.5\p@ \@plus3\p@ \@minus4\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ \@plus2\p@
+ \belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@
+ \def\@listi{%
+ \leftmargin\leftmargini
+ \topsep 4\p@ \@plus2\p@ \@minus2\p@
+ \parsep 2\p@ \@plus\p@ \@minus\p@
+ \itemsep \parsep
+ }%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\footnotesize{%
+ \@setfontsize\footnotesize\@viiipt{9.5pt}%
+ \abovedisplayskip 6\p@ \@plus2\p@ \@minus4\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ \@plus\p@
+ \belowdisplayshortskip 3\p@ \@plus\p@ \@minus2\p@
+ \def\@listi{%
+ \leftmargin\leftmargini
+ \topsep 3\p@ \@plus\p@ \@minus\p@
+ \parsep 2\p@ \@plus\p@ \@minus\p@
+ \itemsep \parsep
+ }%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\scriptsize{%
+ \@setfontsize\scriptsize\@viipt\@viiipt
+}%
+\def\tiny{%
+ \@setfontsize\tiny\@vpt\@vipt
+}%
+\def\large{%
+ \@setfontsize\large\@xiipt{14pt}%
+}%
+\def\Large{%
+ \@setfontsize\Large\@xivpt{18pt}%
+}%
+\def\LARGE{%
+ \@setfontsize\LARGE\@xviipt{22pt}%
+}%
+\def\huge{%
+ \@setfontsize\huge\@xxpt{25pt}%
+}%
+\def\Huge{%
+ \@setfontsize\Huge\@xxvpt{30pt}%
+}%
+% \end{macrocode}
+%
+% The values of these margin parameters are dependent upon
+% \cmd\twoside@sw; any society or journal that
+% has its own preferences should override these assignments
+% by doing \cmd\appdef\cmd\setup@hook.
+% \begin{macrocode}
+\appdef\setup@hook{%
+ \twoside@sw{%
+% \oddsidemargin -.1in
+% \evensidemargin -.4in
+ \oddsidemargin -20pt
+ \evensidemargin -20pt
+ \marginparwidth 107pt
+ }{%
+ \oddsidemargin -.25in
+ \evensidemargin -.25in
+ \marginparwidth 30pt
+ }%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\marginparsep 6pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\topmargin -61pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\headheight 25pt
+\headsep 16pt
+% \end{macrocode}
+%
+% \changes{4.1n}{2010/01/02}{(AO, 571) class file must set \cs{splittopskip}; fine tune \cs{skip}\cs{footins}; \cs{footnoterule} defined in terms of \cs{skip}\cs{footins}}%
+% \begin{macrocode}
+\topskip 10pt
+\splittopskip\topskip
+% \end{macrocode}
+%
+% \begin{macrocode}
+\footskip 30pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \textheight = 56pc
+% \end{macrocode}
+%
+% \begin{macrocode}
+\textwidth42.5pc
+% \end{macrocode}
+%
+% \begin{macrocode}
+\columnsep 1.5pc
+\columnseprule 0pt
+% \end{macrocode}
+%
+% \changes{4.1n}{2010/01/02}{(AO, 571) class file must set \cs{splittopskip}; fine tune \cs{skip}\cs{footins}; \cs{footnoterule} defined in terms of \cs{skip}\cs{footins}}%
+% \begin{macrocode}
+\footnotesep 1pt
+\skip\footins 39pt plus 4pt minus 12pt
+\def\footnoterule{%
+ \dimen@\skip\footins\divide\dimen@\tw@
+ \kern-\dimen@\hrule width.5in\kern\dimen@
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\floatsep 12pt plus 2pt minus 2pt
+\textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 12pt plus 2pt minus 2pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\dblfloatsep 12pt plus 2pt minus 2pt
+\dbltextfloatsep 20pt plus 2pt minus 4pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@fptop 0pt plus 1fil
+\@fpsep 8pt plus 2fil
+\@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil
+\@dblfpsep 8pt plus 2fil
+\@dblfpbot 0pt plus 1fil
+% \end{macrocode}
+%
+% \begin{macrocode}
+\marginparpush 5pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\parskip 0pt plus 1pt
+\parindent 10pt
+\emergencystretch8\p@
+% \end{macrocode}
+%
+% \begin{macrocode}
+\partopsep 2pt plus 1pt minus 1pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\leftmargini 25pt
+\leftmarginii 22pt
+\leftmarginiii 18.7pt
+\leftmarginiv 17pt
+\leftmarginv 10pt
+\leftmarginvi 10pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@listI{%
+ \leftmargin\leftmargini
+ \parsep 4\p@ plus2\p@ minus\p@
+ \topsep 8\p@ plus2\p@ minus4\p@
+ \itemsep 4\p@ plus2\p@ minus\p@
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\labelsep 4pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@listii{%
+ \leftmargin\leftmarginii
+ \labelwidth\leftmarginii
+ \advance\labelwidth-\labelsep
+ \topsep 4\p@ plus2\p@ minus\p@
+ \parsep 2\p@ plus\p@ minus\p@
+ \itemsep \parsep
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@listiii{%
+ \leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii
+ \advance\labelwidth-\labelsep
+ \topsep 2\p@ plus\p@ minus\p@
+ \parsep \z@
+ \partopsep \p@ plus\z@ minus\p@
+ \itemsep \topsep
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@listiv{%
+ \leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv
+ \advance\labelwidth-\labelsep
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@listv{%
+ \leftmargin\leftmarginv
+ \labelwidth\leftmarginv
+ \advance\labelwidth-\labelsep
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@listvi{%
+ \leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi
+ \advance\labelwidth-\labelsep
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</10pt>
+% \end{macrocode}
+%
+% \section{The \classoption{11pt} class option: the \texttt{11pt} module}
+% \changes{4.0b}{1999/06/20}{AO: all code for \protect\classoption{11pt} is in this module.}
+% The file \file{11pt.rtx} is read in by the \classname{revtex4} document class
+% if \cmd\@pointsize\ has the value 11.
+%
+% \begin{macrocode}
+%<*11pt>
+% \end{macrocode}
+%
+% \subsection{Defend Against Forseeable Errors}%
+% Protect this file from being read in by anything but \revtex.
+% \begin{macrocode}
+\ifx\undefined\substyle@ext
+ \def\@tempa{%
+ \endinput
+ \GenericWarning{I must be read in by REVTeX! (Bailing out)}%
+ }%
+ \expandafter\else
+ \def\@tempa{}%
+ \expandafter\fi\@tempa
+ \class@info{RevTeX pointsize 11pt selected}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\normalsize{%
+ \@setfontsize\normalsize\@xipt{13.6}%
+ \abovedisplayskip 11\p@ \@plus3\p@ \@minus6\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \abovedisplayskip
+ \belowdisplayshortskip \abovedisplayskip
+ \let\@listi\@listI
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\small{%
+ \@setfontsize\small\@xpt\@xiipt
+ \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@
+ \abovedisplayshortskip \z@ \@plus3\p@
+ \belowdisplayshortskip 6\p@ \@plus3\p@ \@minus3\p@
+ \def\@listi{\leftmargin\leftmargini
+ \topsep 6\p@ \@plus2\p@ \@minus2\p@
+ \parsep 3\p@ \@plus2\p@ \@minus\p@
+ \itemsep \parsep
+ }%
+ \belowdisplayskip \abovedisplayskip
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\footnotesize{%
+ \@setfontsize\footnotesize\@ixpt{11}%
+ \abovedisplayskip 8\p@ \@plus2\p@ \@minus4\p@
+ \abovedisplayshortskip \z@ \@plus\p@
+ \belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@
+ \def\@listi{\leftmargin\leftmargini
+ \topsep 4\p@ \@plus2\p@ \@minus2\p@
+ \parsep 2\p@ \@plus\p@ \@minus\p@
+ \itemsep \parsep
+ }%
+ \belowdisplayskip \abovedisplayskip
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\scriptsize{%
+ \@setfontsize\scriptsize\@viiipt{9.5}%
+}%
+\def\tiny{%
+ \@setfontsize\tiny\@vipt\@viipt
+}%
+\def\large{%
+ \@setfontsize\large\@xiipt{14}%
+}%
+\def\Large{%
+ \@setfontsize\Large\@xivpt{18}%
+}%
+\def\LARGE{%
+ \@setfontsize\LARGE\@xviipt{22}%
+}%
+\def\huge{%
+ \@setfontsize\huge\@xxpt{25pt}%
+}%
+\def\Huge{%
+ \@setfontsize\Huge\@xxvpt{30pt}%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</11pt>
+% \end{macrocode}
+%
+% \section{The \classoption{12pt} class option: the \texttt{12pt} module}
+% \changes{4.0b}{1999/06/20}{AO: all code for \protect\classoption{12pt} is in this module.}
+% The file \file{12pt.rtx} is read in by the \classname{revtex4} document class
+% if \cmd\@pointsize\ has the value 12.
+%
+% \begin{macrocode}
+%<*12pt>
+% \end{macrocode}
+%
+% \subsection{Defend Against Forseeable Errors}%
+% Protect this file from being read in by anything but \revtex.
+% \begin{macrocode}
+\ifx\undefined\substyle@ext
+ \def\@tempa{%
+ \endinput
+ \GenericWarning{I must be read in by REVTeX! (Bailing out)}%
+ }%
+ \expandafter\else
+ \def\@tempa{}%
+ \expandafter\fi\@tempa
+ \class@info{RevTeX pointsize 12pt selected}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\normalsize{%
+ \@setfontsize\normalsize\@xiipt{14pt}%
+ \abovedisplayskip 12\p@ \@plus3\p@ \@minus7\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus3\p@
+ \belowdisplayshortskip 6.5\p@ \@plus3.5\p@ \@minus3\p@
+ \let\@listi\@listI
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \def\small{%
+ \@setfontsize\small\@xipt{14.5pt}%
+ \abovedisplayskip 8\p@ \@plus3\p@ \@minus6\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ \@plus3\p@
+ \belowdisplayshortskip 6.5\p@ \@plus3.5\p@ \@minus3\p@
+ \def\@listi{%
+ \leftmargin\leftmargini
+ \topsep 9\p@ \@plus3\p@ \@minus5\p@
+ \parsep 4.5\p@ \@plus2\p@ \@minus\p@
+ \itemsep \parsep
+ }%
+}%
+% \end{macrocode}
+%
+% Same baselineskip as \cmd\small\ ?
+% \begin{macrocode}
+ \def\footnotesize{%
+ \@setfontsize\footnotesize\@xpt{14.5pt}%
+ \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ \@plus3\p@
+ \belowdisplayshortskip 6\p@ \@plus3\p@ \@minus3\p@
+ \def\@listi{%
+ \leftmargin\leftmargini
+ \topsep 6\p@ \@plus2\p@ \@minus2\p@
+ \parsep 3\p@ \@plus2\p@ \@minus\p@
+ \itemsep \parsep
+ }%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\scriptsize{%
+ \@setfontsize\scriptsize\@viiipt{9.5pt}%
+}%
+\def\tiny{%
+ \@setfontsize\tiny\@vipt{7pt}%
+}%
+\def\large{%
+ \@setfontsize\large\@xivpt{18pt}%
+}%
+\def\Large{%
+ \@setfontsize\Large\@xviipt{22pt}%
+}%
+\def\LARGE{%
+ \@setfontsize\LARGE\@xxpt{25pt}%
+}%
+\def\huge{%
+ \@setfontsize\huge\@xxvpt{30pt}%
+}%
+\let\Huge=\huge
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</12pt>
+% \end{macrocode}
+%
+% \section{Page parameters}%
+% This code is common to both \classoption{11pt} and \classoption{12pt}.
+%
+% \begin{macrocode}
+%<*11pt|12pt>
+% \end{macrocode}
+%
+% \begin{macrocode}
+\appdef\setup@hook{%
+ \twoside@sw{%
+ \oddsidemargin 0pt
+ \evensidemargin 0pt
+ \marginparwidth 60pt
+ }{%
+ \oddsidemargin 0pt
+ \evensidemargin 0pt
+ \marginparwidth 44pt
+ }%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\marginparsep 10pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\topmargin -37pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\headheight 12pt
+\headsep 25pt
+% \end{macrocode}
+%
+% \changes{4.1n}{2010/01/02}{(AO, 571) class file must set \cs{splittopskip}; fine tune \cs{skip}\cs{footins}; \cs{footnoterule} defined in terms of \cs{skip}\cs{footins}}%
+% \begin{macrocode}
+\topskip 10pt
+\splittopskip\topskip
+% \end{macrocode}
+%
+% \begin{macrocode}
+\footskip 30pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\textheight=665.5\p@
+% \end{macrocode}
+%
+% \begin{macrocode}
+\appdef\setup@hook{%
+ \tightenlines@sw{%
+ \def\baselinestretch{1}%
+ }{%
+ \def\baselinestretch{1.5}%
+ }%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\textwidth 468pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\columnsep 10pt
+\columnseprule 0pt
+% \end{macrocode}
+%
+% \changes{4.1n}{2010/01/02}{(AO, 571) class file must set \cs{splittopskip}; fine tune \cs{skip}\cs{footins}; \cs{footnoterule} defined in terms of \cs{skip}\cs{footins}}%
+% \begin{macrocode}
+\footnotesep 1pt
+\skip\footins 25.25pt plus 4pt minus 12pt
+\def\footnoterule{%
+ \dimen@\skip\footins\divide\dimen@\f@ur
+ \kern-\dimen@\hrule width.5in\kern\dimen@
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\floatsep 14pt plus 2pt minus 4pt
+\textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 14pt plus 4pt minus 4pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\dblfloatsep 14pt plus 2pt minus 4pt
+\dbltextfloatsep 20pt plus 2pt minus 4pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@fptop 0pt plus 1fil
+\@fpsep 10pt plus 2fil
+\@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil
+\@dblfpsep 10pt plus 2fil%
+\@dblfpbot 0pt plus 1fil
+% \end{macrocode}
+%
+% \begin{macrocode}
+\marginparpush 7pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\parskip 0pt plus 1pt
+\parindent 15pt
+\emergencystretch8\p@
+\partopsep 3pt plus 2pt minus 2pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\leftmargini 30pt
+\leftmarginii 26pt
+\leftmarginiii 22pt
+\leftmarginiv 20pt
+\leftmarginv 12pt
+\leftmarginvi 12pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@listI{\leftmargin\leftmargini \parsep 5\p@ plus2.5\p@ minus\p@
+ \topsep 10\p@ plus4\p@ minus6\p@
+ \itemsep 5\p@ plus2.5\p@ minus\p@
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\labelsep 6pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 5\p@ plus2.5\p@ minus\p@
+ \parsep 2.5\p@ plus\p@ minus\p@
+ \itemsep \parsep
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2.5\p@ plus\p@ minus\p@
+ \parsep \z@ \partopsep \p@ plus\z@ minus\p@
+ \itemsep \topsep
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</11pt|12pt>
+% \end{macrocode}
+%
+% \section{The \classoption{aps} class extension: the \texttt{aps} module}
+% \changes{4.0b}{1999/06/20}{AO: made aps.rtx part of revtex4.dtx}
+% The file \file{aps.rtx} is read in by the \classname{revtex4} document class
+% if \cmd\@society\ has the value \classoption{aps}.
+%
+% Here, code specific to APS journals is separated out from the \revtex\ document class.
+% (Other societies can customize \revtex\ by supplying their own \file{.rtx} file.)
+%
+% This class extension file is a model for a class extension you might write yourself.
+%
+% First, incorporate a \cmd\ProvidesFile\ command with an optional argument giving
+% the version information, e.g.,
+% \begin{verbatim}
+% \ProvidesFile{foo}[2001/09/11 v1.1 Docinfo]%
+% \end{verbatim}
+%
+% Within the society substyle, there are two things we must do as well:
+% define the default journal,
+% \begin{verbatim}
+% \def\@journal@default{pra}%
+% \end{verbatim}
+% And do likewise for the point size:
+% \begin{verbatim}
+% \def\@pointsize@default{10}%
+% \end{verbatim}
+%
+% We first define some text entities (amounting to journal abbreviations),
+% then some APS-specific initialisations,
+% then code for particular APS journals.
+% In the latter case, the choice is
+% keyed off the macro \cmd\@journal.
+%
+% \begin{macrocode}
+%<*aps>
+% \end{macrocode}
+%
+% \subsection{Defend Against Forseeable Errors}%
+% Protect this file from being read in by anything but \revtex.
+% \begin{macrocode}
+\ifx\undefined\substyle@ext
+ \def\@tempa{%
+ \endinput
+ \GenericWarning{I must be read in by REVTeX! (Bailing out)}%
+ }%
+ \expandafter\else
+ \def\@tempa{}%
+ \expandafter\fi\@tempa
+ \class@info{RevTeX society APS selected}%
+% \end{macrocode}
+%
+% Here are the class options relating to the APS:
+% \begin{macrocode}
+\DeclareOption{pra}{\change@journal{pra}}%
+\DeclareOption{prb}{\change@journal{prb}}%
+\DeclareOption{prc}{\change@journal{prc}}%
+\DeclareOption{prd}{\change@journal{prd}}%
+\DeclareOption{pre}{\change@journal{pre}}%
+\DeclareOption{prl}{\change@journal{prl}}%
+\DeclareOption{prstab}{\change@journal{prstab}}%
+\DeclareOption{prstper}{\change@journal{prstper}}%
+\DeclareOption{rmp}{\change@journal{rmp}}%
+% \end{macrocode}
+%
+% \subsection{Abbreviations}%
+% \changes{4.1p}{2010/02/24}{(AO, 584) Per MD, remove trailing space character from each journal abbreviation: it had caused an extraneous space in the .bbl}
+% The following macros constitute typing shortcuts for
+% certain journal names.
+% \begin{macrocode}
+\def\ao{Appl.\ Opt.}%
+\def\ap{Appl.\ Phys.}%
+\def\apl{Appl.\ Phys.\ Lett.}%
+\def\apj{Astrophys.\ J.}%
+\def\bell{Bell Syst.\ Tech.\ J.}%
+\def\jqe{IEEE J.\ Quantum Electron.}%
+\def\assp{IEEE Trans.\ Acoust.\ Speech Signal Process.}%
+\def\aprop{IEEE Trans.\ Antennas Propag.}%
+\def\mtt{IEEE Trans.\ Microwave Theory Tech.}%
+\def\iovs{Invest.\ Ophthalmol.\ Vis.\ Sci.}%
+\def\jcp{J.\ Chem.\ Phys.}%
+\def\jmo{J.\ Mod.\ Opt.}%
+\def\josa{J.\ Opt.\ Soc.\ Am.}%
+\def\josaa{J.\ Opt.\ Soc.\ Am.\ A}%
+\def\josab{J.\ Opt.\ Soc.\ Am.\ B}%
+\def\jpp{J.\ Phys.\ (Paris)}%
+\def\nat{Nature (London)}%
+\def\oc{Opt.\ Commun.}%
+\def\ol{Opt.\ Lett.}%
+\def\pl{Phys.\ Lett.}%
+\def\pra{Phys.\ Rev.\ A}%
+\def\prb{Phys.\ Rev.\ B}%
+\def\prc{Phys.\ Rev.\ C}%
+\def\prd{Phys.\ Rev.\ D}%
+\def\pre{Phys.\ Rev.\ E}%
+\def\prl{Phys.\ Rev.\ Lett.}%
+\def\rmp{Rev.\ Mod.\ Phys.}%
+\def\pspie{Proc.\ Soc.\ Photo-Opt.\ Instrum.\ Eng.}%
+\def\sjqe{Sov.\ J.\ Quantum Electron.}%
+\def\vr{Vision Res.}%
+% \end{macrocode}
+%
+% \subsection{APS Setup}%
+% Here we define the default procedures for APS journals.
+% Individual APS journals may override these definitions.
+%
+% \subsubsection{Title block}%
+%
+% The specifics of the title block.
+% Apply to all APS journals; individual journals may override these settings.
+%
+% \begin{macro}{\@fnsymbol}
+% The \LaTeX\ kernel definition of \cmd\@fnsymbol\ is overridden.
+% The definition in \filename{fixltx2e.sty} serves as a guide to the new way to symbol,
+% working in both text- and math modes.
+%
+% \filename{fixltx2e.sty} duplicates some features of \filename{ltxgrid} and \filename{ltxutil},
+% however, so it may be incompatible with \revtex.
+% In case it is not loaded, we must provide a meaning for \cmd\TextOrMath,
+% which that package makes robust.
+% I believe that it is \cmd\@fnsymbol\ itself that ought to be robustified.
+% e\TeX\ further complicates matters; we do not especially accomodate it.
+%
+% \changes{4.1d}{2009/03/27}{Definition of \cs{ @fnsymbol} follows fixltx2e.sty}
+%
+% Not! \cmd\TextOrMath\ must be made robust in any case (Bug 530). I return things to follow
+% core \LaTeXe\ (\filename{latex.ltx}).
+% \changes{4.1f}{2009/10/05}{(AO, 530) \cs{@fnsymbol}: Failed to import fixltx2e.sty technology. Return to LaTeX core.}
+% \begin{macrocode}
+\def\@fnsymbol#1{%
+ \ensuremath{%
+ \ifcase#1\or
+ *\or
+ \dagger\or
+ \ddagger\or
+ \mathsection\or
+ \mathparagraph\or
+% \|\or
+ **\or
+ \dagger\dagger\or
+ \ddagger\ddagger\else
+ \mathsection\mathsection\or
+ \mathparagraph\mathparagraph\or
+ ***\or
+ \dagger\dagger\dagger\or
+ \ddagger\ddagger\ddagger\else
+ \mathsection\mathsection\mathsection\or
+ \mathparagraph\mathparagraph\mathparagraph\or
+%
+ \@ctrerr
+ \fi
+ }%
+}%
+\appdef\document@inithook{%
+ \@ifxundefined\TextOrMath{%
+ \DeclareRobustCommand\TextOrMath{\@ifmmode{\false@sw}{\true@sw}}%
+ }{}%
+}%
+\let\thefootnote@latex\thefootnote
+% \end{macrocode}
+% \end{macro}
+%
+% We assign the default titlepage style for APS; a journal or document instance
+% may override by invoking one of the other \cmd\clo@... procedures defined in \revtex.
+% \begin{macrocode}
+\clo@groupedaddress
+% \end{macrocode}
+%
+% \begin{macro}{\titlepage}
+% \begin{macrocode}
+\renewenvironment{titlepage}{%
+ \let\wastwocol@sw\twocolumn@sw
+ \onecolumngrid
+ \newpage
+ \thispagestyle{titlepage}%
+ \c@page\z@
+% \end{macrocode}
+% A comment: ``article.cls sets this to one not zero?''
+% \begin{macrocode}
+}{%
+ \wastwocol@sw{\twocolumngrid}{\newpage}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@abstractheading}
+% APS Journals all set the abstract head the same way, with no head.
+% However, if the user has specified the \classoption{preprint} class option,
+% then the abstract will have a head.
+% \begin{macrocode}
+\def\frontmatter@abstractheading{%
+ \preprintsty@sw{%
+ \begingroup
+ \centering\large
+ \abstractname
+ \par
+ \endgroup
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@abstractwidth}
+% All APS journals set the abstract to the same width.
+% \begin{macrocode}
+\def\frontmatter@abstractwidth{400\p@}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@abstractfont}
+% All APS journals set the abstract body the same way.
+% \changes{4.0c}{1999/11/13}{(AO, 123) add parskip to the abstract.}
+% \changes{4.1e}{2008/06/29}{(AO, 455) be nice to a list within the abstract}
+% \begin{macrocode}
+\def\frontmatter@abstractfont{%
+ \small
+ \parindent1em\relax
+ \adjust@abstractwidth
+}%
+\def\adjust@abstractwidth{%
+ \dimen@\textwidth\advance\dimen@-\frontmatter@abstractwidth
+ \divide\dimen@\tw@
+ \galley@sw{%
+ \advance\rightskip\tw@\dimen@
+ }{%
+ \advance\leftskip\dimen@
+ \advance\rightskip\dimen@
+ }%
+ \@totalleftmargin\leftskip
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% All APS journal preprints use separate titlepage and full-width abstract.
+%
+% In effect, we establish a society default value for \cmd\preprintsty@sw,
+% and for \cmd\titlepage@sw.
+% \begin{macrocode}
+\@booleanfalse\preprintsty@sw
+\@booleantrue\titlepage@sw
+% \end{macrocode}
+%
+% We choose the page style for all APS journals.
+% The journal may override by inserting its own code in \cmd\setup@hook.
+% Users wishing to customize their documents will be able to invoke a \cmd\pagestyle\
+% command anywhere in the preamble; it will override the assignments here.
+%
+% Here is the big switch for APS preprints. Note that \cmd\preprintsty@sw
+% is also consulted in various procedures, but we assume its value does
+% not change after \cmd\setup@hook\ time.
+% \begin{macrocode}
+\appdef\setup@hook{%
+ \preprintsty@sw{%
+ \ps@preprint
+ \def\frontmatter@abstractwidth{\textwidth}%
+ \def\frontmatter@affiliationfont{\it}%
+ \let\section\section@preprintsty
+% \end{macrocode}
+% The following line of code had been commented out at this point.
+% \begin{verbatim}
+% \let\@hangfrom@section\@hangfrom@section@preprintsty
+% \end{verbatim}
+% \begin{macrocode}
+ \let\subsection\subsection@preprintsty
+ \let\subsubsection\subsubsection@preprintsty
+ }{%
+ \ps@article
+ }%
+}%
+% \end{macrocode}
+%
+% \begin{macro}{\frontmatter@authorformat}
+% All APS journals set the author list the same.
+% The leading is 11.5 points, and
+% there is 11.5 points of extra space above the first author line
+% (which amounts to the same thing as 11.5 points extra below the title)
+% for a total of 23 points base-to-base.
+%
+% \begin{macrocode}
+\def\frontmatter@authorformat{%
+ \skip@\@flushglue
+ \@flushglue\z@ plus.3\hsize\relax
+ \centering
+ \advance\baselineskip\p@
+ \parskip11.5\p@\relax
+ \@flushglue\skip@
+% \end{macrocode}
+% The following line of code had been commented out at this point.
+% \begin{verbatim}
+%\preprintsty@sw{}{%
+% \addvspace{0\p@}%
+%}%
+% \end{verbatim}
+% \begin{macrocode}
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@above@affilgroup}
+% The default amount of space above affiliation.
+% APS Journals have 24 points b-b above an affiliation group.
+% \begin{macrocode}
+\def\frontmatter@above@affilgroup{%
+% \end{macrocode}
+% The following line of code had been commented out at this point.
+% \begin{verbatim}
+%\preprintsty@sw{}{%
+% \addvspace{11\p@}%
+%}%
+% \end{verbatim}
+% \begin{macrocode}
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@above@affiliation}
+% \begin{macro}{\frontmatter@above@affiliation@script}
+% The default amount of space above affiliation.
+% APS Journals have no extra space between author group down to common affiliation.
+% \begin{macrocode}
+\def\frontmatter@above@affiliation@script{%
+ \skip@\@flushglue
+ \@flushglue\z@ plus.3\hsize\relax
+ \centering
+ \@flushglue\skip@
+ \addvspace{3.5\p@}%
+}%
+\def\frontmatter@above@affiliation{%
+ \preprintsty@sw{}{%
+% \end{macrocode}
+% The following line of code had been commented out at this point.
+% \begin{verbatim}
+% \addvspace{12\p@}%
+% \end{verbatim}
+% \begin{macrocode}
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@affiliationfont}
+% All APS journals set the affiliation the same.
+% \begin{macrocode}
+\def\frontmatter@affiliationfont{%
+ \small\it
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@collaboration@above}
+% PRL: 1.5 points extra: 13 points base-to-base above.
+% \begin{macrocode}
+\def\frontmatter@collaboration@above{%
+ \preprintsty@sw{%
+ }{%
+ \parskip1.5\p@\relax
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@setup}
+% All APS journals set the title page using the same font and size.
+% However, justification varies for the title block elements, so
+% we assert none here.
+% \begin{macrocode}
+\def\frontmatter@setup{%
+ \normalfont
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@title@above}
+% \begin{macro}{\frontmatter@title@format}
+% \begin{macro}{\frontmatter@title@below}
+% All APS journals set the article title the same.
+%
+% Note: Spacing from title to author is 23 points base-to-base.
+% \begin{macrocode}
+\def\frontmatter@title@above{\addvspace{6\p@}}%
+\def\frontmatter@title@format{\large\bfseries\centering\parskip\z@skip}%
+\def\frontmatter@title@below{}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@makefnmark}
+% All APS journals share this procedure for setting the titlepage footnote text.
+% \begin{macrocode}
+\def\@author@parskip{3\p@}%
+\def\frontmatter@makefnmark{%
+ \@textsuperscript{%
+ \normalfont\@thefnmark
+ }%
+}%
+\def\frontmatter@authorbelow{%
+ \addvspace{3\p@}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@RRAP@format}
+% All APS journals use the same format for the ``Received, Revised, etc.'' block on the title page.
+%
+% Change note: 11.5 points b-b from author/affiliation down to date.
+% \begin{macrocode}
+\def\frontmatter@RRAP@format{%
+ \small
+ \centering
+% \end{macrocode}
+% The following line of code had been commented out at this point.
+% \begin{verbatim}
+% \preprintsty@sw{}{\parskip.5ex\relax}%
+% \end{verbatim}
+% \begin{macrocode}
+ \everypar{\hbox\bgroup(\@gobble@leavemode@uppercase}%
+ \def\par{\@ifvmode{}{\unskip)\egroup\@@par}}%
+}%
+\def\punct@RRAP{;\egroup\ \hbox\bgroup}%
+\def\@gobble@leavemode@uppercase#1#2{\expandafter\MakeTextUppercase}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@PACS@format}
+%
+% \begin{macrocode}
+\def\frontmatter@PACS@format{%
+ \addvspace{11\p@}%
+ \footnotesize
+ \adjust@abstractwidth
+ \parindent\z@
+ \parskip\z@skip
+ \samepage
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@keys@format}
+%
+% \begin{macrocode}
+\def\frontmatter@keys@format{%
+ \footnotesize
+ \adjust@abstractwidth
+ \parindent\z@
+ \samepage
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ps@titlepage}
+% \changes{4.0a}{1998/06/10}{multiple preprint commands}
+% \changes{4.0b}{1999/06/20}{Stack \cs{preprint} args flush right at right margin.}
+% Title page style. Currently empty except for preprint header,
+% which consists of all the \cmd\preprint\ arguments,
+% stacked flush right at the right margin.
+% \changes{4.0c}{1999/11/13}{Insert procedure \cs{checkindate}}
+% \begin{macrocode}
+\def\ps@titlepage{%
+ \def\@oddhead{%
+ \hfill
+ \preprint@sw{%
+ \expandafter\produce@preprints\expandafter{\@preprint}%
+ }{}%
+ }%
+ \let\@evenhead\@oddhead
+ \def\@oddfoot{%
+ \hb@xt@\z@{\byrevtex\hss}%
+ \hfil
+ \preprintsty@sw{\thepage}{}%
+ \quad\checkindate
+ \hfil
+ }%
+ \let\@evenfoot\@oddfoot
+}%
+\def\byrevtex{\byrevtex@sw{Typeset by REV\TeX}{}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\produce@preprints}
+% \changes{4.0c}{1999/11/13}{(AO, 115) If three or more preprints specified, set on single line, with commas.}
+% \begin{macrocode}
+\def\produce@preprints#1{%
+ \vtop to \z@{%
+ \def\baselinestretch{1}%
+ \small
+ \let\preprint\preprint@count
+ \count@\z@
+ #1%
+ \@ifnum{\count@>\tw@}{%
+ \hbox{%
+ \let\preprint\preprint@hlist
+ #1%
+ \setbox\z@\lastbox
+ }%
+ }{%
+ \let\preprint\preprint@cr
+ \halign{\hfil##\cr#1\crcr}%
+ \par
+ \vss
+ }%
+ }%
+}%
+\def\preprint@cr#1{#1\cr}%
+\def\preprint@count#1{\advance\count@\@ne}%
+\def\preprint@hlist#1{#1\hbox{, }}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Stacked Heads}%
+% All APS journals put a period (.), followed by quad space, after the section number.
+% Also, no hanging section number.
+% \begin{macrocode}
+\def\@seccntformat#1{\csname the#1\endcsname.\quad}%
+\def\@hang@from#1#2#3{#1#2#3}%
+% \end{macrocode}
+%
+% Note that in the following, we wish to set the section head uppercase, so we use
+% David Carlisle's \cmd\MakeTextUppercase. However, because this procedure effectively
+% parses its argument (looking for things to \emph{not} translate), it has to be invoked
+% in such a way that the argument of the \cmd\section\ command is passed to it as its
+% own argument.
+%
+% To accomplish this, we use the \cmd\@hangfrom@\ hook, which was developed for this
+% purpose.
+%
+% \begin{macrocode}
+\def\section{%
+ \@startsection
+ {section}%
+ {1}%
+ {\z@}%
+ {0.8cm \@plus1ex \@minus .2ex}%
+ {0.5cm}%
+ {%
+ \normalfont\small\bfseries
+ \centering
+ }%
+}%
+\def\@hangfrom@section#1#2#3{\@hangfrom{#1#2}\MakeTextUppercase{#3}}%
+\def\@hangfroms@section#1#2{#1\MakeTextUppercase{#2}}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\subsection{%
+ \@startsection
+ {subsection}%
+ {2}%
+ {\z@}%
+ {.8cm \@plus1ex \@minus .2ex}%
+ {.5cm}%
+ {%
+ \normalfont\small\bfseries
+ \centering
+ }%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\subsubsection{%
+ \@startsection
+ {subsubsection}%
+ {3}%
+ {\z@}%
+ {.8cm \@plus1ex \@minus .2ex}%
+ {.5cm}%
+ {%
+ \normalfont\small\itshape
+ \centering
+ }%
+}%
+% \end{macrocode}
+%
+% \subsubsection{Runin Heads}%
+% \begin{macrocode}
+\def\paragraph{%
+ \@startsection
+ {paragraph}%
+ {4}%
+ {\parindent}%
+ {\z@}%
+ {-1em}%
+ {\normalfont\normalsize\itshape}%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\subparagraph{%
+ \@startsection
+ {subparagraph}%
+ {5}%
+ {\parindent}%
+ {3.25ex \@plus1ex \@minus .2ex}%
+ {-1em}%
+ {\normalfont\normalsize\bfseries}%
+}%
+% \end{macrocode}
+%
+%
+%
+% \begin{macro}{\section@preprintsty}
+% \begin{macro}{\subsection@preprintsty}
+% \begin{macro}{\subsubsection@preprintsty}
+% Here are the formatting procedures specific to the preprint style;
+% the only difference is that the heads are flush left instead of centered.
+%
+% \begin{macrocode}
+\def\section@preprintsty{%
+ \@startsection
+ {section}%
+ {1}%
+ {\z@}%
+ {0.8cm \@plus1ex \@minus .2ex}%
+ {0.5cm}%
+ {%
+ \normalfont\small\bfseries
+% \centering
+ }%
+}%
+%\def\@hangfrom@section@preprintsty#1#2#3{\@hangfrom{#1#2}\MakeTextUppercase{#3}}%
+% \end{macrocode}
+% \begin{macrocode}
+\def\subsection@preprintsty{%
+ \@startsection
+ {subsection}%
+ {2}%
+ {\z@}%
+ {.8cm \@plus1ex \@minus .2ex}%
+ {.5cm}%
+ {%
+ \normalfont\small\bfseries
+% \centering
+ }%
+}%
+% \end{macrocode}
+% \begin{macrocode}
+\def\subsubsection@preprintsty{%
+ \@startsection
+ {subsubsection}%
+ {3}%
+ {\z@}%
+ {.8cm \@plus1ex \@minus .2ex}%
+ {.5cm}%
+ {%
+ \normalfont\small\itshape
+% \centering
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% By default, APS journals set titlepage notes as footnotes.
+% \begin{verbatim}
+\let\frontmatter@footnote@produce\frontmatter@footnote@produce@footnote
+% \end{verbatim}
+%
+% \subsubsection{Table of Contents}%
+% The toc will itself make an entry in the toc,
+% but we temporarily turn off toc formatting for the duration.
+% \changes{4.1a}{2008/01/19}{(AO, 461) Change the csname revtex uses from @dotsep to ltxu@dotsep. The former is understood in mu. (What we wanted was a dimension.)}%
+% \begin{macrocode}
+\def\@pnumwidth{1.55em}%
+\def\@tocrmarg {2.55em}%
+\def\@dotsep{2}%
+\def\ltxu@dotsep{4.5pt}%
+\setcounter{tocdepth}{3}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\tableofcontents{%
+ \addtocontents{toc}{\string\tocdepth@munge}%
+ \print@toc{toc}%
+ \addtocontents{toc}{\string\tocdepth@restore}%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\tocdepth@munge{%
+ \let\l@section@saved\l@section
+ \let\l@section\@gobble@tw@
+}%
+\def\@gobble@tw@#1#2{}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\tocdepth@restore{%
+ \let\l@section\l@section@saved
+}%
+% \end{macrocode}
+%
+% The following definition of \cmd\l@part\ is a variant on
+% the definition of \cmd\l@@sections\ in \file{ltxutil.dtx}.
+% \begin{macrocode}
+\def\l@part#1#2{\addpenalty{\@secpenalty}%
+ \begingroup
+ \set@tocdim@pagenum\@tempboxa{#2}%
+% \@tempdima 3em %
+ \parindent \z@
+ \rightskip\tocleft@pagenum plus 1fil\relax
+ \skip@\parfillskip\parfillskip\z@
+ \addvspace{2.25em plus\p@}%
+ \large \bf %
+ \leavevmode\ignorespaces#1\unskip\nobreak\hskip\skip@
+ \hb@xt@\rightskip{\hfil\unhbox\@tempboxa}\hskip-\rightskip\hskip\z@skip
+ \par
+ \nobreak %
+ \endgroup
+}%
+% \end{macrocode}
+%
+% \begin{macro}{\l@section}
+% Determine which TOC elements are automatically indented.
+%
+% We set the TOC to the standard of RMP.
+% If APS has its own specification, we will code it, and RMP must override.
+% \begin{macrocode}
+\def\tocleft@{\z@}%
+\def\tocdim@min{5\p@}%
+\def\l@section{%
+ \l@@sections{}{section}% Implicit #3#4
+}%
+\def\l@f@section{%
+ \addpenalty{\@secpenalty}%
+ \addvspace{1.0em plus\p@}%
+ %\bf
+}%
+\def\l@subsection{%
+ \l@@sections{section}{subsection}% Implicit #3#4
+}%
+\def\l@subsubsection{%
+ \l@@sections{subsection}{subsubsection}% Implicit #3#4
+}%
+\def\l@paragraph#1#2{}%
+\def\l@subparagraph#1#2{}%
+% \end{macrocode}
+% \end{macro}
+%
+% Activate the auto TOC processing.
+% \begin{macrocode}
+\let\toc@pre\toc@pre@auto
+\let\toc@post\toc@post@auto
+% \end{macrocode}
+%
+% \subsubsection{Default column bottom}%
+% All APS journal styles have flush bottoms.
+%\changes{4.1n}{2009/11/30}{(AO, 566) restore 4.0 behavior: flush column bottoms}
+% \begin{macrocode}
+\@booleanfalse\raggedcolumn@sw
+% \end{macrocode}
+%
+%
+% \subsubsection{Table alignment style}%
+%
+% \begin{macro}{\tableft@skip@float}
+% \begin{macro}{\tabmid@skip@float}
+% \begin{macro}{\tabright@skip@float}
+% \begin{macro}{\array@row@pre@float}
+% \begin{macro}{\array@row@pst@float}
+% All APS publications have the same table specification:
+% Scotch rules above and below, centered in column.
+% \begin{macrocode}
+\def\tableft@skip@float{\z@ plus\hsize}%
+\def\tabmid@skip@float{\@flushglue}%
+\def\tabright@skip@float{\z@ plus\hsize}%
+\def\array@row@pre@float{\hline\hline\noalign{\vskip\doublerulesep}}%
+\def\array@row@pst@float{\noalign{\vskip\doublerulesep}\hline\hline}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{Footnote formatting}%
+% \changes{4.1n}{2010/01/02}{(AO, 572) \cs{@makefntext} and \cs{frontmatter@makefntext} must be defined harmoniously}%
+% We customize the formatting of footnotes for all APS journals.
+% \begin{macro}{\@makefntext}
+% \begin{macrocode}
+\long\def\@makefntext#1{%
+ \def\baselinestretch{1}%
+ \leftskip1em%
+ \parindent1em%
+ \noindent
+ \nobreak\hskip-\leftskip
+ \hb@xt@\leftskip{%
+ \hss\@makefnmark\ %
+ }%
+ #1%
+ \par
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\frontmatter@makefntext}
+% We ensure that frontmatter footnotes format similarly to body footnotes.
+% But we provide our own hypertext anchor, otherwise not provided.
+% \changes{4.1n}{2010/01/02}{(AO, 572) Independent footnote counter for title block. Abstract footnote counter shared with body.}%
+% \begin{macrocode}
+\long\def\frontmatter@makefntext#1{%
+ \def\baselinestretch{1}%
+ \leftskip1em%
+ \parindent1em%
+ \noindent
+ \nobreak\hskip-\leftskip
+ \Hy@raisedlink{\hyper@anchorstart{frontmatter.\expandafter\the\csname c@\@mpfn\endcsname}\hyper@anchorend}%
+ \hb@xt@\leftskip{%
+ \hss\@makefnmark\ %
+ }%
+ #1%
+ \par
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection{Appendix}%
+% \begin{macro}{\appendix}
+% \begin{macro}{\@hangfrom@appendix}
+% \begin{macro}{\@hangfroms@appendix}
+% \begin{macro}{\@appendixcntformat}
+% \changes{4.0c}{1999/11/13}{(AO, 129) section* within appendix was producing appendixname}
+% \begin{macrocode}
+\prepdef\appendix{%
+ \par
+ \let\@hangfrom@section\@hangfrom@appendix
+%\let\@hangfroms@section\@hangfroms@appendix
+ \let\@sectioncntformat\@appendixcntformat
+}%
+\def\@hangfrom@appendix#1#2#3{%
+ #1%
+ \@if@empty{#2}{%
+ #3%
+ }{%
+ #2\@if@empty{#3}{}{:\ #3}%
+ }%
+}%
+\def\@hangfroms@appendix#1#2{%
+ #1#2%
+}%
+\def\@appendixcntformat#1{\appendixname\ \csname the#1\endcsname}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Bibliography}%
+% \changes{4.1n}{2010/01/04}{(AO, 576) In .bst files, remove support for the annote field}%
+%
+% Customize \revtex\ for the journal substyle;
+% this task requires three components:
+% the \BibTeX\ \file{apsrev.bst} and \file{apsrmp.bst} style files, and
+% customizations of the \env{thebibliography} environment.
+%
+% \begin{macro}{\@bibstyle}
+% Define the argument of the \cmd\bibliographystyle\ command
+% (if the document does not do so).
+% The user must have installed a \file{.bst} file of the corresponding name.
+% This file will then be used by \BibTeX\ when compiling the document's \file{.bbl} file.
+%
+% To generate \file{apsrev.bst}, use \classname{custom-bib} version 4.21 or later.
+% Run the \file{.bst} generator, \file{makebst.tex}, and
+% accept all defaults, with the following exceptions:
+%
+% \def\QandA#1#2#3{\item#1: \textbf{#2}: \texttt{#3}---}%
+% \def\CandE#1{\item\relax\texttt{#1}---}%
+% \begin{enumerate}
+% \QandA{LANGUAGE FIELD}{l}{lang}Use language field to switch hyphenation patterns for title
+% \QandA{PRESENTATIONS}{b}{pres,pres-bf}Presentation, speaker bold face
+% \QandA{ORDERING OF REFERENCES}{c}{seq-no}Citation order (unsorted, like unsrt.bst)
+% \QandA{ORDER ON VON PART}{x}{vonx}Sort without von part (de la Maire after Mahone)
+% \QandA{AUTHOR NAMES}{i}{nm-init,ed-au}Initials + surname (J. F. Smith)
+% \QandA{POSITION OF JUNIOR}{*}{jnrlst}Junior comes last as Smith, John, Jr.
+% \QandA{TYPEFACE FOR AUTHORS IN LIST OF REFERENCES}{u}{nmft,nmft-def}User defined author font (\cmd\bibnamefont)
+% \QandA{FONT FOR FIRST NAMES}{u}{fnm-def}First names in user defined font (\cmd\bibfnamefont)
+% \QandA{EDITOR NAMES IN INCOLLECTION ETC}{a}{nmfted}Editors incollection like authors font
+% \QandA{FONT FOR `AND' IN LIST}{r}{nmand-rm}`And' in normal font (JONES and JAMES)
+% \QandA{FONT OF CITATION LABELS IN TEXT}{u}{lab,lab-def}User defined citation font (\cmd\citenamefont)
+% \QandA{FONT FOR `AND' IN CITATIONS}{r}{and-rm}Cited `and' in normal font
+% \QandA{DATE FORMAT}{*}{yr-par}Date in parentheses as (May 1993)
+% \QandA{DATE EMPTY}{-}{date-nil-x}If date is empty, then do not produce the surrounding punctuation (parens, brackets, colon, comma)
+% \QandA{TITLE OF ARTICLE}{d}{tit-qq}Title and punctuation in double quotes (``Title,'' ..)
+% \QandA{INPROCEEDINGS CHAPTER AND PAGES, LIKE INBOOK}{-}{inproceedings-chapter}produce pages after chapter, just as in InBook
+% \QandA{TITLE PRESENT IN ARTICLE, INCOLLECTION, AND INPROCEEDINGS}{x}{jtit-x}Title is ignored
+% \QandA{INPROCEEDINGS CHAPTER AND PAGES, LIKE INBOOK}{y}{inproceedings-chapter}produce pages after chapter, just as in InBook
+% \QandA{ARTICLE BOOKTITLE PRESENT}{}{article-booktitle}format booktitle
+% \QandA{ARTICLE SERIES PRESENT}{}{article-series}article can has series
+% \QandA{JOURNAL NAME FONT}{r}{jttl-rm}Journal name normal font
+% \QandA{JOURNAL NAME WITH ADDRESS}{y}{journal-address}Include address field (in parentheses) along with journal name
+% \QandA{BOOK TITLE FIELDS}{y}{book-bt}Field `booktitle', or if absent field `title', is book title
+% \QandA{THESIS TITLE OPTIONAL}{}{thesis-title-o}Title is optional: no warning issued if empty
+% \QandA{TECHNICAL REPORT TITLE}{b}{trtit-b}Tech. report title like books
+% \QandA{TECHNICAL REPORT INSTITUTION}{}{techreport-institution-par}format tech report institution like book publisher
+% \QandA{JOURNAL VOLUME}{b}{vol-bf}Volume bold as {\bf vol}(num)
+% \QandA{JOURNAL VOL AND NUMBER}{x}{vnum-x}Journal vol, without number as 34
+% \QandA{VOLUME PUNCTUATION}{c}{volp-com}Volume with comma as vol(num), ppp
+% \QandA{PAGE NUMBERS}{f}{jpg-1}Only start page number
+% \QandA{BOOK EDITOR W/O AUTHOR}{}{book-editor-booktitle}Book permits empty author, produces title before editor in this case
+% \QandA{INBOOK PERMITS TITLE, BOOKTITLE, AUTHOR, EDITOR}{a}{inbook-editor-booktitle}Allow using both title/booktitle, both author/editor
+% \QandA{CONFERENCE ADDRESS FOR BOOK, INBOOK, INCOLLECTION, INPROCEEDINGS, PROCEEDINGS}{a}{bookaddress}Italic booktitle followed by bookaddress in roman
+% \QandA{NUMBER AND SERIES FOR BOOK, INBOOK, INCOLLECTION, INPROCEEDINGS, PROCEEDINGS}{*}{num-xser}Allows number without series and suppresses word "number"
+% \QandA{WORD NUMBER CAPITALIZED FOR NUMBER AND SERIES}{c}{number-cap}Capitalize word `number' as: "Number 123"
+% \QandA{WORD CHAPTER CAPITALIZED}{c}{chapter-cap}Capitalize word `chapter' as: `Chapter 42'
+% \QandA{COMBINING NUMBER AND SERIES}{x}{series-number}Series number as: `Springer Lecture Notes No. 125'
+% \QandA{POSITION OF NUMBER AND SERIES}{b}{numser-booktitle}After book title and conference address, and before editors
+% \QandA{VOLUME AND SERIES FOR BOOKS/COLLECTIONS}{s}{ser-vol}Series, vol. 23
+% \QandA{VOLUME AND SERIES FORMATTING}{y}{ser-rm}format series roman , even when used with volume
+% \QandA{WORD VOLUME CAPITALIZED FOR VOLUME AND SERIES}{y}{volume-cap}Capitalize word `volume', as: `Volume 7 in Lecture Series'
+% \QandA{POSITION OF VOLUME AND SERIES FOR INCOLLECTION, INBOOK, AND INPROCEEDINGS}{e}{ser-ed}Series and volume after booktitle and before editors
+% \QandA{JOURNAL NAME PUNCTUATION}{x}{jnm-x}Space after journal name
+% \QandA{PAGES IN BOOK}{*}{pg-bk,book-chapter-pages}As chapter and page: chapter 42, page 345
+% \QandA{PUBLISHER IN PARENTHESES}{d}{pub-date}Publisher with address and date in parentheses (Oxford, 1994)
+% \QandA{EMPTY PUBLISHER PARENTHESES}{y}{ay-empty-pub-parens-x}eliminate parentheses altogether if nothing inside
+% \QandA{PUBLISHER POSITION}{}{pre-pub}Publisher before volume, chapter, pages
+% \QandA{}{}{pre-edn}Edition before publisher
+% \QandA{}{p}{pre-pub,pre-edn}Edition, publisher, volume, chapter, pages
+% \QandA{ISBN NUMBER}{*}{isbn}Include ISBN for books, booklets, etc.
+% \QandA{ISSN NUMBER}{*}{issn}Include ISSN for periodicals
+% \QandA{DOI NUMBER}{a}{doi-link,doi}Doi forms a link to the publication, anchored to the volume or title
+% \QandA{EDITOR IN COLLECTIONS}{b}{edby}In booktitle, edited by .. (where .. is names)
+% \QandA{PUNCTUATION BETWEEN SECTIONS (BLOCKS)}{c}{blk-com}Comma between blocks
+% \QandA{FINAL PUNCTUATION}{c}{fin-endbibitem}Command at end instead of period
+% \QandA{ABBREVIATE WORD `PAGES'}{a}{pp}`Page' abbreviated as p. or pp.
+% \QandA{ABBREVIATE WORD `EDITORS'}{a}{ed}`Editor' abbreviated as ed. or eds.
+% \QandA{OTHER ABBREVIATIONS}{a}{abr}Abbreviations of such words
+% \QandA{ABBREVIATION FOR `EDITION'}{a}{ednx}`Edition' abbreviated as `ed'
+% \QandA{EDITION NUMBERS}{n}{ord}Numerical editions as 1st, 2nd, 3rd, etc
+% \QandA{STORED JOURNAL NAMES}{a}{jabr}Abbreviated journal names
+% \QandA{FONT OF `ET AL'}{i}{etal-it}Italic et al
+% \QandA{ADDITIONAL REVTeX DATA FIELDS}{r}{revdata,eprint,url,url-blk,translation}Include REVTeX data fields collaboration, eid, eprint, archive, url, translation
+% \QandA{SLACcitation FIELD}{}{SLACcitation}Produce SLACcitation field
+% \QandA{NUMPAGES DATA FIELD}{*}{numpages-x}Do not include numpages field
+% \QandA{URL ADDRESS}{*}{url,url-prefix-x}URL without prefix (default: `URL ')
+% \QandA{REFERENCE COMPONENT TAGS}{b}{bibinfo}Reference component tags like \cmd\bibinfo in the content of \cmd\bibitem
+% \QandA{ELEMENT TAGS}{b}{bibfield}Element tags like \cmd\bibfield in the content of \cmd\bibitem
+% \QandA{COMPATIBILITY WITH PLAIN TEX}{*}{nfss}Use LaTeX commands which may not work with Plain TeX
+% \end{enumerate}
+%
+% A file \file{apsrev.dbj} file equivalent to the following should result:
+% \begin{verbatim}
+%\input docstrip
+%\preamble
+%----------------------------------------
+%*** REVTeX-compatible Phys Rev 2010-02-12 ***
+%\endpreamble
+%\postamble
+%End of customized bst file
+%\endpostamble
+%\keepsilent
+%\askforoverwritefalse
+%\def\MBopts{\from{merlin.mbs}{%
+% head,\MBopta}
+%\from{physjour.mbs}{\MBopta}
+%\from{geojour.mbs}{\MBopta}
+%\from{photjour.mbs}{\MBopta}
+%\from{merlin.mbs}{tail,\MBopta}}
+%\def\MBopta{%
+% ay,%: Author-year with some non-standard interface
+% nat,%: Natbib for use with natbib v5.3 or later
+% lang,%: Use language field to switch hyphenation patterns for title
+% pres,pres-bf,%: Presentation, speaker bold face
+% seq-no,%: Citation order (unsorted, only meaningful for numericals)
+% vonx,%: Sort without von part (de la Maire after Mahone)
+% nm-init,ed-au,%: Initials + surname (J. F. Smith)
+% jnrlst,%: Junior comes last as Smith, John, Jr.
+% nmft,nmft-def,%: User defined author font (\bibnamefont)
+% fnm-def,%: First names in user defined font (\bibfnamefont)
+% nmfted,%: Editors incollection like authors font
+% nmand-rm,%: `And' in normal font (JONES and JAMES)
+% lab,lab-def,%: User defined citation font (\citenamefont)
+% and-rm,%: Cited `and' in normal font
+% keyxyr,%: Year blank when KEY replaces missing author (for natbib 7.0)
+% blkyear,%: Missing date left blank
+% yr-par,%: Year in parentheses as (1993)
+% dtrev,%: Date as year month
+% date-nil-x,%: If date is empty, then do not produce the surrounding punctuation (parens, brackets, colon, comma)
+% tit-qq,%: Title and punctuation in double quotes (``Title,'' ..)
+% inproceedings-chapter,%: produce pages after chapter, just as in InBook
+% jtit-x,%: Title is ignored
+% inproceedings-chapter,%: produce pages after chapter just as in InBook
+% article-booktitle,%: format booktitle
+% article-series,%: article can has series
+% jttl-rm,%: Journal name normal font
+% journal-address,%: Include address field (in parentheses) along with journal name
+% book-bt,%: Field `booktitle', or if absent field `title', is book title
+% thesis-title-o,%: Title is optional: no warning issued if empty
+% trtit-b,%: Tech. report title like books
+% techreport-institution-par,%: format tech report institution like book publisher
+% vol-bf,%: Volume bold as {\bf vol}(num)
+% vnum-x,%: Journal vol, without number as 34
+% volp-com,%: Volume with comma as vol(num), ppp
+% jpg-1,%: Only start page number
+% book-editor-booktitle,%: Book permits empty author, produces title before editor in this case
+% inbook-editor-booktitle,%: Allow using both title/booktitle, both author/editor
+% bookaddress,%: Italic booktitle followed by bookaddress in roman
+% num-xser,%: Allows number without series and suppresses word "number"
+% number-cap,%: Capitalize word `number' as: "Number 123"
+% chapter-cap,%: Capitalize word `chapter' as: `Chapter 42'
+% series-number,%: Series number as: `Springer Lecture Notes No. 125'
+% numser-booktitle,%: After book title and conference address, and before editors
+% ser-vol,%: Series, vol. 23
+% ser-rm,%: format series roman , even when used with volume
+% volume-cap,%: Capitalize word `volume', as: `Volume 7 in Lecture Series'
+% ser-ed,%: Series and volume after booktitle and before editors
+% jnm-x,%: Space after journal name
+% pg-bk,book-chapter-pages,%: As chapter and page: chapter 42, page 345
+% pub-date,%: Publisher with address and date in parentheses (Oxford, 1994)
+% ay-empty-pub-parens-x,%: eliminate parentheses altogether if nothing inside
+% pre-pub,pre-edn,%: Edition, publisher, volume, chapter, pages
+% isbn,%: Include ISBN for books, booklets, etc.
+% issn,%: Include ISSN for periodicals
+% doi-link,doi,%: Doi forms a link to the publication, anchored to the volume or title
+% edby,%: In booktitle, edited by .. (where .. is names)
+% blk-com,%: Comma between blocks
+% fin-endbibitem,%: Command at end instead of period
+% pp,%: `Page' abbreviated as p. or pp.
+% ed,%: `Editor' abbreviated as ed. or eds.
+% abr,%: Abbreviations of such words
+% ednx,%: `Edition' abbreviated as `ed'
+% ord,%: Numerical editions as 1st, 2nd, 3rd, etc
+% jabr,%: Abbreviated journal names
+% etal-it,%: Italic et al
+% revdata,eprint,url,url-blk,translation,%: Include REVTeX data fields collaboration, eid, eprint, archive, url, translation
+% SLACcitation,%: Produce SLACcitation field
+% numpages-x,%: Do not include numpages field
+% url,url-prefix-x,%: URL without prefix (default: `URL ')
+% bibinfo,%: Reference component tags like \bibinfo in the content of \bibitem
+% bibfield,%: Element tags like \bibfield in the content of \bibitem
+% nfss,%: Use LaTeX commands which may not work with Plain TeX
+%,{%
+% }}
+%\generate{\file{apsrev4-1.bst}{\MBopts}}
+%\endbatchfile
+% \end{verbatim}
+%
+% \subsubsection{Comparing apsrev.bst and apsrmp.bst}\label{sec:CompRevRmp}
+% These two bibliographic styles differ as follows:
+% \file{apsrev.dbj} has the following guard codes, which \file{apsrmp.dbj} does not:
+% \begin{itemize}
+% \CandE{seq-no}%
+% Citation order (unsorted, like unsrt.bst)
+% \CandE{nm-init,ed-au}%
+% Initials + surname (J. F. Smith)
+% \CandE{blkyear}%
+% Missing date left blank
+% \CandE{date-nil-x}%
+% If date is empty, then do not produce the surrounding punctuation (parens, brackets, colon, comma)
+% \CandE{inproceedings-chapter}%
+% produce pages after chapter, just as in InBook
+% \CandE{techreport-institution-par}%
+% format tech report institution like book publisher
+% \CandE{vnum-x}%
+% Journal vol, without number as `34'
+% \CandE{pub-date}%
+% Publisher with address and date in parentheses (Oxford, 1994)
+% \CandE{pre-pub}%
+% Edition, publisher, volume, chapter, pages. Note that both use guard code pre-edn.
+% \end{itemize}
+%
+% \file{apsrmp.dbj} has the following guard codes, which \file{apsrev.dbj} does not:
+% \begin{itemize}
+% \CandE{nm-rev1}%
+% Only first name reversed, initials (AGU style: Smith, J. F., H. K. Jones)
+% \CandE{dt-beg}%
+% Date after authors
+% \CandE{vnum-sp}%
+% Journal vol (num) as `34 (2)'
+% \CandE{pp-last}%
+% Pages at end, but before any notes
+% \CandE{pub-par}%
+% Publisher in parentheses
+% \CandE{school-par}%
+% School/address in parens: `(school, address)'
+% \CandE{bkedcap}%
+% `Name Editor,' as above, editor upper case
+% \CandE{and-com}%
+% Comma even with 2 authors as `Tom, and Harry'
+%
+% \end{itemize}
+%
+% We ensure that the journal substyle has the first word
+% in the matter by installing the (default) APS code
+% later on (see Section~\ref{sec:aps-defaults}).
+% \end{macro}
+%
+% \begin{macro}{\authoryear@sw}
+% \changes{4.1a}{2008/01/18}{(AO, 457) Endnotes to be sorted in with numerical citations.}%
+% Numerical citations: default value of \cmd\authoryear@sw\ is false.
+% \begin{macrocode}
+\@booleanfalse\authoryear@sw
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bibpunct}
+% The following commands effectively establish the style in which \cmd\cite\ commands are
+% formatted.
+% You can think of them as the second needed component for the bibliography.
+%
+% Set up for APS numerical citations (once the packages are loaded).
+% The journal substyle can override these choices.
+%
+% Note that, prior to \classname{natbib} version 8.21, changing \cmd\NAT@sort\ at this late hour would not be totally effective;
+% you would have to give \classname{natbib} the relevant options at load time.
+% From version 8.21 on, \cmd\NAT@sort\ and \cmd\NAT@cmprs\ are not bound at all.
+% \changes{4.1a}{2008/01/19}{For natbib versions before 8.21, \cs{NAT@sort} was consulted only as natbib was being read in. Now it is fully dynamic.}
+% \begin{macrocode}
+\appdef\setup@hook{%
+ \bibpunct{[}{]}{,}{n}{}{,}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pre@bibdata}
+%
+% Set up to write endnotes to a .bib file; its data will be incorporated into the bibliography.
+% \begin{macrocode}
+ \def\pre@bibdata{\jobname\bibdata@app}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bibsection}
+% We define the sectioning command to use when starting the bibliography.
+%
+% \changes{4.0rc1}{2001/06/18}{grid changes with push and pop}
+% \begin{macrocode}
+\appdef\setup@hook{%
+ \def\bibsection{%
+ \par
+ \onecolumngrid@push
+ \begingroup
+ \baselineskip26\p@
+ \bib@device{\textwidth}{245.5\p@}%
+ \endgroup
+ \nobreak\@nobreaktrue
+ \addvspace{19\p@}%
+ \par
+ \onecolumngrid@pop
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bib@device}
+% \begin{macro}{\bibpreamble}
+% \begin{macro}{\bibsep}
+% \begin{macro}{\newblock}
+% We define the sectioning command to use when starting the bibliography.
+% \begin{macrocode}
+\def\bib@device#1#2{%
+ \hb@xt@\z@{%
+ \hb@xt@#1{%
+ \hfil
+ \phantomsection
+ \addcontentsline {toc}{section}{\protect\numberline{}\refname}%
+% \hyper@anchorstart {\@currentHref }%
+ \hb@xt@#2{%
+ \skip@\z@\@plus-1fil\relax
+ \leaders\hrule height.25 \p@ depth.25 \p@ \hskip\z@\@plus1fil
+ \hskip\skip@
+ \hskip\z@\@plus0.125fil\leaders\hrule height.375\p@ depth.375\p@ \hskip\z@\@plus0.75fil \hskip\z@\@plus0.125fil
+ \hskip\skip@
+ \hskip\z@\@plus0.25 fil\leaders\hrule height.5 \p@ depth.5 \p@ \hskip\z@\@plus0.5 fil \hskip\z@\@plus0.25 fil
+ \hskip\skip@
+ \hskip\z@\@plus0.375fil\leaders\hrule height.625\p@ depth.625\p@ \hskip\z@\@plus0.25fil \hskip\z@\@plus0.375fil
+ % \hskip\skip@
+ % \hfil
+ }%
+% \hyper@anchorend
+ \hfil
+ }%
+ \hss
+ }%
+}%
+\appdef\setup@hook{%
+ \let\bibpreamble\@empty
+ \bibsep\z@\relax
+ \def\newblock{\ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\bibfont}
+% We define the font switch that applies to the body of the bibliography.
+%
+% \begin{macrocode}
+\appdef\setup@hook{%
+ \def\bibfont{%
+ \small
+ \@clubpenalty\clubpenalty
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection{Index}%
+% FIXME: the following call to \cmd\twocolumn\ appears wrong if we were in two-column grid.
+% \changes{4.0c}{1999/11/13}{grid changes with ltxgrid}
+% \changes{4.0rc1}{2001/06/18}{grid changes with push and pop}
+% \begin{macrocode}
+\newenvironment{theindex}{%
+ \columnseprule \z@
+ \columnsep 35\p@
+ \c@secnumdepth-\maxdimen
+ \onecolumngrid@push
+ \section{\indexname}%
+ \thispagestyle{plain}%
+ \parindent\z@
+ \parskip\z@ plus.3\p@\relax
+ \let\item\@idxitem
+ \onecolumngrid@pop
+}{%
+%\onecolumngrid@pop
+}%
+%
+\def\@idxitem{\par\hangindent 40\p@}%
+%
+\def\subitem{\par\hangindent 40\p@ \hspace*{20\p@}}%
+%
+\def\subsubitem{\par\hangindent 40\p@ \hspace*{30\p@}}%
+%
+\def\indexspace{\par \vskip 10\p@ plus5\p@ minus3\p@\relax}%
+% \end{macrocode}
+%
+%
+% \subsection{Journal- and Pointsize-Specific Code}%
+%
+% After this substyle is read in, we will execute the code specific to the selected
+% journal: execute the society/journal \file{.rtx} file if it exists, or
+% execute the society/journal macro (if the latter is not defined, it will \cmd\relax\ out).
+% Here we define the default journal.
+% \begin{macrocode}
+\def\@journal@default{pra}%
+% \end{macrocode}
+%
+% \subsection{Typesize-Specific Code}%
+%
+% After this society file is read in, we will process the \cmd\@pointsize-specific
+% code. Here we define the default.
+% \begin{macrocode}
+\def\@pointsize@default{10}%
+% \end{macrocode}
+%
+% Note: the convention in \revtex\ and its substyles is that
+% the substyle must not override any explicit class options
+% declared by the document.
+% This means that the various Booleans of Section~\ref{sec:options}
+% may be assigned here only if they are still undefined at this point.
+%
+% For the APS, we supply code specific to journals PRA, PRB, PRC, PRD, PRE, PRL, and RMP.
+% At present, they are identical,
+% with the exception of PRB and RMP.
+%
+% For most all of the APS journals, the journal-dependent
+% code is relatively meager and is therefore embedded in this file.
+% However, the RMP code is sufficiently extensive that
+% splitting it out into a separate file is more convenient.
+%
+% \subsubsection{\classoption{pra}}%
+% There is no code specific to \classoption{pra}.
+% \begin{macrocode}
+\def\rtx@apspra{%
+ \class@info{APS journal PRA selected}%
+}%
+% \end{macrocode}
+%
+% \subsubsection{\classoption{prb}}%
+% We define a \cmd\citealp-like procedure that uses a numerical citation; it is for use in
+% the PRB journal.
+% \begin{macrocode}
+\def\rtx@apsprb{%
+ \class@info{APS journal PRB selected}%
+% \end{macrocode}
+% PRB requires superscript citations.
+% We use Patrick Daly's \classname{natbib} package,
+% and hyperref and other packages are already set up to cope with this.
+%
+% \begin{macro}{\bibpunct}
+% By default, PRB selects the \classoption{bibnotes} option.
+% We also set up for numerical citations.
+% \begin{macrocode}
+ \let\frontmatter@footnote@produce\frontmatter@footnote@produce@endnote
+ \appdef\setup@hook{%
+ \bibpunct{}{}{,}{s}{}{\textsuperscript{,}}%
+ \let\onlinecite\rev@citealpnum
+ }%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pre@bibdata}
+% \begin{macro}{\@endnotetext}
+% \changes{4.1a}{2008/01/18}{(AO, 457) Endnotes to be sorted in with numerical citations.}%
+%
+% Set up to write endnotes to a .bib file; its data will be incorporated into the bibliography.
+% \begin{macrocode}
+ \def\pre@bibdata{\jobname\bibdata@app}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% Invoke \classoption{superbib} option.
+% If the document makes a selection of its own, it will override this assignment.
+% \begin{macrocode}
+ \let\place@bibnumber\place@bibnumber@sup
+% \end{macrocode}
+%
+% End of \classoption{prb} code.
+% \begin{macrocode}
+}%
+% \end{macrocode}
+%
+% \subsubsection{\classoption{prc}}%
+% There is no code specific to \classoption{prc}.
+% \begin{macrocode}
+\def\rtx@apsprc{%
+ \class@info{APS journal PRC selected}%
+}%
+% \end{macrocode}
+%
+% \subsubsection{\classoption{prd}}%
+% There is no code specific to \classoption{prd}.
+% \begin{macrocode}
+\def\rtx@apsprd{%
+ \class@info{APS journal PRD selected}%
+}%
+% \end{macrocode}
+%
+% \subsubsection{\classoption{pre}}%
+% There is no code specific to \classoption{pre}.
+% \begin{macrocode}
+\def\rtx@apspre{%
+ \class@info{APS journal PRE selected}%
+}%
+% \end{macrocode}
+%
+% \subsubsection{\classoption{prl}}%
+% \begin{macrocode}
+\def\rtx@apsprl{%
+ \class@info{APS journal PRL selected}%
+% \end{macrocode}
+% In PRL, the default is the \classoption{bibnotes} option,
+% and the Acknowledgments section has no head.
+%
+% The References head is a device that may be described as a lozenge centered on the baseline,
+% 71 points wide by 2 points thick, with the ends tapering to a half point in thickness.
+% Space above 26 points base to base, below 31 base to base.
+%FIXME: this code may confound \classname{geometry}
+% \begin{macrocode}
+ \let\frontmatter@footnote@produce\frontmatter@footnote@produce@endnote
+ \@booleanfalse\acknowledgments@sw
+ \appdef\setup@hook{%
+ \def\bibsection{%
+ \par
+ \begingroup
+ \baselineskip26\p@
+ \bib@device{\hsize}{72\p@}%
+ \endgroup
+ \nobreak\@nobreaktrue
+ \addvspace{19\p@}%
+ }%
+ }%
+% \end{macrocode}
+% Implement length checking.
+% Use the \classname{times} and \classname{mathtime} packages,
+% plus whatever other processing is required
+% to make the formatted output be true
+% to the metrics of the journal.
+%
+% \begin{macrocode}
+\appdef\setup@hook{%
+ \lengthcheck@sw{%
+ \RequirePackage{times}%
+% \end{macrocode}
+% Wait. Do not use mathtime after all. APS has their own way of doing math pi, involving
+% Adobe Mathematical Pi and other fonts.
+% \begin{verbatim}
+% \RequirePackage{mathtime}%
+% \end{verbatim}
+% \begin{macrocode}
+ }{}%
+}%
+% \end{macrocode}
+% A PRL does not have numbered sections.
+% \begin{macrocode}
+ \c@secnumdepth=-\maxdimen
+% \end{macrocode}
+% Note: we defer this code until after type size file is read in.
+% \begin{macrocode}
+ \appdef\setup@hook{%
+ \@ifnum{\@pointsize=10\relax}{%
+ \lengthcheck@sw{%
+ \def\large{%
+ \@setfontsize\large{12.5}{14\p@}%
+ }%
+ \def\normalsize{%
+ \@setfontsize\normalsize{10.5}\@xiipt
+ \abovedisplayskip 6\p@ \@plus6\p@ \@minus5\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \abovedisplayskip
+ \belowdisplayshortskip \abovedisplayskip
+ \let\@listi\@listI
+ }%
+ \def\small{%
+ \@setfontsize\small{9.5}\@xipt
+ \abovedisplayskip 5\p@ \@plus5\p@ \@minus4\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \abovedisplayskip
+ \belowdisplayshortskip \abovedisplayskip
+ \let\@listi\@listI
+ }%
+ \DeclareMathSizes{12.5}{12.5}{9}{6}%
+ \DeclareMathSizes{10.5}{10.5}{7.5}{5}%
+ \DeclareMathSizes{9.5}{9.5}{7.0}{5}%
+ }{%
+ \def\normalsize{%
+ \@setfontsize\normalsize\@xpt\@xiipt
+ \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \abovedisplayskip
+ \belowdisplayshortskip \abovedisplayskip
+ \let\@listi\@listI
+ }%
+ }%
+ }{}%
+ }%
+ \textheight = 694.0\p@
+% \end{macrocode}
+%
+% End of \classoption{prl} code.
+% \begin{macrocode}
+}%
+% \end{macrocode}
+%
+% \subsubsection{\classoption{per}}%
+% Here is code specific to \classoption{per}.
+% \begin{macrocode}
+\def\rtx@apsprstper{%
+ \class@info{APS journal PRST-PER selected}%
+% \end{macrocode}
+% To first order, PER is the same as PRB, with superscript citations.
+%
+% \begin{macrocode}
+ \rtx@apsprb
+% \end{macrocode}
+% Per Mark Doyle (2009-12-22), the default is longbibliography.
+% \changes{4.1n}{2010/01/04}{(AO, 575) the default for journal prstper is longbibliography}%
+% \begin{macrocode}
+ \@booleantrue\longbibliography@sw
+% \end{macrocode}
+%
+% ``Section heads are bold, centered (Roman numeral, Latin letter)''
+%
+% Article titles do not have surrounding double-quotes!
+%
+% End of \classoption{prb} code.
+% \begin{macrocode}
+}%
+% \end{macrocode}
+%
+% \subsubsection{\classoption{prstab}}%
+% There is no code specific to \classoption{prstab}.
+% \begin{macrocode}
+\def\rtx@apsprstab{%
+ \class@info{APS journal PRSTAB selected}%
+}%
+% \end{macrocode}
+%
+% \subsubsection{\classoption{rmp}}%
+% If this option has been selected, we will read in the needed code from the file \file{apsrmp.rtx}.
+%
+% \subsection{Establish APS Defaults}\label{sec:aps-defaults}
+%
+% \begin{macro}{\footinbib@sw}
+% All APS journals except RMP effectively invoke the \classoption{footinbib} option.
+% We rely on the RMP-specific code to override this assignment.
+% \begin{macrocode}
+\@booleantrue\footinbib@sw
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@bibdataout@init}
+% \begin{macro}{\@bibdataout@aps}
+% \changes{4.1o}{2010/02/12}{(AO, 580) Control .bst at run time.}%
+% Procedure \cmd\@bibdataout@aps\ has the job of writing the control record into the
+% job's \cmd\jobname\filename{.bib} file, where it will adjust the options to \filename{.bst} processing.
+% It is installed into the initialization procedure \cmd\@bibdataout@init, and its meaning
+% is set by the society (APS) and journal.
+% For all but RMP, we select the Physical Review style.
+% For the latter case, we change the meaning, per the code in \file{apsrmp.rtx}.
+%
+% \begin{macrocode}
+\appdef\@bibdataout@rev{\@bibdataout@aps}%
+\def\@bibdataout@aps{%
+ \immediate\write\@bibdataout{%
+% \end{macrocode}
+% An entry that controls processing of the \filename{.bst} file has entry type \texttt{@CONTROL}.
+% \begin{macrocode}
+ @CONTROL{%
+ apsrev41Control%
+% \end{macrocode}
+% Say whether we want long bibliography style (the default), or the abbreviated style.
+% \begin{macrocode}
+ \longbibliography@sw{%
+ ,author="00",editor="1",pages="1",title="0",year="0"%
+ }{%
+ ,author="08",editor="1",pages="0",title="",year="1"%
+ }%
+ }%
+ }%
+% \end{macrocode}
+% Place a \cmd\citation\ into the auxiliary file corresponding to this entry.
+% \begin{macrocode}
+ \if@filesw
+ \immediate\write\@auxout{\string\citation{apsrev41Control}}%
+ \fi
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\place@bibnumber}
+% \begin{macro}{\@bibstyle}
+% We install code that will select the presentation for \cmd\bibitem s
+% and govern the \BibTeX\ processing.
+% \begin{macrocode}
+\let\place@bibnumber\place@bibnumber@inl
+\def\@bibstyle{apsrev\substyle@post}%
+% \end{macrocode}
+% \begin{verbatim}
+%\appdef\setup@hook{%
+% \longbibliography@sw{%
+% \appdef\@bibstyle{long}%
+% }{}%
+%}%
+% \end{verbatim}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{APS Sanity Checking}\label{sec:aps-sanity}
+% \changes{4.1f}{2009/07/20}{(AO, 524) Makes no sense if citations are superscript numbers and so are footnotes}
+%
+% Rule: if \cmd\place@bibnumber\ is \cmd\place@bibnumber@sup\
+% (citations are numbered and set superscript),
+% then it makes no sense for \cmd\footinbib@sw\ to be \cmd\false@sw\
+% (footnotes set in the bibliography, as endnotes).
+% If both conditions prevailed, then the document would have footnotes
+% and citations both as superscript arabic numbers, but independently numbered,
+% which would be confusing.
+%
+% Any society that provides for both superscript numbered citations as well as for
+% numbered footnotes should check for this same condition, and deal with it.
+%
+% Note: an alternative would be for footnotes to use the same sequence of footnote devices
+% that are used by the frontmatter footnotes
+% (\cmd\frontmatter@thefootnote\ instead of arabic numbers).
+%
+% In this case, we would want to refrain from resetting \cmd\c@footnote\ at the end of
+% the title page formatting.
+% We would also want to treat body footnotes identically to frontmatter footnotes:
+% the assignments in \cmd\titleblock@produce\ would persist throughout the document.
+%
+% But APS do not choose to go that route.
+% \begin{macrocode}
+\appdef\setup@hook{%
+ \@ifx{\place@bibnumber\place@bibnumber@sup}{%
+ \footinbib@sw{}{%
+ \class@warn{Citations are superscript numbers: footnotes must be endnotes; changing to that configuration}%
+ \@booleantrue\footinbib@sw
+ }%
+ }{}%
+}%
+% \end{macrocode}
+%
+% Here ends the substyle for society APS.
+% \begin{macrocode}
+%</aps>
+% \end{macrocode}
+%
+%
+% \section{The \classoption{rmp} journal substyle: the \texttt{rmp} module}
+%
+% The file \file{apsrmp.rtx} is read in by the \classname{revtex4} document class
+% if \cmd\@society\ has the value \classoption{aps}
+% and \cmd\@journal\ has the value \classoption{rmp}.
+%
+% It is read at the end of the \file{aps.rtx}, so all definitions
+% and assignments in that file are operative unless overridden here.
+%
+%
+% \begin{macrocode}
+%<*rmp>
+% \end{macrocode}
+%
+% Protect this file from being read in by anything but \revtex.
+% \begin{macrocode}
+\ifx\undefined\substyle@ext
+ \def\@tempa{%
+ \endinput
+ \GenericWarning{I must be read in by REVTeX! (Bailing out)}%
+ }%
+ \expandafter\else
+ \def\@tempa{}%
+ \expandafter\fi\@tempa
+% \end{macrocode}
+%
+% Protect this file from being read in as a society instead of a journal.
+% In such a case, \cmd\@journal\ will be undefined.
+% \begin{macrocode}
+\@ifxundefined\@journal{%
+% \end{macrocode}
+% One alternative: abort the document.
+% Another alternative: try to recover: force load the aps society file
+% \begin{macrocode}
+ \class@warn{Please specify the REVTeX options [aps,rmp]!}%
+ \@@end
+}{}%
+% \end{macrocode}
+% Log the journal substyle.
+% \begin{macrocode}
+ \class@info{APS journal RMP selected}%
+% \end{macrocode}
+%
+% \subsection{Frontmatter}%
+%
+% We assign the titlepage style for RMP; a document instance
+% may override by invoking one of the class options of \revtex.
+% \begin{macrocode}
+\clo@groupedaddress
+% \end{macrocode}
+%
+% \begin{macro}{\frontmatter@setup}
+%
+% \begin{macrocode}
+\def\frontmatter@setup{%
+ \normalfont\sffamily\raggedright
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\PACS@warn}
+% Per Mark Doyle, RMP never displays the PACS, so they don't want the `use showpacs' warning spit out.
+% \begin{macrocode}
+\def\PACS@warn{RMP documents do not display PACS. Your \string\pacs\space will be ignored}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@title@above}
+% \begin{macro}{\frontmatter@title@format}
+% \begin{macro}{\frontmatter@title@below}
+%
+% \begin{macrocode}
+\def\frontmatter@title@above{}%
+\def\frontmatter@title@format{\Large\bfseries\raggedright}% HelveticaNeue-Medium(Italic) 14pt.
+\def\frontmatter@title@below{\addvspace{12\p@}}% 24pt b-b down to first author
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@authorformat}
+% \changes{4.1b}{2008/08/04}{Rag the right even more: .8\cs{hsize}. Also, assign \cs{@totalleftmargin}.}%
+% \changes{4.1b}{2008/06/29}{(AO, 455) Be nice to a list within the abstract (assign \cs{@totalleftmargin}).}
+% Set the rag to a milder value, because we want to do true ragged right
+% typesetting, as opposed to the \LaTeX\ default, which gives very poor results.
+%
+% Note: author font is 9.8bp. 19.2bp/14.3bp above/below.
+% \begin{macrocode}
+\def\frontmatter@authorformat{%
+ \preprintsty@sw{\vskip0.5pc\relax}{}%
+ \@tempskipa\@flushglue
+ \@flushglue\z@ plus.8\hsize
+ \raggedright\advance\leftskip.5in\relax
+ \@flushglue\@tempskipa
+ \parskip\z@skip
+ \@totalleftmargin\leftskip
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@affiliationfont}
+% \changes{4.1b}{2008/08/04}{As with author formatting, rag the right more, and assign \cs{@totalleftmargin}. Also neutralize \cs{def@after@address}.}%
+% \changes{4.1b}{2008/06/29}{(AO, 455) Be nice to a list within the abstract (assign \cs{@totalleftmargin}).}
+% The hook \cmd\frontmatter@affiliationfont\ controls the formatting of affiliations and affiliation groups.
+% The hook \cmd\frontmatter@above@affilgroup\ is invoked just before proceeding with author/affiliation processing.
+% The \cmd\frontmatter@above@affiliation\ is the amount of space above affiliations in the \classoption{groupedaddress} style,
+% and \cmd\frontmatter@above@affiliation@script\ is that for \classoption{superscriptaddress}.
+%
+% Note: affiliation font is 9.03/10.4bp, 14.3bp/19.2bp b-b above/below
+% \begin{macrocode}
+\def\frontmatter@affiliationfont{% Helvetica 9/10.2
+ \small\slshape\selectfont\baselineskip10.5\p@\relax
+ \@tempskipa\@flushglue
+ \@flushglue\z@ plus.8\hsize
+ \raggedright\advance\leftskip.5in\relax
+ \@flushglue\@tempskipa
+ \@totalleftmargin\leftskip
+ \let\def@after@address\def@after@address@empty
+}%
+\def\frontmatter@above@affilgroup{\addvspace{7.2\p@}}% additional leading above an author
+\def\frontmatter@above@affiliation{\addvspace{5.3\p@}}%
+\def\frontmatter@above@affiliation@script{}%
+% \end{macrocode}
+% \end{macro}
+%
+% Set up the default RMP style for title block authors and affiliations.
+% We assign the titlepage style for RMP; a document instance
+% may override by invoking one of the class options of \revtex.
+% \changes{4.1b}{2008/08/04}{The \texttt{rmp} journal substyle selects \texttt{groupedaddress} by default.}%
+% \changes{4.1b}{2008/07/01}{(AO) make settings at class time instead of deferring them to later.}
+%
+% This command should override the effect of the
+% corresponding command in the society substyle,
+% and any document class option bearing on same will in turn override.
+% \begin{macrocode}
+\clo@groupedaddress
+% \end{macrocode}
+%
+% \begin{macro}{\frontmatter@RRAP@format}
+% \changes{4.1b}{2008/06/29}{(AO, 455) Be nice to a list within the abstract (assign \cs{@totalleftmargin}).}
+% Note: in RMP, if we are not in preprint mode, the date will not be produced.
+%
+% Note: Helvetica C/lc, 8.98bp, space above: 16.3bp b-b.
+% \begin{macrocode}
+\def\frontmatter@RRAP@format{%
+ \addvspace{7.3\p@}%
+ \small
+ \raggedright\advance\leftskip.5in\relax
+ \@totalleftmargin\leftskip
+}%
+\def\produce@RRAP#1{%
+ \@if@empty{#1}{}{%
+ \@ifvmode{\leavevmode}{}%
+ \unskip(\ignorespaces#1\unskip)\quad
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@abstractheading}
+% Space above 21.8bp b-b.
+% \begin{macrocode}
+\def\frontmatter@abstractheading{%
+ \preprintsty@sw{%
+ \begingroup
+ \centering\large
+ \abstractname
+ \par
+ \endgroup
+ \vspace{.5pc}%
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@abstractfont}
+% TimesTen 8.93bp/9.6bp X 360bp, indented 36bp, with 21.9/37.6bp b-b above/below
+% \changes{4.1b}{2008/06/29}{(AO, 455) Be nice to a list within the abstract (assign \cs{@totalleftmargin}).}
+% \begin{macrocode}
+\def\frontmatter@abstractfont{%
+ \footnotesize
+ \hsize360\p@
+ \leftskip=0.5in
+ \parindent\z@
+ \@totalleftmargin\leftskip
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@preabstractspace}
+% \begin{macro}{\frontmatter@postabstractspace}
+% Space above and space below abstract in title block.
+% Should be 22/36 points base-to-base.
+% \begin{macrocode}
+\def\frontmatter@preabstractspace{7.7\p@}%
+\def\frontmatter@postabstractspace{24.6\p@}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% FIXME: Not done: PACS.
+% FIXME: TOC: Head is same as \section: HelveticaNeue 8.98. 32/22bp b-b above/below,
+% Body: TimesTen 8/10.5.
+%
+% \subsection{General Text}%
+%
+% \changes{4.1b}{2008/07/01}{(AO) make settings at class time instead of deferring them to later.}
+% If not in preprint mode, RMP sets the type size to 10/12 point. Note: s/b 11.6bp leading
+%FIXME: define \cmd\normalsize\ only if nobody else has done so.
+% \begin{macrocode}
+ \appdef\setup@hook{%
+ \preprintsty@sw{}{%
+ \def\normalsize{%
+ \@setsize\normalsize{12pt}\xpt\@xpt
+ \abovedisplayskip 10\p@ plus2\p@ minus5\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \abovedisplayskip
+ \belowdisplayshortskip \abovedisplayskip
+ \let\@listi\@listI
+ }%
+ }%
+ }%
+% \end{macrocode}
+%
+% Footnote mods:
+% \changes{4.1n}{2010/01/02}{(AO, 571) class file must set \cs{splittopskip}; fine tune \cs{skip}\cs{footins}; \cs{footnoterule} defined in terms of \cs{skip}\cs{footins}}%
+% \begin{macrocode}
+ \footnotesep 9.25pt
+ \skip\footins 36pt plus 4pt minus 12pt
+ \def\footnoterule{%
+ \dimen@\skip\footins\divide\dimen@\thr@@
+ \kern-\dimen@\hrule width.5in\kern\dimen@
+ }%
+% \end{macrocode}
+%
+%
+% \subsection{Sectioning}
+% \changes{4.1b}{2008/08/04}{Use \cs{setup@hook} to initialize all.}
+% \changes{4.1b}{2008/08/01}{Section numbering via procedures \cs{secnums@rtx} and \cs{secnums@arabic}.}
+%
+% We override the meaning of \cmd\secnums@rtx.
+% The class option \classoption{secnumarabic} will continue to work.
+% \begin{macrocode}
+\def\secnums@rtx{%
+ \@ifxundefined\thepart{%
+ \def\thepart{\Roman{part}}%
+ }{}%
+ \@ifxundefined\thesection{%
+ \def\thesection {\Roman{section}}%
+ \def\p@section {}%
+ }{}%
+ \@ifxundefined\thesubsection{%
+ \def\thesubsection {\Alph{subsection}}%
+ \def\p@subsection {\thesection.}%
+ }{}%
+ \@ifxundefined\thesubsubsection{%
+ \def\thesubsubsection {\arabic{subsubsection}}%
+ \def\p@subsubsection {\thesection.\thesubsection.}%
+ }{}%
+ \@ifxundefined\theparagraph{%
+ \def\theparagraph {\alph{paragraph}}%
+ \def\p@paragraph {\thesection.\thesubsection.\thesubsubsection.}%
+ }{}%
+ \@ifxundefined\thesubparagraph{%
+ \def\thesubparagraph {\arabic{subparagraph}}%
+ \def\p@subparagraph {\thesection.\thesubsection.\thesubsubsection.\theparagraph.}%
+ }{}%
+}%
+% \end{macrocode}
+%
+% In RMP, put a period (.), followed by `nut space', after the section number.
+% Also, hang the section number (the \LaTeX\ default).
+% \begin{macrocode}
+\def\@seccntformat#1{\csname the#1\endcsname.\hskip0.5em\relax}%
+% \end{macrocode}
+%
+% Note that we wish to set the section head uppercase, so we use
+% David Carlisle's \cmd\MakeTextUppercase. However, because this procedure effectively
+% parses its argument (looking for things to \emph{not} translate), it has to be invoked
+% in such a way that the argument of the \cmd\section\ command is passed to it as its
+% own argument.
+%
+% To accomplish this, we use the \cmd\@hangfrom@\ hook, which was developed for this
+% purpose.
+% \changes{4.1b}{2008/07/01}{Add \cs{@hangfroms@section}}
+% \begin{macrocode}
+ \def\section{%
+ \@startsection{section}{1}{\z@}{0.8cm plus1ex minus.2ex}{0.4cm}%
+ {%
+ \small\sffamily\bfseries\selectfont
+ \raggedright
+ \parindent\z@
+ }%
+ }%
+ \def\@hangfrom@section#1#2#3{\@hangfrom{#1#2}\MakeTextUppercase{#3}}%
+ \def\@hangfroms@section#1#2{#1\MakeTextUppercase{#2}}%
+ \def\subsection{%
+ \@startsection{subsection}{2}{\z@}{0.8cm plus1ex minus.2ex}{0.4cm}%
+ {%
+ \small\sffamily\bfseries
+ \raggedright
+ \parindent\z@
+ }%
+ }%
+ \def\subsubsection{%
+ \@startsection{subsubsection}{3}{\z@}{.8cm plus1ex minus.2ex}{0.4cm}%
+ {%
+ \small\sffamily\selectfont
+ \raggedright
+ \parindent\z@
+ }%
+ }%
+ \def\paragraph{%
+ \@startsection{paragraph}{4}{\z@}{.8cm plus1ex minus.2ex}{-1em}%
+ {%
+ \small\slshape\selectfont
+ \raggedright
+ \parindent\z@
+ }%
+ }%
+ \def\subparagraph{%
+ \@startsection{subparagraph}{4}{\parindent}{3.25ex plus1ex minus.2ex}{-1em}%
+ {\normalsize\bfseries\selectfont}%
+ }%
+%
+ \setcounter{tocdepth}{4}% FIXME: has no effect
+% \end{macrocode}
+%
+% \begin{macro}{\appendix}
+% \begin{macro}{\@hangfrom@appendix}
+% \begin{macro}{\@hangfroms@appendix}
+% \begin{macro}{\@appendixcntformat}
+% \changes{4.1b}{2008/07/01}{Add \cs{@hangfroms@section}}
+% \begin{macrocode}
+\appdef\appendix{%
+ \let\@hangfrom@section\@hangfrom@appendix
+ \let\@sectioncntformat\@appendixcntformat
+}%
+\def\@hangfrom@appendix#1#2#3{%
+ #1%
+ \@if@empty{#2}{%
+ #3%
+ }{%
+ #2\@if@empty{#3}{}{:\ #3}%
+ }%
+}%
+\def\@hangfroms@appendix#1#2{%
+ #1\appendixname\@if@empty{#2}{}{:\ #2}%
+}%
+\def\@appendixcntformat#1{\appendixname\ \csname the#1\endcsname}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Figure and Table Caption Formatting}
+% \begin{macro}{\@makecaption}
+% \changes{4.1b}{2008/07/01}{Break out \cs{@caption@fignum@sep}}
+%
+% \begin{macrocode}
+\setlength\belowcaptionskip{2\p@}
+\long\def\@makecaption#1#2{%
+ \vskip\abovecaptionskip
+ \vbox{%
+ \flushing
+ \small\rmfamily
+ \noindent
+ #1\@caption@fignum@sep#2\par
+ }%
+ \vskip\belowcaptionskip
+}%
+\def\@caption@fignum@sep{\nobreak\hskip.5em plus.2em\ignorespaces}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Citations and Bibliography}%
+%
+% Customize \revtex\ for the journal substyle;
+% this task requires three components:
+% a \BibTeX\ \file{.bst} style file,
+% customizing code for \file{natbib}, and
+% customizations of the \env{thebibliography} environment.
+%
+% \begin{macro}{\@bibstyle}
+% Define the argument of the \cmd\bibliographystyle\ command
+% (if the document does not do so).
+%
+% The user must have installed a \file{.bst} file of the corresponding name.
+% This file will then be used by \BibTeX\ when compiling the document's \file{.bbl} file.
+%
+% To generate \file{apsrmp.bst}, use \classname{custom-bib} version 3.89d1 or later.
+% Run the \file{.bst} generator, \file{makebst.tex}, with the following options:
+%
+% \def\QandA#1#2#3{\item#1: \textbf{#2}: \texttt{#3}---}%
+% \def\CandE#1{\item\relax\texttt{#1}---}%
+% \begin{enumerate}
+% \QandA{STYLE OF CITATIONS}{a}{ay}Author-year with some non-standard interface
+% \QandA{AUTHOR}{*}{nat}Natbib for use with natbib v5.3 or later
+% \QandA{LANGUAGE FIELD}{l}{lang}Use language field to switch hyphenation patterns for title
+% \QandA{PRESENTATIONS}{b}{pres,pres-bf}Presentation, speaker bold face
+% \QandA{ORDER ON VON PART }{x}{vonx}Sort without von part (de la Maire after Mahone)
+% \QandA{AUTHOR NAMES}{a}{nm-rev1}Only first name reversed, initials (AGU style: Smith, J. F., H. K. Jones)
+% \QandA{POSITION OF JUNIOR }{*}{jnrlst}Junior comes last as Smith, John, Jr.
+% \QandA{TYPEFACE FOR AUTHORS IN LIST OF REFERENCES}{u}{nmft,nmft-def}User defined author font (\cmd\bibnamefont)
+% \QandA{FONT FOR FIRST NAMES }{u}{fnm-def}First names in user defined font (\cmd\bibfnamefont)
+% \QandA{EDITOR NAMES IN INCOLLECTION ETC}{a}{nmfted}Editors incollection like authors font
+% \QandA{FONT FOR `AND' IN LIST}{r}{nmand-rm}`And' in normal font (JONES and JAMES)
+% \QandA{FONT OF CITATION LABELS IN TEXT }{u}{lab,lab-def}User defined citation font (\cmd\citenamefont)
+% \QandA{FONT FOR `AND' IN CITATIONS }{r}{and-rm}Cited `and' in normal font
+% \QandA{LABEL WHEN AUTHORS MISSING }{*}{keyxyr}Year blank when KEY replaces missing author (for natbib 7.0)
+% \QandA{DATE POSITION}{b}{dt-beg}Date after authors
+% \QandA{DATE FORMAT }{m}{yr-com}Date preceded by comma as `, 1993'
+% \QandA{INCLUDE MONTHS}{m}{aymth}Include month in date
+% \QandA{REVERSED DATE }{r}{dtrev}Date as year month
+% \QandA{TRUNCATE YEAR }{*}{note-yr}Year text full as 1990--1993 or `in press'
+% \QandA{TITLE OF ARTICLE}{d}{tit-qq}Title and punctuation in double quotes (``Title,'' ..)
+% \QandA{TITLE PRESENT IN ARTICLE, INCOLLECTION, AND INPROCEEDINGS}{x}{jtit-x}Title is ignored
+% \QandA{INPROCEEDINGS CHAPTER AND PAGES, LIKE INBOOK}{y}{inproceedings-chapter}produce pages after chapter just as in InBook
+% \QandA{ARTICLE BOOKTITLE PRESENT}{?}{article-booktitle}format booktitle
+% \QandA{ARTICLE SERIES PRESENT}{?}{article-series}article can has series
+% \QandA{JOURNAL NAME FONT}{r}{jttl-rm}Journal name normal font
+% \QandA{JOURNAL NAME WITH ADDRESS}{y}{journal-address}Include address field (in parentheses) along with journal name
+% \QandA{BOOK TITLE FIELDS}{y}{book-bt}Field `booktitle', or if absent field `title', is book title
+% \QandA{THESIS TITLE OPTIONAL}{?}{thesis-title-o}Title is optional: no warning issued if empty
+% \QandA{TECHNICAL REPORT TITLE}{b}{trtit-b}Tech. report title like books
+% \QandA{JOURNAL VOLUME}{b}{vol-bf}Volume bold as {\bf vol}(num)
+% \QandA{JOURNAL VOL AND NUMBER}{s}{vnum-sp}Journal vol (num) as 34 (2)
+% \QandA{VOLUME PUNCTUATION}{c}{volp-com}Volume with comma as vol(num), ppp
+% \QandA{PAGE NUMBERS}{f}{jpg-1}Only start page number
+% \QandA{POSITION OF PAGES}{e}{pp-last}Pages at end but before any notes
+% \QandA{BOOK EDITOR W/O AUTHOR}{}{book-editor-booktitle}Book permits empty author, produces title before editor in this case
+% \QandA{INBOOK PERMITS TITLE, BOOKTITLE, AUTHOR, EDITOR}{a}{inbook-editor-booktitle}Allow using both title/booktitle, both author/editor
+% \QandA{CONFERENCE ADDRESS FOR BOOK, INBOOK, INCOLLECTION, INPROCEEDINGS, PROCEEDINGS}{a}{bookaddress}Italic booktitle followed by bookaddress in roman
+% \QandA{NUMBER AND SERIES FOR BOOK, INBOOK, INCOLLECTION, INPROCEEDINGS, PROCEEDINGS}{*}{num-xser}Allows number without series and suppresses word "number"
+% \QandA{WORD NUMBER CAPITALIZED FOR NUMBER AND SERIES}{c}{number-cap}Capitalize word `number' as: "Number 123"
+% \QandA{WORD CHAPTER CAPITALIZED}{c}{chapter-cap}Capitalize word `chapter' as: `Chapter 42'
+% \QandA{COMBINING NUMBER AND SERIES}{x}{series-number}Series number as: `Springer Lecture Notes No. 125'
+% \QandA{POSITION OF NUMBER AND SERIES}{b}{numser-booktitle}After book title and conference address, and before editors
+% \QandA{VOLUME AND SERIES FOR BOOKS}{s}{ser-vol}Series, vol. 23
+% \QandA{VOLUME AND SERIES FORMATTING}{y}{ser-rm}format series roman , even when used with volume
+% \QandA{WORD VOLUME CAPITALIZED FOR VOLUME AND SERIES}{y}{volume-cap}Capitalize word `volume', as: `Volume 7 in Lecture Series'
+% \QandA{POSITION OF VOLUME AND SERIES FOR INCOLLECTION, INBOOK, AND INPROCEEDINGS}{e}{ser-ed}Series and volume after booktitle and before editors
+% \QandA{JOURNAL NAME PUNCTUATION}{x}{jnm-x}Space after journal name
+% \QandA{PAGES IN BOOK}{*}{pg-bk,book-chapter-pages}As chapter and page: chapter 42, page 345
+% \QandA{PUBLISHER IN PARENTHESES}{p}{pub-par}Publisher in parentheses
+% \QandA{EMPTY PUBLISHER PARENTHESES}{y}{ay-empty-pub-parens-x}eliminate parentheses altogether if nothing inside
+% \QandA{PUBLISHER POSITION}{e}{pre-edn}Edition before publisher
+% \QandA{SCHOOL}{p}{school-par}school/address in parens: `(school, address)'
+% \QandA{ISBN NUMBER}{*}{isbn}Include ISBN for books, booklets, etc.
+% \QandA{ISSN NUMBER}{*}{issn}Include ISSN for periodicals
+% \QandA{DOI NUMBER}{a}{doi-link,doi}Doi forms a link to the publication, anchored to the volume or title
+% \QandA{`EDITOR' AFTER NAMES}{a}{bkedcap}`Name Editor,' as above, editor upper case
+% \QandA{EDITOR IN COLLECTIONS}{b}{edby}In booktitle, edited by .. (where .. is names)
+% \QandA{PUNCTUATION BETWEEN SECTIONS }{c}{blk-com}Comma between blocks
+% \QandA{FINAL PUNCTUATION}{c}{fin-endbibitem}Command at end instead of period
+% \QandA{ABBREVIATE WORD `PAGES' }{a}{pp}`Page' abbreviated as p. or pp.
+% \QandA{ABBREVIATE WORD `EDITORS'}{a}{ed}`Editor' abbreviated as ed. or eds.
+% \QandA{OTHER ABBREVIATIONS}{a}{abr}Abbreviations of such words
+% \QandA{ABBREVIATION FOR `EDITION' }{a}{ednx}`Edition' abbreviated as `ed'
+% \QandA{EDITION NUMBERS}{n}{ord}Numerical editions as 1st, 2nd, 3rd, etc
+% \QandA{STORED JOURNAL NAMES}{a}{jabr}Abbreviated journal names
+% \QandA{COMMA BEFORE `AND'}{c}{and-com}Comma even with 2 authors as `Tom, and Harry'
+% \QandA{FONT OF `ET AL'}{i}{etal-it}Italic et al
+% \QandA{ADDITIONAL REVTeX DATA FIELDS}{r}{revdata,eprint,url,url-blk,translation}Include REVTeX data fields collaboration, eid, eprint, archive, url, translation
+% \QandA{SLACcitation FIELD}{?}{SLACcitation}Produce SLACcitation field
+% \QandA{NUMPAGES DATA FIELD}{*}{numpages-x}Do not include numpages field
+% \QandA{REFERENCE COMPONENT TAGS}{b}{bibinfo}Reference component tags like \cmd\bibinfo\ in the content of \cmd\bibitem
+% \QandA{ELEMENT TAGS}{b}{bibfield}Element tags like \cmd\bibfield\ in the content of \cmd\bibitem
+% \QandA{COMPATIBILITY WITH PLAIN TEX}{*}{nfss}Use LaTeX commands which may not work with Plain TeX
+% \end{enumerate}
+%
+% A file \file{apsrmp.dbj} file equivalent to the following should result:
+% \begin{verbatim}
+%\input docstrip
+%\preamble
+%----------------------------------------
+%*** REVTeX-compatible RMP 2010-02-12 ***
+%\endpreamble
+%\postamble
+%End of customized bst file
+%\endpostamble
+%\keepsilent
+%\askforoverwritefalse
+%\def\MBopts{\from{merlin.mbs}{%
+% head,\MBopta}
+%\from{physjour.mbs}{\MBopta}
+%\from{geojour.mbs}{\MBopta}
+%\from{photjour.mbs}{\MBopta}
+%\from{merlin.mbs}{tail,\MBopta}}
+%\def\MBopta{%
+% ay,%: Author-year with some non-standard interface
+% nat,%: Natbib for use with natbib v5.3 or later
+% lang,%: Use language field to switch hyphenation patterns for title
+% pres,pres-bf,%: Presentation, speaker bold face
+% vonx,%: Sort without von part (de la Maire after Mahone)
+% nm-rev1,%: Only first name reversed, initials (AGU style: Smith, J. F., H. K. Jones)
+% jnrlst,%: Junior comes last as Smith, John, Jr.
+% nmft,nmft-def,%: User defined author font (\bibnamefont)
+% fnm-def,%: First names in user defined font (\bibfnamefont)
+% nmfted,%: Editors incollection like authors font
+% nmand-rm,%: `And' in normal font (JONES and JAMES)
+% lab,lab-def,%: User defined citation font (\citenamefont)
+% and-rm,%: Cited `and' in normal font
+% keyxyr,%: Year blank when KEY replaces missing author (for natbib 7.0)
+% dt-beg,%: Date after authors
+% yr-par,%: Year in parentheses as (1993)
+% dtrev,%: Date as year month
+% date-nil-x,%: If date is empty, then do not produce the surrounding punctuation (parens, brackets, colon, comma)
+% tit-qq,%: Title and punctuation in double quotes (``Title,'' ..)
+% inproceedings-chapter,%: produce pages after chapter, just as in InBook
+% jtit-x,%: Title is ignored
+% inproceedings-chapter,%: produce pages after chapter just as in InBook
+% article-booktitle,%: format booktitle
+% article-series,%: article can has series
+% jttl-rm,%: Journal name normal font
+% journal-address,%: Include address field (in parentheses) along with journal name
+% book-bt,%: Field `booktitle', or if absent field `title', is book title
+% thesis-title-o,%: Title is optional: no warning issued if empty
+% trtit-b,%: Tech. report title like books
+% techreport-institution-par,%: format tech report institution like book publisher
+% vol-bf,%: Volume bold as {\bf vol}(num)
+% vnum-sp,%: Journal vol (num) as 34 (2)
+% volp-com,%: Volume with comma as vol(num), ppp
+% jpg-1,%: Only start page number
+% pp-last,%: Pages at end but before any notes
+% book-editor-booktitle,%: Book permits empty author, produces title before editor in this case
+% inbook-editor-booktitle,%: Allow using both title/booktitle, both author/editor
+% bookaddress,%: Italic booktitle followed by bookaddress in roman
+% num-xser,%: Allows number without series and suppresses word "number"
+% number-cap,%: Capitalize word `number' as: "Number 123"
+% chapter-cap,%: Capitalize word `chapter' as: `Chapter 42'
+% series-number,%: Series number as: `Springer Lecture Notes No. 125'
+% numser-booktitle,%: After book title and conference address, and before editors
+% ser-vol,%: Series, vol. 23
+% ser-rm,%: format series roman , even when used with volume
+% volume-cap,%: Capitalize word `volume', as: `Volume 7 in Lecture Series'
+% ser-ed,%: Series and volume after booktitle and before editors
+% jnm-x,%: Space after journal name
+% pg-bk,book-chapter-pages,%: As chapter and page: chapter 42, page 345
+% pub-par,%: Publisher in parentheses
+% ay-empty-pub-parens-x,%: eliminate parentheses altogether if nothing inside
+% pre-edn,%: Edition before publisher
+% school-par,%: school/address in parens: `(school, address)'
+% isbn,%: Include ISBN for books, booklets, etc.
+% issn,%: Include ISSN for periodicals
+% doi-link,doi,%: Doi forms a link to the publication, anchored to the volume or title
+% bkedcap,%: `Name Editor,' as above, editor upper case
+% edby,%: In booktitle, edited by .. (where .. is names)
+% blk-com,%: Comma between blocks
+% fin-endbibitem,%: Command at end instead of period
+% pp,%: `Page' abbreviated as p. or pp.
+% ed,%: `Editor' abbreviated as ed. or eds.
+% abr,%: Abbreviations of such words
+% ednx,%: `Edition' abbreviated as `ed'
+% ord,%: Numerical editions as 1st, 2nd, 3rd, etc
+% jabr,%: Abbreviated journal names
+% and-com,%: Comma even with 2 authors as `Tom, and Harry'
+% etal-it,%: Italic et al
+% revdata,eprint,url,url-blk,translation,%: Include REVTeX data fields collaboration, eid, eprint, archive, url, translation
+% SLACcitation,%: Produce SLACcitation field
+% numpages-x,%: Do not include numpages field
+% url,url-prefix-x,%: URL without prefix (default: `URL ')
+% bibinfo,%: Reference component tags like \bibinfo in the content of \bibitem
+% bibfield,%: Element tags like \bibfield in the content of \bibitem
+% nfss,%: Use LaTeX commands which may not work with Plain TeX
+%,{%
+% }}
+%\generate{\file{apsrmp4-1.bst}{\MBopts}}
+%\endbatchfile
+% \end{verbatim}
+%
+% For a comparison between apsrmp.bst and apsrev.bst, see Section~\ref{sec:CompRevRmp}.
+%
+% \changes{4.1c}{2008/08/15}{Document class option longbibliography via \cs{substyle@post}}
+% \begin{macrocode}
+\def\@bibstyle{apsrmp\substyle@post}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\authoryear@sw}
+% \changes{4.1a}{2008/01/18}{(AO, 457) Endnotes to be sorted in with numerical citations.}%
+% Author-year citations: default value of \cmd\authoryear@sw\ is true.
+% \begin{macrocode}
+\@booleantrue\authoryear@sw
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@bibdataout@rmp}
+% \changes{4.1o}{2010/02/12}{(AO, 580) Control .bst at run time.}%
+% When the journal is RMP, the meaning of the procedure \cmd\@bibdataout@aps\ needs to be different
+% because of the way the author names are formatted. In other respects, it is the same.
+% \begin{macrocode}
+\def\@bibdataout@aps{%
+ \immediate\write\@bibdataout{%
+% \end{macrocode}
+% An entry that controls processing of the \filename{.bst} file has entry type \texttt{@CONTROL}.
+% This entry's cite key is \texttt{apsrmp41Control}, which serves as a version number.
+% \begin{macrocode}
+ @CONTROL{%
+ apsrmp41Control%
+% \end{macrocode}
+% Say whether we want long bibliography style (the default), or the abbreviated style.
+% \begin{macrocode}
+ \longbibliography@sw{%
+ ,author="03",editor="0",pages="1",title="0",year="0"%
+ }{%
+ ,author="0B",editor="0",pages="0",title="",year="1"%
+ }%
+ }%
+ }%
+% \end{macrocode}
+% Place a \cmd\citation\ into the auxiliary file corresponding to this entry.
+% \begin{macrocode}
+ \if@filesw
+ \immediate\write\@auxout{\string\citation{apsrmp41Control}}%
+ \fi
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bibpunct}
+% \begin{macro}{\bibsection}
+% \begin{macro}{\bibpreamble}
+% \begin{macro}{\newblock}
+% \begin{macro}{\bibhang}
+% \begin{macro}{\bibsep}
+% \begin{macro}{\cite}
+% The following commands effectively establish the style in which \cmd\cite\ commands are
+% formatted.
+% You can think of them as the second needed component for the bibliography.
+%
+% Set up for author-year citations:
+% when \cmd\NAT@set@cites\ executes (at \envb{document} time), the \cmd\@biblabel\ will
+% be set to \cmd\NAT@biblabel.
+%
+% Per Karie Friedman (friedman@phys.washington.edu), multiple citations are separated by semicolons, e.g.,
+% (Jones, 1999; Abbott and Smith, 2000; Wortley, 2001a),
+% and
+% multiple citations by the same author by commas, e.g.,
+% Abela et al. (1995, 1997a, 1997b).
+% The third argument of \cmd\bibpunct\ handles the former.
+%
+% The fifth argument puts a comma after the author when the year is not in parens:
+% (Lee et al., 1996).
+%
+% Incidently, this \cmd\bibpunct\ command specifies the \classname{natbib} default values.
+%
+% We define the sectioning command to use when starting the bibliography.
+%
+% We change \classname{natbib}'s \cmd\NAT@def@citea\ procedure to effect more elaborate
+% punctuation for RMP: see item 473:
+% \cmd\cite\ order punctuation: ``If possible, \cmd\textcite should put the word 'and' between two citations and before the last citation in a list of 3 or more.''
+%
+% \begin{macrocode}
+\appdef\setup@hook{%
+% \end{macrocode}
+%
+% We define the punctuation to use in the \cmd\cite\ command's production.
+%
+% \begin{macrocode}
+ \bibpunct{(%)
+ }{%(
+ )}{;}{a}{,}{,}%
+% \end{macrocode}
+%
+% We define the sectioning command to use when starting the bibliography.
+%
+% \begin{macrocode}
+ \def\bibsection{%
+ \expandafter\section\expandafter*\expandafter{\refname}%
+ \@nobreaktrue
+ }%
+ \let\bibpreamble\@empty
+ \def\newblock{\ }%
+ \bibhang10\p@
+ \bibsep\z@
+% \end{macrocode}
+%
+% Per Mark Doyle, \cmd\cite\ is mapped to \cmd\citep\ in RMP.
+% \changes{4.1i}{2009/10/23}{(AO, 541) Defer assignment of \cs{cite} until after natbib loads}
+% \begin{macrocode}
+ \let\cite\citep
+% \end{macrocode}
+%
+% End of code to be delayed until after \classname{natbib} loads.
+% \begin{macrocode}
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\footinbib@sw}
+% Footnotes in bibliography are consistent only with numbered citations,
+% and are particularly nasty under \classname{natbib}:
+% the packcage will automatically change to numbered references if
+% any \cmd\bibitem\ commands lack the optional argument.
+% Therefore, we must uninvoke it now, even if invoked by the document.
+% The same is quietly done with
+% \classname{natbib}'s \classoption{mcite} and \classoption{compress} options.
+%
+% \changes{4.1f}{2009/07/15}{(AO, 523) Add class option nomerge, to turn off new natbib 8.3 syntax}
+% (AO 523) I changed the code that alters \cmd\NAT@merge\ so that it will not override
+% when \cmd\NAT@merge\ has been set to \cmd\z@.
+% \begin{macrocode}
+\@booleanfalse\footinbib@sw
+\appdef\setup@hook{%
+ \footinbib@sw{%
+ \class@warn{%
+ Footnotes in bibliography are incompatible with RMP.^^J%
+ Undoing the footinbib option.
+ }%
+ \@booleanfalse\footinbib@sw
+ }{}%
+ \@ifnum{\NAT@merge>\@ne}{\let\NAT@merge\@ne}{}%
+ \def\NAT@cmprs{\z@}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\eprint}
+% RMP requires the \cmd\eprint\ field in the bib entry to be set off with the word ``eprint''.
+% \begin{macrocode}
+\def\eprint#1{eprint #1}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Table of Contents}
+%
+% We set up for auto-sizing of certain TOC elements.
+%
+% To do this, we override the definitions for
+% the default TOC font (\cmd\toc@@font),
+% and define
+% formatting for the needed elements (\cmd\l@\dots).
+% Finally, we activate the autosizing by
+% assigning \cmd\toc@pre\ and \cmd\toc@post.
+%
+% \begin{macro}{\toc@@font}
+% \changes{4.1a}{2008/01/19}{(AO, 461) Change the csname revtex uses from @dotsep to ltxu@dotsep. The former is understood in mu. (What we wanted was a dimension.)}%
+% Set the formatting characteristics of the auto-indenting part
+% of the TOC.
+% \begin{macrocode}
+\def\toc@@font{%
+ \footnotesize\rmfamily
+ \def\\{\space\ignorespaces}%
+}%
+\def\ltxu@dotsep{5.5pt}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l@section}
+% Determine which TOC elements are automatically indented.
+% \begin{macrocode}
+\def\tocleft@{\z@}%
+\def\tocdim@min{5\p@}%
+\def\l@section{%
+ \l@@sections{}{section}% Implicit #3#4
+}%
+\def\l@subsection{%
+ \l@@sections{section}{subsection}% Implicit #3#4
+}%
+\def\l@subsubsection{%
+ \l@@sections{subsection}{subsubsection}% Implicit #3#4
+}%
+%\def\l@subsubsection#1#2{}%
+\def\l@paragraph#1#2{}%
+\def\l@subparagraph#1#2{}%
+% \end{macrocode}
+% \end{macro}
+%
+% Activate the TOC processing.
+% \begin{macrocode}
+\let\toc@pre\toc@pre@auto
+\let\toc@post\toc@post@auto
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+%</rmp>
+% \end{macrocode}
+%
+%
+% \Finale
+% %Here ends the programmer's documentation.
+% \endinput
+%
+\endinput
diff --git a/obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/aip4-1.rtx b/obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/aip4-1.rtx
new file mode 100644
index 0000000000..f1227d8ff1
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/aip4-1.rtx
@@ -0,0 +1,668 @@
+%%
+%% This is file `aip4-1.rtx',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% aip.dtx (with options: `package')
+%%
+%% This is a generated file;
+%% altering it directly is inadvisable;
+%% instead, modify the original source file.
+%% See the URL in the file README.
+%%
+%% Copyright (c) 2008 American Institute of Physics.
+%% mailto:tex@aip.org
+%%
+%% Maintained by Arthur Ogawa (mailto:arthur_ogawa at sbcglobal.net)
+%% under contract to American Institute of Physics.
+%%
+%% License
+%% You may distribute this file under the conditions of the
+%% LaTeX Project Public License 1.3 or later
+%% (http://www.latex-project.org/lppl.txt).
+%%
+%% This file is distributed WITHOUT ANY WARRANTY;
+%% without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE.
+%%
+%%% @LaTeX-file{
+%%% filename = "aip.dtx",
+%%% version = "4.1r",
+%%% date = "2010/07/25",
+%%% time = "20:32:00 GMT-8",
+%%% checksum = "1163",
+%%% author = "Arthur Ogawa (mailto:arthur_ogawa at sbcglobal.net),
+%%% commissioned by the American Institute of Physics.
+%%% ",
+%%% copyright = "Copyright (C) 2008 American Institute of Physics,
+%%% distributed under the terms of the
+%%% LaTeX Project Public License, see
+%%% ftp://ctan.tug.org/macros/latex/base/lppl.txt
+%%% ",
+%%% address = "AIP Journal Program
+%%% American Institute of Physics,
+%%% Suite 1NO1, 2 Huntington Quadrangle,
+%%% Melville, NY 11747 USA",
+%%% telephone = "",
+%%% FAX = "",
+%%% email = "mailto colon tex at aip.org",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "latex, page grid, main vertical list",
+%%% supported = "yes",
+%%% abstract = "aip substyle for REVTeX",
+%%% docstring = "The checksum field above generated by ltxdoc",
+%%% }
+\NeedsTeXFormat{LaTeX2e}[1996/12/01]%
+\ProvidesFile{aip4-1.rtx}%
+ [2010/07/25 4.1r AIP substyle for REVTeX]% \fileversion
+\ifx\undefined\substyle@ext
+ \def\@tempa{%
+ \endinput
+ \GenericWarning{I must be read in by REVTeX! (Bailing out)}%
+ }%
+ \expandafter\else
+ \def\@tempa{}%
+ \expandafter\fi\@tempa
+ \class@info{RevTeX society AIP selected}%
+\DeclareOption{jcp}{\change@journal{jcp}}%
+\DeclareOption{pop}{\change@journal{pop}}%
+\DeclareOption{rsi}{\change@journal{rsi}}%
+\DeclareOption{jap}{\change@journal{jap}}%
+\DeclareOption{apl}{\change@journal{apl}}%
+\DeclareOption{cha}{\change@journal{cha}}%
+\DeclareOption{pof}{\change@journal{pof}}%
+\DeclareOption{bmf}{\change@journal{bmf}}%
+\DeclareOption{rse}{\change@journal{rse}}%
+\DeclareOption{jmp}{\change@journal{jmp}}%
+\DeclareOption{author-numerical}{%
+ \@booleantrue\authoryear@sw
+ \@booleantrue\authornum@sw
+}%
+\DeclareOption{article-title}{%
+ \@booleanfalse\aip@jtitx@sw
+}%
+\@booleantrue \aip@jtitx@sw
+\@booleanfalse\authoryear@sw
+\@booleanfalse\authornum@sw
+\appdef\@bibdataout@rev{\@bibdataout@aip}%
+\def\@bibdataout@aip{%
+ \immediate\write\@bibdataout{%
+ @CONTROL{%
+ aip41Control%
+ \longbibliography@sw{\true@sw}{\aip@jtitx@sw{\false@sw}{\true@sw}}%
+ {%
+ ,pages="1",title="0"%
+ }{%
+ ,pages="0",title=""%
+ }%
+ }%
+ }%
+ \if@filesw
+ \immediate\write\@auxout{\string\citation{aip41Control}}%
+ \fi
+}%
+\@booleantrue\preprintsty@sw
+\@booleantrue\showPACS@sw
+\@booleantrue\showKEYS@sw
+\appdef\setup@hook{%
+ \preprintsty@sw{}{%
+ \let\refname\@empty
+ }%
+}%
+\appdef\setup@hook{%
+ \preprintsty@sw{%
+ \ps@preprint
+ }{%
+ \ps@article
+ }%
+}%
+\def\ps@preprint{%
+ \def\@oddhead{\@runningtitle\hfil}%
+ \def\@evenhead{\@runningtitle\hfil}%
+ \def\@oddfoot{\hfil\thepage\quad\checkindate\hfil}%
+ \def\@evenfoot{\hfil\thepage\quad\checkindate\hfil}%
+ \let\@mkboth\@gobbletwo
+ \let\sectionmark\@gobble
+ \let\subsectionmark\@gobble
+}%
+\def\ps@article{%
+ \def\@evenhead{\let\\\heading@cr\thepage\quad\checkindate\hfil\@runningtitle}%
+ \def\@oddhead{\let\\\heading@cr\@runningtitle\hfil\checkindate\quad\thepage}%
+ \def\@oddfoot{}%
+ \def\@evenfoot{}%
+ \let\@mkboth\@gobbletwo
+ \let\sectionmark\@gobble
+ \let\subsectionmark\@gobble
+}%
+\def\@runningtitle{\@shorttitle}%
+\renewenvironment{titlepage}{%
+ \let\wastwocol@sw\twocolumn@sw
+ \onecolumngrid
+ \newpage
+ \thispagestyle{titlepage}%
+ \c@page\z@% article sets this to one not zero???
+}{%
+ \wastwocol@sw{\twocolumngrid}{\newpage}%
+}%
+\let\@fnsymbol@latex\@fnsymbol
+\let\@fnsymbol\@alph
+\def\adjust@abstractwidth{%
+ \parindent1em\relax
+ \advance\leftskip.5in\relax
+ \@totalleftmargin\leftskip
+ \@afterheading\@afterindentfalse
+}%
+\def\frontmatter@abstractheading{}%
+\def\frontmatter@abstractfont{%
+ \adjust@abstractwidth
+}%
+\appdef\setup@hook{%
+ \preprintsty@sw{%
+ \@booleantrue\titlepage@sw
+ \let\section\section@preprintsty
+ \let\subsection\subsection@preprintsty
+ \let\subsubsection\subsubsection@preprintsty
+ }{}%
+}%
+\def\frontmatter@@indent{%
+ \skip@\@flushglue
+ \@flushglue\z@ plus.3\hsize\relax
+ \raggedright
+ \advance\leftskip.5in\relax
+ \@totalleftmargin\leftskip
+ \@flushglue\skip@
+}%
+\def\frontmatter@authorformat{%
+ \frontmatter@@indent
+ \sffamily
+}%
+\renewcommand*\email[1][Electronic mail: ]{\begingroup\sanitize@url\@email{#1}}%
+\def\frontmatter@above@affilgroup{%
+}%
+\def\frontmatter@above@affiliation@script{%
+ \frontmatter@@indent
+}%
+\def\frontmatter@above@affiliation{%
+}%
+\def\frontmatter@affiliationfont{%
+ \frontmatter@@indent
+ \preprintsty@sw{}{\small}%
+ \it
+}%
+\def\frontmatter@collaboration@above{%
+}%
+\def\frontmatter@setup{%
+ \normalfont
+}%
+\def\frontmatter@title@above{\addvspace{6\p@}}%
+\def\frontmatter@title@format{%
+ \preprintsty@sw{}{\Large}%
+ \sffamily
+ \bfseries
+ \raggedright
+ \parskip\z@skip
+}%
+\def\frontmatter@title@below{\addvspace{3\p@}}%
+\def\@author@parskip{3\p@}%
+\@booleantrue\altaffilletter@sw
+\def\frontmatter@makefnmark{%
+ \@textsuperscript{%
+ \normalfont\@thefnmark%(
+ )%
+ }%
+}%
+\def\frontmatter@authorbelow{%
+\addvspace{3\p@}%
+}%
+\let\affil@cutoff\tw@
+\def\frontmatter@RRAP@format{%
+ \addvspace{5\p@}%
+ \small
+ \raggedright
+ \advance\leftskip.5in\relax
+ \@totalleftmargin\leftskip
+ \everypar{%
+ \hbox\bgroup(\@gobble@leavemode@uppercase%)
+ }%
+ \def\par{%
+ \@ifvmode{}{%(
+ \unskip)\egroup\@@par
+ }%
+ }%
+}%
+\def\punct@RRAP{;\egroup\ \hbox\bgroup}%
+\def\@gobble@leavemode@uppercase#1#2{\expandafter\MakeTextUppercase}%
+\def\frontmatter@PACS@format{%
+ \addvspace{11\p@}%
+ \adjust@abstractwidth
+ \parskip\z@skip
+ \samepage
+}%
+\def\frontmatter@keys@format{%
+ \adjust@abstractwidth
+ \samepage
+}%
+\def\ps@titlepage{%
+ \def\@oddhead{%
+ \@runningtitle
+ \hfill
+ \produce@preprints\@preprint
+ }%
+ \let\@evenhead\@oddhead
+ \def\@oddfoot{%
+ \hb@xt@\z@{\byrevtex\hss}%
+ \hfil
+ \preprintsty@sw{\thepage}{}%
+ \quad\checkindate
+ \hfil
+ }%
+ \let\@evenfoot\@oddfoot
+}%
+\def\byrevtex{\byrevtex@sw{Typeset by REV\TeX and AIP}{}}%
+\def\produce@preprints#1{%
+ \preprint@sw{%
+ \vtop to \z@{%
+ \def\baselinestretch{1}%
+ \small
+ \let\preprint\preprint@count
+ \count@\z@#1\@ifnum{\count@>\tw@}{%
+ \hbox{%
+ \let\preprint\preprint@hlist
+ #1\setbox\z@\lastbox
+ }%
+ }{%
+ \let\preprint\preprint@cr
+ \halign{\hfil##\cr#1\crcr}%
+ \par
+ \vss
+ }%
+ }%
+ }{}%
+}%
+\def\preprint@cr#1{#1\cr}%
+\def\preprint@count#1{\advance\count@\@ne}%
+\def\preprint@hlist#1{#1\hbox{, }}%
+\newenvironment{Lead@inParagraph}{%
+ \par
+ \bfseries
+ \@afterheading\@afterindentfalse
+}{%
+ \par
+ \hb@xt@\hsize{\hfil\leaders\hrule\hfil\leaders\hrule\hfil\hfil}%
+}%
+\appdef\frontmatter@init{%
+ \let@environment{quotation@ltx}{quotation}%
+ \let@environment{quotation}{Lead@inParagraph}%
+}%
+\appdef\@startsection@hook{%
+ \let@environment{quotation}{quotation@ltx}%
+}%
+\def\@seccntformat#1{\csname the#1\endcsname.\quad}%
+\def\@hang@from#1#2#3{#1#2#3}%
+\def\section{%
+ \@startsection
+ {section}%
+ {1}%
+ {\z@}%
+ {0.8cm \@plus1ex \@minus .2ex}%
+ {0.5cm}%
+ {%
+ \normalfont
+ \small
+ \sffamily
+ \bfseries
+ \raggedright
+ }%
+}%
+\def\@hangfrom@section#1#2#3{\@hangfrom{#1#2}\MakeTextUppercase{#3}}%
+\def\@hangfroms@section#1#2{#1\MakeTextUppercase{#2}}%
+\def\subsection{%
+ \@startsection
+ {subsection}%
+ {2}%
+ {\z@}%
+ {.8cm \@plus1ex \@minus .2ex}%
+ {.5cm}%
+ {%
+ \normalfont
+ \small
+ \sffamily
+ \bfseries
+ \raggedright
+ }%
+}%
+\def\subsubsection{%
+ \@startsection
+ {subsubsection}%
+ {3}%
+ {\z@}%
+ {.8cm \@plus1ex \@minus .2ex}%
+ {.5cm}%
+ {%
+ \normalfont
+ \small
+ \sffamily
+ \bfseries
+ \itshape
+ \raggedright
+ }%
+}%
+\def\paragraph{%
+ \@startsection
+ {paragraph}%
+ {4}%
+ {\parindent}%
+ {\z@}%
+ {-1em}%
+ {\normalfont\normalsize\itshape}%
+}%
+\def\subparagraph{%
+ \@startsection
+ {subparagraph}%
+ {5}%
+ {\parindent}%
+ {3.25ex \@plus1ex \@minus .2ex}%
+ {-1em}%
+ {\normalfont\normalsize\bfseries}%
+}%
+\def\section@preprintsty{%
+ \@startsection
+ {section}%
+ {1}%
+ {\z@}%
+ {0.8cm \@plus1ex \@minus .2ex}%
+ {0.5cm}%
+ {%
+ \normalfont
+ \bfseries
+ \raggedright
+ }%
+}%
+\def\subsection@preprintsty{%
+ \@startsection
+ {subsection}%
+ {2}%
+ {\z@}%
+ {.8cm \@plus1ex \@minus .2ex}%
+ {.5cm}%
+ {%
+ \normalfont
+ \bfseries
+ \raggedright
+ }%
+}%
+\def\subsubsection@preprintsty{%
+ \@startsection
+ {subsubsection}%
+ {3}%
+ {\z@}%
+ {.8cm \@plus1ex \@minus .2ex}%
+ {.5cm}%
+ {%
+ \normalfont
+ \itshape\bfseries
+ \raggedright
+ }%
+}%
+\let\frontmatter@footnote@produce\frontmatter@footnote@produce@footnote
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{2}
+\def\ltxu@dotsep{4.5pt}
+\setcounter{tocdepth}{3}
+\def\tableofcontents{%
+ \addtocontents{toc}{\string\tocdepth@munge}%
+ \print@toc{toc}%
+ \addtocontents{toc}{\string\tocdepth@restore}%
+}%
+\def\tocdepth@munge{%
+ \let\l@section@saved\l@section
+ \let\l@section\@gobble@tw@
+}%
+\def\@gobble@tw@#1#2{}%
+\def\tocdepth@restore{%
+ \let\l@section\l@section@saved
+}%
+\def\l@part#1#2{\addpenalty{\@secpenalty}%
+ \begingroup
+ \set@tocdim@pagenum{#2}%
+ \parindent \z@
+ \rightskip\tocleft@pagenum plus 1fil\relax
+ \skip@\parfillskip\parfillskip\z@
+ \addvspace{2.25em plus\p@}%
+ \large \bf %
+ \leavevmode\ignorespaces#1\unskip\nobreak\hskip\skip@
+ \hb@xt@\rightskip{\hfil\unhbox\z@}\hskip-\rightskip\hskip\z@skip
+ \par
+ \nobreak %
+ \endgroup
+}%
+\def\tocleft@{\z@}%
+\def\tocdim@min{5\p@}%
+\def\l@section{%
+ \l@@sections{}{section}% Implicit #3#4
+}%
+\def\l@f@section{%
+ \addpenalty{\@secpenalty}%
+ \addvspace{1.0em plus\p@}%
+ \bf
+}%
+\def\l@subsection{%
+ \l@@sections{section}{subsection}% Implicit #3#4
+}%
+\def\l@subsubsection{%
+ \l@@sections{subsection}{subsubsection}% Implicit #3#4
+}%
+\def\l@paragraph#1#2{}%
+\def\l@subparagraph#1#2{}%
+\let\toc@pre\toc@pre@auto
+\let\toc@post\toc@post@auto
+\def\listoffigures{\print@toc{lof}}%
+\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
+\def\listoftables{\print@toc{lot}}%
+\let\l@table\l@figure
+\@booleanfalse\raggedcolumn@sw
+\def\tableft@skip@float{\z@ plus\hsize}%
+\def\tabmid@skip@float{\@flushglue}%
+\def\tabright@skip@float{\z@ plus\hsize}%
+\def\array@row@pre@float{\hline\hline\noalign{\vskip\doublerulesep}}%
+\def\array@row@pst@float{\noalign{\vskip\doublerulesep}\hline\hline}%
+\def\@makefntext#1{%
+ \def\baselinestretch{1}%
+ \leftskip1em%
+ \parindent1em%
+ \noindent
+ \nobreak\hskip-\leftskip
+ \hb@xt@\leftskip{%
+ \hss\@makefnmark\ %
+ }%
+ #1%
+ \par
+}%
+\prepdef\appendix{%
+ \par
+ \let\@hangfrom@section\@hangfrom@appendix
+ \let\@sectioncntformat\@appendixcntformat
+}%
+\def\@hangfrom@appendix#1#2#3{%
+ #1%
+ \@if@empty{#2}{%
+ #3%
+ }{%
+ #2\@if@empty{#3}{}{:\ #3}%
+ }%
+}%
+\def\@hangfroms@appendix#1#2{%
+ #1#2%
+}%
+\def\@appendixcntformat#1{\appendixname\ \csname the#1\endcsname}%
+ \def\pre@bibdata{\jobname\bibdata@app}%
+\def\refname{References}%
+\def\rtx@bibsection{%
+ \@ifx@empty\refname{%
+ \par\vspace{6\p@ plus 6\p@}%
+ }{%
+ \expandafter\section\expandafter*\expandafter{\refname}%
+ \@nobreaktrue
+ }%
+}%
+\let\bibpreamble\@empty
+\appdef\setup@hook{%
+ \bibsep\z@\relax
+}%
+\def\newblock{\ }%
+\appdef\setup@hook{%
+ \def\bibfont{%
+ \preprintsty@sw{}{\footnotesize}%
+ \@clubpenalty\clubpenalty
+ \labelsep\z@
+ }%
+}%
+\let\place@bibnumber\place@bibnumber@sup
+\newenvironment{theindex}{%
+ \columnseprule \z@
+ \columnsep 35\p@
+ \c@secnumdepth-\maxdimen
+ \onecolumngrid@push
+ \section{\indexname}%
+ \thispagestyle{plain}%
+ \parindent\z@
+ \parskip\z@ plus.3\p@\relax
+ \let\item\@idxitem
+ \onecolumngrid@pop
+}{%
+}%
+\def\@idxitem{\par\hangindent 40\p@}
+\def\subitem{\par\hangindent 40\p@ \hspace*{20\p@}}
+\def\subsubitem{\par\hangindent 40\p@ \hspace*{30\p@}}
+\def\indexspace{\par \vskip 10\p@ plus5\p@ minus3\p@\relax}
+\expandafter\def\csname rtx@aip10pt\endcsname{%
+ \let\@currname@class\@currname
+ \def\@currname{aps10pt\substyle@post}%
+ \class@info{Reading file \@currname.\substyle@ext}%
+ \input{\@currname.\substyle@ext}%
+ \let\@currname\@currname@class
+ \class@info{Overriding 10pt}%
+ \aipreprint
+}%
+\expandafter\def\csname rtx@aip11pt\endcsname{\csname rtx@aip12pt\endcsname}%
+\expandafter\def\csname rtx@aip12pt\endcsname{%
+ \let\@currname@class\@currname
+ \def\@currname{aps12pt\substyle@post}%
+ \class@info{Reading file \@currname.\substyle@ext}%
+ \input{\@currname.\substyle@ext}%
+ \let\@currname\@currname@class
+ \class@info{Overriding 12pt}%
+ \aippreprint
+}%
+\def\today{%
+ \number\day\space
+ \ifcase\month
+ \or January\or February\or March\or April\or May\or June%
+ \or July\or August\or September\or October\or November\or December%
+ \fi\space
+ \number\year
+}%
+ \clo@superscriptaddress
+\def\@journal@default{cha}%
+\def\@pointsize@default{12}%
+\def\rtx@aipjcp{%
+ \typeout{Using journal substyle \@journal.}%
+ \@booleanfalse\authoryear@sw
+}%
+\def\rtx@aippop{%
+ \typeout{Using journal substyle \@journal.}%
+ \@booleanfalse\authoryear@sw
+}%
+\def\rtx@aiprsi{%
+ \typeout{Using journal substyle \@journal.}%
+ \@booleanfalse\authoryear@sw
+}%
+\def\rtx@aipjap{%
+ \typeout{Using journal substyle \@journal.}%
+ \@booleanfalse\authoryear@sw
+ \let\@runningtitle\@empty
+}%
+\def\rtx@aipapl{%
+ \typeout{Using journal substyle \@journal.}%
+ \@booleanfalse\authoryear@sw
+ \let\@runningtitle\@empty
+}%
+\def\rtx@aipcha{%
+ \typeout{Using journal substyle \@journal.}%
+ \@booleanfalse\aip@jtitx@sw
+}%
+\def\rtx@aippof{%
+ \typeout{Using journal substyle \@journal.}%
+ \@booleanfalse\authoryear@sw
+ \@booleanfalse\aip@jtitx@sw
+}%
+\def\rtx@aipbmf{%
+ \typeout{Using journal substyle \@journal.}%
+ \@booleanfalse\authoryear@sw
+ \@booleanfalse\twocolumn@sw
+}%
+\def\rtx@aiprse{%
+ \typeout{Using journal substyle \@journal.}%
+ \@booleanfalse\authoryear@sw
+}%
+\def\rtx@aipjmp{%
+ \typeout{Using journal substyle \@journal.}%
+ \@booleanfalse\aip@jtitx@sw
+ \@booleanfalse\twocolumn@sw
+}%
+\@booleantrue\footinbib@sw
+\let\place@bibnumber\place@bibnumber@sup
+\appdef\setup@hook{%
+ \authoryear@sw{%
+ \aip@jtitx@sw{%
+ \def\@bibstyle{aipauth\substyle@post}%
+ }{%
+ \def\@bibstyle{aipauth\substyle@post}%
+ }%
+ \authornum@sw{%
+ \bibpunct{}{}{,}{s}{}{\textsuperscript{,}}%
+ \let\onlinecite\rev@citealpnum
+ }{%
+ \bibhang10\p@
+ \bibpunct{(%)
+ }{%(
+ )}{; }{a}{,}{,}%
+ \@booleanfalse\footinbib@sw
+ \let\NAT@mcite\@ne
+ \let\NAT@sort\z@
+ \def\NAT@cmprs{\z@}%
+ \let\NAT@def@citea\rtx@def@citea
+ \let\NAT@def@citea@close\rtx@def@citea@close
+ }%
+ }{%
+ \aip@jtitx@sw{%
+ \def\@bibstyle{aipnum\substyle@post}%
+ }{%
+ \def\@bibstyle{aipnum\substyle@post}%
+ }%
+ \bibpunct{}{}{,}{s}{}{\textsuperscript{,}}%
+ \let\onlinecite\rev@citealpnum
+ }%
+}%
+\def\make@footnote@endnote{%
+ \footinbib@sw{%
+ \authoryear@sw{\authornum@sw{\false@sw}{\true@sw}}{\false@sw}%
+ {}{%
+ \ltx@footnote@push
+ \def\thempfn{Note\thefootnote}%
+ \let\ltx@footmark\rev@citemark
+ \let\ltx@foottext\rev@endtext
+ \appdef\class@enddocumenthook{\auto@bib}%
+ \let\printendnotes\relax
+ }%
+ }{}%
+}%
+\def\aipreprint{%
+}%
+\def\aippreprint{%
+}%
+\endinput
+%%
+%% End of file `aip4-1.rtx'.
diff --git a/obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/aps10pt4-1.rtx b/obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/aps10pt4-1.rtx
new file mode 100644
index 0000000000..d50f6dc959
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/aps10pt4-1.rtx
@@ -0,0 +1,177 @@
+%%
+%% This is file `aps10pt4-1.rtx',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% revtex4-1.dtx (with options: `10pt')
+%%
+%% This file is part of the APS files in the REVTeX 4 distribution.
+%% For the version number, search on the string
+%% Original version by David Carlisle
+%% Modified by Arthur Ogawa (mailto:arthur_ogawa at sbcglobal dot net)
+%%
+%% Copyright (c) 2009 The American Physical Society.
+%% http://publish.aps.org/revtex4/
+%% mailto:revtex4@aps.org
+%%
+%% See the REVTeX 4 README file for restrictions and more information.
+%%
+\ProvidesFile{aps10pt4-1}
+ [2010/07/25/20:33:00 4.1r (http://publish.aps.org/revtex4/ for documentation)]% \fileversion
+\ifx\undefined\substyle@ext
+ \def\@tempa{%
+ \endinput
+ \GenericWarning{I must be read in by REVTeX! (Bailing out)}%
+ }%
+ \expandafter\else
+ \def\@tempa{}%
+ \expandafter\fi\@tempa
+ \class@info{RevTeX pointsize 10pt selected}%
+\def\normalsize{%
+ \@setfontsize\normalsize\@xpt{11.5}%
+ \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \abovedisplayskip
+ \belowdisplayshortskip \abovedisplayskip
+ \let\@listi\@listI
+}%
+\def\small{%
+ \@setfontsize\small\@ixpt{10.5}%
+ \abovedisplayskip 8.5\p@ \@plus3\p@ \@minus4\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ \@plus2\p@
+ \belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@
+ \def\@listi{%
+ \leftmargin\leftmargini
+ \topsep 4\p@ \@plus2\p@ \@minus2\p@
+ \parsep 2\p@ \@plus\p@ \@minus\p@
+ \itemsep \parsep
+ }%
+}%
+\def\footnotesize{%
+ \@setfontsize\footnotesize\@viiipt{9.5pt}%
+ \abovedisplayskip 6\p@ \@plus2\p@ \@minus4\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ \@plus\p@
+ \belowdisplayshortskip 3\p@ \@plus\p@ \@minus2\p@
+ \def\@listi{%
+ \leftmargin\leftmargini
+ \topsep 3\p@ \@plus\p@ \@minus\p@
+ \parsep 2\p@ \@plus\p@ \@minus\p@
+ \itemsep \parsep
+ }%
+}%
+\def\scriptsize{%
+ \@setfontsize\scriptsize\@viipt\@viiipt
+}%
+\def\tiny{%
+ \@setfontsize\tiny\@vpt\@vipt
+}%
+\def\large{%
+ \@setfontsize\large\@xiipt{14pt}%
+}%
+\def\Large{%
+ \@setfontsize\Large\@xivpt{18pt}%
+}%
+\def\LARGE{%
+ \@setfontsize\LARGE\@xviipt{22pt}%
+}%
+\def\huge{%
+ \@setfontsize\huge\@xxpt{25pt}%
+}%
+\def\Huge{%
+ \@setfontsize\Huge\@xxvpt{30pt}%
+}%
+\appdef\setup@hook{%
+ \twoside@sw{%
+ \oddsidemargin -20pt
+ \evensidemargin -20pt
+ \marginparwidth 107pt
+ }{%
+ \oddsidemargin -.25in
+ \evensidemargin -.25in
+ \marginparwidth 30pt
+ }%
+}%
+\marginparsep 6pt
+\topmargin -61pt
+\headheight 25pt
+\headsep 16pt
+\topskip 10pt
+\splittopskip\topskip
+\footskip 30pt
+ \textheight = 56pc
+\textwidth42.5pc
+\columnsep 1.5pc
+\columnseprule 0pt
+\footnotesep 1pt
+\skip\footins 39pt plus 4pt minus 12pt
+\def\footnoterule{%
+ \dimen@\skip\footins\divide\dimen@\tw@
+ \kern-\dimen@\hrule width.5in\kern\dimen@
+}%
+\floatsep 12pt plus 2pt minus 2pt
+\textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 12pt plus 2pt minus 2pt
+\dblfloatsep 12pt plus 2pt minus 2pt
+\dbltextfloatsep 20pt plus 2pt minus 4pt
+\@fptop 0pt plus 1fil
+\@fpsep 8pt plus 2fil
+\@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil
+\@dblfpsep 8pt plus 2fil
+\@dblfpbot 0pt plus 1fil
+\marginparpush 5pt
+\parskip 0pt plus 1pt
+\parindent 10pt
+\emergencystretch8\p@
+\partopsep 2pt plus 1pt minus 1pt
+\leftmargini 25pt
+\leftmarginii 22pt
+\leftmarginiii 18.7pt
+\leftmarginiv 17pt
+\leftmarginv 10pt
+\leftmarginvi 10pt
+\def\@listI{%
+ \leftmargin\leftmargini
+ \parsep 4\p@ plus2\p@ minus\p@
+ \topsep 8\p@ plus2\p@ minus4\p@
+ \itemsep 4\p@ plus2\p@ minus\p@
+}%
+\labelsep 4pt
+\def\@listii{%
+ \leftmargin\leftmarginii
+ \labelwidth\leftmarginii
+ \advance\labelwidth-\labelsep
+ \topsep 4\p@ plus2\p@ minus\p@
+ \parsep 2\p@ plus\p@ minus\p@
+ \itemsep \parsep
+}%
+\def\@listiii{%
+ \leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii
+ \advance\labelwidth-\labelsep
+ \topsep 2\p@ plus\p@ minus\p@
+ \parsep \z@
+ \partopsep \p@ plus\z@ minus\p@
+ \itemsep \topsep
+}%
+\def\@listiv{%
+ \leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv
+ \advance\labelwidth-\labelsep
+}%
+\def\@listv{%
+ \leftmargin\leftmarginv
+ \labelwidth\leftmarginv
+ \advance\labelwidth-\labelsep
+}%
+\def\@listvi{%
+ \leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi
+ \advance\labelwidth-\labelsep
+}%
+\endinput
+%%
+%% End of file `aps10pt4-1.rtx'.
diff --git a/obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/aps11pt4-1.rtx b/obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/aps11pt4-1.rtx
new file mode 100644
index 0000000000..926155328a
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/aps11pt4-1.rtx
@@ -0,0 +1,169 @@
+%%
+%% This is file `aps11pt4-1.rtx',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% revtex4-1.dtx (with options: `11pt')
+%%
+%% This file is part of the APS files in the REVTeX 4 distribution.
+%% For the version number, search on the string
+%% Original version by David Carlisle
+%% Modified by Arthur Ogawa (mailto:arthur_ogawa at sbcglobal dot net)
+%%
+%% Copyright (c) 2009 The American Physical Society.
+%% http://publish.aps.org/revtex4/
+%% mailto:revtex4@aps.org
+%%
+%% See the REVTeX 4 README file for restrictions and more information.
+%%
+\ProvidesFile{aps11pt4-1}
+ [2010/07/25/20:33:00 4.1r (http://publish.aps.org/revtex4/ for documentation)]% \fileversion
+\ifx\undefined\substyle@ext
+ \def\@tempa{%
+ \endinput
+ \GenericWarning{I must be read in by REVTeX! (Bailing out)}%
+ }%
+ \expandafter\else
+ \def\@tempa{}%
+ \expandafter\fi\@tempa
+ \class@info{RevTeX pointsize 11pt selected}%
+\def\normalsize{%
+ \@setfontsize\normalsize\@xipt{13.6}%
+ \abovedisplayskip 11\p@ \@plus3\p@ \@minus6\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \abovedisplayskip
+ \belowdisplayshortskip \abovedisplayskip
+ \let\@listi\@listI
+}%
+\def\small{%
+ \@setfontsize\small\@xpt\@xiipt
+ \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@
+ \abovedisplayshortskip \z@ \@plus3\p@
+ \belowdisplayshortskip 6\p@ \@plus3\p@ \@minus3\p@
+ \def\@listi{\leftmargin\leftmargini
+ \topsep 6\p@ \@plus2\p@ \@minus2\p@
+ \parsep 3\p@ \@plus2\p@ \@minus\p@
+ \itemsep \parsep
+ }%
+ \belowdisplayskip \abovedisplayskip
+}%
+\def\footnotesize{%
+ \@setfontsize\footnotesize\@ixpt{11}%
+ \abovedisplayskip 8\p@ \@plus2\p@ \@minus4\p@
+ \abovedisplayshortskip \z@ \@plus\p@
+ \belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@
+ \def\@listi{\leftmargin\leftmargini
+ \topsep 4\p@ \@plus2\p@ \@minus2\p@
+ \parsep 2\p@ \@plus\p@ \@minus\p@
+ \itemsep \parsep
+ }%
+ \belowdisplayskip \abovedisplayskip
+}%
+\def\scriptsize{%
+ \@setfontsize\scriptsize\@viiipt{9.5}%
+}%
+\def\tiny{%
+ \@setfontsize\tiny\@vipt\@viipt
+}%
+\def\large{%
+ \@setfontsize\large\@xiipt{14}%
+}%
+\def\Large{%
+ \@setfontsize\Large\@xivpt{18}%
+}%
+\def\LARGE{%
+ \@setfontsize\LARGE\@xviipt{22}%
+}%
+\def\huge{%
+ \@setfontsize\huge\@xxpt{25pt}%
+}%
+\def\Huge{%
+ \@setfontsize\Huge\@xxvpt{30pt}%
+}%
+\appdef\setup@hook{%
+ \twoside@sw{%
+ \oddsidemargin 0pt
+ \evensidemargin 0pt
+ \marginparwidth 60pt
+ }{%
+ \oddsidemargin 0pt
+ \evensidemargin 0pt
+ \marginparwidth 44pt
+ }%
+}%
+\marginparsep 10pt
+\topmargin -37pt
+\headheight 12pt
+\headsep 25pt
+\topskip 10pt
+\splittopskip\topskip
+\footskip 30pt
+\textheight=665.5\p@
+\appdef\setup@hook{%
+ \tightenlines@sw{%
+ \def\baselinestretch{1}%
+ }{%
+ \def\baselinestretch{1.5}%
+ }%
+}%
+\textwidth 468pt
+\columnsep 10pt
+\columnseprule 0pt
+\footnotesep 1pt
+\skip\footins 25.25pt plus 4pt minus 12pt
+\def\footnoterule{%
+ \dimen@\skip\footins\divide\dimen@\f@ur
+ \kern-\dimen@\hrule width.5in\kern\dimen@
+}%
+\floatsep 14pt plus 2pt minus 4pt
+\textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 14pt plus 4pt minus 4pt
+\dblfloatsep 14pt plus 2pt minus 4pt
+\dbltextfloatsep 20pt plus 2pt minus 4pt
+\@fptop 0pt plus 1fil
+\@fpsep 10pt plus 2fil
+\@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil
+\@dblfpsep 10pt plus 2fil%
+\@dblfpbot 0pt plus 1fil
+\marginparpush 7pt
+\parskip 0pt plus 1pt
+\parindent 15pt
+\emergencystretch8\p@
+\partopsep 3pt plus 2pt minus 2pt
+\leftmargini 30pt
+\leftmarginii 26pt
+\leftmarginiii 22pt
+\leftmarginiv 20pt
+\leftmarginv 12pt
+\leftmarginvi 12pt
+\def\@listI{\leftmargin\leftmargini \parsep 5\p@ plus2.5\p@ minus\p@
+ \topsep 10\p@ plus4\p@ minus6\p@
+ \itemsep 5\p@ plus2.5\p@ minus\p@
+}%
+\labelsep 6pt
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 5\p@ plus2.5\p@ minus\p@
+ \parsep 2.5\p@ plus\p@ minus\p@
+ \itemsep \parsep
+}%
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2.5\p@ plus\p@ minus\p@
+ \parsep \z@ \partopsep \p@ plus\z@ minus\p@
+ \itemsep \topsep
+}%
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep
+}%
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep
+}%
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep
+}%
+\endinput
+%%
+%% End of file `aps11pt4-1.rtx'.
diff --git a/obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/aps12pt4-1.rtx b/obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/aps12pt4-1.rtx
new file mode 100644
index 0000000000..1ee76ff6be
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/aps12pt4-1.rtx
@@ -0,0 +1,169 @@
+%%
+%% This is file `aps12pt4-1.rtx',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% revtex4-1.dtx (with options: `12pt')
+%%
+%% This file is part of the APS files in the REVTeX 4 distribution.
+%% For the version number, search on the string
+%% Original version by David Carlisle
+%% Modified by Arthur Ogawa (mailto:arthur_ogawa at sbcglobal dot net)
+%%
+%% Copyright (c) 2009 The American Physical Society.
+%% http://publish.aps.org/revtex4/
+%% mailto:revtex4@aps.org
+%%
+%% See the REVTeX 4 README file for restrictions and more information.
+%%
+\ProvidesFile{aps12pt4-1}
+ [2010/07/25/20:33:00 4.1r (http://publish.aps.org/revtex4/ for documentation)]% \fileversion
+\ifx\undefined\substyle@ext
+ \def\@tempa{%
+ \endinput
+ \GenericWarning{I must be read in by REVTeX! (Bailing out)}%
+ }%
+ \expandafter\else
+ \def\@tempa{}%
+ \expandafter\fi\@tempa
+ \class@info{RevTeX pointsize 12pt selected}%
+\def\normalsize{%
+ \@setfontsize\normalsize\@xiipt{14pt}%
+ \abovedisplayskip 12\p@ \@plus3\p@ \@minus7\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus3\p@
+ \belowdisplayshortskip 6.5\p@ \@plus3.5\p@ \@minus3\p@
+ \let\@listi\@listI
+}%
+ \def\small{%
+ \@setfontsize\small\@xipt{14.5pt}%
+ \abovedisplayskip 8\p@ \@plus3\p@ \@minus6\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ \@plus3\p@
+ \belowdisplayshortskip 6.5\p@ \@plus3.5\p@ \@minus3\p@
+ \def\@listi{%
+ \leftmargin\leftmargini
+ \topsep 9\p@ \@plus3\p@ \@minus5\p@
+ \parsep 4.5\p@ \@plus2\p@ \@minus\p@
+ \itemsep \parsep
+ }%
+}%
+ \def\footnotesize{%
+ \@setfontsize\footnotesize\@xpt{14.5pt}%
+ \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ \@plus3\p@
+ \belowdisplayshortskip 6\p@ \@plus3\p@ \@minus3\p@
+ \def\@listi{%
+ \leftmargin\leftmargini
+ \topsep 6\p@ \@plus2\p@ \@minus2\p@
+ \parsep 3\p@ \@plus2\p@ \@minus\p@
+ \itemsep \parsep
+ }%
+}%
+\def\scriptsize{%
+ \@setfontsize\scriptsize\@viiipt{9.5pt}%
+}%
+\def\tiny{%
+ \@setfontsize\tiny\@vipt{7pt}%
+}%
+\def\large{%
+ \@setfontsize\large\@xivpt{18pt}%
+}%
+\def\Large{%
+ \@setfontsize\Large\@xviipt{22pt}%
+}%
+\def\LARGE{%
+ \@setfontsize\LARGE\@xxpt{25pt}%
+}%
+\def\huge{%
+ \@setfontsize\huge\@xxvpt{30pt}%
+}%
+\let\Huge=\huge
+\appdef\setup@hook{%
+ \twoside@sw{%
+ \oddsidemargin 0pt
+ \evensidemargin 0pt
+ \marginparwidth 60pt
+ }{%
+ \oddsidemargin 0pt
+ \evensidemargin 0pt
+ \marginparwidth 44pt
+ }%
+}%
+\marginparsep 10pt
+\topmargin -37pt
+\headheight 12pt
+\headsep 25pt
+\topskip 10pt
+\splittopskip\topskip
+\footskip 30pt
+\textheight=665.5\p@
+\appdef\setup@hook{%
+ \tightenlines@sw{%
+ \def\baselinestretch{1}%
+ }{%
+ \def\baselinestretch{1.5}%
+ }%
+}%
+\textwidth 468pt
+\columnsep 10pt
+\columnseprule 0pt
+\footnotesep 1pt
+\skip\footins 25.25pt plus 4pt minus 12pt
+\def\footnoterule{%
+ \dimen@\skip\footins\divide\dimen@\f@ur
+ \kern-\dimen@\hrule width.5in\kern\dimen@
+}%
+\floatsep 14pt plus 2pt minus 4pt
+\textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 14pt plus 4pt minus 4pt
+\dblfloatsep 14pt plus 2pt minus 4pt
+\dbltextfloatsep 20pt plus 2pt minus 4pt
+\@fptop 0pt plus 1fil
+\@fpsep 10pt plus 2fil
+\@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil
+\@dblfpsep 10pt plus 2fil%
+\@dblfpbot 0pt plus 1fil
+\marginparpush 7pt
+\parskip 0pt plus 1pt
+\parindent 15pt
+\emergencystretch8\p@
+\partopsep 3pt plus 2pt minus 2pt
+\leftmargini 30pt
+\leftmarginii 26pt
+\leftmarginiii 22pt
+\leftmarginiv 20pt
+\leftmarginv 12pt
+\leftmarginvi 12pt
+\def\@listI{\leftmargin\leftmargini \parsep 5\p@ plus2.5\p@ minus\p@
+ \topsep 10\p@ plus4\p@ minus6\p@
+ \itemsep 5\p@ plus2.5\p@ minus\p@
+}%
+\labelsep 6pt
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 5\p@ plus2.5\p@ minus\p@
+ \parsep 2.5\p@ plus\p@ minus\p@
+ \itemsep \parsep
+}%
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2.5\p@ plus\p@ minus\p@
+ \parsep \z@ \partopsep \p@ plus\z@ minus\p@
+ \itemsep \topsep
+}%
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep
+}%
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep
+}%
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep
+}%
+\endinput
+%%
+%% End of file `aps12pt4-1.rtx'.
diff --git a/obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/aps4-1.rtx b/obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/aps4-1.rtx
new file mode 100644
index 0000000000..0a4e8359d0
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/aps4-1.rtx
@@ -0,0 +1,641 @@
+%%
+%% This is file `aps4-1.rtx',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% revtex4-1.dtx (with options: `aps')
+%%
+%% This file is part of the APS files in the REVTeX 4 distribution.
+%% For the version number, search on the string
+%% Original version by David Carlisle
+%% Modified by Arthur Ogawa (mailto:arthur_ogawa at sbcglobal dot net)
+%%
+%% Copyright (c) 2009 The American Physical Society.
+%% http://publish.aps.org/revtex4/
+%% mailto:revtex4@aps.org
+%%
+%% See the REVTeX 4 README file for restrictions and more information.
+%%
+\NeedsTeXFormat{LaTeX2e}[1996/12/01]%
+\ProvidesFile{aps4-1}
+ [2010/07/25/20:33:00 4.1r (http://publish.aps.org/revtex4/ for documentation)]% \fileversion
+\ifx\undefined\substyle@ext
+ \def\@tempa{%
+ \endinput
+ \GenericWarning{I must be read in by REVTeX! (Bailing out)}%
+ }%
+ \expandafter\else
+ \def\@tempa{}%
+ \expandafter\fi\@tempa
+ \class@info{RevTeX society APS selected}%
+\DeclareOption{pra}{\change@journal{pra}}%
+\DeclareOption{prb}{\change@journal{prb}}%
+\DeclareOption{prc}{\change@journal{prc}}%
+\DeclareOption{prd}{\change@journal{prd}}%
+\DeclareOption{pre}{\change@journal{pre}}%
+\DeclareOption{prl}{\change@journal{prl}}%
+\DeclareOption{prstab}{\change@journal{prstab}}%
+\DeclareOption{prstper}{\change@journal{prstper}}%
+\DeclareOption{rmp}{\change@journal{rmp}}%
+\def\ao{Appl.\ Opt.}%
+\def\ap{Appl.\ Phys.}%
+\def\apl{Appl.\ Phys.\ Lett.}%
+\def\apj{Astrophys.\ J.}%
+\def\bell{Bell Syst.\ Tech.\ J.}%
+\def\jqe{IEEE J.\ Quantum Electron.}%
+\def\assp{IEEE Trans.\ Acoust.\ Speech Signal Process.}%
+\def\aprop{IEEE Trans.\ Antennas Propag.}%
+\def\mtt{IEEE Trans.\ Microwave Theory Tech.}%
+\def\iovs{Invest.\ Ophthalmol.\ Vis.\ Sci.}%
+\def\jcp{J.\ Chem.\ Phys.}%
+\def\jmo{J.\ Mod.\ Opt.}%
+\def\josa{J.\ Opt.\ Soc.\ Am.}%
+\def\josaa{J.\ Opt.\ Soc.\ Am.\ A}%
+\def\josab{J.\ Opt.\ Soc.\ Am.\ B}%
+\def\jpp{J.\ Phys.\ (Paris)}%
+\def\nat{Nature (London)}%
+\def\oc{Opt.\ Commun.}%
+\def\ol{Opt.\ Lett.}%
+\def\pl{Phys.\ Lett.}%
+\def\pra{Phys.\ Rev.\ A}%
+\def\prb{Phys.\ Rev.\ B}%
+\def\prc{Phys.\ Rev.\ C}%
+\def\prd{Phys.\ Rev.\ D}%
+\def\pre{Phys.\ Rev.\ E}%
+\def\prl{Phys.\ Rev.\ Lett.}%
+\def\rmp{Rev.\ Mod.\ Phys.}%
+\def\pspie{Proc.\ Soc.\ Photo-Opt.\ Instrum.\ Eng.}%
+\def\sjqe{Sov.\ J.\ Quantum Electron.}%
+\def\vr{Vision Res.}%
+\def\@fnsymbol#1{%
+ \ensuremath{%
+ \ifcase#1\or
+ *\or
+ \dagger\or
+ \ddagger\or
+ \mathsection\or
+ \mathparagraph\or
+ **\or
+ \dagger\dagger\or
+ \ddagger\ddagger\else
+ \mathsection\mathsection\or
+ \mathparagraph\mathparagraph\or
+ ***\or
+ \dagger\dagger\dagger\or
+ \ddagger\ddagger\ddagger\else
+ \mathsection\mathsection\mathsection\or
+ \mathparagraph\mathparagraph\mathparagraph\or
+ \@ctrerr
+ \fi
+ }%
+}%
+\appdef\document@inithook{%
+ \@ifxundefined\TextOrMath{%
+ \DeclareRobustCommand\TextOrMath{\@ifmmode{\false@sw}{\true@sw}}%
+ }{}%
+}%
+\let\thefootnote@latex\thefootnote
+\clo@groupedaddress
+\renewenvironment{titlepage}{%
+ \let\wastwocol@sw\twocolumn@sw
+ \onecolumngrid
+ \newpage
+ \thispagestyle{titlepage}%
+ \c@page\z@
+}{%
+ \wastwocol@sw{\twocolumngrid}{\newpage}%
+}%
+\def\frontmatter@abstractheading{%
+ \preprintsty@sw{%
+ \begingroup
+ \centering\large
+ \abstractname
+ \par
+ \endgroup
+ }{}%
+}%
+\def\frontmatter@abstractwidth{400\p@}%
+\def\frontmatter@abstractfont{%
+ \small
+ \parindent1em\relax
+ \adjust@abstractwidth
+}%
+\def\adjust@abstractwidth{%
+ \dimen@\textwidth\advance\dimen@-\frontmatter@abstractwidth
+ \divide\dimen@\tw@
+ \galley@sw{%
+ \advance\rightskip\tw@\dimen@
+ }{%
+ \advance\leftskip\dimen@
+ \advance\rightskip\dimen@
+ }%
+ \@totalleftmargin\leftskip
+}%
+\@booleanfalse\preprintsty@sw
+\@booleantrue\titlepage@sw
+\appdef\setup@hook{%
+ \preprintsty@sw{%
+ \ps@preprint
+ \def\frontmatter@abstractwidth{\textwidth}%
+ \def\frontmatter@affiliationfont{\it}%
+ \let\section\section@preprintsty
+ \let\subsection\subsection@preprintsty
+ \let\subsubsection\subsubsection@preprintsty
+ }{%
+ \ps@article
+ }%
+}%
+\def\frontmatter@authorformat{%
+ \skip@\@flushglue
+ \@flushglue\z@ plus.3\hsize\relax
+ \centering
+ \advance\baselineskip\p@
+ \parskip11.5\p@\relax
+ \@flushglue\skip@
+}%
+\def\frontmatter@above@affilgroup{%
+}%
+\def\frontmatter@above@affiliation@script{%
+ \skip@\@flushglue
+ \@flushglue\z@ plus.3\hsize\relax
+ \centering
+ \@flushglue\skip@
+ \addvspace{3.5\p@}%
+}%
+\def\frontmatter@above@affiliation{%
+ \preprintsty@sw{}{%
+ }%
+}%
+\def\frontmatter@affiliationfont{%
+ \small\it
+}%
+\def\frontmatter@collaboration@above{%
+ \preprintsty@sw{%
+ }{%
+ \parskip1.5\p@\relax
+ }%
+}%
+\def\frontmatter@setup{%
+ \normalfont
+}%
+\def\frontmatter@title@above{\addvspace{6\p@}}%
+\def\frontmatter@title@format{\large\bfseries\centering\parskip\z@skip}%
+\def\frontmatter@title@below{}%
+\def\@author@parskip{3\p@}%
+\def\frontmatter@makefnmark{%
+ \@textsuperscript{%
+ \normalfont\@thefnmark
+ }%
+}%
+\def\frontmatter@authorbelow{%
+ \addvspace{3\p@}%
+}%
+\def\frontmatter@RRAP@format{%
+ \small
+ \centering
+ \everypar{\hbox\bgroup(\@gobble@leavemode@uppercase}%
+ \def\par{\@ifvmode{}{\unskip)\egroup\@@par}}%
+}%
+\def\punct@RRAP{;\egroup\ \hbox\bgroup}%
+\def\@gobble@leavemode@uppercase#1#2{\expandafter\MakeTextUppercase}%
+\def\frontmatter@PACS@format{%
+ \addvspace{11\p@}%
+ \footnotesize
+ \adjust@abstractwidth
+ \parindent\z@
+ \parskip\z@skip
+ \samepage
+}%
+\def\frontmatter@keys@format{%
+ \footnotesize
+ \adjust@abstractwidth
+ \parindent\z@
+ \samepage
+}%
+\def\ps@titlepage{%
+ \def\@oddhead{%
+ \hfill
+ \preprint@sw{%
+ \expandafter\produce@preprints\expandafter{\@preprint}%
+ }{}%
+ }%
+ \let\@evenhead\@oddhead
+ \def\@oddfoot{%
+ \hb@xt@\z@{\byrevtex\hss}%
+ \hfil
+ \preprintsty@sw{\thepage}{}%
+ \quad\checkindate
+ \hfil
+ }%
+ \let\@evenfoot\@oddfoot
+}%
+\def\byrevtex{\byrevtex@sw{Typeset by REV\TeX}{}}%
+\def\produce@preprints#1{%
+ \vtop to \z@{%
+ \def\baselinestretch{1}%
+ \small
+ \let\preprint\preprint@count
+ \count@\z@
+ #1%
+ \@ifnum{\count@>\tw@}{%
+ \hbox{%
+ \let\preprint\preprint@hlist
+ #1%
+ \setbox\z@\lastbox
+ }%
+ }{%
+ \let\preprint\preprint@cr
+ \halign{\hfil##\cr#1\crcr}%
+ \par
+ \vss
+ }%
+ }%
+}%
+\def\preprint@cr#1{#1\cr}%
+\def\preprint@count#1{\advance\count@\@ne}%
+\def\preprint@hlist#1{#1\hbox{, }}%
+\def\@seccntformat#1{\csname the#1\endcsname.\quad}%
+\def\@hang@from#1#2#3{#1#2#3}%
+\def\section{%
+ \@startsection
+ {section}%
+ {1}%
+ {\z@}%
+ {0.8cm \@plus1ex \@minus .2ex}%
+ {0.5cm}%
+ {%
+ \normalfont\small\bfseries
+ \centering
+ }%
+}%
+\def\@hangfrom@section#1#2#3{\@hangfrom{#1#2}\MakeTextUppercase{#3}}%
+\def\@hangfroms@section#1#2{#1\MakeTextUppercase{#2}}%
+\def\subsection{%
+ \@startsection
+ {subsection}%
+ {2}%
+ {\z@}%
+ {.8cm \@plus1ex \@minus .2ex}%
+ {.5cm}%
+ {%
+ \normalfont\small\bfseries
+ \centering
+ }%
+}%
+\def\subsubsection{%
+ \@startsection
+ {subsubsection}%
+ {3}%
+ {\z@}%
+ {.8cm \@plus1ex \@minus .2ex}%
+ {.5cm}%
+ {%
+ \normalfont\small\itshape
+ \centering
+ }%
+}%
+\def\paragraph{%
+ \@startsection
+ {paragraph}%
+ {4}%
+ {\parindent}%
+ {\z@}%
+ {-1em}%
+ {\normalfont\normalsize\itshape}%
+}%
+\def\subparagraph{%
+ \@startsection
+ {subparagraph}%
+ {5}%
+ {\parindent}%
+ {3.25ex \@plus1ex \@minus .2ex}%
+ {-1em}%
+ {\normalfont\normalsize\bfseries}%
+}%
+\def\section@preprintsty{%
+ \@startsection
+ {section}%
+ {1}%
+ {\z@}%
+ {0.8cm \@plus1ex \@minus .2ex}%
+ {0.5cm}%
+ {%
+ \normalfont\small\bfseries
+ }%
+}%
+\def\subsection@preprintsty{%
+ \@startsection
+ {subsection}%
+ {2}%
+ {\z@}%
+ {.8cm \@plus1ex \@minus .2ex}%
+ {.5cm}%
+ {%
+ \normalfont\small\bfseries
+ }%
+}%
+\def\subsubsection@preprintsty{%
+ \@startsection
+ {subsubsection}%
+ {3}%
+ {\z@}%
+ {.8cm \@plus1ex \@minus .2ex}%
+ {.5cm}%
+ {%
+ \normalfont\small\itshape
+ }%
+}%
+\let\frontmatter@footnote@produce\frontmatter@footnote@produce@footnote
+\def\@pnumwidth{1.55em}%
+\def\@tocrmarg {2.55em}%
+\def\@dotsep{2}%
+\def\ltxu@dotsep{4.5pt}%
+\setcounter{tocdepth}{3}%
+\def\tableofcontents{%
+ \addtocontents{toc}{\string\tocdepth@munge}%
+ \print@toc{toc}%
+ \addtocontents{toc}{\string\tocdepth@restore}%
+}%
+\def\tocdepth@munge{%
+ \let\l@section@saved\l@section
+ \let\l@section\@gobble@tw@
+}%
+\def\@gobble@tw@#1#2{}%
+\def\tocdepth@restore{%
+ \let\l@section\l@section@saved
+}%
+\def\l@part#1#2{\addpenalty{\@secpenalty}%
+ \begingroup
+ \set@tocdim@pagenum\@tempboxa{#2}%
+ \parindent \z@
+ \rightskip\tocleft@pagenum plus 1fil\relax
+ \skip@\parfillskip\parfillskip\z@
+ \addvspace{2.25em plus\p@}%
+ \large \bf %
+ \leavevmode\ignorespaces#1\unskip\nobreak\hskip\skip@
+ \hb@xt@\rightskip{\hfil\unhbox\@tempboxa}\hskip-\rightskip\hskip\z@skip
+ \par
+ \nobreak %
+ \endgroup
+}%
+\def\tocleft@{\z@}%
+\def\tocdim@min{5\p@}%
+\def\l@section{%
+ \l@@sections{}{section}% Implicit #3#4
+}%
+\def\l@f@section{%
+ \addpenalty{\@secpenalty}%
+ \addvspace{1.0em plus\p@}%
+ %\bf
+}%
+\def\l@subsection{%
+ \l@@sections{section}{subsection}% Implicit #3#4
+}%
+\def\l@subsubsection{%
+ \l@@sections{subsection}{subsubsection}% Implicit #3#4
+}%
+\def\l@paragraph#1#2{}%
+\def\l@subparagraph#1#2{}%
+\let\toc@pre\toc@pre@auto
+\let\toc@post\toc@post@auto
+\@booleanfalse\raggedcolumn@sw
+\def\tableft@skip@float{\z@ plus\hsize}%
+\def\tabmid@skip@float{\@flushglue}%
+\def\tabright@skip@float{\z@ plus\hsize}%
+\def\array@row@pre@float{\hline\hline\noalign{\vskip\doublerulesep}}%
+\def\array@row@pst@float{\noalign{\vskip\doublerulesep}\hline\hline}%
+\long\def\@makefntext#1{%
+ \def\baselinestretch{1}%
+ \leftskip1em%
+ \parindent1em%
+ \noindent
+ \nobreak\hskip-\leftskip
+ \hb@xt@\leftskip{%
+ \hss\@makefnmark\ %
+ }%
+ #1%
+ \par
+}%
+\long\def\frontmatter@makefntext#1{%
+ \def\baselinestretch{1}%
+ \leftskip1em%
+ \parindent1em%
+ \noindent
+ \nobreak\hskip-\leftskip
+ \Hy@raisedlink{\hyper@anchorstart{frontmatter.\expandafter\the\csname c@\@mpfn\endcsname}\hyper@anchorend}%
+ \hb@xt@\leftskip{%
+ \hss\@makefnmark\ %
+ }%
+ #1%
+ \par
+}%
+\prepdef\appendix{%
+ \par
+ \let\@hangfrom@section\@hangfrom@appendix
+ \let\@sectioncntformat\@appendixcntformat
+}%
+\def\@hangfrom@appendix#1#2#3{%
+ #1%
+ \@if@empty{#2}{%
+ #3%
+ }{%
+ #2\@if@empty{#3}{}{:\ #3}%
+ }%
+}%
+\def\@hangfroms@appendix#1#2{%
+ #1#2%
+}%
+\def\@appendixcntformat#1{\appendixname\ \csname the#1\endcsname}%
+\@booleanfalse\authoryear@sw
+\appdef\setup@hook{%
+ \bibpunct{[}{]}{,}{n}{}{,}%
+}%
+ \def\pre@bibdata{\jobname\bibdata@app}%
+\appdef\setup@hook{%
+ \def\bibsection{%
+ \par
+ \onecolumngrid@push
+ \begingroup
+ \baselineskip26\p@
+ \bib@device{\textwidth}{245.5\p@}%
+ \endgroup
+ \nobreak\@nobreaktrue
+ \addvspace{19\p@}%
+ \par
+ \onecolumngrid@pop
+ }%
+}%
+\def\bib@device#1#2{%
+ \hb@xt@\z@{%
+ \hb@xt@#1{%
+ \hfil
+ \phantomsection
+ \addcontentsline {toc}{section}{\protect\numberline{}\refname}%
+ \hb@xt@#2{%
+ \skip@\z@\@plus-1fil\relax
+ \leaders\hrule height.25 \p@ depth.25 \p@ \hskip\z@\@plus1fil
+ \hskip\skip@
+ \hskip\z@\@plus0.125fil\leaders\hrule height.375\p@ depth.375\p@ \hskip\z@\@plus0.75fil \hskip\z@\@plus0.125fil
+ \hskip\skip@
+ \hskip\z@\@plus0.25 fil\leaders\hrule height.5 \p@ depth.5 \p@ \hskip\z@\@plus0.5 fil \hskip\z@\@plus0.25 fil
+ \hskip\skip@
+ \hskip\z@\@plus0.375fil\leaders\hrule height.625\p@ depth.625\p@ \hskip\z@\@plus0.25fil \hskip\z@\@plus0.375fil
+ % \hskip\skip@
+ % \hfil
+ }%
+ \hfil
+ }%
+ \hss
+ }%
+}%
+\appdef\setup@hook{%
+ \let\bibpreamble\@empty
+ \bibsep\z@\relax
+ \def\newblock{\ }%
+}%
+\appdef\setup@hook{%
+ \def\bibfont{%
+ \small
+ \@clubpenalty\clubpenalty
+ }%
+}%
+\newenvironment{theindex}{%
+ \columnseprule \z@
+ \columnsep 35\p@
+ \c@secnumdepth-\maxdimen
+ \onecolumngrid@push
+ \section{\indexname}%
+ \thispagestyle{plain}%
+ \parindent\z@
+ \parskip\z@ plus.3\p@\relax
+ \let\item\@idxitem
+ \onecolumngrid@pop
+}{%
+}%
+\def\@idxitem{\par\hangindent 40\p@}%
+\def\subitem{\par\hangindent 40\p@ \hspace*{20\p@}}%
+\def\subsubitem{\par\hangindent 40\p@ \hspace*{30\p@}}%
+\def\indexspace{\par \vskip 10\p@ plus5\p@ minus3\p@\relax}%
+\def\@journal@default{pra}%
+\def\@pointsize@default{10}%
+\def\rtx@apspra{%
+ \class@info{APS journal PRA selected}%
+}%
+\def\rtx@apsprb{%
+ \class@info{APS journal PRB selected}%
+ \let\frontmatter@footnote@produce\frontmatter@footnote@produce@endnote
+ \appdef\setup@hook{%
+ \bibpunct{}{}{,}{s}{}{\textsuperscript{,}}%
+ \let\onlinecite\rev@citealpnum
+ }%
+ \def\pre@bibdata{\jobname\bibdata@app}%
+ \let\place@bibnumber\place@bibnumber@sup
+}%
+\def\rtx@apsprc{%
+ \class@info{APS journal PRC selected}%
+}%
+\def\rtx@apsprd{%
+ \class@info{APS journal PRD selected}%
+}%
+\def\rtx@apspre{%
+ \class@info{APS journal PRE selected}%
+}%
+\def\rtx@apsprl{%
+ \class@info{APS journal PRL selected}%
+ \let\frontmatter@footnote@produce\frontmatter@footnote@produce@endnote
+ \@booleanfalse\acknowledgments@sw
+ \appdef\setup@hook{%
+ \def\bibsection{%
+ \par
+ \begingroup
+ \baselineskip26\p@
+ \bib@device{\hsize}{72\p@}%
+ \endgroup
+ \nobreak\@nobreaktrue
+ \addvspace{19\p@}%
+ }%
+ }%
+\appdef\setup@hook{%
+ \lengthcheck@sw{%
+ \RequirePackage{times}%
+ }{}%
+}%
+ \c@secnumdepth=-\maxdimen
+ \appdef\setup@hook{%
+ \@ifnum{\@pointsize=10\relax}{%
+ \lengthcheck@sw{%
+ \def\large{%
+ \@setfontsize\large{12.5}{14\p@}%
+ }%
+ \def\normalsize{%
+ \@setfontsize\normalsize{10.5}\@xiipt
+ \abovedisplayskip 6\p@ \@plus6\p@ \@minus5\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \abovedisplayskip
+ \belowdisplayshortskip \abovedisplayskip
+ \let\@listi\@listI
+ }%
+ \def\small{%
+ \@setfontsize\small{9.5}\@xipt
+ \abovedisplayskip 5\p@ \@plus5\p@ \@minus4\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \abovedisplayskip
+ \belowdisplayshortskip \abovedisplayskip
+ \let\@listi\@listI
+ }%
+ \DeclareMathSizes{12.5}{12.5}{9}{6}%
+ \DeclareMathSizes{10.5}{10.5}{7.5}{5}%
+ \DeclareMathSizes{9.5}{9.5}{7.0}{5}%
+ }{%
+ \def\normalsize{%
+ \@setfontsize\normalsize\@xpt\@xiipt
+ \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \abovedisplayskip
+ \belowdisplayshortskip \abovedisplayskip
+ \let\@listi\@listI
+ }%
+ }%
+ }{}%
+ }%
+ \textheight = 694.0\p@
+}%
+\def\rtx@apsprstper{%
+ \class@info{APS journal PRST-PER selected}%
+ \rtx@apsprb
+ \@booleantrue\longbibliography@sw
+}%
+\def\rtx@apsprstab{%
+ \class@info{APS journal PRSTAB selected}%
+}%
+\@booleantrue\footinbib@sw
+\appdef\@bibdataout@rev{\@bibdataout@aps}%
+\def\@bibdataout@aps{%
+ \immediate\write\@bibdataout{%
+ @CONTROL{%
+ apsrev41Control%
+ \longbibliography@sw{%
+ ,author="00",editor="1",pages="1",title="0",year="0"%
+ }{%
+ ,author="08",editor="1",pages="0",title="",year="1"%
+ }%
+ }%
+ }%
+ \if@filesw
+ \immediate\write\@auxout{\string\citation{apsrev41Control}}%
+ \fi
+}%
+\let\place@bibnumber\place@bibnumber@inl
+\def\@bibstyle{apsrev\substyle@post}%
+\appdef\setup@hook{%
+ \@ifx{\place@bibnumber\place@bibnumber@sup}{%
+ \footinbib@sw{}{%
+ \class@warn{Citations are superscript numbers: footnotes must be endnotes; changing to that configuration}%
+ \@booleantrue\footinbib@sw
+ }%
+ }{}%
+}%
+\endinput
+%%
+%% End of file `aps4-1.rtx'.
diff --git a/obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/apsrmp4-1.rtx b/obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/apsrmp4-1.rtx
new file mode 100644
index 0000000000..7f50662071
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/apsrmp4-1.rtx
@@ -0,0 +1,274 @@
+%%
+%% This is file `apsrmp4-1.rtx',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% revtex4-1.dtx (with options: `rmp')
+%%
+%% This file is part of the APS files in the REVTeX 4 distribution.
+%% For the version number, search on the string
+%% Original version by David Carlisle
+%% Modified by Arthur Ogawa (mailto:arthur_ogawa at sbcglobal dot net)
+%%
+%% Copyright (c) 2009 The American Physical Society.
+%% http://publish.aps.org/revtex4/
+%% mailto:revtex4@aps.org
+%%
+%% See the REVTeX 4 README file for restrictions and more information.
+%%
+\NeedsTeXFormat{LaTeX2e}[1996/12/01]%
+\ProvidesFile{apsrmp4-1}
+ [2010/07/25/20:33:00 4.1r (http://publish.aps.org/revtex4/ for documentation)]% \fileversion
+\ifx\undefined\substyle@ext
+ \def\@tempa{%
+ \endinput
+ \GenericWarning{I must be read in by REVTeX! (Bailing out)}%
+ }%
+ \expandafter\else
+ \def\@tempa{}%
+ \expandafter\fi\@tempa
+\@ifxundefined\@journal{%
+ \class@warn{Please specify the REVTeX options [aps,rmp]!}%
+ \@@end
+}{}%
+ \class@info{APS journal RMP selected}%
+\clo@groupedaddress
+\def\frontmatter@setup{%
+ \normalfont\sffamily\raggedright
+}%
+\def\PACS@warn{RMP documents do not display PACS. Your \string\pacs\space will be ignored}%
+\def\frontmatter@title@above{}%
+\def\frontmatter@title@format{\Large\bfseries\raggedright}% HelveticaNeue-Medium(Italic) 14pt.
+\def\frontmatter@title@below{\addvspace{12\p@}}% 24pt b-b down to first author
+\def\frontmatter@authorformat{%
+ \preprintsty@sw{\vskip0.5pc\relax}{}%
+ \@tempskipa\@flushglue
+ \@flushglue\z@ plus.8\hsize
+ \raggedright\advance\leftskip.5in\relax
+ \@flushglue\@tempskipa
+ \parskip\z@skip
+ \@totalleftmargin\leftskip
+}%
+\def\frontmatter@affiliationfont{% Helvetica 9/10.2
+ \small\slshape\selectfont\baselineskip10.5\p@\relax
+ \@tempskipa\@flushglue
+ \@flushglue\z@ plus.8\hsize
+ \raggedright\advance\leftskip.5in\relax
+ \@flushglue\@tempskipa
+ \@totalleftmargin\leftskip
+ \let\def@after@address\def@after@address@empty
+}%
+\def\frontmatter@above@affilgroup{\addvspace{7.2\p@}}% additional leading above an author
+\def\frontmatter@above@affiliation{\addvspace{5.3\p@}}%
+\def\frontmatter@above@affiliation@script{}%
+\clo@groupedaddress
+\def\frontmatter@RRAP@format{%
+ \addvspace{7.3\p@}%
+ \small
+ \raggedright\advance\leftskip.5in\relax
+ \@totalleftmargin\leftskip
+}%
+\def\produce@RRAP#1{%
+ \@if@empty{#1}{}{%
+ \@ifvmode{\leavevmode}{}%
+ \unskip(\ignorespaces#1\unskip)\quad
+ }%
+}%
+\def\frontmatter@abstractheading{%
+ \preprintsty@sw{%
+ \begingroup
+ \centering\large
+ \abstractname
+ \par
+ \endgroup
+ \vspace{.5pc}%
+ }{}%
+}%
+\def\frontmatter@abstractfont{%
+ \footnotesize
+ \hsize360\p@
+ \leftskip=0.5in
+ \parindent\z@
+ \@totalleftmargin\leftskip
+}%
+\def\frontmatter@preabstractspace{7.7\p@}%
+\def\frontmatter@postabstractspace{24.6\p@}%
+ \appdef\setup@hook{%
+ \preprintsty@sw{}{%
+ \def\normalsize{%
+ \@setsize\normalsize{12pt}\xpt\@xpt
+ \abovedisplayskip 10\p@ plus2\p@ minus5\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \abovedisplayskip
+ \belowdisplayshortskip \abovedisplayskip
+ \let\@listi\@listI
+ }%
+ }%
+ }%
+ \footnotesep 9.25pt
+ \skip\footins 36pt plus 4pt minus 12pt
+ \def\footnoterule{%
+ \dimen@\skip\footins\divide\dimen@\thr@@
+ \kern-\dimen@\hrule width.5in\kern\dimen@
+ }%
+\def\secnums@rtx{%
+ \@ifxundefined\thepart{%
+ \def\thepart{\Roman{part}}%
+ }{}%
+ \@ifxundefined\thesection{%
+ \def\thesection {\Roman{section}}%
+ \def\p@section {}%
+ }{}%
+ \@ifxundefined\thesubsection{%
+ \def\thesubsection {\Alph{subsection}}%
+ \def\p@subsection {\thesection.}%
+ }{}%
+ \@ifxundefined\thesubsubsection{%
+ \def\thesubsubsection {\arabic{subsubsection}}%
+ \def\p@subsubsection {\thesection.\thesubsection.}%
+ }{}%
+ \@ifxundefined\theparagraph{%
+ \def\theparagraph {\alph{paragraph}}%
+ \def\p@paragraph {\thesection.\thesubsection.\thesubsubsection.}%
+ }{}%
+ \@ifxundefined\thesubparagraph{%
+ \def\thesubparagraph {\arabic{subparagraph}}%
+ \def\p@subparagraph {\thesection.\thesubsection.\thesubsubsection.\theparagraph.}%
+ }{}%
+}%
+\def\@seccntformat#1{\csname the#1\endcsname.\hskip0.5em\relax}%
+ \def\section{%
+ \@startsection{section}{1}{\z@}{0.8cm plus1ex minus.2ex}{0.4cm}%
+ {%
+ \small\sffamily\bfseries\selectfont
+ \raggedright
+ \parindent\z@
+ }%
+ }%
+ \def\@hangfrom@section#1#2#3{\@hangfrom{#1#2}\MakeTextUppercase{#3}}%
+ \def\@hangfroms@section#1#2{#1\MakeTextUppercase{#2}}%
+ \def\subsection{%
+ \@startsection{subsection}{2}{\z@}{0.8cm plus1ex minus.2ex}{0.4cm}%
+ {%
+ \small\sffamily\bfseries
+ \raggedright
+ \parindent\z@
+ }%
+ }%
+ \def\subsubsection{%
+ \@startsection{subsubsection}{3}{\z@}{.8cm plus1ex minus.2ex}{0.4cm}%
+ {%
+ \small\sffamily\selectfont
+ \raggedright
+ \parindent\z@
+ }%
+ }%
+ \def\paragraph{%
+ \@startsection{paragraph}{4}{\z@}{.8cm plus1ex minus.2ex}{-1em}%
+ {%
+ \small\slshape\selectfont
+ \raggedright
+ \parindent\z@
+ }%
+ }%
+ \def\subparagraph{%
+ \@startsection{subparagraph}{4}{\parindent}{3.25ex plus1ex minus.2ex}{-1em}%
+ {\normalsize\bfseries\selectfont}%
+ }%
+ \setcounter{tocdepth}{4}% FIXME: has no effect
+\appdef\appendix{%
+ \let\@hangfrom@section\@hangfrom@appendix
+ \let\@sectioncntformat\@appendixcntformat
+}%
+\def\@hangfrom@appendix#1#2#3{%
+ #1%
+ \@if@empty{#2}{%
+ #3%
+ }{%
+ #2\@if@empty{#3}{}{:\ #3}%
+ }%
+}%
+\def\@hangfroms@appendix#1#2{%
+ #1\appendixname\@if@empty{#2}{}{:\ #2}%
+}%
+\def\@appendixcntformat#1{\appendixname\ \csname the#1\endcsname}%
+\setlength\belowcaptionskip{2\p@}
+\long\def\@makecaption#1#2{%
+ \vskip\abovecaptionskip
+ \vbox{%
+ \flushing
+ \small\rmfamily
+ \noindent
+ #1\@caption@fignum@sep#2\par
+ }%
+ \vskip\belowcaptionskip
+}%
+\def\@caption@fignum@sep{\nobreak\hskip.5em plus.2em\ignorespaces}%
+\def\@bibstyle{apsrmp\substyle@post}%
+\@booleantrue\authoryear@sw
+\def\@bibdataout@aps{%
+ \immediate\write\@bibdataout{%
+ @CONTROL{%
+ apsrmp41Control%
+ \longbibliography@sw{%
+ ,author="03",editor="0",pages="1",title="0",year="0"%
+ }{%
+ ,author="0B",editor="0",pages="0",title="",year="1"%
+ }%
+ }%
+ }%
+ \if@filesw
+ \immediate\write\@auxout{\string\citation{apsrmp41Control}}%
+ \fi
+}%
+\appdef\setup@hook{%
+ \bibpunct{(%)
+ }{%(
+ )}{;}{a}{,}{,}%
+ \def\bibsection{%
+ \expandafter\section\expandafter*\expandafter{\refname}%
+ \@nobreaktrue
+ }%
+ \let\bibpreamble\@empty
+ \def\newblock{\ }%
+ \bibhang10\p@
+ \bibsep\z@
+ \let\cite\citep
+}%
+\@booleanfalse\footinbib@sw
+\appdef\setup@hook{%
+ \footinbib@sw{%
+ \class@warn{%
+ Footnotes in bibliography are incompatible with RMP.^^J%
+ Undoing the footinbib option.
+ }%
+ \@booleanfalse\footinbib@sw
+ }{}%
+ \@ifnum{\NAT@merge>\@ne}{\let\NAT@merge\@ne}{}%
+ \def\NAT@cmprs{\z@}%
+}%
+\def\eprint#1{eprint #1}%
+\def\toc@@font{%
+ \footnotesize\rmfamily
+ \def\\{\space\ignorespaces}%
+}%
+\def\ltxu@dotsep{5.5pt}%
+\def\tocleft@{\z@}%
+\def\tocdim@min{5\p@}%
+\def\l@section{%
+ \l@@sections{}{section}% Implicit #3#4
+}%
+\def\l@subsection{%
+ \l@@sections{section}{subsection}% Implicit #3#4
+}%
+\def\l@subsubsection{%
+ \l@@sections{subsection}{subsubsection}% Implicit #3#4
+}%
+\def\l@paragraph#1#2{}%
+\def\l@subparagraph#1#2{}%
+\let\toc@pre\toc@pre@auto
+\let\toc@post\toc@post@auto
+\endinput
+%%
+%% End of file `apsrmp4-1.rtx'.
diff --git a/obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/ltxdocext.sty b/obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/ltxdocext.sty
new file mode 100644
index 0000000000..eea5fcc9ca
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/ltxdocext.sty
@@ -0,0 +1,296 @@
+%%
+%% This is file `ltxdocext.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% ltxdocext.dtx (with options: `package,kernel')
+%%
+%% This is a generated file;
+%% altering it directly is inadvisable;
+%% instead, modify the original source file.
+%% See the URL in the file README.
+%%
+%% License
+%% You may distribute this file under the conditions of the
+%% LaTeX Project Public License 1.3 or later
+%% (http://www.latex-project.org/lppl.txt).
+%%
+%% This file is distributed WITHOUT ANY WARRANTY;
+%% without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE.
+%%
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]%
+\ProvidesFile{ltxdocext.sty}%
+ [2008/08/04 1.1b2 ltxdoc extensions package]% \fileversion
+\def\class@name{ltxdocext}%
+\expandafter\PackageInfo\expandafter{\class@name}{%
+ An extension to the \protect\LaTeXe\space ltxdoc class
+ by A. Ogawa (arthur\_ogawa sbcglobal.net)%
+}%
+\RequirePackage{verbatim}%
+\let\o@verbatim\verbatim
+\def\verbatim{%
+ \ifhmode\unskip\par\fi
+ \ifx\@currsize\normalsize
+ \small
+ \fi
+ \o@verbatim
+}%
+\renewcommand \verbatim@font {%
+ \normalfont \ttfamily
+ \catcode`\<=\active
+ \catcode`\>=\active
+}%
+\RequirePackage{shortvrb}
+\AtBeginDocument{%
+ \MakeShortVerb{\|}%
+}%
+\begingroup
+ \catcode`\<=\active
+ \catcode`\>=\active
+ \gdef<{\@ifnextchar<\@lt\@meta}
+ \gdef>{\@ifnextchar>\@gt\@gtr@err}
+ \gdef\@meta#1>{\marg{#1}}
+ \gdef\@lt<{\char`\<}
+ \gdef\@gt>{\char`\>}
+\endgroup
+\def\@gtr@err{%
+ \ClassError{ltxguide}{%
+ Isolated \protect>%
+ }{%
+ In this document class, \protect<...\protect>
+ is used to indicate a parameter.\MessageBreak
+ I've just found a \protect> on its own.
+ Perhaps you meant to type \protect>\protect>?
+ }%
+}
+\def\verbatim@nolig@list{\do\`\do\,\do\'\do\-}
+\def\GetFileInfo#1{%
+ \def\filename{#1}%
+ \def\@tempb##1 ##2 ##3\relax##4\relax{%
+ \def\filedate{##1}%
+ \def\fileversion{##2}%
+ \def\fileinfo{##3}}%
+ \edef\@tempa{\csname ver@#1\endcsname}%
+ \expandafter\@tempb\@tempa\relax? ? \relax\relax}
+\DeclareRobustCommand{\marg}[1]{%
+ \meta{#1}%
+ \index{#1=\string\meta{#1} placeholder}\index{placeholder>#1=\string\meta{#1}}%
+}%
+\DeclareRobustCommand\meta[1]{%
+ \mbox{\LANGLE\itshape#1\/\RANGLE}%
+}%
+\def\LANGLE{$\langle$}%
+\def\RANGLE{$\rangle$}%
+\DeclareRobustCommand{\arg}[1]{%
+ {\ttfamily\string{}\meta{#1}{\ttfamily\string}}%
+ \index{#1=\string\ttt{#1}, argument}\index{argument>#1=\string\ttt{#1}}%
+}%
+\let\oarg\undefined
+\DeclareRobustCommand{\oarg}[1]{%
+ {\ttfamily[%]
+ }\meta{#1}{\ttfamily%[
+ ]}%
+ \index{#1=\string\ttt{#1}, optional argument}%
+ \index{argument, optional>#1=\string\ttt{#1}}%
+}%
+\DeclareRobustCommand\cmd{\begingroup\makeatletter\@cmd}%
+\long\def\@cmd#1{%
+ \endgroup
+ \cs{\expandafter\cmd@to@cs\string#1}%
+ \expandafter\cmd@to@index\string#1\@nil
+}%
+\def\cmd@to@cs#1#2{\char\number`#2\relax}%
+\def\cmd@to@index#1#2\@nil{%
+ \index{#2=\string\cmd#1#2}%\index{command>#2=\string\cmd#1#2}%
+}%
+\DeclareRobustCommand\cs[1]{{\ttfamily\char`\\#1}}%
+\def\scmd#1{%
+ \cs{\expandafter\cmd@to@cs\string#1}%
+ \expandafter\scmd@to@index\string#1\@nil
+}%
+\def\scmd@to@index#1#2\@nil#3{%
+ \index{\string$#3=\string\cmd#1#2---#3}%
+}%
+\DeclareRobustCommand\env{\name@idx{environment}}%
+\DeclareRobustCommand\envb[1]{%
+ {\ttfamily\string\begin\string{}\env{#1}{\ttfamily\string}}%
+}%
+\DeclareRobustCommand\enve[1]{{\ttfamily\string\end\string{}\env{#1}{\ttfamily\string}}}%
+\DeclareRobustCommand{\file}{\begingroup\@sanitize\@file}%
+\long\def\@file#1{\endgroup
+ {\ttfamily#1}%
+ \index{#1=\string\ttt{#1}}\index{file>#1=\string\ttt{#1}}%
+}%
+\DeclareRobustCommand\substyle{\name@idx{document substyle}}%
+\DeclareRobustCommand\classoption{\name@idx{document class option}}%
+\DeclareRobustCommand\classname{\name@idx{document class}}%
+\def\name@idx#1#2{%
+ {\ttfamily#2}%
+ \index{#2\space#1=\string\ttt{#2}\space#1}\index{#1>#2=\string\ttt{#2}}%
+}%
+\DeclareRobustCommand\url@ltxdocext{\begingroup\catcode`\/\active\catcode`\.\active\catcode`\:\active\@url}%
+\AtBeginDocument{%
+ \ifx\url\undefined\let\url\url@ltxdocext\fi
+}%
+\def\@url#1{%
+ \url@break{\ttfamily#1}%
+ \url@char\edef\@tempa{#1=\string\url{#1}}%
+ \expandafter\index\expandafter{\@tempa}%
+ \expandafter\index\expandafter{\expandafter u\expandafter r\expandafter l\expandafter >\@tempa}%
+ \endgroup
+}%
+{\catcode`\:\active\aftergroup\def\aftergroup:}{\active@colon}%
+\def\colon@break{\colon@char\allowbreak}%
+\def\colon@char{:}%
+{\catcode`\/\active\aftergroup\def\aftergroup/}{\active@slash}%
+\def\slash@break{\slash@char\allowbreak}%
+\def\slash@char{/}%
+{\catcode`\.\active\aftergroup\def\aftergroup.}{\active@dot}%
+\def\dot@break{\dot@char\allowbreak}%
+\def\dot@char{.}%
+\def\url@break{\let\active@slash\slash@break\let\active@dot\dot@break\let\active@colon\colon@break}%
+\def\url@char{\let\active@slash\slash@char\let\active@dot\dot@char\let\active@colon\colon@char}%
+\renewenvironment{theindex}
+ {\if@twocolumn
+ \@restonecolfalse
+ \else
+ \@restonecoltrue
+ \fi
+ \columnseprule \z@
+ \columnsep 35\p@
+\def\see##1##2{\textit{See} ##1}%
+\def\seealso##1##2{\textit{See also} ##1}%
+\long\def\cmd##1{\cs{\expandafter\cmd@to@cs\string##1}}%
+\def\@url##1{\url@break\ttt{##1}\endgroup}%
+\def\ttt{\begingroup\@sanitize\ttfamily\@ttt}%
+\def\@ttt##1{##1\endgroup}%
+\mathchardef\save@secnumdepth\c@secnumdepth
+\c@secnumdepth\m@ne
+ \twocolumn[\section{\indexname}]%
+\c@secnumdepth\save@secnumdepth
+ \thispagestyle{plain}\parindent\z@
+ \parskip\z@ \@plus .3\p@\relax
+ \let\item\@idxitem}
+ {\if@restonecol\onecolumn\else\clearpage\fi}
+\renewenvironment{quote}
+ {\list{}{%
+ \leftmargin1em\relax
+ \rightmargin\leftmargin
+ }%
+ \item\relax}
+ {\endlist}
+\newif\if@mainmatter
+\newif\if@openright
+\@openrighttrue
+\DeclareRobustCommand\frontmatter{%
+ \cleartorecto
+ \@mainmatterfalse
+ \pagenumbering{roman}%
+}%
+\DeclareRobustCommand\mainmatter{%
+ \cleartorecto
+ \@mainmattertrue
+ \pagenumbering{arabic}%
+}%
+\DeclareRobustCommand\backmatter{%
+ \if@openright
+ \cleartorecto
+ \else
+ \clearpage
+ \fi
+ \@mainmatterfalse
+}%
+\ifx\undefined\cleartorecto
+ \def\cleartorecto{\cleardoublepage}%
+\fi
+\def\@to{to}%
+\newenvironment{unnumtable}{%
+ \par
+ \addpenalty\predisplaypenalty
+ \addvspace\abovedisplayskip
+ \hbox\@to\hsize\bgroup\hfil\ignorespaces
+ \let\@Hline\@empty
+}{%
+ \unskip\hfil\egroup
+ \penalty\postdisplaypenalty
+ \vskip\belowdisplayskip
+ \aftergroup\ignorespaces
+ \@endpetrue
+}%
+\providecommand\toprule{\hline\hline}%
+\providecommand\colrule{\\\hline}%
+\providecommand\botrule{\\\hline\hline}%
+\DeclareRobustCommand\subsubsubsection{%
+ \@startsection{subsubsection}{4}%
+ {\z@}{-15\p@\@plus-5\p@\@minus-2\p@}%
+ {5\p@}{\normalfont\normalsize\itshape}%
+}%
+\DoNotIndex{\',\.,\@M,\@@input,\@Alph,\@alph,\@addtoreset,\@arabic}
+\DoNotIndex{\@badmath,\@centercr,\@cite}
+\DoNotIndex{\@dotsep,\@empty,\@float,\@gobble,\@gobbletwo,\@ignoretrue}
+\DoNotIndex{\@input,\@ixpt,\@m,\@minus,\@mkboth}
+\DoNotIndex{\@ne,\@nil,\@nomath,\@plus,\roman,\@set@topoint}
+\DoNotIndex{\@tempboxa,\@tempcnta,\@tempdima,\@tempdimb}
+\DoNotIndex{\@tempswafalse,\@tempswatrue,\@viipt,\@viiipt,\@vipt}
+\DoNotIndex{\@vpt,\@warning,\@xiipt,\@xipt,\@xivpt,\@xpt,\@xviipt}
+\DoNotIndex{\@xxpt,\@xxvpt,\\,\ ,\addpenalty,\addtolength,\addvspace}
+\DoNotIndex{\advance,\ast,\begin,\begingroup,\bfseries,\bgroup,\box}
+\DoNotIndex{\bullet}
+\DoNotIndex{\cdot,\cite,\CodelineIndex,\cr,\day,\DeclareOption}
+\DoNotIndex{\def,\DisableCrossrefs,\divide,\DocInput,\documentclass}
+\DoNotIndex{\DoNotIndex,\egroup,\ifdim,\else,\fi,\em,\endtrivlist}
+\DoNotIndex{\EnableCrossrefs,\end,\end@dblfloat,\end@float,\endgroup}
+\DoNotIndex{\endlist,\everycr,\everypar,\ExecuteOptions,\expandafter}
+\DoNotIndex{\fbox}
+\DoNotIndex{\filedate,\filename,\fileversion,\fontsize,\framebox,\gdef}
+\DoNotIndex{\global,\halign,\hangindent,\hbox,\hfil,\hfill,\hrule}
+\DoNotIndex{\hsize,\hskip,\hspace,\hss,\if@tempswa,\ifcase,\or,\fi,\fi}
+\DoNotIndex{\ifhmode,\ifvmode,\ifnum,\iftrue,\ifx,\fi,\fi,\fi,\fi,\fi}
+\DoNotIndex{\input}
+\DoNotIndex{\jobname,\kern,\leavevmode,\let,\leftmark}
+\DoNotIndex{\list,\llap,\long,\m@ne,\m@th,\mark,\markboth,\markright}
+\DoNotIndex{\month,\newcommand,\newcounter,\newenvironment}
+\DoNotIndex{\NeedsTeXFormat,\newdimen}
+\DoNotIndex{\newlength,\newpage,\nobreak,\noindent,\null,\number}
+\DoNotIndex{\numberline,\OldMakeindex,\OnlyDescription,\p@}
+\DoNotIndex{\pagestyle,\par,\paragraph,\paragraphmark,\parfillskip}
+\DoNotIndex{\penalty,\PrintChanges,\PrintIndex,\ProcessOptions}
+\DoNotIndex{\protect,\ProvidesClass,\raggedbottom,\raggedright}
+\DoNotIndex{\refstepcounter,\relax,\renewcommand}
+\DoNotIndex{\rightmargin,\rightmark,\rightskip,\rlap,\rmfamily}
+\DoNotIndex{\secdef,\selectfont,\setbox,\setcounter,\setlength}
+\DoNotIndex{\settowidth,\sfcode,\skip,\sloppy,\slshape,\space}
+\DoNotIndex{\symbol,\the,\trivlist,\typeout,\tw@,\undefined,\uppercase}
+\DoNotIndex{\usecounter,\usefont,\usepackage,\vfil,\vfill,\viiipt}
+\DoNotIndex{\viipt,\vipt,\vskip,\vspace}
+\DoNotIndex{\wd,\xiipt,\year,\z@}
+\DoNotIndex{\next}
+\AtEndDocument{\PrintIndex\PrintChanges}%
+\makeatletter
+\def\endfilecontents{%
+ \immediate\write\reserved@c{%
+ \string\iffalse\space ltxdoc klootch^^J%
+ \ifx\undefined\fileversion\else
+ \ifx\undefined\filedate\else
+ This file has version number \fileversion, last revised \filedate.%
+ \fi\fi
+ \string\fi
+ }%
+ \immediate\closeout\reserved@c
+ \def\T##1##2##3{%
+ \ifx##1\@undefined\else
+ \@latex@warning@no@line{##2 has been converted to Blank ##3e}%
+ \fi
+ }%
+ \T\L{Form Feed}{Lin}%
+ \T\I{Tab}{Spac}%
+ \immediate\write\@unused{}%
+}%
+\expandafter\let\csname endfilecontents*\endcsname\endfilecontents
+\makeatother
+\setlength\arraycolsep{0pt}%
+\endinput
+%%
+%% End of file `ltxdocext.sty'.
diff --git a/obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/ltxfront.sty b/obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/ltxfront.sty
new file mode 100644
index 0000000000..3a2249223e
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/ltxfront.sty
@@ -0,0 +1,1163 @@
+%%
+%% This is file `ltxfront.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% ltxfront.dtx (with options: `package,options,kernel')
+%%
+%% This is a generated file;
+%% altering it directly is inadvisable;
+%% instead, modify the original source file.
+%% See the URL in the file 00readme.tex.
+%%
+%% License
+%% You may distribute this file under the conditions of the
+%% LaTeX Project Public License 1.3 or later
+%% (http://www.latex-project.org/lppl.txt).
+%%
+%% This file is distributed WITHOUT ANY WARRANTY;
+%% without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE.
+%%
+%%% @LaTeX-file{
+%%% filename = "ltxfront.dtx",
+%%% version = "4.1r",
+%%% date = "2010/07/25",
+%%% time = "20:33:00 UT-8",
+%%% checksum = "2012",
+%%% author = "Arthur Ogawa (mailto:arthur_ogawa at sbcglobal.net),
+%%% commissioned by the American Physical Society.
+%%% ",
+%%% copyright = "Copyright (C) 1999, 2009 Arthur Ogawa,
+%%% distributed under the terms of the
+%%% LaTeX Project Public License, see
+%%% ftp://ctan.tug.org/macros/latex/base/lppl.txt
+%%% ",
+%%% address = "Arthur Ogawa,
+%%% USA",
+%%% telephone = "",
+%%% FAX = "",
+%%% email = "mailto colon arthur_ogawa at sbcglobal.net",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "latex, page grid, main vertical list",
+%%% supported = "yes",
+%%% abstract = "package to change page grid, MVL",
+%%% docstring = "The checksum field above generated by ltxdoc",
+%%% }
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]%
+\ProvidesFile{%
+ltxfront%
+.sty%
+}%
+ [2010/07/25/20:33:00 4.1r frontmatter package (AO,DPC)]% \fileversion
+\def\package@name{ltxfront}%
+\expandafter\PackageInfo\expandafter{\package@name}{%
+ Title page macros for \protect\LaTeXe,
+ by A. Ogawa (arthur_ogawa at sbcglobal.net)%
+}%
+\let\class@name\package@name
+\RequirePackage{ltxutil}%
+\DeclareOption{frontmatterverbose}{\@booleantrue\frontmatterverbose@sw}%
+\@booleanfalse\frontmatterverbose@sw
+\DeclareOption{inactive}{\@booleanfalse\frontmatter@syntax@sw}%
+\@booleantrue\frontmatter@syntax@sw
+\@booleanfalse\runinaddress@sw
+\@booleantrue\@affils@sw
+\@booleanfalse\groupauthors@sw
+\DeclareOption{groupedaddress}{\clo@groupedaddress}%
+\def\clo@groupedaddress{%
+ \@booleantrue\groupauthors@sw
+ \@booleantrue\@affils@sw
+ \@booleanfalse\runinaddress@sw
+}%
+\DeclareOption{unsortedaddress}{\clo@unsortedaddress}%
+\def\clo@unsortedaddress{%
+ \@booleantrue\groupauthors@sw
+ \@booleanfalse\@affils@sw
+ \@booleanfalse\runinaddress@sw
+}%
+\DeclareOption{runinaddress}{\clo@runinaddress}%
+\def\clo@runinaddress{%
+ \@booleantrue\groupauthors@sw
+ \@booleantrue\@affils@sw
+ \@booleantrue\runinaddress@sw
+}%
+\DeclareOption{superscriptaddress}{\clo@superscriptaddress}%
+\def\clo@superscriptaddress{%
+ \@booleanfalse\groupauthors@sw
+ \@booleantrue\@affils@sw
+ \@booleanfalse\runinaddress@sw
+}%
+\DeclareOption*{\OptionNotUsed}%
+\ProcessOptions*
+\appdef\class@documenthook{\frontmatter@init}%
+\let\frontmatter@init\@empty
+\newcommand\frontmatter@title[2][]{%
+ \def\@title{#2}%
+ \def\@shorttitle{#1}%
+ \let\@AF@join\@title@join
+}%
+\appdef\frontmatter@init{%
+ \def\@title{\class@warn{No title}}%
+ \let\@shorttitle\@empty
+ \let\@title@aux\@title@aux@cleared
+}%
+\def\@title@join{\expandafter\@title@join@\@title@aux}%
+\def\@title@join@#1#2{%
+ \def\@title@aux{{\@join{\@separator}{#1}{#2}}}%
+}%
+\def\@title@aux@cleared{{}}%
+\newcounter{affil}%
+\newcounter{collab}%
+\appdef\frontmatter@init{%
+ \c@affil\z@
+ \c@collab\z@
+}%
+\newcommand\frontmatter@author{% implicit #1
+ \@author@def{}% implicit #2
+}%
+\def\collaboration{% implicit #1
+ \@author@def{\@booleantrue\collaboration@sw}% implicit #2
+}%
+\appdef\frontmatter@init{%
+ \@booleanfalse\collaboration@sw
+}%
+\def\@author@cleared{{}{}{}}%
+\def\@author@gobble#1#2#3{}%
+\def\@author@init{%
+ \let\@author\@author@cleared
+ \@booleanfalse\collaboration@sw
+}%
+\def\@authorclear@sw{\@ifx{\@author\@author@cleared}}%
+\appdef\frontmatter@init{%
+ \@author@init
+}%
+\def\@author@def#1#2{%
+ \frontmatterverbose@sw{\typeout{\string\author\space\string\collaboration}}{}%
+ \move@AU\move@AF\move@AUAF
+ \let\@AF@join\@author@join
+ #1%
+ \def\@author{{#2}{}}%
+}%
+\def\@author@join@#1#2#3{%
+ \def\@author{{#1}{\@join{\@separator}{#2}{#3}}}%
+}%
+\def\@author@join{\expandafter\@author@join@\@author}%
+\def\move@AU{%
+ \@authorclear@sw{}{%
+ \collaboration@sw{%
+ \advance\c@collab\@ne
+ \@argswap{\CO@grp\CO@opr}%
+ }{%
+ \@argswap{\AU@grp\AU@opr}%
+ }%
+ {%
+ \expandafter\@argswap@val
+ \expandafter{\@author}%
+ {\expandafter\@argswap@val\expandafter{\the\c@collab}{\add@AUCO@grp}}%
+ }%
+ }%
+ \@author@init
+}%
+\def\add@AUCO@grp#1#2#3#4{%
+ \appdef#3{#4{#1}#2}%
+ \frontmatterverbose@sw{\say#3}{}%
+}%
+\def\@author@finish{%
+ \frontmatterverbose@sw{\typeout{\string\@author@finish}}{}%
+ \move@AU\move@AF
+ \@ifx{\AU@grp\@empty}{%
+ \@ifx{\CO@grp\@empty}%
+ }{%
+ \false@sw
+ }%
+ {}{%
+ \@ifx{\AF@grp\@empty}{%
+ \begingroup
+ \let\href\@secondoftwo
+ \let\AU@opr\@secondofthree
+ \let\CO@opr\@secondofthree
+ \let\footnote\@gobble
+ \@ifx{\CO@grp\@empty}{%
+ \class@warn{Assuming \string\noaffiliation\space for authors}%
+ \frontmatterverbose@sw{\say\AU@grp}%
+ }{%
+ \class@warn{Assuming \string\noaffiliation\space for collaboration}%
+ \frontmatterverbose@sw{\say\CO@grp}{}%
+ }%
+ \endgroup
+ \@affil@none\move@AF
+ }{}%
+ }%
+ \move@AUAF
+}%
+\def\@secondofthree#1#2#3{#2}%
+\def\@join#1#2#3{%
+ \@if@empty{#2}{#3}{#2#1#3}%
+}%
+\def\@separator{;\space}%
+\let\surname\@firstofone
+\let\firstname\@firstofone
+\newcommand\frontmatter@and{\class@err{\protect\and\space is not supported}}
+\def\cat@comma@active{\catcode`\,\active}%
+{\cat@comma@active\gdef,{\active@comma}}%
+\def\active@comma{,\penalty-300\relax}%
+\newcommand\affiliation{%
+ \frontmatterverbose@sw{\typeout{\string\affiliation}}{}%
+ \move@AU\move@AF
+ \begingroup
+ \cat@comma@active
+ \@affiliation
+}%
+\def\@affiliation#1{%
+ \endgroup
+ \let\@AF@join\@affil@join
+ \@affil@def{#1}%
+}%
+\newcommand\frontmatter@noaffiliation{%
+ \frontmatterverbose@sw{\typeout{\string\noaffiliation}}{}%
+ \move@AU\move@AF
+ \@affil@none\move@AF
+ \move@AUAF
+}%
+\def\blankaffiliation{{}}%
+\def\@affil@cleared{{{}}{}}%
+\def\@affil@nil{{\relax}{}}%
+\appdef\frontmatter@init{%
+ \@affil@init
+}%
+\def\@affil@none{%
+ \let\@affil\@affil@nil
+}%
+\def\@affil@init{%
+ \let\@affil\@affil@cleared
+}%
+\def\@affilclear@sw{\@ifx{\@affil\@affil@cleared}}%
+\def\@affil@def#1{%
+ \def\@affil{{#1}{}}%
+}%
+\def\@affil@join@#1#2#3{%
+ \def\@affil{{#1}{\@join{\@separator}{#2}{#3}}}%
+}%
+\def\@affil@join{\expandafter\@affil@join@\@affil}%
+\def\move@AF{%
+ \@affilclear@sw{}{%
+ \@booleanfalse\temp@sw
+ \let\@tempd\@empty
+ \@affils@sw{%
+ \expandafter\@affil@addr@def\expandafter\@tempa\@affil
+ \def\AFF@opr{\@affil@match\@tempa}%
+ \@AFF@list
+ }{}\temp@sw
+ {%
+ \expandafter\@affil@aux@def\expandafter\@tempb\@affil
+ \@ifx{\@tempb\@empty}{}{%
+ \@ifx{\@tempb\@tempd}{}{%
+ \class@warn{%
+ Ancillary information for \@tempa\space must not be different!
+ Please put all of it on the first instance%
+ }%
+ }%
+ }%
+ }%
+ {%
+ \@ifx{\@affil\@affil@nil}{%
+ \def\@tempc{0}%
+ \@argswap@val{0}%
+ }{%
+ \advance\c@affil\@ne
+ \expandafter\def\expandafter\@tempc\expandafter{\the\c@affil}%
+ \expandafter\@argswap@val\expandafter{\the\c@affil}%
+ }%
+ {%
+ \expandafter\@argswap@val\expandafter{\the\c@collab}{%
+ \expandafter\@argswap@val\expandafter{\@affil}{%
+ \add@list@val@val@val\@AFF@list\AFF@opr
+ }%
+ }%
+ }%
+ }%
+ \appdef@eval\AF@grp\@tempc
+ \frontmatterverbose@sw{\say\AF@grp}{}%
+ \@affil@init
+ }%
+}%
+\def\@affil@addr@def#1#2#3{%
+ \def#1{#2}%
+}%
+\def\@affil@aux@def#1#2#3{%
+ \def#1{#3}%
+}%
+\def\add@list@val@val@val#1#2#3#4#5{%
+ \appdef#1{#2{#5}{#4}#3}%
+ \frontmatterverbose@sw{\say#1}{}%
+}%
+\def\@affil@match#1#2#3#4#5{%
+ \temp@sw{}{%
+ \def\@tempifx{#4}%
+ \@ifx{\@tempifx#1}{%
+ \groupauthors@sw{%
+ \@ifnum{#3=\c@collab}{%
+ \true@sw
+ }{%
+ \false@sw
+ }%
+ }{%
+ \true@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ {%
+ \@booleantrue\temp@sw
+ \def\@tempc{#2}%
+ \def\@tempd{#5}%
+ }{%
+ }%
+ }%
+}%
+\def\move@AUAF{%
+ \frontmatterverbose@sw{\say\AU@grp\say\AF@grp\say\CO@grp}{}%
+ \@ifx{\AF@grp\@empty}{%
+ \@ifx{\@empty\CO@grp}{%
+ }{%
+ \appdef \@AAC@list{\AF@opr{{0}}}%
+ \appdef@e \@AAC@list{\CO@grp}%
+ \appdef@e \@AFG@list{\CO@grp}%
+ \let\CO@grp\@empty
+ }%
+ }{%
+ \appdef \@AAC@list{\AF@opr}%
+ \appdef@eval\@AAC@list{\AF@grp}%
+ \appdef@e \@AAC@list{\AU@grp}%
+ \@ifx{\@empty\AU@grp}{%
+ \@ifx{\@empty\CO@grp}%
+ }{%
+ \false@sw
+ }%
+ {%
+ }{%
+ \@booleanfalse\temp@sw
+ \def\AFG@opr{\x@match\AF@grp}%
+ \let\CO@opr\@author@gobble
+ \@AFG@list
+ \temp@sw{}{%
+ \appdef \@AFG@list{\AFG@opr}%
+ \appdef@eval\@AFG@list{\AF@grp}%
+ }%
+ \@ifx{\@empty\CO@grp}{}{%
+ \appdef@e \@AAC@list{\CO@grp}%
+ \appdef@e \@AFG@list{\CO@grp}%
+ \let\CO@grp\@empty
+ }%
+ }%
+ \let\CO@grp\@empty
+ \let\AU@grp\@empty
+ \let\AF@grp\@empty
+ }%
+ \frontmatterverbose@sw{\say\@AAC@list\say\@AFG@list}{}%
+}%
+\appdef\frontmatter@init{%
+ \let\AU@grp\@empty
+ \let\CO@grp\@empty
+ \let\AF@grp\@empty
+ \let\@AAC@list\@empty
+ \let\@AFG@list\@empty
+ \let\@AFF@list\@empty
+}%
+\appdef\frontmatter@init{%
+ \let\@AF@join\@AF@join@error
+}%
+\def\@AF@join@error#1{%
+ \class@warn{%
+ \string\email, \string\homepage, \string\thanks, or \string\altaffiliation\space
+ appears in wrong context.
+ }%
+}%
+\def\sanitize@url{%
+ \@makeother\%%
+ \@makeother\~%
+ \@makeother\_%
+}%
+\newcommand*\email[1][]{\begingroup\sanitize@url\@email{#1}}%
+\def\@email#1#2{%
+ \endgroup
+ \@AF@join{#1\href{mailto:#2}{#2}}%
+}%
+\newcommand*\homepage[1][]{\begingroup\sanitize@url\@homepage{#1}}%
+\def\@homepage#1#2{%
+ \endgroup
+ \@AF@join{#1\href{#2}{#2}}%
+}%
+\appdef\class@documenthook{%
+ \providecommand\href[1]{}%
+}%
+\def\frontmatter@thanks{% implicit #1
+ \@AF@join
+}%
+\newcommand*\altaffiliation[2][]{%
+ \@AF@join{#1#2}%
+}%
+\def\set@listcomma@list#1{%
+ \expandafter\@reset@ac\expandafter#1#1{0}\@reset@ac{%
+ \let\@listcomma\relax
+ }{%
+ \let\@listcomma\@listcomma@comma
+ }%
+}%
+\def\set@listcomma@count#1{%
+ \@ifnum{#1=\tw@}{%
+ \let\@listcomma\relax
+ }{%
+ \let\@listcomma\@listcomma@comma
+ }%
+}%
+\def\@reset@ac#1#2#3\@reset@ac{%
+ \def#1{#3}%
+ \@tempcnta#2\relax
+ \@ifnum{#2=\tw@}%
+}%
+\def\@listand{\@ifnum{\@tempcnta=\tw@}{\andname\space}{}}%
+\def\@listcomma@comma{\@ifnum{\@tempcnta>\@ne}{,}{}}%
+\def\@listcomma@comma@UK{\@ifnum{\@tempcnta>\tw@}{,}{}}%
+\def\@collaboration@gobble#1#2#3{}%
+\def\doauthor#1#2#3{%
+ \ignorespaces#1\unskip\@listcomma
+ \begingroup
+ #3%
+ \@if@empty{#2}{\endgroup{}{}}{\endgroup{\comma@space}{}\frontmatter@footnote{#2}}%
+ \space \@listand
+}%
+\def\x@match#1#2{%
+ \temp@sw{}{%
+ \def\@tempifx{#2}%
+ \@ifx{\@tempifx#1}{%
+ \@booleantrue\temp@sw
+ }{%
+ }%
+ }%
+}%
+\def\y@match#1#2#3{%
+ \temp@sw{}{%
+ \def\@tempifx{#3}%
+ \@ifx{\@tempifx#1}{%
+ \@booleantrue\temp@sw
+ \def\@tempb{#2}%
+ }{%
+ }%
+ }%
+}%
+\def\frontmatter@footnote#1{%
+ \begingroup
+ \@booleanfalse\temp@sw
+ \def\@tempa{#1}%
+ \let\@tempb\@empty
+ \def\@TBN@opr{\y@match\@tempa}%
+ \@FMN@list
+ \temp@sw{%
+ \expandafter\frontmatter@footnotemark
+ \expandafter{\@tempb}%
+ }{%
+ \stepcounter\@mpfn
+ \expandafter\expandafter
+ \expandafter\frontmatter@foot@mark
+ \expandafter\expandafter
+ \expandafter{%
+ \expandafter \the\csname c@\@mpfn\endcsname
+ }{#1}%
+ }%
+ \endgroup
+}%
+\def\frontmatter@foot@mark#1#2{%
+ \frontmatter@footnotemark{#1}%
+ \g@addto@macro\@FMN@list{\@TBN@opr{#1}{#2}}%
+}%
+\appdef\frontmatter@init{%
+ \global\let\@FMN@list\@empty
+}%
+\def\frontmatter@footnotemark#1{%
+ \leavevmode
+ \ifhmode\edef\@x@sf{\the\spacefactor}\nobreak\fi
+ \begingroup
+ \hyper@linkstart {link}{frontmatter.#1}%
+ \csname c@\@mpfn\endcsname#1\relax
+ \def\@thefnmark{\frontmatter@thefootnote}%
+ \@makefnmark
+ \hyper@linkend
+ \endgroup
+ \ifhmode\spacefactor\@x@sf\fi
+ \relax
+}%
+\def\keywords#1{%
+ \aftermaketitle@chk{\keywords}%
+ \gdef\@keywords{#1}%
+}%
+\appdef\frontmatter@init{%
+ \let\@keywords\@empty
+}%
+\newcommand*\frontmatter@date[2][\Dated@name]{\def\@date{#1#2}}%
+\def\@date{}%
+\newcommand*\received[2][\Received@name]{\def\@received{#1#2}}%
+\def\@received{}%
+\newcommand*\revised[2][\Revised@name]{\def\@revised{#1#2}}%
+\def\@revised{}%
+\newcommand*\accepted[2][\Accepted@name]{\def\@accepted{#1#2}}%
+\def\@accepted{}%
+\newcommand*\published[2][\Published@name]{\def\@published{#1#2}}%
+\def\@published{}%
+\def\pacs#1{%
+ \aftermaketitle@chk{\pacs}%
+ \gdef\@pacs{#1}%
+}%
+\appdef\frontmatter@init{%
+ \let\@pacs\@empty
+}%
+\def\preprint#1{\gappdef\@preprint{\preprint{#1}}}%
+\appdef\frontmatter@init{%
+ \let\@preprint\@empty
+}%
+\newbox\absbox
+\def\toclevel@abstract{1}%
+\def\addcontents@abstract{%
+ \phantomsection
+ \expandafter\def\csname Parent0\endcsname{section*.2}%
+ \expandafter\@argswap@val\expandafter{\abstractname}{\addcontentsline{toc}{abstract}}%
+}%
+\newenvironment{frontmatter@abstract}{%
+ \aftermaketitle@chk{\begin{abstract}}%
+ \global\setbox\absbox\vbox\bgroup
+ \color@begingroup
+ \columnwidth\textwidth
+ \hsize\columnwidth
+ \@parboxrestore
+ \def\@mpfn{mpfootnote}\def\thempfn{\thempfootnote}\c@mpfootnote\z@
+ \let\@footnotetext\frontmatter@footnotetext
+ \minipagefootnote@init
+ \let\set@listindent\set@listindent@
+ \let\@listdepth\@mplistdepth \@mplistdepth\z@
+ \let@environment{description}{frontmatter@description}%
+ \@minipagerestore
+ \@setminipage
+ \frontmatter@abstractheading
+ \frontmatter@abstractfont
+ \let\footnote\mini@note
+ \expandafter\everypar\expandafter{\the\everypar\addcontents@abstract\everypar{}}%
+}{%
+ \par
+ \unskip
+ \minipagefootnote@here
+ \@minipagefalse %% added 24 May 89
+ \color@endgroup
+ \egroup
+}%
+\long\def\frontmatter@footnotetext#1{%
+ \minipagefootnote@pick
+ \set@footnotefont
+ \set@footnotewidth
+ \@parboxrestore
+ \protected@edef\@currentlabel{\csname p@\@mpfn\endcsname\@thefnmark}%
+ \color@begingroup
+ \frontmatter@makefntext{%
+ \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox\vadjust{\vskip\z@skip}%
+ }%
+ \color@endgroup
+ \minipagefootnote@drop
+}%
+\def\ltx@no@footnote{%
+ \let\ltx@xfootnote\ltx@no@xfootnote\let\ltx@yfootnote\ltx@no@yfootnote
+ \let\ltx@xfootmark\ltx@no@xfootmark\let\ltx@yfootmark\ltx@no@yfootmark
+ \let\ltx@xfoottext\ltx@no@xfoottext\let\ltx@yfoottext\ltx@no@yfoottext
+}%
+\def\ltx@no@xfootnote[#1]#2{\ltx@no@footwarn\footnote}%
+\def\ltx@no@yfootnote#1{\ltx@no@footwarn\footnote}%
+\def\ltx@no@xfootmark[#1]{\ltx@no@footwarn\footnotemark}%
+\def\ltx@no@yfootmark{\ltx@no@footwarn\footnotemark}%
+\def\ltx@no@xfoottext[#1]#2{\ltx@no@footwarn\footnotetext}%
+\def\ltx@no@yfoottext#1{\ltx@no@footwarn\footnotetext}%
+\def\ltx@no@footwarn#1{%
+ \class@warn{%
+ The \string#1\space command is not legal on the title page;
+ using \string\thanks\space instead might suit you: consult the manual for details%
+ }%
+}%
+\def\frontmatter@abstractheading{%
+ \begingroup
+ \centering\large
+ \abstractname
+ \par
+ \endgroup
+}%
+\def\frontmatter@abstractfont{}%
+\newenvironment{frontmatter@description}{%
+ \list{}{%
+ \leftmargin\z@
+ \labelwidth\z@
+ \itemindent\z@
+ \let\makelabel\frontmatter@descriptionlabel
+ }%
+}{%
+ \endlist
+}%
+\def\frontmatter@descriptionlabel#1{%
+ \hspace\labelsep
+ \normalfont\bfseries
+ #1:%
+}%
+\def\frontmatter@abstractwidth{\textwidth}
+\def\frontmatter@abstract@produce{%
+ \par
+ \preprintsty@sw{%
+ \do@output@MVL{%
+ \vskip\frontmatter@preabstractspace
+ \vskip200\p@\@plus1fil
+ \penalty-200\relax
+ \vskip-200\p@\@plus-1fil
+ }%
+ }{%
+ \addvspace{\frontmatter@preabstractspace}%
+ }%
+ \begingroup
+ \dimen@\baselineskip
+ \setbox\z@\vtop{\unvcopy\absbox}%
+ \advance\dimen@-\ht\z@\advance\dimen@-\prevdepth
+ \@ifdim{\dimen@>\z@}{\vskip\dimen@}{}%
+ \endgroup
+ \begingroup
+ \prep@absbox
+ \unvbox\absbox
+ \post@absbox
+ \endgroup
+ \@ifx{\@empty\mini@notes}{}{\mini@notes\par}%
+ \addvspace\frontmatter@postabstractspace
+}%
+\appdef\frontmatter@init{\let\mini@notes\@empty}%
+\let\prep@absbox\@empty
+\let\post@absbox\@empty
+\def\frontmatter@preabstractspace{.5\baselineskip}
+\def\frontmatter@postabstractspace{.5\baselineskip}
+\newenvironment{frontmatter@titlepage}{%
+ \twocolumn@sw{\onecolumngrid}{\newpage}%
+ \thispagestyle{titlepage}%
+ \setcounter{page}\@ne
+}{%
+ \twocolumn@sw{\twocolumngrid}{\newpage}%
+ \twoside@sw{}{%
+ \setcounter{page}\@ne
+ }%
+}%
+\def\frontmatter@maketitle{%
+ \@author@finish
+ \title@column\titleblock@produce
+ \suppressfloats[t]%
+ \let\and\relax
+ \let\affiliation\@gobble
+ \let\author\@gobble
+ \let\@AAC@list\@empty
+ \let\@AFF@list\@empty
+ \let\@AFG@list\@empty
+ \let\@AF@join\@AF@join@error
+ \let\email\@gobble
+ \let\@address\@empty
+ \let\maketitle\relax
+ \let\thanks\@gobble
+ \let\abstract\@undefined\let\endabstract\@undefined
+ \titlepage@sw{%
+ \vfil
+ \clearpage
+ }{}%
+}%
+\def\maketitle@Hy{%
+ \let\Hy@saved@footnotemark\@footnotemark
+ \let\Hy@saved@footnotetext\@footnotetext
+ \let\@footnotemark\H@@footnotemark
+ \let\@footnotetext\H@@footnotetext
+ \@ifnextchar[%]
+ \Hy@maketitle@optarg
+ {%
+ \HyOrg@maketitle
+ \Hy@maketitle@end
+ }%
+}%
+\appdef\class@documenthook{%
+ \@ifx{\maketitle\maketitle@Hy}{%
+ \class@info{Taking \string\maketitle\space back from hyperref}%
+ \let\maketitle\frontmatter@maketitle
+ }{%
+ }%
+}%
+\def\titleblock@produce{%
+ \begingroup
+ \ltx@footnote@pop
+ \def\@mpfn{mpfootnote}%
+ \def\thempfn{\thempfootnote}%
+ \c@mpfootnote\z@
+ \let\@makefnmark\frontmatter@makefnmark
+ \frontmatter@setup
+ \thispagestyle{titlepage}\label{FirstPage}%
+ \frontmatter@title@produce
+ \groupauthors@sw{%
+ \frontmatter@author@produce@group
+ }{%
+ \frontmatter@author@produce@script
+ }%
+ \frontmatter@RRAPformat{%
+ \expandafter\produce@RRAP\expandafter{\@date}%
+ \expandafter\produce@RRAP\expandafter{\@received}%
+ \expandafter\produce@RRAP\expandafter{\@revised}%
+ \expandafter\produce@RRAP\expandafter{\@accepted}%
+ \expandafter\produce@RRAP\expandafter{\@published}%
+ }%
+ \frontmatter@abstract@produce
+ \@ifx@empty\@pacs{}{%
+ \@pacs@produce\@pacs
+ }%
+ \@ifx@empty\@keywords{}{%
+ \@keywords@produce\@keywords
+ }%
+ \par
+ \frontmatter@finalspace
+ \endgroup
+}%
+\def\toclevel@title{0}%
+\def\frontmatter@title@produce{%
+ \begingroup
+ \frontmatter@title@above
+ \frontmatter@title@format
+ \@title
+ \unskip
+ \phantomsection\expandafter\@argswap@val\expandafter{\@title}{\addcontentsline{toc}{title}}%
+ \@ifx{\@title@aux\@title@aux@cleared}{}{%
+ \expandafter\frontmatter@footnote\expandafter{\@title@aux}%
+ }%
+ \par
+ \frontmatter@title@below
+ \endgroup
+}%
+\appdef\let@mark{\let\\\relax}%
+\def\frontmatter@title@above{}%
+\def\frontmatter@title@format{}%
+\def\frontmatter@title@below{\addvspace{\baselineskip}}%
+\def\frontmatter@author@produce@script{%
+ \begingroup
+ \let\@author@present\@author@present@script
+ \frontmatterverbose@sw{\typeout{\string\frontmatter@author@produce@script:}\say\@AAC@list\say\@AFF@list\say\@AFG@list}{}%
+ \let\AU@temp\@empty
+ \@tempcnta\z@
+ \let\AF@opr \@gobble
+ \def\AU@opr{\@author@count\@tempcnta}%
+ \def\CO@opr{\@collaboration@count\AU@temp\@tempcnta}%
+ \@AAC@list
+ \expandafter\CO@opr\@author@cleared
+ \begingroup
+ \frontmatter@authorformat
+ \let\AF@opr \@affilID@def
+ \let\AU@opr \@author@present
+ \def\CO@opr{\@collaboration@present\AU@temp}%
+ \set@listcomma@list\AU@temp
+ \@AAC@list
+ \unskip\unskip
+ \par
+ \endgroup
+ \begingroup
+ \frontmatter@above@affiliation@script
+ \let\AFF@opr \@affil@script
+ \@AFF@list
+ \frontmatter@footnote@produce
+ \par
+ \endgroup
+ \endgroup
+}%
+\def\@author@count#1{%
+ \advance#1\@ne
+ \@author@gobble
+}%
+\def\@collaboration@present#1#2#3#4{%
+ \par
+ \begingroup
+ \frontmatter@collaboration@above
+ \@affilID@def{}%
+ \@tempcnta\z@
+ \@author@present{}{(\ignorespaces#3\unskip)}{#4}%
+ \par
+ \endgroup
+ \set@listcomma@list#1%
+}%
+\def\frontmatter@collaboration@above{}%
+\def\@collaboration@count#1#2{%
+ \appdef@eval#1{\the#2}#2\z@
+ \@author@gobble
+}%
+\def\@affilID@def{\def\@affilID@temp}%
+\let\@affilID@temp\@empty
+\def\affil@script#1#2#3{%
+ \def\@tempifx{#1}\@ifx{\@tempifx\@tempa}{%
+ \@if@empty{#2}{}{%
+ \par
+ \begingroup
+ \def\@thefnmark{#1}\@makefnmark\ignorespaces
+ #2%
+ \@if@empty{#3}{}{\frontmatter@footnote{#3}}%
+ \par
+ \endgroup
+ }%
+ }{}%
+}%
+\def\@affil@script#1#2#3#4{%
+ \@ifnum{#1=\z@}{}{%
+ \par
+ \begingroup
+ \frontmatter@affiliationfont
+ \@ifnum{\c@affil<\affil@cutoff}{}{%
+ \def\@thefnmark{#1}\@makefnmark
+ }%
+ \ignorespaces#3%
+ \@if@empty{#4}{}{\frontmatter@footnote{#4}}%
+ \par
+ \endgroup
+ }%
+}%
+\let\affil@cutoff\@ne
+\def\@author@present@script#1#2#3{%
+ \begingroup
+ \gdef\comma@space{\textsuperscript{,\,}}%
+ \doauthor{#2}{#3}{\@affil@present@script}%
+ \endgroup
+ \advance\@tempcnta\m@ne
+}%
+\def\@affilcomma#1#2{%
+ \@ifx{\z@#1}{%
+ \@ifx{\relax#2}{}{%
+ \@affilcomma{#2}%
+ }%
+ }{%
+ #1%
+ \@ifx{\relax#2}{}{%
+ \@ifx{\z@#2}{%
+ \@affilcomma
+ }{%
+ ,\,\@affilcomma{#2}%
+ }%
+ }%
+ }%
+}%
+\def\@affil@present@script{%
+ \let\@tempa\@empty
+ \expandafter\@affil@present@script@\@affilID@temp\relax
+}%
+\def\@affil@present@script@#1{%
+ \@ifx{\relax#1}{%
+ \@ifx{\@tempa\@empty}{%
+ \aftergroup\false@sw
+ }{%
+ \textsuperscript{\expandafter\@affilcomma\@tempa\relax\relax}%
+ \aftergroup\true@sw
+ }%
+ }{%
+ \@ifnum{#1=\z@}{}{\appdef\@tempa{{#1}}}%
+ \@affil@present@script@
+ }%
+}%
+\@provide\@author@parskip{\z@skip}%
+\def\frontmatter@author@produce@group{%
+ \begingroup
+ \let\@author@present\@author@present@group
+ \frontmatter@authorformat
+ \frontmatterverbose@sw{\typeout{\string\frontmatter@author@produce@group:}\say\@AAC@list\say\@AFF@list\say\@AFG@list}{}%
+ \let\AU@temp\@empty
+ \set@listcomma@list\AU@temp
+ \def\CO@opr{\@collaboration@present\AU@temp}%
+ \let\AFG@opr \affils@present@group
+ \let\@listcomma\relax
+ \@AFG@list
+ \frontmatter@footnote@produce
+ \par
+ \endgroup
+ \frontmatter@authorbelow
+}%
+\@provide\frontmatter@authorbelow{}%
+\def\affils@present@group#1{%
+ \begingroup
+ \def\AF@temp{#1}%
+ \@tempcnta\z@
+ \let\AU@opr \@undefined
+ \let\CO@opr \@undefined
+ \def\AF@opr{\@affilID@count\AF@temp\@tempcnta}%
+ \@AAC@list
+ \@ifnum{\@tempcnta=\z@}{}{%
+ \begingroup
+ \frontmatter@above@affilgroup
+ \set@listcomma@count\@tempcnta
+ \let\AU@opr \@undefined
+ \let\CO@opr \@undefined
+ \def\AF@opr{\@affilID@match\AF@temp}%
+ \@AAC@list
+ \endgroup
+ \begingroup
+ \par
+ \frontmatter@above@affiliation
+ \frontmatter@affiliationfont
+ \let\\\frontmatter@addressnewline
+ \@tempcnta\z@
+ \@tfor\AF@temp:=#1\do{%
+ \expandafter\@ifx\expandafter{\expandafter\z@\AF@temp}{}{%
+ \advance\@tempcnta\@ne
+ }%
+ }%
+ \@ifnum{\@tempcnta=\tw@}{%
+ \let\@listcomma\relax
+ }{}%
+ \def@after@address
+ \runinaddress@sw{%
+ }{%
+ \tightenlines@sw{}{%
+ \parskip\z@
+ }%
+ \appdef\after@address\par
+ }%
+ \let\AFF@opr \@affil@group
+ \do@affil@fromgroup\@AFF@list#1\relax
+ \endgroup
+ }%
+ \par
+ \endgroup
+}%
+\def\def@after@address{\def\after@address{\@listcomma\ \@listand}}%
+\def\def@after@address@empty{\let\after@address\@empty}%
+\def\@affilID@count#1#2#3{%
+ \def\@tempifx{#3}%
+ \@ifx{\@tempifx#1}{%
+ \def\AU@opr{\@author@count#2}%
+ }{%
+ \let\AU@opr \@author@gobble
+ }%
+ \let\CO@opr \@collaboration@gobble
+}%
+\def\@affilID@match#1#2{%
+ \def\@tempifx{#2}%
+ \@ifx{\@tempifx#1}{%
+ \let\AU@opr \@author@present
+ }{%
+ \let\AU@opr \@author@gobble
+ }%
+ \let\CO@opr \@collaboration@gobble
+}%
+\def\do@affil@fromgroup#1#2{%
+ \@ifx{\relax#2}{}{%
+ \count@#2\relax
+ \@ifnum{\z@=\count@}{}{#1}%
+ \do@affil@fromgroup#1%
+ }%
+}%
+\def\@affil@group#1#2#3#4{%
+ \@ifnum{#1=\count@}{%
+ \def\@tempa{#3}%
+ \@ifx{\@tempa\blankaffiliation}{}{%
+ #3%
+ \@if@empty{#4}{}{%
+ \frontmatter@footnote{#4}%
+ }%
+ \after@address
+ }%
+ \advance\@tempcnta\m@ne
+ }{}%
+}%
+\def\@author@present@group#1#2#3{%
+ \gdef\comma@space{\gdef\comma@space{\textsuperscript{,\,}}}%
+ \doauthor{#2}{#3}{\@affil@present@group}%
+ \advance\@tempcnta\m@ne
+}%
+\def\@affil@present@group{%
+ \aftergroup\false@sw
+}%
+\def\@pacs@produce#1{%
+ \showPACS@sw{%
+ \begingroup
+ \frontmatter@PACS@format
+ \@pacs@name#1\par
+ \endgroup
+ }{%
+ \@if@empty{#1}{}{%
+ \class@warn{\PACS@warn}%
+ }%
+ }%
+}%
+\def\PACS@warn{If you want your PACS to appear in your output, use document class option showpacs}%
+\def\@keywords@produce#1{%
+ \showKEYS@sw{%
+ \begingroup
+ \frontmatter@keys@format
+ \@keys@name#1\par
+ \endgroup
+ }{%
+ \@if@empty{#1}{}{%
+ \class@warn{If you want your keywords to appear in your output, use document class option showkeys}%
+ }%
+ }%
+}%
+\def\frontmatter@footnote@produce@footnote{%
+ \let\@TBN@opr\present@FM@footnote
+ \@FMN@list
+ \global\let\@FMN@list\@empty
+}%
+\def\present@FM@footnote#1#2{%
+ \begingroup
+ \csname c@\@mpfn\endcsname#1\relax
+ \def\@thefnmark{\frontmatter@thefootnote}%
+ \frontmatter@footnotetext{#2}%
+ \endgroup
+}%
+\def\frontmatter@footnote@produce@endnote{%
+}%
+\appdef\frontmatter@init{%
+ \@ifxundefined\title@column {\let\title@column\@empty}{}%
+ \@ifxundefined\preprintsty@sw {\@booleanfalse\preprintsty@sw}{}%
+ \@ifxundefined\frontmatter@footnote@produce{\let\frontmatter@footnote@produce\frontmatter@footnote@produce@footnote}{}%
+ \@ifxundefined\do@output@MVL {\let\do@output@MVL\@firstofone}{}%
+ \@ifxundefined\comma@space {\let\comma@space\@empty}{}%
+}%
+\def\frontmatter@thefootnote{%
+ \altaffilletter@sw{\@alph}{\@fnsymbol}{\csname c@\@mpfn\endcsname}%
+}%
+\@ifx{\altaffilletter@sw\@undefined}{\@booleantrue\altaffilletter@sw}{}%
+\def\frontmatter@makefnmark{%
+ \@textsuperscript{%
+ \normalfont\@thefnmark
+ }%
+}%
+\long\def\frontmatter@makefntext#1{%
+ \parindent 1em
+ \noindent
+ \Hy@raisedlink{\hyper@anchorstart{frontmatter.\expandafter\the\csname c@\@mpfn\endcsname}\hyper@anchorend}%
+ \@makefnmark
+ #1%
+}%
+\def\frontmatter@setup{}%
+\def\frontmatter@RRAPformat#1{%
+ \removelastskip
+ \begingroup
+ \frontmatter@RRAP@format
+ #1\par
+ \endgroup
+}%
+\def\punct@RRAP{; }%
+\def\produce@RRAP#1{%
+ \@if@empty{#1}{}{%
+ \@ifvmode{\leavevmode}{\unskip\punct@RRAP\ignorespaces}%
+ #1%
+ }%
+}%
+\def\frontmatter@authorformat{}%
+\def\frontmatter@above@affilgroup{}%
+\def\frontmatter@above@affiliation{}%
+\def\frontmatter@above@affiliation@script{}%
+\def\frontmatter@affiliationfont{\itshape\selectfont}%
+\def\frontmatter@RRAP@format{}%
+\def\frontmatter@PACS@format{}%
+\def\frontmatter@keys@format{}%
+\def\frontmatter@finalspace{\addvspace{18\p@}}
+\def\frontmatter@addressnewline{%
+ \@ifhmode{\skip@\lastskip\unskip\unpenalty\break\hskip\skip@}{}%
+ % was: \vskip-.5ex
+}%
+\def\frontmatter@preabstractspace{5.5\p@}
+\def\frontmatter@postabstractspace{6.5\p@}
+\def\aftermaketitle@chk#1{%
+ \@ifx{\maketitle\relax}{%
+ \class@err{\protect#1 must be used before \protect\maketitle}%
+ }{}%
+}%
+\def\ps@titlepage{\ps@empty}%
+\def\volumeyear#1{\gdef\@volumeyear{#1}}%
+\def\@volumeyear{}%
+\def\volumenumber#1{\gdef\@volumenumber{#1}}%
+\def\@volumenumber{}%
+\def\issuenumber#1{\gdef\@issuenumber{#1}}%
+\def\@issuenumber{}%
+\def\eid#1{\gdef\@eid{#1}}%
+\def\@eid{}%
+\def\startpage#1{\gdef\@startpage{#1}\c@page#1\relax}%
+\def\@startpage{\pageref{FirstPage}}%
+\def\endpage#1{\gdef\@endpage{#1}}%
+\def\@endpage{\pageref{LastPage}}%
+\def\print@toc#1{%
+ \begingroup
+ \expandafter\section
+ \expandafter*%
+ \expandafter{%
+ \csname#1name\endcsname
+ }%
+ \let\appendix\appendix@toc
+ \@starttoc{#1}%
+ \endgroup
+}%
+\def\appendix@toc{}%
+\def\Dated@name{Dated }%
+\def\Received@name{Received }%
+\def\Revised@name{Revised }%
+\def\Accepted@name{Accepted }%
+\def\Published@name{Published }%
+\appdef\robustify@contents{%
+ \let\thanks\@gobble\let\class@warn\@gobble
+ \def\begin{\string\begin}\def\end{\string\end}%
+}%
+\@ifxundefined\frontmatter@syntax@sw{\@booleantrue\frontmatter@syntax@sw}{}%
+\frontmatter@syntax@sw{%
+ \let\title \frontmatter@title
+ \let\author \frontmatter@author
+ \let\date \frontmatter@date
+ \@ifxundefined\@maketitle{%
+ \let\maketitle \frontmatter@maketitle
+ \@booleantrue \titlepage@sw
+ }{%
+ \let\@maketitle \frontmatter@maketitle
+ \prepdef\maketitle\@author@finish
+ }%
+ \let\noaffiliation \frontmatter@noaffiliation
+ \let\thanks@latex \thanks
+ \let\thanks \frontmatter@thanks
+ \let\and@latex \and
+ \let\and \frontmatter@and
+ \let@environment{titlepage}{frontmatter@titlepage}%
+ \let@environment{abstract}{frontmatter@abstract}%
+}{%
+ \let\noaffiliation\@empty
+}%
+\def\thanks@latex#1{%
+ \footnotemark
+ \expandafter\expandafter
+ \expandafter\gappdef
+ \expandafter\expandafter
+ \expandafter\@thanks
+ \expandafter\expandafter
+ \expandafter{%
+ \expandafter\expandafter
+ \expandafter\footnotetext
+ \expandafter\expandafter
+ \expandafter[%
+ \expandafter\the\csname c@\@mpfn\endcsname]{#1}}%
+}%
+\@booleanfalse\altaffilletter@sw
+\@if@sw\if@titlepage\fi{\@booleantrue}{\@booleanfalse}\titlepage@sw
+\def\frontmatter@title@above{\newpage\null\vskip2em\relax}%
+\def\frontmatter@title@format{\centering\LARGE\let\thanks\thanks@latex}%
+\def\frontmatter@title@below{\vskip1.5em\relax}%
+\def\frontmatter@authorformat{\centering\large\advance\baselineskip\p@\parskip11.5\p@\let\thanks\thanks@latex\let\and\and@space}%
+\def\frontmatter@authorbelow{\vskip 1em\relax}%
+\def\frontmatter@above@affiliation{}%
+\def\frontmatter@above@affiliation@script{}%
+\def\frontmatter@affiliationfont{\centering\itshape}%
+\def\frontmatter@RRAP@format{\centering\large}%
+\def\frontmatter@preabstractspace{1.5em}%
+\long\def\frontmatter@footnotetext{%
+ \expandafter\expandafter
+ \expandafter\footnotetext
+ \expandafter\expandafter
+ \expandafter[%
+ \expandafter\the\csname c@\@mpfn\endcsname]%
+}%
+\def\and@space{\\}%
+\def\andname{and}%
+\endinput
+%%
+%% End of file `ltxfront.sty'.
diff --git a/obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/ltxgrid.sty b/obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/ltxgrid.sty
new file mode 100644
index 0000000000..be1c2bfd78
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/ltxgrid.sty
@@ -0,0 +1,2722 @@
+%%
+%% This is file `ltxgrid.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% ltxgrid.dtx (with options: `package,kernel')
+%%
+%% This is a generated file;
+%% altering it directly is inadvisable;
+%% instead, modify the original source file.
+%% See the URL in the file 00readme.tex.
+%%
+%% License
+%% You may distribute this file under the conditions of the
+%% LaTeX Project Public License 1.3 or later
+%% (http://www.latex-project.org/lppl.txt).
+%%
+%% This file is distributed WITHOUT ANY WARRANTY;
+%% without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE.
+%%
+%%% @LaTeX-file{
+%%% filename = "ltxgrid.dtx",
+%%% version = "4.1r",
+%%% date = "2010/07/25",
+%%% time = "20:33:00 UT-8",
+%%% checksum = "5462",
+%%% author = "Arthur Ogawa (mailto:arthur_ogawa at sbcglobal.net),
+%%% commissioned by the American Physical Society.
+%%% ",
+%%% copyright = "Copyright (C) 1999, 2009 Arthur Ogawa,
+%%% distributed under the terms of the
+%%% LaTeX Project Public License, see
+%%% ftp://ctan.tug.org/macros/latex/base/lppl.txt
+%%% ",
+%%% address = "Arthur Ogawa,
+%%% USA",
+%%% telephone = "",
+%%% FAX = "",
+%%% email = "mailto colon arthur_ogawa at sbcglobal.net",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "latex, page grid, main vertical list",
+%%% supported = "yes",
+%%% abstract = "package to change page grid, MVL",
+%%% docstring = "The checksum field above generated by ltxdoc",
+%%% }
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]%
+\ProvidesFile{%
+ltxgrid%
+.sty%
+}%
+ [2010/07/25/20:33:00 4.1r page grid package (portions licensed from W. E. Baxter web at superscript.com)]% \fileversion
+\def\package@name{ltxgrid}%
+\expandafter\PackageInfo\expandafter{\package@name}{%
+ Page grid for \protect\LaTeXe,
+ by A. Ogawa (arthur_ogawa at sbcglobal.net)%
+}%
+\RequirePackage{ltxutil}%
+\newcounter{linecount}
+\def\loop@line#1#2{%
+ \par
+ \hb@xt@\hsize{%
+ \global\advance#1\@ne
+ \edef\@tempa{\@ifnum{100>#1}{0}{}\@ifnum{10>#1}{0}{}\number#1}%
+ \@tempa\edef\@tempa{\special{line:\@tempa}}\@tempa
+ \vrule depth2.5\p@#2\leaders\hrule\hfil
+ }%
+}%
+\def\lineloop#1{%
+ \loopwhile{\loop@line\c@linecount{}\@ifnum{#1>\c@linecount}}%
+}%
+\def\linefoot#1{%
+ \loop@line\c@linecount{%
+ \footnote{%
+ #1\special{foot:#1}\vrule depth2.5\p@\leaders\hrule\hfill
+ }%
+ }%
+}%
+\let\@@mark\mark
+\let\@@topmark\topmark
+\let\@@firstmark\firstmark
+\let\@@botmark\botmark
+\let\@@splitfirstmark\splitfirstmark
+\let\@@splitbotmark\splitbotmark
+\def\@themark{{}{}{}{}}%
+\def\nul@mark{{}{}{}{}\@@nul}%
+\def\set@mark@netw@#1#2#3#4#5#6#7{\gdef#1{{#6}{#7}{#4}{#5}}\do@mark}%
+\def\set@marktw@#1#2#3#4#5#6{\gdef#1{{#2}{#6}{#4}{#5}}\do@mark}%
+\def\set@markthr@@#1#2#3#4#5#6{\gdef#1{{#2}{#3}{#6}{#5}}\do@mark}%
+\def\get@mark@@ne#1#2#3#4#5\@@nul{#1}%
+\def\get@mark@tw@#1#2#3#4#5\@@nul{#2}%
+\def\get@mark@thr@@#1#2#3#4#5\@@nul{#3}%
+\def\get@mark@f@ur#1#2#3#4#5\@@nul{#4}%
+\def\mark@netw@{\expandafter\set@mark@netw@\expandafter\@themark\@themark}%
+\def\marktw@{\expandafter\set@marktw@\expandafter\@themark\@themark}%
+\def\markthr@@{\expandafter\set@markthr@@\expandafter\@themark\@themark}%
+\def\do@mark{\do@@mark\@themark\nobreak@mark}%
+\def\do@@mark#1{%
+ \begingroup
+ \let@mark
+ \@@mark{#1}%
+ \endgroup
+}%
+\def\let@mark{%
+ \let\protect\@unexpandable@protect
+ \let\label\relax
+ \let\index\relax
+ \let\glossary\relax
+}%
+\def\nobreak@mark{%
+ \@if@sw\if@nobreak\fi{\@ifvmode{\nobreak}{}}{}%
+}%
+\def\mark@envir{\markthr@@}%
+\def\bot@envir{%
+ \expandafter\expandafter
+ \expandafter\get@mark@thr@@
+ \expandafter\@@botmark
+ \nul@mark
+}%
+\def\markboth{\mark@netw@}%
+\def\markright{\marktw@}%
+\def\leftmark{%
+ \expandafter\expandafter
+ \expandafter\get@mark@@ne
+ \expandafter\saved@@botmark
+ \nul@mark
+}%
+\def\rightmark{%
+ \expandafter\expandafter
+ \expandafter\get@mark@tw@
+ \expandafter\saved@@firstmark
+ \nul@mark
+}%
+\let\primitive@output\output
+\long\def\@tempa#1\@@nil{#1}%
+ \toks@
+\expandafter\expandafter
+\expandafter{%
+\expandafter \@tempa
+ \the\primitive@output
+ \@@nil
+ }%
+\newtoks\output@latex
+\output@latex\expandafter{\the\toks@}%
+\let\output\output@latex
+\primitive@output{\dispatch@output}%
+\def\dispatch@output{%
+ \let\par\@@par
+ \expandafter\let\expandafter\output@procedure\csname output@\the\outputpenalty\endcsname
+ \@ifnotrelax\output@procedure{}{%
+ \expandafter\def\expandafter\output@procedure\expandafter{\the\output@latex}%
+ }%
+ \expandafter\@ifx\expandafter{\csname output@-\the\execute@message@pen\endcsname\output@procedure}{%
+ \let\output@procedure\@message@saved
+ }{}%
+ \ltxgrid@info@sw{\class@info{\string\dispatch@output}\say\output@procedure\saythe\holdinginserts}{}%
+ \outputdebug@sw{\output@debug}{}%
+ \output@procedure
+}%
+\def\set@output@procedure#1#2{%
+ \count@\outputpenalty\advance\count@-#2%
+ \expandafter\let\expandafter#1\csname output@\the\count@\endcsname
+}%
+\def\output@debug{%
+ \def\@tempa{\save@message}%
+ \@ifx{\output@procedure\@tempa}{%
+ \true@sw
+ }{%
+ \@ifnum{\outputpenalty=-\save@column@insert@pen}{%
+ \@ifnum{\holdinginserts>\z@}%
+ }{%
+ \false@sw
+ }%
+ }%
+ {}{\output@debug@}%
+}%
+\def\output@debug@{%
+ \saythe\outputpenalty
+ \saythe\interlinepenalty
+ \saythe\brokenpenalty
+ \saythe\clubpenalty
+ \saythe\widowpenalty
+ \saythe\displaywidowpenalty
+ \saythe\predisplaypenalty
+ \saythe\interdisplaylinepenalty
+ \saythe\postdisplaypenalty
+ \saythe\badness
+ \say\thepagegrid
+ \saythe\pagegrid@col
+ \saythe\pagegrid@cur
+ \saythe\insertpenalties
+ \say\@@botmark
+ \saythe\pagegoal
+ \saythe\pagetotal
+ \saythe{\badness\@cclv}%
+ \say\@toplist
+ \say\@botlist
+ \say\@dbltoplist
+ \say\@deferlist
+ \trace@scroll{%
+ \showbox\@cclv
+ \showbox\@cclv@saved
+ \showbox\pagesofar
+ \showbox\csname col@1\endcsname
+ \showbox\footsofar
+ \showbox\footins
+ \showbox\footins@saved
+ \showlists
+ }%
+}%
+\@ifxundefined{\outputdebug@sw}{%
+ \@booleanfalse\outputdebug@sw
+}{}%
+\def\trace@scroll#1{\begingroup\showboxbreadth\maxdimen\showboxdepth\maxdimen\scrollmode#1\endgroup}%
+\def\trace@box#1{\trace@scroll{\showbox#1}}%
+\prepdef\@outputpage{\@outputpage@head}%
+\let\@outputpage@head\@empty
+\appdef\@outputpage{\@outputpage@tail}%
+\let\@outputpage@tail\@empty
+\def\show@box@size#1#2{%
+ \show@box@size@sw{%
+ \begingroup
+ \setbox\z@\vbox{\unvcopy#2\hrule}%
+ \class@info{Show box size: #1^^J%
+ (\the\ht\z@\space X \the\wd\z@)
+ \the\c@page\space\space\the\pagegrid@cur\space\the\pagegrid@col
+ }%
+ \endgroup
+ }{}%
+}%
+\def\show@text@box@size{%
+ \show@box@size{Text column}\@outputbox
+ \tally@box@size@sw{%
+ \@ifdim{\wd\@outputbox>\z@}{%
+ \dimen@\ht\@outputbox\divide\dimen@\@twopowerfourteen
+ \advance\dimen@-\dp\csname box@size@\the\pagegrid@col\endcsname
+ \@ifdim{\dimen@>\z@}{%
+ \advance\dimen@ \ht\csname box@size@\the\pagegrid@col\endcsname
+ \global\ht\csname box@size@\the\pagegrid@col\endcsname\dimen@
+ \show@box@size@sw{%
+ \class@info{Column: \the\dimen@}%
+ }{}%
+ }{}%
+ }{}%
+ \global\dp\csname box@size@\the\pagegrid@col\endcsname\z@
+ }{}%
+}%
+\def\show@pagesofar@size{%
+ \show@box@size{Page so far}\pagesofar
+ \dimen@\ht\pagesofar\divide\dimen@\@twopowerfourteen
+ \global\dp\csname box@size@1\endcsname\dimen@
+ \show@box@size@sw{%
+ \class@info{Pagesofar: \the\dimen@}%
+ }{}%
+}%
+\@booleanfalse\tally@box@size@sw
+\@booleanfalse\show@box@size@sw
+\expandafter\newbox\csname box@size@1\endcsname
+\expandafter\setbox\csname box@size@1\endcsname\hbox{}%
+\expandafter\newbox\csname box@size@2\endcsname
+\expandafter\setbox\csname box@size@2\endcsname\hbox{}%
+\def\total@text{%
+ \@tempdima\the\ht\csname box@size@2\endcsname\divide\@tempdima\@twopowertwo\@tempcnta\@tempdima
+ \@tempdimb\the\ht\csname box@size@1\endcsname\divide\@tempdimb\@twopowertwo\@tempcntb\@tempdimb
+ \class@info{Total text: Column(\the\@tempcnta pt), Page(\the\@tempcntb pt)}%
+}%
+\def\natural@output{\toggle@insert{\output@holding}{\output@moving}}%
+\output@latex{\natural@output}%
+\def\output@holding{%
+ \csname output@init@\bot@envir\endcsname
+ \@if@exceed@pagegoal{\unvcopy\@cclv}{%
+ \setbox\z@\vbox{\unvcopy\@cclv}%
+ \outputdebug@sw{\trace@box\z@}{}%
+ \dimen@\ht\@cclv\advance\dimen@-\ht\z@
+ \dead@cycle@repair\dimen@
+ }{%
+ \dead@cycle
+ }%
+}%
+\def\@if@exceed@pagegoal#1{%
+ \begingroup
+ \setbox\z@\vbox{#1}%
+ \dimen@\ht\z@\advance\dimen@\dp\z@
+ \outputdebug@sw{\saythe\dimen@}{}%
+ \@ifdim{\dimen@>\pagegoal}{%
+ \setbox\z@\vbox{\@@mark{}\unvbox\z@}%
+ \splittopskip\topskip
+ \splitmaxdepth\maxdepth
+ \vbadness\@M
+ \vfuzz\maxdimen
+ \setbox\tw@\vsplit\z@ to\pagegoal
+ \outputdebug@sw{\trace@scroll{\showbox\tw@\showbox\z@}}{}%
+ \setbox\tw@\vbox{\unvbox\tw@}%
+ \@ifdim{\ht\tw@=\z@}{%
+ \ltxgrid@info{Found overly large chunk while preparing to move insertions. Attempting repairs}%
+ \aftergroup\true@sw
+ }{%
+ \aftergroup\false@sw
+ }%
+ }{%
+ \aftergroup\false@sw
+ }%
+ \endgroup
+}%
+\def\output@moving{%
+ \set@top@firstmark
+ \@ifnum{\outputpenalty=\do@newpage@pen}{%
+ \setbox\@cclv\vbox{%
+ \unvbox\@cclv
+ \remove@lastbox
+ \@ifdim{\ht\z@=\ht\@protection@box}{\box\lastbox}{\unskip}%
+ }%
+ }{}%
+ \@cclv@nontrivial@sw{%
+ \expandafter\output@do@prep\csname output@prep@\bot@envir \endcsname
+ \@makecolumn\true@sw
+ \expandafter\output@column@do\csname output@column@\thepagegrid\endcsname
+ \protect@penalty\do@startcolumn@pen
+ \clearpage@sw{%
+ \protect@penalty\do@endpage@pen
+ }{}%
+ \expandafter\let\expandafter\output@post@\csname output@post@\bot@envir \endcsname
+ \outputdebug@sw{\say\output@post@}{}%
+ \@ifx{\output@post@\relax}{\output@post@document}{\output@post@}%
+ }{%
+ \void@cclv
+ }%
+ \set@colht
+ \global\@mparbottom\z@
+ \global\@textfloatsheight\z@
+}%
+\def\output@do@prep#1{%
+ \outputdebug@sw{\class@info{Prep: \string#1}}{}%
+ \@ifx{#1\relax}{\output@prep@document}{#1}%
+}%
+\def\output@column@do#1{%
+ \outputdebug@sw{\class@info{Output column: \string#1}}{}%
+ \@ifx{#1\relax}{\output@column@one}{#1}%
+}%
+\def\void@cclv{\begingroup\setbox\z@\box\@cclv\endgroup}%
+\def\remove@lastbox{\setbox\z@\lastbox}%
+\def\@cclv@nontrivial@sw{%
+ \@ifx@empty\@toplist{%
+ \@ifx@empty\@botlist{%
+ \@ifvoid\footins{%
+ \@ifvoid\@cclv{%
+ \false@sw
+ }{%
+ \setbox\z@\vbox{\unvcopy\@cclv}%
+ \@ifdim{\ht\z@=\topskip}{%
+ \setbox\z@\vbox\bgroup
+ \unvbox\z@
+ \remove@lastbox
+ \dimen@\lastskip\unskip
+ \@ifdim{\ht\z@=\ht\@protection@box}{%
+ \advance\dimen@\ht\z@
+ \@ifdim{\dimen@=\topskip}{%
+ \aftergroup\true@sw
+ }{%
+ \aftergroup\false@sw
+ }%
+ }{%
+ \aftergroup\false@sw
+ }%
+ \egroup
+ {%
+ \false@sw
+ }{%
+ \true@sw
+ }%
+ }{%
+ \@ifdim{\ht\z@=\z@}{%
+ \ltxgrid@info{Found trivial column. Discarding it}%
+ \outputdebug@sw{\trace@box\@cclv}{}%
+ \false@sw
+ }{%
+ \true@sw
+ }%
+ }%
+ }%
+ }{%
+ \true@sw
+ }%
+ }{%
+ \true@sw
+ }%
+ }{%
+ \true@sw
+ }%
+}%
+\def\protect@penalty#1{\protection@box\penalty-#1\relax}%
+\newbox\@protection@box
+\setbox\@protection@box\vbox to1986sp{\vfil}%
+\def\protection@box{\nointerlineskip\copy\@protection@box}%
+\def\dead@cycle@repair#1{%
+ \expandafter\do@@mark
+ \expandafter{%
+ \@@botmark
+ }%
+ \unvbox\@cclv
+ \nointerlineskip
+ \vbox to#1{\vss}%
+ \@ifnum{\outputpenalty<\@M}{\penalty\outputpenalty}{}%
+}%
+\def\dead@cycle@repair@protected#1{%
+ \expandafter\do@@mark
+ \expandafter{%
+ \@@botmark
+ }%
+ \begingroup
+ \unvbox\@cclv
+ \remove@lastbox
+ \nointerlineskip
+ \advance#1-\ht\@protection@box
+ \vbox to#1{\vss}%
+ \protection@box % Reinsert protection box
+ \@ifnum{\outputpenalty<\@M}{\penalty\outputpenalty}{}%
+ \endgroup
+}%
+\def\dead@cycle{%
+ \expandafter\do@@mark
+ \expandafter{%
+ \@@botmark
+ }%
+ \unvbox\@cclv
+ \@ifnum{\outputpenalty<\@M}{\penalty\outputpenalty}{}%
+}%
+\def\output@init@document{%
+ \ltxgrid@info@sw{\class@info{\string\output@init@document}}{}%
+ \global\vsize\vsize
+}%
+\def\output@prep@document{%
+ \ltxgrid@foot@info@sw{\class@info{\string\output@prep@document}\trace@scroll{\showbox\footins\showbox\footsofar}}{}%
+ \@ifvoid\footsofar{%
+ }{%
+ \global\setbox\footins\vbox\bgroup
+ \unvbox\footsofar
+ \@ifvoid\footins{}{%
+ \marry@baselines
+ \unvbox\footins
+ }%
+ \egroup
+ \ltxgrid@foot@info@sw{\trace@box\footins}{}%
+ }%
+}%
+\def\output@post@document{}%
+\let\@opcol\@undefined
+\def\@makecolumn#1{%
+ \ltxgrid@foot@info@sw{\class@info{\string\@makecolumn\string#1}}{}%
+ \setbox\@outputbox\vbox\bgroup
+ \boxmaxdepth\@maxdepth
+ \@tempdima\dp\@cclv
+ \unvbox\@cclv
+ \vskip-\@tempdima
+ \egroup
+ \xdef\@freelist{\@freelist\@midlist}\global\let\@midlist\@empty
+ \show@text@box@size
+ \@combinefloats
+ #1{%
+ \@combineinserts\@outputbox\footins
+ }{%
+ \combine@foot@inserts\footsofar\footins
+ }%
+ \set@adj@colht\dimen@
+ \count@\vbadness
+ \vbadness\@M
+ \setbox\@outputbox\vbox to\dimen@\bgroup
+ \@texttop
+ \dimen@\dp\@outputbox
+ \unvbox\@outputbox
+ \vskip-\dimen@
+ \@textbottom
+ \egroup
+ \vbadness\count@
+ \global\maxdepth\@maxdepth
+}%
+\let\@makespecialcolbox\@undefined
+\def\@combineinserts#1#2{%
+ \ltxgrid@foot@info@sw{\class@info{\string\@combineinserts\string#1\string#2}\trace@box#2}{}%
+ \setbox#1\vbox\bgroup
+ \unvbox#1%
+ \@ifvoid{#2}{}{%
+ \dimen@\ht#2\advance\dimen@\dp#2\advance\dimen@\skip#2%
+ \show@box@size{Combining inserts}#2%
+ \vskip\skip#2%
+ \setbox\z@\vbox{\footnoterule}\dimen@i\ht\z@
+ \color@begingroup
+ \normalcolor
+ \cleaders\box\z@\vskip\dimen@i\kern-\dimen@i
+ \csname combine@insert@\the\pagegrid@col\endcsname#2%
+ \color@endgroup
+ \kern-\dimen@\kern\dimen@
+ }%
+ \egroup
+ \ltxgrid@foot@info@sw{\trace@box#1}{}%
+}%
+\def\combine@insert@tw@#1{%
+ \compose@footnotes@two#1\@ifvbox{#1}{\unvbox}{\box}#1%
+}%
+\def\combine@insert@@ne#1{%
+ \compose@footnotes@one#1\@ifvbox{#1}{\unvbox}{\box}#1%
+}%
+\def\twocolumn@grid@setup{%
+ \expandafter\let\csname combine@insert@1\endcsname\combine@insert@tw@
+ \expandafter\let\csname combine@insert@2\endcsname\combine@insert@@ne
+}%
+\def\onecolumn@grid@setup{%
+ \expandafter\let\csname combine@insert@1\endcsname\combine@insert@@ne
+ \expandafter\let\csname combine@insert@2\endcsname\combine@insert@@ne
+}%
+\let\columngrid@setup\onecolumn@grid@setup
+\columngrid@setup
+\appdef\@floatplacement{%
+ \global\@fpmin\@fpmin
+}%
+\mathchardef\pagebreak@pen=\@M
+\expandafter\let\csname output@-\the\pagebreak@pen\endcsname\relax
+\mathchardef\do@startcolumn@pen=10005
+\@namedef{output@-\the\do@startcolumn@pen}{\do@startcolumn}%
+\def\do@startcolumn{%
+ \setbox\@cclv\vbox{\unvbox\@cclv\remove@lastbox\unskip}%
+ \clearpage@sw{\@clearfloatplacement}{\@floatplacement}%
+ \set@colht
+ \@booleanfalse\pfloat@avail@sw
+ \begingroup
+ \@colht\@colroom
+ \@booleanfalse\float@avail@sw
+ \@tryfcolumn\test@colfloat
+ \float@avail@sw{\aftergroup\@booleantrue\aftergroup\pfloat@avail@sw}{}%
+ \endgroup
+ \fcolmade@sw{%
+ \setbox\@cclv\vbox{\unvbox\@outputbox\unvbox\@cclv}%
+ \outputpenalty-\pagebreak@pen
+ \dead@cycle
+ }{%
+ \begingroup
+ \let\@elt\@scolelt
+ \let\reserved@b\@deferlist\global\let\@deferlist\@empty\reserved@b
+ \endgroup
+ \clearpage@sw{%
+ \outputpenalty\@M
+ }{%
+ \outputpenalty\do@newpage@pen
+ }%
+ \dead@cycle
+ }%
+ \check@deferlist@stuck\do@startcolumn
+ \set@vsize
+}%
+\def\@scolelt#1{\def\@currbox{#1}\@addtonextcol}%
+\def\test@colfloat#1{%
+ \csname @floatselect@sw@\thepagegrid\endcsname#1{}{\@testtrue}%
+ \@if@sw\if@test\fi{}{\aftergroup\@booleantrue\aftergroup\float@avail@sw}%
+}%
+\def\@addtonextcol{%
+ \begingroup
+ \@insertfalse
+ \@setfloattypecounts
+ \csname @floatselect@sw@\thepagegrid\endcsname\@currbox{%
+ \@ifnum{\@fpstype=8 }{}{%
+ \@ifnum{\@fpstype=24 }{}{%
+ \@flsettextmin
+ \@reqcolroom \ht\@currbox
+ \advance \@reqcolroom \@textmin
+ \advance \@reqcolroom \vsize % take into account split insertions
+ \advance \@reqcolroom -\pagegoal
+ \@ifdim{\@colroom>\@reqcolroom}{%
+ \@flsetnum \@colnum
+ \@ifnum{\@colnum>\z@}{%
+ \@bitor\@currtype\@deferlist
+ \@if@sw\if@test\fi{}{%
+ \@addtotoporbot
+ }%
+ }{}%
+ }{}%
+ }%
+ }%
+ }{}%
+ \@if@sw\if@insert\fi{}{%
+ \@cons\@deferlist\@currbox
+ }%
+ \endgroup
+}%
+\mathchardef\do@startpage@pen=10006
+\@namedef{output@-\the\do@startpage@pen}{\do@startpage}%
+\def\do@startpage{%
+ \setbox\@cclv\vbox{\unvbox\@cclv\remove@lastbox\unskip}%
+ \clearpage@sw{\@clearfloatplacement}{\@dblfloatplacement}%
+ \set@colht
+ \@booleanfalse\pfloat@avail@sw
+ \begingroup
+ \@booleanfalse\float@avail@sw
+ \@tryfcolumn\test@dblfloat
+ \float@avail@sw{\aftergroup\@booleantrue\aftergroup\pfloat@avail@sw}{}%
+ \endgroup
+ \fcolmade@sw{%
+ \global\setbox\pagesofar\vbox{\unvbox\pagesofar\unvbox\@outputbox}%
+ \@output@combined@page
+ }{%
+ \begingroup
+ \@booleanfalse\float@avail@sw
+ \let\@elt\@sdblcolelt
+ \let\reserved@b\@deferlist\global\let\@deferlist\@empty\reserved@b
+ \endgroup
+ \@ifdim{\@colht=\textheight}{% No luck...
+ \pfloat@avail@sw{% ...but a float *was* available!
+ \forcefloats@sw{%
+ \ltxgrid@warn{Forced dequeueing of floats stalled}%
+ }{%
+ \ltxgrid@warn{Dequeueing of floats stalled}%
+ }%
+ }{}%
+ }{}%
+ \outputpenalty\@M
+ \dead@cycle
+ }%
+ \check@deferlist@stuck\do@startpage
+ \set@colht
+}%
+\def\@output@combined@page{%
+ \@combinepage\true@sw
+ \@combinedblfloats
+ \@outputpage
+ \global\pagegrid@cur\@ne
+ \protect@penalty\do@startpage@pen
+}%
+\def\@sdblcolelt#1{\def\@currbox{#1}\@addtodblcol}%
+\def\test@dblfloat#1{%
+ \@if@notdblfloat{#1}{\@testtrue}{}%
+ \@if@sw\if@test\fi{}{\aftergroup\@booleantrue\aftergroup\float@avail@sw}%
+}%
+\def\@if@notdblfloat#1{\@ifdim{\wd#1<\textwidth}}%
+\@booleanfalse\forcefloats@sw
+\def\@addtodblcol{%
+ \begingroup
+ \@if@notdblfloat{\@currbox}{%
+ \false@sw
+ }{%
+ \@setfloattypecounts
+ \@getfpsbit \tw@
+ \@bitor \@currtype \@deferlist
+ \@if@sw\if@test\fi{%
+ \false@sw
+ }{%
+ \@ifodd\@tempcnta{%
+ \aftergroup\@booleantrue\aftergroup\float@avail@sw
+ \@flsetnum \@dbltopnum
+ \@ifnum{\@dbltopnum>\z@}{%
+ \@ifdim{\@dbltoproom>\ht\@currbox}{%
+ \true@sw
+ }{%
+ \@ifnum{\@fpstype<\sixt@@n}{%
+ \begingroup
+ \advance \@dbltoproom \@textmin
+ \@ifdim{\@dbltoproom>\ht\@currbox}{%
+ \endgroup\true@sw
+ }{%
+ \endgroup\false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }%
+ }%
+ {%
+ \@tempdima -\ht\@currbox
+ \advance\@tempdima
+ -\@ifx{\@dbltoplist\@empty}{\dbltextfloatsep}{\dblfloatsep}%
+ \global \advance \@dbltoproom \@tempdima
+ \global \advance \@colht \@tempdima
+ \global \advance \@dbltopnum \m@ne
+ \@cons \@dbltoplist \@currbox
+ }{%
+ \@cons \@deferlist \@currbox
+ }%
+ \endgroup
+}%
+\def\@tryfcolumn#1{%
+ \global\@booleanfalse\fcolmade@sw
+ \@ifx@empty\@deferlist{}{%
+ \global\let\@trylist\@deferlist
+ \global\let\@failedlist\@empty
+ \begingroup
+ \dimen@\vsize\advance\dimen@-\pagegoal\@ifdim{\dimen@>\z@}{%
+ \advance\@fpmin-\dimen@
+ }{}%
+ \def\@elt{\@xtryfc#1}\@trylist
+ \endgroup
+ \fcolmade@sw{%
+ \global\setbox\@outputbox\vbox{\vskip \@fptop}%
+ \let \@elt \@wtryfc \@flsucceed
+ \global\setbox\@outputbox\vbox{\unvbox\@outputbox
+ \unskip \vskip \@fpbot
+ }%
+ \let \@elt \relax
+ \xdef\@deferlist{\@failedlist\@flfail}%
+ \xdef\@freelist{\@freelist\@flsucceed}%
+ }{}%
+ }%
+}%
+\def\@wtryfc #1{%
+ \global\setbox\@outputbox\vbox{\unvbox\@outputbox
+ \box #1\vskip\@fpsep
+ }%
+}%
+\def\@xtryfc#1#2{%
+ \@next\reserved@a\@trylist{}{}% trim \@trylist. Ugly!
+ \@currtype \count #2%
+ \divide\@currtype\@xxxii\multiply\@currtype\@xxxii
+ \@bitor \@currtype \@failedlist
+ \@testfp #2%
+ #1#2%
+ \@ifdim{\ht #2>\@colht }{\@testtrue}{}%
+ \@if@sw\if@test\fi{%
+ \@cons\@failedlist #2%
+ }{%
+ \begingroup
+ \gdef\@flsucceed{\@elt #2}%
+ \global\let\@flfail\@empty
+ \@tempdima\ht #2%
+ \def \@elt {\@ztryfc#1}\@trylist
+ \@ifdim{\@tempdima >\@fpmin}{%
+ \global\@booleantrue\fcolmade@sw
+ }{%
+ \@cons\@failedlist #2%
+ }%
+ \endgroup
+ \fcolmade@sw{%
+ \let \@elt \@gobble
+ }{}%
+ }%
+}%
+\def\@ztryfc #1#2{%
+ \@tempcnta \count#2%
+ \divide\@tempcnta\@xxxii\multiply\@tempcnta\@xxxii
+ \@bitor \@tempcnta {\@failedlist \@flfail}%
+ \@testfp #2%
+ #1#2%
+ \@tempdimb\@tempdima
+ \advance\@tempdimb \ht#2\advance\@tempdimb\@fpsep
+ \@ifdim{\@tempdimb >\@colht}{%
+ \@testtrue
+ }{}%
+ \@if@sw\if@test\fi{%
+ \@cons\@flfail #2%
+ }{%
+ \@cons\@flsucceed #2%
+ \@tempdima\@tempdimb
+ }%
+}%
+\def\newpage@prep{%
+ \if@noskipsec
+ \ifx \@nodocument\relax
+ \leavevmode
+ \global \@noskipsecfalse
+ \fi
+ \fi
+ \if@inlabel
+ \leavevmode
+ \global \@inlabelfalse
+ \fi
+ \if@nobreak \@nobreakfalse \everypar{}\fi
+ \par
+}%
+\def \newpage {%
+ \newpage@prep
+ \do@output@MVL{%
+ \vfil
+ \penalty-\pagebreak@pen
+ }%
+}%
+\def\clearpage{%
+ \newpage@prep
+ \do@output@MVL{%
+ \vfil
+ \penalty-\pagebreak@pen
+ \global\@booleantrue\clearpage@sw
+ \protect@penalty\do@startcolumn@pen
+ \protect@penalty\do@endpage@pen
+ }%
+ \do@output@MVL{%
+ \global\@booleanfalse\clearpage@sw
+ }%
+}%
+\def\cleardoublepage{%
+ \clearpage
+ \@if@sw\if@twoside\fi{%
+ \@ifodd\c@page{}{%
+ \null\clearpage
+ }%
+ }{}%
+}%
+\@booleanfalse\clearpage@sw
+\mathchardef\do@endpage@pen=10007
+\@namedef{output@-\the\do@endpage@pen}{\csname end@column@\thepagegrid\endcsname}%
+\mathchardef\do@newpage@pen=10001
+\expandafter\let\csname output@-\the\do@newpage@pen\endcsname\relax
+\def\@clearfloatplacement{%
+ \global\@topnum \maxdimen
+ \global\@toproom \maxdimen
+ \global\@botnum \maxdimen
+ \global\@botroom \maxdimen
+ \global\@colnum \maxdimen
+ \global\@dbltopnum \maxdimen
+ \global\@dbltoproom \maxdimen
+ \global\@textmin \z@
+ \global\@fpmin \z@
+ \let\@testfp\@gobble
+ \appdef\@setfloattypecounts{\@fpstype16\advance\@fpstype\m@ne}%
+}%
+\let\@doclearpage\@undefined
+\let\@makefcolumn\@undefined
+\let\@makecol\@undefined
+\def\clr@top@firstmark{%
+ \global\let\saved@@topmark\@undefined
+ \global\let\saved@@firstmark\@empty
+ \global\let\saved@@botmark\@empty
+}%
+\clr@top@firstmark
+\def\set@top@firstmark{%
+ \@ifxundefined\saved@@topmark{\expandafter\gdef\expandafter\saved@@topmark\expandafter{\@@topmark}}{}%
+ \@if@empty\saved@@firstmark{\expandafter\gdef\expandafter\saved@@firstmark\expandafter{\@@firstmark}}{}%
+ \@if@empty\@@botmark{}{\expandafter\gdef\expandafter\saved@@botmark\expandafter{\@@botmark}}%
+}%
+\appdef\@outputpage@tail{%
+ \clr@top@firstmark
+}%
+\def\@float#1{%
+ \@ifnextchar[{%
+ \@yfloat\width@float{#1}%
+ }{%
+ \@ifxundefined@cs{fps@#1}{}{\expandafter\let\expandafter\fps@\csname fps@#1\endcsname}%
+ \expandafter\@argswap\expandafter{\expandafter[\fps@]}{\@yfloat\width@float{#1}}%
+ }%
+}%
+\def\@dblfloat#1{%
+ \@ifnum{\pagegrid@col=\@ne}{%
+ \@float{#1}%
+ }{%
+ \@ifnextchar[{%
+ \@yfloat\widthd@float{#1}%
+ }{%
+ \@ifxundefined@cs{fpsd@#1}{}{\expandafter\let\expandafter\fpsd@\csname fpsd@#1\endcsname}%
+ \expandafter\@argswap\expandafter{\expandafter[\fpsd@]}{\@yfloat\widthd@float{#1}}%
+ }%
+ }%
+}%
+\def\@yfloat#1#2[#3]{%
+ \@xfloat{#2}[#3]%
+ \hsize#1\linewidth\hsize
+ \let\set@footnotewidth\@empty
+ \minipagefootnote@init
+}%
+\def\fps@{tbp}%
+\def\fpsd@{tp}%
+\def\width@float{\columnwidth}%
+\def\widthd@float{\textwidth}%
+\def\end@float{%
+ \end@@float{%
+ \check@currbox@count
+ }%
+}%
+\def\end@dblfloat{%
+ \@ifnum{\pagegrid@col=\@ne}{%
+ \end@float
+ }{%
+ \end@@float{%
+ \@iffpsbit\@ne{\global\advance\count\@currbox\m@ne}{}%
+ \@iffpsbit\f@ur{\global\advance\count\@currbox-4\relax}{}%
+ \global\wd\@currbox\textwidth % Klootch
+ \check@currbox@count
+ }%
+ }%
+}%
+\def\end@@float#1{%
+ \minipagefootnote@here
+ \@endfloatbox
+ #1%
+ \@ifnum{\@floatpenalty <\z@}{%
+ \@largefloatcheck
+ \@cons\@currlist\@currbox
+ \@ifnum{\@floatpenalty <-\@Mii}{%
+ \do@output@cclv{\@add@float}%
+ }{%
+ \vadjust{\do@output@cclv{\@add@float}}%
+ \@Esphack
+ }%
+ }{}%
+}%
+\newcommand\float@end@float{%
+ \@endfloatbox
+ \global\setbox\@currbox\float@makebox\columnwidth
+ \let\@endfloatbox\relax
+ \end@float
+}%
+\newcommand\float@end@ltx{%
+ \end@@float{%
+ \global\setbox\@currbox\float@makebox\columnwidth
+ \check@currbox@count
+ }%
+}%
+\newcommand\newfloat@float[3]{%
+ \@namedef{ext@#1}{#3} %!
+ \let\float@do=\relax
+ \xdef\@tempa{\noexpand\float@exts{\the\float@exts \float@do{#3}}}%
+ \@tempa
+ \floatplacement{#1}{#2}%
+ \@ifundefined{fname@#1}{\floatname{#1}{#1}}{} %!
+ \expandafter\edef\csname ftype@#1\endcsname{\value{float@type}}%
+ \addtocounter{float@type}{\value{float@type}} %!
+ \restylefloat{#1}%
+ \expandafter\edef\csname fnum@#1\endcsname{%
+ \expandafter\noexpand\csname fname@#1\endcsname{} %!
+ \expandafter\noexpand\csname the#1\endcsname
+ }
+ \@ifnextchar[%]
+ {%
+ \float@newx{#1}%
+ }{%
+ \@ifundefined{c@#1}{\newcounter{#1}\@namedef{the#1}{\arabic{#1}}}{}%
+ }%
+}%
+\newcommand\newfloat@ltx[3]{%
+ \@namedef{ext@#1}{#3}%
+ \let\float@do=\relax
+ \xdef\@tempa{\noexpand\float@exts{\the\float@exts \float@do{#3}}}%
+ \@tempa
+ \floatplacement{#1}{#2}%
+ \@ifundefined{fname@#1}{\floatname{#1}{#1}}{}%
+ \expandafter\edef\csname ftype@#1\expandafter\endcsname\expandafter{\the\c@float@type}%
+ \addtocounter{float@type}{\value{float@type}}%
+ \restylefloat{#1}%
+ \expandafter\edef\csname fnum@#1\endcsname{%
+ \expandafter\noexpand\csname fname@#1\endcsname{}%
+ \expandafter\noexpand\csname the#1\endcsname
+ }
+ \@ifnextchar[%]
+ {%
+ \float@newx{#1}%
+ }{%
+ \@ifundefined{c@#1}{\newcounter{#1}\@namedef{the#1}{\arabic{#1}}}{}%
+ }%
+}%
+\appdef\document@inithook{%
+ \@ifxundefined\newfloat{}{%
+ \@ifx{\float@end\float@end@float}{%
+ \@ifx{\newfloat\newfloat@float}{\true@sw}{\false@sw}%
+ }{\false@sw}%
+ {%
+ \class@warn{Repair the float package}%
+ \let\float@end\float@end@ltx
+ \let\newfloat\newfloat@ltx
+ }{%
+ \class@warn{Failed to patch the float package}%
+ }%
+ }%
+}%
+\def\@iffpsbit#1{%
+ \begingroup
+ \@tempcnta\count\@currbox
+ \divide\@tempcnta#1\relax
+ \@ifodd\@tempcnta{\aftergroup\true@sw}{\aftergroup\false@sw}%
+ \endgroup
+}%
+\def\check@currbox@count{%
+ \@ifnum{\count\@currbox>\z@}{%
+ \count@\count\@currbox\divide\count@\sixt@@n\multiply\count@\sixt@@n
+ \@tempcnta\count\@currbox\advance\@tempcnta-\count@
+ \@ifnum{\@tempcnta=\z@}{%
+ \ltxgrid@warn{Float cannot be placed}%
+ }{}%
+ \expandafter\tally@float\expandafter{\@captype}%
+ }{%
+ }%
+}%
+\providecommand\minipagefootnote@init{}%
+\providecommand\minipagefootnote@here{}%
+\providecommand\tally@float[1]{}%
+\let\@specialoutput\@undefined
+\def\@add@float{%
+ \@pageht\ht\@cclv\@pagedp\dp\@cclv
+ \unvbox\@cclv
+ \@next\@currbox\@currlist{%
+ \csname @floatselect@sw@\thepagegrid\endcsname\@currbox{%
+ \@ifnum{\count\@currbox>\z@}{%
+ \advance \@pageht \@pagedp
+ \advance \@pageht \vsize \advance \@pageht -\pagegoal
+ \@addtocurcol
+ }{%
+ \@addmarginpar
+ }%
+ }{%
+ \@resethfps
+ \@cons\@deferlist\@currbox
+ }%
+ }{\@latexbug}%
+ \@ifnum{\outputpenalty<\z@}{%
+ \@if@sw\if@nobreak\fi{%
+ \nobreak
+ }{%
+ \addpenalty \interlinepenalty
+ }%
+ }{}%
+ \set@vsize
+}%
+\let\@reinserts\@undefined
+\def \@addtocurcol {%
+ \@insertfalse
+ \@setfloattypecounts
+ \ifnum \@fpstype=8
+ \else
+ \ifnum \@fpstype=24
+ \else
+ \@flsettextmin
+ \advance \@textmin \@textfloatsheight
+ \@reqcolroom \@pageht
+ \ifdim \@textmin>\@reqcolroom
+ \@reqcolroom \@textmin
+ \fi
+ \advance \@reqcolroom \ht\@currbox
+ \ifdim \@colroom>\@reqcolroom
+ \@flsetnum \@colnum
+ \ifnum \@colnum>\z@
+ \@bitor\@currtype\@deferlist
+ \if@test
+ \else
+ \@bitor\@currtype\@botlist
+ \if@test
+ \@addtobot
+ \else
+ \ifodd \count\@currbox
+ \advance \@reqcolroom \intextsep
+ \ifdim \@colroom>\@reqcolroom
+ \global \advance \@colnum \m@ne
+ \global \advance \@textfloatsheight \ht\@currbox
+ \global \advance \@textfloatsheight 2\intextsep
+ \@cons \@midlist \@currbox
+ \if@nobreak
+ \nobreak
+ \@nobreakfalse
+ \everypar{}%
+ \else
+ \addpenalty \interlinepenalty
+ \fi
+ \vskip \intextsep
+ \unvbox\@currbox %AO
+ \penalty\interlinepenalty
+ \vskip\intextsep
+ \ifnum\outputpenalty <-\@Mii \vskip -\parskip\fi
+ \outputpenalty \z@
+ \@inserttrue
+ \fi
+ \fi
+ \if@insert
+ \else
+ \@addtotoporbot
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \if@insert
+ \else
+ \@resethfps
+ \@cons\@deferlist\@currbox
+ \fi
+}%
+\@twocolumnfalse
+\let\@twocolumntrue\@twocolumnfalse
+\def\@addmarginpar{%
+ \@next\@marbox\@currlist{%
+ \@cons\@freelist\@marbox\@cons\@freelist\@currbox
+ }\@latexbug
+ \setbox\@marbox\hb@xt@\columnwidth{%
+ \csname @addmarginpar@\thepagegrid\endcsname{%
+ \hskip-\marginparsep\hskip-\marginparwidth
+ \box\@currbox
+ }{%
+ \hskip\columnwidth\hskip\marginparsep
+ \box\@marbox
+ }%
+ \hss
+ }%
+ \setbox\z@\box\@currbox
+ \@tempdima\@mparbottom
+ \advance\@tempdima -\@pageht
+ \advance\@tempdima\ht\@marbox
+ \@ifdim{\@tempdima >\z@}{%
+ \@latex@warning@no@line {Marginpar on page \thepage\space moved}%
+ }{%
+ \@tempdima\z@
+ }%
+ \global\@mparbottom\@pageht
+ \global\advance\@mparbottom\@tempdima
+ \global\advance\@mparbottom\dp\@marbox
+ \global\advance\@mparbottom\marginparpush
+ \advance\@tempdima -\ht\@marbox
+ \global\setbox \@marbox
+ \vbox {\vskip \@tempdima
+ \box \@marbox}%
+ \global \ht\@marbox \z@
+ \global \dp\@marbox \z@
+ \kern -\@pagedp
+ \nointerlineskip
+ \box\@marbox
+ \nointerlineskip
+ \hbox{\vrule \@height\z@ \@width\z@ \@depth\@pagedp}%
+}%
+\newenvironment{turnpage}{%
+ \def\width@float{\textheight}%
+ \def\widthd@float{\textheight}%
+ \appdef\@endfloatbox{%
+ \@ifxundefined\@currbox{%
+ \ltxgrid@warn{Cannot rotate! Not a float}%
+ }{%
+ \setbox\@currbox\vbox to\textwidth{\vfil\unvbox\@currbox\vfil}%
+ \global\setbox\@currbox\vbox{\rotatebox{90}{\box\@currbox}}%
+ }%
+ }%
+}{%
+}%
+\def\rotatebox@dummy#1#2{%
+ \ltxgrid@warn{You must load the graphics or graphicx package in order to use the turnpage environment}%
+ #2%
+}%
+\appdef\document@inithook{%
+ \@ifxundefined\rotatebox{\let\rotatebox\rotatebox@dummy}{}%
+}%
+\@namedef{output@-1073741824}{%
+ \deadcycles\z@
+ \void@cclv
+}%
+\mathchardef\save@column@pen=10016
+\@namedef{output@-\the\save@column@pen}{\save@column}%
+\let \@cclv@saved \@holdpg
+\let \@holdpg \@undefined
+\def\save@column{%
+ \@ifvoid\@cclv@saved{%
+ \set@top@firstmark
+ \global\@topmark@saved\expandafter{\@@topmark}%
+ }{}%
+ \global\setbox\@cclv@saved\vbox{%
+ \@ifvoid\@cclv@saved{}{%
+ \unvbox\@cclv@saved
+ \marry@baselines
+ }%
+ \unvbox\@cclv
+ \lose@breaks
+ \remove@lastbox
+ }%
+}%
+\newtoks\@topmark@saved
+\def\prep@cclv{%
+ \void@cclv
+ \setbox\@cclv\box\@cclv@saved
+ \vbadness\@M
+}%
+\mathchardef\save@column@insert@pen=10017
+\@namedef{output@-\the\save@column@insert@pen}{\toggle@insert{\savecolumn@holding}{\savecolumn@moving}}%
+\def\savecolumn@holding{%
+ \@if@exceed@pagegoal{\unvcopy\@cclv\remove@lastbox}{%
+ \setbox\z@\vbox{\unvcopy\@cclv\remove@lastbox}%
+ \outputdebug@sw{\trace@box\z@}{}%
+ \dimen@\ht\@cclv\advance\dimen@-\ht\z@
+ \dead@cycle@repair@protected\dimen@
+ }{%
+ \dead@cycle
+ }%
+}%
+\def\savecolumn@moving{%
+ \ltxgrid@info@sw{\class@info{\string\savecolumn@moving}}{}%
+ \@cclv@nontrivial@sw{%
+ \save@column
+ }{%
+ \void@cclv
+ }%
+ \@ifvoid\footins{}{%
+ \ltxgrid@foot@info@sw{\class@info{\string\savecolumn@moving}\trace@scroll{\showbox\footins@saved\showbox\footins}}{}%
+ \@ifvoid\footins@saved{%
+ \global\setbox\footins@saved\box\footins
+ }{%
+ \global\setbox\footins@saved\vbox\bgroup
+ \unvbox\footins@saved
+ \marry@baselines
+ \unvbox\footins
+ \egroup
+ }%
+ \ltxgrid@foot@info@sw{\trace@box\footins@saved}{}%
+ \protect@penalty\save@column@insert@pen
+ }%
+}%
+\newbox\footins@saved
+\newbox\footins@recovered
+\newbox\column@recovered
+\mathchardef\save@message@pen=10018
+\@namedef{output@-\the\save@message@pen}{\save@message}%
+\def\save@message{%
+ \void@cclv
+ \toks@\expandafter{\@@firstmark}%
+ \expandafter\gdef\expandafter\@message@saved\expandafter{\the\toks@}%
+ \expandafter\do@@mark\expandafter{\the\@topmark@saved}%
+}%
+\gdef\@message@saved{}%
+\mathchardef\execute@message@pen=10019
+\@namedef{output@-\the\execute@message@pen}{\@message@saved}%
+\def\execute@message{%
+ \@execute@message\save@column@pen
+}%
+\def\execute@message@insert#1{%
+ \@execute@message\save@column@insert@pen{%
+ \setbox \footins \box \footins@saved
+ \ltxgrid@foot@info@sw{\class@info{\string\execute@message@insert}\trace@box\footins}{}%
+ #1%
+ }%
+}%
+\long\def\@execute@message#1#2{%
+ \begingroup
+ \dimen@\prevdepth\@ifdim{\dimen@<\z@}{\dimen@\z@}{}%
+ \setbox\z@\vbox{%
+ \protect@penalty#1%
+ \protection@box
+ \toks@{\prep@cclv#2}%
+ \@@mark{\the\toks@}%
+ \penalty-\save@message@pen
+ \setbox\z@\null\dp\z@\dimen@\ht\z@-\dimen@
+ \nointerlineskip\box\z@
+ \penalty-\execute@message@pen
+ }\unvbox\z@
+ \endgroup
+}%
+\def\do@output@cclv{\execute@message}%
+\def\do@output@MVL#1{%
+ \@ifvmode{%
+ \begingroup\execute@message{\unvbox\@cclv#1}\endgroup
+ }{%
+ \@ifhmode{%
+ \vadjust{\execute@message{\unvbox\@cclv#1}}%
+ }{%
+ \@latexerr{\string\do@output@MVL\space cannot be executed in this mode!}\@eha
+ }%
+ }%
+}%
+\def\lose@breaks{%
+ \loopwhile{%
+ \count@\lastpenalty
+ \@ifnum{\count@=\@M}{%
+ \unpenalty\true@sw
+ }{%
+ \false@sw
+ }%
+ }%
+}%
+\def\removestuff{\do@output@MVL{\unskip\unpenalty}}%
+\def\removephantombox{%
+ \vadjust{%
+ \execute@message{%
+ \unvbox\@cclv
+ \remove@lastbox
+ \unskip
+ \unskip
+ \unpenalty
+ \penalty\predisplaypenalty
+ \vskip\abovedisplayskip
+ }%
+ }%
+}%
+\def\addstuff#1#2{\edef\@tempa{\noexpand\do@output@MVL{\noexpand\@addstuff{#1}{#2}}}\@tempa}%
+\def\@addstuff#1#2{%
+ \skip@\lastskip\unskip
+ \count@\lastpenalty\unpenalty
+ \@if@empty{#1}{}{\penalty#1\relax}%
+ \@ifnum{\count@=\z@}{}{\penalty\count@}%
+ \vskip\skip@
+ \@if@empty{#2}{}{\vskip#2\relax}%
+}%
+\def\replacestuff#1#2{\edef\@tempa{\noexpand\do@output@MVL{\noexpand\@replacestuff{#1}{#2}}}\@tempa}%
+\def\@replacestuff#1#2{%
+ \skip@\lastskip\unskip
+ \count@\lastpenalty\unpenalty
+ \@if@empty{#1}{}{%
+ \@ifnum{\count@>\@M}{}{%
+ \@ifnum{\count@=\z@}{\count@=#1\relax}{%
+ \@ifnum{\count@<#1\relax}{}{%
+ \count@=#1\relax
+ }%
+ }%
+ }%
+ }%
+ \@ifnum{\count@=\z@}{}{\penalty\count@}%
+ \@if@empty{#2}{}{%
+ \@tempskipa#2\relax
+ \@ifdim{\z@>\@tempskipa}{%
+ \advance\skip@-\@tempskipa
+ }{%
+ \@ifdim{\skip@>\@tempskipa}{}{%
+ \skip@\@tempskipa
+ }%
+ }%
+ }%
+ \vskip\skip@
+}%
+\def\move@insertions{\global\holdinginserts\z@}%
+\def\hold@insertions{\global\holdinginserts\@ne}%
+\hold@insertions
+\def\toggle@insert#1#2{%
+ \@ifnum{\holdinginserts>\z@}{\move@insertions#1}{\hold@insertions#2}%
+}%
+\def\do@columngrid#1#2{%
+ \par
+ \expandafter\let\expandafter\@tempa\csname open@column@#1\endcsname
+ \@ifx{\relax\@tempa}{%
+ \ltxgrid@warn{Unknown page grid #1. No action taken}%
+ }{%
+ \do@output@MVL{\start@column{#1}{#2}}%
+ }%
+}%
+\def\start@column#1#2{%
+ \def\@tempa{#1}\@ifx{\@tempa\thepagegrid}{%
+ \ltxgrid@info{Already in page grid \thepagegrid. No action taken}%
+ }{%
+ \expandafter\execute@message@insert
+ \expandafter{%
+ \csname shut@column@\thepagegrid\expandafter\endcsname
+ \csname open@column@#1\endcsname{#2}%
+ \set@vsize
+ }%
+ }%
+}%
+\def\thepagegrid{one}%
+\newbox\pagesofar
+\newbox\footsofar
+\def\combine@foot@inserts#1#2{%
+ \ltxgrid@info@sw{\class@info{\string\combine@foot@inserts\string#1\string#2}}{}%
+ \@ifvoid#1{%
+ \ltxgrid@foot@info@sw{\trace@box#2}{}\global\setbox#1\box#2%
+ }{%
+ \global\setbox#1\vbox\bgroup
+ \ltxgrid@foot@info@sw{\trace@box#1}{}\unvbox#1%
+ \@ifvoid#2{}{%
+ \marry@baselines
+ \ltxgrid@foot@info@sw{\trace@box#2}{}\unvbox#2%
+ }%
+ \egroup
+ }%
+ \ltxgrid@foot@info@sw{\trace@scroll{\showbox#1\showbox#2}}{}%
+}%
+\newcommand\onecolumngrid{\do@columngrid{one}{\@ne}}%
+\let\onecolumn\@undefined
+\def\open@column@one#1{%
+ \ltxgrid@info@sw{\class@info{\string\open@column@one\string#1}}{}%
+ \unvbox\pagesofar
+ \@ifvoid{\footsofar}{}{%
+ \insert\footins\bgroup\unvbox\footsofar\egroup
+ \penalty\z@
+ }%
+ \gdef\thepagegrid{one}%
+ \global\pagegrid@col#1%
+ \global\pagegrid@cur\@ne
+ \global\count\footins\@m
+ \global\divide\count\footins\tw@
+ \set@column@hsize\pagegrid@col
+ \set@colht
+}%
+\def\shut@column@one{%
+ \ltxgrid@info@sw{\class@info{\string\shut@column@one}}{}%
+ \@makecolumn\false@sw
+ \global\setbox\pagesofar\vbox\bgroup
+ \recover@column\@outputbox\footsofar\column@recovered\footins@recovered
+ \egroup
+ \begingroup\setbox\z@\box\@outputbox\endgroup
+ \combine@foot@inserts\footsofar\footins
+ \set@colht
+}%
+\def\float@column@one{%
+ \@makecolumn\true@sw
+ \@outputpage
+}%
+\def\end@column@one{%
+ \unvbox\@cclv\remove@lastbox
+ \protect@penalty\do@newpage@pen
+}%
+\def\output@column@one{%
+ \@outputpage
+}%
+\def\@addmarginpar@one{%
+ \@if@sw\if@mparswitch\fi{%
+ \@ifodd\c@page{\false@sw}{\true@sw}%
+ }{\false@sw}{%
+ \@if@sw\if@reversemargin\fi{\false@sw}{\true@sw}%
+ }{%
+ \@if@sw\if@reversemargin\fi{\true@sw}{\false@sw}%
+ }%
+}%
+\def\@floatselect@sw@one#1{\true@sw}%
+\def\onecolumngrid@push{%
+ \do@output@MVL{%
+ \@ifnum{\pagegrid@col=\@ne}{%
+ \global\let\restorecolumngrid\@empty
+ }{%
+ \xdef\restorecolumngrid{%
+ \noexpand\start@column{\thepagegrid}{\the\pagegrid@col}%
+ }%
+ \start@column{one}{\@ne}%
+ }%
+ }%
+}%
+\def\onecolumngrid@pop{%
+ \do@output@MVL{\restorecolumngrid}%
+}%
+\newcommand\twocolumngrid{\do@columngrid{mlt}{\tw@}}%
+\let\twocolumn\@undefined
+\let\@topnewpage\@undefined
+\def\open@column@mlt#1{%
+ \ltxgrid@info@sw{\class@info{\string\open@column@mlt\string#1}}{}%
+ \@ifvoid{\footsofar}{}{%
+ \insert\footins\bgroup\unvbox\footsofar\egroup
+ }%
+ \gdef\thepagegrid{mlt}%
+ \global\pagegrid@col#1%
+ \global\pagegrid@cur\@ne
+ \global\count\footins\@m
+ \set@column@hsize\pagegrid@col
+ \set@colht
+}%
+\def\shut@column@mlt{%
+ \ltxgrid@info@sw{\class@info{\string\shut@column@mlt}}{}%
+ \@cclv@nontrivial@sw{%
+ \@makecolumn\false@sw
+ \@ifnum{\pagegrid@cur<\pagegrid@col}{%
+ \expandafter\global\expandafter\setbox\csname col@\the\pagegrid@cur\endcsname\box\@outputbox
+ \global\advance\pagegrid@cur\@ne
+ }{}%
+ }{%
+ \void@cclv
+ }%
+ \@ifnum{\pagegrid@cur>\@ne}{%
+ \csname balance@\the\pagegrid@col\endcsname
+ \grid@column\@outputbox{}%
+ \@combinepage\false@sw
+ \@combinedblfloats
+ \global\setbox\pagesofar\box\@outputbox
+ \show@pagesofar@size
+ }{}%
+ \set@colht
+}%
+\def\float@column@mlt{%
+ \@output@combined@page
+}%
+\def\end@column@mlt{%
+ \@ifx@empty\@toplist{%
+ \@ifx@empty\@botlist{%
+ \@ifx@empty\@dbltoplist{%
+ \@ifx@empty\@deferlist{%
+ \@ifnum{\pagegrid@cur=\@ne}{%
+ \false@sw
+ }{%
+ \true@sw
+ }%
+ }{%
+ \true@sw
+ }%
+ }{%
+ \true@sw
+ }%
+ }{%
+ \true@sw
+ }%
+ }{%
+ \true@sw
+ }%
+ % true = kick out a column and try again
+ {%
+ \@cclv@nontrivial@sw{%
+ \unvbox\@cclv\remove@lastbox
+ }{%
+ \unvbox\@cclv\remove@lastbox\unskip\null
+ }%
+ \protect@penalty\do@newpage@pen
+ \protect@penalty\do@endpage@pen
+ }{%
+ \unvbox\@cclv\remove@lastbox
+ }%
+}%
+\def\output@column@mlt{%
+ \@ifnum{\pagegrid@cur<\pagegrid@col}{%
+ \expandafter\global\expandafter\setbox\csname col@\the\pagegrid@cur\endcsname\box\@outputbox
+ \global\advance\pagegrid@cur\@ne
+ }{%
+ \set@adj@colht\dimen@
+ \grid@column\@outputbox{}%
+ \@output@combined@page
+ }%
+}%
+\let\@outputdblcol\@undefined
+\def\@floatselect@sw@mlt#1{\@if@notdblfloat{#1}}%
+\def\@addmarginpar@mlt{% emits a boolean
+ \@ifnum{\pagegrid@cur=\@ne}%
+}%
+\def\set@footnotewidth@one{%
+ \hsize\columnwidth
+ \linewidth\hsize
+}%
+\def\set@footnotewidth@two{\set@footnotewidth@mlt\tw@}%
+\def\set@footnotewidth@mlt#1{%
+ \hsize\textwidth
+ \advance\hsize\columnsep
+ \divide\hsize#1%
+ \advance\hsize-\columnsep
+ \linewidth\hsize
+}%
+\def\compose@footnotes@one#1{%
+ \ltxgrid@foot@info@sw{\class@info{\string\compose@footnotes@one\string#1}\trace@box#1}{}%
+}%
+\let\compose@footnotes\compose@footnotes@one
+\def\compose@footnotes@two#1{%
+ \ltxgrid@foot@info@sw{\class@info{\string\compose@footnotes@two\string#1}\trace@box#1}{}%
+ \setbox\z@\box\@tempboxa
+ \let\recover@column\recover@column@null
+ \let\marry@baselines\@empty
+ \balance@two#1\@tempboxa
+ \global\setbox#1\hbox to\textwidth{\box#1\hfil\box\@tempboxa}%
+ \ltxgrid@foot@info@sw{\trace@box#1}{}%
+}%
+\let\pagegrid@cur\col@number
+\let\col@number\@undefined
+\newcount\pagegrid@col
+\pagegrid@cur\@ne
+\expandafter\let\csname col@\the\pagegrid@cur\endcsname\@leftcolumn
+\let\@leftcolumn\@undefined
+\pagegrid@col\tw@
+\def\pagegrid@init{%
+ \advance\pagegrid@cur\@ne
+ \@ifnum{\pagegrid@cur<\pagegrid@col}{%
+ \csname newbox\expandafter\endcsname\csname col@\the\pagegrid@cur\endcsname
+ \pagegrid@init
+ }{%
+ }%
+}%
+\appdef\class@documenthook{%
+ \pagegrid@init
+}%
+\def\grid@column#1#2{%
+ \ltxgrid@info@sw{\class@info{\string\grid@column\string#1}}{}%
+ \global\setbox#1\vbox\bgroup
+ \hb@xt@\textwidth\bgroup
+ \vrule\@height\z@\@width\z@\@if@empty{#2}{}{\@depth#2}%
+ \pagegrid@cur\@ne
+ \@ifnum{\pagegrid@cur<\pagegrid@col}{\loopwhile{\append@column@\pagegrid@cur\pagegrid@col}}{}%
+ \box@column#1%
+ \egroup
+ \vskip\z@skip
+ \egroup
+}%
+\def\append@column@#1#2{%
+ \expandafter\box@column\csname col@\the#1\endcsname
+ \hfil\vrule\@width\columnseprule\hfil
+ \advance#1\@ne
+ \@ifnum{#1<#2}%
+}%
+\def\box@column#1{%
+ \ltxgrid@info@sw{\class@info{\string\box@column\string#1}}{}%
+ \raise\topskip
+ \hb@xt@\columnwidth\bgroup
+ \dimen@\ht#1\@ifdim{\dimen@>\@colht}{\dimen@\@colht}{}%
+ \count@\vbadness\vbadness\@M
+ \dimen@ii\vfuzz\vfuzz\maxdimen
+ \ltxgrid@info@sw{\saythe\@colht\saythe\dimen@}{}%
+ \vtop to\dimen@\bgroup
+ \hrule\@height\z@
+ \unvbox#1%
+ \raggedcolumn@skip
+ \egroup
+ \vfuzz\dimen@ii
+ \vbadness\count@
+ \hss
+ \egroup
+}%
+\def\marry@baselines{%
+ \begingroup
+ \setbox\z@\lastbox
+ \@ifvoid{\z@}{%
+ \endgroup
+ }{%
+ \aftergroup\kern
+ \aftergroup-%
+ \expandafter\box\expandafter\z@\expandafter\endgroup\the\dp\z@\relax
+ }%
+ \vskip\marry@skip\relax
+}%
+\gdef\marry@skip{\z@skip}%
+\def\set@marry@skip{%
+ \begingroup
+ \skip@\baselineskip\advance\skip@-\topskip
+ \@ifdim{\skip@>\z@}{%
+ \xdef\marry@skip{\the\skip@}%
+ }{}%
+ \endgroup
+}%
+\appdef\document@inithook{%
+ \@ifxundefined\raggedcolumn@sw{\@booleanfalse\raggedcolumn@sw}{}%
+}%
+\def\raggedcolumn@skip{%
+ \vskip\z@\raggedcolumn@sw{\@plus.0001fil\@minus.0001fil}{}\relax
+}%
+\def\@combinepage#1{%
+ \ltxgrid@foot@info@sw{\class@info{\string\@combinepage\string#1}}{}%
+ \@ifvoid\pagesofar{}{%
+ \setbox\@outputbox\vbox{%
+ \unvbox\pagesofar
+ \marry@baselines
+ \unvbox\@outputbox
+ }%
+ }%
+ #1{%
+ \@ifvoid\footsofar{}{%
+ \show@box@size{Combining page footnotes}\footsofar
+ \setbox\footins\box\footsofar
+ \compose@footnotes
+ \@combineinserts\@outputbox\footins
+ }%
+ }{%
+ }%
+}%
+\def \@cflt{%
+ \let \@elt \@comflelt
+ \setbox\@tempboxa \vbox{}%
+ \@toplist
+ \setbox\@outputbox \vbox{%
+ \boxmaxdepth \maxdepth
+ \unvbox\@tempboxa\unskip
+ \topfigrule\vskip \textfloatsep
+ \unvbox\@outputbox
+ }%
+ \let\@elt\relax
+ \xdef\@freelist{\@freelist\@toplist}%
+ \global\let\@toplist\@empty
+}%
+\def \@cflb {%
+ \let\@elt\@comflelt
+ \setbox\@tempboxa \vbox{}%
+ \@botlist
+ \setbox\@outputbox \vbox{%
+ \unvbox\@outputbox
+ \vskip \textfloatsep\botfigrule
+ \unvbox\@tempboxa\unskip
+ }%
+ \let\@elt\relax
+ \xdef\@freelist{\@freelist\@botlist}%
+ \global \let \@botlist\@empty
+}%
+\def\@combinedblfloats{%
+ \@ifx@empty\@dbltoplist{}{%
+ \setbox\@tempboxa\vbox{}%
+ \let\@elt\@comdblflelt\@dbltoplist
+ \let\@elt\relax\xdef\@freelist{\@freelist\@dbltoplist}%
+ \global\let\@dbltoplist\@empty
+ \setbox\@outputbox\vbox{%
+ %\boxmaxdepth\maxdepth %% probably not needed, CAR
+ \unvbox\@tempboxa\unskip
+ \@ifnum{\@dbltopnum>\m@ne}{\dblfigrule}{}%FIXME: how is \@dbltopnum maintained?
+ \vskip\dbltextfloatsep
+ \unvbox\@outputbox
+ }%
+ }%
+}%
+\def\set@column@hsize#1{%
+ \pagegrid@col#1%
+ \global\columnwidth\textwidth
+ \global\advance\columnwidth\columnsep
+ \global\divide\columnwidth\pagegrid@col
+ \global\advance\columnwidth-\columnsep
+ \global\hsize\columnwidth
+ \global\linewidth\columnwidth
+ \skip@\baselineskip\advance\skip@-\topskip
+ \@ifnum{\pagegrid@col>\@ne}{\set@marry@skip}{}%
+}%
+\def\set@colht{%
+ \set@adj@textheight\@colht
+ \global\let\enlarge@colroom\@empty
+ \set@colroom
+}%
+\def\set@adj@textheight#1{%
+ \ltxgrid@info@sw{\class@info{\string\set@adj@textheight\string#1}\saythe\textheight}{}%
+ #1\textheight
+ \def\@elt{\adj@page#1}%
+ \@booleantrue\firsttime@sw\@dbltoplist
+ \let\@elt\relax
+ \global#1#1\relax
+ \ltxgrid@info@sw{\saythe#1}{}%
+}%
+\def\set@colroom{%
+ \ltxgrid@info@sw{\class@info{\string\set@colroom}}{}%
+ \set@adj@colht\@colroom
+ \@if@empty\enlarge@colroom{}{%
+ \global\advance\@colroom\enlarge@colroom\relax
+ \ltxgrid@info@sw{\saythe\@colroom}{}%
+ }%
+ \@ifdim{\@colroom>\topskip}{}{%
+ \ltxgrid@info{Not enough room: \string\@colroom=\the\@colroom; increasing to \the\topskip}%
+ \@colroom\topskip
+ }%
+ \global\@colroom\@colroom
+ \set@vsize
+}%
+\def\set@vsize{%
+ \global\vsize\@colroom
+ \ltxgrid@info@sw{\class@info{\string\set@vsize\string\vsize=\string\colroom}\saythe\vsize}{}%
+}%
+\def\set@adj@colht#1{%
+ #1\@colht
+ \ltxgrid@info@sw{\class@info{\string\set@adj@colht\string#1-\string\pagesofar}\saythe#1}{}%
+ \@ifvoid\pagesofar{}{%
+ \advance#1-\ht\pagesofar\advance#1-\dp\pagesofar
+ \ltxgrid@info@sw{\class@info{\string\pagesofar}\saythe#1}{}%
+ }%
+ \def\@elt{\adj@column#1}%
+ \@booleantrue\firsttime@sw\@toplist
+ \@booleantrue\firsttime@sw\@botlist
+ \let\@elt\relax
+}%
+\def\adj@column#1#2{%
+ \advance#1-\ht#2%
+ \advance#1-\firsttime@sw{\textfloatsep\@booleanfalse\firsttime@sw}{\floatsep}%
+ \ltxgrid@info@sw{\class@info{\string\adj@column\string#1-\string#2}\saythe#1}{}%
+}%
+\def\adj@page#1#2{%
+ \advance#1-\ht#2%
+ \advance#1-\firsttime@sw{\dbltextfloatsep\@booleanfalse\firsttime@sw}{\dblfloatsep}%
+ \ltxgrid@info@sw{\class@info{\string\adj@page\string#1-\string#2}\saythe#1}{}%
+}%
+\def\set@adj@box#1#2{%
+ \@ifvoid#2{}{%
+ \advance#1-\ht#2\advance#1-\dp#2%
+ \@booleantrue\temp@sw
+ \ltxgrid@foot@info@sw{\class@info{\string\set@adj@box\string#2}\saythe#1}{}%
+ }%
+}%
+\appdef\@outputpage@tail{%
+ \set@colht % FIXME: needed?
+ \@floatplacement % FIXME: needed?
+ \@dblfloatplacement % FIXME: needed?
+}%
+\begingroup
+ \catcode`\1=\cat@letter
+ \catcode`\2=\cat@letter
+ \toks@{%
+ \setbox\footins\box\footsofar
+ \balance@two\col@1\@outputbox
+ \global\setbox\col@1\box\col@1
+ \global\setbox\@outputbox\box\@outputbox
+ \combine@foot@inserts\footsofar\footins
+ }%
+ \aftergroup\def\aftergroup\balance@2\expandafter
+\endgroup\expandafter{\the\toks@}%
+\def\balance@two#1#2{%
+ \ltxgrid@info@sw{\class@info{\string\balance@two\string#1\string#2}}{}%
+ \outputdebug@sw{\trace@scroll{\showbox#1\showbox#2}}{}%
+ \setbox\thr@@\copy\footsofar
+ \setbox\@ne\vbox\bgroup
+ \@ifvoid{#1}{}{%
+ \recover@column#1\footsofar\column@recovered\footins@recovered
+ \@ifvoid{#2}{}{\marry@baselines}%
+ }%
+ \@ifvoid{#2}{}{%
+ \recover@column#2\footsofar\column@recovered\footins@recovered
+ }%
+ \egroup
+ \outputdebug@sw{\trace@scroll{\showbox\@ne}}{}%
+ \ltxgrid@foot@info@sw{\trace@scroll{\showbox\footsofar}}{}%
+ \dimen@\ht\@ne\divide\dimen@\tw@
+ \dimen@i\dimen@
+ \vbadness\@M
+ \vfuzz\maxdimen
+ \splittopskip\topskip
+ \loopwhile{%
+ \setbox\z@\copy\@ne\setbox\tw@\vsplit\z@ to\dimen@
+ \remove@depth\z@\remove@depth\tw@
+ \dimen@ii\ht\tw@\advance\dimen@ii-\ht\z@
+ \dimen@i=.5\dimen@i
+ \ltxgrid@info@sw{\saythe\dimen@\saythe\dimen@i\saythe\dimen@ii}{}%
+ \@ifdim{\dimen@ii<.5\p@}{%
+ \@ifdim{\dimen@ii>-.5\p@}%
+ }{%
+ \false@sw
+ }%
+ {%
+ \true@sw
+ }{%
+ \@ifdim{\dimen@i<.5\p@}%
+ }%
+ {%
+ \false@sw
+ }%
+ {%
+ \advance\dimen@\@ifdim{\dimen@ii<\z@}{}{-}\dimen@i
+ \true@sw
+ }%
+ }%
+ \ltxgrid@info@sw{\saythe\dimen@\saythe\dimen@i\saythe\dimen@ii}{}%
+ \@ifdim{\ht\z@=\z@}{%
+ \@ifdim{\ht\tw@=\z@}%
+ }{%
+ \true@sw
+ }%
+ {%
+ }{%
+ \ltxgrid@info{Unsatifactorily balanced columns: giving up}%
+ \setbox\tw@\box#1%
+ \setbox\z@ \box#2%
+ \global\setbox\footsofar\box\thr@@
+ }%
+ \setbox\tw@\vbox{\unvbox\tw@\vskip\z@skip}%
+ \setbox\z@ \vbox{\unvbox\z@ \vskip\z@skip}%
+ \set@colht
+ \dimen@\ht\z@\@ifdim{\dimen@<\ht\tw@}{\dimen@\ht\tw@}{}%
+ \@ifdim{\dimen@>\@colroom}{\dimen@\@colroom}{}%
+ \ltxgrid@info@sw{\saythe{\ht\z@}\saythe{\ht\tw@}\saythe\@colroom\saythe\dimen@}{}%
+ \setbox#1\vbox to\dimen@{\unvbox\tw@\unskip\raggedcolumn@skip}%
+ \setbox#2\vbox to\dimen@{\unvbox\z@ \unskip\raggedcolumn@skip}%
+ \outputdebug@sw{\trace@scroll{\showbox#1\showbox#2}}{}%
+}%
+\def\remove@depth#1{%
+ \setbox#1\vbox\bgroup
+ \unvcopy#1%
+ \setbox\z@\vbox\bgroup
+ \unvbox#1%
+ \setbox\z@\lastbox
+ \aftergroup\kern\aftergroup-\expandafter
+ \egroup
+ \the\dp\z@\relax
+ \egroup
+}%
+\def\recover@column#1#2#3#4{%
+ \ltxgrid@info@sw{\class@info{\string\recover@column\string#1\string#2\string#3\string#4}}{}%
+ \setbox#4\vbox{\unvcopy#1}%
+ \ltxgrid@foot@info@sw{\trace@scroll{\showbox#4}}{}%
+ \dimen@\ht#4%
+ \ltxgrid@foot@info@sw{\saythe\dimen@}{}%
+ \setbox#4\vbox\bgroup
+ \unvbox#4\unskip
+ \dimen@i\lastkern\unkern\advance\dimen@i\lastkern
+ \@ifdim{\dimen@i=\z@}{%
+ \dimen@i\lastkern\unkern
+ \ltxgrid@foot@info@sw{\saythe\dimen@i}{}%
+ \aftergroup\dimen@i
+ \expandafter\egroup\the\dimen@i\relax
+ }{%
+ \egroup
+ }%
+ \@ifdim{\dimen@i<\z@}{%
+ \advance\dimen@\dimen@i
+ \ltxgrid@foot@info@sw{\saythe\dimen@i\saythe\dimen@}{}%
+ \splittopskip\z@skip
+ \global\setbox#3\vsplit#4 to\dimen@
+ \global\setbox#4\vbox{\unvbox#4}%
+ \ltxgrid@foot@info@sw{\trace@scroll{\showbox#1\showbox#2\showbox#3\showbox#4}}{}%
+ \global\setbox#2\vbox\bgroup\unvbox#2\vskip\z@skip\unvbox#4\egroup
+ }{%
+ \setbox#3\box#4%
+ \ltxgrid@foot@info@sw{\trace@scroll{\showbox#1\showbox#2\showbox#3\showbox#4}}{}%
+ }%
+ \unvbox#3%
+ \loopwhile{\dimen@\lastskip\@ifdim{\dimen@>\z@}{\unskip\true@sw}{\false@sw}}%
+}%
+\def\recover@column@null#1#2#3#4{%
+ \unvcopy#1%
+}%
+\prepdef\@begindocumenthook{%
+ \open@column@one\@ne
+ \set@colht
+ \@floatplacement
+ \@dblfloatplacement
+}%
+\def\longtable@longtable{%
+ \par
+ \ifx\multicols\@undefined\else\ifnum\col@number>\@ne\@twocolumntrue\fi\fi
+ \if@twocolumn\LT@err{longtable not in 1-column mode}\@ehc\fi
+ \begingroup
+ \@ifnextchar[\LT@array{\LT@array[x]}%
+}%
+\def\longtable@new{%
+ \par
+ \@ifnextchar[\LT@array{\LT@array[x]}%
+}%
+\def\endlongtable@longtable{%
+ \crcr
+ \noalign{%
+ \let\LT@entry\LT@entry@chop
+ \xdef\LT@save@row{\LT@save@row}}%
+ \LT@echunk
+ \LT@start
+ \unvbox\z@
+ \LT@get@widths
+ \if@filesw
+ {\let\LT@entry\LT@entry@write\immediate\write\@auxout{%
+ \gdef\expandafter\noexpand
+ \csname LT@\romannumeral\c@LT@tables\endcsname
+ {\LT@save@row}}}%
+ \fi
+ \ifx\LT@save@row\LT@@save@row
+ \else
+ \LT@warn{Column \@width s have changed\MessageBreak
+ in table \thetable}%
+ \LT@final@warn
+ \fi
+ \endgraf\penalty -\LT@end@pen
+ \endgroup
+ \global\@mparbottom\z@
+ \pagegoal\vsize
+ \endgraf\penalty\z@\addvspace\LTpost
+ \ifvoid\footins\else\insert\footins{}\fi
+}%
+\def\endlongtable@new{%
+ \crcr
+ \noalign{%
+ \let\LT@entry\LT@entry@chop
+ \xdef\LT@save@row{\LT@save@row}%
+ }%
+ \LT@echunk
+ \LT@start
+ \unvbox\z@
+ \LT@get@widths
+ \@if@sw\if@filesw\fi{%
+ {%
+ \let\LT@entry\LT@entry@write
+ \immediate\write\@auxout{%
+ \gdef\expandafter\noexpand\csname LT@\romannumeral\c@LT@tables\endcsname
+ {\LT@save@row}%
+ }%
+ }%
+ }{}%
+ \@ifx{\LT@save@row\LT@@save@row}{}{%
+ \LT@warn{%
+ Column \@width s have changed\MessageBreak in table \thetable
+ }\LT@final@warn
+ }%
+ \endgraf
+ \nobreak
+ \box\@ifvoid\LT@lastfoot{\LT@foot}{\LT@lastfoot}%
+ \global\@mparbottom\z@
+ \endgraf
+ \LT@post
+}%
+\def\LT@start@longtable{%
+ \let\LT@start\endgraf
+ \endgraf\penalty\z@\vskip\LTpre
+ \dimen@\pagetotal
+ \advance\dimen@ \ht\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi
+ \advance\dimen@ \dp\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi
+ \advance\dimen@ \ht\LT@foot
+ \dimen@ii\vfuzz
+ \vfuzz\maxdimen
+ \setbox\tw@\copy\z@
+ \setbox\tw@\vsplit\tw@ to \ht\@arstrutbox
+ \setbox\tw@\vbox{\unvbox\tw@}%
+ \vfuzz\dimen@ii
+ \advance\dimen@ \ht
+ \ifdim\ht\@arstrutbox>\ht\tw@\@arstrutbox\else\tw@\fi
+ \advance\dimen@\dp
+ \ifdim\dp\@arstrutbox>\dp\tw@\@arstrutbox\else\tw@\fi
+ \advance\dimen@ -\pagegoal
+ \ifdim \dimen@>\z@\vfil\break\fi
+ \global\@colroom\@colht
+ \ifvoid\LT@foot\else
+ \advance\vsize-\ht\LT@foot
+ \global\advance\@colroom-\ht\LT@foot
+ \dimen@\pagegoal\advance\dimen@-\ht\LT@foot\pagegoal\dimen@
+ \maxdepth\z@
+ \fi
+ \ifvoid\LT@firsthead\copy\LT@head\else\box\LT@firsthead\fi
+\nobreak
+ \output{\LT@output}%
+}%
+\def\LT@start@new{%
+ \let\LT@start\endgraf
+ \endgraf
+ \markthr@@{}%
+ \LT@pre
+ \@ifvoid\LT@firsthead{\LT@top}{\box\LT@firsthead\nobreak}%
+ \mark@envir{longtable}%
+}%
+\def\LT@end@hd@ft@longtable#1{%
+ \LT@echunk
+ \ifx\LT@start\endgraf
+ \LT@err{Longtable head or foot not at start of table}{Increase LTchunksize}%
+ \fi
+ \setbox#1\box\z@
+ \LT@get@widths\LT@bchunk
+}%
+\def\LT@end@hd@ft@new#1{%
+ \LT@echunk
+ \@ifx{\LT@start\endgraf}{%
+ \LT@err{Longtable head or foot not at start of table}{Increase LTchunksize}%
+ }%
+ \global\setbox#1\box\z@
+ \LT@get@widths
+ \LT@bchunk
+}%
+\def\LT@array@longtable[#1]#2{%
+ \refstepcounter{table}\stepcounter{LT@tables}%
+ \if l#1%
+ \LTleft\z@ \LTright\fill
+ \else\if r#1%
+ \LTleft\fill \LTright\z@
+ \else\if c#1%
+ \LTleft\fill \LTright\fill
+ \fi\fi\fi
+ \let\LT@mcol\multicolumn
+ \let\LT@@tabarray\@tabarray
+ \let\LT@@hl\hline
+ \def\@tabarray{%
+ \let\hline\LT@@hl
+ \LT@@tabarray}%
+ \let\\\LT@tabularcr\let\tabularnewline\\%
+ \def\newpage{\noalign{\break}}%
+ \def\pagebreak{\noalign{\ifnum`}=0\fi\@testopt{\LT@no@pgbk-}4}%
+ \def\nopagebreak{\noalign{\ifnum`}=0\fi\@testopt\LT@no@pgbk4}%
+ \let\hline\LT@hline \let\kill\LT@kill\let\caption\LT@caption
+ \@tempdima\ht\strutbox
+ \let\@endpbox\LT@endpbox
+ \ifx\extrarowheight\@undefined
+ \let\@acol\@tabacol
+ \let\@classz\@tabclassz \let\@classiv\@tabclassiv
+ \def\@startpbox{\vtop\LT@startpbox}%
+ \let\@@startpbox\@startpbox
+ \let\@@endpbox\@endpbox
+ \let\LT@LL@FM@cr\@tabularcr
+ \else
+ \advance\@tempdima\extrarowheight
+ \col@sep\tabcolsep
+ \let\@startpbox\LT@startpbox\let\LT@LL@FM@cr\@arraycr
+ \fi
+ \setbox\@arstrutbox\hbox{\vrule
+ \@height \arraystretch \@tempdima
+ \@depth \arraystretch \dp \strutbox
+ \@width \z@}%
+ \let\@sharp##\let\protect\relax
+ \begingroup
+ \@mkpream{#2}%
+ \xdef\LT@bchunk{%
+ \global\advance\c@LT@chunks\@ne
+ \global\LT@rows\z@\setbox\z@\vbox\bgroup
+ \LT@setprevdepth
+ \tabskip\LTleft \noexpand\halign to\hsize\bgroup
+ \tabskip\z@ \@arstrut \@preamble \tabskip\LTright \cr}%
+ \endgroup
+ \expandafter\LT@nofcols\LT@bchunk&\LT@nofcols
+ \LT@make@row
+ \m@th\let\par\@empty
+ \everycr{}\lineskip\z@\baselineskip\z@
+ \LT@bchunk}%
+\def\LT@LR@l{\LTleft\z@ \LTright\fill}%
+\def\LT@LR@r{\LTleft\fill \LTright\z@ }%
+\def\LT@LR@c{\LTleft\fill \LTright\fill}%
+\def\LT@array@new[#1]#2{%
+ \refstepcounter{table}\stepcounter{LT@tables}%
+ \table@hook
+ \LTleft\fill \LTright\fill
+ \csname LT@LR@#1\endcsname
+ \let\LT@mcol\multicolumn
+ \let\LT@@hl\hline
+ \prepdef\@tabarray{\let\hline\LT@@hl}%
+ \let\\\LT@tabularcr
+ \let\tabularnewline\\%
+ \def\newpage{\noalign{\break}}%
+ \def\pagebreak{\noalign{\ifnum`}=0\fi\@testopt{\LT@no@pgbk-}4}%
+ \def\nopagebreak{\noalign{\ifnum`}=0\fi\@testopt\LT@no@pgbk4}%
+ \let\hline\LT@hline
+ \let\kill\LT@kill
+ \let\caption\LT@caption
+ \@tempdima\ht\strutbox
+ \let\@endpbox\LT@endpbox
+ \@ifxundefined\extrarowheight{%
+ \let\@acol\@tabacol
+ \let\@classz\@tabclassz
+ \let\@classiv\@tabclassiv
+ \def\@startpbox{\vtop\LT@startpbox}%
+ \let\@@startpbox\@startpbox
+ \let\@@endpbox\@endpbox
+ \let\LT@LL@FM@cr\@tabularcr@LaTeX
+ \let\@xtabularcr\@xtabularcr@LaTeX
+ }{%
+ \advance\@tempdima\extrarowheight
+ \col@sep\tabcolsep
+ \let\@startpbox\LT@startpbox
+ \let\LT@LL@FM@cr\@arraycr@array
+ }%
+ \let\@acoll\@tabacoll
+ \let\@acolr\@tabacolr
+ \let\@acol\@tabacol
+ \setbox\@arstrutbox\hbox{%
+ \vrule
+ \@height \arraystretch \@tempdima
+ \@depth \arraystretch \dp \strutbox
+ \@width \z@
+ }%
+ \let\@sharp##%
+ \let\protect\relax
+ \begingroup
+ \@mkpream{#2}%
+ \@mkpream@relax
+ \edef\@preamble{\@preamble}%
+ \prepdef\@preamble{%
+ \global\advance\c@LT@chunks\@ne
+ \global\LT@rows\z@
+ \setbox\z@\vbox\bgroup
+ \LT@setprevdepth
+ \tabskip\LTleft
+ \halign to\hsize\bgroup
+ \tabskip\z@
+ \@arstrut
+ }%
+ \appdef\@preamble{%
+ \tabskip\LTright
+ \cr
+ }%
+ \global\let\LT@bchunk\@preamble
+ \endgroup
+ \expandafter\LT@nofcols\LT@bchunk&\LT@nofcols
+ \LT@make@row
+ \m@th
+ \let\par\@empty
+ \everycr{}%
+ \lineskip\z@
+ \baselineskip\z@
+ \LT@bchunk
+}%
+\appdef\table@hook{}%
+\def\switch@longtable{%
+ \@ifpackageloaded{longtable}{%
+ \@ifx{\longtable\longtable@longtable}{%
+ \@ifx{\endlongtable\endlongtable@longtable}{%
+ \@ifx{\LT@start\LT@start@longtable}{%
+ \@ifx{\LT@end@hd@ft\LT@end@hd@ft@longtable}{%
+ \@ifx{\LT@array\LT@array@longtable}{%
+ \true@sw
+ }{\false@sw}%
+ }{\false@sw}%
+ }{\false@sw}%
+ }{\false@sw}%
+ }{\false@sw}%
+ {%
+ \class@info{Patching longtable package}%
+ }{%
+ \class@info{Patching unrecognized longtable package. (Proceeding with fingers crossed)}%
+ }%
+ \let\longtable\longtable@new
+ \let\endlongtable\endlongtable@new
+ \let\LT@start\LT@start@new
+ \let\LT@end@hd@ft\LT@end@hd@ft@new
+ \let\LT@array\LT@array@new
+ \newenvironment{longtable*}{%
+ \onecolumngrid@push
+ \longtable
+ }{%
+ \endlongtable
+ \onecolumngrid@pop
+ }%
+ }{}%
+}%
+\def\LT@pre{\penalty\z@\vskip\LTpre}%
+\def\LT@bot{\nobreak\copy\LT@foot\vfil}%
+\def\LT@top{\copy\LT@head\nobreak}%
+\def\LT@post{\penalty\z@\addvspace\LTpost\mark@envir{\curr@envir}}%
+\def\LT@adj{%
+ \setbox\z@\vbox{\null}\dimen@-\ht\z@
+ \setbox\z@\vbox{\unvbox\z@\LT@bot}\advance\dimen@\ht\z@
+ \global\advance\vsize-\dimen@
+}%
+\def\output@init@longtable{\LT@adj}%
+\def\output@prep@longtable{\setbox\@cclv\vbox{\unvbox\@cclv\LT@bot}}%
+\def\output@post@longtable{\LT@top}%
+\let\output@init@theindex\@empty
+\let\output@prep@theindex\@empty
+\def\output@post@theindex{%
+ \@ifodd\c@page{}{%
+ \@ifnum{\pagegrid@cur=\@ne}{%
+ }%
+ }%
+}%
+\def\check@aux{\do@output@MVL{\do@check@aux}}%
+\def\check@deferlist@stuck#1{%
+ \@ifx{\@deferlist@postshipout\@empty}{}{%
+ \@ifx{\@deferlist@postshipout\@deferlist}{%
+ \@fltstk
+ \clearpage@sw{%
+ \ltxgrid@warn{Deferred float stuck during \string\clearpage\space processing}%
+ }{%
+ \force@deferlist@stuck#1%
+ }%
+ }{%
+ }%
+ \global\let\@deferlist@postshipout\@empty
+ }%
+}%
+\def\@fltstk{%
+ \@latex@warning{A float is stuck (cannot be placed without \string\clearpage)}%
+}%
+\appdef\@outputpage@tail{%
+ \global\let\@deferlist@postshipout\@deferlist
+}%
+\def\@next#1#2{%
+ \@ifx{#2\@empty}{\false@sw}{%
+ \expandafter\@xnext#2\@@#1#2%
+ \true@sw
+ }%
+}%
+\def\@xnext\@elt#1#2\@@#3#4{%
+ \def#3{#1}%
+ \gdef#4{#2}%
+ \def\@tempa{#4}\def\@tempb{\@freelist}%
+ \@ifx{\@tempa\@tempb}{%
+ \@ifx{#4\@empty}{%
+ \force@deferlist@empty%{Float register pool exhausted}%
+ }{}%
+ }{}%
+}%
+\def\force@deferlist@stuck#1{%
+ \force@deferlist@sw{%
+ \@booleantrue\clearpage@sw
+ \@booleantrue\forcefloats@sw
+ #1%
+ }{%
+ }%
+}%
+\def\force@deferlist@empty{%
+ \force@deferlist@sw{%
+ \penalty-\pagebreak@pen
+ \protect@penalty\do@forcecolumn@pen
+ }{%
+ }%
+}%
+\@booleanfalse\force@deferlist@sw
+\mathchardef\do@forcecolumn@pen=10009
+\@namedef{output@-\the\do@forcecolumn@pen}{\do@forcecolumn}%
+\def\do@forcecolumn{%
+ \@booleantrue\clearpage@sw
+ \@booleantrue\forcefloats@sw
+ \do@startcolumn
+}%
+\def\enlargethispage{%
+ \@ifstar{%
+ \@enlargethispage{}%
+ }{%
+ \@enlargethispage{}%
+ }%
+}%
+\def\@enlargethispage#1#2{%
+ \begingroup
+ \dimen@#2\relax
+ \edef\@tempa{#1}%
+ \edef\@tempa{\noexpand\@@enlargethispage{\@tempa}{\the\dimen@}}%
+ \expandafter\do@output@MVL\expandafter{\@tempa}%
+ \endgroup
+}%
+\def\@@enlargethispage#1#2{%
+ \def\@tempa{one}%
+ \@ifx{\thepagegrid\@tempa}{%
+ \true@sw
+ }{%
+ \def\@tempa{mlt}%
+ \@ifx{\thepagegrid\@tempa}{%
+ \@ifnum{\pagegrid@cur=\@ne}{%
+ \gdef\enlarge@colroom{#2}%
+ \true@sw
+ }{%
+ \ltxgrid@warn{Too late to enlarge this page; move the command to the first column.}%
+ \false@sw
+ }%
+ }{%
+ \ltxgrid@warn{Unable to enlarge a page of this kind.}%
+ \false@sw
+ }%
+ }%
+ {%
+ \class@info{Enlarging page \thepage\space by #2}%
+ \global\advance\@colroom#2\relax
+ \set@vsize
+ }{%
+ }%
+}%
+\let\enlarge@colroom\@empty
+\let\@kludgeins\@undefined
+\@booleantrue\textheight@sw
+\prepdef\@outputpage@head{%
+ \textheight@sw{%
+ \count@\vbadness\vbadness\@M
+ \dimen@\vfuzz\vfuzz\maxdimen
+ \setbox\@outputbox\vbox to\textheight{\unvbox\@outputbox}%
+ \vfuzz\dimen@
+ \vbadness\count@
+ }{}%
+}%
+\appdef\@outputpage@head{%
+ \@ifx{\LS@rot\@undefined}{}{\LS@rot}%
+}%
+\def\ltxgrid@info{%
+ \ltxgrid@info@sw{\class@info}{\@gobble}%
+}%
+\@booleanfalse\ltxgrid@info@sw
+\def\ltxgrid@warn{%
+ \ltxgrid@warn@sw{\class@warn}{\@gobble}%
+}%
+\@booleantrue\ltxgrid@warn@sw
+\@booleanfalse\ltxgrid@foot@info@sw
+\def\def@next@handler#1#2#3{%
+ \advance#1\@ne\mathchardef#2\the#1%
+ \expandafter\def\csname output@-\the#1\endcsname{#3}%
+}%
+\def\def@line@handler#1#2{%
+ \begingroup
+ \@tempcnta\int@parpenalty
+ \advance\@tempcnta-#1%
+ \aftergroup\def
+ \expandafter\aftergroup\csname output@-\the\@tempcnta\endcsname
+ \endgroup{#2}%
+}%
+\mathchardef\int@parpenalty11012
+\def@line@handler\z@{\@handle@line@ltx{}{}{}}%
+\def@line@handler\@ne{\@handle@line@ltx{}{}{\brokenpenalty@ltx}}%
+\def@line@handler\tw@{\@handle@line@ltx{}{\clubpenalty@ltx}{}}%
+\def@line@handler\thr@@{\@handle@line@ltx{\clubpenalty@ltx}{}{\brokenpenalty@ltx}}%
+\def@line@handler\f@ur{\@handle@line@ltx{\widowpenalty@ltx}{}{}}%
+\def@line@handler{5}{\@handle@line@ltx{\widowpenalty@ltx}{}{\brokenpenalty@ltx}}%
+\def@line@handler{6}{\@handle@line@ltx{\widowpenalty@ltx}{\clubpenalty@ltx}{}}%
+\def@line@handler{7}{\@handle@line@ltx{\widowpenalty@ltx}{\clubpenalty@ltx}{\brokenpenalty@ltx}}%
+\def@line@handler{8}{\@handle@line@ltx{\displaywidowpenalty@ltx}{}{}}%
+\def@line@handler{9}{\@handle@line@ltx{\displaywidowpenalty@ltx}{}{\brokenpenalty@ltx}}%
+\def@line@handler{10}{\@handle@line@ltx{\displaywidowpenalty@ltx}{\clubpenalty@ltx}{}}%
+\def@line@handler{11}{\@handle@line@ltx{\displaywidowpenalty@ltx}{\clubpenalty@ltx}{\brokenpenalty@ltx}}%
+\def\@handle@line@ltx#1#2#3{%
+ \@@handle@line@ltx
+ \@tempcnta\lastpenalty
+ \@tempcntb\interlinepenalty@ltx\relax
+ \@if@empty{#1}{}{\advance\@tempcntb#1\relax}%
+ \@if@empty{#2}{}{\advance\@tempcntb#2\relax}%
+ \@if@empty{#3}{}{\advance\@tempcntb#3\relax}%
+ \penalty\@ifnum{\@tempcnta<\@tempcntb}{\@tempcntb}{\@tempcnta}%
+}%
+\let\@@handle@line@ltx\@empty
+\@tempcnta\int@parpenalty
+\def@next@handler\@tempcnta\int@postparpenalty{\reset@queues@ltx\handle@par@ltx}%
+\def@next@handler\@tempcnta\int@vadjustpenalty{\handle@vadjust@ltx}%
+\def@next@handler\@tempcnta\int@whatsitpenalty{\handle@whatsit@ltx}%
+\def@next@handler\@tempcnta\int@predisplaypenalty{\reset@queues@ltx\@handle@display@ltx{\predisplaypenalty@ltx}}%
+\def@next@handler\@tempcnta\int@interdisplaylinepenalty{\@handle@display@ltx{\interdisplaylinepenalty@ltx}}%
+\def@next@handler\@tempcnta\int@postdisplaypenalty{\@handle@display@ltx{\postdisplaypenalty@ltx}}%
+\def\@handle@display@ltx#1{%
+ \@@handle@display@ltx
+ \@tempcnta\lastpenalty
+ \@tempcntb#1%
+ \penalty\@ifnum{\@tempcnta<\@tempcntb}{\@tempcntb}{\@tempcnta}%
+}%
+\let\@@handle@display@ltx\@empty
+\def\handle@par@ltx{}%
+\def\set@linepenalties{%
+ \expandafter\def\expandafter\interlinepenalty@ltx\expandafter{\the\interlinepenalty}%
+ \interlinepenalty-\int@parpenalty
+ \expandafter\def\expandafter\brokenpenalty@ltx\expandafter{\the\brokenpenalty}%
+ \brokenpenalty\@ne
+ \expandafter\def\expandafter\clubpenalty@ltx\expandafter{\the\clubpenalty}%
+ \clubpenalty\tw@
+ \expandafter\def\expandafter\widowpenalty@ltx\expandafter{\the\widowpenalty}%
+ \widowpenalty\f@ur
+ \expandafter\def\expandafter\displaywidowpenalty@ltx\expandafter{\the\displaywidowpenalty}%
+ \displaywidowpenalty8\relax
+}%
+\def\restore@linepenalties{%
+ \interlinepenalty\interlinepenalty@ltx
+ \brokenpenalty\brokenpenalty@ltx
+ \clubpenalty\clubpenalty@ltx
+ \widowpenalty\widowpenalty@ltx
+ \displaywidowpenalty\displaywidowpenalty@ltx
+ \relax
+}%
+\def\set@displaypenalties#1{%
+ \expandafter\def\expandafter\predisplaypenalty@ltx\expandafter{\the\predisplaypenalty}%
+ \expandafter\def\expandafter\interdisplaylinepenalty@ltx\expandafter{\the\interdisplaylinepenalty}%
+ \expandafter\def\expandafter\postdisplaypenalty@ltx\expandafter{\the\postdisplaypenalty}%
+ \@ifhmode{\predisplaypenalty-\int@predisplaypenalty\relax}{}%
+ #1{\interdisplaylinepenalty-\int@interdisplaylinepenalty\relax}{}%
+ #1{\postdisplaypenalty-\int@postdisplaypenalty\relax}{}%
+}%
+\def\enqueue@whatsit@ltx#1{%
+ \gappdef\g@whatsit@queue{{#1}}%
+ \vadjust{\penalty-\int@whatsitpenalty}%
+}%
+\def\handle@whatsit@ltx{%
+ \unvbox\@cclv
+ \g@pop@ltx\g@whatsit@queue\@tempa
+ \expandafter\do@whatsit\expandafter{\@tempa}%
+}%
+\def\do@whatsit#1{}%
+\def\g@pop@ltx#1#2{%
+ \expandafter\@g@pop@ltx#1{}{}\@@#1#2%
+}%
+\def\@g@pop@ltx#1#2\@@#3#4{%
+ \gdef#3{#2}%
+ \def#4{#1}%
+}%
+\let\vspace@ltx\vspace
+\let\pagebreak@ltx\pagebreak
+\let\nopagebreak@ltx\nopagebreak
+\let\endline@ltx\\
+\let\@arrayparboxrestore@ltx\@arrayparboxrestore
+\def\@vspace@org #1{%
+ \ifvmode
+ \vskip #1
+ \vskip\z@skip
+ \else
+ \@bsphack
+ \vadjust{\@restorepar
+ \vskip #1
+ \vskip\z@skip
+ }%
+ \@esphack
+ \fi
+}%
+\def\@vspace@ltx#1{%
+ \@ifvmode{%
+ \vskip#1\vskip\z@skip
+ }{%
+ \@bsphack
+ \ex@vadjust@ltx{%
+ \@restorepar
+ \nobreak
+ \vskip#1\vskip\z@skip
+ }%
+ \@esphack
+ }%
+}%
+\def\@vspacer@org#1{%
+ \ifvmode
+ \dimen@\prevdepth
+ \hrule \@height\z@
+ \nobreak
+ \vskip #1
+ \vskip\z@skip
+ \prevdepth\dimen@
+ \else
+ \@bsphack
+ \vadjust{\@restorepar
+ \hrule \@height\z@
+ \nobreak
+ \vskip #1
+ \vskip\z@skip}%
+ \@esphack
+\fi
+}%
+\def\@vspacer@ltx#1{%
+ \@ifvmode{%
+ \dimen@\prevdepth
+ \hrule\@height\z@
+ \nobreak
+ \vskip#1\vskip\z@skip
+ \prevdepth\dimen@
+ }{%
+ \@bsphack
+ \ex@vadjust@ltx{%
+ \@restorepar
+ \hrule\@height\z@
+ \nobreak
+ \vskip#1\vskip\z@skip
+ }%
+ \@esphack
+ }%
+}%
+\def\@no@pgbk@org #1[#2]{%
+ \ifvmode
+ \penalty #1\@getpen{#2}%
+ \else
+ \@bsphack
+ \vadjust{\penalty #1\@getpen{#2}}%
+ \@esphack
+ \fi
+}%
+\def\@no@pgbk@ltx#1[#2]{%
+ \@ifvmode{%
+ \penalty#1\@getpen{#2}%
+ }{%
+ \@bsphack
+ \ex@vadjust@ltx{%
+ \penalty#1\@getpen{#2}%
+ }%
+ \@esphack
+ }%
+}%
+\long\def\end@line@org{%
+ \let\reserved@e\relax
+ \let\reserved@f\relax
+ \@ifstar{%
+ \let\reserved@e\vadjust
+ \let\reserved@f\nobreak
+ \@xnewline
+ }%
+ \@xnewline
+}%
+\long\def\end@line@ltx{%
+ \let\reserved@e\relax
+ \let\reserved@f\relax
+ \@ifstar{%
+ \let\reserved@e\ex@vadjust@ltx
+ \let\reserved@f\nobreak
+ \@xnewline
+ }{%
+ \@xnewline
+ }%
+}%
+\def\@newline@org[#1]{%
+ \let\reserved@e\vadjust
+ \@gnewline{\vskip#1}%
+}%
+\def\@newline@ltx[#1]{%
+ \let\reserved@e\ex@vadjust@ltx
+ \@gnewline{\vskip#1}%
+}%
+ \@ifx{\@vspace\@vspace@org}{%
+ \@ifx{\@vspacer\@vspacer@org}{%
+ \@ifx{\@no@pgbk\@no@pgbk@org}{%
+ \@ifx{\@newline\@newline@org}{%
+ \expandafter\@ifx\expandafter{\csname\expandafter\@gobble\string\\ \endcsname\end@line@org}{%
+ \true@sw
+ }{\false@sw}%
+ }{\false@sw}%
+ }{\false@sw}%
+ }{\false@sw}%
+ }{\false@sw}%
+ {%
+ \class@info{Overriding \string\@vspace, \string\@vspacer, \string\@no@pgbk, \string\@newline, and \string\\ }%
+ \let\@normalcr\end@line@ltx
+ \expandafter\let\csname\expandafter\@gobble\string\\ \endcsname\@normalcr
+ \let\@newline\@newline@ltx
+ \let\@vspace\@vspace@ltx
+ \let\@vspacer\@vspacer@ltx
+ \let\@no@pgbk\@no@pgbk@ltx
+ }{%
+ \class@warn{%
+ Failed to recognize \string\@vspace, \string\@vspacer, \string\@no@pgbk, \string\@newline, and \string\\;
+ no patches applied. Please get a more up-to-date class,
+ }%
+ }%
+\let\ex@vadjust@ltx\vadjust
+\def\enqueue@vadjust@ltx#1{%
+ \gappdef\g@vadjust@queue{{#1}}%
+ \vadjust{\penalty-\int@vadjustpenalty}%
+}%
+\def\handle@vadjust@ltx{%
+ \unvbox\@cclv
+ \g@pop@ltx\g@vadjust@queue\@tempa
+ \expandafter\gappdef\expandafter\g@vadjust@line\expandafter{\@tempa}%
+}%
+\let\g@vadjust@line\@empty
+\def\reset@queues@ltx{%
+ \global\let\g@whatsit@queue\@empty
+ \global\let\g@vadjust@queue\@empty
+}%
+\newcommand\linenomathWithnumbers@LN{%
+ \ifLineNumbers
+ \ifnum\interlinepenalty>-\linenopenaltypar
+ \global\holdinginserts\thr@@
+ \advance\interlinepenalty \linenopenalty
+ \ifhmode
+ \advance\predisplaypenalty \linenopenalty
+ \fi
+ \advance\postdisplaypenalty \linenopenalty
+ \advance\interdisplaylinepenalty \linenopenalty
+ \fi
+ \fi
+ \ignorespaces
+}%
+\newcommand\linenomathNonumbers@LN{%
+ \ifLineNumbers
+ \ifnum\interlinepenalty>-\linenopenaltypar
+ \global\holdinginserts\thr@@
+ \advance\interlinepenalty \linenopenalty
+ \ifhmode
+ \advance\predisplaypenalty \linenopenalty
+ \fi
+ \fi
+ \fi
+ \ignorespaces
+}%
+\def\endlinenomath@LN{%
+ \ifLineNumbers
+ \global\holdinginserts\@LN@outer@holdins
+ \fi
+ \global\@ignoretrue
+}
+\def\linenumberpar@LN{%
+ \ifvmode \@@@par \else
+ \ifinner \@@@par \else
+ \xdef\@LN@outer@holdins{\the\holdinginserts}%
+ \advance \interlinepenalty \linenopenalty
+ \linenoprevgraf \prevgraf
+ \global \holdinginserts \thr@@
+ \@@@par
+ \ifnum\prevgraf>\linenoprevgraf
+ \penalty-\linenopenaltypar
+ \fi
+ \@LN@parpgbrk
+ \global\holdinginserts\@LN@outer@holdins
+ \advance\interlinepenalty -\linenopenalty
+ \fi
+ \fi
+}%
+\appdef\class@documenthook{%
+ \@ifpackageloaded{lineno}{%
+ \@ifx{\linenomathWithnumbers\linenomathWithnumbers@LN}{%
+ \@ifx{\linenomathNonumbers\linenomathNonumbers@LN}{%
+ \@ifx{\endlinenomath\endlinenomath@LN}{%
+ \@ifx{\linenumberpar\linenumberpar@LN}{%
+ \true@sw
+ }{\false@sw}%
+ }{\false@sw}%
+ }{\false@sw}%
+ }{\false@sw}%
+ {%
+ \class@info{Overriding lineo.sty, restoring output routine,}%
+ \let\linenumberpar\linenumberpar@ltx
+ \let\endlinenomath\endlinenomath@ltx
+ \expandafter\let\csname endlinenomath*\endcsname\endlinenomath@ltx
+ \let\linenomathWithnumbers\linenomathWithnumbers@ltx
+ \let\linenomathNonumbers\linenomathNonumbers@ltx
+ \let\ex@vadjust@ltx\ex@vadjust@line
+ \let\@LN@postlabel\enqueue@whatsit@ltx
+ \let\do@whatsit\write@linelabel
+ \let\handle@par@ltx\handle@par@LN
+ \let\@@handle@line@ltx\Make@LineNo@ltx
+ \let\@@handle@display@ltx\Make@LineNo@ltx
+ \output@latex{\natural@output}%
+ \let\vspace\vspace@ltx
+ \let\pagebreak\pagebreak@ltx
+ \let\nopagebreak\nopagebreak@ltx
+ \let\@arrayparboxrestore\@arrayparboxrestore@ltx
+ \let\\\endline@ltx
+ \appdef\set@footnotefont{%
+ \let\par\@@@par
+ \let\@@par\@@@par
+ }%
+ \@if@sw\ifLineNumbers\fi{%
+ \class@info{Reinvoke \string\linenumbers}%
+ \let\@@par\linenumberpar
+ \@ifx{\@par\linenumberpar@LN}{\let\@par\linenumberpar}{}%
+ \@ifx{\par\linenumberpar@LN}{\let\par\linenumberpar}{}%
+ }{%
+ \class@info{Line numbering not turned on yet}%
+ }%
+ }{%
+ \class@warn{Failed to recognize lineno.sty procedures; no patches applied. Please get a more up-to-date class.}%
+ }%
+ }{%
+ }%
+}%
+\def\linenumberpar@ltx{\@ifvmode{\@@@par}{\@linenumberpar}}%
+\def\@linenumberpar{%
+ \linenoprevgraf\prevgraf
+ \set@linepenalties
+ \@@@par
+ \@ifnum{\prevgraf>\linenoprevgraf}{
+ \penalty-\int@postparpenalty
+ }{}%
+ \@LN@parpgbrk
+ \restore@linepenalties
+}%
+\newcommand\linenomathWithnumbers@ltx{\@linenomathnumbers@ltx\true@sw}%
+\newcommand\linenomathNonumbers@ltx{\@linenomathnumbers@ltx\false@sw}%
+\def\@linenomathnumbers@ltx#1{%
+ \@if@sw\ifLineNumbers\fi{%
+ \set@linepenalties
+ \set@displaypenalties#1%
+ }{}%
+ \ignorespaces
+}%
+\def\endlinenomath@ltx{%
+ \global\@ignoretrue
+}%
+\def\handle@par@LN{%
+ \Make@LineNo@ltx
+ \@tempcnta\lastpenalty
+ \@ifnum{\@tempcnta=\z@}{}{%
+ \expandafter\gdef
+ \expandafter\@LN@parpgbrk
+ \expandafter{%
+ \expandafter\penalty
+ \the\@tempcnta
+ \global\let\@LN@parpgbrk\@LN@screenoff@pen
+ }%
+ }%
+}%
+\def\Make@LineNo@ltx{%
+ \@LN@maybe@normalLineNumber
+ \boxmaxdepth\maxdimen\setbox\z@\vbox{\unvbox\@cclv}%
+ \@tempdima\dp\z@
+ \unvbox\z@
+ \sbox\@tempboxa{\hb@xt@\z@{\makeLineNumber}}%
+ \ht\@tempboxa\z@
+ \@LN@depthbox
+ \stepLineNumber
+ \g@vadjust@line
+ \global\let\g@vadjust@line\@empty
+}%
+\def\write@linelabel#1{%
+ \protected@write\@auxout{}{%
+ \string\newlabel{#1}{{\theLineNumber}{\thepage}{}{}{}}%
+ }%
+}%
+\def\ex@vadjust@line{%
+ \@if@sw\ifLineNumbers\fi{\enqueue@vadjust@ltx}{\vadjust}%
+}%
+\endinput
+%%
+%% End of file `ltxgrid.sty'.
diff --git a/obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/ltxutil.sty b/obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/ltxutil.sty
new file mode 100644
index 0000000000..d040663a07
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/ltxutil.sty
@@ -0,0 +1,2056 @@
+%%
+%% This is file `ltxutil.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% ltxutil.dtx (with options: `package,kernel')
+%%
+%% This is a generated file;
+%% altering it directly is inadvisable;
+%% instead, modify the original source file.
+%% See the URL in the file 00readme.tex.
+%%
+%% License
+%% You may distribute this file under the conditions of the
+%% LaTeX Project Public License 1.3 or later
+%% (http://www.latex-project.org/lppl.txt).
+%%
+%% This file is distributed WITHOUT ANY WARRANTY;
+%% without even the implied warranty of MERCHANTABILITY
+%% or FITNESS FOR A PARTICULAR PURPOSE.
+%%
+%%% @LaTeX-file{
+%%% filename = "ltxutil.dtx",
+%%% version = "4.1r",
+%%% date = "2010/07/25",
+%%% time = "20:33:00 UT-8",
+%%% checksum = "4094",
+%%% author = "Arthur Ogawa (mailto:arthur_ogawa at sbcglobal.net),
+%%% commissioned by the American Physical Society.
+%%% ",
+%%% copyright = "Copyright (C) 1999, 2009 Arthur Ogawa,
+%%% distributed under the terms of the
+%%% LaTeX Project Public License, see
+%%% ftp://ctan.tug.org/macros/latex/base/lppl.txt
+%%% ",
+%%% address = "Arthur Ogawa,
+%%% USA",
+%%% telephone = "",
+%%% FAX = "",
+%%% email = "mailto colon arthur_ogawa at sbcglobal.net",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "latex, page grid, main vertical list",
+%%% supported = "yes",
+%%% abstract = "utilities package",
+%%% docstring = "The checksum field above generated by ltxdoc",
+%%% }
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]%
+\ProvidesFile{%
+ltxutil%
+.sty%
+}%
+ [2010/07/25/20:33:00 4.1r utilities package (portions licensed from W. E. Baxter web at superscript.com)]% \fileversion
+\def\package@name{ltxutil}%
+\expandafter\PackageInfo\expandafter{\package@name}{%
+ Utility macros for \protect\LaTeXe,
+ by A. Ogawa (arthur_ogawa at sbcglobal.net)%
+}%
+\def\class@err#1{\ClassError{\class@name}{#1}\@eha}%
+\def\class@warn#1{\ClassWarningNoLine{\class@name}{#1}}%
+\def\class@info#1{\ClassInfo{\class@name}{#1}}%
+\def\obsolete@command#1{%
+ \class@warn@end{Command \string#1\space is obsolete.^^JPlease remove from your document}%
+ \global\let#1\@empty
+ #1%
+}%
+\def\replace@command#1#2{%
+ \class@warn@end{Command \string#1\space is obsolete;^^JUse \string#2\space instead}%
+ \global\let#1#2%
+ #1%
+}%
+\def\replace@environment#1#2{%
+ \class@warn@end{Environment #1 is obsolete;^^JUse #2 instead}%
+ \glet@environment{#1}{#2}%
+ \@nameuse{#1}%
+}%
+\def\incompatible@package#1{%
+ \@ifpackageloaded{#1}{%
+ \def\@tempa{I cannot continue. You must remove the \string\usepackage\ statement that caused that package to be loaded.}%
+ \ClassError{\class@name}{The #1 package cannot be used with \class@name}%
+ \@tempa\stop
+ }{%
+ \class@info{#1 was not loaded (OK!)}%
+ }%
+}%
+\def\class@warn@end#1{%
+ \gappdef\class@enddocumenthook{\class@warn{#1}}%
+}%
+\ifx\undefined\class@name
+ \def\class@name{ltxutil}%
+ \class@warn{You should define the class name before reading in this package. Using default}%
+\fi
+\def\t@{to}%
+\dimendef\dimen@iii\thr@@
+\def\halignt@{\halign\t@}%
+\chardef\f@ur=4\relax
+\chardef\cat@letter=11\relax
+\chardef\other=12\relax
+\def\let@environment#1#2{%
+ \expandafter\let
+ \csname#1\expandafter\endcsname\csname#2\endcsname
+ \expandafter\let
+ \csname end#1\expandafter\endcsname\csname end#2\endcsname
+}%
+\def\glet@environment#1#2{%
+ \global\expandafter\let
+ \csname#1\expandafter\endcsname\csname#2\endcsname
+ \global\expandafter\let
+ \csname end#1\expandafter\endcsname\csname end#2\endcsname
+}%
+\newcommand\tracingplain{%
+ \tracingonline\z@\tracingcommands\z@\tracingstats\z@
+ \tracingpages\z@\tracingoutput\z@\tracinglostchars\@ne
+ \tracingmacros\z@\tracingparagraphs\z@\tracingrestores\z@
+ \showboxbreadth5\showboxdepth3\relax %\errorstopmode
+ }%
+\newcommand\traceoutput{%
+ \appdef\@resetactivechars{\showoutput}%
+}%
+\newcommand\say[1]{\typeout{<\noexpand#1=\meaning#1>}}%
+\newcommand\saythe[1]{\typeout{<\noexpand#1=\the#1>}}%
+\def\fullinterlineskip{\prevdepth\z@}%
+\countdef\count@i\@ne
+\countdef\count@ii\tw@
+\long\def\prepdef#1#2{%
+ \@ifxundefined#1{\toks@{}}{\toks@\expandafter{#1}}%
+ \toks@ii{#2}%
+ \edef#1{\the\toks@ii\the\toks@}%
+}%
+\long\def\appdef#1#2{%
+ \@ifxundefined#1{\toks@{}}{\toks@\expandafter{#1}}%
+ \toks@ii{#2}%
+ \edef#1{\the\toks@\the\toks@ii}%
+}%
+\long\def\gappdef#1#2{%
+ \@ifxundefined#1{\toks@{}}{\toks@\expandafter{#1}}%
+ \toks@ii{#2}%
+ \global\edef#1{\the\toks@\the\toks@ii}%
+}%
+\long\def\appdef@val#1#2{%
+ \appdef#1{{#2}}%
+}%
+\long\def\appdef@e#1#2{%
+ \expandafter\appdef
+ \expandafter#1%
+ \expandafter{#2}%
+}%
+\long\def\appdef@eval#1#2{%
+ \expandafter\appdef@val
+ \expandafter#1%
+ \expandafter{#2}%
+}%
+\toksdef\toks@ii=\tw@
+\long\def\@ifxundefined#1{\@ifx{\undefined#1}}%
+\long\def\@ifnotrelax#1#2#3{\@ifx{\relax#1}{#3}{#2}}%
+\long\def\@argswap#1#2{#2#1}%
+\long\def\@argswap@val#1#2{#2{#1}}%
+\def\@ifxundefined@cs#1{\expandafter\@ifx\expandafter{\csname#1\endcsname\relax}}%
+\def\@boolean#1#2{%
+ \long\def#1{%
+ #2% \if<something>
+ \expandafter\true@sw
+ \else
+ \expandafter\false@sw
+ \fi
+ }%
+}%
+\def\@boole@def#1#{\@boolean{#1}}% Implicit #2
+\def\@booleantrue#1{\let#1\true@sw}%
+\def\@booleanfalse#1{\let#1\false@sw}%
+\@boole@def\@ifx#1{\ifx#1}%
+\@boole@def\@ifx@empty#1{\ifx\@empty#1}%
+\@boole@def\@if@empty#1{\if!#1!}%
+\def\@if@sw#1#2{#1\expandafter\true@sw\else\expandafter\false@sw#2}%
+\@boole@def\@ifdim#1{\ifdim#1}%
+\@boole@def\@ifeof#1{\ifeof#1}%
+\@boole@def\@ifhbox#1{\ifhbox#1}%
+\@boole@def\@ifhmode{\ifhmode}%
+\@boole@def\@ifinner{\ifinner}%
+\@boole@def\@ifmmode{\ifmmode}%
+\@boole@def\@ifnum#1{\ifnum#1}%
+\@boole@def\@ifodd#1{\ifodd#1}%
+\@boole@def\@ifvbox#1{\ifvbox#1}%
+\@boole@def\@ifvmode{\ifvmode}%
+\@boole@def\@ifvoid#1{\ifvoid#1}%
+\long\def\true@sw#1#2{#1}%
+\long\def\false@sw#1#2{#2}%
+\long\def\loopuntil#1{#1{}{\loopuntil{#1}}}%
+\long\def\loopwhile#1{#1{\loopwhile{#1}}{}}%
+\def\@provide#1{%
+ \@ifx{\undefined#1}{\true@sw}{\@ifx{\relax#1}{\true@sw}{\false@sw}}%
+ {\def#1}{\def\j@nk}%
+}%
+\prepdef\document{%
+ \endgroup
+ \document@inithook
+ \true@sw{}%
+}%
+\let\document@inithook\@empty
+\appdef\document@inithook{%
+ \AtBeginDocument{\class@documenthook}%
+}%
+\AtEndDocument{%
+ \class@enddocumenthook
+}%
+\let\class@documenthook\@empty
+\let\class@enddocumenthook\@empty
+\def\enddocument{%
+ \let\AtEndDocument\@firstofone
+ \@enddocumenthook
+ \@checkend{document}%
+ \clear@document
+ \check@aux
+ \deadcycles\z@
+ \@@end
+}%
+\def\check@aux{\do@check@aux}%
+\def\do@check@aux{%
+ \@if@sw\if@filesw\fi{%
+ \immediate\closeout\@mainaux
+ \let\@setckpt\@gobbletwo
+ \let\@newl@bel\@testdef
+ \@tempswafalse
+ \makeatletter
+ \input\jobname.aux\relax
+ }{}%
+ \@dofilelist
+ \@ifdim{\font@submax >\fontsubfuzz\relax}{%
+ \@font@warning{%
+ Size substitutions with differences\MessageBreak
+ up to \font@submax\space have occured.\@gobbletwo
+ }%
+ }{}%
+ \@defaultsubs
+ \@refundefined
+ \@if@sw\if@filesw\fi{%
+ \@ifx{\@multiplelabels\relax}{%
+ \@if@sw\if@tempswa\fi{%
+ \@latex@warning@no@line{%
+ Label(s) may have changed.
+ Rerun to get cross-references right
+ }%
+ }{}%
+ }{%
+ \@multiplelabels
+ }%
+ }{}%
+}%
+\def\clear@document{%
+ \clearpage
+ \do@output@cclv{%
+ \Call@AfterLastShipout
+ }%
+}%
+\appdef\class@documenthook{%
+ \providecommand\Call@AfterLastShipout{}%
+}%
+\def\class@extension#1#2{%
+ \IfFileExists{#1.#2}{%
+ \expandafter\class@extensionfile\csname ver@\@currname.\@currext\endcsname{#1}#2%
+ }{%
+ \csname rtx@#1\endcsname
+ }%
+}%
+\def\class@extensionfile#1#2#3{%
+ \@pass@ptions#3\@unusedoptionlist{#2}%
+ \global\let\@unusedoptionlist\@empty
+ \expandafter\class@ext@hook\csname#2.#3-h@@k\endcsname#1{#2}#3%
+}%
+\def\class@ext@hook#1#2#3#4{%
+ \@pushfilename@ltx
+ \makeatletter
+ \let\CurrentOption\@empty
+ \@reset@ptions
+ \let#1\@empty
+ \xdef\@currname{#3}%
+ \global\let\@currext#4%
+ \global\let\@clsextension\@currext
+ \input{#3.#4}%
+ \@ifl@ter#4{#3}#2{%
+ \class@info{Class extension later than: #2}%
+ }{%
+ \class@info{Class extension earlier: #2}%
+ \@@end
+ }%
+ #1%
+ \let#1\@undefined
+ \expandafter\@p@pfilename@ltx\@currnamestack@ltx\@nil
+ \@reset@ptions
+}%
+\def\@pushfilename@ltx{%
+ \xdef\@currnamestack@ltx{%
+ {\@currname}%
+ {\@currext}%
+ {\@clsextension}%
+ {\the\catcode`\@}%
+ \@currnamestack@ltx
+ }%
+}%
+\def\@p@pfilename@ltx#1#2#3#4#5\@nil{%
+ \gdef\@currname{#1}%
+ \gdef\@currext{#2}%
+ \gdef\@clsextension{#3}%
+ \catcode`\@#4\relax
+ \gdef\@currnamestack@ltx{#5}%
+}%
+\global\let\@currnamestack@ltx\@empty
+\def\flushing{%
+ \let\\\@normalcr
+ \leftskip\z@skip
+ \rightskip\z@skip
+ \@rightskip\z@skip
+ \parfillskip\@flushglue
+}%
+\expandafter\DeclareRobustCommand\expandafter\@centercr\expandafter{\@centercr}%
+\def\eqnarray@LaTeX{%
+ \stepcounter{equation}%
+ \def\@currentlabel{\p@equation\theequation}%
+ \global\@eqnswtrue
+ \m@th
+ \global\@eqcnt\z@
+ \tabskip\@centering
+ \let\\\@eqncr
+ $$\everycr{}\halign to\displaywidth\bgroup
+ \hskip\@centering$\displaystyle\tabskip\z@skip{##}$\@eqnsel
+ &\global\@eqcnt\@ne\hskip \tw@\arraycolsep \hfil${##}$\hfil
+ &\global\@eqcnt\tw@ \hskip \tw@\arraycolsep
+ $\displaystyle{##}$\hfil\tabskip\@centering
+ &\global\@eqcnt\thr@@ \hb@xt@\z@\bgroup\hss##\egroup
+ \tabskip\z@skip
+ \cr
+}
+\long\def\eqnarray@fleqn@fixed{%
+ \stepcounter{equation}\def\@currentlabel{\p@equation\theequation}%
+ \global\@eqnswtrue\m@th\global\@eqcnt\z@
+ \tabskip\ltx@mathindent
+ \let\\=\@eqncr
+ \setlength\abovedisplayskip{\topsep}%
+ \ifvmode\addtolength\abovedisplayskip{\partopsep}\fi
+ \addtolength\abovedisplayskip{\parskip}%
+ \setlength\belowdisplayskip{\abovedisplayskip}%
+ \setlength\belowdisplayshortskip{\abovedisplayskip}%
+ \setlength\abovedisplayshortskip{\abovedisplayskip}%
+ $$%
+ \everycr{}%
+ \halignt@\linewidth\bgroup
+ \hskip\@centering$\displaystyle\tabskip\z@skip{##}$\@eqnsel
+ &\global\@eqcnt\@ne
+ \hskip\tw@\eqncolsep
+ \hfil${{}##{}}$\hfil
+ &\global\@eqcnt\tw@
+ \hskip\tw@\eqncolsep
+ $\displaystyle{##}$\hfil\tabskip\@centering
+ &\global\@eqcnt\thr@@\hb@xt@\z@\bgroup\hss##\egroup
+ \tabskip\z@skip
+ \cr
+}%
+\@ifx{\eqnarray\eqnarray@LaTeX}{%
+ \class@info{Repairing broken LaTeX eqnarray}%
+ \let\eqnarray\eqnarray@fleqn@fixed
+ \newlength\eqncolsep
+ \setlength\eqncolsep\z@
+ \let\eqnarray@LaTeX\relax
+ \let\eqnarray@fleqn@fixed\relax
+}{}%
+\def\ltx@mathindent{\@centering}%
+\def\set@eqnarray@skips{}%
+\def\prep@math{%
+ \@ifvmode{\everypar{{\setbox\z@\lastbox}}}{}%
+}%
+\def\prep@math@patch{%
+ \prepdef\equation{\prep@math}%
+ \prepdef\eqnarray{\prep@math}%
+}%
+\def\footnote{\@ifnextchar[\ltx@xfootnote\ltx@yfootnote}%
+\def\ltx@xfootnote[#1]{%
+ \ltx@def@footproc\ltx@footmark[#1]%
+ \expandafter\ltx@foottext\expandafter{\the\csname c@\@mpfn\endcsname}%
+}%
+\def\ltx@yfootnote{%
+ \ltx@stp@footproc\ltx@footmark
+ \expandafter\ltx@foottext\expandafter{\the\csname c@\@mpfn\endcsname}%
+}%
+\def\footnotemark{\@ifnextchar[\ltx@xfootmark\ltx@yfootmark}%
+\def\ltx@xfootmark{\ltx@def@footproc\ltx@footmark}%
+\def\ltx@yfootmark{\ltx@stp@footproc\ltx@footmark}%
+\def\ltx@footmark#1{%
+ \leavevmode
+ \ifhmode\edef\@x@sf{\the\spacefactor}\nobreak\fi
+ \begingroup
+ \expandafter\ltx@make@current@footnote\expandafter{\@mpfn}{#1}%
+ \expandafter\@argswap@val\expandafter{\Hy@footnote@currentHref}{\hyper@linkstart {link}}%
+ \@makefnmark
+ \hyper@linkend
+ \endgroup
+ \ifhmode\spacefactor\@x@sf\fi
+ \relax
+}%
+\def\footnotetext{\@ifnextchar[\ltx@xfoottext\ltx@yfoottext}%
+\def\ltx@xfoottext{\ltx@def@footproc\ltx@foottext}%
+\def\ltx@yfoottext{\ltx@stp@footproc\ltx@foottext}%
+\long\def\ltx@foottext#1#2{%
+ \begingroup
+ \expandafter\ltx@make@current@footnote\expandafter{\@mpfn}{#1}%
+ \@footnotetext{#2}%
+ \endgroup
+}%
+\def\ltx@def@footproc#1[#2]{%
+ \begingroup
+ \csname c@\@mpfn\endcsname #2\relax
+ \unrestored@protected@xdef\@thefnmark{\thempfn}%
+ \expandafter\endgroup
+ \expandafter#1%
+ \expandafter{\the\csname c@\@mpfn\endcsname}%
+}%
+\def\ltx@stp@footproc#1{%
+ \expandafter\stepcounter\expandafter{\@mpfn}%
+ \protected@xdef\@thefnmark{\thempfn}%
+ \expandafter#1%
+ \expandafter{\the\csname c@\@mpfn\endcsname}%
+}%
+\appdef\class@documenthook{%
+ \let\footnote@latex\footnote
+ \@ifpackageloaded{hyperref}{}{%
+ \let\H@@footnotetext\@footnotetext
+ \def\@footnotetext{\H@@footnotetext}%
+ \let\H@@mpfootnotetext\@mpfootnotetext
+ \def\@mpfootnotetext{\H@@mpfootnotetext}%
+ }%
+}%
+\def\ltx@make@current@footnote#1#2{%
+ \csname c@#1\endcsname#2\relax
+ \protected@edef\Hy@footnote@currentHref{\@currentHref-#1.\csname the#1\endcsname}%
+}%
+\def\thempfootnote@latex{{\itshape \@alph \c@mpfootnote }}%
+\def\ltx@thempfootnote{\@alph\c@mpfootnote}%
+\@ifx{\thempfootnote\thempfootnote@latex}{%
+ \class@info{Repairing hyperref-unfriendly LaTeX definition of \string\mpfootnote}%
+ \let\thempfootnote\ltx@thempfootnote
+}{}%
+\def\@makefnmark{%
+ \hbox{%
+ \@textsuperscript{%
+ \normalfont\itshape\@thefnmark
+ }%
+ }%
+}%
+\long\def\@footnotetext{%
+ \insert\footins\bgroup
+ \make@footnotetext
+}%
+\long\def\@mpfootnotetext{%
+ \minipagefootnote@pick
+ \make@footnotetext
+}%
+\long\def\make@footnotetext#1{%
+ \set@footnotefont
+ \set@footnotewidth
+ \@parboxrestore
+ \protected@edef\@currentlabel{%
+ \csname p@\@mpfn\endcsname\@thefnmark
+ }%
+ \color@begingroup
+ \@makefntext{%
+ \rule\z@\footnotesep\ignorespaces#1%
+ \@finalstrut\strutbox\vadjust{\vskip\z@skip}%
+ }%
+ \color@endgroup
+ \minipagefootnote@drop
+}%
+\def\set@footnotefont{%
+ \reset@font\footnotesize
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\footnotesep
+ \splitmaxdepth\dp\strutbox
+}%
+\def\set@footnotewidth{\set@footnotewidth@one}%
+\def\robustify@contents{%
+ \let \label \@gobble
+ \let \index \@gobble
+ \let \glossary \@gobble
+ \let\footnote \@gobble
+ \def\({\string\(}%
+ \def\){\string\)}%
+ \def\\{\string\\}%
+}%
+\long\def\addtocontents#1#2{%
+ \protected@write\@auxout{\robustify@contents}{\string \@writefile {#1}{#2}}%
+}%
+\def\addcontentsline#1#2#3{%
+ \addtocontents{#1}{%
+ \protect\contentsline{#2}{#3}{\thepage}{}%
+ }%
+}%
+\def\label#1{%
+ \@bsphack
+ \protected@write\@auxout{}{%
+ \string\newlabel{#1}{{\@currentlabel}{\thepage}{}{}{}}%
+ }%
+ \@esphack
+}%
+\def\ltx@contentsline#1{%
+ \expandafter\@ifnotrelax\csname l@#1\endcsname{}{%
+ \expandafter\let\csname l@#1\endcsname\@gobbletwo
+ }%
+ \contentsline@latex{#1}%
+}%
+\appdef\document@inithook{%
+ \let\contentsline@latex\contentsline
+ \let\contentsline\ltx@contentsline
+}%
+\appdef\class@documenthook{%
+ \prepdef\caption{\minipagefootnote@here}%
+}%
+\def\minipagefootnote@init{%
+ \setbox\@mpfootins\box\voidb@x
+}%
+\def\minipagefootnote@pick{%
+ \global\setbox\@mpfootins\vbox\bgroup
+ \unvbox\@mpfootins
+}%
+\def\minipagefootnote@drop{%
+ \egroup
+}%
+\def\minipagefootnote@here{%
+ \par
+ \@ifvoid\@mpfootins{}{%
+ \vskip\skip\@mpfootins
+ \fullinterlineskip
+ \@ifinner{%
+ \vtop{\unvcopy\@mpfootins}%
+ {\setbox\z@\lastbox}%
+ }{}%
+ \unvbox\@mpfootins
+ }%
+}%
+\def\minipagefootnote@foot{%
+ \@ifvoid\@mpfootins{}{%
+ \insert\footins\bgroup\unvbox\@mpfootins\egroup
+ }%
+}%
+\def\endminipage{%
+ \par
+ \unskip
+ \minipagefootnote@here
+ \@minipagefalse %% added 24 May 89
+ \color@endgroup
+ \egroup
+ \expandafter\@iiiparbox\@mpargs{\unvbox\@tempboxa}%
+}%
+\@booleantrue\floats@sw
+\let\@xfloat@LaTeX\@xfloat
+\def\@xfloat#1[#2]{%
+ \@xfloat@prep
+ \@nameuse{fp@proc@#2}%
+ \floats@sw{\@xfloat@LaTeX{#1}[#2]}{\@xfloat@anchored{#1}[]}%
+}%
+\def\@xfloat@prep{%
+ \ltx@footnote@pop
+ \def\@mpfn{mpfootnote}%
+ \def\thempfn{\thempfootnote}%
+ \c@mpfootnote\z@
+ \let\H@@footnotetext\H@@mpfootnotetext
+}%
+\let\ltx@footnote@pop\@empty
+\def\@xfloat@anchored#1[#2]{%
+ \def\@captype{#1}%
+ \begin@float@pagebreak
+ \let\end@float\end@float@anchored
+ \let\end@dblfloat\end@float@anchored
+ \hsize\columnwidth
+ \@parboxrestore
+ \@floatboxreset
+ \minipagefootnote@init
+}%
+\def\end@float@anchored{%
+ \minipagefootnote@here
+ \par\vskip\z@skip
+ \par
+ \end@float@pagebreak
+}%
+\def\begin@float@pagebreak{\par\addvspace\intextsep}%
+\def\end@float@pagebreak{\par\addvspace\intextsep}%
+\def\@mpmakefntext#1{%
+ \parindent=1em
+ \noindent
+ \hb@xt@1em{\hss\@makefnmark}%
+ #1%
+}%
+\def\do@if@floats#1#2{%
+ \floats@sw{}{%
+ \expandafter\newwrite
+ \csname#1write\endcsname
+ \expandafter\def
+ \csname#1@stream\endcsname{\jobname#2}%
+ \expandafter\immediate
+ \expandafter\openout
+ \csname#1write\endcsname
+ \csname#1@stream\endcsname\relax
+ \@ifxundefined\@float@LaTeX{%
+ \let\@float@LaTeX\@float
+ \let\@dblfloat@LaTeX\@dblfloat
+ \let\@float\write@float
+ \let\@dblfloat\write@floats
+ }{}%
+ \let@environment{#1@float}{#1}%
+ \let@environment{#1@floats}{#1*}%
+ \@ifxundefined@cs{#1@write}{}{%
+ \let@environment{#1}{#1@write}%
+ }%
+ }%
+}%
+\def\triggerpar{\leavevmode\@@par}%
+\def\oneapage{\def\begin@float@pagebreak{\newpage}\def\end@float@pagebreak{\newpage}}%
+\def\print@float#1#2{%
+ \lengthcheck@sw{%
+ \total@float{#1}%
+ }{}%
+ \@ifxundefined@cs{#1write}{}{%
+ \begingroup
+ \@booleanfalse\floats@sw
+ #2%
+ \raggedbottom
+ \def\array@default{v}% floats must
+ \let\@float\@float@LaTeX
+ \let\@dblfloat\@dblfloat@LaTeX
+ \let\trigger@float@par\triggerpar
+ \let@environment{#1}{#1@float}%
+ \let@environment{#1*}{#1@floats}%
+ \expandafter\prepdef\csname#1\endcsname{\trigger@float@par}%
+ \expandafter\prepdef\csname#1*\endcsname{\trigger@float@par}%
+ \@namedef{fps@#1}{h!}%
+ \expandafter\immediate
+ \expandafter\closeout
+ \csname#1write\endcsname
+ \everypar{%
+ \global\let\trigger@float@par\relax
+ \global\everypar{}\setbox\z@\lastbox
+ \@ifxundefined@cs{#1sname}{}{%
+ \begin@float@pagebreak
+ \expandafter\section
+ \expandafter*%
+ \expandafter{%
+ \csname#1sname\endcsname
+ }%
+ }%
+ }%
+ \input{\csname#1@stream\endcsname}%
+ \endgroup
+ \global\expandafter\let\csname#1write\endcsname\relax
+ }%
+}%
+\chardef\@xvi=16\relax
+\mathchardef\@twopowerfourteen="4000
+\mathchardef\@twopowertwo="4
+\def\tally@float#1{%
+ \begingroup
+ \@tempcnta\count\@currbox
+ \divide\@tempcnta\@xxxii
+ \multiply\@tempcnta\@xxxii
+ \advance\count\@currbox-\@tempcnta
+ \divide\@tempcnta\@xxxii
+ \@ifnum{\count\@currbox>\@xvi}{%
+ \advance\count\@currbox-\@xvi\@booleantrue\@temp@sw
+ }{%
+ \@booleanfalse\@temp@sw
+ }%
+ \show@box@size@sw{%
+ \class@info{Float #1
+ (\the\@tempcnta)[\@temp@sw{16+}{}\the\count\@currbox]^^J%
+ (\the\ht\@currbox+\the\dp\@currbox)X\the\wd\@currbox
+ }%
+ }{}%
+ \endgroup
+ \expandafter\let
+ \expandafter\@tempa
+ \csname fbox@\csname ftype@#1\endcsname\endcsname
+ \@ifnotrelax\@tempa{%
+ \@ifhbox\@tempa{%
+ \setbox\@tempboxa\vbox{\unvcopy\@currbox\hrule}%
+ \dimen@\ht\@tempboxa
+ \divide\dimen@\@twopowerfourteen
+ \@ifdim{\wd\@tempboxa<\textwidth}{%
+ \advance\dimen@\ht\@tempa
+ \global\ht\@tempa\dimen@
+ }{%
+ \advance\dimen@\dp\@tempa
+ \global\dp\@tempa\dimen@
+ }%
+ }{}%
+ }{}%
+}%
+\def\total@float#1{%
+ \expandafter\let
+ \expandafter\@tempa
+ \csname fbox@\csname ftype@#1\endcsname\endcsname
+ \@ifnotrelax\@tempa{%
+ \@ifhbox\@tempa{%
+ \@tempdima\the\ht\@tempa\divide\@tempdima\@twopowertwo\@tempcnta\@tempdima
+ \@tempdimb\the\dp\@tempa\divide\@tempdimb\@twopowertwo\@tempcntb\@tempdimb
+ \class@info{Total #1: Column(\the\@tempcnta pt), Page(\the\@tempcnta pt)}%
+ }{}%
+ }{}%
+}%
+\def\write@float#1{\write@@float{#1}{#1}}%
+\def\endwrite@float{\@Esphack}%
+\def\write@floats#1{\write@@float{#1*}{#1}}%
+\def\endwrite@floats{\@Esphack}%
+\def\write@@float#1#2{%
+ \ifhmode
+ \@bsphack
+ \fi
+ \chardef\@tempc\csname#2write\endcsname
+ \toks@{\begin{#1}}%
+ \def\@tempb{#1}%
+ \expandafter\let\csname end#1\endcsname\endwrite@float
+ \catcode`\^^M\active
+ \@makeother\{\@makeother\}\@makeother\%
+ \write@floatline
+}%
+\begingroup
+ \catcode`\[\the\catcode`\{\catcode`\]\the\catcode`\}\@makeother\{\@makeother\}%
+ \gdef\float@end@tag#1\end{#2}#3\@nul[%
+ \def\@tempa[#2]%
+ \@ifx[\@tempa\@tempb][\end[#2]][\write@floatline]%
+ ]%
+ \obeylines%
+ \gdef\write@floatline#1^^M[%
+ \begingroup%
+ \newlinechar`\^^M%
+ \toks@\expandafter[\the\toks@#1]\immediate\write\@tempc[\the\toks@]%
+ \endgroup%
+ \toks@[]%
+ \float@end@tag#1\end{}\@nul%
+ ]%
+\endgroup
+\def\@alph#1{\ifcase#1\or a\or b\or c\or d\else\@ialph{#1}\fi}
+\def\@ialph#1{\ifcase#1\or \or \or \or \or e\or f\or g\or h\or i\or j\or
+ k\or l\or m\or n\or o\or p\or q\or r\or s\or t\or u\or v\or w\or x\or
+ y\or z\or aa\or bb\or cc\or dd\or ee\or ff\or gg\or hh\or ii\or jj\or
+ kk\or ll\or mm\or nn\or oo\or pp\or qq\or rr\or ss\or tt\or uu\or
+ vv\or ww\or xx\or yy\or zz\else\@ctrerr\fi}
+\def\@startsection#1#2#3#4#5#6{%
+ \@startsection@hook
+ \if@noskipsec \leavevmode \fi
+ \par
+ \@tempskipa #4\relax
+ \@afterindenttrue
+ \ifdim \@tempskipa <\z@
+ \@tempskipa -\@tempskipa \@afterindentfalse
+ \fi
+ \if@nobreak
+ \everypar{}%
+ \else
+ \addpenalty\@secpenalty\addvspace\@tempskipa
+ \fi
+ \@ifstar
+ {\@dblarg{\@ssect@ltx{#1}{#2}{#3}{#4}{#5}{#6}}}%
+ {\@dblarg{\@sect@ltx {#1}{#2}{#3}{#4}{#5}{#6}}}%
+}%
+\def\@startsection@hook{}%
+\class@info{Repairing broken LateX \string\@sect}%
+\def\@sect@ltx#1#2#3#4#5#6[#7]#8{%
+ \@ifnum{#2>\c@secnumdepth}{%
+ \def\H@svsec{\phantomsection}%
+ \let\@svsec\@empty
+ }{%
+ \H@refstepcounter{#1}%
+ \def\H@svsec{%
+ \phantomsection
+ }%
+ \protected@edef\@svsec{{#1}}%
+ \@ifundefined{@#1cntformat}{%
+ \prepdef\@svsec\@seccntformat
+ }{%
+ \expandafter\prepdef
+ \expandafter\@svsec
+ \csname @#1cntformat\endcsname
+ }%
+ }%
+ \@tempskipa #5\relax
+ \@ifdim{\@tempskipa>\z@}{%
+ \begingroup
+ \interlinepenalty \@M
+ #6{%
+ \@ifundefined{@hangfrom@#1}{\@hang@from}{\csname @hangfrom@#1\endcsname}%
+ {\hskip#3\relax\H@svsec}{\@svsec}{#8}%
+ }%
+ \@@par
+ \endgroup
+ \@ifundefined{#1mark}{\@gobble}{\csname #1mark\endcsname}{#7}%
+ \addcontentsline{toc}{#1}{%
+ \@ifnum{#2>\c@secnumdepth}{%
+ \protect\numberline{}%
+ }{%
+ \protect\numberline{\csname the#1\endcsname}%
+ }%
+ #8}%
+ }{%
+ \def\@svsechd{%
+ #6{%
+ \@ifundefined{@runin@to@#1}{\@runin@to}{\csname @runin@to@#1\endcsname}%
+ {\hskip#3\relax\H@svsec}{\@svsec}{#8}%
+ }%
+ \@ifundefined{#1mark}{\@gobble}{\csname #1mark\endcsname}{#7}%
+ \addcontentsline{toc}{#1}{%
+ \@ifnum{#2>\c@secnumdepth}{%
+ \protect\numberline{}%
+ }{%
+ \protect\numberline{\csname the#1\endcsname}%
+ }%
+ #8}%
+ }%
+ }%
+ \@xsect{#5}%
+}%
+\def\@hang@from#1#2#3{\@hangfrom{#1#2}#3}%
+\def\@runin@to #1#2#3{#1#2#3}%
+\def\@ssect@ltx#1#2#3#4#5#6[#7]#8{%
+ \def\H@svsec{\phantomsection}%
+ \@tempskipa #5\relax
+ \@ifdim{\@tempskipa>\z@}{%
+ \begingroup
+ \interlinepenalty \@M
+ #6{%
+ \@ifundefined{@hangfroms@#1}{\@hang@froms}{\csname @hangfroms@#1\endcsname}%
+ {\hskip#3\relax\H@svsec}{#8}%
+ }%
+ \@@par
+ \endgroup
+ \@ifundefined{#1smark}{\@gobble}{\csname #1smark\endcsname}{#7}%
+ \addcontentsline{toc}{#1}{\protect\numberline{}#8}%
+ }{%
+ \def\@svsechd{%
+ #6{%
+ \@ifundefined{@runin@tos@#1}{\@runin@tos}{\csname @runin@tos@#1\endcsname}%
+ {\hskip#3\relax\H@svsec}{#8}%
+ }%
+ \@ifundefined{#1smark}{\@gobble}{\csname #1smark\endcsname}{#7}%
+ \addcontentsline{toc}{#1}{\protect\numberline{}#8}%
+ }%
+ }%
+ \@xsect{#5}%
+}%
+\def\@hang@froms#1#2{#1#2}%
+\def\@runin@tos #1#2{#1#2}%
+\def\init@hyperref{%
+ \providecommand\phantomsection{}%
+ \providecommand\hyper@makecurrent[1]{}%
+ \providecommand\Hy@raisedlink[1]{}%
+ \providecommand\hyper@anchorstart[1]{}%
+ \providecommand\hyper@anchorend{}%
+ \providecommand\hyper@linkstart[2]{}%
+ \providecommand\hyper@linkend{}%
+ \providecommand\@currentHref{}%
+}%
+\let\H@refstepcounter\refstepcounter
+\appdef\document@inithook{%
+ \init@hyperref
+}%
+\def\sec@upcase#1{\relax{#1}}%
+\appdef\document@inithook{%
+ \@ifpackageloaded{array}{\switch@array}{\switch@tabular}%
+ \prepdef\endtabular{\endtabular@hook}%
+ \@provide\endtabular@hook{}%
+ \prepdef\endarray{\endarray@hook}%
+ \@provide\endarray@hook{}%
+ \providecommand\array@hook{}%
+ \prepdef\@tabular{\tabular@hook}%
+ \@provide\tabular@hook{}%
+}%
+\def\switch@tabular{%
+ \let\@array@sw\@array@sw@array
+ \@ifx{\@array\@array@LaTeX}{%
+ \@ifx{\multicolumn\multicolumn@LaTeX}{%
+ \@ifx{\@tabular\@tabular@LaTeX}{%
+ \@ifx{\@tabarray\@tabarray@LaTeX}{%
+ \@ifx{\array\array@LaTeX}{%
+ \@ifx{\endarray\endarray@LaTeX}{%
+ \@ifx{\endtabular\endtabular@LaTeX}{%
+ \@ifx{\@mkpream\@mkpream@LaTeX}{%
+ \@ifx{\@addamp\@addamp@LaTeX}{%
+ \@ifx{\@arrayacol\@arrayacol@LaTeX}{%
+ \@ifx{\@tabacol\@tabacol@LaTeX}{%
+ \@ifx{\@arrayclassz\@arrayclassz@LaTeX}{%
+ \@ifx{\@tabclassiv\@tabclassiv@LaTeX}{%
+ \@ifx{\@arrayclassiv\@arrayclassiv@LaTeX}{%
+ \@ifx{\@tabclassz\@tabclassz@LaTeX}{%
+ \@ifx{\@classv\@classv@LaTeX}{%
+ \@ifx{\hline\hline@LaTeX}{%
+ \@ifx{\@tabularcr\@tabularcr@LaTeX}{%
+ \@ifx{\@xtabularcr\@xtabularcr@LaTeX}{%
+ \@ifx{\@xargarraycr\@xargarraycr@LaTeX}{%
+ \@ifx{\@yargarraycr\@yargarraycr@LaTeX}{%
+ \true@sw
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ {%
+ \class@info{Patching LaTeX tabular.}%
+ }{%
+ \class@info{Unrecognized LaTeX tabular. Please update this document class! (Proceeding with fingers crossed.)}%
+ }%
+ \let\@array\@array@ltx
+ \let\multicolumn\multicolumn@ltx
+ \let\@tabular\@tabular@ltx
+ \let\@tabarray\@tabarray@ltx
+ \let\array\array@ltx
+ \let\endarray\endarray@ltx
+ \let\endtabular\endtabular@ltx
+ \let\@mkpream\@mkpream@ltx
+ \let\@addamp\@addamp@ltx
+ \let\@arrayacol\@arrayacol@ltx
+ \let\@tabacol\@tabacol@ltx
+ \let\@arrayclassz\@arrayclassz@ltx
+ \let\@tabclassiv\@tabclassiv@ltx
+ \let\@arrayclassiv\@arrayclassiv@ltx
+ \let\@tabclassz\@tabclassz@ltx
+ \let\@classv\@classv@ltx
+ \let\hline\hline@ltx
+ \let\@tabularcr\@tabularcr@ltx
+ \let\@xtabularcr\@xtabularcr@ltx
+ \let\@xargarraycr\@xargarraycr@ltx
+ \let\@yargarraycr\@yargarraycr@ltx
+}%
+\def\switch@array{%
+ \@ifpackageloaded{colortbl}{\let\switch@array@info\colortbl@message}{\let\switch@array@info\array@message}%
+ \let\@array@sw\@array@sw@LaTeX
+ \@ifx{\@array\@array@array}{%
+ \@ifx{\@tabular\@tabular@array}{%
+ \@ifx{\@tabarray\@tabarray@array}{%
+ \@ifx{\array\array@array}{%
+ \@ifx{\endarray\endarray@array}{%
+ \@ifx{\endtabular\endtabular@array}{%
+ \@ifx{\@mkpream\@mkpream@array}{%
+ \@ifx{\@classx\@classx@array}{%
+ \@ifx{\insert@column\insert@column@array}{%
+ \@ifx{\@arraycr\@arraycr@array}{%
+ \@ifx{\@xarraycr\@xarraycr@array}{%
+ \@ifx{\@xargarraycr\@xargarraycr@array}{%
+ \@ifx{\@yargarraycr\@yargarraycr@array}{%
+ \true@sw
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }{%
+ \class@info{Patching array package.}%
+ }{%
+ \switch@array@info
+ }%
+ \let\@array \@array@array@new
+ \let\@@array \@array % Cosi fan tutti
+ \let\@tabular \@tabular@array@new
+ \let\@tabarray \@tabarray@array@new
+ \let\array \array@array@new
+ \let\endarray \endarray@array@new
+ \let\endtabular\endtabular@array@new
+ \let\@mkpream \@mkpream@array@new
+ \let\@classx \@classx@array@new
+ \let\@arrayacol\@arrayacol@ltx
+ \let\@tabacol \@tabacol@ltx
+ \let\insert@column\insert@column@array@new
+ \expandafter\let\csname endtabular*\endcsname\endtabular % Cosi fan tutti
+ \let\@arraycr \@arraycr@new
+ \let\@xarraycr \@xarraycr@new
+ \let\@xargarraycr\@xargarraycr@new
+ \let\@yargarraycr\@yargarraycr@new
+}%
+\def\array@message{%
+ \class@info{Unrecognized array package. Please update this document class! (Proceeding with fingers crossed.)}%
+}%
+\def\colortbl@message{%
+ \class@info{colortbl package is loaded. (Proceeding with fingers crossed.)}%
+}%
+\def\@array@sw@LaTeX{\@ifx{\\\@tabularcr}}%
+\def\@array@sw@array{\@ifx{\d@llarbegin\begingroup}}%
+\def\@tabular@LaTeX{%
+ \leavevmode
+ \hbox\bgroup$%
+ \let\@acol\@tabacol
+ \let\@classz\@tabclassz
+ \let\@classiv\@tabclassiv
+ \let\\\@tabularcr
+ \@tabarray
+}%
+\def\@tabular@ltx{%
+ \let\@acoll\@tabacoll
+ \let\@acolr\@tabacolr
+ \let\@acol\@tabacol
+ \let\@classz\@tabclassz
+ \let\@classiv\@tabclassiv
+ \let\\\@tabularcr
+ \@tabarray
+}%
+\def\@tabular@array{%
+ \leavevmode
+ \hbox\bgroup$%
+ \col@sep\tabcolsep
+ \let\d@llarbegin\begingroup
+ \let\d@llarend\endgroup
+ \@tabarray
+}%
+\def\@tabular@array@new{%
+ \let\@acoll\@tabacoll
+ \let\@acolr\@tabacolr
+ \let\@acol\@tabacol
+ \let\d@llarbegin\begingroup
+ \let\d@llarend\endgroup
+ \@tabarray
+}%
+\def\@tabarray@LaTeX{%
+ \m@th\@ifnextchar[\@array{\@array[c]}%
+}%
+\def\@tabarray@ltx{%
+ \m@th\@ifnextchar[\@array{\expandafter\@array\expandafter[\array@default]}%
+}%
+\def\@tabarray@array{%
+ \@ifnextchar[{\@@array}{\@@array[c]}%
+}%
+\def\@tabarray@array@new{%
+ \@ifnextchar[{\@@array}{\expandafter\@@array\expandafter[\array@default]}%
+}%
+\newcount\intertabularlinepenalty
+\intertabularlinepenalty=100
+\newcount\@tbpen
+\appdef\samepage{\intertabularlinepenalty\@M}%
+\def\@tabularcr@LaTeX{{\ifnum 0=`}\fi \@ifstar \@xtabularcr \@xtabularcr}%
+\def\@tabularcr@ltx{{\ifnum 0=`}\fi \@ifstar {\global \@tbpen \@M \@xtabularcr }{\global \@tbpen \intertabularlinepenalty \@xtabularcr }}%
+\def\@xtabularcr@LaTeX{\@ifnextchar [\@argtabularcr {\ifnum 0=`{\fi }\cr }}%
+\def\@xtabularcr@ltx{\@ifnextchar [\@argtabularcr {\ifnum 0=`{\fi }\cr \noalign {\penalty \@tbpen }}}%
+\def\@xargarraycr@LaTeX#1{\@tempdima #1\advance \@tempdima \dp \@arstrutbox \vrule \@height \z@ \@depth \@tempdima \@width \z@ \cr}%
+\def\@xargarraycr@ltx#1{\@tempdima #1\advance \@tempdima \dp \@arstrutbox \vrule \@height \z@ \@depth \@tempdima \@width \z@ \cr \noalign {\penalty \@tbpen }}%
+\def\@yargarraycr@LaTeX#1{\cr \noalign {\vskip #1}}%
+\def\@yargarraycr@ltx#1{\cr \noalign {\penalty \@tbpen \vskip #1}}%
+\def\@arraycr@array{%
+ \relax
+ \iffalse{\fi\ifnum 0=`}\fi
+ \@ifstar \@xarraycr \@xarraycr
+}%
+\def\@arraycr@new{%
+ \relax
+ \iffalse{\fi\ifnum 0=`}\fi
+ \@ifstar {\global \@tbpen \@M \@xarraycr }{\global \@tbpen \intertabularlinepenalty \@xarraycr }%
+}%
+\def\@xarraycr@array{%
+ \@ifnextchar [%]
+ \@argarraycr {\ifnum 0=`{}\fi\cr}%
+}%
+\def\@xarraycr@new{%
+ \@ifnextchar [%]
+ \@argarraycr {\ifnum 0=`{}\fi\cr \noalign {\penalty \@tbpen }}%
+}%
+\def\@xargarraycr@array#1{%
+ \unskip
+ \@tempdima #1\advance\@tempdima \dp\@arstrutbox
+ \vrule \@depth\@tempdima \@width\z@
+ \cr
+}%
+\def\@xargarraycr@new#1{%
+ \unskip
+ \@tempdima #1\advance\@tempdima \dp\@arstrutbox
+ \vrule \@depth\@tempdima \@width\z@
+ \cr
+ \noalign {\penalty \@tbpen }%
+}%
+\def\@yargarraycr@array#1{%
+ \cr
+ \noalign{\vskip #1}%
+}%
+\def\@yargarraycr@new#1{%
+ \cr
+ \noalign{\penalty \@tbpen \vskip #1}%
+}%
+\def\array@LaTeX{%
+ \let\@acol\@arrayacol
+ \let\@classz\@arrayclassz
+ \let\@classiv\@arrayclassiv
+ \let\\\@arraycr
+ \let\@halignto\@empty
+ \@tabarray
+}%
+\def\array@ltx{%
+ \@ifmmode{}{\@badmath$}%
+ \let\@acoll\@arrayacol
+ \let\@acolr\@arrayacol
+ \let\@acol\@arrayacol
+ \let\@classz\@arrayclassz
+ \let\@classiv\@arrayclassiv
+ \let\\\@arraycr
+ \let\@halignto\@empty
+ \@tabarray
+}%
+\def\array@array{%
+ \col@sep\arraycolsep
+ \def\d@llarbegin{$}\let\d@llarend\d@llarbegin\gdef\@halignto{}%
+ \@tabarray
+}
+\def\array@array@new{%
+ \@ifmmode{}{\@badmath$}%
+ \let\@acoll\@arrayacol
+ \let\@acolr\@arrayacol
+ \let\@acol\@arrayacol
+ \def\d@llarbegin{$}%
+ \let\d@llarend\d@llarbegin
+ \gdef\@halignto{}%
+ \@tabarray
+}%
+\def\@array@LaTeX[#1]#2{%
+ \if #1t\vtop \else \if#1b\vbox \else \vcenter \fi\fi
+ \bgroup
+ \setbox\@arstrutbox\hbox{%
+ \vrule \@height\arraystretch\ht\strutbox
+ \@depth\arraystretch \dp\strutbox
+ \@width\z@}%
+ \@mkpream{#2}%
+ \edef\@preamble{%
+ \ialign \noexpand\@halignto
+ \bgroup \@arstrut \@preamble \tabskip\z@skip \cr}%
+ \let\@startpbox\@@startpbox \let\@endpbox\@@endpbox
+ \let\tabularnewline\\%
+ \let\par\@empty
+ \let\@sharp##%
+ \set@typeset@protect
+ \lineskip\z@skip\baselineskip\z@skip
+ \ifhmode \@preamerr\z@ \@@par\fi
+ \@preamble
+}%
+\def\@array@ltx[#1]#2{%
+ \@nameuse{@array@align@#1}%
+ \set@arstrutbox
+ \@mkpream{#2}%
+ \prepdef\@preamble{%
+ \tabskip\tabmid@skip
+ \@arstrut
+ }%
+ \appdef\@preamble{%
+ \tabskip\tabright@skip
+ \cr
+ \array@row@pre
+ }%
+ \let\tabularnewline\\%
+ \let\par\@empty
+ \let\@sharp##%
+ \set@typeset@protect
+ \lineskip\z@skip\baselineskip\z@skip
+ \tabskip\tableft@skip\relax
+ \ifhmode \@preamerr\z@ \@@par\fi
+ \everycr{}%
+ \expandafter\halign\expandafter\@halignto\expandafter\bgroup\@preamble
+}%
+\def\set@arstrutbox{%
+ \setbox\@arstrutbox\hbox{%
+ \vrule \@height\arraystretch\ht\strutbox
+ \@depth\arraystretch \dp\strutbox
+ \@width\z@
+ }%
+}%
+\def\@array@array[#1]#2{%
+ \@tempdima \ht \strutbox
+ \advance \@tempdima by\extrarowheight
+ \setbox \@arstrutbox \hbox{\vrule
+ \@height \arraystretch \@tempdima
+ \@depth \arraystretch \dp \strutbox
+ \@width \z@}%
+ \begingroup
+ \@mkpream{#2}%
+ \xdef\@preamble{\noexpand \ialign \@halignto
+ \bgroup \@arstrut \@preamble
+ \tabskip \z@ \cr}%
+ \endgroup
+ \@arrayleft
+ \if #1t\vtop \else \if#1b\vbox \else \vcenter \fi \fi
+ \bgroup
+ \let \@sharp ##\let \protect \relax
+ \lineskip \z@
+ \baselineskip \z@
+ \m@th
+ \let\\\@arraycr \let\tabularnewline\\\let\par\@empty \@preamble
+}%
+\def\@array@array@new[#1]#2{%
+ \@tempdima\ht\strutbox
+ \advance\@tempdima by\extrarowheight
+ \setbox\@arstrutbox\hbox{%
+ \vrule \@height\arraystretch\@tempdima
+ \@depth \arraystretch\dp\strutbox
+ \@width \z@
+ }%
+ \begingroup
+ \@mkpream{#2}%
+ \xdef\@preamble{\@preamble}%
+ \endgroup
+ \prepdef\@preamble{%
+ \tabskip\tabmid@skip
+ \@arstrut
+ }%
+ \appdef\@preamble{%
+ \tabskip\tabright@skip
+ \cr
+ \array@row@pre
+ }%
+ \@arrayleft
+ \@nameuse{@array@align@#1}%
+ \m@th
+ \let\\\@arraycr
+ \let\tabularnewline\\%
+ \let\par\@empty
+ \let\@sharp##%
+ \set@typeset@protect
+ \lineskip\z@\baselineskip\z@
+ \tabskip\tableft@skip
+ \everycr{}%
+ \expandafter\halign\expandafter\@halignto\expandafter\bgroup\@preamble
+}%
+\def\endarray@LaTeX{%
+ \crcr\egroup\egroup
+}%
+\def\endarray@ltx{%
+ \crcr\array@row@pst\egroup\egroup
+}%
+\def\endarray@array{%
+ \crcr \egroup \egroup \@arrayright \gdef\@preamble{}%
+}%
+\def\endarray@array@new{%
+ \crcr\array@row@pst\egroup\egroup % Same as \endarray@ltx
+ \@arrayright
+ \global\let\@preamble\@empty
+}%
+\def\endtabular@LaTeX{%
+ \crcr\egroup\egroup $\egroup
+}%
+\def\endtabular@ltx{%
+ \endarray
+}%
+\def\endtabular@array{%
+ \endarray $\egroup
+}%
+\def\endtabular@array@new{%
+ \endarray
+}%
+\@namedef{endtabular*}{\endtabular}%
+\long\def\multicolumn@LaTeX#1#2#3{%
+ \multispan{#1}\begingroup
+ \@mkpream{#2}%
+ \def\@sharp{#3}\set@typeset@protect
+ \let\@startpbox\@@startpbox\let\@endpbox\@@endpbox
+ \@arstrut \@preamble\hbox{}\endgroup\ignorespaces
+}%
+\long\def\multicolumn@ltx#1#2#3{%
+ \multispan{#1}%
+ \begingroup
+ \@mkpream{#2}%
+ \def\@sharp{#3}%
+ \set@typeset@protect
+ %\let\@startpbox\@@startpbox\let\@endpbox\@@endpbox
+ \@arstrut
+ \@preamble
+ \hbox{}%
+ \endgroup
+ \ignorespaces
+}%
+\def\@array@align@t{\leavevmode\vtop\bgroup}%
+\def\@array@align@b{\leavevmode\vbox\bgroup}%
+\def\@array@align@c{\leavevmode\@ifmmode{\vcenter\bgroup}{$\vcenter\bgroup\aftergroup$\aftergroup\relax}}%
+\def\@array@align@v{%
+ \@ifmmode{%
+ \@badmath
+ \vcenter\bgroup
+ }{%
+ \@ifinner{%
+ $\vcenter\bgroup\aftergroup$
+ }{%
+ \@@par\bgroup
+ }%
+ }%
+}%
+\def\array@default{c}%
+\def\array@row@rst{%
+ \let\@array@align@v\@array@align@c
+}%
+\def\array@row@pre{}%
+\def\array@row@pst{}%
+\newcommand\toprule{\tab@rule{\column@font}{\column@fil}{\frstrut}}%
+\newcommand\colrule{\unskip\lrstrut\\\tab@rule{\body@font}{}{\frstrut}}%
+\newcommand\botrule{\unskip\lrstrut\\\noalign{\hline@rule}{}}%
+\def\hline@LaTeX{%
+ \noalign{\ifnum0=`}\fi\hrule \@height \arrayrulewidth \futurelet
+ \reserved@a\@xhline
+}%
+\def\hline@ltx{%
+ \noalign{%
+ \ifnum0=`}\fi
+ \hline@rule
+ \futurelet\reserved@a\@xhline
+ % \noalign ended in \@xhline
+}%
+\def\@xhline@unneeded{%
+ \say\reserved@a
+ \ifx\reserved@a\hline
+ \vskip\doublerulesep
+ \vskip-\arrayrulewidth
+ \fi
+ \ifnum0=`{\fi}%
+}%
+\def\tab@rule#1#2#3{%
+ \crcr
+ \noalign{%
+ \hline@rule
+ \gdef\@arstrut@hook{%
+ \global\let\@arstrut@hook\@empty
+ #3%
+ }%
+ \gdef\cell@font{#1}%
+ \gdef\cell@fil{#2}%
+ }%
+}%
+\def\column@font{}%
+\def\column@fil{}%
+\def\body@font{}%
+\def\cell@font{}%
+\def\frstrut{}%
+\def\lrstrut{}%
+\def\@arstrut@hline{%
+ \relax
+ \@ifmmode{\copy}{\unhcopy}\@arstrutbox@hline
+ \@arstrut@hook
+}%
+\let\@arstrut@org\@arstrut
+\def\@arstrut@hook{%
+ \global\let\@arstrut\@arstrut@org
+}%
+\newbox\@arstrutbox@hline
+\appdef\set@arstrutbox{%
+ \setbox\@arstrutbox@hline\hbox{%
+ \setbox\z@\hbox{$0^{0}_{}$}%
+ \dimen@\ht\z@\advance\dimen@\@arstrut@hline@clnc
+ \@ifdim{\dimen@<\arraystretch\ht\strutbox}{\dimen@=\arraystretch\ht\strutbox}{}%
+ \vrule \@height\dimen@
+ \@depth\arraystretch \dp\strutbox
+ \@width\z@
+ }%
+}%
+\def\hline@rule{%
+ \hrule \@height \arrayrulewidth
+ \global\let\@arstrut\@arstrut@hline
+}%
+\def\@arstrut@hline@clnc{2\p@}% % Klootch: magic number
+\def\tableft@skip{\z@skip}%
+\def\tabmid@skip{\z@skip}%\@flushglue
+\def\tabright@skip{\z@skip}%
+\def\tableftsep{\tabcolsep}%
+\def\tabmidsep{\tabcolsep}%
+\def\tabrightsep{\tabcolsep}%
+\def\cell@fil{}%
+\def\pbox@hook{}%
+\appdef\@arstrut{\@arstrut@hook}%
+\let\@arstrut@hook\@empty
+\def\@addtopreamble{\appdef\@preamble}%
+\def\@mkpream@LaTeX#1{%
+ \@firstamptrue\@lastchclass6
+ \let\@preamble\@empty
+ \let\protect\@unexpandable@protect
+ \let\@sharp\relax
+ \let\@startpbox\relax\let\@endpbox\relax
+ \@expast{#1}%
+ \expandafter\@tfor \expandafter
+ \@nextchar \expandafter:\expandafter=\reserved@a\do
+ {\@testpach\@nextchar
+ \ifcase \@chclass \@classz \or \@classi \or \@classii \or \@classiii
+ \or \@classiv \or\@classv \fi\@lastchclass\@chclass}%
+ \ifcase \@lastchclass \@acol
+ \or \or \@preamerr \@ne\or \@preamerr \tw@\or \or \@acol \fi
+}%
+\def\@mkpream@ltx#1{%
+ \@firstamptrue
+ \@lastchclass6
+ \let\@preamble\@empty
+ \let\protect\@unexpandable@protect
+ \let\@sharp\relax
+ \@expast{#1}%
+ \expandafter\@tfor\expandafter\@nextchar\expandafter:\expandafter=\reserved@a
+ \do{%
+ \expandafter\@testpach\expandafter{\@nextchar}%
+ \ifcase\@chclass
+ \@classz
+ \or
+ \@classi
+ \or
+ \@classii
+ \or
+ \@classiii
+ \or
+ \@classiv
+ \or
+ \@classv
+ \fi
+ \@lastchclass\@chclass
+ }%
+ \ifcase\@lastchclass
+ \@acolr % right-hand column
+ \or
+ \or
+ \@preamerr\@ne
+ \or
+ \@preamerr\tw@
+ \or
+ \or
+ \@acolr % right-hand column
+ \fi
+}%
+\def\insert@column@array{%
+ \the@toks \the \@tempcnta
+ \ignorespaces \@sharp \unskip
+ \the@toks \the \count@ \relax
+}%
+\def\insert@column@array@new{%
+ \the@toks\the\@tempcnta
+ \array@row@rst\cell@font
+ \ignorespaces\@sharp\unskip
+ \the@toks\the\count@
+ \relax
+}%
+\def\@mkpream@relax{%
+ \let\tableftsep \relax
+ \let\tabmidsep \relax
+ \let\tabrightsep \relax
+ \let\array@row@rst\relax
+ \let\cell@font \relax
+ \let\@startpbox \relax
+}%
+\def\@mkpream@array#1{%
+ \gdef\@preamble{}\@lastchclass 4 \@firstamptrue
+ \let\@sharp\relax \let\@startpbox\relax \let\@endpbox\relax
+ \@temptokena{#1}\@tempswatrue
+ \@whilesw\if@tempswa\fi{\@tempswafalse\the\NC@list}%
+ \count@\m@ne
+ \let\the@toks\relax
+ \prepnext@tok
+ \expandafter \@tfor \expandafter \@nextchar
+ \expandafter :\expandafter =\the\@temptokena \do
+ {\@testpach
+ \ifcase \@chclass \@classz \or \@classi \or \@classii
+ \or \save@decl \or \or \@classv \or \@classvi
+ \or \@classvii \or \@classviii
+ \or \@classx
+ \or \@classx \fi
+ \@lastchclass\@chclass}%
+ \ifcase\@lastchclass
+ \@acol \or
+ \or
+ \@acol \or
+ \@preamerr \thr@@ \or
+ \@preamerr \tw@ \@addtopreamble\@sharp \or
+ \or
+ \else \@preamerr \@ne \fi
+ \def\the@toks{\the\toks}%
+}%
+\def\@mkpream@array@new#1{%
+ \gdef\@preamble{}%
+ \@lastchclass\f@ur
+ \@firstamptrue
+ \let\@sharp\relax
+ \@mkpream@relax
+ \@temptokena{#1}\@tempswatrue
+ \@whilesw\if@tempswa\fi{\@tempswafalse\the\NC@list}%
+ \count@\m@ne
+ \let\the@toks\relax
+ \prepnext@tok
+ \expandafter\@tfor\expandafter\@nextchar\expandafter:\expandafter=\the\@temptokena
+ \do{%
+ \@testpach
+ \ifcase\@chclass
+ \@classz
+ \or
+ \@classi
+ \or
+ \@classii
+ \or
+ \save@decl
+ \or
+ \or
+ \@classv
+ \or
+ \@classvi
+ \or
+ \@classvii
+ \or
+ \@classviii
+ \or
+ \@classx
+ \or
+ \@classx
+ \fi
+ \@lastchclass\@chclass
+ }%
+ \ifcase\@lastchclass
+ \@acolr % right-hand column
+ \or
+ \or
+ \@acolr % right-hand column
+ \or
+ \@preamerr\thr@@
+ \or
+ \@preamerr\tw@\@addtopreamble\@sharp
+ \or
+ \or
+ \else
+ \@preamerr\@ne
+ \fi
+ \def\the@toks{\the\toks}%
+}%
+\appdef\@mkpream@relax{%
+ \let\CT@setup \relax
+ \let\CT@color \relax
+ \let\CT@do@color \relax
+ \let\color \relax
+ \let\CT@column@color\relax
+ \let\CT@row@color \relax
+ \let\CT@cell@color \relax
+}%
+\def\@addamp@LaTeX{%
+ \if@firstamp\@firstampfalse\else\edef\@preamble{\@preamble &}\fi
+}%
+\def\@addamp@ltx{%
+ \if@firstamp\@firstampfalse\else\@addtopreamble{&}\fi
+}%
+\def\@arrayacol@LaTeX{%
+ \edef\@preamble{\@preamble \hskip \arraycolsep}%
+}%
+\def\@arrayacol@ltx{%
+ \@addtopreamble{\hskip\arraycolsep}%
+}%
+\def\@tabacoll{%
+ \@addtopreamble{\hskip\tableftsep\relax}%
+}%
+\def\@tabacol@LaTeX{%
+ \edef\@preamble{\@preamble \hskip \tabcolsep}%
+}%
+\def\@tabacol@ltx{%
+ \@addtopreamble{\hskip\tabmidsep\relax}%
+}%
+\def\@tabacolr{%
+ \@addtopreamble{\hskip\tabrightsep\relax}%
+}%
+\def\@arrayclassz@LaTeX{%
+ \ifcase \@lastchclass \@acolampacol \or \@ampacol \or
+ \or \or \@addamp \or
+ \@acolampacol \or \@firstampfalse \@acol \fi
+ \edef\@preamble{\@preamble
+ \ifcase \@chnum
+ \hfil$\relax\@sharp$\hfil \or $\relax\@sharp$\hfil
+ \or \hfil$\relax\@sharp$\fi}%
+}%
+\def\@arrayclassz@ltx{%
+ \ifcase\@lastchclass
+ \@acolampacol
+ \or
+ \@ampacol
+ \or
+ \or
+ \or
+ \@addamp
+ \or
+ \@acolampacol
+ \or
+ \@firstampfalse\@acoll
+ \fi
+ \ifcase\@chnum
+ \@addtopreamble{%
+ \hfil\array@row@rst$\relax\@sharp$\hfil
+ }%
+ \or
+ \@addtopreamble{%
+ \array@row@rst$\relax\@sharp$\hfil
+ }%
+ \or
+ \@addtopreamble{%
+ \hfil\array@row@rst$\relax\@sharp$%
+ }%
+ \fi
+}%
+\def\@tabclassz@LaTeX{%
+ \ifcase\@lastchclass
+ \@acolampacol
+ \or
+ \@ampacol
+ \or
+ \or
+ \or
+ \@addamp
+ \or
+ \@acolampacol
+ \or
+ \@firstampfalse\@acol
+ \fi
+ \edef\@preamble{%
+ \@preamble{%
+ \ifcase\@chnum
+ \hfil\ignorespaces\@sharp\unskip\hfil
+ \or
+ \hskip1sp\ignorespaces\@sharp\unskip\hfil
+ \or
+ \hfil\hskip1sp\ignorespaces\@sharp\unskip
+ \fi}}%
+}%
+\def\@tabclassz@ltx{%
+ \ifcase\@lastchclass
+ \@acolampacol
+ \or
+ \@ampacol
+ \or
+ \or
+ \or
+ \@addamp
+ \or
+ \@acolampacol
+ \or
+ \@firstampfalse\@acoll
+ \fi
+ \ifcase\@chnum
+ \@addtopreamble{%
+ {\hfil\array@row@rst\cell@font\ignorespaces\@sharp\unskip\hfil}%
+ }%
+ \or
+ \@addtopreamble{%
+ {\cell@fil\hskip1sp\array@row@rst\cell@font\ignorespaces\@sharp\unskip\hfil}%
+ }%
+ \or
+ \@addtopreamble{%
+ {\hfil\hskip1sp\array@row@rst\cell@font\ignorespaces\@sharp\unskip\cell@fil}%
+ }%
+ \fi
+}%
+\def\@tabclassiv@LaTeX{%
+ \@addtopreamble\@nextchar
+}%
+\def\@tabclassiv@ltx{%
+ \expandafter\@addtopreamble\expandafter{\@nextchar}%
+}%
+\def\@arrayclassiv@LaTeX{%
+ \@addtopreamble{$\@nextchar$}%
+}%
+\def\@arrayclassiv@ltx{%
+ \expandafter\@addtopreamble\expandafter{\expandafter$\@nextchar$}%
+}%
+\def\@classv@LaTeX{%
+ \@addtopreamble{\@startpbox{\@nextchar}\ignorespaces
+ \@sharp\@endpbox}%
+}%
+\def\@classv@ltx{%
+ \expandafter\@addtopreamble
+ \expandafter{%
+ \expandafter \@startpbox
+ \expandafter {\@nextchar}%
+ \pbox@hook\array@row@rst\cell@font\ignorespaces\@sharp\@endpbox
+ }%
+}%
+\def\@classx@array{%
+ \ifcase \@lastchclass
+ \@acolampacol \or
+ \@addamp \@acol \or
+ \@acolampacol \or
+ \or
+ \@acol \@firstampfalse \or
+ \@addamp
+ \fi
+}%
+\def\@classx@array@new{%
+ \ifcase \@lastchclass
+ \@acolampacol
+ \or
+ \@addamp \@acol
+ \or
+ \@acolampacol
+ \or
+ \or
+ \@firstampfalse\@acoll
+ \or
+ \@addamp
+ \fi
+}%
+\def\@xbitor@LaTeX #1{\@tempcntb \count#1
+ \ifnum \@tempcnta =\z@
+ \else
+ \divide\@tempcntb\@tempcnta
+ \ifodd\@tempcntb \@testtrue\fi
+ \fi}%
+\def\@xbitor@ltx#1{%
+ \@tempcntb\count#1\relax
+ \@ifnum{\@tempcnta=\z@}{}{%
+ \divide\@tempcntb\@tempcnta
+ \@ifodd\@tempcntb{\@testtrue}{}%
+ }%
+}%
+\@ifx{\@xbitor\@xbitor@LaTeX}{%
+ \class@info{Repairing broken LaTeX \string\@xbitor}%
+}{%
+ \class@info{Unrecognized LaTeX \string\@xbitor. Please update this document class! (Proceeding with fingers crossed.)}%
+}%
+\let\@xbitor\@xbitor@ltx
+\newcommand*\@gobble@opt@one[2][]{}%
+\def\@starttoc#1{%
+ \begingroup
+ \toc@pre
+ \makeatletter
+ \@input{\jobname.#1}%
+ \if@filesw
+ \expandafter\newwrite\csname tf@#1\endcsname
+ \immediate\openout \csname tf@#1\endcsname \jobname.#1\relax
+ \fi
+ \@nobreakfalse
+ \toc@post
+ \endgroup
+}%
+\def\toc@pre{}%
+\def\toc@post{}%
+\def\toc@@font{}%
+\def\ltxu@dotsep{\z@}%
+\let\tocdim@section \leftmargini
+\let\tocdim@subsection \leftmarginii
+\let\tocdim@subsubsection \leftmarginiii
+\let\tocdim@paragraph \leftmarginiv
+\let\tocdim@appendix \leftmarginv
+\let\tocdim@pagenum \leftmarginvi
+\def\toc@pre@auto{%
+ \toc@@font
+ \@tempdima\z@
+ \toc@setindent\@tempdima{section}%
+ \toc@setindent\@tempdima{subsection}%
+ \toc@setindent\@tempdima{subsubsection}%
+ \toc@setindent\@tempdima{paragraph}%
+ \toc@letdimen{appendix}%
+ \toc@letdimen{pagenum}%
+}%
+\def\toc@post@auto{%
+ \if@filesw
+ \begingroup
+ \toc@writedimen{section}%
+ \toc@writedimen{subsection}%
+ \toc@writedimen{subsubsection}%
+ \toc@writedimen{paragraph}%
+ \toc@writedimen{appendix}%
+ \toc@writedimen{pagenum}%
+ \endgroup
+ \fi
+}%
+\def\toc@setindent#1#2{%
+ \csname tocdim@#2\endcsname\tocdim@min\relax
+ \@ifundefined{tocmax@#2}{\@namedef{tocmax@#2}{\z@}}{}%
+ \advance#1\@nameuse{tocmax@#2}\relax
+ \expandafter\edef\csname tocleft@#2\endcsname{\the#1}%
+}%
+\def\toc@letdimen#1{%
+ \csname tocdim@#1\endcsname\tocdim@min\relax
+ \@ifundefined{tocmax@#1}{\@namedef{tocmax@#1}{\z@}}{}%
+ \expandafter\let\csname tocleft@#1\expandafter\endcsname\csname tocmax@#1\endcsname
+}%
+\def\toc@writedimen#1{%
+ \immediate\write\@auxout{%
+ \gdef\expandafter\string\csname tocmax@#1\endcsname{%
+ \expandafter\the\csname tocdim@#1\endcsname
+ }%
+ }%
+}%
+\def\l@@sections#1#2#3#4{%
+ \begingroup
+ \everypar{}%
+ \set@tocdim@pagenum\@tempboxa{#4}%
+ \global\@tempdima\csname tocdim@#2\endcsname
+ \leftskip\csname tocleft@#2\endcsname\relax
+ \dimen@\csname tocleft@#1\endcsname\relax
+ \parindent-\leftskip\advance\parindent\dimen@
+ \rightskip\tocleft@pagenum plus 1fil\relax
+ \skip@\parfillskip\parfillskip\z@
+ \let\numberline\numberline@@sections
+ \@nameuse{l@f@#2}%
+ \ignorespaces#3\unskip\nobreak\hskip\skip@
+ \hb@xt@\rightskip{\hfil\unhbox\@tempboxa}\hskip-\rightskip\hskip\z@skip
+ \expandafter\par
+ \expandafter\aftergroup\csname tocdim@#2%
+ \expandafter\endcsname
+ \expandafter\endgroup
+ \the\@tempdima\relax
+}%
+\def\set@tocdim@pagenum#1#2{%
+ \setbox#1\hbox{\ignorespaces#2}%
+ \@ifdim{\tocdim@pagenum<\wd#1}{\global\tocdim@pagenum\wd#1}{}%
+}%
+\def\numberline@@sections#1{%
+ \leavevmode\hb@xt@-\parindent{%
+ \hfil
+ \@if@empty{#1}{}{%
+ \setbox\z@\hbox{#1.\kern\ltxu@dotsep}%
+ \@ifdim{\@tempdima<\wd\z@}{\global\@tempdima\wd\z@}{}%
+ \unhbox\z@
+ }%
+ }%
+ \ignorespaces
+}%
+\def\tocdim@min{\z@}%
+\def\list#1#2{%
+ \ifnum \@listdepth >5\relax
+ \@toodeep
+ \else
+ \global\advance\@listdepth\@ne
+ \fi
+ \rightmargin\z@
+ \listparindent\z@
+ \itemindent\z@
+ \csname @list\romannumeral\the\@listdepth\endcsname
+ \def\@itemlabel{#1}%
+ \let\makelabel\@mklab
+ \@nmbrlistfalse
+ #2\relax
+ \@trivlist
+ \parskip\parsep
+ \set@listindent
+ \ignorespaces
+}%
+\def\set@listindent@parshape{%
+ \parindent\listparindent
+ \advance\@totalleftmargin\leftmargin
+ \advance\linewidth-\rightmargin
+ \advance\linewidth-\leftmargin
+ \parshape\@ne\@totalleftmargin\linewidth
+}%
+\def\set@listindent@{%
+ \parindent\listparindent
+ \advance\@totalleftmargin\leftmargin
+ \advance\rightskip\rightmargin
+ \advance\leftskip\@totalleftmargin
+}%
+\let\set@listindent\set@listindent@parshape
+\providecommand\href[0]{\begingroup\@sanitize@url\@href}%
+\def\@href#1{\@@startlink{#1}\endgroup\@@href}%
+\def\@@href#1{#1\@@endlink}%
+\providecommand \url [0]{\begingroup\@sanitize@url \@url }%
+\def \@url #1{\endgroup\@href {#1}{\URL@prefix#1}}%
+\providecommand \URL@prefix [0]{URL }%
+\providecommand\doi[0]{\begingroup\@sanitize@url\@doi}%
+\def\@doi#1{\endgroup\@@startlink{\doibase#1}doi:\discretionary {}{}{}#1\@@endlink }%
+\providecommand \doibase [0]{http://dx.doi.org/}%
+\providecommand \@sanitize@url[0]{\chardef\cat@space\the\catcode`\ \@sanitize\catcode`\ \cat@space}%
+\def\@@startlink#1{}%
+\def\@@endlink{}%
+\@ifxundefined \pdfoutput {\true@sw}{\@ifnum{\z@=\pdfoutput}{\true@sw}{\false@sw}}%
+{%
+ \def\@@startlink@hypertext#1{\leavevmode\special{html:<a href="#1">}}%
+ \def\@@endlink@hypertext{\special{html:</a>}}%
+}{%
+ \def\@@startlink@hypertext#1{%
+ \leavevmode
+ \pdfstartlink\pdfstartlink@attr
+ user{/Subtype/Link/A<</Type/Action/S/URI/URI(#1)>>}%
+ \relax
+ }%
+ \def\@@endlink@hypertext{\pdfendlink}%
+ \def\pdfstartlink@attr{attr{/Border[0 0 1 ]/H/I/C[0 1 1]}}%
+}%
+\def\hypertext@enable@ltx{%
+ \let\@@startlink\@@startlink@hypertext
+ \let\@@endlink\@@endlink@hypertext
+}%
+\def\href@Hy{\hyper@normalise \href@ }%
+\def\href@Hy@ltx{\@ifnextchar\bgroup\Hy@href{\hyper@normalise\href@}}%
+\def\Hy@href#{\hyper@normalise\href@}%
+\begingroup
+ \endlinechar=-1 %
+ \catcode`\^^A=14 %
+ \catcode`\^^M\active
+ \catcode`\%\active
+ \catcode`\#\active
+ \catcode`\_\active
+ \catcode`\$\active
+ \catcode`\&\active
+ \gdef\hyper@normalise@ltx{^^A
+ \begingroup
+ \catcode`\^^M\active
+ \def^^M{ }^^A
+ \catcode`\%\active
+ \let%\@percentchar
+ \let\%\@percentchar
+ \catcode`\#\active
+ \def#{\hyper@hash}^^A
+ \def\#{\hyper@hash}^^A
+ \@makeother\&^^A
+ \edef&{\string&}^^A
+ \edef\&{\string&}^^A
+ \edef\textunderscore{\string_}^^A
+ \let\_\textunderscore
+ \catcode`\_\active
+ \let_\textunderscore
+ \let~\hyper@tilde
+ \let\~\hyper@tilde
+ \let\textasciitilde\hyper@tilde
+ \let\\\@backslashchar
+ \edef${\string$}^^A
+ \Hy@safe@activestrue
+ \hyper@n@rmalise
+ }^^A
+ \catcode`\#=6 ^^A
+ \gdef\Hy@ActiveCarriageReturn@ltx{^^M}^^A
+ \gdef\hyper@n@rmalise@ltx#1#2{^^A
+ \def\Hy@tempa{#2}^^A
+ \ifx\Hy@tempa\Hy@ActiveCarriageReturn
+ \Hy@ReturnAfterElseFi{^^A
+ \hyper@@normalise{#1}^^A
+ }^^A
+ \else
+ \Hy@ReturnAfterFi{^^A
+ \hyper@@normalise{#1}{#2}^^A
+ }^^A
+ \fi
+ }^^A
+ \gdef\hyper@@normalise@ltx#1#2{^^A
+ \edef\Hy@tempa{^^A
+ \endgroup
+ \noexpand#1{\Hy@RemovePercentCr#2%^^M\@nil}^^A
+ }^^A
+ \Hy@tempa
+ }^^A
+ \gdef\Hy@RemovePercentCr@ltx#1%^^M#2\@nil{^^A
+ #1^^A
+ \ifx\limits#2\limits
+ \else
+ \Hy@ReturnAfterFi{^^A
+ \Hy@RemovePercentCr #2\@nil
+ }^^A
+ \fi
+ }^^A
+\endgroup
+\def\switch@hyperref@href{%
+ \expandafter\@ifx\expandafter{\csname href \endcsname\href@Hy}{
+ \class@info{Repairing hyperref 6.75r \string\href}%
+ \let\hyper@normalise\hyper@normalise@ltx
+ \let\hyper@@normalise\hyper@@normalise@ltx
+ \let\hyper@n@rmalise\hyper@n@rmalise@ltx
+ \let\Hy@ActiveCarriageReturn\Hy@ActiveCarriageReturn@ltx
+ \let\Hy@RemovePercentCr\Hy@RemovePercentCr@ltx
+ \let\href\href@Hy@ltx
+ }{}%
+}%
+\appdef\document@inithook{\switch@hyperref@href}%
+\def\typeout@org#1{%
+ \begingroup
+ \set@display@protect
+ \immediate\write\@unused{#1}%
+ \endgroup
+}%
+\long\def\typeout@ltx#1{%
+ \begingroup
+ \set@display@protect
+ \immediate\write\@unused{#1}%
+ \endgroup
+}%
+\@ifx{\typeout\typeout@org}{%
+ \class@info{Making \string\typeout\space \string\long}%
+ \let\typeout\typeout@ltx
+}{}%
+\endinput
+%%
+%% End of file `ltxutil.sty'.
diff --git a/obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/reftest4-1.tex b/obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/reftest4-1.tex
new file mode 100644
index 0000000000..d1418950c2
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/reftest4-1.tex
@@ -0,0 +1,205 @@
+% ****** Start of file reftest.tex ******
+%
+% This file is part of the APS files in the REVTeX 4.1 distribution.
+% Version 4.1 of REVTeX, July 1, 2008.
+%
+% Copyright (c) 2009 The American Physical Society.
+%
+% See the REVTeX 4.1 README file for restrictions and more information.
+%
+\documentclass{revtex4}%
+\begin{document}%
+
+\typeout{Filename: reftest4-1.tex for revtex 4.1i 2009/10/19 (AO)}
+% This document, when typeset, prompts for the name of a LaTeX auxiliary (.aux) file
+% and then processes that file, paying attention to
+% keys that have been cited (via \citation)
+% or defined (via \bibcite).
+% It then prints out diagnostics indicating
+% * any keys that were cited but never defined,
+% * any keys that were defined but never cited, and
+% * keys that were cited and defined, but not in the same order.
+%
+% BibTeX takes care of such things automatically,
+% so there is little use for such a test when using BibTeX.
+%
+% A separate question: will this file run under revtex4.cls?
+% I can see two lines in my .aux with the potential for problems:
+% \global \mathchardef \firstnote@num\z@ \relax
+% \global\NAT@numberstrue
+
+\makeatletter
+
+\def\g@bbletw@#1#2{}%
+\def\g@bble@ne#1{}%
+
+\let\bibdata\g@bble@ne
+\let\newlabel\g@bbletw@
+\let\@writefile\g@bbletw@
+\let\bibstyle\g@bble@ne
+
+\@tempcnta\z@
+\@tempcntb\z@
+
+\def\bibcite#1#2{%
+ \advance\@tempcnta\@ne
+ \expandafter\bib@one\csname bib#1\expandafter\endcsname\expandafter{\the\@tempcnta}{#1}%
+}
+
+\def\bib@one#1#2#3{%
+ \@ifnotrelax#1{%
+ \typeout{*** Tag "#3" used in more than one \string\bibitem.}%
+ \typeout{\space\space\space\space You must correct this problem before continuing (Bailing out).}%
+ \@@end
+ }{%
+ \def#1{#2}%
+ \expandafter\def\csname bib@num#2\endcsname{#3}%
+ }%
+}%
+
+\def\citation#1{%
+ \@for\@tempa:={#1}\do{%
+ \expandafter\cite@one\csname cite\@tempa\expandafter\endcsname\expandafter{\@tempa}%
+ }%
+}
+
+\def\cite@one#1#2{%
+ \expandafter\@ifx\expandafter{\csname cite*\endcsname#1}{%
+ \@booleantrue\@cite@star@sw
+ }{%
+ \@ifnotrelax#1{%
+ }{%
+ \advance\@tempcntb\@ne
+ \expandafter\cite@one@\expandafter#1\expandafter{\the\@tempcntb}{#2}%
+ }%
+ }%
+}%
+\expandafter\def\csname cite*\endcsname{*}%
+\@booleanfalse\@cite@star@sw
+
+\def\cite@one@#1#2#3{%
+ \def#1{#2}%
+ \expandafter\def\csname cite@num#2\endcsname{#3}%
+}%
+
+\def\strut{\vrule height12pt depth4pt width0pt}%
+
+\typein[\filename]{Type in file name (no extension)}%
+\expandafter\input\expandafter{\filename.aux}%
+
+\expandafter\def\expandafter\bibtotal\expandafter{\the\@tempcnta}%
+\expandafter\def\expandafter\citetotal\expandafter{\the\@tempcntb}%
+
+\def\app@undefined#1#2#3{%
+ \expandafter\@ifnotrelax\csname#2#1\endcsname{}{%
+ \appdef#3{#1, }%
+ }
+}%
+
+\let\uncitedbibs\@empty
+\@tempcnta\z@
+\@ifnum{\bibtotal>\@tempcnta}{%
+ \loopwhile{%
+ \advance\@tempcnta\@ne
+ \expandafter\app@undefined\csname bib@num\the\@tempcnta\endcsname{cite}\uncitedbibs
+ \@ifnum{\bibtotal>\@tempcnta}%
+ }%
+}%
+
+\let\undefinedcites\@empty
+\@tempcnta\z@
+\@ifnum{\citetotal>\@tempcnta}{%
+ \loopwhile{%
+ \advance\@tempcnta\@ne
+ \expandafter\app@undefined\csname cite@num\the\@tempcnta\endcsname{bib}\undefinedcites
+ \@ifnum{\citetotal>\@tempcnta}%
+ }%
+}%
+
+\def\addit@bad#1#2{%
+ \expandafter\@ifnotrelax\csname bib#1\endcsname{%
+ \@ifx{#1#2}{%
+ \addit{#1}{OK}%
+ }{%
+ \advance\@tempcntb\@ne
+ \addit{#1}{\bf Out of order}%
+ }%
+ }{%
+ \addit{#1}{\bf Undefined}%
+ }%
+}%
+\def\ordertable{}%
+\def\table@line#1#2{%
+ \hbox to\hsize{%
+ \vrule
+ \hbox to.5\hsize{\ #1\hss}%
+ \hss\vrule\hss\strut
+ \hbox to.5\hsize{\ #2\hss}%
+ \vrule
+ }%
+ \hrule
+ \vskip\z@skip
+}%
+\def\addit#1#2{%
+ \appdef\ordertable{\table@line{#1}{#2}}%
+}%
+
+\@tempcnta\z@
+\@tempcntb\z@
+\@ifnum{\citetotal>\@tempcnta}{%
+ \loopwhile{%
+ \advance\@tempcnta\@ne
+ \expandafter\addit@bad\csname cite@num\the\@tempcnta\expandafter\endcsname\csname bib@num\the\@tempcnta\endcsname
+ \@ifnum{\citetotal>\@tempcnta}%
+ }%
+}{}%
+\expandafter\def\expandafter\citesdisordered\expandafter{\the\@tempcntb}%
+
+Analysis of \filename.aux, according to rules of \emph{Physical Review}:
+All bibitems must occur in the bibliography in order of their first citation in the
+file, and all bibitems must be cited in the paper.
+
+\def\@tempa{\textbf{Bibitems that were not explicitly cited:} }%
+\@ifx@empty\uncitedbibs{%
+ \appdef\@tempa{none.}%
+}{%
+ \appdef\@tempa{\uncitedbibs\ \@cite@star@sw{were implicitly cited.}{please cite or remove bibitem(s).}}%
+}%
+\@tempa\expandafter\typeout\expandafter{\@tempa}\par
+
+\def\@tempa{\textbf{Citations not defined in bibliography:} }%
+\@ifx@empty\undefinedcites{%
+ \appdef\@tempa{none.}%
+}{%
+ \appdef\@tempa{\undefinedcites\space please add bibitem(s) or remove cite(s).}%
+}%
+\@tempa\expandafter\typeout\expandafter{\@tempa}\par
+
+\@ifnum{\citesdisordered=\z@}{%
+ \def\@tempa{\textbf{The order of the bibitems is OK.}}%
+ \@tempa\expandafter\typeout\expandafter{\@tempa}\par
+}{%
+ \def\@tempa{%
+ \textbf{There
+ \@ifnum{\citesdisordered<\tw@}{was an error}{were \citesdisordered\ errors}
+ in the order of your bibitems.}%
+ }%
+ \@tempa\expandafter\typeout\expandafter{\@tempa}
+ \@ifx@empty\uncitedbibs{\@ifx@empty\undefinedcites{\true@sw}{\false@sw}}{\false@sw}%
+ {(This is in addition to the problems noted above.) }{}%
+ Please check the following table to see what the problems were.
+ Status in boldface signifies that a correction is needed. \par
+}%
+ \emph{NOTE:
+ This table is a complete listing of all your citations, in order of their first occurrence:
+ your bibitems should be in the order shown in the first column of this table.
+ }\par
+ \small
+ \smallskip
+ \hrule
+ \table@line{\textbf{Citation key}}{\textbf{Status}}%
+ \smallskip
+ \hrule
+ \ordertable
+\end{document}
+% ****** End of file reftest.tex ******
diff --git a/obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/revsymb4-1.sty b/obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/revsymb4-1.sty
new file mode 100644
index 0000000000..0e52ff8baf
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/revsymb4-1.sty
@@ -0,0 +1,158 @@
+%%
+%% This is file `revsymb4-1.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% revtex4-1.dtx (with options: `revsymb')
+%%
+%% This file is part of the APS files in the REVTeX 4 distribution.
+%% For the version number, search on the string
+%% Original version by David Carlisle
+%% Modified by Arthur Ogawa (mailto:arthur_ogawa at sbcglobal dot net)
+%%
+%% Copyright (c) 2009 The American Physical Society.
+%% http://publish.aps.org/revtex4/
+%% mailto:revtex4@aps.org
+%%
+%% See the REVTeX 4 README file for restrictions and more information.
+%%
+\NeedsTeXFormat{LaTeX2e}[1996/12/01]%
+\ProvidesPackage{revsymb4-1}
+ [2010/07/25/20:33:00 4.1r (http://publish.aps.org/revtex4/ for documentation)]% \fileversion
+\def\REVSYMB@warn#1{\PackageWarningNoLine{revsymb}{#1}}%
+\DeclareRobustCommand\lambdabar{%
+ \bgroup
+ \def\@tempa{%
+ \hbox{%
+ \raise.73\ht\z@
+ \hb@xt@\z@{%
+ \kern.25\wd\z@
+ \vrule \@width.5\wd\z@\@height.1\p@\@depth.1\p@
+ \hss
+ }%
+ \box\z@
+ }%
+ }%
+ \mathchoice
+ {\setbox\z@\hbox{$\displaystyle \lambda$}\@tempa}%
+ {\setbox\z@\hbox{$\textstyle \lambda$}\@tempa}%
+ {\setbox\z@\hbox{$\scriptstyle \lambda$}\@tempa}%
+ {\setbox\z@\hbox{$\scriptscriptstyle\lambda$}\@tempa}%
+ \egroup
+}%
+\DeclareRobustCommand\openone{\leavevmode\hbox{\small1\normalsize\kern-.33em1}}%
+\DeclareRobustCommand\corresponds{\replace@command\corresponds\triangleq}%
+\DeclareRobustCommand\overcirc{\replace@command\overcirc\mathring}%
+\DeclareRobustCommand\overdots{\replace@command\overdots\dddot}%
+\DeclareRobustCommand\REV@triangleq{%
+ {\lower.2ex\hbox{=}}{\kern-.75em^\triangle}%
+}%
+\DeclareRobustCommand\REV@dddot[1]{%
+ \@ontopof{#1}{\cdots}{1.0}\mathord{\box2}%
+}%
+\DeclareRobustCommand\altsuccsim{\succ\kern-.9em_\sim\kern.3em}%
+\DeclareRobustCommand\altprecsim{\prec\kern-1em_\sim\kern.3em}%
+\let\REV@succsim\altsuccsim
+\let\REV@precsim\altprecsim
+\DeclareRobustCommand\REV@lesssim{\mathrel{\mathpalette\vereq{<}}}%
+\DeclareRobustCommand\REV@gtrsim{\mathrel{\mathpalette\vereq{>}}}%
+\DeclareRobustCommand\alt{\lesssim}
+\DeclareRobustCommand\agt{\gtrsim}
+\def\vereq#1#2{%
+ \lower3\p@\vbox{%
+ \baselineskip1.5\p@
+ \lineskip1.5\p@
+ \ialign{$\m@th#1\hfill##\hfil$\crcr#2\crcr\sim\crcr}%
+ }%
+}%
+\DeclareRobustCommand\tensor[1]{\@ontopof{#1}{\leftrightarrow}{1.15}\mathord{\box2}}
+\DeclareRobustCommand\overstar[1]{\@ontopof{#1}{\ast}{1.15}\mathord{\box2}}
+\DeclareRobustCommand\loarrow[1]{\@ontopof{#1}{\leftarrow}{1.15}\mathord{\box2}}
+\DeclareRobustCommand\roarrow[1]{\@ontopof{#1}{\rightarrow}{1.15}\mathord{\box2}}
+\def\@ontopof#1#2#3{%
+ {%
+ \mathchoice
+ {\@@ontopof{#1}{#2}{#3}\displaystyle \scriptstyle }%
+ {\@@ontopof{#1}{#2}{#3}\textstyle \scriptstyle }%
+ {\@@ontopof{#1}{#2}{#3}\scriptstyle \scriptscriptstyle}%
+ {\@@ontopof{#1}{#2}{#3}\scriptscriptstyle\scriptscriptstyle}%
+ }%
+}%
+\def\@@ontopof#1#2#3#4#5{%
+ \setbox\z@\hbox{$#4#1$}%
+ \setbox\f@ur\hbox{$#5#2$}%
+ \setbox\tw@\null\ht\tw@\ht\z@ \dp\tw@\dp\z@
+ \@ifdim{\wd\z@>\wd\f@ur}{%
+ \setbox\f@ur\hb@xt@\wd\z@{\hss\box\f@ur\hss}%
+ \mathord{\rlap{\raise#3\ht\z@\box\f@ur}\box\z@}%
+ }{%
+ \setbox\f@ur\hb@xt@.9\wd\f@ur{\hss\box\f@ur\hss}%
+ \setbox\z@\hb@xt@\wd\f@ur{\hss$#4\relax#1$\hss}%
+ \mathord{\rlap{\copy\z@}\raise#3\ht\z@\box\f@ur}%
+ }%
+}%
+\DeclareRobustCommand\frak{%
+ \REVSYMB@warn{%
+ Command \string\frak\space unsupported:^^J%
+ please use \string\mathfrak\space instead.%
+ }%
+ \global\let\frak\mathfrak
+ \frak
+}%
+\DeclareRobustCommand\REV@mathfrak{%
+ \REVSYMB@warn{%
+ Command \string\mathfrak\space undefined:^^J%
+ please specify the amsfonts or amssymb option!%
+ }%
+ \global\let\mathfrak\@firstofone
+ \mathfrak
+}%
+\DeclareRobustCommand\Bbb{%
+ \REVSYMB@warn{%
+ Command \string\Bbb\space unsupported:^^J%
+ please use \string\mathbb\space instead.%
+ }%
+ \global\let\Bbb\mathbb
+ \Bbb
+}%
+\DeclareRobustCommand\REV@mathfrak{%
+ \REVSYMB@warn{%
+ Command \string\mathbb\space undefined:^^J%
+ please specify the amsfonts or amssymb option!%
+ }%
+ \global\let\mathbb\@firstofone
+ \mathbb
+}%
+\def\Bigglb{\REV@boldopen \Bigg}%
+\def\Biglb {\REV@boldopen \Big }%
+\def\bigglb{\REV@boldopen \bigg}%
+\def\biglb {\REV@boldopen \big }%
+\def\Biggrb{\REV@boldclose\Bigg}%
+\def\Bigrb {\REV@boldclose\Big }%
+\def\biggrb{\REV@boldclose\bigg}%
+\def\bigrb {\REV@boldclose\big }%
+\def\REV@pmb#1{%
+ \hbox{%
+ \setbox\z@=\hbox{#1}%
+ \kern-.02em\copy\z@\kern-\wd\z@
+ \kern .04em\copy\z@\kern-\wd\z@
+ \kern-.02em
+ \raise.04em\copy\z@
+ }%
+}%
+\def\REV@boldopen #1#2{\mathopen {\REV@pmb{$#1#2$}}}%
+\def\REV@boldclose#1#2{\mathclose{\REV@pmb{$#1#2$}}}%
+\def\revsymb@inithook{%
+ \@ifxundefined\dddot{\let\dddot\REV@dddot}{}%
+ \@ifxundefined\triangleq{\let\triangleq\REV@triangleq}{}%
+ \@ifxundefined\succsim{\let\succsim\altsuccsim}{}%
+ \@ifxundefined\precsim{\let\precsim\altprecsim}{}%
+ \@ifxundefined\lesssim{\let\lesssim\REV@lesssim}{}%
+ \@ifxundefined\gtrsim {\let\gtrsim \REV@gtrsim }{}%
+ \@ifxundefined\mathfrak{\let\mathfrak\REV@mathfrak}{}%
+ \@ifxundefined\mathbb{\let\mathbb\REV@mathbb}{}%
+}%
+\endinput
+%%
+%% End of file `revsymb4-1.sty'.
diff --git a/obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/revtex4-1.cls b/obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/revtex4-1.cls
new file mode 100644
index 0000000000..05601a82f3
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-1/tex/latex/revtex/revtex4-1.cls
@@ -0,0 +1,7553 @@
+%%
+%% This is file `revtex4-1.cls',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% revtex4-1.dtx (with options: `kernel')
+%% ltxutil.dtx (with options: `kernel')
+%% ltxfront.dtx (with options: `kernel')
+%% ltxgrid.dtx (with options: `kernel')
+%% revtex4-1.dtx (with options: `options')
+%% ltxutil.dtx (with options: `options')
+%% ltxfront.dtx (with options: `options')
+%% ltxgrid.dtx (with options: `options')
+%% revtex4-1.dtx (with options: `package')
+%%
+%% This file is part of the APS files in the REVTeX 4 distribution.
+%% For the version number, search on the string
+%% Original version by David Carlisle
+%% Modified by Arthur Ogawa (mailto:arthur_ogawa at sbcglobal dot net)
+%%
+%% Copyright (c) 2009 The American Physical Society.
+%% http://publish.aps.org/revtex4/
+%% mailto:revtex4@aps.org
+%%
+%% See the REVTeX 4 README file for restrictions and more information.
+%%
+\NeedsTeXFormat{LaTeX2e}[1996/12/01]%
+\ProvidesClass{revtex4-1}
+ [2010/07/25/20:33:00 4.1r (http://publish.aps.org/revtex4/ for documentation)]% \fileversion
+\let\class@name\@gtempa
+\GenericInfo{}{\space
+ Copyright (c) 2009 The American Physical Society.^^J
+ mailto:revtex@aps.org^^J
+ Licensed under the LPPL:^^Jhttp://www.ctan.org/tex-archive/macros/latex/base/lppl.txt^^J
+ Arthur Ogawa <arthur_ogawa at sbcglobal dot net>^^J
+ Based on work by David Carlisle <david at dcarlisle.demon.co.uk>%
+ \@gobble
+}%
+\if@compatibility
+ \edef\reserved@a{\errhelp{%
+ Change your \string\documentstyle\space statement to
+ \string\documentclass\space and rerun.
+ }}\reserved@a
+ \errmessage{You cannot run \class@name\space in compatability mode}%
+ \expandafter\@@end
+\fi
+\typeout{%
+ltxutil%
+ [2010/07/25/20:33:00 4.1r utilities package (portions licensed from W. E. Baxter web at superscript.com)]% \fileversion
+}%
+\def\class@err#1{\ClassError{\class@name}{#1}\@eha}%
+\def\class@warn#1{\ClassWarningNoLine{\class@name}{#1}}%
+\def\class@info#1{\ClassInfo{\class@name}{#1}}%
+\def\obsolete@command#1{%
+ \class@warn@end{Command \string#1\space is obsolete.^^JPlease remove from your document}%
+ \global\let#1\@empty
+ #1%
+}%
+\def\replace@command#1#2{%
+ \class@warn@end{Command \string#1\space is obsolete;^^JUse \string#2\space instead}%
+ \global\let#1#2%
+ #1%
+}%
+\def\replace@environment#1#2{%
+ \class@warn@end{Environment #1 is obsolete;^^JUse #2 instead}%
+ \glet@environment{#1}{#2}%
+ \@nameuse{#1}%
+}%
+\def\incompatible@package#1{%
+ \@ifpackageloaded{#1}{%
+ \def\@tempa{I cannot continue. You must remove the \string\usepackage\ statement that caused that package to be loaded.}%
+ \ClassError{\class@name}{The #1 package cannot be used with \class@name}%
+ \@tempa\stop
+ }{%
+ \class@info{#1 was not loaded (OK!)}%
+ }%
+}%
+\def\class@warn@end#1{%
+ \gappdef\class@enddocumenthook{\class@warn{#1}}%
+}%
+\ifx\undefined\class@name
+ \def\class@name{ltxutil}%
+ \class@warn{You should define the class name before reading in this package. Using default}%
+\fi
+\def\t@{to}%
+\dimendef\dimen@iii\thr@@
+\def\halignt@{\halign\t@}%
+\chardef\f@ur=4\relax
+\chardef\cat@letter=11\relax
+\chardef\other=12\relax
+\def\let@environment#1#2{%
+ \expandafter\let
+ \csname#1\expandafter\endcsname\csname#2\endcsname
+ \expandafter\let
+ \csname end#1\expandafter\endcsname\csname end#2\endcsname
+}%
+\def\glet@environment#1#2{%
+ \global\expandafter\let
+ \csname#1\expandafter\endcsname\csname#2\endcsname
+ \global\expandafter\let
+ \csname end#1\expandafter\endcsname\csname end#2\endcsname
+}%
+\newcommand\tracingplain{%
+ \tracingonline\z@\tracingcommands\z@\tracingstats\z@
+ \tracingpages\z@\tracingoutput\z@\tracinglostchars\@ne
+ \tracingmacros\z@\tracingparagraphs\z@\tracingrestores\z@
+ \showboxbreadth5\showboxdepth3\relax %\errorstopmode
+ }%
+\newcommand\traceoutput{%
+ \appdef\@resetactivechars{\showoutput}%
+}%
+\newcommand\say[1]{\typeout{<\noexpand#1=\meaning#1>}}%
+\newcommand\saythe[1]{\typeout{<\noexpand#1=\the#1>}}%
+\def\fullinterlineskip{\prevdepth\z@}%
+\countdef\count@i\@ne
+\countdef\count@ii\tw@
+\long\def\prepdef#1#2{%
+ \@ifxundefined#1{\toks@{}}{\toks@\expandafter{#1}}%
+ \toks@ii{#2}%
+ \edef#1{\the\toks@ii\the\toks@}%
+}%
+\long\def\appdef#1#2{%
+ \@ifxundefined#1{\toks@{}}{\toks@\expandafter{#1}}%
+ \toks@ii{#2}%
+ \edef#1{\the\toks@\the\toks@ii}%
+}%
+\long\def\gappdef#1#2{%
+ \@ifxundefined#1{\toks@{}}{\toks@\expandafter{#1}}%
+ \toks@ii{#2}%
+ \global\edef#1{\the\toks@\the\toks@ii}%
+}%
+\long\def\appdef@val#1#2{%
+ \appdef#1{{#2}}%
+}%
+\long\def\appdef@e#1#2{%
+ \expandafter\appdef
+ \expandafter#1%
+ \expandafter{#2}%
+}%
+\long\def\appdef@eval#1#2{%
+ \expandafter\appdef@val
+ \expandafter#1%
+ \expandafter{#2}%
+}%
+\toksdef\toks@ii=\tw@
+\long\def\@ifxundefined#1{\@ifx{\undefined#1}}%
+\long\def\@ifnotrelax#1#2#3{\@ifx{\relax#1}{#3}{#2}}%
+\long\def\@argswap#1#2{#2#1}%
+\long\def\@argswap@val#1#2{#2{#1}}%
+\def\@ifxundefined@cs#1{\expandafter\@ifx\expandafter{\csname#1\endcsname\relax}}%
+\def\@boolean#1#2{%
+ \long\def#1{%
+ #2% \if<something>
+ \expandafter\true@sw
+ \else
+ \expandafter\false@sw
+ \fi
+ }%
+}%
+\def\@boole@def#1#{\@boolean{#1}}% Implicit #2
+\def\@booleantrue#1{\let#1\true@sw}%
+\def\@booleanfalse#1{\let#1\false@sw}%
+\@boole@def\@ifx#1{\ifx#1}%
+\@boole@def\@ifx@empty#1{\ifx\@empty#1}%
+\@boole@def\@if@empty#1{\if!#1!}%
+\def\@if@sw#1#2{#1\expandafter\true@sw\else\expandafter\false@sw#2}%
+\@boole@def\@ifdim#1{\ifdim#1}%
+\@boole@def\@ifeof#1{\ifeof#1}%
+\@boole@def\@ifhbox#1{\ifhbox#1}%
+\@boole@def\@ifhmode{\ifhmode}%
+\@boole@def\@ifinner{\ifinner}%
+\@boole@def\@ifmmode{\ifmmode}%
+\@boole@def\@ifnum#1{\ifnum#1}%
+\@boole@def\@ifodd#1{\ifodd#1}%
+\@boole@def\@ifvbox#1{\ifvbox#1}%
+\@boole@def\@ifvmode{\ifvmode}%
+\@boole@def\@ifvoid#1{\ifvoid#1}%
+\long\def\true@sw#1#2{#1}%
+\long\def\false@sw#1#2{#2}%
+\long\def\loopuntil#1{#1{}{\loopuntil{#1}}}%
+\long\def\loopwhile#1{#1{\loopwhile{#1}}{}}%
+\def\@provide#1{%
+ \@ifx{\undefined#1}{\true@sw}{\@ifx{\relax#1}{\true@sw}{\false@sw}}%
+ {\def#1}{\def\j@nk}%
+}%
+\prepdef\document{%
+ \endgroup
+ \document@inithook
+ \true@sw{}%
+}%
+\let\document@inithook\@empty
+\appdef\document@inithook{%
+ \AtBeginDocument{\class@documenthook}%
+}%
+\AtEndDocument{%
+ \class@enddocumenthook
+}%
+\let\class@documenthook\@empty
+\let\class@enddocumenthook\@empty
+\def\enddocument{%
+ \let\AtEndDocument\@firstofone
+ \@enddocumenthook
+ \@checkend{document}%
+ \clear@document
+ \check@aux
+ \deadcycles\z@
+ \@@end
+}%
+\def\check@aux{\do@check@aux}%
+\def\do@check@aux{%
+ \@if@sw\if@filesw\fi{%
+ \immediate\closeout\@mainaux
+ \let\@setckpt\@gobbletwo
+ \let\@newl@bel\@testdef
+ \@tempswafalse
+ \makeatletter
+ \input\jobname.aux\relax
+ }{}%
+ \@dofilelist
+ \@ifdim{\font@submax >\fontsubfuzz\relax}{%
+ \@font@warning{%
+ Size substitutions with differences\MessageBreak
+ up to \font@submax\space have occured.\@gobbletwo
+ }%
+ }{}%
+ \@defaultsubs
+ \@refundefined
+ \@if@sw\if@filesw\fi{%
+ \@ifx{\@multiplelabels\relax}{%
+ \@if@sw\if@tempswa\fi{%
+ \@latex@warning@no@line{%
+ Label(s) may have changed.
+ Rerun to get cross-references right
+ }%
+ }{}%
+ }{%
+ \@multiplelabels
+ }%
+ }{}%
+}%
+\def\clear@document{%
+ \clearpage
+ \do@output@cclv{%
+ \Call@AfterLastShipout
+ }%
+}%
+\appdef\class@documenthook{%
+ \providecommand\Call@AfterLastShipout{}%
+}%
+\def\class@extension#1#2{%
+ \IfFileExists{#1.#2}{%
+ \expandafter\class@extensionfile\csname ver@\@currname.\@currext\endcsname{#1}#2%
+ }{%
+ \csname rtx@#1\endcsname
+ }%
+}%
+\def\class@extensionfile#1#2#3{%
+ \@pass@ptions#3\@unusedoptionlist{#2}%
+ \global\let\@unusedoptionlist\@empty
+ \expandafter\class@ext@hook\csname#2.#3-h@@k\endcsname#1{#2}#3%
+}%
+\def\class@ext@hook#1#2#3#4{%
+ \@pushfilename@ltx
+ \makeatletter
+ \let\CurrentOption\@empty
+ \@reset@ptions
+ \let#1\@empty
+ \xdef\@currname{#3}%
+ \global\let\@currext#4%
+ \global\let\@clsextension\@currext
+ \input{#3.#4}%
+ \@ifl@ter#4{#3}#2{%
+ \class@info{Class extension later than: #2}%
+ }{%
+ \class@info{Class extension earlier: #2}%
+ \@@end
+ }%
+ #1%
+ \let#1\@undefined
+ \expandafter\@p@pfilename@ltx\@currnamestack@ltx\@nil
+ \@reset@ptions
+}%
+\def\@pushfilename@ltx{%
+ \xdef\@currnamestack@ltx{%
+ {\@currname}%
+ {\@currext}%
+ {\@clsextension}%
+ {\the\catcode`\@}%
+ \@currnamestack@ltx
+ }%
+}%
+\def\@p@pfilename@ltx#1#2#3#4#5\@nil{%
+ \gdef\@currname{#1}%
+ \gdef\@currext{#2}%
+ \gdef\@clsextension{#3}%
+ \catcode`\@#4\relax
+ \gdef\@currnamestack@ltx{#5}%
+}%
+\global\let\@currnamestack@ltx\@empty
+\def\flushing{%
+ \let\\\@normalcr
+ \leftskip\z@skip
+ \rightskip\z@skip
+ \@rightskip\z@skip
+ \parfillskip\@flushglue
+}%
+\expandafter\DeclareRobustCommand\expandafter\@centercr\expandafter{\@centercr}%
+\def\eqnarray@LaTeX{%
+ \stepcounter{equation}%
+ \def\@currentlabel{\p@equation\theequation}%
+ \global\@eqnswtrue
+ \m@th
+ \global\@eqcnt\z@
+ \tabskip\@centering
+ \let\\\@eqncr
+ $$\everycr{}\halign to\displaywidth\bgroup
+ \hskip\@centering$\displaystyle\tabskip\z@skip{##}$\@eqnsel
+ &\global\@eqcnt\@ne\hskip \tw@\arraycolsep \hfil${##}$\hfil
+ &\global\@eqcnt\tw@ \hskip \tw@\arraycolsep
+ $\displaystyle{##}$\hfil\tabskip\@centering
+ &\global\@eqcnt\thr@@ \hb@xt@\z@\bgroup\hss##\egroup
+ \tabskip\z@skip
+ \cr
+}
+\long\def\eqnarray@fleqn@fixed{%
+ \stepcounter{equation}\def\@currentlabel{\p@equation\theequation}%
+ \global\@eqnswtrue\m@th\global\@eqcnt\z@
+ \tabskip\ltx@mathindent
+ \let\\=\@eqncr
+ \setlength\abovedisplayskip{\topsep}%
+ \ifvmode\addtolength\abovedisplayskip{\partopsep}\fi
+ \addtolength\abovedisplayskip{\parskip}%
+ \setlength\belowdisplayskip{\abovedisplayskip}%
+ \setlength\belowdisplayshortskip{\abovedisplayskip}%
+ \setlength\abovedisplayshortskip{\abovedisplayskip}%
+ $$%
+ \everycr{}%
+ \halignt@\linewidth\bgroup
+ \hskip\@centering$\displaystyle\tabskip\z@skip{##}$\@eqnsel
+ &\global\@eqcnt\@ne
+ \hskip\tw@\eqncolsep
+ \hfil${{}##{}}$\hfil
+ &\global\@eqcnt\tw@
+ \hskip\tw@\eqncolsep
+ $\displaystyle{##}$\hfil\tabskip\@centering
+ &\global\@eqcnt\thr@@\hb@xt@\z@\bgroup\hss##\egroup
+ \tabskip\z@skip
+ \cr
+}%
+\@ifx{\eqnarray\eqnarray@LaTeX}{%
+ \class@info{Repairing broken LaTeX eqnarray}%
+ \let\eqnarray\eqnarray@fleqn@fixed
+ \newlength\eqncolsep
+ \setlength\eqncolsep\z@
+ \let\eqnarray@LaTeX\relax
+ \let\eqnarray@fleqn@fixed\relax
+}{}%
+\def\ltx@mathindent{\@centering}%
+\def\set@eqnarray@skips{}%
+\def\prep@math{%
+ \@ifvmode{\everypar{{\setbox\z@\lastbox}}}{}%
+}%
+\def\prep@math@patch{%
+ \prepdef\equation{\prep@math}%
+ \prepdef\eqnarray{\prep@math}%
+}%
+\def\footnote{\@ifnextchar[\ltx@xfootnote\ltx@yfootnote}%
+\def\ltx@xfootnote[#1]{%
+ \ltx@def@footproc\ltx@footmark[#1]%
+ \expandafter\ltx@foottext\expandafter{\the\csname c@\@mpfn\endcsname}%
+}%
+\def\ltx@yfootnote{%
+ \ltx@stp@footproc\ltx@footmark
+ \expandafter\ltx@foottext\expandafter{\the\csname c@\@mpfn\endcsname}%
+}%
+\def\footnotemark{\@ifnextchar[\ltx@xfootmark\ltx@yfootmark}%
+\def\ltx@xfootmark{\ltx@def@footproc\ltx@footmark}%
+\def\ltx@yfootmark{\ltx@stp@footproc\ltx@footmark}%
+\def\ltx@footmark#1{%
+ \leavevmode
+ \ifhmode\edef\@x@sf{\the\spacefactor}\nobreak\fi
+ \begingroup
+ \expandafter\ltx@make@current@footnote\expandafter{\@mpfn}{#1}%
+ \expandafter\@argswap@val\expandafter{\Hy@footnote@currentHref}{\hyper@linkstart {link}}%
+ \@makefnmark
+ \hyper@linkend
+ \endgroup
+ \ifhmode\spacefactor\@x@sf\fi
+ \relax
+}%
+\def\footnotetext{\@ifnextchar[\ltx@xfoottext\ltx@yfoottext}%
+\def\ltx@xfoottext{\ltx@def@footproc\ltx@foottext}%
+\def\ltx@yfoottext{\ltx@stp@footproc\ltx@foottext}%
+\long\def\ltx@foottext#1#2{%
+ \begingroup
+ \expandafter\ltx@make@current@footnote\expandafter{\@mpfn}{#1}%
+ \@footnotetext{#2}%
+ \endgroup
+}%
+\def\ltx@def@footproc#1[#2]{%
+ \begingroup
+ \csname c@\@mpfn\endcsname #2\relax
+ \unrestored@protected@xdef\@thefnmark{\thempfn}%
+ \expandafter\endgroup
+ \expandafter#1%
+ \expandafter{\the\csname c@\@mpfn\endcsname}%
+}%
+\def\ltx@stp@footproc#1{%
+ \expandafter\stepcounter\expandafter{\@mpfn}%
+ \protected@xdef\@thefnmark{\thempfn}%
+ \expandafter#1%
+ \expandafter{\the\csname c@\@mpfn\endcsname}%
+}%
+\appdef\class@documenthook{%
+ \let\footnote@latex\footnote
+ \@ifpackageloaded{hyperref}{}{%
+ \let\H@@footnotetext\@footnotetext
+ \def\@footnotetext{\H@@footnotetext}%
+ \let\H@@mpfootnotetext\@mpfootnotetext
+ \def\@mpfootnotetext{\H@@mpfootnotetext}%
+ }%
+}%
+\def\ltx@make@current@footnote#1#2{%
+ \csname c@#1\endcsname#2\relax
+ \protected@edef\Hy@footnote@currentHref{\@currentHref-#1.\csname the#1\endcsname}%
+}%
+\def\thempfootnote@latex{{\itshape \@alph \c@mpfootnote }}%
+\def\ltx@thempfootnote{\@alph\c@mpfootnote}%
+\@ifx{\thempfootnote\thempfootnote@latex}{%
+ \class@info{Repairing hyperref-unfriendly LaTeX definition of \string\mpfootnote}%
+ \let\thempfootnote\ltx@thempfootnote
+}{}%
+\def\@makefnmark{%
+ \hbox{%
+ \@textsuperscript{%
+ \normalfont\itshape\@thefnmark
+ }%
+ }%
+}%
+\long\def\@footnotetext{%
+ \insert\footins\bgroup
+ \make@footnotetext
+}%
+\long\def\@mpfootnotetext{%
+ \minipagefootnote@pick
+ \make@footnotetext
+}%
+\long\def\make@footnotetext#1{%
+ \set@footnotefont
+ \set@footnotewidth
+ \@parboxrestore
+ \protected@edef\@currentlabel{%
+ \csname p@\@mpfn\endcsname\@thefnmark
+ }%
+ \color@begingroup
+ \@makefntext{%
+ \rule\z@\footnotesep\ignorespaces#1%
+ \@finalstrut\strutbox\vadjust{\vskip\z@skip}%
+ }%
+ \color@endgroup
+ \minipagefootnote@drop
+}%
+\def\set@footnotefont{%
+ \reset@font\footnotesize
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\footnotesep
+ \splitmaxdepth\dp\strutbox
+}%
+\def\set@footnotewidth{\set@footnotewidth@one}%
+\def\robustify@contents{%
+ \let \label \@gobble
+ \let \index \@gobble
+ \let \glossary \@gobble
+ \let\footnote \@gobble
+ \def\({\string\(}%
+ \def\){\string\)}%
+ \def\\{\string\\}%
+}%
+\long\def\addtocontents#1#2{%
+ \protected@write\@auxout{\robustify@contents}{\string \@writefile {#1}{#2}}%
+}%
+\def\addcontentsline#1#2#3{%
+ \addtocontents{#1}{%
+ \protect\contentsline{#2}{#3}{\thepage}{}%
+ }%
+}%
+\def\label#1{%
+ \@bsphack
+ \protected@write\@auxout{}{%
+ \string\newlabel{#1}{{\@currentlabel}{\thepage}{}{}{}}%
+ }%
+ \@esphack
+}%
+\def\ltx@contentsline#1{%
+ \expandafter\@ifnotrelax\csname l@#1\endcsname{}{%
+ \expandafter\let\csname l@#1\endcsname\@gobbletwo
+ }%
+ \contentsline@latex{#1}%
+}%
+\appdef\document@inithook{%
+ \let\contentsline@latex\contentsline
+ \let\contentsline\ltx@contentsline
+}%
+\appdef\class@documenthook{%
+ \prepdef\caption{\minipagefootnote@here}%
+}%
+\def\minipagefootnote@init{%
+ \setbox\@mpfootins\box\voidb@x
+}%
+\def\minipagefootnote@pick{%
+ \global\setbox\@mpfootins\vbox\bgroup
+ \unvbox\@mpfootins
+}%
+\def\minipagefootnote@drop{%
+ \egroup
+}%
+\def\minipagefootnote@here{%
+ \par
+ \@ifvoid\@mpfootins{}{%
+ \vskip\skip\@mpfootins
+ \fullinterlineskip
+ \@ifinner{%
+ \vtop{\unvcopy\@mpfootins}%
+ {\setbox\z@\lastbox}%
+ }{}%
+ \unvbox\@mpfootins
+ }%
+}%
+\def\minipagefootnote@foot{%
+ \@ifvoid\@mpfootins{}{%
+ \insert\footins\bgroup\unvbox\@mpfootins\egroup
+ }%
+}%
+\def\endminipage{%
+ \par
+ \unskip
+ \minipagefootnote@here
+ \@minipagefalse %% added 24 May 89
+ \color@endgroup
+ \egroup
+ \expandafter\@iiiparbox\@mpargs{\unvbox\@tempboxa}%
+}%
+\@booleantrue\floats@sw
+\let\@xfloat@LaTeX\@xfloat
+\def\@xfloat#1[#2]{%
+ \@xfloat@prep
+ \@nameuse{fp@proc@#2}%
+ \floats@sw{\@xfloat@LaTeX{#1}[#2]}{\@xfloat@anchored{#1}[]}%
+}%
+\def\@xfloat@prep{%
+ \ltx@footnote@pop
+ \def\@mpfn{mpfootnote}%
+ \def\thempfn{\thempfootnote}%
+ \c@mpfootnote\z@
+ \let\H@@footnotetext\H@@mpfootnotetext
+}%
+\let\ltx@footnote@pop\@empty
+\def\@xfloat@anchored#1[#2]{%
+ \def\@captype{#1}%
+ \begin@float@pagebreak
+ \let\end@float\end@float@anchored
+ \let\end@dblfloat\end@float@anchored
+ \hsize\columnwidth
+ \@parboxrestore
+ \@floatboxreset
+ \minipagefootnote@init
+}%
+\def\end@float@anchored{%
+ \minipagefootnote@here
+ \par\vskip\z@skip
+ \par
+ \end@float@pagebreak
+}%
+\def\begin@float@pagebreak{\par\addvspace\intextsep}%
+\def\end@float@pagebreak{\par\addvspace\intextsep}%
+\def\@mpmakefntext#1{%
+ \parindent=1em
+ \noindent
+ \hb@xt@1em{\hss\@makefnmark}%
+ #1%
+}%
+\def\do@if@floats#1#2{%
+ \floats@sw{}{%
+ \expandafter\newwrite
+ \csname#1write\endcsname
+ \expandafter\def
+ \csname#1@stream\endcsname{\jobname#2}%
+ \expandafter\immediate
+ \expandafter\openout
+ \csname#1write\endcsname
+ \csname#1@stream\endcsname\relax
+ \@ifxundefined\@float@LaTeX{%
+ \let\@float@LaTeX\@float
+ \let\@dblfloat@LaTeX\@dblfloat
+ \let\@float\write@float
+ \let\@dblfloat\write@floats
+ }{}%
+ \let@environment{#1@float}{#1}%
+ \let@environment{#1@floats}{#1*}%
+ \@ifxundefined@cs{#1@write}{}{%
+ \let@environment{#1}{#1@write}%
+ }%
+ }%
+}%
+\def\triggerpar{\leavevmode\@@par}%
+\def\oneapage{\def\begin@float@pagebreak{\newpage}\def\end@float@pagebreak{\newpage}}%
+\def\print@float#1#2{%
+ \lengthcheck@sw{%
+ \total@float{#1}%
+ }{}%
+ \@ifxundefined@cs{#1write}{}{%
+ \begingroup
+ \@booleanfalse\floats@sw
+ #2%
+ \raggedbottom
+ \def\array@default{v}% floats must
+ \let\@float\@float@LaTeX
+ \let\@dblfloat\@dblfloat@LaTeX
+ \let\trigger@float@par\triggerpar
+ \let@environment{#1}{#1@float}%
+ \let@environment{#1*}{#1@floats}%
+ \expandafter\prepdef\csname#1\endcsname{\trigger@float@par}%
+ \expandafter\prepdef\csname#1*\endcsname{\trigger@float@par}%
+ \@namedef{fps@#1}{h!}%
+ \expandafter\immediate
+ \expandafter\closeout
+ \csname#1write\endcsname
+ \everypar{%
+ \global\let\trigger@float@par\relax
+ \global\everypar{}\setbox\z@\lastbox
+ \@ifxundefined@cs{#1sname}{}{%
+ \begin@float@pagebreak
+ \expandafter\section
+ \expandafter*%
+ \expandafter{%
+ \csname#1sname\endcsname
+ }%
+ }%
+ }%
+ \input{\csname#1@stream\endcsname}%
+ \endgroup
+ \global\expandafter\let\csname#1write\endcsname\relax
+ }%
+}%
+\chardef\@xvi=16\relax
+\mathchardef\@twopowerfourteen="4000
+\mathchardef\@twopowertwo="4
+\def\tally@float#1{%
+ \begingroup
+ \@tempcnta\count\@currbox
+ \divide\@tempcnta\@xxxii
+ \multiply\@tempcnta\@xxxii
+ \advance\count\@currbox-\@tempcnta
+ \divide\@tempcnta\@xxxii
+ \@ifnum{\count\@currbox>\@xvi}{%
+ \advance\count\@currbox-\@xvi\@booleantrue\@temp@sw
+ }{%
+ \@booleanfalse\@temp@sw
+ }%
+ \show@box@size@sw{%
+ \class@info{Float #1
+ (\the\@tempcnta)[\@temp@sw{16+}{}\the\count\@currbox]^^J%
+ (\the\ht\@currbox+\the\dp\@currbox)X\the\wd\@currbox
+ }%
+ }{}%
+ \endgroup
+ \expandafter\let
+ \expandafter\@tempa
+ \csname fbox@\csname ftype@#1\endcsname\endcsname
+ \@ifnotrelax\@tempa{%
+ \@ifhbox\@tempa{%
+ \setbox\@tempboxa\vbox{\unvcopy\@currbox\hrule}%
+ \dimen@\ht\@tempboxa
+ \divide\dimen@\@twopowerfourteen
+ \@ifdim{\wd\@tempboxa<\textwidth}{%
+ \advance\dimen@\ht\@tempa
+ \global\ht\@tempa\dimen@
+ }{%
+ \advance\dimen@\dp\@tempa
+ \global\dp\@tempa\dimen@
+ }%
+ }{}%
+ }{}%
+}%
+\def\total@float#1{%
+ \expandafter\let
+ \expandafter\@tempa
+ \csname fbox@\csname ftype@#1\endcsname\endcsname
+ \@ifnotrelax\@tempa{%
+ \@ifhbox\@tempa{%
+ \@tempdima\the\ht\@tempa\divide\@tempdima\@twopowertwo\@tempcnta\@tempdima
+ \@tempdimb\the\dp\@tempa\divide\@tempdimb\@twopowertwo\@tempcntb\@tempdimb
+ \class@info{Total #1: Column(\the\@tempcnta pt), Page(\the\@tempcnta pt)}%
+ }{}%
+ }{}%
+}%
+\def\write@float#1{\write@@float{#1}{#1}}%
+\def\endwrite@float{\@Esphack}%
+\def\write@floats#1{\write@@float{#1*}{#1}}%
+\def\endwrite@floats{\@Esphack}%
+\def\write@@float#1#2{%
+ \ifhmode
+ \@bsphack
+ \fi
+ \chardef\@tempc\csname#2write\endcsname
+ \toks@{\begin{#1}}%
+ \def\@tempb{#1}%
+ \expandafter\let\csname end#1\endcsname\endwrite@float
+ \catcode`\^^M\active
+ \@makeother\{\@makeother\}\@makeother\%
+ \write@floatline
+}%
+\begingroup
+ \catcode`\[\the\catcode`\{\catcode`\]\the\catcode`\}\@makeother\{\@makeother\}%
+ \gdef\float@end@tag#1\end{#2}#3\@nul[%
+ \def\@tempa[#2]%
+ \@ifx[\@tempa\@tempb][\end[#2]][\write@floatline]%
+ ]%
+ \obeylines%
+ \gdef\write@floatline#1^^M[%
+ \begingroup%
+ \newlinechar`\^^M%
+ \toks@\expandafter[\the\toks@#1]\immediate\write\@tempc[\the\toks@]%
+ \endgroup%
+ \toks@[]%
+ \float@end@tag#1\end{}\@nul%
+ ]%
+\endgroup
+\def\@alph#1{\ifcase#1\or a\or b\or c\or d\else\@ialph{#1}\fi}
+\def\@ialph#1{\ifcase#1\or \or \or \or \or e\or f\or g\or h\or i\or j\or
+ k\or l\or m\or n\or o\or p\or q\or r\or s\or t\or u\or v\or w\or x\or
+ y\or z\or aa\or bb\or cc\or dd\or ee\or ff\or gg\or hh\or ii\or jj\or
+ kk\or ll\or mm\or nn\or oo\or pp\or qq\or rr\or ss\or tt\or uu\or
+ vv\or ww\or xx\or yy\or zz\else\@ctrerr\fi}
+\def\@startsection#1#2#3#4#5#6{%
+ \@startsection@hook
+ \if@noskipsec \leavevmode \fi
+ \par
+ \@tempskipa #4\relax
+ \@afterindenttrue
+ \ifdim \@tempskipa <\z@
+ \@tempskipa -\@tempskipa \@afterindentfalse
+ \fi
+ \if@nobreak
+ \everypar{}%
+ \else
+ \addpenalty\@secpenalty\addvspace\@tempskipa
+ \fi
+ \@ifstar
+ {\@dblarg{\@ssect@ltx{#1}{#2}{#3}{#4}{#5}{#6}}}%
+ {\@dblarg{\@sect@ltx {#1}{#2}{#3}{#4}{#5}{#6}}}%
+}%
+\def\@startsection@hook{}%
+\class@info{Repairing broken LateX \string\@sect}%
+\def\@sect@ltx#1#2#3#4#5#6[#7]#8{%
+ \@ifnum{#2>\c@secnumdepth}{%
+ \def\H@svsec{\phantomsection}%
+ \let\@svsec\@empty
+ }{%
+ \H@refstepcounter{#1}%
+ \def\H@svsec{%
+ \phantomsection
+ }%
+ \protected@edef\@svsec{{#1}}%
+ \@ifundefined{@#1cntformat}{%
+ \prepdef\@svsec\@seccntformat
+ }{%
+ \expandafter\prepdef
+ \expandafter\@svsec
+ \csname @#1cntformat\endcsname
+ }%
+ }%
+ \@tempskipa #5\relax
+ \@ifdim{\@tempskipa>\z@}{%
+ \begingroup
+ \interlinepenalty \@M
+ #6{%
+ \@ifundefined{@hangfrom@#1}{\@hang@from}{\csname @hangfrom@#1\endcsname}%
+ {\hskip#3\relax\H@svsec}{\@svsec}{#8}%
+ }%
+ \@@par
+ \endgroup
+ \@ifundefined{#1mark}{\@gobble}{\csname #1mark\endcsname}{#7}%
+ \addcontentsline{toc}{#1}{%
+ \@ifnum{#2>\c@secnumdepth}{%
+ \protect\numberline{}%
+ }{%
+ \protect\numberline{\csname the#1\endcsname}%
+ }%
+ #8}%
+ }{%
+ \def\@svsechd{%
+ #6{%
+ \@ifundefined{@runin@to@#1}{\@runin@to}{\csname @runin@to@#1\endcsname}%
+ {\hskip#3\relax\H@svsec}{\@svsec}{#8}%
+ }%
+ \@ifundefined{#1mark}{\@gobble}{\csname #1mark\endcsname}{#7}%
+ \addcontentsline{toc}{#1}{%
+ \@ifnum{#2>\c@secnumdepth}{%
+ \protect\numberline{}%
+ }{%
+ \protect\numberline{\csname the#1\endcsname}%
+ }%
+ #8}%
+ }%
+ }%
+ \@xsect{#5}%
+}%
+\def\@hang@from#1#2#3{\@hangfrom{#1#2}#3}%
+\def\@runin@to #1#2#3{#1#2#3}%
+\def\@ssect@ltx#1#2#3#4#5#6[#7]#8{%
+ \def\H@svsec{\phantomsection}%
+ \@tempskipa #5\relax
+ \@ifdim{\@tempskipa>\z@}{%
+ \begingroup
+ \interlinepenalty \@M
+ #6{%
+ \@ifundefined{@hangfroms@#1}{\@hang@froms}{\csname @hangfroms@#1\endcsname}%
+ {\hskip#3\relax\H@svsec}{#8}%
+ }%
+ \@@par
+ \endgroup
+ \@ifundefined{#1smark}{\@gobble}{\csname #1smark\endcsname}{#7}%
+ \addcontentsline{toc}{#1}{\protect\numberline{}#8}%
+ }{%
+ \def\@svsechd{%
+ #6{%
+ \@ifundefined{@runin@tos@#1}{\@runin@tos}{\csname @runin@tos@#1\endcsname}%
+ {\hskip#3\relax\H@svsec}{#8}%
+ }%
+ \@ifundefined{#1smark}{\@gobble}{\csname #1smark\endcsname}{#7}%
+ \addcontentsline{toc}{#1}{\protect\numberline{}#8}%
+ }%
+ }%
+ \@xsect{#5}%
+}%
+\def\@hang@froms#1#2{#1#2}%
+\def\@runin@tos #1#2{#1#2}%
+\def\init@hyperref{%
+ \providecommand\phantomsection{}%
+ \providecommand\hyper@makecurrent[1]{}%
+ \providecommand\Hy@raisedlink[1]{}%
+ \providecommand\hyper@anchorstart[1]{}%
+ \providecommand\hyper@anchorend{}%
+ \providecommand\hyper@linkstart[2]{}%
+ \providecommand\hyper@linkend{}%
+ \providecommand\@currentHref{}%
+}%
+\let\H@refstepcounter\refstepcounter
+\appdef\document@inithook{%
+ \init@hyperref
+}%
+\def\sec@upcase#1{\relax{#1}}%
+\appdef\document@inithook{%
+ \@ifpackageloaded{array}{\switch@array}{\switch@tabular}%
+ \prepdef\endtabular{\endtabular@hook}%
+ \@provide\endtabular@hook{}%
+ \prepdef\endarray{\endarray@hook}%
+ \@provide\endarray@hook{}%
+ \providecommand\array@hook{}%
+ \prepdef\@tabular{\tabular@hook}%
+ \@provide\tabular@hook{}%
+}%
+\def\switch@tabular{%
+ \let\@array@sw\@array@sw@array
+ \@ifx{\@array\@array@LaTeX}{%
+ \@ifx{\multicolumn\multicolumn@LaTeX}{%
+ \@ifx{\@tabular\@tabular@LaTeX}{%
+ \@ifx{\@tabarray\@tabarray@LaTeX}{%
+ \@ifx{\array\array@LaTeX}{%
+ \@ifx{\endarray\endarray@LaTeX}{%
+ \@ifx{\endtabular\endtabular@LaTeX}{%
+ \@ifx{\@mkpream\@mkpream@LaTeX}{%
+ \@ifx{\@addamp\@addamp@LaTeX}{%
+ \@ifx{\@arrayacol\@arrayacol@LaTeX}{%
+ \@ifx{\@tabacol\@tabacol@LaTeX}{%
+ \@ifx{\@arrayclassz\@arrayclassz@LaTeX}{%
+ \@ifx{\@tabclassiv\@tabclassiv@LaTeX}{%
+ \@ifx{\@arrayclassiv\@arrayclassiv@LaTeX}{%
+ \@ifx{\@tabclassz\@tabclassz@LaTeX}{%
+ \@ifx{\@classv\@classv@LaTeX}{%
+ \@ifx{\hline\hline@LaTeX}{%
+ \@ifx{\@tabularcr\@tabularcr@LaTeX}{%
+ \@ifx{\@xtabularcr\@xtabularcr@LaTeX}{%
+ \@ifx{\@xargarraycr\@xargarraycr@LaTeX}{%
+ \@ifx{\@yargarraycr\@yargarraycr@LaTeX}{%
+ \true@sw
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ {%
+ \class@info{Patching LaTeX tabular.}%
+ }{%
+ \class@info{Unrecognized LaTeX tabular. Please update this document class! (Proceeding with fingers crossed.)}%
+ }%
+ \let\@array\@array@ltx
+ \let\multicolumn\multicolumn@ltx
+ \let\@tabular\@tabular@ltx
+ \let\@tabarray\@tabarray@ltx
+ \let\array\array@ltx
+ \let\endarray\endarray@ltx
+ \let\endtabular\endtabular@ltx
+ \let\@mkpream\@mkpream@ltx
+ \let\@addamp\@addamp@ltx
+ \let\@arrayacol\@arrayacol@ltx
+ \let\@tabacol\@tabacol@ltx
+ \let\@arrayclassz\@arrayclassz@ltx
+ \let\@tabclassiv\@tabclassiv@ltx
+ \let\@arrayclassiv\@arrayclassiv@ltx
+ \let\@tabclassz\@tabclassz@ltx
+ \let\@classv\@classv@ltx
+ \let\hline\hline@ltx
+ \let\@tabularcr\@tabularcr@ltx
+ \let\@xtabularcr\@xtabularcr@ltx
+ \let\@xargarraycr\@xargarraycr@ltx
+ \let\@yargarraycr\@yargarraycr@ltx
+}%
+\def\switch@array{%
+ \@ifpackageloaded{colortbl}{\let\switch@array@info\colortbl@message}{\let\switch@array@info\array@message}%
+ \let\@array@sw\@array@sw@LaTeX
+ \@ifx{\@array\@array@array}{%
+ \@ifx{\@tabular\@tabular@array}{%
+ \@ifx{\@tabarray\@tabarray@array}{%
+ \@ifx{\array\array@array}{%
+ \@ifx{\endarray\endarray@array}{%
+ \@ifx{\endtabular\endtabular@array}{%
+ \@ifx{\@mkpream\@mkpream@array}{%
+ \@ifx{\@classx\@classx@array}{%
+ \@ifx{\insert@column\insert@column@array}{%
+ \@ifx{\@arraycr\@arraycr@array}{%
+ \@ifx{\@xarraycr\@xarraycr@array}{%
+ \@ifx{\@xargarraycr\@xargarraycr@array}{%
+ \@ifx{\@yargarraycr\@yargarraycr@array}{%
+ \true@sw
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }{%
+ \class@info{Patching array package.}%
+ }{%
+ \switch@array@info
+ }%
+ \let\@array \@array@array@new
+ \let\@@array \@array % Cosi fan tutti
+ \let\@tabular \@tabular@array@new
+ \let\@tabarray \@tabarray@array@new
+ \let\array \array@array@new
+ \let\endarray \endarray@array@new
+ \let\endtabular\endtabular@array@new
+ \let\@mkpream \@mkpream@array@new
+ \let\@classx \@classx@array@new
+ \let\@arrayacol\@arrayacol@ltx
+ \let\@tabacol \@tabacol@ltx
+ \let\insert@column\insert@column@array@new
+ \expandafter\let\csname endtabular*\endcsname\endtabular % Cosi fan tutti
+ \let\@arraycr \@arraycr@new
+ \let\@xarraycr \@xarraycr@new
+ \let\@xargarraycr\@xargarraycr@new
+ \let\@yargarraycr\@yargarraycr@new
+}%
+\def\array@message{%
+ \class@info{Unrecognized array package. Please update this document class! (Proceeding with fingers crossed.)}%
+}%
+\def\colortbl@message{%
+ \class@info{colortbl package is loaded. (Proceeding with fingers crossed.)}%
+}%
+\def\@array@sw@LaTeX{\@ifx{\\\@tabularcr}}%
+\def\@array@sw@array{\@ifx{\d@llarbegin\begingroup}}%
+\def\@tabular@LaTeX{%
+ \leavevmode
+ \hbox\bgroup$%
+ \let\@acol\@tabacol
+ \let\@classz\@tabclassz
+ \let\@classiv\@tabclassiv
+ \let\\\@tabularcr
+ \@tabarray
+}%
+\def\@tabular@ltx{%
+ \let\@acoll\@tabacoll
+ \let\@acolr\@tabacolr
+ \let\@acol\@tabacol
+ \let\@classz\@tabclassz
+ \let\@classiv\@tabclassiv
+ \let\\\@tabularcr
+ \@tabarray
+}%
+\def\@tabular@array{%
+ \leavevmode
+ \hbox\bgroup$%
+ \col@sep\tabcolsep
+ \let\d@llarbegin\begingroup
+ \let\d@llarend\endgroup
+ \@tabarray
+}%
+\def\@tabular@array@new{%
+ \let\@acoll\@tabacoll
+ \let\@acolr\@tabacolr
+ \let\@acol\@tabacol
+ \let\d@llarbegin\begingroup
+ \let\d@llarend\endgroup
+ \@tabarray
+}%
+\def\@tabarray@LaTeX{%
+ \m@th\@ifnextchar[\@array{\@array[c]}%
+}%
+\def\@tabarray@ltx{%
+ \m@th\@ifnextchar[\@array{\expandafter\@array\expandafter[\array@default]}%
+}%
+\def\@tabarray@array{%
+ \@ifnextchar[{\@@array}{\@@array[c]}%
+}%
+\def\@tabarray@array@new{%
+ \@ifnextchar[{\@@array}{\expandafter\@@array\expandafter[\array@default]}%
+}%
+\newcount\intertabularlinepenalty
+\intertabularlinepenalty=100
+\newcount\@tbpen
+\appdef\samepage{\intertabularlinepenalty\@M}%
+\def\@tabularcr@LaTeX{{\ifnum 0=`}\fi \@ifstar \@xtabularcr \@xtabularcr}%
+\def\@tabularcr@ltx{{\ifnum 0=`}\fi \@ifstar {\global \@tbpen \@M \@xtabularcr }{\global \@tbpen \intertabularlinepenalty \@xtabularcr }}%
+\def\@xtabularcr@LaTeX{\@ifnextchar [\@argtabularcr {\ifnum 0=`{\fi }\cr }}%
+\def\@xtabularcr@ltx{\@ifnextchar [\@argtabularcr {\ifnum 0=`{\fi }\cr \noalign {\penalty \@tbpen }}}%
+\def\@xargarraycr@LaTeX#1{\@tempdima #1\advance \@tempdima \dp \@arstrutbox \vrule \@height \z@ \@depth \@tempdima \@width \z@ \cr}%
+\def\@xargarraycr@ltx#1{\@tempdima #1\advance \@tempdima \dp \@arstrutbox \vrule \@height \z@ \@depth \@tempdima \@width \z@ \cr \noalign {\penalty \@tbpen }}%
+\def\@yargarraycr@LaTeX#1{\cr \noalign {\vskip #1}}%
+\def\@yargarraycr@ltx#1{\cr \noalign {\penalty \@tbpen \vskip #1}}%
+\def\@arraycr@array{%
+ \relax
+ \iffalse{\fi\ifnum 0=`}\fi
+ \@ifstar \@xarraycr \@xarraycr
+}%
+\def\@arraycr@new{%
+ \relax
+ \iffalse{\fi\ifnum 0=`}\fi
+ \@ifstar {\global \@tbpen \@M \@xarraycr }{\global \@tbpen \intertabularlinepenalty \@xarraycr }%
+}%
+\def\@xarraycr@array{%
+ \@ifnextchar [%]
+ \@argarraycr {\ifnum 0=`{}\fi\cr}%
+}%
+\def\@xarraycr@new{%
+ \@ifnextchar [%]
+ \@argarraycr {\ifnum 0=`{}\fi\cr \noalign {\penalty \@tbpen }}%
+}%
+\def\@xargarraycr@array#1{%
+ \unskip
+ \@tempdima #1\advance\@tempdima \dp\@arstrutbox
+ \vrule \@depth\@tempdima \@width\z@
+ \cr
+}%
+\def\@xargarraycr@new#1{%
+ \unskip
+ \@tempdima #1\advance\@tempdima \dp\@arstrutbox
+ \vrule \@depth\@tempdima \@width\z@
+ \cr
+ \noalign {\penalty \@tbpen }%
+}%
+\def\@yargarraycr@array#1{%
+ \cr
+ \noalign{\vskip #1}%
+}%
+\def\@yargarraycr@new#1{%
+ \cr
+ \noalign{\penalty \@tbpen \vskip #1}%
+}%
+\def\array@LaTeX{%
+ \let\@acol\@arrayacol
+ \let\@classz\@arrayclassz
+ \let\@classiv\@arrayclassiv
+ \let\\\@arraycr
+ \let\@halignto\@empty
+ \@tabarray
+}%
+\def\array@ltx{%
+ \@ifmmode{}{\@badmath$}%
+ \let\@acoll\@arrayacol
+ \let\@acolr\@arrayacol
+ \let\@acol\@arrayacol
+ \let\@classz\@arrayclassz
+ \let\@classiv\@arrayclassiv
+ \let\\\@arraycr
+ \let\@halignto\@empty
+ \@tabarray
+}%
+\def\array@array{%
+ \col@sep\arraycolsep
+ \def\d@llarbegin{$}\let\d@llarend\d@llarbegin\gdef\@halignto{}%
+ \@tabarray
+}
+\def\array@array@new{%
+ \@ifmmode{}{\@badmath$}%
+ \let\@acoll\@arrayacol
+ \let\@acolr\@arrayacol
+ \let\@acol\@arrayacol
+ \def\d@llarbegin{$}%
+ \let\d@llarend\d@llarbegin
+ \gdef\@halignto{}%
+ \@tabarray
+}%
+\def\@array@LaTeX[#1]#2{%
+ \if #1t\vtop \else \if#1b\vbox \else \vcenter \fi\fi
+ \bgroup
+ \setbox\@arstrutbox\hbox{%
+ \vrule \@height\arraystretch\ht\strutbox
+ \@depth\arraystretch \dp\strutbox
+ \@width\z@}%
+ \@mkpream{#2}%
+ \edef\@preamble{%
+ \ialign \noexpand\@halignto
+ \bgroup \@arstrut \@preamble \tabskip\z@skip \cr}%
+ \let\@startpbox\@@startpbox \let\@endpbox\@@endpbox
+ \let\tabularnewline\\%
+ \let\par\@empty
+ \let\@sharp##%
+ \set@typeset@protect
+ \lineskip\z@skip\baselineskip\z@skip
+ \ifhmode \@preamerr\z@ \@@par\fi
+ \@preamble
+}%
+\def\@array@ltx[#1]#2{%
+ \@nameuse{@array@align@#1}%
+ \set@arstrutbox
+ \@mkpream{#2}%
+ \prepdef\@preamble{%
+ \tabskip\tabmid@skip
+ \@arstrut
+ }%
+ \appdef\@preamble{%
+ \tabskip\tabright@skip
+ \cr
+ \array@row@pre
+ }%
+ \let\tabularnewline\\%
+ \let\par\@empty
+ \let\@sharp##%
+ \set@typeset@protect
+ \lineskip\z@skip\baselineskip\z@skip
+ \tabskip\tableft@skip\relax
+ \ifhmode \@preamerr\z@ \@@par\fi
+ \everycr{}%
+ \expandafter\halign\expandafter\@halignto\expandafter\bgroup\@preamble
+}%
+\def\set@arstrutbox{%
+ \setbox\@arstrutbox\hbox{%
+ \vrule \@height\arraystretch\ht\strutbox
+ \@depth\arraystretch \dp\strutbox
+ \@width\z@
+ }%
+}%
+\def\@array@array[#1]#2{%
+ \@tempdima \ht \strutbox
+ \advance \@tempdima by\extrarowheight
+ \setbox \@arstrutbox \hbox{\vrule
+ \@height \arraystretch \@tempdima
+ \@depth \arraystretch \dp \strutbox
+ \@width \z@}%
+ \begingroup
+ \@mkpream{#2}%
+ \xdef\@preamble{\noexpand \ialign \@halignto
+ \bgroup \@arstrut \@preamble
+ \tabskip \z@ \cr}%
+ \endgroup
+ \@arrayleft
+ \if #1t\vtop \else \if#1b\vbox \else \vcenter \fi \fi
+ \bgroup
+ \let \@sharp ##\let \protect \relax
+ \lineskip \z@
+ \baselineskip \z@
+ \m@th
+ \let\\\@arraycr \let\tabularnewline\\\let\par\@empty \@preamble
+}%
+\def\@array@array@new[#1]#2{%
+ \@tempdima\ht\strutbox
+ \advance\@tempdima by\extrarowheight
+ \setbox\@arstrutbox\hbox{%
+ \vrule \@height\arraystretch\@tempdima
+ \@depth \arraystretch\dp\strutbox
+ \@width \z@
+ }%
+ \begingroup
+ \@mkpream{#2}%
+ \xdef\@preamble{\@preamble}%
+ \endgroup
+ \prepdef\@preamble{%
+ \tabskip\tabmid@skip
+ \@arstrut
+ }%
+ \appdef\@preamble{%
+ \tabskip\tabright@skip
+ \cr
+ \array@row@pre
+ }%
+ \@arrayleft
+ \@nameuse{@array@align@#1}%
+ \m@th
+ \let\\\@arraycr
+ \let\tabularnewline\\%
+ \let\par\@empty
+ \let\@sharp##%
+ \set@typeset@protect
+ \lineskip\z@\baselineskip\z@
+ \tabskip\tableft@skip
+ \everycr{}%
+ \expandafter\halign\expandafter\@halignto\expandafter\bgroup\@preamble
+}%
+\def\endarray@LaTeX{%
+ \crcr\egroup\egroup
+}%
+\def\endarray@ltx{%
+ \crcr\array@row@pst\egroup\egroup
+}%
+\def\endarray@array{%
+ \crcr \egroup \egroup \@arrayright \gdef\@preamble{}%
+}%
+\def\endarray@array@new{%
+ \crcr\array@row@pst\egroup\egroup % Same as \endarray@ltx
+ \@arrayright
+ \global\let\@preamble\@empty
+}%
+\def\endtabular@LaTeX{%
+ \crcr\egroup\egroup $\egroup
+}%
+\def\endtabular@ltx{%
+ \endarray
+}%
+\def\endtabular@array{%
+ \endarray $\egroup
+}%
+\def\endtabular@array@new{%
+ \endarray
+}%
+\@namedef{endtabular*}{\endtabular}%
+\long\def\multicolumn@LaTeX#1#2#3{%
+ \multispan{#1}\begingroup
+ \@mkpream{#2}%
+ \def\@sharp{#3}\set@typeset@protect
+ \let\@startpbox\@@startpbox\let\@endpbox\@@endpbox
+ \@arstrut \@preamble\hbox{}\endgroup\ignorespaces
+}%
+\long\def\multicolumn@ltx#1#2#3{%
+ \multispan{#1}%
+ \begingroup
+ \@mkpream{#2}%
+ \def\@sharp{#3}%
+ \set@typeset@protect
+ %\let\@startpbox\@@startpbox\let\@endpbox\@@endpbox
+ \@arstrut
+ \@preamble
+ \hbox{}%
+ \endgroup
+ \ignorespaces
+}%
+\def\@array@align@t{\leavevmode\vtop\bgroup}%
+\def\@array@align@b{\leavevmode\vbox\bgroup}%
+\def\@array@align@c{\leavevmode\@ifmmode{\vcenter\bgroup}{$\vcenter\bgroup\aftergroup$\aftergroup\relax}}%
+\def\@array@align@v{%
+ \@ifmmode{%
+ \@badmath
+ \vcenter\bgroup
+ }{%
+ \@ifinner{%
+ $\vcenter\bgroup\aftergroup$
+ }{%
+ \@@par\bgroup
+ }%
+ }%
+}%
+\def\array@default{c}%
+\def\array@row@rst{%
+ \let\@array@align@v\@array@align@c
+}%
+\def\array@row@pre{}%
+\def\array@row@pst{}%
+\newcommand\toprule{\tab@rule{\column@font}{\column@fil}{\frstrut}}%
+\newcommand\colrule{\unskip\lrstrut\\\tab@rule{\body@font}{}{\frstrut}}%
+\newcommand\botrule{\unskip\lrstrut\\\noalign{\hline@rule}{}}%
+\def\hline@LaTeX{%
+ \noalign{\ifnum0=`}\fi\hrule \@height \arrayrulewidth \futurelet
+ \reserved@a\@xhline
+}%
+\def\hline@ltx{%
+ \noalign{%
+ \ifnum0=`}\fi
+ \hline@rule
+ \futurelet\reserved@a\@xhline
+ % \noalign ended in \@xhline
+}%
+\def\@xhline@unneeded{%
+ \say\reserved@a
+ \ifx\reserved@a\hline
+ \vskip\doublerulesep
+ \vskip-\arrayrulewidth
+ \fi
+ \ifnum0=`{\fi}%
+}%
+\def\tab@rule#1#2#3{%
+ \crcr
+ \noalign{%
+ \hline@rule
+ \gdef\@arstrut@hook{%
+ \global\let\@arstrut@hook\@empty
+ #3%
+ }%
+ \gdef\cell@font{#1}%
+ \gdef\cell@fil{#2}%
+ }%
+}%
+\def\column@font{}%
+\def\column@fil{}%
+\def\body@font{}%
+\def\cell@font{}%
+\def\frstrut{}%
+\def\lrstrut{}%
+\def\@arstrut@hline{%
+ \relax
+ \@ifmmode{\copy}{\unhcopy}\@arstrutbox@hline
+ \@arstrut@hook
+}%
+\let\@arstrut@org\@arstrut
+\def\@arstrut@hook{%
+ \global\let\@arstrut\@arstrut@org
+}%
+\newbox\@arstrutbox@hline
+\appdef\set@arstrutbox{%
+ \setbox\@arstrutbox@hline\hbox{%
+ \setbox\z@\hbox{$0^{0}_{}$}%
+ \dimen@\ht\z@\advance\dimen@\@arstrut@hline@clnc
+ \@ifdim{\dimen@<\arraystretch\ht\strutbox}{\dimen@=\arraystretch\ht\strutbox}{}%
+ \vrule \@height\dimen@
+ \@depth\arraystretch \dp\strutbox
+ \@width\z@
+ }%
+}%
+\def\hline@rule{%
+ \hrule \@height \arrayrulewidth
+ \global\let\@arstrut\@arstrut@hline
+}%
+\def\@arstrut@hline@clnc{2\p@}% % Klootch: magic number
+\def\tableft@skip{\z@skip}%
+\def\tabmid@skip{\z@skip}%\@flushglue
+\def\tabright@skip{\z@skip}%
+\def\tableftsep{\tabcolsep}%
+\def\tabmidsep{\tabcolsep}%
+\def\tabrightsep{\tabcolsep}%
+\def\cell@fil{}%
+\def\pbox@hook{}%
+\appdef\@arstrut{\@arstrut@hook}%
+\let\@arstrut@hook\@empty
+\def\@addtopreamble{\appdef\@preamble}%
+\def\@mkpream@LaTeX#1{%
+ \@firstamptrue\@lastchclass6
+ \let\@preamble\@empty
+ \let\protect\@unexpandable@protect
+ \let\@sharp\relax
+ \let\@startpbox\relax\let\@endpbox\relax
+ \@expast{#1}%
+ \expandafter\@tfor \expandafter
+ \@nextchar \expandafter:\expandafter=\reserved@a\do
+ {\@testpach\@nextchar
+ \ifcase \@chclass \@classz \or \@classi \or \@classii \or \@classiii
+ \or \@classiv \or\@classv \fi\@lastchclass\@chclass}%
+ \ifcase \@lastchclass \@acol
+ \or \or \@preamerr \@ne\or \@preamerr \tw@\or \or \@acol \fi
+}%
+\def\@mkpream@ltx#1{%
+ \@firstamptrue
+ \@lastchclass6
+ \let\@preamble\@empty
+ \let\protect\@unexpandable@protect
+ \let\@sharp\relax
+ \@expast{#1}%
+ \expandafter\@tfor\expandafter\@nextchar\expandafter:\expandafter=\reserved@a
+ \do{%
+ \expandafter\@testpach\expandafter{\@nextchar}%
+ \ifcase\@chclass
+ \@classz
+ \or
+ \@classi
+ \or
+ \@classii
+ \or
+ \@classiii
+ \or
+ \@classiv
+ \or
+ \@classv
+ \fi
+ \@lastchclass\@chclass
+ }%
+ \ifcase\@lastchclass
+ \@acolr % right-hand column
+ \or
+ \or
+ \@preamerr\@ne
+ \or
+ \@preamerr\tw@
+ \or
+ \or
+ \@acolr % right-hand column
+ \fi
+}%
+\def\insert@column@array{%
+ \the@toks \the \@tempcnta
+ \ignorespaces \@sharp \unskip
+ \the@toks \the \count@ \relax
+}%
+\def\insert@column@array@new{%
+ \the@toks\the\@tempcnta
+ \array@row@rst\cell@font
+ \ignorespaces\@sharp\unskip
+ \the@toks\the\count@
+ \relax
+}%
+\def\@mkpream@relax{%
+ \let\tableftsep \relax
+ \let\tabmidsep \relax
+ \let\tabrightsep \relax
+ \let\array@row@rst\relax
+ \let\cell@font \relax
+ \let\@startpbox \relax
+}%
+\def\@mkpream@array#1{%
+ \gdef\@preamble{}\@lastchclass 4 \@firstamptrue
+ \let\@sharp\relax \let\@startpbox\relax \let\@endpbox\relax
+ \@temptokena{#1}\@tempswatrue
+ \@whilesw\if@tempswa\fi{\@tempswafalse\the\NC@list}%
+ \count@\m@ne
+ \let\the@toks\relax
+ \prepnext@tok
+ \expandafter \@tfor \expandafter \@nextchar
+ \expandafter :\expandafter =\the\@temptokena \do
+ {\@testpach
+ \ifcase \@chclass \@classz \or \@classi \or \@classii
+ \or \save@decl \or \or \@classv \or \@classvi
+ \or \@classvii \or \@classviii
+ \or \@classx
+ \or \@classx \fi
+ \@lastchclass\@chclass}%
+ \ifcase\@lastchclass
+ \@acol \or
+ \or
+ \@acol \or
+ \@preamerr \thr@@ \or
+ \@preamerr \tw@ \@addtopreamble\@sharp \or
+ \or
+ \else \@preamerr \@ne \fi
+ \def\the@toks{\the\toks}%
+}%
+\def\@mkpream@array@new#1{%
+ \gdef\@preamble{}%
+ \@lastchclass\f@ur
+ \@firstamptrue
+ \let\@sharp\relax
+ \@mkpream@relax
+ \@temptokena{#1}\@tempswatrue
+ \@whilesw\if@tempswa\fi{\@tempswafalse\the\NC@list}%
+ \count@\m@ne
+ \let\the@toks\relax
+ \prepnext@tok
+ \expandafter\@tfor\expandafter\@nextchar\expandafter:\expandafter=\the\@temptokena
+ \do{%
+ \@testpach
+ \ifcase\@chclass
+ \@classz
+ \or
+ \@classi
+ \or
+ \@classii
+ \or
+ \save@decl
+ \or
+ \or
+ \@classv
+ \or
+ \@classvi
+ \or
+ \@classvii
+ \or
+ \@classviii
+ \or
+ \@classx
+ \or
+ \@classx
+ \fi
+ \@lastchclass\@chclass
+ }%
+ \ifcase\@lastchclass
+ \@acolr % right-hand column
+ \or
+ \or
+ \@acolr % right-hand column
+ \or
+ \@preamerr\thr@@
+ \or
+ \@preamerr\tw@\@addtopreamble\@sharp
+ \or
+ \or
+ \else
+ \@preamerr\@ne
+ \fi
+ \def\the@toks{\the\toks}%
+}%
+\appdef\@mkpream@relax{%
+ \let\CT@setup \relax
+ \let\CT@color \relax
+ \let\CT@do@color \relax
+ \let\color \relax
+ \let\CT@column@color\relax
+ \let\CT@row@color \relax
+ \let\CT@cell@color \relax
+}%
+\def\@addamp@LaTeX{%
+ \if@firstamp\@firstampfalse\else\edef\@preamble{\@preamble &}\fi
+}%
+\def\@addamp@ltx{%
+ \if@firstamp\@firstampfalse\else\@addtopreamble{&}\fi
+}%
+\def\@arrayacol@LaTeX{%
+ \edef\@preamble{\@preamble \hskip \arraycolsep}%
+}%
+\def\@arrayacol@ltx{%
+ \@addtopreamble{\hskip\arraycolsep}%
+}%
+\def\@tabacoll{%
+ \@addtopreamble{\hskip\tableftsep\relax}%
+}%
+\def\@tabacol@LaTeX{%
+ \edef\@preamble{\@preamble \hskip \tabcolsep}%
+}%
+\def\@tabacol@ltx{%
+ \@addtopreamble{\hskip\tabmidsep\relax}%
+}%
+\def\@tabacolr{%
+ \@addtopreamble{\hskip\tabrightsep\relax}%
+}%
+\def\@arrayclassz@LaTeX{%
+ \ifcase \@lastchclass \@acolampacol \or \@ampacol \or
+ \or \or \@addamp \or
+ \@acolampacol \or \@firstampfalse \@acol \fi
+ \edef\@preamble{\@preamble
+ \ifcase \@chnum
+ \hfil$\relax\@sharp$\hfil \or $\relax\@sharp$\hfil
+ \or \hfil$\relax\@sharp$\fi}%
+}%
+\def\@arrayclassz@ltx{%
+ \ifcase\@lastchclass
+ \@acolampacol
+ \or
+ \@ampacol
+ \or
+ \or
+ \or
+ \@addamp
+ \or
+ \@acolampacol
+ \or
+ \@firstampfalse\@acoll
+ \fi
+ \ifcase\@chnum
+ \@addtopreamble{%
+ \hfil\array@row@rst$\relax\@sharp$\hfil
+ }%
+ \or
+ \@addtopreamble{%
+ \array@row@rst$\relax\@sharp$\hfil
+ }%
+ \or
+ \@addtopreamble{%
+ \hfil\array@row@rst$\relax\@sharp$%
+ }%
+ \fi
+}%
+\def\@tabclassz@LaTeX{%
+ \ifcase\@lastchclass
+ \@acolampacol
+ \or
+ \@ampacol
+ \or
+ \or
+ \or
+ \@addamp
+ \or
+ \@acolampacol
+ \or
+ \@firstampfalse\@acol
+ \fi
+ \edef\@preamble{%
+ \@preamble{%
+ \ifcase\@chnum
+ \hfil\ignorespaces\@sharp\unskip\hfil
+ \or
+ \hskip1sp\ignorespaces\@sharp\unskip\hfil
+ \or
+ \hfil\hskip1sp\ignorespaces\@sharp\unskip
+ \fi}}%
+}%
+\def\@tabclassz@ltx{%
+ \ifcase\@lastchclass
+ \@acolampacol
+ \or
+ \@ampacol
+ \or
+ \or
+ \or
+ \@addamp
+ \or
+ \@acolampacol
+ \or
+ \@firstampfalse\@acoll
+ \fi
+ \ifcase\@chnum
+ \@addtopreamble{%
+ {\hfil\array@row@rst\cell@font\ignorespaces\@sharp\unskip\hfil}%
+ }%
+ \or
+ \@addtopreamble{%
+ {\cell@fil\hskip1sp\array@row@rst\cell@font\ignorespaces\@sharp\unskip\hfil}%
+ }%
+ \or
+ \@addtopreamble{%
+ {\hfil\hskip1sp\array@row@rst\cell@font\ignorespaces\@sharp\unskip\cell@fil}%
+ }%
+ \fi
+}%
+\def\@tabclassiv@LaTeX{%
+ \@addtopreamble\@nextchar
+}%
+\def\@tabclassiv@ltx{%
+ \expandafter\@addtopreamble\expandafter{\@nextchar}%
+}%
+\def\@arrayclassiv@LaTeX{%
+ \@addtopreamble{$\@nextchar$}%
+}%
+\def\@arrayclassiv@ltx{%
+ \expandafter\@addtopreamble\expandafter{\expandafter$\@nextchar$}%
+}%
+\def\@classv@LaTeX{%
+ \@addtopreamble{\@startpbox{\@nextchar}\ignorespaces
+ \@sharp\@endpbox}%
+}%
+\def\@classv@ltx{%
+ \expandafter\@addtopreamble
+ \expandafter{%
+ \expandafter \@startpbox
+ \expandafter {\@nextchar}%
+ \pbox@hook\array@row@rst\cell@font\ignorespaces\@sharp\@endpbox
+ }%
+}%
+\def\@classx@array{%
+ \ifcase \@lastchclass
+ \@acolampacol \or
+ \@addamp \@acol \or
+ \@acolampacol \or
+ \or
+ \@acol \@firstampfalse \or
+ \@addamp
+ \fi
+}%
+\def\@classx@array@new{%
+ \ifcase \@lastchclass
+ \@acolampacol
+ \or
+ \@addamp \@acol
+ \or
+ \@acolampacol
+ \or
+ \or
+ \@firstampfalse\@acoll
+ \or
+ \@addamp
+ \fi
+}%
+\def\@xbitor@LaTeX #1{\@tempcntb \count#1
+ \ifnum \@tempcnta =\z@
+ \else
+ \divide\@tempcntb\@tempcnta
+ \ifodd\@tempcntb \@testtrue\fi
+ \fi}%
+\def\@xbitor@ltx#1{%
+ \@tempcntb\count#1\relax
+ \@ifnum{\@tempcnta=\z@}{}{%
+ \divide\@tempcntb\@tempcnta
+ \@ifodd\@tempcntb{\@testtrue}{}%
+ }%
+}%
+\@ifx{\@xbitor\@xbitor@LaTeX}{%
+ \class@info{Repairing broken LaTeX \string\@xbitor}%
+}{%
+ \class@info{Unrecognized LaTeX \string\@xbitor. Please update this document class! (Proceeding with fingers crossed.)}%
+}%
+\let\@xbitor\@xbitor@ltx
+\newcommand*\@gobble@opt@one[2][]{}%
+\def\@starttoc#1{%
+ \begingroup
+ \toc@pre
+ \makeatletter
+ \@input{\jobname.#1}%
+ \if@filesw
+ \expandafter\newwrite\csname tf@#1\endcsname
+ \immediate\openout \csname tf@#1\endcsname \jobname.#1\relax
+ \fi
+ \@nobreakfalse
+ \toc@post
+ \endgroup
+}%
+\def\toc@pre{}%
+\def\toc@post{}%
+\def\toc@@font{}%
+\def\ltxu@dotsep{\z@}%
+\let\tocdim@section \leftmargini
+\let\tocdim@subsection \leftmarginii
+\let\tocdim@subsubsection \leftmarginiii
+\let\tocdim@paragraph \leftmarginiv
+\let\tocdim@appendix \leftmarginv
+\let\tocdim@pagenum \leftmarginvi
+\def\toc@pre@auto{%
+ \toc@@font
+ \@tempdima\z@
+ \toc@setindent\@tempdima{section}%
+ \toc@setindent\@tempdima{subsection}%
+ \toc@setindent\@tempdima{subsubsection}%
+ \toc@setindent\@tempdima{paragraph}%
+ \toc@letdimen{appendix}%
+ \toc@letdimen{pagenum}%
+}%
+\def\toc@post@auto{%
+ \if@filesw
+ \begingroup
+ \toc@writedimen{section}%
+ \toc@writedimen{subsection}%
+ \toc@writedimen{subsubsection}%
+ \toc@writedimen{paragraph}%
+ \toc@writedimen{appendix}%
+ \toc@writedimen{pagenum}%
+ \endgroup
+ \fi
+}%
+\def\toc@setindent#1#2{%
+ \csname tocdim@#2\endcsname\tocdim@min\relax
+ \@ifundefined{tocmax@#2}{\@namedef{tocmax@#2}{\z@}}{}%
+ \advance#1\@nameuse{tocmax@#2}\relax
+ \expandafter\edef\csname tocleft@#2\endcsname{\the#1}%
+}%
+\def\toc@letdimen#1{%
+ \csname tocdim@#1\endcsname\tocdim@min\relax
+ \@ifundefined{tocmax@#1}{\@namedef{tocmax@#1}{\z@}}{}%
+ \expandafter\let\csname tocleft@#1\expandafter\endcsname\csname tocmax@#1\endcsname
+}%
+\def\toc@writedimen#1{%
+ \immediate\write\@auxout{%
+ \gdef\expandafter\string\csname tocmax@#1\endcsname{%
+ \expandafter\the\csname tocdim@#1\endcsname
+ }%
+ }%
+}%
+\def\l@@sections#1#2#3#4{%
+ \begingroup
+ \everypar{}%
+ \set@tocdim@pagenum\@tempboxa{#4}%
+ \global\@tempdima\csname tocdim@#2\endcsname
+ \leftskip\csname tocleft@#2\endcsname\relax
+ \dimen@\csname tocleft@#1\endcsname\relax
+ \parindent-\leftskip\advance\parindent\dimen@
+ \rightskip\tocleft@pagenum plus 1fil\relax
+ \skip@\parfillskip\parfillskip\z@
+ \let\numberline\numberline@@sections
+ \@nameuse{l@f@#2}%
+ \ignorespaces#3\unskip\nobreak\hskip\skip@
+ \hb@xt@\rightskip{\hfil\unhbox\@tempboxa}\hskip-\rightskip\hskip\z@skip
+ \expandafter\par
+ \expandafter\aftergroup\csname tocdim@#2%
+ \expandafter\endcsname
+ \expandafter\endgroup
+ \the\@tempdima\relax
+}%
+\def\set@tocdim@pagenum#1#2{%
+ \setbox#1\hbox{\ignorespaces#2}%
+ \@ifdim{\tocdim@pagenum<\wd#1}{\global\tocdim@pagenum\wd#1}{}%
+}%
+\def\numberline@@sections#1{%
+ \leavevmode\hb@xt@-\parindent{%
+ \hfil
+ \@if@empty{#1}{}{%
+ \setbox\z@\hbox{#1.\kern\ltxu@dotsep}%
+ \@ifdim{\@tempdima<\wd\z@}{\global\@tempdima\wd\z@}{}%
+ \unhbox\z@
+ }%
+ }%
+ \ignorespaces
+}%
+\def\tocdim@min{\z@}%
+\def\list#1#2{%
+ \ifnum \@listdepth >5\relax
+ \@toodeep
+ \else
+ \global\advance\@listdepth\@ne
+ \fi
+ \rightmargin\z@
+ \listparindent\z@
+ \itemindent\z@
+ \csname @list\romannumeral\the\@listdepth\endcsname
+ \def\@itemlabel{#1}%
+ \let\makelabel\@mklab
+ \@nmbrlistfalse
+ #2\relax
+ \@trivlist
+ \parskip\parsep
+ \set@listindent
+ \ignorespaces
+}%
+\def\set@listindent@parshape{%
+ \parindent\listparindent
+ \advance\@totalleftmargin\leftmargin
+ \advance\linewidth-\rightmargin
+ \advance\linewidth-\leftmargin
+ \parshape\@ne\@totalleftmargin\linewidth
+}%
+\def\set@listindent@{%
+ \parindent\listparindent
+ \advance\@totalleftmargin\leftmargin
+ \advance\rightskip\rightmargin
+ \advance\leftskip\@totalleftmargin
+}%
+\let\set@listindent\set@listindent@parshape
+\providecommand\href[0]{\begingroup\@sanitize@url\@href}%
+\def\@href#1{\@@startlink{#1}\endgroup\@@href}%
+\def\@@href#1{#1\@@endlink}%
+\providecommand \url [0]{\begingroup\@sanitize@url \@url }%
+\def \@url #1{\endgroup\@href {#1}{\URL@prefix#1}}%
+\providecommand \URL@prefix [0]{URL }%
+\providecommand\doi[0]{\begingroup\@sanitize@url\@doi}%
+\def\@doi#1{\endgroup\@@startlink{\doibase#1}doi:\discretionary {}{}{}#1\@@endlink }%
+\providecommand \doibase [0]{http://dx.doi.org/}%
+\providecommand \@sanitize@url[0]{\chardef\cat@space\the\catcode`\ \@sanitize\catcode`\ \cat@space}%
+\def\@@startlink#1{}%
+\def\@@endlink{}%
+\@ifxundefined \pdfoutput {\true@sw}{\@ifnum{\z@=\pdfoutput}{\true@sw}{\false@sw}}%
+{%
+ \def\@@startlink@hypertext#1{\leavevmode\special{html:<a href="#1">}}%
+ \def\@@endlink@hypertext{\special{html:</a>}}%
+}{%
+ \def\@@startlink@hypertext#1{%
+ \leavevmode
+ \pdfstartlink\pdfstartlink@attr
+ user{/Subtype/Link/A<</Type/Action/S/URI/URI(#1)>>}%
+ \relax
+ }%
+ \def\@@endlink@hypertext{\pdfendlink}%
+ \def\pdfstartlink@attr{attr{/Border[0 0 1 ]/H/I/C[0 1 1]}}%
+}%
+\def\hypertext@enable@ltx{%
+ \let\@@startlink\@@startlink@hypertext
+ \let\@@endlink\@@endlink@hypertext
+}%
+\def\href@Hy{\hyper@normalise \href@ }%
+\def\href@Hy@ltx{\@ifnextchar\bgroup\Hy@href{\hyper@normalise\href@}}%
+\def\Hy@href#{\hyper@normalise\href@}%
+\begingroup
+ \endlinechar=-1 %
+ \catcode`\^^A=14 %
+ \catcode`\^^M\active
+ \catcode`\%\active
+ \catcode`\#\active
+ \catcode`\_\active
+ \catcode`\$\active
+ \catcode`\&\active
+ \gdef\hyper@normalise@ltx{^^A
+ \begingroup
+ \catcode`\^^M\active
+ \def^^M{ }^^A
+ \catcode`\%\active
+ \let%\@percentchar
+ \let\%\@percentchar
+ \catcode`\#\active
+ \def#{\hyper@hash}^^A
+ \def\#{\hyper@hash}^^A
+ \@makeother\&^^A
+ \edef&{\string&}^^A
+ \edef\&{\string&}^^A
+ \edef\textunderscore{\string_}^^A
+ \let\_\textunderscore
+ \catcode`\_\active
+ \let_\textunderscore
+ \let~\hyper@tilde
+ \let\~\hyper@tilde
+ \let\textasciitilde\hyper@tilde
+ \let\\\@backslashchar
+ \edef${\string$}^^A
+ \Hy@safe@activestrue
+ \hyper@n@rmalise
+ }^^A
+ \catcode`\#=6 ^^A
+ \gdef\Hy@ActiveCarriageReturn@ltx{^^M}^^A
+ \gdef\hyper@n@rmalise@ltx#1#2{^^A
+ \def\Hy@tempa{#2}^^A
+ \ifx\Hy@tempa\Hy@ActiveCarriageReturn
+ \Hy@ReturnAfterElseFi{^^A
+ \hyper@@normalise{#1}^^A
+ }^^A
+ \else
+ \Hy@ReturnAfterFi{^^A
+ \hyper@@normalise{#1}{#2}^^A
+ }^^A
+ \fi
+ }^^A
+ \gdef\hyper@@normalise@ltx#1#2{^^A
+ \edef\Hy@tempa{^^A
+ \endgroup
+ \noexpand#1{\Hy@RemovePercentCr#2%^^M\@nil}^^A
+ }^^A
+ \Hy@tempa
+ }^^A
+ \gdef\Hy@RemovePercentCr@ltx#1%^^M#2\@nil{^^A
+ #1^^A
+ \ifx\limits#2\limits
+ \else
+ \Hy@ReturnAfterFi{^^A
+ \Hy@RemovePercentCr #2\@nil
+ }^^A
+ \fi
+ }^^A
+\endgroup
+\def\switch@hyperref@href{%
+ \expandafter\@ifx\expandafter{\csname href \endcsname\href@Hy}{
+ \class@info{Repairing hyperref 6.75r \string\href}%
+ \let\hyper@normalise\hyper@normalise@ltx
+ \let\hyper@@normalise\hyper@@normalise@ltx
+ \let\hyper@n@rmalise\hyper@n@rmalise@ltx
+ \let\Hy@ActiveCarriageReturn\Hy@ActiveCarriageReturn@ltx
+ \let\Hy@RemovePercentCr\Hy@RemovePercentCr@ltx
+ \let\href\href@Hy@ltx
+ }{}%
+}%
+\appdef\document@inithook{\switch@hyperref@href}%
+\def\typeout@org#1{%
+ \begingroup
+ \set@display@protect
+ \immediate\write\@unused{#1}%
+ \endgroup
+}%
+\long\def\typeout@ltx#1{%
+ \begingroup
+ \set@display@protect
+ \immediate\write\@unused{#1}%
+ \endgroup
+}%
+\@ifx{\typeout\typeout@org}{%
+ \class@info{Making \string\typeout\space \string\long}%
+ \let\typeout\typeout@ltx
+}{}%
+\typeout{%
+ltxfront%
+ [2010/07/25/20:33:00 4.1r frontmatter package (AO,DPC)]% \fileversion
+}%
+\appdef\class@documenthook{\frontmatter@init}%
+\let\frontmatter@init\@empty
+\newcommand\frontmatter@title[2][]{%
+ \def\@title{#2}%
+ \def\@shorttitle{#1}%
+ \let\@AF@join\@title@join
+}%
+\appdef\frontmatter@init{%
+ \def\@title{\class@warn{No title}}%
+ \let\@shorttitle\@empty
+ \let\@title@aux\@title@aux@cleared
+}%
+\def\@title@join{\expandafter\@title@join@\@title@aux}%
+\def\@title@join@#1#2{%
+ \def\@title@aux{{\@join{\@separator}{#1}{#2}}}%
+}%
+\def\@title@aux@cleared{{}}%
+\newcounter{affil}%
+\newcounter{collab}%
+\appdef\frontmatter@init{%
+ \c@affil\z@
+ \c@collab\z@
+}%
+\newcommand\frontmatter@author{% implicit #1
+ \@author@def{}% implicit #2
+}%
+\def\collaboration{% implicit #1
+ \@author@def{\@booleantrue\collaboration@sw}% implicit #2
+}%
+\appdef\frontmatter@init{%
+ \@booleanfalse\collaboration@sw
+}%
+\def\@author@cleared{{}{}{}}%
+\def\@author@gobble#1#2#3{}%
+\def\@author@init{%
+ \let\@author\@author@cleared
+ \@booleanfalse\collaboration@sw
+}%
+\def\@authorclear@sw{\@ifx{\@author\@author@cleared}}%
+\appdef\frontmatter@init{%
+ \@author@init
+}%
+\def\@author@def#1#2{%
+ \frontmatterverbose@sw{\typeout{\string\author\space\string\collaboration}}{}%
+ \move@AU\move@AF\move@AUAF
+ \let\@AF@join\@author@join
+ #1%
+ \def\@author{{#2}{}}%
+}%
+\def\@author@join@#1#2#3{%
+ \def\@author{{#1}{\@join{\@separator}{#2}{#3}}}%
+}%
+\def\@author@join{\expandafter\@author@join@\@author}%
+\def\move@AU{%
+ \@authorclear@sw{}{%
+ \collaboration@sw{%
+ \advance\c@collab\@ne
+ \@argswap{\CO@grp\CO@opr}%
+ }{%
+ \@argswap{\AU@grp\AU@opr}%
+ }%
+ {%
+ \expandafter\@argswap@val
+ \expandafter{\@author}%
+ {\expandafter\@argswap@val\expandafter{\the\c@collab}{\add@AUCO@grp}}%
+ }%
+ }%
+ \@author@init
+}%
+\def\add@AUCO@grp#1#2#3#4{%
+ \appdef#3{#4{#1}#2}%
+ \frontmatterverbose@sw{\say#3}{}%
+}%
+\def\@author@finish{%
+ \frontmatterverbose@sw{\typeout{\string\@author@finish}}{}%
+ \move@AU\move@AF
+ \@ifx{\AU@grp\@empty}{%
+ \@ifx{\CO@grp\@empty}%
+ }{%
+ \false@sw
+ }%
+ {}{%
+ \@ifx{\AF@grp\@empty}{%
+ \begingroup
+ \let\href\@secondoftwo
+ \let\AU@opr\@secondofthree
+ \let\CO@opr\@secondofthree
+ \let\footnote\@gobble
+ \@ifx{\CO@grp\@empty}{%
+ \class@warn{Assuming \string\noaffiliation\space for authors}%
+ \frontmatterverbose@sw{\say\AU@grp}%
+ }{%
+ \class@warn{Assuming \string\noaffiliation\space for collaboration}%
+ \frontmatterverbose@sw{\say\CO@grp}{}%
+ }%
+ \endgroup
+ \@affil@none\move@AF
+ }{}%
+ }%
+ \move@AUAF
+}%
+\def\@secondofthree#1#2#3{#2}%
+\def\@join#1#2#3{%
+ \@if@empty{#2}{#3}{#2#1#3}%
+}%
+\def\@separator{;\space}%
+\let\surname\@firstofone
+\let\firstname\@firstofone
+\newcommand\frontmatter@and{\class@err{\protect\and\space is not supported}}
+\def\cat@comma@active{\catcode`\,\active}%
+{\cat@comma@active\gdef,{\active@comma}}%
+\def\active@comma{,\penalty-300\relax}%
+\newcommand\affiliation{%
+ \frontmatterverbose@sw{\typeout{\string\affiliation}}{}%
+ \move@AU\move@AF
+ \begingroup
+ \cat@comma@active
+ \@affiliation
+}%
+\def\@affiliation#1{%
+ \endgroup
+ \let\@AF@join\@affil@join
+ \@affil@def{#1}%
+}%
+\newcommand\frontmatter@noaffiliation{%
+ \frontmatterverbose@sw{\typeout{\string\noaffiliation}}{}%
+ \move@AU\move@AF
+ \@affil@none\move@AF
+ \move@AUAF
+}%
+\def\blankaffiliation{{}}%
+\def\@affil@cleared{{{}}{}}%
+\def\@affil@nil{{\relax}{}}%
+\appdef\frontmatter@init{%
+ \@affil@init
+}%
+\def\@affil@none{%
+ \let\@affil\@affil@nil
+}%
+\def\@affil@init{%
+ \let\@affil\@affil@cleared
+}%
+\def\@affilclear@sw{\@ifx{\@affil\@affil@cleared}}%
+\def\@affil@def#1{%
+ \def\@affil{{#1}{}}%
+}%
+\def\@affil@join@#1#2#3{%
+ \def\@affil{{#1}{\@join{\@separator}{#2}{#3}}}%
+}%
+\def\@affil@join{\expandafter\@affil@join@\@affil}%
+\def\move@AF{%
+ \@affilclear@sw{}{%
+ \@booleanfalse\temp@sw
+ \let\@tempd\@empty
+ \@affils@sw{%
+ \expandafter\@affil@addr@def\expandafter\@tempa\@affil
+ \def\AFF@opr{\@affil@match\@tempa}%
+ \@AFF@list
+ }{}\temp@sw
+ {%
+ \expandafter\@affil@aux@def\expandafter\@tempb\@affil
+ \@ifx{\@tempb\@empty}{}{%
+ \@ifx{\@tempb\@tempd}{}{%
+ \class@warn{%
+ Ancillary information for \@tempa\space must not be different!
+ Please put all of it on the first instance%
+ }%
+ }%
+ }%
+ }%
+ {%
+ \@ifx{\@affil\@affil@nil}{%
+ \def\@tempc{0}%
+ \@argswap@val{0}%
+ }{%
+ \advance\c@affil\@ne
+ \expandafter\def\expandafter\@tempc\expandafter{\the\c@affil}%
+ \expandafter\@argswap@val\expandafter{\the\c@affil}%
+ }%
+ {%
+ \expandafter\@argswap@val\expandafter{\the\c@collab}{%
+ \expandafter\@argswap@val\expandafter{\@affil}{%
+ \add@list@val@val@val\@AFF@list\AFF@opr
+ }%
+ }%
+ }%
+ }%
+ \appdef@eval\AF@grp\@tempc
+ \frontmatterverbose@sw{\say\AF@grp}{}%
+ \@affil@init
+ }%
+}%
+\def\@affil@addr@def#1#2#3{%
+ \def#1{#2}%
+}%
+\def\@affil@aux@def#1#2#3{%
+ \def#1{#3}%
+}%
+\def\add@list@val@val@val#1#2#3#4#5{%
+ \appdef#1{#2{#5}{#4}#3}%
+ \frontmatterverbose@sw{\say#1}{}%
+}%
+\def\@affil@match#1#2#3#4#5{%
+ \temp@sw{}{%
+ \def\@tempifx{#4}%
+ \@ifx{\@tempifx#1}{%
+ \groupauthors@sw{%
+ \@ifnum{#3=\c@collab}{%
+ \true@sw
+ }{%
+ \false@sw
+ }%
+ }{%
+ \true@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ {%
+ \@booleantrue\temp@sw
+ \def\@tempc{#2}%
+ \def\@tempd{#5}%
+ }{%
+ }%
+ }%
+}%
+\def\move@AUAF{%
+ \frontmatterverbose@sw{\say\AU@grp\say\AF@grp\say\CO@grp}{}%
+ \@ifx{\AF@grp\@empty}{%
+ \@ifx{\@empty\CO@grp}{%
+ }{%
+ \appdef \@AAC@list{\AF@opr{{0}}}%
+ \appdef@e \@AAC@list{\CO@grp}%
+ \appdef@e \@AFG@list{\CO@grp}%
+ \let\CO@grp\@empty
+ }%
+ }{%
+ \appdef \@AAC@list{\AF@opr}%
+ \appdef@eval\@AAC@list{\AF@grp}%
+ \appdef@e \@AAC@list{\AU@grp}%
+ \@ifx{\@empty\AU@grp}{%
+ \@ifx{\@empty\CO@grp}%
+ }{%
+ \false@sw
+ }%
+ {%
+ }{%
+ \@booleanfalse\temp@sw
+ \def\AFG@opr{\x@match\AF@grp}%
+ \let\CO@opr\@author@gobble
+ \@AFG@list
+ \temp@sw{}{%
+ \appdef \@AFG@list{\AFG@opr}%
+ \appdef@eval\@AFG@list{\AF@grp}%
+ }%
+ \@ifx{\@empty\CO@grp}{}{%
+ \appdef@e \@AAC@list{\CO@grp}%
+ \appdef@e \@AFG@list{\CO@grp}%
+ \let\CO@grp\@empty
+ }%
+ }%
+ \let\CO@grp\@empty
+ \let\AU@grp\@empty
+ \let\AF@grp\@empty
+ }%
+ \frontmatterverbose@sw{\say\@AAC@list\say\@AFG@list}{}%
+}%
+\appdef\frontmatter@init{%
+ \let\AU@grp\@empty
+ \let\CO@grp\@empty
+ \let\AF@grp\@empty
+ \let\@AAC@list\@empty
+ \let\@AFG@list\@empty
+ \let\@AFF@list\@empty
+}%
+\appdef\frontmatter@init{%
+ \let\@AF@join\@AF@join@error
+}%
+\def\@AF@join@error#1{%
+ \class@warn{%
+ \string\email, \string\homepage, \string\thanks, or \string\altaffiliation\space
+ appears in wrong context.
+ }%
+}%
+\def\sanitize@url{%
+ \@makeother\%%
+ \@makeother\~%
+ \@makeother\_%
+}%
+\newcommand*\email[1][]{\begingroup\sanitize@url\@email{#1}}%
+\def\@email#1#2{%
+ \endgroup
+ \@AF@join{#1\href{mailto:#2}{#2}}%
+}%
+\newcommand*\homepage[1][]{\begingroup\sanitize@url\@homepage{#1}}%
+\def\@homepage#1#2{%
+ \endgroup
+ \@AF@join{#1\href{#2}{#2}}%
+}%
+\appdef\class@documenthook{%
+ \providecommand\href[1]{}%
+}%
+\def\frontmatter@thanks{% implicit #1
+ \@AF@join
+}%
+\newcommand*\altaffiliation[2][]{%
+ \@AF@join{#1#2}%
+}%
+\def\set@listcomma@list#1{%
+ \expandafter\@reset@ac\expandafter#1#1{0}\@reset@ac{%
+ \let\@listcomma\relax
+ }{%
+ \let\@listcomma\@listcomma@comma
+ }%
+}%
+\def\set@listcomma@count#1{%
+ \@ifnum{#1=\tw@}{%
+ \let\@listcomma\relax
+ }{%
+ \let\@listcomma\@listcomma@comma
+ }%
+}%
+\def\@reset@ac#1#2#3\@reset@ac{%
+ \def#1{#3}%
+ \@tempcnta#2\relax
+ \@ifnum{#2=\tw@}%
+}%
+\def\@listand{\@ifnum{\@tempcnta=\tw@}{\andname\space}{}}%
+\def\@listcomma@comma{\@ifnum{\@tempcnta>\@ne}{,}{}}%
+\def\@listcomma@comma@UK{\@ifnum{\@tempcnta>\tw@}{,}{}}%
+\def\@collaboration@gobble#1#2#3{}%
+\def\doauthor#1#2#3{%
+ \ignorespaces#1\unskip\@listcomma
+ \begingroup
+ #3%
+ \@if@empty{#2}{\endgroup{}{}}{\endgroup{\comma@space}{}\frontmatter@footnote{#2}}%
+ \space \@listand
+}%
+\def\x@match#1#2{%
+ \temp@sw{}{%
+ \def\@tempifx{#2}%
+ \@ifx{\@tempifx#1}{%
+ \@booleantrue\temp@sw
+ }{%
+ }%
+ }%
+}%
+\def\y@match#1#2#3{%
+ \temp@sw{}{%
+ \def\@tempifx{#3}%
+ \@ifx{\@tempifx#1}{%
+ \@booleantrue\temp@sw
+ \def\@tempb{#2}%
+ }{%
+ }%
+ }%
+}%
+\def\frontmatter@footnote#1{%
+ \begingroup
+ \@booleanfalse\temp@sw
+ \def\@tempa{#1}%
+ \let\@tempb\@empty
+ \def\@TBN@opr{\y@match\@tempa}%
+ \@FMN@list
+ \temp@sw{%
+ \expandafter\frontmatter@footnotemark
+ \expandafter{\@tempb}%
+ }{%
+ \stepcounter\@mpfn
+ \expandafter\expandafter
+ \expandafter\frontmatter@foot@mark
+ \expandafter\expandafter
+ \expandafter{%
+ \expandafter \the\csname c@\@mpfn\endcsname
+ }{#1}%
+ }%
+ \endgroup
+}%
+\def\frontmatter@foot@mark#1#2{%
+ \frontmatter@footnotemark{#1}%
+ \g@addto@macro\@FMN@list{\@TBN@opr{#1}{#2}}%
+}%
+\appdef\frontmatter@init{%
+ \global\let\@FMN@list\@empty
+}%
+\def\frontmatter@footnotemark#1{%
+ \leavevmode
+ \ifhmode\edef\@x@sf{\the\spacefactor}\nobreak\fi
+ \begingroup
+ \hyper@linkstart {link}{frontmatter.#1}%
+ \csname c@\@mpfn\endcsname#1\relax
+ \def\@thefnmark{\frontmatter@thefootnote}%
+ \@makefnmark
+ \hyper@linkend
+ \endgroup
+ \ifhmode\spacefactor\@x@sf\fi
+ \relax
+}%
+\def\keywords#1{%
+ \aftermaketitle@chk{\keywords}%
+ \gdef\@keywords{#1}%
+}%
+\appdef\frontmatter@init{%
+ \let\@keywords\@empty
+}%
+\newcommand*\frontmatter@date[2][\Dated@name]{\def\@date{#1#2}}%
+\def\@date{}%
+\newcommand*\received[2][\Received@name]{\def\@received{#1#2}}%
+\def\@received{}%
+\newcommand*\revised[2][\Revised@name]{\def\@revised{#1#2}}%
+\def\@revised{}%
+\newcommand*\accepted[2][\Accepted@name]{\def\@accepted{#1#2}}%
+\def\@accepted{}%
+\newcommand*\published[2][\Published@name]{\def\@published{#1#2}}%
+\def\@published{}%
+\def\pacs#1{%
+ \aftermaketitle@chk{\pacs}%
+ \gdef\@pacs{#1}%
+}%
+\appdef\frontmatter@init{%
+ \let\@pacs\@empty
+}%
+\def\preprint#1{\gappdef\@preprint{\preprint{#1}}}%
+\appdef\frontmatter@init{%
+ \let\@preprint\@empty
+}%
+\newbox\absbox
+\def\toclevel@abstract{1}%
+\def\addcontents@abstract{%
+ \phantomsection
+ \expandafter\def\csname Parent0\endcsname{section*.2}%
+ \expandafter\@argswap@val\expandafter{\abstractname}{\addcontentsline{toc}{abstract}}%
+}%
+\newenvironment{frontmatter@abstract}{%
+ \aftermaketitle@chk{\begin{abstract}}%
+ \global\setbox\absbox\vbox\bgroup
+ \color@begingroup
+ \columnwidth\textwidth
+ \hsize\columnwidth
+ \@parboxrestore
+ \def\@mpfn{mpfootnote}\def\thempfn{\thempfootnote}\c@mpfootnote\z@
+ \let\@footnotetext\frontmatter@footnotetext
+ \minipagefootnote@init
+ \let\set@listindent\set@listindent@
+ \let\@listdepth\@mplistdepth \@mplistdepth\z@
+ \let@environment{description}{frontmatter@description}%
+ \@minipagerestore
+ \@setminipage
+ \frontmatter@abstractheading
+ \frontmatter@abstractfont
+ \let\footnote\mini@note
+ \expandafter\everypar\expandafter{\the\everypar\addcontents@abstract\everypar{}}%
+}{%
+ \par
+ \unskip
+ \minipagefootnote@here
+ \@minipagefalse %% added 24 May 89
+ \color@endgroup
+ \egroup
+}%
+\long\def\frontmatter@footnotetext#1{%
+ \minipagefootnote@pick
+ \set@footnotefont
+ \set@footnotewidth
+ \@parboxrestore
+ \protected@edef\@currentlabel{\csname p@\@mpfn\endcsname\@thefnmark}%
+ \color@begingroup
+ \frontmatter@makefntext{%
+ \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox\vadjust{\vskip\z@skip}%
+ }%
+ \color@endgroup
+ \minipagefootnote@drop
+}%
+\def\ltx@no@footnote{%
+ \let\ltx@xfootnote\ltx@no@xfootnote\let\ltx@yfootnote\ltx@no@yfootnote
+ \let\ltx@xfootmark\ltx@no@xfootmark\let\ltx@yfootmark\ltx@no@yfootmark
+ \let\ltx@xfoottext\ltx@no@xfoottext\let\ltx@yfoottext\ltx@no@yfoottext
+}%
+\def\ltx@no@xfootnote[#1]#2{\ltx@no@footwarn\footnote}%
+\def\ltx@no@yfootnote#1{\ltx@no@footwarn\footnote}%
+\def\ltx@no@xfootmark[#1]{\ltx@no@footwarn\footnotemark}%
+\def\ltx@no@yfootmark{\ltx@no@footwarn\footnotemark}%
+\def\ltx@no@xfoottext[#1]#2{\ltx@no@footwarn\footnotetext}%
+\def\ltx@no@yfoottext#1{\ltx@no@footwarn\footnotetext}%
+\def\ltx@no@footwarn#1{%
+ \class@warn{%
+ The \string#1\space command is not legal on the title page;
+ using \string\thanks\space instead might suit you: consult the manual for details%
+ }%
+}%
+\def\frontmatter@abstractheading{%
+ \begingroup
+ \centering\large
+ \abstractname
+ \par
+ \endgroup
+}%
+\def\frontmatter@abstractfont{}%
+\newenvironment{frontmatter@description}{%
+ \list{}{%
+ \leftmargin\z@
+ \labelwidth\z@
+ \itemindent\z@
+ \let\makelabel\frontmatter@descriptionlabel
+ }%
+}{%
+ \endlist
+}%
+\def\frontmatter@descriptionlabel#1{%
+ \hspace\labelsep
+ \normalfont\bfseries
+ #1:%
+}%
+\def\frontmatter@abstractwidth{\textwidth}
+\def\frontmatter@abstract@produce{%
+ \par
+ \preprintsty@sw{%
+ \do@output@MVL{%
+ \vskip\frontmatter@preabstractspace
+ \vskip200\p@\@plus1fil
+ \penalty-200\relax
+ \vskip-200\p@\@plus-1fil
+ }%
+ }{%
+ \addvspace{\frontmatter@preabstractspace}%
+ }%
+ \begingroup
+ \dimen@\baselineskip
+ \setbox\z@\vtop{\unvcopy\absbox}%
+ \advance\dimen@-\ht\z@\advance\dimen@-\prevdepth
+ \@ifdim{\dimen@>\z@}{\vskip\dimen@}{}%
+ \endgroup
+ \begingroup
+ \prep@absbox
+ \unvbox\absbox
+ \post@absbox
+ \endgroup
+ \@ifx{\@empty\mini@notes}{}{\mini@notes\par}%
+ \addvspace\frontmatter@postabstractspace
+}%
+\appdef\frontmatter@init{\let\mini@notes\@empty}%
+\let\prep@absbox\@empty
+\let\post@absbox\@empty
+\def\frontmatter@preabstractspace{.5\baselineskip}
+\def\frontmatter@postabstractspace{.5\baselineskip}
+\newenvironment{frontmatter@titlepage}{%
+ \twocolumn@sw{\onecolumngrid}{\newpage}%
+ \thispagestyle{titlepage}%
+ \setcounter{page}\@ne
+}{%
+ \twocolumn@sw{\twocolumngrid}{\newpage}%
+ \twoside@sw{}{%
+ \setcounter{page}\@ne
+ }%
+}%
+\def\frontmatter@maketitle{%
+ \@author@finish
+ \title@column\titleblock@produce
+ \suppressfloats[t]%
+ \let\and\relax
+ \let\affiliation\@gobble
+ \let\author\@gobble
+ \let\@AAC@list\@empty
+ \let\@AFF@list\@empty
+ \let\@AFG@list\@empty
+ \let\@AF@join\@AF@join@error
+ \let\email\@gobble
+ \let\@address\@empty
+ \let\maketitle\relax
+ \let\thanks\@gobble
+ \let\abstract\@undefined\let\endabstract\@undefined
+ \titlepage@sw{%
+ \vfil
+ \clearpage
+ }{}%
+}%
+\def\maketitle@Hy{%
+ \let\Hy@saved@footnotemark\@footnotemark
+ \let\Hy@saved@footnotetext\@footnotetext
+ \let\@footnotemark\H@@footnotemark
+ \let\@footnotetext\H@@footnotetext
+ \@ifnextchar[%]
+ \Hy@maketitle@optarg
+ {%
+ \HyOrg@maketitle
+ \Hy@maketitle@end
+ }%
+}%
+\appdef\class@documenthook{%
+ \@ifx{\maketitle\maketitle@Hy}{%
+ \class@info{Taking \string\maketitle\space back from hyperref}%
+ \let\maketitle\frontmatter@maketitle
+ }{%
+ }%
+}%
+\def\titleblock@produce{%
+ \begingroup
+ \ltx@footnote@pop
+ \def\@mpfn{mpfootnote}%
+ \def\thempfn{\thempfootnote}%
+ \c@mpfootnote\z@
+ \let\@makefnmark\frontmatter@makefnmark
+ \frontmatter@setup
+ \thispagestyle{titlepage}\label{FirstPage}%
+ \frontmatter@title@produce
+ \groupauthors@sw{%
+ \frontmatter@author@produce@group
+ }{%
+ \frontmatter@author@produce@script
+ }%
+ \frontmatter@RRAPformat{%
+ \expandafter\produce@RRAP\expandafter{\@date}%
+ \expandafter\produce@RRAP\expandafter{\@received}%
+ \expandafter\produce@RRAP\expandafter{\@revised}%
+ \expandafter\produce@RRAP\expandafter{\@accepted}%
+ \expandafter\produce@RRAP\expandafter{\@published}%
+ }%
+ \frontmatter@abstract@produce
+ \@ifx@empty\@pacs{}{%
+ \@pacs@produce\@pacs
+ }%
+ \@ifx@empty\@keywords{}{%
+ \@keywords@produce\@keywords
+ }%
+ \par
+ \frontmatter@finalspace
+ \endgroup
+}%
+\def\toclevel@title{0}%
+\def\frontmatter@title@produce{%
+ \begingroup
+ \frontmatter@title@above
+ \frontmatter@title@format
+ \@title
+ \unskip
+ \phantomsection\expandafter\@argswap@val\expandafter{\@title}{\addcontentsline{toc}{title}}%
+ \@ifx{\@title@aux\@title@aux@cleared}{}{%
+ \expandafter\frontmatter@footnote\expandafter{\@title@aux}%
+ }%
+ \par
+ \frontmatter@title@below
+ \endgroup
+}%
+\appdef\let@mark{\let\\\relax}%
+\def\frontmatter@title@above{}%
+\def\frontmatter@title@format{}%
+\def\frontmatter@title@below{\addvspace{\baselineskip}}%
+\def\frontmatter@author@produce@script{%
+ \begingroup
+ \let\@author@present\@author@present@script
+ \frontmatterverbose@sw{\typeout{\string\frontmatter@author@produce@script:}\say\@AAC@list\say\@AFF@list\say\@AFG@list}{}%
+ \let\AU@temp\@empty
+ \@tempcnta\z@
+ \let\AF@opr \@gobble
+ \def\AU@opr{\@author@count\@tempcnta}%
+ \def\CO@opr{\@collaboration@count\AU@temp\@tempcnta}%
+ \@AAC@list
+ \expandafter\CO@opr\@author@cleared
+ \begingroup
+ \frontmatter@authorformat
+ \let\AF@opr \@affilID@def
+ \let\AU@opr \@author@present
+ \def\CO@opr{\@collaboration@present\AU@temp}%
+ \set@listcomma@list\AU@temp
+ \@AAC@list
+ \unskip\unskip
+ \par
+ \endgroup
+ \begingroup
+ \frontmatter@above@affiliation@script
+ \let\AFF@opr \@affil@script
+ \@AFF@list
+ \frontmatter@footnote@produce
+ \par
+ \endgroup
+ \endgroup
+}%
+\def\@author@count#1{%
+ \advance#1\@ne
+ \@author@gobble
+}%
+\def\@collaboration@present#1#2#3#4{%
+ \par
+ \begingroup
+ \frontmatter@collaboration@above
+ \@affilID@def{}%
+ \@tempcnta\z@
+ \@author@present{}{(\ignorespaces#3\unskip)}{#4}%
+ \par
+ \endgroup
+ \set@listcomma@list#1%
+}%
+\def\frontmatter@collaboration@above{}%
+\def\@collaboration@count#1#2{%
+ \appdef@eval#1{\the#2}#2\z@
+ \@author@gobble
+}%
+\def\@affilID@def{\def\@affilID@temp}%
+\let\@affilID@temp\@empty
+\def\affil@script#1#2#3{%
+ \def\@tempifx{#1}\@ifx{\@tempifx\@tempa}{%
+ \@if@empty{#2}{}{%
+ \par
+ \begingroup
+ \def\@thefnmark{#1}\@makefnmark\ignorespaces
+ #2%
+ \@if@empty{#3}{}{\frontmatter@footnote{#3}}%
+ \par
+ \endgroup
+ }%
+ }{}%
+}%
+\def\@affil@script#1#2#3#4{%
+ \@ifnum{#1=\z@}{}{%
+ \par
+ \begingroup
+ \frontmatter@affiliationfont
+ \@ifnum{\c@affil<\affil@cutoff}{}{%
+ \def\@thefnmark{#1}\@makefnmark
+ }%
+ \ignorespaces#3%
+ \@if@empty{#4}{}{\frontmatter@footnote{#4}}%
+ \par
+ \endgroup
+ }%
+}%
+\let\affil@cutoff\@ne
+\def\@author@present@script#1#2#3{%
+ \begingroup
+ \gdef\comma@space{\textsuperscript{,\,}}%
+ \doauthor{#2}{#3}{\@affil@present@script}%
+ \endgroup
+ \advance\@tempcnta\m@ne
+}%
+\def\@affilcomma#1#2{%
+ \@ifx{\z@#1}{%
+ \@ifx{\relax#2}{}{%
+ \@affilcomma{#2}%
+ }%
+ }{%
+ #1%
+ \@ifx{\relax#2}{}{%
+ \@ifx{\z@#2}{%
+ \@affilcomma
+ }{%
+ ,\,\@affilcomma{#2}%
+ }%
+ }%
+ }%
+}%
+\def\@affil@present@script{%
+ \let\@tempa\@empty
+ \expandafter\@affil@present@script@\@affilID@temp\relax
+}%
+\def\@affil@present@script@#1{%
+ \@ifx{\relax#1}{%
+ \@ifx{\@tempa\@empty}{%
+ \aftergroup\false@sw
+ }{%
+ \textsuperscript{\expandafter\@affilcomma\@tempa\relax\relax}%
+ \aftergroup\true@sw
+ }%
+ }{%
+ \@ifnum{#1=\z@}{}{\appdef\@tempa{{#1}}}%
+ \@affil@present@script@
+ }%
+}%
+\@provide\@author@parskip{\z@skip}%
+\def\frontmatter@author@produce@group{%
+ \begingroup
+ \let\@author@present\@author@present@group
+ \frontmatter@authorformat
+ \frontmatterverbose@sw{\typeout{\string\frontmatter@author@produce@group:}\say\@AAC@list\say\@AFF@list\say\@AFG@list}{}%
+ \let\AU@temp\@empty
+ \set@listcomma@list\AU@temp
+ \def\CO@opr{\@collaboration@present\AU@temp}%
+ \let\AFG@opr \affils@present@group
+ \let\@listcomma\relax
+ \@AFG@list
+ \frontmatter@footnote@produce
+ \par
+ \endgroup
+ \frontmatter@authorbelow
+}%
+\@provide\frontmatter@authorbelow{}%
+\def\affils@present@group#1{%
+ \begingroup
+ \def\AF@temp{#1}%
+ \@tempcnta\z@
+ \let\AU@opr \@undefined
+ \let\CO@opr \@undefined
+ \def\AF@opr{\@affilID@count\AF@temp\@tempcnta}%
+ \@AAC@list
+ \@ifnum{\@tempcnta=\z@}{}{%
+ \begingroup
+ \frontmatter@above@affilgroup
+ \set@listcomma@count\@tempcnta
+ \let\AU@opr \@undefined
+ \let\CO@opr \@undefined
+ \def\AF@opr{\@affilID@match\AF@temp}%
+ \@AAC@list
+ \endgroup
+ \begingroup
+ \par
+ \frontmatter@above@affiliation
+ \frontmatter@affiliationfont
+ \let\\\frontmatter@addressnewline
+ \@tempcnta\z@
+ \@tfor\AF@temp:=#1\do{%
+ \expandafter\@ifx\expandafter{\expandafter\z@\AF@temp}{}{%
+ \advance\@tempcnta\@ne
+ }%
+ }%
+ \@ifnum{\@tempcnta=\tw@}{%
+ \let\@listcomma\relax
+ }{}%
+ \def@after@address
+ \runinaddress@sw{%
+ }{%
+ \tightenlines@sw{}{%
+ \parskip\z@
+ }%
+ \appdef\after@address\par
+ }%
+ \let\AFF@opr \@affil@group
+ \do@affil@fromgroup\@AFF@list#1\relax
+ \endgroup
+ }%
+ \par
+ \endgroup
+}%
+\def\def@after@address{\def\after@address{\@listcomma\ \@listand}}%
+\def\def@after@address@empty{\let\after@address\@empty}%
+\def\@affilID@count#1#2#3{%
+ \def\@tempifx{#3}%
+ \@ifx{\@tempifx#1}{%
+ \def\AU@opr{\@author@count#2}%
+ }{%
+ \let\AU@opr \@author@gobble
+ }%
+ \let\CO@opr \@collaboration@gobble
+}%
+\def\@affilID@match#1#2{%
+ \def\@tempifx{#2}%
+ \@ifx{\@tempifx#1}{%
+ \let\AU@opr \@author@present
+ }{%
+ \let\AU@opr \@author@gobble
+ }%
+ \let\CO@opr \@collaboration@gobble
+}%
+\def\do@affil@fromgroup#1#2{%
+ \@ifx{\relax#2}{}{%
+ \count@#2\relax
+ \@ifnum{\z@=\count@}{}{#1}%
+ \do@affil@fromgroup#1%
+ }%
+}%
+\def\@affil@group#1#2#3#4{%
+ \@ifnum{#1=\count@}{%
+ \def\@tempa{#3}%
+ \@ifx{\@tempa\blankaffiliation}{}{%
+ #3%
+ \@if@empty{#4}{}{%
+ \frontmatter@footnote{#4}%
+ }%
+ \after@address
+ }%
+ \advance\@tempcnta\m@ne
+ }{}%
+}%
+\def\@author@present@group#1#2#3{%
+ \gdef\comma@space{\gdef\comma@space{\textsuperscript{,\,}}}%
+ \doauthor{#2}{#3}{\@affil@present@group}%
+ \advance\@tempcnta\m@ne
+}%
+\def\@affil@present@group{%
+ \aftergroup\false@sw
+}%
+\def\@pacs@produce#1{%
+ \showPACS@sw{%
+ \begingroup
+ \frontmatter@PACS@format
+ \@pacs@name#1\par
+ \endgroup
+ }{%
+ \@if@empty{#1}{}{%
+ \class@warn{\PACS@warn}%
+ }%
+ }%
+}%
+\def\PACS@warn{If you want your PACS to appear in your output, use document class option showpacs}%
+\def\@keywords@produce#1{%
+ \showKEYS@sw{%
+ \begingroup
+ \frontmatter@keys@format
+ \@keys@name#1\par
+ \endgroup
+ }{%
+ \@if@empty{#1}{}{%
+ \class@warn{If you want your keywords to appear in your output, use document class option showkeys}%
+ }%
+ }%
+}%
+\def\frontmatter@footnote@produce@footnote{%
+ \let\@TBN@opr\present@FM@footnote
+ \@FMN@list
+ \global\let\@FMN@list\@empty
+}%
+\def\present@FM@footnote#1#2{%
+ \begingroup
+ \csname c@\@mpfn\endcsname#1\relax
+ \def\@thefnmark{\frontmatter@thefootnote}%
+ \frontmatter@footnotetext{#2}%
+ \endgroup
+}%
+\def\frontmatter@footnote@produce@endnote{%
+}%
+\appdef\frontmatter@init{%
+ \@ifxundefined\title@column {\let\title@column\@empty}{}%
+ \@ifxundefined\preprintsty@sw {\@booleanfalse\preprintsty@sw}{}%
+ \@ifxundefined\frontmatter@footnote@produce{\let\frontmatter@footnote@produce\frontmatter@footnote@produce@footnote}{}%
+ \@ifxundefined\do@output@MVL {\let\do@output@MVL\@firstofone}{}%
+ \@ifxundefined\comma@space {\let\comma@space\@empty}{}%
+}%
+\def\frontmatter@thefootnote{%
+ \altaffilletter@sw{\@alph}{\@fnsymbol}{\csname c@\@mpfn\endcsname}%
+}%
+\@ifx{\altaffilletter@sw\@undefined}{\@booleantrue\altaffilletter@sw}{}%
+\def\frontmatter@makefnmark{%
+ \@textsuperscript{%
+ \normalfont\@thefnmark
+ }%
+}%
+\long\def\frontmatter@makefntext#1{%
+ \parindent 1em
+ \noindent
+ \Hy@raisedlink{\hyper@anchorstart{frontmatter.\expandafter\the\csname c@\@mpfn\endcsname}\hyper@anchorend}%
+ \@makefnmark
+ #1%
+}%
+\def\frontmatter@setup{}%
+\def\frontmatter@RRAPformat#1{%
+ \removelastskip
+ \begingroup
+ \frontmatter@RRAP@format
+ #1\par
+ \endgroup
+}%
+\def\punct@RRAP{; }%
+\def\produce@RRAP#1{%
+ \@if@empty{#1}{}{%
+ \@ifvmode{\leavevmode}{\unskip\punct@RRAP\ignorespaces}%
+ #1%
+ }%
+}%
+\def\frontmatter@authorformat{}%
+\def\frontmatter@above@affilgroup{}%
+\def\frontmatter@above@affiliation{}%
+\def\frontmatter@above@affiliation@script{}%
+\def\frontmatter@affiliationfont{\itshape\selectfont}%
+\def\frontmatter@RRAP@format{}%
+\def\frontmatter@PACS@format{}%
+\def\frontmatter@keys@format{}%
+\def\frontmatter@finalspace{\addvspace{18\p@}}
+\def\frontmatter@addressnewline{%
+ \@ifhmode{\skip@\lastskip\unskip\unpenalty\break\hskip\skip@}{}%
+ % was: \vskip-.5ex
+}%
+\def\frontmatter@preabstractspace{5.5\p@}
+\def\frontmatter@postabstractspace{6.5\p@}
+\def\aftermaketitle@chk#1{%
+ \@ifx{\maketitle\relax}{%
+ \class@err{\protect#1 must be used before \protect\maketitle}%
+ }{}%
+}%
+\def\ps@titlepage{\ps@empty}%
+\def\volumeyear#1{\gdef\@volumeyear{#1}}%
+\def\@volumeyear{}%
+\def\volumenumber#1{\gdef\@volumenumber{#1}}%
+\def\@volumenumber{}%
+\def\issuenumber#1{\gdef\@issuenumber{#1}}%
+\def\@issuenumber{}%
+\def\eid#1{\gdef\@eid{#1}}%
+\def\@eid{}%
+\def\startpage#1{\gdef\@startpage{#1}\c@page#1\relax}%
+\def\@startpage{\pageref{FirstPage}}%
+\def\endpage#1{\gdef\@endpage{#1}}%
+\def\@endpage{\pageref{LastPage}}%
+\def\print@toc#1{%
+ \begingroup
+ \expandafter\section
+ \expandafter*%
+ \expandafter{%
+ \csname#1name\endcsname
+ }%
+ \let\appendix\appendix@toc
+ \@starttoc{#1}%
+ \endgroup
+}%
+\def\appendix@toc{}%
+\def\Dated@name{Dated }%
+\def\Received@name{Received }%
+\def\Revised@name{Revised }%
+\def\Accepted@name{Accepted }%
+\def\Published@name{Published }%
+\appdef\robustify@contents{%
+ \let\thanks\@gobble\let\class@warn\@gobble
+ \def\begin{\string\begin}\def\end{\string\end}%
+}%
+\@ifxundefined\frontmatter@syntax@sw{\@booleantrue\frontmatter@syntax@sw}{}%
+\frontmatter@syntax@sw{%
+ \let\title \frontmatter@title
+ \let\author \frontmatter@author
+ \let\date \frontmatter@date
+ \@ifxundefined\@maketitle{%
+ \let\maketitle \frontmatter@maketitle
+ \@booleantrue \titlepage@sw
+ }{%
+ \let\@maketitle \frontmatter@maketitle
+ \prepdef\maketitle\@author@finish
+ }%
+ \let\noaffiliation \frontmatter@noaffiliation
+ \let\thanks@latex \thanks
+ \let\thanks \frontmatter@thanks
+ \let\and@latex \and
+ \let\and \frontmatter@and
+ \let@environment{titlepage}{frontmatter@titlepage}%
+ \let@environment{abstract}{frontmatter@abstract}%
+}{%
+ \let\noaffiliation\@empty
+}%
+\typeout{%
+ltxgrid%
+ [2010/07/25/20:33:00 4.1r page grid package (portions licensed from W. E. Baxter web at superscript.com)]% \fileversion
+}%
+\newcounter{linecount}
+\def\loop@line#1#2{%
+ \par
+ \hb@xt@\hsize{%
+ \global\advance#1\@ne
+ \edef\@tempa{\@ifnum{100>#1}{0}{}\@ifnum{10>#1}{0}{}\number#1}%
+ \@tempa\edef\@tempa{\special{line:\@tempa}}\@tempa
+ \vrule depth2.5\p@#2\leaders\hrule\hfil
+ }%
+}%
+\def\lineloop#1{%
+ \loopwhile{\loop@line\c@linecount{}\@ifnum{#1>\c@linecount}}%
+}%
+\def\linefoot#1{%
+ \loop@line\c@linecount{%
+ \footnote{%
+ #1\special{foot:#1}\vrule depth2.5\p@\leaders\hrule\hfill
+ }%
+ }%
+}%
+\let\@@mark\mark
+\let\@@topmark\topmark
+\let\@@firstmark\firstmark
+\let\@@botmark\botmark
+\let\@@splitfirstmark\splitfirstmark
+\let\@@splitbotmark\splitbotmark
+\def\@themark{{}{}{}{}}%
+\def\nul@mark{{}{}{}{}\@@nul}%
+\def\set@mark@netw@#1#2#3#4#5#6#7{\gdef#1{{#6}{#7}{#4}{#5}}\do@mark}%
+\def\set@marktw@#1#2#3#4#5#6{\gdef#1{{#2}{#6}{#4}{#5}}\do@mark}%
+\def\set@markthr@@#1#2#3#4#5#6{\gdef#1{{#2}{#3}{#6}{#5}}\do@mark}%
+\def\get@mark@@ne#1#2#3#4#5\@@nul{#1}%
+\def\get@mark@tw@#1#2#3#4#5\@@nul{#2}%
+\def\get@mark@thr@@#1#2#3#4#5\@@nul{#3}%
+\def\get@mark@f@ur#1#2#3#4#5\@@nul{#4}%
+\def\mark@netw@{\expandafter\set@mark@netw@\expandafter\@themark\@themark}%
+\def\marktw@{\expandafter\set@marktw@\expandafter\@themark\@themark}%
+\def\markthr@@{\expandafter\set@markthr@@\expandafter\@themark\@themark}%
+\def\do@mark{\do@@mark\@themark\nobreak@mark}%
+\def\do@@mark#1{%
+ \begingroup
+ \let@mark
+ \@@mark{#1}%
+ \endgroup
+}%
+\def\let@mark{%
+ \let\protect\@unexpandable@protect
+ \let\label\relax
+ \let\index\relax
+ \let\glossary\relax
+}%
+\def\nobreak@mark{%
+ \@if@sw\if@nobreak\fi{\@ifvmode{\nobreak}{}}{}%
+}%
+\def\mark@envir{\markthr@@}%
+\def\bot@envir{%
+ \expandafter\expandafter
+ \expandafter\get@mark@thr@@
+ \expandafter\@@botmark
+ \nul@mark
+}%
+\def\markboth{\mark@netw@}%
+\def\markright{\marktw@}%
+\def\leftmark{%
+ \expandafter\expandafter
+ \expandafter\get@mark@@ne
+ \expandafter\saved@@botmark
+ \nul@mark
+}%
+\def\rightmark{%
+ \expandafter\expandafter
+ \expandafter\get@mark@tw@
+ \expandafter\saved@@firstmark
+ \nul@mark
+}%
+\let\primitive@output\output
+\long\def\@tempa#1\@@nil{#1}%
+ \toks@
+\expandafter\expandafter
+\expandafter{%
+\expandafter \@tempa
+ \the\primitive@output
+ \@@nil
+ }%
+\newtoks\output@latex
+\output@latex\expandafter{\the\toks@}%
+\let\output\output@latex
+\primitive@output{\dispatch@output}%
+\def\dispatch@output{%
+ \let\par\@@par
+ \expandafter\let\expandafter\output@procedure\csname output@\the\outputpenalty\endcsname
+ \@ifnotrelax\output@procedure{}{%
+ \expandafter\def\expandafter\output@procedure\expandafter{\the\output@latex}%
+ }%
+ \expandafter\@ifx\expandafter{\csname output@-\the\execute@message@pen\endcsname\output@procedure}{%
+ \let\output@procedure\@message@saved
+ }{}%
+ \ltxgrid@info@sw{\class@info{\string\dispatch@output}\say\output@procedure\saythe\holdinginserts}{}%
+ \outputdebug@sw{\output@debug}{}%
+ \output@procedure
+}%
+\def\set@output@procedure#1#2{%
+ \count@\outputpenalty\advance\count@-#2%
+ \expandafter\let\expandafter#1\csname output@\the\count@\endcsname
+}%
+\def\output@debug{%
+ \def\@tempa{\save@message}%
+ \@ifx{\output@procedure\@tempa}{%
+ \true@sw
+ }{%
+ \@ifnum{\outputpenalty=-\save@column@insert@pen}{%
+ \@ifnum{\holdinginserts>\z@}%
+ }{%
+ \false@sw
+ }%
+ }%
+ {}{\output@debug@}%
+}%
+\def\output@debug@{%
+ \saythe\outputpenalty
+ \saythe\interlinepenalty
+ \saythe\brokenpenalty
+ \saythe\clubpenalty
+ \saythe\widowpenalty
+ \saythe\displaywidowpenalty
+ \saythe\predisplaypenalty
+ \saythe\interdisplaylinepenalty
+ \saythe\postdisplaypenalty
+ \saythe\badness
+ \say\thepagegrid
+ \saythe\pagegrid@col
+ \saythe\pagegrid@cur
+ \saythe\insertpenalties
+ \say\@@botmark
+ \saythe\pagegoal
+ \saythe\pagetotal
+ \saythe{\badness\@cclv}%
+ \say\@toplist
+ \say\@botlist
+ \say\@dbltoplist
+ \say\@deferlist
+ \trace@scroll{%
+ \showbox\@cclv
+ \showbox\@cclv@saved
+ \showbox\pagesofar
+ \showbox\csname col@1\endcsname
+ \showbox\footsofar
+ \showbox\footins
+ \showbox\footins@saved
+ \showlists
+ }%
+}%
+\@ifxundefined{\outputdebug@sw}{%
+ \@booleanfalse\outputdebug@sw
+}{}%
+\def\trace@scroll#1{\begingroup\showboxbreadth\maxdimen\showboxdepth\maxdimen\scrollmode#1\endgroup}%
+\def\trace@box#1{\trace@scroll{\showbox#1}}%
+\prepdef\@outputpage{\@outputpage@head}%
+\let\@outputpage@head\@empty
+\appdef\@outputpage{\@outputpage@tail}%
+\let\@outputpage@tail\@empty
+\def\show@box@size#1#2{%
+ \show@box@size@sw{%
+ \begingroup
+ \setbox\z@\vbox{\unvcopy#2\hrule}%
+ \class@info{Show box size: #1^^J%
+ (\the\ht\z@\space X \the\wd\z@)
+ \the\c@page\space\space\the\pagegrid@cur\space\the\pagegrid@col
+ }%
+ \endgroup
+ }{}%
+}%
+\def\show@text@box@size{%
+ \show@box@size{Text column}\@outputbox
+ \tally@box@size@sw{%
+ \@ifdim{\wd\@outputbox>\z@}{%
+ \dimen@\ht\@outputbox\divide\dimen@\@twopowerfourteen
+ \advance\dimen@-\dp\csname box@size@\the\pagegrid@col\endcsname
+ \@ifdim{\dimen@>\z@}{%
+ \advance\dimen@ \ht\csname box@size@\the\pagegrid@col\endcsname
+ \global\ht\csname box@size@\the\pagegrid@col\endcsname\dimen@
+ \show@box@size@sw{%
+ \class@info{Column: \the\dimen@}%
+ }{}%
+ }{}%
+ }{}%
+ \global\dp\csname box@size@\the\pagegrid@col\endcsname\z@
+ }{}%
+}%
+\def\show@pagesofar@size{%
+ \show@box@size{Page so far}\pagesofar
+ \dimen@\ht\pagesofar\divide\dimen@\@twopowerfourteen
+ \global\dp\csname box@size@1\endcsname\dimen@
+ \show@box@size@sw{%
+ \class@info{Pagesofar: \the\dimen@}%
+ }{}%
+}%
+\@booleanfalse\tally@box@size@sw
+\@booleanfalse\show@box@size@sw
+\expandafter\newbox\csname box@size@1\endcsname
+\expandafter\setbox\csname box@size@1\endcsname\hbox{}%
+\expandafter\newbox\csname box@size@2\endcsname
+\expandafter\setbox\csname box@size@2\endcsname\hbox{}%
+\def\total@text{%
+ \@tempdima\the\ht\csname box@size@2\endcsname\divide\@tempdima\@twopowertwo\@tempcnta\@tempdima
+ \@tempdimb\the\ht\csname box@size@1\endcsname\divide\@tempdimb\@twopowertwo\@tempcntb\@tempdimb
+ \class@info{Total text: Column(\the\@tempcnta pt), Page(\the\@tempcntb pt)}%
+}%
+\def\natural@output{\toggle@insert{\output@holding}{\output@moving}}%
+\output@latex{\natural@output}%
+\def\output@holding{%
+ \csname output@init@\bot@envir\endcsname
+ \@if@exceed@pagegoal{\unvcopy\@cclv}{%
+ \setbox\z@\vbox{\unvcopy\@cclv}%
+ \outputdebug@sw{\trace@box\z@}{}%
+ \dimen@\ht\@cclv\advance\dimen@-\ht\z@
+ \dead@cycle@repair\dimen@
+ }{%
+ \dead@cycle
+ }%
+}%
+\def\@if@exceed@pagegoal#1{%
+ \begingroup
+ \setbox\z@\vbox{#1}%
+ \dimen@\ht\z@\advance\dimen@\dp\z@
+ \outputdebug@sw{\saythe\dimen@}{}%
+ \@ifdim{\dimen@>\pagegoal}{%
+ \setbox\z@\vbox{\@@mark{}\unvbox\z@}%
+ \splittopskip\topskip
+ \splitmaxdepth\maxdepth
+ \vbadness\@M
+ \vfuzz\maxdimen
+ \setbox\tw@\vsplit\z@ to\pagegoal
+ \outputdebug@sw{\trace@scroll{\showbox\tw@\showbox\z@}}{}%
+ \setbox\tw@\vbox{\unvbox\tw@}%
+ \@ifdim{\ht\tw@=\z@}{%
+ \ltxgrid@info{Found overly large chunk while preparing to move insertions. Attempting repairs}%
+ \aftergroup\true@sw
+ }{%
+ \aftergroup\false@sw
+ }%
+ }{%
+ \aftergroup\false@sw
+ }%
+ \endgroup
+}%
+\def\output@moving{%
+ \set@top@firstmark
+ \@ifnum{\outputpenalty=\do@newpage@pen}{%
+ \setbox\@cclv\vbox{%
+ \unvbox\@cclv
+ \remove@lastbox
+ \@ifdim{\ht\z@=\ht\@protection@box}{\box\lastbox}{\unskip}%
+ }%
+ }{}%
+ \@cclv@nontrivial@sw{%
+ \expandafter\output@do@prep\csname output@prep@\bot@envir \endcsname
+ \@makecolumn\true@sw
+ \expandafter\output@column@do\csname output@column@\thepagegrid\endcsname
+ \protect@penalty\do@startcolumn@pen
+ \clearpage@sw{%
+ \protect@penalty\do@endpage@pen
+ }{}%
+ \expandafter\let\expandafter\output@post@\csname output@post@\bot@envir \endcsname
+ \outputdebug@sw{\say\output@post@}{}%
+ \@ifx{\output@post@\relax}{\output@post@document}{\output@post@}%
+ }{%
+ \void@cclv
+ }%
+ \set@colht
+ \global\@mparbottom\z@
+ \global\@textfloatsheight\z@
+}%
+\def\output@do@prep#1{%
+ \outputdebug@sw{\class@info{Prep: \string#1}}{}%
+ \@ifx{#1\relax}{\output@prep@document}{#1}%
+}%
+\def\output@column@do#1{%
+ \outputdebug@sw{\class@info{Output column: \string#1}}{}%
+ \@ifx{#1\relax}{\output@column@one}{#1}%
+}%
+\def\void@cclv{\begingroup\setbox\z@\box\@cclv\endgroup}%
+\def\remove@lastbox{\setbox\z@\lastbox}%
+\def\@cclv@nontrivial@sw{%
+ \@ifx@empty\@toplist{%
+ \@ifx@empty\@botlist{%
+ \@ifvoid\footins{%
+ \@ifvoid\@cclv{%
+ \false@sw
+ }{%
+ \setbox\z@\vbox{\unvcopy\@cclv}%
+ \@ifdim{\ht\z@=\topskip}{%
+ \setbox\z@\vbox\bgroup
+ \unvbox\z@
+ \remove@lastbox
+ \dimen@\lastskip\unskip
+ \@ifdim{\ht\z@=\ht\@protection@box}{%
+ \advance\dimen@\ht\z@
+ \@ifdim{\dimen@=\topskip}{%
+ \aftergroup\true@sw
+ }{%
+ \aftergroup\false@sw
+ }%
+ }{%
+ \aftergroup\false@sw
+ }%
+ \egroup
+ {%
+ \false@sw
+ }{%
+ \true@sw
+ }%
+ }{%
+ \@ifdim{\ht\z@=\z@}{%
+ \ltxgrid@info{Found trivial column. Discarding it}%
+ \outputdebug@sw{\trace@box\@cclv}{}%
+ \false@sw
+ }{%
+ \true@sw
+ }%
+ }%
+ }%
+ }{%
+ \true@sw
+ }%
+ }{%
+ \true@sw
+ }%
+ }{%
+ \true@sw
+ }%
+}%
+\def\protect@penalty#1{\protection@box\penalty-#1\relax}%
+\newbox\@protection@box
+\setbox\@protection@box\vbox to1986sp{\vfil}%
+\def\protection@box{\nointerlineskip\copy\@protection@box}%
+\def\dead@cycle@repair#1{%
+ \expandafter\do@@mark
+ \expandafter{%
+ \@@botmark
+ }%
+ \unvbox\@cclv
+ \nointerlineskip
+ \vbox to#1{\vss}%
+ \@ifnum{\outputpenalty<\@M}{\penalty\outputpenalty}{}%
+}%
+\def\dead@cycle@repair@protected#1{%
+ \expandafter\do@@mark
+ \expandafter{%
+ \@@botmark
+ }%
+ \begingroup
+ \unvbox\@cclv
+ \remove@lastbox
+ \nointerlineskip
+ \advance#1-\ht\@protection@box
+ \vbox to#1{\vss}%
+ \protection@box % Reinsert protection box
+ \@ifnum{\outputpenalty<\@M}{\penalty\outputpenalty}{}%
+ \endgroup
+}%
+\def\dead@cycle{%
+ \expandafter\do@@mark
+ \expandafter{%
+ \@@botmark
+ }%
+ \unvbox\@cclv
+ \@ifnum{\outputpenalty<\@M}{\penalty\outputpenalty}{}%
+}%
+\def\output@init@document{%
+ \ltxgrid@info@sw{\class@info{\string\output@init@document}}{}%
+ \global\vsize\vsize
+}%
+\def\output@prep@document{%
+ \ltxgrid@foot@info@sw{\class@info{\string\output@prep@document}\trace@scroll{\showbox\footins\showbox\footsofar}}{}%
+ \@ifvoid\footsofar{%
+ }{%
+ \global\setbox\footins\vbox\bgroup
+ \unvbox\footsofar
+ \@ifvoid\footins{}{%
+ \marry@baselines
+ \unvbox\footins
+ }%
+ \egroup
+ \ltxgrid@foot@info@sw{\trace@box\footins}{}%
+ }%
+}%
+\def\output@post@document{}%
+\let\@opcol\@undefined
+\def\@makecolumn#1{%
+ \ltxgrid@foot@info@sw{\class@info{\string\@makecolumn\string#1}}{}%
+ \setbox\@outputbox\vbox\bgroup
+ \boxmaxdepth\@maxdepth
+ \@tempdima\dp\@cclv
+ \unvbox\@cclv
+ \vskip-\@tempdima
+ \egroup
+ \xdef\@freelist{\@freelist\@midlist}\global\let\@midlist\@empty
+ \show@text@box@size
+ \@combinefloats
+ #1{%
+ \@combineinserts\@outputbox\footins
+ }{%
+ \combine@foot@inserts\footsofar\footins
+ }%
+ \set@adj@colht\dimen@
+ \count@\vbadness
+ \vbadness\@M
+ \setbox\@outputbox\vbox to\dimen@\bgroup
+ \@texttop
+ \dimen@\dp\@outputbox
+ \unvbox\@outputbox
+ \vskip-\dimen@
+ \@textbottom
+ \egroup
+ \vbadness\count@
+ \global\maxdepth\@maxdepth
+}%
+\let\@makespecialcolbox\@undefined
+\def\@combineinserts#1#2{%
+ \ltxgrid@foot@info@sw{\class@info{\string\@combineinserts\string#1\string#2}\trace@box#2}{}%
+ \setbox#1\vbox\bgroup
+ \unvbox#1%
+ \@ifvoid{#2}{}{%
+ \dimen@\ht#2\advance\dimen@\dp#2\advance\dimen@\skip#2%
+ \show@box@size{Combining inserts}#2%
+ \vskip\skip#2%
+ \setbox\z@\vbox{\footnoterule}\dimen@i\ht\z@
+ \color@begingroup
+ \normalcolor
+ \cleaders\box\z@\vskip\dimen@i\kern-\dimen@i
+ \csname combine@insert@\the\pagegrid@col\endcsname#2%
+ \color@endgroup
+ \kern-\dimen@\kern\dimen@
+ }%
+ \egroup
+ \ltxgrid@foot@info@sw{\trace@box#1}{}%
+}%
+\def\combine@insert@tw@#1{%
+ \compose@footnotes@two#1\@ifvbox{#1}{\unvbox}{\box}#1%
+}%
+\def\combine@insert@@ne#1{%
+ \compose@footnotes@one#1\@ifvbox{#1}{\unvbox}{\box}#1%
+}%
+\def\twocolumn@grid@setup{%
+ \expandafter\let\csname combine@insert@1\endcsname\combine@insert@tw@
+ \expandafter\let\csname combine@insert@2\endcsname\combine@insert@@ne
+}%
+\def\onecolumn@grid@setup{%
+ \expandafter\let\csname combine@insert@1\endcsname\combine@insert@@ne
+ \expandafter\let\csname combine@insert@2\endcsname\combine@insert@@ne
+}%
+\let\columngrid@setup\onecolumn@grid@setup
+\columngrid@setup
+\appdef\@floatplacement{%
+ \global\@fpmin\@fpmin
+}%
+\mathchardef\pagebreak@pen=\@M
+\expandafter\let\csname output@-\the\pagebreak@pen\endcsname\relax
+\mathchardef\do@startcolumn@pen=10005
+\@namedef{output@-\the\do@startcolumn@pen}{\do@startcolumn}%
+\def\do@startcolumn{%
+ \setbox\@cclv\vbox{\unvbox\@cclv\remove@lastbox\unskip}%
+ \clearpage@sw{\@clearfloatplacement}{\@floatplacement}%
+ \set@colht
+ \@booleanfalse\pfloat@avail@sw
+ \begingroup
+ \@colht\@colroom
+ \@booleanfalse\float@avail@sw
+ \@tryfcolumn\test@colfloat
+ \float@avail@sw{\aftergroup\@booleantrue\aftergroup\pfloat@avail@sw}{}%
+ \endgroup
+ \fcolmade@sw{%
+ \setbox\@cclv\vbox{\unvbox\@outputbox\unvbox\@cclv}%
+ \outputpenalty-\pagebreak@pen
+ \dead@cycle
+ }{%
+ \begingroup
+ \let\@elt\@scolelt
+ \let\reserved@b\@deferlist\global\let\@deferlist\@empty\reserved@b
+ \endgroup
+ \clearpage@sw{%
+ \outputpenalty\@M
+ }{%
+ \outputpenalty\do@newpage@pen
+ }%
+ \dead@cycle
+ }%
+ \check@deferlist@stuck\do@startcolumn
+ \set@vsize
+}%
+\def\@scolelt#1{\def\@currbox{#1}\@addtonextcol}%
+\def\test@colfloat#1{%
+ \csname @floatselect@sw@\thepagegrid\endcsname#1{}{\@testtrue}%
+ \@if@sw\if@test\fi{}{\aftergroup\@booleantrue\aftergroup\float@avail@sw}%
+}%
+\def\@addtonextcol{%
+ \begingroup
+ \@insertfalse
+ \@setfloattypecounts
+ \csname @floatselect@sw@\thepagegrid\endcsname\@currbox{%
+ \@ifnum{\@fpstype=8 }{}{%
+ \@ifnum{\@fpstype=24 }{}{%
+ \@flsettextmin
+ \@reqcolroom \ht\@currbox
+ \advance \@reqcolroom \@textmin
+ \advance \@reqcolroom \vsize % take into account split insertions
+ \advance \@reqcolroom -\pagegoal
+ \@ifdim{\@colroom>\@reqcolroom}{%
+ \@flsetnum \@colnum
+ \@ifnum{\@colnum>\z@}{%
+ \@bitor\@currtype\@deferlist
+ \@if@sw\if@test\fi{}{%
+ \@addtotoporbot
+ }%
+ }{}%
+ }{}%
+ }%
+ }%
+ }{}%
+ \@if@sw\if@insert\fi{}{%
+ \@cons\@deferlist\@currbox
+ }%
+ \endgroup
+}%
+\mathchardef\do@startpage@pen=10006
+\@namedef{output@-\the\do@startpage@pen}{\do@startpage}%
+\def\do@startpage{%
+ \setbox\@cclv\vbox{\unvbox\@cclv\remove@lastbox\unskip}%
+ \clearpage@sw{\@clearfloatplacement}{\@dblfloatplacement}%
+ \set@colht
+ \@booleanfalse\pfloat@avail@sw
+ \begingroup
+ \@booleanfalse\float@avail@sw
+ \@tryfcolumn\test@dblfloat
+ \float@avail@sw{\aftergroup\@booleantrue\aftergroup\pfloat@avail@sw}{}%
+ \endgroup
+ \fcolmade@sw{%
+ \global\setbox\pagesofar\vbox{\unvbox\pagesofar\unvbox\@outputbox}%
+ \@output@combined@page
+ }{%
+ \begingroup
+ \@booleanfalse\float@avail@sw
+ \let\@elt\@sdblcolelt
+ \let\reserved@b\@deferlist\global\let\@deferlist\@empty\reserved@b
+ \endgroup
+ \@ifdim{\@colht=\textheight}{% No luck...
+ \pfloat@avail@sw{% ...but a float *was* available!
+ \forcefloats@sw{%
+ \ltxgrid@warn{Forced dequeueing of floats stalled}%
+ }{%
+ \ltxgrid@warn{Dequeueing of floats stalled}%
+ }%
+ }{}%
+ }{}%
+ \outputpenalty\@M
+ \dead@cycle
+ }%
+ \check@deferlist@stuck\do@startpage
+ \set@colht
+}%
+\def\@output@combined@page{%
+ \@combinepage\true@sw
+ \@combinedblfloats
+ \@outputpage
+ \global\pagegrid@cur\@ne
+ \protect@penalty\do@startpage@pen
+}%
+\def\@sdblcolelt#1{\def\@currbox{#1}\@addtodblcol}%
+\def\test@dblfloat#1{%
+ \@if@notdblfloat{#1}{\@testtrue}{}%
+ \@if@sw\if@test\fi{}{\aftergroup\@booleantrue\aftergroup\float@avail@sw}%
+}%
+\def\@if@notdblfloat#1{\@ifdim{\wd#1<\textwidth}}%
+\@booleanfalse\forcefloats@sw
+\def\@addtodblcol{%
+ \begingroup
+ \@if@notdblfloat{\@currbox}{%
+ \false@sw
+ }{%
+ \@setfloattypecounts
+ \@getfpsbit \tw@
+ \@bitor \@currtype \@deferlist
+ \@if@sw\if@test\fi{%
+ \false@sw
+ }{%
+ \@ifodd\@tempcnta{%
+ \aftergroup\@booleantrue\aftergroup\float@avail@sw
+ \@flsetnum \@dbltopnum
+ \@ifnum{\@dbltopnum>\z@}{%
+ \@ifdim{\@dbltoproom>\ht\@currbox}{%
+ \true@sw
+ }{%
+ \@ifnum{\@fpstype<\sixt@@n}{%
+ \begingroup
+ \advance \@dbltoproom \@textmin
+ \@ifdim{\@dbltoproom>\ht\@currbox}{%
+ \endgroup\true@sw
+ }{%
+ \endgroup\false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }%
+ }{%
+ \false@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ }%
+ }%
+ {%
+ \@tempdima -\ht\@currbox
+ \advance\@tempdima
+ -\@ifx{\@dbltoplist\@empty}{\dbltextfloatsep}{\dblfloatsep}%
+ \global \advance \@dbltoproom \@tempdima
+ \global \advance \@colht \@tempdima
+ \global \advance \@dbltopnum \m@ne
+ \@cons \@dbltoplist \@currbox
+ }{%
+ \@cons \@deferlist \@currbox
+ }%
+ \endgroup
+}%
+\def\@tryfcolumn#1{%
+ \global\@booleanfalse\fcolmade@sw
+ \@ifx@empty\@deferlist{}{%
+ \global\let\@trylist\@deferlist
+ \global\let\@failedlist\@empty
+ \begingroup
+ \dimen@\vsize\advance\dimen@-\pagegoal\@ifdim{\dimen@>\z@}{%
+ \advance\@fpmin-\dimen@
+ }{}%
+ \def\@elt{\@xtryfc#1}\@trylist
+ \endgroup
+ \fcolmade@sw{%
+ \global\setbox\@outputbox\vbox{\vskip \@fptop}%
+ \let \@elt \@wtryfc \@flsucceed
+ \global\setbox\@outputbox\vbox{\unvbox\@outputbox
+ \unskip \vskip \@fpbot
+ }%
+ \let \@elt \relax
+ \xdef\@deferlist{\@failedlist\@flfail}%
+ \xdef\@freelist{\@freelist\@flsucceed}%
+ }{}%
+ }%
+}%
+\def\@wtryfc #1{%
+ \global\setbox\@outputbox\vbox{\unvbox\@outputbox
+ \box #1\vskip\@fpsep
+ }%
+}%
+\def\@xtryfc#1#2{%
+ \@next\reserved@a\@trylist{}{}% trim \@trylist. Ugly!
+ \@currtype \count #2%
+ \divide\@currtype\@xxxii\multiply\@currtype\@xxxii
+ \@bitor \@currtype \@failedlist
+ \@testfp #2%
+ #1#2%
+ \@ifdim{\ht #2>\@colht }{\@testtrue}{}%
+ \@if@sw\if@test\fi{%
+ \@cons\@failedlist #2%
+ }{%
+ \begingroup
+ \gdef\@flsucceed{\@elt #2}%
+ \global\let\@flfail\@empty
+ \@tempdima\ht #2%
+ \def \@elt {\@ztryfc#1}\@trylist
+ \@ifdim{\@tempdima >\@fpmin}{%
+ \global\@booleantrue\fcolmade@sw
+ }{%
+ \@cons\@failedlist #2%
+ }%
+ \endgroup
+ \fcolmade@sw{%
+ \let \@elt \@gobble
+ }{}%
+ }%
+}%
+\def\@ztryfc #1#2{%
+ \@tempcnta \count#2%
+ \divide\@tempcnta\@xxxii\multiply\@tempcnta\@xxxii
+ \@bitor \@tempcnta {\@failedlist \@flfail}%
+ \@testfp #2%
+ #1#2%
+ \@tempdimb\@tempdima
+ \advance\@tempdimb \ht#2\advance\@tempdimb\@fpsep
+ \@ifdim{\@tempdimb >\@colht}{%
+ \@testtrue
+ }{}%
+ \@if@sw\if@test\fi{%
+ \@cons\@flfail #2%
+ }{%
+ \@cons\@flsucceed #2%
+ \@tempdima\@tempdimb
+ }%
+}%
+\def\newpage@prep{%
+ \if@noskipsec
+ \ifx \@nodocument\relax
+ \leavevmode
+ \global \@noskipsecfalse
+ \fi
+ \fi
+ \if@inlabel
+ \leavevmode
+ \global \@inlabelfalse
+ \fi
+ \if@nobreak \@nobreakfalse \everypar{}\fi
+ \par
+}%
+\def \newpage {%
+ \newpage@prep
+ \do@output@MVL{%
+ \vfil
+ \penalty-\pagebreak@pen
+ }%
+}%
+\def\clearpage{%
+ \newpage@prep
+ \do@output@MVL{%
+ \vfil
+ \penalty-\pagebreak@pen
+ \global\@booleantrue\clearpage@sw
+ \protect@penalty\do@startcolumn@pen
+ \protect@penalty\do@endpage@pen
+ }%
+ \do@output@MVL{%
+ \global\@booleanfalse\clearpage@sw
+ }%
+}%
+\def\cleardoublepage{%
+ \clearpage
+ \@if@sw\if@twoside\fi{%
+ \@ifodd\c@page{}{%
+ \null\clearpage
+ }%
+ }{}%
+}%
+\@booleanfalse\clearpage@sw
+\mathchardef\do@endpage@pen=10007
+\@namedef{output@-\the\do@endpage@pen}{\csname end@column@\thepagegrid\endcsname}%
+\mathchardef\do@newpage@pen=10001
+\expandafter\let\csname output@-\the\do@newpage@pen\endcsname\relax
+\def\@clearfloatplacement{%
+ \global\@topnum \maxdimen
+ \global\@toproom \maxdimen
+ \global\@botnum \maxdimen
+ \global\@botroom \maxdimen
+ \global\@colnum \maxdimen
+ \global\@dbltopnum \maxdimen
+ \global\@dbltoproom \maxdimen
+ \global\@textmin \z@
+ \global\@fpmin \z@
+ \let\@testfp\@gobble
+ \appdef\@setfloattypecounts{\@fpstype16\advance\@fpstype\m@ne}%
+}%
+\let\@doclearpage\@undefined
+\let\@makefcolumn\@undefined
+\let\@makecol\@undefined
+\def\clr@top@firstmark{%
+ \global\let\saved@@topmark\@undefined
+ \global\let\saved@@firstmark\@empty
+ \global\let\saved@@botmark\@empty
+}%
+\clr@top@firstmark
+\def\set@top@firstmark{%
+ \@ifxundefined\saved@@topmark{\expandafter\gdef\expandafter\saved@@topmark\expandafter{\@@topmark}}{}%
+ \@if@empty\saved@@firstmark{\expandafter\gdef\expandafter\saved@@firstmark\expandafter{\@@firstmark}}{}%
+ \@if@empty\@@botmark{}{\expandafter\gdef\expandafter\saved@@botmark\expandafter{\@@botmark}}%
+}%
+\appdef\@outputpage@tail{%
+ \clr@top@firstmark
+}%
+\def\@float#1{%
+ \@ifnextchar[{%
+ \@yfloat\width@float{#1}%
+ }{%
+ \@ifxundefined@cs{fps@#1}{}{\expandafter\let\expandafter\fps@\csname fps@#1\endcsname}%
+ \expandafter\@argswap\expandafter{\expandafter[\fps@]}{\@yfloat\width@float{#1}}%
+ }%
+}%
+\def\@dblfloat#1{%
+ \@ifnum{\pagegrid@col=\@ne}{%
+ \@float{#1}%
+ }{%
+ \@ifnextchar[{%
+ \@yfloat\widthd@float{#1}%
+ }{%
+ \@ifxundefined@cs{fpsd@#1}{}{\expandafter\let\expandafter\fpsd@\csname fpsd@#1\endcsname}%
+ \expandafter\@argswap\expandafter{\expandafter[\fpsd@]}{\@yfloat\widthd@float{#1}}%
+ }%
+ }%
+}%
+\def\@yfloat#1#2[#3]{%
+ \@xfloat{#2}[#3]%
+ \hsize#1\linewidth\hsize
+ \let\set@footnotewidth\@empty
+ \minipagefootnote@init
+}%
+\def\fps@{tbp}%
+\def\fpsd@{tp}%
+\def\width@float{\columnwidth}%
+\def\widthd@float{\textwidth}%
+\def\end@float{%
+ \end@@float{%
+ \check@currbox@count
+ }%
+}%
+\def\end@dblfloat{%
+ \@ifnum{\pagegrid@col=\@ne}{%
+ \end@float
+ }{%
+ \end@@float{%
+ \@iffpsbit\@ne{\global\advance\count\@currbox\m@ne}{}%
+ \@iffpsbit\f@ur{\global\advance\count\@currbox-4\relax}{}%
+ \global\wd\@currbox\textwidth % Klootch
+ \check@currbox@count
+ }%
+ }%
+}%
+\def\end@@float#1{%
+ \minipagefootnote@here
+ \@endfloatbox
+ #1%
+ \@ifnum{\@floatpenalty <\z@}{%
+ \@largefloatcheck
+ \@cons\@currlist\@currbox
+ \@ifnum{\@floatpenalty <-\@Mii}{%
+ \do@output@cclv{\@add@float}%
+ }{%
+ \vadjust{\do@output@cclv{\@add@float}}%
+ \@Esphack
+ }%
+ }{}%
+}%
+\newcommand\float@end@float{%
+ \@endfloatbox
+ \global\setbox\@currbox\float@makebox\columnwidth
+ \let\@endfloatbox\relax
+ \end@float
+}%
+\newcommand\float@end@ltx{%
+ \end@@float{%
+ \global\setbox\@currbox\float@makebox\columnwidth
+ \check@currbox@count
+ }%
+}%
+\newcommand\newfloat@float[3]{%
+ \@namedef{ext@#1}{#3} %!
+ \let\float@do=\relax
+ \xdef\@tempa{\noexpand\float@exts{\the\float@exts \float@do{#3}}}%
+ \@tempa
+ \floatplacement{#1}{#2}%
+ \@ifundefined{fname@#1}{\floatname{#1}{#1}}{} %!
+ \expandafter\edef\csname ftype@#1\endcsname{\value{float@type}}%
+ \addtocounter{float@type}{\value{float@type}} %!
+ \restylefloat{#1}%
+ \expandafter\edef\csname fnum@#1\endcsname{%
+ \expandafter\noexpand\csname fname@#1\endcsname{} %!
+ \expandafter\noexpand\csname the#1\endcsname
+ }
+ \@ifnextchar[%]
+ {%
+ \float@newx{#1}%
+ }{%
+ \@ifundefined{c@#1}{\newcounter{#1}\@namedef{the#1}{\arabic{#1}}}{}%
+ }%
+}%
+\newcommand\newfloat@ltx[3]{%
+ \@namedef{ext@#1}{#3}%
+ \let\float@do=\relax
+ \xdef\@tempa{\noexpand\float@exts{\the\float@exts \float@do{#3}}}%
+ \@tempa
+ \floatplacement{#1}{#2}%
+ \@ifundefined{fname@#1}{\floatname{#1}{#1}}{}%
+ \expandafter\edef\csname ftype@#1\expandafter\endcsname\expandafter{\the\c@float@type}%
+ \addtocounter{float@type}{\value{float@type}}%
+ \restylefloat{#1}%
+ \expandafter\edef\csname fnum@#1\endcsname{%
+ \expandafter\noexpand\csname fname@#1\endcsname{}%
+ \expandafter\noexpand\csname the#1\endcsname
+ }
+ \@ifnextchar[%]
+ {%
+ \float@newx{#1}%
+ }{%
+ \@ifundefined{c@#1}{\newcounter{#1}\@namedef{the#1}{\arabic{#1}}}{}%
+ }%
+}%
+\appdef\document@inithook{%
+ \@ifxundefined\newfloat{}{%
+ \@ifx{\float@end\float@end@float}{%
+ \@ifx{\newfloat\newfloat@float}{\true@sw}{\false@sw}%
+ }{\false@sw}%
+ {%
+ \class@warn{Repair the float package}%
+ \let\float@end\float@end@ltx
+ \let\newfloat\newfloat@ltx
+ }{%
+ \class@warn{Failed to patch the float package}%
+ }%
+ }%
+}%
+\def\@iffpsbit#1{%
+ \begingroup
+ \@tempcnta\count\@currbox
+ \divide\@tempcnta#1\relax
+ \@ifodd\@tempcnta{\aftergroup\true@sw}{\aftergroup\false@sw}%
+ \endgroup
+}%
+\def\check@currbox@count{%
+ \@ifnum{\count\@currbox>\z@}{%
+ \count@\count\@currbox\divide\count@\sixt@@n\multiply\count@\sixt@@n
+ \@tempcnta\count\@currbox\advance\@tempcnta-\count@
+ \@ifnum{\@tempcnta=\z@}{%
+ \ltxgrid@warn{Float cannot be placed}%
+ }{}%
+ \expandafter\tally@float\expandafter{\@captype}%
+ }{%
+ }%
+}%
+\providecommand\minipagefootnote@init{}%
+\providecommand\minipagefootnote@here{}%
+\providecommand\tally@float[1]{}%
+\let\@specialoutput\@undefined
+\def\@add@float{%
+ \@pageht\ht\@cclv\@pagedp\dp\@cclv
+ \unvbox\@cclv
+ \@next\@currbox\@currlist{%
+ \csname @floatselect@sw@\thepagegrid\endcsname\@currbox{%
+ \@ifnum{\count\@currbox>\z@}{%
+ \advance \@pageht \@pagedp
+ \advance \@pageht \vsize \advance \@pageht -\pagegoal
+ \@addtocurcol
+ }{%
+ \@addmarginpar
+ }%
+ }{%
+ \@resethfps
+ \@cons\@deferlist\@currbox
+ }%
+ }{\@latexbug}%
+ \@ifnum{\outputpenalty<\z@}{%
+ \@if@sw\if@nobreak\fi{%
+ \nobreak
+ }{%
+ \addpenalty \interlinepenalty
+ }%
+ }{}%
+ \set@vsize
+}%
+\let\@reinserts\@undefined
+\def \@addtocurcol {%
+ \@insertfalse
+ \@setfloattypecounts
+ \ifnum \@fpstype=8
+ \else
+ \ifnum \@fpstype=24
+ \else
+ \@flsettextmin
+ \advance \@textmin \@textfloatsheight
+ \@reqcolroom \@pageht
+ \ifdim \@textmin>\@reqcolroom
+ \@reqcolroom \@textmin
+ \fi
+ \advance \@reqcolroom \ht\@currbox
+ \ifdim \@colroom>\@reqcolroom
+ \@flsetnum \@colnum
+ \ifnum \@colnum>\z@
+ \@bitor\@currtype\@deferlist
+ \if@test
+ \else
+ \@bitor\@currtype\@botlist
+ \if@test
+ \@addtobot
+ \else
+ \ifodd \count\@currbox
+ \advance \@reqcolroom \intextsep
+ \ifdim \@colroom>\@reqcolroom
+ \global \advance \@colnum \m@ne
+ \global \advance \@textfloatsheight \ht\@currbox
+ \global \advance \@textfloatsheight 2\intextsep
+ \@cons \@midlist \@currbox
+ \if@nobreak
+ \nobreak
+ \@nobreakfalse
+ \everypar{}%
+ \else
+ \addpenalty \interlinepenalty
+ \fi
+ \vskip \intextsep
+ \unvbox\@currbox %AO
+ \penalty\interlinepenalty
+ \vskip\intextsep
+ \ifnum\outputpenalty <-\@Mii \vskip -\parskip\fi
+ \outputpenalty \z@
+ \@inserttrue
+ \fi
+ \fi
+ \if@insert
+ \else
+ \@addtotoporbot
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \if@insert
+ \else
+ \@resethfps
+ \@cons\@deferlist\@currbox
+ \fi
+}%
+\@twocolumnfalse
+\let\@twocolumntrue\@twocolumnfalse
+\def\@addmarginpar{%
+ \@next\@marbox\@currlist{%
+ \@cons\@freelist\@marbox\@cons\@freelist\@currbox
+ }\@latexbug
+ \setbox\@marbox\hb@xt@\columnwidth{%
+ \csname @addmarginpar@\thepagegrid\endcsname{%
+ \hskip-\marginparsep\hskip-\marginparwidth
+ \box\@currbox
+ }{%
+ \hskip\columnwidth\hskip\marginparsep
+ \box\@marbox
+ }%
+ \hss
+ }%
+ \setbox\z@\box\@currbox
+ \@tempdima\@mparbottom
+ \advance\@tempdima -\@pageht
+ \advance\@tempdima\ht\@marbox
+ \@ifdim{\@tempdima >\z@}{%
+ \@latex@warning@no@line {Marginpar on page \thepage\space moved}%
+ }{%
+ \@tempdima\z@
+ }%
+ \global\@mparbottom\@pageht
+ \global\advance\@mparbottom\@tempdima
+ \global\advance\@mparbottom\dp\@marbox
+ \global\advance\@mparbottom\marginparpush
+ \advance\@tempdima -\ht\@marbox
+ \global\setbox \@marbox
+ \vbox {\vskip \@tempdima
+ \box \@marbox}%
+ \global \ht\@marbox \z@
+ \global \dp\@marbox \z@
+ \kern -\@pagedp
+ \nointerlineskip
+ \box\@marbox
+ \nointerlineskip
+ \hbox{\vrule \@height\z@ \@width\z@ \@depth\@pagedp}%
+}%
+\newenvironment{turnpage}{%
+ \def\width@float{\textheight}%
+ \def\widthd@float{\textheight}%
+ \appdef\@endfloatbox{%
+ \@ifxundefined\@currbox{%
+ \ltxgrid@warn{Cannot rotate! Not a float}%
+ }{%
+ \setbox\@currbox\vbox to\textwidth{\vfil\unvbox\@currbox\vfil}%
+ \global\setbox\@currbox\vbox{\rotatebox{90}{\box\@currbox}}%
+ }%
+ }%
+}{%
+}%
+\def\rotatebox@dummy#1#2{%
+ \ltxgrid@warn{You must load the graphics or graphicx package in order to use the turnpage environment}%
+ #2%
+}%
+\appdef\document@inithook{%
+ \@ifxundefined\rotatebox{\let\rotatebox\rotatebox@dummy}{}%
+}%
+\@namedef{output@-1073741824}{%
+ \deadcycles\z@
+ \void@cclv
+}%
+\mathchardef\save@column@pen=10016
+\@namedef{output@-\the\save@column@pen}{\save@column}%
+\let \@cclv@saved \@holdpg
+\let \@holdpg \@undefined
+\def\save@column{%
+ \@ifvoid\@cclv@saved{%
+ \set@top@firstmark
+ \global\@topmark@saved\expandafter{\@@topmark}%
+ }{}%
+ \global\setbox\@cclv@saved\vbox{%
+ \@ifvoid\@cclv@saved{}{%
+ \unvbox\@cclv@saved
+ \marry@baselines
+ }%
+ \unvbox\@cclv
+ \lose@breaks
+ \remove@lastbox
+ }%
+}%
+\newtoks\@topmark@saved
+\def\prep@cclv{%
+ \void@cclv
+ \setbox\@cclv\box\@cclv@saved
+ \vbadness\@M
+}%
+\mathchardef\save@column@insert@pen=10017
+\@namedef{output@-\the\save@column@insert@pen}{\toggle@insert{\savecolumn@holding}{\savecolumn@moving}}%
+\def\savecolumn@holding{%
+ \@if@exceed@pagegoal{\unvcopy\@cclv\remove@lastbox}{%
+ \setbox\z@\vbox{\unvcopy\@cclv\remove@lastbox}%
+ \outputdebug@sw{\trace@box\z@}{}%
+ \dimen@\ht\@cclv\advance\dimen@-\ht\z@
+ \dead@cycle@repair@protected\dimen@
+ }{%
+ \dead@cycle
+ }%
+}%
+\def\savecolumn@moving{%
+ \ltxgrid@info@sw{\class@info{\string\savecolumn@moving}}{}%
+ \@cclv@nontrivial@sw{%
+ \save@column
+ }{%
+ \void@cclv
+ }%
+ \@ifvoid\footins{}{%
+ \ltxgrid@foot@info@sw{\class@info{\string\savecolumn@moving}\trace@scroll{\showbox\footins@saved\showbox\footins}}{}%
+ \@ifvoid\footins@saved{%
+ \global\setbox\footins@saved\box\footins
+ }{%
+ \global\setbox\footins@saved\vbox\bgroup
+ \unvbox\footins@saved
+ \marry@baselines
+ \unvbox\footins
+ \egroup
+ }%
+ \ltxgrid@foot@info@sw{\trace@box\footins@saved}{}%
+ \protect@penalty\save@column@insert@pen
+ }%
+}%
+\newbox\footins@saved
+\newbox\footins@recovered
+\newbox\column@recovered
+\mathchardef\save@message@pen=10018
+\@namedef{output@-\the\save@message@pen}{\save@message}%
+\def\save@message{%
+ \void@cclv
+ \toks@\expandafter{\@@firstmark}%
+ \expandafter\gdef\expandafter\@message@saved\expandafter{\the\toks@}%
+ \expandafter\do@@mark\expandafter{\the\@topmark@saved}%
+}%
+\gdef\@message@saved{}%
+\mathchardef\execute@message@pen=10019
+\@namedef{output@-\the\execute@message@pen}{\@message@saved}%
+\def\execute@message{%
+ \@execute@message\save@column@pen
+}%
+\def\execute@message@insert#1{%
+ \@execute@message\save@column@insert@pen{%
+ \setbox \footins \box \footins@saved
+ \ltxgrid@foot@info@sw{\class@info{\string\execute@message@insert}\trace@box\footins}{}%
+ #1%
+ }%
+}%
+\long\def\@execute@message#1#2{%
+ \begingroup
+ \dimen@\prevdepth\@ifdim{\dimen@<\z@}{\dimen@\z@}{}%
+ \setbox\z@\vbox{%
+ \protect@penalty#1%
+ \protection@box
+ \toks@{\prep@cclv#2}%
+ \@@mark{\the\toks@}%
+ \penalty-\save@message@pen
+ \setbox\z@\null\dp\z@\dimen@\ht\z@-\dimen@
+ \nointerlineskip\box\z@
+ \penalty-\execute@message@pen
+ }\unvbox\z@
+ \endgroup
+}%
+\def\do@output@cclv{\execute@message}%
+\def\do@output@MVL#1{%
+ \@ifvmode{%
+ \begingroup\execute@message{\unvbox\@cclv#1}\endgroup
+ }{%
+ \@ifhmode{%
+ \vadjust{\execute@message{\unvbox\@cclv#1}}%
+ }{%
+ \@latexerr{\string\do@output@MVL\space cannot be executed in this mode!}\@eha
+ }%
+ }%
+}%
+\def\lose@breaks{%
+ \loopwhile{%
+ \count@\lastpenalty
+ \@ifnum{\count@=\@M}{%
+ \unpenalty\true@sw
+ }{%
+ \false@sw
+ }%
+ }%
+}%
+\def\removestuff{\do@output@MVL{\unskip\unpenalty}}%
+\def\removephantombox{%
+ \vadjust{%
+ \execute@message{%
+ \unvbox\@cclv
+ \remove@lastbox
+ \unskip
+ \unskip
+ \unpenalty
+ \penalty\predisplaypenalty
+ \vskip\abovedisplayskip
+ }%
+ }%
+}%
+\def\addstuff#1#2{\edef\@tempa{\noexpand\do@output@MVL{\noexpand\@addstuff{#1}{#2}}}\@tempa}%
+\def\@addstuff#1#2{%
+ \skip@\lastskip\unskip
+ \count@\lastpenalty\unpenalty
+ \@if@empty{#1}{}{\penalty#1\relax}%
+ \@ifnum{\count@=\z@}{}{\penalty\count@}%
+ \vskip\skip@
+ \@if@empty{#2}{}{\vskip#2\relax}%
+}%
+\def\replacestuff#1#2{\edef\@tempa{\noexpand\do@output@MVL{\noexpand\@replacestuff{#1}{#2}}}\@tempa}%
+\def\@replacestuff#1#2{%
+ \skip@\lastskip\unskip
+ \count@\lastpenalty\unpenalty
+ \@if@empty{#1}{}{%
+ \@ifnum{\count@>\@M}{}{%
+ \@ifnum{\count@=\z@}{\count@=#1\relax}{%
+ \@ifnum{\count@<#1\relax}{}{%
+ \count@=#1\relax
+ }%
+ }%
+ }%
+ }%
+ \@ifnum{\count@=\z@}{}{\penalty\count@}%
+ \@if@empty{#2}{}{%
+ \@tempskipa#2\relax
+ \@ifdim{\z@>\@tempskipa}{%
+ \advance\skip@-\@tempskipa
+ }{%
+ \@ifdim{\skip@>\@tempskipa}{}{%
+ \skip@\@tempskipa
+ }%
+ }%
+ }%
+ \vskip\skip@
+}%
+\def\move@insertions{\global\holdinginserts\z@}%
+\def\hold@insertions{\global\holdinginserts\@ne}%
+\hold@insertions
+\def\toggle@insert#1#2{%
+ \@ifnum{\holdinginserts>\z@}{\move@insertions#1}{\hold@insertions#2}%
+}%
+\def\do@columngrid#1#2{%
+ \par
+ \expandafter\let\expandafter\@tempa\csname open@column@#1\endcsname
+ \@ifx{\relax\@tempa}{%
+ \ltxgrid@warn{Unknown page grid #1. No action taken}%
+ }{%
+ \do@output@MVL{\start@column{#1}{#2}}%
+ }%
+}%
+\def\start@column#1#2{%
+ \def\@tempa{#1}\@ifx{\@tempa\thepagegrid}{%
+ \ltxgrid@info{Already in page grid \thepagegrid. No action taken}%
+ }{%
+ \expandafter\execute@message@insert
+ \expandafter{%
+ \csname shut@column@\thepagegrid\expandafter\endcsname
+ \csname open@column@#1\endcsname{#2}%
+ \set@vsize
+ }%
+ }%
+}%
+\def\thepagegrid{one}%
+\newbox\pagesofar
+\newbox\footsofar
+\def\combine@foot@inserts#1#2{%
+ \ltxgrid@info@sw{\class@info{\string\combine@foot@inserts\string#1\string#2}}{}%
+ \@ifvoid#1{%
+ \ltxgrid@foot@info@sw{\trace@box#2}{}\global\setbox#1\box#2%
+ }{%
+ \global\setbox#1\vbox\bgroup
+ \ltxgrid@foot@info@sw{\trace@box#1}{}\unvbox#1%
+ \@ifvoid#2{}{%
+ \marry@baselines
+ \ltxgrid@foot@info@sw{\trace@box#2}{}\unvbox#2%
+ }%
+ \egroup
+ }%
+ \ltxgrid@foot@info@sw{\trace@scroll{\showbox#1\showbox#2}}{}%
+}%
+\newcommand\onecolumngrid{\do@columngrid{one}{\@ne}}%
+\let\onecolumn\@undefined
+\def\open@column@one#1{%
+ \ltxgrid@info@sw{\class@info{\string\open@column@one\string#1}}{}%
+ \unvbox\pagesofar
+ \@ifvoid{\footsofar}{}{%
+ \insert\footins\bgroup\unvbox\footsofar\egroup
+ \penalty\z@
+ }%
+ \gdef\thepagegrid{one}%
+ \global\pagegrid@col#1%
+ \global\pagegrid@cur\@ne
+ \global\count\footins\@m
+ \global\divide\count\footins\tw@
+ \set@column@hsize\pagegrid@col
+ \set@colht
+}%
+\def\shut@column@one{%
+ \ltxgrid@info@sw{\class@info{\string\shut@column@one}}{}%
+ \@makecolumn\false@sw
+ \global\setbox\pagesofar\vbox\bgroup
+ \recover@column\@outputbox\footsofar\column@recovered\footins@recovered
+ \egroup
+ \begingroup\setbox\z@\box\@outputbox\endgroup
+ \combine@foot@inserts\footsofar\footins
+ \set@colht
+}%
+\def\float@column@one{%
+ \@makecolumn\true@sw
+ \@outputpage
+}%
+\def\end@column@one{%
+ \unvbox\@cclv\remove@lastbox
+ \protect@penalty\do@newpage@pen
+}%
+\def\output@column@one{%
+ \@outputpage
+}%
+\def\@addmarginpar@one{%
+ \@if@sw\if@mparswitch\fi{%
+ \@ifodd\c@page{\false@sw}{\true@sw}%
+ }{\false@sw}{%
+ \@if@sw\if@reversemargin\fi{\false@sw}{\true@sw}%
+ }{%
+ \@if@sw\if@reversemargin\fi{\true@sw}{\false@sw}%
+ }%
+}%
+\def\@floatselect@sw@one#1{\true@sw}%
+\def\onecolumngrid@push{%
+ \do@output@MVL{%
+ \@ifnum{\pagegrid@col=\@ne}{%
+ \global\let\restorecolumngrid\@empty
+ }{%
+ \xdef\restorecolumngrid{%
+ \noexpand\start@column{\thepagegrid}{\the\pagegrid@col}%
+ }%
+ \start@column{one}{\@ne}%
+ }%
+ }%
+}%
+\def\onecolumngrid@pop{%
+ \do@output@MVL{\restorecolumngrid}%
+}%
+\newcommand\twocolumngrid{\do@columngrid{mlt}{\tw@}}%
+\let\twocolumn\@undefined
+\let\@topnewpage\@undefined
+\def\open@column@mlt#1{%
+ \ltxgrid@info@sw{\class@info{\string\open@column@mlt\string#1}}{}%
+ \@ifvoid{\footsofar}{}{%
+ \insert\footins\bgroup\unvbox\footsofar\egroup
+ }%
+ \gdef\thepagegrid{mlt}%
+ \global\pagegrid@col#1%
+ \global\pagegrid@cur\@ne
+ \global\count\footins\@m
+ \set@column@hsize\pagegrid@col
+ \set@colht
+}%
+\def\shut@column@mlt{%
+ \ltxgrid@info@sw{\class@info{\string\shut@column@mlt}}{}%
+ \@cclv@nontrivial@sw{%
+ \@makecolumn\false@sw
+ \@ifnum{\pagegrid@cur<\pagegrid@col}{%
+ \expandafter\global\expandafter\setbox\csname col@\the\pagegrid@cur\endcsname\box\@outputbox
+ \global\advance\pagegrid@cur\@ne
+ }{}%
+ }{%
+ \void@cclv
+ }%
+ \@ifnum{\pagegrid@cur>\@ne}{%
+ \csname balance@\the\pagegrid@col\endcsname
+ \grid@column\@outputbox{}%
+ \@combinepage\false@sw
+ \@combinedblfloats
+ \global\setbox\pagesofar\box\@outputbox
+ \show@pagesofar@size
+ }{}%
+ \set@colht
+}%
+\def\float@column@mlt{%
+ \@output@combined@page
+}%
+\def\end@column@mlt{%
+ \@ifx@empty\@toplist{%
+ \@ifx@empty\@botlist{%
+ \@ifx@empty\@dbltoplist{%
+ \@ifx@empty\@deferlist{%
+ \@ifnum{\pagegrid@cur=\@ne}{%
+ \false@sw
+ }{%
+ \true@sw
+ }%
+ }{%
+ \true@sw
+ }%
+ }{%
+ \true@sw
+ }%
+ }{%
+ \true@sw
+ }%
+ }{%
+ \true@sw
+ }%
+ % true = kick out a column and try again
+ {%
+ \@cclv@nontrivial@sw{%
+ \unvbox\@cclv\remove@lastbox
+ }{%
+ \unvbox\@cclv\remove@lastbox\unskip\null
+ }%
+ \protect@penalty\do@newpage@pen
+ \protect@penalty\do@endpage@pen
+ }{%
+ \unvbox\@cclv\remove@lastbox
+ }%
+}%
+\def\output@column@mlt{%
+ \@ifnum{\pagegrid@cur<\pagegrid@col}{%
+ \expandafter\global\expandafter\setbox\csname col@\the\pagegrid@cur\endcsname\box\@outputbox
+ \global\advance\pagegrid@cur\@ne
+ }{%
+ \set@adj@colht\dimen@
+ \grid@column\@outputbox{}%
+ \@output@combined@page
+ }%
+}%
+\let\@outputdblcol\@undefined
+\def\@floatselect@sw@mlt#1{\@if@notdblfloat{#1}}%
+\def\@addmarginpar@mlt{% emits a boolean
+ \@ifnum{\pagegrid@cur=\@ne}%
+}%
+\def\set@footnotewidth@one{%
+ \hsize\columnwidth
+ \linewidth\hsize
+}%
+\def\set@footnotewidth@two{\set@footnotewidth@mlt\tw@}%
+\def\set@footnotewidth@mlt#1{%
+ \hsize\textwidth
+ \advance\hsize\columnsep
+ \divide\hsize#1%
+ \advance\hsize-\columnsep
+ \linewidth\hsize
+}%
+\def\compose@footnotes@one#1{%
+ \ltxgrid@foot@info@sw{\class@info{\string\compose@footnotes@one\string#1}\trace@box#1}{}%
+}%
+\let\compose@footnotes\compose@footnotes@one
+\def\compose@footnotes@two#1{%
+ \ltxgrid@foot@info@sw{\class@info{\string\compose@footnotes@two\string#1}\trace@box#1}{}%
+ \setbox\z@\box\@tempboxa
+ \let\recover@column\recover@column@null
+ \let\marry@baselines\@empty
+ \balance@two#1\@tempboxa
+ \global\setbox#1\hbox to\textwidth{\box#1\hfil\box\@tempboxa}%
+ \ltxgrid@foot@info@sw{\trace@box#1}{}%
+}%
+\let\pagegrid@cur\col@number
+\let\col@number\@undefined
+\newcount\pagegrid@col
+\pagegrid@cur\@ne
+\expandafter\let\csname col@\the\pagegrid@cur\endcsname\@leftcolumn
+\let\@leftcolumn\@undefined
+\pagegrid@col\tw@
+\def\pagegrid@init{%
+ \advance\pagegrid@cur\@ne
+ \@ifnum{\pagegrid@cur<\pagegrid@col}{%
+ \csname newbox\expandafter\endcsname\csname col@\the\pagegrid@cur\endcsname
+ \pagegrid@init
+ }{%
+ }%
+}%
+\appdef\class@documenthook{%
+ \pagegrid@init
+}%
+\def\grid@column#1#2{%
+ \ltxgrid@info@sw{\class@info{\string\grid@column\string#1}}{}%
+ \global\setbox#1\vbox\bgroup
+ \hb@xt@\textwidth\bgroup
+ \vrule\@height\z@\@width\z@\@if@empty{#2}{}{\@depth#2}%
+ \pagegrid@cur\@ne
+ \@ifnum{\pagegrid@cur<\pagegrid@col}{\loopwhile{\append@column@\pagegrid@cur\pagegrid@col}}{}%
+ \box@column#1%
+ \egroup
+ \vskip\z@skip
+ \egroup
+}%
+\def\append@column@#1#2{%
+ \expandafter\box@column\csname col@\the#1\endcsname
+ \hfil\vrule\@width\columnseprule\hfil
+ \advance#1\@ne
+ \@ifnum{#1<#2}%
+}%
+\def\box@column#1{%
+ \ltxgrid@info@sw{\class@info{\string\box@column\string#1}}{}%
+ \raise\topskip
+ \hb@xt@\columnwidth\bgroup
+ \dimen@\ht#1\@ifdim{\dimen@>\@colht}{\dimen@\@colht}{}%
+ \count@\vbadness\vbadness\@M
+ \dimen@ii\vfuzz\vfuzz\maxdimen
+ \ltxgrid@info@sw{\saythe\@colht\saythe\dimen@}{}%
+ \vtop to\dimen@\bgroup
+ \hrule\@height\z@
+ \unvbox#1%
+ \raggedcolumn@skip
+ \egroup
+ \vfuzz\dimen@ii
+ \vbadness\count@
+ \hss
+ \egroup
+}%
+\def\marry@baselines{%
+ \begingroup
+ \setbox\z@\lastbox
+ \@ifvoid{\z@}{%
+ \endgroup
+ }{%
+ \aftergroup\kern
+ \aftergroup-%
+ \expandafter\box\expandafter\z@\expandafter\endgroup\the\dp\z@\relax
+ }%
+ \vskip\marry@skip\relax
+}%
+\gdef\marry@skip{\z@skip}%
+\def\set@marry@skip{%
+ \begingroup
+ \skip@\baselineskip\advance\skip@-\topskip
+ \@ifdim{\skip@>\z@}{%
+ \xdef\marry@skip{\the\skip@}%
+ }{}%
+ \endgroup
+}%
+\appdef\document@inithook{%
+ \@ifxundefined\raggedcolumn@sw{\@booleanfalse\raggedcolumn@sw}{}%
+}%
+\def\raggedcolumn@skip{%
+ \vskip\z@\raggedcolumn@sw{\@plus.0001fil\@minus.0001fil}{}\relax
+}%
+\def\@combinepage#1{%
+ \ltxgrid@foot@info@sw{\class@info{\string\@combinepage\string#1}}{}%
+ \@ifvoid\pagesofar{}{%
+ \setbox\@outputbox\vbox{%
+ \unvbox\pagesofar
+ \marry@baselines
+ \unvbox\@outputbox
+ }%
+ }%
+ #1{%
+ \@ifvoid\footsofar{}{%
+ \show@box@size{Combining page footnotes}\footsofar
+ \setbox\footins\box\footsofar
+ \compose@footnotes
+ \@combineinserts\@outputbox\footins
+ }%
+ }{%
+ }%
+}%
+\def \@cflt{%
+ \let \@elt \@comflelt
+ \setbox\@tempboxa \vbox{}%
+ \@toplist
+ \setbox\@outputbox \vbox{%
+ \boxmaxdepth \maxdepth
+ \unvbox\@tempboxa\unskip
+ \topfigrule\vskip \textfloatsep
+ \unvbox\@outputbox
+ }%
+ \let\@elt\relax
+ \xdef\@freelist{\@freelist\@toplist}%
+ \global\let\@toplist\@empty
+}%
+\def \@cflb {%
+ \let\@elt\@comflelt
+ \setbox\@tempboxa \vbox{}%
+ \@botlist
+ \setbox\@outputbox \vbox{%
+ \unvbox\@outputbox
+ \vskip \textfloatsep\botfigrule
+ \unvbox\@tempboxa\unskip
+ }%
+ \let\@elt\relax
+ \xdef\@freelist{\@freelist\@botlist}%
+ \global \let \@botlist\@empty
+}%
+\def\@combinedblfloats{%
+ \@ifx@empty\@dbltoplist{}{%
+ \setbox\@tempboxa\vbox{}%
+ \let\@elt\@comdblflelt\@dbltoplist
+ \let\@elt\relax\xdef\@freelist{\@freelist\@dbltoplist}%
+ \global\let\@dbltoplist\@empty
+ \setbox\@outputbox\vbox{%
+ %\boxmaxdepth\maxdepth %% probably not needed, CAR
+ \unvbox\@tempboxa\unskip
+ \@ifnum{\@dbltopnum>\m@ne}{\dblfigrule}{}%FIXME: how is \@dbltopnum maintained?
+ \vskip\dbltextfloatsep
+ \unvbox\@outputbox
+ }%
+ }%
+}%
+\def\set@column@hsize#1{%
+ \pagegrid@col#1%
+ \global\columnwidth\textwidth
+ \global\advance\columnwidth\columnsep
+ \global\divide\columnwidth\pagegrid@col
+ \global\advance\columnwidth-\columnsep
+ \global\hsize\columnwidth
+ \global\linewidth\columnwidth
+ \skip@\baselineskip\advance\skip@-\topskip
+ \@ifnum{\pagegrid@col>\@ne}{\set@marry@skip}{}%
+}%
+\def\set@colht{%
+ \set@adj@textheight\@colht
+ \global\let\enlarge@colroom\@empty
+ \set@colroom
+}%
+\def\set@adj@textheight#1{%
+ \ltxgrid@info@sw{\class@info{\string\set@adj@textheight\string#1}\saythe\textheight}{}%
+ #1\textheight
+ \def\@elt{\adj@page#1}%
+ \@booleantrue\firsttime@sw\@dbltoplist
+ \let\@elt\relax
+ \global#1#1\relax
+ \ltxgrid@info@sw{\saythe#1}{}%
+}%
+\def\set@colroom{%
+ \ltxgrid@info@sw{\class@info{\string\set@colroom}}{}%
+ \set@adj@colht\@colroom
+ \@if@empty\enlarge@colroom{}{%
+ \global\advance\@colroom\enlarge@colroom\relax
+ \ltxgrid@info@sw{\saythe\@colroom}{}%
+ }%
+ \@ifdim{\@colroom>\topskip}{}{%
+ \ltxgrid@info{Not enough room: \string\@colroom=\the\@colroom; increasing to \the\topskip}%
+ \@colroom\topskip
+ }%
+ \global\@colroom\@colroom
+ \set@vsize
+}%
+\def\set@vsize{%
+ \global\vsize\@colroom
+ \ltxgrid@info@sw{\class@info{\string\set@vsize\string\vsize=\string\colroom}\saythe\vsize}{}%
+}%
+\def\set@adj@colht#1{%
+ #1\@colht
+ \ltxgrid@info@sw{\class@info{\string\set@adj@colht\string#1-\string\pagesofar}\saythe#1}{}%
+ \@ifvoid\pagesofar{}{%
+ \advance#1-\ht\pagesofar\advance#1-\dp\pagesofar
+ \ltxgrid@info@sw{\class@info{\string\pagesofar}\saythe#1}{}%
+ }%
+ \def\@elt{\adj@column#1}%
+ \@booleantrue\firsttime@sw\@toplist
+ \@booleantrue\firsttime@sw\@botlist
+ \let\@elt\relax
+}%
+\def\adj@column#1#2{%
+ \advance#1-\ht#2%
+ \advance#1-\firsttime@sw{\textfloatsep\@booleanfalse\firsttime@sw}{\floatsep}%
+ \ltxgrid@info@sw{\class@info{\string\adj@column\string#1-\string#2}\saythe#1}{}%
+}%
+\def\adj@page#1#2{%
+ \advance#1-\ht#2%
+ \advance#1-\firsttime@sw{\dbltextfloatsep\@booleanfalse\firsttime@sw}{\dblfloatsep}%
+ \ltxgrid@info@sw{\class@info{\string\adj@page\string#1-\string#2}\saythe#1}{}%
+}%
+\def\set@adj@box#1#2{%
+ \@ifvoid#2{}{%
+ \advance#1-\ht#2\advance#1-\dp#2%
+ \@booleantrue\temp@sw
+ \ltxgrid@foot@info@sw{\class@info{\string\set@adj@box\string#2}\saythe#1}{}%
+ }%
+}%
+\appdef\@outputpage@tail{%
+ \set@colht % FIXME: needed?
+ \@floatplacement % FIXME: needed?
+ \@dblfloatplacement % FIXME: needed?
+}%
+\begingroup
+ \catcode`\1=\cat@letter
+ \catcode`\2=\cat@letter
+ \toks@{%
+ \setbox\footins\box\footsofar
+ \balance@two\col@1\@outputbox
+ \global\setbox\col@1\box\col@1
+ \global\setbox\@outputbox\box\@outputbox
+ \combine@foot@inserts\footsofar\footins
+ }%
+ \aftergroup\def\aftergroup\balance@2\expandafter
+\endgroup\expandafter{\the\toks@}%
+\def\balance@two#1#2{%
+ \ltxgrid@info@sw{\class@info{\string\balance@two\string#1\string#2}}{}%
+ \outputdebug@sw{\trace@scroll{\showbox#1\showbox#2}}{}%
+ \setbox\thr@@\copy\footsofar
+ \setbox\@ne\vbox\bgroup
+ \@ifvoid{#1}{}{%
+ \recover@column#1\footsofar\column@recovered\footins@recovered
+ \@ifvoid{#2}{}{\marry@baselines}%
+ }%
+ \@ifvoid{#2}{}{%
+ \recover@column#2\footsofar\column@recovered\footins@recovered
+ }%
+ \egroup
+ \outputdebug@sw{\trace@scroll{\showbox\@ne}}{}%
+ \ltxgrid@foot@info@sw{\trace@scroll{\showbox\footsofar}}{}%
+ \dimen@\ht\@ne\divide\dimen@\tw@
+ \dimen@i\dimen@
+ \vbadness\@M
+ \vfuzz\maxdimen
+ \splittopskip\topskip
+ \loopwhile{%
+ \setbox\z@\copy\@ne\setbox\tw@\vsplit\z@ to\dimen@
+ \remove@depth\z@\remove@depth\tw@
+ \dimen@ii\ht\tw@\advance\dimen@ii-\ht\z@
+ \dimen@i=.5\dimen@i
+ \ltxgrid@info@sw{\saythe\dimen@\saythe\dimen@i\saythe\dimen@ii}{}%
+ \@ifdim{\dimen@ii<.5\p@}{%
+ \@ifdim{\dimen@ii>-.5\p@}%
+ }{%
+ \false@sw
+ }%
+ {%
+ \true@sw
+ }{%
+ \@ifdim{\dimen@i<.5\p@}%
+ }%
+ {%
+ \false@sw
+ }%
+ {%
+ \advance\dimen@\@ifdim{\dimen@ii<\z@}{}{-}\dimen@i
+ \true@sw
+ }%
+ }%
+ \ltxgrid@info@sw{\saythe\dimen@\saythe\dimen@i\saythe\dimen@ii}{}%
+ \@ifdim{\ht\z@=\z@}{%
+ \@ifdim{\ht\tw@=\z@}%
+ }{%
+ \true@sw
+ }%
+ {%
+ }{%
+ \ltxgrid@info{Unsatifactorily balanced columns: giving up}%
+ \setbox\tw@\box#1%
+ \setbox\z@ \box#2%
+ \global\setbox\footsofar\box\thr@@
+ }%
+ \setbox\tw@\vbox{\unvbox\tw@\vskip\z@skip}%
+ \setbox\z@ \vbox{\unvbox\z@ \vskip\z@skip}%
+ \set@colht
+ \dimen@\ht\z@\@ifdim{\dimen@<\ht\tw@}{\dimen@\ht\tw@}{}%
+ \@ifdim{\dimen@>\@colroom}{\dimen@\@colroom}{}%
+ \ltxgrid@info@sw{\saythe{\ht\z@}\saythe{\ht\tw@}\saythe\@colroom\saythe\dimen@}{}%
+ \setbox#1\vbox to\dimen@{\unvbox\tw@\unskip\raggedcolumn@skip}%
+ \setbox#2\vbox to\dimen@{\unvbox\z@ \unskip\raggedcolumn@skip}%
+ \outputdebug@sw{\trace@scroll{\showbox#1\showbox#2}}{}%
+}%
+\def\remove@depth#1{%
+ \setbox#1\vbox\bgroup
+ \unvcopy#1%
+ \setbox\z@\vbox\bgroup
+ \unvbox#1%
+ \setbox\z@\lastbox
+ \aftergroup\kern\aftergroup-\expandafter
+ \egroup
+ \the\dp\z@\relax
+ \egroup
+}%
+\def\recover@column#1#2#3#4{%
+ \ltxgrid@info@sw{\class@info{\string\recover@column\string#1\string#2\string#3\string#4}}{}%
+ \setbox#4\vbox{\unvcopy#1}%
+ \ltxgrid@foot@info@sw{\trace@scroll{\showbox#4}}{}%
+ \dimen@\ht#4%
+ \ltxgrid@foot@info@sw{\saythe\dimen@}{}%
+ \setbox#4\vbox\bgroup
+ \unvbox#4\unskip
+ \dimen@i\lastkern\unkern\advance\dimen@i\lastkern
+ \@ifdim{\dimen@i=\z@}{%
+ \dimen@i\lastkern\unkern
+ \ltxgrid@foot@info@sw{\saythe\dimen@i}{}%
+ \aftergroup\dimen@i
+ \expandafter\egroup\the\dimen@i\relax
+ }{%
+ \egroup
+ }%
+ \@ifdim{\dimen@i<\z@}{%
+ \advance\dimen@\dimen@i
+ \ltxgrid@foot@info@sw{\saythe\dimen@i\saythe\dimen@}{}%
+ \splittopskip\z@skip
+ \global\setbox#3\vsplit#4 to\dimen@
+ \global\setbox#4\vbox{\unvbox#4}%
+ \ltxgrid@foot@info@sw{\trace@scroll{\showbox#1\showbox#2\showbox#3\showbox#4}}{}%
+ \global\setbox#2\vbox\bgroup\unvbox#2\vskip\z@skip\unvbox#4\egroup
+ }{%
+ \setbox#3\box#4%
+ \ltxgrid@foot@info@sw{\trace@scroll{\showbox#1\showbox#2\showbox#3\showbox#4}}{}%
+ }%
+ \unvbox#3%
+ \loopwhile{\dimen@\lastskip\@ifdim{\dimen@>\z@}{\unskip\true@sw}{\false@sw}}%
+}%
+\def\recover@column@null#1#2#3#4{%
+ \unvcopy#1%
+}%
+\prepdef\@begindocumenthook{%
+ \open@column@one\@ne
+ \set@colht
+ \@floatplacement
+ \@dblfloatplacement
+}%
+\def\longtable@longtable{%
+ \par
+ \ifx\multicols\@undefined\else\ifnum\col@number>\@ne\@twocolumntrue\fi\fi
+ \if@twocolumn\LT@err{longtable not in 1-column mode}\@ehc\fi
+ \begingroup
+ \@ifnextchar[\LT@array{\LT@array[x]}%
+}%
+\def\longtable@new{%
+ \par
+ \@ifnextchar[\LT@array{\LT@array[x]}%
+}%
+\def\endlongtable@longtable{%
+ \crcr
+ \noalign{%
+ \let\LT@entry\LT@entry@chop
+ \xdef\LT@save@row{\LT@save@row}}%
+ \LT@echunk
+ \LT@start
+ \unvbox\z@
+ \LT@get@widths
+ \if@filesw
+ {\let\LT@entry\LT@entry@write\immediate\write\@auxout{%
+ \gdef\expandafter\noexpand
+ \csname LT@\romannumeral\c@LT@tables\endcsname
+ {\LT@save@row}}}%
+ \fi
+ \ifx\LT@save@row\LT@@save@row
+ \else
+ \LT@warn{Column \@width s have changed\MessageBreak
+ in table \thetable}%
+ \LT@final@warn
+ \fi
+ \endgraf\penalty -\LT@end@pen
+ \endgroup
+ \global\@mparbottom\z@
+ \pagegoal\vsize
+ \endgraf\penalty\z@\addvspace\LTpost
+ \ifvoid\footins\else\insert\footins{}\fi
+}%
+\def\endlongtable@new{%
+ \crcr
+ \noalign{%
+ \let\LT@entry\LT@entry@chop
+ \xdef\LT@save@row{\LT@save@row}%
+ }%
+ \LT@echunk
+ \LT@start
+ \unvbox\z@
+ \LT@get@widths
+ \@if@sw\if@filesw\fi{%
+ {%
+ \let\LT@entry\LT@entry@write
+ \immediate\write\@auxout{%
+ \gdef\expandafter\noexpand\csname LT@\romannumeral\c@LT@tables\endcsname
+ {\LT@save@row}%
+ }%
+ }%
+ }{}%
+ \@ifx{\LT@save@row\LT@@save@row}{}{%
+ \LT@warn{%
+ Column \@width s have changed\MessageBreak in table \thetable
+ }\LT@final@warn
+ }%
+ \endgraf
+ \nobreak
+ \box\@ifvoid\LT@lastfoot{\LT@foot}{\LT@lastfoot}%
+ \global\@mparbottom\z@
+ \endgraf
+ \LT@post
+}%
+\def\LT@start@longtable{%
+ \let\LT@start\endgraf
+ \endgraf\penalty\z@\vskip\LTpre
+ \dimen@\pagetotal
+ \advance\dimen@ \ht\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi
+ \advance\dimen@ \dp\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi
+ \advance\dimen@ \ht\LT@foot
+ \dimen@ii\vfuzz
+ \vfuzz\maxdimen
+ \setbox\tw@\copy\z@
+ \setbox\tw@\vsplit\tw@ to \ht\@arstrutbox
+ \setbox\tw@\vbox{\unvbox\tw@}%
+ \vfuzz\dimen@ii
+ \advance\dimen@ \ht
+ \ifdim\ht\@arstrutbox>\ht\tw@\@arstrutbox\else\tw@\fi
+ \advance\dimen@\dp
+ \ifdim\dp\@arstrutbox>\dp\tw@\@arstrutbox\else\tw@\fi
+ \advance\dimen@ -\pagegoal
+ \ifdim \dimen@>\z@\vfil\break\fi
+ \global\@colroom\@colht
+ \ifvoid\LT@foot\else
+ \advance\vsize-\ht\LT@foot
+ \global\advance\@colroom-\ht\LT@foot
+ \dimen@\pagegoal\advance\dimen@-\ht\LT@foot\pagegoal\dimen@
+ \maxdepth\z@
+ \fi
+ \ifvoid\LT@firsthead\copy\LT@head\else\box\LT@firsthead\fi
+\nobreak
+ \output{\LT@output}%
+}%
+\def\LT@start@new{%
+ \let\LT@start\endgraf
+ \endgraf
+ \markthr@@{}%
+ \LT@pre
+ \@ifvoid\LT@firsthead{\LT@top}{\box\LT@firsthead\nobreak}%
+ \mark@envir{longtable}%
+}%
+\def\LT@end@hd@ft@longtable#1{%
+ \LT@echunk
+ \ifx\LT@start\endgraf
+ \LT@err{Longtable head or foot not at start of table}{Increase LTchunksize}%
+ \fi
+ \setbox#1\box\z@
+ \LT@get@widths\LT@bchunk
+}%
+\def\LT@end@hd@ft@new#1{%
+ \LT@echunk
+ \@ifx{\LT@start\endgraf}{%
+ \LT@err{Longtable head or foot not at start of table}{Increase LTchunksize}%
+ }%
+ \global\setbox#1\box\z@
+ \LT@get@widths
+ \LT@bchunk
+}%
+\def\LT@array@longtable[#1]#2{%
+ \refstepcounter{table}\stepcounter{LT@tables}%
+ \if l#1%
+ \LTleft\z@ \LTright\fill
+ \else\if r#1%
+ \LTleft\fill \LTright\z@
+ \else\if c#1%
+ \LTleft\fill \LTright\fill
+ \fi\fi\fi
+ \let\LT@mcol\multicolumn
+ \let\LT@@tabarray\@tabarray
+ \let\LT@@hl\hline
+ \def\@tabarray{%
+ \let\hline\LT@@hl
+ \LT@@tabarray}%
+ \let\\\LT@tabularcr\let\tabularnewline\\%
+ \def\newpage{\noalign{\break}}%
+ \def\pagebreak{\noalign{\ifnum`}=0\fi\@testopt{\LT@no@pgbk-}4}%
+ \def\nopagebreak{\noalign{\ifnum`}=0\fi\@testopt\LT@no@pgbk4}%
+ \let\hline\LT@hline \let\kill\LT@kill\let\caption\LT@caption
+ \@tempdima\ht\strutbox
+ \let\@endpbox\LT@endpbox
+ \ifx\extrarowheight\@undefined
+ \let\@acol\@tabacol
+ \let\@classz\@tabclassz \let\@classiv\@tabclassiv
+ \def\@startpbox{\vtop\LT@startpbox}%
+ \let\@@startpbox\@startpbox
+ \let\@@endpbox\@endpbox
+ \let\LT@LL@FM@cr\@tabularcr
+ \else
+ \advance\@tempdima\extrarowheight
+ \col@sep\tabcolsep
+ \let\@startpbox\LT@startpbox\let\LT@LL@FM@cr\@arraycr
+ \fi
+ \setbox\@arstrutbox\hbox{\vrule
+ \@height \arraystretch \@tempdima
+ \@depth \arraystretch \dp \strutbox
+ \@width \z@}%
+ \let\@sharp##\let\protect\relax
+ \begingroup
+ \@mkpream{#2}%
+ \xdef\LT@bchunk{%
+ \global\advance\c@LT@chunks\@ne
+ \global\LT@rows\z@\setbox\z@\vbox\bgroup
+ \LT@setprevdepth
+ \tabskip\LTleft \noexpand\halign to\hsize\bgroup
+ \tabskip\z@ \@arstrut \@preamble \tabskip\LTright \cr}%
+ \endgroup
+ \expandafter\LT@nofcols\LT@bchunk&\LT@nofcols
+ \LT@make@row
+ \m@th\let\par\@empty
+ \everycr{}\lineskip\z@\baselineskip\z@
+ \LT@bchunk}%
+\def\LT@LR@l{\LTleft\z@ \LTright\fill}%
+\def\LT@LR@r{\LTleft\fill \LTright\z@ }%
+\def\LT@LR@c{\LTleft\fill \LTright\fill}%
+\def\LT@array@new[#1]#2{%
+ \refstepcounter{table}\stepcounter{LT@tables}%
+ \table@hook
+ \LTleft\fill \LTright\fill
+ \csname LT@LR@#1\endcsname
+ \let\LT@mcol\multicolumn
+ \let\LT@@hl\hline
+ \prepdef\@tabarray{\let\hline\LT@@hl}%
+ \let\\\LT@tabularcr
+ \let\tabularnewline\\%
+ \def\newpage{\noalign{\break}}%
+ \def\pagebreak{\noalign{\ifnum`}=0\fi\@testopt{\LT@no@pgbk-}4}%
+ \def\nopagebreak{\noalign{\ifnum`}=0\fi\@testopt\LT@no@pgbk4}%
+ \let\hline\LT@hline
+ \let\kill\LT@kill
+ \let\caption\LT@caption
+ \@tempdima\ht\strutbox
+ \let\@endpbox\LT@endpbox
+ \@ifxundefined\extrarowheight{%
+ \let\@acol\@tabacol
+ \let\@classz\@tabclassz
+ \let\@classiv\@tabclassiv
+ \def\@startpbox{\vtop\LT@startpbox}%
+ \let\@@startpbox\@startpbox
+ \let\@@endpbox\@endpbox
+ \let\LT@LL@FM@cr\@tabularcr@LaTeX
+ \let\@xtabularcr\@xtabularcr@LaTeX
+ }{%
+ \advance\@tempdima\extrarowheight
+ \col@sep\tabcolsep
+ \let\@startpbox\LT@startpbox
+ \let\LT@LL@FM@cr\@arraycr@array
+ }%
+ \let\@acoll\@tabacoll
+ \let\@acolr\@tabacolr
+ \let\@acol\@tabacol
+ \setbox\@arstrutbox\hbox{%
+ \vrule
+ \@height \arraystretch \@tempdima
+ \@depth \arraystretch \dp \strutbox
+ \@width \z@
+ }%
+ \let\@sharp##%
+ \let\protect\relax
+ \begingroup
+ \@mkpream{#2}%
+ \@mkpream@relax
+ \edef\@preamble{\@preamble}%
+ \prepdef\@preamble{%
+ \global\advance\c@LT@chunks\@ne
+ \global\LT@rows\z@
+ \setbox\z@\vbox\bgroup
+ \LT@setprevdepth
+ \tabskip\LTleft
+ \halign to\hsize\bgroup
+ \tabskip\z@
+ \@arstrut
+ }%
+ \appdef\@preamble{%
+ \tabskip\LTright
+ \cr
+ }%
+ \global\let\LT@bchunk\@preamble
+ \endgroup
+ \expandafter\LT@nofcols\LT@bchunk&\LT@nofcols
+ \LT@make@row
+ \m@th
+ \let\par\@empty
+ \everycr{}%
+ \lineskip\z@
+ \baselineskip\z@
+ \LT@bchunk
+}%
+\appdef\table@hook{}%
+\def\switch@longtable{%
+ \@ifpackageloaded{longtable}{%
+ \@ifx{\longtable\longtable@longtable}{%
+ \@ifx{\endlongtable\endlongtable@longtable}{%
+ \@ifx{\LT@start\LT@start@longtable}{%
+ \@ifx{\LT@end@hd@ft\LT@end@hd@ft@longtable}{%
+ \@ifx{\LT@array\LT@array@longtable}{%
+ \true@sw
+ }{\false@sw}%
+ }{\false@sw}%
+ }{\false@sw}%
+ }{\false@sw}%
+ }{\false@sw}%
+ {%
+ \class@info{Patching longtable package}%
+ }{%
+ \class@info{Patching unrecognized longtable package. (Proceeding with fingers crossed)}%
+ }%
+ \let\longtable\longtable@new
+ \let\endlongtable\endlongtable@new
+ \let\LT@start\LT@start@new
+ \let\LT@end@hd@ft\LT@end@hd@ft@new
+ \let\LT@array\LT@array@new
+ \newenvironment{longtable*}{%
+ \onecolumngrid@push
+ \longtable
+ }{%
+ \endlongtable
+ \onecolumngrid@pop
+ }%
+ }{}%
+}%
+\def\LT@pre{\penalty\z@\vskip\LTpre}%
+\def\LT@bot{\nobreak\copy\LT@foot\vfil}%
+\def\LT@top{\copy\LT@head\nobreak}%
+\def\LT@post{\penalty\z@\addvspace\LTpost\mark@envir{\curr@envir}}%
+\def\LT@adj{%
+ \setbox\z@\vbox{\null}\dimen@-\ht\z@
+ \setbox\z@\vbox{\unvbox\z@\LT@bot}\advance\dimen@\ht\z@
+ \global\advance\vsize-\dimen@
+}%
+\def\output@init@longtable{\LT@adj}%
+\def\output@prep@longtable{\setbox\@cclv\vbox{\unvbox\@cclv\LT@bot}}%
+\def\output@post@longtable{\LT@top}%
+\let\output@init@theindex\@empty
+\let\output@prep@theindex\@empty
+\def\output@post@theindex{%
+ \@ifodd\c@page{}{%
+ \@ifnum{\pagegrid@cur=\@ne}{%
+ }%
+ }%
+}%
+\def\check@aux{\do@output@MVL{\do@check@aux}}%
+\def\check@deferlist@stuck#1{%
+ \@ifx{\@deferlist@postshipout\@empty}{}{%
+ \@ifx{\@deferlist@postshipout\@deferlist}{%
+ \@fltstk
+ \clearpage@sw{%
+ \ltxgrid@warn{Deferred float stuck during \string\clearpage\space processing}%
+ }{%
+ \force@deferlist@stuck#1%
+ }%
+ }{%
+ }%
+ \global\let\@deferlist@postshipout\@empty
+ }%
+}%
+\def\@fltstk{%
+ \@latex@warning{A float is stuck (cannot be placed without \string\clearpage)}%
+}%
+\appdef\@outputpage@tail{%
+ \global\let\@deferlist@postshipout\@deferlist
+}%
+\def\@next#1#2{%
+ \@ifx{#2\@empty}{\false@sw}{%
+ \expandafter\@xnext#2\@@#1#2%
+ \true@sw
+ }%
+}%
+\def\@xnext\@elt#1#2\@@#3#4{%
+ \def#3{#1}%
+ \gdef#4{#2}%
+ \def\@tempa{#4}\def\@tempb{\@freelist}%
+ \@ifx{\@tempa\@tempb}{%
+ \@ifx{#4\@empty}{%
+ \force@deferlist@empty%{Float register pool exhausted}%
+ }{}%
+ }{}%
+}%
+\def\force@deferlist@stuck#1{%
+ \force@deferlist@sw{%
+ \@booleantrue\clearpage@sw
+ \@booleantrue\forcefloats@sw
+ #1%
+ }{%
+ }%
+}%
+\def\force@deferlist@empty{%
+ \force@deferlist@sw{%
+ \penalty-\pagebreak@pen
+ \protect@penalty\do@forcecolumn@pen
+ }{%
+ }%
+}%
+\@booleanfalse\force@deferlist@sw
+\mathchardef\do@forcecolumn@pen=10009
+\@namedef{output@-\the\do@forcecolumn@pen}{\do@forcecolumn}%
+\def\do@forcecolumn{%
+ \@booleantrue\clearpage@sw
+ \@booleantrue\forcefloats@sw
+ \do@startcolumn
+}%
+\def\enlargethispage{%
+ \@ifstar{%
+ \@enlargethispage{}%
+ }{%
+ \@enlargethispage{}%
+ }%
+}%
+\def\@enlargethispage#1#2{%
+ \begingroup
+ \dimen@#2\relax
+ \edef\@tempa{#1}%
+ \edef\@tempa{\noexpand\@@enlargethispage{\@tempa}{\the\dimen@}}%
+ \expandafter\do@output@MVL\expandafter{\@tempa}%
+ \endgroup
+}%
+\def\@@enlargethispage#1#2{%
+ \def\@tempa{one}%
+ \@ifx{\thepagegrid\@tempa}{%
+ \true@sw
+ }{%
+ \def\@tempa{mlt}%
+ \@ifx{\thepagegrid\@tempa}{%
+ \@ifnum{\pagegrid@cur=\@ne}{%
+ \gdef\enlarge@colroom{#2}%
+ \true@sw
+ }{%
+ \ltxgrid@warn{Too late to enlarge this page; move the command to the first column.}%
+ \false@sw
+ }%
+ }{%
+ \ltxgrid@warn{Unable to enlarge a page of this kind.}%
+ \false@sw
+ }%
+ }%
+ {%
+ \class@info{Enlarging page \thepage\space by #2}%
+ \global\advance\@colroom#2\relax
+ \set@vsize
+ }{%
+ }%
+}%
+\let\enlarge@colroom\@empty
+\let\@kludgeins\@undefined
+\@booleantrue\textheight@sw
+\prepdef\@outputpage@head{%
+ \textheight@sw{%
+ \count@\vbadness\vbadness\@M
+ \dimen@\vfuzz\vfuzz\maxdimen
+ \setbox\@outputbox\vbox to\textheight{\unvbox\@outputbox}%
+ \vfuzz\dimen@
+ \vbadness\count@
+ }{}%
+}%
+\appdef\@outputpage@head{%
+ \@ifx{\LS@rot\@undefined}{}{\LS@rot}%
+}%
+\def\ltxgrid@info{%
+ \ltxgrid@info@sw{\class@info}{\@gobble}%
+}%
+\@booleanfalse\ltxgrid@info@sw
+\def\ltxgrid@warn{%
+ \ltxgrid@warn@sw{\class@warn}{\@gobble}%
+}%
+\@booleantrue\ltxgrid@warn@sw
+\@booleanfalse\ltxgrid@foot@info@sw
+\def\def@next@handler#1#2#3{%
+ \advance#1\@ne\mathchardef#2\the#1%
+ \expandafter\def\csname output@-\the#1\endcsname{#3}%
+}%
+\def\def@line@handler#1#2{%
+ \begingroup
+ \@tempcnta\int@parpenalty
+ \advance\@tempcnta-#1%
+ \aftergroup\def
+ \expandafter\aftergroup\csname output@-\the\@tempcnta\endcsname
+ \endgroup{#2}%
+}%
+\mathchardef\int@parpenalty11012
+\def@line@handler\z@{\@handle@line@ltx{}{}{}}%
+\def@line@handler\@ne{\@handle@line@ltx{}{}{\brokenpenalty@ltx}}%
+\def@line@handler\tw@{\@handle@line@ltx{}{\clubpenalty@ltx}{}}%
+\def@line@handler\thr@@{\@handle@line@ltx{\clubpenalty@ltx}{}{\brokenpenalty@ltx}}%
+\def@line@handler\f@ur{\@handle@line@ltx{\widowpenalty@ltx}{}{}}%
+\def@line@handler{5}{\@handle@line@ltx{\widowpenalty@ltx}{}{\brokenpenalty@ltx}}%
+\def@line@handler{6}{\@handle@line@ltx{\widowpenalty@ltx}{\clubpenalty@ltx}{}}%
+\def@line@handler{7}{\@handle@line@ltx{\widowpenalty@ltx}{\clubpenalty@ltx}{\brokenpenalty@ltx}}%
+\def@line@handler{8}{\@handle@line@ltx{\displaywidowpenalty@ltx}{}{}}%
+\def@line@handler{9}{\@handle@line@ltx{\displaywidowpenalty@ltx}{}{\brokenpenalty@ltx}}%
+\def@line@handler{10}{\@handle@line@ltx{\displaywidowpenalty@ltx}{\clubpenalty@ltx}{}}%
+\def@line@handler{11}{\@handle@line@ltx{\displaywidowpenalty@ltx}{\clubpenalty@ltx}{\brokenpenalty@ltx}}%
+\def\@handle@line@ltx#1#2#3{%
+ \@@handle@line@ltx
+ \@tempcnta\lastpenalty
+ \@tempcntb\interlinepenalty@ltx\relax
+ \@if@empty{#1}{}{\advance\@tempcntb#1\relax}%
+ \@if@empty{#2}{}{\advance\@tempcntb#2\relax}%
+ \@if@empty{#3}{}{\advance\@tempcntb#3\relax}%
+ \penalty\@ifnum{\@tempcnta<\@tempcntb}{\@tempcntb}{\@tempcnta}%
+}%
+\let\@@handle@line@ltx\@empty
+\@tempcnta\int@parpenalty
+\def@next@handler\@tempcnta\int@postparpenalty{\reset@queues@ltx\handle@par@ltx}%
+\def@next@handler\@tempcnta\int@vadjustpenalty{\handle@vadjust@ltx}%
+\def@next@handler\@tempcnta\int@whatsitpenalty{\handle@whatsit@ltx}%
+\def@next@handler\@tempcnta\int@predisplaypenalty{\reset@queues@ltx\@handle@display@ltx{\predisplaypenalty@ltx}}%
+\def@next@handler\@tempcnta\int@interdisplaylinepenalty{\@handle@display@ltx{\interdisplaylinepenalty@ltx}}%
+\def@next@handler\@tempcnta\int@postdisplaypenalty{\@handle@display@ltx{\postdisplaypenalty@ltx}}%
+\def\@handle@display@ltx#1{%
+ \@@handle@display@ltx
+ \@tempcnta\lastpenalty
+ \@tempcntb#1%
+ \penalty\@ifnum{\@tempcnta<\@tempcntb}{\@tempcntb}{\@tempcnta}%
+}%
+\let\@@handle@display@ltx\@empty
+\def\handle@par@ltx{}%
+\def\set@linepenalties{%
+ \expandafter\def\expandafter\interlinepenalty@ltx\expandafter{\the\interlinepenalty}%
+ \interlinepenalty-\int@parpenalty
+ \expandafter\def\expandafter\brokenpenalty@ltx\expandafter{\the\brokenpenalty}%
+ \brokenpenalty\@ne
+ \expandafter\def\expandafter\clubpenalty@ltx\expandafter{\the\clubpenalty}%
+ \clubpenalty\tw@
+ \expandafter\def\expandafter\widowpenalty@ltx\expandafter{\the\widowpenalty}%
+ \widowpenalty\f@ur
+ \expandafter\def\expandafter\displaywidowpenalty@ltx\expandafter{\the\displaywidowpenalty}%
+ \displaywidowpenalty8\relax
+}%
+\def\restore@linepenalties{%
+ \interlinepenalty\interlinepenalty@ltx
+ \brokenpenalty\brokenpenalty@ltx
+ \clubpenalty\clubpenalty@ltx
+ \widowpenalty\widowpenalty@ltx
+ \displaywidowpenalty\displaywidowpenalty@ltx
+ \relax
+}%
+\def\set@displaypenalties#1{%
+ \expandafter\def\expandafter\predisplaypenalty@ltx\expandafter{\the\predisplaypenalty}%
+ \expandafter\def\expandafter\interdisplaylinepenalty@ltx\expandafter{\the\interdisplaylinepenalty}%
+ \expandafter\def\expandafter\postdisplaypenalty@ltx\expandafter{\the\postdisplaypenalty}%
+ \@ifhmode{\predisplaypenalty-\int@predisplaypenalty\relax}{}%
+ #1{\interdisplaylinepenalty-\int@interdisplaylinepenalty\relax}{}%
+ #1{\postdisplaypenalty-\int@postdisplaypenalty\relax}{}%
+}%
+\def\enqueue@whatsit@ltx#1{%
+ \gappdef\g@whatsit@queue{{#1}}%
+ \vadjust{\penalty-\int@whatsitpenalty}%
+}%
+\def\handle@whatsit@ltx{%
+ \unvbox\@cclv
+ \g@pop@ltx\g@whatsit@queue\@tempa
+ \expandafter\do@whatsit\expandafter{\@tempa}%
+}%
+\def\do@whatsit#1{}%
+\def\g@pop@ltx#1#2{%
+ \expandafter\@g@pop@ltx#1{}{}\@@#1#2%
+}%
+\def\@g@pop@ltx#1#2\@@#3#4{%
+ \gdef#3{#2}%
+ \def#4{#1}%
+}%
+\let\vspace@ltx\vspace
+\let\pagebreak@ltx\pagebreak
+\let\nopagebreak@ltx\nopagebreak
+\let\endline@ltx\\
+\let\@arrayparboxrestore@ltx\@arrayparboxrestore
+\def\@vspace@org #1{%
+ \ifvmode
+ \vskip #1
+ \vskip\z@skip
+ \else
+ \@bsphack
+ \vadjust{\@restorepar
+ \vskip #1
+ \vskip\z@skip
+ }%
+ \@esphack
+ \fi
+}%
+\def\@vspace@ltx#1{%
+ \@ifvmode{%
+ \vskip#1\vskip\z@skip
+ }{%
+ \@bsphack
+ \ex@vadjust@ltx{%
+ \@restorepar
+ \nobreak
+ \vskip#1\vskip\z@skip
+ }%
+ \@esphack
+ }%
+}%
+\def\@vspacer@org#1{%
+ \ifvmode
+ \dimen@\prevdepth
+ \hrule \@height\z@
+ \nobreak
+ \vskip #1
+ \vskip\z@skip
+ \prevdepth\dimen@
+ \else
+ \@bsphack
+ \vadjust{\@restorepar
+ \hrule \@height\z@
+ \nobreak
+ \vskip #1
+ \vskip\z@skip}%
+ \@esphack
+\fi
+}%
+\def\@vspacer@ltx#1{%
+ \@ifvmode{%
+ \dimen@\prevdepth
+ \hrule\@height\z@
+ \nobreak
+ \vskip#1\vskip\z@skip
+ \prevdepth\dimen@
+ }{%
+ \@bsphack
+ \ex@vadjust@ltx{%
+ \@restorepar
+ \hrule\@height\z@
+ \nobreak
+ \vskip#1\vskip\z@skip
+ }%
+ \@esphack
+ }%
+}%
+\def\@no@pgbk@org #1[#2]{%
+ \ifvmode
+ \penalty #1\@getpen{#2}%
+ \else
+ \@bsphack
+ \vadjust{\penalty #1\@getpen{#2}}%
+ \@esphack
+ \fi
+}%
+\def\@no@pgbk@ltx#1[#2]{%
+ \@ifvmode{%
+ \penalty#1\@getpen{#2}%
+ }{%
+ \@bsphack
+ \ex@vadjust@ltx{%
+ \penalty#1\@getpen{#2}%
+ }%
+ \@esphack
+ }%
+}%
+\long\def\end@line@org{%
+ \let\reserved@e\relax
+ \let\reserved@f\relax
+ \@ifstar{%
+ \let\reserved@e\vadjust
+ \let\reserved@f\nobreak
+ \@xnewline
+ }%
+ \@xnewline
+}%
+\long\def\end@line@ltx{%
+ \let\reserved@e\relax
+ \let\reserved@f\relax
+ \@ifstar{%
+ \let\reserved@e\ex@vadjust@ltx
+ \let\reserved@f\nobreak
+ \@xnewline
+ }{%
+ \@xnewline
+ }%
+}%
+\def\@newline@org[#1]{%
+ \let\reserved@e\vadjust
+ \@gnewline{\vskip#1}%
+}%
+\def\@newline@ltx[#1]{%
+ \let\reserved@e\ex@vadjust@ltx
+ \@gnewline{\vskip#1}%
+}%
+ \@ifx{\@vspace\@vspace@org}{%
+ \@ifx{\@vspacer\@vspacer@org}{%
+ \@ifx{\@no@pgbk\@no@pgbk@org}{%
+ \@ifx{\@newline\@newline@org}{%
+ \expandafter\@ifx\expandafter{\csname\expandafter\@gobble\string\\ \endcsname\end@line@org}{%
+ \true@sw
+ }{\false@sw}%
+ }{\false@sw}%
+ }{\false@sw}%
+ }{\false@sw}%
+ }{\false@sw}%
+ {%
+ \class@info{Overriding \string\@vspace, \string\@vspacer, \string\@no@pgbk, \string\@newline, and \string\\ }%
+ \let\@normalcr\end@line@ltx
+ \expandafter\let\csname\expandafter\@gobble\string\\ \endcsname\@normalcr
+ \let\@newline\@newline@ltx
+ \let\@vspace\@vspace@ltx
+ \let\@vspacer\@vspacer@ltx
+ \let\@no@pgbk\@no@pgbk@ltx
+ }{%
+ \class@warn{%
+ Failed to recognize \string\@vspace, \string\@vspacer, \string\@no@pgbk, \string\@newline, and \string\\;
+ no patches applied. Please get a more up-to-date class,
+ }%
+ }%
+\let\ex@vadjust@ltx\vadjust
+\def\enqueue@vadjust@ltx#1{%
+ \gappdef\g@vadjust@queue{{#1}}%
+ \vadjust{\penalty-\int@vadjustpenalty}%
+}%
+\def\handle@vadjust@ltx{%
+ \unvbox\@cclv
+ \g@pop@ltx\g@vadjust@queue\@tempa
+ \expandafter\gappdef\expandafter\g@vadjust@line\expandafter{\@tempa}%
+}%
+\let\g@vadjust@line\@empty
+\def\reset@queues@ltx{%
+ \global\let\g@whatsit@queue\@empty
+ \global\let\g@vadjust@queue\@empty
+}%
+\newcommand\linenomathWithnumbers@LN{%
+ \ifLineNumbers
+ \ifnum\interlinepenalty>-\linenopenaltypar
+ \global\holdinginserts\thr@@
+ \advance\interlinepenalty \linenopenalty
+ \ifhmode
+ \advance\predisplaypenalty \linenopenalty
+ \fi
+ \advance\postdisplaypenalty \linenopenalty
+ \advance\interdisplaylinepenalty \linenopenalty
+ \fi
+ \fi
+ \ignorespaces
+}%
+\newcommand\linenomathNonumbers@LN{%
+ \ifLineNumbers
+ \ifnum\interlinepenalty>-\linenopenaltypar
+ \global\holdinginserts\thr@@
+ \advance\interlinepenalty \linenopenalty
+ \ifhmode
+ \advance\predisplaypenalty \linenopenalty
+ \fi
+ \fi
+ \fi
+ \ignorespaces
+}%
+\def\endlinenomath@LN{%
+ \ifLineNumbers
+ \global\holdinginserts\@LN@outer@holdins
+ \fi
+ \global\@ignoretrue
+}
+\def\linenumberpar@LN{%
+ \ifvmode \@@@par \else
+ \ifinner \@@@par \else
+ \xdef\@LN@outer@holdins{\the\holdinginserts}%
+ \advance \interlinepenalty \linenopenalty
+ \linenoprevgraf \prevgraf
+ \global \holdinginserts \thr@@
+ \@@@par
+ \ifnum\prevgraf>\linenoprevgraf
+ \penalty-\linenopenaltypar
+ \fi
+ \@LN@parpgbrk
+ \global\holdinginserts\@LN@outer@holdins
+ \advance\interlinepenalty -\linenopenalty
+ \fi
+ \fi
+}%
+\appdef\class@documenthook{%
+ \@ifpackageloaded{lineno}{%
+ \@ifx{\linenomathWithnumbers\linenomathWithnumbers@LN}{%
+ \@ifx{\linenomathNonumbers\linenomathNonumbers@LN}{%
+ \@ifx{\endlinenomath\endlinenomath@LN}{%
+ \@ifx{\linenumberpar\linenumberpar@LN}{%
+ \true@sw
+ }{\false@sw}%
+ }{\false@sw}%
+ }{\false@sw}%
+ }{\false@sw}%
+ {%
+ \class@info{Overriding lineo.sty, restoring output routine,}%
+ \let\linenumberpar\linenumberpar@ltx
+ \let\endlinenomath\endlinenomath@ltx
+ \expandafter\let\csname endlinenomath*\endcsname\endlinenomath@ltx
+ \let\linenomathWithnumbers\linenomathWithnumbers@ltx
+ \let\linenomathNonumbers\linenomathNonumbers@ltx
+ \let\ex@vadjust@ltx\ex@vadjust@line
+ \let\@LN@postlabel\enqueue@whatsit@ltx
+ \let\do@whatsit\write@linelabel
+ \let\handle@par@ltx\handle@par@LN
+ \let\@@handle@line@ltx\Make@LineNo@ltx
+ \let\@@handle@display@ltx\Make@LineNo@ltx
+ \output@latex{\natural@output}%
+ \let\vspace\vspace@ltx
+ \let\pagebreak\pagebreak@ltx
+ \let\nopagebreak\nopagebreak@ltx
+ \let\@arrayparboxrestore\@arrayparboxrestore@ltx
+ \let\\\endline@ltx
+ \appdef\set@footnotefont{%
+ \let\par\@@@par
+ \let\@@par\@@@par
+ }%
+ \@if@sw\ifLineNumbers\fi{%
+ \class@info{Reinvoke \string\linenumbers}%
+ \let\@@par\linenumberpar
+ \@ifx{\@par\linenumberpar@LN}{\let\@par\linenumberpar}{}%
+ \@ifx{\par\linenumberpar@LN}{\let\par\linenumberpar}{}%
+ }{%
+ \class@info{Line numbering not turned on yet}%
+ }%
+ }{%
+ \class@warn{Failed to recognize lineno.sty procedures; no patches applied. Please get a more up-to-date class.}%
+ }%
+ }{%
+ }%
+}%
+\def\linenumberpar@ltx{\@ifvmode{\@@@par}{\@linenumberpar}}%
+\def\@linenumberpar{%
+ \linenoprevgraf\prevgraf
+ \set@linepenalties
+ \@@@par
+ \@ifnum{\prevgraf>\linenoprevgraf}{
+ \penalty-\int@postparpenalty
+ }{}%
+ \@LN@parpgbrk
+ \restore@linepenalties
+}%
+\newcommand\linenomathWithnumbers@ltx{\@linenomathnumbers@ltx\true@sw}%
+\newcommand\linenomathNonumbers@ltx{\@linenomathnumbers@ltx\false@sw}%
+\def\@linenomathnumbers@ltx#1{%
+ \@if@sw\ifLineNumbers\fi{%
+ \set@linepenalties
+ \set@displaypenalties#1%
+ }{}%
+ \ignorespaces
+}%
+\def\endlinenomath@ltx{%
+ \global\@ignoretrue
+}%
+\def\handle@par@LN{%
+ \Make@LineNo@ltx
+ \@tempcnta\lastpenalty
+ \@ifnum{\@tempcnta=\z@}{}{%
+ \expandafter\gdef
+ \expandafter\@LN@parpgbrk
+ \expandafter{%
+ \expandafter\penalty
+ \the\@tempcnta
+ \global\let\@LN@parpgbrk\@LN@screenoff@pen
+ }%
+ }%
+}%
+\def\Make@LineNo@ltx{%
+ \@LN@maybe@normalLineNumber
+ \boxmaxdepth\maxdimen\setbox\z@\vbox{\unvbox\@cclv}%
+ \@tempdima\dp\z@
+ \unvbox\z@
+ \sbox\@tempboxa{\hb@xt@\z@{\makeLineNumber}}%
+ \ht\@tempboxa\z@
+ \@LN@depthbox
+ \stepLineNumber
+ \g@vadjust@line
+ \global\let\g@vadjust@line\@empty
+}%
+\def\write@linelabel#1{%
+ \protected@write\@auxout{}{%
+ \string\newlabel{#1}{{\theLineNumber}{\thepage}{}{}{}}%
+ }%
+}%
+\def\ex@vadjust@line{%
+ \@if@sw\ifLineNumbers\fi{\enqueue@vadjust@ltx}{\vadjust}%
+}%
+\let\setup@hook\@empty
+\appdef\document@inithook{%
+ \switch@longtable
+ \let\LT@makecaption\LT@makecaption@rtx
+}%
+\def\LT@makecaption@rtx#1#2#3{%
+ \LT@mcol\LT@cols c{%
+ \hbox to\z@{%
+ \hss
+ \parbox[t]\LTcapwidth{%
+ \sbox\@tempboxa{#1{#2: }#3\unskip\nobreak\vrule\@width\z@\@height\z@\@depth .5\baselineskip}%
+ \ifdim\wd\@tempboxa>\hsize
+ #1{#2: }#3\unskip\nobreak\vrule\@width\z@\@height\z@\@depth .5\baselineskip
+ \else
+ \hbox to\hsize{\hfil\box\@tempboxa\hfil}%
+ \fi
+ \endgraf
+ }%
+ \hss
+ }%
+ }%
+}%
+\def\protectdef@boldmath{%
+ \expandafter\@ifnotrelax\csname boldmath \endcsname{}{%
+ \class@info{Robustifying \string\LaTeX's \string\boldmath\space command}%
+ \expandafter\let\csname boldmath \endcsname\boldmath
+ \expandafter\def\expandafter\boldmath\expandafter{\expandafter\protect\csname boldmath \endcsname}%
+ }%
+}%
+\appdef\document@inithook{%
+ \protectdef@boldmath
+}%
+\DeclareOption{checkin}{%
+ \@booleantrue\dateinRH@sw
+ \@booleantrue\preprintsty@sw
+ \def\@pointsize{12}%
+ \@booleantrue\showPACS@sw
+ \@booleantrue\showKEYS@sw
+ \def\fp@proc@h{\allow@breaking@tables}%
+ \def\fp@proc@H{\allow@breaking@tables}%
+}%
+\@booleanfalse\dateinRH@sw
+\def\checkindate{\dateinRH@sw{{\tiny(\today)}}{}}%
+\def\allow@breaking@tables{%
+ \def\array@default{v}% tabular can break over pages
+ \@booleanfalse\floats@sw % table can break over pages
+}%
+\DeclareOption{preprint}{%
+ \@booleantrue\preprintsty@sw
+ \ExecuteOptions{12pt}%
+}%
+\DeclareOption{reprint}{%
+ \@booleanfalse\preprintsty@sw
+ \@booleantrue\twocolumn@sw
+ \ExecuteOptions{10pt}%
+}%
+\DeclareOption{manuscript}{%
+ \class@warn{Document class option manuscript is obsolete; use preprint instead}%
+ \ExecuteOptions{preprint}%
+}%
+\@booleanfalse\preprintsty@sw
+\DeclareOption{showpacs}{%
+ \@booleantrue\showPACS@sw
+}%
+\DeclareOption{noshowpacs}{%
+ \@booleanfalse\showPACS@sw
+}%
+\DeclareOption{showkeys}{%
+ \@booleantrue\showKEYS@sw
+}%
+\DeclareOption{noshowkeys}{%
+ \@booleanfalse\showKEYS@sw
+}%
+\@booleanfalse\showPACS@sw
+\@booleanfalse\showKEYS@sw
+\DeclareOption{balancelastpage}{%
+ \@booleantrue\balancelastpage@sw
+}%
+\DeclareOption{nobalancelastpage}{%
+ \@booleanfalse\balancelastpage@sw
+}%
+\@booleantrue\balancelastpage@sw
+\DeclareOption{nopreprintnumbers}{\@booleanfalse\preprint@sw}%
+\DeclareOption{preprintnumbers}{\@booleantrue\preprint@sw}%
+\appdef\setup@hook{%
+ \@ifxundefined\preprint@sw{\let\preprint@sw\preprintsty@sw}{}%
+}%
+\DeclareOption{hyperref}{%
+ \class@warn{Class option "hyperref" is no longer supported.^^JEmploy \string\usepackage{hyperref} instead}%
+}%
+\DeclareOption{10pt}{\def\@pointsize{10}}%
+\DeclareOption{11pt}{\def\@pointsize{11}}%
+\DeclareOption{12pt}{\def\@pointsize{12}}%
+\let\@pointsize\@undefined
+\DeclareOption{a4paper}{%
+ \setlength\paperheight {297mm}%
+ \setlength\paperwidth {210mm}%
+}%
+\DeclareOption{a5paper}{%
+ \setlength\paperheight {210mm}%
+ \setlength\paperwidth {148mm}%
+}%
+\DeclareOption{b5paper}{%
+ \setlength\paperheight {250mm}%
+ \setlength\paperwidth {176mm}%
+}%
+\DeclareOption{letterpaper}{%
+ \setlength\paperheight {11in}%
+ \setlength\paperwidth {8.5in}%
+}%
+\DeclareOption{legalpaper}{%
+ \setlength\paperheight {14in}%
+ \setlength\paperwidth {8.5in}%
+}%
+\DeclareOption{executivepaper}{%
+ \setlength\paperheight {10.5in}%
+ \setlength\paperwidth {7.25in}%
+}%
+\DeclareOption{landscape}{%
+ \setlength\@tempdima {\paperheight}%
+ \setlength\paperheight {\paperwidth}%
+ \setlength\paperwidth {\@tempdima}%
+}%
+\ds@letterpaper
+\DeclareOption{bibnotes}{\let\frontmatter@footnote@produce\frontmatter@footnote@produce@endnote}%
+\DeclareOption{nobibnotes}{\let\frontmatter@footnote@produce\frontmatter@footnote@produce@footnote}%
+\let\frontmatter@footnote@produce\frontmatter@footnote@produce@footnote
+\appdef\class@enddocumenthook{\auto@bib}%
+\DeclareOption{footinbib}{\@booleantrue\footinbib@sw}
+\DeclareOption{nofootinbib}{\@booleanfalse\footinbib@sw}
+\@booleanfalse\footinbib@sw
+\DeclareOption{altaffilletter}{\@booleantrue\altaffilletter@sw}%
+\DeclareOption{altaffilsymbol}{\@booleanfalse\altaffilletter@sw}%
+\@booleanfalse\altaffilletter@sw
+\DeclareOption{superbib}{%
+ \let\place@bibnumber\place@bibnumber@sup
+}%
+\def\place@bibnumber{\NATx@bibnumfmt}%
+\def\place@bibnumber@sup#1{\textsuperscript{#1}}%
+\def\place@bibnumber@inl#1{[#1]}%
+\DeclareOption{citeautoscript}{\@booleantrue\citeautoscript@sw}%
+\@booleanfalse\citeautoscript@sw
+\DeclareOption{longbibliography}{\@booleantrue\longbibliography@sw}%
+\DeclareOption{nolongbibliography}{\@booleanfalse\longbibliography@sw}%
+\@booleanfalse\longbibliography@sw
+\DeclareOption{eprint}{\@booleantrue\eprint@enable@sw}%
+\DeclareOption{noeprint}{\@booleanfalse\eprint@enable@sw}%
+\@booleantrue\eprint@enable@sw
+\@booleanfalse\twoside@sw
+\appdef\document@inithook{%
+ \twoside@sw{\@twosidetrue}{\@twosidefalse}%
+}%
+\DeclareOption{twoside}{\@booleantrue \twoside@sw\@mparswitchfalse}%
+\DeclareOption{oneside}{\@booleanfalse\twoside@sw\@mparswitchtrue}%
+\DeclareOption{onecolumn}{\@booleanfalse\twocolumn@sw}%
+\DeclareOption{twocolumn}{\@booleantrue \twocolumn@sw}%
+\@booleanfalse\twocolumn@sw
+\def\select@column@grid{%
+ \twocolumn@sw{%
+ \twocolumn@grid@setup
+ \open@twocolumn
+ }{%
+ \onecolumn@grid@setup
+ }%
+}%
+\appdef\class@documenthook{%
+ \select@column@grid
+}%
+\appdef\setup@hook{%
+ \let\clearpage@ltx\clearpage
+ \prepdef\clear@document{\let\clearpage\clearpage@ltx\let\clear@document\@empty\close@column}%
+ \appdef\class@documenthook{%
+ \appdef\class@enddocumenthook{%
+ \let\clearpage\clear@document
+ }%
+ }%
+}%
+\DeclareOption{author-year}{\@booleantrue\authoryear@sw}%
+\DeclareOption{numerical}{\@booleanfalse\authoryear@sw}%
+\@booleanfalse\authoryear@sw
+\DeclareOption{galley}{%
+ \ExecuteOptions{onecolumn}%
+ \@booleantrue\galley@sw
+ \@booleanfalse\preprintsty@sw
+ \appdef\setup@hook{%
+ \advance\textwidth-\columnsep
+ \textwidth.5\textwidth
+ }%
+}%
+\@booleanfalse\galley@sw
+\DeclareOption{raggedbottom}{\@booleantrue\raggedcolumn@sw}
+\DeclareOption{flushbottom}{\@booleanfalse\raggedcolumn@sw}
+\@booleanfalse\raggedcolumn@sw
+\appdef\setup@hook{%
+ \raggedcolumn@sw{\raggedbottom}{\flushbottom}%
+}%
+\DeclareOption{tightenlines}{\@booleantrue\tightenlines@sw}
+\@booleanfalse\tightenlines@sw
+\@booleanfalse\lengthcheck@sw
+\DeclareOption{lengthcheck}{%
+ \@booleantrue\lengthcheck@sw
+ \ExecuteOptions{reprint}%
+}%
+\appdef\setup@hook{%
+ \lengthcheck@sw{\@booleantrue\tally@box@size@sw}{}%
+}%
+\appdef\setup@hook{%
+ \draft@sw{\overfullrule 5\p@}{\overfullrule\z@}%
+}%
+\DeclareOption{draft}{\@booleantrue\draft@sw}%
+\DeclareOption{final}{\@booleanfalse\draft@sw}%
+\@booleanfalse\draft@sw
+\appdef\setup@hook{%
+ \eqsecnum@sw{%
+ \@addtoreset{equation}{section}%
+ \def\theequation@prefix{\arabic{section}.}%
+ }{}%
+}%
+\DeclareOption{eqsecnum}{\@booleantrue\eqsecnum@sw}%
+\@booleanfalse\eqsecnum@sw
+\appdef\setup@hook{%
+ \setup@secnums
+}%
+\DeclareOption{secnumarabic}{%
+ \def\setup@secnums{\secnums@arabic}%
+}%
+\def\setup@secnums{\secnums@rtx}%
+\DeclareOption{fleqn}{%
+ \input{fleqn.clo}%
+}%
+\DeclareOption{floats}{\@booleantrue\floats@sw\@booleanfalse\floatp@sw}
+\DeclareOption{endfloats}{\@booleanfalse\floats@sw\@booleanfalse\floatp@sw}
+\DeclareOption{endfloats*}{\@booleanfalse\floats@sw\@booleantrue\floatp@sw}
+\@booleantrue\floats@sw
+\@booleantrue\floatp@sw
+\DeclareOption{titlepage}{\@booleantrue\titlepage@sw}
+\DeclareOption{notitlepage}{\@booleanfalse\titlepage@sw}
+\@booleanfalse\titlepage@sw
+\def\change@society#1{%
+ \def\@tempa{#1}%
+ \@ifxundefined\@society{%
+ \class@info{Selecting society \@tempa}%
+ \let\@society\@tempa
+ }{%
+ \@ifx{\@tempa\@society}{}{%
+ \class@warn{Conflicting society \@tempa<>\@society; not selected}%
+ }%
+ }%
+}%
+\def\change@journal#1{%
+ \def\@tempa{#1}%
+ \@ifxundefined\@journal{%
+ \class@info{Selecting journal \@tempa}%
+ \let\@journal\@tempa
+ }{%
+ \@ifx{\@tempa\@journal}{}{%
+ \class@warn{Conflicting journal \@tempa<>\@journal; not selected}%
+ }%
+ }%
+}%
+\DeclareOption{osa}{\change@society{osa}\let\@journal\@undefined}%
+\DeclareOption{osameet}{\change@society{osa}\def\@journal{osameet}}%
+\DeclareOption{opex}{\change@society{osa}\def\@journal{opex}}%
+\DeclareOption{tops}{\change@society{osa}\def\@journal{tops}}%
+\DeclareOption{josa}{\change@society{osa}\def\@journal{josa}}%
+\let\rtx@require@packages\@empty
+\appdef\rtx@require@packages{%
+ \RequirePackage[overload]{textcase}%
+}%
+\DeclareOption{amsfonts}{%
+ \def\class@amsfonts{\RequirePackage{amsfonts}}%
+}%
+\DeclareOption{noamsfonts}{%
+ \let\class@amsfonts\@empty
+}%
+\appdef\rtx@require@packages{%
+ \@ifxundefined\class@amsfonts{}{\class@amsfonts}%
+}%
+\DeclareOption{amssymb}{%
+ \def\class@amssymb{\RequirePackage{amssymb}}%
+}%
+\DeclareOption{noamssymb}{%
+ \let\class@amssymb\@empty
+}%
+\appdef\rtx@require@packages{%
+ \@ifxundefined\class@amssymb{}{\class@amssymb}%
+}%
+\DeclareOption{amsmath}{%
+ \def\class@amsmath{\RequirePackage{amsmath}[\ver@amsmath@prefer]}%
+}%
+\DeclareOption{noamsmath}{%
+ \let\class@amsmath\@empty
+}%
+\appdef\rtx@require@packages{%
+ \preserve@LaTeX
+ \@ifxundefined\class@amsmath{}{\class@amsmath}%
+ \appdef\class@enddocumenthook{\test@amsmath@ver}%
+}%
+\appdef\preserve@LaTeX{%
+ \let\@ifl@aded@LaTeX\@ifl@aded
+ \let\@ifpackageloaded@LaTeX\@ifpackageloaded
+ \let\@pkgextension@LaTeX\@pkgextension
+ \let\@ifpackagelater@LaTeX\@ifpackagelater
+ \let\@ifl@ter@LaTeX\@ifl@ter
+ \let\@ifl@t@r@LaTeX\@ifl@t@r
+ \let\@parse@version@LaTeX\@parse@version
+}%
+\appdef\restore@LaTeX{%
+ \let\@ifl@aded\@ifl@aded@LaTeX
+ \let\@ifpackageloaded\@ifpackageloaded@LaTeX
+ \let\@pkgextension\@pkgextension@LaTeX
+ \let\@ifpackagelater\@ifpackagelater@LaTeX
+ \let\@ifl@ter\@ifl@ter@LaTeX
+ \let\@ifl@t@r\@ifl@t@r@LaTeX
+ \let\@parse@version\@parse@version@LaTeX
+}%
+\def\test@amsmath@ver{%
+ \begingroup
+ \restore@LaTeX
+ \@ifpackageloaded{amsmath}{%
+ \@ifpackagelater{amsmath}{\ver@amsmath@prefer}{}{%
+ \class@warn{%
+ You have loaded amsmath, version "\csname ver@amsmath.sty\endcsname",\MessageBreak
+ but this class requires version "\ver@amsmath@prefer", or later.\MessageBreak
+ Please update your LaTeX installation.
+ }%
+ }%
+ }{%
+ }%
+ \endgroup
+}%
+\def\ver@amsmath@prefer{2000/01/15 v2.05 AMS math features}%
+\DeclareOption{byrevtex}{\@booleantrue\byrevtex@sw}%
+\@booleanfalse\byrevtex@sw
+\DeclareOption{floatfix}{\@booleantrue\force@deferlist@sw}%
+\DeclareOption{nofloatfix}{\@booleanfalse\force@deferlist@sw}%
+\@booleanfalse\force@deferlist@sw
+\gdef\@fltovf{%
+ \@latex@error{%
+ Too many unprocessed floats%
+ \force@deferlist@sw{}{; try class option [floatfix]}%
+ }\@ehb
+}%
+\def\@fltstk{%
+ \@latex@warning{%
+ A float is stuck (cannot be placed)%
+ \force@deferlist@sw{}{; try class option [floatfix]}%
+ }%
+}%
+\DeclareOption{ltxgridinfo}{%
+ \@booleantrue\ltxgrid@info@sw
+}%
+\DeclareOption{outputdebug}{%
+ \@booleantrue\outputdebug@sw
+ \@booleantrue\ltxgrid@info@sw
+ \@booleantrue\ltxgrid@foot@info@sw
+ \traceoutput
+}%
+\DeclareOption{raggedfooter}{\@booleanfalse\textheight@sw}%
+\DeclareOption{noraggedfooter}{\@booleantrue\textheight@sw}%
+\DeclareOption{frontmatterverbose}{\@booleantrue\frontmatterverbose@sw}%
+\@booleanfalse\frontmatterverbose@sw
+\DeclareOption{linenumbers}{%
+ \appdef
+ \class@documenthook{%
+ \RequirePackage{lineno}[2005/11/02 v4.41]%
+ \linenumbersep4pt\relax
+ \linenumbers\relax
+ }%
+}%
+\DeclareOption{nomerge}{%
+ \appdef\setup@hook{%
+ \@ifnum{\NAT@merge>\z@}{\let\NAT@merge\z@}{}%
+ }%
+}%
+\def\@parse@class@options@society{%
+ \edef\@tempa{\@ptionlist{\@currname.\@currext}}%
+ \expandafter\@for\expandafter\CurrentOption\expandafter:\expandafter=\@tempa\do{%
+ \expandafter\@ifnotrelax\csname ds@\CurrentOption\endcsname{}{%
+ \IfFileExists{\CurrentOption\substyle@post.\substyle@ext}{%
+ \expandafter\change@society\expandafter{\CurrentOption}%
+ \expandafter\let\csname ds@\CurrentOption\endcsname\@empty
+ }{}%
+ }%
+ }%
+}%
+\def\@parse@class@options@#1{%
+ \edef\@tempa{\@ptionlist{\@currname.\@currext}}%
+ \expandafter\@for\expandafter\CurrentOption\expandafter:\expandafter=\@tempa\do{%
+ \expandafter\@ifnotrelax\csname ds@\CurrentOption\endcsname{%
+ \begingroup\csname ds@\CurrentOption\endcsname
+ \@ifxundefined#1{%
+ \endgroup
+ }{%
+ \expandafter\endgroup\expandafter\def\expandafter#1\expandafter{#1}%
+ }%
+ }{}%
+ }%
+}%
+\def\@parse@class@options@journal{%
+ \edef\@tempa{\@ptionlist{\@currname.\@currext}}%
+ \expandafter\@for\expandafter\CurrentOption\expandafter:\expandafter=\@tempa\do{%
+ \expandafter\@ifnotrelax\csname ds@\CurrentOption\endcsname{%
+ \begingroup
+ \csname ds@\CurrentOption\endcsname
+ \@ifxundefined\@journal{%
+ \endgroup
+ }{%
+ \expandafter\endgroup\expandafter\def\expandafter\@journal\expandafter{\@journal}%
+ }%
+ }{}%
+ }%
+}%
+\def\@parse@class@options{%
+ \edef\@tempa{\@ptionlist{\@currname.\@currext}}%
+ \expandafter\@for\expandafter\CurrentOption\expandafter:\expandafter=\@tempa\do{%
+ \expandafter\@ifnotrelax\csname ds@\CurrentOption\endcsname{%
+ \begingroup
+ \csname ds@\CurrentOption\endcsname
+ \@ifxundefined\@pointsize{%
+ \endgroup
+ }{%
+ \expandafter\endgroup\expandafter\def\expandafter\@pointsize\expandafter{\@pointsize}%
+ }%
+ }{%
+ \IfFileExists{\CurrentOption\substyle@post.\substyle@ext}{%
+ \expandafter\change@society\expandafter{\CurrentOption}%
+ \expandafter\let\csname ds@\CurrentOption\endcsname\@empty
+ }{}%
+ }%
+ }%
+}%
+\DeclareOption{hypertext}{\hypertext@enable@ltx}%
+\appdef\document@inithook{\@ifpackageloaded{hyperref}{\hypertext@enable@ltx}{}}%
+\DeclareOption{frontmatterverbose}{\@booleantrue\frontmatterverbose@sw}%
+\@booleanfalse\frontmatterverbose@sw
+\DeclareOption{inactive}{\@booleanfalse\frontmatter@syntax@sw}%
+\@booleantrue\frontmatter@syntax@sw
+\@booleanfalse\runinaddress@sw
+\@booleantrue\@affils@sw
+\@booleanfalse\groupauthors@sw
+\DeclareOption{groupedaddress}{\clo@groupedaddress}%
+\def\clo@groupedaddress{%
+ \@booleantrue\groupauthors@sw
+ \@booleantrue\@affils@sw
+ \@booleanfalse\runinaddress@sw
+}%
+\DeclareOption{unsortedaddress}{\clo@unsortedaddress}%
+\def\clo@unsortedaddress{%
+ \@booleantrue\groupauthors@sw
+ \@booleanfalse\@affils@sw
+ \@booleanfalse\runinaddress@sw
+}%
+\DeclareOption{runinaddress}{\clo@runinaddress}%
+\def\clo@runinaddress{%
+ \@booleantrue\groupauthors@sw
+ \@booleantrue\@affils@sw
+ \@booleantrue\runinaddress@sw
+}%
+\DeclareOption{superscriptaddress}{\clo@superscriptaddress}%
+\def\clo@superscriptaddress{%
+ \@booleanfalse\groupauthors@sw
+ \@booleantrue\@affils@sw
+ \@booleanfalse\runinaddress@sw
+}%
+%%% @LaTeX-file{
+%%% filename = "revtex4-1.dtx",
+%%% version = "4.1r",
+%%% date = "2010/07/25",
+%%% time = "20:33:00 UT-8",
+%%% checksum = "7177",
+%%% author = "Arthur Ogawa (mailto:arthur_ogawa at sbcglobal.net),
+%%% commissioned by the American Physical Society.
+%%% ",
+%%% copyright = "Copyright (C) 1999, 2009 Arthur Ogawa,
+%%% distributed under the terms of the
+%%% LaTeX Project Public License, see
+%%% ftp://ctan.tug.org/macros/latex/base/lppl.txt
+%%% ",
+%%% address = "Arthur Ogawa,
+%%% USA",
+%%% telephone = "",
+%%% FAX = "",
+%%% email = "mailto colon arthur_ogawa at sbcglobal.net",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "latex, page grid, main vertical list",
+%%% supported = "yes",
+%%% abstract = "package to change page grid, MVL",
+%%% docstring = "The checksum field above generated by ltxdoc",
+%%% }
+\def\substyle@post{4-1}%
+\def\substyle@ext{rtx}%
+\DeclareOption*{\OptionNotUsed}%
+\def\@process@society#1{%
+ \@ifxundefined\@society{%
+ \class@warn{No Society specified, using default society #1}%
+ \def\@society{#1}\let\@journal\@undefined
+ }{}%
+ \expandafter\input\expandafter{\@society\substyle@post.\substyle@ext}%
+}%
+\def\@process@journal#1{%
+ \@ifxundefined\@journal{%
+ \class@warn{No journal specified, using default #1}%
+ \def\@journal{#1}%
+ }{}%
+ \expandafter\expandafter
+ \expandafter\rtx@do@substyle
+ \expandafter\expandafter
+ \expandafter{\expandafter\@society\@journal}%
+}%
+\def\rtx@do@substyle#1{%
+ \InputIfFileExists{#1\substyle@post.\substyle@ext}{}{\csname rtx@#1\endcsname}%
+}%
+\def\@process@pointsize#1{%
+ \@ifxundefined\@pointsize{%
+ \def\@pointsize{#1}%
+ \class@warn{No type size specified, using default \@pointsize}%
+ }{}%
+ \expandafter\expandafter
+ \expandafter\rtx@do@substyle
+ \expandafter\expandafter
+ \expandafter{\expandafter\@society\@pointsize pt}%
+}%
+ \def\ps@headings{%
+ \let\@oddfoot\@empty\let\@evenfoot\@empty
+ \def\@evenhead{\thepage\hfil\slshape\leftmark}%
+ \def\@oddhead{{\slshape\rightmark}\hfil\thepage}%
+ \let\@mkboth\markboth
+ \def\sectionmark##1{%
+ \markboth {\MakeUppercase{%
+ \ifnum \c@secnumdepth >\z@
+ \thesection\quad
+ \fi
+ ##1}}{}}%
+ \def\subsectionmark##1{%
+ \markright {%
+ \ifnum \c@secnumdepth >\@ne
+ \thesubsection\quad
+ \fi
+ ##1}}}%
+\def\ps@myheadings{%
+ \let\@oddfoot\@empty\let\@evenfoot\@empty
+ \def\@evenhead{\thepage\hfil\slshape\leftmark}%
+ \def\@oddhead{{\slshape\rightmark}\hfil\thepage}%
+ \let\@mkboth\@gobbletwo
+ \let\sectionmark\@gobble
+ \let\subsectionmark\@gobble
+ }%
+\def\ps@article{%
+ \def\@evenhead{\let\\\heading@cr\thepage\quad\checkindate\hfil{\leftmark}}%
+ \def\@oddhead{\let\\\heading@cr{\rightmark}\hfil\checkindate\quad\thepage}%
+ \def\@oddfoot{}%
+ \def\@evenfoot{}%
+ \let\@mkboth\markboth
+ \let\sectionmark\@gobble
+ \let\subsectionmark\@gobble
+}%
+\def\ps@article@final{%
+ \def\@evenhead{\let\\\heading@cr\thepage\quad\checkindate\hfil{\leftmark}}%
+ \def\@oddhead{\let\\\heading@cr{\rightmark}\hfil\checkindate\quad\thepage}%
+ \def\@oddfoot{}%
+ \def\@evenfoot{}%
+ \let\@mkboth\markboth
+ \def\sectionmark##1{%
+ \markboth{%
+ \MakeTextUppercase{%
+ \@ifnum{\c@secnumdepth >\z@}{\thesection\hskip 1em\relax}{}%
+ ##1%
+ }%
+ }{}%
+ }%
+ \def\subsectionmark##1{%
+ \markright {%
+ \@ifnum{\c@secnumdepth >\@ne}{\thesubsection\hskip 1em\relax}{}%
+ ##1%
+ }%
+ }%
+}%
+\def\heading@cr{\unskip\space\ignorespaces}%
+\def\ps@preprint{%
+ \def\@oddfoot{\hfil\thepage\quad\checkindate\hfil}%
+ \def\@evenfoot{\hfil\thepage\quad\checkindate\hfil}%
+ \def\@oddhead{}%
+ \def\@evenhead{}%
+ \let\@mkboth\@gobbletwo
+ \let\sectionmark\@gobble
+ \let\subsectionmark\@gobble
+}%
+\let\@oddhead\@empty
+\let\@evenhead\@empty
+\let\@oddfoot\@empty
+\let\@evenfoot\@empty
+\def\lastpage@putlabel{%
+ \if@filesw
+ \begingroup
+ \advance\c@page\m@ne
+ \immediate\write\@auxout{\string\newlabel{LastPage}{{}{\thepage}{}{}{}}}%
+ \endgroup
+ \fi
+}%
+\appdef\clear@document{%
+ \do@output@cclv{%
+ \lastpage@putlabel
+ \tally@box@size@sw{\total@text}{}%
+ }%
+}%
+\providecommand\write@column@totals{}%
+\appdef\rtx@require@packages{%
+ \RequirePackage{url}%
+}%
+\appdef\document@inithook{%
+ \incompatible@package{cite}%
+ \incompatible@package{mcite}%
+ \incompatible@package{multicol}%
+}%
+\def\labelenumi{\theenumi.}
+\def\theenumi{\arabic{enumi}}
+\def\labelenumii{(\theenumii)}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+\def\labelenumiii{\theenumiii.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+\def\labelenumiv{\theenumiv.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+\def\labelitemi{\textbullet}
+\def\labelitemii{\normalfont\bfseries\textendash}
+\def\labelitemiii{\textasteriskcentered}
+\def\labelitemiv{\textperiodcentered}
+\pagenumbering{arabic}
+\setcounter{topnumber}{2}
+\def\topfraction{.9}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.9}
+\setcounter{totalnumber}{3}
+\def\textfraction{.1}
+\def\floatpagefraction{.9}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.9}
+\def\dblfloatpagefraction{.9}
+\newenvironment{verse}{%
+ \let\\=\@centercr
+ \list{}{%
+ \itemsep\z@ \itemindent -1.5em\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]%
+}{%
+ \endlist
+}%
+\newenvironment{quotation}{%
+ \list{}{%
+ \listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin \parsep \z@ \@plus\p@}\item[]%
+}{%
+ \endlist
+}%
+\newenvironment{quote}{%
+ \list{}{%
+ \rightmargin\leftmargin}\item[]%
+}{%
+ \endlist
+}%
+\def\descriptionlabel#1{%
+ \hspace\labelsep \normalfont\bfseries #1\unskip:%
+}%
+\newenvironment{description}{%
+ \list{}{%
+ \labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel
+ }%
+}{%
+ \endlist
+}%
+\newcounter{part}%
+\let\thepart\@undefined
+\newcounter{section}%
+\let\thesection\@undefined
+\newcounter{subsection}[section]%
+\let\thesubsection\@undefined
+\newcounter{subsubsection}[subsection]%
+\let\thesubsubsection\@undefined
+\newcounter{paragraph}[subsubsection]%
+\let\theparagraph\@undefined
+\newcounter{subparagraph}[paragraph]%
+\let\thesubparagraph\@undefined
+\def\secnums@rtx{%
+ \@ifxundefined\thepart{%
+ \def\thepart{\Roman{part}}%
+ }{}%
+ \@ifxundefined\thesection{%
+ \def\thesection {\Roman{section}}%
+ \def\p@section {}%
+ }{}%
+ \@ifxundefined\thesubsection{%
+ \def\thesubsection {\Alph{subsection}}%
+ \def\p@subsection {\thesection\,}%
+ }{}%
+ \@ifxundefined\thesubsubsection{%
+ \def\thesubsubsection {\arabic{subsubsection}}%
+ \def\p@subsubsection {\thesection\,\thesubsection\,}%
+ }{}%
+ \@ifxundefined\theparagraph{%
+ \def\theparagraph {\alph{paragraph}}%
+ \def\p@paragraph {\thesection\,\thesubsection\,\thesubsubsection\,}%
+ }{}%
+ \@ifxundefined\thesubparagraph{%
+ \def\thesubparagraph {\arabic{subparagraph}}%
+ \def\p@subparagraph {\thesection\,\thesubsection\,\thesubsubsection\,\theparagraph\,}%
+ }{}%
+}%
+\def\secnums@arabic{%
+ \@ifxundefined\thepart{%
+ \def\thepart {\Roman{part}}%
+ }{}%
+ \@ifxundefined\thesection{%
+ \def\thesection {\Roman{section}}%
+ \def\p@section {}%
+ }{}%
+ \@ifxundefined\thesubsection{%
+ \def\thesubsection {\thesection.\arabic{subsection}}%
+ \def\p@subsection {}%
+ }{}%
+ \@ifxundefined\thesubsubsection{%
+ \def\thesubsubsection {\thesubsection.\arabic{subsubsection}}%
+ \def\p@subsubsection {}%
+ }{}%
+ \@ifxundefined\theparagraph{%
+ \def\theparagraph {\thesubsubsection.\arabic{paragraph}}%
+ \def\p@paragraph {}%
+ }{}%
+ \@ifxundefined\thesubparagraph{%
+ \def\thesubparagraph {\theparagraph.\arabic{subparagraph}}%
+ \def\p@subparagraph {}%
+ }{}%
+}%
+\newenvironment{acknowledgments}{%
+ \acknowledgments@sw{%
+ \expandafter\section\expandafter*\expandafter{\acknowledgmentsname}%
+ }{%
+ \par
+ \phantomsection
+ \addcontentsline{toc}{section}{\protect\numberline{}\acknowledgmentsname}%
+ }%
+}{%
+ \par
+}%
+\@booleantrue\acknowledgments@sw
+\newenvironment{acknowledgements}{%
+ \replace@environment{acknowledgements}{acknowledgments}%
+}{%
+ \endacknowledgments
+}%
+\def\part{\par
+ \addvspace{4ex}%
+ \@afterindentfalse
+ \secdef\@part\@spart}%
+\def\@part[#1]#2{%
+ \@ifnum{\c@secnumdepth >\m@ne}{%
+ \refstepcounter{part}%
+ \addcontentsline{toc}{part}{\thepart\hspace{1em}#1}%
+ }{%
+ \addcontentsline{toc}{part}{#1}%
+ }%
+ \begingroup
+ \parindent \z@ \raggedright
+ \interlinepenalty\@M
+ \@ifnum{\c@secnumdepth >\m@ne}{%
+ \Large \bf \partname~\thepart%
+ \par\nobreak
+ }{}%
+ \huge \bf
+ #2%
+ \markboth{}{}\par
+ \endgroup
+ \nobreak
+ \vskip 3ex
+ \@afterheading
+}%
+\def\@spart#1{{\parindent \z@ \raggedright
+ \interlinepenalty\@M
+ \huge \bf
+ #1\par}
+ \nobreak
+ \vskip 3ex
+ \@afterheading}
+\def\section{%
+ \@startsection
+ {section}%
+ {1}%
+ {\z@}%
+ {0.8cm \@plus1ex \@minus .2ex}%
+ {0.5cm}%
+ {\normalfont\small\bfseries}%
+}%
+\def\subsection{%
+ \@startsection
+ {subsection}%
+ {2}%
+ {\z@}%
+ {.8cm \@plus1ex \@minus .2ex}%
+ {.5cm}%
+ {\normalfont\small\bfseries}%
+}%
+\def\subsubsection{%
+ \@startsection
+ {subsubsection}%
+ {3}%
+ {\z@}%
+ {.8cm \@plus1ex \@minus .2ex}%
+ {.5cm}%
+ {\normalfont\small\itshape}%
+}%
+\def\paragraph{%
+ \@startsection
+ {paragraph}%
+ {4}%
+ {\parindent}%
+ {\z@}%
+ {-1em}%
+ {\normalfont\normalsize\itshape}%
+}%
+\def\subparagraph{%
+ \@startsection
+ {subparagraph}%
+ {5}%
+ {\parindent}%
+ {3.25ex \@plus1ex \@minus .2ex}%
+ {-1em}%
+ {\normalfont\normalsize\bfseries}%
+}%
+\def\theequation{%
+ \theequation@prefix\arabic{equation}%
+}%
+\def\theequation@prefix{}%
+\setcounter{secnumdepth}{4}
+\lineskip 1pt
+\normallineskip 1pt
+\def\baselinestretch{1}%
+\@lowpenalty 51
+\@medpenalty 151
+\@highpenalty 301
+\@beginparpenalty -\@lowpenalty
+\@endparpenalty -\@lowpenalty
+\@itempenalty -\@lowpenalty
+\arraycolsep 3pt
+\tabcolsep 2pt
+\arrayrulewidth .4pt
+\doublerulesep 2pt
+\skip\@mpfootins = 0pt
+\fboxsep = 3.0pt
+\fboxrule = 0.4pt
+\newenvironment{figure}
+ {\@float{figure}}
+ {\end@float}
+\newenvironment{figure*}
+ {\@dblfloat{figure}}
+ {\end@dblfloat}
+\def\listoffigures{\print@toc{lof}}%
+\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}%
+\newlength\abovecaptionskip
+\newlength\belowcaptionskip
+\setlength\abovecaptionskip{10\p@}
+\setlength\belowcaptionskip{2\p@}
+\long\def\@makecaption#1#2{%
+ \par
+ \vskip\abovecaptionskip
+ \begingroup
+ \small\rmfamily
+ \sbox\@tempboxa{%
+ \let\\\heading@cr
+ \@make@capt@title{#1}{#2}%
+ }%
+ \@ifdim{\wd\@tempboxa >\hsize}{%
+ \begingroup
+ \samepage
+ \flushing
+ \let\footnote\@footnotemark@gobble
+ \@make@capt@title{#1}{#2}\par
+ \endgroup
+ }{%
+ \global \@minipagefalse
+ \hb@xt@\hsize{\hfil\unhbox\@tempboxa\hfil}%
+ }%
+ \endgroup
+ \vskip\belowcaptionskip
+}%
+\def\@make@capt@title#1#2{%
+ \@ifx@empty\float@link{\@firstofone}{\expandafter\href\expandafter{\float@link}}%
+ {#1}\@caption@fignum@sep#2%
+}%
+\def\@footnotemark@gobble{%
+ \@footnotemark
+ \@ifnextchar[{\@gobble@opt@i}{\@gobble}%
+}%
+\def\@gobble@opt@i[#1]#2{}%
+\def\@mpmakefntext#1{%
+ \flushing
+ \parindent=1em
+ \noindent
+ \hb@xt@1em{\hss\@makefnmark}%
+ #1%
+}%
+\def\@caption@fignum@sep{. }%
+\def\setfloatlink{\def\float@link}%
+\let\float@link\@empty
+\newcounter{figure}
+\renewcommand \thefigure {\@arabic\c@figure}
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{\figurename~\thefigure}
+\expandafter\newbox\csname fbox@\ftype@figure\endcsname
+\expandafter\setbox\csname fbox@\ftype@figure\endcsname\hbox{}%
+\appdef\class@documenthook{%
+ \do@if@floats{figure}{.fgx}%
+}%
+\appdef\class@enddocumenthook{%
+ \printfigures\relax
+}%
+\newcommand\printfigures{%
+ \@ifstar{\true@sw}{\floatp@sw{\true@sw}{\false@sw}}%
+ {%
+ \print@float{figure}{\oneapage}%
+ }{%
+ \print@float{figure}{}%
+ }%
+}%
+\appdef\@xfloat@prep{%
+ \appdef\@parboxrestore{\centering}%
+}%
+\newenvironment{table}
+ {\@float{table}}
+ {\end@float}
+\newenvironment{table*}
+ {\@dblfloat{table}}
+ {\end@dblfloat}
+\newcounter{table}
+\renewcommand\thetable{\@Roman\c@table}
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{\tablename~\thetable}
+\expandafter\newbox\csname fbox@\ftype@table\endcsname
+\expandafter\setbox\csname fbox@\ftype@table\endcsname\hbox{}%
+\def\listoftables{\print@toc{lot}}%
+\let\l@table\l@figure
+\def\table@hook{\small}%
+\def\squeezetable{\def\table@hook{\scriptsize}}%
+\appdef\@floatboxreset{\table@hook}%
+\def\set@table@environments{%
+ \floats@sw{}{%
+ \let@environment{longtable@float}{longtable}%
+ \let@environment{longtable}{longtable@write}%
+ \let@environment{longtable*@float}{longtable*}%
+ \let@environment{longtable*}{longtable*@write}%
+ \let@environment{turnpage@float}{turnpage}%
+ \let@environment{turnpage}{turnpage@write}%
+ }%
+ \do@if@floats{table}{.tbx}%
+}%
+\appdef\document@inithook{%
+ \set@table@environments
+}%
+\appdef\class@enddocumenthook{%
+ \printtables\relax
+}%
+\newenvironment{longtable@write}{%
+ \write@@float{longtable}{table}%
+}{%
+ \endwrite@float
+}%
+\newenvironment{longtable*@write}{%
+ \write@@float{longtable*}{table}%
+}{%
+ \endwrite@float
+}%
+\newenvironment{turnpage@write}{%
+ \immediate\write\tablewrite{\string\begin{turnpage}}%
+}{%
+ \immediate\write\tablewrite{\string\end{turnpage}}%
+}%
+\newcommand\printtables{%
+ \begingroup
+ \let@environment{longtable}{longtable@float}%
+ \let@environment{longtable*}{longtable*@float}%
+ \let@environment{turnpage}{turnpage@anchored}%
+ \prepdef\longtable{\trigger@float@par}%
+ \expandafter\prepdef\csname longtable*\endcsname{\trigger@float@par}%
+ \expandafter\prepdef\csname table@floats\endcsname{%
+ \onecolumngrid@push
+ }%
+ \expandafter\appdef\csname endtable@floats\endcsname{%
+ \onecolumngrid@pop
+ }%
+ \@ifstar{\true@sw}{\floatp@sw{\true@sw}{\false@sw}}%
+ {%
+ \print@float{table}{\oneapage}%
+ }{%
+ \print@float{table}{}%
+ }%
+ \endgroup
+}%
+\newenvironment{turnpage@anchored}{%
+ \onecolumngrid@push
+ \setbox\z@\vbox to\textwidth\bgroup
+ \columnwidth\textheight
+}{%
+ \vfil
+ \egroup
+ \rotatebox{90}{\box\z@}%
+ \onecolumngrid@pop
+}%
+\newenvironment{video}
+ {\@float{video}}
+ {\end@float}%
+\newenvironment{video*}
+ {\@dblfloat{video}}
+ {\end@dblfloat}%
+\newcounter{video}
+\renewcommand \thevideo {\@arabic\c@video}
+\def\ext@video{lov}%
+\def\fname@video{Video}%
+\def\lovname{List of Videos}%
+\def\fps@video{tbp}%
+\def\ftype@video{4}%
+\def\fnum@video{\fname@video~\thevideo}%
+\appdef\document@inithook{%
+ \@ifxundefined\c@float@type{}{%
+ \global\setcounter{float@type}{8}%
+ }%
+}%
+\expandafter\newbox\csname fbox@\ftype@video\endcsname
+\expandafter\setbox\csname fbox@\ftype@video\endcsname\hbox{}%
+\let\theHvideo\thevideo
+\def\listofvideos{\print@toc{lov}}%
+\let\l@video\l@figure
+\appdef\class@documenthook{%
+ \do@if@floats{video}{.vdx}%
+}%
+\appdef\class@enddocumenthook{%
+ \printvideos\relax
+}%
+\newcommand\printvideos{%
+ \@ifstar{\true@sw}{\floatp@sw{\true@sw}{\false@sw}}%
+ {%
+ \print@float{video}{\oneapage}%
+ }{%
+ \print@float{video}{}%
+ }%
+}%
+\def\endtabular@hook{}%
+\appdef\document@inithook{%
+ \@ifpackageloaded{dcolumn}{%
+ \expandafter\@ifnotrelax\csname NC@find@d\endcsname{}{%
+ \newcolumntype{d}{D{.}{.}{-1}}%
+ }%
+ }{}%
+}%
+\def\toprule{\hline\hline}%
+\def\colrule{\hline}%
+\def\botrule{\hline\hline}%
+\newenvironment{ruledtabular}{%
+ \def\array@default{v}%
+ \appdef\tabular@hook{\def\@halignto{to\hsize}}%
+ \let\tableft@skip@default\tableft@skip
+ \let\tableft@skip\tableft@skip@float
+ \let\tabmid@skip@default\tabmid@skip
+ \let\tabmid@skip\tabmid@skip@float
+ \let\tabright@skip@default\tabright@skip
+ \let\tabright@skip\tabright@skip@float
+ \let\array@row@pre@default\array@row@pre
+ \let\array@row@pre\array@row@pre@float
+ \let\array@row@pst@default\array@row@pst
+ \let\array@row@pst\array@row@pst@float
+ \appdef\array@row@rst{%
+ \let\array@row@pre\array@row@pre@default
+ \let\array@row@pst\array@row@pst@default
+ \let\tableft@skip\tableft@skip@default
+ \let\tabmid@skip\tabmid@skip@default
+ \let\tabright@skip\tabright@skip@default
+ \appdef\tabular@hook{\let\@halignto\@empty}%
+ }%
+}{%
+}%
+\def\@makefntext#1{%
+ \def\baselinestretch{1}%
+ \parindent1em%
+ \noindent
+ \hb@xt@1.8em{%
+ \hss\@makefnmark
+ }%
+ #1%
+ \par
+}%
+\def\@makefnmark{%
+ \hbox{%
+ \@textsuperscript{%
+ \normalfont\@thefnmark
+ }%
+ }%
+}%
+\expandafter\DeclareRobustCommand
+\expandafter\rev@citet
+\expandafter{%
+ \expandafter\begingroup
+ \expandafter\rtx@swap@citea
+ \expandafter\g@bblefirsttoken
+ \csname citet \endcsname
+}%
+\expandafter\DeclareRobustCommand
+\expandafter\rev@citealp
+\expandafter{%
+ \expandafter\begingroup
+ \expandafter\rtx@swap@citea
+ \expandafter\g@bblefirsttoken
+ \csname citealp \endcsname
+}%
+\expandafter\DeclareRobustCommand
+\expandafter\rev@citealpnum
+\expandafter{%
+ \expandafter\begingroup
+ \expandafter\rtx@swap@citenum
+ \expandafter\g@bblefirsttoken
+ \csname citealp \endcsname
+}%
+\def\rtx@swap@citenum{%
+ \rtx@swap@citea
+ \let\@cite\NAT@citenum
+ \let\NAT@mbox\mbox
+ \let\citeyear\NAT@citeyear
+ \let\NAT@space\NAT@spacechar
+}%
+\def\g@bblefirsttoken{%
+ \expandafter\true@sw
+ \expandafter\@empty
+}%
+\newcommand\rtx@citesuper[3]{%
+ \ifNAT@swa
+ \leavevmode
+ \unskip
+ \textsuperscript{\normalfont#1}%
+ \if*#3*\else\ (#3)\fi
+ \else
+ #1%
+ \fi
+ \endgroup
+}%
+\def\@makefnmark@cite{\begingroup\NAT@swatrue\@cite{{\@thefnmark}}{}{}}%
+\def\rtx@bibsection{%
+ \@ifx@empty\refname{%
+ \par
+ }{%
+ \expandafter\section\expandafter*\expandafter{\refname}%
+ \@nobreaktrue
+ }%
+}%
+\def\rtx@swap@citea{%
+ \let\NAT@def@citea\rtx@def@citea
+ \let\NAT@def@citea@close\rtx@def@citea@close
+ \let\NAT@def@citea@box\rtx@def@citea@box
+}%
+\def\rtx@def@citea{%
+ \def\@citea{\NAT@separator\NAT@space}%
+ \advance\c@NAT@ctr\@ne
+ \@ifnum{\count@>\tw@}{%
+ \@ifnum{\c@NAT@ctr=\count@}{\appdef\@citea{\NAT@conj\NAT@space}}{}%
+ }{%
+ \def\@citea{\NAT@space\NAT@conj\NAT@space}%
+ }%
+}%
+\def\rtx@def@citea@close{%
+ \rtx@def@citea
+ \prepdef\@citea{\NAT@@close}%
+}%
+\def\rtx@def@citea@box{%
+ \rtx@def@citea@close
+ \expandafter\def\expandafter\@citea\expandafter{\expandafter\NAT@mbox\expandafter{\@citea}}%
+}%
+\def\NAT@conj{and}%
+\def\NAT@BibitemShut#1{%
+ \def\@bibstop{#1}%
+ \let\bibitem@Stop\bibitemStop
+ \let\bibitem@NoStop\bibitemNoStop
+ \@ifx{\bibitemShut\relax}{\let\@bibitemShut\@empty}{%
+ \expandafter\def\expandafter\@bibitemShut\expandafter{\bibitemShut}%
+ }%
+}%
+\def\BibitemShut@ltx#1{%
+ \unskip
+ \def\@bibstop{#1}%
+ \let\bibitem@Stop\bibitemStop
+ \let\bibitem@NoStop\bibitemNoStop
+ \@ifx{\bibitemShut\relax}{\let\@bibitemShut\@empty}{%
+ \expandafter\def\expandafter\@bibitemShut\expandafter{\bibitemShut}%
+ }%
+}%
+\newenvironment{thebibliography}{}{}%
+\let\@listi\@empty
+\appdef\rtx@require@packages{%
+ \RequirePackage[sort&compress]{natbib}[2009/11/07 8.31a (PWD, AO)]%
+ \let@environment{NAT@thebibliography}{thebibliography}%
+ \let@environment{thebibliography}{rtx@thebibliography}%
+ \let\bibliographystyle@latex\bibliographystyle
+ \let\NAT@citesuper\rtx@citesuper
+\let\bibsection\rtx@bibsection
+\let\NATx@bibsetnum\NAT@bibsetnum
+\def\NAT@bibsetnum#1{%
+ \setlength{\topsep}{\z@}%
+ \NATx@bibsetnum{\ref{LastBibItem}}%
+}%
+\let\NATx@bibsetup\NAT@bibsetup
+\def\NAT@bibsetup{%
+ \setlength{\labelwidth}{\z@}%
+ \setlength{\labelsep}{\z@}%
+ \setlength{\itemindent}{\z@}%
+ \setlength{\listparindent}{\z@}%
+ \setlength{\topsep}{\z@}%
+ \setlength{\parsep}{\z@}%
+ \NATx@bibsetup
+}%
+\let\bibpreamble\@empty
+\def\newblock{\ }%
+\let\NATx@bibnumfmt\bibnumfmt
+\def\bibnumfmt{\place@bibnumber}%
+\let\NAT@merge\thr@@
+\let\NAT@citeyear\citeyear
+\let\onlinecite\rev@citealp
+\let\textcite\rev@citet
+\@ifx{\BibitemShut\NAT@BibitemShut}{%
+ \class@info{Repairing natbib's \string\BibitemShut}%
+ \let\BibitemShut\BibitemShut@ltx
+}{}%
+\let\bibliographystyle@latex\bibliographystyle
+\def\bibliographystyle{\@booleantrue\bibliographystyle@sw\def\@bibstyle}%
+\@booleanfalse\bibliographystyle@sw
+\def\NAT@bibitem@cont{%
+ \let\bibitem@Stop\bibitemContinue@Stop
+ \let\bibitem@NoStop\bibitemContinue
+}%
+\def\bibitemNoStop{%
+ \@ifx@empty\@bibitemShut{.\spacefactor\@mmm\space}{\@bibitemShut}%
+}%
+\def\bibitemContinue{%
+ \@ifx@empty\@bibitemShut{;\spacefactor\@mmm\space}{\@bibitemShut}%
+}%
+\def\bibitemContinue@Stop{%
+ \@ifx@empty\@bibitemShut{\spacefactor\@mmm\space}{\@bibitemShut}%
+}%
+}%
+\DeclareRobustCommand\onlinecite{\@onlinecite}%
+\DeclareRobustCommand\textcite{\@textcite}%
+\let\bibliography@latex\bibliography
+\def\bibliography#1{%
+ \auto@bib@empty
+ \begingroup
+ \let\auto@bib@innerbib\@empty
+ \@ifx@empty{\pre@bibdata}{%
+ \bibliography@latex{#1}%
+ }{%
+ \@if@empty{#1}{%
+ \expandafter\bibliography@latex\expandafter{\pre@bibdata}%
+ }{%
+ \expandafter\bibliography@latex\expandafter{\pre@bibdata,#1}%
+ }%
+ }%
+ \endgroup
+}%
+\let\pre@bibdata\@empty
+\newenvironment{rtx@thebibliography}[1]{%
+ \NAT@thebibliography{#1}%
+ \let\@TBN@opr\present@bibnote
+ \@FMN@list
+}{%
+ \auto@bib@innerbib
+ \edef\@currentlabel{\arabic{NAT@ctr}}%
+ \label{LastBibItem}%
+ \endNAT@thebibliography
+ \aftergroup\auto@bib@empty
+}%
+\def\present@bibnote#1#2{%
+ \item[%
+ \textsuperscript{%
+ \normalfont
+ \Hy@raisedlink{\hyper@anchorstart{frontmatter.#1}\hyper@anchorend}%
+ \begingroup
+ \csname c@\@mpfn\endcsname#1\relax
+ \frontmatter@thefootnote
+ \endgroup
+ }%
+ ]#2\par
+}%
+\def\write@bibliographystyle{%
+ \@ifxundefined\@bibstyle{}{%
+ \expandafter\bibliographystyle@latex\expandafter{\@bibstyle}%
+ \bibliographystyle@sw{}{\@bibdataout@rev}%
+ }%
+ \global\let\write@bibliographystyle\relax
+}%
+\AtEndDocument{\write@bibliographystyle}%
+\def\rtx@@citetp[#1]{\@ifnextchar[{\rtx@citex[#1]}{\rtx@citex[][#1]}}%
+\def\rtx@citex[#1][#2]#3{%
+ \begingroup
+ \def\@tempa{[#1][#2]{#3}}%
+ \@ifx{\@cite\NAT@citesuper}{%
+ \leavevmode
+ \skip@\lastskip
+ \unskip
+ \super@cite@let
+ }{%
+ \super@cite@end
+ }%
+}%
+\def\super@cite@let{%
+ \futurelet\@let@token\super@cite@check
+}%
+\def\super@cite@end{%
+ \aftergroup\@citex\expandafter\endgroup\@tempa
+}%
+\def\super@cite@check{%
+ \@ifx{\@let@token\@sptoken}{%
+ \super@cite@end
+ }{%
+ \super@cite@swap
+ }%
+}%
+\long\def\super@cite@swap#1{%
+ \expandafter\@ifx\expandafter{\csname rtx@automove#1\endcsname\@empty}{%
+ #1%
+ \super@cite@let
+ }{%
+ \super@cite@end
+ #1%
+ }%
+}%
+\expandafter\let\csname rtx@automove.\endcsname\@empty
+\expandafter\let\csname rtx@automove,\endcsname\@empty
+\expandafter\let\csname rtx@automove:\endcsname\@empty
+\expandafter\let\csname rtx@automove;\endcsname\@empty
+\appdef\class@documenthook{%
+ \citeautoscript@sw{%
+ \@ifx{\@cite\NAT@citesuper}{%
+ \let\NAT@@citetp\rtx@@citetp
+ }{}%
+ }{}%
+}%
+\def\mini@note{\save@note\mini@notes}%Implicit #2
+\def\save@note#1#2{%
+ \stepcounter\@mpfn
+ \protected@xdef\@thefnmark{\thempfn}%
+ \@footnotemark
+ \expandafter\g@addto@macro
+ \expandafter#1%
+ \expandafter{%
+ \expandafter \@@footnotetext
+ \expandafter {\@thefnmark}{#2}%
+ }%
+}%
+\long\def\@@footnotetext#1{\def\@thefnmark{#1}\@footnotetext}%
+\let\mini@notes\@empty
+\def\rev@citemark#1{%
+ \expandafter\cite\expandafter{\@thefnmark}%
+}%
+\def\rev@endtext#1{%
+ \let\@endnotelabel\@thefnmark
+ \@endnotetext
+}%
+\def\endnote@ext{.end}%
+\def\bibdata@app{Notes}%
+\def\bibdata@ext{bib}%
+\long\def\@endnotetext#1{%
+ \begingroup
+ \endnote@relax
+ \immediate\write\@bibdataout{%
+ @FOOTNOTE{%
+ \@endnotelabel,%
+ key="\@endnotelabel",%
+ note="#1"%
+ }%
+ }%
+ \endgroup
+}%
+\newwrite\@bibdataout
+\def\endnote@relax{%
+ \let\label\relax \let\index\relax \let\glossary\relax
+ \let\cite \relax \let\ref \relax \let\pageref \relax
+ \let\( \relax \let\) \relax \let\\ \relax
+ \let~\relax
+ \let \protect \@unexpandable@protect
+ \newlinechar`\^^M%
+ \let\begin\relax \let\end\relax
+}%
+\appdef\class@documenthook{\@bibdataout@init}%
+\def\@bibdataout@init{%
+ \immediate\openout\@bibdataout\pre@bibdata.\bibdata@ext\relax
+}%
+\def\@bibdataout@rev{%
+ \immediate\write\@bibdataout{%
+ @CONTROL{%
+ REVTEX41Control%
+ \eprint@enable@sw{}{,eprint=""}%
+ }%
+ }%
+ \if@filesw
+ \immediate\write\@auxout{\string\citation{REVTEX41Control}}%
+ \fi
+}%
+\def\printendnotes{%
+ \class@warn{The \string\printendnotes\space command no longer serves any function. Please remove it from your document.}%
+}%
+\def\make@footnote@endnote{%
+ \footinbib@sw{%
+ \authoryear@sw{}{%
+ \ltx@footnote@push
+ \def\thempfn{Note\thefootnote}%
+ \let\ltx@footmark\rev@citemark
+ \let\ltx@foottext\rev@endtext
+ }%
+ }{}%
+}%
+\def\ltx@footnote@push{%
+ \let\ltx@footmark@latex\ltx@footmark
+ \let\ltx@foottext@latex\ltx@foottext
+ \let\thempfn@latex\thempfn
+ \def\ltx@footnote@pop{%
+ \let\ltx@footmark\ltx@footmark@latex
+ \let\ltx@foottext\ltx@foottext@latex
+ \let\thempfn\thempfn@latex
+ }%
+}%
+\appdef\class@documenthook{%
+ \make@footnote@endnote
+}%
+\def\auto@bib{%
+ \@ifx@empty\@FMN@list{%
+ \footinbib@sw{%
+ \@ifnum{\csname c@\@mpfn\endcsname>\z@}{%
+ \true@sw
+ }{%
+ \test@bbl@sw
+ }%
+ }{%
+ \test@bbl@sw
+ }%
+ }{%
+ \true@sw
+ }%
+ {%
+ \bibliography{}%
+ }{}%
+}%
+\def\auto@bib@empty{%
+ \let\auto@bib\@empty
+}%
+\def\test@bbl@sw{%
+ \setbox\z@\vbox\bgroup
+ \let\providecommand\providecommand@j@nk
+ \let\bibfield\@gobbletwo
+ \let\bibinfo\@gobbletwo
+ \let\translation\@gobble
+ \let\BibitemOpen\@empty
+ \let\bibitemStop\@empty
+ \let\bibitemNoStop\@empty
+ \let\EOS\@empty
+ \let\BibitemShut\@gobble
+ \let\bibAnnoteFile\@gobbletwo
+ \let\bibAnnote\@gobblethree
+ \let\textbf\@gobble
+ \let\emph\@gobble
+ \@booleanfalse\bibitem@sw
+ \let\bibitem\bibitem@set
+ \auto@bib@innerbib
+ \bibitem@sw{\aftergroup\true@sw}{\aftergroup\false@sw}%
+ \egroup
+}%
+\newcommand\bibitem@set[1][]{%
+ \bibitem@sw{}{%
+ \@booleantrue\bibitem@sw
+ \aftergroup\@booleantrue\aftergroup\bibitem@sw
+ }%
+}%
+\def\auto@bib@innerbib{%
+ \begingroup
+ \let@environment{thebibliography}{thebibliography@nogroup}%
+ \bibliography{}%
+ \endgroup
+}%
+\def\thebibliography@nogroup#1{%
+ \endgroup
+ \def\@currenvir{thebibliography}%
+}%
+\def\endthebibliography@nogroup{\begingroup}%
+\long\def \@gobblethree #1#2#3{}%
+\def\providecommand@j@nk#1[#2]{%
+ \@ifnum{#2=\z@}{\def\j@nk}{%
+ \@ifnum{#2=\@ne}{\def\j@nk##1}{%
+ \@ifnum{#2=\tw@}{\def\j@nk##1##2}{%
+ \@ifnum{#2=\thr@@}{\def\j@nk##1##2##3}{%
+ }%
+ }%
+ }%
+ }%
+}%
+\def\thepage{\@arabic\c@page}%
+\appdef\setup@hook{%
+ \tabbingsep \labelsep
+ \leftmargin\leftmargini
+ \labelwidth\leftmargin\advance\labelwidth-\labelsep
+ \let\@listi\@listI
+ \@listi
+}%
+\appdef\class@documenthook{%
+ \global\c@page\@ne
+ \def\curr@envir{document}%
+ \mark@envir{\curr@envir}%
+}%
+\def\open@onecolumn{%
+ \open@column@one\@ne
+ \set@colht
+ \@floatplacement
+ \@dblfloatplacement
+}%
+\def\open@twocolumn{%
+ \open@column@mlt\tw@
+ \set@colht
+ \@floatplacement
+ \@dblfloatplacement
+ \sloppy
+ \let\set@listindent\set@listindent@
+}%
+\def\appendix{%
+ \par
+ \setcounter{section}\z@
+ \setcounter{subsection}\z@
+ \setcounter{subsubsection}\z@
+ \def\thesubsection{\arabic{subsection}}%
+ \def\thesubsubsection{\alph{subsubsection}}%
+ \@addtoreset{equation}{section}%
+ \def\theequation@prefix{\thesection}%
+ \addtocontents{toc}{\protect\appendix}%
+ \@ifstar{%
+ \def\thesection{\unskip}%
+ \def\theequation@prefix{A.}%
+ }{%
+ \def\thesection{\Alph{section}}%
+ }%
+}%
+\def\title@column#1{%
+ \minipagefootnote@init
+ #1%
+ \minipagefootnote@foot
+}%
+\def\close@column{%
+ \newpage
+}%
+\def\galley@outdent{\rightmargin-\columnwidth\advance\rightmargin-\columnsep}%
+\let\widetext@outdent\@empty
+\newenvironment{widetext@galley}{%
+ \list{}{%
+ \topsep \z@skip
+ \listparindent \parindent
+ \itemindent \parindent
+ \leftmargin \z@
+ \parsep \z@\@plus\p@
+ \widetext@outdent
+ \relax
+ }%
+ \item\relax
+}{
+ \endlist
+}%
+\def\title@column@grid#1{%
+ \minipagefootnote@init
+ \onecolumngrid
+ \begingroup
+ \let\@footnotetext\frontmatter@footnotetext
+ \ltx@no@footnote
+ #1%
+ \endgroup
+ \twocolumngrid
+ \minipagefootnote@foot
+}%
+\def\close@column@grid{%
+ \balancelastpage@sw{%
+ \onecolumngrid
+ }{}%
+}%
+\newenvironment{widetext@grid}{%
+ \par\ignorespaces
+ \setbox\widetext@top\vbox{%
+ \hb@xt@\hsize{%
+ \leaders\hrule\hfil
+ \vrule\@height6\p@
+ }%
+ }%
+ \setbox\widetext@bot\hb@xt@\hsize{%
+ \vrule\@depth6\p@
+ \leaders\hrule\hfil
+ }%
+ \onecolumngrid
+ \vskip10\p@
+ \dimen@\ht\widetext@top\advance\dimen@\dp\widetext@top
+ \cleaders\box\widetext@top\vskip\dimen@
+ \vskip6\p@
+ \prep@math@patch
+}{%
+ \par
+ \vskip6\p@
+ \setbox\widetext@bot\vbox{%
+ \hb@xt@\hsize{\hfil\box\widetext@bot}%
+ }%
+ \dimen@\ht\widetext@bot\advance\dimen@\dp\widetext@bot
+ \cleaders\box\widetext@bot\vskip\dimen@
+ \vskip8.5\p@
+ \twocolumngrid\global\@ignoretrue
+ \@endpetrue
+}%
+\newbox\widetext@top
+\newbox\widetext@bot
+\def\set@page@grid{%
+ \twocolumn@sw{%
+ \let\set@footnotewidth\set@footnotewidth@two
+ \let\compose@footnotes\compose@footnotes@two
+ \let@environment{widetext}{widetext@grid}%
+ \let\title@column\title@column@grid
+ \let\close@column\close@column@grid
+ }{%
+ \let@environment{widetext}{widetext@galley}%
+ \preprintsty@sw{%
+ }{%
+ \galley@sw{%
+ \let\widetext@outdent\galley@outdent
+ }{}%
+ }%
+ }%
+}%
+\appdef\setup@hook{\set@page@grid}%
+\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
+\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
+\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
+\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
+\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
+\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl}
+\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc}
+\DeclareRobustCommand*\cal{\@fontswitch\relax\mathcal}
+\DeclareRobustCommand*\mit{\@fontswitch\relax\mathnormal}
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+\def\partname{Part}
+\def\tocname{Contents}
+\def\lofname{List of Figures}
+\def\lotname{List of Tables}
+\def\refname{References}
+\def\indexname{Index}
+\def\figurename{FIG.}
+\def\figuresname{Figures}%
+\def\tablename{TABLE}
+\def\tablesname{Tables}%
+\def\abstractname{Abstract}
+\def\appendixesname{Appendixes}%
+\def\appendixname{Appendix}%
+\def\acknowledgmentsname{Acknowledgments}
+\def\journalname{??}
+\def\copyrightname{??}
+\def\andname{and}
+\def\@pacs@name{PACS numbers: }%
+\def\@keys@name{Keywords: }%
+\def\ppname{pp}
+\def\numbername{number}
+\def\volumename{volume}
+\def\Dated@name{Dated: }%
+\def\Received@name{Received }%
+\def\Revised@name{Revised }%
+\def\Accepted@name{Accepted }%
+\def\Published@name{Published }%
+\def\address{\replace@command\address\affiliation}%
+\def\altaddress{\replace@command\altaddress\altaffiliation}%
+\newenvironment{references}{%
+ \class@warn@end{The references environment is not supported; use thebibliography instead.}
+ \gdef\references{\thebibliography{}}\references
+}{%
+ \endthebibliography
+}%
+\def\draft{%
+ \class@warn@end{Command \string\draft\space is obsolete;^^JInvoke option draft instead.}%
+ \@booleantrue\draft@sw
+}%
+\def\tighten{%
+ \class@warn@end{Command \string\tighten\space is obsolete;^^JInvoke option tightenlines instead.}%
+ \@booleantrue\tightenlines@sw
+}%
+\def\tableline{%
+ \noalign{%
+ \class@warn@end{Command \string\tableline\space is obsolete;^^JUse \string\colrule\space instead.}%
+ \global\let\tableline\colrule
+ }%
+ \tableline
+}%
+\def\case{\replace@command\case\frac}%
+\def\slantfrac{\replace@command\slantfrac\frac}%
+\def\tablenote{\replace@command\tablenote\footnote}%
+\def\tablenotemark{\replace@command\tablenotemark\footnotemark}%
+\def\tablenotetext{\replace@command\tablenotetext\footnotetext}%
+\DeclareRobustCommand\REV@text[1]{%
+ \relax
+ \ifmmode
+ \mathchoice
+ {\hbox{{\everymath{\displaystyle }#1}}}%
+ {\hbox{{\everymath{\textstyle }#1}}}%
+ {\hbox{{\everymath{\scriptstyle }\let\f@size\sf@size\selectfont#1}}}%
+ {\hbox{{\everymath{\scriptscriptstyle}\let\f@size\ssf@size\selectfont#1}}}%
+ \glb@settings
+ \else
+ \mbox{#1}%
+ \fi
+}%
+\DeclareRobustCommand\REV@bbox[1]{%
+ \relax
+ \ifmmode
+ \mathchoice
+ {\hbox{{\everymath{\displaystyle }\boldmath$#1$}}}%
+ {\hbox{{\everymath{\textstyle }\boldmath$#1$}}}%
+ {\hbox{{\everymath{\scriptstyle }\boldmath$#1$}}}%
+ {\hbox{{\everymath{\scriptscriptstyle}\boldmath$#1$}}}%
+ \glb@settings
+ \else
+ \mbox{#1}%
+ \fi
+}%
+\DeclareRobustCommand\REV@bm[1]{%
+ \class@warn@end{To use \string\bm, please load the bm package!}%
+ \global\let\bm\relax
+}%
+\def\FL{\obsolete@command\FL}%
+\def\FR{\obsolete@command\FR}%
+\def\narrowtext{\obsolete@command\narrowtext}%
+\def\mediumtext{\obsolete@command\mediumtext}%
+\newenvironment{quasitable}{%
+ \let@environment{tabular}{longtable}%
+}{%
+}%
+\let\text\REV@text
+\let\bm\REV@bm
+\appdef\setup@hook{%
+ \providecommand\bibinfo[2]{#2}%
+ \providecommand\eprint[2][]{#2}%
+}%
+\def\bbox#1{%
+ \class@warn@end{\string\bbox\space is obsolete,^^Jload the bm package and use \string\bm\space instead.}%
+ \global\let\bbox\relax
+}%
+\newenvironment{mathletters}{%
+ \class@warn@end{Environment {mathletters} is obsolete;^^Jload the amsmath package and use {subequations}!}%
+ \global\let\mathletters\@empty
+}{%
+}%
+\def\eqnum#1{%
+ \class@warn@end{\string\eqnum\space is obsolete, load the amsmath package and use \string\tag!}%
+ \global\let\eqnum\@gobble
+}%
+\appdef\rtx@require@packages{%
+ \RequirePackage{revsymb4-1}%
+}%
+\appdef\class@documenthook{\revsymb@inithook}%
+\def\@LN@LLerror@org{%
+ \PackageError{lineno}{%
+ \string\linelabel\space without \string\linenumbers
+ }{%
+ Just see documentation. (New feature v4.11)%
+ }%
+ \@gobble
+}%
+\def\@LN@LLerror@ltx{%
+ \PackageWarning{lineno}{%
+ To make the \string\linelabel\space command work, you must issue the \string\linenumbers\ command
+ }%
+ \@gobble
+}%
+\appdef\class@documenthook{%
+ \@ifx{\@LN@LLerror\@LN@LLerror@org}{%
+ \class@info{Overriding \string\@LN@LLerror}%
+ \let\@LN@LLerror\@LN@LLerror@ltx
+ }{}%
+ \@ifpackageloaded{lineno}{%
+ \@ifxundefined{\set@linepenalties}{}{%
+ \def\prep@absbox{\set@linepenalties}%
+ \def\post@absbox{\let\@LN@parpgbrk\@empty\@linenumberpar}%
+ }%
+ }{}%
+}%
+\appdef\rtx@require@packages{%
+ \InputIfFileExists{\jobname.rty}{}{}%
+}%
+\@parse@class@options@society
+\@process@society{aps}%
+\@parse@class@options@\@journal
+\expandafter\@process@journal\expandafter{\@journal@default}%
+\@parse@class@options@\@pointsize
+\expandafter\@process@pointsize\expandafter{\@pointsize@default}%
+\@options
+\rtx@require@packages
+\setup@hook
+\endinput
+%%
+%% End of file `revtex4-1.cls'.
diff --git a/obsolete/macros/latex/contrib/rplain/rplain.dtx b/obsolete/macros/latex/contrib/rplain/rplain.dtx
new file mode 100644
index 0000000000..0e42d8679b
--- /dev/null
+++ b/obsolete/macros/latex/contrib/rplain/rplain.dtx
@@ -0,0 +1,153 @@
+% \iffalse meta-comment
+%
+% This is file `rplain.dtx'.
+%
+% Copyright (C) 1994-2006 Axel Sommerfeldt (caption@sommerfee.de)
+%
+% --------------------------------------------------------------------------
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2003/12/01 or later.
+%
+% This work has the LPPL maintenance status "maintained".
+%
+% This Current Maintainer of this work is Axel Sommerfeldt.
+%
+% This work consists of the files rplain.ins, rplain.dtx
+% and the derived file rplain.sty.
+%
+% \fi
+% \CheckSum{27}
+%
+% \iffalse
+%<*driver>
+\NeedsTeXFormat{LaTeX2e}[1994/12/01]
+\documentclass{ltxdoc}
+\setlength{\parindent}{0pt}
+\setlength{\parskip}{\smallskipamount}
+%
+\ifx\pdfoutput\undefined\else
+ \ifcase\pdfoutput\else
+ \usepackage{mathptmx,courier}
+ \usepackage[scaled=0.90]{helvet}
+ \addtolength\marginparwidth{15pt}
+ \fi
+\fi
+%
+\usepackage{rplain}
+\usepackage{hyperref}
+%
+%<+driver>\OnlyDescription
+%
+\begin{document}
+ \DocInput{rplain.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \newcommand*{\purerm}[1]{{\upshape\mdseries\rmfamily #1}}
+% \newcommand*{\puresf}[1]{{\upshape\mdseries\sffamily #1}}
+% \newcommand*{\purett}[1]{{\upshape\mdseries\ttfamily #1}}
+% \let\package\puresf\def\thispackage{\package{rplain}}
+% \let\env\purett \let\opt\purett
+%
+% \changes{v1.0}{1994/10/10}{First release}
+% \changes{v1.0a}{2002/02/04}{`Obsolete' warning added}
+% \changes{v1.0b}{2006/01/29}{\cs{typeout} message removed}
+%
+% \GetFileInfo{rplain.sty}
+% \title{The \thispackage\ package\thanks{This package has version number
+% \fileversion, last revised \filedate.}}
+% \author{Axel Sommerfeldt\\\href{mailto:caption@sommerfee.de}{\texttt{caption@sommerfee.de}}}
+% \date{2006/01/29}
+% \maketitle
+%
+% \begin{abstract}
+% The \thispackage\ package redefines the \texttt{plain} pagestyle.
+% The page numbers are now in the lower right corner instead of
+% being centered, like in this one-sided document. In two-sided
+% documents, the page numbers are in the lower left or right corner.
+% \end{abstract}
+%
+% \section*{This package is obsolete!}
+% This package was superseeded by the \package{fancyhdr} package~\cite{fancyhdr}
+% and therefore is no longer supported.
+% So please don't use \thispackage, just use \package{fancyhdr} instead:
+%
+% \section{The user interface}
+% Type
+% \begin{quote}
+% |\usepackage{fancyhdr}|\\
+% |\fancypagestyle{plain}{%|\\
+% | \fancyhf{} % clear all header and footer fields|\\
+% | \fancyfoot[LE,RO]{\thepage}|\\
+% | \renewcommand{\headrulewidth}{0pt}|\\
+% | \renewcommand{\footrulewidth}{0pt}}|\\
+% |\pagestyle{plain}|
+% \end{quote}
+% in the preamble of your document.
+% (See also section 7 ``Redefining \texttt{plain} style'' in \texttt{fancyhdr.pdf}.)
+%
+% \StopEventually{
+% \begin{thebibliography}{9}
+% \bibitem{fancyhdr}
+% Piet van Oostrum:
+% \textsl{Page layout in \LaTeX},
+% 2000/10/11
+% \end{thebibliography}
+% }
+%
+% \DoNotIndex{\@ifnextchar,\@ifundefined,\@namedef,\@nameuse}
+% \DoNotIndex{\bgroup,\columnwidth,\csname,\def,\edef,\egroup,\else,\endcsname}
+% \DoNotIndex{\empty,\expandafter,\fi,\global,\hfil,\ifx,\let,\newcommand,\noexpand}
+% \DoNotIndex{\renewcommand,\rmfamily,\setbox,\textheight,\typeout,\undefined,\vbox}
+% \DoNotIndex{\CurrentOption,\DeclareOption,\ExecuteOptions,\NeedsTeXFormat}
+% \DoNotIndex{\PassOptionsToPackage,\ProcessOptions,\ProvidesPackage,\RequirePackage}
+%
+% \clearpage
+% \setlength{\parskip}{0pt plus 1pt}
+%
+% \iffalse
+%<*package>
+% \fi
+%
+% \section{The Implementation}
+%
+% \subsection{Identification}
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}[1994/06/01]
+\ProvidesPackage{rplain}[2006/01/29 v1.0b rplain package (AS)]
+\PackageWarning{rplain}{%
+ This package has been superseeded by the `fancyhdr' package}
+% \end{macrocode}
+%
+% \subsection{Main code}
+% \begin{macro}{\ps@plain}
+% This macro was taken from |report.cls| (\LaTeXe\ 94/06/01 patch level 3)
+% and modified.
+% \begin{macrocode}
+\renewcommand{\ps@plain}{%
+ \let\@mkboth\@gobbletwo
+ \let\@oddhead\@empty\let\@evenhead\@empty
+ \def\@evenfoot{\reset@font\rmfamily\thepage\hfil}%
+ \def\@oddfoot{\reset@font\rmfamily\hfil\thepage}}
+% \end{macrocode}
+% \end{macro}
+% Now we have to call |\pagestyle{plain}| (again), so that the above macro
+% will be used.
+% \begin{macrocode}
+\pagestyle{plain}
+% \end{macrocode}
+%
+% \iffalse
+%</package>
+% \fi
+%
+% \Finale
+%
+\endinput
diff --git a/obsolete/macros/latex/contrib/rplain/rplain.ins b/obsolete/macros/latex/contrib/rplain/rplain.ins
new file mode 100644
index 0000000000..e396781b11
--- /dev/null
+++ b/obsolete/macros/latex/contrib/rplain/rplain.ins
@@ -0,0 +1,40 @@
+\def\batchfile{rplain.ins}
+\input docstrip
+
+\keepsilent
+
+\preamble
+
+Copyright (C) 1994-2006 Axel Sommerfeldt (caption@sommerfee.de)
+
+--------------------------------------------------------------------------
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.3
+of this license or (at your option) any later version.
+The latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+and version 1.3 or later is part of all distributions of LaTeX
+version 2003/12/01 or later.
+
+This work has the LPPL maintenance status "maintained".
+
+This Current Maintainer of this work is Axel Sommerfeldt.
+
+This work consists of the files rplain.ins, rplain.dtx
+and the derived file rplain.sty.
+
+\endpreamble
+
+%\generate{\file{rplain.drv}{\from{rplain.dtx}{driver}}}
+\generate{\file{rplain.sty}{\from{rplain.dtx}{package}}}
+
+\Msg{***********************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the file}
+\Msg{* `rplain.sty' into a directory searched by TeX.}
+\Msg{*}
+\Msg{* To produce the documentation run the file `rplain.dtx'}
+\Msg{* through LaTeX.}
+\Msg{*}
+\Msg{***********************************************************}
diff --git a/obsolete/macros/latex/contrib/rplain/rplain.pdf b/obsolete/macros/latex/contrib/rplain/rplain.pdf
new file mode 100644
index 0000000000..d7a265e494
--- /dev/null
+++ b/obsolete/macros/latex/contrib/rplain/rplain.pdf
Binary files differ
diff --git a/obsolete/macros/latex/contrib/scratch/README b/obsolete/macros/latex/contrib/scratch/README
new file mode 100644
index 0000000000..0131d6890d
--- /dev/null
+++ b/obsolete/macros/latex/contrib/scratch/README
@@ -0,0 +1,21 @@
+___________________________________
+
+ L'extension
+ scratch
+
+ v0.41
+
+ 19 f\'evrier 2019
+___________________________________
+
+Author : Christian Tellechea
+Maintainer: Christian Tellechea
+E-mail : unbonpetit@netc.fr (CT)
+ Commentaires, signalements de bugs et
+ suggestions bienvenus
+Licence : Released under the LaTeX Project Public License v1.3c or
+ later, see http://www.latex-project.org/lppl.txt
+
+----------------------------------------------------------------------
+
+Draw programs like scratch (https://scratch.mit.edu/)
diff --git a/obsolete/macros/latex/contrib/scratch/scratch-fr.pdf b/obsolete/macros/latex/contrib/scratch/scratch-fr.pdf
new file mode 100644
index 0000000000..b6b6294059
--- /dev/null
+++ b/obsolete/macros/latex/contrib/scratch/scratch-fr.pdf
Binary files differ
diff --git a/obsolete/macros/latex/contrib/scratch/scratch-fr.tex b/obsolete/macros/latex/contrib/scratch/scratch-fr.tex
new file mode 100644
index 0000000000..ad43c10b5d
--- /dev/null
+++ b/obsolete/macros/latex/contrib/scratch/scratch-fr.tex
@@ -0,0 +1,608 @@
+% !TeX encoding = ISO-8859-1
+% Ceci est la documentation du package "scratch"
+%
+% Fichier compilé avec pdflatex
+\documentclass[french,a4paper,10pt]{article}
+\usepackage[latin1]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage[margin=2cm]{geometry}
+\usepackage[bottom]{footmisc}
+\usepackage{libertine,boites,tikz,enumitem,MnSymbol,babel,xspace,listings,scratch}
+\usepackage[scaled=0.8]{luximono}
+\frenchbsetup{og=«,fg=»}
+\def\SCRATCH{\texttt{scratch}\xspace}
+\makeatletter
+\def\code{\expandafter\code@i\string}
+\def\code@i#1{%
+ \begingroup
+ \par\nobreak\medskip\parindent0pt
+ \leftskip.1\linewidth
+ \catcode`\^^I 13 \begingroup\lccode`\~`\^^I \lowercase{\endgroup\def~{\leavevmode\space\space\space\space}}%
+ \let\do\@makeother \dospecials
+ \ttfamily\small\@noligs
+ \make@car@active\<{$\langle$\begingroup\itshape}%
+ \make@car@active\>{\endgroup$\rangle$}%
+ \obeylines\obeyspaces
+ \def\code@ii##1#1{##1\par\medbreak\endgroup}%
+ \code@ii
+}
+\long\def\grab@toks#1\relax{\gdef\right@content{#1}}
+
+\newcommand\disable@lig[1]{%
+ \catcode`#1\active
+ \begingroup
+ \lccode`\~`#1\relax
+ \lowercase{\endgroup\def~{\leavevmode\kern\z@\string#1}}%
+}
+
+\newcommand\make@car@active[1]{%
+ \catcode`#1\active
+ \begingroup
+ \lccode`\~`#1\relax
+ \lowercase{\endgroup\def~}%
+}
+
+\newcommand\exemple{%
+ \begingroup
+ \parskip\z@
+ \exemple@}
+
+\newcommand\exemple@{%
+ \medbreak\noindent
+ \begingroup
+ \let\do\@makeother\dospecials
+ \make@car@active\ { {}}%
+ \make@car@active\^^M{\par\leavevmode}%
+ \make@car@active\^^I{\space\space}%
+ \make@car@active\,{\leavevmode\kern\z@\string,}%
+ \make@car@active\-{\leavevmode\kern\z@\string-}%
+ \make@car@active\>{\leavevmode\kern\z@\string>}%
+ \make@car@active\<{\leavevmode\kern\z@\string<}%
+ \@makeother\;\@makeother\!\@makeother\?\@makeother\:% neutralise frenchb
+ \exemple@@
+}
+
+\newcommand\exemple@@[1]{%
+ \def\@tempa##1#1{\exemple@@@{##1}}%
+ \@tempa
+}
+
+\newcommand\exemple@@@[1]{%
+ \xdef\the@code{#1}%
+ \endgroup
+ \begingroup
+ \fboxrule0.4pt \fboxsep=5pt
+ \let\breakboxparindent\z@
+ \def\bkvz@top{\hrule\@height\fboxrule}%
+ \def\bkvz@bottom{\hrule\@height\fboxrule}%
+ \let\bkvz@before@breakbox\relax
+ \def\bkvz@set@linewidth{\advance\linewidth\dimexpr-2\fboxrule-2\fboxsep\relax}%
+ \def\bkvz@left{\vrule\@width\fboxrule\kern\fboxsep}%
+ \def\bkvz@right{\kern\fboxsep\vrule\@width\fboxrule}%
+ \breakbox
+ \kern.5ex\relax
+ \begingroup
+ \ttfamily\small\the@code\par
+ \endgroup
+ \kern3pt
+ \hrule height0.1pt width\linewidth depth0.1pt
+ \vskip5pt
+ \newlinechar`\^^M\everyeof{\noexpand}\scantokens{#1}\par
+ \endbreakbox
+ \endgroup
+ \medbreak
+ \endgroup
+}
+\begingroup
+ \catcode`\<13 \catcode`\>13
+ \gdef\verb{\relax\ifmmode\hbox\else\leavevmode\null\fi
+ \bgroup
+ \verb@eol@error \let\do\@makeother \dospecials
+ \verbatim@font\@noligs
+ \catcode`\<13 \catcode`\>13 \def<{\begingroup$\langle$\itshape}\def>{\/$\rangle$\endgroup}%
+ \@ifstar\@sverb\@verb}
+\endgroup
+\def\longfrscrdate@i#1/#2/#3\@nil{\number#3\relax\space \ifcase#2 \or janvier\or février\or mars\or avril\or mai\or juin\or juillet\or aout\or septembre\or octobre\or novembre\or décembre\fi\space#1}
+\edef\longfrscrdate{\expandafter\longfrscrdate@i\SCRdate\@nil}
+\makeatother
+\begingroup
+ \catcode`\_11
+ \gdef\cleval#1#2{%
+ \bigbreak\noindent
+ \hbox to .25\linewidth{%
+ \color{teal}\bfseries\ttfamily
+ \detokenize{#1}=$\langle$\detokenize{#2}$\rangle$\hss}\kern2.5em
+ (\textit{Défaut} : {\color{teal}\ttfamily
+ \skv_eearg\skv_ifempty{\useKV[scratch]{#1}}
+ {\detokenize{{}}}
+ {\detokenize\expandafter\expandafter\expandafter{\useKV[scratch]{#1}}}})%
+ \par\nobreak
+ }
+\endgroup
+\def\suffixe#1{\begingroup\sffamily\bfseries\color{SCR#1}#1\endgroup}
+\newenvironment{version}[2]
+ {\paragraph{\hbox to 4em {v\hskip1pt #1\hfill}#2}\hskip0pt \par
+ \catcode`\>13 \begingroup\lccode`\~`\> \lowercase{\endgroup\let~}\item
+ \begin{itemize}}{\end{itemize}}
+\begin{document}
+\parindent=0pt
+\thispagestyle{empty}
+\begin{titlepage}
+ \begingroup
+ \centering
+ \null\vskip.25\vsize
+ {\large\bfseries L'extension pour \LaTeX\medbreak
+ \Huge \begin{scratch}[line width=1.5pt]\blockmove\SCRname\end{scratch}\par}
+ \bigbreak
+ v \SCRver
+ \smallbreak
+ \longfrscrdate
+ \vskip1.5cm
+ Christian \bsc{Tellechea}\par
+ \texttt{unbonpetit@netc.fr}\par
+ \endgroup
+ \vskip2cm
+ \leftskip=.2\linewidth \rightskip=.2\linewidth \small
+ Cette extension permet de dessiner des empilements de blocs similaires à ceux que l'on trouve dans le logiciel de programmation \emph{visuelle} « \SCRATCH\footnote{Le logiciel que l'on peut utiliser en ligne à \texttt{https://scratch.mit.edu/}} ».
+\end{titlepage}
+\parindent0pt
+\section{Avant propos}
+La présente extension \SCRATCH requiert les extensions \texttt{simplekv} et \texttt{ti\textit kz}. Celles-ci sont automatiquement chargées par \SCRATCH.
+
+Fidèle à mes convictions, la documentation de cette extension n'est disponible qu'en français.
+\medbreak
+{\color{red}\large\textbf{Attention} : cette extension est obsolète, est désormais gelée et \emph{n'est plus maintenue}. Par conséquent, cette version \SCRver{} sera la dernière. En effet, \SCRATCH v2 n'est plus utilisé au profit de \SCRATCH v3. La nouvelle extension «\texttt{scratch3}» rend possible le tracé de blocs similaires à ceux de \SCRATCH v3.}
+
+\section{L'environnement \SCRATCH}
+Pour dessiner un programme comme le fait \SCRATCH, il faut ouvrir un environnement «\SCRATCH» et écrire dans cet environnement les macros correspondant aux \emph{blocs} que l'on veut y mettre :
+
+\code|\begin{scratch}
+ macros pour dessiner des blocs
+\end{scratch}|
+
+Comme le savent ceux qui enseignent l'algorithmique et la programmation avec le très-à-la-mode\footnote{Je ne déteste rien de plus comme langage de programmation que ce \emph{truc} vaguement graphique, ultra limité et contre-productif dans l'apprentissage du codage qu'est \SCRATCH et que l'éducation nationale veut à tout prix imposer. Je ne compte bien évidemment pas me plier à ce nouveau dogme ridicule et ne l'utiliserai ni ne l'enseignerai; je considère que les élèves méritent mieux que \SCRATCH --~ADA par exemple~-- comme entrée dans le monde de la programmation. Ceci dit, coder cette extension a été un petit amusement.} logiciel « \SCRATCH », les programmes sont construits avec des briques, appelés «blocs», qui peuvent s'emboiter les uns sur les autres. Ces blocs sont de plusieurs couleurs, chacune correspondant à un type d'instruction que l'on retrouve dans les menus de \SCRATCH.
+
+J'ai pris le parti d'écrire des macros ayant comme argument le texte qui figure dans le bloc. Ce faisant, on a plus de liberté que dans \SCRATCH où les blocs ont des textes prédéfinis, mais cette liberté permet d'utiliser cette extension quelle que soit la langue dans laquelle on écrit.
+
+Enfin, j'ai cherché le bon compromis entre complexité du code et qualité des dessins obtenus avec cette extension: ils \emph{ressemblent} à ceux du logiciel \SCRATCH, mais le but de cette extension n'est \emph{pas} la ressemblance absolue au pixel près!
+
+\section{Les blocs normaux}
+Ces blocs sont les plus courants et possèdent une encoche d'emboitement, femelle en haut et mâle en bas. Les macros permettant de dessiner ces blocs ont des noms de la forme \verb|\block<suffixe>| et ont un seul argument obligatoire qui est le texte que l'on souhaite mettre dans le bloc. Par exemple, un bloc bleu (correspondant au menu «mouvement») a un suffixe \suffixe{move}, et est dessiné grâce à la macro \verb|\blockmove{<texte>}|. Ainsi, dans l'environnement \SCRATCH, écrire \verb|\blockmove{Bonjour le monde}| donne
+\begin{center}\begin{scratch}\blockmove{Bonjour le monde}\end{scratch}\end{center}
+
+La police d'écriture dans chaque bloc est la police « \textsf{sans serif} » en gras qui est définie dans le document au moment où l'environnement est appelé : pratiquement, cela signifie que les macros \verb|\sffamily| et \verb|\bfseries| sont exécutées avant que le texte des blocs ne soit composé. Dans cette documentation, la police sans serif est «\textsf{biolinum}».
+
+La plupart des dimensions des blocs sont proportionnelles à la taille de la police en cours. On peut donc jouer sur la taille de la police (via les classiques macros \verb|\small|, \verb|\large|, \verb|\footnotesize|, etc) pour modifier la taille des blocs\footnote{Il y a aussi la clé «\texttt{scale}» pour mettre le dessin à l'échelle que l'on souhaite, voir page~\pageref{cle-scale}} .
+
+Voici un inventaire des tous les blocs disponibles, empilés les uns sous les autres :
+
+\exemple/Voici un algorithme bizarre : \begin{scratch}
+ \blockmove{bloc de mouvement}
+ \blocklook{bloc d'apparence}
+ \blocksound{bloc de son}
+ \blockpen{bloc de stylo}
+ \blockvariable{bloc de variable}
+ \blocklist{bloc de liste}
+ \blockevent{bloc d'événement}
+ \blockcontrol{bloc de contrôle}
+ \blocksensing{bloc de capteur}
+\end{scratch}/
+
+Il faut donc retenir cette logique : les suffixes \suffixe{move}, \suffixe{look}, \suffixe{sound}, \suffixe{pen}, \suffixe{variable}, \suffixe{list}, \suffixe{event}, \suffixe{control} et \suffixe{sensing} correspondent aux couleurs des blocs. Il existe aussi le suffixe \suffixe{operator} qui n'a pas été montré précédemment puisqu'aucun bloc n'existe pour la fonction «opérateurs».
+
+\section{Les ovales}
+Les « ovales » sont, selon le code graphique de \SCRATCH, censés contenir des nombres. Lorsque ces nombres sont explicitement écrits en chiffres, ces ovales ont un fond blanc : \begin{center}\begin{scratch}\blockmove{ajouter \ovalnum{10} à x}\end{scratch}\end{center}
+Les valeurs numériques sont parfois issues de valeurs prédéfinies auquel cas, une flèche de sélection doit apparaitre après le nombre prédéfini choisi : \begin{center}\begin{scratch}\blockmove{s'orienter à \ovalnum{180\selectarrownum}}\end{scratch}\end{center}
+
+Au niveau des macros utilisées dans l'exemple plus bas :
+\begin{itemize}
+ \item la macro \verb|\ovalnum{<nombre>}| dessine un nombre dans un ovale à fond blanc;
+ \item la macro \verb|\selectarrownum| trace la flèche de sélection;
+ \item les macros \verb|\turnleft| et \verb|\turnright| dessinent des flèches de rotation dans les blocs \verb|\blockmove|.
+\end{itemize}
+
+\exemple/Ovales sur fond blanc : \begin{scratch}
+ \blockmove{ajouter \ovalnum{10} à x}
+ \blockmove{s'orienter à \ovalnum{180\selectarrownum}}
+ \blockmove{tourner de \turnleft{} de \ovalnum{45} degrés}
+ \blockcontrol{attendre \ovalnum{1} seconde}
+ \blockpen{mettre l'intensité du stylo à \ovalnum{50}}
+\end{scratch}/
+
+Lorsque les \verb|<nombres>| sont contenus dans des variables, les ovales prennent alors la couleur de la fonction correspondant à ces variables. Les macros ont des noms de la forme \verb|\oval<suffixe>| et ont pour suffixe \suffixe{move}, \suffixe{look}, \suffixe{sound}, \suffixe{variable}, \suffixe{list}, \suffixe{sensing} et \suffixe{operator}.
+
+Voici quelques exemples :
+\exemple/Ovales divers : \begin{scratch}
+ \blockmove{s'orienter à \ovalmove{direction}}
+ \blocksound{ajouter \ovaloperator{\ovalnum{-0.5} * \ovalsound{volume}} au volume}
+ \blockmove{glisser en \ovalsound{tempo} secondes à x: \ovalsensing{souris x}
+ y: \ovaloperator{\ovalnum{4} * \ovalsensing{souris y}}}
+\end{scratch}
+
+Toutes les macros ayant pour préfixe \verb|\oval| sont utilisables \emph{en dehors} de l'environnement
+scratch, la preuve : voici \ovalvariable{une variable} et \ovaloperator{un opérateur}./
+
+\section{Les blocs de début}
+Ces blocs sont de la couleur \suffixe{event} pour la plupart (macro \verb|\blockinit|), mais il existe aussi un bloc de début de couleur \suffixe{control} (macro \verb|\blockinitclone|). Le drapeau vert est dessiné avec la macro \verb|\greenflag|.
+
+\exemple/Voici un début :
+\begin{scratch}
+ \blockinit{quand \greenflag est cliqué}
+ \blockmove{suite de l'algorithme...}
+\end{scratch}
+et un autre :
+\begin{scratch}
+ \blockinitclone{quand je commence comme un clone}
+ \blocklook{enfiler le costume de clown !}
+\end{scratch}/
+
+\section{Les rectangles}
+Du texte spécifié par l'utilisateur se trouve dans un rectangle sur fond blanc, en graisse normale et en couleur noir. La macro \verb|\txtbox{<du texte>}| permet, dans l'environnement \SCRATCH d'insérer ces rectangles « de texte »:
+
+\exemple/\begin{scratch}
+ \blocklook{dire \txtbox{Hello} pendant \ovalnum{2} secondes}
+ \blocksensing{demander \txtbox{Quel est votre nom ?} et attendre}
+\end{scratch}/
+
+Un menu déroulant ayant des valeurs prédéfinies est également symbolisé par un rectangle dont la couleur reprend la fonction du bloc qui le contient. Pour ce faire, la macro \verb|\selectmenu{<texte>}| doit être exécutée :
+
+\exemple/\begin{scratch}
+ \blockinit{Quand je reçois \selectmenu{message 1}}
+ \blockcontrol{créer un clone de \selectmenu{moi même}}
+ \blockmove{aller à \selectmenu{pointeur de souris}}
+ \blocklook{ajouter à l'effet \selectmenu{couleur} \ovalnum{25}}
+\end{scratch}/
+
+Un carré rempli de couleur et accessible avec la macro \verb|\squarecolor{<couleur>}| achève cet inventaire sur les rectangles :
+
+\exemple/\begin{scratch}
+ \blockpen{stylo en position d'écriture}
+ \blockpen{mettre la couleur du style à \squarecolor{red!75!black}}
+ \blockmove{avancer de \ovalnum{25}}
+\end{scratch}/
+
+\section{Les losanges et les blocs de test}
+Dans la symbolique graphique de \SCRATCH, les losanges contiennent des valeurs booléennes ayant vocation à se retrouver dans un bloc de test. Pour dessiner de tels objets booléens, les macros \verb|\bool<suffixe>{<texte>}| sont utilisées où les \verb|<suffixes>| représentent les couleurs correspondant à la fonction du booléen tracé : \suffixe{list}, \suffixe{sensing} ou \suffixe{operator}.
+
+Les blocs de test sont de deux types,selon qu'ils possèdent ou pas une branche « else».
+\code|\blockif{<texte du test>}
+ {<instructions si test vrai>}|
+et
+\code|\blockifelse{<texte du test>}
+ {<instructions si test vrai>}
+ {<instructions si test faux>}|
+
+
+\exemple/Conditions :\begin{scratch}
+ \blockif{si \booloperator{\ovalmove{abscisse x} < \txtbox{7}} alors}
+ {\blockmove{aller à \selectmenu{position aléatoire}}
+ \blocklook{basculer sur costume \selectmenu{costume 4}}
+ }
+ \blockmove{aller à \selectmenu{pointeur souris}}
+\end{scratch}
+et
+\begin{scratch}
+ \blockifelse{si \boolsensing{couleur \squarecolor{blue!65} touchée ?} alors}
+ {\blockmove{avancer de \ovalnum{2}}
+ \blocksound{jouer le son \selectmenu{miaou}}
+ }
+ {\blockvariable{mettre \ovalvariable{total} à \ovaloperator{\ovalvariable{total} + \ovalnum{1}}}
+ \blocksound{arrêter tous les sons}
+ }
+ \blockmove{aller à \selectmenu{pointeur souris}}
+\end{scratch}/
+
+Les macros \verb|\squarecolor| et celles de la forme \verb|\bool<suffixe>| sont utilisables \emph{en dehors} d'un environnement \SCRATCH :
+
+\exemple/Une couleur : \squarecolor{cyan}.\par
+Un booléen : \boollist{liste \selectmenu{malist} contient \txtbox{foobar}}.\par
+Un autre : \booloperator{\booloperator{\ovalvariable{varx} > \txtbox{1}}
+et \booloperator{\ovalvariable{varx} < \txtbox{5}}}./
+
+\section{Les blocs de fin}
+Ces blocs sont susceptibles de clore un algorithme et n'ont donc pas d'encoche mâle dans leur partie basse. Ils ne peuvent être que du type \suffixe{control} et sont dessinés avec la macro \verb|\blockstop{<texte>}|
+
+\exemple/\begin{scratch}\blockstop{supprimer ce clone}\end{scratch}
+ou
+\begin{scratch}\blockstop{stop \selectmenu{ce script}}\end{scratch}/
+
+\section{Les blocs de répétition}
+Ces blocs sont de deux types, selon que la répétition est prévue pour s'arrêter ou pas (boucle infinie). Ils seront dessinés par les macros \verb|\blockrepeat| et \verb|\blocinfloop| ayant chacune \emph{deux} arguments : le premier étant le \verb|<texte>| du bloc et le second la suite d'instructions à répéter.
+
+\exemple/\begin{scratch}
+ \blockpen{stylo en position d'écriture}
+ \blockrepeat{répéter \ovalnum{4} fois}
+ {
+ \blockmove{avancer de \ovalnum{10}}
+ \blockmove{tourner \turnright{} de \ovalnum{90} degrés}
+ }
+\end{scratch}
+et
+\begin{scratch}
+ \blockpen{stylo en position d'écriture}
+ \blockinfloop{répéter indéfiniment}
+ {
+ \blockmove{s'orienter à \ovaloperator{nombre aléatoire entre \ovalnum{0} et \ovalnum{359}}}
+ \blockmove{avancer de \ovaloperator{nombre aléatoire entre \ovalnum{1} et \ovalnum{10}}}
+ \blockif{si \boolsensing{\selectmenu{bord} touché?}}
+ {
+ \blockmove{aller à x: \ovalnum{0} y: \ovalnum{0}}
+ }
+ }
+\end{scratch}/
+
+\section{Les blocs de définition}
+Les « procédures », ayant le suffixe \suffixe{moreblocks}, permettent d'étendre les maigres possibilités données au programmeur en \SCRATCH.
+
+\exemple/\begin{scratch}
+ \initmoreblocks{définir \namemoreblocks{trace_carré \ovalmoreblocks{coté_carré}}}
+ \blockrepeat{répéter \ovalnum4 fois}
+ {\blockmove{avancer de \ovalmoreblocks{coté_carré}}
+ \blockmove{tourner \turnleft{} de \ovalnum{90} degrés}
+ }
+\end{scratch}
+puis
+\begin{scratch}
+ \blockinit{Quand \greenflag est cliqué}
+ \blockpen{effacer tout}
+ \blockpen{relever le stylo}
+ \blockmove{aller à x: \ovalnum0 y: \ovalnum0}
+ \blockmove{s'orienter à \ovalnum{90\selectarrownum} degrés}
+ \blockpen{stylo en position d'écriture}
+ \blockrepeat{répéter \ovalnum{10} fois}
+ {
+ \blockmoreblocks{trace carré \ovalnum{50}}
+ \blockmove{avancer de \ovalnum{10}}
+ \blockmove{tourner \turnleft{} de \ovalnum{36} degrés}
+ }
+\end{scratch}/
+
+\section{Bloc invisible}
+Bien que ce genre de bloc n'existe pas avec \SCRATCH, cette fonctionnalité peut s'avérer utile. On insère un espace vide avec \verb|\blockspace[<coeff>]|. L'espace verticale insérée est égale à la hauteur normale d'un bloc multipliée par le \verb|<coeff>|, valeur optionnelle qui vaut 1 par défaut.
+
+\exemple/\begin{scratch}
+ \blockmove{ci-dessous, une espace d'un bloc}
+ \blockspace
+ \blockmove{ci dessous, une espace égale à la moitié d'un bloc}
+ \blockspace[0.5]
+ \blockmove{la suite}
+\end{scratch}/
+
+\section{Personnalisation}
+Plusieurs \verb|<paramètres>| peuvent être réglés par l'utilisateur selon la syntaxe \verb|<clé>=<valeur>|. Cas paramètres peuvent être spécifiés dans :
+
+\begin{itemize}
+ \item l'argument optionnel de l'environnement \verb|\begin{scratch}[<paramètres>]| auquel cas les \verb|<paramètres>| ne s'appliquent qu'à cet environnement;
+ \item l'argument de la macro \verb|\setscratch{<paramètres>}| pour spécifier des \verb|<paramètres>| pour les environnements \SCRATCH à venir;
+ \item l'argument de \verb|\setdefaultscratch{<paramètres>}| pour spécifier des \verb|<paramètres>| \emph{par défaut}.
+\end{itemize}
+
+Il existe la macro \verb|\resetscratch| qui remet à leur valeur par défaut tous les \verb|<paramètres>| de \SCRATCH, pour annuler les effets d'une macro \verb|\setscratch|.\bigbreak
+
+Voici les \verb|<paramètres>| disponibles :
+
+\cleval{else word}{caractères}
+Représente est le mot qui est inséré dans la branche « else » d'un bloc de test.
+
+\cleval{x sep}{dimension}
+Représente l'espace horizontale insérée entre les bords droit et gauche du texte du bloc et les bords droits et gauche du bloc. La valeur est ramenée si nécessaire dans l'intervalle [3pt ; 1em].
+
+\cleval{y sepsup}{dimension}
+Représente l'espace verticale insérée entre le bas de l'encoche femelle et le bord supérieur du texte du bloc. La valeur est ramenée si nécessaire dans l'intervalle [3pt ; 3ex].
+
+\cleval{y sepinf}{dimension}
+Représente l'espace verticale insérée entre le bas du bloc et le bord inférieur du texte du bloc. La valeur est ramenée si nécessaire dans l'intervalle [3pt ; 3ex].
+
+\cleval{line width}{dimension}
+Représente l'épaisseur des lignes de relief des blocs et le double des lignes de relief des losanges booléens. La valeur est ramenée si nécessaire dans l'intervalle [0pt ; 5pt].
+
+\cleval{loop width}{dimension}
+Représente est la largeur de la barre verticale des blocs de répétition ou de test. La valeur est ramenée si nécessaire dans l'intervalle [3pt ; 3em].
+
+\cleval{loop height}{dimension}
+Représente est l'épaisseur des barres horizontales « else » et inférieure des blocs de répétition ou de test. La valeur est ramenée si nécessaire dans l'intervalle [3pt ; 3ex].
+
+\cleval{corner}{dimension}
+Représente la dimension des chanfreins des blocs. La valeur est ramenée si nécessaire dans l'intervalle [0.33333ex ; 1ex].
+
+\cleval{notch}{dimension}
+Représente la largeur des encoches. La valeur est ramenée si nécessaire dans l'intervalle [0.33333em ; 3em].
+
+\cleval{scale}{coefficient}\label{cle-scale}
+Représente l'échelle à laquelle est représenté le dessin. La valeur est ramenée si nécessaire dans l'intervalle [0.2 ; 5].
+
+\cleval{init arcangle}{angle}
+Représente l'angle avec l'horizontale de l'arc de cercle tracé dans la partie haute des blocs de départ. La valeur est ramenée si nécessaire dans l'intervalle [20 ; 40].
+
+\cleval{init arclength}{dimension}
+Représente la longueur horizontale de l'arc de cercle tracé dans la partie haute des blocs de départ. La valeur est ramenée si nécessaire dans l'intervalle [3em ; 8em].
+
+\cleval{moreblock arcangle}{angle}
+Représente l'angle avec l'horizontale de l'arc de cercle tracé dans la partie haute des blocs de de type « moreblock». La valeur est ramenée si nécessaire dans l'intervalle [10 ; 20].
+
+\cleval{contrast}{entier}
+Cet entier, compris entre 0 et 100 inclus, qualifie la différence de teintes entre les lignes de relief tracées autour des blocs. L'entier 0 signifie «aucun contraste» (teintes identiques) tandis que que 100 signifie «contraste maximal» auquel cas les lignes claires, qui se situent sur la partie haute des blocs, sont blanches et les lignes foncées sont noires. La valeur est ramenée si nécessaire dans l'intervalle [0 ; 100].
+
+\cleval{print}{booléen}
+Lorsque ce booléen est vrai, les dessins se font en noir et blanc de façon à pouvoir être dirigés vers une impression en noir et blanc.
+
+\exemple/\begin{scratch}
+ \blockinit{Quand \greenflag est cliqué}
+ \blockpen{effacer tout}
+ \blockpen{relever le stylo}
+ \blockmove{ajouter \ovalnum{5} à \ovalvariable{abscisse}}
+\end{scratch} puis
+\begin{scratch}[print]
+ \blockinit{Quand \greenflag est cliqué}
+ \blockpen{effacer tout}
+ \blockpen{relever le stylo}
+ \blockmove{ajouter \ovalnum{5} à \ovalvariable{abscisse}}
+\end{scratch}/
+
+\cleval{fill blocks}{booléen}
+Ce booléen n'est pris en compte que lorsque le booléen \verb|print| est vrai. Si \verb|fill blocks| est vrai, tous les dessins (sauf les ovales contenant des nombres) seront remplis avec un gris choisi avec la clé suivante.
+
+\cleval{fill gray}{taux de gris}
+Lorsque \verb|fill blocks| est vrai, ce taux de blanc dans le gris (nombre compris entre 0 pour noir et 1 pour blanc) est utilisé pour définir une couleur de remplissage des dessins. La valeur est ramenée si nécessaire dans l'intervalle [0 ; 1].
+
+\exemple/\begin{scratch}
+ \blockinit{Quand \greenflag est cliqué}
+ \blockpen{effacer tout}
+ \blockpen{relever le stylo}
+ \blockmove{ajouter \ovalnum{5} à \ovalvariable{abscisse}}
+\end{scratch} puis
+\begin{scratch}[print,fill blocks]
+ \blockinit{Quand \greenflag est cliqué}
+ \blockpen{effacer tout}
+ \blockpen{relever le stylo}
+ \blockmove{ajouter \ovalnum{5} à \ovalvariable{abscisse}}
+\end{scratch} puis
+\begin{scratch}[print,fill blocks,fill gray=0.66]
+ \blockinit{Quand \greenflag est cliqué}
+ \blockpen{effacer tout}
+ \blockpen{relever le stylo}
+ \blockmove{ajouter \ovalnum{5} à \ovalvariable{abscisse}}
+\end{scratch}/
+
+\cleval{text color}{couleur}
+Lorsque \verb|fill blocks| est vrai, cette couleur sera utilisée pour le texte des blocs.
+
+\cleval{flag gray}{taux de gris}
+Lorsque \verb|print| est vrai, ce taux de gris est utilisé pour la couleur du drapeau tracé avec \verb|\greenflag| ainsi que pour la flèche se trouvant au bas des blocs de répétition. La valeur est ramenée si nécessaire dans l'intervalle [0 ; 1].
+
+\exemple/\begin{scratch}[print,fill blocks,fill gray=0.66]
+ \blockinit{Quand \greenflag est cliqué}
+ \blockpen{effacer tout}
+ \blockpen{relever le stylo}
+ \blockmove{ajouter \ovalnum{5} à \ovalvariable{abscisse}}
+\end{scratch} puis
+\begin{scratch}[print,fill blocks,fill gray=0.33,text color=white,flag gray=0.66]
+ \blockinit{Quand \greenflag est cliqué}
+ \blockpen{effacer tout}
+ \blockpen{relever le stylo}
+ \blockmove{ajouter \ovalnum{5} à \ovalvariable{abscisse}}
+\end{scratch}/
+
+\cleval{line gray}{taux de gris}
+Lorsque \verb|print| est vrai, ce taux de gris est utilisé pour la couleur des lignes de relief. La valeur est ramenée si nécessaire dans l'intervalle [0 ; 1].
+
+\cleval{num blocks}{booléen}
+Lorsque ce booléen est vrai, les blocs sont numérotés.
+
+\cleval{num sep}{dimension}
+Cette clé contient l'espacement entre les numéros de blocs et leur frontière gauche. La valeur est ramenée si nécessaire dans l'intervalle [0pt ; 1.5em].
+
+\cleval{num start}{entier}
+Cette clé contient le premier numéro du bloc.
+
+La macro \verb|\numblock| est chargée d'imprimer les numéros de ligne. Elle admet un argument (le numéro de ligne) et permet, lorsqu'elle est redéfinie, de personnaliser la numérotation : choix de la couleur, de la police, de sa taille et des effets applicables à son argument. Par défaut, cette macro est définie par
+\begin{center}
+ \verb|\newcommand*\numblock[1]{\color{black}\footnotesize\bfseries#1}|
+\end{center}
+
+Dans l'environnement \SCRATCH, entre des instructions \SCRATCH, on peut activer ou désactiver la numérotation \emph{pour le dessin en cours} à l'aide de
+\begin{center}
+ \verb|\setscratch{num blocks=<booléen>}|
+\end{center}
+
+\exemple/\begin{scratch}[num blocks]
+ \blockinit{Quand \greenflag est cliqué}
+ \blockpen{effacer tout}
+ \blockpen{relever le stylo}
+ \blockmove{ajouter \ovalnum{5} à \ovalvariable{abscisse}}
+\end{scratch} puis
+\renewcommand*\numblock[1]{\color{blue!80}\itshape#1}
+\begin{scratch}[num blocks,num start=3]
+ \blockinit{Quand \greenflag est cliqué}
+ \blockpen{effacer tout}
+ \blockpen{relever le stylo}
+ \blockmove{ajouter \ovalnum{5} à \ovalvariable{abscisse}}
+\end{scratch}
+puis
+\renewcommand*\numblock[1]{\fboxsep=0.5pt\fbox{\bfseries#1}}
+\begin{scratch}[num blocks=false]
+ \blockinit{Quand \greenflag est cliqué}
+ \blockpen{effacer tout}
+ \setscratch{num blocks=true}
+ \blockpen{relever le stylo}
+ \blockmove{ajouter \ovalnum{5} à \ovalvariable{abscisse}}
+\end{scratch}/
+
+\cleval{baseline}{alignement}
+Cette clé contient la consigne d'alignement du dessin tout entier, c'est-à-dire :
+\begin{itemize}
+ \item la lettre «\verb|c|» auquel cas, le dessin est centré sur la ligne de base
+ \item un entier qui spécifie un numéro de bloc existant : la numérotation est cohérente avec l'entier initial contenu dans la clé \verb|num start|. Dans ce cas, la ligne de base choisie est celle du texte contenu dans le bloc portant le numéro choisi.
+\end{itemize}
+
+\exemple/Défaut : \begin{scratch}
+ \blockinit{Quand \greenflag est cliqué}
+ \blockpen{effacer tout}
+ \blockpen{relever le stylo}
+ \blockmove{ajouter \ovalnum{5} à \ovalvariable{abscisse}}
+\end{scratch}
+bloc 3 : \begin{scratch}[baseline=3]
+ \blockinit{Quand \greenflag est cliqué}
+ \blockpen{effacer tout}
+ \blockpen{relever le stylo}
+ \blockmove{ajouter \ovalnum{5} à \ovalvariable{abscisse}}
+\end{scratch}
+centré
+\begin{scratch}[baseline=c]
+ \blockinit{Quand \greenflag est cliqué}
+ \blockpen{effacer tout}
+ \blockpen{relever le stylo}
+ \blockmove{ajouter \ovalnum{5} à \ovalvariable{abscisse}}
+\end{scratch}/
+
+\section{Mot de la fin}
+Le code de cette extension démontre mon immense ignorance de ti\textit kz/pgf et les méthodes de programmation qui lui sont propres que, décidément, je ne comprendrai jamais! C'est sans doute le trop grand éloignement avec la logique de \TeX{} et la documentation de ti\textit kz/pgf, aussi indigeste qu'illisible, qui explique cette incompatibilité d'humeur et mon désintérêt à l'égard de ti\textit kz. Toujours est-il que cette extension fonctionne, avec une lenteur certaine que j'attribue à ma programmation hasardeuse ainsi qu'à la lenteur intrinsèque de ti\textit kz.
+
+Toute remarque, remontée de bug ---~je n'ose pas dire amélioration du code~---, demande d'implémentation de fonctionnalité est bien évidemment bienvenue; j'invite les utilisateurs à m'en faire part \emph{via} email à \texttt{unbonpetit@netc.fr}
+
+\section{Historique}
+\begin{version}{0.1}{16/05/2017}
+ >Première version.
+\end{version}
+
+\begin{version}{0.2}{28/05/2017}
+ >Pour une impression en noir et blanc, ajout de l'option «\texttt{print}», suite à une demande de P.~\bsc{Celdran}. De cette option découlent les options «\texttt{fill blocks}», «\texttt{fill gray}», «\texttt{text color}», «\texttt{flag gray}» et «\texttt{line gray}».
+ >Ajout également de l'option «\texttt{contrast}» qui qualifie la différence de nuance entre les lignes de contraste des parties hautes et des parties basses.
+\end{version}
+
+\begin{version}{0.3}{03/08/2017}
+ >Correction d'une erreur dans le tracé des lignes de contraste des "boolbox".
+ >Correction d'un bug dans \verb|\resetscratch|.
+ >Correction d'un bug dans \verb|\txtbox|.
+ >Chargement de l'extension \texttt{simplekv} pour les clés/valeurs.
+ >Ajout de la clé «scale».
+\end{version}
+
+\begin{version}{0.31}{15/09/2017}
+ >Correction d'un bug signalé par G. \textsc{Mandallaz} dans \verb|\SCR_ovalbox| qui s'exécute maintenant dans un groupe : l'assignation de \verb|\SCR_current_fillcolor| est donc locale.
+ >Correction d'une erreur dans le tracé des lignes de contraste des \verb|\SCR_ovalbox|.
+\end{version}
+
+\begin{version}{0.32}{20/09/2017}
+ >Correction de 2 bugs signalés par G. \textsc{Mandallaz} : la couleur des \verb|\ovallist| n'était pas correcte et la forme des \verb|\selectmenu| n'était pas rectangulaire lorsqu'ils étaient appelés dans un boite ovale.
+\end{version}
+
+\begin{version}{0.33}{30/12/2017}
+ >Correction d'un bug signalé par I. \textsc{Eble} : l'affichage des losanges, boites de texte, ovales n'est pas correct dans les blocs lorsque \verb|scale| est différente de 1.
+\end{version}
+
+\begin{version}{0.4}{08/04/2018}
+ >Possibilité de numéroter les blocs, requête de Fabrice \textsc{Bavoil}.
+ >Augmentation automatique de la taille horizontale d'un bloc si le texte qu'il contient est trop court, bug signalé par Fabrice \textsc{Bavoil}.
+ >Possibilité de choisir la ligne de base du dessin \SCRATCH, requête de Fabrice \textsc{Bavoil}.
+ >Grâce à une clé secrète, les « losanges » n'ont plus une infime fraction de trait qui se chevauche avec les \verb|\txtbox| ou \verb|\selectmenu| intérieurs qui se trouvent en début ou fin de texte. Les ultra-perfectionnistes sont enfin comblés !
+ >Paramètres bornés (pour la plupart) et ramenés dans le domaine de fonctionnement --~ou du raisonnable~-- si nécessaire.
+ >Suppression du \verb|\normalsize| qui empêchait la prise en compte de la taille de la police en cours.
+ >Nouvelle clé «notch» pour spécifier la longueur du trait horizontal des encoches.
+ >Nettoyage du code.
+\end{version}
+
+\begin{version}{0.41}{20/03/2019}
+ >Dernière version, le package est gelé et n'est plus maintenu en raison de l'abandon de \SCRATCH v2 au profit de \SCRATCH v3.
+\end{version}
+\end{document} \ No newline at end of file
diff --git a/obsolete/macros/latex/contrib/scratch/scratch.sty b/obsolete/macros/latex/contrib/scratch/scratch.sty
new file mode 100644
index 0000000000..704308837f
--- /dev/null
+++ b/obsolete/macros/latex/contrib/scratch/scratch.sty
@@ -0,0 +1,616 @@
+% !TeX encoding = ISO-8859-1
+% Ce fichier contient le code de l'extension "scratch"
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+\def\SCRname {scratch} %
+\def\SCRver {0.41} %
+% %
+\def\SCRdate {2019/02/19} %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% --------------------------------------------------------------------
+% Author : Christian Tellechea
+% Status : Frozen
+% Email : unbonpetit@netc.fr
+% Package URL: https://www.ctan.org/pkg/scratch
+% Bug tracker: https://framagit.org/unbonpetit/scratch/issues
+% Repository : https://framagit.org/unbonpetit/scratch/tree/master
+% Copyright : Christian Tellechea 2017-2019
+% Licence : Released under the LaTeX Project Public License v1.3c
+% or later, see http://www.latex-project.org/lppl.txt
+% Files : 1) scratch.sty
+% 2) scratch-fr.tex
+% 3) scratch-fr.pdf
+% 4) README
+% --------------------------------------------------------------------
+\csname @ifpackageloaded\endcsname{scratch3}
+ {\PackageError{scratch}{scratch cannot be used since scratch3 is already loaded}{}%
+ \endinput
+ }
+ {}
+\ProvidesPackage{scratch}[\SCRdate\space v\SCRver\space Draw scratch instructions (CT)]
+\NeedsTeXFormat{LaTeX2e}
+\RequirePackage{simplekv,tikz}
+\usepgflibrary{shapes.misc,arrows.meta}
+\usetikzlibrary{bending}
+
+\expandafter\edef\csname SCR\string_restorecatcode\endcsname{\catcode`\noexpand\_=\the\catcode`\_\relax}
+\catcode`\_11
+% Les réglages par défaut (modifiables avec \setdefaultscratch)
+\setKVdefault[\SCRname]{
+ else word = sinon,% mot dans branche "else"
+ x sep = 0.5em,% séparation entre côtés droits et gauche du bloc et le texte
+ y sepsup = 1pt,% séparation entre côté sup (insert) et haut texte
+ y sepinf = 3pt,% séparation entre côté inf et bas texte
+ line width = 0.8pt,% épaisseur des lignes de relief
+ loop width = 3ex,% épaisseur de la barre verticale à gauche d'un bloc de boucle
+ loop height = 1.75ex,% hauteur de la barre du else et la barre finale
+ corner = 0.66667ex,% valeur du chanfrein
+ notch = 1em,% longueur des encoches
+ scale = 1,% échelle du dessin
+ init arcangle = 30,% angle début et fin de l'arc
+ init arclength = 5em,% longueur de l'arc
+ moreblock arcangle = 15,% angle de départ et arrivée des "more blocks"
+ contrast = 20,% contraste des lignes de relief (0=aucun contraste, 100=noir/blanc)
+ print = false,% impression noir et blanc ?
+ fill blocks = false,% remplissage des blocks lorsque l'option "print" est vraie
+ fill gray = 0.85,% taux de gris pour le remplissage si fill blocks est vraie
+ text color = black,% couleur du texte lorsque l'option "print" est vraie
+ flag gray = 0.33,% taux de gris pour le drapeau lorsque l'option "print" est vraie
+ line gray = 0.4,% taux de gris pour les lignes lorsque l'option "print" est vraie
+ bool sep = 1.25pt,% séparation entre les blocs booléens imbriqués
+ num blocks = false,% numérotation des blocs
+ num sep = 3pt,% séparation entre bord gauche et numérotation
+ num start = 1,% numéro de départ
+ baseline = 1,% alignement sur le 1er bloc (en partant du haut)
+}
+\newcommand*\numblock[1]{\color{black}\footnotesize\bfseries#1}
+\newcommand*\resetscratch{\csname skv_[\SCRname]\endcsname\SCR_setcolors}
+\newcommand*\setscratch[1]{\setKV[\SCRname]{#1}\SCR_setcolors}
+\newcommand*\setdefaultscratch[1]{\setKVdefault[\SCRname]{#1}\SCR_setcolors}
+\def\SCR_setcolors{%
+ \SCR_normalizedec\SCR_fillgray fill gray[0,1]\skv_exparg{\definecolor{SCR_fillgray}{gray}}\SCR_fillgray
+ \SCR_normalizedec\SCR_linegray line gray[0,1]\skv_exparg{\definecolor{SCR_linegray}{gray}}\SCR_linegray
+ \SCR_normalizedec\SCR_flaggray flag gray[0,1]\skv_exparg{\definecolor{SCR_flaggray}{gray}}\SCR_flaggray
+}
+
+\def\SCR_thesentinelkern{17}% nombre de "sp" sentinelle pour les booleanbox. Personne n'utilise 17sp j'espère ?
+\def\SCR_blockstrut{\vrule height2.1ex depth.9ex width0pt\relax}
+\def\SCR_ovalstrut{\vphantom{\`Ag}}
+\def\SCR_cslet#1{\expandafter\let\csname#1\endcsname}
+\def\SCR_csdef#1{\expandafter\def\csname#1\endcsname}
+\def\SCR_csedef#1{\expandafter\edef\csname#1\endcsname}
+\def\SCR_maxdim(#1,#2){\the\dimexpr\ifdim\dimexpr#1-(#2)\relax<0pt #2\else#1\fi\relax}
+\def\SCR_normalizedec#1#2[#3,#4]{\edef#1{\useKV[\SCRname]{#2}}\ifdim#1pt<#3pt \def#1{#3}\else\ifdim#1pt>#4pt \def#1{#4}\fi\fi}
+\def\SCR_normalizedim#1#2[#3,#4]{\edef#1{\the\dimexpr\useKV[\SCRname]{#2}}\ifdim\dimexpr#1-(#3)\relax<0pt \edef#1{\the\dimexpr#3}\else\ifdim\dimexpr#1-(#4)\relax>0pt \edef#1{\the\dimexpr#4}\fi\fi}
+\def\SCR_firsttonil#1#2\_nil{#1}
+\newcount\SCR_loopnest
+\newcount\SCR_blocknum
+\newbox\SCR_box
+\newdimen\SCR_yoffset
+\newdimen\SCR_xoffset
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% dessine un bloc normal %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\SCR_normalblock#1#2{% #1=couleur #2=texte
+ \def\SCR_current_blockcolor{#1}%
+ \edef\SCR_current_fillcolor{\ifboolKV[\SCRname]{print}{\ifboolKV[\SCRname]{fill blocks}{SCR_fillgray}{none}}{\SCR_current_blockcolor}}%
+ \edef\SCR_current_linelight{\ifboolKV[\SCRname]{print}{SCR_linegray}{\SCR_current_blockcolor}!\SCR_contrast!white}%
+ \edef\SCR_current_linedark {\ifboolKV[\SCRname]{print}{SCR_linegray}{\SCR_current_blockcolor}!\SCR_contrast!black}%
+ \edef\SCR_current_textcolor{\ifboolKV[\SCRname]{print}{\useKV[\SCRname]{text color}}{white}}%
+ \setbox\SCR_box\hbox{\pgfinterruptpicture\color{white}\sffamily\bfseries#2\SCR_blockstrut\endpgfinterruptpicture}%
+ \edef\SCR_boxwd{\SCR_maxdim(\wd\SCR_box,\SCR_minwd)}%
+ \edef\SCR_boxht{\the\ht\SCR_box}%
+ \edef\SCR_totht{\the\dimexpr\ht\SCR_box+\dp\SCR_box\relax}%
+ \draw[draw=none,fill=\SCR_current_fillcolor,yshift=\SCR_yoffset,xshift=\SCR_xoffset]
+ (\SCR_corner,0)--++(\SCR_notch,0)--++(\SCR_corner,-\SCR_corner)--++(\SCR_notch,0)--++(\SCR_corner,\SCR_corner)--++(\SCR_boxwd+2*\SCR_xsep-\SCR_corner*4-\SCR_notch*2,0)--++(\SCR_corner,-\SCR_corner)% ligne sup
+ --++(0,-\SCR_totht-\SCR_ysepsup-\SCR_ysepinf+\SCR_corner)--++(-\SCR_corner,-\SCR_corner)--++(-\SCR_boxwd-2*\SCR_xsep+\SCR_corner*4+\SCR_notch*2,0)--++(-\SCR_corner,-\SCR_corner)--++(-\SCR_notch,0)--++(-\SCR_corner,\SCR_corner)--++(-\SCR_notch,0)--++(-\SCR_corner,\SCR_corner)--++(0,\SCR_totht+\SCR_ysepsup+\SCR_ysepinf-\SCR_corner)--cycle;
+ \node[at=(origin),draw=none,anchor=base west,xshift=\SCR_xoffset+\SCR_xsep,yshift=\SCR_yoffset-\SCR_boxht-\SCR_corner-\SCR_ysepsup,text=\SCR_current_textcolor](txt\number\SCR_blocknum){\sffamily\bfseries#2\SCR_blockstrut};
+ \ifboolKV[\SCRname]{num blocks}
+ {\node[at=(origin),draw=none,anchor=base east,xshift=-\SCR_numsep,yshift=\SCR_yoffset-\SCR_boxht-\SCR_corner-\SCR_ysepsup](num){\skv_exparg\numblock{\number\SCR_blocknum}};}
+ {}%
+ \advance\SCR_blocknum1
+ \draw[draw=\SCR_current_linedark,yshift=\SCR_yoffset,xshift=\SCR_xoffset](\SCR_boxwd+\SCR_xsep*2,-\SCR_corner)--++(0,-\SCR_totht-\SCR_ysepsup-\SCR_ysepinf+\SCR_corner)--++(-\SCR_corner,-\SCR_corner)--++(-\SCR_boxwd-2*\SCR_xsep+\SCR_corner*4+\SCR_notch*2,0)--++(-\SCR_corner,-\SCR_corner)--++(-\SCR_notch,0)--++(-\SCR_corner,\SCR_corner)--++(-\SCR_notch,0);
+ \draw[draw=\SCR_current_linelight,yshift=\SCR_yoffset,xshift=\SCR_xoffset](\SCR_corner,-\SCR_corner-\SCR_ysepsup-\SCR_totht-\SCR_ysepinf)--++(-\SCR_corner,\SCR_corner)--++(0,\SCR_totht+\SCR_ysepsup+\SCR_ysepinf-\SCR_corner)--++(\SCR_corner,\SCR_corner)--++(\SCR_notch,0)--++(\SCR_corner,-\SCR_corner)--++(\SCR_notch,0)--++(\SCR_corner,\SCR_corner)--++(\SCR_boxwd+2*\SCR_xsep-\SCR_corner*4-\SCR_notch*2,0)--++(\SCR_corner,-\SCR_corner);
+ \advance\SCR_yoffset\dimexpr-\SCR_totht-\SCR_ysepsup-\SCR_ysepinf-\SCR_corner-\SCR_linewidth+\SCR_extraoffset\relax
+ \gdef\SCR_blockstop{0}%
+}
+\newcommand*\blockspace[1][1]{%
+ \advance\SCR_yoffset#1\dimexpr-\SCR_blockstruttotht-\SCR_ysepsup-\SCR_ysepinf-\SCR_corner-\SCR_linewidth+\SCR_extraoffset\relax
+ \gdef\SCR_blockstop{1}%
+}
+\newcommand*\blockstop[1]{% #1=texte
+ \def\SCR_current_blockcolor{SCRcontrol}%
+ \edef\SCR_current_fillcolor{\ifboolKV[\SCRname]{print}{\ifboolKV[\SCRname]{fill blocks}{SCR_fillgray}{none}}{\SCR_current_blockcolor}}%
+ \edef\SCR_current_linelight{\ifboolKV[\SCRname]{print}{SCR_linegray}{\SCR_current_blockcolor}!\SCR_contrast!white}%
+ \edef\SCR_current_linedark {\ifboolKV[\SCRname]{print}{SCR_linegray}{\SCR_current_blockcolor}!\SCR_contrast!black}%
+ \edef\SCR_current_textcolor{\ifboolKV[\SCRname]{print}{\useKV[\SCRname]{text color}}{white}}%
+ \setbox\SCR_box\hbox{\pgfinterruptpicture\color{white}\sffamily\bfseries#1\SCR_blockstrut\endpgfinterruptpicture}%
+ \edef\SCR_boxwd{\SCR_maxdim(\wd\SCR_box,\SCR_minwd)}%
+ \edef\SCR_boxht{\the\ht\SCR_box}%
+ \edef\SCR_totht{\the\dimexpr\ht\SCR_box+\dp\SCR_box\relax}%
+ \draw[draw=none,fill=\SCR_current_fillcolor,yshift=\SCR_yoffset,xshift=\SCR_xoffset]
+ (\SCR_corner,0)--++(\SCR_notch,0)--++(\SCR_corner,-\SCR_corner)--++(\SCR_notch,0)--++(\SCR_corner,\SCR_corner)--++(\SCR_boxwd+2*\SCR_xsep-\SCR_corner*4-\SCR_notch*2,0)--++(\SCR_corner,-\SCR_corner)% ligne sup
+ --++(0,-\SCR_totht-\SCR_ysepsup-\SCR_ysepinf+\SCR_corner)--++(-\SCR_corner,-\SCR_corner)--++(-\SCR_boxwd-2*\SCR_xsep+\SCR_corner*2,0)--++(-\SCR_corner,\SCR_corner)--++(0,\SCR_totht+\SCR_ysepsup+\SCR_ysepinf-\SCR_corner)--cycle
+ node[at=(origin),draw=none,anchor=base west,xshift=\SCR_xoffset+\SCR_xsep,yshift=\SCR_yoffset-\SCR_boxht-\SCR_corner-\SCR_ysepsup,text=\SCR_current_textcolor](txt\number\SCR_blocknum){\sffamily\bfseries#1\SCR_blockstrut};
+ \ifboolKV[\SCRname]{num blocks}
+ {\node[at=(origin),draw=none,anchor=base east,xshift=-\SCR_numsep,yshift=\SCR_yoffset-\SCR_boxht-\SCR_corner-\SCR_ysepsup](num){\skv_exparg\numblock{\number\SCR_blocknum}};
+ }
+ {}%
+ \advance\SCR_blocknum1
+ \draw[draw=\SCR_current_linedark,yshift=\SCR_yoffset,xshift=\SCR_xoffset](\SCR_boxwd+\SCR_xsep*2,-\SCR_corner)--++(0,-\SCR_totht-\SCR_ysepsup-\SCR_ysepinf+\SCR_corner)--++(-\SCR_corner,-\SCR_corner)--++(-\SCR_boxwd-2*\SCR_xsep+\SCR_corner*2,0);
+ \draw[draw=\SCR_current_linelight,yshift=\SCR_yoffset,xshift=\SCR_xoffset](\SCR_corner,-\SCR_corner*2-\SCR_ysepsup-\SCR_totht-\SCR_ysepinf+\SCR_corner)--++(-\SCR_corner,\SCR_corner)--++(0,\SCR_totht+\SCR_ysepsup+\SCR_ysepinf-\SCR_corner)--++(\SCR_corner,\SCR_corner)--++(\SCR_notch,0)--++(\SCR_corner,-\SCR_corner)--++(\SCR_notch,0)--++(\SCR_corner,\SCR_corner)--++(\SCR_boxwd+2*\SCR_xsep-\SCR_corner*4-\SCR_notch*2,0)--++(\SCR_corner,-\SCR_corner);
+ \advance\SCR_yoffset\dimexpr-\SCR_totht-\SCR_ysepsup-\SCR_ysepinf-\SCR_corner-\SCR_linewidth+\SCR_extraoffset\relax
+ \gdef\SCR_blockstop{1}%
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% dessine un bloc de départ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\SCR_initblock#1#2{%
+ \def\SCR_current_blockcolor{#1}%
+ \edef\SCR_current_fillcolor{\ifboolKV[\SCRname]{print}{\ifboolKV[\SCRname]{fill blocks}{SCR_fillgray}{none}}{\SCR_current_blockcolor}}%
+ \edef\SCR_current_linelight{\ifboolKV[\SCRname]{print}{SCR_linegray}{\SCR_current_blockcolor}!\SCR_contrast!white}%
+ \edef\SCR_current_linedark {\ifboolKV[\SCRname]{print}{SCR_linegray}{\SCR_current_blockcolor}!\SCR_contrast!black}%
+ \edef\SCR_current_textcolor{\ifboolKV[\SCRname]{print}{\useKV[\SCRname]{text color}}{white}}%
+ \setbox\SCR_box\hbox{\pgfinterruptpicture\color{white}\sffamily\bfseries#2\SCR_blockstrut\endpgfinterruptpicture}%
+ \edef\SCR_boxwd{\SCR_maxdim(\wd\SCR_box,\SCR_xsep+\SCR_initarclength+\SCR_em)}%
+ \edef\SCR_boxht{\the\ht\SCR_box}%
+ \edef\SCR_totht{\the\dimexpr\ht\SCR_box+\dp\SCR_box\relax}%
+ \draw[draw=\SCR_current_fillcolor,fill=\SCR_current_fillcolor,yshift=\SCR_yoffset,xshift=\SCR_xoffset]
+ (0,0)to[out=\SCR_initarcangle,in=180-\SCR_initarcangle](\SCR_xsep+\SCR_initarclength,0)--(\SCR_boxwd+2*\SCR_xsep-\SCR_corner,0)--++(\SCR_corner,-\SCR_corner)% ligne sup
+ --++(0,-\SCR_totht-\SCR_ysepsup-\SCR_ysepinf+\SCR_corner)--++(-\SCR_corner,-\SCR_corner)--++(-\SCR_boxwd-2*\SCR_xsep+\SCR_corner*4+\SCR_notch*2,0)--++(-\SCR_corner,-\SCR_corner)--++(-\SCR_notch,0)--++(-\SCR_corner,\SCR_corner)--++(-\SCR_notch,0)--++(-\SCR_corner,\SCR_corner)--++(0,\SCR_totht+\SCR_ysepsup+\SCR_ysepinf)--cycle
+ node[at=(origin),draw=none,anchor=base west,xshift=\SCR_xoffset+\SCR_xsep,yshift=\SCR_yoffset-\SCR_boxht-\SCR_corner-\SCR_ysepsup,text=\SCR_current_textcolor](txt\number\SCR_blocknum){\sffamily\bfseries#2\SCR_blockstrut};
+ \ifboolKV[\SCRname]{num blocks}
+ {\node[at=(origin),draw=none,anchor=base east,xshift=-\SCR_numsep,yshift=\SCR_yoffset-\SCR_boxht-\SCR_corner-\SCR_ysepsup](num){\skv_exparg\numblock{\number\SCR_blocknum}};}
+ {}%
+ \advance\SCR_blocknum1
+ \draw[draw=\SCR_current_linedark,yshift=\SCR_yoffset,xshift=\SCR_xoffset](\SCR_boxwd+\SCR_xsep*2,-\SCR_corner)--++(0,-\SCR_totht-\SCR_ysepsup-\SCR_ysepinf+\SCR_corner)--++(-\SCR_corner,-\SCR_corner)--++(-\SCR_boxwd-2*\SCR_xsep+\SCR_corner*4+\SCR_notch*2,0)--++(-\SCR_corner,-\SCR_corner)--++(-\SCR_notch,0)--++(-\SCR_corner,\SCR_corner)--++(-\SCR_notch,0);
+ \draw[draw=\SCR_current_linelight,yshift=\SCR_yoffset,xshift=\SCR_xoffset](\SCR_corner,-\SCR_corner-\SCR_ysepsup-\SCR_totht-\SCR_ysepinf)--++(-\SCR_corner,\SCR_corner)--++(0,\SCR_totht+\SCR_ysepsup+\SCR_ysepinf)--(0,0)to[out=\SCR_initarcangle,in=180-\SCR_initarcangle](\SCR_xsep+\SCR_initarclength,0)--(\SCR_boxwd+2*\SCR_xsep-\SCR_corner,0)--++(\SCR_corner,-\SCR_corner);
+ \advance\SCR_yoffset\dimexpr-\SCR_totht-\SCR_ysepsup-\SCR_ysepinf-\SCR_corner-\SCR_linewidth+\SCR_extraoffset\relax
+ \gdef\SCR_blockstop{0}%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% dessine un bloc de définition %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand*\initmoreblocks[1]{%
+ \setbox\SCR_box\hbox{\pgfinterruptpicture\color{white}\sffamily\bfseries#1\SCR_blockstrut\endpgfinterruptpicture}%
+ \edef\SCR_boxwd{\SCR_maxdim(\wd\SCR_box,\SCR_minwd+\SCR_em*2)}%
+ \edef\SCR_boxht{\the\ht\SCR_box}%
+ \edef\SCR_totht{\the\dimexpr\ht\SCR_box+\dp\SCR_box\relax}%
+ \def\SCR_current_blockcolor{SCRmoreblocks}%
+ \edef\SCR_current_fillcolor{\ifboolKV[\SCRname]{print}{\ifboolKV[\SCRname]{fill blocks}{SCR_fillgray}{none}}{\SCR_current_blockcolor}}%
+ \edef\SCR_current_linelight{\ifboolKV[\SCRname]{print}{SCR_linegray}{\SCR_current_blockcolor}!\SCR_contrast!white}%
+ \edef\current_linesurround{\ifboolKV[\SCRname]{print}{SCR_linegray!\SCR_contrast!white}{SCRmoreblocksurround}}%
+ \edef\SCR_current_linedark {\ifboolKV[\SCRname]{print}{SCR_linegray}{\SCR_current_blockcolor}!\SCR_contrast!black}%
+ \edef\SCR_current_textcolor{\ifboolKV[\SCRname]{print}{\useKV[\SCRname]{text color}}{white}}%
+ \draw[draw=\SCR_current_fillcolor,fill=\SCR_current_fillcolor,yshift=\SCR_yoffset,xshift=\SCR_xoffset]
+ (0,0)to[out=\SCR_moreblockarcangle,in=180-\SCR_moreblockarcangle](\SCR_boxwd+2*\SCR_xsep,0)% ligne sup
+ --++(0,-\SCR_totht-\SCR_ysepsup-\SCR_ysepinf)--++(-\SCR_corner,-\SCR_corner)--++(-\SCR_boxwd-2*\SCR_xsep+\SCR_corner*4+\SCR_notch*2,0)--++(-\SCR_corner,-\SCR_corner)--++(-\SCR_notch,0)--++(-\SCR_corner,\SCR_corner)--++(-\SCR_notch,0)--++(-\SCR_corner,\SCR_corner)--++(0,\SCR_totht+\SCR_ysepsup+\SCR_ysepinf)--cycle
+ node[at=(origin),draw=none,anchor=base west,xshift=\SCR_xoffset+\SCR_xsep,yshift=\SCR_yoffset-\SCR_boxht-\SCR_corner-\SCR_ysepsup,text=\SCR_current_textcolor](txt\number\SCR_blocknum){\sffamily\bfseries#1\SCR_blockstrut};
+ \ifboolKV[\SCRname]{num blocks}
+ {\node[at=(origin),draw=none,anchor=base east,xshift=-\SCR_numsep,yshift=\SCR_yoffset-\SCR_boxht-\SCR_corner-\SCR_ysepsup](num){\skv_exparg\numblock{\number\SCR_blocknum}};}
+ {}%
+ \advance\SCR_blocknum1
+ \draw[draw=\SCR_current_linedark,yshift=\SCR_yoffset,xshift=\SCR_xoffset](\SCR_boxwd+\SCR_xsep*2,0)--++(0,-\SCR_totht-\SCR_ysepsup-\SCR_ysepinf)--++(-\SCR_corner,-\SCR_corner)--++(-\SCR_boxwd-2*\SCR_xsep+\SCR_corner*4+\SCR_notch*2,0)--++(-\SCR_corner,-\SCR_corner)--++(-\SCR_notch,0)--++(-\SCR_corner,\SCR_corner)--++(-\SCR_notch,0);
+ \draw[draw=\SCR_current_linelight,yshift=\SCR_yoffset,xshift=\SCR_xoffset](\SCR_corner,-\SCR_corner-\SCR_ysepsup-\SCR_totht-\SCR_ysepinf)--++(-\SCR_corner,\SCR_corner)--++(0,\SCR_totht+\SCR_ysepsup+\SCR_ysepinf)--(0,0);
+ \draw[line width=1.5pt,draw=\current_linesurround,shorten <=-\SCR_linewidth,shorten >=-\SCR_linewidth](0,0)to[out=15,in=165](\SCR_boxwd+2*\SCR_xsep,0);
+ \advance\SCR_yoffset\dimexpr-\SCR_totht-\SCR_ysepsup-\SCR_ysepinf-\SCR_corner-\SCR_linewidth+\SCR_extraoffset\relax
+ \gdef\SCR_blockstop{0}%
+}
+\newcommand*\namemoreblocks[1]{%
+ \begin{tikzpicture}[baseline=(moreblocksdef.base)]
+ \def\SCR_ysepinf{2pt}\def\SCR_ysepsup{2pt}%
+ \edef\SCR_xsep{\the\dimexpr\SCR_em/2\relax}\edef\SCR_minwd{\the\dimexpr\SCR_corner*4+\SCR_notch*3-\SCR_xsep*2}%
+ \setbox\SCR_box\hbox{\pgfinterruptpicture\color{white}\sffamily\bfseries\SCR_blockstrut#1\endpgfinterruptpicture}%
+ \edef\SCR_boxwd{\SCR_maxdim(\wd\SCR_box,\SCR_minwd)}%
+ \edef\SCR_boxht{\the\ht\SCR_box}%
+ \edef\SCR_totht{\the\dimexpr\ht\SCR_box+\dp\SCR_box\relax}
+ \edef\SCR_current_textcolor{\ifboolKV[\SCRname]{print}{\useKV[\SCRname]{text color}}{white}}%
+ \edef\current_contourcolor{\ifboolKV[\SCRname]{print}{SCR_linegray!\SCR_contrast!white}{SCRmoreblockcontour}}%
+ \draw[draw=\current_contourcolor,line width=\SCR_linewidth*2]
+ (0,-\SCR_corner)--(\SCR_corner,0)--++(\SCR_notch,0)--++(\SCR_corner,-\SCR_corner)--++(\SCR_notch,0)--++(\SCR_corner,\SCR_corner)--++(\SCR_boxwd+2*\SCR_xsep-\SCR_corner*4-\SCR_notch*2,0)--++(\SCR_corner,-\SCR_corner)% ligne sup
+ --++(0,-\SCR_totht-\SCR_ysepsup-\SCR_ysepinf+\SCR_corner)--++(-\SCR_corner,-\SCR_corner)--++(-\SCR_boxwd-2*\SCR_xsep+\SCR_corner*4+\SCR_notch*2,0)--++(-\SCR_corner,-\SCR_corner)--++(-\SCR_notch,0)--++(-\SCR_corner,\SCR_corner)--++(-\SCR_notch,0)--++(-\SCR_corner,\SCR_corner)--cycle
+ node[draw=none,anchor=base west,xshift=\SCR_xsep,yshift=\SCR_yoffset-\SCR_boxht-\SCR_ysepsup,text=\SCR_current_textcolor](moreblocksdef){\sffamily\bfseries\SCR_blockstrut#1};
+ \end{tikzpicture}%
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% dessine un bloc de répétition ou test %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\SCR_blockloop#1#2#3#4#5{% #1=texte #2=instructions sup #3=instructions inf #4=boucle infinie (1 ou 0) #5=fleche de répétition (1 ou 0)
+ \edef\SCR_blocminheight{\dimexpr\SCR_loopblockheight+\SCR_ysepinf+\SCR_ysepsup+\SCR_corner\relax}% hauteur minimale d'un bloc normal
+ \setbox\SCR_box\hbox{\pgfinterruptpicture\color{white}\sffamily\bfseries#1\SCR_blockstrut\endpgfinterruptpicture}%
+ \SCR_csedef{SCR_txtloopwd\number\SCR_loopnest}{\SCR_maxdim(\wd\SCR_box,\SCR_minwd+\SCR_corner*4+\SCR_notch*2)}%
+ \SCR_csedef{SCR_txtloopht\number\SCR_loopnest}{\the\ht\SCR_box}%
+ \SCR_csedef{SCR_txtlooptotht\number\SCR_loopnest}{\the\dimexpr\ht\SCR_box+\dp\SCR_box\relax}%
+ \SCR_csedef{toploopx\number\SCR_loopnest}{\the\SCR_xoffset}% coordonnées du point nord-west
+ \SCR_csedef{toploopy\number\SCR_loopnest}{\the\SCR_yoffset}%
+ \SCR_csedef{blocnum\number\SCR_loopnest}{\number\SCR_blocknum}%
+ \advance\SCR_xoffset\SCR_loopblockwidth
+ \advance\SCR_yoffset\dimexpr-\SCR_corner-\SCR_ysepsup-\csname SCR_txtlooptotht\number\SCR_loopnest\endcsname-\SCR_ysepinf-\SCR_linewidth+\SCR_extraoffset\relax
+ \ifboolKV[\SCRname]{num blocks}
+ {\SCR_csdef{SCR_numblockif\number\SCR_loopnest}{\node[at=(origin),draw=none,anchor=base east,xshift=-\SCR_numsep,yshift=\csname toploopy\number\SCR_loopnest\endcsname-\csname SCR_txtloopht\number\SCR_loopnest\endcsname-\SCR_corner-\SCR_ysepsup](num){\skv_eearg\numblock{\csname blocnum\number\SCR_loopnest\endcsname}};}%
+ }
+ {\SCR_cslet{SCR_numblockif\number\SCR_loopnest}\empty}%
+ \advance\SCR_loopnest1
+ \advance\SCR_blocknum1
+ \advance\SCR_xoffset-\SCR_extraoffset
+ #2%
+ \advance\SCR_xoffset\SCR_extraoffset
+ \advance\SCR_loopnest-1
+ \expandafter\let\csname SCR_blockstopif_\number\SCR_loopnest\endcsname\SCR_blockstop
+ \SCR_csedef{bottomifx\number\SCR_loopnest}{\the\SCR_xoffset}%
+ \SCR_csedef{bottomify\number\SCR_loopnest}{\the\SCR_yoffset}%
+ \ifcat\relax\detokenize{#3}\relax\else% si instruction #3
+ \advance\SCR_yoffset\dimexpr-\SCR_blocminheight-\SCR_linewidth+\SCR_extraoffset\relax% épaisseur théorique de la branche "sinon"
+ \SCR_csedef{blocelsenum\number\SCR_loopnest}{\number\SCR_blocknum}%
+ \ifboolKV[\SCRname]{num blocks}
+ {\SCR_csdef{SCR_numblockelse\number\SCR_loopnest}{\node[at=(origin),draw=none,anchor=base east,xshift=-\SCR_numsep,yshift=\csname bottomify\number\SCR_loopnest\endcsname-\SCR_loopblockheight-\SCR_corner](num){\skv_eearg\numblock{\csname blocelsenum\number\SCR_loopnest\endcsname}};}
+ }
+ {\SCR_cslet{SCR_numblockelse\number\SCR_loopnest}\empty}%
+ \advance\SCR_loopnest1
+ \advance\SCR_blocknum1
+ \advance\SCR_xoffset-\SCR_extraoffset
+ #3%
+ \advance\SCR_xoffset\SCR_extraoffset
+ \advance\SCR_loopnest-1
+ \SCR_csedef{bottomelsex\number\SCR_loopnest}{\the\SCR_xoffset}%
+ \SCR_csedef{bottomelsey\number\SCR_loopnest}{\the\SCR_yoffset}%
+ \fi
+ \advance\SCR_yoffset by \dimexpr-\SCR_blocminheight-\SCR_linewidth+\SCR_extraoffset\relax% épaisseur de la branche du bas
+ \def\SCR_current_blockcolor{SCRcontrol}%
+ \edef\SCR_current_fillcolor{\ifboolKV[\SCRname]{print}{\ifboolKV[\SCRname]{fill blocks}{SCR_fillgray}{none}}{\SCR_current_blockcolor}}%
+ \edef\SCR_current_linelight{\ifboolKV[\SCRname]{print}{SCR_linegray}{\SCR_current_blockcolor}!\SCR_contrast!white}%
+ \edef\SCR_current_linedark {\ifboolKV[\SCRname]{print}{SCR_linegray}{\SCR_current_blockcolor}!\SCR_contrast!black}%
+ \edef\SCR_current_textcolor{\ifboolKV[\SCRname]{print}{\useKV[\SCRname]{text color}}{white}}%
+% ############## dessin du corps ##############
+ \draw[draw=none,fill=\SCR_current_fillcolor](\csname toploopx\number\SCR_loopnest\endcsname+\SCR_corner,\csname toploopy\number\SCR_loopnest\endcsname)--++(\SCR_notch,0)--++(\SCR_corner,-\SCR_corner)--++(\SCR_notch,0)--++(\SCR_corner,\SCR_corner)--++(\csname SCR_txtloopwd\number\SCR_loopnest\endcsname+2*\SCR_xsep-\SCR_corner*4-\SCR_notch*2,0)% ligne haut du titre boucle "--\__/---------"
+ --++(\SCR_corner,-\SCR_corner)--++(0,-\csname SCR_txtlooptotht\number\SCR_loopnest\endcsname-\SCR_ysepsup-\SCR_ysepinf+\SCR_corner)--++(-\SCR_corner,-\SCR_corner)% ligne est "\ + | + /"
+ --++(-\csname SCR_txtloopwd\number\SCR_loopnest\endcsname-2*\SCR_xsep+\SCR_corner*4+\SCR_notch*2+\SCR_loopblockwidth-\SCR_extraoffset_rtwo,0)--++(-\SCR_corner,-\SCR_corner)--++(-\SCR_notch+\SCR_extraoffset,0)--++(-\SCR_corner,\SCR_corner)--++(-\SCR_notch-\SCR_linewidth+\SCR_extraoffset_rtwo_mone,0)--++(-\SCR_corner,-\SCR_corner)% ligne sud "/--\__/---------"
+ --(\csname bottomifx\number\SCR_loopnest\endcsname-\SCR_linewidth,\csname bottomify\number\SCR_loopnest\endcsname+\SCR_corner)% descente gauche bloc "if"
+ \ifcat\relax\detokenize{#3}\relax\else% tracé de la branche du bas du else
+ --++(\SCR_corner,-\SCR_corner)% chanfrein"\" pour raccord sur ligne haut
+ \ifnum\csname SCR_blockstopif_\number\SCR_loopnest\endcsname=1
+ --++(\csname SCR_txtloopwd\number\SCR_loopnest\endcsname+2*\SCR_xsep-\SCR_corner*2-\SCR_loopblockwidth+\SCR_linewidth,0)% ligne haut de la barre else "--\__/---------"
+ \else
+ --++(\SCR_notch+\SCR_linewidth-\SCR_extraoffset_rtwo,0)--++(\SCR_corner,-\SCR_corner)--++(\SCR_notch+\SCR_extraoffset,0)--++(\SCR_corner,\SCR_corner)--++(\csname SCR_txtloopwd\number\SCR_loopnest\endcsname+2*\SCR_xsep-\SCR_corner*4-\SCR_notch*2-\SCR_loopblockwidth+\SCR_extraoffset_rtwo_mone,0)% ligne haut de la barre else "--\__/---------"
+ \fi
+ --++(\SCR_corner,-\SCR_corner)--++(0,-\SCR_loopblockheight-\SCR_ysepsup-\SCR_ysepinf+\SCR_corner)--++(-\SCR_corner,-\SCR_corner)--++(-\csname SCR_txtloopwd\number\SCR_loopnest\endcsname-2*\SCR_xsep+\SCR_corner*4+\SCR_notch*2+\SCR_loopblockwidth-\SCR_extraoffset_rtwo,0)--++(-\SCR_corner,-\SCR_corner)% ligne Est "\ + | + /"
+ --++(-\SCR_notch+\SCR_extraoffset,0)--++(-\SCR_corner,\SCR_corner)--++(-\SCR_notch-\SCR_linewidth+\SCR_extraoffset_rtwo_mone,0)--++(-\SCR_corner,-\SCR_corner)% ligne sud "/--\__/---------"
+ --(\csname bottomelsex\number\SCR_loopnest\endcsname-\SCR_linewidth,\csname bottomelsey\number\SCR_loopnest\endcsname+\SCR_corner)% descente gauche bloc "else"
+ \fi
+ --++(\SCR_corner,-\SCR_corner)% chanfrein "\" pour rejoindre haut de la ligne de fin
+ \ifnum\SCR_blockstop=1
+ --++(\csname SCR_txtloopwd\number\SCR_loopnest\endcsname+2*\SCR_xsep-\SCR_corner*2-\SCR_loopblockwidth+\SCR_linewidth,0)% ligne haut de la barre de fin "--\__/---------"
+ \else
+ --++(\SCR_notch+\SCR_linewidth-\SCR_extraoffset_rtwo,0)--++(\SCR_corner,-\SCR_corner)--++(\SCR_notch+\SCR_extraoffset,0)--++(\SCR_corner,\SCR_corner)--++(\csname SCR_txtloopwd\number\SCR_loopnest\endcsname+2*\SCR_xsep-\SCR_corner*4-\SCR_notch*2-\SCR_loopblockwidth+\SCR_extraoffset_rtwo_mone,0)% ligne haut de la barre de fin "--\__/---------"
+ \fi
+ --++(\SCR_corner,-\SCR_corner)--++(0,-\SCR_loopblockheight-\SCR_ysepsup-\SCR_ysepinf+\SCR_corner)--++(-\SCR_corner,-\SCR_corner)% ligne Est "\ + | + /"
+ \ifnum#4=1 %infiniteloop
+ --++(-\csname SCR_txtloopwd\number\SCR_loopnest\endcsname-2*\SCR_xsep+\SCR_corner*2,0)% ligne Sud "\---------------"
+ \else
+ --++(-\csname SCR_txtloopwd\number\SCR_loopnest\endcsname-2*\SCR_xsep+\SCR_corner*4+\SCR_notch*2,0)--++(-\SCR_corner,-\SCR_corner)--++(-\SCR_notch,0)--++(-\SCR_corner,\SCR_corner)--++(-\SCR_notch,0)% ligne Sud "\--\__/---------"
+ \fi
+ --++(-\SCR_corner,\SCR_corner)
+ --(\csname toploopx\number\SCR_loopnest\endcsname,\csname toploopy\number\SCR_loopnest\endcsname-\SCR_corner)--cycle;% remontée tout en haut et cycle
+ \advance\SCR_xoffset\dimexpr-\SCR_loopblockwidth\relax
+ % ############## dessin des lignes de relief ##############
+ \draw[draw=\SCR_current_linelight](\SCR_xoffset+\SCR_corner-\SCR_extraoffset+\SCR_extraoffset,\SCR_yoffset+\SCR_linewidth-\SCR_extraoffset)--++(-\SCR_corner,\SCR_corner)
+ --(\csname toploopx\number\SCR_loopnest\endcsname,\csname toploopy\number\SCR_loopnest\endcsname-\SCR_corner)--++(\SCR_corner,\SCR_corner)--++(\SCR_notch,0)--++(\SCR_corner,-\SCR_corner)--++(\SCR_notch,0)--++(\SCR_corner,\SCR_corner)--++(\csname SCR_txtloopwd\number\SCR_loopnest\endcsname+2*\SCR_xsep-\SCR_corner*4-\SCR_notch*2,0)--++(\SCR_corner,-\SCR_corner);% remontée gauche + ligne haut bandeau
+ \draw[draw=\SCR_current_linedark](\csname toploopx\number\SCR_loopnest\endcsname+\SCR_xsep*2+\csname SCR_txtloopwd\number\SCR_loopnest\endcsname,\csname toploopy\number\SCR_loopnest\endcsname-\SCR_corner)--++(0,-\csname SCR_txtlooptotht\number\SCR_loopnest\endcsname-\SCR_ysepsup-\SCR_ysepinf+\SCR_corner)--++(-\SCR_corner,-\SCR_corner)--++(-\csname SCR_txtloopwd\number\SCR_loopnest\endcsname-2*\SCR_xsep+\SCR_corner*4+\SCR_notch*2+\SCR_loopblockwidth-\SCR_extraoffset_rtwo,0)--++(-\SCR_corner,-\SCR_corner)--++(-\SCR_notch+\SCR_extraoffset,0)--++(-\SCR_corner,\SCR_corner)--++(-\SCR_notch-\SCR_linewidth+\SCR_extraoffset_rtwo_mone,0)--++(-\SCR_corner,-\SCR_corner)--(\csname bottomifx\number\SCR_loopnest\endcsname-\SCR_linewidth,\csname bottomify\number\SCR_loopnest\endcsname+\SCR_corner);
+ \draw[draw=\SCR_current_linelight](\csname bottomifx\number\SCR_loopnest\endcsname-\SCR_linewidth,\csname bottomify\number\SCR_loopnest\endcsname+\SCR_corner)--++(\SCR_corner,-\SCR_corner)
+ \ifnum\csname SCR_blockstopif_\number\SCR_loopnest\endcsname=1
+ --++(\csname SCR_txtloopwd\number\SCR_loopnest\endcsname+2*\SCR_xsep-\SCR_corner*2-\SCR_loopblockwidth+\SCR_linewidth,0)
+ \else
+ --++(\SCR_notch+\SCR_linewidth-\SCR_extraoffset_rtwo,0)--++(\SCR_corner,-\SCR_corner)--++(\SCR_notch+\SCR_extraoffset,0)--++(\SCR_corner,\SCR_corner)--++(\csname SCR_txtloopwd\number\SCR_loopnest\endcsname+2*\SCR_xsep-\SCR_corner*4-\SCR_notch*2-\SCR_loopblockwidth+\SCR_extraoffset_rtwo_mone,0)
+ \fi
+ --++(\SCR_corner,-\SCR_corner);
+ \edef\SCR_tempname{\ifcat\relax\detokenize{#3}\relax bottomif\else bottomelse\fi}%
+ \draw[draw=\SCR_current_linedark](\csname \SCR_tempname x\number\SCR_loopnest\endcsname+\SCR_xsep*2+\csname SCR_txtloopwd\number\SCR_loopnest\endcsname-\SCR_loopblockwidth,\csname \SCR_tempname y\number\SCR_loopnest\endcsname-\SCR_corner)--++(0,-\SCR_loopblockheight-\SCR_ysepsup-\SCR_ysepinf+\SCR_corner)--++(-\SCR_corner,-\SCR_corner)
+ \ifnum#4=1 %infiniteloop
+ --++(-\csname SCR_txtloopwd\number\SCR_loopnest\endcsname-2*\SCR_xsep+\SCR_corner*2,0)
+ \else
+ --++(-\csname SCR_txtloopwd\number\SCR_loopnest\endcsname-2*\SCR_xsep+\SCR_corner*4+\SCR_notch*2,0)--++(-\SCR_corner,-\SCR_corner)--++(-\SCR_notch,0)--++(-\SCR_corner,\SCR_corner)--++(-\SCR_notch,0)
+ \fi;% ligne Sud de la barre du bas
+ \node[at=(origin),draw=none,anchor=base west,xshift=\csname toploopx\number\SCR_loopnest\endcsname+\SCR_xsep,yshift=\csname toploopy\number\SCR_loopnest\endcsname-\csname SCR_txtloopht\number\SCR_loopnest\endcsname-\SCR_corner-\SCR_ysepsup,text=\SCR_current_textcolor](txt\csname blocnum\number\SCR_loopnest\endcsname){\sffamily\bfseries#1\SCR_blockstrut};
+ \csname SCR_numblockif\number\SCR_loopnest\endcsname% numérote ou pas le texte dans le bandeau du haut
+ \ifcat\relax\detokenize{#3}\relax\else
+ \node[at=(origin),draw=none,anchor=base west,xshift=\csname toploopx\number\SCR_loopnest\endcsname+\SCR_xsep,yshift=\csname bottomify\number\SCR_loopnest\endcsname-\SCR_loopblockheight-\SCR_corner,text=\SCR_current_textcolor](txt\csname blocelsenum\number\SCR_loopnest\endcsname){\sffamily\bfseries\useKV[\SCRname]{else word}};
+ \csname SCR_numblockelse\number\SCR_loopnest\endcsname% numérotation bloc else ou pas
+ \draw[draw=\SCR_current_linedark](\csname bottomifx\number\SCR_loopnest\endcsname+\SCR_xsep*2+\csname SCR_txtloopwd\number\SCR_loopnest\endcsname-\SCR_loopblockwidth,\csname bottomify\number\SCR_loopnest\endcsname-\SCR_corner)--++(0,-\SCR_loopblockheight-\SCR_ysepsup-\SCR_ysepinf+\SCR_corner)--++(-\SCR_corner,-\SCR_corner)--++(-\csname SCR_txtloopwd\number\SCR_loopnest\endcsname-2*\SCR_xsep+\SCR_corner*4+\SCR_notch*2+\SCR_loopblockwidth-\SCR_extraoffset_rtwo,0)--++(-\SCR_corner,-\SCR_corner)% ligne Est "\ + | + /"
+ --++(-\SCR_notch+\SCR_extraoffset,0)--++(-\SCR_corner,\SCR_corner)--++(-\SCR_notch-\SCR_linewidth+\SCR_extraoffset_rtwo_mone,0)--++(-\SCR_corner,-\SCR_corner)% ligne sud "/--\__/---------"
+ --(\csname bottomelsex\number\SCR_loopnest\endcsname-\SCR_linewidth,\csname bottomelsey\number\SCR_loopnest\endcsname+\SCR_corner);
+ \draw[draw=\SCR_current_linelight](\csname bottomelsex\number\SCR_loopnest\endcsname-\SCR_linewidth,\csname bottomelsey\number\SCR_loopnest\endcsname+\SCR_corner)--++(\SCR_corner,-\SCR_corner)% chanfrein "\" pour rejoindre haut de la ligne de fin
+ \ifnum\SCR_blockstop=1
+ --++(\csname SCR_txtloopwd\number\SCR_loopnest\endcsname+2*\SCR_xsep-\SCR_corner*2-\SCR_loopblockwidth+\SCR_linewidth,0)--++(\SCR_corner,-\SCR_corner);
+ \else
+ --++(\SCR_notch+\SCR_linewidth-\SCR_extraoffset_rtwo,0)--++(\SCR_corner,-\SCR_corner)--++(\SCR_notch+\SCR_extraoffset,0)--++(\SCR_corner,\SCR_corner)--++(\csname SCR_txtloopwd\number\SCR_loopnest\endcsname+2*\SCR_xsep-\SCR_corner*4-\SCR_notch*2-\SCR_loopblockwidth+\SCR_extraoffset_rtwo_mone,0)--++(\SCR_corner,-\SCR_corner);
+ \fi
+ \fi
+ \ifnum#5=1 %fleche
+ \edef\SCR_arrowcolor{\ifboolKV[\SCRname]{print}{SCR_flaggray}{SCRcontrol}!80!black}%
+ \draw[\SCR_arrowcolor,line width=1.5pt,-{Triangle[length=\SCR_scale*1.25ex,width=\SCR_scale*1.5ex]},rounded corners=1pt](\SCR_xoffset+\SCR_xsep*2+\csname SCR_txtloopwd\number\SCR_loopnest\endcsname-\SCR_ex*3.5+1pt,\SCR_yoffset+\SCR_linewidth+\SCR_ysepinf-1.25pt)--++(\SCR_loopblockheight,0)--++(0,\SCR_loopblockheight+\SCR_corner*0.5);
+ \edef\SCR_arrowcolor{\ifboolKV[\SCRname]{print}{SCR_flaggray}{white}}%
+ \draw[\SCR_arrowcolor,line width=\SCR_scale*1.5pt,-{Triangle[length=\SCR_scale*1.25ex,width=\SCR_scale*1.5ex]},rounded corners=1pt](\SCR_xoffset+\SCR_xsep*2+\csname SCR_txtloopwd\number\SCR_loopnest\endcsname-\SCR_ex*3.5,\SCR_yoffset+\SCR_linewidth+\SCR_ysepinf)--++(\SCR_loopblockheight,0)--++(0,\SCR_loopblockheight+\SCR_corner*0.5);
+ \fi
+ \xdef\SCR_blockstop{\ifnum#4=1 1\else0\fi}%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% dessine un ovale %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\SCR_ovalbox#1#2{% #1=couleur remplissage et contour #2=texte
+ \begingroup
+ \edef\SCR_linewidth{\the\dimexpr\useKV[\SCRname]{line width}\relax}%
+ \def\SCR_current_blockcolor{#1}%
+ \edef\SCR_current_fillcolor{\ifboolKV[\SCRname]{print}{\ifboolKV[\SCRname]{fill blocks}{SCR_fillgray}{none}}{\SCR_current_blockcolor}}%
+ \edef\SCR_current_linelight{\ifboolKV[\SCRname]{print}{SCR_linegray}{\SCR_current_blockcolor}!\the\numexpr100-\useKV[\SCRname]{contrast}\relax!white}%
+ \edef\SCR_current_linedark {\ifboolKV[\SCRname]{print}{SCR_linegray}{\SCR_current_blockcolor}!\the\numexpr100-\useKV[\SCRname]{contrast}\relax!black}%
+ \edef\SCR_current_textcolor{\ifboolKV[\SCRname]{print}{\useKV[\SCRname]{text color}}{white}}%
+ \begin{tikzpicture}[baseline=(x.base),x=1ex,y=1ex,inner ysep=0.25ex,inner xsep=0.1ex,line width=\SCR_linewidth]
+ \node[rounded rectangle,draw=none,fill=\SCR_current_fillcolor,text=\SCR_current_textcolor](x){\sffamily\bfseries\relax#2\SCR_ovalstrut};%
+ \draw[draw=\SCR_current_linedark](x.west)to[out=270,in=180](x.south west)--(x.south east)to[out=0,in=270](x.east);
+ \draw[draw=\SCR_current_linelight](x.west)to[out=90,in=180](x.north west)--(x.north east)to[out=0,in=90](x.east);
+ \end{tikzpicture}%
+ \endgroup
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% dessine un triangle de sélection %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\SCR_menuselectarrow{%
+ \tikz[baseline=-1ex,x=1ex,y=1ex,rounded corners=0pt]\draw[fill=\SCR_current_blockcolor!35!black,draw=none](0,0)--(1,0)--(0.5,-0.6)--cycle;%
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% dessine un menu %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand*\selectmenu[1]{% #1=texte du menu (sera composé et suivi du triangle de sélection)
+ \begin{tikzpicture}[anchor=base west,baseline=(textmenu.base west),outer sep=0pt,inner sep=0pt,minimum size=0pt]
+ \edef\SCR_current_fillcolor{\ifboolKV[\SCRname]{print}{\ifboolKV[\SCRname]{fill blocks}{SCR_fillgray!85!black}{none}}{\SCR_current_blockcolor!85!black}}%
+ \edef\SCR_current_linelight{\ifboolKV[\SCRname]{print}{SCR_linegray}{\SCR_current_blockcolor}!\the\numexpr100-\useKV[\SCRname]{contrast}\relax!white}%
+ \edef\SCR_current_linedark {\ifboolKV[\SCRname]{print}{SCR_linegray}{\SCR_current_blockcolor}!\the\numexpr100-\useKV[\SCRname]{contrast}\relax!black}%
+ \edef\SCR_current_textcolor{\ifboolKV[\SCRname]{print}{\useKV[\SCRname]{text color}}{white}}%
+ \node[rectangle,draw=none,inner xsep=0.2em,fill=\SCR_current_fillcolor,text=\SCR_current_textcolor](textmenu){\normalfont\sffamily#1\SCR_ovalstrut\hskip.6666em \SCR_menuselectarrow};
+ \draw[draw=\SCR_current_linedark,line width=\SCR_linewidth\ifdefined\SCR_scale/\SCR_scale\fi](textmenu.south west)--(textmenu.north west)--(textmenu.north east);
+ \draw[draw=\SCR_current_linelight,line width=\SCR_linewidth\ifdefined\SCR_scale/\SCR_scale\fi](textmenu.south west)--(textmenu.south east)--(textmenu.north east);
+ \end{tikzpicture}%
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% dessine un losange %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\SCR_boolbox#1#2{% #1=couleur #2=texte
+ \begingroup
+ \edef\SCR_previouskern{\number\lastkern}%
+ \edef\SCR_linewidth{\useKV[\SCRname]{line width}}%
+ \edef\_{\the \dimexpr .530330\dimexpr\SCR_linewidth\relax\relax}%
+ \def\SCR_current_blockcolor{#1}%
+ \edef\SCR_current_fillcolor{\ifboolKV[\SCRname]{print}{\ifboolKV[\SCRname]{fill blocks}{SCR_fillgray}{none}}{\SCR_current_blockcolor}}%
+ \edef\SCR_current_linelight{\ifboolKV[\SCRname]{print}{SCR_linegray}{\SCR_current_blockcolor}!\the\numexpr100-\useKV[\SCRname]{contrast}\relax!white}%
+ \edef\SCR_current_linedark {\ifboolKV[\SCRname]{print}{SCR_linegray}{\SCR_current_blockcolor}!\the\numexpr100-\useKV[\SCRname]{contrast}\relax!black}%
+ \edef\SCR_current_textcolor{\ifboolKV[\SCRname]{print}{\useKV[\SCRname]{text color}}{white}}%
+ \edef\SCR_boolsep{\useKV[\SCRname]{bool sep}}%
+ \begin{tikzpicture}[inner sep=0pt,outer sep=0pt,minimum size=0pt,baseline=(x.base),line width=0.75*\SCR_linewidth]
+ \setbox\SCR_box\hbox{\pgfinterruptpicture\sffamily\bfseries\SCR_ovalstrut\kern\SCR_thesentinelkern sp #2\xdef\SCR_endkern{\number\lastkern}\endpgfinterruptpicture}%
+ \edef\SCR_totheight{\the\dimexpr\ht\SCR_box+\dp\SCR_box\relax}\edef\SCR_boxwd{\the\wd\SCR_box}%
+ \edef\SCR_retainedwd{\the\dimexpr\SCR_boxwd\ifnum\SCR_endkern=\SCR_thesentinelkern-\SCR_totheight/2+\SCR_boolsep*2\fi+\_*2\relax}%
+ \draw[draw=none,use as bounding box](\ifnum\SCR_previouskern=\SCR_thesentinelkern\space -\SCR_boolsep\else -\SCR_totheight/2\fi,-\SCR_boolsep)rectangle(\SCR_retainedwd+\SCR_totheight/2,\SCR_totheight+\SCR_boolsep);%
+ \draw[fill=\SCR_current_fillcolor,draw=none](\SCR_boolsep,-\SCR_boolsep)--++(\SCR_retainedwd-\SCR_boolsep*2,0)--++(\SCR_totheight/2+\SCR_boolsep,\SCR_totheight/2+\SCR_boolsep)--++(-\SCR_totheight/2-\SCR_boolsep,\SCR_totheight/2+\SCR_boolsep)--++(-\SCR_retainedwd+\SCR_boolsep*2,0)--++(-\SCR_totheight/2-\SCR_boolsep,-\SCR_totheight/2-\SCR_boolsep)--cycle;%
+ \draw[\SCR_current_linedark](\SCR_retainedwd+\SCR_totheight/2,\SCR_totheight/2)--(\SCR_retainedwd-\SCR_boolsep,-\SCR_boolsep)--(\SCR_boolsep,-\SCR_boolsep)
+ \ifboolKV[\SCRname]{print}{--(-\SCR_totheight/2,\SCR_totheight/2)}{};
+ \draw[\SCR_current_linelight](-\SCR_totheight/2,\SCR_totheight/2)--(\SCR_boolsep,\SCR_boolsep+\SCR_totheight)--(\SCR_retainedwd-\SCR_boolsep,\SCR_boolsep+\SCR_totheight)
+ \ifboolKV[\SCRname]{print}{--(\SCR_retainedwd+\SCR_totheight/2,\SCR_totheight/2)}{};
+ \node[inner sep=0pt,outer sep=0pt,minimum size=0pt,draw=none,anchor=south west,text=\SCR_current_textcolor](x){\sffamily\bfseries\SCR_ovalstrut\kern\_\kern\SCR_thesentinelkern sp #2\kern\_};%
+ \end{tikzpicture}%
+ \endgroup
+ \kern\SCR_thesentinelkern sp
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% environnement scratch %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newenvironment{scratch}[1][]
+ {\skv_ifempty{#1}{}{\setscratch{#1}}%
+ \sffamily% pas de \normalsize ici, bugfix 1.4
+ \edef\SCR_ex{\the\dimexpr1ex\relax}% valeur d'1ex pour le tracé de la flèche
+ \edef\SCR_em{\the\dimexpr1em\relax}%
+ \SCR_normalizedim\SCR_corner corner[\SCR_ex/3,\SCR_ex]%
+ \SCR_normalizedim\SCR_notch notch[\SCR_em/3,\SCR_em*3]%
+ \SCR_normalizedec\SCR_scale scale[0.2,5]% échelle
+ \SCR_normalizedim\SCR_xsep x sep[0pt,\SCR_em]%
+ \SCR_normalizedim\SCR_ysepsup y sepsup[1pt,\SCR_ex*3]%
+ \SCR_normalizedim\SCR_ysepinf y sepinf[1pt,\SCR_ex*3]%
+ \SCR_normalizedim\SCR_linewidth line width[0pt,5pt]% épaisseur des lignes soumises à l'échelle
+ \SCR_normalizedim\SCR_loopblockwidth loop width[3pt,\SCR_em*3]%
+ \SCR_normalizedim\SCR_loopblockheight loop height[3pt,\SCR_ex*3]%
+ \SCR_normalizedec\SCR_initarcangle init arcangle[20,40]%
+ \SCR_normalizedim\SCR_initarclength init arclength[\SCR_em*3,\SCR_em*8]%
+ \edef\SCR_contrast{\number\numexpr100-\ifnum\useKV[\SCRname]{contrast}<0 0\else\ifnum\useKV[\SCRname]{contrast}>100 100\else\useKV[\SCRname]{contrast}\fi\fi\relax}%
+ \SCR_normalizedec\SCR_moreblockarcangle moreblock arcangle[10,20]%
+ \SCR_normalizedim\SCR_numsep num sep[0pt,\SCR_em*3/2]%
+ \edef\SCR_extraoffset{\the\dimexpr\SCR_linewidth-\useKV[\SCRname]{line width}\relax}% décalage supplémentaire pour tenir compte de l'échelle = (ech-1)*linewidth
+ \edef\SCR_extraoffset_rtwo{\the\dimexpr1.41421\dimexpr\SCR_extraoffset\relax\relax}% décalage * racine 2
+ \edef\SCR_extraoffset_rtwo_mone{\the\dimexpr.41421\dimexpr\SCR_extraoffset\relax\relax}% décalage * (racine 2 -1)
+ \edef\SCR_minwd{\the\dimexpr\SCR_corner*4+\SCR_notch*3-\SCR_xsep*2}%
+ \edef\SCR_valign{\useKV[\SCRname]{baseline}}%
+ \SCR_blocknum\number\numexpr\useKV[\SCRname]{num start}\relax\relax
+ \setbox\SCR_box\hbox{\SCR_blockstrut}\edef\SCR_blockstruttotht{\the\dimexpr\ht\SCR_box+\dp\SCR_box\relax}% haut totale du strut
+ \def\turnleft{\turn_arrow{}}\def\turnright{\turn_arrow{xscale=-1}}%
+ \let\blockmove \SCR_blockmove \let\blocklook \SCR_blocklook
+ \let\blocksound \SCR_blocksound \let\blocklist \SCR_blocklist
+ \let\blockpen \SCR_blockpen \let\blockvariable \SCR_blockvariable
+ \let\blockevent \SCR_blockevent \let\blockinit \SCR_blockinit
+ \let\blockrepeat \SCR_blockrepeat \let\blockinfloop \SCR_blockinfloop
+ \let\blockifelse \SCR_blockifelse \let\blockif \SCR_blockif
+ \let\blockinitclone\SCR_blockinitclone \let\blockcontrol \SCR_blockcontrol
+ \let\blocksensing \SCR_blocksensing \let\blockmoreblocks\SCR_blockmoreblocks
+ \SCR_xoffset0pt \SCR_yoffset0pt
+ \catcode`\:12 \catcode`\;12 \catcode`\!12 \catcode`\?12 \catcode`\_12
+ \csname skv_\if c\expandafter\SCR_firsttonil\SCR_valign c\_nil first\else second\fi\endcsname
+ {\def\SCR_scratchend{\egroup\egroup$}$\vcenter\bgroup\hbox\bgroup\begin{tikzpicture}[}
+ {\let\SCR_scratchend\relax\begin{tikzpicture}[baseline=(txt\SCR_valign.base),}
+ transform shape,line width=\SCR_linewidth,inner sep=0pt,outer sep=0pt,minimum size=0pt,line cap=round,scale=\SCR_scale]
+ \node[shape=coordinate](origin){};% origine
+ }
+ {\end{tikzpicture}\SCR_scratchend}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% menu mouvement %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\definecolor{SCRmove}{rgb}{0.2902,0.4235,0.8314}
+\def\SCR_blockmove{\SCR_normalblock{SCRmove}}
+\newcommand*\ovalmove{\SCR_ovalbox{SCRmove}}
+\newcommand*\ovalnum[1]{% ovale blanc qui doit contenir un _nombre_
+ \begin{tikzpicture}[baseline=(x.base),x=1ex,y=1ex,minimum size=2.5ex,inner ysep=1pt,inner xsep=0.15em,outer sep=0pt,line width={\useKV[\SCRname]{line width}}]
+ \node[rounded rectangle,draw={\ifboolKV[\SCRname]{print}{gray}{none}},fill=white,text=black](x){\vphantom{0}\let\select\selectarrownum\sffamily#1};%
+ \end{tikzpicture}%
+}
+\def\turn_arrow#1{\tikz[baseline=.25ex,x=6.5ex,y=6.5ex,#1]\draw[-{Triangle[angle=45:0.5ex 0.5ex,bend]},line width=.3333ex](0,0) arc[start angle=-80,end angle=190,radius=1ex];}
+\newcommand*\selectarrownum{% le petit triangle vers le bas à côté d'un _nombre_
+ \unskip\hskip0.125em \tikz[baseline=-1.25ex,x=1ex,y=1ex,rounded corners=0pt]\draw[fill=black!70,draw=none](0,0)--(1,0)--(0.5,-0.6)--cycle;
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% menu apparence %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\definecolor{SCRlook}{rgb}{0.5412,0.3333,0.8431}
+\def\SCR_blocklook{\SCR_normalblock{SCRlook}}
+\newcommand*\ovallook{\SCR_ovalbox{SCRlook}}
+\newcommand*\txtbox[1]{% #1=texte dans un rectangle blanc
+ \begin{tikzpicture}[inner xsep=0.2em,inner ysep=0pt,baseline=(text.base west)]
+ \node[rectangle,fill=white,text=black](text){\normalfont\sffamily\SCR_ovalstrut#1};
+ \draw[draw=white!80!black,line width=0.5pt](text.south west)--(text.north west)--(text.north east);
+ \ifboolKV[\SCRname]{print}
+ {\draw[draw=white!80!black,line width=0.5pt](text.south west)--(text.south east)--(text.north east); }
+ {}%
+ \end{tikzpicture}%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% menu son %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\definecolor{SCRsound}{rgb}{0.7333,0.2588,0.7647}
+\def\SCR_blocksound{\SCR_normalblock{SCRsound}}
+\newcommand*\ovalsound{\SCR_ovalbox{SCRsound}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% menu stylo %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\definecolor{SCRpen}{rgb}{0.0549,0.6039,0.4235}
+\def\SCR_blockpen{\SCR_normalblock{SCRpen}}
+\newcommand*\ovalpen{\SCR_ovalbox{SCRpen}}
+\newcommand*\squarecolor[1]{% #1 est la couleur
+ \begin{tikzpicture}[x=1ex,y=1ex,baseline=.33333ex]
+ \colorlet{__tempcolor}{#1}%
+ \draw[fill=__tempcolor,draw=none](0,0) rectangle (2,2);
+ \draw[draw=__tempcolor!80!black](0,0)--(0,2)--(2,2);
+ \draw[draw=__tempcolor!80!white](0,0)--(2,0)--(2,2);
+ \end{tikzpicture}%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% menu données %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\definecolor{SCRvariable}{rgb}{0.9333,0.4902,0.0863}
+\definecolor{SCRlist}{rgb}{0.8,0.3569,0.1333}
+\def\SCR_blockvariable{\SCR_normalblock{SCRvariable}}
+\def\SCR_blocklist{\SCR_normalblock{SCRlist}}
+\newcommand*\ovalvariable{\SCR_ovalbox{SCRvariable}}
+\newcommand*\ovallist{\SCR_ovalbox{SCRlist}}
+\newcommand*\boollist{\SCR_boolbox{SCRlist}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% menu événement %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\definecolor{SCRevent}{rgb}{0.7843,0.5137,0.1882}
+\def\SCR_blockevent{\SCR_normalblock{SCRevent}}
+\def\SCR_blockinit{\SCR_initblock{SCRevent}}
+\definecolor{greenflag}{rgb}{0.2471,0.5529,0.0824}
+\newcommand*\greenflag{%
+ \tikz[baseline=2pt]\draw[fill={\ifboolKV[\SCRname]{print}{SCR_flaggray}{greenflag}},draw=none,scale=.4,rotate=-12]
+ (-.1,0)--(-.1,1)--(0,1)--(0,0.95)..controls(.5,1.2) and (.7,.8)..(1,1)..controls(.95,.7)..
+ (1,.4)..controls(.7,.3)and(.45,.6)..(0,.4)--(0,0)--cycle; % espace ici
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% menu contrôle %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\definecolor{SCRcontrol}{rgb}{0.8824,0.6627,0.1020}
+\def\SCR_blockrepeat#1#2{\SCR_blockloop{#1}{#2}{}01}
+\def\SCR_blockinfloop#1#2{\SCR_blockloop{#1}{#2}{}11}% 1= texte #2=instructions dans la boucle
+\def\SCR_blockifelse#1#2#3{\SCR_blockloop{#1}{#2}{#3}00}% 1= texte #2=instructions dans la boucle
+\def\SCR_blockif#1#2{\SCR_blockifelse{#1}{#2}{}}
+\def\SCR_blockinitclone{\SCR_initblock{SCRcontrol}}
+\def\SCR_blockcontrol{\SCR_normalblock{SCRcontrol}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% menu capteur %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\definecolor{SCRsensing}{rgb}{0.1725,.6471,0.8863}
+\definecolor{SCRoperator}{rgb}{0.3608,0.7176,0.0706}
+\newcommand*\ovalsensing{\SCR_ovalbox{SCRsensing}}
+\def\SCR_blocksensing{\SCR_normalblock{SCRsensing}}
+\newcommand*\boolsensing{\SCR_boolbox{SCRsensing}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% menu opérateur %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand*\ovaloperator{\SCR_ovalbox{SCRoperator}}
+\newcommand*\booloperator{\SCR_boolbox{SCRoperator}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% menu ajouter bloc %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\definecolor{SCRmoreblocks}{rgb}{0.3882,0.1765,0.6}
+\definecolor{SCRmoreblocksurround}{rgb}{0.5569,0.1804,0.7608}
+\definecolor{SCRmoreblockcontour}{rgb}{0.5098,0.3412,0.6784}
+\definecolor{SCRmoreblocksaux}{rgb}{0.3504,0.2784,0.6941}
+\newcommand*\ovalmoreblocks{\SCR_ovalbox{SCRmoreblocksaux}}
+\def\SCR_blockmoreblocks{\SCR_normalblock{SCRmoreblocks}}
+\newcommand*\boolmoreblocks{\SCR_boolbox{SCRmoreblocksaux}}
+\SCR_restorecatcode
+\endinput
+
+Versions :
+ _____________________________________________________________________________
+| Version | Date | Changements |
+|---------+------------+------------------------------------------------------|
+| 0.1 | 16/05/2017 | Première version |
+|---------+------------+------------------------------------------------------|
+| 0.2 | 28/05/2017 | Ajout des options "constast", "print" ainsi que |
+| | | les options relatives à "print" |
+|---------+------------+------------------------------------------------------|
+| 0.3 | 08/08/2017 | - Correction d'une erreur dans le tracé des lignes |
+| | | de contraste des "boolbox" |
+| | | - Correction d'un bug dans \resetscratch |
+| | | - Correction d'un bug dans \txtbox |
+| | | - Appel à simplekv pour les clés/valeurs |
+| | | - Ajout de la clé "scale" |
+|---------+------------+------------------------------------------------------|
+| 0.31 | 15/09/2017 | - Correction d'un bug dans \SCR_ovalbox qui |
+| | | s'exécute maintenant dans un groupe semi-simple |
+| | | pour rendre locale l'assignation à |
+| | | \SCR_current_fillcolor |
+| | | - Correction d'un bug dans le tracé des lignes de |
+| | | relief dans \SCR_ovalbox |
+|---------+------------+------------------------------------------------------|
+| 0.32 | 20/09/2017 | - le node de \selectmenu est désormais "rectangle" |
+| | | - la couleur de \ovallist est désormais correcte |
+|---------+------------+------------------------------------------------------|
+| 0.33 | 30/12/2017 | - correction des bugs d'échelle avec l'option scale. |
+|---------+------------+------------------------------------------------------|
+| 0.4 | 08/04/2018 | - numérotation des blocs possible |
+| | | - choix de la ligne de base du dessin sur un bloc au |
+| | | choix ou bien centré avec \vcenter |
+| | | - ajustement automatique si la largeur du texte d'un |
+| | | bloc est trop courte pour faire un dessin de bloc |
+| | | correct |
+| | | - correction du \normalsize en trop |
+| | | - nouvelle clé «notch» : largeur des encoches |
+| | | - clé secrète pour correction dans les losanges |
+| | | - nettoyage du code |
+|---------+------------+------------------------------------------------------|
+| 0.41 | 19/02/2019 | - l'extension est obsolète et n'est plus maintenue |
+|---------+------------+------------------------------------------------------| \ No newline at end of file
diff --git a/obsolete/macros/latex/contrib/subfigure/Makefile b/obsolete/macros/latex/contrib/subfigure/Makefile
new file mode 100644
index 0000000000..57a584fef9
--- /dev/null
+++ b/obsolete/macros/latex/contrib/subfigure/Makefile
@@ -0,0 +1,123 @@
+PACKAGE = subfigure
+########################################################################
+## LaTeX2e Makefile
+##
+## Update the following defines for your local configuration,
+##
+CONTRIB = /usr/local/lib/texmf/tex/subfigure
+##
+A2PS = a2ps
+CP = cp
+DVIPS = dvips -t letter
+GZIP = gzip
+LATEX = latex
+MAKEINDEX = makeindex
+PDFLATEX = pdflatex
+PS2PDF = ps2pdf
+RM = rm
+TAR = tar
+########################################################################
+## make [all] Generates the style (.sty) file, the doc and
+## test files (.ps) and cleans up the directory.
+## make [un]install Install or uninstall the style (.sty) file from
+## the CONTRIB area.
+## make [very]clean Clean out various auxillary files. "veryclean"
+## cleans out more stuff.
+########################################################################
+## make dvi Generate the *.dvi version of the documentation.
+## make [full]ps Generate the documentation. The "fullps" version
+## adds the change log and the cross-references.
+## make idx Generate the change log and the cross-references
+## (for fullps -- requires MAKEINDEX).
+## make sty Generate the style (.sty) file.
+## make pdf Generate the *.pdf version of the documentation.
+########################################################################
+## make test Runs test program(s).
+## make distribtion Builds a distribution (.tar.gz) file.
+########################################################################
+
+all: pdf test clean
+
+install: sty
+ $(CP) $(PACKAGE).sty $(CONTRIB)
+uninstall: ; -$(RM) -f $(CONTRIB)/$(PACKAGE).sty
+clean: ; -$(RM) -f *.dvi *.log *.aux *.lof *.lot *.lom *.toc
+ -$(RM) -f *.idx *.ind *.glo *.gls *.ilg *.out *~
+veryclean: clean
+ -$(RM) -f *.sty *.cls *.ps *.pdf *.gz *pk ltxdoc.cfg
+
+dvi: $(PACKAGE).dvi
+fullps: dvi idx ps
+idx: $(PACKAGE).ind $(PACKAGE).gls
+ $(LATEX) $(PACKAGE).dtx
+ $(LATEX) $(PACKAGE).dtx
+ps: $(PACKAGE).ps
+sty: $(PACKAGE).sty
+pdf: fullps
+ $(PS2PDF) $(PACKAGE).ps > $(PACKAGE).pdf
+
+test: test1 test2 test3 test4 test5
+
+distribution: ; mkdir $(PACKAGE)
+ $(CP) -p README Makefile $(PACKAGE).pdf $(PACKAGE)
+ $(CP) -p $(PACKAGE).dtx $(PACKAGE).ins $(PACKAGE)
+ $(CP) -p test*.tex $(PACKAGE)
+ $(TAR) -cvf $(PACKAGE).tar ./$(PACKAGE)
+ $(RM) -rf $(PACKAGE)
+ $(GZIP) -9 $(PACKAGE).tar
+
+$(PACKAGE).aux: $(PACKAGE).dtx $(PACKAGE).sty
+ $(LATEX) $(PACKAGE).dtx
+ $(LATEX) $(PACKAGE).dtx
+
+$(PACKAGE).dvi: $(PACKAGE).dtx $(PACKAGE).sty $(PACKAGE).aux
+ $(LATEX) $(PACKAGE).dtx
+ $(LATEX) $(PACKAGE).dtx
+ $(LATEX) $(PACKAGE).dtx
+
+$(PACKAGE).glo: $(PACKAGE).dtx $(PACKAGE).sty
+ $(LATEX) $(PACKAGE).dtx
+
+$(PACKAGE).gls: $(PACKAGE).glo
+ -$(MAKEINDEX) -s gglo.ist -o $(PACKAGE).gls $(PACKAGE).glo
+
+$(PACKAGE).idx: $(PACKAGE).dtx $(PACKAGE).sty
+ $(LATEX) $(PACKAGE).dtx
+
+$(PACKAGE).ind: $(PACKAGE).idx
+ -$(MAKEINDEX) -s gind.ist $(PACKAGE).idx
+
+$(PACKAGE).ps: $(PACKAGE).dvi
+ $(DVIPS) -o $(PACKAGE).ps $(PACKAGE).dvi
+
+$(PACKAGE).sty: $(PACKAGE).dtx $(PACKAGE).ins
+ $(LATEX) $(PACKAGE).ins
+
+test1: $(PACKAGE).sty
+ $(LATEX) test.tex
+ $(LATEX) test.tex
+ $(LATEX) test.tex
+ $(DVIPS) -o test.ps test.dvi
+
+test2: $(PACKAGE).sty
+ $(LATEX) test2.tex
+ $(LATEX) test2.tex
+ $(DVIPS) -o test2.ps test2.dvi
+
+test3: $(PACKAGE).sty
+ $(LATEX) test3.tex
+ $(LATEX) test3.tex
+ $(LATEX) test3.tex
+ $(DVIPS) -o test3.ps test3.dvi
+
+test4: $(PACKAGE).sty
+ $(PDFLATEX) test4.tex
+ $(PDFLATEX) test4.tex
+ $(PDFLATEX) test4.tex
+
+test5: $(PACKAGE).sty
+ $(LATEX) test5.tex
+ $(LATEX) test5.tex
+ $(A2PS) -o test5a.ps test5.log
+ $(DVIPS) -o test5b.ps test5.dvi
+
diff --git a/obsolete/macros/latex/contrib/subfigure/README b/obsolete/macros/latex/contrib/subfigure/README
new file mode 100644
index 0000000000..12a329c117
--- /dev/null
+++ b/obsolete/macros/latex/contrib/subfigure/README
@@ -0,0 +1,65 @@
+README
+------
+
+ The subfigure package has been superseded by the subfig package.
+ The reason for the name change is that the new subfig package is not
+ exactly backward compatible with this package; although, it comes
+ with a configuration file that *almost* allows backward
+ compatibility, the difference is that exact spacing and layout of
+ the subfloats are not preserved.
+
+ The newer (subfig) package is an improvement over this package and
+ although this package will continue to be supported, it will no longer
+ be updated.
+
+This directory contains version 2.1.5 of the subfigure package.
+Use `make' to extract the subfigure package and run the local tests.
+
+MANIFEST:
+---------
+Makefile UNIX makefile to extract the subfigure package
+ and related material.
+README This file.
+subfigure.dtx The documented subfigure package.
+subfigure.ins The subfigure package installation file.
+subfigure.pdf Subfigure package documentation (as PDF).
+test.tex Test one: Mixed tables and figures.
+test2.tex Test two: Check for extra space around figure
+test3.tex Test four: Test of optional args and \subref.
+test4.tex Test four: Test of interaction with hyperref.
+test5.tex Test five: Test for class \let of \endfigure, etc.
+
+FILES AFTER `make':
+-------------------
+Makefile UNIX makefile to extract the subfigure package
+ and related material.
+README This file.
+ltxdoc.cfg Configuration file to print change history and
+ index on the subfigure package documentation.
+subfigure.cfg Set the preferred options for subfigure version 2.1.
+subfigure.dtx The documented subfigure package.
+subfigure.ins The subfigure package installation file.
+subfigure.pdf Subfigure package documentation (as PDF).
+subfigure.ps Subfigure package documentation (as PostScript).
+subfigure.sty The subfigure package
+test.ps Results of test one.
+test.tex Test one: Mixed tables and figures.
+test2.ps Results of test two.
+test2.tex Test two: Check for extra space around figure
+test3.ps Results of test three.
+test3.tex Test four: Test of optional args and \subref.
+test4.pdf Results of test four.
+test4.tex Test four: Test of interaction with hyperref.
+test5.tex Test five: Test for class \let of \endfigure, etc.
+test5a.ps Results of test five (log file).
+test5b.ps Results of test five (output).
+
+NOTES:
+------
+
+By default, the subfigure.sty file acts like the older versions of the
+subfigure package. To make the preferred options default move the
+subfigure.cfg file into the standard TEXINPUTS path along with the
+subfigure.sty file. This reduces the whitespace around the subfigures
+and subtables and sets the table style to have the captions and
+subcaptions preceed the table and subtables.
diff --git a/obsolete/macros/latex/contrib/subfigure/subfigure.dtx b/obsolete/macros/latex/contrib/subfigure/subfigure.dtx
new file mode 100644
index 0000000000..e51196dcde
--- /dev/null
+++ b/obsolete/macros/latex/contrib/subfigure/subfigure.dtx
@@ -0,0 +1,3940 @@
+% \iffalse % subfigure.dtx
+% Subfigure/subtable macros for use with the LaTeX figure/table environments.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Copyright (C) 1986-2002 Steven Douglas Cochran
+%
+% The subfigure package is free software; it may be distributed under
+% the conditions of the LaTeX Project Public License, either version 1.1
+% of this license or (at your option) any later version. The latest
+% version of this license is in:
+% http://www.latex-project.org/lppl.txt
+% and version 1.1 or later is part of all distributions of LaTeX version
+% 1999/06/01 or later.
+%
+% The captcont package 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
+% LaTeX Project Public License for more details.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% @LaTeX-style-file{
+%% author = "Steven Douglas Cochran",
+%% version = "2.1.5",
+%% date = "2005/04/29",
+%% time = "14:24:08",
+%% filename = "subfigure.sty",
+%% address = "Digital Mapping Laboratory, School of Computer Science
+%% Carnegie-Mellon University, 5000 Forbes Avenue
+%% Pittsburgh, PA 15213-3890, USA",
+%% telephone = "+1 412.268.5654",
+%% fax = "+1 412.268.5576",
+%% email = "cochran@ieee.org",
+%% codetable = "ISO/ASCII",
+%% keywords = "LaTeX, float, figure, table, captcont",
+%% supported = "yes",
+%% abstract = "LaTeX package for providing support for the
+%% inclusion of small, `sub', figures and tables. It
+%% simplifies the positioning, captioning and
+%% labeling of them within a single figure or table
+%% environment. In addition, this package allows
+%% such subcaptions to be written to the List of
+%% Figures or List of tables if desired."
+%% }
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%<*driver>
+\NeedsTeXFormat{LaTeX2e}[1994/12/01]
+\ProvidesFile{subfigure.dtx}
+\documentclass{ltxdoc}
+\usepackage[tight,TABTOPCAP]{subfigure}[2005/04/29]
+\setlength\hfuzz{100pt}
+\setlength\vfuzz{100pt}
+\clubpenalty=10000
+\widowpenalty=10000
+\displaywidowpenalty=5000
+\brokenpenalty=5000
+\begin{document}
+ \DocInput{subfigure.dtx}
+\end{document}
+%</driver>
+%
+%<*ltxdoc>
+\AtBeginDocument{
+% \OnlyDescription % comment out for implementation details
+ \EnableCrossrefs
+ \RecordChanges
+ \CodelineIndex}
+\AtEndDocument{
+ \PrintChanges
+ \PrintIndex}
+%</ltxdoc>
+%
+% \fi
+% \catcode`\^=14 ^^A We will use a ^ for a comment rather than ^^A.
+% \newcommand*{\Lopt}[1]{\textsf{#1}} ^ Package options
+% \newcommand*{\Lfile}[1]{\texttt{#1}} ^ File names
+% \newcommand*{\Lpack}[1]{\textsf{#1}} ^ Package names
+% \newcommand*{\Lenv}[1]{\texttt{#1}} ^ Environment names
+% \newcommand*{\Lcount}[1]{\textsl{\small#1}} ^ Counter names
+% \newcommand*{\Lif}[1]{\textsc{\bf#1}} ^ \if names
+% ^ NOTE: Hacks added to make the final format are marked ``^finalhack''.
+%
+% \changes{v1.0}{05 Mar 1986}{Created.}
+%
+% \changes{v1.1}{02 Nov 1988}{Initial revision.}
+%
+% \changes{v1.2}{30 Aug 1989}{Added a separate bottom margin and
+% expanded the comments.}
+%
+% \changes{v1.3}{22 Oct 1990}{Changed test for empty subcaption inside
+% of \cmd{\@subfigure} to compare tokens and not the subcaption vs.\
+% \cmd{\@empty}. The former (incorrect) test caused an error when the
+% first two letters of the subcaption were the same.}
+%
+% \changes{v1.4}{27 Jun 1992}{Added a hack to allow the \cmd{\label}
+% command to be used within the body of the subfigure giving a
+% reference label in the form \cmd{\arabic{thefigure}\thesubfigure}.
+% Added standard file header for style.}
+%
+% \changes{v1.5}{11 Aug 1992}{Fixed a bug which caused a problem with
+% subcaptions that contained expressions like \cmd{\sqrt}; This was
+% pointed out by Tom Scavo (scavo\@cie.uoregon.edu). A separate bug
+% was fixed which caused different sized subcaptions to be misaligned;
+% This problem was pointed out by Simon Marshall
+% (S.Marshal\@Hull.ac.uk). Also cleaned up the code a mite and
+% {\bf changed} the figure spacing so that if no optional section is
+% given, then the figure is only followed by \cmd{\subfigbottomskip}
+% and not that plus $(\cmd{\subfigcapskip}+\cmd{\strut}\hbox{height})$.
+% This should make it easier to adjust spacing as desired.}
+%
+% \changes{v1.6}{13 May 1993}{Changed to use the \cmd{\thefigure}
+% command in building the referenced label. The old form caused a
+% problem when used with the report.sty as pointed out by Andrew
+% Anselmo (anselmo\@cumesb.mech.columbia.edu). Also modified to
+% restrict the scope of the subfigure \cmd{\label} to the body of the
+% subfigure. Added \cmd{\@thesubfigure} to allow a separate labeling
+% of the subfigure in the figure and in the text. By default it is
+% the same as \cmd{\thesubfigure} with space appended. Added some
+% code to print the subfigure captions to the List-of-Figures file
+% if desired. Finally, added the corresponding support for subtables
+% as well as subfigures. NOTE: the optional subcaption is now a moving
+% argument and any fragile commands that appear in the subcaption must
+% be preceded by a \cmd{\protect} (just like that of the \cmd{\caption}
+% command).}
+%
+% \changes{v2.0}{06 Mar 1995}{This version of \cmd{\subfigure} is the
+% first to be ported to \LaTeXe\ (with backward compatibility to
+% \LaTeX2.09). \cmd{\subfigure} and \cmd{\subtable} are now identical
+% and the environment controls internal differences between them. Now,
+% the subcaption setting portion of \cmd{\@subfloat} is broken into the
+% separate commands \cmd{\@makesubfigurecaption} and
+% \cmd{\@makesubtablecaption} to allow a separate hook for the
+% modification of how the subcaption is constructed and to allow the
+% subtable and subfigure captions to be different. In addition, support
+% of the \Lopt{normal}, \Lopt{hang}, \Lopt{center}, \Lopt{centerlast},
+% \Lopt{nooneline}; \Lopt{scriptsize}, \ldots, \Lopt{Large}; \Lopt{up},
+% \Lopt{it}, \Lopt{sl}, \Lopt{sc}, \Lopt{md}, \Lopt{bf}, \Lopt{rm},
+% \Lopt{sf}, and \Lopt{tt} package options were added for compatibility
+% with the caption.sty by H.A. Sommerfeldt.}
+%
+% \changes{v2.1}{23 Jan 2002}{Upgraded to fix a \cmd{\protect} bug that
+% crept in due to changes in \LaTeXe\ and to enhance the interaction
+% with the ``List-of'' files. Backward compatibility with \LaTeX2.09 is
+% \textbf{not} supported. This version allows optional subcaption
+% strings for the ``List-of'' files and the companion captcont.sty
+% allows further extensions. Added check for \Lfile{subfigure.cfg} file
+% for automatic configuration. Added more options for adjustment of the
+% look-and-feel of the subcaption. Added the ability to independently
+% move the float caption and subcaption before or after the figure.
+% Removed extra space from the top of a figure at the top of a page and
+% some accidental whitespace. Reduced the default space around the
+% figure and made it actual skips. Updated the documentation to
+% describe the new changes and to make some points more clear.}
+%
+% \DoNotIndex{\@@@,\@auxout,\@bsphack,\@dottedtocline,\@empty,\@esphack}
+% \DoNotIndex{\@flushglue,\@for,\@gobble,\@ifnextchar,\@ifpackageloaded}
+% \DoNotIndex{\@ifstar,\@ifundefined,\@minipagefalse,\@nameuse,\@ne}
+% \DoNotIndex{\@rightskip,\@tempboxa,\@tempcnta,\@tempdima}
+% \DoNotIndex{\@tempdimb,\@tempskipb,\@xaddvskip,\addcontentsline}
+% \DoNotIndex{\addtolength,\advance,\alph,\arabic,\AtBeginDocument}
+% \DoNotIndex{\AtEndOfPackage,\begingroup,\bfseries,\bgroup,\box}
+% \DoNotIndex{\DeclareOption,\def,\do,\edef,\egroup,\else,\endgroup}
+% \DoNotIndex{\ExecuteOption,\ExecuteOptions,\ext@figure,\ext@table}
+% \DoNotIndex{\familydefault,\fi,\footnotesize,\fontfamily,\fontseries}
+% \DoNotIndex{\fontshape,\gdef,\global,\hbox,\hfil,\hskip,\hss,\if@minipage}
+% \DoNotIndex{\ifcase,\ifdim,\ifnum,\ifx,\ignorespaces,\InputIfFileExists}
+% \DoNotIndex{\itshape,\label,\lastskip,\leftskip,\Large,\large,\leavevmode}
+% \DoNotIndex{\let,\long,\m@ne,\mdseries,\multiply,\NeedsTeXFormat}
+% \DoNotIndex{\newcommand,\newcounter,\newdimen,\newif,\newlabel,\newskip}
+% \DoNotIndex{\noexpand,\normalsize,\numberline,\or,\p@,\par,\parbox}
+% \DoNotIndex{\parfillskip,\parindent,\ProcessOptions,\protect}
+% \DoNotIndex{\protected@write,\protected@edef,\providecommand}
+% \DoNotIndex{\ProvidesPackage,\ref,\refstepcounter,\relax,\renewcommand}
+% \DoNotIndex{\RequirePackage,\rightskip,\rmfamily,\sbox,\scriptsize}
+% \DoNotIndex{\scshape,\selectfont,\seriesdefault,\setbox,\setcounter}
+% \DoNotIndex{\setlength,\sffamily,\shapedefault,\slshape,\small,\space}
+% \DoNotIndex{\string,\strut,\thefigure,\thepage,\thetable,\ttfamily,\tw@}
+% \DoNotIndex{\typeout,\undefined,\upshape,\usebox,\vbox,\vskip,\vspace}
+% \DoNotIndex{\vtop,\wd,\xdef,\z@,\z@skip}
+%
+% \CheckSum{787}%
+% ^ Allow a little more freedom in typesetting floats.
+% \setcounter{topnumber}{8}
+% \def\topfraction{.8}
+% \setcounter{bottomnumber}{8}
+% \def\bottomfraction{.8}
+% \setcounter{totalnumber}{8}
+% \def\textfraction{.2}
+% \def\floatpagefraction{.8}
+% \setcounter{dbltopnumber}{8}
+% \def\dbltopfraction{.8}
+% \def\dblfloatpagefraction{.8}
+%
+% ^ Add some space above any footnotes.
+% \skip\footins=1.5\baselineskip
+%
+% \makeatletter
+%
+% ^ Remove some space above minipage footnotes.
+% \skip\@mpfootins=2.6\p@
+%
+% ^ Define a raggedright for use in tabular's.
+% \newcommand{\rr}{^
+% \@rightskip\@flushglue
+% \rightskip\@rightskip
+% \leftskip\z@
+% \parindent\z@}
+%
+% ^ Turn off any list entries by ``eating'' any \addcontentsline stuff.
+% \newcommand*{\eatthree}[3]{}^
+% \newcommand*{\turnofflistentry}{\let\addcontentsline=\eatthree}
+%
+% ^ Print text (#2) only if reference (r@#1) is defined.
+% \newcommand{\PrintIfDefined}[3]{^
+% \@bsphack
+% \@ifundefined{r@#1}{#3}{#2}^
+% \@esphack}
+%
+% \makeatother
+%
+% \def\docdate{2005/03/15}
+% \def\fileversion{v2.1.5}
+% \def\filedate{2002/03/15}
+% \def\filename{subfigure.dtx}
+%
+% \title{The \Lpack{subfigure} Package\footnote{This paper documents
+% the \Lpack{subfigure} package \fileversion, last revised \filedate.}}
+% \author{Steven Douglas Cochran\\[5pt]
+% Digital Mapping Laboratory, School of Computer Science \\
+% Carnegie-Mellon University, 5000 Forbes Avenue \\
+% Pittsburgh, PA 15213--3890, USA\\[5pt]
+% \texttt{sdc+@cs.cmu.edu}}
+% \date{\docdate}
+%
+% \maketitle
+%
+% \begin{abstract}
+% \noindent
+% This article documents the \LaTeX\ package `\Lpack{subfigure}', which
+% provides support for the inclusion of small, `sub', figures and
+% tables. It simplifies the positioning, captioning and labeling of
+% such objects within a single \Lenv{figure} or \Lenv{table}
+% environment. In addition, this package allows such subcaptions to be
+% written to a List-of-Figures or List-of-Tables if desired. The
+% `\Lpack{subfigure}' package also cooperates with the `\Lpack{caption}'
+% and `\Lpack{caption2}' packages by H.A. Sommerfeldt
+% \cite{Somm95a,Somm95b}, the `\Lpack{ccaption}' and `\Lpack{tocloft}'
+% packages \cite{Wils01,Wils01B} by Peter Wilson, the `\Lpack{hyperref}'
+% package by Sebastian Rahtz \cite{Raht02}, the `\Lpack{captcont}' package
+% \cite{Coch02}, and should be compatible with all other packages that
+% modify or extend the \Lenv{float} environment or the \cmd{\caption} or
+% \cmd{\label} commands.
+%
+% \end{abstract}
+%
+% \newpage
+% \tableofcontents
+%
+% \newpage
+% \setcounter{lotdepth}{2}^
+% \listoftables
+% \setcounter{lofdepth}{2}^
+% \listoffigures
+%
+% \newpage
+% \section{Introduction}
+% \enlargethispage{24pt}^finalhack
+%
+% This package provides support for the manipulation and reference of
+% small or `sub' figures and tables within a single \Lenv{figure} or
+% \Lenv{table} environment\@.\footnote{Section~\ref{sec:customfloat}
+% describes how to add support for additional \Lenv{float}
+% environments.} It is convenient to use this package when your
+% subfigures are to be separately captioned, referenced, or when such
+% subcaptions are to be included in the List-of-Figures.
+%
+% Before using the \Lpack{subfigure} package, consider the following to
+% see if you really need it. If you simply want to center your figure,
+% then you can use |\centerline|, |\centering| or the \Lenv{center}
+% environment to do so. If your figure has a short width or if you wrap
+% your figure in a |\parbox| or a \Lenv{minipage} of a short width, then
+% you can place multiple figures or tables side-by-side. For example,
+% the following will put two images side-by-side in a single figure as
+% shown in figure~\ref{fig:1figs}:\footnote{You might have to use the
+% optional position arguments `[b]' or `[t]' if the figures are of
+% different heights.}
+%
+% \begin{verbatim}
+% \begin{figure}%
+% \centering
+% \parbox{1.2in}{...figure code...}%
+% \qquad
+% \begin{minipage}{1.2in}%
+% ...figure code...
+% \end{minipage}%
+% \caption{Here are two figures side-by-side.}%
+% \label{fig:1figs}%
+% \end{figure}
+% \end{verbatim}
+% \vspace{-1\baselineskip}
+% \begin{figure}^
+% \abovecaptionskip=6pt^
+% \centering
+% \parbox{1.2in}{^
+% \fboxsep=-\fboxrule
+% \fbox{\hbox to 1.2in{\vbox to 15mm{\null\vfil}\hfil}}}^
+% \qquad
+% \begin{minipage}{1.2in}^
+% \fboxsep=-\fboxrule
+% \fbox{\hbox to 1.2in{\vbox to 15mm{\null\vfil}\hfil}}^
+% \end{minipage}^
+% \caption{Here are two figures side-by-side.}^
+% \label{fig:1figs}^
+% \vspace{-10pt}
+% \end{figure}
+%
+% \noindent
+% Further, if you place the caption inside the |\parbox| or
+% \Lenv{minipage}, then the width of the caption will be limited to the
+% width of the parbox or minipage as shown in figures~\ref{fig:2figsA}
+% and \ref{fig:2figsB}:
+%
+% \begin{verbatim}
+% \begin{figure}%
+% \centering
+% \parbox{1.2in}{%
+% ...figure code...
+% \caption{First.}%
+% \label{fig:2figsA}}%
+% \qquad
+% \begin{minipage}{1.2in}%
+% ...figure code...
+% \caption{Second.}%
+% \label{fig:2figsB}%
+% \end{minipage}%
+% \end{figure}%
+% \end{verbatim}
+% \vspace{-\baselineskip}
+% \begin{figure}^
+% \abovecaptionskip=2pt^
+% \centering
+% \parbox{1.2in}{^
+% \fboxsep=-\fboxrule
+% \fbox{\hbox to 1.2in{\vbox to 15mm{\vfil\null}\hfil}}^
+% \caption{First.}^
+% \label{fig:2figsA}}^
+% \qquad
+% \begin{minipage}{1.2in}^
+% \fboxsep=-\fboxrule
+% \fbox{\hbox to 1.2in{\vbox to 15mm{\vfil\null}\hfil}}^
+% \caption{Second.}^
+% \label{fig:2figsB}^
+% \end{minipage}^
+% \vspace{-10pt}
+% \end{figure}
+%
+% For more information on typesetting figures and tables, see the
+% document ``Using Imported Graphics in \LaTeXe'' by Keith Reckdahl
+% \cite{Reck97}.
+%
+% \section{The User Interface}
+% \vspace{-5pt}^finalhack
+% \enlargethispage{12pt}^finalhack
+%
+% To use this package place
+% \begin{quote}
+% |\usepackage|\oarg{options}\marg{subfigure}
+% \end{quote}
+% in the preamble of your document. The supported options are shown in
+% table~\ref{tab:options}.
+% \DescribeMacro{\subfigure}
+% \DescribeMacro{\subtable}
+% Within a \Lenv{figure} or \Lenv{table}
+% environment, you can use the following commands to create a subfigure
+% or subtable ``box'' with an optional subcaption underneath.
+% \vspace{-2pt}
+% \begin{quote}
+% |\subfigure|\oarg{list\_entry}\oarg{subcaption}\marg{figure}\\
+% |\subtable|\oarg{list\_entry}\oarg{subcaption}\marg{figure}
+% \end{quote}
+% \vspace{-2pt}
+%
+% \noindent
+% If a subcaption argument is given (including the null subcaption
+% `{\ttfamily [$\;$]}') then the subfigure is labeled with a counter
+% formatted by the command `|\thesubfigure|' which returns, by default,
+% `(a)', `(b)', etc. The counter used for labeling the subfigures is
+% \Lcount{subfigure} and is incremented for each subfigure regardless of
+% whether a subcaption was printed. The internals of the |\subtable|
+% command are symmetric to those of the |\subfigure| command. Further,
+% if a List-of-Figures (or List-of-Tables) is generated, then the
+% \meta{list\_entry} argument controls how the caption text is used
+% there. Table~\ref{tab:calling} shows the possibilities.
+%
+% \changes{v2.1.4}{30 Apr 2002}{Changed the label and caption defaults
+% from \cmd{\rmfamily}\cmd{\mdseries}\cmd{\upshape} to
+% \cmd{\familydefault}\cmd{\seriesdefault} \cmd{\shapedefault}.}
+% \DeleteShortVerb{\|}
+% \begin{table}
+% \def\M#1{\vspace*{#1}}
+% \centering
+% \caption{\Lpack{subfigure} package options.}
+% \label{tab:options}
+% \vspace{8pt}
+% \fbox{\begin{tabular}{|p{0.36\textwidth}|p{0.63\textwidth}|} \hline
+% \multicolumn{1}{|c|}{{\large\bf\strut Option}}
+% & \multicolumn{1}{c|}{{\large\bf Description}}
+% \\ \hline\hline
+% \Lopt{normal} & \rr Provides `normal' subcaptions, this is the
+% default. \\ \hline
+% \raisebox{-1.4ex}{\Lopt{hang}, \Lopt{isu}}
+% & \rr Causes the label to be a hanging
+% indentation to the subcaption paragraph.
+% (\Lopt{isu} is a synonym for \Lopt{hang}.)
+% \\ \hline
+% \raisebox{-1.4ex}{\Lopt{center}}
+% & \rr Causes each line of the paragraph to be
+% separately centered. Overrides
+% \Lopt{centerlast}.\\ \hline
+% \raisebox{-1.4ex}{\Lopt{centerlast}, \Lopt{anne}}
+% & \rr Causes the last line only to be centered.
+% Overrides \Lopt{nooneline}. (\Lopt{anne} is
+% a synonym for \Lopt{centerlast}.) \\ \hline
+% \raisebox{-2.6ex}{\Lopt{nooneline}}
+% & \rr If a subcaption fits on one line it will, by
+% default, be centered. This option
+% treats a single line like a mid-line of a
+% multi-line caption.\\ \hline
+% \raisebox{-1.4ex}{\Lopt{raggedright}}
+% & \rr Causes the subcaption text to be raggedright.
+% Overrides \Lopt{center} and \Lopt{centerlast}.
+% \\ \hline\hline
+% \Lopt{scriptsize{\rm,} footnotesize{\rm,} small{\rm,}\hfil\null\linebreak
+% normalsize{\rm,} large{\rm,} Large}
+% & \rr Sets the font size of the subcaptions (both
+% the label and the text), \Lopt{footnotesize}
+% is default. \\ \hline
+% \M{1.8ex}
+% \Lopt{rm{\rm,} sf{\rm,} tt{\rm,} md{\rm,} bf{\rm,}\efill
+% up{\rm,} it{\rm,} sl{\rm,} sc{\rm,}}\hfil\null\linebreak
+% \Lopt{RM{\rm,} SF{\rm,} TT{\rm,} MD{\rm,} BF{\rm,}\efill
+% UP{\rm,} IT{\rm,} SL{\rm,} SC}
+% & \rr The lowercase commands set the font attributes
+% of the subcaption label. The capitalized version
+% sets the font attributes of the text. Family,
+% shape and style attributes may be mixed.
+% The default is to set the document defaults for
+% the family, series and shape.\\ \hline\hline
+% \M{4ex}
+% \Lopt{figbotcap}{\rm,} \Lopt{tabbotcap}{\rm,}\hfil\null\linebreak
+% \Lopt{FIGBOTCAP}{\rm,} \Lopt{TABBOTCAP}
+% & \rr Sets the figure or table numbering based on
+% the assumption that the figure or table caption
+% comes after the subfigures or subtables. The
+% capitalized version also places the subcaption
+% after the figure (``\Lopt{FIGBOTCAP}'' and
+% ``\Lopt{TABBOTCAP}'' are the default settings).
+% \\ \hline
+% \M{3.9ex}
+% \Lopt{figtopcap}{\rm,} \Lopt{tabtopcap}{\rm,}\hfil\null\linebreak
+% \Lopt{FIGTOPCAP}{\rm,} \Lopt{TABTOPCAP}
+% & \rr Sets the figure or table numbering based on
+% the assumption that the figure or table caption
+% precedes the subfigures or subtables. The
+% capitalized version also places the subcaption
+% before the figure (``\Lopt{TABTOPCAP}'' is the
+% preferred table setting, see
+% section~\ref{sec:position} for details).
+% \\ \hline\hline
+% \M{2.6ex}
+% \Lopt{loose}{\rm,} \Lopt{tight}
+% & \rr The (default) \Lopt{loose} option sets the
+% historically normal whitespace around the subfloat.
+% The \Lopt{tight} option sets less space around the
+% subfigure (this is the preferred setting).
+% \\ \hline
+% \end{tabular}}%
+% \end{table}
+% \MakeShortVerb{\|}
+%
+% \begin{table}
+% \centering
+% \caption{\cmd{\subfigure} calling arguments.}
+% \label{tab:calling}
+% \begingroup\small
+% \begin{tabular}{llc} \\ \hline
+% {\normalsize Subfigure Command}
+% & {\normalsize LoF/LoT}
+% & \multicolumn{1}{r}{\hbox to .25in{%
+% \hss\normalsize
+% Subfigure Caption}}
+% \\ \hline
+% \cmd{\subfigure}\{\dots fig\dots\}
+% & & \\
+% \cmd{\subfigure}[~]\{\dots fig\dots\}
+% & (b)\ \ . . . . . . . . . .
+% & (b) \\
+% \cmd{\subfigure}[Subcaption.]\{\dots fig\dots\}
+% & (c) Subcaption. . . .
+% & (c) Subcaption. \\
+% \cmd{\subfigure}[\space][Subcaption.]\{\dots fig\dots\}
+% & & (d) Subcaption. \\
+% \cmd{\subfigure}[\space][\space]\{\dots fig\dots\}
+% & & (e) \\
+% \cmd{\subfigure}[List\_entry.][Subcaption.]\{\dots fig\dots\}
+% & (f) List\_entry. . . .
+% & (f) Subcaption. \\
+% \cmd{\subfigure}[List\_entry.][~]\{\dots fig\dots\}
+% & (g) List\_entry. . . .
+% & (g) \\ \hline
+% \end{tabular}
+% \endgroup
+% \vspace{-8pt}
+% \end{table}
+%
+% If you wish to reference a specific subfigure or subtable, you can
+% include a |\label| inside the body of either the \meta{subcaption} or
+% \meta{figure} argument to the command (but not the \meta{list\_entry}
+% argument). If supplied by itself, the \meta{subcaption} is a ``moving
+% argument''\footnote{See \cite[\textsection~4.7 and
+% \textsection~C.1.3]{Lamp94} for a more detailed description of
+% ``moving arguments'' and ``fragile'' commands.} and, therefore, any
+% ``fragile'' commands contained within it must be |\protect|'ed. If
+% the \meta{list\_entry} argument is supplied, then the
+% \meta{subcaption} is not a ``moving argument''; however, the
+% \meta{list\_entry} is.
+%
+% {\bf Note:} since the |\subfigure| and |\subtable| commands have optional
+% arguments, delimited with square brackets, before their required argument,
+% you cannot use the `]' character at the top level of either the
+% \meta{subcaption} or \meta{list\_entry} argument. To overcome this
+% problem, you must wrap the portion of the text containing the `]'
+% character (or the entire argument), in a pair of curly brackets (see
+% \cite[\textsection~C.1.1]{Lamp94} for more detail). For example:
+%
+% \begin{verbatim}
+% \subfigure[This does not $sqrt[3]{8}$ work.]{... figure text ...}
+% \subfigure[This works {$sqrt[3]{8}$} fine.]{... figure text ...}
+% \subfigure[{This also works $sqrt[3]{8}$ fine.}]{... figure text ...}
+% \end{verbatim}
+%
+% One final note, the |\subfigure| and |\subtable| commands are
+% actually identical and it is the surrounding environment that defines
+% actually identical and it is the surrounding environment that defines
+% whether a subtable or subfigure will be generated and not which command
+% is used. At the user level, the choice of names is purely cosmetic
+% (and historical). Therefore you can use |\subfigure| for any float
+% ({\it e.g.\/}, \Lenv{figure}, \Lenv{table}, or other) environment.
+%
+% \subsection{Format Options}
+% \label{sec:format}
+%
+% There are six options for formatting the layout of the caption label
+% and text. The first is \Lopt{normal}, which produces the style shown
+% in figure~\ref{fig:format-01}. The other options may be used in
+% various combinations to produce the layouts shown in
+% figures~\ref{fig:format-02} thru \ref{fig:format-14}. Note that some
+% combinations, like \Lopt{center} and \Lopt{centerlast} do not make
+% sense since \Lopt{center} overrides \Lopt{centerlast}. Also,
+% \Lopt{nooneline}, when combined with either \Lopt{center} or
+% \Lopt{centerlast} has no effect (unless the \Lopt{hang} option is
+% also set); and, \Lopt{raggedright} overrides both \Lopt{center} and
+% \Lopt{centerlast}.
+%
+% \begingroup
+% \def\sc{Short.}
+% \def\lc{This is a long caption of gibberish: Aafas d taed
+% gaihgghn adf irin sadf aets etsd na.}
+% \def\b{\fboxsep=-\fboxrule
+% \fbox{\hbox to 2.0in{\vbox to 2mm{\vfil\null}\hfil}}}
+% \def\g{\hspace{.5in}}
+% \subfigtopskip=20pt
+% \subfigcapskip=-3pt
+% \subfigbottomskip=0pt
+% \abovecaptionskip=5pt
+% \begin{figure}^
+% \centering
+% \turnofflistentry
+% \subcaphangfalse
+% \subcapcenterfalse
+% \subcapcenterlastfalse
+% \subcapnoonelinefalse
+% \subcapraggedrightfalse
+% \subfigure[\sc]{\b}\g\subfigure[\lc]{\b}\\
+% \caption{Format option [\Lopt{normal}].}^
+% \label{fig:format-01}^
+% \subcapnoonelinetrue
+% \subfigure[][\sc]{\b}\g\subfigure[][\lc]{\b}\\
+% \caption{Format option [\Lopt{nooneline}].}^
+% \label{fig:format-02}^
+% \subcapcenterlasttrue
+% \subcapnoonelinefalse
+% \subfigure[][\sc]{\b}\g\subfigure[][\lc]{\b}\\
+% \caption{Format option [\Lopt{centerlast}]; \Lopt{centerlast} overrides
+% \Lopt{nooneline}.\footnotemark}
+% \label{fig:format-03}^
+% \subcapcentertrue
+% \subcapcenterlastfalse
+% \subfigure[][\sc]{\b}\g\subfigure[][\lc]{\b}\\
+% \caption{Format option [\Lopt{center}]; \Lopt{center} overrides
+% \Lopt{nooneline} and \Lopt{centerlast}.}^
+% \label{fig:format-04}^
+% \subcaphangtrue
+% \subcapcenterfalse
+% \subfigure[][\sc]{\b}\g\subfigure[][\lc]{\b}\\
+% \caption{Format option [\Lopt{hang}].}
+% \label{fig:format-05}
+% \subcapnoonelinetrue
+% \subfigure[][\sc]{\b}\g\subfigure[][\lc]{\b}\\
+% \caption{Format options [\Lopt{hang},\Lopt{nooneline}].}
+% \label{fig:format-06}
+% \subcapcenterlasttrue
+% \subcapnoonelinefalse
+% \subfigure[][\sc]{\b}\g\subfigure[][\lc]{\b}\\
+% \caption{\Lpack{Subfigure}\ format options [\Lopt{hang},^
+% \Lopt{centerlast}].}
+% \label{fig:format-07}
+% \vspace{2\baselineskip}
+% \begin{minipage}{\linewidth}
+% \footnotetext{\raise1ex\hbox to 0pt{\hss\tiny\thefootnote}^
+% So this is the same as [\Lopt{centerlast},\Lopt{nooneline}]. Only
+% the shortest number of options to achieve an effect is shown.
+% Adding any combination of overridden options has no effect.}
+% \end{minipage}
+% \end{figure}
+%
+% \begin{figure}
+% \turnofflistentry
+% \centering
+% \subcaphangtrue
+% \subcapcenterfalse
+% \subcapcenterlasttrue
+% \subcapnoonelinetrue
+% \subcapraggedrightfalse
+% \subfigure[][\sc]{\label{fig:format-08A}\b}\g\subfigure[][\lc]{\b}\\
+% \caption{Format options [\Lopt{hang},\Lopt{centerlast},\Lopt{nooneline}].}
+% \label{fig:format-08}
+% \subcapcentertrue
+% \subcapcenterlastfalse
+% \subcapnoonelinefalse
+% \subfigure[][\sc]{\b}\g\subfigure[][\lc]{\b}\\
+% \caption{Format options [\Lopt{hang},\Lopt{center}];
+% \Lopt{center} overrides \Lopt{centerlast}.}
+% \label{fig:format-09}
+% \subcapnoonelinetrue
+% \subfigure[][\sc]{\label{fig:format-10A}\b}\g\subfigure[][\lc]{\b}\\
+% \caption{Format options [\Lopt{hang},\Lopt{center},\Lopt{nooneline}];
+% \Lopt{center} overrides \Lopt{centerlast}.}
+% \label{fig:format-10}
+% \subcaphangfalse
+% \subcapcenterfalse
+% \subcapnoonelinefalse
+% \subcapraggedrighttrue
+% \subfigure[][\sc]{\b}\g\subfigure[][\lc]{\b}\\
+% \caption{Format option [\Lopt{raggedright}];
+% \Lopt{raggedright} overrides \Lopt{center} and \Lopt{centerlast}.}
+% \label{fig:format-11}
+% \subcapnoonelinetrue
+% \subfigure[][\sc]{\b}\g\subfigure[][\lc]{\b}\\
+% \caption{Format options [\Lopt{raggedright},\Lopt{noonelirne}];
+% \Lopt{raggedright} overrides \Lopt{center} and \Lopt{centerlast}.}
+% \label{fig:format-12}
+% \subcaphangtrue
+% \subcapnoonelinefalse
+% \subfigure[][\sc]{\b}\g\subfigure[][\lc]{\b}\\
+% \caption{Format options [\Lopt{hang},\Lopt{raggedright}];
+% \Lopt{raggedright} overrides \Lopt{center} and \Lopt{centerlast}.}
+% \label{fig:format-13}
+% \subcapnoonelinetrue
+% \subfigure[][\sc]{\label{fig:format-14A}\b}\g\subfigure[][\lc]{\b}\\
+% \caption{\Lpack{Subfigure}\ format options [\Lopt{hang},\Lopt{raggedright},
+% \Lopt{nooneline}]; \Lopt{raggedright} overrides \Lopt{center}
+% and \Lopt{centerlast}.}
+% \label{fig:format-14}
+% \end{figure}
+% \endgroup
+%
+% \addtocontents{lof}{^
+% \string\contentsline
+% {figure}
+% {\numberline{\ref{fig:format-01}--\ref{fig:format-14}}^
+% {\ignorespaces \Lpack{Subfigure}\ format options.}}^
+% {\pageref{fig:format-01}--\pageref{fig:format-14}}}
+%
+% \subsection{Font Size and Style Options}
+% \label{sec:font}
+%
+% There are twenty-four options for setting the font of the subcaption.
+% The first six set the size of both the subcaption label and text.
+% They are: \Lopt{scriptsize}, \Lopt{footnotesize} (default),
+% \Lopt{small}, \Lopt{normalsize}, \Lopt{large}, and \Lopt{Large}.
+% Their effect is shown in figure~\ref{fig:font1}.
+%
+% The next nine, \Lopt{rm}: \Lopt{sf}, \Lopt{tt}, \Lopt{md}, \Lopt{bf},
+% \Lopt{up}, \Lopt{it}, \Lopt{sl}, and \Lopt{sc}, set the family, series
+% or shape of the subcaption label, as shown in
+% figures~\ref{fig:font2A}--~\ref{fig:font2I}. The last nine:
+% \Lopt{RM}, \Lopt{SF}, \Lopt{TT}, \Lopt{MD}, \Lopt{BF}, \Lopt{UP},
+% \Lopt{IT}, \Lopt{SL}, and \Lopt{SC}, do the same for the text of the
+% subcaption, as shown in figure~\ref{fig:font2J}--\ref{fig:font2R}.
+% These size and style options may be combined in 3456 ways to set the
+% label and text of the subcaption (as long as the selected font
+% combination exists\@!) The font family for the text and label may be
+% set as roman (\Lopt{rm}/\Lopt{RM}), sans serif (\Lopt{sf}/\Lopt{SF}),
+% and typewriter (\Lopt{tt}/\Lopt{TT}). These may be combined with
+% those for the font series, medium (\Lopt{md}/\Lopt{MD}) and bold
+% (\Lopt{bf}/\Lopt{BF}); and the font shape, upright
+% (\Lopt{up}/\Lopt{UP}), italic (\Lopt{it}/\Lopt{IT}), slanted
+% (\Lopt{sl}/\Lopt{SL}), and small caps (\Lopt{sc}/\Lopt{SC}).
+%
+% \begin{figure}^
+% \def\b{\fboxsep=-\fboxrule
+% \fbox{\hbox to 2.0in{\vbox to 2mm{\vfil\null}\hfil}}}^
+% \subfigtopskip=8pt^
+% \subfigcapskip=0pt^
+% \subfigbottomskip=4pt^
+% \centering
+% {\renewcommand{\subcapsize}{\scriptsize}^
+% \subfigure[][Font option {[scriptsize]}.]{\b}}\qquad
+% {\renewcommand{\subcapsize}{\footnotesize}^
+% \subfigure[][Font option {[footnotesize]}.]{\b}}\\
+% {\renewcommand{\subcapsize}{\small}^
+% \subfigure[][Font option {[small]}.]{\b}}\qquad
+% {\renewcommand{\subcapsize}{\normalsize}^
+% \subfigure[][Font option {[normalsize]}.]{\b}}\\
+% {\renewcommand{\subcapsize}{\large}^
+% \subfigure[][Font option {[large]}.]{\b}}\qquad
+% {\renewcommand{\subcapsize}{\Large}^
+% \subfigure[][Font option {[Large]}.]{\b}}%
+% \caption[\Lpack{Subfigure} font size options.]{%
+% \Lpack{Subfigure} font size options. (Default:
+% \Lopt{footnotesize}).}^
+% \label{fig:font1}^
+% \end{figure}
+%
+% \begin{figure}^
+% \def\b{\fboxsep=-\fboxrule
+% \fbox{\hbox to 2.0in{\vbox to 2mm{\vfil\null}\hfil}}}^
+% \subfigtopskip=8pt^
+% \subfigcapskip=0pt^
+% \subfigbottomskip=4pt^
+% \centering
+% \begin{minipage}{2.0in}^
+% {\renewcommand{\subcaplabelfont}{\rmfamily}^
+% \subfigure[][Subcaption label font option {[\Lopt{rm}]}.]{\b^
+% \label{fig:font2A}}}\\
+% {\renewcommand{\subcaplabelfont}{\sffamily}^
+% \subfigure[][Subcaption label font option {[\Lopt{sf}]}.]{\b}}\\
+% {\renewcommand{\subcaplabelfont}{\ttfamily}^
+% \subfigure[][Subcaption label font option {[\Lopt{tt}]}.]{\b}}\\
+% {\renewcommand{\subcaplabelfont}{\mdseries}^
+% \subfigure[][Subcaption label font option {[\Lopt{md}]}.]{\b}}\\
+% {\renewcommand{\subcaplabelfont}{\bfseries}^
+% \subfigure[][Subcaption label font option {[\Lopt{bf}]}.]{\b}}\\
+% {\renewcommand{\subcaplabelfont}{\upshape}^
+% \subfigure[][Subcaption label font option {[\Lopt{up}]}.]{\b}}\\
+% {\renewcommand{\subcaplabelfont}{\itshape}^
+% \subfigure[][Subcaption label font option {[\Lopt{it}]}.]{\b}}\\
+% {\renewcommand{\subcaplabelfont}{\slshape}^
+% \subfigure[][Subcaption label font option {[\Lopt{sl}]}.]{\b}}\\
+% {\renewcommand{\subcaplabelfont}{\scshape}^
+% \subfigure[][Subcaption label font option {[\Lopt{sc}]}.]{^
+% \label{fig:font2I}\b}}\\
+% \end{minipage}^
+% \qquad
+% \begin{minipage}{2.0in}^
+% {\renewcommand{\subcapfont}{\rmfamily}^
+% \subfigure[][Subcaption font option {[\Lopt{RM}]}.]{^
+% \label{fig:font2J}\b}}\\
+% {\renewcommand{\subcapfont}{\sffamily}^
+% \subfigure[][Subcaption font option {[\Lopt{SF}]}.]{\b}}\\
+% {\renewcommand{\subcapfont}{\ttfamily}^
+% \subfigure[][Subcaption font option {[\Lopt{TT}]}.]{\b}}\\
+% {\renewcommand{\subcapfont}{\mdseries}^
+% \subfigure[][Subcaption font option {[\Lopt{MD}]}.]{\b}}\\
+% {\renewcommand{\subcapfont}{\bfseries}^
+% \subfigure[][Subcaption font option {[\Lopt{BF}]}.]{\b}}\\
+% {\renewcommand{\subcapfont}{\upshape}^
+% \subfigure[][Subcaption font option {[\Lopt{UP}]}.]{\b}}\\
+% {\renewcommand{\subcapfont}{\itshape}^
+% \subfigure[][Subcaption font option {[\Lopt{IT}]}.]{\b}}\\
+% {\renewcommand{\subcapfont}{\slshape}^
+% \subfigure[][Subcaption font option {[\Lopt{SL}]}.]{\b}}\\
+% {\renewcommand{\subcapfont}{\scshape}^
+% \subfigure[][Subcaption font option {[\Lopt{SC}]}.]{^
+% \label{fig:font2R}\b}}^
+% \end{minipage}^
+% \caption[\Lpack{Subfigure} font style options.]{%
+% \Lpack{Subfigure} font style options. (Default:
+% \Lopt{rm,md,up,RM,MD,UP}). Note: The above single options
+% are loaded after the default settings and multiple options are
+% allowed, see the text, section~\ref{sec:font}.}^
+% \label{fig:font2}^
+% \end{figure}
+%
+% \subsection{Caption Position Options}
+% \enlargethispage{12pt}^finalhack
+% \label{sec:position}
+%
+% There are eight options that control the {\em position\/} of the
+% subcaption and how the subcaption {\em numbering\/} is related to the
+% ``containing'' figure or table's caption. The following shows only
+% the subfigure-related options, but the subtable options are symmetric.
+%
+% The first option, \Lopt{figbotcap} tells the subfigure command that
+% the ``containing'' figure's |\caption| occurs {\bf after} the
+% subfigures. This information is needed to decide if the current
+% figure counter shows the number for the last figure (\Lopt{figbotcap})
+% or for the current one (\Lopt{figtopcap}, see below).
+%
+% The second option, \Lopt{figtopcap} tells the subfigure command that
+% the ``containing'' figure's |\caption| occurs {\bf before} the
+% subfigures. The subcaption is automatically placed below the figure
+% for each of these options.
+%
+% The third option, \Lopt{FIGBOTCAP}, is similar to \Lopt{figbotcap},
+% except that it also forces the subcaption to be placed under the
+% figure. This is the default setting for figures (and \Lopt{TABBOTCAP}
+% for tables) and is shown in figure~\ref{fig:position1}.
+%
+% The fourth option, \Lopt{FIGTOPCAP}, is similar to \Lopt{figtopcap},
+% except that it forces the subcaption to be placed above the figure
+% box. (While not the default, it is the preferred format for tables,
+% which uses the option \Lopt{TABTOPCAP}\@.) An example of this option
+% is shown in figure~\ref{fig:position2}. Note that the baseline of the
+% subfigure is along the top of the two subfigures. See
+% section~\ref{sec:custom-position} for another way of positioning the
+% caption when captions are placed above the figure or table.
+%
+% \begin{figure}^
+% \subfigtopskip=8pt^
+% \subfigcapskip=0pt^
+% \subfigbottomskip=4pt^
+% \abovecaptionskip=5pt^
+% \centering
+% \subfigure[First caption.]{^
+% \fbox{\hbox to 1.5in{\vbox to 15mm{\vfil\null}\hfil}}}^
+% \hspace{0.2in}^
+% \subfigure[Second long, long, long, long, long, long, caption.]{^
+% \fbox{\hbox to 1.5in{\vbox to 10mm{\vfil\null}\hfil}}}^
+% \caption{Subcaption position option [\Lopt{FIGBOTCAP}].}
+% \label{fig:position1}^
+% \end{figure}
+%
+% \begin{figure}^
+% \subfigtopskip=8pt^
+% \subfigcapskip=0pt^
+% \subfigbottomskip=0pt^
+% \belowcaptionskip=5pt^
+% \caption{Subcaption position option: [\Lopt{FIGTOPCAP}].}^
+% \label{fig:position2}^
+% \centering
+% \figuretopcaptrue
+% \subfiguretopcaptrue
+% \subfigure[First caption.]{^
+% \fbox{\hbox to 1.5in{\vbox to 15mm{\vfil\null}\hfil}}}^
+% \hspace{0.2in}^
+% \subfigure[Second long, long, long, long, long, long caption.]{^
+% \fbox{\hbox to 1.5in{\vbox to 10mm{\vfil\null}\hfil}}}^
+% \setcounter{subfigure}{0}^
+% \vspace{-18pt}
+% \end{figure}
+%
+% \subsection{Recent Changes and Backward Compatibility}
+% \enlargethispage{24pt}^finalhack
+% \label{sec:back-compat}
+%
+% There are some significant changes in this version of the
+% \Lpack{subfigure} package. One of them was to pack the subfigure
+% tighter together by removing the space at the top of the subfigure at
+% the beginning of a page, or minipage, and to reduce the spacing around
+% the subfigure, see table~\ref{tab:spacing}. If you have been using an
+% older version of the \Lpack{subfigure} package ({\it i.e.\/}, version
+% 2.0 or eariler) than the default (\Lopt{loose}) setting will not cause
+% any change in your existing documents.\footnote{If you have been using
+% a beta release version of \Lpack{subfigure} 2.1, than you will need to
+% use the \Lopt{tight} option in order to maintain the ``look-and-feel''
+% that you are used to.}
+%
+% If you want to use the new and preferred, \Lopt{tight} option, your
+% subfigures will take up less space and should provide a more balanced
+% visual appearance for your paper.
+%
+% The second significant change is the ability to make the text on the
+% List-of-Figures page different than that in the subcaption. The use
+% of a second optional argument to the |\subfigure| command is shown in
+% table~\ref{tab:calling}. This should not cause any compatibility
+% problems.
+%
+% The third significant change is the it is now possible to have the
+% captions and subcaptions come before or after the corresponding
+% figure/table portion. While the default settings support the old view
+% of the subcaptions following the figure/table and, in turn, followed
+% by the main caption. The preferred format is for figures to retain
+% that layout and for tables to have both their subcaption and main
+% captions come before the table portion. This preferred setting may be
+% specified by adding the option \Lopt{TABTOPCAP} when loading the
+% \Lpack{subfigure} package.
+%
+% The fourth update is that the font style options have been generalized
+% so that an option from each of the family, series and shape, may be
+% combined, as long as that combination exists; and you can set the font
+% of the label and text separately. In addition, the the |\space| that
+% separated the label from the text in the subcaption has been replaced
+% with a horizontal skip of |\subfiglabelskip| which has the default
+% value of |0.33em plus 0.07em minus 0.03em|. This extension should not
+% cause any compatibility problems.
+%
+% The last major change is that there is now a |\subref| command that
+% allows a reference to the subfigure without the figure number. An
+% example of the use of this command is shown later in
+% section~\ref{sec:ex3}. Associated with this change is that the
+% |\label| command will accept an optional argument, for use with the
+% \Lpack{hyperref} package, when used within the scope of the
+% |\subfigure| or |\subtable|, see section~\ref{sec:hyperref} for details.
+%
+% \DeleteShortVerb{\|}
+% \MakeShortVerb{\/}
+% \begin{table}^
+% \def\pz{\phantom{0}}^
+% \centering
+% \caption{\Lpack{Subfigure} spacing changes.}^
+% \label{tab:spacing}^
+% \vspace{4pt}^
+% \begin{tabular}{|l|c|c|c|} \hline
+% \multicolumn{1}{|c|}{\bf{\Lpack{subfigure}}}
+% & \multicolumn{1}{c|}{{\bf Old (v2.0)}}
+% & \multicolumn{1}{c|}{\bf\Lopt{loose}}
+% & \multicolumn{1}{c|}{\bf\Lopt{tight}} \\
+% \multicolumn{1}{|c|}{{\bf Constant}}
+% & \multicolumn{1}{c|}{{\bf Value}}
+% & \multicolumn{1}{c|}{{\bf Option}}
+% & \multicolumn{1}{c|}{{\bf Option}}
+% \\ \hline
+% /\subfigtopskip/ & 10 pt & 10 pt & 5 pt \\
+% /\subfigcapskip/ & 10 pt & 10 pt & 0 pt \\
+% /\subfigcaptopadj/ & | &\pz0 pt & 3 pt \\
+% /\subfigbottomskip/ & 10 pt & 10 pt & 5 pt \\
+% /\subfigcapmargin/ & 10 pt & 10 pt & 0 pt \\
+% /\subfiglabelskip/ & | & 0.33 em &
+% \vtop{\hbox to 1.2in{0.33 em plus 0.07 em}
+% \hbox to 1.2in{\hfill minus 0.03 em}}
+% \\[8pt] \hline
+% \end{tabular}^
+% \end{table}
+% \DeleteShortVerb{\/}
+% \MakeShortVerb{\|}
+%
+% The \Lpack{subfigure} package checks for and loads a configuration
+% file called \Lfile{subfigure.cfg} which is placed anywhere that \LaTeX\
+% will look for classes or packages (see
+% section~\ref{sec:customization}). By default, the \Lfile{subfigure.sty}
+% file tries to look unchanged from older versions. In order to
+% have it automatically use the preferred settings, you can add a
+% configuration file containing the options \Lopt{tight} to reduce the
+% extra whitespace around the subfigures and \Lopt{TABTOPCAP} to show
+% that table captions will come before the table and the the subcaptions
+% for tables should be set above the subtable. The following line is all
+% you need in your configuration file:
+%
+% \iffalse
+%<*newconf>
+% \fi
+% \begin{macrocode}
+\ExecuteOptions{tight,TABTOPCAP}
+% \end{macrocode}
+% \iffalse
+%</newconf>
+% \fi
+%
+% You could also load the subfigure package with the options with the
+% following in your \LaTeX\ preamble:
+% \begin{quote}
+% |\usepackage[tight,TABTOPCAP]{subfigure}|
+% \end{quote}
+%
+% \subsection{Frequently Asked Questions}
+% \label{sec:faq}
+%
+% The four most frequently asked questions about the \Lpack{subfigure}
+% package are:
+%
+% \begin{enumerate}
+% \item ``My subfigures are not aligned along their bottoms. Why?''
+%
+% Remember! The \Lpack{subfigure} package aligns subfigure along
+% their baselines with the subcaption (if any) sticking out above or
+% below. The above problem is usually due to using a \Lenv{minipage},
+% \Lenv{tabular} or \Lenv{array} environment that, by default,
+% places the baseline at the center of the box that it generates.
+% If the two subfigures are different sizes, or if one subfigure is
+% generated in some other way with its baseline not at the expected
+% place (perhaps an |\includegraphics|), then the subfigures will be
+% misaligned. One solution is to use the environment options `[t]'
+% or `[b]' to move the baseline to the top or bottom rather than the
+% center.
+%
+% \item ``How can I get my figures/subfigures to line up the way I want?''
+%
+% A similar question, but this one is caused by extra whitespace in
+% the source text generating spaces next to the figures, and |\par|'s
+% generated by blanklines. The main thing is {\it be aware\/} that
+% extra whitespace can move figures and subfigures around, sometimes
+% a lot and sometimes just a little so that they look ``wrong''.
+% Placing too many `\%'s at the end of the lines is better than too
+% few in the figure and table environments. (See the discussion of
+% ``white space'' in section~\ref{sec:examples}.)
+%
+% \item ``I have too many subfigures for one page, How can I spread
+% them over two or more pages and continue the numbering?''
+% \begin{description}
+% \item[Option 1:] Adjust the \Lcount{figure} and \Lcount{subfigure}
+% counters (or the \Lcount{table} and
+% \Lcount{subtable} counters) as needed before and
+% after each figure (or table) See, for example
+% \emph{Using Imported Graphics in \LaTeXe}
+% \cite[\textsection~30]{Reck97}.
+% \item[Option 2:] Use the \Lpack{ccaption} package by Peter Wilson
+% \cite{Wils01}.
+% \item[Option 3:] Use the simpler \Lpack{captcont} package by
+% Steven Cochran \cite{Coch02}.
+% \end{description}
+% All of these options work well. Of the packages, the
+% \Lpack{ccaption} package is bigger and offers more control over
+% what is done (and things to do) at the expense of being a little
+% harder to use. The \Lpack{captcont} package is easier to use,
+% but only provides for continued floats.
+% \newpage^finalhack
+% \item ``Why do I get a garbled caption or an error when I use
+% square brackets?''
+% \vspace{-2pt}
+% \begin{verbatim}
+% \subfigure[SHIFT: ``register[3] $<<=$ 3;'']{... figure text ...}
+% \end{verbatim}
+% \vspace{-12pt}
+% Since the |\subfigure| and |\subtable| commands have optional
+% arguments, delimited with square brackets, before their required
+% argument, you cannot use the `]' character at the top level of
+% either the \meta{subcaption} or \meta{list\_entry} argument. To
+% overcome this problem, you must wrap all or the portion of the text
+% containing the `]' character, in a pair of curly brackets
+% (see \cite[\textsection~C.1.1]{Lamp94} for more detail). For example:
+% \begin{verbatim}
+% \subfigure[SHIFT: ``register{[3]} $<<=$ 3;'']{... figure text ...}
+% \end{verbatim}
+% \vspace{-16pt}
+% \noindent
+% or
+% \vspace{-4pt}
+% \begin{verbatim}
+% \subfigure[{SHIFT: ``register[3] $<<=$ 3;''}]{... figure text ...}.
+% \end{verbatim}
+% \vspace{-12pt}
+% \end{enumerate}
+%
+% \section{Three Examples}
+% \label{sec:examples}
+%
+% The easiest way to show the use of this package is to give a few
+% examples. The two most important things to remember when working
+% with the \Lpack{subfigure} package are that (1) the subfigures are
+% aligned along their baselines (see figure~\ref{fig:layout} and
+% section~\ref{sec:customlayout}) and (2) that whitespace in the
+% \Lenv{figure} environment are significant and affect the layout.
+%
+% The baseline of the subfigure is usually at the bottom of the
+% subfigure or (when the subcaption appears at the top) at the bottom of
+% the subcaption {\em and\/} the |\subfigcapskip| space---which is usually
+% the same as the top of the subfigure. However sometimes, especially
+% when using the \Lenv{tabular}, \Lenv{array}, or \Lenv{minipage}
+% environments to build the figure, the baseline appears elsewhere. The
+% above environments are all aligned at their center by default but that
+% may be changed with the optional `{\bf [t]}' or `{\bf [b]}' arguments.
+% As a last resort you can wrap all of your figures in a |\vtop| box with
+% a |\vbox to 0pt{\null}| at the top followed by the figure.
+%
+% If your figure is not quite centered or where you want it to be, the
+% problem is often a space character being placed to one side or the
+% other of the figure. Some general rules of thumb are:\footnote{See
+% chapters 7 and 8 of ``The \TeX book'' \cite{Knut86} for details.}
+% \begin{itemize}\itemsep0pt
+% \item Two end-of-lines following each other (ignoring any
+% whitespace) are turned into a |\par| or paragraph break.
+% \item Multiple whitespace (including the end-of-line) are
+% compressed into a single space.
+% \item The spaces after a macro command name ({\it e.g.\/}, |\foo|)
+% are ignored.
+% \item A `\%' character at the end of the line suppresses the
+% end-of-line and all of the spaces (if any) at the
+% beginning of the next line.
+% \end{itemize}
+%
+% To suppress significant extra whitespace, you can add some `\%'
+% characters at the end of each line that doesn't end with a command name.
+% This is more than is required, but extra `\%' usually don't cause a
+% problem.
+%
+% The other case where things are not correctly centered is when the
+% subfigure uses only the label for the subcaption. This is often the
+% case when the description for each subfigure is given in the figure
+% caption rather than in each subcaption. In this case, the default
+% label has the form `(a)\ \ ' where the trailing space is defined by
+% |\subfiglabelskip|. In this case the style should redefine this space
+% as `0pt' so that the label is perfectly centered (see
+% section~\ref{sec:ex3}, below for an example).
+%
+% \subsection{A Simple Example}
+% \enlargethispage{12pt}
+%
+% The first example, shown in figure~\ref{3figs}, specifies |\centering|
+% \DescribeMacro{\subfigure}
+% to horizontally center the set of subfigures, and uses |\\| and
+% some horizontal space (using |\qquad|) to control the placement of
+% the subfigures. Note that the alignment of the top two subfigures
+% is along the bottom of the figure portion of each.
+%
+% \begin{figure}^
+% \centering
+% \fboxsep=-\fboxrule
+% \fbox{^
+% \begin{minipage}{4.0in}^
+% \vspace{10pt}^
+% \centering
+% \begin{minipage}{3.5in}^
+% \subfigtopskip=3pt^
+% \subfigcapskip=-2pt^
+% \subfigbottomskip=5pt^
+% \subfigcapmargin=3pt^
+% \abovecaptionskip=5pt^
+% \centering
+% \subfigure[First.]{^
+% \fbox{\hbox to 20mm{\vbox to 15mm{\vfil\null}\hfil}}}\qquad
+% \subfigure[Second figure.]{^
+% \fbox{\hbox to 20mm{\vbox to 10mm{\vfil\null}\hfil}}}\\[6pt]
+% \subfigure[Third.]{\label{3figs-c}^
+% \fbox{\hbox to 20mm{\vbox to 10mm{\vfil\null}\hfil}}}\\
+% \caption{Three subfigures.}^
+% \label{3figs}^
+% \rr
+% \vspace{15pt}^
+% Figure~\ref{3figs} contains two top `subfigures' and
+% figure~\ref{3figs-c}.$\!$\footnotemark
+% \end{minipage}^
+% \vspace{4pt}^
+% \end{minipage}}
+% \vspace{-5pt}^
+% \end{figure}
+% \footnotetext{In this and later boxed figures, the boxes are intended to
+% represent a portion of the page in which the figure occurs. This is
+% usually to show the figure along with some text or to show the effect
+% of some option on multiple pages.}
+%
+% \begin{verbatim}
+% \begin{figure}%
+% \centering
+% \subfigure[First.]{...}\qquad
+% \subfigure[Second figure.]{...}\\
+% \subfigure[Third.]{\label{3figs-c}...}%
+% \caption{Three subfigures.}
+% \label{3figs}
+% \end{figure}
+% ...
+% Figure~\ref{3figs} contains two top `subfigures' and
+% figure~\ref{3figs-c}.
+% \end{verbatim}
+%
+% \subsection{A More Advanced Example}
+%
+% A second example, shown in figure~\ref{fig:ex2}, demonstrates how to
+% change the subfigure labels and have the subfigure captions printed in
+% the List-of-Figures.
+%
+% The first |\renewcommand| changes the reference to |\thesubfigure| to
+% return both the figure number and the subfigure number separated with
+% a period. The next two |\renewcommand|'s turn off the |\p@subfigure|
+% (since it is now included in |\thesubfigure| and adds the colon and
+% space to the subfigure label. Later in the file, the
+% \Lcount{lofdepth} is set to ``2'' so allow the subfigure captions to
+% show and the |\listoffigures| is loaded. Finally, the \Lenv{figure}
+% is defined and a little following text is given that refers to it.
+%
+% \begin{verbatim}
+% \renewcommand{\thesubfigure}{\thefigure.\arabic{subfigure}}
+% \makeatletter
+% \renewcommand{\p@subfigure}{}
+% \renewcommand{\@thesubfigure}{\thesubfigure:\hskip\subfiglabelskip}
+% \makeatother
+% ...
+% \setcounter{lofdepth}{2}
+% \listoffigures
+% ...
+% \begin{figure}%
+% \centering
+% \subfigure[First.]{%
+% \label{fig:first}%
+% ...}%
+% \qquad
+% \subfigure[Second.]{%
+% \label{fig:second}%
+% ...}%
+% \caption{Two subfigures.}
+% \end{figure}
+% ...
+% See figures~\ref{fig:first} and \ref{fig:second}.
+% \end{verbatim}%
+%
+% \begin{figure}^
+% \centering
+% \fboxsep=-\fboxrule
+% \renewcommand{\thesubfigure}{\thefigure.\arabic{subfigure}}^
+% \makeatletter
+% \renewcommand{\p@subfigure}{}^
+% \renewcommand{\@thesubfigure}{\thesubfigure:\hskip\subfiglabelskip}^
+% \makeatother
+% \fbox{^
+% \begin{minipage}{4.0in}^
+% \centering
+% \begin{minipage}{3.5in}^
+% \setcounter{lofdepth}{2}^
+% \vspace{.1in}^
+% \section*{ List of Figures}^
+% \vspace{-15pt}^
+% \hspace{40pt}\dots
+% \vspace{3pt}^
+% \contentsline{figure}{\numberline{\ref{fig:ex2}}^
+% {\ignorespaces Two subfigures.}}{\pageref{fig:ex2}}^
+% \contentsline{subfigure}{\numberline{\ref{fig:first}}^
+% {\ignorespaces First.}}{\pageref{fig:first}}^
+% \contentsline{subfigure}{\numberline{\ref{fig:second}}^
+% {\ignorespaces Second.}}{\pageref{fig:second}}^
+% \hspace{40pt}\dots
+% \vspace{8pt}^
+% \end{minipage}^
+% \end{minipage}}\\
+% \fbox{^
+% \begin{minipage}{4.0in}^
+% \centering
+% \begin{minipage}{3.5in}^
+% \subfigtopskip=3pt^
+% \subfigcapskip=-2pt^
+% \abovecaptionskip=5pt^
+% \vspace{10pt}^
+% \centering
+% \subfigure[First.]{^
+% \label{fig:first}^
+% \fbox{\hbox to 22mm{\vbox to 15mm{\vfil\null}\hfil}}}^
+% \hspace{14pt}^
+% \subfigure[Second.]{^
+% \label{fig:second}^
+% \fbox{\hbox to 22mm{\vbox to 15mm{\vfil\null}\hfil}}}\\
+% \caption{Two subfigures.}^
+% \label{fig:ex2}^
+% \rr
+% \vspace{15pt}^
+% See figures~\ref{fig:first} and \ref{fig:second}.
+% \vspace{4pt}^
+% \end{minipage}^
+% \end{minipage}}^
+% \vspace{-8pt}
+% \end{figure}
+% \vspace{-12pt}^finalhack
+%
+% \subsection{An Example Without Subcaption Text}
+% \label{sec:ex3}
+%
+% The last example, shown in figure~\ref{fig:ex3}, demonstrates a
+% \DescribeMacro{\subref}
+% \DescribeMacro{\Subref}
+% \enlargethispage{12pt}
+% commonly required format where the subfigure are just labeled and the
+% description occurs in the main caption. This is easy to do by using
+% the ``empty'' optional caption arguments ``[\space ][\space ]''. This
+% creates a label for the subfigure in the text, but it does not show on
+% the List-of-Figures page. However, by default the caption may not be
+% perfectly centered, so |\subfiglabelskip| is reduced to zero points to
+% ensure that there is not any extra space hidden in the subcaption. To
+% refer to the subfigure label within the text or the main caption, you
+% can use the |\subref| command, which is similar to the |\ref| command,
+% but does not carry the figure number. (The |\Subref| command is the
+% same but sets it with |\subcaplabelfont|).
+%
+% \begin{figure}^
+% \centering
+% \fboxsep=-\fboxrule
+% \subfiglabelskip=0pt
+% \fbox{^
+% \begin{minipage}{4.0in}^
+% \centering
+% \begin{minipage}{3.5in}^
+% \setcounter{lofdepth}{2}^
+% \vspace{.1in}^
+% \section*{ List of Figures}^
+% \vspace{-15pt}^
+% \hspace{40pt}\dots
+% \vspace{3pt}^
+% \contentsline{figure}{\numberline{\ref{fig:ex3}}^
+% {\ignorespaces A set of four subfigures.}}^
+% {\pageref{fig:ex3}}^
+% \hspace{40pt}\dots
+% \vspace{8pt}^
+% \end{minipage}^
+% \end{minipage}}\\
+% \fbox{^
+% \begin{minipage}{4.0in}^
+% \centering
+% \begin{minipage}{3.5in}^
+% \subfigtopskip=3pt^
+% \subfigcapskip=-2pt^
+% \subfigbottomskip=3pt^
+% \abovecaptionskip=5pt^
+% \vspace{7pt}^
+% \centering
+% \makeatletter
+% \subfigure[][]{^
+% \label{fig:ex3-a}^
+% \fbox{\hbox to 1.2in{\vbox to 15mm{\null\vfil}\hfil}}}%
+% \hspace{8pt}%
+% \subfigure[][]{^
+% \label{fig:ex3-b}^
+% \fbox{\hbox to 1.2in{\vbox to 15mm{\null\vfil}\hfil}}}\\
+% \subfigure[][]{^
+% \label{fig:ex3-c}^
+% \fbox{\hbox to 1.2in{\vbox to 15mm{\null\vfil}\hfil}}}%
+% \hspace{8pt}%
+% \subfigure[][]{^
+% \label{fig:ex3-d}^
+% \fbox{\hbox to 1.2in{\vbox to 15mm{\null\vfil}\hfil}}}%
+% \caption[A set of four subfigures.]{A set of four subfigures:
+% \subref{fig:ex3-a} describes the first subfigure;
+% \subref{fig:ex3-b} describes the second subfigure;
+% \subref{fig:ex3-c} describes the third subfigure; and,
+% \subref{fig:ex3-d} describes the last subfigure.}^
+% \label{fig:ex3}^
+% \rr
+% \vspace{15pt}^
+% The text references the main figure as figure~\ref{fig:ex3}
+% or part of it as figures~\ref{fig:ex3-a}--\subref{fig:ex3-c}.
+% \vspace{4pt}^
+% \end{minipage}^
+% \end{minipage}}^
+% \vspace{-12pt}
+% \end{figure}
+%
+% \enlargethispage{12pt}
+% \begin{verbatim}
+% \subfiglabelskip=0pt
+% ...
+% \listoffigures
+% ...
+% \begin{figure}%
+% \centering
+% \subfigure[][]{%
+% \label{fig:ex3-a}%
+% ...figure code...}%
+% \hspace{8pt}%
+% \subfigure[][]{%
+% \label{fig:ex3-b}%
+% ...figure code...}\\
+% \subfigure[][]{%
+% \label{fig:ex3-c}%
+% ...figure code...}%
+% \hspace{8pt}%
+% \subfigure[][]{%
+% \label{fig:ex3-d}%
+% ...figure code...}%
+% \caption[A set of four subfigures.]{A set of four subfigures:
+% \subref{fig:ex3-a} describes the first subfigure;
+% \subref{fig:ex3-b} describes the second subfigure;
+% \subref{fig:ex3-c} describes the third subfigure; and,
+% \subref{fig:ex3-d} describes the last subfigure.}%
+% \label{fig:ex3}%
+% \end{figure}
+% ...
+% The text references the main figure as figure~\ref{fig:ex3} or part
+% of it as figures~\ref{fig:ex3-a}--\subref{fig:ex3-c}.
+% \end{verbatim}%
+%
+% \section{Customization}
+% \label{sec:customization}
+%
+% The following sections describe the internal parameters used by the
+% \Lpack{subfigure} package to define the layout of the subfigures
+% or tables, as well as the labels and captions the accompany them.
+% In addition, adjustments to the entries on a ``List-of'' page and
+% the addition of new \Lenv{float} environments are described.
+%
+% Adjusting these values allows extensive customization of the
+% \Lpack{subfigure} package. If you want to customize the package, an
+% alternative to actually changing the code is to create a a file called
+% \Lfile{subfigure.cfg} and place it anywhere that \LaTeX\ will look for
+% classes or packages. Any changes placed in the file will affect the
+% predefined parameters and you can override the default settings. Any
+% user options will be processed after this file is loaded.
+%
+% In order to change the major commands in the \Lpack{subfigure} package
+% with this configure file, you will need to use the |\AtEndOfPackage|
+% command to defer that portion of your changes until the end of the
+% package.
+%
+% \subsection{Changing the Layout}
+% \enlargethispage{15pt}^finalhack
+% \label{sec:customlayout}
+%
+% \noindent
+% The layout of the |\subfigure| or |\subtable| is defined by several
+% internal values which may be changed to customize appearance of the
+% object. The following illustration shows the relationship of these
+% values. Figure~\ref{fig:layout-A} shows the standard layout with the
+% caption following the figure. The figure is vertically centered with
+% |\subfigtopskip| of space added above, then |\subfigcapskip| of
+% space is added below the figure followed by the subcaption and,
+% finally, |\subfigbottomskip| of space added at the bottom. The baseline
+% is located at the bottom of the figure. It is along this baseline that
+% adjacent subfigure boxes are aligned. Figure~\ref{fig:layout-C} shows
+% the case where the caption precedes the figure ({\it ie.\/},
+% |\subfiguretopcaptrue| or |\subtabletopcaptrue|). In this case the
+% various boxes and glue are reversed,$\!$\footnote{The \cmd{\subfigtopskip}
+% and \cmd{\subfigbottomskip} actually follow the \Lif{figuretopcap}
+% and \Lif{tabletopcap} flags, so that the actual top spacing used is
+% \cmd{\subfigtopskip} when the flags are {\bf false} and
+% \cmd{\subfigbottomskip} when they are {\bf true}.}
+% except that the |\subfigcapskip| is increased by |\subfigcaptopadj|.
+% The other two cases, figures~\ref{fig:layout-B} and
+% \subref{fig:layout-D}, show the cases where there is no caption. Note
+% that the |\subfigcapskip| is left out when there is no caption.
+% Note also, for all of these cases, that the space at the top of the
+% subfigure is automatically removed for items that are the first box
+% in a vertical list or other than the first box in a horizontal list.
+% This allows tighter packing of the subfigures and the full use of
+% the page or \Lenv{minipage}.
+%
+% Each of these values |\subfigtopskip|, |\subfigcapskip|, and
+% |\subfigbottomskip|; as well as |\subfigcapmargin| and
+% |\subfiglabelskip| (the latter not shown in figure~\ref{fig:layout})
+% may be changed from their defaults (see
+% table~{\PrintIfDefined{tab:defaults}{\ref{tab:defaults}}{\ref{tab:spacing}}})
+% to adjust the subfigure for the current layout style. In addition,
+% they may all assume negative values, which in some cases may solve
+% problems with the layout. Even though these constants are ``skips'',
+% only the last two (|\subfigcapmargin| and |\subfiglabelskip|) will
+% shrink or expand since the others assume their natural size in the
+% subfigure box and are fixed at that size.
+%
+% \begin{figure}[p]
+% \subfigtopskip=10pt^
+% \subfigcapskip=4pt^
+% \subfigbottomskip=12pt^
+% \abovecaptionskip=3pt^
+% \centering
+% \fboxsep=-\fboxrule
+% \newbox{\tempbox}
+% \newdimen{\tempdima}
+% \newdimen{\tempdimb}
+% \setbox\tempbox\hbox{
+% $\stackrel{\longleftrightarrow}{\cs{subfigcapmargin}}$}
+% \setbox\tempbox\hbox{\cs{subfigcapmargin}}
+% \tempdimb \wd\tempbox
+% \setbox\tempbox\hbox to \tempdimb{^
+% \kern -.5mm\hbox{$\leftarrow$}\kern -.5mm^
+% \leaders\hrule width1pt height2.6pt depth-2.2pt\hfill
+% \kern -.13mm$\rightarrow$}
+% \tempdima \wd\tempbox
+% \advance\tempdima 1mm
+% \tempdimb \tempdima
+% \multiply\tempdimb -2
+% \advance\tempdimb 4.5in
+% \advance\tempdimb -4mm
+% \subfigure[Standard layout {[FIGBOTCAP] or [TABBOTCAP]}.]{
+% \label{fig:layout-A}
+% \fbox{\parbox{4.5in}{
+% \vspace{1pt}
+% \hbox to 4.5in{
+% \hspace{1.5in}
+% $\left\updownarrow\vrule width0pt height11pt depth1pt\right.$
+% (\cs{subfigtopskip})
+% \hfil}
+% \fbox{\vbox to 45pt{
+% \vskip1pt
+% \vskip\baselineskip
+% \vfil
+% \hbox to 4.5in{
+% \hfil
+% {\scshape subfigure} or {\scshape subtable}
+% \hfil}
+% \vfil
+% \vbox to 0pt{%
+% \vss
+% \hbox to 4.5in{
+% \hspace{9pt}
+% {\small Baseline}
+% \hfil}}
+% \vspace{1pt}}}
+% \hbox to 4.5in{
+% \hspace{1.5in}
+% $\left\updownarrow\vrule width0pt height11pt depth1pt\right.$
+% \cs{subfigcapskip}
+% \hfil}
+% \hbox to 4.5in{
+% \hbox to\tempdima{
+% \vbox to 20pt{
+% \vfil
+% \copy\tempbox
+% \vfil
+% \hbox{\kern .5mm\cs{subfigcapmargin}}
+% \vfil}}
+% \fbox{\vbox to 20pt{
+% \vfil
+% \hbox to\tempdimb{
+% \hfil
+% {\scshape subcaption}
+% \hfil}
+% \vfil}}
+% \hbox to\tempdima{
+% \vbox to 20pt{
+% \vfil
+% \copy\tempbox
+% \vfil
+% \hbox{\kern .5mm\cs{subfigcapmargin}}
+% \vfil}}
+% \hfill}
+% \hbox to 4.5in{
+% \hspace{1.5in}
+% $\left\updownarrow\vrule width0pt height11pt depth1pt\right.$
+% \cs{subfigbottomskip}
+% \hfil}}}}
+%
+% \subfigure[Standard layout {[FIGBOTCAP] or [TABBOTCAP]} with no
+% caption present.]{
+% \label{fig:layout-B}
+% \fbox{\parbox{4.5in}{
+% \vspace{1pt}
+% \hbox to 4.5in{
+% \hspace{1.5in}
+% $\left\updownarrow\vrule width0pt height11pt depth1pt\right.$
+% (\cs{subfigtopskip})
+% \hfil}
+% \fbox{\vbox to 45pt{
+% \vskip1pt
+% \vskip\baselineskip
+% \vfil
+% \hbox to 4.5in{
+% \hfil
+% {\scshape subfigure} or {\scshape subtable}
+% \hfil}
+% \vfil
+% \hbox to 4.5in{
+% \hspace{9pt}
+% {\small Baseline}
+% \hfil}
+% \vspace{1pt}}}
+% \hbox to 4.5in{
+% \hspace{1.5in}
+% $\left\updownarrow\vrule width0pt height11pt depth1pt\right.$
+% \cs{subfigbottomskip}
+% \hfil}}}}
+%
+% \subfigure[Reversed layout {[FIGTOPCAP] or [TABTOPCAP]}.]{
+% \label{fig:layout-C}
+% \fbox{\parbox{4.5in}{
+% \vspace{1pt}
+% \hbox to 4.5in{
+% \hspace{1.5in}
+% $\left\updownarrow\vrule width0pt height11pt depth1pt\right.$
+% (\cs{subfigbottomskip})
+% \hfil}
+% \hbox to 4.5in{
+% \hbox to\tempdima{
+% \vbox to 20pt{
+% \vfil
+% \copy\tempbox
+% \vfil
+% \hbox{\kern -.5mm\cs{subfigcapmargin}}
+% \vfil}}
+% \fbox{\vbox to 20pt{
+% \vfil
+% \hbox to\tempdimb{
+% \hfil
+% {\scshape subcaption}
+% \hfil}
+% \vfil}}
+% \hbox to\tempdima{
+% \vbox to 20pt{
+% \vfil
+% \box\tempbox
+% \vfil
+% \hbox{\kern -.5mm\cs{subfigcapmargin}}
+% \vfil}}
+% \hfill}
+% \hbox to 4.5in{
+% \hbox to 0pt{
+% \hspace{9pt}
+% \smash{\raisebox{-6.5pt}{\small Baseline}}
+% \hss}
+% \hspace{1.5in}
+% $\left\updownarrow\vrule width0pt height11pt depth1pt\right.$
+% \cs{subfigcapskip}$+$\cs{subfigcaptopadj}
+% \hfil}
+% \fbox{\vbox to 45pt{
+% \vfil
+% \hbox to 4.5in{
+% \hfil
+% {\scshape subfigure} or {\scshape subtable}
+% \hfil}
+% \vfil}}
+% \hbox to 4.5in{
+% \hspace{1.5in}
+% $\left\updownarrow\vrule width0pt height11pt depth1pt\right.$
+% \cs{subfigtopskip}
+% \hfil}}}}
+%
+% \subfigure[Reversed layout {[FIGTOPCAP] or [TABTOPCAP]} with no
+% caption present.]{
+% \label{fig:layout-D}
+% \fbox{\parbox{4.5in}{
+% \vspace{1pt}
+% \hbox to 4.5in{
+% \hbox to 0pt{
+% \hspace{9pt}
+% \smash{\raisebox{-6.5pt}{\small Baseline}}
+% \hss}
+% \hspace{1.5in}
+% $\left\updownarrow\vrule width0pt height11pt depth1pt\right.$
+% (\cs{subfigbottomskip})
+% \hfil}
+% \fbox{\vbox to 45pt{
+% \vfil
+% \hbox to 4.5in{
+% \hfil
+% {\scshape subfigure} or {\scshape subtable}
+% \hfil}
+% \vfil}}
+% \hbox to 4.5in{
+% \hspace{1.5in}
+% $\left\updownarrow\vrule width0pt height11pt depth1pt\right.$
+% \cs{subfigtopskip}
+% \hfil}}}}
+% \caption{Subfigure and subtable layout.}
+% \label{fig:layout}
+% \end{figure}
+%
+% \subsection{Adjusting the Subcaption}
+% \label{sec:customlabel}
+%
+% The subfigure label has three forms. The first is the one that
+% \DescribeMacro{\subref}
+% \DescribeMacro{\Subref}
+% appears in the text when you use the |\ref| command; the second is the
+% one that appears on the List-of-Figures page and may be used to
+% reference individual subfigures within the figure and subfigure captions,
+% using the |\subref| or |\Subref| commands; and the third is the fully
+% formatted version used under the subfigure as the label part of the caption.
+%
+% The |\ref| command yields the string, saved by the |\label| command,
+% composed by concatenating the value of |\p@subfigure| to
+% |\thesubfigure|. By default these are defined by: ``|\thefigure|''
+% and ``|(\alph{subfigure})|'', respectively, which produces a reference
+% of the figure number followed by the subfigure letter in parentheses.
+%
+% The label used on the List-of-Figures page may be retrieved with the
+% |\subref| command (this value is saved by the |\label| command when
+% the |\label| command is used within the scope of the subfigure. This is
+% the string defined by |\@@thesubfigure|, which, by default, is the
+% value ``|\thesubfigure|'' (or ``|(\alph{subfigure})|'').
+%
+% The label used with the subcaption text is defined by the internal
+% value |\@thesubfigure|, which, by default, has the
+% value\hfil\null\linebreak
+% \centerline{``\cmd{\thesubfigure}\cmd{\hskip}\cmd{\subfiglabelskip}''.}
+% It is prefixed by |\subcapsize\subcaplabelfont| and followed by the
+% subcaption text which is set with |\subcapfont|.
+%
+% \changes{v2.1.4}{30 Apr 2002}{Changed the label and caption defaults
+% from \cmd{\rmfamily}\cmd{\mdseries}\cmd{\upshape} to
+% \cmd{\familydefault}\cmd{\seriesdefault} \cmd{\shapedefault}.}
+% Note that by default |\subcaplabelfont| has the default value
+% ``|{\familydefault| |\seriesdefault\shapedefault}|''. The package
+% options described in table~\ref{tab:options} allow you to set these
+% values for your paper. If you update the |\@subfigure| command, you
+% should include any separator character or spacing between the label
+% and the start of the subcaption text. The default is
+% |\hskip\subfiglabelskip| placed after the label.
+%
+% Finally, the text of the subcaption is prefixed by |\subcapfont| which
+% may be changed using the set of nine lower-case font options described
+% in table~\ref{tab:options}\@.$\!$\footnote{It is also prefixed by
+% \cmd{\subcapsize} as part of the overall label and caption.} \ One other
+% way of changing the layout of the lapel and caption is by replacing
+% the |\@makesubfigurecaption| or |\@makesubtablecaption| command (which
+% by default are identical).
+%
+% \subsection{Adjusting the Subfigure and Subtable Counters}
+% \label{sec:counters}
+%
+% To create some special effects, such as continuing the subfigure
+% \DescribeMacro{\c@figure}
+% \DescribeMacro{\c@table}
+% numbering across several pages as part of one long continued figure,
+% you can back off the number change from a caption with the command:
+% \begin{quote}
+% |\addtocounter{|\Lcount{figure}|}{|-1|}|
+% \end{quote}
+% within the \Lenv{figure} environment. In addition, you can adjust for
+% previous subfigures or subtables with one of the following (here
+% we assume that two subfigures or subtables appeared in the previous
+% pages:
+% \begin{quote}
+% |\addtocounter{|\Lcount{subfigure}|}{|2|}|
+% \end{quote}
+% \vspace{-5pt}
+% \noindent
+% or
+% \vspace{-5pt}
+% \begin{quote}
+% |\addtocounter{|\Lcount{subtable}|}{|2|}|.
+% \end{quote}
+%
+% Two other things that may be necessary, if you switch between figures
+% and tables in the same \Lenv{figure} environment ({\it e.g.\/}, by
+% changing |\@captype|, see section~\ref{sec:float_env}), is to add the
+% command |\listsubcaptions| following the last subfigure when the
+% subfigure is using the \Lopt{TOPCAP} or \Lopt{topcap} option. This is
+% necessary to flush the list of subcaptions before the next
+% \Lenv{subfigure} or \Lenv{subtable}. This also may be necessary if
+% you switch between |\figuretopcaptrue| and |\figuretopcapfalse|. The
+% other thing that may be required in some cases, is to reset the
+% subfigure counter by entering:
+% \begin{quote}
+% |\setcounter{|\Lcount{subfigure}|}{|0|}|
+% \end{quote}
+% \noindent
+% This should only be necessary if you are dynamically switching between
+% different \Lpack{subfigure} options, or changing the |\@captype|,
+% within a float environment.
+%
+% \subsection{Modifying the List-of-Figures and List-of-Tables}
+% \label{sec:listof}
+%
+% To generate a List-of-Figures, or List-of-Tables, page you need to
+% \DescribeMacro{\l@subfigure}
+% \DescribeMacro{\@dottedxxxline}
+% add a |\listoffigures| or |\listoftables| command where
+% you want the list to appear. These
+% commands also cause the appropriate captions and subcaptions to be
+% written to a file with the extensions \Lfile{lof} (\Lfile{lot}). If
+% you want the subcaption text to appear in the List-of-Figures or
+% List-of-Tables page, you need to change the value of the counter
+% \Lcount{lofdepth} (\Lcount{lotdepth}) counter from its default of `1'.
+% For example, to have the \Lpack{subfigure} subcaptions to appear on
+% the List-of-Figures, add the following to the preamble of your
+% paper:
+% \begin{quote}
+% |\setcounter{|\Lcount{lofdepth}|}{2}|
+% \end{quote}
+%
+% If you want to change how the subcaption appears on the ``List-of''
+% pages you can change its format by redefining the |\l@subfigure|
+% or |\l@subtable| command. Usually you will want to use the
+% |\@dottedxxxline| command
+% \PrintIfDefined{sec:dl}{(section~\ref{sec:dl},
+% page~\pageref{sec:dl})\space}{} to help with the formatting. For
+% instance the default value of |\l@subfigure| is:
+%
+% \begin{verbatim}
+% \newcommand{\l@subfigure}{%
+% \@dottedxxxline{\ext@subfigure}{2}{3.8em}{2.5em}}
+% \end{verbatim}
+% \vspace{-10pt}
+%
+% \noindent
+% The arguments of the |\@dottedxxxline| command are:
+% \begin{quote}
+% \begin{enumerate}
+% \itemsep -\parsep
+% \item \underline{\smash{\textsf{Type}}}. The usual values are
+% : \Lfile{lof} or \Lfile{lot}. The internal
+% values |\ext@subfigure| and |\ext@subtable| stand for
+% these extensions.
+% \item \underline{\textsf{Level}}. By default this is `2'
+% for the \Lcount{subfigure} and \Lcount{subtable}. If the level
+% is greater than \Lcount{\meta{Type}depth} (where
+% \underline{\smash{\meta{Type}}} is the first argument, above),
+% then no line is produced.
+% \item \underline{\textsf{Indent}}. Total indentation
+% from the left margin.
+% \item \underline{\textsf{Numwidth}}. Width of box for the
+% label number if the \underline{\textsf{Title}} has a
+% |\numberline| command. This is also the amount of extra
+% indentation added to second and later lines of a multiple
+% line entry.
+% \item \underline{\textsf{Title}}. Contents of entry ({\it e.g.\/} the
+% \meta{list\_entry} or \meta{subcaption}).
+% \item \underline{\smash{\textsf{Page}}}. The page number of the
+% figure or table.
+% \end{enumerate}
+% \end{quote}
+%
+% \noindent
+% The final two arguments, \underline{\textsf{title}} and
+% \underline{\smash{\textsf{page}}}, are automatically appended to the
+% value of |\l@subfigure| (and symmetrically for |\l@subtable|).
+%
+% For example, to change the amount of space reserved for the label
+% (if, for instance, you have a lot of figures and the and you need extra
+% space for the figure number) you could widen the
+% \texttt{2.5em} space for the label to \texttt{4.0em}:
+% \begin{verbatim}
+% \makeatletter
+% \renewcommand{\l@subfigure}{%
+% \@dottedxxxline{\ext@subfigure}{2}{3.8em}{4.0em}}
+% \makeatother
+% \end{verbatim}
+%
+% \subsection{Aligning Captions Above the Figure}
+% \label{sec:custom-position}
+%
+% \begin{figure}^
+% \figuretopcaptrue
+% \subfigtopskip=-5pt^
+% \subfigcapskip=-3pt^
+% \subfigbottomskip=2pt^
+% \centering
+% \caption{Caption position option: [\Lopt{figtopcap}] with changing
+% settings of \cmd{\subfiguretopcap}.}^
+% \label{fig:position3}^
+% \subfiguretopcapfalse
+% \subfigure[First caption.]{\hbox to 1.5in{\hfil\null}}^
+% \hspace{0.2in}^
+% \subfigure[Second long, long, long, long,
+% long, long, long, long caption.]{^
+% \hbox to 1.5in{\hfil\null}}\\[5pt]
+% \subfiguretopcaptrue
+% \subfigure{\fbox{\hbox to 1.5in{\vbox to 15mm{\vfil\null}\hfil}}}^
+% \hspace{0.2in}^
+% \subfigure{\fbox{\hbox to 1.5in{\vbox to 10mm{\vfil\null}\hfil}}}^
+% \setcounter{subfigure}{0}
+% \end{figure}
+%
+% \noindent
+% For unbalanced sets of captions placed, above the figures or tables,
+% \DescribeMacro{\subfiguretopcaptrue}
+% \DescribeMacro{\subfiguretopcapfalse}
+% \DescribeMacro{\figuretopcaptrue}
+% the caption portion looks unbalanced, such as the ones in
+% figure~\ref{fig:position2}. If you prefer to have the caption portion
+% aligned along the top rather than the bottom, as shown in
+% figure~\ref{fig:position3}, you can use the
+% \Lopt{figtopcap} option as in figure~\ref{fig:position2}, but use
+% two ``empty'' subfigures to position the captions followed by
+% two more containing the figures, but without captions. The code
+% to produce this example is:
+%
+% \begin{verbatim}
+% \begin{figure}%
+% \centering
+% \caption{Caption position option: [\Lopt{figtopcap}] with changing
+% settings of \subfiguretopcap.}%
+% \label{fig:position3}%
+% \subfiguretopcapfalse
+% \subfigure[First caption.]{\hbox to 1.5in{\hfil\null}}%
+% \hspace{0.2in}%
+% \subfigure[Second long, long, long, long,
+% long, long, long, long caption.]{%
+% \hbox to 1.5in{\hfil\null}}\\[5pt]
+% \subfiguretopcaptrue
+% \subfigure{\fbox{\hbox to 1.5in{\vbox to 15mm{\vfil\null}\hfil}}}%
+% \hspace{0.2in}%
+% \subfigure{\fbox{\hbox to 1.5in{\vbox to 10mm{\vfil\null}\hfil}}}%
+% \end{figure}
+% \end{verbatim}
+%
+% This example makes use of one of the four flags that control how the
+% caption labels are numbered and where the subcaption appears. Two are
+% for |\subfigure| and two for |\subtable|. The first of each set tell
+% the |\subfigure| or |\subtable| command that the related main caption
+% appears before or after the set of subfloats. |\figuretopcaptrue| and
+% |\tabletopcaptrue| indicate that the caption appears before and
+% |\figureotopcapfalse| and |\tabletopcapfalse| indicate that the it
+% appears after. The other two flags force the subcaption to be placed
+% before (|\subfiguretopcaptrue| and |\subtabletopcaptrue|) or after the
+% actual subfigure or subtable (|\subfiguretopcapfalse| and
+% |\subtabletopcapfalse|).
+%
+% There are two difficulties with this approach, first, you need to keep
+% changing the setting of |\subfiguretopcap|, and second, if you have
+% more than one row of subfigures or subtables, then you will need to
+% fiddle with the counter (see section~\ref{sec:counters} to keep the
+% numbers straight. The reason that this format is not supported by the
+% \Lpack{subfigure} package is that you need information about all of
+% the subfigure or subtables on a row to box the figures correctly and
+% this information is not available locally.
+%
+% \subsection{Adding Subfloats to New Environments}
+% \enlargethispage{15pt}^finalhack
+% \label{sec:customfloat}
+%
+% It is easy to add a \Lenv{subfloat} command to a new environment. For
+% instance, let us assume we have a new \Lenv{float}
+% environment\footnote{For information on creating new float
+% environments, see any of the following: \cite{Lamp01}, \cite{Wils01}
+% or \cite{Ling01}.} called ``\Lenv{map}'' in which various maps are
+% displayed and for which a List-of-Maps is to be generated in the
+% contents section. If we wanted to have \Lenv{submaps}, then we could
+% define the following:
+%
+% \vspace{-4pt}
+% \begin{verbatim}
+% \makeatletter
+% \newcounter{submap}[map]
+% \newif\ifmaptopcap
+% \newif\ifsubmaptopcap
+% \newcommand{\p@submap}{\themap}
+% \newcommand{\thesubmap}{(\alph{submap})}
+% \newcommand{\@thesubmap}{\themap\hskip\subfiglabelskip}
+% \newcommand{\@@thesubmap}{\themap}
+% \newcommand{\ext@submap}{\ext@map}
+% \newcommand{\l@submap}{\@dottedxxxline{\ext@submap}{2}{3.8em}{2.5em}}
+% \newcounter{lomdepth}
+% \setcounter{lomdepth}{1}
+% \newcommand{\submap}{\subfigure}
+% \newcommand{\@makesubmapcaption}{\@makesubfigurecaption}
+% \ifhyperrefloaded
+% \newcommand\theHsubmap{\themap.\arabic{submap}}
+% \newcommand{\toclevel@submap}{1}
+% \fi
+% \makeatother
+% \end{verbatim}
+% \vspace{-14pt}
+%
+% The first and last lines make the character `@' act like a letter
+% between them and therefore it may be part of a command name used there.
+% First a new counter for the \Lpack{submap} is created along with two
+% conditionals that define where the position ({\i.e.\/}, above or
+% below) of the main caption and subcaption is with respect to the
+% submap. Then the four commands that define the \Lpack{submap} label
+% are created. The first two, |\p@submap| and |\thesubmap| define the
+% standard label returned by |\ref|. The next, |\@thesubmap| gives the
+% label as shown under or over the submap with the subcaption and the
+% last, |\@@thesubmap| shows how the label is displayed on the List-of-Maps
+% and/or referenced with the |\subref| command.
+%
+% The next four lines show where and how to print to the List-of-Maps
+% page: |\ext@submap| gives the List-of-Maps file extension; |\l@submap|
+% shows how to print the submap line on the List-of-Maps page; and the last
+% two lines show how to create and set the counter \Lcount{lomdepth}, which
+% controls how many caption levels are shown on the page when it is printed.
+%
+% The next two lines create the |\submap| and |\@makesubmapcaption|
+% commands by making them the same as the |\subfigure| and
+% |\@makesubfigurecaption| commands.
+%
+% The last four lines conditionally create the |\theHsubmap| and
+% |\toclevel@submap| commands which are used by the \Lpack{hyperref}
+% Package to name the item and to control the presence of the item
+% bookmark.
+%
+% Of course, this is where the \Lpack{ccaption} package \cite{Wils01}
+% comes in handy since it will do all of the above with one command:
+%
+% \vspace{-4pt}
+% \begin{verbatim}
+% \newsubfloat{map}
+% \end{verbatim}
+% \vspace{-10pt}
+%
+%
+% \subsection{Interaction with Other Parts of \LaTeX}
+% In the following sections, the interaction of the \Lpack{subfigure}
+% package with other parts of \LaTeX\ is documented. These ``other
+% parts'' may be either part of the the \LaTeX\ base or contributed
+% packages or classes.
+%
+% \subsubsection{\TeX 's ``Mouth''}
+% The most important thing to remember when laying out your figures
+% within a \Lenv{float} environment is that spaces take room. If you
+% have an extra space between two figures, then they will be separated
+% by a little bit.
+%
+% \TeX 's state varies as it reads a line of text from a file. It
+% ignores some spaces and carriage-returns and converts others to
+% |\space|'s or |\par|'s. You can use a `|%|' to insure that you only
+% have real spaces where you want them. To understand which spaces
+% are significant, you should read chapters~7 and 8 of the \TeX book
+% \cite{Knut86}. However, the main source of unexpected
+% extra spacing is carriage-returns which are turned in to |\space|'s.
+% As a general rule: if in doubt, then add a `|%|' immediately after
+% the last significant character of the line.
+%
+% \subsubsection{The Float Environment}
+% \label{sec:float_env}
+%
+% Although the \Lpack{subfigure} package was designed to work within a
+% \Lenv{float} environment ({\it e.g.\/}, \Lenv{figure} or
+% \Lenv{table}), it can be used outside with the following two caveats:
+% \begin{enumerate}\itemsep=5pt
+% \item You need to define |\@captype|. This is usually either
+% \Lenv{figure} or \Lenv{table}. For example add the following
+% to the preamble of your document:
+% \begin{verbatim}
+% \makeatletter
+% \newcommand{\change_cap_type}[1]{%
+% \renewcommand{\@captype}{#1}}
+% \makeatother
+% \end{verbatim}\vspace{-15pt}
+% Then use the new command to switch in the middle of a given
+% \Lenv{float} environment, say from ``figure'' to ``table'' with
+% the command |\change_cap_type{table}|.
+% \item If you want to define references using |\label|, then you also
+% need to redefine the \LaTeX\ internal |\@currentlabel|. For
+% example:
+% \begin{verbatim}
+% \makeatletter
+% \edef\@currentlabel{\p@subfigure\thesubfigure}
+% \makeatother
+% \end{verbatim}\vspace{-15pt}
+% before using the |\label| command. NOTE: Many other commands change
+% |\@currentlabel|, including all of the ``section'' commands,
+% |\caption|, \Lenv{equation}'s, and \Lenv{theorem}'s.
+% \end{enumerate}
+%
+% \subsubsection{Interaction with Other Packages}
+%
+% \changes{v2.1}{22 Jan 2001}{Added \Lpack{ccaption} reference.}
+%
+% \changes{v2.1}{11 Oct 1996}{Revised subsubsection on use with
+% the caption package and extended this section to talk about the
+% \Lpack{captcont} package.}
+%
+% \noindent
+% The only packages that directly interact with the \Lpack{subfigure}
+% package are the \Lpack{caption}/\Lpack{caption2} packages by
+% H.A. Sommerfeldt \cite{Somm95a,Somm95b}, the \Lpack{ccaption} package
+% and \Lpack{tocloft} packages by Peter Wilson \cite{Wils01,Wils01B},
+% and the \Lpack{captcont} package by S.D. Cochran \cite{Coch02}.
+%
+% \paragraph{\Lpack{caption}}
+%
+% If you load the \Lpack{subfigure} package {\bf before} the
+% \Lpack{caption} package, then the \Lpack{caption} package will detect
+% that fact and will change the |\subcapsize| when the options
+% \Lopt{scriptsize}, \ldots, \Lopt{Large} are specified (overriding such
+% options used when loading the \Lpack{subfigure} package). In
+% addition, it redefines |\@thesubfigure| and |\@thesubtable| to use
+% |\captionlabelfont|. It also uses an older layout of
+% |\@thesubsubfigure| and |\@thesubtable|.
+%
+% The best plan is to load the \Lpack{caption} package {\bf before} the
+% \Lpack{subfigure} package. In addition, you should try to coordinate
+% the ``look and feel'' of the two packages. This limits you a little
+% since, although the two packages have similar options, the options in
+% the \Lpack{caption} package do not combine the same way. You can pick
+% one from each column:\par\null
+%
+% \DeleteShortVerb{\|}
+% \noindent\hfil\begin{tabular}{*{4}{p{17mm}|}p{17mm}}
+% \rr \Lopt{normal}, \Lopt{hang}, \Lopt{center}, \Lopt{centerlast} &
+% \rr \Lopt{nooneline} &
+% \rr \Lopt{scriptsize}, \Lopt{footnotesize}, \Lopt{small},
+% \Lopt{normalsize}, \Lopt{large}, \Lopt{Large} &
+% \rr \Lopt{up}, \Lopt{it}, \Lopt{sl}, \Lopt{sc}, \Lopt{md},
+% \Lopt{bf}, \Lopt{rm}, \Lopt{sf}, \Lopt{tt} &
+% \rr (Other options---see package.)
+% \end{tabular}
+% \MakeShortVerb{\|}
+% \vskip14pt
+%
+% \paragraph{\Lpack{caption2}}
+%
+% This package acts similarly to the \Lpack{caption} package. If you
+% specify the \Lopt{subfigure} it will try to support the subfigure
+% package, if you specify \Lopt{nosubfigure} than it will not. If
+% neither option is specified, than load order matters. If loaded
+% {\bf before} the \Lpack{subfigure} package, than it will not try to
+% support the package and if loaded {\bf after} it will.
+%
+% Again, the best plan is to load the \Lpack{caption2} package
+% {\bf before} the \Lpack{subfigure} package, and specify the
+% \Lopt{nosubfigure} option. In addition, you should try to coordinate
+% the ``look and feel'' of the two packages. This limits you a little
+% since, although the two packages have similar options, they are not
+% exactly the same; however, most of the good looking combinations are
+% easily available. You can pick one from each column:\par\null
+%
+% \DeleteShortVerb{\|}
+% \noindent\hfil\begin{tabular}{*{5}{p{17mm}|}p{17mm}}
+% \rr \Lopt{nosubfigure}, \Lopt{subfigure} &
+% \rr \Lopt{normal}, \Lopt{hang}, \Lopt{center}, \Lopt{centerlast}
+% \Lopt{flushleft}, \Lopt{indent} &
+% \rr \Lopt{oneline}, \Lopt{nooneline} &
+% \rr \Lopt{scriptsize}, \Lopt{footnotesize}, \Lopt{small},
+% \Lopt{normalsize}, \Lopt{large}, \Lopt{Large} &
+% \rr \Lopt{up}, \Lopt{it}, \Lopt{sl}, \Lopt{sc}, \Lopt{md},
+% \Lopt{bf}, \Lopt{rm}, \Lopt{sf}, \Lopt{tt}^,
+%^ \Lopt{UP}, \Lopt{IT}, \Lopt{SL}, \Lopt{SC}, \Lopt{MD},
+%^ \Lopt{BF}, \Lopt{RM}, \Lopt{SF}, \Lopt{TT}
+% &
+% \rr (Other options---see package.)
+% \end{tabular}
+% \MakeShortVerb{\|}
+%
+% \paragraph{\Lpack{ccaption}}
+%
+% The \Lpack{ccaption} package provides for all sorts of extensions and
+% style options for \Lenv{float} |\captions|. It also provides for the
+% use of the |\caption| command outside of a \Lenv{float} environment and
+% a mechanism for creating new types of \Lenv{float} environments.
+%
+% In order to use it with the \Lpack{subfigure} package, you need to
+% pass the \Lopt{subfigure} option when loading it:
+%
+% \begin{quote}
+% |\usepackage|[subfigure]\{ccaption\}
+% \end{quote}
+%
+% \paragraph{\Lpack{tocloft}}
+%
+% The \Lpack{tocloft} package gives the user the ability to easily
+% configure the ``List-of'' pages. It takes a \Lopt{subfigure} option
+% so it doesn't matter which package is loaded first.
+%
+% \begin{quote}
+% |\usepackage|[subfigure]\{tocloft\}
+% \end{quote}
+%
+% \paragraph{\Lpack{hyperref}}
+% \label{sec:hyperref}
+%
+% \changes{v2.1.2}{26 Mar 2002}{Improved coordination with the hyperref
+% package.}
+%
+% \changes{v2.1.1}{15 Mar 2002}{Added coordination with the hyperref
+% package. There is some interaction with the \cmd{label} command as
+% pointed out by Martin.Bernreuther@po.uni-stuttgart.de.}
+%
+% The \Lpack{hyperref} package extends the functionality of all of the
+% \LaTeX\ cross-referencing commands to produce hypertext links. In
+% addition, it provides new commands to allow the user to insert
+% hypertext links. When used with the \Lpack{subfigure} package, they
+% may be loaded in any order; however, it might be better if the
+% \Lpack{subfigure} package is loaded {\bf first}.
+%
+% To more fully support the \Lpack{hyperref} package, the |\label|
+% \DescribeMacro{\subfloat@label}
+% command, when used within the scope of the |\subfigure| or |\subtable|
+% commands takes an optional argument (note the parentheses rather than
+% square brackets):
+% \vspace{-2pt}
+% \begin{quote}
+% |\label|\parg{bookmark}\marg{key}
+% \end{quote}
+% \vspace{-2pt}
+%
+% \noindent
+% We would like to use the subcaption as the bookmark text, but the
+% |\label| command is often processed before the subcaption. Therefore,
+% this optional argument may be used to supply this information if
+% desired. By default a bookmark field of the form
+% ``Subfigure\textvisiblespace 1(a)'' will be generated.
+% \footnote{If the document class is \Lpack{report} or other class that
+% defines \cmd{\thechapter}, than the default bookmark field will be of the
+% form ``Subfigure\textvisiblespace 1 \textvisiblespace 1(a)''.}
+%
+%
+% \paragraph{\Lpack{captcont}}
+%
+% This package may be used with or without the \Lpack{subfigure} package
+% \DescribeMacro{\caption}
+% \DescribeMacro{\caption*}
+% \DescribeMacro{\captcont}
+% \DescribeMacro{\captcont*}
+% to extend figure or table numbering across multiple pages. This
+% package knows about how the \Lpack{subfigure} package interacts with
+% the List-of-Figures and List-of-Tables and does the right thing when
+% used with \Lenv{subfigure}'s and \Lenv{subtable}'s.
+%
+% The \Lpack{captcont} package may be loaded either {\bf before} or
+% {\bf after} the \Lpack{subfigure} and it has four options:
+% \Lopt{figbotcap} or \Lopt{figtopcap} and \Lopt{tabbotcap} or
+% \Lopt{tabtopcap}. These are the same as the \Lpack{subfigure}
+% options. When the \Lpack{captcont} package is used with the
+% \Lpack{subfigure} package, only the \Lpack{subfigure} options matter.
+% Any given with the \Lpack{captcont} package are ignored.
+%
+% The thing to remember about the \Lpack{captcont} package is that if
+% you normally place the |\caption| {\bf before} your subfigures or
+% subtables ({\it i.e.\/}, \Lopt{figtopcap} or \Lopt{tabtopcap}
+% respectively), then you start a series of continued \Lenv{figure}'s
+% with the |\caption[*]| and use |\contcapt[*]| in each of the rest of
+% the figures. If you {\bf follow} your subfigures or subtables with a
+% caption ({\it i.e.\/}, \Lopt{figbotcap} or \Lopt{tabbotcap}
+% respectively), then you start the series with the |\contcapt[*]| in
+% the first \Lenv{figure} environment and all but the last where you use
+% the |\caption[*]|.
+%
+% \subsubsection{Creating a \Lenv{subfigure} Environment}
+%
+% \changes{v2.1.4}{24 Apr 2002}{Added \cmd{\label} command handling
+% example in the \Lenv{subfloat} environment, thanks to Lars Clausen.}
+%
+% Some people have wanted to use the \Lenv{verbatim} environment within
+% \DescribeEnv{subfloat}
+% the \cmd{\subfigure} command and run into the restriction that the
+% \Lenv{verbatim} environment cannot be nested. To include verbatim text in
+% a subfigure, you can define a new environment, in which verbatim
+% text may be enclosed, and which calls the \cmd{\subfigure} command.
+% \vspace{-2pt}
+% \begin{verbatim}
+% \newbox\subfigbox % Create a box to hold the subfigure.
+% \makeatletter
+% \newenvironment{subfloat}% % Create the new environment.
+% {\def\caption##1{\gdef\subcapsave{\relax##1}}%
+% \let\subcapsave=\@empty % Save the subcaption text.
+% \let\sf@oldlabel=\label
+% \def\label##1{\xdef\sublabsave{\noexpand\label{##1}}}%
+% \let\sublabsave\relax % Save the label key.
+% \setbox\subfigbox\hbox
+% \bgroup}% % Open the box...
+% {\egroup % ... close the box and call \subfigure.
+% \let\label=\sf@oldlabel
+% \subfigure[\subcapsave]{\box\subfigbox}}%
+% \makeatother
+% \end{verbatim}
+% \enlargethispage{12pt}^finalhack
+% \noindent
+% The following is an example of this \Lenv{subfloat} environment begin
+% used to produce figure~\ref{fig:verbatim}. Note that you need to
+% supply the width of the \Lenv{verbatim}; here we use a section using a
+% \Lenv{minipage}).
+% \begingroup
+% \newbox\subfigbox
+% \makeatletter
+% \newenvironment{subfloat}^
+% {\def\caption##1{\gdef\subcapsave{\relax##1}}^
+% \let\subcapsave=\@empty
+% \let\sf@oldlabel=\label
+% \def\label##1{\xdef\sublabsave{\noexpand\label{##1}}}^
+% \let\sublabsave\relax
+% \setbox\subfigbox\hbox
+% \bgroup}^
+% {\egroup
+% \let\label=\sf@oldlabel
+% \subfigure[\subcapsave]{\box\subfigbox\sublabsave}}^
+% \makeatother
+% \begin{figure}
+% \centering
+% \subfigtopskip=0pt^
+% \subfigcapskip=0pt^
+% \subfigbottomskip=0pt^
+% \begin{subfloat}^
+% \begin{minipage}{2.1in}
+% \begin{verbatim}
+% This text should be
+% verbatim. And not
+% messed with in any way !
+% \end{verbatim}
+% \end{minipage}^
+% \caption{First subcaption.}^
+% \label{fig:verbone}
+% \end{subfloat}^
+% \hspace{10pt}^
+% \begin{subfloat}^
+% \begin{minipage}{2.1in}
+% \begin{verbatim}
+% This text (also)should be
+% verbatim. And not
+% messed with in any way !
+% \end{verbatim}
+% \end{minipage}^
+% \caption{Second subcaption.}^
+% \label{fig:verbtwo}
+% \end{subfloat}
+% \caption{Subfigures~\subref{fig:verbone} and \subref{fig:verbtwo}
+% show examples of using verbatim text in a subfigure.}
+% \label{fig:verbatim}
+% \end{figure}
+% \endgroup
+% \begin{quote}\
+% |\begin{figure}| \\
+% | \centering|
+% | \begin{subfloat}%| \\
+% | \begin{minipage}{2.1in}| \\
+% | \begin{verbatim}| \\
+% | This text should be| \\
+% |verbatim. And not| \\
+% | messed with in any way !| \\
+% | \end{verbatim}| \\
+% | \end{minipage}%| \\
+% | \caption{First subcaption.}%| \\
+% | \label{fig:verbone}| \\
+% | \end{subfloat}%| \\
+% | \qquad| \\
+% | \begin{subfloat}%| \\
+% | \begin{minipage}{2.1in}| \\
+% | \begin{verbatim}| \\
+% | This text (also)should be| \\
+% |verbatim. And not| \\
+% | messed with in any way !| \\
+% | \end{verbatim}| \\
+% | \end{minipage}%| \\
+% | \caption{Second subcaption.}%| \\
+% | \label{fig:verbtwo}| \\
+% | \end{subfloat}| \\
+% | \caption{Subfigures~\subref{fig:verbone} and \subref{fig:verbtwo}| \\
+% | show examples of using verbatim text in a subfigure.}| \\
+% | \label{fig:verbatim}| \\
+% |\end{figure}|
+% \end{quote}
+%
+%
+% \StopEventually{^
+% \section{Acknowledgements}
+%
+% This package was originally written to automatically line up some
+% figure boxes and place labels under them for a paper that I was
+% writing. I thought it useful and uploaded it to the internet
+% community and later to CTAN. Many people have asked questions or
+% given comments which collectively have changed and improved the
+% usefulness of this package.
+%
+% A few people have contributed more than most and I want to thank
+% them publicly, but in no particular order:
+%
+% \begin{itemize}\itemsep=-2pt^finalhack
+% \item{\bf Harald Axel Sommerfeldt} for the work that he did to adjust
+% his \Lpack{caption} and \Lpack{caption2} packages as necessary to
+% support the \Lpack{subfigure} package when they are loaded together.
+% \item {\bf Peter Wilson} for the work that he did to adjust his
+% \Lpack{ccaption} package (and other packages) as necessary to support
+% the \Lpack{subfigure} package when they are loaded together.
+% \item {\bf William `bil' L. Kleb} for his extensive list of errors and
+% suggestions to this documentation.
+% \item{\bf Axel Reichert} for his request for a `hang' caption style
+% since the subcaptions tend to have a short width. And, for his
+% request for some way of referencing the individual subfigures in
+% the main caption without the figure number.
+% \item{\bf Harald Harders} for his suggestion of the \cmd{\subref}
+% command and modifying \cmd{\label} within the \Lpack{subfigure}
+% package to save local references to the subfigures that are often
+% needed.
+% \item{\bf Heiko Oberdiek} and {\bf James A. Bednar} for their help
+% with coexisting with the \Lpack{hyperref} and \Lpack{html} packages.
+% Also, {\bf Ingele Roelens} for pointing out some further compatibility
+% problems when using the \Lpack{hyperref} package with PDF\LaTeX.
+% \item{\bf Frederic Darboux} for searching out and finding several
+% incompatibilities with other packages.
+% \item{\bf David Kastrup} for the code to check for class or packages
+% using \cmd{\let} on \cmd{\end@float} and the like.
+% \end{itemize}
+%
+% \newpage^finalhack
+%
+% \begin{thebibliography}{6}^\itemsep=-2pt^finalhack
+% \itemsep=0.8pt
+% \bibitem{Somm95a}^
+% Harald Axel Sommerfeldt,
+% \emph{The \Lpack{caption} Package},
+% Version 1.4b, 1995/04/05.
+% (Available from CTAN as file \texttt{caption.dtx}.)
+% \bibitem{Somm95b}^
+% Harald Axel Sommerfeldt,
+% \emph{The \Lpack{caption} Package},
+% Version 2.0(beta), 1995/10/09.
+% (Available from CTAN as file \texttt{caption2.dtx}.)
+% \bibitem{Wils01}^
+% Peter Wilson,
+% \emph{The \Lpack{ccaption} Package},
+% Version 1.0a, 2001/08/15.
+% (Available from CTAN as file \texttt{ccaption.dtx}.)
+% \bibitem{Wils01B}^
+% Peter Wilson,
+% \emph{The \Lpack{tocloft} Package},
+% Version 2.2, 2001/14/17.
+% (Available from CTAN as file \texttt{ccaption.dtx}.)
+% \bibitem{Raht02}^
+% Sebastian Rahtz,
+% \emph{Hypertext marks in \LaTeX},
+% 2002/04/05/.
+% (Available from CTAN as file \texttt{hyperref.dtx}.)
+% \bibitem{Coch02}^
+% Steven Douglas Cochran,
+% \emph{The \Lpack{captcont} Package},
+% 2002/02/14/.
+% (Available from CTAN as file \texttt{captcont.dtx}.)
+% \bibitem{Reck97}^
+% Keith Reckdahl,
+% \emph{Using Imported Graphics in \LaTeXe},
+% 1997/12/15.
+% (Available from CTAN as file \texttt{epslatex.pdf})
+% \bibitem{Lamp94}^
+% Leslie Lamport,
+% \emph{LaTeX User's Guide and Reference Manual}, 2nd edition,
+% Addison-Wesley, Reading, Massachusetts,
+% 1994.
+% \bibitem{Knut86}^
+% Donald Ervin Knuth,
+% \emph{The \TeX book},
+% Addison-Wesley, Reading, Massachusetts,
+% 1986.
+% \bibitem{Lamp01}^
+% Leslie Lamport, Frank Mittelbach, and Johannes Braams,
+% \emph{Standard Document Classes for \LaTeX\ version 2e}
+% Version 1.4e, 2001/04/01.
+% (Available from CTAN as file \texttt{classes.dtx}.)
+% \bibitem{Ling01}^
+% Anselm Lingnau,
+% \emph{An Improved Environment for Floats.}
+% Version 1.3d, 2001/11/08.
+% (Available from CTAN as file \texttt{float.dtx}.)
+% \end{thebibliography}}
+%
+% \newpage^finalhack
+%
+% \section{The Code}
+% \iffalse
+%<*package>
+% \fi
+% \subsection{Identification}
+%
+% \changes{v2.1}{23 Jan 2002}{Updated the release date.}
+%
+% \changes{v2.1}{11 Oct 1996}{Removed compatibility with \LaTeX2.09.}
+%
+% Announce the \Lpack{subfigure} package.
+%
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}[1994/12/01]
+\ProvidesPackage{subfigure}[2002/03/15 v2.1.5 subfigure package]
+% \end{macrocode}
+%
+% \subsection{Check for Nasty Classes}
+% \changes{v2.1.5}{29 Apr 2005}{At the request of David Kastrup, added
+% code to check for classes that use \cmd{\let} on \cmd{\end@figure}
+% and similar; and to print a warning and fix the problem if detected.}
+%
+% \begin{macro}{\sf@floatfix}
+%
+% Some ``broken'' document classes use \cmd{\let} on \cmd{\end@figure}
+% and similar, which are used as hooks in the end-processing of, in
+% this case, figures. The following code, courtesy of David Kastrup
+% (dak\@gnu.org) fixes the problem and prints a warning.
+% \begin{macrocode}
+\def\sf@floatfix#1#2{%
+ \ifx#1#2%
+ \ifx#1\@undefined\else
+ \PackageWarningNoLine{subfigure}{%
+Your document class has a bad definition^^J
+of \string#1, most likely^^J
+\string\let\string#1=\string#2^^J
+which has now been changed to^^J
+\string\def\string#1{\string#2}^^J
+because otherwise subsequent changes to \string#2^^J
+(like done by several packages changing float behaviour)^^J
+can't take effect on \string#1.^^J
+Please complain to your document class author}%
+ \def#1{#2}%
+ \fi
+ \fi}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\begingroup
+\def\next#1#2{%
+ \endgroup
+ \sf@floatfix\endfigure\end@float
+ \sf@floatfix\endtable\end@float
+ \sf@floatfix#1\end@dblfloat
+ \sf@floatfix#2\end@dblfloat}
+\expandafter\next\csname endfigure*\expandafter\endcsname
+ \csname endtable*\endcsname
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \subsection{Check for the \Lpack{hyperref} Package}
+%
+% \changes{v2.1.4}{02 Jul 2002}{Added the \cmd{\theHsubfigure} and
+% \cmd{\theHsubtable} commands to avoid duplicate names in a PDF
+% file when using the \Lpack{hyperref} Package.}
+%
+% \changes{v2.1.3}{17 Apr 2002}{Changed \cmd{\newcommand} to
+% \cmd{\providecommand} to allow other packages to set the
+% \cmd{\toclevel@subfigure} and \cmd{\toclevel@subtable}.}
+%
+% \changes{v2.1.2}{26 Mar 2002}{Changed to simplify the interaction
+% with the hyperref package and avoid loading nameref.}
+%
+% \changes{v2.1.1}{15 Mar 2002}{Added coordination with the hyperref
+% package.}
+%
+% \begin{macro}{\toclevel@subfigure}
+% \begin{macro}{\toclevel@subtable}
+%
+% After every package is loaded, check to see if the \Lpack{hyperref}
+% package was among them, if so, then make sure that the |\ifhyperrefloaded|
+% switch is set so that the |\subfloat@label| command will write the correct
+% form of the |\newlabel| to the \Lfile{aux} file. Also define the
+% ``TOC level'' of the subfigure and subtable. We fix these at one since
+% the default figure and table levels are zero. Finally, we add definitions
+% for |\theHsubfigure| and |\theHsubtable| to avoid duplicate names in
+% the PDF file when using the \Lpack{hyperref} Package.
+%
+% \begin{macrocode}
+\newif\ifhyperrefloaded
+\AtBeginDocument{%
+ \@ifpackageloaded{hyperref}{%
+ \hyperrefloadedtrue
+ \providecommand\theHsubfigure{\thefigure.\arabic{subfigure}}%
+ \providecommand\theHsubtable{\thetable.\arabic{subtable}}%
+ \providecommand{\toclevel@subfigure}{1}%
+ \providecommand{\toclevel@subtable}{1}}{}}
+% \end{macrocode}
+%
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Initialization and Shared Constants}
+% \begin{macro}{\ifsubcaphang}
+% \begin{macro}{\ifsubcapcenter}
+% \begin{macro}{\ifsubcapcenterlast}
+% \begin{macro}{\ifsubcapnooneline}
+% \begin{macro}{\ifsubcapraggedright}
+%
+% \changes{v2.1}{23 Jan 2002}{Added.}
+%
+% These five flags control how the style in which the subfloat label and
+% caption are printed. The \Lif{subcaphang} flag is first checked and
+% if true, causes the subcaption label to be typeset separately and
+% placed to the upper left of the space available for the subcaption.
+% The \Lif{subcapcenter} flag centers each line of the subcaption. The
+% \Lif{subcapcenterlast} centers the last line of the subcaption (this
+% is a {\sc nop} if the \Lif{subcapcenter} flag is true. If the
+% \Lif{subcapnooneline} is false, then the label plus the text of the
+% subcaption are centered. If it is true, than the other flags may
+% cause something different to happen. The purpose of this flag,
+% generally, is to cause a single line to be left justified when there
+% is a very short caption. The last flag is the \Lif{subcapraggedright}
+% which typsets its text without lining up the right side. This is
+% useful for the subcaptions since they are usually short and prone to
+% generating hyphenated words unless allowed to be ragged.
+%
+% \begin{macrocode}
+\newif\ifsubcaphang
+\newif\ifsubcapcenter
+\newif\ifsubcapcenterlast
+\newif\ifsubcapnooneline
+\newif\ifsubcapraggedright
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \noindent
+% Table~\ref{tab:defaults} gives the initial (default) values of the
+% internals that are used to control the placement and printing of the
+% subfloats.
+%
+% \changes{v2.1.4}{30 Apr 2002}{Changed the label and caption defaults
+% from \cmd{\rmfamily}\cmd{\mdseries}\cmd{\upshape} to
+% \cmd{\familydefault}\cmd{\seriesdefault} \cmd{\shapedefault}.}
+% \DeleteShortVerb{\|}
+% \MakeShortVerb{\/}
+% \begin{table}^
+% \def\pz{\phantom{0}}^
+% \def\M#1{\vspace*{#1}}
+% \caption[Default values of the Subfigure constants.]%
+% {Default values of the Subfigure constants. These
+% values are set during the options processing (see
+% section~\ref{sec:startup}).}^
+% \label{tab:defaults}^
+% \vspace{5pt}^
+% \begin{minipage}{4.8in}^
+% \setlength\tabcolsep{5pt}^
+% \rr
+% \begin{tabular}{|l|c|p{1.3in}|p{1.963in}|}\hline
+% \multicolumn{1}{|c|}{\raisebox{-1.5ex}{\bf Command}}
+% & \multicolumn{1}{c|}{\bf \Lopt{loose}}
+% & \multicolumn{1}{c|}{\bf \Lopt{tight}}
+% &
+% \multicolumn{1}{c|}{\raisebox{-1.5ex}{\bf Description}}
+% \\
+% & \multicolumn{1}{c|}{\bf Option}
+% & \multicolumn{1}{c|}{\bf Option}
+% & \\ \hline
+% \raisebox{-2.1ex}{\cmd{\subfigtopskip}}
+% & \raisebox{-2.1ex}{10 pt}
+% & \M{0.6ex}\hfil 5 pt
+% & \rr Length from the top of the subfloat
+% box to the beginning of the figure.
+% \\ \hline
+% \raisebox{-1.5ex}{\cmd{\subfigcapskip}}
+% & \raisebox{-1.5ex}{10 pt}
+% & \M{0.0ex}\hfil 0 pt
+% & \rr Length between the baseline of the
+% subcaption and the figure.
+% \\ \hline
+% \raisebox{-2.1ex}{\cmd{\subfigcaptopadj}}
+% & \raisebox{-2.1ex}{\pz0 pt}
+% & \M{0.4ex}\hfil 3 pt
+% & \rr Length added to /\subfigcapskip/
+% when the caption is above the figure.
+% \\ \hline
+% \raisebox{-2.1ex}{\cmd{\subfigbottomskip}}
+% & \raisebox{-2.1ex}{10 pt}
+% & \M{0.7ex}\hfil 5 pt
+% & \rr Length from the bottom of the
+% subcaption to the bottom of the
+% subfloat.
+% \\ \hline
+% \raisebox{-3.5ex}{\cmd{\subfigcapmargin}}
+% & \raisebox{-3.5ex}{10 pt}
+% & \M{2.0ex}\hfil 0 pt
+% & \rr Indentation of the subcaption from
+% the sides of the subfloat box. (This
+% should always be positive or zero.)
+% \\ \hline
+% \raisebox{-1.5ex}{\cmd{\subfiglabelskip}}
+% & \raisebox{-1.5ex}{0.33 em}
+% & \raggedleft 0.33 em plus 0.07 em minus 0.03 em
+% & \rr Space between the label and the
+% text of the subcaption.
+% \\ \hline
+% \raisebox{-1.5ex}{\cmd{\subcapsize}}
+% & \multicolumn{2}{c|}{\raisebox{-1.5ex}{footnotesize}}
+% & \rr Size for the text portion of the
+% subcaption font.
+% \\ \hline
+% \raisebox{-1.5ex}{\cmd{\subcaplabelfont}}
+% & \multicolumn{2}{c|}{\raisebox{-1.5ex}{(Default family, series and shape)}}
+% & \rr Font for the label portion of the
+% subcaption.
+% \\ \hline
+% \raisebox{-1.5ex}{\cmd{\subcapfont}}
+% & \multicolumn{2}{c|}{\raisebox{-1.5ex}{(Default family, series and shape)}}
+% & \rr Font for the text portion of the
+% subcaption.
+% \\ \hline
+% \end{tabular}
+% \end{minipage}
+% \end{table}
+% \DeleteShortVerb{\/}
+% \MakeShortVerb{\|}
+%
+% \begin{macro}{\subfigtopskip}
+% \begin{macro}{\subfigcapskip}
+% \begin{macro}{\subfigcaptopadj}
+% \begin{macro}{\subfigbottomskip}
+%
+% \changes{v2.1}{22 Jan 1997}{Reduced the space to the values separating
+% subfloat caption and figure box and its top and bottom. Added
+% \cmd{\subfigcaptopadj} in case it is needed in styles that with figure
+% subcaptions on the bottom and table subcaptions on the top.}
+%
+% See figure~\ref{fig:layout} for details of where these take effect.
+% Generally the |\subfigtopskip| appears between the figure or table and
+% the edge of the box. |\subfigbottomskip| appears between the
+% subcaption and the edge of the box. If the subcaption follows the
+% figure or table, then |\subfigcapskip| is placed before it along with
+% ({\it i.e.\/}, in addition to) a |\baselineskip|. If the subcaption
+% comes before the figure or table then |\subfigcapskip| is placed
+% after it along with |\subfigcaptopadj|. Although several of the above
+% are {\tt skip}'s they are typset at their base size and will not
+% shrink or expand.
+%
+% \begin{macrocode}
+\newskip\subfigtopskip \subfigtopskip = 5\p@
+\newskip\subfigcapskip \subfigcapskip = 0\p@
+\newdimen\subfigcaptopadj \subfigcaptopadj = 3\p@
+\newskip\subfigbottomskip \subfigbottomskip = 5\p@
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\subfigcapmargin}
+%
+% \changes{v2.1}{22 Jan 1997}{Reduced \cmd{\subfigcapmargin} to zero.}
+% \begin{macro}{\subfiglabelskip}
+%
+% \changes{v2.1}{23 Jan 2002}{Added to replace the space between the
+% subcaption label and text.}
+%
+% These two values are used to typeset the subcaption The width of the
+% subcaption is the same as that of its associated figure or table
+% width. |\subfigcapmargin| is placed on either side of the caption and
+% |\subfiglabelskip| is placed between the subcaption label and the
+% subcaption text. Depending on the manner of typesetting the
+% subcaption, this may shrink or expand. By default, the
+% |\subfigcapmargin| is zero to allow as much room of the subcaption as
+% possible.
+%
+% \begin{macrocode}
+\newdimen\subfigcapmargin \subfigcapmargin = \z@
+\newskip\subfiglabelskip \subfiglabelskip = 0.33em plus 0.07em minus 0.03em
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\subcapsize}
+%
+% |\subcapsize| is used to set the size of both the subcaption label and
+% the subcaption text. The options allow it to be set to any of the
+% following: |\scriptsize|, |\footnotesize|, |\small|, |\normalsize|,
+% |\large|, |\Large|. It may also be set to |\tiny|, |\LARGE|, |\huge|
+% or |\HUGE| by hand if need be for special instances.
+%
+% \begin{macrocode}
+\newcommand*{\subcapsize}{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\subcaplabelfont}
+% \begin{macro}{\subcaplabelfont@f}
+%
+% \changes{v2.1.4}{30 Apr 2002}{Changed the \cmd{\subcaplabelfont@f}
+% default value to \cmd{\familydefault}.}
+%
+% \begin{macro}{\subcaplabelfont@c}
+%
+% \changes{v2.1.4}{30 Apr 2002}{Changed the \cmd{\subcaplabelfont@c}
+% default value to \cmd{\seriesdefault}.}
+%
+% \begin{macro}{\subcaplabelfont@s}
+%
+% \changes{v2.1.4}{30 Apr 2002}{Changed the \cmd{\subcaplabelfont@s}
+% default value to \cmd{\shapedefault}.}
+%
+% The |\subcaplabelfont| is composed of three parts, the font family,
+% such as roman, san serif or typewriter; the font series, such as
+% medium or bold; and the font shape, such as italic, slanted, small
+% caps or upright. These are combined along with the |\subcapsize| to
+% select the font for the subcaption label.
+%
+% \begin{macrocode}
+\newcommand*{\subcaplabelfont}{%
+ \subcaplabelfont@f\subcaplabelfont@c\subcaplabelfont@s}
+\newcommand*{\subcaplabelfont@f}{\fontfamily{\familydefault}\selectfont}
+\newcommand*{\subcaplabelfont@c}{\fontseries{\seriesdefault}\selectfont}
+\newcommand*{\subcaplabelfont@s}{\fontshape{\shapedefault}\selectfont}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\subcapfont}
+%
+% \changes{v2.1}{11 Dec 1996}{Added.}
+%
+% \begin{macro}{\subcapfont@f}
+%
+% \changes{v2.1.4}{30 Apr 2002}{Changed the \cmd{\subcapfont@f} default
+% value to \cmd{\familydefault}.}
+%
+% \begin{macro}{\subcapfont@c}
+%
+% \changes{v2.1.4}{30 Apr 2002}{Changed the \cmd{\subcapfont@s} default
+% value to \cmd{\seriesdefault}.}
+%
+% \begin{macro}{\subcapfont@s}
+%
+% \changes{v2.1.4}{30 Apr 2002}{Changed the \cmd{\subcapfont@s} default
+% value to \cmd{\shapedefault}.}
+%
+% The |\subcapfont| is the same as the |\subcaplabelfont| except that it
+% is applied to the subcaption text rather than the label.
+%
+% \begin{macrocode}
+\newcommand*{\subcapfont}{%
+ \subcapfont@f\subcapfont@c\subcapfont@s}
+\newcommand*{\subcapfont@f}{\fontfamily{\familydefault}\selectfont}
+\newcommand*{\subcapfont@c}{\fontseries{\seriesdefault}\selectfont}
+\newcommand*{\subcapfont@s}{\fontshape{\shapedefault}\selectfont}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ifsf@tight}
+%
+% Create an `if' to control whether the check for the top-of-page is
+% performed in the |\@subfloat| command. This is necessary to preserve
+% the look-and-feel of the older versions of this package. The
+% \Lopt{loose} option turns this flag off (no check) and the
+% \Lopt{tight} option turns it on (do the check).
+%
+% \begin{macrocode}
+\newif\ifsf@tight \sf@tighttrue
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Subfigure Constants}
+% \label{sec:fig_constants}
+% \begin{macro}{\c@subfigure}
+% Subfigure counter.
+%
+% \begin{macrocode}
+\newcounter{subfigure}[figure]
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\iffiguretopcap}
+%
+% \changes{v2.1}{23 Jan 2002}{Added check for existing
+% \cmd{\figuretopcaptrue} so that this package will work with the
+% captcont package.}
+%
+% \changes{v2.1}{22 Jan 1997}{Added to control label numbering for
+% captions at the top vs.\ at the bottom.}
+%
+% \begin{macro}{\ifsubfiguretopcap}
+%
+% \changes{v2.1}{15 Nov 1997}{Added to control placement of the
+% subcaption at the top vs.\ at the bottom.}
+%
+% These control how the \Lpack{subfigure} \Lcount{caption} numbering is
+% obtained and where the figure caption and subcaption should appear
+% relative to the body of the \Lenv{subfigure}. The boolean
+% |\iffiguretopcap| indicates that the \Lcount{caption} counter is
+% current and there is no need to increment it. The boolean
+% |\ifsubfiguretopcap| indicates that the subcaption will be printed
+% above the body portion of the \Lpack{subfigure}.
+%
+% \begin{macrocode}
+\@ifundefined{figuretopcaptrue}{\newif\iffiguretopcap}{}
+\newif\ifsubfiguretopcap
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\p@subfigure}
+% \begin{macro}{\thesubfigure}
+% \begin{macro}{\@thesubfigure}
+% \begin{macro}{\@@thesubfigure}
+%
+% \changes{v2.1}{23 Jan 2002}{Added.}
+%
+% The |\thesubfigure| command defines the label for text references
+% (prefixed by |\p@subfigure|). This is the value saved by the |\label|
+% and retrieved by the |\ref| commands. In the case of a
+% conflict between this package and a prior one over the definition
+% of |\thesubfigure|, this package will win. This is insured by first
+% specifying the |\providecommand| for the |\thesubfigure| and then
+% |\renewcommand|. This is necessary because some packages incorrectly
+% insert this command.
+%
+% The |\@thesubfigure| value defines the the caption label complete
+% offset from the beginning of the caption text. It is used in the
+% subfigure caption and normally takes the label portion as defined
+% by |\thesubfigure|.
+%
+% Finally, the value defined by |\@@thesubfigure| is also saved by the
+% |\label| command and may be retrieved with the |\subref| command. This is
+% often useful in the subcaption or caption text when referring to the
+% individual subfigures. This value is also the one that is used in
+% the List-of-Figures.
+%
+% These multiple ``views'' of the \Lcount{subfigure} counter allow a
+% style to define the way the label looks in the figure, for example
+% ``{\bf (a)}\textvisiblespace''. Then references to it with |\ref|
+% have the form ``2.1a'', and with |\subref| ``(a)'' (This latter form
+% is also used to label references in the List-of-Figures section).
+%
+% \begin{macrocode}
+\let\p@subfigure=\thefigure
+\providecommand*{\thesubfigure}{(\alph{subfigure})}
+\renewcommand*{\thesubfigure}{(\alph{subfigure})}
+\newcommand*{\@thesubfigure}{\thesubfigure\hskip\subfiglabelskip}
+\newcommand*{\@@thesubfigure}{\thesubfigure}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ext@subfigure}
+% \begin{macro}{\l@subfigure}
+%
+% \changes{v2.1}{11 Oct 1996}{Changed the indentation of the
+% List-of-Figures line from 2.3em to 2.5em.}
+%
+% \begin{macro}{\c@lofdepth}
+%
+% These values define how and if the subfigure caption will appear in a
+% List-of-Figures file. |\ext@subfigure| defines the default subfigure
+% file extension (which is the same as |\ext@figure| --- the
+% List-of-Figures file, \Lcount{lof}). |\l@subfigure|
+% shows how to print an \Lfile{lof} subfigure line and defines that line
+% at level two. |\c@lofdepth| is an extension of the Table-of-Contents
+% depth value and controls the depth to which captions in the file are
+% printed to the actual page. By default, the subcaptions are not.
+%
+% \begin{macrocode}
+\let\ext@subfigure=\ext@figure
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\l@subfigure}{%
+ \@dottedxxxline{\ext@subfigure}{2}{3.8em}{2.5em}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcounter{lofdepth}
+\setcounter{lofdepth}{1}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Subtable Constants}
+% This section is symmetric to section~\ref{sec:fig_constants}.
+% \begin{macro}{\c@subtable}
+% Subtable counter.
+%
+% \begin{macrocode}
+\newcounter{subtable}[table]
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\iftabletopcap}
+%
+% \changes{v2.1}{23 Jan 2002}{Added check for existing
+% \cmd{\tabeltopcaptrue} so that this package will work with the
+% captcont package.}
+%
+% \changes{v2.1}{22 Jan 1997}{Added to control label numbering for
+% captions at the top vs.\ at the bottom.}
+%
+% \begin{macro}{\ifsubtabletopcap}
+% \changes{v2.1}{15 Nov 1997}{Added to control placement of the
+% subcaption at the top vs.\ at the bottom.}
+%
+% These define the form that the subcaption prefix is generated. The
+% boolean |\iftabletopcap| works with the numbering of the subcaption
+% label and uses the current \Lcount{table} counter value if true and
+% the next value if false. The boolean |\ifsubtabletopcap| sets the
+% subcaption before the main body of the subfigure, if true; and, after
+% it, if false.
+%
+% \begin{macrocode}
+\@ifundefined{tabletopcaptrue}{\newif\iftabletopcap}{}
+\newif\ifsubtabletopcap
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\p@subtable}
+% \begin{macro}{\thesubtable}
+% \begin{macro}{\@thesubtable}
+% \begin{macro}{\@@thesubtable}
+%
+% \changes{v2.1}{23 Jan 2002}{Added.}
+%
+% The |\thesubtable| command defines the label for text references
+% (prefixed by |\p@subtable|), while the |\@thesubtable| command defines
+% what appears in the subcaption under or over the subtable. The
+% |\@@thesubtable| command defines an alternative reference to the label
+% for use in the subcaption and caption of the table (see the discussion
+% above for the equivalent figure values). The latter form is also used
+% for the List-of-Tables label. As above, the |\thesubtable| command is
+% twice specified
+%
+% \begin{macrocode}
+\let\p@subtable=\thetable
+\providecommand*{\thesubtable}{(\alph{subtable})}
+\renewcommand*{\thesubtable}{(\alph{subtable})}
+\newcommand*{\@thesubtable}{\thesubtable\hskip\subfiglabelskip}
+\newcommand*{\@@thesubtable}{\thesubtable}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ext@subtable}
+% \begin{macro}{\l@subtable}
+%
+% \changes{v2.1}{11 Oct 1996}{Changed the indentation of the
+% List-of-Tables line from 2.3em to 2.5em.}
+%
+% \begin{macro}{\c@lotdepth}
+%
+% These define how and if the subtable caption will appear in a
+% List-of-Tables file. |\ext@subtable| defines the default subtable
+% file extension (which is the same as |\ext@table| --- the
+% List-of-Tables file, \Lcount{lot}). |\l@subtable| shows how to print
+% an \Lfile{lot} subtable line and defines that line at level two.
+% |\c@lotdepth| is an extension of the table-of-contents depth value and
+% controls the depth to which captions in the file are printed to the
+% actual page. By default, the subcaptions are not printed.
+%
+% \begin{macrocode}
+\let\ext@subtable=\ext@table
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\l@subtable}{%
+ \@dottedxxxline{\ext@subtable}{2}{3.8em}{2.5em}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcounter{lotdepth}
+\setcounter{lotdepth}{1}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Declaration of Options}
+%
+% The following options allow general compatibility with the
+% \Lpack{caption} and \Lpack{caption2} packages by H.A. Sommerfeldt
+% \cite{Somm95a}. There are six different subcaption layout options
+% supported: \Lopt{normal}, \Lopt{hang} (or \Lopt{isu}), \Lopt{center},
+% \Lopt{centerlast} (or \Lopt{anne}), \Lopt{nooneline} and
+% \Lopt{raggedright}. The \Lopt{hang} subcaption may be combined with
+% the \Lopt{center} or \Lopt{centerlast} options. The \Lopt{nooneline}
+% may be combined with any of the other options (but it's effect is
+% negated or looks bad with either of \Lopt{center} or \Lopt{centerlast}
+% unless the \Lopt{hang} option is also used). \Lopt{raggedright}
+% overrides the \Lopt{center} or \Lopt{centerlast} options.
+%
+% \begin{macrocode}
+\DeclareOption{normal}{%
+ \subcaphangfalse
+ \subcapcenterfalse
+ \subcapcenterlastfalse
+ \subcapnoonelinefalse
+ \subcapraggedrightfalse}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\DeclareOption{hang}{\subcaphangtrue}
+\DeclareOption{center}{\subcapcentertrue}
+\DeclareOption{centerlast}{\subcapcenterlasttrue}
+\DeclareOption{nooneline}{\subcapnoonelinetrue}
+\DeclareOption{raggedright}{\subcapraggedrighttrue}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\DeclareOption{isu}{\ExecuteOption{hang}}
+\DeclareOption{anne}{\ExecuteOption{centerlast}}
+% \end{macrocode}
+%
+% \newpage^finalhack
+%
+% \noindent
+% There are options for six different font sizes available.
+%
+% \begin{macrocode}
+\DeclareOption{scriptsize}{\renewcommand*{\subcapsize}{\scriptsize}}
+\DeclareOption{footnotesize}{\renewcommand*{\subcapsize}{\footnotesize}}
+\DeclareOption{small}{\renewcommand*{\subcapsize}{\small}}
+\DeclareOption{normalsize}{\renewcommand*{\subcapsize}{\normalsize}}
+\DeclareOption{large}{\renewcommand*{\subcapsize}{\large}}
+\DeclareOption{Large}{\renewcommand*{\subcapsize}{\Large}}
+% \end{macrocode}
+%
+% \noindent
+% There are eighteen options available to set the font attributes of the
+% subcaptions. The first nine affect only the subcaption label
+% The last nine affect only the subcaption text.
+%
+% \changes{v2.1}{22 Jan 1997}{Changed order of font options.}
+%
+% \changes{v2.1}{15 Nov 1997}{Added nine new options to set the format
+% of the caption text separately from the caption label.}
+%
+% \begin{macrocode}
+\DeclareOption{rm}{\renewcommand*{\subcaplabelfont@f}{\rmfamily}}
+\DeclareOption{sf}{\renewcommand*{\subcaplabelfont@f}{\sffamily}}
+\DeclareOption{tt}{\renewcommand*{\subcaplabelfont@f}{\ttfamily}}
+\DeclareOption{md}{\renewcommand*{\subcaplabelfont@c}{\mdseries}}
+\DeclareOption{bf}{\renewcommand*{\subcaplabelfont@c}{\bfseries}}
+\DeclareOption{up}{\renewcommand*{\subcaplabelfont@s}{\upshape}}
+\DeclareOption{it}{\renewcommand*{\subcaplabelfont@s}{\itshape}}
+\DeclareOption{sl}{\renewcommand*{\subcaplabelfont@s}{\slshape}}
+\DeclareOption{sc}{\renewcommand*{\subcaplabelfont@s}{\scshape}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\DeclareOption{RM}{\renewcommand*{\subcapfont@f}{\rmfamily}}
+\DeclareOption{SF}{\renewcommand*{\subcapfont@f}{\sffamily}}
+\DeclareOption{TT}{\renewcommand*{\subcapfont@f}{\ttfamily}}
+\DeclareOption{MD}{\renewcommand*{\subcapfont@c}{\mdseries}}
+\DeclareOption{BF}{\renewcommand*{\subcapfont@c}{\bfseries}}
+\DeclareOption{IT}{\renewcommand*{\subcapfont@s}{\itshape}}
+\DeclareOption{SL}{\renewcommand*{\subcapfont@s}{\slshape}}
+\DeclareOption{SC}{\renewcommand*{\subcapfont@s}{\scshape}}
+\DeclareOption{UP}{\renewcommand*{\subcapfont@s}{\upshape}}
+% \end{macrocode}
+%
+% \noindent
+% There are eight options available to control the caption placement
+% and the proper numbering in association with the figure or table
+% caption placement. The first four affect only the caption numbering
+% by informing the internals that the associated figure or table
+% caption appears before or after the subfloat. The second four do
+% this and, in addition, shift the subfloat caption to the bottom or
+% top of the subfloat. The |\subfigure| and |\subtable| commands each
+% have a set of flags since it is often the case that a document style
+% requires that figure captions follow the figure and table captions
+% precede the table.
+%
+% \begin{macrocode}
+\DeclareOption{figbotcap}{\figuretopcapfalse}
+\DeclareOption{figtopcap}{\figuretopcaptrue}
+\DeclareOption{tabbotcap}{\tabletopcapfalse}
+\DeclareOption{tabtopcap}{\tabletopcaptrue}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\DeclareOption{FIGBOTCAP}{\ExecuteOptions{figbotcap}\subfiguretopcapfalse}
+\DeclareOption{FIGTOPCAP}{\ExecuteOptions{figtopcap}\subfiguretopcaptrue}
+\DeclareOption{TABBOTCAP}{\ExecuteOptions{tabbotcap}\subtabletopcapfalse}
+\DeclareOption{TABTOPCAP}{\ExecuteOptions{tabtopcap}\subtabletopcaptrue}
+% \end{macrocode}
+%
+% \begin{macro}{\subfigtopskip}
+% \begin{macro}{\subfigcapskip}
+% \begin{macro}{\subfigcaptopadj}
+% \begin{macro}{\subfigbottomskip}
+% \begin{macro}{\subfigcapmargin}
+% \begin{macro}{\subfiglabelskip}
+%
+% \noindent
+% The last two options control the overall ``look-and-feel'' of the
+% subfloat. The \Lopt{loose} option is the default and makes the
+% subfloat look like it always has with lots of extra room around the
+% subfigure and subcaption.
+%
+% \begin{macrocode}
+\DeclareOption{loose}{%
+ \subfigtopskip = 10\p@
+ \subfigcapskip = 10\p@
+ \subfigcaptopadj = 0\p@
+ \subfigbottomskip = 10\p@
+ \subfigcapmargin = 10\p@
+ \subfiglabelskip = 0.33em
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@thesubfigure}
+% \begin{macro}{\@thesubtable}
+% Next, it replaces the glue at the end of the subcaption label with a
+% |\space| like the older version of the \Lpack{subfigure} package.
+%
+% \begin{macrocode}
+ \renewcommand*{\@thesubfigure}{\thesubfigure\space}
+ \renewcommand*{\@thesubtable}{\thesubtable\space}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ifsf@tight}
+%
+% Finally, set the \Lif{sf@tight} flag to make the |\@subfloat| command
+% skip its check for the top of a page or minipage and to always add
+% its topmost vertical spacing. (For more details about the
+% |\@subfloat| command, see section~\ref{sec:mainmacros}.)
+%
+% \begin{macrocode}
+ \sf@tightfalse}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\subfigtopskip}
+% \begin{macro}{\subfigcapskip}
+% \begin{macro}{\subfigcaptopadj}
+% \begin{macro}{\subfigbottomskip}
+% \begin{macro}{\subfigcapmargin}
+% \begin{macro}{\subfiglabelskip}
+%
+% The \Lopt{tight} option is the is the preferred version and has less white
+% space around the subfloat. It also will omit the space above the subfloat
+% at the top of the page or minipage.
+%
+% \begin{macrocode}
+\DeclareOption{tight}{%
+ \subfigtopskip = 5\p@
+ \subfigcapskip = 0\p@
+ \subfigcaptopadj = 3\p@
+ \subfigbottomskip = 5\p@
+ \subfigcapmargin = \z@
+ \subfiglabelskip = 0.33em plus 0.07em minus 0.03em
+% \end{macrocode}
+%
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@thesubfigure}
+% \begin{macro}{\@thesubtable}
+% Next, it keeps the glue at the end of the subcaption label to allow
+% better subcaption fitting.
+%
+% \begin{macrocode}
+ \renewcommand*{\@thesubfigure}{\thesubfigure\hskip\subfiglabelskip}
+ \renewcommand*{\@thesubtable}{\thesubtable\hskip\subfiglabelskip}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ifsf@tight}
+%
+% Finally, set the \Lif{sf@tight} flag to make the |\@subfloat| command
+% check for the top of a page or minipage and to skip adding any vertical
+% space there. (For more details about the |\@subfloat| command, see
+% section~\ref{sec:mainmacros}.)
+%
+% \begin{macrocode}
+ \sf@tighttrue}
+% \end{macrocode}
+% \end{macro}
+%
+% \newpage^finalhack
+%
+% \subsection{Execution of Options}
+% \label{sec:startup}
+%
+% \changes{v2.1}{11 Oct 1996}{Added a check for a local configuration file.}
+%
+% \changes{v2.1}{15 Nov 1997}{Added the \Lopt{FIGBOTCAP} and
+% \Lopt{TABBOTCAP} options.}
+%
+% \changes{v2.1.4}{30 Apr 2002}{Changed the subcaption label defaults
+% to be hard coded above and no longer in the options list.}
+%
+% The \Lopt{normal} type of subcaption is preselected, the standard
+% subcaption size is set to \Lopt{footnotesize}, and the font for both
+% the subcaption label and text is set above to the global defaults for
+% family, series, and shape. Also, the subcaptions for the subfigure
+% and subtable are placed after the figure box and it is assumed that
+% the figure or table caption follows all of the associated subfloats.
+% Finally, the \Lopt{loose} form is selected in order to cause minimal
+% change to existing papers using the \Lpack{subfigure} package.
+%
+% The preferred form would be to have the \Lopt{TABTOPCAP} and
+% \Lopt{tight} be the defaults, but this would adversely affect the
+% existing papers that have used the official releases of this package.
+%
+% \begin{macrocode}
+\ExecuteOptions{normal,footnotesize,FIGBOTCAP,TABBOTCAP,loose}
+\InputIfFileExists{subfigure.cfg}{%
+ \typeout{****************************************^^J%
+ * Local config file subfigure.cfg used *^^J%
+ ****************************************}}{}
+\ProcessOptions
+% \end{macrocode}
+%
+% \subsection{The Subfigure and Subtable Commands}
+% \label{sec:mainmacros}
+%
+% \changes{v2.1}{23 Jan 2002}{Added setting \cmd{\label} to
+% \cmd{\subfloat@label}.}
+%
+% \changes{v2.1}{11 Oct 1996}{Added command lines. The subfigure
+% command was updated to allow a second optional argument. This
+% causes changes all the way down to the \cmd{\@subcaption} command.}
+%
+% \begin{macro}{\subfigure}
+% \label{sec:subfigure}
+%
+% \changes{v2.1.2}{26 Mar 2002}{Added check to see if \cmd{\subfig@oldlabel}
+% is defined and if not to save the current definition.}
+%
+% \changes{v2.1}{22 Jan 1997}{Changed the counter advance to occur
+% only if the related boolean is false. This allows \cmd{\caption}'s
+% to occur before the subfloats rather than after.}
+%
+% \changes{v2.1}{07 Mar 1997}{Moved \cmd{\leavevmode} to \cmd{\@subfloat}.}
+%
+% The |\subfigure| command acts as cover function for the |\@subfloat|
+% command. It locally changes the |\label| command to our special version
+% that supports the |\subref|'s (see section~\ref{sec:patches}). It
+% insures that the proper counter is used and has the correct value.
+% Since the caption is usually generated later, we must locally
+% anticipate the future value of its counter by adding one to it within
+% a local group. Upon leaving |\subfigure|, the old value is restored.
+%
+% \begin{macrocode}
+\newcommand*{\subfigure}{%
+ \bgroup
+ \let\subfig@oldlabel=\label
+ \let\label=\subfloat@label
+ \@nameuse{if\@captype topcap}\else
+ \advance\@nameuse{c@\@captype}\@ne
+ \fi
+ \refstepcounter{sub\@captype}%
+ \@ifnextchar [%
+ {\@subfigure}%
+ {\@subfigure[\@empty]}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\subtable}
+%
+% The |\subtable| command is identical to |\subfigure|. The of names
+% at the user level is purely cosmetic (and historical).
+%
+% \begin{macrocode}
+\let\subtable=\subfigure
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@subfigure}
+% \changes{v2.1.4}{07 Jun 2002}{Added curly brackets around the
+% argument when passing it on as an optional argument.}
+%
+% Here we are still setting up for the main |\@subfloat| command. We
+% check for a second optional argument. If one is not found, than any
+% optional argument from the last |\subfigure| or |\subtable| becomes
+% the main caption and we give |\@empty| as the default list-entry
+% caption. If we see another optional argument, then we make that one
+% the main caption and use any prior optional argument as the list-entry
+% caption. See Table~\ref{tab:calling} for how this looks to the user.
+%
+% \begin{macrocode}
+\def\@subfigure[#1]{%
+ \@ifnextchar [%
+ {\@subfloat{sub\@captype}[{#1}]}%
+ {\@subfloat{sub\@captype}[\@empty{#1}][{#1}]}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@subfloat}
+%
+% \changes{v2.1.4}{24 Apr 2002}{Changed \cmd{\@subfloat} to globally
+% reset the figure/table counter if it was incremented so that any
+% subfloat body that resets the counters globally will not cause
+% errors ({\it e.g.\/}, the \Lpack{tabularx} package}
+%
+% \changes{v2.1}{23 Jan 2002}{Now using \cmd{\@nameuse} to build names.
+% Made the \cmd{\def} a \cmd{\long}\cmd{\def}.}
+%
+% \changes{v2.1}{22 Apr 1998}{Added some percents to keep out whitespace}
+%
+% \changes{v2.1}{07 Mar 1997}{Changed the addition of the
+% \cmd{\subfigtopskip} to be added only if not at the top of the
+% float and only in vertical mode. Moved \cmd{\leavevmode} from
+% \cmd{\subfigure} to after the topskip addition.}
+%
+% \changes{v2.1}{17 Jan 1997}{Added swap of the top and bottom space
+% when in TOPCAP mode.}
+%
+% This is the common code for setting up the subfloat box and drawing
+% the subcaption under it. The two skips are used only here to keep
+% track of what vertical space is to be placed before and after the
+% figure.
+%
+% The first argument is the type of object being generated: that is,
+% a |subfigure| or a |subtable|. The second and third are the
+% \texttt{subcaption} and \texttt{subfigure} arguments from the
+% calling |\subfigure| or |\subtable| command.
+%
+% \begin{macrocode}
+\newskip\subfig@top
+\newskip\subfig@bottom
+% \end{macrocode}
+%
+% If \Lif{ifsf@tight} is true, then the |\@subfloat| command checks to
+% see if it is at the top of a page or a minipage and will suppress the
+% top vertical space in that case; otherwise, it always adds the space.
+%
+% \begin{macrocode}
+\long\def\@subfloat#1[#2][#3]#4{%
+ \@tempcnta=1
+ \ifsf@tight
+ \if@minipage
+ \@tempcnta=\z@
+ \else\ifdim \lastskip=\z@ \else
+ \@tempcnta=2
+ \fi\fi
+ \fi
+% \end{macrocode}
+%
+% Based on the |\iffiguretopcap| or |\iftabletopcap| flags we
+% select which vertical space is to be placed above and below the figure
+% or table and save it in |\subfig@top| and |\subfig@bottom|.
+%
+% \begin{macrocode}
+ \@nameuse{if\@captype topcap}%
+ \subfig@top=\subfigbottomskip
+ \subfig@bottom=\subfigtopskip
+ \else
+ \subfig@top=\subfigtopskip
+ \subfig@bottom=\subfigbottomskip
+ \fi
+% \end{macrocode}
+%
+% The |\leavevmode| is here to inhibit any \LaTeX\ errors that the
+% surreounding environment might generate if we stay in vertical mode.
+% Then it determines the width of the figure or table by placing it in a
+% box and testing the box.
+%
+% \begin{macrocode}
+ \leavevmode
+ \setbox\@tempboxa \hbox{#4}%
+ \@tempdima=\wd\@tempboxa
+% \end{macrocode}
+%
+% Finally we put the figure together in a vertical box. At the very top
+% goes any vertical space, but only if we are not at the top of the page
+% or minipage as determined above.
+%
+% \begin{macrocode}
+ \vtop\bgroup
+ \vbox\bgroup
+ \ifcase\@tempcnta
+ \@minipagefalse
+ \or
+ \vspace{\subfig@top}%
+ \or
+ \ifdim \lastskip=\z@ \else
+ \@tempskipb\subfig@top\relax\@xaddvskip
+ \fi
+ \fi
+% \end{macrocode}
+%
+% Next, based on the `topcap' flags, we check if the subcaption or the
+% figure goes next. If it is the subcaption, then we add some extra
+% |\subfigcaptopadj| space between the subcaption and the figure and
+% table in addtion to the regular |\subfigcapskip| space. This finishes
+% off the top box and establishes our baseline.
+%
+% After that we add in either the figure or subcaption (whichever we
+% have not typeset yet and follow it with the bottom vertical space.
+% (see figure~\ref{fig:layout-C} for a diagram of this layout).
+%
+% Finally, we globally ({\bf !}) reset the \Lcount{figure} or
+% \Lcount{table} counter, if we incremented it at the beginning of the
+% |\subfigure| or |\subtable| command so that any functions used inside
+% the command body which globally sets the counters ({\it e.g.\/}, the
+% \Lpack{tabularx} package) will not cause problems.
+%
+% \begin{macrocode}
+ \@nameuse{if#1topcap}%
+ \ifx \@empty#3\relax \else
+ \@subcaption{#1}{#2}{#3}%
+ \vskip\subfigcapskip
+ \vskip\subfigcaptopadj
+ \fi\egroup
+ \box\@tempboxa
+ \else
+ \box\@tempboxa\egroup
+ \ifx \@empty#3\relax \else
+ \vskip\subfigcapskip
+ \@subcaption{#1}{#2}{#3}%
+ \fi
+ \fi
+ \vspace{\subfig@bottom}%
+ \egroup
+ \@nameuse{if\@captype topcap}\else
+ \global\advance\@nameuse{c@\@captype}\m@ne
+ \fi
+ \egroup}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@subfigcaptionlist}
+%
+% \begin{macro}{\@subcaption}
+%
+% \changes{v2.1}{23 Jan 2002}{Now using \cmd{\@nameuse} to build names.
+% Also use \@@thesubfigure and \@@thesubtable stored label.}
+%
+% \begin{macro}{\listsubcaptions}
+%
+% \changes{v2.1.4}{09 Jul 2002}{Changed \cmd{\@tempa} to \cmd{\sf@temp}
+% at the request of Donald Arseneau to remove the potential of problems
+% with others using the same variable.}
+% \changes{v2.1}{22 Oct 1996}{Added to allow the user to cause a dump
+% of the currently queued subcaptions to the ``List-of'' page. This
+% is necessary when the \cmd{caption} is placed before the subfloats
+% as is often the case for subtables.}
+%
+% \changes{v2.1}{11 Oct 1996}{Fixed \cmd{\protect} related bug caused by
+% a change in \LaTeX3.}
+% \begin{macro}{\@listsubcaptions}
+%
+% \changes{v2.1}{23 Jan 2002}{Added checks for undefined \cmd{\@captype}
+% and \cmd{ext@<\@captype>} just in case the \cmd{caption} is called
+% outside the \Lenv{float} or the current float type does not support
+% subfigures.}
+%
+% \changes{v2.1}{11 Oct 1996}{Added to print the queued subcaptions.
+% This is also used by the \Lpack{captcont} package to correctly print
+% the subcaptions.}
+%
+% \changes{v2.1}{17 Jan 1997}{Changed the source of the label for the
+% ``List-of'' pages to use the \cmd{\thesubfigure} or \cmd{\thesubtable}
+% value rather than the \cmd{\@currentlabel}. This usually will be
+% cleaner since the figure number won't be repeated.}
+%
+% \changes{v2.1}{05 Jan 1998}{Changed \cmd{\edef} to \cmd{\def} and added
+% back the \cmd{\protect} due to changes in the use of the
+% \cmd{\@subcaption}.}
+%
+% The following series of commands control exactly how the subcaption is
+% typeset. The |\@subcaption| command adds the subcaption to the current
+% list of subcaptions to be added to the ``List-of'' page as soon as
+% the major caption is declared (see |\@caption| below).
+% ({\scshape Note}: only one list is kept because that seems right;
+% if there is a mix of tables and figures, they will be grouped
+% under the next |\caption|\@.) Next |\@subcaption| calls the
+% appropriate float-type specific command to decide how to size and shape
+% the subcaption text.
+%
+% \begin{macrocode}
+\newcommand*{\@subfigcaptionlist}{}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand{\@subcaption}[3]{%
+ \ifx \relax#2\relax \else
+ \bgroup
+ \let\label=\@gobble
+ \let\protect=\string
+ \def\@subcaplabel{\@nameuse{@@the#1}}%
+ \xdef\@subfigcaptionlist{%
+ \@subfigcaptionlist,%
+ {\protect\numberline{\@subcaplabel}\noexpand{\ignorespaces #2}}}%
+ \egroup
+ \fi
+ \@nameuse{@make#1caption}{\@nameuse{@the#1}}{#3}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\listsubcaptions}{%
+ \@ifstar
+ {\gdef\@subfigcaptionlist{}}%
+ {\@listsubcaptions{\@captype}}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\@listsubcaptions}[1]{%
+ \@ifundefined{@captype}{}{%
+ \@ifundefined{ext@sub#1}{}{%
+ \@for \sf@temp:=\@subfigcaptionlist \do {%
+ \ifx \@empty\sf@temp\relax \else
+ \addcontentsline
+ {\@nameuse{ext@sub#1}}%
+ {sub#1}%
+ {\sf@temp}%
+ \fi}}}%
+ \gdef\@subfigcaptionlist{}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@makesubfigurecaption}
+% \begin{macro}{\@makesubtablecaption}
+%
+% \changes{v2.1}{17 Jan 1997}{Added the new font control.}
+%
+% By default, the |\@subfigurecaption| and |\@subtablecaption|
+% commands are identical. Unlike the standard |\@makecaption| command,
+% we assume that the first argument (the label number produced by
+% the |\@thesubfigure| or the |\@thesubtable|) contains any trailing
+% separator characters or spacing (which makes it easier to customize).
+%
+% \newpage^finalhack
+%
+% The |\@makesubfigurecaption| command first checks the size of the
+% caption typeset as a single line. It knocks off twice the
+% |\subfigcapmargin| (at it's regular size) to determine the with of the
+% caption and label.
+%
+% \begin{macrocode}
+\newcommand{\@makesubfigurecaption}[2]{%
+ \setbox\@tempboxa\hbox{%
+ \subcapsize
+ {\subcaplabelfont #1}%
+ {\subcapfont\ignorespaces #2}}%
+ \@tempdimb=-\subfigcapmargin
+ \multiply\@tempdimb\tw@
+ \advance\@tempdimb\@tempdima
+% \end{macrocode}
+%
+% Next it creates a horizontal box of that width and if the label plus
+% the text was too wide or if the \Lif{subcapnooneline} flag is true,
+% then it sends off the label and subcaption to |\subfig@caption| to
+% typset as a paragraph. NOTE: |\subfig@caption| assumes that
+% |\@tempbdimb| has the calculated width for the paragraph.
+%
+% If the label plus the text will fit and the \Lif{subcapnooneline} flag
+% is false, then we just return them (from box |\@tempboxa|).
+%
+% \begin{macrocode}
+ \hbox to\@tempdima{%
+ \hss
+ \ifdim \wd\@tempboxa >\@tempdimb
+ \subfig@caption{#1}{#2}%
+ \else\ifsubcapnooneline
+ \subfig@caption{#1}{#2}%
+ \else
+ \box\@tempboxa
+ \fi\fi
+ \hss}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\let\@makesubtablecaption=\@makesubfigurecaption
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\subfig@caption}
+%
+% \changes{v2.1}{23 Jan 2002}{Added \cmd{\subcapfont} and
+% \cmd{\ignorespaces} before the caption text. So that it does not
+% interfere with the label font settings. This fixes a bug found by
+% Axel Sommerfeldt.}
+%
+% \begin{macro}{\subfig@captionpar}
+%
+% \changes{v2.1}{23 Jan 2002}{Simplified by removing the font settings.
+% It is up to the caller to enforce these! This fixes a bug found by
+% Axel Sommerfeldt.}
+%
+% \changes{v2.1}{17 Jan 1997}{Added the new font control.}
+%
+% These commands are called to typeset a multiple-line subcaption (or a
+% single line when \Lif{subcapnooneline} is true). Depending on the
+% \Lif{subcapcenter} and \Lif{subcapcenterlast} flags, the text will be
+% justified (both false), centered (\Lif{subcapcenter} true), or
+% justified with the last line centered (only the flag
+% \Lif{subcapcenterlast} set true).
+%
+% \begin{macrocode}
+\newcommand{\subfig@caption}[2]{%
+ \ifsubcaphang
+ \sbox{\@tempboxa}{\subcapsize\subcaplabelfont #1}%
+ \addtolength{\@tempdimb}{-\wd\@tempboxa}%
+ \usebox{\@tempboxa}%
+ \subfig@captionpar{\@tempdimb}{%
+ {\subcapfont\ignorespaces #2}}%
+ \else
+ \subfig@captionpar{\@tempdimb}{%
+ {\subcaplabelfont #1}%
+ {\subcapfont\ignorespaces #2}}%
+ \fi}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand{\subfig@captionpar}[2]{%
+ \parbox[t]{#1}{%
+ \subcapsize
+ \ifsubcapraggedright
+ \setlength{\leftskip}{\z@}%
+ \setlength{\@rightskip}{\@flushglue}%
+ \setlength{\rightskip}{\@rightskip}%
+ \setlength{\parindent}{\z@}%
+ \else\ifsubcapcenter
+ \setlength{\leftskip}{\@flushglue}%
+ \setlength{\rightskip}{\@flushglue}%
+ \setlength{\parfillskip}{\z@skip}%
+ \else\ifsubcapcenterlast
+ \addtolength{\leftskip}{\z@ plus 1fil}%
+ \addtolength{\rightskip}{\z@ plus -1fil}%
+ \setlength{\parfillskip}{\z@ plus 2fil}%
+ \fi\fi\fi
+ #2}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Patches to the Standard Environment}
+% \label{sec:patches}
+%
+% The following adjust the standard environment for the
+% \Lpack{subfigure} package. They are designed as wrappers to the
+% current definition of the standard commands to minimize any chance of
+% conflict with other packages or to extend \LaTeX.
+%
+% \begin{macro}{\@dottedxxxline}
+% \label{sec:dl}
+% This is a generalized wrapper for the |\@dottedtocline| command.
+% It checks for the level based on the output file (first argument)
+% and not using only |\@tocdepth|. (See section~\ref{sec:listof}
+% for a description of the arguments.)
+%
+% \begin{macrocode}
+\newcommand*{\@dottedxxxline}[6]{%
+ \ifnum #2>\@nameuse{c@#1depth}\else
+ \@dottedtocline{0}{#3}{#4}{#5}{#6}
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\subfig@end@float}
+% \begin{macro}{\subfig@end@dblfloat}
+% \begin{macro}{\end@float}
+% \begin{macro}{\end@dblfloat}
+%
+% \changes{v2.1}{05 Jan 1998}{Added this section to minimize the need
+% for \cmd{\listofcaptions}.}
+%
+% These commands patch the end of the \Lenv{float} environment so that it will
+% dump out the subcaptions if any remain at this point. This can occur
+% when using the \Lopt{TOPCAP} options.
+% \begin{macrocode}
+\let\subfig@end@float=\end@float
+% \end{macrocode}
+%
+% \begin{macrocode}
+\renewcommand*{\end@float}{%
+ \@listsubcaptions{\@captype}%
+ \subfig@end@float}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\let\subfig@end@dblfloat=\end@dblfloat
+% \end{macrocode}
+%
+% \begin{macrocode}
+\renewcommand*{\end@dblfloat}{%
+ \@listsubcaptions{\@captype}%
+ \subfig@end@dblfloat}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \newpage^finalhack
+% \enlargethispage{3\baselineskip}^finalhack
+%
+% \begin{macro}{\subfig@oldcaption}
+% \begin{macro}{\@caption}
+%
+% \changes{v2.1}{23 Jan 2002}{Now using \cmd{\@nameuse} to build names.
+% Added a check for topcap flag. If it is not defined, we assume that
+% this float type does not support subfigures.}
+%
+% \changes{v2.1}{05 Jan 1998}{Changed to print the subcaptions before
+% or after the caption, depending on the TOPCAP setting of the current
+% environment.}
+%
+% Next, we redefine the current |\@caption| command to dump any
+% subcaptions saved. First the `old' caption command is called to
+% add the line to the ``List-of'' file and then the list of
+% subcaptions, |\@subfigcaptionlist| is written to the same file.
+% Lastly, the |\@subfigcaptionlist| is reinitialized.
+%
+% \begin{macrocode}
+\let\subfig@oldcaption=\@caption
+% \end{macrocode}
+%
+% \begin{macrocode}
+\long\def\@caption#1[#2]#3{%
+ \@ifundefined{if#1topcap}%
+ {\subfig@oldcaption{#1}[{#2}]{#3}}%
+ {\@nameuse{if#1topcap}%
+ \@listsubcaptions{#1}%
+ \subfig@oldcaption{#1}[{#2}]{#3}%
+ \else
+ \subfig@oldcaption{#1}[{#2}]{#3}%
+ \@listsubcaptions{#1}%
+ \fi}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\subfig@oldlabel}
+%
+% To support the redefinition of the |\label| command within the body of
+% the subfloats, we will use |\subfig@oldlabel| to save the current
+% definition of |\label| and create the |\subfloat@label| command to take its
+% place during the processing of the |\subfigure| command. Since the
+% definition of |\label| may change as packages are loaded, we save the
+% definition each time that |\label| is replaced with |\sub@label|
+% (see \ref{sec:subfigure} above).
+%
+% \begin{macrocode}
+\let\subfig@oldlabel=\relax
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\subfloat@label}
+% \begin{macro}{\sub@label}
+%
+% \changes{v2.1.4}{02 Jul 2002}{Added reference to this command via
+% the name \cmd{subfloat@label} to avoid packages that replace the
+% name without the support of the optional argument. The old name
+% is still here to decoy the other packages. Added chapter number
+% in the automatically generated label to increase uniqueness.}
+%
+% One difference from the regular |\label| command is that there is an
+% optional argument (note with parentheses rather than square brackets)
+% that is only used with the \Lpack{hyperref} package to define the
+% {\em bookmark\/} argument to the label. Typically, this would be a
+% copy or paraphrase of the subcaption text. If this is not given and
+% the \Lpack{hyperref} package is being used, then the {\em bookmark\/}
+% argument is of the form ``Subfigure\textvisiblespace 1(a)''.
+%
+% \begin{macrocode}
+\newcommand*{\subfloat@label}{%
+ \@ifnextchar(
+ {\sf@sub@label}
+ {\sf@sub@label(Sub\@captype\space
+ \@ifundefined{thechapter}{}{%
+ \@nameuse{thechapter}\space}%
+ \@nameuse{p@sub\@captype}%
+ \@nameuse{thesub\@captype}.)}}
+% \end{macrocode}
+% \begin{macrocode}
+\let\sub@label\subfloat@label
+% \end{macrocode}
+%
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\sf@sub@label}
+%
+% \changes{v2.1.4}{02 Jul 2002}{Moved \cmd{\relax} from the
+% \cmd{\sf@@sub@label} to here.}
+%
+% \changes{v2.1.1}{15 Mar 2002}{Added coordination with the hyperref
+% package.}
+%
+% The |\sf@sub@label| parses the optional argument and (if the
+% \Lpack{hyperref} Package is loaded) saves the {\em bookmark\/} text
+% as |\@currentlabelname|. It then calls the |\sf@@sub@label| command
+% to the real processing of the label.
+%
+% \begin{macrocode}
+\def\sf@sub@label(#1)#2{%
+ \ifhyperrefloaded
+ \protected@edef\@currentlabelname{%
+ \expandafter\strip@period #1\relax.\relax\@@@}%
+ \fi
+ \sf@@sub@label{#2}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\sf@@sub@label}
+%
+% \changes{v2.1.4}{02 Jul 2002}{Moved \cmd{\relax} from here to the
+% \cmd{\sf@sub@label}.}
+%
+% \changes{v2.1.2}{26 Mar 2002}{Changed to simplify the operation and
+% to avoid a bug in the hyperref package.}
+%
+% \changes{v2.1.1}{15 Mar 2002}{Added coordination with the hyperref
+% package.}
+%
+% In order to support the \Lpack{hyperref} package we check if it was
+% loaded and use the proper form of the |\newlabel| command. |\sf@@sub@label|
+% operates by first calling the old |\label| definition (which adds a
+% |\newlabel| command to the \Lfile{*.aux} file) and then adds another
+% |\newlabel| command to the \Lfile{*.aux} file with a similar reference
+% name (with `sub@' prepended) and the value of |\@@thesubfigure| or
+% |\@@thesubtable|.
+%
+% If the |\ifhyperrefloaded| flag is set, then the |\newlabel| command
+% has three extra fields, the first is the value of |\@currentlabelname|,
+% which is either of the form ``Subfigure\textvisiblespace1(a)'' or
+% was defined by the optional argument to |\label| (actually
+% |\sub@label|). The second extra field is the hypertext anchor name
+% and the third is unused. Otherwise, the we us the standard |\newlabel|
+% form to write the sub-reference.
+%
+% \begin{macrocode}
+\newcommand*{\sf@@sub@label}[1]{%
+ \@bsphack
+ \subfig@oldlabel{#1}%
+ \ifhyperrefloaded
+ \protected@write\@auxout{}{%
+ \string\newlabel{sub@#1}%
+ {{\@nameuse{@@thesub\@captype}}%
+ {\thepage}%
+ {\expandafter\strip@period\@currentlabelname\relax.\relax\@@@}%
+ {\@currentHref}%
+ {}}}%
+ \else
+ \protected@write\@auxout{}{%
+ \string\newlabel{sub@#1}%
+ {{\@nameuse{@@thesub\@captype}}%
+ {\thepage}}}%
+ \fi
+ \@esphack}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\subref}
+%
+% The |\subref| command is the same as the |\ref| command except that
+% |\@@thesubtable| instead of |\p@subfigure\thesubfigure| or
+% |\p@subtable\thesubtable|. This is often of use for local references
+% within the figure where the figure number may be assumed; or, for ease
+% in constructing a range of references within a figure with many
+% subfigures.
+%
+% \begin{macrocode}
+\newcommand\subref[1]{%
+ \ref{sub@#1}}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\Subref}
+%
+% \changes{v2.1.2}{26 Mar 2002}{Changed \cmd{\subref*} to \cmd{\Subref} to
+% avoid problems in writing to the \Lfile{aux} file.}
+%
+% \changes{v2.1}{23 Jan 2002}{Added \cmd{\subref*} at the request of Benoit
+% Hudson (bhudson\@cs.cmu.edu).}
+%
+% The |\Subref| command is the same as |\subref|, except that it adds
+% |\subcaplabelfont| before the reference so that it uses the same font
+% (except that the current font size is maintained).
+%
+% \begin{macrocode}
+\newcommand\Subref[1]{%
+ {\subcaplabelfont
+ \ref{sub@#1}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \iffalse
+%</package>
+% \fi
+%
+% \Finale
+%
+\endinput
diff --git a/obsolete/macros/latex/contrib/subfigure/subfigure.ins b/obsolete/macros/latex/contrib/subfigure/subfigure.ins
new file mode 100644
index 0000000000..9c7902090a
--- /dev/null
+++ b/obsolete/macros/latex/contrib/subfigure/subfigure.ins
@@ -0,0 +1,64 @@
+%%
+%% This is file `subfigure.ins', the installation file for the
+%% `subfigure' package.
+%%
+%% Copyright (C) 1986-2002 Steven Douglas Cochran.
+%%
+%% The subfigure package is free software; it may be distributed under
+%% the conditions of the LaTeX Project Public License, either version 1.2
+%% of this license or (at your option) any later version. The latest
+%% version of this license is in:
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.2 or later is part of all distributions of LaTeX version
+%% 1999/09/03 or later.
+%%
+%% The subfigure package 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 LaTeX
+%% Project Public License for more details.
+%%
+\def\batchfile{subfigure.ins}
+\input docstrip.tex
+
+\keepsilent
+\generateFile{ltxdoc.cfg}{t}{\from{subfigure.dtx}{ltxdoc}}
+
+\keepsilent
+\generateFile{subfigure.cfg}{t}{\from{subfigure.dtx}{newconf}}
+
+\preamble
+
+Copyright (C) 1986-2002 Steven Douglas Cochran.
+
+This file is NOT the source for subfigure, because almost all comments
+have been stripped from it. It is NOT the preferred form of subfigure
+for making modifications to it.
+
+Therefore you can NOT redistribute and/or modify THIS file. You can
+however redistribute the complete source (subfigure.dtx and
+subfigure.ins) and/or modify it under the terms of the LaTeX Project
+Public License, either version 1.2 of this license or (at your option)
+any later version. The latest version of this license is in:
+ http://www.latex-project.org/lppl.txt
+and version 1.2 or later is part of all distributions of LaTeX version
+1999/09/03 or later.
+
+The subfigure package 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 LaTeX
+Project Public License for more details.
+
+\endpreamble
+\generateFile{subfigure.sty}{t}{\from{subfigure.dtx}{package}}
+
+\Msg{***********************************************************}
+\Msg{* To finish the installation you have to move the file}
+\Msg{* `subfigure.sty' into a directory searched by TeX.}
+\Msg{*}
+\Msg{* To have the newer look-and-feel (but with different}
+\Msg{* spacing than the old version) move the file}
+\Msg{* `subfigure.cfg' into a directory searched by TeX.}
+\Msg{*}
+\Msg{* To produce the documentation run the file `subfigure.dtx'}
+\Msg{* through LaTeX.}
+\Msg{***********************************************************}
diff --git a/obsolete/macros/latex/contrib/subfigure/subfigure.pdf b/obsolete/macros/latex/contrib/subfigure/subfigure.pdf
new file mode 100644
index 0000000000..3bdbbd9f32
--- /dev/null
+++ b/obsolete/macros/latex/contrib/subfigure/subfigure.pdf
Binary files differ
diff --git a/obsolete/macros/latex/contrib/subfigure/test.tex b/obsolete/macros/latex/contrib/subfigure/test.tex
new file mode 100644
index 0000000000..c94f19d94b
--- /dev/null
+++ b/obsolete/macros/latex/contrib/subfigure/test.tex
@@ -0,0 +1,652 @@
+\documentclass{article}
+%\usepackage[sl]{caption}
+%\usepackage[sl]{caption2}
+%\usepackage[subfigure21]{ccaption}
+\usepackage[bf,SL,BF]{subfigure}
+%\usepackage[sl]{caption}
+%\usepackage[sl]{caption2}
+%\usepackage[subfigure21]{ccaption}
+
+\subfigcaptopadj=2pt
+
+\newcommand{\figbox}[1]{%
+ \fbox{%
+ \vbox to 1in{%
+ \vfil
+ \hbox to 2in{%
+ \hfil
+ #1%
+ \hfil}%
+ \vfil}}}
+
+\newcommand{\goodgap}{%
+ \hspace{\subfigcapskip}}
+
+\makeatletter
+ \newcommand{\setcaptype}[1]{%
+ \renewcommand{\@captype}{#1}}
+\makeatother
+
+\setcounter{lofdepth}{2}
+\setcounter{lotdepth}{2}
+
+\makeatletter
+\long\def\test#1{%
+ \begingroup
+ \toks0{[#1]}%
+ \newlinechar`\/
+ \message{/\the\toks0:
+ \if\sf@blank{#1}%
+ EMPTY
+ \else
+ NOT empty
+ \fi}%
+ \endgroup}
+\makeatother
+
+\begin{document}
+
+\listoffigures
+\clearpage
+
+\listoftables
+\clearpage
+
+\section{Multiple figures}
+
+\figuretopcapfalse
+\tabletopcapfalse
+
+Figure~\ref{fig:Afirst}[\pageref{fig:Afirst}] has two subfigures
+\ref{fig:AfirstA}[\pageref{fig:AfirstA}] and
+\ref{fig:AfirstB}[\pageref{fig:AfirstB}].
+%
+Figure~\ref{fig:Asecond}[\pageref{fig:Asecond}] has two subfigures
+\ref{fig:AsecondA}[\pageref{fig:AsecondA}] and
+\ref{fig:AsecondB}[\pageref{fig:AsecondB}].
+%
+Figure~\ref{fig:Athird}[\pageref{fig:Athird}] has two subfigures
+\ref{fig:AthirdA}[\pageref{fig:AthirdA}] and
+\ref{fig:AthirdB}[\pageref{fig:AthirdB}].
+%
+Figure~\ref{fig:Afourth}[\pageref{fig:Afourth}] has two subfigures
+\ref{fig:AfourthA}[\pageref{fig:AfourthA}] and
+\ref{fig:AfourthB}[\pageref{fig:AfourthB}].
+%
+Figure~\ref{fig:Afifth}[\pageref{fig:Afifth}] has two subfigures
+\ref{fig:AfifthA}[\pageref{fig:AfifthA}] and
+\ref{fig:AfifthB}[\pageref{fig:AfifthB}].
+%
+Figure~\ref{fig:Asixth}[\pageref{fig:Asixth}] has two subfigures
+\ref{fig:AsixthA}[\pageref{fig:AsixthA}] and
+\ref{fig:AsixthB}[\pageref{fig:AsixthB}].
+
+\begin{figure}%
+ \begin{center}%
+ \subfigure[One subone.\label{fig:AfirstA}]{\figbox{One subone}}%
+ \goodgap
+ \subfigure[One subtwo.\label{fig:AfirstB}]{\figbox{One subtwo}}\\[-10pt]
+ \caption{First figure.}%
+ \label{fig:Afirst}%
+%
+ \subfigure[Two subone.\label{fig:AsecondA}]{\figbox{Two subone}}%
+ \goodgap
+ \subfigure[Two subtwo.\label{fig:AsecondB}]{\figbox{Two subtwo}}\\[-10pt]
+ \caption{Second figure.}%
+ \label{fig:Asecond}%
+%
+ \subfigure[Three subone.\label{fig:AthirdA}]{\figbox{Three subone}}%
+ \goodgap
+ \subfigure[Three subtwo.\label{fig:AthirdB}]{\figbox{Three subtwo}}\\[-10pt]
+ \caption{Third figure.}%
+ \label{fig:Athird}%
+ \end{center}
+\end{figure}
+
+\begin{figure}%
+ \begin{center}%
+ \subfigure[Four subone.\label{fig:AfourthA}]{\figbox{Four subone}}%
+ \goodgap
+ \subfigure[Four subtwo.\label{fig:AfourthB}]{\figbox{Four subtwo}}\\[-10pt]
+ \caption{Fourth figure.}%
+ \label{fig:Afourth}%
+%
+ \subfigure[Five subone.\label{fig:AfifthA}]{\figbox{Five subone}}%
+ \goodgap
+ \subfigure[Five subtwo.\label{fig:AfifthB}]{\figbox{Five subtwo}}\\[-10pt]
+ \caption{Fifth figure.}%
+ \label{fig:Afifth}%
+%
+ \subfigure[Six subone.\label{fig:AsixthA}]{\figbox{Six subone}}%
+ \goodgap
+ \subfigure[Six subtwo.\label{fig:AsixthB}]{\figbox{Six subtwo}}\\[-10pt]
+ \caption{Sixth figure.}%
+ \label{fig:Asixth}%
+ \end{center}
+\end{figure}
+
+\section{Multiple tables}
+
+Table~\ref{tab:Afirst}[\pageref{tab:Afirst}] has two subtables
+\ref{tab:AfirstA}[\pageref{tab:AfirstA}] and
+\ref{tab:AfirstB}[\pageref{tab:AfirstB}].
+%
+Table~\ref{tab:Asecond}[\pageref{tab:Asecond}] has two subtables
+\ref{tab:AsecondA}[\pageref{tab:AsecondA}] and
+\ref{tab:AsecondB}[\pageref{tab:AsecondB}].
+%
+Table~\ref{tab:Athird}[\pageref{tab:Athird}] has two subtables
+\ref{tab:AthirdA}[\pageref{tab:AthirdA}] and
+\ref{tab:AthirdB}[\pageref{tab:AthirdB}].
+%
+Table~\ref{tab:Afourth}[\pageref{tab:Afourth}] has two subtables
+\ref{tab:AfourthA}[\pageref{tab:AfourthA}] and
+\ref{tab:AfourthB}[\pageref{tab:AfourthB}].
+%
+Table~\ref{tab:Afifth}[\pageref{tab:Afifth}] has two subtables
+\ref{tab:AfifthA}[\pageref{tab:AfifthA}] and
+\ref{tab:AfifthB}[\pageref{tab:AfifthB}].
+%
+Table~\ref{tab:Asixth}[\pageref{tab:Asixth}] has two subtables
+\ref{tab:AsixthA}[\pageref{tab:AsixthA}] and
+\ref{tab:AsixthB}[\pageref{tab:AsixthB}].
+
+\begin{table}%
+ \begin{center}%
+ \subtable[One subone.\label{tab:AfirstA}]{\figbox{One subone}}%
+ \goodgap
+ \subtable[One subtwo.\label{tab:AfirstB}]{\figbox{One subtwo}}\\[-10pt]
+ \caption{First table.}%
+ \label{tab:Afirst}%
+%
+ \subtable[Two subone.\label{tab:AsecondA}]{\figbox{Two subone}}%
+ \goodgap
+ \subtable[Two subtwo.\label{tab:AsecondB}]{\figbox{Two subtwo}}\\[-10pt]
+ \caption{Second table.}%
+ \label{tab:Asecond}%
+%
+ \subtable[Three subone.\label{tab:AthirdA}]{\figbox{Three subone}}%
+ \goodgap
+ \subtable[Three subtwo.\label{tab:AthirdB}]{\figbox{Three subtwo}}\\[-10pt]
+ \caption{Third table.}%
+ \label{tab:Athird}%
+ \end{center}%
+\end{table}
+
+\begin{table}%
+ \begin{center}%
+ \subtable[Four subone.\label{tab:AfourthA}]{\figbox{Four subone}}%
+ \goodgap
+ \subtable[Four subtwo.\label{tab:AfourthB}]{\figbox{Four subtwo}}\\[-10pt]
+ \caption{Fourth table.}%
+ \label{tab:Afourth}%
+%
+ \subtable[Five subone.\label{tab:AfifthA}]{\figbox{Five subone}}%
+ \goodgap
+ \subtable[Five subtwo.\label{tab:AfifthB}]{\figbox{Five subtwo}}\\[-10pt]
+ \caption{Fifth table.}%
+ \label{tab:Afifth}%
+%
+ \subtable[Six subone.\label{tab:AsixthA}]{\figbox{Six subone}}%
+ \goodgap
+ \subtable[Six subtwo.\label{tab:AsixthB}]{\figbox{Six subtwo}}\\[-10pt]
+ \caption{Sixth table.}%
+ \label{tab:Asixth}%
+ \end{center}%
+\end{table}
+
+\section{Multiple figures with ``\slshape{captop}''}
+
+\figuretopcaptrue
+
+Figure~\ref{fig:Bfirst}[\pageref{fig:Bfirst}] has two subfigures
+\ref{fig:BfirstA}[\pageref{fig:BfirstA}] and
+\ref{fig:BfirstB}[\pageref{fig:BfirstB}].
+%
+Figure~\ref{fig:Bsecond}[\pageref{fig:Bsecond}] has two subfigures
+\ref{fig:BsecondA}[\pageref{fig:BsecondA}] and
+\ref{fig:BsecondB}[\pageref{fig:BsecondB}].
+%
+Figure~\ref{fig:Bthird}[\pageref{fig:Bthird}] has two subfigures
+\ref{fig:BthirdA}[\pageref{fig:BthirdA}] and
+\ref{fig:BthirdB}[\pageref{fig:BthirdB}].
+%
+Figure~\ref{fig:Bfourth}[\pageref{fig:Bfourth}] has two subfigures
+\ref{fig:BfourthA}[\pageref{fig:BfourthA}] and
+\ref{fig:BfourthB}[\pageref{fig:BfourthB}].
+%
+Figure~\ref{fig:Bfifth}[\pageref{fig:Bfifth}] has two subfigures
+\ref{fig:BfifthA}[\pageref{fig:BfifthA}] and
+\ref{fig:BfifthB}[\pageref{fig:BfifthB}].
+%
+Figure~\ref{fig:Bsixth}[\pageref{fig:Bsixth}] has two subfigures
+\ref{fig:BsixthA}[\pageref{fig:BsixthA}] and
+\ref{fig:BsixthB}[\pageref{fig:BsixthB}].
+
+\begin{figure}%
+ \begin{center}%
+ \caption{First figure.}%
+ \label{fig:Bfirst}%
+ \subfigure[One subone.\label{fig:BfirstA}]{\figbox{One subone}}%
+ \goodgap
+ \subfigure[One subtwo.\label{fig:BfirstB}]{\figbox{One subtwo}}\\
+%
+ \caption{Second figure.}%
+ \label{fig:Bsecond}%
+ \subfigure[Two subone.\label{fig:BsecondA}]{\figbox{Two subone}}%
+ \goodgap
+ \subfigure[Two subtwo.\label{fig:BsecondB}]{\figbox{Two subtwo}}\\
+%
+ \caption{Third figure.}%
+ \label{fig:Bthird}%
+ \subfigure[Three subone.\label{fig:BthirdA}]{\figbox{Three subone}}%
+ \goodgap
+ \subfigure[Three subtwo.\label{fig:BthirdB}]{\figbox{Three subtwo}}%
+ \end{center}%
+\end{figure}
+
+\begin{figure}%
+ \begin{center}%
+ \caption{Fourth figure.}%
+ \label{fig:Bfourth}%
+ \subfigure[Four subone.\label{fig:BfourthA}]{\figbox{Four subone}}%
+ \goodgap
+ \subfigure[Four subtwo.\label{fig:BfourthB}]{\figbox{Four subtwo}}\\
+%
+ \caption{Fifth figure.}%
+ \label{fig:Bfifth}%
+ \subfigure[Five subone.\label{fig:BfifthA}]{\figbox{Five subone}}%
+ \goodgap
+ \subfigure[Five subtwo.\label{fig:BfifthB}]{\figbox{Five subtwo}}\\
+%
+ \caption{Sixth figure.}%
+ \label{fig:Bsixth}%
+ \subfigure[Six subone.\label{fig:BsixthA}]{\figbox{Six subone}}%
+ \goodgap
+ \subfigure[Six subtwo.\label{fig:BsixthB}]{\figbox{Six subtwo}}%
+ \end{center}%
+\end{figure}
+
+\section{Multiple tables with ``\slshape{captop}''}
+
+\tabletopcaptrue
+
+Table~\ref{tab:Bfirst}[\pageref{tab:Bfirst}] has two subtables
+\ref{tab:BfirstA}[\pageref{tab:BfirstA}] and
+\ref{tab:BfirstB}[\pageref{tab:BfirstB}].
+%
+Table~\ref{tab:Bsecond}[\pageref{tab:Bsecond}] has two subtables
+\ref{tab:BsecondA}[\pageref{tab:BsecondA}] and
+\ref{tab:BsecondB}[\pageref{tab:BsecondB}].
+%
+Table~\ref{tab:Bthird}[\pageref{tab:Bthird}] has two subtables
+\ref{tab:BthirdA}[\pageref{tab:BthirdA}] and
+\ref{tab:BthirdB}[\pageref{tab:BthirdB}].
+%
+Table~\ref{tab:Bfourth}[\pageref{tab:Bfourth}] has two subtables
+\ref{tab:BfourthA}[\pageref{tab:BfourthA}] and
+\ref{tab:BfourthB}[\pageref{tab:BfourthB}].
+%
+Table~\ref{tab:Bfifth}[\pageref{tab:Bfifth}] has two subtables
+\ref{tab:BfifthA}[\pageref{tab:BfifthA}] and
+\ref{tab:BfifthB}[\pageref{tab:BfifthB}].
+%
+Table~\ref{tab:Bsixth}[\pageref{tab:Bsixth}] has two subtables
+\ref{tab:BsixthA}[\pageref{tab:BsixthA}] and
+\ref{tab:BsixthB}[\pageref{tab:BsixthB}].
+
+\begin{table}%
+ \begin{center}%
+ \caption{First table.}%
+ \label{tab:Bfirst}%
+ \subtable[One subone.\label{tab:BfirstA}]{\figbox{One subone}}%
+ \goodgap
+ \subtable[One subtwo.\label{tab:BfirstB}]{\figbox{One subtwo}}\\
+%
+ \caption{Second table.}%
+ \label{tab:Bsecond}%
+ \subtable[Two subone.\label{tab:BsecondA}]{\figbox{Two subone}}%
+ \goodgap
+ \subtable[Two subtwo.\label{tab:BsecondB}]{\figbox{Two subtwo}}\\
+%
+ \caption{Third table.}%
+ \label{tab:Bthird}%
+ \subtable[Three subone.\label{tab:BthirdA}]{\figbox{Three subone}}%
+ \goodgap
+ \subtable[Three subtwo.\label{tab:BthirdB}]{\figbox{Three subtwo}}\\
+ \end{center}%
+\end{table}
+
+\begin{table}%
+ \begin{center}%
+ \caption{Fourth table.}%
+ \label{tab:Bfourth}%
+ \subtable[Four subone.\label{tab:BfourthA}]{\figbox{Four subone}}%
+ \goodgap
+ \subtable[Four subtwo.\label{tab:BfourthB}]{\figbox{Four subtwo}}%
+%
+ \caption{Fifth table.}%
+ \label{tab:Bfifth}%
+ \subtable[Five subone.\label{tab:BfifthA}]{\figbox{Five subone}}%
+ \goodgap
+ \subtable[Five subtwo.\label{tab:BfifthB}]{\figbox{Five subtwo}}%
+%
+ \caption{Sixth table.}%
+ \label{tab:Bsixth}%
+ \subtable[Six subone.\label{tab:BsixthA}]{\figbox{Six subone}}%
+ \goodgap
+ \subtable[Six subtwo.\label{tab:BsixthB}]{\figbox{Six subtwo}}%
+ \end{center}%
+\end{table}
+
+
+\section{Multiple figures with ``\slshape{CAPTOP}''}
+
+\subfiguretopcaptrue
+
+Figure~\ref{fig:Cfirst}[\pageref{fig:Cfirst}] has two subfigures
+\ref{fig:CfirstA}[\pageref{fig:CfirstA}] and
+\ref{fig:CfirstB}[\pageref{fig:CfirstB}].
+%
+Figure~\ref{fig:Csecond}[\pageref{fig:Csecond}] has two subfigures
+\ref{fig:CsecondA}[\pageref{fig:CsecondA}] and
+\ref{fig:CsecondB}[\pageref{fig:CsecondB}].
+%
+Figure~\ref{fig:Cthird}[\pageref{fig:Cthird}] has two subfigures
+\ref{fig:CthirdA}[\pageref{fig:CthirdA}] and
+\ref{fig:CthirdB}[\pageref{fig:CthirdB}].
+%
+Figure~\ref{fig:Cfourth}[\pageref{fig:Cfourth}] has two subfigures
+\ref{fig:CfourthA}[\pageref{fig:CfourthA}] and
+\ref{fig:CfourthB}[\pageref{fig:CfourthB}].
+%
+Figure~\ref{fig:Cfifth}[\pageref{fig:Cfifth}] has two subfigures
+\ref{fig:CfifthA}[\pageref{fig:CfifthA}] and
+\ref{fig:CfifthB}[\pageref{fig:CfifthB}].
+%
+Figure~\ref{fig:Csixth}[\pageref{fig:Csixth}] has two subfigures
+\ref{fig:CsixthA}[\pageref{fig:CsixthA}] and
+\ref{fig:CsixthB}[\pageref{fig:CsixthB}].
+
+\begin{figure}%
+ \begin{center}%
+ \caption{First figure.}%
+ \label{fig:Cfirst}%
+ \subfigure[One subone.\label{fig:CfirstA}]{\figbox{One subone}}%
+ \goodgap
+ \subfigure[One subtwo.\label{fig:CfirstB}]{\figbox{One subtwo}}\\
+%
+ \caption{Second figure.}%
+ \label{fig:Csecond}%
+ \subfigure[Two subone.\label{fig:CsecondA}]{\figbox{Two subone}}%
+ \goodgap
+ \subfigure[Two subtwo.\label{fig:CsecondB}]{\figbox{Two subtwo}}\\
+%
+ \caption{Third figure.}%
+ \label{fig:Cthird}%
+ \subfigure[Three subone.\label{fig:CthirdA}]{\figbox{Three subone}}%
+ \goodgap
+ \subfigure[Three subtwo.\label{fig:CthirdB}]{\figbox{Three subtwo}}\\
+ \end{center}%
+\end{figure}
+
+\begin{figure}%
+ \begin{center}%
+ \caption{Fourth figure.}%
+ \label{fig:Cfourth}%
+ \subfigure[Four subone.\label{fig:CfourthA}]{\figbox{Four subone}}%
+ \goodgap
+ \subfigure[Four subtwo.\label{fig:CfourthB}]{\figbox{Four subtwo}}\\
+%
+ \caption{Fifth figure.}%
+ \label{fig:Cfifth}%
+ \subfigure[Five subone.\label{fig:CfifthA}]{\figbox{Five subone}}%
+ \goodgap
+ \subfigure[Five subtwo.\label{fig:CfifthB}]{\figbox{Five subtwo}}\\
+%
+ \caption{Sixth figure.}%
+ \label{fig:Csixth}%
+ \subfigure[Six subone.\label{fig:CsixthA}]{\figbox{Six subone}}%
+ \goodgap
+ \subfigure[Six subtwo.\label{fig:CsixthB}]{\figbox{Six subtwo}}\\
+ \end{center}%
+\end{figure}
+
+\section{Multiple tables with ``\slshape{CAPTOP}''}
+
+\subtabletopcaptrue
+
+Table~\ref{tab:Cfirst}[\pageref{tab:Cfirst}] has two subtables
+\ref{tab:CfirstA}[\pageref{tab:CfirstA}] and
+\ref{tab:CfirstB}[\pageref{tab:CfirstB}].
+%
+Table~\ref{tab:Csecond}[\pageref{tab:Csecond}] has two subtables
+\ref{tab:CsecondA}[\pageref{tab:CsecondA}] and
+\ref{tab:CsecondB}[\pageref{tab:CsecondB}].
+%
+Table~\ref{tab:Cthird}[\pageref{tab:Cthird}] has two subtables
+\ref{tab:CthirdA}[\pageref{tab:CthirdA}] and
+\ref{tab:CthirdB}[\pageref{tab:CthirdB}].
+%
+Table~\ref{tab:Cfourth}[\pageref{tab:Cfourth}] has two subtables
+\ref{tab:CfourthA}[\pageref{tab:CfourthA}] and
+\ref{tab:CfourthB}[\pageref{tab:CfourthB}].
+%
+Table~\ref{tab:Cfifth}[\pageref{tab:Cfifth}] has two subtables
+\ref{tab:CfifthA}[\pageref{tab:CfifthA}] and
+\ref{tab:CfifthB}[\pageref{tab:CfifthB}].
+%
+Table~\ref{tab:Csixth}[\pageref{tab:Csixth}] has two subtables
+\ref{tab:CsixthA}[\pageref{tab:CsixthA}] and
+\ref{tab:CsixthB}[\pageref{tab:CsixthB}].
+
+\begin{table}%
+ \begin{center}%
+ \caption{First table.}%
+ \label{tab:Cfirst}%
+ \subtable[One subone.\label{tab:CfirstA}]{\figbox{One subone}}%
+ \goodgap
+ \subtable[One subtwo.\label{tab:CfirstB}]{\figbox{One subtwo}}\\
+%
+ \caption{Second table.}%
+ \label{tab:Csecond}%
+ \subtable[Two subone.\label{tab:CsecondA}]{\figbox{Two subone}}%
+ \goodgap
+ \subtable[Two subtwo.\label{tab:CsecondB}]{\figbox{Two subtwo}}\\
+%
+ \caption{Third table.}%
+ \label{tab:Cthird}%
+ \subtable[Three subone.\label{tab:CthirdA}]{\figbox{Three subone}}%
+ \goodgap
+ \subtable[Three subtwo.\label{tab:CthirdB}]{\figbox{Three subtwo}}\\
+ \end{center}%
+\end{table}
+
+\begin{table}%
+ \begin{center}%
+ \caption{Fourth table.}%
+ \label{tab:Cfourth}%
+ \subtable[Four subone.\label{tab:CfourthA}]{\figbox{Four subone}}%
+ \goodgap
+ \subtable[Four subtwo.\label{tab:CfourthB}]{\figbox{Four subtwo}}\\
+%
+ \caption{Fifth table.}%
+ \label{tab:Cfifth}%
+ \subtable[Five subone.\label{tab:CfifthA}]{\figbox{Five subone}}%
+ \goodgap
+ \subtable[Five subtwo.\label{tab:CfifthB}]{\figbox{Five subtwo}}\\
+%
+ \caption{Sixth table.}%
+ \label{tab:Csixth}%
+ \subtable[Six subone.\label{tab:CsixthA}]{\figbox{Six subone}}%
+ \goodgap
+ \subtable[Six subtwo.\label{tab:CsixthB}]{\figbox{Six subtwo}}\\
+ \end{center}%
+\end{table}
+
+\section{Mixed figures and tables with mixed ``\slshape{captop}''}
+
+\figuretopcapfalse\setcounter{subfigure}{0}
+\subfiguretopcapfalse
+\tabletopcaptrue\setcounter{subtable}{0}
+\subtabletopcapfalse
+
+Figure~\ref{fig:Dfirst}[\pageref{fig:Dfirst}] has two subfigures
+\ref{fig:DfirstA}[\pageref{fig:DfirstA}] and
+\ref{fig:DfirstB}[\pageref{fig:DfirstB}].
+%
+Table~\ref{tab:Dfirst}[\pageref{tab:Dfirst}] has two subtables
+\ref{tab:DfirstA}[\pageref{tab:DfirstA}] and
+\ref{tab:DfirstB}[\pageref{tab:DfirstB}].
+%
+Figure~\ref{fig:Dsecond}[\pageref{fig:Dsecond}] has two subfigures
+\ref{fig:DsecondA}[\pageref{fig:DsecondA}] and
+\ref{fig:DsecondB}[\pageref{fig:DsecondB}].
+%
+Figure~\ref{fig:Dthird}[\pageref{fig:Dthird}] has two subfigures
+\ref{fig:DthirdA}[\pageref{fig:DthirdA}] and
+\ref{fig:DthirdB}[\pageref{fig:DthirdB}].
+%
+Table~\ref{tab:Dsecond}[\pageref{tab:Dsecond}] has two subtables
+\ref{tab:DsecondA}[\pageref{tab:DsecondA}] and
+\ref{tab:DsecondB}[\pageref{tab:DsecondB}].
+%
+Table~\ref{tab:Dthird}[\pageref{tab:Dthird}] has two subtables
+\ref{tab:DthirdA}[\pageref{tab:DthirdA}] and
+\ref{tab:DthirdB}[\pageref{tab:DthirdB}].
+%
+
+\begin{figure}%
+ \begin{center}%
+ \subfigure[One subone.\label{fig:DfirstA}]{\figbox{One subone}}%
+ \goodgap
+ \subfigure[One subtwo.\label{fig:DfirstB}]{\figbox{One subtwo}}\\[-10pt]
+ \caption{First figure.}%
+ \label{fig:Dfirst}%
+%
+ \setcaptype{table}%
+ \caption{First table.}%
+ \label{tab:Dfirst}%
+ \subtable[One subone.\label{tab:DfirstA}]{\figbox{One subone}}%
+ \goodgap
+ \subtable[One subtwo.\label{tab:DfirstB}]{\figbox{One subtwo}}\\
+ \listsubcaptions
+%
+ \setcaptype{figure}%
+ \subfigure[Two subone.\label{fig:DsecondA}]{\figbox{Two subone}}%
+ \goodgap
+ \subfigure[Two subtwo.\label{fig:DsecondB}]{\figbox{Two subtwo}}\\[-10pt]
+ \caption{Second figure.}%
+ \label{fig:Dsecond}%
+ \end{center}%
+\end{figure}
+
+\begin{table}%
+ \begin{center}%
+ \caption{Second table.}%
+ \label{tab:Dsecond}%
+ \subtable[Two subone.\label{tab:DsecondA}]{\figbox{Two subone}}%
+ \goodgap
+ \subtable[Two subtwo.\label{tab:DsecondB}]{\figbox{Two subtwo}}\\
+ \listsubcaptions
+%
+ \setcaptype{figure}%
+ \subfigure[Three subone.\label{fig:DthirdA}]{\figbox{Three subone}}%
+ \goodgap
+ \subfigure[Three subtwo.\label{fig:DthirdB}]{\figbox{Three subtwo}}\\[-10pt]
+ \caption{Third figure.}%
+ \label{fig:Dthird}%
+%
+ \setcaptype{table}%
+ \caption{Third table.}%
+ \label{tab:Dthird}%
+ \subtable[Three subone.\label{tab:DthirdA}]{\figbox{Three subone}}%
+ \goodgap
+ \subtable[Three subtwo.\label{tab:DthirdB}]{\figbox{Three subtwo}}\\
+ \end{center}%
+\end{table}
+
+
+\section{Mixed figures and tables with mixed ``\slshape{CAPTOP}''}
+
+\figuretopcapfalse\setcounter{subfigure}{0}
+\subfiguretopcapfalse
+\tabletopcaptrue\setcounter{subtable}{0}
+\subtabletopcaptrue
+
+Figure~\ref{fig:Efirst}[\pageref{fig:Efirst}] has two subfigures
+\ref{fig:EfirstA}[\pageref{fig:EfirstA}] and
+\ref{fig:EfirstB}[\pageref{fig:EfirstB}].
+%
+Table~\ref{tab:Efirst}[\pageref{tab:Efirst}] has two subtables
+\ref{tab:EfirstA}[\pageref{tab:EfirstA}] and
+\ref{tab:EfirstB}[\pageref{tab:EfirstB}].
+%
+Figure~\ref{fig:Esecond}[\pageref{fig:Esecond}] has two subfigures
+\ref{fig:EsecondA}[\pageref{fig:EsecondA}] and
+\ref{fig:EsecondB}[\pageref{fig:EsecondB}].
+%
+Figure~\ref{fig:Ethird}[\pageref{fig:Ethird}] has two subfigures
+\ref{fig:EthirdA}[\pageref{fig:EthirdA}] and
+\ref{fig:EthirdB}[\pageref{fig:EthirdB}].
+%
+Table~\ref{tab:Esecond}[\pageref{tab:Esecond}] has two subtables
+\ref{tab:EsecondA}[\pageref{tab:EsecondA}] and
+\ref{tab:EsecondB}[\pageref{tab:EsecondB}].
+%
+Table~\ref{tab:Ethird}[\pageref{tab:Ethird}] has two subtables
+\ref{tab:EthirdA}[\pageref{tab:EthirdA}] and
+\ref{tab:EthirdB}[\pageref{tab:EthirdB}].
+%
+
+\begin{figure}%
+ \begin{center}%
+ \subfigure[One subone.\label{fig:EfirstA}]{\figbox{One subone}}%
+ \goodgap
+ \subfigure[One subtwo.\label{fig:EfirstB}]{\figbox{One subtwo}}\\[-10pt]
+ \caption{First figure.}%
+ \label{fig:Efirst}%
+%
+ \setcaptype{table}%
+ \caption{First table.}%
+ \label{tab:Efirst}%
+ \subtable[One subone.\label{tab:EfirstA}]{\figbox{One subone}}%
+ \goodgap
+ \subtable[One subtwo.\label{tab:EfirstB}]{\figbox{One subtwo}}\\
+ \listsubcaptions
+%
+ \setcaptype{figure}%
+ \subfigure[Two subone.\label{fig:EsecondA}]{\figbox{Two subone}}%
+ \goodgap
+ \subfigure[Two subtwo.\label{fig:EsecondB}]{\figbox{Two subtwo}}\\[-10pt]
+ \caption{Second figure.}%
+ \label{fig:Esecond}%
+ \end{center}%
+\end{figure}
+
+\begin{table}%
+ \begin{center}%
+ \caption{Second table.}%
+ \label{tab:Esecond}%
+ \subtable[Two subone.\label{tab:EsecondA}]{\figbox{Two subone}}%
+ \goodgap
+ \subtable[Two subtwo.\label{tab:EsecondB}]{\figbox{Two subtwo}}\\
+ \listsubcaptions
+%
+ \setcaptype{figure}%
+ \subfigure[Three subone.\label{fig:EthirdA}]{\figbox{Three subone}}%
+ \goodgap
+ \subfigure[Three subtwo.\label{fig:EthirdB}]{\figbox{Three subtwo}}\\[-10pt]
+ \caption{Third figure.}%
+ \label{fig:Ethird}%
+%
+ \setcaptype{table}%
+ \caption{Third table.}%
+ \label{tab:Ethird}%
+ \subtable[Three subone.\label{tab:EthirdA}]{\figbox{Three subone}}%
+ \goodgap
+ \subtable[Three subtwo.\label{tab:EthirdB}]{\figbox{Three subtwo}}\\
+ \end{center}%
+\end{table}
+
+\end{document}
diff --git a/obsolete/macros/latex/contrib/subfigure/test2.tex b/obsolete/macros/latex/contrib/subfigure/test2.tex
new file mode 100644
index 0000000000..9260bb4460
--- /dev/null
+++ b/obsolete/macros/latex/contrib/subfigure/test2.tex
@@ -0,0 +1,95 @@
+\documentclass{article}
+\usepackage{fullpage}
+%\usepackage[tight]{subfigure}
+%\usepackage[loose,hang]{subfigure}
+\usepackage[tight,hang]{subfigure}
+
+\makeatletter
+\def\mpt{\@minipagetrue}
+\def\mpf{\@minipagefalse}
+%\renewcommand{\@thesubfigure}{\subcaplabelfont\thesubfigure\space\itshape}
+\makeatother
+
+\fboxsep=-\fboxrule
+%\renewcommand{\subcapfont}{\itshape}
+
+\newcommand{\figbox}[1]{%
+ \fbox{%
+ \vbox to 1in{%
+ \vfil
+ \hbox to 2in{%
+ \hfil
+ #1%
+ \hfil}%
+ \vfil}}}
+
+\begin{document}
+
+Figures wrapped to show any extra spaces introduced in processing the
+subfigures.
+
+\begin{figure}%
+ \centering
+ \fbox{%
+ \fbox{\subfigure[Subfigure One.\label{fig:A1}]{%
+ \figbox{SUBFIG ONE}}}%
+ \hspace{10pt}%
+ \fbox{\subfigure[Subfigure Two.\label{fig:A2}]{%
+ \figbox{SUBFIG TWO}}}}
+ \caption{Two side-by-side figures.}%
+ \label{fig:A}%
+\end{figure}
+
+\begin{figure}%
+ \begin{center}%
+ \fbox{\hbox to 4.13837in{\hss\vbox{%
+ \fbox{\mpt\subfigure[Subfigure Three.\label{fig:B1}]{%
+ \figbox{SUBFIG THREE}}}%
+ \hspace{10pt}%
+ \fbox{\mpt\subfigure[Subfigure Four.\label{fig:B2}]{%
+ \figbox{SUBFIG FOUR}}}\\[-1.5pt]
+ \fbox{\subfigure[Subfigure Five.\label{fig:B3}]{%
+ \figbox{SUBFIG FIVE}}}%
+ \hspace{10pt}%
+ \fbox{\subfigure[Subfigure Six.\label{fig:B4}]{%
+ \figbox{SUBFIG SIX}}}}\hss}}%
+ \end{center}
+ \caption{Four figures with specified suppression of extra padding.}%
+ \label{fig:B}%
+\end{figure}
+
+\begin{figure}
+ \centering
+ \fbox{%
+ \begin{minipage}{4.13837in}%
+%\mpf
+ \subfigure[Subfigure Seven.\label{fig:C1}]{%
+ \figbox{SUBFIG SEVEN}}%
+ \hspace{10pt}%
+ \subfigure[Subfigure Eight.\label{fig:C2}]{%
+ \figbox{SUBFIG EIGHT}}
+
+ \subfigure[Subfigure Nine.\label{fig:C3}]{%
+ \figbox{SUBFIG NINE}}%
+ \hspace{10pt}%
+ \subfigure[Subfigure Ten.\label{fig:C4}]{%
+ \figbox{SUBFIG TEN}}%
+ \end{minipage}}
+ \caption{Four figures with auto fitting in a minipage.}%
+ \label{fig:C}%
+\end{figure}
+
+\begin{figure}
+ \centering
+%
+ \subfigure[First caption.]{\fbox{Under figure/text}}\quad
+ \subfigure[Longer second caption.]{\fbox{Under figure/text}}\\
+%
+ \subfigure[Third caption.]{\figbox{Under figure/text}}\quad
+ \subfigure[Longer fourth caption. longer fourth caption.
+ longer fourth caption.]{\figbox{Under figure/text}}
+ \caption{Four figures testing caption fitting.}%
+\end{figure}
+
+\end{document}
+
diff --git a/obsolete/macros/latex/contrib/subfigure/test3.tex b/obsolete/macros/latex/contrib/subfigure/test3.tex
new file mode 100644
index 0000000000..4b1e507d9d
--- /dev/null
+++ b/obsolete/macros/latex/contrib/subfigure/test3.tex
@@ -0,0 +1,75 @@
+\documentclass{article}
+\usepackage{fullpage}
+\usepackage{subfigure}
+
+\fboxsep=-\fboxrule
+\def\textfraction{.1}
+
+\newcommand{\figbox}[1]{%
+ \fbox{%
+ \vbox to 1in{%
+ \vfil
+ \hbox to 2in{%
+ \parbox{2in}{%
+ \centering
+ #1}}%
+ \vfil}}}
+
+\begin{document}
+
+\setcounter{lofdepth}{2}
+\listoffigures
+\newpage
+
+\section{Reference Test}
+
+\begin{figure}%
+ \centering
+ \subfigure{%
+ \label{fig:A}%
+ \figbox{SUBFIG ONE:\\
+ (no opt)}}%
+ \quad
+ \subfigure[]{%
+ \label{fig:B}%
+ \figbox{SUBFIG TWO:\\
+ (empty opt)}}%
+ \label{fig:AB}\\
+%
+ \subfigure[Subfigure Three.]{%
+ \label{fig:C}%
+ \figbox{SUBFIG THREE:\\
+ (opt)}}%
+ \quad
+ \subfigure[][Subfigure Four.]{%
+ \label{fig:D}%
+ \figbox{SUBFIG FOUR:\\
+ (empty opt and opt)}}%
+ \quad
+ \subfigure[][]{%
+ \label{fig:E}%
+ \figbox{SUBFIG FIVE:\\
+ (both empty opt)}}\\
+%
+ \subfigure[The Sixth Subfigure.][Subfigure Six.]{%
+ \label{fig:F}%
+ \figbox{SUBFIG SIX:\\
+ (both opt)}}%
+ \quad
+ \subfigure[The Seventh Subfigure][]{%
+ \label{fig:G}%
+ \figbox{SUBFIG SEVEN:\\
+ (opt and empty opt)}}
+%
+ \caption{Optional argument test.}%
+ \label{fig:main}%
+\end{figure}
+
+The figure~\ref{fig:main} on page~\pageref{fig:main} is composed
+of the seven subfigures~\subref{fig:A} (aka: \ref{fig:A}),
+\subref{fig:B} (aka: \ref{fig:B}), \subref{fig:C} (aka: \ref{fig:C}),
+\subref{fig:D} (aka: \ref{fig:D}), \subref{fig:E} (aka: \ref{fig:E}),
+\subref{fig:F} (aka: \ref{fig:F}), and \subref{fig:G} (aka:
+\ref{fig:G}).
+
+\end{document} \ No newline at end of file
diff --git a/obsolete/macros/latex/contrib/subfigure/test4.tex b/obsolete/macros/latex/contrib/subfigure/test4.tex
new file mode 100644
index 0000000000..0d536e2bcd
--- /dev/null
+++ b/obsolete/macros/latex/contrib/subfigure/test4.tex
@@ -0,0 +1,45 @@
+% testsubfighyperref.tex
+\documentclass{article}
+
+\usepackage{subfigure}
+% option for use with pdflatex
+%\usepackage{hyperref}
+%\usepackage[draft]{hyperref}
+\usepackage[pdftex]{hyperref}
+
+\csname toclevel@#2\endcsname
+\begin{document}
+
+\setcounter{lofdepth}{2}
+\listoffigures
+\clearpage
+
+\section{Test of subfigure}
+
+There is a test figure \ref{fig:test} with subfigures
+\ref{fig:testsub1} and \ref{fig:testsub2}.
+
+Also referenced with \ref{fig:test}\subref{fig:testsub1} and
+\ref{fig:test}\subref{fig:testsub2}.
+
+\begin{figure}[!ht]
+ \centering
+ \unitlength .5cm
+ \subfigure[SubFig1]
+ { \label(SubFig1){fig:testsub1}
+ \begin{picture}(10,10)
+ \put(0,0){\line(1,1){10}}
+ \end{picture}
+ } \qquad
+ \subfigure[SubFig2]
+ { \label(SubFig2){fig:testsub2}
+ \begin{picture}(10,10)
+ \put(0,10){\line(1,-1){10}}
+ \end{picture}
+ } \\
+ \caption{Testfigures}
+ \label{fig:test}
+\end{figure}
+
+\end{document}
+
diff --git a/obsolete/macros/latex/contrib/subfigure/test5.tex b/obsolete/macros/latex/contrib/subfigure/test5.tex
new file mode 100644
index 0000000000..d98f48cef9
--- /dev/null
+++ b/obsolete/macros/latex/contrib/subfigure/test5.tex
@@ -0,0 +1,72 @@
+\documentclass{article}
+
+\makeatletter
+%% We pretend that we are a naughty class and are \let'ting our
+%% \endfigure to the \end@float, etc.
+
+\def\thefigure{\@arabic\c@figure}
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{Fig.~\thefigure}
+\def\figure{\@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+
+\def\thetable{\@Roman\c@table}
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{TABLE~\thetable}
+\def\table{%
+ \def\@floatboxreset{\reset@font\footnotesize\@setminipage}%
+ \@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{%
+ \def\@floatboxreset{\reset@font\footnotesize\@setminipage}%
+ \@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+\makeatother
+
+% Next we load the subfigure package and see if it finds the problem.
+% To check this test result, you need to see the TTY listing or check
+% the test5.log (which we save as test5B.ps).
+\usepackage[FIGTOPCAP]{subfigure}
+\setcounter{lofdepth}{2}
+
+\newcommand{\figbox}[1]{%
+ \fbox{%
+ \vbox to 1in{%
+ \vfil
+ \hbox to 2in{%
+ \hfil
+ #1%
+ \hfil}%
+ \vfil}}}
+
+\newcommand{\goodgap}{%
+ \hspace{\subfigcapskip}}
+
+\begin{document}
+\listoffigures
+\newpage
+\section{Fifth Test}
+This test checks to see if the subfigure package reacts correctly to
+the known sort of problem class. We check that the list-of-figures
+page has the two subcaptions in addition to the main caption. If not,
+than the nasty class has zapped us.
+
+(We also need to check the test5.log file to insure that the problem
+was identified by the subfigure package and a warning was issued.)
+
+\begin{figure}%
+ \centering
+ \caption{Figure One.}%
+ \label{fig:first}%
+ \subfigure[One subone.\label{fig:first:A}]{\figbox{One subone}}%
+ \goodgap
+ \subfigure[One subtwo.\label{fig:first:B}]{\figbox{One subtwo}}%
+\end{figure}
+
+\end{document} \ No newline at end of file
diff --git a/obsolete/macros/latex/contrib/switcheml/README b/obsolete/macros/latex/contrib/switcheml/README
new file mode 100644
index 0000000000..71c09c3e94
--- /dev/null
+++ b/obsolete/macros/latex/contrib/switcheml/README
@@ -0,0 +1,4 @@
+switcheml provides one main command, "\switcheml{EMAIL}", that obfuscates
+an email address EMAIL by rearranging it so that, while it prints correctly
+on the page, it is unreadable by email address harvesters (typically used
+by spammers).
diff --git a/obsolete/macros/latex/contrib/switcheml/switcheml.sty b/obsolete/macros/latex/contrib/switcheml/switcheml.sty
new file mode 100644
index 0000000000..fb409929a0
--- /dev/null
+++ b/obsolete/macros/latex/contrib/switcheml/switcheml.sty
@@ -0,0 +1,90 @@
+%
+% switcheml.sty
+%
+% Charles Duan (2004/02/10)
+%
+% Obfuscates an e-mail address so that it is unreadable by automated document
+% crawlers but appears correct when displayed.
+%
+% Commands provided by this package are:
+%
+% \switchemail{EMAIL}
+% Obfuscates EMAIL by reversing on the @ and . symbols, so
+% some@one.place.com
+% will be written to the document as:
+% com place. one. some@
+% but it will appear properly on the document page.
+%
+% \switch{DELIM}{TEXT}
+% Obfuscates TEXT by reversing values around DELIM, so
+% \switch{,}{abc,def,ghi,jkl}
+% will be written to the document as:
+% jkl ghi, def, abc
+% but it will appear on the document page as:
+% abc,def,ghi,jkl
+%
+% \kernhack{A}{B}
+% Produces a kern equivalent to the kern that would normally appear between A
+% and B.
+%
+\ProvidesPackage{switcheml}[2004/02/10 Obfuscate e-mail addresses]
+% Produce a kern equivalent to the kern between #1 and #2
+\def\kernhack#1#2{%
+ \begingroup
+ \setbox\z@\hbox{#1#2}%
+ \dimen@\wd\z@
+ \setbox\z@\hbox{#1{}#2}\advance\dimen@-\wd\z@
+ \ifdim\dimen@=\z@\else\kern\dimen@\fi
+ \endgroup
+}
+% Given a character to find (e.g., period) and a string of text, obfuscate the
+% text so that the last part of the text is placed first, etc., so everything
+% comes up in reverse order when you try to copy/paste but it looks fine on
+% screen. For instance,
+%
+% some.domain.com
+%
+% is rewritten as:
+%
+% box{com} box{domain.} box{some.}
+%
+% with each of the boxes placed such that they print out properly.
+%
+\def\switch#1#2{%
+ \begingroup
+ \def\@switch##1#1##2\@nil#1##3\@stop{%
+ \def\reserved@a{##3}%
+ \ifx\reserved@a\@empty#2\else
+ \setbox\z@\hbox{##1#1}%
+ \setbox\tw@\hbox{\kernhack{#1}{##2}\switch{#1}{##2}}%
+ \dimen@\wd\tw@\advance\dimen@\wd\z@%
+ \wd\z@\dimen@%
+ \rlap{\hb@xt@\dimen@{\hfil\unhbox\tw@}}%
+ \box\z@
+ \fi
+ }%
+ \@switch#2\@nil#1\@nil#1\@stop
+ \endgroup
+}
+% Given an e-mail address of the form abc@def.ghi.jkl, reverses it to be jkl
+% ghi. def. abc@
+\def\switchemail#1{%
+ \expandafter\@switchemail#1\@stop
+}
+% Helper function for \switchemail. Note the \copy, because \kernhack will
+% destroy the box otherwise. Need to do some funky stuff because of catcodes.
+\begingroup
+ \makeatother
+ \def\tmp#1#2#3{%
+ \gdef#1##1@##2#2{%
+ \begingroup
+ \setbox#3\hbox{\switch{.}{##2}}%
+ \switch{@}{##1@\copy#3}%
+ \endgroup
+ }%
+ }
+ \makeatletter
+ \tmp\@switchemail\@stop\@tempboxa
+\endgroup
+
+\endinput
diff --git a/obsolete/macros/latex/contrib/texmate/README b/obsolete/macros/latex/contrib/texmate/README
new file mode 100644
index 0000000000..939cff6cf9
--- /dev/null
+++ b/obsolete/macros/latex/contrib/texmate/README
@@ -0,0 +1,48 @@
+TeXmate --- Comprehensive Chess Annotation in LaTeX
+Federico Garcia, 2005
+
+CONTENTS
+
+texmate.dtx
+texmate.ins
+texmate.pdf
+texmatesample.tex
+texmatesample.pdf
+readme.txt
+
+skak10.mf
+skak15.mf
+skak20.mf
+skak30.mf
+skakbase.mf
+skakbrikker.mf
+skakf10.mf
+skakf10b.mf
+skakinf.mf
+skak.fd
+uskak.fd
+special.map
+
+DESCRIPTION
+
+TeXmate formats chess games from very simple ascii input. The clean "1. e4 e5; 2. Nf3 Nc6; 3. Bb5 a6" will produce the same results as the sloppier "1 e4 e5; Nf3 Nc6 3.. Bb5 a6". The resulting format is fully customizable.
+
+There are 4 levels of commentary: 1 is the main game, 2-3 are commentaries. Each has its fonts, punctuation marks, etc., and these are also customizable.
+
+The package includes a tool for the creation of diagrams.
+
+DOCUMENTATION
+
+The user's manual is file texmatesample.pdf. It includes three samples at the end. texmate.pdf is the commented code.
+
+
+INSTALLATION
+
+Run TeX on texmate.ins. This will create texmate.sty, the package file, which should go in the "tex\latex\texmate" folder.
+
+The dtx and ins to "\source\latex\texmate"
+
+The pdf's and the tex to "\doc\latex\texmate"
+
+
+It's a good idea to install the skak package as well, for the fonts. But the font files come here in case you want to install them manually. \ No newline at end of file
diff --git a/obsolete/macros/latex/contrib/texmate/skak/mf b/obsolete/macros/latex/contrib/texmate/skak/mf
new file mode 120000
index 0000000000..67ba5e1e4b
--- /dev/null
+++ b/obsolete/macros/latex/contrib/texmate/skak/mf
@@ -0,0 +1 @@
+../../../../../../fonts/chess/skak/mf \ No newline at end of file
diff --git a/obsolete/macros/latex/contrib/texmate/skak/skak.fd b/obsolete/macros/latex/contrib/texmate/skak/skak.fd
new file mode 100644
index 0000000000..e89f0b6250
--- /dev/null
+++ b/obsolete/macros/latex/contrib/texmate/skak/skak.fd
@@ -0,0 +1,11 @@
+\DeclareFontFamily{U}{skak}{}
+ \DeclareFontShape{U}{skak}{m}{n}{<-> skakf10 }{}
+ \DeclareFontShape{U}{skak}{m}{sl}{<-> sub skakf10/m/n }{}
+ \DeclareFontShape{U}{skak}{m}{it}{<-> sub skakf10/m/n }{}
+ \DeclareFontShape{U}{skak}{m}{sc}{<-> sub skakf10/m/n }{}
+ \DeclareFontShape{U}{skak}{m}{u}{<-> sub skakf10/m/n }{}
+ \DeclareFontShape{U}{skak}{bx}{n}{<-> skakf10b }{}
+ \DeclareFontShape{U}{skak}{bx}{sl}{<-> sub skakf10b/bx/n }{}
+ \DeclareFontShape{U}{skak}{bx}{it}{<-> sub skakf10b/bx/n }{}
+ \DeclareFontShape{U}{skak}{b}{u}{<-> skakf10b }{}
+\endinput
diff --git a/obsolete/macros/latex/contrib/texmate/skak/special.map b/obsolete/macros/latex/contrib/texmate/skak/special.map
new file mode 120000
index 0000000000..0ae274cac9
--- /dev/null
+++ b/obsolete/macros/latex/contrib/texmate/skak/special.map
@@ -0,0 +1 @@
+../../../../../../fonts/chess/skak/special.map \ No newline at end of file
diff --git a/obsolete/macros/latex/contrib/texmate/skak/uskak.fd b/obsolete/macros/latex/contrib/texmate/skak/uskak.fd
new file mode 100644
index 0000000000..e89f0b6250
--- /dev/null
+++ b/obsolete/macros/latex/contrib/texmate/skak/uskak.fd
@@ -0,0 +1,11 @@
+\DeclareFontFamily{U}{skak}{}
+ \DeclareFontShape{U}{skak}{m}{n}{<-> skakf10 }{}
+ \DeclareFontShape{U}{skak}{m}{sl}{<-> sub skakf10/m/n }{}
+ \DeclareFontShape{U}{skak}{m}{it}{<-> sub skakf10/m/n }{}
+ \DeclareFontShape{U}{skak}{m}{sc}{<-> sub skakf10/m/n }{}
+ \DeclareFontShape{U}{skak}{m}{u}{<-> sub skakf10/m/n }{}
+ \DeclareFontShape{U}{skak}{bx}{n}{<-> skakf10b }{}
+ \DeclareFontShape{U}{skak}{bx}{sl}{<-> sub skakf10b/bx/n }{}
+ \DeclareFontShape{U}{skak}{bx}{it}{<-> sub skakf10b/bx/n }{}
+ \DeclareFontShape{U}{skak}{b}{u}{<-> skakf10b }{}
+\endinput
diff --git a/obsolete/macros/latex/contrib/texmate/texmate.dtx b/obsolete/macros/latex/contrib/texmate/texmate.dtx
new file mode 100644
index 0000000000..ab1788a729
--- /dev/null
+++ b/obsolete/macros/latex/contrib/texmate/texmate.dtx
@@ -0,0 +1,453 @@
+% \iffalse meta-comment
+%
+% texmate - Chess typesetting.
+% Copyright 2005 Federico Garcia (feg8@pitt.edu, federook@gmail.com)
+% -------------------------------------------
+%
+%
+% This program can be redistributed and/or modified under the terms
+% of the LaTeX Project Public License distributed from CTAN archives
+% in the directory macros/latex/base/lppl.txt; either version 1 of
+% the License, or (at your option) any later version.
+%
+%
+%<*driver>
+% \fi
+\ProvidesFile{texmate.dtx}[2005/03/13 v1 Chess typesetting]
+% \iffalse
+\documentclass{ltxdoc}
+\GetFileInfo{texmate.dtx}
+\title{\TeX mate\\(comprehensive chess annotation in \LaTeX)\\Implementation}
+\date{\filedate{}}
+ \author{Federico Garcia\\\texttt{federook@gmail.com}}
+
+\begin{document}
+\maketitle
+ \DocInput{\filename}
+\end{document}
+%</driver>
+% \fi
+%The user's manual and a sample of the package are found as an independent document (it \emph{uses} the package, so it has to be typeset after installation): \texttt{texmatesample.tex}. Here is the code, somewhat commented.
+%
+%\section{Prelimitary matters}
+% \begin{macrocode}
+%<*package>
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{texmate}[2005/03/12 v1 Chess typesetting (Federico Garcia)]
+\newif\if@filling\@fillingfalse
+\DeclareOption{filling}{\@fillingtrue}
+\DeclareOption{notfilling}{\@fillingfalse}
+\DeclareOption*{\typeout{Unknown option (`\CurrentOption')}}
+\ExecuteOptions{filling}
+\ProcessOptions
+% \end{macrocode}
+%
+%\section{The pieces}
+%By default, the pieces are referred to in the input by their initials in English (Knight is N because K is King). That's standard in the {\small PGN} format, which should be importable into \TeX mate. But of course a way has to be provided for the user to change it. Six uppercase letters are the argument of
+%\DescribeMacro{\pieceinitials}|\pieceinitials|, corresponding to Pawn, Rook, kNight, Bishop, Queen, and King.
+% \begin{macrocode}
+\def\pieceinitials#1{\@initials#1}
+\def\@initials#1#2#3#4#5#6{%
+ \def\@Pawn{#1}\def\@Rook{#2}\def\@Knight{#3}%
+ \def\@Bishop{#4}\def\@Queen{#5}\def\@King{#6}%
+ \lowercase{\def\@pawn{#1}\def\@rook{#2}\def\@knight{#3}%
+ \def\@bishop{#4}\def\@queen{#5}\def\@king{#6}}}
+% \end{macrocode}
+%\section{Diagrams}
+%This is the easy part, now that beautiful chess fonts have been created for \textsf{skak}. By the way, let's start by setting the font. The user can decide on the size with the length \DescribeMacro{\diagramsize}|\diagramsize|. Default is 18pt. Loading the font will be done when the user calls for |\diagram|, since there could be a need for different-size diagrams in the same document.
+% \begin{macrocode}
+\newlength\diagramsize
+% \end{macrocode}
+%
+%Some new variables have to be defined.
+% \begin{macrocode}
+\newcount\SquareNo
+\newcount\@squarecount
+\newif\if@blacksq\@blacksqfalse
+\def\@togglesq{\if@blacksq\@blacksqfalse\else\@blacksqtrue\fi}
+\newcount\@piececode
+% \end{macrocode}
+%The only user macro in this section is \DescribeMacro{\diagram}|\diagram|. It will first set up the stage, and then read the input with |\@diagline|.
+% \begin{macrocode}
+\def\diagram#1{\font\diagramfont=skak10 at \the\diagramsize
+ \@squarecount\SquareNo
+ \bgroup
+ \setlength\fboxsep{.8pt}%
+ \fbox{\parbox{\the\SquareNo\diagramsize}{%
+ \baselineskip\diagramsize\diagramfont\@diagline#1.}}\egroup}
+% \end{macrocode}
+%Now, \DescribeMacro{\@diagline}|\@diagline| reads the diagram proper. The input can contain only numbers, the initials of pieces (set by |\pieceinitials| through |\@diaginitials|), and |/|, indicating the end of the board file. The diagram is input from left to right, top to bottom. Consequtive empty squares are taken by numbers, so that \texttt{2} means `next are two empty squares.' First, let's adopt the piece initials:
+% \begin{macrocode}
+\def\@diagpiece#1{\def\temp{#1}\symbol{%
+ \ifx\temp\@pawn\if@blacksq'157\else'160\fi\else
+ \ifx\temp\@rook\if@blacksq'163\else'162\fi\else
+ \ifx\temp\@knight\if@blacksq'155\else'156\fi\else
+ \ifx\temp\@bishop\if@blacksq'141\else'142\fi\else
+ \ifx\temp\@queen\if@blacksq'154\else'161\fi\else
+ \ifx\temp\@king\if@blacksq'152\else'153\fi\else
+ \ifx\temp\@Pawn\if@blacksq'117\else'120\fi\else
+ \ifx\temp\@Rook\if@blacksq'123\else'122\fi\else
+ \ifx\temp\@Knight\if@blacksq'115\else'116\fi\else
+ \ifx\temp\@Bishop\if@blacksq'101\else'102\fi\else
+ \ifx\temp\@Queen\if@blacksq'114\else'121\fi\else
+ \ifx\temp\@King\if@blacksq'112\else'113\fi\else
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}}
+% \end{macrocode}
+%\DescribeMacro{\@diagpiece}The effect of all that is that |\@diagpiece| will produce the character with the particular piece indicated by its argument, white if uppercase, black if lowercase, and on the appropriate square (light or black) according to |\if@blacksq|. Of course, it's |\@diagline| that calls for |\@diagpiece|, if it finds that the next character in the input is \emph{not} a number, `|/|,' or `.'\ (this latter is the delimitation to the whole diagram, not by the user, but by |\diagram| above):
+% \begin{macrocode}
+\def\@diagline#1{\@tempcnta0 \let\next\@diagline
+ \ifx#1.\let\next\relax\if@filling\@dospaces{\@squarecount}\fi
+ \else\ifx#1/\def\next{\if@filling\@dospaces{\@squarecount}\fi
+ \newline\@togglesq\@squarecount\SquareNo\relax
+ \@diagline}%
+ \else\ifcat1#12\@dospaces{#1}%
+ \else\@diagpiece#1\advance\@squarecount-1 \@togglesq
+ \fi\fi\fi
+ \next}
+% \end{macrocode}
+%The last thing is the interpolation of empty squares through \DescribeMacro{\@dospaces}|\@dospaces|. Its argument is either a digit input by the user, or the number of squares remaining in the current board file, which \TeX mate has been keeping track of with |\@squarecount| if \texttt{filling} is an active option.
+% \begin{macrocode}
+\def\@dospaces#1{\ifnum#1>0
+ \if@blacksq\symbol{'132}\else\hphantom{\symbol{'132}}\fi
+ \@togglesq\@tempcntb#1 \advance\@tempcnta1 \advance\@squarecount-1
+ \ifnum\@tempcnta<\@tempcntb\let\@next\@dospaces\else
+ \let\@next\@gobble\fi
+ \@next\@tempcntb\fi}
+% \end{macrocode}
+%\section{Chess notation}
+%\subsection{Figurines}
+%\TeX mate uses the beautiful fonts that come with the \textsf{skak} package.
+%\DescribeMacro{\rook}\DescribeMacro{\knight}\DescribeMacro{\bishop}\DescribeMacro{\queen}\DescribeMacro{\king}%
+%\DescribeMacro{\@piece}\DescribeMacro{\@@piece}Chess notation is done nowdays with figurines (instead of letters) standing for the pieces. This is the default in \TeX mate, but it can be changed. The user-modifiable commands |\rook|, |\knight|, etc., hold the symbol(s) for each piece. By default, they call |\@piece|, which basically prints the character of the chess font in place (which changes with context, from |\textskakbf| to |\textskak|). The business about \texttt{x}'s category code is explained below.
+% \begin{macrocode}
+\newcommand{\skakfamily}{\usefont{U}{skak}{m}{n}}
+\DeclareTextFontCommand{\textskakbf}{\skakfamily\bfseries}
+\DeclareTextFontCommand{\textskak}{\skakfamily}
+\newcount\@rk\@rk'122
+\newcount\@kt\@kt'116
+\newcount\@bp\@bp'102
+\newcount\@qn\@qn'121
+\newcount\@kg\@kg'113
+\DeclareRobustCommand\rook{\@piece\@rk }
+\DeclareRobustCommand\knight{\@piece\@kt }
+\DeclareRobustCommand\bishop{\@piece\@bp }
+\DeclareRobustCommand\queen{\@piece\@qn }
+\DeclareRobustCommand\king{\@piece\@kg }
+\def\@piece#1{\bgroup\catcode`\x=11 \textpiece{\symbol{#1}}\egroup}
+\def\@@piece#1{\def\temp{#1}%
+ \ifx\temp\@Rook\rook\else
+ \ifx\temp\@Knight\knight\else
+ \ifx\temp\@Bishop\bishop\else
+ \ifx\temp\@Queen\queen\else
+ \ifx\temp\@King\king\else
+ #1\fi\fi\fi\fi\fi}
+% \end{macrocode}
+%
+%At any point, then, the commands |\rook|, |\knight|, etc., can be used to produce the desired figurine.
+%
+%\subsection{Captures and checks}
+%\DescribeMacro{\takes}There are several ways to notate captures. They are universally input with `x,' but many styles simply do not indicate capture with any particular symbol. Others do, usually with `$\times$,' but also with `:'. The thing is that the |x| has changed into an active character in \TeX mate. It is desirable to keep this change at a minimum, because |\relax| and |\ifx| are used all over the place (by all kinds of commands, not only defined by \TeX mate: for example, |x| cannot be active when the chess selected is set by |\@piece|, because \LaTeX\ runs into all kinds of confusions). So, first realization: the \texttt{x} doesn't make sense but after a category-12 character (a piece or a pawn). So it is |\@@piece| that makes the change. All delimiters change it back, to allow for user-created commands that include |x|.
+% \begin{macrocode}
+\DeclareRobustCommand\takes{\makebox[1.2ex][c]{$\times$}}
+{\catcode`\x=13 \gdefx{\takes}}
+% \end{macrocode}
+%
+%\DescribeMacro{\checksign}Checks are some times indicated, some times not. They are input, universally again, with a plus sign. So it will be made active too in chess mode. The definitions take place inside chess mode, below, and in the chess symbols section.
+%
+%\subsection{Chess symbols}
+%\textsf{skak}'s fonts also provide for the symbols of the \emph{Informator}. \TeX mate implements them using those characters, adjusting them for size and position (with the admittedly annoying result that they should be typed manually if the surrounding text is not in normal size). Check and mate signs can be boldface, the others are usually not, even in the main line.
+% \begin{macrocode}
+\def\@chesssymbol#1{\bgroup\catcode`\x=11
+ \smash{\textskak{\symbol{#1}}}\egroup }
+\DeclareRobustCommand\checksign{\smash{\@piece{'053}}}
+\DeclareRobustCommand\mate{\smash{\@piece{'155}}}
+\DeclareRobustCommand\wbetter{\raisebox{-.1ex}{\@chesssymbol{'146}}}
+\DeclareRobustCommand\bbetter{\raisebox{-.1ex}{\@chesssymbol{'147}}}
+\DeclareRobustCommand\wBetter{\raisebox{-.35ex}{\@chesssymbol{'143}}}
+\DeclareRobustCommand\bBetter{\@chesssymbol{'145}}
+\DeclareRobustCommand\WBetter{{\large\@chesssymbol{'150}}}
+\DeclareRobustCommand\BBetter{{\large\@chesssymbol{'151}}}
+\DeclareRobustCommand\equal{=}
+\DeclareRobustCommand\unclear{\raisebox{-.5ex}{{\Large\@chesssymbol{'153}}}}
+\DeclareRobustCommand\compensation{{\large\@chesssymbol{'156}}}
+\DeclareRobustCommand\development{{\footnotesize\@chesssymbol{'164}}}
+\DeclareRobustCommand\spaceadv{{\footnotesize\@chesssymbol{'171}}}
+\DeclareRobustCommand\attack{\raisebox{-.3ex}{{\large\@chesssymbol{'101}}}}
+\DeclareRobustCommand\initiative{\raisebox{-.2ex}{{\large\@chesssymbol{'103}}}}
+\DeclareRobustCommand\counterplay{{\large\@chesssymbol{'126}}}
+\DeclareRobustCommand\zugzwang{{\small\@chesssymbol{'104}}}
+\DeclareRobustCommand\withidea{{\footnotesize\@chesssymbol{'105}}}
+\DeclareRobustCommand\onlymove{{\footnotesize\@chesssymbol{'106}}}
+\DeclareRobustCommand\betteris{{\footnotesize\@chesssymbol{'142}}}
+\DeclareRobustCommand\boardfile{\@chesssymbol{'110}}
+\DeclareRobustCommand\boarddiagonal{{\small\@chesssymbol{'107}}}
+\DeclareRobustCommand\boardcenter{{\small\@chesssymbol{'111}}}
+\DeclareRobustCommand\kingside{\@chesssymbol{'117}}
+\DeclareRobustCommand\queenside{\@chesssymbol{'115}}
+\DeclareRobustCommand\weak{{\small\@chesssymbol{'170}}}
+\DeclareRobustCommand\ending{{\footnotesize\@chesssymbol{'114}}}
+\DeclareRobustCommand\bishops{\@chesssymbol{'141}}
+\DeclareRobustCommand\oppositebishops{\@chesssymbol{'157}}
+\DeclareRobustCommand\samebishops{\@chesssymbol{'163}}
+\DeclareRobustCommand\unitedpawns{\@chesssymbol{'153}}
+\DeclareRobustCommand\separatedpawns{\@chesssymbol{'161}}
+\DeclareRobustCommand\doubledpawns{\@chesssymbol{'144}}
+\DeclareRobustCommand\passedpawn{\@chesssymbol{'162}}
+\DeclareRobustCommand\pawnsno{{\small\@chesssymbol{'123}}}
+\DeclareRobustCommand\timetrouble{{\small\@chesssymbol{124}}}
+\DeclareRobustCommand\with{{\small\@chesssymbol{'166}}}
+\DeclareRobustCommand\without{{\small\@chesssymbol{'167}}}
+\DeclareRobustCommand\chessetc{\@chesssymbol{'120}}
+\DeclareRobustCommand\chesssee{\@chesssymbol{'154}}
+% \end{macrocode}
+%\subsection{Contexts and fonts}
+%\DescribeMacro{\ifont}\DescribeMacro{\iifont}\DescribeMacro{\iiifont}\DescribeMacro{\ivfont}An annotated game of chess has several contexts and fonts: the main line is usually boldface, comments are not. Some times different fonts are chosen for different levels of commentary. \TeX mate defines four levels: by default, the first is boldface; the second and third are set in regular type; the fourth is italicized. Figurines come in boldface and regular. Since levels three and four will happen only after level two, there is no need for them to define the chess font.
+% \begin{macrocode}
+\def\ifont{\bfseries\let\textpiece\textskakbf}
+\def\iifont{\normalfont\let\textpiece\textskak}
+\def\iiifont{\normalfont}
+\def\ivfont{\itshape}
+% \end{macrocode}
+%
+%\DescribeMacro{\iopen}\DescribeMacro{\iclose}\marginpar{\hfill$\vdots$\quad\null}Different contexts are indicated also by delimiters. Square parenthesis [~] are the usual 2\textsuperscript{nd}-level marker; parenthesis (~) and \textit{(~)} are used for the third and fourth levels. The first level, the actual game, is not delimited. Two sets of delimiters and hooks are provided. The first (accessed with |[| in chess mode, see below) is intended for in-game, not-much-text commentaries. The second (accessed with |\[|, and with a |t| in command names) is for freer commentary. All delimiters are user-modifiable.
+% \begin{macrocode}
+\newcount\@commlevel
+\let\iopen\relax\let\iclose\relax
+\DeclareRobustCommand\iopent{\par\noindent }
+\DeclareRobustCommand\icloset{\par}
+\DeclareRobustCommand\iiopen{ [}
+\DeclareRobustCommand\iiclose{\leavevmode\unskip]\textbf{;} }
+\DeclareRobustCommand\iiiopen{ (}
+\DeclareRobustCommand\iiiclose{\leavevmode\unskip) }
+\DeclareRobustCommand\ivopen{ (}
+\DeclareRobustCommand\ivclose{\leavevmode\unskip) }
+\DeclareRobustCommand\iiopent{}
+\DeclareRobustCommand\iicloset{}
+\DeclareRobustCommand\iiiopent{}
+\DeclareRobustCommand\iiicloset{}
+\DeclareRobustCommand\ivopent{}
+\DeclareRobustCommand\ivcloset{}
+% \end{macrocode}
+%\subsection{Delimiting the input}
+%There are several of the typical ways of notating moves, such as:
+%
+%\texttt{1.\ d4 Nf6; 2.\ c4 g6}
+%
+%\texttt{1.e4 e5; 2.f4 exf4}
+%
+%\texttt{3 Nc3 Bg7 4 e4 d6}
+%
+%Of course, we don't want to force the user into any particular one. Indeed, we want the user to be free to change the way moves are notated even within the same game. So \TeX mate has to take care of spacing, punctuation, etc. Two or three spaces should behave exactly as one, or as a period.
+%
+%Moreover, the chess-game typist not always is clear about the move number. Most times it's not a crucial piece of information, so one is not thinking of it; and when many levels of variations are involved, it can get pretty confusing. Later, if you realize a mistake in a move number, you will have to change all move numbers from then on\dots
+%
+%So, the move number should be totally optional for the user. An input with at least some move numbers is easier to edit, so it's expectable that users will type move numbers now and then. In addition, games in {\small PGN} format do have numbers, so \TeX mate needs to understand them.
+%
+%All that means that something like a `chess~mode' is needed, in which different types of character have special meanings. I chose the character \texttt{\textbar} to delimit the `chess mode:' all chess-related stuff happens within two of these symbols.
+%
+% \begin{macrocode}
+\def\makebarother{\catcode`\|=12 }
+\def\makebarchess{\catcode`\|=13 }
+\makebarchess
+\def\@chesscodes{\catcode`\ =\active \catcode`\.=\active
+ \catcode`\;=\active \catcode`\[=\active \catcode`\]=\active
+ \catcode`\>=\active \catcode`\+=\active }
+\def\@restorecodes{\catcode`\ =10 \catcode`\.=12
+ \catcode`\;=12 \catcode`\]=12 \catcode`\[=12
+ \catcode`\>=12 \catcode`\x=11 \catcode`\+=12 }
+% \end{macrocode}
+%
+%\TeX mate has to be able to understand who's turn it is at every moment, so that it types the moves, and interpolates the move numbers, properly. So far this is easy enough, it's just the boolean test \DescribeMacro{\if@white}|\if@white|. But there are different kinds of move, at least of Black's moves: some follow immediately after a White move, so they don't need a move number; others resume a line after a commentary, so it's customary to insert the move number and something like `\dots' Thus, there is a second test, \DescribeMacro{\if@resuming}|\if@resuming|, that holds this information.
+%
+%In principle, spaces in the input delimit the moves. But also other characters, such as \verb"|" itself, and the commentary openers, can function as move delimiters. Several consecutive spaces should not delimit several moves. The way this all is handled is through a third test, \DescribeMacro{\if@delimited}|\if@delimited|. Each delimiting macro will delimit only if this is |false|, and then will make it |true|.
+%
+% \begin{macrocode}
+\newif\if@white
+\newif\if@resuming
+\newif\if@delimited
+% \end{macrocode}
+%
+%`Delimiting' amounts to advancing the turn: if a white move was found and delimited, the next thing is a black move. The macro \DescribeMacro{\@turn}|\@turn| toggles |\if@white|, so that \TeX mate knows what to expect next. Of course, |\if@delimited| is set to |true|.
+% \begin{macrocode}
+\def\@turn{\@delimitedtrue\if@white\@whitefalse\else\@whitetrue\fi}
+% \end{macrocode}
+%
+%\subsection{Formatting the input}
+%\TeX mate reads the chess-mode input character by character, and decides what to do with it. If it's a number, it will read it as the move number; if it's a letter, it will interpret it as the beginning of a move, and will set up things to typeset that move, according to whose turn it is, and whether it's resuming or not. Among other things, it will turn |x| into an active character, for captures.
+%
+%If the next character is not a number or a letter, it must be a command, so it will do nothing.
+%
+%All of this is coded as \DescribeMacro{\@execute}|\@execute|. The business about 0 is to provide for castling (usually input as 0-0 or 0-0-0). The repetitious way in which it's handled is not the most elegant, but it is the safest.
+% \begin{macrocode}
+\long\def\@execute#1{\let\next\relax
+ \ifcat1\noexpand#1%
+ \ifnum0=#1
+ \if@white
+ \if@resuming
+ \def\next{\beforeno\the\move\afterno
+ \catcode`\x=\active\@@piece}%
+ \else
+ \def\next{\afterb\beforeno\the\move\afterno
+ \catcode`\x=\active\@@piece}%
+ \fi
+ \else
+ \if@resuming
+ \def\next{\beforeb
+ \advance\move1
+ \catcode`\x=\active\@@piece}%
+ \else
+ \def\next{\afterw
+ \advance\move1
+ \catcode`\x=\active\@@piece}%
+ \fi
+ \fi
+ \@delimitedfalse
+ \@resumingfalse
+ \else
+ \def\next{\move}%
+ \fi
+ \else
+ \ifcat a\noexpand#1%
+ \if@white
+ \if@resuming
+ \def\next{\beforeno\the\move\afterno
+ \catcode`\x=\active\@@piece}%
+ \else
+ \def\next{\afterb\beforeno\the\move\afterno
+ \catcode`\x=\active\@@piece}%
+ \fi
+ \else
+ \if@resuming
+ \def\next{\beforeb
+ \advance\move1
+ \catcode`\x=\active\@@piece}%
+ \else
+ \def\next{\afterw
+ \advance\move1
+ \catcode`\x=\active\@@piece}%
+ \fi
+ \fi
+ \@delimitedfalse
+ \@resumingfalse
+ \fi\fi
+ \next#1}
+% \end{macrocode}
+%|\@execute| makes reference to many things. |\@@piece| was defined above. But each type of move (according to |\if@white| and |\if@resuming|) is formatted in different ways, which are user-modifiable macros:
+% \begin{macrocode}
+\newcount\move
+\DeclareRobustCommand\afterno{.~}
+\DeclareRobustCommand\afterw{ }
+\DeclareRobustCommand\afterb{; }
+\DeclareRobustCommand\beforeb{\the\move.~\dots\ }
+\DeclareRobustCommand\beforeno{}
+% \end{macrocode}
+%
+%\subsection{Chess mode}
+%Entering chess mode \DescribeMacro{\@openchess}(|\@openchess|) involves a number of actions. First of all, the next \textbar\ has to be re-defined to \emph{exit} chess mode.
+%
+%The main line of a game is usually boldface. Any text that the user wants to introduce between the moves is presumably intended as regular type. So, normal conditions are actually level 2; |\@openchess| will decrease the level, so that the main game becomes 1, and is typeset boldface. Then the font has to be set accordingly. Category codes are set to chess mode then, and the first character of the input is read.
+%
+%Exiting chess mode \DescribeMacro{\@closechess}(|\@closechess|) un-does all this, and in addition has to delimit any move that precedes it and has not been delimited. Finally, the next move will always be a resuming one, so |\if@resuming| is made |true|.
+% \begin{macrocode}
+\def\@openchess{\let|\@closechess
+ \advance\@commlevel-1\relax
+ \csname\@roman{\the\@commlevel}font\endcsname
+ \@chesscodes
+ \@execute}
+\let|\@openchess
+\def\@closechess{\let|\@openchess
+ \if@delimited\else\@turn\fi
+ \@restorecodes\normalfont
+ \@resumingtrue\advance\@commlevel1\relax}
+% \end{macrocode}
+%
+%\subsection{Commentary}
+%
+%Commentaries are groups. All font changes, modifications in the move number, the turn, the resuming state, etc., are local, so that when we step back to the previous level, the conditions in which it was left are restored.
+%
+%A commentary usually mentions a move that was an alternative to the one in the game (or in the superior-level line). So, if the last move was Black's tenth move, the commentary should expect, by default, another move no.~10 by Black. In \DescribeMacro{\@opencomm}(|\@opencomm|), move number and turn are properly modified. A group is open, the level is increased, the font of the new level is chosen, and the next character is read. \DescribeMacro{\@closecomm}|\@closecomm| basically closes the group.
+%
+%But both commands have a further feature. They insert punctuation signs, or whatever is defined in user-modifiable macros, according to the type of commentary being open. The argument to the commands is provided by |[| and |]| or by |\[| and |\]|.
+% \begin{macrocode}
+\def\@opencomm#1{%
+ \@resumingtrue
+ \catcode`\x=11
+ \bgroup
+ \if@delimited
+ \@turn
+ \fi
+ \@delimitedtrue
+ \if@white\else\advance\move-1\fi
+ \advance\@commlevel1\relax
+ \csname\@roman{\the\@commlevel}font\endcsname
+ \csname\@roman{\the\@commlevel}#1\endcsname
+ \@execute}
+\def\@closecomm#1{\csname\@roman{\the\@commlevel}#1\endcsname
+ \egroup}
+% \end{macrocode}
+%
+%
+%\subsection{Additional tools}
+% Sometimes reference to a future move is made without the intervening moves. Macros \DescribeMacro{\dummy}\DescribeMacro{\ddummy}|\dummy| and |\ddummy|, `dummy moves,' instruct \TeX mate to expect not what it was expecting, but something that comes afterwards. The former thus `skips' a turn, the latter a complete move (by both sides).
+% \begin{macrocode}
+\def\dummy{\@turn
+ \if@white\advance\move1\relax\fi\@execute}
+\def\ddummy{\advance\move1\relax\@execute}
+% \end{macrocode}
+%
+%\DescribeMacro{\white}\DescribeMacro{\black}|\white| and |\black| force the next input move to be either a white or a black move. In conjunction with typing the move number (they themselves don't try to guess what move number the user is referring to), they provide complete control as to what \TeX mate expects next.
+% \begin{macrocode}
+\def\black{\@whitefalse\@execute}
+\def\white{\@whitetrue\@execute}
+% \end{macrocode}
+%
+%To complete user's control, macros \DescribeMacro{\steplevel}\DescribeMacro{\backlevel}|\steplevel| and |\backlevel| allow him to jump from one level of commentary to another, without having to invoke commentaries and all their side-effects.
+% \begin{macrocode}
+\def\steplevel{\advance\@commlevel1\relax\csname
+ \@roman{\the\@commlevel}font\endcsname}
+\def\backlevel{\advance\@commlevel-1\relax\csname
+ \@roman{\the\@commlevel}font\endcsname}
+% \end{macrocode}
+%
+%The macro \DescribeMacro{\newgame}|\newgame| initializes everything for a new game:
+% \begin{macrocode}
+\def\newgame{\@whitetrue\@resumingtrue\@commlevel2 \move1 \@delimitedtrue}
+% \end{macrocode}
+%
+%\medskip
+%Another very common thing in chess commentary is threats. The \DescribeMacro{\threat}|\threat| macro typesets the symbol for `with the idea of\dots' (a triangle) and allows any text (its argument, delimited by |<| and |>|) to follow. (It momentarily goes out of chess mode.)
+% \begin{macrocode}
+\long\def\threat#1{\bgroup\ifcase\@commlevel\or
+ \iifont\or\iiifont\or\ivfont\or\ivfont\fi\
+ \@restorecodes\catcode`\>\active\withidea}
+% \end{macrocode}
+%
+%\subsection{Inside chess mode}
+%Many of the functions described above will be called by active characters inside chess mode. Spaces cannot be used there, so |\iffalse\fi| is used instead of |%|. Since the period and the semicolon are treated especially by \TeX mate in chess mode, |\.| and |\;| are provided to typeset those signs.
+% \begin{macrocode}
+\def\@chessperiod{. }
+\def\@chesssemicolon{; }
+{\@chesscodes\iffalse
+\fi\global\let\.\@chessperiod\iffalse
+\fi\global\let\;\@chesssemicolon\iffalse
+\fi\gdef+{\checksign}\iffalse
+\fi\gdef\#{\mate}\iffalse
+\fi\long\gdef #1{\ifx #1\else\iffalse
+ \fi\if@delimited\else\@turn\fi\expandafter\@execute\fi#1}\iffalse
+\fi\gdef.#1{ }\gdef;{ }\iffalse
+\fi\global\let>\egroup\iffalse
+\fi\gdef[{\@opencomm{open}}\iffalse
+\fi\gdef\[{\@opencomm{opent}}\iffalse
+\fi\gdef]{\@closecomm{close} }\iffalse
+\fi\gdef\]{\@closecomm{closet} }}
+% \end{macrocode}
+%
+%\section{Initialization values}
+% \begin{macrocode}
+\setlength\diagramsize{18pt}
+\SquareNo8
+\pieceinitials{PRNBQK}
+\let\textpiece\textskak
+\newgame
+%</package>
+% \end{macrocode}
diff --git a/obsolete/macros/latex/contrib/texmate/texmate.ins b/obsolete/macros/latex/contrib/texmate/texmate.ins
new file mode 100644
index 0000000000..937c943a2f
--- /dev/null
+++ b/obsolete/macros/latex/contrib/texmate/texmate.ins
@@ -0,0 +1,21 @@
+\input docstrip.tex
+\keepsilent
+\preamble
+
+Copyright 2005 Federico Garcia
+
+\endpreamble
+\generate{\file{texmate.sty}{\from{texmate.dtx}{package}}}
+
+\Msg{***********************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the file}
+\Msg{* `texmate.sty' into a directory searched by TeX.}
+\Msg{*}
+\Msg{* To produce the documentation run the file `texmate.dtx'}
+\Msg{* through LaTeX.}
+\Msg{*}
+\Msg{***********************************************************}
+
+
+\endbatchfile \ No newline at end of file
diff --git a/obsolete/macros/latex/contrib/texmate/texmate.pdf b/obsolete/macros/latex/contrib/texmate/texmate.pdf
new file mode 100644
index 0000000000..2002f9a138
--- /dev/null
+++ b/obsolete/macros/latex/contrib/texmate/texmate.pdf
@@ -0,0 +1,1650 @@
+%PDF-1.2
+7 0 obj
+<<
+/Type/Encoding
+/Differences[33/exclam/quotedblright/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/exclamdown/equal/questiondown/question/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/quotedblleft/bracketright/circumflex/dotaccent/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/endash/emdash/hungarumlaut/tilde/dieresis/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi
+173/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/dieresis
+255/dieresis]
+>>
+endobj
+10 0 obj
+<<
+/Encoding 7 0 R
+/Type/Font
+/Subtype/Type1
+/Name/F1
+/FontDescriptor 9 0 R
+/BaseFont/ZZXBUC+CMR17
+/FirstChar 33
+/LastChar 196
+/Widths[249.6 458.6 772.1 458.6 772.1 719.8 249.6 354.1 354.1 458.6 719.8 249.6 301.9
+249.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 249.6 249.6
+249.6 719.8 432.5 432.5 719.8 693.3 654.3 667.6 706.6 628.2 602.1 726.3 693.3 327.6
+471.5 719.4 576 850 693.3 719.8 628.2 719.8 680.5 510.9 667.6 693.3 693.3 954.5 693.3
+693.3 563.1 249.6 458.6 249.6 458.6 249.6 249.6 458.6 510.9 406.4 510.9 406.4 275.8
+458.6 510.9 249.6 275.8 484.7 249.6 772.1 510.9 458.6 510.9 484.7 354.1 359.4 354.1
+510.9 484.7 667.6 484.7 484.7 406.4 458.6 917.2 458.6 458.6 458.6 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 576 772.1 719.8 641.1 615.3 693.3
+667.6 719.8 667.6 719.8 0 0 667.6 525.4 499.3 499.3 748.9 748.9 249.6 275.8 458.6
+458.6 458.6 458.6 458.6 693.3 406.4 458.6 667.6 719.8 458.6 837.2 941.7 719.8 249.6
+458.6]
+>>
+endobj
+13 0 obj
+<<
+/Encoding 7 0 R
+/Type/Font
+/Subtype/Type1
+/Name/F2
+/FontDescriptor 12 0 R
+/BaseFont/ECTNHX+CMR12
+/FirstChar 33
+/LastChar 196
+/Widths[272 489.6 816 489.6 816 761.6 272 380.8 380.8 489.6 761.6 272 326.4 272 489.6
+489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 272 272 272 761.6 462.4
+462.4 761.6 734 693.4 707.2 747.8 666.2 639 768.3 734 353.2 503 761.2 611.8 897.2
+734 761.6 666.2 761.6 720.6 544 707.2 734 734 1006 734 734 598.4 272 489.6 272 489.6
+272 272 489.6 544 435.2 544 435.2 299.2 489.6 544 272 299.2 516.8 272 816 544 489.6
+544 516.8 380.8 386.2 380.8 544 516.8 707.2 516.8 516.8 435.2 489.6 979.2 489.6 489.6
+489.6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 611.8 816
+761.6 679.6 652.8 734 707.2 761.6 707.2 761.6 0 0 707.2 571.2 544 544 816 816 272
+299.2 489.6 489.6 489.6 489.6 489.6 734 435.2 489.6 707.2 761.6 489.6 883.8 992.6
+761.6 272 489.6]
+>>
+endobj
+16 0 obj
+<<
+/Type/Font
+/Subtype/Type1
+/Name/F3
+/FontDescriptor 15 0 R
+/BaseFont/KLJTPR+CMTT12
+/FirstChar 33
+/LastChar 196
+/Widths[514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6
+514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6
+514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6
+514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6
+514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6
+514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6
+514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 514.6 514.6 514.6 514.6 514.6
+514.6 514.6 514.6 514.6 514.6 0 0 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6
+514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6
+514.6 514.6]
+>>
+endobj
+19 0 obj
+<<
+/Encoding 7 0 R
+/Type/Font
+/Subtype/Type1
+/Name/F4
+/FontDescriptor 18 0 R
+/BaseFont/ZGADGF+CMR10
+/FirstChar 33
+/LastChar 196
+/Widths[277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8
+500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8
+750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8
+680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8
+277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6
+500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8 444.4 500 1000 500
+500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 625 833.3
+777.8 694.4 666.7 750 722.2 777.8 722.2 777.8 0 0 722.2 583.3 555.6 555.6 833.3 833.3
+277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8
+277.8 500]
+>>
+endobj
+20 0 obj
+<<
+/Type/Encoding
+/Differences[0/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/exclam/quotedblright/numbersign/sterling/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/exclamdown/equal/questiondown/question/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/quotedblleft/bracketright/circumflex/dotaccent/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/endash/emdash/hungarumlaut/tilde/dieresis/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi
+173/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/dieresis
+255/dieresis]
+>>
+endobj
+23 0 obj
+<<
+/Encoding 20 0 R
+/Type/Font
+/Subtype/Type1
+/Name/F5
+/FontDescriptor 22 0 R
+/BaseFont/DRBKQL+CMTI10
+/FirstChar 33
+/LastChar 196
+/Widths[306.7 514.4 817.8 769.1 817.8 766.7 306.7 408.9 408.9 511.1 766.7 306.7 357.8
+306.7 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 306.7 306.7
+306.7 766.7 511.1 511.1 766.7 743.3 703.9 715.6 755 678.3 652.8 773.6 743.3 385.6
+525 768.9 627.2 896.7 743.3 766.7 678.3 766.7 729.4 562.2 715.6 743.3 743.3 998.9
+743.3 743.3 613.3 306.7 514.4 306.7 511.1 306.7 306.7 511.1 460 460 511.1 460 306.7
+460 511.1 306.7 306.7 460 255.6 817.8 562.2 511.1 511.1 460 421.7 408.9 332.2 536.7
+460 664.4 463.9 485.6 408.9 511.1 1022.2 511.1 511.1 511.1 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 627.2 817.8 766.7 692.2 664.4 743.3 715.6
+766.7 715.6 766.7 0 0 715.6 613.3 562.2 587.8 881.7 894.4 306.7 332.2 511.1 511.1
+511.1 511.1 511.1 831.3 460 536.7 715.6 715.6 511.1 882.8 985 766.7 255.6 511.1]
+>>
+endobj
+26 0 obj
+<<
+/Type/Font
+/Subtype/Type1
+/Name/F6
+/FontDescriptor 25 0 R
+/BaseFont/RSFQCZ+CMTT10
+/FirstChar 33
+/LastChar 196
+/Widths[525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525
+525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525
+525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525
+525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525
+525 525 525 525 525 525 525 525 525 525 525 525 525 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 525 525 525 525 525 525 525 525 525 525 0 0 525
+525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525
+525 525]
+>>
+endobj
+29 0 obj
+<<
+/Encoding 7 0 R
+/Type/Font
+/Subtype/Type1
+/Name/F7
+/FontDescriptor 28 0 R
+/BaseFont/HOMTTF+CMBX12
+/FirstChar 33
+/LastChar 196
+/Widths[342.6 581 937.5 562.5 937.5 875 312.5 437.5 437.5 562.5 875 312.5 375 312.5
+562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 312.5 312.5 342.6
+875 531.3 531.3 875 849.5 799.8 812.5 862.3 738.4 707.2 884.3 879.6 419 581 880.8
+675.9 1067.1 879.6 844.9 768.5 844.9 839.1 625 782.4 864.6 849.5 1162 849.5 849.5
+687.5 312.5 581 312.5 562.5 312.5 312.5 546.9 625 500 625 513.3 343.8 562.5 625 312.5
+343.8 593.8 312.5 937.5 625 562.5 625 593.8 459.5 443.8 437.5 625 593.8 812.5 593.8
+593.8 500 562.5 1125 562.5 562.5 562.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 675.9 937.5 875 787 750 879.6 812.5 875 812.5 875 0 0 812.5
+656.3 625 625 937.5 937.5 312.5 343.8 562.5 562.5 562.5 562.5 562.5 849.5 500 574.1
+812.5 875 562.5 1018.5 1143.5 875 312.5 562.5]
+>>
+endobj
+32 0 obj
+<<
+/Encoding 7 0 R
+/Type/Font
+/Subtype/Type1
+/Name/F8
+/FontDescriptor 31 0 R
+/BaseFont/UXMMGW+CMR7
+/FirstChar 33
+/LastChar 196
+/Widths[323.4 569.4 938.5 569.4 938.5 877 323.4 446.4 446.4 569.4 877 323.4 384.9
+323.4 569.4 569.4 569.4 569.4 569.4 569.4 569.4 569.4 569.4 569.4 569.4 323.4 323.4
+323.4 877 538.7 538.7 877 843.3 798.6 815.5 860.1 767.9 737.1 883.9 843.3 412.7 583.3
+874 706.4 1027.8 843.3 877 767.9 877 829.4 631 815.5 843.3 843.3 1150.8 843.3 843.3
+692.5 323.4 569.4 323.4 569.4 323.4 323.4 569.4 631 507.9 631 507.9 354.2 569.4 631
+323.4 354.2 600.2 323.4 938.5 631 569.4 631 600.2 446.4 452.6 446.4 631 600.2 815.5
+600.2 600.2 507.9 569.4 1138.9 569.4 569.4 569.4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 706.4 938.5 877 781.8 754 843.3 815.5 877 815.5
+877 0 0 815.5 677.6 646.8 646.8 970.2 970.2 323.4 354.2 569.4 569.4 569.4 569.4 569.4
+843.3 507.9 569.4 815.5 877 569.4 1013.9 1136.9 877 323.4 569.4]
+>>
+endobj
+35 0 obj
+<<
+/Type/Font
+/Subtype/Type1
+/Name/F9
+/FontDescriptor 34 0 R
+/BaseFont/NMZHBA+CMSY9
+/FirstChar 33
+/LastChar 196
+/Widths[1027.8 513.9 513.9 1027.8 1027.8 1027.8 799.4 1027.8 1027.8 628.1 628.1 1027.8
+1027.8 1027.8 799.4 279.3 1027.8 685.2 685.2 913.6 913.6 0 0 571 571 685.2 513.9
+742.3 742.3 799.4 799.4 628.1 821.1 673.6 542.6 793.8 542.4 736.3 610.9 871 562.7
+696.6 782.2 707.9 1229.2 842.1 816.3 716.8 839.3 873.9 622.4 563.2 642.3 632.1 1017.5
+732.4 685 742 685.2 685.2 685.2 685.2 685.2 628.1 628.1 456.8 456.8 456.8 456.8 513.9
+513.9 399.7 399.7 285.5 513.9 513.9 628.1 513.9 285.5 856.5 770.7 856.5 428.2 685.2
+685.2 799.4 799.4 456.8 456.8 456.8 628.1 799.4 799.4 799.4 799.4 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 799.4 285.5 799.4 513.9 799.4 513.9
+799.4 799.4 799.4 799.4 0 0 799.4 799.4 799.4 1027.8 513.9 513.9 799.4 799.4 799.4
+799.4 799.4 799.4 799.4 799.4 799.4 799.4 799.4 799.4 1027.8 1027.8 799.4 799.4 1027.8
+799.4]
+>>
+endobj
+38 0 obj
+<<
+/Encoding 7 0 R
+/Type/Font
+/Subtype/Type1
+/Name/F10
+/FontDescriptor 37 0 R
+/BaseFont/YCCZCO+CMSS9
+/FirstChar 33
+/LastChar 196
+/Widths[325.6 513.9 856.5 513.9 856.5 779.3 285.5 399.7 399.7 513.9 799.4 285.5 342.6
+285.5 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 285.5 285.5
+325.6 799.4 485.3 485.3 685.2 686.7 686 656.6 743.1 617.3 588.7 685.2 726.8 287 486.1
+715.3 560.2 898.1 726.8 759.3 657.4 759.3 665.9 571 702.2 706.8 686.7 972.2 686.7
+686.7 628.1 298.6 513.9 298.6 513.9 285.5 285.5 493.8 530.9 456.8 530.9 456.8 314
+513.9 530.9 245.4 273.9 502.3 245.4 816.4 530.9 513.9 530.9 530.9 351.1 394 371.1
+530.9 473.8 702.2 473.8 473.8 446.8 513.9 1027.8 513.9 513.9 513.9 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 560.2 856.5 799.4 629.6 685.2
+726.8 742.3 799.4 742.3 799.4 0 0 742.3 599.5 550.9 550.9 836.4 836.4 245.4 273.9
+513.9 513.9 513.9 513.9 513.9 686.7 456.8 493.8 742.3 799.4 513.9 885.8 1000 799.4
+245.4 513.9]
+>>
+endobj
+41 0 obj
+<<
+/Type/Font
+/Subtype/Type1
+/Name/F11
+/FontDescriptor 40 0 R
+/BaseFont/ZERRWR+CMTT9
+/FirstChar 33
+/LastChar 196
+/Widths[525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525
+525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525
+525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525
+525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525
+525 525 525 525 525 525 525 525 525 525 525 525 525 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 525 525 525 525 525 525 525 525 525 525 0 0 525
+525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525
+525 525]
+>>
+endobj
+44 0 obj
+<<
+/Encoding 7 0 R
+/Type/Font
+/Subtype/Type1
+/Name/F12
+/FontDescriptor 43 0 R
+/BaseFont/HNJBOY+CMR9
+/FirstChar 33
+/LastChar 196
+/Widths[285.5 513.9 856.5 513.9 856.5 799.4 285.5 399.7 399.7 513.9 799.4 285.5 342.6
+285.5 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 285.5 285.5
+285.5 799.4 485.3 485.3 799.4 770.7 727.9 742.3 785 699.4 670.8 806.5 770.7 371 528.1
+799.2 642.3 942 770.7 799.4 699.4 799.4 756.5 571 742.3 770.7 770.7 1056.2 770.7
+770.7 628.1 285.5 513.9 285.5 513.9 285.5 285.5 513.9 571 456.8 571 457.2 314 513.9
+571 285.5 314 542.4 285.5 856.5 571 513.9 571 542.4 402 405.4 399.7 571 542.4 742.3
+542.4 542.4 456.8 513.9 1027.8 513.9 513.9 513.9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 642.3 856.5 799.4 713.6 685.2 770.7 742.3 799.4
+742.3 799.4 0 0 742.3 599.5 571 571 856.5 856.5 285.5 314 513.9 513.9 513.9 513.9
+513.9 770.7 456.8 513.9 742.3 799.4 513.9 927.8 1042 799.4 285.5 513.9]
+>>
+endobj
+46 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 1512
+>>
+stream
+xÚ•WmoÛ6þ¾_!À* 5#¾èmŸºtI·µÈ²Î
+TÆÈ´-X–<I®ùï»ãQ¶kIúI䑼»çÞå…, ½¹g?o¼ËÉÅ5÷xÂ÷&3Oˆ˜EÜóP±(õ&¿~ô'Á§É^ÊÒØK–XÚÕ@SÞ@ú°Ò½±ä1—’©Ô Î2ns¿hVëÖ,LÝ•Ÿû&ËûE "aºŽ¶º®›^÷eSã^ø¥û¾CÆ×ÂãÀ2²ŠF’I Ò£ÌJø…nA‰™â¨±»pƒ99Ú‡<p0RÅÂèÆï«ueV¦F
+´Ÿo²pžÄ“|‡¤Ÿ€=ºªÙô»êeÝlkrO³¦öG®û7Ï_oÚÖÔ=={‘OCNWäê‹)6½S¤Û[öI|Ù“Q[@:¶çåÅÒ] íT¸raû–‰uiŠóúڜқK¨(*I dÍô¦ê¡nE\º²¤{…ú[33`Ã)‘m©†/ÎxêÞ"a½éiy‡]ÌJŠñ¼l‡e_B,ÐCbøWõ¼*»…íZáq±Îý·u9_ Ý)mV1÷oh{G¯ÐЖèà-}†{o1«¨ã)ð˜@a~á oÔSÝNÝõš¾…\$ö.ñ‘“nßÜœu¿álfë6ºLøÛEiû¡‹ŒS,ì›q·h6ˆ—Ðé Ü€VÔÇ›¶×w•¡%L8
+endstream
+endobj
+48 0 obj
+<<
+/F1 10 0 R
+/F2 13 0 R
+/F3 16 0 R
+/F4 19 0 R
+/F5 23 0 R
+/F6 26 0 R
+/F7 29 0 R
+/F8 32 0 R
+/F9 35 0 R
+/F10 38 0 R
+/F11 41 0 R
+/F12 44 0 R
+>>
+endobj
+6 0 obj
+<<
+/ProcSet[/PDF/Text/ImageC]
+/Font 48 0 R
+>>
+endobj
+53 0 obj
+<<
+/Encoding 7 0 R
+/Type/Font
+/Subtype/Type1
+/Name/F13
+/FontDescriptor 52 0 R
+/BaseFont/RVXZSV+CMSS10
+/FirstChar 33
+/LastChar 196
+/Widths[319.4 500 833.3 500 833.3 758.3 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8
+500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 319.4 777.8 472.2 472.2 666.7
+666.7 666.7 638.9 722.2 597.2 569.4 666.7 708.3 277.8 472.2 694.4 541.7 875 708.3
+736.1 638.9 736.1 645.8 555.6 680.6 687.5 666.7 944.4 666.7 666.7 611.1 288.9 500
+288.9 500 277.8 277.8 480.6 516.7 444.4 516.7 444.4 305.6 500 516.7 238.9 266.7 488.9
+238.9 794.4 516.7 500 516.7 516.7 341.7 383.3 361.1 516.7 461.1 683.3 461.1 461.1
+434.7 500 1000 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 541.7 833.3 777.8 611.1 666.7 708.3 722.2 777.8 722.2 777.8 0 0 722.2
+583.3 536.1 536.1 813.9 813.9 238.9 266.7 500 500 500 500 500 666.7 444.4 480.6 722.2
+777.8 500 861.1 972.2 777.8 238.9 500]
+>>
+endobj
+54 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 1988
+>>
+stream
+xÚ•X[Ûº~ï¯0‘5#R¤.
+éiŠžSœ^ξÕÊ•h[XYòJt6i°ÿ½3J¶¥ÍÚz°ER£¹sø ! ÃÅváY|ºÿð9YpÉ"¹¸ß,RÎâd±ŠKÔâþ§ÑrŹPÁO¥Þ¶zß-ÿsÿó‡Ïr‘±,ÆÂÅJp–rG|¿+»å*Jd@OØ¡ÑÝ7zuЭ½ƒaª‚ºYŠ$x¦u»Ó–h–+‘ÂG[nŽ½Í‘rg:ÏÓÔ¸`ýt§qöe‰ŸÑŠçajÿyk´5ñß4-™Á£ÁŽ(“%˜ƒvtÈN?Žå) OÃðåb©­'±Œ<ö íŒozŒö!3üû¶LepGJTƾ³à¦ ¶#ƒqtÆÚ²Þ^pKËÙr¥¤—{)ÇδD‘ëš–
+“—…ÝÔ#>]ù¿^¿Òîœ1!™;3ˆ0 AÑzK>ǃ+dÊ’È»b½.|v Ï‘Ï(•zŸ­b¹d6úX¡Å§L'OÖ½ƒ¿5º Ãa}У7œfÏeUF:qa‡IÑÔ~ô¼ƒØS”ù"õʬxC~“Þ “Ñy\""˼§q”ëªêh8äÔÉE lª‰‹Æb$lžž3#„¸—uîEÌÖóæX4<Y†Xn­6¦8iâE¹*ä·E\diPœmf41f<>7µÄd‰"ï{tzïFì„çÇ=²1Eé"fYâ+X&'ObÀC‹Á-µy¦{3àIleÏö·fï5ƒïiðe©d ÛR?TS*㪀5ôôÕ&…?%µ)&¦x‰Îò O®Û‘ªízýÛÓQ·æ×fÊÔ}€žiz3Óãêfo1¦=̳ëŒËÍz]n>>T:ìž@‚mtՙ뺋ðŠˆÂ€€¶Ùn!.Oß߶^÷ß/Úö³MùrÝPÁo÷à¡498°˜$ÙÀvH3*®¡€êY}£‘/³aìuÞ6´èö <-0êLnKWs²ìƥNJñlNm€Ò(!Wÿj‰¥/ s·íl/Ö¿?z¼pÆl+0Y ëbZ…RaûJ)‹GEÑ×
+8`‹‹ª  >-­õgÌ…€PƒÄ(²*ëI\”`";?u/s!Ž˜ºØ£BÜ’’ÞÀwRŽ;¬àäÝ£~ä!±
+º†Ø¸–r ž0ÞGAŒ#”1ѧøÞèÚ#ä²N^D鿵ùê6§«;÷¨™…¿†ðç™…D“…ì=('eð¹„cûŽ^õÍ šºhv¿]š÷g*åç~
+gˆm›æñRl bÅmbýŸ!ö±†cGöª^°ŠgÙ+f~(»]s¸,y/XŠY‚£‚ŸŽÆŒ,OóYž–s< s$V ~Žf™«fˆýÇ$ùÎ"œem<Cì¿&é,†tó‚›ÌûË+é̇tæóÒ9!øÓ+ééÎÛÀsÊÕ?§é̇t|ŽÁrN½úe’Î|HgÍ1W^«WÈêößË (˜€hÆÝ@åˆESî€ >5ö®8 +_$D<2¬L0gR^Â4:ÇWv!^5ÈÈú€]:€„â˜{­Oƒ4ºT֭έ»ÒKCjT½*ž
+º“Õ+ý²”L¦·h%X".pR™+í.éâþhYÒ#?ºÇK¬ƒT¥íhQ·[ºyóX ¯v¥í9lèy<ôA £“&¯G¤QmÕ °åŒ<ê±í奰»ÑPýµ>^¸° iKm ½!CãuPõ¸‘¨ñf_ ª¬—¸
+endstream
+endobj
+55 0 obj
+<<
+/F7 29 0 R
+/F4 19 0 R
+/F13 53 0 R
+/F6 26 0 R
+/F11 41 0 R
+/F8 32 0 R
+>>
+endobj
+50 0 obj
+<<
+/ProcSet[/PDF/Text/ImageC]
+/Font 55 0 R
+>>
+endobj
+58 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 1980
+>>
+stream
+xÚ­XÛŽã6}ÏWh-cŽ(‘º,vƒÆ$™`÷!‰ˆZ¦dÁ²äÖe¦†ÿ=U$u³zÇÊdlQ*²ªxX<UäÊ&¶½JWêñÓêÝöí{¶
+Iè­¶É* ÄóWÏ!>_møÃjr½q½ÐÊŠsÛ˜f½þïö?oßó~gÄW¶Q”Zi@<Lj…ÖQ¬ßjOk'°vë ´eõ$~`}У½A¹MBjF¿½U͉ãÙ›GTà[e¥M| ºÁ,ÀgÕÎEÓȪŸ‡zösÜË<;eh²²0¢ò¦Ë§C™Ktbµ¡NH8‡'%¡kŸ‰´'œˆë* Tc‡sý¬ÛZ4ÚZÏå
+X—uoæO™Gh‡n#·@0N(ï0Ö–kdz>"Ä2ZÿCV }°¡!%.ƒ§KB¦Æ1Gw¢ttÆíaéÀ¶L¢è =ȳB>Ð ¼5òtŽ‹FØë w8tÊeE…|iF]çÆ•^| ´íÎl¾Œ÷¶³äå’‰úJæâ%OI–ƒ™-–õYIJF×êçVT2.Û¢¹FQ’ͼДz»ã…Ìki|ykð@_.ÿ'/ |æ ˆã÷^ò¢Šè—išËúyj'Š~U/?—¤™M­olÓ»c³_Ëë·_Òfpô⋆>Pg Ù}Å£`‘åõ9“1Dk‰ýGQÄr
+Ö†bä2k„æ‚@ ï˜O²îw.ܾ£ Cìz»ã{=¬Û¿[$‡yÀruƒ-™¯HõG¤;ýÉôÊ
+$ Ã3¼{V™âÃNe¢Ÿ°¹C_ã–†­WT•mz¸å+‡û$ £¸1 ;£n‡8­‘õ†Qný»1ªE•¶›(ÀÀ¡KTĦcf>I•p”À×H¡%3À¢Òm¡û,ÍT¯ Ëxøµcpü¬áƒ†ap' TÊÁ~½L!;MoZ p…žðRÉ“È
+½PÊð  3=žIÜVÕh2\é½¢Úcó"À?—Ê1ÒUc߃î»Uú(DŒäë`Æ@?ªÏœp¶ê¿ý~Ô¢Ö mJÊB¿Q³”gã8·šJÄ8ñ£~Õs'
+ô,÷rïÐFé0“$3ùÀ‡ú˸‘Ë®ÓtkØ5€ø÷YcÌû«RMóÝhÍ, ²Œã’@#ÔŒ|Ÿ¥mIF±HJqCx:q«°WX…MX…{HŸµniÖä~Ç/¢m²¤Íµ0)u–R}b¢Ñãòd†)~é5i$Ý!QÈõ)YogãŒvíY(Ê<®A¡H¥JMA!Ú›B8ÎONà'è—­*Ë£>+ÀÂ8c¢c‘¥‡fÎïQ´ËêCyV8VÑ©ð¹Eú}]v4´76çu¤j -…‘ÓOƒtr¤€cÛŠ‡Ä÷Ö¤¾µ/ ©[E‰@}Ú ••Ø°½c&ê¢>pËŠº‘b¯å˜ð ûŠ:Zë^u#Š½Ê)(LÔqŽš²åÊ×—Å ¡äéÜÒ§Ò)˜zLÀàd—ˆ6Çcä%̯nŸ ½¸ÎkaëÞ„-žÖBßœÖPyÆ*¬ _óU¥]Q¤r®r¸=›S©zï3DI
+NÔ8óÈRˈµpØ¢+Asôê"¾Ï¬wŸu³:Æ
+è6ßc‘çs lr³•^Þ›™ O Ås©µu†И ŽUYÏ4(ÖSYI¨mÔÍÊ0rYwšú(†@¹"-U¡¡ãMY€TmúG#gÔžTÞŽvì>Þ€…ÙV CD+‡”€! ÕrR•§YåPâö®â¸KnqòT‚Óýšr®f(Ò-3¦ð‰Ý­qkú‰wpx×ÖÈj"L_N@ÁÚ6³".$^GÔ/_¸èy¬ fÌ#A0)Ža›¦eeîZb³ÅLU×U}òÚw—.ª>ÏÕmɧYÑgOê=ÿN½s³ƒ±ä¤qÊòÏWxƒ]aÑ\~»^Pp½œ®—âz½3ƒ;FqEÔç=Xø¾w`XôëÄÈ1 pP&ëë‚"4ü»æ§ÆÌس—À¬î9žª£ú{¤Žs.]®ø¨ÿ)õxì,W¼;«¿Gj; »Ë?ê    `ŠTýîù²xù¥^è¢E'³KÇåjIõaaA„zÞWYÔ plóØ,°ifé•M]ÛmîÎËm_eS•Œc“ÏÅrhïƒÊ· °éâIúö¢#µ¹Ò#»´*[ØRÀýq¹—¢èå_´?i"©¾ÃøâXªa³K5ê¹ÄƒœâRÂ4ç«_ý¸ýæOþ·Ï×
+endstream
+endobj
+59 0 obj
+<<
+/F4 19 0 R
+/F5 23 0 R
+/F6 26 0 R
+/F8 32 0 R
+/F11 41 0 R
+/F7 29 0 R
+/F13 53 0 R
+>>
+endobj
+57 0 obj
+<<
+/ProcSet[/PDF/Text/ImageC]
+/Font 59 0 R
+>>
+endobj
+64 0 obj
+<<
+/Type/Font
+/Subtype/Type1
+/Name/F14
+/FontDescriptor 63 0 R
+/BaseFont/FREKHS+CMSY10
+/FirstChar 33
+/LastChar 196
+/Widths[1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8
+275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8
+611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 762 689.7 1200.9
+820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7
+666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9 277.8
+500 500 611.1 500 277.8 833.3 750 833.3 416.7 666.7 666.7 777.8 777.8 444.4 444.4
+444.4 611.1 777.8 777.8 777.8 777.8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 0 0 777.8
+777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8
+777.8 777.8 1000 1000 777.8 777.8 1000 777.8]
+>>
+endobj
+65 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 2282
+>>
+stream
+xÚY£Fú=¿ÂÒdÕ´Ô&Å)R2“d•M¤h³-íJÃHƒ¡lcp(˜v§åÿ¾ßQ€Ûx¦Ý~°ëþî“™c;Îl5£áŸ³·÷ßüÍ;g÷ËY$ì œÍ×ýÙýï­PÜ~¸ÿ×7? 1‹ì8À;±wæÐq’äj™$ß¿+T¦Þˆ'³Ñªíîé8üƒ_æü‡Ø`p'ÜØöüC±Ü3@ÀóG]o’¤¡Uj5ÏO |Ààå+ÀÿZ«u›$3¾„Âpà½ÅÛB¯k˜,Ìx!þ+Pü»SªJ’¿x¸Að1Õ
+„DÿŠ(ü"ø7"I–ÅéïÀo¼YlžÌ…gû‚†0¦‡?ܺ¡ÕÞÎ]WZi…‹G^ì`­º€½Àjï`åyV»VMœâEÏÊêí6­r͸‚—ðB; öÑäNÉq[ôܾ÷mW ¯ÙžNßËÀÄðÈò-Õf¶¡0~ˆ• ‘eÈí´ÊyÖÖ<îššxÍ»ŒÒ—àcˆIôâ'n¥”V®tÑ \$®®º¦¨”ͤ…3ód TL;ôè¹g»·
+g¹Â0Z!i¸\—Ç9ë>ìˆuïѽ7êþ[ðQ±ËºÁç ö)„5É,1èJ|ÎÎ’*$Þ!‡à˜oÈki=@Zä’NØ5”ÖÆœ ãÈ>´*X;9ŽcüSÀnË#†ÊÃÈvÆÊ‘kÆsIq̉2rzÚÙ úo§‡Øž ât<Sœ
+[¼MîŽû`ÝÍ<Ý·}}6”¦´2LÀÍ¢ÊÊ.ŸX„ë;¶üœE@9ÚŸÙÓrÝg_²¯«Ãè…¶ïG•A­¡þ¨nß1¡¦0‚Ĭõþ½°]µÿð>ûðô5[¥¿>¾Ôšf$þ"v@
+üÆXð²æ~·7h.´±n¸Tb‰¹}Øq{®arÒ1hÞ¥tf®þ¡õ>ùK¡Š°§^ŽžK¾áôE±kñ%E1S€ý’Ú*NÀ}]
+;”'î; â)·0m×5•q؇oÎ[Pç-‚)äB;ºÞÃ`)ÁD+ž±ÙÀÄ|aÐd¸¼• ÝYdäŠòù±Us„ƒŒ‘¤o´°P£‚É4<J
+endstream
+endobj
+66 0 obj
+<<
+/F8 32 0 R
+/F11 41 0 R
+/F4 19 0 R
+/F6 26 0 R
+/F7 29 0 R
+/F14 64 0 R
+/F13 53 0 R
+/F5 23 0 R
+>>
+endobj
+61 0 obj
+<<
+/ProcSet[/PDF/Text/ImageC]
+/Font 66 0 R
+>>
+endobj
+69 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 1738
+>>
+stream
+xÚYKsÛ6¾÷WðVj&bˆA²½´Í£3=6:t&Ê"! c>‚²âxüß» €’,Y6‡—–»ß.>| :AÅq° ìÏßÁ_‹÷Ÿ³@Dy,ÖAF"‘sA£4 ¿†9}[üóþ3!AåmH Ävy¹ü¨ŠJvêßvµ7ý‡¶®eS.—E[ïTcd¯Ûæñq¹“Z.ÿ(¶ÊóP¯ÚêñW’ˆ§§'çÿaîüãOî1°IJu¯ªvW«¦Gë¶í›¶WFÿ¼F"øH„CÂ'!1;Y(YÞ¿ #%ã
+’L‚!û^w€¡“Ú¨Uûãq1õãéöňgL]Ä$@ºÑ½ŽÜ«ç èë ØHPéDêî›^u»J>ÜÆ@G27›áç~óó › Æ7µ¬ªëŒäk>)þA÷[]*ù&_ãäE<Jòó28¾Æa^ÇÑ6ÕCÝ;ÞÄ!ÞÀ!<2 ÇJõÀmÞÄÁéHtŽVvåZWx\."“xÜF°éK-7m#«WX™ŽLŸOGQ(<·12’’É$ wºÙ8/ì@:.w1)î÷½‚~úràd\àtRàƒ’w·«Æ#«M
+®šR;|õØ>’wù4Þi³mwæºòœŒJžLT¿Ý®5ºW7Ã'ãG¦‰ž‘õíЂË|šÎíá^ Ê<4/eÍÆe=MéŒÚÉNÞŽ.ȸèÓ®l÷«êflÎÇ}š²í¤1.ô YÓqY‹‰‘!ݦ½­2”S2Mâz]«¾³¥¿…БC¦ Þ¸nç/F^oH>9x»ï_‰ŸŽ«?&t6˜ê‹kÞÑxTÞ”LkÔ -59ž´4 Äæwº^Ó4Ê2ë˜G|6‘KÂm3c$ìÕÞÌæ,å!DÀA®q)aÞ:äAî!Æà1‹˜sõg3›SžÂkÐåPð1 7 Ân¡]»™bFÓÁ⣷Ҹy£îqEu²r/&<$´µÐví—Ìo³9öÖ©¥nœI¥?§}€½Ù7®*=gyDN¥Öà¼G£`Σ”@Ždà,>_u‹â¸xZ=.ß¼ÖÎKÈY”þ!ÖlH¡RU¹†ïíwÅ2Ôµòéb¶YDp¨t4› ‘‡_ÚÚÏ¡x»R/i"Tçßv“ÇÒáczò嶥5`lÖm‡ƒüÊ fŸ'^ù«°Î sðsà²{˜e,°œ¤áÂú€o™(E6F„[?Ÿìt%,8ÎýW•œ»RŽ´QÆ=®Û}çF§ø– ªL©Ör_õï°°±çI’„èª3½s ½K¬~6Tÿw·ÉpëŒhr¾•žk µ„¤3)¬ê®t붴8ÒàŽ›$ìÔfÇÙ¿aÑîìÎCTø¡C j³ì·î-ÇcðÒËJp,m=yøYoöv•õ¹p¶K6Æf9yž¤›r'=?âBNà”n‹ó-f9Ö±Sv‰ž^v‚£ƒ®*·¸•;ŸXã&ðƒØ]ÃWÐ…÷kÔ¶8‡"†-dÌ–ëʘÛ7Æÿ«PupÅ’§Àºö£Ö- 4:®»Ð_xUÂ(Ã)‰®Ä›á`NØ©g¼uE
+zU^­ |ˆ+³\Vª‡Î â¶ÓªPnhîäÝj=ªS±QQ‡°MÛAcćÛG5*>.ìuÜQI%£¼ß{çº7@0õt%ª£Ö}îDäã¥2Á/º ÎØóÊ„€£Rêµ0&’PV¦u£AXкT•®á–ß8. Ã/ß÷ÞCƒ ä—ÑÞÿW·öÍ{íÔu'JxDØ©µ;ðr«ˆõeê4Ž(=FÙÂfW3ùÙ t!‘ÐГüLç ¶oº!½ÜD.¢Lð¦ë_ €òˆæÊÌOg&Я»;×õQù²l¨\z¬Z-C~9s¿rˆ“ãÀ·EÄÉP:´Ï­ý ¬œ>ÛímFV7ppL~Ðs1Ü>¬•e»1<Šôåvˆ:
+ua5r;6–å'³wgW´’Eoëc¼=ÙuêÄ.³=ß9XÚ0y¸8 ?dj–bË1Î »1¾wâëµÊú«^ýßu‡;ûrì v]‹Þïuiã%ÐÌ}ZñyZð
+endstream
+endobj
+70 0 obj
+<<
+/F8 32 0 R
+/F11 41 0 R
+/F7 29 0 R
+/F4 19 0 R
+/F5 23 0 R
+/F6 26 0 R
+>>
+endobj
+68 0 obj
+<<
+/ProcSet[/PDF/Text/ImageC]
+/Font 70 0 R
+>>
+endobj
+73 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 1943
+>>
+stream
+xÚ¥ÉnÛFôÞ¯à-j1Ü—)’4 R´iÑøPÀ šIlHŽ@½Ôõ¿÷-Cš’옵Oœyoæí›F†mÙ¶±6èóÁxsòü}h$V'+#v¬02–¡kEqòöÔLÓÓÅ—“_ž¿÷Ç3Žmù¡aúh±ôßÌšŽyQª ®l3ãk·¤ƒÈr"}MíÓŒ­ÈÕ¸²a¹¬ë‘n“Õ¢KŒ);®dË€U+DË0¼%š…™*k¯±gZ‹¥Ÿæëªâ…¨ÊºT¢í´ ­@iŒeZ^`,ÇJX÷¾í²–‹%P+ÊÔ ¢ì¬Ë¡•D(ûÒÃÅÒO÷7ä3ŽŠi£ùVh Ó´¹ì•¦¯PàJœ‹ê€,_Y‚¹‘Ñ [ YÊ­hÒ´Uv9€òJvBþÇ(ÐŒâ½y†ûSžõú™=¥9«ë4Ýf-()˦€ýb¸y3G¿äqlI;ÍwÏ~Òïšõ9½™aGÏy$#Òè½—‹óZ༾龕Û/iªÄ¥:[]ßÌ·¬ç>R©Ê©9KgﱬîW3¶ªþãøŸÏ×tà<’Ó >!ŠÕõ, £§Äï<5⧄æL=’'Åä<&¾ý„À›g+ßyJÄ<"C7¹Q]ZœÇDè-  B¾åNY6kè”Q`ªàEÙlûƒn­Øò"r²-ö<꯴èÄ9öeÑf䊿L 74¯¶eÎ'\ó/d 76¯ºÝ;T™– vФáæ9Ýßíúoo´Ý‹ý, {Òï‹“¯ðùûióÊÕ˜\cÖ”z¤òä¶ÐXŒ×Vèrå^ñ4Ÿ\/Þ¬#^ ·ô·ï2öHæw°‰ïD0ûôm'@}ß‹Ùt‚…lž)^²E´”†(É_˜¦r}žâ;1M@ *y¦¢³!
+<c„ýUƒ|i“¡|qÌJÆ8Ý~Ì»œÅ<å@ºm–Cz`0ØŽ¹í›\õ0²!ˆk
+•“\ ™E“…‰šœ»–¿“jÃvÆ<ÒB§c·‘}…Fò|r H´Éns‘3Q\f¹ª®†DäÓ%G:¥Û]LÆÛ-{¹-%-
+š»“ö7ÙŠ‰Û#m®U¡ŽÑuË5{ ™®3â=øÕ#W,vãrèÖ­>Æ({}md6­C ¡´ék„hû´ÖA> š<àUÖd`ˆšR=Ó+ò¶ÏK*”°Ù–“/SàÍ2º|î9à,É0½>²K)›o\Uíø–’:F!ýÌ;ö‹ å…Úg¤-9:0+4UÇ{®ÜhüÁØ–$™Æéê2C”Û±8Ò(Åß<ÓìÖBC¶­PjÂ9—ͪï@ üéxæ¯Fí@e5Õ€ Ñ%@î‰ÍVdUù@ãX€%f ‘2æ0ûñ›ñ±iaÄnÜÄž2K ’à¯R\íf
+¢$ç.Æå á]™Ëµ;tت•õØxƒ ØÊ #süÜ™lŸ%šÑÖÕÙMâ}! èBD$Ï–µ×c Ç‚R[a}ÀÜb\`\ãŽ~âÓ™!¶ô+ýºa#´ä÷\eêž4ƒ4¦< aDT`µ—¸¡s—¬¡ÇYw€NI­ `T–V”
+MÙœm
+ åzÄü É÷â>¼;ˆõáú¡zÓÔ%#C(pSu"+
+ïjªþaS…¾ÔÀp¢{ŽÒtz˜XZHvzwâ ©u½†Ù6œšž”ÜÄÑtˆ"‘aEÃå-ƒ ëêš·U9¸›1ð+'9t)׺ç‰gŒ/5U”˜ ¢msàŦ&]¼K/U!Œß<±Ý“;q…FHtç€Ôѧ…®MñDä&Š39’¦
+endstream
+endobj
+74 0 obj
+<<
+/F6 26 0 R
+/F4 19 0 R
+/F8 32 0 R
+/F11 41 0 R
+/F7 29 0 R
+/F12 44 0 R
+/F14 64 0 R
+>>
+endobj
+72 0 obj
+<<
+/ProcSet[/PDF/Text/ImageC]
+/Font 74 0 R
+>>
+endobj
+77 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 2427
+>>
+stream
+xÚY[oä¶~ï¯`QXƒzQui°Åf‘Ý"}ÉC ´@&ÀÊåQW# $ÍÚFšÿžs!5ºLÖN_,yxÎá¹ñ;ôƾ¿yØÐ矛÷wß|L6‘HãÍ]¹‰covQ b½¹ûþgO†Éö—»}óQÊM"Òid(tºñi}¿/L¹ß¿ëL?´ÉÛÂô¿î÷y6àðÓ~¿Ýé@{o¥Ïƒé’x+f~‘¿cæ;é‹Ôi®4PJ„Á¨Á…ã·È䄳Ù_ìì\úÏפ3c’±tí¿Zú?®Jz+åZúßF~cþá&µìÉ> •"!wH²ÑB«Í.2¤Én2ÜŒsÿ9fƒÙîT’x‡¬‡Aê{C‹©w¿Ý‰gøGv_Û-Ù¹)L×YSðü㡽é-ɹkxT L\Ù•là¯ù² "ÏtÏ,ûØM³ bo¸ÝîB?ðú–”Ý‘ðñdÒ9w8‹ÀgÖôÜ÷|ecÏô¼6 /[\apþç5†ÅŠEšŽ7·5Øâk x‰68sÏB;欼SמØh]ý¼MOÀiTêýÔòÖ2ë¬Î0ПžŒäKÏdý³5íùá€Üý|c þ{0`gµü·6Yc×!Ë8\¢1\d‰ð’ŽUùîñPA,¢*Œ…Y*:Gè½?_ÄvVpæEµtólUœô½ÏUSô«|
+µg'ã
+ö Ob
+éRB~¬n:À9rQ1²±LÃ"èL4wÌ.µP!ZÙDê çÐ×ý˺X¡Ú Løð”a­|Ö7æ±*—wùWqº^Ír^ï®suø[½šëú>*˜âéOßvƒ·mìeÇöÌ¤ç †Å°P|Ùj(PméâJ#[6‘p1À Û¨Arü@VZ
+¢f´ö;jöUáå&Ú‡‡Ú¬K½üS õvîÐz¼ H*dºÂgÔ
+9Þ‰¶µéÍE•gÔ•ÛÙñFþj‡HФêR:ÂW½ ~…ïx”}q=¬Ð—êç~oè/O1aYÙÎ8ÞX–T¢
+¾³Í`›U¿ØÝg%t„kÈ p@ˆÁuúÄPCiq¸Áºãð
+endstream
+endobj
+78 0 obj
+<<
+/F8 32 0 R
+/F11 41 0 R
+/F4 19 0 R
+/F6 26 0 R
+/F7 29 0 R
+>>
+endobj
+76 0 obj
+<<
+/ProcSet[/PDF/Text/ImageC]
+/Font 78 0 R
+>>
+endobj
+81 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 924
+>>
+stream
+xÚ½W[kÛ0~߯0Œ ³&ɲ.ƒAÙö8ò6æØòbÖØ%všŽÒýöI–•¦•%mÚ'_rüï|碓
+ fUÀ`AL1`i0ûø=D”D?f_ß|F(à@Pmƒ0) à`eEÞm)fÙÕ»,Ë‹¾¾”YvvvQËBÞ¼2ŸßzˆÇÏc°NRÇ €‹­ªv`ŒÁ€BGê 0 Û¢ÈóN:8ÆäæaSWg+Ù­—uóëZÜUrÀЯ”U–5òª¿Î²¹¬Ú•œ»ª™Oî
+•e{)Ñ!™`ð)Ó=gÈ#ðd¢v”µdñ1ÊæU/W›C„eÉ …µ˜ÏÑGì$}Ä|}4âvc”³Rž×˺—e•{Óã>HÛ–#º-”b€ÉþJ4&»Árèa¶[ˆºf&òé²ãÈÃn"ÜÜ.I@ðþÉ6‰§®T GŠ sl+¯.ò¦|‰^í·$‰'T5s7 U,û¶DSO2öÍï‰,POS¹ã»i³¬_Œãaœ<M{ÀDãÌ7ÑŽžîxãü4ç$G3h0¸@#wŸA N1
+[MÅÝwNR«1ÚhÐ|t]Ê §¬‘¥qÏ£XýÚF˜†—æ¡QL9 ߯{©"&j‡æ*ddó óB#.¢88ìʌԯ’°­Ìu¹kŒ³0/ŠvUê9<˜ô­¡ ¡ÿYjvÔUÉ´êªÊAnþ;þoqÌÿøÑ02¤êÎ\Õ`_æ}¯µ^7£"˜EL=•µ•ê”j1Ô‚—$x”}P§{=¾ZÔ[éÔc¾Ò²$$\wr+µ´Ábùü|øME±j»·nQë›%¶1œXŒHÅNMoŠvÝôfºj0¾Óo܃øQç*ˆoí|ÝõÚ¥*àr»ª\ƒ¿7ûœØVw²¹Ö»tÞÜÏ*¢  ªh 8p†P‚O³ÿ
+endstream
+endobj
+82 0 obj
+<<
+/F8 32 0 R
+/F11 41 0 R
+/F6 26 0 R
+/F4 19 0 R
+>>
+endobj
+80 0 obj
+<<
+/ProcSet[/PDF/Text/ImageC]
+/Font 82 0 R
+>>
+endobj
+85 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 2227
+>>
+stream
+xÚ¥YYã¸~ϯ0+m®(Q ̱3Aò˜ôÛjÐ2mk#‹ } 3ùí©ƒ´å£Ûžì“%²TEV}¬úŠž…" g›ýüuöéþǯù,E6»_ϲLd³E‰,™ÝÿòkÉpþÛýßü*å,EŠ2R‰¤˜…4_–¿˜ªÑù‡]ŽýðÙîvº]•¥^¦[¾þ4_$Q|c3 Ö±¡(¼!ùZšµíÌòµ,‡­)Ë}4â¿e¹²C_–7XOõèXoí«³‘ͤ¤­I{ÍQ&òœ”(‘ÍRŠ>oMßÏq–; ¿2XV f…3‚†\Äüé—ve¸´n7óE”gA…¬_QM”£øɃ2`ué^]‘•ïwóÁ>˜¶¢ÏOÌ&™H¤—›³¶š¬?ÎÁ€mñÙÙ4Ð,
+Ȏ
+­øèðG¦}=Jÿq.T|Óú2œ¸eešzW£3éòÒ ¿LS¸ƒ‘E˜C*ÃЀñÚr|a€ëŒ´ÖM¹²Gy
+^UÁZ$I¯¥lGb%w`G]¾@ƒàdqqä;€@7œdqò¥çÙIaR”ñ©>A$Hà›mÍO÷ö,ýdJD‡ø×ëûoOý Õ1u‚µ¯SÚ³—ƒÆ8‰§C7ž±›¨—¯À⌟Ŏ2Dw| ‡ñ‚¶2ëiâBؘá?Àò> UgfâX¨ƒoôêQ·•A½@!Åšf!˲3~>ß}zÄ3“+ú«¾…| ê; ÓÓÚƒ±o‡²„jÆ’ïÙô{J¯Øü@Þ©,þ†-d×Ô™gSƒùv‹²üJX]O
+âû1,n‚ʯßgÆ-=
+¯øŽÑ>@Äš9Œ][–ëú†¸Eòš£á”ÐPäÊ’I
+âãÇGÑ Ê)àñ½ˆ{û ½OT•÷>¹ï}àsH“Ðó jñ{]E* »š²q{Ž¥‚MgÇì)RøÈdHMÈ
+síÖíÆP
+‹=«®±6WzOÞ*L¨Á(uš„AÝ…Fçîœ~0‘ 6šMâÃØ!+«¨úH ‰D@x+á¤i8ßðj+ݸ"q¨šjŠ<1Â'"™<ß柖šœðo÷eYOýŽª”½ÇÚŽ.¯ïYë×GLÔ1ë%¢Â¿OÛš‰Ë׎¼<á˜v…ª1k7Ìq$RC(~‹Ø|dñÊ!eܲCj<TëÒn⤖ƾÐÃWR/ïö¡ h-@ƒù³Û½å/ö^°­{€í_îo8æÒ÷^*
+zَLjEáA¨¸ˆwµí“–'±­+ç€õ ¸µ%J1YŸèht?ðÐñ¦qn¿U|ùÔ8Tü@9öGä½íû\¡x(@/XM¨k%û­›?›g·©j O±…ö=%Òµ›Á)ÕÀ¦¶ÜG£„hl#[+xJ†ü;Õ´ß8?ŽðÊøí•©ñI×:»‰D´¯s"ûÙé%%‡ìì$†ÆËõ1å7Ä݆‚#g}Ø ÈRíÙ:e(¢*Îé€
+Jz,Gü ~½‚öîœ9Ë(=bÎon1?¹Zà§ñQN$EÐsϹºóÜÙÉSþM)ÿ¦_B¤þÔÀCkžÞÕË *35U™k-'*bfÌaßQ×Ô}×tÂPÃä´¥¸à™4¹ïx–º¯+Ÿq %á7þ†Èwm q!I!RyƒÁ,i:ÝÆ'êr®}¶üZñ-$¡ 7e9™QúƒŸõعc…/Fé~C…Ø{¿ðxÝö¦sfÆo/¸7CÕ}½i±|ÆWl÷F²{‚œêBÚñõ÷LÓK2•þ¦
+ïŒGX×ËfŸUu¶÷yÁwóîÒÉ]>Çw Çw_œžšlÎV¡wªaõð¾?MtîwÇæpd7£Ïu8’òJÂÌ­$̧ ÝþC¼âTQóÙ¤Ìu‚È(‡åyöë),òCÂ#qšÉ
+!=¸~»ð©ïÅ°ú¼³‚D$x¶pi,äÑõêå¥ÄÙ^ÉÙb€ƒªôíÎ/9÷}ÊñÔïèûÀû–¯¹…»«ïa¿·põ«}¦ÿ«,Ÿöu¼OЯumK.§îU@µl¡I5HR74ûrÿ§ÿŸžÌ¬
+endstream
+endobj
+86 0 obj
+<<
+/F8 32 0 R
+/F11 41 0 R
+/F7 29 0 R
+/F4 19 0 R
+/F6 26 0 R
+/F14 64 0 R
+/F5 23 0 R
+>>
+endobj
+84 0 obj
+<<
+/ProcSet[/PDF/Text/ImageC]
+/Font 86 0 R
+>>
+endobj
+89 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 1811
+>>
+stream
+xÚ­X[¯£F ~ï¯@êÃi™20ܪjµ­zQ+õ©ç¡R©´œd’° Läœ=]õ¿×—l¨Ú—0ÇöØŸí8¾ð}gçÐç'织¯~LXd‰ó°u’D$Ž"‰œ‡ïÿpƒ YýùðËW?Jé¤"‹‘& …
+Ÿöó¼Ü¾Ý説Ë^o˜ôÄÍcROú"ø¥3~Q 5ò{ÛÛfƈiˆQlewÛ– Ä ý;\NÊõíQŽ£•+”÷ ö¼†y®«~‹ÍSѬaP›'íÉ{‚×w®Ù¾]›º®ô“®€w««â㻄wد»¦¨‘{kê¢ù”çýþ쮿·¦éAÅfÔKTRÿõÎ/åÂ-£{¯¯?êõ±×/?ž1“JDÙÈl£·(me:")?ýg•ø‚3)îÅ«Þµæx°
+%Ž”d àdBEðIDš­ÙÊ“2ˆÜo7›²/MST+/L"·7ð•®©:f£œÌÞåƒ0©™Áo¦Ö}Yënå©X¹­ÞêVƒOâ”™à·àÝíßnÕf$îÓ*H]Í»egwŠ]y.û½9ö–×~ kVAìöºåÃMÙìxcʲ(6É*_øµX·Æªê„‘ˆÒÓëúåRc ‰-EÑl.¾’ƒëbKKó¤U‰û Qà˜!IÒ¿~…D1èÚ&­ÑðF¤“ b‘€GB²^?Ð2¨:ãÚïuÑ£½Å
+%9Tº·ç.+¹ûh_8 £²$¡Í®Üè._‰9îàÀ“ðQ6àÓ%°CñéVv½#Ùâ,v–¿†ƒYl!|Z,Vþ"=EnÜzqã)•RÔÚ-ÏIüY,‚#§·ÃYFÆ£DU±þpà 4ø¢]¨¤õpáFìq@üŽ=/^xÒÞa¿Ð|Bæ‘—Á¸à}Ö‚VLËKOQ:äúaÇÂPžô-q‰·Ì„œÊ ¦ÂØý¹ëý Ü¿ylÖ˜60YøØ<êÉï½Hʶ 3ÀVCIPˆ–ˆ]RHs<õbùíuÝéê ©0øñàÆ4¯z»Ýtf໣îðH”Y@ÂÑnq%½!Gì[Ùá̱–JËò]ËZ"¥ÉWœ®^xñвÊåÆ^4AÑŒ.î[SÍß‘’ðÈð×ÊÐù R"U”
+Ô•T ¦©
+Ù²¾Z=Hx9J×õú@5Ý¥<Ég!'˜@Øð5X¢¨*òªgNºû²ÆAhýÿ
+Â(áughpóîTøƒžïõxên¡¤åTnÍ8M1Z1…Ùò2V»šMZ`¬â&°W@!˜Gùߟ}°µ/8t¨˜)›Ė¡†”ZÞ\¯ÓÍ%aäb|ÎäU5æù²=efOçAc ,HÐ*\ⶣå?}¶u:†%ár¯ZÚº-i~T´º®¤÷o´ʆøÿÕòäÕt™<C‡¡Ú£p¿ ÔÈǾg¸¶ÑÏ»Qƒ àDX„3QÙ@SUTå_Ú¹ŽöÅV¶¸¶5íYñ |Ù%‘û×WR{” ?¹.ÆÉJ‰8d/ì˜,y@Ëî^[ÝkÙNG+/‚æÂiÃäü/•˜ S&éêo¸,„3‚èË ¥0D€¨løKåÏžò;M/ak°n8Ýꢧ&!QôЗ ÿ”LNc_¤ÉU²‹&h
+AäN^˜ÅCiĉ¸Ó”‰q™<ÝËXƒ$Ðó"û ÞÙkzàªà‘Ù‚z2NÜé'v¡¹‰©±d}[Í®ÒùŠçŒ†YrJ+$4î ÷/³šªç7–À´$b
+tÚ ôøÙjTR"¦„QÙ*ng¸J·ªR†BbHpÔË$eÜŸ|⚘qjf°ÑD¹ŸQîµ|•iv6bÙ鿦Gúç[·uÑÅižƒ-È(w›Â’AÕ´8žNžæclô…ÑÝh}zÓêµÁ–9_=ŽÞåùH2Ð<ª3°‘*aìxXÄPÒ}Î_üø[CH
+endstream
+endobj
+90 0 obj
+<<
+/F8 32 0 R
+/F11 41 0 R
+/F7 29 0 R
+/F4 19 0 R
+/F6 26 0 R
+>>
+endobj
+88 0 obj
+<<
+/ProcSet[/PDF/Text/ImageC]
+/Font 90 0 R
+>>
+endobj
+95 0 obj
+<<
+/Type/Font
+/Subtype/Type1
+/Name/F15
+/FontDescriptor 94 0 R
+/BaseFont/HCYKZF+CMMI9
+/FirstChar 33
+/LastChar 196
+/Widths[639.4 477.1 609.5 852.5 529.4 374.4 671.1 1027.8 1027.8 1027.8 1027.8 285.5
+285.5 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 285.5
+285.5 799.4 513.9 799.4 513.9 543.7 770.7 777.7 733.6 847.5 756.3 656.2 804.8 850.2
+449.3 566.3 870.4 699.4 992.9 821.6 782.1 656.2 810.6 777.6 627.9 599.6 699.1 599.4
+970.5 849 596.5 699.2 399.7 399.7 399.7 1027.8 1027.8 424.4 544.5 440.4 444.9 532.5
+477.8 498.8 490.1 592.2 351.7 420.1 535.1 306.7 905.5 620 497.5 515.9 459.2 463.7
+478.8 371.1 591.4 499.2 736.6 582.6 506.2 478 334.5 391.6 653.3 513.9 285.5 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 627.7 856.5 782.1 713.6
+760.6 850.2 799.2 599.5 685.2 631.1 0 0 792.1 658.7 579.2 530.8 455.9 416.4 450.6
+513.2 481.1 363.8 592.2 599.5 619.2 506.9 450.6 588.2 529.4 587.7 452.4 556.3 611.7
+640.8 670.5 285.5]
+>>
+endobj
+96 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 1010
+>>
+stream
+xÚ•VQ›8~¿_´ªDtÅÅ66 ÕVÕµ§kÕêÚÍC¥ÒLb-&Ûm£ü÷Û@ºIµ—ÄØãùæûf<¶¢0ôVžýûÛ{¹|ñ:ö0F)ó–¥—`Äc/àÅðý×g?B8\æÿSkUÈE@cæç ŠýµÔÚ|Fþ¦âÃê—囯#/E)7þB/À ¢‰õõNÔ ûßÁ6a~Sšîwkã3‰ýrWçjjíæ ©óV}]$ñeáæ„ûlŒ›{ó#¯oªªœEoï>rQUnk Gh8Çí`gÆkѼlµ³QŽ-ð±$œ@@ÂÙ:æih™ÃD!Ñ"à8öo·"—v |]7³;Æ ;m£‚oåóE…Ì×Sê‘¢ˆ
+²0û›Ý4r`!âP†” 7_Œªƒ [ýæ]ç^Ž÷ N|Qí¤>/g3¼.Hó¥žqU²^uk¸5”Xµb£Õ¹Çɶ›rSðK éö¿\¼ï›dJF/uŸ­’¹TN½ÿ÷ãû—ÞN¹0yzÁ±íþ|è,‚ê;q7AøR¿¨å·•ØL©è¸ïé/=­{vì‘ÇÅ?úÅp\ŒÆW¼§ïðô+yêŸBÝ fg/bLˆ©Ï€Ðqlm°Ð{µüíkuý
+endstream
+endobj
+97 0 obj
+<<
+/F7 29 0 R
+/F4 19 0 R
+/F6 26 0 R
+/F8 32 0 R
+/F11 41 0 R
+/F9 35 0 R
+/F15 95 0 R
+/F10 38 0 R
+>>
+endobj
+92 0 obj
+<<
+/ProcSet[/PDF/Text/ImageC]
+/Font 97 0 R
+>>
+endobj
+9 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-33 -250 945 749]
+/FontName/ZZXBUC+CMR17
+/ItalicAngle 0
+/StemV 53
+/FontFile 8 0 R
+/Flags 4
+>>
+endobj
+8 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 714
+/Length2 4149
+/Length3 533
+/Length 4700
+>>
+stream
+xÚí–g8\m»†‡¨£=a½N†½D½÷13˜03Œ!z "D'¢×„ ‰’DôD‰.:‰/Ñ>yßý}ûØï·ÿìcÿÛÇ^ÏŸu_÷µ®ç|îµ~,~CQ$Î ¥‰ÃD%Å$¡ 5˜±$$)&äçWãà4«'   I99IŠ· HJ$y*- •’ùAj8?<ÚÅ•
+.ÏûÏÚ}9Ê…
+È—+tÒ#@¯3”¿˜…¸´oyŠÂ¸aøÞ®«‡ðBV'õ·ÑŠ‚Ðá«ͺ!Aïj§_S~§,£™+¹¡O¡Qtí5YÆsðG*éùˆˆ@ó3e&ç
+Ùþ#|Œd~|a×+0Ý3»7W7ç¬;Øêi}TužMáÈ1øóKûõóÉ=¿Xùió£ÚÀíg>™kéOM–X?5á›
+²5› tæ:ØŸ¹Ûb¦K'Q¦(5Ê¢»AVx.ÓCÐ5²½½ç_°¬ÖÉêÞÿv‹•þx¢2G´<­‚)éX\Ö˜ÈY÷Lð¡ûª¼óšvgXxŽãy-âyF•ù¦u]x¦‰Ù¾<è\סöÍFPÞ´|–o'ö´ÂwOðé)W½jÐ2»:¡É—¬«>Ýâó‚C™b½ØÇâVEQ&lM°gKo¯ÿ]G¢Í_ŠX/­<ˆ3וE^¥YÀ›öNûƒ¿JÊÛ™WÙ|lÇkÚÊZ—š$I>ßÿN¤7‘³Ïÿ
+~‰çL÷ˆåÊ.÷7¿À´aô^º¼k\Dç3óz„ÈšZ€ôsÓkBVõBWKñã
+“ŸëŽ~(~¯Ò–¾ «#³ŸâÙ–E½ÑÑü™ÓDÕ[­ qDÀúZï”_ >uðé1u²ð¶\¦*=¿¯žÕòÙÎX¨¡çY›A&ƸÜÊ9ª_ÞÓÀ]üÒr»òd §
+³ÖYùy£œÔ)IV¯05ØÄö”OÉ à9Ë3Caë±tM/aÆ뺣X¤Ã€k;¾Ãó£(Í$ ò+f–zSÖ1ûšµ g?_í:”üÕ.=i‰+µV2ã:Ô÷hX¼½s¤”õ3 óán_¹¬²'ãj’á"09“7`ŠÊŽIïêW4V)¯Š+ìÈ.MmšŽZ„{T¼ôŽÎœ<=b“z+÷
+f„«‡³ò²_ìTI‡¬ ‹ZgÏâíåõ¦¾É¬‘•œ­1/ ÍQ+ ´~peÆll÷·+Ký«xŸCó©µU6¥`çü¢S²r9ÊõèÇ¡€^­®Ò{ÑÜF©§‰$Z Ü9+D .‘œÆä’L—Óh/Ì×KªÔõbN–»¾,e[x„oKVÚ<¼ð—ÙM¦wÅÅ]h<ÛÐp埪«Ïöî6`®º3HÉgÎB1ÖiAÁ{ØK¬TC2šxóº+N¢®aïà¡"w9Ÿíë÷œŒz÷,=¢~©0¨ì<¾Ú˜ëjü…¸‰Ú?g:Cuìz]–ИÔ0ÃòOµ
+ ©ˆat6u“•>FFPƒj ‘¿q]êá.´<‰Ó&ƒ°)ÎÐ )·~Ô~”WeÕæº5>´x
+wƒ\/žªeWxN1û4¡§¶ÕY€A*æüáMÓ·€µV§äd€ýŽ‡¸i||›¯Iÿ×Cª¯&Ù¬o¬ÞÞ-І€…•6Ýéóù9‰wí DŠ&PÓÜj5ÃrS5€Í[áÁ¿ÅêD  LÙqÄ3´ÔG¥Â‘¼Å8³ çAU@Stç-Ò©Çã|²‰yÊYp³¾gpÖì°–—„@™;O¯€ËŠr¾:ÜtW>n71 ]Ñôm~ÿ¤ÛÊAހϪ¦ÔU–…sÒ³ƒ1f¬ÖNF)ï£\xþ¸ø¹ÌÙ.aH)*zÏö¸¿*ùæj&PŘÜN;œI,ßÀB>Œ+“· KòíþÞß… $‚†ìÑ
+7_ÜÊù"êÁVà sýìŽ)vrgM{וtÐD¢ÏN^”ª©&ñùÓ CnoÿÒŽŠ®Ê\ž0E0Sï‡{ɼ¶Ç™¹½„Õˆ«ìÕy·‹¹V[ºÝÂýÉꩾ÷ƒŠD‚4n?&1vòN•w¤ÍŸ¾xUü†-’ ùÇy´ÜÐË1ªBåät}Ï\%9ê0ÓÄä DóYWA^J+xDšlôù ,4ï(Ž;st8Í;¶t€Ü6+oÊ…SDïæÁ.„•B’-NÈYœ¨\×ÖìZI~ZH£rº”ÒQÀ½¶{Uö¢½ŠBc¹è¡$Qšs•Î¹%&
+™!R•ØV2Ú´#â•ûÊE yšY¡U‘€Ã.b`³·ûºB%
+šÌú^0xw²vÒl¦ÖÛ/µ´Ëˆ]W6)fâHž—=×
+Wb×ñM¦DÔ UƒœûÈnp)…ßâøÀ®¯ìž´»M¸Þ^˜Üܸ€8špÎ¥8Š‰™o–q&û‹Of(&ÝSÝnÉ+áÌï:§yÉšë@I…NFÆ^ßãùÍ /0¿º= ^í #UûfPÉ9f/&&FtVª­ 2<,*×Έ뱎 "\±·1c¥7I¤9å²Õ>ãÎ_{…y%ù=ù> Sÿ2ý1¥N'†‘I*¤ƒé»ê”J§BpI£ëÜTžs+^ª(Ä|ëåV>é»Ò*·š‰¦¾ K¬CÆòè_ÒÚ'ö°¦¤è›Ž­V
++Û/H$yºxé»of…xjÛc¿®r ‘ÚL0Ê|{§eµÎãc¡®ÙfôJ¿®µÔj¢;Y%ülu#>y/¹ý)=Õe®g‰qËj
+0ìÅ<•†>:å_¨Š/ëv ¹9#Úx>–±v¡mŒâ8©®×ˆ+
+G ‡¶v¿UjDî=qòœÕkn;öæ8‡¦ß°â=AhõÍéÕ;ˆÝyF;îî¶Ñh’°Ó¿é›ü¾Þ…4áïáÖæ–Ìx´B>B‚q¡`ÌaxéNeéûëv]œ0ZpÊqs5爿ë#BëUK;¡“ ø<§ð^OtÈêçft'Ìg´¡Ú§·†I0™¤1§Z@øêøŠ–[ç_nË!7ytLpzø*ì’z_Ô=ɾKw>à_n¼zùGô ¸0?Çå`‹^Cw3-kS“KS·£¼Š¯ÂXèt…vR€¯©©Çü‰€í‚!%•Kx)´àŽ:åí»ðã=kd`Âéá
+ÍHMK|ȵ<Ë3ÕE&ýUK•¶L¼’‰oAæ§øÂUÏTJ÷¥Û陞Ö"Uj…K7R*¹ìí.?î¹J¯\j=ªëß N\XnPÇP5HŸs…Ç–ZlTŸâ-™ÝÐg=~¡7H齚õÖ¯ÁÞ‹2~*tQ”ýÄØ™z
+æzë/¡ôó‘e)ÙjŽ³etÑíDiH:Àüug±…ÂFîL ”#(kÍ,¹a¶dÆʊ䪙 Y;èãƒÊ*B¨ÃHèÅ;H™qO&TóÑ,Ö=‰ ¢yVYn†Á-ÎrùÿË øÿÿ'î(8ž€ÃÀñn@à?
+endstream
+endobj
+12 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-34 -251 988 750]
+/FontName/ECTNHX+CMR12
+/ItalicAngle 0
+/StemV 65
+/FontFile 11 0 R
+/Flags 4
+>>
+endobj
+11 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 714
+/Length2 3490
+/Length3 533
+/Length 4036
+>>
+stream
+xÚí’gX“Ûš†)‚@P”¦H)‚„„NéE ô@JL@ „š¤)J¤7é(R¥ƒ‚€Ò›Hu H/¢ÂÁ½çœ¹fŸù3×ü›k¾õç{Ÿ÷YϺ×û}‚üF¦âª(×{h-WI‚@ê0ˆ$Õ‰h ëJÐ@ÐP DATõtJ‚Y¨”<,
+‹$€Äo¦;Œ+Pî/åéöÏ–šèqÊ9å¼<¥D¹pd
+H¸žž†>eùcý7T×òÄá øßñ¿çôom‹#ÿ‡ÁïæIB0WšHø»Õý ÂzâÿÞ½CBà°HU‚# ÿ%a=´°>h”–„tb8ôŸ:š€ú;ÄéÜþDÐT73ЋýõIÿj!°’Ùí_±¿ÝÖÿ¬OÇCÄú
+Kpš’‚ˆú—ðïPjj®>~âRÒ@qIPA^('ø¯>sÖÝ}G(ƒå¤ÿT‘žD"š@úó/8½ï?k öt:h´ H§\ÂRÛßäÛsØ}3rͲ¾ÔД·ž&³ŸÅ1гɄ£9‡‡¹펳­E§Šð)GTÂãßìÛµ“É<¥Ó¢˜w6ó{Ð1+âCìµÖ4-ßÐѯímªÅ²düìèXg¶QY$·æ­N~î—?Fº›'P¥ÖbͽãÕ‹‘K TP䈦·^¢Ø3ûý
+zÂ{u”5;¹B’=
+Ç oMT„M‹PKãž1„+
+ÌvD ŸQË‚áŠûÜ&ü,t“j©éèG˳¬7#oD¥µ·û[÷PÁñW¥…î
+}„”*‡5½ëî¼ú}ý“…‹bbz¸¢2ºi:6ZÆù•ÓήQåªãžÌ¯ì”†vx7{\½ú)¶XŒÇ/ÕÞôäÚдâ'ß~Îòç“ü¡l]!ªÕ¼J´-*z™Ê)­Ï×ðÆ•Kö´ï˜o–Ñ
+¿¤Ñ5öšõ¬ëÚ/.šmÖ]cx«‡ÂûøP•NiØÔÚ²½kð;)g)¤Çòh3~[¦¾.IežŸJ)ùåùöknÐîù¢ø(<ˆ•ó‘$—>5.Å*0†Ë‹kû*‰d%/G¶kò¸Tö¤QŒÅ³0£ÓÞ—t¶'}¯ÐÎn³4 :¯¡G[MĨ‡;|/sß5æX2…ú?µ~gÌcéìU@½Z ‰¤,Ta÷8>ºdMˆ.^0ži|j³|®çÙvs¦ñë楧5+žø¿Ÿî°—z;#âÊÃ1b߃קý’¹ô»àªîê×™”š&žß‚ ÞšK¸Pâ¿úÖë,ð#ËÕ‘/3M@ÒàÊ"PcÄi+¿;²ÉNƒzö§A¯aìÃІ·‡~ñÖ¹7NÞ¯þãg™`úfAÞ©ÚG>?¯ìŠ:£6Ó¤%mÀâ2<Ê—j§äPÎðaü×)°=Ø!ö'¿ ø¹ôSßþ§ŠÑñèË}pÌ“¶QÝdŒeÞâ—ìÑґίgo™8ê</ZF6psIXUæi¼-8Þ:¢Ì¢ÔxÃÓºfEÙÊ­~_fË.V¢bÃ5\¥Ãg•'Z?Q[j¼ˆºÒÌ‘%s¢½#º”wd4µ+oŠ]X-Q ò3mçÃû1Ï-‹êP§·îQ,Îøhzâ¢FôÀ>m#–1îæú<&ûŒL;ëΑ™®®ø(dì°8ãæC•õX¼;Û õHƒ€‚…ˆËC„ª3]ÄÐVݪ”ˆ ~xÛñ©7³NZÂÁÉu=;„v1‡rÞa¿>Óœ|øü²}þ­MËa®þ4ŸaµÑÓj8ëÖŸòi¨úÂ1˜\[¥mUYÏã}MØ—\³dߥ]Áˆ˜Eh§Ã5ŸÛÏGÚ]ªÛúB¶¯XÈEÙ»÷~­Â~kdžŽF½VçÔPM›±uQ@¶^Õ±` £¾ü^ñ/~ÝQMx¿Í¬0ZÏÙ·î+*ó˪=ÖõÉñs`ý˲\ªaV½Õ Ÿ+ÜËÅR‡¬ñós3ã1‡q¨wM¹l­•„rº<Ç-x ÃlGÇ0ÁïqÑåé˜6£h=fìØ{¹î½£’÷íKÈì(Ça‰­0­¸ ð³Yq‡^·sØ»TÚ4„Fåüô.«$Fˆ¯™B—ªúÕ×¢X˜úRçÎ…Îì½|mRˆ·ÿ¢'&ÃfÓöQvµz";ÿVˆôÌ}\eÜAªEîÉb‘sbš†…Æó*_+k.¥ÿq¥P`Ó
+²jЯº‘?S÷áÑ-HeÏYÖ‹ óƒªß-pÆp£'«$ag»„y‰ÛwÆp5™2OÐÝ8VGø›´šuáŸÌ =—„À7
+ÓÛ=ïïn0)J‡¥]ß°¡¿ùÈ{f.æ|%'ê×䱕ú[fŽ£©=&z%˜r6»‚<ØÜŸ<ÿt„âŒ\ó¥Êöê†$]JR»Î·éXW/±”YNïWÉXóCÝPQµw‚5+µ#2'zÙ—ýòÃmú,œíúcÃàÂuƒu;øàÂuõ÷PI³Ì—¹™;áù,î{T y¡ €žº:º€8«\“íPðÊx»•{™—ä·G¡–à<Ét96'±³inH™á‚¤×™ßÏ?hå¨Î ~xgú%ŽƒQµê¶1þCë"V§x.Ÿ)Œi%²X+Kwi¼Õn3ýQ½ì– ñȼ‡Æ B:÷3ÝÕÇ!åg¹¯âY'Jiªël÷b$¾^ßfžÝr\Réu, M6‡ÖË\ú¸êP=XR5Í›gw«´mÁýjLvW©L^z©žOÝ
+JùlÐèn«ø€k[ øŸîò¢B=˜ÎS©QÏ«ƒóÈ¶ì” I)©KÑæ‘çV[C½MÞ›éÞßd²h·SŸ^³X,í<Hôx”ýø#“÷·úÉ2Zªün'² sh…Ù>ÊXJü„Mìzzˆ
+`¤ª97ru¹„YXU|üaÃq`¦xPÂôÑóþ2¡{à™8½û¨y!=ß $AªÊ›þ IßÈ­ÿ ¯­N ¨À ôpŸÃcË£Qæäâ-ÒÔe®Žû÷¬âôúŠJÊ*ìCÚmxSLË_,òS,­822ãò:UZ•){ï?(KD*Í—Å¢áÙfŽl#׸æú4ö„ïú;Ë;Üzú‘2«O+‚s¿·B•f1”–ëÄ’=
+7}ò«Ûröd‹iJaXÈšŽl(’7˜¶Êfªc¨rë[—ª,{µ[ÛZ1‘0ïûEä\dÞnÜjÿCÏõA`™‘aïà ÿ–ˆ†¢vGÐ5I&<-AY5‹ ¡rj˜ÈÑ/|±6”ïÚýÉ3__i¨‡H£ÂNà¾ùæ5úæOºÄ‡)A_êòç8ý8W˜äê×Þ_€Ø°hIóñÔš11Y¸sñ”Ùd+!! úSiÐÎÀå=EY̽ž·+H O¿ýüQÚ×;ÉÐpáºSdå&óô)ƒ•÷rhúŽêËψàs…Ï’Øâ ¬Ú~ÌÁg|Õ5MGƒ<Ž§pqÖA¥!j+#Ææ 1¾ô5oDµãºPöÐåƒÈÍtV¶ù<ˆ|Í¥la›.?­3÷Ò´«¸Á`æƉ•ƒ¼žàY©Œ"0ú)Ò…¤’h9ؾ½¼:I9fBFnNа1?Yì £N†óxŠ{]óÏÌ }2f½½áNìfww¿âÐ÷†ãÂ<SÐØŒƒÅÛuñ¿°l²š>«Hçö­¯Ùó]cWï– l`Iôä>W¥¹XP1é€$Ãs?ìÎýgöB…oôJêþp³ñ\ÂÂßSOI9EŸá·9æÔÐl¾¿ÒZ±ŒY´u‰ÐïI-ƒµ¿ü8Y£;yùÄÕîdÂF4X*YÈôµ¼>u(꥗©åUª¸"ò€¤ßQæ?o£h?¤µTÞ"Õ|¾Á[xÀ\eZŽd9êàñè©eéSø*Øÿ’ÆêxEÏŠýüó±«Ä/à¹'‡•³•X¢Çƒ/(shU»¨¥3À¤l¼ºzâZ :tõ‡xº+"ïÅ'êU¢Æs,wÔòCb®ÐU&¿½k(d¢-•d…~?wWòÎö dŒ‡}†¨éP¨-x~fM{À Èz'Âq HîH—£þµ4á›Ð„®H€gH²8Š³(*¸ÛŽ ü¢¹àBÝ,|e&ÞbÒ……ŠK¶ì‘TQúí_þÖcsç\^…Gå´ÊЀ–Ö¨Ãîb&ü+àý@ß[û«ø‹Ìi…Øo&ÖçCôß9·ºòÄÊõâ4+E¹oä·=Îó :&°v?q^2¼àn}Û`€ô‡a ¬ÈH¦Ø*ª6/K aì[&ÍC$1Xd,ô$qâc CwÊßW¼Úr¸(ê¢Iƒ„ÌwöV ÷eÅï³Å²W6Œkœ)øCCþÀD–MÁ¿Š³5>ÿŸ#:%ö¾hª+qó"‡‡¾¬!øù
+endstream
+endobj
+15 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-1 -234 524 695]
+/FontName/KLJTPR+CMTT12
+/ItalicAngle 0
+/StemV 65
+/FontFile 14 0 R
+/Flags 4
+>>
+endobj
+14 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 960
+/Length2 3094
+/Length3 533
+/Length 3757
+>>
+stream
+xÚí’y<” ÛÇ­aZ([¶ºUöf5ȃ²Œ-B“eÌÜÆ cÄ$Êž%D‘]HŽ-%žÈv¬Q8Ù[le+û$Õ3užsNïyÞÞÏûßóyîûŸû{]×}]¿Ïõ»d¤-Ï@õˆTWЈJ¡C‘0¤€ÁÚØ Q
+
+ª·?¤X*¤Qþ^jþ. IþÞÏÓñdAâNÄï!’Ÿ)$Z’è€Nó„A
+ñïX{û¡
+pd²Þ?¾ÿ6ÍB IÖU¨¨x Ï€°ÎƒE*@ Qˆ`
+›NP BG°"‹]-¼¢æðþÀÔµ{+Qóò¿ÚÅ’¶ê¯^±'ï5ÿˆ¯çÙƒ4\-ilÖµš¼4ŠîI YnˆªäO³¯*L]—Ê Ëå¬u  íƆŸ,]Û×.²ê ¹g¸ZE0…³/j*$®áÜDzÀëÔÍŽ¥f&)ø_sµÜó¯¥PwB•iÒ•™'Oµ¯lŸž½°ÿ®E!Z9‚ÉQÈ“)_kúF¬tHò$®IŸx²\à¨%ùj²›„ʪ¾?6ÐB9iÜ9ƒËÚsnŠï¼ð@`ùc㯄"– ~³‹kfüšs|F•œJ´ÀiëÌÛgUŒÙSG­¿B-^ß—IG>ž áŒUžH:¼ñhÿ½¼Q§älCÏ5—äÙì—_ø¹o£µ„´ã‡Ï´E¶r«µ®(²@2£åΦÈÁؘQû\îÝÿu,Èç…ób¦8ö6õ}MZ0yÕêlBÇ›¨Ã‘Ä×’¥•c‘ç´RÆ\9„Ü[s•Ñ†Åèæ Ÿm³¡üå™_TtI0SgÙöKÂïåÏõÖ3Sõ/WëÉq‡‰æù&ªM WÛõv¡»Ü“<Ç 8óO_™è,â
+s2௼óöɪòEO£âÇ䫲zµËõ.ð¼>• 7âÞe?_P¢~÷kÁÚŒ>,Ò;=7½-ø}®U4Í/3Î~ùöøÙOã¡•9ÒõÇJg÷Œ½yo\O¥>unâµÚ”‘z,ÑšëQhyüz GgNÜmó€1꺯jFü]Î.½–ù⸎Wȱó±
+Û·¬úz–·Òe»o=Ê0ÐkßÚ§¡YSÏ.Ò{ì®,»öîyZPñ®Òg¢¦cDþˆ›<â­Ÿöâqìë0©ÑwƒNÌóMíxözÈüóèü¼/ƒ[³˜Î®Ë†]×Â*m‹ª¯=édÇw²_C1uåÍ­'ÞHÆ‹b>HŸÑ·KÍÎÓü%†«qØÅ®—­¶bØW\»iµ"ùü¹Ú"®€ùÅ“Û*vØzu¥7]Æts’Ï1MŠ¤ÿ1àí<ð¤æW?~®¯7l5ç^¿—vz½t ^¥fq>ô“ ΋o)Æ#zXë…’f:ÿX+Ié²
+µ…G¦öŒbG+o>÷ç÷Q§¨"¼3èîÁ!ó«áÇ.™±'¥
+Ôö¥?Ž6p]cز™
+‘uÚ¥Ò°Ö÷éÁ“FvóþˆÉ˜ÐÃOiJ‰ ¸9-\bö¶µZSD ¥+Œ¡öp Ã‰DQqŽÛ0´pšJh8ßK_ ò €GkF÷¸W«Í«’F(1®/âO'âÅñX'¦®¾ÆjÖ«ñÃAOäË¿’ßÕéµ…%µøÝKÚ8„©, >®£‘ÝXhžüì]¬c ,/<&uÆle_RTRU¤õVL6ý6·SCòÜœ ï¨Û¹+ÛXœîtÓçÃ@n˘¦3Ž9d‡>s‡ãé‹Á¾4‹Ñü·Æ3³ª¹ËeÆSOsýâ¨~ŽÂÝ•0YôÝ|¢“¦-œÄýå7¡ƒƒ%›w‚t„[äkm¬ ïí}2ú ˆFy‡BàSo²€àÀPÅŽ> b™¼8jÿn‹ÇI"€»4š°ÞÁçíæ]• G·ÆäÿfÖé',µÄð>ë`¾“ùn¸ï²é?ßãPmá²£áY([f$¢p*ÒÏÕ÷Õ°Áq;Q’°OØúÛÍ‚ë >½æÈV“N<·çãœ) xÚàE6 ØОYë)m³g.²¶L°åM¹°)cen“xëóàNx°Ü³"Jz\ËÙL±ýÛ*FvÒ/U‰Ù·Õ™ÛÄm‘uãµ±-ôœ”ÐÇ¡/ú”4Œ†[$FE%^»°”Å\3Ãe;NÙŸA%_°»]-¶;Ü+¬B1˜Ð¯ôÊ/EÕ4IpÜŒö}Cw„ĽÑÅZØk²G·Êkop<{û~[8P>Ô(êÐryÂÿ®R—YËÎySt]4þÓÁšo:
+6…ÓgîŽÄ‡~¸Ò;fqÿóŠ®·2S%ÆkRèh¿òùzƒd»¦Ëê«°ò¹HFΪœ4üÄÙ†Gqiûh­.Þª°È¥÷@¸»ë¢ðâ—[Û2u:‡¼ãÔùƒ¿6/x”ú$â\N³£©I5’6º/×óÁˆ–ØNEç‚ñ2PÉVC15âãDíÍiµ”ƒ²Õà%FaC“çý><Fx
+&¾!€Z¦—ŒovzáŽZNÿر´²˜`»˜›&!™Sšý¢ê½v/˜“tlªÐ?./c䑇„’—Cîò†ø¬Ë徯ÅõªîðEéZÖX-åZ“£>~œk¾B!ó.åΖ¤ÉO3vçx»Ž_Y>‚ÓÙ™vOr¤X ÔÊ[Ÿw ]ëi%ÏçQà ‚ÂŽXJrÝÓmÆ’·ÏŸjãáým "žQ_µ=(|oj]ÈÊõhæçY(ç² T¦iÁ%ÝÍ¥]î÷¬¿æ‚mí•F\­l+sì}™!ÆCšW2.R«†är/8Ýø5èï2±‚©í^’>z÷¨¿ÝÞ‹^†Ðèç«gp¤ŸÇrþ¹ˆWÊð ^‡å˜DF—¢òƒ“b:©Re/©—󶱙l£-†®[8"ÝÔr^>OÎ%Þœ²Û=÷ò€"†"óÉÀx5®Ë¯ +6ƒ9!üšLúòô«é•)¯õ[ã^œ-}Â/DÄІí[#ãݧ ±“Æ:¡^E—…ê5o8<$¤+_B]hĉÂY‹æee’<ò
+°2Ž¥a¨¯ˆäˆßÉ3îEüà¾Þìé’ŒBrß./]çˆÏ‹z¦®ÕZ4¶äM_„@Á&N7ëƒwv•5$®9ZGJD4öó™^Èzå‡ø>ÿ6øh@ ƒxê§yA ÿû Ž
+endstream
+endobj
+18 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-251 -250 1009 969]
+/FontName/ZGADGF+CMR10
+/ItalicAngle 0
+/StemV 69
+/FontFile 17 0 R
+/Flags 4
+>>
+endobj
+17 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 720
+/Length2 13498
+/Length3 533
+/Length 14055
+>>
+stream
+xÚí¶c.ÝÖ®Y¶m»V«lÛvÕS¶mÛ¶mÛæ*ÛU«lë¼{ïþNG§ÿœ8ÿ::3#cŽ1î¼ç•#gf$9±‚2 ‰@ÌÎÖ™Ž‰ž‰‹HXV‰‰‘ˆ‰ž‘Q†œ\Ø`èlag+bè à"bâäd&ý3øçàbcåbc†!'¶³÷p´03w&¢¦þ—ê7‘  ÀÑÂØЖHÖÐÙ`󉱡5‘²±ÀÙƒžˆHÐÚšHé_—8)œ
+à g÷Ï|€hþ·Áþ_¸þ»¹˜‹µµœ¡Í¿ìÿÕ«ÿ¥lhcaíñ ìlì]œŽD²v&
+ÎÆæD¦†ÖN€ç¶&ÿâŸÎýAK\PD\Œö?õ?EC [gûÿiû/õ¿c¦ÿ;þ§=ŽîDÚŒÿô—éá?ûtÿÛd¢¶Æv&¶fDÊΆ¶&†Ž&ÿ3ñ¿B Ù¹{Ñ1³1ýsúg12rq²súü?•ª¶.
+\ü, äQýýmÍ»{Üž¶ï]Où4Æ¿ÙbãMþɆҢÿ÷¡úãgÚOŠƒ.0c:nчç\r£g21ØóV V@þa=ƒõ3V΀¹c®]m?%ŽG‹¡áUÇPÝ9,›YNñ³‘*¼Mž ]aU€ #~顬ÎX1]ˆ$hr uFÄfsj}3ë'<XÎ]Æê…#t]ŽØÅØ BÔÛ×hàÅD+ÈéÎ'·žOd ƒöí·Í¶À¼S®|”ÖÖA&mœ-õ=—7‚éNìšÚÝ«$±›ŸbÙ_™‘uzÄkÙ€9¿î˜c:z¯!PΤ·þh&­Î˜n)'úà}¡ÅÞctõ”™È"oÑL=+?%‹§x÷ª¢^1ÁœáX# ò¦ØþX™\=¿«4K5…õœ@dy‘¬ì¹ u{’”¢Ì¤›¤g¬ŒösˆúÄ¡cГ#ö½ŠwuëÆ*ÞñADÝÀÖìí×Ùê÷l•Þå¢J¾’êïÔ^c*áŽÖî„Vt œtÝ+àIƒk‹ÉÄ9¨ÀËúÅ}ˆ56ÖpDXÓ:@ͱí|\’:$P–SJùÚ¤µÃ-ÄÐÛ
+‰iº”±Ë|V5?ø,+¹YYJÀ ¦Uã²»½ˆqd†/}…‰Ó9Æ` uü9ˈ
+gG—q`ضâåu›‰ôw/ÔŠãçMs[ã%t”°1@Ã2ˆ’8™›önMù=
+‚öºP§j:}N–£9“_zê7qzAêÄ…ÍýÔq¦fHä
+(^æêGÇÐß³“Ñ­I%B®C*/¾Èñ¦º9¬³Ø.ä~¼œ¡á/&Ö‘¢]+;—ËtÓá'ð`?4— Ý Ò>‰ß oÍ/àWm‡ñ¢ÖÙª'ö§²»`Bø“©† äâ¹X®'F~ÙR›ç,˳tØS°¬yë ß»c„)äè ©y†è¤Ç`íØî/y{³œÕø®‚Ü1þfê-}
+al|àù0°Ò®û;¿E¨*YÇç<ªóšÃx ‚õ¸e¹–gßìB_ÓÌö/"¯×䆢Ë |±ú“ê8fÎQpB¼ô t?S¸ Íƒî;óÇ`¸3›È5ùŠI”\0 ŽÑ¥Ñ]¾µ…*Ù@ÿ©aûδEFv8ynüÞä0…Áu¬þmÉ•„èÊ—µ³Úh»¦Cˆ
+]¯BðtéIä\¢e†kìôÔé®
+§‚—œV¼I'÷ Û¿¢5w&ER˜9ÞÀ1¼6± >„`ØøMÐÇo‹>—·ä
+*u>Œ…¸~Ô¼ù³ _F¬Ð›~Ñë¢&3ÁÕ°<»§«ïGåO
+ˆº˜ÚÅ’z]|íŽaB%Öö"é»F^µ€×[¼Þ7 R¸ôr€*BKœ€ To‹ãë W1‘ÍB‡7e…ÎÆ7 Àô=ÿ>GÆüC²ßØ›–‚€Tì­ÝWX È-Pü2ŸC^"›)ÓÍŽ®– æÆæaÔK°D‘ë—
+‚ÑK–•øÌXLš‡,\Ö.ݲî?‡›¿ÍG
+jhÄâì'°e^–ë`Š‹ƒòSÊ!áyíò10ԈϠöÚsw ¼«6¯W
+0ða Ìï‘{FjƒÂÄ΃¦ÀF¯²®Tí¦‘„v6´”jÞímæ8cSó¹.FTg4¬qúuÈ€ÏÖÀ^’Mæñ=+Œ
+Áu/Ó^D¾OiÉéÁ9ö7ªD/A[=/
+Ò‡c¸–ÞÑ«$^×=§”™S])NîXB%í|Z_-p[f|É>úohmaôG-„Ó@æKû~bl‘_÷@EèþSø¹o~¿i+i‹WŠîr$”n,Öæ'… D±ð‚ÙDùŠ¹ŸƒË¾ÇS{Ž«”Žx/ŤRÎËL%·bYV³ÎÆkm[Kœøu¤#Î/v8³ÙrôžÀ ’,-+Å»E†æ‘ü«‚2MhWKè9E?4ÏJã9=^;YjvyÒt·|ÕrµN…ªV¶[æÒœ;Å<I ÇÍŤhJ
+[û$aÎiiäÏðñÓÕq:(j_ ™ß{åx/Í=ÈÕ¯ŸÔ¸ï䃽äïBf{‚ œæµì(Súñ-Åǹvçµ7Žå!Ù
+¿¢¼pÂMkI‰öS*lO]³³L/Ä$ÉÙL „È­è=Nýóêr(êT@|zDÂøÐà4Tà¿k¡Ñ±êáÏ#+àºÿ^Žš»òßÿý›kœÁ?íùïüŒíXï[r•êÐÞ·ëDü¾¬/Gdi dB¿ ¸ÄÄ „®ÝBÑKì‚5]iUµÐ|%•Ø}
+‘†RàY•å Eo¹×ñ~L¾ÀvÞLw(î>¸ýî{ÿ»[ÈÙÊLN¿…x&´i]V%+0Žh\ú#FR?•íl™ñý‰"îÏ0´ˆ„V™€×BŒlA± ¸›ã.½ ÌCŠpŠ\é!Ø$¹ +J¥n66b h«ñΆ‘Z4ƒâ€ÉgÒeÒûCÏÓô°Zûý¯¦|22–±&¼-´bÏÏ\‡¾Ú´vn_+Ç—Ãtm8£½«?G5ñ» 0SÏ´òVŠ.
+hê¼Ñ6œí‘Ý/MïýWPcƒ¾?!&ÍŠ±ˆØÕÂõ<Ü bGl®…y±fê”4;¡³` Mê¯R‡¯ã{ÙH0Ãõ?ðÜ|ש6k;€†>&™«“tøþ ™ú­“yÁíÁnz¯A±–%ù½¿õô &OÏñîÙÇ3õQ}W†|–%šU ·8”«O9RPd^Ú´FQ­Á6Fç5ï+Rb+aKïÎ0-^ #Å{=+FAÞ&öXhï„ÒKXc×äZT0…®4Ÿ¨ÈfãÊäW’Ùé˜A eÈa2:#†Î ‰o¾±öòD^O'=GËžö‡þSxAOœZ>ÈÇàÔÐLûVLxâWžº]åX•K4ÚEU“Gýœ×{’Â:pj•õÇçåwÖU®Öë Å&”MjÅ—{% (éTrð7„bнÍß&v!³Û—ù«+´7Y™–™jK1É’q“aÑöß ª“k‚$fØsúóV'¿¬Ùú ¹›¿/O_J€¶-Æ5qØÑħ ܪ¯<"±0°HÂ}2oPQÌ(Ö»8fœA ‡µxœˆ«ü"½Å0~HÃe2
+ç-xý––Óò)™­ó™Qqt}•+ ©pÏšK4l±"ÐË"ñO§Uà×qí˜ëýòˆš£^¨î>Àý|†ñ¼‰£žWÒ±áîbÎï}ø­:.U¨úò5Žý…«eW³<:ú#ÌšFMžýfÊi<Ê’Ápžb<XÚínÂÔêÐäѳøç†UÀœùMì¡Õ::,¢ˆ
+Wvb-§õ¥)Sè.î'±D})?èÉ<+W­8fûÚà{ž#EÖd/)YËLÛ°¡É¡¤ Ý_zWÜJ\çö ]4Ì"²§ÆE„¢F\FI&¼Z"¬ñKûZü|-Q9ê0´Ð3<õ÷’p|+_~y_ײUÎêËŠóe9Áo Í!È]ÛpÑ„¤Bà'9͵Næ¤s}¾
+`S›)¬Žc÷,l/¥Ž
+Ë NeðQEiå a;cïêij»75x$$6‰n"c6rålW
+Td­l(AuÕ°êÝ-õ´™•æI*³œœˆŸ?S’Ƹ£þÞÀr`‘0” gT…LKˆTm@ˆÓ¨ÆÔœk(n:..XñÜåÍû»>?ÞŸšü» œf~/¦ju¹ŸG»5©¼žôAÊðzgXÖEÞ8FÐÁÆFÒxP{`óg¾±óHLÊQfä”Öbë/a÷£µJm”Þ,1O;xN(ez|ÛWeèýD¢°À\¥R
+6¡™E. ûv`¶G_;6l}<çý-ïdùŽ‹ ‚…%ÛcEÉf®lh:Q4Ü<NÖâÓoùo6î{ËZ³/ ò©[)ýš‚kºl
+$ÚÄWV@‰±|!2&PCXw}ÓNêñåu’«_ÝëLB XuF¨jÀºI†ü‹ü,_JåÞ8‘È8|ïjR ß=áÙ•É
+#x„Œ Þ ð
+¸í0‰ÎbFßUôº¼çM{ÙD®–¨‰îRmú4˜¥ k p\ÿ;3sÖ4ÍÀ¥žJûnF8_e¸"~—ím±´YÕ4ëŽ"ôq,Zî
+ Ï÷Í<[ÌÛJ !ê=aa)¢‚GVü§.¬Òb\W+²ñ×åïy[êîÕ 2¾ÝÊIr߃q#6¡É飻6ôŽòĈ°ðoÔ¶zðJ;Žiü÷åéùþ9eÔ/· «Eo}Œp,:4öÞXX}Š¸N©ÖPbÉé‰ b׿Ë! Ž|v»ˆ·Ä6”U«R5:ÉéÙ”Èý#þ¤ÄñÏ~ùŠÏ–„|¤Îùð2{£ƒ:ãè ™)E¦Ù>¨$FonG¯Yv Ò*rq¦ÚR™£¼%l²ù?.þJÈ:æýP”é5“ÃoIôÆi^+äýY¢½ñýf íqÑITíèÄ~}?3y`]¿ ã©b~C1 ^H#¢ÇîŠ2.ͳ‡êA—+‹.Õ4ÇNiÐVàeLáxí\  .ñÌüibÿt Ž:×R„o|'×@§a#Q|²­ üƒ×n-q<aÌl;í[Ê¢b´(ø&‰[ïü…þuõS,o{Ú8DîS“ƒã8~¶_‘ú3˜¥8L2iu”5œ$i¤tã´±Ö a´¦gÎmJ ã|釜`›'Ýu¥R‰½¢Ä.ƨ¿¿¤z)´ð¥ê@¦Î¿ NÝ(ÇT” ¡@.
+­«Ê8yFœxk•YK1ƒÊ·”Ø
+~>«/­òM…3sº`Ò…µ¥Qo»bOŽ3P6rHå;Á5Jö•µø:w‡Úzú¥ lˆž!Å©õš<.vt>Q™‚ìê'~Ùei}Zý¢
+Kº5 3LÓ0Rú9ðËù%âëTÝÇl™ñ`µ"3æKǺ6•î™õAížî4ßçôÒeØoÞ.Ó~»Ì׶vȨmͦ‚^(é@è2û©Uq¹)h8JØ¢Y9%é/.á]xŸŒ%Z¹ø· Œ±ø‡tR¼žÏ6.NšO¦g& dþÃJ2ÍÊ(©" ·­(Ÿ '&Y'• Ï ¿Û,šmx÷`â”Õ,Yî¸4XÐÏâ¼Ð¨ªÄìöÎìèÀ¥î¯±˜×h3+a•F¬Ké/ T¹ê‹qË‘<Jú%VG4}‹ØÙû…gc5ÓñVÍÁ])‰“—Ýu<îæ:[—Ö½UB5"ÂUPäú k1ÍÓaƒÚœ0J5¾|gõai⃠ŒÙï¤aFitÏ ·¾"8sºŸ}@˜Gª=èzú`
+©Bº­@2R>Ö’ÞWÛ«*¸ñîW½Q' îSÒc•v…Ÿ;7}°0DΔ§ÌþÆ–ãW+CÑTeíçÙ6‡ª‰Ów5ý·¦h.²©E©û•Ä`È“rE†ñÂIJ’D\y]›‰Ùžñ­Œø66â[›Dï€ÚLT„A]³Å‘P B&½á*¤†}Æör‚›š°KT±k=00Wb j¸âî«dRqÂÅ•˜#É‘þù†›MXñzﴽ܅ÍÛGo $Zµ3{ÂB´äÊÃÚ(í¯Æ¹ïX88ükºµ/ü‘Ñ碼¨ÇÒÿØì¨qJÊÂé$¦w{ÑÛ°Ú™x·ímT¥L^¼¨—
++ÚM,]ôbÀ4’ÕÈHåû¨:õáT"ë朿û{VÎ •¯Æ*Cój&jãMüè1´°0ýœüÐJã’ÙÖy‘FÈÃzêYÚ¡ÖÙ®4ïE¢{Ù—=6ŒËW ŸG¡S´QÚžˆ+vDO÷½5ŠJçÌcw>c'ó©¼à‹Ê6SèdÝ…ËËn'EGR1¼µ1´¶hø—#é
+²iC‹ÉjYØ0Í9³:PÑ#ò£Ø—Ø4Æk"¥8:¸¡â ñh©\oÎÍUÅ4œ°éøç#iG„® ´Šõ¦üŽˆ…6Š1µ3ªÄu¸òÈ :‚ž@®êoI8~÷.ÈL&;TõØxÅö€§~²/ZW˜ØôõdN­A±¸’Ø-';šá”€¼©¨¸¹YÄ,¡òž)´¹ªÌ0`á[Gç®àΡ©#i±%V
+£wîÉРa6i'Ýf-ðò|Ÿøµlƒ÷K¸½‹Šèž¢Ï*lKì+²ðæ“ÎÀZV›Ðû~W?[ T¶I
+kŒ”<Õt\þO² ¢*Œ—*Þ@;,Ô„ž$Í*õ¡&
+ZJg¼Ëåwq"êÀ'}KšR‰”eà%¯HÂqó±l/±Ô§  ¨å‘ö!£´£cÒcký—mYrŸŠW¼P‚w³LÃONuÝ@¨€—(,Þ_û Ü5åÕie «ˆ#»YØ%š`gfú‹Ë*×­#Û¿νy&©™“\Ì{—hO&ñd0ûgA<q¾~’V¶dÂïþtueé\² ]ÂË+³™šJ6-‹,Ív±r'ù{ÜirÉ9u$ã#Ë¿U“@ÿ˜ÖþÎ{„Ѳð+° $ïékòE°-í WÄ@üÛºvð‚;õXÆ"½6„©B5Ô'3"ë=W^p2¨v]ÌÏýM©µY$æ`
+³‘ª?Jè..»Jžsõ
+õ%‘
+¿°¼ª‚=;X—þJý†cÁõŠyö»læ®dA|ð ±[·Ë…jeèë&‹‚Þ¯o#Òji+%½ÀÎjRP¶qÜÝ'ßjæÐgyÏ–dËdÏÞ0ri@]|±ÆÈRÑ $¬Oƒ¡fÊ9çóÉü‚TùŒÃhOd¾Ñ¢Õ®sùšnÅÊ­¸ùWÇÖ-Ã!J,™|0céâö– 0Ž¦…Q¸“ÄìEÞ3uàËJîrB l‰D?ÒÖß{à&—}ÊcVÆIŸN-ó
+ý16ΛG·€Rú*pÇnøæ}
+šæžu„Qy<[]y”~ÏT#
+&ü忘…™¢ôžߌ¶ñS½Éö_± êå@ ¨Œ,¬ÕB,@im·V7ŸnÝ\qDJn9ZD+OD|›EKÏ/)Ú¬pa*4õ—Þ
+[Êòg,°.0ÿšN0¯²¾qþ˜.³øâdâ‡x[H6O˜sŸˆIÄ/jŸ6jÓï1fÎpïóŠC7GL¯…B¥Zý–¯›Gш’®…¦"Ff”ÎõÉÚßP™eZ0†ƒ~h‚62°U)Ž¤þÈá&úVIp­+tâÂÝóså*³,ºIVËÁýJ¶„?»,wä-Œùµ,M#ÛÔTo¦çû²^
+­yTf s1h´u‡SƒòÕ03ü‚KCcV>QI6Œ¯ÚŸZ×¾Õ™7˜´AS
+7s]qïjñ«*Ò?ÞØVö¢RñJUŠæÕê´[+px¤›,+è#¨Å5B–?ÁZ½«²?‹I\Zb-ÕR ¨õÏ…U“yÃÁâÕUW‡‚8f.‹‹3Të×1¾îûò¨§8âÎ3PÅPjO¤Î^eæ$¾xR9Ñá±pëÂ]æ0ÊZ®‹VèšÃç³Y$¹¬Žg7<ŸkšÕš†¯Vj%öT ÂW|ßà¯/¹ÝÜš«,Ã+
+ªhS¸K7ñÍ¿´´žäëÉ°Š\ÆuûÛOîWSφÃ,“@oðõι|™4“'Q"¯PŒ§›ª·è[^ÜÅ àšØÐ_«¤ÉLþ$ÊPÏmÊ­"$“ÌçYÈ2é¬2Qý†sa ©šˆ—iÊÈìZHd 1 b,¦Db\ÜãKëÀ‡vî 7O;bTMá}*ݼilìS9": !
+a²›j£W¸JÞÐ’à¡\Ï)Q”¯Ý¯S²³Î£5QHR!hÿŠ£ÈrÁ4fúDþ0ÐÛ9ù>%2—€ˆ![×Ϧd,þH-Ò!H–äòX;tq><FÚï$O؇GOfuÚ18#šõò`Ðn®3dY©ÕS4²1qþ.{5Ia^Øpý|÷
+endstream
+endobj
+22 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-163 -250 1146 969]
+/FontName/DRBKQL+CMTI10
+/ItalicAngle -14.04
+/StemV 68
+/FontFile 21 0 R
+/Flags 68
+>>
+endobj
+21 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 728
+/Length2 4363
+/Length3 533
+/Length 4922
+>>
+stream
+xÚí–WTTÛ–†9€€$‘,(’E²äTPD¡ÈAÉeU ª$+YI’IU‚€D EΠdQ2HΩ9ž{ûŽ>·_zô[Þ{?¬ùÏÏõ­¹ÖÃâå24V…aÁ51h¼°¸ˆ¸<
+.9a4Ò
+}ŒÅÂÑøßârÉÿŒ—]‚Ã=áPJ#°ÀšÀWf1f»B>Àá‹!¾:8,ÕD¹rùG^øóóW^¬oŸ¿¤âÛכؿRÉëáΛ9R©aÞ«Z'Kzï+ùý‡³Â®ý°ÞO;fñçtI½¤[Q²az»ï™dWoh3\2øÑà³’›ƒ£Ð?86Ñ'¢yÝåQšOöQŸroö®Bó£7™=ì¹wÎúZw?ZÙ@g Q6ÝÆ\Ç¢´Ú]Ÿ…k^ý?­;—¿víæ4˜ñ?#Z•[ÜõŸ’w/Á¥‚TŸã¨fŠÏõç;×{JxâHÏ\ŮNjX*ò7hF<)D|ÍzQW%iYýí¬ƒ<ñ¦/ñ~è1Y:È\!˃”8Y£_í´4í Òh†¶m܈j.”]‚oH?³»§øp“ðÁµV;þ@[¸3 e@Iò©1í“Èq…ê÷ÞàG£Ý­;+B(¬}S
+ßòónR"erî'„¶¼ŸKÖüÀáž=küÝ:`M)© wëö[Ÿ€[ VÇ®°>0Elhebݾ2àƒ*ãèˆmRÿw)&ýÔ`Øvæ ë×ÛJöhØð]*‘àGœÄ–äõšÐ\%aX+¿Ó7:— S¶¥…ð¦:\òw X7_Æ$L©ŸjuÊÕ˜9*>
+Ü \/g¹YotåƒÀO†?É5
+öÏSuPÎB]]CèæÕó°æ‹S%ÿ€j©ÀêøX!__óùÇJÜS¢Öò™É‚Z”õSÉk§mz æÆd¥†Ÿ^ _Õw=uö":ò_!œu’.’-"ü“%&}R=%n ˜e¾y†{q$å7|ÎTÇZ¿ œò¾ób2IJº0 Åý~ñù
+ÕÑøz÷3½}>{?b$ ,7^NãÄÃX” ¼ýæu¦Ÿ…ww›•Ðˆ©r‡NIÍÇ®Yd©ê2H4(O™ý0íOhþŸß0 C"Ú×oÇØ©*ãŽÙ3k/]®1
+û¶P7þ ËxÊÒÐ4nâbU’„¯Vç@…%ÃC†„“Gæœ÷–gF`Ýý<'³÷"
+Xµ1ö·§RÎs¯¨*ßë=(é©á‘bvHYirËøà÷x·'ßš”Zd‘S—[ÓÇô•…•ÉãªÂ\Ö_oaY
+êv…SÉÿ1Æ®ÚÔJ/à}P0öú{h) dâÇÔöAðb“Q;è#?~‡ |öyeÐU³Ñ€­¼ò…«âµÊˆêËkTã•4N–ýòtƒ0¸u| Z» ëÎëöú„<alTH’0ŽìIýŽ/?Öî
+ ‡±Øt8¤Œœ˜Öo¾âwbâ#±‰åh¢ŽCç6ÚÛ§a9cðìFQ¯¤óÞÒmŽTšþ”e‡›ÐO™ï:ÏÕn+rrée姎E•ð¸ãò}¯™±±i QÄ«øÛ>dã¨7/âôç;xTv«2«R\{Þe«i*^ù¤‚~¿¹È²R®¡ü¬&4Z»&é+Cˆé™pópM˜‰±Ö=ê¤Hóp, ó5’èØiÊŽÞáâko¶L)z¢ß½A_˜Ë³np’xF['¼zÉz åïH}Jš¼x„š™i§®·Ê:à /_íÓ§Ìò¨‰s¡–“BÑÅÄ:ã’a†ÜA…™Fë¥ó½vGä@‹¨VmG1Z:4'cÝ 5)LRFFXpÑ<—¤ÀX3WÀ¶’Dj|©p‡>Ö2OäIJÉ9 "«è56™\Çd¾Øš!X¢<»ŠNÚÆÂÙXn]„i›é=½R[Ÿy~—þ“º»ߤ :“¹~ȵږë§,’ ÷wJ…yçO'ø½fnÓ ²5z®²™Ž¯•Ž=">S|9 tgVù–ÝMè‹gÉݔ§޷‰ªž ³|3¿ñ€Rÿ½ó=P\ÙlOÁãî/£T3‡úÞú¼§åeÉ~½“™k çÜ„ŠÄ£î£ð¬y•#ã±HJ¹ò25›·§_`±9 Už‚ÜOj6éë¦åþ¤% 9]â÷Uq¶…fIñÇØþðGþu<ƒu:c)ï2æšœ‰~iOYøvjkZ4FâztVû§§çã F’Úb8\ÍÔ{_)dÛ%0àŽ®~Û^¬râEÌZõøïÌßLj==úc^Š“X?.é~ÇÊÏ:-ËNTôüª·ˆC]MÑÔ{Û
+«>F±vö}Ž‰½2TѤQõ9}?lÓZ# XF±·Vžáœü¸›S¶ß&â&è=`ÊÏ™X¦ãèmYïVß’eRñ½9q?»‹C,k.1ßð8õºw‡o#{Ç¡_“©oØ€*‚NaÌù‰xbOB«¤Ë†›ŽÄñȈ€×¦IäÃWëŸÊ\ø¿ÇþR–u[½ºAWüÀ¿A+ü„“=ŒBƒË9´™ÇC‰¶h¢Þ7¾°ÐïÖ^X t“Ë€6~ÂM$›ÎuAb3}¹î':år§vú=´<Ù’fÊ·Ï¿™Žð(mõ¬kÒIk«[îð,¤tÑ×;c‹#„ÚÉXÓj³oPi~ ë¾
+¼Ñ»þp³ßç Ê{N¹ÙRÜ!bešÔîbá¨=Þ0)ßMc›æ0´N¯8‹ –~ˆ2Óe³-Ù±S5™ m/inŒä,º•×x{FgÔµ“¯‹ßŽÏ¨ÖƒÖë}å'K3”¬ÈßÚÌðIKµcTÏÁ1x|«ä w°$‹µÎ£_ãz?ÌQ^ÑiSê—
+ÞÆtZ1>ç%{–iÙR®úŒ
+3öKá‹¢l8ùÛå6¼·…Êù$“@(?%qîÔ*ê›mfg!¾aM—Ä´—”_îÞW tÄ€pýKÙÙ~I0~êA£ðKïAÝo=ŸªëmdéjF§M•i6f®D6oºêp‘–ç‹smͤ¤îûŒo”ý¼²à•“㹕Õ`î·oºg(YOÒ‰(bù¬Ÿ;õÂÙ*µâžm^ž’:ùð“ƒåC|ĽgG]‰¾µâ…X‘Y¥ÜË›áCîs¿
+f|-9G®¼I¸¸[UWÂ~e(XûÊÅ\n¯fì/àäìš…7Å
+*$ÃT”
+¼.ß_y:™)Ñl{§µžúÉÇîJ43Q¼ÅÝ1m¨¥2ýfy¢äaøÒJÔÅ›@€éî"µ`ðÖR":Œf†÷2@UOøáçý©tCRÁ½®- ŸÀá”ý^iMc,J-834!¢ÊS—ʺ*Eº d`˜/5À_TQ®°?zí¡;g§@ÞÝúàÞuõéj©ÕVaÅá·¶À½ó2üÀQŽí-ªMN#Çý
+¥Œ(·×<¯;[D¬j_§ÒëÐu2< ¹S>òÝãcN²ÌZ£ùM?að¨°ôÑ„çg œ<™s&`ýîœøçk{‡³ã«‚nkoß.¢ºgpRÏ1<Á
+áÂ}‹$­‡ÇŸüY°{r1Q6Ýf"lÝD“'¶²® ÒØ«ûÚïï=Ÿd±§Ñ<Fz»Ñ£
+\¹.¸ Ìçy±Ù(ã6Ý׶c‰~Mòˆ§l^õµìAÁ=uML£õµ&vjN+ZdõŸ ¯•ÇËô‚CÒúGÅþ—åÿø?Q
+‚u¡¤üË’ã
+endstream
+endobj
+25 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-4 -235 731 800]
+/FontName/RSFQCZ+CMTT10
+/ItalicAngle 0
+/StemV 69
+/FontFile 24 0 R
+/Flags 4
+>>
+endobj
+24 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 1489
+/Length2 8357
+/Length3 533
+/Length 9258
+>>
+stream
+xÚí–eX”m×ïi¥Kº†nº;”T¤a‡é’é–îé–î‘î’ØsßÏûÜú>ïþ²ým{f>Ìï®k­ÿ¹Î8.FÚWZœ2  °¢Ô™“‡‹G §¦­Íðp²ŒŒr0°¹3Ä*oî ðˆˆðda
+P3w¶ÛÓXšÛ´,!`g.
+qa`ðð
+ÿ›y~3¼?0ˆ;Ào0<þý÷?ãÿ¨¦
+u¥‹bw#”©H'cÜ‘‡úø™`E¾¸¢ÎäZì0ŒWßœªÞ93¬áY~h(ùÙc‘ú@Aõ°DtR^üý;}æ0˜€®ÓrÅrü/ïª Ð楲¸÷&#]y“>Q*ÝOù(ÔÙMòOÖFz-u‘sïQ| ËåÕã‹v8q 3äÊú»÷z¡À›r:fùëS6nÈÇÜî—a–a¥AŽ-~æDW®°úå”Õ`Ÿ2ø=·®ŸRãÊ9òd•é6«´>柟»Šj`4W‹³¸ù_L²õyæ•ÓH¡¦¬x™HļàÙ t((Þ
+$e€»]lÞÿdnòÑ"Å€ªŠ î#çõË»ÈïL@š"®aãPÒt¹‚OXB!ŒÞßßÔ?ÅLûÈÛÄë¢T˜K‰3ú‚©Ì'©Pìÿt;¸ÖU«(‚ZÑvßj¨¬MÓPß™úîÂv¾÷æý€1Ï-ñ”JÎ)÷Âû*pÐK$sJ'å¥a€P»3Í·‚Ý–eB,Çn!ØO·ù–• sª¦ÄáÇgsì•Æ'Ý/0k²N~œ»TÔ~_åö7Py÷“2·"„|í-ïÃYêwªçd6úµã¾¹„á¼&O$îÊäN(«þT›;’^:Ëi™b³ß7h“/g4Ï]å—~c¥Ê‘”šI*Ž¯TÏ¢¼¨vŒ?ðõK +7ÎÒÇ•sñl)¹éÕc·Ïû|³ߎPÀu&W­]?®Üy¯ãRxå¹ò^Ž#+©Y¾Ê Q‘õŒe*êzƒL†þ udÙˆ%u¯e—b<™v€ü,ª…¡Yô¶2aðc7ÿ¾”¬Ÿãàèká®™ÖøyòÚÅÓèVÙ¯[-]ºïl‡Óêöª0-Õ<‹ØGSî@AŠ‘¦)ÉRV¼aõ+J É+z„t0¼ë8Çá‹Áë̾Z›£Ýjv*‘3?¾£²¡ta”FøWddòÄqóS A“ÙNtxo‹À7‰Ø°¸åo‘RW!¹SŽ6¯†z´¥—'¹0óõ«ÛÏÇDoôÑÒo<êö?3õ~¶…âvðIxI+Î
+*Ræœ8‚"…Š´nÊg™ HÌZÝ1mqà ݤ=<j™PmfU?ÅÂÞaŸƒmÆvƒ,)mT'É @‘ÙP-Nö~?RÙMI˜¶µa¨€^+ž»-7k¢Þgd+,ÿõõNÞ­J¨5ÛŒ©Þ\`ŸýÚ5qË9#Bïל`áwóìsÁ &¤r«¼³°œjŽÎDѾ}jÔ2„,‚üÒ´zq›c+ÒƒÛЇ^ñýdñ OEG¾ eò u¼¬¬åV'w¦„ M®¼’9u‘ûkÀ]ß#›ûÇ M Ý4‡þp#µÌìz^9ð–ô[’bY½™ªG*qQ¢Ç¯¡l<ygÌ–~â]½Úš˜o8V ]ñ¨,¨i²OÉ7ä²hMÝö8ÞŒûr+:gán²õÒl‘Ú‰“éÖ <Rͪä=ÓR[qêè£Ô¾›½í®½Áû¥³Ê&”ßú izw¾ÆŒjjïÑRÍ1%CSÙjµ[|„-ƒ´f ¥ãì*{{Åy÷ÒeÛBÀ 3sðW"$~ê!I¿$­·yĩ„b„¿Œ¨Ö°ä¾sz‹%rò“DZ»`Û}åqºkJä ²Æèì¯Û1úN{7ÊZÓ’5ä‚Q™ë}»ýuÜEìÞ),¶+«s-0d.ÿö:ó §ìÎþû ƒÛPº.:¬úq•¾•:ubi–ãH%ß$BY²×ÎÄ·6Â1w±5B˜;‚ÝfÝƹúmµ sº$¬ƒ/ÙÌçº[rÉwŠ‡ùƒ¡ËcJCÃuuÆŽ×PÂSòóäZ–¯®à˜‰QïZÍå%²ÿ»t…¥™eƒZÛÝ oš¶GôNÄATë×Ä×ñe38g™š:á×j[õq!HØ×Ͼ¹>¿—!p6˜ÕKª„öNð–â’R¬ã[¨'^£ÛaÐmW?uIG("ÝÔ3Š @–”®³}IäÂù:¼ƒ,Ðe)ƒü'zξàKµ®2½Ó­ ·Q´¬w$Û‰j W< "»ç(8]êa×¢²ó«[R ïÂk‘}~2!’±tÖæÖåú¼f«ˆ£‹Þ€¡2°´ ×Úh*¶KfÞWeß+!íÈZØqÔîعW—½IâÄ)~F‰.pæ6“X²ñÃjhׯgÓC¡ù#ªîDœÂ<è»…j4NL7†|å)ü„òÖ‹cXvP5ª|'põ,9Ô£¨)¦ùÕá !÷
+NúkÑôH£3æplêChµ™pQDé2V÷ ×m&;@ûD¢dœU"Â`|}5 ¹—ùªÙlWåê½J‘Ž’˜ô-˶¤b:º]½VEÑ#]»éØöÓ¥ ò„âQòM/.Éqƒo§>,ö($;3)”¼½l y*“ú’<Ú¬V,Ï5 Å³F1xù™^XÁúöê™Ä"µ§ +&K'¯yu©ÿ°p¨c¹ ƒÅú RJÖ}5Ý…€ù*ܺÓdËÈ[)_Ò-ÓZéu±³
+±ê
+3¾;Ä’õd–Ñ·êàkÎÍ24pøÙ„5©%™¸X¤é«;÷XÙ{rršµÊ}mÔOî°ç»™Á‚ûÞèö¼öÍ‘GŸg;ÚǾ= )
+ý ë â,…#÷\²-?ˆv£þw#a„3,OÿÓêàžjž7W"®x*‘y]U;¥¹
+ùyÊHÛP°S½‘Øâ‘Ò¢YIëgŸñ\6¢?G¿!È>å4¦}ÙŽ®­h…uE‰É‹¾§± <Ok@%³úXô¼[ .¶×Cï3%òöÿ„'²PáÆ,¦=M宽@â(g-ȵ9>‹žH•>Øò%U#9OùaRgÜÓÔé£ó\I‰òÉ3 ‹5/Ø<çì •æ‚Ö©¨™ÜÇüb ™W\Ó 5,èÛQÜtönÚ{q²ÃfOóB†+þ;–ñV:Ù¡ÎY³Ï¥5Ô8ŸÃäQË¿x_H؊ɯ§ólTšâ¨^R˜årkžÛÇ<…Ö)·‚&É®ž_qî">Bã’
+ì¾=èxTìQÓOE+ qá]Ã}‘›/YoäˆÂSÿE€Š­Ð5±š1æ”—RÝ8:lŽ” ö¤aì>øD‰,>¡öbÿçCZK²ãwyv–È”
+gþÊ”mYÝt©âï«Ú@Ÿù:#±”p)Å Ì>C•ÒI”X“Ì×~‘bdÒ:†d蓮±[Ò-f9b¥´³×O3嬺'¾/<c¬ïõûx”×{8*ásBì+AÊÒzå­si&‘pI”ˆÉ»zŠZ”ó\õÖ MAGLk9Yû‡—¸Q+€@IáïþPç7¡!="J¼8Z¢æ5™‰– ¸¿ïŠrs8ëØ}À ýÃ䇔“‘ŸŽÙÖqÕ&^ch}àu‘jRž±¹€èr£Jê›+Xè}½#Æ>¬¬’d9¦só…vŠ# °à0†ƒL¦y屋VƒÃ?”ñÜÃoT›¤¶‰è–‹3n~(œt|B,xß‹§öWÚ†ã …Šæ$趹´¤áâà[¥“²™\i„9z±S¤ #yÿ²4Pe¢Ö(?TxÀ—†tå˜x$àü\¢Ùž•¾Ë™¥,Çô
+굺Ä*GDöR•ªi™å¼2ðŠNœ7iY’˜ÎWÙük©“kWÒø©Œw^⥈ý/«ð'PÛ’i¬»€M’JõÊáš©©â°-±=Ž“Ⱦ OÂiõÄ,´ë¾¹¤®i7´s3,¤øO@ÃÊÌïnX:Hj…uNÅ6ÝåóÄXkÈš,Ÿ|÷ö[;“»GBþ¦W;U{Ž}ý¯¢,ZI±Å®üV:'¸•²}Ø9¢^,¯Kôùi¼ÓCÍFÁÇŠê²ä@žÝàt7«‘È*gýqTt&q£y”QîòkJßqzl}\VÌÁÔ.(¯Óþ°IhgË7w$®ÃWú¬ñ-Åø~TÐ\Ùók/I¡à8ðKÀ šìòK  YQ‹ªî›¡håKÖÏ߸ûF5FÈx7炘"½UŽE9eÄjX蘪u|>òW p€Q夡‰=^–~;¸AÙÿn§´ê&;ÊÈw}ÇËg峬|Q¨Õ. CN΀‹¯ªXF´æ-«¼Ö µ˜ð†/R1©¡y¬5:ïnƒÖÓÖ…
+Ø„>4ˆ‡|ìðñ8:ý>•ÅÄKVN„.fA¢g2ßúuyÚ™­N7ö“ò˜ ¢/viÆ»ýá¨Ìllå¡ŸêßõS·þ¤
+j5â< Q¬:v@t®žÖÃß×*È|Ò}ø>!øËÍË;ð±—´L”<ÉAÃuãqiÚk¥,¢'‘Ô™g×LÞhbû^؜ɞD•Õ½ÒcÛ~Æy‡‚jîãŸ2—É¢[rx|5 “:¢)—j*Ì{q÷ß7<ã/ê±)óË?› XOÛ¤ãU0ò¦8xÒ²Râd|®³w2Ncd´ou¯áª•YhTF¬°¯Æ¤O~›GŸì7ºÄ§ª*^3âð´£Ôï6WW Óö—±Gú·Oé²®Ómå~dFÂä÷ÖÚF@_)ÉQ„†”û«F %.Á±bãÀ?~nòb„ó8Ø@yˆÈz]g Üæ6ìOý£nãyÇPõ⾶`GL=ѳü¤¸Þ6M¢:Í’.|év›ËkûøÑ•²6Ý®2ªa¾6;‘¯¸¤¾ïèNX{¯[¬ž¢&¶©~æFxñ3Õ|í ß¾³©€¤øœÌˆ-ç°‘„ÞéÐG ’¨”,·”¡¶¼Vë(  ^÷kѽ§Eƒå¼nE~6ÚÚ$Ôx–ÚÂÒùF×oÆSí5Ö:•Œé!¸X{wM{7±\‹Þ™°
+¹e6Æ#­]ü\)û;yµ‡éMs®
+ø­tugÃ7ôç˜S /=~ͦòŠJöYc
+2›¹ÒCêz6ƒ•¯‰vª»ì‹×ñB«œÉNS¥ÊÞn×(?–ËèIzÝ+ Ø”H91ÑŽ¯ãY7y;%Dê÷X1ìÖ«oÕH°W£>î-9§ûÔ
+™ðør6»!ëÏn±Ôõ5'£Ëì"i.b±j”º9Ô
+íG6÷/A1DîÕÆ€9¿ÞÃhûž<
+¦©»œ6âx¦QÔ8âm†{1Ù»ÓÜŸ÷Þ)›¦l Z¼­¦TÁd(sï%"¿Ï jQg@xœçìh®@áÖp@¼/]]ó[MW#žïÃpMWYË>XYYª†j¹…g ªú™1!:Ä
+;ÿÞ˜F׳ý¹«ºGöí±Yo¡VvŒ •bTk…S­Ÿ±ˆk_œüEí¼±WAëqîR~²ôõÚzn€•h·àŠ_H`äÒÐGA¼'øW‰¨Çsò¬¥ºíijW^1\ér»‹Ï+ªßן÷/80àâ®»wT\r„é¤@5ÞùQP_RG¹¯Æ ÉàOœðŽG–…„¡É9¾žbý ÿéC‚æ<9#ý˜…A¸`{TÈ0¾cÎ×ß•ˆc«!§¸ BSKKÙTÔ}úÕð˜k©=à¡¥¡ò’V‹@,ˆ<ÝÒgtn„èxM5ö*Å27³»°}ÅwZ¡-¾ó™„nD­ñà$¬DwÕ…þ±Pa·Å•!ﶼOž › y‰ø–õÒx‰äŽ³¢2Rh¦}|ˆÛ‘ÞÄ:¶JôsIÛ¬Ž²˜¤Û¢ÿüÄÀD)<`=eE7”¹ÉÊ{U‡ÝÁ\‹Fe0PR¦ËB³ú!Ô2bćëZ€]d"Å„æ„].âšUƒ¯ÿàRNn\èzj½@S$2Àdp*™¬£³ÏV2.Ìê4èµ4ÿ$fÒ^ ©kr‹¦í*44#²"\Cþ%Ì«à_}²ž-õ&>†ñÛBß/‚FÑŠ¡8¾Xòþ<è…A AÞ"XÇÄÅ“ý%ÛëU6Ã-ä·h^^
+y÷Ú
+PÚT6>Ìcɵ†gK颵¨Y>@e÷w¼ÓâÄlª43®t&9(;ýÇi†g+œÊÀáÇç¡ÞÄ_^œéõ]ˆÅŽá”>i™‚£@V‘ë %ï›?}ß™+!+®ê¶«™l}5ñþC+}A‰ ?Líὶ‡Ù Î,s(Ÿ+P_+m
+L¦Ë2ú%dd`‚ø‚AËœ_¤)RÝ#ß™)>‡Òÿ|ÀˆÒ•q#£È¢ÎÍlFO[þ:|µì‘fÕ,¤Š›éŸ!3®Hlàœ5/ÕêÆ?CÐ@mê?ûËȉ^% 1DhUøÜÍqŒ“†ÆË3é'ñ6*±…(áèZYIý§Ë+&³#G_ÁNìÍ­Ôí7VZ銳ö£ŽAcVóï4£"¸ˆÔ¢Þ{ê}óÚ<Š+YêÛíÂÊ
+Iµ(Žâ­ÚPw&»6ˆ>,î0?
+†—rô‚ŠOÕÙJØß c©ÐÞŠÖ;ƺ¿Š¨£ó\ÑãfËzOÓHä«ž‰-J¸·v¯£p®;ÿP©©õuµJGŒÝœì©œà«P¿ó鉬 ¦CÝÉ3—ü`λW\Y¢Š„¸jMºò¡g­%ÈJMÝ1NÇqa¸Ì×ZƒA[\e}Ë#k·®ên>Ìy­ûI¯©Ÿ"–?£ít ã¬a™ºë>’že4í, ÌIMh÷.{>C«&Ÿé#ý‰y$¢ñâ×ÂãËú@Ø•6Ä$#±D
+dZMø¸Ô^ùè½îÓ:{濽(‰¦¹ÑS‘øˆÑRè­ViãïQx©)5§5*•>V!AQB½%_ÛpïDôKóìèy½±*Wx¾” ÓÛîW¨?ž2ð3>z‰ÁHÀ»nˆcŒËEdê5m7·O2åjXþ«_:ogOÆÝ:£ÅÆSì3¿iêÕظ·²Ÿ½uÑ¢²è8éÔù~O0™¯1¿_Z»µx\?²OHÝlXhEÕ¹hx¨¶nÑà‰ÞB:3HZ(}}]ì,JäMÎ*¥RÕ7c^Z¤bqÖSf(œmúTdðfîùw„x°†E
+endstream
+endobj
+28 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-53 -251 1139 750]
+/FontName/HOMTTF+CMBX12
+/ItalicAngle 0
+/StemV 109
+/FontFile 27 0 R
+/Flags 4
+>>
+endobj
+27 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 716
+/Length2 7003
+/Length3 533
+/Length 7558
+>>
+stream
+xÚí–eT\Ý–®I$P¸ P$¸KBƒ;îN
++œàÁà!ÜÝC°Âƒ»wï|ßéÓ=úœþsÇýwÇÝûÏžs¾ûÏšk= XEÔÜÞ"eocá`åàŠ+Šisp9XÙÑihÄ &0¨½„ Âä
+ŠÚØ
+q†8¹BÌYÑÑ98€æP3Ðb µCgû JÖÎÂÈû´¹‹Ã?K®'ç?\@ú?œ À?”æöv6@sˆ:›’ýŸn?,ÿÇXÿ Õ¿šK¹ØØ(™Øþeÿ÷ þ­nb µñøO…½­ƒ âT´7‡8Ùý«T ò81{›k# 3±š‰ÚYÚ@€ìÿHA¥ îs0ff´0±q†ü‡Ø™ÿ+Ÿ±ý À&£¬¨®.ÅôŸ[ú*ØjS÷pø/ß¿äÇÿÿÔ¨ÇÎÊÎÎñGøçþç“Á¿t“´3³7‡ÚYÕ`&væ&Næÿ•øw*11{wOn. '7ƒƒ äåf÷þŸB ;¨£ DVÈÍÎÎÎËú;kæâ䱃ýýüYñ?c èŸù@ î3ô´tBè3#fr¦ ãóŽ©·ZMÃÓ`ôÖ‚ƒîËl¢Ñc€
+ëÌÇ kðù,æí>8"ùšžR$´ÒGQ ¦ãÒ°ÛÃôÛ£ÅϽµ þ²Èm~­îs¶öCHD£‘^5S6·§!
+öâ©y6Ì¡í¤—Š¤înªß§í—ù7]¦¶³Õá›ÍHüfS’nòqLF—¨v#âæºøÄœøÞ¶\AgX4|'jd¬·cpíåú”Òv[dž•ãƒû´©Ú• ª¸ÉÕx÷#“Á¾‚Ñ­/
+—ÝÜ É¿…7Í—ßf5«;_ì U=SÛ-ZK-ÞËMƒ"êÞVÞk3àɸ$½ü… þ‰ª‚‡æ°Ø?’¸,»éuÕNMÿ|LilBhŒ 2퀒5x£aaÏ•B2 ZÀp ÀnùQø¦‘cC‹+HуÁrƒlö¹€o„PjÈÔ¦‚Z;S3g^‚¹s W«{ˆÐõFÿ–ÕÓÍ×æÈ|‚h˜|
+õôÏ
+ -^›-shbx´Cç‹»M4òc`i²¥aôÙ[»0žOU[4Ð&&!Ìi–cH@€›&y¼ê–µ·]Y” Î!¦ð “- ·èÏà…%´=ù’Iˆâ¶äß3Ý9yÜ2ðݦ­-¹²'ü•V^ˆ;ú³Þe…<“¤¯ÏNÛ8¦¤ \Šc±±˜¹|JÊãªÙ¦“4èá³]@Âø'rÈçC7 ÷俧(ôDÊ(„Á±2 ¥Í©ñ:‘O;E‰|\Gk²ŒìÊœk­_\¢[‹q\‰¯ƒO@(‡# ëÙ´¾¨ENŽ ຟâÀíª…"ß²eW_êä¾WC÷Q;¯tÈJ
+Etä‡Ú˶=ô¯H±Å‘,q±2JÄ:+÷Vû­¾;QîS©á<dLR±kË3tFYÂOƒmï±~gäÏ.FQ¨tì©P)apŸk3a }ûÔ[0xùöÁ^Ÿ|ápÁ§*¸Ö¸­åi¬Ds}.×ßGù~§/hhš;¥<ðn0Ššc]"­¹!­8@…·Œ‚® x±ü¾^wg–?~ €”B }tª©?²×-
+Ú/Ú[­2Ë٠׊(• ^th\¤Æ¸º U™¶<<}±m8N9ìkëÃ$Ðáá>>aVÝÔãû_Â< VáÃìB@•GnŒ•<žØ
+©öå¦?§6¦Ä™$
+wÇë–Ðî©d~'~§qçw~á)ò¦ßUÒ›ŸC¤YѯkŒ?¡)NKìRlÿ®`ÃÆcBp»T?R™Y›ÔAwÃ)ª?UÍ9ÂÉÔ Ò$.y•1‰b§Á+šB) ¢O¯ÆòùVlãDoÅðœÞ‚M877©8ßI©ÇC·YØLdÖu
+?
+¨úÕL8~½ŠïXí]ÀEOeÑrÂ*Jú^ª\Ú~ÈÄSc´àP4õ5·ÂâÐGÇõïrOaëŸIù^kUŸP|3¡û΃‰±þ>ê§ÿ3¢™†»)žÛd¦¾Ø{ë`uXV²ÒûØIiÁª‘Žºßôë÷}ìB™dq¶f¹,™Øbgo͉bc‚MçäAŽ&ÚIëÉð»ÃwÇ(°S½GA;غ Z %¸@;¥—Ïs½¸xÕÓ/îq«s»›Tâ'¢'ê¨9~-ZUAý?U¾¾¤(ëOàçöei!×â)kLKÄ|Jfë$KÀJ¨G9…&¼ëÏ]iVÀ(h½7ÎV{miæº>ù\.HÄËò™"
+î7ýüi{ƒW(¥XGf~Ì¢L™h3®Ü_i‡¡ ËbJ>NGÍ›Éܺ‹V¯#º|Ϫ’ä¿ÖôZ<! ú| t…ÛPðˆ,ðõ ë£?†ÒÔË9©Ï/™Ê˜§¿ O=¼SÒßp)l-Ǥ:*¦ÒöݽÃöb.UñÍä­\E0ÛËfá\5iÞZ¦œâͽý^b}5ÖIØ5Š¡w GGÄÏæ/›¼rLKPû´‰™þ¹QÉ¿`âGl…זщEÄÌ·
+W)ÿ¶Ÿ‘`e?ÄaucËãÉÂèæ¹Á#™Ä}’›Vy#Mæ"Äüé¦ Ì7yQw‰Ðé}¤ÈPÖm|Z¨¾Ê¯ùÎWÿ2“¥&Zb»ÛtGs8Üýî|Á§p¶i|gø&[ÀÊó&²ÿsF³nuûWõÃ9Ø,%ÇFrø­WŒß~ÄC¡h½A
+†#›·rdþ^.üy¬\fÖ û¢ÁÌdŒVJ¯ /­&.|ÑuâÃ%V~ wB³} ­á¾ï=7}WÓ½¢·?Hùüý·Æ¤¨·kI}C曽ŽmoODô5ÃS*ê‘vISÅé^K˜V¶„÷NŽ–㔞>ì;PøÔò*ÄS YM¥ 8 •¹<ÔŸ ‚‹ý¶[¸²Vôñ] í9=¼~p#`—×Cmh­Oƒ&zo¢‚O1<]pÀѽç”ÖÃ÷üxêÇOŠeaÓ`À’ BP˜û`FòƞπÎà@,éóXIíjIJVšx»k§J"‰)§Lkõjø¯Ž€sví‘Pi$ØÓ½wJ÷ZÞpC¾­ïæ OÜþP¶l«m·áÉ%^ìn6‡i™*÷4%oõRì:4®ôÒݱ?‡iXàˆk™[³‹QùÚš£Åm]Œ@ÁžizÖP| B©ÏÉ•u,XÂU$¡:ì}RŽ”¯†X_(M,!V‚•óKXî’Sƒ9DBòC9“¨uâ‰>9=Ƌןbµt·YÖ'ëmbu®Á9[»©7Ï»•Ž‡Ðy%L›nÓæ¦c.þ
+¢xOõÜ~•bœÓœálº^ÆvàÄ"ß Ùƒyà÷+Îì¢)‡ÄüìÚ"É–[yúðˆkÿ·Q½¦z Ðö6˜ïÕ_ Cr=úñÉibänªÂçùþ¹€¬æá RÅËW®qŸ<Óú¨{‹ÌÑËÜä=€E‡ïˆ¹ÝjÇÒÈLw” ‚æν›oç`㶌©ÅRä€=¤äZ×ÛÃan[Òw7z°5 3c!7DU}DFúåDSo@cæåq¦1r>T¶æ
+—kÖ0éÛ¾¡Xª®€áÆ5Ösÿ:º0‡•c7šHj4 ‡ ð+ÞÒö±n…ý*aLó‡«všZÝmrçp)_ŒÊg†V9ÛRèCɯaú¤7î–ÉFÔ¼ß^DWcR Q.výæY÷—
+½à•#jqŽ§ ^éŒU™’£I>Æ‚Ð3Š7œRº“íÅß·°š´–Ž" 5¯µqá_X›&ЇŠŽÙ[‹a)ª§—O7¯
+ëžîaù2 .­Y’ÎëmæÕêxõHÁÈcwòRE‹E zED¢,S"Ë‚ œ˜E‹Aücåep |¤tü„ºcrést¥¤Š®Ó&ÃE‰åÎÔ…>q`)ËŽfëØHDÈg¬ÑìÏ(vùûRŒp×ûÃÃ#bïë$}·8!Ì“×Îð]Yý¼¡î æÌèñ”ÅKÃÞ:CÆd{±›IEØþÕl$Õ¹Rõoîò³ÍJ £`ÝÁ'T"¥(ú0_>çä(Ø+).4»JÇzšÍ¬ü•7š f$¢“«éœu)„n5ðÑ”½M·:ªÕ¦iÂ4’i{
+³çÙ‹t1…¡‡£.òy‰•ê}â7Õb±‘ˆ÷S­ß˜T5Õ¨n˜}ò÷ýzêÑœ²JÜÒ`¡'ÁÛ?g±æq9Ç+ƒ_Hoö#šb›I"0‡ã¯v—ÊÅ$ºQ‘–¶{‰šŠâ[ôEìùxÿKåñL¿`²ûï,ý‘çÍrGüCN%ÒS…s×*ÛÒNp–jvÛF;édçfVÊŠ®NqW«@5ëñdzG ´kû¤]L¨¼ý߃ý:Œ
+~ó*,æruéA›3QõU=d×ÈdÀµc«Æa•¯µªé]ƒeá87íñ¨]- ¤¤À{~Žnî8/í$)¨ø[ò7;iGb¶‘£Ÿ½€¸še¤š­D’ã?BüTm³l¼ñRzËÊ•'¯«;Ë`Ÿïs Й=P{ÛMfŠ?ˆT>øË:U¬<ú¥QŠ]¬:¨$øbÂ+÷Qù¾LÑ–× øQ6UÞ²
+L„ô‡lœ‡³tw¥0¶iNwqÆ¡—4£ ÑG…3<~C¯ÍzÀH™FÃF™øZi0í
+´ã¢|•'®˜e“»÷%WGT™éË®Nc¨ÄFfï\Òì~åiOmÓ×»¿ù¾|õÍÆoØdß:he!&àÊM}÷·)ð;cßË,Õ†‚<ª‘î_ïlD¹|ó¶Ñn:Oóâ‚û érMï'†®tÀmVWJm]î
+J,HË™UÿPú²)Ù;Œas£æÛÎ/êb–Š7Z5Áb©3®kTö³h"šiHùÔIÚ”Ô·¬CeJõ8LÊ®MþágNV jOêÑÒõþZ’m꽇_©ßæû–Ŷéè—° G¤+œV…·­¡·\yKè½ÜòÂ;IÍQÊœ;šÃnÜ*ðX³/Ï0jtÅÊyU‰-=5Ã:ÕD {-¨a–h-¼Æ;—k÷‡;Æ©“Wå?sƒéMëÒ
+~nî/,$Í}®1!(¼ØCƨG49EƬȪ=_Å·8AÈza¢í^WæR¢Ü=oiPeóE%Ú?ï>•µµ»FQ´jïäƒ~n‰Š‰G¼sx*‘JeoŒó¼Mâ³9ÿ(žçFu¦ÿe£„<³ÔV6MVyOU89w‡acK峆/SSx¸ ^/tk¬Å©¯»Õ›•të6‰@"^ó@{|Þ-¦—‹QÆã}B2yŽWRY]p±nºFKÑ£~*@Ï Òš½Œµj”rî)#¥VÞ¬è;aÄ¢@ðÍZ©poór*;8 g{ÈjKŠÀV!—c±%Ù¸Þk>©ŒÓfÄ­².BT{hhæÞîƘÛ¿'ã%:Ç¥ø:¡‡ã¸V*“]JgÌ
+WþX%-TkA¹Ÿ܉^aâ‚É]Ñ&ŸnDNb7ëmË]Oš5>]Y.o6„o'@t™ [tfŠZ†©u~*é?ì°‰F?{ÝNIÇèÔ½~1IKUä÷’roÃn~ÇmF‡Øáñ=ÀŒ`MÓu”½g±®®ï°,ÎiñIÍ
+þºÑ¢Êј-
+ Çniz4ºj¨ÝðO‘‹xH„
+eC=)†ƒ&]ëë
+À\vÅHâ\Iæ‹šÁ£øû=ã«6ðIû-ÙÔŒÙÓ€UÁ{MŽ‡¦Rš'o‚FLª_eæùµŸæ°
+ ­°E™uý”e2…ÿCk¸é}+yšu^ Ûé Ïʺ<¡u€áª6k9Œ-{!‹®"Ž´(û‹£Æ⬫q<#Aÿ"çÅ·ã…Ï<ñ»©{]
+ÎÑÌ@Ë¡8å«‹µ±îDÁÎ „S\†¿
+endstream
+endobj
+31 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-27 -250 1122 750]
+/FontName/UXMMGW+CMR7
+/ItalicAngle 0
+/StemV 79
+/FontFile 30 0 R
+/Flags 4
+>>
+endobj
+30 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 712
+/Length2 3195
+/Length3 533
+/Length 3740
+>>
+stream
+xÚí’i<”oßÆm‘±D4–”ËÙGY“}mŒ ÂdÆÍÂˈ„²“±e)Tv¦¨ÈR„l
+!K4‘D–?·êùßÏçé~ÞÜŸûÝóy®ëÍõûÇuœßówžRbÖv
+úHÂE” OR€(B´
+Fy‚rr`ÝåÉ}÷Xk?ÿ´gØô¬˜ž©º^
+ìLrËºÛ 2Y¸ü=XÖ««Ñeú»VE¼B?ß#g&¥æ/¨ø'î.T¹ÕP·‡ÆW‘$ߦ¯/ń궇:®4"Ëåšh#Ô7f´<‡Œƒ ©r·Ý׫Yñ¯ ‘Î|‚äj¾0\ä©è]‡oz
+áƒͼázÄ<¼øZ÷ÁvkקדÈÖißë  oy–ÒpZ:ç£mÌâÔ´à'ŠÙªabm󡋇×Bٙ„+ÒŽ$N¦œÔû$2ð•,NuŠŽ31
+ò÷ç¨ÉÞœg±›ªOp{øŒ´%3exhNrínì·¸+|ÕÆ3PËéïwܲpªæHžv¿ þþ›Úƒ ³aåÌâ³9Ûµéâ}¿Ç…÷–¾yÄyYĉÞÛ*>KÀ;Ju?Ž|Šc/tB\èBÊò>Ï6Iq;—1É–[+$Þú|ÆãaL‘Ó_âŸãÝË<g¡n×`PWJ{êí¹j¸·²}'Å[-ØUÖÝút „Z2ßU(ô,>hå\¨Ò(ª´¦IºpLe ÓÔæí8Ûúê8ÛœÈÜ’ñݲ_±ÖQ )Õî6°¯ÖVqÊ
+¦2ç5 •$³ÇdÝwšÌ€<ÃHÚ÷#&5ÙÎ]’«½×e›ýê&ݵ±{3³ p½Ê+¶•ò¾º™&¾;¬«šM£T¾ˆZA¯ê\˜Ø,Å–Yï&},žHk­Tz_€°¦Mø9¹cº$¤J¸$ÌÁ²3åiü–_Ž{9Žã±ük÷zÝüE›.©
+z°ïIøì4y
+, V&þð• G†¡†Ö5®åÁ¤Œ{2Ü>­§?&XÙöƒYÀçÀo‚T¯Ãc› NI*RšnTÁZ±Û˜²ã6.Úªä•S³«lYoW£ÎÖÍ|Fh’vJIÎÛ½£šöÐú1ëcѼ3¾Éߊq¬Û­!æ/ü .µZFfÇ7ïeK1ÑŽLGj-Îsk®p<ÈOôH/œi‹f–eÀ ÛõÔ„°Ž|VÒ» M@ ÚØf˜ö=YEÌÜBvä¼Í¾÷ê[_´c;á ½ìy°ï«†•¯‘‰i©)à‰âíMõ–÷¹¥Wh£h?WJûPœ¯Íæì€æw·wgñÒÜ ‘„KçVuÅÕoãK¥‡5=~à£Ü–ruZdo®'™Yùî> BÊîP gÝGÈ9m`nÖ:Õäà– gŸ«:Ë•Á%B:,Jr™“aEáNÔbÎRÕæ€RÛ]|ž"(Å)ð2u`fpÖPþö°üÙkJtH®š®¬£–C†i¥í‹øûÒBÛá ‘‹lí<´;W
+ÍÆ.(Ž•èæÚFÔz8È4.*03 ÉÉ,E’^5럚>@èæã™NÄÇ<«:¡;@ƒVÌ¸Ý +E&8ÝSy¾àœ§„Þ<ÑYƒ=ëÜ^xç•rékÂóø£¼¹9]A1Æ«öå…jhH›€öÚ`OÁ¶‹ý-­Q¯sšërQl3Æ«%½cŸ>•`ºÄ(H9ÇKçâ»É-–¬‚©É‰iäö¡‘.\ìÏêù^d eR:0»õ”ÇfÁåÍ)1<4ãpšU盕YM¾Dy¥«ÎyìU‘ˆGÓëgo*ã+EæüG[nÙ§>®ÒF'x´êMÄìZŒã”k4µï‰~vC/Ÿ×÷÷Hö˜Ð/?º‚Ò8zòÌ-K«ŠŠ›1ELæ¼Þï]±W/Q}^Þaí÷™ÜY²àÍcØ¢fúáÊí5YCåI§XQâ Äâ¦:£L…íµdh*0é2¹¿5¡*`ãVÛõR@æ Y iµïË¥wR¶§íŸ±š‰‡tSzÞŒ¤ ¿€Pc¸&úug¢² 1–üú¢øK]í<….h" ú8:òˆw2¢QH4ÀjZéÂóDà°óÍzcÉYûZqíDHÁ`§Ï,w+jCî=ü בOÔ¯m>¯«o„i]dŸHÉЫºwè ¼¶%­ZX³R¦Ù3~¹ª"ýbΕæ¥Îë …1šs"7UEž¥÷ã ›žkŒ‡ø‹–‘-x(ºŒ4§â‚³˜ lƒÜET‘Ãñ‡—Éiîf&0ŽÅ–mr gnÞïÈÇ"nñ|w¹T¥ù»ôzæ¸á™¹¬û^ù¡CZT]9‰IQ]¦‡ÞrÈ”2(_l9í´Äg«[å÷¼­æråK΀ÞKº»+ÕÛoy.„6éóyXŠ.ÈZܵÊÖ<Ø·X1ØñC‡$Órá}¿Íèí¡
+»òi_%!ÊÔÔ/5¶5†›²Ç×SNnº©€'ª»št¬°e
+ŽæNÿàoÔ(ÄÃæ¬"ï}ÉЯL1™¹a 9c€ ·sT˜øßLæ(½éýNƒ4ËP%ÊM®þ‹:N_(8ÙZ#~;¸É*)¼©…¡V>ÊÎ_  ek¯)ž_5ÉE]Õ}tÄ&ŸùêqÎÙ'E°).÷’^œ xºÒYŽG`èsiYŽrbÐ<ž™‰`{'´èÈÓ¶[:ɱî+I/ã
+…Úà AÐn¶ûUdî[ĬÑbqS®;?r"èìÔ[­:"i†ØöǯZa¤LÞS`‚ÔRÁJu¤ò:÷f“ÝOSBÛ
+LýÚn‰ƒR« ë|ŠÐ{­¨9–«#êŸÆõ‚3•wBŸR*£žì°oªµ\®-îMê­ð§j/uÆ3q½ä“—ޞ̑åx\
+»\¯Gû0EÇÀû9¼±w(Yô|ê^/?¦¡"èžö~‘'kÿ
+ÍOd\½{Ì^8M4ƒz9v´¾!û%«‚è‰,ЈâóÄçËmÊ×V¢+ Ÿ—+M{Š]âý
+_\Wf›îá.¯ƒ‰ˆk¹$*<Ÿ-_Ω÷ÊŸvbϼxå'à„$Ìæwx­úƒ>€Ð¾‰srĽ»ð<‰V·+ ÊF³q&IÙ꿽a¿¿R––¡J‚úýÍbC‹­
+83óÁA »ãð²Ö’Ml‹;¬Ã%&F‚Öäž\Â× }ÄÜƉ¶‰™lüPÄ•V?­’cýÄO«ÅëX&²—.l(T3 ;kٸܕ~¾*Îkq
+Í/ãµtv™s0‹è1ùêzm ŶsDÆ2÷ô¬Ž œùª•ayÙPŒ^¥O¹{yÇÆk¥rH3†™ÅÂæ›.‹›\@ýI§PJºòø€þ?àÿD€'… ’8ñôänƒ
+endstream
+endobj
+34 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-30 -958 1146 777]
+/FontName/NMZHBA+CMSY9
+/ItalicAngle -14.035
+/StemV 87
+/FontFile 33 0 R
+/Flags 68
+>>
+endobj
+33 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 837
+/Length2 996
+/Length3 533
+/Length 1599
+>>
+stream
+xÚíRmTe 8­B‘€’/!+ 3ರ º»Š‚²|G®Ìξ»LìÎÀ0K»'RTÌOR â dò!Z˜DD~€ ~P.'”TT …LX©f!OEýéô¯ÓÌŸyž{ßûÞs︻FÅòD
+JC)’á¡Þ¨H"bWÔḻKhˆ1E.Å(h`
+DZ@ù
+B«™Š†1˜šÀE¤J ]èøñ'"=”ÐAEÁàÉ@‰©ÓáÄ’Š©VØô&ŒøH#d+Ä"ÏÉb'Á(Œ ™8}*Èïì‰ý}fC¢ Xƒx#ÊÙ÷ñ×Ú)—-#qJA*àË÷MczÂJùòù ©€:
+[K²žD3Bªä4†§@F •Ì0þ±É®Íà_ƒ‹)]ϼ@~
+xµÜùfY¨1ÿŒõÆ‹YñCç÷Bß|Mçì,¿[Á˲møHJýÖsÄÎæʟ﮲+®8r´wá‘Ѽš9"Ûè8ÃÜ„cs¿TÉÈ
+‡ó+Ân‘
+endstream
+endobj
+37 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-63 -250 1027 760]
+/FontName/YCCZCO+CMSS9
+/ItalicAngle 0
+/StemV 83
+/FontFile 36 0 R
+/Flags 4
+>>
+endobj
+36 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 715
+/Length2 1792
+/Length3 533
+/Length 2328
+>>
+stream
+xÚí’{<TëÇe'ÛV.‰Â"än†„\šÆ¥L&—Æ}3‹YÌ…1ƒ $J¥ˆPé(¢H”0ºv
+'åZ’K£Q™ÒuÚçsÚçŸó9ÿÏYëŸõüžßú½ß÷y_]-œ—‰™:3è,„)Â@c½¼6S8LW͉,ˆAßJd6
+#ÞƒÞš‘ŒÑ R&vû1£BÂ|Õ
+z;šì¯¸–Se®˜HK±à.úÌ9šø$u]s¥
+í¾PëV\šzˆÙ#°ªÕÀ2?­f<bìèÂ^óÖH[]ÒŠ]GÐ6Æ“z™, ©šƒÆÎ|ºÞ# ɾýÆ”PQ£’ž]&ýèœ7^BBÉãDþÝSzñ_dæ†/8„ìhÝ)zZº
+':O{ìš =wO™ƒPÈk:—›Û)BO?3~ÚHƒß»€‡B¹¡.ϵ+}„ûýŽéjÇ/fÚFÞÙ^YGHI•ÛÞ9šËIà=DnBî³üjˆji•mhNVû\Ôîë\õumì¯É“釕kÇD(ã{QÆQŠÔæ7èÖ°FóÖšœŽ/2q‡'§ß ÞÐG„YzñÞ®ú¿$Hb%ýñ¼9îøýz_ežœÎGHh5Õ+öïçYT?ï>[¶¨p›\3uG]ÞP†6ÃMÉ sô_#ZÍœ6|§œÑútqÓ|‡hCÃA•UzÅ*|šá÷“ðþù^¼½ëW¤â”Ư÷ÍËφQ.¯^m_Õ·/_Y×S𼩹~!$»w¿mJÚ-½S1›s+®’X)ëñ:O:ëºzE:­BÓÉ‹ŠÆ@‘.IŃJÌìÜöˆñ‰)·afN‚‘è@ÏNÇ–ú<É‚KÊmWÔ
+=?ºfÎ{F\*Žë²o¾KËÚ¦$ÒLÊÑ‘±u. LË´6WÔ*بáZ<ÕŠ¹¹7{[ÿ%D¹¨i+U)CoÆGÓBn¤þº§dÌOÃÌ/7‘²ósÀofy´ÄóóR¾:Üz5ÚƉ{ëHÊ]·)œowu—ÝÕØîîôsgž!¾üXû˜mOQ¤;µ<”»(맟’¾ í½ãùm‡œÄÒ§å}§÷dO1Õ ~ê& ftt%5½&”‚Ö÷g iýRQT‘»øª…Æó>ŽŠ}­n3ëô%ÃÇáÖø»’ó¹=ë12Š ^³zPdŸbžTŠCyÁ&(U‘ –é¸A°,Zmôp©ÒÊ‘SJÙï¯Ê SÍ ‚ûoø‰T«hMȧ-ó«nàl:±EDx jUÙí@6Oþz>f+étwô)
+c«éóÖ rÇl6iÝék+ë¶<y¡ÕnüØEýãÞ‘e’üÛ*tƒ9tv¼Ò™ÉãµÖÎR gNHè /ÏëøyvàÊBr_F\qÓ_&ïzK¨öVN3ôÂ|ˆçî.í®hk8þ[%ÍÌÎþùêþL–[Y¯ÓT‡%Ê+B5“ÏරPy«•‘aÖÖ ï$}Ü]¸eÆر¿fwLн٘ªE 7€më¾Ê¤"¦ôžŠaEyzBÃÊ$š:etØ*°Kåèà‰ í+KFŒÎ+o9'pîßw¿¬t=ÆÛºlB‚×mî7Šfa½(ÈêηéÉ£"uûƆYÂ¥U¶v,Tw}T¹ Å`ÙµñupF¡‹êÚö×GÎoîkœÌmµ:qáQdÉÊψŽ¨,»BOåÞ!ÚÛ¼ï–ä)KUWY÷‡ÙQ¿é‡/¬gCæp¼G:¬Vašõf#Ÿc%*©Á%O*OçÄ^ý$ÓiÒ‘_žWã‹Ô¼åÃÈFåÛOƒùÒÎçšjíqw\š9ŽwNú~FjÊD£Uë_±^0 ÂrŽ^¿öäQ‹M²Ër…4m“ÔÌD¾±A[@øéÏã¾åuri›û?„åÄT묷jkÏÊÞå7SŠÞxWX÷Õ¡™3õݤ–öšI¦VÔ9¸ B7ˆ„Òõ‘Ó¶
+ágQÔC½úR—vÈm–UñºeÌr•á˜P|ÛlÂ0_èÂ8/ ½Kϯå7»ç²²à¶Å^yF>žû."U{àþÂcèÄK3d©ë»ãˆÖèJaé=Ùr¾Ì ü¿|`ÿøŸ QA"“Å ™0Ø«®Î™
+endstream
+endobj
+40 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-6 -233 542 698]
+/FontName/ZERRWR+CMTT9
+/ItalicAngle 0
+/StemV 74
+/FontFile 39 0 R
+/Flags 4
+>>
+endobj
+39 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 2036
+/Length2 12016
+/Length3 533
+/Length 13157
+>>
+stream
+xÚí—UX\ÛÖ`±à®AB
+w·àn Â)ÜÝ=‚»\‚Cp îî‚»w+'¹÷ï—þú­¿†ÆÜsÏ9–ÔZ™’*“¨‰­HÊìÄÄÆÌÆ—WSã°1³"SQ‰;€€N¶`  ˆÀÆËËu6°³ظù8¹ùØ9‘‘©
+6³Xÿ²p”²p™(Y8›œœAÿƒÀ&ÿí
+YÐ › ¢
+¶øS„÷¯—l,Œm­m¿È ѳ9þžnˆÈÞò©ù;ñ3ûëœ
+6vοô?v®åýçJ²±sÿuâ[X8YX›üs þç.&fëæÉÄ `bçà€|ÀÙ!ŸŒwÞÿ™¦¶°wÉJ@ÎVÖwÿ<¿ GœÓ?îKÈÕðo6µ€Ü# È9-ÏÚ€ñ ÕáeÇ ¹fóȬò÷‚£d®ëlü±SëWÌs–¡ÁVJ—óh÷‡JQI·´o…ê}äùc;®õ»Ý݉ʖñéM‡Zu7¯øÊ£÷˜&pêt`XÚAQMºß²¹<õ_a¬œ›d;Ùµõ’Ö?Ìôû´-˜”é0´ ÎÛŽØiâ3ž‘týÇap]7ÑÁyí^ÅŽãmÀü¬~!¤î;U+cµ JHÃ
+»±¹ ÃÑñýгAŒ¶¶¯Q!©òC¦ëƒæJÌ}—fÏ‚p5ùYÌ”UJÍ\Fyc¡)Î lÚž~Qî¬ÛÛõÙô_ÝFì¡9•ë ªôQ¾—(+ï Æꇟb{(8× ÓÍı 1@î(Ü^²ð©Óš†£Ñ»> ‡m6´î˜j>Äê(A ÚÒ“”)4:ŒœÈ$¸â´Ãt\½B›Âov¹<èHqC„­q±¤=…²^1°æwžÀ–²Ë›"l Áô—¼£8&©º5­¶N]—ÔSçÛüÌûÐWP¶‹Z.OrIº¸Ú}¨4:=µ)æªam ~: ¨Ÿ·Ü0G
+^ÌÓßÃQ}êêŸêZ],­nLKÙR ÀKo¯Õ¡µ¶º(]]Z>¬´ˆ¯ö%^÷Æ<Em–>¸¶Æ0Œ¡¥F©khùÞÐÚr”ÎNÁ{¾}§–­'ã>µà² ±Ü`Ü­¶í“O”’Ü ˜¸’«÷eî|nåVÚ!Ù½ALe_å}I¹¡ºÝ]gp
+§[qo|$föt!D*9Íz+ŒÜV5é?]ü‘j4Y…böu!ç¥ý O é¸Ùê诱 ¼m®©Þ¹“ÇiWÁïbrþN¸§(ÔªÚÁöÝW öÔöÙûuêw•½~éýÇ@¶]£­)xðkA3¬œ0øZj±4 ¢©ó-áN¡üÝ–ÄÆÚèu³\9S‡·ÚBSÙ½-Vª}>*ñ¥?rŽn*ýÄHFŽ¬Ã0Þ»©w´NU*ðápÆhWÆãnÂ×Xi›!kf{ó–®$–§dõÅøY”Æ ¾0°‘ µ;RÐÏ3!Öì4Sv!ÊjÕ?]}vŠχ6<o›>i+ߤWjî»ÿ‘ç%˜È©øðÍ·iú1Éžü
+1¤{ÎÓSqMDÙÔè¶Æfl_H¡œ• 'h’^íd|—u!ÒzKYrÖXýŒtéEI­ö1-ªU™sRc—ÿg|Cúö‡Ð’Õ¹×÷zy,Ðd:èü3k7dfüZU\2¥ëÝ ¹·%!g›‰bð;#ƒ–HzïŸ+
+¶Åšg^Â- ‹>æÆÐÔ\$ <dm®£•V~óW` ̃» ~R ÐÓãÄeòuwØ(V£”¸~`ØxMûŨò­2¹
+oÌP—¸º˜:î➤¤k¢0Ö2W ¾ ^t©ýùi“ç0“#Ê1T‰£Åõ@b}€Ÿõ‹'þS”‚M£c&1ÅöÞÅ+Çn¬`íEÿMÜ OSPVCÕeƒÈ-Y¤o”wåGSTIÓäÚ…Û£ó7±È{+4̧½¥zÂGåŸÉàŸ#Ó¤‘ͬ|ìm±šæªâM„Æ}Õ°?ï¥S &r™È÷fQ‹©Öå@y!õœE§|sc ¯ãÔå<´NÐóë¶gžÅ2 ÕÜ´Õ³‰Ö’:‰¡lz@›)*OýŠwW§–¨"å.ÀE¸R¡ÆñŠ`«”¦É
+ª'?ŽãKNfRšè9`„^´+‰2‚…·ãÆÎÜ°eȶN™`J5x6o~eÕ}wô“tG.Gfk·ËÙ” œ)ÙÈÇH‘hR°pÞç}ÜvcèRµ Û÷½ÕœJ²bÒ¡‰[liôÆìÔ×g1ƒT¶˜=o¾
+cItÈú[Ñu—ØsBFÄŽ(|532ŠÓcÎ
+"ž×±ªÜH ÖõÝfS¸Üµ0Sx {/í|ƒQ
+8 d/*PaW§1*»ÄÊTƒ´VðáSI[Ùó ö¦^Ž41Wl¼•`Í8h2ŠË±óˆ>¿…õ„¡°»ë2u;©z3Y3,±Æ÷v´ú)æU// ™º'ƒNR{pëQɹ%ÑÞ`…q¨,èpq«/•¥j
+&ÿ/´cø0ÊÖ¸#¸øgÇQͧYÓÕÑõ*séá {¸ »Rbi-Ë@õس–ð0‰îdÌ  ™l1uG^Ia²¤åÀ7²Lå—»av×· ŒZueÄ_o:?jhâ¾L·²KÒô]ä úmÎmæ Ti ›­zlù6SI­d^ìOƒÒ‰ÍXsü‘•ç?I„ãäcQ“-=’:ÊÛãaõ)ôjHHÏà—Ľ
+Z£|t¾.?ëHyÞòÿíÜ—ÝíóOfšk›= _Ç­S*Æ-zQìÃ?:óÇ”BÃ<±J»›Yì‡LNûšA½vJhiØmÓÝå}mto"FÑÍÐ0›VkiÀî}Å)-ÉYÛ» ÏóKT>£¨©°¬ˆ"’ÔåÐîƒ82‡l›Aö'u–c—'Ö›W}x4 1ß›úZ+Ók3ÐÔ¶‘Ýõ í}ÍSUüOËÜÁ¾¹Cþ‹3ÞÍ‘|^‰±š!·(Õ5g2¨ïõÒÏÊ>ëœðY9gÀ« ð9RÿôêgêyžúB‚‹ÑÍìã9è®w
+|0ªo“ú¹FÁ;Æx
+¤õ4¦ÕwÊÙ‰.žï V¤Ü-\pá Ú²¹€Q±/û,ú…¶T×âoÔ¹#uKj—‹·R›Øæ3tʪJøûxT5qÌ1®:ö‘ŠãÈ(bcã¿U»GTsØçä–¦NpÆ9x<“?§@™Ÿx€<(õUÒɆFδq¶rËÚÑL™¦]DÏüYŠ?`®Ø _¿Ò¯°Ë²¾r!kÃÿ&×*5¸( }ÝÓÆPR¼
+0IÎ`·azóö]À™fÚ‰î§Ãë²4zÌ1ƒƒÔF†Cœôym”&–¯Î _l‘¸P1økh&ËžónÉTØ·10g·µ.-«BKËš¿I’ÕUÿz_vöPk¯öKO¶’Yªj'E‘ >Ø"»Ñçm;‡ëùþÛùBÚ·¬ì ïðð"յ܀aæñÄÀbâwâȠˆôÔÒp‡hÁçá4%ÎÛª¯öÈeµ}Áh$I, K÷ ,œã’¢’f1n†ù1×Y1‰I€‰Q_Ýu6œ-/íñ÷f—=9¦ÇÄbŠ­¦píþQÊÒ¨Š_‹!?[w¡aT©ï’wEÎÑ~Ö.ŠjvE†&Q°žá¸ÏÛF0Þ2-œ$â$ˆl‚y«^½LÞÐHöd—.­·:@±ªÎ3lT©y¾!©©ñ-–Ÿó JòË k—}ûÖh(J+,
+¤iÌ ½'¡nX+ExMÚÑ'ƒÛÁƒgKÏ7RtHúbI“ÀL¦|9Ã*HUÏÅʉOÉfŽC†cõÊŸÂÃû\‚/…‹…ªƒ—CƒÇð3M#‰àsÙÌ“ês¼üçÆfØ\ t¦ŽNÑy5å¥×¨„î$×Oäèñ$,yñÈóï„e;-擶Â%wRÑ,oï,½B¿qÂ.±<r¡q-*­SøЊ›²½„ä–Q‚jÊ÷ióÆr]çÆÕ…lRƒ¢Z'G¢ñ©ÞŽ¤eÉÊIó¾”fñŠ›ãY²­ë<eHur å)—ìj°éû7Cû¿^gñš1h wñ D‹‰©H²Â¸¥WË \BäkS|²±O'©ÎõJI$ÊÌ’S@ó°È 6¼,÷¡ïœTÊÝ¢Ûh&ϸÌÔ `9îÔJXÕ¬e£…u)êÖ@Ú;¯Aã÷Ò3ûH=3¦us p±w[PpOÎÄØô)BѸ(äØR‡¡‰kÖbI0½}Ÿ¹- Š.ÂÏ ¾¿U?÷£ßÜc2ë ’Ë³ndó%ð"ùûªI[×.hõ¨U„0ÜŒƒPÁeÂGùW¿K7—'#û~ÐIÏhÍ6 æ}
+ú(|='-/~sDùlH:º¯Æg(är=9Üß÷N©umà%4ÛóþÎÌ–‰‡#´Á734•¹§Ë©Å+ÇJ‘4)&~–[Ä%2HLE\ÞæN
+6þqfÙ«gˆ$j–Ñl\¥U‹µrhhãÓ'­ÿ¡E•qXk•\w3w¡8p:æÓÆp/À»ÓpW·ïÝZóPˆÿ ‚S€{ÿ¹I½¯ZAžŠù
+Ÿ"úè
+TWß°é"1º“u\¦ü@|ÞÓmfÚõ1XÆã>ñ³§J¸”HöMuâGg®0™”íÆY¼¨íG#s ëæ`ŽžS‹îV5Õ’|jÙjOn ²JŒ2ãKT:òá˜wN¸º®° ààïU aÔnTܸKýqNs¸¦9Ì’‚*”dÛ!ÔuUf’6¸b‹›d`n¨_Êz9CY¤ƒ™#ñóné7—ÜÑÖ¼ ›u£qÍçº.¤êµï8óë2lTÏpù{‘JºGä¬Ûá»ÂV6Ãa­NsÞ°7ëa⓼¼êÕs°€ÒÕ'ñÉBË1f@IŠCW¸#<íË(zŒZbqØ…žU*$îî<ål—¬œ…|­š«}Ø1*
+³.@•Ûbž^¾PðD@5o<O°zƒ2¢:PÃ)ŒÌ±ÜMíšHé4_Šèà·<ËÙðÒ{°ƒUVÃĈ€ÇõB:T0TæÑaï6p”Ì/~Ý}?N›âÇl@8ée¸¶ê†-¹Ý£¥÷ãá×Åš‚Ž?%*"Üãzwª æRtÓ¹FxüƒÖã©Ž³D†õ:G%2ÛýF&‹àGè ŽŠ ¡&1XÄTÕ^éŽá*çI€ ýuÞë„žx²Ô¨]›ÀÈ^Az§«Gã
+?Üs©Ô‡ÃqºZ÷_Ï%¯C
+ÅÐð›Ò<ã|S$ìâ(?áPÑ;øíÍ¡ Ž˜ „>
+Õ´$¶ æ©ÕºÁò ±©AÑ­¦à6™ÕÛü²Géø%³)îû‚m,+/ ìGÃ4dEïߕëp¸Tá]—Rq¹:'tʆ–‹¿£û]ÎÀS‚¿µšbî.½#;Ê¿DM9)&Z%Õ“ë4:ò»ûÊÌ ZRß™‹O&·zéÝudÃGrE¨A:qxTCš½ǯÓt™ãØ]`pÛÑÏÎ>bB‰'M/–{'ÃDt<;¾,G¤¦¹ä’¶Ôðj„;xq£u¡[4kgŒÍ gÍWÏÖ5ì0=8Ã~èV`ײ «×ËÃz¿8DÕ‹}ƒÑæñõvT†ª<ïGwЅ̉ËUê³ËWX…W1 ÄŸàÒoìmjÇ6šæu¥c;®üPý©„h¿ËÀ2æ¦Öô+(ÆY Æ9¯‡ŒMPض¼'Õ!õ²4š]}ͤx”Y(ì¨îùñ¦žÄýþØØ`ت¨/BÃ÷î6óæ3mÒ“Ó¾4Ž©øÃ8ã'LÛsŽAíb¢ý£jMtæ z×rŒ^YS¶H•ÛÕwá$qjˆ‡Pòù~x×ÑÅ|‘ ‚»°.÷ŠfR³&ëô®9 n³'íߤÄB0•™G›8hg÷ø¾k“Qmd2 ã*´dµQÊšáG3ê‘rn~‹7?*IçÙð¼OJºÛ7(q€KßÞ­P‚cT¶BkT ž)Z§íx–=žƒÑZ*7„ƺ–ãß{W5;¸sH°pÒTu,¢Ó^¬þÒÖFGlé:gým*4‹­^­,:½yAPêd`ùÅÞ‰¹{sé»åZ†I€+qY Ó Œü”ƒ‚º ó¡­,Å» ¾“ÂõBý?(RorDÕ×ý4«rÁßÕ^ó/Ê4GÝ™«jÇ¢±èˆG}?§œÝ4hÛu)^÷*)™k¶L`~mNç´ß
+ùÞˆ^µ²Ì@ïþ ×°º š
+Ñ©g·GTKÛnQú¿ñb¤ØlæÜm¶"9÷ƒFM•5)1ú¼ð¸_“˺DRÉñ0Yó€êA] kÜÒÚP:oÃUšÙb×V¥Û¾¼àg‚ùñl›ûÁÁüm¥Ôãõ1½PUÖ9…è\÷ÀWRýV'ŠèaÓ‘A…D‡ú3Z‚ËÝ4ãØr6Ò¾‹öWÃçz ˆ™]üXÍÙý³-p¦v\kJ¿Ìœ+R²/ø
+e#µ¢{¶ÒmQ­€„lT½Ó.ÖqT…PpÉušÓ¿¿˜‡¤IÓRagž«p¬ÿ
+èÔê«ç˜¸£=1BT s•£Ä?H+^„Úð»j'ï¢QZw$mÃmÕ7_±H7—pží•’ôï¿‚HœÿضUMƒŠ5ú>Y¡džÀnk+J7
+¢Iî*Eænïu—jr ü¯À$;ŒWu_N<‚ˆëFåG¯ã ~†tæ‚JN
+ýÇ̘VwXY¥ÈG{?Y¿ß[´˜hæ€6¡ò›ó~î¬ P2¥Bª’V}(Ÿ²u²2:¨Ð#*˜FÕIã|þE¢«ó¼ÿ>^A)ÈÑGhC_êÜYûöñüekfk¡5±üKËÇ ¿¨3!Ifʃeb"MÕÉ” ¢«Súnú._GDƒôþ·¹^Ú ö¦VÓl•\ªóÚ2‘9Å&Ô@6Ú䀭â¼èSNœÃôÂW|›K÷Õ¯Ez€÷m1æ~
+#mgIðž<åÏ¿XTÞ¯‡9â?­Zù{k`ncp¿ûØž¬ €Odøă˜—7±ïôJ²…¦•\èF*,VUœÚïë™æHÜÕ6ŒB_‘ªæùåc^ºûªé§V¿ø'™íŠ¤_ZzâS+ÖCM‚ûSeƒ¹^ðÐîàÊADÅ$ÒžLÆ,ÔY'ŸÅ2Uˆ^ñŒµ§0wYÛªÅa’Ç+ר$Ä¿Ÿ”2€žcÃgð B®Ô -ìê‘ïƒ3¤1$S)o{¡Éò'ÏÀ1·çB¬™¬¸û£wÖNÆ}ñ åúÌ? 5&¹£kl€®ãÝhvÿ¬®|‚½ç%²8“Ûí4yžN?ÄÈÝ&ÆP7èdÏ4˜’3œr¥
+J±‰ÎªÄSòK]z3ÇS Ô:rŠã-·Å`Œ´÷î
+ÛÒéäÄ +C-‡=ª¯zú@˜Ø¡qVÞCKÕŸIé4–3|XÎü5¬‰•%œ+£s_Ɇ¾ ‚œ;Ëä ku2¼ÂÝšP„
+?ÝXà°„Ó)®bí’Ðõ}÷KA.—òÑú"d§·²È¥º@…'AŽ:±äà·B[=觖šS|ˆ§Œîd´:»¬¶BA*t±»¤Ã>º^—,¼âãéaÓ*ÏBñë²Uº®§Þg¤êÞkeó‡µõ6}¥ÏµM£»e¶B‰-uǸ=3
+ýªC¤®Ù7×»½¬|´Sº“ÛífuD‰Ê6ñdˆ•ç qDÎ^ÔùrS‘f¯
+Ìi‹ÊKâ¥5\Á<9ɱOõ! N?‡GFÎëÅä‚a(õZ5ø7œºVcà5>N‘~Ý"ˆM5ÌçWÆy29ÔºK°Þèçîñ¹G~½@’QÌÞ{æ.ÜJ-Ô
+OÇ ±>Þ¾uš¼7Þè­á\ÁTа9Œ«iHü ~çûú¶óÍç#<Æe/{Y%´”MòÚZ@K¼µ“¹âà±ñ廬£QMÒ}ÇeªÌL¶íW÷l±ÆVqJ(ÎêÊÝZÄ5dÄ@Óñ5Êö&QI©‘_b·xlµ P3§&6Ž¨BÜ¿DG¹]—…%J1à}Ü~Fõ’㜈±äHÁÍà$»ÕG½/fÄ?Qjàú
+ÎmÜ€E!™?ÇTLîÑRÕ*?‡fVÂSÌ“_|æÖ)7Á{;¦X·ñ+×µ ¯IPÆæ˜&öÃ=ûåÐFjG¬‹|ýÍQ3
+Úû“Ìed8Öë¾\ _ÑŠÝ7r2¸/=_ú­3¢n*q_Ïæ=Òa‰OU)ðØÊß8Utùe·§-qÕÄ”!àV@—ùõêãðëÁFf•T™¦W¿ì½q–eÍ3€×Þ"DÎ2ediWÝÜ­`!(ÊS^ŒÌ1Þ,@ҥśtŽI:l¯!ú²¶<ÇãIw— ¥þÛuãøG„#¬>Ê2t³äôñì(ìÆVrþ;æoÆLI資ãå«ê맾&%ª–cü°c‘Yº–(J–oÕ븢¨ç÷k
+<Ÿpu˜(|ý ÛÍ›¡‡> Y<iX™ª®øg³cˆk}Zrã‹*槚íP ͨˆ ^f@”ú¾•ÐR>áäîs²ë
+eÛü$¿J„v!°Í[BŒT0Eçæöå í½‡ç^è«pœ§7ù¡@ÊM²ë½Ë[A¦÷‡.€XïSë|Þ@³šQK€Êt9®ÚÊ¢‰<ÎÒ:ßz ³V\á¨FoЪ¦8beƒö&¹ß4–:Špb@vQû›8ûÔÁ
+ĶšîÔ5”ÇØU¬º ­Œï˜’ðNµ(8u¿inBoÁÞó·•®i“×hdD0è˜ód½¦fºç†­b”AüÕ{‘ŒÐ¼–ò ?‘†.ì9bt9˜IŠM~i/œÄ¿%D}õsÃ]u–SÙR¡E«ü!ºG`s_hHŽº”öå,‡õÿòùÿø¢€±5èàdkt°BFþ_c/J×
+endstream
+endobj
+43 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-39 -250 1036 750]
+/FontName/HNJBOY+CMR9
+/ItalicAngle 0
+/StemV 74
+/FontFile 42 0 R
+/Flags 4
+>>
+endobj
+42 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 712
+/Length2 1540
+/Length3 533
+/Length 2073
+>>
+stream
+xÚí”{8TûÇ#”A.岕}R˜5ãL5Ce ã–š 9‘Ë4k1KsaÌ`Ì&¤$íÜ•[QÔÞbGê”;iÜR¢Íœôl·Ã.]CH:“Nû<§}þ9Ïùï<g­Öû}¿ëûû¬wýžŸ™1•†&AÜ#0…ËᣱÖX"@öð$
+…ÅÂàGà„ƒÂ|BråsŸeHö¥ ó"ä\€¹œs §„¸–€à`fW¾,gù±þ Õ×ድÎþ/Óïºt6Âþ£Ïe‡ ø0ðàB0óµÕþŒæCˆ€ýuוOg! '„àg ‰  Ñ0DEø &LgEÀ+:̾†mã²ÏÍaÿ!Ë•ú¹G¥#¾—0ì·ÔOæ•ûÏZ> øÖ ˆ•å÷—'ÿ¯Örâ0¸ h|:¢ó ß„ß398p£Eh€Æáå´ÙìÀƒ±ÿjôæ áØÕÀƒ ¸ƒ€[QæðW6ü{¿ÔÁˆ|:0 3P…ºˆB •‘ål¬ñ©‰Ï½‡?SQue¯ÏãçŠõµM©±”­ûC“O¥Ê4'©gÎÍ›ÿaÏ©ê8Ûôƹ€¡Ð°bPÏ"¸³Öod–Xùýºgý-_ELÃøÌÝ@¿›–ÅxQ€²æs)TÌ«Ÿn5þæöû§â¸z TákYß>psìôßjVO¢Ü3-‹çªT8ÝdÈw½°
+·>–hsbÙ{Æí}¬÷Ï.L¿çÀ¤òÓ‰f:n”x誾Šê ,ÙÐ_ÑîÂl¬Í‰´¿Ô¾i€m ­@=Ùã)|âBÅë]Ê]‘.z£‹§ƒ²{Wí¬ât½¾„H_ÞíÉÏ/¼Ò
+on6`H*ïøRŒãww&5טúQƒS’n ÝgÄ™kצi(±Rð×Å
+¤á’fÛgfF »Môâ|fêãÜ“å«íß«Wº´ç¾Í iNEs+Mbð)³jAž!Æh"<Ù¤öUþB±¢ÐÙPa˜zX>£µZó'œ”ÿ¡­-Ê]ÃK¥%©¤'Œ9XÕìsø fÐ×82¨ 2ßÊ,À!”lVºÒÄ71øw5íåÔõ ‰MÐ"¦A!3»úIa€EiÊòIÍá„?JUOg¶9ÕRM”¯…o¼2|ÆmD{¥o„U×Z.Zx¹i¹£lyhIGeOš‹ñž¿xvª¨A +~³}Ó„‹ùŸô=ëÖO¬ÉJ>˜Ýz 1”v,-‚e®®ªêP–­Ï¬08.òÖ {Á¾³á¤Côg±-NR›kcºÄG´5Ô½Ÿõ9U;•ÈÔy¹Ë5Œ¶· ?Ñ2ØôD{zy¢VçJ•òØä÷/”Îœ-
+mgv¬½ý¡gܨeÜçO`;ìÝpO/G¡ž”ò€ì5tyÃÇ-xùyN‹|“ú] ¥TÐÙ?ïa‚{êcZSyGǧLV˜þË‘ÒÜ­úx¶™ç‚³Ú{…­ã¿>ûa-I’3HvéT›î3V ‚œtfð÷üRã!‰kW³}¹k%]'}¢Úznè .ÁqïîŽ[L}Ó€y£¦×ÀUbá&Í–Åœ›Ýí¦qŠAÉϧežêÕR_T_Š]…ݾëù®)Œ˜¶Ë±Ó—ºωbz
+ì˜Nï·. ()Þg¹€¹þ⤸MèVQfá죹åE8CÕ«ÖeíÊþ‡[Æßî(Ήï39WuI]¶ú¾nóšQ34ûèòf8ò(-æã|oôNeÖ;SI×þ²Ê¡A£M ¤ˆ”YÝwkú]5hÝx(×#Þ¶.¨çn×@±(ë6¯þî꣨]­/ŸÛ™Gë3e§¯ä¸Ó<©Ü߉Z%>¤Â7dAcœ¿¨`:~ÌeŸÛ_Ý~}ãâ«Ã`cÖ³TS‡Kp¯ÁC½Œ1î(I[ýMÓnpmÅób‹_&D/Œ¾}Q\{{{­á¯3’PLVø‡$SÕ<‘¿ø_^¨ÿüO0X0Çç²é¼£(Ôßà‰A´
+endstream
+endobj
+52 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-61 -250 999 759]
+/FontName/RVXZSV+CMSS10
+/ItalicAngle 0
+/StemV 78
+/FontFile 51 0 R
+/Flags 4
+>>
+endobj
+51 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 717
+/Length2 1374
+/Length3 533
+/Length 1908
+>>
+stream
+xÚí’iXY†QØqÃÆ ‹M°$Á¡Ä„]06BR!I…„
+&"K£lYTÑqGDAA[ ‰ô´l‚,"
+ˆ갌ҀØe&`ÛóŒ=æ™óLÝ?u¾óÝï¾÷T™Óè6na8è!„‚-Á  øÑé<@°Å£ÍÍ)b…@B˜ÊB@'€@&
+¢%(ü„P m ?ÃùH"øºë°øÛ Žàƒ
+²Ñ'Oa y{¬pïÂ&k:MBª<¦¡•E+ M5hm[Ä׶}™–E›ìZ¢¡Éó±Xëš^‘à÷]vÍÔîŸd²Õ¥=Vܦjfÿ;§²#¯mÚõÿĘow÷ (¿³‡yw–·[{Yï8ç,­ú¹ÖØðÖtg}‚ª›SÊÀ©»nz©Ðrbwºïõ=Šûãž©r¸…Âa诒•õãÉö)3A›m‚;*½xÌ^`DûQr´ ^JË0‹•òÞ“Uª"óC‹ûñJŸìÁ?SOaËË µ\›1´f|®o€úZ‚¢2patWÈ„:'±:÷4íœV ½ã@’ ]q¯el7©,ä•V…‘žÄ†Mq.Ÿ|¼ÆVkå–P£Y¸óòz…ÙiŒ8¯KI|AœtÛiêÞñb:&ømû¡„½(½—Â!œ{h^`†yÓ·k_5|³‚·jÁ«‹®aNûÁ=1e¬±çñ¦·I†Oœ'7¾Ù¹ˆRç2q ‡”Nríá5èu~·Q‚ä ¹Ì—^Öñ8¶Y¾EÞ”nkÞÔ…æŒM:'?HHDÂUy7…68Îô(uÂt϶Ñqm™íoxCnO1£ mRA÷•ÍμF?þ¬Z¿«õé‘ÓÛþzoDzi³÷7™%^‚ˆÖÚŽG²íI?Üwìô9ÜWéŠ.~TKÿ®î;#Á(EÎÇ”•» W>ÌY.p¨¯Ø·`A:˜óÊL^œju`¦y,©h[£tÙÁ#¹UÏsÖ½«µNÿ»>•˜ì}^Õ%jg,½S ™'Qï`늢.;´ -Æ©¯×8øÇ^iÚipV´IÏ×qðÐñêëë²Ö—,©¯î'+sÏzhý¼WYøÖºrñÜÔaÓ¤)£1+Ût‰:Ÿts¿ó3Ÿ+~©Êno€xÃïªÙØBƒÐmkÕwK†K­S3güÐ}yFrÆ'iÉ(>MwïϘöZZ ?—¨LôˆËÆ}±¢û“ªÊ¿ª³cG-Nöo|ý ó2j/NQÿí 2Õ¦_3lÈ8NÖÓfZFSÆ[Û¯«X!ÝOÄ=K=hÛ-Z^ÖhføFfDVÈ nåHs'§ <®Õ¼"Võl¼m
+þ·`ó…
+endstream
+endobj
+63 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-29 -960 1116 775]
+/FontName/FREKHS+CMSY10
+/ItalicAngle -14.035
+/StemV 85
+/FontFile 62 0 R
+/Flags 68
+>>
+endobj
+62 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 796
+/Length2 763
+/Length3 533
+/Length 1338
+>>
+stream
+xÚíRkPWEªSºâ«Ó¶*QÉ.1Ä
+å ˜Eìì¼Xˆs$CËqºL&À‡^ 0 @¥®Î¨«DŠ vÀ‹ÑšXR½ó¼æ³¤ÀCYR…Ó@s †QáP2*r&!
+endstream
+endobj
+94 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-29 -250 1075 750]
+/FontName/HCYKZF+CMMI9
+/ItalicAngle -14.04
+/StemV 74
+/FontFile 93 0 R
+/Flags 68
+>>
+endobj
+93 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 775
+/Length2 1103
+/Length3 533
+/Length 1685
+>>
+stream
+xÚí’kT׆%•²˜r•^Ü€P&@ —r7ȵF ¨=:&2fÒd‚‰ ªˆJ%UÐr+x*Ö‚€RŠ•6EZÐ#b¨..Š­ *¶6"EO€ºº=Î:ÿº:ógß÷îw?óî¡9ÆóéÁBb+Aà$É`rAhLL$–0 Ñh¡2!1CH” ˜ŽX«
+éËQ*“¸€ë,©0p
+ \¢BTyĆóPÍÿ ö_¸æ›G($’X$uÆ~&«?‘TL¢ú]@¤J$*1„•áó¥Iè[ *Ä©ó§‘$"ÁÁxŠt¦7öžëcòL‰
+ã1R "D"Ggû(.œObˆo–Úµ!bõÜÝÎ ã '׫¤(€ÿPÏÖÌ?jCF2L 6 f„†÷åêy‡…ãBˆá)À“å™ QA°ÁÊ“ÅéL€áBT P¥Øƒ¤a 0$³ ˆ4s­>Là!— rñLúów„„Êtº'Ð=Y_˜Íl¼ë?… 8ö® ,Ø—íå;——@!“¡89û2zY‹0C¬(ªDP¦·ê½Sœ<ˆ07ç1©²¼oþFÚÔ'ŒE<¼¨¸ˆ¼xÖåQA’“RêòK˜ôZöJw³[>I|nÒy;=Ìk;ÿ[]˜m´>xZˮ֭ÕN]¥0µ¶×Χ«m}󺢇?Š/”}& ¿SuÓåúw¶+r|cŸ<Ñd½è}|Õ,¿v_ÅÎz£;bêÌ?ŸþÎ뮥ýþ[þëÛ\.ôõ/âG•+«” _טÚ»¯u:üë­Æ‚JnøãÒõªˆµQ^5̶{ŸÓÊLô‡)ìó5wôqÏ«¸
+õ û^3Ï"Žë¡¶ëÞ創×)ÔÊéóŒÚ”µõ—Fý^5¶5õêÉÑÍ´"«%º÷*îdô]té,Õ9)Ÿö¼»„³kXìÛNMgµŒ_
+4²[y{ÁÓ¥7"úÎv]È¥$˜õÛßš°@óëÞÌÚ*¶²I ”±ÏÚ]& ‡ŽÃÌUÏ´?ëxã÷ûzM¡³Za3UgÒ‹åß–YSš¢‘®pœ±lüÑ]—^½¥<ÿ×F$4îphsî4Ù]˜yX/æo/Éé¦^ØÜæSþÏ+…üýÆp¬æ“Íþk±Ž üŵ®r¢i„7Mu>g™à¬=×þ%3®1wÒV+Òèê.½)¶sùæ‘ eie•ý!ÞDV±.jï‡'?ÜtØ'~¼¾1Ž°÷ Üû’Ýold¯­³¹K_Ùò°¤|÷é¾ÑŒi§×u|?ö~ò[wwS*œv(Åò®.9ÒnâýBݺã×[“=ÄÉÕv÷Ç.²_Û¤»ßóøÃmV›ª'{ u·ûQ<Ãöκ8‹c~´¹»ã(m",è¾úÍÍʳ»ìdoæh{Ëaw?gÙH‘á÷`[å q½éÞ®-­*\yÛxù0HW8gk–±ìJhR ï⶚’Ž#Ã5ºû@X+»¡}Èm#¢>ø«ÿ©¯3öiòV9Y<87>å’veoÂýæM7óJO5e¼øˆ+ýLnáŽæÑÔ§.>~ø(8ºÉùL¼d"hѽóNŠ©o¦ýZcäYžÂ}ˆ÷•öò%¤âdqµô‡gѺré†D'qpàUQø ˜g=×”%þkŠŠý™¼ˆw¸ùçZÏж%gËN9=Ù¯À냽—åäÁÒ-DxΞ®ÚèÅvõǾö0¹Gã${M£Ù´­û}KB›r-¯RCìÏLÅ7û¶:õ@U󸚞$'w’¬¢”¦?VnNÌþ"§”²Úwb8aLºÆ¨hMAPEc3ó­W¾Y:âÈoðö ¼¾ÝObÉ?w@µ„y´sñNÅOqŸv–ëi‘[Ž=.´Èj-ƒgwŸ>A5Ë­ú4rËj,wIC?zXüJxñÛ_vìv‹ê¬[PøÙ*Æže ÇôdYcLÚö7ªâ é?µé’䛚-lÝàÙä_៞û…>qbþ?èoƒ¿„@‚"2’HEdÛ!èßýsW
+endstream
+endobj
+1 0 obj
+<<
+/Creator( TeX output 2005.03.17:1800)
+/Producer(dvipdfm 0.13.2c, Copyright \251 1998, by Mark A. Wicks)
+/CreationDate(D:20050317180620-05'00')
+>>
+endobj
+5 0 obj
+<<
+/Type/Page
+/Resources 6 0 R
+/Contents[45 0 R 4 0 R 46 0 R 47 0 R]
+/Parent 98 0 R
+>>
+endobj
+49 0 obj
+<<
+/Type/Page
+/Resources 50 0 R
+/Contents[45 0 R 4 0 R 54 0 R 47 0 R]
+/Parent 98 0 R
+>>
+endobj
+98 0 obj
+<<
+/Type/Pages
+/Count 2
+/Kids[5 0 R 49 0 R]
+/Parent 3 0 R
+>>
+endobj
+56 0 obj
+<<
+/Type/Page
+/Resources 57 0 R
+/Contents[45 0 R 4 0 R 58 0 R 47 0 R]
+/Parent 99 0 R
+>>
+endobj
+60 0 obj
+<<
+/Type/Page
+/Resources 61 0 R
+/Contents[45 0 R 4 0 R 65 0 R 47 0 R]
+/Parent 99 0 R
+>>
+endobj
+67 0 obj
+<<
+/Type/Page
+/Resources 68 0 R
+/Contents[45 0 R 4 0 R 69 0 R 47 0 R]
+/Parent 99 0 R
+>>
+endobj
+99 0 obj
+<<
+/Type/Pages
+/Count 3
+/Kids[56 0 R 60 0 R 67 0 R]
+/Parent 3 0 R
+>>
+endobj
+71 0 obj
+<<
+/Type/Page
+/Resources 72 0 R
+/Contents[45 0 R 4 0 R 73 0 R 47 0 R]
+/Parent 100 0 R
+>>
+endobj
+75 0 obj
+<<
+/Type/Page
+/Resources 76 0 R
+/Contents[45 0 R 4 0 R 77 0 R 47 0 R]
+/Parent 100 0 R
+>>
+endobj
+79 0 obj
+<<
+/Type/Page
+/Resources 80 0 R
+/Contents[45 0 R 4 0 R 81 0 R 47 0 R]
+/Parent 100 0 R
+>>
+endobj
+100 0 obj
+<<
+/Type/Pages
+/Count 3
+/Kids[71 0 R 75 0 R 79 0 R]
+/Parent 3 0 R
+>>
+endobj
+83 0 obj
+<<
+/Type/Page
+/Resources 84 0 R
+/Contents[45 0 R 4 0 R 85 0 R 47 0 R]
+/Parent 101 0 R
+>>
+endobj
+87 0 obj
+<<
+/Type/Page
+/Resources 88 0 R
+/Contents[45 0 R 4 0 R 89 0 R 47 0 R]
+/Parent 101 0 R
+>>
+endobj
+91 0 obj
+<<
+/Type/Page
+/Resources 92 0 R
+/Contents[45 0 R 4 0 R 96 0 R 47 0 R]
+/Parent 101 0 R
+>>
+endobj
+101 0 obj
+<<
+/Type/Pages
+/Count 3
+/Kids[83 0 R 87 0 R 91 0 R]
+/Parent 3 0 R
+>>
+endobj
+3 0 obj
+<<
+/Type/Pages
+/Count 11
+/Kids[98 0 R 99 0 R 100 0 R 101 0 R]
+/MediaBox[0 0 612 792]
+>>
+endobj
+45 0 obj
+<<
+/Length 1
+>>
+stream
+
+endstream
+endobj
+47 0 obj
+<<
+/Length 1
+>>
+stream
+
+endstream
+endobj
+4 0 obj
+<<
+/Length 30
+>>
+stream
+1.00028 0 0 1.00028 72 720 cm
+endstream
+endobj
+102 0 obj
+<<
+>>
+endobj
+103 0 obj
+null
+endobj
+104 0 obj
+<<
+>>
+endobj
+2 0 obj
+<<
+/Type/Catalog
+/Pages 3 0 R
+/Outlines 102 0 R
+/Threads 103 0 R
+/Names 104 0 R
+>>
+endobj
+xref
+0 105
+0000000000 65535 f
+0000119032 00000 n
+0000121028 00000 n
+0000120678 00000 n
+0000120881 00000 n
+0000119196 00000 n
+0000014835 00000 n
+0000000009 00000 n
+0000038562 00000 n
+0000038378 00000 n
+0000000908 00000 n
+0000043561 00000 n
+0000043375 00000 n
+0000001901 00000 n
+0000047897 00000 n
+0000047711 00000 n
+0000002818 00000 n
+0000051956 00000 n
+0000051768 00000 n
+0000003803 00000 n
+0000004720 00000 n
+0000066322 00000 n
+0000066127 00000 n
+0000005805 00000 n
+0000071544 00000 n
+0000071358 00000 n
+0000006786 00000 n
+0000081106 00000 n
+0000080917 00000 n
+0000007513 00000 n
+0000088964 00000 n
+0000088778 00000 n
+0000008459 00000 n
+0000093012 00000 n
+0000092818 00000 n
+0000009423 00000 n
+0000094911 00000 n
+0000094724 00000 n
+0000010405 00000 n
+0000097538 00000 n
+0000097353 00000 n
+0000011396 00000 n
+0000110998 00000 n
+0000110812 00000 n
+0000012123 00000 n
+0000120781 00000 n
+0000013092 00000 n
+0000120831 00000 n
+0000014678 00000 n
+0000119298 00000 n
+0000017989 00000 n
+0000113372 00000 n
+0000113185 00000 n
+0000014896 00000 n
+0000015837 00000 n
+0000017899 00000 n
+0000119479 00000 n
+0000020206 00000 n
+0000018051 00000 n
+0000020105 00000 n
+0000119583 00000 n
+0000023672 00000 n
+0000115589 00000 n
+0000115394 00000 n
+0000020268 00000 n
+0000021203 00000 n
+0000023559 00000 n
+0000119687 00000 n
+0000025635 00000 n
+0000023734 00000 n
+0000025546 00000 n
+0000119876 00000 n
+0000027816 00000 n
+0000025697 00000 n
+0000027714 00000 n
+0000119981 00000 n
+0000030457 00000 n
+0000027878 00000 n
+0000030379 00000 n
+0000120086 00000 n
+0000031583 00000 n
+0000030519 00000 n
+0000031516 00000 n
+0000120277 00000 n
+0000034047 00000 n
+0000031645 00000 n
+0000033946 00000 n
+0000120382 00000 n
+0000036072 00000 n
+0000034109 00000 n
+0000035994 00000 n
+0000120487 00000 n
+0000038316 00000 n
+0000117233 00000 n
+0000117040 00000 n
+0000036134 00000 n
+0000037119 00000 n
+0000038203 00000 n
+0000119402 00000 n
+0000119791 00000 n
+0000120191 00000 n
+0000120592 00000 n
+0000120960 00000 n
+0000120983 00000 n
+0000121005 00000 n
+trailer
+<<
+/Size 105
+/Root 2 0 R
+/Info 1 0 R
+>>
+startxref
+121126
+%%EOF
diff --git a/obsolete/macros/latex/contrib/texmate/texmatesample.pdf b/obsolete/macros/latex/contrib/texmate/texmatesample.pdf
new file mode 100644
index 0000000000..a8acc86fc6
--- /dev/null
+++ b/obsolete/macros/latex/contrib/texmate/texmatesample.pdf
@@ -0,0 +1,3242 @@
+%PDF-1.2
+7 0 obj
+<<
+/Type/Encoding
+/Differences[33/exclam/quotedblright/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/exclamdown/equal/questiondown/question/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/quotedblleft/bracketright/circumflex/dotaccent/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/endash/emdash/hungarumlaut/tilde/dieresis/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi
+173/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/dieresis
+255/dieresis]
+>>
+endobj
+10 0 obj
+<<
+/Encoding 7 0 R
+/Type/Font
+/Subtype/Type1
+/Name/F1
+/FontDescriptor 9 0 R
+/BaseFont/JHKLNG+CMR17
+/FirstChar 33
+/LastChar 196
+/Widths[249.6 458.6 772.1 458.6 772.1 719.8 249.6 354.1 354.1 458.6 719.8 249.6 301.9
+249.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 249.6 249.6
+249.6 719.8 432.5 432.5 719.8 693.3 654.3 667.6 706.6 628.2 602.1 726.3 693.3 327.6
+471.5 719.4 576 850 693.3 719.8 628.2 719.8 680.5 510.9 667.6 693.3 693.3 954.5 693.3
+693.3 563.1 249.6 458.6 249.6 458.6 249.6 249.6 458.6 510.9 406.4 510.9 406.4 275.8
+458.6 510.9 249.6 275.8 484.7 249.6 772.1 510.9 458.6 510.9 484.7 354.1 359.4 354.1
+510.9 484.7 667.6 484.7 484.7 406.4 458.6 917.2 458.6 458.6 458.6 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 576 772.1 719.8 641.1 615.3 693.3
+667.6 719.8 667.6 719.8 0 0 667.6 525.4 499.3 499.3 748.9 748.9 249.6 275.8 458.6
+458.6 458.6 458.6 458.6 693.3 406.4 458.6 667.6 719.8 458.6 837.2 941.7 719.8 249.6
+458.6]
+>>
+endobj
+13 0 obj
+<<
+/Encoding 7 0 R
+/Type/Font
+/Subtype/Type1
+/Name/F2
+/FontDescriptor 12 0 R
+/BaseFont/YABOTK+CMR12
+/FirstChar 33
+/LastChar 196
+/Widths[272 489.6 816 489.6 816 761.6 272 380.8 380.8 489.6 761.6 272 326.4 272 489.6
+489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 272 272 272 761.6 462.4
+462.4 761.6 734 693.4 707.2 747.8 666.2 639 768.3 734 353.2 503 761.2 611.8 897.2
+734 761.6 666.2 761.6 720.6 544 707.2 734 734 1006 734 734 598.4 272 489.6 272 489.6
+272 272 489.6 544 435.2 544 435.2 299.2 489.6 544 272 299.2 516.8 272 816 544 489.6
+544 516.8 380.8 386.2 380.8 544 516.8 707.2 516.8 516.8 435.2 489.6 979.2 489.6 489.6
+489.6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 611.8 816
+761.6 679.6 652.8 734 707.2 761.6 707.2 761.6 0 0 707.2 571.2 544 544 816 816 272
+299.2 489.6 489.6 489.6 489.6 489.6 734 435.2 489.6 707.2 761.6 489.6 883.8 992.6
+761.6 272 489.6]
+>>
+endobj
+16 0 obj
+<<
+/Type/Font
+/Subtype/Type1
+/Name/F3
+/FontDescriptor 15 0 R
+/BaseFont/WBOKNY+CMTT12
+/FirstChar 33
+/LastChar 196
+/Widths[514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6
+514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6
+514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6
+514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6
+514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6
+514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6
+514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 514.6 514.6 514.6 514.6 514.6
+514.6 514.6 514.6 514.6 514.6 0 0 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6
+514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6
+514.6 514.6]
+>>
+endobj
+19 0 obj
+<<
+/Encoding 7 0 R
+/Type/Font
+/Subtype/Type1
+/Name/F4
+/FontDescriptor 18 0 R
+/BaseFont/YEIQKP+CMBX12
+/FirstChar 33
+/LastChar 196
+/Widths[342.6 581 937.5 562.5 937.5 875 312.5 437.5 437.5 562.5 875 312.5 375 312.5
+562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 312.5 312.5 342.6
+875 531.3 531.3 875 849.5 799.8 812.5 862.3 738.4 707.2 884.3 879.6 419 581 880.8
+675.9 1067.1 879.6 844.9 768.5 844.9 839.1 625 782.4 864.6 849.5 1162 849.5 849.5
+687.5 312.5 581 312.5 562.5 312.5 312.5 546.9 625 500 625 513.3 343.8 562.5 625 312.5
+343.8 593.8 312.5 937.5 625 562.5 625 593.8 459.5 443.8 437.5 625 593.8 812.5 593.8
+593.8 500 562.5 1125 562.5 562.5 562.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 675.9 937.5 875 787 750 879.6 812.5 875 812.5 875 0 0 812.5
+656.3 625 625 937.5 937.5 312.5 343.8 562.5 562.5 562.5 562.5 562.5 849.5 500 574.1
+812.5 875 562.5 1018.5 1143.5 875 312.5 562.5]
+>>
+endobj
+22 0 obj
+<<
+/Encoding 7 0 R
+/Type/Font
+/Subtype/Type1
+/Name/F5
+/FontDescriptor 21 0 R
+/BaseFont/NPEQFE+CMBX10
+/FirstChar 33
+/LastChar 196
+/Widths[350 602.8 958.3 575 958.3 894.4 319.4 447.2 447.2 575 894.4 319.4 383.3 319.4
+575 575 575 575 575 575 575 575 575 575 575 319.4 319.4 350 894.4 543.1 543.1 894.4
+869.4 818.1 830.6 881.9 755.6 723.6 904.2 900 436.1 594.4 901.4 691.7 1091.7 900
+863.9 786.1 863.9 862.5 638.9 800 884.7 869.4 1188.9 869.4 869.4 702.8 319.4 602.8
+319.4 575 319.4 319.4 559 638.9 511.1 638.9 527.1 351.4 575 638.9 319.4 351.4 606.9
+319.4 958.3 638.9 575 638.9 606.9 473.6 453.6 447.2 638.9 606.9 830.6 606.9 606.9
+511.1 575 1150 575 575 575 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 691.7 958.3 894.4 805.6 766.7 900 830.6 894.4 830.6 894.4 0 0 830.6 670.8
+638.9 638.9 958.3 958.3 319.4 351.4 575 575 575 575 575 869.4 511.1 597.2 830.6 894.4
+575 1041.7 1169.4 894.4 319.4 575]
+>>
+endobj
+25 0 obj
+<<
+/Encoding 7 0 R
+/Type/Font
+/Subtype/Type1
+/Name/F6
+/FontDescriptor 24 0 R
+/BaseFont/WWUWKJ+CMR10
+/FirstChar 33
+/LastChar 196
+/Widths[277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8
+500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8
+750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8
+680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8
+277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6
+500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8 444.4 500 1000 500
+500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 625 833.3
+777.8 694.4 666.7 750 722.2 777.8 722.2 777.8 0 0 722.2 583.3 555.6 555.6 833.3 833.3
+277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8
+277.8 500]
+>>
+endobj
+28 0 obj
+<<
+/Encoding 7 0 R
+/Type/Font
+/Subtype/Type1
+/Name/F7
+/FontDescriptor 27 0 R
+/BaseFont/YEFKGO+CMSS10
+/FirstChar 33
+/LastChar 196
+/Widths[319.4 500 833.3 500 833.3 758.3 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8
+500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 319.4 777.8 472.2 472.2 666.7
+666.7 666.7 638.9 722.2 597.2 569.4 666.7 708.3 277.8 472.2 694.4 541.7 875 708.3
+736.1 638.9 736.1 645.8 555.6 680.6 687.5 666.7 944.4 666.7 666.7 611.1 288.9 500
+288.9 500 277.8 277.8 480.6 516.7 444.4 516.7 444.4 305.6 500 516.7 238.9 266.7 488.9
+238.9 794.4 516.7 500 516.7 516.7 341.7 383.3 361.1 516.7 461.1 683.3 461.1 461.1
+434.7 500 1000 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 541.7 833.3 777.8 611.1 666.7 708.3 722.2 777.8 722.2 777.8 0 0 722.2
+583.3 536.1 536.1 813.9 813.9 238.9 266.7 500 500 500 500 500 666.7 444.4 480.6 722.2
+777.8 500 861.1 972.2 777.8 238.9 500]
+>>
+endobj
+31 0 obj
+<<
+/Encoding 7 0 R
+/Type/Font
+/Subtype/Type1
+/Name/F8
+/FontDescriptor 30 0 R
+/BaseFont/QWMCWQ+CMR7
+/FirstChar 33
+/LastChar 196
+/Widths[323.4 569.4 938.5 569.4 938.5 877 323.4 446.4 446.4 569.4 877 323.4 384.9
+323.4 569.4 569.4 569.4 569.4 569.4 569.4 569.4 569.4 569.4 569.4 569.4 323.4 323.4
+323.4 877 538.7 538.7 877 843.3 798.6 815.5 860.1 767.9 737.1 883.9 843.3 412.7 583.3
+874 706.4 1027.8 843.3 877 767.9 877 829.4 631 815.5 843.3 843.3 1150.8 843.3 843.3
+692.5 323.4 569.4 323.4 569.4 323.4 323.4 569.4 631 507.9 631 507.9 354.2 569.4 631
+323.4 354.2 600.2 323.4 938.5 631 569.4 631 600.2 446.4 452.6 446.4 631 600.2 815.5
+600.2 600.2 507.9 569.4 1138.9 569.4 569.4 569.4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 706.4 938.5 877 781.8 754 843.3 815.5 877 815.5
+877 0 0 815.5 677.6 646.8 646.8 970.2 970.2 323.4 354.2 569.4 569.4 569.4 569.4 569.4
+843.3 507.9 569.4 815.5 877 569.4 1013.9 1136.9 877 323.4 569.4]
+>>
+endobj
+34 0 obj
+<<
+/Encoding 7 0 R
+/Type/Font
+/Subtype/Type1
+/Name/F9
+/FontDescriptor 33 0 R
+/BaseFont/PATSLS+CMR6
+/FirstChar 33
+/LastChar 196
+/Widths[351.8 611.1 1000 611.1 1000 935.2 351.8 481.5 481.5 611.1 935.2 351.8 416.7
+351.8 611.1 611.1 611.1 611.1 611.1 611.1 611.1 611.1 611.1 611.1 611.1 351.8 351.8
+351.8 935.2 578.7 578.7 935.2 896.3 850.9 870.4 915.7 818.5 786.1 941.7 896.3 442.6
+624.1 928.7 753.7 1090.7 896.3 935.2 818.5 935.2 883.3 675.9 870.4 896.3 896.3 1220.4
+896.3 896.3 740.7 351.8 611.1 351.8 611.1 351.8 351.8 611.1 675.9 546.3 675.9 546.3
+384.3 611.1 675.9 351.8 384.3 643.5 351.8 1000 675.9 611.1 675.9 643.5 481.5 488
+481.5 675.9 643.5 870.4 643.5 643.5 546.3 611.1 1222.2 611.1 611.1 611.1 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 753.7 1000 935.2 831.5
+805.5 896.3 870.4 935.2 870.4 935.2 0 0 870.4 736.1 703.7 703.7 1055.5 1055.5 351.8
+384.3 611.1 611.1 611.1 611.1 611.1 896.3 546.3 611.1 870.4 935.2 611.1 1077.8 1207.4
+935.2 351.8 611.1]
+>>
+endobj
+37 0 obj
+<<
+/Encoding 7 0 R
+/Type/Font
+/Subtype/Type1
+/Name/F10
+/FontDescriptor 36 0 R
+/BaseFont/JKKPOA+CMR8
+/FirstChar 33
+/LastChar 196
+/Widths[295.1 531.3 885.4 531.3 885.4 826.4 295.1 413.2 413.2 531.3 826.4 295.1 354.2
+295.1 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 295.1 295.1
+295.1 826.4 501.7 501.7 826.4 795.8 752.1 767.4 811.1 722.6 693.1 833.5 795.8 382.6
+545.5 825.4 663.6 972.9 795.8 826.4 722.6 826.4 781.6 590.3 767.4 795.8 795.8 1091
+795.8 795.8 649.3 295.1 531.3 295.1 531.3 295.1 295.1 531.3 590.3 472.2 590.3 472.2
+324.7 531.3 590.3 295.1 324.7 560.8 295.1 885.4 590.3 531.3 590.3 560.8 414.1 419.1
+413.2 590.3 560.8 767.4 560.8 560.8 472.2 531.3 1062.5 531.3 531.3 531.3 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 663.6 885.4 826.4 736.8
+708.3 795.8 767.4 826.4 767.4 826.4 0 0 767.4 619.8 590.3 590.3 885.4 885.4 295.1
+324.7 531.3 531.3 531.3 531.3 531.3 795.8 472.2 531.3 767.4 826.4 531.3 958.7 1076.8
+826.4 295.1 531.3]
+>>
+endobj
+39 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 1224
+>>
+stream
+xÚÕWKsÛF ¾÷WðVr&Zï›Ü[í$NÝéÍê43ukj%qLŠ.vüï ,V–l9¹´ÓIO$±
+‘¼J1]e )˜ñð&¯ûî~Û°›‡BÚ< ÅE^ÒäÛ0Žôéw»~òSÓïð[æMzþŠŠÏ.e&@¥‰†Å”‚Û‹7œÇ‘+–i'†Wnˆ—~ ¦Dû|SRjVÚc7~ý&E£ïîÛôîw+2ë0„]NÌ5_®"s.‹Jäa†¦îAù䇺ñ$©’ a˜Ô*s:Š®Q¬ïï~Út¾i {rȼ
+Í-Èœj”* i¼ðcS“®š¼{(”ÌÑC™£6H>©ŒVoªÓ†UTšÔ]Îäý
+¤›°¢×yŒM0R·iJ—‡z¯˜“`ÊŽwPG<‡[¤dV%ž{£~W›ÃbÀˆ·‚ÍÕq
+[ì
+*òé•.º$n#‰!ÙÛ6ñn²¹„a…8ð«Ã¯™²( é(w»zðóÔ¬ç–hÄ£¼ëžFÁÈÒ¦fxÌé´8€ 3d¬‚Œû.l{ä~$Â>l¾éÃz˜Çi€¥oib!¤W‰Þ›0søâë©}¢ƒÇ­Oä&=#Æã;lš<¿_ß­åd'5ò.`@N\³tuA0¿t#¢ŸÓá~¯ÄàKÐŒÁß¼?®tÉc´+jyæŸvHžü:Â_s3„ý`‰kBÿ^¥?Æö«9%`£”jº{dy?bø•J~ÁVùrtÓY=Çt¸"a@’,ÚøfÀs¢xØžÆf¤¯­_Ñqç£ O¤ý¡0À94>mEHÃÕ†Öa´òØ›ùEböïeؾ690?>פƒ¿ ›u™pŽÉçï6»Ž5ì2Ã\+Pâ/œÛôW‘jFð¬LE+-nž¬¢|¦ƒÕË¢X„ÂåÑy þÜßHcÁÇÝ;"HûÃIÂrràÐ}È‹þhº
+endstream
+endobj
+41 0 obj
+<<
+/F1 10 0 R
+/F2 13 0 R
+/F3 16 0 R
+/F4 19 0 R
+/F5 22 0 R
+/F6 25 0 R
+/F7 28 0 R
+/F8 31 0 R
+/F9 34 0 R
+/F10 37 0 R
+>>
+endobj
+6 0 obj
+<<
+/ProcSet[/PDF/Text/ImageC]
+/Font 41 0 R
+>>
+endobj
+44 0 obj
+<<
+/Type/Encoding
+/Differences[0/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/exclam/quotedblright/numbersign/sterling/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/exclamdown/equal/questiondown/question/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/quotedblleft/bracketright/circumflex/dotaccent/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/endash/emdash/hungarumlaut/tilde/dieresis/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi
+173/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/dieresis
+255/dieresis]
+>>
+endobj
+47 0 obj
+<<
+/Encoding 44 0 R
+/Type/Font
+/Subtype/Type1
+/Name/F11
+/FontDescriptor 46 0 R
+/BaseFont/CLNKKC+CMTI10
+/FirstChar 33
+/LastChar 196
+/Widths[306.7 514.4 817.8 769.1 817.8 766.7 306.7 408.9 408.9 511.1 766.7 306.7 357.8
+306.7 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 306.7 306.7
+306.7 766.7 511.1 511.1 766.7 743.3 703.9 715.6 755 678.3 652.8 773.6 743.3 385.6
+525 768.9 627.2 896.7 743.3 766.7 678.3 766.7 729.4 562.2 715.6 743.3 743.3 998.9
+743.3 743.3 613.3 306.7 514.4 306.7 511.1 306.7 306.7 511.1 460 460 511.1 460 306.7
+460 511.1 306.7 306.7 460 255.6 817.8 562.2 511.1 511.1 460 421.7 408.9 332.2 536.7
+460 664.4 463.9 485.6 408.9 511.1 1022.2 511.1 511.1 511.1 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 627.2 817.8 766.7 692.2 664.4 743.3 715.6
+766.7 715.6 766.7 0 0 715.6 613.3 562.2 587.8 881.7 894.4 306.7 332.2 511.1 511.1
+511.1 511.1 511.1 831.3 460 536.7 715.6 715.6 511.1 882.8 985 766.7 255.6 511.1]
+>>
+endobj
+50 0 obj
+<<
+/Type/Font
+/Subtype/Type1
+/Name/F12
+/FontDescriptor 49 0 R
+/BaseFont/BXWNCK+CMTT10
+/FirstChar 33
+/LastChar 196
+/Widths[525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525
+525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525
+525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525
+525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525
+525 525 525 525 525 525 525 525 525 525 525 525 525 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 525 525 525 525 525 525 525 525 525 525 0 0 525
+525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525
+525 525]
+>>
+endobj
+53 0 obj
+<<
+/Type/Font
+/Subtype/Type1
+/Name/F13
+/FontDescriptor 52 0 R
+/BaseFont/URLVVQ+CMTT9
+/FirstChar 33
+/LastChar 196
+/Widths[525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525
+525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525
+525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525
+525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525
+525 525 525 525 525 525 525 525 525 525 525 525 525 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 525 525 525 525 525 525 525 525 525 525 0 0 525
+525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525
+525 525]
+>>
+endobj
+54 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 2816
+>>
+stream
+xÚYY“ÛÆ~ϯàÛ‚U" Ì
+þÞ-WZ›àWŽÍ+~§AUWíÝÀã•,«¥_·Ü®—ÿ^ÿu+Fùb¥Â8¡SßÑp¦z1Žýó³Ðöuû|FõšR:R*}Û4ár•¤:øG»TY0Ô /ìZ+;K%Ò«8ÑašB‡ß”h%Á®x_ÉÍ®<Xžö¥L=pó‚ç•@-[É"aïxzjj·G–’\¤˜z°Ñ–7η%ÁoË\]_}~ÅIëÞðð+R{w>Îu}ÿŠ;ÞÐ¥¢ùužNp´2ÒTYìËŠûmÇÝq¨»T:¸·®®ˆ€‚ㆽå5¶ª‡®w¼±Ûò ιï~ŒãQoT¤ñ+"Ò?Û¶u/Ý2"Ë4ªãÉímÏ›fºV„Fɖ퇲nQµÔÉ<éTï”Ï/"Ò("†p[rãˆ=<ª4kì(ô,èNL=áUË»¤3 ¶‰î»5†·†8ŽPW¼’Q°é|?#CV.úFö’´¨¥ù8ø0ôeëš6Üñi0¶¬¯ï-yðÐõ–¿z[VåS#½m×JÙ[D—Ã"aâÒY¤š$šh$ ëöÈó+~«`Û×°Îd©&.¼ÔiÜ„RÜúºµNNmÝ`ËŠw Z`[·õP—,>…2êŽk»á’àÈ]i,=úJ›„d
+øˆ:HÏ ˆˆ6)B†{\¢FdŠÞÈÌn’É#ÁÄ NJB(øûÆC:™4:Î˾<gÛ¾;x’öú
+^/€dÙ£.§x+~ãY»¾<î±k‚'xÛg2:0+wzZ}\¢²¯K4MÇ{-•¦[Ø©ÛªÞ0[Ø­jx#c{¡ f6"çÚa^sº&I¨X=æ7w<ŠŠ- L¥^¥5,e•†1û‘`©½XZ¶eóú»•Ep¥tºÒd
+€õ©Ü-ØÈU¨2bü-‰,g
+²-*Ÿ/=nœ‡‘wÒwrò–fsrL”ÿ Sä4`hDì°cÂi2@¡æûåÊ€›—eåi¨·§†Wb’ÍH­çË:4gáWU#2"içà X¯ò0“.ýL8²£Á üš³Í–Ì`v>SÇå 0ÙN]‚Ogþ\ðÄsåf„˜`!FS\"{ÚCGöÁÁ•;§–ƒ(øÀgüü’BÐCäOXø`y´Ññظ±‚kðø ×µ<ý²÷÷ wB¶Å¸çamÓÈô£2‘ýT#ˆ\iÉ"¦ž\
+®!Ró1å`?¡E‡ÕðéÒÒlZFp¼åƒýžD
+ߎNè4‹ÞþçT÷Ì*®DaËTXœ©‚ŠúR{}ÐZ^pdé$içqµ·$ Œcî±’à¸NðnðÈZ!¦#
+2wúC£•Äò){–R(úB>=Ö\V&Æ\Ù ¿ÛÃ|èã%¶Ì­Þ‘‚`ê‚õ
+«©¸EwNGþÀ7‚MfR™Š 7/RdaŽ1ð\ü–?Øm )
+žß“—ÆHîá”îH³qðËÉÚVVþA†£P³Ôh°ÄÁ|mÊ–?¦*Ž’3*Û¯V‘˜¯£§tªÈ=>Ò}Æ›\ït8  LÌøMªr3PñËWS²óoʽ5 í™9½È½yi~&þ6îâ1¹(.Q
+â½G‚Ù)8%²±D2[œ–#ëß­ŒS+À÷×Þ%Š&°»`ì¿?ÿúþþ—ŸþwÅ`œ†QrædVÆŠôºHÉsÙïNÞâ' Ú—jñc¦r8Üq;it°À†jU`(ë8ó±Ócšž2ÏY9ì9¿´L•‰É¶×)Ec·dÆRÍ„¶÷z>ÿ[ ~Û׃½#È=ç<s–QA?󒯔ÂA>g×8nwõ”B·ÃÚòÃcñÁgŸŸ™C=+û{09+wè3ªŒ<Ò¤@w…AÕ„èN¡¯ˆ‰¿u°Ê?ÔûÓ‡àñtû?À(ú C/Vi’‡™¾UëHoTPÒËZÇ3Õâ(aNÌYÂœHÑÿ¬˜1Çqžâ$é€#uôT(Ñ
+Jð0 ñn9ÉmýY`V
+\g<Î\þhR£pÉ +ÄòW=Fp;|8Ö¾¯+©HÈß)€«ú ¸³…ˆ–ŸÆ;ZÈ5æ¼ÞF•˜àŸþ@’ŸÆ
+endstream
+endobj
+55 0 obj
+<<
+/F6 25 0 R
+/F11 47 0 R
+/F7 28 0 R
+/F12 50 0 R
+/F4 19 0 R
+/F5 22 0 R
+/F13 53 0 R
+>>
+endobj
+43 0 obj
+<<
+/ProcSet[/PDF/Text/ImageC]
+/Font 55 0 R
+>>
+endobj
+58 0 obj
+<<
+/Type/Encoding
+/Differences[0/x0/x1/x2/x3/x4/x5/x6/x7/x8/x9/xa/xb/xc/xd/xe/xf/x10/x11/x12/x13/x14/x15/x16/x17/x18/x19/x1a/x1b/x1c/x1d/x1e/x1f/x20/x21/x22/x23/x24/x25/x26/x27/x28/x29/x2a/x2b/x2c/x2d/x2e/x2f/x30/x31/x32/x33/x34/x35/x36/x37/x38/x39/x3a/x3b/x3c/x3d/x3e/x3f/x40/x41/x42/x43/x44/x45/x46/x47/x48/x49/x4a/x4b/x4c/x4d/x4e/x4f/x50/x51/x52/x53/x54/x55/x56/x57/x58/x59/x5a/x5b/x5c/x5d/x5e/x5f/x60/x61/x62/x63/x64/x65/x66/x67/x68/x69/x6a/x6b/x6c/x6d/x6e/x6f/x70/x71/x72/x73/x74/x75/x76/x77/x78/x79/x7a/x7b/x7c/x7d/x7e/x7f/x80/x81/x82/x83/x84/x85/x86/x87/x88/x89/x8a/x8b/x8c/x8d/x8e/x8f/x90/x91/x92/x93/x94/x95/x96/x97/x98/x99/x9a/x9b/x9c/x9d/x9e/x9f/xa0/xa1/xa2/xa3/xa4/xa5/xa6/xa7/xa8/xa9/xaa/xab/xac/xad/xae/xaf/xb0/xb1/xb2/xb3/xb4/xb5/xb6/xb7/xb8/xb9/xba/xbb/xbc/xbd/xbe/xbf/xc0/xc1/xc2/xc3/xc4/xc5/xc6/xc7/xc8/xc9/xca/xcb/xcc/xcd/xce/xcf/xd0/xd1/xd2/xd3/xd4/xd5/xd6/xd7/xd8/xd9/xda/xdb/xdc/xdd/xde/xdf/xe0/xe1/xe2/xe3/xe4/xe5/xe6/xe7/xe8/xe9/xea/xeb/xec/xed/xee/xef/xf0/xf1/xf2/xf3/xf4/xf5/xf6/xf7/xf8/xf9/xfa/xfb/xfc/xfd/xfe/xff]
+>>
+endobj
+61 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 2717
+>>
+stream
+xÚ•Ymã¶þÞ_a VFϬIŠzÉ¡z½$h\
+d¨ œlsת-É•äÛÛ ÈoÏ g$Ñ’¼»ùbK|›á¼>3Z¬Åz½x\¸¿ïîÿôY¤"÷‹HŠØ,V‘¿ûÿ>ÚS^ä­­›åîÿ¾øöÞmˆú R&"Ný?TK_–* l³\…ð² ²riPx³4YâÀ¥Àßír¥¢
+Îpœ\ç<ÄÁ¾¯jÇþJ+!ÃÅJJ‘·-ò]uªÊF,W‘VÁ§ªš:ƒêÿ£ =ØÆÒãS~:ÑÓ–ñ
+ÇÎÙ‘„µ-îóÚîÚÓó2Q²!eÐäåŽ÷Ü;†”I+Ç2ó­3ÂèE?ö¯"k;2Ùqé(Ð]T¤q¥w™“—Öšx‡ÿÌñ«Ãࡪá 6/y‚çK¹k/Y›W%H Mð#ïÝU—º±ïè¥=ä Dÿ0}iÚªÈζ'+#ߎV*`Þ•cí¯ Dܘh4Шô†E©HD1ì]GÂÄnó_Ü-¢¸ã"J‚îOꂹ§fKý¼CA1I˜+Øì7wË•‘:ø/0OK³†x—jà E(kGû4=ð—ˆ$å9¢’•–é´ÓËÚ+)Œ„V¾’z^ÞM«D¤ÝÿéÆ"Jæè*PÒJ8ñµqØ‘YÔ¬4ÁOUaÛ¼ ]¸eYµ ¾g|æQ“ÎõpòiT:¨´àynÁçz»½÷J1X ¨À¹j™Y£nËGôWm¢ AA9p+vYI£í¥.i(oòã…ÍJ²u˜«6ÊDôˆF2½H‹´cv³)²£Ýf5±6ºU+c^ÉF/5˜[}(ÕK'Á„»{t=¿s|( ®5Ÿt¿·©Øéîð”·ô¿ÍÜåìùåÔ®ð(5æj–jäIbêÔ2N…yõn©ep¼•ÖNÓ+ ¦¢9àªË Ãø:‚h¸.Ï—–Æ7ózÂÓT'“?ŽY7ÃÜf‰ñV™À~A‡°%ùQê
+!€Üµ4~Ê)¾ ´‚Ÿ*š÷Ø'1_‰K4òMü”ï¢2-Ùäj`j°PÍîØäåäŽC#ª(8Š' ±½}È.§–|fá`°ó–ä¢Á¦ïÐýñÀöñYƒ ÂðŽ”‡ãµÝ[p¬ØÅ_¼§%™ ž Ê o¿!Idg0o{j(¡ y+ˆ"’CK±Ô%”´7-|ò3¼8Ór‰l}òd(tÕ¿¾`Y|ÚUììJ´+$÷ìè¡Ùµ¶ÜÛ=-i«¶¾äMî’'¤]v  ¼Êë¬ê‰Õ€_‡½Õ
+#¦ŽL‡œàº ­àv*õÑË‚ãJË–Œ<¨‰ï†ÄOM,­“¾Ô<ì®'£a]ó —/hQ7ŒºBër‡ùdJ˜OÒ¥d_kÁ@Ö}ôDê¤) ÂRMO.OÓ=œs á¦Ì
+~ç8ÚÐE1\Ö;Ã7P‚M͘Š‘¾±l6Ç2<´cA_GƒÍ„.3wèW¥P:èß`’¾EÆ(Tg¤;
+ —gMUp ȵpu>ñÀ¾êCf¸ÀŒºè»c±4N©ä —À# §ï–)àI¯nŒC®cã×ó!„[ :V"Œ;$„2¸´„õtÜ%í£AX²mä`9®;ÐÒXÖÐBÒs|Å‚[Pd öÄÆP͈«Ð"q’ &½ŸN‡ðVÃbŠkÚÚfX…wA? @ú‚Ò\脪 Ô ÏÿÍ{zP<ñi§ùá!â)ÍS¶†²hRMI¢1=y‘€ªBkægÌs3e†yy+€:úêøݨ›Ð£—9Tk„»/q8eíýXC´3#¥ÎC°qE’áè(Ìå>FtOªF|i#¸xEÏçqž•ŠÞÎýÑtœº‹¹´¬ÑÈë‡&ëø:웹°2o76é¶:kCòzJ^%CÖù0>Ã+xQò:N@ò° éç¦0Tàí9'È'BßǨÅ}¤ŒëÙã¨ëd`ÞÙS|ë˾…E)Æõ¶|‡v«»Hß».à£ÅSo€4!€ (äD$ûÓâ§ÑBˆa ½!­Y6LÄ7‘tå}ö€x¯ºÝæŠÃ«ÿ<ô2©\“ƹ2ºpß2¥šŽWl‚)pÔ VK¬›_¦.3dœ®«ê 0>”ƒWìÖ Æ—`8'ÁTbeUŒ$ú‚“X$Ò—àÓ+6Ì
+ͪ%䉖 îé
+Ò6ƒ Øh€ª¿ë¨˜«Oè+¹i8 ÈfSWÕq®3s¯0~«|¾üÒQßKÝ?ôi¶ys¨ÎsûåÛøßÅÚr® –
+endstream
+endobj
+62 0 obj
+<<
+/F5 22 0 R
+/F6 25 0 R
+/F12 50 0 R
+/F13 53 0 R
+/F14 59 0 R
+/F4 19 0 R
+/F15 60 0 R
+>>
+endobj
+57 0 obj
+<<
+/ProcSet[/PDF/Text/ImageC]
+/Font 62 0 R
+>>
+endobj
+67 0 obj
+<<
+/Type/Font
+/Subtype/Type1
+/Name/F16
+/FontDescriptor 66 0 R
+/BaseFont/ATAQGD+CMSY10
+/FirstChar 33
+/LastChar 196
+/Widths[1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8
+275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8
+611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 762 689.7 1200.9
+820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7
+666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9 277.8
+500 500 611.1 500 277.8 833.3 750 833.3 416.7 666.7 666.7 777.8 777.8 444.4 444.4
+444.4 611.1 777.8 777.8 777.8 777.8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 0 0 777.8
+777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8
+777.8 777.8 1000 1000 777.8 777.8 1000 777.8]
+>>
+endobj
+68 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 3341
+>>
+stream
+xÚ­ZIoäƾçWôœ† H4Y —ñÁ°;H °!À܆ê¦$BlRi²gFÀüø¼­Èâ2’ ä¢.Öúê-ß[J›(Œ¢Íý†~þ¹¹ºþîg³‰M¨Íæún“Äaj7—‰ÂŸëüØíe+ü½=Ëf«ã /NÏÛ›ëo~º¦ÕÉ&óÄ[œ™Ð&´øª¨ší¥Î£`¿UiðPvÛí%tÊ‹í¥‰lÐ?”ü$x(Nž/OxÎw?Çj8"¶*´vÑöòðH@ƱŒµO°”œWÈî| 8‚®‘™ Ü^&± ®éJqdÂÔl.Uóõ¢nZ½úþs,z!ösU×Üú¡Vo2¡(HC›ûäBæ¼ÕÍü± “Dæ—_žˆG徇3´¡;h¬ƒÞOøÉÐ
+/z«:™ÚðwQ›¢¯&Ó[žÄ<‡Ym# –?Ò—_zà16øy›ÁÌ÷—_ŠãS]~ðÁSš„I²Ð¤t™¯ÚÀ>4é׃ý[þZšw7ܾúr°ï¤û·/ÃmeÕïeün·û|Uöp¡›¯þ¹vq¬ŠB£èX<•¥2Ί(§B¿ò¨õT(wüG"fâQ 9íÄ9îmü½³xºw²¶7]|v4andü{f31Mßá'ÎÕø3¿“1aäît%£ža¢]òàN=?8Aõvw~·¸sä_˜ÈB2’„Ò`Éšq\ømAM6ªøHOì €c„]9% µ›ùû|—4ÌSÇëøÝRN`Í)hJÈv¸_ËÝèBR€Žé ¨U(tštkÆBP°B@žªìØ÷ÎPo®Øüš²ëËÃkÆeàþ±—g&bD{4"±(4(éþå!Ó:|Ù'`Q·dQn‘~÷ÃÍÍn÷=ÿò¿fj6_p‘§Ò †l*"».¢ê0€“®§@ñ÷ e‹”÷umZ*‚R¡Jÿ/ªŠÆÁ.b_·îJÉò_^Ð_Z8IÈÖ‡¥&
+ó·QºO”ä!ø<ÀLMîd<……pÔ0aÇ„hþf·ŸfT¨j¶à>tDˆ%´r!ƒ<Lâ·0"^b¦Uö6SLMÈ>áG
+ TðŒa@{Æ8èJŽD2‰@¯³ä­
+¹ÉâK=ZP«ðK,35B4òP
+𤱞²kÞ÷¢OOOdÑ0xë|´«¾+ë;n“s8À ¿p“F¬¡ ‰Èk°Ç¿?Í=…¸˜ô=A}çÉZŽ%ㆿeÑ=¿´å;We͇¿c)jÐvÐP¿\Lj¥ø!Å¡Š±wåŽ;ž'5Ÿ4F¿þ†PoÅõhÈp+ÉgÝó©f¤l‘vìeç­cqzt}²d¨Vq=tGlìë¶z9ÄŠÆ…ûEVi4ÃÐk>¦}â‚•ïcO‡–kqY5]7ÖM
+&ÌQC#ŒòÙLegð:ù¢'ózÀ/%¦†{çÁ
+ײ3æ­ÈIñG*C…žaݲÈféTCÿªöד‚¬z`ãiH‹†è<éãbS­Æì©A$ïy qh|ÄòûÝÓ[
+”ìêœTÕÍΓ‡ÄݦŒnלJ
+&΀wEwàºËÁ‹Ê’1xÁ^NõÐTq¨’)sÏp•#tÕ‘B
+cyÐúñp¨pÊjSëø…Ùƒ„3†UP‘éÁËhŽ^kA¬gŽ‡óñø¼°f;ã·ÀfÜau °çAÏ[Ê·¸.²ç*N6”°ý÷ ñ¿çYãÆ‹è'²ŒLÇ$NJ  &2+q’ñKbx§þÝ2áF †¬e»ß¸«2ï‘L#
+þx¨zŸ³|r1ìÉ2Šó
+}¡?&´’I” ¨RJõ $™,Tk€d€„ËÍcÇ¡¦>ÇèÏ­™4””`2gâÊË•€M¸D¹8ÉÆ'Yï¦óŒêìÿqly±ód΄MÆM!Î •±f¤_º.ü×Í0VÈ\¾Q¬ÇA{@¤S*’#oI‰5]zEu-ç"Tjùo‘ˆ”gHÔ?­ävXí3RΆFOÑ—•[Ackù$½'!™?)|³® mÿ2aW-ìBêT]€Õ];ì"‡wí¹–Ñ±~ç®”îªY+o7 ‡+XW€‚ÄP£Öì ¯Iãàª]Ã_ŒÚí†]Zemø±VÔdœay#{!¶€tظTâ«Ó5Ùy±Ya./®ŽlkÚÄŒF ‡ï”hêÎuCì= |àÀO^Ýè_‡ÞbÐ6ìléÿQ|·
+ø4u«’óÿšù&ØÉ?vLÍZ‹…6¤€ã"=‚“<‡¥ËY@1ÿ› ^íÜÉ‹gÎÐãUyqb+û îäYÌ$½0¢3òªg‚_pêú™—ñ“Ínå•Ow”*ÔH*]_B¤ý©¬WQ ”`œ$z€j¿gÙDñH¾0_¨³ˆø°L½ÌqFÓäØdŒn¿¡ÄÙ¥}›z5>câ~êÉÈ»I2Tæý©,:®€>BÀifEVZe'Y`fGÍL_Œ>Ÿçü¯:ÃGw qx˜xë-½/$CÐ(ý“oÕ‡¡»öíéTvlms@EX©¬úq‚ÔY½÷nJÈŸcÖ·@Wƒ1Œ¿ýL$‰
+endstream
+endobj
+69 0 obj
+<<
+/F4 19 0 R
+/F6 25 0 R
+/F12 50 0 R
+/F13 53 0 R
+/F5 22 0 R
+/F15 60 0 R
+/F14 59 0 R
+/F16 67 0 R
+/F11 47 0 R
+>>
+endobj
+64 0 obj
+<<
+/ProcSet[/PDF/Text/ImageC]
+/Font 69 0 R
+>>
+endobj
+75 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 2404
+>>
+stream
+xÚk“ã¶í{…ïC¦òLL‹½ÚL:Ù&×^{¾½ig»ý µéµfeK'É··múß  $[Îå¾X$‚ ^àY(Âpö8sŸ¿Í®n—¯ãY&²xv»%±ˆ³Ù"V"‰f·ßÿ+¸±{»Ÿ«$x˜/à×6ó…QaÐíòGF–û¼8Ðè1ß[B+Z‚”ö#Ò°%å×ð5Úï ƒ2o»‹˜Õ–Àëj¿·\éòæ¥'þïÛg iDfà#EF<hh­#Þ·pWÁ>„ü¢Û!^â¸Äåk©zy…ƒÐaÞßw»Æ½Ò 3 8û|ÝTDîy¨Ž8‰ƒu~ (ÈHÅA‡HðÝ×ái@¤[W‹âàv‡’C|¼x~ØÐd—3¨§z–2 GBeg¼~#„øöœá8F–7G/^P–a`ë²j-&Á3©8L¤#e,2ÉG~s~L*TÊkxƒÉæLø­á&Š×þŒüDd*:Œ^AŠ‰œ‘áJkY5Rö„2%¤§DÂSA3à~ó õXæ ;ûi¢X(˜Â
+'ªŽLŽI<eáô¬ƒ5
+sgÛ–¦ûʹÏÆÞÏQÅ&
+®ì¶j,­Nê¢:>îÜÄð•Ú^öÉ,YâÄ—f"J˜»ÎY†z[(˜‡¼®‰T»±Ç… ^ÏST,û)ß×¥ýÓà.'
+cבJ‰H:Ê¿ÊèD*
+®×6zÕÝÎÀøùÊvmîïó®Ë×Oß2¢M_ÑhgþBƒmôê×ñ‘ÑäDm„‰Ý‰î@ê
+²‡5#¤3¶0+‘q‡ð×s朄"{ó‡ëÊtzE }ÁIâ`¶ qO.c1nýíÍ Â¨6I¢½f¡€$b³U}_äM¾oÇêù‹ÄWc!ÓT$Êí[5l÷Çuqx„a”‘Y«( 6ž˜-AÁ€Êò…`m×äÅãÎÅ%ð–ç9XoÞl¾FšèS Sj+OÃ,Bºæe8°"˜ýT—9E1ÌØg;vCöÝg .U³qÑž©¿[ï¨9 À7‘'ÇOuâ;­wÝœi¶àÑ冃@þ„”-íð§ú ã¾ui) ÁQ%,l^zg …™={«P‹TÎö3‚Ç= œ½áv m2*@ä¹
+Cr®ÍÀ2íT§h,?ÑN(Í]s÷t7_dYÜõ2#|X®ê»{^­Ý2®)B!åÃf†aÿ…-ü`˜Úc!úË9E}‘âݻߣx¾az‘ÕÛSÔ·
+Ëñu6$âÚ%âf/¸3‚Ô…$OÀ¾žÄɱe FM-"ê 9–o¸ö@V6Õ_4ä¹÷÷î°âPtE^¶“¬8MúZhc·ù±ì&ÑE”±º¹¾z÷Ó¤f–(™Üü’h Br…î"1Iª›´Å8 ¶(6Q;Á¤CHBè}`Év4w-ø]Ë”Èîç´¹`°Lkôî$M‚7|¦«â‡ý|^R5º—/ŽÕß®Ác.Åüðèjn°LW2â]¶”Êž˜ÔÏD/Åb‚ÊAxzB n’о›Ä4¡St-^¿\ë‚¿™‘¿±¥ÛÃc·›öGäP©þ¾®£Dˆ—ÔƘ ‹NFõ6H6Õá w9ÊŠz<Ô^qaY§ü.pK%enGU±‰0óAÉès.áëcVêZ1 û-QµsVÕ6UÛ·p¦ý#x/Cßå8TÝ"*ó¼Ý¡­‡œXwEu¡½£=”tŸ!•â#ÿs¢Qš‰O,¿$Ââk
+Ÿ+R`· µn„½7è#,Œ5}É>5Ø$»…ée•¡ø¨0N®+¬™:;"h[>¹e¾½Ü)Îkdrt;ê«9Ï9± ˆwf¢~xÖeöYí§^ †¨ržI ±ÅÁ\ðq‰x{A÷RÉqx}ïdp]M4
+í]èã<Šà .ò‡’ßÞ]UnZ:‘…›®ù… G:te'ö¢RÉéïž®…>±ÿÆ<Œ>iàXPP¶¥}¶åZXÜ÷¢F§»¢bê›Oç=‡pÜmH¸ÛðžKêÏ5" é8”Î@G%fO˜ ¸€N)­Q&Õé8£„÷`N°²Ø:­Jür‚q9ç3ì3͹A‹ö͆7´üŒ†ˆ Gœ8mNÒ4×–È@6žXÓZ#0
+endstream
+endobj
+76 0 obj
+<<
+/F6 25 0 R
+/F12 50 0 R
+/F13 53 0 R
+/F11 47 0 R
+/F17 72 0 R
+/F5 22 0 R
+/F15 60 0 R
+/F14 59 0 R
+/F18 73 0 R
+/F4 19 0 R
+/F19 74 0 R
+/F8 31 0 R
+/F16 67 0 R
+>>
+endobj
+71 0 obj
+<<
+/ProcSet[/PDF/Text/ImageC]
+/Font 76 0 R
+>>
+endobj
+81 0 obj
+<<
+/Encoding 7 0 R
+/Type/Font
+/Subtype/Type1
+/Name/F20
+/FontDescriptor 80 0 R
+/BaseFont/JKCSYD+CMR9
+/FirstChar 33
+/LastChar 196
+/Widths[285.5 513.9 856.5 513.9 856.5 799.4 285.5 399.7 399.7 513.9 799.4 285.5 342.6
+285.5 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 285.5 285.5
+285.5 799.4 485.3 485.3 799.4 770.7 727.9 742.3 785 699.4 670.8 806.5 770.7 371 528.1
+799.2 642.3 942 770.7 799.4 699.4 799.4 756.5 571 742.3 770.7 770.7 1056.2 770.7
+770.7 628.1 285.5 513.9 285.5 513.9 285.5 285.5 513.9 571 456.8 571 457.2 314 513.9
+571 285.5 314 542.4 285.5 856.5 571 513.9 571 542.4 402 405.4 399.7 571 542.4 742.3
+542.4 542.4 456.8 513.9 1027.8 513.9 513.9 513.9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 642.3 856.5 799.4 713.6 685.2 770.7 742.3 799.4
+742.3 799.4 0 0 742.3 599.5 571 571 856.5 856.5 285.5 314 513.9 513.9 513.9 513.9
+513.9 770.7 456.8 513.9 742.3 799.4 513.9 927.8 1042 799.4 285.5 513.9]
+>>
+endobj
+82 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 2191
+>>
+stream
+xÚíYÝ“Û¶ï_A?…šžâƒèL’©Ý&yhßL:õy¦Y¬)òBR>_þï]`A
+y:ú:I§3y"´À.—ûýƒ¢„$Iô6r?G__þRD”’<®·QF‰L£eÆìãúO¯cIèbI)Kã¯K.Óx«÷õ¡ÅuÛ6÷‹7×ßF/®¤,ÊIž‚%”;A_ºÅRPß°T6­ÿ±®÷¦Å¥¶¯K&c£]±=”H»u´º-º¢®Èb™å2þ¹­Ùxþr_÷b»AÎÙêCé©ÛºÙë®+ª·ø»Þ:Ý“hé¿Ô¼v¤”¤<Z2B‘ø¢'Šh ý D™+°ç±ù°6·®³1ö+ûšÀ4`uj°*I¨vsÓ˜ÊÜ5öºÚÜÜèmgšÕÇÅ2Ãÿ{Ð2éµ<?_ë²nÍÇ››Òè÷æý¾%nUû®¸}JyÈOT0¢”“ÝÖ`pn·Ó]¿2µ§Ìâ¢ERUãïÖì‹u]Ö’­óTlº¸ëna—ÆíˆxUêõ‚eñ;ü Z#ÇÝ®è¼ì}mÙÞ;¶¼¬dâ¼ §Övg_Ø+zŒ\ç#g­îœƒâ‚ÇzX”`ÚJwÅ{«Ž >Áâ¢Â] Ëj>tËv­›µç³¶†7tº)L{eUIü‡à»î¯
+”ËЪæV71Œ’•të/Hïš„ˆè.¢YB2ëH%£}Ä“Œ9ÊèUpRÁIÎ$Ir8Ù¨‚Г.öòˆJ’sëp*s"w’™;Ýþ¾Xæyn4I’àiÕZ"§<z|túÛïGç/‹m8[[öm?Ñÿ¼t|p¨õ“›zBà¦S×Û“L®÷„Þ¡Çü•ÉrØ”p‰Ì&Ç’'•MÕ—M$í´ÛKûd1þÔ­M{ ¬ ¤@ìjdrIa •Þ$AétO¯nuU´;O³•ñÐØÚH“ø•Ö>­áuKoGAr¦î¦Ñð‚§ñ7W¾¢«›{üQxb YÝÚ2þxXî¶ÆìýA,^îËü^±/JÝàSmÞúOIm‚æáMÖµm \a@1£”F,UÖPXð@P³±4ß‚XšÛ—á)k3Kð;*¦¹úùKe$—.9YN Y9É0x»ž8úz@
+Ù;œXûšt
+0]Õ‹Ãgï½Q7(ÍÖwdÆ\‘ ".Üån,©6WxºRiú~®7nb°ô³|Öâ ÝtÐ~ûY@ãÉ°™ùaHÂjo·m×·×3Ç_°®>Ü]Ó
+¥GÍј?]ãôé¯Ù˜•“|–‰Ÿá˜Á™"ÉÉp˜Ù™Dªc‰ úŠ bN_yölûœ¨~÷õOuiz6÷8RÐÈ›‡ämÜUDÿÅ]6dñ?ꪼÿ ¹Zm;èý!ð àÀD‘fTÎUÚòŽ«4;zg-¦ªôƒƒ¥,ñw9ãl£ö÷oÇÝ#³"YÿÚ&ø8‡ŒC­";{FCïµ.E¾a}ßÔûï`xBq<gqS#Vyg§¨DÅ?ᵀݪüpíŽw;˜Ç`\mdž„XlFÍÑj€C¤ìÏ9Õqo¢ä õ3sÃ|¼CÐc^Ê-Pž‹€ž:¯àóQcÿPwµuôÏ‹‘5Âyiz¹4.L™±g¼ñev„<ù FY&çaßá Bša;Ù Pé7éÇ$tY2\×õ“®ý…É_¿›h¥C{ €wOvå P8´·>aåa¨…E· 7@’ „ ègt{…9¬{ˆÒöÃèröÜ[„§€˜L†ÃÍùeâÊ€d³úxùÆ0MÁ ‡½Ærè
+endstream
+endobj
+83 0 obj
+<<
+/F4 19 0 R
+/F6 25 0 R
+/F13 53 0 R
+/F19 74 0 R
+/F8 31 0 R
+/F5 22 0 R
+/F15 60 0 R
+/F17 72 0 R
+/F14 59 0 R
+/F16 67 0 R
+/F18 73 0 R
+/F20 81 0 R
+/F12 50 0 R
+>>
+endobj
+78 0 obj
+<<
+/ProcSet[/PDF/Text/ImageC]
+/Font 83 0 R
+>>
+endobj
+86 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 2418
+>>
+stream
+xÚ¥Y[¯Û6~ß_á<…F+V¼‹})öl·—¤M³ÉA ¸^`e›¶…È’kÉ9ç hûÎ’-[Š°û$Q‡sý†šÄ4Ž'›‰|?¹»ÿê;9aŒZ5¹_O4£FM"ÍñqÿíïÄP>ãŠü6µ‚¤uU/«i$Œ$ëò°Këé¿ï_Mþyï9鉥Vw%Œ2áÝoÝ4’Fê</§\“‡¬Øà'E6éÎORî§Oˆ+š9M²*ÌÔé‡)70ã÷‹'Q#3°^ÊH$,yUn |K@Ú„w¤…/¸¼,Vî°>æÈä«ï;ÉË„¦–_døÞMUL–‡©bÄÕ•ß1j(ü¾Ú“•ëi¤¥&?—HŒ +ò­«ª0õ¾>à\Z;äµy
+ûžÕÄ8(¸ÙuN¾OwS8ý"«¿löôÓ£2k“ùôË ’}ºAµIK¸’tËÉáCšWex[‚JáàO8JÈÖ«>ƒí¢¾&Áœ5hþk á’dpn%IW«¬ÎÊfT—ødU¹‹–e~Ü eNpŠyØfKa‹Ã%ÄÇ"÷FG‚zÛ¼”HöÑ›”Wþ¨J2òŸÇ—v/ ¨NÈ2Ý×ǃ«8æ$/½óàD¹ÛÇptŸÃSø†§
+Ϭ²Ùê˜æèà|H7‡t¿EÎ"¤(› P
+™•Þ]Wáëœ,ŽuxM»¬ƒ·TûtéæÓ°yº®Þ/Þ1¾a[1ðˆ™Ê5 .£²zb§ûý¡Ü2ô3pv0Ž[æ <Z­úº¡ÉeˆòØRÍ‚ÍæW¸ÔZZ¬æs/eQ~úëÏÓ–q{œkÚ,+÷®¨?Íç µQô˼¬ÜÐ5¸
+éf›?µ§¥VvSýÁåîãT)’È®Æ"¡ÈÖœ¯¬MÅã‰&+ÂtVW._‡ÏûC(…ÙÊUýl_•¾r2¢òªäé}žâfO8;oÒ¬¨ÕoÛ¬v/›AH — C9+¡2,ìq)ºe¾ÉBaZ¹ËS?ù! Ó ”@Ÿˆ*Q÷7ôçÇD ÙÝ#=|‡R•§ÇÍÖ A¯­ÚQrãQì¦GÝŠÞ…zÑŽ˜ê‘±ùâ›aÌ ^B´˜$¸už4à@D[C~J}ÝWI
+a²“ˆ¯UòæÚÛ»Q½H‚ï1¬6`ÐõI g–Š÷¨(_ /I¡x»à79,“Ü¥+4ª _غ ÆNÃTP=á«$îÀ]YÀªWÙ³À‡*€µ#<`0ò³ ­=eX‰…_&Â3Žâð’j|JÂú¼¥\ŽÉub Þ¸7¿™òT€ª¬_¹EŒÐèóBœ*ëPƵT²ŠMÅsÑa ¢¤ýÍì— hÛœ‡I¬ô i ø5$Œ@#ßöM„\û1JsUëôpÅR¡—ÍÚ.OBÝd~,–àÑ´Z¢·ãëÂCÿ²Þ†!Ó=),À}™R>+DïvD>B©†Í!šŠUÛ¤æ¼,¼}¹˜ <¹ôƒaö 9 íÅ.u/~!6¨ÐW²y_…Tôâšs{êŒ{ýº8#½o¯—ÎiÅ€~ë䌭*rÈÁ ìÕëC&g.°VûšjwvPh!›]#€p²×‡ã~ŸÒvóàÓÄKPžB0Ií
+-Ùˆ*» Iè ðÚFHCx¿bKN¥Ák‹HH‚^ZV}P";v»Éj
+ÐW—ñ9ˆÇ&¢‡-^rH(ˆ\úÀŠ/¬0ÔÜšäv\™N\E"uÀ]…>7]7õk^´± àâ6¡Ÿ‚š° É麿ùßøâïWਚ±ð
+endstream
+endobj
+87 0 obj
+<<
+/F4 19 0 R
+/F6 25 0 R
+/F11 47 0 R
+/F13 53 0 R
+/F7 28 0 R
+/F5 22 0 R
+/F15 60 0 R
+/F14 59 0 R
+/F19 74 0 R
+>>
+endobj
+85 0 obj
+<<
+/ProcSet[/PDF/Text/ImageC]
+/Font 87 0 R
+>>
+endobj
+91 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 2130
+>>
+stream
+xÚ•Ùrã6ò}¿‚y¨*B¼2[–wf'™ŠÇc»*[3rU(’¸–HëÊ~ûöê°”Äû"4»F_è–çKß÷–-ÿô&7?¼7žR2 ½›…)‡Þ8Ò¸Üü㫈e0+¥Cq=J¬ŠõÚ6oÚÑ8ˆXTÍ&ëF·7?{ïnHVä¥2öD%Jª€D]T#‹‡ÑؤJü„K ºì‘¿´ÈxYfËäESm÷®)æŒ=`ÇV8û‡÷JmU‰‘qìùtäu—•yÖŒB%òÑ8ô8_Ù¶eðS=
+}aË¢\:1;å•Jdš8)Sqž5yõŸŒ.:ü€næŒ —ýl]´+ô=Ø%5Bû¾žŽÜG--Ú+ „NÕ³–p<XàCAHíŒØÁnþ.ÊùºÏmû#ð-~{|ÛæYÝõmü¢,Ƥ™Ï:E¤SWdk<@+п¬:ê0^öMQÚv:b‹ .윅ê@´vSÌ«uU2-[tÖ±ÍÖyàŽ‚@ûb~ÄýH'Âm×¢ñ³)*ò#)%Šè7Š³1g°"øŒŠA÷Yß!Á%xmëln™ê"¶èÐàäÆÄ‹d“µòi¬_:9‘‰wô¢wö‘ żÚll‰ë²æ‰qE·ªm꾜w}ÖU w6(SæN+Ž¥S:`wµßø^E‘ %–‹E„.ÈÅ›-„€Ù™?µ
+Ê„KNx—‚ƒä̶©TyËÙ–WPÙ-ç•ÜiŒ,ˆ-:Î×Æ~닆ê<|eL¬{_Týñ=5›ì.ºóÓˈ± ‡ÛÊ}Ÿ…;›A ¯¡Ìj¼?X
+ß~6nFi(ή®Î®Ï?ðû1ÆňwçÏ®xÃè¯ç~x»;ÃS©/U‚S#uÌÑ
+[ÚG*}‘
+fãš<üP2‚)ÁΆžr;21‘¢!‚h8#*×lÛ˜}Úo}ÖÐS¤â)kLäÝ8*àÛ??Îô€‡Çj²ô6vƧh̯«¢sG¯2種:VY,ž8X[
+Ý}šÐ ¡ñý2¼ifðV¾»¹ÜH…«L1œ‘YB_¬°ö
+endstream
+endobj
+92 0 obj
+<<
+/F4 19 0 R
+/F6 25 0 R
+/F11 47 0 R
+/F8 31 0 R
+/F13 53 0 R
+/F12 50 0 R
+/F5 22 0 R
+/F21 90 0 R
+/F9 34 0 R
+/F10 37 0 R
+>>
+endobj
+89 0 obj
+<<
+/ProcSet[/PDF/Text/ImageC]
+/Font 92 0 R
+>>
+endobj
+95 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 1401
+>>
+stream
+xÚ}VKsÛ6¾÷W0'CÓ%Þää·igšÄuÏ´ã8Z‚DÆ©
+Rlç×w R”åô"@‹åî·|‹,çyž-³¸ü‘_ýò»ÍJ^Úìj‘YÁɦVârõÛgfÝf2•Žyøµ%ë´îê$8Ÿ;Ú4Öà¿MPëW()تY7;? ÿ
+ɪvž¾\U3Ô¼; ¤·YUmRºÅ…ùeÓ¶M»¤ãûfWÓ—BñÉTXÇÆ‹eóâåäËÕŸYžM…à%E€¸”RÌ?l¢Ñ.ø9Iªt²¨ö«ÝDZö8)4Co®bfÌ™"ç2SXnÉnÉói>™j‘3ÜÀGãDjÅ ¨ ðŒ0‡xÁ«±,ÔÝ~…HŒc_÷aG;È!‰:eŠì8Ü…%ÝrÌÉñ§°Š»äXäüb¡ #$ç)F(¶‘Iõ󳞾œX/x!z나É1]S•[ž»qÞæ©¿’KuH‰Í šx®Kû
+Aùä5àW…c3e‹þ°´$­’.È5¯ J ¶4½Ìð‹¥}Î,[Œt-ÿ€6"@¡„*—Üô~ŠÒYô‡oëâUŠ\Â7å8rá¡AW‚á½Á yƒüãÂõâÄ wFXÍ¥ü!Áó"âçÑXÎd‘±èãÃíLN¤àµEiº€ÚÐ1á W‡f—~‡7šg]Áý=i5£¸ZMrÿÐ7&àÁL+k°ZKsšI}H%]+Ëþ®$Î’ÃMãg>ž„áÑVÛu¤”t-­‘psGÓŽ)¸—%4sÿ2Ýü6Q
+¢ØŠÝO”€«žøGc‰Uì¿©ßN"÷¹/ éBökíÞEgXx\£[tºUß¼“—R+ÈÔU¼¯Î²]u»òd+Šú³Ö?ìh·©–I¶jB$NØ^QOT$¹ Ëo¢Ôà¨dÿ Çž%È‘“Ž#
+›Ð,€€n§<0…ãe_†››°®B}2PWým?ós²usð@oôÒRáÙ,µAÕô b•âYhýî± £¤¥µö Ì×Ø>ÔÁRÇG÷!-ÃàžûÍ®¾™ÐŸÐõ¶J£¼=&Ånä”ÆúYRi¡ß®š6 æ°©fÃl¶äJÇŽžü©?ý'35
+endstream
+endobj
+96 0 obj
+<<
+/F6 25 0 R
+/F5 22 0 R
+/F14 59 0 R
+/F21 90 0 R
+/F15 60 0 R
+/F4 19 0 R
+/F7 28 0 R
+/F12 50 0 R
+>>
+endobj
+94 0 obj
+<<
+/ProcSet[/PDF/Text/ImageC]
+/Font 96 0 R
+>>
+endobj
+101 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 2033
+>>
+stream
+xÚÚMsÛ6à{ÉLƒ?=4ÍGÛI§‰§=4=Ðms"’ŠEÛM~}A»ÄB‹MN©Uà%ðhA“T¥ir›œÿykÿÉ“§Dg™JëäE‘©¦I†Äd…Òþ>$ïƒv¥ýß¹m‡ýŒÒ®ÝË«Þè,iTS&W7¶A­ÒÒvЪ(’«Wÿ<ûðá麛çîþù¿W¿%¯¯ÖäLWªÚ‚×?ƒÜs³¬ZþkÉmêsîM—K×-pý›&–[`¡•&}×ßÌÝžÆ Ä"ÆR¨ªRiãA¹~Te8] NKØ'Û˜sî-ï„Ä-î„ã™ •²]2ÕJýzrý¦ºPy õô2îÁ„MpªËó 6wÇ;a q‹;m¡ –Â]Bé4u+”Ê RM¥r %Ha2‘¨¶àŽ§Ú‰Ý6)˜,6¤ÌìµÝ
+oökOaú:m”Jù[š?dSŒ®­—g£ÊŠdßE0”š0†‚!>´÷·_1(2jY®ü’Y{º1lP™V
+奵ÆQ7Ñi‹î#NIÝ$&¸Óš°1J¦T5©­sÏPÉ•Á»Ó}zh¼„3f—°k©¨Hì!L$dÌb‚†T€™p^«ÚŸ¯ë(­%{é ÌÆÝ¡k#%²FS HβDçÊä Ty¶ô¨ ê?F
+Hsš>GH!‰i&Cêøfšæqš»Sÿ%&»^`ó ^ö’’‚<÷ ½j­rxCOÇv×µûG òž„µEŽ`a$Ñ“°üá~\€ê1Xöh“’êr=C­Æ,{—»|;Ïíî#oqÔŽ_­å«Êm]?E´0”òI\þx¥å
+ÑÜ%T–ÖË5†P.€ÊÒBxŸú±Ÿ{»³=v,FR¼ØÖVŸãK•¹/7?óX[(հȘ,Œô¬Ìîe~U­]C,;o“áÁÃhÏaÇCû™×‚Lª+­’æÿÑÂPÊ'iùƒ–´ :àã´ôÒÀké^`Zº³Ó@ºšË"Ìšå0ê†øåáöËS;Þò¨ˆÈ^ž=¾˜¤ÆãÛù뢟ý*bŠ™ˆLB9SÀ§¡="¦íKVʈ†.”ʵ*Ízái<|¦Øb…@*'| xÙo"R˜Ié$)À_ÿÀ+‚ ØrÀ!¥åº†`…QE w#úù®ßw-PÛ²_GÀ0“
+J`þ€¿ ®2`öøb¯7„‚!XY¨Þ0w—«?ñ`HY°uÛ²¯#`˜I%0Àß
+áÛTV7ª6¾Â¾oo§1òu¯@e¤»ÀÛˆfR©ÊüQK;>D–—tÆb†Ð2(“jU‘¢ÙucìþfR<Ë‹ÿ•ÇÚ2©ž€EÆ,`at Ç`¹CÌê…XÚ¨*_/ü±oOv»ç¥ ÊEî©æ4ûˆfRºË†- fâö¤‘ùU²vØ’Y6+§‡®ã
+NU$…-ü÷ˆfRFZ,¼ÙÖ˜–ËyƒŠ;ªI^¦^ni¯G„®å¿)b°GWŠû—û_„
+3=»R܇È`¥¥ѾXÉŠ¹Ç†K+o–[ØëÝÕqßGNèGÝ„c”—ü.â„™Nrò‡ûõS^!ðc¸ÜqcýB®å×OxŸ®ûÓÝtäOQ˜Gý„Oz/ºxa&d– ´ ˜yÛóENÊÄu•VeT ïÁt<N§~îD ¸µ‘,¶KL ̤8Œ´ p {ÈI ¸®’E],·£×uÛ²äSÉa‹?E0“Â0Ð2€áJÒÒ½pÙ2w'‚t­åêij•á¶röÇöiäÁ0Þ¬ô é–ùMc‹ô
+˯›µ« ët¹k¼ÖMwlï[Y.AeX ûE1#Wø¡ÀLjÃP@ËÀ†¡pçˆ!´‘(lKøÉh?=\Dȧ.‘%Ôø}„#© Ã
+»»Îî¸óŽ—‚@*Çn·öŒUì?#R˜Ié˜u-‰Ë‰iCX»
+Ûm‘–Ë»à!œ:~‡ÀpŠ"|æxÙaˤ*—Ø2PáÈ ë Ü“@õòèEiRx`P§ë@¿û€,ž
+endstream
+endobj
+102 0 obj
+<<
+/F12 50 0 R
+/F14 59 0 R
+/F6 25 0 R
+/F18 73 0 R
+/F22 99 0 R
+/F17 72 0 R
+/F23 100 0 R
+>>
+endobj
+98 0 obj
+<<
+/ProcSet[/PDF/Text/ImageC]
+/Font 102 0 R
+>>
+endobj
+9 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-33 -250 945 749]
+/FontName/JHKLNG+CMR17
+/ItalicAngle 0
+/StemV 53
+/FontFile 8 0 R
+/Flags 4
+>>
+endobj
+8 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 714
+/Length2 4761
+/Length3 533
+/Length 5312
+>>
+stream
+xÚí•gTSk›†‘* ¢t!"½&t齃¡#H IÀP„ ¤ Ò!h(ÒE¤7iÒ¤·€ô* ¤#Õàóœ3ß7kÎ7fÍ¿Y³ß?û¹Ÿ{ßïõ>{¯µ¹ï‚M„U`îpMw$Z$’¨ƒ¤  7·
+A#Ü‘ê4\
+rä ÌŠŽS!Fçï"vav¤,l8V­í²bÞž.»ƒÝg:»Z¹ùí§ÙkÇ—¿æIÇÏ6S§ûŸáéÆ‹Ò·%ò¯–s®§¬‘v¤zxsI†ížRôz‡Ù.+ô
+³Eþy‘´áátœù¸Í™„sórÑG‚’A¬Ô/ u;˜HƒGÅ–Àêb&}ÑdF
+º*¦…ØSþ1’'`Æ¢Â÷$ “’7ôXTõoˆ{¾JkKôuw¸Ë-•‰ƒ9çTS˜ôEï´»H‡>õæjÊ Ž)£Ûú8 9T´Ç¦HF„™2ד©'lH‹^g$Ÿ* ù7Óf¶ïÊå}¿Jì±eiºÅhÓÔ
+Y>d-§Lè{ù¦Ð[£äNŒPCœ•ãuìÄoÉL[%w5†NS÷Ý$DÞŒ¶o"ÿ!‰¼:5(ÏžÛs#¾;…ð¯|¶¸H[*=NB#>Fåu·ö±÷)y©09üöØCp)­ûÚ¾ËÄAiNÐ(ýÕV½@ÿúÚÙ² ʯ”×ò¤Ün¾¼®øo²Šâ8áSÒ÷y $$›MûZbfèKS™²ôj믹•”,É$=}Š`¿ 닆ƒÖíCž¡SòZ~ÓƒcᢻºpébG7n™tõY?KGuê–6iOÁO‘Ý1#¥ça°höÑ´_y°Š»(ºÀ½³IÒÅ©¥o^Ï’<Óñ™zç½S?„çXu¡˜¾Û Ûn]Ìb¢åfÍçx¾×mßâ’`KJ5Yaê¿Ò‚j!¢€
+áÞDâZß%œîŒ^’H ­l(a.µÄ~¦$¤]¶XT^C¼t|!8ºM³Q3*vN@ü±æôC†áÎKU|';—âçðGf_ž9²ŸÏiõšéÑ
+˜Ì1 Nð\[:ªëqÓ”Îdœ½œˆæ+¬‰bh©p‚ÖÅk¾:,Zq™83$DÉKÑ1Λò©ÁŸé|4k§NIÍűE^$²Œ’õ?<ŸÍˆO$’@ï‰ÿªÂ~HŠÃl{‰³‘?¼ãªGC§Ãú/g°\{¤‘µ:™Žœ‹˜ ·Zƒ™ FáwOÌ'Í.óÕÙrd›“Ùnµ”0–})‚ŽwI\­ºÅÈ.÷Ùí‘Yƒ²ˆ$—è]þ¥”­9ëË:KAu“î%ÞëùZì{µa‚ê?oSÓw×ú|Ã~Ì<}•,ÞX*k¯”ÒZ—Hyn¦#DPT7oÊ ¼òöÁš
+ÄV ?1¸cÌF'UµÍÄŠ8tt>°®¼+ü%!@tôìû’YŽãÅÏc®a-îëœòÆ*º®9ùE97Q².7¡c—3ÁðÆÊ ögQ*úǾø¶×X|9gÀÁú]œ_]÷~GÿäÇ(ŠJNJ·?’âTÞ½~oGøÿj°³º…_Rñ´Ôb1i¿0:>Ϧƒ_Bžà:Áïe n¤Ôv‡Œ‹ØEÈ™Žt.ê?”$‡.˦/)ßçüèßc—€7âiªrÝÁ3ÓWj hz'íyäͯnEŠ|ÁˆÉz/‚zÍÅ'é7  >ÓéÜüwäYÆláƬ{
+â0péÒ7Í‚Ÿ²uÒ{(Åàü2Äêó¯uµ&ELM믲qþ°cqÝ÷±˜ÚËjñ—ÕÑaq—v0…@Ø´áÉú[ýj ã°DÄq@Ÿ¾~/Îo*}Ä4bŒ"T’i:QaÂ2~¡No1Cµwq @Û¹Cæþ +×°ÍÛÜŠ¯»ÚŒÓ„*ö]~
+k“Šžíú>ßA ¨©¸³-îJõôZ'èꨪ7)H‡U\™ή®³kaã²wîT+Wà*>[æHG“îq‘ï
+¬¨Ë»¹ueÕ…lb—Ž3û?ãæ¬oEXG} A`ÏùÆ0Ræ‚ ‰e±¸å
++6PÎ| o«›—S|cPé‹+}žù-C8ÇEK%*šã›Íü³‡ÇÈî?¤Ø…æc#ªí}¤…ß»
+íÄ&ØÓK® 49\¢˜EmÊñ~c/Þ¥? øÑÑdìâ²Üæp¯f×:@ʘ`]œÍ®oD1oÆ°O2JFGägÚE¹x;+Á´û´_µ½P¥#šUvŒHwÛ·¨”Þ×u)GZO:[mMü¥7nhî=­è‰ÂMÆiZâ‹+UÃ8ÞwR½ÜÉÑx©|´ò­Í=׃šº¡áöð~iW®ãkfÎI<Ö„ Ö¢âõÕ[†)ź”§TŽ¦Ü Ä蛎ö _€íÞ·ðS5Tê9ËÅ¥ä¾E»uøH›‘Øši ¼ÇS4U½ª2X/ad•‘o¥†9VÍÚ8Ž©â°ûD9d¬¶¾×j+$Ÿ
+°|u߶9U>¿K§ýšqX¯ TK6Gï©À·èĺ5ÓmùÂæèö¯ó
+›ß‰Ø›\úÚ^Úä³Y@‚Öö"ÝŸ‘ßá5y'<Ð/;³Ç³ë6^¦Õ9FL‹÷NJ UÅi³õ6ýÐÇM‚ü↖Çô#”6jËúáR6Ò\šDÓ™Ò8º—‰ù·žËaS#lçëzœ&ÃWÇ
+{EN^žè·«™Íò¿õ|õók‹cÆíâátùÎs,î…‘7¯aîn
+endstream
+endobj
+12 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-34 -251 988 750]
+/FontName/YABOTK+CMR12
+/ItalicAngle 0
+/StemV 65
+/FontFile 11 0 R
+/Flags 4
+>>
+endobj
+11 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 714
+/Length2 3336
+/Length3 533
+/Length 3884
+>>
+stream
+xÚí—y8TßÇ-ÙFDö D4ÈØ×ì’}Í:3c f†1d²²©Èž²¥$ûØ—ÈÙ ?Šì;áV=¿û¹žîçŸûºÿ{®çœÎçýyŸ÷÷u>ç\纾|Æf¢jœR‡%ˆBÄ
+ Sˆ"&ÐÀ#a4« # @yyHÍ’Ad$åÄ¥
+÷Æã‘X¯¯àôyÿ®Ñ§ÓA"}‘pÀ³T64¹ƒxÛq«~ð’eU×1 6w9Yz'ƒ½§}ÞJì³kd¸›ñÖ0ÃÁ’qlÒžÐE•{o ãëw웈D`á8ûUçÎÛ™m…¢û ¢},e6×êV±•¶¥à i?{ªsˆ ‚i½…ëýá`[ iQh&}.‹þ«šL>¨u[/œæ°SBíÖ@Ø°pK$X0¡’áÇ›ª¢Aït\¬Þæ”e|»°5““± ££¤Øóo($úzäeÛÞ+Ó`ãâ9ÃÿŽÚpä£X·å"E|¼ña ÖÄ¡È`XÒ5¥V=ò7 šµÏÕÁå(3&ÑD‚ä,F?¾Y¦g—°z£èïshÕN¤X3Çæªjª “,Ã?¿²?€šøTµ$W$RÓmų×É£ŠŽ]/þ8kVZ8Òçò]áJܧõ‘’ðqÑ]r)÷4ÚHe~
+žH=á¸
+LWÜ|pY#—k"qªÆô ?—Þ*HžÙ‰•t^mг9fâiצý´7ø’=œ3Ó³À
+œÊ™jj¶· :´fö¹/¬˜c‘ÃÞ¾F•ÕL_dI­Þ¬f±jcɳÒ(MAçƒ~If'—úƧîtq¼Îå»ÆÔªVÊ£LY§ª7@ÿ:µ!Õ»ÒªfͲóì±H1å•üOï)…tMü'½+Zwò_M’t¿Óvè!0¾¾d…cš¶eP¦ÎF~¿“« ùg€7èVæÉ/K™G¾HJ-8òîXÌ Þb~ƒQ DËúJ SL
+ÑòtáÃrBÇ+‹BÑÈÀsÄùè&- Û›öäTÑ ç¡ñÛl:£Š¾½Ü”3{ $×ïÇx…ƒõZ|LÄæÅÕ÷95Ù·öèÃüSl:ãL€–®n±yäKyp2—÷Y|!¨(á`llþ¬ÉDMŠí<c»0=º6Q³¸Æ–ònÁ“è÷ÃÓà½Þ栨ʧûàýãåq¿GQn]nµÞ|ˆæ=ߪB¬‰Š¨î$‡«3'çðÅü¹ß/•ÉLT¤„A!*•¶Õn›_ËG½š_5p˜%{GEÐZ
+ |x,;kµA.Kg *^GÆä;Û++
+¨iÏ·Ô–¤ØëR•w¹\†_y%6ì}
+¹fÙ1k2ÔSüz¹6›÷ù]¢T ‰…þPËýN”¦¤YŸÓ«j4NÛÙ‘Ÿa móyR%;hs¨¿ý©/˜Òó>|ã戒8Ñ ' « kEb.ê~J6TÚûVÕ„&E%¢Á.ËÕI¢-ïÔoç¬Çwy`úz@ïSÌcÖöþÇoÒ?¢Á%¼Cu.U›“ZÊì:[V¶¨ÏU?BÌjùJ§f«ú1·eÿ°‚¯H®ÍÓR™ìÔj
+@^yjµŠÝ%5>&ˆºc&ö*"^)†%ô¦¬a_ßMó ½s±õoB³ªn)'YûXSú¯U5n¢r)grGª¾ÀõÕý8\¥$QÅÑ ²ÕZ-F…ûú¼çÓ L¡;'º÷g/TSÄðŸ•j­2¿öÂ| {Wqù°‘á°Q”Ä·¢KÉ5­Ò—“¼¯{[žOyjäÂNX_ÏKÏ/)«T,¿{¼VÇJGG/3xŸ2õ0ÊÇMÕF­­±:âKì¨Ëø™à°¥Iw-|UJ TÇZâi³ú £gñ–•¶?*q??ÿÇÀVž기Äò1§¦í9£ªxZ N[1ÒaäØqº6`8éRÛÏl$üq7èÆûÀË´“ŠN‰•8K½±ÀC§&èËýÁ“Ö/˜IÏ‹ƒéžŠ¦ÆBë7Uô_íyÞéY0tÝ ½SÒlíåò¶ àsw wà
+endstream
+endobj
+15 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-1 -234 524 695]
+/FontName/WBOKNY+CMTT12
+/ItalicAngle 0
+/StemV 65
+/FontFile 14 0 R
+/Flags 4
+>>
+endobj
+14 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 960
+/Length2 3094
+/Length3 533
+/Length 3757
+>>
+stream
+xÚí’y<” ÛÇ­aZ([¶ºUöf5È^…Æ¡É2fn c†1beÏ¢È.„cK‰'²k*ʾU¶²•}’ê™:Ï9§÷<ï?ïçýïù<÷ýÏý½®ë¾®ßçú]2Òæç §ˆTgÐJ¡C‘0¤€ÁZY!Q
+ U5Ð*hUDÀP½4’«Ç(|¯RNy‚4O°xºèÉjBÀ“sT ¤3`
+™Aܔʚ²´üŸeý/ªþÞÜЗL6Å{~oÿcQÿ–Ç{’ÈŒUP=½|é ÀR‰ ò÷RðwqXHòõü{ÖˆŽ'“§(®d@ü"ù’üA¢9‰Npè4_ðG¤ÿ®µ·
+à6zf&¦vJÿòô÷¬9žD¡[1¼þlû½ü#ÿbÖ~h$
+
+
+ ¨ª«þÏ2k
+ÉÛ4ÒTÄ eåQ‚/Rè?NŸeòìBb]úƒHz†0‰Ýñ¸”Ò†ÓzSÿ›Ú®sHý½¥;*›9"=O?î&sÃÝ#Ã=Ìׇön/˜Ç¦0åë^„ÕLhÚtha0ÄKÇD]ž×áÞnh”ݘƒö
+V]à€7.ƒ±5Ž¸J¥•
+ïõßH^{¸·5/ÿ«MA4i»¯îúuÛ>yò^Óø:ž=HƒÕ¼ †&]‹‰+#è®” åúˆ
+þÛÊüäu©4º\ÖZ;
+ÚfdðÉܹmíò!‹ž û«•h û¢¦BüÎE¤ ¼NÞl/VúxÖ8 ÿk¶–kî$êN0°2Mºö0}ãä鶕í3³—öšå£•Ã˜ù<éò5†ÁoÄJöˆ$Nàõˆ'ËŽš“ó &Ú± øˆŒJìûc}Í”“&õé3¸Œ=¦ø.
+÷ù—=1:0)¶õ9gŸqX\3í׬ã3ªäd¢N[gÞ6£|Ô–:üx}µxs_:Ýÿd&ˆ3
+Vq"á|àÆãý÷sF3 Üלœg3¿ð÷sßEk iÇk oáVk=S^`†dFÊOΓƒ±1#ö9Ýð êX€×+ÇÅtßPì]êûêÞ”@òªÅù¸ö7Q‡!"ñ¯%K*FÃ/h%:s¹¶d+7 ó ŠÐM^ZgƒùËÒ¿¨è“`&ϲ헄ßÏë®c&ùŸŠ¿ZuJŽ;D4ÇÇ?^mJ¸Ê* ÷³Ýé¾äœß˜oêÊxOWˆƒ>Ž·OW•/»ëµ?&_uПÝߣM®{çõél¸!÷.Ûù¼bõ¯yk3z°pÏÔìÔÖÀ÷Ù‘4ŸôÛå»cç?WdI×+™UÜ3úæa¾¾Y<™úܱ‘×bSFê‰DK\´[¾ù5ðë.9q—ÍF¨›Þªi±…œ§šç‹bÚgœ!Ç.F+lß±XèéZÞJ•}vçqš¾îhÛÖ> Íê:v‘îc…²Ϛ‹v´€¢]%/DMF‰ü+yÄ[íÅãØ×!R#ïú:˜Ûðìu2ù—‘¹9_ú·f1W :o„TXTÝxÚÁŒ}fÀ~ÅÔ•7µ#+Šù }NÏ&93Gó—(®†!'›n¶šò!oqíÆÕòÄ‹j
+¸üæ?Ml«Ø`ëÔ•ÞtÑMŠ?G´7.þÇ„Ÿ§cßÓê_}ø¹¾Þ²Öœ{ý^ÚáõÒx¥šÙÅàON8¾¥(ßÈ!­WJš©ü­i¤KÐìðàNUâ2äî#Š˜M¬¶`G7Ÿ*z:2jÒ+¹[P±5ò-ãèÑ’¶ÇyK© Ô™-”Æ9ªÔÝÎÐa•žÐÙgd;}³Þ`¯Öçštss@ASñKrjñËÞJÆ=Ù=N¶9›˜æÿèlÔ@…âÇ5Ã¥-Qy%o…Ã2§G*‘9A0 bU*ù9¢w%³i‡“}•^º+D(”Ù_yÜ‘¶ÓQ« W^»Õ—Q–¡-Ê9Ø ©e{¹W¢ñáÒÄ3ÝÉüÝè…³k3el×b[ѵã±'vÍ/bË[cÕ—Ìï¬+–5å‚èKÓ%Ñ=ƒ¦° °¯ûÆñõõJì-³‚¯{yFíx»™> Ó´T$Œ$G 5Ë=åÏßhΆ¾ËLjÓ]?Àc)[ÐaáØ©;þø­wúÓ”+f.DŽhnùCm>Ï¢JÏŽ§$n´e\Ó_èæ:b83ÄR/§šØ\.¸h ¼õöVŽs|—{`²:JÄCà¾~‡Pkhxr×v¤âöK/p~uª*Â;ƒ~Ö%8`z=ôØ•³ì I
+7 <pÚôﲫ2sÚÑpÏ—­ 1Q8îãì=9¤ÜF”$ì2ŠþÅz3ïfÇ‚W·)²Å¸Ïãé>`ÿg(žÑÕŠõ 4°eÖ¸K[í™ ¯)l~“@ÎocÊX˜óÄß9Á<¸(÷¢€’Ó|>]lÿÁÖòá݇ôJT¢ömud7rA›e]x­¬óÝ'$ô0BèË^Åõ#AÂFfññ—G/-¥B±
+ûËÛíZNOùßUè2kØ9o‹®‹Æ~:"XýMGÁ*ú\áplð‡kÝ£f>¯èz*ó1U¢<&„Žvù*_¬ÓO´i¼ª¾
++› gd­ÊIÃOœ¯³—¶Ôªwââ½¥
+[€\Ùxß„º:/
+/~¹³-S«sÈ3F?ðkÓò°[‰W<Îé ;ššP-i¥;¸ž+`†m5Gw(:æ•‚JÖŠÉaÇknO«%”­¯0òëÝôày0Â}¨×G&L W]i
+Bœ|•Å2ÃJs”ã…
+endstream
+endobj
+18 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-53 -251 1139 750]
+/FontName/YEIQKP+CMBX12
+/ItalicAngle 0
+/StemV 109
+/FontFile 17 0 R
+/Flags 4
+>>
+endobj
+17 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 716
+/Length2 6606
+/Length3 533
+/Length 7162
+>>
+stream
+xÚí“g8\·öÕHFïQFoCÑ[„è½wƒ 3£G‚½÷Nt!jôÞ{ËDèQCáäÿÎsÎužç|y¯÷Û{½{Ùë^÷¾×o¯½7ˆE[_ÞÞÕªìŠ@ñƒÀ@E c°0, 
+®.ÿ6Fe㳓G8º@Bÿ`Ê0¨½6 eçt°qñ€þ­CöÿŠðgmš<UÕQÓæýÏWú®¶ Ò÷uû¯Ü¿ì×àÿ®ÿ¬ óš  ÿÿœÿ¼²ø—iOv®ö0„#Peƒ°·AÚÿ—ðïT
+
+®>þü¢"@~aQ0 
+
+Ò¬§¿€?¥ûT]ák_”h
+h˜|éU‹¹†rÄQÉ÷¯é•äIÛ‹nyo¾×ÜO®³6V½h· )Í5lE÷ ›¼0̧\MùY['ÌÌ!«‰ü.ó—÷©E‰"ux6m³¹à4BâSãrøì–ñð3“™lÕo&íÈêöçÙFÙ7{¥)ODŽ7Ty„ÀZ™žq<e$^4GWoO!¸G“Ü›ù¯‹”"݇“µÇký©Ýùijk÷_¨M˜V#yxŸ]…x{_ï~üŽ›ã³éµ8ŒXl±?à>È1yr¼ÏÀ1-Ó€¿kQ¢GZ i fX‰;¬æübBô‘S*‘*B* ^Tã2döÛ·˜ȉ^ÈœÓÔ hôšéf¤;®¾UÍøx%Ê-ø›‚åÕ„8¬Ú[çÜÌ{ÝÀÀn£üa-N›ÿ
+KÞµ…ü¾²éöÅ17€}'³Þ­ŠSvZ?Û­†ÍR-B*Ö8Ú‚_]‡èm2B‚¨M£#\©ïŠÇê6®uÅdÉ#ÐW1C dÚu)#<w·?q›"¯4¿K^yè 3·øø™š¹Shôo6ó
+É'À
+€EŽpéïLc®Øý{ß$?j÷~áqø鈃kÁcƒWçW–'ÓÓ‹(ÙÎÔRNº šøÐkäNÌ$ß»}­W,1[ÂàÊ‚ØÑ\ó#ËxîЭÄÁmO1¢·±òYÈ·Œîcöš¢±ÖãÙ2Š‹ Ç§8E…ò‘Ú†Sïé Ï"¸^DŒF‰wƒì/zÆ3#çœä[ þ.xî[Žün2ª%p”½_ÕÉþbÒÀ˜ G=)Tlš§«¾3>zA \®ÂÄ“bô’–` ùî~ûÿÖ…ß’ßÆ_úußûØ©cÎe‘ ùV‡µYÌ4ýä£L•¸Ø+oipKªµÝÓ®œlõ²Å ”>žbZV¯‰¡æk"ýÈšAnÚØá Y¸ªÝY*ÜÎÚß‹à—/s> õO¶‘Ç Íú²±%£4Øî.›~CÕC—“,9ÆS¢ÌCß-eî°|7PÚ.¢1!ÍŠvÔDADl­ÕT|µz/aíõæny
+Ø×b! i C€XðÖŒW´g&ÚÖåÆ¡?¾zå¶O_?"øÐWXºŸ´Ñ]«íÊ?— ŠŽË—_Ž¢h?;¹Ãtü˜X2e1£þ­Ä*‚2Æò‘ãz§]ƒ˜å€å‚#µÅ¯QBƒ–9ô™ž¥±_B‰•`Œô5kófp¬ÛÐgM3KØOý¥çIhF³BáËïb›ËÄ&l… –ƒ„fÕW†W¹øå¯Ú7W#•u>ª“¿ 5*Uô5Ã"9Cñ3]õ¾aÎ={)Í9< ^ÝŠ¹èl²ï(+FWäxV˘Ýh·hÖzvÈH‚Ïv­Žm0XRˆÑ=âÈ {ŒS×n´$Cxž¶ J0Õ(X“Ÿ¤Ôôø–Õ“…
+œEä ó´©,²T©?Å´Œ
+{×°ó¹ø'~Ü“ŸŽ|DòÙ¾µKaû¹{Žm¤\¦fŠÅ²(
+ÜZmòB±va°£nIÂ[=}ê ý„é(_O¿ 1Ãÿ\„Nÿ4<¦‹5ÜgÚKò’îùòú¤ßG¹ûÝXîM²v5ôsö‘“ëî«ÎtfcRYob†¾‡?•ŸƒÖC\:³&óBT²ñL-Ïø<¥:”,eL¥TB{jÉÝÜ›e•ôÆð]’(ù;ãïm<<í´Û¼83Rìv¦ÝE"”ãÍìv4ØòU‘ K1¥Ì9Ù%`­ûÉÉZbùÉ7^›¦þšÙÉNŽ0Y ŒX©þÐ%^¤H3q[¬7³á=/CW':«êM,÷5å÷ŒËÙðkÅbÅÕÏW:“´Ñ‹„ˆòc§,¬Ž°_%§ê^T<#¸—W.Îí%Õ1ƒl]YbâðÕ:<Ë ¿ÎHÛ%”åV¯ç©ØÌÜÉbéy0Â¥¬¤D˜A]|Ò"WÚI/o*®žF˜h_¶-*ôäªdw#¡löJ<vN —m—_N&ça³ÏEy^WßBö¸žÒªä59ó1Y´È7e­¤žÌ³…@¼©o§9+œº}D·ùþÌç?ã%rVš¹zEù«>^bÂýCìl[ºÂöp’l®æúeá:!/Ól9n+z¶iS ÖŸ½ƒ—x>ÀwÀ½¢ŽXD8bvÐO-<Ù©Pi»<ÜzY¢òø¾ââw!qp"Ÿväok9Š¥˜çñf>J§D¦ï¯ã7×H­¼I²>)Íù¢Yeäh¸NÿÞžC}©*Þ^nÉ\´½lñœRâí»—bÖ~U‚¡QÙs"šDÒÙ#lwkg·êñEGtÔ×ܳf’š7µI„¥ÝÃsú‰#äù9SÐþö#[Ž]O˜‰›‡†â>UÇa˜<“‚g#1Qb˜Á…æývÒòjÌþcA¶yÎwxRß°ž8† ±Ã2€TéCìßuœ´ÈÔÑ`ZèñVÝ H6 Dšh÷Z§=Šà§åñ7oâ?^ï}C\n@i6#Ñ?ª{ÒÍ •
+j6¯e|μü*RŒ„ZäæWŸ VÜz|òrBîzÆÌäÌ:HdÇÙÝl7‡œ÷[z›º+Y‡>ÜNH¯Ui´QßÞ‘ŠÞ¦ÿȇ6í“¥«6<}ïtbÅœ+Î[‰"[†‡¤~"äÄsð¨9ƒ„hÊCMÑèŸw÷ynd˜èÁ,ÂÞt>ögùPÇ-ˆùi3Þ³­;'§X¡ÃöíÈ`wB’‰µ†)*C;§Šìsïñr¸Wi êÉâ™"eó{ïp‘|ÿP£.Æpå%¢y›ù € Ì3^ÈHK‰l
+6¥žÏK\aF㧒ÇglSºeÕ/R¯ˆÚƒ1JVmÖò˜[öq•º
+£5óÛQ‹>ÅÜlÉD2Rd‡½dh|®é5ÍGu~—=3Æ!`qOE¨|®I’·FÂl §9 pÅס¦"ðbM–Ëpå’òš¬
+ž;XzFÏÅËñ™.Üpï.\Ù¹E
+?GkL‡ + K´[èIy¬ƒ÷‰ò5×…²Ý7Þ<\{3· ÞT¬ŸS `ö0Ç—ÄY·¦*8¬
+zM>8SD²uO³M蘠e³Ÿ],<›*EŽ¯¾˜²1¥«™ôj8éM}ͬ
+7¶²„+e6ú½[Àe¿o–€!àÚžÅØŽý·JÓÉÊh²Üä¶ ½fVÜ+jü{ÑÙDĉ´ªSHæ1¢‘åîë$8ÿ×ÑÝx™Qûéfé>Oæª!ä& £(%¾Ãw—³­,ÿH“âؼ0 ž¾?üBðâöjµ¾#ã
+ûQ³bß³µççL¦t%ÉØW‹¯¦åty~U¥Rÿj2ïdMÝpöbH‰ëRê ¶ŸúÜ¥((;L»ZyEÛ'Þ'F
+endstream
+endobj
+21 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-301 -250 1164 946]
+/FontName/NPEQFE+CMBX10
+/ItalicAngle 0
+/StemV 114
+/FontFile 20 0 R
+/Flags 4
+>>
+endobj
+20 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 721
+/Length2 11764
+/Length3 533
+/Length 12319
+>>
+stream
+xÚí—Sx&á¶çcÛÎÛ¶mÛù‚ŽmÛìØêØfÇN:¶m'Ž¦÷ÞçœyfŸ¹™gî晪ºx×Zÿú¯_­z/ª(H”ÕDÌL’ö® ,Œ,¼
+h÷×ÄÌÄ æ`f tõb
+t:»ÍáàXX
+æ@gû—jÿ'ê`ûßÚȸšØZ›‰Ø[ÚÌÿJY»HZ{Í•­]ͬ
+É„ÚïÐ#“ç;±Övoƒ4¶<`+þQ…AÊ”TÔ¨AÕáäÏzgÛFML¶£[¾Ý.ØØ-Q´ì76â8N#™ÅåxïÙ/È¡´$E9H2ë“Å~Ë
+8··m˜v ód°í;Q ðó’™Êƒò¹¾càígÊÓcï&Þ' ’ž 6L
+Z•ðç>xš…??}ΰg§ÇòOm·^Œ'7µdvbW,- Üà ©>òºëI«N´è«ï+>ËuôÓâCß,´È𶾠E}¤˜Š üµç’ÝlxŽœ
+´zÊ÷×÷—>œbJ°œüÑqz«Cè„6¶8ï•H…–­i»ˆï0ؾ¡üàM²?­¿ºüåÅÔb›OgÛâƒÖ¹yйD^Š®x|l@à<í`Lo1™k¾K§+ãh‡C–SŒ³å0è² ÀPÛò|—½GÁXªöE°R8Ï|¹o«W¹n]å›
+Yÿú ó]W‰<ÿÔRÌpLdûŠ ¢E
+¨â¯–AÔDâ¬É%O¨P ÇÕÁ=,Û/ ãéB¼i_h&Ìd¦ºb½§“¾EY4sÿª9+ ™Ï!êº#ïü%g¨¬Ü­:#§k‘¾F¶>n‡ÇñÅè#@VÕº±MÄe,•ªãS
+"L0D€äùFZ öÓÀ“¼Xõ‰_8ÇÔÎX”Có~9÷áÄ1 XÉ"úEåü«—r½ÂæìàuØЙMvC™@X?ï#sÙD·ï7 ×àTÙé  î.u…ÇùžµîŒÑ„BŒÃ·1uBØaPԤʒÆiükh\³(]ßâ0Vz[´"4ž›ºd—YŠ5†¹³ÜŽ€ ÛãíW«åLé=jÀrÀƒFj&¯pb^óQñ ë»;£ˆÐd¶‰Ÿ
+öÕs_#·æ“|ºî4Šcùr¶çNÑ û8rˆ&di×RÁ¥{Ðæ^ÎÁéÅ~ı¹ö*"o÷H¨\£lö} ¡í<«ŽÔ~Á€ñíWR|q¶8–.—û®=Qæhú[#«\0ŸÚg‡ï½ƒfûíŸf¾ IE9^Mvw»!ÒÌ’Ô”ÙüçŸ&òh[‹‰JÀ4‡ÞÓä½ïd\¨‚…ƒ¿!Îùd´3æö½ÚCÀ^ø†ð%¹Œ¯µö³°lfy¼ôEž/¢3à®cŽyVù ¥ËÊ`ÝÑÏ túw»7.ªòä¬ ­ˆÔ)›š‡w iØ8:ò›o,Šƒktì ¤x Çņá{]íÔȘAM:î1Ö>•‘¥z,§>á9Ÿ?×G«®gpß9˵+nXצp´ªÉÚöõA2ý
+tÿÉG¤ÚxÕ¸T´´™I&ÖÏDW¦º(tæ&¼SM¿Œn`¶csÚÍo,þH§îï%DgìùñLAÔú«Q,&¼Þ½ùþþ%‘éžw‹²JC˜å*–$V[B:^H…øŒ¶”ü‹µØ F¶ÓÜvƒc%ÿ9(ØÊë[!.< óÎrÖŸ>—s,ì ‚Åå`ºäƒp´Þõp¯?‡ÎBY+T]_Iˆ­¡i–sð¯Ü¨ã¥0’<f_Ž,ÛQ°¯Õ‚ "I-˜3‡“>àwÑèt9~EÁãT‰íL»Ù½Áõêñ|'wôÛÎé¸kV¸60É拵*_~¦ÅX]êß=©²L–XÊšJÎ^ÝLH¨ ïÛÜ(@7xÙ p6ëãŒÑœ©§ŽÔ­µ? ¥+¼›Ö ²N4þîiwM²ÓïŠ{m‘XvÓåû\Ä»aX?͘7½Ö+ŽžE+ç ‚ªl¸$Z ì"G–Jx˜ÛØ­J¿ÃcóªR%Ê$XNXD.•Øyôç|k/ÒöúQÆJª¿Õäé<Ç"ô½9]jð}aúT)\š£ÖÿtDÛɬE›Üh)hOÊ>-½m™›ªeJµ‡ÔÉ7IV=c¤¯Œ×š^rQD+ÛÑÏô•&!ò'-HÔ ÿí4l‘ÿúvÄÄU°;øWUc§¨˜1‹‘z:·²\ã{—¼7éçù>A¾@vrv”|QǸ1³t–v7P%JñQÌ«•™À#ÿ;)Í×Ïß$ä|![˜²p"{±ghî>’´ÚöòW>RÁ4zÌöÇÂ.õÔˆÈ7&œáºÝ
+§f„ûM¸˜¶Ï¦/X0“_ÄäÊίd}Ÿ©$[?7EýEÁaÔßË4ÖWÀ²SÍ÷^ž& I*ü°áWß—§uZõ ïÄQ„ÆÇÁ ¿
+°7 X<Â5EP
+U“Ö3JÄÍ»ìðÁó«Œ ( Bý &9ä×ðëO.t?çØéMߎe)Æb/`eeŸÜ83A;[Õ0{Ï2A½îÒ6Èzë»%ÔüðÇÔÁªèâƒÕlÅ{ãœ.| ¦¬£Lš Ç“Üò±¸æú‰"òk”û+4"+¦<hŒ¿h÷HYeÏ0L(zãG¬¨]]°ýý¯Û%=ŸØû=GÚQYš·ßZF£¸8Ë%e>pýr)|i`ƒÎE^6Ë«'’``þH»¤H¢ •2]n¼¯££J[Ю(8Ü4?Lz'»Ø %Ÿ³’>b­NqúÉÔâšgõlèÆâú§ëê†Iæ‘ÆüΫ*”ˆk}N)±. Áµ±A ã×"n„¯fB7'õ&؉¿ ½‡šËÔCË·<î­ËaiÆ›ÅÇ&-¸*«ó„ò6úµRm3˜Þ>amû]xu#›ÙÌU&¡ëQ¢H˜•l¡äKO!ë@$¼ K¦SÖÏ£u
+ÆZñ¶Ç©Ù;Y›Bž\[Üʃã`ˆh:%#Ï_ ³û(Õ'G@xõ”¾R[ñ¾/'õ¦…á;xÀ™PùÒi,Cö¼P×Rz÷\„ Mº³ %úÜx¡¶c:Kô%ï.­7 š+GEÆÉû-É2®Eó%®YŠïQçªùåVá â­e…A_»d†œ¿æMÿytP$(?ðX-¨‡
+dyG]zïëy¯v/”Þ·ß½%ÖØÒ—7Ì 1<…0ªòS!gQî SÙ¬ë
+`¯eLœyõ|¥k+#%CøRr
+–°g1°ƒ
+¢‚&ñæoñþad)ݵ]yA8Àéˆê¡×ZÒ)²ŒÞØ<3gpñU3wmTEÀ÷Ä|ò'¶;Ý;=¬±õ
+—WÇf½NÅíµVi®†ûl*ºþàÆÑÎ0’ÛšK“ÜŒ»ZL•s¿Çt†é™ËQî%.`¥4H$Èœpæ±[’•ðG*Zr/#Ôzc@’ñE"·Ú6 AF,SŠbì4*QQƒôÀôÍA›Vµ£„ß5å›Þªg6ûím—6N5%›õ Ë×<QØׯü t°`7JO†FB7ÕXð!ûtêt1˜ ¡"Þ'ýGYÄá¼Z;‘ðŽfå°xgáÇ¥‡J"iøA` D[p¸Åžù­ ì~
+Ê–ʯ»”µëO¨ß«Áê&êƒ/+úwxæߎÖýR“†u=vŠžÔR‰pÊ8D9¥Gkõ F᧠þàäØãšr¯Äo Ñ_#‰hçDü°÷"ñ{n]ºf:¾z×FÌ÷ m’Îì—@¬{Œb—¢Þ½u~D¼·!gŸùC´³GQÄÅt^c+7ë ®*êMaþ¢Dòðq±Á-Ó:e¥gôlN5 ¥Uƒ ^ÔG[ÖrÛ±èz~G|Òä
+æß’‹OŒäáØìjý€“ 9wA Ô•i˜4¢ÙÊh˜ûÀa¡lË#Q¶è²œ;v£Î¦ÁÈ.ÜÅôþ[ ¯§Í·0Và&Ú“9¬Z=Lê%/â<t º:!?˜èl|Ê~/î§<ÅúMH¾wz¶yæÛOúöÒZ«z²%jweîŸRU×x׈" ›B<°Êš\rï¬l•*œ;¼„X>vÊÉ5«¢šUv¦ÕOšäizqÜõ!Ô[Š~_h¡Bá¶÷ìK•XSkPÈ°W„íœIf¿lt•çÇLTúê ¥¼±³` ~è3&ŒÈ)ûMÁÆTˆ‡Žµè*¯FaÃAgƒÃiKL[\Â4×7ørÔurµ™¥-w‰¬Ó¾^•ÉÒN6“ìx® VŠIMñ¯ÆjXy_ÑYm¶žOu©§mmeô×| Ê—<`xÿ>X¼Š ¥>¡FIšÏ䶂•&¨E?ÉTÝ*Bvd‡ÿgèÏUBÆŽÀg~Õ WÌE\š#Þ“
+ooc°¨ë6k²QDn#Þ»n4îäð3?Bù¡«dƒB ŒPÆêðF”*½|>G¤w|=ÜkÇ©T}¿ó<+â5Þ»RŠ”ì€ÇÒ>Xt×Úúm}êGåBÚËàäe~,… §,ÿ ”!†øZ?–}ÞœÉÅóMm²Dë 9Õ@¿qá©=§Sk°Ä­UAÎe¶cxÎ.¶oKµ=¯vÁ‰iUòbeVFºEžÈÐuÉ’<ˆúè’ªE²gúIZEðÇ’Mk
+ô’‘« kãîyÂÀ2øºe®¾ bº‘nšñUpùhÊ:Ãñ£©¥bœöáæSx,6‰›
+Àér®^àï2Ôöä1D$ÜxNG•‚¥ìö™©€cq|¸’#ú+q9ï3/븵Ž$ÒU݃RfWÊH_Ÿ^XKM´åΰVÙ‰¿áTR—îºnt;þ˜
+• :U¾"eõƒ÷ŸÐ¢,ÐAá…IrÓë˜>„ëÒC3Ì„áE®Î´Îi^sFTÿ›tÊ6Ç2\§Ñ|‚‘ЮÉØô2ÓõDºÒ²Èx#ÐŽg\¿É‹
+î±æhQQŒmý}E´æ$°«Z¿øâ¥dJ^8„I“ JBhó¸ó-½.çºêêEqø´â¹¤Œ[Lî–ëô<ÙÛfùbøz+ÓÒU¢Zœbüõ¬z00ó~_¹¬
+ÕT4U E¿QÁ"%HúÀ†hƒC¾—Iì -Ëàp|Uö~‹_š3g†f°éNç 7yhԈƶÐû5upiáóÆŠ·C@¯kO ¾ëÔvÙëÇÈS¥Ï5NÙfîâDAGµÃ#?OŒeKF=H?ts5x"\
+„\k`¸ïžB%EÛ"Dr0aŠ¹<C]YÈ6™Y Kwa<AìñùžJ\™)
+Ž½µð4¿¾,¶ô U] YÔ”ëD´á›d{{r±Ÿ6«$©ôpzi(6[šÝÆ’7‘0Ë7=®\µônt#~£!±9Z j†Û­í.pç Š'Û¸Ót:ˆ>n‡Üb)¿áµÁE  ±Å5ës•Ã
+? ä}ºÅRH¬µ¶:r|÷Åh<ÆÝÿLi¯,Ù
+Ü:- 8•*L¬“ƒ8…´wÉ3zò*.bh„Ö!@ol,Ä$„$æµÕ~Eóªgw\£ ÇZfصÓ“÷. gz„‡h/Xõ¢ êr'©9‘NäEíúSéÏÇ®í3á:¤©Ñ 9¼Ðß¡F.s$óÈŠÿ:[ÖòúÁiþ°9âÉlœÍëG±|‰’ôãå&ø0&}‡$P=U¶CÒ’f£üam‡úqQóiMáu¸8t‹ ¢·2eGׯ»€pxÛ³Á/è’%`­ÚœG½82öM²Ð³°­õ¼U·W…²’ýÔ±NoÆ?Ê%rO‡f\¸ïni: ALŽCIIËcZí³^]IIvG[³Áà"© 庢tò^;ì̯cR¦,È”º±¤Oê4_0Ö‘&Xh3Þi—ôùüIC5! Aµ§,îC°/ûÍÙ³¬ >EÚJoXXǦ6>ßÈOÔFo;ÅFãrF„‘këOC ˆ)%-o»cè¬!+H€$†j—öï|8±§ h4!—Dè¯È´?éÝ‘Ì6%‚5œ©wÚܶL?+ýò{Eu•«„½î¡Íö4ˆrÅ3è7!î.Ž Fµf… O!Ïtâ *ì%'rè×ÏÚQŠE?iPÛµll®‘n*èã<‚68¢‰ÙX0“_Ä ¹yÌû¼l›ØjNRMôp_•­x‹ÉÝÜŽ¦ýÒ@Í`³×úáü¸…6*TGUÓ¼ÃÝ8%•ÿ`q¿¶ðR&mjýVÂó}¥;üþ8iE¨¤r‰b|etð÷qi/’8°GþzjY'÷"÷µÔËO°íÄRŽ³Z÷GJЂö
+ø#êüî4Á·„ D¼ç˜p­“†‹F¨åC²»C+ØËyt+±”ÿþ¾»k&±ð}ƒ ‚L3R}#Ù÷ê)önë!MbY×v~~«ƒ¦6Yë# L¸êáŹNµC¥E ¼ž—Ô(ÊØNuð¯2š²¾×@kã0ÿBÊçeYwÕ㜈⒳Á²Z…îÈP¨³Üfþ½Ð–{øÑJŒY´ö>«éKfÑ…km‡}Àÿ:%¸%\MþÓ˜KÀÒHȱ¯¥G¾Ï¯{œh¶à1ªòðÑèƺ@v€ ¤Æ`òVYxCÒò]že}¡/«8ï•àv†³)£môG€ñV/ÜU„ߤw?0¹öX×(îÆÄãD½¢ Ä<WF«ì¢AŠc–,†©zKŽÊ°
+ 2Pöª=Ç =Wóˆþ6”ÍB,•§÷"AÆõhŒÌ®Ï›ŽšÇ q±ÅÓ³ö3®”é¿m9·-BFiê–ÆÞRšcŸ¡’¸ »ç€s£ÅzÚ‘ùíp~9…PqÑ=᪮= úŠe¿Ø`åE9 ÍÕÕ•ùlÏÖ
+/yĨP9օЄÿeÎZOC÷§Ä³¬™+ßUÌDÆ©‹P7E… “¤@?²h`Ô¼D¶~”´»UÇJ€bIÈÉJ‡BòçÏG8±•Á}Ww…é-0—çM¾¢ã7\z\F=Lë$DZßôæàN)qÛA|_!=þ½µzüÃBQ'²ËÌ<³ ïUü¸¤çïx·:aÖ<RSÀ7š&%»y€FÄ—HˆÁ‹‰ ýL߇¼†Uy·Õï7;4ÛÂ^v¶W¾kX±R¬°…Á~¼zW1ŽÊ6Îìm®ÝO×’K™-¾heaªwÑïCú¿è
+¶Ù8–ªªjhc®WLFˆþTCƒ¢~f¶ýÄM>BŽ}#Õ©]g$|I‚$I*¦'ÚpdÅÔ‡%£e,xFÒtLÿã— ¼©Ñ±a!垇£ã(‘B¡*÷cs pJ¯ù-C<ȲòôâÊYéâJ/!/ªV[±LõSLNUci±s¼.`âvbÝp-÷©bЭ–b"ò«X6úê{j©—“™ òD[±A´†å*ÁLyý©tFµªÆ äÈkJ(Â>ú[´”àTügçÌDi•Ê„ÈÀ÷YÀò>ƒ‚ñÐMä„(Ô5£©ÆíÜ~ƒô¬ÃG¬0Ç`r=×ð¾§B›ÐO§ªØìg5@ªÔqè5»‹_ˆ d»úó´¤Ý’'ÑÉ¥  ô$è·íÛõ­T'€Txù“CJ-Í¥`UQO%­u¯þU|
+zý¿ZéOĉ8OXœ?n‹¥­"á”6œ“a¯)(ŠþŸ£ôüÐág^±ÒÆÏÝë¤ãþ]gu`êñ>"‰ÜÝ#o_¬»\›sIØ
+¢Mûíý9äW<‰Ä$M/ü„¸Ÿý¶w<z`ý‰¯ž2Ÿ¯™Úw€¹ð:tó‚n© îª3¦×ÐQh)ga¸4zµcŸ kù„6”0ËqBBlãuÂO+"ô}Š²85·õ4Ÿâý_¢W1.Z1ð±¿<‹¶(gÒ .0Œ:¾ì-¿ó™ì!+nOQè pèÔL=ëÁ.¯z(¼—Õÿ–€%ÜÕà4liW,¾ª·6a3–}‘" vú<ʽ¦ïì3?Sªq^÷³Ã¹kBèõ¸Ûס®¡tëþóògΓ=TZ°rD¯|ÑÈ!d¹ $é[ýKÚòJOp…<]S-‡ºÒÃ%¯/ÅÒÒÛÞ=RùÅ)Å~]¶]!œÀ±F‡¤ekÜX%h²m•‹d[%[OPÚé&#X˜$ØɧãøK"Â<A!­~z]ðUÜFqÈiJ‡Ê¡]“ìOÍïÅü_?5òŒ§ WN•¶(B–U<
+¢J³šò…oÏ®q*¹£³«µu¬ kÌÝ9™!Þû:Uk^Ž¿,’ÑB …Ölúz£Á©éËMØì+²ó#?ÌDnŸQì©[$z¶ß„‰äOˆSàIÅ
+è<B´,A[‰él±i&êc÷ g:À£hBôÃ#èV‚¨)¬;f¶®-¹<=ÃU¥“ú åõÈ‚X"ƒWÌÝC¶n¡€ŠNòXÌr´„å”»éÇxœñÀ÷új˜õÕ*êƒánã#ÿû©°•ÃÆŽûŠòkbúÐy‰£Z¢‚÷¥­ ø{3AÁ›,Á©
+ Z–';χ§‹ŽQ^ú§cç¿ß!£ýžNe»\ ÑÕÔõ„Õ¿’âú¤4“èî 9= T¶ÄF†F…캲tÑbnÚ$`é¦ýÊ+èHsïÁ.ØÓBA•+¼—R¤¾Î'rª 7ˆ
+tͬáLD›×ËJL1KšJ¹¼~ ¬Ÿxþ¨9×9†ó 1¿‰)ÁŒÕâ™FÔ ;ä¸ìÉHÛæ›oXÝÅCã½^TËF˜’”˜ÍrM6ZÕEXõDÖè<–gwÅØÉ:îŒ3:²ñ*óöoE˜âsµl`ó7×sŠ/ÁÎê+³í®Ü¸¤6+žXú8p¦ ·ˆpYú¼Î{ž•]Ì:TwJáÌ!‡}+Б…Þ“‚ÇZ„3ëâ[?v5mˆv‹ˆ$NÖ;¨Öæ_“. O¿: q¦s{e
+
+endstream
+endobj
+24 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-251 -250 1009 969]
+/FontName/WWUWKJ+CMR10
+/ItalicAngle 0
+/StemV 69
+/FontFile 23 0 R
+/Flags 4
+>>
+endobj
+23 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 720
+/Length2 14921
+/Length3 533
+/Length 15480
+>>
+stream
+xÚí·c/ÏÚ-ضݽ۶mÛ¶m{·mÛ¶mc·m{·mßÿ9gÞ;1ï/7î·‰©ª¨ÈçyV­\µ2#3’ŒHQ…NÈÔÞ noçBÇDÏÄM("§ÌÄHÈDÏÈ( CF&â0r±´·5rp2qq1ŠŒÿiüóp³±r³1ÃÀŠØ;üv²4·p!¤¡úŠƒPÈàdibdG(gäb°ý‡ÄÄȆPÅÞÄàò›žPÈƆPù_Ÿ8*œNn
+p†c`uƒÈšbûcesõý®Ò¬Ô×s‘D³² dåÇ5ˆSŠ2“n’ž±2ÚÏ!ꇎAÿ±ïU¼kØD0Vñ "ê¶fo¿þÈU¿g«ö.Uò—4P}§öšPŠt´v'´¢kâ¤ëµXãO^[N$ÎêB^þ¥ßX܇Xcc 'D„5«ÄQÛÍÅE!i`Ae9W¡”Ï¢MØ8ÞòRKŽ
+Gáþøà¯UÕWk´´Â(¥x¥«\µm×}%Û&Åí°˜
+!Åæ渎ÁX ʬïp_#$⌄½AjЩ– aèŸûFѲø1¿6ãÄÃYÆ6-8GÃÔyÖ¦–hÞFÕŽŽ®èPFtyeøÃý\ëdŽ#Î ‹xíoÞv—˜Ãªò¤Š–ᆑÏ
+³uË`Döä[”ˆFšBv
+Q«Fv]ßIŽá¤SvJ¨q’¹™jù¯‚†‘Eô5Gd?¡—~Ìrã-¬«¨úŒ÷—¿l“V7R•öËïw‹5!ïÜ•T¨WL¨ÁJy J ?­!™È{)Ö,]šÉ#~ŒKx±C¿À"WMU—hö­ ‘P¸8»LÂ
+¢|dš»5•÷(šëBݪ?Ðé³rœÍ™2“Dé©ã¶÷“Ç™Z!‘( ¸™«C§gwĶ&” ¸Œ(¼øG Çšêf±:Ìc»ûqs††¿˜XGŠv­íe]/ÓU͆ŸÀƒýÐ\Çñõ‚Jû\%96@ÞN-.àWí†q£ð×Ùª'œ÷'³„»`B’(‡ äã¹X®ÇGhí¨,r–ŠY:ÈÙ?Ö¼õ†ï=0‚s „ÕG=CtÓŠc°vìö—¼½YÎjˆ}WAî9˜zKÀõÜů­ F5Õ*(¡d5œ1";Bvʦݼ=`Nÿî…O&-qK&ˆ‚í ü¢ëM‘DëPãÁU¡zúì=£¨$aÌ\ GzcͲ©9ÉŸÏJ6ÔÝiϺ3ò¢¥ò|2NÖ$1øòÔ-JwÑ$W²
+—ɳ»øœ^¢ëX ~ŠvY‘¦¼‰öýNÓ8R[fBqv,Ô-‹éÕ#¹Œ5S2@Ã'‡-½
+d£§·hk
+Gå°†¯Ùƒ“%ä='‡á°ôÊ3± 9SC(+Ü[eË
+¤­rpR3—Oýcm
+xpÎ}
+Ýzà6ï%GA°Ò!RÄ“ž”2¦ê' ô÷õLipCù§Ö œ±p±@#êd5[<¯d_p’þX£¹t±“BYªŸT“7B¶Z'­Ê˜€O¤Ïç®v¨¦²¸[«4C`/-ä¦ àÎí9~:ñ–z
+•lÝÉVF.¹ä:ä¬å(IŸ¡HÉpl$W÷ŠPŠ=è×à¸ä
+¨Ó8aheÃتÆQ-ÿ²3¬«X6¹±8TxŸŒïDRWŽ"TycÇ߲ư©9IþyŸoèÄÑEã
+$KY¶G¼
+»Š¾TdüÍ3r¯¬ /ù=u“ׇ„øÁãñnEÜf Kå…$¼è2§‚KÅÓ¿zýmg$awÇu»Ê›t‹¨Iµ“/
+( &<è/¸3=Û.@?r
+p¯|Ël
+“kÛ={ÇCc cÊ
+œÙ=•,lMÿÊ%"Ý÷ÁÈ1 ?ù»k‰~e€99ÅUÄÜñˆ¥§ŸmÎhLX(÷Ad0tj/’Ö† T8`úáV2Z$~›j ™éΡœL; ´ð>äácPÃE5×°¯:/‹TöæpNA¥á‹ ÀÖ3½zÝ^ %ˆƒL´&–a– &ˆË“ŒGZHÈÅ™ñ঄²‚ª’‘í@êÌÄGŸ&/TùÜ*…ƒpHŸ¨’×åR8ÚÝ÷ÁÕãÐà½xŽµÁ­"qݘ£¿dzŠ²f¤7" ØŽ#³¤0vr"ÚÈ ÜådO¶n¹lñY[œý3fô‚QÒ”÷…÷Êå”ÛL„ë]ÚÚ Ä/dá°±âî€D¡¿\Ž»û”U?”“A3‹pºü Oó¶dÆ°Š´Â÷ñ
+|¤~å³Pœ÷Ä#Àîud
+V*òYŸ@JìèFp(ã‹z¼,3kiœª¸¼O {’VüX4e%„“»5>qöÝ¥¼¹ Ÿ}v6.¤”ºÝ19;»„‹¡lÁšÃÔÃÙWË‚ï„0RÃ}—¬Á ëH5¼|YÐÛa@Ú|„#ı>†ÌUm¼
+Á©¡8 Ò°n E -T Ž÷@»
+þ«>H%G>o¯iB8!4î0½õCø|)È<ËÕ·Kj‘?=ü\YØIÄV©ýØÏoÏØŸ…ݱ£[yÞ ¡ÓLˆ@/Œâ¼8¹S–b‡§1>æÏê TmŽë¯2lMFDžæu2ÎÏ ”ï±ïö%ƒQPZù.Êßµ|+Wq_b9ù@±c+Äè°m ÔÐ^fJÙ¡Á]#f&KÕ9™&›;k帛™"gµ
+nYƒl _‘ºWÉ8Jj±4%âà½yã냥ífÁëz œùz‹|KµøW餻o„Ê{i] hþ¼rïEˆ
+7cGánRšÓ3{…M·ñ¨—<Ÿ k¨—íçLG8Ü$ÅÝycγ]#­á<ðùÒG‹’¹Ç]Ïb’é_OÐ7â
+
+H³‡s‰‚°i~öLs­ýYtÞ²¿ÀyÉês†¹ÛsüiÚtFì²b°ÎÃs*¥sú0¥§…Ø^/O,Bχ
+ù- O(‘DÓoV W ×>šÕÈ¥Ÿ¢gà`;­aF„¡,õ}¹èyBüã<«žWŒ"jŽ'WÒ_—)2÷Úû­è¾PqS
+¶N.( í˜z¿ñ¿'¼ÂŠCõ÷"úšX÷‚S
+‹Z39JÚѾR+]l\]_g !zypeäžf ð°ÐÃEÍõoÏåëƒ0Å+æ¨=IÄ4ãe+l•
+Wä„nr<³Ù»ç
+LJËu “&[,Ù¦¹‹ðú¨xq-nÕƒÓKAHMJ&àªêÄ`n$.U¾Âë£ “—Ãï¨h4h
++|ŽU´ö}° i¥4ºyÛ ûKÄ'|Ùv Qä)÷l ×Ø°µ/‘‘âÝgö²Ù*ð~h:dÞ¸/ÙýÌ‹°úÄšâ"hÐQŸžGY–8a9ál]Ük’>(ÑïדÐíå¨#Ézv²™5Á<òúe9ÃÏ0MZ
+]ïæ`T …ô\/³@¶‚J ÊŽþNÂ=vé–ñÝýRNDȇG¾j‘]YÊ<é©$‰ñL‹óÁâؼõ Š¿-ôyl¦$»Îþ´gHS€}Á•T~A'¯œ)twùŽsð|†,†A2CöÚš™’ÂEÂ’úÔŒZ…Î ,^†ªýF¸fOÆ S(¿¶ÿµì‚•Sê÷ФPÃ,OØhéå6<¯¬•›^¼îL^30ýp§Øƒ@ò¨|埤³ïý<[Ëôão4ãòP_â—„PhZ•gõY £Ê˜:Ps§Ù‘\¾ÜŸ;ŒÆ7 ‚U]wªz 6]ÁKs.Ô¢.,XùŒÎ]ˆ~º-ƒ”Æ[U»Åȼ¥]!_Š3¾A"Õz|#œB£V†6Å·é%ôïU©Å
+(6ÑÞ³±®&_ðç—?·[™W›RUïtÝ ^k'¦b}šM¢šùÅÆØí
+­-éF…ÏMw|•-‹î$á{ÅD …±swåYcG ]Ý ^ÒËS0æIèÆ0ƒ"»•KlmëçE$
+q’oßúÓ¢ÀviÓx§ƒ¿Úb-Œ(ù1ÆvÙ]¿JJ§šB4Ê[W|ãð¸táŸü}œ9‘§F“vÌÈ$xÉœ³{oÕ´vžÃÒ1_Dƒ9û³¦kuV ÆYÔ‡×(ÉŠÚ­%óæ—¿òõødSO²Ü”íjŸ‚{™ØùÍhk!ðÅÔcBƒ¨ÇÄ؈o=‚ñ|Wà?ÞT,¹{$&©_Ä2„áöq§‹­öŒ²Ž¡Œg/F~h1*&mB½äÄÔ³¦>ôÊ‘ÐÖ4_ì½I/\Ã>å\Oé¨Iq_Îm¦ÿžï“ü¡|£Ž“þíÊò‘Œ”¶Ž5Û©]™(Ž§ó¨’=>ÒÃò'mØYˆtà×å%YÐß«g+Çflþ·l¤CJ$JA5$°¨áñ Z8ÙaÞæM‡“¼‹1´·å/5BCÝFãhW¥Ïj~…°BÅ:¼)¨x5-
+¼ ,3‚%!ß½‡îRN`F牉@L-XWLó’¾É–˜,+Î¥ÙSÊúœ¯l¿ÿd`‰>æÓ‹¿…§Ks#þÓïйt»-öš,÷Ô½hy‡fŒZfðrP™/ílèކʨ ë%}Ñ)àÎ5Sª¿ù”F¯+ÃPÑÒ£õUÇMÇTJ6sxî$¨-X-ßÞd’=*Ÿ)Î2Ö!x>eN¯R¾Gƒ¸…Â&Ç6PÂ
+® 5XQ^Ž»ÞiŽxÉÈ‘û}$ùM¥(Ž¥ÀaÌØÄüôB
+¼~ºÊ»Eª_ÊeÎ}"D'‚ðÛYLm•mXë¯G*_yüáäû4æ‘ÎÝ‚@à ö.XßSóp£0Xi7ÍE¡[I‡¹#§ÌÊÕ>Õ„Ñû;£ª«ñ0¾1CpU5?ü%Pzð¨]öœω´¬–÷fsÀ,ԛؘíleªôåQCÎÑÈVašáÓz#.ÌÒ³¤Ë%n;ØKŒ«êc‰˜žfô+ì2B–ÜpAAÁK|è`a@3Úö=:éíæÌÞÁ½§JhDKB œgÖ–§~/M. öÖݯK°$PÖµñ>>’’V‚ÙÆÆkéÐFä‘fäc^£Çô™rDËëËö-1j|–@ú
+ªèÇûˆÁ@§©)fTI,’Há΋‡w°S`®åBìÀn±ÞõÅnò=A‘«1ªêò²ªxÈ=)“#åõ1¡™7õÝ•ƒçN¸±RÌGş缿çPžµ1wÚ Aøã6ðV’r"¹hòt~õÚcÅ=> K݇ ùß©uØ´{*ÞÔŸ)øéÝœ1’$Z¶+F™¥3cüœ!Rl9ˆÔÛH‚oÓKõ=DVøb
+Ôîi/ÀUM¡#’·éj$«¤07ú“BKâÓf ÀˆìyöºZtÒN«&uKýIÍö}Æ
+ÐØ ²Šé¶>Øu£Ù.š2Ô£=]‹€‹õÔ¸¬šì:zuì0™ÆFèA6g¹ä訥œž,Y¥¹lP0Œu­Ö
+ë–X?õŸ.×r µíiY™™­6÷Bæ.圞’ Ù— ¤Ýv{†‘à‹H“]¬pàç-Q-=Â7Mø„Ö†á¬ÄÙ¥FVÕT9rÉèXئŸ¦qKG±%¦$NÑ/ž½€w9ù+—Ô0ŽÚÄô(ÔÉP1ÛÇEŽPÑmJòÎM8‡Zªôªöª)¼‡$m4ªÒM›Bš G€UGz¦2¯^j‹z:‡ÿíNH2?OÑ‹íLœHÓlɉÈ–QpC™*â/ñÔÑ·¶ÌfVåXSÚî|þýºUn.xq¡š
+&9âàK:ôErÐ%2·=’h,dE«T°^j1én궇Âçz¡}Ëß[Æßx˜â7ꑧ|yYÅÄ…O¶°Ì#³ey_e¾4ìY’_RK‚F9@†y@æõþp†ƒ”–Ó¥S~y6?·ÌMùeØg×#ÉOvåmüËÂÔÎùDô¨íœ<ñPr?’¥Î‡©
+~ý\ŒþÕn 7n¥àçýtmÄeFªÚÌÒlðsÔy—úó€R[é<¿Niü»ÁŒùœDKÓ)Þ'³6ì8~±±råg°áò7µÖNxîŒ.—–2d‰Çœ</·Áµé^ºf(§ÿü*•‹#B…OO\»É~ÖÐ÷ Ž,W¥/ÇBWk§f¡šù¨×–庆C[Ãl+rªæÚ½FK>®†6)
+–Ä?V@
+øí¬jêáüJú *ÚX˜ñ¶˜ªý­€ér­ØílîƒlyËYúðÇ´0œG­ù/yÔÕg×ß ‰ô»—Ü!³å˜rêØèf.ÅøÚù’_ü|#Ó÷×Ô¶´]r9ÆÔž b)÷x|$2ú¡åS?¡ì.ÌÉ£6˜+A÷••Vè¡ghÀÁn‹dJÑy'Q¦
+JÑK(HL¡Æ–8rSp½ïÖ<ÖfƒÓM:£Œ~Ç¢Öî¯Î«–$$Üd1\È*uôŽ;¤róû3NËÖÀVHLÇÛ“ˆ.PI¶¾bÃÝï~mF$¯ï2öx_J¹êiø¤ÓûZ×S¨ÏJ¸<Tê=ø s1Y›Iõ–®~Á+×õ·—©Z>WÛrÞÉ–€_O¤¼<Ã3b^‡!6”ÌOZ>,j_åÛÓySìçÆ£Ó<j¿ÕãÈ{b¢¹S}¢}`4ð‡ï{ƒEèüGjè2^æå‰8ˆSû×_»ÌÊy*Û`øt„ÁÂSqšìêÆ×XO«…|ïÍ|>Ën‰#’ÅV[!]•H Þõ…ͺö§‹ó ¦s$É„–¥[ã7…’wãŒlzrQ³Ô©Dð‡ß…KZÕŸÑNµ“Dú*LÆaÆ©þ©Ð«\}¸´‘©ÙvŠ‘Òõ-{9èhè}˜±†ýådËŒeÆè¶4"{>ê‰Ïò’%+€/ù(YY…ôÖœcúH 9Á­n›¸ ¦Þ…¢1–ùÑiÿ]ýbaÄ&9î‰dX+‘,*ù²…¬ìæVB¯êŠÿD>RÆS£`&©È°]Ó(|*ÙðíÙäG\r¤ëpЈ½s’cÙ凊֬G#¼7(ƒbÏCÝÖÞl–ë"Ý
+“ÊÙŽ -¬ïÎ{ó2˜½Ä—®Ž+}ÞP]_Zë¦ÅÒqGÀ”¶³J
+Vµ¹©$q—Þ õ+£¶°¼úúÊ_FDa0õL^â™.H2§ugˆŠ"_¼Oõw^ȉ†à¯_¡ÈjÁ.ðA«C$+\{eE Ç‹°5®¨2V_|åK¬ Kú¯¤ÝõŽs'Æ2­™ÙâÐ]A àÙò@.móê½Q#¿†äÜç%0I­Ó `âÆ5éó¿¤bÓ8<aŠ¿ƒëÔè׬FÜsjiSJå4ªEZªhõ,®°ê¤òæ'û«O›VѺOH†
+ý´£ÝË™ž>†êJ¨*…0­ñé+BI˜²½a¦í3£6ø¯×8Ê<ºV+†2b¯À¹~tšÕJÎ DòÙ|±¢A•ÿ!C¶ÂÎ#ô=õAŽ´×pOƒi’@ßbÐ4FÖ/©hæ·ãÙš6ÌËïò.lÞ7+<u”† R–þžïúÞ4_—¥‘Õ„ß%‘J·‡WœæBžJ™Ý±pÚRý_ækZk7Y =ìÚÑÅB×ýÁ;6õ‚…¦@Ž<;ê°/‡‘b9
+”5 S9z‚ç¶ Ì
+¿(ÆQpýý-¨0°hº¸bpt1"q"ê¶ù2 _S6¬’É×Ø Õiµ Æ^Ï_
+ô ç=AãƒýÒ,ÉÿÌÜ`%fÚðÒSÛw`?ÆAÐSu~Šݪ{!`jRé~æâb‰K y6ÙC•-”èML:ˆ.˜<ÁÝVV{û{–ÊÓ3=¨£k'ÀƒýOÄÎkêU+üzåúωçz^ûßJ´›‡BØÓÓ(œ¹ÜЃ©~¼ÄÍÉØà 븽'R†,äùtÍ#ÕW5탄g¸/´(&eržÆ†»Úˆ °¹WìÓÜÝü*òTdÉk›æÕ©D»µ¹üî#´¼ïÙ ¯‹£¬†*#Úm‡€m^¢xÂÅ7RIÛœóºÙx”|–0¢œYp“Ÿ–Y:ŠüM­ÇÁLJΠ«œ­Î—[¤úóéõg_,Òo°Ò˜ K45×wþà²û¦äR¬gß rK^Õµ §¡ {§s/›åô/[ŽõšL0Ї¦JÊ÷qñÍŠ »Ô9ʦl|E™ ò5à .]*Ԩ̀Œ‡ˆR(IÄAÙ&jòè²Ê‚¼äÖ
+¨*ô‘Ä?º:~V§Âô×ïÅ{¾W»‰)=g5ÙŸHÕÙ²þ7vç›)o÷–׃É0]sïÌZÂ@bì/îÚaÑd#¡ ß̃‹¶»ù‘«+u.~³¾nu!ö•hwtS…<{m™YO<Þ«#r·:㬥µØ ô‚Nت!_I6@2
+'²ÛCZúÏ:•}s0½Xï¢ÒÇk8`çyšÏÇGˆM©P* (%K—ó%v£ öJŸÁ=³4Åþ³‡UÎ4‚­"°:NW[RN?Ý€Eœ³ØÀî'ú|¨o—A¶¿’e%^|0Öµþ~×~½Qâf#Ý\’M(“LýrDžê"DÂ`­©… ú"´ØGÝ| ûà¬epóãûƒ
+±£”q¹Jö4:‡!d\e¶m왶ñÓ—Œ—öFYžT ¡=æÌÑšèaâºr/ð­ÿ<;1ASÿ"5ô^81‰Ï;ÍŒµÀÞ,¢ò­Õ}EC‡·Ñt·;£`¢Çþë]D{ÿÙ—Ç#É‹x¬¿gmF¾Ë7rÚÍ÷éŠõñzáù¦çWS%|-ƒ¡³N„ ›Ë’IÞIùí£ÿ¼Ø­ðM}ß[9K’zœÜ²G_mjRC¢ÚtFI|ˆ%YJ’Vµð%‘0}Ö$]€nlPÈQlþüÛ"lÚíæïʹØCÞp5áÌéÃOL^‰ O–-³=˜äa9)7}§¯ÚdÑ9#Ö‘Þ6®2à`Xáê¤xåo¼é´EV"¹W[‚?ªxŒNQŽ!ä¿â~9!Nãoèl”g¡RN¨ÄG@ÑPnàY¨ÞEG¼W@¸áQ«'ÕԙÛGH0;Ÿ7M¿H1þ^0ÿ?Áÿ'Ll
+endstream
+endobj
+27 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-61 -250 999 759]
+/FontName/YEFKGO+CMSS10
+/ItalicAngle 0
+/StemV 78
+/FontFile 26 0 R
+/Flags 4
+>>
+endobj
+26 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 717
+/Length2 2248
+/Length3 533
+/Length 2784
+>>
+stream
+xÚí’y<”íÇ¢i!»$jd3˜aÂd “1*!Ã<f1c†™¯5Ù—äU a(m(²¥Å–ˆÊ‹"“-k!Y[Žêí=ŸÓ{þ9Ÿóßùœçþç¹~×ïþÝßûz¨"§aL¤¹ƒf4*SCè¦68 `pjÊ
+‰ÌùÓA£ø±˜ °¡AõWëðœ H$±(¿v-™2ÉØêEø‰äoFbƒD,‰éá xÈþàw¤…XÜwÍcͬÍíÔþü¨?ºX‰Êtàøý•ûÍþ½Fü³^ƒÄŽÃap8b͸¶~¾¹ürÚAªH¢z8&J$0ˆ §21¡±ƒ4ö!
+2Ú‰îóníÚ¿ÅÌ7ZϾ<>µºÁ,í@¼I|ëi´µâ-53oÞ
+Fx9~V«²l=Ú¬÷¥¯vƒ›PNÔ‘ØùÎÛ~Üø¥ä3_’›Ò{å€á ‹Iæ±û³u{]ž¾LÈž0{tLduÏbÙñb Š—³º ^B²6²â±^—UÜ@9Â}Ñ€[v_¸Ä’¬¥¦Õ–»ÊJ?KÙFA5Ý:ÉÏLÝÏVøòd&¬À®…-™p¶Š—¢ô±AýôWqŒV¸e^]ƒ&»õnf" †¹k/×Xà[¤ÛASžÃ¼Ý¡kp¥ÕY*‡n j­7|&½æ†RÒÞâ-M5]s9×&=Sçõ×f½W/ß\á=±;l9jjŸ¤tÇ£ÓÒF¾y‰ø²`Ã×V¥KUÉÍ$ï‰Eû¹,©£v
++÷Š'JÔ£¿Ø@2äã>³‹§à1ÕAÔÞàE§U‹­™â Ôâý]¢Z’*-'蟂ênþ6Þ¨
+L)GÎòyÛ–X$¨VÝ$VŠÂì¦â®Ë6Ǧ£D«øqMçžvÆ)Ý’`#)A¯£#a½ôm×ZöȾãÈ£ªã3擄Ïίfš]¯ÕªêÛW)䶿,³MK¨{/ÒsžÅ^ñ§†F^©_–Á¾¸ÇSÓX72ð*¨Lò•¥KHóе'c¹É\”—Š
+[šÚóIqìÉÞ¯Ã/ÙëeΈgW;D|–I>¯_W™jäƒ <_lŒæÓN¦9¢ۮ„z¹Š–ÀÒѬÍC6«ýÄp»é£¿/»‰^•OJ‡û`¢„ÆÂ>$™(ñTÎS—Ôß¾|àšÐøŠÜžRC$ó»pí·µ?‚¼4Ú»êê!'#—w8 ߸õ}O_ý1é´–áòó¬6‚wZ¡· Æí~ E“¢¸Û+Q§œ=ù_ÓÞ´û„óF]U¥1³<îÙ~–‡?yb+¹u6¹ƒ3ž±¼S3YÂ|0½à4©3t•$häh_P\Ùñ¨(îâ‰Õ[»ºLR§REXu¼Æòé|ë³Ý!ª—{ ŸQ…h‹ZÀR[„¾Ò¡ƒJŒkGÔ'“(¶…NáÍn¸á˜_É›†ÑeŒ¦tL†Lzºíï¥ ¼è|—EùGéÍFR×»ý'…ûÔÚ`Vè–& þ²—ë$'D?†|²ªã<p»Ã ø
+Ã9þÞÿmX[˜\©Ï}–
+§²ï*ð9æ¥ð 5dž;*Zl¼9þ_>ÿüOxAƒI£¾È?
+endstream
+endobj
+30 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-27 -250 1122 750]
+/FontName/QWMCWQ+CMR7
+/ItalicAngle 0
+/StemV 79
+/FontFile 29 0 R
+/Flags 4
+>>
+endobj
+29 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 712
+/Length2 1737
+/Length3 533
+/Length 2271
+>>
+stream
+xÚí’{<TëÇ©ÜÆ%’qÉÖ2ÈÝ̨q‹rÏ%ö „­ÌÂÊÜ31Ej„Tä–¤Dµ•i\R©Ìn$2¥D“kƒè¢\B±§:íó9íóÏùœÿÎç¬õÏzžßoýÞïû¼¯.>À܉HݹS) s¬Öpññ·°„ 0•â
+2 ;
+Xo™´Ò.ˆ+æŒÄœÆ€˜’H¥X
+ãÛ%ï÷G ‹§AñPâä)5X2ÜìÓÉmw„¨à›-ÏðˆºÒ‘ÜT òñýQy’”EÇŽ´”üD§âì;ü‘㟌V®?X¹×gmÖ)Â]K«¼iùàv˜hÒŽ“1dþDµ&tú÷БÚð°jÓÜ‚ÔÒçãÄ7vOWóÚœ°i/¯‹XjÊkî¬84xKÂ.BèçcZ>U!MyäB UÕ`UXª&’Ù«Sæ?:š&µ_õˆq¤Ÿ¦ &xJ²ø-7S²ð¹“A×¼÷et(¿Ë%ÛÝ_œ\3=H¶² )YU
+âu†ö¼]¦Så-·(Q‹“«–ù2ÛØñvÛ U½9%ÝÝ5.6V¾²pfhI@ßõ Bï²µ†vÇ ²Ÿ _ëOœ;ø1}¯j…[¿·¯hrà3áçI”PnÜùbù“Ãòö탉å‹Qƒ'禫òPz²´Éô¤Ç—žÖ($hoiQÉÑ@:P)Ao°{öåÎl†d‡MTê ݳ ^ù"¶Ì©*M¿¾ÛÕ´ó‹¾ Þ ¿1èM8àã­.@/X7ž²"w˜´£øå,§­ëœ5ùêù=ó–·e|…a®Íù+þ¢ê8ý0ù¾Â¸gÍVC
+ ­×3ÊVÌÑf7wâ×™«W ÑUó·äÆ«¸
+&9‹Oó4/dÉ¥øms{>¶68³é øÒVCÆ«;FhÊyŽè]/#ê#>˜ž?\Ð lÙ¯¢;›ý*d|&5ÿl=®°¹ûø•»É£Qãë¶öcý†—"^ÆÏí(}‘Ë¿‚î-ñÕt÷å
+Jiô .(êy"MúËs—û~Љ ]–® ñe>õÚÐv¿œæ¨öÖÚ¤A«©nuuUà'Ÿïâlcw@ñö£ù”vð× d0¤e,â— ½Oãp©>7ÜH<çÕúÕW7Ls\}ø¤9ø²Ž_˜=Ž5:¼Ác¿Ì‰Žñd‡kCÔÍú裡s»l7y_ïÆÿ’¢ÒOËúXJ–žãïö¼ëÓØåË.<òûB¡Á¢f5Ûîí’í¨|Yq涼ýþ†”Å&Òêð³€–ÊÝÒïÑŽ Þ9êQ~þùZkÇÁþcĦ⒎‹‚­)ATÙ‘Ëõñ4Ág‰Ñ1vfnN6òEé¨ÍÜŒ‘õð’ÞS—ö6wEíÜr¼Q'¢ÚàçÐf;Ièq *e°©$RµþÖ}Iz\ûÞŒ{·ìQ´äe«ÞXºñoµ^¸Æõ?ód¤0ŽäQAjÓ“º²å~ª¤©•b…kõòhI­”¾‰’ka7:äWô-pàXügŒ gW+—¡š’å 5ª—CH_Qœ‘Žs}‚N>Œ>{£ÆÂéóü¡1‰veaÇGÒT 0Rôˆç­«%tMBk´,Úx2Ù¬[=¨eæp[m³6î’ÂF;“‰\Ç´é(bOº9F7rŽ_Ló©kë{ÍUá1/(H\êºçÉFÉoxTêM—Þ¿/‹cè}oñPèX¹¾›Äœ¢‘7ü\Š±¨O  ïKw­¼“Ý4¡Ùýk…þa7.¤i¼b–­"Rü$‡>Q®"»öêœä£ÒsjgaÒŽáÏ„`Ýåá«)Ö‰¤ñvÑ{þ™f¾(­zD¢ÙûPš<%¨s}ŒW©þìxuÁ¡Z—bs?èÜ«}Ïì´ž¶ºÒn­=ð°òúÈvbÝ´°,p¥« v‰¬úìí×›º‡w_ùMF¤'Ö×sj][@[9%ûÈ—\àt çÔ;«r—Ð [Õ,‘`Lº%OM—S¼ìµ$„ݪaïOírÆWÑ÷~8ûXHà  · 'rW³å ³W”_Ë­’4äêèy´ò®§WÏ~c&®?ЬO·ìœaåµ¼ë‰ÞÏ÷âå´iK! Î%ÍÓŠê$³7™^ÃùEêg©µÎMá®i[°³E<¹ëmn·G0A Ý8œ2d"•›Ætô“!e}uSË(xežÚ²&“ƒa_ºw÷)y17lL­Ð_:=gÕXwEoq
+`˜ûG9—Ä6Uæ6O©-WYg{á §»Ílj‰ÙÀÕ8P•ÔÓ7·†q¯ìëyÌjU^·Ë!üÛªïÍÖ¨ØhnŸ‡&nK'+Ï”<e Íʳ¦¿$,x4çy "Íu!Ê«2dšàx…¯aöŒ`Bø6¼¤Þ,-i¸fÍ P£¡òä§Ce†]øý 9¼=™Öâ=N+.R­f¢GÛÏwj7Ö¼££– ®¼I2,ÛÚ_ôàq|^ÉÓš¿Œe?̘1Øm¼²nGü¨`ò>¨…mìØysê³~?æ¿|ÿøŸˆ A A%ƒôâO:ë¦G
+endstream
+endobj
+33 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-20 -250 1193 750]
+/FontName/PATSLS+CMR6
+/ItalicAngle 0
+/StemV 83
+/FontFile 32 0 R
+/Flags 4
+>>
+endobj
+32 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 712
+/Length2 1318
+/Length3 533
+/Length 1847
+>>
+stream
+xÚí’{<”ùÇ×ej›RGµòÐŽh̘É­iÖ Kä …iæa†™gÆ\bÜW¹å²*·è¢p:ŠDK&Y¹®È­¥$DÙ\Ö-p†N{^ÇžÎkÿÛ×yžžïçûy>¿÷ó}¾-…§sN‚D$@aÑX3€`ï´À¢1p‚À©&ú–*
+pù ïHGÃáX,@gÒÀIЛ Á Vl!/`üI¦ ¹Ÿ[§@_ÊèJ9õ
+Y,*{%^:¦?t©l&Kô¯>‡Í
+@`Ï¡ƒ<h­•~B³éL!{m×V@e1ixÈ›˜O“Od€tS@c
+g$] ¬©!`l„ ùO£3Äô‚¶ßF ÆØÄtU¥ y<¬.ô{?×^Lét@0
+’_Iñióºš1E¡öæIUsî5"ÑöüçÛöx5U¸ Ìš$Œ Ú”J\e Žƒñb·»È,£ wØ–Sô,÷ÁoµZê¥ u¡~¡ç»"4<»;töuùf´N+»óÈËswÖA-º«’šèN)„a¹ä<m‰rkÿцq¬8§$«½cf 'kÄÆf¿ù“CÁµ:p³Ôà|îl·˜‚Šº†ü®×$èE_ˆ÷+0çЋƒ\U«P‡
+ÀNNÓâqõ7!7v&ß—I¼˜~÷EL¸bn÷O€mìô–¤¸²yÏ
+±”Ëo”fµ&¸¡Öõ»i°âH¥¦Wå
+•:d¿Ìâë}Œ/eˆ¥â§dÞ³¿pÙÁ¨d„g2ùÝy½„Ŷ˜¥QL?y|¡©Ä
+ù*7úH–‚ãÇ” Òæ2¡4a§m"ê”2˜9nä«¿ â¼ÜùñLÐtË 
+‡7¥êØ“èQ«>,JÚûÖì>Ú™sûðdB{_–ÿp¦\ñý¹ !Ïa±ï7Œªg$}ªË®vSSÝ„¯²h_øÇôÁÔ<·Ä ƒüLÕÝ?èG¾U¦ÇJz0ÚÃ?éÊù×}„u«î(ä©“©>Ë”G*bíÚ³¡-Ë¿ik±?˜PÊÏ,VpsžU:À@$f*–•:¡;³«µŽp<ݳYö*õ:ÁééZ…½N‹ìˆ š¸¬ŸÑÙayÆÖJUvÿÛ–BnËÝÂ\A}yœÿé´õ{”Ämˆ&×ksF¡¦æ1ù­(Íå£}­ÅÍîy1ýó2Ã`Íiåa¹Þ¢\óº¼úcOâÞ÷m$7Ž_øš=Qëúå㣆§íá¯2–ì,j ›·§ÏåÔ!â ¶ô~¨ œÆòçK"Îé½EÚœ¸4å´Wó.K¼q¢t¬éÖ4ª|ÑÑÞpo¢¥L2ʆ#­áO“sÜ䬮±Nž\Öˆ›¿¡ùÕøöãa·E&ù%Æ9 ÍÅ!ᨿ÷•wI„—–ºî¨%ßOq7¸mûá<ºcd9½‹…H(JQ@ óãÚ®Tó.7Œ„=*É(ܬ›IÒ3xÕ³õç̱7¾’–mzƒ5ûgg5uÃï ókÝE<Ô:ïIG,Úý2]Zœâ-¯&ëë}“)|51I\waNvÔ*…„«=ì=)ÐoÝ„ls4Á±|ú
+‡ÊÂÒ¶ÅÆD1[¾ëñÉa„öä%y"¢[î‘gƒJtM•£[Ù(×h·[³?H¸`p-Å ®L#‹Äå:qOCaO i2§i1hñÑF9PX]¿hê3–‘-riëÚ¹¡ p𢋘¶Œ ÞíKvþj¼]l‘h}Ó2óC»6(¿&¹°Æ#3ÙËxþÅ\e-ýCÆ|Ý°^’¬xÒšÒǼŠtÂgÚÄÄøúËVNÞZº‰ù“üÿ‰
+endstream
+endobj
+36 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-36 -250 1070 750]
+/FontName/JKKPOA+CMR8
+/ItalicAngle 0
+/StemV 76
+/FontFile 35 0 R
+/Flags 4
+>>
+endobj
+35 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 712
+/Length2 6612
+/Length3 533
+/Length 7169
+>>
+stream
+xÚí—UTk·®—`»»w ‚[4Ö¸4¼Iàà Á-¸» ÁvÖZçßgœŸ›=öݧê¦æ|ßz¿§f}£Æ(-ikgK‚3ÊÁÃÉ#
+”U×òprdÝ@P°3DÎ
+òˆˆð
+vHöòTF»¶}ÕÃå`(+<0/«Ävš_8’úv
+™6·¿¨t-ùÅiÏiBbvFÚ;‘„ж(TBí¨á¯ÅTî'YÒÜÔšïÅÀ>¤ÁdÍ,ʬªo÷"mé%«·\yŒ5ù6T¶Œäµ‹ýr? ¾ê¼^wR ¶YÑC©ÿ
+:ŽÍ…—ð¢8åO ©\v›EFóÌæa™AÚ•¶0ø ¦ji‡ÿrÒ †Þä‡]$íÎÊì:͆ž9Î5+žGsBOáÄz
+®à% ùšL¼Ü4ð íw– BlǺ³šäX«ev*‰©àNîâ6/žïχð´Ä¢‹ÕØžV"V ­¡iÚË+Õî\¿ú¶ _Äã¤X`Y…ÍS¬c/:ç>þÜêݭѪ‰#"ÕQª«´ýJH£Y÷ì“ž¶Á‡1É{1&œÊÝøq•2ýB{ T³Mv+a<ÉJåisBS«çŸ u±*Ï29(vð_S.yÄ (ÖwG16¢êÌ݆±¤Më› Tª½ °Gö¸ Ð3 Aá z„Ok…ÇøΡܴ“ç¢
+uŒ 5Á‰Wõ6ã*Ú·D?ê°Èˆºd­‡ŒG[‰òNP¦kÔ©ØchÇtçà Ç5àT5=ò C[(0BE Œ:$»C¦hæؾj‰Ž!gy4
+ßÈó~ØWÄÂiãqPÄ —‘Oß•Ä"k„ˆœË][›fä/æ¼£l]ÕêÂF¾Üö]I#'P4ŽÌš/ŒoCIHŠÚ G+z­Œ#Áø wȽì/)#Õ0‹dUú]ÄŒë;‡Z£P<L™gÉJšˆ.µdwï%›Ápq4ýÁE *L,×ù)rƒ¬ðå¾…Ö~´•CV÷u?niåÄ=ºq4Àc+Û€LϨ²î
+u²}íÇ!?ݤë'_Mšì
+y]œÄ¸%Zë3…)ŸÂ«PÖâ**®^ݪÍÅõ„½ž€V5>¥2û/Y‘‚+4®÷?R‘–R.‘KnTF1&ɘ¢üx’‡ Y–J¸*®â{ÄTdC,š±„œ¿Ã¹z Õ…:^BÙŒ=ó;+ô–1ÿžòèײÚ5½úaéð-Æá¶QeZ1»yê¯3oñ§hÐ9
+…@0¡ÃE#â 3ò‰†ûQý¥µÄÙ,‘6ÕžèCH\Å¢Å#¥ãYÇ9¹+‡ºÞ‡c^Η°Õ¯Ž¢Ýw¶Ÿq—©¸6hž\b._¾.PÓ0ƒíÄžð 'bŸ=m Âîõh
+oÔ‚³=•à™1ý…·r}ºß·)qîFó¯e7ö&u¼8<©î*MÌ'+Ùåì‡ÄöË.-Òpäèj¥7çâ…÷"D4Ôçjb,zGéXêY‘†yN›ó#–›ŽcO/پΓá§cÎ Iî´½%)·ïšÔ‚yʧÈ/òŽ‹$xeÿWâãkî§ýð.ïÞÄ ²Ehdãý2f
+ËǦ­ËÓ`
+ü¬!µ<1Þþ8$Ÿ
+ý®¡;Ìm?º;fÅF¤u$BÙ ¬ˆïâKG»ØÛÚ©û]óŽ~o¢åä)gÍœï/—˜ §\·?etýôz@°Îx÷ÅÔ)¨~<²Äá¤ê¥<JF½ôÝî·›ÛˆiÑñ=ynìé'½þA£pÐßås\q»y·KÅŠ¤ïŸ)w·R-èùÜú‰Uƒã•Ýïí5Íë—ȬÀ‚ÐŒãîE úš(ÚKW³ W2ÐaE4üXV^L#l5o[Ú,,¥ì:±'¹A£±@'å'fÓ/ùõ[±-yQ1nŽx®Ñ ¯÷ ”HjÔ®F|jüÚ¾¸'ö詳¶=ȶÔw_üÙžpA·x^¬Š•ìbIõß­}Ô帀`þ²H1áGt.,,Õîî:ß…Œ¢W­dï3i]‘‹Þ/ñÛö’&ÎÐëšàeá¶ͺ±å›°¹_“wÅXâßÚ£äŒã/‹6ǧ}w?÷í4'1h?¨"3ç…œ:„J¢‘ÆWâ©·9©HÉS ¯ñ‹î ,,ÇX¸²"ÓÛ·F*ÏåæFLJ kEƒ~é2?ë²cUŸÇ5äo ÷™`H3 ‡¶µF:6;IÃÓJ1°É§}‡*Ƨr•éUšx
+A¾Ë)rÞ{L>2òº•¡‰,dã(kw”¸%H^ƒ•Ð¯í/="1Î3íÙx^'Ïn€•ó)³ 0üV7},.xH/8°)òp<ÙK‹7énÚ+˜FžõrÌz2Þ†L“¸@Ä2â§q•Á‡µÑz¶®5ju_&ê7’Pƒ%[û¦<wÔLxBñV
+[üRr¦«ßèW
+°âÚÆØ+v2¼®ª¨h)‹«q¦£~f§F}ÝÒSzê
+.jß^mmbïs^‘Ñ Õ*5±›ãj0Š®'|^«ýîàM-€M#VgI˜Dôˆ¥åVSÐì/éå¡3£îæTƒ\KoÐî‹çda3—îÛCýôïTãÎô²ôjç;êõRà^ïE?:Á”1.Þ!cð(¡S¡•CEDk¶…[~´]³«ŽU}žÞ7§ýíÁt>QmTœõÈSFXl~ƺˆOÄý®ù‚ÊòɲêÙÕ7váWŠš<È[˜A×%´Û‡Í>R7Õí´†ýÃgi^i±àC£õO)H”9tÒsWH]Šdû<ûeÚ\¡Âè%~øü–MÌ|ýú¦ª¤éëíƒhõ[/ƒè;z~/ej2Lÿ6ô¡X[b—+»l.©nøçSõõþñF+ך%˜µ.]6"ÖøÍÿ×Áéz™«éõýûß ¯ß®<è9
+C×ú–­ÖÊÕ˜XÈ^O`ÜqM-?Gþù$àt](Q}sÆâ}/kØ’üJe!€âÔ t“kôçkòdÝ
+…€.Yü[”XwÕ¿-Šm·Ûúöy˜ñ>­<U’ô,+”§Ó0ˆÈcš§hʺÌ‹…ªrý}W[ƒ;×cÞZ³ó^A'æï³iž…›ˆs¥„p—YyfÄ!δq®žv8~‹E7×\E¨]xë3T¨&±a®Ê(©Û$Å°EùMV¦ù–—K¾•WDA½!ÃûŽËW§ÈøpFø»+œ™!¡5zÿzT'Þ Âq¶dô§å®¡ßbHAÿÀNíyNñé
+”{wß/ÛUõÉ‹ÿ¨áQ¢·UGŒäÅ)š¦ïN òx©TF‘÷õûf
+endstream
+endobj
+46 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-163 -250 1146 969]
+/FontName/CLNKKC+CMTI10
+/ItalicAngle -14.04
+/StemV 68
+/FontFile 45 0 R
+/Flags 68
+>>
+endobj
+45 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 728
+/Length2 8582
+/Length3 533
+/Length 9144
+>>
+stream
+xÚí•UT\Ѷ¦ .!¸(‚[áîÜÝ ( p—
+—àP¸»w'hpÁ%xðàsν}GŸÛ/=ú­Gï½Öüç¿çúÖ\kŒEK¥¦É*aéd–urtgå
+]›Í)íšr„c§#^ÄñG*]Wð“Èáá̪îtûº½‹–ãxÑ_\™ÊâØ™gùÜOŠŽ\ õ™çy‘11=O\·[lvÆjèz:ÄYWgµ_ûîcùxNœÚ@J¾8Rªn>Ã&\® zÖºVgJI„»alÔ¼(õì ŸŽÕÒ$">;³ã$ „é»e£ý+!«ù±Í\­?Ÿ¿¡¤’ûÁëÑ[< gKéå{!ÂÃd¦$Ÿ¾fÝŨo¼\VGuê«äÿ>ç 3}D­#ï¬sn—Kº“cʘáú¬ñÎ?fY¨µêÓ«ò•µúõSųƒ«YoÝaø("œ(
+µç`Ùî/£9Ú\ñ¹±#w–ñj̯ˆJ€¢‹%b¾Aï“  VT‘“ʨɖ³G+·§fMAuø ó&iÝôÅž<*™PË˼ âÕP“&²/–sHŠ@¨9%¼ŠçŒÓi[D‘«å
+s5]îb¿ïkè)
+û=‡(—Ü‹KÚ#{Îh§V g:˜¼À[~ÔzaýÍšDë©¢Ë}Xà@WXRýÞ^æA§ò+­íFWç†×ö=kâbøÛîÄBŽ…rg ØGçc
+Yû|U+ã~¶ÅÞ“‚®½Œ–ndÀÄå¦v Ažtr´î,æp}bMÛt$;¿?ÍäçÏH`ª+<9ß^rsÝnCÿW„­EVÅ2ŒcÅãA·ÄJXåsÜÉIŠ“ðzxüî¥!:› DXøì–Ôü”üùWù;ùÂßCûÅ]6ÑúÜÑŠk…$ïÆ–ê§(È]¤žv¶ÛÑ*ÌÒ{ïëÐÁS*IM® í„uÐPgï¥t
+°¶$¸‘v¼L¯ÆW<6Zû‘­ü£(e
+— ‡fù¾Ð«Áz_Õnž'ÙÏ,=CÛ^ž9üà¼LÏ8x<Hq‹wøgiù+k˜|‡å°#” `eÃ>vH=wX¥¸1—¯¡ÞC›‚óocÔ‘^ߦ¦Þ%+B:ªªÌn£€ßâžüp}ò"â0SeÏm¥6L)™N?ý[s‡Î€XåêÌD¯¾‡DZè·aj‡¼rN›ó {¹jmOƒÈí¡}Ê™^=‰Ì¶jXdÈñT±%~AoÊ^è&þy:ÕÞ“a†ÂÓO¸rûÌBìâáéE“tõÜõóçûú_²0s=µïÄ!ü];гÔ{¿%‰”µ}p©_d¦çe(®Z‚¡;òï\î_àÂгNãÆ'u§0›—{Ä{1¼ý]Ôk~ûgw–.èípJrfämOA4k¥”‚{Ä@ãïa˜®àow:‟ù|µfÄvCˆÓ™kÈWá×C5ß.¯OÆÒbÜ&3¿³­˜ÖdËý°×ö´R œ‡Å–½Ž9•ÅÅz €£Ò$³P=_½+ÈÎtÕû›s,2"ÔQa£ßÂ+æÏêÖëWD7ÇŠo‚lŸhyõŸÁ©ˆ‚ëë‰ñδ”¼NŠÅr—$Œéáü$Ö{y™zwœúhƒ”ꡘòÒeÀŠs¼k8µ‰bU'¼ëPÌkJk:áª6ƒ°Òé­»Çåc²9ÜbÅ­ƒ½¿Ã³_Α\b¬wc«ZŠ£ºFb,+Z‰Ž‚ /p· ôn ö{+ÃÞí^ÌuDï:)MW ;'\Êoî»–¸Fc¥;ûÍ%ç´Òö6æ~+8éŽØ7Fqº*p÷ïŽzCŸ‹\ö)ÈL§“êæö›í¦Ô:žË‘1
+…s˾µc—–ܳ0—‹JˆÀ»…Z\WM&‘Â~›7²·ƒ”©Hü1Y‹Ò÷í¯€9æ‚ v
+7a]"çÏÞ¡lƒ¾­Ö ¥ûb|( e¸[“Άñä<§Žð½ê­\îÌCàÂE#œ´á¥tÏœß ´ Lͽí•pðÔœ³Iâë `Ù'ÎŽ´¿%ÅFeƒâ â­/WU)¨/º©†y||;%å98©ä×êQµ<Ë!ƒ&{€gY¤¨0Xw›cJP7ÐF+mLnÏ¥«aÐ i4µà/ £A{‹‚iYI-Z*­ýÜý…5|¡Þ³²Ä¢a,ß·QJ¾Èàcµ•–¦&WlÊîR¢[U«9š€~œÃv Œ¾µC¬fN!´ŠŒ(ešE†Žüý‘àk¾[™ÂÝ+ó8` &­2rœF­`Ƴ’.ŠwI†¡(ï•eOQÐH`c.÷6ü´D ŸZÕ݇?ÌŸø‡÷/ÖQ-5ž=6\y±5xóû±²“Ü*«{?X©„Ôò÷ÂÏh{]ïïé­S$xÇëº z¿Ðâ·°?pvûŸòWN( G­¹5‚ýÉ6¶ Ý”T÷Ðoã†Î´‹ÚÂÉ3“¤~órïµ äèï ¤Hd’œÀ~lv¹ÅŠÞ-šôî5<%—ˆYB'\"‚—?TĤõQàãu†Éѹï©ÐŸë‹Ch°a÷=Öß]–µ|&ÍÔ±51ÉèÚ+Šâ0e®›D¦ð4`âtÀøÈ7Žñ
+yI¿÷•Ž7§¡:býO£Œ üŽ¿¹m&¹oh3Q:kkí%3ã-¥«UòÅ>Ö¬ÂZ3%“÷äün òQm‡OqArîEÉ™ûq6€ø¤ÂóàcˆxüÕé”Váá´&`òößäi Ƽd—à=ntöXñ} ošüzaþÔµéOÎJ#œ,í
+/ &iFâù4ДtaGZ½Xy¬M›­ÏïñKIŸjeÊdÿ(¯ß#H°ü>ê‘K€™:U¡ww£f6ǯ ÈÙn•^Åvf:˜R«‹x<”W³\øÔá™·I³y”ÃTašžy>¯wÖœ±™ÏB‡§…ãsÕŠÅ}"Yüݾ#—_C£Hvù‹&G¾Åh+õfÆm@ÉòŸ00r%òÛä¹'Ù5Ïú·U&ùÃX‡gÒ¤ßüŽ:Û7M°Þ4å6û7Ì gÓá+ñQeg'XNŸ"¾°} 4¥`+ÿCµãösúÅÂHÂ…¹›ð 8½«¥+ä|£š~ß €v"©Í\|]ëÛ—®V:Ü-_ëÐGêòœD¼+1©1g¼`ÙJq¡³¼èGJÑü‰Ï9Ç)TÇ0~ ä…:ÙKw£© 1¿ y‘.žÖÜÓ›Lá ”‘ëO¸tM¨íš³ÀtŸ2Þ t”Êæp¨)… *#~F{ÃA$:j? ÞEºÅ«f
+uÙ ™¤ÒѬ҂ß7noãB?U,>H•Œ@Q¶³)öŒ“#?;RxŽ´³€xGoh]Møáý‘b¼®Ã´©ô Ûõx9¶œñ
+'F‰ñ(‚Ð1-§%©„Ì]ëà‡V…±ï^¯#˜]F‹¸¾Ezvd¨p oF,Ì0‘Dðá%X`A'F?þè¯É›(ÅÕª?~ÂÆO®>ãNK9qKñÄp5b±RÏú ¾‚ôG#Ðc€ÅNm‹éïŒaó­f,ä*[^0ýv7RåÑ~’ã²Ä§u‘‰j¶™þ…]‹[?{ÇX#¾;V;¢‡Û/ðy욢95¶ñég5Æg4·=‡;|"a¾8ùqRücG&øÂSbØ?Q¹(·¢} î”™žC–¸â\b«+Í>ÏñœŽ{Ãüd^¾¡ð±ÝÛõ'-ÿ ŠEœ†Z<gf ‚ƒ q–[ï!7v~$£Þ»<qf\Ÿ1C7wUñìHæ@ffE•âÜÀãÌû³R8T­Ÿ‡¼šœ˜Þ' ò+¢ûwD²8í^:O*ÂäÌ­’g ±–Ϲd~ª”²˜k §†¦ ÚÚè­«ß5Ø÷뉿ƒ§Ý›¥ÀÞ…ó´ Úò_¨"}Ñ°¼p»c¤µõ• (ŵ—øsªAKq4€|#ÛÑ\#ßæ½O\ˆŒè²4 á¦=PÌw]Y öõ3n!ôš)ë^´åþ9bšX(xÒ¸÷éШ‹…]”Z%®Äç–¼÷«Aæb¶è·£é¨|„)E²X<Q¶…W[Ïp6¤2ÒªÜH¾W;½­ ×ó?Û3xõ:fs~Ôk͆`[g9qè‘î·ï^ioCðâ=œh2^i°‰°ÄÓ‚š6§
+™/WaØñ³ªþŒX&ötª!ýAíN0Ü}Æà­Îc®ÌþB±}óŒ¢Þ “ÎÍb$,Ž‹Ð·7Yû£©Ô‡ÌbÏ9‰tHÞȦ¹nñ“lµ|˜Ši™—³ö€¯¢ŸOð-šƒí†S †|¬téšQu/Ö—mß8X¾qߌ0ŲaßPàð.nâz#ø¹.]—IHŒþ2ˆìÑglh¤\¿þ*t6|‚3RÒ>S¥ß6®VѲ ujÆ=x3æD´o]OÙQv„ø㺃‘w «/Ñ?¿G…5P ÒTó°n„ÛA²¶™Šà\Þ€ÊÉeË=(MÐx&ÙÉG9ÑʵyÆ‚éÄå3OÜÒ|ÆMÒìÛ•pgiPÏį”i”€ïƒj…±D¤ ÁEnAÿŒc;lcZX‘dà_>«çjxS/óƒ­/½ð
+'¿:”><s½¥Nî¼3±v±Hý|Ž.Îþã
+ú"µhû˜<É Wa-ÐÑŸrõ–ï7 gNúùƒ´f~mÇî­g#>w~Øß $x5îkòÈײ-{gѸ¡ÅŠB¡ì› å¿Y^eùp2‰ò´Ýëf#ËS·ÙÚ÷ðÔÈšðˆÍâv="Q%ÒvèÔ:u£"ùµò[F Kxî[aÑHDvs²Á¨â~Óéùy W´»¯l¡À—@§òœõ=*«ÔïAˆðä/¥¹'dÑ]® Ù.¾8ŽWgrC„ÇœõÉÙZ–A4¥`i“#ߺA„q¼û%I‘ý›ë´êúO6­þ÷n,°mÏÆ;Ú…?ÏbIëÔ‹ØEgíåJoé(÷‹•4Oo‰ìÁ>EMdݵûõ5o³‹«ë«‹%áÙ±wÜ¢ $Cd¬»šïãXÐ>ûN4 ü‘,Ûܽ¯jbÔÈ#Ž*Ú-Æ$7i.ÿAûÆ@\[FÖ -µ,#XÿÌ]|Õ¾S+[?)Gñxˆ²]œ›ö29+àãG0Y™¢#é¹~]ÈqtñµÛm„lé›[ˆæ÷;ß”°¹¯TI‹õþF¢úÆo{±ƒ0 i°UÅä™LºÌxùÌä=Wß“ì7è|Æw!F ä¹Æt ó<Ê Ò°£ $”¢lV'Ǩõ’i1x7/¨'CÍ Uœ&i¥ò*óøã®PRP`ëP[·Ÿïz‹± ù$?} °sK±Á¬ø%²AN#“jO{ÅaiדcFe?ÝÃ?Ý22ߘEØžƒï¼ô¡So­ðN֘ǔh-¢ f“‡ã/GµNu’´
+T¼¶Uh]齨5•?NU2}EcØTPˆÝ>Õk)†=(÷ÀOâ5³+üJYWßKÄx6 ñ1Õ¨,ûºgˆèɨXD=¿¾è0³˜ qÑ’*{½})ó9Lܳx^âšìüR¡‹—Í'²#_;—ÕE§±®Iìäy ÖÒ]4 bÛ ¼U}Wñ)7wx‡Íàxƒ“,)Ö
+÷üˆÂ…ØÍŒN–Ѽ™ƒê;(]tK[†„r
+mŸBfê´¼VXCŸ£¦Íœ½zö_uH‚ýR´Ò܇Øò²£§Ëß’³$¹q¬qAÖf‘UŠêñ“RT¢4®mu:*žÄœS v¿Þ¾'ÙÖ?•þ„‘Ý©[¬úÒiÙÚ|Ý„ÿœBÀÚÂ5{ö¾y·Ûwܺ{w1#‰WwZRFVšb¦¨éi|so ¦ÈâuˆUÙ„GpëH1¬á³%Qµýd¯õ'/·lúç*ÉÕ ‘Eã®í¤ï4_è짼Í4gÁtúÔÊýw Ï âê~mnö2ÇY/c:g¬Qµb_ñË⟴+nÄI–Â7ã˜?æëèÛ%*/S‹Qp´rö™pËãŠÖéÌ‘*/q·ùåë C–W%µEƒ˜}l¯Ò‹Ç0ýllZjÚÑI|„è9Ž#gh Ÿ@ïJð°éHðVM³°BTZ#á›ÙÈtÚé
+*{¯’ ž&ÔqAqÝ©W†ØϤù9Îù-C|‹•!ìêyÂ4^-T?(çå%6³ü7BTøŽOÐ3õÉåeË =O*RÐ)2G•îIH(·c@ç…Ôç;Pü¤´èû5’KïNûÖ¢®ù‹4ÃfÌMV„zjhæñ%{ÇO…~ä$lc{âUcàrùtÓZ”æñq˜?*Ó8€åŠ‚m¥ ¼Í–yd ¦T©ÕRÞ¯žÈd`|wÌŸ¶þºÕ{’ÍQÏ}Ð(jf«_ŽòµFÎS@J)jÜh›3–åÍúèÈúÌÎéN…¦L,"¿ÏiºÁEŽL;30 l¿Ë»|_Ý›¸¯Üñè~½BB†–:mÔ?žíZþŽ@:7AFÑ)…;g/¤Â—Í•õ”xd@3p×ù3mµïçíÂoš"›—˜©ôóÔ,¨`÷i]=obZ]žòr…Êoï"Ø5ùøÅwQÐ+—ÐcÈÇNnñVÇ/Z,
+¥¨ Ý+¥0‰N]UdU^x¼¬.)wu+S  e¹TU™—ë9ñÅtØ°µ)܈UÉfŸ†øâ{hÙnð£¸RYeÛŸ†iïª&O•{j¸ 7|¿ëÝÚŽJæœ,‡»+ö·’ääÿêDJ±î]+ú]í=Öã¡Wósk¶fAu9HÔgƒõŠ5ü½g ½¢¿pg0®¸Åë“רÐ×(¼‰$Bâu¡1”ð”H!Ybú¢×ÐJ•èÎ"ÞYE6¯øƒ‡D•§«7†ƒHYô¤Å«R(–_(Þo?°ÿŒïW§bì÷ƒI™zBj}ÈyPvG³¸¬Î|¸¢Ïö!ØÛW´¬ZBMDØ!r¾†RÌÎÅŠtªKñ­ã(o.è§äêZ1(^È–cx_A9šÚi Àæo|Äl¸gìØ[à=iW+dL I‡ISeöälàD!‘Þ‹¨Hl]G<•âQç§ät'F]L2)±ß¾¶"¼P|º‘ ïxû-ßþ}r>AÈWƒ~÷„ì4Õ‰6ÃS„suüòƒPº­lMÉé÷É/¤†g¡ÒUÑšþï8x­3\zc]Éö ¹ ûW;Î¥“7vî¿IEÑÀÅíÂÖåÙ yĸd‹nžÈѶtä>AÎœ».ð¿&›ú…*ͼväö ŠSŠ ãð¤!AT.Šš;±ƒ}šOu ®rqgÔWím_[(!kß³#*7±0FhZó{ºÏä7̨Rð¸ßÁÜ]-õæFè(õUÕrtÖf…nŠÅVÛ>³6SU–l˜³:>(Øä3»¸ú. wŸå£FŠ·uPÇœ
+Zèî´/z4C³4êûRÈwWÁï¤PÊú|÷ï„崽ئ"e
+q‹ÅàFþy*Á ø¤Xš•R8õàúìB°å˜¦¤È(›w9”[Ž)„ž‰í&Ú-Å*í0–¢ÙÁM¦ÚaZj’Aàb–ºNŽN®[ÜHn—mÉ£¹é`ª?€a;i‡\(r$sISâ÷Ú¶V¿|/ŠÈ°x$:yÝMdQM#³(¦ 7UnQñ—HáÒˆL_£uÖÆ*º,Š[?H#¾)[TÅ"îÿ`3(-zcdwÎÔÔÑx‘?–ü99új'¯¤Ÿ¡äXoÁ[­Ó°Ž8ûÑý¤Z®%ý½JP–*$¨‡ªh«²ÐƒH˜Ò=S!…”¸v%—a‚lz\vT"£z!(ðIY¼[~›—wBY ^°÷“
+endstream
+endobj
+49 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-4 -235 731 800]
+/FontName/BXWNCK+CMTT10
+/ItalicAngle 0
+/StemV 69
+/FontFile 48 0 R
+/Flags 4
+>>
+endobj
+48 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 1784
+/Length2 10900
+/Length3 533
+/Length 11957
+>>
+stream
+xÚíºUT]ÍÖ°‰C€à®ww×Ü!¸ÛÆÙ¸»‚»;‚»{ðà\‚;½sÎ÷½É9ßôè» \ìgÖ\UÏš³j-*2e5&13s){&6f6~€„‚º:+€™•U‘ŠJdnìt°—4v1ç°ññ±ÄA
+ áàè ZZ¹
+æf@W»ÿ•q1¶šŠÙ[ÚšXÿ:K=ÌÍ”.¦V
+`qqwøÃl`¶™ÿ•Á`±ppý³0xa  Û_œàUÀµü‡Á÷àlîfþG\7–ï…"|¿s쀦¶ò¸Á6à"ý¹'n°Ž¹“+x ÿëXþ>¶æŒ¸ÁFN®æοòŸ xMñˆì$÷‡ÀcòˆÀ¢øñ‚”ÿX@åWýCàeÕþ¸Öþ!>ðu& cSs[s‹?÷ ~°˜€ÃÿÙ>Ž²AÿQ&ð‰f1þC`Q“?.¡é?ÄÆ
+ö6û Wî/üÝÅ¿¼ å_î Õ_.ð/KØü…` Û¿¬ñgÿ²O!‹ý_Öpø ÁŽáïÆý…` Ð_ø{ý…হü…`+׿låö‚­Üÿ ;ØÊã/[yþ…`+¯¿ðºaþccçüݺ¿üعþ'ï?{Æ~}°;›.@[³÷àÿ||‰‹;xx3q˜ØÁGž‡ƒ ¼ïX}ÿ3MÃÞÕ2’àCÊÊÊËÁþ¯¨©+dnïò¯øÁø¿l?EÍÍ=ÌMÔThiWpXq +¨iƒfŸJ#ƒ5x^l…Vbw[R7}jh®‡EVm}¨ž¸0 ÷/+_Çýey™‚ÒÇ?Íú
+ʬtŽ&„xk"‰*Þ¢sÖ\.§s>e#)Ð[§Z4ûD’? ê°t¡Üiù’~p ÏbWTyª£hV¢ÄV^%i›»,­6UI'ímš´[[Æ^Í|Qô·¹åMƒ^~‡„Læj é 'Ũ)¤r|öy>•ý#›\
+E±+£qà»°Œ·ñHÔ’>‡~¬µšnåT<}Ùüeoû!‚*ÊåDÓ‘‚ Âý c¤oHr™Wzt“w–{çÇU¼¾ë
+z~‡$9z'\Á?#)á£E âÒtÞ…®~Nzò­'Þ6Û¹¶¥„ô½ ÖÓ”4â'ÖL.!Éo•„ßœh4Õ„.z†ñ³_ûR÷mÅ6%1ež@Vkÿ¹÷C8ë}‚„†QÉÖ축;ô)‹Çu¤ideˆcG€1ðÒ9²i-c#Ô¯
+ü:ØÒÊøbä)8ñ¢ë7ª±<å\š¸ùØLe¬h3p¼š;¦òÆ,®Â!Íøîm 'ͶMèy'õ°/XÎÏ•–cÞéjqKÓ꧆9Ž2b/Ìy]<,é*º7 l‰¾}ó´ÇË–hÆHFæ £òþaÝ„€”˜ÀÆžÆî*SVDQ0YD’å~÷9PÇìat³¯AJ4 ):,¼ºë¹SWV
+âk6r½/Èc©)|wî"R\xèoxŽC{ÒØ çÉGïÄ‚š;@]ª7"ž=x¡2UpÌ¢ÍQ•µØè\1{ËvæŒe£ìËúz'–û’çÛ
+`>ém-#K´é3û
+¤2±&Hdp}kû•“Ïù±5•)Äqptð[ãžÞ²û¤ÄIº/qyc®°Ñ5E¾?¿~s…xvŽŒïËkAÚ [,y¸Ë=¨Â¢'D9Œ9zô#ï#ÇEnú&7ô½QŒVG‚ö´À•RXÃ1Q•î½7½Þ…9å!°‰ ò „°ÝiܾTxóPÇí’- êáH÷2§
+JtÛˆ¯¸æ8GCº ìóœUQqÛ˜·e×ò~A:»çh,=¥¦úp§àªè÷æÝêüšvƒÍ~ˆ/i×wGÏì&Héâ­;œ»¤ªù#FÂ_¹ªQw
+»M‰aPoï°ÖÝÞ?‹a¸h/|H«±œf¯DÅ#ÜB7QL½{c‹Hþ³Á#.¢ï
+ sÁH܆p—ðÞk5öìˆ YÒA¡µ‹?±IÍÜã>ç†fµ›äa¬ÚŠ2w—¥“.WŽXÉÆü€Û6.W‘".¬“zÊÂ}›Y<È×ÆÆ úÞ:¿ªË´.ƒä~YƒÕâdgHýùýr¸®Ï-iÁåˆsAŠto>†Úb+ ®LÛ%~IêV`%RGØK…’c¶í’C}Ì· %$ÈÖ­2Ÿî½VÏ'¸@æøŽ'˜oÛÔ€À9ÖÅhdÛçÊu]Êo"ŒäºcÉo"¦Öaa ŸçžS~•ï`ØÿºÁǧjŠ»n¤š^wgMüf)Ü6®{6ömα†LýL¸Q’´Jú^=>æ×*z¤‡­e«•5ï²°ªW3ÿ<ÜøÓÓÉ„^ò‡è:`FTÕ“¡¼yÿ¨4QÕ^©ÑªŽ½n?e[Áž4£ÝZöŠùòœ™Ê‹
+û#´u¥¬F¹(Y|Å$“Rʯý«»l Ž‡FËh¥|¬Íö® •_ŒQj3$¹Ñ»ÅÁ ‹~àÑkÁ— }0üx1
+Nh[˜™õ°FŠPÊñã%j¡ ¶Ï† Ê©‡…#^9ÿa©ôiji¸†X$ÜÙ ý]îF
+gBÔ¨|¶¨µÁ8ØÞÓDÆ—÷@X:¹…Dr}»Oýk ÊÜDó£…Iw;U@ÿ矇"‹RW“ØL=vñ™ÆØ[ÖóˆŸF:nÉ™îÛ¼EVwµgÈêã¾eSyy~ŠèëG@¸$Ûº ³Øî·ŽH¸ö!ƒG‘g]+-Ý¥í‚Úr-0c!øÎ…±þT^
+“M*+È%s¦Šþ‡×ÌÈ}ÿq¡dýHŸ–?tÈJ3íR¥–SáÚ˜ö|·¨„½hœ-`Æù‡°Èˆ³·Õ!O>]Â{DË8ªNb®EoÌ…å³`7þMxÎç•þúS2Z.ÎH÷«Ö8ž1CŸñfRth^ ˆ½åh/aD/6/É‹çdèˆÑ78H»w¶qoqªL#Ð>ùC*ZbŦlsË‹@ô`û¶ÑSSûó]tÇ”ÞÞkšn®Š)‡:‚Ê|Cÿa_LÁGEïÐ1˜O6žÙ­ò‰BY:õò°Ð_¥£‹ÌôŠ‚î4Þ }®¦Ã¸Ê>ÁaÝ2ç jÆ8;õ¹§Â|G'•¾ñC9ü.?ˆIZÊ:õ ­£InŸ‹ô-º|ƒ‘bú€‘NŽÏK¥¼á/$\B#›]Ù)÷Çj14¶1ŒÜ~ôƒdé·YC³&“?}IMíŸD6É]Ø>ûˆŸ¡Ã¾1¾Æo×Td)£ñt*UÉ ÜQîP!—AÙa%÷k Ýî¯hù‘&kžÿØH'áÉK}µ˜»ÞÿD9ÿ‘ë­Ò$h+}árO€é&4lU,øQÑZ?Y1
+oïÛO?¨1¡@Ï"8² äé’‰ud ·;/}„Ÿ^•±¹h é•CõB†R_¦(Íø…F"Óá4 âK¼Êú•f¥yaãC?àúßwŽY)ç à3.‰S¼i¸1A†ºcP7°'í~«eÔ;~Ñ‹@Ô ’ž7˜[RôÂþ–\› ‘Â,U7á¿$×4é#yÛýÉ€ awXÎÕ¿¿³®¾5[…M$ô}”¤Äå…¯’«g‚Sü»‡CJõÇkïÑp6êÈLç—¼j2¿Ëã®äá"÷6J%AåzË".Ûö×z¢Q¨Ò%~+ç#ü¬©Ì.v‹O´°=×¥Õl
+;‘¥¢Ê鶅)çgáŸÓÁƒÞÐ~»>~Ô›˜p*ÒÂön[õ€’eÖôÞ†‰³™nŒqÊ[ý£Qoâô¢kXùÌ°•oÌ1JøÓÏ4,j²'¹I»$]ÁǪGlŒר@Ø ¸bÿd¶­ó…w†±Ü$XÀ$f'tA‰ÂãÍçŸj˜°5+ ©k¼9á»+í(Ú ¤o‹cù_ÙjÍ¿­”Åeß\–½>_ŸÚ¬{ Šr—¼J½ϵ)Î=ËSÉP†¼­Ý›YԈċo2ÒrÖ²ÐøªŠ8‹5žÕBÅ“it›¦š»¿ìˆÁ_Lœ+ˆR?§À
+ñ5ˆfyªgš EÎÑDw‘8{]YÅçÔçv2«6b‹ÛùM±N3‚|¶®×¿éèÖAqõ“Ø"¥Ý·–øK:„¶Í;KÜ-ï‹©t4ì#¦ùŠœw[|”R"–¢ :(ÕLoo®´œÃ{®ó%3“‹1>¶ké«Á;Ýí'H
+V~F%-âÃCíÇ,n1áªYãN“1\Ax¸„¿êÞ0+©H
+rz=ål ÅLF«áƒU(ž˜`7¾ò»4ãGíJmä‘ZÙœ'‹7Ri_¤Z‹€iôÅ°¶œ;÷•ñ¼ œ©ë|$z&E­£­®—œ¯Èäv–‘y#±4o8Œó¿ގ*%7PĬâ.B…ùŒ€®™>IR–ðù*.9¨ Éß™x†›/@ºÔUß\žŠA½X”/ê]?.X"¢|-‡Bøú¾€ºJ›øâ­O¢0´Msa@ËmN–£7F)˱U×-ò6G nt
+RCËŒ_7æ‘—ä¢Ùe?/1`¯©š›Öo…DÕ_µK¿ð¡Ø «Àf¨"7;(2žLŸËòšÔÙ
+?>F¤‚û¬1Éi’NØ‹´Â—_¬ÿóLKR¦ô'#=oçém«&k }ãu¥<ÝÔ(Rxª)4£Ýt)ü:CЧýƒ€ÂQØÑwx@‰ RôCÙÆ’Hƒ™½‡òÃþt­b¾Ï=Vø„úê]X_ôö7¡¶U$¨ ZQ†#¨3iw¼e9
+¿m–Bà¶Ì*F'²Æé;êÎI’ž~ª:”!Wß‹üÆÝgLµè £ôyU¹{d_‡UZç«Â×7¨„Ù·ÀŸ&TKw.ïè÷¹¡ ‹by+ ¯A25ùJÂãÐŒÅ3ÙÍf‹Ã¬™×)(Ùæ ñºr½ ­žÀܵg+‡:^c…Hý`Û<Ö/4ù‰FX;:=¸ÚéÂ?S"AºÊ242&‰0­¯1_г?|ñEáp¡Â‰ …á‡ë‰Ê§jÒî6†?Ö[®NY÷JDÏý^K00X1i&ª|vìbK^’Ù¡/àá^»á
+ÏîØ¡Bz’õD}dvFúkÁ®J¬xhFsþkŽO¨ˆŽÁv®¼3”‹öÔÁÚÆ>ïºÛèüGƒÞgåão-þDΘ>»[ËDŸ&‡ónØrKç4ã}óÅ~I8þ¢ÓŒmQa –Ÿ&Û@¢˜=S`#ä8¯Q_wœÌûAM¡ÿfŽÛç)m´¬k,]—Yv$7b¦&eûüƒ,Š0rÍc[«hÏg…’¨dEô!‚ÑöŽsB½¶çè }"xëE•þV^Rìòc1-ÏꮪŒD lmÕW“,¢ª­¯['8oU¾Ò1ùv×;twmQÎHI| ½DbÄ Tâ§G¹býH%À\È9µA‰rÀÛ–º —K„8ÈBö¾'Eõy·¥S÷jýòËò›¯Ÿ3ÒŽéé)ö6@&òÂ;®ÐÒQ_dÐá±Àå»ÍŽ]{Yÿ“©ÅÙŠq`þš[`¼²$5dùÒ>ÌXlca£ÖÛëwô0îÃ<ï
+âžÚ>‘nF{Þ®a:ä‘9f&áÌ`lœ^PßÄ¿6`
+Ç™0倬$ŸP\m|]B^gjHîqý0Só%&ï GE5ƒ‘-£Õí”Ð0K¬>³&‘¼.b”Üu,¹å7Ô²ÚqJeÍYJGhë— |Æ«xF$etÔ‹Zs‡ÀËÚÀµˆØd R¢ÅOãŽü/r%h Š´.ñÂǬê["ˆ{•.±Nä½é#«ïßCÄ@ÂðB‹QŸÙ­¢ç1úëRåôDL ⌇<
+¢§Q+·{ïG š^vßÛøøe³ÑÌÙûÏ{Dzx®êÇÔùâW>-9èëÜrj£&ôŠcŠ]X _t<|¯È‡_[sýüÕS2|HúŒüÕ#WwdfÇαI4üôS³X¿ñýèµ<ÀÉÐ@MÕV‚´!¶çË°@°Üµ’H/œ±ª¨h¤Q´EEÛØ×<ZX×÷ó±•/kéñöý¶‚„[g—®OÖ›¹O}°(ð aâ¿.¸2%ÝL>ì1ínÎÁ.©ø¦ø†(GN‹%tÖOâpíÒ°úIÇQt—XØàìü˜´€gÖEt]åk´<„öúÌ””¥Ò:ЕkÊé‹Rv‚‰x©!“¼UÐ^E BÉ>Ä-£ ­*/§JR¦s]8Ý’Jvt4ö3Ï:{F&3ðãNQü) ~åK[&_èŸaÞ¿ÿ)@äŠÙÅßRù´Y7–<gH=ÝA„+<Ü— =ÐȇVŠ\*‹l'\÷ÑÉgäA©Â/äò!™sÄm4 äôȺÕÆ_áË°ì5ǵ&)l°t+ :DÆ£š³Ô«¶EO$*nñ„¬·Vg½·hqo(óÆZh¯¾´þŽkÁÛ¥£Cmš‚'É ¬Bn-WyÊmêf™t;bk2 (Üt½%ÿ uZ77ŽíH*ƒ”XòñõÎý³ Ù,YÕ'Kº‚d¡Ìæ“é5»
+3Ϊ'GN§äeúlb…÷Í tgÞÕ—­C?¥û£siåÏ“‚9OœM|Ïã õŸæÛx®„­ú"ä›{|4xDÓ¦s‹ÈCv HZþ—^CíÛuÓbwí5Ú¨S-ñýÖ *²ÑOo!|ű +æ‹R4‘l‰<æW¶Q(+Š»9¹Œ¯§M¾¯¥¿pÄ+b>.uQä…]ˆ;|à/û|[ML”|Ñ[ÈpmÆÛEÉ
+wcJׇý™¨OúˆUî'°läÐð
+D{¨·•ñÆ+lñDߪ-eÒ-…¢Í®ŒLB½Ÿ±8˜Ô/$›Ô7ø QŸï²ñ(Þ
+´QÇ>ô‚`‘#hQï¤ary8ßRˆÔ™«{Eb8Ë|ÅaöE¦º`eãƒjÁ‡Rºæ·Ç¬+aLäµA2X¡¦¨ã_Ÿ
+æ%ño¼æÔsZvªìQ–Aæ’Ráó1ƒŒÜ^¤[L¯u.ï_ä‡nÕtÓƒ»NRfعÒ<¾,ì1ýÌoË›Ê}Ź¾ßôf.÷ö£ua(/UñÙŸ§¥ÙHy¼ÕªGÄÀÔ’byË<8 õ©^óún Ù¾iÖkµµ>Ds’¹LM´&­ØöãìÄ–ÓOÝ°¾q¶ÚÓø .wô;Æú6j&®ªFè¶ý:Áô:Çcg¶-»ìኬx² YâÀ5¥Y‰¢–hR^È/gÕ%U¶l{~î– v£˜ço–â`5ç¥6BŒ:®í©¬îêßÛÎÔÆ®x©™†do 
+œŠ08-VTíQ8¿ªçÎ2zŒÃ5¾÷i0CBÏ¥Ö2[—í_ϸfBò˹tþÕúðaö¦\Yž8µÔNyWå.t£6ӆѼŠÕ¿~ý°•asÒzÛÕjLê^©c9EØÓÄÈ ;@!H˜®tâ@‡€[íQh›ù’1úЇ}úe_§Ž)7žããaËÌ6wËgÕ‹2ß +ãy¡Ë]’P ˆC¼†fZ@ð•ÍÖí[,W•ºÑ¼ƒ˜Veq:’à£F¼•þi'íj vP¦ªáA5´¸5§é\»C3IöTJ2WÅ
+Àö0þÁ–”ÜÞCK‰~…V;7|ˆ5ï4Ï_~“,Ù°dû‹öD¢öfåU•INy%Sçf]Âûv5rí×o¡þsp í§Žq“!öqEK(8œ+6¨ÊË–è,¡K.hÊê½üøùóÖœ‘/”‹˜ò>«Ï£ßH¶Ô “øÌ ÿR‚³KD ³@UɸB¬ŠVúé±ïz…‘spƒTJø³30ø˜ÍîF
+;Êez(s–0|sf°ô¨ „« B¨Cì_'I­Á*]çED½ó5ˆÝîo#Ðúµ‹;«­âä5w2=âÙØŸ¸š=ÊÀ¸¤ß¦ÿv/óõ­•÷™ÔòÏmÖšñŒ=!4{ÞÙê8{Ð’ï E«ŸÐÐã2Ff\ŠD>ÓªˆñF»ð‘õÆ]®‡µ*°ÂÖN=9æë2¹PO;‹'1Jè„+ýð‘žø©óâÄÅ{@öðcaʦ5Ú&gÆT>‘‹‰>'Îä½<-f”‚…ié ÐF”B3Ïä“KzÞs覛œ52²å§pm4Ú¥³^@lgN2
+_–7ÓßK¿%U“üˆðÞ‰‘å’v=Òª¯¤–à“|Ûn(¬‘jÈñFž@«ÉÂû+AZ…6Ìžs0\ØçÑÇ-MñG? äV˜¸6–¼|ïóÎì„T~ÿݶjwÊ•Wqº£ÓÈIj>ú¦Aƒ%̾9§¾xi‚ÕgQ.úp´Ðe- üÓ;jO’éæÝ+³‘ÕPþ êÞdÓ^iJ„ Çäè¼´µ¦€
+lë}cÎ[ò­n[s“¡èL‘Iégôª²@fã/)ŽrŽä…«Uì.³b|ûªb¹®ðÉA6z Ì‘Œb€Ûܤ–ûµÛ\*¦öýù±ýœ
+Ò˜ê_\cTÙ0bÕ¨ü‡óXƒ€‹ïNßÓˆ³œ''¾‰ö¥·X*W”_bØš-Ô±è„OÜf@Z=ù³Z­>·ïv
+endstream
+endobj
+52 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-6 -233 542 698]
+/FontName/URLVVQ+CMTT9
+/ItalicAngle 0
+/StemV 74
+/FontFile 51 0 R
+/Flags 4
+>>
+endobj
+51 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 1591
+/Length2 8430
+/Length3 533
+/Length 9380
+>>
+stream
+xÚí–UTœË¶¨q îw—à®Á]‚CÓ4îw÷àÁÝ5Ò8$8!8Á ·×^ç¬dïs_î¸owÜî—þfÍÖW³þªÑ 4š:Ò6®V@W'@VMWWÀÃÉÁÀ ZB@®.r– €GX˜ íiàåðŠð Šðòc`0
+hrÁàúËIÙÅÖðâï°§ÛyÁ0/
+=€õ$`ë
+Æøk;ù^
+lií„8mK Þ±‚…ÿ½Â|ÿdƒÿm°cÂeù›`jV¿ ¶~눇fjó€à_ ÿaÚý°fÛÿ°†€þ@˜„ã³púaáòÂ4\ÿ@˜†ÛÓpÿaà?¦áñÂ6 ò¬<ÿ@˜•×³òþ°K’Ëç„Yùþ0+¿?ð¿vøo;ÇÃ+ð_áß"^˜—¥‡59ÙüÝòÿyÈȸúøs8xùø`ï6/@PX(ðßÓô\@îž@e9Øñáæâûû
+°öƒaçñ_W.ìvùo¶Á®" Ðh‘“K‚7g§bûiqÙÿ…Ö s
+ª‰ÑSv”)pUH<=~Šé„̹àá¨y¹ˆuw¨—qÃL-ݤ&šØe6äëK^³JÌj;Ñýjó§HmüÇ,A‹1Wß10®ÃüU[¡€¿2ÎÚ¹M!Ä­÷l„†¬õþËXPï’M1[ï‡Å¦íØ.8ë/òÞ*ÉlyæWïQ\>ÉÚú¾ç%tã‹ø¥w!Å¡<×¬ä¸ LËÁ‹¾v¾S%0n
+þFµ±¯ßz!¯ýQiPÅ`-\énÐ`xI²öMÂœcVãB^m{¹-Á bΞqE1Ô‡ú+4÷Ço]T¸þkšk\ð%æÚKóéÖÉÇ0 ÿW‹\;Ùc<x o¦`€2JöÀ¼Eÿ§øÝ ¶Cp¯3³/®n…J =°ÍHñ3}V“1;?%a¿,ó$‹ÀˆÄ&X’jWÀå9a¤¤!ž¢¿D!™»tౚWÍî5ê· „±ª§JL ŸŽõªVÆËÞûQì5L¶íŠ®Ë“bÊAAÔ¾ ý#º…÷ˆÎæß!bzç]ל±–Y¯ âîH…íkƯ—P=¼Jëž!E¢tå‡Jp`¤5™*M×C· ‡Ø‹qøø¡q•R–ŠRrŽ¾©ú2ð/Mõ:3°o§¾´ _ÑjÏ¢?· µœ«A`‹ô ?Úm˜#¼3«íË>aŒvhGVª6Ca©¸%ë¸ÒFôIœ¥¤acŒmIæf‚Ï«ùû“NEÊ’
+Á¨û2<v²u~"ý¬ìzI•fÄr‰ÙÎãàØ¢ÄàúruC{NÖö„vQn_³1³k¼ãEõúêÄêa=(µ!˜âk îé³NÅóû+'‹fFÌ–n±®ž¶î®£\^:Áâóí[ÝBS%ß¹%¯MøðØÕˆ6ë!Ý}ø Rò¬ÌÀÀ›Vo4'©[Ps‡6r÷-Ê».ü”#uÍp³û• òæÛþ@ÁéïE†^uZ@-‰1’ýþsè|¥ ç×ÚtPÒrþK÷ë]4ÏU  ñ‘Ó³ u¢H#ãÁ¹‘…“‡yoñžvÕPá)&£ŽQ„ûÐÏ%wF÷Âý½‡ñÛú‘ܱcKž]«­9RqL;¼¢h”fF™9mò¹ó-É2~±©Ðù·Ü$<1ÅxxûÙds³Ú.ÉU‰˜µÂ'.ë+_«3¾ÊX ‘HP¾¦‰Õ}yþÛVuÐLJÍD7ñ–:„ËH• ]—#çãŒÎÂåspšÕ,–½Ú SÔXêÇt›Ÿæ‡¥Q„u.?>žˆV9áZ>Œ-ý3"R–_ü—ß<©&ËqÔôäâ˜ÚVÞØ2 öb1Þ™´7¶®¬Q¨W#Æ[ãÜ|4ÇÒiÌsfmq¿h#kj¥î’”ÍL›¥÷Õk„LY|þ
+¢‘lÕ'XÐ'p{$Q
+îÒ¶º×†1H"䫱²,Ãñ¼Z$Ýi[¶» U-(v5·÷·öÕ³Õ§L]6Ô6'Å5ÿz&0(úœOyºi!ˆƒkbÒ¿¸åSέx±l®¹}oÆ“Þ
+ü4~N9Ì)FrVÍÉS'>û”=ï‡G=;/„÷}ç!²û&Ñý )_¿uc*Î’ÍÏÓ]ã¾@·7­Dü|ò4XéZ÷|Bt
+ñ·Ò§É=”ƒ´29./»^ï•Îú`h¢ÒQõH7Fƒ™ë]¿ýé7Ž<µxäg&µÚZ† ¢?|<{±­ç™vRãÎE#ÿ®xžJõßf$ÊiehÚçM·Æ’^rI°³:À‚®EË2Pi]ì9ÚàÇ1TÔ¤ãMÇ2Û ¢nˆ|AÞ>6âI×ÉÊÄ"Ê‚Öò‡Iè9Ü!NcÕ¸=Då™ÍqÊúÜøSÓü5áÞ¬7Õ©üwe‡ àóšßÅ¥ÄÈâT1¦+¶ÞM‘R1ƒú—ãÝÅi?Þî†áD¿Ô2ß{þ "z”ІR9 oOÃÆÃÏ {\d§hyxv©ê@âXp]­q¸ Ž>
+3¾@I«2ñ?Ç&áÓ—°®Œ0©¦X$vDwËÏÄ.¬×C%ANbs#S ¬"³L\wôm43GY Mß ÇùÀÐwã·ípL·$µµ¯Ùx]²3ÍùõDæÛ@È-Ä´¼¾ý©óh³¢—4à‹¿ûç,¯ÌQî'E,½Ú
+…H)C«ÒìŸe‰—eV©
+챈H‡â˜L†hcT…;¼›¸×lß•ePœé[2«?Ỹeª Ù(É/Zv³mtÊö½xΣ+äÉãg÷)7´2üóü';ãlrÍx'4’«ƒ³Û%0C¿7^”ð‘Çdp¼ÞßywofsòF(å0 jÜØtoxRǺ˜"Ÿ±¹4_šÿ.P"»®u¡º6«|俈‰­>ٛܭwœu@†£mdp¼#>R‹Êå~QŽ}µOvðíi5™
+¹çééÝx†š­o´ädýÕøú‚cf¢²Aá\“pÏ6©z}à8À
+0gÞú`!÷þ¥w (?óÓWÝỉ’v Ë»;j,êcÙ˜¹¾!Còrodš²˜ìÓ¡u4å5‚)( ¿
+ÄÙ¿µoJ9m²x‡‹µì8âWòKÌWšŽ nËú}µxÖ+Î ý´^äÅô²t-F'Y|c)Rú—9Ù
+ƒ´#h{cYœìg6ȵYûéšô¨ØâÄnp ×u¢OÆK•;fñZ£°ƒÚnµ[¸Õ×ËÌÇ¢á›ãCÍH,ª³fýþ¸ï¼7$ Æù•Ø'¿t:G†å±•FÖµ |±ÐññhÅÇvóGÑÑŠ³ ¨Ê|Ÿ íÔ3ècÄŠS¤=ñ¹QÍ3j÷ªŸ5h|í|gàÔÄqØâ=Ú[ÇÀ&Óð×Æ”#A±‚úˆ~ë2,‡cø󦀜羊Lµ„N<)ïNðS_uæÝ'—À{z>)Eá›Ú/à»Òõu)¸up²ùÌ2'”H{“@ 8¹ôþM98ë¥û¡»1o†µoßyóI¼'³Ó‹82TŸš ss+Dùõ
+ÙJpðpd8Ý%$”S3ƒF Ãv}îù²T:¦|vqí|`üåcpþ ¶¬‡:“ïë8¹cåÞšr‹JÍ3³fäcX©ßí¿ºPÆotèLiäÉsMœ ŒhUíÐúpÇMÝ=««÷ñÊå Èÿ„ÞQø#d¶sÁ
+džA¯K h5‹#ûþÚï¤mËÄÃÂu︇_€†ÀÓº§IAIŽÂÌÀÌêØ+£ž…Ú½tá9gA/¢Î÷ñp1+Ü
+ï`ÍmÿÀpð4¼\ˆDjž8qé‡ý¤&zÇ~/Ñ)h™i˜4Ø@«/ÊuðX-ÜòÓUVÞ¹iTÓÆ$#¸ù…ñIª»¨Z‹úe²ªàØû䘟xëÆŠµY<ÏËÁŸ“Ç“u+CÇÉ*÷ý^k=HÉ[|Pà¨m EÛΰFÎ!ÌÞÍßX—ïùš/'óÓAQÚ‡‡Ö|¬nÙ ݨåxz÷ÂJ¥v ñ×
+H/kÒ/ßÏ~íW»ZÁÕµžÜ$¹‡±s(I%È è²¡Ä.ýÁf¼ßi¦˜vüÝ>Þ½ÊH«iýúI…œÔÅ…ƒÌðeeÇ­ §»Go †ú¤DDs©™sÓÅâܳò4ì®ï)ù›yÛÝ¢ËÉcÌÆsÁÈ@d¦™áüÃjÁ³S›¡·G”\””¦ñÅ"ÏžGØgŸÊSÆxX²ßú&™ˆ`«¤¿Øw¬umO¨÷Óņ›þ0m›¢lÈA®h3˜ß.yBnÔ«a<‰!g¥èû ¹ËÛO6Ê©üÐ5NKí/»6û£< +Ðø5rn‡1dmBöü”γûåWÍñW*e§>ÏÌK´ïb)_˧¾¤}g‡LËu+lì=ÊbSÅV 2k&cäÖ@A²Dù¨ $œ: è]ä ÜvêõzäM;óAdÅ;‘LÃiXSx[×!\dtHçÙûð!É
+µCrqÁHe †÷–Zùº¡Æ²±þ¢
+#°wB¿'ª¯c1ì{œeìÑ›­x¯…¯6›Ø3¬aKå"`t5ÁK/Þøë 2Öf|Zö\ëC o¿NÝw®¾Õ3Ä°ÁéŽ;“<é{ùCÓb„ºzFtK€1*^;¹\:bÒÞ]C·#³¼ Gøæxý$£3Ô8c¨±¶tÝL±º÷GØÓO¡OmÅ3ù-™rÆ^êOü±†'  ÁÏj€³4ùrqÂXl.7¯ÚH8çÊ߶"Q5d¥ÒE=°y–áƳ®ñΔIÆ÷9”í!]Xƒ͘k©dvڳбû…ùûXÑc$FqÒÕ.TíJ·åvÂäJ”tºiZúЯÃ?ÖÎÎzŒ¹}‰>f×Óö4u›‹X»à‹0ô½
+I
+«bÒ.vÝëe—››»îÆy½…jß{UÉÖîë$éee½5dô—
+ùù}ÿ™ù‰…OÁÄJ¥î™ ŽF}êW.?Pª« ñù½-ª_@>âð´Í¡oÈÚÞf¿ØŒÝ» ,.f=OõlÏé‰ÛB+ŽåÇžà÷\[~RW`2†½‘ >˜Ãìš™ò¿UxîkAΗ{¡éUËOrREÎIý~òÃV x™Œ6ø6ÝŸĻ¯7"‘³í ¢¥³‚ïÕÀi
+ã\E¢GÊòø
+O =P²‚;;Å¿|Ó§H3,ÖÏ`†ÊM?©:fŸz´ ¥Á^>ÓDê&5ß.ä`fè”ta
+¤þ,ôa††ýë…iõÅÈÞ!B£J›çÛ“qŠªÜ+ @¤cö2’ûK7Eó*E*ÄÜ0Å¿µþ´¨Xyi4í¨}Ä—Ó]¬*v¹jçsVZR7C¨I—~÷KV²À.<tEòÀùrkë¡°r³M$‘ÖzS@梋Û++ oad9Â^—¦n«þC!|~Ó4Ñ!ÙýVX>
+3ƒjý4É›³,$u
+·SëšD¢ŒÛCZ­Pc‰…μ·â6«‘4I*»ÄJàÜxí¶ô (û¢µÓŒðÖ#{5ö3ô0Î \.Ï´¾þGš¹ÑÅY™ÆYAÏû»çWÔøÙ'l𷘫XpËzéÃõxCÑ.-öpúR¥±ÊG
+šoŒˆÆgòdŸªt^ ‡Ô«’xqæ']£_R7î½°Á'²j]Ï}KaíéX÷ù]Àbåwí_ªXôEd<?>ÇìMÍ®„¼Á1È@#¯”±Æ»ü6&çoO˃Æ2œŒ}ak¼Â.š5ó„¸Ö‚W£ç…®ÙÜÛˆŽoHƒ$ã?!W¶3 ®L þábŽÊ¥½KŽøGÿþ½ìhVˆyðˆí K,²º™Ôý{×YIܬ„¶î{‡ûk½Ïg_+
+fu@9‹Ì «›r «­ø$—bñ¨êà%n´á ö”ƒ~D¯9z^O-œƒ·v£@š3¡ÚZ“j¤9ÖV‚w"KSt
+¡…ÅŠ23ŠêÏÊZÊÎ>Ðv<n_Z]gßuµZ©Q³mؽWp]’ª¶ó»ág‹˜Xh7D¿ýüV™D¨O=\è1d‹¥çŠ6΢=eètÃJ_+Ã)ÒdôŒÑ2ì–«?¾½îæLOžüýÙ“´Ç³¶ÈÛHiSW~Dîëµ*çyªÌÅåÍÞè-‚¸:Cµªùè1RŽâƒH°bäʤç;q”Ïëµj<K3¼«Ù?­K_
+¸‹Ròe˜,@vs/}ñjglÒpõ½ üðM!Äè#ºxëÒFs¥Ï*¥8,áï«,i¾ÝõR÷eR‰¢RÓ}HÛQ‚9vŒ†Mõ–)¦b„Ïÿ„€¸u ÚV8á+„6&NfŠÝ&lПØÎO0T¡Õ¥žVZ}ù
+=Ç®ˆ^V›,mfC¸ùÃ&ŒˆCvÑël¿ªuäžïõóÀsÐ;Ò¬ái>2aòË+˜™ùêkýêžÑJçÁÂã4qì”ÉCÊ4Ib7×
+\_!g…ÿ¨šC›¶ÒB,³”Ÿ\ÝO̶±ðVc*šåSSÒi­Z2«† Õ%êUb8Û‰IplÇmé±KpÓi=ÎtÅôq2΄g|\KÛ—Ño[!»º©×¦O5š<?(ðÈÓðïNå&ÁTA;ñ®Ùr¼ÂÛöÇ6¾9anõ¯„ç'g&Ü¥BììÑ’Vûi-µ(mj+ùxqÁ|…w´¯Kpzß…õ ¯:³3¾
+ƒlàó+\*„Ž½¾Ù•IÑgÍ·8&!àdJFe-»h+ØWDzôÆN}2EmYŸ!ÑP±;Zš'Ðjz'®üŒçGµÝÑÔ€ØëÛ#[8­Å°ù_?ÓØ\ ¸¬ÂrjMJãè§IÝÔ{ìxbÚºø@8Øš9fÒäÇ” ‰Fþë!;bÜà™bID¸ —‰eç€:] ›À¡"4ÊjÒÖ¢q', ›°çJ
+ýß¿Ì“0–3_|]j>,p3X:Ýh{‹Vš™ä÷t rPSsw:ipÿ_~0þÿ'
+X;-ÁWgK°#Æÿ ÆÐ
+endstream
+endobj
+66 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-29 -960 1116 775]
+/FontName/ATAQGD+CMSY10
+/ItalicAngle -14.035
+/StemV 85
+/FontFile 65 0 R
+/Flags 68
+>>
+endobj
+65 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 779
+/Length2 693
+/Length3 533
+/Length 1263
+>>
+stream
+xÚí’mPGÆE¥êù6ÚqÔ:èª ˆ„ä.1Ä$Z D”D9/›xõr/—˜@Ñ ´*j|C|[J-*J:È‹Ða”ŠH¨ŠVPl)Zµè8E¿tú­ÓÛ/÷ßç¿ÏþöÙŒ‹ðW˜å0˜¡9L„)A6b1†L„"A qŽdh ÎA%À
+ ¨m&€É
+¡²vh!†Ip`94‘4"î„
+¡ wOl–7’²Vž Lâ9}Oi`hÊ Ðˆˆu ¿äYþ1Ö{¨zšÛ(J‡›;í»‚zGÇÍ$å|ÝÁ˜-6²@Ë K÷l‚ÝpZh mæžj‡S$¡¦MþØ*•u ¤5˜t@CÉ+€§¬°kÒ†ž(||] bõõüÙ¿×WÛ­†á$Í-pZ @߶wÕØÛš‰%` *BQŒoäÇ›¿¥=v›EŒ¤M@"
+ÄfÅ‘Þ‘—wÈ8âü%
+à¯à½1,
+¦5Λx&spî¸Ýöl©„¸ØÿfKÕ¹ÐÄÞz¦¹ „¶ÿþ«ú§‡“"¨…ªß?k^×êÞÿ<61¦h¶Þ4*§|ZÔ°YW¼ÓX{„'zèyKYÅï–pGª©OatSštÃÀKã†)¯Ëîí,¼^GªúLo´³m²fF•¦½$ó¥"2'k¬cÎñ²?I9>È~#ùälÔ™¤åÒº­%­C+W
+?K?¤lÛt¯ñ•îe‰Û³Ö‡ZÙ4Ò2ínùZÁŽ!O­ÏM÷(°¶e*ª{µENH7¬>°}F‹ª`ˆ_Æ«cí M'ži­é«Å)&]¤mJYiáãËx{œHdÛ³ß<Þ|®1¡ù2ï:¶9sËmaÒcÕ‚Ÿ£˜¦KúØŽ^ÑG+uõÎâo©óÎ]«ßwºµ©xcUBjå¼æ¹3&×ìóDÃå…y”Ôy%—”Û³×äïM›(|5qÐ÷ Å'ùÖ½SFÜù¨e‡½¹ô€ýAK²à]T>¹s(ôìˆü£ÉŽ%®‰)¢¥Û¿i9°ÙcŸú\ßóë÷^ŒLÛX|,ɨϸÑP Ì©iÒ>ü"$/ñ`Þ®“‹†'\nœ_ß\k-˜@Ü
+ïçî{³îÔÌ5ÛFæǸÅ;3†·ÉS
+endstream
+endobj
+80 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-39 -250 1036 750]
+/FontName/JKCSYD+CMR9
+/ItalicAngle 0
+/StemV 74
+/FontFile 79 0 R
+/Flags 4
+>>
+endobj
+79 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 712
+/Length2 1386
+/Length3 533
+/Length 1918
+>>
+stream
+xÚí’iXSé†A!@Y%jåšC&²£&ê@€
+— ø-ü"ü@(ŒÙ ØK ì# > »€´“.
+¥oêEìþ±ã1 ÖxþÍiâD‘eWë˜Wó$2%y?m¼ÏhZIKÿË$ò+Ç£Õ½·jš¹#•®­PXÚ…·7 ªÉ•ÇGÑ̯jco½ÓëBƒjQEÄø]ãç*v‘8êæû{Ök®êm9x³Ÿ]ˆºÙÖW;œö²~™ÕKóÊD†NT­àwº°ÍWK«Ìx2Bòペq觫œ ç€R·w´ÙŒé0DÞs¾B_1ž²6X{ûua_¿êI‰S=t $°MB-ǻLj²©Š7;tÆzä[M§¹†eÿ´lkÿá›sêUÝ£<yËiÊÿ$À ¤XóµJvw›¾Õ Cäv¢ü›ž“:ÈŒ¾¯ÕÆíí¸ŒžÄ?ø·&$uTr kåõ7ÝÇ 9ÒÓY=¨X¿œ‘3„rcû•$v>Èø œ|—<—GŠ=•k[x/Ûˆ>U…XÕçéz8þ\È£½F4_+ Üã»­uƒ¿®SLÆÃvÓ®ŸÙÁ¥F¹†YïSªºâM.M7ŒS¯Ûzqµùä·Š÷Ômí×"¤µéЈVªcÐ~èÍijõ»Øv6¶e`ÇÝÑâÓ¦ª8Î*Zw·r¨å¬üŒüZ“
+s¹Þ¬?NVݘQS<aK±ñ¨¤7=§Xyê5E77¯fõWÞt³Nü¦=©¹~}Ð>05©¦ïÅ]ÖA¤iÃI#n*ñJ‹e ¦¿yÛ3+œA2=™y¬;÷Hùr§O†Õ
+¶Üwtã1I¸ q€˜ª6ó‹°F“Aåm­¼¯óV’Š´¥îkµh{á`ºÉrãË*ñlkkœ—‘ÿŠ;IÅ¢8ŠªæÝ{°Š@ëØ°üÊ<{›çH›’½¥KüXßVN3Å!aÓØ[Z™ÙÕ=!v%©sGŒ.JCÊTúi™­ÔB'úRôKÒ=MßÃàöaxC“¹Â©Wë期{1c¶Âñ¤‡
+b¨Ïž+¼³ªåíæu£Èïà~Ý–ää•Y)Ù÷vÉ"é‡NŠ¸HC}“HçóÙpbf¢ïp<Ã2êä†ÅgÉ&5þUE¸4¼ŠÜE_Ùq¿ñ“z÷ц1ÇìÕl
+×Û~eׯœ¯°‘§>ê´úë»F¯Ää+JØ~›º¾©z3–¸SOQ%»
+¯Õ–Ç]ÉquÔÈn[h{•~ÿ41øï>kÝ’Ä÷uï½0?š²Õœ*©Áe™G§cÊò—ˆúíóU/:QW-ãž×É£%]ë¯S‘Þ(n´ÞG=®ßtoØÌ{‡Ñ½Í?ä<÷)}‡¡š]\NVÃF%³.Eµ1jPÓX'.à^8]¿|ͦSYÇïò
++Kå¼_qÒˆZ˜ÌÍÅý—ìÿÿ,.ÈŠ<¦p? ö+Çóóí
+endstream
+endobj
+103 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 411
+>>
+stream
+xÚÒ½nœ@ð9Q`Ñðì ˜û°u€d‰“(¹ÂRRå—.l%5¸ºÒ¯4g
+^cѽÀ^·bóÇv‘È+~ ³ìì ùb‘.êõvZ¬Ó³µÊŠó´ÈT–¯Òb¥~.ÕýË#Ä©<+ÒUþnÁÍ]t¹æ?ÔzÍ¿ªì,šo¯Õ¯‡ß·ÑüòÛ•Zbî§ÛOÊa$¸øÿ`ú'>²¼'Øp‚ &tÝ„ÃqBc&´V0Ì:aK%@!Š[ÛSÀºZkâ=7®n-W†wN±Înžœ LèúMì†À$®'ä˜Ò ‚G]yìµó4Fè½
+endstream
+endobj
+104 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 248
+>>
+stream
+xÚ³00Ð30P
+º†z&†@ž‘ž¹‚™©ž‰±BŠ¡B!Œ T®`nj¡ga‚¦%9—ËÉ“K?\ÁÔ„KßCÁ̘KßÓW¡¤¨4•Kß)ÀYÁȇp=]>0þ`°gàyÀø‰züñã?{ùõñ‚úÁøŸÁ¾çñ@£0€
+%óÃ(õÃæ?zðç?;:øçPŠùÏ~82¦P¨.;
+endstream
+endobj
+105 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 353
+>>
+stream
+xÚ}ÑÁJÃ@
+æ èÉP¡›b1Gikýø{ÌaÙufÓŠ‘„<&™™ìÎŽã8ŒcfÃ$Œ'ìp”†ƒ˲8Y6JÂìˆÝØË’4Ì& ³w_÷*nî½YáE×,zÑ9K/*.ØÓãóÍ.OØ
+pñVÀo
+endstream
+endobj
+106 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 381
+>>
+stream
+xÚ…Ð?KÃ@
+endstream
+endobj
+107 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 497
+>>
+stream
+xÚUÒO‹Ó@
+ü<hÅê‰<[µ:´w¤~˜g¬¶ƒ;{gWM¿ébe·öd©›+±µñR×,/XQAšWÖ ¬ƒ"ŠÌéu±ŽÓ²$]k“–H³âʨò/éc±5ºüMš³
+’º¾5§îJ`“ÞìL·ZÓ¦Ñ.ëV=Ò Ö–›,¹—AÅñPÁƒÇ^à`IêÄ
+/C Æ«‘¤{|ªôÍÁ^þb°|ãŠÅë³G¹5÷õªX¾‡ã\ß×q_çòZüã¸ÿ¹-zíï$0|5 ßÿ& …
+endstream
+endobj
+108 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 128
+>>
+stream
+xÚ370Ð30P
+ºÆfz†Æ
+fFfzÆ&
+¦†æz–Æ
+)†
+…
+¦¦&zæ
+@Õ0&ŠŽä\.'O.ýp3.}0éé«PRTšÊ¥ïà¬`äC¸ž.
+ÿÿÿ£õA60
+endstream
+endobj
+109 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 152
+>>
+stream
+xÚ3400Ð30P
+ºF&z–
+–†¦z&F
+æz†
+)†
+…
+Ɔz††
+@Õ0&ŠŽä\.'O.ýp3K.}0éé«PRTšÊ¥ïà¬`äC¸ž.
+ÿÿÿo`
+endstream
+endobj
+110 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 136
+>>
+stream
+xÚű
+Â@D­÷+æ övs—Ë^¼BÐÊPK EÿÛÒFÖ XHÀ6S<˜a:Á–8*4爬‰›“ŽEqPœÑ6…‹aH#Gãh¿ý‰úJa‡”(¬ÐF
+uëåv¤ÐoæÐÁl]Àýé~wLÂÙHS-ùþà8^KËJÛÍ_/
+endstream
+endobj
+111 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 198
+>>
+stream
+xÚÅN=A¦’L³Gð.`vfg0SI‰-$T€RA¨é”µ…kظÀê¶Øøì#Qè¼—¯øò¾Ÿç¼—Þ“’JQÔŽ¤·ÔrVMã¤qäTW*M Mk2®-­%U­óZóa™¯DœˆpF&ሺV„ɘ¶›ÝR„ñ¤Oºâ/š y
+endstream
+endobj
+112 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 129
+>>
+stream
+xÚ370Ð30P
+ºF&z–
+f†&zF@ÊÀHÏÈT!ÅP¡PÁÔÈRÏÒB¨ZÁÌÈLÏØUGr.—“'—~¸‚‰ —¾P5—¾§¯BIQi*—¾S€³‚!ázº(0`€ÿ ð7ùLþ›kÆ%\®ž\
+endstream
+endobj
+113 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 137
+>>
+stream
+xÚ370Ð30P
+æFzFæ
+f†&zF–
+æz†
+)†
+…
+¦F–z–
+@Å
+æÆ&zæ¦(’s¹œ<¹ôÃLL¸ô=€ú¹ô=}JŠJS¹ôœ@|×ÓEáÿÿ¿ÿÿøÿÿÇ€ ` \ ‡ÿxHl®%M=—«'W
+endstream
+endobj
+114 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 132
+>>
+stream
+xÚ370Ð30P
+ºF&z–
+f†&zF–
+æ†zf¦
+)†
+…
+¦F–z–
+@Õ
+æÆ&z榨:’s¹œ<¹ôÃLL¸ô=€pé{ú*”•¦ré;8+€ø®§‹øð“¤ëú& ‰Íµã.WO®@
+endstream
+endobj
+115 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 196
+>>
+stream
+xÚUŽ=
+Â@…#Â6É 2'Ø쮫٭QÁ‚V@-­ceJ¯¤zaË!cp±ùà ïgb!¸ðѼ/AZÅcC©¹² äFÀZÂÊrk uƒ2– óŸXmYš±h Z³h
+ªe6ƒãá´aQ:l5Él Mëž«<tç¼¼ô\Y%w·{4aQ‹ú~#
+¼„MpÅg‚·½ËÏ_:üñw''¥¨Ú¨™Vh‘Öé6ÉØâ ÷±r
+endstream
+endobj
+116 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 110
+>>
+stream
+xÚu‹1ƒ@©÷~ÁÞú–CÐ’DâŠH¡â2EüŸSRQàÂÒŒlš™šáWm­NxL‰ŽIëo¨ž°_´N%QÖE+ý|˜?Òg šNÂ
+endstream
+endobj
+117 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 137
+>>
+stream
+xÚ³°´Ô³´T0Ð30P°0Ñ36TÐ52Ñ3°T°0´Ô30S074Ð33UH1T(T076Ñ37U0
+pV
+endstream
+endobj
+118 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 147
+>>
+stream
+xÚ3400Ð30P
+ºF&z–
+–ÆzÆ
+æFz–F
+)†
+…
+†–zf
+@Õ
+æz†¨:’s¹œ<¹ôÃÌ,¸ô=Ì̹ô=}JŠJS¹ôœ |×ÓEáÿÿÿ@`x0ð
+endstream
+endobj
+119 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 266
+>>
+stream
+xÚ•=NÃ0Çu¨ä%7 ïŽ&‚
+Hd@¢€Ž@0§[G®d©×HÅÌæÁÊã9éu`À²­Ÿý¾ÿ&¯´Ò¦«)UaÀ¬rUç`̲QE UÝ(³„'Ï`4¹è
+ÈŠ¦Reyó¸“ëNf°Ò2»…"—Yw¯/o[™­ï¯ÀÐûçÙ]ºã
+3´¸O&DoG!úÈ{±°a>´‘ŸZ߆á˜âÜ:ÄZ<ÚâØ÷x²GDÚHfg??‰¿ÈdÉÜâñ—ïÓ_´…3¦„Î÷Š‚
+y×Î(Å8ñp‘ü‹cyοêòÞxÏ|>#Ÿkµârm¹æò¦“›oû¸BO
+endstream
+endobj
+120 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 237
+>>
+stream
+xڕϱjAà;,”m®Mç¼€{sçÞ©Á+Zå’”)"
+–†±ÒWò 1ä,·8n27‡‚¤ù``çŸD´ˆ ¤DôRgñ(M-!P‚6Ïà>'p.³9<ê;KÙ•»G3*L| }2ñòÄÄÅ ,æ˦WPÏÍX\ó;{æÝÚ'ª–àaDÂFxÙF¿¬ý‡2Á°I®Â²åˈŸ½òÁ™ýꃹ|2Wƒ7áâ•™;;a£Dº+ìÿ€>þÞÕ( Õx=¤'õ¸ÖÐBͧµd]׌ 3û+
+endstream
+endobj
+121 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 130
+>>
+stream
+xÚÝ‹± 1‰¯Šm€ó >;Bz@ÂD
+m‹Ûõ~¦Ðí–ÐÁ¿ÚVp÷Çä‘Ágáþ+кÑþ½»›
+endstream
+endobj
+122 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 247
+>>
+stream
+xÚU=N1…#Q¹IK—9׳ÞX›*R
+endstream
+endobj
+123 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 279
+>>
+stream
+xÚU½MÄ@…‰7ñupSÁzýoG–p€À…H‚øÈR­ ¹:@î` ¬{Ì[Ghå'­÷{3ó¦ Á‡ QÚÒ™4¹Ï©³Òç4Yðu%O™¼H•w¾kÅ`©‹Öí?Ãã³Û .}²téT…K‡[y{}ß»tww)™Ý×ëp%
+endstream
+endobj
+124 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 275
+>>
+stream
+xÚU=NÃ@FÛh·t™Øk;Ž·³@ÂT
+‹ù†ŠbŸ´£yó—bÌcG™b¾OÒVyÕ«¼Ò–kä©”ivU+±lÙ×)¯Óãñ}(dׄâFš:ý­¼½¾?‡âpw)¥ýÿ¾ý•|áÐ-ÎÆ £qÄdœ0g,Æ:@uX;èÚýl¡ö2(((((((((ß        `4Áh‚Ñ£ 'PH p
+Pøpna|í˜cåO´¯0{µÉ+Þ%cGöµôŽ“pžÅg›}ÎÉg}þŒ»0ÛqG¦sëÅ/0û5&¿ÌèW:ûÅ>áº÷¿•R²
+endstream
+endobj
+125 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 121
+>>
+stream
+xÚÝ‹± A ‰ÝÛ
+endstream
+endobj
+126 0 obj
+<<
+/x4b 103 0 R
+/x52 104 0 R
+/x42 105 0 R
+/x4e 106 0 R
+/x51 107 0 R
+/x2b 108 0 R
+/x61 109 0 R
+/x63 110 0 R
+/x64 111 0 R
+/x65 112 0 R
+/x66 113 0 R
+/x67 114 0 R
+/x6b 115 0 R
+/x6c 116 0 R
+/x6d 117 0 R
+/x6f 118 0 R
+/x71 119 0 R
+/x72 120 0 R
+/x73 121 0 R
+/x48 122 0 R
+/x4d 123 0 R
+/x4f 124 0 R
+/x50 125 0 R
+>>
+endobj
+59 0 obj
+<<
+/Type/Font
+/Name/F14
+/Subtype/Type3
+/FirstChar 43
+/LastChar 121
+/Widths[700 0 399.99 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 899.99 800 600.01 1000
+1000 1000 1000 1000 1000 1000 800 1000 800 1000 800 399.99 1000 800 800 1000 1000
+800 0 600.01 0 0 0 0 0 0 0 0 1000 1200 700 899.99 700 700 700 1300 1300 700 700 1000
+899.99 700 1000 1000 1250 1000 1000 1000 1000 1000 1000 1000 1000]
+/FontBBox[-130 -440 1430 1120]
+/FontMatrix[0.001 0 0 0.001 0 0]
+/Encoding 58 0 R
+/CharProcs 126 0 R
+>>
+endobj
+127 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 407
+>>
+stream
+xÚÒÁNƒ@
+¢FoÁC¿ÑŸ
+¥Ψ\Z8P©—±wÅkQ;(JjÚ€ˆJZÔ¨
+ûÉ;Ô{lc‹
+eԱʆ[Æ!¨`c±ðKBSž=,±q ÒµPsRì³ë~…“¢½Å§ä=@Pµ#húΣOhéSë‘˽¥Î^0+e´`›}Ú áõ2¼ÿpŠæÊ
+endstream
+endobj
+128 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 232
+>>
+stream
+xÚÍбnÂ0`G Hš7HîpœÇ™¨D[©èÔ
+ô´ZA£¨›Âº„4M%ê(ZKѶёՖÏ;^|ƒR¼ø„¦æE·€Ãþ¸áÅ|ù%õ׶{“X–³—žÈbΆ!Ëclâ<Îמùºy¥„ÍlN˜Ù%l"ú5Aç¡óÑ¿íYF8ãÛ¸8¦È/^R¢Ç¿ð°6»’EøOˆ{\iøV3p72çÿúý
+endstream
+endobj
+129 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 360
+>>
+stream
+xÚ}ÑAKÃ0ð×Vèa»î 6_À¶›uMAV˜
+ö èÉ« …)
+; ™°¯Uð‹ô#ä¡4¾—v°í` ù‘ðòòOËã8Œcf‡IÆ;Ix8æ,å“0›°4™†iÆžÆì•¥g<ä Ãj–fI˜¥û;_üyáG÷lzêG×l:õ£â†½¿}<ûÑüö‚qÞN‹KfŒÑ˜­‚Ör¸ïÚkÝlöÝ®Öö×Ú¸ŽU{Rê¨ÊÉ’/†¤Ô+tô§‹6ž_h=Ô¢$-*TçZ(
+zÑ%ÀU
+àœÔ
+endstream
+endobj
+130 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 398
+>>
+stream
+xÚѱNÃ0
+Ù!nPqfœ2ƒ ØÀÄk(Ü€Ëj×Ïcù”Â=¡rý0<‡W?ð¨Ë;
+endstream
+endobj
+131 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 471
+>>
+stream
+xÚ]ÒÁjÜ0
+Í)ôXØ–r±Êú·œöGœ?ÐQcwflHZƒå'kfdKJµÖ‰ÖŠšµNN2õ&['i¦¶Ù69MU®7‰NÕMª¾ª|³MNrÑ*›%éé¿×_Âó]¸ºR›,\}P®vÕ÷o?>‡«óO*…þÔݽS#\ØlX=k`Õ¤? 'ë#ijÐÀîJ ã/ÕQ|$QEÉÊdg5¦-Ž+v{ÆĬ6#+Ø ‚Aš¹ÕLˆôÓÝ¢`Ô³43²­Yíõ+Ûjqj+Òà;¿ãÆÉV.î¼^'@Ê¡ñ¢Ð(~XF¹¶¨´Gù¤tÑ‘Þ?ΚC¤í#èuó+ze Ó«Æ”Ì>HÓë¦-={@qT
+‹©
+e ,‰ãl$œ &ñ3@”KÂÓG£ÏÏóN?2N\#Pø~^þAT`Y
+endstream
+endobj
+132 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 135
+>>
+stream
+xÚ370Ð30P
+º&z†
+fÆzÆ
+¦F–z–
+)†
+…
+¦æ@3 jEGr.—“'—~¸‚‰—¾˜ôôU()*MåÒw
+pV0ò!\O…ÿÿÿ×ñÿ?ö ò‡<}É `„ H
+
+endstream
+endobj
+133 0 obj
+<<
+/x4b 127 0 R
+/x52 128 0 R
+/x42 129 0 R
+/x4e 130 0 R
+/x51 131 0 R
+/x2b 132 0 R
+>>
+endobj
+60 0 obj
+<<
+/Type/Font
+/Name/F15
+/Subtype/Type3
+/FirstChar 43
+/LastChar 121
+/Widths[700 0 399.99 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 899.99 800 600.01 1000
+1000 1000 1000 1000 1000 1000 800 1000 800 1000 800 399.99 1000 800 800 1000 1000
+800 0 600.01 0 0 0 0 0 0 0 0 1000 1200 700 899.99 700 700 700 1300 1300 700 700 1000
+899.99 700 1000 1000 1250 1000 1000 1000 1000 1000 1000 1000 1000]
+/FontBBox[-130 -440 1430 1120]
+/FontMatrix[0.001 0 0 0.001 0 0]
+/Encoding 58 0 R
+/CharProcs 133 0 R
+>>
+endobj
+134 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 235
+>>
+stream
+xÚMjA…K Á Öìéžqš‚àdB²Ê¢Ë,tÐÜlŽ2G˜å,Šy¶S
+É6›.èWï½òÎ9ëwð¹³yàIp6MùišYŸsÈR›Þyþä0Km>ãøýþü+yÿ0ËÂ$o< &yîXlùðuÜ›dù²bg‹5å‚–z‘ ÑIPg¢Gõ¥¥EÝ!IÓè»FݼÕ¼Z
+óz$ÍQ
+endstream
+endobj
+135 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 252
+>>
+stream
+xÚ}˽JÄ@ðXl£oy7»InMªÀ©`
+A+@¯NÑ:‚ßÀWÑ*¥¯ ¤°ãš,;îW£7Å~ÃÌÈ\.ø¨/J8.—¤”%—
+ÊZñJÁ„"/x•ƒ½‡y®x}ò÷çöž-Z–Ý€ªXvÅœeí%<=>/Y¶¸:iç0¶g@D˜¸ 2Irè1ÍÌÇ·ÍÎá•H§ÆÐÌbj,>-ì’|t‡48˜©w )õèÑ4êÎcDí;mp
+Xã6`‹ë€ 7LjÕO€Y â+€DÿGïo»H#^šˆ=HvŠ·ìúç\"
+endstream
+endobj
+136 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 293
+>>
+stream
+xÚбJÄ@àÈuÛä2/àfc’ÀAàT0… • –Šv)¯ ø÷*‚›ƒ{…ÈØæºCÆÉNÁÂöcØÍfæŒ1Ú°KftÁqhtpê0$Kt–Â]
+endstream
+endobj
+137 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 299
+>>
+stream
+xÚUÏÍJÃ@pÁÛ>ƒy7»&% 
+UÁ=ù
+· Á[0A& j´ÊBv
+endstream
+endobj
+138 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 125
+>>
+stream
+xÚ3400Ð30P
+ºÆz††@Ž±ž±¹‚¹¥¹ž¥…BŠ¡B¡‚…¡±ž‰Pµ‚…‘…ž%ªŽä\.'O.ýpS.}SS.}O_…’¢ÒT.}§
+5ȹ\=¹}gTa
+endstream
+endobj
+139 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 125
+>>
+stream
+xÚ틱 1‰¯Šm€ógËvúüK8@‚ˆ€
+[ÄÒ„U»[F®™kÁIqEQc‰èk”Ua©óÇñBC£p@Š6H‰BÛâ~{œ) »5´ûWÛwº¿þø³ÐÔhÿ@b
+endstream
+endobj
+140 0 obj
+<<
+/x79 134 0 R
+/x62 135 0 R
+/x74 136 0 R
+/x45 137 0 R
+/x46 138 0 R
+/x4c 139 0 R
+>>
+endobj
+72 0 obj
+<<
+/Type/Font
+/Name/F17
+/Subtype/Type3
+/FirstChar 43
+/LastChar 121
+/Widths[700 0 399.99 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 899.99 800 600.01 1000
+1000 1000 1000 1000 1000 1000 800 1000 800 1000 800 399.99 1000 800 800 1000 1000
+800 0 600.01 0 0 0 0 0 0 0 0 1000 1200 700 899.99 700 700 700 1300 1300 700 700 1000
+899.99 700 1000 1000 1250 1000 1000 1000 1000 1000 1000 1000 1000]
+/FontBBox[-130 -440 1430 1120]
+/FontMatrix[0.001 0 0 0.001 0 0]
+/Encoding 58 0 R
+/CharProcs 140 0 R
+>>
+endobj
+141 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 155
+>>
+stream
+xÚ3460Ð30P
+ºÆz††
+†FF&z¦
+¦††z–†
+)†
+…
+††&&zFæ
+@õ
+¦&FzF¨z’s¹œ<¹ôÃA
+¹ô=€j¸ô=}JŠJS¹ôœ |×ÓEáÿÿÿçÿÃÁ nåÒžÛÀ
+
+endstream
+endobj
+142 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 154
+>>
+stream
+xÚ3460Ð30P
+ºÆz††
+†FF&z¦
+¦††z–†
+)†
+…
+††&&zFæ
+@õ
+¦&FzF¨z’s¹œ<¹ôÃA
+¹ô=€j¸ô=}JŠJS¹ôœ |×ÓEá?üâîúQ.í¸ ÀþL18@(æ È
+endstream
+endobj
+143 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 241
+>>
+stream
+xÚ¥OAjAYA„ù€`¿`vv\uaÁ(dBrÊ’=$(xôð[+~Äü`†-'›Îa.^R‡*º§«»flŒ6†ÊŒšxNid­XfV'czK胆©ÕÆ’¦t’è, ¯+9+düâÇdüè'd\,iý¹y—ñìé_ÿ–Åœâm€›hàîÉ?íRzR"G9'JᮢƒƒØUy„¨š^pª•ë}ãâúuïŒj›£{Æu»G÷g€//‹BÝJD ÞÛy¯æC|–Cp$Èq9<E.
+ù|`ñÛ
+endstream
+endobj
+144 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 152
+>>
+stream
+xÚ³°´Ô³´T0Ð30P°0Ð36P027Ô30T072Ò37P054Ô³4TH1T(T031Ò31P
+%E¥©\úNÎ
+†@>„ëé¢ð žC¨ÿ‡ ÐÑè0ºBÿo`
+endstream
+endobj
+145 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 145
+>>
+stream
+xÚ330Ð30T
+†zfæ
+æzFf
+&F†z¦@Ž¡‘ž™™BŠ¡B¡‚‘‰ž¥š™é™ éHÎåròäÒªãÒ÷
+pV0ò!\O…ÿÏÿÿ?Œ„Áˆáÿ?†ú ò Œ N Œ‡Ú?DQ6HÐóÿ\®ž\
+endstream
+endobj
+146 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 181
+>>
+stream
+xÚ³00Ð30P
+†æzf&
+æFFzæ
+f†FzF–
+)†
+…
+f&Fz&@µ@hbb¨gfŠª#9—ËÉ“K?¨ŽKߨ„KßÓW¡¤¨4•Kß)ÀYÁȇp=]þ?ÿ‡ Ðíh4?„ú¥ÈCè0`d@0q˜:˜>˜9æ£ØÿJFÐϱ9ò!ýF×Ã\IÈ}¨¾éû€Ã|Böü?—«'W
+endstream
+endobj
+147 0 obj
+<<
+/x68 141 0 R
+/x69 142 0 R
+/x6e 143 0 R
+/x41 144 0 R
+/x43 145 0 R
+/x56 146 0 R
+>>
+endobj
+73 0 obj
+<<
+/Type/Font
+/Name/F18
+/Subtype/Type3
+/FirstChar 43
+/LastChar 121
+/Widths[700 0 399.99 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 899.99 800 600.01 1000
+1000 1000 1000 1000 1000 1000 800 1000 800 1000 800 399.99 1000 800 800 1000 1000
+800 0 600.01 0 0 0 0 0 0 0 0 1000 1200 700 899.99 700 700 700 1300 1300 700 700 1000
+899.99 700 1000 1000 1250 1000 1000 1000 1000 1000 1000 1000 1000]
+/FontBBox[-130 -440 1430 1120]
+/FontMatrix[0.001 0 0 0.001 0 0]
+/Encoding 58 0 R
+/CharProcs 147 0 R
+>>
+endobj
+148 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 585
+>>
+stream
+xÚmÖ1nA€á~O±ð²+l¯äØR("%U¤L+iá&¼£pÞÒ1e¤L‘Œ2z“a1xwþh$ £~ÆŸàumÛ6m[7W‹f±¬¯ºy3Uwm;onoêåò¶iõ§®þš÷º¶¹¾®óõ—û“'}üRݯªÙ‡º»éªÙ›ÓŸÕÛúÛÓ÷ÏÕìþÝëúøøôpõPïÒ.ýÈëg^¿óú›â.õIòÒ¼\^>ýI¶É›ãí_)æÍÉö!…¼9ÙÞç'‡éövxÅñvº»¼ÑyÛÖ“÷?nGCV0dyC–3d©!K Y½!kcÈJ†¬|^eV>¯2+ŸW™•Ï«ÌÊçUfåóBÖYù¼Ê¬`Èò†,gÈRC–²zCÖÆ• YÇ#,²JrŽä”ää†k·È*ÈE’ $çIΑœ’œ€ÜéZCÖ”\$¹@ržäÉ)É È=_»EÖ„\$¹@ržäÉ)É È_Â5&I.œ'9GrJrr—O¶GÖˆ\$¹@ržäÉ)É È½¸!ë…\$¹@ržäÉ)É Èì‘u!I.œ'9GrJrrãoDCÖ™\$¹@ržäÉ)É ÈM¾¨Èz&I.œ'9GrJrrÓßCÖ‰\$¹@ržäÉ)É È?kÎ&{Î&[Î&wÌZ#k §$' Wd9Î&ÊÙD8›ô˜MrŽä”ääÊ,Î&ÊÙD8›ô˜MrŽä”ää…ÙD9›g“³É@Îñ«$'œ;ÿ3!W«êý?@\ó
+endstream
+endobj
+149 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 724
+>>
+stream
+xÚÅÕAkÔ@
+z‘íµ‡Bƒø"BskÿÂÔ€½¦ô!dœy3»›J{ЃÎ!“oÈ$ï=^ßó<×ó<øþŠÛë:¾×s½ž+îŠçý®Û œ¾3qzݾ»zÏá—;½ ïvïþ¶eóUs}Øì<çË«ÍÎ#>ÍÎð‰óæõÛ—ÍÎúÓûŽÏ-9Üp˜‡r¢ÿ–%€~=ÿWTƪ}‰…v‰§ù%¦eTç´ÖiévvXc命:Çääz–#Hë¤p¦X’s“‚­À¹[i’E»ie‹ ‚ü6mZn“2D~Ìõ”9„mÁÊŽIFÏÐSÁr`B³Èi9&ižô
+dF,zÄ9ØáLc
+š!7Ø®èGG¦Ã’Pë‘$ @±ù)ÌÆßq~Äñ¶Æsâ›^Ì)ß]ÅD®£DRã+@X¡h3ñ›)†*£÷Š*£Eî ØŠ&> 4µ—ß•© ‰Ÿ£JQ”b(’DÄ«at‚ºÈÂRÑ.±rL1”õ`ª’¶%„‰äŽ¬T[1Ôb†ä*3jÈrF]~¯f´%ÅH²˜o•7ÕŒ*…+þ)ÍÃæ³_Ñ}…
+endstream
+endobj
+150 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 1156
+>>
+stream
+xÚm–¿nãFÆ×paDpe*²»êd ºóà¸$¸¸’Ty€$H ‹
+•*TÌG±
+¢«¢Gˆ ¼eD³‰;™Ù™Qb–¶´ú‘œývøqvGÃáp0¦áãÑÉàä4}4ÆÏÒÑp8<}’žž> OÒ/GéwÈFÃÁãÇ)^¯ý›¾ø¦÷â¬wüy:z2êÄ_g§?~ÿÓW½ãŸ¾ŸÒoþyöAz ×ðãñÿBs r<–x8<J¨ÀgÛø„;øj„;øO¼¹ÞÅW!bÃs(b±3>áÆwdÕ¾#«ôYÎwd-}GVî;²¬×ñÈʼŽïDx߉,ÌW߉,ÌW߉,ÌW߉,ÌWÿNda¾¢¬·" ó%²Œ9YQ"–…ùÚËæKÓ²Y¥×´LD–óš–‡"ké5-_‹¬Ük¶œÈ²^Ÿ–Y™×ñ]C¨,'²(…’D'²Z–s"«e¹W"kk¹ #²¶–«Î­„PËHµÜ¦1D”µ€…„PË‘X¡–›ÂZB¨år(%„Z‘„PË%°‘j9¦«–3Y‰¯mŒX®2G. úÆX¶Ü
+.—Ýú>[nUÐÊÂœ-—
+joÉral˜Ó¤±ÝÒœú¡ûo é|"gùT°\Ð¥¨-ÔÃÆ3¢–Œ*o¡åB&0ßA<Ž–+3ÊÉr!sàÏÃWH¡­ÚÈ[²\Ãýgü•‘årÊ!³`9ýkaË%-T°åò*Ùrœ'‚-·†Y³åÖ-4eË•-”³åŠJ¸ÊU’»0®rU¦¨É¸ÊÝ·T91çVªÒƒ¨ŽU.ÆPË ˆUn
+endstream
+endobj
+151 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 1248
+>>
+stream
+xÚm–ÏkGÇßV`1ZróAtujN‘W(q$0Þþ >´´§^SÜÒK
+vÓ‚ Æk¬ƒ/!>ô’C¨þ˸X>IB·(x]Y‡®è2Ó÷Þ¼¯¥jA;úHzó·_¾3­0 ›aØà·G›ÍÍnãQ«Ýlw­0l7Ÿ>it»O›áfã»VcY+l>~ÜÀß»ñ½?íþ¸ú|guã›FëIkuãssÛù¢ñóO¿|¿ºñü«ôÙ|Üù¤q®ÏõŸxý×?xý«‹sé>^c¼R¼f:×*FXÆ·º@xßè9Â{x„žßÇ¿sÅ2ÖÛn"‹Õѽù jIÖ\-Éš©%Y©Z’5VK²újIV¤Üü©ÈŠ•›?YZ¹ùS‘…ý²ó§" ûeçOEöËΟŠ,ì—ÿFda¿¬¬÷" û%²
+S·kf‰ÙrܺÊFc9£ñËk˽+¡WÆr¦;¿™FËñº½žYµ±Ü„¿?atf,gVtbÖc,gVtbÖcR.gùü„k‘I¹ü…Ck±I¹Û=‡ê’rd†HkŽëØ”ë@ é•Aצ\ÝÓæû6å^“y¶kSn4Ñ:_ë7©M¹+Ë
+dc¥Š¶ºl¬ìC&kvcå͇‹»Õì¶4ÛXû '©»³‰Ã·‹G¦qélâðhñÈ•Î&o/œäØrãÅžZ’U:›8¬–d•Î&«%Y¥³‰ÃjIVélrwîì/Ÿ;ÿ焼úéÎê×ÿ°|#
+endstream
+endobj
+152 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 910
+>>
+stream
+xÚÕM‹ÛFpC|ˆ¹ô2‚róZñvÃâ´%ÝCHzêhsÌ!MÉeÇ9•^"J.-”ø£Ô¡aÕ\â¯à]t•¢ËˆóôÿÌHž5l¡bYëgY£çÍãt<ÆãÄý›NF‡i’¦“Ñô0™ÝžŒ¾Hf).M“ÒäIrç`6ºsàÓÉtv8š¤»w|ÿxx÷x¸ÿ]’Þž÷¿ÁÛ³áþñý䧟=îß}øe’žÇ_%äJøWÛyµ·ë¬Øµ¨w-Û`; +5Ñ¢³ŽÈ*C6’ÞµQl£„wa%[Sæ]’sKkƉ󚖼~ƒöæçïñíñ{ëØù±7óÍ€×çüyýŵ¼æçS+ÝóÅi¦9>6â³ò|i8~ªÇoÕ'aò£fÉùU!täÏFþH
+¦_½¯÷þÝ{ò_þ 5ÉÈ:c}ú5Y“}ŠGVx>Ýð~‚²~B|t¤ØæÊ~Žøiî–ˆSäwÁ‹kKÊsÒðjN¸.%­Kjá—–^Â]ï-/—ì¾n9Øà‰å`eÆõ-Z„l9X‰
+£ºðSXø œ³s¸±ôJ’,Ùë–tai}Ám ’÷3k©f£Ù ÷{‰–³³à‚½¶²f M%;·ªeKC9» Æ9å…Uódá,·T66ÿGË5\ v‹³e ,Ùg“±Î&X9Ÿ({¤ÌsÂ-l\¤#²/`‚ ;ï͆±„opwÑ°%û&O
+ïŠÞÝ"SzŸ*zkÔ™Üû£¢3-c2Ø5mˆÎÎâ˜lŒ/ƾ²òìç¿bmQyg3¨D%'½«U¤LtõfgýÖ`ˆêªtþGw{ÇJþÉÞð÷žÜ>³ß]éö ŠîÁ:£íq\)Xkv æÿXcãÁ{ŒýÁ^\Ÿ÷ ö&Šb¼´lijŠp «šQá=þW°sëÄ6³‹MìWÛÄ»
+vH°RìqûUHûýkëÖ{{í½ägs wF†ãU¯Ûÿ8öÕ•í~X øî…è½ðÅtþ»ÿ–÷ª Ðìõûqwl÷ãî(/÷¶ÁÅ6^4—[p:œP—ŸtåG|þv¹[EŸ9›0_®ž&î×Û8ë0’݆~ËË®‡Óî~ô~ÙÕ£¯OW¹sÅýïaåãÛßGËôgï‡ßþ .!H'
+endstream
+endobj
+153 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 621
+>>
+stream
+xÚ­Õ1oÔ0ð)(BòÚ)þ¹¤×^Ó…H¤Þ€
+}X=y ºÞÊ»_=¦\Íúäxž°À›‹?V¡ÇØ}ÂÅ  !å|ñ 2œ-6)O€þ Ù¹†CÊ¿‚§ÅÀ¸øEð˜ös€€²!e Ï‚XoׂŸCÚQ{›ˆÙ#xŽœãC ¼-]ñrG6—2o¾öщærbè±¥‚‚s7&}÷®ŽØ[e¹®˜Âø0\Wæbä4=×»Ä+ÒVîŒS{s¼Å"Ä[êµQý õ7¸¢€•«ñήCÓb°_Íiÿàx‹CÞjÉÇí¡¼™ÛNLužÚè×›ùwŠ)ü~YÎk}<ƒ ÒCû+&žîpÃu\ø
+endstream
+endobj
+154 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 1471
+>>
+stream
+xÚm–ÏkGÇ×UA`
+j饅’ôàS å—ÀhJÚB}(mO=·äÔCšö`0ÜCé|‰!xþ+¨°1ÏŸPϱZí¡;d˜×ïÌì®%«ÚàDŸ¬g¾ïÍwÞ{ÝN§³Ýé´ýÛ÷·ï÷Û·»½íÞÃv·Óém?¸×î÷lwî·춟€u;Ûwï¶ñ~ýï•_ÚûyóÑîæïÛÝ{ÝÍ;_…¿v¿nÿúËo?mÞyôíçm÷=|Ýý¢}Fgô7žðü‹ç-™3b$ðH<
+ONY¸Œd
+[…[ùÔɲ<×@F§uàdžå@:6Xù‚,CZÍ(É™åÆå ²€dNB¹•, ‘Q,ÜÊN+,@X)AXÁMÄÐECZm#føœ,ò…ŸGÂæ†ÇÏÈ·O×0«
+JlFúXSRØ=‹j’*N)ÿ §4C\Ìb÷T"ª¯hÚÐ)Å–å¤ò%û’¦­\’(¶b:&Ñô’) ÐׂXŸÑ1“@W@oå9õ˜
+R#(š¥”&$Sã«Üã•<q¸ÆW9ÜF –GIªÃÍ›C
+†:T9–)Âÿ*F2Ö¡Ê1\YÐŒÑ+B•cÞ´`ôš¡Ê1“’âôŠ—UŽ™&™8sû[ëkQ“l|8'ú ûû*ÛÙ[ïM) UNPkf?:èPr IÞr@c¶AEÓ!_å€Þ‹š4Ž~pÈW9AÄcFEs¾çŠ«râlÄÉ}LãmªÜiÔ ðEy¨r/>‹K4÷i¨r¿Sý±Ÿ†*÷òQ3T¹É:
+UN.!ªÜ2º*«ÜzªÜÑzªÜÖš„*··¼£¯r8shŒ¢È!˜
+Õò9+IKo9¬X;ZE˜MÆÞ;óÈÉbålRä'‰j6™´ÊçæȤ¯g“kf“¼¸92Ér6YÁ7'9f“U<¸1ÉyËÝ”f“Ul×d…ÙdÛ5YþÖÞPk×dù[{S­\Ÿ;ÅúÜù?òæ—»›ßýd'=*
+endstream
+endobj
+155 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 1370
+>>
+stream
+xÚm–ÏkÜFÇŸ¢5&XŸ!Ú[Nqvq~Ø`<¶´>·§^mñ©àÖ-8`vDýä胱þ”¨§ø`¬?¡:ëXá=T¢b^¿oF’W»•ŒWûYiÞWo¾óÞLÆãñúx<²ÿž¿^½5z>ÙXßØMÆãõ7¯F[[oÖǯG?NF¿€MÆë/_Žp=x臟WÞø~4y5YyñµûØýfôÛ¯¿ÿ´òâí·Ÿä»ûºûÅè#ä¿pþóœÿró‘'83œÎWl4à<¾åp€o¸à+<\ñ¹qóN¨Ãf:ˆ/¸1K²j³$kf–dfIVf–d%¦ÒÊR¦ tK­,mº@×tèd±é]Ð3' ùjRèd!_¨T<¦ˆÏ"76~™ q C\YYqØ”™w¾ qneQP5)‰Ö+‹‚P’Œ<Y†ü¢"5‹IF6" (*€0²¤P% é #‘Ì F6öýéžfŸŒ\óŸÜÐ}6_zœ RHº&›Ox ·=e
+#Ñ}®?Õœû戴ÉŠŠ4àÙ§—Þ )ÊÊ=.N
+.£Zª(Lšˆ³“Œ¯õ,'U1j“„/tt ´ªÔ‰âSÝ
+gôÞ¢§Ár\ÐFIaIOrñ06üJÏ,zlÌŒ• ßÜր0’B%©ü¹*'w1…@¹çªœE#‹RÏU¹8(éÞ;
+cŠbßU9A”[„Åd«\ì—äYôT“T¹ØÏÉCD¢'XX¶ÊÅøîÐcYL²DcïC‹ÖÈwUŽhD”ÒŸïªÑ»­Ù*—öèÜm«œEöd«\*cÙã3 [åÈU¹”îŽÀU¹rUn€\• WåÈU¹|…®Ê «róhÕU¹ù±¹*Ï¡‡®ÊçК³Ü\køLD8ËU¸TÌ,Ÿ¡³\%?Ê8‘³\#ÉÑÈÝÖr(˜ q!#¶v–cÜ Øÿì,Ç)¼/c:Ëa»w
+± ÛÆ:VN§W]c=ºKD×X«E]cm¬|÷mcmœ|ˆ×]cmåËG×X­|ñ}c5V¸ß5V,L‘ϲ@»ÆêÛ) 9î+Ô5ÖÆwbUÜ7ÖÊwóÄ}c½í_¨o¬×=zß5ÖËþ…»Æz&ygÉÿ~ÛXyÓcwà'g9s¶(ÚÆÚ ûÚBwhk]jë¤&jë,×ÎO~¶µH[YÇAÛXç–GÐ6Öäά¡k¬¬î&M¹Æ*¥¯;ÚÆŠó~²k9» °äžÝ²t{ë/·e1‹[&k¹la'e·L³»½É¾]Ü2eíÞd€¯·LªÝ› ðβ¬é’,·7b³$ËíM†Ø,ɲ«vA­Y’eWí¢Úlyß™,ï;ÿg‡¼òåîÊwÿdp$A
+endstream
+endobj
+156 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 303
+>>
+stream
+xÚíÓ1NÃ0`wBòÒ#äÀ± u’K$2 ÁÄ€‘+aëØ#p¶\Ô ´bI¤è=·ˆ •ñ¤D_¢?¶¢üQRJ!%|œT&…Î@ÉTÈ2¥E’A–h±§áRÁ èd"R6én.’|ã‘‹k>-x|ù„ÇÇönÎãâînï¯x<==
+endstream
+endobj
+157 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 281
+>>
+stream
+xÚíÓ1nƒ0€aG H^8BÞ Œ% S¤´•ÊP©z€¶c‡VÉ ¹YŽ’#0¾ÙµÁv¬VYªz@Ÿ%ƒøœsÆ9ÌÑ(&!™ª¡á-«[hª–)¯> ®*&%Øå D͸ø¶ååî;Z>C+iy‚+Zvpø<¾ÑrÿxÂΗiw H2ƒ„M®ã8Öwnü°.‚œ¢O¨ãš ͶæhÎÁ[4—àšx€A3yn¬wæ<ôîŽcá|^¼u÷?¼ìý÷_ò/ßú’Ø·±››ñ¹%-¹~tH2éÍ5†I{cÒdlµO¶Ýž|æ“í9óÖêèõ&¬±&×au'ç’äy®žßÓ¯!«z×ѧ/çò;7
+endstream
+endobj
+158 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 877
+>>
+stream
+xÚÍ–½nÔ@ÇOº"Ò5yÎU.¶.¤‰¥
+\—
+tî”;èÌ*§§Zåàƒ@ «\[ ä”kºÈ(WuU®ìTo•+:¨‰Ï&U|6)ã³IŸMT|6É£³‰U®ìðŽ{G¦&L­Ä•ES+1DeÑÔJ QYô¢ƒ‹øÜ©âsç?NȣdzÑó¿ïò“L
+endstream
+endobj
+159 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 887
+>>
+stream
+xÚÅ–=oÓ@Çݦª¥,˜ñÖ©©­ô-ªQ‰ H0ñ€ HLM _€‘‰|”zì„?™ÈˆÕ $ÂzŽÇwÏË9ÇN,·ÍOñÝsO~÷ïeišÒ4±?öÇ£d?†§I–¦ÃÁÉQ2 Òãäe–¼E–¥ƒÃÃ?/·zñº{>î<O²£¬{ðØý?IÞ¿ûðª{pþôAÒ¼woÇ“+se~àõ ¯ßxý1õ•ÉÍ ¯¯^K³20AèãS#láŸf°…¿ãÃë6þfGô±9“‰ÃEkþ×”µ† ¬%e- («„ ¬eå”5 ,AYدͲ°_›ea¿6ËÂ~m–…ýÚ, û”u”…ý‰Š¨_Q¼¨¢?Û´0G„8.ág¡™âx†‡€f¢"º‹8ÎáÈÐLTDwðÞ Â‘¡™¨ˆnã½cáÈÐÌ_D·ðÞB´‹#CSŽƒwÑNSm³þ"â׎ Íú§‚:¬œ€”»ï!R®ð)ç#RÎC¬œ‡X9±rEnÜk³rÅ„P³rsA=V®’û¬ÜJ†ÏY¹AªœôF•+¼²H¹9¡ž*Çã÷U¹ºck˜N<åùÊ]Zté+GÈWÎ}G_9Bªœ) Y=Á¹MÈê ÎmBvÁàÜ&d ÎmBvÁàÜvhÛîpÊ“;vÁàv”ìªY¹’Dz ·å¦"œ¤;¸Ð”cTjÊñƒ3M9F¹¦!»`J9i¡¦œ´PSNZ¨)'-Ô”“jÊI 5夅šrÜB/帅^ÊMeƒJÊi¿$å¦Ò/I9í—(I¿D9í—('ýúŸÊ‘÷¾r}ö•ã=¤ÊѶúä)WÓ~ô”ã-:Qå*ÎUŽ÷v_•ãè©r™±*Çѱ-ÊŒ(W÷(™æ¢ÜªO¨š°r• œ•«äÁ\RN#•«Â”StÆÊ)ºÇÊÍX9 ä!+÷EÐ)gRA=RÞê“rµW=)·Št¤\¥kµÊÍ#ykµÊ]ë¿&¬Õ*÷ÕCC«œ9õОU>z¨g•«Wê[åÖ>rÊ-[È*·h!«\¹q’
+Î&Ëðl²Ï&ex6™…g“<8›X囼‹ ,Þµ>† ,Þµ>† ,Þµ>† ,Þµ-\†çÎYxîüÇ ¹ûhÜ}öµBƒ¾
+endstream
+endobj
+160 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 588
+>>
+stream
+xÚ½”½nÔ@Ç÷t…%7WÐ\ç}Ÿ‡‹¯Á"€ÄHPñ
+$)HHR(¤ QÐQ*ÚêÍ—ZÚBS«I¹P´Ó„ÕDÑ–è‚hC´!º ÚED5Q!c%ý)·‚‚PTÝü/ò¼ã@»ÛÈÏÈÏÖ? ÿ”j4ÅÎíYï±gÓ±€c‘©‘8 ˜˜úõLni¦¦î_ÕÒØ[$w·ÑƼÀ,kƒ?’ÓY¨{zg‰5Œ†ú ajz°'eª†ª´îš™Dt¶ÚÕí]´½ÛëX.í 3ú§”?;q2–À’ŠÓ™püå}eçÐf¦¥ Ô`Jd…SSÌdE;ºLäS•€ß  õu®„s Ä;ð£z3œ´ÎMÔç:À®h´é\Š
+endstream
+endobj
+161 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 484
+>>
+stream
+xÚÅ“½nœ@ÇSQ˜2ݱOÀÁÝ9Gš 9‰”+"Ù• v™"‘ÝYbÞÌøMxŠhÉì̲À‰Ø–e)[ìð[à¿ó™¥iš¤©â-Ûí“ÍFet´ÍU¾û˜ä;2Û$;S×™ú¥öé&ù°Uô¹Úï6É>?úåÇÏðü®¯ˆÏÂõ7•eY¸>|W·¿ïnÂõùÅgeXððEõ¼Å ('¤¡˜Pñ?©…è è©æ¾Ìý<ŠaNøºø&Tƒ?!˜€ˆ¢H‚ˆ¢„w"¢H‚ˆ¢H®DEr%¢(’+E‘\‰(²—†bK-Sd©a
+,ÕL¾¥ŠÉ[$d‚E¡ÒÒ{ÚþXÒ|Uc\{†:«ÿÒ–Šgé8ÚQ^`–¥“‘*ÊsíòYÓÅË|à UiÍq=TL{Ô‘ÕPÛÞ£y¨J×x8é˜uŒòrÒL…#ãõHÆë‘̃ë:özèº. ¯G1yÝ9*Èkíú3¦ëî‡hÛS¢<Zôå(>jÞÉttRËåù›Ïík'¼âê-L±-»¹ͼÙUŽ<"W‰Ûw¼ÇØ°ýÄ{€µÈ±°bz9D›í¤â~H
+endstream
+endobj
+162 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 1060
+>>
+stream
+xÚm–M‹ÜF†eö00| H·œ<«aíõ,„8 xääs°CN8$‡À²²ñaŽ甀Yý”Ýd C X?Á³ XÇŒ¬CZDT¥º»º»f”iöC/ÓUo—•jšeÙ$ËRóëîñäø$½;=šÍÒi–MÜOONL²ãôé4}FÚ4›Ü»—Ò÷ýÿ;›ž|3~x6>|œNïOLJ쟳ÏÒï¿ûá«ñáÃÏ?Nõµ½<û$½Â+|KëoZÿÐúû+̱¤UѪiµ¨
+¥ü{wäwØ‘¸#¿¡ÍÝ®|i"JO}"'ÃÅN~-÷0°ÕÁÀV [5 lU0°UÂÀV[ l! lQ½ömQ½ömQ½ömQ½ömQ½\þˆmQ½8lëÂåW[[T/Îß`bmuàò·XZ[-¸ü\X[5¸ü5VÖVÎVo¬­œ­ÿb<À•¥Æ?9¸²Ô¸t'seÙàœC€+ËÂ#÷
+á‘›ýÁ¶rçÛÈÝv!<r0s!<rê<ç9ª‡ðÈQq\w·æ¸ä¹á;ÏQq‡±aŽ+k1±!rK’æýrº2›n¹„¤¦•È½ÎIR_KäfHWKäži‰ê*Ûi!‘[i%‘[i#‘KŒÔHär#u¹K+)Üia¤^ wÎRëÑH S^òÈu¸Ž¢(¦Kœ—r݈I@®e© Èy) 祀œ—r^’ÈYé2 ·aéu@nÉÒ¯¹W,Ý È°ôa@îG–“+NëE½¹ž -–r´C”D.1R#‘[à6Jè\¹Píq%‘{²Žq/$rÛ[Š¶
+äz[Hä´1g‹‘cI"ש]NŸu ]Ž%ÙåX’]N)ßírús*»?Êñ#Ù匢[t£D—»ÙŽð:¹#»Üò9E?˜Ë.÷sLÑ× Ñå03JD—ƒ/‰Xt9ýÔ¢}jrÝÖ¸OD—k{}#U!º\#’~“]®ÂkÚ7’]®Ä_È},ºœNDg”]N'¢JÈ.§)8-D—Ó‰ü
+endstream
+endobj
+163 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 989
+>>
+stream
+xÚm–AkÔ@Ç_ØÂâ\¡'ALn=u›eÛj¡4PìAÔ“@¥'¡Š‚BÙD?Eb>JsìÉýæäz3¸Œ3¾Ì¼™yÙ±íæOòæ?oùçMã8žÄq¤>¶÷'ûÑöt6™Ý¦q<›ÜÙ‹îLâýèÅ4zÚ4žìîFx½ýÞ»éù«ÑñÉhçY4Ý›Žvê'¢·oÞ½í?¹uçúôä~t)/å7<~âñ?²½”‰ÌñXà±Äc%k)R¹üK¶(öäï²A±'Å››¾üEUä²<² YÌ{ëwr+<[ðl­„gk)<[ áÙÊ…g+ž­Tx¶¤ðla¿Öma¿Öma¿Öma¿Öma¿Öma¿Ìú­¹Y_
+8r$1ä„–€!'`GJùr-b#‘§Ô!g%‡œ•rµ)ï³’CÎJ9+9ä¬ä«H:rÈ•$:ä®H:pÈ]4sÈ’tê;'é±C®%)tȹZäŒÄ‘ýÇ‘ÃÓ ü98r eŽ\†•k”rQ€Æn3äΆ(=äÚ>|Y91ÀÌÉÒ^Ê  ŸrÑ —rB›çÈ‘Ä‘#©—rZ꥜’Ržr­Úöœ§\­¶}ÎS®RÛþÀS®TÛžñ”»ã¶Ë-žr n»³”“wSÜv²”gø$C²”k«[(…,årÏRnEýb)·ÄÝàãÈSNs¸ÅS.ïâ$à)Ç^9µ<åZÕÄ9O¹F= ‡’¥\·P ×$K¹n¡ÌØÒÈ©÷t‰l‘Ë Õ.ç4r26’ztÈ «`=\ë$ äjurC}&¹R¼WŸ×5r…Zl¥¤ œú>\D¢0l¥‹–Hš­„Þ‰BÙJè%|7vȵØ!
+¹euêfƒP!·¨ÝlR'
+¹ü/›MÒ•?›,ýÙdáÏ&¹?›$Þl¢[®x󵑩a³‰“…gËÍ&Nž-7›8Yx¶ÜlÂä…?wæþÜùŸ yôàdôôláD7
+endstream
+endobj
+164 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 610
+>>
+stream
+xÚ½Õ1oÓ@ðH*yñ@œ%¶Ä‘R)â¤*ÁÄ(Œ ~2ÞÊ„¿J¤óH•Ák,/ŽtòãîÞ»óy`%jêüêØ~ÿw~n‘çù<Ï3÷«(žÎ/–~ó|y9¿|â7Šìsvñl9/–™ùºÿ8=äæSrµNï­“ÅÚ¬¯³¯_¾}LWo_f…1qý*C÷ÚÑÁ¼â&â¹û |„Ããˆ9ꛈ+Ùwñ©DÛF¬6‡SÌûºÙ+S ]Æ”CÌ#2âbÄß)âÙÈ_f×LÞš·> ta·eßìžt؆É×¼gr}Iä4îK†>º ˜bÍ<³%
+fOälî‚’»†å± W²Ü3q‹a‘-o™õ”"· ;âùX–áÏt,ËÒW©”ôÑV ¨¿ósK ”¢e?RžFV†íHe؅ΘHÀ}=Q$ÀfdcX‡®:*Îsv¿æoÀ]¯éà6+:ðí'˜´öZR-@ zI•%¸÷¤5±*9uJhèLžîúGôt³yǔĔï ŠŠð¬Ü¡L•péˆ<Líí7x¾HmÎUÁ*µ»˜ÊÒddî`%lËu ´=æ5t=fÖ@—åyhlU ¯‰¥Â?uÆ$R;^Ë…
+Ór0½’t¸[$8R„áé@?(ežpfÃU{[¯Ô}al ÛOàž þdhšFØÇfÖSª)ÃCx(¸u&–ê)}ÌÓ”í”Ý”‡)›q'ÀaÿøßÜÎÂËr?2y½NÞýÇãX
+endstream
+endobj
+165 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 531
+>>
+stream
+xÚÔÏjÔ@ð ‚7èä v“mµ=Ȫ‚{ì© =(
+Ê&¾@ûú({«¯0¶ ×”^F3æ÷g63
+«Ø™ýÍÌw~™Ùª,ËYYØT‹r¶wÇwwwg‹]ß=«Š—ÅþÞb¶PŒ?÷_ãGž¾ÈWÙü¸¨ª*›?¢nõ¸xýêÍól~øä~&®¯ÔÙñS;§&åÎJÍ'%n$“Një>T®e Ù…JÚPB$[$¶IFu¤4S‹Mj˜¡U¡p£,ÊIÒ
+¥Q*5ªC‰±t –TB„ú*íAV(Æ4¨šn5jMZ“T…Rg ÄrRÏSœƒ¤f]¡8¨¼¥&¹Ýf‰Ÿ£a"Äj¬3-cÕ–K†Ac)ËÄج/àJϬ/'è«ubÒy(ùÃÚH3ÁæŠ%Q7–bæ,~³Ø^³–¦=@…!I/Œ™“Þ’jÒ‰ÅÐ.”dÝ[¿ëà1/xCÊQö%ªÙ(Õ0ig9* ÔÁ´.µL[Øü^·Ä¤|§ÅéÌ$5© õ¾ÃÕ³t ô´‡`üÚÒSƒêXO)ëÂ}þ@‚Lâü¾—n~ B~qÃ&&þ…&Áe"ñ’ßQ:Ä{&¹D‰P6Ò°E&R¿Eú_Ô1“ø_éHâoš]öp•ýøŶ
+endstream
+endobj
+166 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 1114
+>>
+stream
+xÚm–¿kGÇ)WøÚÁ»àB•O{È–} ´à$AI•:ÄAUŠ˜¤má¸ÚÖEðü)’d]ˆÌŸ`Éš2·Ú»x™—7ï½™½ÕøôãÃíÍwÞ|öÝ›gY6˲”~<Üí.Ò‡óÙÎÓtže;³'ÓÅâÉ,ÛMŸÏÓߑͳ٣G)¾?ü=ºé—ß&Ï&Û?¥óÇóÉöwüëàûôþ:Ù~öÃשûŸÿ=ø&=…Sx×x}Äëô§ƒÂKãeðj [ \Ç·Ð#áèŽð¿xs7Æoé×1쇅<¶'£õîm«³Q¬ÆF±ŒbiÅR6Š•Û(Va£X`£XX¯»±°^²ÐŽ…õr ýSØŸ},¬—[è ús ëåzÝk ëåºÌ›/C¬ZHOoö|,¬—[¨ª.$Vgi¡W×oì¡Äj,-´ÕÎm"±Œ¥…ŽìƒK[ZÈÀ&$KYZÈÀ”ÄÊ-íßô9”«°´³Я,íß¼8“X®„ø™7SDS©,+wU
+ä‹ÕÀ•” ùbÕp|±*|Á]B,\‘»œ ±ðdå\ ˆ»>ÌI@ÜåЖܣ}îrhKáÑw9 —-¸Ëae=ÁÇã–c= h‹ºÆú+ )u¹ÞBè¶Ôå0V¢.‡Þ ˆºö˜5D]N»ï³€:™MÖP#³É22›¬!-³ÉR2›¬¡\f“Õ†Ý/d6ÐWÍ&]<›4ñlb†ÙdÀ7wG&%³É¿½32‘ræî€wÅ’Ùd„mKf“¶Q,™MFØF±d6cÏ*ž;?3!O¾=˜üø?Ž1Õ°
+endstream
+endobj
+167 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 1090
+>>
+stream
+xÚm–ÁnÛF†WÕA€.|Âä D¦àĉ¤-‚´§^ ´AN’&Ae@•Sɱ§ðQL#@’Ca>BبŽ•ÂCD„ØíìÌì’ôlùƒÈù9ü8žiÇ“8ŽðÇÃÉáQtcz09¸Mãø`rûVttt{F¿N£gÀ¦ñäæ;ï>÷NúåÉøÞñxÿçhzk:Þ¿O¿ŽD/~{ùh¼ïÇï"ó7ýyü}t¦Ïôßpü Ç8¾êæLKÁQÀ±†£Ò;­R€]üY7
+ m„’cI……q¬Ta!ƒÂÊvïÇ2-„k$rgI9D#î,)‡HpgI9ƒ ?u–”+MˆÍ7ÔpR‘ôH¹Q™6­r+@Þ…u«”*¨œr
+ÑP×N¹‘HÏ §ÜŽPXfN9
+/F;é”+ é”c$Tè”ˇÓÀ)·
+ÿpʉ G|pÊÝ WTòÒ)—3nr¹¤Šƒ­S.O8ÅÎ)—/5©U.Ÿ3Z¦V¹ÜÆO¤Uî|Å(”V9KDZå
+2«\‹^[å,£Â*×¢÷¬œrhxÅÊuÐ'V®qh`•Ûu)×"±eå6-ªY¹²E;V®ƒ¬\ÞA¬Ýbd~ÌNI9B'ØÃç¤EÂӓǤÝ ~w/ å¨Ux­½•£ðÉ 5•£ð‹’‘Q?jü„¨ÜGìgE(CåÞàkF¨\ŒNˆF¯Q¹§wàR:c„Ê• ó²Èœž*gP RF¨\ ñAxDèœA ¡÷¨\ w”VÔ"ólA¹îÚ½²ÏZXÂ)ü2‹Á%*·ÁXÜÈKTnƒ±2ÊÁÕ‡pÿÖ
+endstream
+endobj
+168 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 421
+>>
+stream
+xÚ½’ÁJÃ@@õTÈ¥Ÿý‚d“6m=ª‚9zòÔ£EÏ›Ç~BEé¡Ç~Cé!×–^R;îìì–¡"‚˲¼$³3o†dZëDkåŽ<&E®²¾NŠžÎ’¢¯Fý^’ê!SϪèç‰î)®†:O½£+÷OѸŠÒ;5Ê¢ôJeºˆÒêZ½¾¼=Féøæ\Ù×?V
+íjºt§ìl&MiJíc âÔãqéq‹¸ð¸C¬=®ÝvX»¿F‘AäÕ„ƒ0¾¢ ÓmnºMÇã§Û§. ¡±×ÛÒaKóˆÒG
+§à$€é
+¶´žpMÀ)ì.ap»€5¬®¡¸ƒEÀ-,î%N60 ØþŒñOÊ€æŸQ838 KbtYE·_m>¨
+endstream
+endobj
+169 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 309
+>>
+stream
+xÚÅMNÃ0…"ä½Ì ÛI“tR‰,`Å€% l!GëQr„.»¨ükhäVH á…õYž÷æÍh¥”T
+ýeŠRº¬¥1XWF6SlŠJ–>h|Æ©idU¢-Ǫ™ISŽ$÷ObÞŠüë™È¯P«Bäí5¾¾¼=Š|~sŽÚ¾Ã³½ÀO{ú‰½ÈQ— D
+endstream
+endobj
+170 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 897
+>>
+stream
+xÚm–»nÔ@†“*Ò6û¶D‘*[› ib)‰-Pñ
+ÕƒÉÁQ¸O'ÓûaEÓÉá~xtt8‰—qøXMööBø¼ùÛùÒ‹7£“Ùh÷yïÇ£ÝGú×ìqøáÝÇW£Ý“§§aÿ^¿=/ä…üÏoxþÀóWv2‘<<%<µl¤Hr|';€þ%[€^Á—[Ÿ«9–Çf#ÂbîìßãNx±ZáŪ…«^¬Bx±2áÅJ„+^,)¼XÐ×0ô5Œ} cA_ÃXÐ×0ôEûoR¬9íßl$:ô…û߈±ŽÕ
+Ú?—¹ŽU Ú)×:V)hÿ@V:V!hÿD6:V&0Ÿô ÞÑcu€R<Æê$|BŸL`,…ôÉhM…t³¤œBºYRN!ݬQvœëfI9ˆÞa³¤Ü¤ÇXF¹D¶¸„QšÀ 7ÊA_xáF9h—0Ê}“[¸)'6å.AÊ5"ÑKr•”2èå.-ZG¹% uí(
+­rºè”+שëH¹rB]š«œºZW¹q/€«Ü©:£œ’i ü+ ”»XcW¹E_—£Üªqë(÷U¥ßæÊŪ‰1Wî‹fÊ-Zså…*¦Ü]¢PÔû™*Ô}²Ê}WDŠ©Uî‹FrË*wÑÒ*÷Qa•ËåV¹%¢µU.CT[åD•U.AÔåÎ 5F¹ãQg”;3è )×!‘" 僌r-!™r ‘r•A)W”‘r ‘r ‘r ‘rkƒ–¤\iÐÊ*G¯kR΢+R.7è’”[”£rrÛ RÎܬ¾Û^¹®dH+×r¤•«BåJ†P¹‚•s+¬U…·ô
+´r"eH+726I¼ÙD)W'©álÒú³IíÏ&¥?›þl’ù³IâÍ&J9/ÖÜ‹eg‹…ËÎ& /–M,^,3›p\øsgæÏÿ™Gg£gÿ
+endstream
+endobj
+171 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 824
+>>
+stream
+xÚ­–¿nA‡×XÂ’©"EñuT±ïäÄIN
+ á *Z$ D
+ÿ$*Ç’*÷(¹@Ü#àÊWq>qÚc¼;;;{C‰VJâO¾Ýßýö‹4IÇ“8ŽÌ£ùd~%³Éì,Jâx69=‰ÎÏO'ñ<z“Dï%ñäø8‚ïÓßÁC¯ß /ÃéË(9I†Ó§ö×âYôéÃç·ÃéÅóGÑî³ý¸xݶ·íX?aý†õ§mnÛ´Í`°JXU»mõ@Žµ À
+½r¶è@9DræÒBåÌÕ†ÊÙðr¯Lø@¹-ÞìÿP΄”»1éå\…L¹K¬)—c÷L¹•A}®œ!øk•ÛX¤˜rß}ôÊ}EôÀ+#yå.½rkú)—#xåyåVˆú^9B^9$ªç•#DÊ-R¤œ&DÊ5„H9H9†œr[ÿ SŽ!§CN9†œr 9åîr:å<:pÊ­ í;årB{N¹kBTŽnÖÞí†ß¬½Ûr Ë…ÊÕYå*†P¹’!T®`• +¬d…¥œM
+9›dr6IÅlb”+»“Tw6©ålRÉÙ¤”³I!g“LÎ&©˜MŒr"ÖRÄò³‰ÇZÄò³‰ÇZÄò³‰ÇZÄò³ Ã…œ;39wþcB>Y _ürÂѱ
+endstream
+endobj
+172 0 obj
+<<
+/x5a 148 0 R
+/x6b 149 0 R
+/x4a 150 0 R
+/x6a 151 0 R
+/x51 152 0 R
+/x71 153 0 R
+/x4c 154 0 R
+/x6c 155 0 R
+/x52 156 0 R
+/x72 157 0 R
+/x53 158 0 R
+/x73 159 0 R
+/x42 160 0 R
+/x62 161 0 R
+/x41 162 0 R
+/x61 163 0 R
+/x4e 164 0 R
+/x6e 165 0 R
+/x4d 166 0 R
+/x6d 167 0 R
+/x50 168 0 R
+/x70 169 0 R
+/x4f 170 0 R
+/x6f 171 0 R
+>>
+endobj
+74 0 obj
+<<
+/Type/Font
+/Name/F19
+/Subtype/Type3
+/FirstChar 48
+/LastChar 115
+/Widths[1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 1000 0 0 0 0 0 0 0 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 0 0 0 0 0 0 1000 0 0 0 0 0 0 1000 1000 0 0 0 0
+0 0 0 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000]
+/FontBBox[-100 -200 1100 1100]
+/FontMatrix[0.001 0 0 0.001 0 0]
+/Encoding 58 0 R
+/CharProcs 172 0 R
+>>
+endobj
+173 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 458
+>>
+stream
+xÚ]Õ1nA‡ñ~O1Èz–ˆØ4) HPq
+_/Ãçð|I}24ÿâ«ðø2|ŸÁ§óÎ1ïLçòÍï|>‡ÏàÓã˜w†Úô5vïÖݧgîëK
+endstream
+endobj
+174 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 510
+>>
+stream
+xÚ­Ó½jÜ@
+endstream
+endobj
+175 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 584
+>>
+stream
+xÚ­ÓÏkÔ@ð# a·àe … ý²“né&§HýA÷ èÉëŠÕžuÄLiÁ‹{¨ô_ ălþ‘‚{ ìeBâ¼yÙ4Ö=xh3û!É|ßì¼xœs—s¦ÏÛvw¶—“xn¯'§Àíí²½bý¾ï“³¾¿ë;W^yúÂÚXÝÇ,è[Ý}øVwð€½yýö™ÕÝ{x‡yÒÄÁ]Vª+T£¸
+ %Üxl"à#@ørìíßrjbclÿ¨aíq c×Ðíΰ†fwn×€“u¡€9ðÍ° …û\bk‹0Á©÷Ç€pë€0Åi«‘››á:kßÓ¿±ˆU¥XG"òTÎ7¿`…g¢x¹„VX'”þ­H”XÏ †ÕÈ#™,\ÖS„2z$1 Ï3†C„©·§‹sj¹_ â'á+"?¦öOÏòüå‚eæHf†›1³ÛEu #T×JDå%Úe9¯¡z T‡g :QÈ4(ó
+‘L5K‘Z<ŠŽçˆvJH1G' •Ca¥!tÌI PåP9UŽ‚FÛŽôsœTÁij=£;Bm4ýwÛ¢‚ʉ鷦L…œàÐ(ªWòê}šsõ×IX÷Ö£?]ÃÃ
+endstream
+endobj
+176 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 861
+>>
+stream
+xÚ]•ËjA†{ ÌÂy±û2é6hiðf!Ñ•àm%¨QPSÙ¹t-HúQT²pÒàˆ’ÞŽÓ » ¬ã¹Ô餺sꯞª¿¾®SuŠ<ϧyžñÏêæ4_ÏV‹›ÓüfVäE1ÝØĘ¯O7ndOŠìunM7‹ ôíhÔãã[»ãµGYq}c¼vOÂîýìÍë·OÇk·ÜÎ
+Ô"wïdå?ø ?À„àÀB•7!tÐB ¥Ó°ŒÞZ8‹Þ¶p½mà(z[ÃNô¶ò3øØÞúؾõ±}ãcûÚ«ï,üéKð=?uoö^¦Xªï¾Lq¦¾ÏÅàT}÷ÄàHº'‰ìH÷I’°ŸÅ|Îëâ «|áÐ*ßÒph”ïÌp¨•ïÔp¨|eÌGûu‘öK ºu¶ïùæ+lßó}ÿÎöÊ×T-Û+_]Z±W¾Ò²½òíÇöÊ73Ží•Ï}@Ûó¡NÉžùæi‹ºt‹áK.5¨=1ŸKç5éåd1#¾\Jznü6ñµ
+endstream
+endobj
+177 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 942
+>>
+stream
+xÚ]•=oÛV†ËÀLÁÚÅŒŠYºE&+4–à Rˆ‡"íÔUhZg*Öí •%Y2dl€@üBÃC:âO‡À\q°¼=¼²/ïÀ×_ï}î=‡'ð}àûnŽþлÜø·¼À‚Áþ£?ìëýx¿ÓÅñ`xøÂæÜxëáo»Ç½Ÿ¼à›ýÎÞ} Çß{þñׯ½»?|ç¨Eyáê“ú ¢&Tj­r×QJU¨T…•+ãîZ]w µ0îæjnÜMÕ¡q7®§•iP›öëÚ´/jÓ>¯Mû´Ö¾Óæ¡·ïSy¨lø¦Oä+í{*Ÿ¸Ð¾Ä`¡}ˆÁ\.ƒC¹ü€ ê©ÉWÕzr‡µæ+#…æ[ErÍwqH5ß"â·øB“öë*í—”C¶ßðeÛoøÞ½c{Í—ÇÛk¾t4{Íç÷Ø^óNºl¯ù¦“.Ûk¾*Ùz@öšuŸì™/ë¨ÃjéØ9êh=³˜¯êg)é•»œ_¹Üí“Îu@|Eb»¤ÏfÎkâËÎKÔÏÁ:'¾@°D½À|o
+endstream
+endobj
+178 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 633
+>>
+stream
+xÚ•Ô¿kÛ@ð  Zü”è¶l¶ä$ĆAÚB=·S×B[2uè¯!`"CÖÒt-”ê_qé²ôþ„^‰é­NµHpèõ{?$œÊPz`>²ôÞãtOqEý(âöp0ìxû{C>Þû{#>Ž÷žÇüíûØãn>Šv[O<{O‚ÁGÁà¦(Lò·¯ß½ÇîòvœÜãd‡¼5Í“u…ᚪT4úiµòš§š-§íÄè"´ªÒÌ(¤I J•ªÍBöuͧsf."ʹ”=£¥QÅäå%²]„zö4ËQ™Ñ")‰CxhiâA¸ò;¥ï)]îú‡TbôÙQj¹˜kBv•Q–Ð!!»ì5BeÅš:²š’P5£jú·Ni!i‡,Óšt&i·QÙÒ˜T•šò–)§k;¥µô%Vø%e3…En+¨Qá•%m ¯³ÔÉä̼”׌ ѨJ¡\Ð'Ê“êtƒJ¯7µ®ðž¼´×I£›FXßëeµ5RÕôÇõ‡M5v‚¢Þ¹ Yq:ms–.Ø…×ÇY‡Šî×Äj±ewÿŠÍŒXÏõ»ýrMƒñZÖÀ™¤›F7PÞ¨ü/•¦ÓÃ1wZ1ƶœ°3šuQ±D‹-z¶0ô'öûvÇÆ(z¡‘ïn3KÓÄn¬låMº¶J¯¼ÖÊ%w*PKÇKV¦b¡ïÛ¢‹§tÇkî¾;N]+3¥.Ã¥â†Ú V-·´^K¾`vœZ­˜­ÅÉz%¬¾ù(Ej$¼*«ëú?Å×ùÕUæW·ë¿ƒ[vƒøɻõ÷³즑ÁýIðøaæë
+endstream
+endobj
+179 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 544
+>>
+stream
+xÚ¥ÔÏŠÔ0
+…6¾AóvgÆíœ*«‚sXГ oɲ_+‹_£ƒ¯/=”ÆïOG§"bšþ¦í÷%i¿4u]Wu­éÐÖÕºÖÍy]m¶zw¾¦®¾¨Ö;ý¢Ñot»YWÍVÃÝú¢½Wí6¿>ñüUq¹/VÏtSo‹Õc½k‹ÕþJ¿{ûþe±º|ò@7`æþ¡Ôn¹³Ü s¤ItЧ0Š2¢ÉÒ$
+o>Ñ(º å² û±nÃ,ˆ¾ŽâÍOåÖA쀲f”Ö*êúNúŠyøF³ý¼QOºAA”YóH½78À,@vo’`dS—4u¤4-©L;@0)3‚Œ *i8ŒS†,øeI=+‡µö,™ä@×Á‘dp0\ê%ÿ&ã$¼M'aÍOÔEMQd£Ê¨å’0ªSN|JÈaAy”ŸÕŠ³YYT¿ éÄ]qGH‡ê“2”ˆ²,+¨EÍíä“ò–‚¯Š5`°€¡«£$BR%:¬:øSÁ³9܃”Å!J,3$á•£ú‰²u7$ÿšsç¬4Ô€'ÓEa©'AÏGªTÚ2溕tÁEå"URq³hégQòv®~nåbvÎ¥h%–çjŠ3
+”=|$åà ×…§›_³î“d\¥ô2cvj*îuÜx¯‹Õ¼GŽ<fPñh_<ý%‡ 
+endstream
+endobj
+180 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 1122
+>>
+stream
+xÚ]•Ak#7Ç'øêËœ ¥3°ŸÖ±kº‰!X°mas(nO½º­O…nÓ‚å’ƒÛ˺ԗ „è£lh C XaíÚX×±uبz}o4“ìXËÿÑè½÷Ó{£×nµZÍV+Î5[øqûI³õ$n·ÚíæáέNóðÓøy;~A»Í£vŒîÿWv}÷cýéIýà›¸ýÉaýà™ŸN¾Œùù×ïëO¿ú,n£öòäó˜ýïà-ðb²`@p¼˜2Ð ÙrÚVV ¬+«f•UW•U ½ÊªpC[uàªî«º×®X3ÿ’+V¯Cÿ’+öŽÿ)L¼ñ{£Ô›Èˆ/‹\´™ØÒãyd™ñ&Ö´)™ÔçdbF›„Ò¨C2qEî…R̸þßí‘{¦¥ÐVt?$÷L ¡ ja¹gš%‰F»(*¶åóP ã¸vÚ…­ eRj;WNe5-`Á„Ôf:¹ÙØän[&:ŠœPÖÌ÷á¢ÇÓpÍ¥{£¬ÎB裉—Æ0°Â^À¿üÔuß
+«§ð7?…ùr†ªÇð×ð ò9f¤Öh[PW0¶ÜH¥…t—=hXØ`lªŽã³¡{±…JÙ€è#g³Ü*¦¤–¡ ºÎ¸\¬¹’JFv„|0…n
+JJÁÌù`ê^âÉI!˜žJÌ߇ÖhH$LuæïÄ“5gL6æïN£WÀØÕXæN<üêÞs¬G=ëkåÒñÞÙ‚ò7‹ŒEÇí’ò'™±št×P=
+Ôn€ù‚ŽÉó'ÅÆõI7´¢ü)±t‘ÐL´¤ü)yƒ% 7@Д?9%½ M|‰ê
+>ˆ¼Þ|®8pSðÙR+Ï—•ñIÏ·-µð|ë2¾’/ òñqÁwøøîùŽÊóbžï§ûty>]æKx¾ìþü<Ÿ-âO‡_à—K>÷-œ ‚ς
+>|<
+‚šï‚>€‡–B|Õ~gvúÞéwj§ßÉ~'ªý.wÿ^¿«ºÏï—J¿3;ý®êžø* ÕɆ*v*T‡­qRÿúzÕj¯
+endstream
+endobj
+181 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 1094
+>>
+stream
+xÚ]•½käFÀŸN&:/Æ:Hs•GEàª[kÏ伆eç¸$á’*­á\œ\6,+‹+ãÒ…±þ”SgÆú2Æj…Ud“yyO£µ­U±ÒoçãÍo¾Þ(ŽãaGíÏËñ0ÞŠ^Ž^ã×Ñ(†ÛczÇ[Ãí¯£_FÑïüçÎp<Š¨Áýw¯Õûßow›?G£WÛƒÍïÝk÷‡èÏ?þúu°ùöÇo¢±ÃÝo#ùþ‹ÿ`Ò½ 6Xbf“Æ¥Y¼îz¥ ÞöJk¼î•–xÞ+-pÚ+ÍìÜôØ~øÆöÃ׶¾´]é¥t•lWš®w•>¹¶°âºÐßÏuqÇkiR¯¸‹[þ[‰†ø„»¸æFyXGÜÅ97ÊÃ2õíw1åðiPäÉ}
+?çðiåACœËáÓ@ª°&–Më—~‘hYæ¾MêÖÖ°J
+ò)mh߬âM’© Q…-´oÔ—x•ÈŠF!lVyÞdz9wÂ~ª¼Ú¾ÃÉ +,@hTPZawPá9„wÄ…•Foá%N!¼%άlô <µs¯1iD­CŒgÂs<D‹R {p„ ¦V‚§¨ú€°1·‡Þ„Y%µ0±ÆÒÌ…²µzg÷ØïÏÖ“J”J˜ ö»ÀÉ
+w‘Ëæ‚üð£y¨D–'õù¡oŒ¹yR~ÌhýÞ7Ä´~iRü-iý>×ÄѦI¶Nû±ù\šüUb¹Fû±V…ñŒòæóU^?•¯QÂŒ†F매ñj"™€×O%Ê<°ðÁ„¼~JVÀëû:äõ«$MQhµàõ«Ä%È<¨@4ù)q
+IÜ
+¦°Ã~Ì«ÌØb? |æ1¼`?æ
+ûõó]³”ïê¥|W.å»b)ßeý|·~ÞÏ~ý|×,å»z)ßõÓßRBÍ–*ö3ønwðÓÿ¿Æ e
+endstream
+endobj
+182 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 294
+>>
+stream
+xÚíÒ=N„@ð±2™foÀ¾ 3‚|4’¬šHa¢•PK ¶‹7ðîU¼WØÄ‚–Í6÷x°l´1ÁÒWßdà1™ÿ3Zk¥5tù*ˆÁh_y1D&V:€È÷”9†;xv'û:„^¤ÂàÛ'·r‘J÷ÂXºI7½„秗{é.®NÁØ5/Ó3¨Ä …ÈJá”bÖX­…³¥¼!Ì
+zÿ½>¡8lµD¬¾&©}9Õ “¦ßÄ%&¬
+iÎÚ å¬é“õ†´aÍ‘š¬E“¡=oW„ö¼m´êÖÿš®ñNwB¾{+Žm
+5'“ õ¡¯
+V¾ŸåŠµEê3¯‘ÛÙ†Ø ³±ÜÓnJþF¯âg%ÃœVS4öÿ!ÏSyý¶vÎ
+endstream
+endobj
+183 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 268
+>>
+stream
+xÚí’=NÃ@…×Jai!s‚õÎb§²” HPq€@™’;‚(¸Vr“!å–—ý k"%S¬¾Ñìæ J)…”àœ*Q*@TâLA…(dUq.PÁÂL°‚ù¥2%ËŸ5<¿…²äù%L%Ï›+xz|¾çùìzhrŸ6°guǽcíiâ4k›v_{Úµt êBuK}ŒH¯=e¤7žÆdæqQ“&Ošt—ZibHg–Þ¿’«¦–œàŸ~Hqßl·wÕ‘uÁ)¬ Ñ™`ÿËзèeô7xžRŸù;x\Ä€Bõ•º H~C±Ëggv¸N3Ž§5û›à‹†ß|
+endstream
+endobj
+184 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 672
+>>
+stream
+xÚí•1oÔ0€Ý )KÿÉh.áDïªF* q*Lü€ub€ƒ¡ÒéÂÆØ¡RÕü˜ªËO U½^ëX2~8ïÙNm11“á|_lëåË{Î+‹¢È‹"ß­i^Œ³­r;/¶³²(Ë|25c1Î'³Ã2{Ûß|”OËÌlðÿƒ]o’½Y2z••&Éè ³çÙûw^'£½³Ò0áìIVý†_ðj;(À¡Ñµ:ÐB¥ÜpÌJ¸f¬‚YçÁl »Ál£—*  ÃðR‡á…Ãs†ouøè"¿ÛÈï:ò[E~ç‘ß®¹Ý±Íc‹5K[½4·×lóŒ±ãK–6J›Mfóè¹ÙSÉÞϼ¥è#órjÑû ¸P ÷9œ³JÀwÃ)‡ÏÆÇÄðÍpÅáÔD5q|e Ù=øù]2
+endstream
+endobj
+185 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 682
+>>
+stream
+xÚ핱nÔ@@çââ¤ÒTH(çŽ*w6ÉEBg)€ÄHPñ@I‰ÅA)øªó§ ¡:©âÖŠ lÉì°;³³Î®Äàâöž×ÞñóÌzÒ$IæIÓÏÞržìÇ{éÁ<9ˆÓ$Mç‡K=&ûóÃ{ñË4~cNÍ—i¬opÿ½»^¼ž¯'‹çqz÷p²xÌÃúIüîíûW“ÅñÓqª™qý0Îþàoü…¹zì°ÂBåvh±Á³^†+o¶ÃKo¶Á­7[áÆ›-qåÍê¤÷(?|§üðòÃWÊ_ª"ðÕÐ~Wßeà· ü6ß*¢O·0Û
+gù}qÜßÒqE~—ä×:.ØoŠt\dû͘ëUN~½ðG$?%×wì§ìr£†ýúsæqÅ~˜–ì×XÁYÁ~UÏœgìWªÈ,ÊõhþÁõh|&æz4Î ŸQ=RâNÍrÕ#¥•™ê‘ÒÊLõH¹g¦z¤Üïäâ—ŠPü˜#?añ?¤å¢Áyðãë?æÿ~ÿòãü~Tß?âóÁêë“ó³ìü¤ÅÏn˜Lülý­ïâgë$~üzé’ߘ÷Ï7ëçö“õslý”½þÜúÉ~ƒ`ÿø Wò}±‡õ»¶~—î{À~[‰gý6îùØ„#ö¹>b¿SY/b¿ÙÏñû9ös<b¿á~ö»Æäwý‹oüü~×ý® ú]ô»2èw…ßï0óûÞøùý® ú]ô»*h8eÐ¡¢ô“Gëɳ¿…U©
+endstream
+endobj
+186 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 486
+>>
+stream
+xÚµ“ÏŠÔ@Æ[ÈÁy
+‡XÁùÏQÊÂGèZm¬ …ahÉTWþkËwXV~@íñ‚‡‘€Ó†´Qø
+endstream
+endobj
+187 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 423
+>>
+stream
+xÚ­ÒANƒ@àײ aÃ Ì €±´”U“VY˜èʨKMÜñŒñ*ô& K¤øæ1L¨FÃíü3óx2Š¢ Š2Žƒy,d³T,çip,é&¹7RÜ‹DÆÁ"ôw‘Ä‹ I¿M¹¾sÖ™^‰eê„g"9av.žnp}±’ž»ÇìD´êÚòˆ<Bn¼ƒÕnÀÿ³Ç2‡ëîíç£ýùýÈ>‡kU`—`01à ä˜)!Çx„ãqrŒÇAÈ1)#´A9gïØ+vÃö\³ÝW*»°uɶ:óÜÿuŶ<¶g:×tpÆOÔÞѼJס¥w®O‹tïëVä÷õ¬žÁík^ ˜ ¾˜o1îÍ÷²»Ú±iÆ´‡Þ[ê«­ök nÙ›ú§÷ Úï´ÖF›
+¡Ê { L/íõÛ°?÷Æ‘~®9²3r‹‘©´|ùäB{B†þʱ1öQ ŽÔ`cÉ?«ÁBäi€]\7 »5Õ°à­«CL°´µ+ +_»±±Îµ[›ží:§™sùÀís
+endstream
+endobj
+188 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 824
+>>
+stream
+xÚu•ÏkAǧäÈÁýܽõÔt×b@É@U0QO^•*= þ„J7¡!OBéü)¶ ‚tÿ#î5éÜ…qŸófæídÜC^¾y3ûϼɼ$Žã~Gúcm»oDkÉf?ÞŒ’8Iú[Û*Æý­»ÑË$z‹?îô·“HMh¾{³ö_÷ö†½õgQrg«·þЄá£èû¯zë{OîE‰ÒFïGü/ü_Ú ¡‚DÚPBpIáÆËVpíe ¸ò²9œyÙ ^VÔÇÒ7¨}ûªöí‹Ú·Ïkß>«EËà›oP¶ønZ|×-¾+›-3èÌf§4°s'clçŠBYÛ7‹B‡Šøx¥CA|¼Ò!'>^é¯tÄÇKˆ/œkû”øÂ…¶âû~©í¾iWÛ7|•æ˾ÙXÛ·øD‹߀—ÚžøŽRy€öÄWhO|3€1Úß`"õLckC{ËwÅYaÎ#œ¦5pâÛ:…ÀœG|É{ÔÂœG4ÈQgUס΋†O .ò†£Ö1|F â;KQKN|£Sâ;ÔŽOÂ9cÝ:%>ÒÄWéñêX>ÒÄgõ€ø¬Þ%>«w\ý´Þ ¾…Ñ«Ä÷Ûè€ø~šõ†ÄwjôùŽ†¦~f\ý8¨g©~FXªß¸dŒç®~«£Tv2W¿7]€óÐÕ¯T«•ÜÕO˜íµõ3ÚÕ¯BîêgtS?atÃǵ4|êÍj½§Ž¯Àõ~u|³óTv¿8¾KµÞ‹Ç÷Im@ùØñE¸¾¥ó¹~cÇ7Ç|¸Ä‡ó—ø
+äûaN†¨SŽ|§sê%·Sä¼ Ëü³áëÐaøNèÆÿbøü~W´ú]ÞêwY«ß ¿ß÷û9¶®ßÉV¿«Zý®hõ»¼Õï²V¿­†
+þ#{†½§ÿ
+endstream
+endobj
+189 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 791
+>>
+stream
+xÚu•Ï‹ÓPǧf¡ÚK®^$¹yÚnbÑí²YV{êÉ?@Å“àOXaiò'Þ·Š/dó'A6ײ9˜B̘7ó&/y`™~ûúò}ŸÌt& ‚`>ÝvçÓ`æï†÷¦Á=? Âpº?oc0›îßõ_„þ[õåÁtúí†îó`×óד“Ådï™ÞÙŸì=â°xìx÷ñådïäÉ}?l5ËÅ?ú‹ð'Æ:Ô¸Å×M¬C…%fÕ®«[¼¬–x1X-ð|°šáÑ`uݬê¡A3´ß6Cû²ÚÍÐ>kÖ–ÁסAeñ]Y|—ß…Åw®W+t¤Ws—íWzo:¦P7zo:¦°¾Ä¡P
+_âP(„/q(d—8Ö—\£ ì},|Ç#²Gá˲ïøªÛdßñÕK²·ø2‹omñE_â½ð­
+ÀSö—¸5ídûŽÇÊ^ø'uJ®Gª*pR(¸•Á¡ÒK®GõS¥=®Ge°!½íør¥Ý²ãK•_¢4e„ùX¯;>Pzu|¤!¾Dˆ ð5Z Ÿhá«YÇÂWëç ŸÖ+áÓú¬ãcýIø*Öï…oÃú•ðýf½¾ Öß9ëÿòŬ;>L
+endstream
+endobj
+190 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 462
+>>
+stream
+xÚÒA‹Ó@
+endstream
+endobj
+191 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 884
+>>
+stream
+xÚ]•Ïj1Æ .”»éxgçÊÛ/Ú
+¥ÿ€]ˆºòª¸ªUP(w.ºtáJæQ\T(BiÁÖ–›íí͈9æœ/3vf3ó%™ùòKNΩʲ•e!·›k£r\ܬîŒÊ;EUVÕhu-=Ëñhõvñ¢*ÞpãÝÑZU¤Ú÷ÎW[¯÷6+Ï‹êÖê`囋woß¿¬Ü{z¿¨’†Ü|P¨¿ô‡~Q<YÒ±Î92¤Bó˜wz=M;½ŽŽ;½–ö;½†6:½:NB× ví}ìڻص·±ko¢î|ï,z|snþ£‚΃¦Üü»öÃ<蘛Ohþ$ÿbŸ›ÏչɿØæá‘Íön>;ü:…AˆÜ|p:žÁÞ ß—Å« Ø;áÇe{+|;qèao„Ï-”‡½>wJöJøÜ…%±¯…o6¤¸T³= ߬&
+Ël>GéúÄö೬gl>ÑAñœ„Ï°¦!Û Ÿ}hy¿xVJô™áýâ=©E{Íû•ìƒHù¡ðyh¶¾¬yÂçâP´6™/ÀÀhð- ­ßÁ†Ó|_fÐ3ßøÿ÷™oç´Ñàsy‚™Ï1¯e >YŽt‹ðµz|¦»à3ƒ¯Õ{àÓþ >Ñ<(ïŸjµða9y¾KZø°¼ü‘>YÎÀƒœð‰^ðÍ ŸÃÚ°>™þ>~½†Ÿ µÌ È|ÜsŽc>Þ¬Ó£fuä™ì}ƒf¾¤ãp]v|Â|ë5…É®èÝÄ7ÿ è"Dü˜ø¦IŸy™tÜI|ÇÛŠŒCŒÜH|ûÛ5i ½œø6¶¼&¾ÉNŠ,„¸ì_Z®X+hÍ|Š…f>õ7äEHÿ•øô>‡¼f¾eï]Ú*ÑÌ·åRD B óÍ®Z‘ÇÌ®Z#öçϨ¡?%>÷®×3DÜÄg¹N9"%>?xÊÙä—9Ð86Cãü™|`R€ fû ÈŸÙ>òç¼ÑÈ/tžO E~IóÄåpþèkÖsä—Ø”O˜ð¥}Âuü\ó=ò‹·­–üâþká³­Ÿi5øt«Á§Z-|Ín&-|N–p]Éù¥ÕÈ/—êóuëïÕ;׫w¶WïL¯Þén½cûËõ®ków¹Þù^½s½zg{õÎôêîTê^aðpsðìráó
+endstream
+endobj
+192 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 872
+>>
+stream
+xÚ]•MkÔ@ÇgXÄ|ƒ&7OÝ&Û–T÷ êÉ âI¨oÐ^6 <ZðR¡l>JÛƒl>‚[,›£Ël1ã<ϲe²‡d“—ÿü23Ͼïw|ßãÃz·ãozëÁVÇßò?:Û]uö7;Û·½÷†ïtº§Xý7žzþº½3ho<ó‚[Ûí‡8 yïß~xÙÞØyrÏ ÷½ðŸ¼¿d¤O¥,d*ã*Ò§\f2‘aYŸ–ÆÕBΫ™œWS96®&²o\«aiTf|Q™ñYeƧ•ŸTq#àØ È~ˆߜšÿFű¾iJÍ ™¹ú¦15/äÜÕ¯èSó"œ::~HÍ3÷èÊŠšOíîUìw(v[ˆÏد+fâSöÛÂB|Â~91Ä째…øýˆ±ŸbÁ4^ª™XD?ºâP¼öSï/-Š×~”7¡xø͈óâÙo¢^VnJãE¹#A7Ø õŠâDø-¦ñ¢^1;ga¿’ÙÊ£Lû1‹2Já—·fÄÃ0ߢ@áº1üf6³ó9„ß©Mö4‚ß¡ÃlKøu]~ëLûí­!0Ó~y\h¿Üïk¿Pô´_Í}íWóÚ>üfšÝwð«Ù¹ ¿IÍüj¶µßhÅðÓ(¬~—Ì~UÍ­?ìW®8…ý¿ÂÌ~<®Ñá‚ý¸û×é°d?în— öãî-ñAȺךƒÉßL~¬>ÖPùÑýQ_@å÷q¤fï™ýÔhZ%?Õc?ÅNÁ3nƼöŠüÔè†)ø1ù94·Á.ù)žâŠÙOýQëž?8¯?Š`òÑâ™ágaŠ+&?OX˜âŠÉoWØz ì˜üJáè1°Ç˜ŸN\bFñøMÜ°Àõ¯<~ýh þ‚ùYÊsð'¬¿BžêÆúËäf¬¿Tõ Œõ—Twë ‚ú‰xš ¨ŸE=aP_¢¬f¬?9¯õEþÔ|‚ú"4ÿ@}‘]ÍßQ_¨`éÆõ¥Ì5ÿF})õ„„_vÉì—®~ÉŠá×|¿°^q6êK´bÔ¹bö3*>W½ËŠO~æ~W4ö»¬±ß¥ý.iìw±¹ß5â‡f<ù™û]ÑØï²Æ~—6ö»¤±ßÅ Uš¿²ý`Ð~ú¬
+ÞÇ
+endstream
+endobj
+193 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 333
+>>
+stream
+xÚ½=NÃ@…#¥An8Bækoð_*K$\ AÅ%$:Óq:Ÿ%]®ä"­­4Éò03kÙ€QšHXöì·kϼ÷¬=ÏSžR¦S_Å>è“P¢(V3 q •Ža¡á‚ÀW^ô9DÚWaô«åöÞ™§Ž{áÌq/ ¦š^ÂÓãóãίNAÓÞnÓ3@ÄfLÅÐSŽZø¬ +Ì-ä„ n~B“áö
++qJŠ))f%‘ËŒo‚%NŽ©ë%x`AÀÿL–Š¡ÎŒü4¢@F4IЈ òaÄ YìAÒP³³P÷°µÐ¼t`ãV-¼!oác$-¬ÿ^Gö:êÀ9Oë/€‰íU
+endstream
+endobj
+194 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 280
+>>
+stream
+xÚ½Ð;NÄ0à‰¶ˆä&G`NàØ›—©VZ@"T´+%êÍÑr!eŠ(al›´ÍJDŠóYšñ?ŽBp!Ð.ÛlËU…2Ïy‘cU ®ª<ã²Àg‰oXdŠ ‰TŽå¥â¥üÕòôÊö5K±¬Xz‹ŠÖú?Þ?_Xº¿¿BI{·­¯qš¦!¦E›f´pth`ç
+endstream
+endobj
+195 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 729
+>>
+stream
+xÚ]•¿kAÇí×ÜŸpÛ¥Êe×Ã\! QÁ+$Zù¨XYø«„[!…e+Anÿ‘1 Ù?Á·í%Sxã<÷Í{óÆ™+2ùd²ï;ŸÙ¹yEžçÃ<ÏÜ­Ýa>ʶŠa¾“yQ ǻݘ†ã{Ù‹"{ƒÜîY÷€ü=õüuïpÒÛ~–wǽíG4Lgïß~xÙÛ>|r?+:&œ<ÈÊ¿ð~CŃ -Ô¶âa
+(n£Y ËhVÁU4ÛÂ,šmà š­íÔÄ6Ž×6ŽW6ŽomßØ: ø¬¿ÛÄo™ø]%~3ž] èŸxöãÅOùÙþÜ Æ²ve\ Í~'`_a%Å~ •ZöëØ4짠«ÕUªÙ+•ì‡Œñû!c<°2Æ{?d7ˆÔïýæÐ-YãÂiö`ßųß7°Çûáûâܸxïgû×.Þû­¸Jü~
+~÷‚Ÿ
+~?±þfðûŒëé¿ çüúÈ‹àW"kñ[WÈFüVˆôšòéõÎïœXü¾0{¿MâÆû·Þ¯aö~5±ò~ž½_I¬½óšýf±÷;&¿©0ùÂî‘_`òž’Ÿð ùifØ#?áù oú÷²èwãy@~sÏìw)L~_…ÉoO˜üŽ…ÉOòJò Ì~wøãý<³_ÔèÚ ý€®p§»[/Üéè÷;ô;•ô»6éwMÒïê¸ß%ñÓ8ýâ~§“~§’~×&ý®Iú]4Tˆ?¦÷pÒ{úenê
+endstream
+endobj
+196 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 702
+>>
+stream
+xÚm•¿ŽÓ@‡'¤ˆä&Â~slN\‚„.è
+endstream
+endobj
+197 0 obj
+<<
+/x5a 173 0 R
+/x4b 174 0 R
+/x6b 175 0 R
+/x4a 176 0 R
+/x6a 177 0 R
+/x51 178 0 R
+/x71 179 0 R
+/x4c 180 0 R
+/x6c 181 0 R
+/x52 182 0 R
+/x72 183 0 R
+/x53 184 0 R
+/x73 185 0 R
+/x42 186 0 R
+/x62 187 0 R
+/x41 188 0 R
+/x61 189 0 R
+/x6e 190 0 R
+/x4d 191 0 R
+/x6d 192 0 R
+/x50 193 0 R
+/x70 194 0 R
+/x4f 195 0 R
+/x6f 196 0 R
+>>
+endobj
+90 0 obj
+<<
+/Type/Font
+/Name/F21
+/Subtype/Type3
+/FirstChar 48
+/LastChar 115
+/Widths[1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 1000 0 0 0 0 0 0 0 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 0 0 0 0 0 0 1000 0 0 0 0 0 0 1000 1000 0 0 0 0
+0 0 0 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000]
+/FontBBox[-100 -200 1100 1100]
+/FontMatrix[0.001 0 0 0.001 0 0]
+/Encoding 58 0 R
+/CharProcs 197 0 R
+>>
+endobj
+198 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 239
+>>
+stream
+xÚ}P;Žƒ05JäÆG`N` ÆÄ[!å#…b¥Ý*ØM™"QRƒ”b¯•ˆ‹À \R f'a§Ù"Åó{cyÞ¼ñ"It’ÀópFçæt³°§N¿9Ȝթ…ïŽ`ÕÆ
+endstream
+endobj
+199 0 obj
+<<
+/x6b 198 0 R
+>>
+endobj
+99 0 obj
+<<
+/Type/Font
+/Name/F22
+/Subtype/Type3
+/FirstChar 43
+/LastChar 121
+/Widths[700 0 399.99 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 899.99 800 600.01 1000
+1000 1000 1000 1000 1000 1000 800 1000 800 1000 800 399.99 1000 800 800 1000 1000
+800 0 600.01 0 0 0 0 0 0 0 0 1000 1200 700 899.99 700 700 700 1300 1300 700 700 1000
+899.99 700 1000 1000 1250 1000 1000 1000 1000 1000 1000 1000 1000]
+/FontBBox[-130 -440 1430 1120]
+/FontMatrix[0.001 0 0 0.001 0 0]
+/Encoding 58 0 R
+/CharProcs 199 0 R
+>>
+endobj
+200 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 268
+>>
+stream
+xÚUP1NÄ0ttÅInò„ìpœGGt€D
+$¨®EJ
+Ô¤ã[yÊ>!eŠÓ™q2áÂãõîÌîNå½wÞËrU­w­—³Ð¸ÐÈî¼qU¶¾p¾–çJÞ¤ÝÕ.Aùïó?åéÕî{[$T¶¼]îþN>Þ?_l¹¿¿’¯a-ßç(›³ÉLÆ$Pc¾
+endstream
+endobj
+201 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 123
+>>
+stream
+xÚ3400Ð30P
+ºFfzææ
+–FÆz&¦
+†fzÆ
+)†
+…
+&Æz†¦
+@Õ0&ŠŽä\.'O.ýp3c.}0éé«PRTšÊ¥ïà¬`äC¸ž.
+ûÿƒÁ?ùQzXÒ À¥ |.WO®@
+endstream
+endobj
+202 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 120
+>>
+stream
+xÚ3400Ð30P
+ºFfzææ
+–FÆz&¦
+†fzÆ
+)†
+…
+&Æz†¦
+@Õ0&ŠŽä\.'O.ýp3c.}0éé«PRTšÊ¥ïà¬`äC¸ž.
+ÿ!à”þ0J/ºÀø\®ž\
+endstream
+endobj
+203 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 281
+>>
+stream
+xÚ}‘=NÃ@…-¥@ÚÆ7ˆçØkÖA¡!R
+|Q~¾÷ù¸ùƒ-?µ‘_þFïRúÜÇ~¾†ÜÛìy·ãÿí÷¥ýjÿª‡ê£z©~ªçV_Õ[õW?ÔõKýÛú©þ¿ÍEin~
+endstream
+endobj
+204 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 281
+>>
+stream
+xÚmÐ1NÃ@…a×Û˜d.Àz'Ž©"p ”H…:t¹V¤\„Ü`…¬vç .üg%ñKê‚ôÖß:Ÿ¶~± ‹iãgsêêÖ7­kz¥nÖøzNééßÄã³[õ®z ¶qÕÞû[ÚnÞž\µº»¤:qì¯HÒu(Šâ¿
+O¢v\¢Ã‚ž¬GëÞZ¢<AÇ%:ìä\àò.8Ÿ|x1ÁOüÁ÷¼Œàº·ÄÞÌó^}{—opaðÜÌs3ÏÍ<Uy*Æ3xªòTå©ÊS•§*¶ßÎàÂàÂàÂàÂàÂàööü}öWê^±½‚½h‰*Ç^±½b{µŸÖ/Ô]÷îþíÏÔ
+endstream
+endobj
+205 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 142
+>>
+stream
+xÚ3400Ð30P
+ºFfzææ
+–FÆz&¦
+†fzÆ
+)†
+…
+&Æz†¦
+@Õ0&ŠŽä\.'O.ýp3c.}0éé«PRTšÊ¥ïà¬`äC¸ž.
+ Øü0ø@ýJÿ©J4Ø—Œä Þ…ó‡?þ?8¢—ËÕ“+
+endstream
+endobj
+206 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 179
+>>
+stream
+xÚ³00Ð30P
+ºFfzææ
+æFFzæ 1cTŠ¡B¡‚™‰‘ž P-ZY‚¡èHÎåròäÒW0±àÒ÷P03âÒ÷ôU()*MåÒw
+pV0ò!\Oùÿ À&›Áä0ù¡DþKÿãG’>ˆ$ýÃIšIbDú-­x€$ÂŽP Ñ1á Âdˆ$ÄFˆä$kÙ’ýT7ü?$(¸\=¹¼¶f
+endstream
+endobj
+207 0 obj
+<<
+/x78 200 0 R
+/x76 201 0 R
+/x77 202 0 R
+/x44 203 0 R
+/x47 204 0 R
+/x49 205 0 R
+/x53 206 0 R
+>>
+endobj
+100 0 obj
+<<
+/Type/Font
+/Name/F23
+/Subtype/Type3
+/FirstChar 43
+/LastChar 121
+/Widths[700 0 399.99 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 899.99 800 600.01 1000
+1000 1000 1000 1000 1000 1000 800 1000 800 1000 800 399.99 1000 800 800 1000 1000
+800 0 600.01 0 0 0 0 0 0 0 0 1000 1200 700 899.99 700 700 700 1300 1300 700 700 1000
+899.99 700 1000 1000 1250 1000 1000 1000 1000 1000 1000 1000 1000]
+/FontBBox[-130 -440 1430 1120]
+/FontMatrix[0.001 0 0 0.001 0 0]
+/Encoding 58 0 R
+/CharProcs 207 0 R
+>>
+endobj
+1 0 obj
+<<
+/Creator( TeX output 2005.03.17:1805)
+/Producer(dvipdfm 0.13.2c, Copyright \251 1998, by Mark A. Wicks)
+/CreationDate(D:20050317180615-05'00')
+>>
+endobj
+5 0 obj
+<<
+/Type/Page
+/Resources 6 0 R
+/Contents[38 0 R 4 0 R 39 0 R 40 0 R]
+/Parent 208 0 R
+>>
+endobj
+42 0 obj
+<<
+/Type/Page
+/Resources 43 0 R
+/Contents[38 0 R 4 0 R 54 0 R 40 0 R]
+/Parent 208 0 R
+>>
+endobj
+208 0 obj
+<<
+/Type/Pages
+/Count 2
+/Kids[5 0 R 42 0 R]
+/Parent 3 0 R
+>>
+endobj
+56 0 obj
+<<
+/Type/Page
+/Resources 57 0 R
+/Contents[38 0 R 4 0 R 61 0 R 40 0 R]
+/Parent 209 0 R
+>>
+endobj
+63 0 obj
+<<
+/Type/Page
+/Resources 64 0 R
+/Contents[38 0 R 4 0 R 68 0 R 40 0 R]
+/Parent 209 0 R
+>>
+endobj
+70 0 obj
+<<
+/Type/Page
+/Resources 71 0 R
+/Contents[38 0 R 4 0 R 75 0 R 40 0 R]
+/Parent 209 0 R
+>>
+endobj
+209 0 obj
+<<
+/Type/Pages
+/Count 3
+/Kids[56 0 R 63 0 R 70 0 R]
+/Parent 3 0 R
+>>
+endobj
+77 0 obj
+<<
+/Type/Page
+/Resources 78 0 R
+/Contents[38 0 R 4 0 R 82 0 R 40 0 R]
+/Parent 210 0 R
+>>
+endobj
+84 0 obj
+<<
+/Type/Page
+/Resources 85 0 R
+/Contents[38 0 R 4 0 R 86 0 R 40 0 R]
+/Parent 210 0 R
+>>
+endobj
+210 0 obj
+<<
+/Type/Pages
+/Count 2
+/Kids[77 0 R 84 0 R]
+/Parent 3 0 R
+>>
+endobj
+88 0 obj
+<<
+/Type/Page
+/Resources 89 0 R
+/Contents[38 0 R 4 0 R 91 0 R 40 0 R]
+/Parent 211 0 R
+>>
+endobj
+93 0 obj
+<<
+/Type/Page
+/Resources 94 0 R
+/Contents[38 0 R 4 0 R 95 0 R 40 0 R]
+/Parent 211 0 R
+>>
+endobj
+97 0 obj
+<<
+/Type/Page
+/Resources 98 0 R
+/Contents[38 0 R 4 0 R 101 0 R 40 0 R]
+/Parent 211 0 R
+>>
+endobj
+211 0 obj
+<<
+/Type/Pages
+/Count 3
+/Kids[88 0 R 93 0 R 97 0 R]
+/Parent 3 0 R
+>>
+endobj
+3 0 obj
+<<
+/Type/Pages
+/Count 10
+/Kids[208 0 R 209 0 R 210 0 R 211 0 R]
+/MediaBox[0 0 612 792]
+>>
+endobj
+38 0 obj
+<<
+/Length 1
+>>
+stream
+
+endstream
+endobj
+40 0 obj
+<<
+/Length 1
+>>
+stream
+
+endstream
+endobj
+4 0 obj
+<<
+/Length 30
+>>
+stream
+1.00028 0 0 1.00028 72 720 cm
+endstream
+endobj
+212 0 obj
+<<
+>>
+endobj
+213 0 obj
+null
+endobj
+214 0 obj
+<<
+>>
+endobj
+2 0 obj
+<<
+/Type/Catalog
+/Pages 3 0 R
+/Outlines 212 0 R
+/Threads 213 0 R
+/Names 214 0 R
+>>
+endobj
+xref
+0 215
+0000000000 65535 f
+0000200808 00000 n
+0000202702 00000 n
+0000202350 00000 n
+0000202555 00000 n
+0000200972 00000 n
+0000011938 00000 n
+0000000009 00000 n
+0000042511 00000 n
+0000042327 00000 n
+0000000908 00000 n
+0000048122 00000 n
+0000047936 00000 n
+0000001901 00000 n
+0000052306 00000 n
+0000052120 00000 n
+0000002818 00000 n
+0000056366 00000 n
+0000056177 00000 n
+0000003803 00000 n
+0000063832 00000 n
+0000063642 00000 n
+0000004749 00000 n
+0000076455 00000 n
+0000076267 00000 n
+0000005685 00000 n
+0000092238 00000 n
+0000092051 00000 n
+0000006602 00000 n
+0000095322 00000 n
+0000095136 00000 n
+0000007542 00000 n
+0000097893 00000 n
+0000097707 00000 n
+0000008506 00000 n
+0000100040 00000 n
+0000099854 00000 n
+0000009506 00000 n
+0000202455 00000 n
+0000010507 00000 n
+0000202505 00000 n
+0000011805 00000 n
+0000201075 00000 n
+0000018513 00000 n
+0000011999 00000 n
+0000107518 00000 n
+0000107323 00000 n
+0000013084 00000 n
+0000116962 00000 n
+0000116776 00000 n
+0000014066 00000 n
+0000129221 00000 n
+0000129036 00000 n
+0000014794 00000 n
+0000015521 00000 n
+0000018411 00000 n
+0000201258 00000 n
+0000022530 00000 n
+0000018575 00000 n
+0000149576 00000 n
+0000152626 00000 n
+0000019636 00000 n
+0000022427 00000 n
+0000201363 00000 n
+0000027069 00000 n
+0000138911 00000 n
+0000138716 00000 n
+0000022592 00000 n
+0000023527 00000 n
+0000026942 00000 n
+0000201468 00000 n
+0000029783 00000 n
+0000155002 00000 n
+0000157077 00000 n
+0000179047 00000 n
+0000027131 00000 n
+0000029609 00000 n
+0000201659 00000 n
+0000033253 00000 n
+0000140473 00000 n
+0000140287 00000 n
+0000029845 00000 n
+0000030814 00000 n
+0000033079 00000 n
+0000201764 00000 n
+0000035933 00000 n
+0000033315 00000 n
+0000035807 00000 n
+0000201948 00000 n
+0000038336 00000 n
+0000197019 00000 n
+0000035995 00000 n
+0000038199 00000 n
+0000202053 00000 n
+0000039987 00000 n
+0000038398 00000 n
+0000039873 00000 n
+0000202158 00000 n
+0000042264 00000 n
+0000197777 00000 n
+0000200305 00000 n
+0000040049 00000 n
+0000042157 00000 n
+0000142505 00000 n
+0000142990 00000 n
+0000143312 00000 n
+0000143739 00000 n
+0000144194 00000 n
+0000144765 00000 n
+0000144967 00000 n
+0000145193 00000 n
+0000145403 00000 n
+0000145675 00000 n
+0000145878 00000 n
+0000146089 00000 n
+0000146295 00000 n
+0000146565 00000 n
+0000146749 00000 n
+0000146960 00000 n
+0000147181 00000 n
+0000147521 00000 n
+0000147832 00000 n
+0000148036 00000 n
+0000148357 00000 n
+0000148710 00000 n
+0000149059 00000 n
+0000149254 00000 n
+0000150078 00000 n
+0000150559 00000 n
+0000150865 00000 n
+0000151299 00000 n
+0000151771 00000 n
+0000152316 00000 n
+0000152525 00000 n
+0000153128 00000 n
+0000153437 00000 n
+0000153763 00000 n
+0000154130 00000 n
+0000154503 00000 n
+0000154702 00000 n
+0000154901 00000 n
+0000155504 00000 n
+0000155733 00000 n
+0000155961 00000 n
+0000156276 00000 n
+0000156502 00000 n
+0000156721 00000 n
+0000156976 00000 n
+0000157579 00000 n
+0000158238 00000 n
+0000159036 00000 n
+0000160267 00000 n
+0000161590 00000 n
+0000162574 00000 n
+0000163269 00000 n
+0000164815 00000 n
+0000166260 00000 n
+0000166637 00000 n
+0000166992 00000 n
+0000167943 00000 n
+0000168904 00000 n
+0000169566 00000 n
+0000170124 00000 n
+0000171259 00000 n
+0000172322 00000 n
+0000173006 00000 n
+0000173611 00000 n
+0000174800 00000 n
+0000175965 00000 n
+0000176460 00000 n
+0000176843 00000 n
+0000177814 00000 n
+0000178712 00000 n
+0000179456 00000 n
+0000179988 00000 n
+0000180572 00000 n
+0000181230 00000 n
+0000182165 00000 n
+0000183181 00000 n
+0000183888 00000 n
+0000184506 00000 n
+0000185703 00000 n
+0000186872 00000 n
+0000187240 00000 n
+0000187582 00000 n
+0000188328 00000 n
+0000189084 00000 n
+0000189644 00000 n
+0000190141 00000 n
+0000191039 00000 n
+0000191904 00000 n
+0000192440 00000 n
+0000193398 00000 n
+0000194344 00000 n
+0000194751 00000 n
+0000195105 00000 n
+0000195908 00000 n
+0000196684 00000 n
+0000197428 00000 n
+0000197741 00000 n
+0000198279 00000 n
+0000198621 00000 n
+0000198818 00000 n
+0000199012 00000 n
+0000199367 00000 n
+0000199722 00000 n
+0000199938 00000 n
+0000200191 00000 n
+0000201180 00000 n
+0000201573 00000 n
+0000201869 00000 n
+0000202264 00000 n
+0000202634 00000 n
+0000202657 00000 n
+0000202679 00000 n
+trailer
+<<
+/Size 215
+/Root 2 0 R
+/Info 1 0 R
+>>
+startxref
+202800
+%%EOF
diff --git a/obsolete/macros/latex/contrib/texmate/texmatesample.tex b/obsolete/macros/latex/contrib/texmate/texmatesample.tex
new file mode 100644
index 0000000000..e8564bcf7e
--- /dev/null
+++ b/obsolete/macros/latex/contrib/texmate/texmatesample.tex
@@ -0,0 +1,326 @@
+\documentclass[10pt]{article}
+\usepackage{doc}
+\usepackage{texmate}
+\title{\TeX mate\\(comprehensive chess annotation in \LaTeX)\\ Usage sample and reference}
+\date{03/13/05}
+ \author{Federico Garcia\\\texttt{federook@gmail.com}}
+\begin{document}
+\maketitle
+
+\tableofcontents
+
+\section{Introduction}
+I tried using the \textsf{skak} package.\footnote{By Torben Hoffmann, 2001.} I liked very much its beautiful chess fonts. But somehow I got frustrated. I forget exactly what it was, but it frustrated me. It was about annotating the games, somehow the syntax requirements that \textsf{skak} imposed were too cumbersome when an analysis had many variations and subvariations.
+
+So I simply didn't do it in \TeX---I think I didn't do it at all. Until one day I got a game that I wanted to publish. So I went to Word---yes, yes, I'm sorry, but I had no option. Besides, the editors of the \emph{Pennswoodpusher} certainly used Word, so a Word file would be better.
+
+I commented my game, and `translated' it into a more readable format to send it to my friends. I wanted figurines instead of initials for the pieces (I used a True~Type for this), I wanted the main game to be separated from the commentary by paragraph breaks, sub-variations to be indicated differently, etc. The contents of the game, and even the analyzed variations, were of course the same. I started looking at several books to see their chess-formatting habits.
+
+And I figured that being able to transcribe a game from format to format without having to edit the input is, clearly, a task for \TeX\dots
+
+\TeX mate is the result. The emphasis is on the formatting of annotated games of chess. \textsf{skak}'s focus seems to be more graphical: beautiful tools for diagrams (the package itself even keeps track of the position according to the moves in the game---which of course is the deep reason why it's not really flexible about variations and alternative lines---those confuse it).
+
+Commented code is in the file \texttt{texmate.dtx}. A user's manual required using the package, so it comes as this one separate file.
+
+\section{A note on installation}
+Installation is straightforward: the packages is made of a `source' (\texttt{texmate.dtx} and \texttt{texmate.ins}), which generate a `tex' (\texttt{texmate.sty}) and a `doc' (\texttt{texmate.dvi}) with the commented code. In addition, there is this extra `doc,' \texttt{texmatesample.tex}.
+
+But the fonts of the \textsf{skak} package have to be installed. The easiest would of course install \textsf{skak} itself. I have included the fonts. There are \texttt{.mf} files (`source'), \texttt{.fd} files (`vf') and a \texttt{.map} file.
+
+\section{Basic conventions}
+The moves are input with the (short) algebraic system of notation.
+
+\begin{description}
+\item[Pieces] Default is English piece initials (Rook, kNight, Bishop, Queen, King). But this can be changed with \verb"\pieceinitials"\DescribeMacro{\pieceinitials}. In fact, \TeX mate itself uses this command to initialize the default: \verb"\pieceinitials{PRNBQK}". The argument is the initials to be used, respectively, for pawn and then left to right in White's initial position. The initial for pawn is given only for diagrams---in game notation the pawn is not indicated.
+
+\item[Move Numbers] \TeX mate keeps track of the move number. Inputting the numbers is totally optional to the user, and although it may be helpful for later edition of the document, sometimes the variations and sub-variations are so complicated that one loses track of them. If the user does indeed input the number, it will override \TeX mate's count.
+
+\item[Delimiters] Moves (and move numbers) are delimited by spaces, periods, or semicolons. None of these will be typeset directly, since \TeX mate takes care of all formatting and punctuation. Of course, this is customizable.
+
+\makebarother
+\item[Chess mode] All this is done within `chess mode:' just as \verb"$" changes to math mode, \verb+|+ changes to chess mode. Sometimes (notably tables) you need \verb"|" for other things, so you can turn its chess meaning off with \DescribeMacro{\makebarother}\DescribeMacro{\makebarchess}\verb"\makebarother". To turn it back on, \verb"\makebarchess".
+
+\item[Checks] should be input (with \verb"+"), even if you don't like them to be typeset. There is a \verb"\checksign" command (default `\checksign') that you could redefine as nothing.
+
+\item[Captures] too should be input, with \verb"x", even if not intended to be visible. The command \verb"\takes" holds the sign that will be used for them (default a space-trimmed \verb"\times").
+
+\item[Mate] is done through \verb"\mate". Alternatively, of course, \verb"\#".
+
+\item[Promotions] are kind of an exception. Due to how \TeX mate works, the particle `\verb"c8N"' will produce literally `c8N,' instead of `c8\knight.' I did not think it was worth to change the whole nature of the system just for this, so I will ask the user to use piece-name commands for promotions: `\verb"c8\knight"' (or `\verb"c8=\knight",' as some people do).
+\end{description}
+
+\makebarchess
+\section{Formatting and punctuation}
+The output will be consistent as to punctuation marks. All of the following input streams:\makebarother
+
+\verb"|1. e4 e5; 2. Nc3 Nf6; 3. Bb5 a6|",
+
+\verb"|1 e4 e5 2 Nc3 Nf6 3 Bb5 a6|", and even
+
+\verb"|1 e4 e5 Nc3 Nf6 ; Bb5 a6|",
+
+\noindent will produce, with default settings, \makebarchess`|1 e4 e5 2. Nc3 Nf6; 3 Bb5 a6|.' This format can be changed redefining the following commands:
+
+\makebarother
+\begin{center}
+\begin{tabular}{|lp{.8\textwidth}|}\hline
+\verb"\afterno" & What comes after the number (\verb".~" by default)\\
+\verb"\afterw" & What comes between white's and black's moves (\verb*" ")\\
+\verb"\afterb" & What comes between black's move and the next number (\verb*"; ")\\
+\verb"\beforeb" & What comes before black's move when it's resuming the variation (\verb*"\the\move.\ \dots~")\\
+\verb"\beforeno" & What comes before the number.\\\hline
+\end{tabular}
+\end{center}
+\makebarchess
+
+The character that symbolizes each pieces (by default the figurines) is contained in the commands \verb"\rook", \verb"\knight", \verb"\bishop", \verb"\queen", and \verb"\king", and can be changed at any moment. These piece-name commands, as well as those for chess symbols, can be used in running text. Or in chess mode, for that matter.
+
+\section{Commentary}
+Within chess mode, the character \DescribeMacro{[}\DescribeMacro{]}\verb"[" opens a commentary. \TeX mate will then expect a move that is an alternative to the one in the text. For example:
+
+\makebarother
+\verb"|34. Nd5? [Ne4!] Bxd5! [Qxd5? 35. Re1!\wBetter]|"
+\makebarchess
+\newgame
+
+|34. Nd5? [Ne4!] Bxd5! [Qxd5? 35. Re1!\wBetter]|
+
+\smallskip
+
+Commentaries can be nested:
+
+\makebarother
+\verb"|35. Re1 [cxd5?! Qxd5 [Kh8? dxc6\wbetter [c3!?]]\; Kh1]|"
+\makebarchess
+
+|35. Re1 [cxd5?! Qxd5 [Kh8? dxc6\wbetter [c3!?]]\; Kh1]|
+
+\smallskip
+As you see, \TeX mate takes care of punctuation and fonts. But before going about modifying \DescribeMacro{\[}\DescribeMacro{\]}this things, there is an alternative way of commentary: \emph{control~sequences} \verb"\[" and \verb"\]". They are intended for freer commentary: they do not insert any punctuation, and the user has total control over the way the commentary is typeset.
+
+\DescribeMacro{\ifont}\DescribeMacro{\iifont}\DescribeMacro{\iiifont}\DescribeMacro{\ivfont}All of this can be modified. The samples that follow later in this document are probably the best way to learn about this. But here is the abstract explanation: the main game (boldface by default) is `level' 1. There are 4 levels, and their fonts are controlled by \verb"\ifont", \verb"\iifont", \verb"\iiifont", and \verb"\ivfont". They can be defined as standard commands like \verb"\bfseries", but there's one caveat: this doesn't apply by itself to the chess font. Changing levels 3 and 4 is easy; for levels 1 and 2, look at the code of \TeX mate.
+
+\DescribeMacro{\iopen}\DescribeMacro{\iclose}\DescribeMacro{\iiopen}\DescribeMacro{\iiclose}\marginpar{\hfill$\vdots$\quad\null}The symbols that mark the opening and closing of the commentaries are typeset by the commands \verb"\iopen", \verb"\iclose", \verb"\iiopen", \verb"\iiclose", etc. These are called by the characters \verb"[" and \verb"]". The control sequences \verb"\[" and \verb"\]" call for \verb"\iopent", \verb"\icloset", etc.\ (`\verb"t"' for `text'). If you are going to change these, remember that the first level of commentary is level~2 (1 is the game itself).
+
+Text can be inserted in commentaries, simply by using the \makebarother\verb"|" character properly. Examples in the next sections illustrate.
+
+\subsection{Additional commenting tools}
+\DescribeMacro{\dummy}\DescribeMacro{\ddummy}With \verb"\dummy" and \verb"\ddummy" you can insert `dummy' moves. If \TeX mate was expecting White's move number 32, \verb"\dummy" will make it expect Black's move number 32 (half a move is skipped). With \verb"\ddummy", it will expect White's move number 33 (a entire move was skipped). Remember that you can change the move number at any moment simply by typing the new number in the input.
+
+\DescribeMacro{\white}\DescribeMacro{\black}With \verb"\white" you force \TeX mate to handle the next move as one by White. \verb"\black" forces it to handle it as one by Black. With these commands, \TeX mate does not try to keep track of the move number, and so they should be used in connection with numbers. Both \verb"| 34 \black| " and \verb"|\black 34|" work in the same way: \TeX mate will expect Black's move number 34.
+
+\DescribeMacro{\steplevel}\DescribeMacro{\backlevel}If you want to use the fonts of another level without actually invoking a commentary, you can use \verb"\steplevel" and \verb"\backlevel". The former increases the level by 1, the latter decreases it by 1. Both then load the corresponding font for the level.
+
+Remember that the main game is level 1, the last level of commentary is level 4.
+
+\DescribeMacro{\threat<...>}With the \verb"\threat" macro you can introduce threats. This command has an argument, enclosed within \verb"<" and \verb">"; the argument is set \emph{as regular text} (i.e., not in chess mode). Before it, though, the sign \withidea\ is appended. For example:
+
+\verb"|17. Nce5!\threat<h4!\wBetter\attack> Ne8! h4? f5!|"
+
+\makebarchess
+|17. Nce5!\threat<h4!\wBetter\initiative> Ne8! h4? f5!|
+\makebarother
+
+\section{Diagrams}
+Producing the diagrams is really straightforward, more so than trying to explain it in words. Here are two examples that should make it really clear already:
+
+\noindent\diagram{r1r1k/pp1qn2p/5pp/3p2N/%
+6Q/8/PP3PPP/2R1R1K}\hfill{\pieceinitials{PTCADR}\diagram{t4tr/1d2ppap/a2p2p/2pc//1P4P/P3PPAP/1TADTCR}}
+\begin{verbatim}
+\diagram{r1r1k/pp1qn2p/5pp/3p2N/% \diagram{r4rk/1q2ppbp/b2p2p%
+ 6Q/8/PP3PPP/2R1R1K} 2pn//1P4P/P3PPBP/1RBQRNK}
+\end{verbatim}
+
+
+
+\DescribeMacro{\diagram}The diagram is typeset from the top board file to the bottom one, and from left to right. Numbers mean consecutive empty squares; lowercase letters mean black pieces; uppercase letters are white pieces. \verb"/" finishes a line. \TeX mate will fill any empty squares at the right of the last piece in the file.
+
+For the pieces you use the letters defined by \verb"\pieceinitials" (default \texttt{PRNBQK}).
+
+\DescribeMacro{\diagramsize}The default size for the diagram (each of its squares) is 18pt. It can be changed modifying the \LaTeX\ length \verb"\diagramsize".
+
+\DescribeMacro{notfilling}The diagrams don't have to be $8\times8$. If you choose the \texttt{notfilling} option to \TeX mate, it will not fill up the remaining squares in incomplete files, so you can have $4\times4$ boards, for example. The \DescribeMacro{\SquareNo} \verb"\SquareNo" variable holds the number of squares per line, and it can be modified.
+
+\section{Samples}
+
+The following are examples from real life. Modifying a few commands, I was able to mimic the formats of two books, and I present a game from each. Looking at the code for these samples must be the best way to learn how to use \TeX mate.
+
+\subsection{A famous study}
+But first comes a beautiful position. I used almost the default formatting of \TeX mate, except redefining
+\begin{verbatim}
+\renewcommand\afterb{ }
+\renewcommand\iiclose{\leavevmode\unskip] }
+\end{verbatim}
+\noindent so that there is no semicolon between black and white moves. I chose this because there are alternatives in the text-scarce commentaries, and they are separated by ;.
+
+\newgame
+\bigskip
+\centerline{\diagram{8/8/1KP/3r/8/8/8/k}}
+
+\medskip
+This position has been associated to the name of a Spanish amateur, Saavedra. Its history is interesting: it seems that a similar endgame was reached in a game toward the end of the 19\textsuperscript{th} century, and called a lot of attention. Zukertort published an analysis of it---almost complete, but not quite. And then it was left to Saavedra to find, while reading Zukertort's article, a move that must be counted among the most amazing chess tricks to be found anywhere.
+
+
+\renewcommand\afterb{ }
+\renewcommand\iiclose{\leavevmode\unskip] }
+\makeatletter
+\makebarchess
+\newgame
+|1. c7 Rd6+\onlymove 2. Kb5 [Kc5 Rd1! 3. c8\queen Rc1+=\; 2 Kb7 Rd7 \threat<Rxc7>=] Rd5+ 3. Kb4[Kb6 Rd6+] Rd4+ 4. Kd3 Rd3+ 5. Kc2 Rd4! 6. c8\rook!![|What Zukertort overlooked. He `only' saw |c8\queen Rc4+ Qxc4| stalemate! Promoting a rook, White now threatens \rook a8\mate|] Ra4 7. Kb3\threat<\rook c1\mate,\ \king\takes b4\WBetter>|\hfill\textbf{1--0}
+\bigskip
+
+{\small OK}, here is the same game with a different format for resuming moves:
+
+\makebarother
+\noindent\verb"\renewcommand\beforeb{}"
+\makebarchess
+
+\noindent
+makes resuming black moves to be typeset as if they were not resuming ones. So:
+
+\renewcommand\beforeb{}
+\newgame
+|1. c7 Rd6+\onlymove Kb5 [Kc5 Rd1! c8\queen Rc1+=\; 2 Kb7 Rd7 \threat<Rxc7>=] Rd5+ Kb4[Kb6 Rd6+] Rd4+ Kd3 Rd3+ Kc2 Rd4! c8\rook!![|What Zukertort overlooked. He `only' saw |c8\queen Rc4+ Qxc4| stalemate! Promoting a rook, White now threatens \rook a8\mate|] Ra4 Kb3\threat<\rook c1\mate,\ \king\takes b4\WBetter>|\hfill\textbf{1--0}
+
+
+\newpage
+\newgame
+\twocolumn
+\renewcommand\afterno{~}
+\renewcommand\iiopent{\par}
+\renewcommand\iicloset{\par}
+\renewcommand\takes{x}
+\renewcommand\beforeb{\the\move.~\dots\ }
+\subsection{Watson's format}
+The following game opening is taken from John~Watson's wonderful \emph{Secrets of Modern Chess Strategy} (Gambit, 1998), page~254. I also copy his formatting: in addition to double-column (on which I blame the overfulls), `x' for captures, long commentary in individual paragraphs, no period (but a space) after numbers. These are the appropriate declarations:
+
+\begin{verbatim}
+\renewcommand\afterno{~}
+\renewcommand\iiopent{\par}
+\renewcommand\iicloset{\par}
+\renewcommand\takes{x}
+\end{verbatim}
+
+\begin{center}
+\textsf{Timoshenko -- Itkis}
+
+\textit{Baile Herculane 1996}
+\end{center}
+\noindent|1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. e5 Nfd7 5 f4 c5 6. Nf3 Nc6 7 Be3 cxd4 8 Nxd4 Qb6 9 Qd2 Qxb2 10 Rb1 Qa3 \[|Znosko-Borovsky's principle is highly relevant here: the queen itself provides some countterplay agains White's c3 point, which give Black a chance against the coming onslaught. |\]11 Bb5! Nxd4!?\[|%
+Risky. Later games saw |Ndb8 12 f5! Bb4!|, aparently leading to a messy equality.|\]12 Bxd4 Bb4 13. 0-0 a6 14. Rb3 Qa5 15 Rfb1 Ba3!?\[|%
+Very provocative. |Qxb5 | is unclear after both |16 Nxb5 Bxd2| and |\white 16 Rxb4 Qc6|.|\]16. f5!!~{\normalfont(\emph{D})}\[|%
+Timoshenko attributes this move to Krup\-pa.
+
+\begin{center}
+\diagram{r1b1k2r/1p1n1ppp/p3p/qB1pPP/3B/bRN/P1PQ2PP/1R4K}
+\end{center}
+
+|\]axb5 17 Rxa3! Qxa3 18 Nxb5 Qxa2 19 Nd6+ Kf8 20. Ra1 Qxa1+ 21. Bxa1 Rxa1+ 22 Kf2\[|%
+Here the game went |\dummy Ra8? 23 Qg5! f6 24 Qh5 g6 25 Qh6+| with a winning attack. Better seems |\black 22 Nxe5| (Nunn), leading to |23 Qc3 Ng4+ 24 Ke2|, when |Ra8? 25 Qc7!| is good for White, but |\black 24 Ke7| holds out hope for equality, for example |Nxc8+ [Qb4!?| is another possibility|] Rxc8 26 Qxc8 Ra4! 27. Qxb7+ Kf6|.
+
+\newpage
+\onecolumn
+\subsection{Schiller's format}
+Now I take a game from Eric~Schiller's \emph{Standard Chess Openings} (Cardoza Publishing, 2002), pages~291--2. His formatting includes: `x' for captures, initials (not figurines) for pieces, semicolon after black's moves, period after number (but no space after it),\footnote{And here you can see this book was typeset with Word: putting a space after the period risks an unacceptable line break there. Word doesn't have something like our \textasciitilde.} in-text commentary without punctuation, and a `1\dots Nf6' form for black resuming moves:
+
+\begin{verbatim}
+\renewcommand\afterno{.}
+\renewcommand\afterb{; }
+\renewcommand\beforeb{\the\move\dots}
+\renewcommand\rook{R}\renewcommand\knight{N}\renewcommand\bishop{B}
+\renewcommand\queen{Q}\renewcommand\king{K}
+\renewcommand\iiopen{. }\renewcommand\iiopent{. }
+\renewcommand\iiclose{\leavevmode\unskip\ }
+\renewcommand\iicloset{\leavevmode\unskip\ }
+\end{verbatim}
+
+Note the use of Plain~\TeX's \verb"\unskip" in commentary-closing commands: it avoids double spaces. But it requires a previous \verb"\leavevmode".
+
+\newgame
+\renewcommand\afterno{.}
+\renewcommand\afterb{; }
+\renewcommand\beforeb{\the\move\dots}
+\renewcommand\rook{R}\renewcommand\knight{N}\renewcommand\bishop{B}
+\renewcommand\queen{Q}\renewcommand\king{K}
+\renewcommand\iiopen{. }\renewcommand\iiopent{. }
+\renewcommand\iiclose{\leavevmode\unskip\ }\renewcommand\iicloset{\leavevmode\unskip }
+\setlength\diagramsize{15pt}
+\begin{center}
+\bfseries (102) TARRASCH - ECKART [C05]
+
+Nuremberg, 1889
+
+|1. e4 e6; 2.d4 d5 3. Nd2 Nf6 4. e5 Nfd7; 5. Bd3|
+
+\medskip
+
+\diagram{rnbqkb1r/pppn1ppp/4p/3pP/3P/3B/PPPN1PPP/R1BQK1NR}
+\end{center}
+This is the way that Tarrasch [\dots]. |5 \black c5 6 c3 Nc6 7. Ne2 [Ngf3| is also common. |]Qb6[|Black should exchange in the center instead and only then play \dots Qb6.|]8 Nf3 Be7[cxd4 9. cxd4|
+
+|f6! 10. exf6 Nxf6 11. 0-0 Bd6| gives Black a reasonable game [\dots] Here is just one sample line: |Bf4!?| This sacrifices the b-pawn in return for play on the dark squares. |Bxf4 13 Nxf4 Qxb2 14. Ng5 Ke7| and White has to justify the material investment.
+
+|10. Kf1 Be7|. In this sharp line of the French, opening lines with 10\dots f6 is a wiser move. |11. a3 Nf8 12 b4 Bd7 13. Be3 Nd8|. Black does have a plan: to play \bishop b5 and exchange the light-squared bishops. [\dots] |14 Nc3 a5|. [\dots] Now the scope of the \bishop d7 is severely limited, and Black's plan, beginning with |\black 13 Nd8|, is exposed as faulty.
+
+|] 9. 0-0 0-0[|Black should just play |f6| here. |]10. Nf4 Nd8| [\dots]|11 Qc2! f5 [g6 12 h4 c4 13. Bxg6 hxg6; 14. h5 g5; 15. Ng6! fxg6 16. Qxg6+ Kh8; 17 Bxg5 Bxg5 18. Nxg5 Rf7 19 Nxf7+ Nxf7 20. Qxf7 Qxb2 21. h6| and Black gets mated.|]12. exf6 Nxf6; 13. Ng5[|White's pieces are swarming on the kingside, and Black just can't get enough defensive pieces to rescue the king.
+
+|]g6|.
+
+\begin{center}
+\diagram{R1BN1RK/PP2B2P/1Q2PNP/2PP2n/3p1n/2pb/ppq2ppp/r1b2rk}
+\end{center}
+
+|14. Bxg6! hxg6 15. Qxg6+ Kh8 16. Qh6+ Kg8; 17. Ng6|\textbf{. White won.}
+
+
+
+\section{Chess symbols}
+The table on the next page lists \TeX mate's chess symbols and the commands that produce them. The symbols come from the font of \textsf{skak}, but some of them have been adjusted for size and position. These modifications are shown in the third column.
+
+All the signs are \verb"\smash"'ed (the box that contains them is zero in height and depth) so that they don't affect interline spacing.
+
+\makebarother
+\centering
+\begin{tabular}{|l|c|l|}\hline
+\verb"\wbetter" & \wbetter & Shifted\\
+\verb"\bbetter" & \bbetter & Shifted\\
+\verb"\wBetter" & \wBetter & Shifted\\
+\verb"\bBetter" & \bBetter & \\
+\verb"\WBetter" & \WBetter & \verb"\large"\\
+\verb"\BBetter" & \BBetter & \verb"\large"\\
+\verb"\equal" & \equal & \\
+\verb"\unclear" & \unclear & \verb"\Large", shifted\\
+\verb"\compensation" & \compensation & \verb"\large"\\\hline
+\verb"\development" & \development & \verb"\footnotesize"\\
+\verb"\spaceadv" & \spaceadv & \verb"\footnotesize"\\
+\verb"\attack" & \attack & \verb"\large"\\
+\verb"\initiative" & \initiative & \verb"\large"\\
+\verb"\counterplay" & \counterplay & \verb"\large"\\\hline
+\verb"\zugzwang" & \zugzwang & \verb"\small"\\
+\verb"\onlymove" & \onlymove & \verb"\footnotesize"\\
+\verb"\withidea" & \withidea & \verb"\footnotesize"\\
+\verb"\betteris" & \betteris & \verb"\footnotesize"\\\hline
+\verb"\boardfile" & \boardfile & \\
+\verb"\boarddiagonal" & \boarddiagonal & \verb"\small"\\
+\verb"\boardcenter" & \boardcenter & \verb"\small"\\
+\verb"\kingside" & \kingside & \\
+\verb"\queenside" & \queenside & \\\hline
+\verb"\weak" & \weak & \verb"\small"\\
+\verb"\ending" & \ending & \verb"\footnotesize"\\
+\verb"\bishops" & \bishops &\\
+\verb"\oppositebishops" & \oppositebishops & \\
+\verb"\samebishops" & \samebishops & \\\hline
+\verb"\unitedpawns" & \unitedpawns & \\
+\verb"\separatedpawns" & \separatedpawns & \\
+\verb"\doubledpawns" & \doubledpawns &\\
+\verb"\passedpawn" & \passedpawn &\\
+\verb"\pawnsno" & \pawnsno & \verb"\small"\\\hline
+\verb"\timetrouble" & \timetrouble &\\
+\verb"\with" & \with & \verb"\small"\\
+\verb"\without" & \without & \verb"\small"\\
+\verb"\chessetc" & \chessetc & \\
+\verb"\chesssee" & \chesssee & \\\hline
+\end{tabular}\qquad\parbox[t]{2in}
+
+
+\end{document} \ No newline at end of file
diff --git a/obsolete/macros/latex/contrib/vxu/README b/obsolete/macros/latex/contrib/vxu/README
new file mode 100644
index 0000000000..472cea805d
--- /dev/null
+++ b/obsolete/macros/latex/contrib/vxu/README
@@ -0,0 +1,67 @@
+vxu 2008/01/25
+Copyright (C) Robert Nyqvist, robert(dot)nyqvist(at)bth(dot)se
+
+This work may be distributed and/or modified under the conditions
+of the LaTeX Project Public License, either version 1.3 of this
+license or (at your option) any later version. The latest version
+of this license is in http://www.latex-project.org/lppl.txt and
+version 1.3 or later is part of all distributions of LaTeX version
+2005/12/01 or later.
+
+This work has the LPPL maintenance status `maintained'.
+
+The Current Maintainer of this work is Robert Nyqvist.
+
+This work consists of the files
+ actawex.dtx
+ actawex.ins
+ actawex.pdf
+ rfmsi.dtx
+ README
+ rfmsi.ins
+ rfmsi.pdf
+ vxulicentiate.cls
+ vxulicentiate.tex
+ vxusymbol.1
+ vxutentamen.sty
+ vxutentamen.tex
+
+
+Short description
+-----------------
+
+Document classes for formatting theses and exams in the format required
+by Växjö University, Sweden. The directory contain the following classes
+and packages.
+ actawex doctorial theses in Acta Wexionensia
+ rfmsi master theses
+ vxulicentiate licentiate theses
+ vxutentamen exams
+
+
+Installation and usage
+----------------------
+
+1. Download the files needed for each class.
+ actawex - actawex.dtx, actawex.ins, actawex.pdf
+ rfmsi - rfmsi.dtx, rfmsi.ins, rfmsi.pdf, vxusymbol.1
+ vxulicentiate - vxulicentiate.cls, vxulicentiate.tex, vxusymbol.1
+ vxutentamen - vxutentamen.sty, vxutentamen.tex, vxusymbol.1
+
+2. For actawex or rfmsi, run
+ latex actawex.ins
+ or
+ latex rfmsi.ins
+ respectively. This will generate the following files:
+ actawex.cls
+ awcollection.clo
+ awmonograph.clo
+ template.tex
+ for actawex and the files
+ rfmsi.cls
+ template.tex
+ vxusymbol.mp
+ for rfmsi.
+
+3. Write your document by using the corresponding tex file, e.g.
+ template.tex, vxulicentiate.tex or vxutentamen.tex.
diff --git a/obsolete/macros/latex/contrib/vxu/actawex.dtx b/obsolete/macros/latex/contrib/vxu/actawex.dtx
new file mode 100644
index 0000000000..21bb6fa1e0
--- /dev/null
+++ b/obsolete/macros/latex/contrib/vxu/actawex.dtx
@@ -0,0 +1,2259 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2003-2007 by Robert Nyqvist
+%
+% Class for typsetting theses in Acta Wexionensia.
+%
+% \fi
+%
+% \CheckSum{1497}
+%
+%% \CharacterTable
+%% {Upper-case \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
+%% Lower-case \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
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%
+% \iffalse
+%
+% \section{Identifikation}
+%
+% Denna klass kan endast användas med \LaTeXe.
+%
+% \begin{macrocode}
+%<acta>\NeedsTeXFormat{LaTeX2e}[2001/06/01]
+% \end{macrocode}
+%
+% Ange datum, versionsnummer och kort beskrivning av klassen.
+%
+% \begin{macrocode}
+%<acta>\ProvidesClass{actawex}
+%<collection>\ProvidesFile{awcollection.clo}
+%<monograph>\ProvidesFile{awmonograph.clo}
+%<template>\ProvidesFile{template.tex}
+%<*driver>
+\ProvidesFile{actawex.drv}
+%</driver>
+ [2007/02/12 3.2 Class for Acta Wexionensia]
+% \end{macrocode}
+%
+% \section{Generera dokumentation}
+%
+% Följande kod genererar manualen och dokumentationen av koden.
+% \begin{macrocode}
+%<*driver>
+\documentclass[a4paper]{ltxdoc}
+% \end{macrocode}
+%
+% Ladda paket med stöd för svenska.
+% \begin{macrocode}
+\usepackage[T1]{fontenc}
+\usepackage[swedish]{babel}
+\usepackage[latin1]{inputenc}
+% \end{macrocode}
+%
+% Deklarerar en omgivning för kommandon (som ska användas i manualdelen).
+% \begin{macrocode}
+\newenvironment{decl}{%
+ \par
+ \addvspace{2ex plus .75ex}%
+ \noindent
+ \begin{tabular}{|l|}
+ \hline
+ \ignorespaces
+ }{%
+ \\
+ \hline
+ \end{tabular}%
+ \vspace{1ex}\vskip -\parskip
+ \noindent
+ \ignorespacesafterend
+ \nobreak
+}
+% \end{macrocode}
+%
+% Läs datum och versionnummer.
+% \begin{macrocode}
+\GetFileInfo{actawex.drv}
+% \end{macrocode}
+%
+% Ladda in dokumentationen.
+% \begin{macrocode}
+\begin{document}
+\DocInput{actawex.dtx}
+\end{document}
+%</driver>
+% \end{macrocode}
+%
+% \fi
+%
+% \title{\bfseries Klass för \emph{Acta Wexionensia}}
+% \author{\slshape Robert Nyqvist}
+% \date{\filedate}
+% \maketitle
+%
+% \begin{abstract}
+% Dokumentklassen \textsf{actawex} är anpassad för typsättning av
+% avhandlingar som ska publiceras i \emph{Acta Wexionensia}. Något
+% stöd för \LaTeX~2.09 ges inte. Här beskrivs både hur denna klass
+% används och hur den är implementerad. Dokumentationen avser
+% version~\fileversion, senast ändrad \filedate.
+% \end{abstract}
+%
+% \tableofcontents
+%
+% \section{Manual}
+%
+% \subsection{Initiering}
+%
+% \begin{decl}
+% |\documentclass|\oarg{klassalternativ}|{actawex}|
+% \end{decl}
+% Laddar klassen |actawex|. Nedan följer de \meta{klassalternativ}
+% som är specifika för klassen. Det finns inga klassalternativ för
+% att välja pappersformat eller grad på brödtexten, då dessa är
+% förutbestämda.
+%
+% \begin{decl}
+% |collection|\quad|monograph|
+% \end{decl}
+% För att ange om man skriver en sammanläggningsavhandling eller en
+% monografi. Förvald är |collection|.
+%
+% \begin{decl}
+% |draft|\quad|final|
+% \end{decl}
+% Med |draft| markeras en s.k. ''|Overfull \hbox|'' med en svart
+% fyrkant, det vill säga samma funktions som i standardklasserna.
+% Förvald är |final|.
+%
+% \begin{decl}
+% |openany| |openright|
+% \end{decl}
+% Med |openright| kommer bl.a. kapitelrubriker att endast börja på en
+% högersida och med |openany| tillåts de även hamna på en vänstersida.
+% Förvald är |openany|.
+%
+% \subsection{Dokumentstruktur}
+%
+% \begin{decl}
+% |plain|\quad|empty|\\
+% |headings|\quad|noheadings|
+% \end{decl}
+% Fördeklarerade sidstilar. Används internt av bl.a. |\frontmatter|,
+% |\mainmatter|, och |\backmatter|. För att manuellt ändra sidstilen
+% använd |\pagestyle|\marg{sidstil} eller
+% |\thispagestyle|\marg{sidstil}.
+%
+% \begin{decl}
+% |\frontmatter|
+% \end{decl}
+% Följande sidor ingår i förtexten: smutstitel, blank sida, titelsida,
+% tryckortssida och innehållsförteckning. De fyra första sidorna görs
+% av Växjö University Press och finns därför inte implementerade i
+% denna mall. Därför sätter |\frontmatter| sidräknaren att börja på
+% 5. Sidstilen är |noheadings|.
+%
+% \begin{decl}
+% |\mainmatter|
+% \end{decl}
+% Inleder huvudtexten genom att se till att denna börjar på en
+% högersida (udda sidnummer). Sidstilen är |headings|.
+%
+% \begin{decl}
+% |\backmatter|
+% \end{decl}
+% Sidor efter detta kommando betraktas som en del av eftertexten och
+% därför tas både paginering och kolumntitlar bort. Bör inte användas,
+% eftersom Växjö University Press gör eftertexten. Sidstilen är |empty|.
+%
+% \begin{decl}
+% |\part*|\oarg{kort rubrik}\marg{lång rubrik}\\
+% |\chapter*|\oarg{kort rubrik}\marg{lång rubrik}\\
+% |\section*|\oarg{kort rubrik}\marg{lång rubrik}\\
+% |\subsection*|\oarg{kort rubrik}\marg{lång rubrik}\\
+% |\paragraph*|\oarg{kort rubrik}\marg{lång rubrik}
+% \end{decl}
+% Kommandon för rubiker. Som standard numreras alla rubriker, utom de
+% som sätts med |\subsection| och |\paragraph|. Asterisken och
+% \oarg{kort rubrik} kan utelämnas. Dessa används för undertrycka
+% numreringen av en enskild rubrik respektive ge en kort version av en
+% lång rubrik som inte får plats i bl.a. innehållsförteckningen.
+% Notera att |\chapter| endast är tillgänglig om |actawex| har laddats
+% med klassalternativet |monograph|.
+%
+% \begin{decl}
+% |\begin{abstract}|\meta{text}|\end{abstract}|\\
+% |\begin{abstract*}|\meta{text}|\end{abstract*}|\\
+% |\keywords|\marg{nyckelord}
+% \end{decl}
+% Omgivning för typsättning av sammanfattning och nyckelord, där
+% |abstract*| inte lägger till rubriken i innehållsförteckningen.
+% Notera att |\keywords| bör användas innan |abstract|.
+%
+% \begin{decl}
+% |\begin{acknowledgments}|\meta{text}|\end{acknowledgments}|\\
+% |\begin{acknowledgments*}|\meta{text}|\end{acknowledgments*}|\\
+% |\acknowledgmentsname|
+% \end{decl}
+% Omgivning för typsättning av erkännanden. Liknar |abstract| ovan.
+% Texten i rubriken ges av |\acknowledgmentsname|, som kan definieras
+% om med |\renewcommand|.
+%
+% \subsection{Kommandon för sammanläggningsavhandlingar}
+%
+% Detta avsnitt är endast aktuellt om man laddat |actawex| med
+% klassalternativet |collection|.
+%
+% \begin{decl}
+% |\papertitle|\oarg{kort titel}\marg{lång titel}\\
+% |\papersubtitle|\marg{undertitel}\\
+% |\paperauthor|\marg{namn}\\
+% |\papernotes|\marg{text}
+% \end{decl}
+% Kommandon för deklaration av den informationen som placeras ut på en
+% försättssida till en infogad artikel.
+%
+% \begin{decl}
+% |\about|\marg{text}\\
+% |\and|
+% \end{decl}
+% Dessa två kommandon ska användas i argumentet till |\paperauthor|.
+% Kommandot |\about| placeras direkt efter ett namn, vilket typsätter
+% \meta{text} under namnet (här kan \meta{text} vara den till exempel
+% den institution som personen i fråga hör hemma). Vid flera
+% författare sätt ut |\and| mellan varje namn.
+%
+% \begin{decl}
+% |\makefrontpage|
+% \end{decl}
+% Skapar en försättssida till en infogad artikel. Använder den
+% information som deklarerades med de fyra föregående kommandona.
+% Tips: Ladda paketet \textsf{chapterbib} för att kunna ha separata
+% referenslistor~--~en för varje fil som infogas med |\include|.
+% Observera att varje sådan infogad fil måste kompileras med
+% \textsc{Bib}\TeX.
+%
+% \begin{decl}
+% |\papername|
+% \end{decl}
+% Typ av dokument som sammanläggs. Är fördefinierad som ''Paper'',
+% men kan definieras om med hjälp av |\renewcommand|.
+%
+% \begin{decl}
+% |paper|
+% \end{decl}
+% Heltalsregister som används för att numrerar de artiklar som infogas
+% i en sammanläggningsavhandling. Representeras med romerska versala
+% siffror. Genom att skriva
+% |\renewcommand{\thepaper}{\arabic{paper}}| används arabiska siffror
+% istället.
+%
+% \subsection{Bild- och tabelltext}
+%
+% \begin{decl}
+% |\captionwidth|
+% \end{decl}
+% Styr bredden på bild- och tabelltexten i flytande objekt. Kan
+% modifieras med |\setlength| eller |\settowidth|, för att få samma
+% bredd som tillhörande bild eller tabell.
+%
+% \subsection{Ogiltiga kommandon och omgivningar}
+%
+% Klassen är mycket lik standardklasserna, då de flesta kommandon i
+% t.ex. |book| och |report| även finns definierade i |actawex|.
+% Följande kommandon och omgivningar är dock inte tillgängliga via
+% |actawex|:
+% \begin{center}
+% \begin{tabular}{*{3}{p{9em}}}
+% |\author| & |\bf| & |\cal| \\
+% |\date| & |figure*| & |\it| \\
+% |\maketitle| & |\mit| & |\rm| \\
+% |\sc| & |\sf| & |\sl| \\
+% |\subsubsection| & |\subparagraph| & |table*| \\
+% |theindex| & |\title| & |titlepage| \\
+% |\tt| & |verse|
+% \end{tabular}
+% \end{center}
+%
+% \subsection{Att generera \textsc{pdf}}
+%
+% Växjö University Press vill ha dokumentet i form av en
+% \textsc{pdf}-fil. Det finns flera olika sätt att generera en
+% \textsc{pdf}-fil:
+% \begin{enumerate}
+% \item Direkt från |tex| till \textsc{pdf} med pdf\LaTeX.
+% \item Via \textsc{dvi} och PostScript till \textsc{pdf} med \LaTeX,
+% |dvips| och |ps2pdf|.
+% \end{enumerate}
+% Det första alternativet rekomenderas. Men i vissa fall fungerar
+% inte denna, t.ex. om man använder paketet \textsf{pstricks}. Det
+% andra alternativet går till på följande sätt: Generera först en
+% \textsc{dvi}-fil med hjälp av \LaTeX. Exekvera därefter kommandot
+% \begin{center}
+% |dvips -Ppdf -G0 -T 16.5cm,24.2cm |\meta{\textsc{dvi}-fil}
+% \end{center}
+% för att skapa en PostScript-fil, och kör till sist kommandot
+% \begin{center}
+% |ps2pdf -dPDFsettings=/prepress |\meta{PostScript-fil}
+% \end{center}
+% Istället för \texttt{ps2pdf} kan man använda Acrobat Distiller.
+%
+% \StopEventually{}
+%
+% \newpage
+%
+% \section{Implementation}
+%
+% Implementationen av klassen är i stora drag inspirerad av koden i
+% standardklasserna |report| och |book|.
+%
+%
+% \subsection{Inledande deklarationer}
+%
+% \begin{macro}{\if@collection}
+% För att hålla reda på om dokumentet är en sammanläggning eller en
+% monografi.
+% \begin{macrocode}
+%<*acta>
+\newif\if@collection
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@ptsize}
+% Vissa paket använder |\@ptsize| för avgöra vilken teckenstorlek som
+% dokumentet sätts i. Så även om vi inte använder detta kommando i
+% denna klass, definierar vi den till |0|, vilket motsvarar
+% entalssiffran i $10$.
+% \begin{macrocode}
+\newcommand{\@ptsize}{0}
+% \end{macrocode}
+% \end{macro}
+% Dokumentet ska sättas tvåsidigt. Observera att detta inte påverkar
+% storleken på marginalerna, sedan vänster- och högermarginal ska vara
+% lika stora. Däremot påverkas kolumntitlar och i vilken marginal som
+% marginaltexten ska placeras.
+% \begin{macrocode}
+\@twosidetrue
+\@mparswitchtrue
+% \end{macrocode}
+%
+% \begin{macro}{\if@openright}
+% För att hålla koll på om författaren vill att ett nytt kapitel
+% alltid ska börja på en högersida eller inte.
+% \begin{macrocode}
+\newif\if@openright
+% \end{macrocode}
+% \begin{macrocode}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Klassalternativ}
+%
+% \subsubsection{Sammanläggning eller monografi?}
+%
+% \begin{macro}{collection}
+% \begin{macro}{monograph}
+% Klassalternativ för att ange om avhandlingen är en monografi eller
+% en sammanläggning av flera artiklar, där den sistnämnda typen är
+% förvald.
+% \begin{macrocode}
+\DeclareOption{collection}{\@collectiontrue}
+\DeclareOption{monograph}{\@collectionfalse}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Utkast eller spikad version?}
+%
+% \begin{macro}{draft}
+% \begin{macro}{final}
+% Med klassalternativet |draft| vald markeras så kallade ''overfull
+% boxes'' med en svart rektangel.
+% \begin{macrocode}
+\DeclareOption{draft}{\setlength\overfullrule{5pt}}
+\DeclareOption{final}{\setlength\overfullrule{0pt}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Kapitelrubriker på endast högersidor?}
+%
+% \begin{macro}{openany}
+% \begin{macro}{openright}
+% För att ange om man vill att varje kapitel måste inledas på en
+% högersida.
+% \begin{macrocode}
+\DeclareOption{openany}{\@openrightfalse}
+\DeclareOption{openright}{\@openrighttrue}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Exekvera förvalda klassalternativ}
+%
+% Med |\ExecuteOptions| anger vi vilka klassalternativ som ska vara
+% förvalda och med kommandot |\ProcessOptions| låter vi användaren
+% göra egna val.
+% \begin{macrocode}
+\ExecuteOptions{collection,final,openany}
+\ProcessOptions
+% \end{macrocode}
+% Därefter läser vi in den fil med inställningar som beror på vilken
+% typ av dokument det rör sig om.
+% \begin{macrocode}
+\if@collection
+ \input{awcollection.clo}
+\else
+ \input{awmonograph.clo}
+\fi
+% \end{macrocode}
+%
+%
+% \subsection{Dokumentlayout}
+%
+% \subsubsection{Pappersformat}
+%
+% \begin{macro}{\paperwidth}
+% \begin{macro}{\paperheight}
+% Sätt pappersstorleken till $165 \times 242\;\mathrm{mm}$.
+% \begin{macrocode}
+\setlength\paperwidth{165mm}
+\setlength\paperheight{242mm}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\pdfpaperwidth}
+% \begin{macro}{\pdfpaperheight}
+% Testar om |\pdfpagewidth| är definierad eller inte. Om kommandot
+% existerar, betyder det att dokumentet kompileras med pdf\LaTeX\
+% och då måste |\pdfpagewidth| och |\pdfpageheight| tilldelas rätt
+% värden.
+% \begin{macrocode}
+\ifx\pdfpagewidth\undefined\else
+ \setlength\pdfpagewidth{165mm}
+ \setlength\pdfpageheight{242mm}
+\fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Typsnitt}
+%
+% \begin{macro}{\normalsize}
+% Storleken på brödtexten sätts till 10 puntker med ett radavstånd
+% på~12 punkter. Kommandot definierar även det vertikala avståndet
+% före respektive efter fristående formler. De parametrar som styr
+% listor på första nivån ges av |\@listI| (se
+% avsnitt~\ref{sec:listor}).
+% \begin{macrocode}
+\renewcommand\normalsize{%
+ \@setfontsize\normalsize\@xpt\@xiipt
+ \abovedisplayskip 9\p@ \@plus2\p@ \@minus4\p@
+ \abovedisplayshortskip \z@ \@plus3\p@
+ \belowdisplayshortskip 5\p@ \@plus2\p@ \@minus3\p@
+ \belowdisplayskip \abovedisplayskip
+ \let\@listi\@listI
+}
+% \end{macrocode}
+% \end{macro}
+% Välj 10 punkter som standardstorlek.
+% \begin{macrocode}
+\normalsize
+% \end{macrocode}
+%
+% \begin{macro}{\small}
+% En storlek mindre än |\normalsize|.
+% \begin{macrocode}
+\newcommand\small{%
+ \@setfontsize\small\@ixpt{11}%
+ \abovedisplayskip 7.5\p@ \@plus2.5\p@ \@minus3\p@
+ \abovedisplayshortskip \z@ \@plus2\p@
+ \belowdisplayshortskip 3.5\p@ \@plus2\p@ \@minus2\p@
+ \belowdisplayskip \abovedisplayskip
+ \def\@listi{%
+ \leftmargin\leftmargini
+ \topsep 4\p@ \@plus2\p@ \@minus2\p@
+ \parsep 2\p@ \@plus\p@ \@minus\p@
+ \itemsep \parsep}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\footnotesize}
+% Två storlekar mindre än |\normalsize|.
+% \begin{macrocode}
+\newcommand\footnotesize{%
+ \@setfontsize\footnotesize\@viiipt{9.5}%
+ \abovedisplayskip 5.5\p@ \@plus2\p@ \@minus3\p@
+ \abovedisplayshortskip \z@ \@plus\p@
+ \belowdisplayshortskip 2.5\p@ \@plus\p@ \@minus2\p@
+ \belowdisplayskip \abovedisplayskip
+ \def\@listi{%
+ \leftmargin\leftmargini
+ \topsep 3\p@ \@plus\p@ \@minus\p@
+ \parsep 2\p@ \@plus\p@ \@minus\p@
+ \itemsep \parsep}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\scriptsize}
+% \begin{macro}{\tiny}
+% \begin{macro}{\large}
+% \begin{macro}{\Large}
+% \begin{macro}{\LARGE}
+% \begin{macro}{\huge}
+% \begin{macro}{\Huge}
+% För övriga teckenstorlekar deklarerar vi endast grad och radavstånd.
+% \begin{macrocode}
+\newcommand\scriptsize{\@setfontsize\scriptsize\@viipt\@viiipt}
+\newcommand\tiny{\@setfontsize\tiny\@vpt\@vipt}
+\newcommand\large{\@setfontsize\large\@xiipt{14}}
+\newcommand\Large{\@setfontsize\Large\@xivpt{18}}
+\newcommand\LARGE{\@setfontsize\LARGE\@xviipt{22}}
+\newcommand\huge{\@setfontsize\huge\@xxpt{25}}
+\newcommand\Huge{\@setfontsize\Huge\@xxvpt{30}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Stycken och radfall}
+%
+% \begin{macro}{\lineskip}
+% \begin{macro}{\normallineskip}
+% \begin{macro}{\baselinestretch}
+% De två första kommandona hanterar radavståndet då två rader
+% tenderar att hamna alltför nära varandra.
+% \begin{macrocode}
+\setlength\lineskip{1\p@}
+\setlength\normallineskip{1\p@}
+\renewcommand\baselinestretch{}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\parskip}
+% \begin{macro}{\parindent}
+% Inget extra mellanrum mellan två stycken, utan vi markerar ett
+% nytt stycke med ett indrag som motsvarar bredden av ett så kallat
+% em-streck.
+% \begin{macrocode}
+\setlength\parskip{0\p@ \@plus \p@}
+\setlength\parindent{1em}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\smallskipamount}
+% \begin{macro}{\medskipamount}
+% \begin{macro}{\bigskipamount}
+% Definierar storleken på |\smallskip|, |\medskip| och |\bigskip|.
+% \begin{macrocode}
+\setlength\smallskipamount{3\p@ \@plus 1\p@ \@minus 1\p@}
+\setlength\medskipamount{6\p@ \@plus 2\p@ \@minus 2\p@}
+\setlength\bigskipamount{12\p@ \@plus 4\p@ \@minus 4\p@}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@lowpenalty}
+% \begin{macro}{\@medpenalty}
+% \begin{macro}{\@highpenalty}
+% Beroende på deras argumentet använder |\nopagebreak| och
+% |\nolinebreak| följande tre kommandon för att ange grad av
+% acceptans för sidbrytning respektive radbrytning. Ju högre värde,
+% destor mindre acceptans.
+% \begin{macrocode}
+\@lowpenalty 51
+\@medpenalty 151
+\@highpenalty 301
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\clubpenalty}
+% \begin{macro}{\widowpenalty}
+% Sätter toleransen för så kallade änkor.
+% \begin{macrocode}
+% \clubpenalty 150
+% \widowpenalty 150
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\displaywidowpenalty}
+% \begin{macro}{\predisplaypenalty}
+% \begin{macro}{\postdisplaypenalty}
+% Tillåt änkor men förbjud sidbrytning precis innan en fristående
+% formel. Däremot tillåts sidbrytning direkt efter en sidbrytning.
+% \begin{macrocode}
+% \displaywidowpenalt 50
+% \predisplaypenalty 10000
+% \postdisplaypenalty 0
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\interlinepenalty}
+% Tillåt sidbrytning inne i ett stycke.
+% \begin{macrocode}
+% \interlinepenalty 0
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\brokenpenalty}
+% Tillåt sidbrytning direkt efter en rad som avslutas med en
+% avstavning.
+% \begin{macrocode}
+% \brokenpenalty 100
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Satsyta och marginaler}
+%
+% \begin{macro}{\headheight}
+% \begin{macro}{\headsep}
+% \begin{macro}{\topskip}
+% Kolumntiteln ska få plats i en box med hjöden 12 punkter och som
+% placeras 6~mm ovanför satsytan. Kommandot |\topskip| är
+% radavståndet för första raden på en sida.
+% \begin{macrocode}
+\setlength\headheight{12\p@}
+\setlength\headsep{17\p@}
+\setlength\topskip{10\p@}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\footskip}
+% Avståndet mellan sista raden i satsytan och första raden i den box
+% som innehåller en fotnot.
+% \begin{macrocode}
+\setlength\footskip{25\p@}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\maxdepth}
+% Maximalt djup hos en box.
+% \begin{macrocode}
+\setlength\maxdepth{.5\topskip}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\textwidth}
+% Vänster- och högermarginaler ska båda vara 25~mm. Alltså ska
+% bredden på satsytan vara lika med 115~mm, då satsytans bredd är
+% 165~mm. Därefter ser vi till att |\textwidth| i enheten punkter
+% lagras som ett heltal.
+% \begin{macrocode}
+\setlength\textwidth{115mm}
+\@settopoint\textwidth
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\textheight}
+% Satsytans höjd ska vara ungefär 200~mm, vilket i antal rader,
+% förutom första, motsvarar
+% \[
+% (200 - 10) \cdot 2{,}845 / 12 \approx 45,
+% \]
+% där $2{,}45$ är antalet punkter som det går på en millimeter. Att
+% vi bortser från första raden, beror på att denna inte ger ett helt
+% radavstånd som bidrag, utan endast |\topskip|. Alltså sätter vi
+% höjden på satsytan att motsvarar 46~rader. Notera att vi inte
+% behöver avrunda |\textheight| med hjälp av |\@settopoint|,
+% eftersom följande beräknar ger ett heltal som resultat.
+% \begin{macrocode}
+\setlength\textheight{45\baselineskip}
+\addtolength\textheight{\topskip}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\oddsidemargin}
+% \begin{macro}{\evensidemargin}
+% Både vänster- och högermarginal ska vara 25~mm. Med
+% |\oddsidemargin| och |evensidemargin| styr man hur mycket extra
+% mellanrum som läggas till i vänstermarginalen på sidor med udda
+% respektive jämna sidnummer. Vi måste första plocka bort den extra
+% tum som \TeX\ internt adderar till samtliga vänstermarginaler.
+% \begin{macrocode}
+\setlength\oddsidemargin{-1in}
+\addtolength\oddsidemargin{25mm}
+\@settopoint\oddsidemargin
+\setlength\evensidemargin{\oddsidemargin}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\topmargin}
+% Sidhuvudet ska vara 17~mm. Vi måste dock ta hänsyn till
+% kolumntitelns höljd, givet av |\headheight|, och till avståndet
+% mellan satsytan och kolumntiteln, som ges av |\headsep|. Notera
+% att \TeX\ lägger även till en tum längst upp på varje sida, vilket
+% vi måste ta hänsyn till.
+% \begin{macrocode}
+\setlength\topmargin{-1in}
+\addtolength\topmargin{17mm}
+\addtolength\topmargin{-\headheight}
+\addtolength\topmargin{-\headsep}
+\@settopoint\topmargin
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\marginparwidth}
+% \begin{macro}{\marginparsep}
+% \begin{macro}{\marginparpush}
+% Bredden på eventuell marginaltext sätts till ungefär 20~mm och
+% avståndet mellan marginaltexten och satsytan till ungefär
+% 2{,}5~mm. Det minsta tillåtna vertikala avståndet mellan två
+% marginaltexter sätts till 5~punkter.
+% \begin{macrocode}
+\setlength\marginparwidth{57\p@}
+\setlength\marginparsep{7\p@}
+\setlength\marginparpush{5\p@}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Fotnoter}
+%
+% \begin{macro}{\footnotesep}
+% \begin{macro}{\footins}
+% Med |\footnotesep| styr vi hur mycket två fotnoter ska säras
+% vertikalt, och med |\skip\footins| sätter storleken på avståndet
+% mellan sista raden satsytan och första fotnoten.
+% \begin{macrocode}
+\setlength\footnotesep{6.65\p@}
+\setlength{\skip\footins}{9\p@ \@plus 4\p@ \@minus 2\p@}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{Placering av flytande objekt}
+%
+% Eftersom klassen endast stöder dokument satta med en kolumn,
+% utelämnar vi de kommandon och parametrar som styr flytande objekt i
+% två kolumner.
+%
+% \begin{macro}{topnumber}
+% \begin{macro}{bottomnumber}
+% \begin{macro}{totalnumber}
+% Vi sätter maximalt antal tillåtna flytande objekt som får placeras
+% längst upp eller längst ned på en textsida, samt det totala antalet
+% flytande objekt som får förekomma på en textsida.
+% \begin{macrocode}
+\setcounter{topnumber}{1}
+\setcounter{bottomnumber}{1}
+\setcounter{totalnumber}{2}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\topfraction}
+% \begin{macro}{bottomfraction}
+% \begin{macro}{\textfraction}
+% Med |\topfraction| och |\bottomfraction| anger vi hur stor andel
+% av den övre respektive undre delen av en textsida som får upptas
+% av flytande objekt. Kommandot |\textfraction| sätter en nedre
+% gräns på hur mycket text det måste förekomma på en textsida.
+% \begin{macrocode}
+\renewcommand\topfraction{.7}
+\renewcommand\bottomfraction{.3}
+\renewcommand\textfraction{.2}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\floatpagefraction}
+% Sätt en nedre gräns för hur mycket av en sida som måste upptas av
+% flytande objekt innan sidan görs om till en bildsida.
+% \begin{macrocode}
+\renewcommand\floatpagefraction{.5}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\floatsep}
+% \begin{macro}{\textfloatsep}
+% \begin{macro}{\intextsep}
+% Längdparametern |\floatsep| styr avståndet mellan två
+% intilliggande flytande objekt. Avståndet mellan brödtexten och
+% ett flytande objekt, ges av |\textfloatsep|. Avståndet mellan
+% brödtexten och ett flytande objekt som placerats inne i texten ges
+% av |intextsep|.
+% \begin{macrocode}
+\setlength\floatsep{10\p@ \@plus 2\p@ \@minus 1\p@}
+\setlength\textfloatsep{13\p@ \@plus 3\p@ \@minus 3\p@}
+\setlength\intextsep{10\p@ \@plus 2\p@ \@minus 1\p@}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@fptop}
+% \begin{macro}{\@fpsep}
+% \begin{macro}{\@fpbot}
+% Dessa kommandon styr avståndet mellan flytande objekt på en
+% bildsida, enligt följande: överst på sidan infogas |\@fptop|,
+% mellan två flytande objekt används |\@fpsep| och nederst på sidan
+% infogas |\@fpbot|.
+% \begin{macrocode}
+\setlength\@fptop{0\p@ \@plus 1fil}
+\setlength\@fpsep{6\p@ \@plus 2fil}
+\setlength\@fpbot{0\p@ \@plus 1fil}
+%</acta>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{Kolumntitlar och paginering}
+%
+% \begin{macro}{\ps@headings}
+% Sidstil avsedd för huvudtexten. Som kolumntitel använder vi
+% rubrik/titel och mellanrubrik/rubrik på vänster- respektive
+% höger\-sida, beroende på om vi skriver en monografi eller en
+% sammanläggning. Paginering sätts i fotens ytterkant.
+% \begin{macrocode}
+%<*collection|monograph>
+\newcommand{\ps@headings}{%
+ \renewcommand{\@oddhead}{\hfil\small\rightmark}%
+ \renewcommand{\@evenhead}{\small\leftmark\hfil}%
+ \renewcommand{\@oddfoot}{\hfil\thepage}%
+ \renewcommand{\@evenfoot}{\thepage\hfil}%
+ \let\@mkboth\markboth
+%<*monograph>
+ \def\chaptermark##1{\markboth{\thechapter\hspace{.5em}##1}{}}%
+%</monograph>
+ \def\sectionmark##1{\markright{\thesection\hspace{.5em}##1}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ps@noheadings}
+% Sidstil som saknar kolumntitel. Ska först och främst användas i
+% för- och eftertext.
+% \begin{macrocode}
+\newcommand{\ps@noheadings}{%
+ \renewcommand{\@oddhead}{}%
+ \renewcommand{\@evenhead}{}%
+ \renewcommand{\@oddfoot}{\hfil\thepage}%
+ \renewcommand{\@evenfoot}{\thepage\hfil}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter}
+% Kommando för att ange att följande sidor ingår i förtexten. Ingen
+% kolumntitel och paginering i gemena romerska siffror. På första
+% sidan ska innehållsförteckningen infogagas och pagineringen ska
+% inledas med sidan fem.
+% \begin{macrocode}
+\newcommand{\frontmatter}{%
+ \pagestyle{noheadings}%
+ \pagenumbering{roman}%
+ \setcounter{page}{5}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\mainmatter}
+% Inleder huvudtexten med att byta till rätt sidstil, se till att
+% aktuell sida är en högersida och pagineringen nollställs och ges
+% med arabiska siffror.
+% \begin{macrocode}
+\newcommand{\mainmatter}{%
+ \cleardoublepage
+ \pagestyle{headings}
+ \markboth{}{}%
+ \pagenumbering{arabic}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\backmatter}
+% Kommando som inleder eftertexterna. Inga kolumntitlar. Kommer
+% troligtvis inte användas eftersom Växjö University Press gör
+% eftertexterna.
+% \begin{macrocode}
+\newcommand{\backmatter}{%
+ \pagestyle{empty}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\cleardoublepage}
+% Definierar om |\cleardoublepage| så att ingen kolumntitel och
+% paginering sätts ut på en tom vänstersida.
+% \begin{macrocode}
+\def\cleardoublepage{%
+ \clearpage
+ \ifodd\c@page\else
+ \hbox{}\thispagestyle{empty}\newpage
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Redaktionella strukturer}
+%
+% \subsubsection{Rubriker}
+%
+% \begin{macro}{\chaptermark}
+% Kommando som används i defintionen av sidstilen |headings| ovan.
+% \begin{macrocode}
+%<monograph>\newcommand*{\chaptermark}[1]{}
+% \end{macrocode}
+% Notera att |\sectionmark| är redan definierad internt i \LaTeX.
+% \end{macro}
+%
+% \begin{macro}{secnumdepth}
+% \begin{macro}{tocdepth}
+% Styr vilka rubriker som ska numreras och hamna i
+% innehållsförteckningen.
+% \begin{macrocode}
+\setcounter{secnumdepth}{1}
+\setcounter{tocdepth}{1}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{part}
+% \begin{macro}{chapter}
+% \begin{macro}{section}
+% \begin{macro}{subsection}
+% \begin{macro}{paragraph}
+% Deklarerar heltalsvariabler för respektive rubrik.
+% \begin{macrocode}
+\newcounter{part}
+%<monograph>\newcounter{chapter}
+%<monograph>\newcounter{section}[chapter]
+%<collection>\newcounter{section}
+\newcounter{subsection}[section]
+\newcounter{paragraph}[subsection]
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\thepart}
+% \begin{macro}{\thechapter}
+% \begin{macro}{\thesection}
+% \begin{macro}{\thesubsection}
+% \begin{macro}{\theparagraph}
+% Definierar representationen av heltalsvariablerna ovan.
+% \begin{macrocode}
+\renewcommand\thepart{\@Roman\c@part}
+%<monograph>\renewcommand\thechapter{\@arabic\c@chapter}
+%<monograph>\renewcommand\thesection{\thechapter.\@arabic\c@section}
+%<collection>\renewcommand\thesection{\@arabic\c@section}
+\renewcommand\thesubsection{\thesection.\@arabic\c@subsection}
+\renewcommand\theparagraph{\thesubsection.\@arabic\c@paragraph}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@chapapp}
+% Deklarerar den namnparameter som internt används av |\chapter|.
+% \begin{macrocode}
+%<monograph>\newcommand\@chapapp{\chaptername}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\part}
+% Kommandot |\part| används för att dela upp innehållet i delar.
+% Varje rubrik till en del ska typsättas på en egen sida.
+% \begin{macrocode}
+\newcommand{\part}{%
+ \if@openright
+ \cleardoublepage
+ \else
+ \clearpage
+ \fi
+ \thispagestyle{empty}%
+ \secdef\@part\@spart
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@part}
+% Det kommando som utför själva typsättningen av |\part|.
+% \begin{macrocode}
+\def\@part[#1]#2{%
+ \ifnum \c@secnumdepth >-2\relax
+ \refstepcounter{part}%
+ \addcontentsline{toc}{part}{\thepart\hspace{.75em}#1}%
+ \else
+ \addcontentsline{toc}{part}{#1}%
+ \fi
+%<collection> \markboth{\partname\space\thepart:\hspace{.5em}#1}{}%
+ \begin{flushright}
+ \null
+ \vskip2cm
+ \bfseries
+ \LARGE
+ \partname\nobreakspace\thepart
+ \par
+ \vskip3ex
+ \huge
+ #2
+ \end{flushright}
+ \@endpart
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@spart}
+% Det kommando som utför själva typsättningen av |\part*|.
+% \begin{macrocode}
+\def\@spart#1{%
+ \markboth{#1}{}%
+ \addcontentsline{toc}{part}{#1}%
+ \begin{flushright}
+ \null
+ \vskip2cm
+ \bfseries
+ \LARGE
+ \vphantom{\partname\nobreakspace\thepart}%
+ \par
+ \vskip3ex
+ \huge
+ #1
+ \end{flushright}
+ \@endpart
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@endpart}
+% Avslutar |\@part| och |\@spart|.
+% \begin{macrocode}
+\def\@endpart{%
+ \vfil\newpage
+ \if@openright
+ \null
+ \thispagestyle{empty}%
+ \newpage
+ \fi
+}
+%</collection|monograph>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\chapter}
+% En rubrik som infogas med |\chapter| typsätts olika beroende
+% vilken av klassalternativen |chapterstyle| eller |sectionstyle|
+% man valt.
+% \begin{macrocode}
+%<*monograph>
+\newcommand{\chapter}{%
+ \if@openright
+ \cleardoublepage
+ \else
+ \clearpage
+ \fi
+ \thispagestyle{plain}%
+ \global\@topnum\z@
+ \@afterindentfalse
+ \secdef\@chapter\@schapter
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@chapter}
+% Anropas för typsättning av numrerade kapitelrubriker. Kommandot
+% |\m@ne| är definierad som konstanten $-1$.
+% \begin{macrocode}
+\def\@chapter[#1]#2{%
+ \ifnum\c@secnumdepth>\m@ne
+ \refstepcounter{chapter}%
+ \typeout{\@chapapp\space\thechapter.}%
+ \addcontentsline{toc}{chapter}{%
+ \protect\numberline{\thechapter}#1%
+ }%
+ \else
+ \addcontentsline{toc}{chapter}{#1}%
+ \fi
+ \chaptermark{#1}%
+ \addtocontents{lof}{\protect\addvspace{4\p@}}%
+ \addtocontents{lot}{\protect\addvspace{4\p@}}%
+ \@makechapterhead{#2}%
+ \@afterheading
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@makechapterhead}
+% Själva typsättningen av numrerade kapitelrubriker.
+% \begin{macrocode}
+\def\@makechapterhead#1{%
+ \vspace*{40\p@}%
+ {\parindent \z@ \raggedright \normalfont\bfseries
+ \ifnum\c@secnumdepth>\m@ne
+ {\Large\slshape\@chapapp\space\thechapter}%
+ \else
+ \null
+ \fi
+ \par\nobreak
+ \vskip 10\p@
+ \interlinepenalty\@M
+ \LARGE #1\par\nobreak
+ \vskip 30\p@
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@schapter}
+% Anropas för typsättning av onumrerade kapitelrubriker.
+% \begin{macrocode}
+\def\@schapter#1{%
+ \@makeschapterhead{#1}%
+ \@afterheading
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@makeschapterhead}
+% Själva typsättningen av onumrerade kapitelrubriker.
+% \begin{macrocode}
+\def\@makeschapterhead#1{%
+ \vspace*{40\p@}%
+ {\parindent \z@ \raggedright \normalfont\bfseries
+ \null\par\nobreak
+ \vskip 10\p@
+ \interlinepenalty\@M
+ \LARGE #1\par\nobreak
+ \vskip 30\p@
+ }%
+}
+%</monograph>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\section}
+% \begin{macro}{\subsection}
+% \begin{macro}{\paragraph}
+% Övriga rubrikkommandon är detsamma för båda dokumenttyperna.
+% \begin{macrocode}
+%<*collection|monograph>
+\newcommand{\section}{\@startsection{section}{1}{\z@}%
+ {-3ex \@plus -1ex \@minus -.2ex}%
+ {2ex \@plus .2ex}%
+ {\normalfont\Large\bfseries}%
+}
+\newcommand{\subsection}{\@startsection{subsection}{2}{\z@}%
+ {-2.25ex\@plus -1ex \@minus -.2ex}%
+ {1ex \@plus .2ex}%
+ {\normalfont\large\bfseries}%
+}
+\newcommand{\paragraph}{\@startsection{paragraph}{3}{\z@}%
+ {-1.75ex \@plus -.75ex \@minus -.2ex}%
+ {.7ex \@plus .2ex}%
+ {\normalfont\normalsize\bfseries}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@seccntformat}
+% Minskar avståndet mellan numrering och text i rubriker.
+% \begin{macrocode}
+\renewcommand\@seccntformat[1]{\csname the#1\endcsname\hspace{.5em}}
+%</collection|monograph>
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Försättssidor i sammanläggningsavhandlingar}
+%
+% \begin{macro}{\papertitle}
+% \begin{macro}{\@papertitle}
+% \begin{macro}{\@shortpapertitle}
+% \begin{macro}{\papersubtitle}
+% \begin{macro}{\@papersubtitle}
+% \begin{macro}{\paperauthor}
+% \begin{macro}{\@paperauthor}
+% \begin{macro}{\papernotes}
+% \begin{macro}{\@papernotes}
+% Kommandon för att deklarera information om en uppsats eller
+% artikel, såsom titel, undertitel, författare och allmän
+% information, som till exempel var den är publicerad.
+% \begin{macrocode}
+%<*collection>
+\newcommand*\papertitle[2][\DefaultOpt]{%
+ \gdef\@papertitle{#2}%
+ \def\DefaultOpt{#2}%
+ \gdef\@shortpapertitle{#1}%
+}
+\papertitle{}
+\newcommand*\papersubtitle[1]{\gdef\@papersubtitle{#1}}
+\papersubtitle{}
+\newcommand*\paperauthor[1]{\gdef\@paperauthor{#1}}
+\paperauthor{}
+\newcommand*\papernotes[1]{\gdef\@papernotes{#1}}
+\papernotes{}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\papername}
+% Typ av dokument som sammanläggs.
+% \begin{macrocode}
+\newcommand{\papername}{Paper}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{paper}
+% \begin{macro}{\makefrontpage}
+% Heltalsparameter och kommando för numrering respektive typsättning
+% av försättssida.
+% \begin{macrocode}
+\newcounter{paper}
+\renewcommand\thepaper{\@Roman\c@paper}
+\newcommand\makefrontpage{%
+ \if@openright
+ \cleardoublepage
+ \else
+ \clearpage
+ \fi
+ \thispagestyle{empty}%
+ \refstepcounter{paper}%
+% \end{macrocode}
+% Nollställ numrering av rubriker och fotnoter.
+% \begin{macrocode}
+ \setcounter{section}{0}%
+ \setcounter{subsection}{0}%
+ \setcounter{paragraph}{0}%
+ \setcounter{footnote}{0}%
+% \end{macrocode}
+% Vi använder layout som |\part|, för att får enhetligt utseende.
+% \begin{macrocode}
+ \begin{flushright}
+ \null
+ \vskip2cm
+ \bfseries
+ \LARGE
+ \papername\nobreakspace\thepaper
+ \par
+ \vskip3ex
+ \huge
+ \@papertitle
+ \par
+ \vskip1.5ex
+ \Large
+% \end{macrocode}
+% Infoga undertitel, om en sådan är given.
+% \begin{macrocode}
+ \ifx\@empty\@papersubtitle
+ \null
+ \else
+ \@papersubtitle
+ \fi
+ \par
+ \vskip4ex
+% \end{macrocode}
+% Lägg till titel i innehållsförteckningen och kolumntitel.
+% \begin{macrocode}
+ \addcontentsline{toc}{part}{\thepaper\hspace{.75em}\@papertitle}%
+ \markboth{%
+ \papername\space\thepaper:\hspace{.5em}\@shortpapertitle
+ }{}%
+% \end{macrocode}
+% Infoga författare.
+% \begin{macrocode}
+ \ifx\@empty\@paperauthor\else
+ \large
+ \begin{tabular}[t]{r@{}}
+ \@paperauthor
+ \end{tabular}
+ \fi
+ \end{flushright}
+% \end{macrocode}
+% Längst ned på sidan placeras övrig information.
+% \begin{macrocode}
+ \ifx\@empty\@papernotes\else
+ \vfill
+ \bgroup
+ \small
+ \@papernotes
+ \egroup
+ \fi
+ \cleardoublepage
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\about}
+% \begin{macro}{\and}
+% Kommandon för användning i |\paperauthor|.
+% \begin{macrocode}
+\def\about#1{%
+ \\
+ \textnormal{\textit{#1}}%
+}
+\def\and{%
+ \end{tabular}%
+ \vspace{2ex}\par
+ \begin{tabular}[t]{r@{}}%
+}
+%</collection>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%\subsubsection{Allmänna parametrar för listor}\label{sec:listor}
+%
+% \begin{macro}{\leftmargin}
+% \begin{macro}{\leftmargini}
+% \begin{macro}{\leftmarginii}
+% \begin{macro}{\leftmarginiii}
+% \begin{macro}{\leftmarginiv}
+% \begin{macro}{\leftmarginv}
+% \begin{macro}{\leftmarginvi}
+% Dimensionen på vänstermarginalen i listor.
+% \begin{macrocode}
+%<*acta>
+\setlength\leftmargini{2em}
+\leftmargin\leftmargini
+\setlength\leftmarginii{1.8em}
+\setlength\leftmarginiii{1.5em}
+\setlength\leftmarginiv{1.7em}
+% \end{macrocode}
+% Följande två längdparametrar kommer troligtvis aldrig att användas,
+% men eftersom de är givna i kärnan till \LaTeX\ tar vi med dem.
+% \begin{macrocode}
+\setlength\leftmarginv{1em}
+\setlength\leftmarginvi{1em}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\labelsep}
+% \begin{macro}{\labelwidth}
+% Avståndet mellan markering och text i lista, samt bredden på
+% markeringen.
+% \begin{macrocode}
+\setlength\labelsep{.5em}
+\setlength\labelwidth{\leftmargini}
+\addtolength\labelwidth{-\labelsep}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\partopsep}
+% När man infogar en tom rad innan en listomgivning, så skjuts en
+% |\partopsep| in tillsammans med |\parskip| och |\topsep|.
+% \begin{macrocode}
+\setlength\partopsep{2\p@ \@plus 1\p@ \@minus 1\p@}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@beginparpenalty}
+% \begin{macro}{\@enparpenalty}
+% \begin{macro}{\@itempenalty}
+% Tillåt sidbrytning precis före och efter en lista, samt mellan två
+% avsnitt i en lista.
+% \begin{macrocode}
+\@beginparpenalty-\@lowpenalty
+\@endparpenalty-\@lowpenalty
+\@itempenalty-\@lowpenalty
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@listi}
+% \begin{macro}{\@listI}
+% Kommandot |\@listi| sätter |\leftmargin|, |\parsep|, |topsep| och
+% |\itemsep|. Med |\@listI| sparar vi standardvärdena, så att man med
+% |\normalsize| kan gå tillbaka till dessa.
+% \begin{macrocode}
+\def\@listi{%
+ \leftmargin\leftmargini
+ \parsep 2\p@ \@plus2\p@ \@minus\p@
+ \topsep 6\p@ \@plus2\p@ \@minus4\p@
+ \itemsep 2\p@ \@plus2\p@ \@minus\p@
+}
+\let\@listI\@listi
+\@listi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@listii}
+% \begin{macro}{\@listiii}
+% \begin{macro}{\@listiv}
+% \begin{macro}{\@listv}
+% \begin{macro}{\@listvi}
+% Övriga listnivåer. Dessa modifieras inte av |\normalsize| eller
+% något linande kommando och därför bör nästlade listor endast
+% användas i huvudtexten.
+% \begin{macrocode}
+\def\@listii {%
+ \leftmargin\leftmarginii
+ \labelwidth\leftmarginii
+ \advance\labelwidth-\labelsep
+ \topsep 3\p@ \@plus2\p@ \@minus\p@
+ \parsep 2\p@ \@plus\p@ \@minus\p@
+ \itemsep\parsep
+}
+\def\@listiii{%
+ \leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii
+ \advance\labelwidth-\labelsep
+ \topsep 2\p@ \@plus\p@\@minus\p@
+ \parsep \z@
+ \partopsep \p@ \@plus\z@ \@minus\p@
+ \itemsep\topsep
+}
+\def\@listiv{%
+ \leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv
+ \advance\labelwidth-\labelsep
+}
+\def\@listv{%
+ \leftmargin\leftmarginv
+ \labelwidth\leftmarginv
+ \advance\labelwidth-\labelsep
+}
+\def\@listvi{%
+ \leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi
+ \advance\labelwidth-\labelsep
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Numrerade listor}
+%
+% \begin{macro}{\theenumi}
+% \begin{macro}{\theenumii}
+% \begin{macro}{\theenumiii}
+% \begin{macro}{\theenumiv}
+% Represenation av markörer på respektive listnivå.
+% \begin{macrocode}
+\renewcommand\theenumi{\@arabic\c@enumi}
+\renewcommand\theenumii{\@alph\c@enumii}
+\renewcommand\theenumiii{\@roman\c@enumiii}
+\renewcommand\theenumiv{\@Alph\c@enumiv}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\labelenumi}
+% \begin{macro}{\labelenumii}
+% \begin{macro}{\labelenumiii}
+% \begin{macro}{\labelenumiv}
+% Hur varje markör ska skrivas ut -- alltid i rak stil.
+% \begin{macrocode}
+\newcommand\labelenumi{\textup{\theenumi.}}
+\newcommand\labelenumii{\textup{(\theenumii)}}
+\newcommand\labelenumiii{\textup{\theenumiii.}}
+\newcommand\labelenumiv{\textup{\theenumiv.}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\p@enumii}
+% \begin{macro}{\p@enumiii}
+% \begin{macro}{\p@enumiv}
+% Hur |\ref| ska typsätta korsreferenser till ett avsnitt i en
+% lista.
+% \begin{macrocode}
+\renewcommand\p@enumii{\textup{\theenumi}}
+\renewcommand\p@enumiii{\textup{\theenumi(\theenumii)}}
+\renewcommand\p@enumiv{\textup{\p@enumiii\theenumiii}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Punktlistor}
+%
+% \begin{macro}{\labelitemi}
+% \begin{macro}{\labelitemii}
+% \begin{macro}{\labelitemiii}
+% \begin{macro}{\labelitemiv}
+% Olika ornament på respektive listnivå.
+% \begin{macrocode}
+\newcommand\labelitemi{\textbullet}
+\newcommand\labelitemii{\normalfont\bfseries\textendash}
+\newcommand\labelitemiii{\textasteriskcentered}
+\newcommand\labelitemiv{\textperiodcentered}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%\subsubsection{Gloslistor}
+%
+% \begin{macro}{description}
+% Listomgivning för glosor, ordförklaringar med mera.
+% \begin{macrocode}
+\newenvironment{description}{%
+ \list{}{%
+ \labelwidth\z@
+ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel
+ }%
+}{%
+ \endlist
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\descriptionlabel}
+% Formatering av markör i |description|.
+% \begin{macrocode}
+\newcommand*\descriptionlabel[1]{%
+ \hspace\labelsep
+ \normalfont\bfseries #1
+}
+% \end{macrocode}
+% \end{macro}
+%
+%\subsubsection{Citat}
+%
+% \begin{macro}{quotation}
+% Omgivning för citat, där första raden sätts med indrag.
+% \begin{macrocode}
+\newenvironment{quotation}{%
+ \list{}{%
+ \listparindent 1.5em%
+ \itemindent \listparindent
+ \rightmargin \leftmargin
+ \parsep \z@ \@plus\p@
+ }%
+ \item\relax
+}{%
+ \endlist
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{quote}
+% Omgivning lik |quotation|, fast utan indrag av första raden.
+% \begin{macrocode}
+\newenvironment{quote}{%
+ \list{}{
+ \rightmargin\leftmargin
+ }%
+ \item\relax
+}{%
+ \endlist
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Bilagor}
+%
+% \begin{macro}{\appendix}
+% Kommando som inleder bilagor, genom att nollställa om
+% kapitelnumrering och ändra represenationerna till versala latinska
+% bokstäver.
+% \begin{macrocode}
+\newcommand\appendix{%
+ \par
+ \if@collection\else
+ \setcounter{chapter}{0}%
+ \fi
+ \setcounter{section}{0}%
+ \setcounter{subsection}{0}%
+ \setcounter{paragraph}{0}%
+ \gdef\@chapapp{\appendixname}%
+ \gdef\thechapter{\@Alph\c@chapter}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Dimensioner i existerande omgivningar}
+%
+% \begin{macro}{\arraycolsep}
+% \begin{macro}{\tabcolsep}
+% \begin{macro}{\arrayrulewidth}
+% \begin{macro}{\doublerulesep}
+% Olika avstånd i tabeller.
+% \begin{macrocode}
+\setlength\arraycolsep{5\p@}
+\setlength\tabcolsep{6\p@}
+\setlength\arrayrulewidth{.4\p@}
+\setlength\doublerulesep{2\p@}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\tabbingsep}
+% Styr hur mycket mellanrum som |\'| ska infoga i |tabbing|.
+% \begin{macrocode}
+\setlength\tabbingsep{\labelsep}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@mpfootins}
+% Fotnoter i |minipage| ska säras lika mycket ifrån varandra som
+% standard.
+% \begin{macrocode}
+\skip\@mpfootins = \skip\footins
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\fboxsep}
+% \begin{macro}{\fboxrule}
+% Dimensioner för |\fbox|.
+% \begin{macrocode}
+\setlength\fboxsep{3\p@}
+\setlength\fboxrule{.4\p@}
+%</acta>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Sammanfattning}
+%
+% \begin{macro}{abstract*}
+% \begin{macro}{abstract}
+% \begin{macro}{\keywordsname}
+% \begin{macro}{\keywords}
+% \begin{macro}{\@keywords}
+% Omgivning för typsättning av sammanfattning, där med |abstract*|
+% hamnar inte rubriken i innehållsförteckningen.
+% \begin{macrocode}
+%<*collection|monograph>
+\newenvironment{abstract*}{%
+ \begin{center}%
+ \bfseries\abstractname\vspace{-1.5ex}\vspace{\z@}
+ \end{center}%
+ \quotation
+ }{%
+ \ifx\@keywords\empty\else
+ \par\medskip
+ \noindent
+ \textbf{\keywordsname:} \@keywords
+ \fi
+ \endquotation
+}
+\newenvironment{abstract}{%
+ \begin{abstract*}%
+%<monograph> \addcontentsline{toc}{chapter}{\abstractname}%
+%<collection> \addcontentsline{toc}{section}{\abstractname}%
+ \thispagestyle{plain}%
+ }{%
+ \end{abstract*}%
+}
+\newcommand{\keywordsname}{Keywords}
+\def\@keywords{}
+\def\keywords#1{\gdef\@keywords{#1}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Erkännanden}
+%
+% \begin{macro}{acknowledgments*}
+% \begin{macro}{acknowledgments}
+% \begin{macro}{\acknowledgmentsname}
+% Omgivning för erkännanden.
+% \begin{macrocode}
+\newenvironment{acknowledgments*}{%
+ \begin{center}%
+ \bfseries\acknowledgmentsname\vspace{-1.5ex}\vspace{\z@}
+ \end{center}%
+ \quotation
+ }{%
+ \endquotation
+}
+\newenvironment{acknowledgments}{%
+ \begin{acknowledgments*}%
+%<monograph> \addcontentsline{toc}{chapter}{\acknowledgmentsname}%
+%<collection> \addcontentsline{toc}{section}{\acknowledgmentsname}%
+ \thispagestyle{plain}%
+ }{%
+ \end{acknowledgments*}%
+}
+\newcommand{\acknowledgmentsname}{Acknowledgments}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{Numrering av fristående formler}
+%
+% \begin{macro}{\theequation}
+% Fristående formler ska numreras med avseende på |\chapter| eller
+% |\section|, beroende på om man skriver en monografi respektive
+% sammanläggning.
+% \begin{macrocode}
+%<collection>\@addtoreset{equation}{section}
+%<monograph>\@addtoreset{equation}{chapter}
+\renewcommand\theequation{%
+%<collection> \ifnum\c@section>\z@ \thesection.\fi \@arabic\c@equation
+%<monograph> \ifnum\c@chapter>\z@ \thechapter.\fi \@arabic\c@equation
+}
+% \def\@eqnnum{(\theequation)}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Flytande bilder}
+%
+% \begin{macro}{figure}
+% Figurer numreras med avseende på |\chapter| (eller |\section|).
+% \begin{macrocode}
+%<collection>\newcounter{figure}[section]
+%<monograph>\newcounter{figure}[chapter]
+\renewcommand\thefigure{%
+%<collection> \ifnum\c@section>\z@ \thesection.\fi \@arabic\c@figure
+%<monograph> \ifnum\c@chapter>\z@ \thechapter.\fi \@arabic\c@figure
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{fps@figure}
+% \begin{macro}{ftype@figure}
+% \begin{macro}{\ext@figure}
+% \begin{macro}{\fnum@figure}
+% De parametrar som styr typsättning av flytande bilder. I tur och
+% ordning deklarerar vi placering, internt identifikationsnummer,
+% filändelse för innehållsförteckning och rubriken för bildtext.
+% \begin{macrocode}
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{\figurename\nobreakspace\thefigure}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{figure}
+% Omgivningen för flytande bilder. I standardklasserna definieras
+% även |figure*| för typsättning i två kolumner.
+% \begin{macrocode}
+\newenvironment{figure}{%
+ \@float{figure}%
+}{%
+ \end@float
+}
+% \end{macrocode}
+% \end{macro}
+%
+%\subsubsection{Flytande tabeller}
+%
+% \begin{macro}{table}
+% Även tabeller numreras med avseende på |\chapter| (eller
+% |\section|).
+% \begin{macrocode}
+%<collection>\newcounter{table}[section]
+%<monograph>\newcounter{table}[chapter]
+\renewcommand\thetable{%
+%<collection> \ifnum\c@section>\z@ \thesection.\fi \@arabic\c@table
+%<monograph> \ifnum\c@chapter>\z@ \thechapter.\fi \@arabic\c@table
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\fps@table}
+% \begin{macro}{\ftype@table}
+% \begin{macro}{\ext@table}
+% \begin{macro}{\fnum@table}
+% De parametrar som styr flytande tabeller (se motsvarande för
+% bilder ovan).
+% \begin{macrocode}
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{\tablename\nobreakspace\thetable}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{table}
+% Själva omgivningen för flytande tabeller. I standardklasserna
+% definieras även |table*| för typsättning i två kolumner.
+% \begin{macrocode}
+\newenvironment{table}{%
+ \@float{table}%
+}{%
+ \end@float
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Bild- och tabelltext}
+%
+% \begin{macro}{\abovecaptionskip}
+% \begin{macro}{\belowcaptionskip}
+% Längdparametrar för styrning av avstånd före och efter bild- och
+% tabelltext.
+% \begin{macrocode}
+\newlength\abovecaptionskip
+\newlength\belowcaptionskip
+\setlength\abovecaptionskip{4\p@}
+\setlength\belowcaptionskip{0\p@}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\captionwidth}
+% \begin{macro}{\@makecaption}
+% Kommandot |\caption| anropar |\@makecapion| med två argument: dels
+% det interna identifikationsnumret för aktuell flytande objekt och
+% dels själva texten. Med |\captionwidth| styr man hur bred
+% bildtexten ska vara.
+% \begin{macrocode}
+\newlength\captionwidth
+\setlength{\captionwidth}{0.7\textwidth}
+\long\def\@makecaption#1#2{%
+ \vskip\abovecaptionskip
+ \sbox\@tempboxa{\small\textbf{#1:} #2}%
+ \ifdim \wd\@tempboxa >\captionwidth
+ \hb@xt@\hsize{\hfil
+ \parbox[t]{\captionwidth}{\small\textbf{#1:} #2}%
+ \hfil
+ }\par
+ \else
+ \global \@minipagefalse
+ \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
+ \fi
+ \vskip\belowcaptionskip
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Korsreferenser}
+%
+%\subsubsection{Innehållsförteckning}
+%
+% \begin{macro}{\@pnumwidth}
+% \begin{macro}{\@tocrmarg}
+% \begin{macro}{\@dotsep}
+% Bredden på box i vilken sidnumret sätts, högermarginalen för
+% referenser som går över flera rader och avståndet mellan punkter.
+% \begin{macrocode}
+\newcommand\@pnumwidth{1.55em}
+\newcommand\@tocrmarg{2.55em}
+\newcommand\@dotsep{4.5}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\tableofcontents}
+% Typsätter innehållsförteckningen.
+% \begin{macrocode}
+\newcommand\tableofcontents{%
+%<collection> \newpage\section*{\contentsname}
+%<monograph> \chapter*{\contentsname}
+ \@mkboth{\contentsname}{\contentsname}%
+ \@starttoc{toc}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l@part}
+% Hur rubriker infogade med |\part| ska typsättas i
+% innehållsförteckningen. Till att börja med ser vi till att om
+% sidbrytning måste ge så ska det ske innan referensen. Därefter
+% lägger till ett vertikalt mellanrum.
+% \begin{macrocode}
+\newcommand*\l@part[2]{%
+ \addpenalty\@secpenalty
+ \addvspace{.75em \@plus\p@}%
+% \end{macrocode}
+% För att kommandot |\numberline| ska fungerar måste bredden på
+% sidnumret vara lagrat i |\@tempdima|.
+% \begin{macrocode}
+ \setlength\@tempdima{3em}%
+ \begingroup
+% \end{macrocode}
+% Inget indrag och lämna plats för sidnumret. Genom att ge
+% |\parfillskip| ett negativt värde slipper vi varningsmeddelande om
+% ''overfull boxes''.
+% \begin{macrocode}
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+% \end{macrocode}
+% Typsätt själva listreferensen.
+% \begin{macrocode}
+ {%
+ \leavevmode
+ \normalsize\bfseries
+ #1\hfil \hb@xt@\@pnumwidth{\hss #2}%
+ }\par
+% \end{macrocode}
+% Förhindra sidbrytning direkt efter referensen.
+% \begin{macrocode}
+ \nobreak
+ \global\@nobreaktrue
+ \everypar{\global\@nobreakfalse\everypar{}}%
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l@chapter}
+% \begin{macro}{\l@section}
+% \begin{macro}{\l@subsection}
+% \begin{macro}{\l@paragraph}
+% Hur övriga rubriker ska typsättas i innehållsförteckningen.
+% \begin{macrocode}
+%<collection>\newcommand*\l@section[2]{%
+%<monograph>\newcommand*\l@chapter[2]{%
+ \addpenalty\@secpenalty
+ \setlength\@tempdima{1.5em}%
+ \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \leavevmode
+ \advance\leftskip\@tempdima
+ \hskip -\leftskip
+ #1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par
+ \endgroup
+}
+%<collection>\newcommand*\l@subsection{%
+%<monograph>\newcommand*\l@section{%
+ \@dottedtocline{1}{1.5em}{2.3em}%
+}
+%<collection>\newcommand*\l@paragraph{%
+%<monograph>\newcommand*\l@subsection{%
+ \@dottedtocline{2}{3.8em}{3.2em}%
+}
+%<monograph>\newcommand*\l@paragraph{\@dottedtocline{3}{10em}{5em}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Figurförteckning}
+%
+% \begin{macro}{\listoffigures}
+% Typsätter en figurförteckning.
+% \begin{macrocode}
+\newcommand\listoffigures{%
+%<collection> \section*{\listfigurename}%
+%<monograph> \chapter*{\listfigurename}%
+ \@mkboth{\listfigurename}{\listfigurename}%
+ \@starttoc{lof}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l@figure}
+% Hur listreferenser till figurer ska typsättas.
+% \begin{macrocode}
+\newcommand*\l@figure{\@dottedtocline{1}{0pt}{2.3em}}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Tabellförteckning}
+%
+% \begin{macro}{\listoftables}
+% För att infoga en förteckning över tabeller.
+% \begin{macrocode}
+\newcommand\listoftables{%
+%<collection> \section*{\listtablename}%
+%<monograph> \chapter*{\listtablename}%
+ \@mkboth{\listtablename}{\listtablename}%
+ \@starttoc{lot}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l@figure}
+% Listreferenser till tabeller ska typsättas på samma sätt som till
+% figurer.
+% \begin{macrocode}
+\let\l@table\l@figure
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Litteraturförteckning}
+%
+% \begin{macro}{thebibliography}
+% Omgivning för typsättning av litteraturförteckning.
+% \begin{macrocode}
+\newenvironment{thebibliography}[1]{%
+%<collection> \section*{\bibname}%
+%<monograph> \chapter*{\bibname}%
+ \@mkboth{\bibname}{\bibname}%
+%<collection> \addcontentsline{toc}{section}{\bibname}%
+%<monograph> \addcontentsline{toc}{chapter}{\bibname}%
+ \list{\@biblabel{\@arabic\c@enumiv}}{%
+ \settowidth\labelwidth{\@biblabel{#1}}%
+ \leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumiv}%
+ \let\p@enumiv\@empty
+ \renewcommand\theenumiv{\@arabic\c@enumiv}%
+ }%
+ \sloppy
+ \clubpenalty4000
+ \@clubpenalty \clubpenalty
+ \widowpenalty4000%
+ \sfcode`\.\@m
+}{%
+ \def\@noitemerr
+ {\@latex@warning{Empty `thebibliography' environment}}%
+ \endlist
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\newblock}
+% Avstånd mellan olika poster i en litteraturreferens.
+% \begin{macrocode}
+\newcommand\newblock{\hskip .11em\@plus.33em\@minus.07em}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@biblabel}
+% \begin{macro}{\@cite}
+% Använd de fördefinierade versionerna av hur referenser ska
+% typsättas.
+% \begin{macrocode}
+%\renewcommand*\@biblabe[1]{[#1]\hfill}
+%\renewcommand*\@cite[1]{[#1]}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Fotnoter}
+%
+% \begin{macro}{\footnoterule}
+% Den linje som sätts mellan huvudtext och fotnot.
+% \begin{macrocode}
+\renewcommand\footnoterule{%
+ \kern-3\p@
+ \hrule\@width.25\columnwidth
+ \kern2.6\p@
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{footnote}
+% Räknaren för fotnoter ska nollställas vid varje nytt kapitel.
+% \begin{macrocode}
+%<collection>\@addtoreset{footnote}{section}
+%<monograph>\@addtoreset{footnote}{chapter}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@makefntext}
+% Det kommando som tysätter fotnoten.
+% \begin{macrocode}
+\newcommand\@makefntext[1]{%
+ \parindent 1em%
+ \noindent
+ \hb@xt@1.2em{\hss\@makefnmark}\hspace{.1em}#1
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@makefnmark}
+% Kommandot för typsättning av markören för fotnoten inne i texten.
+% Vi använder den fördefinierad definitionen.
+% \begin{macrocode}
+%\renewcommand\@makefnmark{%
+% \hbox{\@textsuperscript{\normalfont\@thefnmark}}%
+%}
+%</collection|monograph>
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Initiering}
+%
+% \begin{macro}{\contentsname}
+% \begin{macro}{\listfigurename}
+% \begin{macro}{\listtablename}
+% \begin{macro}{\bibname}
+% \begin{macro}{\indexname}
+% Förvalda rubriker.
+% \begin{macrocode}
+%<*acta>
+\newcommand\contentsname{Contents}
+\newcommand\listfigurename{List of Figures}
+\newcommand\listtablename{List of Tables}
+\newcommand\bibname{Bibliography}
+\newcommand\indexname{Index}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\figurename}
+% \begin{macro}{\tablename}
+% Rubriker för flytande objekt.
+% \begin{macrocode}
+\newcommand\figurename{Figure}
+\newcommand\tablename{Table}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\partname}
+% \begin{macro}{\chaptername}
+% \begin{macro}{\appendixname}
+% \begin{macro}{\abstractname}
+% Övriga rubriker.
+% \begin{macrocode}
+\newcommand\partname{Part}
+\if@collection\else
+ \newcommand\chaptername{Chapter}
+\fi
+\newcommand\appendixname{Appendix}
+\newcommand\abstractname{Abstract}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\today}
+% Dagens datum.
+% \begin{macrocode}
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \noindent
+% Välj sidstil, typ av paginering och en kolumn.
+% \begin{macrocode}
+\pagestyle{headings}
+\pagenumbering{arabic}
+\onecolumn
+%</acta>
+% \end{macrocode}
+%
+% \section{Schablonfil}
+%
+% En enkel fil att utgår ifrån.
+% \begin{macrocode}
+%<*template>
+\documentclass[]{actawex}
+%% -- preamble --
+\begin{document}
+%% -- no text here --
+\frontmatter
+%% -- the text before the main content --
+\keywords{}
+\begin{abstract}
+\end{abstract}
+\newpage
+\begin{acknowledgments}
+\end{acknowledgments}
+\tableofcontents
+%% \listoffigures
+%% \listoftables
+\mainmatter
+%% -- put your main text here --
+\backmatter
+%% -- no text here --
+\end{document}
+%</template>
+% \end{macrocode}
+%
+% \subsection{Kort om konferenspublikationer}
+%
+% För sammanställning av en konferenspublikation rekomenderas klassen
+% |combine|. Varje artikel typsätts med |actawex|. För att får en
+% enhetligt utseende på t.ex. satser och bevis kan man skapa ett paket
+% som varje författare måste ladda. För att sedan slå samman alla
+% artiklar till en konferenspublikation skapar man en huvudfil:
+% \begin{tabbing}
+% mm\=\kill
+% \>|\documentclass[colclass=actawex,notoc,nolof,nolot]{combine}|\\
+% \>|\begin{document}|\\
+% \>|\tableofcontents|\\
+% \>|\begin{papers}|\\
+% \>|\import{|\meta{artikel$_1$}|}|\\
+% \>|\import{|\meta{artikel$_2$}|}|\\
+% \>\ldots\\
+% \>|\import{|\meta{artikel$_n$}|}|\\
+% \>|\end{papers}|\\
+% \>|\end{document}|
+% \end{tabbing}
+% På detta sätt behöver man inte bryr sig om bl.a. varje
+% |\documentclass| och |\begin{document}| i varje infogad artikel.
+% Grundstrukturen på huvudfilen är följande: För mer information se
+% manualen till \textsf{combine}. Notera att litteraturförteckningen
+% i varje enskild \meta{artikel} bör infogas med |thebibliography|,
+% undvik \textsc{Bib}\TeX.
+%
+% \Finale
+%
+\endinput
diff --git a/obsolete/macros/latex/contrib/vxu/actawex.ins b/obsolete/macros/latex/contrib/vxu/actawex.ins
new file mode 100644
index 0000000000..7ff46b9019
--- /dev/null
+++ b/obsolete/macros/latex/contrib/vxu/actawex.ins
@@ -0,0 +1,47 @@
+%%
+%% Copyright (C) 2007 by Robert Nyqvist
+%%
+%% This file will generate a class for typsetting theses for
+%% publishing in the series Acta Wexionensia.
+%%
+\input docstrip
+
+\declarepreamble\classpreamble
+
+This is a generated file.
+
+Copyright (C) 2007 by Robert Nyqvist.
+
+Class for typesetting theses in Acta Wexionensia.
+
+Any modified versions of this file must be renamed
+with new filenames distinct from \outFileName.
+
+\endpreamble
+
+\keepsilent
+
+\generate{\usepreamble\classpreamble
+ \file{actawex.cls}{\from{actawex.dtx}{acta}}
+ \file{awcollection.clo}{\from{actawex.dtx}{collection}}
+ \file{awmonograph.clo}{\from{actawex.dtx}{monograph}}
+ \file{template.tex}{\from{actawex.dtx}{template}}
+}
+
+\Msg{*************************************************************}
+\Msg{}
+\Msg{To produce the documentation you have to run the file}
+\Msg{`actawex.dtx' twice through LaTeX.}
+\Msg{}
+\Msg{To finish the installation you have to move the following}
+\Msg{file into a directory searched by TeX:}
+\Msg{}
+\Msg{\space\space actawex.cls}
+\Msg{\space\space awcollection.clo}
+\Msg{\space\space awmonograph.clo}
+\Msg{}
+\Msg{The file template.tex show how to use the class.}
+\Msg{}
+\Msg{*************************************************************}
+
+\endbatchfile
diff --git a/obsolete/macros/latex/contrib/vxu/actawex.pdf b/obsolete/macros/latex/contrib/vxu/actawex.pdf
new file mode 100644
index 0000000000..6dab3c19e2
--- /dev/null
+++ b/obsolete/macros/latex/contrib/vxu/actawex.pdf
Binary files differ
diff --git a/obsolete/macros/latex/contrib/vxu/rfmsi.dtx b/obsolete/macros/latex/contrib/vxu/rfmsi.dtx
new file mode 100644
index 0000000000..69006f70c0
--- /dev/null
+++ b/obsolete/macros/latex/contrib/vxu/rfmsi.dtx
@@ -0,0 +1,1086 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2007 by Robert Nyqvist
+%
+% Class for typsetting master theses at School of Mathematics and
+% System Engineering, Växjö University.
+%
+% \fi
+%
+% \iffalse
+%
+% \begin{macrocode}
+%<master>\NeedsTeXFormat{LaTeX2e}[2001/06/01]
+%<master>\ProvidesClass{rfmsi}
+%<*driver|master>
+\ProvidesFile{rfmsi.drv}
+ [2007/05/29 2.1 Class for Reports from MSI]
+%</driver|master>
+% \end{macrocode}
+%
+%<*driver>
+\documentclass[a4paper,oneside]{ltxdoc}
+\usepackage[T1]{fontenc}
+\usepackage[swedish]{babel}
+\usepackage[latin1]{inputenc}
+\usepackage{texnames}
+\newenvironment{decl}{%
+ \par
+ \addvspace{2ex plus .75ex}%
+ \noindent
+ \begin{tabular}{|l|}
+ \hline
+ \ignorespaces
+ }{%
+ \\
+ \hline
+ \end{tabular}%
+ \vspace{1ex}\vskip -\parskip
+ \noindent
+ \ignorespacesafterend
+ \nobreak
+}
+\GetFileInfo{rfmsi.drv}
+\begin{document}
+ \frenchspacing
+ \DocInput{rfmsi.dtx}
+\end{document}
+%</driver>
+%
+% \fi
+%
+% \CheckSum{438}
+%
+% \CharacterTable
+% {Upper-case \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
+% Lower-case \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
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+% \Large\noindent\textbf{Växjö universitet}\normalsize\hspace*{\fill}%
+% \filedate\\
+% \small Matematiska och system-\\
+% tekniska institutionen\\
+% \emph{Robert Nyqvist\bigskip}
+% \begin{center}
+% \bfseries
+% \LARGE
+% Mall för \textit{Rapporter från MSI}\\[.2\baselineskip]
+% \large
+% Dokumentklass för \LaTeXe\\[.3\baselineskip]
+% Version \fileversion
+% \end{center}
+% \normalsize
+%
+% \begin{abstract}
+% Magisterarbeten, för-tryck (\emph{eng}.\ preprint) och andra
+% rapporter som publiceras i rapportserien \emph{Rapporter från MSI}
+% ska då de är typsatta med hjälp av \LaTeXe\ använda
+% dokumentklassen \textsf{rfmsi}. Något stöd för \LaTeX\ 2.09 ges
+% inte. Vi beskriver här både hur denna klass används och hur den är
+% implementerad.
+% \end{abstract}
+%
+% \tableofcontents
+%
+% \section{Anvisningar till dig som författare}
+%
+% Den lokala rapportserien \textit{Rapporter från~MSI} är avsedd för
+% examensarbeten och ''preprints''. För att rapporter publicerade i
+% denna serie ska få ett enhetligt utseende ska du följa anvisningarna
+% i dokumentet \emph{Rapportskrivning}.\footnote{%
+% |www.msi.vxu.se/forskn/exarb/hantering.html|}
+%
+% \section{Manual}
+%
+% Klassen bygger på \textsf{article}. I detta avsnitt beskriver vi de
+% kommandon som är nya eller kommandon som har definierts om, med
+% avseende på \textsf{article}. Dessutom ger vi även några tips att
+% tänka på vid t.ex. typsättning av matematik. Notera att vissa
+% kommandon i \textsf{article} är inaktiva i denna klass. Se även
+% avsnitt~\ref{sec:schablon} på sidan~\pageref{sec:schablon}.
+%
+% \subsection{Initiering}
+%
+% För att använda klassen inleder man sitt dokument med kommandot
+% \begin{decl}
+% |\documentclass|\oarg{alternativ}|{rfmsi}|
+% \end{decl}
+% Flera \meta{alternativ} kan anges, och i så fall åtskiljs dessa med
+% komma\-tecken. Om ingen övergripande styrning av mallen önskas kan
+% hela konstruktionen \oarg{alternativ} utelämnas. Även alternativ som
+% styr paket kan skrivas in i \meta{alternativ}. Klassen har två egna
+% alternativ, |draft| och |final|, med samma betydelse som i
+% standardklasserna. Förvald är |final|.
+%
+% \subsection{Paket som laddas automatiskt}
+%
+% Klassen laddar automatiskt vissa paket, som därför inte behövs
+% laddas en gång till via |\usepackage|. De paket som alltid laddas är
+% \textsf{geometry}, \textsf{graphicx}, \textsf{fancyhdr},
+% \textsf{ifpdf} och \textsf{tocbibind}.
+%
+% \subsection{Att generera PDF}
+%
+% Med pdf\LaTeX\ producerar du en \textsc{pdf}-version av din rapport.
+% Ett annat alternativ är att gå via PostScript. Generera först en
+% \textsc{dvi}-fil med hjälp av \LaTeX. Exekvera därefter kommandot
+% \begin{quote}
+% |dvips -Ppdf -G0 |\meta{\textsc{dvi}-fil}
+% \end{quote}
+% för att skapa en PostScript-fil, och kör till sist kommandot
+% \begin{quote}
+% |ps2pdf -dPDFsettings=/prepress |\meta{PostScript-fil}
+% \end{quote}
+%
+% \subsection{Bilder}
+%
+% Klassen laddar automatiskt paketet \textsf{graphicx} på sådant sätt
+% att du kan infoga antingen bilder i format som passar för \LaTeX\
+% eller för pdf\LaTeX, enligt följande tabell:
+% \begin{center}
+% \begin{tabular}{ll}
+% \LaTeX & \textsc{eps}, \textsc{mps} \\
+% pdf\LaTeX & \textsc{pdf}, \textsc{png}, \textsc{jpg}, \textsc{mps}
+% \end{tabular}
+% \end{center}
+% där filformatet \textsc{mps} är en variant av \textsc{eps} som
+% MetaPost genererar. Det är lämpligt att du sparar varje bild i två
+% olika format, \textsc{eps} och \textsc{pdf}, för att på så sätt få
+% ett dokumentet som är kompatibelt med både \LaTeX\ och pdf\LaTeX.
+%
+% Med programmet |epstopdf| är det enkelt att konvertera bilder från
+% \textsc{eps} till \textsc{pdf}. När en bild infogas utelämnar man
+% filändelsen. Antag till exempel att vi vill infoga en bild som är
+% sparad som |figur.eps|. Genom att exekverar
+% \begin{quote}
+% |epstopdf figur.eps|
+% \end{quote}
+% skapar vi filen |figur.pdf|. Bilden infogas med kommandot
+% \begin{quote}
+% |\includegraphics{figur}|
+% \end{quote}
+% som kommer att använda |figur.eps| respektive |figur.pdf| beroende
+% på om \LaTeX\ eller pdf\LaTeX\ exekveras.
+%
+% \subsection{Typsnitt och språk}
+%
+% Använd kodning av typsnitt som är anpassad för europeiska språk:
+% \begin{quote}
+% |\usepackage[T1]{fontenc}|
+% \end{quote}
+% Laddar de paket som behövs för att använda typsnittet Times. I
+% Times finns inte linjärer eller mekaner utan vi använder Helvetica
+% respektive Courier för dessa:
+% \begin{quote}
+% |\usepackage{mathptmx}|\\
+% |\usepackage[scaled=.9]{helvet}|\\
+% |\usepackage{courier}|
+% \end{quote}
+% I matematiska dokument rekommenderas att du använder Computer
+% Modern, som är standard i \LaTeX. Skriver du på svenska eller om du
+% vill ha med en svensk sammanfattning bör du ladda \textsf{babel}.
+% Det språk som anges sist sätts om standard:
+% \begin{quote}
+% |\usepackage[swedish,english]{babel}|
+% \end{quote}
+% Växla mellan språken med |\selectlanguage| eller omgivningen
+% |otherlanguage|. För att bl.a. kunna skriva bokstäverna å, ä och
+% ö, skriver du:
+% \begin{quote}
+% |\usepackage[latin1]{inputenc}|
+% \end{quote}
+% Arbetar du i en Windows- eller Macintoshmiljö ändrar du |latin1|
+% till |ansinew| respektive |applemac|.
+%
+% \subsection{Titel, författare och sånt}
+%
+% Dokumentspecifika uppgifter som titel, undertitel, författare och så
+% vidare anges med de kommandon som beskrivs i detta avsnitt. Dessa
+% måste komma före |\frontcover| och |\frontmatter|, se nästa avsnitt.
+%
+% \begin{decl}
+% |\title|\oarg{text$_2$}\marg{text$_1$}\\
+% |\subtitle|\oarg{text$_2$}\marg{text$_1$}
+% \end{decl}
+% Deklarerar \meta{text$_1$} att vara titeln respektive undertiteln på
+% dokumentet. Man kan utelämna |\subtitle| om ingen undertitel
+% behövs. Både titel och undertitel hamnar på omslagets framsida och
+% på titelsidan. Argumentet \meta{text$_2$} hamnar på titelsidan och
+% är till för att styra hur en lång titel eller undetitel ska delas
+% upp på flera rader på respektive sida. Om \meta{text$_2$} utelämnas
+% används \meta{text$_1$} även på titelsidan.
+%
+% \begin{decl}
+% |\author|\marg{text}
+% \end{decl}
+% Deklarerar \meta{text} som en eller flera författare. Vid flera
+% författare åtskiljs dessa med |\and|.
+%
+% \begin{decl}
+% |\publmonth|\marg{text}\\
+% |\publyear|\marg{n}
+% \end{decl}
+% Deklarerar \meta{text} och \meta{n} som den månad (förkortad)
+% respektive det år som examensarbetet eller avhandlingen
+% publicerades.
+%
+% \begin{decl}
+% |\discipline|\marg{text}\marg{förkortning}
+% \end{decl}
+% Deklarerar \meta{text} som det ämnesområde som innehållet i
+% dokumentet hör till. Det andra argument är motsvarande förkortning
+% enligt bilaga~E i \emph{Rapportskrivning}.
+%
+% \begin{decl}
+% |\thesistype|\marg{text}\marg{förkortning}
+% \end{decl}
+% Deklarerar \meta{text} att ange typ av arbete. För andra argumentet
+% se bilaga~E i \emph{Rapportskrivning}. Förvalda värden är
+% |Master's Thesis| respektive |E|.
+%
+% \begin{decl}
+% |\reportno|\marg{n}
+% \end{decl}
+% Rapportens löpnummer i serien (fås av seketerare).
+%
+% \subsection{Omslag och startsidor}
+%
+% \begin{decl}
+% |\frontcover|\\
+% |\backcover|
+% \end{decl}
+% Producerar omslagets framsida respektive baksida. För att dessa
+% kommandon ska fungera smärtfritt är det tänkt att de ska placeras
+% först respektive sist i dokumentet. Framsidan följs direkt av en
+% tom sida och baksidan hamnar alltid på en sida med jämnt sidnummer
+% och sidan innan kommer att vara tom.
+%
+% \begin{decl}
+% |\frontmatter|
+% \end{decl}
+% Producerar titelsida följt av en tom sida. Bör följas av
+% sammanfattning, erkännande och innehållsförteckning.
+%
+% \begin{decl}
+% |\mainmatter|
+% \end{decl}
+% Inför vissa inställningar rörande paginering och kolumntitel av
+% huvudtexten. Kommandot placeras lämpligen direkt efter
+% |\tableofcontents|.
+%
+% \subsection{Sammanfattning, nyckelord och erkännande}
+%
+% Använd omgivningen |abstract| för att typsätta sammanfattning och
+% erkännanden. Placera dem mellan |\frontmatter| och
+% |\tableofcontents|. Använd |\selectlanguage| eller |otherlanguage|
+% för att få \LaTeX\ att använda rätt avstavningsspråk. Notera att
+% detta även ger rätt rubrik på sammanfattningarna. Däremot behöver
+% du ändra på rubriken på erkännanden genom att skriva
+% \begin{quote}
+% |\renewcommand{\abstractname}{Acknowledgments}|
+% \end{quote}
+%
+% \begin{decl}
+% |\begin{keywords}|\oarg{rubrik} \meta{text} |\end{keywords}|
+% \end{decl}
+% Omgivnig för typsättning av nyckelord. Bör placeras direkt efter
+% sammanfattning. Med \meta{rubrik} styr du rubriken och
+% \oarg{rubrik} utelämnas används ''Key-words'' som standard.
+%
+%
+% \subsection{Matematik}
+%
+% Vid typsättning av matematik bör du använda \AMSLaTeX, speciellt
+% paketen \textsf{amsmath}, \textsf{amssymb} och \textsf{amsthm}.
+% Även \textsf{mathtools} rekommenderas.
+%
+% Paketet \textsf{amsthm} ger oss möjlighet att typsätta satser och
+% liknande. Det åstadkommer vi genom att deklarera några olika
+% omgivningar:
+% \begin{quote}
+% |\theoremstyle{plain}|\\
+% |\newtheorem{theorem}{Theorem}[section]|\\
+% |\newtheorem{lemma}[theorem]{Lemma}|\\
+% |\newtheorem*{corollary}{Corollary}|
+% \end{quote}
+% Omgivningen för satser nollställs vid varje |\section| och
+% omgivningen för lemmor använder samma räknare som för satser.
+% Däremot numreras inte följdsatser. Om t.ex. en sats har ett
+% specifikt namn, som till exempel ''Zorn's Lemma'', så skriver man:
+% \begin{quote}
+% |\begin{lemma}[Zorn's Lemma]|
+% \end{quote}
+% Hakparentesen kan utelämnas. Det finns även andra stilar, via
+% |\theoremstyle|, som t.ex. |definition| och |remark|.
+%
+% I \textsf{amsthm} finns omgivningen |proof| definierad, för
+% typsättning av bevis, lösningar och liknaden. Inleds med rubriken
+% ''\textit{Proof.}''. Rubriken kan bytas ut. Antag att vi t.ex.
+% vill att ett bevis börjar med rubriken ''\textit{Proof of
+% Theorem~2.1}'' och om Theorem~2.1 har etiketten |\label{thm:2.1}|.
+% Då skriver man:
+% \begin{quote}
+% |\begin{proof}[Proof of Theorem \ref{thm:2.1}]|
+% \end{quote}
+% Omgivningen avslutar beviset med en halmos i högerkanten. Som
+% standard är halmosen en kvadrat, men genom att skriva:
+% \begin{quote}
+% |\renewcommand{\qedsymbol}{Q.E.D.}|
+% \end{quote}
+% avslutas alla bevis med ''Q.E.D.'' istället. Om en fristående
+% formel eller en lista avslutar ett bevis, fås en halmos på samma rad
+% med kommandot |\qedhere|. Med raden
+% \begin{quote}
+% |\numberwithin{equation}{section}|
+% \end{quote}
+% får du ekvationer att numreras löpande med avseende på ekvationer.
+%
+% \subsection{Pseudo- och programkod}
+%
+% För typsättning av pseudo- och programkod rekommenderas paketen
+% \textsf{algorithmicx} respektive \textsf{listings}.
+%
+% \subsection{Referenser}
+%
+% För att få referenser att följa standarden Harvard rekommendera
+% paketet \textsf{natbib}.
+%
+%
+% \section{Implementation}
+%
+% \subsection{Klassalternativ}
+%
+% Klassen bygger på standardklassen \textsf{article}. Men de flesta
+% klassalternativen i \textsf{article} behövs inte, vissa strider även mot
+% de regler som styr rapportserien \emph{Rapporter från MSI}. Därför görs
+% dessa inaktiva.
+% \begin{macrocode}
+%<*master>
+\DeclareOption{a5paper}
+ {\ClassError{rfmsi}{Option `a5paper' is not supported}}
+\DeclareOption{b5paper}
+ {\ClassError{rfmsi}{Option `b5paper' is not supported}{}}
+\DeclareOption{letterpaper}
+ {\ClassError{rfmsi}{Option `letterpaper' is not supported}{}}
+\DeclareOption{legalpaper}
+ {\ClassError{rfmsi}{Option `legalpaper' is not supported}{}}
+\DeclareOption{executivepaper}
+ {\ClassError{rfmsi}{Option `executivepaper' is not supported}{}}
+\DeclareOption{landscape}
+ {\ClassError{rfmsi}{Option `landscape' is not supported}{}}
+\DeclareOption{10pt}
+ {\ClassError{rfmsi}{Option `10pt' is not supported}{}}
+\DeclareOption{11pt}
+ {\ClassError{rfmsi}{Option `11pt' is not supported}{}}
+\DeclareOption{twocolumn}
+ {\ClassError{rfmsi}{Option `twocolumn' is not supported}{}}
+\DeclareOption{oneside}
+ {\ClassError{rfmsi}{Option `oneside' is not supported}{}}
+\DeclareOption{notitlepage}
+ {\ClassError{rfmsi}{Option `notitlepage' is not supported}{}}
+\DeclareOption{titlepage}
+ {\ClassError{rfmsi}{Option `titlepage' is not supported}{}}
+\DeclareOption{leqno}
+ {\ClassError{rfmsi}{Option `leqno' is not supported}{}}
+\DeclareOption{fleqn}
+ {\ClassError{rfmsi}{Option `fleqn' is not supported}{}}
+\DeclareOption{openbib}
+ {\ClassError{rfmsi}{Option `openbib' is not supported}{}}
+% \end{macrocode}
+% Laddar klassen \textsf{article} tillsammans med förvalda klassalternativ
+% eller eventuellt andra som anges av användaren via |\documentclass|.
+% \begin{macrocode}
+\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
+\ProcessOptions\relax
+\LoadClass[12pt,a4paper,onecolumn,twoside]{article}
+% \end{macrocode}
+%
+% \subsection{\LaTeX\ eller pdf\LaTeX?}
+%
+% Ladda paketet \textsf{ifpdf} som definierar en logisk variabel som
+% kan användas för att avgöra om pdf\LaTeX\ exekveras eller inte.
+% \begin{macrocode}
+\RequirePackage{ifpdf}
+% \end{macrocode}
+% Vi behöver ladda \textsf{graphicx} för att kunna infoga Växjö
+% universitets symbol på omslaget. Med |\ifpdf| se vi till att samma
+% radbrytningsalgoritm används oavsett program, deklarera vilka
+% bildfilformat som är möjliga att använda och ange hur okända
+% bildfilsändelser ska hanteras.
+% \begin{macrocode}
+\ifpdf
+ \RequirePackage[pdftex]{graphicx}
+ \pdfadjustspacing 1
+ \AtBeginDocument{%
+ \DeclareGraphicsExtensions{.mps,.pdf,.jpg,.png}%
+ \DeclareGraphicsRule{*}{mps}{*}{}%
+ }
+\else
+ \RequirePackage[dvips]{graphicx}
+ \AtBeginDocument{%
+ \DeclareGraphicsExtensions{.mps,.eps}%
+ \DeclareGraphicsRule{*}{eps}{*}{}%
+ }
+\fi
+% \end{macrocode}
+%
+% \subsection{Marginaler}
+%
+% Med paketet \textsf{geometry} är det enkel att ändra storleken på
+% marginalerna. Ytter och bunt ska vara 3~cm, huvud 2~cm och
+% fot~2,5~cm.
+% \begin{macrocode}
+\RequirePackage{geometry}
+\geometry{%
+ twoside,
+ a4paper,
+ left=3cm,
+ right=3cm,
+ top=2cm,
+ bottom=2.5cm,
+ hcentering,
+ bindingoffset=0pt,
+ footskip=10mm,
+ nohead
+}
+% \end{macrocode}
+%
+% \subsection{Kolumntitel och sidfot}
+%
+% För att kunna förändra innehållet i huvud och fot enkelt laddar vi
+% \textsf{fancyhdr}.
+% \begin{macrocode}
+\RequirePackage{fancyhdr}
+% \end{macrocode}
+% Någon kolumntitel ska inte förekomma och pagineringen placeras i
+% centrerad i sidfoten.
+% \begin{macrocode}
+\fancyfoot{}
+\fancyhead{}
+\fancyfoot[C]{\thepage}
+\renewcommand{\headrulewidth}{\z@}
+\renewcommand{\footrulewidth}{\z@}
+\pagestyle{fancy}
+% \end{macrocode}
+% \begin{macro}{\mainmatter}
+% I huvudtexten ska arabiska siffror användas vid paginering.
+% \begin{macrocode}
+\newcommand\mainmatter{%
+ \cleardoublepage
+ \pagenumbering{arabic}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Titel, författare och sånt}
+%
+% \begin{macro}{\title}
+% \begin{macro}{\@titlei}
+% \begin{macro}{\@titleii}
+% \begin{macro}{\subtitle}
+% \begin{macro}{\@subtitlei}
+% \begin{macro}{\@subtitleii}
+% Med hjälp av |\title| och |\subtitle| sparas titel och undertitel
+% vardera i två olika interna kommandon, där |\@titlei| används på
+% omslagets framsida och |\@titleii| på titelsidan. Analogt för
+% undertitel, förutom att vi låter dessa vara tomma från början
+% ifall undertitel saknas.
+% \begin{macrocode}
+\renewcommand*{\title}[2][\opttitle]{%
+ \def\opttitle{#2}%
+ \gdef\@titlei{#1}%
+ \gdef\@titleii{#2}%
+}
+\newcommand*{\subtitle}[2][\optsubtitle]{%
+ \def\optsubtitle{#2}%
+ \gdef\@subtitlei{#1}%
+ \gdef\@subtitleii{#2}%
+}
+\let\@subtitlei\@empty
+\let\@subtitleii\@empty
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\publmonth}
+% \begin{macro}{\@publmonth}
+% \begin{macro}{\publyear}
+% \begin{macro}{\@publyear}
+% Den månad och det år som avhandlingen publicerades.
+% \begin{macrocode}
+\newcommand*{\publmonth}[1]{\gdef\@publmonth{#1}}
+\def\@publmonth{????}
+\newcommand*{\publyear}[1]{\gdef\@publyear{#1}}
+\def\@publyear{????}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\discipline}
+% \begin{macro}{\@discipline}
+% \begin{macro}{\@discipline@abbrv}
+% Ämnesområdet för avhandlingen.
+% \begin{macrocode}
+\newcommand*{\discipline}[2]{%
+ \gdef\@discipline{#1}
+ \gdef\@discipline@abbrv{#2}%
+}
+\def\@discipline{????}
+\def\@discipline@abbrv{??}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\reportno}
+% \begin{macro}{\@reportno}
+% \begin{macro}{\@issn}
+% Rapportens nummer i serien, samt \textit{International Standard
+% Serial Number}.
+% \begin{macrocode}
+\newcommand{\reportno}[1]{\gdef\@reportno{#1}}
+\def\@reportno{????}
+\def\@issn{1650-2647}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\thesistype}
+% \begin{macro}{\@thesistype}
+% \begin{macro}{\@thesistype@abbrv}
+% Typ av rapport.
+% \begin{macrocode}
+\newcommand*{\thesistype}[2]{%
+ \gdef\@thesistype{#1}%
+ \gdef\@thesistype@abbrv{#2}%
+}
+\def\@thesistype{Master's Thesis}
+\def\@thesistype@abbrv{E}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Omslag}
+%
+% \begin{macro}{\frontcover}
+% Omslagets framsida skapas genom att placera ut dessa olika
+% ''delar'' med hjälp av omgivningen \verb"picture". Inget material
+% i sidfoten. Typsnittet ska vara Times.
+% \begin{macrocode}
+\newcommand{\frontcover}{%
+ \thispagestyle{empty}%
+ \setcounter{page}{-1}
+ \setlength{\unitlength}{1cm}%
+ \noindent
+ \begin{picture}(15,25.2)(3,2.5)%
+ \usefont{T1}{ptm}{m}{n}%
+% \end{macrocode}
+% En vertikal och två horisontella linjer.
+% \begin{macrocode}
+ \put(5,1.3){\rule{.5mm}{27.5cm}}
+ \put(1.4,4.8){\rule{17.8cm}{.5mm}}
+ \put(5.5,26.2){\rule{11.7cm}{.5mm}}
+% \end{macrocode}
+% Universitetets symbol och namn läggs i det övre vänstra hörnet.
+% \begin{macrocode}
+ \put(2.75,25.4){\makebox(0,0)[b]{%
+ \includegraphics[width=14mm]{vxusymbol.1}}}
+ \put(2.75,25.15){\makebox(0,0)[t]{%
+ \parbox{3.5cm}{\usefont{T1}{ppl}{m}{n}\LARGE
+ \centering
+ V\"{a}xj\"{o}\\
+ University}}}
+% \end{macrocode}
+% Längs upp sätts institutionsnamn och publikationsserie.
+% \begin{macrocode}
+ \put(5.5,28){School of Mathematics and
+ System Engineering}
+ \put(5.5,27){\textbf{Reports from MSI}
+ - Rapporter fr{\aa}n MSI}
+% \end{macrocode}
+% Titel, undertitel och författare.
+% \begin{macrocode}
+ \put(11.5,21.9){\makebox(0,0)[t]{%
+ \parbox{11cm}{\centering
+ \fontsize{18}{23}\selectfont\@titlei\\[\baselineskip]%
+ \large\@subtitlei}}}
+ \put(11.5,13.1){\makebox(0,0)[t]{%
+ \parbox{11cm}{\centering
+ \begin{tabular}[t]{c}
+ \@author
+ \end{tabular}}}}
+% \end{macrocode}
+% Längst ned sätter vi månad, år, adress, \textsc{issn} och
+% \textsc{isrn}.
+% \begin{macrocode}
+ \put(2.75,3.7){\makebox(0,0)[t]{%
+ \parbox{3.5cm}{\centering\@publmonth\\
+ \@publyear}}}
+ \put(5.8,3.7){\makebox(0,0)[tl]{%
+ \parbox{4cm}{\small
+ MSI\\
+ V\"{a}xj\"{o} University\\
+ \textbf{SE-351 95 V\"{A}XJ\"{O}}}}}
+ \put(12,3.7){\makebox(0,0)[tl]{%
+ \parbox{8cm}{\small
+ Report \@reportno\\
+ ISSN \@issn\\
+ ISRN VXU/MSI/\@discipline@abbrv/\@thesistype@abbrv/-{}-%
+ \@reportno/-{}-SE}}}
+% \end{macrocode}
+% Nästa sida ska vara tom och därefter avslutar vi definitionen av
+% |\frontcover|.
+% \begin{macrocode}
+ \end{picture}%
+ \newpage
+ \thispagestyle{empty}
+ \mbox{}
+ \newpage
+}
+% \end{macrocode}
+% \end{macro}
+%
+% Kommandot |\maketitle| ska inte kunna användas istället för
+% |\frontcover|.
+% \begin{macrocode}
+\renewcommand{\maketitle}{\relax}
+% \end{macrocode}
+%
+% \begin{macro}{\backcover}
+% Baksidan ska hamna på en sida med jämnt sidnummer och sidan innan
+% ska vara tom.
+% \begin{macrocode}
+\newcommand{\backcover}{%
+ \clearpage
+ \thispagestyle{empty}
+ \mbox{}
+ \clearpage
+ \ifodd\c@page
+ \thispagestyle{empty}
+ \mbox{}
+ \clearpage
+ \fi
+% \end{macrocode}
+% Centrerad längst ned sätts universitetets symbol och namn, samt
+% institution, adress och hemsida.
+% \begin{macrocode}
+ \begin{center}
+ \usefont{T1}{ptm}{m}{n}%
+ \thispagestyle{empty}%
+ \mbox{}%
+ \vfill
+ \includegraphics[width=15mm]{vxusymbol.1}\\
+ {\usefont{T1}{ppl}{m}{n}\huge
+ V\"{a}xj\"{o}\\
+ universitet}\\[8mm]
+ \textbf{Matematiska och systemtekniska institutionen}\\
+ SE-351 95 V\"{a}xj\"{o}\\[7mm]
+ Tel. +46\,(0)470\,70\,80\,00, fax +46\,(0)470\,840\,04\\
+ http://www.vxu.se/msi/
+ \vskip1.2cm
+ \mbox{}
+ \end{center}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Startsidor}
+%
+% \begin{macro}{\frontmatter}
+% Definiera kommandot |\frontmatter| för att typsätta titelsida och
+% att följande sidor pagineras med romerska siffror.
+% \begin{macrocode}
+\newcommand\frontmatter{%
+ \pagenumbering{roman}
+ \setcounter{page}{1}
+ \thispagestyle{empty}
+% \end{macrocode}
+% Centrera horisontellt i tur och ordning författare, titel,
+% eventuellt undertitel, typ av rapport, disciplin, år och Växjö
+% universitets symbol.
+% \begin{macrocode}
+ \begin{center}
+ \mbox{}\\[2\baselineskip]%
+ \begin{tabular}[t]{c}
+ \large\@author
+ \end{tabular}\\[0.75cm]
+ \LARGE\@titleii
+ \ifx\@empty\@subtitleii
+ \\[1.5cm]
+ \else
+ \\[0.25\baselineskip]
+ \Large\@subtitleii\\[1.5cm]
+ \fi
+ \normalsize
+ \@thesistype\\[\baselineskip]
+ \@discipline\\[2\baselineskip]
+ \@publyear
+ \vfill
+ \includegraphics[width=9mm]{vxusymbol.1}\kern0.3em\hbox{%
+ \raisebox{\depth}{\fontsize{17.28}{20.74}\usefont{T1}{ppl}{m}{n}%
+ V\"{a}xj\"{o} University}}
+ \end{center}
+% \end{macrocode}
+% Sidan därefter ska vara helt tom. Avsluta definitionen av
+% |\frontmatter| med att frigöra minne.
+% \begin{macrocode}
+ \clearpage
+ \thispagestyle{empty}
+ \mbox{}
+ \global\let\title\relax
+ \global\let\@titlei\@empty
+ \global\let\@titleii\@empty
+ \global\let\@subtitlei\@empty
+ \global\let\@subtitleii\@empty
+ \global\let\author\relax
+ \global\let\@author\@empty
+ \global\let\publmonth\relax
+ \global\let\@publmonth\@empty
+ \global\let\publyear\relax
+ \global\let\@publyear\@empty
+ \global\let\discipline\relax
+ \global\let\@discipline\@empty
+ \global\let\@issn\@empty
+ \clearpage
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Sammanfattning, nyckelord och erkännande}
+%
+% \begin{macro}{keywords}
+% Efter både den engelska och svenska sammanfattningen är det
+% brukligt att rada upp några nyckelord.
+% \begin{macrocode}
+\newenvironment{keywords}[1][Key-words]{%
+ \par\vspace{.2\baselineskip}%
+ \noindent{\bfseries\slshape #1:}
+}{%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{abstract}
+% Omgivning för sammanfattning.
+% \begin{macrocode}
+\renewenvironment{abstract}{%
+ \vskip2cm
+ \begin{center}
+ \large\bfseries\abstractname
+ \end{center}
+ \par\vspace{.1\baselineskip}\noindent\ignorespaces
+}{}
+% \end{macrocode}
+% \end{environment}
+%
+% \subsection{Rubriker}
+%
+% Alla rubriknivåer ska numreras men endast huvudrubriker, |\section|,
+% och underrubriker, |\subsection|, ska läggas in i
+% innehållsförteckningen.
+% \begin{macrocode}
+\setcounter{secnumdepth}{3}
+\setcounter{tocdepth}{2}
+% \end{macrocode}
+% Med hjälp av paketet \textsf{tocbibind} läggs rubrikerna för
+% litteraturförteckningen och sakregister in i innehållsförteckningen.
+% \begin{macrocode}
+\RequirePackage[nottoc,notlof,notlot,section]{tocbibind}
+% \end{macrocode}
+%
+% \begin{macro}{\section}
+% Kapitelrubriker sätts i 14 punkter och fet stil.
+% \begin{macrocode}
+\renewcommand{\section}{%
+ \@startsection
+ {section}%
+ {1}%
+ {0pt}%
+ {-3ex plus -1ex minus -.2ex}%
+ {1.5ex plus.2ex}%
+ {\large\bfseries}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\subsection}
+% Underrubriker sätts i 12 punkter och fet stil.
+% \begin{macrocode}
+\renewcommand{\subsection}{%
+ \@startsection
+ {subsection}%
+ {2}%
+ {0pt}%
+ {-2.5ex plus -1ex minus -.2ex}%
+ {1.25ex plus .2ex}%
+ {\bfseries\normalsize}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\subsubsection}
+% Underunderrubriker sätts i 12 punkter och mager stil.
+% \begin{macrocode}
+\renewcommand{\subsubsection}{%
+ \@startsection
+ {subsubsection}%
+ {3}%
+ {0pt}%
+ {-2.25ex plus -1ex minus -.2ex}%
+ {1ex plus .2ex}%
+ {\normalfont\normalsize}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Indrag och citat}
+%
+% \begin{macro}{\parindent}
+% Varje stycke, utom det första efter en rubrik, ska inledas med ett
+% indrag om 0,5~cm.
+% \begin{macrocode}
+\setlength{\parindent}{.5cm}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{quotation}
+% \begin{environment}{quote}
+% \begin{macrocode}
+\renewenvironment{quotation}{%
+ \list{}{%
+ \leftmargin 2cm%
+ \rightmargin \leftmargin
+ \listparindent 1.5em%
+ \itemindent \listparindent
+ \parsep \z@ \@plus\p@
+ }%
+\item\relax}{\endlist}
+\renewenvironment{quote}{%
+ \list{}{%
+ \leftmargin 2cm
+ \rightmargin \leftmargin}%
+\item\relax}{\endlist}
+% \end{macrocode}
+% \end{environment}
+% \end{environment}
+%
+%
+%\subsection{Figur- och tabellnumrering}
+%
+% Numrering av figurer och tabeller ska ske sekvensiellt inom varje
+% kapitel.
+% \begin{macrocode}
+\@addtoreset{figure}{section}
+\@addtoreset{table}{section}
+\renewcommand{\thefigure}{\thesection.\arabic{figure}}
+\renewcommand{\thetable}{\thesection.\arabic{table}}
+%</master>
+% \end{macrocode}
+%
+% \subsection{Universitetets symbol}
+%
+% Vi genererar Växjö universitets symbol med hjälp av MetaPost. Först
+% definierar~vi de variabler, konstanter och punkter som vi behöver.
+% \begin{macrocode}
+%<*metapost>
+path p, q;
+pair c[];
+s = 1;
+c1 := (0, 200);
+c2 := (0, 240);
+c3 := (0, 265);
+c4 := (0, 305);
+c5 := (0, 330);
+c6 := (0, 365);
+c7 := (200, 527.23);
+c8 := (180, 706.5);
+c9 := (240, 920.36);
+z1 = (12.5, 0.21);
+z2 = (365, 365);
+z3 = (144.79, 700.05);
+z4 = (12.5, 843.92);
+z5 = (12.5, 284.08);
+z6 = (85, 200);
+z7 = (12.5, 115.92);
+z8 = (12.5, 90.52);
+z9 = (150, 240);
+z10 = (85.71, 363.1);
+z11 = (13.69, 454.51);
+z12 = (190, 265);
+z13 = (12.5, 75.41);
+z14 = (12.5, 45.3);
+z15 = (260, 305);
+z16 = (106.36, 542.25);
+z17 = (17.3, 629.5);
+z18 = (300, 330);
+z19 = (12.5, 30.26);
+% \end{macrocode}
+% Nedan beskrivs konturen av den högra delen av symbolen.
+% \begin{macrocode}
+p := z1{dir(angle(z1 - c6) + 90)}
+ ..{dir(angle(z2 - c6) + 90)}z2{dir(angle(z2 - c6) + 90)}
+ ..{dir(angle(z3 - c6) + 90)}z3{dir(angle(z3 - c9) - 90)}
+ ..{dir(angle(z4 - c9) - 90)}z4
+ --z5{dir(angle(z5 - c1) - 90)}
+ ..{dir(angle(z6 - c1) - 90)}z6{dir(angle(z6 - c1) - 90)}
+ ..{dir(angle(z7 - c1) - 90)}z7
+ --z8{dir(angle(z8 - c2) + 90)}
+ ..{dir(angle(z9 - c2) + 90)}z9{dir(angle(z9 - c2) + 90)}
+ ..{dir(angle(z10 - c2) + 90)}z10{dir(angle(z10 - c7) - 90)}
+ ..{dir(angle(z11 - c7) - 90)}z11{dir(angle(z11 - c3) - 90)}
+ ..{dir(angle(z12 - c3) - 90)}z12{dir(angle(z12 - c3) - 90)}
+ ..{dir(angle(z13 - c3) - 90)}z13
+ --z14{dir(angle(z14 - c4) + 90)}
+ ..{dir(angle(z15 - c4) + 90)}z15{dir(angle(z15 - c4) + 90)}
+ ..{dir(angle(z16 - c4) + 90)}z16{dir(angle(z16 - c8) - 90)}
+ ..{dir(angle(z17 - c8) - 90)}z17{dir(angle(z17 - c5) - 90)}
+ ..{dir(angle(z18 - c5) - 90)}z18{dir(angle(z18 - c5) - 90)}
+ ..{dir(angle(z19 - c5) - 90)}z19
+ --cycle;
+% \end{macrocode}
+% Figur~1 ger en svart symbol på vit bakgrund.
+% \begin{macrocode}
+beginfig(1);
+ fill p scaled s shifted (s * (365, 0));
+ fill p reflectedabout((0, 0), (0, 1)) scaled s shifted (s * (365, 0));
+endfig;
+end
+%</metapost>
+% \end{macrocode}
+%
+% \subsection{Schablon}\label{sec:schablon}
+%
+% Vi avslutar med att presentera en schablon, som vid kompilering av
+% |rfmsi.ins| skapas som filen \verb"template.tex".
+% \begin{macrocode}
+%<*template>
+\documentclass{rfmsi}
+
+% \end{macrocode}
+% Om du arbetar i Windows eller Macintosh bör du ändra |latin1| till
+% |ansinew| respektive |applemac|.
+% \begin{macrocode}
+\usepackage[T1]{fontenc}
+\usepackage[swedish,english]{babel}
+\usepackage[latin1]{inputenc}
+
+% \end{macrocode}
+% Laddar de paket som behövs för att använda typsnittet Times.
+% Följande tre rader tar du bort om du vill använda COmputer Modern
+% istället, vilket rekommenderas om du skriver inom matematik.
+% \begin{macrocode}
+\usepackage{mathptmx}
+\usepackage[scaled=.9]{helvet}
+\usepackage{courier}
+
+% \end{macrocode}
+% Laddar några paket som underlättar typsättningen av matematiska
+% dokument.
+% \begin{macrocode}
+\usepackage{amsmath,amssymb,amsthm}
+
+% \end{macrocode}
+% Deklarerar några användbara omgivningar för typsättning av satser
+% och linander.
+% \begin{macrocode}
+\newtheorem{theorem}{Theorem}[section]
+\newtheorem{lemma}[theorem]{Lemma}
+\newtheorem*{corollary}{Corollary}
+\theoremstyle{definition}
+\newtheorem{definition}{Definition}[section]
+\newtheorem{example}{Example}[section]
+\theoremstyle{remark}
+\newtheorem*{remark}{Remark}
+
+% \end{macrocode}
+% För att få numrering av ekvationer att följa kapitelnumreringen.
+% \begin{macrocode}
+\numberwithin{equation}{section}
+
+\begin{document}
+
+% \end{macrocode}
+% Noter att alla |[]| nedan kan utelämnas. Även |\subtilte| är
+% valfritt.
+% \begin{macrocode}
+\title[]{}
+\subtitle[]{}
+\author{}
+\publmonth{}
+\publyear{}
+\discipline{}{}
+\thesistype{}{}
+\reportno{}
+
+% \end{macrocode}
+% Nästa rad ger famsidan. Resten av koden är i stort sett ordinär och
+% tarvar därför inte någon djupare förklaring.
+% \begin{macrocode}
+\frontcover
+
+\frontmatter
+
+\begin{abstract}
+%%% -- Abstract in english
+\end{abstract}
+\begin{keywords}
+%%% -- Key-words
+\end{keywords}
+
+\begin{otherlanguage}{swedish}
+\begin{abstract}
+%%% -- Svensk sammanfattning
+\end{abstract}
+\begin{keywords}[Nyckelord]
+%%% -- Nyckelord
+\end{keywords}
+\end{otherlanguage}
+
+\renewcommand{\abstractname}{Acknowledgments}
+\begin{abstract}
+%%% -- Text
+\end{abstract}
+
+\tableofcontents
+
+\mainmatter
+
+%%% -- Dokumentet
+
+\appendix
+
+%%% -- Bilagor
+
+\bibliographystyle{}
+\bibliography{}
+
+\backcover
+
+\end{document}
+%</template>
+% \end{macrocode}
+% Ovan antas att man använder \BibTeX\ för att skapa en litteraturförteckning.
+% Det är inte nödvändigt, utan man kan istället använda omgivningen
+% |thebibliography|.
+%
+% \Finale
+\endinput
diff --git a/obsolete/macros/latex/contrib/vxu/rfmsi.ins b/obsolete/macros/latex/contrib/vxu/rfmsi.ins
new file mode 100644
index 0000000000..49612f0c70
--- /dev/null
+++ b/obsolete/macros/latex/contrib/vxu/rfmsi.ins
@@ -0,0 +1,74 @@
+%%
+%% Copyright (C) 2007 by Robert Nyqvist
+%%
+%% This file will generate class for typsetting master theses at
+%% School of Mathematics and System Engineering, Växjö University.
+%%
+\input docstrip
+
+\declarepreamble\classpreamble
+
+This is a generated file.
+
+Copyright (C) 2007 by Robert Nyqvist.
+
+Class for typesetting master theses at School of Mathematics and
+System Engineering, Växjö University.
+
+Any modified version of this file must be renamed
+with new filename distinct from \outFileName.
+
+\endpreamble
+
+\declarepreamble\templatepreamble
+
+This is a generated file.
+
+Template for rfmsi.cls, a class for Reports from MSI
+
+Feel free to modify this file how much you want.
+
+\endpreamble
+
+\declarepreamble\mppreamble
+
+This is a generated file.
+
+Copyright (C) 2007 by Robert Nyqvist.
+
+Metapost file with descriptions of the symbol for Växjö University.
+
+Any modified version of this file must be renamed
+with new filename distinct from \outFileName.
+
+\endpreamble
+
+\keepsilent
+
+\generate{\usepreamble\classpreamble
+ \file{rfmsi.cls}{\from{rfmsi.dtx}{master}}
+ \usepreamble\templatepreamble
+ \usepostamble\empty
+ \file{template.tex}{\from{rfmsi.dtx}{template}}
+ \usepreamble\mppreamble
+ \usepostamble\empty
+ \file{vxusymbol.mp}{\from{rfmsi.dtx}{metapost}}}
+
+\Msg{***********************************************************}
+\Msg{*}
+\Msg{* To produce the picture used by the class run}
+\Msg{*}
+\Msg{* \space\space mpost vxusymbol.mp}
+\Msg{*}
+\Msg{* To produce the documentation compile `rfmsi.dtx'}
+\Msg{*}
+\Msg{* To finish the installation you have to move the following}
+\Msg{* file into a directory searched by TeX:}
+\Msg{*}
+\Msg{* \space\space rfmsi.cls}
+\Msg{* \space\space vxusymbol.1}
+\Msg{*}
+\Msg{* Happy TeXing}
+\Msg{***********************************************************}
+
+\endbatchfile
diff --git a/obsolete/macros/latex/contrib/vxu/rfmsi.pdf b/obsolete/macros/latex/contrib/vxu/rfmsi.pdf
new file mode 100644
index 0000000000..5f67aa18d6
--- /dev/null
+++ b/obsolete/macros/latex/contrib/vxu/rfmsi.pdf
Binary files differ
diff --git a/obsolete/macros/latex/contrib/vxu/vxulicentiate.cls b/obsolete/macros/latex/contrib/vxu/vxulicentiate.cls
new file mode 100644
index 0000000000..3bd591aaaa
--- /dev/null
+++ b/obsolete/macros/latex/contrib/vxu/vxulicentiate.cls
@@ -0,0 +1,383 @@
+%%
+%% Copyright (C) 2007 by Robert Nyqvist.
+%%
+%% Class for typesetting licentiate theses at Växjö University.
+%%
+%% Any modified versions of this file must be renamed with new
+%% filenames distinct from vxulicentiate.cls. It is better to
+%% use \renewcommand or similar control sequences, than change
+%% the code in this file.
+%%
+\NeedsTeXFormat{LaTeX2e}[2001/06/01]
+\ProvidesClass{vxulicentiate}%
+ [2007/05/17\space v2.0\space Class for Theses, Vaxjo University]
+\DeclareOption{twocolumn}
+ {\ClassError{vxulicentiate}{Option `twocolumn' is not supported}{}}
+\DeclareOption{oneside}
+ {\ClassError{vxulicentiate}{Option `oneside' is not supported}{}}
+\DeclareOption{11pt}
+ {\ClassError{vxulicentiate}{Option `11pt' is not supported}{}}
+\DeclareOption{12pt}
+ {\ClassError{vxulicentiate}{Option `12pt' is not supported}{}}
+\DeclareOption{a4paper}
+ {\ClassError{vxulicentiate}{Option `a4paper' is not supported}}
+\DeclareOption{a5paper}
+ {\ClassError{vxulicentiate}{Option `a5paper' is not supported}}
+\DeclareOption{b5paper}
+ {\ClassError{vxulicentiate}{Option `b5paper' is not supported}{}}
+\DeclareOption{letterpaper}
+ {\ClassError{vxulicentiate}{Option `letterpaper' is not supported}{}}
+\DeclareOption{legalpaper}
+ {\ClassError{vxulicentiate}{Option `legalpaper' is not supported}{}}
+\DeclareOption{executivepaper}
+ {\ClassError{vxulicentiate}{Option `executivepaper' is not supported}{}}
+\DeclareOption{landscape}
+ {\ClassError{vxulicentiate}{Option `landscape' is not supported}{}}
+\DeclareOption{notitlepage}
+ {\ClassError{vxulicentiate}{Option `notitlepage' is not supported}{}}
+\DeclareOption{titlepage}
+ {\ClassError{vxulicentiate}{Option `titlepage' is not supported}{}}
+\DeclareOption*{\PassOptionsToClass{\CurrentOption}{book}}
+\ProcessOptions\relax
+\LoadClass[10pt,onecolumn,openany,twoside]{book}
+\RequirePackage{geometry}
+\geometry{%
+ papersize={169mm,239mm},
+ textwidth=117mm,
+ lines=43,
+ inner=22mm,
+ top=25mm,
+ headheight=12pt,
+ headsep=15pt,
+ footskip=30pt
+}
+\RequirePackage{ifpdf}
+\ifpdf
+ \RequirePackage[pdftex]{graphicx,color}
+ \pdfadjustspacing 1
+ \AtBeginDocument{%
+ \DeclareGraphicsExtensions{.mps,.pdf,.jpg,.png}%
+ \DeclareGraphicsRule{*}{mps}{*}{}%
+ }
+\else
+ \RequirePackage[dvips]{graphicx,color}
+ \AtBeginDocument{%
+ \DeclareGraphicsExtensions{.mps,.eps}%
+ \DeclareGraphicsRule{*}{eps}{*}{}%
+ }
+\fi
+\RequirePackage{fancyhdr}
+\fancyfoot{}
+\fancyhead{}
+\fancyhead[RO]{\small\nouppercase\rightmark}
+\fancyhead[LE]{\small\nouppercase\leftmark}
+\fancyfoot[LE,RO]{\thepage}
+\renewcommand{\headrulewidth}{\z@}
+\pagestyle{fancy}
+\definecolor{vxucolor}{cmyk}{1,0.6,0,0.56}
+\newenvironment{pagecoords}{%
+ \vtop\bgroup%
+ \kern-\topskip
+ \kern-\topmargin
+ \kern-\headheight
+ \kern-\headsep
+ \kern-1in
+ \hbox\bgroup%
+ \ifodd\c@page
+ \kern-\oddsidemargin
+ \else
+ \kern-\evensidemargin
+ \fi
+ \kern-1in
+ \setlength{\unitlength}{1mm}%
+ \begin{picture}(0,0)(0,239)
+ }{%
+ \end{picture}%
+ \egroup
+ \egroup
+}
+\newcommand*{\wexio}{V\"{a}xj\"{o}}
+\newcommand*{\university}{University}
+\newcommand*{\department}{School of Mathematics and System Engineering}
+\newcommand*{\publication}{Reports from MSI}
+\newcommand*{\thesistype}{Licentiate Thesis}
+\newcommand*{\subtitle}[1]{\gdef\@subtitle{#1}}
+\let\@subtitle\@empty
+\newcommand*{\publyear}[1]{\gdef\@publyear{#1}}
+\def\@publyear{????}
+\newcommand*{\discipline}[1]{\gdef\@discipline{#1}}
+\def\@discipline{????}
+\newcommand{\information}{%
+ A thesis for the Degree of Licentiate of Philosophy in \@discipline.%
+}
+\newcommand*{\address}{SE\kern.1em-\kern.1em 351\kern.15em95 \wexio, Sweden}
+\newcommand*{\homepage}{http://www.vxu.se/msi/}
+\newcommand{\ISSN}{1650-2647}
+\newcommand{\ISRN}[2]{%
+ \gdef\@subject{#1}%
+ \gdef\@reportno{#2}%
+}
+\newcommand{\telephone}{+46\,(0)470\,70\,80\,00}
+\newcommand{\fax}{+46\,(0)470\,840\,04}
+\newcommand{\frontcover}{%
+ \thispagestyle{empty}
+ \begin{pagecoords}
+ \setlength{\fboxrule}{\z@}
+ \setlength{\fboxsep}{\z@}
+ \put(0,0){\makebox(0,0)[lb]{\color{vxucolor}{\rule{20mm}{239mm}}}}
+ \put(30,179){\makebox(0,0)[lb]{%
+ \parbox[t]{119mm}{%
+ \raggedright
+ \fontsize{17.28}{20.74}\usefont{T1}{phv}{m}{n}\@author
+ }%
+ }%
+ }
+ \put(30,167){\makebox(0,0)[lt]{%
+ \parbox[t]{119mm}{%
+ \raggedright
+ \fontsize{29.86}{37}\usefont{T1}{ppl}{m}{n}\@title
+ \ifx\@empty\@subtitle\else
+ \par\vspace{.75cm}
+ \fontsize{24.88}{29.86}\usefont{T1}{ppl}{m}{n}%
+ \@subtitle
+ \fi
+ \par\vspace{1.5cm}
+ \fontsize{12}{14.4}\usefont{T1}{phv}{m}{n}%
+ \thesistype
+ }%
+ }%
+ }
+ \put(94.5,229){%
+ \makebox(0,0)[ct]{%
+ \includegraphics[width=8mm]{vxusymbol.1}%
+ \kern0.5em\raisebox{\depth}{%
+ \fontsize{17.28}{20.74}\usefont{T1}{ppl}{m}{n}%
+ \wexio\space\university
+ }%
+ }%
+ }
+ \put(94.5,15){%
+ \makebox(0,0)[cb]{%
+ \parbox{9cm}{%
+ \centering\fontsize{8}{9.6}\selectfont%
+ \textbf{\department}\\[-0.4\baselineskip]
+ \rule{9cm}{0.3pt}\\
+ \textbf{\publication}
+ }%
+ }%
+ }
+ \end{pagecoords}
+ \newpage
+ \thispagestyle{empty}
+ \hbox{}\clearpage
+}
+\renewcommand{\maketitle}{%
+ \thispagestyle{empty}
+ \begin{center}
+ \fontsize{14.4}{17.28}\selectfont\@author\par\vspace{.5cm}%
+ \fontsize{20.74}{24.88}\selectfont\@title
+ \ifx\@empty\@subtitle\else
+ \par\vspace{0.25\baselineskip}%
+ \fontsize{17.28}{20.74}\selectfont\@subtitle
+ \fi
+ \par\vspace{1.5cm}%
+ \fontsize{12}{14.4}\selectfont\thesistype
+ \par\vspace{\baselineskip}%
+ \fontsize{12}{14.4}\selectfont\@discipline
+ \par\vspace{2\baselineskip}%
+ \fontsize{11}{12}\selectfont\oldstylenums{\@publyear}
+ \vfill
+ \includegraphics[width=9mm]{vxusymbol.1}%
+ \kern0.5em\hbox{%
+ \raisebox{\depth}{%
+ \fontsize{17.28}{20.74}\usefont{T1}{ppl}{m}{n}%
+ \wexio\space\university
+ }%
+ }%
+ \end{center}
+ \clearpage
+}
+\newcommand{\makecopyright}{%
+ \thispagestyle{empty}
+ \vspace*{\fill}%
+ \noindent
+ {
+ \fontsize{9}{10.8}\selectfont
+ \information
+ \par\vspace{2\baselineskip}\noindent
+ \textbf{\@title}%
+ \ifx\@empty\@subtitle\else
+ \\
+ \textbf{\@subtitle}
+ \fi
+ \\
+ \@author
+ \par\vspace{2\baselineskip}\noindent
+ \wexio\space\university\\
+ \department\\
+ \address\\
+ \homepage
+ \par\vspace{0.5\baselineskip}\noindent
+ \publication, no \@reportno/\@publyear\\
+ ISSN \ISSN\\
+ ISRN VXU/MSI/\@subject/R/--\@reportno--SE
+ }%
+ \clearpage
+}
+\newcommand{\dedication}[1]{%
+ \ifx\@dedication\empty\else
+ \thispagestyle{empty}
+ \vspace*{3cm}
+ \begin{center}
+ \fontsize{14.4}{17.28}\usefont{T1}{pzc}{m}{it}%
+ #1
+ \end{center}
+ \clearpage
+ \thispagestyle{empty}
+ \mbox{}
+ \clearpage
+ \fi
+}
+\newcommand{\backcover}{%
+ \clearpage
+ \thispagestyle{empty}
+ \mbox{}
+ \clearpage
+ \ifodd\c@page
+ \thispagestyle{empty}
+ \mbox{}
+ \clearpage
+ \fi
+ \thispagestyle{empty}
+ \begin{pagecoords}
+ \setlength{\fboxrule}{\z@}
+ \setlength{\fboxsep}{\z@}
+ \put(169,0){%
+ \makebox(0,0)[rb]{\color{vxucolor}{\rule{20mm}{239mm}}}%
+ }
+ \put(74.5,15){%
+ \makebox(0,0)[cb]{%
+ \parbox{9cm}{%
+ \centering
+ \includegraphics[width=8mm]{vxusymbol.1}\\
+ {%
+ \fontsize{17.28}{20.74}\usefont{T1}{ppl}{m}{n}%
+ \wexio\\\university
+ }\\[\baselineskip]
+ \fontsize{8}{9.6}\selectfont%
+ \textbf{\department}\\
+ \address\\[\baselineskip]
+ Telephone \telephone, fax \fax\\
+ \homepage
+ }%
+ }%
+ }
+ \end{pagecoords}
+}
+\newenvironment{keywords}[1][Key-words]{%
+ \par\vspace{.5\baselineskip}%
+ \noindent\textbf{#1:}
+}{}
+\newenvironment{abstract}[1][Abstract]{%
+ \clearpage
+ \thispagestyle{plain}
+ \addcontentsline{toc}{chapter}{#1}
+ \begin{center}
+ \Large\slshape\bfseries #1
+ \end{center}
+ \par%\vspace{.25\baselineskip}
+ \noindent\ignorespaces
+}{}
+\setcounter{secnumdepth}{1}
+\setcounter{tocdepth}{1}
+
+
+\renewcommand{\part}{%
+ \clearpage
+ \thispagestyle{empty}%
+ \@tempswafalse
+ \null\vfil
+ \secdef\@part\@spart
+}
+\def\@part[#1]#2{%
+ \ifnum \c@secnumdepth >-2\relax
+ \refstepcounter{part}%
+ \addcontentsline{toc}{part}{\thepart\hspace{1em}#1}%
+ \else
+ \addcontentsline{toc}{part}{#1}%
+ \fi
+ \markboth{}{}%
+ {%
+ \centering
+ \interlinepenalty \@M
+ \normalfont
+ \ifnum \c@secnumdepth >-2\relax
+ \LARGE\bfseries \partname~\thepart
+ \par
+ \vskip 20\p@
+ \fi
+ \Huge \bfseries #2\par
+ }%
+ \@endpart
+}
+\def\@spart#1{%
+ {%
+ \centering
+ \interlinepenalty \@M
+ \normalfont
+ \Huge \bfseries #1\par
+ }%
+ \@endpart
+}
+\def\@makechapterhead#1{%
+ \vspace*{15\p@}%
+ {%
+ \parindent \z@ \raggedright \normalfont
+ \ifnum \c@secnumdepth >\m@ne
+ \Large\bfseries\slshape \@chapapp\space \thechapter
+ \par\nobreak
+ \vskip 10\p@
+ \fi
+ \interlinepenalty\@M
+ \huge \bfseries\upshape #1\par\nobreak
+ \vskip 30\p@
+ }%
+}
+\def\@makeschapterhead#1{%
+ \vspace*{15\p@}%
+ {%
+ \parindent \z@ \raggedright
+ \normalfont
+ \interlinepenalty\@M
+ \huge\bfseries #1\par\nobreak
+ \vskip 30\p@
+ }%
+}
+\renewcommand{\section}{%
+ \@startsection{section}{1}{\z@}%
+ {-3.5ex \@plus -1ex \@minus -.2ex}%
+ {2.3ex \@plus.2ex}%
+ {\normalfont\Large\bfseries\slshape}%
+}
+\renewcommand{\subsection}{%
+ \@startsection{subsection}{2}{\z@}%
+ {-2.5ex\@plus -1ex \@minus -.2ex}%
+ {1ex \@plus .2ex}%
+ {\normalfont\large\bfseries}%
+}
+\renewcommand{\subsubsection}{%
+ \@startsection{subsubsection}{2}{\z@}%
+ {-10pt plus 2pt minus 4pt}
+ {-12pt plus 2pt minus 2pt}%
+ {\normalsize\bfseries\slshape}%
+}
+\let\paragraph\relax
+\let\subparagraph\relax
+\setlength{\parindent}{.5cm}
+\@addtoreset{figure}{chapter}
+\@addtoreset{table}{chapter}
+\renewcommand{\thefigure}{\thechapter.\arabic{figure}}
+\renewcommand{\thetable}{\thechapter.\arabic{table}}
+\endinput
+%%
+%% End of file `vxulicentiate.cls'.
diff --git a/obsolete/macros/latex/contrib/vxu/vxulicentiate.tex b/obsolete/macros/latex/contrib/vxu/vxulicentiate.tex
new file mode 100644
index 0000000000..7f08f3ca84
--- /dev/null
+++ b/obsolete/macros/latex/contrib/vxu/vxulicentiate.tex
@@ -0,0 +1,112 @@
+%
+%%
+%% Template for the class vxulicentiate by Robert Nyqvist, 2007.
+%%
+%% For more information see http://www.vxu.se/msi/utb/exarb/lic-xml
+%
+
+% The class is build on book, with some options exculded.
+% Defualt option is 10pt, onecolumn, openanny and twoside.
+\documentclass{vxulicentiate}
+
+% The following packages is loaded by vxulicentiate:
+%
+% color, fancyhdr, geometry, graphicx och ifpdf.
+
+\usepackage[T1]{fontenc}
+\usepackage[swedish,english]{babel}
+\usepackage[latin1]{inputenc}
+
+
+\author{}
+
+\title{}
+
+\subtitle{}
+
+\publyear{}
+
+\discipline{}
+
+\ISRN{}{}
+
+% Syntax: \ISRN{<subject>}{<no>} where the <subject> is one of
+% the following:
+%
+% DV = datavetenskap
+% MA = matematik/tillämpad matematik
+% MDI = matematikdidaktik
+% TeoF = teoretisk fysik
+% TekF = teknisk fysik
+%
+% and where <no> is the number of the report.
+
+% The following commands are definied in vxulicentiate. You can
+% change them with \renewcommand.
+%
+% \wexio = V\"{a}xj\"{o}
+% \university = University
+% \department = School of Mathematics and System Engineering
+% \publication = Reports from MSI
+% \thesistype = Licentiate Thesis
+% \information = A thesis for the Degree of Licentiate of Philosophy
+% in \@discipline.
+% \address = SE-351 95 \wexio, Sweden
+% \homepage = http://www.vxu.se/msi
+% \ISSN = 1650-2647
+% \telephone = +46\,(0)470\,70\,80\,00
+% \fax = +46\,(0)470\,840\,04
+
+
+\begin{document}
+
+
+\frontcover
+
+\frontmatter
+
+\maketitle
+
+\makecopyright
+
+\dedication{}
+
+\begin{abstract}
+ %
+ %
+\end{abstract}
+\begin{keywords}
+ %
+ %
+\end{keywords}
+
+\begin{otherlanguage}{swedish}%
+ \begin{abstract}[Sammanfattning]
+ %
+ %
+ \end{abstract}
+ \begin{keywords}[Nyckelord]
+ %
+ %
+ \end{keywords}
+\end{otherlanguage}
+
+\begin{abstract}[Acknowledgments]
+ %
+ %
+\end{abstract}
+
+\tableofcontents
+
+
+\mainmatter
+
+
+
+\appendix
+
+
+
+\backcover
+
+\end{document}
diff --git a/obsolete/macros/latex/contrib/vxu/vxusymbol.1 b/obsolete/macros/latex/contrib/vxu/vxusymbol.1
new file mode 100644
index 0000000000..c6cd45ff65
--- /dev/null
+++ b/obsolete/macros/latex/contrib/vxu/vxusymbol.1
@@ -0,0 +1,49 @@
+%!PS
+%%BoundingBox: 0 0 730 844
+%%Creator: MetaPost
+%%CreationDate: 2002.10.13:1408
+%%Pages: 1
+%%EndProlog
+%%Page: 1 1
+newpath 377.5 0.21 moveto
+574.10405 6.94577 730 168.2795 730 365 curveto
+730 510.60994 643.45357 642.28888 509.79 700.05 curveto
+447.27832 727.06471 399.18945 779.36703 377.5 843.92 curveto
+377.5 284.08 lineto
+419.15959 277.88672 450 242.11807 450 200 curveto
+450 157.88193 419.15959 122.11328 377.5 115.92 curveto
+377.5 90.52 lineto
+455.22577 97.01936 515 162.0026 515 240 curveto
+515 289.08012 490.98866 335.05556 450.71 363.1 curveto
+418.17265 385.75671 393.10634 417.57527 378.69 454.51 curveto
+478.05414 447.332 555 364.6237 555 265 curveto
+555 164.91797 477.3651 81.99498 377.5 75.41 curveto
+377.5 45.3 lineto
+516.07422 51.97046 625 166.26538 625 305 curveto
+625 407.44589 564.84206 500.34236 471.36 542.25 curveto
+432.22719 559.7947 400.64568 590.73622 382.3 629.5 curveto
+541.00067 620.3336 665 488.96523 665 330 curveto
+665 169.17683 538.18364 36.96179 377.5 30.26 curveto
+ closepath fill
+newpath 352.5 0.21 moveto
+155.89595 6.94577 0 168.2795 0 365 curveto
+0 510.60994 86.54643 642.28888 220.21 700.05 curveto
+282.72168 727.06471 330.81055 779.36703 352.5 843.92 curveto
+352.5 284.08 lineto
+310.84041 277.88672 280 242.11807 280 200 curveto
+280 157.88193 310.84041 122.11328 352.5 115.92 curveto
+352.5 90.52 lineto
+274.77423 97.01936 215 162.0026 215 240 curveto
+215 289.08012 239.01134 335.05556 279.29 363.1 curveto
+311.82735 385.75671 336.89366 417.57527 351.31 454.51 curveto
+251.94586 447.332 175 364.6237 175 265 curveto
+175 164.91797 252.6349 81.99498 352.5 75.41 curveto
+352.5 45.3 lineto
+213.92578 51.97046 105 166.26538 105 305 curveto
+105 407.44589 165.15794 500.34236 258.64 542.25 curveto
+297.77281 559.7947 329.35432 590.73622 347.7 629.5 curveto
+188.99933 620.3336 65 488.96523 65 330 curveto
+65 169.17683 191.81636 36.96179 352.5 30.26 curveto
+ closepath fill
+showpage
+%%EOF
diff --git a/obsolete/macros/latex/contrib/vxu/vxutentamen.sty b/obsolete/macros/latex/contrib/vxu/vxutentamen.sty
new file mode 100644
index 0000000000..a7dbb39022
--- /dev/null
+++ b/obsolete/macros/latex/contrib/vxu/vxutentamen.sty
@@ -0,0 +1,441 @@
+%
+%% vxutentamen.sty
+%%
+%% (C) Robert Nyqvist, 2005-2007
+%%
+%% Du få ändra i denna fil förutsatt att du döper om filen.
+%%
+%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{vxutentamen}
+\DeclareOption{svenska}{%
+ \def\@vxu{V\"{a}xj\"{o} universitet}
+ \def\tentamens@typ{Tentamen}
+ \def\@kryssa{Kryssa f\"{o}r de uppgifter du l\"{a}mnar in}
+ \def\@uppgift{Uppgift}
+ \def\@png{Po\"{a}ng}
+ \def\@kryss{S\"{a}tt X}
+ \def\@Examinator{Examinator}
+ \def\@datum{Datum}
+ \def\@tid{Tid}
+ \def\@lokal{Plats}
+ \def\@Kurskod{Kurskod}
+ \def\@hjlp{Till{\aa}tna hj\"{a}lpmedel}
+ \def\@Meddelande{Meddelande fr{\aa}n l\"{a}raren}
+ \def\@betyg{Betyg}
+ \def\@klegitimation{Uppvisat k{\aa}rlegitimation}
+ \def\@legitimation{Uppvisat legitimation}
+ \def\@ja{Ja}
+ \def\@nej{Nej}
+ \def\@tidinlmn{Tid f\"{o}r inl\"{a}mmnande}
+ \def\@tvakt{Tentamensvaktens signatur}
+ \def\@tentanden{F\"{a}lten nedan fylls i av tentanden}
+ \def\@namn{Namn}
+ \def\@adress{Adress}
+ \def\@epost{E-post}
+ \def\@telefonnummer{Telefonnummer}
+ \def\@personnummer{Personnummer}
+ \def\@antalblad{Antal inl\"{a}mnade blad}
+ \def\tentamensdatum{%
+ \@dag dagen den
+ \oldstylenums{\@tday}
+ \ifcase\@tmonth\or
+ januari\or februari\or mars\or april\or maj\or juni\or juli\or
+ augusti\or september\or oktober\or november\or december%
+ \fi
+ \space
+ \oldstylenums{\@tyear}, klockan
+ \oldstylenums{\@start}.\oldstylenums{00}%
+ --\oldstylenums{\@slut}.\oldstylenums{00}
+ }
+ \def\@rubrik{\tentamens@typ\ i \@kursnamn, \@kurskod, \@kurspoang}
+ \def\@lrubrik{%
+ L\"{o}sningsf\"{o}rslag till \MakeLowercase{\tentamens@typ}
+ i \@kursnamn, \@kurskod, \@kurspoang
+ }
+}
+\DeclareOption{engelska}{%
+ \def\@vxu{V\"{a}xj\"{o} University}
+ \def\tentamens@typ{Examination}
+ \def\@kryssa{Tick the exercises you hand in}
+ \def\@uppgift{Exercises}
+ \def\@png{Points}
+ \def\@kryss{Put a tick}
+ \def\@Examinator{Examiner}
+ \def\@datum{Date}
+ \def\@tid{Time}
+ \def\@lokal{Place}
+ \def\@Kurskod{Course Code}
+ \def\@hjlp{Allowed aids}
+ \def\@Meddelande{Messages from the teacher}
+ \def\@betyg{Grade}
+ \def\@klegitimation{Uppvisat k{\aa}rlegitimation}
+ \def\@legitimation{Uppvisat legitimation}
+ \def\@ja{Ja}
+ \def\@nej{Nej}
+ \def\@tidinlmn{Tid f\"{o}r inl\"{a}mmnande}
+ \def\@tvakt{Tentamensvaktens signatur}
+ \def\@tentanden{The student complete the form below}
+ \def\@namn{Name}
+ \def\@adress{Address}
+ \def\@epost{E-mail}
+ \def\@telefonnummer{Telephone}
+ \def\@personnummer{Personal code number}
+ \def\@antalblad{The number of sheets handed in}
+ \def\tentamensdatum{%
+ \ifcase\@tmonth\or
+ January \or February \or March \or April \or May\or June\or
+ July\or August\or September\or October\or November\or
+ December%
+ \fi
+ \space
+ \oldstylenums{\@tday},
+ \oldstylenums{\@tyear} from
+ \oldstylenums{\@start}:\oldstylenums{00} to
+ \oldstylenums{\@slut}:\oldstylenums{00}
+ }
+ \def\@rubrik{\tentamens@typ\ in \@kursnamn, \@kurskod, \@kurspoang}
+ \def\@lrubrik{%
+ Solutions to \MakeLowercase{\tentamens@typ} in
+ \@kursnamn, \@kurskod, \@kurspoang
+ }
+}
+\ExecuteOptions{svenska}
+\ProcessOptions
+\RequirePackage{ifpdf}
+\ifpdf
+ \RequirePackage[pdftex]{graphicx,color}
+ \pdfcompresslevel 9
+ \pdfadjustspacing 1
+ \AtBeginDocument{%
+ \DeclareGraphicsExtensions{.mps,.pdf,.jpg,.png}%
+ \DeclareGraphicsRule{*}{mps}{*}{}%
+ }
+\else
+ \RequirePackage[dvips]{graphicx,color}
+ \AtBeginDocument{%
+ \DeclareGraphicsExtensions{.mps,.eps}%
+ \DeclareGraphicsRule{*}{eps}{*}{}%
+ }
+\fi
+\RequirePackage{geometry,calc,array}
+\geometry{width=16cm,height=24cm,nohead,nofoot}
+\pagestyle{empty}
+\def\tentamenstyp#1{\gdef\tentamens@typ{#1}}
+\def\examinator#1{\gdef\@examinator{#1}}
+\def\institution#1{\gdef\@institution{#1}}
+\def\kurs#1#2#3{%
+ \gdef\@kursnamn{#1}%
+ \gdef\@kurskod{#2}%
+ \gdef\@kurspoang{#3}%
+}
+\def\datum#1#2#3#4{%
+ \gdef\@tyear{#1}%
+ \gdef\@tmonth{#2}%
+ \gdef\@tday{#3}%
+ \gdef\@dag{#4}%
+}
+\def\@tday{}
+\def\@tmonth{}
+\def\@tyear{}
+\def\@dag{}
+\def\tid#1#2{\gdef\@start{#1}\gdef\@slut{#2}}
+\def\@start{}
+\def\@slut{}
+\def\plats#1{\gdef\@plats{#1}}
+\def\@meddelandei{}
+\def\@meddelandeii{}
+\def\@hjlpmedel{}
+\newif\if@meddelande
+\@meddelandefalse
+\newcommand{\meddelande}[3][\VF]{%
+ \def\VF{#2}%
+ \gdef\@meddelandei{#1}%
+ \gdef\@meddelandeii{#2}%
+ \gdef\@hjlpmedel{#3}%
+ \@meddelandetrue
+}
+\newcount\@antaluppgifter
+\def\antaluppgifter#1{\global\@antaluppgifter=#1}
+\def\@boxrubrik(#1,#2)#3{\put(#1,#2){\makebox(0,0)[lt]{%
+ \fontsize{7}{8}\usefont{T1}{phv}{b}{n}#3}}%
+}
+\def\@boxrubrikkursiv(#1,#2)#3{\put(#1,#2){\makebox(0,0)[lt]{%
+ \fontsize{7}{8}\usefont{T1}{phv}{m}{sl}#3}}%
+}
+\def\@boxtext(#1,#2)#3{\put(#1,#2){\makebox(0,0)[lt]{%
+ \usefont{T1}{phv}{m}{n}#3}}%
+}
+\def\@boxtextkursiv(#1,#2)#3{\put(#1,#2){\makebox(0,0)[lb]{%
+ \usefont{T1}{phv}{m}{sl}#3}}%
+}
+\def\@ruta{%
+ \begin{picture}(4,4)
+ \put(0,0){\line(1,0){4}}
+ \put(0,4){\line(1,0){4}}
+ \put(0,0){\line(0,1){4}}
+ \put(4,0){\line(0,1){4}}
+ \end{picture}%
+}
+\def\@uppgifter{%
+ \bgroup
+ \setlength{\unitlength}{6mm}%
+ \begin{picture}(0,12)(0,-12)
+ \@boxrubrikkursiv(0.2,1.3){\@kryssa}
+ \@boxtext(2.222,0.1){\makebox(0,0)[b]{%
+ \fontsize{8}{9}\usefont{T1}{phv}{m}{n}\@uppgift}%
+ }
+ \@boxtext(6.666,0.1){\makebox(0,0)[b]{%
+ \fontsize{8}{9}\usefont{T1}{phv}{b}{n}\@png}%
+ }
+ \@boxtextkursiv(11.1,0.1){\makebox(0,0)[b]{%
+ \fontsize{8}{9}\usefont{T1}{phv}{m}{sl}\@kryss}%
+ }
+ \put(0,1.45){\line(1,0){13.333}}
+ \put(4.444,0){\line(0,-1){12}}
+ \put(8.888,0){\line(0,-1){12}}
+ \newcount\@kvar
+ \@kvar=\@antaluppgifter
+ \ifnum\@kvar<12
+ \loop
+ \put(0,-\the\@kvar.5){%
+ \makebox(0,0)[l]{%
+ \textcolor[gray]{.8}{\rule{80mm}{6mm}}%
+ }%
+ }%
+ \advance\@kvar by 1
+ \ifnum\@kvar<12\repeat
+ \fi
+ \newcount\@y
+ \newcount\@nr
+ \newcount\@au
+ \@nr=1
+ \@au=\@antaluppgifter
+ \advance\@au by 1
+ \loop
+ \put(0,-\the\@y){\line(1,0){13.333}}
+ \ifnum\@nr<\@au
+ \put(2.222,-\the\@y.5){%
+ \makebox(0,0){\fontsize{12}{9}\usefont{T1}{phv}{m}{n}\the\@nr}%
+ }
+ \fi
+ \advance\@nr by 1
+ \advance\@y by 1
+ \ifnum\@y<\@au\repeat
+ \end{picture}
+ \egroup
+}
+\def\@ifyll(#1,#2)#3{%
+ \@boxtextkursiv(#1,#2){
+ \makebox(76,0)[bl]{#3\space\hrulefill}%
+ }%
+}
+\def\blankett{%
+ \noindent
+ \parbox[t]{.5\textwidth}{%
+ \fontsize{20.74}{20.74}\usefont{T1}{ppl}{m}{n}%
+ \includegraphics[width=1.4em]{vxusymbol.1}%
+ \kern.25em\hbox{\raisebox{\depth}{\@vxu}}\\
+ \mbox{}\kern1.65em\parbox{5cm}{%
+ \fontsize{10.37}{12.444}\usefont{T1}{ppl}{m}{n}\@institution}}
+ \hspace*{\fill}%
+ \bgroup
+ \fontsize{35}{25}\usefont{T1}{phv}{m}{n}\tentamens@typ
+ \egroup
+ \vskip7ex
+ \setlength{\unitlength}{1mm}
+ \noindent
+ \begin{picture}(160,190)(0,-190)
+ \put(80,-160){\makebox(0,0)[lb]{\@uppgifter}}
+ % Horisontella linjer
+ \put(0,0){\line(1,0){160}}
+ \put(0,-10){\line(1,0){80}}
+ \put(0,-20){\line(1,0){80}}
+ \put(0,-30){\line(1,0){80}}
+ \put(0,-40){\line(1,0){80}}
+ \put(0,-65){\line(1,0){80}}
+ \put(0,-142){\line(1,0){80}}
+ \put(0,-160){\line(1,0){160}}
+ \put(0,-170){\line(1,0){160}}
+ \put(0,-180){\line(1,0){160}}
+ \put(0,-190){\line(1,0){160}}
+ % Vertikala linjer
+ \put(0,0){\line(0,-1){190}}
+ \put(160,0){\line(0,-1){190}}
+ \put(80,0){\line(0,-1){160}}
+ \put(40,-142){\line(0,-1){18}}
+ \put(80,-180){\line(0,-1){10}}
+ % Text
+ \@boxrubrik(1,-1){\@Examinator}
+ \@boxtext(2,-5){\@examinator}
+ \@boxrubrik(1,-11){\@datum}
+ \@boxtext(2,-15){%
+ \@tyear--%
+ \ifnum\@tmonth<10\relax0\fi\@tmonth--%
+ \ifnum\@tday<10\relax0\fi\@tday
+ }
+ \@boxrubrik(60,-11){\@tid}
+ \@boxtext(61,-15){\@start--\@slut}
+ \@boxrubrik(1,-21){\@lokal}
+ \@boxtext(2,-25){\@plats}
+ \@boxrubrik(1,-31){\@Kurskod}
+ \@boxtext(2,-35){\@kurskod}
+ \@boxrubrik(1,-41){\@hjlp}
+ \@boxtext(2,-45){\parbox[t]{76mm}{\raggedright\@hjlpmedel}}
+ \@boxrubrik(1,-66){\@Meddelande}
+ \@boxtext(2,-70){\parbox[t]{76mm}{%
+ \raggedright\@meddelandei}}
+ \@boxrubrik(1,-143){\@png}
+ \@boxrubrik(41,-143){\@betyg}
+ \@boxtext(2,-163.5){\@klegitimation}
+ \put(60,-167){\@ruta}
+ \@boxtext(66,-163.5){\@ja}
+ \put(85,-167){\@ruta}
+ \@boxtext(91,-163.5){\@nej}
+ \@boxtext(2,-173.5){\@legitimation}
+ \put(60,-177){\@ruta}
+ \@boxtext(66,-173.5){\@ja}
+ \put(85,-177){\@ruta}
+ \@boxtext(91,-173.5){\@nej}
+ \@boxrubrik(1,-181){\@tidinlmn}
+ \@boxrubrik(81,-181){\@tvakt}
+ \@boxrubrikkursiv(81,-1){\@tentanden}
+ \@ifyll(82,-12){\@namn:}
+ \@ifyll(82,-22){\@adress:}
+ \@ifyll(82,-32){\phantom{\@adress:}}
+ \@ifyll(82,-42){\@epost:}
+ \@ifyll(82,-52){\@telefonnummer:}
+ \@ifyll(82,-62){\@personnummer:}
+ \@ifyll(82,-76){\@antalblad:}
+ \end{picture}
+ \newpage
+}
+\def\huvud{
+ \noindent\textbf{\large\@vxu}\\
+ \@institution\\
+ \textit{\@examinator}
+ \vskip4ex
+ \begin{center}
+ \textbf{\@rubrik}
+ \ifx\@tday\empty\else
+ \\
+ \tentamensdatum
+ \fi
+ \end{center}
+ \if@meddelande
+ \vskip3ex
+ \begin{center}
+ \setlength{\fboxsep}{2mm}
+ \setlength{\fboxrule}{.01mm}
+ \fbox{\parbox[l]{155.8mm}{\@meddelandeii
+ \ifx\@meddelandeii\@empty\else
+ \ifx\@hjlpmedel\@empty\else
+ \par
+ \fi
+ \fi
+ \ifx\@hjlpmedel\@empty\else
+ \textsl{\@hjlp:} \@hjlpmedel
+ \fi}%
+ }
+ \end{center}
+ \fi
+ \vskip3ex
+}
+\def\poang#1{\hspace*{\fill}(#1)}
+\newcounter{uppgift}
+\newenvironment{uppgifter}{%
+ \begin{list}{%
+ \hfill\textbf{\arabic{uppgift}.}%
+ }{%
+ \usecounter{uppgift}%
+ \settowidth{\labelwidth}{\textbf{22.}}%
+ \setlength{\labelsep}{1em}%
+ \setlength{\leftmargin}{\labelwidth+\labelsep}%
+ \setlength{\rightmargin}{0pt}%
+ }
+ }{%
+ \write\@auxout{\string\antaluppgifter{\theuppgift}}%
+ \end{list}
+}
+\newcounter{duppgift}
+\renewcommand{\theduppgift}{(\alph{duppgift})}
+\newenvironment{duppgifter}{%
+ \begin{list}{\theduppgift\hfill}{%
+ \usecounter{duppgift}%
+ \setlength{\leftmargin}{2em}%
+ \setlength{\rightmargin}{0pt}%
+ \setlength{\labelwidth}{2em}%
+ \setlength{\labelsep}{0pt}%
+ \setlength{\itemindent}{0pt}%
+ \setlength{\listparindent}{.75em}%
+ \setlength{\itemsep}{5pt}%
+ \setlength{\parsep}{0pt}%
+ \setlength{\topsep}{.5ex}%
+ }%
+ }{%
+ \end{list}
+}
+\newcounter{deluppgift}
+\renewcommand{\thedeluppgift}{(\alph{deluppgift})}
+\newlength{\koli}
+\setlength{\koli}{2em}
+\newlength{\kolii}
+\newcommand{\du}{%
+ \makebox[\koli][l]{\thedeluppgift}%
+ \refstepcounter{deluppgift}%
+}
+\newenvironment{deluppgifter}[1][2]{%
+ \par
+ \setlength{\kolii}{\linewidth}%
+ \addtolength{\kolii}{-#1\koli}%
+ \ifcase#1\or\or
+ \setlength{\kolii}{.5\kolii}% Om #1 = 2
+ \or
+ \setlength{\kolii}{.332\kolii}% Om #1 = 3
+ \or
+ \setlength{\kolii}{.25\kolii}% Om #1 = 4
+ \or
+ \setlength{\kolii}{.2\kolii}% Om #1 = 5
+ \fi
+ \setcounter{deluppgift}{1}%
+ \let\oldarraystretch=\arraystretch
+ \renewcommand{\arraystretch}{1.35}%
+ \noindent
+ \begin{tabular}[t]{*{#1}{@{\du}p{\kolii}}@{}}
+ }{%
+ \end{tabular}
+ \par
+ \renewcommand{\arraystretch}{\oldarraystretch}
+}
+\def\mvh#1{%
+ \vskip3ex
+ \begin{center}
+ \usefont{T1}{pzc}{m}{it}\Large#1
+ \end{center}%
+}
+\newcommand{\facit}{%
+ \clearpage
+ \noindent\textbf{\@vxu}\\
+ \@institution\\
+ \textit{\@examinator}
+ \vskip4ex
+ \begin{center}
+ \textbf{\@lrubrik}%
+ \ifx\@tday\empty\else
+ \\
+ \tentamensdatum
+ \fi
+ \end{center}
+ \vskip3ex
+ }
+\newenvironment{lsn}{%
+ \begin{list}{\hfill\textbf{\arabic{uppgift}.}}{%
+ \usecounter{uppgift}%
+ \settowidth{\labelwidth}{\textbf{22.}}%
+ \setlength{\labelsep}{1em}%
+ \setlength{\leftmargin}{\labelwidth+\labelsep}%
+ \setlength{\rightmargin}{0pt}%
+ }
+ }{%
+ \end{list}%
+}
diff --git a/obsolete/macros/latex/contrib/vxu/vxutentamen.tex b/obsolete/macros/latex/contrib/vxu/vxutentamen.tex
new file mode 100644
index 0000000000..fc65000370
--- /dev/null
+++ b/obsolete/macros/latex/contrib/vxu/vxutentamen.tex
@@ -0,0 +1,116 @@
+%
+%% vxutentamen.tex
+%%
+%% (C) Robert Nyqvist, 2005-2007
+%%
+%% Enkel schablon för tentamen. Skriv in uppgifterna manuellt.
+%% Kompilera dokumentet minst två gånger för att får försättsbladet
+%% korrekt.
+%
+
+\documentclass[12pt,a4paper]{article}
+
+\usepackage[T1]{fontenc}
+
+% Bör tas bort vid engelsk version:
+\usepackage[swedish]{babel}
+
+% Ändra latin1 till ansinew eller applemac beroende på om du
+% arbetar i Windows- respektive Macintoshmiljö:
+\usepackage[latin1]{inputenc}
+
+% Samma sak som \usepackage[svenska]{vxutentamen}:
+\usepackage{vxutentamen}
+% \usepackage[engelska]{vxutentamen}
+
+% Krävs för att kommandot \tag nedan ska fungera:
+\usepackage{amsmath}
+
+\begin{document}
+
+% Ange vilken sorts av tentamen det rör sig om. Förvald är ''Tentamen'':
+% \tentamenstyp{Omtentamen}
+% \tentamenstyp{Hemtentamen}
+% \tentamenstyp{Dugga}
+
+% Ange examinator på kursen:
+\examinator{}
+
+% Institution:
+\institution{Matematiska och system-\\tekniska institutionen}
+% \institution{School of Mathematics\\ and System Engineering}
+
+% Deklarera vilken kurs det rör sig om. Kommandot tar argument:
+% Kursnamn, kurskod respektive poäng, t.ex.
+% \kurs{Analys}{MAA711}{10p}:
+\kurs{}{}{}
+
+% Med nästa kommando anger du tentamensdatum.
+% Kommandot tar tre argument:
+% 1. År
+% 2. Månad (1, 2, ..., 12)
+% 3. Dag (1, 2, ..., 31)
+% 4. Veckodag (Mån, Tis, Ons, Tors, Fre, Lör, Sön)
+\datum{}{}{}{}
+
+% Ange vid vilka klockslag (hela timmar) som tentamen startar
+% respektive slutar:
+\tid{}{}
+
+% Ange var tentamen äger rum:
+\plats{Någon annanstans}
+
+% Meddelande till tentanden, där kommandot \meddelande[1]{2}{3}
+% tar tre argument:
+% [1] - text på försättsbladet
+% {2} - text på uppgiftsbladet
+% {3} - information om tillåtna hjälpmedel
+% Om [1] utelämnas, används {2} även på försättsbladet:
+\meddelande{}{}
+% Om du har några meddelanden, bör du kommenterar bort kommandot ovan.
+
+% Genererar försättsblad
+\blankett
+
+% Genererar rubrik m.m. på första uppgiftssidan:
+\huvud
+
+% Själva uppgifterna. Avsluta varje uppgift med \poang{}, se nedan.
+% Då en fristående formel asvlutar en uppgift byter man ut \poang{}
+% med \tag{}. Deluppgifter infogas med omgivningen deluppgifter.
+% Det finns två omgivnignar för deluppgifter, deluppgifter som fungerar
+% som tabular och duppgifter som fungerar som enumerate.
+
+\begin{uppgifter}
+\item Lös \ldots \poang{5p}
+\item Lös \ldots
+ \[
+ a x - b = 0\tag{5p}
+ \]
+\item Lös följande ekvationer\poang{6$\times$1p}
+ \begin{deluppgifter}[3] % Antal kolumner. Kan vara 2, 3 eller 4.
+ $x + 0 = 0$ & $x + 1 = 0$ & $x + 2 = 0$ \\
+ $x + 3 = 0$ & $x + 4 = 0$ & $x + 5 = 0$
+ \end{deluppgifter}
+\item
+ \begin{duppgifter}
+ \item Lös denna om ni kan\poang{5p}
+ \item och denna! \poang{3p}
+ \end{duppgifter}
+\end{uppgifter}
+
+% Önska tentanden lycka till eller liknande:
+\mvh{Lycka till!}
+
+
+% Startar en ny sida för lösningsförslagen:
+\facit
+
+% Lösningarna:
+\begin{lsn}
+\item
+\item
+\end{lsn}
+
+\end{document}
+
diff --git a/obsolete/macros/latex/contrib/xypdf/README b/obsolete/macros/latex/contrib/xypdf/README
new file mode 100644
index 0000000000..b2b8041b09
--- /dev/null
+++ b/obsolete/macros/latex/contrib/xypdf/README
@@ -0,0 +1,29 @@
+xypdf 2010/05/13 v1.4
+Copyright © 2010 by Daniel Müllner
+<http://www.math.uni-bonn.de/people/muellner/>
+
+------------------------------------------------------------------------------
+
+The xypdf package improves the output quality of the Xy-pic package when PDF
+documents are generated. It produces generic PDF code for graphical elements
+like lines, curves and circles instead of approximating these elements with
+glyphs in special fonts as the original Xy-pic package does. The xypdf package
+works with both TeX and LaTeX in the occurrences of pdfTeX, XeTeX and eTeX
+with dvipdfm(x) to generate PDF files.
+
+The xypdf package is being integrated and distributed together with Xy-pic,
+starting with Xy-pic version 3.8. Since xypdf is now a “driver†and not a
+“LaTeX package†in technical terms, the file “xypdf.sty†has become obsolete
+and is now just a wrapper for “xypdf.texâ€. You do not need to install the file
+“xypdf.sty†or xypdf as a separate package. Instead, make sure that you have
+Xy-pic version 3.8 or later, and the PDF driver will be included.
+
+The current version of Xy-pic with xypdf can be found at
+<http://ctan.org/tex-archive/macros/generic/diagrams/xypic/>.
+
+------------------------------------------------------------------------------
+
+The xypdf package may be distributed and/or modified under the conditions 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. The
+License is available at <http://www.gnu.org/licenses/>.
diff --git a/obsolete/macros/latex/contrib/xypdf/xypdf.sty b/obsolete/macros/latex/contrib/xypdf/xypdf.sty
new file mode 100644
index 0000000000..2b35b87b69
--- /dev/null
+++ b/obsolete/macros/latex/contrib/xypdf/xypdf.sty
@@ -0,0 +1,30 @@
+%% The xypdf package for TeX and LaTeX
+%% Copyright (c) 2010 by Daniel M\"ullner (Müllner)
+%% <http://www.math.uni-bonn.de/people/muellner>
+%% --------------------------------------------------------------------
+%%
+%% 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.
+%%
+%% The GNU General Public License is available at
+%% <http://www.gnu.org/licenses/>.
+%%
+\NeedsTeXFormat{LaTeX2e}
+\PackageWarning{xypdf}{The file `xypdf.sty' has become obsolete and is now^^J%
+ just a wrapper for `xypdf.tex'. Since version 1.4, the xypdf package has been^^J%
+ integrated into the Xy-pic package. Make sure that you have Xy-pic version 3.8^^J%
+ or later. Then write \string\usepackage[pdf]{xy} or \string\xyoption{pdf} instead of^^J%
+ \string\usepackage{xypdf} in your document\@gobble}
+\RequirePackage[\@ptionlist{xy.sty}]{xy}
+\xyrequire{pdf}
+\ProvidesPackage{xypdf}[2010/05/13 v1.4 PDF output for the Xy-pic package (obsolete^^Jstyle file!)]
+\endinput
+%%
+%% End of file `xypdf.sty'.
diff --git a/obsolete/macros/latex/exptl/si/README b/obsolete/macros/latex/exptl/si/README
new file mode 100644
index 0000000000..e034641355
--- /dev/null
+++ b/obsolete/macros/latex/exptl/si/README
@@ -0,0 +1,26 @@
+----------------------------------------------------------------
+The si package --- A comprehensive (SI) units package
+Maintained by Joseph Wright
+E-mail: joseph.wright@morningstar2.co.uk
+Released under the LaTeX Project Public License v1.3c or later
+See http://www.latex-project.org/lppl.txt
+----------------------------------------------------------------
+
+Typesetting values with units requires care to ensure that the
+combined mathematical meaning of the value plus unit combination is
+clear. In particular, the SI units system lays down a consistent
+set of units with rules on how these are to be used. However,
+different countries and publishers have differing conventions on
+the exact appearance of numbers (and units). A number of LaTeX
+packages have been developed to provide consistent application of
+the various rules: SIunits, sistyle, unitsdef and units are
+the leading examples. The numprint package provides a large number
+of number-related functions, while dcolumn and rccol provide tools for typesetting tabular numbers.
+
+The si package takes the best from the existing packages, and
+adds new features and a consistent interface. A number of new
+ideas have been incorporated, to fill gaps in the existing
+provision. The package also provides backward-compatibility with
+SIunits, sistyle, unitsdef and units. The aim is to have one
+package to handle all of the possible unit-related needs of LaTeX
+users.
diff --git a/obsolete/macros/latex/exptl/si/si.dtx b/obsolete/macros/latex/exptl/si/si.dtx
new file mode 100644
index 0000000000..f7cab0cd35
--- /dev/null
+++ b/obsolete/macros/latex/exptl/si/si.dtx
@@ -0,0 +1,9274 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2008 by
+% Joseph Wright <joseph.wright@morningstar2.co.uk>
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either
+% version 1.3c of this license or (at your option) any later
+% version. The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3c or later is part of all distributions of
+% LaTeX version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained.'
+%
+% The current maintainer of this work is Joseph Wright.
+%
+% This work consists of the source file si.dtx
+% and the derived files si.ins,
+% si.sty,
+% si.pdf,
+% si-SIunits.cfg,
+% si-sistyle.cfg,
+% si-unitsdef.cfg,
+% si-units.cfg,
+% si-prefix.cfg,
+% si-named.cfg,
+% si-prefixed.cfg,
+% si-addn.cfg,
+% si-abbr.cfg and
+% si-accepted.cfg
+%
+%
+% Unpacking:
+% (a) If si.ins is present:
+% tex si.ins
+% (b) Without si.ins:
+% tex si.dtx
+% (c) If you use LaTeX to generate files:
+% latex \let\install=y\input{si.dtx}
+%
+% Documentation:
+% (a) Without write18 enabled:
+% pdflatex si.dtx
+% bibtex8 --wolfgang si
+% makeindex -s gind.ist si.idx
+% makeindex -s gglo.ist -o si.gls si.glo
+% pdflatex si.dtx
+% makeindex -s gind.ist si.idx
+% makeindex -s gglo.ist -o si.gls si.glo
+% pdflatex si.dtx
+% (b) With write18 enabled:
+% pdflatex si.dtx
+% bibtex8 --wolfgang si
+% pdflatex si.dtx
+% pdflatex si.dtx
+%
+% Installation:
+% Copy si.sty and the various .cfg files to a location
+% searched by TeX, and if required by your TeX installation,
+% run the appropriate command to build a hash of files
+% (texhash, mpm --update-db, etc.)
+%
+% Note:
+% The jawltxdoc.sty file is not needed for installation,
+% only for building the documentation; it may be deleted
+% after producing the documentation (if necessary).
+%
+%<*ignore>
+% This is all taken verbatim from Heiko Oberdiek's packages
+\begingroup
+ \def\x{LaTeX2e}%
+\expandafter\endgroup
+\ifcase 0\ifx\install y1\fi\expandafter
+ \ifx\csname processbatchFile\endcsname\relax\else1\fi
+ \ifx\fmtname\x\else 1\fi\relax
+\else\csname fi\endcsname
+%</ignore>
+%<*install>
+\input docstrip.tex
+\keepsilent
+\askforoverwritefalse
+\preamble
+ ----------------------------------------------------------------
+ The si package --- A comprehensive (SI) units package
+ Maintained by Joseph Wright
+ E-mail: joseph.wright@morningstar2.co.uk
+ Released under the LaTeX Project Public License v1.3c or later
+ See http://www.latex-project.org/lppl.txt
+ ----------------------------------------------------------------
+
+\endpreamble
+\Msg{Generating si files:}
+\usedir{tex/latex/contib/si}
+\generate{\file{\jobname.ins}{\from{\jobname.dtx}{install}}
+ \file{\jobname.sty}{\from{\jobname.dtx}{package}}
+ \file{jawltxdoc.sty}{\from{\jobname.dtx}{jawltxdoc}}
+}
+\usedir{tex/latex/contib/config}
+\generate{\file{si-SIunits.cfg}{\from{\jobname.dtx}{SIunits}}
+ \file{si-sistyle.cfg}{\from{\jobname.dtx}{sistyle}}
+ \file{si-unitsdef.cfg}{\from{\jobname.dtx}{unitsdef}}
+ \file{si-units.cfg}{\from{\jobname.dtx}{units}}
+}
+\generate{\file{si-prefix.cfg}{\from{\jobname.dtx}{prefix}}
+ \file{si-named.cfg}{\from{\jobname.dtx}{named}}
+ \file{si-prefixed.cfg}{\from{\jobname.dtx}{prefixed}}
+ \file{si-addn.cfg}{\from{\jobname.dtx}{addn}}
+ \file{si-accepted.cfg}{\from{\jobname.dtx}{accepted}}
+ \file{si-physical.cfg}{\from{\jobname.dtx}{physical}}
+ \file{si-abbr.cfg}{\from{\jobname.dtx}{abbr}}
+}
+\generate{\file{si-synchem.cfg}{\from{\jobname.dtx}{synchem}}
+ \file{si-hep.cfg}{\from{\jobname.dtx}{hep}}
+ \file{si-binary.cfg}{\from{\jobname.dtx}{binary}}
+}
+\generate{\file{si-UK.cfg}{\from{\jobname.dtx}{UK}}
+ \file{si-USA.cfg}{\from{\jobname.dtx}{USA}}
+ \file{si-germany.cfg}{\from{\jobname.dtx}{germany}}
+ \file{si-south-africa.cfg}{\from{\jobname.dtx}
+ {south-africa}}
+}
+\nopreamble
+\usedir{doc/latex/contib/si}
+\generate{\file{\jobname.bib}{\from{\jobname.dtx}{refs}}
+}
+\endbatchfile
+%</install>
+%<*ignore>
+\fi
+% Will Robertson's trick
+\immediate\write18{makeindex -s gind.ist -o \jobname.ind \jobname.idx}
+\immediate\write18{makeindex -s gglo.ist -o \jobname.gls \jobname.glo}
+%</ignore>
+%<*driver>
+\PassOptionsToClass{a4paper}{article}
+\documentclass{ltxdoc}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+%\OnlyDescription
+% The various formatting commands used in this file are collected
+% together in |jawltxdoc|.
+\usepackage{jawltxdoc,textcomp}
+\usepackage[latin1]{inputenc}
+\begin{document}
+ \DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+%\CheckSum{6764}
+%
+% \CharacterTable
+% {Upper-case \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
+% Lower-case \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
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+%\GetFileInfo{\jobname.sty}
+%
+%\DoNotIndex{\@car,\@eha,\@ehc,\@empty,\@firstofone,\@firstoftwo}
+%\DoNotIndex{\@for,\@gobble,\@gobbletwo,\@ifl@aded,\@ifnextchar}
+%\DoNotIndex{\@ifpackagelater,\@ifpackageloaded,\@ifstar}
+%\DoNotIndex{\@ifundefined,\@makeother,\@namedef,\@nameuse,\@ne}
+%\DoNotIndex{\@nil,\@secondoftwo,\@temptokena,\@undefined,\AA}
+%\DoNotIndex{\active,\addto,\addtolength,\advance,\afterassignment}
+%\DoNotIndex{\aftergroup,\AtBeginDocument,\AtEndOfPackage}
+%\DoNotIndex{\begingroup,\bfseries,\bgroup,\boldmath,\box}
+%\DoNotIndex{\capitalring,\catcode,\cdot,\chardef,\check@mathfonts}
+%\DoNotIndex{\circ,\csname,\DeclareFontEncoding,\DeclareFontFamily}
+%\DoNotIndex{\DeclareFontShape,\DeclareFontSubstitution}
+%\DoNotIndex{\DeclareMathSymbol,\DeclareRobustCommand}
+%\DoNotIndex{\DeclareSymbolFont,\DeclareTextSymbol}
+%\DoNotIndex{\DeclareTextSymbolDefault,\def,\define@boolkey}
+%\DoNotIndex{\define@choicekey,\define@cmdkey,\define@cmdkeys}
+%\DoNotIndex{\define@key,\displaystyle,\displaywidth,\divide,\do}
+%\DoNotIndex{\edef,\egroup,\else,\encodingdefault,\end,\endcsname}
+%\DoNotIndex{\endgroup,\endinput,\endtabular,\ensuremath}
+%\DoNotIndex{\expandafter,\f@family,\f@series,\fam,\fi,\font}
+%\DoNotIndex{\fontsize,\frac,\gdef,\global,\hbox,\hfil,\hfill,\hskip}
+%\DoNotIndex{\hspace,\hss,\ifcsname,\ifdim,\iffalse,\IfFileExists}
+%\DoNotIndex{\ifmmode,\ifnum,\ifx,\ignorespaces,\inputencodingname}
+%\DoNotIndex{\InputIfFileExists,\key@ifundefine,\let,\long,\m@ne}
+%\DoNotIndex{\makeatletter,\math@version,\mathchoice,\mathnormal}
+%\DoNotIndex{\mathord,\mathrm,\mathsf,\mathtt,\mdseries}
+%\DoNotIndex{\MessageBreak,\mkern,\mp,\NC@find,\NeedsTeXFormat}
+%\DoNotIndex{\newbox,\newcolumntype,\newcommand,\newcount,\newdimen}
+%\DoNotIndex{\newif,\newlength,\newtoks,\nobreak,\noexpand,\p@}
+%\DoNotIndex{\PackageError,\PackageInfo,\PackageWarning,\phantom}
+%\DoNotIndex{\ProcessOptionsX,\protect,\protected@edef,\ProvidesFile}
+%\DoNotIndex{\ProvidesPackage,\Q,\raisebox,\relax,\renewcommand}
+%\DoNotIndex{\RequirePackage,\rlap,\sbox,\scantokens}
+%\DoNotIndex{\scriptscriptstyle,\scriptstyle,\selectfont,\setbox}
+%\DoNotIndex{\setkeys,\setlength,\settoheight,\sf@size,\sfdefault}
+%\DoNotIndex{\sfrac,\skewchar,\sp,\space,\string,\strip@pt}
+%\DoNotIndex{\tabularnewline,\text,\textdegree,\textmu,\textohm}
+%\DoNotIndex{\textsc,\textstyle,\textsuperscript,\the,\thr@@,\times}
+%\DoNotIndex{\ttdefault,\uccode,\unboldmath,\unhbox,\upmu,\Upomega}
+%\DoNotIndex{\uppercase,\upshape,\wd,\xdef,\xspace,\z@}
+%
+%\changes{0.6}{2008/02/18}{First public release}
+%
+%\setkeys{lst}{language=[LaTeX]{TeX},moretexcs={sisetup,num,ang,SI,
+% unitsym,newunit,newpower,newprefix,metre,candela,kelvin,ampere,
+% second,mole,per,kilogram,Square,squared,cubed,cubic,kilo,centi,
+% gram,tothe,toprule,midrule,bottomrule}}
+%
+%\title{\currpkg\ --- A comprehensive (SI) units package^^A
+% \thanks{This file describes version \fileversion, last revised
+% \filedate.}}
+%\author{Joseph Wright^^A
+% \thanks{E-mail: joseph.wright@morningstar2.co.uk}}
+%\date{Released \filedate}
+%
+%\maketitle
+%
+%\newcommand*{\SIunits}{\pkg{SIunits}\xspace}
+%\newcommand*{\sistyle}{\pkg{sistyle}\xspace}
+%\newcommand*{\unitsdef}{\pkg{unitsdef}\xspace}
+%\newcommand*{\unitspkg}{\pkg{units}\xspace}
+%\newcommand*{\numprint}{\pkg{numprint}\xspace}
+%\begin{abstract}
+% Typesetting values with units requires care to ensure that the
+% combined mathematical meaning of the value plus unit combination is
+% clear. In particular, the SI units system lays down a consistent
+% set of units with rules on how these are to be used. However,
+% different countries and publishers have differing conventions on
+% the exact appearance of numbers (and units). A number of \LaTeX\
+% packages have been developed to provide consistent application of
+% the various rules: \SIunits, \sistyle, \unitsdef and \unitspkg are
+% the leading examples. The \numprint package provides a large number
+% of number-related functions, while \pkg{dcolumn} and \pkg{rccol}
+% provide tools for typesetting tabular numbers.
+%
+% The \currpkg package takes the best from the existing packages, and
+% adds new features and a consistent interface. A number of new
+% ideas have been incorporated, to fill gaps in the existing
+% provision. The package also provides backward-compatibility with
+% \SIunits, \sistyle, \unitsdef and \unitspkg. The aim is to have one
+% package to handle all of the possible unit-related needs of \LaTeX\
+% users.
+%\end{abstract}
+%
+%\begin{multicols}{2}
+% \tableofcontents
+%\end{multicols}
+%
+%\part{Introduction}
+%
+% The correct application of units of measurement is very important
+% in technical applications. For this reason, carefully-crafted
+% definitions of a coherent units system have been laid down by the
+% \latin{Conf\'erence G\'en\'erale des Poids et
+% Mesures}\footnote{General Conference on Weights and Measures.}
+% (CGPM); this has resulted in the \latin{Syst\`eme International
+% d'Unit\'es}\footnote{International System of Units.} (SI). At the
+% same time, typographic conventions for correctly displaying both
+% numbers and units exist to ensure that no loss of meaning occurs in
+% printed matter.
+%
+% \LaTeX\ support typesetting numbers and units is currently provided
+% by a number of packages: \SIunits, \sistyle, \unitspkg, \unitsdef
+% and \numprint. Each package has advantages, and no single package
+% has so far displaced use of the others. The aim of the \currpkg
+% package is to learn from the existing implementations to provide a
+% coherent and extendable approach to the problem. The original aim
+% of developing \currpkg was to produce a ``version 2'' successor to
+% \SIunits or \sistyle. However, as the package has been developed a
+% number of inconsistencies in the interfaces of the existing
+% packages have been noted. Thus by default \currpkg does not follow
+% any one of the existing packages; the interface is intended to be
+% self-consistent and logical. As a result, \currpkg is now intended
+% as a new package. The author hopes that by providing a
+% comprehensive package here, the other ``unit'' packages will be
+% superseded.
+%
+% Where possible, conventions from the existing solutions have been
+% used here. For example, the macros \cs{num}, \cs{ang} and \cs{SI}
+% act in a very similar fashion to those in existing packages. In
+% emulation mode, \currpkg tries hard to work in exactly the same
+% manner as the emulated package. However, in certain places
+% inconsistencies exist due to changes in the underlying mechanisms
+% used. These are noted where they are known to the package author.
+%
+%\section{Existing packages}
+% Both the \SIunits an \sistyle package are designed to
+% allow typesetting of SI units, with consistent typography and
+% following the rules laid down by \textsc{nist}
+% \cite{NIST}.\footnote{\sistyle also allows the use of German
+% and South African rules ``out of the box''.} The \sistyle
+% package concentrates on typography, whereas the \SIunits
+% package is focussed on careful application of SI units in place of
+% other systems. The key strengths of the two packages can be
+% summarised as follows:\footnote{Thanks to Stefan Pinnow for the
+% excellent summary on \texttt{comp.text.tex}, on which this is
+% based.}
+%\begin{itemize}
+% \item \sistyle
+% \begin{itemize}
+% \item Easy input for numbers, for example typing
+% |\num{5.8e-7}| and getting ``\num{5.8e-7}'' as output.
+% \item Input of numbers can be with comma or dot as decimal
+% sign and is independent of output.
+% \item Output style can follow particular regional conventions
+% (\latin{via} \cs{sistyle}) or even be dependent on the
+% document language (implemented by \cs{sistyleToLang}).
+% \end{itemize}
+% \item \SIunits
+% \begin{itemize}
+% \item The look of units can be easily be changed in the whole
+% document by redefining the commands.
+% \item New units can be added on a document-specific basis
+% (\cs{addunit}), for example to match journal requirements (
+% \eg\ ``wt.-\%" \latin{versus} ``wt\%'').
+% \item Package aims to enforce use of SI units as far as
+% possible.
+% \end{itemize}
+%\end{itemize}
+%
+% At the same time, the \unitsdef package allows ``trailing'' units,
+% so for example |10\metre| to yield ``10\metre'' with a non-breaking
+% and definable space. However, this does not allow control of the
+% format of the number. The \unitsdef package is built on top of
+% \unitspkg, which is an even more general. The \numprint package
+% provides fine control for printing numbers, with features beyond
+% those in \sistyle. Finally, the \pkg{hepunits} package adds
+% various physics units to \SIunits.
+%
+%\section{The wish-list}
+%\newcommand*{\WishlistStatus}[1]{\textbf{#1}}
+%\newcommand*{\Todo}{\WishlistStatus{To do}}
+%\newcommand*{\Ongoing}{\WishlistStatus{Ongoing}}
+%\newcommand*{\Completed}{\WishlistStatus{Completed}}
+% The wish-list for the new package has developed as ideas have
+% suggested themselves. This has been both from the package author
+% and various contributors on \texttt{comp.text.tex}. Anything on
+% the list is likely to be looked at: nothing is ruled out. Items
+% marked \Todo\ are definitely going to be looked at, those marked
+% \Ongoing\ have at least some code written. Items marked
+% \Completed\ seem to work properly, and at this stage seem to be
+% finished (in the sense that changes are not planned). However,
+% that does not mean they are finalised or bug free!
+%\begin{itemize}
+% \item \pkg{keyval} package interface, with modification of
+% settings in document using this system (like \pkg{hyperref}).
+% \Completed
+% \item Remove need for \cs{usk} separator between unit names when
+% using \SIunits-style setup. \Completed
+% \item ``Prefix'' units, such as currency, possibly as an optional
+% argument to \cs{SI}:
+% |\SI[per=slash]{10}[\pounds]{\per\kilo\gram}| $\Rightarrow$
+% ``\SI[per=slash]{10}[\pounds]{\per\kilo\gram}'' (suggested by
+% Allan Ristow). \Completed
+% \item Stand-alone setting of units, for example
+% |\unitsym{kg.m/s^2}| to give ``\unitsym{kg.m/s^2}'', for use in
+% table headings, \etc\ (suggested by Allan Ristow). \Completed
+% \item \numprint-like handling of numbers (suggested by Allan
+% Ristow). \Completed
+% \item Ability to handle crystallography-style estimated standard
+% deviations, \eg\ |\SI{1.550(2)}{\angstrom}| $\Rightarrow$
+% ``\SI{1.550(2)}{\angstrom}''.\footnote{$(1.550 \pm 0.002) \times
+% 10^{-10}$\,m.} \Completed
+% \item Ability to understand and alter negative powers/fractions,
+% and typeset these flexibly; thus |\unitsym{\metre\per\second}|
+% could give ``\unitsym{\metre\per\second}'',
+% ``\unitsym[per=slash]{\metre\per\second}'',
+% ``\unitsym[per=frac]{\metre\per\second}'' or
+% ``\unitsym[per=frac,fraction=nice]{\metre\per\second}''
+% depending on a package setting (suggested by Stefan Pinnow).
+% \Completed
+% \item More logical handling of powers; for example |\deci\cubic\metre|
+% or |\deci\metre\cubed| give ``\unitsym{\deci\metre\cubed}'', but
+% |\deci\cubed\metre| does not even though \cs{deci} \emph{cannot}
+% be cubed (adapted suggestion from Stefan Pinnow). \Completed
+% \item Use of trailing units (as in \unitsdef package, so for
+% example |10\metre| to give ``10\metre'' (suggestion from Lan
+% Thuy Pham). \Completed
+% \item Support use of non-Latin characters where appropriate,
+% for example µ in units as in |\unitsym{µm}| to give
+% ``\unitsym{µm}'' (suggested by Martin Heller). \Completed
+% \item Integrate the core functionality of the
+% \SIunits and \sistyle packages (suggested by Danie
+% Els,\footnote{Current maintainer of \sistyle.} as well as a
+% key point of the review). \Completed
+% \item Modular design, with loadable definitions for different
+% areas and typographic conventions. \Completed
+% \item Emulation of existing packages [\unitspkg (\Completed),
+% \unitsdef (\Completed), \sistyle (\Completed), \SIunits
+% (\Completed)] to allow easy upgrading. \Completed
+% \item Typesetting angles in ``astronomy'' style, for example
+% |\ang[astroang]{30;5;3.2}| to give \ang[astroang]{30;5;3.2}
+% (suggested by Alok Singhal). \Completed
+%\end{itemize}
+%
+%\section{Road map}
+% The existing units packages provide valuable information on the
+% problems and pitfalls of designing a package in this area. They
+% have also shown how to solve many of the issues arising. However,
+% in writing a new package, consistent interface design has been
+% important. This is logical to the package author, but may not be
+% to anyone else. The functionality provided also aims to cover
+% everything from the existing packages and the suggestions
+% contributed at \texttt{comp.text.tex}, but omissions are likely to
+% exist. The current release of \currpkg is therefore regarded as a
+% development version, to gain feedback from users and to find
+% errors. The current ``road map'' for future releases is (broadly)
+% given here.
+%\begin{itemize}
+% \item[v0.6] Seek feedback on implementation to date (current
+% release);
+% \item[v0.7] Add or modify functionality based on feedback,
+% implement new suggestions for wish list;
+% \item[v0.8] Fix bugs from 0.7 release, interface freeze;
+% \item[v0.9] Release-candidate: fix remaining bugs from v0.8,
+% complete remaining documentation;
+% \item[v1.0] First release of completed package.
+%\end{itemize}
+% Depending on user feedback, the gap between these releases will
+% vary. However, to finalise all of the potential issues will take
+% some months (to allow time for proper testing).
+%
+%\part{Using the \currpkg package}
+%\section{Requirements}
+% \currpkg requires a reasonably up to date \TeX\ system. The
+% package requires \eTeX-extensions, which should be available on
+% most systems.\footnote{If you have an old \LaTeX\, try
+% ``\texttt{elatex}'' rather than ``\texttt{latex}''.} The following
+% packages are also needed:
+%\begin{itemize}
+% \item \pkg{array} and \pkg{xspace} from the \pkg{tools} bundle,
+% which should be available to everyone;
+% \item \pkg{xkeyval} This processes the option handling, and needs
+% to be at least v2.5;
+% \item \pkg{amstext} From the \AMS\TeX\ support bundle --- the
+% \AMS\ fonts are also needed to provide the default upright
+% \unitsym{\micro};
+%\end{itemize}
+% Hopefully most people using the package will have access to all of
+% those items.
+%
+% To use the \opt{fraction=sfrac} option, the \pkg{xfrac} package is
+% needed. This needs various experimental \LaTeX3 packages. As a
+% result, \currpkg does not load \pkg{xfrac}. If you want to use
+% \opt{fraction=sfrac}, \emph{you} need to load \pkg{xfrac} in your
+% preamble. If the package is not loaded, \opt{fraction=sfrac} falls
+% back on a \pkg{nicefrac}-like method. The interested user should
+% look at the \pkg{xfrac} documentation for reasons this might not be
+% ideal.\footnote{On the other hand, some fractional units will look
+% really bad with \cs{sfrac}. Use this option with caution.}
+%
+%\section{Loading the package}
+% \currpkg is loaded by the usual \LaTeX\ method.
+%\begin{LaTeXexample}[\typesetcodeonly]
+% \usepackage{si}\\
+% \usepackage[key=option]{si}
+%\end{LaTeXexample}
+% As is shown in the example, the package can be loaded with one or
+% more options, using the \pkg{keyval} system. The full range of
+% package options are described in Section~\ref{sec:options}; some
+% options are described in the along with the appropriate user
+% macros. Most of the user macros accept the same \pkg{keyval}
+% settings as an optional argument.
+%
+%\section{Numbers}
+%\DescribeMacro{\num}
+% Numbers are automatically formatted by the \cs{num} macro. This
+% takes one optional and one mandatory argument:
+% \cs{num}\oarg{options}\marg{number}. The contents of \meta{number}
+% are automatically formatted, in a similar method to that used by
+% \numprint. The formatter removes ``hard'' spaces (\cs{,} and |~|),
+% automatically identifies exponents (by default marked using |e| or
+% |d|) and adds the appropriate spacing of large numbers. A leading
+% zero is added before a decimal marker, if needed; both |.| and |,|
+% are recognised as decimal marker.
+%\begin{LaTeXexample}
+% \num{1} \num{123} \num{12345} \num{123456}\\
+% \num{0.1} \num{0.123} \num{0,1234} \num{.12345}\\
+% \num{1e10} \num{3.45d-4} \num{-e10}\\
+%\end{LaTeXexample}
+% Various error-checking systems are built into the package, so
+% that if \meta{number} does not contain any numeric characters, a
+% warning is issued. Isolated signs are also detected. The package
+% recognises |(| and |)| as ``extra'' characters, which can be used to
+% indicate the error in a number.\footnote{This is common in chemical
+% crystallography.}
+%\begin{LaTeXexample}
+% $\num{1.234(5)} = \num{1.234} \pm \num{0.005}$
+%\end{LaTeXexample}
+%
+% A number of effects are available as options. These are fully
+% explained in Section~\ref{sec:options}. Some of the more useful
+% options are illustrated here. By default, the output of the
+% package is typeset in maths mode. However, the use of the current
+% text font can be forced.\footnote{This document is typeset using
+% lowercase numbers in text mode, which emphasises the effect here.}
+%\begin{LaTeXexample}
+% \num{1234567890} \num[mode=text]{1234567890}
+%\end{LaTeXexample}
+% \currpkg can automatically add zeros and signs to numbers. This
+% can be altered as desired.
+%\begin{LaTeXexample}
+% \num{1.} \num[padnumber=all]{1.}\\
+% \num{2} \num[addsign=all]{2}\\
+% \num{3e4} \num[addsign=mant]{3e4} \num[addsign=all]{3e4}\\
+% \num{.5} \num[padnumber=none]{.5}
+%\end{LaTeXexample}
+% The separation of digits can be turned on and off, and the output
+% changed.
+%\begin{LaTeXexample}
+% \num{1234} \num[sepfour=true]{1234}\\
+% \num{12345} \num[digitsep=comma]{12345}\\
+% \num[digitsep=none]{12345}
+%\end{LaTeXexample}
+% The formatting of exponents is also customisable.
+%\begin{LaTeXexample}
+% \num{1e10} \num[expproduct=cdot]{1e10}\\
+% \num{2e20} \num[exppower=5]{1e10}
+%\end{LaTeXexample}
+%
+%\section{Tabular material}
+% Centring numbers in tabular content is handled by a new column
+% type, the |s| column. This is based closely on the \pkg{dcolumn}
+% method for centring numbers in columns, but adds the functionality
+% of the \cs{num} macro.\footnote{The approach used is actually a
+% combination of \pkg{dcolumn} for centring the material and
+% \numprint for processing it. It will therefore give rather
+% different results than the \texttt{n} and \texttt{N} column types
+% in \numprint.}
+%
+% By default, the decimal marker of the contents is placed at the
+% centre of the column (Table~\ref{tbl:default}). This is achieved
+% by having a negative value for the key \opt{tabformat}. The second
+% method for centring content is to specify a number of digits before
+% and after the decimal sign to be reserved by the package. Thus in
+% the example, \opt{tabformat=2.4} provides space for two digits
+% before the decimal marker and four after.\footnote{The separator
+% for the number of digits before and after the decimal mark may be
+% essentially any non-numeric character. Thus \opt{tabformat=2.4},
+% \opt{tabformat=2,4} and \opt{tabformat=2a4} all give the same
+% result.} If an integer is given as the argument of
+% \opt{tabformat}, equal space is reserved before and after the
+% decimal marker for numerals, and the column is typeset flush right.
+% As is shown in the fourth column, any other options may also be set
+% on a column-by-column basis.
+%\begin{LaTeXexample}[\typesetfloatexample]
+% \begin{table}
+% \caption{Behaviour of \texttt{s} column type
+% \label{tbl:default}}
+% \centering
+% \begin{tabular}{ss[tabformat=2.4]s[tabformat=4]%
+% s[tabformat=2.4,decimalsign=comma]}
+% \toprule
+% {Some Values} & {Some Values} & {Some Values} & {Some Values} \\
+% \midrule
+% 2.3456 & 2.3456 & 2.3456 & 2.3456 \\
+% 34.2345 & 34.2345 & 34.2345 & 34.2345 \\
+% 56.7835 & 56.7835 & 56.7835 & 56.7835 \\
+% 90.473 & 90.473 & 90.473 & 90.473 \\
+% \bottomrule
+% \end{tabular}
+% \end{table}
+%\end{LaTeXexample}
+%
+% Data not to be processed as a number should be protected by
+% wrapping it in braces; this is most likely to be true for column
+% headers (again as illustrated). The contents of non-numeric cells
+% are centred; this can be altered by using the standard
+% \cs{multicolumn} macro. The use of digit separators in table
+% columns is accounted for: extra space is reserved if digit
+% separators will be added.
+%
+% The use of exponents in the body of tables is not recommended;
+% unlike \numprint, \currpkg does not provide additional alignment of
+% exponents. Certain strange effects can also result from the
+% exponent marker letters (by default |dDeE|) being picked up by the
+% package in text in columns. For example, using |<{after}| after a
+% |s| column will add ``aftr'' at the end of each value. To avoid
+% this, wrap any problematic text in \emph{two} sets of braces (so
+% for example, put |<{{after}}|). Alternatively, as part of the
+% beginning of the table issue the command
+%\begin{LaTeXexample}[\typesetcodeonly]
+% \sisetup{numexp={}}
+%\end{LaTeXexample}
+% after \cs{begin}|{table}|.
+%
+%\section{Angles}
+%\DescribeMacro{\ang}
+% Angles can be typeset using the \cs{ang} command. This takes two
+% arguments, \cs{ang}\oarg{options}\marg{angle}, where \meta{options}
+% can be any of the package options to apply only to this value.
+% \meta{angle} can be given either as a decimal number or as a
+% semi-colon separated list of degrees, minutes and seconds, \ie\
+% \cs{ang}\marg{decimal angle} or
+% \cs{ang}|{|\meta{degrees}|;|\meta{minutes}|;|\meta{seconds}|}|. By
+% default, no space is introduced between angles and the degrees,
+% minutes and seconds markers.
+%\begin{LaTeXexample}
+% \ang{10} \ang{12.3} \ang{4,5}\\
+% \ang{1;2;3} \ang{;;1}\\
+% \ang{+10;;} \ang{-0;1;}
+%\end{LaTeXexample}
+%
+% By default, angles with no degrees (or minutes) are zero-filled;
+% angles with degrees but no minutes or seconds are not filled. This
+% behaviour can be altered using the package options.
+%\begin{LaTeXexample}
+% \ang{;;1} \ang[padangle=none]{;;1}\\
+% \ang{2;;} \ang[padangle=all]{2;;}\\
+% \sisetup{padangle=all} \ang{;3;} \ang{4;;} \ang{;;5}
+%\end{LaTeXexample}
+% The \cs{num} macro is used to typeset each number of the angle, so
+% the options for \cs{num} also apply here. The \opt{anglesep} value
+% can be used to separate degrees, minutes and seconds.
+%\begin{LaTeXexample}
+% \ang{1.05} \ang[decimalsign=comma]{1.05}\\
+% \ang{3.6789} \ang[digitsep=comma]{3.6789}\\
+% \ang{9;8;7} \ang[anglesep=thin]{9;8;7}
+%\end{LaTeXexample}
+% The degrees, minutes and seconds signs can be placed over the
+% decimal sign using the \opt{astroang} option. This is designed on
+% the assumption that only the last number given has a decimal
+% part.\footnote{The exact positioning of the symbols over the
+% decimal marker is currently something of a guess. Some feedback on
+% the ``correct'' result would be very welcome.}
+%\begin{LaTeXexample}
+% \ang{1;2;3.4}\\
+% \ang[astroang]{1;2;3.4}
+%\end{LaTeXexample}
+%
+%\section{Units and values}
+%\DescribeMacro{\SI}
+% The core aim of \currpkg is correctly typesetting values which have
+% units. The main output macro here is \cs{SI}, which has the same
+% syntax as the equivalent macro in \sistyle and \unitsdef. The
+% \cs{SI} macro takes two mandatory arguments, in addition to the
+% optional set up argument, and a second optional argument:
+% \cs{SI}\oarg{options}\marg{number}\oarg{preunit}\marg{unit}. The
+% \meta{number} argument operates in exactly the same manner as the
+% equivalent argument of the \cs{num} macro. \meta{unit} will be
+% typeset with a non-breakable space between it and the preceding
+% number, with font control as outlined earlier. Finally,
+% \meta{preunit} is a unit to be typeset \emph{before} the numerical
+% value (most likely to be a currency). Some examples illustrate the
+% general power of the macro.
+%\begin{LaTeXexample}
+% \SI[mode=text]{1.23}{J.mol^{-1}.K^{-1}}\\
+% \SI{.23e7}{\candela}\\
+% \SI[per=slash]{1.99}[\pounds]{\per\kilogram}\\
+% \SI{70}{\metre\per\second}\\
+% \SI[per=frac,fraction=nice]{1,345}{\ampere\per\mole}\\
+%\end{LaTeXexample}
+% The use of unit macros outside of the \cs{SI} macro is described later
+%
+%\subsection{Literal units}
+% Units can be input in two ways, inspired by \sistyle and \SIunits.
+% The \sistyle-like method uses literal input. Four characters have
+% a special meaning:
+%\begin{itemize}
+% \item |^| The superscript character is used without the usual
+% need for surrounding maths characters (|$|);
+% \item |.| and |,| The fullstop (point) symbol and comma are made
+% active, and produce the current contents of the \opt{unitsep}
+% option;
+% \item |~| The contents of the \opt{unitspace} option are typeset
+% by a tilde.
+%\end{itemize}
+% This allows ready input of units.
+%\begin{LaTeXexample}
+% \SI{10}{kg.m.s^{-2}}\\
+% \SI{1.453}{g/cm^3}\\
+% \SI{33.562}{cd~s}\\
+% \SI[unitsep=cdot]{100}{m.s^{-2}}
+%\end{LaTeXexample}
+%
+%\subsection{The unit interpreter}
+% The second operation mode for the \cs{SI} macro is based on the
+% behaviour of \SIunits. Here, each unit, SI multiple prefixes and
+% power is given a macro name. These are entered in a method very
+% similar to the reading of the unit name in English.
+%\begin{LaTeXexample}
+% \SI{10}{\kilo\gram\metre\per\second\squared}\\
+% \SI{1.453}{\gram\per\cubic\centi\metre}\\
+% \SI{33.562}{\candela\second}\\
+% \SI[unitsep=cdot]{100}{\metre\per\Square\second}\\
+% \SI[prefix=power]{4.56}{\kilo\metre\per\second}
+%\end{LaTeXexample}
+% On its own, this is very similar to \SIunits, and is less
+% convenient than the direct input method.\footnote{Users of \SIunits
+% should note the lack of need for a \cs{usk}-type macro.} However,
+% the package allows you to define new unit macros; a large number of
+% pre-defined abbreviations are also supplied. More importantly, by
+% defining macros for units, instead of literal values, new
+% functionality is made available. Units may be re-defined to give
+% different output, and handling of reciprocal values can be altered.
+%\begin{LaTeXexample}
+% \SI[per=frac,fraction=frac]{10}{\gram\metre\per\second\squared}\\
+% \SI[per=slash]{1.453}{\gram\per\cubic\centi\metre}\\
+% \SI{33.562}{\candela\second}\\
+% \SI[per=frac,fraction=nice]{100}{\metre\per\Square\second}
+%\end{LaTeXexample}
+% The unit processor will trap \emph{some} errors in the input and
+% give the ``best guess'' result. However, it is down to the user to
+% check the output.
+%
+%\subsection{Powers of units}
+%\DescribeMacro{\Square}
+%\DescribeMacro{\squared}
+%\DescribeMacro{\cubic}
+%\DescribeMacro{cubed}
+% Including powers in units is handled using a ``natural language''
+% method. Thus preceding a unit by \cs{Square} or \cs{cubic} with
+% raise the unit to the appropriate power, while \cs{squared} or
+% \cs{cubed} follow the unit they apply to.\footnote{The \cs{Square}
+% macro is capitalised to avoid a name clash with \pkg{pstricks}.}
+%\begin{LaTeXexample}
+% \SI{10}{\metre\squared}\\
+% \SI{20}{\Square\metre}\\
+% \SI{30}{\metre\cubed}\\
+% \SI{40}{\cubic\metre}
+%\end{LaTeXexample}
+%
+%\DescribeMacro{\per}
+% The \cs{per} macro intelligently creates reciprocal powers, and
+% also adds the power $-1$ when appropriate.
+%\begin{LaTeXexample}
+% \SI{10}{\per\second\squared}\\
+% \SI{20}{\per\Square\second}\\
+% \SI[per=frac,fraction=nice]{30}{\per\second\cubed}\\
+% \SI[per=slash]{40}{\per\cubic\second}\\
+% \SI{50}{\per\second}
+%\end{LaTeXexample}
+%
+%\DescribeMacro{\tothe}
+% For powers not defined above or with \cs{newpower}, the \cs{tothe}
+% macro can be used ``in line'' to produce a power. As follows from
+% standard English usage, this comes after the
+% unit.\footnote{Suggestions for a macro name for before the unit for
+% the same job are welcome!}
+%\begin{LaTeXexample}
+% \SI{16.86}{\metre\tothe{4}}\\
+% \SI{7.895}{\candela\tothe{0.5}}\\
+% \SI{7.895}{\newton\tothe{-6}}\\
+% \SI{1.34}{\per\kelvin\tothe{7}}
+%\end{LaTeXexample}
+%
+%
+%\subsection{Units with no values}
+%\DescribeMacro{\unitsym}
+% For typesetting the symbol for a unit on its own, with the full
+% font control and without extra spaces, the \cs{unitsym} macro is
+% provided.\footnote{The same effect can be achieved using the
+% \cs{SI} macro with an empty numerical argument.} The macro name
+% avoids a clash with the functionality of the earlier packages, but
+% is similar to \cs{ilu} from the \unitsdef package.
+%\begin{LaTeXexample}
+% \SI{}{kg.m/s^2}\\
+% \unitsym{kg.m/s^2}\\
+% \unitsym[mode=text,unitsep=cdot]{\mole\per\cubic\deci\metre}
+%\end{LaTeXexample}
+%
+%\subsection{Free-standing units}
+% Users of the \unitsdef package will be a accustomed to using unit
+% macros on their own (following a value) or with an optional
+% argument containing a number. In both cases, only a single unit
+% macro could be used. \currpkg supports both operation modes, with
+% the limitation that units trailing values loose font control of the
+% value.
+%\begin{LaTeXexample}
+% 123\metre\\
+% \kelvin[123]\\
+% \sisetup{mode=text} \ampere[234]\\
+% 6\second
+%\end{LaTeXexample}
+% When used in this way, the units \emph{do not} take an optional
+% \pkg{keyval} argument.
+%
+%\subsection{Pre-defined units, prefixes and powers}
+%\newcommand*{\csindex}[1]{%
+% \cs{#1}%
+% \expandafter\SpecialUsageIndex\csname#1\endcsname}
+%\newcommand{\unitinfo}[1]{%
+% #1 & \csindex{#1} &
+% \expandafter\unitsym\expandafter{\csname#1\endcsname}}
+%\begin{table}
+% \centering
+% \begin{tabular}{lll}
+% \toprule
+% \multicolumn{1}{c}{Unit} &
+% \multicolumn{1}{c}{Macro} &
+% \multicolumn{1}{c}{Symbol} \\
+% \midrule
+% \unitinfo{kilogram}\\
+% \unitinfo{metre}\\
+% \unitinfo{second}\\
+% \unitinfo{mole}\\
+% \unitinfo{kelvin}\\
+% \unitinfo{ampere}\\
+% \unitinfo{candela}\\
+% \bottomrule
+% \end{tabular}
+% \caption{The seven base SI units}
+% \label{tbl:baseunits}
+%\end{table}
+% The package always defines the seven base SI units, irrespective of
+% any package options given (Table~\ref{tbl:baseunits}). The kilogram
+% is notable as by default it is a \emph{base} unit with a prefix.
+% Thus, when the package is loaded with the option \opt{load=\{\}},
+% \cs{kilo} and \cs{gram} \emph{are not defined}.
+%
+% By default, a number of additional definitions are created by the
+% package. These are controlled by the \opt{load} and \opt{noload}
+% options. Unless specifically requested with the option
+% \opt{noload=prefix}, \currpkg also defines the standard prefixes
+% for powers of ten (Table~\ref{tbl:prefix}). This leads to the
+% redefinition of \cs{kilogram} as \cs{kilo}\cs{gram}. The macro
+% \cs{deka} is provided, as this is used as an alias for \cs{deca}
+% in some places.
+%\newcommand*{\prefixunitsym}[1]{\unitsym[prefix=number]{#1}}
+%\newcommand*{\prefixinfo}[1]{%
+% #1 & \csindex{#1} &
+% \expandafter\prefixunitsym\expandafter{\csname#1\endcsname} &
+% \expandafter\unitsym\expandafter{\csname#1\endcsname}}
+%\begin{table}
+% \centering
+% \begin{tabular}{lllclllc}
+% \toprule
+% \multicolumn{1}{c}{Prefix} &
+% \multicolumn{1}{c}{Macro} &
+% \multicolumn{1}{c}{Power} &
+% Symbol &
+% \multicolumn{1}{c}{Prefix} &
+% \multicolumn{1}{c}{Macro} &
+% \multicolumn{1}{c}{Power} &
+% Symbol \\
+% \midrule
+% \prefixinfo{yocto}&
+% \prefixinfo{atto}\\
+% \prefixinfo{femto}&
+% \prefixinfo{pico}\\
+% \prefixinfo{nano}&
+% \prefixinfo{micro}\\
+% \prefixinfo{milli}&
+% \prefixinfo{centi}\\
+% \prefixinfo{deci}&
+% \prefixinfo{deca}\\
+% \prefixinfo{hecto}&
+% \prefixinfo{kilo}\\
+% \prefixinfo{mega}&
+% \prefixinfo{giga}\\
+% \prefixinfo{tera}&
+% \prefixinfo{peta}\\
+% \prefixinfo{exa}&
+% \prefixinfo{zetta}\\
+% \prefixinfo{yotta}\\
+% \bottomrule
+% \end{tabular}
+% \caption{The SI prefixes (\opt{load=prefix})}
+% \label{tbl:prefix}
+%\end{table}
+% The package also defines a number of derived SI units which have
+% assigned names and symbols (Table~\ref{tbl:derived}). Note that
+% \cs{Gray} is capitalised to avoid a name clash with the
+% \pkg{pstricks} package.\footnote{The macros \cs{ohm} and
+% \cs{celsius} are not defined by \currpkg if the \pkg{gensymb}
+% package is loaded.}
+%\begin{table}
+% \centering
+% \begin{tabular}{llllll}
+% \toprule
+% \multicolumn{1}{c}{Unit} &
+% \multicolumn{1}{c}{Macro} &
+% \multicolumn{1}{c}{Symbol} &
+% \multicolumn{1}{c}{Unit} &
+% \multicolumn{1}{c}{Macro} &
+% \multicolumn{1}{c}{Symbol} \\
+% \midrule
+% \unitinfo{becquerel} &
+% \unitinfo{celsius} \\
+% \unitinfo{coulomb} &
+% \unitinfo{farad} \\
+% \unitinfo{Gray} &
+% \unitinfo{hertz} \\
+% \unitinfo{henry} &
+% \unitinfo{joule} \\
+% \unitinfo{katal} &
+% \unitinfo{lumen} \\
+% \unitinfo{lux} &
+% \unitinfo{newton} \\
+% \unitinfo{ohm} &
+% \unitinfo{pascal} \\
+% \unitinfo{radian} &
+% \unitinfo{siemens} \\
+% \unitinfo{sievert} &
+% \unitinfo{steradian}\\
+% \unitinfo{tesla} &
+% \unitinfo{volt} \\
+% \unitinfo{watt} &
+% \unitinfo{weber} \\
+% \bottomrule
+% \end{tabular}
+% \caption{The derived SI units with defined names
+% (\opt{load=derived})}
+% \label{tbl:derived}
+%\end{table}
+% In addition to these units, there are three other groups of units
+% for use with the SI system which do not fit into the above. These
+% are those derived from physical measurements
+% (Table~\ref{tbl:experimental}), those considered ``accepted''
+% (Table~\ref{tbl:accepted}), and those accepted temporarily
+% (Table~\ref{tbl:addn}).\footnote{These are supposed to be replaced
+% over time by SI units.}
+%\begin{table}
+% \centering
+% \begin{tabular}{lll}
+% \toprule
+% \multicolumn{1}{c}{Unit} &
+% \multicolumn{1}{c}{Macro} &
+% \multicolumn{1}{c}{Symbol} \\
+% \midrule
+% electron volt & \csindex{electronvolt} & \electronvolt \\
+% atomic mass unit
+% & \csindex{atomicmassunit} & \atomicmassunit \\
+% & \csindex{atomicmass} & \atomicmass \\
+% \unitinfo{dalton} \\
+% \bottomrule
+% \end{tabular}
+% \caption{Units derived from experiments
+% (\opt{load=physical})}.
+% \label{tbl:experimental}
+%\end{table}
+%\begin{table}
+% \centering
+% \begin{tabular}{lll}
+% \toprule
+% \multicolumn{1}{c}{Unit} &
+% \multicolumn{1}{c}{Macro} &
+% \multicolumn{1}{c}{Symbol} \\
+% \midrule
+% \unitinfo{minute} \\
+% \unitinfo{hour} \\
+% day & \csindex{Day} & \Day \\
+% \unitinfo{degree} \\
+% minute (arc) & \csindex{arcmin} & \arcmin \\
+% second (arc) & \csindex{arcsec} & \arcsec \\
+% \unitinfo{litre} \\
+% \unitinfo{tonne} \\
+% \unitinfo{neper} \\
+% \unitinfo{bel} \\
+% \unitinfo{percent} \\
+% \bottomrule
+% \end{tabular}
+% \caption{Units accepted for use with SI
+% (\opt{load=accepted})}.
+% \label{tbl:accepted}
+%\end{table}
+%\begin{table}
+% \centering
+% \begin{tabular}{lll}
+% \toprule
+% \multicolumn{1}{c}{Unit} &
+% \multicolumn{1}{c}{Macro} &
+% \multicolumn{1}{c}{Symbol} \\
+% \midrule
+% {\aa}nstr{\"o}m & \csindex{angstrom} & \angstrom \\
+% \unitinfo{are} \\
+% \unitinfo{hectare} \\
+% \unitinfo{barn} \\
+% bar & \csindex{BAR} & \BAR \\
+% \unitinfo{millibar} \\
+% \unitinfo{gal} \\
+% \unitinfo{curie} \\
+% \unitinfo{roentgen} \\
+% \unitinfo{rad} \\
+% \unitinfo{rem} \\
+% \bottomrule
+% \end{tabular}
+% \caption{Additional (temporary) SI units
+% (\opt{load=addn})}
+% \label{tbl:addn}
+%\end{table}
+%
+%\subsection{Prefixed and abbreviated units}
+% Many basic units have prefixes which are commonly used with the
+% unit, such as centimetre or megahertz. The package therefore
+% defines a number of common prefixed units (\opt{load=prefixed}).
+% Several of these also have obvious abbreviations (such as \cs{MHz}
+% for \cs{megahertz}). These are available by loading the
+% \file{si-abbr.cfg} file (\ie\ \opt{load=abbr}). In common with the
+% units discussed above, the prefixed and abbreviated unit
+% definitions are loaded by default.
+%\begin{longtable}{llll}
+% \caption{Prefixed (\opt{load=prefixed}) and abbreviated
+% (\opt{load=abbr}) units\label{tbl:abbr} }\\
+% \toprule
+% Unit & Macro & Symbol & Abbreviation \\
+% \midrule
+% \endfirsthead
+% \toprule
+% Unit & Macro & Symbol & Abbreviation \\
+% \midrule
+% \endhead
+% \bottomrule
+% \multicolumn{4}{r}{\emph{Continued on next page}}
+% \endfoot
+% \bottomrule
+% \endlastfoot
+% \emph{Masses} \\
+% \unitinfo{kilogram} & \csindex{kg} \\
+% \unitinfo{femtogram} & \csindex{fg} \\
+% \unitinfo{picogram} & \csindex{pg} \\
+% \unitinfo{nanogram} & \csindex{nanog} \\
+% \unitinfo{microgram} & \csindex{micg} \\
+% \unitinfo{milligram} & \csindex{mg} \\
+% atomic mass & \csindex{atomicmass} & \amu & \csindex{amu} \\
+% \\ \emph{Lengths} \\
+% \unitinfo{picometre} & \csindex{picom} \\
+% \unitinfo{nanometre} & \csindex{nm} \\
+% \unitinfo{micrometre} & \csindex{micm} \\
+% \unitinfo{millimetre} & \csindex{mm} \\
+% \unitinfo{centimetre} & \csindex{cm} \\
+% \unitinfo{decimetre} & \csindex{dm} \\
+% \unitinfo{kilometre} & \csindex{km} \\
+% \\ \emph{Times} \\
+% \unitinfo{second} & \csindex{Sec} \\
+% \unitinfo{attosecond} & \csindex{as} \\
+% \unitinfo{femtosecond} & \csindex{fs} \\
+% \unitinfo{picosecond} & \csindex{ps} \\
+% \unitinfo{nanosecond} & \csindex{ns} \\
+% \unitinfo{microsecond} & \csindex{mics} \\
+% \unitinfo{millisecond} & \csindex{ms} \\
+% \\ \emph{Moles} \\
+% \unitinfo{femtomole} & \csindex{fmol} \\
+% \unitinfo{picomole} & \csindex{pmol} \\
+% \unitinfo{nanomole} & \csindex{nmol} \\
+% \unitinfo{micromole} & \csindex{micmol} \\
+% \unitinfo{millimole} & \csindex{mmol} \\
+% \\ \emph{Currents} \\
+% \unitinfo{picoampere} & \csindex{pA} \\
+% \unitinfo{nanoampere} & \csindex{nA} \\
+% \unitinfo{microampere} & \csindex{micA} \\
+% \unitinfo{milliampere} & \csindex{mA} \\
+% \unitinfo{kiloampere} & \csindex{kA} \\
+% \\ \emph{Areas} \\
+% \unitinfo{squaremetre} \\
+% \unitinfo{squarecentimetre} \\
+% \unitinfo{squarekilometre} \\
+% \\ \emph{Volumes} \\
+% \unitinfo{millilitre} & \csindex{ml} \\
+% \unitinfo{microlitre} & \csindex{micl} \\
+% \unitinfo{centimetrecubed} & \csindex{cmc} \\
+% & \csindex{centimetrecubed} & \cmc & \csindex{cmc} \\
+% \unitinfo{cubicdecimetre} & \csindex{dmc} \\
+% \\ \emph{Frequencies} \\
+% \unitinfo{hertz} & \csindex{Hz} \\
+% \unitinfo{millihertz} & \csindex{mHz} \\
+% \unitinfo{kilohertz} & \csindex{kHz} \\
+% \unitinfo{megahertz} & \csindex{MHz} \\
+% \unitinfo{gigahertz} & \csindex{GHz} \\
+% \unitinfo{terahertz} & \csindex{THz} \\
+% \\ \emph{Potentials} \\
+% \unitinfo{millivolt} & \csindex{mV} \\
+% \unitinfo{kilovolt} & \csindex{kV} \\
+% \\ \emph{Energies} \\
+% \unitinfo{kilojoule} & \csindex{kJ}\\
+% \unitinfo{electronvolt} & \csindex{eV} \\
+% \unitinfo{millielectronvolt} & \csindex{meV} \\
+% \unitinfo{kiloelectronvolt} & \csindex{keV} \\
+% \unitinfo{megaelectronvolt} & \csindex{MeV} \\
+% \unitinfo{gigaelectronvolt} & \csindex{GeV} \\
+% \unitinfo{teraelectronvolt} & \csindex{TeV} \\
+% \\ \emph{Powers} \\
+% \unitinfo{milliwatt} \\
+% \unitinfo{kilowatt} \\
+% \unitinfo{megawatt} \\
+% \\ \emph{Capacitance} \\
+% \unitinfo{femtofarad} \\
+% \unitinfo{picofarad} \\
+% \unitinfo{nanofarad} \\
+% \unitinfo{microfarad} \\
+% \unitinfo{millifarad} \\
+% \\ \emph{Resistance} \\
+% \unitinfo{kiloohm} \\
+% \unitinfo{megaohm} \\
+% \unitinfo{gigaohm} \\
+% \unitinfo{millisiemens} \\
+% \\ \emph{Forces} \\
+% \unitinfo{millinewton} \\
+% \unitinfo{kilonewton} \\
+% \\ \emph{Other units} \\
+% \unitinfo{hectopascal} \\
+% \unitinfo{megabecquerel} \\
+% \unitinfo{millisievert} \\
+%\end{longtable}
+%
+%\subsection{Specialist units}
+%\DescribeMacro{\mmHg}
+%\DescribeMacro{\molar}
+%\DescribeMacro{\molar}
+% In some subject area, there are units which are in common use even
+% though they are outside of the SI system. Unlike the units
+% discussed earlier, these specialist units are not loaded by default.
+% \currpkg comes with the predefined files \opt{alsoload=chemistry}
+% and \opt{alsoload=hep}. The later defines the units from the
+% \pkg{hepunits} package not provided elsewhere here. The former
+% adds the common chemistry units \cs{mmHg}, \cs{molar} and
+% \cs{Molar}. The \cs{Molar} macro is somewhat awkward, as it can be
+% given as either ``\textsc{m}'' or ``M''. The later is obviously
+% easily confused with the sign for the prefix mega.
+%
+%\DescribeMacro{\bit}
+%\DescribeMacro{\byte}
+% The package also comes with equipped for \opt{alsoload=binary}.
+% This provides the binary units and prefixes. The extra units
+% are \cs{bit} and \cs{byte}, with the new prefixes listed in
+% Table~\ref{tbl:binary}.
+%\begin{table}
+% \centering
+% \begin{tabular}{ll>{$}c<{$}}
+% \toprule
+% \multicolumn{1}{c}{Prefix} &
+% \multicolumn{1}{c}{Macro} &
+% \multicolumn{1}{c}{Power} \\
+% \midrule
+% kibi & \csindex{kibi} & 2^{10} \\
+% mebi & \csindex{mebi} & 2^{20} \\
+% gibi & \csindex{gibi} & 2^{30} \\
+% tebi & \csindex{tebi} & 2^{40} \\
+% pebi & \csindex{pebi} & 2^{50} \\
+% exbi & \csindex{exbi} & 2^{60} \\
+% \bottomrule
+% \end{tabular}
+% \caption{Binary prefixes
+% (\opt{alsoload=binary})}.
+% \label{tbl:binary}
+%\end{table}
+%
+%\subsection{Defining new units}
+%\DescribeMacro{\newunit}
+%\DescribeMacro{\renewunit}
+%\DescribeMacro{\provideunit}
+% New units are produced using the \cs{newunit} macro. This works as
+% might be expected:
+% \cs{newunit}\oarg{options}\marg{unit}\marg{symbol}, where
+% \meta{symbol} can contain literal values, other units, multiple
+% prefixes, powers and \cs{per}. The \meta{options} argument can be
+% any suitable options, and applies to this unit only The most
+% obvious example for using this macro is the \cs{degree}
+% unit.\footnote{Although the \cs{ang} macro is preferred for this
+% job.} The (first) optional argument to \cs{SI} and \cs{unitsym}
+% can be used to override the settings for the unit.
+%\begin{LaTeXexample}
+% \SI{3.1415}{\degree}\\
+% \newunit[valuesep=none]{\oddunit}{XXX}\\
+% \SI{12345}{\oddunit}
+% \SI[valuesep=thick]{67890}{\oddunit}
+%\end{LaTeXexample}
+%
+% Output that is only safe in maths mode should be protected with
+% \cs{ensuremath}; text-only input requires \cs{text}. In the
+% example below, \cs{mathnormal} is used to force the font choice
+% only for the single character.\footnote{The \cs{mathrm} font used
+% for this document has an ``\ss'' at the $\pi$ position.}
+%\begin{LaTeXexample}
+% \newunit{\SIpi}{\ensuremath{\mathnormal{\pi}}}
+% \SI{10}{\metre\per\SIpi\squared}
+%\end{LaTeXexample}
+%
+%\DescribeMacro{\newpower}
+%\DescribeMacro{\renewpower}
+%\DescribeMacro{\providepower}
+% Powers are defined: \cs{newpower}\oarg{post}\marg{power}\marg{num}.
+% \meta{power} is the name of the power macro, an \meta{num} is the
+% (positive) number it represents. The later argument is always
+% processed internally by \cs{num}, but \emph{must} be a number.
+% Giving the optional argument \opt{post} indicates to the package
+% that the power will come after the unit it applies to; by default
+% it is assumed that it will come before.
+%\begin{LaTeXexample}
+% \newpower{\quartic}{4}
+% \newpower[post]{\totheforth}{4}\\
+% \unitsym{\kilogram\totheforth}\\
+% \unitsym{\quartic\metre}
+%\end{LaTeXexample}
+%
+%\DescribeMacro{\newprefix}
+%\DescribeMacro{\renewprefix}
+%\DescribeMacro{\provideprefix}
+% The standard SI powers of ten are defined by the package, and are
+% described above. However, the user can define new prefixes with
+% \cs{newprefix}. This has syntax
+% \cs{newunit}\marg{prefix}\marg{symbol}\marg{powers-ten}, where
+% \meta{powers-ten} is the number of powers of ten the prefix
+% represents. For example, \cs{kilo} is defined:
+%\begin{LaTeXexample}[\typesetcodeonly]
+% \newprefix{\kilo}{k}{3}
+%\end{LaTeXexample}
+%
+%\section{Font control}
+% Following the lead of \sistyle, \currpkg provides control over the
+% font used to typeset output. By default, all text is typeset using
+% the current upright serif maths font, whether the macros are given
+% in text or maths mode. Some examples will show the effect.
+%\begin{LaTeXexample}
+% \num{10} $\num{10}$ \\
+% \sffamily \ang{20} $\ang{20}$ \\
+% \textbf{\SI{30}{\kilo\gram}}\\
+% \boldmath $\SI{30}{\kilo\gram}$ \\
+% \[ \num{50} \]
+%\end{LaTeXexample}
+%
+% By giving the \opt{obeyfamily} option, the surrounding font family
+% (serif, sans serif, fixed width) is used for inline materials.
+% Inside the display maths environments, the currently active maths
+% font is used. The \opt{obeybold} option causes the bold setting to
+% be obeyed in the same way.
+%\begin{LaTeXexample}
+% \sisetup{obeyfamily,obeybold,obeyitalic} \\
+% \ang{1;1;1} $\ang{1;1;1}$ \\
+% \sffamily \ang{2;2;2} $\ang{2;2;2}$ \\
+% \textbf{\ang{3;3;3}} \boldmath $\ang{3;3;3}$ \\
+% \sisetup{mode=text} \emph{\ang{4;4;4}} $\ang{4;4;4}$ \\
+% \[ \ang{5;5;5} \]
+%\end{LaTeXexample}
+%
+%\section{Package options\label{sec:options}}
+%\DescribeMacro{\sisetup}
+% The ``native'' options for the package are all given using the
+% \pkg{keyval} methods. Most of the package options can be given both
+% when loading the package and at any point in the document. This is
+% achieved using the \cs{sisetup} macro.
+%
+%\newcommand*{\choiceopt}[1][option]{\opt{#1=\meta{choice}}\xspace}
+%\newcommand*{\boolopt}[1][option]{\opt{#1=\meta{bool}}\xspace}
+%\newcommand*{\litopt}[1][option]{\opt{#1=\meta{literal}}\xspace}
+%\newcommand*{\choicelitopt}[1][option]
+% {\opt{#1=\meta{choice,literal}}\xspace}
+%\newcommand*{\macopt}[1][option]{\opt{#1=\meta{macro}}\xspace}
+%\newcommand*{\numopt}[1][option]{\opt{#1=\meta{number}}\xspace}
+%\newcommand*{\listopt}[1][option]{\opt{#1=\meta{list}}\xspace}
+%\newcommand*{\lenopt}[1][option]{\opt{#1=\meta{length}}\xspace}
+% The package options take a number of different forms.
+%\begin{itemize}
+% \item \boolopt Simple true/false values. These macros all default
+% to \opt{true}, so giving the option name alone sets the flag to
+% true.
+% \item \choiceopt Take a single item from a pre-determined list.
+% Depending on the value, one or more internal states will be
+% altered. Values not on the list are ignored. The default value
+% is given in bold.
+% \item \choicelitopt If the given value is a \meta{choice}, then
+% the internal settings for that choice are used. Any other value
+% is used directly. As with simple choice options, the default is
+% given in bold.
+% \item \litopt The given value is used as a literal by the package.
+% \item \macopt These options expect a macro name as a value; the
+% macro name is then used by the package. Note that the name does
+% \emph{not} include the leading \textbackslash.
+% \item \lenopt Requires a \TeX\ lengths, for example
+% \opt{0.5ex}.
+% \item \listopt Takes a list of one or more items, which are not
+% determined in advance.
+%\end{itemize}
+%
+% The package has a large range of options, to allow full control of
+% the various features of the package. These control differing
+% aspects of the package, and are given below in groups based on
+% function.
+%
+%\subsection{Font family and style}
+% The font used when typesetting material can be tightly controlled
+% using \currpkg. A number of options affect how the package matches
+% the surrounding font, and the font families used to achieve this.
+%\begin{itemize}
+% \item \boolopt[obeyfamily] By default, the font family used for
+% typesetting does \emph{not} match the surroundings. This is
+% altered using the \opt{obeyfamily} switch; when active, serif
+% (Roman), sans serif and typewriter fonts are detected.
+% \item \choiceopt[mode] The output of \currpkg can be typeset
+% using either text or maths fonts. By default, maths mode is
+% used, but this can be altered setting the \opt{mode} option
+% to \opt{text}.
+% \item \boolopt[textmode] A shortcut for \opt[mode=text].
+% \item \boolopt[obeymode] The package can detect and use the
+% surrounding maths or text mode, if requested. Default is
+% \opt{false}.
+% \item \boolopt[obeybold] If the typeset text should obey the local
+% value of the bold setting, then this option should be set: the
+% default is false.
+% \item \choiceopt[inlinebold] For inline maths, the package
+% can check either the surrounding maths or the surrounding text.
+% The options here are \textbf{\opt{text}} and\opt{maths} (or
+% \opt{math}).
+% \item \boolopt[obeyitalic] Italic \latin{versus} upright shape
+% is handled slightly differently to bold. The option works in
+% text mode, but has no effect in maths mode. This is because
+% font changes plus italic is not possible in maths mode (for
+% example, see the result of |$\mathit{\mathrr{10}}$|.
+% \item \macopt[mathdefault] The default shape used for text printed
+% in maths mode. The default is the value stored in \opt{mathrm}.
+% \item \macopt[textdefault] The default shape used for text printed
+% in text mode. The default is the value stored in \opt{mathrm}.
+% \item \macopt[mathnumdefault] The default shape used for numbers
+% printed in maths mode. The default is the value stored in
+% \opt{mathrm}.
+% \item \macopt[textnumdefault] The default shape used for numbers
+% printed in text mode. The default is the value stored in
+% \opt{mathrm}.
+% \item \macopt[mathrm] The font command used in maths mode when
+% the surrounding text is serif. The default is \opt{mathrm}; the
+% other maths font defaults follow the same pattern.
+% \item \macopt[mathsf] The font command used in maths mode when
+% the surrounding text is sans serif.
+% \item \macopt[mathrm] The font command used in maths mode when
+% the surrounding text is fixed width.
+% \item \macopt[textrm] The font command used in text mode when
+% the surrounding text is serif. The default is \opt{rmfamily};
+% the other text font defaults follow the same pattern.
+% \item \macopt[textsf] The font command used in text mode when
+% the surrounding text is sans serif.
+% \item \macopt[texttt] The font command used in text mode when
+% the surrounding text is fixed width.
+%\end{itemize}
+%
+%\subsection{Spacing and separators}
+% The spacings used between items are all user-definable. This is
+% also true for the separators used for decimals, \etc.
+%\begin{itemize}
+% \item \choicelitopt[unitsep] This defines the separation of
+% different unit symbols. The \meta{list} takes values
+% \opt{\textbf{thin}}, \opt{medium} (alias \opt{med}), \opt{thick}
+% (all maths spacings), \opt{space} (a full space), \opt{cdot} (a
+% centred dot) and \opt{times}. \meta{literal} values are typeset
+% in maths mode.
+% \item \choicelitopt[unitspace] The spacing represented by an
+% explicit hard space (|~|) inside a unit macro. Takes the same
+% list as \opt{valuesep}.
+% \item \choicelitopt[valuesep] Defines the separation between a
+% value and the associated unit. Valid \meta{list} values are
+% \opt{\textbf{thin}}, \opt{medium} (alias \opt{med}),
+% \opt{thick}, \opt{space} and \opt{none}.
+% \item \choicelitopt[digitsep] The separation (if any) between
+% groups of digits in large numbers. Valid \meta{list} values are
+% \opt{\textbf{thin}}, \opt{medium} (alias \opt{med}),
+% \opt{thick}, \opt{space}, \opt{comma}, \opt{fullstop} (aliases
+% \opt{stop} and \opt{period}) and \opt{none}.
+% \item \choicelitopt[decimalsign] The decimal sign, either
+% \opt{comma} or \opt{\textbf{fullstop}} (also aliased as
+% \opt{stop} and \opt{period}).
+% \item \choicelitopt[anglesep] The separator between degrees,
+% minutes and seconds in an angle. The options are \opt{thin},
+% \opt{medium} (alias \opt{med}), \opt{thick} and
+% \opt{\textbf{none}}.
+%\end{itemize}
+%
+%\subsection{Number formatting}
+% There are two types of option for numbers. The first set are
+% concerned with parsing numbers, and are very similar to the
+% settings in \numprint. These all begin \opt{num}, and take literal
+% values. Notice that the literals are \emph{not} separated in any
+% way in the input.
+%\begin{itemize}
+% \item \litopt[numlist] The characters which are numbers:
+% \opt{\textbf{01234567890}}.
+% \item \litopt[numdecimal] Decimal markers: \opt{\textbf{.,}}
+% \item \litopt[numexp] Exponent markers: \opt{\textbf{edED}}
+% \item \litopt[numgobble] Characters to be gobbled when processing
+% numbers: no default
+% \item \litopt[numsign] Signs (which must be at the start of a
+% number): \opt{\textbf{+-\cs{pm}\cs{mp}}}
+% \item \litopt[numextra] ``Extra'' characters, to be carried
+% through directly to the output: \opt{\textbf{()}}
+%\end{itemize}
+%
+% The second type of option for numbers controls the output.
+%\begin{itemize}
+% \item \choiceopt[addsign] Sets whether a sign is added to numbers
+% without an explicit sign given. Valid choices are
+% \opt{mantissa} (or \opt{mant}), \opt{exponent} (or \opt{exp}),
+% \opt{both} (or \opt{all}) and \opt{\textbf{none}}.The option
+% will also act as a Boolean, taking \opt{true} and opt{false},
+% with \opt{addsign} alone equal to giving the \opt{true} (=
+% \opt{all}) value.
+% \item \choicelitopt[sign] The sign used by the above. Choices are
+% \opt{\textbf{plus}}, \opt{minus}, \opt{pm} and \opt {mp} ($\pm$
+% and $\mp$, respectively). The sign will always be typeset in
+% maths mode.
+% \item \boolopt[sepfour] When separating out numbers (using
+% \opt{digitsep}), four-digit numbers can be skipped. This is
+% the default.
+% \item \choicelitopt[expproduct] The symbol used to indicate a
+% product for exponents (\ie\ the $\times$ in \num{2e2}). The
+% choices are \opt{\textbf{times}} and \opt{cdot}.
+% \item \choicelitopt[exppower] Slightly esoterically, the power
+% used for exponents can be altered. The ``choice'' list here
+% only recognises \opt{ten}; anything else is used literally.
+% \item \choiceopt[padnumber] This sets where zeros are added. The
+% choices are \opt{\textbf{leading}} (a leading zero added to
+% |.1|), \opt{trailing} (converts |1.| to \num{1.0}), \opt{all}
+% (\opt{leading} and \opt{trailing}, also available as \opt{both})
+% and \opt{none} (no zeros added). The option will also act as a
+% Boolean, taking \opt{true} and opt{false}, with \opt{padnumber}
+% alone equal to giving the \opt{true} (= \opt{all}) value.
+%\end{itemize}
+%
+%\subsection{Angle formatting}
+% The angle formatter uses \cs{num} to format numbers; any options
+% for numbers are therefore applicable here. When typesetting an
+% angle using \cs{ang}, the following extra option is also relevant.
+%\begin{itemize}
+% \item \choiceopt[padangle] Determines whether small and large
+% angles are padded. The choices are \opt{none} (no additional
+% zeros are added), \opt{\textbf{small}} (angles with no degrees
+% have \ang{0;;} added), \opt{large} (angles with no seconds have
+% \ang[padangle=none]{;;0} added) and \opt{all} (\opt{small} and
+% \opt{large} combined). The option also recognises \opt{true}
+% and \opt{false} as choices, which are equal to \opt{all} and
+% \opt{none}, respectively. If no value is given, \opt{padangle}
+% acts a Boolean choice.
+% \item \boolopt[astroang] Astronomers place the signs for angles
+% over decimal signs; this is handled here.
+%\end{itemize}
+%
+%\subsection{Tabular material}
+% The formatting of data in |s| columns is controlled by a single
+% package option.
+%\begin{itemize}
+% \item \numopt[tabformat] The number here determines how to centre
+% decimal numbers in a column. If \opt{number} is zero or
+% negative, then the decimal marker is placed at the centre of the
+% column with the number symmetrically placed around it. If
+% \opt{number} is positive, it is interpreted
+% |\meta{pre}.\meta{post}|, where \meta{pre} is the number of
+% digits before the decimal marker and \meta{post} is the number
+% after. Appropriate space is reserved to centre a number of
+% total length \meta{pre} $+$ \meta{post} (plus the decimal
+% marker). If the digits supplied are too long, overfull boxes
+% will result. If only \meta{pre} is given, an equal amount of
+% space is reserved before and after the decimal marker, and the
+% number is typeset flush right.
+%\end{itemize}
+%
+%\subsection{Units}
+% The output of units (as opposed to the numerical argument of the
+% unit) takes only a few options.
+%\begin{itemize}
+% \item \boolopt[xspace] Determines whether to use \pkg{xspace} at
+% the end of unit macros when not given inside \cs{SI}, for
+% example |10\metre away| will give \sisetup{xspace} ``10\metre
+% away'' with \opt{xspace} turned on, but \sisetup{xspace=false}
+% ``10\metre away'' with it turned off.\sisetup{xspace}
+% \item \choiceopt[per] Affects how \cs{per} is interpreted in
+% units. The options available are \textbf{\opt{reciprocal}}
+% (also available as \opt{rp} and \opt{power}), \opt{slash} and
+% \opt{fraction} (or \opt{frac}).
+% \item \choiceopt[fraction] When using \opt{per=frac}, further control
+% of the appearance of the fraction is provided. The options
+% available are \opt{frac} (uses \LaTeX\ \cs{frac} operation),
+% \opt{nice} (also available as \opt{nicefrac}; uses a
+% \pkg{nicefrac}-like system), \opt{ugly} (also \opt{uglyfrac};
+% the same as loading \pkg{nicefrac} with the \opt{ugly} option:
+% uses \cs{frac} for material in maths mode and a slash for
+% material in text mode) and \opt{sfrac} (uses the \cs{sfrac}
+% macro from the \pkg{xfrac} package.\footnote{\pkg{xfrac} is part
+% of the experimental system for \LaTeX3. As it requires a number
+% of additional packages to work, \currpkg does not load
+% \pkg{xfrac}. If it is unavailable, the \opt{sfrac} setting will
+% fall back to using \cs{nicefrac}. See the \pkg{xfrac}
+% documentation for reasons to prefer \cs{sfrac} to
+% \cs{nicefrac}.}
+% \item \litopt[denlbrac] and \litopt[denrbrac] When using
+% \opt{per=slash}, using two or more units in the denominator
+% gives an ambiguous fraction. The package therefore adds
+% \opt{denlbrac} and \opt{denrbrac} in such cases.
+% \item \choiceopt[prefix] Controls how prefixes to units
+% are handled, with options \textbf{\opt{symbol}} (or
+% \opt{letter}) and \opt{number} (or \opt{power}).
+% \item \choicelitopt[prefixpower] and \choiceopt[prefixproduct]
+% Works in the same way as the general exponent equivalents, but
+% only for prefix modifiers.
+%\end{itemize}
+%
+%\subsection{Symbols}
+% User access to control the symbols used for \unitsym{\micro},
+% \unitsym{\ohm}, \unitsym{\angstrom}, \unitsym{\degree} and
+% \unitsym{\celsius} is provided here. These are all literal options,
+% which are available in text and maths mode variants. For example,
+% \opt{textmicro} is the code used for the \unitsym{\micro} symbol in
+% text mode. The text mode macros should be safe when forced into
+% text, and the maths ones when forced into maths.
+%\begin{itemize}
+% \item \opt{textOmega}
+% \item \opt{mathsOmega}
+% \item \opt{textmu}
+% \item \opt{mathsmu}
+% \item \opt{textdegree}
+% \item \opt{mathsdegree}
+% \item \opt{textminute}
+% \item \opt{mathsminute}
+% \item \opt{textsecond}
+% \item \opt{mathssecond}
+% \item \opt{textringA}
+% \item \opt{mathsringA}
+% \item \opt{textcelsius}
+% \item \opt{mathscelsius}
+%\end{itemize}
+%
+% When \currpkg is loaded, it can check for the presence of the
+% \pkg{textcomp} and \pkg{upgreek} packages, to provide better
+% symbols for certain items. To prevent this, us the
+% \opt{redefsymbols=false} option.
+%
+% The \unitsym{\electronvolt} symbol requires some fine-tuning, and
+% so has two options of its own.
+%\begin{itemize}
+% \item \lenopt[eVcorra] The correction applied to the gap between
+% ``e'' and ``V'' of the unit. The default is \opt{0.3ex}.
+% \item \lenopt[eVcorrb] The correction applied to the gap between
+% ``V'' of the unit and whatever follows. The default is
+% \opt{0ex}; a change is needed for example in
+% |\unitsym[per=slash]{\electronvolt\per\metre}|, which gives
+% \unitsym[per=slash]{\electronvolt\per\metre} by default, but
+% \unitsym[per=slash,eVcorrb=0.7ex]{\electronvolt\per\metre} by
+% setting \opt{eVcorrb=0.7ex}. The value needed will depend
+% on the use of the unit and the font metrics used.
+%\end{itemize}
+%
+%\subsection{Package control}
+% These macros alter the overall behaviour of the package.
+%\begin{itemize}
+% \item \listopt[load] Sets which additional configuration files are
+% loaded. These all have names of the form
+% \file{si-\meta{option}.cfg}, where \meta{option} should be given
+% in the \opt{load} list. The package recognises the
+% \opt{load=default} option, which is expanded to the standard list
+% of loaded files. This is to allow easy addition of one or more
+% files without needing to know the default list.
+% \item \listopt[noload] Excludes files from the above from being
+% loaded, so that a single file can be omitted without needing to
+% type a long list of those to be used.
+% \item \listopt[alsoload] Adds an item to the list to be loaded,
+% without needing to specify all of the existing list.
+% \item \choiceopt[log] Sets the amount of information written to
+% the log by \currpkg. The \meta{list} is \opt{none},
+% \opt{errors}, \textbf{\opt{normal}} and \opt{debug}. The last
+% option is also available as a Boolean, and gives \emph{lots} of
+% information in the log.
+% \item \choiceopt[emulate] Causes \currpkg to emulate the
+% given package. The \meta{list} takes values \opt{SIunits},
+% \opt{sistyle}, \opt{units} and \opt{unitsdef}.
+% This option can only be used when loading the package.
+%\end{itemize}
+%
+%\subsection{Back-compatibility options}
+% As well as the options outlined above, at load time a number of
+% options are available to allow \currpkg to be used as a direct
+% replacement for other unit-management packages. These are the same
+% options as are available in \SIunits, \sistyle, \unitspkg, and
+% \unitsdef. Using a legacy option will cause the package to load the
+% appropriate emulation code
+%
+%\section{Emulation of other packages}
+% \currpkg has been designed as a replacement for \SIunits, \sistyle,
+% \unitspkg and \unitsdef. It therefore provides options a hooks to
+% reproduce the functions of all of these packages. In this way,
+% \currpkg should be usable as a straight replacement for the older
+% packages. All of the user macros of \meta{package} are (hopefully)
+% available when using the
+% \opt{emulate=\meta{package}}.\footnote{User macros means that they
+% are described in the package documentation; simply not containing
+% an \texttt{@} does not mean they will have been emulated.} This
+% means for example that the \cs{num} macro takes an optional star
+% when emulating \sistyle. However, there are some points that
+% should be remembered. In particular, \currpkg validates numerical
+% input, meaning that places where a number is expected in the older
+% packages \emph{require} a number when emulated by \currpkg.
+%
+% The \numprint package has provided many useful ideas for the code
+% used here for number formatting. The basic use of the \cs{numprint}
+% (or \cs{np}) macro can be reproduced using \currpkg. However,
+% \numprint is large and complex, with its own backward-compatibility
+% options. As a result, emulation of \numprint is not provided here.
+% To use an \numprint document with \currpkg, the cs{numprint} macro
+% could be provided using the following code.
+%^^A Need to deal with \cs{numprint} being defined.
+%\let\numprint\relax
+%\begin{LaTeXexample}
+% \newcommand*{\numprint}[2][]{\SI[obeymode]{#2}{#1}}\\
+% \numprint{-123456} \numprint[N/mm^2]{-123456}
+%\end{LaTeXexample}
+%^^A Back to the normal - with \cs{newcommand}
+%\newcommand*{\numprint}{\pkg{numprint}\xspace}
+%
+% \currpkg can be used more-or-less directly to replace both
+% \pkg{dcolumn} and \pkg{rccol}. As is explained in the code
+% section, much of the column-alignment system here is taken from
+% \pkg{dcolumn}, while \pkg{rccol} provided a model for an
+% customisable system. However, neither package has been directly
+% emulated here. The |s| column type can be used to replace both |D|
+% and |R| columns by setting the appropriate package options.
+%
+%\section{Tricks and known issues}
+%
+% Due to the possibility of output in either maths or text mode, any
+% input which requires a particular mode needs to be protected. You
+% cannot use |$|\ldots|$|, as this can get ``caught out'', but also
+% as it may give hard-to-follow errors. Always use \cs{ensuremath}
+% to force maths processing, and \cs{text} (from the \AMS\TeX\
+% bundle) to ensure text mode.
+%
+% The package uses the \cs{mathrm} font family by default to typeset
+% output in maths mode. This however has a few side-effects. For
+% example, the Greek alphabet can give odd results.\footnote{This
+% depends on your font setup; this document uses T1 encoding, which
+% shows the issue, whereas using OT1 does not.} The use of the
+% \cs{mathnormal} font may get around this issue.
+%\begin{LaTeXexample}
+% \num[numextra=\pi]{4\pi e-7}\\
+% \num[numextra=\pi,mathnumdefault=mathnormal]{4\pi e-7}\\
+%\end{LaTeXexample}
+% On the other hand, you may want to use text mode. There,
+% \cs{ensuremath} is needed.
+%\begin{LaTeXexample}
+% \newcommand*{\numpi}{\ensuremath{\pi}}
+% \num[numextra=\numpi,mode=text]{4\numpi e-7}
+%\end{LaTeXexample}
+% There are several potential pitfalls in this area; experimentation
+% may well be needed.\footnote{Any suggestions for the code that runs
+% this are welcome; the issue is how to deal with active characters
+% in the input while not expanding macros.}
+%
+%\section{Reporting a problem}
+% \currpkg is quite long and complicated, and works hard to cover all
+% possible eventualities. However, there will be bugs in the code
+% and unexpected interactions with other packages. If you think you
+% have found a bug, please report it. A short test-case
+% demonstrating the problem would be very welcome. The following is
+% a suitable template, and is available as \file{si-bug.ltx}, by
+% running \file{si.dtx} through (pdf)\LaTeX.
+%^^A Change the output file name for the temporary file, so that
+%^^A this one is available to readers.
+%\edef\LaTeXexamplefile{si-bug.ltx}
+%\begin{LaTeXexample}[\typesetcodeonly]
+% \listfiles
+% \documentclass{article}
+% % Add other packages here.
+% % Add options need for si package, retain the debug option.
+% \usepackage[debug]{si}
+% \begin{document}
+% This is the bug test-case document for the \textsf{si}
+% package.\\
+% Please put your demonstration here, and e-mail to the
+% package author.
+% \begin{center}
+% \texttt{joseph.wright@morningtar2.co.uk}
+% \end{center}
+% \end{document}
+%\end{LaTeXexample}
+%^^A Back to normal, so that this is not forgotten
+%\edef\LaTeXexamplefile{\jobname.tmp}
+%
+%\section{Acknowledgements}
+% The package author has learned \LaTeX\ tricks from far too many
+% people to thank all of them. However, for this package specific
+% thanks must go to the authors of the existing ``unit'' packages:
+% Danie Els (\sistyle), Marcel Heldoorn (\SIunits), Patrick
+% Happel (\unitsdef), Axel Reichert (\unitspkg) and Harald
+% Harders (\numprint). Philip Lehmann, Will Robertson and Heiko
+% Oberdiek deserve much credit for demonstrating \LaTeX\ coding best
+% practice. Thanks to the various contributors of ideas for the
+% package: Donald Arseneau, Michele Dondi, Paul Gans, Ben Morrow, Lan
+% Thuy Pham, Stefan Pinnow, Allan Ristow and Patrick Steegstra.
+%
+%\part{Correct application of (SI) units}
+%TO DO!
+%
+%\bibliographystyle{unsrt}
+%\StopEventually{%
+% \part{Notes}
+% \PrintChanges
+% \PrintIndex
+% \bibliography{si}}
+%
+% \iffalse
+%<*package>
+% \fi
+%
+%\part{Implementation}
+%\section{Main package}
+% Much of the code here is taken, with little or no modification,
+% from the existing packages. These are all released under the LPPL,
+% and so this use is entirely allowed. Rather than confuse the
+% source here with repeated references, note that code here could be
+% copied from \sistyle, \SIunits, \numprint, \unitsdef or \unitspkg.
+% Some ideas have also been borrowed from \pkg{biblatex}; again these
+% will not be specifically noted. Code from other packages will be
+% marked when used.
+%
+% User-space commands (those not containing |@|) defined here should
+% give the same result as macros with the same name in the older
+% packages. However, internal package macros may behave differently;
+% if the user has redefined internal macros, then compatibility may
+% be impaired.
+%
+% The code used here uses \LaTeX\ rather than \TeX\ commands where
+% possible.\footnote{This applies to \LaTeX\ kernel commands only;
+% for example, \pkg{ifthenelse} is not used.} For example,
+% \cs{newcommand*} is used in place of \cs{def}, unless custom
+% parameters are needed. Hopefully, this will aid future
+% maintenance. Grouping is used where possible to limit the scope of
+% temporary assignments.
+%
+%\subsection{Setup code}
+% As always, the package starts with identification. A warning is then
+% printed about possible changes.
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{si}%
+ [2008/02/20 v.06a A comprehensive (SI) units package]
+\PackageInfo{si}
+ {This package is experimental. \MessageBreak The interface and
+ functionality is subject to review \MessageBreak and may be changed
+ in later releases}
+% \end{macrocode}
+% The package requires \eTeX, so the usual test is made.
+% \begin{macrocode}
+\begingroup
+ \@ifundefined{eTeXversion}
+ {\PackageError{si}
+ {Not running under e-TeX}
+ {This package requires e-TeX. Try compiling the document
+ with\MessageBreak `elatex' instead of `latex'. When using
+ pdfTeX, try `pdfelatex'\MessageBreak instead of `pdflatex'}%
+ \endgroup\endinput}
+ {\endgroup}
+% \end{macrocode}
+% Packages needed for functionality are loaded. \pkg{xkeyval}
+% handles the package options, while \pkg{amstext} from the \AMS\
+% bundle is needed for \cs{text}. \pkg{array} is needed for the new
+% column type for tabular material. \pkg{xspace} provides ``magic''
+% spacing after macros, if requested. \pkg{xkeyval} has to be at
+% least v2.5, as earlier versions do not have the correct macros
+% available. As this will lead to serious errors later, \currpkg
+% aborts if \pkg{xkeyval} is too old.
+% \begin{macrocode}
+\RequirePackage{xkeyval}
+\@ifpackagelater{xkeyval}{2005/05/07}
+ {}
+ {\PackageError{si}
+ {xkeyval >= 2.5 required}
+ {si requires the `xkeyval' package, version 2.5 or
+ later.\MessageBreak The version loaded is:
+ `\@nameuse{ver@xkeyval.sty}'.\MessageBreak
+ This is a fatal error; the package will abort.}%
+ \endinput}
+\RequirePackage{amstext,array,xspace}
+% \end{macrocode}
+%\begin{macro}{\si@tempa}
+%\begin{macro}{\si@tempb}
+%\begin{macro}{\si@tempc}
+% Some scratch commands are defined; apart from where a known value
+% is carried through, these could contain anything.
+% \begin{macrocode}
+\newcommand*{\si@tempa}{}
+\newcommand*{\si@tempb}{}
+\newcommand*{\si@tempc}{}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\ifsi@switch}
+% Various items will need a switch. To avoid name pollution, a
+% single switch is defined here; grouping will keep the definition
+% local.
+% \begin{macrocode}
+\newif\ifsi@switch
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@packagecheck}
+%\begin{macro}{\si@tempa}
+% As \currpkg is intended to replace the other unit-management
+% packages, these are tested for before any further processing. If
+% any are loaded, the package halts compilation; name clashes or
+% unexpected results could occur if this is not tested. Notice that
+% \SIunits and \sistyle could be loaded with variable capitalisation
+% (at least on Windows); both possibilities are tested. Also notice
+% that \unitsdef must be tested before \unitspkg, so that users of
+% the former get an intelligible message.
+% \begin{macrocode}
+\newcommand*{\si@packagecheck}{%
+ \begingroup
+ \@for\si@tempa:=SIunits,siunits,sistyle,SIstyle,unitsdef\do{%
+ \@ifpackageloaded{\si@tempa}
+ {\PackageError{si}
+ {Package `\si@tempa' incompatible}
+ {The `\si@tempa' package and `si' are
+ incompatible.\MessageBreak Use the
+ `emulate=\si@tempa' package option when loading si.}}
+ {}}
+% \end{macrocode}
+% Some packages should not cause a clash, but are emulated and would
+% be better handled that way.
+% \begin{macrocode}
+ \@for\si@tempa:=units\do{%
+ \@ifpackageloaded{\si@tempa}
+ {\PackageWarning{si}
+ {Consider loading the si package with\MessageBreak
+ option `emulate=\si@tempa', rather than\MessageBreak
+ loading both \si@tempa and si}}
+ {}}
+ \endgroup}
+% \end{macrocode}
+%\end{macro}
+% The check is carried out on loading and at the beginning of the
+% document, so that packages loaded both before and after
+% \currpkg are caught.
+% \begin{macrocode}
+\si@packagecheck
+\AtBeginDocument{\si@packagecheck}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@ifdefinable}
+% Using \cs{@ifdefinable} to check macro definitions gives a generic
+% error. To give something more helpful, \cs{@ifundefined} is used,
+% but this needs some \cs{expandafter} work. This way it can also be
+% used as a form of \cs{@ifundefined} for macro names.\\
+%\cs{si@ifdefinable}\marg{macro}
+% \begin{macrocode}
+\newcommand*{\si@ifdefinable}[1]{%
+ \expandafter\expandafter\expandafter\@ifundefined%
+ \expandafter\expandafter\expandafter%
+ {\expandafter\@gobble\string#1}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@addtolist}
+% It is quite useful to be able to add to a comma-separated list
+% of expandable items.\\
+%\cs{si@addtolist}\marg{macro}\marg{items}
+% \begin{macrocode}
+\newcommand*{\si@addtolist}[2]{%
+ \ifx\@empty#1\@empty
+ \edef#1{#2}%
+ \else
+ \edef#1{#1,#2}%
+ \fi}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@addtocsname}
+%\begin{macro}{\si@temptoks}
+% A second item to add to a is macro.\\
+%\cs{si@addtomacro}\marg{macro}\marg{tokens}\\
+%\cs{si@addtocsname}\marg{csname}\marg{tokens}
+% \begin{macrocode}
+\newtoks{\si@temptoks}
+\newcommand*{\si@addtocsname}[2]{%
+ \@ifundefined{#1}
+ {\@namedef{#1}{#2}}
+ {\si@temptoks\expandafter\expandafter\expandafter{%
+ \csname #1\endcsname#2}%
+ \expandafter\edef\csname #1\endcsname{\the\si@temptoks}}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@xifmtarg}
+%\begin{macro}{\si@ifnotmtarg}
+% To keep down dependance on other packages, the very short code
+% block from \pkg{ifmtarg} is copied here with an internal name.
+% \begin{macrocode}
+\begingroup
+ \catcode`\Q=3
+ \long\gdef\si@xifmtarg#1#2Q#3#4#5\@nil{#4}
+ \long\gdef\si@ifnotmtarg#1{%
+ \si@xifmtarg#1QQ\@firstofone\@gobble\@nil}
+\endgroup
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%
+%\subsection{Logging}
+%\begin{macro}{\ifsi@debug}
+%\begin{macro}{\ifsi@logmin}
+%\begin{macro}{\ifsi@lognone}
+% To control logging, some new switches are declared.
+% \begin{macrocode}
+\newif\ifsi@debug
+\newif\ifsi@logmin
+\newif\ifsi@lognone
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@log@err}
+%\begin{macro}{\si@log@warn}
+%\begin{macro}{\si@log@inf}
+% Some handy re-usable macros are defined here. These all take names
+% beginning These pop up in various places. First errors, warnings
+% and information are handled. Package options are used to control
+% how much output is given.\\
+%\cs{si@log@err}\marg{error}\marg{explanation}\\
+%\cs{si@log@warn}\marg{warning}\\
+%\cs{si@log@inf}\marg{information}
+% \begin{macrocode}
+\newcommand*{\si@log@err}[2]{%
+ \ifsi@lognone\else
+ \ifsi@logmin
+ \PackageWarning{si}{#1}%
+ \else
+ \PackageError{si}{#1}{#2}%
+ \fi
+ \fi}
+\newcommand*{\si@log@warn}[1]{%
+ \ifsi@lognone\else
+ \ifsi@logmin\else
+ \PackageWarning{si}{#1}%
+ \fi
+ \fi}
+\newcommand*{\si@log@inf}[1]{%
+ \ifsi@lognone\else
+ \ifsi@logmin\else
+ \PackageInfo{si}{#1}%
+ \fi
+ \fi}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@log@debug}
+% The debug macro only gives output if the appropriate package option
+% is set.\\
+%\cs{si@log@debug}\marg{debug-information}
+% \begin{macrocode}
+\newcommand*{\si@log@debug}[1]{%
+ \ifsi@lognone\else
+ \ifsi@debug
+ \PackageInfo{si}{#1}%
+ \fi
+ \fi}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%
+%\subsection{Option handling}
+%\begin{macro}{\sisetup}
+% To allow modification of options at run time, a setup macro is
+% provided. The run of strange tests are to prevent problems in
+% arrays and the like.\\
+%\cs{sisetup}\marg{keyval-options}
+% \begin{macrocode}
+\newcommand*{\sisetup}[1]{%
+ \iffalse{\fi\ifnum0=`}\fi
+ \setkeys[si]{opt}{#1}%
+ \ifnum0=`{\fi\iffalse}\fi}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@opt@key}
+% To aid maintenance, some shortcuts are defined for generating keys.
+% These also allow the debugging messages to be added automatically
+% to every key. First of all the basic key definition.\\
+%\cs{si@opt@key}\marg{keyname}\marg{code}
+% \begin{macrocode}
+\newcommand*{\si@opt@key}[2]{%
+ \define@key[si]{opt}{#1}
+ {#2\si@log@debug{Option #1 set to ##1}}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@opt@cmdkey}
+%\begin{macro}{\si@opt@cmdkeys}
+% The command versions of the above.\\
+%\cs{si@opt@cmdkey}\oarg{default}\marg{keyname}\marg{function}\\
+%\cs{si@opt@cmdkeys}\oarg{default}\marg{keynames}
+% \begin{macrocode}
+\newcommand*{\si@opt@cmdkey}[3][]{%
+ \define@cmdkey[si]{opt}[si@]{#2}[#1]{#3}}
+\newcommand*{\si@opt@cmdkeys}[2][]{%
+ \define@cmdkeys[si]{opt}[si@]{#2}[#1]}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@opt@boolkey}
+% Keys which only take switch values; anything other than \opt{true}
+% or \opt{false} will generate a warning from \pkg{xkeyval}.
+%\cs{si@opt@boolkey}\oarg{optional-processing}\marg{keyname}
+% \begin{macrocode}
+\newcommand*{\si@opt@boolkey}[2][]{%
+ \define@boolkey[si]{opt}[si@]{#2}[true]
+ {#1\si@log@debug{Option #2 set to ##1}}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@opt@choicekey}
+% A ``fill in the blanks'' choice key. In all cases, \cs{si@tempa}
+% is used to hold the value given to the key, so that \cs{ifx}
+% testing can occur.\\
+%\cs{si@opt@choicekey}\oarg{default}\marg{keyname}\marg{choices}^^A
+%\marg{in-list}\marg{not-in-list}
+% \begin{macrocode}
+\newcommand*{\si@opt@choicekey}[5][]{%
+ \define@choicekey*+[si]{opt}{#2}[\si@tempa]{#3}[#1]
+ {#4\si@log@debug{Option #2 set to ##1}}
+ {#5\si@log@debug{Option #2 set to ##1}}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@opt@xchoicekey}
+% Several of the package options can take either a choice from a list
+% of known options, or a value to be interpreted literally. To aid
+% maintenance, the necessary code can be set up here. These keys all
+% define a new macro, which must exist. The \cs{si@opt@xchoicekey}
+% macro therefore ensures that this is defined, as well as setting up
+% the \pkg{xkeyval} key.\\
+%\cs{si@opt@xchoicekey}\marg{keyname}\marg{choices}\marg{initial}
+% \begin{macrocode}
+\newcommand*{\si@opt@xchoicekey}[3]{%
+ \si@opt@choicekey[#3]{#1}{#2}
+% \end{macrocode}
+% This code will execute if the option is on the list. There will be
+% a ``fixed'' macro with a matching name, which is used for this.
+% \begin{macrocode}
+ {\expandafter\renewcommand\expandafter*%
+ \csname si@#1\endcsname{\@nameuse{si@fix@##1}}}
+% \end{macrocode}
+% The user has given something that is not on the list as an
+% argument. It is used literally.
+% \begin{macrocode}
+ {\expandafter\renewcommand\expandafter*%
+ \csname si@#1\endcsname{##1}}
+% \end{macrocode}
+% Finally, the initial value of the macro is set up.
+% \begin{macrocode}
+ \expandafter\newcommand\expandafter*\csname si@#1\endcsname%
+ {\@nameuse{si@fix@#3}}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@opt@compatkey}
+% An all-in-one definition for a back-compatibility key. These
+% should only be used at load time, so are automatically disabled
+% once the package is loaded. Emulation is also automatically turned
+% on.\\
+%\cs{si@opt@compatkey}\marg{package}\marg{keyname}.
+% \begin{macrocode}
+\newcommand*{\si@opt@compatkey}[2]{%
+ \define@boolkey[si]{opt}[si@old@]{#2}[true]
+ {\si@log@debug{Emulating #1 package option\MessageBreak #2}%
+ \sisetup{emulate=#1}%
+ \si@log@debug{Option #2 set to ##1}}
+ \AtEndOfPackage{\si@opt@disablekey{#2}
+ {Compatibility option #2 only\MessageBreak
+ available when loading si package}}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@opt@disablekey}
+% The ability to disable a key with a meaningful message is a must;
+% the warning will come from \currpkg, and not from \pkg{xkeyval}\\
+%\cs{si@opt@disablekey}\marg{keyname}\marg{warning}
+% \begin{macrocode}
+\newcommand*{\si@opt@disablekey}[2]{%
+ \key@ifundefined[si]{opt}{#1}
+ {}
+ {\si@log@debug{Disabling key #1}%
+ \si@opt@key{#1}{\si@log@warn{#2}}}}
+% \end{macrocode}
+%\end{macro}
+%
+% The \pkg{xkeyval} package option for logging is declared. This is
+% then processed to set the switches correctly.
+% \begin{macrocode}
+\si@opt@choicekey[normal]{log}{debug,verbose,normal,errors,none}
+% \end{macrocode}
+%\begin{macro}{\si@tempa}
+%\begin{macro}{\si@tempb}
+% A series of comparisons are made to assign the logging mode. The
+% \opt{normal} option is not tested, as executing the option sets the
+% switches appropriately.
+% \begin{macrocode}
+ {\si@debugfalse
+ \si@logminfalse
+ \si@lognonefalse
+ \renewcommand*{\si@tempb}{none}%
+ \ifx\si@tempa\si@tempb
+ \si@lognonetrue
+ \fi
+ \renewcommand*{\si@tempb}{minimal}%
+ \ifx\si@tempa\si@tempb
+ \si@logmintrue
+ \fi
+ \renewcommand*{\si@tempb}{debug}%
+ \ifx\si@tempa\si@tempb
+ \si@debugtrue
+ \fi
+ \renewcommand*{\si@tempb}{verbose}%
+ \ifx\si@tempa\si@tempb
+ \si@debugtrue
+ \fi}
+% \end{macrocode}
+% The option has not been recognised: give a warning (if
+% appropriate).
+% \begin{macrocode}
+ {\si@log@warn{Unrecognised value `#1' for option log}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+% A quick method to set \opt{log=debug}.
+% \begin{macrocode}
+\si@opt@boolkey{debug}
+% \end{macrocode}
+%\begin{macro}{\si@emulate}
+% The \opt{emulate} option is used for back-compatibility mode; if
+% the keyword is given with no value, emulation of \SIunits is
+% assumed.
+% \begin{macrocode}
+\newcommand*{\si@emulate}{}
+\si@opt@choicekey[SIunits]{emulate}
+ {SIunits,sistyle,numprint,units,unitsdef}
+ {\si@log@debug{Found emulation request for #1 package}%
+ \si@addtolist{\si@emulate}{#1}}
+ {\si@log@warn{Unknown value `#1' for option emulate
+ \MessageBreak No emulation will occur}}
+% \end{macrocode}
+%\end{macro}
+% The \opt{emulate} option is no longer valid once the package has
+% been loaded.
+% \begin{macrocode}
+\AtEndOfPackage{%
+ \si@opt@disablekey{emulate}
+ {emulate option only available when\MessageBreak
+ loading package}}
+% \end{macrocode}
+%\begin{macro}{\si@unitsep}
+%\begin{macro}{\si@unitspace}
+%\begin{macro}{\si@valuesep}
+% The two \opt{\dots space} options control the size of spaces
+% between the number and the unit (\cs{si@valuesep}), and that used
+% to represent a product (\cs{si@unitsep}). Known values here are
+% \opt{thin}, \opt{med}, \opt{medium}, \opt{thick},
+% \opt{cdot}\footnote{only valid for \opt{unitsep}.} and
+% \opt{none};\footnote{Only valid for \opt{valuesep.}} other entries
+% will be treated as custom spaces.
+% \begin{macrocode}
+\si@opt@xchoicekey{unitsep}{thin,med,medium,thick,space,none,cdot,
+ times}{thin}
+\si@opt@xchoicekey{unitspace}{space,thin,med,medium,thick,none}
+ {thin}
+\si@opt@xchoicekey{valuesep}{space,thin,med,medium,thick,none}
+ {thin}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@digitsep}
+% Separation of digits in large numbers is controlled by the
+% \opt{digitsep} option. As with the other \opt{sep} values, this
+% one has a choice of possible values. The list is quite long, so
+% that a range of options are handled automatically. Notice that
+% \opt{digitsep=none} will be used for no separation at all.
+% \begin{macrocode}
+\si@opt@xchoicekey{digitsep}
+ {thin,med,medium,thick,none,comma,stop,fullstop,period}{thin}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@decimalsign}
+% The symbol used for the decimal position is varied here. There are
+% only two real options, but options are given for the name of a full
+% stop.
+% \begin{macrocode}
+\si@opt@xchoicekey{decimalsign}{comma,stop,fullstop,period,cdot}
+ {fullstop}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@anglesep}
+% The separator between degrees and minutes, and between minutes and
+% seconds, when using \cs{ang}.
+% \begin{macrocode}
+\si@opt@xchoicekey{anglesep}{thin,med,medium,thick,none}{none}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\ifsi@obeymode}
+% The first test for the font control is whether to respect the
+% surrounding maths or text mode.
+% \begin{macrocode}
+\si@opt@boolkey{obeymode}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\ifsi@textmode}
+% The output of the package can be typeset using either text or maths
+% mode fonts. This is controlled using the \opt{mode} option and the
+% \cs{ifsi@textmode} switch.
+% \begin{macrocode}
+\newif\ifsi@textmode
+\si@opt@boolkey{textmode}
+\si@opt@choicekey{mode}{math,maths,text}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@tempa}
+%\begin{macro}{\si@tempb}
+% \cs{si@tempb} used to for the expansion tests. The default is
+% \opt{none}, as the choice key will not allow other values to get
+% here.
+% \begin{macrocode}
+ {\si@textmodefalse
+ \renewcommand*{\si@tempb}{text}%
+ \ifx\si@tempa\si@tempb
+ \si@textmodetrue
+ \fi}
+ {\si@log@warn{Unknown value `#1' for option mode}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\ifsi@obeyfamily}
+% The package can work to match the font family (serif, sans serif,
+% typewriter) of the surrounding text. This is controlled by a
+% Boolean option.
+% \begin{macrocode}
+\si@opt@boolkey{obeyfamily}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\ifsi@obeybold}
+% The package can attempt to respect bold, or may ignore it.
+% \begin{macrocode}
+\si@opt@boolkey{obeybold}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\ifsi@inlinebtext}
+%\begin{macro}{\si@tempa}
+%\begin{macro}{\si@tempb}
+% For inline maths, two options for checking what is bold are
+% available, the maths environment (\ie \cs{boldmath}) and the
+% surrounding text (\cs{textbf} or \cs{bffamily}).
+% \begin{macrocode}
+\newif\ifsi@inlinebtext
+\si@opt@choicekey{inlinebold}{text,maths,math}
+ {\si@inlinebtextfalse
+ \renewcommand*{\si@tempb}{text}%
+ \ifx\si@tempa\si@tempb
+ \si@inlinebtexttrue
+ \fi}
+ {\si@log@warn{Unknown value `#1' for option inlinebold}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\ifsi@obeyitalic}
+% Italic is slightly different to bold, as there is no convenient
+% switch for maths.
+% \begin{macrocode}
+\si@opt@boolkey{obeyitalic}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@mathsdefault}
+%\begin{macro}{\si@mathsrm}
+%\begin{macro}{\si@mathssf}
+%\begin{macro}{\si@mathstt}
+% The fonts used by the package default to the obvious \LaTeX\ ones;
+% however, this needs to be exposed to user modification. First the
+% maths mode fonts are sorted out.
+% \begin{macrocode}
+\si@opt@cmdkeys{mathsdefault,mathsrm,mathssf,mathstt}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+% To make life easier for the user, UK spellings are provided for the
+% maths keys.
+% \begin{macrocode}
+\si@opt@key{mathdefault}{\sisetup{mathsdefault=#1}}
+\si@opt@key{mathrm}{\sisetup{mathsrm=#1}}
+\si@opt@key{mathsf}{\sisetup{mathssf=#1}}
+\si@opt@key{mathtt}{\sisetup{mathstt=#1}}
+% \end{macrocode}
+%\begin{macro}{\si@textdefault}
+%\begin{macro}{\si@textrm}
+%\begin{macro}{\si@textsf}
+%\begin{macro}{\si@texttt}
+% The same thing for text mode fonts. Once again the default values
+% are pretty obvious.
+% \begin{macrocode}
+\si@opt@cmdkeys{textdefault,textrm,textsf,texttt}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@mathnumdefault}
+%\begin{macro}{\si@textnumdefault}
+% To allow numbers to be set in a different font to text, additional
+% options are set up.
+% \begin{macrocode}
+\si@opt@cmdkeys{mathnumdefault,textnumdefault}
+\si@opt@key{mathsnumdefault}{\sisetup{mathnumdefault=#1}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@numlist}
+%\begin{macro}{\si@numdecimal}
+%\begin{macro}{\si@numexp}
+%\begin{macro}{\si@numgobble}
+%\begin{macro}{\si@numsign}
+%\begin{macro}{\si@numextra}
+% The list of possible valid characters for parsing numbers is set
+% up. This is similar to \numprint, but with the \opt{extra} class,
+% and with characters ignored with no output renamed as \opt{gobble}.
+% \begin{macrocode}
+\si@opt@cmdkeys{numlist,numdecimal,numexp,numgobble,numsign,numextra}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@numvalid}
+% The various valid characters are collected together in a single
+% macro for later. In common with the above macros, this one starts
+% \cs{si@num\ldots}. The order here is the order the values are
+% tested later on.
+% \begin{macrocode}
+\newcommand*{\si@numvalid}{\si@numgobble\si@numexp\si@numsign%
+ \si@numdecimal\si@numlist\si@numextra}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\ifsi@sepfour}
+% With four digits in a number, separating may or may not be desired.
+% Note that this option is the same as one for \numprint.
+% \begin{macrocode}
+\si@opt@boolkey{sepfour}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@expproduct}
+% The marker for multiplication in exponential numbers is set up.
+% \begin{macrocode}
+\si@opt@xchoicekey{expproduct}{times,cdot}{times}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@exppower}
+% In the same area, the power for exponents is variable. Only one
+% choice is given.
+% \begin{macrocode}
+\si@opt@xchoicekey{exppower}{ten}{ten}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@prefixproduct}
+% The marker for multiplication in prefixes.
+% \begin{macrocode}
+\si@opt@xchoicekey{prefixproduct}{times,cdot,none}{times}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@prefixpower}
+% In the same area, the power for prefixes is variable. Here, two
+% choices ar needed.
+% \begin{macrocode}
+\si@opt@xchoicekey{prefixpower}{ten,two}{ten}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\ifsi@prefixnum}
+% Unit prefixes can be given as either symbols or numerically.
+% \begin{macrocode}
+\newif\ifsi@prefixnum
+\si@opt@choicekey{prefix}{symbol,letter,power,number}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@tempa}
+%\begin{macro}{\si@tempb}
+% \cs{si@tempb} used to for the expansion tests. The default is
+% \opt{none}, as the choice key will not allow other values to get
+% here.
+% \begin{macrocode}
+ {\si@prefixnumfalse
+ \renewcommand*{\si@tempb}{power}%
+ \ifx\si@tempa\si@tempb
+ \si@prefixnumtrue
+ \fi
+ \renewcommand*{\si@tempb}{number}%
+ \ifx\si@tempa\si@tempb
+ \si@prefixnumtrue
+ \fi}
+ {\si@log@warn{Unknown value `#1' for option prefix}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\ifsi@num@padlead}
+%\begin{macro}{\ifsi@num@padtrail}
+% A setting is needed to indicate when to add zeros to decimal
+% numbers, either before the decimal marker (|.1| giving
+% ``\num[padnumber=all]{.1}'') or after (|1.| giving
+% ``\num[padnumber=all]{1.}'').
+% \begin{macrocode}
+\newif\ifsi@num@padlead
+\newif\ifsi@num@padtrail
+\si@opt@choicekey[all]{padnumber}
+ {leading,lead,trailing,trail,all,both,true,none,false}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@tempa}
+%\begin{macro}{\si@tempb}
+% \cs{si@tempb} is used to for the expansion tests. The default is
+% \opt{none}, as the choice key will not allow other values to get
+% here.
+% \begin{macrocode}
+ {\si@num@padleadfalse
+ \si@num@padtrailfalse
+ \renewcommand*{\si@tempb}{leading}%
+ \ifx\si@tempa\si@tempb
+ \si@num@padleadtrue
+ \fi
+ \renewcommand*{\si@tempb}{lead}%
+ \ifx\si@tempa\si@tempb
+ \si@num@padleadtrue
+ \fi
+ \renewcommand*{\si@tempb}{trailing}%
+ \ifx\si@tempa\si@tempb
+ \si@num@padtrailtrue
+ \fi
+ \renewcommand*{\si@tempb}{trail}%
+ \ifx\si@tempa\si@tempb
+ \si@num@padtrailtrue
+ \fi
+ \renewcommand*{\si@tempb}{all}%
+ \ifx\si@tempa\si@tempb
+ \si@num@padleadtrue
+ \si@num@padtrailtrue
+ \fi
+ \renewcommand*{\si@tempb}{true}%
+ \ifx\si@tempa\si@tempb
+ \si@num@padleadtrue
+ \si@num@padtrailtrue
+ \fi
+ \renewcommand*{\si@tempb}{both}%
+ \ifx\si@tempa\si@tempb
+ \si@num@padleadtrue
+ \si@num@padtrailtrue
+ \fi}
+ {\si@log@warn{Unknown value `#1' for option padnumber}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@sign}
+%\begin{macro}{\ifsi@num@signmant}
+%\begin{macro}{\ifsi@num@signexp}
+% Some new switches for adding signs to numbers
+% \begin{macrocode}
+\newif\ifsi@num@signmant
+\newif\ifsi@num@signexp
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+% Signs can be added to numbers by default. Two options are needed
+% here; whether to add a sign by default, and what the sign is.
+% \begin{macrocode}
+\si@opt@xchoicekey{sign}{plus,minus,pm,mp}{plus}
+\si@opt@choicekey[all]{addsign}
+ {mantissa,exponent,mant,exp,all,both,true,none,false}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@tempa}
+%\begin{macro}{\si@tempb}
+% The option is now processed.
+% \begin{macrocode}
+ {\si@num@signmantfalse
+ \si@num@signexpfalse
+ \renewcommand*{\si@tempb}{mantissa}%
+ \ifx\si@tempa\si@tempb
+ \si@num@signmanttrue
+ \fi
+ \renewcommand*{\si@tempb}{mant}%
+ \ifx\si@tempa\si@tempb
+ \si@num@signmanttrue
+ \fi
+ \renewcommand*{\si@tempb}{exponent}%
+ \ifx\si@tempa\si@tempb
+ \si@num@signexptrue
+ \fi
+ \renewcommand*{\si@tempb}{exp}%
+ \ifx\si@tempa\si@tempb
+ \si@num@signexptrue
+ \fi
+ \renewcommand*{\si@tempb}{all}%
+ \ifx\si@tempa\si@tempb
+ \si@num@signmanttrue
+ \si@num@signexptrue
+ \fi
+ \renewcommand*{\si@tempb}{true}%
+ \ifx\si@tempa\si@tempb
+ \si@num@signmanttrue
+ \si@num@signexptrue
+ \fi
+ \renewcommand*{\si@tempb}{both}%
+ \ifx\si@tempa\si@tempb
+ \si@num@signmanttrue
+ \si@num@signexptrue
+ \fi}
+ {\si@log@warn{Unknown value `#1' for option addsign}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\ifsi@ang@padsmall}
+%\begin{macro}{\ifsi@ang@padlarge}
+% A switch for determining whether to typeset |\ang{;;1}| as
+% \ang[padangle=both]{;;1} or \ang[padangle=none]{;;1}. First, two
+% new Boolean switches are needed to indicate padding.
+% \begin{macrocode}
+\newif\ifsi@ang@padsmall
+\newif\ifsi@ang@padlarge
+\si@opt@choicekey[all]{padangle}
+ {small,large,all,both,true,none,false}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@tempa}
+%\begin{macro}{\si@tempb}
+% \cs{si@tempb} is used to for the expansion tests. The default is
+% \opt{none}, as the choice key will not allow other values to get
+% here.
+% \begin{macrocode}
+ {\si@ang@padsmallfalse
+ \si@ang@padlargefalse
+ \renewcommand*{\si@tempb}{small}%
+ \ifx\si@tempa\si@tempb
+ \si@ang@padsmalltrue
+ \fi
+ \renewcommand*{\si@tempb}{large}%
+ \ifx\si@tempa\si@tempb
+ \si@ang@padlargetrue
+ \fi
+ \renewcommand*{\si@tempb}{all}%
+ \ifx\si@tempa\si@tempb
+ \si@ang@padsmalltrue
+ \si@ang@padlargetrue
+ \fi
+ \renewcommand*{\si@tempb}{true}%
+ \ifx\si@tempa\si@tempb
+ \si@ang@padsmalltrue
+ \si@ang@padlargetrue
+ \fi
+ \renewcommand*{\si@tempb}{both}%
+ \ifx\si@tempa\si@tempb
+ \si@ang@padsmalltrue
+ \si@ang@padlargetrue
+ \fi}
+ {\si@log@warn{Unknown value `#1' for option padangle}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\ifsi@astroang}
+% A slightly odd option to allow the method used by astronomers for
+% angles.
+% \begin{macrocode}
+\si@opt@boolkey{astroang}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@tabformat}
+% The formatting of numbers in tables is handled by a
+% \pkg{dcolumn}-like system. For that, a single option is needed to
+% control the centring of data in the table.
+% \begin{macrocode}
+\si@opt@cmdkey[-1]{tabformat}{}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\ifsi@xspace}
+% Unit macros on their own may need \pkg{xpsace}.
+% \begin{macrocode}
+\si@opt@boolkey{xspace}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\ifsi@frac}
+%\begin{macro}{\ifsi@slash}
+% The option processing for formatting units with \cs{per} in them
+% needs two switches.
+% \begin{macrocode}
+\newif\ifsi@slash
+\newif\ifsi@frac
+\si@opt@choicekey[reciprocal]{per}
+ {reciprocal,rp,power,slash,frac,fraction}
+% \end{macrocode}
+%\begin{macro}{\si@tempa}
+%\begin{macro}{\si@tempb}
+% The usual value testing, with a default to use reciprocal powers.
+% \begin{macrocode}
+ {\si@slashfalse
+ \si@fracfalse
+ \renewcommand*{\si@tempb}{slash}%
+ \ifx\si@tempa\si@tempb
+ \si@fractrue
+ \si@slashtrue
+ \let\si@frac\si@frc@slash
+ \fi
+ \renewcommand*{\si@tempb}{frac}%
+ \ifx\si@tempa\si@tempb
+ \si@fractrue
+ \fi
+ \renewcommand*{\si@tempb}{fraction}%
+ \ifx\si@tempa\si@tempb
+ \si@fractrue
+ \fi}
+ {\si@log@warn{Unknown value `#1' for option per}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@slash}
+% For the \opt{slash} option, the separator can be customised.
+% \begin{macrocode}
+\si@opt@xchoicekey{slash}{slash}{slash}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@denrbrac}
+%\begin{macro}{\si@denlbrac}
+% Macros for the right and left brackets added to
+% potentially-ambiguous denominators.
+% \begin{macrocode}
+\si@opt@cmdkeys{denrbrac,denlbrac}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@tempa}
+%\begin{macro}{\si@tempb}
+% In the case of fractional handling of the \cs{per} operator,
+% further refinement is available.
+% \begin{macrocode}
+\si@opt@choicekey[frac]{fraction}
+ {frac,nicefrac,nice,sfrac,xfrac,uglyfrac,ugly}
+ {\let\si@frac\si@frc@frac
+ \renewcommand*{\si@tempb}{nicefrac}%
+ \ifx\si@tempa\si@tempb
+ \let\si@frac\si@frc@nice
+ \fi
+ \renewcommand*{\si@tempb}{uglyfrac}%
+ \ifx\si@tempa\si@tempb
+ \let\si@frac\si@frc@ugly
+ \fi
+ \renewcommand*{\si@tempb}{nice}%
+ \ifx\si@tempa\si@tempb
+ \let\si@frac\si@frc@nice
+ \fi
+ \renewcommand*{\si@tempb}{sfrac}%
+ \ifx\si@tempa\si@tempb
+ \let\si@frac\si@frc@sfrac
+ \fi
+ \renewcommand*{\si@tempb}{xfrac}%
+ \ifx\si@tempa\si@tempb
+ \let\si@frac\si@frc@sfrac
+ \fi
+ \renewcommand*{\si@tempb}{ugly}%
+ \ifx\si@tempa\si@tempb
+ \let\si@frac\si@frc@ugly
+ \fi}
+ {\si@log@warn{Unknown value `#1' for option fraction}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@load}
+%\begin{macro}{\si@noload}
+% Loading of support files is controlled by two keys. The first
+% defines a list of files that may be loaded, the second a list that
+% will not. This makes it easy to exclude a single file from a long
+% list.
+% \begin{macrocode}
+\si@opt@cmdkeys{load,noload}
+\si@opt@key{alsoload}{\si@addtolist{\si@load}{#1}}
+\AtEndOfPackage{%
+ \si@opt@disablekey{load}
+ {Configuration files can only be used\MessageBreak
+ when loading si}
+ \si@opt@disablekey{also}
+ {Configuration files can only be used\MessageBreak
+ when loading si}
+ \si@opt@disablekey{noload}
+ {Configuration files can only be used\MessageBreak
+ when loading si}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@textOmega}
+%\begin{macro}{\si@mathsOmega}
+% The various non-Latin symbols need to be handled, and given user interfaces.
+% Some definitions are more complex than others; for \unitsym{\ohm}
+% things are easy.
+% \begin{macrocode}
+\si@opt@cmdkeys{textOmega,mathsOmega}
+\si@opt@key{mathOmega}{\sisetup{mathsOmega=#1}}
+\newcommand*{\si@mathsOmega}{\text{\ensuremath{\Omega}}}
+\newcommand*{\si@textOmega}{\ensuremath{\Omega}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@textmu}
+%\begin{macro}{\si@mathsmu}
+% For the \unitsym{\micro} symbol, some direct loading of symbols is
+% needed as the maths mu sign ($\mu$) is wrong.
+% \begin{macrocode}
+\si@opt@cmdkeys{textmu,mathsmu}
+\si@opt@key{mathmu}{\sisetup{mathsmu=#1}}
+\DeclareFontEncoding{TS1}{}{}
+\DeclareFontSubstitution{TS1}{cmr}{m}{n}
+\DeclareTextSymbol{\si@textmu}{TS1}{181}
+\DeclareTextSymbolDefault{\si@textmu}{TS1}
+\DeclareFontFamily{OML}{eur}{\skewchar\font127}
+\DeclareFontShape{OML}{eur}{m}{n}%
+ {<5> <6> <7> <8> <9> gen * eurm %
+ <10><10.95><12><14.4><17.28><20.74><24.88>eurm10}{}
+\DeclareSymbolFont{greek}{OML}{eur}{m}{n}
+\DeclareMathSymbol{\si@mathsmu}{\mathord}{greek}{"16}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@textdegree}
+%\begin{macro}{\si@mathsdegree}
+%\begin{macro}{\si@textminute}
+%\begin{macro}{\si@mathsminute}
+%\begin{macro}{\si@textsecond}
+%\begin{macro}{\si@mathssecond}
+% The angle signs.
+% \begin{macrocode}
+\si@opt@cmdkeys{textdegree,mathsdegree,textminute,mathsminute,
+ textsecond,mathssecond}
+\si@opt@key{mathdegree}{\sisetup{mathsdegree=#1}}
+\si@opt@key{mathminute}{\sisetup{mathsminute=#1}}
+\si@opt@key{mathsecond}{\sisetup{mathssecond=#1}}
+\newcommand*{\si@textdegree}{\ensuremath{{}^{\circ}}}
+\newcommand*{\si@mathsdegree}{{}^{\circ}}
+\newcommand*{\si@textminute}{\ensuremath{{}^{\prime}}}
+\newcommand*{\si@mathsminute}{{}^{\prime}}
+\newcommand*{\si@textsecond}{\ensuremath{{}^{\prime\prime}}}
+\newcommand*{\si@mathssecond}{{}^{\prime\prime}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@textcelsius}
+%\begin{macro}{\si@mathscelsius}
+% Finally, degrees Celsius, which may need the degree symbol.
+% \begin{macrocode}
+\si@opt@cmdkeys{textcelsius,mathscelsius}
+\si@opt@key{mathcelsius}{\sisetup{mathscelsius=#1}}
+\newcommand*{\si@textcelsius}{\si@textdegree C}
+\newcommand*{\si@mathscelsius}{\si@mathsdegree\mathrm{C}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@textringA}
+%\begin{macro}{\si@mathsringA}
+% The \unitsym{\angstrom} sign.
+% \begin{macrocode}
+\si@opt@cmdkeys{textringA,mathsringA}
+\si@opt@key{mathringA}{\sisetup{mathsringA=#1}}
+\newcommand*{\si@textringA}{\AA}
+\newcommand*{\si@mathsringA}{\text{\AA}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\ifsi@redefsymbols}
+% A flag for using \pkg{textcomp} and \pkg{upgreek} to provide better
+% symbols.
+% \begin{macrocode}
+\si@opt@boolkey{redefsymbols}
+\AtBeginDocument{%
+ \si@opt@disablekey{redefsymbols}
+ {Symbols can only be redefined\MessageBreak
+ when loading si}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@eVcorra}
+%\begin{macro}{\si@eVcorrb}
+% \begin{macrocode}
+\newlength\si@eVcorra
+\newlength\si@eVcorrb
+\si@opt@key{eVcorra}{\setlength\si@eVcorra{#1}}
+\si@opt@key{eVcorrb}{\setlength\si@eVcorrb{#1}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@locale}
+%\begin{macro}{\si@loadlocales}
+%\begin{macro}{\si@loctolang}
+% Handling typographic conventions needs three keys. \opt{locale} is
+% used to set the locale, whereas \cs{loadlocales} reads in the
+% definitions at package load time.
+% \begin{macrocode}
+\si@opt@cmdkeys{loadlocales,loctolang}
+\si@opt@cmdkey{locale}{%
+ \sisetup{loadlocales={#1}}%
+ \AtEndOfPackage{\si@loc@set{#1}}}
+\AtBeginDocument{%
+ \si@opt@disablekey{loadlocales}
+ {Locale files can only be loaded\MessageBreak
+ in the preamble}
+ \si@opt@disablekey{loctolang}
+ {Locale files can only be loaded\MessageBreak
+ in the preamble}
+ \si@opt@cmdkey{locale}{\si@loc@set{#1}}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%
+%\subsection{Compatibility options}
+%\begin{macro}{\ifsi@old@ugly}
+%\begin{macro}{\ifsi@old@nice}
+%\begin{macro}{\ifsi@old@loose}
+%\begin{macro}{\ifsi@old@tight}
+% With the options for the package set up, the next stage is to
+% provide support for users of the older packages. These all set up
+% switches, but do not do anything. That is left to the emulation
+% files, loaded at the end of the package. First of all, the
+% \unitspkg options are dealt with; there are not many.
+% \begin{macrocode}
+\si@opt@compatkey{units}{ugly}
+\si@opt@compatkey{units}{nice}
+\si@opt@compatkey{units}{loose}
+\si@opt@compatkey{units}{tight}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\ifsi@old@OHM}
+%\begin{macro}{\ifsi@old@ohm}
+%\begin{macro}{\ifsi@old@redef-gensymb}
+%\begin{macro}{\ifsi@gensymb}
+% The \unitsdef package is unfortunately much more profligate with
+% options. The first set are to do with support for \pkg{gensymb}.
+% \begin{macrocode}
+\si@opt@compatkey{unitsdef}{OHM}
+\si@opt@compatkey{unitsdef}{ohm}
+\si@opt@compatkey{unitsdef}{redef-gensymb}
+\newif\ifsi@gensymb
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\ifsi@old@LITER}
+%\begin{macro}{\ifsi@old@liter}
+%\begin{macro}{\ifsi@old@noxspace}
+%\begin{macro}{\ifsi@old@noconfig}
+% The second set are more general functionality.
+% \begin{macrocode}
+\si@opt@compatkey{unitsdef}{LITER}
+\si@opt@compatkey{unitsdef}{liter}
+\si@opt@compatkey{unitsdef}{noxspace}
+\si@opt@compatkey{unitsdef}{noconfig}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\ifsi@old@noabbr}
+%\begin{macro}{\ifsi@old@noamperageabbr}
+%\begin{macro}{\ifsi@old@nofrequncyabbr}
+%\begin{macro}{\ifsi@old@nomolabbr}
+%\begin{macro}{\ifsi@old@novoltageabbr}
+%\begin{macro}{\ifsi@old@novolumeabbr}
+%\begin{macro}{\ifsi@old@noweightabbr}
+%\begin{macro}{\ifsi@old@noenergyabbr}
+%\begin{macro}{\ifsi@old@nolengthabbr}
+%\begin{macro}{\ifsi@old@notimeabbr}
+% The final set are for control of abbreviations, and are a good
+% demonstration of why to use \pkg{xkeyval}!
+% \begin{macrocode}
+\si@opt@compatkey{unitsdef}{noabbr}
+\si@opt@compatkey{unitsdef}{noampereageabbr}
+\si@opt@compatkey{unitsdef}{nofrequncyabbr}
+\si@opt@compatkey{unitsdef}{nomolabbr}
+\si@opt@compatkey{unitsdef}{novoltageabbr}
+\si@opt@compatkey{unitsdef}{novolumeabbr}
+\si@opt@compatkey{unitsdef}{noweightabbr}
+\si@opt@compatkey{unitsdef}{noenergyabbr}
+\si@opt@compatkey{unitsdef}{nolengthabbr}
+\si@opt@compatkey{unitsdef}{notimeabbr}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\ifsi@old@cdot}
+%\begin{macro}{\ifsi@old@thickspace}
+%\begin{macro}{\ifsi@old@mediumspace}
+%\begin{macro}{\ifsi@old@thinspace}
+%\begin{macro}{\ifsi@old@thickqspace}
+%\begin{macro}{\ifsi@old@mediumqspace}
+%\begin{macro}{\ifsi@old@thinqspace}
+% The \SIunits package has lots of options. These ones are all
+% related to spacing.
+% \begin{macrocode}
+\si@opt@compatkey{SIunits}{cdot}
+\si@opt@compatkey{SIunits}{thickspace}
+\si@opt@compatkey{SIunits}{mediumspace}
+\si@opt@compatkey{SIunits}{thinspace}
+\si@opt@compatkey{SIunits}{thickqspace}
+\si@opt@compatkey{SIunits}{mediumqspace}
+\si@opt@compatkey{SIunits}{thinqspace}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\ifsi@old@amssymb}
+%\begin{macro}{\ifsi@old@squaren}
+%\begin{macro}{\ifsi@old@pstricks}
+%\begin{macro}{\ifsi@old@Gray}
+%\begin{macro}{\ifsi@old@italian}
+% These options are used by \SIunits to control clashes with other
+% packages.
+% \begin{macrocode}
+\si@opt@compatkey{SIunits}{amssymb}
+\si@opt@compatkey{SIunits}{squaren}
+\si@opt@compatkey{SIunits}{pstricks}
+\si@opt@compatkey{SIunits}{Gray}
+\si@opt@compatkey{SIunits}{italian}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\ifsi@old@textstyle}
+%\begin{macro}{\ifsi@old@binary}
+%\begin{macro}{\ifsi@old@noams}
+%\begin{macro}{\ifsi@old@derivedinbase}
+%\begin{macro}{\ifsi@old@derived}
+% The miscellaneous options.
+% \begin{macrocode}
+\si@opt@compatkey{SIunits}{textstyle}
+\si@opt@compatkey{SIunits}{binary}
+\si@opt@compatkey{SIunits}{noams}
+\si@opt@compatkey{SIunits}{derivedinbase}
+\si@opt@compatkey{SIunits}{derived}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%
+%\subsection{Constants}
+% A number of macros are needed by the package that provide a
+% non-changing output. These are defined here; the intention is that
+% these should not be macros that the user is likely to need to
+% alter. All of these macros have preface \cs{si@fix@}, to flag that
+% that are intended as constants. The package may rely on the
+% contents of these macros for functionality.
+%
+%\begin{macro}{\si@fix@thin}
+%\begin{macro}{\si@fix@med}
+%\begin{macro}{\si@fix@medium}
+%\begin{macro}{\si@fix@thick}
+%\begin{macro}{\si@fix@space}
+% First, there are the various space macros. To allow both \opt{med}
+% and \opt{medium} to be used as a space description, two macros are
+% needed for the same output.
+% \begin{macrocode}
+\newcommand*{\si@fix@thin}{\,}
+\newcommand*{\si@fix@med}{\:}
+\newcommand*{\si@fix@medium}{\:}
+\newcommand*{\si@fix@thick}{\;}
+\newcommand*{\si@fix@space}{\text{~}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@fix@cdot}
+%\begin{macro}{\si@fix@comma}
+%\begin{macro}{\si@fix@stop}
+%\begin{macro}{\si@fix@fullstop}
+%\begin{macro}{\si@fix@period}
+%\begin{macro}{\si@fix@times}
+% Next there are macros for material that is not simply whitespace.
+% To allow several options, the full-stop gets lots of names.
+% \begin{macrocode}
+\newcommand*{\si@fix@cdot}{\cdot}
+\newcommand*{\si@fix@comma}{{,}}
+\newcommand*{\si@fix@stop}{{.}}
+\newcommand*{\si@fix@fullstop}{{.}}
+\newcommand*{\si@fix@period}{{.}}
+\newcommand*{\si@fix@times}{\times}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@fix@plus}
+%\begin{macro}{\si@fix@minus}
+%\begin{macro}{\si@fix@pm}
+%\begin{macro}{\si@fix@mp}
+% Signs for numbers are needed.
+% \begin{macrocode}
+\newcommand*{\si@fix@plus}{+}
+\newcommand*{\si@fix@minus}{-}
+\newcommand*{\si@fix@pm}{\pm}
+\newcommand*{\si@fix@mp}{\mp}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@fix@two}
+%\begin{macro}{\si@fix@ten}
+% The literals ``2'' and ``10'' are needed for exponents.
+% \begin{macrocode}
+\newcommand*{\si@fix@two}{2}
+\newcommand*{\si@fix@ten}{10}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@fix@slash}
+% Another optional component that will probably not be used by many
+% people.
+% \begin{macrocode}
+\newcommand*{\si@fix@slash}{/}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@fix@none}
+% Finally for spacing, there is the possibility of nothing at all
+% \begin{macrocode}
+\newcommand*{\si@fix@none}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\subsection{Symbols}
+%\begin{macro}{\si@symbol}
+% Each of the symbol macros needs to be set up; the options give a
+% maths and text mode sign, but internally a single macro is needed
+% for each.
+% \begin{macrocode}
+\newcommand*{\si@symbol}[1]{%
+ \expandafter\DeclareRobustCommand\expandafter*\expandafter{%
+ \csname si@sym@#1\endcsname}{%
+ \ifmmode
+ \expandafter\csname si@maths#1\expandafter\endcsname%
+ \else
+ \expandafter\csname si@text#1\expandafter\endcsname%
+ \fi}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@sym@Omega}
+%\begin{macro}{\si@sym@ringA}
+%\begin{macro}{\si@sym@mu}
+%\begin{macro}{\si@sym@degree}
+%\begin{macro}{\si@sym@minute}
+%\begin{macro}{\si@sym@second}
+%\begin{macro}{\si@sym@celsius}
+% The various symbols are now declared.
+% \begin{macrocode}
+\si@symbol{Omega}
+\si@symbol{ringA}
+\si@symbol{mu}
+\si@symbol{degree}
+\si@symbol{minute}
+\si@symbol{second}
+\si@symbol{celsius}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{si@tempa}
+% The issue of redefinition of symbols now arises. \currpkg can
+% check for the loading of a number of support package, and can then
+% redefine the appropriate symbols.
+% \begin{macrocode}
+\AtBeginDocument{%
+ \ifsi@redefsymbols
+ \@ifpackageloaded{textcomp}
+ {\si@log@debug{Redefining symbols using textcomp}%
+ \renewcommand*{\si@textdegree}{\textdegree}%
+ \renewcommand*{\si@mathsdegree}{\text{\textdegree}}%
+% \end{macrocode}
+% \pkg{mathptmx} will give issues with \pkg{textcomp} and the
+% \unitsym{\ohm} sign.
+% \begin{macrocode}
+ \@ifpackageloaded{mathptmx}{}
+ {\renewcommand*{\si@textmu}{\textmu}%
+ \renewcommand*{\si@textOmega}{\textohm}}%
+% \end{macrocode}
+% The \unitsym{\angstrom} symbol is only redefined if the encoding is
+% OT1; other encodings should have a proper glyph used for \cs{AA}.
+% The \cs{encodingdefault} macro is \cs{long} for some reason.
+% \begin{macrocode}
+ \long\def\si@tempa{OT1}%
+ \ifx\si@tempa\encodingdefault
+ \renewcommand*{\si@mathsringA}{\text{\capitalring{A}}}%
+ \renewcommand*{\si@textringA}{\capitalring{A}}
+ \fi}{}
+ \@ifpackageloaded{upgreek}
+ {\si@log@debug{Redefining symbols using upgreek}%
+ \renewcommand*{\si@mathsmu}{\upmu}%
+ \renewcommand*{\si@mathsOmega}{\Upomega}}{}
+ \fi}
+% \end{macrocode}
+%\end{macro}
+%
+%\subsection{Handling fractions}
+%\begin{macro}{\si@frac}
+%\begin{macro}{\si@frc@frac}
+%\begin{macro}{\si@frc@slash}
+%\begin{macro}{\si@frc@nice}
+%\begin{macro}{\si@frc@sfrac}
+% Various methods of handling fractions are provided.
+% \begin{macrocode}
+\newcommand*{\si@frc@frac}[2]{%
+ \ensuremath{\frac{\expandafter\si@unt@out\expandafter{#1}}%
+ {\expandafter\si@unt@out\expandafter{#2}}}}
+\let\si@frac\si@frc@frac
+\newcommand*{\si@frc@slash}[2]{%
+ \expandafter\si@unt@out\expandafter{#1}%
+ \si@out@text{\ensuremath{\si@slash}}%
+ \expandafter\si@unt@out\expandafter{#2}}
+\newcommand*{\si@frc@nice}[2]{%
+ \ensuremath{\si@frc@nicefrac{\expandafter\si@unt@out%
+ \expandafter{#1}}{\expandafter\si@unt@out\expandafter{#2}}}}
+\newcommand*{\si@frc@sfrac}[2]{%
+ \sfrac{\expandafter\si@unt@out\expandafter{#1}}%
+ {\expandafter\si@unt@out\expandafter{#2}}}
+\AtBeginDocument{%
+ \@ifpackageloaded{xfrac}
+ {}
+ {\si@log@inf{xfrac package unavailable\MessageBreak
+ using `fraction=sfrac' will fall back on\MessageBreak
+ nicefrac-like method}%
+ \renewcommand*{\si@frc@sfrac}[2]{%
+ \si@log@warn{xfrac package unavailable}%
+ \si@frc@nice{#1}{#2}}}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@frc@nicefrac}
+%\begin{macro}{\si@frc@displen}
+%\begin{macro}{\si@frc@textlen}
+%\begin{macro}{\si@frc@suplen}
+%\begin{macro}{\si@frc@ssuplen}
+% To avoid needing \unitspkg installed, the \cs{nicefrac} macro needs
+% to be emulated here. The code is taken (with permission) from
+% \kg{nicefrac}.\footnote{The original is licensed under the GPL;
+% thanks to the author Axel Reichert for permission to copy the code
+% here.}
+% \begin{macrocode}
+\newlength\si@frc@displen
+\newlength\si@frc@textlen
+\newlength\si@frc@suplen
+\newlength\si@frc@ssuplen
+\newcommand*{\si@frc@nicefrac}{%
+ \ifmmode
+ \expandafter\si@frc@mathsnf%
+ \else
+ \expandafter\si@frc@textnf%
+ \fi}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@frc@mathsnf}
+% The maths mode system.\\
+%\cs{si@frc@mathsnf}\marg{numerator}\marg{denominator}
+% \begin{macrocode}
+\newcommand*{\si@frc@mathsnf}[2]{%
+ \begingroup
+ \settoheight{\si@frc@displen}{\ensuremath{\displaystyle{M}}}%
+ \settoheight{\si@frc@textlen}{\ensuremath{\textstyle{M}}}%
+ \settoheight{\si@frc@suplen}{\ensuremath{\scriptstyle{M}}}%
+ \settoheight{\si@frc@ssuplen}{\ensuremath{\scriptscriptstyle{M}}}%
+ \addtolength{\si@frc@displen}{-\si@frc@ssuplen}%
+ \addtolength{\si@frc@textlen}{-\si@frc@ssuplen}%
+ \addtolength{\si@frc@suplen}{-\si@frc@ssuplen}%
+ \mathchoice
+ {\raisebox{\si@frc@displen}{\ensuremath{\scriptstyle{#1}}}}%
+ {\raisebox{\si@frc@textlen}{\ensuremath{\scriptstyle{#1}}}}%
+ {\raisebox{\si@frc@suplen}%
+ {\ensuremath{\scriptscriptstyle{#1}}}}%
+ {\raisebox{\si@frc@ssuplen}%
+ {\ensuremath{\scriptscriptstyle{#1}}}}%
+ \mkern-2mu/\mkern-1mu%
+ \bgroup
+ \mathchoice
+ {\scriptstyle}%
+ {\scriptstyle}%
+ {\scriptscriptstyle}%
+ {\scriptscriptstyle}%
+ {#2}%
+ \egroup
+ \endgroup}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@frc@textnf}
+% A stripped down version of the \pkg{nicefrac} system for text mode.\\
+%\cs{si@frc@textnf}\marg{numerator}\marg{denominator}
+% \begin{macrocode}
+\newcommand*{\si@frc@textnf}[2]{%
+ \begingroup
+ \settoheight{\si@frc@textlen}{M}%
+ \settoheight{\si@frc@ssuplen}{\fontsize\sf@size\z@%
+ \selectfont{M}}%
+ \addtolength{\si@frc@textlen}{-\si@frc@ssuplen}%
+ \raisebox{\si@frc@textlen}{\fontsize\sf@size\z@%
+ \selectfont{#1}}%
+ \hspace{-0.25ex}/\hspace{-0.25ex}%
+ \hbox{\fontsize\sf@size\z@\selectfont{#2}}%
+ \endgroup}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@frc@ugly}
+%\begin{macro}{\si@tempa}
+%\begin{macro}{\si@tempb}
+% The \cs{si@frc@ugly} macro is needed to emulate the \opt{ugly}
+% option in \unitspkg, where output depends on the current mode.\\
+%\cs{si@frc@ugly}\marg{numerator}
+% \begin{macrocode}
+\newcommand*{\si@frc@ugly}[1]{%
+ \def\si@tempa{#1}%
+ \ifmmode
+ \expandafter\si@frc@frac%
+ \else
+ \def\si@tempb{1}%
+ \ifx\si@tempa\si@tempb
+% \end{macrocode}
+% The slash switch cannot be used, so the possibility of the
+% numerator being one is handled here.
+% \begin{macrocode}
+ \setbox\si@tempbox=\hbox{\ensuremath{\si@valuesep}}%
+ \hskip-\wd\si@tempbox%
+ \def\si@tempa{}%
+ \fi
+ \expandafter\si@frc@slash%
+ \fi
+ {\si@tempa}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%
+%\subsection{Font control}
+% A number of controls and tests are needed to control the font used
+% for output. Underlying all of this is the \AMS\ package
+% \pkg{amstext} package, providing the \cs{text} command. Much of
+% the font control system here is taken more or less verbatim from
+% \sistyle; modifications have been made to fit the \currpkg
+% interface.
+%
+%\begin{macro}{\si@fam@getmfam}
+%\begin{macro}{\si@fam@sf}
+%\begin{macro}{\si@fam@tt}
+% The font families in use in the document are needed.
+% \begin{macrocode}
+\newcommand*{\si@fam@getmfam}{%
+ \sbox{0}{$%
+ \@ifundefined{mathsf}
+ {\si@log@debug{No mathsf family found}%
+ \global\chardef\si@fam@sf=99}%
+ {\mathsf{\global\chardef\si@fam@sf=\fam}}%
+ \@ifundefined{mathtt}
+ {\si@log@debug{No mathtt family found}%
+ \global\chardef\si@fam@tt=99}%
+ {\mathtt{\global\chardef\si@fam@tt=\fam}}%
+ $}}
+\AtBeginDocument{\si@fam@getmfam}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@fam@ifbtext}
+%\begin{macro}{\si@fam@ifbmaths}
+%\begin{macro}{\si@tempa}
+% These tests check for bold in text and maths mode, respectively.\\
+%\cs{si@fam@ifbtext}\marg{code}\\
+%\cs{si@fam@ifbmaths}\marg{code}\\
+% \begin{macrocode}
+\newcommand*{\si@fam@ifbtext}[1]{%
+ \if b\expandafter\@car\f@series\@nil
+ #1\fi}
+\newcommand{\si@fam@ifbmaths}[1]{%
+ \def\si@tempa{bold}%
+ \ifx\math@version\si@tempa
+ #1\fi}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@fam@ifbinline}
+% For compatibility with \unitspkg, a method to change the behaviour
+% when in inline maths is needed for the bold detector.
+% \begin{macrocode}
+\newcommand*{\si@fam@ifbinline}{%
+ \ifsi@inlinebtext
+ \expandafter\si@fam@ifbtext%
+ \else
+ \expandafter\si@fam@ifbmaths%
+ \fi}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@fam@ifitext}
+%\begin{macro}{\si@tempa}
+% This test check for italic or slanted text in text mode, by
+% negation (upright text is |n|).\\
+%\cs{si@fam@ifitext}\marg{code}\\
+% \begin{macrocode}
+\newcommand*{\si@fam@ifitext}[1]{%
+ \if n\expandafter\@car\f@series\@nil\else
+ #1\fi}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@fam@mode}
+% Detection of the current mode needs to happen``early'' (before any
+% change of \cs{ensuremath}). So a short macro is provided to do the
+% job.
+% \begin{macrocode}
+\newcommand*{\si@fam@mode}{%
+ \ifsi@obeymode
+ \ifmmode
+ \sisetup{mode=maths}%
+ \else
+ \sisetup{mode=text}%
+ \fi
+ \fi}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\ifsi@fam@set}
+% A marker is set up to check if font-matching has been taken place.
+% \begin{macrocode}
+\newif\ifsi@fam@set
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@fam@set}
+% Using the code from \sistyle as a base, a set of tests are used to
+% set the current font families and weights.
+% \begin{macrocode}
+\newcommand*{\si@fam@set}{%
+ \si@fam@settrue
+% \end{macrocode}
+%\begin{macro}{\si@tempa}
+%\begin{macro}{\si@tempb}
+% The temporary macros are needed for the \cs{ifx} tests.
+% \begin{macrocode}
+ \edef\si@tempa{\sfdefault}%
+ \edef\si@tempb{\ttdefault}%
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+% The surrounding font family is only tested if matching is
+% requested.
+% \begin{macrocode}
+ \ifsi@obeyfamily
+ \si@log@debug{Font detection: checking font}%
+% \end{macrocode}
+%\begin{macro}{\si@fam@maths}
+%\begin{macro}{\si@fam@text}
+% Next, checks are needed for maths \latin{versus} text mode, and if
+% in maths mode, whether this is inline or display. Once that is
+% done, font families can be tested.
+% \begin{macrocode}
+ \ifmmode
+ \ifdim\displaywidth>0pt\relax
+ \si@log@debug{Font detection: display maths}%
+ \ifnum\the\fam=\si@fam@sf
+ \si@log@debug{Font detection: sf}%
+ \expandafter\let\expandafter\si@fam@maths
+ \csname\si@mathssf\endcsname
+ \expandafter\let\expandafter\si@fam@text
+ \csname\si@textsf\endcsname
+ \else
+ \ifnum\the\fam=\si@fam@tt
+ \si@log@debug{Font detection: tt}%
+ \expandafter\let\expandafter\si@fam@maths
+ \csname\si@mathstt\endcsname
+ \expandafter\let\expandafter\si@fam@text
+ \csname\si@texttt\endcsname
+ \else
+ \si@log@debug{Font detection: rm}%
+ \expandafter\let\expandafter\si@fam@maths
+ \csname\si@mathsdefault\endcsname
+ \expandafter\let\expandafter\si@fam@text
+ \csname\si@textdefault\endcsname
+ \fi
+ \fi
+% \end{macrocode}
+% Inline maths is now handled.
+% \begin{macrocode}
+ \else
+ \si@log@debug{Font detection: inline maths}%
+ \ifx\f@family\si@tempa
+ \si@log@debug{Font detection: sf}%
+ \expandafter\let\expandafter\si@fam@maths
+ \csname\si@mathssf\endcsname
+ \expandafter\let\expandafter\si@fam@text
+ \csname\si@textsf\endcsname
+ \else
+ \ifx\f@family\si@tempb
+ \si@log@debug{Font detection: tt}%
+ \expandafter\let\expandafter\si@fam@maths
+ \csname\si@mathstt\endcsname
+ \expandafter\let\expandafter\si@fam@text
+ \csname\si@texttt\endcsname
+ \else
+ \si@log@debug{Font detection: rm}%
+ \expandafter\let\expandafter\si@fam@maths
+ \csname\si@mathsdefault\endcsname
+ \expandafter\let\expandafter\si@fam@text
+ \csname\si@textdefault\endcsname
+ \fi
+ \fi
+ \fi
+% \end{macrocode}
+% Not in maths mode, so the text mode checks are carried out.
+% \begin{macrocode}
+ \else
+ \si@log@debug{Font detection: text}%
+ \ifx\f@family\si@tempa
+ \si@log@debug{Font detection: sf}%
+ \expandafter\let\expandafter\si@fam@maths
+ \csname\si@mathssf\endcsname
+ \expandafter\let\expandafter\si@fam@text
+ \csname\si@textsf\endcsname
+ \else
+ \ifx\f@family\si@tempb
+ \si@log@debug{Font detection: tt}%
+ \expandafter\let\expandafter\si@fam@maths
+ \csname\si@mathstt\endcsname
+ \expandafter\let\expandafter\si@fam@text
+ \csname\si@texttt\endcsname
+ \else
+ \si@log@debug{Font detection: rm}%
+ \expandafter\let\expandafter\si@fam@maths
+ \csname\si@mathsdefault\endcsname
+ \expandafter\let\expandafter\si@fam@text
+ \csname\si@textdefault\endcsname
+ \fi
+ \fi
+ \fi
+% \end{macrocode}
+% If the local font is not to be matched, setting the fonts is
+% rather less complex.
+% \begin{macrocode}
+ \else
+ \si@log@debug{Font detection: inactive}%
+ \expandafter\let\expandafter\si@fam@maths
+ \csname\si@mathsdefault\endcsname
+ \expandafter\let\expandafter\si@fam@text
+ \csname\si@textdefault\endcsname
+ \fi
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@fam@bold}
+%\begin{macro}{\si@fam@setbold}
+% With the font family set, the next check is for bold text. This
+% again needs to examine the current mode. Things are a bit more
+% complex than in \sistyle as it is possible to be typesetting in
+% either text or maths mode. The bold commands are set up with
+% \cs{def}, as nested calls can occur.
+% \begin{macrocode}
+ \def\si@fam@bold{\unboldmath\mdseries}%
+ \def\si@fam@setbold{\boldmath\bfseries}%
+ \ifsi@obeybold
+ \si@log@debug{Weight detection: checking weight}%
+ \ifmmode
+% \end{macrocode}
+%\end{macro}
+% Display maths.
+% \begin{macrocode}
+ \ifdim\displaywidth>0pt\relax
+ \si@fam@ifbmaths
+ {\let\si@fam@bold\si@fam@setbold
+ \si@log@debug{Weight detection: bold weight}}%
+% \end{macrocode}
+% Inline maths.
+% \begin{macrocode}
+ \else
+ \si@fam@ifbinline
+ {\let\si@fam@bold\si@fam@setbold
+ \si@log@debug{Weight detection: bold weight}}%
+ \fi
+% \end{macrocode}
+% Text mode.
+% \begin{macrocode}
+ \else
+ \si@fam@ifbtext%
+ {\let\si@fam@bold\si@fam@setbold
+ \si@log@debug{Weight detection: bold weight}}%
+ \fi
+ \fi
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@fam@italic}
+% The value of \opt{obeyitalic} is now tested; as this does nothing
+% in maths mode, a reminder is added to the log.
+% \begin{macrocode}
+ \let\si@fam@italic\upshape
+ \ifsi@obeyitalic
+ \si@log@debug{Italic detection: checking italic}%
+ \si@fam@ifitext
+ {\let\si@fam@italic\relax
+ \si@log@debug{Italic detection: italic}}%
+ \ifsi@textmode\else
+ \si@log@inf{maths mode - obeyitalic inactive}%
+ \fi
+ \fi}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%
+%\subsection{Formatting numbers}
+%\begin{macro}{\num}
+% The system used here is modelled on that in \numprint; the
+% input is broken down into single tokens, each one is examined and
+% the result is re-assembled into an output number. However, various
+% changes have been made to the system used, and so the macros here
+% are not simply renamed copies of those in \numprint. The user
+% macro \cs{num} sets any local keys, then calls the number
+% formatting macro on the processed number.\\
+%\cs{num}\oarg{options}\marg{num}
+% \begin{macrocode}
+\DeclareRobustCommand*{\num}[2][]{%
+ \begingroup%
+ \sisetup{#1}%
+ \si@fam@mode%
+ \si@log@debug{Processing \string\num\space input `#2'}%
+ \expandafter\si@out@num\expandafter{\si@num{#2}}%
+ \endgroup}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@num}
+% This is the main processing macro. Unlike the related macro in
+% \numprint, the output of this macro is not subjected to any font
+% changes. That is left to one of the \cs{si@out@\ldots} macros. No
+% grouping is applied here; any call to \cs{si@num} (or any of the
+% sub-macros) must be within a group as the definitions used rely on
+% this. Grouping is not applied here so that other macros can get
+% the various separated parts of the input.\\
+%\cs{si@num}\marg{num}
+% \begin{macrocode}
+\newcommand*{\si@num}[1]{%
+% \end{macrocode}
+%\begin{macro}{\si@tempa}
+% The argument of the macro is fully expanded before any processing.
+% By using \cs{scantokens}, any odd problems from packages with
+% active characters can be avoided. A bit of trickery is needed to
+% avoid getting an extraneous space introduced here by
+% \cs{scantokens}, hence the use of \cs{@empty}.
+% \begin{macrocode}
+ \begingroup
+ \makeatletter%
+ \@makeother{\,}%
+ \@makeother{\.}%
+ \@makeother{\+}%
+ \@makeother{\-}%
+ \def~{}%
+ \def\,{}%
+ \catcode`\~=\active\relax
+ \catcode`\^=\active\relax
+ \scantokens{\si@num@xdef\si@tempa{#1}\@empty}%
+ \endgroup
+% \end{macrocode}
+% Processing only takes place if there is actually something in the
+% argument. This is tested once ``hard'' spaces have been stripped
+% out. If there is no argument, nothing happens; everything else in
+% the \cs{si@num} macro occurs only if the argument is filled.
+% \begin{macrocode}
+ \si@ifnotmtarg{\si@tempa}{%
+% \end{macrocode}
+% The input is now validated. Further processing takes place a little
+% later.
+% \begin{macrocode}
+ \expandafter\si@num@valid\si@tempa\@empty\@empty%
+% \end{macrocode}
+%\end{macro}
+% If the input is valid, the input is passed to the number formatter.
+% \begin{macrocode}
+ \ifsi@switch
+ \expandafter\si@num@format\expandafter\si@tempa%
+ \else
+% \end{macrocode}
+% The parser must have bailed-out, and so no further processing of
+% the input is done. Instead, whatever was passed to the macro is
+% returned as supplied.
+% \begin{macrocode}
+ {#1}%
+ \fi}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@num@xdef}
+% When carrying out the \cs{edef} used to fully-expand a number,
+% \cs{,} and |~| are deactivated, so that macros do not end up in the
+% number. By using a separate macro, \cs{scantokens} is easier.
+% \cs{protected@xdef} is not used here, as the argument given should
+% only contain single (processable) characters or macros that expand
+% to the same, not other macros or characters.\\
+%\cs{si@num@xdef}\meta{macro}\meta{num}\cs{@empty}
+% \begin{macrocode}
+\def\si@num@xdef#1#2\@empty{\xdef#1{#2}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@num@valid}
+% Assuming that there is a non-space argument to \cs{si@num}, every
+% character is checked to ensure it is valid in the context, so that
+% further processing can occur without sanity checks. If the
+% character is valid, recursion occurs.\\
+%\cs{si@num@valid}\meta{char}\meta{chars}\cs{@empty}
+% \begin{macrocode}
+\def\si@num@valid#1#2\@empty{%
+ \si@num@ifchr{#1}{\si@numvalid}{%
+ \ifx\@empty#2\@empty\else
+ \si@num@valid#2\@empty\@empty\@empty%
+ \fi
+ \si@switchtrue}%
+% \end{macrocode}
+% If an invalid character has been picked up, the whole parsing
+% system has to bail out.
+% \begin{macrocode}
+ {\si@log@err{Invalid character `#1' in numerical input}%
+ {Only characters from the list `\si@numvalid'\MessageBreak
+ should be present in the argument of the \string\num
+ macro\MessageBreak (or derivative such as an `s' column)}%
+ \si@switchfalse}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@num@ifchr}
+%\begin{macro}{\si@tempa}
+%\begin{macro}{\si@tempb}
+% A test is needed to check one string only contains characters from
+% a second. The main macro sets up for the recursion system below.\\
+%\cs{si@num@ifchr}\marg{test-chars}\marg{valid-chars}
+% \begin{macrocode}
+\newcommand*{\si@num@ifchr}[2]{%
+ \begingroup
+ \si@switchfalse
+ \def\si@tempa{#1}%
+ \edef\si@tempb{#2}%
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+% Now the test can occur for the initial comparison string.
+% \begin{macrocode}
+ \expandafter\si@num@chrstr\si@tempb\@empty\@empty%
+% \end{macrocode}
+% By ending the group inside the \cs{if}, \cs{global} is avoided, and
+% the switch can be used for other jobs.
+% \begin{macrocode}
+ \ifsi@switch%
+ \endgroup\expandafter\@firstoftwo%
+ \else
+ \endgroup\expandafter\@secondoftwo%
+ \fi}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@num@chrstr}
+% The second part of the comparison macro does the actual work. This
+% takes one character of the string of valid input at a time, and
+% compares it to the single character in \cs{si@tempa}.\\
+%\cs{si@num@chrstr}\meta{char}\meta{chars}\cs{@empty}
+% \begin{macrocode}
+\def\si@num@chrstr#1#2\@empty{%
+% \end{macrocode}
+%\begin{macro}{\si@tempb}
+%\begin{macro}{\si@tempc}
+% \cs{si@tempc} is used to hold the single character to check against
+% \cs{si@tempa}, while \cs{si@tempb} stores the remaining characters
+% to be compared.
+% \begin{macrocode}
+ \def\si@tempc{#1}%
+ \edef\si@tempb{#2}%
+ \ifx\si@tempa\si@tempc
+ \si@switchtrue
+ \else
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+% If \cs{si@tempb} is \cs{@empty}, then the recursion has
+% bottomed-out, and all of the comparisons are done. If not, go
+% round again.
+% \begin{macrocode}
+ \ifx\@empty\si@tempb\@empty\else
+ \si@num@chrstr#2\@empty%
+ \fi
+ \fi}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@num@exp}
+%\begin{macro}{\si@num@mant}
+%\begin{macro}{\si@num@expout}
+%\begin{macro}{\si@num@mantout}
+%\begin{macro}{\si@num@out}
+% Various storage macros are needed.
+% \begin{macrocode}
+\newcommand*{\si@num@exp}{}
+\newcommand*{\si@num@mant}{}
+\newcommand*{\si@num@expout}{}
+\newcommand*{\si@num@mantout}{}
+\newcommand*{\si@num@out}{}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@num@format}
+%\begin{macro}{\si@num@arg}
+% The number processor starts by saving |#1| (odd things happen
+% otherwise), and locally clearing the stacks.\\
+%\cs{si@num@format}\marg{num}
+% \begin{macrocode}
+\newcommand*{\si@num@format}[1]{%
+ \protected@edef\si@num@arg{#1}%
+ \def\si@num@exp{}%
+ \def\si@num@mant{}%
+ \def\si@num@expout{}%
+ \def\si@num@mantout{}%
+ \si@log@debug{Formatting number `\si@num@arg'}%
+% \end{macrocode}
+%\end{macro}
+% \begin{macrocode}
+ \si@switchfalse
+% \end{macrocode}
+% The input is split into an mantissa and an exponent.
+% \begin{macrocode}
+ \expandafter\si@num@mantexp\si@num@arg\@empty\@empty%
+% \end{macrocode}
+% The mantissa and exponent are now processed separately. Firstly, a
+% sign is tested for. If there is one, it is added to
+% \cs{si@num@out}, while the rest of the number is returned ``as is''
+% in \cs{si@num@\ldots}.
+% \begin{macrocode}
+ \si@num@sign{mant}%
+% \end{macrocode}
+%\begin{macro}{\si@num@out}
+% To allow for the case where the mantissa is only a sign, but the
+% exponent contains a number, the output is initially defined to
+% whatever is in \cs{si@num@mantout}. This will change if there is a
+% number in \cs{si@num@mant}.
+% \begin{macrocode}
+ \protected@edef\si@num@out{\si@num@mantout}%
+ \ifx\@empty\si@num@mant\@empty\else
+ \si@num@digits{mant}%
+ \protected@edef\si@num@out{\si@num@mantout}%
+ \fi
+ \si@num@sign{exp}%
+ \ifx\@empty\si@num@exp\@empty\else
+ \si@num@digits{exp}%
+% \end{macrocode}
+% Allowance is made for the possibility of negative exponential-only
+% numbers. Precautions are taken for the multiply sign (which is
+% always in maths mode), and superscripts. \cs{textsuperscript} is
+% used here, as this will work in text or maths mode in the output
+% routine.
+% \begin{macrocode}
+ \ifx\@empty\si@num@mant\@empty\else
+ \protected@edef\si@num@out%
+ {\si@num@out\noexpand\ensuremath{{}\noexpand\si@expproduct{}}}%
+ \fi
+ \protected@edef\si@num@out%
+ {\si@num@out\si@exppower%
+ \noexpand\textsuperscript{\si@num@expout}}%
+ \fi
+% \end{macrocode}
+% If there is nothing in either number macro, then something is
+% wrong.
+% \begin{macrocode}
+ \ifx\@empty\si@num@mant\@empty
+ \ifx\@empty\si@num@exp\@empty
+ \si@log@err{Invalid number format `\si@num@arg'}%
+ {Something is wrong with the number format; does it
+ contain \MessageBreak any numbers (from the list %
+ `\si@numlist')?}%
+ \renewcommand*\si@num@out{}%
+ \fi
+ \fi%
+% \end{macrocode}
+%\end{macro}
+% With everything done, the result is output.
+% \begin{macrocode}
+ \si@num@out}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@num@mantexp}
+% Splitting the mantissa and exponent first checks for characters to
+% gobble, which are simply thrown away. For any other input, there
+% are two possibilities. If the character is an exponent marker,
+% then the package switches from collecting the mantissa to
+% collecting the exponent (after a sanity check). All other
+% characters are added to either the mantissa or the exponent, as
+% appropriate.\\
+%\cs{si@num@mantexp}\meta{char}\meta{chars}\cs{@empty}
+% \begin{macrocode}
+\def\si@num@mantexp#1#2\@empty{%
+ \si@num@ifchr{#1}{\si@numgobble}{}{%
+ \si@num@ifchr{#1}{\si@numexp}%
+ {\ifsi@switch
+ \si@log@err{Duplicate exponent marker found}%
+ {Only a single exponent character (from the list
+ `\si@numexp')\MessageBreak may occur in a
+ numerical argument}%
+ \fi
+ \si@switchtrue
+ \si@log@debug{Exponent marker `#1' found in `\si@num@arg'}}%
+% \end{macrocode}
+% When building up the mantissa and exponent, everything must be
+% expandable, so \cs{edef} can be used rather than
+% \cs{g@addto@macro}.
+% \begin{macrocode}
+ {\ifsi@switch
+ \si@log@debug{Adding `#1' to exponent for `\si@num@arg'}%
+ \protected@edef\si@num@exp{\si@num@exp#1}%
+ \else
+ \si@log@debug{Adding `#1' to mantissa for `\si@num@arg'}%
+ \protected@edef\si@num@mant{\si@num@mant#1}%
+ \fi}}%
+% \end{macrocode}
+% If the recursion has not bottomed out, another loop occurs.
+% \begin{macrocode}
+ \ifx\@empty#2\@empty\else
+ \si@num@mantexp#2\@empty\@empty\@empty%
+ \fi}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@num@sign}
+% The digit processor does several things to convert the run of
+% digits, plus potentially a sign and a decimal point into the
+% correct format for output.\\
+%\cs{si@num@sign}\marg{mant/exp}
+% \begin{macrocode}
+\newcommand*{\si@num@sign}[1]{%
+ \expandafter\ifx\expandafter\@empty\csname si@num@#1\endcsname%
+ \@empty\else
+% \end{macrocode}
+% If the whole argument is not empty, then the sign-testing macro is
+% run. This will return the sign in \cs{si@tempa} and the digits in
+% \cs{si@tempb}.
+% \begin{macrocode}
+ \expandafter\expandafter\expandafter\si@num@gensign%
+ \csname si@num@#1\endcsname\@empty\@empty\@empty%
+% \end{macrocode}
+%\begin{macro}{\si@tempa}
+%\begin{macro}{\si@tempc}
+% If a sign has to be added to unsigned numbers, this is
+% done here.
+% \begin{macrocode}
+ \edef\si@tempc{#1}%
+ \ifx\@empty\si@tempa\@empty
+ \def\si@tempa{mant}%
+ \ifx\si@tempa\si@tempc
+ \ifsi@num@signmant
+ \si@log@debug{Adding sign \si@sign\space to mantissa for
+ `\si@num@arg'}%
+ \protected@edef\si@tempa{\si@sign}%
+ \else
+ \def\si@tempa{}%
+ \fi
+ \else
+ \ifsi@num@signexp
+ \si@log@debug{Adding sign \si@sign\space to exponent for
+ `\si@num@arg'}%
+ \protected@edef\si@tempa{\si@sign}%
+ \else
+ \def\si@tempa{}%
+ \fi
+ \fi
+ \fi
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+% If there is no sign, then the original macro contains a pure
+% number, and nothing happens (an empty number has already been
+% tested for).
+% \begin{macrocode}
+ \ifx\@empty\si@tempa\@empty
+ \def\si@tempa{mant}%
+ \ifx\si@tempa\si@tempc
+ \si@log@debug{Unsigned mantissa for `\si@num@arg'}%
+ \else
+ \si@log@debug{Unsigned exponent for `\si@num@arg'}%
+ \fi
+ \else
+% \end{macrocode}
+% There is a sign, so it is added to the output stack.
+% \begin{macrocode}
+ \expandafter\protected@edef\csname si@num@#1out\endcsname%
+ {\noexpand\ensuremath{\si@tempa}}%
+% \end{macrocode}
+% A sign but no number can only be correct if the input is something
+% like |-e10| to give \num{-e10}.
+% \begin{macrocode}
+ \ifx\@empty\si@tempb\@empty
+ \expandafter\def\csname si@num@#1\endcsname{}%
+% \end{macrocode}
+%\begin{macro}{\si@tempa}
+% \cs{si@tempa} is no longer needed, so can be reused.
+% \begin{macrocode}
+ \def\si@tempa{mant}%
+% \end{macrocode}
+%\end{macro}
+% Checks to see if this is a mantissa, and that there is an exponent.
+% \begin{macrocode}
+ \ifx\si@tempa\si@tempc
+ \ifx\@empty\si@num@exp\@empty
+ \si@log@warn{Sign but no number for `\si@num@arg'}%
+ \fi
+ \else
+ \si@log@warn{Sign but no number for `\si@num@arg'}%
+ \fi
+ \else
+ \expandafter\protected@edef\csname si@num@#1\endcsname%
+ {\si@tempb}%
+ \fi
+ \fi
+ \fi}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@num@gensign}
+%\begin{macro}{\si@tempa}
+%\begin{macro}{\si@tempb}
+% The first one or two characters of the mantissa or exponent may
+% contain a sign. To test for this, the first two characters of the
+% number are split off, and examined. Two characters are used so
+% that \cs{pm} and \cs{mp} can be represented by |+-| and |-+|,
+% respectively. To allow the user to alter the valid signs, but
+% retain this conversion, the generic character test is used before
+% checking specific matches.\\
+%\cs{si@num@gensign}\meta{char}\meta{char}\meta{chars}\cs{@empty}
+% \begin{macrocode}
+\def\si@num@gensign#1#2#3\@empty{%
+ \si@num@ifchr{#1}{\si@numsign}{%
+ \si@num@ifchr{#2}{\si@numsign}{%
+ \if +#1
+ \if -#2
+ \si@log@debug{Found sign combination +- for `\si@num@arg'}%
+ \def\si@tempa{\pm}%
+ \else
+ \si@log@warn{Unknown sign combination `#1#2'}%
+ \def\si@tempa{#1#2}%
+ \fi
+ \else
+ \if -#1
+ \if +#2
+ \si@log@debug{Found sign combination -+ for `\si@num@arg'}%
+ \def\si@tempa{\mp}%
+ \else
+ \si@log@warn{Unknown sign combination `#1#2'}%
+ \def\si@tempa{#1#2}%
+ \fi
+ \else
+ \si@log@warn{Unknown sign combination `#1#2'}%
+ \def\si@tempa{#1#2}%
+ \fi
+ \fi
+ \edef\si@tempb{#3}}%
+% \end{macrocode}
+% Only one valid sign character.
+% \begin{macrocode}
+ {\si@log@debug{Found single sign character `#1' for
+ `\si@num@arg'}%
+ \def\si@tempa{#1}%
+ \edef\si@tempb{#2#3}}}%
+% \end{macrocode}
+% No valid sign, so \cs{@empty} is returned for the sign .
+% \begin{macrocode}
+ {\si@log@debug{No sign found for `\si@num@arg'}%
+ \def\si@tempa{}%
+ \edef\si@tempb{#1#2#3}}}%
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@num@digits}
+%\begin{macro}{\si@tempb}
+%\begin{macro}{\si@tempc}
+% The core digit processor divides the number into the parts before
+% and after the decimal point marker.\\
+%\cs{si@num@digits}\marg{mant/exp}
+% \begin{macrocode}
+\newcommand*{\si@num@digits}[1]{%
+ \def\si@tempa{}%
+ \def\si@tempb{}%
+% \end{macrocode}
+% The package switch is used to indicate finding a decimal marker.
+% \begin{macrocode}
+ \si@switchfalse
+ \expandafter\expandafter\expandafter\si@num@split%
+ \csname si@num@#1\endcsname\@empty\@empty%
+% \end{macrocode}
+% The pre-decimal part of the number is now in \cs{si@tempa}, and the
+% post-decimal part in \cs{si@tempb}. A quick check is made on the
+% pre-decimal part of the number.
+% \begin{macrocode}
+ \ifx\@empty\si@tempa\@empty
+ \ifsi@num@padlead
+ \si@log@debug{Adding leading zero for `\si@num@arg'}%
+ \def\si@tempa{0}%
+ \fi
+ \fi
+% \end{macrocode}
+% A second test is needed, in case a zero should be added when a
+% decimal marker is followed by nothing at all. Here, the fact that
+% a decimal marker was found is needed; the test is done now so
+% \cs{ifsi@switch} can be reused.
+% \begin{macrocode}
+ \ifx\@empty\si@tempb\@empty
+ \ifsi@num@padtrail
+ \ifsi@switch
+ \si@log@debug{Adding trailing zero for `\si@num@arg'}%
+ \def\si@tempb{0}%
+ \fi
+ \fi
+ \fi
+% \end{macrocode}
+% The contents of \cs{si@tempa} and \cs{si@tempb} are now completed.
+% Some error checking is done, in case an odd argument has been
+% given.
+% \begin{macrocode}
+ \ifx\@empty\si@tempa\@empty
+ \ifx\@empty\si@tempb\@empty\else
+ \si@num@sepdigits{#1}%
+ \fi
+ \else
+ \si@num@sepdigits{#1}%
+ \fi}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@num@split}
+% The \cs{si@num@split} macro compares each character in the input
+% against the list of characters valid at this stage: numbers,
+% decimal markers and ``extra'' characters. Before finding a decimal
+% marker, numbers and extra characters are added to \cs{si@tempa};
+% after a decimal is found, characters are added to \cs{si@tempb}.\\
+%\cs{si@num@split}\meta{char}\meta{chars}\cs{@empty}
+% \begin{macrocode}
+\def\si@num@split#1#2\@empty{%
+ \si@num@ifchr{#1}{\si@numdecimal}{%
+ \ifsi@switch
+ \si@log@err{Duplicate decimal marker in `\si@num@arg'}
+ {Only a single decimal marker (from the list
+ `\si@numdecimal')\MessageBreak may occur in a
+ numerical argument}%
+ \else
+ \si@log@debug{Found decimal marker `#1' in `\si@num@arg'}%
+ \si@switchtrue
+ \fi}{%
+% \end{macrocode}
+% The earlier code only checks for a sign at the start of the text. A
+% check is therefore needed for a sign after the first two
+% characters; if one is found, it is ignored.
+% \begin{macrocode}
+ \si@num@ifchr{#1}{\si@numsign}{%
+ \si@log@err{Misplaced sign in `\si@num@arg'}
+ {Sign characters `\si@numsign' can only occur\MessageBreak
+ at the start of a number}}{%
+% \end{macrocode}
+% The current character is added to the appropriate stack.
+% \begin{macrocode}
+ \ifsi@switch
+ \si@log@debug{Adding `#1' to decimal part for `\si@num@arg'}%
+ \protected@edef\si@tempb{\si@tempb#1}%
+ \else
+ \si@log@debug{Adding `#1' to integer part for `\si@num@arg'}%
+ \protected@edef\si@tempa{\si@tempa#1}%
+ \fi}}%
+% \end{macrocode}
+% Unless the recursion has bottomed, loop round again.
+% \begin{macrocode}
+ \ifx\@empty#2\@empty\else
+ \si@num@split#2\@empty\@empty%
+ \fi}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@num@decimalhook}
+% A hook is needed to attach things inside the group to happen
+% afterwards, if the number is a decimal.
+% \begin{macrocode}
+\newcommand*{\si@num@decimalhook}{}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@num@sepdigits}
+% The \cs{si@num@sepdigits} macro is only called if at least one of
+% the mantissa and exponent contain something to output. The integer
+% and decimal parts of the number are processed separately. First, a
+% check is made to see if each part contains ``extra'' characters; if
+% it does, no digit-separating is even attempted.\\
+%\cs{si@num@sepdigits}\marg{mant/exp}
+% \begin{macrocode}
+\newcommand*{\si@num@sepdigits}[1]{%
+ \si@num@ifextra{\si@tempa}{}
+% \end{macrocode}
+%\begin{macro}{\si@tempc}
+% If the input is a pure number, then separation is attempted.
+% \begin{macrocode}
+ {\expandafter\si@num@int\expandafter{\si@tempa}}%
+ \def\si@tempc{}%
+ \ifx\@empty\si@tempb\@empty\else
+ \protected@edef\si@tempc{\noexpand\ensuremath{{\noexpand%
+ \si@decimalsign}}}%
+ \si@num@decimalhook%
+ \si@num@ifextra{\si@tempb}{}%
+ {\expandafter\si@num@dec\expandafter{\si@tempb}}%
+ \fi
+% \end{macrocode}
+%\end{macro}
+% The construction is finalised by re-combining the number.
+% \begin{macrocode}
+ \expandafter\protected@edef\csname si@num@#1out\endcsname%
+ {\csname si@num@#1out\endcsname\si@tempa\si@tempc\si@tempb}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@num@ifextra}
+%\begin{macro}{\si@num@extra}
+% A relatively simple test for ``extra'' characters. Once again, a
+% bit of group trickery is used.\\
+%\cs{si@num@ifextra}\marg{integer}\\
+%\cs{si@num@extra}\meta{char}\meta{chars}\cs{@empty}
+% \begin{macrocode}
+\newcommand*{\si@num@ifextra}[1]{%
+ \begingroup
+ \si@switchfalse
+ \expandafter\si@num@extra#1\@empty\@empty%
+ \ifsi@switch
+ \si@log@debug{Found `extra' characters in `#1'}%
+ \endgroup\expandafter\@firstoftwo%
+ \else
+ \endgroup\expandafter\@secondoftwo%
+ \fi}
+\def\si@num@extra#1#2\@empty{%
+ \ifx\@empty#1\@empty\else
+ \si@num@ifchr{#1}{\si@numextra}{\si@switchtrue}{}%
+ \ifx\@empty#2\@empty\else
+ \si@num@extra#2\@empty\@empty%
+ \fi
+ \fi}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@num@int}
+%\begin{macro}{\si@tempa}
+% The formatting code for separating thousands is taken more-or-less
+% directly from \sistyle. A few changes are made to fit the various
+% conventions here. Following on from the code above, \cs{si@tempa}
+% is used to store the integer part of the number, and \cs{si@tempb}
+% is used for the decimal part.\\
+%\cs{si@num@int}\marg{integer-part}
+% \begin{macrocode}
+\newcommand*{\si@num@int}[1]{%
+ \def\si@tempa{}%
+ \ifsi@sepfour
+ \si@num@intfmt{}#1\@empty\@empty\@empty%
+ \else
+ \si@num@iffive{#1}
+ {\si@num@intfmt{}#1\@empty\@empty\@empty}
+ {\def\si@tempa{#1}}%
+ \fi}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@num@iffive}
+%\begin{macro}{\si@num@five}
+% A test is needed for the presence of more than four characters.\\
+%\cs{si@num@iffive}\marg{num}\\
+%\cs{si@num@five}\meta{char}\meta{char}\meta{char}\meta{char}^^A
+%\meta{chars}\cs{end}\\
+% \begin{macrocode}
+\newcommand*{\si@num@iffive}[1]{%
+ \si@num@five#1\@empty\@empty\@empty\@empty\@empty\end}
+\def\si@num@five#1#2#3#4#5\end{%
+ \ifx\@empty#5\@empty
+ \expandafter\@secondoftwo%
+ \else
+ \expandafter\@firstoftwo%
+ \fi}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@num@intfmt}
+%\begin{macro}{\si@num@fiint}
+% The business end of the integer formatter.
+%\cs{si@num@intfmt}\marg{char}\marg{char}\marg{char}\marg{char}\\
+%\cs{si@num@fiint}\meta{chars}\cs{fi}\cs{fi}\cs{fi}
+% \begin{macrocode}
+\newcommand*{\si@num@intfmt}[4]{%
+ \ifx\@empty#2\@empty
+ \si@num@intsep#1\relax
+ \else
+ \ifx\@empty#3\@empty
+ \si@num@intsep\@empty\@empty#1#2\relax
+ \else
+ \ifx\@empty#4\@empty
+ \si@num@intsep\@empty#1#2#3\relax
+ \else
+ \si@num@fiint{#1#2#3#4}%
+ \fi
+ \fi
+ \fi}
+\def\si@num@fiint#1\fi\fi\fi{\fi\fi\fi\si@num@intfmt{#1}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@num@intsep}
+%\begin{macro}{\si@tempa}
+% For adding separation to integers, an extra function is needed.\\
+%\cs{si@num@intsep}\marg{char}\marg{char}\marg{char}\marg{char}
+% \begin{macrocode}
+\newcommand*{\si@num@intsep}[4]{%
+ \protected@edef\si@tempa{\si@tempa#1#2#3}%
+ \if\relax#4\relax
+ \else
+ \protected@edef\si@tempa{\si@tempa\noexpand\ensuremath{\noexpand%
+ \si@digitsep}}%
+ \expandafter\si@num@intsep\expandafter#4%
+ \fi}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@num@dec}
+%\begin{macro}{\si@num@decfmt}
+%\begin{macro}{\si@tempb}
+% Formatting a decimal uses a similar mechanism, but with a few
+% alterations needed.\\
+%\cs{si@num@dec}\marg{decimal-part}\\
+%\cs{si@num@decfmt}\marg{char}\marg{char}\marg{char}\marg{char}\\
+% \begin{macrocode}
+\newcommand*{\si@num@dec}[1]{%
+ \def\si@tempb{}%
+ \ifsi@sepfour
+ \si@num@decfmt#1\@empty\@empty\@empty\@empty%
+ \else
+ \si@num@iffive{#1}
+ {\si@num@decfmt#1\@empty\@empty\@empty\@empty}
+ {\protected@edef\si@tempb{\si@tempb#1}}%
+ \fi
+}
+\newcommand*{\si@num@decfmt}[4]{%
+ \protected@edef\si@tempb{\si@tempb#1#2#3}%
+ \ifx\@empty#4\@empty%
+ \else
+ \protected@edef\si@tempb{\si@tempb\noexpand\ensuremath{\noexpand%
+ \si@digitsep}}%
+ \expandafter\si@num@decfmt\expandafter#4%
+ \fi}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%
+%\subsection{Formatting angles}
+%\begin{macro}{\ang}
+% The approach used here is similar to that in \sistyle, but has been
+% modified in a few ways.\\
+%\cs{ang}\oarg{options}\marg{decimal-angle}\\
+%\cs{ang}\oarg{options}|{|\meta{deg};\meta{min};\meta{sec}|}|
+% \begin{macrocode}
+\DeclareRobustCommand*{\ang}[2][]{%
+ \begingroup
+ \sisetup{#1}%
+ \si@fam@mode%
+ \si@log@debug{Processing \string\ang\space input `#2'}%
+ \@makeother{\;}%
+ \makeatletter%
+ \scantokens{\si@ang@parse#2;;;\@nil}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@ang@parse}
+% With the correct catcodes in place, processing can take place strip
+% out the semi-colons.\\
+%\cs{si@ang@parse}\meta{num}|;|\meta{num}|;|\meta{num}|;|^^A
+%\meta{chars}\cs{@nil}
+% \begin{macrocode}
+\def\si@ang@parse#1;#2;#3;#4\@nil{\si@ang@set{#1}{#2}{#3}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@ang@killdegree}
+%\begin{macro}{\si@ang@killminute}
+%\begin{macro}{\si@ang@killsecond}
+%\begin{macro}{\si@ang@astrosign}
+%\begin{macro}{\si@ang@decimalsign}
+% A mechanism is needed to handle moving the angle unit sings for the
+% \opt{astroang} option. This requires two steps, producing the sign
+% over the decimal sign and preventing duplicate symbols appearing.\\
+%\cs{si@ang@astrosign}\marg{degree/minute/second}
+% \begin{macrocode}
+\newcommand*{\si@ang@killdegree}{\let\si@sym@degree\relax}
+\newcommand*{\si@ang@killminute}{\let\si@sym@minute\relax}
+\newcommand*{\si@ang@killsecond}{\let\si@sym@second\relax}
+\newcommand*{\si@ang@astrosign}[1]{%
+ \renewcommand*{\si@decimalsign}{%
+ \rlap{\si@ang@decimalsign}%
+ \expandafter\csname si@sym@#1\endcsname}%
+ \def\si@num@decimalhook{\expandafter\aftergroup%
+ \csname si@ang@kill#1\endcsname}}%
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@ang@set}
+% The \cs{si@ang@set} macro does the work of assigning the degrees,
+% minutes and seconds, and actually typesetting the result.\\
+%\cs{si@ang@set}\marg{num}\marg{num}\marg{num}
+% \begin{macrocode}
+\newcommand*{\si@ang@set}[3]{%
+% \end{macrocode}
+%\begin{macro}{\si@ang@degs}
+%\begin{macro}{\si@ang@mins}
+%\begin{macro}{\si@ang@secs}
+% First, the three macros that will contain the measures must exist.
+% \begin{macrocode}
+ \ifsi@ang@padlarge
+ \newcommand*{\si@ang@degs}{0\si@sym@degree}%
+ \newcommand*{\si@ang@mins}{0\si@sym@minute}%
+ \newcommand*{\si@ang@secs}{0\si@sym@second}%
+ \else
+ \newcommand*{\si@ang@degs}{}%
+ \newcommand*{\si@ang@mins}{}%
+ \newcommand*{\si@ang@secs}{}%
+ \fi
+ \protected@edef\si@ang@decimalsign{\si@decimalsign}%
+% \end{macrocode}
+%\begin{macro}{\si@ang@movesign}
+% Either the signs need to be moved, or this needs to be killed off.
+% \begin{macrocode}
+ \ifsi@astroang
+ \let\si@ang@movesign\si@ang@astrosign
+ \else
+ \let\si@ang@movesign\@gobble
+ \fi
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@ang@secnum}
+%\begin{macro}{\si@ang@minnum}
+% The arguments are now examined in reverse order. If they are
+% empty, then nothing is done. Otherwise, the larger measures are
+% zero-filled, if this has been requested. Some steps are needed
+% to allow for addition of signs to numbers.
+% \begin{macrocode}
+ \newcommand*{\si@ang@secnum}{\si@ang@num{second}}%
+ \newcommand*{\si@ang@minnum}{\si@ang@num{minute}}%
+ \si@ifnotmtarg{#3}
+ {\si@log@debug{Found seconds `#3'}%
+ \renewcommand*{\si@ang@secs}
+ {\si@ang@secnum{#3}\si@sym@second}%
+ \renewcommand*{\si@ang@mins}
+ {\si@ang@pad{0\si@sym@minute}}%
+ \renewcommand*{\si@ang@degs}
+ {\si@ang@pad{0\si@sym@degree}}}%
+ \si@ifnotmtarg{#2}
+ {\si@log@debug{Found minutes `#2'}%
+ \renewcommand*{\si@ang@secnum}{\si@ang@signlessnum{second}}%
+ \renewcommand*{\si@ang@mins}
+ {\si@ang@minnum{#2}\si@sym@minute}%
+ \renewcommand*{\si@ang@degs}
+ {\si@ang@pad{0\si@sym@degree}}}%
+ \si@ifnotmtarg{#1}
+ {\si@log@debug{Found degrees `#1'}%
+ \renewcommand*{\si@ang@secnum}{\si@ang@signlessnum{second}}%
+ \renewcommand*{\si@ang@minnum}{\si@ang@signlessnum{minute}}%
+ \renewcommand*{\si@ang@degs}
+% \end{macrocode}
+% The group here is needed to get the mechanism to move the symbol to
+% work properly.
+% \begin{macrocode}
+ {\si@ang@num{degree}{#1}%
+ \si@sym@degree}}%
+ \si@out@num%
+ {\si@ang@degs\si@anglesep\si@ang@mins\si@anglesep\si@ang@secs}%
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+% The group opened by \cs{ang} is closed.
+% \begin{macrocode}
+ \endgroup}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@ang@pad}
+% Padding is only added if requested; the zero is a literal.\\
+%\cs{si@ang@pad}\marg{num}
+% \begin{macrocode}
+\newcommand*{\si@ang@pad}[1]{%
+ \ifsi@ang@padsmall
+ #1%
+ \else
+ \relax%
+ \fi}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@ang@num}
+%\begin{macro}{\si@ang@signlessnum}
+% Modified versions of \cs{num}, one to typeset angles without a
+% leading sign and the other with.\\
+%\cs{si@ang@num}\marg{degree/minute/second}\marg{num}\\
+%\cs{si@ang@signlessnum}\marg{degree/minute/second}\marg{num}
+% \begin{macrocode}
+\newcommand{\si@ang@num}[2]{%
+ \begingroup%
+ \si@ang@movesign{#1}%
+ \si@num{#2}%
+ \endgroup}
+\newcommand{\si@ang@signlessnum}[2]{%
+ \begingroup%
+ \si@ang@movesign{#1}%
+ \sisetup{addsign=none}%
+ \si@num{#2}%
+ \endgroup}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%
+%\subsection{New column types}
+% The automatic formatting and alignment of numerical data in columns
+% is handled here. The various other packages that work in this area
+% are basically ripped-off here. The first part of the job is to
+% make a new column type. The letters |D|, |N| and |R| are taken by
+% other packages, so |s| (for \currpkg) is chosen. As in \pkg{rccol}
+% and \numprint, initially no definition is given as lots of code needs
+% to be added.
+% \begin{macrocode}
+\newcolumntype{s}{}
+% \end{macrocode}
+%\begin{macro}{\NC@rewrite@s}
+% Following the \numprint approach, the \cs{NC@rewrite@S} macro is now
+% changed to provide a hook for the collection of the tabular
+% material. This means messing with the internal macros of another
+% package, but there is no other way to do this. As \pkg{array} is a
+% standard package from the \pkg{tools} bundle, this should be
+% reasonably safe. After resetting the storage token registers, the
+% internal macro which handles optional arguments is called.
+% \begin{macrocode}
+\renewcommand*{\NC@rewrite@s}{%
+ \@ifnextchar[%]
+ {\si@tab@rewrite}
+ {\si@tab@rewrite[]}
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@tab@rewrite}
+%\begin{macro}{\si@tempa}
+% An optional argument can now be picked up (this does not work using
+% the optional argument to \cs{renewcommand} for \cs{NC@rewrite@S}).
+% Here the begin and end code needed is added to the existing list if
+% \cs{@temptokena}, with the start and end macros unexpanded.
+% Argument |#1| contains any user setup options for this column.\\
+%\cs{si@tab@rewrite}\oarg{options}
+% \begin{macrocode}
+\def\si@tab@rewrite[#1]{%
+ \edef\si@tempa{\the\@temptokena
+ >{\noexpand\si@tab@begin[#1]\noexpand\ignorespaces}c%
+ <{\noexpand\si@tab@end}}%
+ \@temptokena\expandafter{\si@tempa}%
+% \end{macrocode}
+% With the assignment done, the normal action of the \pkg{array}
+% package is continued.
+% \begin{macrocode}
+ \NC@find}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@tab@numtoks}
+%\begin{macro}{\si@tab@pretoks}
+%\begin{macro}{\si@tab@posttoks}
+% Some storage is needed for the data to build up. In common with
+% \pkg{rccol} and \numprint, token registers are used for this (thus leaving
+% problematic input to be handled later).
+% \begin{macrocode}
+\newtoks\si@tab@numtoks
+\newtoks\si@tab@pretoks
+\newtoks\si@tab@posttoks
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@tab@begin}
+% The lead-off macro starts by setting any local values for
+% \cs{sisetup}. Although this is an internal macro, square brackets
+% for the option list are retained to make the option that this
+% argument may be empty.\\
+%\cs{si@tab@begin}\oarg{options}
+% \begin{macrocode}
+\newcommand*{\si@tab@begin}[1][]{%
+ \begingroup
+ \sisetup{#1}%
+ \si@tab@numtoks{}%
+ \si@tab@pretoks{}%
+ \si@tab@posttoks{}%
+ \si@switchfalse
+ \si@log@debug{Processing s column cell contents}%
+ \si@tab@gettok}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@tab@gettok}
+%\begin{macro}{\si@tab@next}
+% The iteration macro for collecting up tokens in the input. This is
+% a pretty much direct copy from \numprint. First |#1| is checked
+% against various special values.\\
+%\cs{si@tab@gettok}\marg{cell-contents}
+% \begin{macrocode}
+\newcommand*{\si@tab@gettok}[1]{%
+% \end{macrocode}
+% The current cell could be the end of a line.
+% \begin{macrocode}
+ \ifx\tabularnewline#1
+ \let\si@tab@next\tabularnewline
+ \else
+% \end{macrocode}
+% If the table is in the usual \cs{begin}\texttt{\ldots}\cs{end}
+% construct, the \cs{end} might appear.
+% \begin{macrocode}
+ \ifx\end#1
+ \let\si@tab@next\end
+ \else
+% \end{macrocode}
+% The check for \cs{si@tab@end} deals with the likely situation that
+% the current cell is not the last of the line; the result will be
+% that the end-of-cell macro will be present.
+% \begin{macrocode}
+ \ifx\si@tab@end#1
+ \let\si@tab@next\si@tab@end
+ \else
+% \end{macrocode}
+% If \cs{begin}\texttt{\ldots}\cs{end} has not been used for the
+% table, then \cs{endtabular} might crop up.
+% \begin{macrocode}
+ \ifx\endtabular#1
+ \let\si@tab@next\endtabular
+ \else
+% \end{macrocode}
+% Apparently, \texttt{tabularx} might have a \cs{csname} at the end
+% of the cell.
+% \begin{macrocode}
+ \ifx\csname#1
+ \let\si@tab@next\csname
+ \else
+% \end{macrocode}
+% \cs{relax} is always a possibility.
+% \begin{macrocode}
+ \ifx\relax#1\relax
+ \let\si@tab@next\relax
+ \else
+% \end{macrocode}
+% If the macro gets here, then the input should be stored, either as
+% part of a number or to be appended to the number. This is checked
+% by using \cs{si@numvalid}; initially this will hold the valid
+% characters defined before, but will be altered to \cs{@empty} if
+% collection of items after a number is in operation. The system is
+% set to recur, and the input is saved to the appropriate token
+% register.
+% \begin{macrocode}
+ \let\si@tab@next\si@tab@gettok
+ \si@num@ifchr{#1}{\si@numvalid}
+ {\si@switchtrue
+ \si@log@debug{Found valid cell contents `#1'}%
+ \si@tab@numtoks=\expandafter{\the\si@tab@numtoks#1}}
+ {\si@log@debug{Found other cell contents \string#1}%
+ \si@tab@othertok{#1}}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+% \end{macrocode}
+% Finally, execute whatever should be the next step.
+% \begin{macrocode}
+ \si@tab@next}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@tab@othertok}
+% Unrecognised input is added to a token register, either before or
+% after the number.\\
+%\cs{si@tab@othertok}\marg{chars}
+% \begin{macrocode}
+\newcommand*{\si@tab@othertok}[1]{%
+ \ifsi@switch
+% \end{macrocode}
+% If working after a number has been found, it is necessary to
+% prevent any more input being added to the number.
+% \begin{macrocode}
+ \si@tab@posttoks=\expandafter{\the\si@tab@posttoks#1}%
+ \else
+ \si@tab@pretoks=\expandafter{\the\si@tab@pretoks#1}%
+ \fi}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@tab@end}
+% At the end of the cell, the actual output has to occur.
+% \begin{macrocode}
+\newcommand{\si@tab@end}{%
+ \hfil%
+ \the\si@tab@pretoks%
+% \end{macrocode}
+% If no number was found, then output is skipped.
+% \begin{macrocode}
+ \ifsi@switch
+ \expandafter\si@tab@numout%
+ \fi
+ \the\si@tab@posttoks%
+ \hfil%
+ \endgroup}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@tempcnta}
+%\begin{macro}{\si@tempcntb}
+% Counters are needed for the digit-counting system.
+% \begin{macrocode}
+\newcount\si@tempcnta
+\newcount\si@tempcntb
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@tab@numout}
+% If a number is found, then some secondary processing is needed to
+% format it correctly.
+% \begin{macrocode}
+\newcommand*{\si@tab@numout}{%
+ \let\si@num@format\si@tab@num@format
+% \end{macrocode}
+% Using the modified form of \cs{si@num}, the input (in
+% \cs{si@tab@numtoks} is parsed. This results in the mantissa before
+% the decimal place in \cs{si@num@mantout} and the rest of the
+% mantissa, plus any exponent part, in \cs{si@num@out}. The part of
+% the mantissa after the decimal marker (if any) is stored in
+% \cs{si@tab@mantout}, which can therefore be used as a flag for the
+% inclusion of a decimal sign.
+% \begin{macrocode}
+ \expandafter\si@num\expandafter{\the\si@tab@numtoks}%
+ \afterassignment\si@tab@format\expandafter\si@tempcnta%
+ \si@tabformat\relax}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@tab@mantout}
+% A storage macro is needed.
+% \begin{macrocode}
+\newcommand*{\si@tab@mantout}{}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@tab@num@format}
+% A modified version of \cs{si@num@format} is needed, as the
+% ``decomposed'' number is needed directly by the table formatting
+% system.\\
+%\cs{si@tab@num@format}\marg{num}
+% \begin{macrocode}
+\newcommand*{\si@tab@num@format}[1]{%
+% \end{macrocode}
+%\begin{macro}{\si@tab@org@sepdigits}
+% The crucial sub-macro is redirected.
+% \begin{macrocode}
+ \let\si@tab@org@sepdigits\si@num@sepdigits
+ \let\si@num@sepdigits\si@tab@num@sepdigits
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@num@arg}
+% With that done, things continue as in the original.
+% \begin{macrocode}
+ \edef\si@num@arg{#1}%
+ \si@switchfalse
+ \expandafter\si@num@mantexp\si@num@arg\@empty\@empty%
+ \si@num@sign{mant}%
+ \ifx\@empty\si@num@mant\@empty\else
+ \si@num@digits{mant}%
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@num@out}
+% The pre-decimal part of the the number is in \cs{si@num@mantout},
+% with the post-decimal part in \cs{si@tab@mantout}. This ensures
+% that there is no need to shuffle the location of any sign. The macro
+% now continues to build up everything after the decimal sign in
+% \cs{si@num@out}.
+% \begin{macrocode}
+ \protected@edef\si@num@out{\si@tab@mantout}%
+ \fi
+% \end{macrocode}
+% For the exponent, processing is back to normal.
+% \begin{macrocode}
+ \let\si@num@sepdigits\si@tab@org@sepdigits
+ \si@num@sign{exp}%
+ \ifx\@empty\si@num@exp\@empty\else
+ \si@num@digits{exp}%
+ \ifx\@empty\si@num@mant\@empty\else
+ \protected@edef\si@num@out%
+ {\si@num@out\noexpand\ensuremath{\noexpand\si@expproduct}}%
+ \fi
+ \protected@edef\si@num@out%
+ {\si@num@out\si@exppower%
+ \noexpand\textsuperscript{\si@num@expout}}%
+ \fi
+ \ifx\@empty\si@num@mant\@empty
+ \ifx\@empty\si@num@exp\@empty
+ \si@log@err{Invalid number format `\si@num@arg'}%
+ {Something is wrong with the number format; does it
+ contain \MessageBreak any numbers (from the list %
+ `\si@numlist')?}%
+% \end{macrocode}
+%\begin{macro}{\si@tab@mantout}
+% Need to clear both storage areas.
+% \begin{macrocode}
+ \renewcommand*\si@num@out{}%
+ \renewcommand*\si@tab@mantout{}%
+ \fi
+ \fi}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@tab@num@sepdigits}
+% An altered version of \cs{si@num@sepdigits} is needed, so that the
+% division of the data is made before and after the decimal sign for
+% the mantissa.\\
+%\cs{si@tab@num@sepdigits}\marg{num}
+% \begin{macrocode}
+\newcommand*{\si@tab@num@sepdigits}[1]{%
+ \si@num@ifextra{\si@tempa}{}
+ {\expandafter\si@num@int\expandafter{\si@tempa}}%
+ \def\si@tempc{}%
+ \ifx\@empty\si@tempb\@empty\else
+ \si@num@ifextra{\si@tempb}{}%
+ {\expandafter\si@num@dec\expandafter{\si@tempb}}%
+ \fi
+% \end{macrocode}
+% The storage of the results is different to the original version.
+% The pre-decimal part (plus any sign) is stored in the
+% \cs{si@num@}|#1out| macro, while the post-decimal part ends up in
+% \cs{si@tab@}|#1out|. No decimal sign is added in at all.
+% \begin{macrocode}
+ \expandafter\protected@edef\csname si@num@#1out\endcsname%
+ {\csname si@num@#1out\endcsname\si@tempa}%
+ \expandafter\protected@edef\csname si@tab@#1out\endcsname%
+ {\si@tempb}}%
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@tab@prebox}
+%\begin{macro}{\si@tab@postbox}
+%\begin{macro}{\si@tempbox}
+% The various boxes needed for the column centring are declared
+% Unlike the \pkg{dcolumn} original, private boxes are used here.
+% \cs{si@tempbox} is used when a space to measure one of the
+% constituents is needed; it is never used for output.
+% \begin{macrocode}
+\newbox\si@tab@prebox
+\newbox\si@tab@postbox
+\newbox\si@tempbox
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@tab@format}
+% The formatting set up is taken from \pkg{dcolumn}, with a few minor
+% changes to fit the scheme used here. There is only one argument
+% here, as the appearance of the decimal sign is handled by the
+% \pkg{keyval} system. The numerical test here has been changed,
+% compared to \pkg{dcolumn}, so that a value of zero gives a column
+% centred on the decimal marker.\\
+%\cs{si@tab@format}\marg{num}\cs{relax}
+% \begin{macrocode}
+\def\si@tab@format#1\relax{%
+ \ifnum\z@<\si@tempcnta
+ \expandafter\si@tab@right%
+ \else
+ \expandafter\si@tab@centre%
+ \fi
+ {#1}%
+% \end{macrocode}
+% Output of the formatted data occurs here; both positioning macros
+% produce formatted data in boxes zero and two.
+% \begin{macrocode}
+ \box\si@tab@prebox\box\si@tab@postbox}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@tab@centre}
+% This macro is executed if the decimal marker is at the centre of
+% the column. The argument is needed here to throw away anything
+% left on the input stack by \cs{si@tab@format}. Unlike
+% \pkg{dcolumn}, only a single macro is needed here, as the (divided)
+% number is already available.\\
+%\cs{si@tab@centre}\marg{gobble}
+% \begin{macrocode}
+\newcommand*\si@tab@centre[1]{%
+% \end{macrocode}
+% Box zero is used to hold the pre-decimal part, with box two holding
+% the post-decimal part \emph{if} it is needed.
+% \begin{macrocode}
+ \setbox\si@tab@prebox=\hbox%
+ {\expandafter\si@out@num\expandafter{\si@num@mantout}}%
+ \ifx\@empty\si@tab@mantout\@empty
+ \ifx\@empty\si@num@out\@empty
+ \setbox\si@tab@postbox=\hbox%
+ {\phantom{\ensuremath{{\si@decimalsign}}}}%
+ \else
+ \setbox\si@tab@postbox=\hbox%
+ {\expandafter\si@out@num\expandafter{\si@num@out}}%
+ \fi
+ \else
+ \setbox\si@tab@postbox=\hbox%
+ {\ensuremath{{\si@decimalsign}}%
+ \expandafter\si@out@num\expandafter{\si@num@out}}%
+ \fi
+% \end{macrocode}
+% Which of the two boxes is wider is now checked, and the smaller is
+% padded out.
+% \begin{macrocode}
+ \ifdim \wd\si@tab@prebox>\wd\si@tab@postbox
+ \setbox\si@tab@postbox=\hbox to\wd\si@tab@prebox%
+ {\unhbox\si@tab@postbox\hfill}%
+ \else
+ \setbox\si@tab@prebox=\hbox to\wd\si@tab@postbox%
+ {\hfill\unhbox\si@tab@prebox}%
+ \fi}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@tab@predim}
+%\begin{macro}{\si@tab@postdim}
+%\begin{macro}{\si@tempdima}
+%\begin{macro}{\si@tempdimb}
+% Some storage dimensions are declared.
+% \begin{macrocode}
+\newdimen\si@tab@predim
+\newdimen\si@tab@postdim
+\newdimen\si@tempdima
+\newdimen\si@tempdimb
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@tab@right}
+% The column is not centred on the decimal marker; the user specifies
+% how many characters on each side are allowed for.\\
+%\cs{si@tab@right}\marg{num}
+% \begin{macrocode}
+\newcommand*\si@tab@right[1]{%
+% \end{macrocode}
+% The width of a character is measured, and stored.
+% \begin{macrocode}
+ \setbox\si@tempbox=\hbox{\si@out@num{1}}
+ \si@tempdima\wd\si@tempbox
+% \end{macrocode}
+%\begin{macro}{\si@tab@prea}
+%\begin{macro}{\si@tab@preb}
+% If |#1| is empty, then no special processing is needed for box two.
+% On the other hand, if there is something in |#1| then a bit of
+% re-arranging is done. In particular notice that \cs{si@tempcnta}
+% is used with the pre-decimal value, before the post-decimal setting
+% is saved.
+% \begin{macrocode}
+ \ifx\relax#1\relax
+ \hfill
+ \let\si@tab@prea\relax
+ \let\si@tab@preb\relax
+ \else
+ \si@tab@predim\the\si@tempcnta\si@tempdima
+ \si@tab@sepcorr{pre}%
+ \edef\si@tab@prea{to\si@tab@predim}%
+ \edef\si@tab@preb{\hss\hfill}%
+ \si@tempcnta\@gobble#1\relax
+ \fi
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+% The width of the box needed is calculated by multiplying the width
+% of a character (in \cs{si@tempdima} by the number of characters
+% requested (in \cs{si@tempcnta}. The width of the decimal sign is
+% also allowed for and added on.
+% \begin{macrocode}
+ \si@tab@postdim\si@tempcnta\si@tempdima
+ \setbox\si@tempbox=\hbox{\ensuremath{{\si@decimalsign}}}%
+ \advance\si@tab@postdim\wd\si@tempbox
+ \si@tab@sepcorr{post}%
+% \end{macrocode}
+% The pre-decimal part of the number is now added to box zero, with
+% the post decimal part in box two if needed.
+% \begin{macrocode}
+ \setbox\si@tab@prebox=\hbox\si@tab@prea{\si@tab@preb%
+ \expandafter\si@out@num\expandafter{\si@num@mantout}}%
+ \ifx\@empty\si@tab@mantout\@empty
+ \setbox\si@tab@postbox=\hbox to\si@tab@postdim%
+ {\expandafter\si@out@num\expandafter{\si@num@out}\hfil}%
+ \else
+ \setbox\si@tab@postbox=\hbox to\si@tab@postdim%
+ {\ensuremath{{\si@decimalsign}}\expandafter\si@out@num%
+ \expandafter{\si@num@out}\hfil}%
+ \fi}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@tab@sepcorr}
+% A spacing correction is needed \emph{if} the number of digits to be
+% allowed for will lead to the introduction of a separator. A counter
+% and dimension are needed for the testing.\\
+%\cs{si@tab@sepcorr}\marg{num}
+% \begin{macrocode}
+\newcommand*{\si@tab@sepcorr}[1]{%
+ \si@tempcntb\the\si@tempcnta\relax
+% \end{macrocode}
+% Calculate how many groups of three there are, then allow for not
+% separating four characters if \cs{ifsi@sepfour} is false.
+% \begin{macrocode}
+ \divide\si@tempcntb\thr@@
+ \ifsi@sepfour\else
+ \ifnum\the\si@tempcnta=4
+ \si@tempcntb\z@
+ \fi
+ \fi
+% \end{macrocode}
+% The width of the separators is measured, and the correct number of
+% separator widths are added to the box dimension.
+% \begin{macrocode}
+ \setbox\si@tempbox=\hbox{\ensuremath{\si@digitsep}}%
+ \expandafter\advance\csname si@tab@#1dim\endcsname%
+ \si@tempcntb\wd\si@tempbox}%
+% \end{macrocode}
+%\end{macro}
+%
+%\subsection{Units}
+%\begin{macro}{\SI}
+%\begin{macro}{\unitsym}
+% There are two types of user macros for the units system; those for
+% defining new units, prefixes and powers, and those for using them.
+% There are two macros for using units, \cs{SI} and \cs{unitsym},
+% which work in very similar ways. \cs{unitsym} is just an alias for
+% \cs{SI} with no number; everything is handed off into an internal
+% macro. The internal macro also handles the optional prefix
+% argument to \cs{SI}\\
+%\cs{SI}\oarg{options}\marg{num}
+%\cs{unitsym}\oarg{options}\marg{unit}
+% \begin{macrocode}
+\DeclareRobustCommand*{\SI}[2][]{%
+ \@ifnextchar[%]
+ {\si@SI[#1]{#2}}
+ {\si@SI[#1]{#2}[]}}
+\DeclareRobustCommand*{\unitsym}[2][]{\si@SI[#1]{}[]{#2}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\newunit}
+%\begin{macro}{\renewunit}
+%\begin{macro}{\provideunit}
+% The \cs{newunit} and \cs{renewunit} macros create the new unit
+% macros. To allow a mechanism for checking an existing definition,
+% these macros simply carry out the appropriate tests, before handing
+% off to the internal macro. \cs{@ifdefinable} is not used here as a
+% customised error is desirable. Other than that, the code here gives
+% very similar results to \cs{newcommand} and \cs{renewcommand}.
+% Finally, \cs{provideunit} adds the unit definition only if it does
+% not already exist.\\
+%\cs{newunit}\oarg{valuesep=none}\marg{unit}\marg{symbol}\\
+%\cs{renewunit}\oarg{valuesep=none}\marg{unit}\marg{symbol}\\
+%\cs{provideunit}\oarg{valuesep=none}\marg{unit}\marg{symbol}
+% \begin{macrocode}
+\newcommand*{\newunit}[3][]{%
+ \si@ifdefinable{#2}
+ {\si@unt@defunit[#1]{#2}{#3}}
+ {\si@log@err{Unit \string#2 already defined!}\@eha}}
+\newcommand*{\renewunit}[3][]{%
+ \si@ifdefinable{#2}
+ {\si@log@err{Unit \string#2 undefined}\@ehc
+ \si@unt@defunit[#1]{#2}{#3}}
+ {\si@unt@defunit[#1]{#2}{#3}}}
+\newcommand*{\provideunit}[3][]{%
+ \si@ifdefinable{#2}
+ {\si@unt@defunit[#1]{#2}{#3}}
+ {}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\newprefix}
+%\begin{macro}{\renewprefix}
+%\begin{macro}{\provideprefix}
+% The multiples of units are defined here; very similar code is used
+% to the \cs{newunit}, \etc., macros. The multiple prefixes cannot take
+% an optional argument, and must represent some power. Hence the arguments
+% required are different.
+%\cs{newprefix}\marg{multiple}\marg{powers-ten}\marg{symbol}\\
+%\cs{renewprefix}\marg{multiple}\marg{powers-ten}\marg{symbol}\\
+%\cs{provideprefix}\marg{multiple}\marg{powers-ten}\marg{symbol}
+% \begin{macrocode}
+\newcommand*{\newprefix}[3]{%
+ \si@ifdefinable{#1}
+ {\si@unt@defprefix{#1}{#2}{#3}}
+ {\si@log@err{Prefix \string#1 already defined!}\@eha}}
+\newcommand*{\renewprefix}[3]{%
+ \si@ifdefinable{#1}
+ {\si@log@err{Prefix \string#1 undefined}\@ehc
+ \si@unt@defprefix{#1}{#2}{#3}}
+ {\si@unt@defprefix{#1}{#2}{#3}}}
+\newcommand*{\provideprefix}[3]{%
+ \si@ifdefinable{#1}
+ {\si@unt@defprefix{#1}{#2}{#3}}
+ {}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\newpower}
+%\begin{macro}{\renewpower}
+%\begin{macro}{\providepower}
+% Here power multiples for units are set up. As with units and
+% multiples, a layered approach is used to keep things easy to
+% maintain. The optional argument here is \emph{not} a \pkg{keyval}
+% one: only \opt{post} is a valid value.\\
+%\cs{newpower}\oarg{post}\marg{num}\marg{power}\\
+%\cs{renewpower}\oarg{post}\marg{num}\marg{power}\\
+%\cs{providepower}\oarg{post}\marg{num}\marg{power}
+% \begin{macrocode}
+\newcommand*{\newpower}[3][]{%
+ \si@ifdefinable{#2}
+ {\si@unt@defpower[#1]{#2}{#3}}
+ {\si@log@err{Power \string#2 already defined!}\@eha}}
+\newcommand*{\renewpower}[3][]{%
+ \si@ifdefinable{#2}
+ {\si@log@err{Power \string#2 undefined}\@ehc
+ \si@unt@defpower[#1]{#2}{#3}}
+ {\si@unt@defpower[#1]{#2}{#3}}}
+\newcommand*{\providepower}[3][]{%
+ \si@ifdefinable{#2}
+ {\si@unt@defpower[#1]{#2}{#3}}
+ {}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%
+%\begin{macro}{\ifsi@unt@num}
+% A flag is needed to tell the processor whether there is a number,
+% to get the correct spacing. The flag is true outside of the
+% processor
+% \begin{macrocode}
+\newif\ifsi@unt@num\si@unt@numtrue
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@SI}
+%\begin{macro}{\si@unt@SIopts}
+% The internal processing starts with \cs{si@SI}, which processes the
+% second optional argument to \cs{SI} (which is empty for
+% \cs{unitsym}). Everything is set up in a group, and processing
+% begins by handling the options.\\
+%\cs{si@SI}\oarg{options}\marg{unit}\oarg{preunit}\marg{unit}
+% \begin{macrocode}
+\def\si@SI[#1]#2[#3]#4{%
+ \begingroup
+ \si@ifnotmtarg{#1}
+ {\sisetup{#1}%
+ \edef\si@unt@SIopts{#1}}%
+% \end{macrocode}
+%\end{macro}
+% The prefix unit is handled before any processing of the number; the
+% flags are set to get spacing correct.
+% \begin{macrocode}
+ \si@unt@numfalse
+ \si@xspacefalse
+ \si@ifnotmtarg{#3}
+ {\si@log@debug{Prefix unit found}%
+ \si@unt@printunit{#3}}%
+% \end{macrocode}
+% The numerical argument may be empty, in which case no extra space
+% should be produced.
+% \begin{macrocode}
+ \si@ifnotmtarg{#2}
+ {\si@log@debug{Number found in \string\SI\space argument}%
+ \num{#2}%
+ \si@unt@numtrue}%
+ \si@ifnotmtarg{#4}
+ {\si@unt@printunit{#4}}%
+ \endgroup}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@unt@ifliteral}
+%\begin{macro}{\ifsi@unt@littest}
+% The next stage of the processor is to determine whether or not the
+% argument of the unit macro is processable. For literal arguments,
+% this is not the case, and the argument is typeset ``as is''. On
+% the other hand, any units, \etc., declared by the package will work
+% with the processor, and so need to be executed before typesetting
+% the result.\\
+%\cs{si@unt@ifliteral}\marg{text}
+% \begin{macrocode}
+\newif\ifsi@unt@littest
+\newcommand*{\si@unt@ifliteral}[1]{%
+ \begingroup
+ \si@unt@littesttrue
+% \end{macrocode}
+% The test relies on any non-processable test having some width;
+% hopefully, this should be the case.
+% \begin{macrocode}
+ \setbox\si@tempbox=\hbox{\si@unt@out{#1}}%
+ \ifdim\wd\si@tempbox>\z@\relax
+ \endgroup\expandafter\@firstoftwo%
+ \else
+ \endgroup\expandafter\@secondoftwo%
+ \fi}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\ifsi@unt@litout}
+%\begin{macro}{\si@unt@printunit}
+% The printing macro uses the above test to determine how to act. It
+% then carries out the appropriate action: either typesetting or
+% executing. A flag is also provided so that any macro units inside
+% a partially-literal argument will work (this is also needed to
+% emulate \unitsdef).\\
+%\cs{si@unt@printunit}\marg{unit}
+% \begin{macrocode}
+\newif\ifsi@unt@litout
+\newcommand{\si@unt@printunit}[1]{%
+ \si@unt@ifliteral{#1}
+% \end{macrocode}
+% The unit includes one or more literal items; typeset using the
+% unit typesetting macro.
+% \begin{macrocode}
+ {\si@log@debug{Literal items found in unit argument:\MessageBreak
+ outputting without further processing}%
+ \si@unt@litouttrue
+ \si@unt@addvaluesep%
+ \si@unt@out{#1}}
+% \end{macrocode}
+% For processable output, the argument is executed; the macros are
+% all designed for this.
+% \begin{macrocode}
+ {\si@log@debug{Macro unit found:\MessageBreak
+ processing to format output}%
+ \si@unt@init%
+ \advance\si@unt@depthcnt\@ne\relax
+ #1%
+ \si@unt@final}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@unt@addvaluesep}
+%\begin{macro}{\si@unt@addvalsep}
+%\begin{macro}{\si@unt@litvalsep}
+%\begin{macro}{\si@unt@stackvalsep}
+% To ensure no problems pop up with expansion, adding the value--unit
+% space is handled by a macro.
+% \begin{macrocode}
+\newcommand*{\si@unt@addvaluesep}{%
+ \ifsi@unt@num
+ \expandafter\si@unt@addvalsep%
+ \fi}
+\newcommand*{\si@unt@addvalsep}{%
+ \ifsi@unt@litout
+ \expandafter\si@unt@litvalsep%
+ \else
+ \expandafter\si@unt@stackvalsep%
+ \fi}
+\newcommand*{\si@unt@stackvalsep}{%
+ \protected@edef\si@unt@spstack{\si@valuesep}}
+\newcommand*{\si@unt@litvalsep}{%
+ \nobreak\ensuremath{\si@valuesep}\nobreak}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@unt@spstack}
+%\begin{macro}{\si@unt@stacka}
+%\begin{macro}{\si@unt@stackb}
+%\begin{macro}{\si@unt@unitcnta}
+%\begin{macro}{\si@unt@unitcntb}
+%\begin{macro}{\si@unt@depthcnt}
+%\begin{macro}{\ifsi@unt@first}
+%\begin{macro}{\si@unt@init}
+% The initialisation macro sets up the various switches, and clears
+% the storage areas for the formatted output. There are two stacks,
+% as when typesetting as fractions, the two parts of the number have
+% to be stored separately. The depth counter is used to tell when
+% recursion ends in the processor. The ``first'' switch is needed as
+% the depth counter will not be at one for items processed by
+% \cs{SI}.
+% \begin{macrocode}
+\newcommand*{\si@unt@spstack}{}
+\newcommand*{\si@unt@stacka}{}
+\newcommand*{\si@unt@stackb}{}
+\newcount\si@unt@unitcnta
+\newcount\si@unt@unitcntb
+\newcount\si@unt@depthcnt
+\newif\ifsi@unt@first
+\si@unt@depthcnt\m@ne\relax
+\newcommand*{\si@unt@init}{%
+ \begingroup
+ \si@unt@litoutfalse
+ \si@unt@firsttrue
+ \si@unt@perfalse
+ \si@unt@perseenfalse
+ \si@unt@prepowerfalse
+ \si@unt@depthcnt\z@\relax
+ \si@unt@powerdim\z@\relax
+ \si@unt@unitcnta\z@\relax
+ \si@unt@unitcntb\z@\relax
+ \si@unt@prefixcnt\z@\relax
+ \renewcommand*{\si@unt@spstack}{}%
+ \renewcommand*{\si@unt@stacka}{}%
+ \renewcommand*{\si@unt@stackb}{}%
+ \renewcommand*{\si@unt@holdstacka}{}%
+ \renewcommand*{\si@unt@holdstackb}{}%
+ \renewcommand*{\si@unt@lastadda}{space}%
+ \renewcommand*{\si@unt@lastaddb}{space}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@unt@final}
+% The finalisation macro finishes off the output and resets the flags.
+% \begin{macrocode}
+\newcommand*{\si@unt@final}{%
+ \si@unt@third%
+ \si@unt@stackout%
+ \endgroup
+ \ifsi@xspace
+ \expandafter\expandafter\expandafter\xspace%
+ \fi}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\si@unt@defunit}
+% The internal macro for defining a unit does not check for
+% redefinition; that is done by the user macros.
+%\cs{si@unt@defunit}\oarg{valuesep=none}\marg{unit}\marg{symbol}
+% \begin{macrocode}
+\newcommand*{\si@unt@defunit}[3][]{%
+ \si@log@debug{Declaring unit \string#2 with \MessageBreak
+ meaning \string#3}%
+% \end{macrocode}
+% The optional argument can only have the value \opt{valuesep=none},
+% which is used to prevent a space occurring between a number and the
+% units (for example, with \cs{degree}). The optional argument needs
+% to be saved; \cs{edef} is used so there is no issue with
+% redefinition. The macro name is effectively ``reversed'' so that
+% life is easier with the expansions here.
+% \begin{macrocode}
+ \si@ifnotmtarg{#1}
+ {\expandafter\expandafter\expandafter\def\expandafter%
+ \csname\expandafter\@gobble\string#2@opt@unt@si\endcsname{#1}}%
+% \end{macrocode}
+% The unit macro itself is now defined. The definition simply
+% selects the correct path for the rest of the processing to go down.
+% To avoid needing specialised gobbling macros, the optional nature
+% of the first argument is dropped.
+% \begin{macrocode}
+ \DeclareRobustCommand*{#2}[1][]{%
+ \ifsi@unt@littest
+ \expandafter\si@gobblethree
+ \else
+% \end{macrocode}
+% For literal output, the third argument is all that is needed.
+% \begin{macrocode}
+ \ifsi@unt@litout
+ \expandafter\expandafter\expandafter\@gobbletwo
+ \else
+ \expandafter\expandafter\expandafter\si@unt@unit%
+ \fi
+ \fi
+ {##1}{#2}{#3}}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@gobblethree}
+% \LaTeX\ does not have a \cs{@gobblethree} macro, but one is needed.
+% \begin{macrocode}
+\long\def \si@gobblethree #1#2#3{}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@unt@defprefix}
+% As with units, multiples are defined by an internal macro.
+%\cs{si@unt@defprefix}\marg{multiple}\marg{powers-ten}\marg{symbol}\\
+% \begin{macrocode}
+\newcommand*{\si@unt@defprefix}[3]{%
+ \si@log@debug{Declaring multiple \string#1 with \MessageBreak
+ meaning \string#3}%
+ \DeclareRobustCommand{#1}{%
+ \ifsi@unt@littest
+ \expandafter\si@gobblethree
+ \else
+ \ifsi@unt@litout
+ \expandafter\expandafter\expandafter\@gobbletwo
+ \else
+ \expandafter\expandafter\expandafter\si@unt@prefix%
+ \fi
+ \fi
+ {#1}{#2}{#3}}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@unt@defpower}
+% The definition of powers is complicated by the need to handle both
+% those given before units (such as \cs{cubic}) and those given after
+% (\eg~\cs{cubed}). This means that an optional argument is
+% needed.\\
+%\cs{si@unt@defpower}\oarg{post}\marg{power}\marg{num}
+% \begin{macrocode}
+\newcommand*{\si@unt@defpower}[3][]{%
+ \si@log@debug{Declaring power \string#2 with \MessageBreak
+ meaning \string#3}%
+% \end{macrocode}
+% Once again the optional argument is saved.
+% \begin{macrocode}
+ \expandafter\expandafter\expandafter\edef\expandafter%
+ \csname\expandafter\@gobble\string#2@opt@si\endcsname{#1}%
+ \DeclareRobustCommand{#2}{%
+ \ifsi@unt@littest
+ \expandafter\@gobbletwo
+ \else
+% \end{macrocode}
+% The literal output here does not need to gobble anything, but uses
+% \cs{textsuperscript} to get the correct effect. This will of
+% course give very odd results for prefix powers.
+% \begin{macrocode}
+ \ifsi@unt@litout
+ \expandafter\expandafter\expandafter\si@unt@litpower%
+ \else
+ \expandafter\expandafter\expandafter\si@unt@power%
+ \fi
+ \fi
+ {#2}{#3}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\si@unt@unithook}
+%\begin{macro}{\si@unt@unit}
+% The macro for units is actually a processor, rather than
+% typesetting anything, which is handled elsewhere. The first
+% argument to the macro is optional, but does not have square
+% brackets to keep things simple with gobbling.\\
+%\cs{si@unt@unit}\marg{num}\marg{unit}\marg{symbol}
+% \begin{macrocode}
+\newcommand*{\si@unt@unithook}{}
+\newcommand*{\si@unt@unit}[3]{%
+% \end{macrocode}
+% When the count is minus one at the start of the processor, then the
+% unit is begin used on its own: initialisation occurs.
+% \begin{macrocode}
+ \ifnum\si@unt@depthcnt=\m@ne\relax
+ \expandafter\si@unt@init%
+ \fi
+ \advance\si@unt@depthcnt\@ne\relax
+ \si@log@debug{Unit processing: level \the\si@unt@depthcnt,
+ \MessageBreak unit \string#2}%
+ \si@unt@firstorsecond{#1}{#2}%
+% \end{macrocode}
+% The core of the \cs{si@unt@unit} macro is testing if the symbol for
+% the unit is a literal value or another macro. Depending on the
+% result, the symbol is either used as a literal or executed.
+% \begin{macrocode}
+ \si@unt@ifliteral{#3}
+ {\si@unt@addtostack{unit}{#3}%
+ \ifsi@unt@prepower
+ \expandafter\si@unt@stkpower%
+ \fi}
+ {#3}%
+% \end{macrocode}
+% The counter is now stepped down, before checking if this is
+% the end of a compound unit.
+% \begin{macrocode}
+ \advance\si@unt@depthcnt\m@ne\relax
+ \ifnum\si@unt@depthcnt=\z@\relax
+ \expandafter\si@unt@final%
+ \fi}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@unt@firstorsecond}
+% At this stage, the flag will be set for the first item to be
+% processed whichever route the unit has been called by.\\
+%\cs{si@unt@firstorsecond}\marg{num}\marg{macro}
+% \begin{macrocode}
+\newcommand{\si@unt@firstorsecond}[2]{%
+ \ifsi@unt@first
+ \expandafter\si@unt@first%
+ \else
+ \expandafter\si@unt@second%
+ \fi
+ {#1}{#2}}%
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@unt@first}
+% For the first unit in the input, some extra tasks are needed.
+% First, the optional argument for the unit macro needs to be
+% tested.\\
+%\cs{si@unt@first}\marg{num}\marg{unit}
+% \begin{macrocode}
+\newcommand*{\si@unt@first}[2]{%
+ \si@ifnotmtarg{#1}
+ {\num{#1}}%
+ \si@unt@unithook%
+% \end{macrocode}
+% To avoid filling up the macro list with useless values, the \eTeX\
+% primitive \cs{ifcsname} is employed here (it also avoids complex
+% expansion issues). If some options exist, they are set.
+% \begin{macrocode}
+ \ifcsname\expandafter\@gobble\string#2@opt@unt@si\endcsname
+ \expandafter\si@unt@setopts%
+ \else
+ \expandafter\@gobble
+ \fi
+ {#2}%
+ \si@unt@addvaluesep%
+ \si@unt@firstfalse}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@unt@setopts}
+%\begin{macro}{\si@unt@setSIopts}
+% A rather long set of \cs{expandafter} commands to get the options
+% to set safely.\\
+%\cs{si@unt@setopts}\marg{unit}
+% \begin{macrocode}
+\newcommand*{\si@unt@setopts}[1]{%
+ \expandafter\expandafter\expandafter\expandafter\expandafter%
+ \expandafter\expandafter\si@temptoks\expandafter\expandafter%
+ \expandafter\expandafter\expandafter\expandafter\expandafter{%
+ \expandafter\csname\expandafter\@gobble\string#1@opt@unt@si%
+ \endcsname}%
+ \expandafter\sisetup\expandafter{\the\si@temptoks}%
+ \si@log@debug{Applying options ``\the\si@temptoks''
+ for\MessageBreak unit \string#1}%
+% \end{macrocode}
+% The user options are reloaded, if defined, to ensure that they
+% still work as expected.
+% \begin{macrocode}
+ \@ifundefined{si@unt@SIopts}{}
+ {\ifx\@empty\si@unt@SIopts\@empty\else
+ \expandafter\expandafter\si@unt@setSIopts%
+ \fi}}
+\newcommand*{\si@unt@setSIopts}{%
+ \expandafter\si@temptoks\expandafter{\si@unt@SIopts}%
+ \expandafter\sisetup\expandafter{\the\si@temptoks}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@unt@second}
+%\begin{macro}{\si@unt@third}
+% For everything apart from the first item to be processed, spacing
+% may need to be added to separated different units. The macro is
+% divided into two, so that everything except the space can be added
+% in finalisation.\\
+%\cs{si@unt@second}\marg{num}\marg{unit}
+% \begin{macrocode}
+\newcommand{\si@unt@second}[2]{%
+ \si@ifnotmtarg{#1}
+ {\si@log@warn{Optional argument to unit macro\MessageBreak
+ allowed only for outer unit}}%
+ \si@unt@third%
+ \si@unt@addtostack{space}{\ensuremath{\si@unitsep}}}
+\newcommand*{\si@unt@third}{%
+ \ifsi@unt@prepower\else
+ \expandafter\si@unt@stkpower%
+ \fi
+% \end{macrocode}
+%\begin{macro}{\si@tempa}
+% A check is made to avoid adding $-1$ to prefixes. If \opt{frac} is
+% active, then the |b| stack will be in use, otherwise it will be
+% |a|.
+% \begin{macrocode}
+ \def\si@tempa{prefix}%
+ \expandafter\ifx\csname si@unt@lastadd\si@unt@checkstack%
+ \endcsname\si@tempa\else
+ \expandafter\si@unt@spacecheck%
+ \fi
+ \ifsi@unt@per
+ \expandafter\si@unt@perseentrue
+ \fi}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@unt@spacecheck}
+% A check to prevent adding $-1$ at the very beginning of the unit, where
+% there is a space on the stack.
+% \begin{macrocode}
+\newcommand*{\si@unt@spacecheck}{%
+ \def\si@tempa{space}%
+ \expandafter\ifx\csname si@unt@lastadd\si@unt@checkstack%
+ \endcsname\si@tempa\else
+ \expandafter\si@unt@reciptest%
+ \fi}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@unt@prefix}
+% Actual output of the prefixes.\\
+%\cs{si@unt@prefix}\marg{multiple}\marg{powers-ten}\marg{symbol}
+% \begin{macrocode}
+\newcommand*{\si@unt@prefix}[3]{%
+ \si@unt@firstorsecond{}{#1}%
+ \ifsi@prefixnum
+ \expandafter\si@unt@countprefix%
+ \else
+ \expandafter\si@unt@addprefix%
+ \fi
+ {#2}{#3}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@unt@addprefix}
+% To add the prefix, a little translation is needed.\\
+%\cs{si@unt@countprefix}\marg{gobble}\marg{symbol}
+% \begin{macrocode}
+\newcommand*{\si@unt@addprefix}[2]{\si@unt@addtostack{prefix}{#2}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@unt@prefixcnt}
+%\begin{macro}{\si@unt@countprefix}
+%\begin{macro}{\si@unt@invprefix}
+% On the other hand, to count the prefix numeral, the symbol is
+% thrown away.
+%\cs{si@unt@countprefix}\marg{powers-ten}\marg{gobble}
+% \begin{macrocode}
+\newcount\si@unt@prefixcnt
+\newcommand*{\si@unt@countprefix}[2]{%
+ \si@tempcnta#1\relax
+ \ifsi@unt@per
+ \si@unt@invprefix%
+ \fi
+ \advance\si@unt@prefixcnt\si@tempcnta\relax}
+\newcommand*{\si@unt@invprefix}{%
+ \si@tempcntb\si@tempcnta\relax
+ \si@tempcnta -\si@tempcntb\relax}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@unt@litpower}
+% For literal power output, the number can't simply be dumped, so
+% a macro is needed.\\
+%\cs{si@unt@litpower}\marg{gobble}\marg{num}
+% \begin{macrocode}
+\newcommand*{\si@unt@litpower}[2]{\textsuperscript{#2}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\ifsi@unt@prepower}
+%\begin{macro}{\si@unt@power}
+% The handling of powers starts by checking if the number needs to be
+% reversed.
+%\cs{si@unt@power}\marg{power}\marg{num}
+% \begin{macrocode}
+\newif\ifsi@unt@prepower
+\newcommand*{\si@unt@power}[2]{%
+ \si@unt@powerdim #2 pt\relax
+ \ifsi@frac\else
+ \ifsi@unt@per
+ \expandafter\expandafter\expandafter\si@unt@invpower%
+ \fi
+ \fi
+ \def\si@tempa{post}%
+ \si@unt@prepowertrue
+ \expandafter\expandafter\expandafter\ifx\expandafter%
+ \csname\expandafter\@gobble\string#1@opt@si\endcsname\si@tempa
+ \expandafter\si@unt@stackpower%
+ \fi}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@unt@powerdim}
+% To do sign-inversion on the power, a dimension is used (this allows
+% non-integer values to be handled).
+% \begin{macrocode}
+\newdimen\si@unt@powerdim
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@unt@stackpower}
+%\begin{macro}{\si@unt@stkpower}
+%\begin{macro}{\si@unt@stkpwr}
+% Adding powers to the stack should also clear the power list. If
+% the number is already zero, then of course nothing happens.
+% \begin{macrocode}
+\newcommand*{\si@unt@stackpower}{%
+ \si@unt@prepowerfalse
+% \end{macrocode}
+% A trap is used for $-1$ added to the denominator of a fraction.
+% \begin{macrocode}
+ \si@unt@stkpower%
+ \si@unt@perfalse
+ \si@unt@perseenfalse}
+% \end{macrocode}
+% The \cs{si@unt@stkpower} macro needs to be called from a few
+% places, so is spun out from the above.
+% \begin{macrocode}
+\newcommand*{\si@unt@stkpower}{%
+ \ifdim\si@unt@powerdim=\m@ne pt\relax
+ \ifsi@frac\else
+ \expandafter\expandafter\expandafter\si@unt@stkpwr%
+ \fi
+ \else
+ \expandafter\si@unt@stkpwr%
+ \fi}
+% \end{macrocode}
+% Finally, the actual adding (set up to avoid problems with the
+% \cs{if} above).
+% \begin{macrocode}
+\newcommand*{\si@unt@stkpwr}{%
+ \ifdim\si@unt@powerdim=\z@\relax\else
+ \edef\si@tempa{unit}%
+ \expandafter\ifx\csname si@unt@lastadd\si@unt@checkstack%
+ \endcsname\si@tempa
+ \si@unt@addtostack{power}{^{\num{\strip@pt\si@unt@powerdim}}}%
+ \fi
+ \fi
+ \si@unt@powerdim\z@\relax}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@unt@invpower}
+% A macro to change the sign of the current power.
+% \begin{macrocode}
+\newcommand*{\si@unt@invpower}{%
+ \si@tempdima\si@unt@powerdim\relax
+ \si@unt@powerdim -\si@tempdima\relax
+% \end{macrocode}
+% The power might end up as ``1'', which is not wanted. So it is
+% chucked away.
+% \begin{macrocode}
+ \ifdim\si@unt@powerdim=\p@\relax
+ \si@unt@powerdim\z@\relax
+ \fi}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\ifsi@unt@per}
+%\begin{macro}{\ifsi@unt@perseen}
+%\begin{macro}{\per}
+%\begin{macro}{\si@per}
+% The \cs{per} macro sets the correct flags; almost everything else
+% is done elsewhere. There is always the case of two \cs{per}
+% instructions; so the flag is flipped rather than set arbitrarily.
+% The second flag is needed so that \cs{per} can give powers of $-1$
+% properly.
+% \begin{macrocode}
+\newif\ifsi@unt@per
+\newif\ifsi@unt@perseen
+\DeclareRobustCommand*{\per}{\si@per}
+\newcommand*{\si@per}{%
+ \si@unt@firstorsecond{}{\per}%
+ \ifsi@unt@per
+ \expandafter\si@unt@perfalse
+ \else
+ \expandafter\si@unt@pertrue
+ \fi}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@unt@reciptest}
+%\begin{macro}{\si@unt@recip}
+% A test is needed for adding $-1$ when needed. The second macro is
+% fired only if the power should be reciprocal.
+% \begin{macrocode}
+\newcommand*{\si@unt@reciptest}{%
+ \ifsi@unt@per
+ \ifsi@unt@perseen
+ \expandafter\expandafter\expandafter\si@unt@recip%
+ \fi
+ \fi}
+\newcommand*{\si@unt@recip}{%
+ \si@unt@powerdim\m@ne pt\relax
+ \si@unt@stackpower}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@unt@lastadda}
+%\begin{macro}{\si@unt@lastaddb}
+%\begin{macro}{\si@unt@addtostack}
+%\begin{macro}{\si@tempa}
+%\begin{macro}{\si@tempb}
+% Items cannot be added directly to the stacks (except the spacing
+% stack, a) as the fractional handling may need to add the item to
+% either storage area. By indicating the type of data to be added to
+% the stack, problems can be avoided.\\
+%\cs{si@unt@addtostack}\marg{type}\marg{token}
+% \begin{macrocode}
+\newcommand*{\si@unt@lastadda}{}
+\newcommand*{\si@unt@lastaddb}{}
+\newcommand*{\si@unt@addtostack}[2]{%
+ \edef\si@tempa{#1}%
+% \end{macrocode}
+% Two consecutive items cannot be of the same type; there must be spaces
+% between units, units between prefixes, \etc.
+% \begin{macrocode}
+ \expandafter\ifx\csname si@unt@lastadd\si@unt@checkstack\endcsname%
+ \si@tempa
+ \expandafter\@gobbletwo
+ \else
+ \expandafter\si@unt@preplussp%
+ \fi
+ {#1}{#2}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@unt@preplussp}
+%\begin{macro}{\si@tempa}
+%\begin{macro}{\si@tempb}
+% The space added after a prefix needs to be ignored.
+%\cs{si@unt@prespace}\marg{type}\marg{stack}\marg{token}\marg{gobble}
+% \begin{macrocode}
+\newcommand*{\si@unt@preplussp}[2]{%
+ \def\si@tempa{prefix+space}%
+ \edef\si@tempb{\csname si@unt@lastadd\si@unt@checkstack%
+ \endcsname+#1}%
+ \ifx\si@tempa\si@tempb
+ \expandafter\@gobbletwo
+ \else
+ \expandafter\si@unt@stack%
+ \fi
+ {#1}{#2}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@unt@stack}
+% The macro for actually doing the stacking up.\\
+%\cs{si@unt@stack}\marg{type}\marg{tokens}
+% \begin{macrocode}
+\newcommand*{\si@unt@stack}[2]{%
+ \expandafter\edef\csname si@unt@lastadd\si@unt@checkstack%
+ \endcsname{#1}%
+% \end{macrocode}
+%\begin{macro}{\si@tempa}
+%\begin{macro}{\si@tempb}
+% A count is kept of the number of \emph{units} added to each stack.
+% \begin{macrocode}
+ \edef\si@tempa{#1}%
+ \def\si@tempb{unit}%
+ \ifx\si@tempa\si@tempb
+ \expandafter\si@unt@inccnt%
+ \fi
+% \end{macrocode}
+% If a space is added, it is actually held until the next add.
+% \begin{macrocode}
+ \def\si@tempb{space}%
+ \ifx\si@tempa\si@tempb
+ \expandafter\si@unt@holdspace%
+ \else
+ \expandafter\si@unt@addstack%
+ \fi
+ {#2}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@unt@inccnt}
+% The appropriate counter is added to.
+% \begin{macrocode}
+\newcommand*{\si@unt@inccnt}{%
+ \expandafter\advance\csname si@unt@unitcnt\si@unt@checkstack%
+ \endcsname\@ne\relax}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@unt@holdspace}
+%\begin{macro}{\si@unt@addstack}
+%\begin{macro}{\si@unt@holdstacka}
+%\begin{macro}{\si@unt@holdstackb}
+% Depending on the nature of the addition, it is either held or added
+% to the stack.\\
+%\cs{si@unt@holdspace}\marg{tokens}\\
+%\cs{si@unt@addstack}\marg{tokens}\\
+% \begin{macrocode}
+\newcommand*{\si@unt@holdstacka}{}
+\newcommand*{\si@unt@holdstackb}{}
+\newcommand*{\si@unt@holdspace}[1]{%
+ \expandafter\protected@edef\csname si@unt@holdstack%
+ \si@unt@checkstack\endcsname{#1}}
+\newcommand*{\si@unt@addstack}[1]{%
+ \expandafter\protected@edef\csname si@unt@stack%
+ \si@unt@checkstack\endcsname%
+ {\csname si@unt@stack\si@unt@checkstack\endcsname%
+ \csname si@unt@holdstack\si@unt@checkstack\endcsname#1}%
+ \expandafter\renewcommand\expandafter*\expandafter{%
+ \csname si@unt@holdstack\si@unt@checkstack\endcsname}{}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@unt@stackout}
+% The stack contents are actually typeset here. First the spacing
+% between units and values is added.
+% \begin{macrocode}
+\newcommand*{\si@unt@stackout}{%
+ \ifsi@frac
+ \expandafter\si@unt@fracout%
+ \else
+ \expandafter\si@unt@normout%
+ \fi}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@unt@checkstack}
+% Which stack is in use needs to be tested.
+% \begin{macrocode}
+\newcommand*{\si@unt@checkstack}{%
+ \ifsi@frac
+ \ifsi@unt@per
+ \expandafter\expandafter\expandafter b%
+ \else
+ \expandafter\expandafter\expandafter a%
+ \fi
+ \else
+ \expandafter a%
+ \fi}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@unt@spaceout}
+% The space before a unit might not be needed, so it crops up a few
+% times in the output routine.
+% \begin{macrocode}
+\newcommand*{\si@unt@spaceout}{%
+ \ensuremath{\si@unt@spstack}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@unt@prefixout}
+% If the prefix counter is not zero, then there is something to
+% typeset.
+% \begin{macrocode}
+\newcommand*{\si@unt@prefixout}{%
+ \ifnum\si@unt@prefixcnt=\z@\relax\else
+ \ifsi@unt@num
+ \si@out@text{\ensuremath{{}\si@prefixproduct{}}}%
+ \fi
+ \let\si@exppower\si@prefixpower
+ \num{e\the\si@unt@prefixcnt}%
+ \fi}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@unt@normout}
+% The normal output mode is set up here; nothing much needs to be
+% done as there is no need for complex checks.
+% \begin{macrocode}
+\newcommand*{\si@unt@normout}{%
+ \si@unt@prefixout%
+ \si@unt@spaceout%
+ \expandafter\si@unt@out\expandafter{\si@unt@stacka}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@unt@fracout}
+% For fractions, some checks are needed.
+% \begin{macrocode}
+\newcommand*{\si@unt@fracout}{%
+ \si@unt@notambig%
+ \ifx\@empty\si@unt@stacka\@empty
+ \ifx\@empty\si@unt@stackb\@empty
+ \ifsi@unt@litout\else
+ \si@log@err{Empty fractional unit}{The unit
+ argument\MessageBreak given does not contain any
+ symbols}%
+ \fi
+ \else
+% \end{macrocode}
+% With an empty numerator, no space is added
+% \begin{macrocode}
+ \ifsi@slash
+ \si@unt@prefixout%
+ \si@frac{}{\si@unt@stackb}%
+ \else
+ \si@unt@prefixout%
+ \si@unt@spaceout%
+ \si@frac{1}{\si@unt@stackb}%
+ \fi
+ \fi
+ \else
+% \end{macrocode}
+% If the denominator is empty, then the usual output system can be
+% used.
+% \begin{macrocode}
+ \ifx\@empty\si@unt@stackb\@empty
+ \si@unt@normout%
+ \else
+ \si@unt@prefixout%
+ \si@unt@spaceout%
+ \si@frac{\si@unt@stacka}{\si@unt@stackb}%
+ \fi
+ \fi}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@unt@notambig}
+%\begin{macro}{\si@unt@notabg}
+% A trap is set for adding brackets to units using a slash, when more
+% than one unit is in the denominator.
+% \begin{macrocode}
+\newcommand*{\si@unt@notambig}{%
+ \ifnum\si@unt@unitcntb>\@ne\relax
+ \ifsi@slash
+ \expandafter\expandafter\expandafter\si@unt@notabg%
+ \fi
+ \fi}
+\newcommand*{\si@unt@notabg}{%
+ \protected@edef\si@unt@stackb{\si@denlbrac\si@unt@stackb%
+ \si@denrbrac}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%
+%\begin{macro}{\si@unt@out}
+% The final part of the units system is the output routine. This has
+% to cope with units not only as macros but also as direct input
+% (\sistyle-type input). Non-Latin characters are also handled
+% cleanly. As usual, \cs{scantokens} is used to make life easier.\\
+%\cs{si@unt@out}\marg{unit}
+% \begin{macrocode}
+\begingroup
+ \catcode`\~=\active
+ \catcode`\.=\active
+ \gdef\si@unt@out#1{%
+ \begingroup
+ \si@unt@nonlatin%
+ \makeatletter%
+ \catcode`\~=\active
+ \catcode`\.=\active
+ \def~{\ensuremath{\si@unitspace}}%
+ \def.{\ensuremath{\si@unitsep}}%
+ \scantokens{\si@out@text{#1}\@empty}%
+ \endgroup}
+\endgroup
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@unt@nonlatin}
+% To handle non-Latin symbols in the input, a single macro is
+% provided. Initially, it does nothing
+% \begin{macrocode}
+\newcommand*{\si@unt@nonlatin}{\relax}
+% \end{macrocode}
+% The meaning of different characters depends on the encoding used.
+% Thus a test is made for the presence of a suitable package
+% \emph{and} the encoding in use. The various characters can then be
+% handled.
+%\begin{macro}{\si@tempa}
+% \begin{macrocode}
+\AtBeginDocument{%
+ \@ifpackageloaded{inputenc}
+ {\def\si@tempa{latin1}%
+ \ifx\inputencodingname\si@tempa
+% \end{macrocode}
+% The degree symbol is character 176 and the micro symbol is
+% character 181 in latin1.
+% \begin{macrocode}
+ \si@unt@sym{176}{\si@sym@degree}%
+ \si@unt@sym{181}{\si@sym@mu}%
+ \si@unt@sym{229}{\si@sym@ringA}%
+ \fi}
+% \end{macrocode}
+% No \pkg{inputenc} available.
+% \begin{macrocode}
+ {}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@unt@sym}
+% A macro for declaring symbols: a copy of \cs{DeclareInputMath} from
+% \pkg{inputenc}.\\
+%\cs{si@unt@sym}\marg{charcode}
+% \begin{macrocode}
+\newcommand*{\si@unt@sym}[1]{%
+ \bgroup
+ \uccode`\~#1%
+ \uppercase{%
+ \egroup
+ \def~}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\kilogram}
+%\begin{macro}{\metre}
+%\begin{macro}{\mole}
+%\begin{macro}{\kelvin}
+%\begin{macro}{\candela}
+%\begin{macro}{\second}
+%\begin{macro}{\ampere}
+% With the system set up, the basic unit macros are implemented. The
+% only units defined whatever options are given are the base SI
+% units.
+% \begin{macrocode}
+\newunit{\kilogram}{kg}
+\newunit{\metre}{m}
+\newunit{\mole}{mol}
+\newunit{\second}{s}
+\newunit{\ampere}{A}
+\newunit{\kelvin}{K}
+\newunit{\candela}{cd}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\Square}
+%\begin{macro}{\squared}
+%\begin{macro}{\cubic}
+%\begin{macro}{\cubed}
+% Unlike multiples (which can be skipped if needed), the basic powers
+% are also always defined.
+% \begin{macrocode}
+\newpower{\Square}{2}
+\newpower[post]{\squared}{2}
+\newpower{\cubic}{3}
+\newpower[post]{\cubed}{3}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\tothe}
+%\begin{macro}{\tothe@opt@si}
+% A macro for arbitrary powers, which comes after the unit and so
+% needs to be marked as such.\\
+%\cs{tothe}\marg{num}
+% \begin{macrocode}
+\newcommand*{\tothe}[1]{%
+ \ifsi@unt@littest
+ \expandafter\@gobbletwo
+ \else
+ \ifsi@unt@litout
+ \expandafter\expandafter\expandafter\si@unt@litpower%
+ \else
+ \expandafter\expandafter\expandafter\si@unt@power%
+ \fi
+ \fi
+ {\tothe}{#1}}
+\newcommand*{\tothe@opt@si}{post}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%
+%\subsection{Locales}
+%\begin{macro}{\si@loc@load}
+%\begin{macro}{\si@loc@sisetup}
+% When loading a locale, the setup is saved rather than applied.
+% Anything other than simple settings should be inside
+% \cs{addtolocale}, which is already defined.\\
+%\cs{si@loc@load}\marg{locale}
+% \begin{macrocode}
+\newcommand*{\si@loc@load}[1]{%
+ \let\si@loc@sisetup\sisetup
+ \renewcommand*{\sisetup}[1]{%
+ \expandafter\def\csname si@loc@#1\endcsname{##1}}
+ \si@loadfile{#1}%
+ \let\sisetup\si@loc@sisetup}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@loc@set}
+% Setting the locale transfers the settings to \cs{sisetup}, and runs
+% any extra macros.\\
+%\cs{si@loc@set}\marg{locale}
+% \begin{macrocode}
+\newcommand*{\si@loc@set}[1]{%
+ \ifcsname si@loc@#1\endcsname
+ \si@log@inf{Setting locale to `#1'}%
+ \expandafter\expandafter\expandafter\expandafter\expandafter%
+ \expandafter\expandafter\si@temptoks\expandafter\expandafter%
+ \expandafter\expandafter\expandafter\expandafter\expandafter{%
+ \expandafter\csname si@loc@#1\endcsname}%
+ \expandafter\sisetup\expandafter{\the\si@temptoks}%
+ \ifcsname si@loc@#1@extra\endcsname
+ \csname si@loc@#1@extra\endcsname%
+ \fi
+ \else
+ \ifcsname si@loc@#1@extra\endcsname
+ \si@log@inf{Setting locale to `#1'}%
+ \csname si@loc@#1@extra\endcsname%
+ \else
+ \si@log@warn{Unknown locale `#1'}%
+ \fi
+ \fi}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\addtolocale}
+% Arbitrary macros may need to be added to the locale.\\
+%\cs{addtolocale}\marg{locale}\marg{commands}
+% \begin{macrocode}
+\newcommand*{\addtolocale}[2]{\si@addtocsname{si@loc@#1@extra}{#2}}
+% \end{macrocode}
+%\end{macro}
+%
+%\subsection{Output routine}
+%\begin{macro}{\si@out@text}
+% With all of the setup done, the text can finally be typeset. This
+% is done inside a \cs{text} block, which takes care of
+% \cs{ensuremath}, \etc. First of all, the various catcode settings
+% needed to get maths-in-text mode are made. \cs{makeatletter} is
+% needed so that \cs{scantokens} still allows internal macros to
+% work.\\
+%\cs{si@out@text}\marg{text}
+% \begin{macrocode}
+\begingroup
+ \catcode`\^=\active\relax
+ \catcode`\-=\active\relax
+ \gdef\si@out@text#1{%
+ \begingroup
+ \catcode`\^=\active\relax%
+ \makeatletter%
+% \end{macrocode}
+% The various font families can now be set up. First a check is made
+% in case there are nested calls to \cs{si@out@text}.
+% \begin{macrocode}
+ \ifsi@fam@set\else
+ \expandafter\si@fam@set%
+ \fi
+ \text{\si@fam@italic\si@fam@bold\si@fam@text%
+% \end{macrocode}
+% In text mode, |^| will execute \cs{textsuperscript}, whereas in
+% maths mode it will be converted to \cs{sp}, which the kernel
+% defines as |^| with catcode 7. \cs{scantokens} is used to set the
+% catcodes here, plus any others that have been set by other pars of
+% the package.
+% \begin{macrocode}
+ \ifsi@textmode
+ \let^\textsuperscript
+ \catcode`\-=\active\relax%
+ \let-\si@out@minus
+% \end{macrocode}
+% The \cs{@empty} is needed here to mop up any extra space.
+% \begin{macrocode}
+ \scantokens{#1\@empty}%
+ \else
+ \let^\sp
+ \let\textsuperscript\sp
+ $\si@fam@maths{\scantokens{#1}}$%
+ \fi}%
+% \end{macrocode}
+% Everything is done; a bit of tidying up is needed.
+% \begin{macrocode}
+ \endgroup
+ \check@mathfonts}
+\endgroup
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@out@minus}
+% An active minus sign is needed.
+% \begin{macrocode}
+\newcommand*{\si@out@minus}{\ensuremath{-}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@out@num}
+% For numerical output, the default fonts are controlled slightly
+% differently to text output.\\
+%\cs{si@out@num}\marg{num}
+% \begin{macrocode}
+\newcommand*{\si@out@num}[1]{%
+ \begingroup
+ \sisetup{%
+ textdefault=\si@textnumdefault,%
+ mathdefault=\si@mathnumdefault}%
+ \si@out@text{#1}%
+ \endgroup}
+% \end{macrocode}
+%\end{macro}
+%
+%\subsection{Finalisation}
+% With the \currpkg kernel macros defined, the package can now run
+% through finalisation. First, the default key values are set. The
+% user options are then processed.
+% \begin{macrocode}
+\sisetup{
+ unitsep=thin,
+ valuesep=thin,
+ decimalsign=fullstop,
+ digitsep=thin,
+ obeybold=false,
+ inlinebold=text,
+ obeyitalic=false,
+ sign=plus,
+ addsign=none,
+ obeymode=false,
+ mode=maths,
+ padangle=small,
+ padnumber=lead,
+ sepfour=false,
+ tabformat=-1,
+ xspace=false,
+ per=reciprocal,
+ slash=slash,
+ mathsdefault=\si@mathsrm,
+ mathsrm=mathrm,
+ mathssf=mathsf,
+ mathstt=mathtt,
+ textdefault=\si@textrm,
+ textrm=rmfamily,
+ textsf=sffamily,
+ texttt=ttfamily,
+ mathsnumdefault=\si@mathsrm,
+ textnumdefault=\si@textrm,
+ numlist=0123456789,
+ numdecimal={.,},
+ numexp=eEdD,
+ numgobble={},
+ numsign=+-\pm\mp,
+ numextra=(),
+ redefsymbols=true,
+ load=default,
+ noload={},
+ eVcorra={0.3ex},
+ eVcorrb={0ex},
+ denlbrac=(,
+ denrbrac=),
+ astroang=false,
+ loadlocales={},
+ loctolang={},
+ prefix=symbol,
+ prefixpower=ten,
+ prefixproduct=times}
+\ProcessOptionsX[si]<opt>
+% \end{macrocode}
+%\begin{macro}{\si@extension}
+%\begin{macro}{\si@fileprefix}
+% To keep the code easy to maintain, the reusable filename components
+% are macros rather than literals.
+% \begin{macrocode}
+\newcommand*{\si@extension}{cfg}
+\newcommand*{\si@fileprefix}{si-}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@ifloaded}
+% A bit of borrowing from the \LaTeX\ kernel.\\
+%\cs{si@ifloaded}\marg{package}
+% \begin{macrocode}
+\newcommand*{\si@ifloaded}[1]{%
+ \@ifl@aded\si@extension{\si@fileprefix#1}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@loadfile}
+% Loading configuration files is handled here.\\
+%\cs{si@loadfile}\marg{file}
+% \begin{macrocode}
+\newcommand*{\si@loadfile}[1]{%
+ \si@ifloaded{#1}{}
+ {\InputIfFileExists{\si@fileprefix#1.\si@extension}
+ {}
+ {\si@log@err{Failed to load file
+ \si@fileprefix#1.\si@extension}
+ {The configuration file requested could not be found}}}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@requirecfgs}
+%\changes{v0.6a}{2008/02/20}{Changed temporary macro used to fix
+% bug with \pkg{memoir} and \textsc{koma}-script}
+%\begin{macro}{\si@tempb}
+% The configuration files depend on each other.\\
+%\cs{si@requirecfgs}\marg{cfg-file}
+% \begin{macrocode}
+\newcommand*{\si@requirecfgs}[1]{%
+ \@for\si@tempb:=#1\do{\si@loadfile{\si@tempb}}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@loademfile}
+% For emulation files, an additional check is made.\\
+%\cs{si@loademfile}\marg{file}
+% \begin{macrocode}
+\newcommand*{\si@loademfile}[1]{%
+ \@ifpackageloaded{#1}
+ {\si@log@err{Emulation clash for package `#1'}
+ {You have asked for emulation of package `#1'\MessageBreak
+ (perhaps by giving si a back-compatibility
+ option)\MessageBreak but the package is already loaded!}}
+ {\si@loadfile{#1}}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@emclash}
+% A macro for emulation clashes.
+% \begin{macrocode}
+\newcommand*{\si@emclash}[2]{%
+ \si@log@err{Emulation clash: `#1' and `#2'}
+ {You have asked for emulation of package `#1'\MessageBreak
+ but have already loaded emulation of `#2'}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@tempa}
+% A check is now made so that emulation takes place one file at a
+% time, and that each file is loaded only once.
+% \begin{macrocode}
+\ifx\@empty\si@emulate\@empty\else
+ \@for\si@tempa:=\si@emulate\do{%
+ \si@loademfile{\si@tempa}}
+\fi
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\si@expanddefault}
+%\begin{macro}{\si@tempa}
+%\begin{macro}{\si@tempb}
+%\begin{macro}{\si@tempc}
+% For turning the list of default choices into a loadable list.
+% \begin{macrocode}
+\newcommand*{\si@expanddefault}[2]{%
+\expandafter\ifx\expandafter\@empty\csname si@#1\endcsname\@empty
+\else
+ \def\si@tempb{default}
+ \def\si@tempc{}
+ \expandafter\@for\expandafter\si@tempa\expandafter:\expandafter
+ =\csname si@#1\endcsname\do{%
+ \ifx\si@tempa\si@tempb
+ \si@addtolist{\si@tempc}{#2}
+ \else
+ \si@addtolist{\si@tempc}{\si@tempa}
+ \fi}
+ \expandafter\edef\csname si@#1\endcsname{\si@tempc}
+ \expandafter\si@addtolist\expandafter{\csname si@no#1\endcsname}
+ {default}
+ \def\si@tempc{}
+ \expandafter\@for\expandafter\si@tempa\expandafter:\expandafter
+ =\csname si@#1\endcsname\do{%
+ \si@switchfalse
+ \expandafter\@for\expandafter\si@tempb\expandafter:\expandafter
+ =\csname si@no#1\endcsname\do{%
+ \ifx\si@tempa\si@tempb
+ \si@switchtrue
+ \fi
+ \ifsi@switch\else
+ \si@addtolist{\si@tempc}{\si@tempa}
+ \fi}}
+ \@for\si@tempa:=\si@tempc\do{%
+ \si@loadfile{\si@tempa}}
+\fi}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+% The configuration and abbreviation files are loaded.
+% \begin{macrocode}
+\si@expanddefault{load}{prefix,named,addn,prefixed,accepted,%
+ physical,abbr}
+% \end{macrocode}
+%\begin{macro}{\si@tempa}
+%\begin{macro}{\si@tempb}
+% The locale files are loaded; here there is a need to check on both
+% \opt{loadlocales} and \opt{loctolang}.
+% \begin{macrocode}
+\ifx\@empty\si@loadlocales\@empty\else
+ \@for\si@tempa:=\si@loadlocales\do{%
+ \si@loc@load{\si@tempa}}
+\fi
+% \end{macrocode}
+% For \opt{loctolang}.
+% \begin{macrocode}
+\ifx\@empty\si@loctolang\@empty\else
+ \def\si@tempa#1:#2\@nil{\si@loc@load{#1}}
+ \@for\si@tempb:=\si@loctolang\do{%
+ \expandafter\si@tempa\si@tempb:\@nil}
+ \AtBeginDocument{%
+ \@ifpackageloaded{babel}
+ {\def\si@tempa#1:#2:#3\@nil{%
+ \expandafter\addto\expandafter{\csname extras#2\endcsname}%
+ {\si@loc@set{#1}}}%
+ \@for\si@tempb:=\si@loctolang\do{%
+ \expandafter\si@tempa\si@tempb::\@nil}}
+ {\si@log@warn{babel not loaded - option\MessageBreak
+ loctolang ignored}}}
+\fi
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+% The very last job is to load a local configuration file, if one
+% exists.
+% \begin{macrocode}
+\IfFileExists{si.cfg}
+ {\si@log@inf{Local configuration file found}%
+ \InputIfFileExists{si.cfg}{}{}}
+ {}
+% \end{macrocode}
+%
+%\iffalse
+%</package>
+%\fi
+%
+%\section{Loadable modules}
+% To keep the package relatively clear, and to make maintenance
+% easier, the only units defined in the package itself are the base
+% units. Everything else is a loadable module (similar to the
+% approach in \unitsdef).
+%
+%\iffalse
+%<*prefix>
+%\fi
+%\subsection{Multiple prefixes}
+%\begin{macro}{\yocto}
+%\begin{macro}{\zepto}
+%\begin{macro}{\atto}
+%\begin{macro}{\femto}
+%\begin{macro}{\pico}
+%\begin{macro}{\nano}
+%\begin{macro}{\micro}
+%\begin{macro}{\Micro}
+%\begin{macro}{\milli}
+%\begin{macro}{\centi}
+%\begin{macro}{\deci}
+% The various SI multiple prefixes are defined here. First the small
+% powers.
+% \begin{macrocode}
+\ProvidesFile{si-prefix.cfg}
+ [2008/02/20 v.06a SI Multiple prefixes]
+\newprefix{\yocto}{-24}{y}
+\newprefix{\zepto}{-21}{z}
+\newprefix{\atto}{-18}{a}
+\newprefix{\femto}{-15}{f}
+\newprefix{\pico}{-12}{p}
+\newprefix{\nano}{-9}{n}
+% \end{macrocode}
+% Some testing is needed for \unitsdef compatibility.
+% \begin{macrocode}
+\ifsi@old@OHM
+ \newprefix{\Micro}{-6}{\si@sym@mu}
+\else
+ \ifsi@gensymb\else
+ \newprefix{\micro}{-6}{\si@sym@mu}
+ \fi
+\fi
+\newprefix{\milli}{-3}{m}
+\newprefix{\centi}{-2}{c}
+\newprefix{\deci}{-1}{d}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\deca}
+%\begin{macro}{\hecto}
+%\begin{macro}{\kilo}
+%\begin{macro}{\mega}
+%\begin{macro}{\giga}
+%\begin{macro}{\tera}
+%\begin{macro}{\peta}
+%\begin{macro}{\exa}
+%\begin{macro}{\zetta}
+%\begin{macro}{\yotta}
+% Now the large ones.
+% \begin{macrocode}
+\newprefix{\deca}{1}{da}
+\newprefix{\hecto}{2}{h}
+\newprefix{\kilo}{3}{k}
+\newprefix{\mega}{6}{M}
+\newprefix{\giga}{9}{G}
+\newprefix{\tera}{12}{T}
+\newprefix{\peta}{15}{P}
+\newprefix{\exa}{18}{E}
+\newprefix{\zetta}{21}{Z}
+\newprefix{\yotta}{24}{Y}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\deka}
+% Apparently, ``deka'' is common in the US for deca.
+% \begin{macrocode}
+\newprefix{\deka}{1}{da}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\gram}
+%\begin{macro}{\kilogram}
+% As the base unit of mass is the kilogram, rather than the gram, a
+% bit of extra work is needed; by default the package only defines
+% \cs{kilogram}, but with the prefixes available, this is altered to
+% be \cs{kilo}\cs{gram}. For that, the \cs{gram} must be defined first.
+% \begin{macrocode}
+\newunit{\gram}{g}
+\renewunit{\kilogram}{\kilo\gram}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\iffalse
+%</prefix>
+%<*named>
+%\fi
+%\subsection{Derived units with specific names}
+%\begin{macro}{\becquerel}
+%\begin{macro}{\coulomb}
+%\begin{macro}{\farad}
+%\begin{macro}{\Gray}
+%\begin{macro}{\hertz}
+%\begin{macro}{\henry}
+%\begin{macro}{\joule}
+%\begin{macro}{\katal}
+%\begin{macro}{\lumen}
+%\begin{macro}{\lux}
+%\begin{macro}{\newton}
+% Derived units with specific names and symbols are defined. Litre
+% is an awkward one, but here the UK standard is used.
+% \begin{macrocode}
+\ProvidesFile{si-named.cfg}
+ [2008/02/20 v.06a SI Named units]
+\newunit{\becquerel}{Bq}
+\newunit{\coulomb}{C}
+\newunit{\farad}{F}
+\newunit{\Gray}{Gy}
+\newunit{\hertz}{Hz}
+\newunit{\henry}{H}
+\newunit{\joule}{J}
+\newunit{\katal}{kat}
+\newunit{\lumen}{lm}
+\newunit{\lux}{lx}
+\newunit{\newton}{N}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\ohm}
+%\begin{macro}{\Ohm}
+%\begin{macro}{\pascal}
+%\begin{macro}{\siemens}
+%\begin{macro}{\sievert}
+%\begin{macro}{\tesla}
+%\begin{macro}{\volt}
+%\begin{macro}{\watt}
+%\begin{macro}{\weber}
+% Some testing is needed for \unitsdef compatibility.
+% \begin{macrocode}
+\ifsi@old@OHM
+ \newunit{\Ohm}{\si@sym@Omega}
+\else
+ \ifsi@gensymb\else
+% \end{macrocode}
+% To be on the safe side, use \cs{provideunit}.
+% \begin{macrocode}
+ \provideunit{\ohm}{\si@sym@Omega}
+ \fi
+\fi
+\newunit{\pascal}{Pa}
+\newunit{\siemens}{S}
+\newunit{\sievert}{Sv}
+\newunit{\tesla}{T}
+\newunit{\volt}{V}
+\newunit{\watt}{W}
+\newunit{\weber}{Wb}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\celsius}
+%\begin{macro}{\Celsius}
+% The degree celsius is a named unit.
+% \begin{macrocode}
+\ifsi@old@OHM
+ \newunit{\Celsius}{\si@sym@celsius}
+\else
+ \ifsi@gensymb\else
+ \newunit{\celsius}{\si@sym@celsius}
+ \fi
+\fi
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\radian}
+%\begin{macro}{\steradian}
+% The radian and steradian are officially derived units.
+% \begin{macrocode}
+\newunit{\radian}{rad}
+\newunit{\steradian}{sr}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\iffalse
+%</named>
+%<*prefixed>
+%\fi
+%\subsection{Units with prefixes}
+% As in \unitsdef, some commonly used prefixed units are set up.
+% This requires \file{si-prefix.cfg} and \file{si-named.cfg}.
+% \begin{macrocode}
+\ProvidesFile{si-prefixed.cfg}
+ [2008/02/20 v.06a SI Prefixed units]
+\si@requirecfgs{prefix,named,accepted,physical}
+% \end{macrocode}
+%\begin{macro}{\picometre}
+%\begin{macro}{\nanometre}
+%\begin{macro}{\micrometre}
+%\begin{macro}{\millimetre}
+%\begin{macro}{\centimetre}
+%\begin{macro}{\decimetre}
+%\begin{macro}{\kilometre}
+% Extra distances.
+% \begin{macrocode}
+\newunit{\picometre}{\pico\metre}
+\newunit{\nanometre}{\nano\metre}
+\newunit{\micrometre}{\micro\metre}
+\newunit{\millimetre}{\milli\metre}
+\newunit{\centimetre}{\centi\metre}
+\newunit{\decimetre}{\deci\metre}
+\newunit{\kilometre}{\kilo\metre}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\femtogram}
+%\begin{macro}{\picogram}
+%\begin{macro}{\nanogram}
+%\begin{macro}{\microgram}
+%\begin{macro}{\milligram}
+% Extra masses.
+% \begin{macrocode}
+\newunit{\femtogram}{\femto\gram}
+\newunit{\picogram}{\pico\gram}
+\newunit{\nanogram}{\nano\gram}
+\newunit{\microgram}{\micro\gram}
+\newunit{\milligram}{\milli\gram}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\femtomole}
+%\begin{macro}{\picomole}
+%\begin{macro}{\nanomole}
+%\begin{macro}{\micromole}
+%\begin{macro}{\millimole}
+% Now some moles.
+% \begin{macrocode}
+\newunit{\femtomole}{\femto\mole}
+\newunit{\picomole}{\pico\mole}
+\newunit{\nanomole}{\nano\mole}
+\newunit{\micromole}{\micro\mole}
+\newunit{\millimole}{\milli\mole}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\attosecond}
+%\begin{macro}{\femtosecond}
+%\begin{macro}{\picosecond}
+%\begin{macro}{\nanosecond}
+%\begin{macro}{\microsecond}
+%\begin{macro}{\millisecond}
+% Prefixed seconds.
+% \begin{macrocode}
+\newunit{\attosecond}{\atto\second}
+\newunit{\femtosecond}{\femto\second}
+\newunit{\picosecond}{\pico\second}
+\newunit{\nanosecond}{\nano\second}
+\newunit{\microsecond}{\micro\second}
+\newunit{\millisecond}{\milli\second}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\picoampere}
+%\begin{macro}{\nanoampere}
+%\begin{macro}{\microampere}
+%\begin{macro}{\milliampere}
+%\begin{macro}{\kiloampere}
+% The last prefixed base units are amperes.
+% \begin{macrocode}
+\newunit{\picoampere}{\pico\ampere}
+\newunit{\nanoampere}{\nano\ampere}
+\newunit{\microampere}{\micro\ampere}
+\newunit{\milliampere}{\milli\ampere}
+\newunit{\kiloampere}{\kilo\ampere}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\millivolt}
+%\begin{macro}{\kilovolt}
+%\begin{macro}{\milliwatt}
+%\begin{macro}{\kilowatt}
+%\begin{macro}{\megawatt}
+%\begin{macro}{\femtofarad}
+%\begin{macro}{\picofarad}
+%\begin{macro}{\nanofarad}
+%\begin{macro}{\microfarad}
+%\begin{macro}{\millifarad}
+%\begin{macro}{\millisiemens}
+% More electricity-related units.
+% \begin{macrocode}
+\newunit{\millivolt}{\milli\volt}
+\newunit{\kilovolt}{\nano\volt}
+\newunit{\milliwatt}{\milli\watt}
+\newunit{\kilowatt}{\kilo\watt}
+\newunit{\megawatt}{\mega\watt}
+\newunit{\femtofarad}{\femto\farad}
+\newunit{\picofarad}{\pico\farad}
+\newunit{\nanofarad}{\nano\farad}
+\newunit{\microfarad}{\micro\farad}
+\newunit{\millifarad}{\milli\farad}
+\newunit{\millisiemens}{\milli\siemens}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\kiloohm}
+%\begin{macro}{\megaohm}
+%\begin{macro}{\gigaohm}
+% For resistance, checks are needed again for the definition of
+% \cs{ohm}.
+% \begin{macrocode}
+\ifsi@old@OHM
+ \newunit{\kiloohm}{\kilo\Ohm}
+ \newunit{\megaohm}{\mega\Ohm}
+ \newunit{\gigaohm}{\giga\Ohm}
+\else
+ \ifsi@gensymb\else
+ \newunit{\kiloohm}{\kilo\ohm}
+ \newunit{\megaohm}{\mega\ohm}
+ \newunit{\gigaohm}{\giga\ohm}
+ \fi
+\fi
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\microlitre}
+%\begin{macro}{\millilitre}
+%\begin{macro}{\cubicmetre}
+%\begin{macro}{\cubiccentimetre}
+%\begin{macro}{\centimetrecubed}
+%\begin{macro}{\cubicmicrometre}
+%\begin{macro}{\cubicmillimetre}
+%\begin{macro}{\cubicdecimetre}
+% Volumes (unlike \unitsdef, with litre and metre spelled
+% correctly). Only \cs{millilitre} and \cs{microlitre} are defined
+% as they are the two officially-sanctioned prefixes for the litre.
+% \begin{macrocode}
+\newunit{\microlitre}{\micro\litre}
+\newunit{\millilitre}{\milli\litre}
+\newunit{\cubicmetre}{\metre\cubed}
+\newunit{\cubiccentimetre}{\centi\metre\cubed}
+\newunit{\centimetrecubed}{\centi\metre\cubed}
+\newunit{\cubicmicrometre}{\micro\metre\cubed}
+\newunit{\cubicmillimetre}{\milli\metre\cubed}
+\newunit{\cubicdecimetre}{\cubic\deci\metre}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\squaremetre}
+%\begin{macro}{\squarecentimetre}
+%\begin{macro}{\squarekilometre}
+% Areas, with metre spelled corrected; \cs{are} and \cs{hectare} are
+% in the ``temporarily accepted'' file.
+% \begin{macrocode}
+\newunit{\squaremetre}{\Square\metre}
+\newunit{\squarecentimetre}{\Square\centi\metre}
+\newunit{\squarekilometre}{\Square\kilo\metre}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\millijoule}
+%\begin{macro}{\kilojoule}
+%\begin{macro}{\megajoule}
+%\begin{macro}{\millielectronvolt}
+%\begin{macro}{\kiloelectronvolt}
+%\begin{macro}{\megaelectronvolt}
+%\begin{macro}{\gigaelectronvolt}
+%\begin{macro}{\teraelectronvolt}
+% Some energy is needed by now!
+% \begin{macrocode}
+\newunit{\millijoule}{\milli\joule}
+\newunit{\kilojoule}{\kilo\joule}
+\newunit{\megajoule}{\mega\joule}
+\newunit{\millielectronvolt}{\milli\electronvolt}
+\newunit{\kiloelectronvolt}{\kilo\electronvolt}
+\newunit{\megaelectronvolt}{\mega\electronvolt}
+\newunit{\gigaelectronvolt}{\giga\electronvolt}
+\newunit{\teraelectronvolt}{\tera\electronvolt}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\millihertz}
+%\begin{macro}{\kilohertz}
+%\begin{macro}{\megahertz}
+%\begin{macro}{\gigahertz}
+%\begin{macro}{\terahertz}
+% Frequencies.
+% \begin{macrocode}
+\newunit{\millihertz}{\milli\hertz}
+\newunit{\kilohertz}{\kilo\hertz}
+\newunit{\megahertz}{\mega\hertz}
+\newunit{\gigahertz}{\giga\hertz}
+\newunit{\terahertz}{\tera\hertz}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\millinewton}
+%\begin{macro}{\kilonewton}
+%\begin{macro}{\hectopascal}
+%\begin{macro}{\megabecquerel}
+%\begin{macro}{\millisievert}
+% A few more from various areas.
+% \begin{macrocode}
+\newunit{\millinewton}{\milli\newton}
+\newunit{\kilonewton}{\kilo\newton}
+\newunit{\hectopascal}{\hecto\pascal}
+\newunit{\megabecquerel}{\mega\becquerel}
+\newunit{\millisievert}{\milli\sievert}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\iffalse
+%</prefixed>
+%<*abbr>
+%\fi
+%\subsection{Abbreviated units}
+%\begin{macro}{\pA}
+%\begin{macro}{\nA}
+%\begin{macro}{\micA}
+%\begin{macro}{\mA}
+%\begin{macro}{\kA}
+% The abbreviated units are sorted in one file. To allow
+% back-compatibility with \unitsdef, each one is inside an \cs{if}
+% block for the appropriate option. First currents.
+% \begin{macrocode}
+\ProvidesFile{si-abbr.cfg}
+ [2008/02/20 v.06a Abbreviated units]
+\si@requirecfgs{prefix,named,accepted,physical}
+\newunit{\pA}{\pico\ampere}
+\newunit{\nA}{\nano\ampere}
+\newunit{\micA}{\micro\ampere}
+\newunit{\mA}{\milli\ampere}
+\newunit{\kA}{\kilo\ampere}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\Hz}
+%\begin{macro}{\mHz}
+%\begin{macro}{\kHz}
+%\begin{macro}{\MHz}
+%\begin{macro}{\GHz}
+%\begin{macro}{\THz}
+% Then frequencies.
+% \begin{macrocode}
+\newunit{\Hz}{\hertz}
+\newunit{\mHz}{\milli\hertz}
+\newunit{\kHz}{\kilo\hertz}
+\newunit{\MHz}{\mega\hertz}
+\newunit{\GHz}{\giga\hertz}
+\newunit{\THz}{\tera\hertz}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\fmol}
+%\begin{macro}{\pmol}
+%\begin{macro}{\nmol}
+%\begin{macro}{\micmol}
+%\begin{macro}{\mmol}
+% Amounts of substance.
+% \begin{macrocode}
+\newunit{\fmol}{\femto\mole}
+\newunit{\pmol}{\pico\mole}
+\newunit{\nmol}{\nano\mole}
+\newunit{\micmol}{\micro\mole}
+\newunit{\mmol}{\milli\mole}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\kV}
+%\begin{macro}{\mV}
+% Potentials.
+% \begin{macrocode}
+\newunit{\kV}{\kilo\volt}
+\newunit{\mV}{\milli\volt}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\ml}
+%\begin{macro}{\micl}
+%\begin{macro}{\cmc}
+%\begin{macro}{\dmc}
+% Volumes.
+% \begin{macrocode}
+\newunit{\ml}{\milli\litre}
+\newunit{\micl}{\micro\litre}
+\newunit{\cmc}{\centi\metre\cubed}
+\newunit{\dmc}{\deci\metre\cubed}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\kg}
+%\begin{macro}{\fg}
+%\begin{macro}{\pg}
+%\begin{macro}{\nanog}
+%\begin{macro}{\micg}
+%\begin{macro}{\mg}
+%\begin{macro}{\amu}
+% Masses.
+% \begin{macrocode}
+\newunit{\kg}{\kilo\gram}
+% \end{macrocode}
+% There is a name clash with \pkg{babel} here in French; hopefully
+% there will not be too many complaints.
+% \begin{macrocode}
+\provideunit{\fg}{\femto\gram}
+\newunit{\pg}{\pico\gram}
+\newunit{\nanog}{\nano\gram}
+\newunit{\micg}{\micro\gram}
+\newunit{\mg}{\milli\gram}
+\newunit{\amu}{\atomicmass}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\kJ}
+%\begin{macro}{\eV}
+%\begin{macro}{\meV}
+%\begin{macro}{\keV}
+%\begin{macro}{\MeV}
+%\begin{macro}{\GeV}
+%\begin{macro}{\TeV}
+% Energies.
+% \begin{macrocode}
+\newunit{\kJ}{\kilo\joule}
+\newunit{\eV}{\electronvolt}
+\newunit{\meV}{\milli\electronvolt}
+\newunit{\keV}{\kilo\electronvolt}
+\newunit{\MeV}{\mega\electronvolt}
+\newunit{\GeV}{\giga\electronvolt}
+\newunit{\TeV}{\tera\electronvolt}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\picom}
+%\begin{macro}{\nm}
+%\begin{macro}{\micm}
+%\begin{macro}{\mm}
+%\begin{macro}{\cm}
+%\begin{macro}{\dm}
+%\begin{macro}{\km}
+% Lengths.
+% \begin{macrocode}
+\newunit{\picom}{\pico\metre}
+\newunit{\nm}{\nano\metre}
+\newunit{\micm}{\micro\metre}
+\newunit{\mm}{\milli\metre}
+\newunit{\cm}{\centi\metre}
+\newunit{\dm}{\deci\metre}
+\newunit{\km}{\kilo\metre}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\Sec}
+%\begin{macro}{\as}
+%\begin{macro}{\fs}
+%\begin{macro}{\ps}
+%\begin{macro}{\ns}
+%\begin{macro}{\mics}
+%\begin{macro}{\ms}
+% Finally, times.
+% \begin{macrocode}
+\newunit{\Sec}{\second}
+\newunit{\as}{\atto\second}
+\newunit{\fs}{\femto\second}
+% \end{macrocode}
+% The letter class (and others) define \cs{ps} for postscripts, so
+% \cs{provideunit} is best here.
+% \begin{macrocode}
+\provideunit{\ps}{\pico\second}
+\newunit{\ns}{\nano\second}
+\newunit{\mics}{\micro\second}
+\newunit{\ms}{\milli\second}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\iffalse
+%</abbr>
+%<*addn>
+%\fi
+%\subsection{Additional (temporary) SI units}
+%\begin{macro}{\angstrom}
+%\begin{macro}{\are}
+%\begin{macro}{\hectare}
+%\begin{macro}{\barn}
+%\begin{macro}{\BAR}
+%\begin{macro}{\millibar}
+%\begin{macro}{\gal}
+%\begin{macro}{\curie}
+%\begin{macro}{\roentgen}
+%\begin{macro}{\rad}
+%\begin{macro}{\rem}
+% Some units are ``temporarily'' acceptable for use in the SI system.
+% These are defined here, although some are in very general use.
+% \begin{macrocode}
+\ProvidesFile{si-addn.cfg}
+ [2008/02/20 v.06a SI Additional units]
+\newunit{\angstrom}{\si@sym@ringA}
+\newunit{\are}{a}
+\newunit{\hectare}{\hecto\are}
+\newunit{\barn}{b}
+\newunit{\BAR}{bar}
+\newunit{\millibar}{\milli\BAR}
+\newunit{\gal}{Gal}
+\newunit{\curie}{Ci}
+\newunit{\roentgen}{R}
+\newunit{\rad}{rad}
+\newunit{\rem}{rem}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\iffalse
+%</addn>
+%<*accepted>
+%\fi
+%\subsection{Units accepted for use with SI}
+% The units which are accepted but do not fit in the above, plus
+% \cs{percent} which seems to fit into this category.
+%\begin{macro}{\minute}
+%\begin{macro}{\hour}
+%\begin{macro}{\Day}
+%\begin{macro}{\degree}
+%\begin{macro}{\Degree}
+%\begin{macro}{\arcmin}
+%\begin{macro}{\arcsec}
+%\begin{macro}{\litre}
+%\begin{macro}{\tonne}
+%\begin{macro}{\neper}
+%\begin{macro}{\bel}
+%\begin{macro}{\percent}
+% \begin{macrocode}
+\ProvidesFile{si-accepted.cfg}
+ [2008/02/20 v.06a SI accepted units]
+\newunit{\minute}{min}
+\newunit{\hour}{h}
+\newunit{\Day}{d}
+\ifsi@old@OHM
+ \newunit[valuesep=none]{\Degree}{\si@sym@degree}
+\else
+ \ifsi@gensymb\else
+ \newunit[valuesep=none]{\degree}{\si@sym@degree}
+ \fi
+\fi
+\newunit[valuesep=none]{\arcmin}{\si@sym@minute}
+\newunit[valuesep=none]{\arcsec}{\si@sym@second}
+\newunit{\litre}{l}
+\newunit{\tonne}{t}
+\newunit{\neper}{Np}
+\newunit{\bel}{B}
+\newunit{\percent}{\%}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\iffalse
+%</accepted>
+%<*physical>
+%\fi
+%\subsection{Units based on physical measurements}
+%\begin{macro}{\si@eVspacea}
+%\begin{macro}{\si@eVspaceb}
+%\begin{macro}{\electronvolt}
+%\begin{macro}{\atomicmassunit}
+%\begin{macro}{\atomicmass}
+%\begin{macro}{\dalton}
+% A few units based on physical measurements exist. For \cs{eV}, the need
+% for a negative kern does make things a bit complicated.
+% \begin{macrocode}
+\ProvidesFile{si-physical.cfg}
+ [2008/02/20 v.06a SI physically-measured units]
+\newcommand*{\si@eVspacea}{\text{\kern-\si@eVcorra}}%
+\newcommand*{\si@eVspaceb}{\text{\kern-\si@eVcorrb}}%
+\newunit{\electronvolt}{e\protect\si@eVspacea V\protect\si@eVspaceb}
+\newunit{\atomicmass}{u}
+\newunit{\atomicmassunit}{u}
+\newunit{\dalton}{Da}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\iffalse
+%</physical>
+%\fi
+%
+%\section{Additional configurations}
+% To provide flexibility for people in specific areas, specialised
+% units can be set up. These are then stored separately to ease use.
+%
+%\iffalse
+%<*synchem>
+%\fi
+%\subsection{Synthetic chemistry}
+%\begin{macro}{\mmHg}
+%\begin{macro}{\molar}
+%\begin{macro}{\Molar}
+%\begin{macro}{\torr}
+% Some useful units for synthetic chemists; although \cs{mmHg} and
+% \cs{Molar} are outside of the SI system, they are used a lot.
+% These are set up using \cs{provideunit} as people may have their
+% own definitions.
+% \begin{macrocode}
+\ProvidesFile{si-synchem.cfg}
+ [2008/02/20 v.06a Units for synthetic chemists]
+\si@requirecfgs{prefix}
+\newunit{\mmHg}{mmHg}
+\newunit{\molar}{\mole\per\cubic\deci\metre}
+\newunit{\Molar}{\textsc{m}}
+\newunit{\torr}{Torr}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\iffalse
+%</synchem>
+%<*hep>
+%\fi
+%\subsection{High-energy physics}
+% The units here basically add the units from the \cs{hepunits}
+% package which are not defined elsewhere here. It is not entirely
+% clear if \cs{mrad} refers to radians or rad: feedback would be
+% welcome. This set of commands is not in the emulation block as it
+% does \emph{not} seek to emulate \pkg{hepunits}: that package is a
+% blot-on to \SIunits. The units here have the same name as those in
+% \pkg{hepunits} but stick with the new package interface.
+% \begin{macrocode}
+\ProvidesFile{si-hep.cfg}
+ [2008/02/20 v.06a Units for high-energy physics]
+\si@requirecfgs{prefix,named}
+% \end{macrocode}
+%\begin{macro}{\micron}
+%\begin{macro}{\mrad}
+%\begin{macro}{\gauss}
+% The first units are not specific to high-energy physics, but are
+% not defined elsewhere in \currpkg.
+% \begin{macrocode}
+\newunit{\micron}{\micro\metre}
+\newunit{\mrad}{\milli\radian}
+\newunit{\gauss}{G}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\nanobarn}
+%\begin{macro}{\picobarn}
+%\begin{macro}{\femtobarn}
+%\begin{macro}{\attobarn}
+%\begin{macro}{\zeptobarn}
+%\begin{macro}{\yoctobarn}
+% Various prefixed barns
+% \begin{macrocode}
+\newunit{\nanobarn}{\nano\barn}
+\newunit{\picobarn}{\pico\barn}
+\newunit{\femtobarn}{\femto\barn}
+\newunit{\attobarn}{\atto\barn}
+\newunit{\zeptobarn}{\zepto\barn}
+\newunit{\yoctobarn}{\yocto\barn}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\invbarn}
+%\begin{macro}{\invnanobarn}
+%\begin{macro}{\invpicobarn}
+%\begin{macro}{\invfemtobarn}
+%\begin{macro}{\invattobarn}
+%\begin{macro}{\invzeptobarn}
+%\begin{macro}{\invyoctobarn}
+% Inverses barn units.
+% \begin{macrocode}
+\newunit{\invbarn}{\per\barn}
+\newunit{\invnanobarn}{\per\nano\barn}
+\newunit{\invpicobarn}{\per\pico\barn}
+\newunit{\invfemtobarn}{\per\femto\barn}
+\newunit{\invattobarn}{\per\atto\barn}
+\newunit{\invzeptobarn}{\per\zepto\barn}
+\newunit{\invyoctobarn}{\per\yocto\barn}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\invnb}
+%\begin{macro}{\invpb}
+%\begin{macro}{\invfb}
+%\begin{macro}{\invab}
+%\begin{macro}{\invzb}
+%\begin{macro}{\invyb}
+% Also available abbreviated.
+% \begin{macrocode}
+\newunit{\invnb}{\per\nano\barn}
+\newunit{\invpb}{\per\pico\barn}
+\newunit{\invfb}{\per\femto\barn}
+\newunit{\invab}{\per\atto\barn}
+\newunit{\invzb}{\per\zepto\barn}
+\newunit{\invyb}{\per\yocto\barn}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\invcmsqpersecond}
+%\begin{macro}{\invcmsqpersec}
+%\begin{macro}{\lumiunits}
+% Luminosity.
+% \begin{macrocode}
+\newunit{\invcmsqpersecond}{\per\Square\centi\metre\per\second}
+\newunit{\invcmsqpersec}{\per\Square\centi\metre\per\second}
+\newunit{\lumiunits}{\per\Square\centi\metre\per\second}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\clight}
+% The speed of light is used in units for the area, although of course
+% it is not strictly a unit.
+% \begin{macrocode}
+\newunit{\clight}{\ensuremath{\mathnormal{c}}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\inveV}
+%\begin{macro}{\minveV}
+%\begin{macro}{\minveV}
+%\begin{macro}{\kinveV}
+%\begin{macro}{\MinveV}
+%\begin{macro}{\GinveV}
+%\begin{macro}{\TinveV}
+% The inverse of an electron-volt, plus prefixes.
+% \begin{macrocode}
+\newunit{\inveV}{\per\electronvolt}
+\newunit{\minveV}{\milli\per\electronvolt}
+\newunit{\kinveV}{\kilo\per\electronvolt}
+\newunit{\MinveV}{\mega\per\electronvolt}
+\newunit{\GinveV}{\giga\per\electronvolt}
+\newunit{\TinveV}{\tera\per\electronvolt}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\eVoverc}
+%\begin{macro}{\eVovercsq}
+% Some combinations of electron-volts and the speed of light. As
+% these are called |over|, they are set with a slash. The
+% \opt{eVcorrb} values have been set for Computer Modern.
+% \begin{macrocode}
+\newunit[per=slash,eVcorrb=0.6ex]{\eVoverc}
+ {\electronvolt\per\clight}
+\newunit[per=slash,eVcorrb=0.6ex]{\eVovercsq}
+ {\electronvolt\per\Square\clight}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\meVoverc}
+%\begin{macro}{\keVoverc}
+%\begin{macro}{\MeVoverc}
+%\begin{macro}{\GeVoverc}
+%\begin{macro}{\TeVoverc}
+% Prefixed combinations, first of the speed of light.
+% \begin{macrocode}
+\newunit[per=slash,eVcorrb=0.6ex]{\meVoverc}
+ {\milli\electronvolt\per\clight}
+\newunit[per=slash,eVcorrb=0.6ex]{\keVoverc}
+ {\kilo\electronvolt\per\clight}
+\newunit[per=slash,eVcorrb=0.6ex]{\MeVoverc}
+ {\mega\electronvolt\per\clight}
+\newunit[per=slash,eVcorrb=0.6ex]{\GeVoverc}
+ {\giga\electronvolt\per\clight}
+\newunit[per=slash,eVcorrb=0.6ex]{\TeVoverc}
+ {\tera\electronvolt\per\clight}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\meVovercsq}
+%\begin{macro}{\keVovercsq}
+%\begin{macro}{\MeVovercsq}
+%\begin{macro}{\GeVovercsq}
+%\begin{macro}{\TeVovercsq}
+% Then of the square.
+% \begin{macrocode}
+\newunit[per=slash,eVcorrb=0.6ex]{\meVovercsq}
+ {\milli\electronvolt\per\Square\clight}
+\newunit[per=slash,eVcorrb=0.6ex]{\keVovercsq}
+ {\kilo\electronvolt\per\Square\clight}
+\newunit[per=slash,eVcorrb=0.6ex]{\MeVovercsq}
+ {\mega\electronvolt\per\Square\clight}
+\newunit[per=slash,eVcorrb=0.6ex]{\GeVovercsq}
+ {\giga\electronvolt\per\Square\clight}
+\newunit[per=slash,eVcorrb=0.6ex]{\TeVovercsq}
+ {\tera\electronvolt\per\Square\clight}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\iffalse
+%</hep>
+%<*binary>
+%\fi
+%\subsection{Binary units}
+%\begin{macro}{\kibi}
+%\begin{macro}{\mebi}
+%\begin{macro}{\gibi}
+%\begin{macro}{\tebi}
+%\begin{macro}{\pebi}
+%\begin{macro}{\exbi}
+% The binary units, as specified by the IEC and made available by
+% \SIunits. First, the binary prefixes.
+% \begin{macrocode}
+\ProvidesFile{si-binary.cfg}
+ [2008/02/20 v.06a Binary units]
+\newprefix{\kibi}{10}{Ki}
+\newprefix{\mebi}{20}{Mi}
+\newprefix{\gibi}{30}{Gi}
+\newprefix{\tebi}{40}{Ti}
+\newprefix{\pebi}{50}{Pi}
+\newprefix{\exbi}{60}{Ei}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\bit}
+%\begin{macro}{\byte}
+% Now the units.
+% \begin{macrocode}
+\newunit{\bit}{bit}
+\newunit{\byte}{B}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%
+%\iffalse
+%</binary>
+%\fi
+%
+%\section{Loadable locales}
+% Some short files to provide the correct settings for various places.
+%
+%\iffalse
+%<*UK>
+%\fi
+%\subsection{United Kingdom}
+% This is also used for the USA, and is the default.
+% \begin{macrocode}
+\ProvidesFile{si-UK.cfg}
+ [2008/02/20 v.06a UK locale]
+\sisetup{
+ unitsep=thin,
+ expproduct=times,
+ valuesep=thin,
+ decimalsign=fullstop,
+ digitsep=thin,
+ sepfour=false}
+% \end{macrocode}
+%\iffalse
+%</UK>
+%<*USA>
+%\fi
+%\subsection{United States}
+% The same as for the UK.
+% \begin{macrocode}
+\ProvidesFile{si-USA.cfg}
+ [2008/02/20 v.06a USA locale]
+\sisetup{
+ unitsep=thin,
+ expproduct=times,
+ valuesep=thin,
+ decimalsign=fullstop,
+ digitsep=thin,
+ sepfour=false}
+% \end{macrocode}
+%\iffalse
+%</USA>
+%\fi
+%\iffalse
+%<*germany>
+%\fi
+%\subsection{Germany}
+% Germany, hopefully.
+% \begin{macrocode}
+\ProvidesFile{si-germany.cfg}
+ [2008/02/20 v.06a Germany locale]
+\sisetup{
+ unitsep=cdot,
+ valuesep=thin,
+ decimalsign=comma,
+ expproduct=cdot,
+ digitsep=thin,
+ sepfour=false}
+% \end{macrocode}
+%\iffalse
+%</germany>
+%\fi
+%\iffalse
+%<*south-africa>
+%\fi
+%\subsection{South Africa}
+% Taken from \sistyle.
+% \begin{macrocode}
+\ProvidesFile{si-south-africa.loc}
+ [2008/02/20 v.06a UK Locale]
+\sisetup{
+ unitsep=cdot,
+ valuesep=thin,
+ expproduct=times,
+ decimalsign=comma,
+ digitsep=thin,
+ sepfour=false}
+% \end{macrocode}
+%\iffalse
+%</south-africa>
+%\fi
+%\section{Emulation code}
+% Each emulation mode loads an appropriate definition file. This
+% then alters the package defaults, and defines new macros provided
+% by the emulated package.
+%
+%\iffalse
+%<*units>
+%\fi
+%\subsection{\unitspkg}
+% The very first thing to do here is a reload check, as things
+% could go wrong with \unitsdef emulation.
+% \begin{macrocode}
+\si@ifloaded{units}{\endinput}{}
+% \end{macrocode}
+% The \unitspkg package is quite easy to emulate, as it only has a
+% few options and macros. There is also no error checking in
+% \unitspkg for conflicting options, so users probably expect none.
+% \begin{macrocode}
+\ProvidesFile{si-units.cfg}
+ [2008/02/20 v.06a Emulation of units]
+\si@ifloaded{SIunits}
+ {\si@emclash{units}{SIunits}\endinput}{}
+\si@ifloaded{sistyle}
+ {\si@emclash{units}{sistyle}\endinput}{}
+% \end{macrocode}
+% To emulate \unitspkg, \cs{per} must give fractions.
+% \begin{macrocode}
+\sisetup{per=fraction,fraction=nice,obeybold,inlinebold=maths,
+ ,obeymode}
+\ifsi@old@tight
+ \sisetup{valuesep=thin}
+\fi
+\ifsi@old@loose
+ \sisetup{valuesep=space}
+\fi
+\ifsi@old@ugly
+ \sisetup{fraction=ugly}
+\fi
+% \end{macrocode}
+%\begin{macro}{\unit}
+% The \unitspkg version of \cs{unit} is similar to \cs{SI}. Here and
+% in \cs{unitfrac} the \cs{num} macro is used; thus the number given
+% really has to be a number. However, if users are using \currpkg
+% rather than \unitspkg they should expect more checking of input. As
+% the \unitspkg package uses the current mode, this has to be
+% detected.\\
+%\cs{unit}\oarg{num}\marg{unit}
+% \begin{macrocode}
+\DeclareRobustCommand*{\unit}[2][]{%
+ \ifmmode
+ \SI{#1}{#2}%
+ \else
+ \SI[obeyfamily,obeyitalic]{#1}{#2}%
+ \fi}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\unitfrac}
+% \cs{unitfrac} is a bit more of a hack.\\
+%\cs{unitfrac}\oarg{num}\marg{numerator}\marg{denominator}
+% \begin{macrocode}
+\DeclareRobustCommand*{\unitfrac}[3][]{%
+ \begingroup
+ \si@fam@mode%
+ \ifmmode\else
+ \sisetup{obeyfamily,obeyitalic}%
+ \fi
+ \si@ifnotmtarg{#1}
+ {\num{#1}\ensuremath{\si@valuesep}}%
+ \si@frac{#2}{#3}
+ \endgroup}
+% \end{macrocode}
+%\end{macro}
+%\iffalse
+%</units>
+%\fi
+%\iffalse
+%<*unitsdef>
+%\fi
+%\subsection{\unitsdef}
+% The package begins with the usual identification of what is
+% happening. Although \file{si-units.cfg} makes the same checks,
+% the error will make more sense if it comes here, in the event of a
+% clash.
+% \begin{macrocode}
+\ProvidesFile{si-unitsdef.cfg}
+ [2008/02/20 v.06a Emulation of unitsdef]
+\si@ifloaded{SIunits}
+ {\si@emclash{unitsdef}{SIunits}\endinput}{}
+\si@ifloaded{sistyle}
+ {\si@emclash{unitsdef}{sistyle}\endinput}{}
+% \end{macrocode}
+% Emulation of \unitspkg is needed for \unitsdef to work.
+% \begin{macrocode}
+\si@ifloaded{units}{}
+ {\InputIfFileExists{\si@fileprefix units.\si@cfgextension}
+ {}
+ {\si@log@err{Could not load \si@fileprefix
+ units.\si@cfgextension}
+ {The file \si@fileprefix units.\si@cfgextension is
+ required to emulate\MessageBreak
+ unitsdef, but cannot be found\MessageBreak
+ Is the si package properly installed?}
+ \endinput}}
+% \end{macrocode}
+% The \unitsdef package loads some packages that \currpkg does not.
+% In particular, it loads \pkg{textcomp} and \pkg{fontenc}. This
+% could be important for output, and so the same is done here.
+% \begin{macrocode}
+\RequirePackage{textcomp}
+\RequirePackage[T1]{fontenc}
+% \end{macrocode}
+% The multitude of package options for \unitsdef need to be handled.
+% \begin{macrocode}
+\sisetup{mode=text}
+\ifsi@old@noxspace
+ \sisetup{xspace=false}
+\fi
+% \end{macrocode}
+% The various options for loading unit abbreviations have to be
+% handled. Here, any request to avoid abbreviations prevents any
+% loading.
+% \begin{macrocode}
+\ifsi@old@noabbr
+ \sisetup{noload=abbr}
+\fi
+\ifsi@old@nofrequncyabbr
+ \sisetup{noload=abbr}
+\fi
+\ifsi@old@nomolabbr
+ \sisetup{noload=abbr}
+\fi
+\ifsi@old@novoltageabbr
+ \sisetup{noload=abbr}
+\fi
+\ifsi@old@novolumeabbr
+ \sisetup{noload=abbr}
+\fi
+\ifsi@old@noweightabbr
+ \sisetup{noload=abbr}
+\fi
+\ifsi@old@noenergyabbr
+ \sisetup{noload=abbr}
+\fi
+\ifsi@old@nolengthabbr
+ \sisetup{noload=abbr}
+\fi
+\ifsi@old@notimeabbr
+ \sisetup{noload=abbr}
+\fi
+% \end{macrocode}
+%\begin{macro}{\unitvaluesep}
+% To emulate the \cs{unitvaluesep} macro, a hack is needed of the original
+% \pkg{xkeyval} macro for \opt{valuesep}, as well of course as a definition
+% of the macro itself.
+% \begin{macrocode}
+\newcommand*{\unitvaluesep}{\,}
+\renewcommand*{\si@valuesep}{\text{\unitvaluesep}}
+\si@opt@choicekey{valuesep}{space,thin,med,medium,thick,none}
+ {\renewcommand*\unitvaluesep\@nameuse{si@fix@##1}}
+ {\renewcommand*\unitvaluesep{##1}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\unitsignonly}
+%\begin{macro}{\ilu}
+%\begin{macro}{\arc}
+% Some rather straight-forward definitions, with just a bit of fun to
+% get the spacing correct.
+% \begin{macrocode}
+\DeclareRobustCommand*{\unitsignonly}{\unitsym}
+\DeclareRobustCommand*{\ilu}[2][]{%
+ \begingroup
+ #1\unitvaluesep%
+ \unit{#2}%
+ \endgroup}
+\DeclareRobustCommand*{\arc}{\ang}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\unitSIdef}
+%\begin{macro}{\si@unitSIdef}
+% The \unitsdef package uses a different approach to setting the font
+% inside its version of \cs{SI}. The problem is the same as for
+% \cs{unitvaluesep}, but with the added problem that \currpkg uses
+% \cs{csname} \ldots \cs{endcsname}.
+% \begin{macrocode}
+\newcommand*{\unitSIdef}{\upshape}
+\newcommand*{\si@unitSIdef}{\unitSIdef\selectfont}
+\sisetup{textdefault=si@unitSIdef,textnumdefault=si@unitSIdef}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\per}
+% Rather awkwardly, \unitsdef uses \cs{per} in a different way to
+% \currpkg.
+% \begin{macrocode}
+\DeclareRobustCommand*{\per}[2]{%
+ \begingroup
+ \si@xspacefalse
+ \renewcommand*{\unitvaluesep}{}%
+ \unitfrac{#1}{#2}%
+ \endgroup}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\unittimes}
+%\begin{macro}{\unitsep}
+%\begin{macro}{\unitsuperscript}
+% Some pretty straight-forward stuff again; notice that the automatic
+% analyser for units has to be turned off for this to work.
+% \begin{macrocode}
+\newcommand*{\unittimes}{\ensuremath{\cdot}}
+\newcommand*{\unitsep}{\,}
+\renewcommand*{\si@unt@unithook}{\si@unt@litouttrue}
+\sisetup{unitsep=none}
+\newcommand*{\unitsuperscript}{\tothe}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\newnosepunit}
+%\begin{macro}{\renewnosepunit}
+% Simple aliases.
+% \begin{macrocode}
+\newcommand*{\newnosepunit}{\newunit[valuesep=none]}
+\newcommand*{\renewnosepunit}{\renewunit[valuesep=none]}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\setTextOmega}
+%\begin{macro}{\setMathOmega}
+%\begin{macro}{\setTextmu}
+%\begin{macro}{\setMathmu}
+%\begin{macro}{\setTextCelsius}
+%\begin{macro}{\setMathCelsius}
+%\begin{macro}{\setMathDegree}
+%\begin{macro}{\setTextDegree}
+% Controlling symbols is a simple translation job; as only one
+% setting is used by \currpkg in text mode, a bit of extra work is
+% needed.
+% \begin{macrocode}
+\newcommand*{\setTextOmega}[2]{%
+ \renewcommand*{\si@textOmega}{%
+ \begingroup
+ \edef\si@tempa{\sfdefault}%
+ \ifx\f@family\si@tempa
+ \expandafter#2%
+ \else
+ \expandafter#1%
+ \fi
+ \endgroup}}
+\newcommand*{\setMathOmega}[1]{\sisetup{mathsOmega=#1}}
+\newcommand*{\setTextmu}[2]{%
+ \renewcommand*{\si@textmu}{%
+ \begingroup
+ \edef\si@tempa{\sfdefault}%
+ \ifx\f@family\si@tempa
+ \expandafter#2%
+ \else
+ \expandafter#1%
+ \fi
+ \endgroup}}
+\newcommand*{\setMathmu}[1]{\sisetup{mathsmu=#1}}
+\newcommand*{\setTextCelsius}[2]{%
+ \renewcommand*{\si@textcelsius}{%
+ \begingroup
+ \edef\si@tempa{\sfdefault}%
+ \ifx\f@family\si@tempa
+ \expandafter#2%
+ \else
+ \expandafter#1%
+ \fi
+ \endgroup}}
+\newcommand*{\setMathCelsius}[1]{\sisetup{mathscelsius=#1}}
+\newcommand*{\setMathDegree}[2]{%
+ \renewcommand*{\si@textdegree}{%
+ \begingroup%
+ \edef\si@tempa{\sfdefault}%
+ \ifx\f@family\si@tempa
+ \expandafter#2%
+ \else
+ \expandafter#1%
+ \fi
+ \endgroup}}
+\newcommand*{\setTextDegree}[1]{\sisetup{textdegree=#1}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+% The \opt{ohm} and \opt{OHM} options are checked, and some sanity is
+% ensured. This needs to happen before loading the configuration
+% files.
+% \begin{macrocode}
+\ifsi@old@OHM
+ \ifsi@old@ohm
+ \si@log@inf{Both `ohm' and `OHM' options given\MessageBreak
+ Using default behaviour for unitsdef}
+ \expandafter\expandafter\expandafter\si@old@OHMfalse
+ \fi
+\fi
+% \end{macrocode}
+%\begin{macro}{\meter}
+%\begin{macro}{\liter}
+%\begin{macro}{\ton}
+%\begin{macro}{\days}
+% For some reason, \unitsdef spells metre and litre incorrectly (the
+% names have an official spelling). Tonne is also spelled as ``ton'',
+% which is wrong in the UK at least (1\,ton = 40\,cwt =\,2240 lb!)
+% \begin{macrocode}
+\newunit{\meter}{\metre}
+\newunit{\liter}{L}
+\ifsi@old@liter
+ \ifsi@old@LITER
+ \si@log@inf{Both `liter' and `LITER' options given\MessageBreak
+ Using default behaviour for unitsdef}
+ \else
+ \renewunit{\liter}{l}
+ \fi
+\fi
+\newunit{\ton}{t}
+\newunit{\days}{d}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\picometer}
+%\begin{macro}{\nanometer}
+%\begin{macro}{\micrometer}
+%\begin{macro}{\millimeter}
+%\begin{macro}{\centimeter}
+%\begin{macro}{\decimeter}
+%\begin{macro}{\kilometer}
+% Extra distances.
+% \begin{macrocode}
+\newunit{\picometer}{\pico\meter}
+\newunit{\nanometer}{\nano\meter}
+\newunit{\micrometer}{\micro\meter}
+\newunit{\millimeter}{\milli\meter}
+\newunit{\centimeter}{\centi\meter}
+\newunit{\decimeter}{\deci\meter}
+\newunit{\kilometer}{\kilo\meter}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\femtoliter}
+%\begin{macro}{\picoliter}
+%\begin{macro}{\nanoliter}
+%\begin{macro}{\microliter}
+%\begin{macro}{\milliliter}
+%\begin{macro}{\centiliter}
+%\begin{macro}{\deciliter}
+%\begin{macro}{\hectoliter}
+%\begin{macro}{\cubicmeter}
+%\begin{macro}{\cubicmicrometer}
+%\begin{macro}{\cubicmillimeter}
+% Volumes with US spellings.
+% \begin{macrocode}
+\newunit{\femtoliter}{\femto\liter}
+\newunit{\picoliter}{\pico\liter}
+\newunit{\nanoliter}{\nano\liter}
+\newunit{\microliter}{\micro\liter}
+\newunit{\milliliter}{\milli\liter}
+\newunit{\centiliter}{\centi\liter}
+\newunit{\deciliter}{\deci\liter}
+\newunit{\hectoliter}{\hecto\liter}
+\newunit{\cubicmeter}{\meter\cubed}
+\newunit{\cubicmicrometer}{\micro\meter\cubed}
+\newunit{\cubicmillimeter}{\milli\meter\cubed}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\squaremeter}
+%\begin{macro}{\squarecentimeter}
+%\begin{macro}{\squarekilometer}
+%\begin{macro}{\ar}
+%\begin{macro}{\hectar}
+% Areas, including the mis-spellings for \cs{are} and
+% \cs{hectare}.
+% \begin{macrocode}
+\newunit{\squaremeter}{\Square\meter}
+\newunit{\squarecentimeter}{\Square\centi\meter}
+\newunit{\squarekilometer}{\Square\kilo\meter}
+\newunit{\ar}{a}
+\newunit{\hectar}{\hecto\ar}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\kv}
+%\begin{macro}{\mv}
+% The code for \unitsdef has the capitalisation wrong for \cs{kV} and
+% \cs{mV}.
+% \begin{macrocode}
+\ifsi@old@noabbr
+\else
+ \ifsi@old@novoltageabbr\else
+ \newunit{\kv}{\kilo\volt}
+ \newunit{\mv}{\milli\volt}
+ \fi
+\fi
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\sek}
+%\begin{macro}{\fg}
+%\begin{macro}{\fl}
+%\begin{macro}{\pl}
+%\begin{macro}{\nl}
+%\begin{macro}{\micl}
+%\begin{macro}{\ml}
+%\begin{macro}{\cl}
+%\begin{macro}{\dl}
+%\begin{macro}{\hl}
+% There are some slightly different abbreviations, plus some which
+% are not officially allowed.
+% \begin{macrocode}
+\ifsi@old@noabbr\else
+ \ifsi@old@notimeabbr\else
+ \newunit{\sek}{\second}
+ \fi
+ \ifsi@old@noweightabbr\else
+ \newunit{\fg}{\femto\gram}
+ \fi
+ \ifsi@old@novolumeabbr\else
+ \newunit{\fl}{\femto\liter}
+ \newunit{\pl}{\pico\liter}
+ \newunit{\nl}{\nano\liter}
+ \renewunit{\micl}{\micro\liter}
+ \renewunit{\ml}{\milli\liter}
+ \newunit{\cl}{\centi\liter}
+ \newunit{\dl}{\deci\liter}
+ \newunit{\hl}{\hecto\liter}
+ \fi
+\fi
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\calory}
+%\begin{macro}{\kilocalory}
+% \unitsdef spells calorie incorrectly, and it is also not an SI unit.
+% \begin{macrocode}
+\newunit{\calory}{cal}
+\newunit{\kilocalory}{\kilo\calory}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\uBar}
+% \unitsdef uses \cs{ubar} for bar.
+% \begin{macrocode}
+\newunit{\uBar}{ba}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\gensymbohm}
+%\begin{macro}{\gensymbcelsius}
+%\begin{macro}{\gensymbmicro}
+%\begin{macro}{\gensymbdegree}
+% If the options relating to \pkg{gensymb} are given, then the
+% package \emph{has} to be loaded. The definitions are then renamed;
+% a slight awkward feature is that the hyphen character needs to be a
+% letter. To avoid needing to worry about this again, a second
+% switch is set up.
+% \begin{macrocode}
+\catcode`\-=11\relax
+\ifsi@old@redef-gensymb
+ \expandafter\si@gensymbtrue
+\fi
+\catcode`\-=12\relax
+\ifsi@gensymb
+ \RequirePackage{gensymb}
+ \AtBeginDocument{
+ \let\gensymbohm\ohm
+ \let\gensymbcelsius\celsius
+ \let\gensymbmicro\micro
+ \let\gensymbdegree\degree
+ \let\ohm\@undefined
+ \let\celsius\@undefined
+ \let\micro\@undefined
+ \let\degree\@undefined
+ \ifsi@old@OHM\else
+ \newunit{\ohm}{\si@sym@Omega}
+ \newunit{\celsius}{\si@sym@celsius}
+ \newprefix{\micro}{\si@sym@mu}{-6}
+ \newunit{\degree}{\si@sym@degree}
+ \fi}
+\fi
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+% The configuration files can now be loaded.
+% \begin{macrocode}
+\si@requirecfgs{prefix,named,addn,accepted}
+% \end{macrocode}
+% The \opt{noconfig} option could be ignored, but it costs little to
+% let is be used.
+% \begin{macrocode}
+\ifsi@old@noconfig\else
+ \InputIfFileExists{unitsdef.cfg}
+ {\si@log@inf{unitsdef config file loaded}}
+ {\si@log@inf{unitsdef config file not found}}
+\fi
+% \end{macrocode}
+%
+%\iffalse
+%</unitsdef>
+%<*sistyle>
+%\fi
+%\subsection{\sistyle}
+% After setting the necessary defaults, the emulation code defines
+% the macros in \sistyle as given in the manual for that package.
+% \begin{macrocode}
+\ProvidesFile{si-sistyle.cfg}
+ [2008/02/20 v.06a Emulation of sistyle]
+\sisetup{%
+ sepfour=true,
+ obeyfamily,
+ obeyitalic=true,
+ numsign=+-,
+ numextra={},
+ unitsep=cdot}
+% \end{macrocode}
+%\begin{macro}{\SIobeyboldtrue}
+%\begin{macro}{\SIobeyboldfalse}
+% Some simple switches, but not using \cs{newif}.
+% \begin{macrocode}
+\newcommand*{\SIobeyboldtrue}{\sisetup{obeybold=true}}
+\newcommand*{\SIobeyboldfalse}{\sisetup{obeybold=false}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\num}
+%\begin{macro}{\si@sis@num}
+%\begin{macro}{\si@sis@numstar}
+% To get the correct behaviour for \cs{num}, some redefinitions are
+% needed to handle to optional |*|.
+% \begin{macrocode}
+\DeclareRobustCommand{\num}{%
+ \@ifstar
+ {\si@sis@numstar}
+ {\si@sis@num}}
+\newcommand*{\si@sis@num}[2][]{%
+ \begingroup%
+ \sisetup{#1}%
+ \expandafter\si@out@num\expandafter{\si@num{#2}}%
+ \endgroup}
+\newcommand*{\si@sis@numstar}[2][]{%
+ \begingroup%
+ \sisetup{mode=text,obeybold}%
+ \sisetup{#1}%
+ \expandafter\si@out@num\expandafter{\si@num{#2}}%
+ \endgroup}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\pnt}
+% The \cs{pnt} macro is needed as |.| is active inside \cs{SI}. The
+% name is exactly the same as in \sistyle, but the implementation is
+% different. This is not defined by the main package as there are
+% better ways of including numbers in the output than this.
+% \begin{macrocode}
+\newcommand*{\pnt}{\ensuremath{\si@decimalsign}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\SIgroupfourtrue}
+%\begin{macro}{\SIgroupfourfalse}
+% Switches for grouping four characters.
+% \begin{macrocode}
+\newcommand*{\SIgroupfourtrue}{\sisetup{sepfour=true}}
+\newcommand*{\SIgroupfourfalse}{\sisetup{sepfour=false}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\SIunitsep}
+%\begin{macro}{\SIunitspace}
+%\begin{macro}{\SIunitdot}
+% Whatever is given here is passed through to \cs{sisetup}.
+% \begin{macrocode}
+\newcommand*{\SIunitsep}[1]{\sisetup{valuesep={#1}}}
+\newcommand*{\SIunitspace}[1]{\sisetup{unitspace={#1}}}
+\newcommand*{\SIunitdot}[1]{\sisetup{unitsep={#1}}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\SIdecimalsign}
+%\begin{macro}{\SIthousandsep}
+%\begin{macro}{\SIproductsign}
+% The same is true here, with the appropriate translation.
+% \begin{macrocode}
+\newcommand*{\SIdecimalsign}[1]{\sisetup{decimalsign={#1}}}
+\newcommand*{\SIthousandsep}[1]{\sisetup{digitsep={#1}}}
+\newcommand*{\SIproductsign}[1]{\sisetup{expproduct={#1}}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\si@sis@savefont}
+% The font definitions need a bit of extra work doing. As both
+% settings here have |@| as a letter, all should be fine.\\
+%\cs{si@sis@savefont}\marg{setting}\marg{argument}
+% \begin{macrocode}
+\newcommand{\si@sis@savefont}[2]{%
+ \@namedef{si@sis@#1}{#2}%
+ \sisetup{#1=si@sis@#1}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\SImathrm}
+%\begin{macro}{\SImathsf}
+%\begin{macro}{\SImathtt}
+% The font control macros have to ensure that a macro name is passed
+% to \cs{sisetup}.
+% \begin{macrocode}
+\newcommand*{\SImathrm}[1]{\si@sis@savefont{mathrm}{#1}}
+\newcommand*{\SImathsf}[1]{\si@sis@savefont{mathsf}{#1}}
+\newcommand*{\SImathtt}[1]{\si@sis@savefont{mathtt}{#1}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\SIdefaultMfam}
+%\begin{macro}{\SIdefaultNfam}
+%\begin{macro}{\SIdefaultTfam}
+% The same for the default keys.
+% \begin{macrocode}
+\newcommand*{\SIdefaultMfam}[1]{\si@sis@savefont{mathdefault}{#1}}
+\newcommand*{\SIdefaultNfam}[1]{\si@sis@savefont{mathnumdefault}{#1}}
+\newcommand*{\SIdefaultTfam}[1]{\si@sis@savefont{textdefault}{#1}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\ensureupmath}
+% The \cs{ensureupmath} command guarantees processing by the
+% font-matching system. The argument cannot be processed here, so
+% care is needed.
+% \begin{macrocode}
+\DeclareRobustCommand*{\ensureupmath}[1]{%
+ \begingroup
+ \sisetup{mode=maths,obeyitalic=false}%
+ \si@out@text{#1}%
+ \endgroup}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\degC}
+%\begin{macro}{\degF}
+%\begin{macro}{\arcdeg}
+% A few extra symbol names are needed.
+% \begin{macrocode}
+\newcommand*{\degC}{\si@sym@celsius}
+\newcommand*{\arcdeg}{\si@sym@degree}
+\newcommand*{\degF}{\si@sym@degree F}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\AddToSIstyle}
+%\begin{macro}{\SIstyle}
+%\begin{macro}{\SIstyleToLang}
+%\begin{macro}{\si@sis@addtolocale}
+% Finally, the locale control.
+% \begin{macrocode}
+\newcommand*{\SIstyle}[1]{\sisetup{locale=#1}}
+\newcommand*{\SIstyleToLang}[2]{\sisetup{loctolang=#1:#2}}
+\newcommand*{\AddToSIstyle}{%
+ \si@switchfalse
+ \@ifstar
+ {\si@switchtrue
+ \si@sis@addtolocale}
+ {\si@sis@addtolocale}}
+\newcommand*{\si@sis@addtolocale}[2]{%
+ \ifsi@switch
+ \expandafter\let\csname si@loc@#1@extra\endcsname\relax
+ \fi
+ \addtolocale{#1}{#2}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%
+%\iffalse
+%</sistyle>
+%<*SIunits>
+%\fi
+%\subsection{\SIunits}
+% \SIunits emulation starts in much the same way.
+% \begin{macrocode}
+\ProvidesFile{si-SIunits.cfg}
+ [2008/02/20 v.06a Emulation of SIunits]
+\sisetup{
+ unitsep=thick,
+ valuesep=thick,
+ prefixproduct=\si@valuesep}
+\si@requirecfgs{prefix,named,accepted,physical}
+% \end{macrocode}
+%\begin{macro}{\reciprocal}
+%\begin{macro}{\rp}
+%\begin{macro}{\per}
+%\begin{macro}{\usk}
+%\begin{macro}{\power}
+%\begin{macro}{\rpsquare}
+%\begin{macro}{\rpcubic}
+%\begin{macro}{\fourth}
+%\begin{macro}{\rpfourth}
+% A few very simple translations, using the internal version of
+% \cs{per} to allow changes of output style.
+% \begin{macrocode}
+\newcommand*{\reciprocal}{\sisetup{per=reciprocal}\si@per}
+\let\rp\reciprocal
+\renewcommand*{\per}{\sisetup{per=slash}\si@per}
+\newcommand*{\usk}{}
+\newcommand*{\power}[1]{#1\tothe}
+\newcommand*{\rpsquare}{\sisetup{per=reciprocal}\si@per\Square}
+\newcommand*{\rpcubic}{\sisetup{per=reciprocal}\si@per\cubic}
+\newpower{\fourth}{4}
+\newcommand*{\rpfourth}{\sisetup{per=reciprocal}\si@per\fourth}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\rpsquared}
+%\begin{macro}{\rpcubed}
+% Here, some low-level switch changing is needed.
+% \begin{macrocode}
+\newcommand*{\rpsquared}{%
+ \sisetup{per=reciprocal}\si@unt@pertrue\si@unt@perseentrue\squared}
+\newcommand*{\rpcubed}{\sisetup{per=reciprocal}\si@unt@pertrue\cubed}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\SIsetup}
+%\begin{macro}{\si@tempa}
+%\begin{macro}{\si@siu@setup}
+% The various package spacing options are processed. They also have
+% to be correctly handled by the \cs{SIsetup} macro.
+% \begin{macrocode}
+\newcommand*{\SIsetup}[1]{%
+ \@for\si@tempa:=#1\do{%
+ \@ifundefined{ifsi@old@#1}
+ {\si@log@warn{Unknown SIunits option `#1'}}
+ {\csname si@old@#1true\endcsname}}
+ \si@siu@setup}
+\newcommand*{\si@siu@setup}{%
+ \ifsi@old@cdot
+ \sisetup{unitsep=cdot}%
+ \fi
+ \ifsi@old@thickspace
+ \sisetup{unitsep=thick}%
+ \fi
+ \ifsi@old@mediumspace
+ \sisetup{unitsep=medium}%
+ \fi
+ \ifsi@old@thinspace
+ \sisetup{unitsep=thin}%
+ \fi
+ \ifsi@old@thickqspace
+ \sisetup{valuesep=thick}%
+ \fi
+ \ifsi@old@mediumqspace
+ \sisetup{valuesep=medium}%
+ \fi
+ \ifsi@old@thinqspace
+ \sisetup{valuesep=thin}%
+ \fi}
+\si@siu@setup
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\square}
+%\begin{macro}{\squaren}
+% \SIunits does slightly different things about the clash with
+% \cs{square}, and either redefines this macro or provides
+% \cs{squaren}.
+% \begin{macrocode}
+\ifsi@old@squaren
+ \newpower{\squaren}{2}
+\fi
+\AtBeginDocument{%
+ \@ifundefined{square}
+ {\newpower{\square}{2}}
+ {\ifsi@old@amssymb
+ \renewpower{\square}{2}
+ \else
+ \ifsi@old@squaren\else
+ \si@log@warn{\string\square\space already
+ defined\MessageBreak SIunits mode may cause
+ errors}%
+ \fi
+ \fi}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\gray}
+% The potential clash with \pkg{PStricks} is also handled
+% differently; here, \cs{Gray} will already be defined by the
+% \currpkg kernel.
+% \begin{macrocode}
+\AtBeginDocument{%
+ \@ifundefined{gray}
+ {\newunit{\gray}{Gy}}
+ {\ifsi@old@pstricks
+ \renewunit{\gray}{Gy}
+ \else
+ \ifsi@old@Gray\else
+ \si@log@warn{\string\gray\space already
+ defined\MessageBreak SIunits mode may cause
+ errors}%
+ \fi
+ \fi}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\unit}
+%\begin{macro}{\unita}
+% The \cs{unit} macro is defined.
+% \begin{macrocode}
+\ifsi@old@italian
+ \let\unita\SI
+\else
+ \let\unit\SI
+\fi
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+% The miscellaneous options are moped up.
+% \begin{macrocode}
+\ifsi@old@textstyle
+ \sisetup{mode=text}
+\fi
+\ifsi@old@binary
+ \sisetup{alsoload=binary}
+\fi
+\ifsi@old@noams
+ \AtBeginDocument{%
+ \renewcommand*{\si@textmu}{\ensuremath\si@mathsmu}}
+\fi
+% \end{macrocode}
+%\begin{macro}{\arcminute}
+%\begin{macro}{\arcsecond}
+%\begin{macro}{\bbar}
+%\begin{macro}{\dday}
+%\begin{macro}{\liter}
+%\begin{macro}{\rperminute}
+%\begin{macro}{\ton}
+%\begin{macro}{\degreecelsius}
+% The unit macros defined by \SIunits that are not defined by
+% \currpkg (by default).
+% \begin{macrocode}
+\newunit[valuesep=none]{\arcminute}{\si@sym@minute}
+\newunit[valuesep=none]{\arcsecond}{\si@sym@second}
+\newunit{\bbar}{bar}
+\newunit{\dday}{day}
+\newunit{\liter}{L}
+\newunit{\rperminute}{r/min}
+\newunit{\ton}{t}
+\newunit{\degreecelsius}{\celsius}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\addunit}
+% This is an alias for \cs{newunit}.
+% \begin{macrocode}
+\let\addunit\newunit
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\addprefix}
+% A little more work for \cs{addprefix}.
+% \begin{macrocode}
+\newcommand*{\addprefix}[2]{\newprefix{#1}{#2}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\graypersecond}
+%\begin{macro}{\graypersecondnp}
+%\begin{macro}{\metrepersquaresecond}
+%\begin{macro}{\metrepersquaresecondnp}
+%\begin{macro}{\joulepermole}
+%\begin{macro}{\joulepermolenp}
+%\begin{macro}{\molepercubicmetre}
+%\begin{macro}{\molepercubicmetrenp}
+%\begin{macro}{\radianpersquaresecond}
+%\begin{macro}{\radianpersquaresecondnp}
+%\begin{macro}{\kilogramsquaremetrepersecond}
+% \SIunits provides lots of macros with rather long names, which are
+% not really needed with \currpkg. However, they have to be defined
+% somewhere. There are a lot of them, so a few are tackled at a
+% time.
+% \begin{macrocode}
+\addunit{\graypersecond}{\gray\per\second}
+\addunit{\graypersecondnp}{\gray\reciprocal\second}
+\addunit{\metrepersquaresecond}{\metre\per\second\squared}
+\addunit{\metrepersquaresecondnp}{\metre\second\rpsquared}
+\addunit{\joulepermole}{\joule\per\mole}
+\addunit{\joulepermolenp}{\joule\reciprocal\mole}
+\addunit{\molepercubicmetre}{\mole\per\cubic\metre}
+\addunit{\molepercubicmetrenp}{\mole\rpcubic\metre}
+\addunit{\radianpersquaresecond}{\radian\per\second\squared}
+\addunit{\radianpersquaresecondnp}{\radian\second\rpsquared}
+\addunit{\kilogramsquaremetrepersecond}
+ {\kilogram\usk\squaremetre\per\second}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\kilogramsquaremetrepersecondnp}
+%\begin{macro}{\radianpersecond}
+%\begin{macro}{\radianpersecondnp}
+%\begin{macro}{\squaremetrepercubicmetre}
+%\begin{macro}{\squaremetrepercubicmetrenp}
+%\begin{macro}{\katalpercubicmetre}
+%\begin{macro}{\katalpercubicmetrenp}
+%\begin{macro}{\coulombpermol}
+%\begin{macro}{\coulombpermolnp}
+%\begin{macro}{\amperepersquaremetre}
+%\begin{macro}{\amperepersquaremetrenp}
+% Some more.
+% \begin{macrocode}
+\addunit{\kilogramsquaremetrepersecondnp}
+ {\kilogram\usk\squaremetre\reciprocal\second}
+\addunit{\radianpersecond}{\radian\per\second}
+\addunit{\radianpersecondnp}{\radian\reciprocal\second}
+\addunit{\squaremetrepercubicmetre}{\squaremetre\per\cubic\metre}
+\addunit{\squaremetrepercubicmetrenp}{\squaremetre\rpcubic\metre}
+\addunit{\katalpercubicmetre}{\katal\per\cubic\metre}
+\addunit{\katalpercubicmetrenp}{\katal\rpcubic\metre}
+\addunit{\coulombpermol}{\coulomb\per\mole}
+\addunit{\coulombpermolnp}{\coulomb\reciprocal\mole}
+\addunit{\amperepersquaremetre}{\ampere\per\squaremetre}
+\addunit{\amperepersquaremetrenp}{\ampere\rpsquare\metre}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\kilogrampercubicmetre}
+%\begin{macro}{\kilogrampercubicmetrenp}
+%\begin{macro}{\squaremetrepernewtonsecond}
+%\begin{macro}{\squaremetrepernewtonsecondnp}
+%\begin{macro}{\pascalsecond}
+%\begin{macro}{\coulombpercubicmetre}
+%\begin{macro}{\coulombpercubicmetrenp}
+%\begin{macro}{\amperemetresecond}
+%\begin{macro}{\voltpermetre}
+%\begin{macro}{\voltpermetrenp}
+%\begin{macro}{\coulombpersquaremetre}
+% Some more.
+% \begin{macrocode}
+\addunit{\kilogrampercubicmetre}{\kilogram\per\cubic\metre}
+\addunit{\kilogrampercubicmetrenp}{\kilogram\rpcubic\metre}
+\addunit{\squaremetrepernewtonsecond}
+ {\squaremetre\per\newton\second}
+\addunit{\squaremetrepernewtonsecondnp}
+ {\squaremetre\reciprocal\newton\reciprocal\second}
+\addunit{\pascalsecond}{\pascal\second}
+\addunit{\coulombpercubicmetre}{\coulomb\per\cubic\metre}
+\addunit{\coulombpercubicmetrenp}{\coulomb\rpcubic\metre}
+\addunit{\amperemetresecond}{\ampere\metre\second}
+\addunit{\voltpermetre}{\volt\per\metre}
+\addunit{\voltpermetrenp}{\volt\reciprocal\metre}
+\addunit{\coulombpersquaremetre}{\coulomb\per\squaremetre}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\coulombpersquaremetrenp}
+%\begin{macro}{\faradpermetre}
+%\begin{macro}{\faradpermetrenp}
+%\begin{macro}{\ohmmetre}
+%\begin{macro}{\kilowatthour}
+%\begin{macro}{\wattpersquaremetre}
+%\begin{macro}{\wattpersquaremetrenp}
+%\begin{macro}{\joulepersquaremetre}
+%\begin{macro}{\joulepersquaremetrenp}
+%\begin{macro}{\newtonpercubicmetre}
+%\begin{macro}{\newtonpercubicmetrenp}
+% Some more.
+% \begin{macrocode}
+\addunit{\coulombpersquaremetrenp}{\coulomb\rpsquare\metre}
+\addunit{\faradpermetre}{\farad\per\metre}
+\addunit{\faradpermetrenp}{\farad\reciprocal\metre}
+\addunit{\ohmmetre}{\ohm\metre}
+\addunit{\kilowatthour}{\kilo\watt\hour}
+\addunit{\wattpersquaremetre}{\watt\per\squaremetre}
+\addunit{\wattpersquaremetrenp}{\watt\rpsquare\metre}
+\addunit{\joulepersquaremetre}{\joule\per\squaremetre}
+\addunit{\joulepersquaremetrenp}{\joule\rpsquare\metre}
+\addunit{\newtonpercubicmetre}{\newton\per\cubic\metre}
+\addunit{\newtonpercubicmetrenp}{\newton\rpcubic\metre}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\newtonperkilogram}
+%\begin{macro}{\newtonperkilogramnp}
+%\begin{macro}{\jouleperkelvin}
+%\begin{macro}{\jouleperkelvinnp}
+%\begin{macro}{\jouleperkilogram}
+%\begin{macro}{\jouleperkilogramnp}
+%\begin{macro}{\coulombperkilogram}
+%\begin{macro}{\coulombperkilogramnp}
+%\begin{macro}{\squaremetrepersecond}
+%\begin{macro}{\squaremetrepersecondnp}
+%\begin{macro}{\squaremetrepersquaresecond}
+% Some more.
+% \begin{macrocode}
+\addunit{\newtonperkilogram}{\newton\per\kilogram}
+\addunit{\newtonperkilogramnp}{\newton\reciprocal\kilogram}
+\addunit{\jouleperkelvin}{\joule\per\kelvin}
+\addunit{\jouleperkelvinnp}{\joule\reciprocal\kelvin}
+\addunit{\jouleperkilogram}{\joule\per\kilogram}
+\addunit{\jouleperkilogramnp}{\joule\reciprocal\kilogram}
+\addunit{\coulombperkilogram}{\coulomb\per\kilogram}
+\addunit{\coulombperkilogramnp}{\coulomb\reciprocal\kilogram}
+\addunit{\squaremetrepersecond}{\squaremetre\per\second}
+\addunit{\squaremetrepersecondnp}{\squaremetre\reciprocal\second}
+\addunit{\squaremetrepersquaresecond}
+ {\squaremetre\per\second\squared}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\squaremetrepersquaresecondnp}
+%\begin{macro}{\kilogrammetrepersecond}
+%\begin{macro}{\kilogrammetrepersecondnp}
+%\begin{macro}{\candelapersquaremetre}
+%\begin{macro}{\candelapersquaremetrenp}
+%\begin{macro}{\amperepermetre}
+%\begin{macro}{\amperepermetrenp}
+%\begin{macro}{\joulepertesla}
+%\begin{macro}{\jouleperteslanp}
+%\begin{macro}{\henrypermetre}
+%\begin{macro}{\henrypermetrenp}
+% Some more.
+% \begin{macrocode}
+\addunit{\squaremetrepersquaresecondnp}
+ {\squaremetre\second\rpsquared}
+\addunit{\kilogrammetrepersecond}{\kilogram\metre\per\second}
+\addunit{\kilogrammetrepersecondnp}
+ {\kilogram\metre\reciprocal\second}
+\addunit{\candelapersquaremetre}{\candela\per\squaremetre}
+\addunit{\candelapersquaremetrenp}{\candela\rpsquare\metre}
+\addunit{\amperepermetre}{\ampere\per\metre}
+\addunit{\amperepermetrenp}{\ampere\reciprocal\metre}
+\addunit{\joulepertesla}{\joule\per\tesla}
+\addunit{\jouleperteslanp}{\joule\reciprocal\tesla}
+\addunit{\henrypermetre}{\henry\per\metre}
+\addunit{\henrypermetrenp}{\henry\reciprocal\metre}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\kilogrampersecond}
+%\begin{macro}{\kilogrampersecondnp}
+%\begin{macro}{\kilogrampersquaremetresecond}
+%\begin{macro}{\kilogrampersquaremetresecondnp}
+%\begin{macro}{\kilogrampersquaremetre}
+%\begin{macro}{\kilogrampersquaremetrenp}
+%\begin{macro}{\kilogrampermetre}
+%\begin{macro}{\kilogrampermetrenp}
+%\begin{macro}{\joulepermolekelvin}
+%\begin{macro}{\joulepermolekelvinnp}
+%\begin{macro}{\kilogramperkilomole}
+% Some more.
+% \begin{macrocode}
+\addunit{\kilogrampersecond}{\kilogram\per\second}
+\addunit{\kilogrampersecondnp}{\kilogram\reciprocal\second}
+\addunit{\kilogrampersquaremetresecond}
+ {\kilogram\per\squaremetre\second}
+\addunit{\kilogrampersquaremetresecondnp}
+ {\kilogram\rpsquare\metre\reciprocal\second}
+\addunit{\kilogrampersquaremetre}{\kilogram\per\squaremetre}
+\addunit{\kilogrampersquaremetrenp}{\kilogram\rpsquare\metre}
+\addunit{\kilogrampermetre}{\kilogram\per\metre}
+\addunit{\kilogrampermetrenp}{\kilogram\reciprocal\metre}
+\addunit{\joulepermolekelvin}{\joule\per\mole\kelvin}
+\addunit{\joulepermolekelvinnp}
+ {\joule\reciprocal\mole\reciprocal\kelvin}
+\addunit{\kilogramperkilomole}{\kilogram\per\kilo\mole}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\kilogramperkilomolenp}
+%\begin{macro}{\kilogramsquaremetre}
+%\begin{macro}{\kilogramsquaremetrenp}
+%\begin{macro}{\kilogrammetrepersquaresecond}
+%\begin{macro}{\kilogrammetrepersquaresecondnp}
+%\begin{macro}{\newtonpersquaremetre}
+%\begin{macro}{\newtonpersquaremetrenp}
+%\begin{macro}{\persquaremetresecond}
+%\begin{macro}{\persquaremetresecondnp}
+%\begin{macro}{\wattperkilogram}
+%\begin{macro}{\wattperkilogramnp}
+% Some more.
+% \begin{macrocode}
+\addunit{\kilogramperkilomolenp}{\kilogram\kilo\reciprocal\mole}
+\addunit{\kilogramsquaremetre}{\kilogram\squaremetre}
+\addunit{\kilogramsquaremetrenp}{\kilogramsquaremetre}
+\addunit{\kilogrammetrepersquaresecond}
+ {\kilogram\metre\per\second\squared}
+\addunit{\kilogrammetrepersquaresecondnp}
+ {\kilogram\metre\second\rpsquared}
+\addunit{\newtonpersquaremetre}{\newton\per\squaremetre}
+\addunit{\newtonpersquaremetrenp}{\newton\rpsquare\metre}
+\addunit{\persquaremetresecond}{1\per\squaremetre\second}
+\addunit{\persquaremetresecondnp}{\rpsquare\metre\reciprocal\second}
+\addunit{\wattperkilogram}{\watt\per\kilogram}
+\addunit{\wattperkilogramnp}{\watt\reciprocal\kilogram}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\wattpercubicmetre}
+%\begin{macro}{\wattpercubicmetrenp}
+%\begin{macro}{\wattpersquaremetresteradian}
+%\begin{macro}{\wattpersquaremetresteradiannp}
+%\begin{macro}{\jouleperkilogramkelvin}
+%\begin{macro}{\jouleperkilogramkelvinnp}
+%\begin{macro}{\squaremetreperkilogram}
+%\begin{macro}{\rpsquaremetreperkilogram}
+%\begin{macro}{\cubicmetreperkilogram}
+%\begin{macro}{\rpcubicmetreperkilogram}
+%\begin{macro}{\newtonpermetre}
+% Some more.
+% \begin{macrocode}
+\addunit{\wattpercubicmetre}{\watt\per\cubic\metre}
+\addunit{\wattpercubicmetrenp}{\watt\rpcubic\metre}
+\addunit{\wattpersquaremetresteradian}{\watt\per\squaremetre\steradian}
+\addunit{\wattpersquaremetresteradiannp}
+ {\watt\rpsquare\metre\rp\steradian}
+\addunit{\jouleperkilogramkelvin}{\joule\per\kilogram\kelvin}
+\addunit{\jouleperkilogramkelvinnp}
+ {\joule\reciprocal\kilogram\reciprocal\kelvin}
+\addunit{\squaremetreperkilogram}{\squaremetre\per\kilogram}
+\addunit{\rpsquaremetreperkilogram}
+ {\squaremetre\reciprocal\kilogram}
+\addunit{\cubicmetreperkilogram}{\cubic\metre\per\kilogram}
+\addunit{\rpcubicmetreperkilogram}
+ {\cubic\metre\reciprocal\kilogram}
+\addunit{\newtonpermetre}{\newton\per\metre}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\newtonpermetrenp}
+%\begin{macro}{\wattpermetrekelvin}
+%\begin{macro}{\wattpermetrekelvinnp}
+%\begin{macro}{\newtonmetre}
+%\begin{macro}{\newtonmetrenp}
+%\begin{macro}{\squaremetrepercubicsecond}
+%\begin{macro}{\squaremetrepercubicsecondnp}
+%\begin{macro}{\metrepersecond}
+%\begin{macro}{\metrepersecondnp}
+%\begin{macro}{\joulepercubicmetre}
+%\begin{macro}{\joulepercubicmetrenp}
+% Some more.
+% \begin{macrocode}
+\addunit{\newtonpermetrenp}{\newton\reciprocal\metre}
+\addunit{\wattpermetrekelvin}{\watt\per\metre\kelvin}
+\addunit{\wattpermetrekelvinnp}
+ {\watt\reciprocal\metre\reciprocal\kelvin}
+\addunit{\newtonmetre}{\newton\metre}
+\addunit{\newtonmetrenp}{\newtonmetre}
+\addunit{\squaremetrepercubicsecond}{\squaremetre\per\cubic\second}
+\addunit{\squaremetrepercubicsecondnp}
+ {\squaremetre\rpcubic\second}
+\addunit{\metrepersecond}{\metre\per\second}
+\addunit{\metrepersecondnp}{\metre\reciprocal\second}
+\addunit{\joulepercubicmetre}{\joule\per\cubicmetre}
+\addunit{\joulepercubicmetrenp}{\joule\rpcubic\metre}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\kilogrampercubicmetrecoulomb}
+%\begin{macro}{\kilogrampercubicmetrecoulombnp}
+%\begin{macro}{\cubicmetrepersecond}
+%\begin{macro}{\rpcubicmetrepersecond}
+%\begin{macro}{\kilogrampersecondcubicmetre}
+%\begin{macro}{\kilogrampersecondcubicmetrenp}
+% Last block.
+% \begin{macrocode}
+\addunit{\kilogrampercubicmetrecoulomb}
+ {\kilogram\per\cubic\metre\coulomb}
+\addunit{\kilogrampercubicmetrecoulombnp}
+ {\kilogram\rpcubic\metre\reciprocal\coulomb}
+\addunit{\cubicmetrepersecond}{\cubicmetre\per\second}
+\addunit{\rpcubicmetrepersecond}{\cubicmetre\reciprocal\second}
+\addunit{\kilogrampersecondcubicmetre}
+ {\kilogram\per\second\cubicmetre}
+\addunit{\kilogrampersecondcubicmetrenp}
+ {\kilogram\reciprocal\second\rpcubic\metre}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\yoctod}
+%\begin{macro}{\zeptod}
+%\begin{macro}{\attod}
+%\begin{macro}{\femtod}
+%\begin{macro}{\picod}
+%\begin{macro}{\nanod}
+%\begin{macro}{\microd}
+%\begin{macro}{\millid}
+%\begin{macro}{\centid}
+% The prefixes giving numerical output need a trick. First the small
+% values.
+% \begin{macrocode}
+\newunit{\yoctod}{\si@prefixnumtrue\yocto}
+\newunit{\zeptod}{\si@prefixnumtrue\zepto}
+\newunit{\attod}{\si@prefixnumtrue\atto}
+\newunit{\femtod}{\si@prefixnumtrue\femto}
+\newunit{\picod}{\si@prefixnumtrue\pico}
+\newunit{\nanod}{\si@prefixnumtrue\nano}
+\newunit{\microd}{\si@prefixnumtrue\micro}
+\newunit{\millid}{\si@prefixnumtrue\milli}
+\newunit{\centid}{\si@prefixnumtrue\centi}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\decad}
+%\begin{macro}{\dekad}
+%\begin{macro}{\hectod}
+%\begin{macro}{\kilod}
+%\begin{macro}{\megad}
+%\begin{macro}{\gigad}
+%\begin{macro}{\terad}
+%\begin{macro}{\petad}
+%\begin{macro}{\exad}
+%\begin{macro}{\zettad}
+%\begin{macro}{\yottad}
+% The the larger ones.
+% \begin{macrocode}
+\newunit{\decad}{\si@prefixnumtrue\deca}
+\newunit{\dekad}{\si@prefixnumtrue\deka}
+\newunit{\hectod}{\si@prefixnumtrue\hecto}
+\newunit{\kilod}{\si@prefixnumtrue\kilo}
+\newunit{\megad}{\si@prefixnumtrue\mega}
+\newunit{\gigad}{\si@prefixnumtrue\giga}
+\newunit{\terad}{\si@prefixnumtrue\tera}
+\newunit{\petad}{\si@prefixnumtrue\peta}
+\newunit{\exad}{\si@prefixnumtrue\exa}
+\newunit{\zettad}{\si@prefixnumtrue\zetta}
+\newunit{\yottad}{\si@prefixnumtrue\yotta}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\kibid}
+%\begin{macro}{\mebid}
+%\begin{macro}{\gibid}
+%\begin{macro}{\tebid}
+%\begin{macro}{\pebid}
+%\begin{macro}{\exbid}
+% The binary versions need a little more work.
+% \begin{macrocode}
+\newunit{\kibid}{%
+ \si@prefixnumtrue\let\si@prefixpower\si@fix@two\kibi}
+\newunit{\mebid}{%
+ \si@prefixnumtrue\let\si@prefixpower\si@fix@two\mebi}
+\newunit{\gibid}{%
+ \si@prefixnumtrue\let\si@prefixpower\si@fix@two\gibi}
+\newunit{\tebid}{%
+ \si@prefixnumtrue\let\si@prefixpower\si@fix@two\tebi}
+\newunit{\pebid}{%
+ \si@prefixnumtrue\let\si@prefixpower\si@fix@two\pebi}
+\newunit{\exbid}{%
+ \si@prefixnumtrue\let\si@prefixpower\si@fix@two\exbi}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\derradian}
+%\begin{macro}{\dersteradian}
+%\begin{macro}{\derhertz}
+%\begin{macro}{\dernewton}
+%\begin{macro}{\derpascal}
+%\begin{macro}{\derjoule}
+%\begin{macro}{\derwatt}
+%\begin{macro}{\dercoulomb}
+%\begin{macro}{\dervolt}
+%\begin{macro}{\derfarad}
+%\begin{macro}{\derohm}
+% The derived units may need to be defined.
+% \begin{macrocode}
+\ifsi@old@derived
+ \newunit{\derradian}{\metre\reciprocal\metre}
+ \newunit{\dersteradian}{\squaremetre\rpsquare\metre}
+ \newunit{\derhertz}{\reciprocal\second}
+ \newunit{\dernewton}{\metre\kilogram\second\rpsquared}
+ \newunit{\derpascal}{\newton\rpsquare\metre}
+ \newunit{\derjoule}{\newton\metre}
+ \newunit{\derwatt}{\joule\reciprocal\second}
+ \newunit{\dercoulomb}{\ampere\second}
+ \newunit{\dervolt}{\watt\reciprocal\ampere}
+ \newunit{\derfarad}{\coulomb\reciprocal\volt}
+ \newunit{\derohm}{\volt\reciprocal\ampere}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\dersiemens}
+%\begin{macro}{\derweber}
+%\begin{macro}{\dertesla}
+%\begin{macro}{\derhenry}
+%\begin{macro}{\dercelsius}
+%\begin{macro}{\derlumen}
+%\begin{macro}{\derlux}
+%\begin{macro}{\derbecquerel}
+%\begin{macro}{\dergray}
+%\begin{macro}{\dersievert}
+%\begin{macro}{\derkatal}
+% In two blocks!
+% \begin{macrocode}
+ \newunit{\dersiemens}{\ampere\reciprocal\volt}
+ \newunit{\derweber}
+ {\squaremetre\kilogram\second\rpsquared\reciprocal\ampere}
+ \newunit{\dertesla}{\weber\rpsquare\metre}
+ \newunit{\derhenry}{\weber\reciprocal\ampere}
+ \newunit{\dercelsius}{\kelvin}
+ \newunit{\derlumen}{\candela\steradian}
+ \newunit{\derlux}{\lumen\rpsquare\metre}
+ \newunit{\derbecquerel}{\derhertz}
+ \newunit{\dergray}{\joule\reciprocal\kilogram}
+ \newunit{\dersievert}{\dergray}
+ \newunit{\derkatal}{\rp\second\usk\mole}
+\fi
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\radianbase}
+%\begin{macro}{\steradianbase}
+%\begin{macro}{\hertzbase}
+%\begin{macro}{\newtonbase}
+%\begin{macro}{\pascalbase}
+%\begin{macro}{\joulebase}
+%\begin{macro}{\wattbase}
+%\begin{macro}{\coulombbase}
+%\begin{macro}{\voltbase}
+%\begin{macro}{\faradbase}
+%\begin{macro}{\ohmbase}
+% Also the ``derived-in-base''.
+% \begin{macrocode}
+\ifsi@old@derivedinbase
+ \newunit{\radianbase}{\metre\reciprocal\metre}
+ \newunit{\steradianbase}{\squaremetre\rpsquare\metre}
+ \newunit{\hertzbase}{\reciprocal\second}
+ \newunit{\newtonbase}{\metre\kilogram\second\rpsquared}
+ \newunit{\pascalbase}{\reciprocal\metre\kilogram\second\rpsquared}
+ \newunit{\joulebase}{\squaremetre\kilogram\second\rpsquared}
+ \newunit{\wattbase}{\squaremetre\kilogram\rpcubic\second}
+ \newunit{\coulombbase}{\ampere\second}
+ \newunit{\voltbase}
+ {\squaremetre\kilogram\rpcubic\second\reciprocal\ampere}
+ \newunit{\faradbase}
+ {\rpsquare\metre\reciprocal\kilogram\fourth\second\ampere%
+ \squared}
+ \newunit{\ohmbase}
+ {\squaremetre\kilogram\rpcubic\second\rpsquare\ampere}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\siemensbase}
+%\begin{macro}{\weberbase}
+%\begin{macro}{\teslabase}
+%\begin{macro}{\henrybase}
+%\begin{macro}{\celsiusbase}
+%\begin{macro}{\lumenbase}
+%\begin{macro}{\luxbase}
+%\begin{macro}{\becquerelbase}
+%\begin{macro}{\graybase}
+%\begin{macro}{\sievertbase}
+%\begin{macro}{\katalbase}
+% Also in two blocks.
+% \begin{macrocode}
+ \newunit{\siemensbase}
+ {\rpsquare\metre\reciprocal\kilogram\cubic\second\ampere\squared}
+ \newunit{\weberbase}
+ {\squaremetre\kilogram\second\rpsquared\reciprocal\ampere}
+ \newunit{\teslabase}{\kilogram\second\rpsquared\reciprocal\ampere}
+ \newunit{\henrybase}
+ {\squaremetre\kilogram\second\rpsquared\rpsquare\ampere}
+ \newunit{\celsiusbase}{\kelvin}
+ \newunit{\lumenbase}{\candela\squaremetre\rpsquare\metre}
+ \newunit{\luxbase}{\candela\squaremetre\rpfourth\metre}
+ \newunit{\becquerelbase}{\hertzbase}
+ \newunit{\graybase}{\squaremetre\second\rpsquared}
+ \newunit{\sievertbase}{\graybase}
+ \newunit{\katalbase}{\rp\second\mole}
+\fi
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+% Any configuration file is used if found.
+% \begin{macrocode}
+\InputIfFileExists{SIunits.cfg}
+ {\si@log@inf{SIunits config file loaded}}
+ {\si@log@inf{SIunits config file not found}}
+% \end{macrocode}
+%\iffalse
+%</SIunits>
+%\fi
+%
+%\Finale
+%\iffalse
+%<*refs>
+@misc{NIST,
+ note = {\url{http://physics.nist.gov/cuu/Units/rules.html}},
+}
+%</refs>
+%<*jawltxdoc>
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{jawltxdoc}
+\usepackage[T1]{fontenc}
+\usepackage[english,UKenglish]{babel}
+\usepackage[scaled=0.95]{helvet}
+\usepackage[version=3]{mhchem}
+\usepackage[final]{microtype}
+\usepackage[osf]{mathpazo}
+\usepackage{booktabs,array,url,graphicx,courier,xspace}
+\usepackage{upgreek,ifpdf,listings,float,caption,longtable}
+\floatstyle{plaintop}
+\restylefloat{table}
+\ifpdf
+ \usepackage{embedfile}
+ \embedfile[%
+ stringmethod=escape,%
+ mimetype=plain/text,%
+ desc={LaTeX docstrip source archive for package `\jobname'}%
+ ]{\jobname.dtx}
+\fi
+\IfFileExists{\jobname.sty}
+ {\usepackage{\jobname}}{}
+\usepackage[numbered]{hypdoc}
+\newlength\LaTeXwidth
+\newlength\LaTeXoutdent
+\newlength\LaTeXgap
+\setlength\LaTeXgap{1em}
+\setlength\LaTeXoutdent{-0.15\textwidth}
+\newcommand*{\typesetexampleandcode}{%
+ \begin{list}{}{%
+ \setlength\itemindent{0pt}
+ \setlength\leftmargin\LaTeXoutdent
+ \setlength\rightmargin{0pt}
+ }
+ \item
+ \setlength\LaTeXoutdent{-0.15\textwidth}
+ \begin{minipage}[c]{\textwidth-\LaTeXwidth-\LaTeXoutdent-\LaTeXgap}
+ \lst@sampleInput
+ \end{minipage}%
+ \hfill%
+ \begin{minipage}[c]{\LaTeXwidth}%
+ \hbox to\linewidth{\box\lst@samplebox\hss}%
+ \end{minipage}%
+ \end{list}
+}
+\newcommand*{\typesetcodeandexample}{%
+ \begin{list}{}{%
+ \setlength\itemindent{0pt}
+ \setlength\leftmargin{0pt}
+ \setlength\rightmargin{0pt}
+ }
+ \item
+ \begin{minipage}[c]{\LaTeXwidth}%
+ \hbox to\linewidth{\box\lst@samplebox\hss}%
+ \end{minipage}%
+ \lst@sampleInput
+ \end{list}
+}
+\newcommand*{\typesetfloatexample}{%
+ \begin{list}{}{%
+ \setlength\itemindent{0pt}
+ \setlength\leftmargin{0pt}
+ \setlength\rightmargin{0pt}
+ }
+ \item
+ \lst@sampleInput
+ \begin{minipage}[c]{\LaTeXwidth}%
+ \hbox to\linewidth{\box\lst@samplebox\hss}%
+ \end{minipage}%
+ \end{list}
+}
+\newcommand*{\typesetcodeonly}{%
+ \begin{list}{}{%
+ \setlength\itemindent{0pt}
+ \setlength\leftmargin{0pt}
+ \setlength\rightmargin{0pt}
+ }
+ \item
+ \begin{minipage}[c]{\LaTeXwidth}%
+ \hbox to\linewidth{\box\lst@samplebox\hss}%
+ \end{minipage}%
+ \end{list}
+}
+\edef\LaTeXexamplefile{\jobname.tmp}
+\lst@RequireAspects{writefile}
+\newbox\lst@samplebox
+\lstnewenvironment{LaTeXexample}[1][\typesetexampleandcode]{%
+ \let\typesetexample#1
+ \global\let\lst@intname\@empty
+ \setbox\lst@samplebox=\hbox\bgroup
+ \setkeys{lst}{tabsize=4,gobble=3,breakindent=0pt,%
+ basicstyle=\small\ttfamily,basewidth=0.51em,%
+ keywordstyle=\color{blue}}
+ \lst@BeginAlsoWriteFile{\LaTeXexamplefile}
+}{%
+ \lst@EndWriteFile\egroup
+ \setlength\LaTeXwidth{\wd\lst@samplebox}
+ \typesetexample%
+}
+\newcommand*{\lst@sampleInput}{%
+ \MakePercentComment\catcode`\^^M=10\relax
+ \small%
+ {\setkeys{lst}{SelectCharTable=\lst@ReplaceInput{\^\^I}%
+ {\lst@ProcessTabulator}}%
+ \leavevmode \input{\LaTeXexamplefile}}%
+ \MakePercentIgnore%
+}
+\newcommand*{\pkg}[1]{\textsf{#1}}
+\newcommand*{\currpkg}{\pkg{\jobname}\xspace}
+\newcommand*{\opt}[1]{\texttt{#1}}
+\newcommand*{\file}[1]{\texttt{#1}}
+\newcommand*{\ext}[1]{\file{.#1}}
+\newcommand*{\latin}[1]{\emph{#1}}
+\newcommand*{\etc}{%
+ \@ifnextchar.
+ {\latin{etc}}
+ {\latin{etc.}}
+ \xspace}
+\newcommand*{\eg}{%
+ \@ifnextchar.
+ {\latin{e.g}}
+ {\latin{e.g.}}
+ \xspace}
+\newcommand*{\ie}{%
+ \@ifnextchar.
+ {\latin{i.e}}
+ {\latin{i.e.}}
+ \xspace}
+\newcommand*{\AMS}{{\protect\usefont{OMS}{cmsy}{m}{n}%
+ A\kern-.1667em\lower.5ex\hbox{M}\kern-.125emS}}
+\providecommand*{\eTeX}{\ensuremath{\varepsilon}-\TeX}
+\newcommand*{\XeTeX}
+ {X\kern-.125em\lower.5ex\hbox{\reflectbox{E}}\kern-.1667em\TeX}
+%</jawltxdoc>
+%\fi
diff --git a/obsolete/macros/latex/exptl/si/si.ins b/obsolete/macros/latex/exptl/si/si.ins
new file mode 100644
index 0000000000..3e8a8d3c58
--- /dev/null
+++ b/obsolete/macros/latex/exptl/si/si.ins
@@ -0,0 +1,66 @@
+%%
+%% This is file `si.ins',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% si.dtx (with options: `install')
+%% ----------------------------------------------------------------
+%% The si package --- A comprehensive (SI) units package
+%% Maintained by Joseph Wright
+%% E-mail: joseph.wright@morningstar2.co.uk
+%% Released under the LaTeX Project Public License v1.3c or later
+%% See http://www.latex-project.org/lppl.txt
+%% ----------------------------------------------------------------
+%%
+\input docstrip.tex
+\keepsilent
+\askforoverwritefalse
+\preamble
+ ----------------------------------------------------------------
+ The si package --- A comprehensive (SI) units package
+ Maintained by Joseph Wright
+ E-mail: joseph.wright@morningstar2.co.uk
+ Released under the LaTeX Project Public License v1.3c or later
+ See http://www.latex-project.org/lppl.txt
+ ----------------------------------------------------------------
+
+\endpreamble
+\Msg{Generating si files:}
+\usedir{tex/latex/contib/si}
+\generate{\file{\jobname.ins}{\from{\jobname.dtx}{install}}
+ \file{\jobname.sty}{\from{\jobname.dtx}{package}}
+ \file{jawltxdoc.sty}{\from{\jobname.dtx}{jawltxdoc}}
+}
+\usedir{tex/latex/contib/config}
+\generate{\file{si-SIunits.cfg}{\from{\jobname.dtx}{SIunits}}
+ \file{si-sistyle.cfg}{\from{\jobname.dtx}{sistyle}}
+ \file{si-unitsdef.cfg}{\from{\jobname.dtx}{unitsdef}}
+ \file{si-units.cfg}{\from{\jobname.dtx}{units}}
+}
+\generate{\file{si-prefix.cfg}{\from{\jobname.dtx}{prefix}}
+ \file{si-named.cfg}{\from{\jobname.dtx}{named}}
+ \file{si-prefixed.cfg}{\from{\jobname.dtx}{prefixed}}
+ \file{si-addn.cfg}{\from{\jobname.dtx}{addn}}
+ \file{si-accepted.cfg}{\from{\jobname.dtx}{accepted}}
+ \file{si-physical.cfg}{\from{\jobname.dtx}{physical}}
+ \file{si-abbr.cfg}{\from{\jobname.dtx}{abbr}}
+}
+\generate{\file{si-synchem.cfg}{\from{\jobname.dtx}{synchem}}
+ \file{si-hep.cfg}{\from{\jobname.dtx}{hep}}
+ \file{si-binary.cfg}{\from{\jobname.dtx}{binary}}
+}
+\generate{\file{si-UK.cfg}{\from{\jobname.dtx}{UK}}
+ \file{si-USA.cfg}{\from{\jobname.dtx}{USA}}
+ \file{si-germany.cfg}{\from{\jobname.dtx}{germany}}
+ \file{si-south-africa.cfg}{\from{\jobname.dtx}
+ {south-africa}}
+}
+\nopreamble
+\usedir{doc/latex/contib/si}
+\generate{\file{\jobname.bib}{\from{\jobname.dtx}{refs}}
+}
+\endbatchfile
+\endinput
+%%
+%% End of file `si.ins'.
diff --git a/obsolete/macros/latex/exptl/si/si.pdf b/obsolete/macros/latex/exptl/si/si.pdf
new file mode 100644
index 0000000000..a0cbaf3352
--- /dev/null
+++ b/obsolete/macros/latex/exptl/si/si.pdf
Binary files differ
diff --git a/obsolete/macros/latex209/contrib/aaai/aaai-doc.tex b/obsolete/macros/latex209/contrib/aaai/aaai-doc.tex
new file mode 100644
index 0000000000..43ed4241f6
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aaai/aaai-doc.tex
@@ -0,0 +1,384 @@
+%NAME: aaai-doc.tex
+\documentstyle[aaai]{article}
+
+\title{Instructions to Authors\thanks{Schlumberger Palo Alto Research
+supported the development of these instructions.}}
+\author{Tom Mitchell \and Reid G. Smith \\
+ Program Co-Chairs \\ AAAI-88 Conference
+ \And
+ Shirley Jowell \\
+ Morgan Kaufmann Publishers \\
+ San Mateo, California}
+
+\begin{document}
+
+\maketitle
+
+\begin{abstract}
+The {\em Proceedings of AAAI-88}, the published presentations of
+ the National Conference on Artificial Intelligence, will be
+ printed using the photo-offset print process directly from
+ camera-ready copy furnished by the authors.
+ To ensure that all papers in the {\em Proceedings} have a uniform
+ appearance, authors are asked to adhere to the following
+ instructions.
+\end{abstract}
+
+
+\section{Introduction}
+
+This year AAAI papers will not be reduced by the printers,
+but instead will be printed from $8.5 \times 11''$ masters.
+As a result, preparation of AAAI papers will be easier at most
+institutions.
+
+AAAI papers should be typeset using a system such as \LaTeX{} or Scribe
+and printed using a good laser or other letter-quality printer.
+{\em Do not use line printer or dot matrix printer output.}
+Papers with poor quality output, e.g., light or gray type,
+and papers which significantly deviate from these instructions,
+e.g., by using 8-point fonts,
+will not be included in the proceedings,
+as such papers would be rendered
+unreadable by the printing process.
+
+Output can either be printed directly on the model forms,
+or printed on heavy bond paper and pasted onto
+the model forms using a glue stick, spray adhesive, or rubber cement.
+The pasted area should be flat and free from creases,
+and there should be no excess glue anywhere on the forms.
+
+\section{Style and Format}
+
+\subsection{General Instructions}
+
+Manuscripts must be printed two columns to a page on the master forms
+supplied.
+The light blue guidelines on the forms (which will not reproduce in
+the printing process) outline the printing area.
+Do not print anything outside of these lines.
+Use only one side of the master forms.
+
+Use 10-point type in a clear, readable font with 1-point leading (10 on 11).
+``Write-white'' laser printers must use fonts specifically designed for
+them---not fonts for ``write-black'' printers.
+
+Start all pages (except the first) directly under the top margin, as
+indicated.
+See next section regarding how to format the first page.
+
+Indent when starting a new paragraph, except after major headings.
+
+\subsection{Title Page}
+
+\subsubsection{Title and Author Information}
+The title appears near the top of the first page, centered on the entire
+width of the page, in a 14-point bold font.
+The name(s) of the author(s) appear in the designated areas below the title
+of the paper, along with affiliation(s) and complete address(es) in a
+12-point font.
+
+Any credit to a sponsoring agency should appear in a footnote at the
+bottom of the left column of the first page.
+See the example in these instructions.
+
+\subsubsection{Abstract}
+The Abstract appears at the beginning of the first column, using a
+slightly smaller width than the body of the paper.
+The title ``Abstract'' appears above the body of the abstract in
+a bold font.
+The Abstract should be no longer than 200 words.
+
+\subsubsection{Text}
+The main body of the text follows the Abstract, observing the blue
+guidelines for the two-column format.
+
+
+\subsection{Sections}
+
+Section, subsection, and subsubsection headings should be printed in the
+style shown in these instructions.
+Leave a blank space of approximately 10 points above and 8 points below
+section headings, 9 points above and 4 points below subsection headings,
+and 8 points above and 3 points below subsubsection headings.
+
+Special sections should be arranged and headed as follows:
+
+\begin{description}
+\item[Acknowledgments:] The Acknowledgments section, if included,
+ follows the main body of the text and is headed
+ ``Acknowledgments,'' printed in the same style
+ as a section heading, but without a number.
+\item[Appendices:] Any Appendices follow the Acknowledgments
+ (or directly follow the text) and look like
+ sections, except that they are numbered with capital
+ letters instead of arabic numerals.
+\item[References:]
+The References section is headed ``References,'' printed in the same
+style as a section heading, but without a number.
+A sample list of references is given at the end of these
+instructions.
+Use a consistent format for references, such as provided by
+Bib\TeX{}.
+
+\end{description}
+
+\subsection{Citations}
+
+Citations within the text should include the author's last name and
+year, for example \cite{cheeseman:probability}.
+Append lower case letters to the year in cases of ambiguity.
+Multiple authors should be treated as in the following examples:
+\cite{abelson-et-al:scheme} and
+\cite{brachman-schmolze:kl-one}.
+If the author portion of a citation is obvious, it should be omitted,
+e.g., Levesque \shortcite{levesque:belief}.
+Multiple citations should be collapsed as follows:
+\cite{levesque:functional-foundations,levesque:belief}.
+
+\nocite{abelson-et-al:scheme}
+\nocite{brachman-schmolze:kl-one}
+\nocite{cheeseman:probability}
+\nocite{haugeland:mind-design}
+\nocite{lenat:heuristics}
+\nocite{levesque:functional-foundations}
+\nocite{levesque:belief}
+
+\subsection{Footnotes}
+
+Footnotes should appear at the bottom of the page.
+They are referred to by superscript numbers.\footnote{This is how your
+footnotes should appear.}
+Footnotes should be separated from the text by a short line.\footnote{Note
+the line separating these footnotes from the text.}
+
+\section{Figures, Drawings, Tables, and Photographs}
+
+\subsection{General Instructions}
+
+Figures, drawings, tables, and photographs should be placed throughout
+the paper at the places where they are first discussed, rather than at
+the end of the paper.
+If placed at the bottom or top of a page, illustrations may run across
+both columns.
+Securely attach them to the master form with glue stick, spray adhesive,
+rubber cement, or write tape.
+Do not use transparent tape as the printing process causes it to
+obscure copy.
+Number them sequentially.
+The references should be in the following form:
+Figure 1, Table 1, etc.
+
+The illustration number and caption should appear under the
+illustration.
+Leave a margin of 1/4-inch around the area covered by the
+figure and caption.
+
+Captions, labels, and other text in illustrations
+be at least 10-point type.
+
+{\em Line printer printouts should not be used.}
+
+\subsection{Drawings}
+
+Original line drawings should be drawn in {\em black\/} ink, not pencil.
+Do not color in drawings.
+Lines should be heavy enough to reproduce well.
+
+\subsection{Photographs}
+
+Photographs should be black and white glossies.
+Do not pre-halftone photographs.
+Color photographs do not produce well.
+(Red will reproduce as black, for example.)
+Photographs incur extra expense, so
+please use them judiciously.
+
+\section{Length of Papers}
+
+Papers should not exceed {\em five\/} pages, including illustrations and
+tables.
+One additional page may be included by accompanying the paper with a
+check for \$250, payable to the American Association for Artificial
+Intelligence.
+Papers over six pages will not be accepted for publication.
+
+\section{Identification}
+
+Make certain that your name is typed or written on the {\em back\/} of
+every page of the masters, and number the pages sequentially.
+Failure to do this may result in some pages of your paper being
+misplaced or, worse, inserted in another paper.
+This information is for identification only (final page numbers will
+be assigned by the Publisher).
+
+\section{Mailing}
+
+{\em Make a photocopy of your final paper.}
+Keep the photocopy in your files for reference or in case the original
+is lost in the mail.
+
+Your paper should be {\em received\/} by June 1, 1988.
+{\em Papers received later than June 1, 1988 will not be
+included in the proceedings.}
+
+Do not fold the master forms for mailing.
+Use the enclosed cardboard backing and envelope for mailing.
+If you use a separate envelope, clearly mark on the envelope:
+{\bf Do Not Fold or Bend}.
+
+Send to:
+\begin{quote}
+Shirley Jowell \\
+Attn: AAAI-88 Conference \\
+Morgan Kaufmann Publishers \\
+2929 Campus Drive \\
+San Mateo, CA \hspace{1em} 94403\\
+U. S. A.
+\end{quote}
+
+\section{Inquiries}
+
+If you have any questions about the preparation or submission of your
+paper as instructed in this package, please contact:
+\begin{quote}
+Shirley Jowell \\
+Morgan Kaufmann Publishers \\
+(415) 578-9911
+\end{quote}
+
+\appendix
+
+\section{Using \LaTeX{}}
+
+A \LaTeX{} style option (for version 2.09 of \LaTeX{}) that implements these
+instructions has been prepared,
+as well as
+two Bib\TeX{} styles
+(one for version 0.98i and one for version 0.99c of Bib\TeX{})
+that implement the citation and reference style in
+these instructions.
+
+The relevant files have been placed in the \LaTeX{} style collection at
+Rochester.
+To retrieve these files use one of the following methods:
+\begin{enumerate}
+\item For Internet users - how to ftp:
+
+Here is an example session. Ftp syntax varies from host to
+host; your syntax may be different.
+
+\begin{verbatim}
+% ftp cayuga.cs.rochester.edu
+ ... (general blurb)
+ftp> login anonymous
+Password: <any non-null string>
+ ... (more blurb)
+ftp> cd public/latex-style
+ ... (more blurb)
+ftp> get aaai-instructions.tex
+ ... (more blurb)
+ftp> get aaai.sty
+ ... (more blurb)
+ftp> get aaai-named-0.99.bst
+ ... (more blurb)
+ftp> get aaai-named-0.98.bst
+ ... (more blurb)
+ftp> quit
+\end{verbatim}
+
+The name ``rochester.arpa'' or the address
+``192.\discretionary{}{}{}5.\discretionary{}{}{}53.\discretionary{}{}{}209''
+can be used instead of ``cayuga.cs.rochester.edu''.
+
+\item Non-Internet users - how to retrieve by mail:
+
+Send a piece of mail to LaTeX-Style@cs.rochester.edu
+in the following format:
+Subject line should contain the phrase ``@file request''. Body of the
+mail should start with a line containing only an @ (at) sign.
+The first line following should be a mail address {\em from}
+rochester {\em to} you. Follow with the names of the files you want
+separated by spaces or new lines.
+End with a line containing only an @ sign. Case is not significant.
+
+For example, if you are {\tt user} at {\tt dept.site.edu}, this is what you
+should send:
+
+\begin{verbatim}
+To: latex-style@cs.rochester.edu
+Subject: @file request
+
+@
+user@dept.site.edu
+aaai-instructions.tex aaai.sty
+aaai-named-0.99.bst aaai-named-0.98.bst
+@
+\end{verbatim}
+
+It is best to fully qualify your mail address unless it is fully
+registered. For example, use user\%site.bitnet@cunyvm.cuny.edu instead of
+user@site.bitnet.
+
+\end{enumerate}
+
+Further information on using these styles can be obtained by writing:
+\begin{quote}
+Peter F. Patel-Schneider \\
+Schlumberger Palo Alto Research \\
+3340 Hillview Avenue \\
+Palo Alto, California \hspace{1em} 94304 \\
+pfps@spar.slb.com
+\end{quote}
+
+%% This section was initially prepared using BibTeX. The .bbl file was
+%% placed here later
+%\bibliography{publications}
+%\bibliographystyle{aaai-named-0.99}
+\begin{thebibliography}{}
+
+\bibitem[\protect\citename{Abelson \bgroup \em et al.\egroup ,
+ }1985]{abelson-et-al:scheme}
+Harold Abelson, Gerald~Jay Sussman, and Julie Sussman.
+\newblock {\em Structure and Interpretation of Computer Programs}.
+\newblock MIT Press, Cambridge, Massachusetts, 1985.
+
+\bibitem[\protect\citename{Brachman and Schmolze,
+ }1985]{brachman-schmolze:kl-one}
+Ronald~J. Brachman and James~G. Schmolze.
+\newblock An overview of the {KL-ONE} knowledge representation system.
+\newblock {\em Cognitive Science}, 9(2):171--216, April--June 1985.
+
+\bibitem[\protect\citename{Cheeseman, }1985]{cheeseman:probability}
+Peter Cheeseman.
+\newblock In defense of probability.
+\newblock In {\em Proceedings IJCAI-85}, pages 1002--1009. International Joint
+ Committee for Artificial Intelligence, August 1985.
+
+\bibitem[\protect\citename{Haugeland, }1981]{haugeland:mind-design}
+John Haugeland, editor.
+\newblock {\em Mind Design}.
+\newblock Bradford Books, Montgomery, Vermont, 1981.
+
+\bibitem[\protect\citename{Lenat, }1981]{lenat:heuristics}
+Douglas~B. Lenat.
+\newblock The nature of heuristics.
+\newblock Technical Report CIS-12 (SSL-81-1), Xerox Palo Alto Research Centers,
+ April 1981.
+
+\bibitem[\protect\citename{Levesque, }1984a]{levesque:functional-foundations}
+Hector~J. Levesque.
+\newblock Foundations of a functional approach to knowledge representation.
+\newblock {\em Artificial Intelligence}, 23(2):155--212, July 1984.
+
+\bibitem[\protect\citename{Levesque, }1984b]{levesque:belief}
+Hector~J. Levesque.
+\newblock A logic of implicit and explicit belief.
+\newblock In {\em Proceedings AAAI-84}, pages 198--202. American Association
+ for Artificial Intelligence, August 1984.
+
+\end{thebibliography}
+
+\end{document}
+
+
diff --git a/obsolete/macros/latex209/contrib/aaai/aaai.sty b/obsolete/macros/latex209/contrib/aaai/aaai.sty
new file mode 100644
index 0000000000..7f50ee3e1d
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aaai/aaai.sty
@@ -0,0 +1,135 @@
+% This LaTeX style is for papers to be printed in the proceedings of AAAI-88.
+% Prepared by Peter F. Patel-Schneider, liberally using the ideas of
+% other style hackers, including Barbara Beeton.
+% This style is NOT guaranteed to work. It is provided in the hope
+% that it will make the preparation of papers for AAAI-88 easier.
+%
+% There are undoubtably bugs in this style. If you make bug fixes,
+% improvements, etc. please let me know. My e-mail address is:
+% pfps@spar.slb.com
+
+\typeout{Conference Style for AAAI-88 -- released 5 April 1988}
+
+% NOTE: Some laser printers have a serious problem printing TeX output.
+% These printing devices, commonly known as ``write-white'' laser
+% printers, tend to make characters too light. To get around this
+% problem, a darker set of fonts must be created for these devices.
+%
+
+% Physical page layout
+\setlength\topmargin{-0.5in} \setlength\oddsidemargin{-0.5in}
+\setlength\textheight{9.5in} \setlength\textwidth{7.3in}
+\setlength\columnsep{0.3in} \newlength\titlebox \setlength\titlebox{1.75in}
+\setlength\headheight{0pt} \setlength\headsep{0pt}
+\setlength\footheight{0pt} \setlength\footskip{0pt}
+\thispagestyle{empty} \pagestyle{empty}
+\flushbottom \twocolumn \sloppy
+
+% We're never going to need a table of contents, so just flush it to
+% save space --- suggested by drstrip@sandia-2
+\def\addcontentsline#1#2#3{}
+
+% Title stuff, taken from deproc.
+\def\maketitle{\par
+ \begingroup
+ \def\thefootnote{\fnsymbol{footnote}}
+ \def\@makefnmark{\hbox to 0pt{$^{\@thefnmark}$\hss}}
+ \twocolumn[\@maketitle] \@thanks
+ \endgroup
+ \setcounter{footnote}{0}
+ \let\maketitle\relax \let\@maketitle\relax
+ \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\let\thanks\relax}
+\def\@maketitle{\vbox to \titlebox{\hsize\textwidth
+ \linewidth\hsize \vskip 2ex plus 1fil minus 2ex \centering
+ {\Large\bf \@title \par} \vskip 3ex plus 0.5fil minus 2ex
+ {\def\and{\unskip\enspace{\rm and}\enspace}%
+ \def\And{\end{tabular}\hss \egroup \hskip 1in plus 2fil
+ \hbox to 0pt\bgroup\hss \begin{tabular}[t]{c}\bf}%
+ \hbox to \linewidth{\large \hfil\hfil
+ \hbox to 0pt\bgroup\hss \begin{tabular}[t]{c}\bf\@author
+ \end{tabular}\hss\egroup
+ \hfil\hfil}}
+ \vskip 4ex plus 2fil minus 2ex
+}}
+\renewenvironment{abstract}{\centerline{\large\bf
+ Abstract}\vspace{0.5ex}\begin{quote}}{\par\end{quote}\vskip 1ex}
+
+% don't box citations, add space between multiple citations, separate with ;
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+ \def\@citea{}\@cite{\@for\@citeb:=#2\do
+ {\@citea\def\@citea{; }\@ifundefined
+ {b@\@citeb}{{\bf ?}\@warning
+ {Citation `\@citeb' on page \thepage \space undefined}}%
+{\csname b@\@citeb\endcsname}}}{#1}}
+% Allow short (name-less) citations, when used in
+% conjunction with a bibliography style that creates labels like
+% \citename{<names>, }<year>
+\let\@internalcite\cite
+\def\cite{\def\citename##1{##1}\@internalcite}
+\def\shortcite{\def\citename##1{}\@internalcite}
+\def\@biblabel#1{\def\citename##1{##1}[#1]\hfill}
+
+% sections with less space
+\def\section{\@startsection {section}{1}{\z@}{-2.0ex plus
+ -0.5ex minus -.2ex}{1.5ex plus 0.3ex minus .2ex}{\Large\bf\raggedright}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-1.8ex plus
+ -0.5ex minus -.2ex}{0.8ex plus .2ex}{\large\bf\raggedright}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{1.5ex plus
+ 0.5ex minus .2ex}{0.5ex plus .2ex}{\normalsize\bf\raggedright}}
+\def\paragraph{\@startsection{paragraph}{4}{\z@}{1.5ex plus
+ 0.5ex minus .2ex}{-1em}{\normalsize\bf}}
+\def\subparagraph{\@startsection{subparagraph}{5}{\parindent}{1.5ex plus
+ 0.5ex minus .2ex}{-1em}{\normalsize\bf}}
+
+% Footnotes
+\footnotesep 6.65pt %
+\skip\footins 9pt plus 4pt minus 2pt
+\def\footnoterule{\kern-3pt \hrule width 5pc \kern 2.6pt }
+\setcounter{footnote}{0}
+
+% Lists and paragraphs
+\parindent 1em
+\topsep 4pt plus 1pt minus 2pt
+\partopsep 1pt plus 0.5pt minus 0.5pt
+\itemsep 2pt plus 1pt minus 0.5pt
+\parsep 2pt plus 1pt minus 0.5pt
+
+\leftmargin 2em \leftmargini\leftmargin \leftmarginii 2em
+\leftmarginiii 1.5em \leftmarginiv 1.0em \leftmarginv .5em \leftmarginvi .5em
+\labelwidth\leftmargini\advance\labelwidth-\labelsep \labelsep 5pt
+
+\def\@listi{\leftmargin\leftmargini}
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 2pt plus 1pt minus 0.5pt
+ \parsep 1pt plus 0.5pt minus 0.5pt
+ \itemsep \parsep}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 1pt plus 0.5pt minus 0.5pt
+ \parsep \z@ \partopsep 0.5pt plus 0pt minus 0.5pt
+ \itemsep \topsep}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
+\abovedisplayskip 7pt plus2pt minus5pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip 0pt plus3pt%
+\belowdisplayshortskip 4pt plus3pt minus3pt%
+
+% Less leading in most fonts (due to the narrow columns)
+% The choices were between 1-pt and 1.5-pt leading
+\def\@normalsize{\@setsize\normalsize{11pt}\xpt\@xpt}
+\def\small{\@setsize\small{10pt}\ixpt\@ixpt}
+\def\footnotesize{\@setsize\footnotesize{10pt}\ixpt\@ixpt}
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{16pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{20pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{23pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{28pt}\xxvpt\@xxvpt}
diff --git a/obsolete/macros/latex209/contrib/aasmacros/Makefile b/obsolete/macros/latex209/contrib/aasmacros/Makefile
new file mode 100644
index 0000000000..5e4f280371
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aasmacros/Makefile
@@ -0,0 +1,96 @@
+# Makefile for AAS author prepared package.
+
+# Macros to facilitate pkg development.
+PACKAGE = aastex30
+DATE = 10 Jan 93
+ARCEXT = tar.Z
+PDL = ps
+STYLES = aasms.sty aaspp.sty aaspptwo.sty aj_pt.sty apjpt.sty art8.sty
+GUIDE = aastex
+DVIS = $(GUIDE).dvi graphics.dvi paper1.dvi paper2.dvi sample1.dvi \
+ sample2.dvi samptbls.dvi kspp.dvi
+FILES = Makefile README aasms.doc aasms.sty aaspp.doc aaspp.sty \
+ aaspptwo.doc aaspptwo.sty apjpt.doc apjpt.sty aj_pt.doc \
+ aj_pt.sty art8.doc art8.sty \
+ aastex.tex eqsecnum.sty flushrt.sty tighten.sty epsf.sty \
+ paper1.tex paper2.tex sample1.tex sample2.tex sample2.aux \
+ samp2tbl.tex samptbls.tex table1.tex table2.tex table3.tex \
+ graphics.tex graphics.aux sgi*.eps kspp.tex
+
+# Add some useful inference rules for LaTeX development.
+.SUFFIXES: .doc .sty .tex .dvi .$(PDL)
+
+.doc.sty:
+ doc2sty $*
+
+.tex.dvi:
+ latex $<
+
+.dvi.$(PDL):
+ dvips $< -o $*.$(PDL)
+
+# Generalized targets, housekeeping, etc.
+first: $(GUIDE)
+all: $(DVIS)
+allsty: $(STYLES)
+
+clean:
+ $(RM) a.out core *.dvi *.log *.$(PDL)
+
+veryclean: clean
+ $(RM) *.aux
+ $(RM) $(PACKAGE).$(ARCEXT)
+ $(RM) $(STYLES)
+
+tar: clean
+ $(RM) $(PACKAGE).$(ARCEXT)
+ tar -cvf - $(FILES) | compress -c > /tmp/$(PACKAGE).$(ARCEXT)
+ mv /tmp/$(PACKAGE).$(ARCEXT) .
+
+uu: tar
+ uuencode $(PACKAGE).$(ARCEXT) $(PACKAGE).$(ARCEXT) > /tmp/$(PACKAGE).uu
+ mv /tmp/$(PACKAGE).uu $(HOME)
+
+unZ:
+ zcat $(HOME)/$(PACKAGE).$(ARCEXT) | tar -xvf -
+
+zoo: clean
+ $(RM) $(PACKAGE).zoo
+ zoo ah $(PACKAGE).zoo $(FILES)
+
+ver: setver
+ @echo 'Version in Makefile'
+ @egrep '^(PACKAGE|DATE)' Makefile
+
+setver:
+ @echo 'Version in paspconf.doc'
+ @echo -n 'PACKAGE = pasp'
+ @grep 'def.*tex@ver' paspconf.doc | sed 's/[^0-9]//g'
+ @echo -n 'DATE = '
+ @grep 'def.*tex@date' paspconf.doc | sed 's/^.*{//' | sed 's/}.*$$//'
+
+# Dependency targets.
+
+$(GUIDE): $(GUIDE).dvi
+$(GUIDE).$(PDL): $(GUIDE).dvi
+$(GUIDE).dvi: $(GUIDE).tex aaspptwo.sty
+
+graphics: graphics.dvi
+graphics.$(PDL): graphics.dvi
+graphics.dvi: graphics.tex aasms.sty
+
+kspp: kspp.dvi
+kspp.$(PDL): kspp.dvi
+kspp.dvi: kspp.tex aaspp.sty
+
+sample1: sample1.dvi
+sample1.$(PDL): sample1.dvi
+sample1.dvi: sample1.tex aasms.sty
+
+sample2: sample2.dvi
+sample2.$(PDL): sample2.dvi
+sample2.dvi: sample2.tex samp2tbl.tex aasms.sty aaspp.sty aaspptwo.sty
+
+samptbls: samptbls.dvi
+samptbls.$(PDL): samptbls.dvi
+samptbls.dvi: samptbls.tex aj_pt.sty apjpt.sty art8.sty table1.tex table2.tex table3.tex
diff --git a/obsolete/macros/latex209/contrib/aasmacros/README b/obsolete/macros/latex209/contrib/aasmacros/README
new file mode 100644
index 0000000000..41e3cad431
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aasmacros/README
@@ -0,0 +1,328 @@
+% README -- Contents of the AASTeX macro package distribution
+
+Thanks for your interest in the AASTeX macros for manuscript preparation.
+This directory contains all the files in the distribution. They are
+described briefly immediately below. Following the file descriptions
+are short installation instructions, the generic recipe for printing the
+user guide and samples, and information about contacting us regarding
+the distribution.
+
+
+README This file
+
+aasms.doc Fully documented source for the "manuscript"
+ substyle. Contains macro definitions + comments.
+aasms.sty LaTeX input style file for the "manuscript"
+ substyle. This is the .doc file stripped of
+ comments and unnecessary whitespace.
+
+aaspp.doc Fully documented source for the "preprint"
+ substyle. Contains macro definitions + comments.
+aaspp.sty LaTeX input style file for the "preprint"
+ substyle. This is the .doc file stripped of
+ comments and unnecessary whitespace.
+
+aaspptwo.doc Documented source for a two-column preprint substyle.
+aaspptwo.sty LaTeX input style file for two-column preprint
+ substyle.
+
+aj_pt.doc Documented source for the AJ plano tables substyle.
+aj_pt.sty LaTeX input style file for AJ plano tables substyle.
+
+apjpt.doc Documented source for the ApJ plano tables substyle.
+apjpt.sty LaTeX input style file for ApJ plano tables substyle.
+
+art8.doc Documented 8pt style option.
+art8.sty LaTeX input style file for the 8pt style option.
+
+eqsecnum.sty Substyle file that enables equations to be
+ numbered with sections, rather than ordinally.
+tighten.sty Substyle file that causes "manuscript" style
+ papers to be single-spaced rather than double.
+
+epsf.sty A copy of Rokicki's epsf.sty file that is supplied
+ with dvips. It is included so that style files
+ can be interpreted, and so that authors can
+ include proper space for EPS files even if they
+ do not have dvips.
+
+aastex.tex The user input guide for the package.
+
+sample1.tex Minimal sample paper.
+sample2.tex Sample paper with "typical" content and markup.
+samp2tbl.tex "Long" table for sample, marked up as a plano
+ table in the manuscript.
+
+samptbls.tex Plano tables sample. Sets style and includes:
+table1.tex Sample plano table #1.
+table2.tex Sample plano table #2.
+table3.tex Sample plano table #3.
+
+graphics.tex Initial proposal to WGAS and Pubs Board
+ suggesting standardized use of Encapsulated
+ PostScript for graphics inclusions.
+sgi*.eps Encapsulated PostScript plots for graphics.tex.
+
+kspp.tex Preprint format proposal from K.Sellgren to the
+ Pubs Board.
+
+paper1.tex LaTeX source for June 1989 AAS poster.
+paper2.tex LaTeX source for June 1990 AAS poster.
+
+
+aastex30.tar.Z All of the above files can be retrieved at once
+ in this compressed tarfile, if desired.
+
+
+INSTALLING THE STYLE FILES
+
+The *.sty files must be "installed" so that LaTeX can read them. This
+simply means that they must be placed either in (1) the user's working
+directory containing the paper being processed [single-user installation],
+or (2) in the TeX/LaTeX system input directory [site-wide installation].
+
+Individuals who obtain the files for their personal use should just put
+the files in the same directory that they usually use when preparing
+papers, memos, etc. with LaTeX.
+
+Sites that expect usage by several authors will probably find it preferable
+to install the files in the standard TeX inputs area. In the parlances of
+popular OS's, these areas are typically called
+
+ /usr/local/lib/tex/inputs Unix and variants
+ SOME$DISK:[TEX.INPUTS] VMS/Files-11 specification
+ C:\EMTEX\TEXINPUT DOS
+
+The *.doc files are not actually read by LaTeX. They are the "source code"
+files for the corresponding .sty files. The *.sty files are produced
+mechanically from the *.doc files; these .sty files are never edited.
+Most installations of LaTeX keep .doc and .sty files in the same directory
+so that they can be easily found. We suggest doing the same with these.
+
+The user's guide and sample papers could be kept in a system-wide TeX
+inputs directory as well, but the system administrator may find it desirable
+to change the filenames somewhat, since they are quite generic and prone
+to filename collisions.
+
+
+PRINTING THE GUIDE AND SAMPLES
+
+The User Guide should be printed out for best results in reading it.
+The Guide is written using the aaspp substyle from the AASTeX macro
+package, and is therefore a LaTeX document. It must be processed by
+LaTeX, resulting in a compiled, device-independent format (a .dvi file).
+The DVI file has to be translated through a program that knows about the
+specific printer you wish to print on; such a program is often called a
+"DVI driver".
+
+Suppose you wish to print on a PostScript laser printer, and that the
+DVI driver on your computer system is called "dvips". The generic steps
+to be followed to get hardcopy are
+
+ prompt> latex aastex
+ prompt> dvips aastex
+ prompt> print aastex.ps
+
+There are various system- and program-specific eccentricities which
+cannot be fully enumerated here. Some things to watch out for:
+
+ 1. On some systems, TeX and LaTeX do not permit a filename extension
+ (the .tex) on the input file specification; .tex is assumed.
+ On other systems, it is optional.
+ 2. Most DVI drivers do not require the .dvi extension on the input
+ filename. The extension of the output file (the one destined
+ for a specific printer) is variable, often a site-dependent
+ configuration parameter.
+ 3. The user interfaces for DVI drivers are quite inconsistent.
+ Some operate in an interactive mode, asking the user about
+ variable setup parameters, while some only accept control
+ input on the command line.
+ 4. On some systems, the DVI translation and printing are combined,
+ so one would enter only one OS command after running LaTeX.
+
+There is no way for us to know details of your installation, so you must
+inquire of the system administrator responsible for LaTeX, or hope that
+someone has written the LaTeX "Local Guide" for your site.
+
+
+ADMINISTRATIVE DETAILS
+
+This package has been prepared by Chris Biemesderfer on behalf of the
+AAS Executive Office. It has evolved from a project of the Working
+Group on Astronomical Software (WGAS), chaired by Bob Hanisch of the
+Space Telescope Science Institute in Baltimore. We would like to
+express appreciation to the National Radio Astronomy Observatory and
+National Optical Astronomy Observatories for their support of this
+project during its germination.
+
+Comments, suggestions, complaints, etc., can be sent electronically.
+Community feedback is valuable, and will be retained and evaluated so
+that we can coordinate the evolution of the package with the
+requirements of editors and publishers as moderated by the AAS
+Executive Office and the Publications Board.
+
+cbiemes@noao.edu
+7 Jan 1993
+
+
+REVISION HISTORY
+
+v1.0, Feb 1989
+ Original test version written at STScI and NRAO.
+
+v2.0, Jun 1990
+ First public release of package to community following AAS meeting
+ in Albuquerque.
+
+v2.1, May 1991
+ Changed style filenames: aasmanuscript -> aasms, aaspreprint -> aaspp
+ for benefit of DOS users, and to conform to Posix.
+
+ Fixed the textheight to compensate for header and footer space
+ so that page numbers will in fact be on the bottoms of the pages.
+
+ Updated journal abbreviations as per scheme agreed upon by various
+ editors and announced by Helmut Abt in ApJ 357, 1.
+
+ Added an assortment of symbols, etc. from Francois Schweizer.
+
+v2.2, Aug 1991
+ Rewrote the tablenote code, using ideas from a style file posted
+ to the Usenet in June. This new implementation permits the use
+ of any identifying letters (or number for that matter) for the
+ notes, and will print them in the order specified by the user
+ rather than assuming alphabetical. In the process, fixed a bug
+ where the buffered tablenotes were not being erased from table
+ to table.
+
+ Revised the way journal abbreviations are typeset. Rather than
+ simply being a string, they are now processed through a macro and
+ the journal type style is parameterized.
+
+ Moved the WGAS ID footnote to the last page of references from
+ title page. There have been some "complaints" about this being
+ present at all, but it is the only way we can keep track of the
+ use of the package at this point, so we retain it.
+
+v2.3, Aug 1992
+ Formalized naming convention for style files (see Stynames.spc).
+
+ Revisions for compliance with RevTeX markup.
+ Added some revtex@ parameters for software development and
+ tracking/reporting purposes. Changed mathsec substyle option
+ to eqsecnum (mathsec.sty -> eqsecnum.sty). Changed
+ \mathwithsecnums -> \eqsecnum. Changed \la -> \alt,
+ \ga -> \agt. Added \text for cased fractions.
+
+ Revised aasms to conform with preferences of UofC Press manuscript
+ editors. Such things as ragged right text, no hyphenation, proper
+ double spacing in tables, etc. are ensured. (G.Brady)
+
+ Fixed bug that resulted in the persistent \footnoterule in table
+ footnotes. (C.Pilachowski, P.Shopbell)
+
+ Added a Makefile to ease development.
+
+v3.0, Dec 1992
+ Moved page numbers to top of pages, per request from ApJ
+ editorial office. Created "plaintop" pagestyle for MSs that
+ numbers pages at the top of the sheet, centered.
+
+ Added \tablerefs, \tablecomments, \cutinhead, and \sidehead,
+ macros to facilitate handling complexities in ApJ/AJ tables.
+
+ Added plano tables styles (non-trivial!). This includes some
+ new author markup that is applicable to "long" tables in MSs
+ as well. Added a "planotables" environment, and commands
+ for identifying structural parts of the table: \tablewidth,
+ \tablecaption, \tablehead, \colhead, \tableheadfrac, \tabletail,
+ \startdata, \nodata, \nl, \tablevspace, \tablebreak, and, in
+ the plano style files, \ptlandscape.
+
+ Fixed bug with preliminary plano tables that prevented \nodata
+ symbol to be justified with numerals (usually r). The ellipsis
+ or em-dash (or whatever) now centers horizontally as well as
+ vertically. (C.Pilachowski, G.Brady)
+
+ Added some internal parameterization and control of automatic
+ upper-casing of section heads, etc. Authors should NOT be
+ instructed to upper case anything; the style should do this
+ when necessary. See remarks in .doc file for more information
+ about how the style designer can control this "easily".
+
+ Footnotes in MSs are same size as body text.
+
+ Fixed bug in \altaffiltext so that increment LaTeX footnote now
+ increments with alternate affiliation footnotes. The first
+ footnote called out in the text will then be properly numbered
+ N+1, where N is the number of \altaffiltexts.
+
+ Added markup for ionization state: \ion.
+
+ Added \singlespace, \doublespace so that leading can be
+ adjusted by authors. Use of these is not encouraged.
+
+ Changed \keywords syntax. Authors are now required to provide
+ proper punctuation in the keyword list. The earlier attempt at
+ parsing the keywords was problematic.
+
+ Added EPS inclusion macros. These are designed to work with
+ Rokicki's dvips program. There is some concern that these
+ should have been designed to work with psfig instead. My
+ opinion about that is that intermediate layer (psfig) is
+ redundant with this package and by relying on it we require
+ authors to have two additional add-on packages (dvips and
+ psfig) rather than one. The psfig package and the EPS part
+ of the AASTeX package both serve the same purpose, namely,
+ to isolate the author from the details of the DVI driver.
+ The AASTeX package goes a bit farther in explicilty defining
+ descriptive markup semantics for specifying external plot files.
+
+ Revisions for compliance with RevTeX markup.
+ Changed \tightenlines -> \tighten. Changed \alt -> \lesssim,
+ \agt -> \gtrsim. Changed \text -> \case. Added \slantfrac.
+ Changed \applopt -> \ao.
+
+ Added slug line markup for assorted administrative details.
+ \revised, \paperid, \ccc, \cpright, \rectohead, \versohead, and
+ \slugcomment can all be used in preamble. Formatting for slug
+ line data has been isolated in internal \@dates, \@runheads,
+ \@slug, and \@makeslugcmmnt. \@journalname and \cpr@holder
+ have been added as internal parameters.
+
+ Added \authoraddr front matter (or back matter, whatever)
+ command for specifying author's postal address. This is the
+ address that is preferred for correspondence.
+
+ Added \markcite to correspond with references environment
+ to provide non-BibTeX-based citation and reference list
+ markup. \markcite does not do anything typographically in
+ AAS styles because the citation call-out style is straight
+ text. This is included partly for symmetry, but mostly
+ because we want to start training authors to identify
+ structure in their manuscripts. In the future, browsers
+ with hypertext-like capabilities will be widely available
+ to build linkage between citations, references, and the
+ articles being cited/referenced, and this will facilitate
+ preparation of the articles for such systems.
+
+ Changed \appendix to reset the equation counter and to
+ redefine \theequation.
+
+ Added mathletters environment to support "subequations".
+ This environment is used to suspend incrementing of the
+ primary equation counter in favor of a secondary one, so
+ that related equations can be grouped with the same
+ identifying number while still being separately identified
+ with lower case letters. I originally called this new
+ environment "letteredsubeqn" but changed to "mathletters"
+ for RevTeX compliance.
+
+ Added \eqnum, \tablenum, and \figurenum commands to enable
+ authors to override LaTeX automatic numbering for equations,
+ tables and figures. The corresponding LaTeX counter is NOT
+ auto-incremented when these commands are used. The commands
+ function by temporarily overriding \the<counter>; formatting
+ defined by \@eqnnum, \fnum@table, and \fnum@figure is not
+ affected. Note that these commands must be used *inside* the
+ appropriate displayed equation or float environment.
diff --git a/obsolete/macros/latex209/contrib/aasmacros/aasms.doc b/obsolete/macros/latex209/contrib/aasmacros/aasms.doc
new file mode 100644
index 0000000000..5a5925a19c
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aasmacros/aasms.doc
@@ -0,0 +1,1152 @@
+% AASMS.STY -- AAS manuscript substyle definition for LaTeX.
+
+% My convention for identifying configuration information is for styles
+% to define the five parameters below.
+
+\def\revtex@ver{3.0} % Version number of this file.
+\def\revtex@date{10 Jan 93} % Revision date.
+\def\revtex@org{AAS} % Sponsoring organization.
+\def\revtex@jnl{AAS} % Applicable journal, if specific.
+\def\revtex@genre{manuscript} % Document "type".
+
+% Display identifying message on screen and in logfile.
+
+\typeout{\revtex@org\space \revtex@genre\space substyle,
+ v\revtex@ver\space <\revtex@date>.}
+
+% The following mini-colophon identifies the article are having been
+% prepared with this macro package. The \revtex@pageid command only
+% defines the formatting of this colophon; its existence and placement
+% within the printed article is controlled by the use of this command
+% in the style file.
+
+\def\revtex@pageid{\xdef\@thefnmark{\null}
+ \@footnotetext{This \revtex@genre\space was prepared with the
+ \revtex@org\space \LaTeX\ macros v\revtex@ver.}}
+
+% Issue a warning if manuscripts are formatted with type smaller than 12pt.
+
+\def\genre@MS{manuscript}
+\def\genre@PP{preprint}
+\ifx\revtex@genre\genre@MS
+ \ifnum\@ptsize<2
+ \typeout{Warning: Undersize \revtex@genre\space font (1\@ptsize\space pts).
+ Using 12pt documentstyle option.}
+ \@input{art12.sty}
+ \fi
+\fi
+
+% ****************************************
+% * PAGE LAYOUT *
+% ****************************************
+
+% Create "plaintop" page style that has folios at top of page.
+
+\def\ps@plaintop{\let\@mkboth\@gobbletwo
+ \def\@oddfoot{}\def\@oddhead{\rm\hfil--\space\thepage\space--\hfil}
+ \def\@evenfoot{}\let\@evenhead\@oddhead}
+
+\ps@plaintop % Use "plaintop" pagestyle by default.
+\pretolerance=10000 % Disable hyphenation
+
+% The following gives "reasonable" ragged right results.
+
+\@rightskip=\z@ plus 4em\rightskip\@rightskip
+
+% Page size, spacing parameters, etc.
+
+\textwidth=6.5in
+\textheight=8.4in
+\topmargin=0in
+\headheight=.15in
+\headsep=.35in
+\oddsidemargin=0in
+\evensidemargin=0in
+\parindent=2em
+\parskip=1.5ex
+
+
+%\@input{styopts.sty}
+
+% ****************************************
+% * STYLE OPTIONS *
+% ****************************************
+
+% Make footnotes same size as main text.
+
+\let\footnotesize=\normalsize
+
+% Define parameters to adjust the baselineskip.
+% These are passed as the scale factor argument to \baselinestretch.
+
+\def\@tightleading{1.1}
+\def\@doubleleading{1.6}
+
+% Double-space by default. Observe that you double-space in LaTeX by
+% resetting \baselinestretch, which is essentially a scale factor for
+% \baselineskip (= leading, for you typographophiles). The style uses
+% the \@doubleleading factor, defined above.
+
+\def\baselinestretch{\@doubleleading}
+
+% The \tighten command merely resets the \baselinestretch to a
+% smaller factor, resulting in single-column text that is more closely
+% spaced. (This will always work.) Tightening the vertical spacing
+% in the text results in output that is more attractive for distribution
+% to colleagues who are primarily interested in reading the paper, as
+% opposed to copy editing it. Double-spaced output for referees and
+% copy editors is, however, the main objective of this style, hence
+% double-spacing occurs by default. The same effect as \tighten
+% can be achieved by using the "tighten" document style option.
+%
+% \tighten
+%
+% \tighten is intended for use in the preamble of the article.
+
+\def\tighten{\def\baselinestretch{\@tightleading}}
+\let\tightenlines=\tighten
+
+% For authors who feel compelled to change between single and double
+% spacing in the manuscript, \singlespace and \doublespace commands
+% are provided. (Following recommendations of AAS Publications Board
+% Subcommittee on Preprints.) These are no-ops in manuscript style.
+%
+% \singlespace
+% \doublespace
+
+\let\singlespace=\relax
+\let\doublespace=\relax
+
+% Upper case for sections (optional upper case items). These are created
+% so that some headings can be toggled between mixed case and upper case
+% readily. Headings that might be changed can be wrapped in the style
+% file in \sec@upcase{TEXT} constructs; the expansion of \sec@upcase is
+% controlled here. It is `\relax' by default (mixed case heads), and can
+% easily be changed to `\uppercase' if desired. If mixed case headings
+% are wanted by the editor, authors MUST supply mixed case text, although
+% this is what authors should be doing anyway. (Mixed can be converted
+% to upper, but the reverse transformation cannot be automated.)
+
+%\def\sec@upcase#1{\uppercase{#1}}
+\def\sec@upcase#1{\relax{#1}}
+
+% Sometimes people want to number equations by section, rather than
+% sequentially through the whole paper.
+
+\def\eqsecnum{
+ \@newctr{equation}[section]
+ \def\theequation{\hbox{\normalsize\arabic{section}-\arabic{equation}}}}
+
+%\@input{slug.sty}
+
+% ****************************************
+% * SLUG LINE *
+% ****************************************
+
+% There are some obvious style-dependent parameters and formatting
+% instructions in this file. The object has been to keep the author
+% commands (the user interface, if you will) society, journal, and
+% style-independent, while the style-specific parameters and commands
+% are kept below that level. Commands and parameters that are susceptible
+% to external interpretation, either by authors or publishers/translators,
+% are identified by indented comment lines, with the semantics of command
+% arguments described in upper case text.
+%
+% \@journalname{JOURNAL NAME}
+% \cpr@holder{COPYRIGHT HOLDER}
+
+\def\@journalname{The Astropolitical Journal}
+\def\cpr@holder{American Astronomical Society}
+
+% Journal and article identification information is established by the
+% editorial staff. The following macros are used by personnel at the
+% editorial office to annotate/record slug-line data and should be included
+% in the manuscript preamble, i.e., before the LaTeX \begin{document}. All
+% they do is globally define other TeX control sequences that are used by
+% other macros at a later time.
+%
+% \received{RECEIPT DATE}
+% \revised{REVISION DATE}
+% \accepted{ACCEPTANCE DATE}
+% \journalid{VOL}{JOURNAL DATE}
+% \articleid{START PAGE}{END PAGE}
+% \paperid{ID}
+% \ccc{CODE}
+%
+% For preprints and submitted manuscripts in draft/referee format, etc.,
+% the slug-line information is irrelevant and in those kinds of style,
+% the data are never used. In my estimation, it is perfectly acceptable
+% to have these commands in the file (for future use), so they are defined
+% in the usual way.
+
+\def\received#1{\gdef\@recvdate{#1}} \received{\relax}
+\def\revised#1{\gdef\@revisedate{#1}} \revised{\relax}
+\def\accepted#1{\gdef\@accptdate{#1}} \accepted{\relax}
+\def\journalid#1#2{\gdef\@jourvol{#1}\gdef\@jourdate{#2}}
+\def\articleid#1#2{\gdef\@startpage{#1}\gdef\@finishpage{#2}}
+\def\paperid#1{\gdef\@paperid{#1}} \paperid{MS-0001-SAMP}
+\def\ccc#1{\gdef\CCC@code{#1}} \ccc{000-00\$75.95-CDB}
+
+% Following copyright and running heads \defs are stubs.
+%\let\cpright=\@gobbletwo
+%\let\righthead=\@gobble
+%\let\lefthead=\@gobble
+
+% Copyright data. Permit the author/editor to supply a copyright
+% "type" as well as the year.
+%
+% \cpright{TYPE}{YEAR}
+%
+% Copyright types are designated by name and converted to numeric form.
+% The mapping of types is defined by the code that sets the @cprtype
+% counter. The language of the copyright notices is defined by \@slug.
+
+\def\cpright#1#2{\@nameuse{cpr@#1} \gdef\cpr@year{#2}
+ \typeout{`#1' copyright \cpr@year.}}
+
+\newcount\@cprtype \@cprtype=\@ne % Default copyright type.
+\def\cpr@AAS{\@cprtype=1}
+\def\cpr@PD{\@cprtype=2}
+\def\cpr@Crown{\@cprtype=3}
+\def\cpr@none{\@cprtype=4}
+\def\cpr@ASP{\@cprtype=5}
+
+\def\cpr@year{\number\year} % Default copyright year.
+
+% \@slug determines formatting of slugline information.
+% ATTN: Check with AAS/AIP/UCP about exact wording of these.
+
+\def\@slug{\par\noindent
+ \ifcase\@cprtype
+ \relax
+ \or
+ Copyright \cpr@year\space by the \cpr@holder.
+ \or
+ This article is in the public domain.
+ \or
+ Crown copyright \cpr@year\space by the \cpr@holder.
+ \or
+ No copyright is claimed for this article.
+ \or
+ Copyright \cpr@year\space by the ASP.
+ \fi
+ \par\noindent
+ Manuscript number \@paperid.\par\noindent
+ \CCC@code
+}
+
+% Authors may be asked to supply running head information. We use the
+% language of the publisher here to distinguish between two pieces of
+% information: the left head frequently contains an author list (last
+% names, possibly truncated as et al.), while the right head frequently
+% contains an abbreviated form of the paper title. The \lefthead and
+% \righthead commands merely collect the information and buffer the text.
+%
+% \lefthead{TEXT}
+% \righthead{TEXT}
+%
+% For the ApJ, right heads are the short titles, and the publisher would
+% like for the author to specify a 44-character or less abbreviated title
+% to use as the running head on right pages.
+
+\def\lefthead#1{\gdef\@versohead{#1}} \lefthead{\relax}
+\def\righthead#1{\gdef\@rectohead{#1}} \righthead{\relax}
+
+% \@runheads determines formatting of running head information.
+
+\def\@runheads{\@tempcnta\c@page
+ \@whilenum \@tempcnta >0\do{
+ \vskip 3ex
+ \hbox to30pc{\small\expandafter\uppercase\expandafter{\@versohead}:
+ \expandafter\uppercase\expandafter{\@rectohead}\hfil}
+ \advance\@tempcnta by\m@ne}
+}
+
+% The \slugcomment command is provided so authors or editors may include
+% a remark about the manuscript that may be desired in print for some
+% styles. For instance, authors like to include information about the
+% journal and publication date of accepted papers ("To appear in AJ,
+% November 1992").
+%
+% \slugcomment{TEXT}
+%
+% The formatting of the \slugcomment information is controlled by the
+% \@makeslugcmmnt command and its placement on the page is dictated
+% by the presence of \@makeslugcmmnt in \sluginfo (or whatever).
+
+\def\slugcomment#1{\gdef\slug@comment{#1}} \slugcomment{}
+
+% For MS style, slug comments are set in a parbox after the dates.
+% Short comments are centered.
+
+\newdimen\@slugcmmntwidth \@slugcmmntwidth \textwidth
+\long\def\@makeslugcmmnt{\ifx\slug@comment\@empty\relax\else
+ \vskip 5ex
+ \setbox\@tempboxa\hbox{\slug@comment}
+ \ifdim \wd\@tempboxa >\@slugcmmntwidth
+ \hbox to\textwidth{\hss
+ \parbox\@slugcmmntwidth\slug@comment}
+ \else
+ \hbox to\textwidth{\hfil\box\@tempboxa\hfil}
+ \fi
+\fi}
+
+% Editorial offices like to have receipt and acceptance dates on the front
+% page for tracking purposes. The current practice is to require the author
+% to type Received __________________ and Accepted ________________ lines
+% for the staff to type on. The \@dates command will typeset either rules
+% or the dates specified in \received and/or \accepted commands. Note that
+% authors should not include \received and \accepted.
+
+\def\@rcvaccrule{\vrule\@width1.75in\@height0.5pt\@depth\z@}
+
+% \@dates determines formatting of MS date information.
+
+\def\@dates{{Received}\space%
+ \if\@recvdate\relax\@rcvaccrule\else\@recvdate\fi;%
+ \hspace{1.5em}{accepted}\space%
+ \if\@accptdate\relax\@rcvaccrule\else\@accptdate\fi%
+}
+
+% The \sluginfo command is executed automatically when a \begin{abstract} is
+% encountered, so it is not necessary (or appropriate) for the author to
+% include this line explicitly. The received/accepted business is a
+% concern only for the editorial staff, hence we have arranged for the
+% author not to have to fuss with it.
+
+\def\sluginfo{{\center
+ \@dates
+ \@makeslugcmmnt
+ %\@slug
+ %\@runheads
+ \endcenter}}
+
+\let\dates=\sluginfo % Backwards compatibility
+
+%\@input{text.sty}
+
+% ****************************************
+% * FRONT MATTER *
+% ****************************************
+
+% Make adjustments to LaTeX abstract style: optional upper case heading,
+% retain current type size (should be normalsize), ignore twocolumn option
+% in this substyle, add \sluginfo, and start abstract on fresh page.
+
+\def\abstract{\sluginfo\clearpage
+ \begin{center}
+ {\bf{ABSTRACT}}
+ \end{center}
+ \quotation
+}
+
+% Title and author identification is by way of standard LaTeX commands
+% \title and \author, although the macros themselves are rather different.
+% The information is typeset by these macros in this style, rather than
+% being buffered as per regular LaTeX. The authors' principal affiliation
+% is specified with a separate macro \affil. Each \author command should
+% be followed by its own \affil (or address).
+%
+% Authors often have affiliations above and beyond their main employer,
+% and these are specified with the \altaffilmark and \altaffiltext commands.
+% These commands behave like the \footnotemark and \footnotetext commands
+% of LaTeX. \altaffilmark is appended to author's names in the \author
+% lists, and generates the superscript identification numbers.
+% The text for the individual alternate affiliations is generated by the
+% \altaffiltext command. It is up to the author to make sure that the
+% \altaffilmark numbers attached to authors' names correspond to the correct
+% alternate affiliation.
+%
+% \title{LUCID TEXT}
+% \author{NAME(S)}
+% \authoraddr{AUTHOR'S POSTAL ADDRESS}
+% \affil{AFFILIATION}
+% \altaffilmark{TAG NUMBER(S)}
+% \altaffiltext{NUMERICAL TAG}{TEXT}
+%
+% The typesetting performed by these commands is appropriate for the top of
+% the first text page of the manuscript. They could as well be used on a
+% title cover page, but vertical placement would have to be controlled by
+% the author. This is not to be encouraged, since I want to discourage
+% the introduction of any extra horizontal or vertical space.
+
+\def\title#1{{\def\baselinestretch{\@tightleading}
+ \center\large\bf{#1}\endcenter}
+ \thispagestyle{empty}}
+\def\author#1{{\topsep\z@\center\normalsize#1\endcenter}}
+\let\authoraddr=\@gobble
+\def\affil#1{\vspace*{-2.5ex}{\topsep\z@\center#1\endcenter}}
+\def\altaffilmark#1{$^{#1}$}
+\def\altaffiltext#1#2{\footnotetext[#1]{#2}\stepcounter{footnote}}
+
+% Redefine the LaTeX \and command for this style.
+
+\def\and{\vspace*{-0.5ex}{\topsep\z@\center and\endcenter}}
+
+% ****************************************
+% * KEYWORDS *
+% ****************************************
+
+% Keywords environment. Keywords, subject headings, etc., are accommodated
+% only as a piece of text; the \keywords command indents if necessary and
+% supplies the proper leading text ("Keywords:", "Subject headings:", etc.)
+% but does not apply formatting to the user's keyword text. The author
+% must supply the correct punctuation according to the journal style.
+%
+% Note that the editors of A&A, ApJ, and MNRAS have discussed the issue
+% of keywords, and there is disagreement about whether "subject headings"
+% or "keywords" should appear after abstracts in astronomical papers.
+% It does not really matter what the macro is called, so I will stick
+% to \keywords since I don't know what the difference is anyway.
+
+\def\@keywordtext{Subject headings}
+\def\@keyworddelim{---}
+
+\def\keywords#1{\vspace*{-.7ex}%\vspace{\z@}
+ \if@twocolumn\noindent{{\it\@keywordtext:\/}\space\@kwds{#1}}
+ \else{\quote{\it\@keywordtext:\/}\space\@kwds{#1}\endquote}
+ \fi}
+
+\let\subjectheadings=\keywords
+
+% It might be possible to handle keywords and their punctuation more
+% automatically at some stage, but at the moment using this looping
+% construct is serious overkill. It also causes problems because the
+% loop delimiter is a comma, and there are keywords that legitimately
+% contain commas. It also seem ponderous to me for keywords in the
+% \keyword list to be delimited by `|', so I make the author responsible
+% for keyword list punctuation.
+
+%\def\@kwds#1{\def\@kwddlm{}\@for\@kwd:=#1\do
+% {\@kwddlm\def\@kwddlm{\space\@keyworddelim\penalty\@m\space}{\@kwd}}}
+
+\def\@kwds#1{#1\relax}
+
+% ****************************************
+% * FOOTNOTES *
+% ****************************************
+
+% The following code redefines a few things so that spacing in footnotes is
+% different than LaTeX defaults. The adjustment to \skip\footins increases
+% the amount of vspace inserted before the \footnoterule. Redefine
+% \@makefntext to get proper indentation.
+
+\skip\footins 4ex plus 1ex minus .5ex
+\footnotesep 3ex
+
+%\long\def\@makefntext#1{\noindent\hbox to\z@{\hss$^{\@thefnmark}$}#1}
+%\long\def\@makefntext#1{\indent\hbox{$^{\@thefnmark}$}#1}
+
+% ****************************************
+% * SECTIONS *
+% ****************************************
+
+% \@startsection {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}
+% optional * [ALTHEADING]{HEADING}
+% Generic command to start a section.
+% NAME : e.g., 'subsection'
+% LEVEL : a number, denoting depth of section -- e.g., chapter=1,
+% section = 2, etc.
+% INDENT : Indentation of heading from left margin
+% BEFORESKIP : Absolute value = skip to leave above the heading.
+% If negative, then paragraph indent of text following
+% heading is suppressed.
+% AFTERSKIP : if positive, then skip to leave below heading, else
+% negative of skip to leave to right of run-in heading.
+% STYLE : commands to set style
+% If '*' missing, then increments the counter. If it is present, then
+% there should be no [ALTHEADING] argument.
+
+% Adjust section heading typography slightly. The manuscript editors
+% seem to like the idea that the heads will be centered, and that there
+% will be a "." trailing the section number. This requires hacking below
+% the normal LaTeX programming interface (\@startsection), since the
+% centering has to be turned on and off again before the section starts.
+%
+% Also, modify the indentation behavior so that ALL paragraphs, including
+% those first after section heads, are indented. This is consonant with
+% the styles of many journals, although it's non-standard typographic practice.
+
+\newif\if@firstsection \@firstsectiontrue
+
+\def\section{\if@firstsection\clearpage
+ \@firstsectionfalse\fi
+ \@startsection {section}{1}{\z@}
+ {5ex plus .5ex}{1ex plus .2ex}{\normalsize\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}
+ {5ex plus .5ex}{1ex plus .2ex}{\normalsize\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}
+ {5ex plus .5ex}{1ex plus .2ex}{\normalsize\it}}
+
+\def\thesection{\@arabic{\c@section}.}
+\def\thesubsection{\thesection\@arabic{\c@subsection}.}
+\def\thesubsubsection{\thesubsection\@arabic{\c@subsubsection}.}
+\def\theparagraph{\thesubsubsection\@arabic{\c@paragraph}:}
+
+% For ApJ, acknowledgments are set off from main body text simply by
+% vertical space (no heading or type size change). I do the same for
+% the AAS manuscript style. For use in producing more polished output
+% for other journals, this macro might generate text saying
+% "Acknowledg[e]ments".
+
+\def\acknowledgments{\vskip 3ex plus .8ex minus .4ex}
+\let\acknowledgements=\acknowledgments % second spelling
+
+% LaTeX sectioning tools.
+
+\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
+ \def\@svsec{}\else
+ \refstepcounter{#1}\edef\@svsec{\csname the#1\endcsname\hskip 1em }\fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup \center#6\relax
+ \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M
+ \sec@upcase{#8}\par}%
+ \endcenter\endgroup
+ \csname #1mark\endcsname{#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #7}\else
+ \def\@svsechd{#6\hskip #3\@svsec \sec@upcase{#8}\csname #1mark\endcsname
+ {#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #7}}\fi
+ \@xsect{#5}}
+
+\def\@ssect#1#2#3#4#5{\@tempskipa #3\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #4\center\@hangfrom{\hskip #1}{\interlinepenalty \@M
+ \sec@upcase{#5}\par}\endcenter\endgroup
+ \else \def\@svsechd{#4\hskip #1\relax \sec@upcase{#5}}\fi
+ \@xsect{#3}}
+
+% ****************************************
+% * EQUATION NUMBERING *
+% ****************************************
+
+% Redefine \appendix so that equation numbers are prepended with
+% \theappendix number. Reset equation counter so that equation
+% numbers in the appendix begin again with 1. Note that the
+% \appendix command is NOT a sectioning command; it is merely
+% a delimiting markup between the main body of the paper and the
+% appendix. Sections in the appendix are still started with
+% \section commands.
+%
+% \appendix
+
+\def\appendix{\par
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \setcounter{equation}{0}
+ \def\thesection{\Alph{section}.}
+ \def\theequation{\hbox{\normalsize\Alph{section}\arabic{equation}}}}
+
+% Define mathletters environment. This is a wrapper that goes
+% *around* (outside of) equation or eqnarray environments.
+%
+% \begin{mathletters}
+% \end{mathletters}
+
+\newcounter{cureqno}
+
+\newenvironment{mathletters}{\refstepcounter{equation}%
+ \setcounter{cureqno}{\value{equation}}%
+ \let\@curtheeqn\theequation%
+ \edef\cur@eqn{\csname theequation\endcsname}%
+ \def\theequation{\cur@eqn\alph{equation}}%
+ \setcounter{equation}{0}}%
+ {\let\theequation\@curtheeqn%
+ \setcounter{equation}{\value{cureqno}}}
+
+% The \eqnum command allows the author to override all automatic
+% equation marking schemes.
+%
+% \eqnum{TEXT}
+
+\def\eqnum#1{\def\theequation{#1}\let\@currentlabel\theequation
+ \addtocounter{equation}{\m@ne}}
+
+% ****************************************
+% * BIBLIOGRAPHY *
+% ****************************************
+
+% Bibliography/references environment. For the time being, I don't think
+% it would be a good idea to force an implementation based on BibTeX,
+% although I'll prepare for that eventuality by using the constructs and
+% general ideas of the LaTeX thebibliography environment. Adjustments
+% have been made so that the \cite-\bibitem mechanism can be used to cite
+% references symbolically while maintaining proper citation syntax within
+% the paper; the author must create the citation label for each reference
+% in proper journal format in the \bibitem command.
+%
+% \begin{thebibliography}
+% \bibitem[LABEL]{TEXTTAG} \reference <bibliographic data>
+% \end{thebibliography}
+%
+% where LABEL must adhere to the journal's standards, e.g. "Abt 1986".
+%
+% It is not necessary to use the thebibliography environment. This style
+% defines a references environment that simply sets off the list of references
+% and adjusts spacing parameters. It is not possible to use \bibitems
+% within the references environment. (The \reference command cannot be
+% shortened to \ref; \ref is used in vanilla LaTeX for cross-referencing.)
+%
+% \begin{references}
+% \reference <bibliographic data>
+% \end{references}
+%
+% \markcite{TEXT}
+%
+% Observe that the bibliographic data supplied by the author must also
+% conform to the standards of the journal. I have elected not to burden
+% authors with tedious LaTeX commands which would require many curly braces
+% to delimit the bibliographic fields because many of the journals I have
+% targeted in this project have agreed to reduce typographic overhead (bolding,
+% italicizing, etc.) in reference lists. (See Abt's editorial in ApJ 357.)
+% It is the responsibility of the author to get these fields in the proper
+% order with the correct punctuation; the information will be typeset as is,
+% i.e., in roman with no size or style changes.
+%
+% Macros are provided for many of the oft-referenced journals so that authors
+% may use the LaTeX names rather than having to look up a particular journal's
+% specific abbreviation. In principle, all the journals should be using the
+% same abbreviations, too, but I anticipate some changes in the specific
+% abbreviations before a set is finally settled on. As long as these macros
+% are kept up to date, authors need not be concerned about such editorial
+% changes.
+%
+% Corresponding with the non-BibTeX references environment and \reference
+% command for the reference list is the \markcite command. This can be
+% used to identify in-text citations; in this case, the author provides
+% the actual citation text as opposed to the symbolic tag. The use of
+% this is encouraged, even for journals where no special formatting of
+% citation call-outs is required; it is crucial for the future use of
+% on-line browsers.
+
+\def\references{\clearpage\subsection*{REFERENCES}
+ \bgroup\parindent=\z@\parskip=\itemsep
+ \def\refpar{\par\hangindent=3em\hangafter=1}}
+\def\endreferences{\refpar\egroup\revtex@pageid}
+
+\def\thebibliography{\clearpage\subsection*{REFERENCES}
+ \list{\null}{\leftmargin 3em\labelwidth\z@\labelsep\z@\itemindent -3em
+ \usecounter{enumi}}
+ \def\refpar{\relax}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+\def\endthebibliography{\endlist\revtex@pageid}
+
+\def\@biblabel#1{\relax}
+%\def\@cite#1#2{({#1\if@tempswa , #2\fi})}
+\def\@cite#1#2{#1\if@tempswa , #2\fi}
+
+\def\reference{\relax\refpar} % Generic: might be better...
+\def\markcite#1{#1\relax}
+
+% Modify \@citex so that individual citation texts are NOT hboxed.
+% This allows TeX to break lines at spaces between words in citations.
+% Remove the obnoxious {\bf ?} that was inserted in the text when
+% undefined citations are encountered; here, the warning message is
+% printed only on the terminal.
+
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+ \def\@citea{}\@cite{\@for\@citeb:=#2\do
+ {\@citea\def\@citea{,\penalty\@m\ }\@ifundefined
+ {b@\@citeb}{\@warning
+ {Citation `\@citeb' on page \thepage \space undefined}}%
+{\csname b@\@citeb\endcsname}}}{#1}}
+
+%\@input{mstblfig.sty}
+
+% ****************************************
+% * TABLES AND FIGURES *
+% ****************************************
+
+% Additions and adjustments for tables and figures.
+
+% Footnotes for tables are to be identified with lower case alphabetics,
+% rather than numeric. \tablenotemark and \tablenotetext commands are
+% provided analogous to \footnotemark and \footnotetext, but with the
+% identifier *required*, like \altaffilmark and \altaffiltext. The
+% \tablenotetext must be specified before the \end{table}, since
+% \end{table} displays it.
+%
+% \tablenotemark{TAG LETTER(S)}
+% \tablenotetext{ALPHA TAG}{TEXT}
+%
+% Note that TAG LETTER == ALPHA TAG for corresponding text. It is the
+% responsibility of the author to get the correspondence correct.
+%
+% The table footnotes are coupled to the table in which they occur, rather
+% than being associated with a particular page, and they are printed with
+% the table (relatively close to the caption) instead of appearing at the
+% extreme bottom of the page. This is done to ensure that the notes wind
+% up on the same page as the table, since tables are floats and can migrate
+% from one page to another. There is the additional benefit that the notes
+% are unambiguously attached to the proper table, which is what is required
+% in the event that the editorial requirement of one table only per page
+% is ever changed to permit several tables per page.
+%
+% Footnotes are NOT supported for figures.
+
+\def\tablenotemark#1{\rlap{$^{\rm #1}$}}
+
+% The \tablenotetext command buffers the table note text and the "proper"
+% tablenote formatting information in a token buffer. The tablenotes are
+% dispensed into the vertical page list by \spew@tblnotes, which is
+% executed by \end{table}. Note that certain "global" tablenote formatting
+% details are handled by \spew@tblnotes, which also clears the tblnote list.
+% Praise and honor are due to Kresten Krab Thorup (krab@iesd.auc.dk) for
+% posting ftn.sty to the Usenet, from which I drew the technique.
+
+\newtoks\@temptokenb
+\def\tblnote@list{}
+
+\def\tablenotetext#1#2{
+ \@temptokena={\vspace{.5ex}{\noindent\llap{$^{#1}$}#2}\par}
+ \@temptokenb=\expandafter{\tblnote@list}
+ \xdef\tblnote@list{\the\@temptokenb\the\@temptokena}}
+
+\def\spew@tblnotes{
+ \ifx\tblnote@list\@empty\relax
+ \else
+ \vspace{4.5ex}
+ \footnoterule
+ \vspace{.5ex}
+ {\footnotesize\tblnote@list}
+ \gdef\tblnote@list{}
+ \fi}
+
+\def\endtable{\spew@tblnotes\end@float}
+\@namedef{endtable*}{\spew@tblnotes\end@dblfloat}
+
+% Add a \tableline command for use in tabular environments. This command
+% produces the horizontal rule(s) between the column headings and the body
+% of the table. Authors are discouraged from using any \hlines themselves,
+% and are typically forbidden from using vertical rules by editors.
+
+\let\tableline=\hline
+
+% \@makecaption determines formatting for figure and table captions.
+% For manuscripts, all captions should be set as flushleft paragraphs.
+
+\long\def\@makecaption#1#2{\vskip 2ex\noindent #1 #2\par}
+
+% The \tablenum command allows the author to override all automatic
+% table marking schemes.
+%
+% \tablenum{TEXT}
+
+\def\tablenum#1{\def\thetable{#1}\let\@currentlabel\thetable
+ \addtocounter{table}{\m@ne}}
+
+% The \figurenum command allows the author to override all automatic
+% figure marking schemes.
+%
+% \figurenum{TEXT}
+
+\def\figurenum#1{\def\thefigure{#1}\let\@currentlabel\thefigure
+ \addtocounter{figure}{\m@ne}}
+
+% ****************************************
+% * PLANO TABLES *
+% ****************************************
+
+% Plano tables are camera-ready pages that are included in a typeset
+% article the same way as line drawings, graphs, and other camera-ready
+% art, i.e., as "planographic" figures. There are desirable properties
+% for a formatter to have that are somewhat above and beyond LaTeX'x
+% tabular environment that would facilitate the creation of such tables.
+% Among these are breaking long tables across pages, using footnotes
+% in a table, specifying comments and references for tables, etc.
+%
+% What follows was inspired by supertab.sty by Theo Jurriens, 1988.
+
+% Commands for identifying table elements in a consistent way. Observe
+% that the formatting is embedded in the macro definitions so that the
+% author doesn't need to be concerned about stylistic nuances.
+%
+% \tablecaption{TEXT}
+% \tablehead{TEXT}
+% \colhead{HEADING}
+% \tabletail{TEXT}
+% \tablewidth{DIMEN}
+% \tableheadfrac{NUM}
+
+\newbox\pt@box
+\newdimen\pt@width
+\newcount\pt@line
+\newcount\pt@nlines
+\newcount\pt@ncol
+
+\def\colhead#1{\omit\hidewidth{#1}\hidewidth\global\advance\pt@ncol by\@ne}
+\def\tablecaption#1{\gdef\pt@caption{#1}} \def\pt@caption{\relax}
+\def\tablehead#1{\gdef\pt@head{\hline\hline\relax\\[-1.7ex]
+ #1\hskip\tabcolsep\\[.7ex]\hline\relax\\[-1.5ex]}} \def\pt@head{\relax}
+\def\tabletail#1{\gdef\pt@tail{#1}} \def\pt@tail{\relax}
+\def\tablewidth#1{\pt@width=#1} \pt@width\textwidth
+\def\tableheadfrac#1{\gdef\pt@headfrac{#1}} \def\pt@headfrac{.1}
+
+% Calculate the number of tabular rows that will fit in the body of the
+% table. The height of the table body and the number of lines are
+% calculated thus:
+%
+% bodyheight = \textheight * (1 - \pt@headfrac)
+% \pt@nlines = bodyheight / (\arraystretch * \baselineskip)
+%
+% The row height can be seen to be valid algebraically if one examines the
+% definitions for \strutbox, \@setstrut, and \@array. I could eliminate
+% this calculation, as well as its attendant parameters, if it were possible
+% to determine the accumulated height of the \halign box as TeX goes along.
+
+\def\pt@calcnlines{\@tempdima\pt@headfrac\textheight
+ \@tempdimb\textheight\advance\@tempdimb by-\@tempdima
+ \@tempdima\arraystretch\baselineskip
+ \divide\@tempdimb by\@tempdima
+ \global\pt@nlines\@tempdimb}
+
+% Define \pt@tabular, a ripoff of \@tabular but with \leavevmode removed
+% so tabular box can be set with \setbox. I do this so that table notes
+% can be set to natural width of table, if desired. Also, set \@acol
+% to \@ptabacol, which is called when building the preamble for the
+% \halign (assuming the first column format specification is "l", which
+% it should be for ApJ tables) so that \tabskip within the table is set
+% to \fill. This permits us to toggle between natural and fixed-width
+% tables without requiring the user to change markup. Note that by
+% forcing \tabskip always to be \fill, I pretty well nullify any
+% @{\hspace} commands the user puts in the template, but this environment
+% is for people who don't want to think about that sort of stuff anyway.
+
+\def\pt@tabular{\hbox \bgroup $\let\@acol\@ptabacol
+ \let\@classz\@tabclassz
+ \let\@classiv\@tabclassiv \let\\\@tabularcr\@tabarray}
+
+\def\@ptabacol{\edef\@preamble{\@preamble \hskip \tabcolsep\tabskip\fill}}
+
+% Permit different identifying strings, one for the first page of the
+% table and one for continuation pages. LaTeX's \fnum@table is set to
+% one or the other automatically in the environment. Note that caption
+% handling is not so graceful: you have to edit inside the big macros to
+% adjust this. Someday, I will be ambitious enough to fix this.
+
+\def\fnum@ptable{Table \thetable}
+\def\fnum@ptablecont{Table \thetable---{\rm Continued}}
+
+\def\set@mkcaption{\long\def\@makecaption##1##2{
+ \center\rm##1.\quad##2\endcenter\vskip 2.5ex}}
+\def\set@mkcaptioncont{\long\def\@makecaption##1##2{
+ \center\rm##1\endcenter\vskip 2.5ex}}
+
+\newenvironment{planotable}[1]{\def\pt@format{\string#1}%
+ \set@tblnotetext\pt@ncol=0}%
+ {\crcr\noalign{\vskip .7ex}\hline\endtabular%
+ \pt@width\wd\pt@box\box\pt@box\spew@ptblnotes%
+ \typeout{Table \thetable\space has been set to width \the\pt@width}%
+ \endcenter\end@float}
+
+\def\startdata{\pt@line=0\pt@calcnlines%
+ \ifdim\pt@width>\z@\def\@halignto{to \pt@width}\else\def\@halignto{}\fi%
+ \let\fnum@table=\fnum@ptable\set@mkcaption%
+ \@float{table}\center\caption{\pt@caption}\leavevmode%
+ \setbox\pt@box=\pt@tabular{\pt@format}\pt@head}
+
+% A kludgey kind of line delimiter is needed so that the line counter
+% can be checked prior to adding the line to the alignment box. This
+% is bad because this form does not permit the addition of vertical
+% space using the [.5ex] construct; this has to be done with an explicit
+% \vskip. And a disgusting \noalign is required, so I have to create
+% another silly piece of markup to accomplish this conveniently.
+%
+% What is desired, of course, is for this line count checking to take
+% place within the syntax of the regular LaTeX \\ command. I have been
+% giving myself apoplexy trying to figure this out for the last 36 hours,
+% and I have decided I will have to wait for the onset of my "lucid
+% period" for a solution. In the meantime...
+
+\def\pt@nl{\global\advance\pt@line by\@ne%
+ \ifnum\pt@line=\pt@nlines%
+ \endtabular\box\pt@box
+ \endcenter\end@float\clearpage%
+ \addtocounter{table}{\m@ne}%
+ \let\fnum@table=\fnum@ptablecont\set@mkcaptioncont%
+ \@float{table}\center\caption{\pt@caption}\leavevmode%
+ \global\pt@ncol=0%
+ \setbox\pt@box=\pt@tabular{\pt@format}\pt@head%
+ \global\pt@line=0%
+ \else\\
+ \fi}
+
+% Author markup commands for planotable environment line breaks.
+%
+% \nl == \nextline
+% \tablevspace{DIMEN}
+% \tablebreak
+
+\let\nl=\pt@nl
+\let\nextline=\pt@nl
+
+\def\tablevspace#1{\noalign{\vskip{#1}}}
+\def\tablebreak{\pt@line\pt@nlines\advance\pt@line by\m@ne\pt@nl}
+
+% We have some specialty heads that are sometimes wanted in tables.
+%
+% \cutinhead{TEXT}
+% \sidehead{TEXT}
+
+\def\cutinhead#1{\noalign{\vskip 1.5ex}
+ \hline\pt@nl\noalign{\vskip -4ex}
+ \multicolumn{\pt@ncol}{c}{#1}\pt@nl
+ \noalign{\vskip .8ex}
+ \hline\pt@nl\noalign{\vskip -2ex}}
+
+\def\sidehead#1{\noalign{\vskip 1.5ex}
+ \multicolumn{\pt@ncol}{@{\hskip\z@}l}{#1}\pt@nl
+ \noalign{\vskip .5ex}}
+
+\def\set@tblnotetext{\def\tablenotetext##1##2{{%
+ \@temptokena={\vspace{0ex}{%
+ \parbox{\pt@width}{\hskip1em$^{\rm ##1}$##2}\par}}%
+ \@temptokenb=\expandafter{\tblnote@list}
+ \xdef\tblnote@list{\the\@temptokenb\the\@temptokena}}}}
+
+\def\spew@ptblnotes{
+ \ifx\tblnote@list\@empty\relax
+ \else
+ \par
+ \vspace{2ex}
+ {\tblnote@list}
+ \gdef\tblnote@list{}
+ \fi}
+
+% Special kinds of table footnotes. Sometimes authors tabulate things
+% which have corresponding references, and it may be desirable to associate
+% these references with the table rather than (or in addition to) the
+% formal reference list. Occasionally, authors wish to append a short
+% paragraph of explanatory notes that pertain to the entire table, but
+% which are different than the caption.
+%
+% \tablerefs{REFERENCE LIST}
+% \tablecomments{TEXT}
+
+\def\tablerefs#1{\@temptokena={\vspace*{3ex}{%
+ \parbox{\pt@width}{\hskip1em\rm References. --- #1}\par}}%
+ \@temptokenb=\expandafter{\tblnote@list}
+ \xdef\tblnote@list{\the\@temptokenb\the\@temptokena}}
+
+\def\tablecomments#1{\@temptokena={\vspace*{3ex}{%
+ \parbox{\pt@width}{\hskip1em\rm Note. --- #1}\par}}%
+ \@temptokenb=\expandafter{\tblnote@list}
+ \xdef\tblnote@list{\the\@temptokenb\the\@temptokena}}
+
+% Figure and table style parameters.
+
+\def\thefigure{\@arabic\c@figure}
+\def\fnum@figure{{\rm Fig.\space\thefigure.---}}
+
+\def\thetable{\@arabic\c@table}
+\def\fnum@table{{\rm Table \thetable:}}
+
+% Figure and table float positions.
+
+\def\fps@figure{bp}
+\def\fps@table{bp}
+
+% ****************************************
+% * EPS INCLUSIONS *
+% ****************************************
+
+% Include Rokicki's epsf.sty file explicitly.
+
+\@ifundefined{epsfbox}{\@input{epsf.sty}}{\relax}
+
+% Simplified EPS inclusion macros so we can see how this goes...
+% These are layered on Rokicki's dvips material, and are dependent
+% on the author's use of that DVI driver.
+%
+% \plotone{EPSFILE}
+% \plottwo{EPSFILE}{EPSFILE}
+% \plotfiddle{EPSFILE}{VSIZE}{ROT}{HSF}{VSF}{HTRANS}{VTRANS}
+%
+% \plotone inserts the plot in a space that is \columnwidth wide; the
+% plot is scaled so the horizontal dimension fits in the text width,
+% and the vertical dimension is scaled to maintain the aspect ratio.
+% \plottwo inserts two plots next to each other in one \columnwidth,
+% sort of like "two-up" mode.
+%
+% EPSFILE name of file with EPS
+%
+% The following arguments are for the \plotfiddle macro which formats
+% the \special itself, prepares vspace, etc. This completely bypasses
+% Rokicki's macros that attempt to rationalize the EPS BoundingBox with
+% the LaTeX page dimensions.
+%
+% VSIZE vertical white space to allow for plot
+% ROT rotation angle
+% HSF horiz scale factor
+% VSF vert scale factor
+% HTRANS horiz translation
+% VTRANS vert translation
+
+%\epsfverbosetrue
+
+\def\plotone#1{\centering \leavevmode
+ \epsfxsize=\columnwidth \epsfbox{#1}}
+
+\def\plottwo#1#2{\centering \leavevmode
+ \epsfxsize=.45\columnwidth \epsfbox{#1} \hfil
+ \epsfxsize=.45\columnwidth \epsfbox{#2}}
+
+\def\plotfiddle#1#2#3#4#5#6#7{\centering \leavevmode
+ \vbox to#2{\rule{0pt}{#2}}
+ \special{psfile=#1 voffset=#7 hoffset=#6 vscale=#5 hscale=#4 angle=#3}}
+
+%\@input{abbrevs.sty}
+
+% ****************************************
+% * ABBREVIATIONS *
+% ****************************************
+
+% Abbreviations for journals. The object here is to provide authors
+% with convenient shorthands for the most "popular" (often-cited)
+% journals; the author can use these markup tags without being concerned
+% about the exact form of the journal abbreviation, or its formatting.
+% It is up to the keeper of the macros to make sure the macros expand
+% to the proper text. If macro package writers agree to all use the
+% same TeX command name, authors only have to remember one thing, and
+% the style file will take care of editorial preferences. This also
+% applies when a single journal decides to revamp its abbreviating
+% scheme, as happened with the ApJ (Abt 1991).
+
+\let\jnl@style=\rm
+\def\ref@jnl#1{{\jnl@style#1}}
+
+\def\aj{\ref@jnl{AJ}} % Astronomical Journal
+\def\araa{\ref@jnl{ARA\&A}} % Annual Review of Astron and Astrophys
+\def\apj{\ref@jnl{ApJ}} % Astrophysical Journal
+\def\apjl{\ref@jnl{ApJ}} % Astrophysical Journal, Letters
+\def\apjs{\ref@jnl{ApJS}} % Astrophysical Journal, Supplement
+\def\ao{\ref@jnl{Appl.Optics}} % Applied Optics
+\def\apss{\ref@jnl{Ap\&SS}} % Astrophysics and Space Science
+\def\aap{\ref@jnl{A\&A}} % Astronomy and Astrophysics
+\def\aapr{\ref@jnl{A\&A~Rev.}} % Astronomy and Astrophysics Reviews
+\def\aaps{\ref@jnl{A\&AS}} % Astronomy and Astrophysics, Supplement
+\def\azh{\ref@jnl{AZh}} % Astronomicheskii Zhurnal
+\def\baas{\ref@jnl{BAAS}} % Bulletin of the AAS
+\def\jrasc{\ref@jnl{JRASC}} % Journal of the RAS of Canada
+\def\memras{\ref@jnl{MmRAS}} % Memoirs of the RAS
+\def\mnras{\ref@jnl{MNRAS}} % Monthly Notices of the RAS
+\def\pra{\ref@jnl{Phys.Rev.A}} % Physical Review A: General Physics
+\def\prb{\ref@jnl{Phys.Rev.B}} % Physical Review B: Solid State
+\def\prc{\ref@jnl{Phys.Rev.C}} % Physical Review C
+\def\prd{\ref@jnl{Phys.Rev.D}} % Physical Review D
+\def\prl{\ref@jnl{Phys.Rev.Lett}} % Physical Review Letters
+\def\pasp{\ref@jnl{PASP}} % Publications of the ASP
+\def\pasj{\ref@jnl{PASJ}} % Publications of the ASJ
+\def\qjras{\ref@jnl{QJRAS}} % Quarterly Journal of the RAS
+\def\skytel{\ref@jnl{S\&T}} % Sky and Telescope
+\def\solphys{\ref@jnl{Solar~Phys.}} % Solar Physics
+\def\sovast{\ref@jnl{Soviet~Ast.}} % Soviet Astronomy
+\def\ssr{\ref@jnl{Space~Sci.Rev.}} % Space Science Reviews
+\def\zap{\ref@jnl{ZAp}} % Zeitschrift fuer Astrophysik
+
+\let\astap=\aap
+\let\apjlett=\apjl
+\let\apjsupp=\apjs
+
+%\@input{misc.sty}
+
+% ****************************************
+% * MISCELLANEOUS *
+% ****************************************
+
+% Handy little things everybody works out for themselves anyway. Many
+% of these come from Springer's A&A package, and some were contributed
+% by Francois Schweizer at DTM. You can go berserk making these up,
+% especially when you start getting into the composite ones. We have
+% tried to select a tractable number that were useful, and somewhat
+% difficult to get right because fussy kerning or some such is required.
+% Most can be used in or out of math mode with impunity; \alt and \agt
+% are relations and can only be used in math mode.
+
+\def\deg{\hbox{$^\circ$}}
+\def\sun{\hbox{$\odot$}}
+\def\earth{\hbox{$\oplus$}}
+\def\lesssim{\mathrel{\hbox{\rlap{\hbox{\lower4pt\hbox{$\sim$}}}\hbox{$<$}}}}
+\def\gtrsim{\mathrel{\hbox{\rlap{\hbox{\lower4pt\hbox{$\sim$}}}\hbox{$>$}}}}
+\def\sq{\hbox{\rlap{$\sqcap$}$\sqcup$}}
+\def\arcmin{\hbox{$^\prime$}}
+\def\arcsec{\hbox{$^{\prime\prime}$}}
+\def\fd{\hbox{$.\!\!^{\rm d}$}}
+\def\fh{\hbox{$.\!\!^{\rm h}$}}
+\def\fm{\hbox{$.\!\!^{\rm m}$}}
+\def\fs{\hbox{$.\!\!^{\rm s}$}}
+\def\fdg{\hbox{$.\!\!^\circ$}}
+\def\farcm{\hbox{$.\mkern-4mu^\prime$}}
+\def\farcs{\hbox{$.\!\!^{\prime\prime}$}}
+\def\fp{\hbox{$.\!\!^{\scriptscriptstyle\rm p}$}}
+\def\micron{\hbox{$\mu$m}}
+
+\let\la=\lesssim % For Springer A&A compliance...
+\let\ga=\gtrsim
+
+% Permit author to typeset "case" fractions. This is sometimes
+% wanted in displayed equations, during which LaTeX will set fractions
+% specified as \frac{x}{y} as "built-up" fractions (numerator and
+% denominator at body text size).
+
+\def\case#1#2{\hbox{$\frac{#1}{#2}$}}
+
+% Permit author to typeset fractions set with solidus where the size
+% is reduced and the numerals are oriented diagonally. Note that this
+% is different from a "shilled" fraction, which the author can produce
+% without any special formatting markup. Define markup shorthands for
+% several common fractions using solidus.
+
+\def\slantfrac#1#2{\hbox{$\,^#1\!/_#2$}}
+\def\onehalf{\slantfrac{1}{2}}
+\def\onethird{\slantfrac{1}{3}}
+\def\twothirds{\slantfrac{2}{3}}
+\def\onequarter{\slantfrac{1}{4}}
+\def\threequarters{\slantfrac{3}{4}}
+
+\def\ubvr{\hbox{$U\!BV\!R$}} % UBVR system
+\def\ub{\hbox{$U\!-\!B$}} % U-B
+\def\bv{\hbox{$B\!-\!V$}} % B-V
+\def\vr{\hbox{$V\!-\!R$}} % V-R
+\def\ur{\hbox{$U\!-\!R$}} % U-R
+
+% Notation for atomic species (ionization levels). The ionization state
+% is specified as the second argument, and should be given as a numeral.
+% The macro has to expand the numeric state into the proper notation for
+% the publication (roman, numeric, plus signs, etc.)
+%
+% \ion{ELEMENT}{IONIZATION STATE}
+
+\def\ion#1#2{#1$\;${\small\rm\@Roman{#2}}\relax}
+
+% Centered ellipsis for use in tables (for unknown values). \nodata
+% is generalized markup for this notion: format of null-valued entries
+% in tables is style-specific.
+
+%\def\cellipsis{\hfill$\cdots$\hfill}
+\def\nodata{\multicolumn{1}{c}{$\cdots$}}
+
+% This is a generalization of the \LaTeX definition that comes in LaTeX.
+% The change here ensures that LaTeX will be typeset in the current style,
+% rather than always in roman.
+
+\newcount\lecurrentfam
+\def\LaTeX{\lecurrentfam=\the\fam \leavevmode L\raise.42ex
+ \hbox{$\fam\lecurrentfam\scriptstyle\kern-.3em A$}\kern-.15em\TeX}
+
+% ****************************************
+% * DEBUGGING *
+% ****************************************
+
+\def\sizrpt{
+ (\fontname\the\font): em=\the\fontdimen6\font, ex=\the\fontdimen5\font
+ \typeout{
+ (\fontname\the\font): em=\the\fontdimen6\font, ex=\the\fontdimen5\font
+}}
diff --git a/obsolete/macros/latex209/contrib/aasmacros/aasms.sty b/obsolete/macros/latex209/contrib/aasmacros/aasms.sty
new file mode 100644
index 0000000000..5466af1fbb
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aasmacros/aasms.sty
@@ -0,0 +1,416 @@
+\def\revtex@ver{3.0}
+\def\revtex@date{10 Jan 93}
+\def\revtex@org{AAS}
+\def\revtex@jnl{AAS}
+\def\revtex@genre{manuscript}
+\typeout{\revtex@org\space \revtex@genre\space substyle,
+v\revtex@ver\space <\revtex@date>.}
+\def\revtex@pageid{\xdef\@thefnmark{\null}
+\@footnotetext{This \revtex@genre\space was prepared with the
+ \revtex@org\space \LaTeX\ macros v\revtex@ver.}}
+\def\genre@MS{manuscript}
+\def\genre@PP{preprint}
+\ifx\revtex@genre\genre@MS
+\ifnum\@ptsize<2
+\typeout{Warning: Undersize \revtex@genre\space font (1\@ptsize\space pts).
+ Using 12pt documentstyle option.}
+\@input{art12.sty}
+\fi
+\fi
+\def\ps@plaintop{\let\@mkboth\@gobbletwo
+\def\@oddfoot{}\def\@oddhead{\rm\hfil--\space\thepage\space--\hfil}
+\def\@evenfoot{}\let\@evenhead\@oddhead}
+\ps@plaintop
+\pretolerance=10000
+\@rightskip=\z@ plus 4em\rightskip\@rightskip
+\textwidth=6.5in
+\textheight=8.4in
+\topmargin=0in
+\headheight=.15in
+\headsep=.35in
+\oddsidemargin=0in
+\evensidemargin=0in
+\parindent=2em
+\parskip=1.5ex
+\let\footnotesize=\normalsize
+\def\@tightleading{1.1}
+\def\@doubleleading{1.6}
+\def\baselinestretch{\@doubleleading}
+\def\tighten{\def\baselinestretch{\@tightleading}}
+\let\tightenlines=\tighten
+\let\singlespace=\relax
+\let\doublespace=\relax
+\def\sec@upcase#1{\relax{#1}}
+\def\eqsecnum{
+\@newctr{equation}[section]
+\def\theequation{\hbox{\normalsize\arabic{section}-\arabic{equation}}}}
+\def\@journalname{The Astropolitical Journal}
+\def\cpr@holder{American Astronomical Society}
+\def\received#1{\gdef\@recvdate{#1}} \received{\relax}
+\def\revised#1{\gdef\@revisedate{#1}} \revised{\relax}
+\def\accepted#1{\gdef\@accptdate{#1}} \accepted{\relax}
+\def\journalid#1#2{\gdef\@jourvol{#1}\gdef\@jourdate{#2}}
+\def\articleid#1#2{\gdef\@startpage{#1}\gdef\@finishpage{#2}}
+\def\paperid#1{\gdef\@paperid{#1}} \paperid{MS-0001-SAMP}
+\def\ccc#1{\gdef\CCC@code{#1}} \ccc{000-00\$75.95-CDB}
+\def\cpright#1#2{\@nameuse{cpr@#1} \gdef\cpr@year{#2}
+\typeout{`#1' copyright \cpr@year.}}
+\newcount\@cprtype \@cprtype=\@ne
+\def\cpr@AAS{\@cprtype=1}
+\def\cpr@PD{\@cprtype=2}
+\def\cpr@Crown{\@cprtype=3}
+\def\cpr@none{\@cprtype=4}
+\def\cpr@ASP{\@cprtype=5}
+\def\cpr@year{\number\year}
+\def\@slug{\par\noindent
+\ifcase\@cprtype
+ \relax
+\or
+ Copyright \cpr@year\space by the \cpr@holder.
+\or
+ This article is in the public domain.
+\or
+ Crown copyright \cpr@year\space by the \cpr@holder.
+\or
+ No copyright is claimed for this article.
+\or
+ Copyright \cpr@year\space by the ASP.
+\fi
+\par\noindent
+Manuscript number \@paperid.\par\noindent
+\CCC@code
+}
+\def\lefthead#1{\gdef\@versohead{#1}} \lefthead{\relax}
+\def\righthead#1{\gdef\@rectohead{#1}} \righthead{\relax}
+\def\@runheads{\@tempcnta\c@page
+\@whilenum \@tempcnta >0\do{
+\vskip 3ex
+\hbox to30pc{\small\expandafter\uppercase\expandafter{\@versohead}:
+ \expandafter\uppercase\expandafter{\@rectohead}\hfil}
+\advance\@tempcnta by\m@ne}
+}
+\def\slugcomment#1{\gdef\slug@comment{#1}} \slugcomment{}
+\newdimen\@slugcmmntwidth \@slugcmmntwidth \textwidth
+\long\def\@makeslugcmmnt{\ifx\slug@comment\@empty\relax\else
+\vskip 5ex
+\setbox\@tempboxa\hbox{\slug@comment}
+\ifdim \wd\@tempboxa >\@slugcmmntwidth
+\hbox to\textwidth{\hss
+ \parbox\@slugcmmntwidth\slug@comment}
+\else
+\hbox to\textwidth{\hfil\box\@tempboxa\hfil}
+\fi
+\fi}
+\def\@rcvaccrule{\vrule\@width1.75in\@height0.5pt\@depth\z@}
+\def\@dates{{Received}\space%
+\if\@recvdate\relax\@rcvaccrule\else\@recvdate\fi;%
+\hspace{1.5em}{accepted}\space%
+\if\@accptdate\relax\@rcvaccrule\else\@accptdate\fi%
+}
+\def\sluginfo{{\center
+\@dates
+\@makeslugcmmnt
+
+
+\endcenter}}
+\let\dates=\sluginfo
+\def\abstract{\sluginfo\clearpage
+\begin{center}
+{\bf{ABSTRACT}}
+\end{center}
+\quotation
+}
+\def\title#1{{\def\baselinestretch{\@tightleading}
+\center\large\bf{#1}\endcenter}
+\thispagestyle{empty}}
+\def\author#1{{\topsep\z@\center\normalsize#1\endcenter}}
+\let\authoraddr=\@gobble
+\def\affil#1{\vspace*{-2.5ex}{\topsep\z@\center#1\endcenter}}
+\def\altaffilmark#1{$^{#1}$}
+\def\altaffiltext#1#2{\footnotetext[#1]{#2}\stepcounter{footnote}}
+\def\and{\vspace*{-0.5ex}{\topsep\z@\center and\endcenter}}
+\def\@keywordtext{Subject headings}
+\def\@keyworddelim{---}
+\def\keywords#1{\vspace*{-.7ex}
+\if@twocolumn\noindent{{\it\@keywordtext:\/}\space\@kwds{#1}}
+\else{\quote{\it\@keywordtext:\/}\space\@kwds{#1}\endquote}
+\fi}
+\let\subjectheadings=\keywords
+\def\@kwds#1{#1\relax}
+\skip\footins 4ex plus 1ex minus .5ex
+\footnotesep 3ex
+\newif\if@firstsection \@firstsectiontrue
+\def\section{\if@firstsection\clearpage
+\@firstsectionfalse\fi
+\@startsection {section}{1}{\z@}
+{5ex plus .5ex}{1ex plus .2ex}{\normalsize\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}
+{5ex plus .5ex}{1ex plus .2ex}{\normalsize\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}
+{5ex plus .5ex}{1ex plus .2ex}{\normalsize\it}}
+\def\thesection{\@arabic{\c@section}.}
+\def\thesubsection{\thesection\@arabic{\c@subsection}.}
+\def\thesubsubsection{\thesubsection\@arabic{\c@subsubsection}.}
+\def\theparagraph{\thesubsubsection\@arabic{\c@paragraph}:}
+\def\acknowledgments{\vskip 3ex plus .8ex minus .4ex}
+\let\acknowledgements=\acknowledgments
+\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
+\def\@svsec{}\else
+\refstepcounter{#1}\edef\@svsec{\csname the#1\endcsname\hskip 1em }\fi
+\@tempskipa #5\relax
+\ifdim \@tempskipa>\z@
+\begingroup \center#6\relax
+\@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M
+ \sec@upcase{#8}\par}%
+\endcenter\endgroup
+\csname #1mark\endcsname{#7}\addcontentsline
+{toc}{#1}{\ifnum #2>\c@secnumdepth \else
+\protect\numberline{\csname the#1\endcsname}\fi
+#7}\else
+\def\@svsechd{#6\hskip #3\@svsec \sec@upcase{#8}\csname #1mark\endcsname
+{#7}\addcontentsline
+{toc}{#1}{\ifnum #2>\c@secnumdepth \else
+\protect\numberline{\csname the#1\endcsname}\fi
+#7}}\fi
+\@xsect{#5}}
+\def\@ssect#1#2#3#4#5{\@tempskipa #3\relax
+\ifdim \@tempskipa>\z@
+\begingroup #4\center\@hangfrom{\hskip #1}{\interlinepenalty \@M
+\sec@upcase{#5}\par}\endcenter\endgroup
+\else \def\@svsechd{#4\hskip #1\relax \sec@upcase{#5}}\fi
+\@xsect{#3}}
+\def\appendix{\par
+\setcounter{section}{0}
+\setcounter{subsection}{0}
+\setcounter{equation}{0}
+\def\thesection{\Alph{section}.}
+\def\theequation{\hbox{\normalsize\Alph{section}\arabic{equation}}}}
+\newcounter{cureqno}
+\newenvironment{mathletters}{\refstepcounter{equation}%
+\setcounter{cureqno}{\value{equation}}%
+\let\@curtheeqn\theequation%
+\edef\cur@eqn{\csname theequation\endcsname}%
+\def\theequation{\cur@eqn\alph{equation}}%
+\setcounter{equation}{0}}%
+{\let\theequation\@curtheeqn%
+\setcounter{equation}{\value{cureqno}}}
+\def\eqnum#1{\def\theequation{#1}\let\@currentlabel\theequation
+\addtocounter{equation}{\m@ne}}
+\def\references{\clearpage\subsection*{REFERENCES}
+\bgroup\parindent=\z@\parskip=\itemsep
+\def\refpar{\par\hangindent=3em\hangafter=1}}
+\def\endreferences{\refpar\egroup\revtex@pageid}
+\def\thebibliography{\clearpage\subsection*{REFERENCES}
+\list{\null}{\leftmargin 3em\labelwidth\z@\labelsep\z@\itemindent -3em
+\usecounter{enumi}}
+\def\refpar{\relax}
+\def\newblock{\hskip .11em plus .33em minus .07em}
+\sloppy\clubpenalty4000\widowpenalty4000
+\sfcode`\.=1000\relax}
+\def\endthebibliography{\endlist\revtex@pageid}
+\def\@biblabel#1{\relax}
+\def\@cite#1#2{#1\if@tempswa , #2\fi}
+\def\reference{\relax\refpar}
+\def\markcite#1{#1\relax}
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+\def\@citea{}\@cite{\@for\@citeb:=#2\do
+{\@citea\def\@citea{,\penalty\@m\ }\@ifundefined
+{b@\@citeb}{\@warning
+{Citation `\@citeb' on page \thepage \space undefined}}%
+{\csname b@\@citeb\endcsname}}}{#1}}
+\def\tablenotemark#1{\rlap{$^{\rm #1}$}}
+\newtoks\@temptokenb
+\def\tblnote@list{}
+\def\tablenotetext#1#2{
+\@temptokena={\vspace{.5ex}{\noindent\llap{$^{#1}$}#2}\par}
+\@temptokenb=\expandafter{\tblnote@list}
+\xdef\tblnote@list{\the\@temptokenb\the\@temptokena}}
+\def\spew@tblnotes{
+\ifx\tblnote@list\@empty\relax
+\else
+\vspace{4.5ex}
+\footnoterule
+\vspace{.5ex}
+{\footnotesize\tblnote@list}
+\gdef\tblnote@list{}
+\fi}
+\def\endtable{\spew@tblnotes\end@float}
+\@namedef{endtable*}{\spew@tblnotes\end@dblfloat}
+\let\tableline=\hline
+\long\def\@makecaption#1#2{\vskip 2ex\noindent #1 #2\par}
+\def\tablenum#1{\def\thetable{#1}\let\@currentlabel\thetable
+\addtocounter{table}{\m@ne}}
+\def\figurenum#1{\def\thefigure{#1}\let\@currentlabel\thefigure
+\addtocounter{figure}{\m@ne}}
+\newbox\pt@box
+\newdimen\pt@width
+\newcount\pt@line
+\newcount\pt@nlines
+\newcount\pt@ncol
+\def\colhead#1{\omit\hidewidth{#1}\hidewidth\global\advance\pt@ncol by\@ne}
+\def\tablecaption#1{\gdef\pt@caption{#1}} \def\pt@caption{\relax}
+\def\tablehead#1{\gdef\pt@head{\hline\hline\relax\\[-1.7ex]
+#1\hskip\tabcolsep\\[.7ex]\hline\relax\\[-1.5ex]}} \def\pt@head{\relax}
+\def\tabletail#1{\gdef\pt@tail{#1}} \def\pt@tail{\relax}
+\def\tablewidth#1{\pt@width=#1} \pt@width\textwidth
+\def\tableheadfrac#1{\gdef\pt@headfrac{#1}} \def\pt@headfrac{.1}
+\def\pt@calcnlines{\@tempdima\pt@headfrac\textheight
+\@tempdimb\textheight\advance\@tempdimb by-\@tempdima
+\@tempdima\arraystretch\baselineskip
+\divide\@tempdimb by\@tempdima
+\global\pt@nlines\@tempdimb}
+\def\pt@tabular{\hbox \bgroup $\let\@acol\@ptabacol
+\let\@classz\@tabclassz
+\let\@classiv\@tabclassiv \let\\\@tabularcr\@tabarray}
+\def\@ptabacol{\edef\@preamble{\@preamble \hskip \tabcolsep\tabskip\fill}}
+\def\fnum@ptable{Table \thetable}
+\def\fnum@ptablecont{Table \thetable---{\rm Continued}}
+\def\set@mkcaption{\long\def\@makecaption##1##2{
+\center\rm##1.\quad##2\endcenter\vskip 2.5ex}}
+\def\set@mkcaptioncont{\long\def\@makecaption##1##2{
+\center\rm##1\endcenter\vskip 2.5ex}}
+\newenvironment{planotable}[1]{\def\pt@format{\string#1}%
+\set@tblnotetext\pt@ncol=0}%
+{\crcr\noalign{\vskip .7ex}\hline\endtabular%
+\pt@width\wd\pt@box\box\pt@box\spew@ptblnotes%
+\typeout{Table \thetable\space has been set to width \the\pt@width}%
+\endcenter\end@float}
+\def\startdata{\pt@line=0\pt@calcnlines%
+\ifdim\pt@width>\z@\def\@halignto{to \pt@width}\else\def\@halignto{}\fi%
+\let\fnum@table=\fnum@ptable\set@mkcaption%
+\@float{table}\center\caption{\pt@caption}\leavevmode%
+\setbox\pt@box=\pt@tabular{\pt@format}\pt@head}
+\def\pt@nl{\global\advance\pt@line by\@ne%
+\ifnum\pt@line=\pt@nlines%
+\endtabular\box\pt@box
+\endcenter\end@float\clearpage%
+\addtocounter{table}{\m@ne}%
+\let\fnum@table=\fnum@ptablecont\set@mkcaptioncont%
+\@float{table}\center\caption{\pt@caption}\leavevmode%
+\global\pt@ncol=0%
+\setbox\pt@box=\pt@tabular{\pt@format}\pt@head%
+\global\pt@line=0%
+\else\\
+\fi}
+\let\nl=\pt@nl
+\let\nextline=\pt@nl
+\def\tablevspace#1{\noalign{\vskip{#1}}}
+\def\tablebreak{\pt@line\pt@nlines\advance\pt@line by\m@ne\pt@nl}
+\def\cutinhead#1{\noalign{\vskip 1.5ex}
+\hline\pt@nl\noalign{\vskip -4ex}
+\multicolumn{\pt@ncol}{c}{#1}\pt@nl
+\noalign{\vskip .8ex}
+\hline\pt@nl\noalign{\vskip -2ex}}
+\def\sidehead#1{\noalign{\vskip 1.5ex}
+\multicolumn{\pt@ncol}{@{\hskip\z@}l}{#1}\pt@nl
+\noalign{\vskip .5ex}}
+\def\set@tblnotetext{\def\tablenotetext##1##2{{%
+\@temptokena={\vspace{0ex}{%
+\parbox{\pt@width}{\hskip1em$^{\rm ##1}$##2}\par}}%
+\@temptokenb=\expandafter{\tblnote@list}
+\xdef\tblnote@list{\the\@temptokenb\the\@temptokena}}}}
+\def\spew@ptblnotes{
+\ifx\tblnote@list\@empty\relax
+\else
+\par
+\vspace{2ex}
+{\tblnote@list}
+\gdef\tblnote@list{}
+\fi}
+\def\tablerefs#1{\@temptokena={\vspace*{3ex}{%
+\parbox{\pt@width}{\hskip1em\rm References. --- #1}\par}}%
+\@temptokenb=\expandafter{\tblnote@list}
+\xdef\tblnote@list{\the\@temptokenb\the\@temptokena}}
+\def\tablecomments#1{\@temptokena={\vspace*{3ex}{%
+\parbox{\pt@width}{\hskip1em\rm Note. --- #1}\par}}%
+\@temptokenb=\expandafter{\tblnote@list}
+\xdef\tblnote@list{\the\@temptokenb\the\@temptokena}}
+\def\thefigure{\@arabic\c@figure}
+\def\fnum@figure{{\rm Fig.\space\thefigure.---}}
+\def\thetable{\@arabic\c@table}
+\def\fnum@table{{\rm Table \thetable:}}
+\def\fps@figure{bp}
+\def\fps@table{bp}
+\@ifundefined{epsfbox}{\@input{epsf.sty}}{\relax}
+\def\plotone#1{\centering \leavevmode
+\epsfxsize=\columnwidth \epsfbox{#1}}
+\def\plottwo#1#2{\centering \leavevmode
+\epsfxsize=.45\columnwidth \epsfbox{#1} \hfil
+\epsfxsize=.45\columnwidth \epsfbox{#2}}
+\def\plotfiddle#1#2#3#4#5#6#7{\centering \leavevmode
+\vbox to#2{\rule{0pt}{#2}}
+\special{psfile=#1 voffset=#7 hoffset=#6 vscale=#5 hscale=#4 angle=#3}}
+\let\jnl@style=\rm
+\def\ref@jnl#1{{\jnl@style#1}}
+\def\aj{\ref@jnl{AJ}}
+\def\araa{\ref@jnl{ARA\&A}}
+\def\apj{\ref@jnl{ApJ}}
+\def\apjl{\ref@jnl{ApJ}}
+\def\apjs{\ref@jnl{ApJS}}
+\def\ao{\ref@jnl{Appl.Optics}}
+\def\apss{\ref@jnl{Ap\&SS}}
+\def\aap{\ref@jnl{A\&A}}
+\def\aapr{\ref@jnl{A\&A~Rev.}}
+\def\aaps{\ref@jnl{A\&AS}}
+\def\azh{\ref@jnl{AZh}}
+\def\baas{\ref@jnl{BAAS}}
+\def\jrasc{\ref@jnl{JRASC}}
+\def\memras{\ref@jnl{MmRAS}}
+\def\mnras{\ref@jnl{MNRAS}}
+\def\pra{\ref@jnl{Phys.Rev.A}}
+\def\prb{\ref@jnl{Phys.Rev.B}}
+\def\prc{\ref@jnl{Phys.Rev.C}}
+\def\prd{\ref@jnl{Phys.Rev.D}}
+\def\prl{\ref@jnl{Phys.Rev.Lett}}
+\def\pasp{\ref@jnl{PASP}}
+\def\pasj{\ref@jnl{PASJ}}
+\def\qjras{\ref@jnl{QJRAS}}
+\def\skytel{\ref@jnl{S\&T}}
+\def\solphys{\ref@jnl{Solar~Phys.}}
+\def\sovast{\ref@jnl{Soviet~Ast.}}
+\def\ssr{\ref@jnl{Space~Sci.Rev.}}
+\def\zap{\ref@jnl{ZAp}}
+\let\astap=\aap
+\let\apjlett=\apjl
+\let\apjsupp=\apjs
+\def\deg{\hbox{$^\circ$}}
+\def\sun{\hbox{$\odot$}}
+\def\earth{\hbox{$\oplus$}}
+\def\lesssim{\mathrel{\hbox{\rlap{\hbox{\lower4pt\hbox{$\sim$}}}\hbox{$<$}}}}
+\def\gtrsim{\mathrel{\hbox{\rlap{\hbox{\lower4pt\hbox{$\sim$}}}\hbox{$>$}}}}
+\def\sq{\hbox{\rlap{$\sqcap$}$\sqcup$}}
+\def\arcmin{\hbox{$^\prime$}}
+\def\arcsec{\hbox{$^{\prime\prime}$}}
+\def\fd{\hbox{$.\!\!^{\rm d}$}}
+\def\fh{\hbox{$.\!\!^{\rm h}$}}
+\def\fm{\hbox{$.\!\!^{\rm m}$}}
+\def\fs{\hbox{$.\!\!^{\rm s}$}}
+\def\fdg{\hbox{$.\!\!^\circ$}}
+\def\farcm{\hbox{$.\mkern-4mu^\prime$}}
+\def\farcs{\hbox{$.\!\!^{\prime\prime}$}}
+\def\fp{\hbox{$.\!\!^{\scriptscriptstyle\rm p}$}}
+\def\micron{\hbox{$\mu$m}}
+\let\la=\lesssim
+\let\ga=\gtrsim
+\def\case#1#2{\hbox{$\frac{#1}{#2}$}}
+\def\slantfrac#1#2{\hbox{$\,^#1\!/_#2$}}
+\def\onehalf{\slantfrac{1}{2}}
+\def\onethird{\slantfrac{1}{3}}
+\def\twothirds{\slantfrac{2}{3}}
+\def\onequarter{\slantfrac{1}{4}}
+\def\threequarters{\slantfrac{3}{4}}
+\def\ubvr{\hbox{$U\!BV\!R$}}
+\def\ub{\hbox{$U\!-\!B$}}
+\def\bv{\hbox{$B\!-\!V$}}
+\def\vr{\hbox{$V\!-\!R$}}
+\def\ur{\hbox{$U\!-\!R$}}
+\def\ion#1#2{#1$\;${\small\rm\@Roman{#2}}\relax}
+\def\nodata{\multicolumn{1}{c}{$\cdots$}}
+\newcount\lecurrentfam
+\def\LaTeX{\lecurrentfam=\the\fam \leavevmode L\raise.42ex
+\hbox{$\fam\lecurrentfam\scriptstyle\kern-.3em A$}\kern-.15em\TeX}
+\def\sizrpt{
+(\fontname\the\font): em=\the\fontdimen6\font, ex=\the\fontdimen5\font
+\typeout{
+(\fontname\the\font): em=\the\fontdimen6\font, ex=\the\fontdimen5\font
+}}
diff --git a/obsolete/macros/latex209/contrib/aasmacros/aaspp.doc b/obsolete/macros/latex209/contrib/aasmacros/aaspp.doc
new file mode 100644
index 0000000000..37135123ce
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aasmacros/aaspp.doc
@@ -0,0 +1,1153 @@
+% AASPP.STY -- AAS preprint substyle definition for LaTeX.
+
+% My convention for identifying configuration information is for styles
+% to define the five parameters below.
+
+\def\revtex@ver{3.0} % Version number of this file.
+\def\revtex@date{10 Jan 93} % Revision date.
+\def\revtex@org{AAS} % Sponsoring organization.
+\def\revtex@jnl{AAS} % Applicable journal, if specific.
+\def\revtex@genre{preprint} % Document "type".
+
+% Display identifying message on screen and in logfile.
+
+\typeout{\revtex@org\space \revtex@genre\space substyle,
+ v\revtex@ver\space <\revtex@date>.}
+
+% The following mini-colophon identifies the article are having been
+% prepared with this macro package. The \revtex@pageid command only
+% defines the formatting of this colophon; its existence and placement
+% within the printed article is controlled by the use of this command
+% in the style file.
+
+\def\revtex@pageid{\xdef\@thefnmark{\null}
+ \@footnotetext{This \revtex@genre\space was prepared with the
+ \revtex@org\space \LaTeX\ macros v\revtex@ver.}}
+
+% Issue a warning if manuscripts are formatted with type smaller than 12pt.
+
+\def\genre@MS{manuscript}
+\def\genre@PP{preprint}
+\ifx\revtex@genre\genre@PP
+ \ifnum\@ptsize<1
+ \typeout{Warning: Undersize \revtex@genre\space font (1\@ptsize\space pts).
+ Use 11pt or 12pt documentstyle option.}
+ \fi
+\fi
+
+% ****************************************
+% * PAGE LAYOUT *
+% ****************************************
+
+% Create "plaintop" page style that has folios at top of page.
+
+\def\ps@plaintop{\let\@mkboth\@gobbletwo
+ \def\@oddfoot{}\def\@oddhead{\rm\hfil--\space\thepage\space--\hfil}
+ \def\@evenfoot{}\let\@evenhead\@oddhead}
+
+\ps@plaintop % Use "plaintop" pagestyle by default.
+\pretolerance=10000 % Disable hyphenation
+
+% The following gives "reasonable" ragged right results.
+
+\@rightskip=\z@ plus 4em\rightskip\@rightskip
+
+% Page size, spacing parameters, etc.
+
+\textwidth=6.5in
+\textheight=8.4in
+\topmargin=0in
+\headheight=.15in
+\headsep=.35in
+\oddsidemargin=0in
+\evensidemargin=0in
+\parindent=2em
+\parskip=1.5ex
+
+
+%\@input{styopts.sty}
+
+% ****************************************
+% * STYLE OPTIONS *
+% ****************************************
+
+% Make footnotes same size as main text.
+
+%\let\footnotesize=\normalsize
+
+% Define parameters to adjust the baselineskip.
+% These are passed as the scale factor argument to \baselinestretch.
+
+\def\@tightleading{1.1}
+\def\@doubleleading{1.6}
+
+% Double-space by default. Observe that you double-space in LaTeX by
+% resetting \baselinestretch, which is essentially a scale factor for
+% \baselineskip (= leading, for you typographophiles). The style uses
+% the \@doubleleading factor, defined above.
+
+\def\baselinestretch{\@doubleleading}
+
+% The \tighten command merely resets the \baselinestretch to a
+% smaller factor, resulting in single-column text that is more closely
+% spaced. (This will always work.) Tightening the vertical spacing
+% in the text results in output that is more attractive for distribution
+% to colleagues who are primarily interested in reading the paper, as
+% opposed to copy editing it. Double-spaced output for referees and
+% copy editors is, however, the main objective of this style, hence
+% double-spacing occurs by default. The same effect as \tighten
+% can be achieved by using the "tighten" document style option.
+%
+% \tighten
+%
+% \tighten is intended for use in the preamble of the article.
+
+\def\tighten{\def\baselinestretch{\@tightleading}}
+\let\tightenlines=\tighten
+
+% For authors who feel compelled to change between single and double
+% spacing in the manuscript, \singlespace and \doublespace commands
+% are provided. (Following recommendations of AAS Publications Board
+% Subcommittee on Preprints.)
+%
+% \singlespace
+% \doublespace
+
+\def\singlespace{\def\baselinestretch{\@tightleading}\normalsize}
+\def\doublespace{\def\baselinestretch{\@doubleleading}\normalsize}
+
+% Upper case for sections (optional upper case items). These are created
+% so that some headings can be toggled between mixed case and upper case
+% readily. Headings that might be changed can be wrapped in the style
+% file in \sec@upcase{TEXT} constructs; the expansion of \sec@upcase is
+% controlled here. It is `\relax' by default (mixed case heads), and can
+% easily be changed to `\uppercase' if desired. If mixed case headings
+% are wanted by the editor, authors MUST supply mixed case text, although
+% this is what authors should be doing anyway. (Mixed can be converted
+% to upper, but the reverse transformation cannot be automated.)
+
+%\def\sec@upcase#1{\uppercase{#1}}
+\def\sec@upcase#1{\relax{#1}}
+
+% Sometimes people want to number equations by section, rather than
+% sequentially through the whole paper.
+
+\def\eqsecnum{
+ \@newctr{equation}[section]
+ \def\theequation{\hbox{\normalsize\arabic{section}-\arabic{equation}}}}
+
+%\@input{tighten.sty}
+
+\tighten
+
+%\@input{slug.sty}
+
+% ****************************************
+% * SLUG LINE *
+% ****************************************
+
+% There are some obvious style-dependent parameters and formatting
+% instructions in this file. The object has been to keep the author
+% commands (the user interface, if you will) society, journal, and
+% style-independent, while the style-specific parameters and commands
+% are kept below that level. Commands and parameters that are susceptible
+% to external interpretation, either by authors or publishers/translators,
+% are identified by indented comment lines, with the semantics of command
+% arguments described in upper case text.
+%
+% \@journalname{JOURNAL NAME}
+% \cpr@holder{COPYRIGHT HOLDER}
+
+\def\@journalname{The Astropolitical Journal}
+\def\cpr@holder{American Astronomical Society}
+
+% Journal and article identification information is established by the
+% editorial staff. The following macros are used by personnel at the
+% editorial office to annotate/record slug-line data and should be included
+% in the manuscript preamble, i.e., before the LaTeX \begin{document}. All
+% they do is globally define other TeX control sequences that are used by
+% other macros at a later time.
+%
+% \received{RECEIPT DATE}
+% \revised{REVISION DATE}
+% \accepted{ACCEPTANCE DATE}
+% \journalid{VOL}{JOURNAL DATE}
+% \articleid{START PAGE}{END PAGE}
+% \paperid{ID}
+% \ccc{CODE}
+%
+% For preprints and submitted manuscripts in draft/referee format, etc.,
+% the slug-line information is irrelevant and in those kinds of style,
+% the data are never used. In my estimation, it is perfectly acceptable
+% to have these commands in the file (for future use), so they are defined
+% in the usual way.
+
+\def\received#1{\gdef\@recvdate{#1}} \received{\relax}
+\def\revised#1{\gdef\@revisedate{#1}} \revised{\relax}
+\def\accepted#1{\gdef\@accptdate{#1}} \accepted{\relax}
+\def\journalid#1#2{\gdef\@jourvol{#1}\gdef\@jourdate{#2}}
+\def\articleid#1#2{\gdef\@startpage{#1}\gdef\@finishpage{#2}}
+\def\paperid#1{\gdef\@paperid{#1}} \paperid{MS-0001-SAMP}
+\def\ccc#1{\gdef\CCC@code{#1}} \ccc{000-00\$75.95-CDB}
+
+% Following copyright and running heads \defs are stubs.
+%\let\cpright=\@gobbletwo
+%\let\righthead=\@gobble
+%\let\lefthead=\@gobble
+
+% Copyright data. Permit the author/editor to supply a copyright
+% "type" as well as the year.
+%
+% \cpright{TYPE}{YEAR}
+%
+% Copyright types are designated by name and converted to numeric form.
+% The mapping of types is defined by the code that sets the @cprtype
+% counter. The language of the copyright notices is defined by \@slug.
+
+\def\cpright#1#2{\@nameuse{cpr@#1} \gdef\cpr@year{#2}
+ \typeout{`#1' copyright \cpr@year.}}
+
+\newcount\@cprtype \@cprtype=\@ne % Default copyright type.
+\def\cpr@AAS{\@cprtype=1}
+\def\cpr@PD{\@cprtype=2}
+\def\cpr@Crown{\@cprtype=3}
+\def\cpr@none{\@cprtype=4}
+\def\cpr@ASP{\@cprtype=5}
+
+\def\cpr@year{\number\year} % Default copyright year.
+
+% \@slug determines formatting of slugline information.
+% ATTN: Check with AAS/AIP/UCP about exact wording of these.
+
+\def\@slug{\par\noindent
+ \ifcase\@cprtype
+ \relax
+ \or
+ Copyright \cpr@year\space by the \cpr@holder.
+ \or
+ This article is in the public domain.
+ \or
+ Crown copyright \cpr@year\space by the \cpr@holder.
+ \or
+ No copyright is claimed for this article.
+ \or
+ Copyright \cpr@year\space by the ASP.
+ \fi
+ \par\noindent
+ Manuscript number \@paperid.\par\noindent
+ \CCC@code
+}
+
+% Authors may be asked to supply running head information. We use the
+% language of the publisher here to distinguish between two pieces of
+% information: the left head frequently contains an author list (last
+% names, possibly truncated as et al.), while the right head frequently
+% contains an abbreviated form of the paper title. The \lefthead and
+% \righthead commands merely collect the information and buffer the text.
+%
+% \lefthead{TEXT}
+% \righthead{TEXT}
+%
+% For the ApJ, right heads are the short titles, and the publisher would
+% like for the author to specify a 44-character or less abbreviated title
+% to use as the running head on right pages.
+
+\def\lefthead#1{\gdef\@versohead{#1}} \lefthead{\relax}
+\def\righthead#1{\gdef\@rectohead{#1}} \righthead{\relax}
+
+% \@runheads determines formatting of running head information.
+
+\def\@runheads{\@tempcnta\c@page
+ \@whilenum \@tempcnta >0\do{
+ \vskip 3ex
+ \hbox to30pc{\small\expandafter\uppercase\expandafter{\@versohead}:
+ \expandafter\uppercase\expandafter{\@rectohead}\hfil}
+ \advance\@tempcnta by\m@ne}
+}
+
+% The \slugcomment command is provided so authors or editors may include
+% a remark about the manuscript that may be desired in print for some
+% styles. For instance, authors like to include information about the
+% journal and publication date of accepted papers ("To appear in AJ,
+% November 1992").
+%
+% \slugcomment{TEXT}
+%
+% The formatting of the \slugcomment information is controlled by the
+% \@makeslugcmmnt command and its placement on the page is dictated
+% by the presence of \@makeslugcmmnt in \sluginfo (or whatever).
+
+\def\slugcomment#1{\gdef\slug@comment{#1}} \slugcomment{}
+
+% For PP style, slug comments are set flushright at the top of the title
+% page in a parbox of 2/3 the textwidth.
+
+\newdimen\@slugcmmntwidth \@slugcmmntwidth .67\textwidth
+\long\def\@makeslugcmmnt{\ifx\slug@comment\@empty\relax\else
+ \setbox\@tempboxa\hbox{\slug@comment}
+ \ifdim \wd\@tempboxa >\@slugcmmntwidth
+ \hbox to\textwidth{\hss
+ \parbox\@slugcmmntwidth\slug@comment}
+ \else
+ \hbox to\textwidth{\hfil\box\@tempboxa}
+ \fi
+ \vskip 2ex
+\fi}
+
+% Editorial offices like to have receipt and acceptance dates on the front
+% page for tracking purposes. The current practice is to require the author
+% to type Received __________________ and Accepted ________________ lines
+% for the staff to type on. The \@dates command will typeset either rules
+% or the dates specified in \received and/or \accepted commands. Note that
+% authors should not include \received and \accepted.
+
+\def\@rcvaccrule{\vrule\@width1.75in\@height0.5pt\@depth\z@}
+
+% \@dates determines formatting of MS date information.
+
+\def\@dates{{Received}\space%
+ \if\@recvdate\relax\@rcvaccrule\else\@recvdate\fi;%
+ \hspace{1.5em}{accepted}\space%
+ \if\@accptdate\relax\@rcvaccrule\else\@accptdate\fi%
+}
+
+% The \sluginfo command is executed automatically when a \begin{abstract} is
+% encountered, so it is not necessary (or appropriate) for the author to
+% include this line explicitly. The received/accepted business is a
+% concern only for the editorial staff, hence we have arranged for the
+% author not to have to fuss with it.
+
+\def\sluginfo{{\center
+ \@dates
+ %\@slug
+ %\@runheads
+ \endcenter}}
+
+\let\dates=\sluginfo % Backwards compatibility
+
+%\@input{text.sty}
+
+% ****************************************
+% * FRONT MATTER *
+% ****************************************
+
+% Make adjustments to LaTeX abstract style: optional upper case heading,
+% retain current type size (should be normalsize), ignore twocolumn option
+% in this substyle, add \sluginfo, and start abstract on fresh page.
+
+\def\abstract{%\sluginfo\clearpage
+ \begin{center}
+ {\bf{ABSTRACT}}
+ \end{center}
+ \quotation
+}
+
+% Title and author identification is by way of standard LaTeX commands
+% \title and \author, although the macros themselves are rather different.
+% The information is typeset by these macros in this style, rather than
+% being buffered as per regular LaTeX. The authors' principal affiliation
+% is specified with a separate macro \affil. Each \author command should
+% be followed by its own \affil (or address).
+%
+% Authors often have affiliations above and beyond their main employer,
+% and these are specified with the \altaffilmark and \altaffiltext commands.
+% These commands behave like the \footnotemark and \footnotetext commands
+% of LaTeX. \altaffilmark is appended to author's names in the \author
+% lists, and generates the superscript identification numbers.
+% The text for the individual alternate affiliations is generated by the
+% \altaffiltext command. It is up to the author to make sure that the
+% \altaffilmark numbers attached to authors' names correspond to the correct
+% alternate affiliation.
+%
+% \title{LUCID TEXT}
+% \author{NAME(S)}
+% \authoraddr{AUTHOR'S POSTAL ADDRESS}
+% \affil{AFFILIATION}
+% \altaffilmark{TAG NUMBER(S)}
+% \altaffiltext{NUMERICAL TAG}{TEXT}
+%
+% The typesetting performed by these commands is appropriate for the top of
+% the first text page of the manuscript. They could as well be used on a
+% title cover page, but vertical placement would have to be controlled by
+% the author. This is not to be encouraged, since I want to discourage
+% the introduction of any extra horizontal or vertical space.
+
+\def\title#1{\@makeslugcmmnt{\center\large\bf{#1}\endcenter}
+ \thispagestyle{empty}}
+\def\author#1{{\topsep\z@\center\normalsize#1\endcenter}}
+\let\authoraddr=\@gobble
+\def\affil#1{\vspace*{-2.5ex}{\topsep\z@\center#1\endcenter}}
+\def\altaffilmark#1{$^{#1}$}
+\def\altaffiltext#1#2{\footnotetext[#1]{#2}\stepcounter{footnote}}
+
+% Redefine the LaTeX \and command for this style.
+
+\def\and{\vspace*{-0.5ex}{\topsep\z@\center and\endcenter}}
+
+% ****************************************
+% * KEYWORDS *
+% ****************************************
+
+% Keywords environment. Keywords, subject headings, etc., are accommodated
+% only as a piece of text; the \keywords command indents if necessary and
+% supplies the proper leading text ("Keywords:", "Subject headings:", etc.)
+% but does not apply formatting to the user's keyword text. The author
+% must supply the correct punctuation according to the journal style.
+%
+% Note that the editors of A&A, ApJ, and MNRAS have discussed the issue
+% of keywords, and there is disagreement about whether "subject headings"
+% or "keywords" should appear after abstracts in astronomical papers.
+% It does not really matter what the macro is called, so I will stick
+% to \keywords since I don't know what the difference is anyway.
+
+\def\@keywordtext{Subject headings}
+\def\@keyworddelim{---}
+
+\def\keywords#1{\vspace*{-.7ex}%\vspace{\z@}
+ \if@twocolumn\noindent{{\it\@keywordtext:\/}\space\@kwds{#1}}
+ \else{\quote{\it\@keywordtext:\/}\space\@kwds{#1}\endquote}
+ \fi}
+
+\let\subjectheadings=\keywords
+
+% It might be possible to handle keywords and their punctuation more
+% automatically at some stage, but at the moment using this looping
+% construct is serious overkill. It also causes problems because the
+% loop delimiter is a comma, and there are keywords that legitimately
+% contain commas. It also seem ponderous to me for keywords in the
+% \keyword list to be delimited by `|', so I make the author responsible
+% for keyword list punctuation.
+
+%\def\@kwds#1{\def\@kwddlm{}\@for\@kwd:=#1\do
+% {\@kwddlm\def\@kwddlm{\space\@keyworddelim\penalty\@m\space}{\@kwd}}}
+
+\def\@kwds#1{#1\relax}
+
+% ****************************************
+% * FOOTNOTES *
+% ****************************************
+
+% The following code redefines a few things so that spacing in footnotes is
+% different than LaTeX defaults. The adjustment to \skip\footins increases
+% the amount of vspace inserted before the \footnoterule. Redefine
+% \@makefntext to get proper indentation.
+
+\skip\footins 4ex plus 1ex minus .5ex
+\footnotesep 3ex
+
+%\long\def\@makefntext#1{\noindent\hbox to\z@{\hss$^{\@thefnmark}$}#1}
+%\long\def\@makefntext#1{\indent\hbox{$^{\@thefnmark}$}#1}
+
+% ****************************************
+% * SECTIONS *
+% ****************************************
+
+% \@startsection {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}
+% optional * [ALTHEADING]{HEADING}
+% Generic command to start a section.
+% NAME : e.g., 'subsection'
+% LEVEL : a number, denoting depth of section -- e.g., chapter=1,
+% section = 2, etc.
+% INDENT : Indentation of heading from left margin
+% BEFORESKIP : Absolute value = skip to leave above the heading.
+% If negative, then paragraph indent of text following
+% heading is suppressed.
+% AFTERSKIP : if positive, then skip to leave below heading, else
+% negative of skip to leave to right of run-in heading.
+% STYLE : commands to set style
+% If '*' missing, then increments the counter. If it is present, then
+% there should be no [ALTHEADING] argument.
+
+% Adjust section heading typography slightly. The manuscript editors
+% seem to like the idea that the heads will be centered, and that there
+% will be a "." trailing the section number. This requires hacking below
+% the normal LaTeX programming interface (\@startsection), since the
+% centering has to be turned on and off again before the section starts.
+%
+% Also, modify the indentation behavior so that ALL paragraphs, including
+% those first after section heads, are indented. This is consonant with
+% the styles of many journals, although it's non-standard typographic practice.
+
+\newif\if@firstsection \@firstsectiontrue
+
+\def\section{\if@firstsection
+ \@firstsectionfalse\fi
+ \@startsection {section}{1}{\z@}
+ {5ex plus .5ex}{1ex plus .2ex}{\normalsize\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}
+ {5ex plus .5ex}{1ex plus .2ex}{\normalsize\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}
+ {5ex plus .5ex}{1ex plus .2ex}{\normalsize\it}}
+
+\def\thesection{\@arabic{\c@section}.}
+\def\thesubsection{\thesection\@arabic{\c@subsection}.}
+\def\thesubsubsection{\thesubsection\@arabic{\c@subsubsection}.}
+\def\theparagraph{\thesubsubsection\@arabic{\c@paragraph}:}
+
+% For ApJ, acknowledgments are set off from main body text simply by
+% vertical space (no heading or type size change). I do the same for
+% the AAS manuscript style. For use in producing more polished output
+% for other journals, this macro might generate text saying
+% "Acknowledg[e]ments".
+
+\def\acknowledgments{\vskip 3ex plus .8ex minus .4ex}
+\let\acknowledgements=\acknowledgments % second spelling
+
+% LaTeX sectioning tools.
+
+\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
+ \def\@svsec{}\else
+ \refstepcounter{#1}\edef\@svsec{\csname the#1\endcsname\hskip 1em }\fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup \center#6\relax
+ \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M
+ \sec@upcase{#8}\par}%
+ \endcenter\endgroup
+ \csname #1mark\endcsname{#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #7}\else
+ \def\@svsechd{#6\hskip #3\@svsec \sec@upcase{#8}\csname #1mark\endcsname
+ {#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #7}}\fi
+ \@xsect{#5}}
+
+\def\@ssect#1#2#3#4#5{\@tempskipa #3\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #4\center\@hangfrom{\hskip #1}{\interlinepenalty \@M
+ \sec@upcase{#5}\par}\endcenter\endgroup
+ \else \def\@svsechd{#4\hskip #1\relax \sec@upcase{#5}}\fi
+ \@xsect{#3}}
+
+% ****************************************
+% * EQUATION NUMBERING *
+% ****************************************
+
+% Redefine \appendix so that equation numbers are prepended with
+% \theappendix number. Reset equation counter so that equation
+% numbers in the appendix begin again with 1. Note that the
+% \appendix command is NOT a sectioning command; it is merely
+% a delimiting markup between the main body of the paper and the
+% appendix. Sections in the appendix are still started with
+% \section commands.
+%
+% \appendix
+
+\def\appendix{\par
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \setcounter{equation}{0}
+ \def\thesection{\Alph{section}.}
+ \def\theequation{\hbox{\normalsize\Alph{section}\arabic{equation}}}}
+
+% Define mathletters environment. This is a wrapper that goes
+% *around* (outside of) equation or eqnarray environments.
+%
+% \begin{mathletters}
+% \end{mathletters}
+
+\newcounter{cureqno}
+
+\newenvironment{mathletters}{\refstepcounter{equation}%
+ \setcounter{cureqno}{\value{equation}}%
+ \let\@curtheeqn\theequation%
+ \edef\cur@eqn{\csname theequation\endcsname}%
+ \def\theequation{\cur@eqn\alph{equation}}%
+ \setcounter{equation}{0}}%
+ {\let\theequation\@curtheeqn%
+ \setcounter{equation}{\value{cureqno}}}
+
+% The \eqnum command allows the author to override all automatic
+% equation marking schemes.
+%
+% \eqnum{TEXT}
+
+\def\eqnum#1{\def\theequation{#1}\let\@currentlabel\theequation
+ \addtocounter{equation}{\m@ne}}
+
+% ****************************************
+% * BIBLIOGRAPHY *
+% ****************************************
+
+% Bibliography/references environment. For the time being, I don't think
+% it would be a good idea to force an implementation based on BibTeX,
+% although I'll prepare for that eventuality by using the constructs and
+% general ideas of the LaTeX thebibliography environment. Adjustments
+% have been made so that the \cite-\bibitem mechanism can be used to cite
+% references symbolically while maintaining proper citation syntax within
+% the paper; the author must create the citation label for each reference
+% in proper journal format in the \bibitem command.
+%
+% \begin{thebibliography}
+% \bibitem[LABEL]{TEXTTAG} \reference <bibliographic data>
+% \end{thebibliography}
+%
+% where LABEL must adhere to the journal's standards, e.g. "Abt 1986".
+%
+% It is not necessary to use the thebibliography environment. This style
+% defines a references environment that simply sets off the list of references
+% and adjusts spacing parameters. It is not possible to use \bibitems
+% within the references environment. (The \reference command cannot be
+% shortened to \ref; \ref is used in vanilla LaTeX for cross-referencing.)
+%
+% \begin{references}
+% \reference <bibliographic data>
+% \end{references}
+%
+% \markcite{TEXT}
+%
+% Observe that the bibliographic data supplied by the author must also
+% conform to the standards of the journal. I have elected not to burden
+% authors with tedious LaTeX commands which would require many curly braces
+% to delimit the bibliographic fields because many of the journals I have
+% targeted in this project have agreed to reduce typographic overhead (bolding,
+% italicizing, etc.) in reference lists. (See Abt's editorial in ApJ 357.)
+% It is the responsibility of the author to get these fields in the proper
+% order with the correct punctuation; the information will be typeset as is,
+% i.e., in roman with no size or style changes.
+%
+% Macros are provided for many of the oft-referenced journals so that authors
+% may use the LaTeX names rather than having to look up a particular journal's
+% specific abbreviation. In principle, all the journals should be using the
+% same abbreviations, too, but I anticipate some changes in the specific
+% abbreviations before a set is finally settled on. As long as these macros
+% are kept up to date, authors need not be concerned about such editorial
+% changes.
+%
+% Corresponding with the non-BibTeX references environment and \reference
+% command for the reference list is the \markcite command. This can be
+% used to identify in-text citations; in this case, the author provides
+% the actual citation text as opposed to the symbolic tag. The use of
+% this is encouraged, even for journals where no special formatting of
+% citation call-outs is required; it is crucial for the future use of
+% on-line browsers.
+
+\def\references{\subsection*{REFERENCES}
+ \bgroup\parindent=\z@\parskip=\itemsep
+ \def\refpar{\par\hangindent=3em\hangafter=1}}
+\def\endreferences{\refpar\egroup\revtex@pageid}
+
+\def\thebibliography{\subsection*{REFERENCES}
+ \list{\null}{\leftmargin 3em\labelwidth\z@\labelsep\z@\itemindent -3em
+ \usecounter{enumi}}
+ \def\refpar{\relax}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+\def\endthebibliography{\endlist\revtex@pageid}
+
+\def\@biblabel#1{\relax}
+%\def\@cite#1#2{({#1\if@tempswa , #2\fi})}
+\def\@cite#1#2{#1\if@tempswa , #2\fi}
+
+\def\reference{\relax\refpar} % Generic: might be better...
+\def\markcite#1{#1\relax}
+
+% Modify \@citex so that individual citation texts are NOT hboxed.
+% This allows TeX to break lines at spaces between words in citations.
+% Remove the obnoxious {\bf ?} that was inserted in the text when
+% undefined citations are encountered; here, the warning message is
+% printed only on the terminal.
+
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+ \def\@citea{}\@cite{\@for\@citeb:=#2\do
+ {\@citea\def\@citea{,\penalty\@m\ }\@ifundefined
+ {b@\@citeb}{\@warning
+ {Citation `\@citeb' on page \thepage \space undefined}}%
+{\csname b@\@citeb\endcsname}}}{#1}}
+
+%\@input{mstblfig.sty}
+
+% ****************************************
+% * TABLES AND FIGURES *
+% ****************************************
+
+% Additions and adjustments for tables and figures.
+
+% Footnotes for tables are to be identified with lower case alphabetics,
+% rather than numeric. \tablenotemark and \tablenotetext commands are
+% provided analogous to \footnotemark and \footnotetext, but with the
+% identifier *required*, like \altaffilmark and \altaffiltext. The
+% \tablenotetext must be specified before the \end{table}, since
+% \end{table} displays it.
+%
+% \tablenotemark{TAG LETTER(S)}
+% \tablenotetext{ALPHA TAG}{TEXT}
+%
+% Note that TAG LETTER == ALPHA TAG for corresponding text. It is the
+% responsibility of the author to get the correspondence correct.
+%
+% The table footnotes are coupled to the table in which they occur, rather
+% than being associated with a particular page, and they are printed with
+% the table (relatively close to the caption) instead of appearing at the
+% extreme bottom of the page. This is done to ensure that the notes wind
+% up on the same page as the table, since tables are floats and can migrate
+% from one page to another. There is the additional benefit that the notes
+% are unambiguously attached to the proper table, which is what is required
+% in the event that the editorial requirement of one table only per page
+% is ever changed to permit several tables per page.
+%
+% Footnotes are NOT supported for figures.
+
+\def\tablenotemark#1{\rlap{$^{\rm #1}$}}
+
+% The \tablenotetext command buffers the table note text and the "proper"
+% tablenote formatting information in a token buffer. The tablenotes are
+% dispensed into the vertical page list by \spew@tblnotes, which is
+% executed by \end{table}. Note that certain "global" tablenote formatting
+% details are handled by \spew@tblnotes, which also clears the tblnote list.
+% Praise and honor are due to Kresten Krab Thorup (krab@iesd.auc.dk) for
+% posting ftn.sty to the Usenet, from which I drew the technique.
+
+\newtoks\@temptokenb
+\def\tblnote@list{}
+
+\def\tablenotetext#1#2{
+ \@temptokena={\vspace{.5ex}{\noindent\llap{$^{#1}$}#2}\par}
+ \@temptokenb=\expandafter{\tblnote@list}
+ \xdef\tblnote@list{\the\@temptokenb\the\@temptokena}}
+
+\def\spew@tblnotes{
+ \ifx\tblnote@list\@empty\relax
+ \else
+ \vspace{4.5ex}
+ \footnoterule
+ \vspace{.5ex}
+ {\footnotesize\tblnote@list}
+ \gdef\tblnote@list{}
+ \fi}
+
+\def\endtable{\spew@tblnotes\end@float}
+\@namedef{endtable*}{\spew@tblnotes\end@dblfloat}
+
+% Add a \tableline command for use in tabular environments. This command
+% produces the horizontal rule(s) between the column headings and the body
+% of the table. Authors are discouraged from using any \hlines themselves,
+% and are typically forbidden from using vertical rules by editors.
+
+\let\tableline=\hline
+
+% \@makecaption determines formatting for figure and table captions.
+% For manuscripts, all captions should be set as flushleft paragraphs.
+
+\long\def\@makecaption#1#2{\vskip 2ex\noindent #1 #2\par}
+
+% The \tablenum command allows the author to override all automatic
+% table marking schemes.
+%
+% \tablenum{TEXT}
+
+\def\tablenum#1{\def\thetable{#1}\let\@currentlabel\thetable
+ \addtocounter{table}{\m@ne}}
+
+% The \figurenum command allows the author to override all automatic
+% figure marking schemes.
+%
+% \figurenum{TEXT}
+
+\def\figurenum#1{\def\thefigure{#1}\let\@currentlabel\thefigure
+ \addtocounter{figure}{\m@ne}}
+
+% ****************************************
+% * PLANO TABLES *
+% ****************************************
+
+% Plano tables are camera-ready pages that are included in a typeset
+% article the same way as line drawings, graphs, and other camera-ready
+% art, i.e., as "planographic" figures. There are desirable properties
+% for a formatter to have that are somewhat above and beyond LaTeX'x
+% tabular environment that would facilitate the creation of such tables.
+% Among these are breaking long tables across pages, using footnotes
+% in a table, specifying comments and references for tables, etc.
+%
+% What follows was inspired by supertab.sty by Theo Jurriens, 1988.
+
+% Commands for identifying table elements in a consistent way. Observe
+% that the formatting is embedded in the macro definitions so that the
+% author doesn't need to be concerned about stylistic nuances.
+%
+% \tablecaption{TEXT}
+% \tablehead{TEXT}
+% \colhead{HEADING}
+% \tabletail{TEXT}
+% \tablewidth{DIMEN}
+% \tableheadfrac{NUM}
+
+\newbox\pt@box
+\newdimen\pt@width
+\newcount\pt@line
+\newcount\pt@nlines
+\newcount\pt@ncol
+
+\def\colhead#1{\omit\hidewidth{#1}\hidewidth\global\advance\pt@ncol by\@ne}
+\def\tablecaption#1{\gdef\pt@caption{#1}} \def\pt@caption{\relax}
+\def\tablehead#1{\gdef\pt@head{\hline\hline\relax\\[-1.7ex]
+ #1\hskip\tabcolsep\\[.7ex]\hline\relax\\[-1.5ex]}} \def\pt@head{\relax}
+\def\tabletail#1{\gdef\pt@tail{#1}} \def\pt@tail{\relax}
+\def\tablewidth#1{\pt@width=#1} \pt@width\textwidth
+\def\tableheadfrac#1{\gdef\pt@headfrac{#1}} \def\pt@headfrac{.1}
+
+% Calculate the number of tabular rows that will fit in the body of the
+% table. The height of the table body and the number of lines are
+% calculated thus:
+%
+% bodyheight = \textheight * (1 - \pt@headfrac)
+% \pt@nlines = bodyheight / (\arraystretch * \baselineskip)
+%
+% The row height can be seen to be valid algebraically if one examines the
+% definitions for \strutbox, \@setstrut, and \@array. I could eliminate
+% this calculation, as well as its attendant parameters, if it were possible
+% to determine the accumulated height of the \halign box as TeX goes along.
+
+\def\pt@calcnlines{\@tempdima\pt@headfrac\textheight
+ \@tempdimb\textheight\advance\@tempdimb by-\@tempdima
+ \@tempdima\arraystretch\baselineskip
+ \divide\@tempdimb by\@tempdima
+ \global\pt@nlines\@tempdimb}
+
+% Define \pt@tabular, a ripoff of \@tabular but with \leavevmode removed
+% so tabular box can be set with \setbox. I do this so that table notes
+% can be set to natural width of table, if desired. Also, set \@acol
+% to \@ptabacol, which is called when building the preamble for the
+% \halign (assuming the first column format specification is "l", which
+% it should be for ApJ tables) so that \tabskip within the table is set
+% to \fill. This permits us to toggle between natural and fixed-width
+% tables without requiring the user to change markup. Note that by
+% forcing \tabskip always to be \fill, I pretty well nullify any
+% @{\hspace} commands the user puts in the template, but this environment
+% is for people who don't want to think about that sort of stuff anyway.
+
+\def\pt@tabular{\hbox \bgroup $\let\@acol\@ptabacol
+ \let\@classz\@tabclassz
+ \let\@classiv\@tabclassiv \let\\\@tabularcr\@tabarray}
+
+\def\@ptabacol{\edef\@preamble{\@preamble \hskip \tabcolsep\tabskip\fill}}
+
+% Permit different identifying strings, one for the first page of the
+% table and one for continuation pages. LaTeX's \fnum@table is set to
+% one or the other automatically in the environment. Note that caption
+% handling is not so graceful: you have to edit inside the big macros to
+% adjust this. Someday, I will be ambitious enough to fix this.
+
+\def\fnum@ptable{Table \thetable}
+\def\fnum@ptablecont{Table \thetable---{\rm Continued}}
+
+\def\set@mkcaption{\long\def\@makecaption##1##2{
+ \center\rm##1.\quad##2\endcenter\vskip 2.5ex}}
+\def\set@mkcaptioncont{\long\def\@makecaption##1##2{
+ \center\rm##1\endcenter\vskip 2.5ex}}
+
+\newenvironment{planotable}[1]{\def\pt@format{\string#1}%
+ \set@tblnotetext\pt@ncol=0}%
+ {\crcr\noalign{\vskip .7ex}\hline\endtabular%
+ \pt@width\wd\pt@box\box\pt@box\spew@ptblnotes%
+ \typeout{Table \thetable\space has been set to width \the\pt@width}%
+ \endcenter\end@float}
+
+\def\startdata{\pt@line=0\pt@calcnlines%
+ \ifdim\pt@width>\z@\def\@halignto{to \pt@width}\else\def\@halignto{}\fi%
+ \let\fnum@table=\fnum@ptable\set@mkcaption%
+ \@float{table}\center\caption{\pt@caption}\leavevmode%
+ \setbox\pt@box=\pt@tabular{\pt@format}\pt@head}
+
+% A kludgey kind of line delimiter is needed so that the line counter
+% can be checked prior to adding the line to the alignment box. This
+% is bad because this form does not permit the addition of vertical
+% space using the [.5ex] construct; this has to be done with an explicit
+% \vskip. And a disgusting \noalign is required, so I have to create
+% another silly piece of markup to accomplish this conveniently.
+%
+% What is desired, of course, is for this line count checking to take
+% place within the syntax of the regular LaTeX \\ command. I have been
+% giving myself apoplexy trying to figure this out for the last 36 hours,
+% and I have decided I will have to wait for the onset of my "lucid
+% period" for a solution. In the meantime...
+
+\def\pt@nl{\global\advance\pt@line by\@ne%
+ \ifnum\pt@line=\pt@nlines%
+ \endtabular\box\pt@box
+ \endcenter\end@float\clearpage%
+ \addtocounter{table}{\m@ne}%
+ \let\fnum@table=\fnum@ptablecont\set@mkcaptioncont%
+ \@float{table}\center\caption{\pt@caption}\leavevmode%
+ \global\pt@ncol=0%
+ \setbox\pt@box=\pt@tabular{\pt@format}\pt@head%
+ \global\pt@line=0%
+ \else\\
+ \fi}
+
+% Author markup commands for planotable environment line breaks.
+%
+% \nl == \nextline
+% \tablevspace{DIMEN}
+% \tablebreak
+
+\let\nl=\pt@nl
+\let\nextline=\pt@nl
+
+\def\tablevspace#1{\noalign{\vskip{#1}}}
+\def\tablebreak{\pt@line\pt@nlines\advance\pt@line by\m@ne\pt@nl}
+
+% We have some specialty heads that are sometimes wanted in tables.
+%
+% \cutinhead{TEXT}
+% \sidehead{TEXT}
+
+\def\cutinhead#1{\noalign{\vskip 1.5ex}
+ \hline\pt@nl\noalign{\vskip -2.0ex}
+ \multicolumn{\pt@ncol}{c}{#1}\pt@nl
+ \noalign{\vskip .8ex}
+ \hline\pt@nl\noalign{\vskip -2ex}}
+
+\def\sidehead#1{\noalign{\vskip 1.5ex}
+ \multicolumn{\pt@ncol}{@{\hskip\z@}l}{#1}\pt@nl
+ \noalign{\vskip .5ex}}
+
+\def\set@tblnotetext{\def\tablenotetext##1##2{{%
+ \@temptokena={\vspace{0ex}{%
+ \parbox{\pt@width}{\hskip1em$^{\rm ##1}$##2}\par}}%
+ \@temptokenb=\expandafter{\tblnote@list}
+ \xdef\tblnote@list{\the\@temptokenb\the\@temptokena}}}}
+
+\def\spew@ptblnotes{
+ \ifx\tblnote@list\@empty\relax
+ \else
+ \par
+ \vspace{2ex}
+ {\tblnote@list}
+ \gdef\tblnote@list{}
+ \fi}
+
+% Special kinds of table footnotes. Sometimes authors tabulate things
+% which have corresponding references, and it may be desirable to associate
+% these references with the table rather than (or in addition to) the
+% formal reference list. Occasionally, authors wish to append a short
+% paragraph of explanatory notes that pertain to the entire table, but
+% which are different than the caption.
+%
+% \tablerefs{REFERENCE LIST}
+% \tablecomments{TEXT}
+
+\def\tablerefs#1{\@temptokena={\vspace*{3ex}{%
+ \parbox{\pt@width}{\hskip1em\rm References. --- #1}\par}}%
+ \@temptokenb=\expandafter{\tblnote@list}
+ \xdef\tblnote@list{\the\@temptokenb\the\@temptokena}}
+
+\def\tablecomments#1{\@temptokena={\vspace*{3ex}{%
+ \parbox{\pt@width}{\hskip1em\rm Note. --- #1}\par}}%
+ \@temptokenb=\expandafter{\tblnote@list}
+ \xdef\tblnote@list{\the\@temptokenb\the\@temptokena}}
+
+% Figure and table style parameters.
+
+\def\thefigure{\@arabic\c@figure}
+\def\fnum@figure{{\rm Fig.\space\thefigure.---}}
+
+\def\thetable{\@arabic\c@table}
+\def\fnum@table{{\rm Table \thetable:}}
+
+% Figure and table float positions.
+
+\def\fps@figure{bp}
+\def\fps@table{bp}
+
+% ****************************************
+% * EPS INCLUSIONS *
+% ****************************************
+
+% Include Rokicki's epsf.sty file explicitly.
+
+\@ifundefined{epsfbox}{\@input{epsf.sty}}{\relax}
+
+% Simplified EPS inclusion macros so we can see how this goes...
+% These are layered on Rokicki's dvips material, and are dependent
+% on the author's use of that DVI driver.
+%
+% \plotone{EPSFILE}
+% \plottwo{EPSFILE}{EPSFILE}
+% \plotfiddle{EPSFILE}{VSIZE}{ROT}{HSF}{VSF}{HTRANS}{VTRANS}
+%
+% \plotone inserts the plot in a space that is \columnwidth wide; the
+% plot is scaled so the horizontal dimension fits in the text width,
+% and the vertical dimension is scaled to maintain the aspect ratio.
+% \plottwo inserts two plots next to each other in one \columnwidth,
+% sort of like "two-up" mode.
+%
+% EPSFILE name of file with EPS
+%
+% The following arguments are for the \plotfiddle macro which formats
+% the \special itself, prepares vspace, etc. This completely bypasses
+% Rokicki's macros that attempt to rationalize the EPS BoundingBox with
+% the LaTeX page dimensions.
+%
+% VSIZE vertical white space to allow for plot
+% ROT rotation angle
+% HSF horiz scale factor
+% VSF vert scale factor
+% HTRANS horiz translation
+% VTRANS vert translation
+
+%\epsfverbosetrue
+
+\def\plotone#1{\centering \leavevmode
+ \epsfxsize=\columnwidth \epsfbox{#1}}
+
+\def\plottwo#1#2{\centering \leavevmode
+ \epsfxsize=.45\columnwidth \epsfbox{#1} \hfil
+ \epsfxsize=.45\columnwidth \epsfbox{#2}}
+
+\def\plotfiddle#1#2#3#4#5#6#7{\centering \leavevmode
+ \vbox to#2{\rule{0pt}{#2}}
+ \special{psfile=#1 voffset=#7 hoffset=#6 vscale=#5 hscale=#4 angle=#3}}
+
+%\@input{abbrevs.sty}
+
+% ****************************************
+% * ABBREVIATIONS *
+% ****************************************
+
+% Abbreviations for journals. The object here is to provide authors
+% with convenient shorthands for the most "popular" (often-cited)
+% journals; the author can use these markup tags without being concerned
+% about the exact form of the journal abbreviation, or its formatting.
+% It is up to the keeper of the macros to make sure the macros expand
+% to the proper text. If macro package writers agree to all use the
+% same TeX command name, authors only have to remember one thing, and
+% the style file will take care of editorial preferences. This also
+% applies when a single journal decides to revamp its abbreviating
+% scheme, as happened with the ApJ (Abt 1991).
+
+\let\jnl@style=\rm
+\def\ref@jnl#1{{\jnl@style#1}}
+
+\def\aj{\ref@jnl{AJ}} % Astronomical Journal
+\def\araa{\ref@jnl{ARA\&A}} % Annual Review of Astron and Astrophys
+\def\apj{\ref@jnl{ApJ}} % Astrophysical Journal
+\def\apjl{\ref@jnl{ApJ}} % Astrophysical Journal, Letters
+\def\apjs{\ref@jnl{ApJS}} % Astrophysical Journal, Supplement
+\def\ao{\ref@jnl{Appl.Optics}} % Applied Optics
+\def\apss{\ref@jnl{Ap\&SS}} % Astrophysics and Space Science
+\def\aap{\ref@jnl{A\&A}} % Astronomy and Astrophysics
+\def\aapr{\ref@jnl{A\&A~Rev.}} % Astronomy and Astrophysics Reviews
+\def\aaps{\ref@jnl{A\&AS}} % Astronomy and Astrophysics, Supplement
+\def\azh{\ref@jnl{AZh}} % Astronomicheskii Zhurnal
+\def\baas{\ref@jnl{BAAS}} % Bulletin of the AAS
+\def\jrasc{\ref@jnl{JRASC}} % Journal of the RAS of Canada
+\def\memras{\ref@jnl{MmRAS}} % Memoirs of the RAS
+\def\mnras{\ref@jnl{MNRAS}} % Monthly Notices of the RAS
+\def\pra{\ref@jnl{Phys.Rev.A}} % Physical Review A: General Physics
+\def\prb{\ref@jnl{Phys.Rev.B}} % Physical Review B: Solid State
+\def\prc{\ref@jnl{Phys.Rev.C}} % Physical Review C
+\def\prd{\ref@jnl{Phys.Rev.D}} % Physical Review D
+\def\prl{\ref@jnl{Phys.Rev.Lett}} % Physical Review Letters
+\def\pasp{\ref@jnl{PASP}} % Publications of the ASP
+\def\pasj{\ref@jnl{PASJ}} % Publications of the ASJ
+\def\qjras{\ref@jnl{QJRAS}} % Quarterly Journal of the RAS
+\def\skytel{\ref@jnl{S\&T}} % Sky and Telescope
+\def\solphys{\ref@jnl{Solar~Phys.}} % Solar Physics
+\def\sovast{\ref@jnl{Soviet~Ast.}} % Soviet Astronomy
+\def\ssr{\ref@jnl{Space~Sci.Rev.}} % Space Science Reviews
+\def\zap{\ref@jnl{ZAp}} % Zeitschrift fuer Astrophysik
+
+\let\astap=\aap
+\let\apjlett=\apjl
+\let\apjsupp=\apjs
+
+%\@input{misc.sty}
+
+% ****************************************
+% * MISCELLANEOUS *
+% ****************************************
+
+% Handy little things everybody works out for themselves anyway. Many
+% of these come from Springer's A&A package, and some were contributed
+% by Francois Schweizer at DTM. You can go berserk making these up,
+% especially when you start getting into the composite ones. We have
+% tried to select a tractable number that were useful, and somewhat
+% difficult to get right because fussy kerning or some such is required.
+% Most can be used in or out of math mode with impunity; \alt and \agt
+% are relations and can only be used in math mode.
+
+\def\deg{\hbox{$^\circ$}}
+\def\sun{\hbox{$\odot$}}
+\def\earth{\hbox{$\oplus$}}
+\def\lesssim{\mathrel{\hbox{\rlap{\hbox{\lower4pt\hbox{$\sim$}}}\hbox{$<$}}}}
+\def\gtrsim{\mathrel{\hbox{\rlap{\hbox{\lower4pt\hbox{$\sim$}}}\hbox{$>$}}}}
+\def\sq{\hbox{\rlap{$\sqcap$}$\sqcup$}}
+\def\arcmin{\hbox{$^\prime$}}
+\def\arcsec{\hbox{$^{\prime\prime}$}}
+\def\fd{\hbox{$.\!\!^{\rm d}$}}
+\def\fh{\hbox{$.\!\!^{\rm h}$}}
+\def\fm{\hbox{$.\!\!^{\rm m}$}}
+\def\fs{\hbox{$.\!\!^{\rm s}$}}
+\def\fdg{\hbox{$.\!\!^\circ$}}
+\def\farcm{\hbox{$.\mkern-4mu^\prime$}}
+\def\farcs{\hbox{$.\!\!^{\prime\prime}$}}
+\def\fp{\hbox{$.\!\!^{\scriptscriptstyle\rm p}$}}
+\def\micron{\hbox{$\mu$m}}
+
+\let\la=\lesssim % For Springer A&A compliance...
+\let\ga=\gtrsim
+
+% Permit author to typeset "case" fractions. This is sometimes
+% wanted in displayed equations, during which LaTeX will set fractions
+% specified as \frac{x}{y} as "built-up" fractions (numerator and
+% denominator at body text size).
+
+\def\case#1#2{\hbox{$\frac{#1}{#2}$}}
+
+% Permit author to typeset fractions set with solidus where the size
+% is reduced and the numerals are oriented diagonally. Note that this
+% is different from a "shilled" fraction, which the author can produce
+% without any special formatting markup. Define markup shorthands for
+% several common fractions using solidus.
+
+\def\slantfrac#1#2{\hbox{$\,^#1\!/_#2$}}
+\def\onehalf{\slantfrac{1}{2}}
+\def\onethird{\slantfrac{1}{3}}
+\def\twothirds{\slantfrac{2}{3}}
+\def\onequarter{\slantfrac{1}{4}}
+\def\threequarters{\slantfrac{3}{4}}
+
+\def\ubvr{\hbox{$U\!BV\!R$}} % UBVR system
+\def\ub{\hbox{$U\!-\!B$}} % U-B
+\def\bv{\hbox{$B\!-\!V$}} % B-V
+\def\vr{\hbox{$V\!-\!R$}} % V-R
+\def\ur{\hbox{$U\!-\!R$}} % U-R
+
+% Notation for atomic species (ionization levels). The ionization state
+% is specified as the second argument, and should be given as a numeral.
+% The macro has to expand the numeric state into the proper notation for
+% the publication (roman, numeric, plus signs, etc.)
+%
+% \ion{ELEMENT}{IONIZATION STATE}
+
+\def\ion#1#2{#1$\;${\small\rm\@Roman{#2}}\relax}
+
+% Centered ellipsis for use in tables (for unknown values). \nodata
+% is generalized markup for this notion: format of null-valued entries
+% in tables is style-specific.
+
+%\def\cellipsis{\hfill$\cdots$\hfill}
+\def\nodata{\multicolumn{1}{c}{$\cdots$}}
+
+% This is a generalization of the \LaTeX definition that comes in LaTeX.
+% The change here ensures that LaTeX will be typeset in the current style,
+% rather than always in roman.
+
+\newcount\lecurrentfam
+\def\LaTeX{\lecurrentfam=\the\fam \leavevmode L\raise.42ex
+ \hbox{$\fam\lecurrentfam\scriptstyle\kern-.3em A$}\kern-.15em\TeX}
+
+% ****************************************
+% * DEBUGGING *
+% ****************************************
+
+\def\sizrpt{
+ (\fontname\the\font): em=\the\fontdimen6\font, ex=\the\fontdimen5\font
+ \typeout{
+ (\fontname\the\font): em=\the\fontdimen6\font, ex=\the\fontdimen5\font
+}}
diff --git a/obsolete/macros/latex209/contrib/aasmacros/aaspp.sty b/obsolete/macros/latex209/contrib/aasmacros/aaspp.sty
new file mode 100644
index 0000000000..3d6947b642
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aasmacros/aaspp.sty
@@ -0,0 +1,415 @@
+\def\revtex@ver{3.0}
+\def\revtex@date{10 Jan 93}
+\def\revtex@org{AAS}
+\def\revtex@jnl{AAS}
+\def\revtex@genre{preprint}
+\typeout{\revtex@org\space \revtex@genre\space substyle,
+v\revtex@ver\space <\revtex@date>.}
+\def\revtex@pageid{\xdef\@thefnmark{\null}
+\@footnotetext{This \revtex@genre\space was prepared with the
+ \revtex@org\space \LaTeX\ macros v\revtex@ver.}}
+\def\genre@MS{manuscript}
+\def\genre@PP{preprint}
+\ifx\revtex@genre\genre@PP
+\ifnum\@ptsize<1
+\typeout{Warning: Undersize \revtex@genre\space font (1\@ptsize\space pts).
+ Use 11pt or 12pt documentstyle option.}
+\fi
+\fi
+\def\ps@plaintop{\let\@mkboth\@gobbletwo
+\def\@oddfoot{}\def\@oddhead{\rm\hfil--\space\thepage\space--\hfil}
+\def\@evenfoot{}\let\@evenhead\@oddhead}
+\ps@plaintop
+\pretolerance=10000
+\@rightskip=\z@ plus 4em\rightskip\@rightskip
+\textwidth=6.5in
+\textheight=8.4in
+\topmargin=0in
+\headheight=.15in
+\headsep=.35in
+\oddsidemargin=0in
+\evensidemargin=0in
+\parindent=2em
+\parskip=1.5ex
+\def\@tightleading{1.1}
+\def\@doubleleading{1.6}
+\def\baselinestretch{\@doubleleading}
+\def\tighten{\def\baselinestretch{\@tightleading}}
+\let\tightenlines=\tighten
+\def\singlespace{\def\baselinestretch{\@tightleading}\normalsize}
+\def\doublespace{\def\baselinestretch{\@doubleleading}\normalsize}
+\def\sec@upcase#1{\relax{#1}}
+\def\eqsecnum{
+\@newctr{equation}[section]
+\def\theequation{\hbox{\normalsize\arabic{section}-\arabic{equation}}}}
+\tighten
+\def\@journalname{The Astropolitical Journal}
+\def\cpr@holder{American Astronomical Society}
+\def\received#1{\gdef\@recvdate{#1}} \received{\relax}
+\def\revised#1{\gdef\@revisedate{#1}} \revised{\relax}
+\def\accepted#1{\gdef\@accptdate{#1}} \accepted{\relax}
+\def\journalid#1#2{\gdef\@jourvol{#1}\gdef\@jourdate{#2}}
+\def\articleid#1#2{\gdef\@startpage{#1}\gdef\@finishpage{#2}}
+\def\paperid#1{\gdef\@paperid{#1}} \paperid{MS-0001-SAMP}
+\def\ccc#1{\gdef\CCC@code{#1}} \ccc{000-00\$75.95-CDB}
+\def\cpright#1#2{\@nameuse{cpr@#1} \gdef\cpr@year{#2}
+\typeout{`#1' copyright \cpr@year.}}
+\newcount\@cprtype \@cprtype=\@ne
+\def\cpr@AAS{\@cprtype=1}
+\def\cpr@PD{\@cprtype=2}
+\def\cpr@Crown{\@cprtype=3}
+\def\cpr@none{\@cprtype=4}
+\def\cpr@ASP{\@cprtype=5}
+\def\cpr@year{\number\year}
+\def\@slug{\par\noindent
+\ifcase\@cprtype
+ \relax
+\or
+ Copyright \cpr@year\space by the \cpr@holder.
+\or
+ This article is in the public domain.
+\or
+ Crown copyright \cpr@year\space by the \cpr@holder.
+\or
+ No copyright is claimed for this article.
+\or
+ Copyright \cpr@year\space by the ASP.
+\fi
+\par\noindent
+Manuscript number \@paperid.\par\noindent
+\CCC@code
+}
+\def\lefthead#1{\gdef\@versohead{#1}} \lefthead{\relax}
+\def\righthead#1{\gdef\@rectohead{#1}} \righthead{\relax}
+\def\@runheads{\@tempcnta\c@page
+\@whilenum \@tempcnta >0\do{
+\vskip 3ex
+\hbox to30pc{\small\expandafter\uppercase\expandafter{\@versohead}:
+ \expandafter\uppercase\expandafter{\@rectohead}\hfil}
+\advance\@tempcnta by\m@ne}
+}
+\def\slugcomment#1{\gdef\slug@comment{#1}} \slugcomment{}
+\newdimen\@slugcmmntwidth \@slugcmmntwidth .67\textwidth
+\long\def\@makeslugcmmnt{\ifx\slug@comment\@empty\relax\else
+\setbox\@tempboxa\hbox{\slug@comment}
+\ifdim \wd\@tempboxa >\@slugcmmntwidth
+\hbox to\textwidth{\hss
+ \parbox\@slugcmmntwidth\slug@comment}
+\else
+\hbox to\textwidth{\hfil\box\@tempboxa}
+\fi
+\vskip 2ex
+\fi}
+\def\@rcvaccrule{\vrule\@width1.75in\@height0.5pt\@depth\z@}
+\def\@dates{{Received}\space%
+\if\@recvdate\relax\@rcvaccrule\else\@recvdate\fi;%
+\hspace{1.5em}{accepted}\space%
+\if\@accptdate\relax\@rcvaccrule\else\@accptdate\fi%
+}
+\def\sluginfo{{\center
+\@dates
+
+
+\endcenter}}
+\let\dates=\sluginfo
+\def\abstract{
+\begin{center}
+{\bf{ABSTRACT}}
+\end{center}
+\quotation
+}
+\def\title#1{\@makeslugcmmnt{\center\large\bf{#1}\endcenter}
+\thispagestyle{empty}}
+\def\author#1{{\topsep\z@\center\normalsize#1\endcenter}}
+\let\authoraddr=\@gobble
+\def\affil#1{\vspace*{-2.5ex}{\topsep\z@\center#1\endcenter}}
+\def\altaffilmark#1{$^{#1}$}
+\def\altaffiltext#1#2{\footnotetext[#1]{#2}\stepcounter{footnote}}
+\def\and{\vspace*{-0.5ex}{\topsep\z@\center and\endcenter}}
+\def\@keywordtext{Subject headings}
+\def\@keyworddelim{---}
+\def\keywords#1{\vspace*{-.7ex}
+\if@twocolumn\noindent{{\it\@keywordtext:\/}\space\@kwds{#1}}
+\else{\quote{\it\@keywordtext:\/}\space\@kwds{#1}\endquote}
+\fi}
+\let\subjectheadings=\keywords
+\def\@kwds#1{#1\relax}
+\skip\footins 4ex plus 1ex minus .5ex
+\footnotesep 3ex
+\newif\if@firstsection \@firstsectiontrue
+\def\section{\if@firstsection
+\@firstsectionfalse\fi
+\@startsection {section}{1}{\z@}
+{5ex plus .5ex}{1ex plus .2ex}{\normalsize\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}
+{5ex plus .5ex}{1ex plus .2ex}{\normalsize\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}
+{5ex plus .5ex}{1ex plus .2ex}{\normalsize\it}}
+\def\thesection{\@arabic{\c@section}.}
+\def\thesubsection{\thesection\@arabic{\c@subsection}.}
+\def\thesubsubsection{\thesubsection\@arabic{\c@subsubsection}.}
+\def\theparagraph{\thesubsubsection\@arabic{\c@paragraph}:}
+\def\acknowledgments{\vskip 3ex plus .8ex minus .4ex}
+\let\acknowledgements=\acknowledgments
+\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
+\def\@svsec{}\else
+\refstepcounter{#1}\edef\@svsec{\csname the#1\endcsname\hskip 1em }\fi
+\@tempskipa #5\relax
+\ifdim \@tempskipa>\z@
+\begingroup \center#6\relax
+\@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M
+ \sec@upcase{#8}\par}%
+\endcenter\endgroup
+\csname #1mark\endcsname{#7}\addcontentsline
+{toc}{#1}{\ifnum #2>\c@secnumdepth \else
+\protect\numberline{\csname the#1\endcsname}\fi
+#7}\else
+\def\@svsechd{#6\hskip #3\@svsec \sec@upcase{#8}\csname #1mark\endcsname
+{#7}\addcontentsline
+{toc}{#1}{\ifnum #2>\c@secnumdepth \else
+\protect\numberline{\csname the#1\endcsname}\fi
+#7}}\fi
+\@xsect{#5}}
+\def\@ssect#1#2#3#4#5{\@tempskipa #3\relax
+\ifdim \@tempskipa>\z@
+\begingroup #4\center\@hangfrom{\hskip #1}{\interlinepenalty \@M
+\sec@upcase{#5}\par}\endcenter\endgroup
+\else \def\@svsechd{#4\hskip #1\relax \sec@upcase{#5}}\fi
+\@xsect{#3}}
+\def\appendix{\par
+\setcounter{section}{0}
+\setcounter{subsection}{0}
+\setcounter{equation}{0}
+\def\thesection{\Alph{section}.}
+\def\theequation{\hbox{\normalsize\Alph{section}\arabic{equation}}}}
+\newcounter{cureqno}
+\newenvironment{mathletters}{\refstepcounter{equation}%
+\setcounter{cureqno}{\value{equation}}%
+\let\@curtheeqn\theequation%
+\edef\cur@eqn{\csname theequation\endcsname}%
+\def\theequation{\cur@eqn\alph{equation}}%
+\setcounter{equation}{0}}%
+{\let\theequation\@curtheeqn%
+\setcounter{equation}{\value{cureqno}}}
+\def\eqnum#1{\def\theequation{#1}\let\@currentlabel\theequation
+\addtocounter{equation}{\m@ne}}
+\def\references{\subsection*{REFERENCES}
+\bgroup\parindent=\z@\parskip=\itemsep
+\def\refpar{\par\hangindent=3em\hangafter=1}}
+\def\endreferences{\refpar\egroup\revtex@pageid}
+\def\thebibliography{\subsection*{REFERENCES}
+\list{\null}{\leftmargin 3em\labelwidth\z@\labelsep\z@\itemindent -3em
+\usecounter{enumi}}
+\def\refpar{\relax}
+\def\newblock{\hskip .11em plus .33em minus .07em}
+\sloppy\clubpenalty4000\widowpenalty4000
+\sfcode`\.=1000\relax}
+\def\endthebibliography{\endlist\revtex@pageid}
+\def\@biblabel#1{\relax}
+\def\@cite#1#2{#1\if@tempswa , #2\fi}
+\def\reference{\relax\refpar}
+\def\markcite#1{#1\relax}
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+\def\@citea{}\@cite{\@for\@citeb:=#2\do
+{\@citea\def\@citea{,\penalty\@m\ }\@ifundefined
+{b@\@citeb}{\@warning
+{Citation `\@citeb' on page \thepage \space undefined}}%
+{\csname b@\@citeb\endcsname}}}{#1}}
+\def\tablenotemark#1{\rlap{$^{\rm #1}$}}
+\newtoks\@temptokenb
+\def\tblnote@list{}
+\def\tablenotetext#1#2{
+\@temptokena={\vspace{.5ex}{\noindent\llap{$^{#1}$}#2}\par}
+\@temptokenb=\expandafter{\tblnote@list}
+\xdef\tblnote@list{\the\@temptokenb\the\@temptokena}}
+\def\spew@tblnotes{
+\ifx\tblnote@list\@empty\relax
+\else
+\vspace{4.5ex}
+\footnoterule
+\vspace{.5ex}
+{\footnotesize\tblnote@list}
+\gdef\tblnote@list{}
+\fi}
+\def\endtable{\spew@tblnotes\end@float}
+\@namedef{endtable*}{\spew@tblnotes\end@dblfloat}
+\let\tableline=\hline
+\long\def\@makecaption#1#2{\vskip 2ex\noindent #1 #2\par}
+\def\tablenum#1{\def\thetable{#1}\let\@currentlabel\thetable
+\addtocounter{table}{\m@ne}}
+\def\figurenum#1{\def\thefigure{#1}\let\@currentlabel\thefigure
+\addtocounter{figure}{\m@ne}}
+\newbox\pt@box
+\newdimen\pt@width
+\newcount\pt@line
+\newcount\pt@nlines
+\newcount\pt@ncol
+\def\colhead#1{\omit\hidewidth{#1}\hidewidth\global\advance\pt@ncol by\@ne}
+\def\tablecaption#1{\gdef\pt@caption{#1}} \def\pt@caption{\relax}
+\def\tablehead#1{\gdef\pt@head{\hline\hline\relax\\[-1.7ex]
+#1\hskip\tabcolsep\\[.7ex]\hline\relax\\[-1.5ex]}} \def\pt@head{\relax}
+\def\tabletail#1{\gdef\pt@tail{#1}} \def\pt@tail{\relax}
+\def\tablewidth#1{\pt@width=#1} \pt@width\textwidth
+\def\tableheadfrac#1{\gdef\pt@headfrac{#1}} \def\pt@headfrac{.1}
+\def\pt@calcnlines{\@tempdima\pt@headfrac\textheight
+\@tempdimb\textheight\advance\@tempdimb by-\@tempdima
+\@tempdima\arraystretch\baselineskip
+\divide\@tempdimb by\@tempdima
+\global\pt@nlines\@tempdimb}
+\def\pt@tabular{\hbox \bgroup $\let\@acol\@ptabacol
+\let\@classz\@tabclassz
+\let\@classiv\@tabclassiv \let\\\@tabularcr\@tabarray}
+\def\@ptabacol{\edef\@preamble{\@preamble \hskip \tabcolsep\tabskip\fill}}
+\def\fnum@ptable{Table \thetable}
+\def\fnum@ptablecont{Table \thetable---{\rm Continued}}
+\def\set@mkcaption{\long\def\@makecaption##1##2{
+\center\rm##1.\quad##2\endcenter\vskip 2.5ex}}
+\def\set@mkcaptioncont{\long\def\@makecaption##1##2{
+\center\rm##1\endcenter\vskip 2.5ex}}
+\newenvironment{planotable}[1]{\def\pt@format{\string#1}%
+\set@tblnotetext\pt@ncol=0}%
+{\crcr\noalign{\vskip .7ex}\hline\endtabular%
+\pt@width\wd\pt@box\box\pt@box\spew@ptblnotes%
+\typeout{Table \thetable\space has been set to width \the\pt@width}%
+\endcenter\end@float}
+\def\startdata{\pt@line=0\pt@calcnlines%
+\ifdim\pt@width>\z@\def\@halignto{to \pt@width}\else\def\@halignto{}\fi%
+\let\fnum@table=\fnum@ptable\set@mkcaption%
+\@float{table}\center\caption{\pt@caption}\leavevmode%
+\setbox\pt@box=\pt@tabular{\pt@format}\pt@head}
+\def\pt@nl{\global\advance\pt@line by\@ne%
+\ifnum\pt@line=\pt@nlines%
+\endtabular\box\pt@box
+\endcenter\end@float\clearpage%
+\addtocounter{table}{\m@ne}%
+\let\fnum@table=\fnum@ptablecont\set@mkcaptioncont%
+\@float{table}\center\caption{\pt@caption}\leavevmode%
+\global\pt@ncol=0%
+\setbox\pt@box=\pt@tabular{\pt@format}\pt@head%
+\global\pt@line=0%
+\else\\
+\fi}
+\let\nl=\pt@nl
+\let\nextline=\pt@nl
+\def\tablevspace#1{\noalign{\vskip{#1}}}
+\def\tablebreak{\pt@line\pt@nlines\advance\pt@line by\m@ne\pt@nl}
+\def\cutinhead#1{\noalign{\vskip 1.5ex}
+\hline\pt@nl\noalign{\vskip -2.0ex}
+\multicolumn{\pt@ncol}{c}{#1}\pt@nl
+\noalign{\vskip .8ex}
+\hline\pt@nl\noalign{\vskip -2ex}}
+\def\sidehead#1{\noalign{\vskip 1.5ex}
+\multicolumn{\pt@ncol}{@{\hskip\z@}l}{#1}\pt@nl
+\noalign{\vskip .5ex}}
+\def\set@tblnotetext{\def\tablenotetext##1##2{{%
+\@temptokena={\vspace{0ex}{%
+\parbox{\pt@width}{\hskip1em$^{\rm ##1}$##2}\par}}%
+\@temptokenb=\expandafter{\tblnote@list}
+\xdef\tblnote@list{\the\@temptokenb\the\@temptokena}}}}
+\def\spew@ptblnotes{
+\ifx\tblnote@list\@empty\relax
+\else
+\par
+\vspace{2ex}
+{\tblnote@list}
+\gdef\tblnote@list{}
+\fi}
+\def\tablerefs#1{\@temptokena={\vspace*{3ex}{%
+\parbox{\pt@width}{\hskip1em\rm References. --- #1}\par}}%
+\@temptokenb=\expandafter{\tblnote@list}
+\xdef\tblnote@list{\the\@temptokenb\the\@temptokena}}
+\def\tablecomments#1{\@temptokena={\vspace*{3ex}{%
+\parbox{\pt@width}{\hskip1em\rm Note. --- #1}\par}}%
+\@temptokenb=\expandafter{\tblnote@list}
+\xdef\tblnote@list{\the\@temptokenb\the\@temptokena}}
+\def\thefigure{\@arabic\c@figure}
+\def\fnum@figure{{\rm Fig.\space\thefigure.---}}
+\def\thetable{\@arabic\c@table}
+\def\fnum@table{{\rm Table \thetable:}}
+\def\fps@figure{bp}
+\def\fps@table{bp}
+\@ifundefined{epsfbox}{\@input{epsf.sty}}{\relax}
+\def\plotone#1{\centering \leavevmode
+\epsfxsize=\columnwidth \epsfbox{#1}}
+\def\plottwo#1#2{\centering \leavevmode
+\epsfxsize=.45\columnwidth \epsfbox{#1} \hfil
+\epsfxsize=.45\columnwidth \epsfbox{#2}}
+\def\plotfiddle#1#2#3#4#5#6#7{\centering \leavevmode
+\vbox to#2{\rule{0pt}{#2}}
+\special{psfile=#1 voffset=#7 hoffset=#6 vscale=#5 hscale=#4 angle=#3}}
+\let\jnl@style=\rm
+\def\ref@jnl#1{{\jnl@style#1}}
+\def\aj{\ref@jnl{AJ}}
+\def\araa{\ref@jnl{ARA\&A}}
+\def\apj{\ref@jnl{ApJ}}
+\def\apjl{\ref@jnl{ApJ}}
+\def\apjs{\ref@jnl{ApJS}}
+\def\ao{\ref@jnl{Appl.Optics}}
+\def\apss{\ref@jnl{Ap\&SS}}
+\def\aap{\ref@jnl{A\&A}}
+\def\aapr{\ref@jnl{A\&A~Rev.}}
+\def\aaps{\ref@jnl{A\&AS}}
+\def\azh{\ref@jnl{AZh}}
+\def\baas{\ref@jnl{BAAS}}
+\def\jrasc{\ref@jnl{JRASC}}
+\def\memras{\ref@jnl{MmRAS}}
+\def\mnras{\ref@jnl{MNRAS}}
+\def\pra{\ref@jnl{Phys.Rev.A}}
+\def\prb{\ref@jnl{Phys.Rev.B}}
+\def\prc{\ref@jnl{Phys.Rev.C}}
+\def\prd{\ref@jnl{Phys.Rev.D}}
+\def\prl{\ref@jnl{Phys.Rev.Lett}}
+\def\pasp{\ref@jnl{PASP}}
+\def\pasj{\ref@jnl{PASJ}}
+\def\qjras{\ref@jnl{QJRAS}}
+\def\skytel{\ref@jnl{S\&T}}
+\def\solphys{\ref@jnl{Solar~Phys.}}
+\def\sovast{\ref@jnl{Soviet~Ast.}}
+\def\ssr{\ref@jnl{Space~Sci.Rev.}}
+\def\zap{\ref@jnl{ZAp}}
+\let\astap=\aap
+\let\apjlett=\apjl
+\let\apjsupp=\apjs
+\def\deg{\hbox{$^\circ$}}
+\def\sun{\hbox{$\odot$}}
+\def\earth{\hbox{$\oplus$}}
+\def\lesssim{\mathrel{\hbox{\rlap{\hbox{\lower4pt\hbox{$\sim$}}}\hbox{$<$}}}}
+\def\gtrsim{\mathrel{\hbox{\rlap{\hbox{\lower4pt\hbox{$\sim$}}}\hbox{$>$}}}}
+\def\sq{\hbox{\rlap{$\sqcap$}$\sqcup$}}
+\def\arcmin{\hbox{$^\prime$}}
+\def\arcsec{\hbox{$^{\prime\prime}$}}
+\def\fd{\hbox{$.\!\!^{\rm d}$}}
+\def\fh{\hbox{$.\!\!^{\rm h}$}}
+\def\fm{\hbox{$.\!\!^{\rm m}$}}
+\def\fs{\hbox{$.\!\!^{\rm s}$}}
+\def\fdg{\hbox{$.\!\!^\circ$}}
+\def\farcm{\hbox{$.\mkern-4mu^\prime$}}
+\def\farcs{\hbox{$.\!\!^{\prime\prime}$}}
+\def\fp{\hbox{$.\!\!^{\scriptscriptstyle\rm p}$}}
+\def\micron{\hbox{$\mu$m}}
+\let\la=\lesssim
+\let\ga=\gtrsim
+\def\case#1#2{\hbox{$\frac{#1}{#2}$}}
+
+
+\def\slantfrac#1#2{\hbox{$\,^#1\!/_#2$}}
+\def\onehalf{\slantfrac{1}{2}}
+\def\onethird{\slantfrac{1}{3}}
+\def\twothirds{\slantfrac{2}{3}}
+\def\onequarter{\slantfrac{1}{4}}
+\def\threequarters{\slantfrac{3}{4}}
+\def\ubvr{\hbox{$U\!BV\!R$}}
+\def\ub{\hbox{$U\!-\!B$}}
+\def\bv{\hbox{$B\!-\!V$}}
+\def\vr{\hbox{$V\!-\!R$}}
+\def\ur{\hbox{$U\!-\!R$}}
+\def\ion#1#2{#1$\;${\small\rm\@Roman{#2}}\relax}
+\def\nodata{\multicolumn{1}{c}{$\cdots$}}
+\newcount\lecurrentfam
+\def\LaTeX{\lecurrentfam=\the\fam \leavevmode L\raise.42ex
+\hbox{$\fam\lecurrentfam\scriptstyle\kern-.3em A$}\kern-.15em\TeX}
+\def\sizrpt{
+(\fontname\the\font): em=\the\fontdimen6\font, ex=\the\fontdimen5\font
+\typeout{
+(\fontname\the\font): em=\the\fontdimen6\font, ex=\the\fontdimen5\font
+}}
diff --git a/obsolete/macros/latex209/contrib/aasmacros/aaspptwo.doc b/obsolete/macros/latex209/contrib/aasmacros/aaspptwo.doc
new file mode 100644
index 0000000000..e2ea89ab39
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aasmacros/aaspptwo.doc
@@ -0,0 +1,1165 @@
+% AASPPTWO.STY -- AAS two-column preprint substyle definition for LaTeX.
+
+% My convention for identifying configuration information is for styles
+% to define the five parameters below.
+
+\def\revtex@ver{3.0} % Version number of this file.
+\def\revtex@date{10 Jan 93} % Revision date.
+\def\revtex@org{AAS} % Sponsoring organization.
+\def\revtex@jnl{AAS} % Applicable journal, if specific.
+\def\revtex@genre{2-column preprint} % Document "type".
+
+% Display identifying message on screen and in logfile.
+
+\typeout{\revtex@org\space \revtex@genre\space substyle,
+ v\revtex@ver\space <\revtex@date>.}
+
+% The following mini-colophon identifies the article are having been
+% prepared with this macro package. The \revtex@pageid command only
+% defines the formatting of this colophon; its existence and placement
+% within the printed article is controlled by the use of this command
+% in the style file.
+
+\def\revtex@pageid{\xdef\@thefnmark{\null}
+ \@footnotetext{This \revtex@genre\space was prepared with the
+ \revtex@org\space \LaTeX\ macros v\revtex@ver.}}
+
+% Issue a warning if manuscripts are formatted with type smaller than 12pt.
+
+\def\genre@MS{manuscript}
+\def\genre@PP{preprint}
+\ifx\revtex@genre\genre@MS
+ \ifnum\@ptsize<2
+ \typeout{Warning: Undersize \revtex@genre\space font (1\@ptsize\space pts).
+ Use 12pt documentstyle option.}
+ \fi
+\fi
+
+% ****************************************
+% * PAGE LAYOUT *
+% ****************************************
+
+% Create "plaintop" page style that has folios at top of page.
+
+\def\ps@plaintop{\let\@mkboth\@gobbletwo
+ \def\@oddfoot{}\def\@oddhead{\rm\hfil--\space\thepage\space--\hfil}
+ \def\@evenfoot{}\let\@evenhead\@oddhead}
+
+\ps@plain % Use "plain" pagestyle by default.
+
+% Page size, spacing parameters, etc.
+
+\textwidth=6.9in
+\textheight=8.4in
+\topmargin=0in
+\headheight=.15in
+\headsep=.35in
+\oddsidemargin=0in
+\evensidemargin=0in
+\parindent=1.2em
+\parskip=0.5ex
+\columnsep=0.5in
+
+\hoffset=-0.2in % To compensate for wide \textwidth
+\tolerance=600 % 3x "normal" value; cuts down on overfull complaints
+
+%\@input{styopts.sty}
+
+% ****************************************
+% * STYLE OPTIONS *
+% ****************************************
+
+% It is not the objective of the AASTeX project to develop LaTeX styles
+% that produce pages that mimic the appearance of specific AAS journals.
+% However, it would be nice to offer format options within the preprint
+% styles so that output format can be changed. (Within the "manuscript"
+% style, \tighten is available, and this effectively turns off the double-
+% spacing.) The primary motivation behind this idea is to provide some
+% definitions that permit institutions to distribute "pretty" preprints
+% with this package. (Of course, I make the glaring assumption that I
+% can determine what someone else will think is pretty.)
+%
+% This style has the principle function of setting up two-column output.
+% Although it should be painfully obvious, it is important to remember
+% that text lines are considerably shorter when two of them are typeset
+% side by side on a page. Long equations, wide tables and figures, and
+% the like, may not slide into this format without some adjustments.
+% It is our opinion that great effort to adapt copy and markup for
+% two-column pages is counterproductive; remember that the main goals
+% of this package are to enable comprehensive tagging of the article
+% and, secondarily, to produce "correct" draft (or referee) format pages.
+%
+% I elect not to impose a format for the front matter, although I feel
+% it looks best if the title, author, abstract, and keyword material is
+% typeset on its own page at full text width. The author may supply the
+% \twocolumn command wherever desired, and, for that matter, is free to
+% switch between \onecolumn and \twocolumn modes. (This is bad form.)
+%
+% \twocolumn Enter two-column format
+%
+% Note that the two-column format begins at the point \twocolumn appears
+% in the text, and if that point is before the front-matter, that stuff
+% gets typeset in two-column mode along with the rest of it. For purposes
+% of producing "pretty" output, it is probably desirable to put this command
+% after the abstract and keywords, just before the body of the paper.
+% If the command is not specified explicitly, the first \section command
+% will initiate the two-column format.
+
+% Make footnotes same size as main text.
+
+%\let\footnotesize=\normalsize
+
+% Define parameters to adjust the baselineskip.
+% These are passed as the scale factor argument to \baselinestretch.
+
+\def\@tightleading{1.1}
+\def\@doubleleading{1.6}
+
+% Double-space by default. Observe that you double-space in LaTeX by
+% resetting \baselinestretch, which is essentially a scale factor for
+% \baselineskip (= leading, for you typographophiles). The style uses
+% the \@doubleleading factor, defined above.
+
+%\def\baselinestretch{\@doubleleading}
+
+% The \tighten command merely resets the \baselinestretch to a
+% smaller factor, resulting in single-column text that is more closely
+% spaced. (This will always work.) Tightening the vertical spacing
+% in the text results in output that is more attractive for distribution
+% to colleagues who are primarily interested in reading the paper, as
+% opposed to copy editing it. Double-spaced output for referees and
+% copy editors is, however, the main objective of this style, hence
+% double-spacing occurs by default. The same effect as \tighten
+% can be achieved by using the "tighten" document style option.
+%
+% \tighten
+%
+% \tighten is intended for use in the preamble of the article.
+
+\let\tighten=\relax
+\let\tightenlines=\tighten
+
+% For authors who feel compelled to change between single and double
+% spacing in the manuscript, \singlespace and \doublespace commands
+% are provided. (Following recommendations of AAS Publications Board
+% Subcommittee on Preprints.)
+%
+% \singlespace
+% \doublespace
+
+\let\singlespace=\relax
+\let\doublespace=\relax
+
+% Upper case for sections (optional upper case items). These are created
+% so that some headings can be toggled between mixed case and upper case
+% readily. Headings that might be changed can be wrapped in the style
+% file in \sec@upcase{TEXT} constructs; the expansion of \sec@upcase is
+% controlled here. It is `\relax' by default (mixed case heads), and can
+% easily be changed to `\uppercase' if desired. If mixed case headings
+% are wanted by the editor, authors MUST supply mixed case text, although
+% this is what authors should be doing anyway. (Mixed can be converted
+% to upper, but the reverse transformation cannot be automated.)
+
+%\def\sec@upcase#1{\uppercase{#1}}
+\def\sec@upcase#1{\relax{#1}}
+
+% Sometimes people want to number equations by section, rather than
+% sequentially through the whole paper.
+
+\def\eqsecnum{
+ \@newctr{equation}[section]
+ \def\theequation{\hbox{\normalsize\arabic{section}-\arabic{equation}}}}
+
+%\@input{slug.sty}
+
+% ****************************************
+% * SLUG LINE *
+% ****************************************
+
+% There are some obvious style-dependent parameters and formatting
+% instructions in this file. The object has been to keep the author
+% commands (the user interface, if you will) society, journal, and
+% style-independent, while the style-specific parameters and commands
+% are kept below that level. Commands and parameters that are susceptible
+% to external interpretation, either by authors or publishers/translators,
+% are identified by indented comment lines, with the semantics of command
+% arguments described in upper case text.
+%
+% \@journalname{JOURNAL NAME}
+% \cpr@holder{COPYRIGHT HOLDER}
+
+\def\@journalname{The Astropolitical Journal}
+\def\cpr@holder{American Astronomical Society}
+
+% Journal and article identification information is established by the
+% editorial staff. The following macros are used by personnel at the
+% editorial office to annotate/record slug-line data and should be included
+% in the manuscript preamble, i.e., before the LaTeX \begin{document}. All
+% they do is globally define other TeX control sequences that are used by
+% other macros at a later time.
+%
+% \received{RECEIPT DATE}
+% \revised{REVISION DATE}
+% \accepted{ACCEPTANCE DATE}
+% \journalid{VOL}{JOURNAL DATE}
+% \articleid{START PAGE}{END PAGE}
+% \paperid{ID}
+% \ccc{CODE}
+%
+% For preprints and submitted manuscripts in draft/referee format, etc.,
+% the slug-line information is irrelevant and in those kinds of style,
+% the data are never used. In my estimation, it is perfectly acceptable
+% to have these commands in the file (for future use), so they are defined
+% in the usual way.
+
+\def\received#1{\gdef\@recvdate{#1}} \received{\relax}
+\def\revised#1{\gdef\@revisedate{#1}} \revised{\relax}
+\def\accepted#1{\gdef\@accptdate{#1}} \accepted{\relax}
+\def\journalid#1#2{\gdef\@jourvol{#1}\gdef\@jourdate{#2}}
+\def\articleid#1#2{\gdef\@startpage{#1}\gdef\@finishpage{#2}}
+\def\paperid#1{\gdef\@paperid{#1}} \paperid{MS-0001-SAMP}
+\def\ccc#1{\gdef\CCC@code{#1}} \ccc{000-00\$75.95-CDB}
+
+% Following copyright and running heads \defs are stubs.
+%\let\cpright=\@gobbletwo
+%\let\righthead=\@gobble
+%\let\lefthead=\@gobble
+
+% Copyright data. Permit the author/editor to supply a copyright
+% "type" as well as the year.
+%
+% \cpright{TYPE}{YEAR}
+%
+% Copyright types are designated by name and converted to numeric form.
+% The mapping of types is defined by the code that sets the @cprtype
+% counter. The language of the copyright notices is defined by \@slug.
+
+\def\cpright#1#2{\@nameuse{cpr@#1} \gdef\cpr@year{#2}
+ \typeout{`#1' copyright \cpr@year.}}
+
+\newcount\@cprtype \@cprtype=\@ne % Default copyright type.
+\def\cpr@AAS{\@cprtype=1}
+\def\cpr@PD{\@cprtype=2}
+\def\cpr@Crown{\@cprtype=3}
+\def\cpr@none{\@cprtype=4}
+\def\cpr@ASP{\@cprtype=5}
+
+\def\cpr@year{\number\year} % Default copyright year.
+
+% \@slug determines formatting of slugline information.
+% ATTN: Check with AAS/AIP/UCP about exact wording of these.
+
+\def\@slug{\par\noindent
+ \ifcase\@cprtype
+ \relax
+ \or
+ Copyright \cpr@year\space by the \cpr@holder.
+ \or
+ This article is in the public domain.
+ \or
+ Crown copyright \cpr@year\space by the \cpr@holder.
+ \or
+ No copyright is claimed for this article.
+ \or
+ Copyright \cpr@year\space by the ASP.
+ \fi
+ \par\noindent
+ Manuscript number \@paperid.\par\noindent
+ \CCC@code
+}
+
+% Authors may be asked to supply running head information. We use the
+% language of the publisher here to distinguish between two pieces of
+% information: the left head frequently contains an author list (last
+% names, possibly truncated as et al.), while the right head frequently
+% contains an abbreviated form of the paper title. The \lefthead and
+% \righthead commands merely collect the information and buffer the text.
+%
+% \lefthead{TEXT}
+% \righthead{TEXT}
+%
+% For the ApJ, right heads are the short titles, and the publisher would
+% like for the author to specify a 44-character or less abbreviated title
+% to use as the running head on right pages.
+
+\def\lefthead#1{\gdef\@versohead{#1}} \lefthead{\relax}
+\def\righthead#1{\gdef\@rectohead{#1}} \righthead{\relax}
+
+% \@runheads determines formatting of running head information.
+
+\def\@runheads{\@tempcnta\c@page
+ \@whilenum \@tempcnta >0\do{
+ \vskip 3ex
+ \hbox to30pc{\small\expandafter\uppercase\expandafter{\@versohead}:
+ \expandafter\uppercase\expandafter{\@rectohead}\hfil}
+ \advance\@tempcnta by\m@ne}
+}
+
+% The \slugcomment command is provided so authors or editors may include
+% a remark about the manuscript that may be desired in print for some
+% styles. For instance, authors like to include information about the
+% journal and publication date of accepted papers ("To appear in AJ,
+% November 1992").
+%
+% \slugcomment{TEXT}
+%
+% The formatting of the \slugcomment information is controlled by the
+% \@makeslugcmmnt command and its placement on the page is dictated
+% by the presence of \@makeslugcmmnt in \sluginfo (or whatever).
+
+\def\slugcomment#1{\gdef\slug@comment{#1}} \slugcomment{}
+
+% For PP style, slug comments are set flushright at the top of the title
+% page in a parbox of 2/3 the textwidth.
+
+\newdimen\@slugcmmntwidth \@slugcmmntwidth .67\textwidth
+\long\def\@makeslugcmmnt{\ifx\slug@comment\@empty\relax\else
+ \setbox\@tempboxa\hbox{\slug@comment}
+ \ifdim \wd\@tempboxa >\@slugcmmntwidth
+ \hbox to\textwidth{\hss
+ \parbox\@slugcmmntwidth\slug@comment}
+ \else
+ \hbox to\textwidth{\hfil\box\@tempboxa}
+ \fi
+ \vskip 2ex
+\fi}
+
+% Editorial offices like to have receipt and acceptance dates on the front
+% page for tracking purposes. The current practice is to require the author
+% to type Received __________________ and Accepted ________________ lines
+% for the staff to type on. The \@dates command will typeset either rules
+% or the dates specified in \received and/or \accepted commands. Note that
+% authors should not include \received and \accepted.
+
+\def\@rcvaccrule{\vrule\@width1.75in\@height0.5pt\@depth\z@}
+
+% \@dates determines formatting of MS date information.
+
+\def\@dates{{\center\if@twocolumn\small\else\normalsize\fi%
+ {\it Received}\space%
+ \if\@recvdate\relax\@rcvaccrule\else\@recvdate\fi;%
+ \if@twocolumn\\[.5ex]\else\hspace{1.5em}\fi%
+ {\it accepted}\space%
+ \if\@accptdate\relax\@rcvaccrule\else\@accptdate\fi%
+ \endcenter}
+}
+
+% The \sluginfo command is executed automatically when a \begin{abstract} is
+% encountered, so it is not necessary (or appropriate) for the author to
+% include this line explicitly. The received/accepted business is a
+% concern only for the editorial staff, hence we have arranged for the
+% author not to have to fuss with it.
+
+\def\sluginfo{{\center
+ \@dates
+ %\@slug
+ %\@runheads
+ \endcenter}}
+
+\let\dates=\sluginfo % Backwards compatibility
+
+%\@input{text.sty}
+
+% ****************************************
+% * FRONT MATTER *
+% ****************************************
+
+% Make adjustments to LaTeX abstract style: optional upper case heading,
+% bump size up in single column mode. This is a two-column style by
+% default, and I presume most of the text will be set at 10pt. However,
+% one-column front matter should be set larger.
+
+\def\abstract{\if@twocolumn
+ \section*{Abstract}
+ \else \large \vspace{3em}
+ \begin{center}
+ {\bf{ABSTRACT}\vspace{-.5em}\vspace{0pt}}
+ \end{center}
+ \quotation
+\fi}
+
+% Title and author identification is by way of standard LaTeX commands
+% \title and \author, although the macros themselves are rather different.
+% The information is typeset by these macros in this style, rather than
+% being buffered as per regular LaTeX. The authors' principal affiliation
+% is specified with a separate macro \affil. Each \author command should
+% be followed by its own \affil (or address).
+%
+% Authors often have affiliations above and beyond their main employer,
+% and these are specified with the \altaffilmark and \altaffiltext commands.
+% These commands behave like the \footnotemark and \footnotetext commands
+% of LaTeX. \altaffilmark is appended to author's names in the \author
+% lists, and generates the superscript identification numbers.
+% The text for the individual alternate affiliations is generated by the
+% \altaffiltext command. It is up to the author to make sure that the
+% \altaffilmark numbers attached to authors' names correspond to the correct
+% alternate affiliation.
+%
+% \title{LUCID TEXT}
+% \author{NAME(S)}
+% \authoraddr{AUTHOR'S POSTAL ADDRESS}
+% \affil{AFFILIATION}
+% \altaffilmark{TAG NUMBER(S)}
+% \altaffiltext{NUMERICAL TAG}{TEXT}
+%
+% The typesetting performed by these commands is appropriate for the top of
+% the first text page of the manuscript. They could as well be used on a
+% title cover page, but vertical placement would have to be controlled by
+% the author. This is not to be encouraged, since I want to discourage
+% the introduction of any extra horizontal or vertical space.
+
+\def\title#1{{\center\if@twocolumn\large\else\Large\fi\bf#1\endcenter}}
+\def\author#1{{\topsep 0pt\center
+ \if@twocolumn\normalsize\else\vspace{4ex}\large\fi#1\endcenter}}
+\let\authoraddr=\@gobble
+\def\affil#1{\vspace*{-0.8ex}{\topsep 0pt\center
+ \if@twocolumn\small\else\normalsize\fi\it#1\endcenter}}
+\def\altaffilmark#1{$^{#1}$}
+\def\altaffiltext#1#2{\footnotetext[#1]{#2}}
+
+% Redefine the LaTeX \and command for this style.
+
+\def\and{\vspace*{-0.5ex}{\topsep\z@\center and\endcenter}}
+
+% ****************************************
+% * KEYWORDS *
+% ****************************************
+
+% Keywords environment. Keywords, subject headings, etc., are accommodated
+% only as a piece of text; the \keywords command indents if necessary and
+% supplies the proper leading text ("Keywords:", "Subject headings:", etc.)
+% but does not apply formatting to the user's keyword text. The author
+% must supply the correct punctuation according to the journal style.
+%
+% Note that the editors of A&A, ApJ, and MNRAS have discussed the issue
+% of keywords, and there is disagreement about whether "subject headings"
+% or "keywords" should appear after abstracts in astronomical papers.
+% It does not really matter what the macro is called, so I will stick
+% to \keywords since I don't know what the difference is anyway.
+
+\def\@keywordtext{Subject headings}
+\def\@keyworddelim{---}
+
+\def\keywords#1{\vspace*{-.7ex}%\vspace{0pt}
+ \if@twocolumn\noindent{\small{\it\@keywordtext:\/}\space\@kwds{#1}}
+ \else{\quote\if@twocolumn\small\else\large\fi
+ {\it\@keywordtext:\/}\space\@kwds{#1}\endquote}
+ \fi}
+
+\let\subjectheadings=\keywords
+
+% It might be possible to handle keywords and their punctuation more
+% automatically at some stage, but at the moment using this looping
+% construct is serious overkill. It also causes problems because the
+% loop delimiter is a comma, and there are keywords that legitimately
+% contain commas. It also seem ponderous to me for keywords in the
+% \keyword list to be delimited by `|', so I make the author responsible
+% for keyword list punctuation.
+
+%\def\@kwds#1{\def\@kwddlm{}\@for\@kwd:=#1\do
+% {\@kwddlm\def\@kwddlm{\space\@keyworddelim\penalty\@m\space}{\@kwd}}}
+
+\def\@kwds#1{#1\relax}
+
+% ****************************************
+% * FOOTNOTES *
+% ****************************************
+
+% The following code redefines a few things so that spacing in footnotes is
+% different than LaTeX defaults. The adjustment to \skip\footins increases
+% the amount of vspace inserted before the \footnoterule. Redefine
+% \@makefntext to remove hspace and indentation.
+
+\skip\footins 3ex plus 1ex minus .5ex
+\footnotesep 2ex
+
+\long\def\@makefntext#1{\noindent\hbox to\z@{\hss$^{\@thefnmark}$}#1}
+
+% ****************************************
+% * SECTIONS *
+% ****************************************
+
+% \@startsection {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}
+% optional * [ALTHEADING]{HEADING}
+% Generic command to start a section.
+% NAME : e.g., 'subsection'
+% LEVEL : a number, denoting depth of section -- e.g., chapter=1,
+% section = 2, etc.
+% INDENT : Indentation of heading from left margin
+% BEFORESKIP : Absolute value = skip to leave above the heading.
+% If negative, then paragraph indent of text following
+% heading is suppressed.
+% AFTERSKIP : if positive, then skip to leave below heading, else
+% negative of skip to leave to right of run-in heading.
+% STYLE : commands to set style
+% If '*' missing, then increments the counter. If it is present, then
+% there should be no [ALTHEADING] argument.
+
+% Adjust section heading typography slightly. The manuscript editors
+% seem to like the idea that the heads will be centered, and that there
+% will be a "." trailing the section number. This requires hacking below
+% the normal LaTeX programming interface (\@startsection), since the
+% centering has to be turned on and off again before the section starts.
+%
+% Also, modify the indentation behavior so that ALL paragraphs, including
+% those first after section heads, are indented. This is consonant with
+% the styles of many journals, although it's non-standard typographic practice.
+%
+% Add simple logic to engage \twocolumn when the first \section command
+% is encountered if this hasn't been done already.
+
+\newif\if@firstsection \@firstsectiontrue
+
+\def\section{\if@firstsection
+ \if@twocolumn\relax\else\twocolumn\fi
+ \@firstsectionfalse\fi
+ \@startsection{section}{1}{\z@}
+ {2.3ex plus 1ex minus .2ex}{1.5ex plus .2ex}{\normalsize\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}
+ {2ex plus 1ex minus .2ex}{1ex plus .2ex}{\normalsize\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}
+ {2ex plus 1ex minus .2ex}{1ex plus .2ex}{\normalsize\it}}
+
+\def\thesection{\@arabic{\c@section}.}
+\def\thesubsection{\thesection\@arabic{\c@subsection}.}
+\def\thesubsubsection{\thesubsection\@arabic{\c@subsubsection}.}
+\def\theparagraph{\thesubsubsection\@arabic{\c@paragraph}:}
+
+% For ApJ, acknowledgments are set off from main body text simply by
+% vertical space (no heading or type size change). I do the same for
+% the AAS manuscript style. For use in producing more polished output
+% for other journals, this macro might generate text saying
+% "Acknowledg[e]ments".
+
+\def\acknowledgments{\vskip 3ex plus .8ex minus .4ex}
+\let\acknowledgements=\acknowledgments % second spelling
+
+% ****************************************
+% * EQUATION NUMBERING *
+% ****************************************
+
+% Redefine \appendix so that equation numbers are prepended with
+% \theappendix number. Reset equation counter so that equation
+% numbers in the appendix begin again with 1. Note that the
+% \appendix command is NOT a sectioning command; it is merely
+% a delimiting markup between the main body of the paper and the
+% appendix. Sections in the appendix are still started with
+% \section commands.
+%
+% \appendix
+
+\def\appendix{\par
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \setcounter{equation}{0}
+ \def\thesection{\Alph{section}.}
+ \def\theequation{\hbox{\normalsize\Alph{section}\arabic{equation}}}}
+
+% Define mathletters environment. This is a wrapper that goes
+% *around* (outside of) equation or eqnarray environments.
+%
+% \begin{mathletters}
+% \end{mathletters}
+
+\newcounter{cureqno}
+
+\newenvironment{mathletters}{\refstepcounter{equation}%
+ \setcounter{cureqno}{\value{equation}}%
+ \let\@curtheeqn\theequation%
+ \edef\cur@eqn{\csname theequation\endcsname}%
+ \def\theequation{\cur@eqn\alph{equation}}%
+ \setcounter{equation}{0}}%
+ {\let\theequation\@curtheeqn%
+ \setcounter{equation}{\value{cureqno}}}
+
+% The \eqnum command allows the author to override all automatic
+% equation marking schemes.
+%
+% \eqnum{TEXT}
+
+\def\eqnum#1{\def\theequation{#1}\let\@currentlabel\theequation
+ \addtocounter{equation}{\m@ne}}
+
+% ****************************************
+% * BIBLIOGRAPHY *
+% ****************************************
+
+% Bibliography/references environment. For the time being, I don't think
+% it would be a good idea to force an implementation based on BibTeX,
+% although I'll prepare for that eventuality by using the constructs and
+% general ideas of the LaTeX thebibliography environment. Adjustments
+% have been made so that the \cite-\bibitem mechanism can be used to cite
+% references symbolically while maintaining proper citation syntax within
+% the paper; the author must create the citation label for each reference
+% in proper journal format in the \bibitem command.
+%
+% \begin{thebibliography}
+% \bibitem[LABEL]{TEXTTAG} \reference <bibliographic data>
+% \end{thebibliography}
+%
+% where LABEL must adhere to the journal's standards, e.g. "Abt 1986".
+%
+% It is not necessary to use the thebibliography environment. This style
+% defines a references environment that simply sets off the list of references
+% and adjusts spacing parameters. It is not possible to use \bibitems
+% within the references environment. (The \reference command cannot be
+% shortened to \ref; \ref is used in vanilla LaTeX for cross-referencing.)
+%
+% \begin{references}
+% \reference <bibliographic data>
+% \end{references}
+%
+% \markcite{TEXT}
+%
+% Observe that the bibliographic data supplied by the author must also
+% conform to the standards of the journal. I have elected not to burden
+% authors with tedious LaTeX commands which would require many curly braces
+% to delimit the bibliographic fields because many of the journals I have
+% targeted in this project have agreed to reduce typographic overhead (bolding,
+% italicizing, etc.) in reference lists. (See Abt's editorial in ApJ 357.)
+% It is the responsibility of the author to get these fields in the proper
+% order with the correct punctuation; the information will be typeset as is,
+% i.e., in roman with no size or style changes.
+%
+% Macros are provided for many of the oft-referenced journals so that authors
+% may use the LaTeX names rather than having to look up a particular journal's
+% specific abbreviation. In principle, all the journals should be using the
+% same abbreviations, too, but I anticipate some changes in the specific
+% abbreviations before a set is finally settled on. As long as these macros
+% are kept up to date, authors need not be concerned about such editorial
+% changes.
+%
+% Corresponding with the non-BibTeX references environment and \reference
+% command for the reference list is the \markcite command. This can be
+% used to identify in-text citations; in this case, the author provides
+% the actual citation text as opposed to the symbolic tag. The use of
+% this is encouraged, even for journals where no special formatting of
+% citation call-outs is required; it is crucial for the future use of
+% on-line browsers.
+
+\def\references{\subsection*{REFERENCES}
+ \bgroup\parindent=\z@\parskip=\itemsep
+ \def\refpar{\par\hangindent=1.2em\hangafter=1}}
+\def\endreferences{\refpar\egroup\revtex@pageid}
+
+\def\thebibliography{\subsection*{REFERENCES}
+ \list{\null}{\leftmargin 1.2em\labelwidth\z@\labelsep\z@\itemindent -1.2em
+ \usecounter{enumi}}
+ \def\refpar{\relax}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+\def\endthebibliography{\endlist\revtex@pageid}
+
+\def\@biblabel#1{\relax}
+%\def\@cite#1#2{({#1\if@tempswa , #2\fi})}
+\def\@cite#1#2{#1\if@tempswa , #2\fi}
+
+\def\reference{\relax\refpar} % Generic: might be better...
+\def\markcite#1{#1\relax}
+
+% Modify \@citex so that individual citation texts are NOT hboxed.
+% This allows TeX to break lines at spaces between words in citations.
+% Remove the obnoxious {\bf ?} that was inserted in the text when
+% undefined citations are encountered; here, the warning message is
+% printed only on the terminal.
+
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+ \def\@citea{}\@cite{\@for\@citeb:=#2\do
+ {\@citea\def\@citea{,\penalty\@m\ }\@ifundefined
+ {b@\@citeb}{\@warning
+ {Citation `\@citeb' on page \thepage \space undefined}}%
+{\csname b@\@citeb\endcsname}}}{#1}}
+
+%\@input{mstblfig.sty}
+
+% ****************************************
+% * TABLES AND FIGURES *
+% ****************************************
+
+% Additions and adjustments for tables and figures.
+
+% Footnotes for tables are to be identified with lower case alphabetics,
+% rather than numeric. \tablenotemark and \tablenotetext commands are
+% provided analogous to \footnotemark and \footnotetext, but with the
+% identifier *required*, like \altaffilmark and \altaffiltext. The
+% \tablenotetext must be specified before the \end{table}, since
+% \end{table} displays it.
+%
+% \tablenotemark{TAG LETTER(S)}
+% \tablenotetext{ALPHA TAG}{TEXT}
+%
+% Note that TAG LETTER == ALPHA TAG for corresponding text. It is the
+% responsibility of the author to get the correspondence correct.
+%
+% The table footnotes are coupled to the table in which they occur, rather
+% than being associated with a particular page, and they are printed with
+% the table (relatively close to the caption) instead of appearing at the
+% extreme bottom of the page. This is done to ensure that the notes wind
+% up on the same page as the table, since tables are floats and can migrate
+% from one page to another. There is the additional benefit that the notes
+% are unambiguously attached to the proper table, which is what is required
+% in the event that the editorial requirement of one table only per page
+% is ever changed to permit several tables per page.
+%
+% Footnotes are NOT supported for figures.
+
+\def\tablenotemark#1{\rlap{$^{\rm #1}$}}
+
+% The \tablenotetext command buffers the table note text and the "proper"
+% tablenote formatting information in a token buffer. The tablenotes are
+% dispensed into the vertical page list by \spew@tblnotes, which is
+% executed by \end{table}. Note that certain "global" tablenote formatting
+% details are handled by \spew@tblnotes, which also clears the tblnote list.
+% Praise and honor are due to Kresten Krab Thorup (krab@iesd.auc.dk) for
+% posting ftn.sty to the Usenet, from which I drew the technique.
+
+\newtoks\@temptokenb
+\def\tblnote@list{}
+
+\def\tablenotetext#1#2{
+ \@temptokena={\vspace{.5ex}{\noindent\llap{$^{#1}$}#2}\par}
+ \@temptokenb=\expandafter{\tblnote@list}
+ \xdef\tblnote@list{\the\@temptokenb\the\@temptokena}}
+
+\def\spew@tblnotes{
+ \ifx\tblnote@list\@empty\relax
+ \else
+ \vspace{3.2ex}
+ \footnoterule
+ \vspace{.4ex}
+ {\footnotesize\tblnote@list}
+ \gdef\tblnote@list{}
+ \fi}
+
+\def\endtable{\spew@tblnotes\end@float}
+\@namedef{endtable*}{\spew@tblnotes\end@dblfloat}
+
+% Add a \tableline command for use in tabular environments. This command
+% produces the horizontal rule(s) between the column headings and the body
+% of the table. Authors are discouraged from using any \hlines themselves,
+% and are typically forbidden from using vertical rules by editors.
+
+\let\tableline=\hline
+
+% \@makecaption determines formatting for figure and table captions.
+% For manuscripts, all captions should be set as flushleft paragraphs.
+
+\long\def\@makecaption#1#2{\vskip 2ex\noindent #1 #2\par}
+
+% The \tablenum command allows the author to override all automatic
+% table marking schemes.
+%
+% \tablenum{TEXT}
+
+\def\tablenum#1{\def\thetable{#1}\let\@currentlabel\thetable
+ \addtocounter{table}{\m@ne}}
+
+% The \figurenum command allows the author to override all automatic
+% figure marking schemes.
+%
+% \figurenum{TEXT}
+
+\def\figurenum#1{\def\thefigure{#1}\let\@currentlabel\thefigure
+ \addtocounter{figure}{\m@ne}}
+
+% ****************************************
+% * PLANO TABLES *
+% ****************************************
+
+% Plano tables are camera-ready pages that are included in a typeset
+% article the same way as line drawings, graphs, and other camera-ready
+% art, i.e., as "planographic" figures. There are desirable properties
+% for a formatter to have that are somewhat above and beyond LaTeX'x
+% tabular environment that would facilitate the creation of such tables.
+% Among these are breaking long tables across pages, using footnotes
+% in a table, specifying comments and references for tables, etc.
+%
+% What follows was inspired by supertab.sty by Theo Jurriens, 1988.
+
+% Commands for identifying table elements in a consistent way. Observe
+% that the formatting is embedded in the macro definitions so that the
+% author doesn't need to be concerned about stylistic nuances.
+%
+% \tablecaption{TEXT}
+% \tablehead{TEXT}
+% \colhead{HEADING}
+% \tabletail{TEXT}
+% \tablewidth{DIMEN}
+% \tableheadfrac{NUM}
+
+\newbox\pt@box
+\newdimen\pt@width
+\newcount\pt@line
+\newcount\pt@nlines
+\newcount\pt@ncol
+
+\def\colhead#1{\omit\hidewidth{#1}\hidewidth\global\advance\pt@ncol by\@ne}
+\def\tablecaption#1{\gdef\pt@caption{#1}} \def\pt@caption{\relax}
+\def\tablehead#1{\gdef\pt@head{\hline\hline\relax\\[-1.7ex]
+ #1\hskip\tabcolsep\\[.7ex]\hline\relax\\[-1.5ex]}} \def\pt@head{\relax}
+\def\tabletail#1{\gdef\pt@tail{#1}} \def\pt@tail{\relax}
+\def\tablewidth#1{\pt@width=#1} \pt@width\textwidth
+\def\tableheadfrac#1{\gdef\pt@headfrac{#1}} \def\pt@headfrac{.1}
+
+% Calculate the number of tabular rows that will fit in the body of the
+% table. The height of the table body and the number of lines are
+% calculated thus:
+%
+% bodyheight = \textheight * (1 - \pt@headfrac)
+% \pt@nlines = bodyheight / (\arraystretch * \baselineskip)
+%
+% The row height can be seen to be valid algebraically if one examines the
+% definitions for \strutbox, \@setstrut, and \@array. I could eliminate
+% this calculation, as well as its attendant parameters, if it were possible
+% to determine the accumulated height of the \halign box as TeX goes along.
+
+\def\pt@calcnlines{\@tempdima\pt@headfrac\textheight
+ \@tempdimb\textheight\advance\@tempdimb by-\@tempdima
+ \@tempdima\arraystretch\baselineskip
+ \divide\@tempdimb by\@tempdima
+ \global\pt@nlines\@tempdimb}
+
+% Define \pt@tabular, a ripoff of \@tabular but with \leavevmode removed
+% so tabular box can be set with \setbox. I do this so that table notes
+% can be set to natural width of table, if desired. Also, set \@acol
+% to \@ptabacol, which is called when building the preamble for the
+% \halign (assuming the first column format specification is "l", which
+% it should be for ApJ tables) so that \tabskip within the table is set
+% to \fill. This permits us to toggle between natural and fixed-width
+% tables without requiring the user to change markup. Note that by
+% forcing \tabskip always to be \fill, I pretty well nullify any
+% @{\hspace} commands the user puts in the template, but this environment
+% is for people who don't want to think about that sort of stuff anyway.
+
+\def\pt@tabular{\hbox \bgroup $\let\@acol\@ptabacol
+ \let\@classz\@tabclassz
+ \let\@classiv\@tabclassiv \let\\\@tabularcr\@tabarray}
+
+\def\@ptabacol{\edef\@preamble{\@preamble \hskip \tabcolsep\tabskip\fill}}
+
+% Permit different identifying strings, one for the first page of the
+% table and one for continuation pages. LaTeX's \fnum@table is set to
+% one or the other automatically in the environment. Note that caption
+% handling is not so graceful: you have to edit inside the big macros to
+% adjust this. Someday, I will be ambitious enough to fix this.
+
+\def\fnum@ptable{Table \thetable}
+\def\fnum@ptablecont{Table \thetable---{\it Continued}}
+
+\def\set@mkcaption{\long\def\@makecaption##1##2{
+ \center\sc##1\\[.5ex]##2\endcenter\vskip 1.5ex}}
+\def\set@mkcaptioncont{\long\def\@makecaption##1##2{
+ \center\sc##1\endcenter\vskip 1.5ex}}
+
+\newenvironment{planotable}[1]{\def\pt@format{\string#1}%
+ \set@tblnotetext\pt@ncol=0}%
+ {\crcr\noalign{\vskip .7ex}\hline\endtabular%
+ \pt@width\wd\pt@box\box\pt@box\spew@ptblnotes%
+ \typeout{Table \thetable\space has been set to width \the\pt@width}%
+ \endcenter\end@dblfloat}
+
+\def\startdata{\pt@line=0\pt@calcnlines%
+ \ifdim\pt@width>\z@\def\@halignto{to \pt@width}\else\def\@halignto{}\fi%
+ \let\fnum@table=\fnum@ptable\set@mkcaption%
+ \@dblfloat{table}\center\caption{\pt@caption}\leavevmode%
+ \setbox\pt@box=\pt@tabular{\pt@format}\pt@head}
+
+% A kludgey kind of line delimiter is needed so that the line counter
+% can be checked prior to adding the line to the alignment box. This
+% is bad because this form does not permit the addition of vertical
+% space using the [.5ex] construct; this has to be done with an explicit
+% \vskip. And a disgusting \noalign is required, so I have to create
+% another silly piece of markup to accomplish this conveniently.
+%
+% What is desired, of course, is for this line count checking to take
+% place within the syntax of the regular LaTeX \\ command. I have been
+% giving myself apoplexy trying to figure this out for the last 36 hours,
+% and I have decided I will have to wait for the onset of my "lucid
+% period" for a solution. In the meantime...
+
+\def\pt@nl{\global\advance\pt@line by\@ne%
+ \ifnum\pt@line=\pt@nlines%
+ \endtabular\box\pt@box
+ \endcenter\end@dblfloat\clearpage%
+ \addtocounter{table}{\m@ne}%
+ \let\fnum@table=\fnum@ptablecont\set@mkcaptioncont%
+ \@dblfloat{table}\center\caption{\pt@caption}\leavevmode%
+ \global\pt@ncol=0%
+ \setbox\pt@box=\pt@tabular{\pt@format}\pt@head%
+ \global\pt@line=0%
+ \else\\
+ \fi}
+
+% Author markup commands for planotable environment line breaks.
+%
+% \nl == \nextline
+% \tablevspace{DIMEN}
+% \tablebreak
+
+\let\nl=\pt@nl
+\let\nextline=\pt@nl
+
+\def\tablevspace#1{\noalign{\vskip{#1}}}
+\def\tablebreak{\pt@line\pt@nlines\advance\pt@line by\m@ne\pt@nl}
+
+% We have some specialty heads that are sometimes wanted in tables.
+%
+% \cutinhead{TEXT}
+% \sidehead{TEXT}
+
+\def\cutinhead#1{\noalign{\vskip 1.5ex}
+ \hline\pt@nl\noalign{\vskip -2.0ex}
+ \multicolumn{\pt@ncol}{c}{#1}\pt@nl
+ \noalign{\vskip .8ex}
+ \hline\pt@nl\noalign{\vskip -2ex}}
+
+\def\sidehead#1{\noalign{\vskip 1.5ex}
+ \multicolumn{\pt@ncol}{@{\hskip\z@}l}{#1}\pt@nl
+ \noalign{\vskip .5ex}}
+
+\def\set@tblnotetext{\def\tablenotetext##1##2{{%
+ \@temptokena={\vspace{0ex}{%
+ \parbox{\pt@width}{\hskip1em$^{\rm ##1}$##2}\par}}%
+ \@temptokenb=\expandafter{\tblnote@list}
+ \xdef\tblnote@list{\the\@temptokenb\the\@temptokena}}}}
+
+\def\spew@ptblnotes{
+ \ifx\tblnote@list\@empty\relax
+ \else
+ \par
+ \vspace{2ex}
+ {\tblnote@list}
+ \gdef\tblnote@list{}
+ \fi}
+
+% Special kinds of table footnotes. Sometimes authors tabulate things
+% which have corresponding references, and it may be desirable to associate
+% these references with the table rather than (or in addition to) the
+% formal reference list. Occasionally, authors wish to append a short
+% paragraph of explanatory notes that pertain to the entire table, but
+% which are different than the caption.
+%
+% \tablerefs{REFERENCE LIST}
+% \tablecomments{TEXT}
+
+\def\tablerefs#1{\@temptokena={\vspace*{3ex}{%
+ \parbox{\pt@width}{\hskip1em{\sc References.---}#1}\par}}%
+ \@temptokenb=\expandafter{\tblnote@list}
+ \xdef\tblnote@list{\the\@temptokenb\the\@temptokena}}
+
+\def\tablecomments#1{\@temptokena={\vspace*{3ex}{%
+ \parbox{\pt@width}{\hskip1em{\sc Note.---}#1}\par}}%
+ \@temptokenb=\expandafter{\tblnote@list}
+ \xdef\tblnote@list{\the\@temptokenb\the\@temptokena}}
+
+% Figure and table style parameters.
+
+\def\thefigure{\@arabic\c@figure}
+\def\fnum@figure{{\rm Fig.\space\thefigure.---}}
+
+\def\thetable{\@arabic\c@table}
+\def\fnum@table{{\rm Table \thetable:}}
+
+% Figure and table float positions.
+
+\def\fps@figure{bp}
+\def\fps@table{bp}
+
+% ****************************************
+% * EPS INCLUSIONS *
+% ****************************************
+
+% Include Rokicki's epsf.sty file explicitly.
+
+\@ifundefined{epsfbox}{\@input{epsf.sty}}{\relax}
+
+% Simplified EPS inclusion macros so we can see how this goes...
+% These are layered on Rokicki's dvips material, and are dependent
+% on the author's use of that DVI driver.
+%
+% \plotone{EPSFILE}
+% \plottwo{EPSFILE}{EPSFILE}
+% \plotfiddle{EPSFILE}{VSIZE}{ROT}{HSF}{VSF}{HTRANS}{VTRANS}
+%
+% \plotone inserts the plot in a space that is \columnwidth wide; the
+% plot is scaled so the horizontal dimension fits in the text width,
+% and the vertical dimension is scaled to maintain the aspect ratio.
+% \plottwo inserts two plots next to each other in one \columnwidth,
+% sort of like "two-up" mode.
+%
+% EPSFILE name of file with EPS
+%
+% The following arguments are for the \plotfiddle macro which formats
+% the \special itself, prepares vspace, etc. This completely bypasses
+% Rokicki's macros that attempt to rationalize the EPS BoundingBox with
+% the LaTeX page dimensions.
+%
+% VSIZE vertical white space to allow for plot
+% ROT rotation angle
+% HSF horiz scale factor
+% VSF vert scale factor
+% HTRANS horiz translation
+% VTRANS vert translation
+
+%\epsfverbosetrue
+
+\def\plotone#1{\centering \leavevmode
+ \epsfxsize=\columnwidth \epsfbox{#1}}
+
+\def\plottwo#1#2{\centering \leavevmode
+ \epsfxsize=.45\columnwidth \epsfbox{#1} \hfil
+ \epsfxsize=.45\columnwidth \epsfbox{#2}}
+
+\def\plotfiddle#1#2#3#4#5#6#7{\centering \leavevmode
+ \vbox to#2{\rule{0pt}{#2}}
+ \special{psfile=#1 voffset=#7 hoffset=#6 vscale=#5 hscale=#4 angle=#3}}
+
+%\@input{abbrevs.sty}
+
+% ****************************************
+% * ABBREVIATIONS *
+% ****************************************
+
+% Abbreviations for journals. The object here is to provide authors
+% with convenient shorthands for the most "popular" (often-cited)
+% journals; the author can use these markup tags without being concerned
+% about the exact form of the journal abbreviation, or its formatting.
+% It is up to the keeper of the macros to make sure the macros expand
+% to the proper text. If macro package writers agree to all use the
+% same TeX command name, authors only have to remember one thing, and
+% the style file will take care of editorial preferences. This also
+% applies when a single journal decides to revamp its abbreviating
+% scheme, as happened with the ApJ (Abt 1991).
+
+\let\jnl@style=\rm
+\def\ref@jnl#1{{\jnl@style#1}}
+
+\def\aj{\ref@jnl{AJ}} % Astronomical Journal
+\def\araa{\ref@jnl{ARA\&A}} % Annual Review of Astron and Astrophys
+\def\apj{\ref@jnl{ApJ}} % Astrophysical Journal
+\def\apjl{\ref@jnl{ApJ}} % Astrophysical Journal, Letters
+\def\apjs{\ref@jnl{ApJS}} % Astrophysical Journal, Supplement
+\def\ao{\ref@jnl{Appl.Optics}} % Applied Optics
+\def\apss{\ref@jnl{Ap\&SS}} % Astrophysics and Space Science
+\def\aap{\ref@jnl{A\&A}} % Astronomy and Astrophysics
+\def\aapr{\ref@jnl{A\&A~Rev.}} % Astronomy and Astrophysics Reviews
+\def\aaps{\ref@jnl{A\&AS}} % Astronomy and Astrophysics, Supplement
+\def\azh{\ref@jnl{AZh}} % Astronomicheskii Zhurnal
+\def\baas{\ref@jnl{BAAS}} % Bulletin of the AAS
+\def\jrasc{\ref@jnl{JRASC}} % Journal of the RAS of Canada
+\def\memras{\ref@jnl{MmRAS}} % Memoirs of the RAS
+\def\mnras{\ref@jnl{MNRAS}} % Monthly Notices of the RAS
+\def\pra{\ref@jnl{Phys.Rev.A}} % Physical Review A: General Physics
+\def\prb{\ref@jnl{Phys.Rev.B}} % Physical Review B: Solid State
+\def\prc{\ref@jnl{Phys.Rev.C}} % Physical Review C
+\def\prd{\ref@jnl{Phys.Rev.D}} % Physical Review D
+\def\prl{\ref@jnl{Phys.Rev.Lett}} % Physical Review Letters
+\def\pasp{\ref@jnl{PASP}} % Publications of the ASP
+\def\pasj{\ref@jnl{PASJ}} % Publications of the ASJ
+\def\qjras{\ref@jnl{QJRAS}} % Quarterly Journal of the RAS
+\def\skytel{\ref@jnl{S\&T}} % Sky and Telescope
+\def\solphys{\ref@jnl{Solar~Phys.}} % Solar Physics
+\def\sovast{\ref@jnl{Soviet~Ast.}} % Soviet Astronomy
+\def\ssr{\ref@jnl{Space~Sci.Rev.}} % Space Science Reviews
+\def\zap{\ref@jnl{ZAp}} % Zeitschrift fuer Astrophysik
+
+\let\astap=\aap
+\let\apjlett=\apjl
+\let\apjsupp=\apjs
+
+%\@input{misc.sty}
+
+% ****************************************
+% * MISCELLANEOUS *
+% ****************************************
+
+% Handy little things everybody works out for themselves anyway. Many
+% of these come from Springer's A&A package, and some were contributed
+% by Francois Schweizer at DTM. You can go berserk making these up,
+% especially when you start getting into the composite ones. We have
+% tried to select a tractable number that were useful, and somewhat
+% difficult to get right because fussy kerning or some such is required.
+% Most can be used in or out of math mode with impunity; \alt and \agt
+% are relations and can only be used in math mode.
+
+\def\deg{\hbox{$^\circ$}}
+\def\sun{\hbox{$\odot$}}
+\def\earth{\hbox{$\oplus$}}
+\def\lesssim{\mathrel{\hbox{\rlap{\hbox{\lower4pt\hbox{$\sim$}}}\hbox{$<$}}}}
+\def\gtrsim{\mathrel{\hbox{\rlap{\hbox{\lower4pt\hbox{$\sim$}}}\hbox{$>$}}}}
+\def\sq{\hbox{\rlap{$\sqcap$}$\sqcup$}}
+\def\arcmin{\hbox{$^\prime$}}
+\def\arcsec{\hbox{$^{\prime\prime}$}}
+\def\fd{\hbox{$.\!\!^{\rm d}$}}
+\def\fh{\hbox{$.\!\!^{\rm h}$}}
+\def\fm{\hbox{$.\!\!^{\rm m}$}}
+\def\fs{\hbox{$.\!\!^{\rm s}$}}
+\def\fdg{\hbox{$.\!\!^\circ$}}
+\def\farcm{\hbox{$.\mkern-4mu^\prime$}}
+\def\farcs{\hbox{$.\!\!^{\prime\prime}$}}
+\def\fp{\hbox{$.\!\!^{\scriptscriptstyle\rm p}$}}
+\def\micron{\hbox{$\mu$m}}
+
+\let\la=\lesssim % For Springer A&A compliance...
+\let\ga=\gtrsim
+
+% Permit author to typeset "case" fractions. This is sometimes
+% wanted in displayed equations, during which LaTeX will set fractions
+% specified as \frac{x}{y} as "built-up" fractions (numerator and
+% denominator at body text size).
+
+\def\case#1#2{\hbox{$\frac{#1}{#2}$}}
+
+% Permit author to typeset fractions set with solidus where the size
+% is reduced and the numerals are oriented diagonally. Note that this
+% is different from a "shilled" fraction, which the author can produce
+% without any special formatting markup. Define markup shorthands for
+% several common fractions using solidus.
+
+\def\slantfrac#1#2{\hbox{$\,^#1\!/_#2$}}
+\def\onehalf{\slantfrac{1}{2}}
+\def\onethird{\slantfrac{1}{3}}
+\def\twothirds{\slantfrac{2}{3}}
+\def\onequarter{\slantfrac{1}{4}}
+\def\threequarters{\slantfrac{3}{4}}
+
+\def\ubvr{\hbox{$U\!BV\!R$}} % UBVR system
+\def\ub{\hbox{$U\!-\!B$}} % U-B
+\def\bv{\hbox{$B\!-\!V$}} % B-V
+\def\vr{\hbox{$V\!-\!R$}} % V-R
+\def\ur{\hbox{$U\!-\!R$}} % U-R
+
+% Notation for atomic species (ionization levels). The ionization state
+% is specified as the second argument, and should be given as a numeral.
+% The macro has to expand the numeric state into the proper notation for
+% the publication (roman, numeric, plus signs, etc.)
+%
+% \ion{ELEMENT}{IONIZATION STATE}
+
+\def\ion#1#2{#1$\;${\small\rm\@Roman{#2}}\relax}
+
+% Centered ellipsis for use in tables (for unknown values). \nodata
+% is generalized markup for this notion: format of null-valued entries
+% in tables is style-specific.
+
+%\def\cellipsis{\hfill$\cdots$\hfill}
+\def\nodata{\multicolumn{1}{c}{$\cdots$}}
+
+% This is a generalization of the \LaTeX definition that comes in LaTeX.
+% The change here ensures that LaTeX will be typeset in the current style,
+% rather than always in roman.
+
+\newcount\lecurrentfam
+\def\LaTeX{\lecurrentfam=\the\fam \leavevmode L\raise.42ex
+ \hbox{$\fam\lecurrentfam\scriptstyle\kern-.3em A$}\kern-.15em\TeX}
+
+% ****************************************
+% * DEBUGGING *
+% ****************************************
+
+\def\sizrpt{
+ (\fontname\the\font): em=\the\fontdimen6\font, ex=\the\fontdimen5\font
+ \typeout{
+ (\fontname\the\font): em=\the\fontdimen6\font, ex=\the\fontdimen5\font
+}}
diff --git a/obsolete/macros/latex209/contrib/aasmacros/aaspptwo.sty b/obsolete/macros/latex209/contrib/aasmacros/aaspptwo.sty
new file mode 100644
index 0000000000..8ac3c98fa2
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aasmacros/aaspptwo.sty
@@ -0,0 +1,398 @@
+\def\revtex@ver{3.0}
+\def\revtex@date{10 Jan 93}
+\def\revtex@org{AAS}
+\def\revtex@jnl{AAS}
+\def\revtex@genre{2-column preprint}
+\typeout{\revtex@org\space \revtex@genre\space substyle,
+v\revtex@ver\space <\revtex@date>.}
+\def\revtex@pageid{\xdef\@thefnmark{\null}
+\@footnotetext{This \revtex@genre\space was prepared with the
+ \revtex@org\space \LaTeX\ macros v\revtex@ver.}}
+\def\genre@MS{manuscript}
+\def\genre@PP{preprint}
+\ifx\revtex@genre\genre@MS
+\ifnum\@ptsize<2
+\typeout{Warning: Undersize \revtex@genre\space font (1\@ptsize\space pts).
+ Use 12pt documentstyle option.}
+\fi
+\fi
+\def\ps@plaintop{\let\@mkboth\@gobbletwo
+\def\@oddfoot{}\def\@oddhead{\rm\hfil--\space\thepage\space--\hfil}
+\def\@evenfoot{}\let\@evenhead\@oddhead}
+\ps@plain
+\textwidth=6.9in
+\textheight=8.4in
+\topmargin=0in
+\headheight=.15in
+\headsep=.35in
+\oddsidemargin=0in
+\evensidemargin=0in
+\parindent=1.2em
+\parskip=0.5ex
+\columnsep=0.5in
+\hoffset=-0.2in
+\tolerance=600
+\def\@tightleading{1.1}
+\def\@doubleleading{1.6}
+\let\tighten=\relax
+\let\tightenlines=\tighten
+\let\singlespace=\relax
+\let\doublespace=\relax
+\def\sec@upcase#1{\relax{#1}}
+\def\eqsecnum{
+\@newctr{equation}[section]
+\def\theequation{\hbox{\normalsize\arabic{section}-\arabic{equation}}}}
+\def\@journalname{The Astropolitical Journal}
+\def\cpr@holder{American Astronomical Society}
+\def\received#1{\gdef\@recvdate{#1}} \received{\relax}
+\def\revised#1{\gdef\@revisedate{#1}} \revised{\relax}
+\def\accepted#1{\gdef\@accptdate{#1}} \accepted{\relax}
+\def\journalid#1#2{\gdef\@jourvol{#1}\gdef\@jourdate{#2}}
+\def\articleid#1#2{\gdef\@startpage{#1}\gdef\@finishpage{#2}}
+\def\paperid#1{\gdef\@paperid{#1}} \paperid{MS-0001-SAMP}
+\def\ccc#1{\gdef\CCC@code{#1}} \ccc{000-00\$75.95-CDB}
+\def\cpright#1#2{\@nameuse{cpr@#1} \gdef\cpr@year{#2}
+\typeout{`#1' copyright \cpr@year.}}
+\newcount\@cprtype \@cprtype=\@ne
+\def\cpr@AAS{\@cprtype=1}
+\def\cpr@PD{\@cprtype=2}
+\def\cpr@Crown{\@cprtype=3}
+\def\cpr@none{\@cprtype=4}
+\def\cpr@ASP{\@cprtype=5}
+\def\cpr@year{\number\year}
+\def\@slug{\par\noindent
+\ifcase\@cprtype
+ \relax
+\or
+ Copyright \cpr@year\space by the \cpr@holder.
+\or
+ This article is in the public domain.
+\or
+ Crown copyright \cpr@year\space by the \cpr@holder.
+\or
+ No copyright is claimed for this article.
+\or
+ Copyright \cpr@year\space by the ASP.
+\fi
+\par\noindent
+Manuscript number \@paperid.\par\noindent
+\CCC@code
+}
+\def\lefthead#1{\gdef\@versohead{#1}} \lefthead{\relax}
+\def\righthead#1{\gdef\@rectohead{#1}} \righthead{\relax}
+\def\@runheads{\@tempcnta\c@page
+\@whilenum \@tempcnta >0\do{
+\vskip 3ex
+\hbox to30pc{\small\expandafter\uppercase\expandafter{\@versohead}:
+ \expandafter\uppercase\expandafter{\@rectohead}\hfil}
+\advance\@tempcnta by\m@ne}
+}
+\def\slugcomment#1{\gdef\slug@comment{#1}} \slugcomment{}
+\newdimen\@slugcmmntwidth \@slugcmmntwidth .67\textwidth
+\long\def\@makeslugcmmnt{\ifx\slug@comment\@empty\relax\else
+\setbox\@tempboxa\hbox{\slug@comment}
+\ifdim \wd\@tempboxa >\@slugcmmntwidth
+\hbox to\textwidth{\hss
+ \parbox\@slugcmmntwidth\slug@comment}
+\else
+\hbox to\textwidth{\hfil\box\@tempboxa}
+\fi
+\vskip 2ex
+\fi}
+\def\@rcvaccrule{\vrule\@width1.75in\@height0.5pt\@depth\z@}
+\def\@dates{{\center\if@twocolumn\small\else\normalsize\fi%
+{\it Received}\space%
+\if\@recvdate\relax\@rcvaccrule\else\@recvdate\fi;%
+\if@twocolumn\\[.5ex]\else\hspace{1.5em}\fi%
+{\it accepted}\space%
+\if\@accptdate\relax\@rcvaccrule\else\@accptdate\fi%
+\endcenter}
+}
+\def\sluginfo{{\center
+\@dates
+
+
+\endcenter}}
+\let\dates=\sluginfo
+\def\abstract{\if@twocolumn
+\section*{Abstract}
+\else \large \vspace{3em}
+\begin{center}
+{\bf{ABSTRACT}\vspace{-.5em}\vspace{0pt}}
+\end{center}
+\quotation
+\fi}
+\def\title#1{{\center\if@twocolumn\large\else\Large\fi\bf#1\endcenter}}
+\def\author#1{{\topsep 0pt\center
+\if@twocolumn\normalsize\else\vspace{4ex}\large\fi#1\endcenter}}
+\let\authoraddr=\@gobble
+\def\affil#1{\vspace*{-0.8ex}{\topsep 0pt\center
+\if@twocolumn\small\else\normalsize\fi\it#1\endcenter}}
+\def\altaffilmark#1{$^{#1}$}
+\def\altaffiltext#1#2{\footnotetext[#1]{#2}}
+\def\and{\vspace*{-0.5ex}{\topsep\z@\center and\endcenter}}
+\def\@keywordtext{Subject headings}
+\def\@keyworddelim{---}
+\def\keywords#1{\vspace*{-.7ex}
+\if@twocolumn\noindent{\small{\it\@keywordtext:\/}\space\@kwds{#1}}
+\else{\quote\if@twocolumn\small\else\large\fi
+{\it\@keywordtext:\/}\space\@kwds{#1}\endquote}
+\fi}
+\let\subjectheadings=\keywords
+\def\@kwds#1{#1\relax}
+\skip\footins 3ex plus 1ex minus .5ex
+\footnotesep 2ex
+\long\def\@makefntext#1{\noindent\hbox to\z@{\hss$^{\@thefnmark}$}#1}
+\newif\if@firstsection \@firstsectiontrue
+\def\section{\if@firstsection
+\if@twocolumn\relax\else\twocolumn\fi
+\@firstsectionfalse\fi
+\@startsection{section}{1}{\z@}
+{2.3ex plus 1ex minus .2ex}{1.5ex plus .2ex}{\normalsize\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}
+{2ex plus 1ex minus .2ex}{1ex plus .2ex}{\normalsize\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}
+{2ex plus 1ex minus .2ex}{1ex plus .2ex}{\normalsize\it}}
+\def\thesection{\@arabic{\c@section}.}
+\def\thesubsection{\thesection\@arabic{\c@subsection}.}
+\def\thesubsubsection{\thesubsection\@arabic{\c@subsubsection}.}
+\def\theparagraph{\thesubsubsection\@arabic{\c@paragraph}:}
+\def\acknowledgments{\vskip 3ex plus .8ex minus .4ex}
+\let\acknowledgements=\acknowledgments
+\def\appendix{\par
+\setcounter{section}{0}
+\setcounter{subsection}{0}
+\setcounter{equation}{0}
+\def\thesection{\Alph{section}.}
+\def\theequation{\hbox{\normalsize\Alph{section}\arabic{equation}}}}
+\newcounter{cureqno}
+\newenvironment{mathletters}{\refstepcounter{equation}%
+\setcounter{cureqno}{\value{equation}}%
+\let\@curtheeqn\theequation%
+\edef\cur@eqn{\csname theequation\endcsname}%
+\def\theequation{\cur@eqn\alph{equation}}%
+\setcounter{equation}{0}}%
+{\let\theequation\@curtheeqn%
+\setcounter{equation}{\value{cureqno}}}
+\def\eqnum#1{\def\theequation{#1}\let\@currentlabel\theequation
+\addtocounter{equation}{\m@ne}}
+\def\references{\subsection*{REFERENCES}
+\bgroup\parindent=\z@\parskip=\itemsep
+\def\refpar{\par\hangindent=1.2em\hangafter=1}}
+\def\endreferences{\refpar\egroup\revtex@pageid}
+\def\thebibliography{\subsection*{REFERENCES}
+\list{\null}{\leftmargin 1.2em\labelwidth\z@\labelsep\z@\itemindent -1.2em
+\usecounter{enumi}}
+\def\refpar{\relax}
+\def\newblock{\hskip .11em plus .33em minus .07em}
+\sloppy\clubpenalty4000\widowpenalty4000
+\sfcode`\.=1000\relax}
+\def\endthebibliography{\endlist\revtex@pageid}
+\def\@biblabel#1{\relax}
+\def\@cite#1#2{#1\if@tempswa , #2\fi}
+\def\reference{\relax\refpar}
+\def\markcite#1{#1\relax}
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+\def\@citea{}\@cite{\@for\@citeb:=#2\do
+{\@citea\def\@citea{,\penalty\@m\ }\@ifundefined
+{b@\@citeb}{\@warning
+{Citation `\@citeb' on page \thepage \space undefined}}%
+{\csname b@\@citeb\endcsname}}}{#1}}
+\def\tablenotemark#1{\rlap{$^{\rm #1}$}}
+\newtoks\@temptokenb
+\def\tblnote@list{}
+\def\tablenotetext#1#2{
+\@temptokena={\vspace{.5ex}{\noindent\llap{$^{#1}$}#2}\par}
+\@temptokenb=\expandafter{\tblnote@list}
+\xdef\tblnote@list{\the\@temptokenb\the\@temptokena}}
+\def\spew@tblnotes{
+\ifx\tblnote@list\@empty\relax
+\else
+\vspace{3.2ex}
+\footnoterule
+\vspace{.4ex}
+{\footnotesize\tblnote@list}
+\gdef\tblnote@list{}
+\fi}
+\def\endtable{\spew@tblnotes\end@float}
+\@namedef{endtable*}{\spew@tblnotes\end@dblfloat}
+\let\tableline=\hline
+\long\def\@makecaption#1#2{\vskip 2ex\noindent #1 #2\par}
+\def\tablenum#1{\def\thetable{#1}\let\@currentlabel\thetable
+\addtocounter{table}{\m@ne}}
+\def\figurenum#1{\def\thefigure{#1}\let\@currentlabel\thefigure
+\addtocounter{figure}{\m@ne}}
+\newbox\pt@box
+\newdimen\pt@width
+\newcount\pt@line
+\newcount\pt@nlines
+\newcount\pt@ncol
+\def\colhead#1{\omit\hidewidth{#1}\hidewidth\global\advance\pt@ncol by\@ne}
+\def\tablecaption#1{\gdef\pt@caption{#1}} \def\pt@caption{\relax}
+\def\tablehead#1{\gdef\pt@head{\hline\hline\relax\\[-1.7ex]
+#1\hskip\tabcolsep\\[.7ex]\hline\relax\\[-1.5ex]}} \def\pt@head{\relax}
+\def\tabletail#1{\gdef\pt@tail{#1}} \def\pt@tail{\relax}
+\def\tablewidth#1{\pt@width=#1} \pt@width\textwidth
+\def\tableheadfrac#1{\gdef\pt@headfrac{#1}} \def\pt@headfrac{.1}
+\def\pt@calcnlines{\@tempdima\pt@headfrac\textheight
+\@tempdimb\textheight\advance\@tempdimb by-\@tempdima
+\@tempdima\arraystretch\baselineskip
+\divide\@tempdimb by\@tempdima
+\global\pt@nlines\@tempdimb}
+\def\pt@tabular{\hbox \bgroup $\let\@acol\@ptabacol
+\let\@classz\@tabclassz
+\let\@classiv\@tabclassiv \let\\\@tabularcr\@tabarray}
+\def\@ptabacol{\edef\@preamble{\@preamble \hskip \tabcolsep\tabskip\fill}}
+\def\fnum@ptable{Table \thetable}
+\def\fnum@ptablecont{Table \thetable---{\it Continued}}
+\def\set@mkcaption{\long\def\@makecaption##1##2{
+\center\sc##1\\[.5ex]##2\endcenter\vskip 1.5ex}}
+\def\set@mkcaptioncont{\long\def\@makecaption##1##2{
+\center\sc##1\endcenter\vskip 1.5ex}}
+\newenvironment{planotable}[1]{\def\pt@format{\string#1}%
+\set@tblnotetext\pt@ncol=0}%
+{\crcr\noalign{\vskip .7ex}\hline\endtabular%
+\pt@width\wd\pt@box\box\pt@box\spew@ptblnotes%
+\typeout{Table \thetable\space has been set to width \the\pt@width}%
+\endcenter\end@dblfloat}
+\def\startdata{\pt@line=0\pt@calcnlines%
+\ifdim\pt@width>\z@\def\@halignto{to \pt@width}\else\def\@halignto{}\fi%
+\let\fnum@table=\fnum@ptable\set@mkcaption%
+\@dblfloat{table}\center\caption{\pt@caption}\leavevmode%
+\setbox\pt@box=\pt@tabular{\pt@format}\pt@head}
+\def\pt@nl{\global\advance\pt@line by\@ne%
+\ifnum\pt@line=\pt@nlines%
+\endtabular\box\pt@box
+\endcenter\end@dblfloat\clearpage%
+\addtocounter{table}{\m@ne}%
+\let\fnum@table=\fnum@ptablecont\set@mkcaptioncont%
+\@dblfloat{table}\center\caption{\pt@caption}\leavevmode%
+\global\pt@ncol=0%
+\setbox\pt@box=\pt@tabular{\pt@format}\pt@head%
+\global\pt@line=0%
+\else\\
+\fi}
+\let\nl=\pt@nl
+\let\nextline=\pt@nl
+\def\tablevspace#1{\noalign{\vskip{#1}}}
+\def\tablebreak{\pt@line\pt@nlines\advance\pt@line by\m@ne\pt@nl}
+\def\cutinhead#1{\noalign{\vskip 1.5ex}
+\hline\pt@nl\noalign{\vskip -2.0ex}
+\multicolumn{\pt@ncol}{c}{#1}\pt@nl
+\noalign{\vskip .8ex}
+\hline\pt@nl\noalign{\vskip -2ex}}
+\def\sidehead#1{\noalign{\vskip 1.5ex}
+\multicolumn{\pt@ncol}{@{\hskip\z@}l}{#1}\pt@nl
+\noalign{\vskip .5ex}}
+\def\set@tblnotetext{\def\tablenotetext##1##2{{%
+\@temptokena={\vspace{0ex}{%
+\parbox{\pt@width}{\hskip1em$^{\rm ##1}$##2}\par}}%
+\@temptokenb=\expandafter{\tblnote@list}
+\xdef\tblnote@list{\the\@temptokenb\the\@temptokena}}}}
+\def\spew@ptblnotes{
+\ifx\tblnote@list\@empty\relax
+\else
+\par
+\vspace{2ex}
+{\tblnote@list}
+\gdef\tblnote@list{}
+\fi}
+\def\tablerefs#1{\@temptokena={\vspace*{3ex}{%
+\parbox{\pt@width}{\hskip1em{\sc References.---}#1}\par}}%
+\@temptokenb=\expandafter{\tblnote@list}
+\xdef\tblnote@list{\the\@temptokenb\the\@temptokena}}
+\def\tablecomments#1{\@temptokena={\vspace*{3ex}{%
+\parbox{\pt@width}{\hskip1em{\sc Note.---}#1}\par}}%
+\@temptokenb=\expandafter{\tblnote@list}
+\xdef\tblnote@list{\the\@temptokenb\the\@temptokena}}
+\def\thefigure{\@arabic\c@figure}
+\def\fnum@figure{{\rm Fig.\space\thefigure.---}}
+\def\thetable{\@arabic\c@table}
+\def\fnum@table{{\rm Table \thetable:}}
+\def\fps@figure{bp}
+\def\fps@table{bp}
+\@ifundefined{epsfbox}{\@input{epsf.sty}}{\relax}
+\def\plotone#1{\centering \leavevmode
+\epsfxsize=\columnwidth \epsfbox{#1}}
+\def\plottwo#1#2{\centering \leavevmode
+\epsfxsize=.45\columnwidth \epsfbox{#1} \hfil
+\epsfxsize=.45\columnwidth \epsfbox{#2}}
+\def\plotfiddle#1#2#3#4#5#6#7{\centering \leavevmode
+\vbox to#2{\rule{0pt}{#2}}
+\special{psfile=#1 voffset=#7 hoffset=#6 vscale=#5 hscale=#4 angle=#3}}
+\let\jnl@style=\rm
+\def\ref@jnl#1{{\jnl@style#1}}
+\def\aj{\ref@jnl{AJ}}
+\def\araa{\ref@jnl{ARA\&A}}
+\def\apj{\ref@jnl{ApJ}}
+\def\apjl{\ref@jnl{ApJ}}
+\def\apjs{\ref@jnl{ApJS}}
+\def\ao{\ref@jnl{Appl.Optics}}
+\def\apss{\ref@jnl{Ap\&SS}}
+\def\aap{\ref@jnl{A\&A}}
+\def\aapr{\ref@jnl{A\&A~Rev.}}
+\def\aaps{\ref@jnl{A\&AS}}
+\def\azh{\ref@jnl{AZh}}
+\def\baas{\ref@jnl{BAAS}}
+\def\jrasc{\ref@jnl{JRASC}}
+\def\memras{\ref@jnl{MmRAS}}
+\def\mnras{\ref@jnl{MNRAS}}
+\def\pra{\ref@jnl{Phys.Rev.A}}
+\def\prb{\ref@jnl{Phys.Rev.B}}
+\def\prc{\ref@jnl{Phys.Rev.C}}
+\def\prd{\ref@jnl{Phys.Rev.D}}
+\def\prl{\ref@jnl{Phys.Rev.Lett}}
+\def\pasp{\ref@jnl{PASP}}
+\def\pasj{\ref@jnl{PASJ}}
+\def\qjras{\ref@jnl{QJRAS}}
+\def\skytel{\ref@jnl{S\&T}}
+\def\solphys{\ref@jnl{Solar~Phys.}}
+\def\sovast{\ref@jnl{Soviet~Ast.}}
+\def\ssr{\ref@jnl{Space~Sci.Rev.}}
+\def\zap{\ref@jnl{ZAp}}
+\let\astap=\aap
+\let\apjlett=\apjl
+\let\apjsupp=\apjs
+\def\deg{\hbox{$^\circ$}}
+\def\sun{\hbox{$\odot$}}
+\def\earth{\hbox{$\oplus$}}
+\def\lesssim{\mathrel{\hbox{\rlap{\hbox{\lower4pt\hbox{$\sim$}}}\hbox{$<$}}}}
+\def\gtrsim{\mathrel{\hbox{\rlap{\hbox{\lower4pt\hbox{$\sim$}}}\hbox{$>$}}}}
+\def\sq{\hbox{\rlap{$\sqcap$}$\sqcup$}}
+\def\arcmin{\hbox{$^\prime$}}
+\def\arcsec{\hbox{$^{\prime\prime}$}}
+\def\fd{\hbox{$.\!\!^{\rm d}$}}
+\def\fh{\hbox{$.\!\!^{\rm h}$}}
+\def\fm{\hbox{$.\!\!^{\rm m}$}}
+\def\fs{\hbox{$.\!\!^{\rm s}$}}
+\def\fdg{\hbox{$.\!\!^\circ$}}
+\def\farcm{\hbox{$.\mkern-4mu^\prime$}}
+\def\farcs{\hbox{$.\!\!^{\prime\prime}$}}
+\def\fp{\hbox{$.\!\!^{\scriptscriptstyle\rm p}$}}
+\def\micron{\hbox{$\mu$m}}
+\let\la=\lesssim
+\let\ga=\gtrsim
+\def\case#1#2{\hbox{$\frac{#1}{#2}$}}
+
+
+\def\slantfrac#1#2{\hbox{$\,^#1\!/_#2$}}
+\def\onehalf{\slantfrac{1}{2}}
+\def\onethird{\slantfrac{1}{3}}
+\def\twothirds{\slantfrac{2}{3}}
+\def\onequarter{\slantfrac{1}{4}}
+\def\threequarters{\slantfrac{3}{4}}
+\def\ubvr{\hbox{$U\!BV\!R$}}
+\def\ub{\hbox{$U\!-\!B$}}
+\def\bv{\hbox{$B\!-\!V$}}
+\def\vr{\hbox{$V\!-\!R$}}
+\def\ur{\hbox{$U\!-\!R$}}
+\def\ion#1#2{#1$\;${\small\rm\@Roman{#2}}\relax}
+\def\nodata{\multicolumn{1}{c}{$\cdots$}}
+\newcount\lecurrentfam
+\def\LaTeX{\lecurrentfam=\the\fam \leavevmode L\raise.42ex
+\hbox{$\fam\lecurrentfam\scriptstyle\kern-.3em A$}\kern-.15em\TeX}
+\def\sizrpt{
+(\fontname\the\font): em=\the\fontdimen6\font, ex=\the\fontdimen5\font
+\typeout{
+(\fontname\the\font): em=\the\fontdimen6\font, ex=\the\fontdimen5\font
+}}
diff --git a/obsolete/macros/latex209/contrib/aasmacros/aastex.tex b/obsolete/macros/latex209/contrib/aasmacros/aastex.tex
new file mode 100644
index 0000000000..6d7f7c98ad
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aasmacros/aastex.tex
@@ -0,0 +1,1670 @@
+% MANUAL.TEX -- User input guide for AAS\TeX\ markup package.
+
+\documentstyle[aaspptwo]{article}
+
+\textwidth 7.3in
+\hoffset=-0.4in % This centers the extra wide page
+\voffset=-0.4in % This is because the printer I use prints too low...
+\def\baselinestretch{0.96}
+
+\hyphenation{com-pu-scripts}
+
+\begin{document}
+\twocolumn
+
+\title{The AAS\TeX\ Macros for\\
+ Manuscript Preparation}
+
+\author{Chris Biemesderfer}
+\affil{American Astronomical Society}
+\authoraddr{P.O. Box 1180, Oracle, AZ 85623}
+
+\vspace{.2in}
+
+The AAS has developed an author markup package to assist authors in
+preparing manuscripts for articles that
+are intended for submission to the AAS- and ASP-affiliated journals.
+It is important that the markup used by authors in electronic
+manuscripts (sometimes called compuscripts) be consistent and
+standardized so that such manuscripts can be widely accepted
+by the journals, ultimately so that they can become part of
+the normal production procedures.
+
+This guide contains basic instructions for creating
+manuscripts using the AAS\TeX\ markup package, which functions
+as substyles to the standard \LaTeX\ {\tt article} style.
+Authors are expected to be familiar with the editorial
+requirements of the journals so that they can make
+appropriate submissions, as well as to have at least
+a rudimentary knowledge of \TeX\ (for instance, knowing
+how to set up equations using \TeX\ commands).
+It is unrealistic to provide a tutorial on \TeX;
+readers who are unfamiliar with \TeX\ are advised
+that they will need additional sources of information.
+A number of useful publications are listed in the
+references section of this guide.
+
+\section{Introduction}
+
+The AAS\TeX\ author-prepared package was developed to provide
+authors with a consistent means of preparing articles for
+submission to AAS and ASP journals. The most important aspect of the
+package is that it defines the set of commands (called {\sl markup\/})
+that can be used to identify the structural elements of papers.
+When articles are marked up using this set of standard commands,
+the papers can be submitted electronically to the editorial
+offices, and it can also eventually be passed along to the publisher.
+
+For purposes of producing paper output, the AAS\TeX\ package contains
+a number of \LaTeX\ style files that produce variously formatted pages.
+There is a ``manuscript'' style, two ``preprint'' styles, and
+two ``plano table'' styles.
+The manuscript style is used for papers that are submitted to
+AAS and ASP journals for review.
+The preprint styles render articles in a compact form that may
+be suitable for distribution among colleagues.
+The plano table styles are used by authors who wish to submit
+camera-ready tables to the journals for publication.
+
+\section{General preparation instructions}
+
+Computer manuscripts must include all the necessary components,
+e.g., a title, author names and their affiliations,
+an abstract, a main body, tables, etc., in the proper
+order according to the editorial requirements of the journal.
+It is the author's responsibility to ensure that the article
+conforms to all editorial specifications regarding content and
+organization, mathematical formul\ae, chemical names, etc.
+
+In the sections that follow, we review some essential procedures
+that must be followed when preparing \TeX\ input.
+
+\subsection{Running text}
+
+Printing is different from typewriting, and \TeX\ is different
+from other word processing tools. This section consists of
+reminders (admonitions) about things that require special
+attention so that \TeX\ can format the input properly.
+
+The ends of words and sentences are marked by white space, and
+it doesn't matter how many spaces are typed; one is as good as 100.
+\TeX\ treats the end of a line in the input file as a space.
+
+Paragraphs are separated by blank lines.
+Don't hyphenate words in the input file;
+\TeX\ takes care of hyphenation automatically.
+Continue to hyphenate modifiers within a line of text, e.g.,
+``author-prepared copy.''
+
+Quotation marks should be typed as pairs of opening and
+closing single quotes, e.g., {\tt ``quoted text''};
+don't use double quotes ({\tt "bad form"}).
+
+Do not underline.
+In printing, text is emphasized by changing the type style,
+usually to {\sl slanted\/} or {\it italic\/} type.
+
+A number of common characters are interpreted as commands,
+and these must be entered specially, by preceding them with
+a backslash (\verb"\"): \$ \& \% \# \{ and \} must be typed
+\verb"\$" \verb"\&" \verb"\%" \verb"\#" \verb"\{" and \verb"\}".
+
+Authors should refrain from adding vertical or horizontal space.
+Concentrate on the content of the document and identifying its
+components with the structural markup commands.
+Authors should avoid creating new commands by using \LaTeX\ commands
+that create ``private'' markup commands that are not described in this guide.
+
+\subsection{Math}
+
+Mathematical expressions that are part of the running text are
+delimited by a single dollar sign (\$),
+e.g., \verb"$\pi r^2$" yields $\pi r^2$.
+To get the appropriately sized superscript or subscript in the
+roman font, use the \verb"\rm" command, e.g.,
+\verb"$J_{\rm HF}(t)$" produces $J_{\rm HF}(t)$.
+
+Displayed equations can be delimited in several ways.
+The most concise markup is to bracket the equation between
+\verb"\[" and \verb"\]" commands,
+which is equivalent to placing the formula in a {\tt displaymath}
+environment. These markup commands will produce
+{\sl unnumbered} equations.
+
+Numbered equations can be typeset by typing the formula in
+an {\tt equation} environment.
+A series of related equations that need vertical alignment,
+e.g., a derivation where alignment is wanted on the equal sign (=),
+can be typeset in an {\tt eqnarray} environment.
+
+While it is possible for authors to assign their own equation numbers,
+it is easier to let \LaTeX\ number them automatically.
+By default, \LaTeX\ will number equations sequentially from the
+beginning of the paper to the end.
+
+It is sometimes appropriate for equation numbering sequences
+to carry through sections of the paper only.
+Equations can be numbered ({\it sec-eqn}) by placing the command
+\verb"\eqsecnum" in the preamble of the document.
+
+\subsection{Tables}
+
+Tables are notoriously difficult to compose,
+and great care and patience are usually required
+before tabular information can be typeset satisfactorily.
+Tables should be placed in separate table environments,
+i.e., the tabular material must be enclosed within
+\verb"\begin{table}" and \verb"\end{table}" commands.
+Tables should have a title or caption and the correct
+number of descriptive column headings.
+A single horizontal rule should be set after the column headings
+with the \verb"\tableline" command.
+Do not insert any other horizontal or vertical
+lines in the body of the table.
+
+The {\tt planotable} environment is intended to make it easier
+to prepare camera-ready tables, although
+many authors will find {\tt planotable}
+suitable for {\sl all\/} tables.
+Authors who are using the plano tables styles to prepare
+camera-ready tables are urged to read the plano tables
+section carefully.
+
+Notes in tables should be marked by
+\verb"\tablenotemark";
+corresponding text should appear in a
+\verb"\tablenotetext" command.
+
+\subsection{Cross-referencing}
+
+Cross-referencing equations, tables, and figures
+in text depends upon the use of ``tags'', which
+are defined by the user. The \verb"\label" command is used
+to define cross-reference tags for \LaTeX; \verb"\ref" is used to
+refer to them. Tags are simply text strings that
+serve to label equations, tables, and figures, so that
+they may be referred to symbolically in the text.
+Authors should place \verb"\label" commands immediately
+after the markup command that starts the structure being referenced.
+References to page numbers should {\sl not} be made.
+
+\LaTeX\ keeps track of autonumbered counters and cross-reference
+information by maintaining an auxiliary file in the same working
+directory as the source file. The auxiliary file will have an
+extension of {\tt .aux}. This file should not be deleted, since
+subsequent \LaTeX\ processing uses the auxiliary data to resolve
+references, etc.
+
+The auxiliary file mechanism makes it necessary to run \LaTeX\
+on a given source file more than once to
+ensure that the cross-reference information has been properly resolved.
+This is most evident when changes are made that affect the number
+or the placement of equations, tables, and the like.
+\LaTeX\ will typically issue a warning message that advises
+the user to ``rerun to get cross-references right'',
+in which case, run \LaTeX\ again.
+If the error message appears after two successive \LaTeX\ runs,
+it is likely that a reference has been made to an undefined label.
+
+\subsection{Alternate style options}
+
+It is not the objective of the AAS\TeX\ project to develop \LaTeX\ styles
+that produce pages that mimic the appearance of specific journals.
+Since this is the case, we have chosen
+to provide several format options within the preprint styles
+themselves so that output format can be varied.
+The {\tt aaspp} substyle offers a single-spaced alternative for manuscripts,
+for instance. The primary motivation behind this idea is to provide some
+definitions that permit individuals to distribute ``pretty'' preprints
+with this package.
+In recognition of the fact that beauty is in the eye of the beholder,
+there is no intention that any of these styles should define pretty.
+
+Editors prefer a large typeface with
+adequate space between typed lines for technical editing marks and
+wide margins for editor and author comments.
+The use of the {\tt aasms} substyle will produce
+double-spaced, full-width output by default.
+
+Authors may prefer a denser form of output for distribution
+to colleagues who are primarily interested in reading the paper, as
+opposed to copy editing it.
+The {\tt aaspp} substyle is similar to the manuscript style,
+but it is single-spaced, and it is possible to use a smaller typeface.
+For wide text lines (as in the {\tt aaspp} style), it is advisable
+to use faces no smaller than 11 points ({\tt 11pt} substyle option).
+Author's remarks appear in the upper right corner of the title page,
+and no explicit page breaks are inserted in the front matter by the style.
+
+Another alternative is to include the \verb"\tighten" command
+in the document preamble when the {\tt aasms} substyle is used;
+its effect is to reduce the vertical spacing in the text.
+The rest of the formatting will be identical to the manuscript format.
+
+For institutional purposes, it may be preferable for preprints
+to be set in two columns, have running heads, etc.
+The {\tt aaspptwo} substyle may be used instead to produce
+two-column pages.
+This style can be used as is, but it can also serve as a point of
+departure for \LaTeX\ style writers at institutions that want
+preprints of this general nature.
+
+The preparation of ``plano tables'' (camera-ready, or {\sl planographic\/})
+is possible by using one of the style files \verb"aj_pt" or \verb"apjpt".
+These styles produce tables in formats suitable for the \aj\ and the
+\apj, respectively; the \verb"aj_pt" style could be used to create
+camera-ready tables for \pasp\ as well. These styles are intended
+primarily for the production of tables that the author wishes to
+submit camera-ready; they are not designed to produce journal pages.
+
+\section{Command descriptions}
+\setcounter{secnumdepth}{1}
+
+This section describes the commands in the AAS\TeX\ markup
+package that an author might enter in an electronic manuscript.
+In the interest of completeness, all the structural markup that
+is needed to identify components is discussed.
+The commands will be described in roughly the same order as they
+would appear in a manuscript.
+The reader will probably find it helpful to examine the
+sample papers (\verb"sample1.tex" and \verb"sample2.tex") as well.
+
+\subsection{Preamble}
+
+Most documents processed with a formatter have a collection of
+commands at the beginning of the file that establish settings
+for global parameters; this initialization section is sometimes
+called the {\sl preamble}. In \LaTeX\ manuscripts, the
+preamble is that portion of the file before the
+\verb"\begin{document}" command.
+
+The first piece of markup in the manuscript must declare the
+overall style of the document.
+\begin{quote}
+\verb"\documentstyle[12pt,aasms]{article}"
+\end{quote}
+The \verb"\documentstyle" command must appear first in any
+\LaTeX\ file, and this one specifies the main style to be
+the {\tt article} style using twelve point fonts,
+with modifications and additions for the {\tt aasms} substyle.
+It is preferable to use fonts at twelve points to prevent
+illegibility due to exceedingly long lines
+(too many characters on a line make it hard to read).
+The {\tt aasms} substyle will issue a warning message
+if the font size is smaller than twelve points, and the
+size will be set to twelve points; the file will still be processed.
+
+Tightening the vertical spacing
+in the text results in output that may be attractive for distribution
+to colleagues who are primarily interested in reading the paper, as
+opposed to copy editing it. Authors may include~a
+\begin{quote}
+\verb"\tighten"
+\end{quote}
+declaration in the preamble to direct the formatter to produce
+a somewhat denser manuscript.
+If the authors prefer not to insert this markup directly,
+the same effect can be achieved with the \verb"tighten"
+document substyle.
+\begin{quote}
+\verb"\documentstyle[aasms,tighten]{article}"
+\end{quote}
+
+Double-spaced output for referees and
+copy editors is the main objective of this style, hence
+the double-spacing occurs by default.
+Neither the \verb"\tighten" command nor the \verb"tighten"
+substyle should be used for manuscripts
+submitted to the editorial office for scientific review.
+
+\subsubsection{Preprint format}
+
+A single-column preprint format can be specified with the {\tt aaspp}
+substyle option.
+\begin{quote}
+\verb"\documentstyle[11pt,aaspp]{article}"
+\end{quote}
+The size of the typeface used is under author control by way of
+\LaTeX's {\tt NNpt} article subtyles (where {\tt NN} is 10, 11, or 12).
+Use of 10 point type is not recommended with the {\tt aaspp} style.
+
+Authors may wish to adjust vertical spacing within a preprint,
+for instance, double-spacing text while single-spacing tables.
+Authors who want to alternate between single and double
+spacing in the manuscript may use the following commands.
+\begin{quote}
+\verb"\singlespace"\\
+\verb"\doublespace"
+\end{quote}
+\verb"\singlespace" sets the vertical spacing to a smaller value,
+while \verb"\doublespace" causes double-spacing.
+These are different from \verb"\tighten", which is intended for use
+in the preamble of the article.
+
+\subsubsection{Two-column format}
+
+The {\tt aaspptwo} substyle has the principle function of setting
+up two-column output.
+\begin{quote}
+\verb"\documentstyle[aaspptwo]{article}"
+\end{quote}
+Although it is quite obvious, it is important to remember
+that text lines are considerably shorter when two of them are typeset
+side by side on a page. Long equations, wide tables and figures, and
+the like, may not typeset in this format without some adjustments.
+The expenditure of great effort to adapt copy and markup for
+two-column pages is probably counterproductive.
+Remember that the main
+goal of this package at this point is to produce ``correct'' draft
+(or referee) format pages;
+it is the responsibility of the editors and publishers to
+produce publication format papers for the journals.
+
+The {\tt aaspptwo} substyle does not
+impose a format for the article's front matter,
+although there is often merit in setting the title, author, abstract,
+and keyword material on a separate page at full text width.
+The author may supply the
+\verb"\twocolumn" command wherever desired.
+\begin{quote}
+\verb"\twocolumn"
+\end{quote}
+Note that the two-column format begins at the point \verb"\twocolumn"
+appears in the text, and if that point is before the front matter,
+title and author and so forth will be typeset in two-column mode
+along with the rest of the paper; that's how this manual is prepared,
+for example.
+For purposes of producing ``pretty'' output, it is probably desirable
+to put the \verb"\twocolumn" command after the abstract and keywords,
+just before the body of the paper.
+If \verb"\twocolumn" is not specified explicitly in {\tt aaspptwo}
+style documents, the introductory material of the paper will be set
+in one-column mode; the first \verb"\section" command (presumably
+demarcating the beginning of the main body of the article) will
+engage the two-column mode.
+
+\subsubsection{Slug line data}
+
+Journal and article identification information is established by the
+editorial staff. The following markup will be used by personnel at the
+editorial office to record slug-line data;
+these commands appear in the manuscript preamble.
+These pieces of markup can be used to facilitate communication between
+the editorial office and the publisher.
+
+\begin{quote}
+\verb"\received{RECEIPT DATE}"\\
+\verb"\revised{REVISION DATE}"\\
+\verb"\accepted{ACCEPT DATE}"
+\end{quote}
+
+For preprints and manuscripts in draft/referee format, etc.,
+the slug-line information is irrelevant and generally in those styles
+of that nature, the data are never formatted or printed.
+Receipt and acceptance dates (or blank lines representing them) are
+printed on {\tt aasms} articles, that is, on true manuscripts.
+The {\tt aaspp} and {\tt aaspptwo} styles do not print the rules or the dates.
+Authors do not know what these dates are, however,
+so there is no reason for the author to include
+\verb"\received" and \verb"\accepted" commands in manuscripts.
+Editorial staff will insert the correct information as appropriate.
+
+\begin{quote}
+\verb"\journalid{VOL}{JOURNAL DATE}"\\
+\verb"\articleid{START PAGE}{END PAGE}"\\
+\verb"\paperid{MANUSCRIPT ID}"
+\end{quote}
+
+The \verb"\journalid" and \verb"articleid" commands are used to identify
+the volume and page numbers of a scheduled article.
+The manuscript identification number used to track the manuscript is
+specified in the \verb"\paperid" command.
+
+\begin{quote}
+\verb"\cpright{TYPE}{YEAR}"\\
+\verb"\ccc{CODE}"
+\end{quote}
+Copyright information is specified through the commands \verb"\cpright"
+and \verb"\ccc". The ``type'' of copyright and the corresponding year
+are given in \verb"\cpright"; valid copyright types are as follows.
+\begin{quote}
+\begin{tabular}{l@{\quad}p{2in}}
+\tt AAS & Copyright has been asigned to the AAS.\\
+\tt ASP & Copyright has been asigned to the ASP.\\
+\tt Crown & Crown (UK) copyright has been asigned to the AAS.\\
+\tt PD & The article is in the public domain.\\
+\tt none & No copyright is claimed for the article.\\
+\end{tabular}
+\end{quote}
+The copyright type is case-sensitive, so the type string must be
+entered exactly as given above.
+The Copyright Clearing Center code may be given in the \verb"\ccc"
+command; the code is taken as regular text, so any special characters,
+notably `\$', must be properly specified.
+
+Authors are invited to supply running head information.
+There are generally two different kinds of data in running heads;
+what is called here the left head contains an author list (last
+names, possibly truncated as ``et al.''), while the right head
+is an abbreviated form of the paper title.
+\begin{quote}
+\verb"\lefthead{TEXT}"\\
+\verb"\righthead{TEXT}"
+\end{quote}
+Editors and publishers impose varying requirements
+on the brevity of these data;
+authors are asked to keep these items as short as possible.
+
+Authors who wish to include a short remark on the title page,
+such as the name and date of the journal in which an article
+has been scheduled, may do so with the following command.
+\begin{quote}
+\verb"\slugcomment{TEXT}"
+\end{quote}
+In the {\tt aasms} style, such comments appear after the dates;
+in the {\tt aaspp} style, they are placed at the upper right corner
+of the title page.
+
+\subsection{Starting the main body}
+
+None of the markup that appears in the preamble actually typesets
+anything; the preamble is only a control section.
+The author must include a
+\begin{quote}
+\verb"\begin{document}"
+\end{quote}
+command to identify the beginning of the main textual
+portion of the manuscript.
+
+\subsection{Title, byline, abstract, etc.}
+
+Title and author identification are by way of the markup commands
+\verb"\title" and \verb"\author".
+The authors' principal affiliation is specified with
+a separate command \verb"\affil".
+Each \verb"\author" command
+should be followed by a corresponding \verb"\affil".
+\begin{quote}
+\verb"\title{LUCID TEXT}"\\[.5ex]
+\verb"\author{NAME(S)}"\\
+\verb"\affil{AFFILIATION}"\\
+\verb"\authoraddr{ADDRESS}"\\[.5ex]
+\verb"\and"
+\end{quote}
+
+Line breaks are permitted in the title if the author wishes
+to specify them with the \verb"\\" command. Long titles will
+be broken automatically, so the \verb"\\" markup is not required.
+If the title is explicitly broken over several lines, the
+preferred style for titles in AAS and ASP journals is the so-called
+``inverted pyramid'' style. In this style, the longest line
+is the first (or top) line, and each succeeding line is shorter.
+The text of the title should be entered in mixed case;
+it will be converted to uppercase by the publisher.
+Footnotes are permissible in titles; be careful to ensure that
+alternate affiliations (see below) are properly numbered if a
+footnote to the title is specified.
+
+Authors' names are given in \verb"\author" commands,
+and should be entered in mixed case.
+Names that appear together in the author list for authors who
+have the same primary affiliation should be specified in a single
+\verb"\author" command.
+Each author group (\verb"\author" command)
+should be followed by an \verb"\affil" command, giving the principal
+affiliation of that author. Physical and postal address information
+for the institution specified may be included with its name.
+The address can be broken over several lines by using the
+\verb"\\" command to indicate the line breaks.
+Usually, however, postal information will fit on one line.
+When there is more than one \verb"\author" command, the last
+one should be preceded by an \verb"\and" command.
+
+When there is a lengthy author list, all authors' names may be
+specified in a single \verb"\author" command, with affiliations
+specified using the \verb"\altaffilmark" mechanism described below.
+In this case, no \verb"\affil" commands would be used, and the
+affiliations would all be listed in a footnote block at the bottom
+of the title page. The style file performs this formatting.
+
+Postal addresses for individual authors may be specified in
+\verb"\authoraddr" commands. This command does not produce
+any formatted text in most AAS\TeX\ styles, and can be used to specify the
+corresponding address of the first author for purposes of
+editorial communication.
+
+Authors often have affiliations in addition to their principal employer,
+and these are specified with the \verb"\altaffilmark"
+and \verb"\altaffiltext" commands.
+These behave like the \verb"\footnotemark"
+and \verb"\footnotetext" commands of \LaTeX.
+\verb"\altaffilmark" is appended to author's names in the \verb"\author"
+lists, and generates superscript identification numbers.
+The text for the individual alternate affiliations is generated by the
+\verb"\altaffiltext" command.
+\begin{quote}
+\verb"\altaffilmark{TAG NUMBER(S)}"\\
+\verb"\altaffiltext{NUMERICAL TAG}{TEXT}"
+\end{quote}
+It is up to the author to make sure that \verb"\altaffilmark" numbers
+attached to authors' names correspond to the correct alternate affiliation,
+i.e., that each {\small TAG NUMBER} match the {\small NUMERICAL TAG} for
+the corresponding {\small TEXT}.
+
+\subsubsection{Abstract}
+
+The paper abstract should be enclosed in an {\tt abstract} environment.
+\begin{quote}
+\verb"\begin{abstract}"\\
+{\it abstract text\/}\\
+\verb"\end{abstract}"
+\end{quote}
+
+\subsubsection{Keywords}
+
+Keywords, subject headings, etc., are accommodated
+as a single piece of text.
+\begin{quote}
+\verb"\keywords{TEXT}"
+\end{quote}
+Authors must supply keywords delimited by the appropriate punctuation
+required by the journal. Keywords should be specified in alphabetical order.
+The \verb"\keywords" command
+supplies the proper leading text (``Keywords:'', ``Subject headings:'',
+etc.), according to the style.
+
+\subsection{Sections}
+
+The {\tt article} style for AAS\TeX\ manuscripts supports four levels of
+sectioning.
+\begin{quote}
+\verb"\section{HEADING}"\\[.5ex]
+\verb"\subsection{HEADING}"\\[.5ex]
+\verb"\subsubsection{HEADING}"\\[.5ex]
+\verb"\paragraph{HEADING}"
+\end{quote}
+Section headings should be given in mixed case.
+Note that these commands delimit sections by marking the
+{\sl beginning\/} of each section;
+there are not separate commands to identify the ends.
+
+In addition, AAS\TeX\ manuscript styles support an
+\verb"\acknowledgments" section.
+\begin{quote}
+\verb"\acknowledgments"
+\end{quote}
+In the AAS\TeX\ substyles, acknowledgments are set off from the
+concluding main body text simply by vertical space
+(no heading or type size change).
+For use in producing output for specific journals,
+this command might generate text saying ``Acknowledg[e]ments''.
+
+\subsubsection{Appendices}
+
+When one or more appendices are needed in a paper, the end of the
+main body text must be marked.
+\begin{quote}
+\verb"\appendix"
+\end{quote}
+Note that the \verb"\appendix" command has no arguments;
+sections in the appendix must be headed with \verb"\section"
+commands containing the section headings, as described before.
+The \verb"\appendix" command takes care of a number of internal
+housekeeping concerns, such as identifying sections with letters
+instead of numerals, resetting the equation counter, etc.
+
+\subsection{Citations}
+
+Citations in the text may be called out with either a \verb"\markcite"
+command or a \verb"\cite" command.
+\begin{quote}
+\verb"\markcite{TEXT}"\\[.5ex]
+\verb"\cite{TAG}"
+\end{quote}
+Which of these is used depends on the form chosen for the reference list
+(described below). \verb"\markcite" corresponds to the use of the
+{\tt references} environment, while \verb"\cite" would be used in
+conjunction with {\tt thebibliography}.
+
+The conventional method used by authors to manage the citations and
+reference list in a paper is a manual one. For these authors, the
+{\tt references} environment and \verb"\markcite" are appropriate.
+The text supplied in the \verb"\markcite" command is the text that
+will be inserted in the body at that point; this text should include
+any necessary punctuation.
+
+\LaTeX's {\tt thebibliography} environment allows authors to identify
+references symbolically using unique tags (the author makes these up).
+If this mechanism is used, the {\small TAG} given in the \verb"\cite"
+command must correspond to a {\small TAG} given in a \verb"\bibitem"
+command in the {\tt thebibliography} environment (see below).
+
+In many cases, citations may be called out explicitly by the author
+without any markup, since they are usually just running text
+for AAS and ASP journals. However, the use of \verb"\markcite" is still
+encouraged, even for journals where no special formatting of
+citation call-outs is required.
+This will make the electronic texts more useful in the future
+in the event that they are perused with on-line browsers.
+
+\subsection{Equations}
+
+Displayed equations can be typeset in many ways using the standard
+displayed math environments of \LaTeX;
+these three are probably of greatest use.
+\begin{quote}
+\verb"\begin{displaymath}"\\
+\verb"\end{displaymath}"\\[.5ex]
+\verb"\begin{equation}"\\
+\verb"\end{equation}"\\[.5ex]
+\verb"\begin{eqnarray}"\\
+\verb"\end{eqnarray}"
+\end{quote}
+The {\tt displaymath} environment will break out a single,
+unnumbered formula. The equation will appear the same if it
+is set in an {\tt equation} environment, and it will be
+autonumbered by \LaTeX.
+In order to set several formul\ae\ in which vertical alignment
+is required, use the {\tt eqnarray} environment.
+
+Authors occasionally wish to group related equations together and
+identify them with letters appended to the same equation number,
+as opposed to having each with a separate numeral.
+When this is desired, such related equations should still be set
+in {\tt equation} or {\tt eqnarray} environments (whichever is
+appropriate may be used), and this grouping should be placed within
+a {\tt mathletters} environment.
+\begin{quote}
+\verb"\begin{mathletters}"\\
+{\it {\tt equation} or {\tt eqnarray} environment(s)\/}\\
+\verb"\end{mathletters}"
+\end{quote}
+
+It is possible to override \LaTeX's automatic numbering within
+{\tt equation} or {\tt eqnarray} environments.
+\begin{quote}
+\verb"\eqnum{TEXT}"
+\end{quote}
+When \verb"\eqnum" is specified inside an {\tt equation} environment,
+or on a particular equation within an {\tt eqnarray}, the text supplied
+as an argument to \verb"\eqnum" is used as the equation identifier.
+\LaTeX's equation counter is {\sl not\/} incremented when \verb"\eqnum"
+is used.
+\verb"\eqnum" must be used {\sl inside\/} the environment.
+
+When unnumbered equations are desired, authors can use either the
+{\tt displaymath} environment (for single displayed equations) or place
+a \verb"\nonumber" command before the equation delimiter (\verb"\\")
+in a particular equation in an {\tt eqnarray}.
+\LaTeX's equation counter is {\sl not\/} incremented when
+\verb"\nonumber" is used.
+
+If, as a consequence of the use of \verb"\eqnum" or \verb"\nonumber",
+\LaTeX's equation counter gets out of the author's intended sequence,
+the counter may be reset to a particular value.
+\begin{quote}
+\verb"\setcounter{equation}{NUMBER}"
+\end{quote}
+The equation counter should be set to the number corresponding to the
+last equation that was formatted, so it is most appropriate for this
+command to appear immediately after an {\tt equation} or {\tt eqnarray}
+environment ends.
+\verb"\setcounter{equation}" must be used {\sl outside\/} the math
+environments.
+
+Sometimes it is appropriate to number equations by section,
+rather than sequentially through the whole paper.
+When this is required,
+\begin{quote}
+\verb"\eqsecnum"
+\end{quote}
+should be specified in the document preamble.
+As is the case with tightening the interline spacing
+(\verb"\tighten", above), authors need not insert
+the extra markup command in the text.
+The same effect can be achieved with the \verb"eqsecnum"
+document substyle.
+\begin{quote}
+\verb"\documentstyle[aasms,eqsecnum]{article}"
+\end{quote}
+
+\subsection{Bibliography}
+
+As discussed briefly in the preceding section on citations,
+there are two main methods for managing citations and references.
+Many authors are comfortable with the standard
+process of entering citations in the proper format directly
+in the body of an article, and then organizing the reference
+list themselves.
+Such authors would use \verb"\markcite" for the citation call-outs
+in the text, and employ the {\tt references} environment for the
+reference list. The {\tt references} environment simply sets off
+the list of references and adjusts spacing parameters.
+\begin{quote}
+\verb"\begin{references}"\\
+\verb"\reference" {\it bibliographic data\/}\\
+\verb" ."\\
+\verb" ."\\
+\verb"\end{references}"
+\end{quote}
+Each reference is preceded by a \verb"\reference" command.
+
+Observe that the {\it bibliographic data\/} supplied by the author must
+conform to the standards of the journal. We have elected not to burden
+authors with tedious markup commands
+to delimit the bibliographic fields because many of the journals we have
+targeted in this project have agreed to reduce typographic overhead (bolding,
+italicizing, etc.) in reference lists (Abt 1990).
+It is the responsibility of the author to get these fields in the proper
+order with the correct punctuation; the information will be typeset as is,
+i.e., in roman with no size or style changes.
+
+It is also possible to use the semantics
+of \LaTeX's {\tt thebibliography} environment,
+marking citations with \verb"\cite" and associating references
+with them via \verb"\bibitem". The \verb"\cite"-\verb"\bibitem"
+mechanism associates citations and references symbolically
+while maintaining proper citation syntax within the paper.
+The author must create the citation label for each reference
+in proper journal format in the \verb"\bibitem" command.
+\begin{quote}
+\verb"\begin{thebibliography}"\\
+\verb"\bibitem[LABEL]{TAG} \reference" {\it bibliographic data\/}\\
+\verb" ."\\
+\verb" ."\\
+\verb"\end{thebibliography}"
+\end{quote}
+where {\small LABEL} must adhere to journal standards, e.g., ``Abt 1986''.
+Note that it is not possible to use \verb"\bibitem"s
+within the {\tt references} environment,
+nor will \verb"\cite" commands work properly in the main body
+if \verb"\bibitem"s are not properly specified.
+This technique can be a bit tricky, and there are limitations on the
+way that the citation {\small LABEL} is formatted.
+Authors are advised to consult the \LaTeX\ manual (Lamport 1985).
+
+Citation management can be complex, and systems have been
+developed to assist authors in preparing bibliographies.
+The program that manages references within the \TeX\ family
+is called BIB\TeX, and it is designed to work in conjunction
+with the citation and reference list capabilities of \LaTeX.
+At the present time, there
+is no compelling reason to force an implementation based on BIB\TeX,
+although it should be possible to build reference lists with
+BIB\TeX\ if authors choose.
+(It is also possible to define a bibliographic style for BIB\TeX\ so
+that citations and reference lists are formatted correctly automatically.)
+
+An identifier denoting that the article was
+prepared with the AAS\TeX\ package appears as a footnote
+on the last page of references.
+
+\subsubsection{Abbreviations for journals}
+
+There are markup commands for many of the oft-referenced journals so that
+authors may use the markup names as a shorthand rather than having to look
+up a particular journal's specific abbreviation.
+In principle, all the journals should be using the
+same abbreviations as well, but it is fair to anticipate some changes in the
+specific abbreviations before a set is finally settled on. As long as
+these commands are kept up to date, authors need not be concerned about
+such editorial preferences and changes.
+
+\begin{center}
+\begin{tabular}{ll}
+\verb"\aj" & Astronomical Journal\\
+\verb"\araa" & Annual Review of Astronomy\\
+ & \hspace*{1em} and Astrophysics\\
+\verb"\apj" & Astrophysical Journal\\
+\verb"\apjl" & \rule[.5ex]{2em}{.4pt}, Letters to the Editor\\
+\verb"\apjs" & \rule[.5ex]{2em}{.4pt}, Supplement Series\\
+\verb"\ao" & Applied Optics\\
+\verb"\apss" & Astrophysics and Space Science\\
+\verb"\aap" & Astronomy and Astrophysics\\
+\verb"\aaps" & \rule[.5ex]{2em}{.4pt}, Supplement Series\\
+\verb"\azh" & Astronomicheskii Zhurnal\\
+\verb"\baas" & Bulletin of the AAS\\
+\verb"\jrasc" & Journal of the RAS of Canada\\
+\verb"\memras" & Memoirs of the RAS\\
+\verb"\mnras" & Monthly Notices of the RAS\\
+\verb"\pra" & Physical Review A: General Physics\\
+\verb"\prb" & Physical Review B: Solid State\\
+\verb"\prc" & Physical Review C:\\
+\verb"\prd" & Physical Review D:\\
+\verb"\prl" & Physical Review Letters\\
+\verb"\pasp" & Publications of the ASP\\
+\verb"\pasj" & Publications of the ASJ\\
+\verb"\qjras" & Quarterly Journal of the RAS\\
+\verb"\skytel" & Sky and Telescope\\
+\verb"\sovast" & Soviet Astronomy\\
+\verb"\ssr" & Space Science Reviews\\
+\verb"\zap" & Zeitschrift f\"ur Astrophysik\\
+\end{tabular}
+\end{center}
+
+\subsection{Tables}
+
+There is support in the AAS\TeX\ package for tables via two mechanisms:
+\LaTeX's standard {\tt table} and {\tt tabular} environments,
+and a {\tt planotable} environment that facilitates the formatting
+of lengthy tabular material. Short tables may be marked up using
+either mechanism; long tables will require the use of {\tt planotable}.
+
+\LaTeX\ permits the preparation of fairly complex tables with
+arbitrary spacing, straddle heads and rules, and the like.
+Authors who need to specify complicated column headings and
+so forth are advised to consult the \LaTeX\ manual (Lamport 1985)
+for details.
+Most of the capabilities are applicable to AAS\TeX's {\tt planotable}
+environment as well as \LaTeX's {\tt tabular}.
+
+\subsubsection{Long tables, plano tables}
+
+This section describes the use of the {\tt planotable} environment.
+This environment is so named because it was originally developed to
+aid authors in preparing camera-ready tables for an article; such
+camera-ready material would be produced in the same way as planographic
+figures, hence the term ``plano table''.
+
+There are several desiderata that are somewhat above and beyond LaTeX's
+{\tt tabular} environment that facilitate the formatting of such tables.
+Among these are breaking long tables across pages, using footnotes
+in a table, specifying comments and references for tables, etc.
+
+There are special \LaTeX\ substyle options within the AAS\TeX\ package
+that authors can use to produce plano table output suitable for
+photographic reproduction in specific AAS and ASP journals; these are the
+\verb"aj_pt" and \verb"apjpt" substyles.
+\begin{quote}
+\verb"\documentstyle[aj_pt]{article}"\\[.5ex]
+\verb"\documentstyle[apjpt]{article}"
+\end{quote}
+When tabular material is prepared with one of these style files,
+the pages produced will be suitable for submission to the
+journal as camera-ready ``art''.
+These special styles are intended for producing plano tables {\sl only\/};
+manuscripts should {\sl not\/} be formatted with the \verb"aj_pt" or
+the \verb"apjpt" substyle;
+Plano tables should be formatted separately from the manuscript.
+
+Very long tables can be formatted within manuscripts using the same
+markup commands as plano tables; the output looks different, of course.
+The {\tt planotable} environment is delimited by \LaTeX's familiar
+\verb"\begin" and \verb"\end" constructs.
+\begin{quote}
+\verb"\begin{planotable}{COLS}"\\
+\verb"\end{planotable}"
+\end{quote}
+{\small COLS} specifies the justification for each column.
+One of the letters `l', `c', or `r' is given for each column,
+indicating left, center, or right justification. Authors are
+referred to the \LaTeX\ manual (Lamport 1985) for further information.
+
+There are several items in a {\tt planotable} environment that
+must be given before the data for the table.
+
+\begin{quote}
+\verb"\tablewidth{DIMEN}"\\
+\verb"\tablecaption{TEXT}"
+\end{quote}
+
+The width of a plano table is defined by \verb"\tablewidth";
+the default width is the width of the body text.
+The table can be set to its natural width by specifying
+a {\small DIMEN} of 0pt.
+
+The caption (actually, the title) of the table is specified
+in \verb"\tablecaption".
+The intent is for the text of \verb"\tablecaption" to be brief;
+explanatory notes may be specified in the end notes to the table
+(\verb"\tablecomments", see below).
+
+\begin{quote}
+\verb"\tablehead{TEXT}"\\
+\verb"\colhead{HEADING}"
+\end{quote}
+
+Column headings are specified within a \verb"\tablehead".
+Within the \verb"\tablehead", each column heading can be given
+in a \verb"\colhead", which will ensure that the heading is centered
+on the natural width of the column; this is the typical disposition
+of column headings, and the use of \verb"\colhead" is encouraged.
+There should be a heading for each column, so there should be as
+many \verb"\colhead" commands in the \verb"\tablehead" as there
+are data columns.
+If more complicated column headings are required,
+any valid {\tt tabular} commands that constitute a proper
+head line for the table may be used.
+Consult the \LaTeX\ manual (Lamport 1985) for details about using
+the {\tt tabular} environment to prepare tables.
+
+\begin{quote}
+\verb"\tableheadfrac{NUM}"
+\end{quote}
+
+It is possible that a complicated table heading will overflow
+the vertical space allotted for the table heading.
+The fraction of the page allocated
+for the table heading may be changed with \verb"\tableheadfrac".
+The {\small NUM} argument to \verb"\tableheadfrac" should be the
+decimal fraction of the page used for heading information.
+The default value is .1, meaning that 10\% of the page height
+is reserved for the table heading. It should rarely be necessary
+to change this value.
+
+After the table title and column headings are specified, data lines
+can be entered.
+There are some concessions that must be made in the markup language
+in order to enable the automatic page breaking.
+\begin{quote}
+\verb"\startdata"
+\end{quote}
+The body of the plano table (the beginning of the data lines) is
+indicated by a \verb"\startdata" command.
+\verb"\startdata" produces a table title (caption), the column headings
+are formatted, and tabular formatting is engaged.
+
+\begin{quote}
+\verb"\nl"\\
+\verb"\tablevspace{DIMEN}"
+\end{quote}
+
+Data elements within a row of the table are separated with \& (ampersand)
+characters. The end of each row is indicated with \verb"\nl".
+Extra vertical space can be inserted between rows with a
+\verb"\tablevspace" command; the argument is a dimension,
+and may be specified in any units that are legitimate in \LaTeX.
+
+\begin{quote}
+\verb"\tablebreak"\\
+\verb"\nodata"
+\end{quote}
+
+If a page break needs to be forced in a plano table,
+\verb"\tablebreak" should be used instead of \verb"\nl".
+This is sometimes necessary when several rows of data are
+associated with a single object or item; such logical groupings
+should not be broken across pages, and \verb"\tablebreak" can
+be used to ensure that the page breaks are rational in these cases.
+
+The journals often require that elements for which there are no data
+be explicitly marked. This is to differentiate such elements from
+blank elements, which are frequently interpreted as implicitly
+repeating the entry in the corresponding element in the row preceding.
+Data elements for which there are no data should contain
+a \verb"\nodata" command; an appropriate symbol will be placed in
+that data element.
+
+Within the plano table body, two kinds of ``specialty'' heads are
+recognized.
+\begin{quote}
+\verb"\cutinhead{TEXT}"\\
+\verb"\sidehead{TEXT}"
+\end{quote}
+
+A cut-in head is a piece of text that is centered on the table width;
+it is spaced above and below from the data rows that precede and
+follow it, and there may be rules associated, depending on the
+journal or manuscript style. All of these formatting particulars
+are managed by the style files. The author need only specify the
+text to be centered with a \verb"\cutinhead" command.
+Similarly, a side head is a piece of text that is left-justified.
+
+Table footnotes (more properly, table {\sl endnotes\/})
+may be used in the {\tt planotable} environment;
+their use is described in detail in the section on
+{\it Table footnotes\/}, below.
+The markup commands for such endnotes are as follows.
+\begin{quote}
+\verb"\tablenotemark{TAG LETTER(S)}"\\
+\verb"\tablenotetext{ALPHA TAG}{TEXT}"\\
+\verb"\tablecomment{TEXT}"\\
+\verb"\tablerefs{TEXT}"
+\end{quote}
+
+It is possible to override \LaTeX's automatic numbering within the
+{\tt planotable} environment.
+\begin{quote}
+\verb"\tablenum{TEXT}"
+\end{quote}
+When \verb"\tablenum" is specified inside a {\tt planotable} environment,
+the text supplied as an argument to \verb"\tablenum" is used as the
+table identifier.
+\LaTeX's equation counter is {\sl not\/} incremented when \verb"\tablenum"
+is used.
+\verb"\tablenum" must be used {\sl inside\/} the {\tt planotable} environment.
+
+\subsubsection{Short tables}
+
+Short tables (smaller than one manuscript page)
+may be marked and composed using the standard \LaTeX\ tools for tables.
+Tables should appear in {\tt table} environments.
+\begin{quote}
+\verb"\begin{table}"\\
+\verb"\end{table}"
+\end{quote}
+The {\tt table} environment encloses not only the tabular
+material but also any title (caption) or footnote information
+associated with the table.
+
+Titles or captions for short tables are indicated with
+\begin{quote}
+\verb"\caption{TEXT}"
+\end{quote}
+Tables will be identified with arabic numerals, e.g., ``Table 2'';
+the identifying text, including the number, is generated automatically
+by \verb"\caption" within the \verb"table" environment.
+
+Tabular information is typeset within the
+{\tt tabular} environment.
+\begin{quote}
+\verb"\begin{tabular}{COLS}"\\
+\verb"\end{tabular}"
+\end{quote}
+where {\small COLS} specifies the justification for each column.
+One of the letters `l', `c', or `r' is given for each column,
+indicating left, center, or right justification.
+Consult the \LaTeX\ manual (Lamport 1985) for details about using
+the {\tt tabular} environment to prepare tables.
+There should be only one {\tt tabular} table per {\tt table} environment.
+If the journal requests manuscripts with only one table per page,
+the author may need to insert a \verb"\clearpage" command after
+especially short tables.
+
+There is a \verb"\tableline" command for use in {\tt tabular}
+environments.
+\begin{quote}
+\verb"\tableline"
+\end{quote}
+This command produces the horizontal rule(s) between the column headings
+and the body of the table.
+Authors are discouraged from using any \verb"\hlines" themselves;
+vertical rules are typically forbidden by editorial preference.
+
+It is possible to override \LaTeX's automatic numbering within the
+{\tt table} environment.
+\begin{quote}
+\verb"\tablenum{TEXT}"
+\end{quote}
+When \verb"\tablenum" is specified inside a {\tt table} environment,
+the text supplied as an argument to \verb"\tablenum" is used as the
+table identifier.
+\LaTeX's equation counter is {\sl not\/} incremented when \verb"\tablenum"
+is used.
+\verb"\tablenum" must be used {\sl inside\/} the {\tt table} environment.
+
+\subsubsection{Table footnotes}
+
+AAS\TeX\ supports footnotes (endnotes) that are associated with tables;
+this support applies to both the {\tt planotable} environment
+and the standard \LaTeX\ {\tt table} environment.
+Footnotes for tables are usually identified by lower case letters
+rather than numbers.
+Marking and assigning associated text is achieved with
+the \verb"\tablenotemark" and \verb"\tablenotetext"
+commands, in which the note identifier is required
+(cf.\ \verb"\altaffilmark" and \verb"\altaffiltext").
+The \verb"\tablenotetext" {\sl must} be specified before
+the enclosing \verb"\end{table}", since the text of
+notes to tables are displayed by that command.
+\begin{quote}
+\verb"\tablenotemark{TAG LETTER(S)}"\\
+\verb"\tablenotetext{ALPHA TAG}{TEXT}"
+\end{quote}
+Note that the {\small TAG LETTER} should be the same as the
+{\small ALPHA TAG} for the corresponding {\small TEXT}.
+It is the responsibility of the author to get the correspondence correct.
+
+AAS\TeX\ also supports special kinds of table endnotes.
+Sometimes authors tabulate things which have corresponding references,
+and it may be desirable to associate these references with the table
+rather than (or in addition to) the formal reference list.
+Occasionally, authors wish to append a short paragraph of explanatory
+notes that pertain to the entire table, but which are different than
+the caption.
+\begin{quote}
+\verb"\tablerefs{REFERENCE LIST}"\\
+\verb"\tablecomments{TEXT}"
+\end{quote}
+
+The table endnotes are coupled to the table in which they occur, rather
+than being associated with a particular page, and they are printed with
+the table (relatively close to the caption) instead of appearing at the
+extreme bottom of the page. This is done to ensure that the notes wind
+up on the same page as the table, since tables are floats and can migrate
+from one page to another.
+
+\subsection{Figures}
+
+At this time, the most widely used means of including
+non-textual data in electronic manuscripts is to insert such
+information as PostScript.\footnote{PostScript
+is a registered trademark of Adobe Systems Incorporated.}
+There is limited support for handling PostScript figures in
+this version of the AAS\TeX\ markup package.
+
+If the author wishes for the PostScript figure to be inserted in the
+page being produced, it is necessary to use the {\it dvips\/} program.
+This program is available in the public domain via anonymous FTP
+from labrea.stanford.edu.
+It is also necessary that the graphics files being included conform
+to the Encapsulated PostScript standard (Adobe 1990).
+Encapsulated PostScript will be referred to as `EPS' in what follows.
+
+There are three commands for including EPS files in AAS\TeX\ manuscripts,
+and these should be placed within a {\tt figure} environment.
+\begin{quote}
+\verb"\begin{figure}"\\
+\verb"\plotone{EPSFILE}"\\
+\verb"\plottwo{EPSFILE}{EPSFILE}"\\
+\verb"\plotfiddle{EPSFILE}{VSIZE}"\\
+\hspace*{2em}\verb"{ROT}{HSF}{VSF}{HTRANS}{VTRANS}"\\
+\verb"\caption{TEXT}"\\
+\verb"\end{figure}"
+\end{quote}
+\verb"\plotone" inserts the graphic in the named {\small EPSFILE},
+scaled (in both dimensions) so that the horizontal
+dimension fits in the body text width;
+the vertical dimension is scaled to maintain the aspect ratio.
+\verb"\plottwo" inserts two plots next to each other.
+Scale factors are determined automatically from information in the
+EPS file.
+
+For the adventuresome, there is also \verb"\plotfiddle", which can be
+used to override any automatic scaling, or to compensate for the fact
+that scaling data in the EPS file may be erroneous.
+When this method is used, the author must specify the {\sl vertical\/}
+space allotment for the graphic.
+The scaling and placement of the figure are controlled by these parameters:
+\begin{quote}
+\begin{tabular}{l@{\quad}p{2in}}
+\tt VSIZE & vertical white space to allow for plot (\LaTeX\ dimension)\\
+\tt ROT & rotation angle (degrees)\\
+\tt HSF & horizontal scale (percentage)\\
+\tt VSF & vertical scale (percentage)\\
+\tt HTRANS & horizontal translation (PS points)\\
+\tt VTRANS & vertical translation (PS points)\\
+\end{tabular}
+\end{quote}
+PostScript points are 1/72 inches, so an {\small HTRANS} of 72 moves
+the graphic 1 inch to the right. The PostScript reference point is
+the lower left corner of the page, so a {\small VTRANS} of 72 moves
+the graphic {\sl up} 1 inch.
+
+Authors are referred to the submission instructions for the appropriate
+editorial office if EPS figures will be submitted along with a manuscript
+via email. These instructions can be obtained by sending a request by
+email to one of the addresses given in the {\small README} file.
+
+Figures may still be submitted on paper in the usual way,
+with or without a companion paper manuscript.
+When an author submits figures on paper, only the figure captions
+need to be generated with the text of the paper.
+They should be produced by using the \verb"\caption" command within an
+otherwise empty {\tt figure} environment.
+\begin{quote}
+\verb"\begin{figure}"\\
+\verb"\caption{TEXT}"\\
+\verb"\end{figure}"
+\end{quote}
+When the {\tt figure} environment is used, the figure identification,
+e.g., ``Figure 1'', is generated automatically by \verb"\caption".
+It is usually acceptable for several figure captions to appear
+on the same page.
+
+It is possible to override \LaTeX's automatic numbering within the
+{\tt figure} environment.
+\begin{quote}
+\verb"\figurenum{TEXT}"
+\end{quote}
+When \verb"\figurenum" is specified inside a {\tt figure} environment,
+the text supplied as an argument to \verb"\figurenum" is used as the
+figure identifier.
+\LaTeX's equation counter is {\sl not\/} incremented when \verb"\figurenum"
+is used.
+\verb"\figurenum" must be used {\sl inside\/} the {\tt figure} environment.
+
+Footnotes are {\sl not} supported for figures.
+
+\subsection{Miscellaneous}
+
+When discussing atomic species, ionization levels can be indicated
+with the following command.
+\begin{quote}
+\verb"\ion{ELEMENT}{LEVEL}"
+\end{quote}
+The ionization state is specified as the second argument,
+and should be given as a numeral.
+For example, \ion{Ca}{3} is specified by typing \verb"\ion{Ca}{3}".
+
+AAS\TeX\ contains two commands that permit authors to specify alternate
+forms for fractions. Authors submitting manuscripts electronically
+will generally find it unnecessary to use any markup other than the
+standard \LaTeX\ \verb"\frac".
+\begin{quote}
+\verb"\case{NUM}{DENOM}"\\
+\verb"\slantfrac{NUM}{DENOM}"
+\end{quote}
+\LaTeX\ will set fractions in displayed math as built-up fractions;
+it is sometimes desirable to use case fractions in displayed equations.
+In such instances, one should use \verb"\case" rather than \verb"\frac".
+Occasionally, authors wish to typeset fractions with a solidus but in
+which the type size is reduced and the numerals are oriented diagonally.
+In this case, \verb"\slantfrac" should be used instead of \verb"\frac".
+Note that this is different from a shilled fraction, which authors can
+produce without any special markup.
+\begin{displaymath}
+\renewcommand{\arraystretch}{1.4}
+\begin{array}{llc}
+\mbox{Built-up} & \verb"\frac{1}{2}" & \displaystyle\frac{1}{2} \\[.5ex]
+\mbox{Case} & \verb"\case{1}{2}" & \case{1}{2} \\
+\mbox{Slant} & \verb"\slantfrac{1}{2}" & \slantfrac{1}{2} \\
+\mbox{Shilled} & \verb"1/2" & 1/2 \\
+\end{array}
+\end{displaymath}
+
+The AAS\TeX\ package also contains a collection of assorted macros
+for special symbols (or abbreviations) that authors tend to work
+out for themselves anyway.
+Some of the definitions come from the {\it A\&A\/} package (Springer 1989);
+some are contributions from individuals. We have
+tried to select a tractable number that were useful and also somewhat
+difficult to get right because fussy kerning or some such is required.
+
+\begin{center}
+\begin{tabular}{ll@{\hspace*{3em}}ll}
+\verb"\deg" & \deg &
+\verb"\sq" & \sq \\
+\verb"\sun" & \sun &
+\verb"\earth" & \earth \\
+\verb"\arcmin" & \arcmin &
+\verb"\arcsec" & \arcsec \\
+\verb"\fd" & \fd &
+\verb"\fh" & \fh \\
+\verb"\fm" & \fm &
+\verb"\fs" & \fs \\
+\verb"\fdg" & \fdg &
+\verb"\farcm" & \farcm \\
+\verb"\farcs" & \farcs &
+\verb"\fp" & \fp \\
+\verb"\micron" & \micron & \\[.8ex]
+\verb"\onehalf" & \onehalf &
+\verb"\ubvr" & \ubvr \\
+\verb"\onethird" & \onethird &
+\verb"\ub" & \ub \\
+\verb"\twothirds" & \twothirds &
+\verb"\bv" & \bv \\
+\verb"\onequarter" & \onequarter &
+\verb"\vr" & \vr \\
+\verb"\threequarters" & \threequarters &
+\verb"\ur" & \ur \\[.8ex]
+\verb"$\lesssim$" & $\lesssim$ &
+\verb"$\gtrsim$" & $\gtrsim$ \\
+\end{tabular}
+\end{center}
+Most of these commands can be used in running text as well as when
+setting mathematical expressions.
+\verb"\lesssim" and \verb"\gtrsim" can only be used in math mode,
+which is sensible since they are relations.
+It is possible to use \verb"\earth" and \verb"\sun" as subscripts,
+e.g., \verb"$1.4 M_{\sun}$" yields $1.4 M_{\sun}$.
+
+\subsection{Concluding the file}
+
+The last thing in the electronic manuscript file should be the
+\begin{quote}
+\verb"\end{document}"
+\end{quote}
+command, which appears after all the back matter of the paper.
+This command directs the formatter to perform assorted termination
+activities and finish processing.
+
+\section{Additional documentation}
+
+The preceding detailed explanation of the markup commands in this
+package has certain merit, but many authors will prefer to examine
+the sample papers that are included with the style files.
+The files of interest are described below.
+
+The file \verb"sample1.tex" is a paper prepared
+with the AAS\TeX\ package utilizing a minimal amount of markup.
+The most salient thing to observe about this example is that,
+apart from the document style declarations, no formatting
+instructions are given in the file.
+
+A more comprehensive example requiring nearly all of the capabilities
+of the package (in terms of markup as well as formatting)
+is in \verb"sample2.tex".
+This file is annotated with comments that describe
+the purpose of most of the markup.
+\verb"sample2.tex" includes \verb"samp2tbl.tex", which
+contains an example of a long table marked up using the
+{\tt planotable} environment.
+This demonstrates the use of {\tt planotable} for long tables
+in manuscripts.
+
+A set of three tables prepared as ``plano'' tables are contained in
+the files \verb"table1.tex", \verb"table2.tex", and
+\verb"table3.tex". They can be formatted by running \LaTeX\ on
+the \verb"samptbls.tex" file, into which they are included.
+The document style in \verb"samptbls.tex" is {\tt apjpt} in the
+distribution, but this can be changed to \verb"aj_pt" to see the
+effects of differing requirements among journals.
+Page breaks are explicitly indicated in \verb"table1.tex",
+and they are set for the \apj\ style; due to the different
+type size used in the \aj, the pages break somewhat irrationally
+when the \verb"aj_pt" style is used. It is left as an exercise
+to the reader to make sense of this.
+
+Also included in the distribution are files for two
+AAS meeting posters, marked up as they would be for submission;
+they are called \verb"paper1.tex" and \verb"paper2.tex".
+One of these (\verb"paper2.tex") includes a discussion of some
+of the issues surrounding standardized markup for electronic
+manuscripts (Hanisch and Biemesderfer 1990).
+This user guide (\verb"aastex.tex")
+is also marked up with the AAS\TeX\ package,
+although it is not exemplary as a scientific paper.
+
+A number of the markup commands described in the preceding
+sections are standard \LaTeX\ commands, and the reader who is
+unfamiliar with their syntax is referred to the \LaTeX\
+manual (Lamport 1985) for details. A cribsheet listing all
+the \LaTeX\ commands (and some pertinent plain \TeX\ commands)
+with short descriptions of each is published by the \TeX\ Users
+Group (Botway and Biemesderfer 1989).
+
+Authors who wish to know the ins and outs of \TeX\ itself
+should read the {\it\TeX book} (Knuth 1984), probably more than once.
+There is a good deal of information about typography in general
+in this source. Many details of mathematical typography are
+discussed in a book by Swanson (1971).
+
+\begin{references}
+\reference Abt, H. 1990, \apj, 357, 1 (editorial)
+\reference Adobe Systems, Inc. 1990, PostScript Language Reference
+ Manual, Appendix H (Reading, MA: Addison-Wesley)
+\reference Biemesderfer, C. and Hanisch R. 1989, \baas, 21, 780
+\reference Botway, L. and Biemesderfer, C. 1989,
+ {\rm \LaTeX\ Command Summary} (Providence, RI: \TeX\ Users Group)
+\reference Hanisch, R. and Biemesderfer, C. 1990, \baas, 22, 829
+\reference Knuth, D. 1984, {\rm The \TeX book} (Reading, MA: Addison-Wesley)
+\reference Lamport, L. 1985,
+ {\rm \LaTeX: A Document Preparation System\/} (Reading, MA: Addison-Wesley)
+\reference Springer-Verlag. 1989,
+ {\rm Springer-Verlag \TeX\ AA macro package 1989}
+ (Springer: Heidelberg)
+\reference Springer-Verlag. 1990,
+ {\rm Springer-Verlag \LaTeX\ AA macro package 1990}
+ (Springer: Heidelberg)
+\reference Swanson, E. 1979, {\rm Mathematics into Type} (Providence, RI:
+ American Mathematical Society)
+\end{references}
+
+\newpage
+\appendix
+
+\section{Special symbols}
+
+The \LaTeX\ language has a wide variety of special symbols
+for which markup commands have already been defined.
+These range from diacritics to exotic mathematical operators.
+
+This section groups \LaTeX's symbols together more or less
+according to function.
+Some of these symbols are primarily for use in text;
+most of them are mathematical symbols, and can only be
+used in \LaTeX's math mode.
+These tables are excerpted from the \LaTeX\ Command Summary
+(Botway 1989).
+
+\begin{table}[h]
+\caption{Text-mode accents}
+\begin{center}
+\begin{tabular}{*{2}{ll@{\hspace{4em}}}ll}
+\`{o} & \verb"\`{o}" & \={o} & \verb"\={o}" & \t{oo} & \verb"\t{oo}" \\
+\'{o} & \verb"\'{o}" & \.{o} & \verb"\.{o}" & \c{o} & \verb"\c{o}" \\
+\^{o} & \verb"\^{o}" & \u{o} & \verb"\u{o}" & \d{o} & \verb"\d{o}" \\
+\"{o} & \verb#\"{o}# & \v{o} & \verb"\v{o}" & \b{o} & \verb"\b{o}" \\
+\~{o} & \verb"\~{o}" & \H{o} & \verb"\H{o}" & & \\
+\end{tabular}
+\end{center}
+\end{table}
+
+\begin{table}[h]
+\caption{National symbols}
+\begin{center}
+\begin{tabular}{*{2}{ll@{\hspace{4em}}}ll}
+\oe & \verb"\oe" & \aa & \verb"\aa" & \l & \verb"\l" \\
+\OE & \verb"\OE" & \AA & \verb"\AA" & \L & \verb"\L" \\
+\ae & \verb"\ae" & \o & \verb"\o" & \ss & \verb"\ss" \\
+\AE & \verb"\AE" & \O & \verb"\O" & & \\
+\end{tabular}
+\end{center}
+\end{table}
+
+\begin{table}[h]
+\caption{Miscellaneous symbols}
+\begin{center}
+\begin{tabular}{*{2}{ll@{\hspace{4em}}}ll}
+\dag & \verb"\dag" & \S & \verb"\S" & \copyright & \verb"\copyright" \\
+\ddag & \verb"\ddag" & \P & \verb"\P" & \pounds & \verb"\pounds" \\
+\# & \verb"\#" & \$ & \verb"\$" & \% & \verb"\%" \\
+\& & \verb"\&" & \_ & \verb"\_" & & \\
+\{ & \verb"\{" & \} & \verb"\}" & & \\
+\end{tabular}
+\end{center}
+\end{table}
+
+\begin{table}[h]
+\caption{Math-mode accents}
+\begin{center}
+\begin{tabular}{ll@{\hspace{4em}}ll}
+$\hat{a}$ & \verb"\hat{a}" & $\dot{a}$ & \verb"\dot{a}" \\
+$\check{a}$ & \verb"\check{a}" & $\ddot{a}$ & \verb"\ddot{a}" \\
+$\tilde{a}$ & \verb"\tilde{a}" & $\breve{a}$ & \verb"\breve{a}" \\
+$\acute{a}$ & \verb"\acute{a}" & $\bar{a}$ & \verb"\bar{a}" \\
+$\grave{a}$ & \verb"\grave{a}" & $\vec{a}$ & \verb"\vec{a}" \\
+\end{tabular}
+\end{center}
+\end{table}
+
+\begin{table}[h]
+\caption{Greek letters (math mode)}
+\begin{center}
+\begin{tabular}{cl@{\hspace{3em}}cl}
+$\alpha$ & \verb"\alpha" & $\nu$ & \verb"\nu" \\
+$\beta$ & \verb"\beta" & $\xi$ & \verb"\xi" \\
+$\gamma$ & \verb"\gamma" & $o$ & \verb"o" \\
+$\delta$ & \verb"\delta" & $\pi$ & \verb"\pi" \\
+$\epsilon$ & \verb"\epsilon" & $\rho$ & \verb"\rho" \\
+$\zeta$ & \verb"\zeta" & $\sigma$ & \verb"\sigma" \\
+$\eta$ & \verb"\eta" & $\tau$ & \verb"\tau" \\
+$\theta$ & \verb"\theta" & $\upsilon$ & \verb"\upsilon" \\
+$\iota$ & \verb"\iota" & $\phi$ & \verb"\phi" \\
+$\kappa$ & \verb"\kappa" & $\chi$ & \verb"\chi" \\
+$\lambda$ & \verb"\lambda" & $\psi$ & \verb"\psi" \\
+$\mu$ & \verb"\mu" & $\omega$ & \verb"\omega" \\[4ex]
+
+$\varepsilon$ & \verb"\varepsilon" & $\varsigma$ & \verb"\varsigma" \\
+$\vartheta$ & \verb"\vartheta" & $\varphi$ & \verb"\varphi" \\
+$\varrho$ & \verb"\varrho" & & \\[4ex]
+
+$\Gamma$ & \verb"\Gamma" & $\Sigma$ & \verb"\Sigma" \\
+$\Delta$ & \verb"\Delta" & $\Upsilon$ & \verb"\Upsilon" \\
+$\Theta$ & \verb"\Theta" & $\Phi$ & \verb"\Phi" \\
+$\Lambda$ & \verb"\Lambda" & $\Psi$ & \verb"\Psi" \\
+$\Xi$ & \verb"\Xi" & $\Omega$ & \verb"\Omega" \\
+$\Pi$ & \verb"\Pi" & & \\
+\end{tabular}
+\end{center}
+\end{table}
+
+\begin{table}
+\caption{Binary operations (math mode)}
+\begin{center}
+\begin{tabular}{cl@{\hspace{3em}}cl}
+$\pm$ & \verb"\pm" & $\cap$ & \verb"\cap" \\
+$\mp$ & \verb"\mp" & $\cup$ & \verb"\cup" \\
+$\setminus$ & \verb"\setminus" & $\uplus$ & \verb"\uplus" \\
+$\cdot$ & \verb"\cdot" & $\sqcap$ & \verb"\sqcap" \\
+$\times$ & \verb"\times" & $\sqcup$ & \verb"\sqcup" \\
+$\ast$ & \verb"\ast" & $\triangleleft$ & \verb"\triangleleft" \\
+$\star$ & \verb"\star" & $\triangleright$ & \verb"\triangleright" \\
+$\diamond$ & \verb"\diamond" & $\wr$ & \verb"\wr" \\
+$\circ$ & \verb"\circ" & $\bigcirc$ & \verb"\bigcirc" \\
+$\bullet$ & \verb"\bullet" & $\bigtriangleup$ & \verb"\bigtriangleup" \\
+$\div$ & \verb"\div" & $\bigtriangledown$ & \verb"\bigtriangledown" \\
+$\lhd$ & \verb"\lhd" & $\rhd$ & \verb"\rhd" \\
+$\vee$ & \verb"\vee" & $\odot$ & \verb"\odot" \\
+$\wedge$ & \verb"\wedge" & $\dagger$ & \verb"\dagger" \\
+$\oplus$ & \verb"\oplus" & $\ddagger$ & \verb"\ddagger" \\
+$\ominus$ & \verb"\ominus" & $\amalg$ & \verb"\amalg" \\
+$\otimes$ & \verb"\otimes" & $\unlhd$ & \verb"\unlhd" \\
+$\oslash$ & \verb"\oslash" & $\unrhd$ & \verb"\unrhd" \\
+\end{tabular}
+\end{center}
+\end{table}
+
+\begin{table}
+\caption{Relations (math mode)}
+\begin{center}
+\begin{tabular}{cl@{\hspace{4em}}cl}
+$\leq$ & \verb"\leq" & $\geq$ & \verb"\geq" \\
+$\prec$ & \verb"\prec" & $\succ$ & \verb"\succ" \\
+$\preceq$ & \verb"\preceq" & $\succeq$ & \verb"\succeq" \\
+$\ll$ & \verb"\ll" & $\gg$ & \verb"\gg" \\
+$\subset$ & \verb"\subset" & $\supset$ & \verb"\supset" \\
+$\subseteq$ & \verb"\subseteq" & $\supseteq$ & \verb"\supseteq" \\
+$\sqsubset$ & \verb"\sqsubset" & $\sqsupset$ & \verb"\sqsupset" \\
+$\sqsubseteq$ & \verb"\sqsubseteq" & $\sqsupseteq$ & \verb"\sqsupseteq" \\
+$\in$ & \verb"\in" & $\ni$ & \verb"\ni" \\
+$\vdash$ & \verb"\vdash" & $\dashv$ & \verb"\dashv" \\
+$\smile$ & \verb"\smile" & $\mid$ & \verb"\mid" \\
+$\frown$ & \verb"\frown" & $\parallel$ & \verb"\parallel" \\
+$\neq$ & \verb"\neq" & $\perp$ & \verb"\perp" \\
+$\equiv$ & \verb"\equiv" & $\cong$ & \verb"\cong" \\
+$\sim$ & \verb"\sim" & $\bowtie$ & \verb"\bowtie" \\
+$\simeq$ & \verb"\simeq" & $\propto$ & \verb"\propto" \\
+$\asymp$ & \verb"\asymp" & $\models$ & \verb"\models" \\
+$\approx$ & \verb"\approx" & $\doteq$ & \verb"\doteq" \\
+ & & $\Join$ & \verb"\Join" \\
+\end{tabular}
+\end{center}
+\end{table}
+
+\begin{table}
+\caption{Variable-sized symbols (math mode)}
+\begin{center}
+\begin{displaymath}
+\begin{array}{ccl@{\hspace{2em}}ccl}
+\sum & \displaystyle \sum & \hbox{\verb"\sum"} &
+ \bigcap & \displaystyle \bigcap & \hbox{\verb"\bigcap"} \\[.7ex]
+\prod & \displaystyle \prod & \hbox{\verb"\prod"} &
+ \bigcup & \displaystyle \bigcup & \hbox{\verb"\bigcup"} \\[.7ex]
+\coprod & \displaystyle \coprod & \hbox{\verb"\coprod"} &
+ \bigsqcup & \displaystyle \bigsqcup & \hbox{\verb"\bigsqcup"} \\[.7ex]
+\int & \displaystyle \int & \hbox{\verb"\int"} &
+ \bigvee & \displaystyle \bigvee & \hbox{\verb"\bigvee"} \\[.7ex]
+\oint & \displaystyle \oint & \hbox{\verb"\oint"} &
+ \bigwedge & \displaystyle \bigwedge & \hbox{\verb"\bigwedge"} \\[.7ex]
+\bigodot & \displaystyle \bigodot & \hbox{\verb"\bigodot"} &
+ \bigotimes & \displaystyle \bigotimes & \hbox{\verb"\bigotimes"} \\[.7ex]
+\bigoplus & \displaystyle \bigoplus & \hbox{\verb"\bigoplus"} &
+ \biguplus & \displaystyle \biguplus & \hbox{\verb"\biguplus"} \\
+\end{array}
+\end{displaymath}
+\end{center}
+\end{table}
+
+\begin{table}
+\caption{Delimiters (math mode)}
+\begin{center}
+\begin{tabular}{lc@{\hspace{2em}}lc}
+$($ & \verb"(" & $)$ & \verb")" \\
+$[$ & \verb"[" & $]$ & \verb"]" \\
+$\{$ & \verb"\{" & $\}$ & \verb"\}" \\
+$\lfloor$ & \verb"\lfloor" & $\rfloor$ & \verb"\rfloor" \\
+$\lceil$ & \verb"\lceil" & $\rceil$ & \verb"\rceil" \\
+$\langle$ & \verb"\langle" & $\rangle$ & \verb"\rangle" \\
+$/$ & \verb"/" & $\backslash$ & \verb"\backslash" \\
+$\vert$ & \verb"\vert" & $\Vert$ & \verb"\Vert" \\
+$\uparrow$ & \verb"\uparrow" & $\Uparrow$ & \verb"\Uparrow" \\
+$\downarrow$ & \verb"\downarrow" & $\Downarrow$ & \verb"\Downarrow" \\
+$\updownarrow$ & \verb"\updownarrow" & $\Updownarrow$ & \verb"\Updownarrow" \\
+\end{tabular}
+\end{center}
+\end{table}
+
+\begin{table}
+\caption{Function names (math mode)}
+\begin{verbatim}
+ \arccos \csc \ker \min
+ \arcsin \deg \lg \Pr
+ \arctan \det \lim \sec
+ \arg \dim \liminf \sin
+ \cos \exp \limsup \sinh
+ \cosh \gcd \ln \sup
+ \cot \hom \log \tan
+ \coth \inf \max \tanh
+\end{verbatim}
+\end{table}
+
+\begin{table}
+\caption{Arrows (math mode)}
+\begin{center}
+\begin{tabular}{clcl}
+$\leftarrow$ & \verb"\leftarrow" & $\longleftarrow$ & \verb"\longleftarrow" \\
+$\Leftarrow$ & \verb"\Leftarrow" & $\Longleftarrow$ & \verb"\Longleftarrow" \\
+$\rightarrow$ & \verb"\rightarrow" &
+ $\longrightarrow$ & \verb"\longrightarrow" \\
+$\Rightarrow$ & \verb"\Rightarrow" &
+ $\Longrightarrow$ & \verb"\Longrightarrow" \\
+$\leftrightarrow$ & \verb"\leftrightarrow" &
+ $\longleftrightarrow$ & \verb"\longleftrightarrow" \\
+$\Leftrightarrow$ & \verb"\Leftrightarrow" &
+ $\Longleftrightarrow$ & \verb"\Longleftrightarrow" \\
+$\mapsto$ & \verb"\mapsto" & $\longmapsto$ & \verb"\longmapsto" \\
+$\hookleftarrow$ & \verb"\hookleftarrow" &
+ $\hookrightarrow$ & \verb"\hookrightarrow" \\
+$\leftharpoonup$ & \verb"\leftharpoonup" &
+ $\rightharpoonup$ & \verb"\rightharpoonup" \\
+$\leftharpoondown$ & \verb"\leftharpoondown" &
+ $\rightharpoondown$ & \verb"\rightharpoondown" \\
+$\rightleftharpoons$ & \verb"\rightleftharpoons" &
+ $\leadsto$ & \verb"\leadsto" \\
+$\uparrow$ & \verb"\uparrow" & $\Updownarrow$ & \verb"\Updownarrow"\\
+$\Uparrow$ & \verb"\Uparrow" & $\nearrow$ & \verb"\nearrow"\\
+$\downarrow$ & \verb"\downarrow" & $\searrow$ & \verb"\searrow" \\
+$\Downarrow$ & \verb"\Downarrow" & $\swarrow$ & \verb"\swarrow"\\
+$\updownarrow$ & \verb"\updownarrow" & $\nwarrow$ & \verb"\nwarrow"\\
+\end{tabular}
+\end{center}
+\end{table}
+
+\begin{table}
+\caption{Miscellaneous symbols (math mode)}
+\begin{center}
+\begin{tabular}{cl@{\hspace{3em}}cl}
+$\aleph$ & \verb"\aleph" & $\prime$ & \verb"\prime" \\
+$\hbar$ & \verb"\hbar" & $\emptyset$ & \verb"\emptyset" \\
+$\imath$ & \verb"\imath" & $\nabla$ & \verb"\nabla" \\
+$\jmath$ & \verb"\jmath" & $\surd$ & \verb"\surd" \\
+$\ell$ & \verb"\ell" & $\top$ & \verb"\top" \\
+$\wp$ & \verb"\wp" & $\bot$ & \verb"\bot" \\
+$\Re$ & \verb"\Re" & $\|$ & \verb"\|" \\
+$\Im$ & \verb"\Im" & $\angle$ & \verb"\angle" \\
+$\partial$ & \verb"\partial" & $\triangle$ & \verb"\triangle" \\
+$\infty$ & \verb"\infty" & $\backslash$ & \verb"\backslash" \\
+$\Box$ & \verb"\Box" & $\Diamond$ & \verb"\Diamond" \\
+$\forall$ & \verb"\forall" & $\sharp$ & \verb"\sharp" \\
+$\exists$ & \verb"\exists" & $\clubsuit$ & \verb"\clubsuit" \\
+$\neg$ & \verb"\neg" & $\diamondsuit$ & \verb"\diamondsuit" \\
+$\flat$ & \verb"\flat" & $\heartsuit$ & \verb"\heartsuit" \\
+$\natural$ & \verb"\natural" & $\spadesuit$ & \verb"\spadesuit" \\
+$\mho$ & \verb"\mho" & & \\
+\end{tabular}
+\end{center}
+\end{table}
+
+\end{document}
diff --git a/obsolete/macros/latex209/contrib/aasmacros/aj_pt.doc b/obsolete/macros/latex209/contrib/aasmacros/aj_pt.doc
new file mode 100644
index 0000000000..8fac6bed67
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aasmacros/aj_pt.doc
@@ -0,0 +1,1172 @@
+% AJ_PT.STY -- AJ plano tables style.
+
+% Plano tables are camera-ready pages that are included in a typeset
+% article the same way as line drawings, graphs, and other camera-ready
+% art, i.e., as "planographic" figures. This file is parameterized so
+% that the tables are appropriate for the AJ.
+
+% My convention for identifying configuration information is for styles
+% to define the five parameters below.
+
+\def\revtex@ver{1.1} % Version number of this file.
+\def\revtex@date{10 Jan 93} % Revision date.
+\def\revtex@org{AAS} % Sponsoring organization.
+\def\revtex@jnl{AJ} % Applicable journal, if specific.
+\def\revtex@genre{plano tables} % Document "type".
+
+% Display identifying message on screen and in logfile.
+
+\typeout{\revtex@org\space \revtex@jnl\space \revtex@genre\space substyle,
+ v\revtex@ver\space <\revtex@date>.}
+
+% The following mini-colophon identifies the article are having been
+% prepared with this macro package. The \revtex@pageid command only
+% defines the formatting of this colophon; its existence and placement
+% within the printed article is controlled by the use of this command
+% in the style file.
+
+\def\revtex@pageid{\xdef\@thefnmark{\null}
+ \@footnotetext{This \revtex@genre\space was prepared with the
+ \revtex@org\space \LaTeX\ macros v\revtex@ver.}}
+
+% Issue a warning if manuscripts are formatted with type smaller than 12pt.
+
+\def\genre@MS{manuscript}
+\ifx\revtex@genre\genre@MS
+ \ifnum\@ptsize<2
+ \typeout{Warning: Undersize \revtex@genre\space font (1\@ptsize\space pts).
+ Use 12pt documentstyle option.}
+ \fi
+\fi
+
+% ****************************************
+% * INITIALIZATION *
+% ****************************************
+
+% Initialization has to occur at the head of this file because LaTeX's
+% "plain" pagestyle is used to establish defaults. These are modified
+% below to suit the requirements of this journal.
+
+%\@input{art8.sty}
+
+\ps@plain % Use "plain" pagestyle for defaults.
+
+% ****************************************
+% * PAGE LAYOUT *
+% ****************************************
+
+% Create "plaintop" page style that has folios at top of page.
+
+\def\ps@plaintop{\let\@mkboth\@gobbletwo
+ \def\@oddfoot{}\def\@oddhead{\rm\hfil--\space\thepage\space--\hfil}
+ \def\@evenfoot{}\let\@evenhead\@oddhead}
+
+%\pretolerance=10000 % Disable hyphenation
+
+% The following gives "reasonable" ragged right results.
+
+%\@rightskip=\z@ plus 4em\rightskip\@rightskip
+
+% Page size, spacing parameters, etc.
+
+\newdimen\@fmwidth \@fmwidth=44pc % Front matter width
+\newdimen\@bodywidth \@bodywidth=44pc % Body text width
+\textwidth=\@bodywidth
+\textheight=8.9in
+\topmargin=0in
+\headheight=0in % .15in
+\headsep=0in % .35in
+\oddsidemargin=0in
+\evensidemargin=0in
+\parindent=1em
+\parskip=0ex
+\columnsep=1pc
+
+\hoffset=-2.5pc % To compensate for wide \textwidth
+\tolerance=400 % 2x "normal" value; cuts down on overfull complaints
+
+% For landscape plano tables.
+
+\def\ptlandscape{\textwidth=9in \textheight=6.5in \hoffset=0in}
+
+%\@input{styopts.sty}
+
+% ****************************************
+% * STYLE OPTIONS *
+% ****************************************
+
+% Make footnotes same size as main text.
+
+%\let\footnotesize=\normalsize
+
+% Define parameters to adjust the baselineskip.
+% These are passed as the scale factor argument to \baselinestretch.
+
+\def\@tightleading{1.1}
+\def\@doubleleading{1.6}
+
+% Double-space by default. Observe that you double-space in LaTeX by
+% resetting \baselinestretch, which is essentially a scale factor for
+% \baselineskip (= leading, for you typographophiles). The style uses
+% the \@doubleleading factor, defined above.
+
+%\def\baselinestretch{\@doubleleading}
+
+% The \tighten command merely resets the \baselinestretch to a
+% smaller factor, resulting in single-column text that is more closely
+% spaced. (This will always work.) Tightening the vertical spacing
+% in the text results in output that is more attractive for distribution
+% to colleagues who are primarily interested in reading the paper, as
+% opposed to copy editing it. Double-spaced output for referees and
+% copy editors is, however, the main objective of this style, hence
+% double-spacing occurs by default. The same effect as \tighten
+% can be achieved by using the "tighten" document style option.
+%
+% \tighten
+%
+% \tighten is intended for use in the preamble of the article.
+
+%\def\tighten{\def\baselinestretch{\@tightleading}}
+\def\tighten=\relax
+\let\tightenlines=\tighten
+
+% For authors who feel compelled to change between single and double
+% spacing in the manuscript, \singlespace and \doublespace commands
+% are provided. (Following recommendations of AAS Publications Board
+% Subcommittee on Preprints.)
+%
+% \singlespace
+% \doublespace
+
+\def\singlespace{\def\baselinestretch{\@tightleading}\normalsize}
+\def\doublespace{\def\baselinestretch{\@doubleleading}\normalsize}
+
+% Upper case for sections (optional upper case items). These are created
+% so that some headings can be toggled between mixed case and upper case
+% readily. Headings that might be changed can be wrapped in the style
+% file in \sec@upcase{TEXT} constructs; the expansion of \sec@upcase is
+% controlled here. It is `\relax' by default (mixed case heads), and can
+% easily be changed to `\uppercase' if desired. If mixed case headings
+% are wanted by the editor, authors MUST supply mixed case text, although
+% this is what authors should be doing anyway. (Mixed can be converted
+% to upper, but the reverse transformation cannot be automated.)
+
+%\def\sec@upcase#1{\uppercase{#1}}
+\def\sec@upcase#1{\relax{#1}}
+
+% Sometimes people want to number equations by section, rather than
+% sequentially through the whole paper.
+
+\def\eqsecnum{
+ \@newctr{equation}[section]
+ \def\theequation{\hbox{\normalsize\arabic{section}-\arabic{equation}}}}
+
+%\@input{slug.sty}
+
+% ****************************************
+% * SLUG LINE *
+% ****************************************
+
+% There are some obvious style-dependent parameters and formatting
+% instructions in this file. The object has been to keep the author
+% commands (the user interface, if you will) society, journal, and
+% style-independent, while the style-specific parameters and commands
+% are kept below that level. Commands and parameters that are susceptible
+% to external interpretation, either by authors or publishers/translators,
+% are identified by indented comment lines, with the semantics of command
+% arguments described in upper case text.
+%
+% \@journalname{JOURNAL NAME}
+% \cpr@holder{COPYRIGHT HOLDER}
+
+\def\@journalname{The Astropolitical Journal}
+\def\cpr@holder{American Astronomical Society}
+
+% Journal and article identification information is established by the
+% editorial staff. The following macros are used by personnel at the
+% editorial office to annotate/record slug-line data and should be included
+% in the manuscript preamble, i.e., before the LaTeX \begin{document}. All
+% they do is globally define other TeX control sequences that are used by
+% other macros at a later time.
+%
+% \received{RECEIPT DATE}
+% \revised{REVISION DATE}
+% \accepted{ACCEPTANCE DATE}
+% \journalid{VOL}{JOURNAL DATE}
+% \articleid{START PAGE}{END PAGE}
+% \paperid{ID}
+% \ccc{CODE}
+%
+% For preprints and submitted manuscripts in draft/referee format, etc.,
+% the slug-line information is irrelevant and in those kinds of style,
+% the data are never used. In my estimation, it is perfectly acceptable
+% to have these commands in the file (for future use), so they are defined
+% in the usual way.
+
+\def\received#1{\gdef\@recvdate{#1}} \received{\relax}
+\def\revised#1{\gdef\@revisedate{#1}} \revised{\relax}
+\def\accepted#1{\gdef\@accptdate{#1}} \accepted{\relax}
+\def\journalid#1#2{\gdef\@jourvol{#1}\gdef\@jourdate{#2}}
+\def\articleid#1#2{\gdef\@startpage{#1}\gdef\@finishpage{#2}}
+\def\paperid#1{\gdef\@paperid{#1}} \paperid{MS-0001-SAMP}
+\def\ccc#1{\gdef\CCC@code{#1}} \ccc{000-00\$75.95-CDB}
+
+% Following copyright and running heads \defs are stubs.
+%\let\cpright=\@gobbletwo
+%\let\righthead=\@gobble
+%\let\lefthead=\@gobble
+
+% Copyright data. Permit the author/editor to supply a copyright
+% "type" as well as the year.
+%
+% \cpright{TYPE}{YEAR}
+%
+% Copyright types are designated by name and converted to numeric form.
+% The mapping of types is defined by the code that sets the @cprtype
+% counter. The language of the copyright notices is defined by \@slug.
+
+\def\cpright#1#2{\@nameuse{cpr@#1} \gdef\cpr@year{#2}
+ \typeout{`#1' copyright \cpr@year.}}
+
+\newcount\@cprtype \@cprtype=\@ne % Default copyright type.
+\def\cpr@AAS{\@cprtype=1}
+\def\cpr@PD{\@cprtype=2}
+\def\cpr@Crown{\@cprtype=3}
+\def\cpr@none{\@cprtype=4}
+\def\cpr@ASP{\@cprtype=5}
+
+\def\cpr@year{\number\year} % Default copyright year.
+
+% \@slug determines formatting of slugline information.
+
+\def\@slug{\par\noindent
+ \ifcase\@cprtype
+ \relax
+ \or
+ Copyright \cpr@year\space by the \cpr@holder.
+ \or
+ This article is in the public domain.
+ \or
+ Crown copyright \cpr@year\space by the \cpr@holder.
+ \or
+ No copyright is claimed for this article.
+ \or
+ Copyright \cpr@year\space by the ASP.
+ \fi
+ \par\noindent
+ Manuscript number \@paperid.\par\noindent
+ \CCC@code
+}
+
+% Authors may be asked to supply running head information. We use the
+% language of the publisher here to distinguish between two pieces of
+% information: the left head frequently contains an author list (last
+% names, possibly truncated as et al.), while the right head frequently
+% contains an abbreviated form of the paper title. The \lefthead and
+% \righthead commands merely collect the information and buffer the text.
+%
+% \lefthead{TEXT}
+% \righthead{TEXT}
+
+\def\lefthead#1{\gdef\@versohead{#1}} \lefthead{\relax}
+\def\righthead#1{\gdef\@rectohead{#1}} \righthead{\relax}
+
+% \@runheads determines formatting of running head information.
+
+\def\@runheads{\@tempcnta\c@page
+ \@whilenum \@tempcnta >0\do{
+ \vskip 3ex
+ \hbox to30pc{\small\expandafter\uppercase\expandafter{\@versohead}:
+ \expandafter\uppercase\expandafter{\@rectohead}\hfil}
+ \advance\@tempcnta by\m@ne}
+}
+
+% The \slugcomment command is provided so authors or editors may include
+% a remark about the manuscript that may be desired in print for some
+% styles. For instance, authors like to include information about the
+% journal and publication date of accepted papers ("To appear in AJ,
+% November 1992").
+%
+% \slugcomment{TEXT}
+%
+% The formatting of the \slugcomment information is controlled by the
+% \sluginfo command.
+
+\def\slugcomment#1{\gdef\slug@comment{#1}} \slugcomment{\relax}
+
+% Editorial offices like to have receipt and acceptance dates on the front
+% page for tracking purposes. The current practice is to require the author
+% to type Received___________________ and Accepted ________________ lines
+% for the staff to type on. The \@dates command will typeset either rules
+% or the dates specified in \received and/or \accepted commands. Note that
+% authors should not include \received and \accepted.
+
+\def\@rcvaccrule{\vrule\@width1.75in\@height0.5pt\@depth\z@}
+
+% \@dates determines formatting of MS date information.
+
+\def\@dates{{Received}\space%
+ \if\@recvdate\relax\@rcvaccrule\else\@recvdate\fi;%
+ \hspace{1.5em}{accepted}\space%
+ \if\@accptdate\relax\@rcvaccrule\else\@accptdate\fi%
+}
+
+% The \sluginfo command is executed automatically when a \begin{abstract} is
+% encountered, so it is not necessary (or appropriate) for the author to
+% include this line explicitly. The received/accepted business is a
+% concern only for the editorial staff, hence we have arranged for the
+% author not to have to fuss with it.
+
+\def\sluginfo{{\center
+ \@dates
+ %\@slug
+ %\@runheads
+ \endcenter}}
+
+\let\dates=\sluginfo % Backwards compatibility
+
+%\@input{text.sty}
+
+% ****************************************
+% * FRONT MATTER *
+% ****************************************
+
+% Make adjustments to LaTeX abstract style: optional upper case heading,
+% retain current type size (should be normalsize), ignore twocolumn option
+% in this substyle, add \sluginfo, and start abstract on fresh page.
+
+\def\abstract{\sluginfo\clearpage
+ \begin{center}
+ {\bf{ABSTRACT}}
+ \end{center}
+ \quotation
+}
+
+% Title and author identification is by way of standard LaTeX commands
+% \title and \author, although the macros themselves are rather different.
+% The information is typeset by these macros in this style, rather than
+% being buffered as per regular LaTeX. The authors' principal affiliation
+% is specified with a separate macro \affil. Each \author command should
+% be followed by its own \affil (or address).
+%
+% Authors often have affiliations above and beyond their main employer,
+% and these are specified with the \altaffilmark and \altaffiltext commands.
+% These commands behave like the \footnotemark and \footnotetext commands
+% of LaTeX. \altaffilmark is appended to author's names in the \author
+% lists, and generates the superscript identification numbers.
+% The text for the individual alternate affiliations is generated by the
+% \altaffiltext command. It is up to the author to make sure that the
+% \altaffilmark numbers attached to authors' names correspond to the correct
+% alternate affiliation.
+%
+% \title{LUCID TEXT}
+% \author{NAME(S)}
+% \authoraddr{AUTHOR'S POSTAL ADDRESS}
+% \affil{AFFILIATION}
+% \altaffilmark{TAG NUMBER(S)}
+% \altaffiltext{NUMERICAL TAG}{TEXT}
+%
+% The typesetting performed by these commands is appropriate for the top of
+% the first text page of the manuscript. They could as well be used on a
+% title cover page, but vertical placement would have to be controlled by
+% the author. This is not to be encouraged, since I want to discourage
+% the introduction of any extra horizontal or vertical space.
+
+\def\title#1{{\def\baselinestretch{\@tightleading}
+ \center\large\bf{#1}\endcenter}
+ \thispagestyle{empty}}
+\def\author#1{{\topsep\z@\center\normalsize#1\endcenter}}
+\let\authoraddr=\@gobble
+\def\affil#1{\vspace*{-2.5ex}{\topsep\z@\center#1\endcenter}}
+\def\altaffilmark#1{$^{#1}$}
+\def\altaffiltext#1#2{\footnotetext[#1]{#2}\stepcounter{footnote}}
+
+% Redefine the LaTeX \and command for this style.
+
+\def\and{\vspace*{-0.5ex}{\topsep\z@\center and\endcenter}}
+
+% ****************************************
+% * KEYWORDS *
+% ****************************************
+
+% Keywords environment. Keywords, subject headings, etc., are accommodated
+% only as a piece of text; the \keywords command indents if necessary and
+% supplies the proper leading text ("Keywords:", "Subject headings:", etc.)
+% but does not apply formatting to the user's keyword text. The author
+% must supply the correct punctuation according to the journal style.
+%
+% Note that the editors of A&A, AJ, and MNRAS have discussed the issue
+% of keywords, and there is disagreement about whether "subject headings"
+% or "keywords" should appear after abstracts in astronomical papers.
+% It does not really matter what the macro is called, so I will stick
+% to \keywords since I don't know what the difference is anyway.
+
+\def\@keywordtext{Subject headings}
+\def\@keyworddelim{---}
+
+\def\keywords#1{\vspace*{-.7ex}%\vspace{\z@}
+ \if@twocolumn\noindent{{\it\@keywordtext:\/}\space\@kwds{#1}}
+ \else{\quote{\it\@keywordtext:\/}\space\@kwds{#1}\endquote}
+ \fi}
+
+\let\subjectheadings=\keywords
+
+\def\@kwds#1{\def\@kwddlm{}\@for\@kwd:=#1\do
+ {\@kwddlm\def\@kwddlm{\space\@keyworddelim\penalty\@m\space}{\@kwd}}}
+
+% ****************************************
+% * FOOTNOTES *
+% ****************************************
+
+% The following code redefines a few things so that spacing in footnotes is
+% different than LaTeX defaults. The adjustment to \skip\footins increases
+% the amount of vspace inserted before the \footnoterule. Redefine
+% \@makefntext to get proper indentation.
+
+\skip\footins 4ex plus 1ex minus .5ex
+\footnotesep 3ex
+
+%\long\def\@makefntext#1{\noindent\hbox to\z@{\hss$^{\@thefnmark}$}#1}
+%\long\def\@makefntext#1{\indent\hbox{$^{\@thefnmark}$}#1}
+
+% ****************************************
+% * SECTIONS *
+% ****************************************
+
+% \@startsection {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}
+% optional * [ALTHEADING]{HEADING}
+% Generic command to start a section.
+% NAME : e.g., 'subsection'
+% LEVEL : a number, denoting depth of section -- e.g., chapter=1,
+% section = 2, etc.
+% INDENT : Indentation of heading from left margin
+% BEFORESKIP : Absolute value = skip to leave above the heading.
+% If negative, then paragraph indent of text following
+% heading is suppressed.
+% AFTERSKIP : if positive, then skip to leave below heading, else
+% negative of skip to leave to right of run-in heading.
+% STYLE : commands to set style
+% If '*' missing, then increments the counter. If it is present, then
+% there should be no [ALTHEADING] argument.
+
+% Adjust section heading typography slightly. This is one of the spots
+% where my personal preference is going to bite me. Anyway, I have reduced
+% the size of the main section heads to whatever the normal size is for
+% the paper; I don't think it needs to be larger, especially when the
+% layout is double-spaced.
+%
+% Also, modify the indentation behavior so that ALL paragraphs, including
+% those first after section heads, are indented. This is consonant with
+% the styles of many journals, although it's non-standard typographic practice.
+
+\def\section{\@startsection {section}{1}{\z@}
+ {5ex plus .5ex}{1ex plus .2ex}{\normalsize\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}
+ {5ex plus .5ex}{1ex plus .2ex}{\normalsize\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}
+ {5ex plus .5ex}{1ex plus .2ex}{\normalsize\it}}
+
+\def\thesection{\@arabic{\c@section}.}
+\def\thesubsection{\thesection\@arabic{\c@subsection}.}
+\def\thesubsubsection{\thesubsection\@arabic{\c@subsubsection}.}
+\def\theparagraph{\thesubsubsection\@arabic{\c@paragraph}:}
+
+% For AJ, acknowledgments are set off from main body text simply by
+% vertical space (no heading or type size change). I do the same for
+% the AAS manuscript style. For use in producing more polished output
+% for other journals, this macro might generate text saying
+% "Acknowledg[e]ments".
+
+\def\acknowledgments{\vskip 3ex plus .8ex minus .4ex}
+\let\acknowledgements=\acknowledgments % second spelling
+
+% LaTeX sectioning tools.
+
+\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
+ \def\@svsec{}\else
+ \refstepcounter{#1}\edef\@svsec{\csname the#1\endcsname\hskip 1em }\fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup \center#6\relax
+ \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M
+ \sec@upcase{#8}\par}%
+ \endcenter\endgroup
+ \csname #1mark\endcsname{#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #7}\else
+ \def\@svsechd{#6\hskip #3\@svsec \sec@upcase{#8}\csname #1mark\endcsname
+ {#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #7}}\fi
+ \@xsect{#5}}
+
+\def\@ssect#1#2#3#4#5{\@tempskipa #3\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #4\center\@hangfrom{\hskip #1}{\interlinepenalty \@M
+ \sec@upcase{#5}\par}\endcenter\endgroup
+ \else \def\@svsechd{#4\hskip #1\relax \sec@upcase{#5}}\fi
+ \@xsect{#3}}
+
+% ****************************************
+% * EQUATION NUMBERING *
+% ****************************************
+
+% Redefine \appendix so that equation numbers are prepended with
+% \theappendix number. Reset equation counter so that equation
+% numbers in the appendix begin again with 1. Note that the
+% \appendix command is NOT a sectioning command; it is merely
+% a delimiting markup between the main body of the paper and the
+% appendix. Sections in the appendix are still started with
+% \section commands.
+%
+% \appendix
+
+\def\appendix{\par
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \setcounter{equation}{0}
+ \def\thesection{\Alph{section}.}
+ \def\theequation{\hbox{\normalsize\Alph{section}\arabic{equation}}}}
+
+% Define mathletters environment. This is a wrapper that goes
+% *around* (outside of) equation or eqnarray environments.
+%
+% \begin{mathletters}
+% \end{mathletters}
+
+\newcounter{cureqno}
+
+\newenvironment{mathletters}{\refstepcounter{equation}%
+ \setcounter{cureqno}{\value{equation}}%
+ \let\@curtheeqn\theequation%
+ \edef\cur@eqn{\csname theequation\endcsname}%
+ \def\theequation{\cur@eqn\alph{equation}}%
+ \setcounter{equation}{0}}%
+ {\let\theequation\@curtheeqn%
+ \setcounter{equation}{\value{cureqno}}}
+
+% The \eqnum command allows the author to override all automatic
+% equation marking schemes.
+%
+% \eqnum{TEXT}
+
+\def\eqnum#1{\def\theequation{#1}\let\@currentlabel\theequation
+ \addtocounter{equation}{\m@ne}}
+
+% ****************************************
+% * BIBLIOGRAPHY *
+% ****************************************
+
+% Bibliography/references environment. For the time being, I don't think
+% it would be a good idea to force an implementation based on BibTeX,
+% although I'll prepare for that eventuality by using the constructs and
+% general ideas of the LaTeX thebibliography environment. Adjustments
+% have been made so that the \cite-\bibitem mechanism can be used to cite
+% references symbolically while maintaining proper citation syntax within
+% the paper; the author must create the citation label for each reference
+% in proper journal format in the \bibitem command.
+%
+% \begin{thebibliography}
+% \bibitem[LABEL]{TEXTTAG} \reference <bibliographic data>
+% \end{thebibliography}
+%
+% where LABEL must adhere to the journal's standards, e.g. "Abt 1986".
+%
+% It is not necessary to use the thebibliography environment. This style
+% defines a references environment that simply sets off the list of references
+% and adjusts spacing parameters. It is not possible to use \bibitems
+% within the references environment. (The \reference command cannot be
+% shortened to \ref; \ref is used in vanilla LaTeX for cross-referencing.)
+%
+% \begin{references}
+% \reference <bibliographic data>
+% \end{references}
+%
+% \markcite{TEXT}
+%
+% Observe that the bibliographic data supplied by the author must also
+% conform to the standards of the journal. I have elected not to burden
+% authors with tedious LaTeX commands which would require many curly braces
+% to delimit the bibliographic fields because many of the journals I have
+% targeted in this project have agreed to reduce typographic overhead (bolding,
+% italicizing, etc.) in reference lists. (See Abt's editorial in ApJ 357.)
+% It is the responsibility of the author to get these fields in the proper
+% order with the correct punctuation; the information will be typeset as is,
+% i.e., in roman with no size or style changes.
+%
+% Macros are provided for many of the oft-referenced journals so that authors
+% may use the LaTeX names rather than having to look up a particular journal's
+% specific abbreviation. In principle, all the journals should be using the
+% same abbreviations, too, but I anticipate some changes in the specific
+% abbreviations before a set is finally settled on. As long as these macros
+% are kept up to date, authors need not be concerned about such editorial
+% changes.
+%
+% Corresponding with the non-BibTeX references environment and \reference
+% command for the reference list is the \markcite command. This can be
+% used to identify in-text citations; in this case, the author provides
+% the actual citation text as opposed to the symbolic tag. The use of
+% this is encouraged, even for journals where no special formatting of
+% citation call-outs is required; it is crucial for the future use of
+% on-line browsers.
+
+\def\references{\subsection*{REFERENCES}
+ \bgroup\parindent=\z@\parskip=\itemsep
+ \def\refpar{\par\hangindent=3em\hangafter=1}}
+\def\endreferences{\refpar\egroup\revtex@pageid}
+
+\def\thebibliography{\subsection*{REFERENCES}
+ \list{\null}{\leftmargin 3em\labelwidth\z@\labelsep\z@\itemindent -3em
+ \usecounter{enumi}}
+ \def\refpar{\relax}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+\def\endthebibliography{\endlist\revtex@pageid}
+
+\def\@biblabel#1{\relax}
+%\def\@cite#1#2{({#1\if@tempswa , #2\fi})}
+\def\@cite#1#2{#1\if@tempswa , #2\fi}
+
+\def\reference{\relax\refpar} % Generic: might be better...
+\def\markcite#1{#1\relax}
+
+% Modify \@citex so that individual citation texts are NOT hboxed.
+% This allows TeX to break lines at spaces between words in citations.
+% Remove the obnoxious {\bf ?} that was inserted in the text when
+% undefined citations are encountered; here, the warning message is
+% printed only on the terminal.
+
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+ \def\@citea{}\@cite{\@for\@citeb:=#2\do
+ {\@citea\def\@citea{,\penalty\@m\ }\@ifundefined
+ {b@\@citeb}{\@warning
+ {Citation `\@citeb' on page \thepage \space undefined}}%
+{\csname b@\@citeb\endcsname}}}{#1}}
+% Permit \keywords declaration, but eat the contents.
+
+\let\keywords=\@gobble
+\let\subjectheadings=\@gobble
+
+%\@input{tblfig.sty}
+
+% ****************************************
+% * TABLES AND FIGURES *
+% ****************************************
+
+% Additions and adjustments for tables and figures.
+
+% Footnotes for tables are to be identified with lower case alphabetics,
+% rather than numeric. \tablenotemark and \tablenotetext commands are
+% provided analogous to \footnotemark and \footnotetext, but with the
+% identifier *required*, like \altaffilmark and \altaffiltext. The
+% \tablenotetext must be specified before the \end{table}, since
+% \end{table} displays it.
+%
+% \tablenotemark{TAG LETTER(S)}
+% \tablenotetext{ALPHA TAG}{TEXT}
+%
+% Note that TAG LETTER == ALPHA TAG for corresponding text. It is the
+% responsibility of the author to get the correspondence correct.
+%
+% The table footnotes are coupled to the table in which they occur, rather
+% than being associated with a particular page, and they are printed with
+% the table (relatively close to the caption) instead of appearing at the
+% extreme bottom of the page. This is done to ensure that the notes wind
+% up on the same page as the table, since tables are floats and can migrate
+% from one page to another. There is the additional benefit that the notes
+% are unambiguously attached to the proper table, which is what is required
+% in the event that the editorial requirement of one table only per page
+% is ever changed to permit several tables per page.
+%
+% Footnotes are NOT supported for figures.
+
+\def\tablenotemark#1{\rlap{$^{\rm #1}$}}
+
+% The \tablenotetext command buffers the table note text and the "proper"
+% tablenote formatting information in a token buffer. The tablenotes are
+% dispensed into the vertical page list by \spew@tblnotes, which is
+% executed by \end{table}. Note that certain "global" tablenote formatting
+% details are handled by \spew@tblnotes, which also clears the tblnote list.
+% Praise and honor are due to Kresten Krab Thorup (krab@iesd.auc.dk) for
+% posting ftn.sty to the Usenet, from which I drew the technique.
+
+\newtoks\@temptokenb
+\def\tblnote@list{}
+
+\def\tablenotetext#1#2{
+ \@temptokena={\vspace{.5ex}{\noindent\llap{$^{#1}$}#2}\par}
+ \@temptokenb=\expandafter{\tblnote@list}
+ \xdef\tblnote@list{\the\@temptokenb\the\@temptokena}}
+
+\def\spew@tblnotes{
+ \ifx\tblnote@list\@empty\relax
+ \else
+ \vspace{4.5ex}
+ \footnoterule
+ \vspace{.5ex}
+ {\footnotesize\tblnote@list}
+ \gdef\tblnote@list{}
+ \fi}
+
+\def\endtable{\spew@tblnotes\end@float}
+\@namedef{endtable*}{\spew@tblnotes\end@dblfloat}
+
+% Add a \tableline command for use in tabular environments. This command
+% produces the horizontal rule(s) between the column headings and the body
+% of the table. Authors are discouraged from using any \hlines themselves,
+% and are typically forbidden from using vertical rules by editors.
+
+\let\tableline=\hline
+
+% \@makecaption determines formatting for figure and table captions.
+% For manuscripts, all captions should be set as flushleft paragraphs.
+
+\long\def\@makecaption#1#2{\vskip 2ex\noindent #1 #2\par}
+
+% The \tablenum command allows the author to override all automatic
+% table marking schemes.
+%
+% \tablenum{TEXT}
+
+\def\tablenum#1{\def\thetable{#1}\let\@currentlabel\thetable
+ \addtocounter{table}{\m@ne}}
+
+% The \figurenum command allows the author to override all automatic
+% figure marking schemes.
+%
+% \figurenum{TEXT}
+
+\def\figurenum#1{\def\thefigure{#1}\let\@currentlabel\thefigure
+ \addtocounter{figure}{\m@ne}}
+
+% ****************************************
+% * PLANO TABLES *
+% ****************************************
+
+% Plano tables are camera-ready pages that are included in a typeset
+% article the same way as line drawings, graphs, and other camera-ready
+% art, i.e., as "planographic" figures. There are desirable properties
+% for a formatter to have that are somewhat above and beyond LaTeX'x
+% tabular environment that would facilitate the creation of such tables.
+% Among these are breaking long tables across pages, using footnotes
+% in a table, specifying comments and references for tables, etc.
+%
+% What follows was inspired by supertab.sty by Theo Jurriens, 1988.
+
+% Commands for identifying table elements in a consistent way. Observe
+% that the formatting is embedded in the macro definitions so that the
+% author doesn't need to be concerned about stylistic nuances.
+%
+% \tablecaption{TEXT}
+% \tablehead{TEXT}
+% \colhead{HEADING}
+% \tabletail{TEXT}
+% \tablewidth{DIMEN}
+% \tableheadfrac{NUM}
+%
+% AJ has no "standard" widths for camera-ready tables, they simply need
+% to be narrower than the page. Landscape orientation is acceptable,
+% and I have provided the pseudo-option \ptlandscape that resets the
+% page dimensions; the author is still responsible for running the
+% local DVI translator with the proper parameters so that landscape
+% pages actually emerge from the laser printer.
+
+\newbox\pt@box
+\newdimen\pt@width
+\newcount\pt@line
+\newcount\pt@nlines
+\newcount\pt@ncol
+
+\def\colhead#1{\omit\hidewidth{#1}\hidewidth\global\advance\pt@ncol by\@ne}
+\def\tablecaption#1{\gdef\pt@caption{#1}} \def\pt@caption{\relax}
+\def\tablehead#1{\gdef\pt@head{
+ #1\hskip\tabcolsep\\[.7ex]\hline\relax\\[-1.5ex]}} \def\pt@head{\relax}
+\def\tabletail#1{\gdef\pt@tail{#1}} \def\pt@tail{\relax}
+\def\tablewidth#1{\pt@width=#1} \pt@width\textwidth
+\def\tableheadfrac#1{\gdef\pt@headfrac{#1}} \def\pt@headfrac{.1}
+
+% Calculate the number of tabular rows that will fit in the body of the
+% table. The height of the table body and the number of lines are
+% calculated thus:
+%
+% bodyheight = \textheight * (1 - \pt@headfrac)
+% \pt@nlines = bodyheight / (\arraystretch * \baselineskip)
+%
+% The row height can be seen to be valid algebraically if one examines the
+% definitions for \strutbox, \@setstrut, and \@array. I could eliminate
+% this calculation, as well as its attendant parameters, if it were possible
+% to determine the accumulated height of the \halign box as TeX goes along.
+
+\def\pt@calcnlines{\@tempdima\pt@headfrac\textheight
+ \@tempdimb\textheight\advance\@tempdimb by-\@tempdima
+ \@tempdima\arraystretch\baselineskip
+ \divide\@tempdimb by\@tempdima
+ \global\pt@nlines\@tempdimb}
+
+% Define \pt@tabular, a ripoff of \@tabular but with \leavevmode removed
+% so tabular box can be set with \setbox. I do this so that table notes
+% can be set to natural width of table, if desired. Also, set \@acol
+% to \@ptabacol, which is called when building the preamble for the
+% \halign (assuming the first column format specification is "l", which
+% it should be for ApJ tables) so that \tabskip within the table is set
+% to \fill. This permits us to toggle between natural and fixed-width
+% tables without requiring the user to change markup. Note that by
+% forcing \tabskip always to be \fill, I pretty well nullify any
+% @{\hspace} commands the user puts in the template, but this environment
+% is for people who don't want to think about that sort of stuff anyway.
+
+\def\pt@tabular{\hbox \bgroup $\let\@acol\@ptabacol
+ \let\@classz\@tabclassz
+ \let\@classiv\@tabclassiv \let\\\@tabularcr\@tabarray}
+
+\def\@ptabacol{\edef\@preamble{\@preamble \hskip \tabcolsep\tabskip\fill}}
+
+% Permit different identifying strings, one for the first page of the
+% table and one for continuation pages. LaTeX's \fnum@table is set to
+% one or the other automatically in the environment. Note that caption
+% handling is not so graceful: you have to edit inside the big macros to
+% adjust this. Someday, I will be ambitious enough to fix this.
+
+\def\fnum@ptable{Table \thetable.}
+\def\fnum@ptablecont{Table \thetable.\space{\rm (continued)}}
+
+\def\set@mkcaption{\long\def\@makecaption##1##2{
+ \center\large{\sc##1}\space##2\endcenter\vskip 1.5ex}}
+\def\set@mkcaptioncont{\long\def\@makecaption##1##2{
+ \center\large{\sc##1}\endcenter\vskip 1.5ex}}
+
+% The environment definition. It is desirable for the last portion of
+% a multi-page table to be \topinserted, rather than \midinserted.
+% At the moment, this doesn't happen. It's not straightforward to
+% make that preference known at the *end* of table processing.
+%
+% \begin{planotable}
+% \end{planotable}
+%
+% \startdata
+
+\newenvironment{planotable}[1]{\def\pt@format{\string#1}%
+ \set@tblnotetext\pt@ncol=0}%
+ {\crcr\noalign{\vskip .7ex}\hline\hline\endtabular%
+ \pt@width\wd\pt@box\box\pt@box\spew@ptblnotes%
+ \typeout{Table \thetable\space has been set to width \the\pt@width}%
+ \endcenter\end@float}
+
+\def\startdata{\pt@line=0\pt@calcnlines%
+ \ifdim\pt@width>\z@\def\@halignto{to \pt@width}\else\def\@halignto{}\fi%
+ \let\fnum@table=\fnum@ptable\set@mkcaption%
+ \@float{table}\center\caption{\pt@caption}\leavevmode%
+ \setbox\pt@box=\pt@tabular{\pt@format}%
+ \hline\hline\relax\\[-1.7ex]\pt@head}
+
+% A kludgey kind of line delimiter is needed so that the line counter
+% can be checked prior to adding the line to the alignment box. This
+% is bad because this form does not permit the addition of vertical
+% space using the [.5ex] construct; this has to be done with an explicit
+% \vskip. And a disgusting \noalign is required, so I have to create
+% another silly piece of markup to accomplish this conveniently.
+%
+% What is desired, of course, is for this line count checking to take
+% place within the syntax of the regular LaTeX \\ command. I have been
+% giving myself apoplexy trying to figure this out for the last 36 hours,
+% and I have decided I will have to wait for the onset of my "lucid
+% period" for a solution. In the meantime...
+
+\def\pt@nl{\global\advance\pt@line by\@ne%
+ \ifnum\pt@line=\pt@nlines%
+ \\\noalign{\vskip .7ex}\hline\endtabular\box\pt@box%
+ \endcenter\end@float\clearpage%
+ \addtocounter{table}{\m@ne}%
+ \let\fnum@table=\fnum@ptablecont\set@mkcaptioncont%
+ \@float{table}\center\caption{\pt@caption}\leavevmode%
+ \global\pt@ncol=0%
+ \setbox\pt@box=\pt@tabular{\pt@format}%
+ \hline\relax\\[-1.7ex]\pt@head%
+ \global\pt@line=0%
+ \else\\
+ \fi}
+
+% Author markup commands for planotable environment line breaks.
+%
+% \nl == \nextline
+% \tablevspace{DIMEN}
+% \tablebreak
+
+\let\nl=\pt@nl
+\let\nextline=\pt@nl
+
+\def\tablevspace#1{\noalign{\vskip{#1}}}
+\def\tablebreak{\pt@line\pt@nlines\advance\pt@line by\m@ne\pt@nl}
+
+% We have some specialty heads that are sometimes wanted in tables.
+%
+% \cutinhead{TEXT}
+% \sidehead{TEXT}
+
+\def\cutinhead#1{\noalign{\vskip 1.5ex}
+ \hline\pt@nl\noalign{\vskip -4ex}
+ \multicolumn{\pt@ncol}{c}{#1}\pt@nl
+ \noalign{\vskip .8ex}
+ \hline\pt@nl\noalign{\vskip -2ex}}
+
+\def\sidehead#1{\noalign{\vskip 1.5ex}
+ \multicolumn{\pt@ncol}{@{\hskip\z@}l}{#1}\pt@nl
+ \noalign{\vskip .5ex}}
+
+% Internal commands for dealing with table footnotes. I had to hack at
+% these to make them co-exist with similarly/identically named commands
+% for non-plano tables. This is admittedly ugly, and is on the agenda
+% for improved treatment Real Soon Now.
+
+\def\set@tblnotetext{\def\tablenotetext##1##2{{%
+ \@temptokena={\vspace{0ex}{%
+ \parbox{\pt@width}{\hskip1em$^{\rm ##1}$##2}\par}}%
+ \@temptokenb=\expandafter{\tblnote@list}
+ \xdef\tblnote@list{\the\@temptokenb\the\@temptokena}}}}
+
+\def\spew@ptblnotes{
+ \ifx\tblnote@list\@empty\relax
+ \else
+ \par
+ \vspace{2ex}
+ {\tblnote@list}
+ \gdef\tblnote@list{}
+ \fi}
+
+% Special kinds of table footnotes. Sometimes authors tabulate things
+% which have corresponding references, and it may be desirable to associate
+% these references with the table rather than (or in addition to) the
+% formal reference list. Occasionally, authors wish to append a short
+% paragraph of explanatory notes that pertain to the entire table, but
+% which are different than the caption.
+%
+% \tablerefs{REFERENCE LIST}
+% \tablecomments{TEXT}
+
+\def\tablerefs#1{\@temptokena={\vspace*{2.0ex}{%
+ {\rm References for Table \thetable.}\\%
+ \vspace*{1.6ex}%
+ \parbox{\pt@width}{#1}\par}}%
+ \@temptokenb=\expandafter{\tblnote@list}
+ \xdef\tblnote@list{\the\@temptokenb\the\@temptokena}}
+
+\def\tablecomments#1{\@temptokena={\vspace*{2.0ex}{%
+ {\rm Notes to Table \thetable.}\\%
+ \vspace*{1.6ex}%
+ \parbox{\pt@width}{#1}\par}}%
+ \@temptokenb=\expandafter{\tblnote@list}
+ \xdef\tblnote@list{\the\@temptokenb\the\@temptokena}}
+
+% Figure and table style parameters.
+
+\def\thefigure{\@arabic\c@figure}
+\def\fnum@figure{{\rm Fig.\space\thefigure.---}}
+
+\def\thetable{\@arabic\c@table}
+\def\fnum@table{{\rm Table \thetable:}}
+
+% Figure and table float positions.
+
+\def\fps@figure{bp}
+\def\fps@table{bp}
+
+% ****************************************
+% * EPS INCLUSIONS *
+% ****************************************
+
+% Include Rokicki's epsf.sty file explicitly.
+
+\@ifundefined{epsfbox}{\@input{epsf.sty}}{\relax}
+
+% Simplified EPS inclusion macros so we can see how this goes...
+% These are layered on Rokicki's dvips material, and are dependent
+% on the author's use of that DVI driver.
+%
+% \plotone{EPSFILE}
+% \plottwo{EPSFILE}{EPSFILE}
+% \plotfiddle{EPSFILE}{VSIZE}{ROT}{HSF}{VSF}{HTRANS}{VTRANS}
+%
+% \plotone inserts the plot in a space that is \columnwidth wide; the
+% plot is scaled so the horizontal dimension fits in the text width,
+% and the vertical dimension is scaled to maintain the aspect ratio.
+% \plottwo inserts two plots next to each other in one \columnwidth,
+% sort of like "two-up" mode.
+%
+% EPSFILE name of file with EPS
+%
+% The following arguments are for the \plotfiddle macro which formats
+% the \special itself, prepares vspace, etc. This completely bypasses
+% Rokicki's macros that attempt to rationalize the EPS BoundingBox with
+% the LaTeX page dimensions.
+%
+% VSIZE vertical white space to allow for plot
+% ROT rotation angle
+% HSF horiz scale factor
+% VSF vert scale factor
+% HTRANS horiz translation
+% VTRANS vert translation
+
+%\epsfverbosetrue
+
+\def\plotone#1{\centering \leavevmode
+ \epsfxsize=\columnwidth \epsfbox{#1}}
+
+\def\plottwo#1#2{\centering \leavevmode
+ \epsfxsize=.45\columnwidth \epsfbox{#1} \hfil
+ \epsfxsize=.45\columnwidth \epsfbox{#2}}
+
+\def\plotfiddle#1#2#3#4#5#6#7{\centering \leavevmode
+ \vbox to#2{\rule{0pt}{#2}}
+ \special{psfile=#1 voffset=#7 hoffset=#6 vscale=#5 hscale=#4 angle=#3}}
+
+%\@input{abbrevs.sty}
+
+% ****************************************
+% * ABBREVIATIONS *
+% ****************************************
+
+% Abbreviations for journals. The object here is to provide authors
+% with convenient shorthands for the most "popular" (often-cited)
+% journals; the author can use these markup tags without being concerned
+% about the exact form of the journal abbreviation, or its formatting.
+% It is up to the keeper of the macros to make sure the macros expand
+% to the proper text. If macro package writers agree to all use the
+% same TeX command name, authors only have to remember one thing, and
+% the style file will take care of editorial preferences. This also
+% applies when a single journal decides to revamp its abbreviating
+% scheme, as happened with the ApJ (Abt 1991).
+
+\let\jnl@style=\rm
+\def\ref@jnl#1{{\jnl@style#1}}
+
+\def\aj{\ref@jnl{AJ}} % Astronomical Journal
+\def\araa{\ref@jnl{ARA\&A}} % Annual Review of Astron and Astrophys
+\def\apj{\ref@jnl{ApJ}} % Astrophysical Journal
+\def\apjl{\ref@jnl{ApJ}} % Astrophysical Journal, Letters
+\def\apjs{\ref@jnl{ApJS}} % Astrophysical Journal, Supplement
+\def\ao{\ref@jnl{Appl.Optics}} % Applied Optics
+\def\apss{\ref@jnl{Ap\&SS}} % Astrophysics and Space Science
+\def\aap{\ref@jnl{A\&A}} % Astronomy and Astrophysics
+\def\aapr{\ref@jnl{A\&A~Rev.}} % Astronomy and Astrophysics Reviews
+\def\aaps{\ref@jnl{A\&AS}} % Astronomy and Astrophysics, Supplement
+\def\azh{\ref@jnl{AZh}} % Astronomicheskii Zhurnal
+\def\baas{\ref@jnl{BAAS}} % Bulletin of the AAS
+\def\jrasc{\ref@jnl{JRASC}} % Journal of the RAS of Canada
+\def\memras{\ref@jnl{MmRAS}} % Memoirs of the RAS
+\def\mnras{\ref@jnl{MNRAS}} % Monthly Notices of the RAS
+\def\pra{\ref@jnl{Phys.Rev.A}} % Physical Review A: General Physics
+\def\prb{\ref@jnl{Phys.Rev.B}} % Physical Review B: Solid State
+\def\prc{\ref@jnl{Phys.Rev.C}} % Physical Review C
+\def\prd{\ref@jnl{Phys.Rev.D}} % Physical Review D
+\def\prl{\ref@jnl{Phys.Rev.Lett}} % Physical Review Letters
+\def\pasp{\ref@jnl{PASP}} % Publications of the ASP
+\def\pasj{\ref@jnl{PASJ}} % Publications of the ASJ
+\def\qjras{\ref@jnl{QJRAS}} % Quarterly Journal of the RAS
+\def\skytel{\ref@jnl{S\&T}} % Sky and Telescope
+\def\solphys{\ref@jnl{Solar~Phys.}} % Solar Physics
+\def\sovast{\ref@jnl{Soviet~Ast.}} % Soviet Astronomy
+\def\ssr{\ref@jnl{Space~Sci.Rev.}} % Space Science Reviews
+\def\zap{\ref@jnl{ZAp}} % Zeitschrift fuer Astrophysik
+
+\let\astap=\aap
+\let\apjlett=\apjl
+\let\apjsupp=\apjs
+
+%\@input{misc.sty}
+
+% ****************************************
+% * MISCELLANEOUS *
+% ****************************************
+
+% Handy little things everybody works out for themselves anyway. Many
+% of these come from Springer's A&A package, and some were contributed
+% by Francois Schweizer at DTM. You can go berserk making these up,
+% especially when you start getting into the composite ones. We have
+% tried to select a tractable number that were useful, and somewhat
+% difficult to get right because fussy kerning or some such is required.
+% Most can be used in or out of math mode with impunity; \alt and \agt
+% are relations and can only be used in math mode.
+
+\def\deg{\hbox{$^\circ$}}
+\def\sun{\hbox{$\odot$}}
+\def\earth{\hbox{$\oplus$}}
+\def\lesssim{\mathrel{\hbox{\rlap{\hbox{\lower4pt\hbox{$\sim$}}}\hbox{$<$}}}}
+\def\gtrsim{\mathrel{\hbox{\rlap{\hbox{\lower4pt\hbox{$\sim$}}}\hbox{$>$}}}}
+\def\sq{\hbox{\rlap{$\sqcap$}$\sqcup$}}
+\def\arcmin{\hbox{$^\prime$}}
+\def\arcsec{\hbox{$^{\prime\prime}$}}
+\def\fd{\hbox{$.\!\!^{\rm d}$}}
+\def\fh{\hbox{$.\!\!^{\rm h}$}}
+\def\fm{\hbox{$.\!\!^{\rm m}$}}
+\def\fs{\hbox{$.\!\!^{\rm s}$}}
+\def\fdg{\hbox{$.\!\!^\circ$}}
+\def\farcm{\hbox{$.\mkern-4mu^\prime$}}
+\def\farcs{\hbox{$.\!\!^{\prime\prime}$}}
+\def\fp{\hbox{$.\!\!^{\scriptscriptstyle\rm p}$}}
+\def\micron{\hbox{$\mu$m}}
+
+\let\la=\lesssim % For Springer A&A compliance...
+\let\ga=\gtrsim
+
+% Permit author to typeset "case" fractions. This is sometimes
+% wanted in displayed equations, during which LaTeX will set fractions
+% specified as \frac{x}{y} as "built-up" fractions (numerator and
+% denominator at body text size).
+
+\def\case#1#2{\hbox{$\frac{#1}{#2}$}}
+
+% Permit author to typeset fractions set with solidus where the size
+% is reduced and the numerals are oriented diagonally. Note that this
+% is different from a "shilled" fraction, which the author can produce
+% without any special formatting markup. Define markup shorthands for
+% several common fractions using solidus.
+
+\def\slantfrac#1#2{\hbox{$\,^#1\!/_#2$}}
+\def\onehalf{\slantfrac{1}{2}}
+\def\onethird{\slantfrac{1}{3}}
+\def\twothirds{\slantfrac{2}{3}}
+\def\onequarter{\slantfrac{1}{4}}
+\def\threequarters{\slantfrac{3}{4}}
+
+\def\ubvr{\hbox{$U\!BV\!R$}} % UBVR system
+\def\ub{\hbox{$U\!-\!B$}} % U-B
+\def\bv{\hbox{$B\!-\!V$}} % B-V
+\def\vr{\hbox{$V\!-\!R$}} % V-R
+\def\ur{\hbox{$U\!-\!R$}} % U-R
+
+% Notation for atomic species (ionization levels). The ionization state
+% is specified as the second argument, and should be given as a numeral.
+% The macro has to expand the numeric state into the proper notation for
+% the publication (roman, numeric, plus signs, etc.)
+%
+% \ion{ELEMENT}{IONIZATION STATE}
+
+\def\ion#1#2{#1$\;${\small\rm\@Roman{#2}}\relax}
+
+% Centered ellipsis for use in tables (for unknown values). \nodata
+% is generalized markup for this notion: format of null-valued entries
+% in tables is style-specific.
+
+%\def\cellipsis{\hfill$\cdots$\hfill}
+\def\nodata{\multicolumn{1}{c}{---}}
+
+% This is a generalization of the \LaTeX definition that comes in LaTeX.
+% The change here ensures that LaTeX will be typeset in the current style,
+% rather than always in roman.
+
+\newcount\lecurrentfam
+\def\LaTeX{\lecurrentfam=\the\fam \leavevmode L\raise.42ex
+ \hbox{$\fam\lecurrentfam\scriptstyle\kern-.3em A$}\kern-.15em\TeX}
+
+% ****************************************
+% * DEBUGGING *
+% ****************************************
+
+\def\sizrpt{
+ (\fontname\the\font): em=\the\fontdimen6\font, ex=\the\fontdimen5\font
+ \typeout{
+ (\fontname\the\font): em=\the\fontdimen6\font, ex=\the\fontdimen5\font
+}}
diff --git a/obsolete/macros/latex209/contrib/aasmacros/aj_pt.sty b/obsolete/macros/latex209/contrib/aasmacros/aj_pt.sty
new file mode 100644
index 0000000000..88d28c8ee9
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aasmacros/aj_pt.sty
@@ -0,0 +1,409 @@
+\def\revtex@ver{1.1}
+\def\revtex@date{10 Jan 93}
+\def\revtex@org{AAS}
+\def\revtex@jnl{AJ}
+\def\revtex@genre{plano tables}
+\typeout{\revtex@org\space \revtex@jnl\space \revtex@genre\space substyle,
+v\revtex@ver\space <\revtex@date>.}
+\def\revtex@pageid{\xdef\@thefnmark{\null}
+\@footnotetext{This \revtex@genre\space was prepared with the
+ \revtex@org\space \LaTeX\ macros v\revtex@ver.}}
+\def\genre@MS{manuscript}
+\ifx\revtex@genre\genre@MS
+\ifnum\@ptsize<2
+\typeout{Warning: Undersize \revtex@genre\space font (1\@ptsize\space pts).
+ Use 12pt documentstyle option.}
+\fi
+\fi
+\ps@plain
+\def\ps@plaintop{\let\@mkboth\@gobbletwo
+\def\@oddfoot{}\def\@oddhead{\rm\hfil--\space\thepage\space--\hfil}
+\def\@evenfoot{}\let\@evenhead\@oddhead}
+\newdimen\@fmwidth \@fmwidth=44pc
+\newdimen\@bodywidth \@bodywidth=44pc
+\textwidth=\@bodywidth
+\textheight=8.9in
+\topmargin=0in
+\headheight=0in
+\headsep=0in
+\oddsidemargin=0in
+\evensidemargin=0in
+\parindent=1em
+\parskip=0ex
+\columnsep=1pc
+\hoffset=-2.5pc
+\tolerance=400
+\def\ptlandscape{\textwidth=9in \textheight=6.5in \hoffset=0in}
+\def\@tightleading{1.1}
+\def\@doubleleading{1.6}
+\def\tighten=\relax
+\let\tightenlines=\tighten
+\def\singlespace{\def\baselinestretch{\@tightleading}\normalsize}
+\def\doublespace{\def\baselinestretch{\@doubleleading}\normalsize}
+\def\sec@upcase#1{\relax{#1}}
+\def\eqsecnum{
+\@newctr{equation}[section]
+\def\theequation{\hbox{\normalsize\arabic{section}-\arabic{equation}}}}
+\def\@journalname{The Astropolitical Journal}
+\def\cpr@holder{American Astronomical Society}
+\def\received#1{\gdef\@recvdate{#1}} \received{\relax}
+\def\revised#1{\gdef\@revisedate{#1}} \revised{\relax}
+\def\accepted#1{\gdef\@accptdate{#1}} \accepted{\relax}
+\def\journalid#1#2{\gdef\@jourvol{#1}\gdef\@jourdate{#2}}
+\def\articleid#1#2{\gdef\@startpage{#1}\gdef\@finishpage{#2}}
+\def\paperid#1{\gdef\@paperid{#1}} \paperid{MS-0001-SAMP}
+\def\ccc#1{\gdef\CCC@code{#1}} \ccc{000-00\$75.95-CDB}
+\def\cpright#1#2{\@nameuse{cpr@#1} \gdef\cpr@year{#2}
+\typeout{`#1' copyright \cpr@year.}}
+\newcount\@cprtype \@cprtype=\@ne
+\def\cpr@AAS{\@cprtype=1}
+\def\cpr@PD{\@cprtype=2}
+\def\cpr@Crown{\@cprtype=3}
+\def\cpr@none{\@cprtype=4}
+\def\cpr@year{\number\year}
+\def\@slug{\par\noindent
+\ifcase\@cprtype
+ \relax
+\or
+ Copyright \cpr@year\space by the \cpr@holder.
+\or
+ This article is in the public domain.
+\or
+ Crown copyright \cpr@year\space by the \cpr@holder.
+\or
+ No copyright is claimed for this article.
+\fi
+\par\noindent
+Manuscript number \@paperid.\par\noindent
+\CCC@code
+}
+\def\lefthead#1{\gdef\@versohead{#1}} \lefthead{\relax}
+\def\righthead#1{\gdef\@rectohead{#1}} \righthead{\relax}
+\def\@runheads{\@tempcnta\c@page
+\@whilenum \@tempcnta >0\do{
+\vskip 3ex
+\hbox to30pc{\small\expandafter\uppercase\expandafter{\@versohead}:
+ \expandafter\uppercase\expandafter{\@rectohead}\hfil}
+\advance\@tempcnta by\m@ne}
+}
+\def\slugcomment#1{\gdef\slug@comment{#1}} \slugcomment{\relax}
+\def\@rcvaccrule{\vrule\@width1.75in\@height0.5pt\@depth\z@}
+\def\@dates{{Received}\space%
+\if\@recvdate\relax\@rcvaccrule\else\@recvdate\fi;%
+\hspace{1.5em}{accepted}\space%
+\if\@accptdate\relax\@rcvaccrule\else\@accptdate\fi%
+}
+\def\sluginfo{{\center
+\@dates
+
+
+\endcenter}}
+\let\dates=\sluginfo
+\def\abstract{\sluginfo\clearpage
+\begin{center}
+{\bf{ABSTRACT}}
+\end{center}
+\quotation
+}
+\def\title#1{{\def\baselinestretch{\@tightleading}
+\center\large\bf{#1}\endcenter}
+\thispagestyle{empty}}
+\def\author#1{{\topsep\z@\center\normalsize#1\endcenter}}
+\let\authoraddr=\@gobble
+\def\affil#1{\vspace*{-2.5ex}{\topsep\z@\center#1\endcenter}}
+\def\altaffilmark#1{$^{#1}$}
+\def\altaffiltext#1#2{\footnotetext[#1]{#2}\stepcounter{footnote}}
+\def\and{\vspace*{-0.5ex}{\topsep\z@\center and\endcenter}}
+\def\@keywordtext{Subject headings}
+\def\@keyworddelim{---}
+\def\keywords#1{\vspace*{-.7ex}
+\if@twocolumn\noindent{{\it\@keywordtext:\/}\space\@kwds{#1}}
+\else{\quote{\it\@keywordtext:\/}\space\@kwds{#1}\endquote}
+\fi}
+\let\subjectheadings=\keywords
+\def\@kwds#1{\def\@kwddlm{}\@for\@kwd:=#1\do
+{\@kwddlm\def\@kwddlm{\space\@keyworddelim\penalty\@m\space}{\@kwd}}}
+\skip\footins 4ex plus 1ex minus .5ex
+\footnotesep 3ex
+\def\section{\@startsection {section}{1}{\z@}
+{5ex plus .5ex}{1ex plus .2ex}{\normalsize\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}
+{5ex plus .5ex}{1ex plus .2ex}{\normalsize\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}
+{5ex plus .5ex}{1ex plus .2ex}{\normalsize\it}}
+\def\thesection{\@arabic{\c@section}.}
+\def\thesubsection{\thesection\@arabic{\c@subsection}.}
+\def\thesubsubsection{\thesubsection\@arabic{\c@subsubsection}.}
+\def\theparagraph{\thesubsubsection\@arabic{\c@paragraph}:}
+\def\acknowledgments{\vskip 3ex plus .8ex minus .4ex}
+\let\acknowledgements=\acknowledgments
+\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
+\def\@svsec{}\else
+\refstepcounter{#1}\edef\@svsec{\csname the#1\endcsname\hskip 1em }\fi
+\@tempskipa #5\relax
+\ifdim \@tempskipa>\z@
+\begingroup \center#6\relax
+\@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M
+ \sec@upcase{#8}\par}%
+\endcenter\endgroup
+\csname #1mark\endcsname{#7}\addcontentsline
+{toc}{#1}{\ifnum #2>\c@secnumdepth \else
+\protect\numberline{\csname the#1\endcsname}\fi
+#7}\else
+\def\@svsechd{#6\hskip #3\@svsec \sec@upcase{#8}\csname #1mark\endcsname
+{#7}\addcontentsline
+{toc}{#1}{\ifnum #2>\c@secnumdepth \else
+\protect\numberline{\csname the#1\endcsname}\fi
+#7}}\fi
+\@xsect{#5}}
+\def\@ssect#1#2#3#4#5{\@tempskipa #3\relax
+\ifdim \@tempskipa>\z@
+\begingroup #4\center\@hangfrom{\hskip #1}{\interlinepenalty \@M
+\sec@upcase{#5}\par}\endcenter\endgroup
+\else \def\@svsechd{#4\hskip #1\relax \sec@upcase{#5}}\fi
+\@xsect{#3}}
+\def\appendix{\par
+\setcounter{section}{0}
+\setcounter{subsection}{0}
+\setcounter{equation}{0}
+\def\thesection{\Alph{section}.}
+\def\theequation{\hbox{\normalsize\Alph{section}\arabic{equation}}}}
+\newcounter{cureqno}
+\newenvironment{mathletters}{\refstepcounter{equation}%
+\setcounter{cureqno}{\value{equation}}%
+\let\@curtheeqn\theequation%
+\edef\cur@eqn{\csname theequation\endcsname}%
+\def\theequation{\cur@eqn\alph{equation}}%
+\setcounter{equation}{0}}%
+{\let\theequation\@curtheeqn%
+\setcounter{equation}{\value{cureqno}}}
+\def\eqnum#1{\def\theequation{#1}\let\@currentlabel\theequation
+\addtocounter{equation}{\m@ne}}
+\def\references{\subsection*{REFERENCES}
+\bgroup\parindent=\z@\parskip=\itemsep
+\def\refpar{\par\hangindent=3em\hangafter=1}}
+\def\endreferences{\refpar\egroup\revtex@pageid}
+\def\thebibliography{\subsection*{REFERENCES}
+\list{\null}{\leftmargin 3em\labelwidth\z@\labelsep\z@\itemindent -3em
+\usecounter{enumi}}
+\def\refpar{\relax}
+\def\newblock{\hskip .11em plus .33em minus .07em}
+\sloppy\clubpenalty4000\widowpenalty4000
+\sfcode`\.=1000\relax}
+\def\endthebibliography{\endlist\revtex@pageid}
+\def\@biblabel#1{\relax}
+\def\@cite#1#2{#1\if@tempswa , #2\fi}
+\def\reference{\relax\refpar}
+\def\markcite#1{#1\relax}
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+\def\@citea{}\@cite{\@for\@citeb:=#2\do
+{\@citea\def\@citea{,\penalty\@m\ }\@ifundefined
+{b@\@citeb}{\@warning
+{Citation `\@citeb' on page \thepage \space undefined}}%
+{\csname b@\@citeb\endcsname}}}{#1}}
+\let\keywords=\@gobble
+\let\subjectheadings=\@gobble
+\def\tablenotemark#1{\rlap{$^{\rm #1}$}}
+\newtoks\@temptokenb
+\def\tblnote@list{}
+\def\tablenotetext#1#2{
+\@temptokena={\vspace{.5ex}{\noindent\llap{$^{#1}$}#2}\par}
+\@temptokenb=\expandafter{\tblnote@list}
+\xdef\tblnote@list{\the\@temptokenb\the\@temptokena}}
+\def\spew@tblnotes{
+\ifx\tblnote@list\@empty\relax
+\else
+\vspace{4.5ex}
+\footnoterule
+\vspace{.5ex}
+{\footnotesize\tblnote@list}
+\gdef\tblnote@list{}
+\fi}
+\def\endtable{\spew@tblnotes\end@float}
+\@namedef{endtable*}{\spew@tblnotes\end@dblfloat}
+\let\tableline=\hline
+\long\def\@makecaption#1#2{\vskip 2ex\noindent #1 #2\par}
+\def\tablenum#1{\def\thetable{#1}\let\@currentlabel\thetable
+\addtocounter{table}{\m@ne}}
+\def\figurenum#1{\def\thefigure{#1}\let\@currentlabel\thefigure
+\addtocounter{figure}{\m@ne}}
+\newbox\pt@box
+\newdimen\pt@width
+\newcount\pt@line
+\newcount\pt@nlines
+\newcount\pt@ncol
+\def\colhead#1{\omit\hidewidth{#1}\hidewidth\global\advance\pt@ncol by\@ne}
+\def\tablecaption#1{\gdef\pt@caption{#1}} \def\pt@caption{\relax}
+\def\tablehead#1{\gdef\pt@head{
+#1\hskip\tabcolsep\\[.7ex]\hline\relax\\[-1.5ex]}} \def\pt@head{\relax}
+\def\tabletail#1{\gdef\pt@tail{#1}} \def\pt@tail{\relax}
+\def\tablewidth#1{\pt@width=#1} \pt@width\textwidth
+\def\tableheadfrac#1{\gdef\pt@headfrac{#1}} \def\pt@headfrac{.1}
+\def\pt@calcnlines{\@tempdima\pt@headfrac\textheight
+\@tempdimb\textheight\advance\@tempdimb by-\@tempdima
+\@tempdima\arraystretch\baselineskip
+\divide\@tempdimb by\@tempdima
+\global\pt@nlines\@tempdimb}
+\def\pt@tabular{\hbox \bgroup $\let\@acol\@ptabacol
+\let\@classz\@tabclassz
+\let\@classiv\@tabclassiv \let\\\@tabularcr\@tabarray}
+\def\@ptabacol{\edef\@preamble{\@preamble \hskip \tabcolsep\tabskip\fill}}
+\def\fnum@ptable{Table \thetable.}
+\def\fnum@ptablecont{Table \thetable.\space{\rm (continued)}}
+\def\set@mkcaption{\long\def\@makecaption##1##2{
+\center\large{\sc##1}\space##2\endcenter\vskip 1.5ex}}
+\def\set@mkcaptioncont{\long\def\@makecaption##1##2{
+\center\large{\sc##1}\endcenter\vskip 1.5ex}}
+\newenvironment{planotable}[1]{\def\pt@format{\string#1}%
+\set@tblnotetext\pt@ncol=0}%
+{\crcr\noalign{\vskip .7ex}\hline\hline\endtabular%
+\pt@width\wd\pt@box\box\pt@box\spew@ptblnotes%
+\typeout{Table \thetable\space has been set to width \the\pt@width}%
+\endcenter\end@float}
+\def\startdata{\pt@line=0\pt@calcnlines%
+\ifdim\pt@width>\z@\def\@halignto{to \pt@width}\else\def\@halignto{}\fi%
+\let\fnum@table=\fnum@ptable\set@mkcaption%
+\@float{table}\center\caption{\pt@caption}\leavevmode%
+\setbox\pt@box=\pt@tabular{\pt@format}%
+\hline\hline\relax\\[-1.7ex]\pt@head}
+\def\pt@nl{\global\advance\pt@line by\@ne%
+\ifnum\pt@line=\pt@nlines%
+\\\noalign{\vskip .7ex}\hline\endtabular\box\pt@box%
+\endcenter\end@float\clearpage%
+\addtocounter{table}{\m@ne}%
+\let\fnum@table=\fnum@ptablecont\set@mkcaptioncont%
+\@float{table}\center\caption{\pt@caption}\leavevmode%
+\global\pt@ncol=0%
+\setbox\pt@box=\pt@tabular{\pt@format}%
+\hline\relax\\[-1.7ex]\pt@head%
+\global\pt@line=0%
+\else\\
+\fi}
+\let\nl=\pt@nl
+\let\nextline=\pt@nl
+\def\tablevspace#1{\noalign{\vskip{#1}}}
+\def\tablebreak{\pt@line\pt@nlines\advance\pt@line by\m@ne\pt@nl}
+\def\cutinhead#1{\noalign{\vskip 1.5ex}
+\hline\pt@nl\noalign{\vskip -4ex}
+\multicolumn{\pt@ncol}{c}{#1}\pt@nl
+\noalign{\vskip .8ex}
+\hline\pt@nl\noalign{\vskip -2ex}}
+\def\sidehead#1{\noalign{\vskip 1.5ex}
+\multicolumn{\pt@ncol}{@{\hskip\z@}l}{#1}\pt@nl
+\noalign{\vskip .5ex}}
+\def\set@tblnotetext{\def\tablenotetext##1##2{{%
+\@temptokena={\vspace{0ex}{%
+\parbox{\pt@width}{\hskip1em$^{\rm ##1}$##2}\par}}%
+\@temptokenb=\expandafter{\tblnote@list}
+\xdef\tblnote@list{\the\@temptokenb\the\@temptokena}}}}
+\def\spew@ptblnotes{
+\ifx\tblnote@list\@empty\relax
+\else
+\par
+\vspace{2ex}
+{\tblnote@list}
+\gdef\tblnote@list{}
+\fi}
+\def\tablerefs#1{\@temptokena={\vspace*{2.0ex}{%
+{\rm References for Table \thetable.}\\%
+\vspace*{1.6ex}%
+\parbox{\pt@width}{#1}\par}}%
+\@temptokenb=\expandafter{\tblnote@list}
+\xdef\tblnote@list{\the\@temptokenb\the\@temptokena}}
+\def\tablecomments#1{\@temptokena={\vspace*{2.0ex}{%
+{\rm Notes to Table \thetable.}\\%
+\vspace*{1.6ex}%
+\parbox{\pt@width}{#1}\par}}%
+\@temptokenb=\expandafter{\tblnote@list}
+\xdef\tblnote@list{\the\@temptokenb\the\@temptokena}}
+\def\thefigure{\@arabic\c@figure}
+\def\fnum@figure{{\rm Fig.\space\thefigure.---}}
+\def\thetable{\@arabic\c@table}
+\def\fnum@table{{\rm Table \thetable:}}
+\def\fps@figure{bp}
+\def\fps@table{bp}
+\@ifundefined{epsfbox}{\@input{epsf.sty}}{\relax}
+\def\plotone#1{\centering \leavevmode
+\epsfxsize=\columnwidth \epsfbox{#1}}
+\def\plottwo#1#2{\centering \leavevmode
+\epsfxsize=.45\columnwidth \epsfbox{#1} \hfil
+\epsfxsize=.45\columnwidth \epsfbox{#2}}
+\def\plotfiddle#1#2#3#4#5#6#7{\centering \leavevmode
+\vbox to#2{\rule{0pt}{#2}}
+\special{psfile=#1 voffset=#7 hoffset=#6 vscale=#5 hscale=#4 angle=#3}}
+\let\jnl@style=\rm
+\def\ref@jnl#1{{\jnl@style#1}}
+\def\aj{\ref@jnl{AJ}}
+\def\araa{\ref@jnl{ARA\&A}}
+\def\apj{\ref@jnl{ApJ}}
+\def\apjl{\ref@jnl{ApJ}}
+\def\apjs{\ref@jnl{ApJS}}
+\def\ao{\ref@jnl{Appl.Optics}}
+\def\apss{\ref@jnl{Ap\&SS}}
+\def\aap{\ref@jnl{A\&A}}
+\def\aapr{\ref@jnl{A\&A~Rev.}}
+\def\aaps{\ref@jnl{A\&AS}}
+\def\azh{\ref@jnl{AZh}}
+\def\baas{\ref@jnl{BAAS}}
+\def\jrasc{\ref@jnl{JRASC}}
+\def\memras{\ref@jnl{MmRAS}}
+\def\mnras{\ref@jnl{MNRAS}}
+\def\pra{\ref@jnl{Phys.Rev.A}}
+\def\prb{\ref@jnl{Phys.Rev.B}}
+\def\prc{\ref@jnl{Phys.Rev.C}}
+\def\prd{\ref@jnl{Phys.Rev.D}}
+\def\prl{\ref@jnl{Phys.Rev.Lett}}
+\def\pasp{\ref@jnl{PASP}}
+\def\pasj{\ref@jnl{PASJ}}
+\def\qjras{\ref@jnl{QJRAS}}
+\def\skytel{\ref@jnl{S\&T}}
+\def\solphys{\ref@jnl{Solar~Phys.}}
+\def\sovast{\ref@jnl{Soviet~Ast.}}
+\def\ssr{\ref@jnl{Space~Sci.Rev.}}
+\def\zap{\ref@jnl{ZAp}}
+\let\astap=\aap
+\let\apjlett=\apjl
+\let\apjsupp=\apjs
+\def\deg{\hbox{$^\circ$}}
+\def\sun{\hbox{$\odot$}}
+\def\earth{\hbox{$\oplus$}}
+\def\lesssim{\mathrel{\hbox{\rlap{\hbox{\lower4pt\hbox{$\sim$}}}\hbox{$<$}}}}
+\def\gtrsim{\mathrel{\hbox{\rlap{\hbox{\lower4pt\hbox{$\sim$}}}\hbox{$>$}}}}
+\def\sq{\hbox{\rlap{$\sqcap$}$\sqcup$}}
+\def\arcmin{\hbox{$^\prime$}}
+\def\arcsec{\hbox{$^{\prime\prime}$}}
+\def\fd{\hbox{$.\!\!^{\rm d}$}}
+\def\fh{\hbox{$.\!\!^{\rm h}$}}
+\def\fm{\hbox{$.\!\!^{\rm m}$}}
+\def\fs{\hbox{$.\!\!^{\rm s}$}}
+\def\fdg{\hbox{$.\!\!^\circ$}}
+\def\farcm{\hbox{$.\mkern-4mu^\prime$}}
+\def\farcs{\hbox{$.\!\!^{\prime\prime}$}}
+\def\fp{\hbox{$.\!\!^{\scriptscriptstyle\rm p}$}}
+\def\micron{\hbox{$\mu$m}}
+\let\la=\lesssim
+\let\ga=\gtrsim
+\def\case#1#2{\hbox{$\frac{#1}{#2}$}}
+
+
+\def\slantfrac#1#2{\hbox{$\,^#1\!/_#2$}}
+\def\onehalf{\slantfrac{1}{2}}
+\def\onethird{\slantfrac{1}{3}}
+\def\twothirds{\slantfrac{2}{3}}
+\def\onequarter{\slantfrac{1}{4}}
+\def\threequarters{\slantfrac{3}{4}}
+\def\ubvr{\hbox{$U\!BV\!R$}}
+\def\ub{\hbox{$U\!-\!B$}}
+\def\bv{\hbox{$B\!-\!V$}}
+\def\vr{\hbox{$V\!-\!R$}}
+\def\ur{\hbox{$U\!-\!R$}}
+\def\ion#1#2{#1$\;${\small\rm\@Roman{#2}}\relax}
+\def\nodata{\multicolumn{1}{c}{---}}
+\newcount\lecurrentfam
+\def\LaTeX{\lecurrentfam=\the\fam \leavevmode L\raise.42ex
+\hbox{$\fam\lecurrentfam\scriptstyle\kern-.3em A$}\kern-.15em\TeX}
+\def\sizrpt{
+(\fontname\the\font): em=\the\fontdimen6\font, ex=\the\fontdimen5\font
+\typeout{
+(\fontname\the\font): em=\the\fontdimen6\font, ex=\the\fontdimen5\font
+}}
diff --git a/obsolete/macros/latex209/contrib/aasmacros/apjpt.doc b/obsolete/macros/latex209/contrib/aasmacros/apjpt.doc
new file mode 100644
index 0000000000..a8f8b8a1e1
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aasmacros/apjpt.doc
@@ -0,0 +1,1166 @@
+% APJPT.STY -- ApJ plano tables style.
+
+% Plano tables are camera-ready pages that are included in a typeset
+% article the same way as line drawings, graphs, and other camera-ready
+% art, i.e., as "planographic" figures. This file is parameterized so
+% that the tables are appropriate for the ApJ.
+
+% My convention for identifying configuration information is for styles
+% to define the five parameters below.
+
+\def\revtex@ver{1.1} % Version number of this file.
+\def\revtex@date{10 Jan 93} % Revision date.
+\def\revtex@org{AAS} % Sponsoring organization.
+\def\revtex@jnl{ApJ} % Applicable journal, if specific.
+\def\revtex@genre{plano tables} % Document "type".
+
+% Display identifying message on screen and in logfile.
+
+\typeout{\revtex@org\space \revtex@jnl\space \revtex@genre\space substyle,
+ v\revtex@ver\space <\revtex@date>.}
+
+% The following mini-colophon identifies the article are having been
+% prepared with this macro package. The \revtex@pageid command only
+% defines the formatting of this colophon; its existence and placement
+% within the printed article is controlled by the use of this command
+% in the style file.
+
+\def\revtex@pageid{\xdef\@thefnmark{\null}
+ \@footnotetext{This \revtex@genre\space was prepared with the
+ \revtex@org\space \LaTeX\ macros v\revtex@ver.}}
+
+% Issue a warning if manuscripts are formatted with type smaller than 12pt.
+
+\def\genre@MS{manuscript}
+\ifx\revtex@genre\genre@MS
+ \ifnum\@ptsize<2
+ \typeout{Warning: Undersize \revtex@genre\space font (1\@ptsize\space pts).
+ Use 12pt documentstyle option.}
+ \fi
+\fi
+
+% ****************************************
+% * INITIALIZATION *
+% ****************************************
+
+% Initialization has to occur at the head of this file because LaTeX's
+% "plain" pagestyle is used to establish defaults. These are modified
+% below to suit the requirements of this journal.
+
+\@input{art8.sty}
+
+\ps@plain % Use "plain" pagestyle for defaults.
+
+% ****************************************
+% * PAGE LAYOUT *
+% ****************************************
+
+% Create "plaintop" page style that has folios at top of page.
+
+\def\ps@plaintop{\let\@mkboth\@gobbletwo
+ \def\@oddfoot{}\def\@oddhead{\rm\hfil--\space\thepage\space--\hfil}
+ \def\@evenfoot{}\let\@evenhead\@oddhead}
+
+%\pretolerance=10000 % Disable hyphenation
+
+% The following gives "reasonable" ragged right results.
+
+%\@rightskip=\z@ plus 4em\rightskip\@rightskip
+
+% Page size, spacing parameters, etc.
+
+\newdimen\@fmwidth \@fmwidth=44pc % Front matter width
+\newdimen\@bodywidth \@bodywidth=44pc % Body text width
+\textwidth=\@bodywidth
+\textheight=8.9in
+\topmargin=0in
+\headheight=0in % .15in
+\headsep=0in % .35in
+\oddsidemargin=0in
+\evensidemargin=0in
+\parindent=1em
+\parskip=0ex
+\columnsep=1pc
+
+\hoffset=-2.5pc % To compensate for wide \textwidth
+\tolerance=400 % 2x "normal" value; cuts down on overfull complaints
+
+
+%\@input{styopts.sty}
+
+% ****************************************
+% * STYLE OPTIONS *
+% ****************************************
+
+% Make footnotes same size as main text.
+
+%\let\footnotesize=\normalsize
+
+% Define parameters to adjust the baselineskip.
+% These are passed as the scale factor argument to \baselinestretch.
+
+\def\@tightleading{1.1}
+\def\@doubleleading{1.6}
+
+% Double-space by default. Observe that you double-space in LaTeX by
+% resetting \baselinestretch, which is essentially a scale factor for
+% \baselineskip (= leading, for you typographophiles). The style uses
+% the \@doubleleading factor, defined above.
+
+%\def\baselinestretch{\@doubleleading}
+
+% The \tighten command merely resets the \baselinestretch to a
+% smaller factor, resulting in single-column text that is more closely
+% spaced. (This will always work.) Tightening the vertical spacing
+% in the text results in output that is more attractive for distribution
+% to colleagues who are primarily interested in reading the paper, as
+% opposed to copy editing it. Double-spaced output for referees and
+% copy editors is, however, the main objective of this style, hence
+% double-spacing occurs by default. The same effect as \tighten
+% can be achieved by using the "tighten" document style option.
+%
+% \tighten
+%
+% \tighten is intended for use in the preamble of the article.
+
+%\def\tighten{\def\baselinestretch{\@tightleading}}
+\let\tighten=\relax
+\let\tightenlines=\tighten
+
+% For authors who feel compelled to change between single and double
+% spacing in the manuscript, \singlespace and \doublespace commands
+% are provided. (Following recommendations of AAS Publications Board
+% Subcommittee on Preprints.)
+%
+% \singlespace
+% \doublespace
+
+\def\singlespace{\def\baselinestretch{\@tightleading}\normalsize}
+\def\doublespace{\def\baselinestretch{\@doubleleading}\normalsize}
+
+% Upper case for sections (optional upper case items). These are created
+% so that some headings can be toggled between mixed case and upper case
+% readily. Headings that might be changed can be wrapped in the style
+% file in \sec@upcase{TEXT} constructs; the expansion of \sec@upcase is
+% controlled here. It is `\relax' by default (mixed case heads), and can
+% easily be changed to `\uppercase' if desired. If mixed case headings
+% are wanted by the editor, authors MUST supply mixed case text, although
+% this is what authors should be doing anyway. (Mixed can be converted
+% to upper, but the reverse transformation cannot be automated.)
+
+%\def\sec@upcase#1{\uppercase{#1}}
+\def\sec@upcase#1{\relax{#1}}
+
+% Sometimes people want to number equations by section, rather than
+% sequentially through the whole paper.
+
+\def\eqsecnum{
+ \@newctr{equation}[section]
+ \def\theequation{\hbox{\normalsize\arabic{section}-\arabic{equation}}}}
+
+%\@input{slug.sty}
+
+% ****************************************
+% * SLUG LINE *
+% ****************************************
+
+% There are some obvious style-dependent parameters and formatting
+% instructions in this file. The object has been to keep the author
+% commands (the user interface, if you will) society, journal, and
+% style-independent, while the style-specific parameters and commands
+% are kept below that level. Commands and parameters that are susceptible
+% to external interpretation, either by authors or publishers/translators,
+% are identified by indented comment lines, with the semantics of command
+% arguments described in upper case text.
+%
+% \@journalname{JOURNAL NAME}
+% \cpr@holder{COPYRIGHT HOLDER}
+
+\def\@journalname{The Astropolitical Journal}
+\def\cpr@holder{American Astronomical Society}
+
+% Journal and article identification information is established by the
+% editorial staff. The following macros are used by personnel at the
+% editorial office to annotate/record slug-line data and should be included
+% in the manuscript preamble, i.e., before the LaTeX \begin{document}. All
+% they do is globally define other TeX control sequences that are used by
+% other macros at a later time.
+%
+% \received{RECEIPT DATE}
+% \revised{REVISION DATE}
+% \accepted{ACCEPTANCE DATE}
+% \journalid{VOL}{JOURNAL DATE}
+% \articleid{START PAGE}{END PAGE}
+% \paperid{ID}
+% \ccc{CODE}
+%
+% For preprints and submitted manuscripts in draft/referee format, etc.,
+% the slug-line information is irrelevant and in those kinds of style,
+% the data are never used. In my estimation, it is perfectly acceptable
+% to have these commands in the file (for future use), so they are defined
+% in the usual way.
+
+\def\received#1{\gdef\@recvdate{#1}} \received{\relax}
+\def\revised#1{\gdef\@revisedate{#1}} \revised{\relax}
+\def\accepted#1{\gdef\@accptdate{#1}} \accepted{\relax}
+\def\journalid#1#2{\gdef\@jourvol{#1}\gdef\@jourdate{#2}}
+\def\articleid#1#2{\gdef\@startpage{#1}\gdef\@finishpage{#2}}
+\def\paperid#1{\gdef\@paperid{#1}} \paperid{MS-0001-SAMP}
+\def\ccc#1{\gdef\CCC@code{#1}} \ccc{000-00\$75.95-CDB}
+
+% Following copyright and running heads \defs are stubs.
+%\let\cpright=\@gobbletwo
+%\let\righthead=\@gobble
+%\let\lefthead=\@gobble
+
+% Copyright data. Permit the author/editor to supply a copyright
+% "type" as well as the year.
+%
+% \cpright{TYPE}{YEAR}
+%
+% Copyright types are designated by name and converted to numeric form.
+% The mapping of types is defined by the code that sets the @cprtype
+% counter. The language of the copyright notices is defined by \@slug.
+
+\def\cpright#1#2{\@nameuse{cpr@#1} \gdef\cpr@year{#2}
+ \typeout{`#1' copyright \cpr@year.}}
+
+\newcount\@cprtype \@cprtype=\@ne % Default copyright type.
+\def\cpr@AAS{\@cprtype=1}
+\def\cpr@PD{\@cprtype=2}
+\def\cpr@Crown{\@cprtype=3}
+\def\cpr@none{\@cprtype=4}
+\def\cpr@ASP{\@cprtype=5}
+
+\def\cpr@year{\number\year} % Default copyright year.
+
+% \@slug determines formatting of slugline information.
+
+\def\@slug{\par\noindent
+ \ifcase\@cprtype
+ \relax
+ \or
+ Copyright \cpr@year\space by the \cpr@holder.
+ \or
+ This article is in the public domain.
+ \or
+ Crown copyright \cpr@year\space by the \cpr@holder.
+ \or
+ No copyright is claimed for this article.
+ \or
+ Copyright \cpr@year\space by the ASP.
+ \fi
+ \par\noindent
+ Manuscript number \@paperid.\par\noindent
+ \CCC@code
+}
+
+% Authors may be asked to supply running head information. We use the
+% language of the publisher here to distinguish between two pieces of
+% information: the left head frequently contains an author list (last
+% names, possibly truncated as et al.), while the right head frequently
+% contains an abbreviated form of the paper title. The \lefthead and
+% \righthead commands merely collect the information and buffer the text.
+%
+% \lefthead{TEXT}
+% \righthead{TEXT}
+
+\def\lefthead#1{\gdef\@versohead{#1}} \lefthead{\relax}
+\def\righthead#1{\gdef\@rectohead{#1}} \righthead{\relax}
+
+% \@runheads determines formatting of running head information.
+
+\def\@runheads{\@tempcnta\c@page
+ \@whilenum \@tempcnta >0\do{
+ \vskip 3ex
+ \hbox to30pc{\small\expandafter\uppercase\expandafter{\@versohead}:
+ \expandafter\uppercase\expandafter{\@rectohead}\hfil}
+ \advance\@tempcnta by\m@ne}
+}
+
+% The \slugcomment command is provided so authors or editors may include
+% a remark about the manuscript that may be desired in print for some
+% styles. For instance, authors like to include information about the
+% journal and publication date of accepted papers ("To appear in AJ,
+% November 1992").
+%
+% \slugcomment{TEXT}
+%
+% The formatting of the \slugcomment information is controlled by the
+% \sluginfo command.
+
+\def\slugcomment#1{\gdef\slug@comment{#1}} \slugcomment{\relax}
+
+% Editorial offices like to have receipt and acceptance dates on the front
+% page for tracking purposes. The current practice is to require the author
+% to type Received___________________ and Accepted ________________ lines
+% for the staff to type on. The \@dates command will typeset either rules
+% or the dates specified in \received and/or \accepted commands. Note that
+% authors should not include \received and \accepted.
+
+\def\@rcvaccrule{\vrule\@width1.75in\@height0.5pt\@depth\z@}
+
+% \@dates determines formatting of MS date information.
+
+\def\@dates{{Received}\space%
+ \if\@recvdate\relax\@rcvaccrule\else\@recvdate\fi;%
+ \hspace{1.5em}{accepted}\space%
+ \if\@accptdate\relax\@rcvaccrule\else\@accptdate\fi%
+}
+
+% The \sluginfo command is executed automatically when a \begin{abstract} is
+% encountered, so it is not necessary (or appropriate) for the author to
+% include this line explicitly. The received/accepted business is a
+% concern only for the editorial staff, hence we have arranged for the
+% author not to have to fuss with it.
+
+\def\sluginfo{{\center
+ \@dates
+ %\@slug
+ %\@runheads
+ \endcenter}}
+
+\let\dates=\sluginfo % Backwards compatibility
+
+%\@input{text.sty}
+
+% ****************************************
+% * FRONT MATTER *
+% ****************************************
+
+% Make adjustments to LaTeX abstract style: optional upper case heading,
+% retain current type size (should be normalsize), ignore twocolumn option
+% in this substyle, add \sluginfo, and start abstract on fresh page.
+
+\def\abstract{\sluginfo\clearpage
+ \begin{center}
+ {\bf{ABSTRACT}}
+ \end{center}
+ \quotation
+}
+
+% Title and author identification is by way of standard LaTeX commands
+% \title and \author, although the macros themselves are rather different.
+% The information is typeset by these macros in this style, rather than
+% being buffered as per regular LaTeX. The authors' principal affiliation
+% is specified with a separate macro \affil. Each \author command should
+% be followed by its own \affil (or address).
+%
+% Authors often have affiliations above and beyond their main employer,
+% and these are specified with the \altaffilmark and \altaffiltext commands.
+% These commands behave like the \footnotemark and \footnotetext commands
+% of LaTeX. \altaffilmark is appended to author's names in the \author
+% lists, and generates the superscript identification numbers.
+% The text for the individual alternate affiliations is generated by the
+% \altaffiltext command. It is up to the author to make sure that the
+% \altaffilmark numbers attached to authors' names correspond to the correct
+% alternate affiliation.
+%
+% \title{LUCID TEXT}
+% \author{NAME(S)}
+% \authoraddr{AUTHOR'S POSTAL ADDRESS}
+% \affil{AFFILIATION}
+% \altaffilmark{TAG NUMBER(S)}
+% \altaffiltext{NUMERICAL TAG}{TEXT}
+%
+% The typesetting performed by these commands is appropriate for the top of
+% the first text page of the manuscript. They could as well be used on a
+% title cover page, but vertical placement would have to be controlled by
+% the author. This is not to be encouraged, since I want to discourage
+% the introduction of any extra horizontal or vertical space.
+
+\def\title#1{{\def\baselinestretch{\@tightleading}
+ \center\large\bf{#1}\endcenter}
+ \thispagestyle{empty}}
+\def\author#1{{\topsep\z@\center\normalsize#1\endcenter}}
+\let\authoraddr=\@gobble
+\def\affil#1{\vspace*{-2.5ex}{\topsep\z@\center#1\endcenter}}
+\def\altaffilmark#1{$^{#1}$}
+\def\altaffiltext#1#2{\footnotetext[#1]{#2}\stepcounter{footnote}}
+
+% Redefine the LaTeX \and command for this style.
+
+\def\and{\vspace*{-0.5ex}{\topsep\z@\center and\endcenter}}
+
+% ****************************************
+% * KEYWORDS *
+% ****************************************
+
+% Keywords environment. Keywords, subject headings, etc., are accommodated
+% only as a piece of text; the \keywords command indents if necessary and
+% supplies the proper leading text ("Keywords:", "Subject headings:", etc.)
+% but does not apply formatting to the user's keyword text. The author
+% must supply the correct punctuation according to the journal style.
+%
+% Note that the editors of A&A, ApJ, and MNRAS have discussed the issue
+% of keywords, and there is disagreement about whether "subject headings"
+% or "keywords" should appear after abstracts in astronomical papers.
+% It does not really matter what the macro is called, so I will stick
+% to \keywords since I don't know what the difference is anyway.
+
+\def\@keywordtext{Subject headings}
+\def\@keyworddelim{---}
+
+\def\keywords#1{\vspace*{-.7ex}%\vspace{\z@}
+ \if@twocolumn\noindent{{\it\@keywordtext:\/}\space\@kwds{#1}}
+ \else{\quote{\it\@keywordtext:\/}\space\@kwds{#1}\endquote}
+ \fi}
+
+\let\subjectheadings=\keywords
+
+\def\@kwds#1{\def\@kwddlm{}\@for\@kwd:=#1\do
+ {\@kwddlm\def\@kwddlm{\space\@keyworddelim\penalty\@m\space}{\@kwd}}}
+
+% ****************************************
+% * FOOTNOTES *
+% ****************************************
+
+% The following code redefines a few things so that spacing in footnotes is
+% different than LaTeX defaults. The adjustment to \skip\footins increases
+% the amount of vspace inserted before the \footnoterule. Redefine
+% \@makefntext to get proper indentation.
+
+\skip\footins 4ex plus 1ex minus .5ex
+\footnotesep 3ex
+
+%\long\def\@makefntext#1{\noindent\hbox to\z@{\hss$^{\@thefnmark}$}#1}
+%\long\def\@makefntext#1{\indent\hbox{$^{\@thefnmark}$}#1}
+
+% ****************************************
+% * SECTIONS *
+% ****************************************
+
+% \@startsection {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}
+% optional * [ALTHEADING]{HEADING}
+% Generic command to start a section.
+% NAME : e.g., 'subsection'
+% LEVEL : a number, denoting depth of section -- e.g., chapter=1,
+% section = 2, etc.
+% INDENT : Indentation of heading from left margin
+% BEFORESKIP : Absolute value = skip to leave above the heading.
+% If negative, then paragraph indent of text following
+% heading is suppressed.
+% AFTERSKIP : if positive, then skip to leave below heading, else
+% negative of skip to leave to right of run-in heading.
+% STYLE : commands to set style
+% If '*' missing, then increments the counter. If it is present, then
+% there should be no [ALTHEADING] argument.
+
+% Adjust section heading typography slightly. This is one of the spots
+% where my personal preference is going to bite me. Anyway, I have reduced
+% the size of the main section heads to whatever the normal size is for
+% the paper; I don't think it needs to be larger, especially when the
+% layout is double-spaced.
+%
+% Also, modify the indentation behavior so that ALL paragraphs, including
+% those first after section heads, are indented. This is consonant with
+% the styles of many journals, although it's non-standard typographic practice.
+
+\def\section{\@startsection {section}{1}{\z@}
+ {5ex plus .5ex}{1ex plus .2ex}{\normalsize\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}
+ {5ex plus .5ex}{1ex plus .2ex}{\normalsize\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}
+ {5ex plus .5ex}{1ex plus .2ex}{\normalsize\it}}
+
+\def\thesection{\@arabic{\c@section}.}
+\def\thesubsection{\thesection\@arabic{\c@subsection}.}
+\def\thesubsubsection{\thesubsection\@arabic{\c@subsubsection}.}
+\def\theparagraph{\thesubsubsection\@arabic{\c@paragraph}:}
+
+% For ApJ, acknowledgments are set off from main body text simply by
+% vertical space (no heading or type size change). I do the same for
+% the AAS manuscript style. For use in producing more polished output
+% for other journals, this macro might generate text saying
+% "Acknowledg[e]ments".
+
+\def\acknowledgments{\vskip 3ex plus .8ex minus .4ex}
+\let\acknowledgements=\acknowledgments % second spelling
+
+% LaTeX sectioning tools.
+
+\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
+ \def\@svsec{}\else
+ \refstepcounter{#1}\edef\@svsec{\csname the#1\endcsname\hskip 1em }\fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup \center#6\relax
+ \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M
+ \sec@upcase{#8}\par}%
+ \endcenter\endgroup
+ \csname #1mark\endcsname{#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #7}\else
+ \def\@svsechd{#6\hskip #3\@svsec \sec@upcase{#8}\csname #1mark\endcsname
+ {#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #7}}\fi
+ \@xsect{#5}}
+
+\def\@ssect#1#2#3#4#5{\@tempskipa #3\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #4\center\@hangfrom{\hskip #1}{\interlinepenalty \@M
+ \sec@upcase{#5}\par}\endcenter\endgroup
+ \else \def\@svsechd{#4\hskip #1\relax \sec@upcase{#5}}\fi
+ \@xsect{#3}}
+
+
+% ****************************************
+% * EQUATION NUMBERING *
+% ****************************************
+
+% Redefine \appendix so that equation numbers are prepended with
+% \theappendix number. Reset equation counter so that equation
+% numbers in the appendix begin again with 1. Note that the
+% \appendix command is NOT a sectioning command; it is merely
+% a delimiting markup between the main body of the paper and the
+% appendix. Sections in the appendix are still started with
+% \section commands.
+%
+% \appendix
+
+\def\appendix{\par
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \setcounter{equation}{0}
+ \def\thesection{\Alph{section}.}
+ \def\theequation{\hbox{\normalsize\Alph{section}\arabic{equation}}}}
+
+% Define mathletters environment. This is a wrapper that goes
+% *around* (outside of) equation or eqnarray environments.
+%
+% \begin{mathletters}
+% \end{mathletters}
+
+\newcounter{cureqno}
+
+\newenvironment{mathletters}{\refstepcounter{equation}%
+ \setcounter{cureqno}{\value{equation}}%
+ \let\@curtheeqn\theequation%
+ \edef\cur@eqn{\csname theequation\endcsname}%
+ \def\theequation{\cur@eqn\alph{equation}}%
+ \setcounter{equation}{0}}%
+ {\let\theequation\@curtheeqn%
+ \setcounter{equation}{\value{cureqno}}}
+
+% The \eqnum command allows the author to override all automatic
+% equation marking schemes.
+%
+% \eqnum{TEXT}
+
+\def\eqnum#1{\def\theequation{#1}\let\@currentlabel\theequation
+ \addtocounter{equation}{\m@ne}}
+
+% ****************************************
+% * BIBLIOGRAPHY *
+% ****************************************
+
+% Bibliography/references environment. For the time being, I don't think
+% it would be a good idea to force an implementation based on BibTeX,
+% although I'll prepare for that eventuality by using the constructs and
+% general ideas of the LaTeX thebibliography environment. Adjustments
+% have been made so that the \cite-\bibitem mechanism can be used to cite
+% references symbolically while maintaining proper citation syntax within
+% the paper; the author must create the citation label for each reference
+% in proper journal format in the \bibitem command.
+%
+% \begin{thebibliography}
+% \bibitem[LABEL]{TEXTTAG} \reference <bibliographic data>
+% \end{thebibliography}
+%
+% where LABEL must adhere to the journal's standards, e.g. "Abt 1986".
+%
+% It is not necessary to use the thebibliography environment. This style
+% defines a references environment that simply sets off the list of references
+% and adjusts spacing parameters. It is not possible to use \bibitems
+% within the references environment. (The \reference command cannot be
+% shortened to \ref; \ref is used in vanilla LaTeX for cross-referencing.)
+%
+% \begin{references}
+% \reference <bibliographic data>
+% \end{references}
+%
+% \markcite{TEXT}
+%
+% Observe that the bibliographic data supplied by the author must also
+% conform to the standards of the journal. I have elected not to burden
+% authors with tedious LaTeX commands which would require many curly braces
+% to delimit the bibliographic fields because many of the journals I have
+% targeted in this project have agreed to reduce typographic overhead (bolding,
+% italicizing, etc.) in reference lists. (See Abt's editorial in ApJ 357.)
+% It is the responsibility of the author to get these fields in the proper
+% order with the correct punctuation; the information will be typeset as is,
+% i.e., in roman with no size or style changes.
+%
+% Macros are provided for many of the oft-referenced journals so that authors
+% may use the LaTeX names rather than having to look up a particular journal's
+% specific abbreviation. In principle, all the journals should be using the
+% same abbreviations, too, but I anticipate some changes in the specific
+% abbreviations before a set is finally settled on. As long as these macros
+% are kept up to date, authors need not be concerned about such editorial
+% changes.
+%
+% Corresponding with the non-BibTeX references environment and \reference
+% command for the reference list is the \markcite command. This can be
+% used to identify in-text citations; in this case, the author provides
+% the actual citation text as opposed to the symbolic tag. The use of
+% this is encouraged, even for journals where no special formatting of
+% citation call-outs is required; it is crucial for the future use of
+% on-line browsers.
+
+\def\references{\subsection*{REFERENCES}
+ \bgroup\parindent=\z@\parskip=\itemsep
+ \def\refpar{\par\hangindent=3em\hangafter=1}}
+\def\endreferences{\refpar\egroup\revtex@pageid}
+
+\def\thebibliography{\subsection*{REFERENCES}
+ \list{\null}{\leftmargin 3em\labelwidth\z@\labelsep\z@\itemindent -3em
+ \usecounter{enumi}}
+ \def\refpar{\relax}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+\def\endthebibliography{\endlist\revtex@pageid}
+
+\def\@biblabel#1{\relax}
+%\def\@cite#1#2{({#1\if@tempswa , #2\fi})}
+\def\@cite#1#2{#1\if@tempswa , #2\fi}
+
+\def\reference{\relax\refpar} % Generic: might be better...
+\def\markcite#1{#1\relax}
+
+% Modify \@citex so that individual citation texts are NOT hboxed.
+% This allows TeX to break lines at spaces between words in citations.
+% Remove the obnoxious {\bf ?} that was inserted in the text when
+% undefined citations are encountered; here, the warning message is
+% printed only on the terminal.
+
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+ \def\@citea{}\@cite{\@for\@citeb:=#2\do
+ {\@citea\def\@citea{,\penalty\@m\ }\@ifundefined
+ {b@\@citeb}{\@warning
+ {Citation `\@citeb' on page \thepage \space undefined}}%
+{\csname b@\@citeb\endcsname}}}{#1}}
+% Permit \keywords declaration, but eat the contents.
+
+\let\keywords=\@gobble
+\let\subjectheadings=\@gobble
+
+%\@input{tblfig.sty}
+
+% ****************************************
+% * TABLES AND FIGURES *
+% ****************************************
+
+% Additions and adjustments for tables and figures.
+
+% Footnotes for tables are to be identified with lower case alphabetics,
+% rather than numeric. \tablenotemark and \tablenotetext commands are
+% provided analogous to \footnotemark and \footnotetext, but with the
+% identifier *required*, like \altaffilmark and \altaffiltext. The
+% \tablenotetext must be specified before the \end{table}, since
+% \end{table} displays it.
+%
+% \tablenotemark{TAG LETTER(S)}
+% \tablenotetext{ALPHA TAG}{TEXT}
+%
+% Note that TAG LETTER == ALPHA TAG for corresponding text. It is the
+% responsibility of the author to get the correspondence correct.
+%
+% The table footnotes are coupled to the table in which they occur, rather
+% than being associated with a particular page, and they are printed with
+% the table (relatively close to the caption) instead of appearing at the
+% extreme bottom of the page. This is done to ensure that the notes wind
+% up on the same page as the table, since tables are floats and can migrate
+% from one page to another. There is the additional benefit that the notes
+% are unambiguously attached to the proper table, which is what is required
+% in the event that the editorial requirement of one table only per page
+% is ever changed to permit several tables per page.
+%
+% Footnotes are NOT supported for figures.
+
+\def\tablenotemark#1{\rlap{$^{\rm #1}$}}
+
+% The \tablenotetext command buffers the table note text and the "proper"
+% tablenote formatting information in a token buffer. The tablenotes are
+% dispensed into the vertical page list by \spew@tblnotes, which is
+% executed by \end{table}. Note that certain "global" tablenote formatting
+% details are handled by \spew@tblnotes, which also clears the tblnote list.
+% Praise and honor are due to Kresten Krab Thorup (krab@iesd.auc.dk) for
+% posting ftn.sty to the Usenet, from which I drew the technique.
+
+\newtoks\@temptokenb
+\def\tblnote@list{}
+
+\def\tablenotetext#1#2{
+ \@temptokena={\vspace{.5ex}{\noindent\llap{$^{#1}$}#2}\par}
+ \@temptokenb=\expandafter{\tblnote@list}
+ \xdef\tblnote@list{\the\@temptokenb\the\@temptokena}}
+
+\def\spew@tblnotes{
+ \ifx\tblnote@list\@empty\relax
+ \else
+ \vspace{4.5ex}
+ \footnoterule
+ \vspace{.5ex}
+ {\footnotesize\tblnote@list}
+ \gdef\tblnote@list{}
+ \fi}
+
+\def\endtable{\spew@tblnotes\end@float}
+\@namedef{endtable*}{\spew@tblnotes\end@dblfloat}
+
+% Add a \tableline command for use in tabular environments. This command
+% produces the horizontal rule(s) between the column headings and the body
+% of the table. Authors are discouraged from using any \hlines themselves,
+% and are typically forbidden from using vertical rules by editors.
+
+\let\tableline=\hline
+
+% \@makecaption determines formatting for figure and table captions.
+% For manuscripts, all captions should be set as flushleft paragraphs.
+
+\long\def\@makecaption#1#2{\vskip 2ex\noindent #1 #2\par}
+
+% The \tablenum command allows the author to override all automatic
+% table marking schemes.
+%
+% \tablenum{TEXT}
+
+\def\tablenum#1{\def\thetable{#1}\let\@currentlabel\thetable
+ \addtocounter{table}{\m@ne}}
+
+% The \figurenum command allows the author to override all automatic
+% figure marking schemes.
+%
+% \figurenum{TEXT}
+
+\def\figurenum#1{\def\thefigure{#1}\let\@currentlabel\thefigure
+ \addtocounter{figure}{\m@ne}}
+
+% ****************************************
+% * PLANO TABLES *
+% ****************************************
+
+% Plano tables are camera-ready pages that are included in a typeset
+% article the same way as line drawings, graphs, and other camera-ready
+% art, i.e., as "planographic" figures. There are desirable properties
+% for a formatter to have that are somewhat above and beyond LaTeX'x
+% tabular environment that would facilitate the creation of such tables.
+% Among these are breaking long tables across pages, using footnotes
+% in a table, specifying comments and references for tables, etc.
+%
+% What follows was inspired by supertab.sty by Theo Jurriens, 1988.
+
+% Commands for identifying table elements in a consistent way. Observe
+% that the formatting is embedded in the macro definitions so that the
+% author doesn't need to be concerned about stylistic nuances.
+%
+% \tablecaption{TEXT}
+% \tablehead{TEXT}
+% \colhead{HEADING}
+% \tabletail{TEXT}
+% \tablewidth{DIMEN}
+% \tableheadfrac{NUM}
+%
+% ApJ "standard" widths for tables are 21 and 42 picas, which are the
+% widths of single and double columns in the journal. For wide tables,
+% any width less than 42 is acceptable, although using widths of 30pc
+% and up will result in better appearance when centering.
+
+\newbox\pt@box
+\newdimen\pt@width
+\newcount\pt@line
+\newcount\pt@nlines
+\newcount\pt@ncol
+
+\def\colhead#1{\omit\hidewidth{#1}\hidewidth\global\advance\pt@ncol by\@ne}
+\def\tablecaption#1{\gdef\pt@caption{#1}} \def\pt@caption{\relax}
+\def\tablehead#1{\gdef\pt@head{\hline\hline\relax\\[-1.7ex]
+ #1\hskip\tabcolsep\\[.7ex]\hline\relax\\[-1.5ex]}} \def\pt@head{\relax}
+\def\tabletail#1{\gdef\pt@tail{#1}} \def\pt@tail{\relax}
+\def\tablewidth#1{\pt@width=#1} \pt@width\textwidth
+\def\tableheadfrac#1{\gdef\pt@headfrac{#1}} \def\pt@headfrac{.1}
+
+% Calculate the number of tabular rows that will fit in the body of the
+% table. The height of the table body and the number of lines are
+% calculated thus:
+%
+% bodyheight = \textheight * (1 - \pt@headfrac)
+% \pt@nlines = bodyheight / (\arraystretch * \baselineskip)
+%
+% The row height can be seen to be valid algebraically if one examines the
+% definitions for \strutbox, \@setstrut, and \@array. I could eliminate
+% this calculation, as well as its attendant parameters, if it were possible
+% to determine the accumulated height of the \halign box as TeX goes along.
+
+\def\pt@calcnlines{\@tempdima\pt@headfrac\textheight
+ \@tempdimb\textheight\advance\@tempdimb by-\@tempdima
+ \@tempdima\arraystretch\baselineskip
+ \divide\@tempdimb by\@tempdima
+ \global\pt@nlines\@tempdimb}
+
+% Define \pt@tabular, a ripoff of \@tabular but with \leavevmode removed
+% so tabular box can be set with \setbox. I do this so that table notes
+% can be set to natural width of table, if desired. Also, set \@acol
+% to \@ptabacol, which is called when building the preamble for the
+% \halign (assuming the first column format specification is "l", which
+% it should be for ApJ tables) so that \tabskip within the table is set
+% to \fill. This permits us to toggle between natural and fixed-width
+% tables without requiring the user to change markup. Note that by
+% forcing \tabskip always to be \fill, I pretty well nullify any
+% @{\hspace} commands the user puts in the template, but this environment
+% is for people who don't want to think about that sort of stuff anyway.
+
+\def\pt@tabular{\hbox \bgroup $\let\@acol\@ptabacol
+ \let\@classz\@tabclassz
+ \let\@classiv\@tabclassiv \let\\\@tabularcr\@tabarray}
+
+\def\@ptabacol{\edef\@preamble{\@preamble \hskip \tabcolsep\tabskip\fill}}
+
+% Permit different identifying strings, one for the first page of the
+% table and one for continuation pages. LaTeX's \fnum@table is set to
+% one or the other automatically in the environment. Note that caption
+% handling is not so graceful: you have to edit inside the big macros to
+% adjust this. Someday, I will be ambitious enough to fix this.
+
+\def\fnum@ptable{TABLE \thetable}
+\def\fnum@ptablecont{TABLE \thetable---{\it Continued}}
+
+\def\set@mkcaption{\long\def\@makecaption##1##2{
+ \center\Large\sc##1\\[.5ex]##2\endcenter\vskip 1.5ex}}
+\def\set@mkcaptioncont{\long\def\@makecaption##1##2{
+ \center\Large\sc##1\endcenter\vskip 1.5ex}}
+
+% The environment definition. It is desirable for the last portion of
+% a multi-page table to be \topinserted, rather than \midinserted.
+% At the moment, this doesn't happen. It's not straightforward to
+% make that preference known at the *end* of table processing.
+%
+% \begin{planotable}
+% \end{planotable}
+%
+% \startdata
+
+\newenvironment{planotable}[1]{\def\pt@format{\string#1}%
+ \set@tblnotetext\pt@ncol=0}%
+ {\crcr\noalign{\vskip .7ex}\hline\endtabular%
+ \pt@width\wd\pt@box\box\pt@box\spew@ptblnotes%
+ \typeout{Table \thetable\space has been set to width \the\pt@width}%
+ \endcenter\end@float}
+
+\def\startdata{\pt@line=0\pt@calcnlines%
+ \ifdim\pt@width>\z@\def\@halignto{to \pt@width}\else\def\@halignto{}\fi%
+ \let\fnum@table=\fnum@ptable\set@mkcaption%
+ \@float{table}\center\caption{\pt@caption}\leavevmode%
+ \setbox\pt@box=\pt@tabular{\pt@format}\pt@head}
+
+% A kludgey kind of line delimiter is needed so that the line counter
+% can be checked prior to adding the line to the alignment box. This
+% is bad because this form does not permit the addition of vertical
+% space using the [.5ex] construct; this has to be done with an explicit
+% \vskip. And a disgusting \noalign is required, so I have to create
+% another silly piece of markup to accomplish this conveniently.
+%
+% What is desired, of course, is for this line count checking to take
+% place within the syntax of the regular LaTeX \\ command. I have been
+% giving myself apoplexy trying to figure this out for the last 36 hours,
+% and I have decided I will have to wait for the onset of my "lucid
+% period" for a solution. In the meantime...
+
+\def\pt@nl{\global\advance\pt@line by\@ne%
+ \ifnum\pt@line=\pt@nlines%
+ \endtabular\box\pt@box
+ \endcenter\end@float\clearpage%
+ \addtocounter{table}{\m@ne}%
+ \let\fnum@table=\fnum@ptablecont\set@mkcaptioncont%
+ \@float{table}\center\caption{\pt@caption}\leavevmode%
+ \global\pt@ncol=0%
+ \setbox\pt@box=\pt@tabular{\pt@format}\pt@head%
+ \global\pt@line=0%
+ \else\\
+ \fi}
+
+% Author markup commands for planotable environment line breaks.
+%
+% \nl == \nextline
+% \tablevspace{DIMEN}
+% \tablebreak
+
+\let\nl=\pt@nl
+\let\nextline=\pt@nl
+
+\def\tablevspace#1{\noalign{\vskip{#1}}}
+\def\tablebreak{\pt@line\pt@nlines\advance\pt@line by\m@ne\pt@nl}
+
+% We have some specialty heads that are sometimes wanted in tables.
+%
+% \cutinhead{TEXT}
+% \sidehead{TEXT}
+
+\def\cutinhead#1{\noalign{\vskip 1.5ex}
+ \hline\pt@nl\noalign{\vskip -4ex}
+ \multicolumn{\pt@ncol}{c}{#1}\pt@nl
+ \noalign{\vskip .8ex}
+ \hline\pt@nl\noalign{\vskip -2ex}}
+
+\def\sidehead#1{\noalign{\vskip 1.5ex}
+ \multicolumn{\pt@ncol}{@{\hskip\z@}l}{#1}\pt@nl
+ \noalign{\vskip .5ex}}
+
+% Internal commands for dealing with table footnotes. I had to hack at
+% these to make them co-exist with similarly/identically named commands
+% for non-plano tables. This is admittedly ugly, and is on the agenda
+% for improved treatment Real Soon Now.
+
+\def\set@tblnotetext{\def\tablenotetext##1##2{{%
+ \@temptokena={\vspace{0ex}{%
+ \parbox{\pt@width}{\hskip1em$^{\rm ##1}$##2}\par}}%
+ \@temptokenb=\expandafter{\tblnote@list}
+ \xdef\tblnote@list{\the\@temptokenb\the\@temptokena}}}}
+
+\def\spew@ptblnotes{
+ \ifx\tblnote@list\@empty\relax
+ \else
+ \par
+ \vspace{2ex}
+ {\tblnote@list}
+ \gdef\tblnote@list{}
+ \fi}
+
+% Special kinds of table footnotes. Sometimes authors tabulate things
+% which have corresponding references, and it may be desirable to associate
+% these references with the table rather than (or in addition to) the
+% formal reference list. Occasionally, authors wish to append a short
+% paragraph of explanatory notes that pertain to the entire table, but
+% which are different than the caption.
+%
+% \tablerefs{REFERENCE LIST}
+% \tablecomments{TEXT}
+%
+% It is acceptable to the Press for the titles of these paragraphs to be
+% in all caps in \normalsize. Note that I have employed the hacker's
+% caps and small caps, although this may be considered inferior.
+
+\def\tablerefs#1{\@temptokena={\vspace*{.8ex}{%
+ \parbox{\pt@width}{\hskip1em{\rm R{\footnotesize EFERENCES}.---}#1}\par}}%
+ \@temptokenb=\expandafter{\tblnote@list}
+ \xdef\tblnote@list{\the\@temptokenb\the\@temptokena}}
+
+\def\tablecomments#1{\@temptokena={\vspace*{.8ex}{%
+ \parbox{\pt@width}{\hskip1em{\rm N{\footnotesize OTE}.---}#1}\par}}%
+ \@temptokenb=\expandafter{\tblnote@list}
+ \xdef\tblnote@list{\the\@temptokenb\the\@temptokena}}
+
+% Figure and table style parameters.
+
+\def\thefigure{\@arabic\c@figure}
+\def\fnum@figure{{\rm Fig.\space\thefigure.---}}
+
+\def\thetable{\@arabic\c@table}
+\def\fnum@table{{\rm Table \thetable:}}
+
+% Figure and table float positions.
+
+\def\fps@figure{bp}
+\def\fps@table{bp}
+
+% ****************************************
+% * EPS INCLUSIONS *
+% ****************************************
+
+% Include Rokicki's epsf.sty file explicitly.
+
+\@ifundefined{epsfbox}{\@input{epsf.sty}}{\relax}
+
+% Simplified EPS inclusion macros so we can see how this goes...
+% These are layered on Rokicki's dvips material, and are dependent
+% on the author's use of that DVI driver.
+%
+% \plotone{EPSFILE}
+% \plottwo{EPSFILE}{EPSFILE}
+% \plotfiddle{EPSFILE}{VSIZE}{ROT}{HSF}{VSF}{HTRANS}{VTRANS}
+%
+% \plotone inserts the plot in a space that is \columnwidth wide; the
+% plot is scaled so the horizontal dimension fits in the text width,
+% and the vertical dimension is scaled to maintain the aspect ratio.
+% \plottwo inserts two plots next to each other in one \columnwidth,
+% sort of like "two-up" mode.
+%
+% EPSFILE name of file with EPS
+%
+% The following arguments are for the \plotfiddle macro which formats
+% the \special itself, prepares vspace, etc. This completely bypasses
+% Rokicki's macros that attempt to rationalize the EPS BoundingBox with
+% the LaTeX page dimensions.
+%
+% VSIZE vertical white space to allow for plot
+% ROT rotation angle
+% HSF horiz scale factor
+% VSF vert scale factor
+% HTRANS horiz translation
+% VTRANS vert translation
+
+%\epsfverbosetrue
+
+\def\plotone#1{\centering \leavevmode
+ \epsfxsize=\columnwidth \epsfbox{#1}}
+
+\def\plottwo#1#2{\centering \leavevmode
+ \epsfxsize=.45\columnwidth \epsfbox{#1} \hfil
+ \epsfxsize=.45\columnwidth \epsfbox{#2}}
+
+\def\plotfiddle#1#2#3#4#5#6#7{\centering \leavevmode
+ \vbox to#2{\rule{0pt}{#2}}
+ \special{psfile=#1 voffset=#7 hoffset=#6 vscale=#5 hscale=#4 angle=#3}}
+
+%\@input{abbrevs.sty}
+
+% ****************************************
+% * ABBREVIATIONS *
+% ****************************************
+
+% Abbreviations for journals. The object here is to provide authors
+% with convenient shorthands for the most "popular" (often-cited)
+% journals; the author can use these markup tags without being concerned
+% about the exact form of the journal abbreviation, or its formatting.
+% It is up to the keeper of the macros to make sure the macros expand
+% to the proper text. If macro package writers agree to all use the
+% same TeX command name, authors only have to remember one thing, and
+% the style file will take care of editorial preferences. This also
+% applies when a single journal decides to revamp its abbreviating
+% scheme, as happened with the ApJ (Abt 1991).
+
+\let\jnl@style=\rm
+\def\ref@jnl#1{{\jnl@style#1}}
+
+\def\aj{\ref@jnl{AJ}} % Astronomical Journal
+\def\araa{\ref@jnl{ARA\&A}} % Annual Review of Astron and Astrophys
+\def\apj{\ref@jnl{ApJ}} % Astrophysical Journal
+\def\apjl{\ref@jnl{ApJ}} % Astrophysical Journal, Letters
+\def\apjs{\ref@jnl{ApJS}} % Astrophysical Journal, Supplement
+\def\ao{\ref@jnl{Appl.Optics}} % Applied Optics
+\def\apss{\ref@jnl{Ap\&SS}} % Astrophysics and Space Science
+\def\aap{\ref@jnl{A\&A}} % Astronomy and Astrophysics
+\def\aapr{\ref@jnl{A\&A~Rev.}} % Astronomy and Astrophysics Reviews
+\def\aaps{\ref@jnl{A\&AS}} % Astronomy and Astrophysics, Supplement
+\def\azh{\ref@jnl{AZh}} % Astronomicheskii Zhurnal
+\def\baas{\ref@jnl{BAAS}} % Bulletin of the AAS
+\def\jrasc{\ref@jnl{JRASC}} % Journal of the RAS of Canada
+\def\memras{\ref@jnl{MmRAS}} % Memoirs of the RAS
+\def\mnras{\ref@jnl{MNRAS}} % Monthly Notices of the RAS
+\def\pra{\ref@jnl{Phys.Rev.A}} % Physical Review A: General Physics
+\def\prb{\ref@jnl{Phys.Rev.B}} % Physical Review B: Solid State
+\def\prc{\ref@jnl{Phys.Rev.C}} % Physical Review C
+\def\prd{\ref@jnl{Phys.Rev.D}} % Physical Review D
+\def\prl{\ref@jnl{Phys.Rev.Lett}} % Physical Review Letters
+\def\pasp{\ref@jnl{PASP}} % Publications of the ASP
+\def\pasj{\ref@jnl{PASJ}} % Publications of the ASJ
+\def\qjras{\ref@jnl{QJRAS}} % Quarterly Journal of the RAS
+\def\skytel{\ref@jnl{S\&T}} % Sky and Telescope
+\def\solphys{\ref@jnl{Solar~Phys.}} % Solar Physics
+\def\sovast{\ref@jnl{Soviet~Ast.}} % Soviet Astronomy
+\def\ssr{\ref@jnl{Space~Sci.Rev.}} % Space Science Reviews
+\def\zap{\ref@jnl{ZAp}} % Zeitschrift fuer Astrophysik
+
+\let\astap=\aap
+\let\apjlett=\apjl
+\let\apjsupp=\apjs
+
+%\@input{misc.sty}
+
+% ****************************************
+% * MISCELLANEOUS *
+% ****************************************
+
+% Handy little things everybody works out for themselves anyway. Many
+% of these come from Springer's A&A package, and some were contributed
+% by Francois Schweizer at DTM. You can go berserk making these up,
+% especially when you start getting into the composite ones. We have
+% tried to select a tractable number that were useful, and somewhat
+% difficult to get right because fussy kerning or some such is required.
+% Most can be used in or out of math mode with impunity; \alt and \agt
+% are relations and can only be used in math mode.
+
+\def\deg{\hbox{$^\circ$}}
+\def\sun{\hbox{$\odot$}}
+\def\earth{\hbox{$\oplus$}}
+\def\lesssim{\mathrel{\hbox{\rlap{\hbox{\lower4pt\hbox{$\sim$}}}\hbox{$<$}}}}
+\def\gtrsim{\mathrel{\hbox{\rlap{\hbox{\lower4pt\hbox{$\sim$}}}\hbox{$>$}}}}
+\def\sq{\hbox{\rlap{$\sqcap$}$\sqcup$}}
+\def\arcmin{\hbox{$^\prime$}}
+\def\arcsec{\hbox{$^{\prime\prime}$}}
+\def\fd{\hbox{$.\!\!^{\rm d}$}}
+\def\fh{\hbox{$.\!\!^{\rm h}$}}
+\def\fm{\hbox{$.\!\!^{\rm m}$}}
+\def\fs{\hbox{$.\!\!^{\rm s}$}}
+\def\fdg{\hbox{$.\!\!^\circ$}}
+\def\farcm{\hbox{$.\mkern-4mu^\prime$}}
+\def\farcs{\hbox{$.\!\!^{\prime\prime}$}}
+\def\fp{\hbox{$.\!\!^{\scriptscriptstyle\rm p}$}}
+\def\micron{\hbox{$\mu$m}}
+
+\let\la=\lesssim % For Springer A&A compliance...
+\let\ga=\gtrsim
+
+% Permit author to typeset "case" fractions. This is sometimes
+% wanted in displayed equations, during which LaTeX will set fractions
+% specified as \frac{x}{y} as "built-up" fractions (numerator and
+% denominator at body text size).
+
+\def\case#1#2{\hbox{$\frac{#1}{#2}$}}
+
+% Permit author to typeset fractions set with solidus where the size
+% is reduced and the numerals are oriented diagonally. Note that this
+% is different from a "shilled" fraction, which the author can produce
+% without any special formatting markup. Define markup shorthands for
+% several common fractions using solidus.
+
+\def\slantfrac#1#2{\hbox{$\,^#1\!/_#2$}}
+\def\onehalf{\slantfrac{1}{2}}
+\def\onethird{\slantfrac{1}{3}}
+\def\twothirds{\slantfrac{2}{3}}
+\def\onequarter{\slantfrac{1}{4}}
+\def\threequarters{\slantfrac{3}{4}}
+
+\def\ubvr{\hbox{$U\!BV\!R$}} % UBVR system
+\def\ub{\hbox{$U\!-\!B$}} % U-B
+\def\bv{\hbox{$B\!-\!V$}} % B-V
+\def\vr{\hbox{$V\!-\!R$}} % V-R
+\def\ur{\hbox{$U\!-\!R$}} % U-R
+
+% Notation for atomic species (ionization levels). The ionization state
+% is specified as the second argument, and should be given as a numeral.
+% The macro has to expand the numeric state into the proper notation for
+% the publication (roman, numeric, plus signs, etc.)
+%
+% \ion{ELEMENT}{IONIZATION STATE}
+
+\def\ion#1#2{#1$\;${\small\rm\@Roman{#2}}\relax}
+
+% Centered ellipsis for use in tables (for unknown values). \nodata
+% is generalized markup for this notion: format of null-valued entries
+% in tables is style-specific.
+
+%\def\cellipsis{\hfill$\cdots$\hfill}
+\def\nodata{\multicolumn{1}{c}{$\cdots$}}
+
+% This is a generalization of the \LaTeX definition that comes in LaTeX.
+% The change here ensures that LaTeX will be typeset in the current style,
+% rather than always in roman.
+
+\newcount\lecurrentfam
+\def\LaTeX{\lecurrentfam=\the\fam \leavevmode L\raise.42ex
+ \hbox{$\fam\lecurrentfam\scriptstyle\kern-.3em A$}\kern-.15em\TeX}
+
+% ****************************************
+% * DEBUGGING *
+% ****************************************
+
+\def\sizrpt{
+ (\fontname\the\font): em=\the\fontdimen6\font, ex=\the\fontdimen5\font
+ \typeout{
+ (\fontname\the\font): em=\the\fontdimen6\font, ex=\the\fontdimen5\font
+}}
diff --git a/obsolete/macros/latex209/contrib/aasmacros/apjpt.sty b/obsolete/macros/latex209/contrib/aasmacros/apjpt.sty
new file mode 100644
index 0000000000..4aef25c59a
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aasmacros/apjpt.sty
@@ -0,0 +1,403 @@
+\def\revtex@ver{1.1}
+\def\revtex@date{10 Jan 93}
+\def\revtex@org{AAS}
+\def\revtex@jnl{ApJ}
+\def\revtex@genre{plano tables}
+\typeout{\revtex@org\space \revtex@jnl\space \revtex@genre\space substyle,
+v\revtex@ver\space <\revtex@date>.}
+\def\revtex@pageid{\xdef\@thefnmark{\null}
+\@footnotetext{This \revtex@genre\space was prepared with the
+ \revtex@org\space \LaTeX\ macros v\revtex@ver.}}
+\def\genre@MS{manuscript}
+\ifx\revtex@genre\genre@MS
+\ifnum\@ptsize<2
+\typeout{Warning: Undersize \revtex@genre\space font (1\@ptsize\space pts).
+ Use 12pt documentstyle option.}
+\fi
+\fi
+\@input{art8.sty}
+\ps@plain
+\def\ps@plaintop{\let\@mkboth\@gobbletwo
+\def\@oddfoot{}\def\@oddhead{\rm\hfil--\space\thepage\space--\hfil}
+\def\@evenfoot{}\let\@evenhead\@oddhead}
+\newdimen\@fmwidth \@fmwidth=44pc
+\newdimen\@bodywidth \@bodywidth=44pc
+\textwidth=\@bodywidth
+\textheight=8.9in
+\topmargin=0in
+\headheight=0in
+\headsep=0in
+\oddsidemargin=0in
+\evensidemargin=0in
+\parindent=1em
+\parskip=0ex
+\columnsep=1pc
+\hoffset=-2.5pc
+\tolerance=400
+\def\@tightleading{1.1}
+\def\@doubleleading{1.6}
+\let\tighten=\relax
+\let\tightenlines=\tighten
+\def\singlespace{\def\baselinestretch{\@tightleading}\normalsize}
+\def\doublespace{\def\baselinestretch{\@doubleleading}\normalsize}
+\def\sec@upcase#1{\relax{#1}}
+\def\eqsecnum{
+\@newctr{equation}[section]
+\def\theequation{\hbox{\normalsize\arabic{section}-\arabic{equation}}}}
+\def\@journalname{The Astropolitical Journal}
+\def\cpr@holder{American Astronomical Society}
+\def\received#1{\gdef\@recvdate{#1}} \received{\relax}
+\def\revised#1{\gdef\@revisedate{#1}} \revised{\relax}
+\def\accepted#1{\gdef\@accptdate{#1}} \accepted{\relax}
+\def\journalid#1#2{\gdef\@jourvol{#1}\gdef\@jourdate{#2}}
+\def\articleid#1#2{\gdef\@startpage{#1}\gdef\@finishpage{#2}}
+\def\paperid#1{\gdef\@paperid{#1}} \paperid{MS-0001-SAMP}
+\def\ccc#1{\gdef\CCC@code{#1}} \ccc{000-00\$75.95-CDB}
+\def\cpright#1#2{\@nameuse{cpr@#1} \gdef\cpr@year{#2}
+\typeout{`#1' copyright \cpr@year.}}
+\newcount\@cprtype \@cprtype=\@ne
+\def\cpr@AAS{\@cprtype=1}
+\def\cpr@PD{\@cprtype=2}
+\def\cpr@Crown{\@cprtype=3}
+\def\cpr@none{\@cprtype=4}
+\def\cpr@year{\number\year}
+\def\@slug{\par\noindent
+\ifcase\@cprtype
+ \relax
+\or
+ Copyright \cpr@year\space by the \cpr@holder.
+\or
+ This article is in the public domain.
+\or
+ Crown copyright \cpr@year\space by the \cpr@holder.
+\or
+ No copyright is claimed for this article.
+\fi
+\par\noindent
+Manuscript number \@paperid.\par\noindent
+\CCC@code
+}
+\def\lefthead#1{\gdef\@versohead{#1}} \lefthead{\relax}
+\def\righthead#1{\gdef\@rectohead{#1}} \righthead{\relax}
+\def\@runheads{\@tempcnta\c@page
+\@whilenum \@tempcnta >0\do{
+\vskip 3ex
+\hbox to30pc{\small\expandafter\uppercase\expandafter{\@versohead}:
+ \expandafter\uppercase\expandafter{\@rectohead}\hfil}
+\advance\@tempcnta by\m@ne}
+}
+\def\slugcomment#1{\gdef\slug@comment{#1}} \slugcomment{\relax}
+\def\@rcvaccrule{\vrule\@width1.75in\@height0.5pt\@depth\z@}
+\def\@dates{{Received}\space%
+\if\@recvdate\relax\@rcvaccrule\else\@recvdate\fi;%
+\hspace{1.5em}{accepted}\space%
+\if\@accptdate\relax\@rcvaccrule\else\@accptdate\fi%
+}
+\def\sluginfo{{\center
+\@dates
+
+
+\endcenter}}
+\let\dates=\sluginfo
+\def\abstract{\sluginfo\clearpage
+\begin{center}
+{\bf{ABSTRACT}}
+\end{center}
+\quotation
+}
+\def\title#1{{\def\baselinestretch{\@tightleading}
+\center\large\bf{#1}\endcenter}
+\thispagestyle{empty}}
+\def\author#1{{\topsep\z@\center\normalsize#1\endcenter}}
+\let\authoraddr=\@gobble
+\def\affil#1{\vspace*{-2.5ex}{\topsep\z@\center#1\endcenter}}
+\def\altaffilmark#1{$^{#1}$}
+\def\altaffiltext#1#2{\footnotetext[#1]{#2}\stepcounter{footnote}}
+\def\and{\vspace*{-0.5ex}{\topsep\z@\center and\endcenter}}
+\def\@keywordtext{Subject headings}
+\def\@keyworddelim{---}
+\def\keywords#1{\vspace*{-.7ex}
+\if@twocolumn\noindent{{\it\@keywordtext:\/}\space\@kwds{#1}}
+\else{\quote{\it\@keywordtext:\/}\space\@kwds{#1}\endquote}
+\fi}
+\let\subjectheadings=\keywords
+\def\@kwds#1{\def\@kwddlm{}\@for\@kwd:=#1\do
+{\@kwddlm\def\@kwddlm{\space\@keyworddelim\penalty\@m\space}{\@kwd}}}
+\skip\footins 4ex plus 1ex minus .5ex
+\footnotesep 3ex
+\def\section{\@startsection {section}{1}{\z@}
+{5ex plus .5ex}{1ex plus .2ex}{\normalsize\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}
+{5ex plus .5ex}{1ex plus .2ex}{\normalsize\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}
+{5ex plus .5ex}{1ex plus .2ex}{\normalsize\it}}
+\def\thesection{\@arabic{\c@section}.}
+\def\thesubsection{\thesection\@arabic{\c@subsection}.}
+\def\thesubsubsection{\thesubsection\@arabic{\c@subsubsection}.}
+\def\theparagraph{\thesubsubsection\@arabic{\c@paragraph}:}
+\def\acknowledgments{\vskip 3ex plus .8ex minus .4ex}
+\let\acknowledgements=\acknowledgments
+\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
+\def\@svsec{}\else
+\refstepcounter{#1}\edef\@svsec{\csname the#1\endcsname\hskip 1em }\fi
+\@tempskipa #5\relax
+\ifdim \@tempskipa>\z@
+\begingroup \center#6\relax
+\@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M
+ \sec@upcase{#8}\par}%
+\endcenter\endgroup
+\csname #1mark\endcsname{#7}\addcontentsline
+{toc}{#1}{\ifnum #2>\c@secnumdepth \else
+\protect\numberline{\csname the#1\endcsname}\fi
+#7}\else
+\def\@svsechd{#6\hskip #3\@svsec \sec@upcase{#8}\csname #1mark\endcsname
+{#7}\addcontentsline
+{toc}{#1}{\ifnum #2>\c@secnumdepth \else
+\protect\numberline{\csname the#1\endcsname}\fi
+#7}}\fi
+\@xsect{#5}}
+\def\@ssect#1#2#3#4#5{\@tempskipa #3\relax
+\ifdim \@tempskipa>\z@
+\begingroup #4\center\@hangfrom{\hskip #1}{\interlinepenalty \@M
+\sec@upcase{#5}\par}\endcenter\endgroup
+\else \def\@svsechd{#4\hskip #1\relax \sec@upcase{#5}}\fi
+\@xsect{#3}}
+\def\appendix{\par
+\setcounter{section}{0}
+\setcounter{subsection}{0}
+\setcounter{equation}{0}
+\def\thesection{\Alph{section}.}
+\def\theequation{\hbox{\normalsize\Alph{section}\arabic{equation}}}}
+\newcounter{cureqno}
+\newenvironment{mathletters}{\refstepcounter{equation}%
+\setcounter{cureqno}{\value{equation}}%
+\let\@curtheeqn\theequation%
+\edef\cur@eqn{\csname theequation\endcsname}%
+\def\theequation{\cur@eqn\alph{equation}}%
+\setcounter{equation}{0}}%
+{\let\theequation\@curtheeqn%
+\setcounter{equation}{\value{cureqno}}}
+\def\eqnum#1{\def\theequation{#1}\let\@currentlabel\theequation
+\addtocounter{equation}{\m@ne}}
+\def\references{\subsection*{REFERENCES}
+\bgroup\parindent=\z@\parskip=\itemsep
+\def\refpar{\par\hangindent=3em\hangafter=1}}
+\def\endreferences{\refpar\egroup\revtex@pageid}
+\def\thebibliography{\subsection*{REFERENCES}
+\list{\null}{\leftmargin 3em\labelwidth\z@\labelsep\z@\itemindent -3em
+\usecounter{enumi}}
+\def\refpar{\relax}
+\def\newblock{\hskip .11em plus .33em minus .07em}
+\sloppy\clubpenalty4000\widowpenalty4000
+\sfcode`\.=1000\relax}
+\def\endthebibliography{\endlist\revtex@pageid}
+\def\@biblabel#1{\relax}
+\def\@cite#1#2{#1\if@tempswa , #2\fi}
+\def\reference{\relax\refpar}
+\def\markcite#1{#1\relax}
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+\def\@citea{}\@cite{\@for\@citeb:=#2\do
+{\@citea\def\@citea{,\penalty\@m\ }\@ifundefined
+{b@\@citeb}{\@warning
+{Citation `\@citeb' on page \thepage \space undefined}}%
+{\csname b@\@citeb\endcsname}}}{#1}}
+\let\keywords=\@gobble
+\let\subjectheadings=\@gobble
+\def\tablenotemark#1{\rlap{$^{\rm #1}$}}
+\newtoks\@temptokenb
+\def\tblnote@list{}
+\def\tablenotetext#1#2{
+\@temptokena={\vspace{.5ex}{\noindent\llap{$^{#1}$}#2}\par}
+\@temptokenb=\expandafter{\tblnote@list}
+\xdef\tblnote@list{\the\@temptokenb\the\@temptokena}}
+\def\spew@tblnotes{
+\ifx\tblnote@list\@empty\relax
+\else
+\vspace{4.5ex}
+\footnoterule
+\vspace{.5ex}
+{\footnotesize\tblnote@list}
+\gdef\tblnote@list{}
+\fi}
+\def\endtable{\spew@tblnotes\end@float}
+\@namedef{endtable*}{\spew@tblnotes\end@dblfloat}
+\let\tableline=\hline
+\long\def\@makecaption#1#2{\vskip 2ex\noindent #1 #2\par}
+\def\tablenum#1{\def\thetable{#1}\let\@currentlabel\thetable
+\addtocounter{table}{\m@ne}}
+\def\figurenum#1{\def\thefigure{#1}\let\@currentlabel\thefigure
+\addtocounter{figure}{\m@ne}}
+\newbox\pt@box
+\newdimen\pt@width
+\newcount\pt@line
+\newcount\pt@nlines
+\newcount\pt@ncol
+\def\colhead#1{\omit\hidewidth{#1}\hidewidth\global\advance\pt@ncol by\@ne}
+\def\tablecaption#1{\gdef\pt@caption{#1}} \def\pt@caption{\relax}
+\def\tablehead#1{\gdef\pt@head{\hline\hline\relax\\[-1.7ex]
+#1\hskip\tabcolsep\\[.7ex]\hline\relax\\[-1.5ex]}} \def\pt@head{\relax}
+\def\tabletail#1{\gdef\pt@tail{#1}} \def\pt@tail{\relax}
+\def\tablewidth#1{\pt@width=#1} \pt@width\textwidth
+\def\tableheadfrac#1{\gdef\pt@headfrac{#1}} \def\pt@headfrac{.1}
+\def\pt@calcnlines{\@tempdima\pt@headfrac\textheight
+\@tempdimb\textheight\advance\@tempdimb by-\@tempdima
+\@tempdima\arraystretch\baselineskip
+\divide\@tempdimb by\@tempdima
+\global\pt@nlines\@tempdimb}
+\def\pt@tabular{\hbox \bgroup $\let\@acol\@ptabacol
+\let\@classz\@tabclassz
+\let\@classiv\@tabclassiv \let\\\@tabularcr\@tabarray}
+\def\@ptabacol{\edef\@preamble{\@preamble \hskip \tabcolsep\tabskip\fill}}
+\def\fnum@ptable{TABLE \thetable}
+\def\fnum@ptablecont{TABLE \thetable---{\it Continued}}
+\def\set@mkcaption{\long\def\@makecaption##1##2{
+\center\Large\sc##1\\[.5ex]##2\endcenter\vskip 1.5ex}}
+\def\set@mkcaptioncont{\long\def\@makecaption##1##2{
+\center\Large\sc##1\endcenter\vskip 1.5ex}}
+\newenvironment{planotable}[1]{\def\pt@format{\string#1}%
+\set@tblnotetext\pt@ncol=0}%
+{\crcr\noalign{\vskip .7ex}\hline\endtabular%
+\pt@width\wd\pt@box\box\pt@box\spew@ptblnotes%
+\typeout{Table \thetable\space has been set to width \the\pt@width}%
+\endcenter\end@float}
+\def\startdata{\pt@line=0\pt@calcnlines%
+\ifdim\pt@width>\z@\def\@halignto{to \pt@width}\else\def\@halignto{}\fi%
+\let\fnum@table=\fnum@ptable\set@mkcaption%
+\@float{table}\center\caption{\pt@caption}\leavevmode%
+\setbox\pt@box=\pt@tabular{\pt@format}\pt@head}
+\def\pt@nl{\global\advance\pt@line by\@ne%
+\ifnum\pt@line=\pt@nlines%
+\endtabular\box\pt@box
+\endcenter\end@float\clearpage%
+\addtocounter{table}{\m@ne}%
+\let\fnum@table=\fnum@ptablecont\set@mkcaptioncont%
+\@float{table}\center\caption{\pt@caption}\leavevmode%
+\global\pt@ncol=0%
+\setbox\pt@box=\pt@tabular{\pt@format}\pt@head%
+\global\pt@line=0%
+\else\\
+\fi}
+\let\nl=\pt@nl
+\let\nextline=\pt@nl
+\def\tablevspace#1{\noalign{\vskip{#1}}}
+\def\tablebreak{\pt@line\pt@nlines\advance\pt@line by\m@ne\pt@nl}
+\def\cutinhead#1{\noalign{\vskip 1.5ex}
+\hline\pt@nl\noalign{\vskip -4ex}
+\multicolumn{\pt@ncol}{c}{#1}\pt@nl
+\noalign{\vskip .8ex}
+\hline\pt@nl\noalign{\vskip -2ex}}
+\def\sidehead#1{\noalign{\vskip 1.5ex}
+\multicolumn{\pt@ncol}{@{\hskip\z@}l}{#1}\pt@nl
+\noalign{\vskip .5ex}}
+\def\set@tblnotetext{\def\tablenotetext##1##2{{%
+\@temptokena={\vspace{0ex}{%
+\parbox{\pt@width}{\hskip1em$^{\rm ##1}$##2}\par}}%
+\@temptokenb=\expandafter{\tblnote@list}
+\xdef\tblnote@list{\the\@temptokenb\the\@temptokena}}}}
+\def\spew@ptblnotes{
+\ifx\tblnote@list\@empty\relax
+\else
+\par
+\vspace{2ex}
+{\tblnote@list}
+\gdef\tblnote@list{}
+\fi}
+\def\tablerefs#1{\@temptokena={\vspace*{.8ex}{%
+\parbox{\pt@width}{\hskip1em{\rm R{\footnotesize EFERENCES}.---}#1}\par}}%
+\@temptokenb=\expandafter{\tblnote@list}
+\xdef\tblnote@list{\the\@temptokenb\the\@temptokena}}
+\def\tablecomments#1{\@temptokena={\vspace*{.8ex}{%
+\parbox{\pt@width}{\hskip1em{\rm N{\footnotesize OTE}.---}#1}\par}}%
+\@temptokenb=\expandafter{\tblnote@list}
+\xdef\tblnote@list{\the\@temptokenb\the\@temptokena}}
+\def\thefigure{\@arabic\c@figure}
+\def\fnum@figure{{\rm Fig.\space\thefigure.---}}
+\def\thetable{\@arabic\c@table}
+\def\fnum@table{{\rm Table \thetable:}}
+\def\fps@figure{bp}
+\def\fps@table{bp}
+\@ifundefined{epsfbox}{\@input{epsf.sty}}{\relax}
+\def\plotone#1{\centering \leavevmode
+\epsfxsize=\columnwidth \epsfbox{#1}}
+\def\plottwo#1#2{\centering \leavevmode
+\epsfxsize=.45\columnwidth \epsfbox{#1} \hfil
+\epsfxsize=.45\columnwidth \epsfbox{#2}}
+\def\plotfiddle#1#2#3#4#5#6#7{\centering \leavevmode
+\vbox to#2{\rule{0pt}{#2}}
+\special{psfile=#1 voffset=#7 hoffset=#6 vscale=#5 hscale=#4 angle=#3}}
+\let\jnl@style=\rm
+\def\ref@jnl#1{{\jnl@style#1}}
+\def\aj{\ref@jnl{AJ}}
+\def\araa{\ref@jnl{ARA\&A}}
+\def\apj{\ref@jnl{ApJ}}
+\def\apjl{\ref@jnl{ApJ}}
+\def\apjs{\ref@jnl{ApJS}}
+\def\ao{\ref@jnl{Appl.Optics}}
+\def\apss{\ref@jnl{Ap\&SS}}
+\def\aap{\ref@jnl{A\&A}}
+\def\aapr{\ref@jnl{A\&A~Rev.}}
+\def\aaps{\ref@jnl{A\&AS}}
+\def\azh{\ref@jnl{AZh}}
+\def\baas{\ref@jnl{BAAS}}
+\def\jrasc{\ref@jnl{JRASC}}
+\def\memras{\ref@jnl{MmRAS}}
+\def\mnras{\ref@jnl{MNRAS}}
+\def\pra{\ref@jnl{Phys.Rev.A}}
+\def\prb{\ref@jnl{Phys.Rev.B}}
+\def\prc{\ref@jnl{Phys.Rev.C}}
+\def\prd{\ref@jnl{Phys.Rev.D}}
+\def\prl{\ref@jnl{Phys.Rev.Lett}}
+\def\pasp{\ref@jnl{PASP}}
+\def\pasj{\ref@jnl{PASJ}}
+\def\qjras{\ref@jnl{QJRAS}}
+\def\skytel{\ref@jnl{S\&T}}
+\def\solphys{\ref@jnl{Solar~Phys.}}
+\def\sovast{\ref@jnl{Soviet~Ast.}}
+\def\ssr{\ref@jnl{Space~Sci.Rev.}}
+\def\zap{\ref@jnl{ZAp}}
+\let\astap=\aap
+\let\apjlett=\apjl
+\let\apjsupp=\apjs
+\def\deg{\hbox{$^\circ$}}
+\def\sun{\hbox{$\odot$}}
+\def\earth{\hbox{$\oplus$}}
+\def\lesssim{\mathrel{\hbox{\rlap{\hbox{\lower4pt\hbox{$\sim$}}}\hbox{$<$}}}}
+\def\gtrsim{\mathrel{\hbox{\rlap{\hbox{\lower4pt\hbox{$\sim$}}}\hbox{$>$}}}}
+\def\sq{\hbox{\rlap{$\sqcap$}$\sqcup$}}
+\def\arcmin{\hbox{$^\prime$}}
+\def\arcsec{\hbox{$^{\prime\prime}$}}
+\def\fd{\hbox{$.\!\!^{\rm d}$}}
+\def\fh{\hbox{$.\!\!^{\rm h}$}}
+\def\fm{\hbox{$.\!\!^{\rm m}$}}
+\def\fs{\hbox{$.\!\!^{\rm s}$}}
+\def\fdg{\hbox{$.\!\!^\circ$}}
+\def\farcm{\hbox{$.\mkern-4mu^\prime$}}
+\def\farcs{\hbox{$.\!\!^{\prime\prime}$}}
+\def\fp{\hbox{$.\!\!^{\scriptscriptstyle\rm p}$}}
+\def\micron{\hbox{$\mu$m}}
+\let\la=\lesssim
+\let\ga=\gtrsim
+\def\case#1#2{\hbox{$\frac{#1}{#2}$}}
+
+
+\def\slantfrac#1#2{\hbox{$\,^#1\!/_#2$}}
+\def\onehalf{\slantfrac{1}{2}}
+\def\onethird{\slantfrac{1}{3}}
+\def\twothirds{\slantfrac{2}{3}}
+\def\onequarter{\slantfrac{1}{4}}
+\def\threequarters{\slantfrac{3}{4}}
+\def\ubvr{\hbox{$U\!BV\!R$}}
+\def\ub{\hbox{$U\!-\!B$}}
+\def\bv{\hbox{$B\!-\!V$}}
+\def\vr{\hbox{$V\!-\!R$}}
+\def\ur{\hbox{$U\!-\!R$}}
+\def\ion#1#2{#1$\;${\small\rm\@Roman{#2}}\relax}
+\def\nodata{\multicolumn{1}{c}{$\cdots$}}
+\newcount\lecurrentfam
+\def\LaTeX{\lecurrentfam=\the\fam \leavevmode L\raise.42ex
+\hbox{$\fam\lecurrentfam\scriptstyle\kern-.3em A$}\kern-.15em\TeX}
+\def\sizrpt{
+(\fontname\the\font): em=\the\fontdimen6\font, ex=\the\fontdimen5\font
+\typeout{
+(\fontname\the\font): em=\the\fontdimen6\font, ex=\the\fontdimen5\font
+}}
diff --git a/obsolete/macros/latex209/contrib/aasmacros/art8.doc b/obsolete/macros/latex209/contrib/aasmacros/art8.doc
new file mode 100644
index 0000000000..c97428516e
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aasmacros/art8.doc
@@ -0,0 +1,369 @@
+% ARTICLE DOCUMENT STYLE -- Released 22 Dec 1987
+% for LaTeX version 2.09
+% Copyright (C) 1987 by Leslie Lamport
+
+% ****************************************
+% * FONTS *
+% ****************************************
+%
+
+\lineskip 1pt % \lineskip is 1pt for all font sizes.
+\normallineskip 1pt
+\def\baselinestretch{1}
+
+% Each size-changing command \SIZE executes the command
+% \@setsize\SIZE{BASELINESKIP}\FONTSIZE\@FONTSIZE
+% where:
+% BASELINESKIP = Normal value of \baselineskip for that size. (Actual
+% value will be \baselinestretch * BASELINESKIP.)
+%
+% \FONTSIZE = Name of font-size command. The currently available
+% (preloaded) font sizes are: \vpt (5pt), \vipt (6pt),
+% \viipt (etc.), \viiipt, \ixpt, \xpt, \xipt, \xiipt,
+% \xivpt, \xviipt, \xxpt, \xxvpt.
+% \@FONTSIZE = The same as the font-size command except with an
+% '@' in front---e.g., if \FONTSIZE = \xivpt then
+% \@FONTSIZE = \@xivpt.
+%
+% For reasons of efficiency that needn't concern the designer,
+% the document style defines \@normalsize instead of \normalsize . This is
+% done only for \normalsize, not for any other size-changing commands.
+
+\def\@normalsize{\@setsize\normalsize{9.2pt}\viiipt\@viiipt
+\abovedisplayskip 6pt plus2pt minus4pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2pt%
+\belowdisplayshortskip 4pt plus2pt minus2pt%
+\let\@listi\@listI} % Setting of \@listi added 9 Jun 87
+
+\def\small{\@setsize\small{8pt}\viipt\@viipt
+\abovedisplayskip 5pt plus 2pt minus 3pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2pt%
+\belowdisplayshortskip 4pt plus2pt minus 2pt
+\def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87
+\topsep 4pt plus 2pt minus 2pt\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+
+\def\footnotesize{\@setsize\footnotesize{7pt}\vipt\@vipt
+\abovedisplayskip 4.5pt plus 2pt minus 3pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt%
+\belowdisplayshortskip 3pt plus 1pt minus 2pt
+\def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87
+\topsep 3pt plus 1pt minus 1pt\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{6pt}\vpt\@vpt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{10.4pt}\ixpt\@ixpt}
+\def\Large{\@setsize\Large{12pt}\xpt\@xpt}
+\def\LARGE{\@setsize\LARGE{14pt}\xiipt\@xiipt}
+\def\huge{\@setsize\huge{18pt}\xivpt\@xivpt}
+\def\Huge{\@setsize\Huge{22pt}\xviipt\@xviipt}
+
+\normalsize % Choose the normalsize font.
+
+
+% ****************************************
+% * PAGE LAYOUT *
+% ****************************************
+%
+% All margin dimensions measured from a point one inch from top and side
+% of page.
+
+% SIDE MARGINS:
+\if@twoside % Values for two-sided printing:
+ \oddsidemargin 44pt % Left margin on odd-numbered pages.
+ \evensidemargin 82pt % Left margin on even-numbered pages.
+ \marginparwidth 107pt % Width of marginal notes.
+\else % Values for one-sided printing:
+ \oddsidemargin 63pt % Note that \oddsidemargin = \evensidemargin
+ \evensidemargin 63pt
+ \marginparwidth 90pt
+\fi
+\marginparsep 11pt % Horizontal space between outer margin and
+ % marginal note
+
+
+% VERTICAL SPACING:
+ % Top of page:
+\topmargin 27pt % Nominal distance from top of page to top of
+ % box containing running head.
+\headheight 12pt % Height of box containing running head.
+\headsep 25pt % Space between running head and text.
+% \topskip = 10pt % '\baselineskip' for first line of page.
+ % Bottom of page:
+\footskip 30pt % Distance from baseline of box containing foot
+ % to baseline of last line of text.
+
+
+ % DIMENSION OF TEXT:
+% 24 Jun 86: changed to explicitly compute \textheight to avoid roundoff.
+% The value of the multiplier was calculated as the floor of the
+% old \textheight minus \topskip, divided by \baselineskip for \normalsize.
+% The old value of \textheight was 528pt.
+% \textheight is the height of text (including footnotes and figures,
+% excluding running head and foot).
+
+\textheight = 63\baselineskip
+\advance\textheight by \topskip
+\textwidth 345pt % Width of text line.
+ % For two-column mode:
+\columnsep 10pt % Space between columns
+\columnseprule 0pt % Width of rule between columns.
+
+% A \raggedbottom command causes 'ragged bottom' pages: pages set to
+% natural height instead of being stretched to exactly \textheight.
+
+% FOOTNOTES:
+
+\footnotesep 4.5pt % Height of strut placed at the beginning of every
+ % footnote = height of normal \footnotesize strut,
+ % so no extra space between footnotes.
+
+\skip\footins 6pt plus 4pt minus 2pt % Space between last line of text and
+ % top of first footnote.
+
+% FLOATS: (a float is something like a figure or table)
+%
+% FOR FLOATS ON A TEXT PAGE:
+%
+% ONE-COLUMN MODE OR SINGLE-COLUMN FLOATS IN TWO-COLUMN MODE:
+\floatsep 8pt plus 2pt minus 2pt % Space between adjacent floats moved
+ % to top or bottom of text page.
+\textfloatsep 12pt plus 2pt minus 4pt % Space between main text and floats
+ % at top or bottom of page.
+\intextsep 8pt plus 2pt minus 2pt % Space between in-text figures and
+ % text.
+\@maxsep 12pt % The maximum of \floatsep,
+ % \textfloatsep and \intextsep (minus
+ % the stretch and shrink).
+% TWO-COLUMN FLOATS IN TWO-COLUMN MODE:
+\dblfloatsep 8pt plus 2pt minus 2pt % Same as \floatsep for double-column
+ % figures in two-column mode.
+\dbltextfloatsep 12pt plus 2pt minus 4pt % \textfloatsep for double-column
+ % floats.
+\@dblmaxsep 12pt % The maximum of \dblfloatsep and
+ % \dbltexfloatsep.
+
+% FOR FLOATS ON A SEPARATE FLOAT PAGE OR COLUMN:
+% ONE-COLUMN MODE OR SINGLE-COLUMN FLOATS IN TWO-COLUMN MODE:
+\@fptop 0pt plus 1fil % Stretch at top of float page/column. (Must be
+ % 0pt plus ...)
+\@fpsep 8pt plus 2fil % Space between floats on float page/column.
+\@fpbot 0pt plus 1fil % Stretch at bottom of float page/column. (Must be
+ % 0pt plus ... )
+
+% DOUBLE-COLUMN FLOATS IN TWO-COLUMN MODE.
+\@dblfptop 0pt plus 1fil % Stretch at top of float page. (Must be 0pt plus ...)
+\@dblfpsep 8pt plus 2fil % Space between floats on float page.
+\@dblfpbot 0pt plus 1fil % Stretch at bottom of float page. (Must be
+ % 0pt plus ... )
+% MARGINAL NOTES:
+%
+\marginparpush 5pt % Minimum vertical separation between two marginal
+ % notes.
+
+
+% ****************************************
+% * PARAGRAPHING *
+% ****************************************
+%
+\parskip 0pt plus 1pt % Extra vertical space between paragraphs.
+\parindent 15pt % Width of paragraph indentation.
+%\topsep 5pt plus 2pt minus 4pt % Extra vertical space, in addition to
+ % \parskip, added above and below list and
+ % paragraphing environments.
+\partopsep 2pt plus 1pt minus 1pt % Extra vertical space, in addition to
+ % \parskip and \topsep, added when user
+ % leaves blank line before environment.
+%\itemsep 2pt plus 2pt minus 1pt % Extra vertical space, in addition to
+ % \parskip, added between list items.
+% See \@listI for values of \topsep and \itemsep
+% (Change made 9 Jun 87)
+
+% The following page-breaking penalties are defined
+
+\@lowpenalty 51 % Produced by \nopagebreak[1] or \nolinebreak[1]
+\@medpenalty 151 % Produced by \nopagebreak[2] or \nolinebreak[2]
+\@highpenalty 301 % Produced by \nopagebreak[3] or \nolinebreak[3]
+
+\@beginparpenalty -\@lowpenalty % Before a list or paragraph environment.
+\@endparpenalty -\@lowpenalty % After a list or paragraph environment.
+\@itempenalty -\@lowpenalty % Between list items.
+
+% \clubpenalty % 'Club line' at bottom of page.
+% \widowpenalty % 'Widow line' at top of page.
+% \displaywidowpenalty % Math display widow line.
+% \predisplaypenalty % Breaking before a math display.
+% \postdisplaypenalty % Breaking after a math display.
+% \interlinepenalty % Breaking at a line within a paragraph.
+% \brokenpenalty % Breaking after a hyphenated line.
+
+
+% ****************************************
+% * SECTIONS *
+% ****************************************
+%
+
+% \secdef{UNSTARCMDS}{STARCMDS} :
+% When defining a sectionioning command without using
+% \@startsection, you can use \secdef as follows:
+% \def\part { ... \secdef \CMDA \CMDB }
+% \def\CMDA [#1]#2{ ... } % Command to define \part[...]{...}
+% \def\CMDB #1{ ... } % Command to define \part*{...}
+
+\def\part{\par % New paragraph
+ \addvspace{4ex} % Adds vertical space above title.
+ \@afterindentfalse % Suppresses indent in first paragraph. Change
+ \secdef\@part\@spart} % to \@afterindenttrue to have indent.
+
+\def\@part[#1]#2{\ifnum \c@secnumdepth >\m@ne % IF secnumdepth > -1
+ \refstepcounter{part} % THEN step part counter
+ \addcontentsline{toc}{part}{\thepart % add toc line
+ \hspace{1em}#1}\else % ELSE add unnumbered line
+ \addcontentsline{toc}{part}{#1}\fi % FI
+ { \parindent 0pt \raggedright
+ \ifnum \c@secnumdepth >\m@ne % IF secnumdepth > -1
+ \Large \bf Part \thepart % THEN Print 'Part' and
+ \par \nobreak % number in \Large boldface.
+ \fi % FI
+ \huge \bf % Select \huge boldface.
+ #2\markboth{}{}\par } % Print title and set heading marks null.
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 3ex % Space between title and text.
+ \@afterheading % Routine called after part and
+ } % section heading.
+
+% Heading for \part* command
+\def\@spart#1{{\parindent 0pt \raggedright
+ \huge \bf
+ #1\par} % Title.
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 3ex % Space between title and text.
+ \@afterheading % Routine called after part and
+ } % section heading.
+
+% \@startsection {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}
+% optional * [ALTHEADING]{HEADING}
+% Generic command to start a section.
+% NAME : e.g., 'subsection'
+% LEVEL : a number, denoting depth of section -- i.e., section=1,
+% subsection = 2, etc. A section number will be printed if
+% and only if LEVEL < or = the value of the secnumdepth
+% counter.
+% INDENT : Indentation of heading from left margin
+% BEFORESKIP : Absolute value = skip to leave above the heading.
+% If negative, then paragraph indent of text following
+% heading is suppressed.
+% AFTERSKIP : if positive, then skip to leave below heading,
+% else - skip to leave to right of run-in heading.
+% STYLE : commands to set style
+% If '*' missing, then increments the counter. If it is present, then
+% there should be no [ALTHEADING] argument. A sectioning command
+% is normally defined to \@startsection + its first six arguments.
+
+\def\section{\@startsection {section}{1}{\z@}{-3.5ex plus -1ex minus
+ -.2ex}{2.3ex plus .2ex}{\Large\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-3.25ex plus -1ex minus
+ -.2ex}{1.5ex plus .2ex}{\large\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-3.25ex plus
+-1ex minus -.2ex}{1.5ex plus .2ex}{\normalsize\bf}}
+\def\paragraph{\@startsection
+ {paragraph}{4}{\z@}{3.25ex plus 1ex minus .2ex}{-1em}{\normalsize\bf}}
+\def\subparagraph{\@startsection
+ {subparagraph}{4}{\parindent}{3.25ex plus 1ex minus
+ .2ex}{-1em}{\normalsize\bf}}
+
+
+% Default initializations of \...mark commands. (See below for their
+% us in defining page styles.
+%
+
+% \def\sectionmark#1{} % Preloaded definitions
+% \def\subsectionmark#1{}
+% \def\subsubsectionmark#1{}
+% \def\paragraphmark#1{}
+% \def\subparagraphmark#1{}
+
+% The value of the counter secnumdepth gives the depth of the
+% highest-level sectioning command that is to produce section numbers.
+%
+
+\setcounter{secnumdepth}{3}
+
+% APPENDIX
+%
+% The \appendix command must do the following:
+% -- reset the section and subsection counters to zero
+% -- redefine the section counter to produce appendix numbers
+% -- redefine the \section command if appendix titles and headings are
+% to look different from section titles and headings.
+
+\def\appendix{\par
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \def\thesection{\Alph{section}}}
+
+
+% ****************************************
+% * LISTS *
+% ****************************************
+%
+
+% The following commands are used to set the default values for the list
+% environment's parameters. See the LaTeX manual for an explanation of
+% the meanings of the parameters. Defaults for the list environment are
+% set as follows. First, \rightmargin, \listparindent and \itemindent
+% are set to 0pt. Then, for a Kth level list, the command \@listK is
+% called, where 'K' denotes 'i', 'ii', ... , 'vi'. (I.e., \@listiii is
+% called for a third-level list.) By convention, \@listK should set
+% \leftmargin to \leftmarginK.
+%
+% For efficiency, level-one list's values are defined at top level, and
+% \@listi is defined to set only \leftmargin
+
+\leftmargini 2.5em
+\leftmarginii 2.2em % > \labelsep + width of '(m)'
+\leftmarginiii 1.87em % > \labelsep + width of 'vii.'
+\leftmarginiv 1.7em % > \labelsep + width of 'M.'
+\leftmarginv 1em
+\leftmarginvi 1em
+
+\leftmargin\leftmargini
+\labelsep 5pt
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+% \parsep 2pt plus 2pt minus 1pt (Removed 9 Jun 87)
+
+% \@listI defines top level and \@listi values of
+% \leftmargin, \topsep, \parsep, and \itemsep
+% (Added 9 Jun 87)
+\def\@listI{\leftmargin\leftmargini \parsep 2pt plus 2pt minus 1pt%
+\topsep 5pt plus 2pt minus 4pt%
+\itemsep 2pt plus 2pt minus 1pt}
+
+\let\@listi\@listI
+\@listi
+
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 2pt plus 2pt minus 1pt
+ \parsep 2pt plus 1pt minus 1pt
+ \itemsep \parsep}
+
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2pt plus 1pt minus 1pt
+ \parsep \z@ \partopsep 1pt plus 0pt minus 1pt
+ \itemsep \topsep}
+
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
diff --git a/obsolete/macros/latex209/contrib/aasmacros/art8.sty b/obsolete/macros/latex209/contrib/aasmacros/art8.sty
new file mode 100644
index 0000000000..6df9eb2011
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aasmacros/art8.sty
@@ -0,0 +1,150 @@
+\lineskip 1pt
+\normallineskip 1pt
+\def\baselinestretch{1}
+\def\@normalsize{\@setsize\normalsize{9.2pt}\viiipt\@viiipt
+\abovedisplayskip 6pt plus2pt minus4pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2pt%
+\belowdisplayshortskip 4pt plus2pt minus2pt%
+\let\@listi\@listI}
+\def\small{\@setsize\small{8pt}\viipt\@viipt
+\abovedisplayskip 5pt plus 2pt minus 3pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2pt%
+\belowdisplayshortskip 4pt plus2pt minus 2pt
+\def\@listi{\leftmargin\leftmargini
+\topsep 4pt plus 2pt minus 2pt\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+\def\footnotesize{\@setsize\footnotesize{7pt}\vipt\@vipt
+\abovedisplayskip 4.5pt plus 2pt minus 3pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt%
+\belowdisplayshortskip 3pt plus 1pt minus 2pt
+\def\@listi{\leftmargin\leftmargini
+\topsep 3pt plus 1pt minus 1pt\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+\def\scriptsize{\@setsize\scriptsize{6pt}\vpt\@vpt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{10.4pt}\ixpt\@ixpt}
+\def\Large{\@setsize\Large{12pt}\xpt\@xpt}
+\def\LARGE{\@setsize\LARGE{14pt}\xiipt\@xiipt}
+\def\huge{\@setsize\huge{18pt}\xivpt\@xivpt}
+\def\Huge{\@setsize\Huge{22pt}\xviipt\@xviipt}
+\normalsize
+\if@twoside
+\oddsidemargin 44pt
+\evensidemargin 82pt
+\marginparwidth 107pt
+\else
+\oddsidemargin 63pt
+\evensidemargin 63pt
+\marginparwidth 90pt
+\fi
+\marginparsep 11pt
+\topmargin 27pt
+\headheight 12pt
+\headsep 25pt
+\footskip 30pt
+\textheight = 63\baselineskip
+\advance\textheight by \topskip
+\textwidth 345pt
+\columnsep 10pt
+\columnseprule 0pt
+\footnotesep 4.5pt
+\skip\footins 6pt plus 4pt minus 2pt
+\floatsep 8pt plus 2pt minus 2pt
+\textfloatsep 12pt plus 2pt minus 4pt
+\intextsep 8pt plus 2pt minus 2pt
+\@maxsep 12pt
+\dblfloatsep 8pt plus 2pt minus 2pt
+\dbltextfloatsep 12pt plus 2pt minus 4pt
+\@dblmaxsep 12pt
+\@fptop 0pt plus 1fil
+\@fpsep 8pt plus 2fil
+\@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil
+\@dblfpsep 8pt plus 2fil
+\@dblfpbot 0pt plus 1fil
+\marginparpush 5pt
+\parskip 0pt plus 1pt
+\parindent 15pt
+\partopsep 2pt plus 1pt minus 1pt
+\@lowpenalty 51
+\@medpenalty 151
+\@highpenalty 301
+\@beginparpenalty -\@lowpenalty
+\@endparpenalty -\@lowpenalty
+\@itempenalty -\@lowpenalty
+\def\part{\par
+\addvspace{4ex}
+\@afterindentfalse
+\secdef\@part\@spart}
+\def\@part[#1]#2{\ifnum \c@secnumdepth >\m@ne
+ \refstepcounter{part}
+ \addcontentsline{toc}{part}{\thepart
+ \hspace{1em}#1}\else
+\addcontentsline{toc}{part}{#1}\fi
+{ \parindent 0pt \raggedright
+\ifnum \c@secnumdepth >\m@ne
+\Large \bf Part \thepart
+\par \nobreak
+\fi
+\huge \bf
+#2\markboth{}{}\par }
+\nobreak
+\vskip 3ex
+\@afterheading
+}
+\def\@spart#1{{\parindent 0pt \raggedright
+\huge \bf
+#1\par}
+\nobreak
+\vskip 3ex
+\@afterheading
+}
+\def\section{\@startsection {section}{1}{\z@}{-3.5ex plus -1ex minus
+-.2ex}{2.3ex plus .2ex}{\Large\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-3.25ex plus -1ex minus
+-.2ex}{1.5ex plus .2ex}{\large\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-3.25ex plus
+-1ex minus -.2ex}{1.5ex plus .2ex}{\normalsize\bf}}
+\def\paragraph{\@startsection
+{paragraph}{4}{\z@}{3.25ex plus 1ex minus .2ex}{-1em}{\normalsize\bf}}
+\def\subparagraph{\@startsection
+{subparagraph}{4}{\parindent}{3.25ex plus 1ex minus
+.2ex}{-1em}{\normalsize\bf}}
+\setcounter{secnumdepth}{3}
+\def\appendix{\par
+\setcounter{section}{0}
+\setcounter{subsection}{0}
+\def\thesection{\Alph{section}}}
+\leftmargini 2.5em
+\leftmarginii 2.2em
+\leftmarginiii 1.87em
+\leftmarginiv 1.7em
+\leftmarginv 1em
+\leftmarginvi 1em
+\leftmargin\leftmargini
+\labelsep 5pt
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\def\@listI{\leftmargin\leftmargini \parsep 2pt plus 2pt minus 1pt%
+\topsep 5pt plus 2pt minus 4pt%
+\itemsep 2pt plus 2pt minus 1pt}
+\let\@listi\@listI
+\@listi
+\def\@listii{\leftmargin\leftmarginii
+\labelwidth\leftmarginii\advance\labelwidth-\labelsep
+\topsep 2pt plus 2pt minus 1pt
+\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}
+\def\@listiii{\leftmargin\leftmarginiii
+\labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+\topsep 2pt plus 1pt minus 1pt
+\parsep \z@ \partopsep 1pt plus 0pt minus 1pt
+\itemsep \topsep}
+\def\@listiv{\leftmargin\leftmarginiv
+\labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv
+\labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi
+\labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
diff --git a/obsolete/macros/latex209/contrib/aasmacros/eqsecnum.sty b/obsolete/macros/latex209/contrib/aasmacros/eqsecnum.sty
new file mode 100644
index 0000000000..79776844d0
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aasmacros/eqsecnum.sty
@@ -0,0 +1,16 @@
+% EQSECNUM.STY -- Substyle definition for equations numbered with
+% corresponding section number.
+
+% This is the least intrusive way to implement a substyle layered on top
+% the standard LaTeX styles: by creating a foo.sty style that is read when
+% the specifies the document substyle foo. This file is read in when
+%
+% \documentstyle[12pt,aasms,eqsecnum]{article}
+%
+% is specified by the author.
+
+\eqsecnum
+
+% That's all this files does. It would be more efficient to have "eqsecnum"
+% declared as an internal substyle, but that requires modifications in the
+% main LaTeX article.sty file.
diff --git a/obsolete/macros/latex209/contrib/aasmacros/flushrt.sty b/obsolete/macros/latex209/contrib/aasmacros/flushrt.sty
new file mode 100644
index 0000000000..3b868527a3
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aasmacros/flushrt.sty
@@ -0,0 +1,4 @@
+% FLUSHRT.STY -- Enable full justification and hyphenation.
+
+\@rightskip=\z@\rightskip\@rightskip % Flush right
+\pretolerance=100 % Enable hyphenation
diff --git a/obsolete/macros/latex209/contrib/aasmacros/graphics.aux b/obsolete/macros/latex209/contrib/aasmacros/graphics.aux
new file mode 100644
index 0000000000..bb7dee491b
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aasmacros/graphics.aux
@@ -0,0 +1,11 @@
+\relax
+\@writefile{lof}{\string\contentsline\space {figure}{\string\numberline\space {1}{\ignorespaces IRAF plot}}{1}}
+\newlabel{onebarrel}{{1}{1}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {1.}Why PostScript is good}{2}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.1.}Encapsulated PostScript}{2}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {2.}Overview of the DVIPS commands}{3}}
+\@writefile{lof}{\string\contentsline\space {figure}{\string\numberline\space {2}{\ignorespaces Dual IRAF plots}}{3}}
+\newlabel{twobarrel}{{2}{3}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {3.}Implications for the AAST\kern -.1667em\lower .5ex\hbox {E}\kern -.125emX\ package}{3}}
+\@writefile{lof}{\string\contentsline\space {figure}{\string\numberline\space {3}{\ignorespaces Inverted IRAF plot}}{4}}
+\@writefile{lof}{\string\contentsline\space {figure}{\string\numberline\space {4}{\ignorespaces Mangled IRAF plot}}{5}}
diff --git a/obsolete/macros/latex209/contrib/aasmacros/graphics.tex b/obsolete/macros/latex209/contrib/aasmacros/graphics.tex
new file mode 100644
index 0000000000..5c229d0a29
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aasmacros/graphics.tex
@@ -0,0 +1,169 @@
+% GRAPHICS.TEX -- EPS graphics inclusion proposal for WGAS.
+
+\documentstyle[12pt,aaspp,flushrt]{article}
+
+\def\emphasize#1{{\sl #1\/}}
+
+\begin{document}
+\title{Graphics inclusions in manuscripts}
+\author{C. D. Biemesderfer}
+\affil{NOAO, Tucson, AZ}
+
+There has been considerable development of text processing and
+typesetting tools over the past decade, and more and more
+scientists are using these complex programs to produce the
+material that they publish.
+Over the past several years, technology for creating
+finished-quality charts and graphics has started to come of age:
+versatile plotting and drawing programs are now widely available,
+high-resolution bit-mapped video displays are becoming commonplace,
+and laser printer hardware and software has matured.
+
+\begin{figure}[h]
+\plotone{sgi9289.eps}
+\caption{IRAF plot} \label{onebarrel}
+\end{figure}
+
+It is natural for astronomers who are publishing scientific
+results to desire a mechanism for merging their graphical and
+textual data in a way that ensures a certain integrity in the
+page layout.
+Fortunately, the adoption of PostScript\footnote{PostScript
+is a registered trademark of Adobe Systems Incorporated.}
+as a de facto \emphasize{page description language} standard
+by a substantial fraction of the relevant sectors of the
+industry makes it simpler for programmers to set up the machinery.
+
+\section{Why PostScript is good}
+
+PostScript has a number of merits that make it a good choice
+as the language to use for graphics exchange.
+Most important is that it is a \emphasize{device-independent}
+means of describing printing on a page, and has been widely
+implemented across a variety of printers and display devices.
+It is fairly well-documented and tested, so different
+implementations work reliably and behave predictably.
+
+Furthermore, PostScript is composed of text using the ASCII
+character set. This makes is very easy to transport files
+on networks, and they are susceptible to manipulation by
+standard text processing tools, e.g., editors, pagers, etc.
+
+\subsection{Encapsulated PostScript}
+
+It is desirable for graphics inclusions to conform to certain
+codes of behavior, so that the graphics can be manipulated
+readily and reliably. PostScript can be generated at any of
+several levels of so-called \emphasize{structuring conventions},
+which are a more or less inevitable consequence of PostScript's
+heritage as a programming language.
+
+When a PostScript program is to be interpreted as a simple
+page description, it is convenient if it obeys some rules of
+form. For the purposes of graphics inclusion, the most
+important property is that the PostScript be \emphasize{encapsulated}.
+What this means essentially is that the including application
+can determine the size and location on the page of the graphic
+\emphasize{without} having to interpret any PostScript code.
+
+The boundaries of such a ``capsule'' graphic are defined by
+a \verb"BoundingBox" comment that specifies the $x$ and $y$
+coordinates of two opposing corners of the graphic.
+There are other ``do's and don'ts'' in the quest to produce
+encapsulated PostScript; however, it is generally sufficient
+for the including application to specify that imported
+PostScript graphics conform to the encapsulation standard.
+
+\section{Overview of the DVIPS commands}
+
+This is intended as a cursory look at the commands that can
+be used to work with graphics inclusions. It is by no means
+necessary for authors to know \emphasize{any} of this; markup
+language writers can easily shield the end-user from all of
+the details of the PostScript interface.
+
+A graphic that is delivered to an application in a capsule
+defined by a bounding box can be subjected to a limited number
+of operations: translation, truncation, scaling, and rotation.
+Translation, truncation (called \emphasize{clipping} in PostScript
+context), and scaling can be performed on each coordinate
+independently, hence we can identify seven primitive functions:
+\begin{center}
+\begin{tabular}{ll@{\hspace{2em}}ll}
+\tt hoffset & horizontal offset & \tt voffset & vertical offset \\
+\tt hsize & horizontal clip size & \tt vsize & vertical clip size \\
+\tt hscale & horizontal scale factor & \tt vscale & vertical scale factor \\
+\tt angle & rotation angle \\
+\end{tabular}
+\end{center}
+For most graphics inclusions, scaling is the most important
+function. It is rare to clip or rotate imported graphics,
+and moving the coordinate system origin from the current
+point is often troublesome in a text formatter.
+Furthermore, there is usually no reason to alter the aspect
+ratio of the graphic, so including encapsulated PostScript is
+often as simple as specifying a scale factor or a dimension
+and reading the file.
+
+\begin{figure}[h]
+\plottwo{sgi9279.eps}{sgi9259.eps}
+\caption{Dual IRAF plots} \label{twobarrel}
+\end{figure}
+
+\section{Implications for the AAS\TeX\ package}
+
+We are concerned with the import of two-dimensional graphics and
+grey-scale images into scientific manuscripts and other technical
+documentation. At this point in time, it should be adequate to
+require that all graphics for import be in the form of encapsulated
+PostScript, and to declare that figures will be imported in their
+entirety and with the same aspect ratio as in the original.
+It is then trivial to build some simple macros based on the \verb"epsf"
+substyle that is supplied with the DVIPS program by its author
+Tom Rokicki.
+
+The \verb"epsf" macros we need to worry about are \verb"\epsfxsize"
+and \verb"\epsfbox", which perform the two functions we determined
+in the preceding section to be critical. For purposes of having
+prototype macros, I wrote two simple macros:
+
+\hangindent=3pc \hangafter=1
+\noindent
+\verb"\plotone{FILE}" reads the PostScript in FILE and adjusts
+the scale such that the $x$-coordinate width of the graphic matches
+the \verb"\textwidth" of the manuscript.
+Figure~\ref{onebarrel} on page~\pageref{onebarrel} is an example.
+
+\hangindent=3pc \hangafter=1
+\noindent
+\verb"\plottwo{FILE1}{FILE2}" reads the PostScript from two
+files and scales each to fit across half the \verb"\textwidth"
+(actually, slightly less than half so the graphics don't collide).
+Figure~\ref{twobarrel} on page~\pageref{twobarrel} shows a pair
+of dueling inclusions.
+
+The arguments to the \verb"\plotone" and \verb"\plottwo" commands
+should not include additional scaling and rotation information.
+These commands are suggested as part of the AAS\TeX\ markup
+conventions, but it is entirely reasonable for authors to use the
+markup syntax of DVIPS for handling encapsulated PostScript graphics.
+If direct access to the graphic is desired, it is necessary to use
+the interface syntax defined by Rokicki.
+
+\begin{figure}[h]
+\vbox to2.6in{\rule{0pt}{2.6in}}
+\special{psfile=sgi9259.eps angle=180 hoffset=424 voffset=232 vscale=60 hscale=60}
+\caption{Inverted IRAF plot}
+\end{figure}
+
+One has to be careful, though, when using this approach, since the
+automatic link between the formatter (\LaTeX) and the PostScript
+is abandoned. One can get great effects, or totally funky ones \ldots
+
+\begin{figure}[h]
+\vbox to3in{\rule{0pt}{3in}}
+\special{psfile=sgi9259.eps voffset=-218 hoffset=60 vscale=75 hscale=55 angle=30}
+\caption{Mangled IRAF plot}
+\end{figure}
+
+\end{document}
diff --git a/obsolete/macros/latex209/contrib/aasmacros/kspp.tex b/obsolete/macros/latex209/contrib/aasmacros/kspp.tex
new file mode 100644
index 0000000000..de2c4a468f
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aasmacros/kspp.tex
@@ -0,0 +1,263 @@
+% KSPP.TEX -- K.Sellgren's proposal about preprints for AAS Pubs Board.
+%
+% I have made a few modifications to the file so that the markup reads
+% as true preprint markup. Kris had to prepare this with a couple
+% items handled explicitly; I have added the commands for these.
+
+\documentstyle[12pt,aaspp]{article}
+%\documentstyle[12pt,aasms]{article}
+%\tighten
+
+\begin{document}
+
+\slugcomment{\shortstack[r]{
+Submitted to the AAS Publications Board, 1992 June 1\\
+Revised, 1992 November 17}}
+%\hbox to 6.5truein {\hfil Submitted to the AAS Publications Board, 1992 June 1}
+%\hbox to 6.5truein {\hfil Revised, 1992 November 17}
+
+\title
+{A Proposed Format for the AAS/WGAS Latex Macros Preprint Style}
+
+\author
+{K. Sellgren\altaffilmark{1}}
+%{K. Sellgren$^ {1}$}
+
+\affil
+{Department of Astronomy, Ohio State University, Columbus, OH 43210}
+
+\altaffiltext{1}
+{Alfred P. Sloan Foundation Fellow.}
+
+%\vskip 24pt
+%\clearpage
+
+%\centerline
+%{\bf Abstract}
+\begin{abstract}
+This is a sample preprint for defining the AAS/WGAS Latex Macros preprint
+style. Results are presented for two surveys of preprint formats preferred
+by astronomers.
+\end{abstract}
+
+\keywords{publications: preprint --- publications: or perish ---
+publications: sample --- AAS: Pub Board --- committee report}
+
+%\clearpage
+\section
+{Introduction}
+
+Preprints provide an opportunity for astronomers to share their results
+quickly with the astronomical community, in the six to nine month period
+between acceptance of a paper for publication and appearance of the paper
+in the journal. Preprint distribution schemes vary widely, from sending
+preprints only upon request, to sending preprints to all astronomical
+libraries plus a list of 50 or 100 astronomers who might remotely have
+some interest in the subject of one's paper. The preprint is a publishing
+phenomenon which is likely to persist as long as there is a many month
+delay between acceptance and publication of a journal paper, although in
+future some or all preprints may be distributed electronically rather than
+on paper.
+
+A subcommittee of the AAS Publications Board, chaired by myself, was charged
+with examining the format of the AAS/WGAS Latex Macros package which
+produces preprints. I prepared a draft document which was reviewed by the
+preprint subcommittee at the June 1992 AAS meeting. This revised version
+incorporates the suggestions made then.
+
+At the May 1992 Publications Board meeting, it was felt that the current
+preprint format generated by the AAS/WGAS Latex Macros, using the aaspp.sty
+style file, was unacceptable and that changes were desired. Certain
+essential characteristics of a preprint were agreed upon. First, the
+preprint should not mimic a page of one particular astronomical journal,
+such as the Astrophysical Journal. This slights the other journals such
+as the Astronomical Journal and the Publications of the Astronomical
+Society of the Pacific, and furthermore blurs the distinction between the
+preprint and the final published version of the paper in the journal.
+Second, the preprint should be easily read. Other features also seem
+desirable, such as compactness to save trees and mailing charges, the
+ability to include figures and figure captions gracefully, and some
+flexibility so that more than one style of preprint could be accommodated
+for those with very divergent tastes. Additionally, there is a clear need
+for something which will estimate how many pages a given text file will
+produce in the Astrophysical Journal Letters, due to the stringent page
+limit of that journal. This estimate of the number of ApJ Letters pages
+might be possible to include as part of the output of a preprint formatter,
+although other approaches may be more desirable, such as a separate page
+length estimator program.
+
+\section
+{Observations}
+
+I employed two techniques for surveying preferred preprint formats. First,
+I examined 85 preprints I received in the last two years, to determine what
+the average preprint already looked like. Since most astronomers have had
+access to a variety of word processors for many years, and thus have had
+the opportunity to select a format which suits their needs and tastes, it
+seemed this was a good indication of what most astronomers would prefer in
+a preprint format. This sample mostly (but not exclusively) contained
+preprints submitted to refereed journals, since preprints of papers intended
+for conference proceedings were often in camera-ready format, reflecting not
+the tastes of the authors but of the publishers of the conference proceedings.
+Second, I prepared several examples of possible preprint formats, using
+variations on the AAS/WGAS Latex Macros, and showed the output to various
+persons in my department to solicit opinions.
+
+\section
+{Results}
+
+\subsection{Survey of 85 Recent Preprints}
+
+The overwhelming majority of preprints in the 1990--1992 sample surveyed
+were formatted with single columns of text per page (98 \%) and one page
+of text per preprint page (96 \%). Obviously the AAS/WGAS Latex macros
+should respect this strong preference.
+
+Most preprints had the figures at the end (87 \%) rather than interspersed
+in the text. This may be partly due to preference and partly due to the
+current difficulty of including the figures within the text.
+
+Astronomers were divided on whether to single space (42 \%) or double space
+(58 \%) their text of their preprints. Since there was no clear preference
+for either style, the AAS/WGAS Latex macros should make it extremely simple
+to choose either single spaced or double spaced output.
+
+There was a wide divergence of opinions on how to divide up the title,
+abstract, and main text beginning with the introduction into pages. Most
+preprints (62 \%) put title, abstract, and introduction on three separate
+pages, but a significant subset (14 \%) of preprints ran all three together
+with no page breaks. Most astronomers (81 \%) preferred a separate title
+page whether or not they ran the abstract and introduction together. Many
+preprints had two title pages: one printed on the institutional preprint
+cover or designed so that the title and authors were visible through a hole
+in the institution's preprint cover, and a second title page following in a
+format more suited to the author's tastes or needs. A common feature of
+title pages was some indication of where the paper was to be published
+(title of the conference proceedings or name of the journal), its status
+(submitted, accepted, in press), and a date of some sort (date of the
+conference, date of submission to the journal, scheduled date for journal
+publication, or date of preprint mailing). Clearly there should be a lot
+of flexibility in how the AAS/WGAS Latex macros format the title page.
+Fortunately page breaks are simple to add or subtract in Latex.
+
+\subsection{Survey of Seven OSU Astronomers}
+
+The results from a survey of seven Ohio State astronomers, chosen because
+they happened to be in their offices when I walked down the hall, confirms
+the results of a larger preprint sample. No-one liked a double column format.
+There was a mix of opinions on whether or not to single space the text.
+Most preferred the title, abstract, and main text on separate pages, but a
+significant minority felt strongly that the title and abstract should be
+on the same page.
+
+\section
+{Discussion}
+
+The main feature that became apparent in this survey of preprint styles
+was that most authors were very lazy: they most often sent out preprints
+in the identical format that was used to submit the paper to the journal
+($\sim$ 60 \%), and if they made a change at all, it was to single space
+the text and perhaps remove some page breaks to conserve paper. Thus, if
+the only change an author need make to produce a nice preprint is to include
+aaspp.sty instead of aasms.sty at the top of their paper, they will do it;
+but anything much more complex is likely not to be used.
+
+\subsection{Text Format}
+
+A preprint format which to first order satisfies all needs can be created
+with the current aasms.sty style file, using the $\backslash$tightenlines
+option (which makes the output single spaced instead of double spaced).
+I propose the preprint format have as its default single-spaced lines and
+no page breaks between title, abstract, and main text, since it is simple
+for the author to insert $\backslash$clearpage wherever desired. The main
+differences between the manuscript format and the preprint format, then,
+would be the spacing default (this should include tables; tables must be
+double spaced for the manuscript and should be single spaced as a default
+for the preprint), and the treatment of figures. There should also be a
+simple Latex command to toggle the preprint format anywhere in the paper
+between single spaced and double spaced, in case the author prefers to use
+one spacing for text and another for tables.
+
+Most authors like to include extra information in their preprints along the
+lines of ``Invited paper presented at IAU Symposium 153, Galactic Bulges,
+Ghent, Belgium, August 1992'' or ``Accepted for publication in AJ, November
+1992 issue.'' The preprint subcommittee prefers placing this information
+in the upper righthand corner of the title page, and suggests that a macro
+be created to do this.
+
+\subsection
+{Figures}
+
+There are two possibilities for handling figures in preprints. One is the
+traditional method of attaching a page or more of figure captions at the
+end of the paper, followed by full page figures. This strategy has the
+advantage of providing large versions of figures which are later reduced
+to tiny sizes in the journal, and is popular among authors since it is
+also simple. The other is to include the figures in the body of the text.
+The AAS/WGAS Latex macros for preprints provide an opportunity to experiment
+with this latter technique. The preprint subcommittee feels that placing
+the figures at the end of the text should be the default, but that the
+capability to move figures into the body of the text be included in the
+AAS/WGAS Latex macros for preprints.
+
+I suggest the AAS/WGAS Latex macros for preprints should place figures
+in the text with one Latex command to include the contents of a Postscript
+file containing the figure, and a second Latex command to place the figure
+caption for each figure immediately under the figure, followed by white
+space separating the figure caption from the main text. In some cases
+astronomers will not have the ability to create Postscript output for their
+figures, in which case a third Latex command is needed to leave the
+appropriate space (in cm or inches) for the figure above the figure caption,
+in case authors desire to paste in figures by hand. The preprint subcommittee
+suggests that the command to include a figure embedded within the text act
+as a comment to the journal suggesting where the figure should go in the
+paper, when used with aasms.sty, but this same command when used with
+aaspp.sty should actually incorporate the Postscript format figure into
+the text.
+
+\section
+{Summary}
+
+The results of two surveys of astronomers concerning preprint formats are
+presented. The consensus is that the default format should be single column
+text, with the text either double spaced or single spaced as the author
+prefers. The placing of page breaks between title, abstract, and main text
+should be at the author's discretion. A macro is needed to place the
+date and publication status of the preprint in the upper right hand corner
+of the title page. It may be useful for the preprint formatter to output
+an estimate of the number of pages of ApJ Letters format text that the
+preprint will produce. While placing the figures at the end of the preprint
+should be the default, the preprint format also provides an opportunity for
+authors to experiment with including figures in the text. This might
+be done with a command which in manuscript style acts as a comment to
+the journal on figure placement, but which in preprint style acts to include
+a Postscript file containing the figure in the output.
+
+\acknowledgments
+This wonderful document was prepared at the instigation of Caty Pilachowski.
+
+\begin{references}
+
+\reference
+Allen, N., Boisson, P., \& Chang, K.-Y.
+1990, ApJ, 356, 907
+
+\reference
+Djorestky, J., Estevez, M., \& Fujikama, K.
+1991, AJ, 93, 473
+
+\reference
+Garcia, I., Heitzman, T., \& Innis, R.
+1992, PASP, 102, 558
+
+\reference
+Jones, E., Kaminski, C., \& Lee, H.
+1990, AA, 127, 290
+
+\reference
+Monet, C., Ng, T., \& Ortiz, A.
+1991, MNRAS, 295, 684
+
+\end{references}
+
+\end{document}
diff --git a/obsolete/macros/latex209/contrib/aasmacros/manual.tex b/obsolete/macros/latex209/contrib/aasmacros/manual.tex
new file mode 100644
index 0000000000..9ca93d0457
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aasmacros/manual.tex
@@ -0,0 +1,798 @@
+% MANUAL.TEX -- User input guide for AAS WGAS LaTeX macros.
+
+\documentstyle[aaspp]{article}
+
+\textwidth 7.3in
+\hoffset=-0.4in % This centers the extra wide page
+\voffset=-0.4in % This is because the printer I use prints too low...
+\def\baselinestretch{0.94}
+
+\hyphenation{com-pu-scripts}
+
+\begin{document}
+\twocolumn
+
+\title{The WGAS \LaTeX\ Macros\\
+ for Manuscript Preparation}
+
+\author{Chris Biemesderfer}
+\affil{National Optical Astronomy Observatories}
+\author{Bob Hanisch}
+\affil{Space Telescope Science Institute}
+
+\vspace{.2in}
+
+The AAS Working Group on Astronomical Software (WGAS)
+has developed a \LaTeX\ macro package to assist authors in
+preparing manuscripts for articles that
+are intended for submission to the AAS-affiliated journals.
+% This sentence is not intended to exclude other journals
+% or other societies from engaging in dialogue with us about
+% electronic publishing issues, or, for that matter, using
+% these macros for their own authors. However, that is as
+% much as I can state officially and publically today.
+It is important that the markup used by authors in computer
+manuscripts (called {\sl compuscripts}) be consistent and
+standardized so that compuscripts might be widely accepted
+by the journals, and perhaps even become part of the normal
+production procedures.
+
+This guide contains basic instructions for creating
+compuscripts using the WGAS macros, which function
+as substyles to the standard \LaTeX\ {\tt article} style.
+Authors are expected to be familiar with the editorial
+requirements of the journals so that they can make
+appropriate submissions, as well as to have at least
+a rudimentary knowledge of \TeX.
+It is unrealistic for us to provide a tutorial
+on \TeX, hence we warn readers who are unfamiliar with
+\TeX\ that they will need additional sources of information.
+These are listed in the {\it References} section.
+
+\section{General preparation instructions}
+
+Computer manuscripts must include all the necessary components,
+e.g., a title, author names and their affiliations,
+an abstract, a main body, tables, etc., in the proper
+order according to the editorial requirements of the journal.
+It is the author's responsibility to ensure that the article
+conforms to all editorial specifications regarding content and
+organization, mathematical formul\ae, chemical names, etc.
+
+In the sections that follow, we review some essential procedures
+that must be followed when preparing \TeX\ input.
+
+\subsection{Running text}
+
+Printing is different from typewriting, and \TeX\ is different
+from other word processing tools. This section consists of
+reminders (admonitions) about things that require special
+attention so that \TeX\ can format the input properly.
+
+The ends of words and sentences are marked by white space, and
+it doesn't matter how many spaces are typed; one is as good as 100.
+\TeX\ treats the end of a line in the input file as a space.
+
+Paragraphs are separated by blank lines.
+Don't hyphenate words in the input file;
+\TeX\ takes care of hyphenation automatically.
+Continue to hyphenate modifiers within a line of text, e.g.,
+``author-prepared copy.''
+
+Quotation marks should be typed as pairs of opening and
+closing single quotes, e.g., {\tt ``quoted text''};
+don't use double quotes ({\tt "bad form"}).
+
+Do not underline.
+In printing, text is emphasized by changing the type style,
+usually to {\sl slanted\/} or {\it italic\/} type.
+
+A number of common characters are interpreted as commands,
+and these must be entered specially, by preceding them with
+a backslash (\verb"\"): \$ \& \% \# \{ and \} must be typed
+\verb"\$" \verb"\&" \verb"\%" \verb"\#" \verb"\{" and \verb"\}".
+
+Authors should refrain from adding vertical or horizontal space.
+Concentrate on the content of the document and identifying its
+components with the structural markup commands.
+Authors should avoid the use of any \LaTeX\ command definitions
+that create markup commands not described in this guide.
+
+\subsection{Math}
+
+Mathematical expressions that are part of the running text are
+delimited by a single dollar sign (\$),
+e.g., \verb"$\pi r^2$" yields $\pi r^2$.
+To get the appropriately sized superscript or subscript in the
+roman font, use the \verb"\rm" command, e.g.,
+\verb"$J_{\rm HF}(t)$" produces $J_{\rm HF}(t)$.
+
+Displayed equations can be delimited in several ways.
+The most concise markup is bracket the equation between
+\verb"\[" and \verb"\]" commands,
+which is equivalent to placing the formula in a {\tt displaymath}
+environment. These markup commands will produce
+{\sl unnumbered} equations.
+
+Numbered equations can be typeset by typing the formula in
+an {\tt equation} environment.
+A series of related equations that need vertical alignment,
+e.g., a derivation where alignment is wanted on the equal sign (=),
+can be typeset in an {\tt eqnarray} environment.
+
+While it is possible for authors to assign their own equation numbers,
+it is easier to let \LaTeX\ number them automatically.
+By default, \LaTeX\ will number equations sequentially from the
+beginning of the paper to the end.
+
+It is sometimes appropriate for equation numbering sequences
+to carry through sections of the paper only.
+Equations can be numbered ({\it sec-eqn}) by placing the command
+\verb"\mathwithsecnums" in the preamble of the document.
+
+\subsection{Tables}
+
+Tables are notoriously difficult to compose,
+and great care and patience are usually required
+before tabular information can be typeset satisfactorily.
+Tables should be placed in a separate {\tt table} environments,
+i.e., the tabular material must be enclosed within
+\verb"\begin{table}" and \verb"\end{table}" commands.
+Tables should have a title or caption and the correct
+number of descriptive column headings.
+A single horizontal rule should be set after the column headings
+with the \verb"\tableline" command.
+Do not insert any other horizontal or vertical
+lines in the body of the table.
+
+Notes in tables should be marked by
+\verb"\tablenotemark";
+corresponding text should appear in a
+\verb"\tablenotetext" command.
+
+\subsection{Cross-referencing}
+
+Cross-referencing equations, tables, and figures
+in text depends upon the use of ``tags'', which
+are defined by the user. The \verb"\label" command is used
+to define cross-reference tags for \LaTeX; \verb"\ref" is used to
+refer to them. Tags are simply text strings that
+serve to label equations, tables, and figures, so that
+they may be referred to symbolically in the text.
+References to page numbers should {\sl not} be made.
+
+\LaTeX\ keeps track of autonumbered counters and cross-reference
+information by maintaining an auxiliary file in the same working
+directory as the source file. The auxiliary file will have an
+extension of {\tt .aux}. This file should not be deleted, since
+subsequent \LaTeX\ processing uses the auxiliary data to resolve
+references, etc.
+
+The auxiliary file mechanism makes it necessary to run \LaTeX\
+on a given source file more than once to
+ensure that the cross-reference information has been properly resolved.
+This is most evident when changes are made that affect the number
+or the placement of equations, tables, and the like.
+\LaTeX\ will typically issue a warning message that advises
+the user to ``rerun to get cross-references right'',
+in which case, run \LaTeX\ again.
+If the error message appears after two successive \LaTeX\ runs,
+it is likely that a reference has been made to an undefined label.
+
+\subsection{Alternate style options}
+
+Editors prefer a large typeface with
+adequate space between typed lines for technical editing marks and
+wide margins for editor and author comments.
+The use of the {\tt aasms} substyle will produce
+double-spaced, full-width output by default.
+
+Authors may prefer a denser form of output for distribution
+to colleagues who are primarily interested in reading the paper, as
+opposed to copy editing it. The \verb"\tightenlines" command
+can be inserted in the document preamble when the {\tt aasms}
+substyle is used; its effect is to reduce
+the vertical spacing in the text.
+
+For institutional purposes, it may be preferable for preprints
+to be set in two columns, have running heads, etc.
+The {\tt aaspp} substyle may be used instead to produce
+two-column pages.
+
+\section{Command descriptions}
+
+This section describes all the commands in the WGAS \LaTeX\ macro
+package that an author might enter in a manuscript (or preprint).
+In the interest of completeness, all the structural markup that
+is needed to identify components is discussed, including those
+commands that are standard \LaTeX\ instructions.
+The commands will be described in roughly the same order as they
+would appear in a compuscript.
+The reader will probably find it helpful to examine the
+sample papers (\verb"sample1.tex" and \verb"sample2.tex") as well.
+
+\subsection*{Preamble}
+
+Most documents processed with a formatter have a collection of
+commands at the beginning of the file that establish settings
+for global parameters; this initialization section is sometimes
+called the {\sl preamble}. In \LaTeX\ compuscripts, the
+preamble is that portion of the file before the
+\verb"\begin{document}" command.
+
+The first piece of markup in the compuscript must declare the
+overall style of the document.
+\begin{quote}
+\verb"\documentstyle[12pt,aasms]{article}"
+\end{quote}
+The \verb"\documentstyle" command must appear first in any
+\LaTeX\ file, and this one specifies the main style to be
+the \LaTeX\ {\tt article} style using twelve point fonts,
+with modifications and additions for the {\tt aasms} substyle.
+It is preferable to use fonts at twelve points to prevent
+illegibility due to exceedingly long lines
+(too many characters on a line make it hard to read).
+The {\tt aasms} substyle will issue a warning message
+if the font size is smaller than twelve points; the file will
+still be processed.
+
+Tightening the vertical spacing
+in the text results in output that is more attractive for distribution
+to colleagues who are primarily interested in reading the paper, as
+opposed to copy editing it. Authors may include~a
+\begin{quote}
+\verb"\tightenlines"
+\end{quote}
+declaration in the preamble to direct \LaTeX\ to produce
+a somewhat denser manuscript.
+If the authors prefer not to insert this markup directly,
+the same effect can be achieved with the \verb"tighten"
+document substyle.
+\begin{quote}
+\verb"\documentstyle[aasms,tighten]{article}"
+\end{quote}
+
+Double-spaced output for referees and
+copy editors is the main objective of this style, hence
+the double-spacing occurs by default.
+Neither the \verb"\tightenlines" command nor the \verb"tighten"
+substyle should be used for manuscripts
+submitted to the editorial office for scientific review.
+
+\subsubsection*{Two-column format}
+
+We acknowledge that people would probably be happier with this macro package
+if they could produce two-column pages that look like the {\it Ap.J}\null.
+However, that is not the primary goal of this project at the present
+time; besides, this is easier said than done.
+
+Our solution is to provide format options within the preprint styles
+themselves so that output format can be changed.
+For instance, within the {\tt aasms} substyle is
+\verb"\tightenlines", which effectively turns off the double-spacing.
+The primary motivation behind this idea is to provide some
+definitions that permit institutions to distribute ``pretty'' preprints
+with this package. (Of course, we make the glaring assumption that we
+can determine what someone else will think is pretty.)
+
+The {\tt aaspp} substyle has the principle function of setting
+up two-column output.
+\begin{quote}
+\verb"\documentstyle[aaspp]{article}"
+\end{quote}
+Although it is quite obvious, it is important to remember
+that text lines are considerably shorter when two of them are typeset
+side by side on a page. Long equations, wide tables and figures, and
+the like, may not typeset in this format without some adjustments.
+It is our opinion that great effort to adapt copy and markup for
+two-column pages may be counterproductive.
+Remember that the main
+goal of this package at this point is to produce ``correct'' draft
+(or referee) format pages;
+it is the responsibility of the editors and publishers to
+produce publication format papers for the journals.
+
+The {\tt aaspp} substyle does not
+impose a format for the article's front matter,
+although there is often merit in setting the title, author, abstract,
+and keyword material on a separate page at full text width.
+The author may supply the
+\verb"\twocolumn" command wherever desired.
+\begin{quote}
+\verb"\twocolumn"
+\end{quote}
+Note that the two-column format begins at the point \verb"\twocolumn"
+appears in the text, and if that point is before the front-matter,
+it will be typeset in two-column mode along with the rest of the paper.
+For purposes of producing ``pretty'' output, it is probably desirable
+to put this command after the abstract and keywords, just before the
+body of the paper.
+If \verb"\twocolumn" is not specified explicitly in {\tt aaspp}
+style documents, the introductory material of the paper will be set
+in one-column mode; the first \verb"\section" command (presumably
+demarcating the beginning of the main body of the article) will
+engage the two-column mode.
+
+\subsubsection*{Slug line data}
+
+Journal and article identification information is established by the
+editorial staff. The following macros could be used by personnel at the
+editorial office to record slug-line data and would be included
+in the manuscript preamble.
+\begin{quote}
+\verb"\received{RECEIPTDATE}"\\
+\verb"\accepted{ACCEPTDATE}"\\
+\verb"\journalid{VOL}{JOURNALDATE}"\\
+\verb"\articleid{STARTPAGE}{ENDPAGE}"
+\end{quote}
+For preprints and submitted manuscripts in draft/referee format, etc.,
+the slug-line information is irrelevant and in those kinds of style,
+the data are never used.
+There are no commands in these styles that typeset the information,
+hence there is no real reason to include slug-line markup in manuscripts.
+
+\subsection*{Starting the main body}
+
+None of the markup that appears in the preamble actually typesets
+anything; the preamble is only a control section.
+The author must include a
+\begin{quote}
+\verb"\begin{document}"
+\end{quote}
+command to identify the beginning of the main textual
+portion of the compuscript.
+
+\subsection*{Title, byline, abstract, etc.}
+
+Title and author identification are by way of standard \LaTeX\ commands
+\verb"\title" and \verb"\author", although the macros themselves are
+somewhat different.
+The information is typeset by these macros in this style, rather than
+simply being buffered for later use, as in standard \LaTeX.
+The authors' principal affiliation is specified with
+a separate macro \verb"\affil".
+Each \verb"\author" command
+should be followed by a corresponding \verb"\affil" (or address).
+\begin{quote}
+\verb"\title{LUCID TEXT}"\\
+\verb"\author{NAME(S)}"\\
+\verb"\affil{ADDRESS}"
+\end{quote}
+The \verb"\affil" command provides the only opportunity
+to give the author's full postal address,
+and that is what is anticipated for {\small ADDRESS}.
+The address can be broken over several lines by using the
+\LaTeX\ \verb"\\" command to indicate the line breaks.
+Usually, however, postal information will fit on one line.
+
+Authors often have affiliations in addition to their principal employer,
+and these are specified with the \verb"\altaffilmark"
+and \verb"\altaffiltext" commands.
+These behave like the \verb"\footnotemark"
+and \verb"\footnotetext" commands of \LaTeX.
+\verb"\altaffilmark" is appended to author's names in the \verb"\author"
+lists, and generates superscript identification numbers.
+The text for the individual alternate affiliations is generated by the
+\verb"\altaffiltext" command.
+\begin{quote}
+\verb"\altaffilmark{TAG NUMBER(S)}"\\
+\verb"\altaffiltext{NUMERICAL TAG}{TEXT}"
+\end{quote}
+It is up to the author to make sure that the \verb"\altaffilmark" numbers
+attached to authors' names correspond to the correct alternate affiliation,
+i.e., that {\small TAG NUMBER == NUMERICAL TAG} for
+corresponding {\small TEXT}.
+
+The typesetting performed by all of the title and byline commands
+is appropriate for the top of the first text page of the manuscript
+(as opposed to a title page).
+
+The paper abstract should be enclosed in an {\tt abstract} environment.
+\begin{quote}
+\verb"\begin{abstract}"\\
+{\it abstract text\/}\\
+\verb"\end{abstract}"
+\end{quote}
+
+The {\tt aasms} style will print a pair of horizontal rules before the
+abstract. These are present so that the editorial staff can enter the
+``received'' and ``accepted'' dates for the paper. The author should
+not include \verb"\received" and \verb"\accepted" commands in the
+manuscript, since these dates are not usually known at submission time.
+The {\tt aaspp} style does not print the rules or the dates.
+
+\subsubsection*{Keywords}
+
+Keywords, subject headings, etc., are accommodated
+as a single piece of text.
+\begin{quote}
+\verb"\keywords{TEXT}"
+\end{quote}
+The \verb"\keywords" command indents if necessary and supplies
+the proper leading text (``Keywords:'', ``Subject headings:'', etc.).
+The author should supply keywords delimited by commas.
+
+\subsection*{Sections}
+
+The \LaTeX\ {\tt article} environment supports three levels of
+sectioning. (Actually, it supports more, but these are the
+relevant ones.)
+\begin{quote}
+\verb"\section{HEADING}"\\[.5ex]
+\verb"\subsection{HEADING}"\\[.5ex]
+\verb"\subsubsection{HEADING}"
+\end{quote}
+Note that these commands delimit sections by marking the
+{\sl beginning\/} of each section;
+there are not separate commands to identify the {\sl ends}.
+
+In addition, WGAS compuscript styles support an
+\verb"\acknowledgments" section.
+\begin{quote}
+\verb"\acknowledgments"
+\end{quote}
+In the WGAS substyles, acknowledgments are set off from the
+concluding main body text simply by vertical space
+(no heading or type size change).
+For use in producing output for specific journals,
+this macro might generate text saying ``Acknowledg[e]ments''.
+
+\subsection*{Citations}
+
+Citations may be called out either explicitly by the author without
+any markup, or the \LaTeX\ \verb"\cite" command may be used.
+\begin{quote}
+\verb"\cite{TAG}"
+\end{quote}
+The {\small TAG} must correspond to a {\small TAG} given in
+a \verb"\bibitem" command in the {\tt thebibliography} environment
+(see below).
+
+\subsection*{Equations}
+
+Displayed equations can be typeset in many ways using the standard
+displayed math environments of \LaTeX;
+these three are probably of greatest use.
+\begin{quote}
+\verb"\begin{displaymath}"\\
+\verb"\end{displaymath}"\\[.5ex]
+\verb"\begin{equation}"\\
+\verb"\end{equation}"\\[.5ex]
+\verb"\begin{eqnarray}"\\
+\verb"\end{eqnarray}"
+\end{quote}
+The {\tt displaymath} environment will break out a single,
+unnumbered formula. The equation will appear the same if it
+is set in an {\tt equation} environment, and it will be
+autonumbered by \LaTeX.
+In order to set several formul\ae\ in which vertical alignment
+is required, use the {\tt eqnarray} environment.
+
+Sometimes it is appropriate to number equations by section,
+rather than sequentially through the whole paper.
+When this is required,
+\begin{quote}
+\verb"\mathwithsecnums"
+\end{quote}
+should be specified in the document preamble.
+As is the case with tightening the interline spacing
+(\verb"\tightenlines", above), authors need not insert
+the extra markup command in the text.
+The same effect can be achieved with the \verb"mathsec"
+document substyle.
+\begin{quote}
+\verb"\documentstyle[aasms,mathsec]{article}"
+\end{quote}
+
+\subsection*{Bibliography}
+
+Citation management can be complex, and systems have been
+developed to assist authors in preparing bibliographies.
+The program that manages references within the \TeX\ family
+is called BIB\TeX, and it is designed to work in conjunction
+with the citation and reference list capabilities of \LaTeX.
+
+References and citations can be handled in several ways with
+the WGAS macro package. It is possible to use the semantics
+of \LaTeX's {\tt thebibliography} environment,
+marking citations with \verb"\cite" and associating references
+with them via \verb"\bibitem". The \verb"\cite"-\verb"\bibitem"
+mechanism associates citations and references symbolically
+while maintaining proper citation syntax within the paper.
+The author must create the citation label for each reference
+in proper journal format in the \verb"\bibitem" command.
+\begin{quote}
+\verb"\begin{thebibliography}"\\
+\verb"\bibitem[LABEL]{TAG} \reference" {\it bibliographic data\/}\\
+\verb" ."\\
+\verb" ."\\
+\verb"\end{thebibliography}"
+\end{quote}
+where {\small LABEL} must adhere to journal standards, e.g., ``Abt 1986''.
+For the time being, there
+is no compelling reason to force an implementation based on BIB\TeX,
+although it should be possible to build reference lists with
+BIB\TeX\ if authors choose.
+(It is also possible to define a bibliographic style for BIB\TeX\ so
+that citations and reference lists are formatted correctly automatically.)
+
+It is not necessary to use the {\tt thebibliography} environment.
+Many authors are comfortable with the standard
+process of entering citations in the proper format directly
+in the body of an article, and then organizing the reference
+list themselves.
+There is also a {\tt references} environment that simply sets off
+the list of references and adjusts spacing parameters.
+\begin{quote}
+\verb"\begin{references}"\\
+\verb"\reference" {\it bibliographic data\/}\\
+\verb" ."\\
+\verb" ."\\
+\verb"\end{references}"
+\end{quote}
+It is not possible to use \verb"\bibitem"s
+within the {\tt references} environment,
+nor will \verb"\cite" commands work properly in the main body.
+
+Observe that the {\it bibliographic data\/} supplied by the author must
+conform to the standards of the journal. We have elected not to burden
+authors with tedious \LaTeX\ commands which would require many curly braces
+to delimit the bibliographic fields because many of the journals we have
+targeted in this project have agreed to reduce typographic overhead (bolding,
+italicizing, etc.) in reference lists (Abt 1990);
+in any event, these macros can be expanded to whatever abbreviations are
+desired by the various editor(s).
+It is the responsibility of the author to get these fields in the proper
+order with the correct punctuation; the information will be typeset as is,
+i.e., in roman with no size or style changes.
+
+\subsubsection*{Abbreviations for journals}
+
+There are macros for many of the oft-referenced journals so that authors
+may use the \LaTeX\ names rather than having to look up a particular journal's
+specific abbreviation. In principle, all the journals should be using the
+same abbreviations, too, but it is fair to anticipate some changes in the
+specific abbreviations before a set is finally settled on. As long as
+these macros are kept up to date, authors need not be concerned about
+such editorial changes.
+
+\begin{center}
+\begin{tabular}{ll}
+\verb"\aj" & Astronomical Journal\\
+\verb"\araa" & Annual Review of Astronomy\\
+ & \hspace*{1em} and Astrophysics\\
+\verb"\apj" & Astrophysical Journal\\
+\verb"\apjl" & \rule[.5ex]{2em}{.4pt}, Letters to the Editor\\
+\verb"\apjs" & \rule[.5ex]{2em}{.4pt}, Supplement Series\\
+\verb"\applopt" & Applied Optics\\
+\verb"\apss" & Astrophysics and Space Science\\
+\verb"\aap" & Astronomy and Astrophysics\\
+\verb"\aaps" & \rule[.5ex]{2em}{.4pt}, Supplement Series\\
+\verb"\azh" & Astronomicheskii Zhurnal\\
+\verb"\baas" & Bulletin of the AAS\\
+\verb"\jrasc" & Journal of the RAS of Canada\\
+\verb"\memras" & Memoirs of the RAS\\
+\verb"\mnras" & Monthly Notices of the RAS\\
+\verb"\pra" & Physical Review A: General Physics\\
+\verb"\prb" & Physical Review B: Solid State\\
+\verb"\prc" & Physical Review C:\\
+\verb"\prd" & Physical Review D:\\
+\verb"\prl" & Physical Review Letters\\
+\verb"\pasp" & Publications of the ASP\\
+\verb"\pasj" & Publications of the ASJ\\
+\verb"\qjras" & Quarterly Journal of the RAS\\
+\verb"\skytel" & Sky and Telescope\\
+\verb"\sovast" & Soviet Astronomy\\
+\verb"\ssr" & Space Science Reviews\\
+\verb"\zap" & Zeitschrift f\"ur Astrophysik\\
+\end{tabular}
+\end{center}
+
+\subsection*{Tables and figures}
+
+Tables should appear in {\tt table} environments.
+\begin{quote}
+\verb"\begin{table}"\\
+\verb"\end{table}"
+\end{quote}
+There should be only one table per environment, and for many
+journals, only one table per page.
+The {\tt table} environment encloses not only the tabular
+material but also any title (caption) or footnote information
+associated with the table.
+
+Tabular information is typeset within \LaTeX's
+{\tt tabular} environment.
+\begin{quote}
+\verb"\begin{tabular}{"{\it cols\/}\verb"}"\\
+\verb"\end{tabular}"
+\end{quote}
+where {\it cols\/} specifies the formatting for each column.
+
+There is a \verb"\tableline" command for use in {\tt tabular}
+environments.
+\begin{quote}
+\verb"\tableline"
+\end{quote}
+This command produces the horizontal rule(s) between the column headings
+and the body of the table.
+Authors are discouraged from using any \verb"\hlines" themselves,
+and are typically forbidden from using vertical rules by editors.
+
+Titles or captions for tables are indicated with
+\begin{quote}
+\verb"\caption{TEXT}"
+\end{quote}
+Tables will be identified with arabic numerals, e.g., ``Table 2'';
+the identifying text, including the number, is generated automatically
+by \verb"\caption" within the \verb"table" environment.
+
+Footnotes for tables are usually identified by lower case letters
+rather than numbers.
+Marking and assigning associated text is achieved with
+the \verb"\tablenotemark" and \verb"\tablenotetext"
+commands, in which the note identifier is required
+(cf. \verb"\altaffilmark" and \verb"\altaffiltext").
+The \verb"\tablenotetext" {\sl must} be specified before
+the enclosing \verb"\end{table}", since the text of
+notes to tables are displayed by that command.
+\begin{quote}
+\verb"\tablenotemark{TAG LETTER(S)}"\\
+\verb"\tablenotetext{ALPHA TAG}{TEXT}"
+\end{quote}
+Note that {\small TAG LETTER == ALPHA TAG} for corresponding {\small TEXT}.
+It is the responsibility of the author to get the correspondence correct.
+
+The table footnotes are coupled to the table in which they occur, rather
+than being associated with a particular page, and they are printed with
+the table (relatively close to the caption) instead of appearing at the
+extreme bottom of the page. This is done to ensure that the notes wind
+up on the same page as the table, since tables are floats and can migrate
+from one page to another.
+
+\subsubsection*{Figures}
+
+At the present time, there is no universal way to include
+non-textual data in compuscripts, even if they are graphical
+images produced digitally. This situation will surely change,
+but it is not addressed by this version of the WGAS macro package.
+
+Figures must still be submitted with manuscripts in the usual
+way, and only the figure captions need to be generated with the
+text of the paper. They can be typeset in the traditional way
+without using any markup, or they can be produced within an
+otherwise empty {\tt figure} environment.
+\begin{quote}
+\verb"\begin{figure}"\\
+\verb"\caption{TEXT}"\\
+\verb"\end{figure}"
+\end{quote}
+When the {\tt figure} environment is used, the figure identification,
+e.g., ``Figure 1'', is generated automatically by \verb"\caption".
+It is usually acceptable for several figure captions to appear
+on the same page.
+
+Footnotes are {\sl not} supported for figures.
+
+\subsection*{Miscellaneous}
+
+Here are some handy things people tend to work out for themselves anyway.
+Many of the definitions come from the {\it A\&A\/} package (Springer 1989);
+some are contributions from individuals.
+You can go berserk making these up,
+especially when you start getting into the composite ones. We have
+tried to select a tractable number that were useful, and somewhat
+difficult to get right because fussy kerning or some such is required.
+
+\begin{center}
+\begin{tabular}{ll@{\hspace*{3em}}ll}
+\verb"\deg" & \deg &
+\verb"\sq" & \sq \\
+\verb"\sun" & \sun &
+\verb"\earth" & \earth \\
+\verb"\arcmin" & \arcmin &
+\verb"\arcsec" & \arcsec \\
+\verb"\fd" & \fd &
+\verb"\fh" & \fh \\
+\verb"\fm" & \fm &
+\verb"\fs" & \fs \\
+\verb"\fdg" & \fdg &
+\verb"\farcm" & \farcm \\
+\verb"\farcs" & \farcs &
+\verb"\fp" & \fp \\
+\verb"\micron" & \micron & \\[.8ex]
+\verb"\onehalf" & \onehalf &
+\verb"\ubvr" & \ubvr \\
+\verb"\onethird" & \onethird &
+\verb"\ub" & \ub \\
+\verb"\twothirds" & \twothirds &
+\verb"\bv" & \bv \\
+\verb"\onequarter" & \onequarter &
+\verb"\vr" & \vr \\
+\verb"\threequarters" & \threequarters &
+\verb"\ur" & \ur \\[.8ex]
+\verb"$\la$" & $\la$ &
+\verb"$\ga$" & $\ga$ \\
+\end{tabular}
+\end{center}
+Most of these commands can be used in running text as well as when
+setting mathematical expressions.
+\verb"\la" and \verb"\ga" can only be used in math mode,
+which is sensible since they are relations.
+It is possible to use \verb"\earth" and \verb"\sun" as subscripts,
+e.g., \verb"$1.4 M_{\sun}$" yields $1.4 M_{\sun}$.
+
+\subsection*{Concluding the file}
+
+The last thing in a \LaTeX\ file should be the
+\begin{quote}
+\verb"\end{document}"
+\end{quote}
+command, which appears after all the back matter of the paper.
+This command directs \LaTeX\ to perform assorted termination
+activities and finish processing.
+
+\section{Additional documentation}
+
+The preceding detailed explanation of the markup commands in this
+package has certain merit, but many authors will prefer to examine
+the sample papers that are included with the style files.
+The purely instructional examples are named \verb"sample1.tex"
+and \verb"sample2.tex". The file \verb"sample1.tex" is a paper prepared
+with the WGAS macros utilizing a {\sl minimal\/} amount of markup.
+A more ``complete'' paper requiring nearly all of the capabilities
+of the package is provided as \verb"sample2.tex";
+this file is annotated with comments that describe
+the purpose of most of the markup.
+
+We have also included in the distribution the source files for our
+AAS posters, marked up as they would be for submission;
+they are called \verb"paper1.tex" and \verb"paper2.tex".
+This user guide (\verb"manual.tex")
+is also marked up with the WGAS macro package,
+although it is not exemplary as a scientific paper.
+
+A number of the markup commands described in the preceding
+sections are standard \LaTeX\ macros, and the reader who is
+unfamiliar with their syntax is referred to the \LaTeX\
+manual (Lamport 1985) for details. A cribsheet listing all
+the \LaTeX\ commands (and some pertinent plain \TeX\ commands)
+with short descriptions of each is published by the \TeX\ Users
+Group (Botway and Biemesderfer 1989).
+
+Authors who wish to know the ins and outs of \TeX\ itself
+should read the {\it\TeX book} (Knuth 1984), probably more than once.
+There is a good deal of information about typography in general
+in this source. Many details of mathematical typography are
+discussed in a book by Swanson (1971).
+
+The goals and objectives of this project have changed somewhat
+since we first wrote on the this subject
+(Biemesderfer and Hanisch 1989).
+A discussion of some of the issues surrounding standardized
+markup for compuscripts has been presented elsewhere
+(Hanisch and Biemesderfer 1990).
+
+\begin{references}
+\reference Abt, H. 1990, \apj, 357, 1 (editorial)
+\reference Biemesderfer, C. and Hanisch R. 1989, \baas, 21, 780
+\reference Botway, L. and Biemesderfer, C. 1989,
+ {\it \LaTeX\ Command Summary}, Providence: \TeX\ Users Group
+\reference Hanisch, R. and Biemesderfer, C. 1990, \baas, 22, 829
+\reference Knuth, D. 1984, {\it The \TeX book}, Reading, MA: Addison-Wesley
+\reference Lamport, L. 1985,
+ {\it \LaTeX: A Document Preparation System\/}, Reading, MA: Addison-Wesley
+\reference Springer-Verlag. 1989,
+ {\it Springer-Verlag \TeX\ AA macro package 1989},
+ Springer: Heidelberg
+\reference Springer-Verlag. 1990,
+ {\it Springer-Verlag \LaTeX\ AA macro package 1990},
+ Springer: Heidelberg
+\reference Swanson, E. 1971, {\it Mathematics Into Type}
+\end{references}
+
+\makeatletter
+\wgas@pageid
+\makeatother
+
+\end{document}
diff --git a/obsolete/macros/latex209/contrib/aasmacros/mathsec.sty b/obsolete/macros/latex209/contrib/aasmacros/mathsec.sty
new file mode 100644
index 0000000000..e526ea517a
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aasmacros/mathsec.sty
@@ -0,0 +1,16 @@
+% MATHSEC.STY -- AAS WGAS substyle definition for equations numbered
+% according to section number.
+
+% This is the least intrusive way to implement a substyle layered on top
+% the standard LaTeX styles: by creating a foo.sty style that is read when
+% the specifies the document substyle foo. This file is read in when
+%
+% \documentstyle[12pt,aasms,mathsec]{article}
+%
+% is specified by the author.
+
+\mathwithsecnums
+
+% That's all this files does. It would be more efficient to have "mathsec"
+% declared as an internal substyle, but that requires modifications in the
+% main LaTeX article.sty file.
diff --git a/obsolete/macros/latex209/contrib/aasmacros/paper1.tex b/obsolete/macros/latex209/contrib/aasmacros/paper1.tex
new file mode 100644
index 0000000000..3d296bcdd7
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aasmacros/paper1.tex
@@ -0,0 +1,279 @@
+% PAPER1.TEX -- Original proposal, presented as a display paper at
+% June 1989 AAS meeting in Ann Arbor.
+
+\documentstyle[12pt,aasms,tighten]{article}
+\nofiles
+
+\pagestyle{empty}
+\begin{document}
+
+% title page -----------------------------------------------------------------
+\null \vspace*{1.5in}
+
+\hbox to\textwidth{\hfill
+\begin{minipage}{5in}
+\begin{center}
+\large\bf \TeX\ and \LaTeX\ Macro Definition Files\\
+for Astronomical Publications\\[4ex]
+\normalsize C. D. Biemesderfer$^1$\\[1ex] and\\[1ex]
+ R. J. Hanisch$^2$
+\end{center}
+\end{minipage}
+\hfill}
+
+\vfill
+
+\begin{quote}
+\renewcommand{\labelenumi}{\arabic{enumi})}
+\begin{enumerate}
+\item National Radio Astronomy Observatory, Tucson, AZ 85721.
+NRAO is operated by Associated Universities, Inc.\ under cooperative
+agreement with the National Science Foundation.
+
+\item Space Telescope Science Institute, Baltimore, MD 21218.
+STScI is operated for NASA by Associated Universities for
+Research in Astronomy, Inc.
+\end{enumerate}
+\end{quote}
+
+\newpage
+% ----------------------------------------------------------------------------
+
+\title{\TeX\ and \LaTeX\ Macro Definition Files\\
+ for Astronomical Publications}
+\author{C. D. Biemesderfer (NRAO), R. J. Hanisch (STScI)}
+
+\vspace{1.5ex}
+
+As astronomers have become skilled in the use of the typesetting
+programs \TeX\ and \LaTeX, their use in preparing articles for
+astronomical journals has steadily increased.
+We believe that the community, including the journal publishers,
+can benefit significantly from the adoption of \TeX\ for production
+purposes as well as for the creation of authors' drafts.
+We have begun the development of macro definition files for the
+Chicago University Press journals ({\it Ap.J.\/} and {\it A.J.\/}),
+and have developed templates which guide authors in the preparation of
+their manuscripts.
+
+We wish to illustrate several points with our display:
+\begin{itemize}
+ \item High-quality output can be produced, even with a 300 dot per inch
+ laser printer.
+ \item There is merit in the use of a ``general'' set of macros,
+ usable by several authors, in order to produce identical
+ {\sl looking} results (identical form vs. variable
+ content).
+ \item We demonstrate the power of the typesetting system itself,
+ and the versatility possible with layers of macros,
+ with ``draft''
+ and ``reprint'' versions of the same paper produced
+ {\sl with the same markup} (variable form vs.
+ identical content).
+\end{itemize}
+
+%\pagebreak
+\subsection*{Why use \TeX~?}
+
+Look around. How many presentations and preprints that were prepared
+with \TeX\ have you seen at this meeting~?
+The most important reason for selecting these programs is
+{\sl familiarity}.
+Another consideration is that the whole \TeX\ system is in the public
+domain, so there is very little encumbrance of cost levied on the
+community.
+The system has been ported to a significant fraction of available
+computing machinery and printers, so the likelihood of requiring the
+acquisition of new hardware is very small.
+
+In addition, \TeX\ and \LaTeX\ do typesetting {\sl well}.
+They are capable of producing printed manuscripts that are practically
+indistinguishable from the printed pages of the various journals.
+Finally, \TeX\ has a well-developed macro facility.
+Through the use of standard macro files, it is possible for authors
+to send their manuscripts electronically to the journal editorial offices
+and for the journals to reduce costs by directly typesetting the submissions.
+Given the widening of the research computing network, it is easy to
+imagine that publishers need not produce final-copy reprints for
+authors to distribute; the bulk of reprint requests could be made
+{\sl and filled} via electronic mail.
+
+%\pagebreak
+\subsection*{Why use macros~?}
+
+The most important reason to use identical markup is to guarantee uniformity
+in the typeset results of manuscripts written by different authors.
+A secondary benefit is that by changing the {\sl definitions}
+of the markup macros, an author (or publisher) can produce articles with
+entirely different form, without modifying the source document.
+This means that an author can create an ``editorial'' copy of a
+paper suitable for review by a referee or a copy editor, and the
+journal publisher can produce ``proof'' pages (or the author can produce
+his own reprints) with the same markup.
+
+The accompanying figures show the original source files and typeset results of
+a trial article produced in ``draft'' and ``final'' forms.
+
+With the use of \LaTeX\ style files, the macro definitions can also be
+customized for the style differences between the different journals.
+Although we encourage the standardization efforts now in progress, if
+differences were to remain in the layout, font styles, references, etc.,
+between different journals, these could be accommodated in suitably
+tailored style files. Again, the source text would be identical except
+for the name of the style file.
+
+%\pagebreak
+\subsection*{Macro names}
+
+Proposing a ``standard'' for a community at large is always a
+contentious undertaking, and there will undoubtedly be differences
+of opinion about the nomenclature of the markup and the semantics
+of the ``little language'' that comprises the definitions.
+We have adopted the naming conventions and to a major extent the
+semantics of \LaTeX, primarily because the control sequence names
+of \LaTeX\ reflect the canonical terminology of typography and
+copy editing. \LaTeX\ is also widely used, and many scientists
+are likely to be familiar with the command names.
+
+We list in what follows the major features of the
+experimental {\it apj\/} style definition.
+
+\begin{itemize}
+\item Journal and article identification information is established by the
+editorial staff. The following macros can (and probably should) be included
+in the manuscript preamble.
+\begin{quote}
+\begin{verbatim}
+\journalid{VOL}{JOURNALDATE}
+\articleid{STARTPAGE}{ENDPAGE}
+\received{RECEIPTDATE}
+\accepted{ACCEPTDATE}
+\end{verbatim}
+\end{quote}
+The copyright line found at the beginning of each article is typeset using
+the journal and article identification information set by the
+\verb"\journalid" and \verb"\articleid" commands.
+
+\item Title and author identification is by way of standard \LaTeX\ commands
+\verb"\title" and \verb"\author".
+\begin{quote}
+\begin{verbatim}
+\title{TITLE}
+\author{AUTHOR}
+\end{verbatim}
+\end{quote}
+Authors' principal affiliation(s) is specified with a separate macro
+\verb"\affiliation". Authors often have
+affiliations above and beyond their main employer, and these are specified
+with the \verb"\altaffil" and \verb"\altaffiltext" commands.
+\begin{quote}
+\begin{verbatim}
+\affiliation{PLACE}
+\altaffil{IDNUMBER}
+\altaffiltext{IDNUMBER}{PLACE}
+\end{verbatim}
+\end{quote}
+
+\item The paper abstract is enclosed in a grouping construct as per the
+\LaTeX\ abstract environment.
+There is also a subject headings environment that permits main headings
+with subheadings, identified with \verb"\heading" and \verb"\subheading"
+macros, respectively.
+\begin{quote}
+\begin{verbatim}
+\begin{abstract}
+\end{abstract}
+
+\begin{subjects}
+\heading{MAINTOPIC}
+\subheading{SUBTOPIC}
+\end{subjects}
+\end{verbatim}
+\end{quote}
+
+\item We permit sections, subsections, and subsubsections
+as described by the Manual of Style, and using the same syntax as their
+paradigms in \LaTeX.
+\begin{quote}
+\begin{verbatim}
+\section{NAME}
+\subsection{NAME}
+\subsubsection{NAME}
+\end{verbatim}
+\end{quote}
+
+\item There is an \verb"\acknowledgements" command to be used before any
+final paragraphs that may contain expressions of gratitude.
+\begin{quote}
+\begin{verbatim}
+\acknowledgements
+\end{verbatim}
+\end{quote}
+
+\item At the present time, the references environment is not implemented
+with BIB\TeX, although we borrow syntactic and semantic ideas
+from that system (which, in turn, borrows from Scribe and {\it refer\/}).
+We have simply defined the several macros we needed for the sample
+papers, using the entry types described in the BIB\TeX\ documentation.
+The definitions make use of the required and optional fields as per
+BIB\TeX\ as well, and the required arguments are in the same order as
+they are mentioned in Appendix B of the \LaTeX\ manual. We have added
+the optional arguments where necessary in order to make correct {\it Ap.J.\/}
+references, although the specific syntax may not be desirable for
+authors submitting to many journals; something more general should
+be devised, or else BIB\TeX\ should be properly used.
+\begin{quote}\small
+\begin{verbatim}
+\begin{references}
+\article{AUTHOR}{TITLE}{JOURNAL}{YEAR}{VOL}{PAGE}
+\book{AUTHOR}{TITLE}{PUBLISHER}{YEAR}
+\inbook{AUTHOR}{TITLE}{CHAP/PAGE}{ED/PUB}{YEAR}
+\misc{AUTHOR}{YEAR}{NOTE}
+\end{references}
+\end{verbatim}
+\end{quote}
+
+\item There is an authors' addresses environment.
+The syntax here is experimental.
+\begin{quote}
+\begin{verbatim}
+\begin{authoraddresses}
+\authoraddress{NAME}{ADDRESS}
+\end{authoraddresses}
+\end{verbatim}
+\end{quote}
+where address components should be delimited by \verb"\\".
+For {\it Ap.J.\/} main journal addresses,
+\verb"\\" doesn't mean a line break; it is redefined to
+be simply a comma. In preprints, though, people frequently set up
+their addresses in a standard ``envelope'' form, hence that choice for
+the delimiter.
+\end{itemize}
+
+We also suggest that a number of commonplace abbreviations
+be specified as macros, particularly for the names of journals
+used in citations. The reason for this is because different
+journals do not use the same abbreviations, and if the ideas
+proposed in this paper catch on with several publishers, we can
+use the same citation macros without having to look up in the
+corresponding Manual of Style how to abbreviate
+{\it Astronomy and Astrophysics\/}.
+
+%\pagebreak
+\subsection*{Status of the macros}
+
+The macro package is in a very preliminary form, with many known
+shortcomings and omissions;
+the purpose of this paper is to serve as a trial balloon for the
+concepts we are proposing.
+
+There are several outstanding problems, most notably a generalized
+way of going in and out of ``two-column'' mode. Macros for setting
+tabular material and for inserting space for figures have not been
+developed (although they will not be terribly difficult).
+The most flexible way to handle embedded graphical material is for
+the graphics to be submitted in electronic form also, in some
+standard metacode such as PostScript, but this is a separate
+issue.
+
+\end{document}
diff --git a/obsolete/macros/latex209/contrib/aasmacros/paper2.tex b/obsolete/macros/latex209/contrib/aasmacros/paper2.tex
new file mode 100644
index 0000000000..9b292d8494
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aasmacros/paper2.tex
@@ -0,0 +1,267 @@
+% PAPER2.TEX -- Overview of how TeX is used by several journal publishers
+% for production purposes. Discussion of various desiderata for markup.
+
+\documentstyle[aaspp]{article}
+\nofiles
+
+\hyphenation{ma-nu-script ma-nu-scripts} % curious...
+\hyphenation{pre-load-ed turn-around Spring-er}
+
+\pagestyle{empty}
+
+\begin{document}
+\twocolumn
+
+\title{A Comparison of\\ \TeX-based Production Methods\\
+for Selected Physics and Astronomy Journals}
+
+\author{\sl R. J. Hanisch, STScI\\[.5ex]
+C. D. Biemesderfer, NOAO}
+
+\vspace{.25in}
+
+Many astronomers are familiar with the \TeX\ computer typesetting system.
+A considerable number of them now use an editor and \TeX\ in tandem as
+a word processor, composing many diverse forms such as letters, memoranda,
+recipes, party invitations, and even books and journal articles.
+Most of this material is distributed informally (via laser printer and
+photocopier), although some commercial firms have begun to produce
+technical volumes using \TeX\ as the primary typesetting engine.
+
+In this paper, we review the production cycles of three journals with
+which astronomers are likely to be acquainted. These are the
+{\it Physical Review},
+{\it Astronomy and Astrophysics}, and the
+{\it Australian Journal of Physics}.
+
+%\newpage
+\subsection*{Physical Review}
+
+The {\it Physical Review\/} is published by the
+American Physical Society (APS).
+The APS Publications Liaison Office has developed a macro package called
+REV\TeX\ which is designed to work with standard \LaTeX.
+REV\TeX\ is distributed to interested authors along with sample
+papers and a user guide (Sutherland 1989), and authors are encouraged
+to write their articles for the
+{\it Physical Review\/} with REV\TeX\ markup.
+The objective of REV\TeX\ is to avoid the costs and time delays of
+keyboard entry, as well as to provide authors with their own means
+of producing markup and preprint versions of their manuscripts.
+
+REV\TeX\ has a {\sl preprint} format (a \LaTeX\ substyle) that can
+be used for initial review; authors submit {\sl manuscripts}
+(paper copies) of their articles to the editorial office,
+and the paper is refereed in the usual fashion.
+At some stage in the review process, the REV\TeX\ source file (called
+a {\sl compuscript}) will be requested from the author.
+Compuscripts may be submitted via floppy diskette, magnetic tape,
+or Bitnet. After a paper has been accepted, the author may elect
+to have the compuscript returned so that the author may make subsequent
+corrections, or changes can be made by staff at the production site.
+
+The publishing offices of the AIP, which produces the
+{\it Physical Review} for APS, do not actually use
+\TeX\ for their typesetting.
+Rather, they use a turn-key computer typesetting system called Xyvision.
+Xyvision has its own markup language, and the production staff
+at AIP has been trained in its use.
+However, Xyvision provides the tools to develop
+translators between various typesetting markup languages and the
+Xyvision internal system. The AIP has already implemented a translation
+between WordPerfect and Xyvision, and this summer will be developing
+a translation facility between \TeX\ (i.e., the REV\TeX\ macro package)
+and Xyvision. Other translators, such as to the industry-standard
+SGML, are likely to be developed as well.
+
+%\newpage
+\subsection*{Astronomy and Astrophysics}
+
+{\it Astronomy and Astrophysics\/} is published by Springer-Verlag;
+the {\it Supplement\/} is published by Les Editions de Physique.
+Springer has a macro package for use with plain \TeX\ which is
+distributed to authors (Springer 1989).
+Springer's purposes in using \TeX\ in their production cycle are
+to increase the total number of pages produced per year, and to afford
+authors quicker turnaround, resulting in a timlier publication schedule.
+
+Editorial procedures are similar to those of the {\it Physical Review}.
+Manuscripts are submitted to the {\it A\&A} editorial offices, and
+the electronic copy of the paper (on floppy diskette) is requested
+after acceptance.
+Springer has integrated their production environment in a way
+so that journal pages can be typeset by \TeX\ and produced on
+Springer's phototypesetter. In general, this system functions well,
+and at least some authors find the publication process
+(once the paper has been accepted)
+to be less time-consuming. % Andre 1990, private comm.
+
+There are shortcomings in the procedure as a whole, however.
+Authors who choose to process their own papers {\sl for publication\/}
+with the {\it A\&A\/} macros are supposed to submit a DVI file
+in addition to the \TeX\ source.
+The \TeX$\rightarrow$DVI processing is done with
+preloaded fonts for the typesetter used by Springer, % a Mergenthaler?
+{\sl not} the Computer Modern fonts. The configuration that must be
+arranged (on each author's host computer) for this processing require
+intervention of a fairly knowledgeable \TeX pert, and also possibly
+a system administrator.
+
+It is not clear that there is any real benefit to Springer in using
+this approach, as opposed to simply processing the \TeX\ source
+(which Springer will do, if an author is unable to do so)
+at the production site.
+We feel this is a peculiar requirement that is unnecessarily
+burdensome to authors.
+More fundamentally, standardization at the level of DVI files
+is inappropriate for widespread document interchange.
+
+An additional criticism of Springer's macro package is that
+the markup that was devised is unique, drawing only tangentially
+on existing markup command conventions. In other words,
+the {\it A\&A\/} package is a completely new markup language.
+It is desirable to use standard environments and commands
+to the greatest extent possible in order to both simplify
+the process of text preparation for authors and to ensure
+that a minimum amount of reworking of the text
+is required by the editorial offices.
+It is unfortunate that \LaTeX\ was not used as a starting point instead;
+because \LaTeX\ has a higher
+level view of a document than \TeX, it provides a more suitable
+framework in which to develop a standard markup style.
+
+%\newpage
+\subsection*{Australian Journal of Physics}
+
+The {\it Australian Journal of Physics\/} is published by the
+Commonwealth Scientific and Industrial Research Organisation.
+The CSIRO has been experimenting with \TeX\ for production
+of a number of its journals since 1985 and in 1989 began
+publication of the {\it Aust.~J.~Phys.} with a specialized
+version of \TeX\ running on MacIntoshes.
+
+The CSIRO system, called AJSR\TeX\ (Clarke 1989),
+was developed by the System Design Unit of CSIRO
+specifically for the production of the Australian Journals of
+Scientific Research (AJSR).
+AJSR\TeX\ is designed for use by the staff of the
+publishing office, particularly technical typists,
+rather than as a package distributed to authors.
+The managing editor accepts plain \TeX, AMS\TeX, and
+\LaTeX\ submissions on floppy diskette, but each is translated into
+the AJSR\TeX\ system and subsequently recomposed by a staff typographer.
+The production environment consists of the AJSR\TeX\ package layered
+on \TeX tures (a commercial \TeX\ implementation for the MacIntosh),
+in conjunction with a commercial text editing product called QUED/M.
+
+Submission procedures are the same those described above.
+Traditional hardcopy manuscripts are submitted initially for
+refereeing and editorial revision; a diskette containing
+the \TeX\ compuscript is requested after the article
+has been accepted for publication.
+While the acceptance of author submissions doesn't necessarily
+save production time at the AJSR office (Clarke 1990),
+a reduction in typesetting costs and a shortening of the
+publication cycle has already been realized (Robertson 1989).
+
+% It is interesting to realize that CSIRO's decision to use TeX was
+% entirely motivated by commercial publishing concerns. The reasoning
+% that led to this decision is described to some extent in:
+%
+% Clarke, T. 1988, Australian Mac World.
+%
+% The move had as much (if not more) to do with a desire to use the
+% MacIntosh, but they were clearly enough impressed by the results of
+% their previous experiments with TeX to invest in the in-house version.
+%
+% An article entitled "How and Why a Trade Typesetter Chose \TeX" in the
+% 1988 TUG Conference Proceedings describes the course followed by another
+% Melbourne-based organisation (Trade Graphics Pty. Ltd.) as they migrated
+% from Compugraphic hardware. They run TeX on a Compaq 386 and continue
+% to send output to the CG8400.
+%
+% Tonkin, P. and Warman, A. 1988, {\it TUG Conference Proceedings},
+% AMS, Providence, p. 61
+
+There are a number of interesting things to note about CSIRO's operation.
+Most significant are the facts that \TeX\ is used to produce the
+{\sl entire} {\it Australian Journal of Physics\/},
+the production is carried out on very inexpensive equipment
+(three MacIntoshes and a 600 dpi laser printer), and
+the journal's appearance does not suffer. % In fact, it looks pretty good.
+It is clear that the production offices of the AJSR chose
+\TeX\ because it was a sound commercial publishing solution,
+basically equivalent to the AIP's decision to use Xyvision.
+
+Furthermore, there is a striking similarity between the APS' and AJSR's
+use of author submissions in their production operations.
+Both offices {\sl translate} the author's markup (some dialect of \TeX)
+into an internal representation (Xyvision's proprietary language on
+one hand, a different dialect of \TeX\ on the other).
+We discuss this further below.
+
+
+%\newpage
+\subsection*{Discussion}
+
+In recent years, the exchange of manuscripts by electronic means has
+become more prevalent.
+We anticipate an increase in the use of electronic (computerized) methods
+for the production of commercially published material, including
+scholarly journals. % as indicated by our survey
+
+In order to shorten the time from submission of articles to publication
+and to decrease the costs of production, editors and publishers must
+be able to make direct use of author-prepared computerized manuscripts.
+However, for the usual cycles involved in review, acceptance, and
+editing of journal articles, a form that is readily manipulated by
+humans is desirable.
+ASCII text documents with embedded markup permits humans to read and edit
+while providing the tags necessary for a computer to process or translate
+the paper.
+
+A common {\sl form} for such markup facilitates the processing
+stages of the publishing operation.
+It is not important that the markup be identical in all cases,
+i.e., it is not necessary to declare a particular language or syntax
+as ``the standard''.
+What is essential is that the acceptable
+formats (markup languages) be sufficiently alike conceptually
+so that the translation or conversion between forms
+can be readily specified. % at the lexical level, not the grammatical.
+
+It is possible to make assertions about what properties a ``good'' markup
+language has for dealing with the documentation issues we are considering.
+Its principle attribute is that it {\sl identify the structure}
+of the document.
+Equally important is that certain relationships among components
+be enforced (e.g., it should not be permissible to place a running
+head in a section heading).
+Obviously, the markup should be ASCII strings.
+
+SGML is such a language; so, to a certain extent, is \LaTeX.
+As we have seen in the production of the {\it Physical Review\/} and
+the {\it Australian Journal of Physics\/}, \LaTeX\ markup can be
+translated into alternate formats suitable for commercial publications.
+As long as authors, editors, and publishers agree on good principles
+of structure, translations from one markup to another should
+be straightforward (Mamrak et al. 1987).
+The macros that we have developed on behalf of the AAS Working
+Group on Astronomical Software (Biemesderfer and Hanisch 1990)
+are intended as a working model for such principles.
+
+\begin{references}
+\reference Biemesderfer, C. D. and Hanisch, R. J. 1990, in publication.
+\reference Clarke, T. 1989, {\it ASJR\TeX\ User Manual}, CSIRO: Melbourne
+\reference Clarke, T. 1990, private communication
+\reference Mamrak, S. A., Kaelbing, M. J., Nicholas, C. K., and Share, M.
+ 1987, {\it CACM}, {\bf 30}, 408
+\reference Robertson, P. 1989, {\it Aust.J.Phys.}, {\bf 42}, 1
+\reference Springer-Verlag. 1989,
+ {\it Springer-Verlag \TeX\ AA macro package 1989},
+ Springer: Heidelberg
+\reference Sutherland, P. 1989, {\it Physical Review Input Guide for
+ \TeX\ Author-Prepared Compuscripts}, APS: New York
+\end{references}
+
+\end{document}
diff --git a/obsolete/macros/latex209/contrib/aasmacros/samp2tbl.tex b/obsolete/macros/latex209/contrib/aasmacros/samp2tbl.tex
new file mode 100644
index 0000000000..3446811f10
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aasmacros/samp2tbl.tex
@@ -0,0 +1,138 @@
+% TABLE1.TEX -- AASTeX sample table 1.
+
+\begin{planotable}{lrrrrcrrrrr}
+\tablewidth{0pc}
+\tablecaption{Literature Data for Program Stars}
+\tablehead{
+\colhead{Star} & \colhead{V} &
+\colhead{b$-$y} & \colhead{m$_1$} &
+\colhead{c$_1$} & \colhead{ref} &
+\colhead{T$_{\rm eff}$} & \colhead{log g} &
+\colhead{v$_{\rm turb}$} & \colhead{[Fe/H]} &
+\colhead{ref}}
+\startdata
+HD 97 & 9.7& 0.51& 0.15& 0.35& 2 & \nodata & \nodata & \nodata & $-1.50$ & 2 \nl
+& & & & & & 5015 & \nodata & \nodata & $-1.50$ & 10 \nl
+HD 2665 & 7.7& 0.54& 0.09& 0.34& 2 & \nodata & \nodata & \nodata & $-2.30$ & 2 \nl
+& & & & & & 5000 & 2.50 & 2.4 & $-1.99$ & 5 \nl
+& & & & & & 5120 & 3.00 & 2.0 & $-1.69$ & 7 \nl
+& & & & & & 4980 & \nodata & \nodata & $-2.05$ & 10 \nl
+HD 4306 & 9.0& 0.52& 0.05& 0.35& 20, 2& \nodata & \nodata & \nodata & $-2.70$ & 2 \nl
+& & & & & & 5000 & 1.75 & 2.0 & $-2.70$ & 13 \nl
+& & & & & & 5000 & 1.50 & 1.8 & $-2.65$ & 14 \nl
+& & & & & & 4950 & 2.10 & 2.0 & $-2.92$ & 8 \nl
+& & & & & & 5000 & 2.25 & 2.0 & $-2.83$ & 18 \nl
+& & & & & & \nodata & \nodata & \nodata & $-2.80$ & 21 \nl
+& & & & & & 4930 & \nodata & \nodata & $-2.45$ & 10 \nl
+HD 4906 & 8.8& 0.48& 0.22& 0.30& 20 & \nodata & \nodata & \nodata & \nodata & \nodata\nl
+HD 5426 & 9.6& 0.50& 0.08& 0.34& 2 & \nodata & \nodata & \nodata & $-2.30$ & 2 \nl
+HD 6755 & 7.7& 0.49& 0.12& 0.28& 20, 2& \nodata & \nodata & \nodata & $-1.70$ & 2 \nl
+& & & & & & 5200 & 2.50 & 2.4 & $-1.56$ & 5 \nl
+& & & & & & 5260 & 3.00 & 2.7 & $-1.67$ & 7 \nl
+& & & & & & \nodata & \nodata & \nodata & $-1.58$ & 21 \nl
+& & & & & & 5200 & \nodata & \nodata & $-1.80$ & 10 \nl
+HD 18907 & 5.9& 0.51& 0.23& 0.32& 20 & \nodata & \nodata & \nodata & \nodata & \nodata\nl
+HD 21581 & 8.7& 0.56& 0.14& 0.34& 2 & \nodata & \nodata & \nodata & $-1.80$ & 2 \nl
+& & & & & & 4750 & \nodata & \nodata & $-1.66$ & 10 \nl
+HD 24289 & 10.0& 0.39& 0.05& 0.29& 20 & \nodata & \nodata & \nodata & $-1.64$ & 21 \nl
+HD 24616 & 6.7& 0.51& 0.25& 0.32& 20 & \nodata & \nodata & \nodata & \nodata & \nodata\nl
+HD 44007 & 8.1& 0.56& 0.14& 0.35& 2 & \nodata & \nodata & \nodata & $-1.70$ & 2 \nl
+& & & & & & \nodata & \nodata & \nodata & $-1.70$ & 24 \nl
+HD 45282 & 8.0& 0.45& 0.11& 0.28& 20 & \nodata & \nodata & \nodata & $-1.51$ & 21 \nl
+HD 76932 & 5.8& 0.35& 0.12& 0.30& 20 & 5860 & 3.50 & \nodata & $-1.10$ & 22 \nl
+& & & & & & 5630 & 3.88 & 0.8 & $-1.01$ & 7 \nl
+& & & & & & 5810 & 3.50 & \nodata & $-1.12$ & 15 \nl
+HD 84937 & 8.3& 0.30& 0.06& 0.35& 20,11& 6200 & \nodata & \nodata & $-2.10$ & 4 \nl
+& & & & & & 6250 & \nodata & \nodata & $-2.18$ & 17 \nl
+& & & & & & 6216 & \nodata & \nodata & $-2.42$ & 11 \nl
+& & & & & & 6240 & \nodata & \nodata & $-2.13$ & 3 \nl
+& & & & & & \nodata & \nodata & \nodata & $-2.14$ & 21 \nl
+& & & & & & 6200 & 3.60 & 1.5 & $-2.43$ & 16 \nl
+& & & & & & 6250 & 4.00 & \nodata & $-2.10$ & 22 \nl
+HD 87140 & 9.0& 0.48& 0.12& 0.28& 20 & 5000 & 4.50 & 1.0 & $-1.41$ & 7 \nl
+& & & & & & \nodata & \nodata & \nodata & $-1.56$ & 21 \nl
+HD 88609 & 8.6& 0.68& 0.09& 0.54& 2 & \nodata & \nodata & \nodata & $-2.50$ & 2 \nl
+& & & & & & 4500 & 1.10 & 2.8 & $-2.77$ & 5 \nl
+& & & & & & 4500 & 0.80 & 3.2 & $-2.65$ & 14 \nl
+& & & & & & 4600 & \nodata & \nodata & $-2.75$ & 10 \tablebreak
+HD 94028 & 8.2& 0.34& 0.08& 0.25& 20 & 5795 & 4.00 & \nodata & $-1.70$ & 22 \nl
+& & & & & & 5860 & \nodata & \nodata & $-1.70$ & 4 \nl
+& & & & & & 5910 & 3.80 & \nodata & $-1.76$ & 15 \nl
+& & & & & & 5800 & \nodata & \nodata & $-1.67$ & 17 \nl
+& & & & & & 5902 & \nodata & \nodata & $-1.50$ & 11 \nl
+& & & & & & 5900 & \nodata & \nodata & $-1.57$ & 3 \nl
+& & & & & & \nodata & \nodata & \nodata & $-1.32$ & 21 \nl
+HD 97916 & 9.2& 0.29& 0.10& 0.41& 20 & 6125 & 4.00 & \nodata & $-1.10$ & 22 \nl
+& & & & & & 6160 & \nodata & \nodata & $-1.39$ & 3 \nl
+& & & & & & 6240 & 3.70 & \nodata & $-1.28$ & 15 \nl
+& & & & & & 5950 & \nodata & \nodata & $-1.50$ & 17 \nl
+& & & & & & 6204 & \nodata & \nodata & $-1.36$ & 11 \nl
+\cutinhead{This is a cut-in head.}
++26\deg2606& 9.7&0.34&0.05&0.28&20,11& 5980 & \nodata & \nodata &$<-2.20$ & 19 \nl
+& & & & & & 5950 & \nodata & \nodata & $-2.89$ & 24 \nl
++26\deg3578& 9.4&0.31&0.05&0.37&20,11& 5830 & \nodata & \nodata & $-2.60$ & 4 \nl
+& & & & & & 5800 & \nodata & \nodata & $-2.62$ & 17 \nl
+& & & & & & 6177 & \nodata & \nodata & $-2.51$ & 11 \nl
+& & & & & & 6000 & 3.25 & \nodata & $-2.20$ & 22 \nl
+& & & & & & 6140 & 3.50 & \nodata & $-2.57$ & 15 \tablebreak
++30\deg2611& 9.2&0.82&0.33&0.55& 2 & \nodata & \nodata & \nodata & $-1.70$ & 2 \nl
+& & & & & & 4400 & 1.80 & \nodata & $-1.70$ & 12 \nl
+& & & & & & 4400 & 0.90 & 1.7 & $-1.20$ & 14 \nl
+& & & & & & 4260 & \nodata & \nodata & $-1.55$ & 10 \nl
++37\deg1458& 8.9&0.44&0.07&0.22&20,11& 5296 & \nodata & \nodata & $-2.39$ & 11 \nl
+& & & & & & 5420 & \nodata & \nodata & $-2.43$ & 3 \nl
++58\deg1218&10.0&0.51&0.03&0.36& 2 & \nodata & \nodata & \nodata & $-2.80$ & 2 \nl
+& & & & & & 5000 & 1.10 & 2.2 & $-2.71$ & 14 \nl
+& & & & & & 5000 & 2.20 & 1.8 & $-2.46$ & 5 \nl
+& & & & & & 4980 & \nodata & \nodata & $-2.55$ & 10 \nl
++72\deg0094&10.2&0.31&0.09&0.26&12 & 6160 & \nodata & \nodata & $-1.80$ & 19 \nl
+\sidehead{Side head:}
+G5--36 & 10.8& 0.40& 0.07& 0.28& 20 & \nodata & \nodata & \nodata & $-1.19$ & 21 \nl
+G18--54 & 10.7& 0.37& 0.08& 0.28& 20 & \nodata & \nodata & \nodata & $-1.34$ & 21 \nl
+G20--08 & 9.9& 0.36& 0.05& 0.25& 20,11& 5849 & \nodata & \nodata & $-2.59$ & 11 \nl
+& & & & & & \nodata & \nodata & \nodata & $-2.03$ & 21 \nl
+G20--15 & 10.6& 0.45& 0.03& 0.27& 20,11& 5657 & \nodata & \nodata & $-2.00$ & 11 \nl
+& & & & & & 6020 & \nodata & \nodata & $-1.56$ & 3 \nl
+& & & & & & \nodata & \nodata & \nodata & $-1.58$ & 21 \nl
+G21--22 & 10.7& 0.38& 0.07& 0.27& 20,11& \nodata & \nodata & \nodata & $-1.23$ & 21 \tablebreak
+G24--03 & 10.5& 0.36& 0.06& 0.27& 20,11& 5866 & \nodata & \nodata & $-1.78$ & 11 \nl
+& & & & & & \nodata & \nodata & \nodata & $-1.70$ & 21 \nl
+G30--52 & 8.6& 0.50& 0.25& 0.27& 11 & 4757 & \nodata & \nodata & $-2.12$ & 11 \nl
+& & & & & & 4880 & \nodata & \nodata & $-2.14$ & 3 \nl
+G33--09 & 10.6& 0.41& 0.10& 0.28& 20 & 5575 & \nodata & \nodata & $-1.48$ & 11 \nl
+G59--18 & 10.2& 0.47& 0.16& 0.26& 20 & \nodata & \nodata & \nodata & $-1.08$ & 21 \nl
+G60--26 & 9.8& 0.43& 0.14& 0.24& 20 & \nodata & \nodata & \nodata & $-1.15$ & 21 \nl
+G66--22 & 10.5& 0.46& 0.16& 0.28& 11 & 5060 & \nodata & \nodata & $-1.77$ & 3 \nl
+& & & & & & \nodata & \nodata & \nodata & $-1.04$ & 21 \nl
+G90--03 & 10.4& 0.37& 0.04& 0.29& 20 & \nodata & \nodata & \nodata & $-2.01$ & 21 \nl
+G102--47 & 10.3& 0.46& 0.10& 0.23& 20,11& 5220 & \nodata & \nodata & $-2.25$ & 3 \nl
+& & & & & & \nodata & \nodata & \nodata & $-1.62$ & 21 \nl
+G122--57 & 8.4& 0.53& 0.27& 0.31& 11 & 4744 & \nodata & \nodata & $-1.71$ & 11 \nl
+G141--19 & 10.6& 0.50& 0.01& 0.26& 20 & 5155 & \nodata & \nodata & $-2.91$ & 11 \nl
+& & & & & & 5680 & \nodata & \nodata & $-1.80$ & 3 \nl
+& & & & & & \nodata & \nodata & \nodata & $-1.95$ & 21 \nl
+G141--47 & 10.5& 0.39& 0.09& 0.29& 11 & 6056 & \nodata & \nodata & $-1.57$ & 11 \nl
+G170--47 & 8.9& 0.45& 0.06& 0.28& 11 & 5126 & \nodata & \nodata & $-2.91$ & 11 \nl
+G186--26 & 10.8& 0.31& 0.04& 0.34& 20 & 6220 & \nodata & \nodata & $-2.90$ & 25 \nl
+& & & & & & 6222 & \nodata & \nodata &$<-2.80$ & 11 \nl
+G205--42 & 10.0& 0.43& 0.10& 0.23& 11 & 5301 & \nodata & \nodata & $-2.18$ & 11 \nl
+G217--08 & 10.5& 0.35& 0.06& 0.28& 11 & 6066 & \nodata & \nodata & $-2.29$ & \nodata\nl
+G243--63 & 7.7& 0.48& 0.13& 0.30& 11 & \nodata & \nodata & \nodata & $-1.66$ & 21 \nl
+LP 608--62\tablenotemark{a} & 10.5& 0.30& 0.07& 0.35& 11 & 6250 & \nodata & \nodata & $-2.70$ & 4 \nl
+\tablenotetext{a}{Star LP 608--62 is also known as BD+1\deg 2341p.}
+\tablenotetext{b}{This is not a real table footnote.}
+\tablerefs{
+(1) Barbuy, Spite, \& Spite 1985; (2) Bond 1980; (3) Carbon et al. 1987;
+(4) Hobbs \& Duncan 1987; (5) Gilroy et al. 1988: (6) Gratton \& Ortolani 1986;
+(7) Gratton \& Sneden 1987; (8) Gratton \& Sneden (1988); (9) Gratton \& Sneden 1991;
+(10) Kraft et al. 1982; (11) LCL, or Laird, 1990; (12) Leep \& Wallerstein 1981;
+(13) Luck \& Bond 1981; (14) Luck \& Bond 1985; (15) Magain 1987;
+(16) Magain 1989; (17) Peterson 1981; (18) Peterson, Kurucz, \& Carney 1990;
+(19) RMB; (20) Schuster \& Nissen 1988; (21) Schuster \& Nissen 1989b;
+(22) Spite et al. 1984; (23) Spite \& Spite 1986; (24) Hobbs \& Thorburn 1991;
+(25) Hobbs et al. 1991; (26) Olsen 1983.}
+\tablecomments{Occasionally, authors wish to append a short
+paragraph of explanatory notes that pertain to the entire table, but
+which are different than the caption. Such notes should be placed in
+a {\tt tablecomments} command like this.}
+\end{planotable}
diff --git a/obsolete/macros/latex209/contrib/aasmacros/sample1.tex b/obsolete/macros/latex209/contrib/aasmacros/sample1.tex
new file mode 100644
index 0000000000..ffaea5622a
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aasmacros/sample1.tex
@@ -0,0 +1,54 @@
+% SAMPLE1.TEX -- AASTeX sample paper with minimal markup.
+
+\documentstyle[12pt,aasms]{article}
+
+\begin{document}
+
+\title{AAS\TeX\ Sample Papers. I. The Minimalist Approach}
+\author{M. Headroom}
+\affil{Industrial Metaphysics, Inc., Alluvia, HG 67555}
+
+\begin{abstract}
+This example illustrates how to use the AAS\TeX\ markup in a
+way that is as unobtrusive as possible while still identifying
+all the important structural parts of the paper.
+The most salient thing to observe is that, apart from the document
+style declaration, no formatting instructions are given in the file.
+\end{abstract}
+
+\keywords{Brevity --- models}
+
+\section{Introduction}
+
+Reader, this is my paper. Paper, this is our reader.
+
+\section{Observations}
+
+The observations upon which this paper is based were taken on Wednesday
+while I was grocery shopping. I needed a half-gallon of milk, chips and
+salsa, and a bag of kitty litter. Calibration data were taken on Friday
+when I went back for a six-pack of beer.
+
+\section{Discussion}
+
+Grocery stores seem to be inordinately crowded on Wednesdays and Fridays
+\markcite{(Headroom 1988)}. The increase in Friday-shopper density can
+be understood by assuming that many people get paid on Fridays,
+and by recognizing that such people often do not work on Saturdays and
+Sundays and can be assumed to be ``stocking up'' for the weekend.
+
+The Wednesday peak is harder to explain, but may be related to the
+delivery of fresh produce on Tuesday nights. This interpretation
+depends on the assumption that many people
+eat sensibly and therefore find fresh produce attractive.
+
+\acknowledgments
+
+My cats, Hal and Yoda, provided motivation for the initiation of this study.
+
+\begin{references}
+\reference Berlioz, H. 1837, Grande Messe du Morts (Paris: Durand)
+\reference Headroom, M. 1988, \apj, 278, 356
+\end{references}
+
+\end{document}
diff --git a/obsolete/macros/latex209/contrib/aasmacros/sample2.aux b/obsolete/macros/latex209/contrib/aasmacros/sample2.aux
new file mode 100644
index 0000000000..32d0c435cf
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aasmacros/sample2.aux
@@ -0,0 +1,37 @@
+\relax
+\citation{hen61,lyn68,spi85}
+\citation{kin75,new78}
+\citation{djo84}
+\citation{can78}
+\citation{kin68,pet76,har84,ort85}
+\citation{kin66}
+\citation{kro84}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {1.}Introduction}{3}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {2.}Observations}{3}}
+\citation{hag86}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {3.}Helicity Amplitudes}{4}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {3.1.}Formalism}{4}}
+\newlabel{hairymath}{{3.1.}{4}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {4.}Floating material and so forth}{5}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {A.}Floating material and so forth}{6}}
+\@writefile{lot}{\string\contentsline\space {table}{\string\numberline\space {1}{\ignorespaces Terribly relevant tabular information.}}{7}}
+\newlabel{tbl-1}{{1}{7}}
+\@writefile{lot}{\string\contentsline\space {table}{\string\numberline\space {1A}{\ignorespaces More terribly relevant tabular information. Notice that it is possible to have more than one table on a page where each can have associated independent notes. We extend the caption with further pointless drivel to see the effects of lengthy text on caption formatting.}}{8}}
+\newlabel{tbl-2}{{1A}{8}}
+\@input{samp2tbl.aux}
+\bibcite{aur82}{Auri{\accent 18 e}re 1982}
+\bibcite{can78}{Canizares et al.\ 1978}
+\bibcite{djo84}{Djorgovski and King 1984}
+\bibcite{hag86}{Hagiwara and Zeppenfeld 1986}
+\bibcite{har84}{Harris and van den Bergh 1984}
+\bibcite{hen61}{H{\accent 18 e}non 1961}
+\bibcite{kin66}{King 1966}
+\bibcite{kin75}{King 1975}
+\bibcite{kin68}{King et al.,\ 1968}
+\bibcite{kro84}{Kron et al.,\ 1984}
+\bibcite{lyn68}{Lynden-Bell and Wood 1968}
+\bibcite{new78}{Newell and O'Neil 1978}
+\bibcite{ort85}{Ortolani et al.,\ 1985}
+\bibcite{pet76}{Peterson 1976}
+\bibcite{spi85}{Spitzer 1985}
+\@writefile{lof}{\string\contentsline\space {figure}{\string\numberline\space {1}{\ignorespaces We use the \lecurrentfam =0\unhbox \voidb@x L\raise .42ex \hbox {$\fam \lecurrentfam \scriptstyle \kern -.3em A$}\kern -.15emT\kern -.1667em\lower .5ex\hbox {E}\kern -.125emX\ {\string\ptt\space figure} environment syntax to set this figure caption.}}{16}}
diff --git a/obsolete/macros/latex209/contrib/aasmacros/sample2.tex b/obsolete/macros/latex209/contrib/aasmacros/sample2.tex
new file mode 100644
index 0000000000..b3f1b57de6
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aasmacros/sample2.tex
@@ -0,0 +1,503 @@
+% SAMPLE2.TEX -- AASTeX macro package tutorial paper.
+
+% The first item in a LaTeX file must be a \documentstyle command to
+% declare the overall style of the paper. The two \documentstyle lines
+% that are relevant for the AASTeX macros are shown; one is commented out
+% so that the file can be processed.
+
+\documentstyle[12pt,aasms]{article}
+%\documentstyle[11pt,aaspp]{article}
+%\documentstyle[aaspptwo]{article}
+
+% There are two optional preamble declarations that enable to user to
+% control certain formatting options. \tighten is used with the
+% aasms substyle to turn off double-spacing; don't do this for
+% actual manuscripts intended for editorial review, only for your friends.
+%
+% \eqsecnum changes the way equations are numbered. Normally,
+% equations are just numbered sequentially through the entire paper.
+% If \eqsecnum appears in the preamble, equation numbers will
+% be sequential through each section, and will be formatted "(sec-eqn)",
+% where sec is the current section number and eqn is the number of the
+% equation within that section. \eqsecnum can be used with
+% either substyle.
+
+%\tighten
+%\eqsecnum
+
+% Here's some slug-line data. They're never printed out by these
+% substyles because they're only relevant to the actual publication
+% process, and these styles aren't used in publication (yet).
+% The receipt and acceptance dates would be filled in by the editorial
+% staff on the appropriate dates; they are commented out in this sample
+% so that the abstract environment prints out rules so that the dates
+% can be typed onto the manuscript according to current practice.
+
+\received{4 August 1988}
+%\accepted{23 September 1988}
+\journalid{337}{15 January 1989}
+\articleid{11}{14}
+
+% This is the end of the "preamble". Now we wish to start with the
+% real material for the paper, which we indicate with \begin{document}.
+% Following the \begin{document} command is the front matter for the
+% paper, viz., the title, author and address data, the abstract, and
+% any keywords or subject headings that are relevant.
+
+\slugcomment{Not to appear in Nonlearned J., 45.}
+
+\begin{document}
+
+\title{Collapsed Cores in Globular Clusters,\\
+ Gauge-Boson Couplings,\\
+ and AAS\TeX\ Macro Sample}
+
+\author{S. Djorgovski\altaffilmark{1,2,3} and Ivan R. King\altaffilmark{1}}
+\affil{Astronomy Department, University of California,
+ Berkeley, CA 94720}
+
+\author{C. D. Biemesderfer\altaffilmark{4,5}}
+\affil{National Optical Astronomy Observatories, Tucson, AZ 85719}
+
+\and
+
+\author{R. J. Hanisch\altaffilmark{5}}
+\affil{Space Telescope Science Institute, Baltimore, MD 21218}
+
+% Notice that each of these authors has alternate affiliations, which
+% are identified by the \altaffilmark after each name. The actual alternate
+% affiliation information is typeset in footnotes at the bottom of the
+% first page, and the text itself is specified in \altaffiltext commands.
+% There is a separate \altaffiltext for each alternate affiliation
+% indicated above.
+
+\altaffiltext{1}{Visiting Astronomer, Cerro Tololo Inter-American Observatory.
+CTIO is operated by AURA, Inc.\ under contract to the National Science
+Foundation.}
+\altaffiltext{2}{Society of Fellows, Harvard University.}
+\altaffiltext{3}{present address: Center for Astrophysics,
+ 60 Garden Street, Cambridge, MA 02138}
+\altaffiltext{4}{Visiting Programmer, Space Telescope Science Institute}
+\altaffiltext{5}{Patron, Alonso's Bar and Grill}
+
+% The abstract environment prints out the receipt and acceptance dates
+% if they are relevant for the journal style. For the aasms style, they
+% will print out as horizontal rules for the editorial staff to type
+% on, so long as the author does not include \received and \accepted
+% commands. This should not be done, since \received and \accepted dates
+% are not known to the author.
+
+\begin{abstract}
+This is a preliminary report on surface photometry of the major
+fraction of known globular clusters, to see which of them show the signs
+of a collapsed core.
+We also show off the results of some recreational mathematics,
+and give pause to consider the dangers of the too fertile mind.
+\end{abstract}
+
+\keywords{clusters: globular, peanut --- bosons: bozos}
+%\keywords{globular clusters,peanut clusters,bosons,bozos}
+
+% That's it for the front matter. On to the main body of the paper.
+% We'll only put in tutorial remarks at the beginning of each section
+% so you can see entire sections together.
+%
+% In the first two sections, you should notice the use of the LaTeX \cite
+% command to identify citations. The citations are tied to the
+% reference list via symbolic tags. We have chosen the first three
+% characters of the first author's name plus the last two numeral of the
+% year of publication. The corresponding reference has a \bibitem
+% command in the reference list below.
+%
+% Please go to the LaTeX manual for a complete description of the
+% \cite-\bibitem mechanism.
+
+\section{Introduction}
+
+A focal problem today in the dynamics of globular clusters is
+core collapse. It has been predicted by theory
+for decades (\cite{hen61,lyn68,spi85}), but
+observation has been less alert to the phenomenon. For many years the
+central brightness peak in M15 (\cite{kin75,new78})
+seemed a unique anomaly. Then Auri\`ere (1982) suggested a central peak
+in NGC 6397, and a limited photographic survey of ours (\cite[Paper I]{djo84})
+found three more cases, including NGC 6624, whose
+sharp center had often been remarked on (e.g., \cite{can78}).
+
+\section{Observations}
+
+All our observations were short direct exposures with CCD's. At
+Lick Observatory we used a TI 500$\times$500 chip
+and a GEC 575$\times$385, on the 1-m Nickel reflector. The only
+filter available at Lick was red. At CTIO we used a GEC 575$\times$385, with
+$B, V,$ and $R$ filters, and an RCA 512$\times$320, with $U, B, V, R,$ and $I$
+filters, on the 1.5-m reflector. In the CTIO observations we tried to
+concentrate on the shortest practicable wavelengths; but faintness, reddening,
+and poor short-wavelength sensitivity often kept us from observing in $U$ or
+even in $B$. All four cameras had scales of the order of 0.4 arcsec/pixel, and
+our field sizes were around 3 arcmin.
+
+The CCD images are unfortunately not always suitable, for very poor
+clusters or for clusters with large cores. Since the latter are easily
+studied by other means, we augmented our own CCD profiles by collecting
+from the literature a number of star-count
+profiles (\cite{kin68,pet76,har84,ort85}),
+as well as photoelectric profiles (\cite{kin66}) and
+electronographic profiles (\cite{kro84}).
+In a few cases we judged normality by eye estimates on one of the Sky
+Surveys.
+
+% In this section, we see the use of the \subsection command to set off
+% an independent subsection. We only have one here; usually there would
+% be several.
+%
+% We show the use of several of the displayed math environments described
+% in the User Guide, and you get a healthy dose of mathematical typesetting
+% examples. Also, observe the use of the LaTeX \label command after the
+% \subsection to give a symbolic tag to the subsection for cross-referencing
+% in a \ref command. LaTeX automatically numbers the sections, equations,
+% tables, etc. as it goes, so in general you don't know what number something
+% is going to have. We'll refer to the "hairymath" section a little later.
+
+\section{Helicity Amplitudes}
+
+It has been realized that helicity amplitudes provide a convenient means
+for Feynman diagram\footnote{Footnotes can be inserted like this.}
+evaluations. These amplitude-level techniques
+are particularly convenient for calculations involving many Feynman
+diagrams, where the usual trace techniques for the amplitude
+squared becomes unwieldy. Our calculations use the helicity techniques
+developed by other authors (\cite{hag86}); we briefly summarize below.
+
+\subsection{Formalism} \label{hairymath}
+
+A tree-level amplitude in $e^+e^-$ collisions can be expressed in
+terms of fermion strings of the form
+\begin{equation}
+\bar v(p_2,\sigma_2)P_{-\tau}\not\!a_1\not\!a_2\cdots
+\not\!a_nu(p_1,\sigma_1)\;,
+\end{equation}
+where $p$ and $\sigma$ label the initial $e^{\pm}$ four-momenta
+and helicities $(\sigma = \pm 1)$, $\not\!a_i=a^\mu_i\gamma_\nu$
+and $P_\tau=\frac{1}{2}(1+\tau\gamma_5)$ is a chirality projection
+operator $(\tau = \pm1)$. The $a^\mu_i$ may be formed from particle
+four-momenta, gauge-boson polarization vectors or fermion strings with
+an uncontracted Lorentz index associated with final-state fermions.
+
+In the chiral representation the $\gamma$ matrices are expressed
+in terms of $2\times 2$ Pauli matrices $\sigma$ and the unit matrix 1 as
+\begin{mathletters}
+\begin{eqnarray}
+\gamma^\mu \: & = &
+\: \left(
+\begin{array}{cc}
+0 & \sigma^\mu_+ \\
+\sigma^\mu_- & 0
+\end{array} \; \; \right)\;,
+\;\gamma^5= \left(
+\begin{array}{cc}
+-1 & \; 0\\
+0 & \; 1
+\end{array} \; \; \right) \;, \nonumber \\ & & \\
+\sigma^\mu_{\pm} \:& = & \: ({\bf 1} ,\pm \sigma)\;, \nonumber
+\end{eqnarray}
+\end{mathletters}
+giving
+\begin{equation}
+\not\!a= \left(
+\begin{array}{cc}
+0 & (\not\!a)_+\\
+(\not\!a)_- & 0
+\end{array}\right),\;(\not\!a)_\pm=a_\mu\sigma^\mu_\pm\;,
+\end{equation}
+The spinors are expressed in terms of two-component Weyl spinors as
+\begin{equation}
+u=\left(
+\begin{array}{c}
+(u)_-\\
+(u)_+
+\end{array}\right),\;v={\bf (}(v)^\dagger_+{\bf ,} \; (v)^\dagger_-{\bf )}\;.
+\eqnum{3A}
+\end{equation}
+The Weyl spinors are given in terms of helicity eigenstates
+$\chi_\lambda(p)$ with $\lambda=\pm1$ by
+\begin{eqnarray}
+u(p,\lambda)_\pm & = & (E\pm\lambda|{\bf p}|)^{1/2}\chi_\lambda(p)\;,
+\nonumber \\ & & \\
+v(p,\lambda)_\pm & = & \pm\lambda(E\mp\lambda|{\bf p}|)^{1/2}\chi
+_{-\lambda}(p) \nonumber
+\end{eqnarray}
+
+% In these sections, we see some additional math-related markup, and we
+% have references to one of the tables (occurs later in the document)
+% and the "hairymath" section immediately preceding this one.
+%
+% In the second paragraph, note the use of in-text math ($stuff$) including
+% a couple of the miscellaneous symbol commands defined in the AASTeX macro
+% package.
+%
+% This is the last section of the paper, so there is an \acknowledgments
+% section at the end of the main body.
+
+\section{Floating material and so forth}
+
+Consider a task that computes profile parameters for a modified
+Lorentzian of the form
+\begin{equation}
+I = \frac{1}{1 + d_{1}^{P (1 + d_{2} )}}
+\end{equation}
+where
+\begin{displaymath}
+d_{1} = \sqrt{ \left( \begin{array}{c} \frac{x_{1}}{R_{maj}}
+\end{array} \right) ^{2} +
+\left( \begin{array}{c} \frac{y_{1}}{R_{min}} \end{array} \right) ^{2} }
+\end{displaymath}
+\begin{displaymath}
+d_{2} = \sqrt{ \left( \begin{array}{c} \frac{x_{1}}{P R_{maj}}
+\end{array} \right) ^{2} +
+\left( \begin{array}{c} \case{y_{1}}{P R_{min}} \end{array} \right) ^{2} }
+\end{displaymath}
+\[x_{1} = (x - x_{0}) \cos \Theta + (y - y_{0}) \sin \Theta \]
+\[y_{1} = -(x - x_{0}) \sin \Theta + (y - y_{0}) \cos \Theta \]
+
+In these expressions $x_{0}$,$y_{0}$ is the star center, and $\Theta$ is the
+angle with the $x$ axis. Results of this task are shown in table~\ref{tbl-1}.
+It is not clear how these sorts of analyses may affect determination of
+$M_{\sun}$ and $M_{\earth}$, but the assumption is that the alternate results
+should be less than 90\deg\ out of phase with previous values.
+We have no observations of \ion{Ca}{2}.
+Roughly \slantfrac{4}{5} of the electronically submitted abstracts
+for AAS meetings are error-free.
+
+\acknowledgments
+
+We are grateful to V. Barger, T. Han, and R. J. N. Phillips for
+doing the math in section~\ref{hairymath}.
+
+\appendix
+\section{Floating material and so forth}
+
+Consider a task that computes profile parameters for a modified
+Lorentzian of the form
+\begin{equation}
+I = \frac{1}{1 + d_{1}^{P (1 + d_{2} )}}
+\end{equation}
+where
+\begin{mathletters}
+\begin{displaymath}
+d_{1} = \frac{3}{4} \sqrt{ \left( \begin{array}{c} \frac{x_{1}}{R_{maj}}
+\end{array} \right) ^{2} +
+\left( \begin{array}{c} \frac{y_{1}}{R_{min}} \end{array} \right) ^{2} }
+\end{displaymath}
+\begin{equation}
+d_{2} = \case{3}{4} \sqrt{ \left( \begin{array}{c} \frac{x_{1}}{P R_{maj}}
+\end{array} \right) ^{2} +
+\left( \begin{array}{c} \case{y_{1}}{P R_{min}} \end{array} \right) ^{2} }
+\end{equation}
+\begin{eqnarray}
+x_{1} & = & (x - x_{0}) \cos \Theta + (y - y_{0}) \sin \Theta\\
+y_{1} & = & -(x - x_{0}) \sin \Theta + (y - y_{0}) \cos \Theta
+\end{eqnarray}
+\end{mathletters}
+
+For completeness, here is one last equation.
+\begin{equation}
+e = mc^2
+\end{equation}
+
+% That's the end of the main body of the paper. Now we will have some
+% back matter.
+%
+% Tables are usually supposed to be submitted one per page, following
+% the main body of the text, so before each table we would have a
+% \clearpage to force a page break at that point. There should also
+% be a \clearpage after the last table so that it gets forced onto
+% its own page, too.
+%
+% The tabular data is aligned within the "tabular" environment. Observe
+% that our tabular environment is embedded within a "center" environment,
+% which is in turn inside a "table" environment. Exercise for the reader:
+% Why do you think we used the "table*" environment?
+%
+% We need the table environment for autonumbering and caption generation,
+% which is why it is not enough to have a centered tabular.
+%
+% Within the tabular environment, please note that we use no vertical
+% rules, and the only horizontal rule is the \tableline (*not* an \hline)
+% which delimits the column headings from the tabular data. Also note
+% that a couple of the column headings require special annotation, i.e.,
+% footnotes for tables. They are marked and tagged with \tablenotemark.
+% \tablenotemarks could be placed on individual data entries as well,
+% but be careful not to go berserk doing this.
+
+\clearpage
+
+\begin{table*}
+\begin{center}
+\begin{tabular}{crrrrrrrrrrr}
+Star & Height & $d_{x}$ & $d_{y}$ & $n$ & $\chi^2$ & $R_{maj}$ & $R_{min}$ &
+\multicolumn{1}{c}{$P$\tablenotemark{a}} & $P R_{maj}$ & $P R_{min}$ &
+\multicolumn{1}{c}{$\Theta$\tablenotemark{b}} \\
+\tableline
+1 &33472.5 &-0.1 &0.4 &53 &27.4 &2.065 &1.940 &3.900 &68.3 &116.2 &-27.639\\
+2 &27802.4 &-0.3 &-0.2 &60 &3.7 &1.628 &1.510 &2.156 &6.8 &7.5 &-26.764\\
+3 &29210.6 &0.9 &0.3 &60 &3.4 &1.622 &1.551 &2.159 &6.7 &7.3 &-40.272\\
+4 &32733.8 &-1.2 &-0.5 &41 &54.8 &2.282 &2.156 &4.313 &117.4 &78.2 &-35.847\\
+5 & 9607.4 &-0.4 &-0.4 &60 &1.4 &1.669 &1.574 &2.343 &8.0 &8.9 &-33.417\\
+6 &31638.6 &1.6 &0.1 &39 &315.2 & 3.433 &3.075 &7.488 &92.1 &25.3 &-12.052\\
+\end{tabular}
+\end{center}
+
+% Text for table footnotes must follow the tabular environment but must
+% be inside the table environment. Note that it is OK to put \ref's
+% in \tablenotetext's.
+
+\tablenotetext{a}{Sample footnote for table~\ref{tbl-1}}
+\tablenotetext{b}{Another sample footnote for table~\ref{tbl-1}}
+\tablenotetext{c}{Footnote with no call out}
+\tablenotetext{d}{Another footnote with no call out}
+\tablenotetext{e}{A further additional footnote with no call out}
+
+% The caption contains only the caption text. The "Table N." identification
+% is generated by the \caption command on its own.
+%
+% It is necessary to \label tables and figures *after* the \caption has been
+% specified because the table/figure number is generated by \caption, not
+% by \begin{whatever}.
+
+\caption{Terribly relevant tabular information.} \label{tbl-1}
+
+\end{table*}
+
+\begin{table*}
+\begin{center}
+\begin{tabular}{crrrrrrrrrrr}
+Star & Height & $d_{x}$ & $d_{y}$ & $n$ & $\chi^2$ & $R_{maj}$ & $R_{min}$ &
+\multicolumn{1}{c}{$P$\tablenotemark{t}} & $P R_{maj}$ & $P R_{min}$ &
+\multicolumn{1}{c}{$\Theta$\tablenotemark{u}} \\
+\tableline
+1 &33472.5 &-0.1 &0.4 &53 &27.4 &2.065 &1.940 &3.900 &68.3 &116.2 &-27.639\\
+2 &27802.4 &-0.3 &-0.2 &60 &3.7 &1.628 &1.510 &2.156 &6.8 &7.5 &-26.764\\
+3 &29210.6 &0.9 &0.3 &60 &3.4 &1.622 &1.551 &2.159 &6.7 &7.3 &-40.272\\
+4 &32733.8 &-1.2\tablenotemark{v} &-0.5 &41 &54.8 &2.282 &2.156 &4.313 &117.4 &78.2 &-35.847\\
+5 & 9607.4 &-0.4 &-0.4 &60 &1.4 &1.669\tablenotemark{v} &1.574 &2.343 &8.0 &8.9 &-33.417\\
+6 &31638.6 &1.6 &0.1 &39 &315.2 & 3.433 &3.075 &7.488 &92.1 &25.3 &-12.052\\
+\end{tabular}
+\end{center}
+
+% Text for table footnotes must follow the tabular environment but must
+% be inside the table environment. Note that it is OK to put \ref's
+% in \tablenotetext's.
+
+\tablenotetext{t}{Sample footnote for table~\ref{tbl-2}}
+\tablenotetext{v}{Yet another sample footnote for table~\ref{tbl-2}}
+\tablenotetext{u}{Another sample footnote for table~\ref{tbl-2}}
+
+% The caption contains only the caption text. The "Table N." identification
+% is generated by the \caption command on its own.
+%
+% It is necessary to \label tables and figures *after* the \caption has been
+% specified because the table/figure number is generated by \caption, not
+% by \begin{whatever}.
+
+\tablenum{1A}
+\caption{
+More terribly relevant tabular information. Notice that it is possible
+to have more than one table on a page where each can have associated
+independent notes. We extend the caption with
+further pointless drivel to see the effects of lengthy text on
+caption formatting.} \label{tbl-2}
+
+\tablecomments{We can also attach a long-ish paragraph of explanatory
+material to a table. This would be done for journals where long
+captions are not permitted (usually because the caption is regarded
+as the table's title). A different command would be used if the
+paragraph contained a list of references for the table.}
+
+\end{table*}
+
+\include{samp2tbl}
+
+% This is the last table for this paper (as well as the first), so we
+% should follow it with a \clearpage. In order to force all the floating
+% tables out of their buffers and onto vertical page lists, we must use
+% \clearpage rather than \newpage.
+
+\clearpage
+
+% Now comes the reference list. In this document, we used \cite to call
+% out citations, so we must use \bibitem in the reference list, which
+% means we use the LaTeX thebibliography environment. Please note that
+% \begin{thebibliography} is followed by a null argument. If you forget
+% this, mayhem ensues, and LaTeX will say "Perhaps a missing item?" when
+% you run it. Do not call us, do not send mail when this happens. Put
+% the silly {} after the \begin{thebibliography}.
+%
+% Each reference has a \bibitem command to define the citation format
+% and the symbolic tag, as well as a \reference command which sets up
+% formatting parameters for the reference list itself.
+%
+% If we had not bothered with the \cite-\bibitem business, calling out
+% the references outselves, the reference list could be enclosed in
+% a references environment (\begin{references} has no null argument),
+% and there would be no need for the leading \bibitem's.
+
+\begin{thebibliography}{}
+\bibitem[Auri\`ere 1982]{aur82} \reference Auri\`ere, M. 1982, \astap,
+ 109, 301
+\bibitem[Canizares et al.\ 1978]{can78} \reference Canizares, C. R.,
+ Grindlay, J. E., Hiltner, W. A., Liller, W., and
+ McClintock, J. E. 1978, \apj, 224, 39
+\bibitem[Djorgovski and King 1984]{djo84} \reference Djorgovski, S.,
+ and King, I. R. 1984, \apjlett, 277, L49
+\bibitem[Hagiwara and Zeppenfeld 1986]{hag86} \reference Hagiwara, K., and
+ Zeppenfeld, D. 1986, Nucl.Phys., 274, 1
+\bibitem[Harris and van den Bergh 1984]{har84} \reference Harris, W. E.,
+ and van den Bergh, S. 1984, \aj, 89, 1816
+\bibitem[H\`enon 1961]{hen61} \reference H\'enon, M. 1961, Ann.d'Ap., 24, 369
+\bibitem[King 1966]{kin66} \reference King, I. R. 1966, \aj, 71, 276
+\bibitem[King 1975]{kin75} \reference King, I. R. 1975, Dynamics of
+ Stellar Systems, A. Hayli, Dordrecht: Reidel, 1975, 99
+\bibitem[King et al.,\ 1968]{kin68} \reference King, I. R., Hedemann, E.,
+ Hodge, S. M., and White, R. E. 1968, \aj, 73, 456
+\bibitem[Kron et al.,\ 1984]{kro84} \reference Kron, G. E., Hewitt, A. V.,
+ and Wasserman, L. H. 1984, \pasp, 96, 198
+\bibitem[Lynden-Bell and Wood 1968]{lyn68} \reference Lynden-Bell, D.,
+ and Wood, R. 1968, \mnras, 138, 495
+\bibitem[Newell and O'Neil 1978]{new78} \reference Newell, E. B.,
+ and O'Neil, E. J. 1978, \apjsupp, 37, 27
+\bibitem[Ortolani et al.,\ 1985]{ort85} \reference Ortolani, S., Rosino, L.,
+ and Sandage, A. 1985, \aj, 90, 473
+\bibitem[Peterson 1976]{pet76} \reference Peterson, C. J. 1976, \aj, 81, 617
+\bibitem[Spitzer 1985]{spi85} \reference Spitzer, L. 1985, Dynamics of
+ Star Clusters, J. Goodman and P. Hut, Dordrecht: Reidel, 109
+\end{thebibliography}
+
+% Finally, we have figure captions. Usually these must be on a separate
+% page, although unlike table, it is often permissible to have several
+% figure captions on the same page. We force the page break between
+% the reference list and the figure captions.
+%
+% The \caption command in the figure environment works like the one in the
+% table environment (it's the same one, actually), except that this one
+% produces identification text that reads "Figure N."
+
+\clearpage
+
+\begin{figure}
+\plotone{sgi9259.eps}
+\caption{We use the \LaTeX\ {\tt figure} environment syntax to set this
+figure caption.}
+\end{figure}
+
+% That's all, folks.
+%
+% The technique of segregating major semantic components of the document
+% within "environments" is a very good one, but you as an author have to
+% come up with a way of making sure each \begin{whatzit} has a corresponding
+% \end{whatzit}. If you miss one, LaTeX will probably complain a great
+% deal during the composition of the document. Occasionally, you get away
+% with it right up to the \end{document}, in which case, you will see
+% "\begin{whatzit} ended by \end{document}".
+
+\end{document}
diff --git a/obsolete/macros/latex209/contrib/aasmacros/samptbls.tex b/obsolete/macros/latex209/contrib/aasmacros/samptbls.tex
new file mode 100644
index 0000000000..ed2dac1cd4
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aasmacros/samptbls.tex
@@ -0,0 +1,11 @@
+% SAMPTBLS.TEX -- AASTEX sample plano tables.
+
+\documentstyle[apjpt]{article}
+
+%\includeonly{table1}
+
+\begin{document}
+\include{table1}
+\include{table2}
+\include{table3}
+\end{document}
diff --git a/obsolete/macros/latex209/contrib/aasmacros/sgi9259.eps b/obsolete/macros/latex209/contrib/aasmacros/sgi9259.eps
new file mode 100644
index 0000000000..5ecc5671ec
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aasmacros/sgi9259.eps
@@ -0,0 +1,377 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: IRAF SGI plot
+%%Creator: sgieps
+%%CreationDate: Fri May 10 04:18:42 1991
+%%BoundingBox: 72 72 540 384
+%%EndComments
+/devppi 300 def
+/userppi 72 def
+/pagewidth 8.5 def
+/devpixtouser { userppi mul devppi div } def
+/setscale { 1 devpixtouser 1 devpixtouser scale } def
+/pagetolandscape 90 def
+/setcoords { pagewidth userppi mul 0 translate
+ pagetolandscape rotate setscale } def
+/setjoins { 1 setlinejoin 1 setlinecap } def
+gsave setscale setjoins
+/getpoint {
+ currentfile read pop 8#77 and 6 bitshift
+ currentfile read pop 8#77 and or
+ currentfile read pop 8#77 and 6 bitshift
+ currentfile read pop 8#77 and or
+ } def
+/m { getpoint moveto } def
+/d { getpoint lineto } def
+01 setlinewidth
+01 setlinewidth
+m NxXh d NxXP m NyXh d NyXP m NtXh d N|Xh m NtXP d N|XP m OEXh d OEXP
+m OFXh d OFXP m OAXh d OOXh m OOXh d ORXg m ORXg d OTXe m OTXe d OUXc
+m OUXc d OUXa m OUXa d OTX_ m OTX_ d ORX^ m ORX^ d OOX] m OOX] d OFX]
+m OOXh d OQXg m OQXg d ORXe m ORXe d OTXc m OTXc d OTXa m OTXa d ORX_
+m ORX_ d OQX^ m OQX^ d OOX] m OAXP d OIXP m OMX] d OQXS m OQXS d OTXP
+m OTXP d OVXP m OVXP d OWXS m OMX] d OOXZ m OOXZ d OTXP m OlXd d OmXb
+m OmXb d OmXh m OmXh d OlXd m OlXd d OjXg m OjXg d OfXh m OfXh d OdXh
+m OdXh d O`Xg m O`Xg d O^Xd m O^Xd d O]Xb m O]Xb d O\X_ m O\X_ d O\XY
+m O\XY d O]XV m O]XV d O^XT m O^XT d O`XQ m O`XQ d OdXP m OdXP d OfXP
+m OfXP d OjXQ m OjXQ d OlXT m OlXT d OmXV m OdXh d ObXg m ObXg d O_Xd
+m O_Xd d O^Xb m O^Xb d O]X_ m O]X_ d O]XY m O]XY d O^XV m O^XV d O_XT
+m O_XT d ObXQ m ObXQ d OdXP m PSXd d PSXP m PIXZ d P^XZ m P}Xc d Q@Xd
+m Q@Xd d QCXh m QCXh d QCXP m QBXg d QBXP m P}XP d QHXP m QXXh d QTXg
+m QTXg d QRXc m QRXc d QQX^ m QQX^ d QQXZ m QQXZ d QRXU m QRXU d QTXQ
+m QTXQ d QXXP m QXXP d QZXP m QZXP d Q^XQ m Q^XQ d Q`XU m Q`XU d QaXZ
+m QaXZ d QaX^ m QaX^ d Q`Xc m Q`Xc d Q^Xg m Q^Xg d QZXh m QZXh d QXXh
+m QXXh d QVXg m QVXg d QTXe m QTXe d QSXc m QSXc d QRX^ m QRX^ d QRXZ
+m QRXZ d QSXU m QSXU d QTXS m QTXS d QVXQ m QVXQ d QXXP m QZXP d Q]XQ
+m Q]XQ d Q^XS m Q^XS d Q_XU m Q_XU d Q`XZ m Q`XZ d Q`X^ m Q`X^ d Q_Xc
+m Q_Xc d Q^Xe m Q^Xe d Q]Xg m Q]Xg d QZXh m QiXc d QkXb m QkXb d QiXa
+m QiXa d QhXb m QhXb d QhXc m QhXc d QiXe m QiXe d QkXg m QkXg d QnXh
+m QnXh d QsXh m QsXh d QvXg m QvXg d QwXe m QwXe d QxXc m QxXc d QxXa
+m QxXa d QwX_ m QwX_ d QtX] m QtX] d QnXZ m QnXZ d QlXY m QlXY d QiXW
+m QiXW d QhXT m QhXT d QhXP m QsXh d QuXg m QuXg d QvXe m QvXe d QwXc
+m QwXc d QwXa m QwXa d QvX_ m QvX_ d QsX] m QsX] d QnXZ m QhXS d QiXT
+m QiXT d QlXT m QlXT d QqXQ m QqXQ d QuXQ m QuXQ d QwXS m QwXS d QxXT
+m QlXT d QqXP m QqXP d QvXP m QvXP d QwXQ m QwXQ d QxXT m QxXT d QxXV
+m RCXc d REXd m REXd d RIXh m RIXh d RIXP m RHXg d RHXP m RCXP d RMXP
+m ReXd d RcXc m RcXc d ReXb m ReXb d RfXc m RfXc d RfXd m RfXd d ReXg
+m ReXg d RbXh m RbXh d R_Xh m R_Xh d R[Xg m R[Xg d RYXd m RYXd d RXXb
+m RXXb d RWX^ m RWX^ d RWXW m RWXW d RXXT m RXXT d RZXQ m RZXQ d R^XP
+m R^XP d R`XP m R`XP d RcXQ m RcXQ d RfXT m RfXT d RgXW m RgXW d RgXX
+m RgXX d RfX[ m RfX[ d RcX^ m RcX^ d R`X_ m R`X_ d R_X_ m R_X_ d R[X^
+m R[X^ d RYX[ m RYX[ d RXXX m R_Xh d R\Xg m R\Xg d RZXd m RZXd d RYXb
+m RYXb d RXX^ m RXX^ d RXXW m RXXW d RYXT m RYXT d R[XQ m R[XQ d R^XP
+m R`XP d RbXQ m RbXQ d ReXT m ReXT d RfXW m RfXW d RfXX m RfXX d ReX[
+m ReX[ d RbX^ m RbX^ d R`X_ m SQXh d SQXP m SRXh d SRXP m SQX] d SNX_
+m SNX_ d SLX` m SLX` d SJX` m SJX` d SFX_ m SFX_ d SDX] m SDX] d SCXY
+m SCXY d SCXW m SCXW d SDXT m SDXT d SFXQ m SFXQ d SJXP m SJXP d SLXP
+m SLXP d SNXQ m SNXQ d SQXT m SJX` d SGX_ m SGX_ d SEX] m SEX] d SDXY
+m SDXY d SDXW m SDXW d SEXT m SEXT d SGXQ m SGXQ d SJXP m SMXh d SRXh
+m SQXP d SUXP m S]X^ d S]X] m S]X] d S\X] m S\X] d S\X^ m S\X^ d S]X_
+m S]X_ d S`X` m S`X` d SdX` m SdX` d SgX_ m SgX_ d ShX^ m ShX^ d SiX[
+m SiX[ d SiXT m SiXT d SjXQ m SjXQ d SkXP m ShX^ d ShXT m ShXT d SiXQ
+m SiXQ d SkXP m SkXP d SmXP m ShX[ d SgXZ m SgXZ d S`XY m S`XY d S\XX
+m S\XX d S[XV m S[XV d S[XT m S[XT d S\XQ m S\XQ d S`XP m S`XP d ScXP
+m ScXP d SfXQ m SfXQ d ShXT m S`XY d S]XX m S]XX d S\XV m S\XV d S\XT
+m S\XT d S]XQ m S]XQ d S`XP m SuXh d SuXU m SuXU d SvXQ m SvXQ d SxXP
+m SxXP d SzXP m SzXP d S}XQ m S}XQ d S~XT m SvXh d SvXU m SvXU d SwXQ
+m SwXQ d SxXP m SqX` d SzX` m TFX^ d TFX] m TFX] d TEX] m TEX] d TEX^
+m TEX^ d TFX_ m TFX_ d THX` m THX` d TMX` m TMX` d TOX_ m TOX_ d TQX^
+m TQX^ d TRX[ m TRX[ d TRXT m TRXT d TSXQ m TSXQ d TTXP m TQX^ d TQXT
+m TQXT d TRXQ m TRXQ d TTXP m TTXP d TUXP m TQX[ d TOXZ m TOXZ d THXY
+m THXY d TEXX m TEXX d TDXV m TDXV d TDXT m TDXT d TEXQ m TEXQ d THXP
+m THXP d TLXP m TLXP d TNXQ m TNXQ d TQXT m THXY d TFXX m TFXX d TEXV
+m TEXV d TEXT m TEXT d TFXQ m TFXQ d THXP m TxXg d TwXe m TwXe d TxXd
+m TxXd d TyXe m TyXe d TyXg m TyXg d TxXh m TxXh d TvXh m TvXh d TsXg
+m TsXg d TrXd m TrXd d TrXP m TvXh d TtXg m TtXg d TsXd m TsXd d TsXP
+m ToX` d TwX` m ToXP d TwXP m U@X^ d U@X] m U@X] d T?X] m T?X] d T?X^
+m T?X^ d U@X_ m U@X_ d UBX` m UBX` d UGX` m UGX` d UIX_ m UIX_ d UKX^
+m UKX^ d ULX[ m ULX[ d ULXT m ULXT d UMXQ m UMXQ d UNXP m UKX^ d UKXT
+m UKXT d ULXQ m ULXQ d UNXP m UNXP d UOXP m UKX[ d UIXZ m UIXZ d UBXY
+m UBXY d T?XX m T?XX d T~XV m T~XV d T~XT m T~XT d T?XQ m T?XQ d UBXP
+m UBXP d UFXP m UFXP d UHXQ m UHXQ d UKXT m UBXY d U@XX m U@XX d T?XV
+m T?XV d T?XT m T?XT d U@XQ m U@XQ d UBXP m UWXh d UWXP m UXXh d UXXP
+m UXX] d U[X_ m U[X_ d U]X` m U]X` d U_X` m U_X` d UcX_ m UcX_ d UeX]
+m UeX] d UfXY m UfXY d UfXW m UfXW d UeXT m UeXT d UcXQ m UcXQ d U_XP
+m U_XP d U]XP m U]XP d U[XQ m U[XQ d UXXT m U_X` d UbX_ m UbX_ d UdX]
+m UdX] d UeXY m UeXY d UeXW m UeXW d UdXT m UdXT d UbXQ m UbXQ d U_XP
+m UTXh d UXXh m UpX` d UpXP m UqX` d UqXP m UqXY d UrX] m UrX] d UtX_
+m UtX_ d UwX` m UwX` d UzX` m UzX` d U{X_ m U{X_ d U{X^ m U{X^ d UzX]
+m UzX] d UyX^ m UyX^ d UzX_ m UlX` d UqX` m UlXP d UtXP m VCXh d VBXg
+m VBXg d VCXe m VCXe d VEXg m VEXg d VCXh m VCX` d VCXP m VEX` d VEXP
+m V@X` d VEX` m V@XP d VHXP m V\X] d V[X[ m V[X[ d V\XZ m V\XZ d V]X[
+m V]X[ d V]X] m V]X] d V[X_ m V[X_ d VXX` m VXX` d VUX` m VUX` d VQX_
+m VQX_ d VOX] m VOX] d VNXY m VNXY d VNXW m VNXW d VOXT m VOXT d VQXQ
+m VQXQ d VUXP m VUXP d VWXP m VWXP d V[XQ m V[XQ d V]XT m VUX` d VSX_
+m VSX_ d VPX] m VPX] d VOXY m VOXY d VOXW m VOXW d VPXT m VPXT d VSXQ
+m VSXQ d VUXP m VfX^ d VfX] m VfX] d VeX] m VeX] d VeX^ m VeX^ d VfX_
+m VfX_ d ViX` m ViX` d VmX` m VmX` d VpX_ m VpX_ d VqX^ m VqX^ d VrX[
+m VrX[ d VrXT m VrXT d VsXQ m VsXQ d VtXP m VqX^ d VqXT m VqXT d VrXQ
+m VrXQ d VtXP m VtXP d VuXP m VqX[ d VpXZ m VpXZ d ViXY m ViXY d VeXX
+m VeXX d VdXV m VdXV d VdXT m VdXT d VeXQ m VeXQ d ViXP m ViXP d VlXP
+m VlXP d VnXQ m VnXQ d VqXT m ViXY d VfXX m VfXX d VeXV m VeXV d VeXT
+m VeXT d VfXQ m VfXQ d ViXP m V}Xh d V}XU m V}XU d V?XQ m V?XQ d WAXP
+m WAXP d WCXP m WCXP d WFXQ m WFXQ d WGXT m V?Xh d V?XU m V?XU d W@XQ
+m W@XQ d WAXP m VzX` d WCX` m WOXh d WNXg m WNXg d WOXe m WOXe d WPXg
+m WPXg d WOXh m WOX` d WOXP m WPX` d WPXP m WKX` d WPX` m WKXP d WTXP
+m W`X` d W]X_ m W]X_ d W[X] m W[X] d WYXY m WYXY d WYXW m WYXW d W[XT
+m W[XT d W]XQ m W]XQ d W`XP m W`XP d WcXP m WcXP d WfXQ m WfXQ d WhXT
+m WhXT d WjXW m WjXW d WjXY m WjXY d WhX] m WhX] d WfX_ m WfX_ d WcX`
+m WcX` d W`X` m W`X` d W^X_ m W^X_ d W\X] m W\X] d W[XY m W[XY d W[XW
+m W[XW d W\XT m W\XT d W^XQ m W^XQ d W`XP m WcXP d WeXQ m WeXQ d WgXT
+m WgXT d WhXW m WhXW d WhXY m WhXY d WgX] m WgX] d WeX_ m WeX_ d WcX`
+m WsX` d WsXP m WtX` d WtXP m WtX] d WvX_ m WvX_ d WzX` m WzX` d W|X`
+m W|X` d X@X_ m X@X_ d XAX] m XAX] d XAXP m W|X` d W~X_ m W~X_ d X@X]
+m X@X] d X@XP m WoX` d WtX` m WoXP d WxXP m W|XP d XDXP m XaX` d XaXP
+m XbX` d XbXP m XbXY d XdX] m XdX] d XfX_ m XfX_ d XhX` m XhX` d XlX`
+m XlX` d XmX_ m XmX_ d XmX^ m XmX^ d XlX] m XlX] d XkX^ m XkX^ d XlX_
+m X^X` d XbX` m X^XP d XfXP m XtXY d YBXY m YBXY d YBX[ m YBX[ d YAX^
+m YAX^ d Y@X_ m Y@X_ d X}X` m X}X` d XzX` m XzX` d XvX_ m XvX_ d XtX]
+m XtX] d XsXY m XsXY d XsXW m XsXW d XtXT m XtXT d XvXQ m XvXQ d XzXP
+m XzXP d X|XP m X|XP d Y@XQ m Y@XQ d YBXT
+stroke
+m YBXT m YAXY d YAX] m YAX] d Y@X_ m XzX` d XwX_ m XwX_ d XuX] m XuX]
+d XtXY m XtXY d XtXW m XtXW d XuXT m XuXT d XwXQ m XwXQ d XzXP m YTX_
+d YVX` m YVX` d YVX] m YVX] d YTX_ m YTX_ d YQX` m YQX` d YMX` m YMX`
+d YJX_ m YJX_ d YIX^ m YIX^ d YIX] m YIX] d YJXZ m YJXZ d YLXY m YLXY
+d YRXW m YRXW d YTXV m YTXV d YVXU m YIX] d YJX[ m YJX[ d YLXZ m YLXZ
+d YRXX m YRXX d YTXW m YTXW d YVXU m YVXU d YVXS m YVXS d YTXQ m YTXQ
+d YQXP m YQXP d YMXP m YMXP d YJXQ m YJXQ d YIXT m YIXT d YIXP m YIXP
+d YJXQ m Y_X` d Y_XT m Y_XT d Y`XQ m Y`XQ d YcXP m YcXP d YfXP m YfXP
+d YiXQ m YiXQ d YlXT m Y`X` d Y`XT m Y`XT d YaXQ m YaXQ d YcXP m YlX`
+d YlXP m YmX` d YmXP m Y[X` d Y`X` m YhX` d YmX` m YlXP d YpXP m YxXh
+d YxXP m YzXh d YzXP m YuXh d YzXh m YuXP d Y}XP m ZEXh d ZEXU m ZEXU
+d ZFXQ m ZFXQ d ZIXP m ZIXP d ZKXP m ZKXP d ZMXQ m ZMXQ d ZNXT m ZFXh
+d ZFXU m ZFXU d ZGXQ m ZGXQ d ZIXP m ZBX` d ZKX` m Z`X_ d ZaX` m ZaX`
+d ZaX] m ZaX] d Z`X_ m Z`X_ d Z\X` m Z\X` d ZYX` m ZYX` d ZUX_ m ZUX_
+d ZTX^ m ZTX^ d ZTX] m ZTX] d ZUXZ m ZUXZ d ZXXY m ZXXY d Z^XW m Z^XW
+d Z`XV m Z`XV d ZaXU m ZTX] d ZUX[ m ZUX[ d ZXXZ m ZXXZ d Z^XX m Z^XX
+d Z`XW m Z`XW d ZaXU m ZaXU d ZaXS m ZaXS d Z`XQ m Z`XQ d Z\XP m Z\XP
+d ZYXP m ZYXP d ZUXQ m ZUXQ d ZTXT m ZTXT d ZTXP m ZTXP d ZUXQ m SoEk
+d SqEi m SqEi d SqEn m SqEn d SoEk m SoEk d SmEm m SmEm d SjEn m SjEn
+d SgEn m SgEn d SdEm m SdEm d SbEk m SbEk d S`Ei m S`Ei d S_Ee m S_Ee
+d S_E` m S_E` d S`E\ m S`E\ d SbEZ m SbEZ d SdEX m SdEX d SgEW m SgEW
+d SjEW m SjEW d SmEX m SmEX d SoEZ m SoEZ d SqE\ m SgEn d SeEm m SeEm
+d ScEk m ScEk d SbEi m SbEi d S`Ee m S`Ee d S`E` m S`E` d SbE\ m SbE\
+d ScEZ m ScEZ d SeEX m SeEX d SgEW m SzEn d SzEW m S{En d S{EW m S{Ec
+d S}Ee m S}Ee d TAEf m TAEf d TCEf m TCEf d TGEe m TGEe d THEc m THEc
+d THEW m TCEf d TEEe m TEEe d TGEc m TGEc d TGEW m SvEn d S{En m SvEW
+d S?EW m TCEW d TKEW m TSEd d TSEc m TSEc d TREc m TREc d TREd m TREd
+d TSEe m TSEe d TVEf m TVEf d TZEf m TZEf d T]Ee m T]Ee d T^Ed m T^Ed
+d T_Eb m T_Eb d T_EZ m T_EZ d T`EX m T`EX d TaEW m T^Ed d T^EZ m T^EZ
+d T_EX m T_EX d TaEW m TaEW d TcEW m T^Eb d T]Ea m T]Ea d TVE` m TVE`
+d TRE_ m TRE_ d TQE\ m TQE\ d TQEZ m TQEZ d TREX m TREX d TVEW m TVEW
+d TYEW m TYEW d T\EX m T\EX d T^EZ m TVE` d TSE_ m TSE_ d TRE\ m TRE\
+d TREZ m TREZ d TSEX m TSEX d TVEW m TkEf d TkEW m TlEf d TlEW m TlEc
+d TnEe m TnEe d TrEf m TrEf d TtEf m TtEf d TwEe m TwEe d TyEc m TyEc
+d TyEW m TtEf d TvEe m TvEe d TwEc m TwEc d TwEW m TgEf d TlEf m TgEW
+d ToEW m TtEW d T|EW m UDEf d UDEW m UEEf d UEEW m UEEc d UHEe m UHEe
+d UKEf m UKEf d UMEf m UMEf d UQEe m UQEe d UREc m UREc d UREW m UMEf
+d UPEe m UPEe d UQEc m UQEc d UQEW m UAEf d UEEf m UAEW d UIEW m UMEW
+d UVEW m U]E` d UjE` m UjE` d UjEb m UjEb d UiEd m UiEd d UhEe m UhEe
+d UfEf m UfEf d UbEf m UbEf d U_Ee m U_Ee d U]Ec m U]Ec d U[E` m U[E`
+d U[E^ m U[E^ d U]EZ m U]EZ d U_EX m U_EX d UbEW m UbEW d UeEW m UeEW
+d UhEX m UhEX d UjEZ m UiE` d UiEc m UiEc d UhEe m UbEf d U`Ee m U`Ee
+d U^Ec m U^Ec d U]E` m U]E` d U]E^ m U]E^ d U^EZ m U^EZ d U`EX m U`EX
+d UbEW m UtEn d UtEW m UuEn d UuEW m UpEn d UuEn m UpEW d UxEW m EZM~
+d EsM~ m EZM? d EsM? m EZMw d E`Mv m E`Mv d EZMv m EZMv d EZNG m EZNG
+d E`NG m E`NG d EZNF m EsM{ d EsNB m EeNc d EfNc m EfNc d EfNa m EfNa
+d EeNa m EeNa d EdNc m EdNc d EcNe m EcNe d EcNi m EcNi d EdNk m EdNk
+d EeNm m EeNm d EgNn m EgNn d EoNn m EoNn d ErNo m ErNo d EsNp m EeNm
+d EoNm m EoNm d ErNn m ErNn d EsNp m EsNp d EsNq m EgNm d EhNk m EhNk
+d EjNe m EjNe d EkNa m EkNa d EmN` m EmN` d EoN` m EoN` d ErNa m ErNa
+d EsNe m EsNe d EsNh m EsNh d ErNj m ErNj d EoNm m EjNe d EkNc m EkNc
+d EmNa m EmNa d EoNa m EoNa d ErNc m ErNc d EsNe m EcNy d EsNy m EcNz
+d EsNz m EfNz d EdN| m EdN| d EcN? m EcN? d EcOB m EcOB d EdOE m EdOE
+d EfOF m EfOF d EsOF m EcOB d EdOD m EdOD d EfOE m EfOE d EsOE m EcNu
+d EcNz m EsNu d EsN} m EsOB d EsOI m EZOQ d EnOQ m EnOQ d ErOR m ErOR
+d EsOT m EsOT d EsOW m EsOW d ErOY m ErOY d EoOZ m EZOR d EnOR m EnOR
+d ErOS m ErOS d EsOT m EcON d EcOW m EjO` d EjOn m EjOn d EgOn m EgOn
+d EeOm m EeOm d EdOl m EdOl d EcOi m EcOi d EcOf m EcOf d EdOc m EdOc
+d EfO` m EfO` d EjO_ m EjO_ d ElO_ m ElO_ d EoO` m EoO` d ErOc m ErOc
+d EsOf m EsOf d EsOh m EsOh d ErOl m ErOl d EoOn m EjOm d EfOm m EfOm
+d EdOl m EcOf d EdOd m EdOd d EfOb m EfOb d EjO` m EjO` d ElO` m ElO`
+d EoOb m EoOb d ErOd m ErOd d EsOf m EcOw d EsOw m EcOx d EsOx m EfOx
+d EdOz m EdOz d EcO} m EcO} d EcO? m EcO? d EdPC m EdPC d EfPD m EfPD
+d EsPD m EcO? d EdPB m EdPB d EfPC m EfPC d EsPC m EcOs d EcOx m EsOs
+d EsO{ m EsO? d EsPG m EcPO d EsPO m EcPP d EsPP m EfPP d EdPR m EdPR
+d EcPV m EcPV d EcPX m EcPX d EdP[ m EdP[ d EfP\ m EfP\ d EsP\ m EcPX
+d EdPZ m EdPZ d EfP[ m EfP[ d EsP[ m EcPL d EcPP m EsPL d EsPS m EsPX
+d EsP_ m EePg d EfPg m EfPg d EfPf m EfPf d EePf m EePf d EdPg m EdPg
+d EcPi m EcPi d EcPn m EcPn d EdPp m EdPp d EePq m EePq d EgPr m EgPr
+d EoPr m EoPr d ErPs m ErPs d EsPu m EePq d EoPq m EoPq d ErPr m ErPr
+d EsPu m EsPu d EsPv m EgPq d EhPp m EhPp d EjPi m EjPi d EkPf m EkPf
+d EmPe m EmPe d EoPe m EoPe d ErPf m ErPf d EsPi m EsPi d EsPm m EsPm
+d ErPo m ErPo d EoPq m EjPi d EkPg m EkPg d EmPf m EmPf d EoPf m EoPf
+d ErPg m ErPg d EsPi m GnFm d ahFm m GnFm d GnF~ m HoFm d HoFv m IpFm
+d IpFv m JqFm d JqFv m KqFm d KqFv m LrFm d LrF~ m MsFm d MsFv m NtFm
+d NtFv m OtFm d OtFv m PuFm d PuFv m QvFm d QvF~ m RwFm d RwFv m SwFm
+d SwFv m TxFm d TxFv m UyFm d UyFv m VzFm d VzF~ m WzFm d WzFv m X{Fm
+d X{Fv m Y|Fm d Y|Fv m Z}Fm d Z}Fv m [}Fm d [}F~ m \~Fm d \~Fv m ]?Fm
+d ]?Fv m _@Fm d _@Fv m `@Fm d `@Fv m aAFm d aAF~ m GmF_ d GjF^ m GjF^
+d GgFZ m GgFZ d GfFU m GfFU d GfFR m GfFR d GgFL m GgFL d GjFI m GjFI
+d GmFH m GmFH d GpFH m GpFH d GsFI m GsFI d GuFL m GuFL d GwFR m GwFR
+d GwFU m GwFU d GuFZ m GuFZ d GsF^ m GsF^ d GpF_ m GpF_ d GmF_ m GmF_
+d GkF^ m GkF^ d GjF] m GjF] d GiFZ m GiFZ d GgFU m GgFU d GgFR m GgFR
+d GiFL m GiFL d GjFJ m GjFJ d GkFI m GkFI d GmFH m GpFH d GrFI m GrFI
+d GsFJ m GsFJ d GtFL m GtFL d GuFR m GuFR d GuFU m GuFU d GtFZ m GtFZ
+d GsF] m GsF] d GrF^ m GrF^ d GpF_ m LaF_ d L^FT m L^FT d LaFU m LaFU
+d LdFV m LdFV d LhFV m LhFV d LkFU m LkFU d LnFS m LnFS d LoFO m LoFO
+d LoFN m LoFN d LnFK m LnFK d LkFI m LkFI d LhFH m LhFH d LdFH m LdFH
+d LaFI m LaFI d L`FJ m L`FJ d L^FL m L^FL d L^FM m L^FM d L`FN m L`FN
+d LaFM m LaFM d L`FL m LhFV d LjFU m LjFU d LlFS m LlFS d LnFO m LnFO
+d LnFN m LnFN d LlFK m LlFK d LjFI m LjFI d LhFH m LaF_ d LlF_ m LaF^
+d LgF^ m LgF^ d LlF_ m L}F_ d LyF^ m LyF^ d LwFZ m LwFZ d LvFU m LvFU
+d LvFR m LvFR d LwFL m LwFL d LyFI m LyFI d L}FH m L}FH d L?FH m L?FH
+d MBFI m MBFI d MEFL m MEFL d MFFR m MFFR d MFFU m MFFU d MEFZ m MEFZ
+d MBF^ m MBF^ d L?F_ m L?F_ d L}F_ m L}F_ d LzF^ m LzF^ d LyF] m LyF]
+d LxFZ m LxFZ d LwFU m LwFU d LwFR m LwFR d LxFL m LxFL d LyFJ m LyFJ
+d LzFI m LzFI d L}FH m L?FH d MAFI m MAFI d MBFJ m MBFJ d MDFL m MDFL
+d MEFR m MEFR d MEFU m MEFU d MDFZ m MDFZ d MBF] m MBF] d MAF^ m MAF^
+d L?F_ m QZFZ d Q\F\ m Q\F\ d Q`F_ m Q`F_ d Q`FH m Q_F^ d Q_FH m QZFH
+d QeFH m QuF_ d QqF^ m QqF^ d QoFZ m QoFZ d QnFU m QnFU d QnFR m QnFR
+d QoFL m QoFL d QqFI m QqFI d QuFH m QuFH d QwFH m QwFH d Q{FI m Q{FI
+d Q}FL m Q}FL d Q~FR m Q~FR d Q~FU m Q~FU d Q}FZ m Q}FZ d Q{F^ m Q{F^
+d QwF_ m QwF_ d QuF_ m QuF_ d QrF^ m QrF^ d QqF]
+stroke
+m QqF] m QqF] d QpFZ m QpFZ d QoFU m QoFU d QoFR m QoFR d QpFL m QpFL
+d QqFJ m QqFJ d QrFI m QrFI d QuFH m QwFH d QyFI m QyFI d Q{FJ m Q{FJ
+d Q|FL m Q|FL d Q}FR m Q}FR d Q}FU m Q}FU d Q|FZ m Q|FZ d Q{F] m Q{F]
+d QyF^ m QyF^ d QwF_ m RLF_ d RIF^ m RIF^ d RFFZ m RFFZ d REFU m REFU
+d REFR m REFR d RFFL m RFFL d RIFI m RIFI d RLFH m RLFH d RNFH m RNFH
+d RRFI m RRFI d RTFL m RTFL d RUFR m RUFR d RUFU m RUFU d RTFZ m RTFZ
+d RRF^ m RRF^ d RNF_ m RNF_ d RLF_ m RLF_ d RJF^ m RJF^ d RIF] m RIF]
+d RGFZ m RGFZ d RFFU m RFFU d RFFR m RFFR d RGFL m RGFL d RIFJ m RIFJ
+d RJFI m RJFI d RLFH m RNFH d RQFI m RQFI d RRFJ m RRFJ d RSFL m RSFL
+d RTFR m RTFR d RTFU m RTFU d RSFZ m RSFZ d RRF] m RRF] d RQF^ m RQF^
+d RNF_ m V^FZ d V`F\ m V`F\ d VdF_ m VdF_ d VdFH m VbF^ d VbFH m V^FH
+d VhFH m VtF_ d VrFT m VrFT d VtFU m VtFU d VwFV m VwFV d V{FV m V{FV
+d V~FU m V~FU d WAFS m WAFS d WBFO m WBFO d WBFN m WBFN d WAFK m WAFK
+d V~FI m V~FI d V{FH m V{FH d VwFH m VwFH d VtFI m VtFI d VsFJ m VsFJ
+d VrFL m VrFL d VrFM m VrFM d VsFN m VsFN d VtFM m VtFM d VsFL m V{FV
+d V}FU m V}FU d V?FS m V?FS d WAFO m WAFO d WAFN m WAFN d V?FK m V?FK
+d V}FI m V}FI d V{FH m VtF_ d V?F_ m VtF^ d VzF^ m VzF^ d V?F_ m WPF_
+d WLF^ m WLF^ d WJFZ m WJFZ d WIFU m WIFU d WIFR m WIFR d WJFL m WJFL
+d WLFI m WLFI d WPFH m WPFH d WRFH m WRFH d WVFI m WVFI d WXFL m WXFL
+d WYFR m WYFR d WYFU m WYFU d WXFZ m WXFZ d WVF^ m WVF^ d WRF_ m WRF_
+d WPF_ m WPF_ d WMF^ m WMF^ d WLF] m WLF] d WKFZ m WKFZ d WJFU m WJFU
+d WJFR m WJFR d WKFL m WKFL d WLFJ m WLFJ d WMFI m WMFI d WPFH m WRFH
+d WTFI m WTFI d WVFJ m WVFJ d WWFL m WWFL d WXFR m WXFR d WXFU m WXFU
+d WWFZ m WWFZ d WVF] m WVF] d WTF^ m WTF^ d WRF_ m [_FZ d [`FY m [`FY
+d [_FX m [_FX d [^FY m [^FY d [^FZ m [^FZ d [_F] m [_F] d [`F^ m [`F^
+d [dF_ m [dF_ d [hF_ m [hF_ d [lF^ m [lF^ d [mF] m [mF] d [nFZ m [nFZ
+d [nFX m [nFX d [mFV m [mFV d [jFT m [jFT d [dFR m [dFR d [bFQ m [bFQ
+d [_FN m [_FN d [^FK m [^FK d [^FH m [hF_ d [kF^ m [kF^ d [lF] m [lF]
+d [mFZ m [mFZ d [mFX m [mFX d [lFV m [lFV d [hFT m [hFT d [dFR m [^FJ
+d [_FK m [_FK d [bFK m [bFK d [gFI m [gFI d [kFI m [kFI d [mFJ m [mFJ
+d [nFK m [bFK d [gFH m [gFH d [lFH m [lFH d [mFI m [mFI d [nFK m [nFK
+d [nFM m [|F_ d [yF^ m [yF^ d [vFZ m [vFZ d [uFU m [uFU d [uFR m [uFR
+d [vFL m [vFL d [yFI m [yFI d [|FH m [|FH d [?FH m [?FH d \BFI m \BFI
+d \DFL m \DFL d \FFR m \FFR d \FFU m \FFU d \DFZ m \DFZ d \BF^ m \BF^
+d [?F_ m [?F_ d [|F_ m [|F_ d [zF^ m [zF^ d [yF] m [yF] d [xFZ m [xFZ
+d [vFU m [vFU d [vFR m [vFR d [xFL m [xFL d [yFJ m [yFJ d [zFI m [zFI
+d [|FH m [?FH d \AFI m \AFI d \BFJ m \BFJ d \CFL m \CFL d \DFR m \DFR
+d \DFU m \DFU d \CFZ m \CFZ d \BF] m \BF] d \AF^ m \AF^ d [?F_ m \SF_
+d \PF^ m \PF^ d \NFZ m \NFZ d \LFU m \LFU d \LFR m \LFR d \NFL m \NFL
+d \PFI m \PFI d \SFH m \SFH d \VFH m \VFH d \YFI m \YFI d \\FL m \\FL
+d \]FR m \]FR d \]FU m \]FU d \\FZ m \\FZ d \YF^ m \YF^ d \VF_ m \VF_
+d \SF_ m \SF_ d \QF^ m \QF^ d \PF] m \PF] d \OFZ m \OFZ d \NFU m \NFU
+d \NFR m \NFR d \OFL m \OFL d \PFJ m \PFJ d \QFI m \QFI d \SFH m \VFH
+d \XFI m \XFI d \YFJ m \YFJ d \ZFL m \ZFL d \\FR m \\FR d \\FU m \\FU
+d \ZFZ m \ZFZ d \YF] m \YF] d \XF^ m \XF^ d \VF_ m `cFZ d `dFY m `dFY
+d `cFX m `cFX d `bFY m `bFY d `bFZ m `bFZ d `cF] m `cF] d `dF^ m `dF^
+d `hF_ m `hF_ d `lF_ m `lF_ d `pF^ m `pF^ d `qF] m `qF] d `rFZ m `rFZ
+d `rFX m `rFX d `qFV m `qFV d `mFT m `mFT d `hFR m `hFR d `eFQ m `eFQ
+d `cFN m `cFN d `bFK m `bFK d `bFH m `lF_ d `oF^ m `oF^ d `pF] m `pF]
+d `qFZ m `qFZ d `qFX m `qFX d `pFV m `pFV d `lFT m `lFT d `hFR m `bFJ
+d `cFK m `cFK d `eFK m `eFK d `kFI m `kFI d `oFI m `oFI d `qFJ m `qFJ
+d `rFK m `eFK d `kFH m `kFH d `pFH m `pFH d `qFI m `qFI d `rFK m `rFK
+d `rFM m `{F_ d `yFT m `yFT d `{FU m `{FU d `?FV m `?FV d aBFV m aBFV
+d aFFU m aFFU d aHFS m aHFS d aIFO m aIFO d aIFN m aIFN d aHFK m aHFK
+d aFFI m aFFI d aBFH m aBFH d `?FH m `?FH d `{FI m `{FI d `zFJ m `zFJ
+d `yFL m `yFL d `yFM m `yFM d `zFN m `zFN d `{FM m `{FM d `zFL m aBFV
+d aEFU m aEFU d aGFS m aGFS d aHFO m aHFO d aHFN m aHFN d aGFK m aGFK
+d aEFI m aEFI d aBFH m `{F_ d aGF_ m `{F^ d aAF^ m aAF^ d aGF_ m aWF_
+d aTF^ m aTF^ d aQFZ m aQFZ d aPFU m aPFU d aPFR m aPFR d aQFL m aQFL
+d aTFI m aTFI d aWFH m aWFH d aZFH m aZFH d a]FI m a]FI d a_FL m a_FL
+d a`FR m a`FR d a`FU m a`FU d a_FZ m a_FZ d a]F^ m a]F^ d aZF_ m aZF_
+d aWF_ m aWF_ d aUF^ m aUF^ d aTF] m aTF] d aSFZ m aSFZ d aQFU m aQFU
+d aQFR m aQFR d aSFL m aSFL d aTFJ m aTFJ d aUFI m aUFI d aWFH m aZFH
+d a\FI m a\FI d a]FJ m a]FJ d a^FL m a^FL d a_FR m a_FR d a_FU m a_FU
+d a^FZ m a^FZ d a]F] m a]F] d a\F^ m a\F^ d aZF_ m GnW~ d ahW~ m GnW~
+d GnWn m HoW~ d HoWv m IpW~ d IpWv m JqW~ d JqWv m KqW~ d KqWv m LrW~
+d LrWn m MsW~ d MsWv m NtW~ d NtWv m OtW~ d OtWv m PuW~ d PuWv m QvW~
+d QvWn m RwW~ d RwWv m SwW~ d SwWv m TxW~ d TxWv m UyW~ d UyWv m VzW~
+d VzWn m WzW~ d WzWv m X{W~ d X{Wv m Y|W~ d Y|Wv m Z}W~ d Z}Wv m [}W~
+d [}Wn m \~W~ d \~Wv m ]?W~ d ]?Wv m _@W~ d _@Wv m `@W~ d `@Wv m aAW~
+d aAWn m GnFm d GnW~ m GnFm d HGFm m GnGR d G{GR m GnGw d G{Gw m GnH\
+d G{H\ m GnIA d G{IA m GnIf d HGIf m GnJJ d G{JJ m GnJo d G{Jo m GnKT
+d G{KT m GnKy d G{Ky m GnL^ d HGL^ m GnMC d G{MC m GnMg d G{Mg m GnNL
+d G{NL m GnNq d G{Nq m GnOV d HGOV m GnO{ d G{O{ m GnP` d G{P` m GnQD
+d G{QD m GnQi d G{Qi m GnRN d HGRN m GnRs d G{Rs m GnSX d G{SX m GnS}
+d G{S} m GnTa d G{Ta m GnUF d HGUF m GnUk d G{Uk m GnVP d G{VP m GnVu
+d G{Vu m GnWZ d G{WZ m GnW~ d HGW~ m FgFm d F{Fm m GFFv d GHFw m GHFw
+d GLF{ m GLF{ d GLFd m GKFz d GKFd m GFFd d GPFd m GIIs d GFIr m GFIr
+d GDIn m GDIn d GBIi m GBIi d GBIf m GBIf d GDI` m GDI` d GFI] m GFI]
+d GII\ m GII\ d GLI\ m GLI\ d GOI] m GOI] d GQI` m GQI` d GSIf m GSIf
+d GSIi m GSIi d GQIn m GQIn d GOIr m GOIr d GLIs m GLIs d GIIs m GIIs
+d GGIr m GGIr d GFIq m GFIq d GEIn m GEIn d GDIi m GDIi d GDIf m GDIf
+d GEI` m GEI` d GFI^ m GFI^ d GGI] m GGI] d GII\ m GLI\ d GNI] m GNI]
+d GOI^ m GOI^ d GPI` m GPI` d GQIf m GQIf d GQIi m GQIi d GPIn m GPIn
+d GOIq m GOIq d GNIr m GNIr d GLIs m GFLg d GHLh m GHLh d GLLk m GLLk
+d GLLT m GKLj d GKLT m GFLT d GPLT m GDO_ d GEO^ m GEO^ d GDO] m GDO]
+d GBO^ m GBO^ d GBO_ m GBO_ d GDOa m GDOa d GEOb m GEOb d GHOc m GHOc
+d GMOc m GMOc d GPOb m GPOb d GQOa m GQOa d GSO_ m GSO_ d GSO] m GSO]
+d GQOZ m GQOZ d GNOX m GNOX d GHOV m GHOV d GFOU m GFOU d GDOS m GDOS
+d GBOO m GBOO d GBOL m GMOc d GOOb m GOOb d GPOa m GPOa d GQO_ m GQO_
+d GQO] m GQO] d GPOZ m GPOZ d GMOX m GMOX d GHOV m GBON d GDOO m GDOO
+d GFOO m GFOO d GLOM m GLOM d GOOM m GOOM d GQON m GQON d GSOO m GFOO
+d GLOL m GLOL d GPOL m GPOL d GQOM m GQOM d GSOO m GSOO d GSOR m GDRX
+d GERW m GERW d GDRV m GDRV d GBRW m GBRW d GBRX m GBRX d GERZ m GERZ
+d GHR[ m GHR[ d GMR[ m GMR[ d GPRZ m GPRZ d GQRX m GQRX d GQRU m GQRU
+d GPRS m GPRS d GMRQ m GMRQ d GIRQ m GMR[ d GORZ m GORZ d GPRX m GPRX
+d GPRU m GPRU d GORS m GORS d GMRQ m GMRQ d GORP m GORP d GQRN m GQRN
+d GSRL m GSRL d GSRI m GSRI d GQRF m GQRF d GPRE m GPRE d GMRD m GMRD
+d GHRD m GHRD d GERE m GERE d GDRF m GDRF d GBRI m GBRI d GBRJ m GBRJ
+d GDRK m GDRK d GERJ m GERJ d GDRI m GPRO d GQRL m GQRL d GQRI m GQRI
+d GPRF m GPRF d GORE m GORE d GMRD m GMUQ d GMT| m GNUT d GNT| m GNUT
+d GAUC m GAUC d GTUC m GIT| d GQT| m GEXL d GBXA m GBXA d GEXB m GEXB
+d GHXC m GHXC d GLXC m GLXC d GOXB m GOXB d GQX@
+stroke
+m GQX@ m GQX@ d GSW| m GSW| d GSW{ m GSW{ d GQWx m GQWx d GOWv m GOWv
+d GLWu m GLWu d GHWu m GHWu d GEWv m GEWv d GDWw m GDWw d GBWy m GBWy
+d GBWz m GBWz d GDW{ m GDW{ d GEWz m GEWz d GDWy m GLXC d GNXB m GNXB
+d GPX@ m GPX@ d GQW| m GQW| d GQW{ m GQW{ d GPWx m GPWx d GNWv m GNWv
+d GLWu m GEXL d GPXL m GEXK d GKXK m GKXK d GPXL m ahFm d ahW~ m ahFm
+d aPFm m ahGR d a\GR m ahGw d a\Gw m ahH\ d a\H\ m ahIA d a\IA m ahIf
+d aPIf m ahJJ d a\JJ m ahJo d a\Jo m ahKT d a\KT m ahKy d a\Ky m ahL^
+d aPL^ m ahMC d a\MC m ahMg d a\Mg m ahNL d a\NL m ahNq d a\Nq m ahOV
+d aPOV m ahO{ d a\O{ m ahP` d a\P` m ahQD d a\QD m ahQi d a\Qi m ahRN
+d aPRN m ahRs d a\Rs m ahSX d a\SX m ahS} d a\S} m ahTa d a\Ta m ahUF
+d aPUF m ahUk d a\Uk m ahVP d a\VP m ahVu d a\Vu m ahWZ d a\WZ m ahW~
+d aPW~ m GuIy d G{I_ d HBI] d HHJH d HOHo d HUIN d H\IX d HbII d HiIA
+d HoJy d HvIT d H|Hg d ICHa d IIK^ d IPIt d IVIW d I\H} d IcIZ d IiHv
+d IpH{ d IvJV d I}Hh d JCIp d JJJT d JPI@ d JWJE d J]Ir d JdIh d JjIv
+d JqHY d JwJK d J~JF d KDIm d KKKF d KQIM d KXIg d K^JH d KdJI d KkHy
+d KqKj d KxKI d K~HX d LEHb d LKHS d LRJ\ d LXIS d L_J@ d LeIo d LlJD
+d LrHi d LyHf d L?HW d MFKD d MLJM d MSJm d MYIe d M_HW d MfH[ d MlJ[
+d MsIN d MyJe d N@I\ d NFHo d NMI^ d NSJo d NZIY d N`KH d NgIU d NmJO
+d NtIW d NzI` d OAIZ d OGIS d ONI] d OTIY d OZJx d OaIA d OgKK d OnIH
+d OtHc d O{Iq d PAIl d PHHt d PNJG d PUI} d P[JC d PbJQ d PhHm d PoI]
+d PuIp d P|Hg d QBJE d QIIO d QOIw d QVJc d Q\Im d QbL] d QiJd d QoJ{
+d QvJO d Q|KW d RCLA d RILr d RPKJ d RVJm d R]MM d RcKt d RjMI d RpO@
+d RwOJ d R}NE d SDPF d SJO[ d SQOo d SWPk d S]P~ d SdSq d SjRg d SqSO
+d SwSP d S~UC d TDTT d TKTR d TQUV d TXVQ d T^UK d TeS} d TkVZ d TrWH
+d TxUE d T?UP d UETy d ULUn d URUH d UXTV d U_S~ d UeSm d UlR\ d UrQB
+d UyRS d U?QD d VFPW d VLNx d VSO` d VYMR d V`Me d VfNS d VmMB d VsNi
+d VzKi d W@Ja d WGLF d WMKq d WTJg d WZKS d W`Ij d WgK@ d WmJG d WtIr
+d WzJO d XAIJ d XGIg d XNJo d XTIu d X[IA d XaIq d XhI~ d XnIa d XuJO
+d X{JB d YBI[ d YHIV d YOId d YUI? d Y[IB d YbHv d YhJI d YoI` d YuH^
+d Y|IC d ZBJ\ d ZIJP d ZOI? d ZVKX d Z\IN d ZcH} d ZiHD d ZpHM d ZvGz
+d Z}IT d [CIk d [JIj d [PHQ d [VJZ d []Hj d [cHu d [jIs d [pJ^ d [wHR
+d [}IO d \DIv d \JIS d \QIj d \WIR d \^Ig d \dJG d \kId d \qIs d \xHZ
+d \~Id d ]EHp d ]KIS d ]RH_ d ]XHT d ]^Jd d ]eJX d ]kIQ d ]rJ` d ]xHb
+d ]?Ha d ^EJK d ^LID d ^RHB d ^YIj d ^_Ig d ^fIm d ^lJd d ^sJ^ d ^yI{
+d _@Ie d _FHp d _MIQ d _SJa d _YJS d _`K} d _fJF d _mI] d _sHz d _zJA
+d `@Gn d `GHs d `MJz d `TKA d `ZI] d `aJi d `gHk d `nJN d `tHe d `{Hn
+d aAIT d aHHv d aNK^ d aUJK d a[J@ d aaIW d ahHj
+stroke
+grestore showpage
diff --git a/obsolete/macros/latex209/contrib/aasmacros/sgi9279.eps b/obsolete/macros/latex209/contrib/aasmacros/sgi9279.eps
new file mode 100644
index 0000000000..610394c127
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aasmacros/sgi9279.eps
@@ -0,0 +1,817 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: IRAF SGI plot
+%%Creator: sgieps
+%%CreationDate: Fri May 10 04:35:29 1991
+%%BoundingBox: 72 72 540 384
+%%EndComments
+/devppi 300 def
+/userppi 72 def
+/pagewidth 8.5 def
+/devpixtouser { userppi mul devppi div } def
+/setscale { 1 devpixtouser 1 devpixtouser scale } def
+/pagetolandscape 90 def
+/setcoords { pagewidth userppi mul 0 translate
+ pagetolandscape rotate setscale } def
+/setjoins { 1 setlinejoin 1 setlinecap } def
+gsave setscale setjoins
+/getpoint {
+ currentfile read pop 8#77 and 6 bitshift
+ currentfile read pop 8#77 and or
+ currentfile read pop 8#77 and 6 bitshift
+ currentfile read pop 8#77 and or
+ } def
+/m { getpoint moveto } def
+/d { getpoint lineto } def
+01 setlinewidth
+03 setlinewidth
+m WBLs d WFL} d WOMF d W[ML d WgML d WsMF d W}L} d XALs d W|Lh d WsL_
+d WgLZ
+stroke
+03 setlinewidth
+m WMLq d WRLr d WTLp d WTLm d WQLk d WMLk d WKLk m WMLk d WLLh d WILe
+d WDLd d WBLf d WCLi m WZLn
+stroke
+03 setlinewidth
+m WWLk d W[Ll d W_Lj d W^Lh d WYLd d WLLc d WJLa d WQL] m WdLh
+stroke
+03 setlinewidth
+m WfLf d WaLd d WXL^ d WVLZ d WYLX d W^LZ d WgLa d WiLd d WfLf m WoLb
+m WDLo d WBLs m SLN[ d SBNc d RwNk d RjNr d R^Ny d RWOA d RSOL d RMOV
+d RJO` d RROi d RXOn
+stroke
+03 setlinewidth
+m ROOu d RMOw d RNOy d RROz d RVOy d RYOv d RXOu m RYOv d R]Ov d RbOu
+d RdOr d RbOp d R]Op m RPO~
+stroke
+03 setlinewidth
+m RUO} d RRO? d RTPB d RXPB d R_P@ d RdOx d RgOw d RkO| m RVPF
+stroke
+03 setlinewidth
+m RYPH d R\PD d RhPA d RnPA d RpPC d RlPF d R`PJ d RZPJ d RYPH m R\PN
+m RoPN d RpPP d RsP\ d RwPe d SBPf d SQPb d SaP] d SqP] d TAP` d TPPb
+d T_P_ d TfP\
+stroke
+03 setlinewidth
+m TqP^ d TvP^ d TxP] d TxPZ d TuPX d TpPW d ToPX m TpPW d TpPT d TlPQ
+d ThPQ d TePR d TgPV m T~PZ
+stroke
+03 setlinewidth
+m T{PX d T?PX d UCPV d UBPT d T}PP d TpPO d TnPM d TtPJ m UHPT
+stroke
+03 setlinewidth
+m UJPR d UDPQ d T{PJ d TzPF d T|PE d UBPF d UKPM d ULPQ d UJPR m URPN
+m UMPD d UNPC d UVOy d U\Oo d UaOe d U`O[ d U\OQ d UVOG d UPN} d UJNs
+d UBNi d T?Nf
+stroke
+03 setlinewidth
+m TRNW d TRNZ d TUN\ d TYN[ d T\NY d T\NV d T[NU m T\NV d T`NU d TdNR
+d TdNP d TbNN d T]NO m TZN_
+stroke
+03 setlinewidth
+m T]N] d T\N` d T`Nb d TcNa d ThN] d ThNU d TjNS d TqNV m TdNe
+stroke
+03 setlinewidth
+m TgNf d ThNb d TqN[ d TvNZ d TyN[ d TxN_ d ToNf d TjNh d TgNf m TnNk
+m TVNP d TSNN d TCNK d SsNK d SdNM d SXNS d SLN[ m WTLs d W]L| d WjLx
+d WjLm d W]Li d WTLs m SPN~ d SKOH d SIOR d SJO\ d SNOe d SUOn d S_Ov
+d SkO} d SyPA d THPC d TUPA d TVPA
+stroke
+03 setlinewidth
+m TXO} d T]O} d T_O{ d T]Ox d TYOv d TTOv d TROw d TTO{ d TXO} d T^O?
+d TfP@ m TlO|
+stroke
+03 setlinewidth
+m T\On d TpOx d ToOx d T_Ou d T]Ot d TaOq m TaOq d TcOp m TtOu
+stroke
+03 setlinewidth
+m TuOs d TpOr d TeOm d TbOi d TdOg d TjOh d TuOm d TwOq d TuOs m T|Om
+m TuOe d TxO` d TwOV d TrOL d TlOC d TdNz d T[Nr d TONl d T@Ni d SqNj
+d ScNn d S^Nq m S^Nq d SPN~ m SaOa d SjOi d SwOo d TDOt d TQOu d T\Oo
+d TeOf d TgO\ d TbOQ d T[OH d TQOB d TOOB
+stroke
+03 setlinewidth
+m SfOK d SmON d SqOR d StOU d StOX d SqOY d SmOX d SjOU d SiOQ d SlOP
+d SqOR m S{OV
+stroke
+03 setlinewidth
+m SsOM d SwOO d SzON d SzOJ d SwOG d SrOF d SpOG d SpOJ d SsOM d SwOQ
+d S~OT m TFOQ
+stroke
+03 setlinewidth
+m THOO d TCOM d S|OF d S{OB d S~OA d TCOC d TJOJ d TKON d THOO m TQOL
+m SeOU d SbOW d SaOa m T@Oa d TKOg d TVOc d TTOY d THOY d T@Oa
+stroke
+01 setlinewidth
+m SaGW d SOGd d RxGk d R_Ge d RFG_ d QlG\ d QQG\ d PyGa d PeGm d PQGw
+d OwG} d OaHE d OPHS d ODHb d NxHr d NgH? d NQIH d NDIW d MwIg d MgIt
+d MUJ@ d MEJO d LxJ^ d LmJm d LcJ~ d L]KN d L\K` d L[Kq d LZLC d LSLS
+d LGLc d K|Lr d KxMD d KvMU d KoMf d KjMw d K_NG d KSNV d KRNg d KWNx
+d KXOJ d KUO[ d KPOl d KLO} d KHPO d KFP` d KIPq d KMQC d KKQT d KBQd
+m KBQd d JwQt d JlRD d JfRU d JeRf d JdRw d JcSI d JcSZ d JdSl d JeS}
+d JgTO d JkT_ d JrTo d JyUB d KAUV d KKUY d KWUH d K_Tu d KaTd d KbTS
+d KeTB d KjSo d KxSf d LQSo d LcS} d LmTM d LvT^ d L?Tn d MNT| d M`UJ
+d MmUX d MuUi d NEUy d NXVB d NqU~ d OKU{ d OdVA d O~VD d PVVK d PkVW
+d Q@V_ d QYV[ d QsVW d RNVW d RhVW d SAVR d SYVH d SoVJ d TEVX d TVVX
+m TVVX d TdVG d TyU} d UMUq d UaUf d U{Ue d VUUd d VnU` d WHU\ d W`UU
+d WvUL d XJU@ d X^Tu d XsTk d YHT` d Y\TU d YmTH d Y}Sz d ZLSl d ZYS]
+d ZgSN d ZuS@ d [CRq d [MRa d [VRQ d [^R@ d [fQo d [nQ_ d [vQN d [}P}
+d \EPm d \LP\ d \QPK d \XOz d \^Oi d \bOX d \dOF d \oNw d \zNg d \}NV
+d \yNE d \vMs d \xMb d \?MQ d ]LMA d ]ULq d ]TL` d ]NLO d ]FK~ d ]@Km
+m ]@Km d \?K\ d ]DKK d ]QJ{ d ]]Jl d ]cJ[ d ]eJI d ]eIx d ]cIg d ]^IU
+d ]YID d ]XHs d ]VHb d ]LHP d \|H@ d \iG{ d \UHG d \FHX d \IHh d \WHw
+d \dIH d \kIY d \hIi d \XIw d \IJF d [|JT d [iJa d []Jp d [ZKB d [TKS
+d [IKc d ZzKp d Z`Kx d ZGKt d ZEKb d ZDKQ d ZBK@ d Y?Jo d Y|J] d Y|JL
+d ZAI{ d ZNIl d ZeId d [CIc d [ZId d [TIY d [AII d ZmH} d ZTIJ d ZEIH
+m ZEIH d YyHx d YbHo d YKHc d XuH] d XaHh d XOHw d W}Hs d WiHe d WRH\
+d V~HQ d VpHB d VgGr d V^Gb d VQGQ d U|GU d UjGc d UTGj d TyGj d TxGj
+d TwGi d TvGi d TvGi d TuGi d TtGi d TsGh d TrGh d TqGh d TqGh d TpGg
+d ToGg d TnGg d TmGg d TlGf d TlGf d TkGf d TjGe d TiGe d ThGe d ThGd
+d TgGd d TfGd d TeGd d TdGc d TdGc d TcGc d TbGb d TaGb d T`Gb d T`Ga
+m T`Ga d T_Ga d T^Ga d T]G` d T\G` d T\G` d T[G` d TZG_ d TYG_ d TXG_
+d TXG^ d TWG^ d TVG^ d TUG] d TTG] d TSG] d TSG] d TRG\ d TQG\ d TPG\
+d TOG\ d TNG\ d TNG[ d TMG[ d TLG[ d TKG[ d TJG[ d TIG[ d THG[ d TGG[
+d TGGZ d TFGZ d TEGZ d TDGZ d TCGZ d TBGZ d TAGZ d T@GZ d S?GZ d S?GZ
+d S~GY d S}GY d S|GY d S{GY d SzGY d SyGY d SxGY d SwGX d SvGX d SvGX
+m SvGX d SuGX d StGX d SsGW d SrGW d SqGW d SpGV d SoGV d SnGV d SnGV
+d SmGU d SlGU d SkGU d SjGT d SiGT d ShGT d SgGT d SgGT d SfGT d SeGT
+d SdGT d SdGU d ScGU d SbGV d SbGV d SaGW d SaGW m [VGW d [cGW d [VGW
+d [VGW m OiKJ d OsKQ d OzK[ d O~Kd d O}Kn d OtKu d OfKy d OVKy d OGKw
+d O@Kp d N}Kf d N{K\ d N{KR d N?KJ d OKKG d O[KH d OiKJ d OiKJ m NiLs
+d N^Lx d NPLx d NHLq d NOLg d NZLc d NeLj d NiLs d NiLs m Z~TZ d [BTc
+d [LTl d [XTq d [dTn d [oTg d [uT] d [tTS d [mTJ d [bTC d [VTB d [KTH
+d [ATQ d Z~TZ d Z~TZ m KrVC d KvVL d K?VU d LJV] d LWVa d LbV_ d LmVX
+d LuVO d LzVE d LwUz d LpUq d LeUj d LYUg d LLUj d L@Up d KwUy d KrVC
+d KrVC m XbH? d XfII d XoIQ d XzIQ d YCIH d YFH~ d X?Hu d XsHq d XhHv
+d XbH? d XbH? m XBJE d WsJM d WjJ\ d WhJk d WoJx d WyKE d W}KR d W~K`
+d W~Ko d XCK? d XDLM d WvLQ d W_LQ d WMLY d V?Le d VyLs d W@MA d WNMM
+d W_MU d WuMP d XHML d XNMY d XGMf d XAMt d WvM? d WfNH d WUNS d WPN_
+d W_Nj d WoNs d W?N| d XNOF d X]OQ d XjO\ d XmOi d XhOw d XlPE d X{PC
+d X~Os d X?Oe d YMO_ d YbOZ d YrOP d Y|OC d Y{Nu d YqNh d YaN^ d YQNY
+d Y^NL d YcM~ m YcM~ d YbMp d Y_Mb d Y\MT d YXMF d YTLx d YLLk d YCL^
+d X~LP d YDLC d YLKv d YOKh d YGK[ d XxKP d XcKJ d XtKB d Y@Ju d YAJg
+d XwJ[ d XhJP d XVJG d XBJE d XBJE m TuKJ d UBKJ d TuKJ d TuKJ m RnKm
+d R[Ky d RDLA d QlLH d QVLQ d P~LX d PkLd d PZLq d PJL? d O{MN d OoM]
+d OaMk d OOMy d OGNI d O@NZ d NvNj d NmNz d NiOL d NgO] d N_Om d NPO|
+d NMPK d N`PY d NrPe d N{Pw d ONP} d OgPs d OoPb d OpPP d OkP@ d ObOn
+d OhO^ d OzOR d PIOC d PUNt d PiNh d PzN[ d P}NJ d QJM| d QWMm d Q`M\
+d QrMS d R@Ma d Q}Ms d QvNE d QpNU d QiNf d QZNt d QMOC d QIOT m QIOT
+d QIOf
+stroke
+m QIOf d QJOw d QOPI d QZPY d QoPc d RLPd d RPPm d RAP~ d QxQP d Q|Qa
+d RFQr d RYQ} d RsRB d SIRJ d S`RR d SwR\ d TMRe d TbR_ d TwRR d T?RC
+d ToQu d TUQp d S|Qk d TFQY d T[QU d TrQa d UKQd d UeQ^ d U}QR d VPQO
+d VZQ_ d VeQr d VvQ~ d WLQx d WcQk d WvQZ d X@QK d WlQG d WTP? d WEPq
+d V{P` d VpPP d VaPB d VWOr d VROa d VSOO d VRN~ d VINm d VCN\ m VCN\
+d U{NL d UsM{ d UkMk d UcMZ d U^M] d UYMa d UUMe d UPMh d UKMl d UFMo
+d U@Mq d T{Mr d TvMr d TqMq d TlMn d TfMk d TaMh d T\Md d TVMa d TQM_
+d TKM] d TEM] d S?M] d SxM\ d SrM\ d SjM\ d SbM[ d SZMY d SSMW d SQMV
+d SUMU d S\MT d SeMS d SlMP d SqMM d SvMI d S{MF d S?MB d TBL~ d TFL{
+d TJLx d TOLv d TTLv d TYLw d T_Ly d TeL{ d TkL~ d TqMA d TwMD m TwMD
+d T~MG d UDMJ d UJMM d UPMP d UVMR d U\MT d UaMT d UeMS d UiMP d UmML
+d UpMH d UrMC d UtL~ d UuLy d UuLu d UtLp d UpLl d UlLi d UgLf d UaLd
+d U[Lb d UTLb d UMLa d UFLa d U@L` d TzL_ d TtL] d ToLZ d TjLW d TfLT
+d TbLP d T^LL d TZLI d TWLE d TTLA d TPK~ d TKKz d TGKw d TBKt d S|Kq
+d SwKo d SrKm d SlKj d SfKh d S`Ke d SZKb d STK_ d SNK\ d SHKY m SHKY
+d SBKW d R~KV d RzKX d RxK[ d RvK` d RtKe d RrKi d RnKm d RnKm m SALs
+d SAL~ d R|MF d RrM@ d RmLt d RxLl d SALs d SALs m YnPD d YvPM d ZAPT
+d ZNPT d ZWPK d Z[P@ d ZWOu d ZOOl d ZEOi d YzOo d YqOy d YnPD d YnPD
+m LxQI d LtQR d LrQ[ d LqQe d LtQo d LzQz d MBRA d MHQ~ d MNQt d MTQj
+d MZQa d MaQY d MjQR d MuQK d MtQC d MgP| d MXP{ d MJP| d L?QA d LxQI
+d LxQI m W\QI d WUQR d WJQX d V|Q\ d VmQ[ d V_QV d VUQO d VQQG d VVP}
+d V_Pu d VkPn d VxPl d WEPo d WQPw d WZQ@ d W\QI d W\QI m NrQl d NeQu
+d NVQ} d NLRG d NBRR d MxR\ d MjRe d MZRm d MZRw d MjS@ d M}R? d NORz
+d N^R} d NiSH d NoSU d NnSb d NjSn d NhSz d NjTF d NnTS d NsT_ d N{Tj
+d OGTs d OWTy d OiT~ d OuUG d O|US d PDU^ d PQUg d PbUm d PuUo d QFUn
+d QUUh d QhUb d QvU_ d QdUX d QZUM d QUUB d QOTv d QITj d Q@T_ d PtTU
+d PfTM d PYTD d PRSx d POSl d PMS` d PLSS d PKSG d PJR{ m PJR{ d PGRn
+d PBRb d O{RW d OrRL d OgRB d O]Qx d OSQm d OJQ_ d OBQV d N{Q_ d NrQl
+d NrQl m UwTZ d U}Tb d VKTg d VZTk d VgTm d VuTm d W@Tk d WLTf d WWT`
+d WdTZ d WXTT d WLTN d WATH d VvTF d VjTH d V]TL d VPTQ d VATT d UwTZ
+d UwTZ m XEJh d XNJm d XOJd d XEJh d XEJh m P|Ls d PqLy d PhM@ d P`MH
+d PWMP d PPMY d PXM` d PgMa d PvM] d QAMW d QIMO d QRMH d Q[M@ d QfLy
+d QpLr d QfLk d QXLk d QILo d P|Ls d P|Ls m V}Ls d WAL} d WJMF d WUMN
+d WaMQ d WnMM d WyMF d XBL} d XFLr d XBLh d WyL_ d WmLX d WaLT d WULX
+d WJL_ d WALi d V}Ls d V}Ls m OgN[ d OfNf d OhNq d OlNu d OqNm d OtNa
+d OnNV d OgN[ d OgN[ m RqN[ d RbNa d RTNg d RINp d RANz d Q{OE d QvOP
+d QsO\ d QwOf d Q?Op d RIOy d RSPC d RYPM d R^PX d RdPb d RlPn d RvPx
+d SCPy d SRPr d SaPk d SrPl d TCPq d TRPq d T_Pi d TnPc d T}P_ d UJPW
+d UUPN d U^PE d UdOz d UmOp d UuOe d UuO[ d UlOQ d UcOG d U^N| d U[Nq
+d UWNf d UQN[ d UFNS d TxNL d TiNF d TZNB d TIM? d SxM~ d SgN@ d SXNE
+d SKNL d R}NT d RqN[ m RqN[ d RqN[ m NmRr d NsR{ d N|SC d OGSC d ORR}
+d OYRs d OXRi d OQR_ d OGRX d N~RW d NuR^ d NoRh d NmRr d NmRr m O\Sw
+d O\TA d O]TJ d O`TS d OhT\ d OrTX d OvTO d OvTF d OuS} d OsSr d OqSf
+d OoS\ d OlSU d OgSX d ObSb d O^Sm d O[Sw d O\Sw m WGLs d WKL| d WUME
+d WaMI d WmME d WwL| d W|Ls d WwLi d WmL` d WaL\ d WULa d WKLi d WGLs
+d WGLs m S`N[ d SVNc d SLNk d SBNs d RwNz d RnOB d RmOL d RoOW d RsOa
+d RzOj d R~Ot d SAO? d SHPG d SUPL d SdPQ d SsPU d TBPY d TPPZ d T^PV
+d TjPP d TvPH d U@PA d UIOx d UPOn d UVOe d UUO[ d UPOQ d UJOH d UCN~
+d T|Nu d TrNm d TgNf d T[N` d TMNZ d S}NW d SmNV d S`N[ d S`N[ m WKLs
+d WPL| d W[MD d WgMC d WrL| d WwLs d WqLi d WfLb d W[Lb d WPLi d WKLs
+d WKLs m S@N~ d R}OH d R}OR d R?O\ d SCOf d SIOo d SQOx d SZP@ d SePF
+d SsPK d TAPP d TNPR d T[PO d TgPH d TqP@ d TzOx d UCOo d UJOf d UKO]
+d UEOT d T}OK d TxOA d TrNx d TjNp d T_Nh d TSNb d TEN_ d SuN^ d SgN`
+d SZNe d SPNm d SGNu d S@N~ d S@N~ m WPLs d WVL|
+stroke
+m WVL| d WaMA d WlL| d WrLs d WlLi d W`Le d WULj d WPLs d WPLs m SHN~
+d SDOH d SCOR d SDO\ d SIOf d SPOp d SYOx d SdO? d SrPB d T@PF d TNPJ
+d TZPE d TdO} d TmOu d TvOm d T?Od d T~O[ d TwOR d TsOH d ToN~ d ThNv
+d T^Nn d TRNg d TDNd d StNd d SeNg d SYNm d SPNu d SHN~ d SHN~ m WYLs
+d WdLx d WdLn d WYLs d WYLs m SXN~ d SSOG d SPOQ d SOO[ d SROd d SZOm
+d SdOt d SqOz d S?O~ d TMP@ d TYO| d TdOu d TmOl d TsOb d TsOY d TnOP
+d ThOG d T`N~ d TXNu d TLNp d S}No d SnNq d SaNv d SXN~ d SXN~ m SaN~
+d SZOG d SVOP d SUOZ d SWOc d S_Ok d SjOr d SwOx d TDO| d TQO| d T]Ov
+d TgOn d TnOe d ToO\ d TkOS d TeOJ d T]OB d TUNz d TINu d SzNu d SkNx
+d SaN~ d SaN~ m SzN~ d SlOA d SbOG d S\OP d SZOZ d S]Od d SfOk d SsOr
+d T@Ow d TMOy d TYOu d TcOm d TjOd d TkOZ d TgOP d T_OG d TVO@ d TIN}
+d SzN~ d SzN~ m SfOa d SnOi d S{Oo d TIOr d TVOp d T_Oh d TcO^ d T`OT
+d TYOK d TNOG d TAOI d StOP d SjOX d SfOa d SfOa m SoOa d SxOi d TFOn
+d TTOm d T]Oe d T^O[ d TXOQ d TNOL d T@OP d StOX d SoOa d SoOa m SwOa
+d TBOi d TQOj d T[Ob d TXOW d TMOQ d S~OW d SwOa d SwOa m THOa d TSO_
+d THOa d THOa m IkFo d ^JFo m ^JFo d ^JWp m ^JWp d IkWp m IkWp d IkFo
+m IcFj d ^QFj m ^QFj d ^QWu m ^QWu d IcWu m IcWu d IcFj m IpFo d IpFj
+m IpWp d IpWu
+stroke
+01 setlinewidth
+m InFf d ImFd d ImF_ d InF] d IpF] d IrF_ d IrFd d IpFf d InFf m ItFf
+stroke
+01 setlinewidth
+m InXD d ImXB d ImW} d InW{ d IpW{ d IrW} d IrXB d IpXD d InXD m ItXE
+m JJFo d JJFj m JJWp d JJWu m JcFo d JcFj m JcWp d JcWu m J|Fo d J|Fj
+m J|Wp d J|Wu m KVFo d KVFj m KVWp d KVWu m KoFo d KoFj m KoWp d KoWu
+m LIFo d LIFj m LIWp d LIWu m LbFo d LbFj m LbWp d LbWu m L{Fo d L{Fj
+m L{Wp d L{Wu m MUFo d MUFj m MUWp d MUWu m MnFo d MnFj m MnWp d MnWu
+stroke
+01 setlinewidth
+m McFd d MeFf d MeF] m MjFf
+stroke
+01 setlinewidth
+m MlFf d MjFd d MjF_ d MlF] d MnF] d MoF_ d MoFd d MnFf d MlFf m MrFf
+stroke
+01 setlinewidth
+m MsFf d MrFd d MrF_ d MsF] d MuF] d MwF_ d MwFd d MuFf d MsFf m MyFf
+stroke
+01 setlinewidth
+m McXB d MeXD d MeW{ m MjXE
+stroke
+01 setlinewidth
+m MlXD d MjXB d MjW} d MlW{ d MnW{ d MoW} d MoXB d MnXD d MlXD m MrXE
+stroke
+01 setlinewidth
+m MsXD d MrXB d MrW} d MsW{ d MuW{ d MwW} d MwXB d MuXD d MsXD m MyXE
+m NGFo d NGFj m NGWp d NGWu m NaFo d NaFj m NaWp d NaWu m NzFo d NzFj
+m NzWp d NzWu m OSFo d OSFj m OSWp d OSWu m OmFo d OmFj m OmWp d OmWu
+m PFFo d PFFj m PFWp d PFWu m P_Fo d P_Fj m P_Wp d P_Wu m PyFo d PyFj
+m PyWp d PyWu m QRFo d QRFj m QRWp d QRWu m QkFo d QkFj m QkWp d QkWu
+stroke
+01 setlinewidth
+m Q`Fe d QaFf d QdFf d QeFe d QeFb d Q`F^ d Q`F] d QeF] m QgFf
+stroke
+01 setlinewidth
+m QiFf d QhFd d QhF_ d QiF] d QkF] d QlF_ d QlFd d QkFf d QiFf m QoFf
+stroke
+01 setlinewidth
+m QqFf d QoFd d QoF_ d QqF] d QsF] d QtF_ d QtFd d QsFf d QqFf m QwFf
+stroke
+01 setlinewidth
+m Q`XC d QaXD d QdXD d QeXC d QeX@ d Q`W} d Q`W{ d QeW{ m QgXE
+stroke
+01 setlinewidth
+m QiXD d QhXB d QhW} d QiW{ d QkW{ d QlW} d QlXB d QkXD d QiXD m QoXE
+stroke
+01 setlinewidth
+m QqXD d QoXB d QoW} d QqW{ d QsW{ d QtW} d QtXB d QsXD d QqXD m QwXE
+m REFo d REFj m REWp d REWu m R^Fo d R^Fj m R^Wp d R^Wu m RwFo d RwFj
+m RwWp d RwWu m SQFo d SQFj m SQWp d SQWu m SjFo d SjFj m SjWp d SjWu
+m TCFo d TCFj m TCWp d TCWu m T]Fo d T]Fj m T]Wp d T]Wu m TvFo d TvFj
+m TvWp d TvWu m UOFo d UOFj m UOWp d UOWu m UiFo d UiFj m UiWp d UiWu
+stroke
+01 setlinewidth
+m U]Fe d U_Ff d UaFf d UbFe d UbFc d UaFb d U`Fb m UaFb d UbF` d UbF^
+d UaF] d U_F] d U]F^ m UeFf
+stroke
+01 setlinewidth
+m UfFf d UeFd d UeF_ d UfF] d UhF] d UjF_ d UjFd d UhFf d UfFf m UlFf
+stroke
+01 setlinewidth
+m UnFf d UmFd d UmF_ d UnF] d UpF] d UrF_ d UrFd d UpFf d UnFf m UtFf
+stroke
+01 setlinewidth
+m U]XC d U_XD d UaXD d UbXC d UbXA d UaX@ d U`X@ m UaX@ d UbW? d UbW}
+d UaW{ d U_W{ d U]W} m UeXE
+stroke
+01 setlinewidth
+m UfXD d UeXB d UeW} d UfW{ d UhW{ d UjW} d UjXB d UhXD d UfXD m UlXE
+stroke
+01 setlinewidth
+m UnXD d UmXB d UmW} d UnW{ d UpW{ d UrW} d UrXB d UpXD d UnXD m UtXE
+m VBFo d VBFj m VBWp d VBWu m V[Fo d V[Fj m V[Wp d V[Wu m VuFo d VuFj
+m VuWp d VuWu m WNFo d WNFj m WNWp d WNWu m WgFo d WgFj m WgWp d WgWu
+m XAFo d XAFj m XAWp d XAWu m XZFo d XZFj m XZWp d XZWu m XsFo d XsFj
+m XsWp d XsWu m YMFo d YMFj m YMWp d YMWu m YfFo d YfFj m YfWp d YfWu
+stroke
+01 setlinewidth
+m Y^F] d Y^Ff d Y^Ff d Y[F` d Y[F_ d Y^F_ m Y^F_ d Y`F_ m YbFf
+stroke
+01 setlinewidth
+m YdFf d YbFd d YbF_ d YdF] d YfF] d YgF_ d YgFd d YfFf d YdFf m YjFf
+stroke
+01 setlinewidth
+m YlFf d YjFd d YjF_ d YlF] d YnF] d YoF_ d YoFd d YnFf d YlFf m YrFf
+stroke
+01 setlinewidth
+m Y^W{ d Y^XD d Y^XD d Y[W~ d Y[W~ d Y^W~ m Y^W~ d Y`W~ m YbXE
+stroke
+01 setlinewidth
+m YdXD d YbXB d YbW} d YdW{ d YfW{ d YgW} d YgXB d YfXD d YdXD m YjXE
+stroke
+01 setlinewidth
+m YlXD d YjXB d YjW} d YlW{ d YnW{ d YoW} d YoXB d YnXD d YlXD m YrXE
+m Y?Fo d Y?Fj m Y?Wp d Y?Wu m ZYFo d ZYFj m ZYWp d ZYWu m ZrFo d ZrFj
+m ZrWp d ZrWu m [KFo d [KFj m [KWp d [KWu m [eFo d [eFj m [eWp d [eWu
+m [~Fo d [~Fj m [~Wp d [~Wu m \WFo d \WFj m \WWp d \WWu m \qFo d \qFj
+m \qWp d \qWu m ]JFo d ]JFj m ]JWp d ]JWu m ]cFo d ]cFj m ]cWp d ]cWu
+stroke
+01 setlinewidth
+m ]XF] d ]\F] d ]]F^ d ]]Fa d ]\Fc d ]YFc d ]XFa d ]XFf d ]]Ff m ]`Ff
+stroke
+01 setlinewidth
+m ]aFf d ]`Fd d ]`F_ d ]aF] d ]cF] d ]eF_ d ]eFd d ]cFf d ]aFf m ]gFf
+stroke
+01 setlinewidth
+m ]iFf d ]hFd d ]hF_ d ]iF] d ]kF] d ]lF_ d ]lFd d ]kFf d ]iFf m ]oFf
+stroke
+01 setlinewidth
+m ]XW{ d ]\W{ d ]]W} d ]]W? d ]\XA d ]YXA d ]XX@ d ]XXD d ]]XD m ]`XE
+stroke
+01 setlinewidth
+m ]aXD d ]`XB d ]`W} d ]aW{ d ]cW{ d ]eW} d ]eXB d ]cXD d ]aXD m ]gXE
+stroke
+01 setlinewidth
+m ]iXD d ]hXB d ]hW} d ]iW{ d ]kW{ d ]lW} d ]lXB d ]kXD d ]iXD m ]oXE
+m ]}Fo d ]}Fj m ]}Wp d ]}Wu m IkFr d IcFr m ^JFr d ^QFr
+stroke
+01 setlinewidth
+m IXFx d IWFv d IWFp d IXFn d IZFn d I\Fp d I\Fv d IZFx d IXFx m I_Fx
+stroke
+01 setlinewidth
+m ^XFx d ^VFv d ^VFp d ^XFn d ^ZFn d ^[Fp d ^[Fv d ^ZFx d ^XFx m ^^Fx
+m IkGG d IcGG m ^JGG d ^QGG m IkG\ d IcG\ m ^JG\ d ^QG\ m IkGq d IcGq
+m ^JGq d ^QGq m IkHF d IcHF m ^JHF d ^QHF m IkH[ d IcH[ m ^JH[ d ^QH[
+m IkHq d IcHq m ^JHq d ^QHq m IkIF d IcIF m ^JIF d ^QIF m IkI[ d IcI[
+m ^JI[ d ^QI[ m IkIp d IcIp m ^JIp d ^QIp m IkJE d IcJE m ^JJE d ^QJE
+stroke
+01 setlinewidth
+m IHJI d IJJK d IJJB m IOJK
+stroke
+01 setlinewidth
+m IQJK d IOJI d IOJD d IQJB d ISJB d ITJD d ITJI d ISJK d IQJK m IWJK
+stroke
+01 setlinewidth
+m IXJK d IWJI d IWJD d IXJB d IZJB d I\JD d I\JI d IZJK d IXJK m I_JK
+stroke
+01 setlinewidth
+m ^WJI d ^YJK d ^YJB m ^^JK
+stroke
+01 setlinewidth
+m ^`JK d ^^JI d ^^JD d ^`JB d ^bJB d ^cJD d ^cJI d ^bJK d ^`JK m ^fJK
+stroke
+01 setlinewidth
+m ^gJK d ^fJI d ^fJD d ^gJB d ^iJB d ^kJD d ^kJI d ^iJK d ^gJK m ^mJK
+m IkJZ d IcJZ m ^JJZ d ^QJZ m IkJo d IcJo m ^JJo d ^QJo m IkKD d IcKD
+m ^JKD d ^QKD m IkKY d IcKY m ^JKY d ^QKY m IkKo d IcKo m ^JKo d ^QKo
+m IkLD d IcLD m ^JLD d ^QLD m IkLY d IcLY m ^JLY d ^QLY m IkLn d IcLn
+m ^JLn d ^QLn m IkMC d IcMC m ^JMC d ^QMC m IkMX d IcMX m ^JMX d ^QMX
+stroke
+01 setlinewidth
+m IHM] d IIM^ d IKM^ d ILM] d ILMZ d IHMV d IHMU d ILMU m IOM^
+stroke
+01 setlinewidth
+m IQM^ d IOM\ d IOMW d IQMU d ISMU d ITMW d ITM\ d ISM^ d IQM^ m IWM^
+stroke
+01 setlinewidth
+m IXM^ d IWM\ d IWMW d IXMU d IZMU d I\MW d I\M\ d IZM^ d IXM^ m I_M^
+stroke
+01 setlinewidth
+m ^VM] d ^XM^ d ^ZM^ d ^[M] d ^[MZ d ^VMV d ^VMU d ^[MU m ^^M^
+stroke
+01 setlinewidth
+m ^`M^ d ^^M\ d ^^MW d ^`MU d ^bMU d ^cMW d ^cM\ d ^bM^ d ^`M^ m ^fM^
+stroke
+01 setlinewidth
+m ^gM^ d ^fM\ d ^fMW d ^gMU d ^iMU d ^kMW d ^kM\ d ^iM^ d ^gM^ m ^mM^
+m IkMm d IcMm m ^JMm d ^QMm m IkNB d IcNB m ^JNB d ^QNB m IkNX d IcNX
+m ^JNX d ^QNX m IkNm d IcNm m ^JNm d ^QNm m IkOB d IcOB m ^JOB d ^QOB
+m IkOW d IcOW m ^JOW d ^QOW m IkOl d IcOl m ^JOl d ^QOl m IkPA d IcPA
+m ^JPA d ^QPA m IkPV d IcPV m ^JPV d ^QPV m IkPk d IcPk m ^JPk d ^QPk
+stroke
+01 setlinewidth
+m IHPp d IIPq d IKPq d ILPp d ILPn d IKPm d IJPm m IKPm d ILPk d ILPi
+d IKPh d IIPh d IHPj m IOPq
+stroke
+01 setlinewidth
+m IQPq d IOPo d IOPj d IQPh d ISPh d ITPj d ITPo d ISPq d IQPq m IWPq
+stroke
+01 setlinewidth
+m IXPq d IWPo d IWPj d IXPh d IZPh d I\Pj d I\Po d IZPq d IXPq m I_Pq
+stroke
+01 setlinewidth
+m ^VPp d ^XPq d ^ZPq d ^[Pp d ^[Pn d ^ZPm d ^YPm m ^ZPm d ^[Pk d ^[Pi
+d ^ZPh d ^XPh d ^VPj m ^^Pq
+stroke
+01 setlinewidth
+m ^`Pq d ^^Po d ^^Pj d ^`Ph d ^bPh d ^cPj d ^cPo d ^bPq d ^`Pq m ^fPq
+stroke
+01 setlinewidth
+m ^gPq d ^fPo d ^fPj d ^gPh d ^iPh d ^kPj d ^kPo d ^iPq d ^gPq m ^mPq
+m IkQ@ d IcQ@ m ^JQ@ d ^QQ@ m IkQV d IcQV m ^JQV d ^QQV m IkQk d IcQk
+m ^JQk d ^QQk m IkR@ d IcR@ m ^JR@ d ^QR@ m IkRU d IcRU m ^JRU d ^QRU
+m IkRj d IcRj m ^JRj d ^QRj m IkR? d IcR? m ^JR? d ^QR? m IkST d IcST
+m ^JST d ^QST m IkSi d IcSi m ^JSi d ^QSi m IkS~ d IcS~ m ^JS~ d ^QS~
+stroke
+01 setlinewidth
+m IKS{ d IKTD d IKTD d IHS~ d IHS} d IKS} m IKS} d ILS} m IOTE
+stroke
+01 setlinewidth
+m IQTD d IOTB d IOS} d IQS{ d ISS{ d ITS} d ITTB d ISTD d IQTD m IWTE
+stroke
+01 setlinewidth
+m IXTD d IWTB d IWS} d IXS{ d IZS{ d I\S} d I\TB d IZTD d IXTD m I_TE
+stroke
+01 setlinewidth
+m ^ZS{ d ^ZTD d ^ZTD d ^VS~ d ^VS} d ^ZS} m ^ZS} d ^[S} m ^^TE
+stroke
+01 setlinewidth
+m ^`TD d ^^TB d ^^S} d ^`S{ d ^bS{ d ^cS} d ^cTB d ^bTD d ^`TD m ^fTE
+stroke
+01 setlinewidth
+m ^gTD d ^fTB d ^fS} d ^gS{ d ^iS{ d ^kS} d ^kTB d ^iTD d ^gTD m ^mTE
+m IkTT d IcTT m ^JTT d ^QTT m IkTi d IcTi m ^JTi d ^QTi m IkT~ d IcT~
+m ^JT~ d ^QT~ m IkUS d IcUS m ^JUS d ^QUS m IkUh d IcUh m ^JUh d ^QUh
+m IkU} d IcU} m ^JU} d ^QU} m IkVR d IcVR m ^JVR d ^QVR m IkVg d IcVg
+m ^JVg d ^QVg m IkV} d IcV} m ^JV} d ^QV} m IkWR d IcWR m ^JWR d ^QWR
+stroke
+01 setlinewidth
+m IHWN d IKWN d ILWP d ILWR d IKWT d IIWT d IHWS d IHWW d ILWW m IOWX
+stroke
+01 setlinewidth
+m IQWW d IOWU d IOWP d IQWN d ISWN d ITWP d ITWU d ISWW d IQWW m IWWX
+stroke
+01 setlinewidth
+m IXWW d IWWU d IWWP d IXWN d IZWN d I\WP d I\WU d IZWW d IXWW m I_WX
+stroke
+01 setlinewidth
+m ^WWN d ^ZWN d ^[WP d ^[WR d ^ZWT d ^XWT d ^VWS d ^VWW d ^[WW m ^^WX
+stroke
+01 setlinewidth
+m ^`WW d ^^WU d ^^WP d ^`WN d ^bWN d ^cWP d ^cWU d ^bWW d ^`WW m ^fWX
+stroke
+01 setlinewidth
+m ^gWW d ^fWU d ^fWP d ^gWN d ^iWN d ^kWP d ^kWU d ^iWW d ^gWW m ^mWX
+m IkWg d IcWg m ^JWg d ^QWg
+stroke
+03 setlinewidth
+m QRXf d QOXi d QKXi d QHXf d QHXa d QKX^ d QOX^ d QRXa m QRX^ d QRXr
+m QYXr m QYXd d QcXd d QcXf d Q`Xi d Q\Xi d QYXf d QYXa d Q\X^ d Q`X^
+d QcX` m QjXr m QkXi d QoX^ d QtXi m Q{Xr m R@Xr d R@X^ m Q{Xb d Q~X_
+d RCX_ d RFXa d RFXe d RCXh d Q~Xh d Q{Xj d Q{Xm d Q~Xp d RCXp d RFXm
+m RLXr m RLXi d RLXX m RLXf d ROXi d RSXi d RVXf d RVXa d RSX^ d ROX^
+d RLXa m R]Xr m RbXm d RbXl d RcXl d RcXm d RbXm d RcXl m RbXg d RcXg
+d RcX^ m RnXr m RoXi d RxX^ m RoX^ d RxXi m R?Xr m SEXk d SFXk d SFXi
+d SEXi d SEXk d SFXi m SEXd d SEXa d SFXa d SFXd d SEXd d SFXa m SPXr
+m SPXr m SaXr m SbXi d SbX^ m SgX^ d SgXg m SbXg d ScXi d SeXi d SgXg
+d ShXi d SjXi d SlXg d SlX^ m SrXr m SsX^ d SzX^ d S}Xa d S}Xg d SzXj
+d SvXj d SsXg d SsXr d S}Xr m TCXr m TEXm d TIXr d TIX^ m TTXr m TTXr
+m TeXr m TeXr m TvXr m TwXr d T?Xr d UAXo d UAXk d T?Xh d TwXh m T?Xh
+d UAXe d UAXa d T?X^ d TwX^ d TwXr m UGXr m UGXr m UXXr m UXXr m UiXr
+m UjXf d UmXi d UqXi d UtXf d UtXa d UqX^ d UmX^ d UjXa d UjXf d UjXl
+d UoXr m UzXr m U~Xr d U{Xm d U{Xb d U~X^ d VBX^ d VEXb d VEXm d VBXr
+d U~Xr m VKXr m VOXr d VLXm d VLXb d VOX^ d VSX^ d VVXb d VVXm d VSXr
+d VOXr m V\Xr m V]X_ d V_X^ d VdX^ d VfX_ d VfXb d VdXd d V_Xd d V]Xe
+d V]Xg d V_Xi d VdXi d VfXg m VmXr
+stroke
+03 setlinewidth
+m N[EP d N[E^ d NbEP d NbE^ m NgE_
+stroke
+03 setlinewidth
+m NgE\ d NiE^ d NlE^ d NoE\ d NoES d NlEP d NiEP d NgES d NgE\ m NlE\
+d NoE^ m NsE_
+stroke
+03 setlinewidth
+m NsEP d NvE^ d NxE^ d NzEP m NtEU d NyEU m N?E_
+stroke
+03 setlinewidth
+m N?E\ d OBE^ d OEE^ d OGE\ d OGES d OEEP d OBEP d N?ES d N?E\ m OEE\
+d OGE^ m OKE_
+stroke
+03 setlinewidth
+m OKEP d OSE^ m OWE_
+stroke
+03 setlinewidth
+m OYE^ d O]E^ m O[E^ d O[EP m OYEP d O]EP m OcE_
+stroke
+03 setlinewidth
+m OdEP d OdE^ d OiE^ d OkE\ d OkEY d OiEX d OdEX m OiEX d OkEP m OoE_
+stroke
+03 setlinewidth
+m OpEP d OrE^ d OtE^ d OwEP m OqEU d OvEU m O|E_
+stroke
+03 setlinewidth
+m O|E^ d O|EP m O|EX d PAEX m O|E^ d PDE^ m PHE_
+stroke
+03 setlinewidth
+m PHE_ m PTE_
+stroke
+03 setlinewidth
+m PTE^ d PXEP d P[E^ m P`E_
+stroke
+03 setlinewidth
+m P`E\ d PbE^ d PfE^ d PhE\ d PhEX d P`ER d P`EP d PhEP m PlE_
+stroke
+03 setlinewidth
+m PpEQ d PpEP d PqEP d PqEQ d PpEQ d PqEP m PxE_
+stroke
+03 setlinewidth
+m P}EP d Q@ET d Q@EY d Q@E\ d P~E^ d P{E^ d PyE\ d PyEY d P{EV d P~EV
+d Q@EY m QDE_
+stroke
+03 setlinewidth
+m QHEQ d QHEP d QIEP d QIEQ d QHEQ d QIEP m QQE_
+stroke
+03 setlinewidth
+m QRE[ d QUE^ d QUEP m Q]E_
+stroke
+03 setlinewidth
+m Q]E^ d Q]EP d QeEP m Q]EX d QbEX m Q]E^ d QeE^ m QiE_
+stroke
+03 setlinewidth
+m QiE^ d QqEP m QiEP d QqE^ m QuE_
+stroke
+03 setlinewidth
+m QuEP d QuE^ d Q{E^ d Q}E\ d Q}EY d Q{EW d QuEW m RAE_
+stroke
+03 setlinewidth
+m RAE\ d RDE^ d RGE^ d RIE\ d RIES d RGEP d RDEP d RAES d RAE\ m RGE\
+d RIE^ m RME_
+stroke
+03 setlinewidth
+m RNEP d RNE^ d RSE^ d RUE\ d RUEY d RSEX d RNEX m RSEX d RUEP m RYE_
+stroke
+03 setlinewidth
+m R^EP d R^E^ m RZE^ d RbE^ m ReE_
+stroke
+03 setlinewidth
+m ReE_ m RrE_
+stroke
+03 setlinewidth
+m RxEW d RwEX d RtEX d RrEV d RrER d RtEP d RwEP d RxEQ m R~E_
+stroke
+03 setlinewidth
+m R~E^ d R~EP m R~ER d S@EP d SCEP d SEER d SEEV d SCEX d S@EX d R~EV
+m SJE_
+stroke
+03 setlinewidth
+m SME[ d SMEZ d SNEZ d SNE[ d SME[ d SNEZ m SMEW d SNEW d SNEP m SVE_
+stroke
+03 setlinewidth
+m SVET d S]ET d S]EV d S[EX d SXEX d SVEV d SVER d SXEP d S[EP d S]ER
+m SbE_
+stroke
+03 setlinewidth
+m ScEX d ScEP m SfEP d SfEW m ScEW d SdEX d SeEX d SfEW d SgEX d ShEX
+d SjEW d SjEP m SnE_
+stroke
+03 setlinewidth
+m SoET d SuET d SuEV d StEX d SqEX d SoEV d SoER d SqEP d StEP d SuER
+m SzE_
+stroke
+03 setlinewidth
+m S{EQ d S}EP d T@EP d TBEQ d TBES d T@ET d S}ET d S{EU d S{EW d S}EX
+d T@EX d TAEW m TGE_
+stroke
+03 setlinewidth
+m TMER d TIER d TGET d TGEZ d TIE\ d TME\ d TOEZ d TOEV d TNEU d TMEU
+d TLEV d TLEX d TLEZ d TJEZ d TIEX d TIEV d TJEU d TLEU d TLEV m TSE_
+stroke
+03 setlinewidth
+m TSEX d TSER d TUEP d TXEP d TZER m TZEP d TZEX m T_E_
+stroke
+03 setlinewidth
+m T_EX d T_EP m T_EV d TaEX d TdEX d TfEW m TkE_
+stroke
+03 setlinewidth
+m TkEQ d TmEP d TpEP d TrEQ d TrES d TpET d TmET d TkEU d TkEW d TmEX
+d TpEX d TrEW m TwE_
+stroke
+03 setlinewidth
+m TyEX d T|EX d T}EW d T}ER d T|EP d TyEP d TxER d TxES d TyEU d T|EU
+d T}ET m T}ER d T?EP m UCE_
+stroke
+03 setlinewidth
+m UCE_ m UOE_
+stroke
+03 setlinewidth
+m UPE^ d UPEP m UPEX d UUEX m UPE^ d UXE^ m U\E_
+stroke
+03 setlinewidth
+m U\EX d U\EP m U\EV d U^EX d UaEX d UcEW m UhE_
+stroke
+03 setlinewidth
+m UkE[ d UkEZ d UlEZ d UlE[ d UkE[ d UlEZ m UkEW d UlEW d UlEP m UtE_
+stroke
+03 setlinewidth
+m UtE_ m V@E_
+stroke
+03 setlinewidth
+m VCE^ d V@E[ d V@ES d VCEP d VFEP d VHES d VHE[ d VFE^ d VCE^ m VLE_
+stroke
+03 setlinewidth
+m VREP d VRE^ d VRE^ d VMEU d VMET d VRET m VRET d VTET m VXE_
+stroke
+03 setlinewidth
+m V\EZ d V]EZ d V]EX d V\EX d V\EZ d V]EX m V\ET d V\ES d V]ES d V]ET
+d V\ET d V]ES m VdE_
+stroke
+03 setlinewidth
+m VeE\ d VgE^ d VjE^ d VmE\ d VmEZ d VjEX d VhEX m VjEX d VmEU d VmER
+d VjEP d VgEP d VeES m VqE_
+stroke
+03 setlinewidth
+m VwEP d VwE^ d VvE^ d VqEU d VqET d VwET m VwET d VyET m V}E_
+stroke
+03 setlinewidth
+m WAEZ d WBEZ d WBEX d WAEX d WAEZ d WBEX m WAET d WAES d WBES d WBET
+d WAET d WBES m WIE_
+stroke
+03 setlinewidth
+m WJE[ d WME^ d WMEP m WUE_
+stroke
+03 setlinewidth
+m WVE[ d WYE^ d WYEP m WaE_
+stroke
+03 setlinewidth
+m WaE_ m WmE_
+stroke
+03 setlinewidth
+m WoE[ d WrE^ d WrEP m WyE_
+stroke
+03 setlinewidth
+m W|E^ d WzE[ d WzES d W|EP d W?EP d XBES d XBE[ d W?E^ d W|E^ m XFE_
+stroke
+03 setlinewidth
+m XFEW d XMEW m XRE_
+stroke
+03 setlinewidth
+m XREP d XRE^ d XVEW d XYE^ d XYEP m X^E_
+stroke
+03 setlinewidth
+m X`EX d XcEX d XdEW d XdER d XbEP d X`EP d X^ER d X^ES d X`EU d XcEU
+d XdET m XdER d XfEP m XjE_
+stroke
+03 setlinewidth
+m XjEX d XnEP m XlEL d XrEX m XvE_
+stroke
+03 setlinewidth
+m XwEW d X~EW m YBE_
+stroke
+03 setlinewidth
+m YGEP d YJET d YJEY d YJE\ d YHE^ d YEE^ d YCE\ d YCEY d YEEV d YHEV
+d YJEY m YNE_
+stroke
+03 setlinewidth
+m YPE[ d YSE^ d YSEP m Y[E_
+stroke
+03 setlinewidth
+m OPEs d OOEu d OKEu d OIEr d OIEn d OKEk d OOEk d OPEl m OWE}
+stroke
+03 setlinewidth
+m OWEr d OWEn d OZEk d O]Ek d O_En d O_Er d O]Eu d OZEu d OWEr m OeE}
+stroke
+03 setlinewidth
+m OfEu d OfEk m OfEr d OhEu d OlEu d OnEr d OnEk m OtE}
+stroke
+03 setlinewidth
+m OvEu d O|Eu m O|El d O{Ek d OyEk d OxEl d OxE{ m PCE}
+stroke
+03 setlinewidth
+m PCEr d PCEn d PEEk d PIEk d PKEn d PKEr d PIEu d PEEu d PCEr m PQE}
+stroke
+03 setlinewidth
+m PREu d PREn d PTEk d PXEk d PZEn m PZEk d PZEu m P`E}
+stroke
+03 setlinewidth
+m P`Eu d P`Ek m P`Er d PbEu d PfEu d PhEs m PnE}
+stroke
+03 setlinewidth
+m PoEp d PwEp d PwEr d PuEu d PqEu d PoEr d PoEn d PqEk d PuEk d PwEm
+m P}E}
+stroke
+03 setlinewidth
+m QFEr d QCEu d Q@Eu d P}Er d P}En d Q@Ek d QCEk d QFEn m QFEk d QFE|
+m QLE}
+stroke
+03 setlinewidth
+m QLE} m QZE}
+stroke
+03 setlinewidth
+m Q\Eu d QbEu m Q^Ek d Q^Ey d Q_E{ d QbE{ d QcEz m QiE}
+stroke
+03 setlinewidth
+m QiEu d QiEk m QiEr d QkEu d QoEu d QqEs m QwE}
+stroke
+03 setlinewidth
+m QxEr d QxEn d QzEk d Q~Ek d R@En d R@Er d Q~Eu d QzEu d QxEr m RFE}
+stroke
+03 setlinewidth
+m RFEu d RFEk m RKEk d RKEs m RFEs d RHEu d RJEu d RKEs d RLEu d RMEu
+d ROEs d ROEk m RTE}
+stroke
+03 setlinewidth
+m RTE} m RcE}
+stroke
+03 setlinewidth
+m RfE| d RdEx d RdEo d RfEk d RjEk d RmEo d RmEx d RjE| d RfE| m RrE}
+stroke
+03 setlinewidth
+m RvEl d RvEj d RwEj d RwEl d RvEl d RwEj m S@E}
+stroke
+03 setlinewidth
+m S@E} m SOE}
+stroke
+03 setlinewidth
+m SQEu d SVEu m SWEl d SVEk d STEk d SSEl d SSE{ m S]E}
+stroke
+03 setlinewidth
+m S^Er d S^En d S`Ek d SdEk d SfEn d SfEr d SdEu d S`Eu d S^Er m SlE}
+stroke
+03 setlinewidth
+m SlE} m SzE}
+stroke
+03 setlinewidth
+m S|Ex d T@E| d T@Ek m TIE}
+stroke
+03 setlinewidth
+m TJEz d TLE| d TPE| d TSEz d TSEv d TPEt d TNEt m TPEt d TSEq d TSEn
+d TPEk d TLEk d TJEn m TXE}
+stroke
+03 setlinewidth
+m TXEr d T[Eu d T_Eu d TaEr d TaEn d T_Ek d T[Ek d TXEn d TXEr d TYEw
+d T]E| m TfE}
+stroke
+03 setlinewidth
+m TiE| d TgEx d TgEo d TiEk d TmEk d TpEo d TpEx d TmE| d TiE| m TuE}
+stroke
+03 setlinewidth
+m TzEl d TzEj d T{Ej d T{El d TzEl d T{Ej m UCE}
+stroke
+03 setlinewidth
+m UHEi d UHEj d UHEl d UHEl d UHEk d UHEk m URE}
+stroke
+03 setlinewidth
+m URE} m UaE}
+stroke
+03 setlinewidth
+m UeEx d UeEw d UfEw d UfEx d UeEx d UfEw m UeEs d UeEs d UeEk m UoE}
+stroke
+03 setlinewidth
+m UpEu d UpEk m UpEr d UrEu d UvEu d UxEr d UxEk m U~E}
+stroke
+03 setlinewidth
+m V@Eu d VEEu m VFEl d VEEk d VCEk d VBEl d VBE{ m VLE}
+stroke
+03 setlinewidth
+m VMEp d VUEp d VUEr d VSEu d VOEu d VMEr d VMEn d VOEk d VSEk d VUEm
+m V[E}
+stroke
+03 setlinewidth
+m V[Eu d V[Ek m V[Er d V^Eu d VaEu d VcEs m ViE}
+stroke
+03 setlinewidth
+m VkEu d VnEk d VrEu m VxE}
+stroke
+03 setlinewidth
+m VzEu d V~Eu d W@Es d W@Em d V}Ej d V{Ej d VyEm d VyEo d VzEq d V~Eq
+d W@Ep m W@Em d WBEj m WGE}
+stroke
+03 setlinewidth
+m WJE| d WKE{ d WKEl d WLEk m WUE}
+stroke
+03 setlinewidth
+m WUE} m WdE}
+stroke
+03 setlinewidth
+m WmEu d WeEu m WeEp d WmEp m WrE}
+stroke
+03 setlinewidth
+m WrE} m XAE}
+stroke
+03 setlinewidth
+m XDE| d XAEz d XAEv d XDEt d XAEq d XAEn d XDEk d XHEk d XKEn d XKEq
+d XHEt d XDEt m XHEt d XKEv d XKEz d XHE| d XDE| m XOE}
+stroke
+03 setlinewidth
+m XSE| d XPEx d XPEo d XSEk d XVEk d XYEo d XYEx d XVE| d XSE| m X^E}
+stroke
+03 setlinewidth
+m XcEl d XcEj d XdEj d XdEl d XcEl d XdEj m XmE}
+stroke
+grestore showpage
diff --git a/obsolete/macros/latex209/contrib/aasmacros/sgi9289.eps b/obsolete/macros/latex209/contrib/aasmacros/sgi9289.eps
new file mode 100644
index 0000000000..5f0630354a
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aasmacros/sgi9289.eps
@@ -0,0 +1,998 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: IRAF SGI plot
+%%Creator: sgieps
+%%CreationDate: Fri May 10 04:39:26 1991
+%%BoundingBox: 72 72 540 384
+%%EndComments
+/devppi 300 def
+/userppi 72 def
+/pagewidth 8.5 def
+/devpixtouser { userppi mul devppi div } def
+/setscale { 1 devpixtouser 1 devpixtouser scale } def
+/pagetolandscape 90 def
+/setcoords { pagewidth userppi mul 0 translate
+ pagetolandscape rotate setscale } def
+/setjoins { 1 setlinejoin 1 setlinecap } def
+gsave setscale setjoins
+/getpoint {
+ currentfile read pop 8#77 and 6 bitshift
+ currentfile read pop 8#77 and or
+ currentfile read pop 8#77 and 6 bitshift
+ currentfile read pop 8#77 and or
+ } def
+/m { getpoint moveto } def
+/d { getpoint lineto } def
+01 setlinewidth
+03 setlinewidth
+m F~Ph d GRPh d GRPz d GRPh m G@PV d GGPV m GLP_ m GMP[ d GPP^ d GPPP
+m GXP_ m GYPP d G^PP d G`PR d G`PV d G^PY d GZPY d GXPW d GXP^ d G`P^
+m GdP_ m GRPh d GgPh d GgPq d GgPh d G}Ph d G}Pq d G}Ph d HRPh d HRPq
+d HRPh d HgPh d HgPq d HgPh d H}Ph d H}Pz d H}Ph m HkPV d HrPV m HvP_
+m HxP[ d H{P^ d H{PP m ICP_ m IEP^ d ICP[ d ICPS d IEPP d IHPP d IKPS
+d IKP[ d IHP^ d IEP^ m IOP_ m H}Ph d IRPh d IRPq d IRPh d IgPh d IgPq
+d IgPh d I}Ph d I}Pq d I}Ph d JRPh d JRPq d JRPh d JgPh d JgPz d JgPh
+m J\PV d JcPV m JgP_ m JhPP d JmPP d JpPR d JpPV d JmPY d JjPY d JhPW
+d JhP^ d JpP^ m JtP_ m JgPh d J}Ph d J}Pq d J}Ph d KRPh d KRPq d KRPh
+d KhPh d KhPq d KhPh d K}Ph d K}Pq d K}Ph d LRPh d LRPz d LRPh m LOP^
+d LMP[ d LMPS d LOPP d LRPP d LTPS d LTP[ d LRP^ d LOP^ m LXP_ m LRPh
+d LhPh d LhPq d LhPh d L}Ph d L}Pq d L}Ph d MRPh d MRPq d MRPh d MhPh
+d MhPq d MhPh d M}Ph d M}Pz d M}Ph m MxPP d M}PP d M?PR d M?PV d M}PY
+d MzPY d MwPW d MwP^ d M?P^ m NCP_ m M}Ph d NRPh d NRPq d NRPh d NhPh
+d NhPq d NhPh d N}Ph d N}Pq d N}Ph d OSPh d OSPq d OSPh d OhPh d OhPz
+d OhPh m O]P[ d O`P^ d O`PP m OhP_ m OkP^ d OhP[ d OhPS d OkPP d OnPP
+d OpPS d OpP[ d OnP^ d OkP^ m OtP_ m OhPh d O}Ph d O}Pq d O}Ph d PSPh
+d PSPq d PSPh d PhPh d PhPq d PhPh d P}Ph d P}Pq d P}Ph d QSPh d QSPz
+d QSPh m QHP[ d QKP^ d QKPP m QSP_ m QTPP d QYPP d Q[PR d Q[PV d QYPY
+d QUPY d QSPW d QSP^ d Q[P^ m Q_P_ m QSPh d QhPh d QhPq d QhPh d QhPh
+m QhPh d QhPo d QWPo d QhPo d QhQD d Q`QD d QhQD d QhQX d Q`QX d QhQX
+d QhQl d Q`Ql d QhQl d QhRA d QWRA d QhRA d QhRU d Q`RU d QhRU d QhRj
+d Q`Rj d QhRj d QhR~ d Q`R~ d QhR~ d QhSS d QWSS d QhSS d QhSg d Q`Sg
+d QhSg d QhS{ d Q`S{ d QhS{ d QhTP d Q`TP d QhTP d QhTd d QWTd d QhTd
+d QhTy d Q`Ty d QhTy d QhUM d Q`UM d QhUM d QhUa d Q`Ua d QhUa d QhUv
+d QWUv d QhUv d QhVJ d Q`VJ d QhVJ d QhV_ d Q`V_ d QhV_ d QhVs d Q`Vs
+d QhVs d QhWH d QWWH d QhWH d QhW\ d Q`W\ d QhW\ d QhWp d Q`Wp d QhWp
+d QhXE d Q`XE d QhXE d QhXY d QWXY d QhXY d QhXY m F~Ph d F~Po d GOPo
+d F~Po m FTPp d F[Pp m F_Py m FcPj d FcPi d FdPi d FdPj d FcPj d FdPi
+m FkPy m FlPv d FnPx d FrPx d FsPv d FsPr d FlPl d FlPj d FsPj m FxPy
+m F~Po d F~QD d GFQD d F~QD d F~QX d GFQX d F~QX d F~Ql d GFQl d F~Ql
+d F~RA d GORA d F~RA m FnRJ d FlRG d FlQ? d FnQ{ d FqQ{ d FsQ? d FsRG
+d FqRJ d FnRJ m FxRJ m F~RA d F~RU d GFRU d F~RU d F~Rj d GFRj d F~Rj
+d F~R~ d GFR~ d F~R~ d F~SS d GOSS d F~SS m FcSN d FcSM d FdSM d FdSN
+d FcSN d FdSM m FkS\ m FlSY d FnS\ d FrS\ d FsSY d FsSU d FlSO d FlSM
+d FsSM m FxS\ m F~SS d F~Sg d GFSg d F~Sg d F~S{ d GFS{ d F~S{ d F~TP
+d GFTP d F~TP d F~Td d GOTd d F~Td m FcT_ d FcT^ d FdT^ d FdT_ d FcT_
+d FdT^ m FkTn m FrT_ d FrTm d FqTm d FlTd d FlTc d FrTc m FrTc d FsTc
+m FxTn m F~Td d F~Ty d GFTy d F~Ty d F~UM d GFUM d F~UM d F~Ua d GFUa
+d F~Ua d F~Uv d GOUv d F~Uv m FcUq d FcUp d FdUp d FdUq d FcUq d FdUp
+m FkU? m FlUv d FnUy d FqUy d FsUv d FsUs d FqUq d FnUq d FlUs d FlUv
+d FlU{ d FpU? m FxU? m F~Uv d F~VJ d GFVJ d F~VJ d F~V_ d GFV_ d F~V_
+d F~Vs d GFVs d F~Vs d F~WH d GOWH d F~WH m FcWC d FcWB d FdWB d FdWC
+d FcWC d FdWB m FkWQ m FnWQ d FlWN d FlWL d FnWJ d FlWH d FlWD d FnWB
+d FrWB d FsWD d FsWH d FrWJ d FnWJ m FrWJ d FsWL d FsWN d FrWQ d FnWQ
+m FxWQ m F~WH d F~W\ d GFW\ d F~W\ d F~Wp d GFWp d F~Wp d F~XE d GFXE
+d F~XE d F~XY d GOXY d F~XY m FmX_ d FpXb d FpXT m FxXc m F~XY d F~XY
+m F~XY d GRXY d GRXG d GRXY d GgXY d GgXP d GgXY d G}XY d G}XP d G}XY
+d HRXY d HRXP d HRXY d HgXY d HgXP d HgXY d H}XY d H}XG d H}XY d IRXY
+d IRXP d IRXY d IgXY d IgXP d IgXY d I}XY d I}XP d I}XY d JRXY d JRXP
+d JRXY d JgXY d JgXG d JgXY d J}XY d J}XP d J}XY d KRXY d KRXP d KRXY
+d KhXY d KhXP d KhXY d K}XY d K}XP d K}XY d LRXY d LRXG d LRXY d LhXY
+d LhXP d LhXY d L}XY d L}XP d L}XY d MRXY d MRXP d MRXY d MhXY d MhXP
+d MhXY d M}XY d M}XG d M}XY d NRXY d NRXP d NRXY d NhXY d NhXP d NhXY
+d N}XY d N}XP d N}XY d OSXY d OSXP d OSXY d OhXY d OhXG d OhXY d O}XY
+d O}XP d O}XY d PSXY d PSXP d PSXY d PhXY d PhXP d PhXY d P}XY d P}XP
+d P}XY d QSXY d QSXG d QSXY d QhXY d QhXP d QhXY d QhXY m KoPA d KwOs
+m KoOs d KwPA m K{PB m K{Oy d LBOy m LGPB m LGOs d LJPA d LLPA d LNOs
+m LHOx d LNOx m LSPB m LSPA d L[Os m LSOs d L[PA m L_PB m LaPA d LePA
+m LcPA d LcOs m LaOs d LeOs m LkPB m LlOu d LmOs d LqOs d LsOu d LsOx
+d LqOz d LmOz d LlO}
+stroke
+m LlO} d LlO? d LmPA d LqPA d LsO? m LwPB m EMTI d EVTK d EbTK m EVTK
+d EMTM m ELTP m EXTQ d EXTV m ELTY m EbTY d EMT[ d EMT\ d EbT^ m EZTY
+d EZT] m ELTa m EMTa d EbTf m EbTa d EMTf m ELTi m EMTj d EMTm m EMTk
+d EbTk m EbTj d EbTm m ELTq m E_Tq d EbTr d EbTu d E_Tv d E[Tv d EXTu
+d EWTr d ETTq d EPTq d EMTr d EMTu d EPTv m ELTy m JpXg d JpXu m JlXu
+d JtXu m JxXv m JxXu d JxXg m JxXm d JzXo d J}Xo d J?Xm d J?Xg m KDXv
+m KDXk d KKXk d KKXm d KIXo d KFXo d KDXm d KDXi d KFXg d KIXg d KKXi
+m KPXv m KPXv m K\Xv m K]Xi d K_Xg d KcXg d KdXi d KdXl d KcXn d K_Xn
+d K]Xq d K]Xs d K_Xu d KcXu d KdXs m KhXv m KjXu d KoXu m KmXu d KmXg
+m KkXg d KoXg m KuXv m KuXg d KuXu d K}Xg d K}Xu m LAXv m LIXj d LGXg
+d LCXg d LAXj d LAXs d LCXu d LGXu d LIXs m LMXv m LMXv m LYXv m LYXu
+d LYXg m LYXn d L^Xn m LYXu d LaXu m LeXv m LfXo d LfXi d LgXg d LkXg
+d LlXi m LlXg d LlXo m LqXv m LrXo d LrXg m LrXm d LtXo d LwXo d LxXm
+d LxXg m L}Xv m MDXn d MCXo d M@Xo d L~Xm d L~Xi d M@Xg d MCXg d MDXh
+m MJXv m MKXo d MPXo m MPXh d MOXg d MNXg d MMXh d MMXt m MVXv m MYXr
+d MYXq d MZXq d MZXr d MYXr d MZXq m MYXn d MZXn d MZXg m MbXv m MbXm
+d MbXi d MdXg d MgXg d MiXi d MiXm d MgXo d MdXo d MbXm m MnXv m MnXo
+d MnXg m MnXm d MpXo d MsXo d MuXm d MuXg m MzXv
+stroke
+01 setlinewidth
+m F~Q{ d F?Q} d G@Q~ d GBR@ d GCRA d GDRC d GFRE d GGRF d GHRH d GJRJ
+d GKRK d GLRM d GNRN d GORP d GPRQ d GRRS d GSRT d GTRU d GVRV d GWRX
+d GXRY d GZRZ d G[RZ d G\R[ d G^R\ d G_R\ d G`R] d GbR] d GcR^ d GdR^
+d GfR^ d GgR^ d GhR^ d GjR] d GkR] d GlR\ d GnR\ d GoR[ d GpRZ d GrRY
+d GsRX d GtRW d GvRV d GwRT d GxRS d GzRQ d G{RP d G}RN d G~RL d G?RJ
+d H@RI d HBRG d HCRE d HDRC d HFRA d HGQ? d HIQ} d HJQ{ d HKQy d HMQv
+d HNQt d HOQr d HPQq d HRQo d HSQm d HUQk d HVQi d HWQh d HYQf d HZQd
+d H[Qc d H]Qb d H^Qa d H_Q` d HaQ_ d HbQ^ d HcQ] d HeQ\ d HfQ\ d HgQ\
+d HiQ\ d HjQ\ d HkQ\ d HmQ\ d HnQ\ d HoQ] d HqQ^ d HrQ_ d HsQ` d HuQa
+d HvQb d HwQd d HyQe d HzQg d H{Qi d H}Qk d H~Qm d H?Qo d IAQq d IBQs
+d ICQv d IEQx d IFQ{ d IGQ~ d IIR@ d IJRC d IKRF d IMRI d INRK d IORN
+d IQRQ d IRRT d ISRV d IURY d IVR[ d IWR^ d IYR` d IZRc d I[Re d I]Rg
+d I^Ri d I_Rk d IaRm d IbRo d IcRp d IeRq d IfRr d IgRs d IiRt d IjRu
+d IkRu d ImRu d InRu d IoRu d IqRu d IrRt d IsRs d IuRr d IvRq d IwRo
+d IyRn d IzRl d I{Ri d I}Rg d I~Re d I?Rb d JAR_ d JBR\ d JCRY d JERV
+d JFRR d JGRN d JIRK d JJRG d JKRC d JMQ? d JNQ{ d JOQv d JQQr d JRQn
+d JSQj d JUQe d JVQa d JWQ] d JYQY d JZQT d J[QP d J]QL d J^QI d J_QE
+d JaQA d JbP~ d JcP{ d JePx d JfPu d JgPs d JiPp d JjPn d JkPl d JmPk
+d JnPj d JoPi d JqPh d JrPh d JsPh d JuPi d JvPj d JwPk d JyPl d JzPn
+d J{Pq d J}Pt d J~Pw d J?Pz d KAP~ d KBQC d KDQG d KEQL d KFQR d KGQX
+d KIQ^ d KJQe d KKQl d KMQs d KNQ{ d KPRC d KQRK d KRRT d KTR] d KURf
+d KVRp d KXRz d KYSD d KZSN d K\SX d K]Sc d K^Sm d K`Sx d KaTC d KbTN
+d KdTY d KeTd d KfTo d KhT{ d KiUF d KjUQ d KlU\ d KmUf d KnUq d KpU|
+d KqVF d KrVP d KtVZ d KuVd d KvVn d KxVw d KyW@ d KzWH d K|WQ d K}WY
+d K~W` d L@Wg d LAWn d LBWt d LDWz d LEW? d LFXD d LHXH d LIXL d LJXP
+d LLXS d LMXU d LNXW d LPXX d LQXY d LRXY d LTXY d LUXX d LVXW d LXXU
+d LYXS d LZXP d L\XL d L]XH d L^XD d L`W? d LaWz d LbWt d LdWn d LeWg
+d LfW` d LhWY d LiWQ d LjWH d LlW@ d LmVw d LnVn d LpVd d LqVZ d LrVP
+d LtVF d LuU| d LvUq d LxUf d LyU\ d LzUQ d L|UF d L}T{ d L~To d M@Td
+d MATY d MBTN d MDTC d MESx d MFSm d MHSc d MISX d MJSN d MLSD d MMRz
+d MNRp d MPRf d MQR] d MRRT d MTRK d MURC d MVQ{ d MXQs d MYQl d MZQe
+d M\Q^ d M]QX d M^QR d M`QL d MaQG d MbQC d MdP~ d MePz d MfPw d MhPt
+d MiPq d MjPn d MlPl d MmPk d MnPj d MpPi d MqPh d MrPh d MtPh d MuPi
+d MvPj d MxPk d MyPl d MzPn d M|Pp d M}Ps d M~Pu d N@Px d NAP{ d NBP~
+d NDQA d NEQE d NFQI d NHQL d NIQP d NKQT d NLQY d NMQ] d NOQa d NPQe
+d NQQj d NRQn d NTQr d NUQv d NWQ{ d NXQ? d NYRC d N[RG d N\RK d N]RN
+d N_RR d N`RV d NaRY d NcR\ d NdR_ d NeRb d NgRe d NhRg d NiRi d NkRl
+d NlRn d NmRo d NoRq d NpRr d NqRs d NsRt d NtRu d NuRu d NwRu d NxRu
+d NyRu d N{Ru d N|Rt d N}Rs d N?Rr d O@Rq d OARp d OCRo d ODRm d OERk
+d OGRi d OHRg d OIRe d OKRc d OLR` d OMR^ d OOR[ d OPRY d OQRV d OSRT
+d OTRQ d OURN d OWRK d OXRI d OYRF d O[RC d O\R@ d O]Q~ d O_Q{ d O`Qx
+d OaQv d OcQs d OdQq d OeQo d OgQm d OhQk d OiQi d OkQg d OlQe d OmQd
+d OoQb d OpQa d OqQ` d OsQ_ d OtQ^ d OuQ] d OwQ\ d OxQ\ d OyQ\ d O{Q\
+d O|Q\ d O}Q\ d O?Q\ d P@Q\ d PAQ] d PCQ^ d PDQ_ d PEQ` d PGQa d PHQb
+d PIQc d PKQd d PLQf d PMQh d POQi d PPQk d PQQm d PSQo d PTQq d PUQr
+d PWQt d PXQv d PYQy d P[Q{ d P\Q} d P]Q? d P_RA d P`RC d PaRE d PcRG
+d PdRI d PeRJ d PgRL d PhRN d PiRP d PkRQ d PlRS d PmRT d PoRV d PpRW
+d PqRX d PsRY d PtRZ d PuR[ d PwR\ d PxR\ d PyR] d P{R] d P|R^ d P}R^
+d P?R^ d Q@R^ d QAR^ d QCR] d QDR] d QER\ d QGR\ d QHR[ d QIRZ d QKRZ
+d QLRY d QMRX d QORV d QPRU d QQRT d QSRS d QTRQ d QVRP d QWRN d QXRM
+d QYRK d Q[RJ d Q\RH d Q]RF d Q_RE d Q`RC d QbRA d QcR@ d QdQ~ d QfQ}
+d QgQ{ d QhQz m O_Sg d O_Sj d O^Sl
+stroke
+m O^Sl d O]So d O[Sq d OYSs d OVSu d OSSw d OOSx d OKSz d OGS{ d OCS{
+d N~S{ d NzS{ d NvS{ d NqSz d NmSy d NjSx d NfSv d NcSt d NaSr d N^Sp
+d N]Sm d N\Sk d N[Sh d N[Sf d N\Sc d N]Sa d N^S^ d NaS\ d NcSZ d NfSX
+d NjSV d NmSU d NqST d NvSS d NzSS d N~SS d OCSS d OGSS d OKST d OOSU
+d OSSW d OVSY d OYS[ d O[S] d O]S_ d O^Sb d O_Sd d O_Sg m OvSo d OuSs
+d OtSw d OrS{ d OpS~ d OmTA d OjTD d OfTG d OaTI d O\TK d OWTL d ORTM
+d OLTN d OGTN d OATM d N|TL d NwTJ d NrTH d NnTF d NjTC d NgT@ d NdS|
+d NbSy d NaSu d N`Sq d N`Sm d NaSi d NbSe d NdSb d NgS^ d NjS[ d NnSX
+d NrSV d NwST d N|SR d OASQ d OGSQ d OLSP d ORSQ d OWSR d O\SS d OaSU
+d OfSW d OjSZ d OmS] d OpS` d OrSd d OtSg d OuSk d OvSo m PQS{ d PQTA
+d PPTG d PMTM d PKTR d PGTW d PBT[ d O}T_ d OxTc d OrTe d OkTg d OeTi
+d O^Ti d OWTi d OPTh d OJTf d OCTd d N}Ta d NxT] d NsTY d NoTT d NlTO
+d NiTJ d NhTD d NgS~ d NgSx d NhSs d NiSm d NlSg d NoSb d NsS^ d NxSY
+d N}SV d OCSS d OJSP d OPSO d OWSN d O^SM d OeSN d OkSO d OrSQ d OxST
+d O}SW d PBS[ d PGS` d PKSe d PMSj d PPSp d PQSu d PQS{ m PtTN d PtTW
+d PrT_ d PoTh d PlTp d PgTw d PaT~ d P[UD d PTUI d PLUM d PDUP d O|UR
+d OsUS d OkUR d OcUQ d OZUN d OSUK d OKUF d ODUA d N~Tz d NyTs d NuTl
+d NrTd d NpT[ d NoTR d NoTI d NpTA d NrSx d NuSp d NySh d N~Sa d ODS[
+d OKSU d OSSQ d OZSM d OcSK d OkSI d OsSI d O|SJ d PDSL d PLSO d PTSS
+d P[SX d PaS^ d PgSe d PlSl d PoSt d PrS| d PtTE d PtTN m Q`Ti d Q_Tw
+d Q]UD d QYUP d QUU\ d QOUg d QHUq d Q@Uz d PwVB d PnVH d PdVL d PYVO
+d POVQ d PDVP d OzVN d OoVJ d OfVE d O\U~ d OTUv d OMUl d OFUb d OAUV
+d N}UJ d NzT} d NyTp d NyTc d NzTU d N}TI d OAS| d OFSq d OMSf d OTS]
+d O\SU d OfSN d OoSH d OzSE d PDSB d POSB d PYSC d PdSF d PnSK d PwSQ
+d Q@SX d QHSa d QOSk d QUSw d QYTB d Q]TO d Q_T\ d Q`Ti m QhWS d QdWW
+d QXW` d QKWg d P~Wl d PqWn d PcWm d PVWj d PIWd d O}W\ d OrWR d OgWE
+d O^Vw d OVVg d OPVV d OJVD d OGUp d OEU] d OEUI d OGTu d OJTb d OPTO
+d OVS~ d O^Sn d OgS` d OrST d O}SI d PISA d PVR| d PcRx d PqRx d P~Ry
+d QKR~ d QXSE d QdSN d QhSS m OnXY d OjXP d ObWv d O[WZ d OWV} d OUV`
+d OUVB d OWUd d O[UG d ObTl d OjTR d OtSz d P@Se d PMSR d P[SC d PjRw
+d PzRn d QKRi d Q[Rh d QhRj m OjXY d OiXD d OiWW d OkVk d OqU? d OyUV
+d PCTo d POTL d P^Sl d PnSP d Q@Ry d QSRf d QgRZ d QhRZ m PDXY d PDXU
+d PKWT d PUVV d PbU\ d PqTf d QDSv d QXSL d QhRs m PtXY d PyWv d QIV^
+d Q\UN d QhTg
+stroke
+03 setlinewidth
+m F~F^ d GRF^ d GRFp d GRF^ m G@FL d GGFL m GLFU m GLFR d GNFT d GQFT
+d GTFR d GTFO d GQFM d GPFM m GQFM d GTFK d GTFH d GQFF d GNFF d GLFH
+m GXFU m GZFT d GXFQ d GXFI d GZFF d G^FF d G`FI d G`FQ d G^FT d GZFT
+m GdFU m GRF^ d GlF^ d GlFg d GlF^ d HGF^ d HGFg d HGF^ d HbF^ d HbFg
+d HbF^ d H}F^ d H}Fp d H}F^ m HkFL d HrFL m HvFU m HwFR d HyFT d H}FT
+d H?FR d H?FN d HwFH d HwFF d H?FF m ICFU m IEFT d ICFQ d ICFI d IEFF
+d IHFF d IKFI d IKFQ d IHFT d IEFT m IOFU m H}F^ d IWF^ d IWFg d IWF^
+d IrF^ d IrFg d IrF^ d JMF^ d JMFg d JMF^ d JgF^ d JgFp d JgF^ m JVFL
+d J]FL m JaFU m JcFQ d JfFT d JfFF m JmFU m JpFT d JnFQ d JnFI d JpFF
+d JsFF d JvFI d JvFQ d JsFT d JpFT m JzFU m JgF^ d KBF^ d KBFg d KBF^
+d K]F^ d K]Fg d K]F^ d KxF^ d KxFg d KxF^ d LRF^ d LRFp d LRF^ m LOFT
+d LMFQ d LMFI d LOFF d LRFF d LTFI d LTFQ d LRFT d LOFT m LXFU m LRF^
+d LmF^ d LmFg d LmF^ d MHF^ d MHFg d MHF^ d MbF^ d MbFg d MbF^ d M}F^
+d M}Fp d M}F^ m MrFQ d MuFT d MuFF m M}FU m N@FT d M}FQ d M}FI d N@FF
+d NCFF d NEFI d NEFQ d NCFT d N@FT m NIFU m M}F^ d NXF^ d NXFg d NXF^
+d NsF^ d NsFg d NsF^ d OMF^ d OMFg d OMF^ d OhF^ d OhFp d OhF^ m O\FR
+d O^FT d ObFT d OdFR d OdFN d O\FH d O\FF d OdFF m OhFU m OkFT d OhFQ
+d OhFI d OkFF d OnFF d OpFI d OpFQ d OnFT d OkFT m OtFU m OhF^ d PCF^
+d PCFg d PCF^ d P]F^ d P]Fg d P]F^ d PxF^ d PxFg d PxF^ d QSF^ d QSFp
+d QSF^ m QGFR d QIFT d QLFT d QOFR d QOFO d QLFM d QKFM m QLFM d QOFK
+d QOFH d QLFF d QIFF d QGFH m QSFU m QUFT d QSFQ d QSFI d QUFF d QYFF
+d Q[FI d Q[FQ d QYFT d QUFT m Q_FU m QSF^ d QhF^ m QhF^ d QhFe d QWFe
+d QhFe d QhFz d Q`Fz d QhFz d QhGN d Q`GN d QhGN d QhGb d Q`Gb d QhGb
+d QhGw d QWGw d QhGw d QhHK d Q`HK d QhHK d QhH` d Q`H` d QhH` d QhHt
+d Q`Ht d QhHt d QhII d QWII d QhII d QhI] d Q`I] d QhI] d QhIq d Q`Iq
+d QhIq d QhJF d Q`JF d QhJF d QhJZ d QWJZ d QhJZ d QhJo d Q`Jo d QhJo
+d QhKC d Q`KC d QhKC d QhKW d Q`KW d QhKW d QhKl d QWKl d QhKl d QhL@
+d Q`L@ d QhL@ d QhLU d Q`LU d QhLU d QhLi d Q`Li d QhLi d QhL~ d QWL~
+d QhL~ d QhMR d Q`MR d QhMR d QhMf d Q`Mf d QhMf d QhM{ d Q`M{ d QhM{
+d QhNO d QWNO d QhNO d QhNO m F~F^ d F~Fe d GOFe d F~Fe m FTFf d F[Ff
+m F_Fo m FcF` d FcF_ d FdF_ d FdF` d FcF` d FdF_ m FkFo m FlFl d FnFn
+d FrFn d FsFl d FsFh d FlFb d FlF` d FsF` m FxFo m F~Fe d F~Fz d GFFz
+d F~Fz d F~GN d GFGN d F~GN d F~Gb d GFGb d F~Gb d F~Gw d GOGw d F~Gw
+m FnH@ d FlG} d FlGu d FnGr d FqGr d FsGu d FsG} d FqH@ d FnH@ m FxH@
+m F~Gw d F~HK d GFHK d F~HK d F~H` d GFH` d F~H` d F~Ht d GFHt d F~Ht
+d F~II d GOII d F~II m FcID d FcIC d FdIC d FdID d FcID d FdIC m FkIR
+m FlIO d FnIR d FrIR d FsIO d FsIK d FlIE d FlIC d FsIC m FxIR m F~II
+d F~I] d GFI] d F~I] d F~Iq d GFIq d F~Iq d F~JF d GFJF d F~JF d F~JZ
+d GOJZ d F~JZ m FcJU d FcJT d FdJT d FdJU d FcJU d FdJT m FkJd m FrJU
+d FrJc d FqJc d FlJZ d FlJY d FrJY m FrJY d FsJY m FxJd m F~JZ d F~Jo
+d GFJo d F~Jo d F~KC d GFKC d F~KC d F~KW d GFKW d F~KW d F~Kl d GOKl
+d F~Kl m FcKg d FcKf d FdKf d FdKg d FcKg d FdKf m FkKu m FlKl d FnKo
+d FqKo d FsKl d FsKi d FqKg d FnKg d FlKi d FlKl d FlKq d FpKu m FxKu
+m F~Kl d F~L@ d GFL@ d F~L@ d F~LU d GFLU d F~LU d F~Li d GFLi d F~Li
+d F~L~ d GOL~ d F~L~ m FcLy d FcLx d FdLx d FdLy d FcLy d FdLx m FkMG
+m FnMG d FlMD d FlMB d FnM@ d FlL~ d FlLz d FnLx d FrLx d FsLz d FsL~
+d FrM@ d FnM@ m FrM@ d FsMB d FsMD d FrMG d FnMG m FxMG m F~L~ d F~MR
+d GFMR d F~MR d F~Mf d GFMf d F~Mf d F~M{ d GFM{ d F~M{ d F~NO d GONO
+d F~NO m FmNU d FpNX d FpNJ m FxNY m F~NO d F~NO m F~NO d GRNO d GRM}
+d GRNO d GlNO d GlNF d GlNO d HGNO d HGNF d HGNO d HbNO d HbNF d HbNO
+d H}NO d H}M} d H}NO d IWNO d IWNF d IWNO d IrNO d IrNF d IrNO d JMNO
+d JMNF d JMNO d JgNO d JgM} d JgNO d KBNO d KBNF d KBNO d K]NO d K]NF
+d K]NO d KxNO d KxNF d KxNO d LRNO d LRM} d LRNO d LmNO d LmNF d LmNO
+d MHNO d MHNF d MHNO d MbNO d MbNF d MbNO d M}NO d M}M} d M}NO d NXNO
+d NXNF d NXNO d NsNO d NsNF d NsNO d OMNO d OMNF d OMNO d OhNO d OhM}
+d OhNO d PCNO d PCNF d PCNO d P]NO d P]NF d P]NO d PxNO d PxNF d PxNO
+d QSNO d QSM} d QSNO d QhNO
+stroke
+01 setlinewidth
+m F~Fe d G@Fe m GGFe d GIFe m GQFe d GSFe m GZFe d G\Fe m GdFe d GfFe
+m GmFe d GoFe m GwFe d GyFe m H@Fe d HBFe m HJFe d HLFe m HSFe d HUFe
+m H]Fe d H_Fe m HfFe d HhFe m HpFe d HrFe m HzFe d H{Fe m ICFe d IEFe
+m IMFe d INFe m IVFe d IXFe m I`Fe d IaFe m IiFe d IkFe m IsFe d IuFe
+m I|Fe d I~Fe m JFFe d JHFe m JOFe d JQFe m JYFe d J[Fe m JbFe d JdFe
+m JlFe d JnFe m JuFe d JwFe m J?Fe d KAFe m KHFe d KJFe m KRFe d KTFe
+m K[Fe d K]Fe m KeFe d KgFe m KnFe d KpFe m KxFe d KzFe m LAFe d LCFe
+m LKFe d LMFe m LUFe d LVFe m L^Fe d L`Fe m LhFe d LiFe m LqFe d LsFe
+m L{Fe d L|Fe m MDFe d MFFe m MNFe d MPFe m MWFe d MYFe m MaFe d McFe
+m MjFe d MlFe m MtFe d MvFe m M}Fe d M?Fe m NGFe d NIFe m NPFe d NRFe
+m NZFe d N\Fe m NcFe d NeFe m NmFe d NoFe m NvFe d NxFe m O@Fe d OBFe
+m OIFe d OKFe m OSFe d OUFe m O\Fe d O^Fe m OfFe d OhFe m OpFe d OqFe
+m OyFe d O{Fe m PCFe d PDFe m PLFe d PNFe m PVFe d PWFe m P_Fe d PaFe
+m PiFe d PkFe m PrFe d PtFe m P|Fe d P~Fe m QEFe d QGFe m QOFe d QQFe
+m QXFe d QZFe m QbFe d QdFe m QhFe m F~Gw m GAGw d GCGw m GJGw d GLGw
+m GTGw d GVGw m G]Gw d G_Gw m GgGw d GiGw m GpGw d GrGw m GzGw d G|Gw
+m HCGw d HEGw m HMGw d HOGw m HWGw d HXGw m H`Gw d HbGw m HjGw d HkGw
+m HsGw d HuGw m H}Gw d H?Gw m IFGw d IHGw m IPGw d IRGw m IYGw d I[Gw
+m IcGw d IeGw m IlGw d InGw m IvGw d IxGw m I?Gw d JAGw m JIGw d JKGw
+m JRGw d JTGw m J\Gw d J^Gw m JeGw d JgGw m JoGw d JqGw m JxGw d JzGw
+m KBGw d KDGw m KKGw d KMGw m KUGw d KWGw m K^Gw d K`Gw m KhGw d KjGw
+m KrGw d KsGw m K{Gw d K}Gw m LEGw d LFGw m LNGw d LPGw m LXGw d LZGw
+m LaGw d LcGw m LkGw d LmGw m LtGw d LvGw m L~Gw d M@Gw m MGGw d MIGw
+m MQGw d MSGw m MZGw d M\Gw m MdGw d MfGw m MmGw d MoGw m MwGw d MyGw
+m N@Gw d NBGw m NJGw d NLGw m NSGw d NUGw m N]Gw d N_Gw m NfGw d NhGw
+m NpGw d NrGw m NyGw d N{Gw m OCGw d OEGw m OMGw d ONGw m OVGw d OXGw
+m O`Gw d OaGw m OiGw d OkGw m OsGw d OuGw m O|Gw d O~Gw m PFGw d PHGw
+m POGw d PQGw m PYGw d P[Gw m PbGw d PdGw m PlGw d PnGw m PuGw d PwGw
+m P?Gw d QAGw m QHGw d QJGw m QRGw d QTGw m Q[Gw d Q]Gw m QeGw d QgGw
+m QhGw m F~II m GDII d GFII m GMII d GOII m GWII d GYII m G`II d GbII
+m GjII d GlII m GtII d GuII m G}II d G?II m HGII d HHII m HPII d HRII
+m HZII d H\II m HcII d HeII m HmII d HoII m HvII d HxII m I@II d IBII
+m IIII d IKII m ISII d IUII m I\II d I^II m IfII d IhII m IoII d IqII
+m IyII d I{II m JBII d JDII m JLII d JNII m JUII d JWII m J_II d JaII
+m JhII d JjII m JrII d JtII m J{II d J}II m KEII d KGII m KOII d KPII
+m KXII d KZII m KbII d KcII m KkII d KmII m KuII d KwII m K~II d L@II
+m LHII d LJII m LQII d LSII m L[II d L]II m LdII d LfII m LnII d LpII
+m LwII d LyII m MAII d MCII m MJII d MLII m MTII d MVII m M]II d M_II
+m MgII d MiII m MpII d MrII m MzII d M|II m NCII d NEII m NMII d NOII
+m NVII d NXII m N`II d NbII m NjII d NkII m NsII d NuII m N}II d N~II
+m OFII d OHII m OPII d ORII m OYII d O[II m OcII d OeII m OlII d OnII
+m OvII d OxII m O?II d PAII m PIII d PKII m PRII d PTII m P\II d P^II
+m PeII d PgII m PoII d PqII m PxII d PzII m QBII d QDII m QKII d QMII
+m QUII d QWII m Q^II d Q`II m QhII d QhII m F~JZ d F?JZ m GGJZ d GIJZ
+m GQJZ d GRJZ m GZJZ d G\JZ m GdJZ d GeJZ m GmJZ d GoJZ m GwJZ d GyJZ
+m H@JZ d HBJZ m HJJZ d HLJZ m HSJZ d HUJZ m H]JZ d H_JZ m HfJZ d HhJZ
+m HpJZ d HrJZ m HyJZ d H{JZ m ICJZ d IEJZ m ILJZ d INJZ m IVJZ d IXJZ
+m I_JZ d IaJZ m IiJZ d IkJZ m IrJZ d ItJZ m I|JZ d I~JZ m JEJZ d JGJZ
+m JOJZ d JQJZ m JXJZ d JZJZ m JbJZ d JdJZ m JlJZ d JmJZ m JuJZ d JwJZ
+m J?JZ d K@JZ m KHJZ d KJJZ m KRJZ d KTJZ m K[JZ d K]JZ m KeJZ d KgJZ
+m KnJZ d KpJZ m KxJZ d KzJZ m LAJZ d LCJZ m LKJZ d LMJZ m LTJZ d LVJZ
+m L^JZ d L`JZ m LgJZ d LiJZ m LqJZ d LsJZ m LzJZ d L|JZ m MDJZ d MFJZ
+m MMJZ d MOJZ m MWJZ d MYJZ m M`JZ d MbJZ m MjJZ d MlJZ m MsJZ d MuJZ
+m M}JZ d M?JZ m NGJZ d NHJZ m NPJZ d NRJZ m NZJZ d N[JZ m NcJZ d NeJZ
+m NmJZ d NoJZ m NvJZ d NxJZ m O@JZ d OBJZ m OIJZ d OKJZ m OSJZ d OUJZ
+m O\JZ d O^JZ m OfJZ d OhJZ m OoJZ d OqJZ m OyJZ d O{JZ m PBJZ d PDJZ
+m PLJZ d PNJZ m PUJZ d PWJZ m P_JZ d PaJZ m PhJZ d PjJZ m PrJZ d PtJZ
+m P{JZ d P}JZ m QEJZ d QGJZ m QNJZ d QPJZ m QXJZ d QZJZ m QbJZ d QcJZ
+m QhJZ m F~Kl m GAKl d GBKl m GJKl d GLKl m GTKl d GVKl m G]Kl d G_Kl
+m GgKl d GiKl m GpKl d GrKl m GzKl d G|Kl m HCKl d HEKl m HMKl d HOKl
+m HVKl d HXKl m H`Kl d HbKl m HiKl d HkKl m HsKl d HuKl m H|Kl d H~Kl
+m IFKl d IHKl m IOKl d IQKl m IYKl d I[Kl m IbKl d IdKl m IlKl d InKl
+m IuKl d IwKl m I?Kl d JAKl m JIKl d JJKl m JRKl d JTKl m J\Kl d J]Kl
+m JeKl d JgKl m JoKl d JqKl m JxKl d JzKl m KBKl d KDKl m KKKl d KMKl
+m KUKl d KWKl m K^Kl d K`Kl m KhKl d KjKl m KqKl d KsKl m K{Kl d K}Kl
+m LDKl d LFKl m LNKl d LPKl m LWKl d LYKl m LaKl d LcKl m LjKl d LlKl
+m LtKl d LvKl m L}Kl d L?Kl m MGKl d MIKl m MPKl d MRKl m MZKl d M\Kl
+m MdKl d MeKl m MmKl d MoKl m MwKl d MxKl m N@Kl d NBKl m NJKl d NLKl
+m NSKl d NUKl m N]Kl d N_Kl m NfKl d NhKl m NpKl d NrKl m NyKl d N{Kl
+m OCKl d OEKl m OLKl d ONKl m OVKl d OXKl m O_Kl d OaKl m OiKl d OkKl
+m OrKl d OtKl m O|Kl d O~Kl m PEKl d PGKl m POKl d PQKl m PXKl d PZKl
+m PbKl d PdKl m PkKl d PmKl m PuKl d PwKl m P?Kl d Q@Kl m QHKl d QJKl
+m QRKl d QSKl m Q[Kl d Q]Kl m QeKl d QgKl m QhKl m F~L~ m GDL~ d GFL~
+m GML~ d GOL~ m GWL~ d GYL~ m G`L~ d GbL~ m GjL~ d GlL~ m GsL~ d GuL~
+m G}L~ d G?L~ m HFL~ d HHL~ m HPL~ d HRL~ m HYL~ d H[L~ m HcL~ d HeL~
+m HlL~ d HnL~ m HvL~ d HxL~ m H?L~ d IAL~ m IIL~ d IKL~ m IRL~ d ITL~
+m I\L~ d I^L~ m IfL~ d IgL~ m IoL~ d IqL~ m IyL~ d IzL~ m JBL~ d JDL~
+m JLL~ d JNL~ m JUL~ d JWL~ m J_L~ d JaL~ m JhL~ d JjL~ m JrL~ d JtL~
+m J{L~ d J}L~ m KEL~ d KGL~ m KNL~ d KPL~ m KXL~ d KZL~ m KaL~ d KcL~
+m KkL~ d KmL~ m KtL~ d KvL~ m K~L~ d L@L~ m LGL~ d LIL~ m LQL~ d LSL~
+m LZL~ d L\L~ m LdL~ d LfL~ m LmL~ d LoL~ m LwL~ d LyL~ m MAL~ d MBL~
+m MJL~ d MLL~ m MTL~ d MUL~ m M]L~ d M_L~ m MgL~ d MiL~ m MpL~ d MrL~
+m MzL~ d M|L~ m NCL~ d NEL~ m NML~ d NOL~ m NVL~ d NXL~ m N`L~ d NbL~
+m NiL~ d NkL~ m NsL~ d NuL~ m N|L~ d N~L~ m OFL~ d OHL~ m OOL~ d OQL~
+m OYL~ d O[L~ m ObL~ d OdL~ m OlL~ d OnL~ m OuL~ d OwL~ m O?L~ d PAL~
+m PHL~ d PJL~ m PRL~ d PTL~ m P\L~ d P]L~ m PeL~ d PgL~ m PoL~ d PpL~
+m PxL~ d PzL~ m QBL~ d QDL~ m QKL~ d QML~ m QUL~ d QWL~ m Q^L~ d Q`L~
+m QhL~ d QhL~ m F~NO d F?NO m GGNO d GINO m GPNO d GRNO m GZNO d G\NO
+m GcNO d GeNO m GmNO d GoNO m GvNO d GxNO m H@NO d HBNO m HINO d HKNO
+m HSNO d HUNO m H\NO d H^NO m HfNO d HhNO m HpNO d HqNO m HyNO d H{NO
+m ICNO d IDNO m ILNO d INNO m IVNO d IWNO m I_NO d IaNO m IiNO d IkNO
+m IrNO d ItNO m I|NO d I~NO m JENO d JGNO m JONO d JQNO m JXNO d JZNO
+m JbNO d JdNO m JkNO d JmNO m JuNO d JwNO m J~NO d K@NO m KHNO d KJNO
+m KQNO d KSNO m K[NO d K]NO m KdNO d KfNO m KnNO d KpNO m KwNO d KyNO
+m LANO d LCNO m LKNO d LLNO m LTNO d LVNO m L^NO d L_NO m LgNO d LiNO
+m LqNO d LrNO m LzNO d L|NO m MDNO d MFNO m MMNO d MONO m MWNO d MYNO
+m M`NO d MbNO m MjNO d MlNO m MsNO d MuNO m M}NO d M?NO m NFNO d NHNO
+m NPNO d NRNO m NYNO d N[NO m NcNO d NeNO m NlNO d NnNO m NvNO d NxNO
+m N?NO d OANO m OINO d OKNO m ORNO d OTNO m O\NO d O^NO m OfNO d OgNO
+m OoNO d OqNO m OyNO d OzNO m PBNO d PDNO m PLNO d PMNO m PUNO d PWNO
+m P_NO d PaNO m PhNO d PjNO m PrNO d PtNO m P{NO d P}NO m QENO d QGNO
+m QNNO d QPNO m QXNO d QZNO m QaNO d QcNO m QhNO m GRF^ m GRF` d GRFa
+m GRFf d GRFh m GRFm d GRFn m GRFs d GRFt m GRFy d GRF{ m GRG@ d GRGA
+m GRGF d GRGG m GRGL d GRGN m GRGS d GRGT
+stroke
+m GRGT m GRGY d GRGZ m GRG_ d GRGa m GRGf d GRGg m GRGl d GRGm m GRGr
+d GRGt m GRGy d GRGz m GRG? d GRH@ m GRHE d GRHG m GRHL d GRHM m GRHR
+d GRHS m GRHY d GRHZ m GRH_ d GRH` m GRHe d GRHf m GRHl d GRHm m GRHr
+d GRHs m GRHx d GRHz m GRH? d GRI@ m GRIE d GRIF m GRIK d GRIM m GRIR
+d GRIS m GRIX d GRIY m GRI^ d GRI` m GRIe d GRIf m GRIk d GRIl m GRIq
+d GRIs m GRIx d GRIy m GRI~ d GRI? m GRJD d GRJF m GRJK d GRJL m GRJQ
+d GRJR m GRJW d GRJY m GRJ^ d GRJ_ m GRJd d GRJe m GRJk d GRJl m GRJq
+d GRJr m GRJw d GRJx m GRJ~ d GRJ? m GRKD d GRKE m GRKJ d GRKL m GRKQ
+d GRKR m GRKW d GRKX m GRK] d GRK_ m GRKd d GRKe m GRKj d GRKk m GRKp
+d GRKr m GRKw d GRKx m GRK} d GRK~ m GRLC d GRLE m GRLJ d GRLK m GRLP
+d GRLQ m GRLV d GRLX m GRL] d GRL^ m GRLc d GRLd m GRLi d GRLk m GRLp
+d GRLq m GRLv d GRLw m GRL} d GRL~ m GRMC d GRMD m GRMI d GRMJ m GRMP
+d GRMQ m GRMV d GRMW m GRM\ d GRM^ m GRMc d GRMd m GRMi d GRMj m GRMo
+d GRMq m GRMv d GRMw m GRM| d GRM} m GRNB d GRND m GRNI d GRNJ m GRNO
+d GRNO m H}F^ d H}F_ m H}Fd d H}Ff m H}Fk d H}Fl m H}Fq d H}Fr m H}Fw
+d H}Fy m H}F~ d H}F? m H}GD d H}GE m H}GJ d H}GL m H}GQ d H}GR m H}GW
+d H}GX m H}G] d H}G_ m H}Gd d H}Ge m H}Gj d H}Gk m H}Gp d H}Gr m H}Gw
+d H}Gx m H}G} d H}G~ m H}HC d H}HE m H}HJ d H}HK m H}HP d H}HQ m H}HW
+d H}HX m H}H] d H}H^ m H}Hc d H}Hd m H}Hj d H}Hk m H}Hp d H}Hq m H}Hv
+d H}Hx m H}H} d H}H~ m H}IC d H}ID m H}II d H}IK m H}IP d H}IQ m H}IV
+d H}IW m H}I\ d H}I^ m H}Ic d H}Id m H}Ii d H}Ij m H}Io d H}Iq m H}Iv
+d H}Iw m H}I| d H}I} m H}JB d H}JD m H}JI d H}JJ m H}JO d H}JP m H}JU
+d H}JW m H}J\ d H}J] m H}Jb d H}Jc m H}Ji d H}Jj m H}Jo d H}Jp m H}Ju
+d H}Jv m H}J| d H}J} m H}KB d H}KC m H}KH d H}KJ m H}KO d H}KP m H}KU
+d H}KV m H}K[ d H}K] m H}Kb d H}Kc m H}Kh d H}Ki m H}Kn d H}Kp m H}Ku
+d H}Kv m H}K{ d H}K| m H}LA d H}LC m H}LH d H}LI m H}LN d H}LO m H}LT
+d H}LV m H}L[ d H}L\ m H}La d H}Lb m H}Lg d H}Li m H}Ln d H}Lo m H}Lt
+d H}Lu m H}L{ d H}L| m H}MA d H}MB m H}MG d H}MH m H}MN d H}MO m H}MT
+d H}MU m H}MZ d H}M\ m H}Ma d H}Mb m H}Mg d H}Mh m H}Mm d H}Mo m H}Mt
+d H}Mu m H}Mz d H}M{ m H}N@ d H}NB m H}NG d H}NH m H}NM d H}NN m H}NO
+m JgF^ m JgFb d JgFd m JgFi d JgFj m JgFo d JgFp m JgFu d JgFw m JgF|
+d JgF} m JgGB d JgGC m JgGH d JgGJ m JgGO d JgGP m JgGU d JgGV m JgG[
+d JgG] m JgGb d JgGc m JgGh d JgGi m JgGn d JgGp m JgGu d JgGv m JgG{
+d JgG| m JgHB d JgHC m JgHH d JgHI m JgHN d JgHO m JgHU d JgHV m JgH[
+d JgH\ m JgHa d JgHc m JgHh d JgHi m JgHn d JgHo m JgHt d JgHv m JgH{
+d JgH| m JgIA d JgIB m JgIG d JgII m JgIN d JgIO m JgIT d JgIU m JgIZ
+d JgI\ m JgIa d JgIb m JgIg d JgIh m JgIm d JgIo m JgIt d JgIu m JgIz
+d JgI{ m JgJ@ d JgJB m JgJG d JgJH m JgJM d JgJN m JgJT d JgJU m JgJZ
+d JgJ[ m JgJ` d JgJa m JgJg d JgJh m JgJm d JgJn m JgJs d JgJu m JgJz
+d JgJ{ m JgK@ d JgKA m JgKF d JgKH m JgKM d JgKN m JgKS d JgKT m JgKY
+d JgK[ m JgK` d JgKa m JgKf d JgKg m JgKl d JgKn m JgKs d JgKt m JgKy
+d JgKz m JgK? d JgLA m JgLF d JgLG m JgLL d JgLM m JgLR d JgLT m JgLY
+d JgLZ m JgL_ d JgL` m JgLf d JgLg m JgLl d JgLm m JgLr d JgLs m JgLy
+d JgLz m JgL? d JgM@ m JgME d JgMG m JgML d JgMM m JgMR d JgMS m JgMX
+d JgMZ m JgM_ d JgM` m JgMe d JgMf m JgMk d JgMm m JgMr d JgMs m JgMx
+d JgMy m JgM~ d JgN@ m JgNE d JgNF m JgNK d JgNL m JgNO m LRF^ m LRF`
+d LRFb m LRFg d LRFh m LRFm d LRFn m LRFs d LRFu m LRFz d LRF{ m LRG@
+d LRGA m LRGF d LRGH m LRGM d LRGN m LRGS d LRGT m LRGY d LRG[ m LRG`
+d LRGa m LRGf d LRGg m LRGl d LRGn m LRGs d LRGt m LRGy d LRGz m LRH@
+d LRHA m LRHF d LRHG m LRHL d LRHM m LRHS d LRHT m LRHY d LRHZ m LRH_
+d LRHa m LRHf d LRHg m LRHl d LRHm m LRHr d LRHt m LRHy d LRHz m LRH?
+d LRI@ m LRIE d LRIG m LRIL d LRIM m LRIR d LRIS m LRIX d LRIZ m LRI_
+d LRI` m LRIe d LRIf m LRIk d LRIm m LRIr d LRIs m LRIx d LRIy m LRI~
+d LRJ@ m LRJE d LRJF m LRJK d LRJL m LRJR d LRJS m LRJX d LRJY m LRJ^
+d LRJ_ m LRJe d LRJf m LRJk d LRJl m LRJq d LRJs m LRJx d LRJy m LRJ~
+d LRJ? m LRKD d LRKF m LRKK d LRKL m LRKQ d LRKR m LRKW d LRKY m LRK^
+d LRK_ m LRKd d LRKe m LRKj d LRKl m LRKq d LRKr m LRKw d LRKx m LRK}
+d LRK? m LRLD d LRLE m LRLJ d LRLK m LRLP d LRLR m LRLW d LRLX m LRL]
+d LRL^ m LRLd d LRLe m LRLj d LRLk m LRLp d LRLq m LRLw d LRLx m LRL}
+d LRL~ m LRMC d LRME m LRMJ d LRMK m LRMP d LRMQ m LRMV d LRMX m LRM]
+d LRM^ m LRMc d LRMd m LRMi d LRMk m LRMp d LRMq m LRMv d LRMw m LRM|
+d LRM~ m LRNC d LRND m LRNI d LRNJ m LRNO m M}F^ m M}F^ d M}F` m M}Fe
+d M}Ff m M}Fk d M}Fl m M}Fq d M}Fs m M}Fx d M}Fy m M}F~ d M}F? m M}GD
+d M}GF m M}GK d M}GL m M}GQ d M}GR m M}GW d M}GY m M}G^ d M}G_ m M}Gd
+d M}Ge m M}Gj d M}Gl m M}Gq d M}Gr m M}Gw d M}Gx m M}G~ d M}G? m M}HD
+d M}HE m M}HJ d M}HK m M}HQ d M}HR m M}HW d M}HX m M}H] d M}H_ m M}Hd
+d M}He m M}Hj d M}Hk m M}Hp d M}Hr m M}Hw d M}Hx m M}H} d M}H~ m M}IC
+d M}IE m M}IJ d M}IK m M}IP d M}IQ m M}IV d M}IX m M}I] d M}I^ m M}Ic
+d M}Id m M}Ii d M}Ik m M}Ip d M}Iq m M}Iv d M}Iw m M}I| d M}I~ m M}JC
+d M}JD m M}JI d M}JJ m M}JP d M}JQ m M}JV d M}JW m M}J\ d M}J^ m M}Jc
+d M}Jd m M}Ji d M}Jj m M}Jo d M}Jq m M}Jv d M}Jw m M}J| d M}J} m M}KB
+d M}KD m M}KI d M}KJ m M}KO d M}KP m M}KU d M}KW m M}K\ d M}K] m M}Kb
+d M}Kc m M}Kh d M}Kj m M}Ko d M}Kp m M}Ku d M}Kv m M}K{ d M}K} m M}LB
+d M}LC m M}LH d M}LI m M}LN d M}LP m M}LU d M}LV m M}L[ d M}L\ m M}Lb
+d M}Lc m M}Lh d M}Li m M}Ln d M}Lp m M}Lu d M}Lv m M}L{ d M}L| m M}MA
+d M}MC m M}MH d M}MI m M}MN d M}MO m M}MT d M}MV m M}M[ d M}M\ m M}Ma
+d M}Mb m M}Mg d M}Mi m M}Mn d M}Mo m M}Mt d M}Mu m M}Mz d M}M| m M}NA
+d M}NB m M}NG d M}NH m M}NM d M}NO m M}NO m OhF^ m OhFc d OhFd m OhFi
+d OhFj m OhFo d OhFq m OhFv d OhFw m OhF| d OhF} m OhGB d OhGD m OhGI
+d OhGJ m OhGO d OhGP m OhGU d OhGW m OhG\ d OhG] m OhGb d OhGc m OhGi
+d OhGj m OhGo d OhGp m OhGu d OhGv m OhG| d OhG} m OhHB d OhHC m OhHH
+d OhHJ m OhHO d OhHP m OhHU d OhHV m OhH[ d OhH] m OhHb d OhHc m OhHh
+d OhHi m OhHn d OhHp m OhHu d OhHv m OhH{ d OhH| m OhIA d OhIC m OhIH
+d OhII m OhIN d OhIO m OhIT d OhIV m OhI[ d OhI\ m OhIa d OhIb m OhIg
+d OhIi m OhIn d OhIo m OhIt d OhIu m OhI{ d OhI| m OhJA d OhJB m OhJG
+d OhJH m OhJN d OhJO m OhJT d OhJU m OhJZ d OhJ\ m OhJa d OhJb m OhJg
+d OhJh m OhJm d OhJo m OhJt d OhJu m OhJz d OhJ{ m OhK@ d OhKB m OhKG
+d OhKH m OhKM d OhKN m OhKS d OhKU m OhKZ d OhK[ m OhK` d OhKa m OhKf
+d OhKh m OhKm d OhKn m OhKs d OhKt m OhKy d OhK{ m OhL@ d OhLA m OhLF
+d OhLG m OhLM d OhLN m OhLS d OhLT m OhLY d OhLZ m OhL` d OhLa m OhLf
+d OhLg m OhLl d OhLn m OhLs d OhLt m OhLy d OhLz m OhL? d OhMA m OhMF
+d OhMG m OhML d OhMM m OhMR d OhMT m OhMY d OhMZ m OhM_ d OhM` m OhMe
+d OhMg m OhMl d OhMm m OhMr d OhMs m OhMx d OhMz m OhM? d OhN@ m OhNE
+d OhNF m OhNK d OhNM m OhNO m QSF^ m QSFa d QSFb m QSFg d QSFh m QSFm
+d QSFo m QSFt d QSFu m QSFz d QSF{ m QSG@ d QSGB m QSGG d QSGH m QSGM
+d QSGN m QSGS d QSGU m QSGZ d QSG[ m QSG` d QSGa m QSGg d QSGh m QSGm
+d QSGn m QSGs d QSGt m QSGz d QSG{ m QSH@ d QSHA m QSHF d QSHH m QSHM
+d QSHN m QSHS d QSHT m QSHY d QSH[ m QSH` d QSHa m QSHf d QSHg m QSHl
+d QSHn m QSHs d QSHt m QSHy d QSHz m QSH? d QSIA m QSIF d QSIG m QSIL
+d QSIM m QSIR d QSIT m QSIY d QSIZ m QSI_ d QSI` m QSIe d QSIg m QSIl
+d QSIm m QSIr d QSIs m QSIy d QSIz m QSI? d QSJ@ m QSJE d QSJF m QSJL
+d QSJM m QSJR d QSJS m QSJX d QSJZ m QSJ_ d QSJ` m QSJe d QSJf m QSJk
+d QSJm m QSJr d QSJs m QSJx d QSJy m QSJ~ d QSK@ m QSKE d QSKF m QSKK
+d QSKL m QSKQ d QSKS m QSKX d QSKY m QSK^ d QSK_
+stroke
+m QSK_ m QSKd d QSKf m QSKk d QSKl m QSKq d QSKr m QSKw d QSKy m QSK~
+d QSK? m QSLD d QSLE m QSLK d QSLL m QSLQ d QSLR m QSLW d QSLX m QSL^
+d QSL_ m QSLd d QSLe m QSLj d QSLl m QSLq d QSLr m QSLw d QSLx m QSL}
+d QSL? m QSMD d QSME m QSMJ d QSMK m QSMP d QSMR m QSMW d QSMX m QSM]
+d QSM^ m QSMc d QSMe m QSMj d QSMk m QSMp d QSMq m QSMv d QSMx m QSM}
+d QSM~ m QSNC d QSND m QSNI d QSNK m QSNO
+stroke
+03 setlinewidth
+m KoEw d KwEi m KoEi d KwEw m K{Ex m K{Eo d LBEo m LGEx m LGEi d LJEw
+d LLEw d LNEi m LHEn d LNEn m LSEx m LSEw d L[Ei m LSEi d L[Ew m L_Ex
+m LaEw d LeEw m LcEw d LcEi m LaEi d LeEi m LkEx m LlEk d LmEi d LqEi
+d LsEk d LsEn d LqEp d LmEp d LlEs d LlEu d LmEw d LqEw d LsEu m LwEx
+m EMI? d EVJA d EbJA m EVJA d EMJC m ELJF m EXJG d EXJL m ELJO m EbJO
+d EMJQ d EMJR d EbJT m EZJO d EZJS m ELJW m EMJW d EbJ\ m EbJW d EMJ\
+m ELJ_ m EMJ` d EMJc m EMJa d EbJa m EbJ` d EbJc m ELJg m E_Jg d EbJh
+d EbJk d E_Jl d E[Jl d EXJk d EWJh d ETJg d EPJg d EMJh d EMJk d EPJl
+m ELJo m JpN] d JpNk m JlNk d JtNk m JxNl m JxNk d JxN] m JxNc d JzNe
+d J}Ne d J?Nc d J?N] m KDNl m KDNa d KKNa d KKNc d KINe d KFNe d KDNc
+d KDN_ d KFN] d KIN] d KKN_ m KPNl m KPNl m K\Nl m K]N_ d K_N] d KcN]
+d KdN_ d KdNb d KcNd d K_Nd d K]Ng d K]Ni d K_Nk d KcNk d KdNi m KhNl
+m KjNk d KoNk m KmNk d KmN] m KkN] d KoN] m KuNl m KuN] d KuNk d K}N]
+d K}Nk m LANl m LIN` d LGN] d LCN] d LAN` d LANi d LCNk d LGNk d LINi
+m LMNl m LMNl m LYNl m LYNk d LYN] m LYNd d L^Nd m LYNk d LaNk m LeNl
+m LfNe d LfN_ d LgN] d LkN] d LlN_ m LlN] d LlNe m LqNl m LrNe d LrN]
+m LrNc d LtNe d LwNe d LxNc d LxN] m L}Nl m MDNd d MCNe d M@Ne d L~Nc
+d L~N_ d M@N] d MCN] d MDN^ m MJNl m MKNe d MPNe m MPN^ d MON] d MNN]
+d MMN^ d MMNj m MVNl m MYNh d MYNg d MZNg d MZNh d MYNh d MZNg m MYNd
+d MZNd d MZN] m MbNl m MbNc d MbN_ d MdN] d MgN] d MiN_ d MiNc d MgNe
+d MdNe d MbNc m MnNl m MnNe d MnN] m MnNc d MpNe d MsNe d MuNc d MuN]
+m MzNl
+stroke
+01 setlinewidth
+m F~G} d F?G{ d G@Gz d GBGx d GCGv d GDGu d GFGs d GGGr d GHGp d GJGo
+d GKGm d GLGl d GNGk d GOGj d GPGj d GRGi d GSGi d GTGi d GVGi d GWGj
+d GXGj d GZGk d G[Gl d G\Gn d G^Go d G_Gp d G`Gr d GbGt d GcGu d GdGw
+d GfGy d GgG{ d GhG} d GjG~ d GkH@ d GlHA d GnHC d GoHD d GpHE d GrHE
+d GsHF d GtHF d GvHF d GwHF d GxHF d GzHE d G{HD d G}HC d G~HB d G?H@
+d H@G~ d HBG} d HCG{ d HDGy d HFGw d HGGu d HIGs d HJGq d HKGo d HMGm
+d HNGk d HOGj d HPGi d HRGg d HSGg d HUGf d HVGf d HWGe d HYGf d HZGf
+d H[Gg d H]Gh d H^Gi d H_Gj d HaGl d HbGn d HcGp d HeGr d HfGt d HgGw
+d HiGy d HjG{ d HkG~ d HmH@ d HnHB d HoHD d HqHF d HrHG d HsHH d HuHI
+d HvHJ d HwHK d HyHK d HzHK d H{HJ d H}HJ d H~HH d H?HG d IAHE d IBHD
+d ICHA d IEG? d IFG} d IGGz d IIGw d IJGu d IKGr d IMGo d INGm d IOGj
+d IQGh d IRGf d ISGd d IUGb d IVGa d IWG` d IYG_ d IZG_ d I[G_ d I]G`
+d I^Ga d I_Gb d IaGc d IbGe d IcGg d IeGj d IfGm d IgGo d IiGs d IjGv
+d IkGy d ImG| d InH@ d IoHC d IqHF d IrHI d IsHK d IuHN d IvHP d IwHQ
+d IyHR d IzHS d I{HT d I}HT d I~HS d I?HR d JAHQ d JBHO d JCHM d JEHJ
+d JFHG d JGHD d JIH@ d JJG} d JKGy d JMGu d JNGq d JOGl d JQGh d JRGe
+d JSGa d JUG^ d JVGZ d JWGX d JYGV d JZGT d J[GR d J]GR d J^GR d J_GR
+d JaGS d JbGU d JcGW d JeGZ d JfG] d JgGa d JiGe d JjGi d JkGn d JmGt
+d JnGy d JoG? d JqHD d JrHJ d JsHO d JuHT d JvHY d JwH] d JyHa d JzHe
+d J{Hg d J}Hi d J~Hk d J?Hk d KAHk d KBHj d KDHh d KEHe d KFHb d KGH]
+d KIHX d KJHR d KKHK d KMHD d KNG} d KPGu d KQGl d KRGd d KTG[ d KUGS
+d KVGJ d KXGB d KYF{ d KZFt d K\Fn d K]Fi d K^Fd d K`Fa d KaF_ d KbF^
+d KdF_ d KeFa d KfFd d KhFj d KiFp d KjFy d KlGB d KmGN d KnG[ d KpGi
+d KqGy d KrHJ d KtH\ d KuHp d KvID d KxIY d KyIn d KzJD d K|JZ d K}Jq
+d K~KG d L@K] d LAKr d LBLF d LDLZ d LELm d LFL~ d LHMO d LIM] d LJMj
+d LLMu d LMM~ d LNNF d LPNK d LQNN d LRNO d LTNN d LUNK d LVNF d LXM~
+d LYMu d LZMj d L\M] d L]MO d L^L~ d L`Lm d LaLZ d LbLF d LdKr d LeK]
+d LfKG d LhJq d LiJZ d LjJD d LlIn d LmIY d LnID d LpHp d LqH\ d LrHJ
+d LtGy d LuGi d LvG[ d LxGN d LyGB d LzFy d L|Fp d L}Fj d L~Fd d M@Fa
+d MAF_ d MBF^ d MDF_ d MEFa d MFFd d MHFi d MIFn d MJFt d MLF{ d MMGB
+d MNGJ d MPGS d MQG[ d MRGd d MTGl d MUGu d MVG} d MXHD d MYHK d MZHR
+d M\HX d M]H] d M^Hb d M`He d MaHh d MbHj d MdHk d MeHk d MfHk d MhHi
+d MiHg d MjHe d MlHa d MmH] d MnHY d MpHT d MqHO d MrHJ d MtHD d MuG?
+d MvGy d MxGt d MyGn d MzGi d M|Ge d M}Ga d M~G] d N@GZ d NAGW d NBGU
+d NDGS d NEGR d NFGR d NHGR d NIGR d NKGT d NLGV d NMGX d NOGZ d NPG^
+d NQGa d NRGe d NTGh d NUGl d NWGq d NXGu d NYGy d N[G} d N\H@ d N]HD
+d N_HG d N`HJ d NaHM d NcHO d NdHQ d NeHR d NgHS d NhHT d NiHT d NkHS
+d NlHR d NmHQ d NoHP d NpHN d NqHK d NsHI d NtHF d NuHC d NwH@ d NxG|
+d NyGy d N{Gv d N|Gs d N}Go d N?Gm d O@Gj d OAGg d OCGe d ODGc d OEGb
+d OGGa d OHG` d OIG_ d OKG_ d OLG_ d OMG` d OOGa d OPGb d OQGd d OSGf
+d OTGh d OUGj d OWGm d OXGo d OYGr d O[Gu d O\Gw d O]Gz d O_G} d O`G?
+d OaHA d OcHD d OdHE d OeHG d OgHH d OhHJ d OiHJ d OkHK d OlHK d OmHK
+d OoHJ d OpHI d OqHH d OsHG d OtHF d OuHD d OwHB d OxH@ d OyG~ d O{G{
+d O|Gy d O}Gw d O?Gt d P@Gr d PAGp d PCGn d PDGl d PEGj d PGGi d PHGh
+d PIGg d PKGf d PLGf d PMGe d POGf d PPGf d PQGg d PSGg d PTGi d PUGj
+d PWGk d PXGm d PYGo d P[Gq d P\Gs d P]Gu d P_Gw d P`Gy d PaG{ d PcG}
+d PdG~ d PeH@ d PgHB d PhHC d PiHD d PkHE d PlHF d PmHF d PoHF d PpHF
+d PqHF d PsHE d PtHE d PuHD d PwHC d PxHA d PyH@ d P{G~ d P|G} d P}G{
+d P?Gy d Q@Gw d QAGu d QCGt d QDGr d QEGp d QGGo d QHGn d QIGl d QKGk
+d QLGj d QMGj d QOGi d QPGi d QQGi d QSGi d QTGj d QVGj d QWGk d QXGl
+d QYGm d Q[Go d Q\Gp d Q]Gr d Q_Gs d Q`Gu d QbGv d QcGx d QdGz d QfG{
+d QgG} d QhG~
+stroke
+03 setlinewidth
+m UtPB d UtPB d UtPT d UtPB m UqOx d UoOu d UoOm d UqOi d UtOi d UvOm
+d UvOu d UtOx d UqOx m UzOx m UtPB d VYPB d VYPK d VYPB d V}PB d V}PK
+d V}PB d WbPB d WbPK d WbPB d XGPB d XGPT d XGPB m W~Oj d W~Oi d W?Oi
+d W?Oj d W~Oj d W?Oi m XGOx m XGOv d XIOx d XMOx d XOOv d XOOq d XGOl
+d XGOi d XOOi m XSOx m XGPB d XkPB d XkPK d XkPB d YPPB d YPPK d YPPB
+d YtPB d YtPK d YtPB d ZYPB d ZYPT d ZYPB m ZQOj d ZQOi d ZROi d ZROj
+d ZQOj d ZROi m ZYOx m Z_Oi d Z_Ox d Z^Ox d ZYOn d ZYOm d Z_Om m Z_Om
+d ZaOm m ZeOx m ZYPB d Z}PB d Z}PK d Z}PB d [bPB d [bPK d [bPB d \GPB
+d \GPK d \GPB d \kPB d \kPT d \kPB m \cOj d \cOi d \dOi d \dOj d \cOj
+d \dOi m \kOx m \kOo d \nOr d \qOr d \sOo d \sOl d \qOi d \nOi d \kOl
+d \kOo d \lOt d \pOx m \wOx m \kPB d ]PPB d ]PPK d ]PPB d ]tPB d ]tPK
+d ]tPB d ^YPB d ^YPK d ^YPB d ^}PB d ^}PT d ^}PB m ^uOj d ^uOi d ^vOi
+d ^vOj d ^uOj d ^vOi m ^}Ox m ^?Ox d ^~Ov d ^~Os d ^?Oq d ^~Oo d ^~Ol
+d ^?Oi d _DOi d _EOl d _EOo d _DOq d ^?Oq m _DOq d _EOs d _EOv d _DOx
+d ^?Ox m _IOx m ^}PB d _bPB d _bPK d _bPB d `FPB d `FPK d `FPB d `kPB
+d `kPK d `kPB d aPPB d aPPT d aPPB m aKOu d aNOx d aNOi m aVOx m aPPB
+d aPPB m aPPB d aPPB d `~PB d aPPB d aPP] d aGP] d aPP] d aPPw d aGPw
+d aPPw d aPQR d aGQR d aPQR d aPQm d `~Qm d aPQm d aPRH d aGRH d aPRH
+d aPRc d aGRc d aPRc d aPR} d aGR} d aPR} d aPSX d `~SX d aPSX d aPSs
+d aGSs d aPSs d aPTN d aGTN d aPTN d aPTh d aGTh d aPTh d aPUC d `~UC
+d aPUC d aPU^ d aGU^ d aPU^ d aPUy d aGUy d aPUy d aPVS d aGVS d aPVS
+d aPVn d `~Vn d aPVn d aPWI d aGWI d aPWI d aPWd d aGWd d aPWd d aPW~
+d aGW~ d aPW~ d aPXY d `~XY d aPXY d aPXY m UtPB d UtPB d VFPB d UtPB
+m UePK d UbPH d UbP@ d UeO} d UhO} d UjP@ d UjPH d UhPK d UePK m UnPK
+m UtPB d UtP] d U}P] d UtP] d UtPw d U}Pw d UtPw d UtQR d U}QR d UtQR
+d UtQm d VFQm d UtQm m UZQh d UZQg d U[Qg d U[Qh d UZQh d U[Qg m UbQv
+m UbQt d UdQv d UhQv d UjQt d UjQp d UbQj d UbQh d UjQh m UnQv m UtQm
+d UtRH d U}RH d UtRH d UtRc d U}Rc d UtRc d UtR} d U}R} d UtR} d UtSX
+d VFSX d UtSX m UZSS d UZSR d U[SR d U[SS d UZSS d U[SR m UbSb m UhSS
+d UhSa d UgSa d UbSW d UbSV d UhSV m UhSV d UjSV m UnSb m UtSX d UtSs
+d U}Ss d UtSs d UtTN d U}TN d UtTN d UtTh d U}Th d UtTh d UtUC d VFUC
+d UtUC m UZT~ d UZT} d U[T} d U[T~ d UZT~ d U[T} m UbUM m UbUD d UeUF
+d UhUF d UjUD d UjU@ d UhT~ d UeT~ d UbU@ d UbUD d UcUH d UfUL m UnUM
+m UtUC d UtU^ d U}U^ d UtU^ d UtUy d U}Uy d UtUy d UtVS d U}VS d UtVS
+d UtVn d VFVn d UtVn m UZVi d UZVh d U[Vh d U[Vi d UZVi d U[Vh m UbVx
+m UdVw d UbVu d UbVr d UdVp d UbVn d UbVk d UdVi d UhVi d UjVk d UjVn
+d UhVp d UdVp m UhVp d UjVr d UjVu d UhVw d UdVw m UnVx m UtVn d UtWI
+d U}WI d UtWI d UtWd d U}Wd d UtWd d UtW~ d U}W~ d UtW~ d UtXY d VFXY
+d UtXY m UcX_ d UfXb d UfXT m UnXc m UtXY d UtXY m UtXY d UtXY d UtXG
+d UtXY d VYXY d VYXP d VYXY d V}XY d V}XP d V}XY d WbXY d WbXP d WbXY
+d XGXY d XGXG d XGXY d XkXY d XkXP d XkXY d YPXY d YPXP d YPXY d YtXY
+d YtXP d YtXY d ZYXY d ZYXG d ZYXY d Z}XY d Z}XP d Z}XY d [bXY d [bXP
+d [bXY d \GXY d \GXP d \GXY d \kXY d \kXG d \kXY d ]PXY d ]PXP d ]PXY
+d ]tXY d ]tXP d ]tXY d ^YXY d ^YXP d ^YXY d ^}XY d ^}XG d ^}XY d _bXY
+d _bXP d _bXY d `FXY d `FXP d `FXY d `kXY d `kXP d `kXY d aPXY d aPXG
+d aPXY d aPXY
+stroke
+01 setlinewidth
+m `WRo d `eRo d `eR~ d `WR~ d `WRo m [}P\ d \AP\ d \APa d [}Pa d [}P\
+m VjRK d VxRK d VxRY d VjRY d VjRK m _uQR d `BQR d `BQ` d _uQ` d _uQR
+m YHSG d YUSG d YUSU d YHSU d YHSG m ]kQF d ]~QF d ]~QY d ]kQY d ]kQF
+m \xWo d \|Wo d \|Wt d \xWt d \xWo m _QXB d _ZXB d _ZXL d _QXL d _QXB
+m ZTP~ d ZfP~ d ZfQQ d ZTQQ d ZTP~ m UtWC d VBWC d VBWW d UtWW m `AUj
+d `FUj d `FUo d `AUo d `AUj m ZBQi d ZTQi d ZTQ| d ZBQ| d ZBQi m ]~Vk
+d ^BVk d ^BVp d ]~Vp d ]~Vk m VqRZ d V~RZ d V~Rh d VqRh d VqRZ m ]RT^
+d ]dT^ d ]dTr d ]RTr d ]RT^ m W^VN d WgVN d WgVX d W^VX d W^VN m ]~Qv
+d ^GQv d ^GQ? d ]~Q? d ]~Qv m W|Si d X@Si d X@Sn d W|Sn d W|Si m Z^Vc
+d ZcVc d ZcVh d Z^Vh d Z^Vc m [bUf d [pUf d [pUt d [bUt d [bUf m [JVR
+d [SVR d [SV\ d [JV\ d [JVR m VyP} d V}P} d V}QB d VyQB d VyP} m YVUC
+d YhUC d YhUV d YVUV d YVUC m [EUt d [NUt d [NU~ d [EU~ d [EUt m XfWr
+d XxWr d XxXE d XfXE d XfWr m `cWU d `uWU d `uWh d `cWh d `cWU m `NQq
+d `[Qq d `[R@ d `NR@ d `NQq m VbUB d VpUB d VpUP d VbUP d VbUB m UtVy
+d VBVy d VBWL d UtWL m Y\WN d YeWN d YeWX d Y\WX d Y\WN m XUVh d XZVh
+d XZVm d XUVm d XUVh m VxRR d WARR d WAR[ d VxR[ d VxRR m ]iQT d ]rQT
+d ]rQ] d ]iQ] d ]iQT m ]ZQh d ]cQh d ]cQr d ]ZQr d ]ZQh m __SH d _dSH
+d _dSM d __SM d __SH m X~PW d YLPW d YLPf d X~Pf d X~PW m XjQF d XsQF
+d XsQP d XjQP d XjQF m ]qSD d ]zSD d ]zSN d ]qSN d ]qSD m `|SL d aISL
+d aIS[ d `|S[ d `|SL m `UXS d `^XS d `^XY m `UXY d `UXS m YXRG d Y\RG
+d Y\RL d YXRL d YXRG m ]EXA d ]NXA d ]NXK d ]EXK d ]EXA m \bS| d \fS|
+d \fT@ d \bT@ d \bS| m VuVy d V}Vy d V}WB d VuWB d VuVy m XsVU d X|VU
+d X|V_ d XsV_ d XsVU m `sPQ d `wPQ d `wPV d `sPV d `sPQ m _CT^ d _UT^
+d _UTq d _CTq d _CT^ m XnPH d XwPH d XwPQ d XnPQ d XnPH m `_QU d `cQU
+d `cQZ d `_QZ d `_QU m \qVV d \vVV d \vV[ d \qV[ d \qVV m `eVm d `sVm
+d `sV{ d `eV{ d `eVm m \pWl d \yWl d \yWv d \pWv d \pWl m ZvSy d Z?Sy
+d Z?TB d ZvTB d ZvSy m XRTV d XdTV d XdTj d XRTj d XRTV m _ZTL d _^TL
+d _^TQ d _ZTQ d _ZTL m _XRz d _fRz d _fSH d _XSH d _XRz m ZwTo d [ETo
+d [ET~ d ZwT~ d ZwTo m ZrQA d [@QA d [@QP d ZrQP d ZrQA m XdPx d XmPx
+d XmQB d XdQB d XdPx m ]fTO d ]xTO d ]xTb d ]fTb d ]fTO m ZWSW d ZeSW
+d ZeSf d ZWSf d ZWSW m ^IQA d ^RQA d ^RQK d ^IQK d ^IQA m `cPB d `cPG
+d `ZPG d `ZPB m UtUw d UwUw d UwU| d UtU| m UwRP d U|RP d U|RU d UwRU
+d UwRP m `EQp d `IQp d `IQt d `EQt d `EQp m aHXG d aPXG m aPXQ d aHXQ
+d aHXG m \pUL d \yUL d \yUU d \pUU d \pUL m [IPJ d [NPJ d [NPO d [IPO
+d [IPJ m ]dTi d ]mTi d ]mTs d ]dTs d ]dTi m XwWA d Y@WA d Y@WK d XwWK
+d XwWA m _aWU d _nWU d _nWc d _aWc d _aWU m _BTW d _GTW d _GT\ d _BT\
+d _BTW m \FWt d \OWt d \OW} d \FW} d \FWt m XqTH d XzTH d XzTR d XqTR
+d XqTH m `BR| d `GR| d `GSA d `BSA d `BR| m ^dPB d ^iPB d ^iPG d ^dPG
+d ^dPB m XMUP d XVUP d XVUZ d XMUZ d XMUP m [TT` d [YT` d [YTe d [TTe
+d [TT` m ^VXA d ^_XA d ^_XK d ^VXK d ^VXA m \AUt d \EUt d \EUy d \AUy
+d \AUt m _LW| d _QW| d _QXA d _LXA d _LW| m \oXJ d \}XJ d \}XX d \oXX
+d \oXJ m XiVo d XrVo d XrVy d XiVy d XiVo m aCT@ d aPT@ m aPTO d aCTO
+d aCT@ m [\SA d [jSA d [jSO d [\SO d [\SA m ZRPf d ZdPf d ZdPz d ZRPz
+d ZRPf m ]{Wd d ^MWd d ^MWw d ]{Ww d ]{Wd m ZmWk d ZvWk d ZvWu d ZmWu
+d ZmWk m WKPT d WYPT d WYPc d WKPc d WKPT m ]hVf d ]qVf d ]qVo d ]hVo
+d ]hVf m ]IUO d ]MUO d ]MUT d ]IUT d ]IUO m ^SRH d ^\RH d ^\RQ d ^SRQ
+d ^SRH m `wVr d a@Vr d a@V{ d `wV{ d `wVr m [FWU d [SWU d [SWd d [FWd
+d [FWU m WOXK d WaXK d WaXY m WOXY d WOXK m `FWp d `KWp d `KWu d `FWu
+d `FWp m WwRi d W{Ri d W{Rn d WwRn d WwRi m ZeRi d ZjRi d ZjRn d ZeRn
+d ZeRi m [KPm d [OPm d [OPr d [KPr d [KPm m \BQJ d \KQJ d \KQT d \BQT
+d \BQJ m ]USx d ]^Sx d ]^TB d ]UTB d ]USx m ^TV^ d ^bV^ d ^bVm d ^TVm
+d ^TV^ m ZwUR d [DUR d [DUa d ZwUa d ZwUR m _|W~ d `EW~ d `EXH d _|XH
+d _|W~ m ZSWQ d ZWWQ d ZWWV d ZSWV d ZSWQ m _bPf d _kPf d _kPo d _bPo
+d _bPf m _~W\ d `PW\ d `PWp d _~Wp d _~W\ m ZkTV d ZoTV d ZoT[ d ZkT[
+d ZkTV m ]bRl d ]pRl d ]pR{ d ]bR{ d ]bRl m \XQm d \jQm d \jR@ d \XR@
+d \XQm m VqQE d VvQE d VvQJ d VqQJ d VqQE m ^`WF d ^rWF d ^rWY d ^`WY
+d ^`WF m ZaQh d ZjQh d ZjQr d ZaQr d ZaQh m \xWq d ]FWq d ]FX@ d \xX@
+d \xWq m YKUK d YTUK d YTUU d YKUU d YKUK m WmWv d WvWv d WvW? d WmW?
+d WmWv m _FTo d _XTo d _XUB d _FUB d _FTo m _XTM d _fTM d _fT[ d _XT[
+d _XTM m ZhU{ d ZzU{ d ZzVN d ZhVN d ZhU{ m `GRR d `KRR d `KRW d `GRW
+d `GRR m ^sQ] d ^|Q] d ^|Qg d ^sQg d ^sQ] m UzSy d VGSy d VGTH d UzTH
+d UzSy m ^zUQ d ^?UQ d ^?UV d ^zUV d ^zUQ m W~W\ d XCW\ d XCWa d W~Wa
+d W~W\ m XrWO d X{WO d X{WY d XrWY d XrWO m _TRR d _fRR d _fRe d _TRe
+d _TRR m `yTR d aFTR d aFTa d `yTa d `yTR m ^~Wp d _GWp d _GWy d ^~Wy
+d ^~Wp m ^NUa d ^[Ua d ^[Uo d ^NUo d ^NUa m ]bSc d ]gSc
+stroke
+m ]gSc d ]gSh d ]bSh d ]bSc m aGVk d aLVk d aLVp d aGVp d aGVk m UtUY
+d V@UY d V@Ug d UtUg m ZqRI d ZzRI d ZzRS d ZqRS d ZqRI m _TXI d _fXI
+d _fXY m _TXY d _TXI m \JWo d \SWo d \SWy d \JWy d \JWo m `oPy d `}Py
+d `}QG d `oQG d `oPy m VnVM d V|VM d V|V[ d VnV[ d VnVM m `rR^ d `vR^
+d `vRc d `rRc d `rR^ m ^PVS d ^]VS d ^]Va d ^PVa d ^PVS m YqRn d ZCRn
+d ZCSA d YqSA d YqRn m a@VS d aPVS m aPVg d a@Vg d a@VS m XHTf d XQTf
+d XQTp d XHTp d XHTf m ^PU{ d ^bU{ d ^bVO d ^PVO d ^PU{ m XdQr d XqQr
+d XqRA d XdRA d XdQr m XpT~ d X~T~ d X~UL d XpUL d XpT~ m _lPk d _yPk
+d _yPy d _lPy d _lPk m W_Vo d WcVo d WcVt d W_Vt d W_Vo m `fXR d `kXR
+d `kXW d `fXW d `fXR m _zT] d _~T] d _~Tb d _zTb d _zT] m WeQc d WwQc
+d WwQv d WeQv d WeQc m YlVQ d Y~VQ d Y~Vd d YlVd d YlVQ m `uSn d `~Sn
+d `~Sw d `uSw d `uSn m [cXJ d [hXJ d [hXO d [cXO d [cXJ m ]HQE d ]ZQE
+d ]ZQX d ]HQX d ]HQE m \HSI d \[SI d \[S\ d \HS\ d \HSI m ^yWC d _BWC
+d _BWM d ^yWM d ^yWC m \uUO d ]CUO d ]CU^ d \uU^ d \uUO m XKRe d XTRe
+d XTRo d XKRo d XKRe m VGRm d VPRm d VPRw d VGRw d VGRm m \GUF d \LUF
+d \LUK d \GUK d \GUF m VzRb d WGRb d WGRq d VzRq d VzRb m `{Pq d aMPq
+d aMQD d `{QD d `{Pq m _VRW d __RW d __R` d _VR` d _VRW m XhV@ d XvV@
+d XvVN d XhVN d XhV@ m \\TH d \nTH d \nT[ d \\T[ d \\TH m WHTS d WQTS
+d WQT] d WHT] d WHTS m VcP_ d VuP_ d VuPr d VcPr d VcP_ m _YPl d _^Pl
+d _^Pq d _YPq d _YPl m _US} d _gS} d _gTQ d _UTQ d _US} m _OPP d _\PP
+d _\P^ d _OP^ d _OPP m \mSA d \rSA d \rSF d \mSF d \mSA m \WTV d \\TV
+d \\TZ d \WTZ d \WTV m [wXN d \AXN d \AXW d [wXW d [wXN m \[Vj d \mVj
+d \mV} d \[V} d \[Vj m XqU@ d XzU@ d XzUI d XqUI d XqU@ m UxWN d VFWN
+d VFW] d UxW] d UxWN m [mQS d [zQS d [zQa d [mQa d [mQS m _xUL d `JUL
+d `JU` d _xU` d _xUL m ^BWx d ^TWx d ^TXL d ^BXL d ^BWx m WzVw d XCVw
+d XCWA d WzWA d WzVw m WjPB d WjPF d WePF d WePB m [gV~ d [yV~ d [yWQ
+d [gWQ d [gV~ m _qUl d _?Ul d _?Uz d _qUz d _qUl m WXVe d WjVe d WjVx
+d WXVx d WXVe m \rVe d \{Ve d \{Vn d \rVn d \rVe m ]^Tm d ]bTm d ]bTr
+d ]^Tr d ]^Tm m _oWb d `AWb d `AWu d _oWu d _oWb m \BU{ d \GU{ d \GV@
+d \BV@ d \BU{ m _VWL d _[WL d _[WQ d _VWQ d _VWL m _|S@ d `JS@ d `JSN
+d _|SN d _|S@ m _KPm d _]Pm d _]Q@ d _KQ@ d _KPm m ZMVy d ZQVy d ZQV~
+d ZMV~ d ZMVy m VWQi d VdQi d VdQx d VWQx d VWQi m XEWy d XNWy d XNXB
+d XEXB d XEWy m XIQv d XRQv d XRR@ d XIR@ d XIQv m \vTm d \?Tm d \?Tw
+d \vTw d \vTm m [QQ^ d [ZQ^ d [ZQg d [QQg d [QQ^ m YQUy d YcUy d YcVM
+d YQVM d YQUy m `NPY d `RPY d `RP] d `NP] d `NPY m ^MS} d ^VS} d ^VTF
+d ^MTF d ^MS} m WaWW d WjWW d WjW` d WaW` d WaWW m Z@W~ d ZNW~ d ZNXM
+d Z@XM d Z@W~ m WsRX d X@RX d X@Rf d WsRf d WsRX m UtQK d VAQK d VAQY
+d UtQY m [_Sm d [dSm d [dSr d [_Sr d [_Sm m WLTQ d WYTQ d WYT_ d WLT_
+d WLTQ m WoRR d XARR d XARe d WoRe d WoRR m [jSi d [nSi d [nSn d [jSn
+d [jSi m \zVf d ]CVf d ]CVp d \zVp d \zVf m _pTa d `BTa d `BTt d _pTt
+d _pTa m [dVy d [mVy d [mWC d [dWC d [dVy m ]XU` d ]jU` d ]jUs d ]XUs
+d ]XU` m _~QX d `BQX d `BQ] d _~Q] d _~QX m XOSl d XSSl d XSSq d XOSq
+d XOSl m ZzVn d [CVn d [CVw d ZzVw d ZzVn m YsQj d ZEQj d ZEQ} d YsQ}
+d YsQj m ^ZWZ d ^_WZ d ^_W_ d ^ZW_ d ^ZWZ m _FRY d _JRY d _JR^ d _FR^
+d _FRY m XHSB d XZSB d XZSU d XHSU d XHSB m YNPb d Y`Pb d Y`Pu d YNPu
+d YNPb m [QUv d [VUv d [VU{ d [QU{ d [QUv m Y{Q@ d ZDQ@ d ZDQJ d Y{QJ
+d Y{Q@ m ``QY d `nQY d `nQh d ``Qh d ``QY m `hXA d `qXA d `qXK d `hXK
+d `hXA m ]aQq d ]fQq d ]fQv d ]aQv d ]aQq m _hRi d _qRi d _qRs d _hRs
+d _hRi m _NSn d _WSn d _WSw d _NSw d _NSn m Y_SX d YqSX d YqSk d Y_Sk
+d Y_SX m XhU_ d XvU_ d XvUm d XhUm d XhU_ m YPQi d YcQi d YcQ| d YPQ|
+d YPQi m VCTD d VGTD d VGTI d VCTI d VCTD m X{Sg d YMSg d YMSz d X{Sz
+d X{Sg m ^oU[ d ^}U[ d ^}Ui d ^oUi d ^oU[ m W\TH d WnTH d WnT[ d W\T[
+d W\TH m ]yRc d ]~Rc d ]~Rg d ]yRg d ]yRc m [QRx d [^Rx d [^SF d [QSF
+d [QRx m _VXL d _iXL d _iXY m _VXY d _VXL m Y}TE d ZOTE d ZOTX d Y}TX
+d Y}TE m ViWx d VrWx d VrXA d ViXA d ViWx m \dPc d \mPc d \mPl d \dPl
+d \dPc m YAR\ d YSR\ d YSRo d YARo d YAR\ m ]lUB d ]uUB d ]uUK d ]lUK
+d ]lUB m [ERm d [WRm d [WS@ d [ES@ d [ERm m VoVa d VtVa d VtVf d VoVf
+d VoVa m WHUB d WQUB d WQUK d WHUK d WHUB m ]yQ} d ^GQ} d ^GRL d ]yRL
+d ]yQ} m [pPc d \BPc d \BPv d [pPv d [pPc m `YPq d `bPq d `bPz d `YPz
+d `YPq m _VSe d _ZSe d _ZSj d _VSj d _VSe m [KUX d [OUX d [OU] d [KU]
+d [KUX m \KPq d \XPq d \XP? d \KP? d \KPq m _oTy d _xTy d _xUC d _oUC
+d _oTy m `CUz d `QUz d `QVH d `CVH d `CUz m XjTc d XoTc d XoTh d XjTh
+d XjTc m `rTi d `?Ti d `?Tw d `rTw d `rTi m YLWx d YZWx d YZXF d YLXF
+d YLWx m YXPm d YjPm d YjQ@ d YXQ@ d YXPm m WZSF d WcSF d WcSP d WZSP
+d WZSF m `kWx d `uWx d `uXA d `kXA d `kWx
+stroke
+m `kWx m [mT\ d [?T\ d [?To d [mTo d [mT\ m _OVL d _\VL d _\VZ d _OVZ
+d _OVL m WiWa d WmWa d WmWf d WiWf d WiWa m ZGUi d ZUUi d ZUUw d ZGUw
+d ZGUi m [cUf d [gUf d [gUk d [cUk d [cUf m ^~Sd d _BSd d _BSh d ^~Sh
+d ^~Sd m ZIWX d ZWWX d ZWWf d ZIWf d ZIWX m `fRX d `xRX d `xRk d `fRk
+d `fRX m ^RRS d ^[RS d ^[R] d ^RR] d ^RRS m YZWa d YdWa d YdWk d YZWk
+d YZWa m VMWJ d VRWJ d VRWO d VMWO d VMWJ m \NSV d \`SV d \`Si d \NSi
+d \NSV m [mSt d [vSt d [vS~ d [mS~ d [mSt m [hS] d [uS] d [uSl d [hSl
+d [hS] m _XRq d _]Rq d _]Rv d _XRv d _XRq m W\Tb d WeTb d WeTl d W\Tl
+d W\Tb m UuSe d VBSe d VBSt d UuSt d UuSe m ]ORc d ]aRc d ]aRv d ]ORv
+d ]ORc m ]FVe d ]XVe d ]XVx d ]FVx d ]FVe m \qP} d \~P} d \~QL d \qQL
+d \qP} m \gSU d \lSU d \lSZ d \gSZ d \gSU m VTTB d VbTB d VbTQ d VTTQ
+d VTTB m ]hVK d ]qVK d ]qVU d ]hVU d ]hVK m [BTk d [PTk d [PTy d [BTy
+d [BTk m `ZWj d `_Wj d `_Wo d `ZWo d `ZWj m XbWO d XpWO d XpW^ d XbW^
+d XbWO m YmWP d YrWP d YrWU d YmWU d YmWP m [vWi d [?Wi d [?Wr d [vWr
+d [vWi m `GR@ d `KR@ d `KRD d `GRD d `GR@ m \~T\ d ]KT\ d ]KTk d \~Tk
+d \~T\ m _sPQ d `APQ d `AP` d _sP` d _sPQ m ZIWM d ZMWM d ZMWR d ZIWR
+d ZIWM m XfRF d XjRF d XjRJ d XfRJ d XfRF m `TUO d `YUO d `YUT d `TUT
+d `TUO m VWW? d VjW? d VjXR d VWXR d VWW? m UuTp d VGTp d VGUC d UuUC
+d UuTp m _TR~ d _]R~ d _]SG d _TSG d _TR~ m [sU} d [|U} d [|VF d [sVF
+d [sU} m `gPz d `uPz d `uQH d `gQH d `gPz m XORs d XTRs d XTRx d XORx
+d XORs
+stroke
+03 setlinewidth
+m UtEx d UtEx d UtFJ d UtEx m UqEn d UoEk d UoEc d UqE_ d UtE_ d UvEc
+d UvEk d UtEn d UqEn m UzEn m UtEx d XGEx d XGFJ d XGEx m W{El d W}En
+d XAEn d XBEl d XBEg d W{Eb d W{E_ d XBE_ m XGEn m XIEn d XGEk d XGEc
+d XIE_ d XLE_ d XOEc d XOEk d XLEn d XIEn m XSEn m XGEx d ZYEx d ZYFJ
+d ZYEx m ZSE_ d ZSEn d ZREn d ZMEd d ZMEc d ZSEc m ZSEc d ZUEc m ZYEn
+m Z[En d ZYEk d ZYEc d Z[E_ d Z_E_ d ZaEc d ZaEk d Z_En d Z[En m ZeEn
+m ZYEx d \kEx d \kFJ d \kEx m \_Ee d \bEh d \eEh d \gEe d \gEb d \eE_
+d \bE_ d \_Eb d \_Ee d \`Ej d \cEn m \kEn m \nEn d \kEk d \kEc d \nE_
+d \qE_ d \sEc d \sEk d \qEn d \nEn m \wEn m \kEx d ^}Ex d ^}FJ d ^}Ex
+m ^sEn d ^rEl d ^rEi d ^sEg d ^rEe d ^rEb d ^sE_ d ^wE_ d ^yEb d ^yEe
+d ^wEg d ^sEg m ^wEg d ^yEi d ^yEl d ^wEn d ^sEn m ^}En m _@En d ^~Ek
+d ^~Ec d _@E_ d _CE_ d _EEc d _EEk d _CEn d _@En m _IEn m ^}Ex d aPEx
+d aPFJ d aPEx m `?Ek d aBEn d aBE_ m aIEn m aLEn d aJEk d aJEc d aLE_
+d aOE_ d aREc d aREk d aOEn d aLEn m aVEn m aXEn d aVEk d aVEc d aXE_
+d a[E_ d a^Ec d a^Ek d a[En d aXEn m abEn m aPEx d aPEx m UtEx d UtG@
+d VFG@ d UtG@ m T?GE d UBGI d UBFz m UJGI m ULGI d UJGE d UJF~ d ULFz
+d UPFz d URF~ d URGE d UPGI d ULGI m UVGI m UXGI d UVGE d UVF~ d UXFz
+d U\Fz d U^F~ d U^GE d U\GI d UXGI m UbGI m UeGI d UbGE d UbF~ d UeFz
+d UhFz d UjF~ d UjGE d UhGI d UeGI m UnGI m UtG@ d UtHh d VFHh d UtHh
+m T~Ho d U@Hq d UDHq d UFHo d UFHj d T~He d T~Hc d UFHc m UJHq m ULHq
+d UJHn d UJHf d ULHc d UPHc d URHf d URHn d UPHq d ULHq m UVHq m UXHq
+d UVHn d UVHf d UXHc d U\Hc d U^Hf d U^Hn d U\Hq d UXHq m UbHq m UeHq
+d UbHn d UbHf d UeHc d UhHc d UjHf d UjHn d UhHq d UeHq m UnHq m UtHh
+d UtJP d VFJP d UtJP m T~JW d U@JY d UCJY d UFJW d UFJT d UCJR d UBJR
+m UCJR d UFJP d UFJM d UCJK d U@JK d T~JM m UJJZ m ULJY d UJJV d UJJN
+d ULJK d UPJK d URJN d URJV d UPJY d ULJY m UVJZ m UXJY d UVJV d UVJN
+d UXJK d U\JK d U^JN d U^JV d U\JY d UXJY m UbJZ m UeJY d UbJV d UbJN
+d UeJK d UhJK d UjJN d UjJV d UhJY d UeJY m UnJZ m UtJP d UtKx d VFKx
+d UtKx m UDKs d UDLA d UCLA d T~Kx d T~Kw d UDKw m UDKw d UFKw m UJLB
+m ULLA d UJK~ d UJKv d ULKs d UPKs d URKv d URK~ d UPLA d ULLA m UVLB
+m UXLA d UVK~ d UVKv d UXKs d U\Ks d U^Kv d U^K~ d U\LA d UXLA m UbLB
+m UeLA d UbK~ d UbKv d UeKs d UhKs d UjKv d UjK~ d UhLA d UeLA m UnLB
+m UtKx d UtM` d VFM` d UtM` m T~M[ d UCM[ d UFM^ d UFMa d UCMd d U@Md
+d T~Mb d T~Mi d UFMi m UJMj m ULMi d UJMf d UJM^ d ULM[ d UPM[ d URM^
+d URMf d UPMi d ULMi m UVMj m UXMi d UVMf d UVM^ d UXM[ d U\M[ d U^M^
+d U^Mf d U\Mi d UXMi m UbMj m UeMi d UbMf d UbM^ d UeM[ d UhM[ d UjM^
+d UjMf d UhMi d UeMi m UnMj m UtM` d UtM| m UtM| d UtM| d UtMj d UtM|
+d XGM| d XGMj d XGM| d ZYM| d ZYMj d ZYM| d \kM| d \kMj d \kM| d ^}M|
+d ^}Mj d ^}M| d aPM| d aPMj d aPM| d aPM| m XlNk d XlN] d XtN] m XxNl
+m X|Nh d X|Ng d X|Ng d X|Nh d X|Nh d X|Ng m X|Nd d X|Nd d X|N] m YDNl
+m YENe d YEN] m YENc d YFNe d YINe d YKNc d YKN] m YPNl m YQNa d YWNa
+d YWNc d YVNe d YRNe d YQNc d YQN_ d YRN] d YVN] d YWN_ m Y\Nl m Y\Nl
+m YiNl m YiNi d YkNk d YoNk d YqNi d YqNe d YiN_ d YiN] d YqN] m YuNl
+m YvN] d YzN] d Y}N` d Y}Nc d YzNf d YwNf d YuNd d YuNk d Y}Nk m ZANl
+m ZCNk d ZANh d ZAN` d ZCN] d ZGN] d ZIN` d ZINh d ZGNk d ZCNk m ZMNl
+m ZMNl m ZYNl m ZZNc d ZZN_ d Z[N] d Z^N] d Z`N_ d Z`Nc d Z^Ne d Z[Ne
+d ZZNc m ZeNl m ZgNe d ZkNe m ZhN] d ZhNi d ZjNj d ZkNj d ZlNi m ZqNl
+m ZqNl m Z~Nl m [ENc d [CNe d [@Ne d Z~Nc d Z~N_ d [@N] d [CN] d [EN_
+m [EN] d [ENk m [JNl m [JNa d [QNa d [QNc d [ONe d [LNe d [JNc d [JN_
+d [LN] d [ON] d [QN_ m [VNl m [WNe d [ZN] d []Ne m [bNl m [fNk d [fN]
+m [bN` d [dN^ d [hN^ d [jN` d [jNb d [hNd d [dNd d [bNf d [bNh d [dNj
+d [hNj d [jNh m [nNl m [nNe d [nNY m [nNc d [pNe d [sNe d [uNc d [uN_
+d [sN] d [pN] d [nN_ m [zNl m [~Nh d [~Ng d [?Ng d [?Nh d [~Nh d [?Ng
+m [~Nd d [~Nd d [~N] m \FNl m \GNe d \MN] m \GN] d \MNe m \RNl m \XNl
+d \VNl d \VN\ d \XN\ m \_Nl m \_Ni d \aNk d \eNk d \gNi d \gNe d \_N_
+d \_N] d \gN] m \kNl m \mNk d \kNh d \kN` d \mN] d \qN] d \sN` d \sNh
+d \qNk d \mNk m \wNl m \zNk d \wNh d \wN` d \zN] d \}N] d \?N` d \?Nh
+d \}Nk d \zNk m ]CNl m ]GNg d ]HNg d ]HNe d ]GNe d ]GNg d ]HNe m ]GNa
+d ]GN` d ]HN` d ]HNa d ]GNa d ]HN` m ]ONl m ]PNi d ]RNk d ]UNk d ]WNi
+d ]WNg d ]UNd d ]SNd m ]UNd d ]WNb d ]WN_ d ]UN] d ]RN] d ]PN` m ][Nl
+m ]^Nk d ]\Nh d ]\N` d ]^N] d ]aN] d ]cN` d ]cNh d ]aNk d ]^Nk m ]gNl
+m ]jNk d ]hNh d ]hN` d ]jN] d ]mN] d ]pN` d ]pNh d ]mNk d ]jNk m ]tNl
+m ]wN[ d ]xN\ d ]xN^ d ]wN^ d ]wN] d ]xN] m ^@Nl m ^@Nh d ^GN` m ^DNj
+d ^DN_ m ^@N` d ^GNh m ^LNl m ^ONl d ^QNl d ^QN\ d ^ON\ m ^XNl m ZGNR
+d ZGNJ m ZGNP d ZINR d ZLNR d ZNNP d ZNNJ m ZSNY m ZSNG d ZUNF d ZXNF
+d ZZNH d ZZNR m ZZNP d ZXNR d ZUNR d ZSNP d ZSNL d ZUNJ d ZXNJ d ZZNL
+m Z_NY m ZfNQ d ZeNR d ZaNR d Z`NP d Z`NL d ZaNJ d ZeNJ d ZfNK m ZkNY
+m ZkNY m ZwNY m Z~NJ d Z~NX d Z}NX d ZxNO d ZxNN d Z~NN
+stroke
+m Z~NN m Z~NN d [@NN m [DNY m [ENU d [HNX d [HNJ m [PNY m [VNJ d [VNX
+d [UNX d [PNO d [PNN d [VNN m [VNN d [XNN m [\NY m [\NX d [dNX d [_NJ
+m [hNY m [hNY m [tNY m [uNX d [uNJ m [uNL d [vNJ d [yNJ d [{NL d [{NP
+d [yNR d [vNR d [uNP m \@NY m \@NY m \LNY m \NNU d \QNX d \QNJ m \YNY
+m \[NX d \YNV d \YNS d \[NQ d \YNO d \YNL d \[NJ d \_NJ d \aNL d \aNO
+d \_NQ d \[NQ m \_NQ d \aNS d \aNV d \_NX d \[NX m \eNY m \gNX d \eNU
+d \eNM d \gNJ d \kNJ d \mNM d \mNU d \kNX d \gNX m \qNY m \tNX d \qNU
+d \qNM d \tNJ d \wNJ d \yNM d \yNU d \wNX d \tNX m \}NY m aPEx d aPG]
+d `~G] d aPG] m aWGc d aZGf d aZGW m abGf m adGf d abGc d abG[ d adGW
+d ahGW d ajG[ d ajGc d ahGf d adGf m anGf m aqGf d anGc d anG[ d aqGW
+d atGW d avG[ d avGc d atGf d aqGf m azGf m aPG] d aPIC d `~IC d aPIC
+m aVII d aXIK d a\IK d a^II d a^IE d aVH? d aVH} d a^H} m abIL m adIK
+d abIH d abI@ d adH} d ahH} d ajI@ d ajIH d ahIK d adIK m anIL m aqIK
+d anIH d anI@ d aqH} d atH} d avI@ d avIH d atIK d aqIK m azIL m aPIC
+d aPJh d `~Jh d aPJh m aVJo d aXJq d a[Jq d a^Jo d a^Jm d a[Jj d aZJj
+m a[Jj d a^Jh d a^Je d a[Jc d aXJc d aVJf m abJr m adJq d abJn d abJf
+d adJc d ahJc d ajJf d ajJn d ahJq d adJq m anJr m aqJq d anJn d anJf
+d aqJc d atJc d avJf d avJn d atJq d aqJq m azJr m aPJh d aPLN d `~LN
+d aPLN m a\LI d a\LW d a[LW d aVLN d aVLM d a\LM m a\LM d a^LM m abLX
+m adLW d abLT d abLL d adLI d ahLI d ajLL d ajLT d ahLW d adLW m anLX
+m aqLW d anLT d anLL d aqLI d atLI d avLL d avLT d atLW d aqLW m azLX
+m aPLN d aPMt d `~Mt d aPMt m aWMo d a[Mo d a^Mq d a^Mu d a[Mx d aXMx
+d aVMv d aVM} d a^M} m abM~ m adM} d abMz d abMr d adMo d ahMo d ajMr
+d ajMz d ahM} d adM} m anM~ m aqM} d anMz d anMr d aqMo d atMo d avMr
+d avMz d atM} d aqM} m azM~ m aPMt d aPM|
+stroke
+01 setlinewidth
+m aPIs d aPIx d aPIu d aIIu d aPIu m U|E| d VCE~ d VJE| d VREz d VYEx
+d V`Ey d VhEx d VoEy d VvE| d V}Ez d WEEy d WLEz d WSEy d W[E{ d WbE{
+d WiE{ d WqEz d WxEy d W?E| d XGE{ d XNE{ d XUE| d X]E} d XdE~ d XkFE
+d XrFO d XzFI d YAFA d YHF@ d YPFA d YWFA d Y^FB d YfFF d YmFO d YtFK
+d Y|FH d ZCFE d ZJFE d ZRFD d ZYFF d Z`FL d ZgFQ d ZoFQ d ZvFO d Z}FR
+d [EFO d [LFF d [SE? d [[FB d [bFC d [iFK d [qFZ d [xF\ d [?FY d \GFX
+d \NF] d \UFj d \\GE d \dG^ d \kHq d \rMR d \zM| d ]AIk d ]HH@ d ]PHf
+d ]WIK d ]^HE d ]fGL d ]mF{ d ]tFo d ]|Fe d ^CFW d ^JFO d ^QFN d ^YF]
+d ^`Fu d ^gFy d ^oF| d ^vF{ d ^}F} d _EFn d _LFi d _SFa d _[FT d _bFP
+d _iFS d _qFY d _xFd d _?F| d `FGN d `NGH d `UGA d `\GJ d `dGL d `kGA
+d `rFt d `zFu d aAGA d aHGC d aPFi m U|Ez d VCE| d VJE~ d VME} m VREz
+m VSEz d VYEy d V`Ey d VfEy m VgEy m VmE{ d VoE| d VvE{ d V}Ez d W@Ez
+m WEE{ m WGE| d WLE~ d WRFF m WSFG m WXFH d W[FI d WbFI d WgFD m WiFB
+m WmFA d WqF@ d WxEz d WzE{ m W?E~ m X@E? d XGFH d XJFI m XNFK m XOFJ
+d XUFD d X[E? m X\E} m XaE~ d XdE~ d XkE| d XrE{ d XsE{ m XzE{ m XzE{
+d YAE{ d YHE? d YKE~ m YPE} m YRE~ d YWFB d Y^FH m Y^FH m YeFG d YfFG
+d YmFK d YqFQ m YtFV d YtFV d YyFb m Y|Fg d Y|Fg d ZCFc d ZJF_ m ZJF^
+m ZPF\ d ZQF[ d ZYFZ d Z_FU m Z`FT m ZcFP d ZgFJ d ZnFF m ZoFE m ZuFF
+d ZvFG d Z}FF d [EFF d [GFG m [LFI m [NFJ d [SFL d [[FM d [_FK m [bFK
+m [gFK d [iFK d [qFJ d [xFH d [xFI m [|FM d [?FR d \CFY m \EF^ d \FF`
+d \NFi d \NFi m \UFi m \VFh d \\Fd d \`Fj m \bFo d \dFr d \fF| m \gGA
+d \kGM m \kGO m \oGP d \rGQ d \zGJ d \{GK m ]@GO d ]AGQ d ]CG\ m ]CGa
+d ]EGn m ]FGs d ]GG? m ]HHD d ]HHG d ]IHQ m ]IHV d ]JHc m ]JHh d ]KHt
+m ]KHz d ]LIF m ]LIK d ]MIX m ]MI] d ]MIj m ]NIo d ]NI| m ]OJA d ]OJM
+m ]OJR d ]PJU d ]PJ_ m ]QJd d ]QJq m ]RJv d ]RKC m ]SKH d ]TKT m ]TKY
+d ]UKf m ]UKk d ]VKx m ]VK} d ]WLJ m ]WLM m ]XLK d ]^K? m ]^K? m ]_Kz
+d ]_Km m ]`Kh d ]`K[ m ]aKV d ]bKI m ]bKD d ]cJx m ]cJs d ]dJf m ]dJa
+d ]eJT m ]eJO d ]fJL d ]fJB m ]gI} d ]hIq m ]hIl d ]jI_ m ]jIZ d ]kIM
+m ]lIH d ]mH{ m ]mHz m ]mHv d ]oHj m ]pHe d ]qHX m ]rHS d ]sHF m ]tHA
+d ]tHA d ]wGu m ]xGp d ]{Gc m ]{G_ m ]}G^ d ^CGZ d ^EG` m ^FGe d ^JGq
+m ^JGs m ^MGv d ^QGx d ^YGs d ^YGu m ^[Gy d ^_HF m ^`HH m ^bHJ d ^gHO
+d ^kHH m ^nHC d ^oHB d ^vHI d ^vHK m ^wHQ d ^xH] m ^yHb d ^{Ho m ^{Ht
+d ^}IA m ^}IE m ^~IF d _AIR m _BIW d _EI` d _EId m _FIi d _HIu m _HI{
+d _JJG m _KJL d _LJR d _MJY m _MJ^ d _NJk m _OJp d _PJ| m _QKA d _RKN
+m _SKS d _SKZ d _TKT m _TKN d _UKB m _UJ} d _VJp m _WJk d _XJ^ m _XJY
+d _YJM m _YJG d _ZI{ m _[Iv d _[Iu d _\Ii m _]Id d __IW m _`IR d _bIF
+m _bID m _cIG d _fIS m _hIX d _iI] d _kIe m _lIj d _oIv m _pI{ d _pI}
+d _uIs m _xIn d _xIn d _zIb m _{I] d _}IP m _~IK d _?IG d `EIO m `FIQ
+m `IIN d `NII d `OIC m `QH~ d `THq m `UHl d `UHk d `[H` m `\H\ m `^H\
+d `dH[ d `eHd m `fHi d `hHu m `hH{ d `jIG m `kIL d `kIN d `lIY m `mI^
+d `nIk m `oIp d `qI| m `qJA d `rJJ d `sJG m `tJB d `wIu m `xIp d `zIl
+d `{Id m `|I_ d `?IR m a@IM d aAIK d aBIA m aCH{ d aEHo m aFHj d aHH]
+m aHHX m aHHX d aNHL m aPHH m aPI{ d aPJN d aPJE d aIJE d aPJE m U|Ey
+m U|Ey d U~Ez m VCE{ m VEE{ d VGE{ m VJE{ m VOE| d VQE| m VRE| m VXE}
+d VYE~ d VZE~ m V`E~ m VaE~ d VcE~ m VgE? m VkE? d VmE? m VoE~ m VsFA
+d VtFB m VvFC m V{FC d V}FC m V}FC m WDF@ d WEF@ d WEF@ m WKE} d WLE|
+d WME| m WSE| m WUE{ d WWE{ m W[Ez m W^Ez d W`Ez m WbEz m WhEz d WiEy
+d WjEy m WqE{ m WqE{ d WsEz m WxEx m WyEy d W{Ey m W?E{ m XAE| d XCE}
+m XGE? m XGFA d XHFB m XKFG d XLFH m XNFL m XNFM d XOFN m XQFS d XRFT
+m XTFY d XTFZ m XUF\ m XYFZ d XZFY m X\FW m X^FU d X^FS m XaFO d XaFM
+m XdFI d XdFH d XeFH m XjFD d XkFC d XlFC m XrFB m XsFB d XtFA m XzE}
+d X{E~ m YAE? m YBF@ d YCFA m YHFD m YIFE d YIFF m YMFK d YMFL m YPFO
+m YRFO d YTFP m YWFQ m Y[FQ d Y]FQ m Y^FR m YcFO d YeFN m YfFN m YjFK
+d YlFJ m YmFI m YsFJ d YtFJ d YuFJ m YzFN d Y{FO m Y|FO m Z@FR d ZBFS
+m ZCFT m ZIFU d ZJFU d ZJFU m ZOFQ d ZPFP m ZQFO m ZUFL d ZVFK m ZYFH
+m Z[FG d Z\FF m Z`FE m ZcFE d ZeFF m ZgFG m ZjFI d ZlFJ m ZoFL m ZrFL
+d ZtFK m ZvFK m Z{FJ d Z|FI m Z}FI m [DFJ d [EFK d [EFK m [JFO d [KFP
+m [LFQ m [PFT d [RFU m [SFV m [VFY d [WFZ m [[F^ m [[F^ d []F^ m [bF^
+m [dF\ d [eF[ m [iFX m [jFX d [jFY m [nF^ d [oF_ m [qFa m [qFd d [qFe
+m [sFj d [sFk m [tFp d [uFq m [vFv d [vFx m [xF} d [xF} d [xF~ m [zGC
+d [{GD m [}GI d [~GJ m [?GM m \@GK d \@GJ m \BGE d \CGD m \EF? d \EF~
+m \FF{ m \HFy d \JFx m \NFu m \NFv d \OFw m \QF| d \QF} m \SGB d \TGC
+m \UGG m \UGH d \UGI m \VGO d \VGP m \WGU d \WGV m \XG[ d \XG\ m \YGa
+d \YGc m \ZGh d \ZGi m \[Gn d \[Go m \[Gt d \\Gv m \\G{ d \\G| d \\G|
+m \]HA d \]HB m \^HG d \^HI m \_HN d \_HO m \`HT d \`HU m \aHZ d \aH\
+m \bHa d \bHb m \bHg d \cHh m \cHm d \cHo m \dHp m \eHm d \eHl m \gHg
+d \hHf m \iHa d \jH` m \kH\ m \mH[ d \nHZ m \rHX m \sHY d \sHZ m \sH_
+d \sHa m \tHf d \tHg m \uHl d \uHm m \vHr d \vHt m \vHy d \vHz m \wH?
+d \wI@ m \xIE d \xIG m \yIL d \yIM m \yIR d \zIS m \zIT m \{IX d \{IZ
+m \|I_ d \}I` m \~Ie d \~If m \?Ik d ]@Il m ]AIq m ]AIq d ]AIp m ]BIk
+d ]BIi m ]CId d ]CIc m ]CI^ d ]DI] m ]DIX d ]DIW m ]EIQ d ]EIP m ]FIK
+d ]FIJ m ]GIE d ]GID m ]HH~ d ]HH} m ]HHx d ]HHx d ]JHx m ]PHw m ]PHy
+d ]PHz m ]RH? d ]RI@ m ]TIE d ]TIF m ]VIK d ]VIL m ]WIO m ]WIL d ]WIK
+m ]XIF d ]XID m ]YH? d ]YH~ m ]ZHy d ]ZHx m ][Hs d ][Hq m ]\Hl d ]\Hk
+m ]\Hf d ]]He m ]]H` d ]]H_ m ]^HY d ]^HX m ]^HX m ]`HS d ]`HR m ]bHM
+d ]bHL m ]dHG d ]dHF m ]eHA d ]fH@ d ]gH@ m ]mG~ m ]mG} d ]nG| m ]qGw
+d ]rGv m ]tGt m ]vGu d ]wGv m ]{Gy m ]|Gz d ]|G| m ]}HA d ]}HB m ]~HG
+d ]?HH m ^@HM d ^@HO m ^AHT d ^AHU m ^CHZ d ^CH[ d ^CH[ m ^CH` d ^CHa
+m ^DHg d ^DHh m ^EHm d ^EHn m ^EHs d ^EHt m ^FHz d ^FH{ m ^FI@ d ^GIA
+m ^GIF d ^GIG m ^HIM d ^HIN m ^HIS d ^HIT m ^IIY d ^IIZ m ^JI` d ^JIa
+m ^JIf d ^JIf d ^JIg m ^JIl d ^KIm m ^KIs d ^KIt m ^KIy d ^KIz m ^KI?
+d ^KJA m ^LJF d ^LJG m ^LJL d ^LJM m ^LJR d ^LJT m ^MJY d ^MJZ m ^MJ_
+d ^MJ` m ^MJe d ^MJg m ^NJl d ^NJm m ^NJr d ^NJs m ^NJx d ^NJz m ^OJ?
+d ^OK@ m ^OKE d ^OKF m ^OKK d ^OKM m ^PKR d ^PKS m ^PKX d ^PKY m ^PK^
+d ^PK` m ^QKe d ^QKf m ^QKk d ^QKl m ^QKq d ^QKs m ^QKw m ^QKx d ^RKy
+m ^RK~ d ^RK? m ^RLD d ^RLF m ^SLK d ^SLL m ^SLQ d ^SLR m ^TLX d ^TLY
+m ^TL^ d ^TL_ m ^TLd d ^TLe m ^ULk d ^ULl m ^ULq d ^ULr m ^VLw d ^VLy
+m ^VL~ d ^VL? m ^VMD d ^WME m ^WMJ d ^WML m ^WMQ d ^WMR m ^XMW d ^XMX
+m ^XM] d ^XM_ m ^YMd d ^YMe m ^YMg m ^YMe d ^YMd m ^ZM^ d ^ZM] m ^[MX
+d ^[MW m ^\MR d ^\MQ m ^]MK d ^]MJ m ^]ME d ^^MD m ^^L? d ^^L~ m ^_Ly
+d ^_Lw m ^`Lr d ^`Lr d ^`Ls m ^aLx d ^aLy m ^bL~ d ^bL? m ^cMD d ^cMF
+m ^dMK d ^dML m ^eMQ d ^eMR m ^fMW d ^fMY m ^gM^ d ^gM_ m ^gMc m ^gMd
+d ^gMe m ^hMj d ^hMl m ^hMq d ^hMr m ^hMw d ^hMx
+stroke
+m ^hMx m ^hM| m `kM| m `kM{ d `kMz m `kMt d `kMs m `kMn d `kMm m `kMh
+d `kMf m `kMa d `kMa d `kM` m `kM[ d `kMZ m `lMU d `lMS m `lMN d `lMM
+m `lMH d `mMG m `mMB d `mM@ m `mL{ d `mLz m `nLu d `nLt m `nLo d `nLm
+m `nLh d `nLg m `oLb d `oLa m `oL\ d `oLZ m `oLU d `pLT m `pLO d `pLN
+m `pLI d `pLG m `qLB d `qLA m `qK| d `qK{ m `qKv d `qKt m `rKo d `rKn
+m `rKi d `rKh m `rKf m `tKc d `tKa m `vK\ d `vK[ m `xKV d `xKU m `zKR
+m `zKP d `zKO m `{KJ d `{KH m `|KC d `|KB m `}J} d `}J| m `}Jw d `~Jv
+m `~Jp d `?Jo m `?Jj d `?Ji m a@Jd d a@Jc m aAJ^ m aAJ] d aAJ\ m aBJW
+d aBJV m aBJQ d aBJO m aCJJ d aCJI m aDJD d aDJC m aDI~ d aDI| m aEIw
+d aEIv m aEIq d aFIp m aFIk d aFIi m aGId d aGIc m aGI^ d aGI] m aHIX
+d aHIV m aHIT m aIIQ d aIIP m aJIK d aJIJ m aLIE d aLID m aMH? d aMH}
+m aNHx d aOHw m aPHr m aPJK d aPJ_ d aPJU d aIJU d aPJU m U|Fp d VCFq
+d VJFw d VOF~ m VRGB m VRGC d VSGD m VYGG m VYGG d V`F~ d VgFz d ViF~
+m VkGC d VkGE m VmGJ d VoGP d VqG^ m VqGc d VrGd m VrGi d VuG} m VvHB
+d VvHD m VvHF m VvHI d VxH] m VxHb d VxHc m VyHh d VzH} m VzIB d VzIC
+m V{IH d V|I\ m V}Ia d V}Ic m V}Ih d V}Im d W@I| m WAJA d WAJB m WBJG
+d WEJZ d WEJY m WFJT d WFJS m WGJN d WLIz m WLIy m WLI} d WLI~ m WMJC
+d WNJW m WNJ\ d WNJ^ m WNJc d WPJw m WPJ| d WPJ} m WPKB d WQKW m WRK\
+d WRK] m WRKb d WSKv m WSKv m WTK{ d WTK} m WTLB d WTLV m WTL[ d WTL\
+m WTLb d WULv m WUL{ d WUL| m WUMA d WVMV m WVM[ d WVM\ m WVMa d WWMu
+m WWMz d WWM| m WWM| m WeM| m WeMx d WfMc m WfM^ d WfM] m WfMX d WgMC
+m WgL~ d WgL} m WgLx d WhLd m WhL_ d WhL] m WhLX d WiLD m WiK? d WiK~
+m WiKy d WiKs d WjKd m WjK_ d WjK^ m WkKY d WkKD m WlJ? d WlJ~ m WlJy
+d WmJe m WmJ` d WmJ^ m WnJY d WnJE m WoJ@ d WoI? m WoIz d WpIe m WpI`
+d WpI_ m WpIZ d WqIW d WrIF m WsIA d WsH? m WsHz d WuHf m WvHa d WvH`
+m WvHZ d WxHG d WxHF m WzHA d W{H@ m W}G{ d W?Gu d XFGh m XGGf m XGGc
+d XHGb m XIG] d XNGH m XNGH m XOGC d XPGB m XRF} d XUFs d X\Fu d X`Fy
+m XdF} m XdF} d XeF~ m XjGC d XkGD d XrGB d XyFu m XzFt m X{Fq d X{Fo
+m X}Fj d YAF^ d YHF] d YIF_ m YKFd d YLFe m YNFj d YPFn d YTF~ m YUGC
+d YUGD m YWGI d YWGJ d Y^GY d Y_G] m Y`Gb d YaGc m YbGh d YfGx d YfG|
+m YfHA d YfHB m YgHG d YhH\ m YhHa d YhHb m YiHg d YjH{ m YjIA d YjIB
+m YkIG d YlI[ m YlI` d YlIb m YmIg d YmIh d YnI{ m YnJ@ d YnJA m YnJF
+d YpJ[ m YpJ` d YpJa m YpJf d YqJz m YrJ? d YrKA m YrKF d YsKZ m YsK_
+d YsK` m YsKf d YtKt d YuKm m YuKh d YvKg m YvKb d YyKN m YyKI d YyKG
+m YzKB d Y|Ju d Y|Jn m Y|Ji d Y|Jh m Y|Jc d Y}JN m Y~JI d Y~JH m Y~JC
+d Y?Io m Y?Ii d Y?Ih m Y?Ic d Z@IO m ZAIJ d ZAII m ZAIC d ZBHo m ZBHj
+d ZBHi m ZBHd d ZCHZ d ZDHO m ZDHJ d ZDHI m ZEHD d ZGGp m ZGGk d ZGGi
+m ZHGd d ZIGP m ZJGK d ZJGJ m ZJGG m ZKGE d ZQFw d ZTF| m ZVGA d ZVGB
+m ZXGG d ZYGI d Z]G[ m Z^G` d Z^Ga m Z_Gf d Z`Gj d ZgGY m ZgGX m ZhGT
+d ZhGS m ZiGN d ZlFz m ZmFu d ZmFt m ZnFn d ZoFl d ZvFj d Z|Fv m Z}Fz
+m [@Fz d [AF{ m [EF| m [FFy d [LFj d [OFf m [RFa d [RF` m [SF^ m [VF[
+d [[FW d [bFV d [iFV d [pFS m [qFR m [tFO d [vFN m [xFL m [zFJ d [?FF
+d \FFA d \NFA d \SFB m \UFB m \ZFC d \\FD m \\FD m \cFE d \dFF d \kFF
+d \rFG d \zFI d ]@FG m ]AFG m ]FFD d ]HFC m ]HFB m ]NFD d ]PFE d ]WFB
+d ]^FD d ]eFK m ]fFL m ]iFO d ]jFQ m ]mFT m ]nFU d ]tFW d ]{FP d ^@FJ
+m ^CFG m ^EFE d ^FFD m ^JFA m ^KFA d ^QF@ d ^YFD d ^`FI d ^cFH m ^gFF
+m ^iFE d ^jFD m ^mE? d ^oE~ d ^vE{ d ^}E{ d _EEz d _IE{ m _LE| m _PE}
+d _RE~ m _SE~ m _YE~ d _[E~ d _bE} d _iE? d _pF@ d _wE? m _xE? m _}E|
+d _~E{ m _?E{ m `FEz d `FEz d `NEy d `UEz d `\Ez d `dE{ m `dE{ m `kEz
+d `mEz m `rE{ m `tE| d `zE} d aAE} d aHEz d aPEy m aPIs d aPJF d aPI}
+d aII} d aPI}
+stroke
+grestore showpage
diff --git a/obsolete/macros/latex209/contrib/aasmacros/table1.tex b/obsolete/macros/latex209/contrib/aasmacros/table1.tex
new file mode 100644
index 0000000000..0a5fa4b158
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aasmacros/table1.tex
@@ -0,0 +1,299 @@
+% TABLE1.TEX -- AASTeX sample table 1.
+
+% The following gobbledygook is done so that this particular table
+% paginates in a way that "looks nice" regardless of whether apjpt
+% or aj_pt styles are chosen. The \tablebreak commands that appear
+% after some of the lines force page breaks when the apjpt style is
+% selected, but act simply as line delimiters for aj_pt.
+
+\makeatletter
+\def\jnl@aj{AJ}
+\ifx\revtex@jnl\jnl@aj\let\tablebreak=\nl\fi
+\makeatother
+
+% From here on, the file contains tabular data as an author might
+% prepare it.
+
+\begin{planotable}{lrrrrcrrrrr}
+\tablewidth{33pc}
+\tablecaption{Literature Data for Program Stars}
+\tablehead{
+\colhead{Star} & \colhead{V} &
+\colhead{b$-$y} & \colhead{m$_1$} &
+\colhead{c$_1$} & \colhead{ref} &
+\colhead{T$_{\rm eff}$} & \colhead{log g} &
+\colhead{v$_{\rm turb}$} & \colhead{[Fe/H]} &
+\colhead{ref}}
+\startdata
+HD 97 & 9.7& 0.51& 0.15& 0.35& 2 & \nodata & \nodata & \nodata & $-1.50$ & 2 \nl
+& & & & & & 5015 & \nodata & \nodata & $-1.50$ & 10 \nl
+HD 2665 & 7.7& 0.54& 0.09& 0.34& 2 & \nodata & \nodata & \nodata & $-2.30$ & 2 \nl
+& & & & & & 5000 & 2.50 & 2.4 & $-1.99$ & 5 \nl
+& & & & & & 5120 & 3.00 & 2.0 & $-1.69$ & 7 \nl
+& & & & & & 4980 & \nodata & \nodata & $-2.05$ & 10 \nl
+HD 4306 & 9.0& 0.52& 0.05& 0.35& 20, 2& \nodata & \nodata & \nodata & $-2.70$ & 2 \nl
+& & & & & & 5000 & 1.75 & 2.0 & $-2.70$ & 13 \nl
+& & & & & & 5000 & 1.50 & 1.8 & $-2.65$ & 14 \nl
+& & & & & & 4950 & 2.10 & 2.0 & $-2.92$ & 8 \nl
+& & & & & & 5000 & 2.25 & 2.0 & $-2.83$ & 18 \nl
+& & & & & & \nodata & \nodata & \nodata & $-2.80$ & 21 \nl
+& & & & & & 4930 & \nodata & \nodata & $-2.45$ & 10 \nl
+HD 4906 & 8.8& 0.48& 0.22& 0.30& 20 & \nodata & \nodata & \nodata & \nodata & \nodata\nl
+HD 5426 & 9.6& 0.50& 0.08& 0.34& 2 & \nodata & \nodata & \nodata & $-2.30$ & 2 \nl
+HD 6755 & 7.7& 0.49& 0.12& 0.28& 20, 2& \nodata & \nodata & \nodata & $-1.70$ & 2 \nl
+& & & & & & 5200 & 2.50 & 2.4 & $-1.56$ & 5 \nl
+& & & & & & 5260 & 3.00 & 2.7 & $-1.67$ & 7 \nl
+& & & & & & \nodata & \nodata & \nodata & $-1.58$ & 21 \nl
+& & & & & & 5200 & \nodata & \nodata & $-1.80$ & 10 \nl
+HD 18907 & 5.9& 0.51& 0.23& 0.32& 20 & \nodata & \nodata & \nodata & \nodata & \nodata\nl
+HD 21581 & 8.7& 0.56& 0.14& 0.34& 2 & \nodata & \nodata & \nodata & $-1.80$ & 2 \nl
+& & & & & & 4750 & \nodata & \nodata & $-1.66$ & 10 \nl
+HD 24289 & 10.0& 0.39& 0.05& 0.29& 20 & \nodata & \nodata & \nodata & $-1.64$ & 21 \nl
+HD 24616 & 6.7& 0.51& 0.25& 0.32& 20 & \nodata & \nodata & \nodata & \nodata & \nodata\nl
+HD 44007 & 8.1& 0.56& 0.14& 0.35& 2 & \nodata & \nodata & \nodata & $-1.70$ & 2 \nl
+& & & & & & \nodata & \nodata & \nodata & $-1.70$ & 24 \nl
+HD 45282 & 8.0& 0.45& 0.11& 0.28& 20 & \nodata & \nodata & \nodata & $-1.51$ & 21 \nl
+HD 76932 & 5.8& 0.35& 0.12& 0.30& 20 & 5860 & 3.50 & \nodata & $-1.10$ & 22 \nl
+& & & & & & 5630 & 3.88 & 0.8 & $-1.01$ & 7 \nl
+& & & & & & 5810 & 3.50 & \nodata & $-1.12$ & 15 \nl
+HD 84937 & 8.3& 0.30& 0.06& 0.35& 20,11& 6200 & \nodata & \nodata & $-2.10$ & 4 \nl
+& & & & & & 6250 & \nodata & \nodata & $-2.18$ & 17 \nl
+& & & & & & 6216 & \nodata & \nodata & $-2.42$ & 11 \nl
+& & & & & & 6240 & \nodata & \nodata & $-2.13$ & 3 \nl
+& & & & & & \nodata & \nodata & \nodata & $-2.14$ & 21 \nl
+& & & & & & 6200 & 3.60 & 1.5 & $-2.43$ & 16 \nl
+& & & & & & 6250 & 4.00 & \nodata & $-2.10$ & 22 \nl
+HD 87140 & 9.0& 0.48& 0.12& 0.28& 20 & 5000 & 4.50 & 1.0 & $-1.41$ & 7 \nl
+& & & & & & \nodata & \nodata & \nodata & $-1.56$ & 21 \nl
+HD 88609 & 8.6& 0.68& 0.09& 0.54& 2 & \nodata & \nodata & \nodata & $-2.50$ & 2 \nl
+& & & & & & 4500 & 1.10 & 2.8 & $-2.77$ & 5 \nl
+& & & & & & 4500 & 0.80 & 3.2 & $-2.65$ & 14 \nl
+& & & & & & 4600 & \nodata & \nodata & $-2.75$ & 10 \nl
+HD 94028 & 8.2& 0.34& 0.08& 0.25& 20 & 5795 & 4.00 & \nodata & $-1.70$ & 22 \nl
+& & & & & & 5860 & \nodata & \nodata & $-1.70$ & 4 \nl
+& & & & & & 5910 & 3.80 & \nodata & $-1.76$ & 15 \nl
+& & & & & & 5800 & \nodata & \nodata & $-1.67$ & 17 \nl
+& & & & & & 5902 & \nodata & \nodata & $-1.50$ & 11 \nl
+& & & & & & 5900 & \nodata & \nodata & $-1.57$ & 3 \nl
+& & & & & & \nodata & \nodata & \nodata & $-1.32$ & 21 \nl
+HD 97916 & 9.2& 0.29& 0.10& 0.41& 20 & 6125 & 4.00 & \nodata & $-1.10$ & 22 \nl
+& & & & & & 6160 & \nodata & \nodata & $-1.39$ & 3 \nl
+& & & & & & 6240 & 3.70 & \nodata & $-1.28$ & 15 \nl
+& & & & & & 5950 & \nodata & \nodata & $-1.50$ & 17 \nl
+& & & & & & 6204 & \nodata & \nodata & $-1.36$ & 11 \nl
+HD 101063 & 9.4& 0.50& 0.15& 0.27& 20 & \nodata & \nodata & \nodata & $-1.35$ & 21 \nl
+HD 107752 & 10.0& 0.58& 0.09& 0.39& 2 & \nodata & \nodata & \nodata & $-2.60$ & 2 \nl
+& & & & & & 4750 & 0.80 & 2.7 & $-2.54$ & 14 \nl
+& & & & & & 4775 & \nodata & \nodata & $-2.70$ & 10 \tablebreak
+HD 108317 & 8.1& 0.44& 0.06& 0.30& 2 & \nodata & \nodata & \nodata & $-2.30$ & 2 \nl
+& & & & & & 5000 & 2.30 & 1.5 & $-2.29$ & 14 \nl
+& & & & & & 5200 & 2.50 & 1.5 & $-2.20$ & 5 \nl
+& & & & & & 5125 & \nodata & \nodata & $-2.35$ & 10 \nl
+HD 111721 & 8.0& 0.51& 0.18& 0.30& 2 & \nodata & \nodata & \nodata & $-1.11$ & 21 \nl
+& & & & & & 5100 & 2.90 & 1.0 & $-1.25$ & 9 \nl
+HD 115444 & 9.0& 0.57& 0.07& 0.43& 2 & \nodata & \nodata & \nodata & $-2.70$ & 2 \nl
+& & & & & & 4800 & 2.00 & 2.2 & $-2.64$ & 5 \nl
+& & & & & & 4750 & \nodata & \nodata & $-2.65$ & 10 \nl
+HD 122563 & 6.2& 0.64& 0.09& 0.52& 2 & \nodata & \nodata & \nodata & $-2.60$ & 2 \nl
+& & & & & & 4600 & 0.80 & 3.2 & $-2.59$ & 13 \nl
+& & & & & & 4600 & 1.40 & 2.8 & $-2.35$ & 14 \nl
+& & & & & & 4640 & 1.30 & 2.0 & $-2.38$ & 7 \nl
+& & & & & & 4600 & 1.20 & 2.3 & $-2.45$ & 5 \nl
+& & & & & & 4500 & 0.75 & 2.5 & $-2.93$ & 18 \nl
+& & & & & & 4650 & \nodata & \nodata & $-2.75$ & 10 \nl
+& & & & & & 4615 & 1.20 & 1.5 & $-2.71$ & 9 \nl
+HD 126587 & 9.1& 0.60& 0.05& 0.37& 2 & \nodata & \nodata & \nodata & $-2.70$ & 2 \nl
+& & & & & & 4750 & 1.10 & 2.0 & $-2.66$ & 14 \nl
+HD 128279 & 8.0& 0.47& 0.05& 0.28& 2 & \nodata & \nodata & \nodata & $-2.50$ & 2 \nl
+& & & & & & 5000 & 2.20 & 1.4 & $-2.19$ & 5 \nl
+& & & & & & 5125 & 2.20 & 2.0 & $-2.50$ & 18 \nl
+HD 132475 & 8.6& 0.40& 0.06& 0.28& 20,11& 5542 & \nodata & \nodata & $-1.93$ & 11 \nl
+& & & & & & 5550 & \nodata & \nodata & $-1.60$ & 19 \nl
+& & & & & & 5600 & \nodata & \nodata & $-2.16$ & 3 \nl
+& & & & & & \nodata & \nodata & \nodata & $-1.32$ & 21 \nl
+HD 134169 & 7.7& 0.38& 0.12& 0.31& 11 & 5800 & 3.80 & \nodata & $-1.60$ & 22 \nl
+& & & & & & 5750 & \nodata & \nodata & $-1.49$ & 3 \nl
+& & & & & & 5720 & 3.60 & 0.5 & $-0.97$ & 9 \nl
+& & & & & & 5750 & 4.50 & 1.0 & $-1.02$ & 7 \nl
+& & & & & & 5780 & 3.40 & \nodata & $-1.02$ & 15 \nl
+HD 140283 & 7.2& 0.38& 0.03& 0.28& 20,11& 5600 & \nodata & \nodata & $-2.60$ & 17 \nl
+& & & & & & 5483 & 3.30 & \nodata & $-2.40$ & 22 \nl
+& & & & & & 5630 & 3.20 & \nodata & $-2.78$ & 15 \nl
+& & & & & & 5650 & \nodata & \nodata & $-2.79$ & 11 \nl
+& & & & & & 5650 & 3.30 & 1.5 & $-2.25$ & 5 \nl
+& & & & & & 5740 & \nodata & \nodata & $-2.19$ & 3 \nl
+& & & & & & 5640 & \nodata & \nodata & $-2.50$ & 19 \nl
+& & & & & & 5650 & \nodata & \nodata & $-2.60$ & 4 \nl
+& & & & & & 5570 & 3.30 & 1.5 & $-2.61$ & 8 \nl
+& & & & & & \nodata & \nodata & \nodata & $-2.49$ & 21 \nl
+& & & & & & 5690 & 3.60 & 0.5 & $-2.57$ & 9 \nl
+& & & & & & 5640 & 3.10 & 1.5 & $-2.75$ & 16 \nl
+HD 160617 & 8.7& 0.35& 0.05& 0.33& 20 & 5861 & 3.50 & \nodata & $-1.60$ & 23 \nl
+& & & & & & 5920 & 3.30 & \nodata & $-1.74$ & 15 \nl
+& & & & & & \nodata & \nodata & \nodata & $-1.84$ & 21 \nl
+& & & & & & 5910 & 3.50 & 1.5 & $-2.04$ & 16 \nl
+HD 161770 & 9.7& 0.49& 0.04& 0.30& 20 & \nodata & \nodata & \nodata & $-1.38$ & 21 \nl
+HD 163810 & 9.6& 0.42& 0.10& 0.26& 11 & 5377 & \nodata & \nodata & $-1.55$ & 11 \nl
+& & & & & & \nodata & \nodata & \nodata & $-1.40$ & 21 \nl
+HD 165195 & 7.3& 0.92& 0.14& 0.70& 2 & \nodata & \nodata & \nodata & $-2.10$ & 2 \nl
+& & & & & & 4525 & 0.80 & \nodata & $-1.80$ & 12 \nl
+& & & & & & 4500 & 1.20 & 2.0 & $-2.21$ & 7 \nl
+& & & & & & 4500 & 1.50 & 2.8 & $-2.21$ & 5 \nl
+& & & & & & 4475 & \nodata & \nodata & $-2.25$ & 10 \nl
+& & & & & & 4510 & 1.25 & 2.0 & $-2.22$ & 9 \nl
+HD 171496 & 8.5& 0.76& 0.15& 0.41& 2 & \nodata & \nodata & \nodata & $-2.10$ & 2 \nl
+& & & & & & 4580 & \nodata & \nodata & $-1.75$ & 10 \nl
+HD 175305 & 7.2& 0.50& 0.16& 0.31& 2 & \nodata & \nodata & \nodata & $-1.50$ & 2 \nl
+& & & & & & 5160 & 3.00 & 2.0 & $-1.53$ & 7 \nl
+& & & & & & 5150 & \nodata & \nodata & $-2.26$ & 3 \nl
+HD 186478 & 9.2& 0.69& 0.08& 0.49& 2 & \nodata & \nodata & \nodata & $-2.60$ & 2 \nl
+HD 187111 & 7.7& 0.84& 0.22& 0.55& 2 & \nodata & \nodata & \nodata & $-2.10$ & 2 \nl
+& & & & & & 4300 & 0.75 & \nodata & $-2.35$ & 6 \nl
+& & & & & & 4300 & 0.75 & 1.5 & $-2.35$ & 7 \nl
+& & & & & & 4260 & 0.50 & 1.4 & $-1.74$ & 9 \nl
+HD 189558 & 7.7& 0.39& 0.11& 0.28& 26 & 5660 & 4.00 & \nodata & $-1.30$ & 22 \nl
+HD 190287 & 8.5& 0.50& 0.14& 0.28& 2 & \nodata & \nodata & \nodata & $-1.50$ & 2 \nl
+HD 201889 & 8.1& 0.39& 0.14& 0.28& 4? & 5570 & \nodata & \nodata & $-1.40$ & 4 \nl
+& & & & & & 5580 & \nodata & \nodata & $-1.10$ & 19 \nl
+HD 204543 & 8.3& 0.64& 0.16& 0.52& 2 & \nodata & \nodata & \nodata & $-1.60$ & 2 \nl
+& & & & & & 4750 & 1.15 & 2.9 & $-1.63$ & 13 \nl
+& & & & & & 4640 & 1.20 & 2.0 & $-1.79$ & 8 \nl
+& & & & & & 4710 & \nodata & \nodata & $-1.85$ & 10 \nl
+HD 211998 & 5.3& 0.45& 0.11& 0.25& 20 & 5200 & 3.50 & \nodata & $-1.50$ & 22 \nl
+& & & & & & \nodata & \nodata & \nodata & $-1.51$ & 21 \nl
+& & & & & & 5200 & 3.70 & \nodata & $-1.54$ & 15 \nl
+& & & & & & 5120 & 3.50 & 1.0 & $-1.68$ & 7 \nl
+HD 216143 & 7.8& 0.69& 0.16& 0.55& 2 & \nodata & \nodata & \nodata & $-2.30$ & 2 \nl
+& & & & & & 4500 & 1.10 & 3.0 & $-2.27$ & 13 \nl
+& & & & & & 4560 & 2.00 & \nodata & $-2.23$ & 6 \nl
+& & & & & & 4520 & 1.60 & 1.5 & $-2.20$ & 7 \nl
+& & & & & & 4500 & 1.00 & 1.8 & $-2.11$ & 8 \nl
+& & & & & & 4565 & \nodata & \nodata & $-2.20$ & 10 \nl
+HD 218502 & 8.3& 0.32& 0.07& 0.35& 14? & 6000 & 3.80 & 1.5 & $-1.75$ & 14 \nl
+HD 218857 & 8.9& 0.50& 0.09& 0.31& 2 & \nodata & \nodata & \nodata & $-2.10$ & 2 \nl
+& & & & & & 5200 & 2.00 & 2.5 & $-2.11$ & 13 \nl
+HD 221170 & 7.7& 0.75& 0.14& 0.54& 2 & \nodata & \nodata & \nodata & $-2.60$ & 2 \nl
+& & & & & & 4350 & 0.00 & \nodata & $-1.90$ & 12 \nl
+& & & & & & 4625 & 1.40 & 2.8 & $-2.04$ & 5 \nl
+& & & & & & 4500 & 1.30 & 1.4 & $-1.96$ & 7 \nl
+& & & & & & 4525 & \nodata & \nodata & $-2.20$ & 10 \nl
+HDE 232078& & 1.45& 0.39& 0.61& 2 & 4000 & 0.40 & \nodata & $-1.40$ & 12 \nl
+--30\deg1121&10.3&0.51&0.10&0.35& 2 & \nodata & \nodata & \nodata & $-2.00$ & 2 \nl
+--24\deg1782& 9.9&0.47&0.04&0.29&20, 2& \nodata & \nodata & \nodata & $-2.70$ & 2 \nl
+& & & & & & 5250 & 2.60 & 1.8 & $-2.31$ & 14 \nl
+& & & & & & 5360 & 3.00 & 1.2 & $-2.35$ & 8 \nl
+& & & & & & \nodata & \nodata & \nodata & $-2.56$ & 21 \nl
+--18\deg5550&9.3&0.69&-0.05&0.40& 2 & \nodata & \nodata & \nodata & $-3.50$ & 2 \nl
+& & & & & & 4750 & 0.80 & 2.9 & $-2.65$ & 14 \nl
+& & & & & & 4582 & 1.00 & \nodata & $-3.00$ & 1 \nl
+& & & & & & 4600 & 1.30 & 3.0 & $-2.93$ & 5 \nl
+& & & & & & 4580 & 1.10 & 2.0 & $-2.99$ & 8 \nl
+& & & & & & 4750 & 1.10 & 2.5 & $-2.90$ & 18 \nl
+--14\deg5890&10.2&0.55&0.09&0.36& 2 & \nodata & \nodata & \nodata & $-2.10$ & 2 \nl
+& & & & & & 4905 & \nodata & \nodata & $-2.30$ & 10 \nl
+--10\deg0388& 9.2&0.33&0.05&0.36&20 & 5860 & 3.30 & \nodata & $-2.40$ & 1 \nl
+& & & & & & 5950 & \nodata & \nodata & $-2.20$ & 19 \nl
+& & & & & & 5980 & 3.50 & \nodata & $-2.50$ & 15 \nl
+& & & & & & 5955 & \nodata & \nodata & $-2.71$ & 24 \nl
+& & & & & & 6010 & 3.20 & 1.5 & $-2.66$ & 16 \nl
+--10\deg0548&10.4&0.51&0.13&0.34& 2 & \nodata & \nodata & \nodata & $-1.60$ & 2 \nl
+--01\deg1792& 9.2&0.51&0.23&0.27&20 & 5000 & \nodata & \nodata & $-1.02$ & 17 \nl
+& & & & & & 5000 & \nodata & \nodata & $-1.02$ & 11 \nl
+--01\deg2582& 9.7&0.49&0.10&0.20& 2 & \nodata & \nodata & \nodata & $-1.90$ & 2 \nl
+& & & & & & 5000 & 1.20 & 1.8 & $-2.19$ & 14 \nl
+& & & & & & 5035 & \nodata & \nodata & $-2.30$ & 10 \nl
++03\deg0740& 9.8&0.31&0.07&0.35&20 & 6240 & \nodata & \nodata & $-2.90$ & 24 \nl
+& & & & & & 6110 & \nodata & \nodata &$<-2.30$ & 19 \nl
+& & & & & & 6110 & 3.20 & 1.5 & $-2.98$ & 16 \nl
++04\deg2466&10.5&0.53&0.17&0.22& 2 & \nodata & \nodata & \nodata & $-1.40$ & 2 \nl
+& & & & & & 5010 & \nodata & \nodata & $-2.40$ & 10 \tablebreak
++04\deg2621&10.0&0.62&0.06&0.47& 2 & \nodata & \nodata & \nodata & $-2.80$ & 2 \nl
+& & & & & & 4750 & 1.10 & 2.0 & $-2.21$ & 14 \nl
+& & & & & & 4725 & \nodata & \nodata & $-2.60$ & 10 \nl
++06\deg0648& 9.1&0.86&0.19&0.60& 2 & \nodata & \nodata & \nodata & $-2.30$ & 2 \nl
+& & & & & & 4500 & 0.80 & 2.4 & $-1.94$ & 14 \nl
+& & & & & & 4145 & \nodata & \nodata & $-2.25$ & 10 \nl
++08\deg2856&10.1&0.69&0.13&0.62& 2 & \nodata & \nodata & \nodata & $-2.50$ & 2 \nl
+& & & & & & 4565 & \nodata & \nodata & $-2.25$ & 10 \nl
++09\deg2870& 9.4&0.64&0.12&0.49& 2 & \nodata & \nodata & \nodata & $-2.40$ & 2 \nl
+& & & & & & 4640 & \nodata & \nodata & $-2.50$ & 10 \nl
++10\deg2495& 9.7&0.50&0.09&0.35& 2 & \nodata & \nodata & \nodata & $-2.30$ & 2 \nl
+& & & & & & 4940 & \nodata & \nodata & $-2.15$ & 10 \nl
++12\deg2547& 9.9&0.63&0.14&0.42& 2 & \nodata & \nodata & \nodata & $-2.30$ & 2 \nl
++18\deg2890& 9.8&0.50&0.12&0.36& 2 & \nodata & \nodata & \nodata & $-2.00$ & 2 \nl
++20\deg3603& 9.9&0.32&0.05&0.31&20,11& 6040 & \nodata & \nodata & $-2.30$ & 4 \nl
+& & & & & & 6000 & \nodata & \nodata & $-2.28$ & 17 \nl
+& & & & & & 6198 & \nodata & \nodata & $-2.26$ & 11 \nl
+& & & & & & 6000 & 4.00 & \nodata & $-2.20$ & 22 \nl
+& & & & & & 6200 & 4.50 & \nodata & $-2.49$ & 15 \nl
++23\deg3912& 8.9&0.37&0.08&0.29&20 & 5600 & 4.00 & \nodata & $-1.70$ & 22 \nl
+& & & & & & 5600 & \nodata & \nodata & $-1.70$ & 4 \nl
+& & & & & & 5720 & \nodata & \nodata & $-1.30$ & 19 \nl
+& & & & & & \nodata & \nodata & \nodata & $-1.29$ & 21 \nl
++26\deg2606& 9.7&0.34&0.05&0.28&20,11& 5980 & \nodata & \nodata &$<-2.20$ & 19 \nl
+& & & & & & 5950 & \nodata & \nodata & $-2.89$ & 24 \nl
++26\deg3578& 9.4&0.31&0.05&0.37&20,11& 5830 & \nodata & \nodata & $-2.60$ & 4 \nl
+& & & & & & 5800 & \nodata & \nodata & $-2.62$ & 17 \nl
+& & & & & & 6177 & \nodata & \nodata & $-2.51$ & 11 \nl
+& & & & & & 6000 & 3.25 & \nodata & $-2.20$ & 22 \nl
+& & & & & & 6140 & 3.50 & \nodata & $-2.57$ & 15 \nl
++30\deg2611& 9.2&0.82&0.33&0.55& 2 & \nodata & \nodata & \nodata & $-1.70$ & 2 \nl
+& & & & & & 4400 & 1.80 & \nodata & $-1.70$ & 12 \nl
+& & & & & & 4400 & 0.90 & 1.7 & $-1.20$ & 14 \nl
+& & & & & & 4260 & \nodata & \nodata & $-1.55$ & 10 \nl
++37\deg1458& 8.9&0.44&0.07&0.22&20,11& 5296 & \nodata & \nodata & $-2.39$ & 11 \nl
+& & & & & & 5420 & \nodata & \nodata & $-2.43$ & 3 \nl
++58\deg1218&10.0&0.51&0.03&0.36& 2 & \nodata & \nodata & \nodata & $-2.80$ & 2 \nl
+& & & & & & 5000 & 1.10 & 2.2 & $-2.71$ & 14 \nl
+& & & & & & 5000 & 2.20 & 1.8 & $-2.46$ & 5 \nl
+& & & & & & 4980 & \nodata & \nodata & $-2.55$ & 10 \nl
++72\deg0094&10.2&0.31&0.09&0.26&12 & 6160 & \nodata & \nodata & $-1.80$ & 19 \nl
+G5--36 & 10.8& 0.40& 0.07& 0.28& 20 & \nodata & \nodata & \nodata & $-1.19$ & 21 \nl
+G18--54 & 10.7& 0.37& 0.08& 0.28& 20 & \nodata & \nodata & \nodata & $-1.34$ & 21 \nl
+G20--08 & 9.9& 0.36& 0.05& 0.25& 20,11& 5849 & \nodata & \nodata & $-2.59$ & 11 \nl
+& & & & & & \nodata & \nodata & \nodata & $-2.03$ & 21 \nl
+G20--15 & 10.6& 0.45& 0.03& 0.27& 20,11& 5657 & \nodata & \nodata & $-2.00$ & 11 \nl
+& & & & & & 6020 & \nodata & \nodata & $-1.56$ & 3 \nl
+& & & & & & \nodata & \nodata & \nodata & $-1.58$ & 21 \nl
+G21--22 & 10.7& 0.38& 0.07& 0.27& 20,11& \nodata & \nodata & \nodata & $-1.23$ & 21 \nl
+G24--03 & 10.5& 0.36& 0.06& 0.27& 20,11& 5866 & \nodata & \nodata & $-1.78$ & 11 \nl
+& & & & & & \nodata & \nodata & \nodata & $-1.70$ & 21 \nl
+G30--52 & 8.6& 0.50& 0.25& 0.27& 11 & 4757 & \nodata & \nodata & $-2.12$ & 11 \nl
+& & & & & & 4880 & \nodata & \nodata & $-2.14$ & 3 \nl
+G33--09 & 10.6& 0.41& 0.10& 0.28& 20 & 5575 & \nodata & \nodata & $-1.48$ & 11 \nl
+G59--18 & 10.2& 0.47& 0.16& 0.26& 20 & \nodata & \nodata & \nodata & $-1.08$ & 21 \nl
+G60--26 & 9.8& 0.43& 0.14& 0.24& 20 & \nodata & \nodata & \nodata & $-1.15$ & 21 \nl
+G66--22 & 10.5& 0.46& 0.16& 0.28& 11 & 5060 & \nodata & \nodata & $-1.77$ & 3 \nl
+& & & & & & \nodata & \nodata & \nodata & $-1.04$ & 21 \nl
+G90--03 & 10.4& 0.37& 0.04& 0.29& 20 & \nodata & \nodata & \nodata & $-2.01$ & 21 \nl
+G102--47 & 10.3& 0.46& 0.10& 0.23& 20,11& 5220 & \nodata & \nodata & $-2.25$ & 3 \nl
+& & & & & & \nodata & \nodata & \nodata & $-1.62$ & 21 \nl
+G122--57 & 8.4& 0.53& 0.27& 0.31& 11 & 4744 & \nodata & \nodata & $-1.71$ & 11 \nl
+G141--19 & 10.6& 0.50& 0.01& 0.26& 20 & 5155 & \nodata & \nodata & $-2.91$ & 11 \nl
+& & & & & & 5680 & \nodata & \nodata & $-1.80$ & 3 \nl
+& & & & & & \nodata & \nodata & \nodata & $-1.95$ & 21 \nl
+G141--47 & 10.5& 0.39& 0.09& 0.29& 11 & 6056 & \nodata & \nodata & $-1.57$ & 11 \nl
+G170--47 & 8.9& 0.45& 0.06& 0.28& 11 & 5126 & \nodata & \nodata & $-2.91$ & 11 \nl
+G186--26 & 10.8& 0.31& 0.04& 0.34& 20 & 6220 & \nodata & \nodata & $-2.90$ & 25 \nl
+& & & & & & 6222 & \nodata & \nodata &$<-2.80$ & 11 \nl
+G205--42 & 10.0& 0.43& 0.10& 0.23& 11 & 5301 & \nodata & \nodata & $-2.18$ & 11 \nl
+G217--08 & 10.5& 0.35& 0.06& 0.28& 11 & 6066 & \nodata & \nodata & $-2.29$ & \nodata\nl
+G243--63 & 7.7& 0.48& 0.13& 0.30& 11 & \nodata & \nodata & \nodata & $-1.66$ & 21 \nl
+LP 608--62\tablenotemark{a} & 10.5& 0.30& 0.07& 0.35& 11 & 6250 & \nodata & \nodata & $-2.70$ & 4 \nl
+\tablenotetext{a}{Star LP 608--62 is also known as BD+1\deg 2341p.}
+\tablenotetext{b}{This is not a real table footnote.}
+\tablerefs{
+(1) Barbuy, Spite, \& Spite 1985; (2) Bond 1980; (3) Carbon et al. 1987;
+(4) Hobbs \& Duncan 1987; (5) Gilroy et al. 1988: (6) Gratton \& Ortolani 1986;
+(7) Gratton \& Sneden 1987; (8) Gratton \& Sneden (1988); (9) Gratton \& Sneden 1991;
+(10) Kraft et al. 1982; (11) LCL, or Laird, 1990; (12) Leep \& Wallerstein 1981;
+(13) Luck \& Bond 1981; (14) Luck \& Bond 1985; (15) Magain 1987;
+(16) Magain 1989; (17) Peterson 1981; (18) Peterson, Kurucz, \& Carney 1990;
+(19) RMB; (20) Schuster \& Nissen 1988; (21) Schuster \& Nissen 1989b;
+(22) Spite et al. 1984; (23) Spite \& Spite 1986; (24) Hobbs \& Thorburn 1991;
+(25) Hobbs et al. 1991; (26) Olsen 1983.}
+\tablecomments{Occasionally, authors wish to append a short
+paragraph of explanatory notes that pertain to the entire table, but
+which are different than the caption. Such notes should be placed in
+a {\tt tablecomments} command like this.}
+\end{planotable}
diff --git a/obsolete/macros/latex209/contrib/aasmacros/table2.tex b/obsolete/macros/latex209/contrib/aasmacros/table2.tex
new file mode 100644
index 0000000000..df417bd445
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aasmacros/table2.tex
@@ -0,0 +1,114 @@
+% TABLE2.TEX -- Sample table 2.
+
+\begin{planotable}{lrrrrrr}
+%\tablewidth{33pc}
+\tablewidth{0pc}
+\tablecaption{Equivalent Widths}
+\tablehead{
+\colhead{Star} & \colhead{6678{\AA}} &
+\colhead{6703{\AA}} & \colhead{6705{\AA}} &
+\colhead{6707{\AA}} & \colhead{6717{\AA}} &
+\colhead{6750{\AA}} \\[.2ex]
+\colhead{} & \colhead{Fe I} &
+\colhead{Fe I} & \colhead{Fe I} &
+\colhead{Li I} & \colhead{Ca I} &
+\colhead{Fe I}}
+
+\startdata
+HD 97 & 105.1 & 18.9 & 15.1 & 12.1 & 71.3 & 52.5 \nl
+HD 2665 & 68.1 & 7.3 & \nodata & 15.0 & 24.9 & 22.6 \nl
+HD 4306 & 21.6 & \nodata & \nodata & 17.7 & 7.7 & \nodata \nl
+HD 4906 & 113.5 & 29.3 & 30.7 & 9: & 108.7 & 70.8 \nl
+HD 5426 & 53.2 & \nodata & \nodata & 9.1 & 21.8 & 13.7 \nl
+HD 6755 & 84.5 & 7.3 & 6.3 & 15.3 & 46.8 & 34.5 \nl
+HD 18907 & 129.1 & 36.8 & 33.5 & \nodata & 121.0 & 74.6 \nl
+HD 21581 & 88.7 & 7.1 & 6.2 & 17.3 & 53.6 & 41.5 \nl
+HD 24289 & \nodata & \nodata & \nodata & 45.0 & \nodata & \nodata \nl
+HD 24616 & 121.9 & 38.4 & 31.3 & \nodata & 112.0 & 75.7 \nl
+HD 44007 & 90.9 & 10.7 & \nodata & 18.7 & 60.6 & 46.1 \nl
+HD 45282 & 74.3 & 7.1 & 4.1 & 9.9 & 47.2 & 34.1 \nl
+HD 76932 & 74.4 & 6.7 & 12.0 & 26.7 & 64.7 & \nodata \nl
+HD 84937 & \nodata & \nodata & \nodata & 20\tablenotemark{1}& \nodata & \nodata \nl
+HD 87140 & 71.9 & \nodata & \nodata & 13.8 & 37.6 & \nodata \nl
+HD 88609 & \nodata & \nodata & \nodata & $<$2 & \nodata & \nodata \nl
+HD 94028 & 44.1 & 9.9 & 7.4 & 36.6 & 29.1 & \nodata \nl
+HD 97916 & 52.4 & \nodata & \nodata & $<$5 & 55.1 & \nodata \nl
+HD 101063 & 93.5 & 19.9 & \nodata & 12.3 & 68.6 & \nodata \nl
+HD 107752 & 35.4 & \nodata & \nodata & $<$4 & 13.1 & \nodata \nl
+HD 108317 & 34.3 & \nodata & \nodata & $<$4 & 15.3 & \nodata \nl
+HD 111721 & 91.8 & 16.5 & 12.2 & 17.2 & 72.9 & \nodata \nl
+HD 115444 & 31.8 & \nodata & \nodata & $<$3 & 8.6 & \nodata \nl
+HD 122563 & 51.8 & \nodata & \nodata & $<$2 & 11.9 & \nodata \nl
+HD 126587 & 23.6 & \nodata & \nodata & 14.5 & 10.9 & \nodata \nl
+HD 128279 & 41.1 & \nodata & \nodata & 11.4 & 17.3 & 7.5 \nl
+HD 132475 & 55.7 & \nodata & \nodata & 52.8 & 38.1 & \nodata \nl
+HD 134169 & \nodata & \nodata & \nodata & 44\tablenotemark{5}& \nodata & \nodata \nl
+HD 140283 & 12.5 & \nodata & \nodata & 42.2 & \nodata & \nodata \nl
+HD 160617 & \nodata & \nodata & \nodata & 42\tablenotemark{4}& \nodata & \nodata \nl
+HD 161770 & 51.1 & \nodata & 6.4 & 44.9 & 31.4 & 14.4 \nl
+HD 163810 & 83.0 & 9.5 & 7.6 & 22.1 & 54.9 & \nodata \nl
+HD 165195 & 103.8 & 7.7 & 2.9 & $<$2 & 35.9 & \nodata \nl
+HD 171496 & 138.8 & 47.4 & 38.0 & $<$3 & 124.8 & \nodata \nl
+HD 175305 & \nodata & \nodata & 8.2 & 13.7 & 60.9 & \nodata \nl
+HD 186478 & 56.8 & \nodata & \nodata & $<$4 & 21.7 & \nodata \nl
+HD 187111 & 136.4 & 35.1 & 13.8 & $<$2 & 93.4 & \nodata \nl
+HD 189558 & \nodata & \nodata & \nodata & 42\tablenotemark{5}& \nodata & \nodata \nl
+HD 190287 & 86.6 & 9.6 & 11.7 & 15.0 & 63.1 & \nodata \nl
+HD 201889 & 93.6 & 16.3 & 16.8 & $<$4 & 86.2 & \nodata \nl
+HD 204543 & 109.8 & 7.7 & \nodata & $<$3 & 54.5 & 52.3 \nl
+HD 211998 & \nodata & \nodata & \nodata & 13\tablenotemark{5}& \nodata & \nodata \nl
+HD 216143 & 92.1 & 8.2 & \nodata & $<$8 & 30.3 & 40.1 \nl
+HD 218502 & 20.0 & \nodata & \nodata & 30.0 & 10.0 & \nodata \nl
+HD 218857 & 61.6 & \nodata & \nodata & 12.1 & \nodata & 21.3 \nl
+HD 221170 & 94.0 & 8.6 & \nodata & $<$3 & 41.7 & 45.6 \nl
+HDE 232078 & 198.1 & 67.4 & 23.5 & 32.8 & 136.5 & 143.0 \nl
+--30\deg1121 & 74.1 & \nodata & 7.5 & 14.6 & 30.5 & 28.8 \nl
+--24\deg1782 & 16.0 & \nodata & \nodata & 12.6 & 10.4 & \nodata \nl
+--18\deg5550 & 28.6 & \nodata & \nodata & 16.8 & \nodata & \nodata \nl
+--14\deg5890 & 58.9 & \nodata & \nodata & 25.8 & 28.6 & \nodata \nl
+--10\deg0388 & 7.2 & \nodata & \nodata & 23.6 & \nodata & \nodata \nl
+--10\deg0548 & 85.1 & 17.1 & \nodata & 17.2 & 57.0 & \nodata \nl
+--01\deg1792 & 112.4 & 30.0 & 25.0 & 10: & 104.4 & \nodata \nl
+--01\deg2582 & 40.9 & \nodata & \nodata & 10.2 & 19.3 & \nodata \nl
++03\deg0740 & \nodata & \nodata & \nodata & 21\tablenotemark{3} & \nodata & \nodata \nl
++04\deg2466 & 52.9 & \nodata & \nodata & $<$6 & 38.0 & \nodata \nl
++04\deg2621 & 49.8 & \nodata & \nodata & $<$5 & 17.4 & \nodata \nl
++06\deg0648 & \nodata & 13.5 & 8.1 & $<$4 & 46.5 & 51.8 \nl
++08\deg2856 & 99.3 & \nodata & \nodata & 8: & 42.8 & \nodata \nl
++09\deg2870 & 70.4 & \nodata & \nodata & $<$4 & 23.6 & \nodata \nl
++10\deg2495 & 67.6 & \nodata & \nodata & 21.3 & 29.2 & \nodata \nl
++12\deg2547 & 198.1 & 86.0 & 62.7 & $<$4 & 180.7 & \nodata \nl
++18\deg2890 & 88.0 & 12.0 & 8.6 & $<$4 & 57.7 & \nodata \nl
++20\deg3603 & \nodata & \nodata & \nodata & 27\tablenotemark{1}& \nodata & \nodata \nl
++23\deg3912 & 50.1 & \nodata & \nodata & 80.8 & 41.2 & 13.9 \nl
++26\deg2606 & \nodata & \nodata & \nodata & 35\tablenotemark{3}& \nodata & \nodata \nl
++26\deg3578 & \nodata & \nodata & \nodata & 27\tablenotemark{1}& \nodata & \nodata \nl
++30\deg2611 & 166.1 & 52.4 & 25.1 & $<$6 & 104.8 & 115.6 \nl
++37\deg1458 & 42.9 & \nodata & \nodata & 17.0 & 17.3 & \nodata \nl
++58\deg1218 & 27.9 & \nodata & \nodata & 17.2 & \nodata & \nodata \nl
++72\deg0094 & \nodata & \nodata & \nodata & 27\tablenotemark{3}& \nodata & .. \nl
+G5--36 & 54.4 & 9.2 & 7.7 & 44.2 & 53.1 & \nodata \nl
+G18--54 & 52.3 & \nodata & \nodata & 34.9 & \nodata & \nodata \nl
+G20--08 & 14.5 & \nodata & \nodata & 36.3 & \nodata & \nodata \nl
+G20--15 & 40.7 & \nodata & \nodata & 28.3 & 36.9 & \nodata \nl
+G21--22 & 63.5 & \nodata & \nodata & 41.4 & 37.9 & \nodata \nl
+G24--03 & 38.4 & \nodata & \nodata & 28.5 & 21.4 & \nodata \nl
+G30--52 & \nodata & 15.6 & 11.0 & \nodata & 59.7 & 59.8 \nl
+G33--09 & \nodata & \nodata & 7.7 & 35.2 & 55.9 & 30.5 \nl
+G59--18 & 94.7 & 18.5 & 15.0 & 15.7 & 78.9 & \nodata \nl
+G60--26 & 81.8 & 7.6 & 11.0 & 13.6 & 64.6 & \nodata \nl
+G66--22 & 115.2 & 19.6 & 21.2 & 6: & 86.8 & \nodata \nl
+G90--03 & 23.6 & \nodata & \nodata & 43.5 & 20.9 & \nodata \nl
+G102--47 & 71.5 & \nodata & \nodata & 17.5 & 44.4 & 25.2 \nl
+G122--57 & 128.5 & 41.0 & 32.0 & $<$3 & 120.8 & \nodata \nl
+G141--19 & 25.5 & \nodata & \nodata & 32.5 & 13.8 & \nodata \nl
+G141--47 & 59.9 & 9.6 & 7.8 & 35.0 & 39.8 & \nodata \nl
+G170--47 & 27.8 & \nodata & \nodata & 14: & 7.5 & \nodata \nl
+G186--26 & \nodata & \nodata & \nodata & $\leq$3\tablenotemark{2}& & \nodata \nl
+G205--42 & 54.1 & \nodata & \nodata & 24.0 & 25.6 & 24.8 \nl
+G217--08 & 15.4 & \nodata & \nodata & 32.6 & \nodata & \nodata \nl
+G243--63 & \nodata & 8.3 & 4.3 & 13.1 & 41.1 & 38.0 \nl
+LP 608--62 & \nodata & \nodata & \nodata & 23\tablenotemark{1}& \nodata & \nodata \nl
+\tablerefs{(1) Hobbs \& Duncan 1987; (2) Hobbs et al. 1991; (3) RMB;
+(4) Spite \& Spite 1986; (5) Spite et al. 1984}
+\end{planotable}
diff --git a/obsolete/macros/latex209/contrib/aasmacros/table3.tex b/obsolete/macros/latex209/contrib/aasmacros/table3.tex
new file mode 100644
index 0000000000..7e58cbe32d
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aasmacros/table3.tex
@@ -0,0 +1,106 @@
+% TABLE3.TEX -- Sample table 3.
+
+\begin{planotable}{lrrrr}
+\tablewidth{27pc}
+\tablecaption{Models and Abundances}
+\tablehead{
+\colhead{Star} & \colhead{T$_{\rm eff}$} &
+\colhead{log $\epsilon$(Li)} & \colhead{[Fe/H]} &
+\colhead{[Ca/H]}}
+
+\startdata
+HD 97 & 5000 & $ 0.81 $ & $-1.23$ & $-0.92$ \nl
+HD 2665 & 5100 & $ 0.90 $ & $-1.89$ & $-1.80$ \nl
+HD 4306 & 4950 & $ 0.92 $ & $-2.87$ & $-2.45$ \nl
+HD 4906 & 5100 & $ 0.77 $ & $-0.84$ & $-0.18$ \nl
+HD 5426 & 5100 & $ 0.77 $ & $-2.08$ & $-1.83$ \nl
+HD 6755 & 5200 & $ 1.12 $ & $-1.52$ & $-1.31$ \nl
+HD 18907 & 5000 & \nodata & $-0.78$ & +0.01 \nl
+HD 21581 & 4900 & $ 0.84 $ & $-1.73$ & $-1.35$ \nl
+HD 24289 & 5570 & $ 2.00 $ & \nodata & \nodata \nl
+HD 24616 & 5000 & \nodata & $-0.78$ & $-0.14$ \nl
+HD 44007 & 4900 & $ 0.88 $ & $-1.50$ & $-1.15$ \nl
+HD 45282 & 5400 & $ 1.12 $ & $-1.29$ & $-1.09$ \nl
+HD 76932 & 5900 & $ 2.02 $ & $-0.90$ & $-0.56$ \nl
+HD 84937 & 6252 & $ 2.10 $ & \nodata & \nodata \nl
+HD 87140 & 5000 & $ 0.86 $ & $-1.75$ & $-1.58$ \nl
+HD 88609 & 4510 & $<-0.80$& \nodata & \nodata \nl
+HD 94028 & 5800 & $ 2.09 $ & $-1.51$ & $-1.28$ \nl
+HD 97916 & 6000 & $<\phantom{-}1.30$ & $-1.38$ & $-1.23$ \nl
+HD 101063 & 5000 & $ 0.81 $ & $-1.13$ & $-0.90$ \nl
+HD 107752 & 4700 & $<-0.10$& $-2.88$ & $-2.33$ \nl
+HD 108317 & 5300 & $<\phantom{-}0.60$& $-2.32$ & $-1.91$ \nl
+HD 111721 & 5000 & $ 0.97 $ & $-1.34$ & $-0.89$ \nl
+HD 115444 & 4800 & $<-0.10$& $-2.72$ & $-2.47$ \nl
+HD 122563 & 4600 & $<-0.60$& $-2.75$ & $-2.45$ \nl
+HD 126587 & 4750 & $ 0.56 $ & $-3.06$ & $-2.37$ \nl
+HD 128279 & 5100 & $ 0.88 $ & $-2.32$ & $-1.99$ \nl
+HD 132475 & 5500 & $ 2.04 $ & $-1.48$ & $-1.23$ \nl
+HD 134169 & 5800 & $ 2.18 $ & \nodata & \nodata \nl
+HD 140283 & 5650 & $ 2.05 $ & $-2.52$ & \nodata \nl
+HD 160617 & 5900 & $ 2.23 $ & \nodata & \nodata \nl
+HD 161770 & 5050 & $ 1.50 $ & $-2.12$ & $-1.64$ \nl
+HD 163810 & 5400 & $ 1.51 $ & $-1.23$ & $-1.00$ \nl
+HD 165195 & 4490 & $<-0.80$& $-2.26$ & $-1.97$ \nl
+HD 171496 & 4500 & $<-0.60$& $-1.12$ & $-0.35$ \nl
+HD 175305 & 5190 & $ 1.08 $ & $-1.50$ & $-1.00$ \nl
+HD 186478 & 4600 & $<-0.10$& $-2.68$ & $-2.15$ \nl
+HD 187111 & 4300 & $<-1.20$& $-1.76$ & $-1.22$ \nl
+HD 189558 & 5600 & $ 2.00 $ & $-1.30$ & \nodata \nl
+HD 190287 & 5100 & $ 1.01 $ & $-1.38$ & $-1.01$ \nl
+HD 201889 & 5600 & $ 0.91 $ & $-0.73$ & $-0.22$ \nl
+HD 204543 & 4650 & $<-0.40$& $-1.96$ & $-1.57$ \nl
+HD 211998 & 5210 & $ 1.04 $ & \nodata & \nodata \nl
+HD 216143 & 4500 & $<-0.10$& $-2.18$ & $-2.05$ \nl
+HD 218502 & 6000 & $ 2.16 $ & $-1.96$ & $-1.77$ \nl
+HD 218857 & 5100 & $ 0.91 $ & $-1.87$ & \nodata \nl
+HD 221170 & 4625 & $<-0.10$& $-1.96$ & $-1.74$ \nl
+HDE 232078 & 3950 & $-0.22$ & -$-1.73$ & $-1.31$ \nl
+--30\deg1121 & 5100 & $ 0.99 $ & $-1.62$ & $-1.58$ \nl
+--24\deg1782 & 5300 & $ 1.13 $ & $-2.70$ & $-2.10$ \nl
+--18\deg5550 & 4600 & $ 0.42 $ & $-3.15$ & \nodata \nl
+--14\deg5890 & 4950 & $ 1.10 $ & $-2.07$ & $-1.72$ \nl
+--10\deg0388 & 5950 & $ 2.00 $ & $-2.52$ & \nodata \nl
+--10\deg0548 & 5100 & $ 1.07 $ & $-1.07$ & $-0.98$ \nl
+--01\deg1792 & 5000 & $ 0.78 $ & $-0.94$ & $-0.28$ \nl
+--01\deg2582 & 5100 & $ 0.83 $ & $-2.29$ & $-1.89$ \nl
++03\deg0740 & 6110 & $ 2.07 $ & \nodata & \nodata \nl
++04\deg2466 & 5000 & $<\phantom{-}0.50$& $-2.15$ & $-1.47$ \nl
++04\deg2621 & 4550 & $-0.30$ & $-2.83$ & $-2.31$ \nl
++06\deg0648 & 4500 & $<-0.50$& $-1.91$ & $-1.70$ \nl
++08\deg2856 & 4560 & $<\phantom{-}0.00$& $-2.05$ & $-1.78$ \nl
++09\deg2870 & 4600 & $<-0.30$& $-2.48$ & $-2.10$ \nl
++10\deg2495 & 5000 & $ 1.07 $ & $-1.83$ & $-1.70$ \nl
++12\deg2547 & 4500 & $<-0.50$& $-0.72$ & +0.14 \nl
++18\deg2890 & 5000 & $<\phantom{-}0.30$& $-1.61$ & $-1.15$ \nl
++20\deg3603 & 6000 & $ 2.12 $ & \nodata & \nodata \nl
++23\deg3912 & 5600 & $ 2.38 $ & $-1.59$ & $-1.11$ \nl
++26\deg2606 & 5980 & $ 2.20 $ & \nodata & \nodata \nl
++26\deg3578 & 6000 & $ 2.05 $ & \nodata & \nodata \nl
++30\deg2611 & 4400 & $<-0.40$& $-1.35$ & $-1.08$ \nl
++37\deg1458 & 5300 & $ 1.27 $ & $-1.97$ & $-1.87$ \nl
++58\deg1218 & 5000 & $ 0.97 $ & $-2.66$ & \nodata \nl
++72\deg0094 & 6160 & $ 2.22 $ & \nodata & \nodata \nl
+G5--36 & 5600 & $ 2.03 $ & $-1.35$ & $-0.82$ \nl
+G18--54 & 5800 & $ 2.07 $ & $-1.33$ & \nodata \nl
+G20--08 & 5850 & $ 2.13 $ & $-2.26$ & \nodata \nl
+G20--15 & 5600 & $ 1.80 $ & $-1.78$ & $-1.22$ \nl
+G21--22 & 5700 & $ 2.08 $ & $-1.09$ & $-1.03$ \nl
+G24--03 & 5800 & $ 1.97 $ & $-1.63$ & $-1.42$ \nl
+G30--52 & 5000 & \nodata & $-1.31$ & $-1.14$ \nl
+G33--09 & 5500 & $ 1.82 $ & $-1.27$ & $-0.94$ \nl
+G59--18 & 5200 & $ 1.13 $ & $-1.08$ & $-0.65$ \nl
+G60--26 & 5400 & $ 1.26 $ & $-1.22$ & $-0.83$ \nl
+G66--22 & 5300 & $ 0.79 $ & $-0.90$ & $-0.65$ \nl
+G90--03 & 5900 & $ 2.25 $ & $-1.93$ & $-1.41$ \nl
+G102--47 & 5200 & $ 1.18 $ & $-1.69$ & $-1.30$ \nl
+G122--57 & 4800 & $<-0.10$& $-0.92$ & $-0.13$ \nl
+G141--19 & 5150 & $ 1.43 $ & $-2.59$ & $-2.01$ \nl
+G141--47 & 6000 & $ 2.23 $ & $-1.13$ & $-0.98$ \nl
+G170--47 & 5250 & $ 1.13 $ & $-2.42$ & $-2.30$ \nl
+G186--26 & 6220 & $<\phantom{-}1.28$& \nodata & \nodata \nl
+G205--42 & 5300 & $ 1.44 $ & $-1.51$ & $-1.61$ \nl
+G217--08 & 6050 & $ 2.24 $ & $-2.05$ & \nodata \nl
+G243--63 & 5200 & $ 1.05 $ & $-1.39$ & $-1.36$ \nl
+LP 608--62 & 6250 & $ 2.21 $ & \nodata & \nodata \nl
+\end{planotable}
diff --git a/obsolete/macros/latex209/contrib/aasmacros/tighten.sty b/obsolete/macros/latex209/contrib/aasmacros/tighten.sty
new file mode 100644
index 0000000000..d42504bbc0
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aasmacros/tighten.sty
@@ -0,0 +1,15 @@
+% TIGHTEN.STY -- Substyle definition for "single-spaced" manuscripts.
+
+% This is the least intrusive way to implement a substyle layered on top
+% the standard LaTeX styles: by creating a foo.sty style that is read when
+% the specifies the document substyle foo. This file is read in when
+%
+% \documentstyle[12pt,aasms,tighten]{article}
+%
+% is specified by the author.
+
+\tightenlines
+
+% That's all this files does. It would be more efficient to have "tighten"
+% declared as an internal substyle, but that requires modifications in the
+% main LaTeX article.sty file.
diff --git a/obsolete/macros/latex209/contrib/aguplus/agu.bst b/obsolete/macros/latex209/contrib/aguplus/agu.bst
new file mode 100644
index 0000000000..16a1e9357f
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aguplus/agu.bst
@@ -0,0 +1,1145 @@
+%%
+%% This is file `agu.bst', generated
+%% on <1994/5/27> with the docstrip utility (2.2e).
+%%
+%% The original source files were:
+%%
+%% genbst.mbs (with options: `ay,seq-lab,nm-rev1,nmlm,x9,m1,dt-end,thtit-a,vol-it,volp-com,edby,blk-com,pp,ed,abr,lab-it,and-com,em-it')
+%% ----------------------------------------
+%% *** For publications of the American Geophysical Union ***
+%%
+%% (Here are the specifications of the source file)
+%% \def\filename{genbst.mbs}
+%% \def\filedate{1994 February 7}
+%% \def\fileversion{1.2}
+%% For use with BibTeX version 0.99a or later, LaTeX version 2.09
+%%-------------------------------------------------------------------
+%% NOTICE:
+%% This file may be used for non-profit purposes.
+%% It may not be distributed in exchange for money,
+%% other than distribution costs.
+%%
+%% The author provides it `as is' and does not guarantee it in any way.
+%%
+%% Copyright (C) 1993 Patrick W. Daly
+%% Max-Planck-Institut f\"ur Aeronomie
+%% Postfach 20
+%% D-37189 Katlenburg-Lindau
+%% Germany
+%%
+%% E-mail:
+%% SPAN-- nsp::linmpi::daly (note nsp also known as ecd1)
+%% Internet-- daly@linmpi.dnet.gwdg.de
+%%-----------------------------------------------------------
+%% \CharacterTable
+%% {Upper-case \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
+%% Lower-case \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
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%---------------------------------------------------------------------
+ % This is an author-year citation style bibliography. As such, it is
+ % non-standard LaTeX, and requires a style option to function properly.
+ % An appropriate style option is: natbib.sty by Patrick W. Daly
+ % The form of the \bibitem entries is
+ % \bibitem[Jones et al.(1990)]{key}...
+ % The essential feature is that the label (the part in brackets) consists
+ % of the author names, as they should appear in the citation, with the year
+ % in parentheses following. There must be no space before the opening
+ % parenthesis!
+ % In natbib.sty, it is possible to define the type of enclosures that is
+ % really wanted (brackets or parentheses), but in either case, there must
+ % be parentheses in the label.
+ % The \cite command functions as follows:
+ % \cite{key} ==>> Jones et al. (1990)
+ % \cite[]{key} ==>> (Jones et al., 1990)
+ % \cite[chap. 2]{key} ==>> (Jones et al., 1990, chap. 2)
+ % \cite[e.g.][]{key} ==>> (e.g. Jones et al., 1990)
+ % \cite[e.g.][p. 32]{key} ==>> (e.g. Jones et al., p. 32)
+ % \citeauthor{key} Jones et al.
+ % \citeyear{key} 1990
+%%---------------------------------------------------------------------
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ volume
+ year
+ }
+ {}
+ { label extra.label sort.label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ "\newblock " write$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+ "\bibitem[" write$
+ label write$
+ ")]{" write$
+ cite$ write$
+ "}" write$
+ newline$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "{\it " swap$ * "}" * }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { nameptr #1 >
+ { s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't := }
+ { s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ 't := }
+ if$
+ nameptr #1 >
+ {
+ nameptr #2 =
+ numnames #9 > and
+ { "others" 't :=
+ #1 'namesleft := }
+ 'skip$
+ if$
+ namesleft #1 >
+ { ", " * t * }
+ {
+ "," *
+ t "others" =
+ { " et~al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.names.ed}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{f.~}{vv~}{ll}{, jj}"
+ format.name$ 't :=
+ nameptr #1 >
+ {
+ namesleft #1 >
+ { ", " * t * }
+ {
+ "," *
+ t "others" =
+ { " et~al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.key}
+{ empty$
+ { key field.or.null }
+ { "" }
+ if$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names }
+ if$
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+ { " (eds.)" * }
+ { " (ed.)" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.editors}
+{ editor empty$
+ { "" }
+ { editor format.names.ed
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {word.in}
+{ "in " }
+
+FUNCTION {format.date}
+{ year duplicate$ empty$
+ { "empty year in " cite$ * "; set to ????" * warning$
+ pop$ "????" }
+ 'skip$
+ if$
+ extra.label *
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "vol." volume tie.or.space.connect
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "no." }
+ { "No." }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+ { edition "l" change.case$ " edn." * }
+ { edition "t" change.case$ " edn." * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "pp." pages n.dashify tie.or.space.connect }
+ { "p." pages tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ emphasize
+ number empty$
+ 'skip$
+ { "(" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ", " * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "chap." }
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { word.in booktitle emphasize * }
+ { word.in booktitle emphasize * ", edited by " *
+ format.in.editors * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Tech. Rep." }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{
+ word.in
+ "\cite{" * crossref * "}" *
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ word.in
+ }
+ { "vol." volume tie.or.space.connect
+ " of " *
+ }
+ if$
+ "\cite{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{
+ word.in
+ "\cite{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.title "title" output.check
+ crossref missing$
+ { journal emphasize "journal" output.check
+ format.vol.num.pages output
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ note output
+ format.date "year" output.check
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check
+ editor format.key output
+ }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ {
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ note output
+ format.date "year" output.check
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ format.title "title" output.check
+ howpublished output
+ address output
+ note output
+ format.date "year" output.check
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check
+ editor format.key output
+ }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ note output
+ format.date "year" output.check
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.title "title" output.check
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ format.edition output
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ note output
+ format.date "year" output.check
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.title "title" output.check
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ address output
+ new.sentence
+ organization output
+ publisher output
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ note output
+ format.date "year" output.check
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ format.btitle "title" output.check
+ organization output
+ address output
+ format.edition output
+ note output
+ format.date "year" output.check
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.title "title" output.check
+ "Master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ note output
+ format.date "year" output.check
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ format.title output
+ howpublished output
+ note output
+ format.date "year" output.check
+ fin.entry
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.title "title" output.check
+ "Ph.D. thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ note output
+ format.date "year" output.check
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ format.editors output
+ editor format.key output
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ address output
+ new.sentence
+ organization output
+ publisher output
+ note output
+ format.date "year" output.check
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.title "title" output.check
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ note output
+ format.date "year" output.check
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.title "title" output.check
+ note "note" output.check
+ format.date "year" output.check
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+FUNCTION {format.lab.names}
+{ 's :=
+ s #1 "{vv~}{ll}" format.name$
+ s num.names$ duplicate$
+ #2 >
+ { pop$ " et~al." * }
+ { #2 <
+ 'skip$
+ { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et~al." * }
+ { " and " * s #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.label}
+{ editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {calc.label}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.label
+ 'author.key.label
+ if$
+ }
+ if$
+ emphasize
+ "("
+ *
+ year duplicate$ empty$
+ { pop$ "????" }
+ { purify$ #-1 #4 substring$ }
+ if$
+ *
+ 'label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { nameptr #1 >
+ { " " * }
+ 'skip$
+ if$
+ s nameptr
+ "{vv{ } }{ll{ }}{ f{ }}{ jj{ }}"
+ format.name$ 't :=
+ nameptr numnames = t "others" = and
+ { "et al" * }
+ { numnames #2 > nameptr #2 = and
+ { "zzzzzz" * #1 'namesleft := }
+ { t sortify * }
+ if$
+ }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {editor.sort}
+{ editor empty$
+ { key empty$
+ { "to sort, need editor or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {presort}
+{ calc.label
+ label sortify
+ " "
+ *
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.sort
+ 'author.sort
+ if$
+ }
+ if$
+ #1 entry.max$ substring$
+ 'sort.label :=
+ sort.label
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { last.label next.extra }
+
+INTEGERS { last.extra.num }
+
+FUNCTION {initialize.extra.label.stuff}
+{ #0 int.to.chr$ 'last.label :=
+ "" 'next.extra :=
+ #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+{ last.label label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ label 'last.label :=
+ }
+ if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+ label extra.label * 'label :=
+}
+
+EXECUTE {initialize.extra.label.stuff}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+FUNCTION {bib.sort.order}
+{ sort.label
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {bib.sort.order}
+
+SORT
+
+FUNCTION {begin.bib}
+{ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "\begin{thebibliography}{}" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+ "\end{thebibliography}" write$ newline$
+}
+
+EXECUTE {end.bib}
+%% End of customized bst file
diff --git a/obsolete/macros/latex209/contrib/aguplus/agu2e.sty b/obsolete/macros/latex209/contrib/aguplus/agu2e.sty
new file mode 100644
index 0000000000..0b627341b3
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aguplus/agu2e.sty
@@ -0,0 +1,49 @@
+%%
+%% This is file `agu2e.sty', generated
+%% on <1994/5/27> with the docstrip utility (2.2e).
+%%
+%% The original source files were:
+%%
+%% aguplus.dtx (with options: `patch')
+%% ---------------------------------
+%% AGU2E
+%% ---------------------------------
+%% A patch to allow AGUTeX to run
+%% under LaTeX2e
+%% ---------------------------------
+%%
+%%============================AGUPLUS.DTX===========================
+\def\filename{aguplus}
+\def\fileversion{1.0}
+\def\filedate{1994/05/26}
+ %-------------------------------------------------------------------
+ % NOTICE:
+ % This file may be used for non-profit purposes.
+ % It may not be distributed in exchange for money,
+ % other than distribution costs.
+ %
+ % The author provides it `as is' and does not guarantee it in any way.
+ %
+%% Copyright (C) 1994 Patrick W. Daly
+ % Max-Planck-Institut f\"ur Aeronomie
+ % Postfach 20
+ % D-37189 Katlenburg-Lindau
+ % Germany
+ %
+ % E-mail:
+ % SPAN-- nsp::linmpi::daly (note nsp also known as ecd1)
+ % Internet-- daly@linax1.dnet.gwdg.de
+ %-----------------------------------------------------------
+ % This package fixes up some problems between AGUTeX and LaTeX2e
+ % It must be read in BEFORE any of the AGUTeX packages, as
+ % \usepackage{agu2e,agums,aguplus}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{agu2e}[\filedate (Patch for AGUTeX and LaTeX2e)]
+\newdimen\@maxsep \newdimen\@dblmaxsep
+\let\ori@input=\@input
+\def\@input#1{\def\@tempa{#1}\def\@tempb{art12.sty}\ifx\@tempa\@tempb
+ \ori@input{size12.clo}\else\ori@input{#1}\fi}
+
+%% <<<<< End of decommented file <<<<<<
+%%
+%% End of file agu2e.sty.
diff --git a/obsolete/macros/latex209/contrib/aguplus/aguplus.sty b/obsolete/macros/latex209/contrib/aguplus/aguplus.sty
new file mode 100644
index 0000000000..b573d3d95d
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aguplus/aguplus.sty
@@ -0,0 +1,818 @@
+%%
+%% This is file `aguplus.sty', generated
+%% on <1994/6/6> with the docstrip utility (2.2e).
+%% (With manual patch on 1994/08/22, until true LaTeX2e version ready
+%%
+%% The original source files were:
+%%
+%% aguplus.dtx (with options: `style,mtitle,209')
+%% sublabel.dtx (with options: `package,subpack,209,agu')
+%% appendix.dtx (with options: `package,subpack,209,agu,plates')
+%% figcaps.dtx (with options: `package,subpack,agu,209,plates,sublab')
+%% natbib.dtx (with options: `package,subpack,agu,209')
+%% (with manual patch)
+%% balance.dtx (with options: `package,subpack,209')
+%% ---------------------------------
+%% AGU++
+%% ---------------------------------
+%% An unofficial LaTeX extension to
+%% the official AGU package AGUTeX
+%% ---------------------------------
+%%
+%% >>>>> Start of decommented files >>>>>>>
+%%============================AGUPLUS.DTX===========================
+\def\filename{aguplus}
+%\def\fileversion{1.0a}
+%\def\filedate{1994/06/06}
+%% Manual patch in natbib part because this version originally made
+%% for preliminary test release of LaTeX2e. It does not work under true 2e
+%% so the patch has been added until a proper LaTeX2e version is ready
+\def\fileversion{1.0b}
+\def\filedate{1994/08/22}
+ %-------------------------------------------------------------------
+ % NOTICE:
+ % This file may be used for non-profit purposes.
+ % It may not be distributed in exchange for money,
+ % other than distribution costs.
+ %
+ % The author provides it `as is' and does not guarantee it in any way.
+ %
+%% Copyright (C) 1994 Patrick W. Daly
+ % Max-Planck-Institut f\"ur Aeronomie
+ % Postfach 20
+ % D-37189 Katlenburg-Lindau
+ % Germany
+ %
+ % E-mail:
+ % SPAN-- nsp::linmpi::daly (note nsp also known as ecd1)
+ % Internet-- daly@linax1.dnet.gwdg.de
+ %-----------------------------------------------------------
+ % This is AGU++, an extension to the AGU official package AGUTeX
+ % It fixes up some problems with AGUTeX, adds many extra features
+ % including putting figures, plates, tables in the text,
+ % decent author-year citations and BibTeX support,
+ % \title, \author, \affil allowed in preamble,
+ % supplemental abstract for JGR,
+ % balanced columns on last preprint page,
+ % sublabelling of counters figure, plate, table, equation.
+ %
+ % This package MUST be used in conjunction with one of the AGUTeX
+ % packages, and must follow it, as
+ % \documentstyle[agupp,aguplus]{article}
+ % or with the newer LaTeX2e
+ % \documentclass{article}
+ % \usepackage{agu2e,agupp,aguplus}
+ %
+ % See the manual AGUPLUS.TEX for details.
+ %--------------------------------------------------------------------
+\typeout{Package: `\filename' v\fileversion\space <\filedate> --P.W.Daly}
+\newif\if@twoOnine \let\if@twoOnine=\if@compatibility
+\@ifundefined{documentclass}{
+ \@twoOninetrue
+}{
+ \NeedsTeXFormat{LaTeX2e}
+ \ProvidesPackage{\filename}[\filedate\space (PWD)]
+}
+\newcommand{\optionlogo}{AGU$^{++}$}
+\@ifundefined{revtex@genre}{\@latexerr{Option `\filename' must
+ come before the AGU option}{\@ehd}\def\@tempa{\endinput}}
+ {\def\@tempa{\relax}}
+\@tempa
+\let\agupid=\revtex@pageid
+\let\@fv=\fileversion
+\def\revtex@pageid{\agupid
+ \@footnotetext{With the extension option `\optionlogo' v\@fv.}}
+\newif\if@draft
+\newif\if@preprint
+\newif\if@camera
+\def\@tempa{manuscript}
+\ifx\revtex@genre\@tempa\@drafttrue\else\@draftfalse\fi
+\def\@tempa{preprint}
+\ifx\revtex@genre\@tempa\@preprinttrue\else\@preprintfalse\fi
+\def\@tempa{galley}
+\ifx\revtex@genre\@tempa\@cameratrue\else\@camerafalse\fi
+\@ifundefined{reset@font}{\def\reset@font{\relax}}{}
+\@ifundefined{p@LaTeX}{}{\def\LaTeX{\protect\p@LaTeX}}
+\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
+ \def\@svsec{}\else
+ \refstepcounter{#1}
+ \edef\@svsec{\sectype\csname the#1\endcsname\sectchar\hskip 1ex }\fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #6\relax
+ \@hangfrom{\hskip #3\relax{\@svsec}}{\interlinepenalty \@M #8\par}
+ \endgroup
+ \csname #1mark\endcsname{#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #7}\else
+ \def\@svsechd{#6\hskip #3{\@svsec} #8\csname #1mark\endcsname
+ {#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #7}}\fi
+ \@xsect{#5}}
+\def\@ssect#1#2#3#4#5{\@tempskipa #3\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #4
+ \@hangfrom{\hskip #1}{\interlinepenalty \@M \sectype\ssectchar#5\par}
+ \endgroup
+ \else \def\@svsechd{#4\hskip #1\relax \sectype\ssectchar#5}\fi
+ \@xsect{#3}}
+\def\sectchar{.} \def\ssectchar{} \def\sectype{}
+\def\@hangfrom#1{\noindent#1}
+\def\thesection{\@arabic{\c@section}}
+\def\thesubsection{\thesection.\@arabic{\c@subsection}}
+\def\thesubsubsection{\thesubsection.\@arabic{\c@subsubsection}}
+\def\theparagraph{\thesubsubsection.\@arabic{\c@paragraph}:}
+\def\sectionnumbers{\c@secnumdepth=3}
+\let\agureferences=\references
+\def\references{\noappendix\agureferences}
+\let\aguacknow=\acknowledgments
+\def\acknowledgments{\noappendix\aguacknow}
+\let\acknowledgements=\acknowledgments
+\if@preprint
+\newdimen\@fmwidth \@fmwidth=33pc
+\def\auth@skip{12pt}
+\def\affil@skip{5pt}
+\def\agutitle#1{\@makeslugcmmnt
+\hsize\@fmwidth
+\par\noindent
+\parbox{\@fmwidth}%
+ {\pretolerance=10000
+ \raggedright
+ \Large\bf#1}}
+\def\aguauthor#1{%
+\par\vskip\auth@skip\noindent
+\parbox{\@fmwidth}%
+ {\pretolerance=10000
+ \raggedright
+ \large#1}
+\gdef\auth@skip{12pt}}
+\def\aguaffil#1{\par\vskip\affil@skip\noindent
+\parbox{\@fmwidth}%
+ {\pretolerance=10000
+ \raggedright
+ \small#1}}
+\def\aguabs{\par\vspace{4ex}\noindent
+\minipage{\@fmwidth}\pretolerance=100
+\@rightskip=\z@ plus 2em\rightskip\@rightskip
+\large
+{\bf Abstract.}}
+
+\def\endaguabs{\endminipage\vspace{2ex}}
+\newbox\@abstract
+\setbox\@abstract\vbox{}
+
+\def\abstract{\global\setbox\@abstract\vbox\bgroup
+ \aguabs}
+\def\endabstract{\endaguabs\egroup}
+\def\xmaketitle{
+\par
+ \begingroup
+ \clearpage
+ \twocolumn[\box\@title
+ \box\@abstract
+ \null]
+ \global\@topnum\z@
+ \thispagestyle{plain}
+ \ifx\@titlenote\empty \else
+ \global\@botnum\z@
+ \long\def\@makefntext##1{##1}
+ \footnotetext{{\parindent=1em\indent
+ \let\@elt=\par\@titlenote}}
+ \fi
+ \endgroup
+ \pt@width=\hsize
+ \setcounter{footnote}{0}
+ \global\let\xmaketitle\relax}
+\let\agusection=\section
+
+\def\section{\pagestyle{myheadings}
+\if@twoside \markboth{\@versohead}{\@rectohead} \else
+ \markright{\@versohead: \@rectohead} \fi
+\xmaketitle\agusection}
+\long\def\@makecaption#1#2{%
+ \vskip 10\p@
+ \setbox\@tempboxa\hbox{#1 #2}%
+ \ifdim \wd\@tempboxa >\hsize
+ #1 #2\par
+ \else
+ \hbox to\hsize{\hfil\box\@tempboxa\hfil}%
+ \fi}
+\def\fps@figure{tbp}
+\def\fps@plate{tbp}
+\def\fps@table{tbp}
+\else
+\let\agutitle=\title
+\let\aguaffil=\affil
+\let\aguauthor=\author
+\def\xmaketitle{\par \hsize\wd\@title
+\begingroup
+ \box\@title
+ \ifx\@titlenote\empty \else
+ \global\@botnum\z@
+ \long\def\@makefntext##1{##1}
+ \footnotetext{{\parindent=10pt\indent
+ \parskip=6pt\let\@elt=\par\@titlenote}}
+ \fi
+\endgroup
+ \setcounter{footnote}{0}
+ \global\let\xmaketitle\relax}
+\let\aguabs=\abstract
+\def\abstract{\xmaketitle\aguabs}
+\let\aguendabs=\endabstract
+\def\endabstract{\aguendabs\par}
+\let\agusection=\section
+\def\section{\xmaketitle\par\agusection}
+\fi
+\newbox\@title
+\setbox\@title=\vbox{}
+
+\def\title#1{\setbox\@title=\vbox{
+ \let\@nodocument=\relax
+ \agutitle{#1}}}
+\def\author#1{\setbox\@title=\vbox{\hsize=\wd\@title
+ \let\@nodocument=\relax
+ \box\@title \aguauthor{#1}}}
+\def\affil#1{\setbox\@title=\vbox{\hsize=\wd\@title
+ \let\@nodocument=\relax
+ \box\@title \aguaffil{#1}}}
+\def\altaffiltext#1#2{\let\@elt=\relax
+ \ifx\@titlenote\empty \def
+ \@titlenote{\altaffilmark{#1}#2} \else
+ \xdef\@titlenote{\@titlenote\@elt \altaffilmark{#1}#2}\fi}
+\def\@titlenote{}
+\let\maketitle=\xmaketitle
+\let\date=\slugcomment
+\newif\if@supabs \@supabsfalse
+\def\extraabstract{\global\@supabstrue}
+\if@camera
+\begingroup
+ \catcode `|=0 \catcode `[= 1
+ \catcode`]=2 \catcode `\{=12 \catcode `\}=12
+ \catcode`\^^M=13 \catcode`\\=12 %
+|long|gdef|@preabs#1\begin{abstract}[|endgroup|begin[abstract]]%
+|endgroup
+\long\def\supabs{\newpage \thispagestyle{empty}%
+ \hsize=20pc \reset@font\footnotesize
+ \hbox to \hsize{\hfil Paper number \@paperid}\par\vskip1em}
+\def\endsupabs{\par\endinput}
+\def\dosupabs{{\def\documentstyle{\begingroup\set@literal\@preabs}
+\let\abstract=\supabs\let\endabstract=\endsupabs
+\input{\jobname}}}
+\def\dosupabse{{\def\documentclass{\begingroup\set@literal\@preabs}
+\let\abstract=\supabs\let\endabstract=\endsupabs
+\input{\jobname}}}
+\if@twoOnine
+ \let\keependdoc=\enddocument
+ \def\enddocument{\if@supabs\dosupabs\fi\keependdoc}
+\else
+ \AtEndOfPackage{\AtEndDocument{\if@supabs\dosupabse\fi}}
+\fi
+\fi
+\def\iftwocol#1#2{\if@draft#2\else#1\fi}
+\def\afour{\textheight=24cm
+ \if@draft \textwidth=15cm \fi
+ \if@preprint \textwidth=17.3cm \columnsep=0.5cm
+ \oddsidemargin=-0.5cm \evensidemargin=-0.9cm \hoffset=0pt\fi}
+
+
+%%======================SUBLABEL.DTX========================================
+\def\filename{sublabel}
+\def\fileversion{4.3}
+\def\filedate{1994/05/16}
+%% Copyright (C) 1994 Patrick W. Daly
+\@ifundefined{iffigcaps}{}{\@@warning
+ {^^J ********************************^^J
+ `\filename' read in after `figcaps'^^J
+ There could be problems with sublabelled^^J
+ figure and table numbers.^^J
+ ********************************}}
+\def\substyle#1{\alph{#1}}
+\def\sublabon#1{\@bsphack
+\@ifundefined{c@#1}{\@latexerr{\string\sublabon\space called for a
+ non-existent counter}{\@eha}}{%
+\@ifundefined{c@sb@#1}{\expandafter\newcount\csname c@sb@#1\endcsname
+ \setcounter{sb@#1}{-1}}{}%
+\ifnum\@nameuse{c@sb@#1}<0\else\sublaboff{#1}\fi
+\stepcounter{#1}%
+\setcounter{sb@#1}{0}%
+\def\@tempa{eqnarray}\ifx \@tempa\@currenvir
+ \addtocounter{equation}{-1}\setcounter{sb@equation}{1}\fi
+\global\expandafter\let\csname @ldthe#1\expandafter\endcsname
+ \csname the#1\endcsname
+\expandafter\gdef\csname the#1\endcsname{%
+ \@nameuse{@ldthe#1}{\substyle{sb@#1}}}
+}\@esphack}
+\def\sublaboff#1{\@bsphack
+\@ifundefined{c@#1}{\@latexerr{\string\sublaboff\space called for a
+ non-existent counter}{\@eha}}{%
+\@ifundefined{c@sb@#1}{\@warning{\string\sublaboff{#1} called without
+ any previous^^J \string\sublabon{#1} command}}{%
+\ifnum\@nameuse{c@sb@#1}<0\@warning{\string\sublaboff{#1} called without
+ a previous^^J \string\sublabon{#1} command being active}\else
+\ifnum\@nameuse{c@sb@#1}=0\addtocounter{#1}{-1}\fi
+\setcounter{sb@#1}{-1}%
+\global\expandafter\let\csname the#1\expandafter\endcsname
+ \csname @ldthe#1\endcsname
+\def\@tempa{eqnarray}\ifx \@tempa\@currenvir
+ \stepcounter{equation}\fi
+\fi}}\@esphack}
+\if@twoOnine
+\@ifundefined{selectfont}{}{%
+\def\@setref#1#2#3{%
+ \ifx#1\relax {\reset@font\bf ??}%
+ \@warning{Reference `#3' on page \thepage \space undefined}%
+ \else
+ \expandafter#2#1\null
+ \fi}
+\def\ref#1{\expandafter\@setref\csname r@#1\endcsname\@firstoftwo{#1}}
+\def\pageref#1{\expandafter\@setref\csname r@#1\endcsname
+ \@secondoftwo{#1}}
+\def\@firstoftwo#1#2{#1}
+\def\@secondoftwo#1#2{#2}
+}
+\fi
+\@ifundefined{reset@font}{\def\reset@font{\relax}}{}
+\let\@ldstepcounter=\stepcounter
+\def\stepcounter#1{%
+\@ifundefined{c@sb@#1}{\@ldstepcounter{#1}}{\ifnum
+ \@nameuse{c@sb@#1}<0\relax
+ \@ldstepcounter{#1}\else \@ldstepcounter{sb@#1}\fi}%
+}
+\let\@ldaddtoctr=\addtocounter
+\def\addtocounter#1#2{%
+\@ifundefined{c@sb@#1}{\@ldaddtoctr{#1}{#2}}{\ifnum
+ \@nameuse{c@sb@#1}<0\relax
+ \@ldaddtoctr{#1}{#2}\else \@ldaddtoctr{sb@#1}{#2}\fi}%
+}
+\let\@ldendeqnarray=\endeqnarray
+\def\endeqnarray{\@ldendeqnarray
+ \@ifundefined{c@sb@equation}{}{\ifnum\c@sb@equation<0\else
+ \@ldaddtoctr{equation}{1}\@ldaddtoctr{sb@equation}{-1}\fi}}
+%%======================APPENDIX.DTX========================================
+\def\filename{appendix}
+\def\fileversion{2.0}
+\def\filedate{1994/05/17}
+%% Copyright (C) 1994 Patrick W. Daly
+\@ifundefined{iffigcaps}{}{\@@warning
+ {^^J ********************************^^J
+ `\filename' read in after `figcaps'^^J
+ There could be problems with figure,^^J
+ table numbering in appendices^^J
+ ********************************}}
+\@ifundefined{appendixname}{\def\appendixname{Appendix}}{}
+\let\orisection=\section
+\let\theolds=\thesection
+\let\theoldss=\thesubsection
+\let\orisubsection=\subsection
+\def\appendix{\par
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \def\thesection{\Alph{section}}
+ \def\thesubsection{\thesection\arabic{subsection}}
+ \setcounter{secnumdepth}{3}
+ \@addtoreset{equation}{section}
+ \setcounter{equation}{0}
+ \def\theequation{\thesection\arabic{equation}}
+ \@addtoreset{figure}{section}
+ \setcounter{figure}{0}
+ \def\thefigure{\thesection\arabic{figure}}
+ \@addtoreset{table}{section}
+ \def\thetable{\thesection\arabic{table}}
+ \setcounter{table}{0}
+ \@ifundefined{c@plate}{\newcounter{plate}}{}
+ \@addtoreset{plate}{section}
+ \def\theplate{\thesection\arabic{plate}}
+ \setcounter{plate}{0}
+ \def\@Alph##1{\ifcase##1A\or A\or B\or C\or D\else\@Ialph{##1}\fi}
+ \def\section{\@sectiontrue\orisection}
+ \def\sectype{\if@section\appendixname~\fi}
+ \def\sectchar{\if@section:\else.\fi}
+ \def\ssectchar{\if@section\unskip:~\else\fi}
+ \def\subsection{\@sectionfalse\orisubsection}
+}
+\newif\if@section \@sectionfalse
+\def\noappendix{\setcounter{secnumdepth}{0}
+ \global\let\section=\orisection
+ \global\let\thesection=\theolds
+ \global\let\thesubsection=\theoldss
+ \gdef\sectchar{.} \gdef\ssectchar{}
+ \gdef\sectype{}
+ \global\let\subsection=\orisubsection
+}
+\@ifundefined{reset@font}{\let\reset@font=\relax}{}
+\@ifundefined{bfseries}{\let\bfseries=\bf}{}
+%%======================FIGCAPS.DTX========================================
+\def\filename{figcaps}
+\def\fileversion{4.3a}
+\def\filedate{1994/06/06}
+%% Copyright (C) 1994 Patrick W. Daly
+\newif\if@twoOnine \let\if@twoOnine=\if@compatibility
+\@ifundefined{documentclass}{
+ \@twoOninetrue
+}{
+}
+\@ifundefined{chapter}{}{\@latexerr{`\filename' may only be used with
+ article-like classes}{There is no help. You just cannot use `\filename'}}
+\newif\iffigcaps \figcapstrue
+\newif\iffigmark \figmarkfalse
+\newif\if@figpage \@figpagefalse
+\@ifundefined{figurecapname}{\def\figurecapname{Figure Captions}}{}
+\@ifundefined{tablepagename}{\def\tablepagename{Tables}}{}
+\@ifundefined{figurepagename}{\def\figurepagename{Figures}}{}
+\begingroup
+ \catcode `|=0 \catcode `[= 1
+ \catcode`]=2 \catcode `\{=12 \catcode `\}=12
+ \catcode`\^^M=13 \catcode`\\=12 %
+|long|gdef|@vfig#1\end{figure}[|def|@term[\end{figure}]%
+ |expandafter|writelof#1^^M\end{figure}^^M|end[figure]]%
+|long|gdef|@vsfig#1\end{figure*}[|def|@term[\end{figure*}]%
+ |expandafter|writelof#1^^M\end{figure*}^^M|end[figure*]]%
+|long|gdef|@vtab#1\end{table}[|def|@term[\end{table}]%
+ |expandafter|writelot#1^^M\end{table}^^M|end[table]]%
+|long|gdef|@vstab#1\end{table*}[|def|@term[\end{table*}]%
+ |expandafter|writelot#1^^M\end{table*}^^M|end[table*]]%
+|long|gdef|@vpla#1\end{plate}[|def|@term[\end{plate}]%
+ |expandafter|writelof#1^^M\end{plate}^^M|end[plate]]%
+|long|gdef|@vspla#1\end{plate*}[|def|@term[\end{plate*}]%
+ |expandafter|writelof#1^^M\end{plate*}^^M|end[plate*]]%
+|long|gdef|@vptab#1\end{planotable}[|def|@term[\end{planotable}]%
+ |expandafter|writelot#1^^M\end{planotable}^^M|end[planotable]]%
+ |endgroup
+\def\lof{lof} \def\lot{lot}
+
+{\catcode`\^^M=13%
+ \long\gdef\writelof#1^^M{\def\@tempb{#1}%
+ \ifx\@tempb\@term\let\@tempa\relax\else
+ \if@filesw\@writefile{pof}{#1}\fi\let\@tempa\writelof\fi \@tempa}
+ \long\gdef\writelot#1^^M{\def\@tempb{#1}%
+ \ifx\@tempb\@term\let\@tempa\relax\else
+ \if@filesw\@writefile{pot}{#1}\fi\let\@tempa\writelot\fi \@tempa}
+}
+\def\figcapson{\figcapstrue}
+\def\figcapsoff{\figcapsfalse}
+\def\figmarkon{\figmarktrue}
+\def\figmarkoff{\figmarkoff}
+\def\figure{\iffigcaps \let\@tempb=\@zfigure \else \let\@tempb=\@float\fi
+ \@tempb{figure}}
+\def\@zfigure#1{\begingroup\set@literal\@ifnextchar[{\@figure}{\@figure[]}}
+\def\@figure[#1]{\@ifundefined{tf@pof}{\newwrite\tf@pof
+ \if@filesw\immediate\openout\tf@pof\jobname.\lof\fi}{}%
+ \refstepcounter{figure}\iffigmark\marginpar{\fbox{\fnum@figure}}\fi
+ \def\@captype{figure}\if@filesw\@writefile{pof}{\string\begin{figure}}\fi
+ \@vfig}
+
+\def\endfigure{\iffigcaps
+ \endgroup\if@filesw\@writefile{pof}{\string\end{figure}}\fi\else
+ \end@float\fi}
+
+\@namedef{figure*}{\iffigcaps \let\@tempb=\@zsfigure \else
+ \let\@tempb=\@dblfloat\fi \@tempb{figure}}
+\def\@zsfigure#1{\begingroup\set@literal\@ifnextchar[{\@sfigure}{\@sfigure[]}}
+\def\@sfigure[#1]{\@ifundefined{tf@pof}{\newwrite\tf@pof
+ \if@filesw\immediate\openout\tf@pof\jobname.\lof\fi}{}%
+ \refstepcounter{figure}\iffigmark\marginpar{\fbox{\fnum@figure}}\fi
+ \def\@captype{figure}\if@filesw\@writefile{pof}{\string\begin{figure}}\fi
+ \@vsfig}
+
+\@namedef{endfigure*}{\iffigcaps\endfigure\else\end@dblfloat\fi}
+\@ifundefined{c@plate}{\newcounter{plate}}{}
+
+\def\plate{\iffigcaps \let\@tempb=\@zplate \else \let\@tempb=\@float\fi
+ \@tempb{plate}}
+\def\@zplate#1{\begingroup\set@literal\@ifnextchar[{\@plate}{\@plate[]}}
+\def\@plate[#1]{\@ifundefined{tf@pof}{\newwrite\tf@pof
+ \if@filesw\immediate\openout\tf@pof\jobname.\lof\fi}{}%
+ \refstepcounter{plate}\iffigmark\marginpar{\fbox{\fnum@plate}}\fi
+ \def\@captype{plate}\if@filesw\@writefile{pof}{\string\begin{plate}}\fi
+ \@vpla}
+
+\def\endplate{\iffigcaps
+ \endgroup\if@filesw\@writefile{pof}{\string\end{plate}}\fi\else
+ \end@float\fi}
+
+\@namedef{plate*}{\iffigcaps \let\@tempb=\@zsplate \else
+ \let\@tempb=\@dblfloat\fi \@tempb{plate}}
+\def\@zsplate#1{\begingroup\set@literal\@ifnextchar[{\@splate}{\@splate[]}}
+\def\@splate[#1]{\@ifundefined{tf@pof}{\newwrite\tf@pof
+ \if@filesw\immediate\openout\tf@pof\jobname.\lof\fi}{}%
+ \refstepcounter{plate}\iffigmark\marginpar{\fbox{\fnum@plate}}\fi
+ \def\@captype{plate}\if@filesw\@writefile{pof}{\string\begin{plate}}\fi
+ \@vspla}
+
+\@namedef{endplate*}{\iffigcaps\endplate\else\end@dblfloat\fi}
+\def\table{\iffigcaps \let\@tempb=\@ztable \else \let\@tempb=\@float\fi
+ \@tempb{table}}
+\def\@ztable#1{\begingroup\set@literal\@ifnextchar[{\@table}{\@table[]}}
+\def\@table[#1]{\@ifundefined{tf@pot}{\newwrite\tf@pot
+ \if@filesw\immediate\openout\tf@pot\jobname.\lot\fi}{}%
+ \refstepcounter{table}\iffigmark\marginpar{\fbox{\fnum@table}}\fi
+ \def\@captype{table}\if@filesw\@writefile{pot}{\string\begin{table}}\fi
+ \@vtab}
+
+\def\endtable{\iffigcaps
+ \endgroup\if@filesw\@writefile{pot}{\string\end{table}}\fi\else
+ \end@float\fi}
+
+\@namedef{table*}{\iffigcaps \let\@tempb=\@zstable \else
+ \let\@tempb=\@dblfloat\fi \@tempb{table}}
+\def\@zstable#1{\begingroup\set@literal\@ifnextchar[{\@stable}{\@stable[]}}
+\def\@stable[#1]{\@ifundefined{tf@pot}{\newwrite\tf@pot
+ \if@filesw\immediate\openout\tf@pot\jobname.\lot\fi}{}%
+ \refstepcounter{table}\iffigmark\marginpar{\fbox{\fnum@table}}\fi
+ \def\@captype{table}\if@filesw\@writefile{pot}
+ {\string\begin{table}}%
+ \fi\@vstab}
+
+\@namedef{endtable*}{\iffigcaps\endtable\else\end@dblfloat\fi}
+\let\aguplano=\planotable
+\let\endaguplano=\endplanotable
+
+\def\planotable{\iffigcaps \let\@tempb=\@ptable \else
+ \let\@tempb=\aguplano\fi \@tempb}
+\def\@ptable{\begingroup\set@literal
+ \@ifundefined{tf@pot}{\newwrite\tf@pot
+ \if@filesw\immediate\openout\tf@pot\jobname.\lot\fi}{}%
+ \refstepcounter{table}\iffigmark\marginpar{\fbox{\fnum@table}}\fi
+ \def\@captype{table}\if@filesw\@writefile{pot}
+ {\string\begin{planotable}}\fi \@vptab}
+
+\def\endplanotable{\iffigcaps
+ \endgroup\if@filesw\@writefile{pot}{\string\end{planotable}}\fi\else
+ \endaguplano\fi}
+\def\tableofcontents{\@@warning{Ignored:
+ \string\tableofcontents\space command}}
+\def\listoffigures{\@@warning{Ignored:
+ \string\listoffigures\space command}}
+\def\listoftables{\@@warning{Ignored:
+ \string\listoftables\space command}}
+\def\listofplates{\@@warning{Ignored:
+ \string\listofplates\space command}}
+\def\addtocontents#1#2{\relax}
+\def\addcontentsline#1#2#3{\relax}
+{\catcode`\^^M=\active \gdef\cr@relax{\catcode`\^^M=\active \let^^M=\relax}}
+\def\set@literal{\cr@relax \let\do\@makeother\dospecials}
+\def\@figurecaps{\@ifundefined{tf@pof}{}{\if@filesw
+ \immediate\closeout\tf@pof\fi
+ \@ifundefined{appendixname}{}{\def\appendixname{}}
+ \noappendix \parindent\z@
+ \reset@figtab\clearpage\section*{\figurecapname}\vspace{1cm}%
+ \@mkboth{\uppercase{\figurecapname}}{\uppercase{\figurecapname}}%
+ \addcontentsline{toc}{section}{\figurecapname}%
+ \def\figure{\def\addcontentsline####1####2####3{}%
+ \def\@captype{figure}%
+ \vbox\bgroup
+ }\def\endfigure{\egroup\bigskip}%
+ \def\plate{\def\addcontentsline####1####2####3{}%
+ \def\@captype{plate}%
+ \vbox\bgroup
+ }\let\endplate=\endfigure
+ {\let\@makecaption=\@makefcaption
+ \def\figbox##1##2##3{\relax}
+ \@input{\jobname.\lof}}%
+ \clearpage}}%
+\def\@tablepage{\@ifundefined{tf@pot}{}{\if@filesw
+ \immediate\closeout\tf@pot\fi
+ \@ifundefined{appendixname}{}{\def\appendixname{}}
+ \noappendix \parindent\z@
+ \reset@figtab\clearpage\section*{\tablepagename}
+ \@mkboth{\uppercase{\tablepagename}}{\uppercase{\tablepagename}}%
+ \def\table{\def\@captype{table}\vbox\bgroup
+ }\def\endtable{\spew@tblnotes\egroup\bigskip}%
+ \let\planotable=\aguplano \let\endplanotable=\endaguplano
+ \def\@float##1{\def\@captype{table}\vbox\bgroup}
+ \let\@dblfloat=\@float \let\clearpage=\newpage
+ \@input{\jobname.\lot}
+ \clearpage}}
+\def\printfigures{\@figpagetrue}
+\def\@figurepage{\if@figpage\@ifundefined{tf@pof}{}{%
+ \@ifundefined{appendixname}{}{\def\appendixname{}}
+ \noappendix \parindent\z@
+ \reset@figtab\clearpage\section*{\figurepagename}%
+ \@mkboth{\uppercase{\figurepagename}}{\uppercase{\figurepagename}}%
+ \begingroup
+ \def\figurewidth##1{\pt@width##1\hsize##1}
+ \def\figure{\def\@captype{figure}\vbox\bgroup}\def\endfigure{\egroup
+ \vspace{20pt}}%
+ \let\platewidth=\figurewidth
+ \def\plate{\def\@captype{plate}\vbox\bgroup}\let\endplate=\endfigure
+ \def\label##1{}%
+ \@input{\jobname.\lof}\newpage\endgroup}\fi}
+\def\reset@figtab{%
+ \setcounter{figure}{0}\setcounter{table}{0}
+ \setcounter{plate}{0}
+}
+\if@twoOnine
+\let\@nddoc=\enddocument
+\def\enddocument{\iffigcaps\@figurecaps\@tablepage\@figurepage\fi\@nddoc}
+\else
+\AtEndDocument{\iffigcaps\@figurecaps\@tablepage\@figurepage\fi}
+\fi
+\let\@appendix=\appendix
+
+\def\appendix{%
+ \@ifundefined{tf@pof}{}{\if@filesw\@writefile{pof}{\string\doappendix}\fi}%
+ \@ifundefined{tf@pot}{}{\if@filesw\@writefile{pot}{\string\doappendix}\fi}%
+ \let\@section=\section
+ \doappendix
+ \let\@@section=\section
+ \def\section{%
+ \@ifundefined{tf@pof}{}{\if@filesw\@writefile{pof}{\string
+ \stepcounter{section}}\fi}%
+ \@ifundefined{tf@pot}{}{\if@filesw\@writefile{pot}{\string
+ \stepcounter{section}}\fi}%
+ \@@section}
+ \let\reset@figtab=\@unappendix}
+\def\doappendix{%
+ \let\@thefigure=\thefigure
+ \let\@thetable=\thetable
+ \let\@theplate=\theplate
+ \let\@cl@section=\cl@section
+ \@appendix
+}
+\def\@unappendix{%
+ \setcounter{figure}{0}\setcounter{table}{0}
+ \let\thefigure=\@thefigure
+ \let\thetable=\@thetable
+ \setcounter{plate}{0}%
+ \let\theplate=\@theplate
+ \let\cl@section=\@cl@section
+ \let\section=\@section
+}
+\let\orisubon=\sublabon
+\let\orisuboff=\sublaboff
+\def\sublabon#1{\orisubon{#1}\if@filesw
+ \iffigcaps\def\@tempb{#1}
+ \def\@tempa{figure}\ifx\@tempa\@tempb
+ \@ifundefined{tf@pof}{\newwrite\tf@pof
+ \immediate\openout\tf@pof\jobname.\lof}{}%
+ \@writefile{pof}{\string\orisubon{#1}}\fi
+ \def\@tempa{plate}\ifx\@tempa\@tempb
+ \@ifundefined{tf@pof}{\newwrite\tf@pof
+ \immediate\openout\tf@pof\jobname.\lof}{}%
+ \@writefile{pof}{\string\orisubon{#1}}\fi
+ \def\@tempa{table}\ifx\@tempa\@tempb
+ \@ifundefined{tf@pot}{\newwrite\tf@pot
+ \immediate\openout\tf@pot\jobname.\lot}{}%
+ \@writefile{pot}{\string\orisubon{#1}}\fi
+\fi\fi}
+\def\sublaboff#1{\orisuboff{#1}\if@filesw
+ \iffigcaps\def\@tempb{#1}
+ \def\@tempa{figure}\ifx\@tempa\@tempb
+ \@ifundefined{tf@pof}{\newwrite\tf@pof
+ \immediate\openout\tf@pof\jobname.\lof}{}%
+ \@writefile{pof}{\string\orisuboff{#1}}\fi
+ \def\@tempa{plate}\ifx\@tempa\@tempb
+ \@ifundefined{tf@pof}{\newwrite\tf@pof
+ \immediate\openout\tf@pof\jobname.\lof}{}%
+ \@writefile{pof}{\string\orisuboff{#1}}\fi
+ \def\@tempa{table}\ifx\@tempa\@tempb
+ \@ifundefined{tf@pot}{\newwrite\tf@pot
+ \immediate\openout\tf@pot\jobname.\lot}{}%
+ \@writefile{pot}{\string\orisuboff{#1}}\fi
+\fi\fi}
+\def\figbox#1#2#3{\hbox to \hsize{\hfil
+ \framebox[#1][c]{\@tempdima#2 \divide\@tempdima by2\relax
+ \advance\@tempdima by-\fboxsep \advance\@tempdima by-\fboxrule
+ \vrule\@height\@tempdima\@depth\@tempdima\@width\z@
+ \vbox to \z@{\vss\hbox{#3}\vss}}\hfil}}
+\figmarktrue
+\if@preprint \figcapsfalse
+ \def\figurewidth#1{\pt@width=\hsize}
+ \def\platewidth#1{\pt@width=\hsize}
+\fi
+\if@draft
+ \def\figurewidth#1{\pt@width=\hsize}
+ \def\platewidth#1{\pt@width=\hsize}
+\fi
+\let\ori@makecap=\@makecaption
+\def\@makefcaption#1#2{{\if@dblcap\if@camera\pt@width=\textwidth
+ \ori@makecap{#1}{#2}
+ \pt@width=\wpt@width
+ \hsize=\pt@width
+ \vskip10pt \def\label##1{}\fi\fi
+ \ori@makecap{#1}{#2}}
+}
+\newdimen\wpt@width
+\newif\if@dblcap \@dblcapfalse
+\def\doublecaption#1{\wpt@width=#1\relax\@dblcaptrue}
+%%======================NATBIB.DTX========================================
+\def\filename{natbib}
+\def\fileversion{5.0}
+\def\filedate{1994/05/18}
+%% Copyright (C) 1994 Patrick W. Daly
+\newif\if@twoOnine \let\if@twoOnine=\if@compatibility
+\@ifundefined{documentclass}{
+ \@twoOninetrue
+}{
+}
+\def\bibstyle@agu{\bibpunct{[}{]}{;}{a}{,}{,}}
+\def\@cite#1#2#3{\if@tempswa\@citebegin\if#2\@empty\else#2 \fi
+ #1\if#3\@empty\else, #3\fi\@citeend\else#1\fi}
+\def\@citex[#1][#2]#3{\if@filesw\immediate\write
+ \@auxout{\string\citation{#3}}\fi
+ \let\@citea\@empty
+ \@cite{\let\@citenm\@empty
+ \@for\@citeb:=#3\do
+ {\def\@tempa##1##2\@nil{\edef\@citeb{\if##1\space##2\else##1##2\fi}}%
+ \expandafter\@tempa\@citeb\@nil
+ \@ifundefined{b@\@citeb}{\@citea{\reset@font\bfseries ?}\@warning
+ {Citation `\@citeb' on page \thepage \space undefined}}%
+ {\let\@citemm=\@citenm
+ \@cite@parse{\@citeb}%
+ \if@tempswa
+ \ifx\@citemm\@citenm\@yrsep\else\@citea{\@citenm}\@auyrsep\fi
+ \ \@citedt \def\@citea{\@citesep\ }%
+ \else
+ \ifx\@citemm\@citenm, \@citedt\else\@citea{\@citenm}
+ \@citebegin\@citedt\fi
+ \def\@citea{\@citeend\@citesep\ }%
+ \fi}}\if@tempswa\else\@citeend\fi}{#1}{#2}}
+\def\@biblabel#1{\hfill}
+\def\bibpunct#1#2#3#4#5#6{\gdef\@citebegin{#1}\gdef\@citeend{#2}\gdef
+ \@citesep{#3}\ifx #4n\global\let\@bibsetup=\@bibsetnum
+ \global\let\@citex=\@citexnum
+ \global\let\@biblabel=\@biblabelnum
+ \global\let\@cite=\@citenum\fi
+ \gdef\@auyrsep{#5}\gdef\@yrsep{#6}}
+\bibstyle@agu
+\def\cite{\@ifnextchar [{\@tempswatrue\@citex@}{\@tempswafalse
+ \@citex@[]}}
+\def\@citex@[#1]{\@ifnextchar [{\@citex[#1]}{\@citex[][#1]}}
+\def\citeauthor#1{\ifx\@citex\@citexnum{\reset@font\bfseries(author?)}\@warning
+ {Cannot use \string\citeauthor\space with numerical citations}\else
+ \@ifundefined{b@#1}{{\reset@font\bfseries ?}\@warning
+ {Citation `#1' on page \thepage \space undefined}}%
+ {\@cite@parse{#1}\@citenm}\fi}
+\def\citeyear#1{\ifx\@citex\@citexnum{\reset@font\bfseries(year?)}\@warning
+ {Cannot use \string\citeyear\space with numerical citations}\else
+ \@ifundefined{b@#1}{{\reset@font\bfseries ?}\@warning
+ {Citation `#1' on page \thepage \space undefined}}%
+ {\@cite@parse{#1}\@citedt}\fi}
+\def\@cite@parse#1{{%
+ \@ifundefined{documentclass}
+ {\let\prm=\relax\let\psf=\relax\let\ptt=\relax\let\pbf=\relax
+ \let\psl=\relax\let\psc=\relax\let\pit=\relax\let\pem=\relax
+ \let\prmfamily=\relax\let\psffamily=\relax\let\pttfamily=\relax
+ \let\pbfseries=\relax\let\pslshape=\relax\let\pscshape=\relax
+ \let\pitshape=\relax\let\pmdseries=\relax\let\pupshape=\relax
+ \let\pc=\relax \let\pd=\relax \let\pb=\relax}
+% The manual patch to allow this to run under true LaTeX2e
+ {\let\protect\noexpand}%
+ \xdef\@tempa{\csname b@#1\endcsname\relax}}%
+ \expandafter\@citez\@tempa()\@nil}
+\def\@citez#1(#2)#3\@nil{\gdef\@citenm{#1}\gdef\@citedt{#2}%
+}
+\let\aguthebib=\thebibliography
+\def\thebibliography#1{\noappendix\aguthebib{#1}}
+\@ifundefined{reset@font}{\let\reset@font=\relax}{}
+\@ifundefined{bfseries}{\let\bfseries=\bf}{}
+%%======================BALANCE.DTX========================================
+\def\filename{balance}
+\def\fileversion{4.1}
+\def\filedate{1994/05/16}
+%% Copyright (C) 1994 Patrick W. Daly
+\def\@BAlancecol{\if@twocolumn
+ \setbox0=\vbox{\unvbox\@outputbox} \@tempdima=\ht0
+ \advance\@tempdima by \topskip \advance\@tempdima
+ by -\baselineskip \divide\@tempdima by 2
+ \splittopskip=\topskip
+ {\vbadness=\@M \loop \global\setbox3=\copy0
+ \global\setbox1=\vsplit3 to \@tempdima
+ \ifdim\ht3>\@tempdima \global\advance\@tempdima by 1pt \repeat}
+ \setbox\@leftcolumn=\vbox to \@tempdima{\unvbox1\vfil}
+ \setbox\@outputbox=\vbox to \@tempdima
+ {\dimen2=\dp3\unvbox3\kern-\dimen2
+ \vfil}
+ \fi}
+\newif\if@BAlanceone
+\global\@BAlanceonefalse
+\newdimen\oldvsize
+\def\@BAdblcol{\if@firstcolumn
+ \unvbox\@outputbox \penalty\outputpenalty
+ \global\oldvsize=\@colht \global\multiply \@colht by 2
+ \global\@BAlanceonetrue
+ \global\@firstcolumnfalse
+ \else \global\@firstcolumntrue
+ \if@BAlanceone
+ \global\@BAlanceonefalse\@BAlancecol
+ \global\@colht=\oldvsize \else
+ \@@warning{You have called \string\balance\space
+ in second column^^J
+ Columns may not be balanced}\fi
+ \setbox\@outputbox\vbox to \@colht{\hbox to\textwidth
+ {\hbox to\columnwidth {\box\@leftcolumn \hss}\hfil
+ \vrule width\columnseprule\hfil \hbox to\columnwidth
+ {\box\@outputbox \hss}}\vfil}\@combinedblfloats
+ \@outputpage \begingroup \@dblfloatplacement
+ \@startdblcolumn \@whilesw\if@fcolmade \fi
+ {\@outputpage\@startdblcolumn}\endgroup
+ \fi}
+\let\@@utputdblcol=\@outputdblcol
+\def\balance{\global\let\@outputdblcol=\@BAdblcol}
+\def\nobalance{\global\let\@outputdblcol=\@@utputdblcol}
+%% <<<<< End of decommented file <<<<<<
+%%
+%% End of file aguplus.sty.
diff --git a/obsolete/macros/latex209/contrib/aguplus/aguplus.tex b/obsolete/macros/latex209/contrib/aguplus/aguplus.tex
new file mode 100644
index 0000000000..8cf3f1278d
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aguplus/aguplus.tex
@@ -0,0 +1,953 @@
+%%
+%% This is file `aguplus.tex', generated
+%% on <1994/5/27> with the docstrip utility (2.2e).
+%%
+%% The original source files were:
+%%
+%% aguplus.dtx (with options: `manual')
+%%
+%% ---------------------------------
+%% AGUPLUS.TEX
+%% ---------------------------------
+%% This is the user's manual for
+%% AGU++
+%% an extension to the AGU
+%% LaTeX package AGUTeX
+%%
+%%============================AGUPLUS.DTX===========================
+\ifx\documentclass\undefined
+\documentstyle[twoside,agupp,aguplus]{article}
+\else
+\documentclass[twoside]{article}
+\usepackage{agupp,aguplus}
+\fi
+\def\filename{aguplus}
+\def\fileversion{1.0}
+\def\filedate{1994/05/26}
+%% Copyright (C) 1994 Patrick W. Daly
+\expandafter\ifx\csname if@compatibility\endcsname\iffalse\else
+\def\LaTeXe{\protect\pLaTeXe}
+\def\pLaTeXe{\mbox{%
+ \LaTeX\kern.15em$2_{\textstyle\varepsilon}$}}
+\fi
+\expandafter\ifx\csname if@compatibility\endcsname\relax
+\makeatletter
+\def\p@LaTeX{\@tempcnta=\the\fam \leavevmode L\raise.42ex
+ \hbox{$\fam\@tempcnta\scriptstyle\kern-.3em A$}\kern-.15em%
+ T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}
+\makeatother
+ \let\bfseries=\bf \let\mdseries=\rm
+ \let\upshape=\rm \let\itshape=\it
+ \let\slshape=\sl \let\scshape=\sc
+ \let\sffamily=\sf \let\rmfamily=\rm
+ \let\ttfamily=\tt \let\normalfont=\rm
+\fi
+\expandafter\ifx\csname emph\endcsname\relax
+ \newcommand{\emph}[1]{{\em #1\/}}
+ \newcommand{\textbf}[1]{{\bf #1}}
+ \newcommand{\textit}[1]{{\it #1}\/}
+ \newcommand{\texttt}[1]{{\tt #1}}
+ \newcommand{\textsf}[1]{{\sf #1}}
+ \newcommand{\textrm}[1]{{\rm #1}}
+ \newcommand{\textsc}[1]{{\sc #1}}
+ \newcommand{\textsl}[1]{{\sl #1\/}}
+\fi
+\newcommand{\btx}{\textsc{Bib}\TeX}
+\newcommand{\theoption}{\texttt{\filename}}
+\newcommand{\app}{{\small\optionlogo}}
+\newcommand{\bsl}{\char`\\}
+\lefthead{P. W. Daly}
+\righthead{\protect\optionlogo: an Extension to AGU\TeX}
+\cpright{PD}{1993}
+\afour
+
+\sloppy
+\begin{document}
+\title{The \LaTeX{}
+ Extension Package \optionlogo\\
+ for Use with AGU\TeX}
+
+\author{Patrick W. Daly}
+\affil{Max-Planck-Institut f\"ur Aeronomie, Lindau, Germany}
+\authoraddr{P. W. Daly, Max-Planck-Institut f\"ur Aeronomie, D--37189
+ Katlenburg-Lindau, Germany}
+
+\begin{abstract}
+This paper describes how to use the AGU package (AGU\TeX) for producing
+manuscripts, preprints, and camera-ready copy, together with an unofficial
+extension package called \app{}. This extension adds extra features such as
+author-year citations with \btx{} and true figures in the preprint version.
+Other extra features include corrected coding to avoid having to give certain
+numbers explicitly, sublabelling of equations, figures, etc., and balancing
+two columns of text on the last page. These features were all part of my older
+unofficial AGU package and are thus well-known among its users.
+\end{abstract}
+
+\section{Introduction}
+The American Geophysical Union (AGU) has finally come out with its own
+official \LaTeX\ package for producing manuscripts and camera-ready copy
+for its journals. At the same time the format of the journals has been
+dramatically altered. Thus my unofficial \LaTeX\ package for AGU
+(\texttt{art-jgr} and \texttt{art-grl}) becomes not only superfluous but
+obsolete.
+
+However, in looking over the instructions and coding of the official package,
+I realize that not only are some imperfections present, but many useful
+features of my styles are missing. The most noticeable of these is the means
+of using author-year citations with \btx{} in an automated manner.
+
+The coding imperfections are related to the way in which figure captions and
+tables are treated: they must be placed at the end of the document, and if an
+appendix is present, then the automatic numbering system will consider them as
+appendix figures and tables (numbered A1, A2, \dots). To avoid this, explicit
+numbers must be given, something that violates the essential principles of a
+formatting program like \LaTeX. A second implication of this treatment is that
+preprints will be missing the figures and tables in the text. In my older
+system, neither of these problems occurred.
+
+{\em By popular demand}, I have undertaken to write an extension to the
+official AGU package, called \app (for AGU doubly-ionized or super-charged, as
+you please). It includes my extra features without changing any of the formats
+of the original package. The user should prepare his documents in the manner
+described by the AGU, except that figures, tables, and plates are to be
+included {\em in the text\/} as described below. A number of extra commands
+are available to control and/or enable the extra features.
+
+This manual explains the official package with my extensions. This is to
+enable the user to obtain all the necessary information in one article rather
+than to have to search among several. It is not meant to serve as instructions
+for the standard AGU package alone, although differences will be indicated;
+neither is it intended to be a manual for \LaTeX, since it assumes that the
+user already understands the workings of that text formatting scheme. The
+classic textbook on \LaTeX{} is \cite{la}; a more recent and more extensive
+work is by \cite{koda}.
+
+\section{The Official Package}
+The official AGU package is called AGU\TeX. It consists of an instruction
+manual (\texttt{aguguide.tex}), a sample article (\texttt{sample.tex}),
+and, of course, a number of {\em style options\/} that
+are to be used with the standard main style \texttt{article}. These are
+\begin{description}
+\item[\ttfamily agums] to produce a manuscript for submission;
+
+\item[\ttfamily agupp] to produce a preprint in two-column format (like
+ this paper) for distribution to colleagues;
+
+\item[\ttfamily jgrga] to produce camera-ready copy (or {\em galley proofs\/})
+ for the {\em Journal of Geophysical Research\/} (JGR), the {\em Global
+ Biogeochemical Cycles}, and {\em Pale\-ocean\-o\-graphy};
+
+\item[\ttfamily grlga] to produce camera-ready copy for {\em Geophysical
+ Research Letters\/} (GRL);
+
+\item[\ttfamily tecga] to produce camera-ready copy for {\em Tectonics};
+
+\item[\ttfamily radga] to produce camera-ready copy for {\em Radio Science}.
+\end{description}
+For example, the first line of the document should be something like
+\begin{quote}
+\verb!\documentstyle[jgrga]{article}! \\
+\makebox[0pt][r]{or\hspace{1ex}}\verb!\documentstyle[agums]{article}!
+\end{quote}
+for JGR camera-ready copy or a manuscript, respectively.
+
+Note that the term {\em galley proofs\/} is more accurate than {\em
+camera-ready copy\/}, since the latter implies finished pages in 1-to-1
+relation with the final journal article. In fact, the papers are still cut and
+pasted together, with figures and tables inserted by hand. However, I will
+continue to refer to the galley proofs as camera-ready copy since this is the
+terminology that most of us are used to.
+
+\subsection{The Extension Package}
+The \app{} extension package is now included by adding the option \theoption{}
+{\em after\/} the above options, as e.g.
+\begin{quote}
+\verb!\documentstyle[jgrga,!\theoption\verb!]{article}!
+\end{quote}
+
+It makes sense to include the \texttt{twoside} option with the preprint
+\texttt{agupp} choice; there is no point in selecting \texttt{titlepage}.
+
+The manuscript produced with \texttt{agums} is double spaced. In order to
+generate a single space manuscript, add the option \texttt{tighten}, or include
+the command \verb!\tighten! in the preample. (Reminder: the {\em preamble\/}
+is everything that comes between \verb!\documentstyle! and
+\verb!\begin{document}!.)
+To alternate between single and double spaced text, use the commands
+\verb!\singlespace! and \verb!\doublespace! anywhere in the text.
+
+\subsection{The New \LaTeX{} Standard}
+The package \app{} works under the new standard \LaTeXe; however, there are
+some problems with AGU\TeX, which are fixed up by calling the special
+package \texttt{agu2e} \emph{before} any of the AGU\TeX{} files. For example,
+\begin{quote}
+\verb!\documentclass{article}!\\
+\verb! \usepackage{agu2e,jgrga,aguplus}!
+\end{quote}
+
+\section{Organization of the Paper}
+
+\subsection{Front Material}
+Before the main body of the text, some information about the manuscript and
+paper must be given. This information may actually be printed at the end of
+the article, depending on which option has been selected, but it is always
+entered at the start, before \verb!\begin{document}!.
+\begin{quote}
+\verb!\received{!{\em date\_received\/}\verb!}!\\
+\verb!\revised{!{\em date\_revised\/}\verb!}!\\
+\verb!\accepted{!{\em date\_accepted\/}\verb!}!
+\end{quote}
+These commands enter the relevant dates, which are only meaningful for the
+camera-ready copy. They will be communicated to the author by the editor.
+
+\begin{quote}
+\verb!\journalid{!{\em vol\/}\verb!}{!{\em journal\_date\/}\verb!}!\\
+\verb!\articleid{!{\em start\_page\/}\verb!}{!{\em end\_page\/}\verb!}!\\
+\verb!\paperid{!{\em manuscript\_id\/}\verb!}!
+\end{quote}
+Again, this information will be communicated to the author by the editor. (It
+seems that at the moment the first two do not really do anything at all, but
+may be provided for the future when AGU dispenses with cutting and pasting and
+goes to true camera-ready production.)
+
+\begin{quote}
+\verb!\cpright{!{\em type\/}\verb!}{!{\em year\/}\verb!}!\\
+\verb!\ccc{!{\em code\/}\verb!}!
+\end{quote}
+These enter copyright information, for which {\em code\/} will be communicated
+to the author. The {\em type\/} is one of
+\begin{description}
+\item[\ttfamily AGU] for AGU copyright
+\item[\ttfamily Crown] for (Commonwealth) government copyright
+\item[\ttfamily PD] for public domain (no copyright)
+\end{description}
+
+\begin{quote}
+\verb!\lefthead{!{\em authors\/}\verb!}!\\
+\verb!\righthead{!{\em short\_title\/}\verb!}!
+\end{quote}
+These commands permit text for the running heads to be included. For the
+camera-ready copy, they are (currently) printed out so many times at the end
+(later cutting and pasting!) but with \theoption, they will be added at the
+top of each page of the preprint.
+
+\begin{quote}
+\verb!\slugcomment{!{\em text\/}\verb!}!
+\end{quote}
+With this command, the author may include his own text to be printed at the
+top of the preprint title page, such as ``This article is to appear in
+\dots.''
+
+The information that is printed at the end of the camera-ready copy comes
+after the list of references, and the output is part of that command. If
+there are no references, then the information must be forced out with the
+command
+\begin{quote}
+\verb!\forcesluginfo!
+\end{quote}
+following the main text.
+
+\subsection[]{Declarations for \app}
+A number of additional \app{} declarations are available to enable or modify
+some of the features. These may all be given in the preamble too, although
+some may actually be permitted anywhere in the document. They are all
+described later, but are listed here for completeness.
+\begin{description}
+\item[\ttfamily \bsl sectionnumbers]
+ turns on section numbering; default is no
+ numbering, as preferred by AGU; must be given before the first
+ \verb!\section! command.
+
+\item[\ttfamily \bsl extraabstract]
+ prints a supplemental abstract at the end of the
+ camera-ready version, as required by JGR; this may be invoked anywhere in
+ the paper, for it only enables the output which always comes at the end.
+
+\item[\ttfamily \bsl printfigures]
+ causes the figures and plates to be output at the
+ end of the manuscript and camera-ready copy; this is in addition to the
+ figure captions that are always output and is only meaningful if the
+ \texttt{figure} and \texttt{plate} environments really contain
+ something to print.
+
+\item[\ttfamily \bsl figmarkoff]
+ suppresses the printing of marginal notes next to the location where
+ \texttt{figure}, \texttt{plate}, and \texttt{table} environments occur;
+ by default such mar\-gin\-al notes are enabled.
+
+\item[\ttfamily \bsl figmarkon]
+ re-enables the marginal notes; these two declarations
+ may be given as often and wherever one feels they are needed.
+
+\item[\ttfamily \bsl doublecaption\char`\{35pc\char`\}]
+ enables the printing of all
+ figure and plate captions in two widths: once in the single column width
+ and again in the width specified, here 35~pc; JGR still requires (for now
+ anyway) that all captions be provided in two sizes.
+
+\item[\ttfamily \bsl afour]
+ changes the page layout to be more appropriate to
+ European A4 paper; for camera-ready this means only that the page is
+ slightly longer but the column width remains the same.
+
+\end{description}
+
+\subsection{Title and Authors}
+The preamble is ended with \verb!\begin{document}!, and the title and author
+information are given.
+\begin{quote}\slshape
+Contrary to standard \LaTeX, the title and authors are printed by the commands
+that enter the information. This means these commands {\bfseries may not
+be given in the preamble!} For many authors, this means changing
+long-standing habits.
+\end{quote}
+
+The coding in \app{} corrects this, so that the traditional \LaTeX{}
+behaviour is re-established.
+
+\begin{quote}
+\verb!\title{!{\em full\_title\/}\verb!}!\\
+\verb!\author{!{\em names\/}\verb!}!\\
+\verb!\affil{!{\em organization\/}\verb!}!\\
+\verb!\authoraddr{!{\em full\_address\/}\verb!}!
+\end{quote}
+The order of these commands is important. First comes the \verb!\title!, the
+argument of which may be broken up into lines with \verb!\\! commands (not
+absolutely necessary). Next come sets of \verb!\author! and \verb!\affil!
+commands, one set per author organization.
+ {\slshape(This again is different from standard \LaTeX{} where
+ \verb!\author! is given only once.)}
+Finally, the \verb!\authoraddr! command is given (anywhere) once for each
+author, with the name and full postal address as argument.
+
+An alternative method of presenting the authors is with footnotes for the
+affiliations. This is done with the commands
+\begin{quote}
+\verb!\altaffilmark{!{\em numbers\/}\verb!}!\\
+\verb!\altaffiltext{!{\em number\/}\verb!}{!{\em text\/}\verb!}!
+\end{quote}
+The first command is included in the text of the \verb!\author! command; the
+second is given once per footnote afterwards. For example,
+\begin{quote}
+\begin{verbatim}
+\author{J. P. Smith\altaffilmark{1,2}
+ and C. J. Jones\altaffilmark{2}}
+\altaffiltext{1}{On leave}
+\altaffiltext{2}{Research Institute X}
+\end{verbatim}
+\end{quote}
+The two methods (\verb!\affil! or footnotes) may be combined.
+
+The \verb!\authoraddr! commands should rightly come in the preamble after the
+copyright information. Their arguments are printed out only for the
+camera-ready copy, at the end.
+
+\subsection{The Abstract}
+Following the title comes the abstract. This is given as in standard \LaTeX{}
+within an \texttt{abstract} environment, as
+\begin{quote}\begin{verbatim}
+\begin{abstract}
+ This is the text of the abstract. . .
+\end{abstract}
+\end{verbatim}
+\end{quote}
+
+\subsection{The Text Body}
+The rest of the body of the article is organized into {\em sections\/}, {\em
+subsections}, and {\em sub-subsections}, with commands
+\verb!\section{!{\em heading\/}\verb!}!,
+\verb!\subsection{!{\em heading\/}\verb!}!, and
+\verb!\subsubsection{!{\em heading\/}\verb!}!, whereby the third-level {\em
+heading\/} should capitalize only the first word and end with a period.
+
+\subsubsection{This is a third-level heading.}
+It has been entered with: \verb!\subsubsection{!\texttt{This is a
+third-level heading.}\verb!}! with the final period included. (In the
+camera-ready copy, the third-level heading is run into the following text on
+the same line.)
+
+\begin{quote}
+Sections are normally not numbered, unless the \app{} declaration
+\verb!\sectionnumbers! has been issued. The AGU manual states that section
+numbering should be carried out {\em by explicitly including the numbers in
+the heading text.} This would violate a fundamental principle of a
+formatting language like \LaTeX, and will lead to much annoyance when sections
+are referred to or are changed. The AGU's argument is that \LaTeX{} will not
+format the numbered sections in the way that it wants them. \app{} has
+corrected so that the automatic numbering may be used.
+\end{quote}
+
+\subsection{Appendices}
+As in normal \LaTeX, the declaration \verb!\appendix! is issued at that point
+where the appendices are to start. This command redefines a number of things
+so that the sectioning commands now function as appendix headers. The
+numbering of equations and tables is also changed.
+
+\begin{quote}
+With \app, the numbering of figures and plates is also changed. I think it was
+an oversight on the part of AGU not to do this too, for it seems strange to
+have such inconsistent behavior. Besides, there are enough examples in
+previous AGU publications where figures too are numbered within appendices.
+\end{quote}
+
+If there is only one appendix, it should be introduced with the command
+\verb!\section*! rather than \verb!\section!. Recall that the starred versions
+suppress section numbering, or in the case of appendices, lettering.
+
+\begin{quote}
+The standard AGU package requires that the appendix letter be included in the
+heading text. This is the same repugnant notion as putting section numbers in
+explicitly. In \app, this is not necessary. Thus where AGU says to give
+\verb!\section{Appendix A: Title}!, it is sufficient to type only
+\verb!\section{Title}! (or \verb!\section*{Title}! if there is only one
+appendix).
+\end{quote}
+
+\subsection{The Acknowledgments}
+Acknowledgments come after the main text, including appendices, but before the
+list of references. They are introduced with the command
+\begin{quote}
+\verb!\acknowledgments!\\
+\makebox[0pt][r]{or }\verb!\acknowledgements!
+\end{quote}
+Both print the same word, with the American spelling. (This command is part of
+AGU\TeX, and is not an \app{} extra.)
+
+\section{Floats}
+
+The major difference between the official AGU package and \app{} is the
+treatment of figures, plates, and tables, objects that are referred to as
+`floats' in \LaTeX{} terminology because they do not appear where they are
+typed in in the text, but move around to an appropriate location. The AGU
+standard package wants {\em all\/} floats to appear at the end of the
+manuscript and camera-ready copy (fair enough), and the figures and plates to
+be printed {\em only as captions}. This means that the preprints will also
+only exhibit the captions, and that all floats come at the end and will not be
+integrated in the text.
+
+Another major, ridiculous problem, is that if there is an appendix in the
+work, then all floats entered at the end must be given explicit numbers, for
+otherwise \LaTeX{} automatic numbering will treat them as appendix items with
+corresponding numbering. I have already expressed my sentiment about explicit
+numbering.
+
+With \app, these problems are solved. Floats are entered in the text {\em
+where they are first referred to}. For preprints, they are then printed in the
+text as in a normal \LaTeX{} article; for manuscripts and camera-ready copy,
+only a marginal note is printed with the number, something AGU insists on
+anyway.
+(This may be suppressed with \verb!\figmarkfalse! and reinstated with
+\verb!\figmarktrue!.) The figure and plate captions are then automatically
+listed at the end, followed by the tables, followed optionally by the figures
+and plates themselves.
+
+\subsection{Figures and Plates}
+\begin{figure}
+\figbox{\hsize}{6cm}{Paste Figure Here}
+\caption[]{A demonstration paste-in figure. The width was given as
+ {\tt\protect\bsl hsize} (the column width), the height as
+ 6~cm.\label{fig:demo}}
+\end{figure}
+
+\noindent The following instructions are for \app{} only.
+
+Figures are entered in the \texttt{figure} or \texttt{figure*} environments, the
+latter being intended for double-column figures in two-column (preprint)
+format. Both environments produce identical results for manuscripts and
+camera-ready. The AGU provides a command \verb!\figurewidth! to specify the
+{\em width of the camera-ready caption\/}; if it is omitted, the caption width
+is the normal column width. There is a limited number of allowed values as
+arguments: 20~pc (the default single-column width), 35~pc, and 41~pc. (For
+{\em Radio Science\/} with \texttt{radga}, the values are 19, 33, and 38~pc.)
+
+JGR is still demanding that all figure captions be printed twice, once in
+width 20 and again in 35~pc. To enable this, give \verb!\doublecaption{35pc}!
+somewhere in the document, preferrably in the preamble so you notice it.
+
+The standard AGU package says that a \texttt{figure} environment should contain
+only an optional \verb!\figurewidth! command and a compulsory \verb!\caption!
+command, and nothing else. \app{} allows real figure contents to be included,
+but packed in a special \verb!\figbox!.
+This command takes three arguments:
+the width and height of the box, and the figure contents. The contents may be
+merely a note about what figure is to be pasted here, or a diagram made with
+\texttt{picture} or \textsc{Pic}\TeX, or an imported figure from other software,
+such as an encapsulated PostScript\footnote{PostScript is registered trademark
+of Adobe-Systems Incorporated.} file.
+
+An example of the input text for a figure is:
+\begin{verbatim}
+\begin{figure*}
+ \figurewidth{35pc}
+ \figbox{35pc}{12cm}{\epsfysize=10cm
+ \epsfbox{myfig.eps}}
+ \caption{A plot of Y versus X for various
+ times\label{fig:my}}
+\end{figure*}
+\end{verbatim}
+(The commands \verb!\epsf...! require the style option \texttt{epsf} and the
+PostScript driver \texttt{dvips} of Tomas Rokicki.)
+
+A sample result is shown in Figure~\ref{fig:demo}.
+
+The \verb!\figbox! command reserves a framed box of the specified size and
+centers the contents both horizontally and vertically. It makes use of the
+standard \LaTeX{} \verb!\framebox! command, which can be customized with the
+parameters \verb!\fboxrule! and \verb!\fboxsep!. The rule may be suppressed by
+setting the former to {\tt0pt}.
+
+Plates are made up in exactly the same way as figures but with the \texttt{plate}
+and \texttt{plate*} environments. These are not part of standard \LaTeX, but have
+been added for AGU publications. In place of \verb!\figurewidth!, one must use
+\verb!\platewidth!; however, \verb!\figbox! works for plates as well.
+
+\subsection{Tables}
+\noindent The following instructions are for \app{} only.
+
+Tables function somewhat differently from figures and plates because their
+contents will always be printed. Thus there is no equivalent of \verb!\figbox!
+for tables.
+
+Tables are constructed with the \LaTeX{} \texttt{tabular} or
+\texttt{tabbing} environments, as described in the manuals. To make them
+into floats, they must be included in a \texttt{table} or \texttt{table*}
+environment. For \app, they are to be placed in the text where
+appropriate, and not at the end as in standard AGU\TeX.
+There is an AGU command \verb!\tablewidth! to set the width of the
+table caption. Allowed values are 20, 30, 41, 48--57~pc, except for {\em Radio
+Science\/} which has 19, 20, 37, 43--51~pc.
+
+The AGU package contains some additions to standard \LaTeX{} to put footnotes
+and comments in a table. These are
+\begin{quote}
+\verb!\tablenotemark{!{\em letter\/}\verb!}!\\
+\verb!\tablenotetext{!{\em letter\/}\verb!}{!{\em text\/}\verb!}!\\
+\verb!\tablecomments{!{\em cmnt\_text\/}\verb!}!
+\end{quote}
+The footnotes are numbered with lowercase letters which the author must enter
+explicitly. The {\em cmnt\_text\/} is explanatory material that is printed
+below the table. These will all work with \app{} as well.
+
+AGU\TeX{} also provides an additional table-making environment, called
+\texttt{planotable}, for tables that may be continued over several pages.
+This too works with \app.
+
+\begin{planotable}{lcc}
+\tablewidth{20pc}
+\tablecaption{Coordinates of stations
+ \label{tab:coords}}
+\tablehead{\colhead{Station} &
+ \colhead{$\theta$\tablenotemark{\it a}} &
+ \colhead{$\phi$\tablenotemark{\it b}}}
+\tablenotetext{\it a}{Latitute, north $>0$}
+\tablenotetext{\it b}{Longitude, east $>0$}
+\tablecomments{Taken from Broodey [1976]}
+\startdata
+Brixstone & $45^\circ$ & $90^\circ$ \nl
+Wilstone &$-45^\circ$ &$-50^\circ$ \nl
+Tipstone & $56^\circ$ &$124^\circ$
+\end{planotable}
+
+The \texttt{planotable} environment is encouraged by AGU, because it
+automatically formats the tables with the three horizontal rules that they
+want: after the title, after the column headings, and after the table data.
+A typical example would look like
+\begin{verbatim}
+\begin{planotable}{lcc}
+\tablewidth{20pc}
+\tablecaption{Coordinates of stations
+ \label{tab:coords}}
+\tablehead{\colhead{Station} &
+ \colhead{$\theta$\tablenotemark{\it a}} &
+ \colhead{$\phi$\tablenotemark{\it b}}}
+\tablenotetext{\it a}{Latitute, north $>0$}
+\tablenotetext{\it b}{Longitude, east $>0$}
+\tablecomments{Taken from Broodey [1976]}
+\startdata
+Brixstone & $45^\circ$ & $90^\circ$ \nl
+Wilstone &$-45^\circ$ &$-50^\circ$ \nl
+Tipstone & $56^\circ$ &$124^\circ$
+\end{planotable}
+\end{verbatim}
+The result is shown in Table~\ref{tab:coords}
+
+Additional commands possible are
+\begin{description}
+\item[\ttfamily\bsl tablebreak] to force a page break in the middle of table;
+\item[\ttfamily\bsl nodata] for table elements that are empty;
+\item[\ttfamily\bsl cutinhead] to add new heading centered across whole table.
+\end{description}
+
+\section{Citations and List of References}
+The great disappointment in AGU\TeX{} is the lack of a decent author-year
+citation scheme and \btx{} style file. This is corrected with \app, which also
+provides the bibliography style file \texttt{agu.bst} along with the interfacing
+to use it correctly.
+
+Even if one does not make use of \btx{} to generate the list of references,
+one may type it in oneself as a \texttt{thebibliography} environment. The form of
+the entries must be observed, however.
+\begin{verbatim}
+\begin{thebibliography}{} %<-- Note {}
+ \bibitem[Smith {\it et al.}(1992)]{smi92}
+ Smith, J. G., P. G. Jones, and F. H. Weston,
+ Some results, {\it J. Strange Results},
+ {\it 32}, 345--350, 1992
+
+ \bibitem . . .
+\end{thebibliography}
+\end{verbatim}
+Each \verb!\bibitem! entry contains in square brackets the text that should
+appear in the citation, {\em but with the year in round parentheses}.
+Following that is the {\em key\/} to refer to the citation, here \texttt{smi92}.
+This is also the key that is used to identify a reference in a \btx{}
+database. Of course, it is much easier to make up such a database and let
+\btx{} generate the \texttt{thebibliography} environment. This is done with
+commands
+\begin{quote}
+\verb!\bibliographystyle{agu}!\\
+\verb!\bibliography{!{\em database\/}\verb!}!
+\end{quote}
+where {\em database\/} is the name of the bibliographic database file(s) that
+are to be searched by \btx. (The \btx{} program must also be run after at
+least one \LaTeX{} processing, and then \LaTeX{} must be run at least two
+times more.)
+
+In the main text, the \verb!\cite! command is used almost as in
+standard \LaTeX{} to print the citation, but with the following variations:
+\\[1ex]
+\begin{tabular}{l@{~$\Rightarrow$~}l}
+\verb!\cite{smi92}! & Smith {\it et al.} [1992] \\
+\verb!\cite[]{smi92}! & [Smith {\it et al.}, 1992] \\
+\verb!\cite[p.~3]{smi92}! & [Smith {\it et al.}, 1992, p.~3]\\
+\verb!\cite[see][]{smi92}! & [see Smith {\it et al.}, 1992]
+\end{tabular}\\[1ex]
+Note that the use of optional arguments is somewhat different from that
+of normal \LaTeX{} where only a single argument in square brackets is
+allowed to place a note \emph{after} the citation. Here one optional
+argument behaves that way, but if there are two, then the first goes
+before, the second after the citation. This is because in author-year
+citations one often wants to say [see Smith {\it et al.}, 1992, and
+references therein].
+
+Multiple citations may be made with one \verb!\cite! command:\\[1ex]
+\begin{tabular}{l@{~$\Rightarrow$~}l}
+\verb!\cite[]{smi92,jam89}! & [Smith {\it et al.}, 1992; \\
+\multicolumn{1}{c}{} & \quad James, 1989]\\
+\verb!\cite[]{smi89,smi92}! & [Smith {\it et al.}, 1989, 1992]
+\end{tabular}
+
+\section{Other Features}
+These are the major features of \app, but there are a few more
+nice frills that are provided at no extra charge.
+
+\subsection{Improved Preprint Title}
+The AGU\TeX{} style \texttt{agupp} puts the title, authors, and abstract on
+a titlepage and starts the two-column mode with the first \verb!\section!
+command on the next page. Frankly, this looks cheap. By selecting the
+option \texttt{twocolumn} explicitly, the title and authors are put on the
+same page as the opening text, but the abstract goes into a narrow
+column. (This is actually standard \LaTeX, so one should not complain.)
+\app, on the other hand, puts the
+title, author, and abstract all across the two columns of the starting
+text.
+This is illustrated on the first page of this paper.
+Furthermore, the information in \verb!\lefthead! and \verb!\righthead!
+are added in the running heads; the option \texttt{twoside} may be used
+to effect here. This looks far more professional, more like a reprint
+than a preprint.
+
+\subsection{Supplemental Abstract}
+JGR requires an additional abstract with the paper number for printing in the
+JGR-Space Physics Subsets. By including the declaration
+\begin{quote}
+\verb!\extraabstract!
+\end{quote}
+anywhere in the paper (preferrably in the preamble), this will be printed
+automatically as the very last page of the camera-ready copy. For other
+versions, it does nothing, so that it may be left in all the time.
+
+\subsection{Sublabelling}
+Sometimes it is required to label some equations, figures, or tables as 4a,
+4b, 4c, \dots, that is, to sublabel them. This can be done with the pair of
+commands
+\begin{quote}
+\verb!\sublabon{!{\em counter\/}\verb!}!\\
+\verb!\sublaboff{!{\em counter\/}\verb!}!
+\end{quote}
+where {\em counter\/} is one of \texttt{equation}, \texttt{figure},
+\texttt{plate}, or \texttt{table}. For example,
+\begin{verbatim}
+\sublabon{figure}
+\begin{figure}
+ \caption{Caption of fig. 4a}
+\end{figure}
+\begin{figure}
+ \caption{Caption of fig. 4b}
+\end{figure}
+\sublaboff{figure}
+\begin{figure}
+ \caption{Caption of fig. 5}
+\end{figure}
+\end{verbatim}
+The \verb!\sublabon! contains an implicit \verb!\sublaboff! so it is not
+necessary to turn the sublabelling first off then on again in order to step
+the main counter: a single \verb!\sublabon! will do the job.
+
+AGU\TeX{} provides a \texttt{mathletters} environment that is equivalent to
+\verb!\sublabon{equation}!. There is no reason not to use this with \app{}
+too.
+
+\subsection{Balancing Two Columns}
+An annoying thing about the \LaTeX{} two-column mode is that the two columns
+on the last page are of different lengths. The \app{} package contains the
+command \verb!\balance! that activates the equalizing of columns of text on
+one page. Since this sometimes causes problems with floats and footnotes, it
+is better to issue it only on the last page. More precisely, it should appear
+somewhere in the text of the (unbalanced) left-hand column of the last page.
+Obviously, it only makes sense for preprints; in other modes, it has no
+effect, and may safely be left in the text.
+
+The counter command \verb!\nobalance! undoes the equalizing if this should be
+necessary.
+
+\subsection{Alternative Text for One and Two Columns}
+Often one needs to format text differently for the narrow columns of the
+preprint and camera-ready copy than for the wider columns of the manuscript.
+This is especially so for mathematical formulas. Since it is frustrating to
+have to alter the text every time one changes between manuscript and other
+output, \app{} provides the command
+\begin{quote}
+\verb!\iftwocol{!{\em two\_col\_text\/}\verb!}{!{\em one\_col\_text\/}\verb!}!
+\end{quote}
+to be able to keep the alternative versions always present. The {\em
+two\_col\_text\/} will be printed for preprints or camera-ready copy (which
+ultimately appears as double columns) and {\em one\_col\_text\/} for
+manuscripts.
+
+\section{Conclusions}
+The extension package \app{} adds features to AGU\TeX{} that have been gained
+over many years of practical experience of providing camera-ready copy to JGR
+and GRL. It has not been thought up out of the blue, but derives from feedback
+between the author, his colleagues, other users, and their interactions with
+the AGU copy editors, who often have been quite frustrating in their demands.
+The extension package is a distillation from the full-fledged \LaTeX{} styles
+\texttt{art-jgr} and \texttt{art-grl}. However, since \app{} is an extension to
+AGU\TeX, it simply assumes the layout specifications given to it, and so
+should be able to survive any future format alterations.
+
+It is the offspring of a battle-tested warrior and as such should be able to
+provide much more sturdy service. Its major advantages over standard AGU\TeX{}
+are
+\begin{enumerate}
+\item explicit numbering of many items can be avoided,
+
+\item figures, plates, and tables may be put into the text so that decent
+ preprints are made with a minimum of changes (simply by changing an option
+ in \verb!\documentstyle!),
+
+\item and yet figure captions and tables appear at the end as required for
+ manuscripts and camera-ready copy,
+
+\item author-year citations may be done comfortably with \btx,
+
+\item appendices do not require explicit lettering, nor do they imply that
+ tables must be explicitly numbered afterwards,
+
+\item sublabelling of counters other than \texttt{equation} is possible,
+
+\item alternative text may be inserted for narrow and wide columns so that,
+ for example, math formulas always fit properly,
+
+\item the appearance of the first preprint page is improved, with title,
+ authors, and abstract across the two columns of text,
+
+\item the two columns on the last page of a preprint may be nicely balanced.
+\end{enumerate}
+
+The main emphasis of \app{} is that explicit numbering should be avoided at
+all costs, and that the text should be able to output manuscripts,
+camera-ready copy, and preprints, with only a simple change to the
+\verb!\documentstyle! command.
+
+\appendix
+\section{Encapsulated PostScript}
+As mentioned here, it is possible to include encapsulated PostScript files in
+a figure or plate, but within a \verb!\figbox! frame. What makes a PostScript
+file `encapsulated' is the addition of certain standardized comments, the most
+important of which, for our purposes, is the {\em bounding box
+specifications}. This tells \LaTeX{} (more properly the \texttt{dvips} driver)
+how to scale and shift the diagram to make it fit into the reserved space.
+
+However, many application programs cheat on the bounding box. It is not
+trivial to calculate (I know, for I have written a program to do it), so many
+programs just give the size of the full page. In this case, the figure will
+not fit so well into \verb!\figbox!, which places the center of the specified
+bounding box in the center of the \verb!\figbox!. If your figures come out
+displaced, or too small, then this may be the problem. A bounding box
+adjustment is necessary.
+
+\balance
+\section{A Template for an \app{} Article}
+I present here the outline of a source file with the essential
+AGU\TeX{} and \app{} shown.
+\begin{small}
+\begin{verbatim}
+\documentstyle[twoside,agupp,aguplus]{article}
+ % ALTERNATIVELY:
+ %\documentstyle[agums,aguplus]{article}
+ %\documentstyle[jgrga,aguplus]{article}
+ % FOR LATEX2E:
+ %\documentclass{article}
+ % \usepackage{agu2e,agums,aguplus}
+ % AGU++ OPTIONS
+ %\printfigures % ADDS FIGURES AT END
+ %\doublecaption{35pc} % CAPTIONS PRINTED TWICE
+ %\sectionnumbers % TURNS ON SECTION NUMBERS
+ %\extraabstract % ADDS SUPPLEMENTAL ABSTRACT
+ %\afour % EUROPEAN A4 PAPER SIZE
+ %\figmarkoff % SUPPRESS MARGINAL MARKINGS
+
+ % AGUTeX OPTIONS AND ENTRIES
+ %\tighten % TURNS OFF DOUBLE SPACING
+\lefthead{authors}
+\righthead{short title}
+\received{date1}
+\revised{date2}
+\accepted{date3}
+\journalid{JGRA}{Journal date}
+\articleid{page1}{page2}
+\paperid{94JZ12345}
+\ccc{0000-0000/00/94JZ-12345\$05.00}
+ % \cpright{PD}{1994}
+ % \cpright{Crown}{1994}
+ % (No \ccc{} for Crown copyrights.)
+\cpright{AGU}{1994}
+
+\authoraddr{author1, full address}
+\authoraddr{author2, full address}
+
+\slugcomment{To appear ...}
+
+ % END OF PREAMBLE
+\begin{document}
+\title{Full Title}
+ %
+ % TWO METHODS FOR GIVING THE AUTHORS
+ %
+\author{author set 1}
+\affil{Institute 1}
+
+\author{author set 2\altaffilmark{1}}
+\affil{Institute 2}
+
+\altaffiltext{1}{Other institute}
+
+ % ALTERNATIVELY:
+ %\author{author1\altaffilmark{1} and
+ % author2\altaffilmark{2,3}}
+ %\altaffiltext{1}{Institute 1}
+ %\altaffiltext{2}{Institute 2}
+ %\altaffiltext{3}{Other institute}
+
+ %
+ % THE ABSTRACT
+ %
+\begin{abstract}
+ Text of abstract.
+\end{abstract}
+
+ %
+ % THE MAIN BODY OF TEXT
+ %
+\section{Introduction}\label{sec:lab}
+
+\subsection{..}
+
+\subsubsection{..}
+
+ %
+ % FLOAT EXAMPLES
+ %
+\begin{figure}
+ \figbox{\hsize}{10cm}{Paste Fig Here}
+ \caption{Caption text.\label{fig:lab}}
+\end{figure}
+
+\begin{plate*}
+ \platewidth{35pc}
+ \figbox{35pc}{12cm}{Paste Plate Here}
+ \caption{Caption text.\label{pla:lab}}
+\end{plate*}
+
+\begin{table}
+ \caption{Caption of table.\label{tab:lab}}
+ \begin{tabular}{...}
+ .....
+ \end{tabular}
+\end{table}
+
+ %
+ % CITATION EXAMPLES
+ %
+As shown by \cite{smi92}, one may ...
+
+It has been shown \cite[]{smi92} that one may ...
+
+ %
+ % APPENDIX
+ %
+\appendix
+\section{Some More Stuff}
+
+ %
+ % ACKNOWLEDGMENTS
+ %
+\acknowledgments
+We wish to thank...
+
+ %
+ % BALANCING PREPRINT COLUMNS
+ %
+\balance
+
+ %
+ % LIST OF REFERENCES (BIBTEX)
+ %
+\bibliographystyle{agu}
+\bibliography{...}
+ %
+ % WITHOUT BIBTEX
+ %
+ %\begin{thebibliography}{}
+ % \bibitem[author {\it et al.}(year)]{key}
+ % reference text
+ %
+ % \bibitem[author1 and author2(year)]{key}
+ % reference text
+ %
+ %\end{thebibliography}
+
+\end{document}
+\end{verbatim}
+
+\end{small}
+
+\begin{thebibliography}{}
+
+\bibitem[Kopka and Daly(1993)]{koda}
+Helmut Kopka and Patrick~W. Daly.
+\newblock {\em A Guide to \LaTeX, Document Preparation for Beginners and
+ Advanced Users}.
+\newblock Addison-Wesley, Reading, MA, 1993.
+
+\bibitem[Lamport(1986)]{la}
+Leslie Lamport.
+\newblock {\em \LaTeX, a Documentation Preparation System}.
+\newblock Addison-Wesley, Reading, MA, 1986.
+
+\end{thebibliography}
+\end{document}
+
+%%
+%% End of file aguplus.tex.
diff --git a/obsolete/macros/latex209/contrib/aguplus/changes.lis b/obsolete/macros/latex209/contrib/aguplus/changes.lis
new file mode 100644
index 0000000000..d6275c7abb
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aguplus/changes.lis
@@ -0,0 +1,43 @@
+ CHANGES TO AGU++ SINCE THE ORIGINAL VERSION
+
+Version 0.5x 1993 December 2
+ Original version
+(The version numbers less than 1 are meant to be experimental still.
+Letters are prefixed to some to indicate that only minor corrections
+ have been undertaken.)
+
+Version 0.5y 1993 December 17
+ Corrections to fix up problems with planotable, which was not behaving
+ ideally when moved to the back of the manuscript and galley proof.
+
+ Sublabelling of planotables that extended over more than one page
+ did not work correctly, and this has been repaired.
+
+Version 1.0 1994 May 26
+ Made compatible with the new LaTeX2e, although it does not take
+ advantage of any of the new features. (This may come in future.)
+ Add a patch to make AGUTeX work with LaTeX2e.
+
+ Otherwise, only change on the surface is in the \cite command, which
+ now takes 2 optional arguments, for text before and after the citation.
+ \cite{key} ==>> Jones et al. [1990]
+ \cite[]{key} ==>> [Jones et al., 1990]
+ \cite[chap. 2]{key} ==>> [Jones et al., 1990, chap. 2]
+ \cite[e.g.,][]{key} ==>> [e.g., Jones et al., 1990]
+ \cite[see][pg. 34]{key}==>> [see Jones et al., 1990, pg. 34]
+
+ The title of the preprint has been changed to be left justified instead
+ of centered. This makes it the same as the galley proofs and final
+ printing. (I prefer centered myself.)
+
+Version 1.0a 1994 June 6
+ Fix up problems with overfull hboxes.
+
+Version 1.0b 1994 Aug 22
+ The 1.0 versions were made using a preliminary test release of LaTeX2e. The
+ official release of 1994 June 1 contained some changes that made the
+ citations no longer work properly. This has now been fixed up. (Which means
+ it will not work with the preliminary test release!)
+
+ NOTE: this 1.0b version is still a hybrid; it works under both 2.09 and 2e
+ versions of LaTeX. In future, a LaTeX2e only package will be supported.
diff --git a/obsolete/macros/latex209/contrib/aguplus/readme.pwd b/obsolete/macros/latex209/contrib/aguplus/readme.pwd
new file mode 100644
index 0000000000..8ada22a371
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aguplus/readme.pwd
@@ -0,0 +1,64 @@
+**************************************************
+* LATEX STYLES FOR AMERICAN GEOPHYICAL UNION *
+**************************************************
+ Latest news from 1994 May 26
+
+The American Geophysical Union (AGU) has finally come out with its own
+official LaTeX package for producing manuscripts and camera-ready copy for its
+journals. At the same time the format of the journals has been dramatically
+altered. Thus my unofficial LaTeX package for AGU (art-jgr and art-grl)
+becomes not only superfluous but obsolete.
+
+However, in looking over the instructions and coding of the official package,
+I realize that not only are some imperfections present, but many useful
+features of my styles are missing. The most noticeable of these is the means
+of using author-year citations with BibTeX in an automated manner.
+
+The coding imperfections are related to the way in which figure captions and
+tables are treated: they must be placed at the end of the document, and if an
+appendix is present, then the automatic numbering system will consider them as
+appendix figures and tables (numbered A1, A2, ...). To avoid this, explicit
+numbers must be given, something that violates the essential principles of a
+formatting program like LaTeX. A second implication of this treatment is that
+preprints will be missing the figures and tables in the text. In my older
+system, neither of these problems occurred.
+
+BY POPULAR DEMAND, I have undertaken to write an extension to the official AGU
+package, called AGU++ (for AGU doubly-ionized or super-charged, as you
+please). It includes my extra features without changing any of the formats of
+the original package. The user should prepare his documents in the manner
+described by the AGU, except that figures, tables, and plates are to be
+included *in the text*. A number of extra commands are available to control
+and/or enable the extra features.
+
+Details on how to use AGUTeX with AGU++ are to be found in the manual
+AGUPLUS.TEX. The package is still EXPERIMENTAL, so I would appreciate
+comments and complaints from trial users. The package consists of the files:
+
+I have now come up with version 1.0 (not so experimental), which is compatible
+with the new standard LaTeX2e, as well as with the older standard 2.09.
+Since AGUTeX itself has some problems with LaTeX2e, a patch is included.
+
+aguplus.sty The style file itself
+aguplus.tex A manual, to be LaTeX (under AGUTeX and AGU++)
+samplus.tex A sample paper
+agu2e.sty A package for LaTeX2e, to patch up inconsistencies in AGUTeX
+agu.bst A bibliography style file with AGU formats
+sample.bib A BibTeX data base, for use with samplus.tex
+
+In addition, I supply some useful files for listing the contents of *.bib
+files, with their keys. These have nothing really to do with AGU as such.
+keylist.tex A file to be LaTeXed in order to list a *.bib file contents
+keylist.bst A bibliography style to go along with it.
+
+NOTE: this package does not contain AGUTeX itself. This is because AGU++ is
+still unofficial. (The AGU is considering what they want to do with it.)
+The official package can be obtained from anonymous FTP server
+ kosmos.agu.org
+in directory agutex
+
+Patrick W. Daly
+Max-Planck-Institut f\"ur Aeronomie
+D-37189 Katlenburg-Lindau
+
+daly@linmpi.dnet.gwdg.de
diff --git a/obsolete/macros/latex209/contrib/aguplus/sample.bib b/obsolete/macros/latex209/contrib/aguplus/sample.bib
new file mode 100644
index 0000000000..31f1829ec5
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aguplus/sample.bib
@@ -0,0 +1,51 @@
+% ****************************************
+% * File: SAMPLE.BIB *
+% ****************************************
+% * An invented bib file *
+% * For the sample texts *
+% * The order is unimportant and there *
+% * may be more entries than references *
+% * in the text *
+% ****************************************
+%
+@ARTICLE{smit54,
+ AUTHOR = {J. G. Smith and H. K. Weston},
+ TITLE = {Nothing Particular in this Year's History},
+ YEAR = {1954},
+ JOURNAL = {J. Geophys. Res.},
+ VOLUME = {2},
+ PAGES = {14-15}
+}
+@BOOK{colu92,
+ AUTHOR = {Christopher Columbus},
+ TITLE = {How {I} Discovered {America}},
+ YEAR = {1492},
+ PUBLISHER = {Hispanic Press},
+ ADDRESS = {Barcelona}
+}
+@ARTICLE{gree00,
+ AUTHOR = {R. J. Green and U. P. Fred and W. P. Norbert},
+ TITLE = {Things that Go Bump in the Night},
+ YEAR = {1900},
+ JOURNAL = {Psych. Today},
+ VOLUME = {46},
+ PAGES = {345-678}
+}
+@ARTICLE{phil99,
+ AUTHOR = {T. P. Phillips},
+ TITLE = {Possible Influence of the Magnetosphere on {American} History},
+ YEAR = {1999},
+ JOURNAL = {J. Oddball Res.},
+ VOLUME = {98},
+ PAGES = {1000-1003}
+}
+@ARTICLE{jame76,
+ AUTHOR = {Kelly James and Harris, Jr., George and Wilby Wollops},
+ TITLE = {{American} Independence and Magnetism},
+ YEAR = {1776},
+ JOURNAL = {Revol. Tracts},
+ VOLUME = {32},
+ PAGES = {34-55}
+}
+
+
diff --git a/obsolete/macros/latex209/contrib/aguplus/samplus.tex b/obsolete/macros/latex209/contrib/aguplus/samplus.tex
new file mode 100644
index 0000000000..feab94ec3b
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/aguplus/samplus.tex
@@ -0,0 +1,274 @@
+%%
+%% This is file `samplus.tex', generated
+%% on <1994/5/27> with the docstrip utility (2.2e).
+%%
+%% The original source files were:
+%%
+%% sample.dtx (with options: `agu')
+%% **************************************
+% * SAMPLE INPUT FOR AGUTeX & AGU++ *
+%% **************************************
+% Various alternatives for the input are shown, commented out.
+% E.g., for the documentstyle options
+% for the authors' names,
+% for the bibliography
+% Feel free to play around with these variations, especially with
+% the style options draft and twocolumn and 11pt/12pt
+
+ %%%% SELECT ONE OF THE NEXT LINES FOR LATEX2E ONLY
+%\documentclass{article}
+%\documentclass[twoside]{article}
+
+%% AND THEN ONE OF THESE LINES
+%\usepackage{agu2e,jgrga,aguplus} % CAMERA-READY, JGR
+%\usepackage{agu2e,agupp,aguplus} % PREPRINT
+%\usepackage{agu2e,agums,aguplus} % MANUSCRIPT
+
+ %%%% FOR LATEX 2.09, SELECT ONE OF THE FOLLOWING
+\documentstyle[jgrga,aguplus]{article} % CAMERA-READY FOR JGR
+
+%\documentstyle[twoside,agupp,aguplus]{article} % PREPRINT, TWOSIDED
+
+%\documentstyle[agums,aguplus]{article} % MANUSCRIPT
+
+
+% SOME EXTRA FEATURES THAT MAY BE TURNED ON WITH APPROPRIATE COMMANDS
+% THESE ARE ALL PART OF AGU++, NOT STANDARD AGUTeX
+%
+\printfigures % PRINTS OUT FIGURES AT END OF MANUSCRIPT AND
+ % CAMERA-READY COPY
+\doublecaption{35pc} % FIGURE CAPTIONS PRINTED OUT TWICE, IN REGULAR
+ % WIDTH AND WIDTH 35 PICAS (STILL REQ'D BY JGR)
+ % EFFECTIVE ONLY FOR CAMERA-READY COPY
+\sectionnumbers % TURNS ON SECTION NUMBERS, WHICH ARE TURNED
+ % OFF BY DEFAULT (AGU DISCOURAGES THEM)
+\extraabstract % ADDS SUPPLEMENTAL ABSTRACT WITH PAPER NUMBER
+ % AT END OF CAMERA-READY COPY (FOR JGR)
+%\afour % SET PAPER SIZE FOR EUROPEAN A4 SPECIFICATION
+
+
+%\figmarkoff % INCLUDE TO SUPPRESS AUTOMATIC MARGINAL MARKING OF FIGS, TABLES
+
+%\tighten % STANDARD AGUTeX: TURNS OFF DOUBLE SPACING IN MANUSCRIPT
+
+% PREAMBLE INFOMATION ABOUT THE PAPER
+\lefthead{Smith and Weston}
+\righthead{Western Frontiers and Geophysics}
+\received{April 1, 1989}
+\revised{November 11, 1993}
+\accepted{December 25, 1999}
+\journalid{JGRA}{January 2000}
+\articleid{1}{4}
+\paperid{99JZ12345}
+\ccc{0000-0000/00/99JZ-12345\$05.00}
+ % \cpright{PD}{1999}
+ % \cpright{Crown}{1999}
+ % (Crown copyrights have no "\ccc{}" information.)
+\cpright{AGU}{1999}
+
+\authoraddr{J. G. Smith, Institute for Historical Geophysics, 26 Camrose
+Drive, Houston, Texas}
+
+\authoraddr{H. K. Weston, School for Military Advances, 87 Blackborn Rd,
+London, United Kingdom}
+
+\slugcomment{To appear in the Journal of Irreproducible Results, February 30,
+1999}
+
+\begin{document}
+\title{How the Western Frontiers were Won with the Help of Geophysics}
+
+
+%
+% TWO METHODS FOR GIVING THE AUTHORS' NAMES
+%
+\author{J. G. Smith}
+\affil{Institute for Historical Geophysics, Houston, Texas}
+
+\author{H. K. Weston\altaffilmark{1}}
+\affil{School for Military Advances, London, United Kingdom}
+
+\altaffiltext{1}{Present address Playa del Ingeles, Gran Canaria.}
+
+%\author{J. G. Weston\altaffilmark{1} and H. K. Smith\altaffilmark{2,3}}
+%\altaffiltext{1}{Institute for Historical Geophysics, Houston, Texas.}
+%\altaffiltext{2}{School for Military Advances, London, United Kingdom.}
+%\altaffiltext{3}{Present address Playa del Ingeles, Gran Canaria.}
+
+
+
+\begin{abstract}
+To date, very little has been written about the very important role
+played by the magnetosphere during the conquest of the Western Hemisphere.
+This paper tries to fill this gap by drawing on historical documents from the
+years 1492 to 1888, the most vital years for this development. Almost no
+conclusions are drawn as the influence appears to approach absolute zero.
+\end{abstract}
+
+\section{Introduction}\label{sec:intro}
+
+With the discovery of America \cite[]{colu92} a new continent was opened up.
+However its full exploitation by Europeans and their offspring was not fully
+complete until many centuries later, as reported by \cite{jame76}. During this
+interval, known as the Winning of the West \cite[]{smit54}, a major role in
+the development of the continent was played by the lowly revolver
+\cite[e.g.][]{gree00}. Recently, \cite{phil99} suggested that the
+magnetosphere could have played an even more significant role. In order to
+pursue this conjecture, the authors of this work have carried out a historical
+survey and have found start\-ling\-ly little evidence for such a claim.
+
+\section{The discovery}\label{sec:dis}
+
+America was discovered by \cite{colu92}, as illustrated in
+Figure~\ref{fig:dis}.
+Without the use of the compass, this would never have been possible. In fact,
+this could be considered the most important (and only) contribution of the
+geomagnetism to the development of the American continent. A portrait of
+Christopher Columbus is shown in
+Plate~\ref{pla:columbus}.
+
+\begin{figure}
+ \figbox{8cm}{4cm}{Paste map here}
+ \caption[]{\label{fig:dis}
+A map showing the route of Columbus from the Old to the New
+World. His real route is shown with a solid line, that that he might have
+taken without a compass is drawn as a dashed line.}
+\end{figure}
+\begin{plate*}
+ \platewidth{35pc}
+ \figbox{12cm}{6cm}{Paste portrait here}
+ \caption{\label{pla:columbus}
+A portrait of Christopher Columbus, the discoverer of America.}
+\end{plate*}
+
+The subsequent taming of the West took place with considerable quantities of
+lead, but since this non-mag\-ne\-tic, there are no geomagnetic variances
+attributed to it.
+
+\section{The next five centuries}\label{sec:next5}
+
+In Section~\ref{sec:dis}, the discovery of America was described. Here we will
+outline the subsequent history until the present. This is best summarized in
+Table~\ref{tab:sum}.
+
+\begin{planotable}{cll}
+ \tablewidth{20pc}
+\tablecaption
+{\label{tab:sum}The History of America from Discovery to Present}
+\tablehead{\colhead{Date} & \colhead{Event} & \colhead{Ref.}}
+\startdata
+1492 & Discovery & \cite{colu92}
+ \nl
+1776 & Independence & \cite{jame76}
+ \nl
+1954 & Nothing much & \cite{smit54}
+ \nl
+1999 & Present & \cite{phil99}
+\end{planotable}
+
+As can be seen from Table~\ref{tab:sum}, there is almost no mention of
+geomagnetism or the magnetosphere at all. This sorry situation is discussed
+further and explained away in Section~\ref{sec:end}.
+
+\subsection{The Mathematics of Development}
+
+The complete mathematical description is beyond the scope of this report, but
+can be found in \cite{smit54}. The basic equation is
+\begin{equation}
+ z = \sqrt{x^2 + y^2} \label{eq:z} .
+\end{equation}
+
+In addition to Eq.~\ref{eq:z}, we also have
+\begin{eqnarray}
+x & = & A \sin\theta \nonumber \\
+y & = & A \cos\theta \nonumber \\
+A & = & \int^\infty_0 dt\,f(t) \label{eq:int}
+.\end{eqnarray}
+Equations~\ref{eq:z} and \ref{eq:int} together describe the entire time
+development of the history of America. Again no geomagnetic term enters.
+
+\subsubsection{Pseudo-mathematics.}
+In addition to the true mathematics mentioned above, there are a number of
+pseudo-mathematical theories, but these cannot be seriously considered by
+reputable scientists.
+
+\section{Conclusions}\label{sec:end}
+
+Considering Figure~\ref{fig:dis} and Table~\ref{tab:sum} we see that the
+influence of the geomagnetic and magnetospheric terms is negligible.
+Furthermore, equations~\ref{eq:z} and \ref{eq:int} add no insight to the
+problem. We must therefore conclude that \cite{phil99} incorrectly supposed
+such a connection to exist.
+
+In spite of this negative result, research will continue on this highly
+interesting question. For if it were to prove correct, then the consequences
+would be enormous to say the least.
+
+\balance % USE THIS TO BALANCE THE LAST TWO COLUMNS IN TWOCOLUMN MODE
+
+\appendix
+%%
+%% IF THERE IS ONLY ONE APPENDIX, USE \section*
+%% FOR MORE THAN ONE, USE \section FOR EACH APPENDIX
+%%
+\section*{Mathematical Background}
+Apart from the following equation
+%%
+%% HERE IS AN EXAMPLE OF AN EQUATION THAT IS TO BE BROKEN UP IN TWOCOLUMN
+%% MODE, BUT LEFT IN ONE LINE IN ONECOLUMN
+%%
+\iftwocol{% HERE FOLLOWS THE TWOCOLUMN VERSION
+\begin{eqnarray}
+(1-x)^n & = & 1 - n x + \frac{n(n-1)}{2}\,x^2 \nonumber\\
+ & & -{} \,\frac{n(n-1)(n-2)}{3\cdot2}\,x^3 + \cdots
+\end{eqnarray}
+}{% NOW THE ONECOLUMN VERSION
+\begin{equation}
+(1-x)^n = 1 - n x + \frac{n(n-1)}{2!}\,x^2 - \frac{n(n-1)(n-2)}{3\cdot2}\,x^3 +
+\cdots
+\end{equation}} % END OF THE \iftwocol DEMONSTRATION
+there is not very much to say about mathematical background to this topic.
+
+
+\acknowledgments % OR ALTERNATIVELY \acknowledgements
+The authors thank their colleagues for continuing support and discussion
+around the coffee breaks. The editor thanks X. Y. Furore and another referee
+for assisting in evaluating this paper.
+
+%% TWO METHODS FOR INCLUDING THE BIBLIOGRAPHY (LIST OF REFERENCES)
+%% EITHER TYPE IN THE ENTRIES YOURSELF AS SHOWN HERE IN
+%% `thebibliography' ENVIRONMENT,
+%% OR
+%% USE THE FOLLOWING TWO COMMANDS SO THAT BIBTEX WILL GENERATE
+%% `thebibliography' TEXT FOR YOU AND READ IT IN.
+%%
+%\bibliographystyle{agu}%<-- LIST OF REFERENCES TO BE IN "AGU" STYLE
+%\bibliography{sample} %<-- REFERENCES ARE IN FILE "SAMPLE.BIB"
+%%
+%% IF THE ABOVE TWO COMMANDS ARE USED, THEN thebibliography ENVIRONMENT
+%% MUST BE REMOVED.
+\begin{thebibliography}{} % (THIS TEXT WAS GENERATED BY BIBTEX)
+
+\bibitem[{\it Columbus}(1492)]{colu92}
+Columbus, C., {\it How {I} Discovered {America}}. Hispanic Press, Barcelona,
+ 1492.
+
+\bibitem[{\it Green et~al.}(1900)]{gree00}
+Green, R.~J., U.~P. Fred, and W.~P. Norbert, Things that go bump in the night,
+ {\it Psych. Today}, {\it 46}, 345--678, 1900.
+
+\bibitem[{\it James et~al.}(1776)]{jame76}
+James, K., G.~Harris, Jr., and W.~Wollops, {American} independence and
+ magnetism, {\it Revol. Tracts}, {\it 32}, 34--55, 1776.
+
+\bibitem[{\it Phillips}(1999)]{phil99}
+Phillips, T.~P., Possible influence of the magnetosphere on {American} history,
+ {\it J. Oddball Res.}, {\it 98}, 1000--1003, 1999.
+
+\bibitem[{\it Smith and Weston}(1954)]{smit54}
+Smith, J.~G., and H.~K. Weston, Nothing particular in this year's history, {\it
+ J. Geophys. Res.}, {\it 2}, 14--15, 1954.
+
+\end{thebibliography}
+
+\end{document}
diff --git a/obsolete/macros/latex209/contrib/album/example.bum b/obsolete/macros/latex209/contrib/album/example.bum
new file mode 100644
index 0000000000..fa0d73eac9
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/album/example.bum
@@ -0,0 +1,31 @@
+\album{vivaldi.1}{\small Vivaldi, Antonio\hfill (1678-1741)\\
+\begin{enumerate}
+\item Concerto in G Major for Two Mandolins, Strings \& Basso Continuo
+\item Concerto in C Major for Mandolin, Strings \& Basso Continuo
+\item Concerto in C Major for Two Mandolins, Two Theorboes, Two flutes,
+Two ``Salmoe'', Two Violins, Cello, Strings \& Basso Continuo
+\item Concerto a dve Chori in B flat Major, ``Con Violino Discordato'',
+Strings \& Basso Continuo
+\end{enumerate}
+}%
+{\normalsize\sf Vivaldi\\Mandolin Concertos}%
+{\small {\it I Solisti Veneti} --- Claudio Scimone\\[1mm]
+Bonifacio Bianchi, Alessandro Pitrelli --- Mandolins
+}
+%%-----------------------------------------------------------
+\album{vivaldi.2}{\small Vivaldi, Antonio\\[1mm]
+{\bf \underline{The Four Seasons\rule[-0.7mm]{0mm}{1mm}}}
+
+\begin{enumerate}
+\item SPRING, Concerto No. 1 in E Major
+\item SUMMER, Concerto No. 2 in G Minor
+\item AUTUMN, Concerto No. 3 in F Major
+\item WINTER, Concerto No. 4 in F Minor
+\end{enumerate}
+
+Simon Standage --- Violin\\
+Trevor Pinnock --- Harpsichord\\[1mm]
+{\it The English Chamber Orchestra} on authentic instruments.
+}%
+{\normalsize\sf Vivaldi\\The Four Seasons}{}
+%%-----------------------------------------------------------
diff --git a/obsolete/macros/latex209/contrib/album/tapeman.tex b/obsolete/macros/latex209/contrib/album/tapeman.tex
new file mode 100644
index 0000000000..785eb687fc
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/album/tapeman.tex
@@ -0,0 +1,243 @@
+\documentstyle[tape]{article}
+\setlength{\textwidth}{6.5in}
+\setlength{\textheight}{9in}
+\setlength{\oddsidemargin}{1in}
+\renewcommand{\baselinestretch}{1.25}
+\parindent=15pt
+\parskip=6pt plus 1pt
+\pagestyle{plain}
+\begin{document}
+
+\section*{Making Casette Tape Labels using \LaTeX}
+\begin{flushright}
+\begin{tabular}{@{}l@{}}
+Sunil Podar (podar@sbcs)\\
+S.U.N.Y.\ at Stony Brook.\\
+
+\end{tabular}
+\end{flushright}
+
+\vspace*{8mm}
+This document describes a way to maintain a simple ``album database'' and
+susequently print formatted casette tape labels. The commands to accomplish
+this have been implemented as a documentstyle option {\tt tape} and should be
+used with the {\it article} documentstyle, i.e., it should be invoked with
+the command:
+
+\verb|\documentstyle[tape]{article}|
+
+A casette has two sides and each side is assumed to hold one {\it album}.
+Each side of a casette tape label has three major fields of information,
+depicted in Figure 1.:
+
+\begin{description}
+\item[side\hfill] the textual information that goes on the front-flap. This
+is where most of the information goes.
+\item[title\hfill] the title given to the {\it side} that goes on the side
+face of the casette cover.
+\item[addendum\hfill] the textual information that goes on the back-flap of
+the casette tape cover.
+\end{description}
+
+\album{1}{\it side--1}{\it title--1}{\it addendum--1}
+\album{2}{\it side--2}{\it title--2}{\it addendum--2}
+\begin{figure}[hb]
+\begin{center}
+\renewcommand{\globaltapeid}{\footnotesize global\\tapeid}
+\small
+\maketape[tapeid]{1}{2}%
+\caption[]{The Layout of a Casette Tape Label and the Terminology Used}
+\end{center}
+\end{figure}
+
+\newpage
+Each side of the tape in the database is defined using the following
+command:
+
+{\it
+\verb|\album{|album-id\verb|}{|side\verb|}{|title\verb|}{|addendum\verb|}|}
+
+\verb|\album| command defines an album. More precisely, it defines one side
+of a casette tape. It takes four arguements: first one
+is a unique label assigned to every album, the other three being {\it side},
+{\it title} and {\it addendum}.
+
+A tape label holds information for two sides. Following command produces the
+tape label:
+
+{\it \verb|\maketape[|tape-id\verb|]{|album1-id\verb|}%
+{|album2-id\verb|}[|optional tape title\verb|]|}
+
+The album entry corresponding to {\it album1-id} goes on the left side of the
+tape label and those corresponding to {\it album2-id} on the right side. By
+default, individual titles are picked up from the album definition and
+formatted to appear under their own sides. If it is desired to have a single
+title as the case may be if both sides of a tape are by the same composer or
+group, then a title may be explicitly specified as the last arguement in
+which case individual titles of the two albums, as specified in their
+respective \verb|\album| definitions, are ignored.
+
+A tape label also has two minor
+fields of information, that go on the side face of the tape label, on either
+side of the title. They are:
+\begin{description}
+\item[globaltapeid\hfill] This goes on the left side of the title, almost
+flush with the left edge. This may hold information such as the owner's name.
+By default, it is empty and may be changed using a \verb|\renewcommand|.
+
+\item[tapeid\hfill] This is an identification for individual tapes and goes
+to the right of the title almost flush with the right edge.
+\end{description}
+
+The width of the box in which the two fields described above are printed, is
+controlled by a variable \verb|\tapeidwidth| and may be changed using a
+\verb|\setlength| command. Also, by default, a vertical line is drawn
+separating the two boxes from the title region. It may be changed by a
+\verb|\renewcommand| on the parameter \verb|\tapeidmarker| --- one may
+prefer a $\bullet$ (\verb|$\bullet$|) as the demarcator.
+
+The {\it side} and the {\it addendum} fields are set in a \verb|minipage|
+environment, thus any of the regular paragraph formatting commands of \LaTeX\
+may be used; various formatting environments, such as {\tt tabbing}, {\tt
+tabular}, {\tt itemize}, {\tt enumerate}, etc., can also be used. The other
+fields, i.e., {\it title}, {\it globaltapeid} and {\it tapeid} are set in a
+\verb|\parbox| thus only \verb|\\| command may be used with no blank lines in
+the fields -- a parbox permits only one simple paragraph. Just a reminder: to
+get indentation on a line following a \verb|\\| command, use \verb|\hspace*|
+instead of \verb|\hspace|; according to the manual, any \verb|\hspace| after
+a \verb|\\| is ignored.
+
+On the outside of the left hand edge of the tape label, three vertical lines
+are shown. In addition to enforcing a correct height for each of the three
+regions, they also serve as an indicator. Their height is invariant and in
+the case when more text has been typed in a region than will fit on the
+label, they indicate precisely by how much has the height been overshot. They
+should, of course, be left out when the label is cut.
+
+No choice of fonts or fontsizes is enforced and one is completely free to
+choose these, although it is suggested that a small-sized font (such as those
+obtained by \verb|\small|, \verb|\footnotesize| or \verb|\tiny| declarations)
+be used since the width of the paragraphs is rather small. Also, if more
+information need to be put than will fit, the inter-line spacing may be
+reduced using a \verb|\renewcommand| on the parameter \verb|\baselinestretch|.
+
+Two tape labels can be fit on a page, and a \verb|\newpage| declaration ought
+to be placed after every two \verb|\maketape| commands.
+
+It is assumed that each \verb|\album| describes one {\it side} of the tape
+label, which is also usually the case. If one side of a tape contains more
+than one album then one will have to declare it as a single \verb|\album|
+description. On the other hand, if a single album, or piece of music spans
+both sides of a casette tape, its description will have to be broken
+into two \verb|\album| declarations.
+
+The label can be cut out along the outer boundary -- the border lines are
+meant to be part of the label so the cut should be just along the outer edge
+of the lines.
+
+\section*{General Comments}
+
+The tape database is implemented by storing all fields as control sequences,
+thus it is suggested that the database be constructed using reasonable-sized
+files; subsequently to make tape labels, only the necessary files be
+\verb|\input|, otherwise \TeX\ may run out of memory.
+
+The tape database has been implemented with the aim that the database
+files be sharable amongst various users so long as every album has a unique
+{\it album-id}. In order to load a tape database, all one needs to do is
+\verb|\input| the appropriate files and subsequently type the
+\verb|\maketape| commands for each desired pair of albums.
+Following suggestions are made for conventions to be adopted
+so as to enable a large community to share files without much effort:
+\begin{itemize}
+\item Each album database file have a ``{\tt .bum}'' file-name
+extension\footnote{music album $\Leftrightarrow$ musical bum --- Benny Hill}.
+For such files, the extension will have to be explicitly specified in the
+\verb|\input| statement, otherwise \TeX\ will look for a file with a {\tt
+.tex} extension.
+
+\item Separate files be maintained for different composers or groups.
+
+\item Any character can be used in the {\it album-id}, thus following
+formats are suggested for {\it album-id}'s\\[1mm]
+\hspace*{0.5in}\verb|filename.#|, or\\
+\hspace*{0.5in}\verb|filename[#]|, where {\tt \#} is an integer.
+
+For example, one may have a file {\tt mozart1.bum} with various album
+descriptions of Mozart's compositions, each having an album-id of the form
+{\tt mozart1.1}, {\tt mozart1.2}, and so on. If a single piece of music
+spans both sides then we might label the two parts using another level of
+subscripts, for example {\tt mozart.12.1} and {\tt mozart.12.2}.
+\end{itemize}
+
+The only problem with above conventions is that if two users have a file with
+identical album-id's then the file will have to be
+copied and the album-id's changed.
+
+Following page contains an example. Commands used to generate the label would
+be:
+\leftmargini 25pt
+\begin{quote}
+\begin{verbatim}
+\documentstyle[tape]{article}
+\renewcommand{\globaltapeid}{\footnotesize\sf Sunil\\Podar}
+\begin{document}
+\input{example.bum}
+\maketape[\sf WC\\12]{vivaldi.1}{vivaldi.2}
+\end{document}
+\end{verbatim}
+\end{quote}
+
+\newpage
+\vspace*{-4mm}
+{%
+\input{tape.sty}
+\input{example.bum}
+\renewcommand{\globaltapeid}{\footnotesize\sf Sunil\\Podar}
+\begin{center}
+\small
+\maketape[\sf WC\\12]{vivaldi.1}{vivaldi.2}
+\end{center}%
+}
+
+\renewcommand{\baselinestretch}{0.85}
+\small\normalsize
+
+\noindent The file {\tt example.bum} contains:
+\begin{quote}
+\begin{verbatim}
+\album{vivaldi.1}{\small Vivaldi, Antonio\hfill (1678-1741)\\
+\begin{enumerate}
+\item Concerto in G Major for Two Mandolins, Strings \& Basso Continuo
+\item Concerto in C Major for Mandolin, Strings \& Basso Continuo
+\item Concerto in C Major for Two Mandolins, Two Theorboes, Two flutes,
+Two ``Salmoe'', Two Violins, Cello, Strings \& Basso Continuo
+\item Concerto a dve Chori in B flat Major, ``Con Violino Discordato'',
+Strings \& Basso Continuo
+\end{enumerate}
+}%
+{\normalsize\sf Vivaldi\\Mandolin Concertos}%
+{\small {\it I Solisti Veneti} --- Claudio Scimone\\[1mm]
+Bonifacio Bianchi, Alessandro Pitrelli --- Mandolins
+}
+%%-----------------------------------------------------------
+\album{vivaldi.2}{\small Vivaldi, Antonio\\[1mm]
+{\bf \underline{The Four Seasons\rule[-0.7mm]{0mm}{1mm}}}
+
+\begin{enumerate}
+\item SPRING, Concerto No. 1 in E Major
+\item SUMMER, Concerto No. 2 in G Minor
+\item AUTUMN, Concerto No. 3 in F Major
+\item WINTER, Concerto No. 4 in F Minor
+\end{enumerate}
+
+Simon Standage --- Violin\\
+Trevor Pinnock --- Harpsichord\\[1mm]
+{\it The English Chamber Orchestra} on authentic instruments.
+}%
+{\normalsize\sf Vivaldi\\The Four Seasons}{}
+%%-----------------------------------------------------------
+\end{verbatim}
+\end{quote}
+
+\end{document}
diff --git a/obsolete/macros/latex209/contrib/bnf/bnf.README b/obsolete/macros/latex209/contrib/bnf/bnf.README
new file mode 100644
index 0000000000..bae8c349bd
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/bnf/bnf.README
@@ -0,0 +1,22 @@
+The bnf.sty file provides a mechanism for pretty printing context free
+grammars. To use it, include it in one of the TEXINPUTS directories ---
+if you can't get it installed in your standard TeX macro directory, your
+current working directory should do. To make the macros available,
+include it as an optional parameter of the \documentstyle command.
+
+The bnf.tex file is the documentation.
+
+Known bugs are reported in bnf.bugs.
+
+Please report any new bugs to hugh@cs.kun.nl, or
+ Hugh Osborne,
+ Department of Informatics,
+ University of Nijmegen,
+ 6525GT Nijmegen,
+ The Netherlands.
+
+If you have not received this file directly from me, please let me know.
+I like to have an idea of how widespread its use is.
+Thanks,
+ Hugh.
+
diff --git a/obsolete/macros/latex209/contrib/bnf/bnf.doc b/obsolete/macros/latex209/contrib/bnf/bnf.doc
new file mode 100644
index 0000000000..9198425030
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/bnf/bnf.doc
@@ -0,0 +1,528 @@
+\def\filedate{12/09/92 12:56pm}
+%\iffalse
+%%% ====================================================================
+%%% @LaTeX-file{
+%%% filename = "bnf.sty",
+%%% date = "9 Dec 1992",
+%%% time = "12:56 BST",
+%%% author = "Mike Piff",
+%%% address = "Dr M. J. Piff
+%%% University of Sheffield
+%%% Department of Pure Mathematics
+%%% Hicks Building
+%%% Hounsfield Road
+%%% SHEFFIELD S3 7RH
+%%% England",
+%%% telephone = "0742-305468",
+%%% email = "M.Piff@shef.ac.uk (Janet)",
+%%% keywords = "Backus,Naur,syntax,grammar",
+%%% supported = "yes",
+%%% checksum = "10141 528 2414 20734",
+%%% docstring = "A style option to LaTeX for producing
+%%% Backus-Naur Form syntax notation.",
+%%% }
+%%% ====================================================================
+%% This is BNF.STY
+%% Copyright (C) 1992 by Mike Piff.
+%% All rights reserved.
+%% Copying of this file is authorized only if
+%% you make absolutely no changes to your copy.
+%%
+%% Usage:
+%% \documentstyle[bnf]{article} %% in LaTeX
+%<+driver>\documentstyle[12pt,doc,bnf]{article}
+%<+driver>% Select paper size.
+%<+driver>\def\firstletter#1#2\end{#1}
+%<+driver>\typein[\papersize]{Intended paper size?^^J%
+%<+driver>Choices: US letter size or A4; enter u or a, please:}%
+%<+driver>\edef\setpapersize{\lowercase{\edef\noexpand\papersize{%
+%<+driver> \noexpand\firstletter\papersize u\noexpand\end}}}
+%<+driver>\setpapersize
+%<+driver>\if a\papersize\relax
+%<+driver> \typeout{%
+%<+driver>OK, adjusting textwidth and textheight for A4 paper size}
+%<+driver>% A4 paper size, 21cm x 30cm
+%<+driver> \textwidth 6.375 true in \textheight 42\baselineskip
+%<+driver>\else
+%<+driver> \typeout{%
+%<+driver>Adjusting textwidth and textheight for US letter paper size}
+%<+driver>% US letter-size paper, 8.5 x 11 in:
+%<+driver> \textwidth 6.5in \textheight 8.9in
+%<+driver>\fi
+%<+driver>\begin{document}
+%<+driver> \DocInput{bnf.doc}
+%<+driver>\end{document}
+%<*style>
+%\fi
+%
+\typeout{Backus-Naur Form style option for LaTeX, (c) Mike Piff, \filedate}
+%\CheckSum{334}
+%\MakeShortVerb{\"}
+%\emergencystretch1in
+%\title{{\protect\bf Backus Naur Form in \protect\LaTeX}}
+%\author{Mike Piff}
+%\date{\filedate}
+%\maketitle
+%\thispagestyle{headings}
+%\begin{abstract}
+% This article explains how to produce Backus-Naur Form
+% in a \LaTeX\ document.
+% The objective is to produce this notation as simply and efficiently
+% as possible.
+% Thus, short cuts looking like the teletype equivalents are set up
+% for most of the symbolism.
+% This has the advantage that the source looks generally comparable
+% to the typeset equivalent.
+%\end{abstract}
+%
+%\section{Introduction}
+%\begin{bnf}
+%The macros described below grew out of a sub-task of the \LaTeX-3 project.
+%The objective was to program \LaTeX\ to produce Backus-Naur Form, or BNF
+%for short, which is a way of describing the syntax of formal languages.
+%In particular, the context-free syntax of modern programming languages
+%and of \TeX\ itself are described in this notation.
+%
+%The idea is that we set up an extended language consisting of all of
+%the symbols that are part of our real language, the {\bf terminal}
+%symbols, such as "a", "(", "@" or "{", and also some {\bf non-terminal}
+%symbols which represent syntactic structures, such as
+%$<statement>$, $<space token>$ or $<module>$.
+%A list of {\bf productions} is then given.
+%In the usual {\bf context-free} case, each one of these productions states
+%that a certain non-terminal can be replaced by a string of terminal
+%and non-terminal symbols. For instance, a production might express the fact
+%that a $<statement>$ could be a $<while statement>$. We write
+%$$<statement>-><while statement>$$
+%in BNF. Another production might say
+%$$<while statement>->"WHILE" <condition> "DO" <statement sequence> "END"$$
+%to indicate the form of a while-loop in the language.
+%
+%In general there will be several productions from any given non-terminal.
+%For instance, a $<statement>$ could also be a $<for statement>$.
+%Each non-terminal defines a {\bf language} of strings or {\bf words}
+%in the terminal alphabet. Starting from the non-terminal, randomly
+%substitute a replacement string for it. Then, in that replacement string,
+%choose any non-terminal and randomly substitute one of its replacement
+%expressions. Continue randomly replacing non-terminals until a string
+%with no non-terminals results. This string is in the language defined
+%by the non-terminal. For instance, the non-terminal $<statement>$ would
+%define a language consisting of all valid statements in the programming
+%language, and a non-terminal $<module>$ would generate all valid
+%modules.
+%
+%Because it is possible for a non-terminal to expand to nothing at all,
+%we introduce the symbol $\Empty$ to indicate a null replacement string.
+%
+%In more complicated examples, we have {\bf context sensitive} productions,
+%such as
+%$$"a"<B>"cd"<E>->"d"<D>$$
+%which say that the string $"a"<B>"cd"<E>$ may be replaced by the string
+%$"d"<D>$ anywhere that it appears. There might not be any direct replacement
+%for either $<B>$ or $<E>$.
+%
+%Backus-Naur Form allows us to condense several productions into one
+%compound production.
+%Thus, the productions
+%\begin{eqnarray*}
+% <S>&->&"a"<B><D>"c"\\
+% <S>&->&"a"<C><D>"c"
+%\end{eqnarray*}
+%are condensed into the single production
+%$$<S>->"a"(<B>|<C>)<D>"c".$$
+%It indicates certain {\em alternatives\/} in the replacement.
+%
+%Similarly, the two productions
+%\begin{eqnarray*}
+% <S>&->&"a"<B><C>"c"<D>"c"\\
+% <S>&->&"a"<D>"c"
+%\end{eqnarray*}
+%can be condensed into
+%$$<S>->"a"[<B><C>"c"]<D>"c".$$
+%This indicates that a substring $s$ in the replacement string
+%is {\em optional}. We have the alternative form
+%$$<S>->"a"(<B><C>"c"|\Empty)<D>"c".$$
+%
+%
+%A more complex case is that of an unlimited number of repetitions of a
+%substring. For instance, identifiers are often defined as consisting of
+%a letter followed by arbitrarily many letters and digits.
+%An example might then be
+%\begin{eqnarray*}
+% <identifier>&->&<letter><sequence>\\
+% <sequence>&->&\Empty\\
+% <sequence>&->&<letter><sequence>\\
+% <sequence>&->&<digit><sequence>
+%\end{eqnarray*}
+%where it is assumed that these are the only productions that use the
+%non-terminal $<sequence>$. The above productions are condensed into
+%$$<identifier>-><letter>{@ <letter>|<digit>}.$$
+%
+%Further notation is used to express the fact that the string $w_2$ is
+%obtained from the string $w_1$ by the use of just one substitution defined
+%by one production. We write $w_1=>w_2$. If $w_2$ is obtainable from $w_1$
+%by a sequence of substitutions we write $w_1=>^*w_2$.
+%\end{bnf}
+%
+%\section{The macros}
+%The macros in "bnf.sty" can be used in one of two ways.
+%The first is to use the long forms of the commands to generate the
+%BNF notation. These only work in mathematics mode.
+%
+%The second is to
+%surround the block where BNF notation is required within a "bnf"
+%environment, or to use the command "\bnf" locally or globally.
+%In either case, the effect is to change the meaning of certain characters
+%in the input stream when they are met in mathematics mode. This makes
+%it possible to use the short forms of the commands.
+%
+%We first describe the long forms of the commands.
+%
+%The notation $\begin{NonTerminal}non terminal\end{NonTerminal}$
+%is produced by the environment "NonTerminal",
+%surrounding the name of the symbol. Spaces in the name are respected, and
+%the font used is governed by the definition of "\NonTerminalStyle".
+%
+%A terminal letter or string is produced by the command "\Terminal",
+%which equates to "\verb*" in \LaTeX; thus \verb*|\Terminal"xy z"|
+%produces $\Terminal"xy z"$, and \verb*|\Terminal`"`|
+%produces~$\Terminal`"`$.
+%By redefining the commands "\PreTerminal" and "\PostTerminal", the
+%terminal strings can be started and ended with given strings; for instance,
+%we might want all such terminal strings to begin and end with a
+%double quote symbol. We could achieve this by means of the following
+%definitions.
+%\begin{verbatim}
+% \def\PreTerminal{\mbox{\tt"}} \let\PostTerminal\PreTerminal
+%\end{verbatim}
+%The empty string $\Empty$ is generated
+%by "\Empty".
+%
+%The production symbol $\Production$ is produced by "\Production", while
+%"\Yields" yields $\Yields$. The alternative symbol $\OR$ is "\OR",
+%and the optional brackets $\Optional w_1\endOptional$ are generated by
+%the environment "Optional". Environment "Star" will generate the
+%repetition braces $\Star w_2\endStar$. Ordinary round meta-brackets
+%$\Bracket w_3\endBracket$ are generated by the "Bracket" environment.
+%
+%Here is an example, taken from Modula-2.
+%\begin{verbatim}
+%$$ \begin{NonTerminal}Case Statement\end{NonTerminal}
+% \Production\Terminal"CASE"
+% \begin{NonTerminal}expression\end{NonTerminal}
+% \Terminal"OF"
+% \begin{NonTerminal}case\end{NonTerminal}
+% \begin{Star}
+% \Terminal"|"\begin{NonTerminal}case\end{NonTerminal}
+% \end{Star}
+% \begin{Optional}
+% \Terminal"ELSE"
+% \begin{NonTerminal}Statement Sequence\end{NonTerminal}
+% \end{Optional}
+% \Terminal"END" $$
+%\end{verbatim}
+%{\small
+%$$ \begin{NonTerminal}Case Statement\end{NonTerminal}
+% \Production\Terminal"CASE"
+% \begin{NonTerminal}expression\end{NonTerminal}
+% \Terminal"OF"
+% \begin{NonTerminal}case\end{NonTerminal}
+% \begin{Star}
+% \Terminal"|"\begin{NonTerminal}case\end{NonTerminal}
+% \end{Star}
+% \begin{Optional}
+% \Terminal"ELSE"
+% \begin{NonTerminal}Statement Sequence\end{NonTerminal}
+% \end{Optional}
+% \Terminal"END" $$
+%}%
+%
+%\begin{bnf}
+%The short forms are now described. We can get $<A>$ by typing "<A>",
+%and
+%\DeleteShortVerb\"
+%$"ab c"$
+%\MakeShortVerb\"
+%by typing \verb*|"ab c"| or \verb*|`ab c`|. The pairs "->" and "=>" give
+%$->$ and $=>$ respectively, and $[s_1](s_2|s_3)$ is obtained by
+%typing "[s_1](s_2|s_3)". Notice that these yield "\left" and "\right"
+%style brackets. The Star environment ${@w}$ can be produced by
+%"{@w}". There seemed to be no obvious way to obtain this one
+%directly from the braces. The "@" symbol produces a "Star" group
+%starting at the current point and ending at the end of the current group.
+%Thus, it must be used within grouping brackets "{" and~"}".
+%
+%There is another restriction on the use of "@". Because we might also want to
+%produce $@<$ and $@>$ in some BNF text, these can be obtained by using
+%the pairs "@<" and "@>". An alternative that is provided is to use
+%"\lt" and~"\gt". Otherwise "<" and ">" will attempt to open and close
+%a "NonTerminal" environment, probably unsuccessfully.
+%\end{bnf}
+%
+%Here are some examples of the short forms.
+%\begin{verbatim}
+%\begin{bnf}
+% \begin{eqnarray*}
+% <assignment>& -> & <non-macro assignment> | <macro assignment>\\
+% <equals> & ->& <optional spaces> | <optional spaces>"="_{12}\\
+% <def>&->&"\def"|"\gdef"|"\edef"|"\xdef"\\
+% <normal integer>&->&<integer constant>\\
+% &&|<integer constant><one optional space>\\
+% &&|"'"_{12}<octal constant><one optional space>\\
+% &&|`"`_{12}<hexadecimal constant><one optional space>\\
+% &&|"`"_{12}<character token><one optional space>\\
+% <S>&->& "a" <B>\\
+% <S>&->&\Empty\\
+% <B>&->& "b" <B>\\
+% <B>&->&{@ a{@ b{@ c{@ d{@ e<B>}}}}}\\
+% <B>&->& ["c"{@"ab"}"d"] | {@ {@"aba"}["d"]{@"baab"}}
+% \end{eqnarray*}
+%\end{bnf}
+%\end{verbatim}
+%\begin{bnf}
+% \begin{eqnarray*}
+% <assignment>& -> & <non-macro assignment> | <macro assignment>\\
+% <equals> & ->& <optional spaces> | <optional spaces>"="_{12}\\
+% <def>&->&"\def"|"\gdef"|"\edef"|"\xdef"\\
+% <normal integer>&->&<integer constant>\\
+% &&|<integer constant><one optional space>\\
+% &&|"'"_{12}<octal constant><one optional space>\\
+% &&|`"`_{12}<hexadecimal constant><one optional space>\\
+% &&|"`"_{12}<character token><one optional space>\\
+% <S>&->& "a" <B>\\
+% <S>&->&\Empty\\
+% <B>&->& "b" <B>\\
+% <B>&->&{@ a{@ b{@ c{@ d{@ e<B>}}}}}\\
+% <B>&->& ["c"{@"ab"}"d"] | {@ {@"aba"}["d"]{@"baab"}}
+% \end{eqnarray*}
+%\end{bnf}
+%
+%\StopEventually{}
+%\section{Implementation of the long forms}
+%The "NonTerminal" environment is easy to implement.
+%We set nonterminal letters in roman by default, that is, maths family~0,
+%and make sure that spaces are respected. The boolean is there to
+%make the checking of the short forms easier later. Certain characters
+%can be excluded from the text of a nonterminal, and an error message
+%issued if they are encountered.
+% \begin{macrocode}
+\newif\ifnonterminal
+\def\NonTerminal{\left\langle\obeyspaces\ControlSpaces
+ \nonterminaltrue\NonTerminalStyle}
+\def\endNonTerminal{\right\rangle}
+\def\NonTerminalStyle{\fam0 }
+{\obeyspaces\gdef\ControlSpaces{\let =\ }}
+% \end{macrocode}
+%
+%The "Star", "Optional" and "Bracket" environments are all similar.
+%A small amount of extra space has been introduced round each,
+%to improve their appearance.
+% \begin{macrocode}
+\def\Star{\,\left\{} \def\endStar{\right\}\,}
+\def\Optional{\,\left[} \def\endOptional{\right]\,}
+\def\Bracket{\,\left(} \def\endBracket{\right)\,}
+% \end{macrocode}
+%
+%The single symbols have easy definitions.
+% \begin{macrocode}
+\def\OR{\mathop{\left|\right.}\nolimits}
+\def\Production{\mathrel{\longrightarrow}}
+\def\Yields{\mathrel{\Longrightarrow}}
+\def\Empty{\varepsilon}
+% \end{macrocode}
+%
+%By far the most difficult effect to produce is that of a terminal.
+%We could make "\Terminal" expand to "\verb*", but that prevents us
+%from including extra text before and after the terminal string.
+%Thus a definition similar to that of "\verb*" from NFSS is included.
+% \begin{macrocode}
+\begingroup
+ \catcode`\`=\active
+ \gdef\TerminalFont{\tt \catcode96\active
+ \def`{\leavevmode\kern\z@\char96 }}
+\endgroup
+\begingroup
+ \catcode`\~=\active
+ \lccode`\~=`\^^M
+ \lowercase{\endgroup
+ \gdef\Terminal{\relax\PreTerminal
+ \ifmmode \hbox \else \leavevmode\null \fi
+ \bgroup
+ \TerminalFont
+ \catcode`~\active
+ \def~{\egroup\@latexerr{Terminal string ended by
+ end of line.}\@ehc}%
+ \let\do\@makeother \dospecials
+ \@sTerminal}}
+\def\@sTerminal#1{%
+ \catcode`#1\active
+ \lccode`\~`#1%
+ \lowercase{\def~{\egroup\PostTerminal}}}%
+% \end{macrocode}
+%The default leading and trailing text is defined to be empty.
+% \begin{macrocode}
+\def\PreTerminal{} \def\PostTerminal{}
+% \end{macrocode}
+%
+%\section{Implementation of the short forms}
+%
+%Our first task is to make $<$ and $>$ available as mathematical symbols.
+% \begin{macrocode}
+\mathchardef\lt="313C \mathchardef\gt="313E
+% \end{macrocode}
+%The next task is more subtle, and at first puzzled the author when he
+%tried to make a preliminary version of these macros work.
+%The problem is that we are making "-" into an active character.
+%If we do this we find that it tries to expand in text as well, and so
+%we make sure that it only expands in maths mode.
+%Our objective is to make "->" expand to $\Production$, but here is
+%where things go wrong. In plain \TeX, the control sequence
+%"\longrightarrow" is defined to expand to a "\relbar" and a "\rightarrow".
+%In turn, a relbar expands to yield a "-" again, and so we are in an
+%infinite loop.
+%
+%The solution seems to be to abandon the definition of "\relbar" in
+%plain \TeX\ and produce our own. The same applies to "=" and "\Relbar".
+%We also make a hyphen available for use within nonterminals.
+% \begin{macrocode}
+\mathchardef\HYPHEN="2D \mathchardef\MINUS="2200
+\mathchardef\Relbar="303D \def\relbar{\mathrel{\smash{\MINUS}}}
+\mathchardef\EQUALS="303D
+% \end{macrocode}
+%
+%We next define "\bnf" to set the mathcodes of the characters we wish to
+%use to the active value \verb|"8000|. Thus in text they will behave as
+%normal characters, but in mathematics they will expand as though they were
+%active characters. We also allow "bnf" to be an environment.
+% \begin{macrocode}
+\def\mathactive{"8000}
+\def\bnf{%
+ \mathcode`"=\mathactive
+ \mathcode`[=\mathactive \mathcode`\]=\mathactive
+ \mathcode`(=\mathactive \mathcode`\)=\mathactive
+ \mathcode`|=\mathactive \mathcode`-=\mathactive
+ \mathcode`<=\mathactive \mathcode`\>=\mathactive
+ \mathcode`@=\mathactive \mathcode`==\mathactive
+ \mathcode96 \mathactive
+}
+\def\endbnf{}
+% \end{macrocode}
+%
+%Several characters are not allowed to appear in nonterminal names,
+%and so we define an error message to warn the user.
+% \begin{macrocode}
+\def\NotInNonTerminal{\errmessage{Not allowed in a non-terminal}}
+% \end{macrocode}
+%
+%Several of our mathactive characters have similar definitions;
+%we use this fact to allow some condensation of our file.
+% \begin{macrocode}
+\def\NotNTdef#1#2{\gdef#1{\ifnonterminal\NotInNonTerminal\else#2\fi}}
+% \end{macrocode}
+%
+%The expansion text of all our mathactive characters must be defined
+%inside a group in which they are all active.
+% \begin{macrocode}
+\begingroup
+ \catcode`"\active
+ \catcode`[\active \catcode`\]\active
+ \catcode`(\active \catcode`\)\active
+ \catcode`|\active \catcode`-\active
+ \catcode`<\active \catcode`>\active
+ \catcode`@\active \catcode`=\active
+ \catcode96 \active
+% \end{macrocode}
+%First we have the two short forms of "\Terminal".
+% \begin{macrocode}
+ \gdef"{\Terminal"}%
+ \gdef`{\Terminal`}%
+% \end{macrocode}
+%Next a block of definitions of characters which are illegal inside
+%nonterminals.
+% \begin{macrocode}
+ \NotNTdef[\Optional \NotNTdef]\endOptional
+ \NotNTdef(\Bracket \NotNTdef)\endBracket
+ \NotNTdef|\OR \NotNTdef<\NonTerminal
+% \end{macrocode}
+%The end of a nonterminal has to be defined directly, of course.
+% \begin{macrocode}
+ \gdef>{\endNonTerminal}%
+% \end{macrocode}
+%A "-" character in a nonterminal is just a hyphen, but otherwise it
+%could possibly be a production arrow.
+% \begin{macrocode}
+ \gdef-{%
+ \ifnonterminal
+ \def\Nnext{\HYPHEN}%
+ \else
+ \def\Nnext{\futurelet\Next\SeeIfProdn}%
+ \fi\Nnext}
+% \end{macrocode}
+%The "=" character, on the other hand, should not appear in a nonterminal.
+%Otherwise, it could be a yields arrow.
+% \begin{macrocode}
+ \gdef={%
+ \ifnonterminal
+ \def\Nnext{\NotInNonTerminal}%
+ \else
+ \def\Nnext{\futurelet\Next\SeeIfYields}%
+ \fi\Nnext}%
+% \end{macrocode}
+%The "@" character should examine the next character to see whether it should
+%be given a special treatment.
+% \begin{macrocode}
+ \gdef@{% either an escape char or a star group
+ \ifnonterminal
+ \def\Nnext{\NotInNonTerminal}%
+ \else
+ \def\Nnext{\futurelet\Next\SeeIfSpecial}%
+ \fi\Nnext}%
+\endgroup
+% \end{macrocode}
+%
+%All that remains now is to see that the checks used above
+%are defined. First we have the check for a production.
+% \begin{macrocode}
+\def\SeeIfProdn{%
+ \if\noexpand\Next\noexpand>%
+ \def\Nnext{\Production\@gobble}%
+ \else
+ \def\Nnext{\MINUS}%
+ \fi
+ \Nnext}
+% \end{macrocode}
+%Second we have the check for a yields.
+% \begin{macrocode}
+\def\SeeIfYields{%
+ \if\noexpand\Next\noexpand>%
+ \def\Nnext{\Yields\@gobble}%
+ \else
+ \def\Nnext{\EQUALS}%
+ \fi\Nnext}
+% \end{macrocode}
+%Finally the "@" character must produce a "Star" environment unless it
+%is immediately followed by "<" or~">".
+% \begin{macrocode}
+\def\SeeIfSpecial{%
+ \if\noexpand\Next\noexpand<%
+ \def\Nnext{\lt\@gobble}%
+ \else
+ \if\noexpand\Next\noexpand>%
+ \def\Nnext{\gt\@gobble}%
+ \else
+ \def\Nnext{\Star\bgroup\aftergroup\endStar\aftergroup\egroup}%
+ \fi
+ \fi\Nnext}
+% \end{macrocode}
+%\Finale
+
+%\endinput
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Dr M J Piff %% e-mail:
+%% Department of Pure Mathematics %%
+%% University of Sheffield %% M.Piff@sheffield.ac.uk
+%% Hicks Building %% M.Piff@pa.shef.ac.uk
+%% Hounsfield Road %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% SHEFFIELD S3 7RH %% Telephone: SHEFFIELD (0742) 768555
+%% England %% Ext. 4431
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/obsolete/macros/latex209/contrib/curves/curves.sty b/obsolete/macros/latex209/contrib/curves/curves.sty
new file mode 100644
index 0000000000..81c4169eb0
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/curves/curves.sty
@@ -0,0 +1,522 @@
+% curves.sty version 1.42 for LaTeX 2.09, SLiTeX, and LaTeX2e.
+% I.L. Maclaine-cross, The University of New South Wales.
+% Internet: i.maclaine-cross@unsw.edu.au
+\typeout{Document Style Option `curves' <12 August 2000>}
+% Draws curves in LaTeX picture environment using parabolas between points
+% with continuous slope at points. Equivalent to technical pens with
+% compasses and French curves.
+% A Command Summary is at the end of this file.
+%
+% curvesls.sty is a faster equivalent requiring less memory which uses
+% straight line drawing \specials like emTeX's.
+
+% Make `;' appear like a letter so control sequences can use it and they
+% will not be accidently used by other macro packages.
+\catcode`\;=11
+
+\newcount\;sc % number of symbols on Bezier segment
+\newcount\;scp
+\newcount\;t
+\newcount\;cc % coordinate count
+\newcount\;cnd % actual point count to next dot
+\newcount\;mcnd % maximum point count to next dot
+\newcount\;np
+\newcount\;overhang
+\newcount\;pns
+\newcount\;psc % maximum dot spacing on line in sp.
+\newcount\;pbs
+\newcount\;rc
+\newcount\;rtc
+\newcount\;tc
+\let\;tca=\@tempcnta
+\let\;tcb=\@tempcntb
+
+\newdimen\csdiameter
+\newdimen\curvelength
+\newdimen\overhang \overhang\z@
+\newdimen\;dx
+\newdimen\;ddx
+\newdimen\;dy
+\newdimen\;ddy
+\newdimen\;pl \;pl\z@
+\newdimen\;ucd
+\newdimen\;y
+\let\;td=\@tempdima
+\let\;ytd=\@tempdimb
+
+\newsavebox{\;csbox}
+\newsavebox{\;pt}
+
+\newif\ifcurvewarn \curvewarntrue % Warn about curve problems
+\newif\if;ccn % coordinate number correct
+\newif\if;pt % plot points if true
+\newif\if;csym % curve symbol defined
+\newif\if;scnt % symbol or pattern count <>0
+
+\newhelp\;strline{curve straight from}
+\newhelp\m;ssingcoord{curve needs more points, add them.}
+\newhelp\;negdash{curvedashes needs the same sign for all arguments.}
+\newhelp\;oddcoord{curve requires two co-ordinates for each point,
+ count them.}
+
+\newcommand\arc{\@ifnextchar[\;arc{\;arc[0]}}
+\newcommand\;arc{}
+\def\;arc[#1](#2,#3)#4{\;setpoint{#1}\scaleput(#2,#3){\;ddx-#3\unitlength
+ \;ddy#2\unitlength \;firstpoint \;td#4\p@ \;drwarc}}
+
+
+% Redefines version in LaTeX 2e of 1 June 1994.
+\def\bezier#1)#2(#3)#4({\@bezier#1)(#3)(}
+\def\@bezier#1(#2,#3)(#4,#5)(#6,#7){\;dx#4\unitlength \;ddx-\;dx
+ \advance\;dx-#2\unitlength \advance\;ddx#6\unitlength \;dy#5\unitlength
+ \;ddy-\;dy \advance\;dy-#3\unitlength \advance\;ddy#7\unitlength
+ \;setpoint{#1}\scaleput(#2,#3){\;firstpoint \;bezier}}
+
+\newcommand\bigcircle{\@ifnextchar[\;bgcrcl{\;bgcrcl[0]}}
+\newcommand\;bgcrcl{}
+\def\;bgcrcl[#1]#2{\;setpoint{#1}\;dx\unitlength \global\divide\unitlength\tw@
+ \scaleput(#2,0){\;ddx\z@ \;ddy#2\unitlength \global\unitlength\;dx \;td360\p@
+ \;drwarc}}
+
+\newcommand\closecurve{\@ifnextchar[\;closecurve{\;closecurve[0]}}
+\newcommand\;closecurve{}
+\def\;closecurve[#1](#2){\;coordn\closecurve\thr@@{#2}{#1}%
+ \if;ccn\scaleput(\;xb,\;yb){\edef\;ci{\;xa,\;ya,#2,\;xb,\;yb,\;xc,\;yc}%
+ \advance\;cc\thr@@ \;tagcurve\;ci}\fi}
+
+\newcommand\curve{\@ifnextchar[\;curve{\;curve[0]}}
+\newcommand\;curve{}
+\def\;curve[#1](#2){\;coordn\curve\tw@{#2}{#1}%
+ \if;ccn \scaleput(\;xa,\;ya){\;firstpoint
+ \ifnum\;cc=\tw@ \;slbezd \;slbez
+ \else \;scbezd\;dx\;ddx\;xa\;xb\;xc \;scbezd\;dy\;ddy\;ya\;yb\;yc
+ \;bezier \;tagcurve{#2}\ifnum\;cc>6\;endcurve\fi \fi}\fi}
+\newcommand\;scbezd[5]{\;slcd#2#3#5\divide#24\;slcd#1#3#4\advance#1-#2}
+\newcommand\;xa{} \newcommand\;xb{} \newcommand\;xc{}
+\newcommand\;ya{} \newcommand\;yb{} \newcommand\;yc{}
+\newcommand\;ci{}
+
+\newcommand\curvesymbol[1]{\def\;curvesymbol{#1}\ch;ckcs
+ \global\setbox\;csbox\hbox{#1}\csdiameter\wd\;csbox}
+\newcommand\;curvesymbol{} \def\;curvesymbol{}
+
+\newcommand\curvedashes{\@ifnextchar[\;crvdshs{\;crvdshs[\unitlength]}}
+\newcommand\;crvdshs{}
+\def\;crvdshs[#1]#2{\;ucd#1\def\;icurvedashes{#2}\;ccnfalse \;pl\z@
+ \@for \;ci:=#2\do{\ifdim\;ci\;ucd<\z@ \;ccntrue \@latexerr{\string
+ \curvedashes\space sign bad at \;ci}{\the\;negdash ^^J\@eha}%
+ \else \advance\;pl\;ci\;ucd \fi}\if;ccn\;pl\z@\fi}
+\newcommand\;icurvedashes{}
+
+\newcommand\diskpitchstretch{\@ne}
+
+\newcommand\tagcurve{\@ifnextchar[\;tgcrv{\;tgcrv[0]}}
+\newcommand\;tgcrv{}
+\def\;tgcrv[#1](#2){\;coordn\tagcurve\thr@@{#2}{#1}\if;ccn
+ \scaleput(\;xb,\;yb){\;firstpoint \;tagcurve{#2}}\fi}
+
+\newcommand\scaleput{}
+\long\def\scaleput(#1,#2)#3{\@killglue \;td#2\unitlength
+ \raise\yscale\;td \hbox to \z@{\kern\xscaley\;td \;td#1\unitlength
+ \kern\xscale\;td \raise\yscalex\;td \hbox{#3}\hss}\ignorespaces}
+\newcommand\xscale{\@ne}
+\newcommand\xscaley{0}
+\newcommand\yscale{\@ne}
+\newcommand\yscalex{0}
+
+% Plot first point if any.
+\newcommand\;firstpoint{\ifdim\;pl=\z@\;point\fi}
+
+% Calculates segment count, sine, cosine and differences then plots segments.
+\newcommand\;drwarc{\;cc\;td \;np\;td \;td23\p@ \divide\;cc\;td
+ \;abs\;cc \advance\;cc\@ne \;pns\p@ \divide\;pns\tw@
+ \divide\;np\;cc \;rc\;np \divide\;rc\;pns \;abs\;rc
+ \advance\;rc\@ne \divide\;np\;rc \multiply\;np\;pns \divide\;np14668 %
+ \multiply\;np\;rc \divide\;np\@cclvi \;scp\p@ \multiply\;scp\@cclvi
+ \;t\;pns \;csi\;csi\;csi\;csi \;rxy\;ddx\;ddy \divide\;rc\p@
+ \advance\;rc\@ne \;rtc\;rc \advance\;rc\;rc \;ndd\;ddx \;ndd\;ddy
+ \;csi \;rxy\;ddx\;ddy \divide\;rc\;pns \advance\;rc\@ne
+ \@whilenum\;cc>\z@ \do{\advance\;cc\m@ne \;dx\;ddx \;dy\;ddy
+ \divide\;ddx\;rc \divide\;ddy\;rc \;td\;ddx \;ddx\;t\;td
+ \advance\;ddx-\;np\;ddy \;ddy\;t\;ddy \advance\;ddy\;np\;td
+ \divide\;ddx\;pns \divide\;ddy\;pns \;ddx\;rc\;ddx \;ddy\;rc\;ddy
+ {\;bezier \global\;ytd\;y \global\;tca\;overhang}\;y\;ytd \;overhang\;tca}}
+\newcommand\;ndd[1]{\divide#1\;rc \multiply#1\;np \divide#1\;t #1\;rtc#1}
+% Cosine and sine half angle iteration.
+\newcommand\;csi{\;tcb\;np \multiply\;np\;t \divide\;np\;pns \;t\;tcb
+ \multiply\;t\;t \divide\;t-\;scp \advance\;t\;pns \divide\;scp4 }
+
+% Count the number of co-ordinate specified and warns if incorrect.
+\newcommand\;coordn[4]{\;setpoint{#4}\ifx#1\closecurve\;cc\tw@\else\;cc\z@\fi
+ \@for\;ci:=#3\do{\advance\;cc\@ne
+ \ifcase\;cc \or \;d;f\;xa \or \;d;f\;ya \or \;d;f\;xb
+ \or \;d;f\;yb \or \;d;f\;xc \or \;d;f\;yc \fi
+ \ifx#1\closecurve\ifodd\;cc \;d;f\;xa \else \;d;f\;ya \fi\fi}%
+ \;ccnfalse \ifx#1\closecurve \advance\;cc-\tw@ \fi
+ \ifodd\;cc \@latexerr{\string #1\space points odd}{\the\;oddcoord ^^J\@eha}%
+ \else \divide\;cc\tw@
+ \ifnum#2>\;cc \@latexerr{\string #1 needs \the#2 points}%
+ {\the\m;ssingcoord ^^J\@eha}%
+ \else \;ccntrue \fi\fi}
+
+% Sets symbol, character or disk depending on how line is to be plotted.
+% Corrects overhang to be positive or zero but no greater than \;pl.
+\newcommand\;setpoint[1]{\curvelength\z@ \def\;po;nt{\raise\;y\copy\;pt}\ch;ckcs
+ \ifnum#1=\z@\;scntfalse\else\;scnttrue\fi \;sc#1\relax \;abs\;sc \;psc\;sc
+ \ifdim\;pl>\z@ \;overhang\overhang
+ \ifnum\;overhang=\z@\else \;np\;overhang \divide\;np\;pl \multiply\;np\;pl
+ \ifnum\;overhang<\z@ \advance\;overhang\;pl
+ \else \ifnum\;overhang=\;np\advance\;overhang\;pl\fi
+ \fi \advance\;overhang-\;np
+ \fi \if;csym \if;scnt\;setdisk\else\;setsymbol\;td\p@\fi \else \;setdisk \fi
+ \s;tpitch
+ \else\ifnum#1>\z@ \s;tcirc{\hss\vrule\@height\@wholewidth\@width\@wholewidth}%
+ \else\ifnum#1<\z@ \if;csym\;setsymbol\else\set;pt{}\fi
+ \else \;setdisk \s;tpitch \fi\fi\fi
+ \edef\;point{\;po;nt}\;y\dp\;pt \advance\;y-\ht\;pt \divide\;y\tw@}
+\newcommand\;setsymbol{\s;tcirc{\hss\unhcopy\;csbox}\edef\;po;nt{\;po;nt
+ \s;tcirc{\hss\noexpand\noexpand\noexpand\;curvesymbol}%
+ \global\setbox\;csbox\copy\;pt}}
+\newcommand\s;tpitch{\;td\diskpitchstretch\;td \;psc\;td}
+\newcommand\;po;nt{} \newcommand\;point{}
+
+% Sets LaTeX disk character and calculates maximum spacing or selects period.
+\newcommand\;setdisk{\ifdim\@halfwidth>.85\p@
+ \s;tcirc{\@circ{\@wholewidth}{112}}\;td\@wholewidth
+ \divide\;td 8\advance\;td.6\p@ \ifdim\;td>\thr@@\p@\;td\thr@@\p@\fi
+ \else \;setperiod \fi}%
+
+% OFSS, SLiTeX or NFSS version for period selected at load time.
+% NFSS fix requested by Peter Vanroose and
+% Michel Goossens who also supplied a workable patch.
+\@ifundefined{selectfont}{\@ifundefined{fourteenrm}{%
+\newcommand\;setperiod{\ifdim\@halfwidth>.6\p@ \let\;ci\svtnrm \;td.7\p@
+ \else\ifdim\@wholewidth>.85\p@ \let\;ci\twlrm \;td.48\p@
+ \else \ifdim\@wholewidth>.6\p@ \let\;ci\egtrm \else \let\;ci\fivrm \fi
+ \;td.34\p@ \fi\fi \s;tcirc{\;ci\hss.}}%
+ }{%
+\newcommand\;setperiod{\;td.7\p@ \s;tcirc{\fourteenrm\hss.}}%
+ }}{%
+\newcommand\;setperiod{%
+ \ifdim\@halfwidth>.6\p@ \;tcb17\;td.7\p@
+ \else\ifdim\@wholewidth>.85\p@ \;tcb12\;td.48\p@
+ \else \ifdim\@wholewidth>.6\p@ \;tcb8\else \;tcb5\fi \;td.34\p@ \fi\fi
+ \s;tcirc{\rm \fontseries m\fontshape n\fontsize{\the\;tcb}\p@
+ \selectfont \hss.}}%
+ }
+
+% Check if curvesymbol exists and set switch.
+\newcommand\ch;ckcs{\ifx\;curvesymbol\@empty\;csymfalse\else\;csymtrue\fi}
+
+% Makes zero width box \;pt of point
+\newcommand\s;tcirc[1]{\set;pt to\z@{#1\hss}}
+
+% Set global box \;pt
+\newcommand\set;pt{\global\setbox\;pt\hbox}
+
+% Plots last segment of curve from coordinates already read.
+\newcommand\;endcurve{\;ecbezd\;dx\;ddx\;xa\;xb\;xc
+ \;ecbezd\;dy\;ddy\;ya\;yb\;yc \;bezier}
+\newcommand\;ecbezd[5]{\;slcd#1#3#5\divide#14 #2-#1\advance#2#5\unitlength
+ \advance#2-#4\unitlength}
+
+% Reads coordinates of four points before going to difference calculation.
+\newcommand\;tagcurve[1]{\ifnum\;cc=\thr@@ \;endcurve \else \;cc\z@
+ \@for\;ci:=#1\do{\advance\;cc\@ne \ifnum\;cc>6 %
+ \ifodd\;cc \;slcd\;dx\;xa\;xc \let\;xa\;xb \let\;xb\;xc \;d;f\;xc
+ \else \t;gcrv \fi \fi}\fi}
+
+% Calculates differences over whole segment from four points.
+\newcommand\t;gcrv{\;slcd\;dy\;ya\;yc \let\;ya\;yb \let\;yb\;yc \;d;f\;yc
+ \;rxy\;dx\;dy \divide\;dx\;rtc \divide\;dy\;rtc
+ \;ddx-\;ya\;dx \advance\;ddx\;xa\;dy \;ddy\;ddx
+ \advance\;ddx\;yb\;dx \advance\;ddx-\;xb\;dy
+ \advance\;ddy\;yc\;dx \advance\;ddy-\;xc\;dy
+ \;slbezd \;td\;ddy \divide\;td\@m
+ \ifdim\;td=\z@ \ifcurvewarn
+ \@warning{\the\;strline \;xa,\;ya\space to \;xb,\;yb}\fi \;slbez
+ \else \;td\unitlength \;rtc\;td \advance\;rtc\;rtc
+ \divide\;rtc\p@ \advance\;rtc\@ne \divide\;td\;rtc
+ \;t\;ddx \;scp\;t \;abs\;t
+ \advance\;t\;t \divide\;t\p@ \advance\;t\@ne \divide\;scp\;t
+ \multiply\;td\;scp \divide\;td\;ddy \multiply\;td\;rtc \multiply\;td\;t
+ \;ddx\;xc\;td \advance\;ddx-\;xa\;td \advance\;dx-\;ddx
+ \;ddy\;yc\;td \advance\;ddy-\;ya\;td \advance\;dy-\;ddy \;bezier \fi}
+
+% Avoid repeating {\;ci}
+\newcommand\;d;f[1]{\edef#1{\;ci}}
+
+\newcommand\;slbezd{\;slcd\;dx\;xa\;xb \;slcd\;dy\;ya\;yb}
+
+% Calculates difference between two coordinates.
+\newcommand\;slcd[3]{#1#3\unitlength \advance#1-#2\unitlength}
+
+% Calculates differences for bezier straight line.
+\newcommand\;slbez{\divide\;dx\tw@ \;ddx\;dx \divide\;dy\tw@ \;ddy\;dy \;bezier}
+
+% Scales segment differences, then calculates segment pattern and disk count,
+% and initial disk differences; selects line or dashes.
+\newcommand\;bezier{\;scale\;dx\;dy \;scp\;rc \;np\;rc \;scale\;ddx\;ddy
+ \ifnum\;rc>\;np\;np\;rc\fi \advance\;np\;np
+ \advance\;scp\;rc \;bezc\;dx\;ddx \;bezc\;dy\;ddy \;rxy\;ddx\;ddy
+ \divide\;rc\p@ \advance\;rc\thr@@
+ \;tc\;rc \;sroot\;sroot\;sroot \;tca\;rc \;rxy\;dx\;dy
+ \advance\;rc\;scp \divide\;rc\thr@@ \global\advance\curvelength\;rc sp%
+ \divide\;np\;psc \ifnum\;np<\@ne\;np\@ne\fi \;t\;np
+ \if;scnt\ifdim\;pl=\z@ \;t\;sc
+ \else\;np
+ \if;csym \;rc \divide\;np\;sc \advance\;np-\csdiameter
+ \;td\;pl \divide\;td\tw@ \advance\;np\;td \divide\;np\;pl
+ \ifnum\;np<\@ne\;np\@ne\fi \multiply\;np\;sc
+ \else \;sc \fi \advance\;t\;np \divide\;t\;np \multiply\;t\;np
+ \fi \fi
+ \ifnum\;t>\;tca \;mcnd\;t \divide\;mcnd\;tca \else \;mcnd\@ne \;tca\;t \fi
+ \;tc\;t \advance\;tc\;tc \;rtc\;tc
+ \;tcb\;tca \advance\;tcb\@ne \multiply\;tcb\;mcnd \advance\;rtc-\;tcb
+ \multiply\;rtc\;tca \;tcb\;t \multiply\;tcb\;tcb \divide\;tcb\;mcnd
+ \;bezd\;dx\;ddx \;bezd\;dy\;ddy \edef\;tplot{\;po;nts}\;cnd\;mcnd
+ \ifdim\;pl>\z@ \;dashes \else \;points \fi}
+\newcommand\;scale[2]{\;td\xscale#1\advance\;td\xscaley#2%
+ #2\yscale#2\advance#2\yscalex#1#1\;td \;rxy#1#2}
+\newcommand\;bezc[2]{\advance#1#1\advance#2#2\;td#2\advance#2-#1\advance#1\;td}
+\newcommand\;bezd[2]{\divide#2\;tcb \;td#2\multiply\;td\;rtc \advance#1-\;td
+ \divide#1\;tc}
+
+% Calculates length of vector \;rc from coordinates #1,#2
+\newcommand\;rxy[2]{\;tc#1\;abs\;tc \;tcb#2\;abs\;tcb
+ \;rc\;tc \advance\;rc\;tcb
+ \ifnum\;rc>\z@ \;rtc\;rc \advance\;rtc\;rtc \divide\;rtc\p@
+ \ifnum\;rtc>\z@ \advance\;rtc\@ne \divide\;tc\;rtc
+ \divide\;tcb\;rtc \divide\;rc\;rtc
+ \else \;rtc\@ne \fi \multiply\;tc\;tc \multiply\;tcb\;tcb
+ \advance\;tc\;tcb \;sroot \multiply\;rc\;rtc \fi}
+
+% Replaces argument by magnitude
+\newcommand\;abs[1]{\ifnum#1<\z@ #1-#1\fi}
+
+% Iteration of square root calculation by Newton's method.
+\newcommand\;sroot{\;rroot\;rroot\;rroot}
+\newcommand\;rroot{\;tcb\;tc \divide\;tcb\;rc \advance\;rc\;tcb \divide\;rc\tw@}
+
+% Variable uses in \;dashes, \;scdashes, \;nscdashes, \;pdashes and \;dash.
+% counts
+% \;scp = distance between points.
+% \;rc = length of Bezier segment.
+% \;rtc = total points in Bezier segment.
+% \;np = number of whole patterns in Bezier segment or scratch.
+% \;overhang = of dash pattern past symbol or end of segment.
+% \;pbs = total points between symbols
+% \;pns = points to next symbol or dot.
+% \;tc = number of points to blank for curve symbol.
+% \;tcb = number of points along pattern.
+% dimens
+% \;pl = length of dash pattern.
+% \;ucd = dash pattern unit length.
+
+% Initializes dash plot for segment and selects symbol count alternative.
+\newcommand\;dashes{\let\;ticd\;icurvedashes \let\;tucd\;ucd \divide\;rc\;t
+ \;rtc\;t \;tc\;rc \advance\;tc\csdiameter \divide\;tc\;rc
+ \divide\;tc\tw@ \;t\;tc \multiply\;tc\tw@ \;ptfalse
+ \;pbs\;rc \divide\;pbs\tw@ \advance\;overhang\;pbs \divide\;overhang-\;rc
+ \if;scnt \;scdashes \else \;nscdashes \fi \multiply\;overhang\;rc}
+
+% Plots dash pattern when a nonzero symbol count is specified.
+\newcommand\;scdashes{\;pbs\;rtc \divide\;pbs\;sc \;ccss \;scp
+ \if;csym \;pl \multiply\;scp\;np \divide\;scp\;sc \advance\;pbs-\;tc
+ \else \;pbs \multiply\;scp\;rc \fi \;np\;overhang \;overhang\z@
+ \divide\;scp\;pbs \;tcb\z@ \;pns\;t \;dash \;overhang\;np
+ \if;csym\else \advance\;overhang-\;tcb \advance\;rtc-\;tcb
+ \advance\;pbs-\;tc \fi
+ \;pns\;pbs \advance\;pns-\;np \if;csym\else\advance\;pns\;tcb\fi
+ \@whilenum\;rtc>\z@\do{\;pdashes \;ptfalse \;t\;tc \;pns\;t \;dash
+ \;pns\;pbs \;overhang\if;csym\;np\else-\;overhang\fi
+ \advance\;pns-\;overhang}\;overhang-\if;csym\;np\else\;overhang
+ \;ptfalse \;t\;tc \;tcb\;overhang
+ \divide\;t\tw@ \;rtc\;t \;pns\;t \;dash \fi}
+
+% Plots symbols at natural pattern length but shrinks pattern to fit between.
+\newcommand\;nscdashes{\advance\;pbs\;pl \divide\;pbs\;rc
+ \if;csym \;bpdashes \fi \;ccss \;pns\;t
+ \;dash \advance\;pbs-\;tc \;scp\;pl \divide\;scp\;pbs \;pns\;pbs
+ \@whilenum\;rtc>\z@\do{\;pdashes \;ptfalse \;t\;tc \;pns\;t \;dash
+ \;pns\;pbs}\if;csym \else \divide\;tc\tw@ \advance\;overhang\;tc \fi}
+
+% If large symbol spaces, blank curve.
+\newcommand\;ccss{\ifnum\;pbs>\;tc\else \;bpdashes \fi}
+
+% A blank or symbol plotting dash pattern
+\newcommand\;bpdashes{\let\;tucd\;pl \let\;ticd\;ricd \;tc\z@ \;t\z@}
+\newcommand\;ricd{1,0}
+
+% Reads dash pattern plotting dashes and spaces up to next symbol space.
+\newcommand\;pdashes{\ifnum\;pns>\z@ \;td\z@ \;tcb\z@ \;ptfalse
+ \@for\;ci:=\;ticd \do{\advance\;td\;ci\;tucd \;t\;scp \divide\;t\tw@
+ \advance\;t\;td \divide\;t\;scp \advance\;t-\;tcb \;dash
+ \if;pt\;ptfalse\else\;pttrue\fi}%
+ \let\n;xt\;pdashes \else \let\n;xt\relax \fi \n;xt}
+
+% Checks if dash or space occurs before or after curve, calculates fractions.
+\newcommand\;dash{\ifnum\;t=\z@ \if;csym\ifnum\;rtc>\z@\if;pt\;point\fi\fi\fi
+ \else \advance\;tcb\;t \advance\;pns-\;t
+ \ifnum\;overhang<\z@ \advance\;overhang\;t
+ \ifnum\;overhang<\z@ \;t\z@ \else \;t\;overhang \;overhang\;tcb \fi
+ \else \;overhang\;tcb \fi
+ \ifnum\;pns<\z@ \advance\;overhang\;pns \advance\;tcb\;pns
+ \advance\;t\;pns \;pns\z@ \fi \advance\;rtc-\;t
+ \ifnum\;rtc<\z@ \advance\;overhang\;rtc \advance\;t\;rtc\fi
+ \ifnum\;t>\z@ \if;pt\;point\;points\else\let\n;xt\;space\;space\fi \fi\fi}
+
+% Makes \;tplot then plots a single dash.
+\newcommand\;points{\let\n;xt\;sdash \;sdash}
+\newcommand\;sdash{\let\n;;t\;tplot \ifnum\;t<\;cnd \let\n;xt\relax
+ \advance\;cnd-\;t \;tca\;t \;tplot
+ \else \advance\;t-\;cnd \;tca\;cnd \;tplot
+ \advance\;dx\;ddx \advance\;dy\;ddy \;cnd\;mcnd
+ \fi \n;xt}
+
+% A fast single macro for drawing straight lines.
+\newcommand\;tplot{}
+\newcommand\;po;nts{\noexpand\ifnum\;tca>\z@
+ \advance\;y\;dy \kern\;dx \;po;nt \advance\;tca\m@ne
+ \noexpand\else \let\noexpand\n;;t\relax \noexpand\fi \noexpand\n;;t}
+
+% Plots a single space at high speed.
+\newcommand\;space{\ifnum\;t<\;cnd \let\n;xt\relax
+ \advance\;cnd-\;t \advance\;y\;t\;dy \kern\;t\;dx
+ \else \advance\;t-\;cnd \advance\;y\;cnd\;dy \kern\;cnd\;dx
+ \advance\;dx\;ddx \advance\;dy\;ddy \;cnd\;mcnd
+ \fi \n;xt}
+
+% Make `;' a punctuation mark again.
+ \catcode`\;=12
+
+\endinput
+
+MODIFICATION HISTORY
+--------------------
+1.0 26 June 1991
+1.1 8 Jan 1992 large \diskpitchstretch and maximum integer=2^30 - 1.
+1.11 6 April 1993 Correct \@setdisk defined for SLiTeX.
+1.12 20 April 1993 Scaling improved in \t@gcrv to allow large \curves.
+1.13 23 April 1993 Calculation of differences corrected in \@bezier.
+1.14 29 April 1993 Alignment of spaces improved in \@nscdashes, \overhang
+ normalized.
+1.15 1 May 1993 Rounding errors in \nscdashes and \pdashes improved.
+1.16 8 May 1993 Increased speed and dots corrected.
+1.2 23 May 1993 Variable curve symbol introduced.
+1.21 8 June 1993 \unitlength corrected in \bigcircle.
+1.22 15 June 1993 \csb@x saves curve symbol, pattern selection rounded.
+1.23 18 June 1993 test for bad point order tightened. 1st network release.
+ 2421 words of TeX main memory.
+1.30 9 July 1993 2nd network release.
+ Bugs Fixed:
+ Blank curve if \csdiameter too large;
+ Thicknesses of thin curves set correct for 300dpi fonts;
+ Made compatible with NFSS of Mittelbach and Sch\"opf;
+ Transfer of \@y and \@overhang from inner loop of \@drwarc;
+ Missing \pt@false in \@ncsdashes and \@pdashes;
+ Check for zero \@np in \@bezier.
+ Improvements (?):
+ New internal macros to save tokens;
+ Uses LaTeX error messages and warnings;
+ Checks \curvedashes signs;
+ Potential conflicts with other macros reduced with new \@y, \@tc;
+ Warns more readily and replaces possible inflexions with straight line;
+ Some internal variable names rationalized.
+ 2410 words of TeX main memory with NFSS, 2400 with OFSS.
+1.31 10 July 1993 \shape changed to \fontshape etc. for NFSS.
+1.32 14 June 1994 3rd network release tested with LaTeX 2e of February 1994.
+1.33 28 June 1994 4th network release tested with LaTeX 2e of 1 June 1994.
+ Redefines \bezier from June LaTeX 2e.
+ \@bezier renamed to \@Vbezier to avoid conflict with June LaTeX 2e.
+1.40 20 August 1995 .
+ Bug Fixed: All curves use straight segments to reduce rounding error.
+ Improvements:
+ \curvewarnfalse stops warning of straight line use between points;
+ ; catcoded to character to protect internal names;
+ New internal macros save tokens and increase speed;
+ 1799 nett extra words of TeX main memory (LaTeX 2e 1995/6/1 pl1).
+1.41 22 August 1995 5th network release tested with LaTeX 2e of 1 June 1995
+ \edef\;tplot moved to speed dash plotting.
+1.42 12 August 2000 6th Network release and last tested and
+ working with LaTeX 2.09.
+
+CURVES SUMMARY
+--------------
+The commands following are for the picture environment in the LaTeX manual.
+
+Arguments of Commands:
+<blank length> decimal number of <unit len> blank. Not negative.
+<character or symbol> is anything which a \put or \multiput may plot.
+<coordinates> are decimal numbers giving alternate x and y coordinates of
+ the curve as multiples of \unitlength, comma separated.
+<[,dash...]> optional continuation of alternating dash and blank numbers
+ of unit lengths, comma separated. Not negative. Decimals allowed.
+<diameter> is a decimal number giving the diameter in \unitlengths.
+<symbol count> is the number of symbols or patterns to be plotted, default 0.
+<unit len> unit length dimension e.g., 2.5mm, 10pt, used in measuring
+ blanks and dashes. Not negative. Default value is \unitlength.
+
+Lengths used by Commands:
+\csdiameter is the size of the space left for a symbol and can be
+ increased or set with \settowidth{\csdiameter}{<character or symbol>}.
+\curvelength is the total length of the curve calculated before drawing
+ by using Simpson's rule once between each pair of coordinate points.
+\overhang length of as drawn dash pattern overlapping start of dashes.
+
+Control Commands:
+\curvewarntrue warns every time a straight line is used between points
+ to avoid possible worse errors (default).
+\curvewarnfalse use the straight line without warning.
+
+Parameter Setting Commands:
+\curvesymbol{<character or symbol>} sets symbol and \csdiameter.
+\curvedashes[<unit len>]{<blank length><[,dash...]>} Drawing commands before a
+ \curvedashes or after one with an empty or zero length pattern will draw:
+ if <symbol count> is zero or missing, a continuous curve;
+ else if <symbol count> is positive, <symbol count>-1 squares of line
+ thickness size between and additional squares at coordinates or bezier
+ end points;
+ else if no <character or symbol> exists, nothing;
+ else, -<symbol count>-1 characters or symbols between coordinates and
+ additional ones at coordinates or bezier end points.
+After a \curvedashes command defining a pattern whose length exceeds
+ zero, commands draw:
+ if <symbol count> is zero or missing then at a spacing equal to the
+ specified pattern length,
+ if no <character or symbol> exists, a dash pattern reduced in length
+ by \csdiameter to fit between symbol spaces of \csdiameter,
+ else if \overhang is not 0pt, a <character or symbol> at all positions,
+ else a <character or symbol> with the first position blank;
+ else, \csdiameter wide symbol spaces, one at and |<symbol count>|-1 between
+ coordinate points with dash pattern lengths,
+ if no <character or symbol> exists, exact but broken by the spaces,
+ else, adjusted to give a whole number of patterns between spaces.
+\diskpitchstretch is initially 1 but \renewcommand can change it to a higher
+ value like 5 to save memory in drafts of complex documents or a lower local
+ value like 0.5 to smooth curve digitization.
+\linethickness{<len>} sets line or dash thicknesses to <len> from 0.5pt up to
+ 15pt (0.17mm to 5mm). \thicklines and \thinlines also set the thickness.
+\xscale, \xscaley, \yscale and \yscalex are scale factors initially set to
+ 1, 0, 1 and 0 respectively which \renewcommand or \def can reset.
+
+Curve Drawing Commands:
+Curves drawn consist of parabolic arcs between coordinate points with
+tangents at each point parallel to the straight line through adjacent points.
+\arc[<symbol count>](X1,Y1){<angle>} draws a circular arc centred on current
+ position, starting from (X1,Y1) and proceeding counterclockwise for
+ <angle> degrees.
+\bezier{<symbol count>}(X1,Y1)(X2,Y2)(X3,Y3) draws a curve through the points
+ (X1,Y1) and (X3,Y3) tangent to the straight lines joining them to (X2,Y2).
+ Faster and more powerful replacement for bezier.sty version.
+\bigcircle[<symbol count>]{<diameter>} draws a circle of diameter equal to
+ <diameter> times \unitlength.
+\closecurve[<symbol count>](<coordinates>) draws a closed curve with continuous
+ tangents at all points. At least 6 coordinates required.
+\curve[<symbol count>](<coordinates>) draws a curve through the specified
+ <coordinates>. For 4 coordinates this is a straight line.
+\scaleput(X1,Y1){<picture object>} places a picture object in a position
+ scaled by \xscale, \xscaley, \yscale and \yscalex for axonometric projection
+ or rotations.
+\tagcurve[<symbol count>](<coordinates>) draws a curve without its first and
+ last segments but if only 6 coordinates draws the last segment only. \ No newline at end of file
diff --git a/obsolete/macros/latex209/contrib/curves/curves.tex b/obsolete/macros/latex209/contrib/curves/curves.tex
new file mode 100644
index 0000000000..32df0f162c
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/curves/curves.tex
@@ -0,0 +1,821 @@
+ % To LaTeX this file requires curves.sty in the default or
+ % a texinputs directory.
+ % Requires 55000 word of TeX main memory.
+ \documentstyle[curves]{article}
+ \newcommand{\version}{1.42}
+ \pagestyle{headings}
+ \begin{document}
+ \title{Curves in \LaTeX\ Pictures\\
+ A Manual for {\tt CURVES.STY} and {\tt CURVESLS.STY}\\Version \version}
+ \author{Ian Maclaine-cross\thanks{Current Internet address: {\tt
+i.maclaine-cross@unsw.edu.au}}\\
+ \small School of Mechanical and Manufacturing Engineering\\
+ \small The University of New South Wales\\
+ \small UNSW Sydney 2052, Australia}
+ \date{12th August 2000}
+ \maketitle
+ \thispagestyle{empty}
+ \tableofcontents
+ \section{Introduction}
+ Version \version\ is the last release of {\tt curves} tested with \LaTeX\
+ 2.09. Future releases will be tested only with later versions of \LaTeX\
+ and may be found in the directory tree for the later \LaTeX\ version.
+Future {\tt curves} releases are unlikely to work with \LaTeX\ 2.09.
+
+ The picture environment in the \LaTeX \footnote{Leslie Lamport, {\sl
+\LaTeX\ A Document Preparation System 2nd ed.,} Addison-Wesley, 1994.} macro
+package for \TeX \footnote{Donald E. Knuth, {\sl The \TeX book,}
+Addison-Wesley, 1984.} allows simple line drawing using
+characters. These characters include quadrant circular arcs, solid
+disks with diameters from 1 to 15pt\footnote{A printer's point,
+abbreviated pt, is approximately 0.351460 mm.} and short lines with a
+limited range of slopes in two thicknesses. A \verb?\begin{picture}?
+command defines an area where following commands place these
+characters to draw a \LaTeX\ picture.
+
+ \LaTeX\ pictures save disk space for source descriptions and
+computer time in producing documents compared with printer commands or
+bit mapped graphics. From initial pencil sketch on squared graph
+paper to final printout, they take half the time for manual pen
+drawings. The labor savings are higher for revisions and
+rewrites. Unfortunately standard \LaTeX\ cannot yet draw curves like a
+pen, compass and French curves can.
+
+ Superimposing characters closely can draw any curve. Disks give directional
+independence of line thickness and visual smoothness at large pitch.
+Smoothness increases with output resolution but is almost independent of disk
+pitch below a critical maximum. The following table suggests this maximum
+varies from 0.34pt for an 0.5pt thick curve to 3pt for a 15pt curve.
+ \begin{center}
+ \setlength{\unitlength}{1pt}
+ \begin{tabular}{cccc}
+ Thickness & \makebox[3em][l]{Magnified} & Comments & Line at 1/6 slope \\
+ \hline
+ 15pt & $\times1$ & 1pt pitch disks&
+ \begin{picture}(80,20)(0,15) \linethickness{15pt}
+ \renewcommand{\diskpitchstretch}{0.33} \curve(10,15, 70,25)
+ \end{picture} \\
+ 15pt & $\times1$ & 3pt pitch disks&
+ \begin{picture}(80,20)(0,15) \linethickness{15pt} \curve(10,15, 70,25)
+ \end{picture} \\
+ $\approx$0.5pt & $\times1$ & \LaTeX\ \verb?\line(6,1)? &
+ \begin{picture}(80,20)(0,15) \thinlines \put(10,15){\line(6,1){60}}
+ \end{picture} \\
+ $\approx$0.5pt & $\times1$ & 0.34pt pitch disks &
+ \begin{picture}(80,20)(0,15) \thinlines
+ \curve(10,15, 70,25)
+ \end{picture} \\
+ $\approx$0.5pt & $\times30$ \rule[-10pt]{0pt}{10pt} &
+\parbox{8em}{\centering 0.34pt pitch disks\\ resolution $\times30$ } &
+ \begin{picture}(80,20)(0,15) \multiput(10,15)(10.2,1.7){7}{\circle*{15}}
+ \end{picture} \\
+ \hline
+ \end{tabular}
+ \end{center}
+
+ \LaTeX\ \verb?\line?\footnotemark[1] or line drawing \verb?\special?
+commands require a tenth the \TeX\ memory so are preferable to disks if
+available. A smooth curve may require thousands of disks or hundreds of lines.
+\LaTeX\ can load \TeX\footnote{Donald E. Knuth, {\sl The \TeX book,}
+ Addison-Wesley, 1984, Chapter 20.} macros from style files with a
+\verb?.sty? extension. These macros can calculate the disk or line positions
+for a curve.
+
+ {\tt curves.sty} provides macro commands for drawing curves using disks.
+Version \version\ loads in about 2500 words\footnote{A character or token
+takes a \TeX\ word, 32 bits or larger.} of \TeX's main memory, which allows a
+small \TeX. Complex or numerous floating drawings still require a big \TeX\
+with {\tt curves.sty}. {\tt curvesls.sty} uses fewer disks and line drawing
+\verb?\special?s for increased speed and a tenth the \TeX\ memory.
+
+ The capabilities of these macros are:---
+ \begin{itemize}
+ \item A compatible replacement for \verb?\bezier?\footnote{See your Local
+Guide. Try the system command {\tt latex local} to get a \LaTeX ed Guide.}
+from {\tt bezier.sty} or {\tt LaTeX2e}.
+ \item Work with {\makeatletter \@ifundefined{SLiTeX}{\tt SLiTeX}{\SLiTeX}}
+for overhead transparencies and {\tt LaTeX2e}\footnote{Michel Goossens, Frank
+Mittelbach and Alexander Samarin, {\sl The \LaTeX\ Companion,} Addison-Wesley,
+1994.}
+ \item Curves have the minimum number of disks or straight lines for visual
+smoothness.
+ \item Curve thickness adjustable from 0.5 to 15pt (0.17 to 5mm).
+ \item Curves have continuous slope.
+ \item Curves for any number of points greater than one using \verb?\curve?.
+ \item Control of end slopes using \verb?\tagcurve?.
+ \item Closed curves with continuous slope using \verb?\closecurve?.
+ \item Large circles \verb?\bigcircle? and circular arcs \verb?\arc?.
+ \item Independent scaling of curve abscissa and ordinates to fit graphs.
+ \item Affine scaling for making arcs or circles elliptical.
+ \item Symbols and dash patterns combined without interference.
+ \item Any dash length or spacing.
+ \item Three methods for fitting dash patterns to curves.
+ \end{itemize}
+
+ Parabolas approximate the segments between the specified coordinate points.
+At an internal point, the slope of the parabolas joining from either side is
+the same as the straight line joining the points on either side. For an end
+segment, the inside point of the parabola is made a vertex which determines
+the slope of the end point. \verb?\tagcurve? has hidden end segments which
+allows complete control of slope at the visible end point when desired.
+
+ The four points at the end and adjacent to a segment may make a parabola
+inappropriate. The points could be close to a straight line or consistent with
+an inflexion point. A straight line then replaces the parabola and optionally
+a warning is issued.
+
+The parabolas are drawn as a series of short straight line segments.
+For {\tt curvesls.sty}, the dvi driver draws the straight lines as instructed
+by \verb?\special? commands. For {\tt curves.sty}, the straight lines are
+drawn as overlapping disks at high speed using a simple tail chasing macro.
+This macro's arithmetic calculations are two fixed point additions per disk
+drawn.
+
+The \TeX\ arithmetic in {\tt curves.sty} for the initial differences
+between disk positions gives an error of less than 0.005\% at the
+segment end. Even for a segment 1000pt long, this is less than 0.05pt and the
+resolution of most output devices. Errors are sometimes slightly larger
+between coordinates but you can reduce them if necessary by specifying more
+coordinates.
+
+ For circles and circular arcs, a parabola approximates an arc segment no
+more than 23$^\circ$ giving a radius increase between segment ends less than
+0.02\%. The error in computing and multiplying by sine and cosine is usually
+less than 0.01\% of the radius at the far end of an arc.
+
+ Brief descriptions, simple examples and a command summary follow. They
+presume familiarity with relevant chapters of the \LaTeX\
+manual\footnotemark[1].
+
+ \section{Installation}
+
+ Name either {\tt curves} or {\tt curvesls} in the \verb?\usepackage?
+command at the top of your main {\tt .tex} file {\it e.g.\/,}
+ \begin{verbatim}
+ \documentclass[11pt]{article}
+ \usepackage{curves}
+ \end{verbatim}
+ {\tt curves.sty} or {\tt curvesls.sty} should be in the default or a {\tt
+texinput} directory. For the older \LaTeX\ 2.09 name them in the
+\verb?\documentstyle? command.
+
+ Do not combine {\tt curves} or {\tt curvesls} with {\tt bezier} in this
+command. They contain a fast powerful replacement for \verb?\bezier?.
+Drawings using \verb?\bezier? should not change their appearance.
+
+ \newcommand{\PiCTeX}{\relax P\kern-.10em\lower.4ex\hbox{I}\kern
+ -.10em\/C\kern-0.15em\TeX}
+ \PiCTeX\footnote{Michael J. Wichura, {\sl The \PiCTeX\ Manual,} Chicago,
+1987, available from \TeX\ Users' Group.} is a large set of \TeX nical drawing
+macros for plain \TeX\ which \LaTeX\ pictures can also use. \PiCTeX\ requires
+a big \TeX. I have not checked compatibility with {\tt curves} or {\tt
+curvesls} because I do not use \PiCTeX.
+ \renewcommand{\PiCTeX}{}
+
+ {\tt curvesls.sty} uses line drawing \verb?\special?s to reduce required
+memory and increase speed. As originally supplied it uses the \verb?\special?s
+of em\TeX\ by Eberhard Mattes for IBM PC compatibles. em\TeX\ is available
+from CTAN\footnote{Directory {\tt /tex-archive/systems/msdos/emtex} at {\tt
+ftp.shsu.edu} for example.} and the \TeX\ Users' Group. The em\TeX\
+\verb?\special?s are also available for Tomas Rokicki's {\tt dvips}. If you
+use {\tt dvips}, ask if they have been compiled in. To use other line drawing
+ \verb?\special?s substitute them at {\tt curvesls.sty}'s start. Your system
+guru may do this for you. You can test {\tt curvesls.sty} after substituting
+\verb?\special?s, by replacing {\tt curves} with {\tt curvesls} in this file's
+\verb?\documentstyle? command. This file looks the same \LaTeX ed with either
+{\tt curves} or {\tt curvesls}.
+
+ A drawing frequently uses auxiliary commands to size, place, label and
+caption it. The following commands draw the box in Figure~\ref{box} on
+page~\pageref{box}:
+
+ \begin{figure}
+ \begin{center}
+ \setlength{\unitlength}{1mm}
+ \begin{picture}(100,50) \large\sf
+ \linethickness{1mm}
+ \put(20,5){\framebox(60,40){BOX}}
+ \end{picture}
+ \end{center}
+ \caption{This is a box.}
+ \label{box}
+ \end{figure}
+
+ \begin{verbatim}
+ \begin{figure}
+ \begin{center}
+ \setlength{\unitlength}{1mm}
+ \begin{picture}(100,50) \large\sf
+ \linethickness{1mm}
+ \put(20,5){\framebox(60,40){BOX}}
+ \end{picture}
+ \end{center}
+ \caption{This is a box.}
+ \label{box}
+ \end{figure}
+ \end{verbatim}
+ Lamport\footnotemark[1] explains these commands. This example is for those
+unfamiliar with the \LaTeX\ picture environment. The following examples avoid
+the {\tt figure} environment but it is often essential.
+
+ \section{Curves}
+ \label{curves}
+ The curve drawing commands, \verb?\curve?, \verb?\closecurve? and
+\verb?\tagcurve?, draw parabola segments between coordinate points in the
+argument. The segments' tangents at these points are parallel to each other
+and to straight lines through the points either side. Segments at curve ends
+are from parabolas through the last three points. \verb?\closecurve? adds a
+parabola between end points to close the curve. \verb?\tagcurve? omits the
+first and last segments drawing curves with end tangents specified. The
+following table shows these features.
+
+ \begin{center}
+ \setlength\unitlength{0.4pt}
+ \linethickness{0.7mm}
+ \begin{tabular}{lc}
+ Example & Curve \\
+ \hline
+ \raisebox{60\unitlength}{\tt\char92 curve(0,0, 50,100, 100,0)} &
+ \begin{picture}(100,120)(0,-10)
+ \curve(0,0, 50,100, 100,0)
+ \end{picture}\\
+ \raisebox{80\unitlength}{\tt\char92 closecurve(0,0, 50,100, 100,0)} &
+ \begin{picture}(100,170)(0,-60)
+ \closecurve(0,0, 50,100, 100,0)
+ \end{picture} \\
+ \raisebox{60\unitlength}{
+ \tt\char92 tagcurve(100,0, 0,0, 50,100, 100,0, 0,0)} &
+ \begin{picture}(120,120)(-10,-10)
+ \tagcurve(100,0, 0,0, 50,100, 100,0, 0,0)
+ \end{picture} \\
+ \hline
+ \end{tabular}
+ \end{center}
+
+ Axial flow fans often use the RAF 6E aerofoil section. The section
+coordinates in the following macro come directly from aerodynamic
+tables\footnote{R.A. Wallis, {\sl Axial Flow Fans,} Academic Press, 1961,
+p.335}. The \verb?\arc? commands draw the leading and trailing radii and the
+two coordinate \verb?\curve? the flat chord.
+ \begin{verbatim}
+ \newcommand{\RAFsixE}{
+ \scaleput(1.25,1.25){\arc(0,-1.25){-135}}
+ \scaleput(0,0){\curve(0.366,2.133, 1.25,3.19, 2.5,4.42,
+ 5.0,6.10, 7.5,7.24, 10,8.09, 15,9.28, 20,9.90, 30,10.3,
+ 40,10.22, 50,9.80, 60,8.98, 70,7.70, 80,5.91, 90,3.79,
+ 95,2.58, 99.24,1.52)}
+ \scaleput(99.24,0.76){\arc(0,-0.76){180}}
+ \scaleput(0,0){\curve(1.25,0, 99.24,0)}
+ }
+ \end{verbatim}
+ \newcommand{\RAFsixE}{
+ \scaleput(1.25,1.25){\arc(0,-1.25){-135}}
+ \scaleput(0,0){\curve(0.366,2.133, 1.25,3.19, 2.5,4.42,
+ 5.0,6.10, 7.5,7.24, 10,8.09, 15,9.28, 20,9.90, 30,10.3,
+ 40,10.22, 50,9.80, 60,8.98, 70,7.70, 80,5.91, 90,3.79,
+ 95,2.58, 99.24,1.52)}
+ \scaleput(99.24,0.76){\arc(0,-0.76){180}}
+ \scaleput(0,0){\curve(1.25,0, 99.24,0)}
+ }
+ In a picture environment like:
+ \begin{verbatim}
+ \begin{picture}(100,20)
+ \RAFsixE
+ \end{picture}
+ \end{verbatim}
+ this macro draws:
+ \linethickness{0.7mm}
+ \setlength\unitlength{0.5mm}
+ \begin{center}
+ \begin{picture}(100,20)
+ \RAFsixE
+ \end{picture}\\
+ The RAF 6E has a flat undersurface.
+ \end{center}
+
+ The drawing command \verb?\bigcircle? works similarly to \verb?\circle?
+except there is no \verb?\circle*? equivalent. The following section scales it
+to an ellipse.
+
+ \section{Scaling}
+ The size of \LaTeX\ picture objects may be uniformly scaled by preceding
+them with:
+ \begin{verbatim}
+ \setlength{\unitlength}{x\unitlength}
+ \end{verbatim}
+ where {\tt x} the desired scale factor is a decimal number.
+
+ The \verb?\scaleput?s in \verb?\RAFsixE? position the curves using the scale
+factors \verb?\xscale?, \verb?\xscaley?, \verb?\yscale? and \verb?\yscalex?.
+The drawing commands use the same scale factors. {\tt curve} initially sets
+these scale factors to 1, 0, 1 and 0 respectively. \verb?\renewcommand? may
+reset them to any decimal number. These factors can rotate pictures. The
+factors following rotate the RAF~6E through 12$^\circ$ clockwise about its
+{\tt (0,0)} co-ordinate:
+ \begin{verbatim}
+ \renewcommand{\xscale}{0.9781}
+ \renewcommand{\xscaley}{0.2079}
+ \renewcommand{\yscale}{0.9781}
+ \renewcommand{\yscalex}{-0.2079}
+ \put(0,20){\RAFsixE}
+ \end{verbatim}
+ This draws:
+ \begin{center}
+ \begin{picture}(120,30)(-20,0)
+ \renewcommand{\xscale}{0.9781}
+ \renewcommand{\xscaley}{0.2079}
+ \renewcommand{\yscale}{0.9781}
+ \renewcommand{\yscalex}{-0.2079}
+ \put(0,20){\RAFsixE}
+ \thicklines
+ \put(-20,5){\vector(1,0){20}}
+ \end{picture}
+
+ The RAF 6E has maximum lift at angles of attack over 12$^\circ$.
+ \end{center}
+ Note that \(\cos12^\circ\approx0.9781\) and \(\sin12^\circ\approx0.2079\)
+ \let\RAFsixE\relax
+
+
+ Axonometric projection is another scaling application. Circles become
+ellipses and circular arcs become elliptical arcs. The commands drawing the
+ellipse and arc in the following washer are:
+ \begin{verbatim}
+ \put(20,5){
+ \renewcommand{\xscale}{1}
+ \renewcommand{\xscaley}{-1}
+ \renewcommand{\yscale}{0.6}
+ \renewcommand{\yscalex}{0.6}
+ \scaleput(10,10){\bigcircle{10}}
+ \put(0,-2){
+ \scaleput(10,10){\arc(5,0){121}}
+ \scaleput(10,10){\arc(5,0){-31}}
+ }
+ }
+ \end{verbatim}
+ {\tt (20,5)} are the drawing coordinates of the upper vertex of the washer
+closest to the reader. The angles for the \verb?\arc?s were found by trial and
+error.
+ \begin{center}
+ \setlength\unitlength{1mm}
+ \begin{picture}(40,30)
+ \thicklines
+ \multiput(20,5)(20,12){2}{\line(0,-1){2}\line(-5,3){20}}
+ \multiput(20,5)(-20,12){2}{\line(5,3){20}}
+ \put(20,3){\line(5,3){20}}
+ \put(20,3){\line(-5,3){20}}
+ \put(0,15){\line(0,1){2}}
+ \linethickness{1pt}
+ \put(20,5){
+ \renewcommand{\xscale}{1}
+ \renewcommand{\xscaley}{-1}
+ \renewcommand{\yscale}{0.6}
+ \renewcommand{\yscalex}{0.6}
+ \scaleput(10,10){\bigcircle{10}}
+ \put(0,-2){
+ \scaleput(10,10){\arc(5,0){121}}
+ \scaleput(10,10){\arc(5,0){-31}}
+ }
+ }
+ \end{picture}
+
+ Square washers are sometimes preferred for soft materials.
+ \end{center}
+
+ \section{Symbols}
+ \label{symbols}
+
+ {\tt curves} can also place symbols. \verb?\curvesymbol? must first define
+the symbol as anything a \verb?\put? or \verb?\multiput? may draw. A negative
+symbol count between drawing command and coordinates {\it e.g.,}
+\verb?\tagcurve[-3](0,100,...)? fixes the number of symbols per curve segment.
+
+ These commands draw flight times and successive positions in the following
+drawing:
+ \begin{verbatim}
+ \newcounter{time}
+ \curvesymbol{\thetime\,s\addtocounter{time}{1}}
+ \put(5,4){\curve[-2](0,0, 9.8,19.6, 19.6,0)}
+ \curvesymbol{\phantom{\circle*{1}}\circle*{1}}
+ \put(5,2){\curve[-2](0,0, 9.8,19.6, 19.6,0)}
+ \end{verbatim}
+ where \verb?\phantom? is a plain \TeX\ command from the \TeX
+book\footnotemark[2].
+ \begin{center}
+ \setlength\unitlength{2mm}
+ \begin{picture}(40,35)(-5,-5) \sf
+ \thicklines
+ \newcounter{time}
+ \curvesymbol{\thetime\,s\addtocounter{time}{1}}
+ \put(5,4){\curve[-2](0,0, 9.8,19.6, 19.6,0)}
+ \curvesymbol{\phantom{\circle*{1}}\circle*{1}}
+ \put(5,2){\curve[-2](0,0, 9.8,19.6, 19.6,0)}
+ \put(0,0){\vector(0,1){28}}
+ \put(0,0){\vector(1,0){30}}
+ \multiput(5,0)(5,0){5}{\line(0,1){1}}
+ \multiput(0,5)(0,5){5}{\line(1,0){1}}
+ \setcounter{time}{0}
+ \multiput(0,-1)(5,0){6}{\makebox(0,0)[t]{\thetime}\addtocounter{time}{5}}
+ \put(28,-1){\makebox(0,0)[tl]{$x$ (m)}}
+ \setcounter{time}{0}
+ \multiput(-1,0)(0,5){6}{\makebox(0,0)[r]{\thetime}\addtocounter{time}{5}}
+ \put(-1,27){\makebox(0,0)[rb]{$y$ (m)}}
+ \end{picture} \\
+ Successive positions of a sphere with initial position $(5,2)$ m,\\ initial
+velocity $(4.9,9.8)$ m/s, and acceleration $(0,-9.8)$ m/s$^2$. \\
+ The flight time is recorded above each sphere position.
+ \end{center}
+
+ Fixed spacing of symbols at lengths other than the segment's requires more
+commands. Empty \verb?\curvedashes?, empty \verb?\curvesymbol? and negative
+symbol count stops drawing so a drawing command will calculate
+\verb?\curvelength? only. \verb?\curvesymbol? then resets the symbol and
+\verb?\curvedashes? sets the spacing to its pattern length. If there are no
+symbols at the ends, \verb?\overhang? pulls symbols along the curve. The last
+command with no symbol count draws the symbols.
+
+ \verb?\arc? and \verb?\bigcircle? use sixteen segments for a circle so if
+eight symbols are required the fixed spacing technique is necessary. The
+following commands draw the pin numbers on a relay base:
+
+ \begin{verbatim}
+ \newcounter{pin}
+ \curvedashes{}
+ \curvesymbol{}
+ \put(60,60){\arc[-1](40,0){-360}}
+ \setlength{\curvelength}{0.125\curvelength}
+ \curvedashes[\curvelength]{1}
+ \setlength{\overhang}{0.5\curvelength}
+ \curvesymbol{\addtocounter{pin}{1}\thepin}
+ \put(60,60){\arc(40,0){-360}}
+ \end{verbatim}
+
+ \begin{center}
+ \setlength\unitlength{0.3mm}
+ \begin{picture}(120,120) \sf
+ \thicklines
+ \linethickness{1pt}
+ \curvedashes{}
+ \curvesymbol{}
+ % base
+ \put(60,60){\bigcircle{100}}
+ % spigot
+ \put(60,60){\arc(10,3){325}\put(10,0){\arc(0,3){-180}}}
+ % pins
+ \put(60,60){\bigcircle[-1]{60}}
+ \setlength{\curvelength}{0.125\curvelength}
+ \curvedashes[\curvelength]{1}
+ \overhang0.5\curvelength
+ \curvesymbol{\phantom{\circle{5}}\circle{5}}
+ \put(60,60){\bigcircle{60}}
+ % pin numbers
+ \newcounter{pin}
+ \curvedashes{}
+ \curvesymbol{}
+ \put(60,60){\arc[-1](40,0){-360}}
+ \divide\curvelength8
+ \curvedashes[\curvelength]{1}
+ \setlength{\overhang}{0.5\curvelength}
+ \curvesymbol{\addtocounter{pin}{1}\thepin}
+ \put(60,60){\arc(40,0){-360}}
+ \end{picture} \\
+ The pin numbering of plug-in relays is clockwise \\
+ from the spigot key when viewed from below.
+ \end{center}
+
+ If symbols and dash pattern exist and \verb?\overhang? is 0pt, \verb?curves?
+draw the first position blank. For equal spacing they draw the last position
+blank if rounding error causes the last pattern to be slightly short. If
+\verb?\renewcommand? changes \verb?\diskpitchstretch?, rounding error changes
+and the final symbol may reappear. To avoid fiddling with
+\verb?\diskpitchstretch? for closed curves with symbols equally spaced, use an
+\verb?\overhang? which is a fraction of a pattern length as in the previous
+example.
+
+ \section{Dashes}
+
+ \verb?\curvedashes? must first define a dash pattern with length greater
+than 0pt. Many symbol and pattern combinations are possible. The fixed number
+and fixed spacing methods of symbol drawing described in Section~\ref{symbols}
+work with three methods of drawing dashes which are:
+ \begin{enumerate}
+ \item if there is no symbol count and no symbol, a dash pattern with its
+length reduced by \verb?\csdiameter? is drawn between symbols spaces of width
+close to \verb?\csdiameter? to give an overall spacing equal to the pattern
+length specified by the \verb?\curvedashes? command;
+ \item if there is a symbol count but no symbol, the dash patterns drawn have
+their length equal to that defined by \verb?\curvedashes? with
+\verb?\csdiameter? gaps at symbol positions;
+ \item if there is a symbol count and a symbol, the dash patterns drawn have
+their length adjusted slightly so an integral number of patterns fit between
+symbol positions.
+ \end{enumerate}
+
+ Dash pattern commands for centrelines\footnote{R.N. Roth and I.A. van
+Haeringen, {\sl The Australian Engineering Drawing Handbook, Part~1 Basic
+Principles and Techniques,} The Institution of Engineers, Australia, Canberra,
+1986.} follow for the three techniques above in order:
+ \begin{verbatim}
+ \linethickness{0.25mm}
+ \curvedashes[1.2mm]{0,8,1,3,1,8}
+ \settowidth{\csdiameter}{00}
+ \put(0,20){\curve(0,0, 30,5, 60,0)}
+ \put(0,10){\curve[1](0,0, 30,5, 60,0)}
+ \curvesymbol{\thepin\addtocounter{pin}{1}}
+ \setlength{\csdiameter}{2\csdiameter}
+ \put(0,0){\curve[1](0,0, 30,5, 60,0)}
+ \end{verbatim}
+
+ The following figure shows the resulting dash patterns. The upper line has
+first position blank because the \verb?\overhang? is 0pt. It has patterns
+shrunk to scale between symbol spaces {\it e.g.,}~1 to~2, and symbol space
+centres one pattern length apart. The middle line has patterns close to
+defined length but with the first dash part blanked by half of symbol space~3
+and the second pattern broken in its first dash by symbol space~4. The lower
+line patterns are stretched between symbol spaces. Which pattern is
+appropriate depends on picture meaning and function.
+
+ \begin{center}
+ \setlength\unitlength{1mm}
+ \begin{picture}(60,25) \sf
+ \setcounter{pin}{1}
+ \linethickness{0.25mm}
+ \curvedashes[1.2mm]{0,8,1,3,1,8}
+ \settowidth{\csdiameter}{00}
+ \put(0,20){\curve(0,0, 30,5, 60,0)}
+ \put(0,10){\curve[1](0,0, 30,5, 60,0)}
+ \curvesymbol{\thepin\addtocounter{pin}{1}}
+ \setlength{\csdiameter}{2\csdiameter}
+ \put(0,0){\bezier{-2}(0,0)(30,10)(60,0)}
+ \put(0,20){\curve(0,0, 30,5, 60,0)}
+ \curvedashes{}
+ \put(0,10){\curve[-1](0,0, 30,5, 60,0)}
+ \put(0,0){\bezier{-2}(0,0)(30,10)(60,0)}
+ \end{picture} \\
+ Centrelines and Symbols
+ \end{center}
+
+ \section{Errors}
+ Syntax errors like incorrect or missing punctuation while using {\tt curves}
+will result in \TeX\ or \LaTeX\ error messages. The \TeX book\footnotemark[2]
+and \LaTeX\ manual\footnotemark[1] explain the meaning and correction of these
+errors. The previous examples and Section~\ref{summary} should make the
+correct syntax for {\tt curves} commands clear.
+
+ {\tt curves} will write a {\tt LaTeX error.} message to the screen and {\tt
+log} file if you supply an incorrect number of coordinates.
+
+ If four sequential points in a drawing command argument have the line
+through the first and third parallel to the line through the second and
+fourth:
+ \begin{itemize}
+ \item exactly or closely, {\tt curves} knows it cannot draw a parabola
+tangent to two parallel lines, issues to the screen and log file:\\
+ {\tt LaTeX Warning: \string\curve\ straight from \ldots}\\
+ and draws a straight line;
+ \item or approximately, {\tt curves} may draw an unexpected curve with no
+warning.
+ \end{itemize}
+ If four sequential points in a drawing command argument have the line
+through the first and second parallel to the line through the third and
+fourth:
+ \begin{itemize}
+ \item {\tt curves} draws a parabola which may be nowhere near the curve.
+ \end{itemize}
+ If the four points were on a straight line, removing one or more points is
+a remedy. If they are not on a straight line, adding points may help.
+ Specifying many points will give you a satisfactory curve with perhaps an
+annoying number of \verb?\curve straight? warnings. After a
+\verb?\curvewarnfalse?, {\tt curves} still uses the straight lines but does
+not tell you.
+
+ Curvature changes sign on curves like \(y=\sin x\). Specifying inflection
+points as {\tt curve} coordinates will reduce error and specifying sufficient
+coordinates will then give satisfactory results. For discontinuous tangents
+splitting a curve into pieces is unavoidable. Splitting a curve into pieces
+with curvature the same sign can give satisfactory results with fewer
+coordinates. \verb?\tagcurve? can prevent tangent discontinuities. If an
+inflexion point's exact location is unknown, try the midpoint of the straight
+line through the ends of its segment.
+
+ Curves appear rougher than horizontal and vertical lines. Picture
+digitization causes this not inaccuracy in \TeX, {\tt curves.sty} or {\tt
+curvesls.sty}. Setting \verb?\diskpitchstretch? to a value less than one with
+\verb?\renewcommand? may smooth an unusually rough curve.
+
+ Symbols and symbol spaces misaligned are usually due to rounding error.
+Adjusting \verb?\diskpitchstretch? below one can reduce rounding error and
+increase alignment accuracy. This should be limited to the misaligned curve
+with {\tt \{\ \}}\footnotemark[1].
+
+ The replacement \verb?\bezier? does not give exactly the same results as the
+original in {\tt bezier.sty} or in {\tt LaTeX2e}. The difference is extremely
+small but if it is important to you comment out the five lines of code for
+\verb?\bezier? and \verb?\@bezier? near the start of {\tt curves.sty} or {\tt
+curvesls.sty}. You now have a \verb?\bezier? which is slower and needs more
+memory but has only its original capabilities and gives only its original
+results.
+
+Please email me examples of any errors not covered above. You may have found a
+bug in the code or documentation.
+
+\section{Pleas for the Future}
+
+{\tt curves} will never work with plain \TeX\ and it will never be as
+powerful as {\sf METAFONT} or importing encapsulated PostScript
+files. Suggestions or criticisms by email are
+welcome. Version \version\ has benefitted greatly from previous
+help. The latest versions are first available at URL:
+ \begin{verbatim}
+ ftp://ilm.mech.unsw.edu.au/pub/archive/latex/macros/curves/
+ \end{verbatim}
+ At your local CTAN mirror the latest version should be near the
+ directory for the latest version of \LaTeX. Please use
+ CTAN to reduce Internet load.
+
+{\tt curvesls.sty} uses much less \TeX\ memory and is faster than
+{\tt curves.sty}. More people could use {\tt curvesls.sty} if em\TeX\
+or equivalent line drawing \verb?\special?s were compiled into dvi
+drivers for viewing and printing. Ask your system people for this!
+
+A {\tt .dvi} file containing curves produced with {\tt curvesls.sty}
+has many occurrences of the text strings {\tt em:lineto}, {\tt
+em:moveto} and {\tt em:linewidth XXXXpt} placed by the em\TeX\
+\verb?\special?s. These strings would have earlier occupied \TeX\
+memory. Extra space is also taken by the disks {\tt curvesls} uses to
+cover the cracks between square line ends at a slight angle. Renaming
+these \verb?\special?s to {\tt L}, {\tt M} and {\tt W XXXXpt}
+respectively would save \TeX\ memory. Even better, {\tt W XXXXpt}
+could also calculate and store the bitmap of a disk which {\tt L}
+would add to its line end to round it so {\tt curvesls} need not add
+disks to cover cracks. A fourth \verb?\special?, {\tt D}, could place
+the disk at the current position which {\tt curvesls} would use to
+round the beginning of a curve. If you write dvi drivers, please add
+these four proposed \verb?\special?s.
+
+
+
+
+ \section{Curves Summary}
+ \label{summary}
+ The commands following are for the picture environment in the \LaTeX\
+manual\footnotemark[1].
+ \makeatletter
+ % Hanging indentation with paragraph separation for author-date, etc.
+ \newenvironment{hanging}{\list{}{\topsep\itemsep \advance\topsep-\parskip
+ \parsep\itemsep \itemsep\z@skip \partopsep\parskip
+ \ifdim\parindent>\z@ \@tempdimb\parindent \else \@tempdimb1.5 em\fi
+ \leftmargin\@tempdimb \listparindent-\@tempdimb \itemindent-\@tempdimb
+ \rightmargin\z@ \labelsep\z@ \labelwidth\z@ }\item[]}%
+ {\endlist \addvspace\parsep}
+ \makeatother
+
+
+ \subsection{Arguments of Commands}
+
+ \begin{hanging}
+
+{\tt <blank length>} decimal number of {\tt <unit len>} blank. Not negative.
+
+ {\tt <character or symbol>} is anything which a \verb?\put? or
+\verb?\multiput? may draw.
+
+ {\tt <coordinates>} are decimal numbers giving alternate $x$ and $y$
+ coordinates of the curve as multiples of \verb?\unitlength?, comma
+separated.
+
+{\tt <[,dash...]>} optional continuation of alternating dash and blank numbers
+of unit lengths, comma separated. Not negative. Allows decimal points.
+
+ {\tt <diameter>} is a decimal number giving the diameter in
+ \verb?\unitlength?s.
+
+ {\tt <symbol count>} is the number of symbols or patterns to be drawn,
+default 0.
+
+ {\tt <unit len>} unit length dimension {\it e.g.\/,} 2.5mm, 10pt, used in
+measuring blanks and dashes. Not negative. Default value is
+\verb?\unitlength?.
+
+ \end{hanging}
+
+
+ \subsection{Lengths used by Commands}
+ \begin{hanging}
+
+ \verb?\csdiameter? is the size of the space left for a symbol and can be
+increased or set with \verb?\settowidth{\csdiameter}{<character or symbol>}?.
+
+ \verb?\curvelength? is the total length of the curve calculated before
+drawing by using Simpson's rule once between each pair of coordinate points.
+
+\verb?\overhang? length of as drawn dash pattern overlapping start of
+patterns.
+ \end{hanging}
+ \subsection{Control Commands}
+ \begin{hanging}
+ \verb?\curvewarntrue? turns warning of parabola replacement by straight
+lines on (default).
+
+ \verb?\curvewarnfalse? turns warning of parabola replacement by straight
+lines off.
+ \end{hanging}
+ \subsection{Parameter Setting Commands}
+
+ \begin{hanging}
+ \verb?\curvesymbol{<character or symbol>}? sets symbol and
+ \verb?\csdiameter?.
+
+ \verb?\curvedashes[<unit len>]{<blank length><[,dash...]>}? A drawing
+command before a \verb?\curvedashes? or after one with an empty or zero length
+pattern will draw:
+
+ \begin{hanging}
+
+ if {\tt <symbol count>} is zero or missing, a continuous curve;
+
+else if {\tt <symbol count>} is positive, {\tt <symbol count>-1} squares of
+line thickness size between and additional squares at coordinates or bezier
+end points;
+
+else if no {\tt <character or symbol>} exists, nothing;
+
+ else, {\tt -<symbol count>-1} characters or symbols between coordinates and
+additional ones at coordinates or bezier end points.
+
+ \end{hanging}
+ After a \verb?\curvedashes? command defining a pattern whose length exceeds
+zero, commands draw:
+
+ \begin{hanging}
+
+if {\tt <symbol count>} is zero or missing then at a spacing equal to the
+specified pattern length,
+
+ \begin{hanging}
+ if no {\tt <character or symbol>} exists, a dash pattern reduced in length
+by \verb?\csdiameter? to fit between symbol spaces of \verb?\csdiameter?,
+
+ else if \verb?\overhang? is not 0pt, a {\tt <character or symbol>} at all
+positions,
+
+ else a {\tt <character or symbol>} with the first position blank;
+
+ \end{hanging}
+
+else, \verb?\csdiameter? wide symbol spaces, one at and
+ {\tt |<symbol count>|-1} between coordinate points with dash pattern
+lengths,
+ \begin{hanging}
+ if no {\tt <character or symbol>} exists, exact but broken by the spaces,
+
+else, adjusted to give a whole number of patterns between spaces.
+ \end{hanging}
+ \end{hanging}
+
+
+ \verb?\diskpitchstretch? is initially 1 but \verb?\renewcommand? can
+change it to a higher value like 5 to save memory in drafts of complex
+documents or a lower local value like 0.5 to smooth curve digitization.
+
+ \verb?\linethickness{<len>}? sets line or dash thicknesses to {\tt
+<len>} from 0.5pt up to 15pt (0.17mm to 5mm). \verb?\thicklines? and
+\verb?\thinlines? also set thickness.
+
+ \verb?\xscale?, \verb?\xscaley?, \verb?\yscale? and \verb?\yscalex? are
+scale factors initially set to 1, 0, 1 and 0 respectively which
+\verb?\renewcommand? or \verb?\def? can reset.
+ \end{hanging}
+
+
+ \subsection{Curve Drawing Commands}
+ Curves drawn consist of parabolic arcs between coordinate points with
+tangents at each point parallel to the straight line through adjacent points.
+
+ \begin{hanging}
+ \verb?\arc[<symbol count>](X1,Y1){<angle>}? draws a circular arc centred
+on current position, starting from {\tt (X1,Y1)} and proceeding
+counterclockwise for {\tt <angle>} degrees.
+
+ \verb?\bezier{<symbol count>}(X1,Y1)(X2,Y2)(X3,Y3)? draws a curve through
+the end points {\tt (X1,Y1)} and {\tt (X3,Y3)} tangent to the straight lines
+joining each of them to {\tt (X2,Y2)}. Extended faster replacement for {\tt
+bezier.sty} version.
+
+ \verb?\bigcircle[<symbol count>]{<diameter>}? draws a circle of diameter
+equal to {\tt <diameter>} times \verb?\unitlength?.
+
+ \verb?\closecurve[<symbol count>](<coordinates>)? draws a closed curve
+with continuous tangents at all points. At least 6 coordinates required.
+
+ \verb?\curve[<symbol count>](<coordinates>)? draws a curve through the
+specified {\tt <coordinates>}. For 4 coordinates this is a straight line.
+
+ \verb?\scaleput(X1,Y1){<picture object>}? places a picture object in a
+position scaled by \verb?\xscale?, \verb?\xscaley?, \verb?\yscale? and
+\verb?\yscalex? for axonometric projection or rotations.
+
+ \verb?\tagcurve[<symbol count>](<coordinates>)? draws a curve without its
+first and last segments but if only 6 coordinates draws the last segment only.
+ \end{hanging}
+ \end{document} \ No newline at end of file
diff --git a/obsolete/macros/latex209/contrib/curves/curvesls.sty b/obsolete/macros/latex209/contrib/curves/curvesls.sty
new file mode 100644
index 0000000000..841eb55dc7
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/curves/curvesls.sty
@@ -0,0 +1,511 @@
+% curvesls.sty version 1.42 for LaTeX 2.09 and LaTeX2e.
+% I.L. Maclaine-cross, The University of New South Wales.
+% Internet: i.maclaine-cross@unsw.edu.au
+\typeout{Document Style Option `curvesls' <12th August 2000>}
+% Draws curves in LaTeX picture environment using parabolas between points
+% with continuous slope at points. Equivalent to technical pens with
+% compasses and French curves.
+% A Command Summary is at the end of this file.
+
+% Make `;' appear like a letter so control sequences can use it and they
+% will not be accidently used by other macro packages.
+\catcode`\;=11
+
+% DRIVER SPECIFIC COMMANDS
+% These are not required by curves.sty a companion macro package
+% which is slower and requires more TeX memory.
+% Requires the dvi driver have the following three line drawing \specials
+% which draw straight lines rectangular at both ends. curvesls.sty adds a
+% circle of appropriate size to smooth junctions and round ends.
+% If these are unavailable use the slower curves.sty with more TeX memory.
+% The \special text in the following three commands is for emTeX's dvi drivers:
+% before drawing every line sets the driver's straight line width
+% to dimen #1;
+\newcommand\;linewidth[1]{\special{em:linewidth \the#1}}
+% sets driver page position to current TeX page position;
+\newcommand\;startline{\special{em:moveto}}
+% draws straight line from last driver position to current TeX position and
+% then resets driver position to current TeX page position.
+\newcommand\;stopl;ne{\special{em:lineto}}
+% To use other dvi drivers which draw straight lines like emTeX, alter the
+% above three commands to make their function the same as described above.
+% The manual for Tomas Rokicki's DVIPS version 5.515 for the IBM PC says
+% that this PostScript driver supports the above emTeX \specials. This style
+% file works unmodified with Rokicki's driver when the emTeX specials are
+% compiled in.
+
+\newcount\;sc % number of symbols on Bezier segment
+\newcount\;scp
+\newcount\;t
+\newcount\;cc % coordinate count
+\newcount\;cnd % actual point count to next dot
+\newcount\;mcnd % maximum point count to next dot
+\newcount\;np
+\newcount\;overhang
+\newcount\;pbs
+\newcount\;pns
+\newcount\;psc % maximum dot spacing on line in sp.
+\newcount\;rc
+\newcount\;rtc
+\newcount\;tc
+\let\;tca=\@tempcnta
+\let\;tcb=\@tempcntb
+
+\newdimen\csdiameter \csdiameter\z@
+\newdimen\curvelength
+\newdimen\overhang \overhang\z@
+\newdimen\;dx
+\newdimen\;ddx
+\newdimen\;dy
+\newdimen\;ddy
+\newdimen\;pl \;pl\z@
+\newdimen\;ucd
+\newdimen\;y
+\let\;td=\@tempdima
+\let\;ytd=\@tempdimb
+
+\newsavebox{\;csbox}
+\newsavebox{\;pt}
+
+\newif\ifcurvewarn \curvewarntrue % Warn about curve problems
+\newif\if;ccn % coordinate number correct
+\newif\if;pt % plot points if true
+\newif\if;csym % curve symbol defined
+\newif\if;scnt % symbol or pattern count <>0
+
+\newhelp\;strline{curve straight from}
+\newhelp\m;ssingcoord{curve needs more points, add them.}
+\newhelp\;negdash{curvedashes needs the same sign for all arguments.}
+\newhelp\;oddcoord{curve requires two co-ordinates for each point,
+ count them.}
+
+\newcommand\arc{\@ifnextchar[\;arc{\;arc[0]}}
+\newcommand\;arc{}
+\def\;arc[#1](#2,#3)#4{\;setpoint{#1}\scaleput(#2,#3){\;ddx-#3\unitlength
+ \;ddy#2\unitlength \;firstpoint \;td#4\p@ \;drwarc}}
+
+
+% Redefines version in LaTeX 2e of 1 June 1994.
+\def\bezier#1)#2(#3)#4({\@bezier#1)(#3)(}
+\def\@bezier#1(#2,#3)(#4,#5)(#6,#7){\;dx#4\unitlength \;ddx-\;dx
+ \advance\;dx-#2\unitlength \advance\;ddx#6\unitlength \;dy#5\unitlength
+ \;ddy-\;dy \advance\;dy-#3\unitlength \advance\;ddy#7\unitlength
+ \;setpoint{#1}\scaleput(#2,#3){\;firstpoint \;bezier}}
+
+\newcommand\bigcircle{\@ifnextchar[\;bgcrcl{\;bgcrcl[0]}}
+\newcommand\;bgcrcl{}
+\def\;bgcrcl[#1]#2{\;setpoint{#1}\;dx\unitlength \global\divide\unitlength\tw@
+ \scaleput(#2,0){\;startline \;ddx\z@ \;ddy#2\unitlength \global\unitlength\;dx
+ \;td360\p@ \;drwarc}}
+
+\newcommand\closecurve{\@ifnextchar[\;closecurve{\;closecurve[0]}}
+\newcommand\;closecurve{}
+\def\;closecurve[#1](#2){\;coordn\closecurve\thr@@{#2}{#1}%
+ \if;ccn\scaleput(\;xb,\;yb){\;startline
+ \edef\;ci{\;xa,\;ya,#2,\;xb,\;yb,\;xc,\;yc}%
+ \advance\;cc\thr@@ \;tagcurve\;ci}\fi}
+
+\newcommand\curve{\@ifnextchar[\;curve{\;curve[0]}}
+\newcommand\;curve{}
+\def\;curve[#1](#2){\;coordn\curve\tw@{#2}{#1}%
+ \if;ccn \scaleput(\;xa,\;ya){\;firstpoint
+ \ifnum\;cc=\tw@ \;slbezd \;slbez
+ \else \;scbezd\;dx\;ddx\;xa\;xb\;xc \;scbezd\;dy\;ddy\;ya\;yb\;yc
+ \;bezier \;tagcurve{#2}\ifnum\;cc>6\;endcurve\fi \fi}\fi}
+\newcommand\;scbezd[5]{\;slcd#2#3#5\divide#24\;slcd#1#3#4\advance#1-#2}
+\newcommand\;xa{} \newcommand\;xb{} \newcommand\;xc{}
+\newcommand\;ya{} \newcommand\;yb{} \newcommand\;yc{}
+\newcommand\;ci{}
+
+\newcommand\curvesymbol[1]{\def\;curvesymbol{#1}\ch;ckcs
+ \global\setbox\;csbox\hbox{#1}\csdiameter\wd\;csbox}
+\newcommand\;curvesymbol{} \def\;curvesymbol{}
+
+\newcommand\curvedashes{\@ifnextchar[\;crvdshs{\;crvdshs[\unitlength]}}
+\newcommand\;crvdshs{}
+\def\;crvdshs[#1]#2{\;ucd#1\def\;icurvedashes{#2}\;ccnfalse \;pl\z@
+ \@for \;ci:=#2\do{\ifdim\;ci\;ucd<\z@ \;ccntrue \@latexerr{\string
+ \curvedashes\space sign bad at \;ci}{\the\;negdash ^^J\@eha}%
+ \else \advance\;pl\;ci\;ucd \fi}\if;ccn\;pl\z@\fi}
+\newcommand\;icurvedashes{}
+
+\newcommand\diskpitchstretch{\@ne}
+
+\newcommand\tagcurve{\@ifnextchar[\;tgcrv{\;tgcrv[0]}}
+\newcommand\;tgcrv{}
+\def\;tgcrv[#1](#2){\;coordn\tagcurve\thr@@{#2}{#1}\if;ccn
+ \scaleput(\;xb,\;yb){\;firstpoint \;tagcurve{#2}}\fi}
+
+\newcommand\scaleput{}
+\long\def\scaleput(#1,#2)#3{\@killglue \;td#2\unitlength
+ \raise\yscale\;td \hbox to \z@{\kern\xscaley\;td \;td#1\unitlength
+ \kern\xscale\;td \raise\yscalex\;td \hbox{#3}\hss}\ignorespaces}
+\newcommand\xscale{\@ne}
+\newcommand\xscaley{0}
+\newcommand\yscale{\@ne}
+\newcommand\yscalex{0}
+
+% Plot first point if any.
+\newcommand\;firstpoint{\;startline \ifdim\;pl=\z@\;point\relax\fi}
+
+% Calculates segment count, sine, cosine and differences then plots segments.
+\newcommand\;drwarc{\;cc\;td \;np\;td \;td23\p@ \divide\;cc\;td
+ \;abs\;cc \advance\;cc\@ne \;pns\p@ \divide\;pns\tw@
+ \divide\;np\;cc \;rc\;np \divide\;rc\;pns \;abs\;rc
+ \advance\;rc\@ne \divide\;np\;rc \multiply\;np\;pns \divide\;np14668 %
+ \multiply\;np\;rc \divide\;np\@cclvi \;scp\p@ \multiply\;scp\@cclvi
+ \;t\;pns \;csi\;csi\;csi\;csi \;rxy\;ddx\;ddy \divide\;rc\p@
+ \advance\;rc\@ne \;rtc\;rc \advance\;rc\;rc \;ndd\;ddx \;ndd\;ddy
+ \;csi \;rxy\;ddx\;ddy \divide\;rc\;pns \advance\;rc\@ne
+ \@whilenum\;cc>\z@ \do{\advance\;cc\m@ne \;dx\;ddx \;dy\;ddy
+ \divide\;ddx\;rc \divide\;ddy\;rc \;td\;ddx \;ddx\;t\;td
+ \advance\;ddx-\;np\;ddy \;ddy\;t\;ddy \advance\;ddy\;np\;td
+ \divide\;ddx\;pns \divide\;ddy\;pns \;ddx\;rc\;ddx \;ddy\;rc\;ddy
+ {\;bezier \global\;ytd\;y \global\;tca\;overhang}\;y\;ytd \;overhang\;tca}}
+\newcommand\;ndd[1]{\divide#1\;rc \multiply#1\;np \divide#1\;t #1\;rtc#1}
+% Cosine and sine half angle iteration.
+\newcommand\;csi{\;tcb\;np \multiply\;np\;t \divide\;np\;pns \;t\;tcb
+ \multiply\;t\;t \divide\;t-\;scp \advance\;t\;pns \divide\;scp4 }
+
+% Count the number of co-ordinate specified and warns if incorrect.
+\newcommand\;coordn[4]{\;setpoint{#4}\ifx#1\closecurve\;cc\tw@\else\;cc\z@\fi
+ \@for\;ci:=#3\do{\advance\;cc\@ne
+ \ifcase\;cc \or \;d;f\;xa \or \;d;f\;ya \or \;d;f\;xb
+ \or \;d;f\;yb \or \;d;f\;xc \or \;d;f\;yc \fi
+ \ifx#1\closecurve\ifodd\;cc \;d;f\;xa \else \;d;f\;ya \fi\fi}%
+ \;ccnfalse \ifx#1\closecurve \advance\;cc-\tw@ \fi
+ \ifodd\;cc \@latexerr{\string #1\space points odd}{\the\;oddcoord ^^J\@eha}%
+ \else \divide\;cc\tw@
+ \ifnum#2>\;cc \@latexerr{\string #1 needs \the#2 points}%
+ {\the\m;ssingcoord ^^J\@eha}%
+ \else \;ccntrue \fi\fi}
+
+% Sets symbol, character or disk depending on how line is to be plotted.
+% Corrects overhang to be positive or zero but no greater than \;pl.
+\newcommand\;setpoint[1]{\curvelength\z@ \let\;stopline\relax
+ \def\;point##1{\raise\;y\hbox{{\copy\;pt##1}}}\ch;ckcs
+ \ifnum#1=\z@\;scntfalse\else\;scnttrue\fi \;sc#1\relax \;abs\;sc \;psc\;sc
+ \ifdim\;pl>\z@ \;overhang\overhang
+ \ifnum\;overhang=\z@\else \;np\;overhang \divide\;np\;pl \multiply\;np\;pl
+ \ifnum\;overhang<\z@ \advance\;overhang\;pl
+ \else \ifnum\;overhang=\;np\advance\;overhang\;pl\fi
+ \fi \advance\;overhang-\;np \fi
+ \if;csym \if;scnt\;setdisk\else\;setsymbol\fi \else \;setdisk \fi\s;tpitch
+ \else\ifnum#1>\z@ \s;tcirc{\hss\vrule\@height\@wholewidth\@width\@wholewidth}%
+ \else\ifnum#1<\z@ \if;csym\;setsymbol\else\set;pt{}\fi
+ \else\;setdisk\s;tpitch
+ \fi\fi\fi \;y\dp\;pt \advance\;y-\ht\;pt \divide\;y\tw@}
+\newcommand\;setsymbol{\s;tcirc{\hss\unhcopy\;csbox}\edef\;point{\;point\relax
+ \s;tcirc{\hss\noexpand\;curvesymbol}\global\setbox\;csbox\copy\;pt}}
+\newcommand\s;tpitch{\;td\diskpitchstretch\p@ \;psc\;td}
+\newcommand\;stopline{} \newcommand\;point{}
+
+% Sets LaTeX disk character and thickness.
+\newcommand\;setdisk{\@killglue \ifdim\@halfwidth>\p@
+ \set;pt{\@circ\@wholewidth{112}}\;linewidth{\wd\;pt}\s;tcirc{\unhbox\;pt}%
+ \else \;linewidth\@wholewidth \set;pt{}\fi \let\;stopline\;stopl;ne}
+
+% Check if curvesymbol exists and set switch.
+\newcommand\ch;ckcs{\ifx\;curvesymbol\@empty\;csymfalse\else\;csymtrue\fi}
+
+% Makes zero width box \;pt of point
+\newcommand\s;tcirc[1]{\set;pt to\z@{#1\hss}}
+
+% Set global box \;pt
+\newcommand\set;pt{\global\setbox\;pt\hbox}
+
+% Plots last segment of curve from coordinates already read.
+\newcommand\;endcurve{\;ecbezd\;dx\;ddx\;xa\;xb\;xc
+ \;ecbezd\;dy\;ddy\;ya\;yb\;yc \;bezier}
+\newcommand\;ecbezd[5]{\;slcd#1#3#5\divide#14 #2-#1\advance#2#5\unitlength
+ \advance#2-#4\unitlength}
+
+% Reads coordinates of four points before going to difference calculation.
+\newcommand\;tagcurve[1]{\ifnum\;cc=\thr@@ \;endcurve \else \;cc\z@
+ \@for\;ci:=#1\do{\advance\;cc\@ne \ifnum\;cc>6 %
+ \ifodd\;cc \;slcd\;dx\;xa\;xc \let\;xa\;xb \let\;xb\;xc \;d;f\;xc
+ \else \t;gcrv \fi \fi}\fi}
+
+% Calculates differences over whole segment from four points.
+\newcommand\t;gcrv{\;slcd\;dy\;ya\;yc \let\;ya\;yb \let\;yb\;yc \;d;f\;yc
+ \;rxy\;dx\;dy \divide\;dx\;rtc \divide\;dy\;rtc
+ \;ddx-\;ya\;dx \advance\;ddx\;xa\;dy \;ddy\;ddx
+ \advance\;ddx\;yb\;dx \advance\;ddx-\;xb\;dy
+ \advance\;ddy\;yc\;dx \advance\;ddy-\;xc\;dy
+ \;slbezd \;td\;ddy \divide\;td\@m
+ \ifdim\;td=\z@ \ifcurvewarn
+ \@warning{\the\;strline \;xa,\;ya\space to \;xb,\;yb}\fi \;slbez
+ \else \;td\unitlength \;rtc\;td \advance\;rtc\;rtc
+ \divide\;rtc\p@ \advance\;rtc\@ne \divide\;td\;rtc
+ \;t\;ddx \;scp\;t \;abs\;t
+ \advance\;t\;t \divide\;t\p@ \advance\;t\@ne \divide\;scp\;t
+ \multiply\;td\;scp \divide\;td\;ddy \multiply\;td\;rtc \multiply\;td\;t
+ \;ddx\;xc\;td \advance\;ddx-\;xa\;td \advance\;dx-\;ddx
+ \;ddy\;yc\;td \advance\;ddy-\;ya\;td \advance\;dy-\;ddy \;bezier \fi}
+
+% Avoid repeating {\;ci}
+\newcommand\;d;f[1]{\edef#1{\;ci}}
+
+\newcommand\;slbezd{\;slcd\;dx\;xa\;xb \;slcd\;dy\;ya\;yb}
+
+% Calculates difference between two coordinates.
+\newcommand\;slcd[3]{#1#3\unitlength \advance#1-#2\unitlength}
+
+% Calculates differences for bezier straight line.
+\newcommand\;slbez{\divide\;dx\tw@ \;ddx\;dx \divide\;dy\tw@ \;ddy\;dy \;bezier}
+
+% Scales segment differences, then calculates segment pattern and disk count,
+% and initial disk differences; selects line or dashes.
+\newcommand\;bezier{\;scale\;dx\;dy \;scp\;rc \;scale\;ddx\;ddy
+ \advance\;scp\;rc \;bezc\;dx\;ddx \;bezc\;dy\;ddy \;rxy\;ddx\;ddy
+ \divide\;rc\p@ \advance\;rc\thr@@
+ \;tc\;rc \;sroot\;sroot\;sroot \;t\;rc \;mcnd\@ne \;rxy\;dx\;dy
+ \advance\;rc\;scp \divide\;rc\thr@@ \global\advance\curvelength\;rc sp%
+ \ifdim\;pl>\z@ \;np\;rc \divide\;np\;psc
+ \ifnum\;t<\;np \;mcnd\;np \divide\;mcnd\;t
+ \divide\;np\;mcnd \multiply\;np\;mcnd \;t\;np
+ \fi \fi
+ \if;scnt\ifdim\;pl=\z@ \;t\;sc
+ \else\;np
+ \if;csym \;rc \divide\;np\;sc \advance\;np-\csdiameter
+ \;td\;pl \divide\;td\tw@ \advance\;np\;td \divide\;np\;pl
+ \ifnum\;np<\@ne\;np\@ne\fi \multiply\;np\;sc
+ \else \;sc \fi \advance\;t\;np \divide\;t\;np \multiply\;t\;np
+ \fi \fi \;rtc\;t \divide\;rtc\;mcnd \;tcb\;rtc \multiply\;tcb\;t
+ \advance\;rtc\m@ne \multiply\;rtc\;t \;tc\;t \advance\;tc\;tc
+ \;bezd\;dx\;ddx \;bezd\;dy\;ddy
+ \ifdim\;pl>\z@ \;dashes \else \let\n;xt\;spoints \;spoints \fi}
+\newcommand\;scale[2]{\;td\xscale#1\advance\;td\xscaley#2%
+ #2\yscale#2\advance#2\yscalex#1#1\;td \;rxy#1#2}
+\newcommand\;bezc[2]{\advance#1#1\advance#2#2\;td#2\advance#2-#1\advance#1\;td}
+\newcommand\;bezd[2]{\divide#2\;tcb \;td#2\multiply\;td\;rtc \advance#1-\;td
+ \divide#1\;tc}
+
+% Plots a continuous line or equispaced squares or symbols along a segment.
+\newcommand\;spoints{\advance\;y\;dy \kern\;dx
+ \;point\;stopline \advance\;t\m@ne
+ \ifnum\;t>\z@ \advance\;dx\;ddx \advance\;dy\;ddy
+ \else \let\n;xt\relax \fi \n;xt}
+
+% Calculates length of vector \;rc from coordinates #1,#2
+\newcommand\;rxy[2]{\;tc#1\;abs\;tc \;tcb#2\;abs\;tcb
+ \;rc\;tc \advance\;rc\;tcb
+ \ifnum\;rc>\z@ \;rtc\;rc \advance\;rtc\;rtc \divide\;rtc\p@
+ \ifnum\;rtc>\z@ \advance\;rtc\@ne \divide\;tc\;rtc
+ \divide\;tcb\;rtc \divide\;rc\;rtc
+ \else \;rtc\@ne \fi \multiply\;tc\;tc \multiply\;tcb\;tcb
+ \advance\;tc\;tcb \;sroot \multiply\;rc\;rtc \fi}
+
+% Replaces argument by magnitude
+\newcommand\;abs[1]{\ifnum#1<\z@ #1-#1\fi}
+
+% Iteration of square root calculation by Newton's method.
+\newcommand\;sroot{\;rroot\;rroot\;rroot}
+\newcommand\;rroot{\;tcb\;tc \divide\;tcb\;rc \advance\;rc\;tcb \divide\;rc\tw@}
+
+% Variable uses in \;dashes, \;scdashes, \;nscdashes, \;pdashes and \;dash.
+% counts
+% \;scp = distance between points.
+% \;rc = length of Bezier segment.
+% \;rtc = total points in Bezier segment.
+% \;np = number of whole patterns in Bezier segment or scratch.
+% \;overhang = of dash pattern past symbol or end of segment.
+% \;pbs = total points between symbols
+% \;pns = points to next symbol or dot.
+% \;tc = number of points to blank for curve symbol.
+% \;tcb = number of points along pattern.
+% dimens
+% \;pl = length of dash pattern.
+% \;ucd = dash pattern unit length.
+
+% Initializes dash plot for segment and selects symbol count alternative.
+\newcommand\;dashes{\let\;ticd\;icurvedashes \let\;tucd\;ucd \divide\;rc\;t
+ \;rtc\;t \;tc\;rc \advance\;tc\csdiameter \divide\;tc\;rc
+ \divide\;tc\tw@ \;t\;tc \multiply\;tc\tw@ \;ptfalse \;cnd\;mcnd
+ \;pbs\;rc \divide\;pbs\tw@ \advance\;overhang\;pbs \divide\;overhang-\;rc
+ \if;scnt \;scdashes \else \;nscdashes \fi \multiply\;overhang\;rc}
+
+% Plots dash pattern when a nonzero symbol count is specified.
+\newcommand\;scdashes{\;pbs\;rtc \divide\;pbs\;sc \;ccss \;scp
+ \if;csym \;pl \multiply\;scp\;np \divide\;scp\;sc \advance\;pbs-\;tc
+ \else \;pbs \multiply\;scp\;rc \fi \;np\;overhang \;overhang\z@
+ \divide\;scp\;pbs \;tcb\z@ \;pns\;t \;dash \;overhang\;np
+ \if;csym\else \advance\;overhang-\;tcb \advance\;rtc-\;tcb
+ \advance\;pbs-\;tc \fi
+ \;pns\;pbs \advance\;pns-\;np \if;csym\else\advance\;pns\;tcb\fi
+ \@whilenum\;rtc>\z@\do{\;pdashes \;ptfalse \;t\;tc \;pns\;t \;dash
+ \;pns\;pbs \;overhang\if;csym\;np\else-\;overhang\fi
+ \advance\;pns-\;overhang}\;overhang-\if;csym\;np\else\;overhang
+ \;ptfalse \;t\;tc \;tcb\;overhang
+ \divide\;t\tw@ \;rtc\;t \;pns\;t \;dash \fi}
+
+% Plots symbols at natural pattern length but shrinks pattern to fit between.
+\newcommand\;nscdashes{\advance\;pbs\;pl \divide\;pbs\;rc
+ \if;csym \;bpdashes \fi \;ccss \;pns\;t
+ \;dash \advance\;pbs-\;tc \;scp\;pl \divide\;scp\;pbs \;pns\;pbs
+ \@whilenum\;rtc>\z@\do{\;pdashes \;ptfalse \;t\;tc \;pns\;t \;dash
+ \;pns\;pbs}\if;csym \else \divide\;tc\tw@ \advance\;overhang\;tc \fi}
+
+% If large symbol spaces, blank curve.
+\newcommand\;ccss{\ifnum\;pbs>\;tc\else \;bpdashes \fi}
+
+% A blank or symbol plotting dash pattern
+\newcommand\;bpdashes{\let\;tucd\;pl \let\;ticd\;ricd \;tc\z@ \;t\z@}
+\newcommand\;ricd{1,0}
+
+% Reads dash pattern plotting dashes and spaces up to next symbol space.
+\newcommand\;pdashes{\ifnum\;pns>\z@ \;td\z@ \;tcb\z@ \;ptfalse
+ \@for\;ci:=\;ticd \do{\advance\;td\;ci\;tucd \;t\;scp \divide\;t\tw@
+ \advance\;t\;td \divide\;t\;scp \advance\;t-\;tcb \;dash
+ \if;pt\;ptfalse\else\;pttrue\fi}%
+ \let\n;xt\;pdashes \else \let\n;xt\relax \fi \n;xt}
+
+% Checks if dash or space occurs before or after curve, calculates fractions.
+\newcommand\;dash{\ifnum\;t=\z@
+ \if;csym \ifnum\;rtc>\z@ \if;pt\;point\;startline\fi \fi \fi
+ \else \advance\;tcb\;t \advance\;pns-\;t
+ \ifnum\;overhang<\z@ \advance\;overhang\;t
+ \;t \ifnum\;overhang<\z@ \z@ \else \;overhang \;overhang\;tcb \fi
+ \else \;overhang\;tcb \fi
+ \ifnum\;pns<\z@ \advance\;overhang\;pns \advance\;tcb\;pns
+ \advance\;t\;pns \;pns\z@ \fi \advance\;rtc-\;t
+ \ifnum\;rtc<\z@ \advance\;overhang\;rtc \advance\;t\;rtc\fi
+ \ifnum\;t>\z@ \if;pt\;point\;startline\fi \let\n;xt\;points \;points \fi\fi}
+
+% Plots a single dash or space depending on \if;pt.
+\newcommand\;points{\ifnum\;t<\;cnd \;tca\;t \else \;tca\;cnd \fi
+ \advance\;y\;tca\;dy \kern\;tca\;dx \if;pt\;point\;stopline\fi
+ \ifnum\;t<\;cnd \let\n;xt\relax \advance\;cnd-\;t
+ \else \advance\;t-\;cnd \advance\;dx\;ddx \advance\;dy\;ddy \;cnd\;mcnd
+ \fi \n;xt}
+
+% Make `;' a punctuation mark again.
+ \catcode`\;=12
+
+\endinput
+
+
+MODIFICATION HISTORY
+--------------------
+curves.sty 1.0 26 June 1991
+curves.sty 1.1 8 Jan 1992 large \diskpitchstretch and maximum integer=2^30 - 1.
+curvesls.sty 1.0 21 Mar 1993 draw lines using emTeX dvidriver \special's.
+1.1 23 April, 1993 corrected for large \curves and 2nd differences.
+1.14 29 April, 1993 Alignment of spaces improved in \@nscdashes, \overhang
+ normalized.
+1.15 1 May, 1993 Rounding errors in \nscdashes and \pdashes improved.
+1.16 8 May, 1993 Reduced .dvi size and dots corrected.
+1.2 23 May, 1993 Variable curve symbol introduced.
+1.21 8 June, 1993 \unitlength corrected in \bigcircle.
+1.22 15 June, 1993 \csb@x saves curve symbol, dash pattern selection rounded.
+1.23 18 June, 1993 extra \@killglue and curve smoothing, test for
+ bad point order tightened. 1st network release.
+ 2517 words of TeX main memory.
+1.30 9 July 1993 2nd network release.
+ Bugs Fixed:
+ Blank curve if \csdiameter too large;
+ Transfer of \@y and \@overhang from inner loop of \@drwarc;
+ Missing \pt@false in \@ncsdashes and \@pdashes;
+ Check for zero \@np in \@bezier.
+ Improvements (?):
+ New internal macros to save tokens;
+ Uses LaTeX error messages and warnings;
+ Checks \curvedashes signs;
+ Potential conflicts with other macros reduced with new \@y, \@tc;
+ Warns more readily and replaces possible inflexions with straight line;
+ Some internal variable names rationalized.
+ 2489 words of TeX main memory.
+1.32 14 June 1994 3rd network release tested with LaTeX 2e of February 1994.
+1.33 28 June 1994 4th network release tested with LaTeX 2e of 1 June 1994.
+ Redefines \bezier from June LaTeX 2e.
+ \@bezier renamed to \@Vbezier to avoid conflict with June LaTeX 2e.
+1.40 20 August 1995 5th network release tested with LaTeX 2e of 1 June 1995.
+ Bug Fixed: Dashed curves use straight segments to reduce rounding error.
+ Improvements:
+ \curvewarnfalse stops warning of straight line use between points;
+ ; catcoded to character to protect internal names;
+ New internal macros save tokens and increase speed;
+ 1772 nett extra words of TeX main memory (LaTeX 2e 1995/6/1 pl1).
+1.41 28 November 1996 \;points for wrong \;dy in dash.
+1.42 12th August 2000 6th Network release and last tested and
+ working with LaTeX 2.09.
+
+CURVESLS SUMMARY
+----------------
+The commands following are for the picture environment in the LaTeX manual.
+
+Arguments of Commands:
+<blank length> decimal number of <unit len> blank. Not negative.
+<character or symbol> is anything which a \put or \multiput may plot.
+<coordinates> are decimal numbers giving alternate x and y coordinates of
+ the curve as multiples of \unitlength, comma separated.
+<[,dash...]> optional continuation of alternating dash and blank numbers
+ of unit lengths, comma separated. Not negative. Decimals allowed.
+<diameter> is a decimal number giving the diameter in \unitlengths.
+<symbol count> is the number of symbols or patterns to be plotted, default 0.
+<unit len> unit length dimension e.g., 2.5mm, 10pt, used in measuring
+ blanks and dashes. Not negative. Default value is \unitlength.
+
+Lengths used by Commands:
+\csdiameter is the size of the space left for a symbol and can be
+ increased or set with \settowidth{\csdiameter}{<character or symbol>}.
+\curvelength is the total length of the curve calculated before drawing
+ by using Simpson's rule once between each pair of coordinate points.
+\overhang length of as drawn dash pattern overlapping start of dashes.
+
+Control Commands:
+\curvewarntrue warns every time a straight line is used between points
+ to avoid possible worse errors (default).
+\curvewarnfalse use the straight line without warning.
+
+Parameter Setting Commands:
+\curvesymbol{<character or symbol>} sets symbol and \csdiameter.
+\curvedashes[<unit len>]{<blank length><[,dash...]>} Drawing commands before a
+ \curvedashes or after one with an empty or zero length pattern will draw:
+ if <symbol count> is zero or missing, a continuous curve;
+ else if <symbol count> is positive, <symbol count>-1 squares of line
+ thickness size between and additional squares at coordinates or bezier
+ end points;
+ else if no <character or symbol> exists, nothing;
+ else, -<symbol count>-1 characters or symbols between coordinates and
+ additional ones at coordinates or bezier end points.
+After a \curvedashes command defining a pattern whose length exceeds
+ zero, commands draw:
+ if <symbol count> is zero or missing then at a spacing equal to the
+ specified pattern length,
+ if no <character or symbol> exists, a dash pattern reduced in length
+ by \csdiameter to fit between symbol spaces of \csdiameter,
+ else if \overhang is not 0pt, a <character or symbol> at all positions,
+ else a <character or symbol> with the first position blank;
+ else, \csdiameter wide symbol spaces, one at and |<symbol count>|-1 between
+ coordinate points with dash pattern lengths,
+ if no <character or symbol> exists, exact but broken by the spaces,
+ else, adjusted to give a whole number of patterns between spaces.
+\diskpitchstretch is initially 1 but \renewcommand can change it to a higher
+ value like 5 to save memory in drafts of complex documents or a lower local
+ value like 0.5 to smooth curve digitization.
+\linethickness{<len>} sets line or dash thicknesses to <len> from 0.5pt up to
+ 15pt (0.17mm to 5mm). \thicklines and \thinlines also set the thickness.
+\xscale, \xscaley, \yscale and \yscalex are scale factors initially set to
+ 1, 0, 1 and 0 respectively which \renewcommand or \def can reset.
+
+Curve Drawing Commands:
+Curves drawn consist of parabolic arcs between coordinate points with
+tangents at each point parallel to the straight line through adjacent points.
+\arc[<symbol count>](X1,Y1){<angle>} draws a circular arc centred on current
+ position, starting from (X1,Y1) and proceeding counterclockwise for
+ <angle> degrees.
+\bezier{<symbol count>}(X1,Y1)(X2,Y2)(X3,Y3) draws a curve through the points
+ (X1,Y1) and (X3,Y3) tangent to the straight lines joining them to (X2,Y2).
+ Faster and more powerful replacement for bezier.sty version.
+\bigcircle[<symbol count>]{<diameter>} draws a circle of diameter equal to
+ <diameter> times \unitlength.
+\closecurve[<symbol count>](<coordinates>) draws a closed curve with continuous
+ tangents at all points. At least 6 coordinates required.
+\curve[<symbol count>](<coordinates>) draws a curve through the specified
+ <coordinates>. For 4 coordinates this is a straight line.
+\scaleput(X1,Y1){<picture object>} places a picture object in a position
+ scaled by \xscale, \xscaley, \yscale and \yscalex for axonometric projection
+ or rotations.
+\tagcurve[<symbol count>](<coordinates>) draws a curve without its first and
+ last segments but if only 6 coordinates draws the last segment only.
diff --git a/obsolete/macros/latex209/contrib/eclbip/eclbip.sty b/obsolete/macros/latex209/contrib/eclbip/eclbip.sty
new file mode 100644
index 0000000000..478ecd2bcc
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/eclbip/eclbip.sty
@@ -0,0 +1,112 @@
+% eclbip.sty (C) Hideki ISOZAKI Nov. 24, 1990
+% \ignorespaces Dec.2, 1990
+% draw a bipartite graph with epic.sty
+
+\typeout{ECL Bipartite graph style file by isozaki Dec.2, 1990}
+
+\endlinechar=-1\relax
+\makeatletter
+
+\newdimen\bip@len
+\newbox\bip@box
+
+% #1...Width of Left Node Group
+% #2...Width of Gap between Left Node Group and Right Node Group
+% #3...Width of Right Node Group
+% #4...Height of Vertical Gap between Nodes
+% #5...Width of a Bullet and its Label
+
+\def\bipartite#1#2#3#4#5{
+ \bip@init\bip@sep{#4}
+ \bip@init\bip@lW{#1}
+ \bip@init\bip@eW{#2}
+ \bip@init\bip@rW{#3}
+ \let\bip@lX=\bip@lW
+ \bip@init\bip@rX{\bip@lX\p@}\bip@add\bip@rX{#2}
+ \bip@init\bip@tX{\bip@rX\p@}\bip@add\bip@tX{#3}
+ \bip@init\bip@lY{\z@}
+ \bip@init\bip@rY{\z@}
+ \xdef\bip@bot{0.0}
+ \bip@init\bip@elX{\bip@lX\p@}
+ \bip@add\bip@elX{#5}
+ \bip@init\bip@erX{\bip@rX\p@}
+ \bip@add\bip@erX{-#5}
+ \unitlength=\p@
+ \def\endbipartite{\endpicture
+ \hbox{\vrule\@depth\bip@bot\p@\@height\z@\@width\z@}}
+ \picture(\bip@tX,0)(0,0)\ignorespaces}
+
+%
+% \leftnode[#1]{#2}
+% #1=label, #2=content
+%
+% \leftnode{#1}=\leftnode[#1]{#1}
+%
+
+\def\leftnode{\@dblarg{\@leftnode}}
+
+\def\@leftnode[#1]#2{
+ \setbox\bip@box=\hbox to \z@{\hss
+ \@iparbox[c]{\bip@lW\p@}{\raggedleft #2}}
+ \bip@init\bip@halfH{-.5\ht\bip@box}
+ \bip@add\bip@halfH{-.5\dp\bip@box}
+ \bip@init\bip@corrY{\bip@halfH\p@}
+ \bip@add\bip@corrY{\dp\bip@box}
+ \bip@add\bip@lY{\bip@halfH\p@}
+ \put(\bip@lX,\bip@lY){\raise\bip@corrY\p@\box\bip@box}
+ \put(\bip@elX,\bip@lY){\makebox(0,0){$\bullet$}}
+ \expandafter\edef\csname bip@L#1\endcsname{\bip@lY}
+ \bip@add\bip@lY{\bip@halfH\p@}
+ \bip@max\bip@bot{-\bip@lY\p@}
+ \bip@add\bip@lY{-\bip@sep\p@}\ignorespaces}
+
+\def\rightnode{\@dblarg{\@rightnode}}
+
+\def\@rightnode[#1]#2{
+ \setbox\bip@box=\hbox to \z@{
+ \@iparbox[c]{\bip@rW\p@}{\raggedright #2}\hss}
+ \bip@init\bip@halfH{-.5\ht\bip@box}
+ \bip@add\bip@halfH{-.5\dp\bip@box}
+ \bip@init\bip@corrY{\bip@halfH\p@}
+ \bip@add\bip@corrY{\dp\bip@box}
+ \bip@add\bip@rY{\bip@halfH\p@}
+ \put(\bip@rX,\bip@rY){\raise\bip@corrY\p@\box\bip@box}
+ \put(\bip@erX,\bip@rY){\makebox(0,0){$\bullet$}}
+ \expandafter\edef\csname bip@R#1\endcsname{\bip@rY}
+ \bip@add\bip@rY{\bip@halfH\p@}
+ \bip@max\bip@bot{-\bip@rY\p@}
+ \bip@add\bip@rY{-\bip@sep\p@}\ignorespaces}
+
+%
+% Draw Edges between Nodes
+%
+
+\def\brush#1{\def\bip@brush{#1}\ignorespaces}
+\brush{\drawline}
+
+\def\match#1#2{
+ \bip@brush(\bip@elX,\@nameuse{bip@L#1})(\bip@erX,\@nameuse{bip@R#2})
+ \ignorespaces}
+
+%
+% (1) Avoidance of too much use of dimen.
+% (2) Easy conversion between picture coord and real dimen
+% ---> Keep dimen without 'pt'
+%
+
+\def\bip@init#1#2{\bip@len=#2\relax
+ \edef#1{\expandafter\@RemoveDim\the\bip@len}}
+
+\def\bip@add#1#2{\bip@len=#1\p@\relax\advance\bip@len by #2\relax
+ \edef#1{\expandafter\@RemoveDim\the\bip@len}}
+
+\def\bip@max#1#2{\bip@len=#1\p@\relax
+ \ifdim\bip@len<#2\relax\bip@len=#2
+ \xdef#1{\expandafter\@RemoveDim\the\bip@len}\fi}
+
+{\catcode`\p=12 \catcode`\t=12
+\gdef\@RemoveDim#1pt{#1}}
+
+\endlinechar=13\relax
+
+\endinput
diff --git a/obsolete/macros/latex209/contrib/eclbip/eclbipsample.tex b/obsolete/macros/latex209/contrib/eclbip/eclbipsample.tex
new file mode 100644
index 0000000000..c03df4343b
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/eclbip/eclbipsample.tex
@@ -0,0 +1,148 @@
+\documentstyle[epic,eepic,eclbip]{article}
+
+
+\title{A bipartite graph macro}
+
+\author{Hideki ISOZAKI\\NTT Basic Research Labs \& Stanford Univ.}
+
+\date{Nov. 30, 1990}
+
+\begin{document}
+
+\maketitle
+
+\section{Setup}
+
+Include epic.sty and eclbip.sty\footnote{Electrical
+Communications Labs}
+in your \verb|\documentstyle|
+option as below.
+\begin{verbatim}
+\documentstyle[epic,eclbip]{article}
+\end{verbatim}
+If your printer driver accepts tpic commands,
+you should specify eepic.sty after epic.sty.
+\begin{verbatim}
+\documentstyle[epic,eepic,eclbip]{article}
+\end{verbatim}
+As eepic.sty redefines some macros defined in epic.sty,
+Do not reverse this order.
+
+\section{bipartite environment}
+
+A bipartite graph is drawn by {\it bipartite} environment.
+The {\it bipartite} environment has five arguments.
+They represent the following parameters.
+\begin{enumerate}
+\item Maximum width of labels in the left node group.
+\item Width of gap between the left node group and the right node group.
+\item Maximum width of labels in the right node group.
+\item Minimum height of vertical gaps between node labels.
+\item Width between a node (bullet) and its label.
+\end{enumerate}
+Labels in the left node group
+should be specified by \verb|\leftnode| in this environment.
+Labels in the right node group
+should be specified by \verb|\rightnode| in this environment.
+
+An edge between a left node and a right node can be drawn
+by \verb|\match| command.
+
+If you write
+\begin{verbatim}
+\begin{bipartite}{2cm}{1.5cm}{2cm}{3mm}{2mm}
+\leftnode{xxx}
+\leftnode{yyy}
+\leftnode{zzz}
+\rightnode{aaa}
+\rightnode{bbb}
+\rightnode{ccc}
+\match{xxx}{ccc}
+\end{bipartite}
+\end{verbatim}
+you get
+\begin{bipartite}{2cm}{1.5cm}{2cm}{3mm}{2mm}
+\leftnode{xxx}
+\leftnode{yyy}
+\leftnode{zzz}
+\rightnode{aaa}
+\rightnode{bbb}
+\rightnode{ccc}
+\match{xxx}{ccc}
+\end{bipartite}.
+
+Even if labels are long,
+you don't have to type them many times as arguments of \verb|\match|.
+You can give short names for
+\verb|\leftnode| and \verb|\rightnode| as options,
+and you can use them as arguments of \verb|\match|.
+
+If you write
+\begin{verbatim}
+\begin{bipartite}{2cm}{1.5cm}{2cm}{3mm}{2mm}
+\leftnode[x]{xxx is very long}
+\leftnode{yyy}
+\leftnode{zzz}
+\rightnode{aaa}
+\rightnode[b]{bbb is very long}
+\rightnode{ccc}
+\match{x}{ccc}
+\match{yyy}{b}
+\end{bipartite}
+\end{verbatim}
+you get
+\begin{bipartite}{2cm}{1.5cm}{2cm}{3mm}{2mm}
+\leftnode[x]{xxx is very long}
+\leftnode{yyy}
+\leftnode{zzz}
+\rightnode{aaa}
+\rightnode[b]{bbb is very long}
+\rightnode{ccc}
+\match{x}{ccc}
+\match{yyy}{b}
+\end{bipartite}.
+
+
+\section{Line attribute}
+You can draw not only solid lines but also
+dotted lines and dash lines.
+epic.sty and eepic.sty define several commands for them.
+If you want to use
+\begin{verbatim}
+\dashline[65]{3}(x1,y1)(x2,y2)
+\end{verbatim}
+to draw lines, use \verb|\brush| command
+before corresponding \verb|\match| command.
+\begin{verbatim}
+\brush{\dashline[65]{3}}
+\end{verbatim}
+
+If you write
+\begin{verbatim}
+\begin{bipartite}{2cm}{1.5cm}{2cm}{3mm}{2mm}
+\leftnode{xxx}
+\leftnode{yyy}
+\leftnode{zzz}
+\rightnode{aaa}
+\rightnode{bbb}
+\rightnode{ccc}
+\match{xxx}{ccc}
+\brush{\dottedline{3}}
+\match{zzz}{bbb}
+\end{bipartite}
+\end{verbatim}
+you get
+\begin{bipartite}{2cm}{1.5cm}{2cm}{3mm}{2mm}
+\leftnode{xxx}
+\leftnode{yyy}
+\leftnode{zzz}
+\rightnode{aaa}
+\rightnode{bbb}
+\rightnode{ccc}
+\match{xxx}{ccc}
+\brush{\dottedline{3}}
+\match{zzz}{bbb}
+\end{bipartite}.
+
+\end{document}
+
diff --git a/obsolete/macros/latex209/contrib/eclbip/ecltree.sty b/obsolete/macros/latex209/contrib/eclbip/ecltree.sty
new file mode 100644
index 0000000000..927f50a54b
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/eclbip/ecltree.sty
@@ -0,0 +1,142 @@
+% ecltree.sty (C) hideki isozaki Nov. 12, 1990
+%
+% In this style file, I intentionally didn't use ordinary
+% terms such as \tree, \subtree, \leaf etc.
+% because I will use different tree macros in one file.
+%
+% This macro needs epic.sty
+% Confirm your epic.sty does not contain \makeatother at EOF.
+
+\makeatletter
+\typeout{ECL Tree graph macro by isozaki, Nov. 12, 1990}
+
+% Ignore End Of Line
+
+\endlinechar=-1\relax
+
+% Dimensions and Boxes : See below
+
+\newdimen\@BundleWidth
+\newdimen\@BundleDepth
+\newdimen\@BundleHeight
+\newbox\@NodeBox
+\newdimen\GapDepth
+\GapDepth=15\p@
+\newdimen\GapWidth
+\GapWidth=4\p@
+\newdimen\EdgeLabelSep
+\EdgeLabelSep=7\p@
+
+%
+% --------------- -
+% | \@TopLabel | |
+% --------------- - |
+% (\@SupportX,\@SupportY) | |
+% / \ | |
+% / \ | |
+% / \ | \GapDepth | \@BundleHeight
+% / \ | |
+% / \ | |
+%(\@HandleX,0) \ | |
+% -------------- -------------- - -
+% | \@NodeBox | | \@NodeBox | | \@BundleDepth
+% | | -------------- |
+% -------------- -
+% |---|
+% \GapWidth
+%
+% |-----------------------------|
+% \@PicWidth
+
+%
+% The main environment to make a (sub)tree: bundle
+% \begin{bundle} \chunk_1 \chunk_2 ... \chunk_n \end{bundle}
+%
+\def\bundle#1{\leavevmode\hbox\bgroup
+ \endlinechar=-1
+ \def\@TopLabel{#1}
+ \def\@HandleList{}
+ \def\@EdgeLabels{}
+ \edef\@EdgeLabelsY{\expandafter\@RemoveDim\the\EdgeLabelSep}
+ \unitlength=\p@
+ \@BundleWidth=\z@
+ \@BundleHeight=\z@
+ \@BundleDepth=\z@
+ \ignorespaces}
+
+\def\endbundle{
+ \advance\@BundleWidth by -\GapWidth
+ \hskip-\GapWidth
+ \setbox\@NodeBox=\hbox{\vbox{\null\@TopLabel}}
+ \advance\@BundleHeight by \GapDepth
+ \advance\@BundleHeight by \ht\@NodeBox
+ \advance\@BundleHeight by \dp\@NodeBox
+ \vrule\@height\@BundleHeight\@width\z@\@depth\@BundleDepth
+ \edef\@SupportY{\expandafter\@RemoveDim\the\GapDepth}
+ \edef\@SupportX{\expandafter\@RemoveDim\the\@BundleWidth}
+ \setbox\@NodeBox=\hbox to \z@{\hss\@TopLabel\hss}
+ \hskip-\@BundleWidth
+ \edef\@EdgeLabels{\@EdgeLabels{}}
+ \edef\@PicWidth{\expandafter\@RemoveDim\the\@BundleWidth}
+ \@BundleWidth=0.5\@BundleWidth
+ \edef\@SupportX{\expandafter\@RemoveDim\the\@BundleWidth}
+ \@DrawBundle}
+
+
+\def\@DrawBundle{
+ \begin{picture}(\@PicWidth,0)(0,0)
+ \edef\@HandleList{\expandafter\@cdr\@HandleList\@nil}
+ \@for\@HandleX:=\@HandleList\do{
+ \@DrawLine(\@SupportX,\@SupportY)(\@HandleX,0)
+ \put(\@HandleX,\@EdgeLabelsY){
+ \makebox(0,0){\expandafter\@car\@EdgeLabels\@nil}}
+ \edef\@EdgeLabels{\expandafter\@cdr\@EdgeLabels\@nil}}
+ \put(\@SupportX,\@SupportY){\raise\dp\@NodeBox\box\@NodeBox}
+ \end{picture}\egroup}
+
+
+%
+% \chunk[#1]{#2} means a leaf or a subtree.
+% #1 ... Label for the edge which connects the leaf or the subtree
+% with its parent node. (optional argument)
+% #2 ... Label for the leaf or the subtree
+%
+
+\def\chunk{\@ifnextchar[{\@chunk}{\@chunk[]}}
+
+\def\@chunk[#1]#2{\edef\@EdgeLabels{\@EdgeLabels{#1}}
+ \setbox\@NodeBox=\vtop{\null\hbox{#2}}
+ \advance\@BundleWidth by 0.5\wd\@NodeBox
+ \ifnum\@BundleDepth<\dp\@NodeBox
+ \@BundleDepth=\dp\@NodeBox\fi
+ \edef\@HandleList{\@HandleList,
+ \expandafter\@RemoveDim\the\@BundleWidth}
+ \advance\@BundleWidth by 0.5\wd\@NodeBox
+ \advance\@BundleWidth by \GapWidth
+ \box\@NodeBox\hskip\GapWidth
+ \ignorespaces}
+
+% To change line attribute
+% ex.
+% \drawwith{\path} ... efficient solid line defined by eepic.sty
+% \drawwith{\dashline{2}}
+
+\def\drawwith#1{\def\@DrawLine{#1}}
+
+% Default
+\drawwith{\drawline}
+
+% Ordinary catcode for p and t is 11
+% Application of \the to dimen generates text such as 1.0pt.
+% This pt's catcode is 12.
+
+{\catcode`\p=12 \catcode`\t=12
+\gdef\@RemoveDim#1pt{#1}}
+
+% Restore original End Of Line
+
+\endlinechar=13\relax
+
+\endinput
+
+
diff --git a/obsolete/macros/latex209/contrib/eclbip/ecltreesample.tex b/obsolete/macros/latex209/contrib/eclbip/ecltreesample.tex
new file mode 100644
index 0000000000..712470c820
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/eclbip/ecltreesample.tex
@@ -0,0 +1,247 @@
+\documentstyle[epic,eepic,ecltree]{article}
+
+\title{A tree macro}
+
+\author{Hideki ISOZAKI\\NTT Basic Research Labs \& Stanford Univ.}
+
+\date{Nov. 30, 1990}
+
+
+\addtolength{\textwidth}{12pt}
+
+\begin{document}
+
+\maketitle
+
+
+\section{Setup}
+
+Include epic.sty and ecltree.sty\footnote{Electrical Communications Labs}
+in your \verb|\documentstyle|
+option as below.
+\begin{verbatim}
+\documentstyle[epic,ecltree]{article}
+\end{verbatim}
+If your printer driver accepts tpic commands,
+you should specify eepic.sty after epic.sty.
+\begin{verbatim}
+\documentstyle[epic,eepic,ecltree]{article}
+\end{verbatim}
+As eepic.sty redefines some macros defined in epic.sty,
+Do not reverse this order.
+
+\section{bundle environment}
+
+A tree is drawn by {\it bundle} environment.
+The {\it bundle} environment has one argument.
+This argument specifies the top node label.
+Leaves should be specified by \verb|\chunk| in this environment.
+
+If you write
+\begin{verbatim}
+\begin{bundle}{xxx}
+\chunk{aaa}
+\chunk{bbb}
+\chunk{ccc}
+\end{bundle}
+\end{verbatim}
+you get
+\begin{bundle}{xxx}
+\chunk{aaa}
+\chunk{bbb}
+\chunk{ccc}
+\end{bundle}.
+
+You can nest the {\it bundle} environment.
+If you write
+\begin{verbatim}
+\begin{bundle}{xxx}
+\chunk{aaa}
+\chunk{
+ \begin{bundle}{yyy}
+ \chunk{bbb}
+ \chunk{ddd}
+ \end{bundle}}
+\chunk{ccc}
+\end{bundle}
+\end{verbatim}
+you get
+\begin{bundle}{xxx}
+\chunk{aaa}
+\chunk{
+ \begin{bundle}{yyy}
+ \chunk{bbb}
+ \chunk{ddd}
+ \end{bundle}}
+\chunk{ccc}
+\end{bundle}.
+
+\section{Line attribute}
+
+You can draw not only solid lines but also
+dotted lines and dash lines.
+epic.sty and eepic.sty define several commands for them.
+If you want to use
+\begin{verbatim}
+\dashline[65]{3}(x1,y1)(x2,y2)
+\end{verbatim}
+to draw lines, use \verb|\drawwith| command
+before (or in) the bundle environment.
+\begin{verbatim}
+\drawwith{\dashline[65]{3}}
+\end{verbatim}
+
+\drawwith{\dashline[65]{3}}
+Then you get
+\begin{bundle}{xxx}
+\chunk{aaa}
+\chunk{
+ \begin{bundle}{yyy}
+ \chunk{bbb}
+ \chunk{ddd}
+ \end{bundle}}
+\chunk{ccc}
+\end{bundle}.
+
+The argument of \verb|\drawwith| is evaluated
+at \verb|\end{bundle}|. Hence, if you write
+\begin{verbatim}
+\begin{bundle}{xxx}
+\chunk{aaa}
+\chunk{
+ \begin{bundle}{yyy}
+ \drawwith{\drawline}
+ \chunk{bbb}
+ \drawwith{\dashline[65]{3}}
+ \chunk{ddd}
+ \end{bundle}}
+\drawwith{\dottedline{3}}
+\chunk{ccc}
+\end{bundle}
+\end{verbatim}
+you get
+\begin{bundle}{xxx}
+\chunk{aaa}
+\chunk{
+ \begin{bundle}{yyy}
+ \drawwith{\drawline}
+ \chunk{bbb}
+ \drawwith{\dashline[65]{3}}
+ \chunk{ddd}
+ \end{bundle}}
+\drawwith{\dottedline{3}}
+\chunk{ccc}
+\end{bundle}.
+
+You can nest the \verb|\drawwith|. If you write
+\begin{verbatim}
+\drawwith{\drawwith{\drawwith{\dottedline{3}}\drawline}\dashline{3}}
+\begin{bundle}{xxx}
+\chunk{aaa}
+\chunk{
+ \begin{bundle}{yyy}
+ \chunk{bbb}
+ \chunk{ddd}
+ \chunk{eee}
+ \end{bundle}}
+\chunk{ccc}
+\chunk{fff}
+\end{bundle}
+\end{verbatim}
+you get
+\drawwith{\drawwith{\drawwith{\dottedline{3}}\drawline}\dashline{3}}
+\begin{bundle}{xxx}
+\chunk{aaa}
+\chunk{
+ \begin{bundle}{yyy}
+ \chunk{bbb}
+ \chunk{ddd}
+ \chunk{eee}
+ \end{bundle}}
+\chunk{ccc}
+\chunk{fff}
+\end{bundle}.
+Thus the nested \verb|\drawwith| is used in the reverse order.
+
+\section{Edge labels}
+
+You can write edge labels. They should be specified as the optional
+argument of \verb|\chunk|. Note that the width of an edge label
+is neglected. If you write
+\drawwith{\drawline}
+\begin{verbatim}
+\begin{bundle}{xxx}
+\chunk[left]{aaa}
+\chunk{
+ \begin{bundle}{yyy}
+ \chunk{bbb}
+ \chunk{ddd}
+ \end{bundle}}
+\chunk[right]{ccc}
+\end{bundle}
+\end{verbatim}
+you get
+\begin{bundle}{xxx}
+\chunk[left]{aaa}
+\chunk{
+ \begin{bundle}{yyy}
+ \chunk{bbb}
+ \chunk{ddd}
+ \end{bundle}}
+\chunk[right]{ccc}
+\end{bundle}.
+
+
+\section{Spacing}
+
+The {\it bundle} environment
+has three parameters for spacing.
+
+\begin{itemize}
+
+\item \verb|\GapDepth| means minimum height of gaps between
+adjacent nodes.
+
+\item \verb|\GapWidth| means minimum width of gaps between
+adjacent nodes.
+
+\item \verb|\EdgeLabelSep| means height of an edge label
+from the lower node of the edge.
+
+\end{itemize}
+
+You should set these parameters before the {\tt bundle} environment
+if you dislike default values.
+
+If you write
+\begin{verbatim}
+\begin{bundle}{xxx}
+\chunk{aaa}
+\chunk{
+ \setlength{\GapDepth}{5pt}
+ \setlength{\GapWidth}{5pt}
+ \begin{bundle}{yyy}
+ \chunk{bbb}
+ \chunk{ddd}
+ \end{bundle}}
+\chunk{ccc}
+\end{bundle}
+\end{verbatim}
+you get
+\begin{bundle}{xxx}
+\chunk{aaa}
+\chunk{
+ \setlength{\GapDepth}{5pt}
+ \setlength{\GapWidth}{5pt}
+ \begin{bundle}{yyy}
+ \chunk{bbb}
+ \chunk{ddd}
+ \end{bundle}}
+\chunk{ccc}
+\end{bundle}.
+
+
+
+
+\end{document}
+
diff --git a/obsolete/macros/latex209/contrib/epsfig/README.unix b/obsolete/macros/latex209/contrib/epsfig/README.unix
new file mode 100644
index 0000000000..788eff6e07
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/epsfig/README.unix
@@ -0,0 +1,43 @@
+REQUIREMENTS
+
+ o Perl
+ o GNU gunzip.
+ o UNIX (maybe).
+
+INSTALLATION.
+
+ o Edit the Makefile installation paths.
+ o Edit the config variables at the beginning of the perl scripts "epsfig"
+ and "epsbb".
+ o Type 'make install' (or 'make -n install' to see what its gonna do).
+
+MANIFEST
+
+ o README -- you're reading it.
+ o Makefile -- just does installation.
+ o epsbb -- will construct *.bb files, and compress ps files either
+ individually or for a whole directory.
+ o epsfig -- Used by dvips. Will try to find file on TEXINPUTS path
+ print that file to stdout. Will gnuzip where necessary.
+ o epsfig.sty -- slightly modified version incorporating epsfig. By default
+ epsbb will be applied to the \epsfig files when dvips is
+ run. This can be turned off with the control sequence
+ \psnocompress and on again with \pscompress.
+
+DOCUMENTATION
+
+ Minimal. See above, read the beginning comments in the perl scripts, and
+ the comments in epsfig.sty.
+
+PROBLEMS
+
+ I really hacked this up quickly because I some problems with the way
+ decompression was implemented in the original epsfig.sty. It seems to work
+ on our setup but no guarantees.
+
+ Suggestions, comments regarding the decompressions stuff mail me:
+ peta@mcrcim.mcgill.edu (Peter Whaite).
+
+ I wouldn't have a clue about any of the other epsfig.sty things. Best mail
+ the author: rahtz@dxcern.cern.ch (Sebastian Rahtz).
+
diff --git a/obsolete/macros/latex209/contrib/epsfig/epsbb b/obsolete/macros/latex209/contrib/epsfig/epsbb
new file mode 100644
index 0000000000..8e8fbccab1
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/epsfig/epsbb
@@ -0,0 +1,68 @@
+#!/usr/local/bin/perl
+#
+# Extract Bounding Box *.bb and compress postscript figure files.
+#
+# usage: epsbb --- For all files in the current directory.
+# epsbb DIR --- For all files in the directory DIR.
+# epsbb FILES... --- For all the FILES on the command line
+#
+# Author: Peter Whaite (peta@mcrcim.mcgill.edu)
+# Centre for Intelligent Machines, McGill University.
+$RCSVERSION='$Id: epsbb,v 1.2 1993/09/05 20:16:45 peta Exp $';
+
+## USER CONFIG -- edit the following to suit your system.
+#
+$GZIP='/usr/local/bin/gzip';
+$ZCAT='/usr/local/bin/gunzip -c';
+#
+## END USER CONFIG
+
+@ARGV=<*> unless ($#ARGV>=0); # epsbb
+@ARGV=<$ARGV[0]/*> if ($#ARGV==0 && (-d $ARGV[0])); # epsbb DIR
+
+FILE: while ($_=shift)
+{
+ /\.bb$/ && next;
+ -e ($eps=$_) || -e ($eps="$_.gz") || -e ($eps="$_.z") || -e ($eps="$_.Z")
+ || do { warn("$_ does not exist\n"); next;};
+ -f $eps || do { warn("$eps not a plain file\n"); next;};
+ $epsf = $eps;
+ $compressed = 0;
+ $eps =~ /^(.*)\.(gz|z|Z)$/ && do
+ {
+ $eps = $1;
+ $epsf = "$ZCAT $eps|";
+ $compressed = 1;
+ };
+
+ open(EPS,$epsf) || do {warn("$0: $epsf: $!\n"); next;};
+ while (<EPS>)
+ {
+ /^%[%\w]*BoundingBox/ && do
+ {
+ open(BB,">$eps.bb") || do
+ {
+ warn("$0: $eps.bb: $!\n");
+ next FILE;
+ };
+ print STDERR "Writing $eps.bb";
+ print BB;
+ close BB;
+ if (!$compressed)
+ {
+ print STDERR ", compressing $eps...";
+ system("$GZIP $eps") unless $compressed;
+ }
+ print STDERR "\n";
+ close EPS;
+ next FILE;
+ };
+ };
+ close EPS;
+ warn("$eps has no bounding box\n");
+}
+
+# Local Variables:
+# mode: perl
+# auto-fill-hook: do-auto-fill
+# End:
diff --git a/obsolete/macros/latex209/contrib/epsfig/epsfig b/obsolete/macros/latex209/contrib/epsfig/epsfig
new file mode 100644
index 0000000000..71d39bc1ce
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/epsfig/epsfig
@@ -0,0 +1,62 @@
+#!/usr/local/bin/perl
+#
+# usage: epsfig [-c] FILE
+#
+# Write (possibly compressed) epsfig FILE to stdout. The TEXINPUTS path is
+# searched for FILE{,.gz,z,Z}. With the -c option the FILE is gziped and
+# FILE.bb is generated. If FILE is in the system default $SYSTEXINPUTS path
+# no attempt is made to epsbb it.
+#
+# Used by epsfig.sty inside backquoted dvips specials.
+#
+# Author: Peter Whaite (peta@mcrcim.mcgill.edu)
+# Centre for Intelligent Machines, McGill University.
+# $Id: epsfig,v 1.3 1993/09/13 22:55:00 peta Exp $
+
+## USER CONFIG -- edit the following to suit your system.
+#
+$SYSTEXINPUTS='.:/usr/local/tex/lib/texinputs';
+$ZCAT='/usr/local/bin/gunzip -c';
+#
+## END USER CONFIG
+
+while ($_=shift,/^-/)
+{
+ /^-c/ && do {$compress++;next};
+ die "$0: bad option $_\nusage: $0 [-c] <file>\n";
+}
+die "usage: $0 [-c] <file>\n" unless $#ARGV == -1;
+$file=$_;
+
+$TEXINPUTS=$ENV{'TEXINPUTS'};
+$TEXINPUTS .= $SYSTEXINPUTS if ((! $TEXINPUTS)||($TEXINPUTS =~ /:$/));
+@SYSTEXINPUTS = split(/:/,$SYSTEXINPUTS);
+@TEXINPUTS = split(/:/,$TEXINPUTS);
+
+foreach $dir (@TEXINPUTS)
+{
+ $epsf = "$dir/$file";
+ (-f $epsf) && do {$cmd = "$epsf"; $uncompressed=1; last;};
+ (-f "$epsf.gz") && do {$cmd="$ZCAT $epsf|"; last;};
+ (-f "$epsf.z") && do {$cmd="$ZCAT $epsf|"; last;};
+ (-f "$epsf.Z") && do {$cmd= "$ZCAT $epsf|"; last;};
+}
+$cmd || die("$0: $file.{z,gz,Z} not found\n");
+
+open(EPSF,$cmd) || die("$0: $cmd: $!\n");
+while (<EPSF>)
+{
+ print;
+}
+close EPSF;
+
+if ($compress && $uncompressed)
+{
+ exit(0) if (grep(/^$dir$/,@SYSTEXINPUTS) && ($dir =~ m#^/#));
+ system("epsbb $epsf");
+};
+
+# Local Variables:
+# mode: perl
+# auto-fill-hook: do-auto-fill
+# End:
diff --git a/obsolete/macros/latex209/contrib/epsfig/epsfig.2e b/obsolete/macros/latex209/contrib/epsfig/epsfig.2e
new file mode 100644
index 0000000000..3e86ec981b
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/epsfig/epsfig.2e
@@ -0,0 +1,1337 @@
+%----------------------------------------------
+\NeedsTeXFormat{LaTeX2e}
+\def\fileversion{2}%
+\def\filedate{1994/01/25}%
+\ProvidesPackage{epsfig}[\filedate]
+\message{ Epsfig }
+% minimal reworking for LaTeX2e!
+%
+% this will be all be rewritten when the LaTeX2e includegraphics
+% comes out.
+%
+% SPQR Jan 94
+%
+%%%--------------------------------------------------------------------
+%%% psfig merged with EPSF = epsfig Release 1
+%%% 1.0 November 91
+%%% 1.1 Dec 91 fixed some bugs
+%%% 1.2 Jan 92 fixed bug that it never stopped reading PS file until
+%%% it reached the end! merged in changes from psfig1.8
+%%% (plain TeX definition of \fbox, new code for rotation)
+%%% 1.3 Jan 92 separated out \special code so that dvitops can be
+%%% supported. use \psfigdriver{dvitops}%
+%%% 1.4 Jan 92 fixed dvitops. need to input psfig at different point
+%%% in dvips from dvitops. define \psfig@start and \psfig@end to cope
+%%% with this
+%%% 1.5 Jan 92 force use of psfig method if using dvitops
+%%% 1.6 May 92 fixed bugs
+%%% 1.7 Sep 92 added support for emtex, sort of. reads a .bb file
+%%% and imports .pcx file. Boolean flag \epsfigdos used
+%%% to indicate that we cannot have more than one . in the
+%%% suffix (ie we will look at file.bb not file.eps.bb)
+%%%
+%%% 1.8 Sep 92 added support for OzTeX; fixed bugs in dvips support
+%%% (including clipping to bounding box); removed use of dimen100.
+%%%
+%%% 1.9 Dec 92 cleaned up documentation again
+%%% 1.10 Mar 93 cleaned up for plain TeX
+%%% 1.11 Mar 93 merged in changes by Peter Galko (supplied by CERN) for
+%%% use with Textures
+%%% 1.12 Apr 93 actually *tested* the Textures additions, and so rewrote
+%%% from scratch (borrowed an idea from psbox)
+%%% 1.13 May 93 allow for file names with _ or $ in them in \psdraft, and
+%%% fix problem that occurred with missing BoundingBox
+%%% 1.14 May 93 allow for .z suffix
+%%% 1.15 July 93 allow for .gz suffix
+%%% use \leavevmode as appropriate
+%%% fix plain \TeX mode
+%%% (fixes from Peter-Klaus Schilling <R02SCH@DSYIBM.DESY.DE>)
+%%% 1.16 August 93 [peta@mcrcim.mcgill.edu (Peter Whaite)]
+%%% -- Implement Perl scripts to do compressed file inclusion and bb
+%%% generation.
+%%% -- Add \pscompress.
+%%% -- Tidy up comments.
+%%% 1.17 September 93 SPQR
+%%% better code for literal name printing
+%%% allowed for spaces around , and =
+%%% 1.18 17.9.93
+%%% updates to epsbb and epsfig from Peter W
+%%% 1.19 14.11.93
+%%% mistaken placement of calculation of EPS@Height resulted in errors
+%%%
+%--------------------------------------------------------
+%%%
+%%% code rearranged by Sebastian Rahtz (spqr@uk.ac.york.minster)
+%%% from work by
+%%% Trevor Darrell; Tom Rokicki; Daniel Smith; H. Payne, Robert Russell
+%%%
+%%% This is a version of Darrell's `psfig' macros which are designed
+%%% to be used with dvips or dvitops, and the `epsf' macros (these are
+%%% automaticaly included by the style file). I did this because the
+%%% \special commands used by `epsf' appear to be more robust and
+%%% portable than the raw \specials used by `psfig', but I preferred
+%%% the psfig interface. This system preserves the psfig interface,
+%%% but mainly uses epsf macros to carry out the job. The user
+%%% interface is identical to \psfig, but you just use \epsfig
+%%% instead. Rotation uses the original psfig macros: I could not work
+%%% out how to do rotation with the epsf macros.
+%%%
+%%% The same applies to `rheight' and `rwidth'
+%%%
+%%% If you *really* want old psfig behaviour regardless, use \psfig. It is
+%%% still there. Some of the features have gone, however. \figurepath
+%%% seemed redundant, since it could be controlled by the TEXINPUTS
+%%% variable anyway.
+%%%
+%%% As an added feature, if FILE cannot be found, a file called FILE.bb
+%%% is searched for. This should simply contain a %%BoundingBox line. A perl
+%%% script "epsbb" is provided to generate these automatically. It is
+%%% assumed that if this exists, then the actual postscript is in UNIX
+%%% compress format in FILE.Z or in GNU gzip format in FILE.gz or FILE.z.
+%%%
+%%% The macros then read the BB from FILE.bb, but insert "`epsfig FILE`" in
+%%% the output for dvips to interpret (don't worry, it knows about this).
+%%% "Epsfig" is another perl script which searches the TEXINPUTS path for
+%%% FILE or FILE.{gz,z,Z}.
+%%%
+%%% As an added bonus if you say \pscompress the -c switch will be passed to
+%%% epsfig, causing automatic FILE.bb generation and compression the first
+%%% time dvips is run. Files in the system directories will NOT be
+%%% compressed.
+%%% If you are *not* on a Unix system and use this, deliberately or by
+%%% mischance, you will have problems!
+%%%
+%%% This file can be included in a dumped format, or used as a LaTeX
+%%% style file, or used in plain TeX. It does not load itself twice (I hope)
+%%%
+%--------------------------------------------------------------------
+%--------------------------------------------------------------------
+%%% previous notes. this copy of psfig.tex inherited from versions 1.8
+%--------------------------------------------------------------------
+%%% All psfig/tex software, documentation, and related files
+%%% in this distribution of psfig/tex are
+%%% Copyright 1987, 1988, 1991 Trevor J. Darrell
+%
+%%% Permission is granted for use and non-profit distribution of psfig/tex
+%%% providing that this notice be clearly maintained. The right to
+%%% distribute any portion of psfig/tex for profit or as part of any commercial
+%%% product is specifically reserved for the author(s) of that portion.
+%%%
+%%% Thanks to Greg Hager (GDH) and Ned Batchelder for their contributions
+%%% to this project.
+%%%--------------------------------------------------------------------------
+%%% GDH 7/26/87 -- changed so that it first looks in the local directory,
+%%% then in a specified global directory for the ps file.
+%%% SPQR 12/91 removed that last change. it follows TEXINPUTS anyway
+%%% RPR 6/25/91 -- changed so that it defaults to user-supplied name if
+%%% boundingbox info is specified, assuming graphic will be created by
+%%% print time.
+%%% SPQR 12/91 removed that last change. use LaTeX error message instead
+%%% SPQR 12/91 -- `no file found' produces LaTeX error message.
+%%% If you recover from that the file name is set in draft
+%%% mode in place of the file.
+%%%
+%%% Modified by J. Daniel Smith on 9 October 1990 to accept the
+%%% %%BoundingBox: comment with or without a space after the colon. Stole
+%%% file reading code from Tom Rokicki's EPSF.TEX file (see below).
+%%% --- SPQR 12.91 removed most of this to use epsf directly
+%%%
+%%% More modifications by J. Daniel Smith on 29 March 1991 to allow the
+%%% the included PostScript figure to be rotated. The amount of
+%%% rotation is specified by the "angle=" parameter of the \epsfig command.
+%%%
+%%% Modified by Robert Russell on June 25, 1991 to allow users to specify
+%%% .ps filenames which don't yet exist, provided they explicitly provide
+%%% boundingbox information via the \epsfig command. Note: This will only work
+%%% if the "file=" parameter follows all four "bb???=" parameters in the
+%%% command. This is due to the order in which psfig interprets these params.
+%%% ---- SPQR 12.91 removed all this
+%%%
+%%% 3 Jul 1991 JDS check if file already read in once
+%%%
+%-----------------------------USAGE---------------------------------------
+% From: gvr@cs.brown.edu (George V. Reilly)
+%
+% \psdraft draws an outline box, but doesn't include the figure
+% in the DVI file. Useful for previewing.
+%
+% \psfull includes the figure in the DVI file (default).
+%
+% \psscalefirst width= or height= specifies the size of the figure
+% before rotation.
+% \psrotatefirst (default) width= or height= specifies the size of the
+% figure after rotation. Asymetric figures will
+% appear to shrink.
+%
+% usage: \epsfig{file=, figure=, height=, width=,
+% bbllx=, bblly=, bburx=, bbury=,
+% rheight=, rwidth=, clip=, angle=, silent=}%
+%
+% "file" is the filename. If no path name is specified and the
+% file is not found in the current directory,
+% it will be looked for in directory \psfigurepath.
+% "figure" is a synonym for "file".
+% By default, the width and height of the figure are taken from
+% the BoundingBox of the figure.
+% If "width" is specified, the figure is scaled so that it has
+% the specified width. Its height changes proportionately.
+% If "height" is specified, the figure is scaled so that it has
+% the specified height. Its width changes proportionately.
+% If both "width" and "height" are specified, the figure is scaled
+% anamorphically.
+% "bbllx", "bblly", "bburx", and "bbury" control the PostScript
+% BoundingBox.
+% "rheight" and "rwidth" are the reserved height and width
+% of the figure, i.e., how big TeX actually thinks
+% the figure is. They default to "width" and "height".
+% The "clip" option ensures that no portion of the figure will
+% appear outside its BoundingBox. "clip=" is a switch and
+% takes no value, but the `=' must be present.
+% The "angle" option specifies the angle of rotation (degrees, ccw).
+% The "silent" option makes \psfig work silently.
+%
+%--------------------------------------------------------------------------
+%%% if this is true, the original Darrell macros and specials are used
+\newif\ifuse@psfig
+\use@psfigtrue
+\newcount\EPS@Height \newcount\EPS@Width \newcount\EPS@xscale
+\newcount\EPS@yscale
+\def\psfig@start{\typeout{EPSFIG - driver}}
+\def\psfig@end{\typeout{EPSFIG - driver}}
+\def\epsfig@gofer{\typeout{EPSFIG - driver}}
+\newcount\fig@driver
+\DeclareOption{ln03}{
+\typeout{WARNING! ****
+ no specials for LN03 epsfig}%
+}
+\DeclareOption{dvitops}{%
+ \use@psfigtrue
+ \def\psfig@start{}%
+ \def\psfig@end{\special{dvitops: import \@p@sfilefinal \space
+ \@p@swidth sp \space \@p@sheight sp \space fill}%
+ \if@clip \typeout{Clipping not supported}\fi
+ \if@angle \typeout{Rotating not supported}\fi}
+ \let\epsfig@gofer\psfig@end
+}
+
+\DeclareOption{dvips}{%
+ \message{(dvips)}%
+ \use@psfigfalse
+ \def\psfig@start{
+ \message{ what are \@p@swidth, and \@p@sheight}%
+ \special{ps::[begin] \@p@swidth \space \@p@sheight \space%
+ \@p@sbbllx \space \@p@sbblly \space%
+ \@p@sbburx \space \@p@sbbury \space%
+ startTexFig \space }%
+ \if@angle
+ \special {ps:: \@p@sangle \space rotate \space}
+ \fi
+ \if@clip
+ \if@verbose
+ \typeout{(clipped to BB) }%
+ \fi
+ \special{ps:: doclip \space }%
+ \fi
+ \special{ps: plotfile \@p@sfilefinal \space }%
+ \special{ps::[end] endTexFig \space }%
+ }%
+ \def\psfig@end{}%
+ \def\epsfig@gofer{
+ \if@clip
+ \if@verbose
+ \typeout{(clipped to BB)}%
+ \fi
+ \epsfclipon
+ \fi
+ \epsfsetgraph{\@p@sfilefinal}%
+ }
+}
+
+\DeclareOption{emtex}{%
+ \use@psfigtrue
+ \fig@driver3
+ \Typeout{WARNING. You must have a .bb info file with the Bounding Box
+ of the pcx file}%
+ \def\psfig@start{}%
+ % when emtex imports a pcx file, it is *below* where we are now.
+ % so raise the box
+ \def\psfig@end{\typeout{pcx import of \@p@sfilefinal}%
+ \if@clip \typeout{Clipping not supported}\fi
+ \if@angle \typeout{Rotating not supported}\fi
+ \raisebox{\@p@srheight sp}{\special{em: graph \@p@sfilefinal}}}%
+ \def\epsfig@gofer{}%
+}
+
+\DeclareOption{oztex}{%
+ \use@psfigtrue
+ \message{(OzTeX)}%
+ \def\psfig@start{}%
+ \def\psfig@end{%
+ \EPS@Width\@p@swidth
+ \EPS@Height\@p@sheight
+ \divide\EPS@Width by 65781 % convert sp to bp
+ \divide\EPS@Height by 65781
+ \special{epsf=\@p@sfilefinal
+ \space
+ width=\the\EPS@Width
+ \space
+ height=\the\EPS@Height
+ }%
+ \if@clip \typeout{Clipping not supported}\fi
+ \if@angle \typeout{Rotating not supported}\fi
+ }%
+ \let\epsfig@gofer\psfig@end
+}
+\DeclareOption{textures}{%
+ \message{(Textures)}%
+ \use@psfigtrue
+ \def\psfig@end{
+ % what is scaling of picture
+ \EPS@Width=\@bbw
+ \divide\EPS@Width by 1000
+ \EPS@xscale=\@p@swidth \divide \EPS@xscale by \EPS@Width
+ \EPS@Height=\@bbh
+ \divide\EPS@Height by 1000
+ \EPS@yscale=\@p@sheight \divide \EPS@yscale by\EPS@Height
+ % take largest calculated scale
+ \ifnum\EPS@xscale>\EPS@yscale\EPS@xscale=\EPS@yscale\fi
+ \if@clip
+ \if@verbose
+ \typeout{(clipped to BB)}%
+ \fi
+ \epsfclipon
+ \fi
+ \special{illustration \@p@sfilefinal\space scaled \the\EPS@xscale}%
+ }%
+ \def\psfig@start{}%
+}
+\ProcessOptions
+
+% copies of bits of LaTeX we need....
+\newdimen\ps@dimcent
+%
+% \fbox is defined in latex.tex; so if \fbox is undefined, assume that
+% we are not in LaTeX.
+% Perhaps this could be done better???
+\ifx\undefined\fbox
+% \fbox code from modified slightly from LaTeX
+\newdimen\fboxrule
+\newdimen\fboxsep
+\newdimen\ps@tempdima
+\newbox\ps@tempboxa
+\fboxsep = 0pt
+\fboxrule = .4pt
+\long\def\fbox#1{\leavevmode\setbox\ps@tempboxa\hbox{#1}\ps@tempdima\fboxrule
+ \advance\ps@tempdima \fboxsep \advance\ps@tempdima \dp\ps@tempboxa
+ \hbox{\lower \ps@tempdima\hbox
+ {\vbox{\hrule height \fboxrule
+ \hbox{\vrule width \fboxrule \hskip\fboxsep
+ \vbox{\vskip\fboxsep \box\ps@tempboxa\vskip\fboxsep}\hskip
+ \fboxsep\vrule width \fboxrule}%
+ \hrule height \fboxrule}}}}%
+\fi
+\ifx\@ifundefined\undefined
+\long\def\@ifundefined#1#2#3{\expandafter\ifx\csname
+ #1\endcsname\relax#2\else#3\fi}%
+\fi
+%
+\@ifundefined{typeout}%
+{\gdef\typeout#1{\immediate\write\sixt@@n{#1}}}%
+{\relax}%
+%
+%%% check to see if macros already loaded in (maybe some other file says
+%%% "\input epsfig") ...
+\@ifundefined{epsfig}{}{\typeout{EPSFIG --- already loaded}\endinput}%
+%
+%%%
+%%% we need Rokicki's EPSF macros anyway:
+%
+% EPSF.TEX macro file:
+% Written by Tomas Rokicki of Radical Eye Software, 29 Mar 1989.
+% Revised by Don Knuth, 3 Jan 1990.
+% Revised by Tomas Rokicki to accept bounding boxes with no
+% space after the colon, 18 Jul 1990.
+%
+% TeX macros to include an Encapsulated PostScript graphic.
+% Works by finding the bounding box comment,
+% calculating the correct scale values, and inserting a vbox
+% of the appropriate size at the current position in the TeX document.
+%
+% To use with the center environment of LaTeX, preface the \epsffile
+% call with a \leavevmode. (LaTeX should probably supply this itself
+% for the center environment.)
+%
+% To use, simply say
+% \input epsf % somewhere early on in your TeX file
+% \epsfbox{filename.ps} % where you want to insert a vbox for a figure
+%
+% Alternatively, you can type
+%
+% \epsfbox[0 0 30 50]{filename.ps} % to supply your own BB
+%
+% which will not read in the file, and will instead use the bounding
+% box you specify.
+%
+% The effect will be to typeset the figure as a TeX box, at the
+% point of your \epsfbox command. By default, the graphic will have its
+% `natural' width (namely the width of its bounding box, as described
+% in filename.ps). The TeX box will have depth zero.
+%
+% You can enlarge or reduce the figure by saying
+% \epsfxsize=<dimen> \epsfbox{filename.ps}
+% (or
+% \epsfysize=<dimen> \epsfbox{filename.ps})
+% instead. Then the width of the TeX box will be \epsfxsize and its
+% height will be scaled proportionately (or the height will be
+% \epsfysize and its width will be scaled proportiontally). The
+% width (and height) is restored to zero after each use.
+%
+% A more general facility for sizing is available by defining the
+% \epsfsize macro. Normally you can redefine this macro
+% to do almost anything. The first parameter is the natural x size of
+% the PostScript graphic, the second parameter is the natural y size
+% of the PostScript graphic. It must return the xsize to use, or 0 if
+% natural scaling is to be used. Common uses include:
+%
+% \epsfxsize % just leave the old value alone
+% 0pt % use the natural sizes
+% #1 % use the natural sizes
+% \hsize % scale to full width
+% 0.5#1 % scale to 50% of natural size
+% \ifnum#1>\hsize\hsize\else#1\fi % smaller of natural, hsize
+%
+% If you want TeX to report the size of the figure (as a message
+% on your terminal when it processes each figure), say `\epsfverbosetrue'.
+%
+\newread\epsffilein % file to \read
+\newif\ifepsffileok % continue looking for the bounding box?
+\newif\ifepsfbbfound % success?
+\newif\ifepsfverbose % report what you're making?
+\newif\ifepsfdraft % use draft mode?
+\newdimen\epsfxsize % horizontal size after scaling
+\newdimen\epsfysize % vertical size after scaling
+\newdimen\epsftsize % horizontal size before scaling
+\newdimen\epsfrsize % vertical size before scaling
+\newdimen\epsftmp % register for arithmetic manipulation
+\newdimen\pspoints % conversion factor
+%
+\pspoints=1bp % Adobe points are `big'
+\epsfxsize=0pt % Default value, means `use natural size'
+\epsfysize=0pt % ditto
+%
+\def\epsfbox#1{\global\def\epsfllx{72}\global\def\epsflly{72}%
+ \global\def\epsfurx{540}\global\def\epsfury{720}%
+ \def\lbracket{[}\def\testit{#1}\ifx\testit\lbracket
+ \let\next=\epsfgetlitbb\else\let\next=\epsfnormal\fi\next{#1}}%
+%
+\def\epsfgetlitbb#1#2 #3 #4 #5]#6{\epsfgrab #2 #3 #4 #5 .\\%
+ \epsfsetgraph{#6}}%
+%
+\def\epsfnormal#1{\epsfgetbb{#1}\epsfsetgraph{#1}}%
+%
+\def\epsfgetbb#1{%
+%
+% The first thing we need to do is to open the
+% PostScript file, if possible.
+%
+\openin\epsffilein=#1
+\ifeof\epsffilein\errmessage{I couldn't open #1, will ignore it}\else
+%
+% Okay, we got it. Now we'll scan lines until we find one that doesn't
+% start with %. We're looking for the bounding box comment.
+%
+ {\epsffileoktrue \chardef\other=12
+ \def\do##1{\catcode`##1=\other}\dospecials \catcode`\ =10
+ \loop
+ \read\epsffilein to \epsffileline
+ \ifeof\epsffilein\epsffileokfalse\else
+%
+% We check to see if the first character is a % sign;
+% if not, we stop reading (unless the line was entirely blank);
+% if so, we look further and stop only if the line begins with
+% `%%BoundingBox:'.
+%
+ \expandafter\epsfaux\epsffileline:. \\%
+ \fi
+ \ifepsffileok\repeat
+ \ifepsfbbfound\else
+ \ifepsfverbose\message{No bounding box comment in #1; using defaults}\fi\fi
+ }\closein\epsffilein\fi}%
+%
+% Now we have to calculate the scale and offset values to use.
+% First we compute the natural sizes.
+%
+\def\epsfclipon{\def\epsfclipstring{ clip}}%
+\def\epsfclipoff{\def\epsfclipstring{\ifepsfdraft\space clip\fi}}%
+\epsfclipoff
+%
+\def\epsfsetgraph#1{%
+ \epsfrsize=\epsfury\pspoints
+ \advance\epsfrsize by-\epsflly\pspoints
+ \epsftsize=\epsfurx\pspoints
+ \advance\epsftsize by-\epsfllx\pspoints
+%
+% If `epsfxsize' is 0, we default to the natural size of the picture.
+% Otherwise we scale the graph to be \epsfxsize wide.
+%
+ \epsfxsize\epsfsize\epsftsize\epsfrsize
+ \ifnum\epsfxsize=0 \ifnum\epsfysize=0
+ \epsfxsize=\epsftsize \epsfysize=\epsfrsize
+ \epsfrsize=0pt
+%
+% We have a sticky problem here: TeX doesn't do floating point arithmetic!
+% Our goal is to compute y = rx/t. The following loop does this reasonably
+% fast, with an error of at most about 16 sp (about 1/4000 pt).
+%
+ \else\epsftmp=\epsftsize \divide\epsftmp\epsfrsize
+ \epsfxsize=\epsfysize \multiply\epsfxsize\epsftmp
+ \multiply\epsftmp\epsfrsize \advance\epsftsize-\epsftmp
+ \epsftmp=\epsfysize
+ \loop \advance\epsftsize\epsftsize \divide\epsftmp 2
+ \ifnum\epsftmp>0
+ \ifnum\epsftsize<\epsfrsize\else
+ \advance\epsftsize-\epsfrsize \advance\epsfxsize\epsftmp \fi
+ \repeat
+ \epsfrsize=0pt
+ \fi
+ \else \ifnum\epsfysize=0
+ \epsftmp=\epsfrsize \divide\epsftmp\epsftsize
+ \epsfysize=\epsfxsize \multiply\epsfysize\epsftmp
+ \multiply\epsftmp\epsftsize \advance\epsfrsize-\epsftmp
+ \epsftmp=\epsfxsize
+ \loop \advance\epsfrsize\epsfrsize \divide\epsftmp 2
+ \ifnum\epsftmp>0
+ \ifnum\epsfrsize<\epsftsize\else
+ \advance\epsfrsize-\epsftsize \advance\epsfysize\epsftmp \fi
+ \repeat
+ \epsfrsize=0pt
+ \else
+ \epsfrsize=\epsfysize
+ \fi
+ \fi
+%
+% Finally, we make the vbox and stick in a \special that dvips can parse.
+%
+ \ifepsfverbose\message{#1: width=\the\epsfxsize, height=\the\epsfysize}\fi
+ \epsftmp=10\epsfxsize \divide\epsftmp\pspoints
+ \vbox to\epsfysize{\vfil\hbox to\epsfxsize{%
+ \ifnum\epsfrsize=0\relax
+ \special{PSfile=\ifepsfdraft psdraft.ps\else#1\fi\space
+ llx=\epsfllx\space lly=\epsflly\space
+ urx=\epsfurx\space ury=\epsfury\space rwi=\number\epsftmp
+ \epsfclipstring}%
+ \else
+ \epsfrsize=10\epsfysize \divide\epsfrsize\pspoints
+ \special{PSfile=\ifepsfdraft psdraft.ps\else#1\fi\space
+ llx=\epsfllx\space lly=\epsflly\space
+ urx=\epsfurx\space ury=\epsfury\space rwi=\number\epsftmp\space
+ rhi=\number\epsfrsize \epsfclipstring}%
+ \fi
+ \hfil}}%
+\global\epsfxsize=0pt\global\epsfysize=0pt}%
+%
+% We still need to define the tricky \epsfaux macro. This requires
+% a couple of magic constants for comparison purposes.
+%
+{\catcode`\%=12 \global\let\epsfpercent=%\global\def\epsfbblit{%BoundingBox}}%
+%
+% So we're ready to check for `%BoundingBox:' and to grab the
+% values if they are found.
+%
+\long\def\epsfaux#1#2:#3\\{\ifx#1\epsfpercent
+ \def\testit{#2}\ifx\testit\epsfbblit
+ \epsfgrab #3 . . . \\%
+ \epsffileokfalse
+ \global\epsfbbfoundtrue
+ \fi\else\ifx#1\par\else\epsffileokfalse\fi\fi}%
+%
+% Here we grab the values and stuff them in the appropriate definitions.
+%
+\def\epsfempty{}%
+\def\epsfgrab #1 #2 #3 #4 #5\\{%
+\global\def\epsfllx{#1}\ifx\epsfllx\epsfempty
+ \epsfgrab #2 #3 #4 #5 .\\\else
+ \global\def\epsflly{#2}%
+ \global\def\epsfurx{#3}\global\def\epsfury{#4}\fi}%
+%
+% We default the epsfsize macro.
+%
+\def\epsfsize#1#2{\epsfxsize}
+%
+% Finally, another definition for compatibility with older macros.
+%
+\let\epsffile=\epsfbox
+
+%
+%% SPQR 12.91 handling of errors using standard LaTeX error
+%% mechanism. In case we are plain TeX we first define the
+%% error routines...
+\ifx\undefined\@latexerr
+ \newlinechar`\^^J
+ \def\@spaces{\space\space\space\space}%
+ \def\@latexerr#1#2{%
+ \edef\@tempc{#2}\expandafter\errhelp\expandafter{\@tempc}%
+ \typeout{Error. \space see a manual for explanation.^^J
+ \space\@spaces\@spaces\@spaces Type \space H <return> \space for
+ immediate help.}\errmessage{#1}}%
+\fi
+%------------------------
+%% a couple of LaTeX error messages
+\def\@whattodo{You tried to include a PostScript figure which
+cannot be found^^JIf you press return to carry on anyway,^^J
+The failed name will be printed in place of the figure.^^J
+or type X to quit}%
+\def\@whattodobb{You tried to include a PostScript figure which
+has no^^Jbounding box, and you supplied none.^^J
+If you press return to carry on anyway,^^J
+The failed name will be printed in place of the figure.^^J
+or type X to quit}%
+%------------------------
+%
+%------------------------------------------------------------------------
+%------------------------------------------------------------------------
+%%% @psdo control structure -- similar to Latex @for.
+%%% I redefined these with different names so that psfig can
+%%% be used with TeX as well as LaTeX, and so that it will not
+%%% be vunerable to future changes in LaTeX's internal
+%%% control structure,
+%
+\def\@nnil{\@nil}%
+\def\@empty{}%
+\def\@psdonoop#1\@@#2#3{}%
+\def\@psdo#1:=#2\do#3{\edef\@psdotmp{#2}\ifx\@psdotmp\@empty \else
+ \expandafter\@psdoloop#2,\@nil,\@nil\@@#1{#3}\fi}%
+\def\@psdoloop#1,#2,#3\@@#4#5{\def#4{#1}\ifx #4\@nnil \else
+ #5\def#4{#2}\ifx #4\@nnil \else#5\@ipsdoloop #3\@@#4{#5}\fi\fi}%
+\def\@ipsdoloop#1,#2\@@#3#4{\def#3{#1}\ifx #3\@nnil
+ \let\@nextwhile=\@psdonoop \else
+ #4\relax\let\@nextwhile=\@ipsdoloop\fi\@nextwhile#2\@@#3{#4}}%
+\def\@tpsdo#1:=#2\do#3{\xdef\@psdotmp{#2}\ifx\@psdotmp\@empty \else
+ \@tpsdoloop#2\@nil\@nil\@@#1{#3}\fi}%
+\def\@tpsdoloop#1#2\@@#3#4{\def#3{#1}\ifx #3\@nnil
+ \let\@nextwhile=\@psdonoop \else
+ #4\relax\let\@nextwhile=\@tpsdoloop\fi\@nextwhile#2\@@#3{#4}}%
+%%%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% file reading stuff from epsf.tex
+%%% EPSF.TEX macro file:
+%%% Written by Tomas Rokicki of Radical Eye Software, 29 Mar 1989.
+%%% Revised by Don Knuth, 3 Jan 1990.
+%%% Revised by Tomas Rokicki to accept bounding boxes with no
+%%% space after the colon, 18 Jul 1990.
+%%% Portions modified/removed for use in PSFIG package by
+%%% J. Daniel Smith, 9 October 1990.
+%%% Just the bit which knows about (atend) as a BoundingBox
+%
+%%% hacked back a bit by SPQR 12/91
+%
+\long\def\epsfaux#1#2:#3\\{\ifx#1\epsfpercent
+ \def\testit{#2}\ifx\testit\epsfbblit
+ \@atendfalse
+ \epsf@atend #3 . \\%
+ \if@atend
+ \if@verbose
+ \typeout{epsfig: found `(atend)'; continuing search}%
+ \fi
+ \else
+ \epsfgrab #3 . . . \\%
+ \epsffileokfalse\global\no@bbfalse
+ \global\epsfbbfoundtrue
+ \fi
+ \fi\fi}%
+%
+%%% Determine if the stuff following the %%BoundingBox is `(atend)'
+%%% J. Daniel Smith. Copied from \epsf@grab above.
+%
+\def\epsf@atendlit{(atend)}
+%
+\def\epsf@atend #1 #2 #3\\{%
+ \def\epsf@tmp{#1}\ifx\epsf@tmp\empty
+ \epsf@atend #2 #3 .\\\else
+ \ifx\epsf@tmp\epsf@atendlit\@atendtrue\fi\fi}%
+
+
+%%% End of file reading stuff from epsf.tex
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% trigonometry stuff from "trig.tex"
+\chardef\trig@letter = 11
+\chardef\other = 12
+
+\newif\ifdebug %%% turn me on to see TeX hard at work ...
+\newif\ifc@mpute %%% don't need to compute some values
+\newif\if@atend
+\c@mputetrue % but assume that we do
+
+\let\then = \relax
+\def\r@dian{pt }%
+\let\r@dians = \r@dian
+\let\dimensionless@nit = \r@dian
+\let\dimensionless@nits = \dimensionless@nit
+\def\internal@nit{sp }%
+\let\internal@nits = \internal@nit
+\newif\ifstillc@nverging
+\def \Mess@ge #1{\ifdebug \then \message {#1} \fi}%
+
+{ %%% Things that need abnormal catcodes %%%
+ \catcode `\@ = \trig@letter
+ \gdef \nodimen {\expandafter \n@dimen \the \dimen}%
+ \gdef \term #1 #2 #3%
+ {\edef \t@ {\the #1}%%% freeze parameter 1 (count, by value)
+ \edef \t@@ {\expandafter \n@dimen \the #2\r@dian}%
+ %%% freeze parameter 2 (dimen, by value)
+ \t@rm {\t@} {\t@@} {#3}%
+ }%
+ \gdef \t@rm #1 #2 #3%
+ {{%
+ \count 0 = 0
+ \dimen 0 = 1 \dimensionless@nit
+ \dimen 2 = #2\relax
+ \Mess@ge {Calculating term #1 of \nodimen 2}%
+ \loop
+ \ifnum \count 0 < #1
+ \then \advance \count 0 by 1
+ \Mess@ge {Iteration \the \count 0 \space}%
+ \Multiply \dimen 0 by {\dimen 2}%
+ \Mess@ge {After multiplication, term = \nodimen 0}%
+ \Divide \dimen 0 by {\count 0}%
+ \Mess@ge {After division, term = \nodimen 0}%
+ \repeat
+ \Mess@ge {Final value for term #1 of
+ \nodimen 2 \space is \nodimen 0}%
+ \xdef \Term {#3 = \nodimen 0 \r@dians}%
+ \aftergroup \Term
+ }}%
+ \catcode `\p = \other
+ \catcode `\t = \other
+ \gdef \n@dimen #1pt{#1} %%% throw away the ``pt''
+}%
+
+\def \Divide #1by #2{\divide #1 by #2} %%% just a synonym
+
+\def \Multiply #1by #2%%% allows division of a dimen by a dimen
+ {{%%% should really freeze parameter 2 (dimen, passed by value)
+ \count 0 = #1\relax
+ \count 2 = #2\relax
+ \count 4 = 65536
+ \Mess@ge {Before scaling, count 0 = \the \count 0 \space and
+ count 2 = \the \count 2}%
+ \ifnum \count 0 > 32767 %%% do our best to avoid overflow
+ \then \divide \count 0 by 4
+ \divide \count 4 by 4
+ \else \ifnum \count 0 < -32767
+ \then \divide \count 0 by 4
+ \divide \count 4 by 4
+ \else
+ \fi
+ \fi
+ \ifnum \count 2 > 32767 %%% while retaining reasonable accuracy
+ \then \divide \count 2 by 4
+ \divide \count 4 by 4
+ \else \ifnum \count 2 < -32767
+ \then \divide \count 2 by 4
+ \divide \count 4 by 4
+ \else
+ \fi
+ \fi
+ \multiply \count 0 by \count 2
+ \divide \count 0 by \count 4
+ \xdef \product {#1 = \the \count 0 \internal@nits}%
+ \aftergroup \product
+ }}%
+
+\def\r@duce{\ifdim\dimen0 > 90\r@dian \then % sin(x) = sin(180-x)
+ \multiply\dimen0 by -1
+ \advance\dimen0 by 180\r@dian
+ \r@duce
+ \else \ifdim\dimen0 < -90\r@dian \then % sin(x) = sin(360+x)
+ \advance\dimen0 by 360\r@dian
+ \r@duce
+ \fi
+ \fi}%
+
+\def\Sine#1%
+ {{%
+ \dimen 0 = #1 \r@dian
+ \r@duce
+ \ifdim\dimen0 = -90\r@dian \then
+ \dimen4 = -1\r@dian
+ \c@mputefalse
+ \fi
+ \ifdim\dimen0 = 90\r@dian \then
+ \dimen4 = 1\r@dian
+ \c@mputefalse
+ \fi
+ \ifdim\dimen0 = 0\r@dian \then
+ \dimen4 = 0\r@dian
+ \c@mputefalse
+ \fi
+%
+ \ifc@mpute \then
+ % convert degrees to radians
+ \divide\dimen0 by 180
+ \dimen0=3.141592654\dimen0
+%
+ \dimen 2 = 3.1415926535897963\r@dian %%% a well-known constant
+ \divide\dimen 2 by 2 %%% we only deal with -pi/2 : pi/2
+ \Mess@ge {Sin: calculating Sin of \nodimen 0}%
+ \count 0 = 1 %%% see power-series expansion for sine
+ \dimen 2 = 1 \r@dian %%% ditto
+ \dimen 4 = 0 \r@dian %%% ditto
+ \loop
+ \ifnum \dimen 2 = 0 %%% then we've done
+ \then \stillc@nvergingfalse
+ \else \stillc@nvergingtrue
+ \fi
+ \ifstillc@nverging %%% then calculate next term
+ \then \term {\count 0} {\dimen 0} {\dimen 2}%
+ \advance \count 0 by 2
+ \count 2 = \count 0
+ \divide \count 2 by 2
+ \ifodd \count 2 %%% signs alternate
+ \then \advance \dimen 4 by \dimen 2
+ \else \advance \dimen 4 by -\dimen 2
+ \fi
+ \repeat
+ \fi
+ \xdef \sine {\nodimen 4}%
+ }}%
+
+%%% Now the Cosine can be calculated easily by calling \Sine:
+%%% cos(x) = sin(90-x)
+\def\Cosine#1{\ifx\sine\UnDefined\edef\Savesine{\relax}\else
+ \edef\Savesine{\sine}\fi
+ {\dimen0=#1\r@dian\multiply\dimen0 by -1
+ \advance\dimen0 by 90\r@dian
+ \Sine{\nodimen 0}%
+ \xdef\cosine{\sine}%
+ \xdef\sine{\Savesine}}}
+%%% end of trig stuff
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\def\psdraft{\def\@psdraft{0}}%
+\def\psfull{\def\@psdraft{1}}%
+\psfull
+\newif\if@compress
+\def\pscompress{\@compresstrue}
+\def\psnocompress{\@compressfalse}
+\@compressfalse
+\newif\if@scalefirst
+\def\psscalefirst{\@scalefirsttrue}%
+\def\psrotatefirst{\@scalefirstfalse}%
+\psrotatefirst
+%
+\newif\if@draftbox
+\def\psnodraftbox{\@draftboxfalse}%
+\@draftboxtrue
+%
+\newif\if@noisy
+\@noisyfalse
+\newif\ifno@bb
+%%% These are for the option list.
+%%% A specification of the form a = b maps to calling \@p@@sa{b}%
+\newif\if@bbllx
+\newif\if@bblly
+\newif\if@bburx
+\newif\if@bbury
+\newif\if@height
+\newif\if@width
+\newif\if@rheight
+\newif\if@rwidth
+\newif\if@angle
+\newif\if@clip
+\newif\if@verbose
+\newif\if@prologfile
+\def\@p@@sprolog#1{\@prologfiletrue\def\@prologfileval{#1}}%
+\def\@p@@sclip#1{\@cliptrue}%
+%
+\newif\ifepsfig@dos % only single suffix possible
+\def\epsfigdos{\epsfig@dostrue}%
+\epsfig@dosfalse
+%
+\def\ParseName#1{\expandafter\@Parse#1}%
+\def\@Parse#1.#2:{\gdef\BaseName{#1}\gdef\FileType{#2}}%
+
+\def\@p@@sfile#1{%
+ \ifepsfig@dos
+ \ParseName{#1:}%
+ \else
+ \gdef\BaseName{#1}\gdef\FileType{}%
+ \fi
+ \def\@p@sfile{NO FILE: #1}%
+ \def\@p@sfilefinal{NO FILE: #1}%
+ \openin1=#1
+ \ifeof1\closein1\openin1=\BaseName.bb
+ \ifeof1\closein1
+ \if@bbllx % No postscript file but bb given explicitly.
+ \if@bblly\if@bburx\if@bbury
+ \def\@p@sfile{#1}%
+ \def\@p@sfilefinal{#1}%
+ \fi\fi\fi
+ \else % No bounding box found.
+ \@latexerr{ERROR. PostScript file #1 not found}\@whattodo
+ \@p@@sbbllx{100bp}%
+ \@p@@sbblly{100bp}%
+ \@p@@sbburx{200bp}%
+ \@p@@sbbury{200bp}%
+ \psdraft
+ \fi
+ \else % Postscript file is compressed.
+ \closein1%
+ \edef\@p@sfile{\BaseName.bb}%
+ \typeout{using BB from \@p@sfile}%
+ \ifnum\fig@driver=3
+ \edef\@p@sfilefinal{\BaseName.pcx}%
+ \else
+ \ifepsfig@dos
+ \edef\@p@sfilefinal{"`gunzip -c `texfind \BaseName.{z,Z,gz}"}%
+ \else
+ \edef\@p@sfilefinal{"`epsfig \if@compress-c \fi#1"}%
+ \fi
+ \fi
+ \fi
+ \else\closein1 % Postscript file is not compressed.
+ \edef\@p@sfile{#1}%
+ \if@compress
+ \edef\@p@sfilefinal{"`epsfig -c #1"}%
+ \else
+ \edef\@p@sfilefinal{#1}%
+ \fi
+ \fi%
+}
+
+% alternative syntax: figure=
+\let\@p@@sfigure\@p@@sfile
+%
+\def\@p@@sbbllx#1{%
+ \@bbllxtrue
+ \ps@dimcent=#1
+ \edef\@p@sbbllx{\number\ps@dimcent}%
+ \divide\ps@dimcent by65536
+ \global\edef\epsfllx{\number\ps@dimcent}%
+}%
+\def\@p@@sbblly#1{%
+ \@bbllytrue
+ \ps@dimcent=#1
+ \edef\@p@sbblly{\number\ps@dimcent}%
+ \divide\ps@dimcent by65536
+ \global\edef\epsflly{\number\ps@dimcent}%
+}%
+\def\@p@@sbburx#1{%
+ \@bburxtrue
+ \ps@dimcent=#1
+ \edef\@p@sbburx{\number\ps@dimcent}%
+ \divide\ps@dimcent by65536
+ \global\edef\epsfurx{\number\ps@dimcent}%
+}%
+\def\@p@@sbbury#1{%
+ \@bburytrue
+ \ps@dimcent=#1
+ \edef\@p@sbbury{\number\ps@dimcent}%
+ \divide\ps@dimcent by65536
+ \global\edef\epsfury{\number\ps@dimcent}%
+}%
+\def\@p@@sheight#1{%
+ \@heighttrue
+ \global\epsfysize=#1
+ \ps@dimcent=#1
+ \edef\@p@sheight{\number\ps@dimcent}%
+}%
+\def\@p@@swidth#1{%
+ \@widthtrue
+ \global\epsfxsize=#1
+ \ps@dimcent=#1
+ \edef\@p@swidth{\number\ps@dimcent}%
+}%
+\def\@p@@srheight#1{%
+ \@rheighttrue\use@psfigtrue
+ \ps@dimcent=#1
+ \edef\@p@srheight{\number\ps@dimcent}%
+}%
+\def\@p@@srwidth#1{%
+ \@rwidthtrue\use@psfigtrue
+ \ps@dimcent=#1
+ \edef\@p@srwidth{\number\ps@dimcent}%
+}%
+\def\@p@@sangle#1{%
+ \use@psfigtrue
+ \@angletrue
+ \edef\@p@sangle{#1}%
+}%
+\def\@p@@ssilent#1{%
+ \@verbosefalse
+}%
+\def\@p@@snoisy#1{%
+ \@verbosetrue
+}%
+\def\@cs@name#1{\csname #1\endcsname}%
+\def\@setparms#1=#2,{\@cs@name{@p@@s#1}{#2}}%
+%
+%%% initialize the defaults (size the size of the figure)
+%
+\def\ps@init@parms{%
+ \@bbllxfalse \@bbllyfalse
+ \@bburxfalse \@bburyfalse
+ \@heightfalse \@widthfalse
+ \@rheightfalse \@rwidthfalse
+ \def\@p@sbbllx{}\def\@p@sbblly{}%
+ \def\@p@sbburx{}\def\@p@sbbury{}%
+ \def\@p@sheight{}\def\@p@swidth{}%
+ \def\@p@srheight{}\def\@p@srwidth{}%
+ \def\@p@sangle{0}%
+ \def\@p@sfile{}%
+ \@prologfilefalse
+ \def\@sc{}%
+ \if@noisy
+ \@verbosetrue
+ \else
+ \@verbosefalse
+ \fi
+ \@clipfalse
+}%
+%
+%%% Go through the options setting things up.
+%
+\def\parse@ps@parms#1{%
+ \@psdo\@psfiga:=#1\do
+ {\expandafter\@setparms\@psfiga,}%
+\if@prologfile
+\special{header=\@prologfileval}%
+\fi
+}%
+%
+%%% Compute bb height and width
+%
+\def\bb@missing{%
+ \if@verbose
+ \typeout{psfig: searching \@p@sfile \space for bounding box}%
+ \fi
+ \epsfgetbb{\@p@sfile}%
+ \ifepsfbbfound
+ \ps@dimcent=\epsfllx bp\edef\@p@sbbllx{\number\ps@dimcent}%
+ \ps@dimcent=\epsflly bp\edef\@p@sbblly{\number\ps@dimcent}%
+ \ps@dimcent=\epsfurx bp\edef\@p@sbburx{\number\ps@dimcent}%
+ \ps@dimcent=\epsfury bp\edef\@p@sbbury{\number\ps@dimcent}%
+ \else
+ \epsfbbfoundfalse
+ \fi
+}
+%
+% rotate point (#1,#2) about (0,0).
+% The sine and cosine of the angle are already stored in \sine and
+% \cosine. The result is placed in (\p@intvaluex, \p@intvaluey).
+\newdimen\p@intvaluex
+\newdimen\p@intvaluey
+\def\rotate@#1#2{{\dimen0=#1 sp\dimen1=#2 sp
+% calculate x' = x \cos\theta - y \sin\theta
+ \global\p@intvaluex=\cosine\dimen0
+ \dimen3=\sine\dimen1
+ \global\advance\p@intvaluex by -\dimen3
+% calculate y' = x \sin\theta + y \cos\theta
+ \global\p@intvaluey=\sine\dimen0
+ \dimen3=\cosine\dimen1
+ \global\advance\p@intvaluey by \dimen3
+ }}%
+\def\compute@bb{%
+ \epsfbbfoundfalse
+ \if@bbllx\epsfbbfoundtrue\fi
+ \if@bblly\epsfbbfoundtrue\fi
+ \if@bburx\epsfbbfoundtrue\fi
+ \if@bbury\epsfbbfoundtrue\fi
+ \ifepsfbbfound\else\bb@missing\fi
+ \ifepsfbbfound\else
+ \@latexerr{ERROR. cannot locate BoundingBox}\@whattodobb
+ \@p@@sbbllx{100bp}%
+ \@p@@sbblly{100bp}%
+ \@p@@sbburx{200bp}%
+ \@p@@sbbury{200bp}%
+ \no@bbtrue
+ \psdraft
+ \fi
+ %
+%
+% store height/width of original (unrotated) bounding box
+ \count203=\@p@sbburx
+ \count204=\@p@sbbury
+ \advance\count203 by -\@p@sbbllx
+ \advance\count204 by -\@p@sbblly
+ \edef\ps@bbw{\number\count203}%
+ \edef\ps@bbh{\number\count204}%
+ \edef\@bbw{\number\count203}%
+ \edef\@bbh{\number\count204}%
+ \if@angle
+ \Sine{\@p@sangle}\Cosine{\@p@sangle}%
+
+{\ps@dimcent=\maxdimen\xdef\r@p@sbbllx{\number\ps@dimcent}%
+
+\xdef\r@p@sbblly{\number\ps@dimcent}%
+
+\xdef\r@p@sbburx{-\number\ps@dimcent}%
+
+\xdef\r@p@sbbury{-\number\ps@dimcent}}%
+%
+% Need to rotate all four points and take the X-Y extremes of the new
+% points as the new bounding box.
+ \def\minmaxtest{%
+ \ifnum\number\p@intvaluex<\r@p@sbbllx
+ \xdef\r@p@sbbllx{\number\p@intvaluex}\fi
+ \ifnum\number\p@intvaluex>\r@p@sbburx
+ \xdef\r@p@sbburx{\number\p@intvaluex}\fi
+ \ifnum\number\p@intvaluey<\r@p@sbblly
+ \xdef\r@p@sbblly{\number\p@intvaluey}\fi
+ \ifnum\number\p@intvaluey>\r@p@sbbury
+ \xdef\r@p@sbbury{\number\p@intvaluey}\fi
+ }%
+% lower left
+ \rotate@{\@p@sbbllx}{\@p@sbblly}%
+ \minmaxtest
+% upper left
+ \rotate@{\@p@sbbllx}{\@p@sbbury}%
+ \minmaxtest
+% lower right
+ \rotate@{\@p@sbburx}{\@p@sbblly}%
+ \minmaxtest
+% upper right
+ \rotate@{\@p@sbburx}{\@p@sbbury}%
+ \minmaxtest
+
+\edef\@p@sbbllx{\r@p@sbbllx}\edef\@p@sbblly{\r@p@sbblly}%
+
+\edef\@p@sbburx{\r@p@sbburx}\edef\@p@sbbury{\r@p@sbbury}%
+ \fi
+ \count203=\@p@sbburx
+ \count204=\@p@sbbury
+ \advance\count203 by -\@p@sbbllx
+ \advance\count204 by -\@p@sbblly
+ \edef\@bbw{\number\count203}%
+ \edef\@bbh{\number\count204}%
+}%
+%
+% \in@hundreds performs #1 * (#2 / #3) correct to the hundreds,
+% then leaves the result in @result
+%
+\def\in@hundreds#1#2#3{\count240=#2 \count241=#3
+ \count100=\count240 % 100 is first digit #2/#3
+ \divide\count100 by \count241
+ \count101=\count100
+ \multiply\count101 by \count241
+ \advance\count240 by -\count101
+ \multiply\count240 by 10
+ \count101=\count240 %101 is second digit of #2/#3
+ \divide\count101 by \count241
+ \count102=\count101
+ \multiply\count102 by \count241
+ \advance\count240 by -\count102
+ \multiply\count240 by 10
+ \count102=\count240 % 102 is the third digit
+ \divide\count102 by \count241
+ \count200=#1\count205=0
+ \count201=\count200
+ \multiply\count201 by \count100
+ \advance\count205 by \count201
+ \count201=\count200
+ \divide\count201 by 10
+ \multiply\count201 by \count101
+ \advance\count205 by \count201
+ %
+ \count201=\count200
+ \divide\count201 by 100
+ \multiply\count201 by \count102
+ \advance\count205 by \count201
+ %
+ \edef\@result{\number\count205}%
+}%
+\def\compute@wfromh{%
+ % computing : width = height * (bbw / bbh)
+ \in@hundreds{\@p@sheight}{\@bbw}{\@bbh}%
+ \edef\@p@swidth{\@result}%
+}%
+\def\compute@hfromw{%
+ % computing : height = width * (bbh / bbw)
+ \in@hundreds{\@p@swidth}{\@bbh}{\@bbw}%
+ \edef\@p@sheight{\@result}%
+}%
+\def\compute@handw{%
+ \if@height
+ \if@width
+ \else
+ \compute@wfromh
+ \fi
+ \else
+ \if@width
+ \compute@hfromw
+ \else
+ \edef\@p@sheight{\@bbh}%
+ \edef\@p@swidth{\@bbw}%
+ \fi
+ \fi
+}%
+\def\compute@resv{%
+ \if@rheight \else \edef\@p@srheight{\@p@sheight} \fi
+ \if@rwidth \else \edef\@p@srwidth{\@p@swidth} \fi
+}%
+%
+% Compute any missing values
+\def\compute@sizes{%
+ \if@scalefirst\if@angle
+% at this point the bounding box has been adjsuted correctly for
+% rotation. PSFIG does all of its scaling using \@bbh and \@bbw. If
+% a width= or height= was specified along with \psscalefirst, then the
+% width=/height= value needs to be adjusted to match the new (rotated)
+% bounding box size (specifed in \@bbw and \@bbh).
+% \ps@bbw width=
+% ------- = ----------
+% \@bbw new width=
+% so `new width=' = (width= * \@bbw) / \ps@bbw; where \ps@bbw is the
+% width of the original (unrotated) bounding box.
+ \if@width
+ \in@hundreds{\@p@swidth}{\@bbw}{\ps@bbw}%
+ \edef\@p@swidth{\@result}%
+ \fi
+ \if@height
+ \in@hundreds{\@p@sheight}{\@bbh}{\ps@bbh}%
+ \edef\@p@sheight{\@result}%
+ \fi
+ \fi\fi
+ \compute@handw
+ \compute@resv
+}
+%
+
+%------------------------------------------------------------------
+%%% by the way, possible parameters to the PSfile= command in dvips are:
+%%% llx
+%%% lly
+%%% urx
+%%% ury
+%%% rwi
+% hoffset The horizontal offset (default 0)
+% voffset The vertical offset (default 0)
+% hsize The horizontal clipping size (default 612)
+% vsize The vertical clipping size (default 792)
+% hscale The horizontal scaling factor (default 100)
+% vscale The vertical scaling factor (default 100)
+% angle The rotation (default 0)
+%------------------------------------------------------------------
+\long\def\graphic@verb#1{\def\next{#1}%
+ {\expandafter\graphic@strip\meaning\next}}
+\def\graphic@strip#1>{}
+\def\graphic@zapspace#1{%
+ #1\ifx\graphic@zapspace#1\graphic@zapspace%
+ \else\expandafter\graphic@zapspace%
+ \fi}
+\def\psfig#1{%
+\edef\@tempa{\graphic@zapspace#1{}}%
+\ifvmode\leavevmode\fi\vbox {%
+ %
+ \ps@init@parms
+ \parse@ps@parms{\@tempa}%
+ %
+ \ifnum\@psdraft=1
+ \typeout{[\@p@sfilefinal]}%
+ \if@verbose
+ \typeout{epsfig: using PSFIG macros}%
+ \fi
+ \psfig@method
+ \else
+ \epsfig@draft
+ \fi
+}
+}%
+\def\graphic@zapspace#1{%
+ #1\ifx\graphic@zapspace#1\graphic@zapspace%
+ \else\expandafter\graphic@zapspace%
+ \fi}
+\def\epsfig#1{%
+\edef\@tempa{\graphic@zapspace#1{}}%
+\ifvmode\leavevmode\fi\vbox {%
+ %
+ \ps@init@parms
+ \parse@ps@parms{\@tempa}%
+ %
+ \ifnum\@psdraft=1
+ \if@angle\use@psfigtrue\fi
+ \ifuse@psfig
+ \if@verbose
+ \typeout{epsfig: using PSFIG macros}%
+ \fi
+ \psfig@method
+ \else
+ \if@verbose
+ \typeout{epsfig: using EPSF macros}%
+ \fi
+ \epsf@method
+ \fi
+ \else
+ \epsfig@draft
+ \fi
+}%
+}%
+
+
+\def\epsf@method{%
+ \epsfbbfoundfalse
+ \if@bbllx\epsfbbfoundtrue\fi
+ \if@bblly\epsfbbfoundtrue\fi
+ \if@bburx\epsfbbfoundtrue\fi
+ \if@bbury\epsfbbfoundtrue\fi
+ \ifepsfbbfound\else\epsfgetbb{\@p@sfile}\fi
+ \ifepsfbbfound
+ \typeout{<\@p@sfilefinal>}%
+ \epsfig@gofer
+ \else
+ \@latexerr{ERROR - Cannot locate BoundingBox}\@whattodobb
+ \@p@@sbbllx{100bp}%
+ \@p@@sbblly{100bp}%
+ \@p@@sbburx{200bp}%
+ \@p@@sbbury{200bp}%
+ \count203=\@p@sbburx
+ \count204=\@p@sbbury
+ \advance\count203 by -\@p@sbbllx
+ \advance\count204 by -\@p@sbblly
+ \edef\@bbw{\number\count203}%
+ \edef\@bbh{\number\count204}%
+ \compute@sizes
+ \epsfig@@draft
+ \fi
+}%
+\def\psfig@method{%
+ \compute@bb
+ \ifepsfbbfound
+ \compute@sizes
+ \psfig@start
+ % Create the vbox to reserve the space for the figure%
+ \vbox to \@p@srheight sp{\hbox to \@p@srwidth
+ sp{\hss}\vss\psfig@end}%
+ \else
+ \epsfig@draft
+ \fi
+}%
+%
+% draft figure, just reserve the space and print the
+% path name.
+\def\epsfig@draft{\compute@bb\compute@sizes\epsfig@@draft}%
+%
+\def\epsfig@@draft{%
+\typeout{<(draft only) \@p@sfilefinal>}%
+\if@draftbox
+ % Verbose draft: print file name in box
+ \hbox{{\fboxsep0pt\fbox{\vbox to \@p@srheight sp{%
+ \vss\hbox to \@p@srwidth sp{ \hss
+ \expandafter\Literally\@p@sfilefinal\@nil
+ \hss }\vss
+ }}}}%
+\else
+ % Non-verbose draft
+ \vbox to \@p@srheight sp{%
+ \vss\hbox to \@p@srwidth sp{\hss}\vss}%
+\fi
+}%
+\def\Literally#1\@nil{{\tt\graphic@verb{#1}}}
+\def\psfigdriver#1{\typeout{^J WARNING: dont use psfigdriver!
+ use a class option!^J}}
+\endinput
+
+
diff --git a/obsolete/macros/latex209/contrib/epsfig/epsfig.sty b/obsolete/macros/latex209/contrib/epsfig/epsfig.sty
new file mode 100644
index 0000000000..d4bb4d9ef8
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/epsfig/epsfig.sty
@@ -0,0 +1,1137 @@
+%----------------------------------------------
+\def\fileversion{v1.20}%
+\def\filedate{26.1.94}%
+%%%
+%%% from a suggestion by eijkhout@csrd.uiuc.edu to allow
+%%% loading as a style file:
+\edef\epsfigRestoreAt{\catcode`@=\number\catcode`@\relax}%
+\catcode`\@=11\relax
+\ifx\undefined\@makeother % -pks-
+\def\@makeother#1{\catcode`#1=12\relax} % -pks-
+\fi % -pks-
+\immediate\write16{Document style option `epsfig', \fileversion\space
+<\filedate> (edited by SPQR)}%
+%%%--------------------------------------------------------------------
+%%% psfig merged with EPSF = epsfig Release 1
+%%% 1.0 November 91
+%%% 1.1 Dec 91 fixed some bugs
+%%% 1.2 Jan 92 fixed bug that it never stopped reading PS file until
+%%% it reached the end! merged in changes from psfig1.8
+%%% (plain TeX definition of \fbox, new code for rotation)
+%%% 1.3 Jan 92 separated out \special code so that dvitops can be
+%%% supported. use \psfigdriver{dvitops}%
+%%% 1.4 Jan 92 fixed dvitops. need to input psfig at different point
+%%% in dvips from dvitops. define \psfig@start and \psfig@end to cope
+%%% with this
+%%% 1.5 Jan 92 force use of psfig method if using dvitops
+%%% 1.6 May 92 fixed bugs
+%%% 1.7 Sep 92 added support for emtex, sort of. reads a .bb file
+%%% and imports .pcx file. Boolean flag \epsfigdos used
+%%% to indicate that we cannot have more than one . in the
+%%% suffix (ie we will look at file.bb not file.eps.bb)
+%%%
+%%% 1.8 Sep 92 added support for OzTeX; fixed bugs in dvips support
+%%% (including clipping to bounding box); removed use of dimen100.
+%%%
+%%% 1.9 Dec 92 cleaned up documentation again
+%%% 1.10 Mar 93 cleaned up for plain TeX
+%%% 1.11 Mar 93 merged in changes by Peter Galko (supplied by CERN) for
+%%% use with Textures
+%%% 1.12 Apr 93 actually *tested* the Textures additions, and so rewrote
+%%% from scratch (borrowed an idea from psbox)
+%%% 1.13 May 93 allow for file names with _ or $ in them in \psdraft, and
+%%% fix problem that occurred with missing BoundingBox
+%%% 1.14 May 93 allow for .z suffix
+%%% 1.15 July 93 allow for .gz suffix
+%%% use \leavevmode as appropriate
+%%% fix plain \TeX mode
+%%% (fixes from Peter-Klaus Schilling <R02SCH@DSYIBM.DESY.DE>)
+%%% 1.16 August 93 [peta@mcrcim.mcgill.edu (Peter Whaite)]
+%%% -- Implement Perl scripts to do compressed file inclusion and bb
+%%% generation.
+%%% -- Add \pscompress.
+%%% -- Tidy up comments.
+%%% 1.17 September 93 SPQR
+%%% better code for literal name printing
+%%% allowed for spaces around , and =
+%%% 1.18 17.9.93
+%%% updates to epsbb and epsfig from Peter W
+%%% 1.19 14.11.93
+%%% mistaken placement of calculation of EPS@Height resulted in errors
+%%% 1.20 defaults to no compression
+%--------------------------------------------------------
+%%%
+%%% code rearranged by Sebastian Rahtz (spqr@uk.ac.york.minster)
+%%% from work by
+%%% Trevor Darrell; Tom Rokicki; Daniel Smith; H. Payne, Robert Russell
+%%%
+%%% This is a version of Darrell's `psfig' macros which are designed
+%%% to be used with dvips or dvitops, and the `epsf' macros (these are
+%%% automaticaly included by the style file). I did this because the
+%%% \special commands used by `epsf' appear to be more robust and
+%%% portable than the raw \specials used by `psfig', but I preferred
+%%% the psfig interface. This system preserves the psfig interface,
+%%% but mainly uses epsf macros to carry out the job. The user
+%%% interface is identical to \psfig, but you just use \epsfig
+%%% instead. Rotation uses the original psfig macros: I could not work
+%%% out how to do rotation with the epsf macros.
+%%%
+%%% The same applies to `rheight' and `rwidth'
+%%%
+%%% If you *really* want old psfig behaviour regardless, use \psfig. It is
+%%% still there. Some of the features have gone, however. \figurepath
+%%% seemed redundant, since it could be controlled by the TEXINPUTS
+%%% variable anyway.
+%%%
+%%% As an added feature, if FILE cannot be found, a file called FILE.bb
+%%% is searched for. This should simply contain a %%BoundingBox line. A perl
+%%% script "epsbb" is provided to generate these automatically. It is
+%%% assumed that if this exists, then the actual postscript is in UNIX
+%%% compress format in FILE.Z or in GNU gzip format in FILE.gz or FILE.z.
+%%%
+%%% The macros then read the BB from FILE.bb, but insert "`epsfig FILE`" in
+%%% the output for dvips to interpret (don't worry, it knows about this).
+%%% "Epsfig" is another perl script which searches the TEXINPUTS path for
+%%% FILE or FILE.{gz,z,Z}.
+%%%
+%%% As an added bonus if you say \pscompress the -c switch will be passed to
+%%% epsfig, causing automatic FILE.bb generation and compression the first
+%%% time dvips is run. Files in the system directories will NOT be
+%%% compressed.
+%%% If you are *not* on a Unix system and use this, deliberately or by
+%%% mischance, you will have problems!
+%%%
+%%% This file can be included in a dumped format, or used as a LaTeX
+%%% style file, or used in plain TeX. It does not load itself twice (I hope)
+%%%
+%--------------------------------------------------------------------
+%--------------------------------------------------------------------
+%%% previous notes. this copy of psfig.tex inherited from versions 1.8
+%--------------------------------------------------------------------
+%%% All psfig/tex software, documentation, and related files
+%%% in this distribution of psfig/tex are
+%%% Copyright 1987, 1988, 1991 Trevor J. Darrell
+%
+%%% Permission is granted for use and non-profit distribution of psfig/tex
+%%% providing that this notice be clearly maintained. The right to
+%%% distribute any portion of psfig/tex for profit or as part of any commercial
+%%% product is specifically reserved for the author(s) of that portion.
+%%%
+%%% Thanks to Greg Hager (GDH) and Ned Batchelder for their contributions
+%%% to this project.
+%%%--------------------------------------------------------------------------
+%%% GDH 7/26/87 -- changed so that it first looks in the local directory,
+%%% then in a specified global directory for the ps file.
+%%% SPQR 12/91 removed that last change. it follows TEXINPUTS anyway
+%%% RPR 6/25/91 -- changed so that it defaults to user-supplied name if
+%%% boundingbox info is specified, assuming graphic will be created by
+%%% print time.
+%%% SPQR 12/91 removed that last change. use LaTeX error message instead
+%%% SPQR 12/91 -- `no file found' produces LaTeX error message.
+%%% If you recover from that the file name is set in draft
+%%% mode in place of the file.
+%%%
+%%% Modified by J. Daniel Smith on 9 October 1990 to accept the
+%%% %%BoundingBox: comment with or without a space after the colon. Stole
+%%% file reading code from Tom Rokicki's EPSF.TEX file (see below).
+%%% --- SPQR 12.91 removed most of this to use epsf directly
+%%%
+%%% More modifications by J. Daniel Smith on 29 March 1991 to allow the
+%%% the included PostScript figure to be rotated. The amount of
+%%% rotation is specified by the "angle=" parameter of the \epsfig command.
+%%%
+%%% Modified by Robert Russell on June 25, 1991 to allow users to specify
+%%% .ps filenames which don't yet exist, provided they explicitly provide
+%%% boundingbox information via the \epsfig command. Note: This will only work
+%%% if the "file=" parameter follows all four "bb???=" parameters in the
+%%% command. This is due to the order in which psfig interprets these params.
+%%% ---- SPQR 12.91 removed all this
+%%%
+%%% 3 Jul 1991 JDS check if file already read in once
+%%%
+%-----------------------------USAGE---------------------------------------
+% From: gvr@cs.brown.edu (George V. Reilly)
+%
+% \psdraft draws an outline box, but doesn't include the figure
+% in the DVI file. Useful for previewing.
+%
+% \psfull includes the figure in the DVI file (default).
+%
+% \psscalefirst width= or height= specifies the size of the figure
+% before rotation.
+% \psrotatefirst (default) width= or height= specifies the size of the
+% figure after rotation. Asymetric figures will
+% appear to shrink.
+%
+% usage: \epsfig{file=, figure=, height=, width=,
+% bbllx=, bblly=, bburx=, bbury=,
+% rheight=, rwidth=, clip=, angle=, silent=}%
+%
+% "file" is the filename. If no path name is specified and the
+% file is not found in the current directory,
+% it will be looked for in directory \psfigurepath.
+% "figure" is a synonym for "file".
+% By default, the width and height of the figure are taken from
+% the BoundingBox of the figure.
+% If "width" is specified, the figure is scaled so that it has
+% the specified width. Its height changes proportionately.
+% If "height" is specified, the figure is scaled so that it has
+% the specified height. Its width changes proportionately.
+% If both "width" and "height" are specified, the figure is scaled
+% anamorphically.
+% "bbllx", "bblly", "bburx", and "bbury" control the PostScript
+% BoundingBox.
+% "rheight" and "rwidth" are the reserved height and width
+% of the figure, i.e., how big TeX actually thinks
+% the figure is. They default to "width" and "height".
+% The "clip" option ensures that no portion of the figure will
+% appear outside its BoundingBox. "clip=" is a switch and
+% takes no value, but the `=' must be present.
+% The "angle" option specifies the angle of rotation (degrees, ccw).
+% The "silent" option makes \psfig work silently.
+%
+%--------------------------------------------------------------------------
+\newcount\EPS@Height \newcount\EPS@Width \newcount\EPS@xscale
+\newcount\EPS@yscale
+\def\psfigdriver#1{%
+ \bgroup\edef\next{\def\noexpand\tempa{#1}}%
+ \uppercase\expandafter{\next}%
+ \def\LN{DVITOLN03}%
+ \def\DVItoPS{DVITOPS}%
+ \def\DVIPS{DVIPS}%
+ \def\emTeX{EMTEX}%
+ \def\OzTeX{OZTEX}%
+ \def\Textures{TEXTURES}%
+ \global\chardef\fig@driver=0
+ \ifx\tempa\LN
+ \global\chardef\fig@driver=0\fi
+ \ifx\tempa\DVItoPS
+ \global\chardef\fig@driver=1\fi
+ \ifx\tempa\DVIPS
+ \global\chardef\fig@driver=2\fi
+ \ifx\tempa\emTeX
+ \global\chardef\fig@driver=3\fi
+ \ifx\tempa\OzTeX
+ \global\chardef\fig@driver=4\fi
+ \ifx\tempa\Textures
+ \global\chardef\fig@driver=5\fi
+ \egroup
+\def\psfig@start{}%
+\def\psfig@end{}%
+\def\epsfig@gofer{}%
+\ifcase\fig@driver
+% case 0 ln03
+\typeout{WARNING! ****
+ no specials for LN03 psfig}%
+%
+\or % case 1: dvitops
+\def\psfig@start{}%
+\def\psfig@end{\special{dvitops: import \@p@sfilefinal \space
+\@p@swidth sp \space \@p@sheight sp \space fill}%
+\if@clip \typeout{Clipping not supported}\fi
+\if@angle \typeout{Rotating not supported}\fi
+}%
+\let\epsfig@gofer\psfig@end
+%
+\or %case2 dvips
+\def\psfig@start{\special{ps::[begin] \@p@swidth \space \@p@sheight \space%
+ \@p@sbbllx \space \@p@sbblly \space%
+ \@p@sbburx \space \@p@sbbury \space%
+ startTexFig \space }%
+ \if@angle
+ \special {ps:: \@p@sangle \space rotate \space}
+ \fi
+ \if@clip
+ \if@verbose
+ \typeout{(clipped to BB) }%
+ \fi
+ \special{ps:: doclip \space }%
+ \fi
+ \special{ps: plotfile \@p@sfilefinal \space }%
+ \special{ps::[end] endTexFig \space }%
+}%
+\def\psfig@end{}%
+\def\epsfig@gofer{\if@clip
+ \if@verbose
+ \typeout{(clipped to BB)}%
+ \fi
+ \epsfclipon
+ \fi
+ \epsfsetgraph{\@p@sfilefinal}%
+}%
+%
+\or % case 3, emTeX
+\typeout{WARNING. You must have a .bb info file with the Bounding Box
+ of the pcx file}%
+\def\psfig@start{}%
+% when emtex imports a pcx file, it is *below* where we are now.
+% so raise the box
+\def\psfig@end{\typeout{pcx import of \@p@sfilefinal}%
+\if@clip \typeout{Clipping not supported}\fi
+\if@angle \typeout{Rotating not supported}\fi
+\raisebox{\@p@srheight sp}{\special{em: graph \@p@sfilefinal}}}%
+\def\epsfig@gofer{}%
+%
+\or % case 4, OzTeX
+\def\psfig@start{}%
+\def\psfig@end{%
+\EPS@Width\@p@swidth
+\EPS@Height\@p@sheight
+\divide\EPS@Width by 65781 % convert sp to bp
+\divide\EPS@Height by 65781
+\special{epsf=\@p@sfilefinal
+\space
+width=\the\EPS@Width
+\space
+height=\the\EPS@Height
+}%
+\if@clip \typeout{Clipping not supported}\fi
+\if@angle \typeout{Rotating not supported}\fi
+}%
+\let\epsfig@gofer\psfig@end
+\or % case 5, Textures
+\def\psfig@end{
+% what is scaling of picture
+ \EPS@Width=\@bbw
+ \divide\EPS@Width by 1000
+ \EPS@xscale=\@p@swidth \divide \EPS@xscale by \EPS@Width
+ \EPS@Height=\@bbh
+ \divide\EPS@Height by 1000
+ \EPS@yscale=\@p@sheight \divide \EPS@yscale by\EPS@Height
+% take largest calculated scale
+ \ifnum\EPS@xscale>\EPS@yscale\EPS@xscale=\EPS@yscale\fi
+\if@clip
+ \if@verbose
+ \typeout{(clipped to BB)}%
+ \fi
+ \epsfclipon
+\fi
+\special{illustration \@p@sfilefinal\space scaled \the\EPS@xscale}%
+}%
+\def\psfig@start{}%
+\let\epsfig\psfig
+\else
+\typeout{WARNING. *** unknown driver - no psfig}%
+\fi
+}%
+% copies of bits of LaTeX we need....
+\newdimen\ps@dimcent
+%
+% \fbox is defined in latex.tex; so if \fbox is undefined, assume that
+% we are not in LaTeX.
+% Perhaps this could be done better???
+\ifx\undefined\fbox
+% \fbox code from modified slightly from LaTeX
+\newdimen\fboxrule
+\newdimen\fboxsep
+\newdimen\ps@tempdima
+\newbox\ps@tempboxa
+\fboxsep = 0pt
+\fboxrule = .4pt
+\long\def\fbox#1{\leavevmode\setbox\ps@tempboxa\hbox{#1}\ps@tempdima\fboxrule
+ \advance\ps@tempdima \fboxsep \advance\ps@tempdima \dp\ps@tempboxa
+ \hbox{\lower \ps@tempdima\hbox
+ {\vbox{\hrule height \fboxrule
+ \hbox{\vrule width \fboxrule \hskip\fboxsep
+ \vbox{\vskip\fboxsep \box\ps@tempboxa\vskip\fboxsep}\hskip
+ \fboxsep\vrule width \fboxrule}%
+ \hrule height \fboxrule}}}}%
+\fi
+\ifx\@ifundefined\undefined
+\long\def\@ifundefined#1#2#3{\expandafter\ifx\csname
+ #1\endcsname\relax#2\else#3\fi}%
+\fi
+%
+\@ifundefined{typeout}%
+{\gdef\typeout#1{\immediate\write\sixt@@n{#1}}}%
+{\relax}%
+%
+%%% check to see if macros already loaded in (maybe some other file says
+%%% "\input epsfig") ...
+\@ifundefined{epsfig}{}{\typeout{EPSFIG --- already loaded}\endinput}%
+%
+%%%
+%%% we need Rokicki's EPSF macros anyway, unless they are already loaded
+%
+\@ifundefined{epsfbox}{\input epsf}{}%
+%
+%% SPQR 12.91 handling of errors using standard LaTeX error
+%% mechanism. In case we are plain TeX we first define the
+%% error routines...
+\ifx\undefined\@latexerr
+ \newlinechar`\^^J
+ \def\@spaces{\space\space\space\space}%
+ \def\@latexerr#1#2{%
+ \edef\@tempc{#2}\expandafter\errhelp\expandafter{\@tempc}%
+ \typeout{Error. \space see a manual for explanation.^^J
+ \space\@spaces\@spaces\@spaces Type \space H <return> \space for
+ immediate help.}\errmessage{#1}}%
+\fi
+%------------------------
+%% a couple of LaTeX error messages
+\def\@whattodo{You tried to include a PostScript figure which
+cannot be found^^JIf you press return to carry on anyway,^^J
+The failed name will be printed in place of the figure.^^J
+or type X to quit}%
+\def\@whattodobb{You tried to include a PostScript figure which
+has no^^Jbounding box, and you supplied none.^^J
+If you press return to carry on anyway,^^J
+The failed name will be printed in place of the figure.^^J
+or type X to quit}%
+%------------------------
+%
+%------------------------------------------------------------------------
+%------------------------------------------------------------------------
+%%% @psdo control structure -- similar to Latex @for.
+%%% I redefined these with different names so that psfig can
+%%% be used with TeX as well as LaTeX, and so that it will not
+%%% be vunerable to future changes in LaTeX's internal
+%%% control structure,
+%
+\def\@nnil{\@nil}%
+\def\@empty{}%
+\def\@psdonoop#1\@@#2#3{}%
+\def\@psdo#1:=#2\do#3{\edef\@psdotmp{#2}\ifx\@psdotmp\@empty \else
+ \expandafter\@psdoloop#2,\@nil,\@nil\@@#1{#3}\fi}%
+\def\@psdoloop#1,#2,#3\@@#4#5{\def#4{#1}\ifx #4\@nnil \else
+ #5\def#4{#2}\ifx #4\@nnil \else#5\@ipsdoloop #3\@@#4{#5}\fi\fi}%
+\def\@ipsdoloop#1,#2\@@#3#4{\def#3{#1}\ifx #3\@nnil
+ \let\@nextwhile=\@psdonoop \else
+ #4\relax\let\@nextwhile=\@ipsdoloop\fi\@nextwhile#2\@@#3{#4}}%
+\def\@tpsdo#1:=#2\do#3{\xdef\@psdotmp{#2}\ifx\@psdotmp\@empty \else
+ \@tpsdoloop#2\@nil\@nil\@@#1{#3}\fi}%
+\def\@tpsdoloop#1#2\@@#3#4{\def#3{#1}\ifx #3\@nnil
+ \let\@nextwhile=\@psdonoop \else
+ #4\relax\let\@nextwhile=\@tpsdoloop\fi\@nextwhile#2\@@#3{#4}}%
+%%%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% file reading stuff from epsf.tex
+%%% EPSF.TEX macro file:
+%%% Written by Tomas Rokicki of Radical Eye Software, 29 Mar 1989.
+%%% Revised by Don Knuth, 3 Jan 1990.
+%%% Revised by Tomas Rokicki to accept bounding boxes with no
+%%% space after the colon, 18 Jul 1990.
+%%% Portions modified/removed for use in PSFIG package by
+%%% J. Daniel Smith, 9 October 1990.
+%%% Just the bit which knows about (atend) as a BoundingBox
+%
+%%% hacked back a bit by SPQR 12/91
+%
+\long\def\epsfaux#1#2:#3\\{\ifx#1\epsfpercent
+ \def\testit{#2}\ifx\testit\epsfbblit
+ \@atendfalse
+ \epsf@atend #3 . \\%
+ \if@atend
+ \if@verbose
+ \typeout{epsfig: found `(atend)'; continuing search}%
+ \fi
+ \else
+ \epsfgrab #3 . . . \\%
+ \epsffileokfalse\global\no@bbfalse
+ \global\epsfbbfoundtrue
+ \fi
+ \fi\fi}%
+%
+%%% Determine if the stuff following the %%BoundingBox is `(atend)'
+%%% J. Daniel Smith. Copied from \epsf@grab above.
+%
+\def\epsf@atendlit{(atend)}
+%
+\def\epsf@atend #1 #2 #3\\{%
+ \def\epsf@tmp{#1}\ifx\epsf@tmp\empty
+ \epsf@atend #2 #3 .\\\else
+ \ifx\epsf@tmp\epsf@atendlit\@atendtrue\fi\fi}%
+
+
+%%% End of file reading stuff from epsf.tex
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% trigonometry stuff from "trig.tex"
+\chardef\trig@letter = 11
+\chardef\other = 12
+
+\newif\ifdebug %%% turn me on to see TeX hard at work ...
+\newif\ifc@mpute %%% don't need to compute some values
+\newif\if@atend
+\c@mputetrue % but assume that we do
+
+\let\then = \relax
+\def\r@dian{pt }%
+\let\r@dians = \r@dian
+\let\dimensionless@nit = \r@dian
+\let\dimensionless@nits = \dimensionless@nit
+\def\internal@nit{sp }%
+\let\internal@nits = \internal@nit
+\newif\ifstillc@nverging
+\def \Mess@ge #1{\ifdebug \then \message {#1} \fi}%
+
+{ %%% Things that need abnormal catcodes %%%
+ \catcode `\@ = \trig@letter
+ \gdef \nodimen {\expandafter \n@dimen \the \dimen}%
+ \gdef \term #1 #2 #3%
+ {\edef \t@ {\the #1}%%% freeze parameter 1 (count, by value)
+ \edef \t@@ {\expandafter \n@dimen \the #2\r@dian}%
+ %%% freeze parameter 2 (dimen, by value)
+ \t@rm {\t@} {\t@@} {#3}%
+ }%
+ \gdef \t@rm #1 #2 #3%
+ {{%
+ \count 0 = 0
+ \dimen 0 = 1 \dimensionless@nit
+ \dimen 2 = #2\relax
+ \Mess@ge {Calculating term #1 of \nodimen 2}%
+ \loop
+ \ifnum \count 0 < #1
+ \then \advance \count 0 by 1
+ \Mess@ge {Iteration \the \count 0 \space}%
+ \Multiply \dimen 0 by {\dimen 2}%
+ \Mess@ge {After multiplication, term = \nodimen 0}%
+ \Divide \dimen 0 by {\count 0}%
+ \Mess@ge {After division, term = \nodimen 0}%
+ \repeat
+ \Mess@ge {Final value for term #1 of
+ \nodimen 2 \space is \nodimen 0}%
+ \xdef \Term {#3 = \nodimen 0 \r@dians}%
+ \aftergroup \Term
+ }}%
+ \catcode `\p = \other
+ \catcode `\t = \other
+ \gdef \n@dimen #1pt{#1} %%% throw away the ``pt''
+}%
+
+\def \Divide #1by #2{\divide #1 by #2} %%% just a synonym
+
+\def \Multiply #1by #2%%% allows division of a dimen by a dimen
+ {{%%% should really freeze parameter 2 (dimen, passed by value)
+ \count 0 = #1\relax
+ \count 2 = #2\relax
+ \count 4 = 65536
+ \Mess@ge {Before scaling, count 0 = \the \count 0 \space and
+ count 2 = \the \count 2}%
+ \ifnum \count 0 > 32767 %%% do our best to avoid overflow
+ \then \divide \count 0 by 4
+ \divide \count 4 by 4
+ \else \ifnum \count 0 < -32767
+ \then \divide \count 0 by 4
+ \divide \count 4 by 4
+ \else
+ \fi
+ \fi
+ \ifnum \count 2 > 32767 %%% while retaining reasonable accuracy
+ \then \divide \count 2 by 4
+ \divide \count 4 by 4
+ \else \ifnum \count 2 < -32767
+ \then \divide \count 2 by 4
+ \divide \count 4 by 4
+ \else
+ \fi
+ \fi
+ \multiply \count 0 by \count 2
+ \divide \count 0 by \count 4
+ \xdef \product {#1 = \the \count 0 \internal@nits}%
+ \aftergroup \product
+ }}%
+
+\def\r@duce{\ifdim\dimen0 > 90\r@dian \then % sin(x) = sin(180-x)
+ \multiply\dimen0 by -1
+ \advance\dimen0 by 180\r@dian
+ \r@duce
+ \else \ifdim\dimen0 < -90\r@dian \then % sin(x) = sin(360+x)
+ \advance\dimen0 by 360\r@dian
+ \r@duce
+ \fi
+ \fi}%
+
+\def\Sine#1%
+ {{%
+ \dimen 0 = #1 \r@dian
+ \r@duce
+ \ifdim\dimen0 = -90\r@dian \then
+ \dimen4 = -1\r@dian
+ \c@mputefalse
+ \fi
+ \ifdim\dimen0 = 90\r@dian \then
+ \dimen4 = 1\r@dian
+ \c@mputefalse
+ \fi
+ \ifdim\dimen0 = 0\r@dian \then
+ \dimen4 = 0\r@dian
+ \c@mputefalse
+ \fi
+%
+ \ifc@mpute \then
+ % convert degrees to radians
+ \divide\dimen0 by 180
+ \dimen0=3.141592654\dimen0
+%
+ \dimen 2 = 3.1415926535897963\r@dian %%% a well-known constant
+ \divide\dimen 2 by 2 %%% we only deal with -pi/2 : pi/2
+ \Mess@ge {Sin: calculating Sin of \nodimen 0}%
+ \count 0 = 1 %%% see power-series expansion for sine
+ \dimen 2 = 1 \r@dian %%% ditto
+ \dimen 4 = 0 \r@dian %%% ditto
+ \loop
+ \ifnum \dimen 2 = 0 %%% then we've done
+ \then \stillc@nvergingfalse
+ \else \stillc@nvergingtrue
+ \fi
+ \ifstillc@nverging %%% then calculate next term
+ \then \term {\count 0} {\dimen 0} {\dimen 2}%
+ \advance \count 0 by 2
+ \count 2 = \count 0
+ \divide \count 2 by 2
+ \ifodd \count 2 %%% signs alternate
+ \then \advance \dimen 4 by \dimen 2
+ \else \advance \dimen 4 by -\dimen 2
+ \fi
+ \repeat
+ \fi
+ \xdef \sine {\nodimen 4}%
+ }}%
+
+%%% Now the Cosine can be calculated easily by calling \Sine:
+%%% cos(x) = sin(90-x)
+\def\Cosine#1{\ifx\sine\UnDefined\edef\Savesine{\relax}\else
+ \edef\Savesine{\sine}\fi
+ {\dimen0=#1\r@dian\multiply\dimen0 by -1
+ \advance\dimen0 by 90\r@dian
+ \Sine{\nodimen 0}%
+ \xdef\cosine{\sine}%
+ \xdef\sine{\Savesine}}}
+%%% end of trig stuff
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\def\psdraft{\def\@psdraft{0}}%
+\def\psfull{\def\@psdraft{1}}%
+\psfull
+\newif\if@compress
+\def\pscompress{\@compresstrue}
+\def\psnocompress{\@compressfalse}
+\@compressfalse
+\newif\if@scalefirst
+\def\psscalefirst{\@scalefirsttrue}%
+\def\psrotatefirst{\@scalefirstfalse}%
+\psrotatefirst
+%
+\newif\if@draftbox
+\def\psnodraftbox{\@draftboxfalse}%
+\@draftboxtrue
+%
+\newif\if@noisy
+\@noisyfalse
+\newif\ifno@bb
+%%% These are for the option list.
+%%% A specification of the form a = b maps to calling \@p@@sa{b}%
+\newif\if@bbllx
+\newif\if@bblly
+\newif\if@bburx
+\newif\if@bbury
+\newif\if@height
+\newif\if@width
+\newif\if@rheight
+\newif\if@rwidth
+\newif\if@angle
+\newif\if@clip
+\newif\if@verbose
+\newif\if@prologfile
+\def\@p@@sprolog#1{\@prologfiletrue\def\@prologfileval{#1}}%
+\def\@p@@sclip#1{\@cliptrue}%
+%
+\newif\ifepsfig@dos % only single suffix possible
+\def\epsfigdos{\epsfig@dostrue}%
+\epsfig@dosfalse
+%%% if this is true, the original Darrell macros and specials are used
+\newif\ifuse@psfig
+%
+\def\ParseName#1{\expandafter\@Parse#1}%
+\def\@Parse#1.#2:{\gdef\BaseName{#1}\gdef\FileType{#2}}%
+
+\def\@p@@sfile#1{%
+ \ifepsfig@dos
+ \ParseName{#1:}%
+ \else
+ \gdef\BaseName{#1}\gdef\FileType{}%
+ \fi
+ \def\@p@sfile{NO FILE: #1}%
+ \def\@p@sfilefinal{NO FILE: #1}%
+ \openin1=#1
+ \ifeof1\closein1\openin1=\BaseName.bb
+ \ifeof1\closein1
+ \if@bbllx % No postscript file but bb given explicitly.
+ \if@bblly\if@bburx\if@bbury
+ \def\@p@sfile{#1}%
+ \def\@p@sfilefinal{#1}%
+ \fi\fi\fi
+ \else % No bounding box found.
+ \@latexerr{ERROR. PostScript file #1 not found}\@whattodo
+ \@p@@sbbllx{100bp}%
+ \@p@@sbblly{100bp}%
+ \@p@@sbburx{200bp}%
+ \@p@@sbbury{200bp}%
+ \psdraft
+ \fi
+ \else % Postscript file is compressed.
+ \closein1%
+ \edef\@p@sfile{\BaseName.bb}%
+ \typeout{using BB from \@p@sfile}%
+ \ifnum\fig@driver=3
+ \edef\@p@sfilefinal{\BaseName.pcx}%
+ \else
+ \ifepsfig@dos
+ \edef\@p@sfilefinal{"`gunzip -c `texfind \BaseName.{z,Z,gz}"}%
+ \else
+ \edef\@p@sfilefinal{"`epsfig \if@compress-c \fi#1"}%
+ \fi
+ \fi
+ \fi
+ \else\closein1 % Postscript file is not compressed.
+ \edef\@p@sfile{#1}%
+ \if@compress
+ \edef\@p@sfilefinal{"`epsfig -c #1"}%
+ \else
+ \edef\@p@sfilefinal{#1}%
+ \fi
+ \fi%
+}
+
+% alternative syntax: figure=
+\let\@p@@sfigure\@p@@sfile
+%
+\def\@p@@sbbllx#1{%
+ \@bbllxtrue
+ \ps@dimcent=#1
+ \edef\@p@sbbllx{\number\ps@dimcent}%
+ \divide\ps@dimcent by65536
+ \global\edef\epsfllx{\number\ps@dimcent}%
+}%
+\def\@p@@sbblly#1{%
+ \@bbllytrue
+ \ps@dimcent=#1
+ \edef\@p@sbblly{\number\ps@dimcent}%
+ \divide\ps@dimcent by65536
+ \global\edef\epsflly{\number\ps@dimcent}%
+}%
+\def\@p@@sbburx#1{%
+ \@bburxtrue
+ \ps@dimcent=#1
+ \edef\@p@sbburx{\number\ps@dimcent}%
+ \divide\ps@dimcent by65536
+ \global\edef\epsfurx{\number\ps@dimcent}%
+}%
+\def\@p@@sbbury#1{%
+ \@bburytrue
+ \ps@dimcent=#1
+ \edef\@p@sbbury{\number\ps@dimcent}%
+ \divide\ps@dimcent by65536
+ \global\edef\epsfury{\number\ps@dimcent}%
+}%
+\def\@p@@sheight#1{%
+ \@heighttrue
+ \global\epsfysize=#1
+ \ps@dimcent=#1
+ \edef\@p@sheight{\number\ps@dimcent}%
+}%
+\def\@p@@swidth#1{%
+ \@widthtrue
+ \global\epsfxsize=#1
+ \ps@dimcent=#1
+ \edef\@p@swidth{\number\ps@dimcent}%
+}%
+\def\@p@@srheight#1{%
+ \@rheighttrue\use@psfigtrue
+ \ps@dimcent=#1
+ \edef\@p@srheight{\number\ps@dimcent}%
+}%
+\def\@p@@srwidth#1{%
+ \@rwidthtrue\use@psfigtrue
+ \ps@dimcent=#1
+ \edef\@p@srwidth{\number\ps@dimcent}%
+}%
+\def\@p@@sangle#1{%
+ \use@psfigtrue
+ \@angletrue
+ \edef\@p@sangle{#1}%
+}%
+\def\@p@@ssilent#1{%
+ \@verbosefalse
+}%
+\def\@p@@snoisy#1{%
+ \@verbosetrue
+}%
+\def\@cs@name#1{\csname #1\endcsname}%
+\def\@setparms#1=#2,{\@cs@name{@p@@s#1}{#2}}%
+%
+%%% initialize the defaults (size the size of the figure)
+%
+\def\ps@init@parms{%
+ \@bbllxfalse \@bbllyfalse
+ \@bburxfalse \@bburyfalse
+ \@heightfalse \@widthfalse
+ \@rheightfalse \@rwidthfalse
+ \def\@p@sbbllx{}\def\@p@sbblly{}%
+ \def\@p@sbburx{}\def\@p@sbbury{}%
+ \def\@p@sheight{}\def\@p@swidth{}%
+ \def\@p@srheight{}\def\@p@srwidth{}%
+ \def\@p@sangle{0}%
+ \def\@p@sfile{}%
+ \use@psfigfalse
+ \@prologfilefalse
+ \def\@sc{}%
+ \if@noisy
+ \@verbosetrue
+ \else
+ \@verbosefalse
+ \fi
+ \@clipfalse
+}%
+%
+%%% Go through the options setting things up.
+%
+\def\parse@ps@parms#1{%
+ \@psdo\@psfiga:=#1\do
+ {\expandafter\@setparms\@psfiga,}%
+\if@prologfile
+\special{header=\@prologfileval}%
+\fi
+}%
+%
+%%% Compute bb height and width
+%
+\def\bb@missing{%
+ \if@verbose
+ \typeout{psfig: searching \@p@sfile \space for bounding box}%
+ \fi
+ \epsfgetbb{\@p@sfile}%
+ \ifepsfbbfound
+ \ps@dimcent=\epsfllx bp\edef\@p@sbbllx{\number\ps@dimcent}%
+ \ps@dimcent=\epsflly bp\edef\@p@sbblly{\number\ps@dimcent}%
+ \ps@dimcent=\epsfurx bp\edef\@p@sbburx{\number\ps@dimcent}%
+ \ps@dimcent=\epsfury bp\edef\@p@sbbury{\number\ps@dimcent}%
+ \else
+ \epsfbbfoundfalse
+ \fi
+}
+%
+% rotate point (#1,#2) about (0,0).
+% The sine and cosine of the angle are already stored in \sine and
+% \cosine. The result is placed in (\p@intvaluex, \p@intvaluey).
+\newdimen\p@intvaluex
+\newdimen\p@intvaluey
+\def\rotate@#1#2{{\dimen0=#1 sp\dimen1=#2 sp
+% calculate x' = x \cos\theta - y \sin\theta
+ \global\p@intvaluex=\cosine\dimen0
+ \dimen3=\sine\dimen1
+ \global\advance\p@intvaluex by -\dimen3
+% calculate y' = x \sin\theta + y \cos\theta
+ \global\p@intvaluey=\sine\dimen0
+ \dimen3=\cosine\dimen1
+ \global\advance\p@intvaluey by \dimen3
+ }}%
+\def\compute@bb{%
+ \epsfbbfoundfalse
+ \if@bbllx\epsfbbfoundtrue\fi
+ \if@bblly\epsfbbfoundtrue\fi
+ \if@bburx\epsfbbfoundtrue\fi
+ \if@bbury\epsfbbfoundtrue\fi
+ \ifepsfbbfound\else\bb@missing\fi
+ \ifepsfbbfound\else
+ \@latexerr{ERROR. cannot locate BoundingBox}\@whattodobb
+ \@p@@sbbllx{100bp}%
+ \@p@@sbblly{100bp}%
+ \@p@@sbburx{200bp}%
+ \@p@@sbbury{200bp}%
+ \no@bbtrue
+ \psdraft
+ \fi
+ %
+%
+% store height/width of original (unrotated) bounding box
+ \count203=\@p@sbburx
+ \count204=\@p@sbbury
+ \advance\count203 by -\@p@sbbllx
+ \advance\count204 by -\@p@sbblly
+ \edef\ps@bbw{\number\count203}%
+ \edef\ps@bbh{\number\count204}%
+ \edef\@bbw{\number\count203}%
+ \edef\@bbh{\number\count204}%
+ \if@angle
+ \Sine{\@p@sangle}\Cosine{\@p@sangle}%
+
+{\ps@dimcent=\maxdimen\xdef\r@p@sbbllx{\number\ps@dimcent}%
+
+\xdef\r@p@sbblly{\number\ps@dimcent}%
+
+\xdef\r@p@sbburx{-\number\ps@dimcent}%
+
+\xdef\r@p@sbbury{-\number\ps@dimcent}}%
+%
+% Need to rotate all four points and take the X-Y extremes of the new
+% points as the new bounding box.
+ \def\minmaxtest{%
+ \ifnum\number\p@intvaluex<\r@p@sbbllx
+ \xdef\r@p@sbbllx{\number\p@intvaluex}\fi
+ \ifnum\number\p@intvaluex>\r@p@sbburx
+ \xdef\r@p@sbburx{\number\p@intvaluex}\fi
+ \ifnum\number\p@intvaluey<\r@p@sbblly
+ \xdef\r@p@sbblly{\number\p@intvaluey}\fi
+ \ifnum\number\p@intvaluey>\r@p@sbbury
+ \xdef\r@p@sbbury{\number\p@intvaluey}\fi
+ }%
+% lower left
+ \rotate@{\@p@sbbllx}{\@p@sbblly}%
+ \minmaxtest
+% upper left
+ \rotate@{\@p@sbbllx}{\@p@sbbury}%
+ \minmaxtest
+% lower right
+ \rotate@{\@p@sbburx}{\@p@sbblly}%
+ \minmaxtest
+% upper right
+ \rotate@{\@p@sbburx}{\@p@sbbury}%
+ \minmaxtest
+
+\edef\@p@sbbllx{\r@p@sbbllx}\edef\@p@sbblly{\r@p@sbblly}%
+
+\edef\@p@sbburx{\r@p@sbburx}\edef\@p@sbbury{\r@p@sbbury}%
+ \fi
+ \count203=\@p@sbburx
+ \count204=\@p@sbbury
+ \advance\count203 by -\@p@sbbllx
+ \advance\count204 by -\@p@sbblly
+ \edef\@bbw{\number\count203}%
+ \edef\@bbh{\number\count204}%
+}%
+%
+% \in@hundreds performs #1 * (#2 / #3) correct to the hundreds,
+% then leaves the result in @result
+%
+\def\in@hundreds#1#2#3{\count240=#2 \count241=#3
+ \count100=\count240 % 100 is first digit #2/#3
+ \divide\count100 by \count241
+ \count101=\count100
+ \multiply\count101 by \count241
+ \advance\count240 by -\count101
+ \multiply\count240 by 10
+ \count101=\count240 %101 is second digit of #2/#3
+ \divide\count101 by \count241
+ \count102=\count101
+ \multiply\count102 by \count241
+ \advance\count240 by -\count102
+ \multiply\count240 by 10
+ \count102=\count240 % 102 is the third digit
+ \divide\count102 by \count241
+ \count200=#1\count205=0
+ \count201=\count200
+ \multiply\count201 by \count100
+ \advance\count205 by \count201
+ \count201=\count200
+ \divide\count201 by 10
+ \multiply\count201 by \count101
+ \advance\count205 by \count201
+ %
+ \count201=\count200
+ \divide\count201 by 100
+ \multiply\count201 by \count102
+ \advance\count205 by \count201
+ %
+ \edef\@result{\number\count205}%
+}%
+\def\compute@wfromh{%
+ % computing : width = height * (bbw / bbh)
+ \in@hundreds{\@p@sheight}{\@bbw}{\@bbh}%
+ \edef\@p@swidth{\@result}%
+}%
+\def\compute@hfromw{%
+ % computing : height = width * (bbh / bbw)
+ \in@hundreds{\@p@swidth}{\@bbh}{\@bbw}%
+ \edef\@p@sheight{\@result}%
+}%
+\def\compute@handw{%
+ \if@height
+ \if@width
+ \else
+ \compute@wfromh
+ \fi
+ \else
+ \if@width
+ \compute@hfromw
+ \else
+ \edef\@p@sheight{\@bbh}%
+ \edef\@p@swidth{\@bbw}%
+ \fi
+ \fi
+}%
+\def\compute@resv{%
+ \if@rheight \else \edef\@p@srheight{\@p@sheight} \fi
+ \if@rwidth \else \edef\@p@srwidth{\@p@swidth} \fi
+}%
+%
+% Compute any missing values
+\def\compute@sizes{%
+ \if@scalefirst\if@angle
+% at this point the bounding box has been adjsuted correctly for
+% rotation. PSFIG does all of its scaling using \@bbh and \@bbw. If
+% a width= or height= was specified along with \psscalefirst, then the
+% width=/height= value needs to be adjusted to match the new (rotated)
+% bounding box size (specifed in \@bbw and \@bbh).
+% \ps@bbw width=
+% ------- = ----------
+% \@bbw new width=
+% so `new width=' = (width= * \@bbw) / \ps@bbw; where \ps@bbw is the
+% width of the original (unrotated) bounding box.
+ \if@width
+ \in@hundreds{\@p@swidth}{\@bbw}{\ps@bbw}%
+ \edef\@p@swidth{\@result}%
+ \fi
+ \if@height
+ \in@hundreds{\@p@sheight}{\@bbh}{\ps@bbh}%
+ \edef\@p@sheight{\@result}%
+ \fi
+ \fi\fi
+ \compute@handw
+ \compute@resv
+}
+%
+
+%------------------------------------------------------------------
+%%% by the way, possible parameters to the PSfile= command in dvips are:
+%%% llx
+%%% lly
+%%% urx
+%%% ury
+%%% rwi
+% hoffset The horizontal offset (default 0)
+% voffset The vertical offset (default 0)
+% hsize The horizontal clipping size (default 612)
+% vsize The vertical clipping size (default 792)
+% hscale The horizontal scaling factor (default 100)
+% vscale The vertical scaling factor (default 100)
+% angle The rotation (default 0)
+%------------------------------------------------------------------
+\long\def\graphic@verb#1{\def\next{#1}%
+ {\expandafter\graphic@strip\meaning\next}}
+\def\graphic@strip#1>{}
+\def\graphic@zapspace#1{%
+ #1\ifx\graphic@zapspace#1\graphic@zapspace%
+ \else\expandafter\graphic@zapspace%
+ \fi}
+\def\psfig#1{%
+\edef\@tempa{\graphic@zapspace#1{}}%
+\ifvmode\leavevmode\fi\vbox {%
+ %
+ \ps@init@parms
+ \parse@ps@parms{\@tempa}%
+ %
+ \ifnum\@psdraft=1
+ \typeout{[\@p@sfilefinal]}%
+ \if@verbose
+ \typeout{epsfig: using PSFIG macros}%
+ \fi
+ \psfig@method
+ \else
+ \epsfig@draft
+ \fi
+}
+}%
+\def\graphic@zapspace#1{%
+ #1\ifx\graphic@zapspace#1\graphic@zapspace%
+ \else\expandafter\graphic@zapspace%
+ \fi}
+\def\epsfig#1{%
+\edef\@tempa{\graphic@zapspace#1{}}%
+\ifvmode\leavevmode\fi\vbox {%
+ %
+ \ps@init@parms
+ \parse@ps@parms{\@tempa}%
+ %
+ \ifnum\@psdraft=1
+ \if@angle\use@psfigtrue\fi
+ {\ifnum\fig@driver=1\global\use@psfigtrue\fi}%
+ {\ifnum\fig@driver=3\global\use@psfigtrue\fi}%
+ {\ifnum\fig@driver=4\global\use@psfigtrue\fi}%
+ {\ifnum\fig@driver=5\global\use@psfigtrue\fi}%
+ \ifuse@psfig
+ \if@verbose
+ \typeout{epsfig: using PSFIG macros}%
+ \fi
+ \psfig@method
+ \else
+ \if@verbose
+ \typeout{epsfig: using EPSF macros}%
+ \fi
+ \epsf@method
+ \fi
+ \else
+ \epsfig@draft
+ \fi
+}%
+}%
+
+
+\def\epsf@method{%
+ \epsfbbfoundfalse
+ \if@bbllx\epsfbbfoundtrue\fi
+ \if@bblly\epsfbbfoundtrue\fi
+ \if@bburx\epsfbbfoundtrue\fi
+ \if@bbury\epsfbbfoundtrue\fi
+ \ifepsfbbfound\else\epsfgetbb{\@p@sfile}\fi
+ \ifepsfbbfound
+ \typeout{<\@p@sfilefinal>}%
+ \epsfig@gofer
+ \else
+ \@latexerr{ERROR - Cannot locate BoundingBox}\@whattodobb
+ \@p@@sbbllx{100bp}%
+ \@p@@sbblly{100bp}%
+ \@p@@sbburx{200bp}%
+ \@p@@sbbury{200bp}%
+ \count203=\@p@sbburx
+ \count204=\@p@sbbury
+ \advance\count203 by -\@p@sbbllx
+ \advance\count204 by -\@p@sbblly
+ \edef\@bbw{\number\count203}%
+ \edef\@bbh{\number\count204}%
+ \compute@sizes
+ \epsfig@@draft
+ \fi
+}%
+\def\psfig@method{%
+ \compute@bb
+ \ifepsfbbfound
+ \compute@sizes
+ \psfig@start
+ % Create the vbox to reserve the space for the figure%
+ \vbox to \@p@srheight sp{\hbox to \@p@srwidth
+ sp{\hss}\vss\psfig@end}%
+ \else
+ \epsfig@draft
+ \fi
+}%
+%
+% draft figure, just reserve the space and print the
+% path name.
+\def\epsfig@draft{\compute@bb\compute@sizes\epsfig@@draft}%
+%
+\def\epsfig@@draft{%
+\typeout{<(draft only) \@p@sfilefinal>}%
+\if@draftbox
+ % Verbose draft: print file name in box
+ \hbox{{\fboxsep0pt\fbox{\vbox to \@p@srheight sp{%
+ \vss\hbox to \@p@srwidth sp{ \hss
+ \expandafter\Literally\@p@sfilefinal\@nil
+ \hss }\vss
+ }}}}%
+\else
+ % Non-verbose draft
+ \vbox to \@p@srheight sp{%
+ \vss\hbox to \@p@srwidth sp{\hss}\vss}%
+\fi
+}%
+\def\Literally#1\@nil{{\tt\graphic@verb{#1}}}
+% default to dvips
+\psfigdriver{dvips}%
+% and to DOS file conventions
+%%% \epsfigdos
+\epsfigRestoreAt
+
diff --git a/obsolete/macros/latex209/contrib/epsfig/makefile b/obsolete/macros/latex209/contrib/epsfig/makefile
new file mode 100644
index 0000000000..e5e5540631
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/epsfig/makefile
@@ -0,0 +1,28 @@
+# USER CONFIG -- edit the following to suit your system
+#
+BINDIR=${HOME}/bin
+STYDIR=${HOME}/lib/tex
+INSTALL=/usr/local/bin/install -g tex
+#
+# END USER CONFIG.
+
+BINS=epsfig epsbb
+STYS=epsfig.sty
+
+
+install: ${STYDIR}/epsfig.sty ${BINDIR}/epsfig ${BINDIR}/epsbb
+
+${STYDIR}/epsfig.sty : epsfig.sty
+ $(INSTALL) -m 0644 epsfig.sty ${STYDIR}
+
+${BINDIR}/epsfig : epsfig
+ $(INSTALL) -m 0755 epsfig ${BINDIR}
+
+${BINDIR}/epsbb : epsbb
+ $(INSTALL) -m 0755 epsbb ${BINDIR}
+
+
+shar: epsfig.shar
+
+epsfig.shar: Makefile README ${BINS} ${STYS}
+ shar Makefile README ${BINS} ${STYS} > epsfig.shar
diff --git a/obsolete/macros/latex209/contrib/exam/exam.sty b/obsolete/macros/latex209/contrib/exam/exam.sty
new file mode 100644
index 0000000000..2023b03452
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/exam/exam.sty
@@ -0,0 +1,759 @@
+% exam.sty
+%
+% A LaTeX document style for preparing exams.
+%
+% Written by Philip Hirschhorn
+
+
+\def\fileversion{1.0}
+\def\filedate{04-DEC-94}
+
+\typeout{Document style `exam.sty' by Philip Hirschhorn}
+\typeout{Version \fileversion, \filedate}
+
+%---------------------------------------------------------------------
+%---------------------------------------------------------------------
+% PLEASE DO NOT MAKE ANY CHANGES TO THIS FILE!
+%
+% If you wish to make changes to this file, rename this file
+% to something other than exam.sty BEFORE YOU MAKE THE CHANGES!
+%
+% If there's some feature that you'd like that this file doesn't
+% provide, tell me about it.
+%
+% Philip Hirschhorn
+% Department of Mathematics
+% Wellesley College
+% Wellesley, MA 02181
+% psh@math.mit.edu
+% phirschhorn@wellesley.edu
+% (617) 283-3116
+%
+%---------------------------------------------------------------------
+%---------------------------------------------------------------------
+
+% The user documentation for exam.sty is in the file examdoc.tex.
+
+
+
+%--------------------------------------------------------------------
+%--------------------------------------------------------------------
+
+\input{article.sty}
+
+
+
+
+
+% *****************
+% ** PAGE LAYOUT **
+% *****************
+
+
+\setlength{\textwidth}{6.5in}
+\setlength{\oddsidemargin}{0pt}
+\setlength{\evensidemargin}{0pt}
+
+
+\setlength{\headheight}{15pt}
+\setlength{\headsep}{15pt}
+\setlength{\topmargin}{0in}
+\addtolength{\topmargin}{-\headheight}
+\addtolength{\topmargin}{-\headsep}
+\setlength{\textheight}{8.8in}
+\setlength{\footskip}{29pt}
+\setlength{\marginparwidth}{.5in}
+\setlength{\marginparsep}{5pt}
+
+%--------------------------------------------------------------------
+
+% ****************
+% ** EXTRAWIDTH **
+% ****************
+
+\newlength\@extrawidth
+
+% We put the argument of \extrawidth into a length so that it will
+% work correctly even if it's negative:
+
+\def\extrawidth#1{%
+ \@extrawidth=#1
+ \advance \textwidth by \@extrawidth
+ \divide\@extrawidth by 2
+ \advance\oddsidemargin by -\@extrawidth
+ \advance\evensidemargin by -\@extrawidth
+}
+
+
+
+
+%--------------------------------------------------------------------
+%--------------------------------------------------------------------
+% Making room for large headers and footers
+
+% The following are used to save the effect of any changes to
+% \topmargin and \textheight caused by \extraheadheight or
+% \extrafootheight commands. They hold the value given in the most
+% recent command. We put them into a length so that it will work
+% correctly even if the argument is negative:
+
+\newlength\@extrahead
+\newlength\@extrafoot
+\setlength{\@extrahead}{0in}
+\setlength{\@extrafoot}{0in}
+
+
+\def\extraheadheight{%
+ \@ifnextchar[{\@doextraheads}%
+ {\@setheadheight}%
+}
+
+\def\@doextraheads[#1]#2{%
+ \@setheadheight{#1}%
+ \@appendoutput{\ifnum\thepage=2\@setheadheight{#2}\fi}%
+}
+
+
+\def\extrafootheight{%
+ \@ifnextchar[{\@doextrafeet}%
+ {\@setfootheight}%
+}
+
+\def\@doextrafeet[#1]#2{%
+ \@setfootheight{#1}%
+ \@appendoutput{\ifnum\thepage=2\@setfootheight{#2}\fi}%
+}
+
+\def\@appendoutput#1{%
+ \output=\expandafter{\the\output #1}%
+}
+
+%--------------------------------------------------------------------
+% \setheadheight and \setfootheight:
+
+\def\@setheadheight#1{%
+ \begingroup % Avoid trouble from using \@temp and \@spaces
+ % Reset the effect of the most recent change:
+ \global\advance\topmargin by -\@extrahead
+ \global\advance\textheight by \@extrahead
+ % Save the newly set value:
+ \def\@temp{#1}
+ \def\@spaces{ }
+ \ifx\@temp\@empty
+ \global\@extrahead=0in
+ \else
+ \ifx\@temp\@spaces
+ \global\@extrahead=0in
+ \else
+ \global\@extrahead=#1
+ \fi
+ \fi
+ % Set the new values:
+ \global\advance\topmargin by \@extrahead
+ \global\advance\textheight by -\@extrahead
+ % Make it take effect RIGHT NOW!:
+ % (The following stuff isn't necessary if \@setheadheight is
+ % executed only in the preamble or as we return from the output
+ % routine, but we're leaving it in so that this will still work if
+ % we use this at some random point in the middle of composing a
+ % page).
+ \global\@colht=\textheight
+ \global\@colroom=\textheight
+ \global\vsize=\textheight
+ \global\pagegoal=\textheight
+ \endgroup
+}
+
+\def\@setfootheight#1{%
+ \begingroup % Avoid trouble from using \@temp and \@spaces
+ % Reset the effect of the most recent change:
+ \global\advance\textheight by \@extrafoot
+ % Save the newly set value:
+ \def\@temp{#1}
+ \def\@spaces{ }
+ \ifx\@temp\@empty
+ \global\@extrafoot=0in
+ \else
+ \ifx\@temp\@spaces
+ \global\@extrafoot=0in
+ \else
+ \global\@extrafoot=#1
+ \fi
+ \fi
+ % Set the new values:
+ \global\advance\textheight by -\@extrafoot
+ % Make it take effect RIGHT NOW!:
+ % (The following stuff isn't necessary if \@setfootheight is
+ % executed only in the preamble or as we return from the output
+ % routine, but we're leaving it in so that this will still work if
+ % we use this at some random point in the middle of composing a
+ % page).
+ \global\@colht=\textheight
+ \global\@colroom=\textheight
+ \global\vsize=\textheight
+ \global\pagegoal=\textheight
+ \endgroup
+}
+
+
+
+
+%---------------------------------------------------------------------
+%
+% *************************
+% ** HEADERS AND FOOTERS **
+% *************************
+%
+% The pagestyles available are head, foot, headandfoot, and empty.
+% \pagestyle{head} prints the head, and gives an empty foot.
+% \pagestyle{foot} prints the foot, and gives an empty head.
+% \pagestyle{headandfoot} prints both the head and the foot.
+% \pagestyle{empty} gives an empty head and an empty foot.
+%
+
+% Pagestyles:
+
+\def\ps@head{%
+ \@dohead
+ \@nofoot
+}
+
+\def\ps@headandfoot{%
+ \@dohead
+ \@dofoot
+}
+
+\def\ps@foot{%
+ \@nohead
+ \@dofoot
+}
+
+\def\ps@empty{%
+ \@nohead
+ \@nofoot
+}
+
+
+
+\def\@dohead{%
+ \def\@oddhead{%
+ \ifnum\value{page}=1
+ \@fullhead
+ \else
+ \r@fullhead
+ \fi
+ }% @oddhead
+ \let\@evenhead=\@oddhead
+}
+
+\def\@dofoot{%
+ \def\@oddfoot{%
+ \ifnum\value{page}=1
+ \@fullfoot
+ \else
+ \r@fullfoot
+ \fi
+ }% @oddfoot
+ \let\@evenfoot=\@oddfoot
+
+}
+
+\def\@nohead{%
+ \def\@oddhead{}%
+ \let\@evenhead=\@oddhead
+}
+
+\def\@nofoot{%
+ \def\@oddfoot{}%
+ \let\@evenfoot=\@oddfoot
+}
+
+
+
+
+%--------------------------------------------------------------------
+% \@fullhead, \r@fullhead, \@fullfoot, and \r@fullfoot:
+
+\def\@fullhead{%
+ \vbox to \headheight{%
+ \vss
+ \hbox to \textwidth{%
+ \rm\rlap{\parbox[b]{\textwidth}{\raggedright\@lhead\strut}}%
+ \hss\parbox[b]{\textwidth}{\centering\@chead\strut}\hss
+ \llap{\parbox[b]{\textwidth}{\raggedleft\@rhead\strut}}%
+ }% hbox
+ \if@headrule
+ \hrule
+ \else
+ % an invisible hrule, to keep positioning constant:
+ \hrule width 0pt
+ \fi
+ }% vbox
+}
+
+
+\def\r@fullhead{%
+ \vbox to \headheight{%
+ \vss
+ \hbox to \textwidth{%
+ \rm\rlap{\parbox[b]{\textwidth}{\raggedright\r@lhead\strut}}%
+ \hss\parbox[b]{\textwidth}{\centering\r@chead\strut}\hss
+ \llap{\parbox[b]{\textwidth}{\raggedleft\r@rhead\strut}}%
+ }% hbox
+ \ifr@headrule
+ \hrule
+ \else
+ % an invisible hrule, to keep positioning constant:
+ \hrule width 0pt
+ \fi
+ }% vbox
+}
+
+
+
+% We arrange it so that the very top of first line of text in the
+% foot is at a fixed position on the page, whether or not there's
+% a footrule:
+
+\def\@fullfoot{%
+ \vbox to 0pt{%
+ \if@footrule
+ \hrule
+ \else
+ % an invisible hrule, to keep positioning constant:
+ \hrule width 0pt
+ \fi
+ \vskip 3pt
+ \hbox to \textwidth{%
+ \rm\rlap{\parbox[t]{\textwidth}{\raggedright\@lfoot}}%
+ \hss\parbox[t]{\textwidth}{\centering\@cfoot}\hss
+ \llap{\parbox[t]{\textwidth}{\raggedleft\@rfoot}}%
+ }% hbox
+ \vss
+ }% vbox
+}
+
+
+\def\r@fullfoot{%
+ \vbox to 0pt{%
+ \ifr@footrule
+ \hrule
+ \else
+ % an invisible hrule, to keep positioning constant:
+ \hrule width 0pt
+ \fi
+ \vskip 3pt
+ \hbox to \textwidth{%
+ \rm\rlap{\parbox[t]{\textwidth}{\raggedright\r@lfoot}}%
+ \hss\parbox[t]{\textwidth}{\centering\r@cfoot}\hss
+ \llap{\parbox[t]{\textwidth}{\raggedleft\r@rfoot}}%
+ }% hbox
+ \vss
+ }% vbox
+}
+
+
+%--------------------------------------------------------------------
+%--------------------------------------------------------------------
+%
+% ********************************************
+% ** COMMANDS TO DEFINE HEADERS AND FOOTERS **
+% ********************************************
+%
+% \lhead[#1]{#2} sets the first page left head to #1, and the
+% running left head to #2
+%
+% \lhead{#1} sets both the first page left head and the running
+% left head to #1
+%
+% \chead, \rhead, \lfoot, \cfoot, and \rfoot work similarly.
+%
+%
+% \@lhead is the left head for Page 1
+% \r@lhead is the running left head
+% (i.e., for all pages other than the first)
+%
+% \@chead is the center head for Page 1
+% \r@chead is the running center head
+% (i.e., for all pages other than the first)
+%
+% etc.
+%
+% Alternative commands are:
+% \firstpageheader{LEFT}{CENTER}{RIGHT}
+% \runningheader{LEFT}{CENTER}{RIGHT}
+% or
+% \header{LEFT}{CENTER}{RIGHT}
+% which is equivalent to the two commands
+% \firstpageheader{LEFT}{CENTER}{RIGHT}
+% \runningheader{LEFT}{CENTER}{RIGHT}
+%
+% Alternative commands are:
+% \firstpagefooter{LEFT}{CENTER}{RIGHT}
+% \runningfoother{LEFT}{CENTER}{RIGHT}
+% or
+% \footer{LEFT}{CENTER}{RIGHT}
+% which is equivalent to the two commands
+% \firstpagefooter{LEFT}{CENTER}{RIGHT}
+% \runningfoother{LEFT}{CENTER}{RIGHT}
+
+\def\firstpageheader#1#2#3{%
+ \def\@lhead{#1}%
+ \def\@chead{#2}%
+ \def\@rhead{#3}%
+}
+
+\def\runningheader#1#2#3{%
+ \def\r@lhead{#1}%
+ \def\r@chead{#2}%
+ \def\r@rhead{#3}%
+}
+
+\def\header#1#2#3{%
+ \firstpageheader{#1}{#2}{#3}%
+ \runningheader{#1}{#2}{#3}%
+}
+
+
+\def\firstpagefooter#1#2#3{%
+ \def\@lfoot{#1}%
+ \def\@cfoot{#2}%
+ \def\@rfoot{#3}%
+}
+
+\def\runningfooter#1#2#3{%
+ \def\r@lfoot{#1}%
+ \def\r@cfoot{#2}%
+ \def\r@rfoot{#3}%
+}
+
+\def\footer#1#2#3{%
+ \firstpagefooter{#1}{#2}{#3}%
+ \runningfooter{#1}{#2}{#3}%
+}
+
+
+
+\def\lhead{\@ifnextchar[{\@xlhead}{\@ylhead}}
+\def\@xlhead[#1]#2{\def\@lhead{#1}\def\r@lhead{#2}}
+\def\@ylhead#1{\def\r@lhead{#1}\def\@lhead{#1}}
+
+\def\chead{\@ifnextchar[{\@xchead}{\@ychead}}
+\def\@xchead[#1]#2{\def\@chead{#1}\def\r@chead{#2}}
+\def\@ychead#1{\def\r@chead{#1}\def\@chead{#1}}
+
+\def\rhead{\@ifnextchar[{\@xrhead}{\@yrhead}}
+\def\@xrhead[#1]#2{\def\@rhead{#1}\def\r@rhead{#2}}
+\def\@yrhead#1{\def\r@rhead{#1}\def\@rhead{#1}}
+
+\def\lfoot{\@ifnextchar[{\@xlfoot}{\@ylfoot}}
+\def\@xlfoot[#1]#2{\def\@lfoot{#1}\def\r@lfoot{#2}}
+\def\@ylfoot#1{\def\r@lfoot{#1}\def\@lfoot{#1}}
+
+\def\cfoot{\@ifnextchar[{\@xcfoot}{\@ycfoot}}
+\def\@xcfoot[#1]#2{\def\@cfoot{#1}\def\r@cfoot{#2}}
+\def\@ycfoot#1{\def\r@cfoot{#1}\def\@cfoot{#1}}
+
+\def\rfoot{\@ifnextchar[{\@xrfoot}{\@yrfoot}}
+\def\@xrfoot[#1]#2{\def\@rfoot{#1}\def\r@rfoot{#2}}
+\def\@yrfoot#1{\def\r@rfoot{#1}\def\@rfoot{#1}}
+
+
+% Initialize head and foot:
+
+
+
+\pagestyle{headandfoot}
+
+\lhead{}
+\chead{}
+\rhead{}
+\lfoot{}
+\cfoot[]{Page \thepage}
+\rfoot{}
+
+
+
+
+%--------------------------------------------------------------------
+%--------------------------------------------------------------------
+
+% Headrules and footrules:
+
+\newif\if@headrule
+\newif\ifr@headrule
+
+\def\firstpageheadrule{\@headruletrue}
+\def\nofirstpageheadrule{\@headrulefalse}
+
+\def\runningheadrule{\r@headruletrue}
+\def\norunningheadrule{\r@headrulefalse}
+
+\def\headrule{\@headruletrue\r@headruletrue}
+\def\noheadrule{\@headrulefalse\r@headrulefalse}
+
+
+
+\newif\if@footrule
+\newif\ifr@footrule
+
+\def\firstpagefootrule{\@footruletrue}
+\def\nofirstpagefootrule{\@footrulefalse}
+
+\def\runningfootrule{\r@footruletrue}
+\def\norunningfootrule{\r@footrulefalse}
+
+\def\footrule{\@footruletrue\r@footruletrue}
+\def\nofootrule{\@footrulefalse\r@footrulefalse}
+
+
+
+% Initialize:
+
+\noheadrule
+\nofootrule
+
+
+
+%--------------------------------------------------------------------
+%--------------------------------------------------------------------
+
+% \numpages, \iflastpage and \oddeven
+
+% Make the number of pages available as the macro \numpages:
+\def\numpages{\pageref{@lastpage}}
+\let\@realenddocument=\enddocument
+\def\enddocument{\clearpage
+ \if@filesw
+ {\advance\c@page-1 \immediate\write\@mainaux
+ {\string\newlabel{@lastpage}{{}{\arabic{page}}}}%
+ }
+ \fi
+ \@realenddocument
+}
+
+
+% We define \iflastpage so that it can safely be used
+% in headers and footers:
+\def\iflastpage#1#2{%
+ \@ifundefined{r@@lastpage}{\def\@@lastpage{-1}}%
+ {\edef\@@lastpage{\expandafter\@cdr\r@@lastpage\@nil}}%
+ \ifnum\value{page}=\@@lastpage
+ #1%
+ \else
+ #2%
+ \fi
+}
+
+
+% The macro \oddeven takes two arguments. If the page number is odd,
+% then you get the first argument; otherwise, you get the second
+% argument.
+\def\oddeven#1#2{%
+ \ifodd\value{page}%
+ #1
+ \else
+ #2
+ \fi
+}
+
+
+
+
+
+
+
+%---------------------------------------------------------------------
+%
+% ***************************
+% ** QUESTION ENVIRONMENTS **
+% ***************************
+%
+%
+%
+% We define the command \part only inside of a parts environment,
+% so that we don't interfere with the meaning of the standard
+% article documentstyle command \part if that is used inside of a
+% questions environment. The commands \question and \subpart are
+% defined everywhere inside of a questions environment. (If the
+% user accidentally gives a \subpart command outside of a subparts
+% environment, then a warning will be printed, and the \subpart
+% command will be treated as either a \question command or a
+% \part command (depending on the current environment).
+
+
+
+
+% We use the counter name `partno' for the parts environment so that
+% we will not interfere with the counter `part' used by the article
+% document style.
+
+\@definecounter{question}
+\@definecounter{partno}
+\@definecounter{subpart}
+
+
+
+\newenvironment{questions}%
+ {\def\@queslevel{question}%
+ \def\question{\@checkqueslevel{question}\@doitem}%
+ \def\subpart{\@checkqueslevel{subpart}\@doitem}
+ \list{\thequestion.}%
+ {\usecounter{question}\def\makelabel##1{\hss\llap{##1}}%
+ \def\thequestion{\arabic{question}}%
+ \settowidth{\leftmargin}{10.\hskip\labelsep}
+ \labelwidth\leftmargin\advance\labelwidth-\labelsep
+ \partopsep=0pt
+ }%
+ }%
+ {\endlist}
+
+\newenvironment{parts}%
+ {\def\@queslevel{part}%
+ \def\part{\@checkqueslevel{part}\@doitem}
+ \list{(\thepartno)}%
+ {\usecounter{partno}\def\makelabel##1{\hss\llap{##1}}%
+ \def\thepartno{\alph{partno}}%
+ \settowidth{\leftmargin}{(m)\hskip\labelsep}
+ \labelwidth\leftmargin\advance\labelwidth-\labelsep
+ \topsep=0pt
+ \partopsep=0pt
+ }%
+ }%
+ {\endlist}
+
+\newenvironment{subparts}%
+ {\def\@queslevel{subpart}%
+ \list{\thesubpart.}%
+ {\usecounter{subpart}\def\makelabel##1{\hss\llap{##1}}%
+ \def\thesubpart{\roman{subpart}}%
+ \settowidth{\leftmargin}{vii.\hskip\labelsep}
+ \labelwidth\leftmargin\advance\labelwidth-\labelsep
+ \topsep=0pt
+ \partopsep=0pt
+ }%
+ }%
+ {\endlist}
+
+
+\def\@checkqueslevel#1{%
+ \begingroup
+ \def\@temp{#1}%
+ \ifx\@temp\@queslevel
+ % Everything's fine; do nothing.
+ \else
+ \@warning{I found a #1 where I expected to find a \@queslevel}
+ \fi
+ \endgroup
+}
+
+
+\def\@doitem{\@ifnextchar[{\@readpoints}{\item\@setpoints}}
+
+\def\@readpoints[#1]{%
+ \edef\@points{#1}%
+ \@placepointstrue
+ \item
+ \@setpoints
+}
+
+\def\@setpoints{%
+ % The \item command sets \everypar so that the first time we enter
+ % horizontal mode (which will cause \everypar to be added to the
+ % paragraph), the label (or labels, if, e.g., a \question begins
+ % with a parts environment) will be placed on the page, a couple
+ % of other bookkeeping chores are done, and then \everypar is
+ % set to the empty token string (so that none of this will be
+ % repeated for the following paragraphs).
+ %
+ % We check to see if there are points to be placed for this item.
+ % if so, we append either
+ % \llap{(\@points)\hskip\@totalleftmargin\hskip\marginpointssep}%
+ % \@placepointsfalse
+ % or
+ % (\@points\@pointname)\enspace\@placepointsfalse
+ % to \everypar, so that the number of points will be set whenever
+ % we first enter horizontal mode, and the flag to set points will
+ % be turned off. (Resetting the flag is put into \everypar so that
+ % if another \item is encounteres before we actually enter
+ % horizontal mode, we'll put this back into the new version of
+ % \everypar that will be created by that \item.)
+ \if@placepoints
+ \if@pointsinmargin
+ \everypar=\expandafter{\the\everypar
+ \llap{(\@points)\hskip\@totalleftmargin\hskip\marginpointssep}%
+ \@placepointsfalse}%
+ \else
+ \everypar=\expandafter{\the\everypar
+ (\@points\@pointname)\enspace\@placepointsfalse}%
+ \fi
+ \fi
+}% @setpoints
+
+\newif\if@placepoints
+\@placepointsfalse
+
+
+
+% If the user says \pointsinmargin, then the distance from
+% the right parentheses enclosing the points to the left margin
+% will be \marginpointssep:
+\newskip\marginpointssep
+\setlength{\marginpointssep}{5pt}
+
+\newif\if@pointsinmargin
+\def\pointsinmargin{\global\@pointsinmargintrue}
+\def\nopointsinmargin{\global\@pointsinmarginfalse}
+\@pointsinmarginfalse
+
+
+\def\pointname#1{\gdef\@pointname{#1}}
+% Initialize to leave a space, and then the word `points':
+\pointname{ points}
+
+
+
+%--------------------------------------------------------------------
+%--------------------------------------------------------------------
+
+% \uplevel and \fullwidth:
+
+% \uplevel is used to print text at the indentation level of the
+% enclosing environment. For example, to precede a question with
+% directions about how that question should be answered, you would
+% say \uplevel{Answer this question correctly.}
+%
+% \fullwidth is similar, but uses the full page of text on the page.
+
+\long\def\uplevel#1{%
+ \par\bigskip
+ \vbox{%
+ \advance\leftskip\@totalleftmargin
+ \advance\leftskip-\leftmargin
+ #1\par
+ }% vbox
+ \nobreak
+}
+
+\long\def\fullwidth#1{%
+ \par\bigskip
+ \vbox{%
+ \leftskip=0pt \rightskip=0pt
+ #1\par
+ }% vbox
+ \nobreak
+}
+
+%---------------------------------------------------------------------
+
+
+\endinput
+
+
+
+
+%---------------------------------------------------------------------
+%---------------------------------------------------------------------
+%---------------------------------------------------------------------
+%---------------------------------------------------------------------
+
diff --git a/obsolete/macros/latex209/contrib/exam/examdoc.dvi b/obsolete/macros/latex209/contrib/exam/examdoc.dvi
new file mode 100644
index 0000000000..4b7987fc95
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/exam/examdoc.dvi
Binary files differ
diff --git a/obsolete/macros/latex209/contrib/exam/examdoc.tex b/obsolete/macros/latex209/contrib/exam/examdoc.tex
new file mode 100644
index 0000000000..3ea8401ff9
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/exam/examdoc.tex
@@ -0,0 +1,1741 @@
+% examdoc.tex
+
+\documentstyle[12pt]{exam}
+
+%--------------------------------------------------------------------
+%---------------------------------------------------------------------
+\newenvironment{example}%
+ {\bigskip\filbreak
+ \subsubsection{Example:}
+ }%
+ {}
+
+
+\def\samplehead#1#2#3#4{%
+ \begin{trivlist}
+ \item[]
+ \leavevmode
+ \hbox to \textwidth{%
+ \rlap{\parbox[b]{\textwidth}{\raggedright#1\strut}}%
+ \hfil\parbox[b]{\textwidth}{\centering#2\strut}\hfil
+ \llap{\parbox[b]{\textwidth}{\raggedleft#3\strut}}%
+ }% hbox
+ #4
+ \end{trivlist}
+}
+
+\def\samplefoot#1#2#3#4{%
+ \begin{trivlist}
+ \item[]
+ \leavevmode
+ #1
+ \vskip 3pt
+
+ \hbox to \textwidth{%
+ \rlap{\parbox[t]{\textwidth}{\raggedright#2}}%
+ \hfil\parbox[t]{\textwidth}{\centering#3}\hfil
+ \llap{\parbox[t]{\textwidth}{\raggedleft#4}}%
+ }% hbox
+ \end{trivlist}
+}
+
+
+
+\makeatletter
+\@ifundefined{AmS}{\def\AmS{{\protect\the\textfont\tw@
+ A\kern-.1667em\lower.5ex\hbox{M}\kern-.125emS}}}
+ {}
+\makeatother
+
+
+%---------------------------------------------------------------------
+%---------------------------------------------------------------------
+%---------------------------------------------------------------------
+%---------------------------------------------------------------------
+
+\begin{document}
+
+\title{Using the exam document style}
+
+\author{Philip Hirschhorn\\
+Department of Mathematics\\
+Wellesley College\\
+Wellesley, MA 02181\\
+phirschhorn@wellesley.edu}
+
+\date{December 12, 1994}
+
+\maketitle
+
+\tableofcontents
+
+\section{Introduction}
+
+
+The file \verb"exam.sty" provides a document style that attempts to
+make it easier to prepare exams. Most of what's here can also be
+accomplished by using \verb"fancyheadings.sty", adjusting \LaTeX's
+page layout parameters (perhaps by using \verb"fullpage.sty") and
+making careful use of the \verb"list" environment, but \verb"exam.sty"
+tries to make all this as simple as possible.
+
+Specifically, \verb"exam.sty" sets the page layout so that there are
+one inch margins all around and provides commands that make it easy
+to format questions and create very flexible headers and footers. In
+particular:
+%
+\begin{itemize}
+\item The style will automatically format and number the questions,
+ parts of questions, and subparts of questions, while making it easy
+ to refer to specific questions by number in any special directions
+ you need to print on the exam.
+
+\item You can include the point value of each question (or part, or
+ subpart), with your choice of having the point values either at the
+ beginning of the text of the question or in the left margin.
+
+\item You can specify the header in three parts: The left head, the
+ center head, and the right head. The left head is left justified,
+ the center head is centered, and the right head is right justified,
+ and one or all of these can be omitted.
+
+\item The footer is also specified in three parts: Left justified,
+ centered, and right justified.
+
+\item The header and footer for the first page can be different from
+ the ones used on other pages.
+
+\item Both headers and footers can contain more than one line. To
+ accommodate headers and footers with many lines, simple commands are
+ provided to increase the parts of the page devoted to the header
+ and/or the footer, and these commands can give one amount of space
+ on the first page and a different amount of space on all other
+ pages.
+
+\item You can have a horizontal rule at the base of the header and/or
+ at the top of the footer.
+
+\item Macros are defined to allow you to state the total number of
+ pages in the exam and to change the header and/or footer that
+ appears on the {\em last\/} page of the exam.
+
+\end{itemize}
+
+%---------------------------------------------------------------------
+\section{The documentstyle command}
+
+To use the \verb"exam" document style, you should specify \verb"exam"
+as your main document style. For example, if you want to use
+12~point type, then your \verb"documentstyle" command should be
+%
+\begin{center}
+\verb"\documentstyle[12pt]{exam}"
+\end{center}
+%
+If you would also like to use some of the features of \AmS-\LaTeX,
+then you should use the command
+%
+\begin{center}
+\verb"\documentstyle[12pt,amstex]{exam}"
+\end{center}
+
+%---------------------------------------------------------------------
+\section{Questions}
+
+To type the questions in the exam, you use the \verb"questions"
+environment. Each question is then begun with the command
+\verb"\question", and the questions will be numbered automatically.
+
+For example, if you type
+%
+\begin{verbatim}
+\begin{questions}
+
+\question
+Why is there air?
+
+\question
+
+How much wood would a woodchuck chuck if a woodchuck could chuck
+wood?
+
+\question
+Compute $\displaystyle\int_0^1 x^2 \, dx$.
+\end{questions}
+\end{verbatim}
+%
+then you'll get
+%
+\begin{questions}
+
+\question
+Why is there air?
+
+\question
+
+How much wood would a woodchuck chuck if a woodchuck could chuck
+wood?
+
+\question
+Compute $\displaystyle\int_0^1 x^2 \, dx$.
+\end{questions}
+
+\bigskip
+
+As the above example illustrates, you can leave blank lines between
+the \verb"\question" command and the actual beginning of the
+question, or before the first \verb"\question" command in the
+environment, and they will be ignored.
+
+
+%---------------------------------------------------------------------
+\subsection{Questions with parts and subparts}
+
+If you want a question to have several parts, then you use the
+\verb"parts" environment. For example, if you type
+%
+\begin{verbatim}
+\begin{questions}
+\question
+Why is there air?
+
+\question
+What if there were no air?
+
+\begin{parts}
+\part
+Describe the effect on the balloon industry.
+
+\part
+Describe the effect on the aircraft industry.
+\end{parts}
+
+\question
+
+\begin{parts}
+\part
+Define the universe. Give three examples.
+
+\part
+If the universe were to end, how would you know?
+
+\end{parts}
+
+
+\end{questions}
+\end{verbatim}
+%
+then you'll get
+\begin{questions}
+\question
+Why is there air?
+
+\question
+What if there were no air?
+
+\begin{parts}
+\part
+Describe the effect on the balloon industry.
+
+\part
+Describe the effect on the aircraft industry.
+\end{parts}
+
+\question
+
+\begin{parts}
+\part
+Define the universe. Give three examples.
+
+\part
+If the universe were to end, how would you know?
+
+\end{parts}
+
+
+\end{questions}
+
+\bigskip
+
+The above example illustrates several things:
+%
+\begin{itemize}
+\item
+Parts of a question should be put into a \verb"parts" environment.
+
+\item
+If a question begins with a \verb"parts" environment, then the first
+part will appear on the same line with the question number.
+
+\item
+You can leave blank lines before and after the \verb"\part" command,
+and they will be ignored.
+\end{itemize}
+
+
+\bigskip
+
+There is also a \verb"subparts" environment, and it works just as you
+would expect. For example, if you type
+%
+\begin{verbatim}
+\begin{questions}
+\question
+This is the first question.
+
+\question
+This is the second question.
+
+\begin{parts}
+\part
+This is the first part.
+
+\part
+This is the second part.
+
+\begin{subparts}
+\subpart
+This is the first subpart.
+
+\subpart
+This is the second subpart.
+
+\subpart
+This is the third subpart.
+
+\end{subparts}
+
+\part
+This is the third part.
+
+\end{parts}
+
+\question
+\begin{parts}
+\part
+\begin{subparts}
+\subpart
+This is a subpart.
+
+\subpart
+This is another subpart.
+\end{subparts}
+\part
+This is another part.
+
+\end{parts}
+
+
+\end{questions}
+\end{verbatim}
+%
+then you'll get
+\begin{questions}
+\question
+This is the first question.
+
+\question
+This is the second question.
+
+\begin{parts}
+\part
+This is the first part.
+
+\part
+This is the second part.
+
+\begin{subparts}
+\subpart
+This is the first subpart.
+
+\subpart
+This is the second subpart.
+
+\subpart
+This is the third subpart.
+
+\end{subparts}
+
+\part
+This is the third part.
+
+\end{parts}
+
+\question
+\begin{parts}
+\part
+\begin{subparts}
+\subpart
+This is a subpart.
+
+\subpart
+This is another subpart.
+\end{subparts}
+\part
+This is another part.
+
+\end{parts}
+
+
+\end{questions}
+
+
+%---------------------------------------------------------------------
+\subsection{Point values for the questions}
+\label{sec:points}
+
+Each of the commands \verb"\question", \verb"\part" and
+\verb"\subpart" take an optional argument, which is the number of
+points for that question, part, or subpart. The default is that the
+point value will be inserted at the beginning of the question (or
+part, or subpart) in parentheses, but if you give the command
+\verb"\pointsinmargin", then the point values will be set in the left
+margin. For example, if you type
+%
+\begin{verbatim}
+\begin{questions}
+\question[20]
+Why is there air?
+
+
+\question
+What if there were no air?
+
+\begin{parts}
+\part[10]
+Describe the effect on the balloon industry.
+
+\part[10]
+Describe the effect on the aircraft industry.
+\end{parts}
+
+\end{questions}
+\end{verbatim}
+%
+then, with the default setup, you'll get
+\nopointsinmargin
+\begin{questions}
+\question[20]
+Why is there air?
+
+
+\question
+What if there were no air?
+
+\begin{parts}
+\part[10]
+Describe the effect on the balloon industry.
+
+\part[10]
+Describe the effect on the aircraft industry.
+\end{parts}
+
+\end{questions}
+\bigskip
+If you give the command \verb"\pointsinmargin", then the above input
+will produce instead
+\pointsinmargin
+\begin{questions}
+\question[20]
+Why is there air?
+
+
+\question
+What if there were no air?
+
+\begin{parts}
+\part[10]
+Describe the effect on the balloon industry.
+
+\part[10]
+Describe the effect on the aircraft industry.
+\end{parts}
+
+\end{questions}
+
+If you want to switch back and forth between the two formats during
+the exam, you can do so by giving the commands \verb"\pointsinmargin"
+and \verb"\nopointsinmargin" whenever you want to switch.
+%---------------------------------------------------------------------
+\subsubsection*{Using a substitute for the word ``points''}
+
+If you want the point value to be inserted at the beginning of the
+text of the question (i.e., using the default,
+\verb"\nopointsinmargin"), but you want to label it with some word
+other than ``points'', then you can change the word inserted by using
+the \verb"\pointname" command. If you give the command
+%
+\begin{center}
+\verb"\pointname{text}"
+\end{center}
+%
+then ``text'' will be inserted inside the parentheses immediately
+after the point value. For example, if you give the command
+%
+\begin{center}
+\verb"\pointname{\%}"
+\end{center}
+%
+and then type
+%
+\begin{verbatim}
+\question[25]
+Where, oh where, has my little dog gone?
+\end{verbatim}
+%
+then you'll get
+\pointname{\%}
+\nopointsinmargin
+%
+\begin{questions}
+\question[25]
+Where, oh where, has my little dog gone?
+\end{questions}
+%
+Using the default is equivalent to the command
+%
+\begin{center}
+\verb"\pointname{ points}"
+\end{center}
+%
+\pointname{ points}
+(Note that the space following the point value must be explicitly
+included.)
+
+%---------------------------------------------------------------------
+\subsubsection*{Questions that begin with a parts environment}
+One thing to keep in mind is that {\em only one point value can
+appear on a line, and it will be the last one to be placed there}.
+This matters only if a question begins with a parts environment, or
+if a part begins with a subparts environment. In either of these
+cases, the question number and part number (or the part number and
+subpart number) will appear on the same line, and if both of these
+commands include an optional point value, {\em only the last one
+given will be used}. For example, if you type
+%
+\begin{verbatim}
+\begin{questions}
+\question[10]
+\begin{parts}
+\part[5]
+This is the first part.
+
+\part[5]
+This is the second part.
+\end{parts}
+\end{questions}
+\end{verbatim}
+%
+then you'll get
+%
+\begin{questions}
+\question[10]
+\begin{parts}
+\part[5]
+This is the first part.
+
+\part[5]
+This is the second part.
+\end{parts}
+\end{questions}
+%
+Notice that the 10~points for the entire question are never mentioned
+anywhere, since they would have appeared on the same line with the
+5~points for the first part, and the 5~points for the part were
+placed later. This is true whether \verb"\pointsinmargin" or
+\verb"\nopointsinmargin" is in effect.
+
+
+
+%---------------------------------------------------------------------
+\subsection{Including special instructions for a group of questions}
+\label{sec:uplevel}
+
+There are two commands provided for including special instructions
+for specific questions: \verb"\uplevel" and \verb"\fullwidth". These
+commands allow you to give instructions that will be set with the
+left indentation appropriate for the scope of the instructions.
+
+For example, if you are inside of a parts environment, and you want
+to give directions for the next few parts, then those directions
+should be indented to the level of the question of which they are
+parts, i.e., up one level. If you type
+%
+\begin{verbatim}
+\begin{questions}
+\question
+This is the first question.
+
+\question
+\begin{parts}
+\part
+This is the first part.
+
+\uplevel{The following two parts should be answered in classical
+Greek:}
+\part
+This is the second part.
+
+\part
+This is the third part.
+
+\end{parts}
+\end{questions}
+\end{verbatim}
+%
+then you'll get
+\begin{questions}
+\question
+This is the first question.
+
+\question
+\begin{parts}
+\part
+This is the first part.
+
+\uplevel{The following two parts should be answered in classical
+Greek:}
+\part
+This is the second part.
+
+\part
+This is the third part.
+
+\end{parts}
+\end{questions}
+
+
+
+
+\bigskip
+If you want to give instructions for a group of questions, then the
+indenting for those instructions should be to the outer left margin,
+i.e., up one level. For example, if you type
+%
+\begin{verbatim}
+\begin{questions}
+\question
+Approximate $\displaystyle \int_0^1 \sin x^2 \, dx$ within $.001$ of
+its true value.
+
+\uplevel{Questions \ref{exact-start} through~\ref{exact-end} should
+be evaluated completely, not just approximated.}
+
+\question
+\label{exact-start}
+$\displaystyle \int_0^1 \frac{x^2 \, dx}{\sqrt{1-x^2}}$
+
+\question
+$\displaystyle \int_0^1 \frac{1}{1+x^2}\, dx$
+
+\question
+\label{exact-end}
+$\displaystyle \int_0^{\frac{\pi}{2}} \sin^3 x \cos x \, dx$
+\end{questions}
+\end{verbatim}
+%
+you'll get
+\begin{questions}
+\question
+Approximate $\displaystyle \int_0^1 \sin x^2 \, dx$ within $.001$ of
+its true value.
+
+\uplevel{Questions \ref{exact-start} through~\ref{exact-end} should
+be evaluated completely, not just approximated.}
+
+\question
+\label{exact-start}
+$\displaystyle \int_0^1 \frac{x^2 \, dx}{\sqrt{1-x^2}}$
+
+\question
+$\displaystyle \int_0^1 \frac{1}{1+x^2}\, dx$
+
+\question
+\label{exact-end}
+$\displaystyle \int_0^{\frac{\pi}{2}} \sin^3 x \cos x \, dx$
+\end{questions}
+
+
+
+
+
+
+\bigskip
+If you want to give instructions that use the full width of the page
+(rather than just going up one level of indentation), then use the
+\verb"\fullwidth" command. For example, if you type
+%
+\begin{verbatim}
+\begin{questions}
+\question
+This is the first question.
+
+\question
+\begin{parts}
+\part
+This is the first part.
+
+\part
+This is the second part.
+\begin{subparts}
+\subpart
+This is a subpart.
+
+\fullwidth{When you finish this exam, you should go back and
+reexamine your work, both on the earlier part of this exam and in
+your life up until the day of this exam, for any errors that you may
+have made.}
+
+\subpart
+This is another subpart.
+\end{subparts}
+\end{parts}
+\end{questions}
+\end{verbatim}
+%
+then you'll get
+\begin{questions}
+\question
+This is the first question.
+
+\question
+\begin{parts}
+\part
+This is the first part.
+
+\part
+This is the second part.
+\begin{subparts}
+\subpart
+This is a subpart.
+
+\fullwidth{When you finish this exam, you should go back and
+reexamine your work, both on the earlier part of this exam and in
+your life up until the day of this exam, for any errors that you may
+have made.}
+
+\subpart
+This is another subpart.
+\end{subparts}
+\end{parts}
+\end{questions}
+
+
+
+%---------------------------------------------------------------------
+\subsubsection*{Referring to specific questions by number}
+
+You can use the standard \LaTeX{} commands \verb"\label" and
+\verb"\ref" to refer to questions (or parts, or subparts) by number.
+For example, if you type
+%
+\begin{verbatim}
+The first question is question number~\ref{ques:first}, but it's
+question number~\ref{ques:second} that has both a good part
+(part~\ref{part:good}) and a bad part (part~\ref{part:bad}).
+
+\begin{questions}
+\question
+\label{ques:first}
+This is the first question.
+
+\question
+\label{ques:second}
+\begin{parts}
+\part
+\label{part:good}
+This is the good part.
+
+\part
+\lable{part:bad}
+This is the {\em bad\/} part.
+\end{parts}
+
+\question
+Is there a question?
+\end{questions}
+\end{verbatim}
+%
+then you'll get:
+
+\medskip
+
+The first question is question number~\ref{ques:first}, but it's
+question number~\ref{ques:second} that has both a good part
+(part~\ref{part:good}) and a bad part (part~\ref{part:bad}).
+
+\begin{questions}
+\question
+\label{ques:first}
+This is the first question.
+
+\question
+\label{ques:second}
+\begin{parts}
+\part
+\label{part:good}
+This is the good part.
+
+\part
+\label{part:bad}
+This is the {\em bad\/} part.
+\end{parts}
+
+\question
+Is there a question?
+\end{questions}
+
+
+
+\bigskip
+
+As with all other cross references in \LaTeX, you'll have to run your
+file through \LaTeX{} {\em twice\/} to be sure that all the cross
+references are correct.
+
+
+
+%---------------------------------------------------------------------
+\subsection{Naming the parts of a long exam}
+
+There are two ways of naming the parts of a long exam. The first way
+uses the \verb"\uplevel" and \verb"\fullwidth" commands (see
+section~\ref{sec:uplevel}), and the other way uses the standard
+\verb"\part" and \verb"\section" commands.
+
+
+
+
+\subsubsection*{Using {\tt fullwidth} and {\tt uplevel}}
+
+To place a section name in the exam, just use a \verb"\fullwidth"
+command (see section~\ref{sec:uplevel}) and include whatever font
+changing commands that you want to use. For example, if you type
+%
+\begin{verbatim}
+\begin{questions}
+\question
+This is a question in the non-essay part of the exam.
+
+\fullwidth{\Large\bf Essay questions}
+
+\question
+Explain how the cooling of matter in the centuries following the big
+bang has influenced the British parliamentary system of government.
+
+\fullwidth{\Large\bf Laboratory questions}
+
+\question
+In the cabinet below your laboratory bench you will find a single
+edged razor blade, several C-clamps, and a bottle of whiskey. Remove
+your appendix. Do not suture until your work has been inspected.
+\end{questions}
+\end{verbatim}
+%
+then you'll get
+%
+\begin{questions}
+\question
+This is a question in the non-essay part of the exam.
+
+\fullwidth{\Large\bf Essay questions}
+
+\question
+Explain how the cooling of matter in the centuries following the big
+bang has influenced the British parliamentary system of government.
+
+\fullwidth{\Large\bf Laboratory questions}
+
+\question
+In the cabinet below your laboratory bench you will find a single
+edged razor blade, several C-clamps, and a bottle of whiskey. Remove
+your appendix. Do not suture until your work has been inspected.
+\end{questions}
+
+
+
+
+
+
+\subsubsection*{Using the standard sectioning commands}
+
+The exam document style is built upon the standard article document
+style, and so the sectioning commands used with the article document
+style can be used here as well. In particular, you can give the
+commands \verb"\part", \verb"\part*", \verb"\section", and
+\verb"\section*". The definitions made in \verb"exam.sty" ensure
+that if a \verb"\part" command appears {\em outside of a parts
+environment} it will be interpreted as a sectioning command, while if
+it appears {\em inside\/} of a parts environment, it will be
+interpreted as beginning a new part of a question.
+
+
+
+You can give these commands in the middle of a questions environment
+so as not to interrupt the numbering of the questions, or you can end
+a questions environment, give a sectioning command, and then start a
+new questions environment (which would reset the question counter
+to start again with number~1). If you give any of these commands
+while inside of a questions environment, then the section titles will
+be indented to the same extent that questions are indented, unless
+they are given as the argument of a \verb"\fullwidth" or
+\verb"\uplevel" command. These
+commands have the advantage, however, that the unstarred versions
+provide automatic numbering of the parts (or sections).
+%---------------------------------------------------------------------
+\subsection{Leaving space for the answers}
+
+To leave a specific amount of blank space on the page for the answer
+to a question, you should use the \verb"\vspace*" command. For
+example, the command \verb"\vspace*{1in}" inserts one inch of vertical
+space after the line in which it appears. (If it appears in between
+paragraphs, then it inserts the space right there.) You can also use
+the \verb"\vspace" command, the difference being that any space
+inserted by \verb"\vspace" will be deleted if it occurs at the top
+of a new page, whereas space inserted by \verb"\vspace*" will never
+be deleted.
+
+If you want to equally distribute the blank space among the questions
+on the page, then just put \verb"\vspace*{\fill}" after each question
+on the page and use \verb"\newpage" to end the page.
+
+%--------------------------------------------------------------------
+\subsection{Changing the page size}
+\label{sec:pagesize}
+
+The exam document style arranges things so that if you print onto
+standard American letter size paper (8.5~inches wide by 11~inches
+high) you'll get one inch margins at the top, bottom and
+sides. If you want to change the size of these margins (or if you're
+printing onto some other size paper), commands are provided to change
+the size of the printed area.
+
+To change the width of the printed area, you would use the
+\verb"\extrawidth" command. The \verb"\extrawidth" command takes one
+argument and enlarges the width of the printed area by the amount of
+the argument. It keeps the printed area centered as it changes its
+width. If the argument is negative, then the width of the printed
+area is decreased.
+
+For example, to enlarge the left and right margins by one half inch
+each, you would use the command
+\begin{center}
+ \verb"\extrawidth{-1in}"
+\end{center}
+since the printed region must shrink by one inch to allow an
+additional one half inch on both sides. To decrease the left and
+right margins to three quarters of an inch each, you would use the
+command
+\begin{center}
+ \verb"\extrawidth{.5in}"
+\end{center}
+since the printed region must grow by one half inch to decrease both
+margins by one quarter of an inch.
+
+To change the height of the printed area, you must choose whether the
+top or the bottom of the printed area (or possibly both) should move.
+The commands for this are principally intended to allow additional
+room for large headers and footers, and so they are called
+\verb"\extraheadheight" and \verb"\extrafootheight". For a full
+description of these commands, see section~\ref{sec:extra-room}.
+
+To move the top of the printed region (and any header that's present)
+downwards, you use the command \verb"\extraheadheight". This command
+takes one argument and moves the top of the text and the header down
+by this amount (keeping the distance between header and text
+constant). Thus, to increase the top margin by three quarters of an
+inch, you would give the command
+\begin{center}
+ \verb"\extraheadheight{.75in}"
+\end{center}
+To decrease the top margin by one half inch, you would give the
+command
+\begin{center}
+ \verb"\extraheadheight{-.5in}"
+\end{center}
+The \verb"\extraheadheight" command takes an optional argument to
+provide a top margin on the first page that's different from that on
+all other pages. For an explanation of this, see
+section~\ref{sec:extra-room}.
+
+
+To move the bottom of the printed region (and any footer that's
+present) upwards, you use the command \verb"\extrafootheight". This
+command takes one argument, and moves the bottom of the text and the
+footer up by this amount (keeping the distance between footer and text
+constant). Thus, to increase the bottom margin by three quarters of an
+inch, you would give the command
+\begin{center}
+ \verb"\extrafootheight{.75in}"
+\end{center}
+To decrease the bottom margin by one half inch, you would give the
+command
+\begin{center}
+ \verb"\extrafootheight{-.5in}"
+\end{center}
+The \verb"\extrafootheight" command takes an optional argument to
+provide a bottom margin on the first page that's different from that
+on all other pages. For an explanation of this, see
+section~\ref{sec:extra-room}.
+
+
+
+%--------------------------------------------------------------------
+%---------------------------------------------------------------------
+\section{Headers and footers}
+
+
+The following sections explain all of the technicalities of the
+commands that deal with headers and footers. There are a number of
+things to explain here, and so you may find it easier to skip this
+section and instead look at the examples in
+sections~\ref{sec:beginexamples} through~\ref{sec:endexamples} (on
+pages~\pageref{sec:beginexamples} through~\pageref{sec:endexamples}).
+You can then refer back to the technical sections for the full story
+on whatever isn't clear from the examples.
+
+%---------------------------------------------------------------------
+\subsection{Page styles: Headers and/or footers}
+
+It's the \verb"\pagestyle" command that determines whether the exam
+will have headers, footers, both, or neither. The contents of the
+header and footer are specified using the commands described in
+sections~\ref{sec:header} through~\ref{sec:rules}, but it's the
+\verb"\pagestyle" command that determines whether the header and
+footer that you construct will actually be placed onto the page. The
+\verb"\pagestyle" command should be given after the
+\verb"\documentstyle" command, and before the \verb"\begin{document}".
+
+To have both a header and a footer, give the command
+%
+\begin{center}
+\verb"\pagestyle{headandfoot}"
+\end{center}
+%
+If you want every page to have a header but no footer, give the
+command
+%
+\begin{center}
+\verb"\pagestyle{head}"
+\end{center}
+%
+To give every page a foot but no head, give the command
+%
+\begin{center}
+\verb"\pagestyle{foot}"
+\end{center}
+%
+Finally, to omit both the header and the footer from the page, give
+the command
+%
+\begin{center}
+\verb"\pagestyle{empty}"
+\end{center}
+
+
+\bigskip
+
+
+As is true in all \LaTeX{} document styles, you can change the page
+style used on a single page by giving the command
+%
+\begin{center}
+\verb"\thispagestyle{somestyle}"
+\end{center}
+%
+somewhere on that page (where \verb"somestyle" is the style that you
+want to use on that page). This is most often needed if you use the
+\verb"\maketitle" command, since that command inserts a
+\verb"\thispagestyle{plain}" immediately following the title. If you
+use the \verb"\maketitle" command and you want the entire document to
+use \verb"\pagestyle{headandfoot}", then you'll need to put the
+command \verb"\thispagestyle{headandfoot}" immediately after the
+\verb"\maketitle" command to override the \verb"\thispagestyle{plain}"
+that is inserted by \verb"\maketitle".
+
+
+%---------------------------------------------------------------------
+\subsection{The three parts of the header}
+\label{sec:header}
+The header is specified in three parts:
+%
+\begin{itemize}
+\item
+One part to be left justified.
+
+\item
+One part to be centered.
+
+\item
+One part to be right justified.
+\end{itemize}
+%
+There are two different ways in which you can specify the three parts
+of the header. The first uses the commands \verb"\lhead",
+\verb"\chead", and \verb"\rhead", each of which takes an optional
+argument to specify a different header for the first page (see
+section~\ref{sec:lhead}). The second uses the single command
+\verb"\header" to specify all three parts of the header, or the
+commands \verb"\firstpageheader" and \verb"\runningheader" to specify
+a different header for the first page (see
+section~\ref{sec:runningheader}).
+
+
+%--------------------------------------------------------------------
+\subsubsection{Using lhead, chead and rhead}
+\label{sec:lhead}
+
+The command \verb"\lhead{Text}" puts ``Text'' into the left justified
+part of the header on every page. The command \verb"\lhead[Text
+1]{Text 2}" puts ``Text~1'' into the left justified header on the
+first page and ``Text~2'' into the left justified header on all other
+pages. The commands \verb"\chead" and \verb"\rhead" have similar
+effects on the centered and right justified parts of the header.
+
+
+For example, to put the header
+\samplehead{Math 115}{Second Exam}{July 4, 1776}{}
+on every page of the exam, you would give the commands
+%
+\begin{verbatim}
+\lhead{Math 115}
+\chead{Second Exam}
+\rhead{July 4, 1776}
+\end{verbatim}
+
+If you want any of the three parts to have a special version to be
+used only on the first page, then you just include that special
+version as an optional argument (enclosed in square brackets) to the
+command. For example, if you want the above header for the first
+page, but on all pages after the first you want to have the header
+\samplehead{Math 115}{Second Exam (Continued)}{July 4, 1776}{}
+then you would give the commands
+%
+\begin{verbatim}
+\lhead{Math 115}
+\chead[Second Exam]{Second Exam (Continued)}
+\rhead{July 4, 1776}
+\end{verbatim}
+
+
+You can leave one or more of the three parts empty. To have the
+header
+\samplehead{Math 115}{Second Exam}{July 4, 1776}{}
+on the first page, with the header
+\samplehead{Math 115}{}{Second Exam (Continued)}{}
+on all other pages, you would give the commands
+%
+\begin{verbatim}
+\pagestyle{headandfoot}
+\lhead{Math 115}
+\chead[Second Exam]{}
+\rhead[July 4, 1776]{Second Exam Continued)}
+\end{verbatim}
+%
+
+Any of the three parts of the header can have multiple lines. To
+specify where the line breaks should go, you just type \verb"\\".
+Thus, to have the header
+\samplehead{\bf\large Math 115\\Professor Hilbert}{}
+ {\bf\large First Exam\\July 4, 1776}{}
+appear on every page, you would give the commands
+%
+\begin{verbatim}
+\lhead{\bf\large Math 115\\Professor Hilbert}
+\chead{}
+\rhead{\bf\large First Exam\\July 4, 1776}
+\end{verbatim}
+
+%--------------------------------------------------------------------
+\subsubsection{Using header, firstpageheader and runningheader}
+\label{sec:runningheader}
+
+
+The command \verb"\header{Text 1}{Text 2}{Text 3}" puts ``Text~1''
+into the left justified header, ``Text~2'' into the centered header
+and ``Text~3'' into the right justified header on every page. If you
+want the header on the first page to be different from that on the
+other pages, then you should use the commands \verb"\firstpageheader"
+and \verb"\runningheader", which also take three arguments and affect
+either the first page or all pages except the first.
+
+
+For example, to put the header
+\samplehead{Math 115}{Second Exam}{July 4, 1776}{}
+on every page of the exam, you would give the command
+%
+\begin{verbatim}
+\header{Math 115}{Second Exam}{July 4, 1776}
+\end{verbatim}
+
+If you want to have different header on the first page from the header
+on all other pages, you would use the commands \verb"\firstpageheader"
+and \verb"\runningheader" instead of \verb"\header".
+For example, if you want the above header for the first
+page, but on all pages after the first you want to have the header
+\samplehead{Math 115}{Second Exam (Continued)}{July 4, 1776}{}
+then you would give the commands
+%
+\begin{verbatim}
+\firstpageheader{Math 115}{Second Exam}{July 4, 1776}
+\runningheader{Math 115}{Second Exam (Continued)}{July 4, 1776}
+\end{verbatim}
+
+
+You can leave one or more of the three parts empty. To have the
+header
+\samplehead{Math 115}{Second Exam}{July 4, 1776}{}
+on the first page, with the header
+\samplehead{Math 115}{}{Second Exam (Continued)}{}
+on all other pages, you would give the commands
+%
+\begin{verbatim}
+\firstpageheader{Math 115}{Second Exam}{July 4, 1776}
+\runningheader{Math 115}{}{Second Exam (Continued)}
+\end{verbatim}
+%
+
+Any of the three parts of the header can have multiple lines. To
+specify where the line breaks should go, you just type \verb"\\".
+Thus, to have the header
+\samplehead{\bf\large Math 115\\Professor Hilbert}{}
+ {\bf\large First Exam\\July 4, 1776}{}
+appear on every page, you would give the command
+%
+\begin{verbatim}
+\header{\bf\large Math 115\\Professor Hilbert}%
+ {}%
+ {\bf\large First Exam\\July 4, 1776}
+\end{verbatim}
+
+%---------------------------------------------------------------------
+\subsubsection*{Leaving extra room for multiple line headers}
+
+See section~\ref{sec:extra-room} for a description of the
+\verb"\extraheadheight" command.
+
+
+%---------------------------------------------------------------------
+
+\subsection{The three parts of the footer}
+\label{sec:footer}
+
+The footer is composed of three parts, the whole setup being similar
+to that for the header (see section~\ref{sec:header}). There are two
+different ways in which you can specify the three parts of the footer.
+The first uses the commands \verb"\lfoot", \verb"\cfoot", and
+\verb"\rfoot", each of which takes an optional argument to specify a
+different footer for the first page (see section~\ref{sec:lfoot}). The
+second uses the single command \verb"\footer" to specify all three
+parts of the footer, or the commands \verb"\firstpagefooter" and
+\verb"\runningfooter" to specify a different footer for the first page
+(see section~\ref{sec:runningfooter}).
+
+
+
+
+
+%--------------------------------------------------------------------
+\subsubsection{Using lfoot, cfoot and rfoot}
+\label{sec:lfoot}
+
+The command \verb"\lfoot{Text}" puts ``Text'' into the left justified
+part of the footer on every page. The command
+\verb"\lfoot[Text 1]{Text 2}" puts ``Text~1'' into the left justified
+footer on the first page and ``Text~2'' into the left justified footer
+on all other pages. The commands \verb"\cfoot" and \verb"\rfoot" have
+similar effects on the centered and right justified parts of the
+footer.
+
+
+For example, to have an empty footer on the first page and the footer
+\samplefoot{}{}{Page 3 of 5}{}
+on all pages after the first, you would give the commands
+%
+\begin{verbatim}
+\lfoot{}
+\cfoot{}
+\rfoot[]{Page \thepage\ of \numpages}
+\end{verbatim}
+%
+(For an explanation of the \verb"\numpages" command, see
+section~\ref{sec:numpages}.)
+
+%--------------------------------------------------------------------
+
+\subsubsection{Using footer, firstpagefooter and runningfooter}
+\label{sec:runningfooter}
+
+The command \verb"\footer{Text 1}{Text 2}{Text 3}" puts ``Text~1''
+into the left justified footer, ``Text~2'' into the centered footer
+and ``Text~3'' into the right justified footer on every page. If you
+want the footer on the first page to be different from that on the
+other pages, then you should use the commands \verb"\firstpagefooter"
+and \verb"\runningfooter", which also take three arguments and affect
+either the first page or all pages except the first.
+
+
+For example, to have an empty footer on the first page and the footer
+\samplefoot{}{}{Page 3 of 5}{}
+on all pages after the first, you would give the commands
+%
+\begin{verbatim}
+\firstpagefooter{}{}{}
+\runningfooter{}{Page \thepage\ of \numpages}{}
+\end{verbatim}
+%
+(For an explanation of the \verb"\numpages" command, see
+section~\ref{sec:numpages}.)
+
+
+%---------------------------------------------------------------------
+\subsubsection*{Leaving extra room for multiple line footers}
+
+See section~\ref{sec:extra-room} for a description of the
+\verb"\extrafootheight" command.
+
+
+
+
+%---------------------------------------------------------------------
+\subsection{Leaving extra room for multiple line headers and footers}
+\label{sec:extra-room}
+
+\subsubsection*{Headers}
+If you specify more than one or two lines for any part of the header,
+then you may want to move the header down slightly so that it doesn't
+run off of the top of the paper. The command for this is
+\verb"\extraheadheight". You can also use the \verb"\extraheadheight"
+command to adjust the size of the text area. The
+\verb"\extraheadheight" command never changes the distance between the
+header and the text.
+
+For example, to move the header and the text a half inch
+down from the top of the page, you would give the command
+%
+\begin{center}
+\verb"\extraheadheight{.5in}"
+\end{center}
+%
+You can also specify a negative distance to \verb"extraheadheight" to
+move the header up closer to the top of the paper. For example, the
+command
+%
+\begin{center}
+\verb"\extraheadheight{-.25in}"
+\end{center}
+%
+moves the header one quarter inch closer to the top of the paper.
+
+If you want to have a different value for \verb"\extraheadheight" on
+the first page from that on the pages after the first, then use the
+same syntax as in the \verb"\lhead", \verb"\chead", and \verb"\rhead"
+commands: Include an optional argument giving the extra head height
+for the first page, and the required argument will apply only to
+those pages after the first. For example, the command
+%
+\begin{center}
+\verb"\extraheadheight[.5in]{.25in}"
+\end{center}
+%
+gives a half inch of extra head height on the first page and a
+quarter inch of extra head height on all pages after the first.
+If you say
+%
+\begin{center}
+\verb"\extraheadheight[.5in]{}"
+\end{center}
+%
+then this will be interpreted as if it was
+%
+\begin{center}
+\verb"\extraheadheight[.5in]{0in}"
+\end{center}
+%
+Note that the braces {\em must\/} appear.
+
+
+If you give an \verb"\extraheadheight" command, it should be after the
+\verb"\documentstyle" command but before the \verb"\begin{document}"
+command. The \verb"\extraheadheight" command can also be used to
+change the size of the text region (see section~\ref{sec:pagesize}).
+
+
+
+
+\subsubsection*{Footers}
+To leave extra room for multiple line footers, you use the command
+\verb"\extrafootheight". Thus, to move the footer one half inch
+higher up on the paper, you would give the command
+%
+\begin{center}
+\verb"\extrafootheight{.5in}"
+\end{center}
+%
+If you wanted to move the footer an eighth of an inch lower down on
+the paper, you would give the command
+%
+\begin{center}
+\verb"\extrafootheight{-.125in}"
+\end{center}
+
+If you want to have a different value for \verb"\extrafootheight" on
+the first page from that on the pages after the first, then use the
+same syntax as in the \verb"\lfoot", \verb"\cfoot", and \verb"\rfoot"
+commands: Include an optional argument giving the extra foot height
+for the first page, and the required argument will apply only to
+those pages after the first. For example, the command
+%
+\begin{center}
+\verb"\extrafootheight[.5in]{.25in}"
+\end{center}
+%
+gives a half inch of extra foot height on the first page and a
+quarter inch of extra foot height on all pages after the first.
+If you say
+%
+\begin{center}
+\verb"\extrafootheight[.5in]{}"
+\end{center}
+%
+then this will be interpreted as if it was
+%
+\begin{center}
+\verb"\extrafootheight[.5in]{0in}"
+\end{center}
+%
+Note that the braces {\em must\/} appear.
+
+
+If you give an \verb"\extrafootheight" command, it should be after the
+\verb"\documentstyle" command but before the \verb"\begin{document}"
+command. The \verb"\extrafootheight" command can also be used to
+change the size of the text region (see section~\ref{sec:pagesize}).
+
+
+
+
+
+
+%---------------------------------------------------------------------
+\subsection{Horizontal rules}
+\label{sec:rules}
+
+The \verb"exam" document style make it easy to put a horizontal rule
+under the header and one above the footer. It is also easy to do
+this for the pages after the first page without affecting the first
+page.
+
+\begin{itemize}
+\item
+The command \verb"\runningheadrule" puts a horizontal rule below the
+header on all pages after the first.
+
+\item
+The command
+\verb"\firstpageheadrule" puts a rule under the header of only the
+first page.
+
+\item
+The command \verb"\headrule" is equivalent to the two
+commands \verb"\firstpageheadrule" and \verb"\runningheadrule".
+
+\item
+The command \verb"\runningfootrule" puts a horizontal rule above the
+footer on all pages after the first.
+
+\item
+The command
+\verb"\firstpagefootrule" puts a rule above the footer of only the
+first page.
+
+\item
+The command \verb"\footrule" is equivalent to the two
+commands \verb"\firstpagefootrule" and \verb"\runningfootrule".
+
+\end{itemize}
+%
+For example, to have the header
+\samplehead{Math 115}{First Exam}{July 4, 1776}{}
+on the first page, with the header
+\samplehead{Math 115}{First Exam}{July 4, 1776}{\hrule}
+on all pages after the first, give the commands
+%
+\begin{verbatim}
+\runningheadrule
+\lhead{Math 115}
+\chead{First Exam}
+\rhead{July 4, 1776}
+\end{verbatim}
+
+
+\bigskip
+
+To have no footer on the first page, and the footer
+\samplefoot{\hrule}{}{Page 3 of 5}{}
+on all pages after the first, you would give the commands
+%
+\begin{verbatim}
+\runningfootrule
+\lfoot{}
+\cfoot[]{Page \thepage\ of \numpages}
+\rfoot{}
+\end{verbatim}
+
+
+
+
+
+
+%---------------------------------------------------------------------
+\subsection{Listing the number of pages in the exam}
+\label{sec:numpages}
+
+The \verb"exam" document style defines the command \verb"\numpages"
+so that it will expand to the number of pages in the exam. Thus, to
+have the footer
+\samplefoot{}{}{Page \thepage\ of \numpages}{}
+you should give the commands
+%
+\begin{verbatim}
+\lfoot{}
+\cfoot{Page \thepage\ of \numpages}
+\rfoot{}
+\end{verbatim}
+%
+For a description of the commands \verb"\lfoot", \verb"\cfoot", and
+\verb"\rfoot", see section~\ref{sec:footer}.
+
+As with all other cross referencing commands in \LaTeX, you'll have to
+run the file through \LaTeX{} {\em twice\/} to be sure that
+\verb"\numpages" is correct.
+
+%---------------------------------------------------------------------
+\subsection{Testing for the last page}
+\label{sec:lastpage}
+
+If you want to vary the text that appears in the header or footer on
+the last page of the exam, you should use the command
+\verb"\iflastpage". The command
+%
+\begin{center}
+\verb"\iflastpage{Text 1}{Text 2}"
+\end{center}
+%
+expands to `Text~1' on the last page, and to `Text~2' on all
+pages before the last. Thus, to have the footer
+\samplefoot{}{}{Please go on to the next page\ldots}{}
+on all pages before the last page, and the footer
+\samplefoot{}{}{End of exam}{}
+on the last page, you would give the commands
+%
+\begin{verbatim}
+\lfoot{}
+\cfoot{\iflastpage{End of exam}{Please go on to the next page\ldots}}
+\rfoot{}
+\end{verbatim}
+%
+For a description of the commands \verb"\lfoot", \verb"\cfoot", and
+\verb"\rfoot", see section~\ref{sec:footer}.
+
+As with all other cross referencing commands in \LaTeX, you'll have to
+run the file through \LaTeX{} {\em twice\/} to be sure that
+\verb"\iflastpage" correctly detects the last page.
+
+%--------------------------------------------------------------------
+\subsection{Treating odd and even numbered pages differently}
+
+If you'd like odd and even numbered pages to be treated differently
+(perhaps because you'll be printing onto both sides of the paper), you
+should use the \verb"\oddeven" command.
+
+The \verb"\oddeven" command takes two arguments. If the current page
+number is odd it expands to the first argument; otherwise, it expands
+to the second argument.
+
+For example, to have the page number printed in the right head on odd
+numbered pages and in the left head on even numbered pages, you would
+use the commands
+\begin{center}
+\begin{verbatim}
+\rhead{\oddeven{\thepage}{}}
+\lhead{\oddeven{}{\thepage}}
+\chead{}
+\end{verbatim}
+\end{center}
+If you wanted the footer of the even numbered pages to be empty and
+the footer of the odd numbered pages to contain the message ``Please
+continue\dots'', except that the last page of the exam should have an empty
+footer whether its page number is even or odd, then you would use the
+commands
+\begin{center}
+\begin{verbatim}
+\lfoot{}
+\rfoot{}
+\cfoot{\oddeven{\iflastpage{}{Please continue\dots}}{}}
+\end{verbatim}
+\end{center}
+(see section~\ref{sec:lastpage} for an explanation of
+\verb"\iflastpage").
+
+Although the \verb"\oddeven" command can be used anywhere in the
+document (i.e., not just in headers and footers), it is reliable only
+in headers and footers. This is because \LaTeX{} generally processes
+more text than can fit on the current page before it outputs a page.
+When the \verb"\oddeven" command is encountered it will act as though
+it will appear on the current page whether it appears on that page or
+on the following page.
+
+%--------------------------------------------------------------------
+\subsection{Examples}
+
+\begin{example}
+\label{sec:beginexamples}
+To have the header
+\samplehead{Math 115}{First Exam}{July 4, 1776}{}
+on the first page, the header
+\samplehead{Math 115}{First Exam, Page 2 of 5}{July 4, 1776}{\hrule}
+on all pages after the first, and no footer on any page, give the
+commands
+%
+\begin{verbatim}
+\pagestyle{head}
+\runningheadrule
+\lhead{Math 115}
+\chead[First Exam]{First Exam, Page \thepage\ of \numpages}
+\rhead{July 4, 1776}
+\end{verbatim}
+%
+Alternatively, you could give the commands
+%
+\begin{verbatim}
+\pagestyle{head}
+\runningheadrule
+\firstpageheader{Math 115}{First Exam}{July 4, 1776}
+\runningheader{Math 115}%
+ {First Exam, Page \thepage\ of \numpages}%
+ {July 4, 1776}
+\end{verbatim}
+%
+\end{example}
+
+
+\begin{example}
+To have the header
+\samplehead{\large\bf Mathematics 115\\
+ First Exam, July 4, 1776}%
+ {}{\large\bf Name:\enspace\hbox to 2in{\hrulefill}}{}
+on the first page, the header
+\samplehead{\large\bf Mathematics 115\\
+ First Exam, July 4, 1776}%
+ {}{}{}
+on all pages after the first, an empty foot on the first page, and
+the footer
+\samplefoot{}{}{Page 2}{}
+on all pages after the first, give the commands
+%
+\begin{verbatim}
+\pagestyle{headandfoot}
+\lhead{\large\bf Mathematics 115\\ First Exam, July 4, 1776}
+\chead{}
+\rhead[\large\bf Name:\enspace\hbox to 2in{\hrulefill}]{}
+\lfoot{}
+\cfoot[]{Page \thepage}
+\rfoot{}
+\end{verbatim}
+%
+Alternatively, you could give the commands
+\begin{verbatim}
+\pagestyle{headandfoot}
+\firstpageheader{\large\bf Mathematics 115\\
+ First Exam, July 4, 1776}%
+ {}{\large\bf Name:\enspace\hbox to 2in{\hrulefill}}
+\runningheader{\large\bf Mathematics 115\\
+ First Exam, July 4, 1776}{}{}
+\firstpagefooter{}{}{}
+\runningfooter{}{Page \thepage}{}
+\end{verbatim}
+\end{example}
+
+\begin{example}
+To have the header
+\samplehead{}{Wellesley College\\
+ Second Semester Final Examination, Spring 1993\\
+ Mathematics 115}{}{}
+on the first page, the header
+\samplehead{}{Wellesley College\\
+ Second Semester Final Examination, Spring 1993\\
+ Mathematics 115 (Continued)}{}{}
+on all pages after the first, the footer
+\samplefoot{}{}{Page 3 of 10}{Please go on to the next page\ldots}
+on all pages {\em except the last\/} page, and the footer
+\samplefoot{}{}{Page 10 of 10}{End of exam.}
+on the last page, give the commands
+%
+\begin{verbatim}
+\pagestyle{headandfoot}
+\extraheadheight{.25in}
+\lhead{}
+\chead[Wellesley College\\
+ Second Semester Final Examination, Spring 1993\\
+ Mathematics 115]
+ {Wellesley College\\
+ Second Semester Final Examination, Spring 1993\\
+ Mathematics 115 (Continued)}
+\rhead{}
+\lfoot{}
+\cfoot{Page \thepage\ of \numpages}
+\rfoot{\iflastpage{End of exam.}{Please go on to the next page\ldots}}
+\end{verbatim}
+%
+Alternatively, you could give the commands
+\begin{verbatim}
+\pagestyle{headandfoot}
+\extraheadheight{.25in}
+\firstpageheader{}{Wellesley College\\
+ Second Semester Final Examination, Spring 1993\\
+ Mathematics 115}{}
+\runningheader{}{Wellesley College\\
+ Second Semester Final Examination, Spring 1993\\
+ Mathematics 115 (Continued)}{}
+\footer{}{Page \thepage\ of \numpages}%
+ {\iflastpage{End of exam.}{Please go on to the next page\ldots}}
+\end{verbatim}
+
+\end{example}
+
+\begin{example}
+\label{sec:endexamples}
+To have the header
+\samplehead{Math 115}{First Exam}{July 4, 1776}{}
+on the first page, no header on the pages after the first, no footer
+on the first page, and the footer
+\samplefoot{\hrule}{Math 115}{First Exam}{Page 2 of 5}
+on all pages after the first, give the commands
+%
+\begin{verbatim}
+\pagestyle{headandfoot}
+\runningfootrule
+\lhead[Math 115]{}
+\chead[First Exam]{}
+\rhead[July 4, 1776]{}
+\lfoot[]{Math 115}
+\cfoot[]{First Exam}
+\rfoot[]{Page \thepage\ of \numpages}
+\end{verbatim}
+%
+Alternatively, you could give the commands
+\begin{verbatim}
+\pagestyle{headandfoot}
+\runningfootrule
+\firstpageheader{Math 115}{First Exam}{July 4, 1776}
+\runningheader{}{}{}
+\firstpagefooter{}{}{}
+\runningfooter{Math 115}{First Exam}{Page \thepage\ of \numpages}
+\end{verbatim}
+%
+\end{example}
+%--------------------------------------------------------------------
+
+
+\end{document}
diff --git a/obsolete/macros/latex209/contrib/fac/fac.sty b/obsolete/macros/latex209/contrib/fac/fac.sty
new file mode 100644
index 0000000000..f3b653a7e7
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/fac/fac.sty
@@ -0,0 +1,934 @@
+% Springer Journal FAC document style
+% v1.22 released 13th October 1998
+% for LaTeX version 2.09
+% Copyright (C) 1993, 1997, 1998 Cambridge University Press
+%
+% based on the original LaTeX ARTICLE DOCUMENT STYLE by Leslie Lamport
+%
+% v1.22 - 13th October 1998 mods by Mark Reed.
+
+\newif\ifoldfss
+\newif\ifnfssone
+\newif\ifnfsstwo
+\newif\ifprodtf
+\newif\ifCUPmtlplainloaded
+\def\f@s@s{}%
+%
+\@ifundefined{DeclareFontShape}%
+ {%
+ \@ifundefined{selectfont}%
+ {\global\oldfsstrue\def\f@s@s{(with OFSS)\space}%
+ \let\reset@font=\relax}% old font selection scheme
+ {\global\nfssonetrue\def\f@s@s{(with NFSS release 1)\space}}%
+ }%
+ {\global\nfsstwotrue\def\f@s@s{(with NFSS release 2)\space}}%
+
+\typeout{Document Style `FAC journal style' \f@s@s v1.22, 13th October 1998}
+%
+% Journals use two-sided printing.
+%
+\@twosidetrue
+\@mparswitchtrue
+\newif\ifforth@event
+\def\ds@draft{\overfullrule 5pt}
+\def\ds@forthevt{\forth@eventtrue}
+\def\ds@prodtf{\CUPmtlplainloadedtrue\prodtftrue}
+\@options
+
+
+% ****************************************
+% * FONTS *
+% ****************************************
+%
+\ifx\CUP@mtlplain@loaded\undefined
+\else
+ \CUPmtlplainloadedtrue \prodtftrue
+\fi
+
+\lineskip 1pt
+\normallineskip 1pt
+\def\baselinestretch{1}
+\def\@normalsize{\@setsize\normalsize{11pt}\xpt\@xpt
+ \abovedisplayskip 6pt plus 1pt minus 1pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip 3pt plus 1pt
+ \belowdisplayshortskip \abovedisplayshortskip
+ \let\@listi\@listI}
+\def\small{\@setsize\small{9pt}\viiipt\@viiipt
+ \abovedisplayskip 6pt plus 1pt minus 1pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip 3pt plus 1pt
+ \belowdisplayshortskip \abovedisplayshortskip
+ \def\@listi{\leftmargin\leftmargini
+ \topsep 2pt plus 1pt minus 1pt
+ \parsep \z@
+ \itemsep 2pt}}
+\def\footnotesize{\@setsize\footnotesize{9pt}\viiipt\@viiipt
+ \abovedisplayskip 5pt plus 1pt minus 1pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus 1pt
+ \belowdisplayshortskip \abovedisplayshortskip
+ \def\@listi{\leftmargin\leftmargini
+ \topsep 2pt plus 1pt minus 1pt
+ \parsep \z@
+ \itemsep 2pt}}
+\def\indexsize{\@setsize\indexsize{9pt}\viiipt\@viiipt}
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\medium{\@setsize\large{12pt}\xipt\@xipt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{16pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{18pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\normalsize
+
+
+% ****************************************
+% * PAGE LAYOUT *
+% ****************************************
+%
+% SIDE MARGINS:
+\oddsidemargin 2pc
+\evensidemargin 2pc
+\marginparwidth 2.0cm
+\marginparsep 10pt
+
+% VERTICAL SPACING:
+\topmargin 3pc
+\headheight 11pt
+\headsep 11pt
+\topskip = 11pt
+\footheight 11pt
+\footskip 26pt
+
+% DIMENSION OF TEXT:
+\textheight = 50\baselineskip \advance\textheight by \topskip
+\textwidth 29pc
+\columnsep 10pt
+\columnseprule 0pt
+
+% FOOTNOTES:
+\footnotesep 6.65pt
+\skip\footins 16.5pt plus 12pt minus 1pt
+
+% FLOATS:
+\floatsep 11pt plus 5.5pt minus 1pt
+\textfloatsep 15pt plus 4.5pt minus 3pt
+\intextsep 11pt plus 5.5pt minus 2pt
+\@maxsep 15pt
+\dblfloatsep 11pt plus 5.5pt minus 2pt
+\dbltextfloatsep 15pt plus 4.5pt minus 3pt
+\@dblmaxsep 15pt
+\@fptop 0pt plus 0fil
+\@fpsep 11pt plus 0fil
+\@fpbot 0pt plus 3fil
+\@dblfptop 0pt plus 0fil
+\@dblfpsep 11pt plus 0fil
+\@dblfpbot 0pt plus 3fil
+\marginparpush 5pt
+
+
+% ****************************************
+% * PARAGRAPHING *
+% ****************************************
+%
+\parskip \z@ plus .3pt
+\parindent 1.5em
+\partopsep 0pt plus 1pt
+\@lowpenalty 51
+\@medpenalty 151
+\@highpenalty 301
+\@beginparpenalty -\@lowpenalty
+\@endparpenalty -\@lowpenalty
+\@itempenalty -\@lowpenalty
+\clubpenalty=0
+\widowpenalty=10000
+
+
+% ****************************************
+% * PARTS *
+% ****************************************
+%
+\def\part{\par \addvspace{4ex}\@afterindentfalse
+ \secdef\@part\@spart}
+\def\@part[#1]#2{\ifnum \c@secnumdepth >\m@ne
+ \refstepcounter{part}
+ \addcontentsline{toc}{part}{Part \thepart: #1}
+ \else \addcontentsline{toc}{part}{#1}
+ \fi
+ {\parindent 0pt \raggedright
+ \ifnum \c@secnumdepth >\m@ne
+ \large\rm PART
+ \ifcase\thepart \or ONE \or TWO \or THREE \or FOUR \or FIVE
+ \or SIX \or SEVEN \or EIGHT \or NINE \or TEN \else \fi
+ \par \nobreak
+ \fi
+ \LARGE \rm #2 \markboth{}{}\par }
+ \nobreak \vskip 3ex \@afterheading}
+\def\@spart#1{{\parindent 0pt \raggedright
+ \LARGE \rm #1\par}
+ \nobreak \vskip 3ex \@afterheading}
+
+
+% ****************************************
+% * SECTIONS *
+% ****************************************
+%
+\def\section{\@startsection {section}{1}{\z@}
+ {-19pt plus -5.5pt minus -2.25pt}
+ {11pt plus 0pt minus 1pt}
+ {\raggedright\large\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}
+ {-21pt plus -2.25pt minus -2.25pt}
+ {11pt plus 0pt minus 1pt}
+ {\raggedright\medium\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}
+ {-11pt plus -2.25pt minus -2.25pt}
+ {11pt plus 0pt minus 1pt}
+ {\raggedright\normalsize\it}}
+\def\paragraph{\@startsection{paragraph}{4}{\z@}
+ {11pt plus 2.25pt minus 1pt}
+ {-0.5em}
+ {\normalsize\bf}}
+\def\subparagraph{\@startsection{subparagraph}{4}{\parindent}
+ {11pt plus 2.25pt minus 1pt}
+ {-0.5em}
+ {\normalsize\it}}
+\setcounter{secnumdepth}{3}
+%
+\def\@sect#1#2#3#4#5#6[#7]#8{%
+ \ifnum #2>\c@secnumdepth
+ \def\@svsec{}%
+ \else
+ \refstepcounter{#1}
+ \edef\@svsec{\csname the#1\endcsname.\hskip 0.5em }% modified for 1en
+ \fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #6\relax
+ \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\par}
+ \endgroup
+ \csname #1mark\endcsname{#7}%
+ \addcontentsline{toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi #7}
+ \else
+ \def\@svsechd{#6\hskip #3\@svsec #8\csname #1mark\endcsname
+ {#7}\addcontentsline{toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi#7}}%
+ \fi
+ \@xsect{#5}}
+\def\appendix{\par
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \def\thesection{\Alph{section}}}
+
+
+% ****************************************
+% * PARTS & SECTIONS NUMBERS *
+% ****************************************
+%
+\newcounter{part}
+\newcounter {section}
+\newcounter {subsection}[section]
+\newcounter {subsubsection}[subsection]
+\newcounter {paragraph}[subsubsection]
+\newcounter {subparagraph}[paragraph]
+\def\thepart {\arabic{part}}
+\def\thesection {\arabic{section}}
+\def\thesubsection {\thesection.\arabic{subsection}}
+\def\thesubsubsection {\thesubsection .\arabic{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+\def\thesubparagraph {\theparagraph.\arabic{subparagraph}}
+
+
+% ****************************************
+% * SKIPS *
+% ****************************************
+%
+\newskip\@indentskip
+\newskip\smallindent
+\newskip\@footindent
+\newskip\@leftskip
+\@indentskip=1.5em
+\smallindent=1.5em
+\@footindent=\smallindent
+\@leftskip=\z@
+
+
+% ****************************************
+% * LISTS *
+% ****************************************
+%
+\leftmargini \@indentskip
+\leftmarginii 1.25pc
+\leftmarginiii 1.25pc
+\leftmarginiv 1.25pc
+\leftmarginv 1pc
+\leftmarginvi 1pc
+\leftmargin\leftmargini
+\labelsep 0.5em
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+%
+% label macros for Range-Left and Range-Right labels
+\def\makeRLlabel#1{\rlap{#1}\hss}
+\def\makeRRlabel#1{\hss\llap{#1}}
+%
+\def\@listI{\leftmargin\leftmargini
+ \parsep \z@
+ \topsep 6pt plus 1pt minus 1pt
+ \itemsep 2pt plus 1pt minus 0.5pt
+% \let\makelabel\makeRRlabel
+}
+\let\@listi\@listI
+\@listi
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 6pt plus 1pt minus 1pt
+ \parsep \z@
+ \itemsep 2pt
+ \let\makelabel\makeRRlabel
+}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 6pt plus 1pt minus 1pt
+ \parsep \z@
+ \partopsep \z@
+ \itemsep \topsep
+ \let\makelabel\makeRRlabel
+}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep
+ \let\makelabel\makeRRlabel}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep
+ \let\makelabel\makeRRlabel}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep
+ \let\makelabel\makeRRlabel}
+%
+% ITEMIZE
+\def\itemize{\ifnum \@itemdepth >3 \@toodeep
+ \else \advance\@itemdepth \@ne
+ \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
+ \list{\csname\@itemitem\endcsname}%
+ {\let\makelabel\makeRRlabel}%
+ \fi}
+\def\labelitemi{$\bullet$}
+\def\labelitemii{--}
+\def\labelitemiii{$\cdot$}
+\def\labelitemiv{*}
+%
+% ENUMERATE
+% SFB -- enumerate with optional argument to set left margin...
+\def\enumerate{\ifnum \@enumdepth >3 \@toodeep \else
+ \advance\@enumdepth \@ne
+ \edef\@enumctr{enum\romannumeral\the\@enumdepth}%
+ \fi
+ \@ifnextchar [{\@enumeratetwo}{\@enumerateone}%
+}
+\def\@enumeratetwo[#1]{%
+ \list{\csname label\@enumctr\endcsname}%
+ {\settowidth\labelwidth{[#1]}
+ \leftmargin\labelwidth \advance\leftmargin\labelsep
+ \usecounter{\@enumctr}
+ \let\makelabel\makeRRlabel}
+}
+\def\@enumerateone{%
+ \list{\csname label\@enumctr\endcsname}%
+ {\usecounter{\@enumctr}
+ \let\makelabel\makeRRlabel}}
+%
+%%%\def\labelenumi{\theenumi}
+%%%\def\theenumi{\arabic{enumi}.} % SFB v 0.09
+%%%\def\labelenumii{(\theenumii)}
+%%%\def\theenumii{\alph{enumii}}
+%%%\def\p@enumii{\theenumi}
+%%%\def\labelenumiii{\theenumiii}
+%%%\def\theenumiii{\roman{enumiii}}
+%%%\def\p@enumiii{\theenumi(\theenumii)}
+%%%\def\labelenumiv{\theenumiv}
+%%%\def\theenumiv{\Alph{enumiv}}
+%%%\def\p@enumiv{\p@enumiii\theenumiii}
+
+\def\labelenumi{\arabic{enumi}.}
+\def\theenumi{\arabic{enumi}}
+
+\def\labelenumii{(\theenumii)}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi.}
+
+\def\labelenumiii{\theenumiii}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi.\theenumii.}
+
+\def\labelenumiv{\theenumiv}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii.}
+%
+% DESCRIPTION
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+\let\enddescription\endlist
+
+
+% ****************************************
+% * DISPLAYED TEXT *
+% ****************************************
+%
+% VERSE
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@
+ \itemindent -\@indentskip
+ \listparindent \itemindent
+ \rightmargin\leftmargin
+ \advance\leftmargin \@indentskip}\item[]}
+\let\endverse\endlist
+%
+% QUOTATION
+\def\quotation{\list{}{\listparindent \smallindent
+% \itemindent\listparindent
+ \leftmargin\z@\rightmargin\leftmargin
+ \parsep 0pt plus 1pt}\item[]\small}
+\let\endquotation=\endlist
+%
+% QUOTE
+\def\quote{\list{}{\leftmargin\z@\rightmargin\leftmargin}\item[]\small}
+\let\endquote=\endlist
+
+
+% ****************************************
+% * OTHER ENVIRONMENTS *
+% ****************************************
+%
+% THEOREM
+\def\@begintheorem#1#2{\rm \trivlist \item[\hskip \labelsep{\bf #1\ #2.}]}
+\def\@opargbegintheorem#1#2#3{\rm \trivlist
+ \item[\hskip \labelsep{\bf #1\ #2\ (#3)}]}
+\def\@endtheorem{\endtrivlist}
+%
+% PROOF
+\def\proof{\rm \trivlist \item[\hskip \labelsep{\it Proof.}]}
+\def\endproof{\hspace*{1em}{\begin{picture}(6.5,6.5)%
+ \put(0,0){\framebox(6.5,6.5){}}\end{picture}}\endtrivlist}
+\@namedef{proof*}{\rm \trivlist \item[\hskip \labelsep{\it Proof.}]}
+\@namedef{endproof*}{\endtrivlist}
+\def\proofbox{\begin{picture}(6.5,6.5)%
+ \put(0,0){\framebox(6.5,6.5){}}\end{picture}}
+%
+% TITLEPAGE
+\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{empty}\c@page\z@}
+\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi}
+
+% ARRAY AND TABULAR
+%
+\arraycolsep 5pt
+\tabcolsep 6pt
+\arrayrulewidth .5pt
+\doublerulesep 1.5pt
+
+\def\tabular{\def\@halignto{}
+ \def\hline{\noalign{\ifnum0=`}\fi
+ \vskip 3pt
+% \hrule \@height \arrayrulewidth
+ {\hbox to 0.667\textwidth{\hrulefill}}
+ \vskip 3pt
+ \futurelet \@tempa\@xhline}
+%
+ \def\@xhline{\ifx\@tempa\hline
+ \vskip -6pt
+ \vskip \doublerulesep
+ \fi
+ \ifnum0=`{\fi}}
+%
+ \def\fullhline{\noalign{\ifnum0=`}\fi
+ \vskip 3pt
+% \hrule \@height \arrayrulewidth
+ {\hbox to \textwidth{\hrulefill}}
+ \vskip 3pt
+ \futurelet \@tempa\@xfhline}
+%
+ \def\@xfhline{\ifx\@tempa\fullhline
+ \vskip -6pt
+ \vskip \doublerulesep
+ \fi
+ \ifnum0=`{\fi}}
+%
+ \def\@arrayrule{\@addtopreamble{\hskip -.5\arrayrulewidth
+% \vrule \@width \arrayrulewidth
+ \hskip .5\arrayrulewidth}}
+\@tabular
+}
+% TABBING
+%
+\tabbingsep \labelsep
+
+% MINIPAGE
+%
+\skip\@mpfootins = \skip\footins
+
+% FRAMEBOX
+%
+% Space left between box and text by \fbox and \framebox.
+\fboxsep = 3pt
+% Width of rules in box made by \fbox and \framebox.
+\fboxrule = \arrayrulewidth
+
+
+% ****************************************
+% * TITLE AND ABSTRACT *
+% ****************************************
+%
+\newif\if@shortcom
+\def\shortcom{\@shortcomtrue
+ \ifCUPmtlplainloaded
+ \font\seventeenbxi=mtbxti10 at 17pt
+ \else
+ \font\seventeenbxi=cmbxti10 at 17pt
+ \fi
+}
+
+\def\editor#1{\gdef\@editor{#1}}
+\gdef\@editor{}
+
+\newif\if@correspondset
+\gdef\@correspond{\@shortauthor}
+\def\correspond#1{\gdef\@correspond{#1}\@correspondsettrue}
+\def\makecorrespond{\make@correspond}
+\def\make@correspond{{\def\thefootnote{\relax}
+ \footnotetext{\hspace*{-5pt}{\em Correspondence and offprint
+ requests to\/}: \@correspond}}}
+
+\def\maketitle{\par
+% \begingroup
+% \def\thefootnote{\fnsymbol{footnote}}
+% \def\@makefnmark{\hbox to 0pt{$^{\@thefnmark}$\hss}}
+ \newpage \global\@topnum\z@
+ \@maketitle
+ \thispagestyle{titlepage}
+ \@thanks
+ \if@correspondset\relax\else\make@correspond\fi
+% \endgroup
+% \setcounter{footnote}{0}
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\let\thanks\relax
+}
+
+\def\and{\end{author@tabular}\vskip 6pt\par
+ \begin{author@tabular}[t]{@{}l@{}}}
+
+\def\@maketitle{\newpage
+ \if@shortcom \vspace*{30pt}\else \vspace*{95pt}\fi
+ {\raggedright \sloppy
+ \if@shortcom
+ {\seventeenbxi Short Communication \par}%
+ {\large\it Edited by\ \@editor\par}%
+ \vskip 38pt
+ \fi
+ {\LARGE \bf \@title \par}%
+ \vskip 11pt
+ {\large
+ \begin{author@tabular}[t]{@{}l@{}}\@author
+ \end{author@tabular}\par}%
+ \vskip 11pt
+ }%
+ \par\noindent
+ \vskip 22pt
+}
+
+\def\abstract{\list{}{\leftmargin\z@\rightmargin\leftmargin
+ \parsep 0pt plus 1pt \listparindent\parindent}%
+ \item[]\normalsize{\bf Abstract.}}
+\def\endabstract{\endlist\titlerule}
+\def\keywords{\list{}{\leftmargin\z@\rightmargin\leftmargin
+ \parsep 0pt plus 1pt}\item[]\normalsize{\bf Keywords:}}
+\def\endkeywords{\endlist}
+\def\titlerule{\vspace{3pt}\footnoterule\vspace{7pt}\par}
+
+\def\author@tabular{\def\@halignto{}\@authortable}
+\let\endauthor@tabular=\endtabular
+\def\author@tabcrone{{\ifnum0=`}\fi\@xtabularcr\small
+ \let\\=\author@tabcrtwo\ignorespaces}
+\def\author@tabcrtwo{{\ifnum0=`}\fi\@xtabularcr[-5pt]\small
+ \let\\=\author@tabcrtwo\ignorespaces}
+\def\@authortable{\leavevmode \hbox \bgroup $\let\@acol\@tabacol
+ \let\@classz\@tabclassz \let\@classiv\@tabclassiv
+ \let\\=\author@tabcrone \ignorespaces \@tabarray}
+
+
+% ****************************************
+% * PAGE STYLES *
+% ****************************************
+%
+\mark{{}{}}
+\gdef\@author{\mbox{}}
+\def\author{\@ifnextchar [{\@authortwo}{\@authorone}}
+\def\@authortwo[#1]#2{\gdef\@author{#2}\gdef\@shortauthor{#1}}
+\def\@authorone#1{\gdef\@author{#1}\gdef\@shortauthor{#1}}
+\def\shortauthor#1{\gdef\@shortauthor{#1}}
+\gdef\@shortauthor{}
+\gdef\@title{\mbox{}}
+\def\title{\@ifnextchar [{\@titletwo}{\@titleone}}
+\def\@titletwo[#1]#2{\gdef\@title{#2}\gdef\@shorttitle{#1}}
+\def\@titleone#1{\gdef\@title{#1}\gdef\@shorttitle{#1}}
+\def\shorttitle#1{\gdef\@shorttitle{#1}}
+\gdef\@shorttitle{}
+\def\volume#1{\gdef\@volume{#1}}
+\gdef\@volume{3}
+\def\pagerange#1{\gdef\@pagerange{#1}}
+\def\pubyear#1{\gdef\@pubyear{#1}}
+\gdef\@pubyear{1997}
+\gdef\@pagerange{1--000}
+\def\journal#1{\gdef\@journal{#1}}
+\gdef\@journal{Formal Aspects of Computing
+ (\number\@pubyear) \@volume: \@pagerange}
+%
+% \ps@empty and \ps@plain defined in LATEX.TEX
+%
+\def\ps@headings{\let\@mkboth\markboth
+ \def\@oddhead{\small \@shorttitle \hfill \rm \thepage}
+ \def\@oddfoot{}
+ \def\@evenhead{\small \thepage \hfill \@shortauthor}
+ \def\@evenfoot{}
+ \def\sectionmark##1{\markboth{##1}{}}
+ \def\subsectionmark##1{\markright{##1}}}
+\def\ps@myheadings{\let\@mkboth\@gobbletwo
+ \def\@oddhead{\it \rightmark \hfill \rm \thepage}
+ \def\@oddfoot{}
+ \def\@evenhead{\it \leftmark \hfill \rm \thepage}
+ \def\@evenfoot{}
+ \def\sectionmark##1{}
+ \def\subsectionmark##1{}}
+\def\ps@titlepage{\let\@mkboth\@gobbletwo
+ \def\@oddhead{\footnotesize
+ \raisebox{0pt}[8pt][1pt]{\parbox{0.7\textwidth}{\@journal\\
+ \copyright\ \@pubyear\ BCS}} \hfill}
+ \def\@oddfoot{}
+ \def\@evenhead{\footnotesize
+ \raisebox{0pt}[8pt][1pt]{\parbox{0.7\textwidth}{\@journal\\
+ \copyright\ \@pubyear\ BCS}} \hfill}
+ \def\@evenfoot{}
+ \def\sectionmark##1{}
+ \def\subsectionmark##1{}}
+
+
+% ****************************************
+% * TABLE OF CONTENTS, ETC. *
+% ****************************************
+%
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{2}
+\def\@undottedtocline#1#2#3#4#5{\ifnum #1>\c@tocdepth
+ \else
+ \vskip \z@ plus .2pt
+ {\hangindent #2\relax
+ \rightskip \@tocrmarg \parfillskip -\rightskip
+ \parindent #2\relax \@afterindenttrue
+ \interlinepenalty\@M \leavevmode
+ \@tempdima #3\relax #4\nobreak \hfill \nobreak
+ \hbox to\@pnumwidth{\hfil\rm \ }\par}\fi}
+\def\tableofcontents{\@restonecolfalse
+ \if@twocolumn\@restonecoltrue\onecolumn\fi
+ \section*{Contents} \@starttoc{toc}
+ \if@restonecol\twocolumn\fi \par\vspace{11pt}}
+\def\l@part#1#2{\addpenalty{-\@highpenalty}
+ \addvspace{2.25em plus 1pt}
+ \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ {\normalsize\rm
+ \leavevmode \hspace*{3pc}
+ #1\hfil \hbox to\@pnumwidth{\hss \ }}\par
+ \nobreak \global\@nobreaktrue
+ \everypar{\global\@nobreakfalse\everypar{}}\endgroup}
+\def\l@section#1#2{\addpenalty{\@secpenalty}
+ \@tempdima 1.5em
+ \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth \rm \leavevmode
+ \advance\leftskip\@tempdima \hskip -\leftskip
+ #1\nobreak\hfil \nobreak\hbox to\@pnumwidth{\hss \ }\par
+ \endgroup}
+\def\l@subsection{\@undottedtocline{2}{1.5em}{2.3em}}
+\def\l@subsubsection{\@undottedtocline{3}{3.8em}{3.2em}}
+\def\l@paragraph{\@undottedtocline{4}{7.0em}{4.1em}}
+\def\l@subparagraph{\@undottedtocline{5}{10em}{5em}}
+\def\listoffigures{\@restonecolfalse
+ \if@twocolumn\@restonecoltrue\onecolumn\fi
+ \section*{List of Figures\@mkboth{List of Figures}{List of Figures}}
+ \@starttoc{lof} \if@restonecol\twocolumn\fi}
+\def\l@figure{\@undottedtocline{1}{1.5em}{2.3em}}
+\def\listoftables{\@restonecolfalse
+ \if@twocolumn\@restonecoltrue\onecolumn\fi
+ \section*{List of Tables\@mkboth{List of Tables}{List of Tables}}
+ \@starttoc{lot} \if@restonecol\twocolumn\fi}
+\let\l@table\l@figure
+
+
+% ****************************************
+% * BIBLIOGRAPHY *
+% ****************************************
+%
+\def\thebibliography#1{\section*{References}
+ \addcontentsline{toc}{section}{References}
+ % SFB v 0.09
+ \list{[\arabic{enumi}]}{\labelwidth3.5pc
+ \leftmargin 3.5pc \advance\leftmargin\labelsep
+ \itemsep 0pt
+ \usecounter{enumi}
+ \let\makelabel=\makeRLlabel
+}
+ \small \parindent\z@
+ \parskip\z@ plus .1pt\relax
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax
+}
+\let\endthebibliography=\endlist
+\def\@biblabel#1{[#1]}
+
+
+% ****************************************
+% * THE INDEX *
+% ****************************************
+%
+\newif\if@restonecol
+\def\theindex{\section*{Index}
+ \addcontentsline{toc}{section}{Index}
+ \footnotesize \parindent\z@ \parskip\z@ plus .1pt\relax
+ \let\item\@idxitem}
+\def\@idxitem{\par\hangindent 1em}
+\def\subitem {\par\hangindent 1em \hspace*{1em}}
+\def\subsubitem{\par\hangindent 1em\hspace*{1em}}
+\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
+\def\indexspace{\par\vskip\baselineskip \relax}
+
+
+% ****************************************
+% * FOOTNOTES *
+% ****************************************
+%
+\def\footnoterule{\kern-3\p@
+ \hrule width 12pc height .5pt \kern 3\p@}
+
+\long\def\@makefntext#1{\parindent 1em\noindent
+ $^{\@thefnmark}$\hspace{4pt}#1}
+
+
+% ****************************************
+% * FIGURES AND TABLES *
+% ****************************************
+%
+\setcounter{topnumber}{2}
+\def\topfraction{.9}
+\setcounter{bottomnumber}{2}
+\def\bottomfraction{.5}
+\setcounter{totalnumber}{3}
+\def\textfraction{0.1}
+\def\floatpagefraction{.85}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.9}
+\def\dblfloatpagefraction{.85}
+
+\newif\if@contcap
+\let\@@caption\caption
+\def\contcaption{\@contcaptrue\addtocounter{\@captype}{-1}\@@caption}
+
+\newif\ifrem@fullpt
+\newcommand\removefullpoint{\global\rem@fullpttrue}
+
+\def\cap@extra{\if@contcap {\it---cont.}\else\ifrem@fullpt\else .\fi\fi\ }
+
+\newcounter{table}
+\def\thetable{\@arabic\c@table}
+\def\fps@table{tbp}
+\def\ftype@table{1}
+\def\ext@table{lot}
+\def\fnum@table{Table \thetable}
+\def\table{\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+\def\fstyle@table{\small\rm}
+\def\fjust@table{\sloppy}
+\def\fcapjust@table{\sloppy}
+\def\fcapsize@table{\small\bf}
+\def\fcapstyle@table{\small\rm}
+
+\long\def\@makecaption@table#1#2{\vskip 5.5pt
+ \setbox\@tempboxa\hbox{#1\cap@extra #2}%
+ \ifdim \wd\@tempboxa >\hsize
+ #1\cap@extra #2\par
+ \else
+ \hbox to\hsize{\box\@tempboxa\hfill}%
+ \fi
+ \@contcapfalse
+ \rem@fullptfalse
+}
+
+\newcounter{figure}
+\def\thefigure{\@arabic\c@figure}
+\def\fps@figure{tbp}
+\def\ftype@figure{2}
+\def\ext@figure{lof}
+\def\fnum@figure{Fig.\ \thefigure}
+\def\figure{\@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+\def\fstyle@figure{\rm}
+\def\fjust@figure{\sloppy}
+\def\fcapjust@figure{\sloppy}
+\def\fcapsize@figure{\small\bf}
+\def\fcapstyle@figure{\small\rm}
+
+\long\def\@makecaption@figure#1#2{\vskip 5.5pt
+ \setbox\@tempboxa\hbox{#1\cap@extra #2}%
+ \ifdim \wd\@tempboxa >\hsize
+ #1\cap@extra #2\par
+ \else
+ \hbox to\hsize{\hfil\box\@tempboxa\hfil}%
+ \fi
+ \@contcapfalse
+ \rem@fullptfalse
+}
+
+\long\def\@caption#1[#2]#3{%
+ \addcontentsline{\csname ext@#1\endcsname}{#1}%
+ {\protect\numberline{\csname the#1\endcsname}%
+ {\ignorespaces #2}}\par
+ \begingroup
+ \@parboxrestore
+% SFB 0.08
+ \csname @makecaption@#1\endcsname
+ {\csname fcapjust@#1\endcsname
+ \csname fcapsize@#1\endcsname
+ \csname fnum@#1\endcsname}%
+ {\csname fcapstyle@#1\endcsname \ignorespaces #3}
+ \par
+ \endgroup}
+
+\def\@xfloat#1[#2]{\ifhmode \@bsphack\@floatpenalty-\@Mii
+ \else \@floatpenalty-\@Miii \fi
+ \def\@captype{#1}%
+ \ifinner \@parmoderr\@floatpenalty\z@
+ \else \@next\@currbox\@freelist{\@tempcnta\csname ftype@#1\endcsname
+ \multiply\@tempcnta\@xxxii\advance\@tempcnta\sixt@@n
+ \@tfor \@tempa :=#2\do
+ {\if\@tempa h\advance\@tempcnta \@ne\fi
+ \if\@tempa t\advance\@tempcnta \tw@\fi
+ \if\@tempa b\advance\@tempcnta 4\relax\fi
+ \if\@tempa p\advance\@tempcnta 8\relax\fi
+ }\global\count\@currbox\@tempcnta}\@fltovf
+ \fi
+ \global\setbox\@currbox\vbox\bgroup
+ \boxmaxdepth\z@
+ \csname fstyle@#1\endcsname
+ \hsize\textwidth \linewidth\textwidth \@parboxrestore
+ \csname fjust@#1\endcsname}
+
+
+% ****************************************
+% * CUP specials *
+% ****************************************
+%
+% received line and accepted line
+\def\receivedline{\@ifnextchar [{\rec@arg}{\rec@noarg}}
+\def\rec@noarg{\par\noindent{\small\it Received \@date}}
+\def\rec@arg[#1]{\par\noindent{\small\it Received #1}}
+\newcommand{\acceptedline}[2]{\par\noindent{\small\it
+ Accepted in revised form #1 by #2}}
+
+% ****************************************
+% * FLEQN *
+% ****************************************
+%
+% FLEQN DOCUMENT-STYLE OPTION - released 9 March 1987
+% for LaTeX version 2.09
+% Copyright (C) 1987 by Leslie Lamport
+%
+% The following commands make the displayed math environments flush left,
+% with an indentation of \mathindent from the prevailing left margin.
+
+\def\[{\relax\ifmmode\@badmath\else\begin{trivlist}\item[]\leavevmode
+ \hbox to\linewidth\bgroup$
+ \displaystyle
+ \hskip\mathindent\bgroup\fi}
+
+\def\]{\relax\ifmmode \egroup $\hfil
+ \egroup \end{trivlist}\else \@badmath \fi}
+
+\def\equation{\refstepcounter{equation}\trivlist \item[]\leavevmode
+ \hbox to\linewidth\bgroup $
+ \displaystyle
+\hskip\mathindent}
+
+
+\def\endequation{$\hfil
+ \displaywidth\linewidth\@eqnnum\egroup \endtrivlist}
+
+\def\eqnarray{\stepcounter{equation}\let\@currentlabel=\theequation
+\global\@eqnswtrue
+\global\@eqcnt\z@\tabskip\mathindent\let\\=\@eqncr
+\abovedisplayskip\topsep\ifvmode\advance\abovedisplayskip\partopsep\fi
+\belowdisplayskip\abovedisplayskip
+\belowdisplayshortskip\abovedisplayskip
+\abovedisplayshortskip\abovedisplayskip
+$$\halign
+to \linewidth\bgroup\@eqnsel\hskip\@centering$\displaystyle\tabskip\z@
+ {##}$&\global\@eqcnt\@ne \hskip 2\arraycolsep \hfil${##}$\hfil
+ &\global\@eqcnt\tw@ \hskip 2\arraycolsep $\displaystyle{##}$\hfil
+ \tabskip\@centering&\llap{##}\tabskip\z@\cr}
+
+\def\endeqnarray{\@@eqncr\egroup
+ \global\advance\c@equation\m@ne$$\global\@ignoretrue}
+
+\newdimen\mathindent
+\mathindent = 2pc
+
+
+% ****************************************
+% * MISCELLANEOUS *
+% ****************************************
+%
+% DATE
+\def\today{\number\day\ \ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December
+ \fi \ \number\year}
+
+\def\hexnumber#1{\ifcase#1 0\or1\or2\or3\or4\or5\or6\or7\or8\or9\or
+ A\or B\or C\or D\or E\or F\fi}
+
+\newif\iffontfound
+\newcommand\checkfont[1]{%
+ \batchmode
+ \font\test=#1\relax
+ \errorstopmode
+ \fontfoundfalse
+ \ifx\test\nullfont \else \fontfoundtrue\fi
+}
+
+% ****************************************
+% * INITIALIZATION *
+% ****************************************
+%
+\ps@headings
+\pagenumbering{arabic}
+\onecolumn
+\ifforth@event \else
+ \let\onecolumn=\relax
+ \def\twocolumn{\typeout{Two column mode not available with FAC style.}}
+\fi
+\flushbottom
+\frenchspacing
+
+\ifprodtf \input facsym.sty\fi
+\ifforth@event \input facfcevt.sty\relax\fi
+
+\endinput
diff --git a/obsolete/macros/latex209/contrib/fac/facguide.tex b/obsolete/macros/latex209/contrib/fac/facguide.tex
new file mode 100644
index 0000000000..45e0558ac4
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/fac/facguide.tex
@@ -0,0 +1,836 @@
+% FACGUIDE.TEX
+% v1.12 released 14th October 1998
+% Copyright (C) 1991, 1997, 1998 Cambridge University Press
+
+\documentstyle{fac}
+
+% The following macros automatically define symbols to be used in Table 1 of
+% the authors' guide, using characters from the AMS symbol fount MSAM.
+
+\newif\ifmsafound
+\ifCUPmtlplainloaded \else
+ \checkfont{msam5}
+ \iffontfound
+ \msafoundtrue
+ \font\fivemsa=msam5
+ \newfam\msafam
+ \textfont\msafam=\fivemsa
+ \edef\msa{\hexnumber\msafam}
+ \mathchardef\blacktriangleright="3\msa49
+ \mathchardef\vartriangleright="3\msa42
+ \newcommand\black{\raisebox{.2ex}{$\blacktriangleright$}}
+ \newcommand\white{\raisebox{.2ex}{$\vartriangleright$}}
+ \newcommand\whbl{\white\kern-1pt--\black}
+ \newcommand\blwh{\black\kern-1pt--\white}
+ \newcommand\blbl{\black\kern-1pt--\black}
+ \newcommand\whwh{\white\kern-1pt--\white}
+ \fi
+\fi
+
+\newcommand\eg{{\it e.g.\ }}
+\newcommand\etc{{\it etc}}
+\newcommand\visiblespace{\leavevmode\hbox{\tt\char`\ }}
+\renewcommand\LaTeX{L\kern-.36em\raise.3ex\hbox{a}\kern-.15em
+ T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}
+
+\newtheorem{theorem}{Theorem}[section]
+
+\title[Formal Aspects of Computing: \LaTeX\ Submissions]
+ {Formal Aspects of Computing:\\
+ \LaTeX\ Style Guide for Authors}
+
+\author[C. Notarmarco and R. Mulvey]
+ {Christiane Notarmarco$^1$ and Rod Mulvey$^2$\\
+ $^1$Springer-Verlag London Limited, Springer House,
+ Wimbledon, SW19 7JZ, UK;\\ $^2$\TeX-to-type,
+ Cambridge University Press, Shaftesbury Road,
+ Cambridge, CB2 2BS,\\ UK}
+
+\correspond{Christiane Notarmarco, Springer-Verlag London
+ Limited, Springer House, 8 Alexandra Road,
+ Wimbledon, London, SW19 7JZ, UK.}
+
+\pubyear{1998}
+\pagerange{\pageref{firstpage}--\pageref{lastpage}}
+
+\begin{document}
+\label{firstpage}
+
+\makecorrespond
+\maketitle
+
+\begin{keywords}
+\LaTeX; Style files; \verb"fac.sty"; Sample text; User guide
+\end{keywords}
+
+\begin{abstract}
+This guide is for authors who are preparing papers for
+{\em Formal Aspects of Computing\/} using the \LaTeX\ document
+preparation system and the FAC style file.
+\end{abstract}
+
+\section{Introduction}
+
+In addition to the standard submission of hard-copy from authors,
+{\em Formal Aspects of Computing\/} accepts machine-readable forms of
+papers in \LaTeX.
+The layout design for {\em Formal Aspects of Computing\/} has been
+implemented as a \LaTeX\ style file.
+The FAC style is based on the \verb"ARTICLE" style as discussed in the
+\LaTeX\ manual \cite{Lam:LaTeX}.
+Commands which differ from the standard \LaTeX\ interface, or which are
+provided in addition to the standard interface, are explained in this
+guide. This guide is not a substitute for the \LaTeX\ manual itself.
+Authors planning to submit their papers in \LaTeX\ are advised to use
+\verb"fac.sty" as early as possible in the creation of their files.
+
+\subsection{Introduction to \LaTeX}
+
+\LaTeX\ is constructed as a series of macros on top of the \TeX\
+typesetting program.
+\LaTeX\ adds to \TeX\ a collection of facilities which simplify typesetting
+for authors by allowing them to concentrate on the logical structure of the
+document rather than its visual layout.
+Careful use of the \LaTeX\ mark-up philosophy results in uniform
+layout rather than the {ad hoc} results of some word-processing systems.
+Authors are advised to let the defaults control fount selection, \etc.\
+rather than tinker themselves.
+
+\LaTeX\ provides a consistent and comprehensive document preparation
+interface. There are macros for generating a table of contents,
+lists of figures and/or tables;
+\LaTeX\ can automatically number list entries, equations, figures, tables,
+and footnotes, as well as parts, sections and subsections.
+Using this numbering system, bibliographic citations, page references and
+cross references to any other numbered entity (\eg sections, equations,
+figures, list entries) are straightforward.
+
+\subsection{The FAC Document Style}
+
+The use of document styles allows a simple change of style (or style
+option) to transform the appearance of your document.
+The Springer-Verlag London Limited (SVL) FAC style file preserves the
+standard \LaTeX\ interface such that any document which can be produced
+using the standard \LaTeX\ \verb"ARTICLE" style, can also be produced with
+the FAC style.
+However, the measure (or width of text) is wider than the default for
+\verb"ARTICLE" therefore line breaks will change and long equations may
+need re-setting.
+Authors are urged to use \verb"fac.sty" from the beginning of their
+document preparation; in particular, they are advised not to use wider
+measures as given by \verb"a4.sty", \etc.\ because this will involve
+changes after they think their submissions are technically accurate.
+
+\subsection{General Style Issues}
+
+Use of \LaTeX\ defaults will result in a pleasing uniformity of layout
+and fount selection. Authors should resist the temptation to make
+{\em ad hoc\/} changes to these.
+Whether using the default founts or not, displayed mathematics should
+be set in a distinct fount from running text and the same fount should
+be used where formulae occur in running text.
+In addition to the standard \TeX\ and \LaTeX\ founts, authors can use the
+AMS {\em msam\/} and {\em msbm\/} founts. The AMS {\em msam\/}
+founts have been used in Table~\ref{symbols} to define some of the
+characters in the first four lines.
+
+The final makeup will use Times Roman founts and if these are
+available to authors (\eg via PSLaTeX) they should be employed in order
+to ensure good use of space (they are in general more economical than
+computer modern founts).
+
+For general style issues, authors are referred to the `Instructions for
+authors' in the FAC journal. Authors who are interested in the detail of style
+are referred to \cite{But:Copy} and \cite{Chicago}. The language of the
+journal is British English and spelling should conform to this.
+
+Use should be made of symbolic references (\verb"\ref") in order to
+protect against late changes of order, \etc.
+
+\subsection{Submission of \LaTeX\ Articles to the Journal}
+
+Authors who intend to submit a \LaTeX\ article to FAC should obtain a
+copy of the journal's style file \verb"fac.sty". This is available on
+request in the first instance from Springer-Verlag London Limited; remember to
+specify the type of media you require. Alternatively, you can download
+the files from one of the CTAN (Comprehensive TeX Archive Network) anonymous
+FTP sites around the world: \verb"ftp.tex.ac.uk" (England), \verb"ftp.dante.de"
+(Germany) or \verb"ctan.tug.org" (US).
+
+The required files \verb"fac.sty" and \verb"facguide.tex" can be found in the
+directory \verb"tex-archive/macros/latex209/contrib/publications". If you
+cannot obtain the journal style file, use \verb"ARTICLE" style.
+
+When submitting the final article, ensure that the following are included:
+\begin{enumerate}
+ \item Hardcopy printout of the article;
+ \item The input file;
+ \item A copy of all user-defined macros;
+ \item Bibliography files, or if you have used BIB\TeX, the \verb".bib"
+ and \verb".bbl" files;
+ \item Any other files necessary to prepare the article
+ for typesetting.
+\end{enumerate}
+The files for the {\em final\/} article should be text-only with no
+system dependent control codes. Submit this, if at all possible, by
+e-mail over JANET, and the hardcopy by post to D.\,J. Cooke (see the
+inside-cover of the journal for correct e-mail and postal addresses).
+If you do not have access to e-mail, send the files on disc -- PC $5
+{1\over4\,}$in.\ or Apple $3 {1\over 2\,}$in.\ -- along with the hard copy to D.\,J. Cooke.
+
+\section{Using the FAC Style}
+
+First, copy the file \verb"fac.sty" into an appropriate subdirectory on
+your system.
+The FAC document style is implemented as a complete document style {\em
+not\/} a document style option.
+In order to use the FAC style, replace \verb"article" by \verb"fac" in the
+\verb"\documentstyle" command at the beginning of your document:
+%
+\begin{verbatim}
+ \documentstyle{article}
+\end{verbatim}
+is replaced by,
+\begin{verbatim}
+ \documentstyle{fac}
+\end{verbatim}
+%
+In general, the following standard document style options should {\em
+not\/} be used with the FAC style:
+%
+\begin{itemize}
+ \item {\tt 10pt}, {\tt 11pt}, {\tt 12pt} -- unavailable.
+ \item {\tt draft}, {\tt twoside} (no associated style file) -- {\tt
+ twoside} is the default.
+ \item {\tt fleqn}, {\tt leqno}, {\tt titlepage}, {\tt twocolumn} --
+ should not be used (\verb"fleqn" is already incorporated into
+ the FAC style).
+\end{itemize}
+%
+However, {\tt proc}, {\tt ifthen}, {\tt bezier} -- can be used if
+necessary.
+
+\section{Additional Facilities}
+
+In addition to all the standard \LaTeX\ design elements, the FAC style
+includes the following features:
+%
+\begin{itemize}
+ \item Extended commands for specifying a short version of the title and
+ author(s) for the running headlines.
+ \item \verb"\correspond" and \verb"\makecorrespond" commands for printing
+ the name and address for further correspondence.
+ \item A \verb"keywords" environment.
+ \item A \verb"proof" environment.
+ \item Control of enumerated lists.
+\end{itemize}
+%
+In general, once you have used the additional \verb"fac.sty"
+facilities in your document, do not process it with a standard \LaTeX\
+style file.
+
+\subsection{Titles and Author's Name}
+
+In the FAC style, the title of the article and the author's name (or
+authors' names) are used both at the beginning of the article for the main
+title and throughout the article as running headlines at the top of every
+page.
+The title is used on odd-numbered pages (rectos) and the author's name
+appears on even-numbered pages (versos).
+Although the main heading can run to several lines of text, the running
+head line must be a single line.
+Moreover, the main heading can also incorporate new line commands
+(\eg \verb"\\") but these are not acceptable in a running headline.
+To enable you to specify an alternative short title, which should not be
+more than 48 characters and spaces, and an alternative short author's name,
+the standard \verb"\title" and \verb"\author" commands have been extended
+to take an optional argument to be used as the running headline:
+%
+\begin{verbatim}
+ \title[Formal Aspects of Computing: \LaTeX\ submissions]
+ {Formal Aspects of Computing:\\
+ \LaTeX\ Style Guide for Authors}
+\end{verbatim}
+and,
+\begin{verbatim}
+ \author[C. Notarmarco and R. Mulvey]
+ {Christiane Notarmarco$^1$ and Rod Mulvey$^2$\\
+ $^1$Springer-Verlag London Limited, Springer House,
+ Wimbledon, SW19 7JZ, UK;\\ $^2$\TeX-to-type,
+ Cambridge University Press, Shaftesbury Road,
+ Cambridge,\\ UK}
+\end{verbatim}
+
+You may wish to add a \verb"\thanks" note, which produces a footnote to the
+title or author. In the latter case, the superscripts by the authors' names
+will be automatically generated.
+
+\subsection{Correspondence Note}
+
+The footnote at the bottom of the first page is generated automatically,
+and begins with the words {\it Correspondence and offprint
+requests to\/{\rm:\visiblespace }}.
+The appropriate name and address must be given as an argument to the macro
+\verb"\correspond" in the preamble:
+%
+\begin{verbatim}
+ \correspond{Christiane Notarmarco, Springer-Verlag
+ London Limited, Springer House, 8 Alexandra
+ Road, Wimbledon, London, SW19 7JZ, UK.}
+\end{verbatim}
+%
+This information is subsequently used by the command
+\verb"\makecorrespond". This may be placed anywhere
+after \verb"\begin{document}" within the text of the first page. If you
+have other footnotes on the first page, \verb"\makecorrespond" should
+follow them so as to make {\em Correspondence and \ldots} print at the foot
+of the page.
+
+If you omit the \verb"\correspond" and \verb"\makecorrespond" commands,
+the name in the correspondence note defaults to the short author's name.
+
+\subsection{Keywords and Abstracts}
+
+At the beginning of your article, the title should be generated in the
+usual way using the \verb"\maketitle" command. Immediately following the
+title you should include a list of keywords followed by an abstract. For
+example, the titles for this guide were produced by the following source:
+%
+\begin{verbatim}
+ \maketitle
+ \begin{keywords}
+ \LaTeX; Style files; \verb"fac.sty"; Sample text;
+ User guide
+ \end{keywords}
+
+ \begin{abstract}
+ This guide is for authors who are preparing papers
+ for {\em Formal Aspects of Computing\/} using the
+ \LaTeX\ document preparation system and the FAC style
+ file.
+ \end{abstract}
+
+ \section{Introduction}
+ ...
+\end{verbatim}
+The abstract is automatically followed by a 12~pica rule.
+
+\subsection{Proofs}
+
+The \verb"proof" environment has been added to the standard \LaTeX\
+constructs to provide a consistent format for proofs.
+For example,
+%
+\begin{verbatim}
+ \newtheorem{theorem}{Theorem}[section]
+ ...
+ \begin{theorem}
+ $VS \Rightarrow FP$ for program {\em Multi-States}.
+ \end{theorem}
+ \begin{proof}
+ Noting that a state satisfying $VS$ has no elements
+ $V_{xi}$ of $V$ satisfying $0<V_{xi}<1$, it follows
+ that the proof is just as the proof was for the
+ corresponding case of {\em Bi-States}.
+ \end{proof}
+\end{verbatim}
+%
+produces the following text:
+%
+ \begin{theorem}
+ $VS \Rightarrow FP$ for program {\em Multi-States}.
+ \end{theorem}
+ \begin{proof}
+ Noting that a state satisfying $VS$ has no elements
+ $V_{xi}$ of $V$ satisfying $0<V_{xi}<1$, it follows
+ that the proof is just as the proof was for the
+ corresponding case of {\em Bi-States}.
+ \end{proof}
+
+\subsection{Lists}
+
+The FAC style provides the three standard list environments:
+\begin{itemize}
+ \item Numbered lists, created using the \verb"enumerate" environment.
+ \item Bulleted lists, created using the \verb"itemize" environment.
+ \item Labelled lists, created using the \verb"description" environment.
+\end{itemize}
+The enumerated list numbers each list item with an arabic numeral.
+Alternative styles can be achieved by inserting a redefinition of the
+number labelling command after the \verb"\begin{enumerate}".
+For example, a list numbered with roman numerals inside parentheses can be
+produced by the following commands:
+%
+\begin{verbatim}
+ \begin{enumerate}
+ \renewcommand{\theenumi}{(\roman{enumi})}
+ \item first item
+ :
+ \end{enumerate}
+\end{verbatim}
+%
+This produces the following list:
+%
+\begin{enumerate}
+ \renewcommand{\theenumi}{(\roman{enumi})}
+ \item first item
+ \item second item
+ \item \etc\ldots
+\end{enumerate}
+%
+In the last example, the labels were pushed out into the margin because
+the standard list indentation is designed to be sufficient for arabic
+numerals rather than the longer roman numerals. In order to enable
+different labels to be used more easily, the \verb"enumerate" environment
+in the FAC style can be given an optional argument which (like a standard
+\verb"bibliography" environment) specifies the {\em widest label}. For
+example,
+%
+\begin{enumerate}[(iii)]
+\renewcommand{\theenumi}{(\roman{enumi})}
+ \item first item
+ \item second item
+ \item \etc\ldots
+\end{enumerate}
+%
+was produced by the following input:
+%
+\begin{verbatim}
+ \begin{enumerate}[(iii)]
+ \renewcommand{\theenumi}{(\roman{enumi})}
+ \item first item
+ :
+ \end{enumerate}
+\end{verbatim}
+
+\section{Some Guidelines for Using Standard Facilities}
+
+The following notes may help you achieve the best effects with the FAC
+style file.
+
+\subsection{Sections}
+
+\LaTeX\ provides five levels of section headings and they are all
+defined in the FAC style file:
+%
+\begin{itemize}
+ \item \verb"\section"
+ \item \verb"\subsection"
+ \item \verb"\subsubsection"
+ \item \verb"\paragraph"
+ \item \verb"\subparagraph"
+\end{itemize}
+%
+Section numbers are given for sections, subsection and subsubsection
+headings.
+
+\subsection{Running Headlines}
+
+As described above, the title of the article and the author's name (or
+authors' names) are used as running headlines at the top of every page.
+The \verb"\pagestyle" and \verb"\thispagestyle" commands should {\em not\/}
+be used. Similarly, the commands \verb"\markright" and \verb"\markboth"
+should not be necessary.
+
+\subsection{Illustrations (or Figures)}
+
+The FAC style will cope with most positioning of your illustrations and you
+should not normally use the optional positional qualifiers on the
+\verb"figure" environment which would override these decisions.
+See `Instructions for authors' in FAC journal for submission of artwork.
+Figure captions should be below the figure itself therefore the
+\verb"\caption"
+command should appear after the figure or space left for an illustration.
+For example, Figure~\ref{sample-figure} is produced using the following
+commands:
+%
+\begin{verbatim}
+ \begin{figure}
+ \centering
+ \vspace{5cm}
+ \caption{An example figure in which space has been
+ left for the artwork}
+ \label{sample-figure}
+ \end{figure}
+\end{verbatim}
+%
+ \begin{figure}
+ \centering
+ \vspace{5cm}
+ \caption{An example figure in which space has been
+ left for the artwork}
+ \label{sample-figure}
+ \end{figure}
+
+\subsection{Tables}
+\begin{table}
+ \caption{Index of Symbols}
+ \begin{tabular}{@{}ll@{}}
+ \hline
+ Symbol\hspace{1cm} & Meaning \\
+ \hline
+\ifmsafound
+ \whbl & \hbox{Forward closure} \\
+ \blwh & \hbox{Backward closure} \\
+ \blbl & \hbox{Overlap closure} \\
+ \whwh & \hbox{Rule closure} \\
+\fi
+ $\leadsto$ & \hbox{Rule closure constructor} \\
+ $\bigtriangleup$ & \hbox{Substitution sum} \\
+ $\cdot$ & \hbox{Substitution composition} \\
+ $\sqcup$ & \hbox{Substitution join} \\
+ $\bot$ & \hbox{Coherence relation} \\
+ $-^n$ & \hbox{Substitution operator
+ (exponent)} \\
+ $W_n(-,-)$ & \hbox{Substitution operator
+ (Whale)} \\
+ $T_n(-,-,-)$ & \hbox{Substitution operator
+ (Turtle)} \\
+ \hline
+ \end{tabular}
+ \label{symbols}
+\end{table}
+
+The FAC style will cope with most positioning of your tables
+and you should not normally use the optional positional qualifiers on the
+\verb"table" environment which would override these decisions.
+Table captions should be at the top, therefore the \verb"\caption" command
+should appear before the body of the table.
+
+The \verb"tabular" environment should be used to produce ruled tables;
+it has been modified for the FAC style in the following ways:
+%
+\begin{enumerate}
+ \item Rules may either be two-thirds or the full width of a page,
+depending on the width of the material in your table. \verb"\hline"
+will produce a rule two-thirds the width and \verb"\fullhline" will
+produce a rule the full width of a page;
+ \item Additional vertical space is inserted on either side of a rule;
+ \item Vertical lines are not produced.
+\end{enumerate}
+%
+Commands to redefine quantities such as \verb"\arraystretch" should be
+omitted.
+For example, Table~\ref{symbols} is produced using the following
+commands:
+%
+\begin{verbatim}
+\begin{table}
+ \caption{Index of Symbols}
+ \begin{tabular}{@{}ll@{}}
+ \hline
+ Symbol\hspace{1cm} & Meaning \\
+ \hline
+ $\leadsto$ & \hbox{Rule closure constructor} \\
+ $\bigtriangleup$ & \hbox{Substitution sum} \\
+ $\cdot$ & \hbox{Substitution composition} \\
+ $\sqcup$ & \hbox{Substitution join} \\
+ $\bot$ & \hbox{Coherence relation} \\
+ $-^n$ & \hbox{Substitution operator
+ (exponent)} \\
+ $W_n(-,-)$ & \hbox{Substitution operator
+ (Whale)} \\
+ $T_n(-,-,-)$ & \hbox{Substitution operator
+ (Turtle)} \\
+ \hline
+ \end{tabular}
+ \label{symbols}
+\end{table}
+\end{verbatim}
+
+\subsubsection{Continued captions}
+
+If a table or figure will not fit onto a single page and has to broken into
+more than one part, the subsequent parts should have a `continued' caption.
+To achieve
+this, use \verb"\contcaption" instead of \verb"\caption", in the subsequent
+figure or table environments. The \verb"\contcaption" uses exactly the same
+syntax as the normal \verb"\caption" command, except it does not step
+the counter.
+
+\subsection{Displayed Mathematics}
+
+The FAC style will set displayed mathematics with the correct indent
+provided you use the \LaTeX\ standard of open and closed square brackets
+as delimiters. The following equation
+ \[ \sum_{i=1}^p \lambda_i = {\rm trace}({\bf S}) \]
+was typeset in the FAC style using the commands:
+\begin{verbatim}
+ \[ \sum_{i=1}^p \lambda_i = {\rm trace}({\bf S}) \]
+\end{verbatim}
+Note the difference between the positioning of this equation and of
+the following centred equation
+ $$ \alpha_{j+1} > \bar{\alpha}+ks_{\alpha} $$
+which was (wrongly) typeset using double dollars as follows:
+\begin{verbatim}
+ $$ \alpha_{j+1} > \bar{\alpha}+ks_{\alpha} $$
+\end{verbatim}
+
+\subsection{Bibliography}
+
+References to published literature should be quoted in text by an
+abbreviation in square brackets of name(s) (three letters) and date (two
+digits). See examples below for style.
+This is consistent with the Bib\TeX\ bibliography style `\verb"alpha".'
+Where more than one reference is cited having the author(s) and date, the
+letters a,b,c, \ldots\ should follow the date (\eg [Smi88a], [Smi88b],
+\etc.). References should be listed in \verb"thebibliography" environment
+alphabetically by author(s)' name(s) and then by year if the same author
+has several papers.
+
+The following listing shows some references prepared in the style of the
+journal:
+%
+\begin{verbatim}
+ \begin{thebibliography}{Lam86}
+ \bibitem[But81]{But:Copy}
+ Butcher, J.:
+ {\em Copy-editing: The Cambridge Handbook.}
+ Cambridge University Press, 1981.
+
+ \bibitem[Chi69]{Chicago}
+ {\em The Chicago Manual of Style.}
+ University of Chicago Press, Chicago 60637, USA, 1982.
+
+ \bibitem[For84]{For:Program}
+ Forgaard, R.:
+ A Program for Generating and Analyzing Term Rewriting
+ Systems,
+ Master's Thesis, MIT Lab. for Computer Science, 1984.
+
+ \bibitem[JLR82]{Jou:Recursive}
+ Jouannaud, J. P., Lescanne, P. and Reinig, F.:
+ Recursive Decomposition Ordering,
+ {\em Proc.\ Conf. on Formal Description of Programming
+ Concepts II}, \,pp.\ 331--346, 1982.
+
+ \bibitem[Lam86]{Lam:LaTeX}
+ Lamport, L.:
+ {\em LaTeX: A Document Preparation System.}
+ Addison-Wesley, New York, 1986.
+
+ \bibitem[Ped85]{Ped:Obtaining}
+ Pederson, J.:
+ Obtaining Complete Sets of Reproductions and Equations
+ without Using Special Unification Algorithms.
+ Unpublished manuscript, 1985.
+
+ \bibitem[PeS81]{Pet:Complete}
+ Peterson, G. E. and Stickel, M. E.:
+ Complete Sets of Reductions for Some Equational
+ Theories. {\em J.\ ACM}, {\bf 28}, 223--264 (1981).
+ \end{thebibliography}
+\end{verbatim}
+%
+This produces the following references:
+%
+\begin{thebibliography}{Lam86}
+%
+\bibitem[But81]{But:Copy}
+Butcher, J.:
+{\em Copy-editing: The Cambridge Handbook.}
+Cambridge University Press, 1981.
+
+\bibitem[Chi69]{Chicago}
+{\em The Chicago Manual of Style.}
+University of Chicago Press, Chicago 60637, USA, 1982.
+
+\bibitem[For84]{For:Program}
+Forgaard, R.:
+A Program for Generating and Analyzing Term Rewriting Systems,
+Master's Thesis, MIT Lab. for Computer Science, 1984.
+
+\bibitem[JLR82]{Jou:Recursive}
+Jouannaud, J. P., Lescanne, P. and Reinig, F.:
+Recursive Decomposition Ordering,
+{\em Proc.\ Conf. on Formal Description of Programming Concepts
+II}, \,pp.\ 331--346, 1982.
+
+\bibitem[Lam86]{Lam:LaTeX}
+Lamport, L.:
+{\em LaTeX: A Document Preparation System.}
+Addison-Wesley, New York, 1986.
+
+\bibitem[Ped85]{Ped:Obtaining}
+Pederson, J.:
+Obtaining Complete Sets of Reproductions and Equations without Using
+Special Unification Algorithms. Unpublished manuscript, 1985.
+
+\bibitem[PeS81]{Pet:Complete}
+Peterson, G. E. and Stickel, M. E.:
+Complete Sets of Reductions for Some Equational Theories. {\em J.\ ACM},
+{\bf 28}, 223--264 (1981).
+%
+\end{thebibliography}
+
+\ifCUPmtlplainloaded
+\newpage
+\appendix
+\section{Notes for editors}
+
+This appendix contains additional information which may be useful to those
+who are involved with the final production stages of an article. Authors,
+who are generally not typesetting the final pages in the journal's correct
+typeface (Monotype Times), do not need this information.
+
+\subsection{Catchline commands}
+
+To be placed in the preamble:
+\begin{itemize}
+\item \verb"\pubyear{}"
+\item \verb"\volume{}"
+\item \verb"\pagerange{}"
+\end{itemize}
+
+\subsection{New and changed things}
+
+\subsubsection{\tt FAClogo.sty}
+
+The \verb"faclogo" style option has been modified for use in electronic papers
+(Computer Modern) as well as in the production typeface (Monotype Times).
+The correct fonts are automatically selected.
+Do not use the old \verb"CMLOGO.STY".
+
+\subsubsection{Short communications}
+
+The modifications made by the old style file \verb"newtitle.sty" have been
+built into the main style file (\verb"FAC.sty"). To activate this option you
+have to place \verb"\shortcom" in the preamble of the article. Then you have
+to add the `edited by' information with the \verb"\editor{}" command.
+Do not use \verb"newtitle.sty".
+
+\subsubsection{Forthcoming events}
+
+The old version(s) of the style file ($<$v1.2), required the use of
+\verb"fac2col.sty", to allow two-column mode (which is normally disaabled
+in FAC). The main style file has an new document option \verb"forthevt",
+which automatically allows FAC to use two-column and loads the extra
+\verb"facevent.sty". You should not load \verb"facevent" yourself.
+The \verb"fac2col.sty" option should not be used.
+
+
+\newcommand\lra{\quad\longrightarrow\quad}
+
+\section{Macros provided by {\tt FACsym.sty}}
+
+\subsection{Automatic font/character changes}
+
+\begin{itemize}\itemsep=6pt
+\item The \verb|\le|, \verb|\leq|, \verb|\ge|, \verb|\geq| commands
+use the equivalent AMS slanted symbols:
+\[
+\oldle \oldleq \oldge \oldgeq
+ \lra
+\le \leq \ge \geq
+\]
+The normal characters can be obtained by using the \verb|\old| form
+(\eg \verb|\oldge|).
+
+\item The \verb"\normalsize" size is fully loaded, so that all font styles
+should work in text, script and scriptscript sizes.
+\end{itemize}
+
+\subsection{Additional fonts}
+
+\begin{itemize}\itemsep=6pt
+\item The complete (v1) AMS symbols are available using the normal names:
+\[
+\hbox{\verb"\boxdot \boxplus \boxtimes"} \lra
+ \boxdot \boxplus \boxtimes
+\]
+
+\item Blackboard bold:
+\[
+\hbox{\verb"$\Bbb{ABC}$"} \lra \Bbb{ABC}
+\]
+
+\item Fraktur/Gothic:
+\[
+ \hbox{\verb"$\frak{ABC}$"} \lra \frak{ABC}
+\]
+
+\item Monotype Script and bold Script:\\[6pt]
+\verb" $\mathscr{ABCabc}$ " $\lra \mathscr{ABCabc}$\\
+\verb" $\mathbscr{ABCabc}$" $\lra \mathbscr{ABCabc}$\\[6pt]
+You may still use \verb"\cal" to obtain upper-case Script characters.
+
+\item Bold math italic/symbols are provided by the \verb"\bmath" macro.
+\verb"FACsym" also defines most of the
+symbols from Appendix F of the \TeX book. These can be obtained by using
+their normal (unbold) symbol name prefixed with a `b'. \eg \verb|\nabla|
+becomes \verb|\bnabla|. The only exception to this rule is \verb|\eta|,
+which whould lead to a clash with \verb|\beta|. In this case use
+\verb|\boldeta| for bold eta.
+
+\item Upright Greek: The \verb"\upmath" and \verb"\bupmath" macros are provided to obtain
+upright lowercase Greek characters.\\[6pt]
+%
+\verb" $\upmath{\alpha}$" $\lra \upmath{\alpha}$ \qquad
+\verb"$\bupmath{\alpha}$" $\lra \bupmath{\alpha}$
+
+\item Sans serif symbols:
+The \verb"\sf" command changes the typeface to sans serif, giving upright characters.
+Occasionally, bold-sloping sans serif is needed. You should use the following supplied
+macros to obtain these fonts.\\[6pt]
+%
+\verb" {\sf text} " $\lra$ {\sf text}
+ \qquad \verb"${\sf math}$ " $\lra {\sf math}$\\
+\verb" \textsfi{text} " $\lra$ \textsfi{text}
+ \qquad \verb"$\mathsfi{math}$ " $\lra \mathsfi{math}$\\
+\verb" \textsfb{text} " $\lra$ \textsfb{text}
+ \qquad \verb"$\mathsfb{math}$ " $\lra \mathsfb{math}$\\
+\verb" \textsfbi{text}" $\lra$ \textsfbi{text}
+ \qquad \verb"$\mathsfbi{math}$" $\lra \mathsfbi{math}$\\[6pt]
+
+\end{itemize}
+
+\section{Producing electronic versions of papers}
+
+If an electronic version of a paper is required, this is normally supplied
+to the customer as a PostScript file. As we are not allowed to re-distribute
+PostScript Type~1 font data to other people (for licensing reasons), we must
+be very careful what we supply.
+
+The source files for electronic articles should be stored away from the normal
+printed articles in the \verb"ELECTRON" directory in the FAC work area.
+
+An electronic article should be printable using the old (TR)DVIPS PostScript driver
+-- if it isn't please seek help.
+The electronic article should only use Computer Modern fonts and/or AMS v2.0 symbol
+fonts (any other bitmap fonts generated with {\sf MetaFont} are also allowed).
+You can use the DVIWindo `Fonts/DVI File Fonts' (or CTRL-K) function to check this.
+If your are in any doubt about the fonts used -- again seek advice.
+
+Before proceeding ensure that the article has been \TeX'ed three times, and there
+are no reference problems. Then use TRDVIPS to generate the PostScript file:
+\begin{verbatim}
+ trdvips -V <filename>
+\end{verbatim}
+During the generation of the PostScript, TRDVIPS may automatically call
+MetaFont to produce the required bitmap fonts. When the process has finished,
+if there are still error messages -- seek help. The \verb"-V" option tells
+TRDVIPS to generate a PostScript file containing only bitmap fonts (at the
+300dpi default resolution).
+
+If no further error messages are given, you can run TRDVIPS once again (as above)
+to ensure that the generated PostScript is complete.
+
+Finally, place the final \verb".ps" file on to a PC 3$\frac{1}{2}$
+floppy disk. You may need to use the ZIP program to compress the file,
+if it is too large. e.g.
+\begin{verbatim}
+ zip -9 <zipfile> <PostScript file>
+\end{verbatim}
+e.g.
+\begin{verbatim}
+ zip -9 fac264 fac264.ps
+\end{verbatim}
+Will produce \verb"fac264.zip", which should then be copied to the floppy disk.
+
+Remember to remove any \verb".zip" and \verb".ps" file(s) you have generated
+from the job directory when you have finished.
+\fi
+
+\label{lastpage}
+
+\end{document}
diff --git a/obsolete/macros/latex209/contrib/lgraph/lgraph.p b/obsolete/macros/latex209/contrib/lgraph/lgraph.p
new file mode 100644
index 0000000000..2029add6f8
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/lgraph/lgraph.p
@@ -0,0 +1,457 @@
+(**************************************************************************)
+(* This program simulates a graph environment for LaTeX. Using a list of *)
+(* parameters, it generates LaTeX commands to produce a complete graph. *)
+(* see the latexgraph.doc file for detailed documentation. *)
+(* author:Sunil Podar, podar@sbcs.csnet, ...!{allegra,philabs}!sbcs!podar *)
+(* Please quote the following date when sending bug reports. *)
+(* last update: Feb 2, 1987 (fixed bugs: wasn't doings things right when *)
+(* (0,0) was not on the graph. Also removed the printing of *)
+(* a few of the margin commands from preamble. *)
+(* last update: Oct 5, 1986 *)
+(**************************************************************************)
+program main (input,output);
+const delim = '@'; (* Latex never uses @ except for \@ for a little *)
+ (* space before a sentence-ending period *)
+ maxchar = 'F';(* maximum types of characters permitted for plotchar*)
+ (* A..F i.e. 6 distinct chars permitted *)
+type wholeline = packed array[1..80] of char;
+ tenchar = packed array[1..10] of char;
+ ninechar = packed array[1..9] of char;
+ twochar = packed array[1..2] of char;
+ plotstufftype = record
+ chardef : wholeline;
+ charname : wholeline
+ end;
+var
+ plotstuff : array['A'..maxchar] of plotstufftype;
+ error1,itsreal :boolean;
+ picwd,picht,pos,Xdeltabar,
+ Ydeltabar,i,Xlegloc,Ylegloc,Xdeltanum,Ydeltanum : integer;
+ Xaxisstrg,Yaxisstrg,capstring,blank80,labelname,fontname : wholeline;
+ legendloc,captiontwo,prepost : twochar;
+ string,blank10,captiontype,fignumber : tenchar;
+ plotchar,c : char;
+ string9 : ninechar;
+ Xscalegraph,Yscalegraph : integer;
+ XGorig,YGorig,XP1orig,YP1orig,XP2orig,YP2orig : integer;
+ Xscalereal,Yscalereal,xreality, yreality, xgraph, ygraph,
+ unitlngth,textwd,Xorignum,Yorignum,deln,num : real;
+
+procedure strreadline(var commandstr: wholeline);
+var charac:char;
+ i : integer;
+ endoffile, endofline:boolean;
+begin
+ i:=1;
+ endoffile :=false;
+ endofline:=false;
+ commandstr:=blank80;
+ repeat
+ read(charac);
+ if (i < 80) then commandstr[i] := charac; (* 80th char remains @ *)
+ i := i+1;
+ if eof then endoffile :=true
+ else if eoln then endofline :=true
+ until (endoffile or endofline);
+ if (i <= 80) then commandstr[i] := delim;
+ if not endoffile then readln
+end; (*strreadline*)
+
+procedure strreadword(var string: tenchar; var string9: ninechar);
+var charac:char;
+ i : integer;
+begin
+ i:=1;
+ string:=blank10;
+ read(charac);
+ repeat
+ string[i] := charac;
+ read(charac);
+ i := i+1
+ until ((charac = '/') or (charac = ' ') or (i > 10) or eoln);
+ (* so I'm reading the / without assigning it to string, neat *)
+ if (eoln and (i <=10)) then string[i]:= charac;
+ (* a kluge, to capture the last charac when using this procedure to *)
+ (* read the argument. normally I use it only for parameters. *)
+ for i:= 1 to 9 do string9[i] := string[i]
+end; (*strreadword*)
+
+procedure strwrite(str: wholeline);
+var i : integer;
+begin
+i := 1;
+while (str[i] <> delim) do
+ begin
+ write(str[i]); i := i+1
+ end
+end;
+
+procedure legendread;
+var i : integer;
+ temp : twochar;
+begin
+ temp := ' ';
+ legendloc := ' '; i := 0;
+ if (not eoln) then
+ repeat
+ i := i+1; read(legendloc[i]);
+ until (eoln) or (i >= 2) or (legendloc[i] = '/');
+ if (not eoln) then if (legendloc[i] <> '/') then read(temp[1]);
+ if (temp[1] = '/') or (legendloc[i] = '/')
+ then readln(Xlegloc,Ylegloc)
+ else readln
+end; (* legendread *)
+
+(* in the following procedures, the boolean var XorY: true => X & false => Y*)
+procedure putbars(XorY:boolean; Xpos, Ypos, deltabar, distance: integer);
+var times: integer;
+begin
+ times := distance div abs(deltabar);
+ if times > 0 then
+ if XorY (* X *)
+ then writeln('\multiput(',Xpos:1,',',Ypos:1,')(',
+ deltabar:1,',0){',times:1,'}{\line(0,1){2}}')
+ else writeln('\multiput(',Xpos:1,',',Ypos:1,')(0,',
+ deltabar:1,'){',times:1,'}{\line(1,0){2}}');
+end; (* putbars *)
+
+(* see a note about putnumbers in the main program. *)
+(* because we may have real numbers, we can't use a counter *)
+(* in conjunction with a \multiput statement. *)
+procedure putnumbers(XorY:boolean; fixedpos, initpos:integer;
+ initnum, deln:real; deltanum:integer; limit:real);
+var pos: integer;
+ num: real;
+begin
+ num:=initnum; pos:= initpos;
+ if (abs(num) - round(abs(num) - 0.5)) > 0 then itsreal := true;
+ while abs(pos) < abs(limit) do
+ begin
+ if XorY then (* X *)
+ write('\put(',pos:1,',',fixedpos:1,'){\makebox(0,0)[t]{')
+ else write('\put(',fixedpos:1,',',pos:1,'){\makebox(0,0)[r]{');
+ if itsreal then writeln(num:1:2,'}}')
+ else writeln(trunc(num):1,'}}');
+ pos := pos + deltanum;
+ num := num + deln
+ end;
+end; (* putnumbers *)
+
+begin(* main *)
+ (*----------------------------------*)
+ (* Initializations & default values *)
+ (*----------------------------------*)
+ error1 := false;
+ itsreal:=false;
+ for i := 1 to 10 do blank10[i] := ' ';
+ for i := 1 to 79 do blank80[i] := ' '; blank80[80] := delim;
+ captiontype := blank10; captiontype := 'no '; (*default 'no' *)
+ fignumber := blank10;
+ fontname := blank80; (* just playing it safe *)
+ fontname := '{normalsize}'; fontname[13] := delim;
+ labelname := blank80; labelname[1] := 'n'; (* default 'no' *)
+ prepost := 'no';
+ unitlngth := 1.0;
+ picwd := 100; picht := 100; XP1orig := 0; YP1orig := 0;
+ legendloc := 'no';
+ Xscalegraph := 10; Xscalereal := 10;
+ Yscalegraph := 10; Yscalereal := 10;
+ Xdeltabar := 5; Xdeltanum := 10;
+ Ydeltabar := 5; Ydeltanum := 10;
+ Xorignum := 0;
+ Yorignum := 0;
+ for c := 'A' to maxchar do
+ begin
+ plotstuff[c].chardef[1] := 'n'; (* default value is 'no' *)
+ plotstuff[c].charname := blank80;
+ plotstuff[c].charname[1] := c;
+ plotstuff[c].charname[2] := delim
+ end;
+ Xlegloc := -999999;
+ Ylegloc := -999999;
+ strreadword(string, string9);
+ while string <> '%%%%%%%%%%' do
+ begin
+ if string = '%pre&post?' then readln(prepost[1])
+ else if string = '%unitlngth' then readln(unitlngth)
+ else if string = '%font-name' then strreadline(fontname)
+ else if string = '%picdimens' then readln(picwd,picht,XP1orig,YP1orig)
+ else if string = '%??caption' then begin
+ strreadword(captiontype, string9);
+ readln
+ end
+ else if string = '%fignumber' then begin
+ strreadword(fignumber, string9);
+ readln
+ end
+ else if string = '%Xaxisstrg' then strreadline(Xaxisstrg)
+ else if string = '%Yaxisstrg' then strreadline(Yaxisstrg)
+ else if string = '%capstring' then strreadline(capstring)
+ else if string = '%labelname' then strreadline(labelname)
+ else if string = '%legendloc' then legendread
+ else if string = '%Xdeltab:n' then readln(Xdeltabar,Xdeltanum)
+ else if string = '%Xoriginum' then readln(Xorignum)
+ else if string = '%Ydeltab:n' then readln(Ydeltabar,Ydeltanum)
+ else if string = '%Yoriginum' then readln(Yorignum)
+ else if string = '%Xratiog:r' then readln(Xscalegraph,Xscalereal)
+ else if string = '%Yratiog:r' then readln(Yscalegraph,Yscalereal)
+ else if string9 = '%plotchar' then
+ strreadline(plotstuff[string[10]].chardef)
+ else if string9 = '%plotname' then
+ strreadline(plotstuff[string[10]].charname)
+ else begin
+ readln;writeln;
+ writeln('**********************************************');
+ writeln('error: unknown string: "',string,'"');
+ writeln('**********************************************');
+ error1:=true
+ end;
+ string := blank10;
+ strreadword(string, string9)
+ end; (* while *)
+ readln; (* this readln is to finish reading the %%%%%.. line*)
+
+ (* THE FUN BEGINS HERE *)
+ if not error1 then
+ begin
+ textwd := picwd*unitlngth + 15.0; (* in mm *)
+ if (textwd < 170) then textwd := 170;
+ if textwd >240
+ then begin
+ writeln('% *****************************************************');
+ writeln('% max-possible-picwd is about 240mm which will have ');
+ writeln('% to be in Landscape. You''ll have to reduce scales.');
+ writeln('% *****************************************************')
+ end
+ else if textwd > 170 then
+ begin
+ writeln('% *****************************************************');
+ writeln('% THIS TEXT IS A BIT TOO WIDE FOR VERTICAL PAPER MODE.');
+ writeln('% YOU WILL HAVE TO USE LANDSCAPE MODE TO PRINT.');
+ writeln('% *****************************************************')
+ end;
+
+ if prepost[1] = 'y' then
+ begin
+ writeln('\documentstyle{article}');
+ writeln('\setlength{\textwidth}{',textwd:1:2,'mm}');
+ writeln('\pagestyle{empty} % => no page number ');
+ writeln('\begin{document}');
+ writeln;
+ end; (* end prepost *)
+
+ write('\newcommand{\xaxis}{'); strwrite(Xaxisstrg);
+ writeln('} % the literal for X-axis');
+ write('\newcommand{\yaxis}{'); strwrite(Yaxisstrg);
+ writeln('} % the literal for Y-axis');
+ c := 'A';
+ while (plotstuff[c].chardef[1] <> 'n') and (c <= maxchar) do
+ begin
+ write('\newcommand{\pchar',c,'}');
+ strwrite(plotstuff[c].chardef); writeln;
+ c := chr(ord(c) + 1)
+ end;
+ writeln;
+ write('\begin'); strwrite(fontname); writeln; (* fontname contains braces*)
+ writeln('\begin{figure}[p] %you might want different options here');
+
+ (* XGorig & YGorig refer to the origin of the graph. *)
+ (* XP1orig & YP1orig refer to the bottom-left origin of the picture box.*)
+ (* XP2orig & YP2orig refer to the bottom-right corner of the picture box.*)
+ (* see if (0,0) is on the graph or not *)
+ XGorig := 0; YGorig := 0;
+ if XP1orig >= 0 then XGorig := XP1orig
+ else if (picwd + XP1orig) < 0 then XGorig := XP1orig + picwd;
+ if YP1orig >= 0 then YGorig := YP1orig
+ else if (picht + YP1orig) < 0 then YGorig := YP1orig + picht;
+ XP2orig := picwd + XP1orig;
+ YP2orig := picht + YP1orig;
+ writeln('\unitlength = ',unitlngth:1:2,'mm');
+ writeln('\begin{center}');
+ writeln('\begin{picture}(',(picwd+10):1,',',(picht+10):1,')(',
+ (XP1orig-5):1,',',(YP1orig-5):1,')');
+ (* need a box of +10 on both axes to account for -10 origins & to *)
+ (* get proper centering *)
+ writeln('\thicklines');
+ (* plot the horizontal axis *)
+ if (XP2orig - XGorig) > 0 then
+ begin
+ writeln('\put(',XGorig:1,',',YGorig:1,'){\vector(1,0){',
+ abs(XP2orig-XGorig):1,'}}');
+ writeln('\put(',(XP2orig+2):1,',',YGorig:1,'){\makebox(0,0)[l]{X}}')
+ end;
+ if (XGorig - XP1orig) > 0 then
+ begin
+ writeln('\put(',XGorig:1,',',YGorig:1,'){\vector(-1,0){',
+ abs(XGorig-XP1orig):1,'}}');
+ writeln('\put(',(XP1orig-2):1,',',YGorig:1,
+ '){\makebox(0,0)[r]{X}}')
+ end;
+ (* plot the vertical axis *)
+ if (YP2orig - YGorig) > 0 then
+ begin
+ writeln('\put(',XGorig:1,',',YGorig:1,'){\vector(0,1){',
+ abs(YP2orig-YGorig):1,'}}');
+ writeln('\put(',XGorig:1,',',(YP2orig+2):1,'){\makebox(0,0)[b]{Y}}')
+ end;
+ if (YGorig - YP1orig) > 0 then
+ begin
+ writeln('\put(',XGorig:1,',',YGorig:1,'){\vector(0,-1){',
+ abs(YGorig-YP1orig):1,'}}');
+ writeln('\put(',XGorig:1,',',(YP1orig-2):1,
+ '){\makebox(0,0)[t]{Y}}')
+ end;
+ writeln('\thinlines');
+
+ (*********************************************************************)
+ (*the following put numbers & bars along X-axis and Y-axis *)
+ (*********************************************************************)
+ putbars(true,XGorig,(YGorig-1),Xdeltabar,abs(XP2orig-XGorig));
+ putbars(true,XGorig,(YGorig-1),-Xdeltabar,abs(XGorig-XP1orig));
+ putbars(false,(XGorig-1),YGorig,Ydeltabar,abs(YP2orig-YGorig));
+ putbars(false,(XGorig-1),YGorig,-Ydeltabar,abs(YGorig-YP1orig));
+
+(* Before invoking putnumbers, we must explicitly check if it needs to
+ be invoked at all. This is because in the procedure putnumbers I use
+ absolute values as the stopping condition for while loop.
+ We use absolute values in the procedure so as to handle plotting
+ numbers on both the positive and negative halves of the axes.
+ deln below represents the delta graph units corresponding to X|Ydeltanum.
+*)
+ writeln('% Add a line similar to next one if number at origin desired.');
+ deln := (Xscalereal*Xdeltanum) / Xscalegraph;
+ pos := XGorig + Xdeltanum; num:=Xorignum + deln;
+ if pos < XP2orig then
+ putnumbers(true,(YGorig-2),pos,num,deln,Xdeltanum,XP2orig);
+ pos := XGorig - Xdeltanum; num:=Xorignum - deln;
+ if pos > XP1orig then
+ putnumbers(true,(YGorig-2),pos,num,-deln,-Xdeltanum,XP1orig);
+
+ deln := ( Yscalereal*Ydeltanum) / Yscalegraph;
+ pos := YGorig + Ydeltanum; num:=Yorignum + deln;
+ if pos < YP2orig then
+ putnumbers(false,(XGorig-2),pos,num,deln,Ydeltanum,YP2orig);
+ pos := YGorig - Ydeltanum; num:=Yorignum - deln;
+ if pos > YP1orig then
+ putnumbers(false,(XGorig-2),pos,num,-deln,-Ydeltanum,YP1orig);
+
+ (***********************)
+ (* put the legend box *)
+ (***********************)
+ if (legendloc <> 'no') then
+ begin (* and if it is then obviously do nothing *)
+ if (Xlegloc = -999999) and (Ylegloc = -999999) then
+ begin (* implies explicit coordinates not specified *)
+ (* if they are then they are set in legendread *)
+ Xlegloc := picwd div 2; (* default is center *)
+ Ylegloc := picht div 2; (* default is center *)
+ if (legendloc[1] = 't') or (legendloc[2] = 't')
+ then if YP2orig > 0 then Ylegloc := picht else Ylegloc := picht-10;
+ if (legendloc[1] = 'b') or (legendloc[2] = 'b')
+ then if YP1orig >= 0 then Ylegloc := 10 else Ylegloc := 0;
+ if (legendloc[1] = 'l') or (legendloc[2] = 'l')
+ then if XP1orig >= 0 then Xlegloc := 10 else Xlegloc := 0;
+ if (legendloc[1] = 'r') or (legendloc[2] = 'r')
+ then if XP2orig > 0 then Xlegloc := picwd else Xlegloc := picwd-10;
+ Xlegloc := Xlegloc + XP1orig;
+ Ylegloc := Ylegloc + YP1orig
+ end;
+
+ write('\put(',Xlegloc:1,',',Ylegloc:1,'){\makebox(0,0)');
+ i:= 1; write('[');
+ while (i <= 2) do
+ begin
+ if (legendloc[i] <> ' ') and (legendloc[i] <> '/') then
+ write(legendloc[i]);
+ i:=i+1
+ end;
+ write(']');
+ writeln('{\fbox{\shortstack[l]{');
+ c:='A';
+ while (plotstuff[c].chardef[1] <> 'n') and (c <= maxchar) do
+ begin
+ write(' {\makebox(4,2)[lb]{\put(2,1){\pchar',c,'}}}: ');
+ strwrite(plotstuff[c].charname); writeln('\\');
+ c := chr(ord(c) + 1)
+ end;
+ writeln(' {\makebox(4,4)[b]{X}}: \xaxis \\');
+ writeln(' {\makebox(4,2)[b]{Y}}: \yaxis');
+ writeln(' }}}}')
+ end; (* not 'no' of legendloc*)
+
+ (* put the caption if explicit *)
+ captiontwo[1]:=capstring[1];
+ captiontwo[2]:=capstring[2];
+ if captiontype[1] = 'e' then (* "e"xplicit, anything else other than *)
+ (* "L" for LaTeX => no *)
+ if captiontwo = 'YX' then
+ begin
+ writeln('% if the caption line is longer than the graphwidth, comment');
+ writeln('% out the second line and use first one. you might have to');
+ writeln('% fiddle with the width of parbox in the second stmt.');
+ write('%\put(',XP1orig:1,',',(YP1orig-18):1,
+ '){\makebox(',picwd:1,',0)[tl]{');
+ writeln('Figure ',fignumber,'$\!$: \parbox[t]{',(textwd-32):1:1,'mm}{%');
+ write('\put(',XP1orig:1,',',(YP1orig-18):1,
+ '){\makebox(',picwd:1,',0)[t]{');
+ writeln('Figure ',fignumber,'$\!$: {%');
+ writeln('%\yaxis\ vs.\ \xaxis}}}')
+ end
+ else (* means explicit string is specified *)
+ begin
+ write('%\put(',XP1orig:1,',',(YP1orig-18):1,
+ '){\makebox(',picwd:1,',0)[tl]{');
+ writeln('Figure ',fignumber,'$\!$: \parbox[t]{',(textwd-32):1:1,'mm}{%');
+ write('\put(',XP1orig:1,',',(YP1orig-18):1,
+ '){\makebox(',picwd:1,',0)[t]{');
+ writeln('Figure ',fignumber,'$\!$: {%');
+ strwrite(capstring); writeln;
+ writeln('}}}');
+ end;
+
+ writeln('% beginning of data');
+ while not eof do
+ begin
+ readln(plotchar,xreality,yreality);
+ xgraph := (xreality*Xscalegraph)/Xscalereal;
+ ygraph := (yreality*Yscalegraph)/Yscalereal;
+ writeln('\put(',xgraph:1:5,',',ygraph:1:5,'){\pchar',plotchar,'}')
+ end;
+ writeln('% end of data');
+ writeln('\end{picture}');
+ writeln('\end{center}');
+
+ (* put the LaTeX \caption if so specified *)
+ if captiontype[1] = 'L' then (* "L"aTeX . if it is not = 'L' or 'e'*)
+ (* then interpreted as 'no' *)
+ begin
+ writeln('% if the caption line is longer than the graphwidth,use a');
+ writeln('% \parbox[t]{...mm}{.......} like statement for the argument');
+ writeln('% with suitable args for parbox to get things centered.');
+ if captiontwo = 'YX'
+ then begin
+ writeln('% You might want to add a [] to \caption below.');
+ writeln('\caption{\protect\normalsize \yaxis\ vs.\ \xaxis }')
+ end
+ else begin
+ writeln('\caption{\protect\normalsize ');
+ strwrite(capstring); writeln;
+ writeln('}')
+ end;
+ if labelname[1] = '{' then (* anything else => 'no' *)
+ begin
+ write('\label'); strwrite(labelname); writeln
+ (* labelname contains the braces *)
+ end
+ end;
+
+ writeln('\end{figure}');
+ writeln; (* a blank line is supposedly needed before \end fontname *)
+ (* so says the latex manual *)
+ write('\end'); strwrite(fontname); writeln; (* fontname contains braces *)
+ writeln;
+
+ if prepost[1] = 'y' then
+ writeln('\end{document}');
+ end (* not error1 *)
+end.
diff --git a/obsolete/macros/latex209/contrib/lgraph/lgraph.skel b/obsolete/macros/latex209/contrib/lgraph/lgraph.skel
new file mode 100644
index 0000000000..23e1fb1b20
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/lgraph/lgraph.skel
@@ -0,0 +1,32 @@
+%pre&post?/yes
+%unitlngth 1.0
+%font-name/{footnotesize}
+%picdimens 140 120 -70 -60
+%Xaxisstrg/Number of Hops.
+%Yaxisstrg/\%age of Hops
+%??caption/explicit
+%fignumber/1-1
+%capstring/Half-Length of Symmetric Intervals as \%-age of Lifetime means
+%labelname/{my-graph-1}
+%legendloc/tr
+%Xratiog:r 10 10
+%Xdeltab:n 5 10
+%Xoriginum 0
+%Yratiog:r 10 10
+%Ydeltab:n 5 10
+%Yoriginum 0
+%plotcharA/{\circle*{1.0}}
+%plotnameA/Message Switching
+%plotcharB/{\makebox(0,0){$\otimes$}}
+%plotnameB/Circuit Switching
+%plotcharD/no
+%plotcharE/no
+%%%%%%%%%%
+A 20 20
+A 20 -20
+A -20 20
+A -20 -20
+B 30 10
+B 30 -10
+B -30 10
+B -30 -10
diff --git a/obsolete/macros/latex209/contrib/misc/10pt.sty b/obsolete/macros/latex209/contrib/misc/10pt.sty
new file mode 100644
index 0000000000..661bd79c25
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/misc/10pt.sty
@@ -0,0 +1,7 @@
+%%% Save file as: 10pt.sty Source: FILESERV@SHSU.BITNET
+%%% The following checksum includes all SHSU-generated topmatter.
+%%% checksum = "57724 7 44 319"
+% A simple style file to give you 10pt text. It does nothing but makes
+% \documentstyle[10pt]{article}
+% equivalent to
+% \documentstyle{article}
diff --git a/obsolete/macros/latex209/contrib/misc/9pt.sty b/obsolete/macros/latex209/contrib/misc/9pt.sty
new file mode 100644
index 0000000000..92cd1623b1
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/misc/9pt.sty
@@ -0,0 +1,126 @@
+% 9pt.sty 17-Apr-90 Patrick van der Smagt
+% changed lines are preceded by a comment marker
+%
+% Available font sizes: vpt, vipt, viipt, viiipt, ixpt, xpt,
+% xipt, xiipt, xivpt, xviipt, xxpt, xxvpt
+%
+\def\@normalsize{\@setsize\normalsize{10.8pt}\ixpt\@ixpt
+\abovedisplayskip 8pt plus2pt minus4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 5pt plus3pt
+minus3pt\let\@listi\@listI}
+%
+\def\small{\@setsize\small{9.6pt}\viiipt\@viiipt
+\abovedisplayskip 7.5pt plus 3pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2pt\belowdisplayshortskip 4pt plus2pt minus 2pt
+\def\@listi{\leftmargin\leftmargini \topsep 3pt plus 2pt minus 2pt\parsep 2pt
+plus 1pt minus 1pt
+\itemsep \parsep}}
+%
+\def\footnotesize{\@setsize\footnotesize{7.5pt}\viipt\@viipt
+\abovedisplayskip 5pt plus 2pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt\belowdisplayshortskip 3pt plus 1pt minus
+2pt
+%
+\def\@listi{\leftmargin\leftmargini \topsep 2.5pt plus 1pt minus 1pt\parsep 2pt
+plus 1pt minus 1pt
+\itemsep \parsep}}
+%
+\def\scriptsize{\@setsize\scriptsize{7.2pt}\vipt\@vipt}
+%
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+%
+\def\large{\@setsize\large{12pt}\xpt\@xpt}
+%
+\def\Large{\@setsize\Large{14.4pt}\xiipt\@xiipt}
+%
+\def\LARGE{\@setsize\LARGE{16.8pt}\xivpt\@xivpt}
+%
+\def\huge{\@setsize\huge{20.4pt}\xviipt\@xviipt}
+%
+\def\Huge{\@setsize\Huge{24pt}\xxpt\@xxpt}
+\normalsize
+
+\if@twoside \oddsidemargin 44pt \evensidemargin 82pt \marginparwidth 107pt
+\else \oddsidemargin 63pt \evensidemargin 63pt
+ \marginparwidth 90pt
+\fi
+\marginparsep 11pt
+ \topmargin 27pt \headheight 12pt \headsep 25pt \footskip 30pt
+
+\textheight = 43\baselineskip
+\advance\textheight by \topskip
+\textwidth 345pt \columnsep 10pt \columnseprule 0pt
+
+\footnotesep 6.65pt
+\skip\footins 9pt plus 4pt minus 2pt
+\floatsep 12pt plus 2pt minus 2pt \textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 12pt plus 2pt minus 2pt \@maxsep 20pt \dblfloatsep 12pt plus 2pt
+minus 2pt \dbltextfloatsep 20pt plus 2pt minus 4pt \@dblmaxsep 20pt
+\@fptop 0pt plus 1fil \@fpsep 8pt plus 2fil \@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil \@dblfpsep 8pt plus 2fil \@dblfpbot 0pt plus 1fil
+\marginparpush 5pt
+
+\parskip 0pt plus 1pt \parindent 15pt \partopsep 2pt plus 1pt minus 1pt
+\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301
+\@beginparpenalty -\@lowpenalty \@endparpenalty -\@lowpenalty \@itempenalty
+-\@lowpenalty
+
+
+\def\part{\par \addvspace{4ex} \@afterindentfalse \secdef\@part\@spart}
+\def\@part[#1]#2{\ifnum \c@secnumdepth >\m@ne \refstepcounter{part}
+\addcontentsline{toc}{part}{\thepart \hspace{1em}#1}\else
+\addcontentsline{toc}{part}{#1}\fi { \parindent 0pt \raggedright
+ \ifnum \c@secnumdepth >\m@ne \Large \bf Part \thepart \par \nobreak \fi \huge
+\bf #2\markboth{}{}\par } \nobreak \vskip 3ex \@afterheading }
+\def\@spart#1{{\parindent 0pt \raggedright
+ \huge \bf
+ #1\par} \nobreak \vskip 3ex \@afterheading }
+\def\section{\@startsection {section}{1}{\z@}{-3.5ex plus -1ex minus
+ -.2ex}{2.3ex plus .2ex}{\Large\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-3.25ex plus -1ex minus
+ -.2ex}{1.5ex plus .2ex}{\large\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-3.25ex plus
+-1ex minus -.2ex}{1.5ex plus .2ex}{\normalsize\bf}}
+\def\paragraph{\@startsection
+ {paragraph}{4}{\z@}{3.25ex plus 1ex minus .2ex}{-1em}{\normalsize\bf}}
+\def\subparagraph{\@startsection
+ {subparagraph}{4}{\parindent}{3.25ex plus 1ex minus
+ .2ex}{-1em}{\normalsize\bf}}
+
+
+\setcounter{secnumdepth}{3}
+
+\def\appendix{\par
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \def\thesection{\Alph{section}}}
+
+
+\leftmargini 25pt
+\leftmarginii 22pt \leftmarginiii 18.7pt \leftmarginiv 17pt \leftmarginv 10pt
+\leftmarginvi 10pt
+\leftmargin\leftmargini
+\labelsep 5pt
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+%
+\def\@listI{\leftmargin\leftmargini \parsep 3.5pt plus 2pt minus 1pt\topsep 6pt
+plus 1pt minus 3pt\itemsep 2.5pt plus 2pt minus 1pt}
+\let\@listi\@listI
+\@listi
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+%
+ \topsep 3.5pt plus 2pt minus 1pt
+ \parsep 2pt plus 1pt minus 1pt
+ \itemsep \parsep}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2pt plus 1pt minus 1pt
+ \parsep \z@ \partopsep 1pt plus 0pt minus 1pt
+ \itemsep \topsep}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
diff --git a/obsolete/macros/latex209/contrib/misc/a4wide.sty b/obsolete/macros/latex209/contrib/misc/a4wide.sty
new file mode 100644
index 0000000000..2985221f9b
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/misc/a4wide.sty
@@ -0,0 +1,36 @@
+%
+% "moretext" document style option.
+% Jean-Francois Lamy, July 86
+%
+% Redefines the margins so that they are more in line with
+% what we are used to see.
+%
+
+\input a4.sty
+
+\ifcase \@ptsize
+ % mods for 10 pt
+ \oddsidemargin 0.15 in % Left margin on odd-numbered pages.
+ \evensidemargin 0.35 in % Left margin on even-numbered pages.
+ \marginparwidth 1 in % Width of marginal notes.
+ \oddsidemargin 0.25 in % Note that \oddsidemargin = \evensidemargin
+ \evensidemargin 0.25 in
+ \marginparwidth 0.75 in
+ \textwidth 5.875 in % Width of text line.
+\or % mods for 11 pt
+ \oddsidemargin 0.1 in % Left margin on odd-numbered pages.
+ \evensidemargin 0.15 in % Left margin on even-numbered pages.
+ \marginparwidth 1 in % Width of marginal notes.
+ \oddsidemargin 0.125 in % Note that \oddsidemargin = \evensidemargin
+ \evensidemargin 0.125 in
+ \marginparwidth 0.75 in
+ \textwidth 6.125 in % Width of text line.
+\or % mods for 12 pt
+ \oddsidemargin -10 pt % Left margin on odd-numbered pages.
+ \evensidemargin 10 pt % Left margin on even-numbered pages.
+ \marginparwidth 1 in % Width of marginal notes.
+ \oddsidemargin 0 in % Note that \oddsidemargin = \evensidemargin
+ \evensidemargin 0 in
+ \marginparwidth 0.75 in
+ \textwidth 6.375 true in % Width of text line.
+\fi
diff --git a/obsolete/macros/latex209/contrib/misc/a5.sty b/obsolete/macros/latex209/contrib/misc/a5.sty
new file mode 100644
index 0000000000..cf619734e5
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/misc/a5.sty
@@ -0,0 +1,30 @@
+%%% ====================================================================
+%%% @LaTeX-style-file{
+%%% author = "Mario Wolczko",
+%%% version = "10",
+%%% date = "21 May 1992",
+%%% time = "20:51:10 BST",
+%%% filename = "a5.sty",
+%%% email = "mario@acm.org",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "LaTeX, A5 page size, page layout",
+%%% supported = "no",
+%%% docstring = "Sets page layout to A5 size, with equal
+%%% spaces to left, middle and right and top:side:bottom space =
+%%% 2:3:4. See also a5comb.sty, a4.sty"
+%%% }
+%%% ====================================================================
+%
+% This file is in the public domain.
+%
+% based on ratios suggested by Dick Wakefield
+
+\headheight=12truept \headsep=18truept
+\topmargin= -35.62truept % Nominal distance from top of paper to top of page
+% top paper margin of 48.72pt
+% (between top of page and top of text, excluding header)
+\textwidth=313truept
+\evensidemargin=-0.47truept \oddsidemargin=-35.77truept
+\textheight=426truept % 10pt only (\baselineskip=12pt)
+
+\footskip=36truept \footheight=12truept
diff --git a/obsolete/macros/latex209/contrib/misc/algorithm.sty b/obsolete/macros/latex209/contrib/misc/algorithm.sty
new file mode 100644
index 0000000000..4ad31b578e
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/misc/algorithm.sty
@@ -0,0 +1,108 @@
+%%%%%%%%%%% ALGORITHMS STYLE %%%%%%%%%%%
+% This style defines an environment for algorithms with the following
+% features:
+%
+% 1) Defines an Theorem like environment (not exactly one) for
+% algorithms called ``algorithm''.
+% \begin{algorithm}{NAME} ... \end{algorithm}
+% NAME is the NAME of the algorithm.
+% Algorithms are numbered using a counter called ``algorithm''.
+%
+% 2) Inside this environment, the following commands are defined.
+%
+% \= Put the small left arrow commonly used for assignment.
+%
+% \invariant{INVARIANT} Use to describe invariants, put its parameter
+% between ``{}'' in math mode.
+%
+% \begin{Block} ... \end{Block} Environment use to start a indented
+% block of instructions \end{Block} put
+% an ``end'' to close the block.
+%
+% \nextBlock{SEPARATOR} Inside a Block, it allows to put a separator
+% of parts of the indented block. Usefull for
+% constructions like ``IF..THEN..ELSE..END''
+% i.e. If cond then
+% \begin{Block}
+% then part
+% \nextBlock{else}
+% else part
+% \end{Block}
+%
+% 3) \Blockindent and \algorithmindent are length that specify the
+% indentention of Blocks and of the algorithm resp.
+%
+% 4) Instructions are separated by ``\\'', ``\par'' or by leaving a
+% blank line. Before an ``\end{Block}'' a ``\\'' can't be used.
+%
+%
+% Created by Jose Alberto Fernandez R.
+% e-mail: alberto@cs.umd.edu
+%
+
+%
+\newcounter{algorithm}
+\newtheorem{Alg@orithm}[algorithm]{Algorithm}
+% Invariants
+\newcommand{\inv@ariant}[1]{\mbox{$\{#1\}$}}
+% Steps environment
+\newenvironment{ste@ps}[1]{
+\begin{list}{}
+{\setlength\labelsep{0in}
+\addtolength\partopsep\topsep
+\addtolength\partopsep\parsep
+\setlength\parsep{0in}
+\setlength\topsep{0in}
+\setlength\itemsep{0in}
+\setlength\labelwidth{0in}
+\setlength\rightmargin{0in}
+\setlength\leftmargin{#1}}
+}{
+\end{list}
+}
+
+% Block environment
+% Indentation of the Block
+\newlength{\Blockindent}
+% NextBlock command
+\newcommand{\next@Block}[1]{
+\end{ste@ps}
+#1
+\begin{ste@ps}{\Blockindent}
+\item
+}
+
+\newenvironment{Blo@ck}{
+\let\nextBlock\next@Block
+\begin{ste@ps}{\Blockindent}
+\item
+}{
+\end{ste@ps}
+end
+}
+% Algorithm environment
+% Assign command
+\newcommand{\ass@ign}{\mbox{$\leftarrow$}}
+% Indentation of the algorithm
+\newlength{\algorithmindent}
+% Algorithm definition
+\newenvironment{algorithm}[1]{
+\let\=\ass@ign
+\let\invariant\inv@ariant
+\let\Block\Blo@ck
+\let\endBlock\endBlo@ck
+\begin{Alg@orithm} #1
+\rm\par
+\begin{ste@ps}{\algorithmindent}
+\item
+}{
+\end{ste@ps}
+\bf end
+\end{Alg@orithm}
+}
+
+% Setting default indentation
+\setlength{\algorithmindent}{1em}
+\setlength{\Blockindent}{2em}
+
+% End of algorithm.sty
diff --git a/obsolete/macros/latex209/contrib/misc/alltt.sty b/obsolete/macros/latex209/contrib/misc/alltt.sty
new file mode 100644
index 0000000000..b7290b7563
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/misc/alltt.sty
@@ -0,0 +1,32 @@
+% ALLTT DOCUMENT-STYLE OPTION - released 17 December 1987
+% for LaTeX version 2.09
+% Copyright (C) 1987 by Leslie Lamport
+
+% Defines the `alltt' environment, which is like the `verbatim'
+% environment except that `\', `\{', and `\}' have their usual meanings.
+% Thus, other commands and environemnts can appear within an `alltt'
+% environment. Here are some things you may want to do in an `alltt'
+% environment:
+%
+% * Change fonts--e.g., by typing `{\em empasized text\/}'.
+%
+% * Insert text from a file foo.tex by typing `input{foo}'. Beware that
+% each <return> stars a new line, so if foo.tex ends with a <return>
+% you can wind up with an extra blank line if you're not careful.
+%
+% * Insert a math formula. Note that `$' just produces a dollar sign,
+% so you'll have to type `\(...\)' or `\[...\]'. Also, `^' and `_'
+% just produce their characters; use `\sp' or `\sb' for super- and
+% subscripts, as in `\(x\sp{2}\)'.
+
+\def\docspecials{\do\ \do\$\do\&%
+ \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~}
+
+\def\alltt{\trivlist \item[]\if@minipage\else\vskip\parskip\fi
+\leftskip\@totalleftmargin\rightskip\z@
+\parindent\z@\parfillskip\@flushglue\parskip\z@
+\@tempswafalse \def\par{\if@tempswa\hbox{}\fi\@tempswatrue\@@par}
+\obeylines \tt \catcode``=13 \@noligs \let\do\@makeother \docspecials
+ \frenchspacing\@vobeyspaces}
+
+\let\endalltt=\endtrivlist
diff --git a/obsolete/macros/latex209/contrib/misc/amsfonts.sty b/obsolete/macros/latex209/contrib/misc/amsfonts.sty
new file mode 100644
index 0000000000..754deb1baf
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/misc/amsfonts.sty
@@ -0,0 +1,414 @@
+% This style file makes it possible to work with the AmS fonts
+% in LaTeX
+% calling sequence: \documentstyle[...,amsfonts,...]{....}
+% Slightly modified from a version snarfed from LISTSERV at DHDURZ1
+% One modification is that \Huge also uses the same sizes
+% like the CMR family of fonts.
+% The other modification is using the command \@addto to
+% modify the virtual font size definitions later used
+% by ARTxx.STY or REPxx.STy or so on.
+% I found \@addto in VDM.STY by Mario Wolcko.
+% The advantage is that using this trick you can add
+% different families of fonts to the existing LATEX fonts
+% and the later style options do not remove font families added
+% by previous style option. SO you an add selectively
+% e.g. the MSXMxx and MSYMxx families and later also
+% the Euler Fraktur and the cyrillic fonts without anz changes
+% in the style files. Without \@addto this is rather difficult
+% to accomplish.
+% Updates 11/20/1988 by E. Neuwirth (A4422DAB at AWIUNI11)
+
+ \def\@addto#1#2{\ifx#1\undefined % do nothing
+ \else \toks0=\expandafter{#1}\toks1={#2}%
+ \global\edef#1{\the\toks0 \the\toks1 }\fi}
+
+\catcode`@=11
+
+ \font\twtymsx=msxm10 \@magscale4
+ \font\svtnmsx=msxm10 \@magscale3
+ \font\frtnmsx=msxm10 \@magscale2
+ \font\twelvemsx=msxm10 \@magscale1
+ \font\elevenmsx=msxm10 \@halfmag
+ \font\tenmsx=msxm10
+ \font\ninemsx=msxm9
+ \font\eightmsx=msxm8
+ \font\sevenmsx=msxm7
+ \font\sixmsx=msxm6
+ \font\fivemsx=msxm5
+ %
+ \font\twtymsy=msym10 \@magscale4
+ \font\svtnmsy=msym10 \@magscale3
+ \font\frtnmsy=msym10 \@magscale2
+ \font\twelvemsy=msym10 \@magscale1
+ \font\elevenmsy=msym10 \@halfmag
+ \font\tenmsy=msym10
+ \font\ninemsy=msym9
+ \font\eightmsy=msym8
+ \font\sevenmsy=msym7
+ \font\sixmsy=msym6
+ \font\fivemsy=msym5
+
+
+\newfam\msxfam
+\newfam\msyfam
+
+% Hier sind jetzt geaenderte LFONTS Definitionen (fuer LaTeX)
+
+\@addto\@vpt{
+% Hier AmS-Fonts
+\def\msx{\fam\msxfam\fivemsx}\textfont\msxfam=\fivemsx
+ \scriptfont\msxfam=\fivemsx \scriptscriptfont\msxfam=\fivemsx
+\def\msy{\fam\msyfam\fivemsy}\textfont\msyfam=\fivemsy
+ \scriptfont\msyfam=\fivemsy \scriptscriptfont\msyfam=\fivemsy
+\@setstrut\rm}
+
+
+\@addto\@vipt{
+% Hier AmS-Fonts
+\def\msx{\fam\msxfam\sixmsx}\textfont\msxfam=\sixmsx
+ \scriptfont\msxfam=\sixmsx \scriptscriptfont\msxfam=\sixmsx
+\def\msy{\fam\msyfam\sixmsy}\textfont\msyfam=\sixmsy
+ \scriptfont\msyfam=\sixmsy \scriptscriptfont\msyfam=\sixmsy
+\@setstrut\rm}
+
+
+\@addto\@viipt{
+% Hier AmS-Fonts
+\def\msx{\fam\msxfam\sevenmsx}\textfont\msxfam=\sevenmsx
+ \scriptfont\msxfam=\fivemsx \scriptscriptfont\msxfam=\fivemsx
+\def\msy{\fam\msyfam\sevenmsy}\textfont\msyfam=\sevenmsy
+ \scriptfont\msyfam=\fivemsy \scriptscriptfont\msyfam=\fivemsy
+\@setstrut \rm}
+
+
+\@addto\@viiipt{
+% Hier AmS-Fonts
+\def\msx{\fam\msxfam\eightmsx}\textfont\msxfam=\eightmsx
+ \scriptfont\msxfam=\sixmsx \scriptscriptfont\msxfam=\fivemsx
+\def\msy{\fam\msyfam\eightmsy}\textfont\msyfam=\eightmsy
+ \scriptfont\msyfam=\sixmsy \scriptscriptfont\msyfam=\fivemsy
+\@setstrut \rm}
+
+
+\@addto\@ixpt{
+% Hier AmS-Fonts
+\def\msx{\fam\msxfam\ninemsx}\textfont\msxfam=\ninemsx
+ \scriptfont\msxfam=\sixmsx \scriptscriptfont\msxfam=\fivemsx
+\def\msy{\fam\msyfam\ninemsy}\textfont\msyfam=\ninemsy
+ \scriptfont\msyfam=\sixmsy \scriptscriptfont\msyfam=\fivemsy
+\@setstrut \rm}
+
+
+\@addto\@xpt{
+% Hier AmS-Fonts
+\def\msx{\fam\msxfam\tenmsx}\textfont\msxfam=\tenmsx
+ \scriptfont\msxfam=\sevenmsx \scriptscriptfont\msxfam=\fivemsx
+\def\msy{\fam\msyfam\tenmsy}\textfont\msyfam=\tenmsy
+ \scriptfont\msyfam=\sevenmsy \scriptscriptfont\msyfam=\fivemsy
+\@setstrut \rm}
+
+
+\@addto\@xipt{
+% Hier AmS-Fonts
+\def\msx{\fam\msxfam\elevenmsx}\textfont\msxfam=\elevenmsx
+ \scriptfont\msxfam=\eightmsx \scriptscriptfont\msxfam=\sixmsx
+\def\msy{\fam\msyfam\elevenmsy}\textfont\msyfam=\elevenmsy
+ \scriptfont\msyfam=\eightmsy \scriptscriptfont\msyfam=\sixmsy
+\@setstrut \rm}
+
+
+\@addto\@xiipt{
+% Hier AmS-Fonts
+\def\msx{\fam\msxfam\twelvemsx}\textfont\msxfam=\twelvemsx
+ \scriptfont\msxfam=\eightmsx \scriptscriptfont\msxfam=\sixmsx
+\def\msy{\fam\msyfam\twelvemsy}\textfont\msyfam=\twelvemsy
+ \scriptfont\msyfam=\eightmsy \scriptscriptfont\msyfam=\sixmsy
+ \@setstrut \rm}
+
+
+\@addto\@xivpt{\textfont\z@\frtnrm
+% Hier AmS-Fonts
+\def\msx{\fam\msxfam\frtnmsx}\textfont\msxfam=\frtnmsx
+ \scriptfont\msxfam=\tenmsx \scriptscriptfont\msxfam=\sevenmsx
+\def\msy{\fam\msyfam\frtnmsy}\textfont\msyfam=\frtnmsy
+ \scriptfont\msyfam=\tenmsy \scriptscriptfont\msyfam=\sevenmsy
+\@setstrut \rm}
+
+
+\@addto\@xviipt{\textfont\z@\svtnrm
+% Hier AmS-Fonts
+\def\msx{\fam\msxfam\svtnmsx}\textfont\msxfam=\svtnmsx
+ \scriptfont\msxfam=\twelvemsx \scriptscriptfont\msxfam=\tenmsx
+\def\msy{\fam\msyfam\svtnmsy}\textfont\msyfam=\svtnmsy
+ \scriptfont\msyfam=\twelvemsy \scriptscriptfont\msyfam=\tenmsy
+\@setstrut \rm}
+
+
+\@addto\@xxpt{
+% Hier AmS-Fonts
+\def\msx{\fam\msxfam\twtymsx}\textfont\msxfam=\twtymsx
+ \scriptfont\msxfam=\frtnmsx \scriptscriptfont\msxfam=\twelvemsx
+\def\msy{\fam\msyfam\twtymsy}\textfont\msyfam=\twtymsy
+ \scriptfont\msyfam=\frtnmsy \scriptscriptfont\msyfam=\twelvemsy
+\@setstrut \rm}
+
+
+\@addto\@xxvpt{
+% Hier AmS-Fonts
+\def\msx{\fam\msxfam\twtymsx}\textfont\msxfam=\twtymsx
+ \scriptfont\msxfam=\twtymsx \scriptscriptfont\msxfam=\svtnmsx
+\def\msy{\fam\msyfam\twtymsy}\textfont\msyfam=\twtymsy
+ \scriptfont\msyfam=\twtymsy \scriptscriptfont\msyfam=\svtnmsy
+\@setstrut \rm}
+
+
+%\def\text{\relaxnext@\ifmmode\let\next\text@\else\let\next\text@@\fi\next}
+%\def\text@@#1{\leavevmode\hbox{#1}}
+
+\def\relaxnext@{\let\next\relax}
+
+\def\accentfam@{7}
+\def\noaccents@{\def\accentfam@{0}}
+
+\def\hexnumber@#1{\ifnum#1<10 \number#1\else
+ \ifnum#1=10 A\else\ifnum#1=11 B\else\ifnum#1=12 C\else
+ \ifnum#1=13 D\else\ifnum#1=14 E\else\ifnum#1=15 F\fi\fi\fi\fi\fi\fi\fi}
+
+\def\mathhexbox@#1#2#3{\hbox{$\m@th\mathchar"#1#2#3$}}
+
+\edef\msx@{\hexnumber@\msxfam}
+\edef\msy@{\hexnumber@\msyfam}
+
+\mathchardef\boxdot="2\msx@00
+\mathchardef\boxplus="2\msx@01
+\mathchardef\boxtimes="2\msx@02
+\mathchardef\square="0\msx@03
+\mathchardef\blacksquare="0\msx@04
+\mathchardef\centerdot="2\msx@05
+\mathchardef\lozenge="0\msx@06
+\mathchardef\blacklozenge="0\msx@07
+\mathchardef\circlearrowright="3\msx@08
+\mathchardef\circlearrowleft="3\msx@09
+\mathchardef\rightleftharpoons="3\msx@0A
+\mathchardef\leftrightharpoons="3\msx@0B
+\mathchardef\boxminus="2\msx@0C
+\mathchardef\Vdash="3\msx@0D
+\mathchardef\Vvdash="3\msx@0E
+\mathchardef\vDash="3\msx@0F
+\mathchardef\twoheadrightarrow="3\msx@10
+\mathchardef\twoheadleftarrow="3\msx@11
+\mathchardef\leftleftarrows="3\msx@12
+\mathchardef\rightrightarrows="3\msx@13
+\mathchardef\upuparrows="3\msx@14
+\mathchardef\downdownarrows="3\msx@15
+\mathchardef\upharpoonright="3\msx@16
+\let\restriction\upharpoonright
+\mathchardef\downharpoonright="3\msx@17
+\mathchardef\upharpoonleft="3\msx@18
+\mathchardef\downharpoonleft="3\msx@19
+\mathchardef\rightarrowtail="3\msx@1A
+\mathchardef\leftarrowtail="3\msx@1B
+\mathchardef\leftrightarrows="3\msx@1C
+\mathchardef\rightleftarrows="3\msx@1D
+\mathchardef\Lsh="3\msx@1E
+\mathchardef\Rsh="3\msx@1F
+\mathchardef\rightsquigarrow="3\msx@20
+\mathchardef\leftrightsquigarrow="3\msx@21
+\mathchardef\looparrowleft="3\msx@22
+\mathchardef\looparrowright="3\msx@23
+\mathchardef\circeq="3\msx@24
+\mathchardef\succsim="3\msx@25
+\mathchardef\gtrsim="3\msx@26
+\mathchardef\gtrapprox="3\msx@27
+\mathchardef\multimap="3\msx@28
+\mathchardef\therefore="3\msx@29
+\mathchardef\because="3\msx@2A
+\mathchardef\doteqdot="3\msx@2B
+\let\Doteq\doteqdot
+\mathchardef\triangleq="3\msx@2C
+\mathchardef\precsim="3\msx@2D
+\mathchardef\lesssim="3\msx@2E
+\mathchardef\lessapprox="3\msx@2F
+\mathchardef\eqslantless="3\msx@30
+\mathchardef\eqslantgtr="3\msx@31
+\mathchardef\curlyeqprec="3\msx@32
+\mathchardef\curlyeqsucc="3\msx@33
+\mathchardef\preccurlyeq="3\msx@34
+\mathchardef\leqq="3\msx@35
+\mathchardef\leqslant="3\msx@36
+\mathchardef\lessgtr="3\msx@37
+\mathchardef\backprime="0\msx@38
+\mathchardef\risingdotseq="3\msx@3A
+\mathchardef\fallingdotseq="3\msx@3B
+\mathchardef\succcurlyeq="3\msx@3C
+\mathchardef\geqq="3\msx@3D
+\mathchardef\geqslant="3\msx@3E
+\mathchardef\gtrless="3\msx@3F
+\mathchardef\sqsubset="3\msx@40
+\mathchardef\sqsupset="3\msx@41
+\mathchardef\vartriangleright="3\msx@42
+\mathchardef\vartriangleleft ="3\msx@43
+\mathchardef\trianglerighteq="3\msx@44
+\mathchardef\trianglelefteq="3\msx@45
+\mathchardef\bigstar="0\msx@46
+\mathchardef\between="3\msx@47
+\mathchardef\blacktriangledown="0\msx@48
+\mathchardef\blacktriangleright="3\msx@49
+\mathchardef\blacktriangleleft="3\msx@4A
+\mathchardef\vartriangle="0\msx@4D
+\mathchardef\blacktriangle="0\msx@4E
+\mathchardef\triangledown="0\msx@4F
+\mathchardef\eqcirc="3\msx@50
+\mathchardef\lesseqgtr="3\msx@51
+\mathchardef\gtreqless="3\msx@52
+\mathchardef\lesseqqgtr="3\msx@53
+\mathchardef\gtreqqless="3\msx@54
+\mathchardef\Rrightarrow="3\msx@56
+\mathchardef\Lleftarrow="3\msx@57
+\mathchardef\veebar="2\msx@59
+\mathchardef\barwedge="2\msx@5A
+\mathchardef\doublebarwedge="2\msx@5B
+\mathchardef\angle="0\msx@5C
+\mathchardef\measuredangle="0\msx@5D
+\mathchardef\sphericalangle="0\msx@5E
+\mathchardef\varpropto="3\msx@5F
+\mathchardef\smallsmile="3\msx@60
+\mathchardef\smallfrown="3\msx@61
+\mathchardef\Subset="3\msx@62
+\mathchardef\Supset="3\msx@63
+\mathchardef\Cup="2\msx@64
+\let\doublecup\Cup
+\mathchardef\Cap="2\msx@65
+\let\doublecap\Cap
+\mathchardef\curlywedge="2\msx@66
+\mathchardef\curlyvee="2\msx@67
+\mathchardef\leftthreetimes="2\msx@68
+\mathchardef\rightthreetimes="2\msx@69
+\mathchardef\subseteqq="3\msx@6A
+\mathchardef\supseteqq="3\msx@6B
+\mathchardef\bumpeq="3\msx@6C
+\mathchardef\Bumpeq="3\msx@6D
+\mathchardef\lll="3\msx@6E
+\let\llless\lll
+\mathchardef\ggg="3\msx@6F
+\let\gggtr\ggg
+\mathchardef\circledS="0\msx@73
+\mathchardef\pitchfork="3\msx@74
+\mathchardef\dotplus="2\msx@75
+\mathchardef\backsim="3\msx@76
+\mathchardef\backsimeq="3\msx@77
+\mathchardef\complement="0\msx@7B
+\mathchardef\intercal="2\msx@7C
+\mathchardef\circledcirc="2\msx@7D
+\mathchardef\circledast="2\msx@7E
+\mathchardef\circleddash="2\msx@7F
+\def\ulcorner{\delimiter"4\msx@70\msx@70 }
+\def\urcorner{\delimiter"5\msx@71\msx@71 }
+\def\llcorner{\delimiter"4\msx@78\msx@78 }
+\def\lrcorner{\delimiter"5\msx@79\msx@79 }
+\def\yen{{\mathhexbox@\msx@55 }}
+\def\checkmark{{\mathhexbox@\msx@58 }}
+\def\circledR{{\mathhexbox@\msx@72 }}
+\def\maltese{{\mathhexbox@\msx@7A }}
+\mathchardef\lvertneqq="3\msy@00
+\mathchardef\gvertneqq="3\msy@01
+\mathchardef\nleq="3\msy@02
+\mathchardef\ngeq="3\msy@03
+\mathchardef\nless="3\msy@04
+\mathchardef\ngtr="3\msy@05
+\mathchardef\nprec="3\msy@06
+\mathchardef\nsucc="3\msy@07
+\mathchardef\lneqq="3\msy@08
+\mathchardef\gneqq="3\msy@09
+\mathchardef\nleqslant="3\msy@0A
+\mathchardef\ngeqslant="3\msy@0B
+\mathchardef\lneq="3\msy@0C
+\mathchardef\gneq="3\msy@0D
+\mathchardef\npreceq="3\msy@0E
+\mathchardef\nsucceq="3\msy@0F
+\mathchardef\precnsim="3\msy@10
+\mathchardef\succnsim="3\msy@11
+\mathchardef\lnsim="3\msy@12
+\mathchardef\gnsim="3\msy@13
+\mathchardef\nleqq="3\msy@14
+\mathchardef\ngeqq="3\msy@15
+\mathchardef\precneqq="3\msy@16
+\mathchardef\succneqq="3\msy@17
+\mathchardef\precnapprox="3\msy@18
+\mathchardef\succnapprox="3\msy@19
+\mathchardef\lnapprox="3\msy@1A
+\mathchardef\gnapprox="3\msy@1B
+\mathchardef\nsim="3\msy@1C
+\mathchardef\napprox="3\msy@1D
+\mathchardef\varsubsetneq="3\msy@20
+\mathchardef\varsupsetneq="3\msy@21
+\mathchardef\nsubseteqq="3\msy@22
+\mathchardef\nsupseteqq="3\msy@23
+\mathchardef\subsetneqq="3\msy@24
+\mathchardef\supsetneqq="3\msy@25
+\mathchardef\varsubsetneqq="3\msy@26
+\mathchardef\varsupsetneqq="3\msy@27
+\mathchardef\subsetneq="3\msy@28
+\mathchardef\supsetneq="3\msy@29
+\mathchardef\nsubseteq="3\msy@2A
+\mathchardef\nsupseteq="3\msy@2B
+\mathchardef\nparallel="3\msy@2C
+\mathchardef\nmid="3\msy@2D
+\mathchardef\nshortmid="3\msy@2E
+\mathchardef\nshortparallel="3\msy@2F
+\mathchardef\nvdash="3\msy@30
+\mathchardef\nVdash="3\msy@31
+\mathchardef\nvDash="3\msy@32
+\mathchardef\nVDash="3\msy@33
+\mathchardef\ntrianglerighteq="3\msy@34
+\mathchardef\ntrianglelefteq="3\msy@35
+\mathchardef\ntriangleleft="3\msy@36
+\mathchardef\ntriangleright="3\msy@37
+\mathchardef\nleftarrow="3\msy@38
+\mathchardef\nrightarrow="3\msy@39
+\mathchardef\nLeftarrow="3\msy@3A
+\mathchardef\nRightarrow="3\msy@3B
+\mathchardef\nLeftrightarrow="3\msy@3C
+\mathchardef\nleftrightarrow="3\msy@3D
+\mathchardef\divideontimes="2\msy@3E
+\mathchardef\varnothing="0\msy@3F
+\mathchardef\nexists="0\msy@40
+\mathchardef\mho="0\msy@66
+\mathchardef\eth="0\msy@67
+\mathchardef\beth="0\msy@69
+\mathchardef\gimel="0\msy@6A
+\mathchardef\daleth="0\msy@6B
+\mathchardef\lessdot="3\msy@6C
+\mathchardef\gtrdot="3\msy@6D
+\mathchardef\ltimes="2\msy@6E
+\mathchardef\rtimes="2\msy@6F
+\mathchardef\shortmid="3\msy@70
+\mathchardef\shortparallel="3\msy@71
+\mathchardef\smallsetminus="2\msy@72
+\mathchardef\thicksim="3\msy@73
+\mathchardef\thickapprox="3\msy@74
+\mathchardef\approxeq="3\msy@75
+\mathchardef\succapprox="3\msy@76
+\mathchardef\precapprox="3\msy@77
+\mathchardef\curvearrowleft="3\msy@78
+\mathchardef\curvearrowright="3\msy@79
+\mathchardef\digamma="0\msy@7A
+\mathchardef\varkappa="0\msy@7B
+\mathchardef\hslash="0\msy@7D
+\mathchardef\hbar="0\msy@7E
+\mathchardef\backepsilon="3\msy@7F
+\def\Bbb{\relaxnext@\ifmmode\let\next\Bbb@\else
+ \def\next{\Err@{Use \string\Bbb\space only in math mode}}\fi\next}
+\def\Bbb@#1{{\Bbb@@{#1}}}
+\def\Bbb@@#1{\noaccents@\fam\msyfam#1}
+%\def\fontlist@{\\{\tenrm}\\{\sevenrm}\\{\fiverm}\\{\teni}\\{\seveni}%
+%\\{\fivei}\\{\tensy}\\{\sevensy}\\{\fivesy}\\{\tenex}\\{\tenbf}\\{\sevenbf}%
+%\\{\fivebf}\\{\tensl}\\{\tenit}%
+% AmS-Fonts Anfang
+%\\{\tenmsx}\\{\sevenmsx}\\{\fivemsx}\\{\tenmsy}\\{\sevenmsy}\\{\fivemsy }%
+% AmS-Fonts Anfang
+
+\def\AmSTeX{{$\cal A$}\kern-.1667em\lower.5ex\hbox
+ {$\cal M$}\kern-.125em{$\cal S$}-\TeX}
+
+\catcode`@=12 % at signs are no longer letters
diff --git a/obsolete/macros/latex209/contrib/misc/amssymbols.sty b/obsolete/macros/latex209/contrib/misc/amssymbols.sty
new file mode 100644
index 0000000000..fda9335849
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/misc/amssymbols.sty
@@ -0,0 +1,292 @@
+% Adapted by Charles Karney (Karney%PPC.MFENET@NMFECC.ARPA) 1986/07/28.
+% This style option loads up the AMS symbol fonts and associated symbol
+% definitions. See the Nov 85 issue of TUGBoat for a listing of these
+% symbols. Only \textfont, \scriptfont, and \scriptscriptfont sizes are
+% provided. 10pt, 11pt, 12pt styles are supported.
+
+%% This is the LATEX version of MSSYMB.TEX.
+%% Changes:
+%% (1) take out the \catcode`\@ business (LaTeX takes care of this)
+%% (2) Set font sizes according to \@ptsize
+
+%
+% ***** MSSYMB.TeX ***** 4 Nov 85
+%
+% This file contains the definitions for the symbols in the two
+% "extra symbols" fonts created at the American Math. Society.
+
+%% \catcode`\@=11
+
+%% \font\tenmsx=msxm10
+%% \font\sevenmsx=msxm7
+%% \font\fivemsx=msxm5
+%% \font\tenmsy=msym10
+%% \font\sevenmsy=msym7
+%% \font\fivemsy=msym5
+
+\ifcase\@ptsize
+ \font\tenmsx=msxm10
+ \font\sevenmsx=msxm7
+ \font\fivemsx=msxm5
+ \font\tenmsy=msym10
+ \font\sevenmsy=msym7
+ \font\fivemsy=msym5
+\or
+ \font\tenmsx=msxm10 scaled \magstephalf
+ \font\sevenmsx=msxm8
+ \font\fivemsx=msxm6
+ \font\tenmsy=msym10 scaled \magstephalf
+ \font\sevenmsy=msym8
+ \font\fivemsy=msym6
+\or
+ \font\tenmsx=msxm10 scaled \magstep1
+ \font\sevenmsx=msxm8
+ \font\fivemsx=msxm6
+ \font\tenmsy=msym10 scaled \magstep1
+ \font\sevenmsy=msym8
+ \font\fivemsy=msym6
+\fi
+
+\newfam\msxfam
+\newfam\msyfam
+\textfont\msxfam=\tenmsx \scriptfont\msxfam=\sevenmsx
+ \scriptscriptfont\msxfam=\fivemsx
+\textfont\msyfam=\tenmsy \scriptfont\msyfam=\sevenmsy
+ \scriptscriptfont\msyfam=\fivemsy
+
+\def\hexnumber@#1{\ifnum#1<10 \number#1\else
+ \ifnum#1=10 A\else\ifnum#1=11 B\else\ifnum#1=12 C\else
+ \ifnum#1=13 D\else\ifnum#1=14 E\else\ifnum#1=15 F\fi\fi\fi\fi\fi\fi\fi}
+
+\def\msx@{\hexnumber@\msxfam}
+\def\msy@{\hexnumber@\msyfam}
+\mathchardef\boxdot="2\msx@00
+\mathchardef\boxplus="2\msx@01
+\mathchardef\boxtimes="2\msx@02
+\mathchardef\square="0\msx@03
+\mathchardef\blacksquare="0\msx@04
+\mathchardef\centerdot="2\msx@05
+\mathchardef\lozenge="0\msx@06
+\mathchardef\blacklozenge="0\msx@07
+\mathchardef\circlearrowright="3\msx@08
+\mathchardef\circlearrowleft="3\msx@09
+\mathchardef\rightleftharpoons="3\msx@0A
+\mathchardef\leftrightharpoons="3\msx@0B
+\mathchardef\boxminus="2\msx@0C
+\mathchardef\Vdash="3\msx@0D
+\mathchardef\Vvdash="3\msx@0E
+\mathchardef\vDash="3\msx@0F
+\mathchardef\twoheadrightarrow="3\msx@10
+\mathchardef\twoheadleftarrow="3\msx@11
+\mathchardef\leftleftarrows="3\msx@12
+\mathchardef\rightrightarrows="3\msx@13
+\mathchardef\upuparrows="3\msx@14
+\mathchardef\downdownarrows="3\msx@15
+\mathchardef\upharpoonright="3\msx@16
+\let\restriction=\upharpoonright
+\mathchardef\downharpoonright="3\msx@17
+\mathchardef\upharpoonleft="3\msx@18
+\mathchardef\downharpoonleft="3\msx@19
+\mathchardef\rightarrowtail="3\msx@1A
+\mathchardef\leftarrowtail="3\msx@1B
+\mathchardef\leftrightarrows="3\msx@1C
+\mathchardef\rightleftarrows="3\msx@1D
+\mathchardef\Lsh="3\msx@1E
+\mathchardef\Rsh="3\msx@1F
+\mathchardef\rightsquigarrow="3\msx@20
+\mathchardef\leftrightsquigarrow="3\msx@21
+\mathchardef\looparrowleft="3\msx@22
+\mathchardef\looparrowright="3\msx@23
+\mathchardef\circeq="3\msx@24
+\mathchardef\succsim="3\msx@25
+\mathchardef\gtrsim="3\msx@26
+\mathchardef\gtrapprox="3\msx@27
+\mathchardef\multimap="3\msx@28
+\mathchardef\therefore="3\msx@29
+\mathchardef\because="3\msx@2A
+\mathchardef\doteqdot="3\msx@2B
+\let\Doteq=\doteqdot
+\mathchardef\triangleq="3\msx@2C
+\mathchardef\precsim="3\msx@2D
+\mathchardef\lesssim="3\msx@2E
+\mathchardef\lessapprox="3\msx@2F
+\mathchardef\eqslantless="3\msx@30
+\mathchardef\eqslantgtr="3\msx@31
+\mathchardef\curlyeqprec="3\msx@32
+\mathchardef\curlyeqsucc="3\msx@33
+\mathchardef\preccurlyeq="3\msx@34
+\mathchardef\leqq="3\msx@35
+\mathchardef\leqslant="3\msx@36
+\mathchardef\lessgtr="3\msx@37
+\mathchardef\backprime="0\msx@38
+\mathchardef\risingdotseq="3\msx@3A
+\mathchardef\fallingdotseq="3\msx@3B
+\mathchardef\succcurlyeq="3\msx@3C
+\mathchardef\geqq="3\msx@3D
+\mathchardef\geqslant="3\msx@3E
+\mathchardef\gtrless="3\msx@3F
+\mathchardef\sqsubset="3\msx@40
+\mathchardef\sqsupset="3\msx@41
+\mathchardef\vartriangleright="3\msx@42
+\mathchardef\vartriangleleft="3\msx@43
+\mathchardef\trianglerighteq="3\msx@44
+\mathchardef\trianglelefteq="3\msx@45
+\mathchardef\bigstar="0\msx@46
+\mathchardef\between="3\msx@47
+\mathchardef\blacktriangledown="0\msx@48
+\mathchardef\blacktriangleright="3\msx@49
+\mathchardef\blacktriangleleft="3\msx@4A
+\mathchardef\vartriangle="3\msx@4D
+\mathchardef\blacktriangle="0\msx@4E
+\mathchardef\triangledown="0\msx@4F
+\mathchardef\eqcirc="3\msx@50
+\mathchardef\lesseqgtr="3\msx@51
+\mathchardef\gtreqless="3\msx@52
+\mathchardef\lesseqqgtr="3\msx@53
+\mathchardef\gtreqqless="3\msx@54
+\mathchardef\Rrightarrow="3\msx@56
+\mathchardef\Lleftarrow="3\msx@57
+\mathchardef\veebar="2\msx@59
+\mathchardef\barwedge="2\msx@5A
+\mathchardef\doublebarwedge="2\msx@5B
+\mathchardef\angle="0\msx@5C
+\mathchardef\measuredangle="0\msx@5D
+\mathchardef\sphericalangle="0\msx@5E
+\mathchardef\varpropto="3\msx@5F
+\mathchardef\smallsmile="3\msx@60
+\mathchardef\smallfrown="3\msx@61
+\mathchardef\Subset="3\msx@62
+\mathchardef\Supset="3\msx@63
+\mathchardef\Cup="2\msx@64
+\let\doublecup=\Cup
+\mathchardef\Cap="2\msx@65
+\let\doublecap=\Cap
+\mathchardef\curlywedge="2\msx@66
+\mathchardef\curlyvee="2\msx@67
+\mathchardef\leftthreetimes="2\msx@68
+\mathchardef\rightthreetimes="2\msx@69
+\mathchardef\subseteqq="3\msx@6A
+\mathchardef\supseteqq="3\msx@6B
+\mathchardef\bumpeq="3\msx@6C
+\mathchardef\Bumpeq="3\msx@6D
+\mathchardef\lll="3\msx@6E
+\let\llless=\lll
+\mathchardef\ggg="3\msx@6F
+\let\gggtr=\ggg
+\mathchardef\circledS="0\msx@73
+\mathchardef\pitchfork="3\msx@74
+\mathchardef\dotplus="2\msx@75
+\mathchardef\backsim="3\msx@76
+\mathchardef\backsimeq="3\msx@77
+\mathchardef\complement="0\msx@7B
+\mathchardef\intercal="2\msx@7C
+\mathchardef\circledcirc="2\msx@7D
+\mathchardef\circledast="2\msx@7E
+\mathchardef\circleddash="2\msx@7F
+\def\ulcorner{\delimiter"4\msx@70\msx@70 }
+\def\urcorner{\delimiter"5\msx@71\msx@71 }
+\def\llcorner{\delimiter"4\msx@78\msx@78 }
+\def\lrcorner{\delimiter"5\msx@79\msx@79 }
+\def\yen{\mathhexbox\msx@55 }
+\def\checkmark{\mathhexbox\msx@58 }
+\def\circledR{\mathhexbox\msx@72 }
+\def\maltese{\mathhexbox\msx@7A }
+\mathchardef\lvertneqq="3\msy@00
+\mathchardef\gvertneqq="3\msy@01
+\mathchardef\nleq="3\msy@02
+\mathchardef\ngeq="3\msy@03
+\mathchardef\nless="3\msy@04
+\mathchardef\ngtr="3\msy@05
+\mathchardef\nprec="3\msy@06
+\mathchardef\nsucc="3\msy@07
+\mathchardef\lneqq="3\msy@08
+\mathchardef\gneqq="3\msy@09
+\mathchardef\nleqslant="3\msy@0A
+\mathchardef\ngeqslant="3\msy@0B
+\mathchardef\lneq="3\msy@0C
+\mathchardef\gneq="3\msy@0D
+\mathchardef\npreceq="3\msy@0E
+\mathchardef\nsucceq="3\msy@0F
+\mathchardef\precnsim="3\msy@10
+\mathchardef\succnsim="3\msy@11
+\mathchardef\lnsim="3\msy@12
+\mathchardef\gnsim="3\msy@13
+\mathchardef\nleqq="3\msy@14
+\mathchardef\ngeqq="3\msy@15
+\mathchardef\precneqq="3\msy@16
+\mathchardef\succneqq="3\msy@17
+\mathchardef\precnapprox="3\msy@18
+\mathchardef\succnapprox="3\msy@19
+\mathchardef\lnapprox="3\msy@1A
+\mathchardef\gnapprox="3\msy@1B
+\mathchardef\nsim="3\msy@1C
+\mathchardef\napprox="3\msy@1D
+\mathchardef\varsubsetneq="3\msy@20
+\mathchardef\varsupsetneq="3\msy@21
+\mathchardef\nsubseteqq="3\msy@22
+\mathchardef\nsupseteqq="3\msy@23
+\mathchardef\subsetneqq="3\msy@24
+\mathchardef\supsetneqq="3\msy@25
+\mathchardef\varsubsetneqq="3\msy@26
+\mathchardef\varsupsetneqq="3\msy@27
+\mathchardef\subsetneq="3\msy@28
+\mathchardef\supsetneq="3\msy@29
+\mathchardef\nsubseteq="3\msy@2A
+\mathchardef\nsupseteq="3\msy@2B
+\mathchardef\nparallel="3\msy@2C
+\mathchardef\nmid="3\msy@2D
+\mathchardef\nshortmid="3\msy@2E
+\mathchardef\nshortparallel="3\msy@2F
+\mathchardef\nvdash="3\msy@30
+\mathchardef\nVdash="3\msy@31
+\mathchardef\nvDash="3\msy@32
+\mathchardef\nVDash="3\msy@33
+\mathchardef\ntrianglerighteq="3\msy@34
+\mathchardef\ntrianglelefteq="3\msy@35
+\mathchardef\ntriangleleft="3\msy@36
+\mathchardef\ntriangleright="3\msy@37
+\mathchardef\nleftarrow="3\msy@38
+\mathchardef\nrightarrow="3\msy@39
+\mathchardef\nLeftarrow="3\msy@3A
+\mathchardef\nRightarrow="3\msy@3B
+\mathchardef\nLeftrightarrow="3\msy@3C
+\mathchardef\nleftrightarrow="3\msy@3D
+\mathchardef\divideontimes="2\msy@3E
+\mathchardef\varnothing="0\msy@3F
+\mathchardef\nexists="0\msy@40
+\mathchardef\mho="0\msy@66
+\mathchardef\thorn="0\msy@67
+\mathchardef\beth="0\msy@69
+\mathchardef\gimel="0\msy@6A
+\mathchardef\daleth="0\msy@6B
+\mathchardef\lessdot="3\msy@6C
+\mathchardef\gtrdot="3\msy@6D
+\mathchardef\ltimes="2\msy@6E
+\mathchardef\rtimes="2\msy@6F
+\mathchardef\shortmid="3\msy@70
+\mathchardef\shortparallel="3\msy@71
+\mathchardef\smallsetminus="2\msy@72
+\mathchardef\thicksim="3\msy@73
+\mathchardef\thickapprox="3\msy@74
+\mathchardef\approxeq="3\msy@75
+\mathchardef\succapprox="3\msy@76
+\mathchardef\precapprox="3\msy@77
+\mathchardef\curvearrowleft="3\msy@78
+\mathchardef\curvearrowright="3\msy@79
+\mathchardef\digamma="0\msy@7A
+\mathchardef\varkappa="0\msy@7B
+\mathchardef\hslash="0\msy@7D
+\mathchardef\hbar="0\msy@7E
+\mathchardef\backepsilon="3\msy@7F
+% Use the next 4 lines with AMS-TeX:
+%\def\Bbb{\relaxnext@\ifmmode\let\next\Bbb@\else
+% \def\next{\Err@{Use \string\Bbb\space only in math mode}}\fi\next}
+%\def\Bbb@#1{{\Bbb@@{#1}}}
+%\def\Bbb@@#1{\noaccents@\fam\msyfam#1}
+% Use the next 4 lines if NOT using AMS-TeX:
+\def\Bbb{\ifmmode\let\next\Bbb@\else
+ \def\next{\errmessage{Use \string\Bbb\space only in math mode}}\fi\next}
+\def\Bbb@#1{{\Bbb@@{#1}}}
+\def\Bbb@@#1{\fam\msyfam#1}
+
+%% \catcode`\@=12
diff --git a/obsolete/macros/latex209/contrib/misc/askinclude.sty b/obsolete/macros/latex209/contrib/misc/askinclude.sty
new file mode 100644
index 0000000000..ed0b74d1e8
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/misc/askinclude.sty
@@ -0,0 +1,96 @@
+% askinclude.sty - interactive asking of included files
+%
+% VERSION 1.0 November 7, 1991
+%
+% (c) 1991 by Pablo A. Straub. Permission is granted to copy and use this
+% in any way and for any purpose, except direct commercial advantage,
+% provided that you retain this copyright notice.
+%
+% HISTORY
+%
+% 0.95 11/05/91 First beta-test version (asked two questions)
+% 0.99 11/05/91 Second beta-test version (asks one question; uses * and -.)
+% 1.0 11/07/91 Changed prompts (sent to comp.text.tex)
+%
+% Please send enhancements and corrections to straub@cs.umd.edu.
+%
+% USAGE
+%
+% \documentstyle[...,askinclude,...]{...}
+%
+% HOW IT WORKS
+%
+% The askinclude style option asks the user which files to include. If
+% the user presses return, the files from the previous run are included
+% automatically (except on the first run, in which case all files are
+% included); if the answer is * all files are included; if the answer
+% is - no files are included; otherwise the specified files (separated
+% by commas, with no embedded spaces) are included.
+%
+% RESTRICTIONS
+%
+% This file redefines \document, the command executed with \begin{document}.
+% It may be incompatible with other styles that also redefine \document.
+%
+% The user's input is not validated. Anything that is not a * or a - or an
+% empty line is passed to \includeonly.
+%
+% ACKNOWLEDGEMENT
+%
+% Tom Scavo (scavo@cie.uoregon.edu) suggested saving the include file list
+% from the previous run and a simplified user interface.
+
+
+\def\@includeonly{\@gobble} % assume we do not include from last run
+
+\def\@inputs{*} % assume all files included
+
+
+% determine which files to include
+
+\def\@star{*} % used for comparing user's answer
+\def\@minus{-} % ditto
+
+\typeout { }
+\typeout {Enter file(s) to include (separated by commas and no spaces),}
+\typeout {or enter * for all files, or enter - for none, or}
+\typein [\inputfiles]{press Return if this run is the same as the last.}
+
+\ifx\inputfiles\@star % all files included
+ % do nothing
+\else \ifx\inputfiles\@minus % no files included
+ \includeonly{}
+ \def\@inputs{}
+\else \ifx\inputfiles\empty % include according to previous run
+ \def\@includeonly#1{%
+ \gdef\@inputs{#1}
+ \ifx\@inputs\@star \else \global\@partswtrue\global\edef\@partlist{#1}\fi}
+\else
+ \def\@inputs{\inputfiles} % include these files
+ \includeonly{\inputfiles}
+\fi\fi\fi
+
+
+% \document - redefinition of \begin{document} to handle last included files
+
+\def\document{\endgroup
+ \@colht\textheight \@colroom\textheight \vsize\textheight
+ \columnwidth\textwidth \@clubpenalty\clubpenalty
+ \if@twocolumn \advance\columnwidth -\columnsep
+ \divide\columnwidth\tw@ \hsize\columnwidth \@firstcolumntrue
+ \fi
+ \hsize\columnwidth \linewidth\hsize
+ \begingroup\@floatplacement\@dblfloatplacement
+ \makeatletter\let\@writefile\@gobbletwo
+ \@input{\jobname.aux}\endgroup
+ \if@filesw \immediate\openout\@mainaux=\jobname.aux
+ \immediate\write\@mainaux{\relax}%
+ \immediate\write\@mainaux{\string\@includeonly\string{\@inputs\string}}%NEW
+ \fi
+ \def\@includeonly{} %NEW
+ \def\do##1{\let ##1\@notprerr}
+ \@preamblecmds
+ \let\do\noexpand
+ \@normalsize\everypar{}}
+
+% END OF FILE askinclude.sty
diff --git a/obsolete/macros/latex209/contrib/misc/braille.sty b/obsolete/macros/latex209/contrib/misc/braille.sty
new file mode 100644
index 0000000000..f8f974dc48
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/misc/braille.sty
@@ -0,0 +1,49 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% LaTeX-Style zur Definition der 6-Punkt Braille-Schrift-Umgebung
+% V. 1.0 11.11.88
+%
+% copyright FernUniversit\"at Hagen Nicht-kommerzielle
+% Rechenzentrum Weitergabe an wissenschaft-
+% J. Breuer / G. Barg liche Institutionen erlaubt
+% EARN: RZB02 at DHAFEU11
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Zugeh\"orige Dateien:
+% braille.sty diese Datei
+% braille.tfm
+% braille.pk (bzw. braille.1500pk) oder:
+% braille.pxl (bzw. braille.1500pxl)
+% Ausgabe-Zeichenvorrat:
+% alle druckbaren Zeichen nach deutscher 7 Bit ASCII /
+% 6-Punkt Braille-Zuordnung (also ohne Gro\ss{}buchstaben)
+% Aufruf:
+% \begin{braille} ... \end{braille}
+% Eingabe:
+% Gro\ss{}- und Kleinbuchstaben benutzbar,
+% Umlaute und und Esszet nach der \"ublichen TeX-Konvention
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newenvironment{braille}%
+{\font\braille=braille
+\braille
+\def\"##1{\if##1a\char91%
+\else\if##1o\char92%
+\else\if##1u\char93%
+\else\if##1A\char91%
+\else\if##1O\char92%
+\else\if##1U\char93%
+\else\if##1s\char126%
+\fi\fi\fi\fi\fi\fi\fi}%
+\def\ss##1{\char126}%
+\begin{raggedright}
+\spaceskip=18pt
+\xspaceskip=18pt
+\newcount\oldtolerance \oldtolerance=\tolerance
+\newcount\oldpretolerance \oldpretolerance=\pretolerance
+\newcount\oldhyphenpenalty \oldhyphenpenalty=\hyphenpenalty
+\tolerance=10000\pretolerance=-10000\hyphenpenalty=0%trennt trotz flatterrand
+}%
+{
+\tolerance=\oldtolerance
+\pretolerance=\oldpretolerance
+\hyphenpenalty=\oldhyphenpenalty
+\end{raggedright}
+}%
diff --git a/obsolete/macros/latex209/contrib/misc/briefdoc.tex b/obsolete/macros/latex209/contrib/misc/briefdoc.tex
new file mode 100644
index 0000000000..315ae6b1e7
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/misc/briefdoc.tex
@@ -0,0 +1,283 @@
+\documentstyle[a4]{artikel1}
+
+\begin{document}
+\title{De Nederlandse Briefstijl}
+\author{Victor Eijkhout}
+\maketitle
+
+\begin{abstract}
+Een bescheiden handleiding voor de Nederlandse briefstijl,
+met opmerkingen over het wat, hoe en waarom.
+\end{abstract}
+
+\section{Verantwoording}
+
+De Nederlandse \LaTeX-stijl `brief' conformeert zich aan
+NEN-normen\footnote{Mijn zeer grote dank aan Jan Grootenhuis
+die mijn aandacht vestigde op het bestaan van de normbladen.}
+1026 voor briefpapier, 3162 voor het indelen van documenten,
+1025 voor enveloppen, en 3516 voor het ontwerp van formulieren.
+
+Briefontwerp is controversieel. Iedereen heeft een smaak, en
+met name bij briefpapier is die vaak zeer uitgesproken.
+Ik wil beklemtonen dat ik bij de implementatie van de briefstijl
+bijna nergens mijn smaak nodig heb gehad. Dankzij de NEN-normen
+is het ontwerp van briefpapier een zaak van exacte wetenschap,
+niet van schone kunsten.
+
+Deze stijl is redelijk incompatibel met de \LaTeX\ `letter' stijl.
+Hij is in bescheiden mate met opties in te stellen,
+en de sleutelwoorden kunnen uit een aantal talen
+gekozen worden. Alle teksten zijn verder geparametriseerd.
+Het is dus goed mogelijk stijlopties te maken om deze stijl
+aan een specifieke omgeving aan te passen.
+
+Als de gebruiker geen gebruik maakt van een voorgedrukt briefhoofd,
+kan hij zijn eigen briefhoofd in \LaTeX\ implementeren, of
+door de stijl een briefhoofd geleverd krijgen. Het ontwerp van
+dit briefhoofd is de enige plaats waar mijn smaak zich heeft
+doen gelden, maar zelfs dit ontwerp heb ik gejat uit een NEN-norm.
+
+Opmerking: zeker bij het gebruik van vensterenveloppen is het
+voor de briefstijl
+van cruciaal belang dat de gebruikte printer goed afgesteld
+staat. Dit valt te controleren aan de hand van het adres:
+dit dient op 33mm van de linker kantlijn te staan, terwijl
+de `baseline' van de eerste regel zich 59mm onder de bovenrand
+van het papier dient te bevinden.
+
+\section{Velden van het briefpapier}
+
+Deze sectie behandelt de indeling van brieven aan de hand
+van NEN-norm~1026.
+
+\subsection{Marges}
+
+Alle marges conformeren zich aan NEN-1026, behalve de
+rechtermarge die ik voor een evenwichtiger bladverdeling
+gelijk gemaakt heb aan de linkermarge.
+Met een gezette brief ziet dit er beduidend beter uit.
+
+De linkermarge is 33 millimeter; er zijn nog geen voorzieningen
+voor de versmalde marge van 20 millimeter, die voor facturen
+beter is.
+Dit zal misschien ooit een optie worden.
+
+Om aan te sluiten by traditionele getypte briefopmaak
+is `raggedright' bij verstek ingeschakeld.
+Aangezien briefhoofd, referentieregels, en voetregel de brief
+vrij breed kunnen maken, is de corpsgrootte bij verstek 11-punt.
+10~en~12 zijn opties.
+
+\subsection{Briefhoofd}
+
+Het moeilijkste deel van een brief, en de voornaamste plek waar
+de ontwerper van briefpapier zijn creativiteit kwijt kan
+is het briefhoofd.
+In de huidige stijl heeft de gebruiker drie mogelijkheden.
+
+Een. Hij gebruikt voorgedrukt briefpapier. Als dit zich een
+beetje aan NEN-normen houdt is er verder niets aan de hand.
+
+Twee. De gebruiker kan zelf een macro \verb.\briefhoofd. schrijven.
+Als dit binnen de hoogte van
+\verb.\@headheight. blijft, is er niets aan de hand;
+voorkeursbreedte is \verb.4\refveldbreedte., dat wil zeggen, de
+breedte van de referentieregel.
+
+Drie. Er is een macro van twee argumenten, `maakbriefhoofd',
+die een briefhoofd levert dat ge\"\i nspireerd is op de
+voorbeeldbrief in NEN-1026. Voorbeeld:
+\begin{verbatim}
+\maakbriefhoofd{WG13}{Werkgroep 13\\ Mathematisch Instituut
+ \\ Toernooiveld 5\\ 6525 ED Nijmegen}\end{verbatim}
+Het eerste argument levert
+een tekst op die links boven een verticale lijn gezet wordt.
+Het links aanlijnen gebeurt met \verb.\hfil., dus met een
+\verb.\hfill. in het argument kan een deel van het hoofd naar
+rechts worden geschoven.
+
+Het tweede argument van `maakbriefhoofd' wordt als een blokje tekst
+rechts onder de lijn in het briefhoofd gehangen.
+In principe is dit argument er voor het adres van de afzender.
+Er is echter een mogelijkheid het antwoordadres
+in het adresveld op te nemen, zie hier onder.
+In het briefhoofd kan dan een omschrijving als
+`adviesburo voor gespecialiseerde algemeenheden' staan.
+
+Het tekstblok in het tweede argument lijnt links met de datum en
+het vierde voetitem (zie onder), en blijft idealiter binnen
+de marge van de pagina. Er worden echter geen
+`overfull box' meldingen gegeven als de tekst te breed is.
+
+Er is een `sterretje'-versie van `maakbriefhoofd';
+deze geeft op de vervolgbladen alleen het eerste argument
+plus de streep. Dat maakt de kop van de pagina wat minder
+zwaar.
+
+\subsection{Adresveld}
+
+Het adresveld wordt zodanig geplaatst dat het in het
+venster van een vensterenvelop zichtbaar is als het
+venster 5cm onder de bovenrand van de envelop begint.
+Omdat er zowel vensterenveloppen zijn met het venster
+links als rechts, is er een optie {\tt adresrechts}
+die het adresveld rechts plaatst. De voorkeurspositie
+is echter links; er blijft dan namelijk rechts een
+`ontvangerruimte' waar de geadresseerde stempels (`binnen
+gekomen dd.') en dergelijke kan zetten.
+
+Het adresveld komt op dezelfde manier tot stand als in de
+oude `letter' stijl: de gebruiker geeft
+\begin{verbatim}
+\begin{brief}{Jan \TeX er\\ Overfullplein 10000 \\ Baselinestad}
+\end{verbatim}
+in, en hieruit destilleert \LaTeX\ de naam en het verdere
+adres van de geadresseerde.
+De naam komt nog voor op de vervolgbladen.
+
+Het schijnt van de PTT te mogen dat er (helemaal boven) in het ruitje
+van de vensterenvelop een antwoordadres wordt opgenomen,
+als dat maar gebeurt zodanig dat het geen verwarring
+schept met het adres. Er is een commando \verb.\antwoordadres.
+dat een adres als argument accepteert,
+met de regels gescheiden door~\verb.\\..
+Voorbeeld:
+\begin{verbatim}
+\maakbriefhoofd{WG13}{De de facto standaard \\ in Vaderlandse
+ \\ \TeX verwerking}
+\antwoordadres{Mathematisch Instituut \\ Toernooiveld 5
+ \\ 6525 ED Nijmegen}\end{verbatim}
+
+
+\subsection{De Referentieregels}
+
+Direct onder het adresveld volgt ruimte voor gegevens
+van de geadresseerde, `Uw brief van' en `Uw kenmerk',
+en van afzender, `Ons kenmerk' en `Datum'.
+
+Voor deze referentiegegevens staan de gebruiker
+de commando's \verb.\uwbriefvan., \verb.\uwkenmerk.,
+\verb.\onskenmerk., en \verb.\datum. ter beschikking.
+Deze macro's hebben elk \'e\'en argument tussen accolades.
+De datum wordt automatisch ingevuld; niet ingevulde
+gegevens worden niet opgenomen.
+
+De teksten die hier in de kopjes staan worden
+in eerste instantie door de taalopties bepaald.
+Verstekwaarde is natuurlijk `nederlands', maar er
+zijn `engels', `amerikaans', en `duits' beschikbaar.
+Ik houd me aanbevolen voor correcte terminologie
+in andere talen; enkele fouten in de Duitse termen
+zijn op aanwijzing van Marc van Woerkom verbeterd.
+Wie geeft me de Franse termen?
+
+De teksten in de referentieregel
+zijn waardes van de macros
+\verb.\uwbriefvantekst., \verb.\uwkenmerktekst.,
+\verb.\onskenmerktekst., en \verb.\datumtekst..
+Het is dus mogelijk `doorkiesnummer' in plaats van `ons kenmerk'
+te krijgen door deze tekst
+als `onskernmerktekst' te declareren, bij voorbeeld
+met \verb.\renewcommand. in het preamble.
+
+
+\subsection{De tekst van de brief}
+
+Hier hoeft op deze plaats niets over gezegd te worden,
+anders dan dat de aanhef, net als in de `letter' stijl
+met \verb.\opening. gebeurt. Er is een `betreft' commando.
+
+Ook de afsluiting staat in het \LaTeX-boek beschreven,
+maar de commandonamen zijn Nederlands geworden:
+`ondertekening' (was `signature'),
+`afsluiting' (was `closing'), `ps', en `cc' Dit is Engels,
+maar bijna niemand weet wat het betekent.
+Verder is er zowel een `bijlage' als
+`bijlagen' (was~`encl').
+
+
+\subsection{Voetruimte}
+
+`In de voetruimte' (ik citeer NEN-1026) `komen die gegevens
+van de afzender die niet reeds in het briefhoofd zijn
+vermeld'. De keuze hiervan wordt aan de gebruiker overgelaten.
+Enkele suggesties zijn: kantooradres, telefoonnummer van de
+centrale, faxnummer, inschrijvingsnummer en -plaats in het
+handelsregister.
+
+Er kunnen maximaal vier voetitems zijn.
+Items verschijnen op de pagina in de volgorder waarin de
+gebruiker ze gedeclareerd heeft.
+Bij twee items of meer is het laatste rechtsgeplaatst. Goeie truc.
+
+Omdat hier beduidend meer keuze is dan bij de referentieregel,
+moet de gebruiker zelf het hoofdje en de daaronder
+geplaatste tekst van items in de voetregel voorschrijven.
+De macro van twee argumenten \verb.\voetitem. staat
+hem/haar daartoe ter beschikking. Elke van de argumenten
+kan meer dan \'e\'en regel lang zijn, gebruik~\verb.\\..
+Voorbeeld:
+\begin{verbatim}
+\voetitem{fax:}{12345 Winat nl}
+\voetitem{telefoon:}{080-613169\\ bgg: 612986}
+\voetitem{telefoon\\ priv\'e:}{080-448664}\end{verbatim}
+
+\subsection{Hulplijntjes; vouwstreepjes}
+
+Door een optie `streepjes' in te schakelen, is het briefpapier
+van hulpstreepjes te voorzien.
+
+Volgens NEN-1026 heeft briefpapier een instelstreepje halverwege,
+niet voor vouwen in twee\"en zoals hele volksstammen denken, maar
+voor het aanlijnen van de perforator.
+Aan de rechterzijde van het blad zijn twee vouwstreepjes, een
+voor vouwen in drie\"en, en een voor vouwen in twee\"en.
+Geen van beide bevindt zich op de helft of een-derde van de
+papierhoogte. Omdat enveloppen hoger zijn dan een A4-tje gedeeld
+door 2 of~3 zou dat ook niet kunnen. Vensters, weet U wel?
+
+Ik ben uitgegaan van envelopformaten EN-C5 ($162\times229$mm
+voor een A4 in twee\"en) en EN-DL ($110\times220$ voor
+een A4 in drie\"en) volgens NEN-1025 en ISO 269-1979.
+Vouwstreepjes bevinden zich op 105mm en 155mm onder de
+bovenrand van het papier.
+
+
+\section{Vervolgbladen}
+
+Boven elk vervolgblad komt het briefhoofd (mogelijk verkort,
+zie boven) en een verkorte
+vorm van de referentieregel; deze regel bevat het
+bladnummer.
+
+Als het briefhoofd met daaronder de `vervolgreferentieregel'
+(galgje! galgje!) te veel ruimte innemen, gaat de extra ruimte
+af van de teksthoogte. Voor dit mechanisme durf ik niet
+voor de volle achtien-en-een-half procent in te staan.
+Het lijkt in ieder geval te werken.
+
+
+\section{Opties}
+
+De optie `adresrechts' is boven al genoemd, evenals `streepjes';
+verder is er nog een optie `typhulp' die een
+hulplijntje voor het aanlijnen van het adres zet. Misschien leuk
+als je deze stijl gebruikt voor briefpapier dat daarna voor de
+typmachine gebruikt wordt.
+
+Belangrijker zijn natuurlijk de taalopties.
+
+Voor mensen met te goede of slechte ogen zijn er de 10- en
+12-punts opties. Let op: de kopjes in de referentie- en
+voetregel blijven in {\tt cmssq8} staan.
+
+Puur voor het genoegen van de implementator van de briefstijl
+is er de optie `USletter' die het papier 19.7 millimeter
+korter maakt.
+
+\section{Labels}
+
+Pijnlijk punt. Dit moet nog gedaan worden.
+\end{document}
+
diff --git a/obsolete/macros/latex209/contrib/misc/captcont.sty b/obsolete/macros/latex209/contrib/misc/captcont.sty
new file mode 100644
index 0000000000..70f662ee25
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/misc/captcont.sty
@@ -0,0 +1,16 @@
+% SubStyle file to permit the use of captions in continuations of floats.
+%
+% \captcont is like \caption, except that it doesn't update the counter, and
+% it doesn't make an entry in the list of figures or list of tables.
+
+\def\captcont{\@dblarg{\@captcont\@captype}}
+
+\long\def\@captcont#1[#2]#3{
+% \addcontentsline{\csname ext@#1\endcsname}{#1}{\protect\numberline{\csname
+% the#1\endcsname}{\ignorespaces #2}}
+ \par
+ \begingroup
+ \@parboxrestore
+ \normalsize
+ \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par
+ \endgroup}
diff --git a/obsolete/macros/latex209/contrib/misc/changebar.sty b/obsolete/macros/latex209/contrib/misc/changebar.sty
new file mode 100644
index 0000000000..c0532ade63
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/misc/changebar.sty
@@ -0,0 +1,155 @@
+% Change bar document-style option for LaTeX.
+%
+% Copyright (C) 1990 by David B. Johnson (dbj@titan.rice.edu).
+
+% These macros draw a solid bar down the right margin of the output,
+% covering a range of the input file that has been declared to be changed.
+%
+% The beginning and end of a change bar in the text are marked with
+% \chgbarbegin and \chgbarend, respectively. For example,
+%
+% Here is some sample text \chgbarbegin that was
+% changed\chgbarend{} and some that wasn't changed.
+%
+% The change bar is drawn continuously between the line of output
+% containing the \chgbarbegin and the line of output containing the
+% \chgbarend. These lines can end up on separate pages, and the
+% division at page boundaries is handled automatically.
+
+% Two dimensions control the size and placement of the change bars:
+% \chgbarwidth The width of a change bar
+% \chgbarsep The distance between the text and the change bar
+
+% Warning: it does not appear to be possible to do this completely
+% correctly, due to the time at which the verticle glue on a page is
+% finally set, and the way that page breaks are decided. With
+% \raggedbottom, this normally works fine. It hasn't been tested with
+% \flushbottom, but will probably behave worse. In strange rare
+% situations, a change bar might be drawn from the first line of a page
+% up off the top of a page; this can usually be fixed by slightly moving
+% the \chngbarend around, or by breaking a single change bar range
+% into two ranges.
+
+\newdimen\chgbarwidth \newdimen\chgbarsep
+\chgbarwidth 4pt
+\chgbarsep .25in
+
+\def\chgbarbegin{\ifhmode\@chgbar{-2}\else\@chgbar{-3}\fi}
+\def\chgbarend{\@chgbar{-4}}
+
+\marginparpush 0pt
+
+% The remainder of this is hacked up based on the LaTeX 2.09 latex.tex.
+
+% copied from \marginpar
+\def\@chgbar#1{\ifhmode \@bsphack\@floatpenalty -\@Mii\else
+ \@floatpenalty-\@Miii\fi\ifinner
+ \@parmoderr\@floatpenalty\z@
+ \else\@next\@currbox\@freelist{\global
+ \count\@currbox#1}{\@floatpenalty\z@ \@fltovf
+ \def\@currbox{\@tempboxa}}\fi
+ \setbox\@tempboxa\vbox
+ \bgroup\end@float\@esphack}
+
+\newdimen\@chgbarbegin
+\newif\if@inchgbar \@inchgbarfalse
+
+\def\@addmarginpar{%
+\ifnum\count\@currbox = -2 % change bar begin from hmode
+ \global\@chgbarbegin\@pageht \global\advance\@chgbarbegin -\baselineskip
+ \global\@inchgbartrue
+ \@cons\@freelist\@currbox
+\else
+\ifnum\count\@currbox = -3 % change bar begin not from hmode
+ \global\@chgbarbegin\@pageht
+ \global\@inchgbartrue
+ \@cons\@freelist\@currbox
+\else
+\ifnum\count\@currbox = -4 % change bar end
+ \if@inchgbar\else\@latexbug\fi
+ \@tempdima\@pageht \advance\@tempdima -\@chgbarbegin
+ \nointerlineskip
+ \@tempcnta\@ne
+ \if@twocolumn
+ \if@firstcolumn \@tempcnta\m@ne \fi
+ \else
+ \if@mparswitch
+ \ifodd\c@page \else\@tempcnta\m@ne \fi
+ \fi
+ \if@reversemargin \@tempcnta -\@tempcnta \fi
+ \fi
+ \hbox to\columnwidth
+ {\ifnum \@tempcnta >\z@
+ \hskip\columnwidth \hskip\chgbarsep
+ \else \hskip -\chgbarsep \fi
+\hbox{\vbox to 0pt{\vss
+ \hrule \@height\@tempdima \@width\chgbarwidth \@depth\z@
+}}
+\hss}
+ \nointerlineskip
+ \global\@inchgbarfalse
+ \@cons\@freelist\@currbox
+\else
+ \@next\@marbox\@currlist{\@cons\@freelist\@marbox
+ \@cons\@freelist\@currbox}\@latexbug\@tempcnta\@ne
+ \if@twocolumn
+ \if@firstcolumn \@tempcnta\m@ne \fi
+ \else
+ \if@mparswitch
+ \ifodd\c@page \else\@tempcnta\m@ne \fi
+ \fi
+ \if@reversemargin \@tempcnta -\@tempcnta \fi
+ \fi
+ \ifnum\@tempcnta <\z@ \global\setbox\@marbox\box\@currbox \fi
+ \@tempdima\@mparbottom \advance\@tempdima -\@pageht
+ \advance\@tempdima\ht\@marbox \ifdim\@tempdima >\z@
+ \@warning{Marginpar on page \thepage\space moved}\else\@tempdima\z@ \fi
+ \global\@mparbottom\@pageht \global\advance\@mparbottom\@tempdima
+ \global\advance\@mparbottom\dp\@marbox
+ \global\advance\@mparbottom\marginparpush
+ \advance\@tempdima -\ht\@marbox
+ \global\ht\@marbox\z@ \global\dp\@marbox\z@
+ \vskip -\@pagedp \vskip\@tempdima\nointerlineskip
+ \hbox to\columnwidth
+ {\ifnum \@tempcnta >\z@
+ \hskip\columnwidth \hskip\marginparsep
+ \else \hskip -\marginparsep \hskip -\marginparwidth \fi
+ \box\@marbox \hss}
+ \vskip -\@tempdima
+ \nointerlineskip
+ \hbox{\vrule \@height\z@ \@width\z@ \@depth\@pagedp}
+\fi\fi\fi}
+
+\def\@makecol{\setbox\@outputbox\box\@cclv
+ \if@inchgbar
+ \@tempcnta\@ne
+ \if@twocolumn
+ \if@firstcolumn \@tempcnta\m@ne \fi
+ \else
+ \if@mparswitch
+ \ifodd\c@page \else\@tempcnta\m@ne \fi
+ \fi
+ \if@reversemargin \@tempcnta -\@tempcnta \fi
+ \fi
+ \@tempdima\ht\@outputbox \advance\@tempdima -\@chgbarbegin
+ \advance\@tempdima -\baselineskip
+ \setbox\@outputbox
+ \vbox{\boxmaxdepth \maxdepth
+ \unvbox\@outputbox \nointerlineskip \hbox to\columnwidth
+ {\ifnum \@tempcnta >\z@
+ \hskip\columnwidth \hskip\chgbarsep
+ \else \hskip -\chgbarsep \fi
+ \hbox{\vbox to 0pt{\vss
+ \hrule \@height\@tempdima \@width\chgbarwidth \@depth\z@}}\hss}}
+ \global\@chgbarbegin 0pt
+\fi
+ \ifvoid\footins\else\setbox\@outputbox
+ \vbox{\boxmaxdepth \maxdepth
+ \unvbox\@outputbox\vskip\skip\footins\footnoterule\unvbox\footins}\fi
+ \xdef\@freelist{\@freelist\@midlist}\gdef\@midlist{}\@combinefloats
+ \setbox\@outputbox\vbox to\@colht{\boxmaxdepth\maxdepth
+ \@texttop\dimen128=\dp\@outputbox\unvbox\@outputbox
+ \vskip-\dimen128\@textbottom}
+ \global\maxdepth\@maxdepth}
+
+
diff --git a/obsolete/macros/latex209/contrib/misc/chappg.sty b/obsolete/macros/latex209/contrib/misc/chappg.sty
new file mode 100644
index 0000000000..8ed6c14249
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/misc/chappg.sty
@@ -0,0 +1,15 @@
+% Author: Max Hailperin <max@nic.gac.edu>
+% Define \thepage to output chapter-page (such as 1-3, 5-2, etc.)
+% and have each chapter's page number begin on 1.
+% Original source: TeXMaG Vol. 5, No. 3 (part 1)
+%
+% \documentstyle[chappg]{report} or whatnot:
+
+\renewcommand{\thepage}{\arabic{chapter}-\arabic{page}}% chapter-page numbering
+\@addtoreset{page}{chapter}% reset page number when chapter is stepped
+% The next magic makes the page counter be reset to one rather than zero
+\def\@stpelt#1{\global\csname c@#1\endcsname
+ \expandafter\ifx \csname#1\endcsname \page
+ \@ne
+ \else
+ \z@ \fi}
diff --git a/obsolete/macros/latex209/contrib/misc/citesort.sty b/obsolete/macros/latex209/contrib/misc/citesort.sty
new file mode 100644
index 0000000000..de21ebb252
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/misc/citesort.sty
@@ -0,0 +1,56 @@
+%NAME: citesort.sty
+% A replacement for \@citex which sorts citation numbers as well as
+% compressing and allowing breaks. Based on cite.sty by Donald
+% Arseneau.
+%
+% for use in LaTeX say, \documentstyle[...,citesort,...]{...}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Allow, but strongly discourage, line breaks within a long
+% series of citations. Compress lists of successive numbers
+% to one number range, e.g., 5,6,7,8,9 --> 5--9. Compatible
+% with versions of \@cite that use exponents.
+% -- Donald Arseneau 1989
+%
+% Modified to sort the numbers so they come out in increasing order,
+% regardless of the way they appear in the source. O(N^2) sort!
+% Ian Green, CUED, 10-Dec-1991. Improvements to img@eng.cam.ac.uk
+% please. Version 1
+
+\newcount\@minsofar
+\newcount\@min
+\newcount\@cite@temp
+\def\@citex[#1]#2{%
+\if@filesw \immediate \write \@auxout {\string \citation {#2}}\fi
+\@tempcntb\m@ne \let\@h@ld\relax \def\@citea{}%
+\@min\m@ne%
+\@cite{%
+ \@for \@citeb:=#2\do {\@ifundefined {b@\@citeb}%
+ {\@h@ld\@citea\@tempcntb\m@ne{\bf ?}%
+ \@warning {Citation `\@citeb ' on page \thepage \space undefined}}%
+{\@minsofar\z@ \@for \@scan@cites:=#2\do {%
+ \@ifundefined{b@\@scan@cites}%
+ {\@cite@temp\m@ne}
+ {\@cite@temp\number\csname b@\@scan@cites \endcsname \relax}%
+\ifnum\@cite@temp > \@min% select the next one to list
+ \ifnum\@minsofar = \z@
+ \@minsofar\number\@cite@temp
+ \edef\@scan@copy{\@scan@cites}\else
+ \ifnum\@cite@temp < \@minsofar
+ \@minsofar\number\@cite@temp
+ \edef\@scan@copy{\@scan@cites}\fi\fi\fi}\@tempcnta\@min
+ \ifnum\@minsofar > \z@ % some more
+ \advance\@tempcnta\@ne
+ \@min\@minsofar
+ \ifnum\@tempcnta=\@minsofar % Number follows previous--hold on to it
+ \ifx\@h@ld\relax
+ \edef \@h@ld{\@citea\csname b@\@scan@copy\endcsname}%
+ \else \edef\@h@ld{\ifmmode{-}\else--\fi\csname b@\@scan@copy\endcsname}%
+ \fi
+ \else \@h@ld\@citea\csname b@\@scan@copy\endcsname
+ \let\@h@ld\relax
+ \fi % no more
+\fi}%
+\def\@citea{,\penalty\@highpenalty\,}}\@h@ld}{#1}}
+
+% end of citesort.sty
diff --git a/obsolete/macros/latex209/contrib/misc/doublespace.sty b/obsolete/macros/latex209/contrib/misc/doublespace.sty
new file mode 100644
index 0000000000..34b33e1f0c
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/misc/doublespace.sty
@@ -0,0 +1,208 @@
+%% Copyright 1986 Stephen Page
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `unmaintained'.
+%
+% This work consists of the file doublespace.sty.
+%
+% The licence statement above was added by Clea F. Rees on behalf of
+% Stephen Page on 2008/10/31.
+%------------------------------------------------------------------------------
+%
+% LaTeX Document style option "doublespace"
+% -- usage: \documentstyle[...,doublespace,...]{...}
+%
+% This style option produces a double-spaced document by redefining
+% the LaTeX parameter \baselinestretch to 2.
+%
+% It also fixes a number of problems with standard LaTeX, as follows:
+%
+% 1. A new environment "singlespace" is provided, within which single
+% spacing will apply.
+% JFL - changed so that it works in regular text and so that vertical
+% space is before and after is correctly computed
+% 2. Double spacing is turned off within footnotes and floats (figures
+% and tables).
+% 3. Proper double spacing happens below tabular environments and in other
+% places where LaTeX uses a strut.
+% 4. Slightly more space is inserted before footnotes.
+% 5. JFL - fixes spacing before and after displayed math
+% 6. MAR - fix to work with new font selection scheme if used
+% 7. KPC - fix superfluous space bug.
+% 8. HGS - fixed for use with NFSS2
+%
+% Note: This version sets a baselinestretch of 2. If this is too much,
+% put \setstretch{1.7} (or some appropriate value) before the
+% \begin{document} command. To print the document with single spacing
+% again, without removing "singlespace" environments, just put a
+% \setstretch{1} at the top of the document.
+%
+% PLEASE REPORT ANY BUGS
+%
+% Modified by: Kaja P. Christiansen, kaja@daimi.aau.dk
+%
+% Modified by: Mark A. Roth, mroth@afit.af.mil
+%
+% Modified by: Jean-Francois Lamy
+% lamy@ai.toronto.edu
+% lamy@utai.uucp
+%
+% Modified by: Hendrik G. Seliger (HGS)
+% hank@Blimp.automat.uni-essen.de
+%
+% Author: Stephen Page -- sdpage@prg.oxford.ac.uk
+% sdpage%prg.oxford.ac.uk@cs.ucl.ac.uk
+%
+% Release date: 6 July 1986 - September 3, 1986
+%
+% Known bugs:
+% . It might be nice if spacing before the footnote rule (\footins)
+% were provided in a tidier way.
+% . Increasing struts may possibly cause some other obscure part of
+% formatting to fall over.
+% . \begin{singlespace}\begin{quote} produces the wrong spacing before
+% the quote (extra glue is inserted), use \begin{quote}\begin{singlespace}
+% . shouldn't @setsize stretch parskip as well?
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%---Set up double spacing
+
+\def\baselinestretch{2}
+
+
+%---New command "\setstretch" (slightly more mnemonic... and easier to type)
+
+\def\setstretch#1{\renewcommand{\baselinestretch}{#1}}
+
+%---Stretch the baseline BEFORE calculating the strut size. This improves
+% spacing below tabular environments etc., probably...
+% Comments are welcomed.
+% This change not needed with new font selection scheme-MAR
+
+\ifx\undefined\selectfont %then new font selection scheme not invoked-MAR
+\def\@setsize#1#2#3#4{\@nomath#1%-KPC
+ \let\@currsize#1\baselineskip
+ #2\baselineskip\baselinestretch\baselineskip
+ \parskip\baselinestretch\parskip
+ \setbox\strutbox\hbox{\vrule height.7\baselineskip
+ depth.3\baselineskip width\z@}%-KPC
+ \normalbaselineskip\baselineskip#3#4}
+\else %new font selection scheme is defined, set up way to change baselines-MAR
+ % NFSS2 does not have \setnew@baselineskip anymore - HGS
+\def\@newbaseline{%
+ \ifx\undefined\setnew@baselineskip% HGS
+ \baselineskip\f@baselineskip\relax%
+ \else% HGS
+ \setnew@baselineskip%
+ \fi% HGS
+ \baselineskip\baselinestretch\baselineskip
+ \setbox\strutbox\hbox{\vrule\@height.7\baselineskip
+ \@depth.3\baselineskip \@width\z@}%
+ \normalbaselineskip\baselineskip}% -MAR
+\fi %-MAR
+
+
+%---Increase the space between last line of text and footnote rule.
+% This is a very untidy way to do it!
+
+\skip\footins 20pt plus4pt minus4pt
+
+
+%---Reset baselinestretch within footnotes and floats. Originally stolen
+% from Stanford thesis style.
+
+\def\@xfloat#1[#2]{\ifhmode \@bsphack\@floatpenalty -\@Mii\else
+ \@floatpenalty-\@Miii\fi\def\@captype{#1}\ifinner
+ \@parmoderr\@floatpenalty\z@
+ \else\@next\@currbox\@freelist{\@tempcnta\csname ftype@#1\endcsname
+ \multiply\@tempcnta\@xxxii\advance\@tempcnta\sixt@@n
+ \@tfor \@tempa :=#2\do
+ {\if\@tempa h\advance\@tempcnta \@ne\fi
+ \if\@tempa t\advance\@tempcnta \tw@\fi
+ \if\@tempa b\advance\@tempcnta 4\relax\fi
+ \if\@tempa p\advance\@tempcnta 8\relax\fi
+ }\global\count\@currbox\@tempcnta}\@fltovf\fi
+ \global\setbox\@currbox\vbox\bgroup
+ \def\baselinestretch{1}
+ \ifx\undefined\selectfont %then new font selection scheme not invoked-MAR
+ \small\normalsize
+ \else %else new font selection scheme is invoked-MAR
+ \@newbaseline %include new baselinestretch-MAR
+ \fi %-MAR
+ \boxmaxdepth\z@
+ \hsize\columnwidth \@parboxrestore}
+\long\def\@footnotetext#1{\insert\footins{\def\baselinestretch{1}\footnotesize
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\footnotesep
+ \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
+ \hsize\columnwidth \@parboxrestore
+ \edef\@currentlabel{\csname p@footnote\endcsname\@thefnmark}\@makefntext
+ {\rule{\z@}{\footnotesep}\ignorespaces
+ #1\strut}}}
+
+% Stolen from MIT.
+%
+% A single spaced quote (say) is done by surrounding singlespace with quote.
+%
+\def\singlespace{%
+\vskip\parskip%
+\vskip\baselineskip%
+\def\baselinestretch{1}%
+\ifx\undefined\selectfont %then new font selection scheme not invoked-MAR
+\ifx\@currsize\normalsize\@normalsize\else\@currsize\fi%
+\else %else new font selection scheme is invoked-MAR
+\@newbaseline %include new baselinestretch-MAR
+\fi %-MAR
+\vskip-\parskip%
+\vskip-\baselineskip%
+}
+
+\def\endsinglespace{\par}
+
+% spacing, doublespace and onehalfspace all are meant to INCREASE the
+% spacing (i.e. calling onehalfspace from within doublespace will not
+% produce a graceful transition between spacings)
+%
+\def\spacing#1{\par%
+ \begingroup % moved from \endspacing by PGBR 1-29-91
+ \def\baselinestretch{#1}%
+ \ifx\undefined\selectfont %then new font selection scheme not invoked-MAR
+ \ifx\@currsize\normalsize\@normalsize\else\@currsize\fi
+ \else %else new font selection scheme is invoked-MAR
+ \@newbaseline %include new baselinestretch-MAR
+ \fi %-MAR
+}
+
+\def\endspacing{\par%
+ \vskip \parskip%
+ \vskip \baselineskip%
+ \endgroup%
+ \vskip -\parskip%
+ \vskip -\baselineskip%
+} %\begingroup used to be here, PGBR 1-29-91
+
+\def\onehalfspace{\spacing{1.5}}
+\let\endonehalfspace=\endspacing
+
+\def\doublespace{\spacing{2}}
+\let\enddoublespace=\endspacing %corrected--first end missing-MAR
+
+% Fix up spacing before and after displayed math
+% (arraystretch seems to do a fine job for inside LaTeX displayed math,
+% since array and eqnarray seem to be affected as expected)
+% Changing \baselinestretch and doing a font change also works if done here,
+% but then you have to change @setsize to remove the call to @nomath)
+%
+\everydisplay{
+ \abovedisplayskip \baselinestretch\abovedisplayskip%
+ \belowdisplayskip \abovedisplayskip%
+ \abovedisplayshortskip \baselinestretch\abovedisplayshortskip%
+ \belowdisplayshortskip \baselinestretch\belowdisplayshortskip}
+
diff --git a/obsolete/macros/latex209/contrib/misc/endfloat.sty b/obsolete/macros/latex209/contrib/misc/endfloat.sty
new file mode 100644
index 0000000000..8427156bc5
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/misc/endfloat.sty
@@ -0,0 +1,350 @@
+%% Save file as: ENDFLOAT.STY Source: FILESERV@SHSU.BITNET
+% Name: endfloat.sty
+% Description: LaTeX style to put figures and tables at end of article
+% Keywords: LaTeX, style-option, float, figure, table
+% Author: James Darrell McCauley <jdm5548@diamond.tamu.edu>
+% Latest Version: Version 2.0 <02 Jun 1992>
+% Archives: pasture.ecn.purdue.edu, shsu.edu or FILESERV@SHSU.BITNET
+% Note: See USAGE, CHANGE LOG, and BUGS below.
+% See also: comment.sty, endnotes.sty
+%
+% WHAT IS THIS STYLE FOR?
+% The purpose of this style is to put all figures on pages by themselves
+% at the end of an article in a section named Figures. Likewise for tables.
+% Reference can be made in the text of where the figure should have been
+% (only caption appears - see \markersintext [default] and \nomarkersintext
+% below. \ref and \label always works on the ones at the end). This is
+% usually required when preparing submissions to journals.
+%
+% WARNING!
+% This creates two extra files: \jobname.fff and \jobname.ttt
+% It may also necessitate another latex cycle because of the float
+% movement (when you use \label and \ref) and bibtex.
+%
+% WHY WRITE THIS STYLE?
+% Many journals require tables and figures to be separated from the text
+% when you submit those ugly doublespaced copies. They also usually want
+% a list of figures/tables before these sections (capability added in v2.0).
+%
+% I am writing a set of styles that look exactly like a journal, but just
+% by adding one style option, I wanted the user to meet the requirements
+% for formatting submissions. I encourage others to do the same.
+%
+% USAGE:
+% if you use: \documentstyle{article}
+% change it to: \documentstyle[endfloat]{article}
+% That's all you have to do. This will produce two extra files with
+% .ttt and .fff extensions (for tables and figures, respectively).
+%
+% This puts all figures and tables at the end of your document
+% and creates a List of Figures and/or List of Tables section
+% at the end (when appropriate). If you do not want a these, they
+% can be turned off by putting \nofiglist and \notablist in the
+% preamble of your document.
+%
+% It also leaves notes in the text (i.e., ``[Figure 4 about here.]'').
+% If you would rather not have these, this can be turned off by
+% putting \nomarkersintext in the preamble of your document. If you
+% do not like this marker, you can change it by using \renewcommand
+% (see PREPARING A FOREIGN LANGUAGE VERSION below).
+%
+% HOW DID I WRITE THIS?
+%
+% Overview: redefine the figure and table environment following % bj
+% the \begin{comment} ... \end{comment} environment of % bj
+% comment.sty by Victor Eijkhout <eijkhout@csrd.uiuc.edu>.
+% Instead of processing what was between \begin{...} and \end{...},
+% every line is written to a file (\jobname.fff for figures, \jobname.ttt
+% for tables). Then, when you do an \end{document}, the figure section
+% is processed, then the table section is processed. This could easily
+% be reversed (tables first) if necessary.
+%
+% After initial versions, I received much help from Ronald Kappert
+% and Brian Junker (see CHANGE LOG below). <Thanks guys!>
+% If anyone has any bugs/suggestions to report, mail them to
+% jdm5548@diamond.tamu.edu.
+% Darrell McCauley <02 Jun 1992>
+%
+% PREPARING A FOREIGN LANGUAGE VERSION
+%
+% 10-03-92: Announcements in any language can be generated with
+% a \renewcommand{\figureplace} or \renewcommand{\tableplace}
+% with default
+%\def\figureplace{\bf\figurename~\thepostfig should be placed near here.}
+% and
+%\def\tableplace{\bf\tablename~\theposttbl should be placed near here.}
+% The name of figures and tables is governed by standard
+% LaTeX variables \figurename and \tablename.
+% The name of the section with the figures can be governed with
+% a \renewcommand{\figuresection}{...Name of Figs. section...}
+% Ditto for \tablesection. Default is \def\tablesection{Tables}
+% and \def\figuresection{Figures}.
+%
+% URC (RJHK)
+%
+% CHANGE LOG
+% (if you make any changes to this, record them here)
+% <25 Feb 1992> v0.1 - created by Darrell McCauley <jdm5548@diamond.tamu.edu>
+% <01 Mar 1992> v1.0 - cleaned up and released <jdm5548@diamond.tamu.edu>
+%
+% <10 Mar 1992> v1.0 - some adaptions for LaTeX 2.09 <14-1-92> and
+% international namegiving by Ronald Kappert
+% <R.Kappert@urc.kun.nl>.
+% <13 Mar 1992> v1.1 - verified that floats were used before a section was
+% created for them. <jdm5548@diamond.tamu.edu>
+% <14 Mar 1992> v1.2 - corrected typo that may have caused figures not
+% to be printed. <jdm5548@diamond.tamu.edu>
+%
+% <27 May 1992> ???? - (1) changed "comment" to "figure" and "komment" to
+% "table" throughout, to avoid collisions with other
+% style files' definitions of "\comment". Also
+% fixes "\begin{table} ends with \end{komment}"
+% error generated by my (older) version of PC TeX.
+%
+% (2) Fixed gobble of float position specifiers.
+% There are two ways to do this: (a) \write
+% \ifnextchar[{\gobbleuntilnext}{} into every
+% environment written to \jobname.fff, etc.; (b)
+% save LaTeX's old def's of \figure and \table
+% and re-use them when processing fig's and tables.
+% I chose the latter approach, for maximum
+% consistency with LaTeX, other style files, etc.
+%
+% (3) Added def's of \tablename and \figurename,
+% which my version of PC-TeX seemed to need.
+% <backward compatability for earlier versions :-> %jdm
+%
+% (4) Moved formatting of figure/table markers to
+% \figureplace and \tableplace.
+%
+% (5) Style change: in-text markers are now
+% centered reminders like "[Figure 4 about here.]".
+%
+% (6) Style change: added list of tables and
+% figures to the table and figure sections.
+% Change back to old format with \nofiglist and
+% \notablist.
+%
+% (7) Changed default to \markersintext.
+%
+% (8) Fixed trivial typo in \@openposttbls
+%
+% All changes marked "% bj" at end of line.
+% Brian Junker <brian@stat.cmu.edu>
+% <02 Jun 1992> v2.0 - incorporated changes made by Junker (see above).
+% Corrected problem of extra blank spaces in
+% the output when \nomarkersintext was in effect
+% (bug reported by <schultz@unixg.ubc.ca>).
+% <jdm5548@diamond.tamu.edu>
+% BUGS:
+% <14 Mar 1992> still needs to gobble float position specifiers.
+%
+\newif\if@domarkers
+\def\markersintext{
+ \@domarkerstrue }
+\def\nomarkersintext{
+ \@domarkersfalse
+}
+%\nomarkersintext
+\markersintext % bj
+
+\newif\if@tablist % bj
+\def\dotablist{\@tablisttrue} % bj
+\def\notablist{\@tablistfalse} % bj
+\dotablist % bj
+
+\newif\if@figlist % bj
+\def\dofiglist{\@figlisttrue} % bj
+\def\nofiglist{\@figlistfalse} % bj
+\dofiglist % bj
+
+\newcounter{postfig}
+\newwrite\@postfigs
+\newif\if@postfigsopen \global\@postfigsopenfalse
+ \def\@openpostfigs{\immediate\openout\@postfigs=\jobname.fff\relax
+ \message{(\jobname.fff)}%
+ \global\@postfigsopentrue}
+
+\newcounter{posttbl}
+\newwrite\@posttbls
+\newif\if@posttblsopen \global\@posttblsopenfalse
+
+\def\@openposttbls{\immediate\openout\@posttbls=\jobname.ttt\relax
+ \message{(\jobname.ttt)}% % bj
+ \global\@posttblsopentrue}
+
+\def\makeinnocent#1{\catcode`#1=12 }
+
+%\def\figureplace{\bf\figurename~\thepostfig should be placed near here.} % bj
+%\def\tableplace{\bf\tablename~\theposttbl should be placed near here.} % bj
+
+\@ifundefined{figurename}{\def\figurename{Figure}}{} % bj
+\@ifundefined{tablename}{\def\tablename{Table}}{} % bj
+
+\def\figureplace{\begin{center} % bj
+[\figurename~\thepostfig\ about here.] % bj
+\end{center}} % bj
+\def\tableplace{\begin{center} % bj
+[\tablename~\theposttbl\ about here.] % bj
+\end{center}} % bj
+
+\def\@gobbleuntilnext[#1]{}
+%\let\eatarg\@gobbleuntilnext % bj
+%\let\ifnextchar\@ifnextchar % bj
+
+\let\@bfig\figure % bj
+\let\@efig\endfigure % bj
+\let\@btab\table % bj
+\let\@etab\endtable % bj
+\let\endfigure\relax % bj
+\let\endtable\relax % bj
+
+%
+% the {blank space } appearing with \nomarkersintext was fixed by adding
+% a percent sign (%) at strategic locations, determined by setting
+% \tracingcommands=1 % Darrell
+%
+
+\def\figure{%
+% \if@nextchar[{
+ \if@postfigsopen \else \@openpostfigs \fi%
+ \immediate\write\@postfigs{\string\begin{figure}}%
+% \immediate\write\@postfigs{\string\ifnextchar[{\string\eatarg}{}} % bj
+ \if@domarkers%
+ \addtocounter{postfig}{1}% % bj
+ \figureplace% % bj
+ \fi%
+ \def\@currenvir{figure}%
+ \begingroup%
+ \let\do\makeinnocent \dospecials%
+ \makeinnocent\^^L% and whatever other special cases
+ \endlinechar`\^^M \catcode`\^^M=12 \xfigure}%
+{\catcode`\^^M=12 \endlinechar=-1 %
+ \gdef\xfigure#1^^M{\def\test{#1}%
+ \ifx\test\endfiguretest%
+ \def\next{\endgroup\end{figure}%
+ \immediate\write\@postfigs{\string\end{figure}}%
+ \immediate\write\@postfigs{\string\clearpage}%
+ \immediate\write\@postfigs{ }}%
+ \else\ifx\test\enddblfiguretest%
+ \def\next{\endgroup\end{figure}%
+ \immediate\write\@postfigs{\string\end{figure}}%
+ \immediate\write\@postfigs{\string\clearpage}%
+ \immediate\write\@postfigs{ }}%
+ % skip over float position specifier (fps)
+ \else\@ifnextchar[%
+ \@whilesw \ifx\test\CB \fi%
+ \@gobble%
+ \else%
+ \if@postfigsopen \else \@openpostfigs \fi%
+ \immediate\write\@postfigs{#1}%
+ \let\next\xfigure%
+ \fi \fi \next}%
+}%
+
+%hello
+{\escapechar=-1%
+ \xdef\CB{]}%
+ \xdef\endfiguretest{\string\\end\string\{figure\string\}}%
+ \xdef\enddblfiguretest{\string\\end\string\{figure*\string\}}%
+}%
+
+\def\table{\if@posttblsopen \else \@openposttbls \fi
+ \immediate\write\@posttbls{\string\begin{table}}%
+% \immediate\write\@posttbls{\string\ifnextchar[{\string\eatarg}{}} % bj
+ \if@domarkers
+ \addtocounter{posttbl}{1} % bj
+ \tableplace % bj
+ \fi
+ \def\@currenvir{table}%
+ \begingroup
+ \let\do\makeinnocent \dospecials
+ \makeinnocent\^^L% and whatever other special cases
+ \endlinechar`\^^M \catcode`\^^M=12 \xtable}
+{\catcode`\^^M=12 \endlinechar=-1 %
+ \gdef\xtable#1^^M{\def\test{#1}
+ \ifx\test\enddbltabletest
+ \def\next{\endgroup\end{table}
+ \immediate\write\@posttbls{\string\end{table}}
+ \immediate\write\@posttbls{\string\clearpage}
+ \immediate\write\@posttbls{ }}
+ \else\ifx\test\endtabletest
+ \def\next{\endgroup\end{table}
+ \immediate\write\@posttbls{\string\end{table}}
+ \immediate\write\@posttbls{\string\clearpage}
+ \immediate\write\@posttbls{ }}
+ \else
+ \if@posttblsopen \else \@openposttbls \fi
+ \immediate\write\@posttbls{#1}%
+ \let\next\xtable
+ \fi \fi \next}
+}
+
+{\escapechar=-1
+ \xdef\enddbltabletest{\string\\end\string\{table*\string\}}
+ \xdef\endtabletest{\string\\end\string\{table\string\}}
+}
+%% end of stuff from comment.sty
+
+% \let\figure=\figure
+%\ let\table=\table
+\@namedef{figure*}{\figure}
+\@namedef{table*}{\table}
+\def\endfloat{\endfigure}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\figuresection{Figures}
+\def\tablesection{Tables}
+
+\def\processfigures{
+ \if@postfigsopen
+ \immediate\closeout\@postfigs \global\@postfigsopenfalse
+% \let\figure={\@float{figure}} % bj
+% \let\endfigure=\end@float % bj
+ \let\figure\@bfig % bj
+ \let\endfigure\@efig % bj
+ \clearpage % bj
+ \if@figlist % bj
+ {\normalsize\listoffigures} % bj
+ \clearpage % bj
+ \else % bj
+ \section*{\figuresection} % bj
+ \markboth{\uppercase{\figuresection}}{\uppercase{\figuresection}}% bj
+ \fi % bj
+ { % bj
+ \def\baselinestretch{1}\tiny\normalsize % bj
+ \@input{\jobname.fff} % bj
+ } % bj
+ \fi}
+
+\def\processtables{
+\if@posttblsopen
+ \immediate\closeout\@posttbls \global\@posttblsopenfalse
+% \let\table={\@float{table}} % bj
+% \let\endtable=\end@float % bj
+ \let\table\@btab % bj
+ \let\endtable\@etab % bj
+ \clearpage % bj
+ \if@tablist % bj
+ {\normalsize\listoftables} % bj
+ \clearpage % bj
+ \else % bj
+ \section*{\tablesection} % bj
+ \markboth{\uppercase{\tablesection}}{\uppercase{\tablesection}}% bj
+ \fi % bj
+ { % bj
+ \def\baselinestretch{1}\tiny\normalsize % bj
+ \@input{\jobname.ttt} % bj
+ }
+ \fi}
+
+\def\enddocument{\onecolumn\processfigures\clearpage\processtables
+\@checkend{document}\clearpage\begingroup
+\if@filesw \immediate\closeout\@mainaux
+\def\global\@namedef##1##2{}\def\newlabel{\@testdef r}%
+\def\bibcite{\@testdef b}\@tempswafalse \makeatletter\input \jobname.aux
+\if@tempswa \@warning{Label(s) may have changed. Rerun to get
+cross-references right}\fi\fi\endgroup\deadcycles\z@\@@end}
+
+\endinput
diff --git a/obsolete/macros/latex209/contrib/misc/endnote.sty b/obsolete/macros/latex209/contrib/misc/endnote.sty
new file mode 100644
index 0000000000..0a6f9af68e
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/misc/endnote.sty
@@ -0,0 +1,34 @@
+% Use \endnote{1}{text}. At the end of your document, type
+% \producenotes to actually flush all end notes to be printed.
+%
+% macros for making endnotes instead of footnotes
+% We make @ signs act like letters, temporarily, to avoid conflict
+% between user names and internal control sequences of plain format.
+\catcode`@=11
+\newbox\endnotebox
+
+\def\setendnotefont#1{\gdef\endnotefont{#1}}
+\setendnotefont{\normalsize\rm}
+\@definecounter{endnotei}
+\def\theendnotei{\arabic{endnotei}}
+\def\labelendnotei{(\theendnotei)}
+
+\def\endnote#1{\let\@sf\empty
+ \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi
+ \stepcounter{endnotei} $^{\theendnotei}$\@sf% \vendnote
+ {\global\setbox\endnotebox=
+ \vbox{\parindent=0pt\endnotefont\unvbox\endnotebox\bgroup \theendnotei.\
+ #1\@endnote}}}
+
+\def\no@te{\ifcat\bgroup\noexpand\next \let\next\n@@te
+ \else\let\next\n@t\fi }%\next}
+
+\def\n@@te{\bgroup\aftergroup\@endnote\let\next}
+
+\def\n@t#1{#1\@endnote}
+
+\def\@endnote{\strut\unskip\hfil \penalty -\@M\relax \egroup} %
+
+\def\producenotes{%
+\ifvoid\endnotebox\else\medskip\unvbox\endnotebox\par\fi}
+\catcode`@=12 % at signs are no longer letters
diff --git a/obsolete/macros/latex209/contrib/misc/endnotes.sty b/obsolete/macros/latex209/contrib/misc/endnotes.sty
new file mode 100644
index 0000000000..4d28e593ad
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/misc/endnotes.sty
@@ -0,0 +1,325 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Save file as: ENDNOTES.STY
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ****************************************
+% * ENDNOTES *
+% ****************************************
+%
+% Date of this version: 24 September 1991.
+%
+% Based on the FOOTNOTES section of
+% LATEX.TEX (VERSION 2.09 - RELEASE OF 19 April 1986), with
+% "footnote" changed to "endnote" and "fn" changed to "en" (where
+% appropriate), with all the minipage stuff pulled out, and with
+% some small changes for the different operation of endnotes.
+%
+% Uses an extra external file, with .ENT extension, to hold the
+% text of the endnotes. This may be deleted after the run; a new
+% version is generated each time.
+%
+% This code does not obey \nofiles. Perhaps it should.
+%
+% John Lavagnino (lav@brandeis.bitnet), 9/23/88
+% Department of English and American Literature,
+% Brandeis University
+%
+% To turn all the footnotes in your documents into endnotes, say
+%
+% \let\footnote=\endnote
+%
+% in your preamble, and then add something like
+%
+% \newpage
+% \begingroup
+% \parindent 0pt
+% \parskip 2ex
+% \def\enotesize{\normalsize}
+% \theendnotes
+% \endgroup
+%
+% as the last thing in your document.
+%
+% ****************************************
+% * CHANGE LOG *
+% ****************************************
+%
+% JL Modified to include \addtoendnotes. JL, 10/22/89.
+%
+% JK Modification by J"org Knappen 25. 2. 1991:
+% JK
+% JK Introduced \notesname in the spirit of international \LaTeX.
+% JK \notesname is set per default to be {Notes}, but can easily
+% JK be redifined, e.g. for german language
+% JK \renewcommand{\notesname}{Anmerkungen}
+%
+% DW Modification by Dominik Wujastyk, London, 19 September 1991:
+% DW
+% DW Moved the line
+% DW \edef\@currentlabel{\csname p@endnote\endcsname\@theenmark}
+% DW out of the definition of \@endnotetext and into the definition
+% DW of \@doanenote so that \label and \ref commands work correctly in
+% DW endnotes. Otherwise, the \label just pointed to the last section
+% DW heading (or whatever) preceding the \theendnotes command.
+%
+% JL Revised documentation and macros. 24 Sept 1991.
+%
+% ****************************************
+% * ENDNOTE COMMANDS *
+% ****************************************
+%
+%
+% \endnote{NOTE} : User command to insert a endnote.
+%
+% \endnote[NUM]{NOTE} : User command to insert a endnote numbered
+% NUM, where NUM is a number -- 1, 2,
+% etc. For example, if endnotes are numbered
+% *, **, etc. within pages, then \endnote[2]{...}
+% produces endnote '**'. This command does not
+% step the endnote counter.
+%
+% \endnotemark[NUM] : Command to produce just the endnote mark in
+% the text, but no endnote. With no argument,
+% it steps the endnote counter before generating
+% the mark.
+%
+% \endnotetext[NUM]{TEXT} : Command to produce the endnote but no
+% mark. \endnote is equivalent to
+% \endnotemark \endnotetext .
+%
+% \addtoendnotes{TEXT} : Command to add text or commands to current
+% endnotes file: for inserting headings,
+% pagebreaks, and the like into endnotes
+% sections. TEXT a moving argument:
+% \protect required for fragile commands.
+%
+% ****************************************
+% * ENDNOTE USER COMMANDS *
+% ****************************************
+%
+% Endnotes use the following parameters, similar to those relating
+% to footnotes:
+%
+% \enotesize : Size-changing command for endnotes.
+%
+% \theendnote : In usual LaTeX style, produces the endnote number.
+%
+% \@theenmark : Holds the current endnote's mark--e.g., \dag or '1' or 'a'.
+%
+% \@makeenmark : A macro to generate the endnote marker from \@theenmark
+% The default definition is \hbox{$^\@theenmark$}.
+%
+% \@makeentext{NOTE} :
+% Must produce the actual endnote, using \@theenmark as the mark
+% of the endnote and NOTE as the text. It is called when effectively
+% inside a \parbox, with \hsize = \columnwidth. For example, it might
+% be as simple as
+% $^{\@theenmark}$ NOTE
+%
+%
+% ****************************************
+% * ENDNOTE PSEUDOCODE *
+% ****************************************
+%
+% \endnote{NOTE} ==
+% BEGIN
+% \stepcounter{endnote}
+% \@theenmark :=G eval (\theendnote)
+% \@endnotemark
+% \@endnotetext{NOTE}
+% END
+%
+% \endnote[NUM]{NOTE} ==
+% BEGIN
+% begingroup
+% counter endnote :=L NUM
+% \@theenmark :=G eval (\theendnote)
+% endgroup
+% \@endnotemark
+% \@endnotetext{NOTE}
+% END
+%
+% \@endnotetext{NOTE} ==
+% BEGIN
+% write to \@enotes file: "\@doanenote{ENDNOTE MARK}"
+% begingroup
+% \next := NOTE
+% set \newlinechar for \write to \space
+% write to \@enotes file: \meaning\next
+% (that is, "macro:->NOTE)
+% endgroup
+% END
+%
+% \addtoendnotes{TEXT} ==
+% BEGIN
+% open endnotes file if not already open
+% begingroup
+% let \protect to \string
+% set \newlinechar for \write to \space
+% write TEXT to \@enotes file
+% endgroup
+% END
+%
+% \endnotemark ==
+% BEGIN \stepcounter{endnote}
+% \@theenmark :=G eval(\theendnote)
+% \@endnotemark
+% END
+%
+% \endnotemark[NUM] ==
+% BEGIN
+% begingroup
+% endnote counter :=L NUM
+% \@theenmark :=G eval(\theendnote)
+% endgroup
+% \@endnotemark
+% END
+%
+% \@endnotemark ==
+% BEGIN
+% \leavevmode
+% IF hmode THEN \@x@sf := \the\spacefactor FI
+% \@makeenmark % put number in main text
+% IF hmode THEN \spacefactor := \@x@sf FI
+% END
+%
+% \endnotetext ==
+% BEGIN \@theenmark :=G eval (\theendnote)
+% \@endnotetext
+% END
+%
+% \endnotetext[NUM] ==
+% BEGIN begingroup counter endnote :=L NUM
+% \@theenmark :=G eval (\theendnote)
+% endgroup
+% \@endnotetext
+% END
+%
+% ****************************************
+% * ENDNOTE MACROS *
+% ****************************************
+%
+
+\@definecounter{endnote}
+\def\theendnote{\arabic{endnote}}
+
+% Default definition
+\def\@makeenmark{\hbox{$^{\@theenmark}$}}
+
+\newdimen\endnotesep
+
+\def\endnote{\@ifnextchar[{\@xendnote}{\stepcounter
+ {endnote}\xdef\@theenmark{\theendnote}\@endnotemark\@endnotetext}}
+
+\def\@xendnote[#1]{\begingroup \c@endnote=#1\relax
+ \xdef\@theenmark{\theendnote}\endgroup
+ \@endnotemark\@endnotetext}
+
+% Here begins endnote code that's really different from the footnote
+% code of LaTeX.
+
+\let\@doanenote=0
+\let\@endanenote=0
+
+\newwrite\@enotes
+\newif\if@enotesopen \global\@enotesopenfalse
+
+\def\@openenotes{\immediate\openout\@enotes=\jobname.ent\relax
+ \global\@enotesopentrue}
+
+% The stuff with \next and \meaning is a trick from the TeXbook, 382,
+% there intended for setting verbatim text, but here used to avoid
+% macro expansion when the footnote text is written. \next will have
+% the entire text of the footnote as one long line, which might well
+% overflow limits on output line length; the business with \newlinechar
+% makes every space become a newline in the \@enotes file, so that all
+% of the lines wind up being quite short.
+
+\long\def\@endnotetext#1{%
+ \if@enotesopen \else \@openenotes \fi
+ \immediate\write\@enotes{\@doanenote{\@theenmark}}%
+ \begingroup
+ \def\next{#1}%
+ \newlinechar='40
+ \immediate\write\@enotes{\meaning\next}%
+ \endgroup
+ \immediate\write\@enotes{\@endanenote}}
+
+% \addtoendnotes works the way the other endnote macros probably should
+% have, requiring the use of \protect for fragile commands.
+
+\long\def\addtoendnotes#1{%
+ \if@enotesopen \else \@openenotes \fi
+ \begingroup
+ \newlinechar='40
+ \let\protect\string
+ \immediate\write\@enotes{#1}%
+ \endgroup}
+
+% End of unique endnote code
+
+\def\endnotemark{\@ifnextchar[{\@xendnotemark
+ }{\stepcounter{endnote}\xdef\@theenmark{\theendnote}\@endnotemark}}
+
+\def\@xendnotemark[#1]{\begingroup \c@endnote #1\relax
+ \xdef\@theenmark{\theendnote}\endgroup \@endnotemark}
+
+\def\@endnotemark{\leavevmode\ifhmode
+ \edef\@x@sf{\the\spacefactor}\fi \@makeenmark
+ \ifhmode\spacefactor\@x@sf\fi\relax}
+
+\def\endnotetext{\@ifnextchar
+ [{\@xendnotenext}{\xdef\@theenmark{\theendnote}\@endnotetext}}
+
+\def\@xendnotenext[#1]{\begingroup \c@endnote=#1\relax
+ \xdef\@theenmark{\theendnote}\endgroup \@endnotetext}
+
+
+% \theendnotes actually prints out the endnotes.
+
+% The user may want separate endnotes for each chapter, or a big
+% block of them at the end of the whole document. As it stands,
+% either will work; you just say \theendnotes wherever you want the
+% endnotes so far to be inserted. However, you must add
+% \setcounter{endnote}{0} after that if you want subsequent endnotes
+% to start numbering at 1 again.
+
+% \enoteformat is provided so user can specify some special formatting
+% for the endnotes. It needs to set up the paragraph parameters, start
+% the paragraph, and print the label. The \leavemode stuff is to make
+% and undo a dummy paragraph, to get around the games \section*
+% plays with paragraph indenting.
+
+\def\notesname{Notes}% <------ JK
+\def\enoteheading{\section*{\notesname
+ \@mkboth{\uppercase{\notesname}}{\uppercase{\notesname}}}%
+ \leavevmode\par\vskip-\baselineskip}
+
+\def\enoteformat{\rightskip\z@ \leftskip\z@ \parindent=1.8em
+ \leavevmode\llap{\hbox{$^{\@theenmark}$}}}
+
+\def\enotesize{\footnotesize}
+
+% The definition of \ETC. is needed only for versions of TeX prior
+% to 2.992. Those versions limited \meaning expansions to 1000
+% characters; in 2.992 and beyond there is no limit. At Brandeis the
+% BIGLATEX program changed the code in the token_show procedure of
+% TeX to eliminate this problem, but most ``big'' versions of TeX
+% will not solve this problem.
+
+\def\theendnotes{\immediate\closeout\@enotes \global\@enotesopenfalse
+ \begingroup
+ \makeatletter
+ \def\@doanenote##1##2>{\def\@theenmark{##1}\par\begingroup
+ \edef\@currentlabel{\csname p@endnote\endcsname\@theenmark} %DW
+ \enoteformat}
+ \def\@endanenote{\par\endgroup}%
+ \def\ETC.{\errmessage{Some long endnotes will be truncated; %
+ use BIGLATEX to avoid this}%
+ \def\ETC.{\relax}}
+ \enoteheading
+ \enotesize
+ \@input{\jobname.ent}%
+ \endgroup}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\endinput
diff --git a/obsolete/macros/latex209/contrib/misc/float.sty b/obsolete/macros/latex209/contrib/misc/float.sty
new file mode 100644
index 0000000000..3ff0fd8b81
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/misc/float.sty
@@ -0,0 +1,815 @@
+%%% ====================================================================
+%%% @LaTeX-style-file{
+%%% filename = "float.sty",
+%%% version = "1.1c",
+%%% date = "18 December 1992",
+%%% time = "10:00:00 CET",
+%%% author = "Anselm Lingnau",
+%%% address = "Hochschulrechenzentrum/FB Mathematik
+%%% Johann Wolfgang Goethe-Universit\"at
+%%% Postfach 11 19 32
+%%% DW-6000 Frankfurt am Main
+%%% Germany",
+%%% telephone = "+49 798 2554",
+%%% checksum = "56253 815 4764 35676"
+%%% email = "lingnau@math.uni-frankfurt.de (Internet)",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "LaTeX, figure, table, floats",
+%%% supported = "yes",
+%%% docstring = "
+%%%
+%%% float.sty
+%%%
+%%% A LaTeX style option which defines a \newfloat command
+%%% to define new classes of floats in the spirit of \newtheorem.
+%%% Floats can be defined to use any of various 'float styles'.
+%%% float.sty also incorporates the functionality of David Carlisle's
+%%% here.sty, giving floats a [H] option, meaning 'do not float',
+%%% or 'PUT IT HERE'.
+%%%
+%%% Documentation requires Frank Mittelbach's doc.sty.",
+%%% }
+%%% ========================================================================
+%
+% Beware of file version and date in banner at top of implementation below.
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% * Version 1.1a, added here.sty functionality.
+% * Version 1.1b, \@Esphack in place of \@esphack. Removed spurious
+% * whitespace. Fixed documentation. Thanks to David Carlisle.
+% * Version 1.1c, \@Esphack hack for compatibility with old LaTeXes. Fixed
+% * checksums. Removed spurious blank line at end of file. Thanks again.
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%<*x>
+% This file may be used without modification as a style (.sty) file.
+%
+% If you have Mittelbach's doc.sty, this file may be formatted with a
+% command like:
+% latex float.sty
+%
+% If you have the Mittelbach/Duchier/Braams docstrip utility, you may
+% produce a faster loading .sty file. Rename this file to: float.doc
+% Then run this file through *plain* TeX:
+% tex float.doc
+% This should produce the file float.sty.
+% If you do not have plain TeX on your system, you can trick LaTeX into
+% doing the work as follows:
+% latex \def\fmtname{plain} \input float.doc
+% Note that you may need to quote the arguments here to stop your
+% operating system treating the \ characters incorrectly.
+%
+% latex float.doc
+% will produce a typeset version of the documentation, as above.
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\plain{plain}\ifx\fmtname\plain\csname fi\endcsname
+ \def\batchfile{float.doc}
+ \input docstrip
+ \preamble
+ Do not distribute the stripped version of this file.
+
+ \endpreamble
+ \generateFile{float.sty}{t}{\from{float.doc}{}}
+ \endinput
+\fi
+%
+\ifcat a\noexpand @\let\next\relax\else\def\next{%
+ \documentstyle[float,doc]{article}\MakePercentIgnore}\fi\next
+%
+%\def\eatmodule<#1>{}\eatmodule
+%</x>
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \textwidth=355pt ^^A Allow macrocode text with 72 columns
+% \CodelineIndex ^^A Code lines numbered
+% \EnableCrossrefs ^^A No Cross References
+% \MakeShortVerb{\|} ^^A |\foo| works like \verb+|\foo|
+% \CheckSum{467}
+%
+% \DoNotIndex{\@Esphack,\@Mii,\@Miv,\@cons,\@currlist,\@dblarg,\@dbldeferlist}
+% \DoNotIndex{\@dblfloat,\@dottedtocline,\@eha,\@esphack,\@float}
+% \DoNotIndex{\@floatpenalty,\@ifnextchar,\@ifundefined,\@latexerr}
+% \DoNotIndex{\@mkboth,\@namedef,\@nameuse,\@parboxrestore,\@spaces}
+% \DoNotIndex{\@starttoc,\@tempa,\@tempboxa,\@tempdima,\@warning}
+% \DoNotIndex{\addcontentsline,\advance,\arabic,\bf,\bgroup,\box,\chapter}
+% \DoNotIndex{\columnwidth,\csname,\def,\dimen,\docdate,\edef,\egroup,\else}
+% \DoNotIndex{\endcsname,\endinput,\expandafter,\fi,\filedate,\fileversion}
+% \DoNotIndex{\global,\hbadness,\hbox,\hfil,\hrule,\hsize,\ht,\if@twocolumn}
+% \DoNotIndex{\ifdim,\iffalse,\ifnum,\iftrue,\ifvbox,\ifx,\ignorespaces}
+% \DoNotIndex{\intextsep,\kern,\let,\long,\moveleft,\newbox,\newcount}
+% \DoNotIndex{\newcounter,\newif,\noexpand,\normalsize,\numberline,\par}
+% \DoNotIndex{\parindent,\penalty,\prevdepth,\protect,\refstepcounter,\relax}
+% \DoNotIndex{\rm,\section,\setbox,\space,\textheight,\the,\typeout,\unvbox}
+% \DoNotIndex{\uppercase,\vadjust,\vbox,\vrule,\vskip,\wd,\wlog,\z@}
+%
+% \title{An Improved Environment for Floats}
+% \author{Anselm Lingnau\thanks{Hochschulrechenzentrum/Fachbereich Mathematik,
+% Johann Wolfgang Goethe-Universit\"at, Postfach 11\,19\,32,
+% DW-6000 Frankfurt am Main.
+% E-Mail: {\tt lingnau@math.uni-frankfurt.de}}%
+% \thanks{Part of this style option is based on
+% {\tt here.sty} by David Carlisle ({\tt carlisle@cs.man.ac.uk}),
+% who also provided helpful criticism.}}
+% \date{8 October 1992}
+% \floatstyle{ruled}
+% \newfloat{Program}{tbp}{lop}[section]
+% \floatstyle{plain}
+% \newfloat{Example}{t}{lox}[section]
+% \floatstyle{boxed}
+% \restylefloat{table}
+% \begin{document}
+% \maketitle
+%
+% \begin{abstract}
+% This style option improves the interface for defining floating
+% objects such as figures and tables in \LaTeX{}.
+% It adds the notion of a `float style' that governs appearance
+% of floats.
+% New kinds of floats may be defined using a |\newfloat| command
+% analogous to |\newtheorem|.
+% This style option also incorporates the functionality
+% of David Carlisle's {\tt here.sty},
+% giving floating environments a {\tt [H]} option which means `PUT IT HERE'
+% (as opposed to the standard {\tt [h]} option which means
+% `You may put it here if you like').
+% \end{abstract}
+%
+% \section{Introduction}
+%
+% Among the features of \LaTeX\ are `floating' figures and tables
+% that drift from where they appear in the input text to, say, the top
+% of a page. The contents and formatting of floats is pretty much up
+% to the user, except that there is a |\caption| command that
+% governs formatting of the caption --- it is centered if it is short,
+% and formatted as a paragraph if it is longer than a single line of text.
+% Sometimes other types of floating objects, e.g., algorithms or programs,
+% are desirable, but they must be defined by analogy to the existing
+% floats since there is no simple command for doing this. This goes
+% beyond the knowledge or inclination of the average \LaTeX\ user.
+%
+% In this style option, I present an interface to floating objects
+% that attempts to fix some of these shortcomings.
+% First of all, I introduce the notion of a `float style'.
+% A float style governs the appearance of a class of floats like a page style
+% governs the appearance of a page (\LaTeX\ has page styles {\tt plain},
+% {\tt empty} and {\tt headings}, among others). This style option
+% provides some exemplary float styles:
+% \begin{description}
+% \item[plain] This is the float style that \LaTeX\ normally applies to
+% its floats, i.e., nothing in particular. The only difference is
+% that the caption comes out {\em below\/} the body of the float,
+% regardless of where it is given in the text.
+% \item[boxed] The body of the float is printed inside a box. The caption
+% goes below that box.
+% \item[ruled] This float style is patterned on the table style of
+% {\sl Concrete Mathematics}. The caption is printed at the top of the
+% float, surrounded by rules; another rule finishes off the float.
+% \end{description}
+%
+% \begin{Program}
+% \begin{verbatim}
+% #include <stdio.h>
+%
+% int main(int argc, char **argv)
+% {
+% int i;
+% for (i = 0; i < argc; ++i)
+% printf("argv[%d] = %s\n", i, argv[i]);
+% return 0;
+% }
+% \end{verbatim}
+% \caption{The first program. This hasn't got anything to do with the style
+% but is included as an example. Note the {\tt ruled} float style.%
+% \label{prog1.1}}
+% \end{Program}
+% To facilitate the definition of new floating objects, {\tt float.sty}
+% supports the |\newfloat| command. This command is comparable to
+% |\newtheorem| in that it allows the user to add a new class of floats
+% at the document level. No style option hacking is necessary.
+% There's also a |\listof| command that prints a listing of all the
+% floats of a given type, like |\listoffigures| and |\listoftables|
+% in vanilla \LaTeX.
+%
+% \section{The User Interface --- New Floats}
+%
+% \DescribeMacro{\newfloat}
+% The most important command in {\tt float.sty} is the |\newfloat|
+% command. As mentioned above, it is patterned on |\newtheorem|.
+% The |\newfloat| command takes three required and one optional
+% argument; it is of the form\\[2pt]
+% \hspace*{\MacroIndent}|\newfloat{|\meta{type}|}{|^^A
+% \meta{placement}|}{|\meta{ext}|}[|\meta{within}{\tt]}\\[2pt]
+% \meta{type} is the `type' of the new class of floats, like {\tt program}
+% or {\tt algorithm}. After the appropriate |\newfloat|, commands
+% like |\begin{program}| or |\end{algorithm*}| will be available.
+% \meta{placement} gives the default placement parameters for this class
+% of floats. The placement parameters are the same as in standard \LaTeX,
+% i.e., {\tt t}, {\tt b}, {\tt p} and {\tt h} for `top', `bottom',
+% `page' and `here', respectively.
+% When \LaTeX\ writes the captions to an auxiliary file for the list
+% of figures (or whatever), it'll use the job name followed by \meta{ext}
+% as a file name.
+% Finally, the optional argument \meta{within} determines whether floats
+% of this class will be numbered within some sectional unit of the document.
+% For example, if \meta{within}$=${\tt chapter}, the floats will be numbered
+% within chapters. (In standard \LaTeX, this happens with figures and tables
+% in the {\tt report} and {\tt book} document styles.)
+% As an example, Program~\ref{prog1.1} above was created by a command
+% sequence similar to that shown in the following Example.
+% \begin{Example}[H]
+% \begin{verse}
+% |\floatstyle{ruled}|\\
+% |\newfloat{Program}{tbp}{lop}[section]|\\
+% \dots\ loads o' stuff \dots\\
+% |\begin{Program}|\\
+% |\begin{verbatim}|\\
+% \dots\ program text \dots\\
+% |\end{verbatim}|\\
+% |\caption{|\dots\ caption \dots|}|\\
+% |\end{Program}|
+% \end{verse}
+% \caption{This is another silly floating Example. Except that this one
+% doesn't actually float because it uses the {\tt[H]} optional parameter
+% to appear {\bf Here}. (Gotcha.)}
+% \end{Example}
+%
+% \DescribeMacro{\floatstyle}
+% The |\floatstyle| command sets a default float style. This float style
+% will be used for all the floats that are subsequently defined using
+% |\newfloat|, until another |\floatstyle| command appears.
+% The |\floatstyle| command takes one argument, the name of a float
+% style. For instance, |\floatstyle{ruled}|. Specifying a string that
+% does not name a valid float style is an error.
+%
+% \DescribeMacro{\floatname}
+% The |\floatname| command lets you define the {\em float name\/} that
+% \LaTeX\ uses in the caption of a float, i.e., `Figure' for a figure
+% and so on. For example, |\floatname{program}{Program}|.
+% The |\newfloat| command sets the float name to its argument
+% \meta{type} if no other name has been specified before.
+%
+% \DescribeMacro{\floatplacement}
+% The |\floatplacement| command resets the default placement specifier
+% of a class of floats. E.g., |\floatplacement{figure}{tp}|.
+%
+% \DescribeMacro{\restylefloat}
+% The |\restylefloat| command is necessary to change styles for the
+% standard float types {\tt figure} and {\tt table}. Since these aren't
+% usually defined via |\newfloat|, they don't have a style associated
+% with them. Thus you have to say, for example,\\[2pt]
+% \hspace*{\MacroIndent}|\floatstyle{ruled}|\\
+% \hspace*{\MacroIndent}|\restylefloat{table}|\\[2pt]
+% to have tables come out {\tt ruled}. The command also lets you change
+% style for floats that you define via |\newfloat|, although this
+% is, typographically speaking, not a good idea.
+% See table~\ref{table1} for an example.
+% \DeleteShortVerb{\|}
+% \begin{table} \def\B#1{$\displaystyle{n\choose#1}$}
+% \begin{center} \begin{tabular}{c|ccccc}
+% $n$&\B0&\B1&\B2&\B3&\B4\\ \hline
+% 0 & 1\\
+% 1 & 1&1\\
+% 2 & 1&2&1\\
+% 3 & 1&3&3&1\\
+% 4 & 1&4&6&4&1
+% \end{tabular} \end{center}
+% \caption{Pascal's triangle. This is a re-styled \LaTeX\ {\tt table}.%
+% \label{table1}}
+% \end{table}
+% \MakeShortVerb{\|}
+%
+% \DescribeMacro{\listof}
+% The |\listof| command produces a list of all the floats of a given
+% class. Its syntax is\\[2pt]
+% \hspace*{\MacroIndent}|\listof{|\meta{type}|}{|\meta{title}^^A
+% |}|\\[2pt]
+% \meta{type} is the float type given in the |\newfloat| command.
+% \meta{title} is used for the title of the list as well as the headings
+% if the current page style includes them. Otherwise, the |\listof|
+% command is analogous to the built-in \LaTeX\ commands
+% |\listoffigures| and |\listoftables|.
+%
+% \section{The User Interface --- {\tt[H]} Placement Specifier}
+%
+% Many people find \LaTeX's float placement specifiers too restrictive.
+% A Commonly Uttered Complaint (CUC) calls for a way to place a float
+% exactly at the spot where it occurs in the input file, i.e., to {\em not\/}
+% have it float at all.
+% It seems that the {\tt[h]} specifier should do that, but in fact it
+% only suggests to \LaTeX\ something along the lines of ``put the float
+% here if it's OK with you''. As it turns out, \LaTeX\ hardly ever feels
+% inclined to actually do that. This situation can be improved by
+% judicious manipulation of float style parameters.
+%
+% The same effect can be achieved by changing the actual method of
+% placing floats. David Carlisle's {\tt here.sty} introduces a new float
+% placement specifier, namely {\tt[H]}, which, when added to a float,
+% tells \LaTeX\ to ``put it HERE, period''. If there isn't enough space
+% left on the page, the float is carried over to the next page together
+% with whatever follows, even though there might still be room left for
+% some of that.
+% This style option provides the {\tt[H]} specifier for newly defined
+% classes of floats as well as the predefined {\tt figure}s and
+% {\tt table}s, thereby superseding {\tt here.sty}. David suggests
+% that the {\tt here.sty} be withdrawn from the archives in due course.
+%
+% The {\tt[H]} specifier may simply be added to the float as an optional
+% argument, like all the other specifiers.
+% It may {\em not\/} be used in conjunction with any other placement
+% specifiers, so {\tt[Hhtbp]} is illegal.
+% Neither may it be used as the default placement specifier for a whole
+% class of floats.
+% The following table is
+% defined like this:
+% \begin{verse}
+% |\begin{table}[H]|\\
+% |\begin{tabular}{cl}|\\
+% |\tt t & Top of the page\\|\\
+% \dots\ more stuff \dots\\
+% \end{verse}
+% (It seems that I have to add some extraneous chatter here just so that
+% the float actually comes out right in the middle of a printed page.
+% When I \LaTeX ed the documentation just now it turned out that there
+% was a page break that fell exactly between the ``So now'' line and the
+% float. This wouldn't Prove Anything. Bother.)
+% So now we have the following float placement specifiers:
+% \begin{table}[H]
+% \begin{tabular}{cl}
+% \tt t & Top of the page\\
+% \tt b & Bottom of the page\\
+% \tt p & Page of floats\\
+% \tt h & Here, if possible\\
+% \tt H & Here, definitely
+% \end{tabular}
+% ^^A\caption{Could it be that this just needs a caption?}
+% \end{table}
+%
+% \typeout{End of the Introduction.}
+% \typein[\answer]%
+% {Do you want an annotated listing of the macro definitions (y/n) ?}
+% \def\next{y}\ifx\answer\next\else\expandafter\stop\fi
+% \StopEventually{\PrintIndex}
+%
+% \section{Implementation}
+%
+% As usual, the file identifies itself in the log file.
+% But only if this file's macros aren't yet defined.
+% `Old' versions of \LaTeX\ (those before March 1992) don't have |\@Esphack|.
+% We do an |\@esphack| hack to get around that.
+% \begin{macrocode}
+\@ifundefined{newfloat}{}{\endinput}
+\wlog{Style-Option: `float' 1.1c 18 Dec 92 (AL)}
+\@ifundefined{@Esphack}{\let\@Esphack\@esphack}{}
+% \end{macrocode}
+% In \LaTeX, floats are assigned `type numbers' that are powers of two.
+% Since there are only two classes of floats, their type numbers are
+% hardwired into the document styles. We need to be somewhat more flexible,
+% and thus we initialize a counter to hold the next type number to be
+% assigned. This counter will be incremented appropriately later.
+% \begin{macrocode}
+\newcount\float@type
+\@ifundefined{c@figure}{\float@type=1}{\float@type=4}
+% \end{macrocode}
+% To warm up, we'll look at some of the simpler commands first.
+% \begin{macro}{\floatstyle}
+% The |\floatstyle| command puts its argument into the
+% |\float@style| macro as the name of the new float style.
+% But if the argument doesn't denote a float style, an error message
+% is output instead: Each float style \meta{style} has a corresponding command
+% |\fs@|\meta{style} that contains the appropriate declarations.
+% If the control sequence |\fs@|\meta{arg} (which goes with the
+% argument \meta{arg} to |\floatstyle|) is undefined, i.e.,
+% equals |\relax| under |\ifx|, then the float style \meta{arg}
+% is unknown, and we call |\float@error{|\meta{arg}|}| for the
+% error message.
+% \begin{macrocode}
+\def\floatstyle#1{\expandafter\ifx\csname fs@#1\endcsname\relax
+ \float@error{#1}\else\def\float@style{#1}\fi}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\float@error}
+% Here's the error message. |\@eha| is the help message that says
+% `Your command was ignored.'
+% \begin{macrocode}
+\def\float@error#1{\@latexerr{Unknown float style `#1'}\@eha}
+% \end{macrocode}
+% \end{macro}
+%
+% The next two commands are even simpler. \LaTeX\ says that
+% |\fps@|\meta{float} contains the default placement specifier for
+% the class of floats \meta{float}. |\fname@|\meta{float} expands
+% to the name that appears in \meta{float} captions, e.g., `Figure'.
+% (This is our own definition.)
+% \begin{macrocode}
+\def\floatname#1#2{\@namedef{fname@#1}{#2}}
+\def\floatplacement#1#2{\@namedef{fps@#1}{#2}}
+% \end{macrocode}
+%
+% \begin{macro}{\restylefloat}
+% The |\restylefloat| command sets up everything so that subsequent
+% commands like |\begin{|\meta{float}|}| use the appropriate
+% float style. It defines |\fst@|\meta{float} to expand to a command
+% that sets up the currently selected float style (|\fs@|\meta{style}).
+% Then it defines the commands |\begin{|\meta{float}|}|,
+% |\end{|\meta{float}|}|, |\begin{|\meta{float}|*}| and
+% |\end{|\meta{float}|*}|.
+% \begin{macrocode}
+\def\restylefloat#1{\expandafter\edef\csname
+ fst@#1\endcsname{\expandafter\noexpand\csname
+ fs@\float@style\endcsname}%
+ \@namedef{#1}{\bgroup\@nameuse{fst@#1}\@float{#1}}%
+ \@namedef{#1*}{\bgroup\@nameuse{fst@#1}\@dblfloat{#1}}%
+ \expandafter\let\csname end#1\endcsname\float@end
+ \expandafter\let\csname end#1*\endcsname\float@dblend}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\newfloat}
+% Now we can explain how to define a new class of floats. Recall that
+% the three required arguments to |\newfloat| are \meta{type},
+% \meta{placement} and \meta{ext}, respectively. First we save the
+% latter two.
+% \begin{macrocode}
+\def\newfloat#1#2#3{\@namedef{ext@#1}{#3}
+ \floatplacement{#1}{#2}%
+% \end{macrocode}
+% Then we figure out a default value for the `caption name' of this
+% class of floats. If the |\fname@|\meta{type} isn't already defined,
+% we tentatively use \meta{type} as the name. This is convenient if
+% \meta{type} is, say, {\tt Program}, since no |\floatname| command
+% is necessary at all.
+% \begin{macrocode}
+ \expandafter\ifx\csname fname@#1\endcsname\relax
+ \floatname{#1}{#1}\fi
+% \end{macrocode}
+% Then we set up the type number for \LaTeX\ in |\ftype@|\meta{type}.
+% Afterwards we have to set the |\float@type| to the next greater power
+% of two, so that it is ready for the next |\newfloat|. Fortunately,
+% we just have to double it by adding. We don't bother to check for overflow
+% since it is pretty unlikely that somebody will define 25 different classes
+% of floats. Finally, we call |\restylefloat| to define the style and
+% commands for this class of floats.
+% \begin{macrocode}
+ \expandafter\edef\csname ftype@#1\endcsname{\the\float@type}%
+ \advance\float@type by\float@type
+ \restylefloat{#1}%
+% \end{macrocode}
+% Now all that's left is to assemble the |\fnum@|\meta{type} macro
+% that \LaTeX\ wants to use in its captions. Basically it is just
+% `caption name'${}+{}$`counter value', disguised so that the command
+% {\em names\/} appear in the definition instead of their expansions.
+% \begin{macrocode}
+ \expandafter\edef\csname fnum@#1\endcsname%
+ {\expandafter\noexpand\csname fname@#1\endcsname{}
+ \expandafter\noexpand\csname the#1\endcsname}
+% \end{macrocode}
+% Finally, we have to take care of the optional argument, \meta{within}.
+% If the optional argument is present, we pass control to |\@xnewfloat|.
+% Otherwise, we just define the counter for this class of floats.
+% By default, the numbers come out |\arabic|.
+% \begin{macrocode}
+ \@ifnextchar[{\@xnewfloat{#1}}%
+ {\@ifundefined{c@#1}{\newcounter{#1}\@namedef{the#1}{\arabic{#1}}}%
+ {}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@xnewfloat}
+% Here we deal with the optional argument to |\newfloat|. We have
+% to create a new counter as per |\newcounter{|\meta{type}|}|
+% and add that counter to the list of counters to be reset whenever
+% counter \meta{within} is stepped. The standard command
+% |\newcounter{|\meta{type}|}[|\meta{within}{\tt]} takes care of that.
+% However, we can't define the \meta{type} counter if it's already defined.
+% While this case is simply ignored when \meta{within} is not present,
+% we issue a warning here since what comes out is probably not what the user
+% expects.
+% \begin{macrocode}
+\def\@xnewfloat#1[#2]{\@ifundefined{c@#1}{\newcounter{#1}[#2]%
+ \expandafter\edef\csname the#1\endcsname{%
+ \expandafter\noexpand\csname
+ the#2\endcsname.\noexpand\arabic{#1}}}%
+ {\@warning{Can't redefine counter variable for #1.}}}
+% \end{macrocode}
+% \end{macro}
+%
+% We have to adapt some of \LaTeX's internal macros to our needs.
+% There are several things that have to be changed around
+% in order to provide the functionality of David Carlisle's {\tt here.sty}.
+% The following is thus lifted from {\tt here.sty}, with changes and with
+% David's permission:
+%
+% \begin{macro}{\@Hxfloat}
+% We save the original version of |\@xfloat|. (This macro is called from
+% |\@float|, which we used above to define the environment commands for a
+% new class of floats.)
+% \begin{macrocode}
+\let\@Hxfloat\@xfloat
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@xfloat}
+% The new version of |\@xfloat| looks for a |[H]| argument.
+% If it is present |\@HHfloat| is called, otherwise the original macro
+% (renamed to |\@Hxfloat|) is called.
+% \begin{macrocode}
+\def\@xfloat#1[{\@ifnextchar{H}{\@HHfloat{#1}[}{\@Hxfloat{#1}[}}
+% \end{macrocode}
+% \end{macro}
+% Later on we'll need a box to save a |[H]| float.
+% \begin{macrocode}
+\newbox\float@box
+\newif\if@flstyle
+% \end{macrocode}
+% \begin{macro}{\@HHfloat}
+% First gobble the |[H]|. Note that {\tt H} should not be used in
+% conjunction with the other placement options, nor as the value of the
+% default placement, as set in |\fps@|{\it type}.
+% \begin{macrocode}
+\def\@HHfloat#1[H]{%
+% \end{macrocode}
+% Locally redefine the end of the environment.
+% \begin{macrocode}
+ \expandafter\let\csname end#1\endcsname\float@endH
+% \end{macrocode}
+% We don't get a |\@currbox| if we don't actually use the float mechanism.
+% Therefore we fake one using the |\float@box| defined above.
+% \begin{macrocode}
+ \let\@currbox\float@box
+% \end{macrocode}
+% Now we save the current float class name for use in constructing the
+% |\caption|. The caption box (defined below) is initialised to an empty
+% box to avoid trouble with floats not having a caption. Then we start the
+% box that'll hold the float itself.
+% |\parindent| is set to zero for compatibility with the standard {\tt [h]}
+% option.
+% \begin{macrocode}
+ \def\@captype{#1}\setbox\@floatcapt=\vbox{}%
+ \expandafter\ifx\csname fst@#1\endcsname\relax
+ \@flstylefalse\else\@flstyletrue\fi
+ \setbox\@currbox=\vbox\bgroup\parindent\z@
+% \end{macrocode}
+% The final |\ignorespaces| is needed to gobble any spaces or newlines
+% after the {\tt[H]} tokens.
+% \begin{macrocode}
+ \ignorespaces}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\float@makebox}
+% Basically, we must arrange for `style commands' to be executed
+% at certain points during the generation of the float.
+% \LaTeX\ puts a float into a vertical box |\@currbox| which it takes
+% off a list of empty boxes for insertions. When the |\float@makebox| macro
+% is called, |\@currbox| contains the complete float, minus the caption
+% --- we'll see later that we use our own |\caption| command to
+% put the caption into a |\vbox| of its own. This is the only way
+% we can control the position of the caption by the float style,
+% regardless of where the caption appears in the float's input text itself.
+% So the `style commands' are |\@fs@pre|, which is inserted at the
+% very beginning of the float, |\@fs@mid|, which comes between the
+% float and the caption (or the caption and the float, if captions are put
+% at the top), and |\@fs@post|, which finishes off the float.
+% The caption may appear at the top or at the bottom of the float,
+% as defined by |\@fs@iftopcapt|. Therefore, before we hand the
+% float to \LaTeX\ for positioning, it is taken apart and reassembled
+% using the style commands.
+% \begin{macrocode}
+\def\float@makebox{%
+ \vbox{\hsize\columnwidth \@parboxrestore
+ \@fs@pre\@fs@iftopcapt
+ \ifvbox\@floatcapt\unvbox\@floatcapt\par\@fs@mid\fi
+ \unvbox\@currbox
+ \else\unvbox\@currbox
+ \ifvbox\@floatcapt\par\@fs@mid\unvbox\@floatcapt\fi
+ \fi\par\@fs@post\vskip\z@}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\float@end}
+% The internal macro |\end@float| appears here under the name of |\float@end|.
+% The main thing which is changed is that we call |\float@makebox| to
+% reconstruct the float according to the float style.
+% \begin{macrocode}
+\def\float@end{\egroup
+ \global\setbox\@currbox\float@makebox
+% \end{macrocode}
+% Now \LaTeX\ takes over again.
+% \begin{macrocode}
+ \ifnum\@floatpenalty <\z@ \@cons\@currlist\@currbox
+ \ifdim \ht\@currbox >\textheight
+ \ht\@currbox\textheight \fi
+ \ifnum\@floatpenalty < -\@Mii
+ \penalty -\@Miv \@tempdima\prevdepth
+ \vbox{}\prevdepth \@tempdima \penalty\@floatpenalty
+ \else \vadjust{\penalty -\@Miv
+ \vbox{}\penalty\@floatpenalty}\@Esphack
+ \fi\fi\egroup}
+% \end{macrocode}
+% (The final |\egroup| is not present in the original definition;
+% we need it to finish off the |\bgroup| that precedes the
+% |\@nameuse| in the |\begin{|\meta{float}|}| commands.
+% This is to keep the style commands local.)
+% \end{macro}
+%
+% \begin{macro}{\float@endH}
+% The |\float@endH| command is, again, derived from {\tt here.sty}. It'll
+% deal correctly with a non-floating float, inserting the proper amounts
+% of white space above and below.
+% \begin{macrocode}
+\def\float@endH{\egroup \vskip\intextsep
+ \if@flstyle\float@makebox\else\box\@currbox\fi
+ \vskip\intextsep\egroup}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\float@dblend}
+% The |\float@dblend| macro is an almost-verbatim copy of
+% |\end@dblfloat| but for the last part, from |\fi\egroup| on.
+% The |\egroup| is, of course, necessary because of the |\bgroup|
+% at the very beginning of the float. And we have to call |\float@end|
+% instead of |\end@float|, naturally.
+% \begin{macrocode}
+\def\float@dblend{\if@twocolumn
+ \par\vskip\z@\egroup
+ \ifnum\@floatpenalty <\z@ \@cons\@dbldeferlist\@currbox\fi
+ \ifnum \@floatpenalty =-\@Mii \@Esphack\fi\egroup\else\float@end\fi}
+% \end{macrocode}
+% \end{macro}
+%
+% Now for the caption routines.
+% We use a box, |\@floatcapt|, to hold the caption while the float
+% is assembled.
+% \begin{macrocode}
+\newbox\@floatcapt
+% \end{macrocode}
+%
+% \begin{macro}{\caption}
+% This is the only \LaTeX\ macro that this document style supersedes.
+% Our |\caption| command checks whether there is a custom style
+% defined for the current float (whose type can be found in |\@captype|).
+% If so, the caption routines from {\tt float.sty} are used, otherwise
+% we call the vanilla \LaTeX\ routines.
+% The |\@flcapt| conditional is used to tell the float-assembly routines
+% that there actually {\em is\/} a caption. We need this to properly handle
+% {\tt figure}s and {\tt table}s that have been restyled.
+% \begin{macrocode}
+\def\caption{\refstepcounter\@captype
+ \expandafter\ifx\csname fst@\@captype\endcsname\relax
+ \let\@tempf\@caption
+ \else\let\@tempf\float@caption\fi \@dblarg{\@tempf\@captype}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\float@caption}
+% The |\float@caption| macro takes care of entering the caption into
+% the appropriate listing. It also controls the typesetting of the caption
+% itself, although a style-dependent macro |\@fs@capt| is called
+% to handle the specifics. Note that because the caption is saved in a box
+% instead of being output to the float right away, you cannot simply put
+% a legend after the caption proper; it has to follow the |\caption|
+% command in an optional argument.
+%
+% First of all, we call |\addcontentsline| to update the list of
+% floats of this class. Note that |\float@caption| is |\long|
+% to allow for paragraph breaks in its arguments.
+% \begin{macrocode}
+\long\def\float@caption#1[#2]#3{\addcontentsline{\csname
+ ext@#1\endcsname}{#1}{\protect\numberline{\csname
+ the#1\endcsname}{\ignorespaces #2}}
+% \end{macrocode}
+% Now we collect the caption proper. The caption name and number are
+% taken from |\fnum@|\meta{float}, where \meta{float} is the class
+% of float we're currently handling.
+% \begin{macrocode}
+ \global\setbox\@floatcapt\vbox\bgroup\@parboxrestore
+ \normalsize\@fs@capt{\csname fnum@#1\endcsname}{\ignorespaces #3}%
+% \end{macrocode}
+% Finally we check for the presence of the optional argument. If there is
+% one, we call |\float@ccon| to pick it up; otherwise, the |\egroup|
+% finishes off the box.
+% \begin{macrocode}
+ \@ifnextchar[{\float@ccon}{\egroup}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\float@ccon}
+% The |\float@ccon| macro expands to the optional argument of a
+% |\caption| command, followed by |\par\egroup|. Note that this
+% precludes using |\verb| \& Co.\ in the optional argument; the
+% interested reader is urged to fix this problem as an exercise.
+% \begin{macrocode}
+\long\def\float@ccon[#1]{#1\par\egroup}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\listof}
+% The |\listof| command reads the desired list of floats from the
+% appropriate auxiliary file. The file is then restarted.
+% Currently the list appears at the chapter or the section level, depending
+% on whether chapters are supported in the document style at all.
+% First of all, we check whether the float style that's supposed to be
+% listed is actually defined. If not, we output a |\float@error|.
+% \begin{macrocode}
+\def\listof#1#2{\expandafter\ifx\csname
+ ext@#1\endcsname\relax\float@error{#1}%
+% \end{macrocode}
+% All's well until now. We determine whether the list is going to be a
+% chapter or a section, and we define the |\l@|\meta{float} command
+% that \LaTeX\ needs for formatting the list.
+% After that, we call |\@starttoc| with the correct file extension
+% to do the actual work.
+% \begin{macrocode}
+ \else
+ \@ifundefined{chapter}{\def\@tempa{\section*}}%
+ {\def\@tempa{\chapter*}}%
+ \@tempa{#2\@mkboth{\uppercase{#2}}{\uppercase{#2}}}%
+ \expandafter\def\csname
+ l@#1\endcsname{\@dottedtocline{1}{1.5em}{2.3em}}%
+ \@starttoc{\csname ext@#1\endcsname}\fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \section{The Float Styles}
+%
+% Finally, we define the three standard float styles that were outlined
+% in the Introduction. Every float style \meta{style} corresponds to a
+% command |\fs@|\meta{style} which contains the definitions of the
+% style commands, namely
+% \begin{center}\begin{tabular}{rl}
+% |\@fs@pre|&top of the float\\
+% |\@fs@mid|&between float and caption\\
+% |\@fs@post|&bottom of the float\\
+% |\@fs@capt|&formatting routine for caption\\
+% |\@fs@cfont|&font for caption name \& number
+% \end{tabular}\end{center}
+%
+% \begin{macro}{\floatc@plain}
+% The |\floatc@plain| macro formats a caption the way \LaTeX\ does
+% it: if the caption is fairly short, it is centered, otherwise it is
+% formatted as a paragraph. The only difference is that the portion
+% containing the caption name and number uses the |\@fs@captfont|.
+% \begin{macrocode}
+\def\floatc@plain#1#2{\setbox\@tempboxa\hbox{{\@fs@cfont #1:} #2}%
+ \ifdim\wd\@tempboxa>\hsize {\@fs@cfont #1:} #2\par
+ \else\hbox to\hsize{\hfil\box\@tempboxa\hfil}\fi}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\fs@plain}
+% The {\tt plain} float style is similar to what \LaTeX\ does of its
+% own accord; the only difference is that the caption is guaranteed
+% to come out at the bottom of the float.
+% \begin{macrocode}
+\def\fs@plain{\def\@fs@cfont{\rm}\let\@fs@capt\floatc@plain
+ \def\@fs@pre{}\def\@fs@post{}\def\@fs@mid{\vskip10pt\relax}%
+ \let\@fs@iftopcapt\iffalse}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\floatc@ruled}
+% The |\floatc@ruled| command is even simpler than the
+% |\floatc@plain| macro. The caption is simply printed `as is'.
+% \begin{macrocode}
+\def\floatc@ruled#1#2{{\@fs@cfont #1} #2\par}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\fs@ruled}
+% In the {\tt ruled} float style, the caption appears at the top of the
+% float, preceded and followed by horizontal rules.
+% Another rule followes the whole of the float.
+% \begin{macrocode}
+\def\fs@ruled{\def\@fs@cfont{\bf}\let\@fs@capt\floatc@ruled
+ \def\@fs@pre{\hrule height.8pt depth0pt \kern2pt}%
+ \def\@fs@post{\kern2pt\hrule\relax}%
+ \def\@fs@mid{\kern2pt\hrule\kern2pt}%
+ \let\@fs@iftopcapt\iftrue}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\fs@boxed}
+% The {\tt boxed} float style puts the float into a box (which is slightly
+% larger than the usual |\textwidth|). The caption appears below
+% the box.
+% \begin{macrocode}
+\@namedef{fs@boxed}{\def\@fs@cfont{\bf}\let\@fs@capt\floatc@plain
+ \def\@fs@pre{\dimen0=\hsize \advance\dimen0 by6.8pt \hbadness10000
+ \moveleft3.4pt\vbox\bgroup\hsize=\dimen0\hrule
+ \hbox to\dimen0\bgroup\vrule\kern3pt\vbox\bgroup\kern3pt}%
+ \def\@fs@mid{\kern3pt\egroup\kern3pt\vrule\egroup
+ \hrule\egroup\kern2pt}%
+ \def\@fs@post{}\let\@fs@iftopcapt\iffalse}
+% \end{macrocode}
+% \end{macro}
+%
+% Before we finish, we set the float style to {\tt plain}.
+% \begin{macrocode}
+\floatstyle{plain}
+% \end{macrocode}
+% Other float styles can be added without much ado.
+% If there are many more float styles, it should be worthwhile
+% to invent a scheme similar to that used in Frank Mittelbach's
+% {\tt theorem} option in order to conserve space, i.e., put the
+% float styles into individual files that can be loaded on demand.
+% I would like to hear from people who define interesting
+% float styles.
+% \Finale
+% \end{document}
+\endinput
diff --git a/obsolete/macros/latex209/contrib/misc/fnpara.sty b/obsolete/macros/latex209/contrib/misc/fnpara.sty
new file mode 100644
index 0000000000..03e909b7e3
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/misc/fnpara.sty
@@ -0,0 +1,138 @@
+% FNPARA.STY
+% A LaTeX style to typeset footnotes in run-on paragraphs.
+% See end of this file (after \endinput) for comments.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% From LaTeX.tex :
+\long\def\@footnotetext#1{\insert\footins{\footnotesize
+%CCCC ---the next four lines are probably redundant, since:
+% the paragraphing takes place later;
+% and this style of footnote never gets split.
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\footnotesep
+ \splitmaxdepth \dp\strutbox
+%CCCC ---these two lines will need to be reproduced when doing the unboxing.
+ \hsize\columnwidth
+ \@parboxrestore
+%CCCC
+ \floatingpenalty \@MM
+\edef\@currentlabel{\csname p@footnote\endcsname\@thefnmark}
+%CCCC --- need to set each footnote in an hbox and apply
+% the fudge factor here:
+ \setbox0=\hbox{%
+ \@makefntext
+%CCCC --- this needs a parameter
+% --- the rule should be moved to the beginning of the footnote
+% paragraph:
+% --- but the \ignorespaces should be left here.
+% \rule{\z@}{\footnotesep}
+ {\ignorespaces
+ #1\strut
+%CCCC --- penalty to help line breaking in footnote para goes here:
+% value from TeXbook.
+ \penalty -10
+ \hskip\footglue
+ } % end of parameter
+ } % end of \hbox
+ \dp0=0pt \ht0=\fudgefactor\wd0 \box0
+ } % end of \footins
+ } % end of \def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%CCCC --- from TeXbook
+\newskip\footglue \footglue=1em plus.3em minus.3em
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Cut down from ARTICLE.TEX :
+\long\def\@makefntext#1{{$^{\@thefnmark}$}\nobreak\hskip.5em\relax#1}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% From LaTeX.TEX:
+\def\@makecol{\ifvoid\footins \setbox\@outputbox\box\@cclv
+ \else\setbox\@outputbox
+ \vbox{\boxmaxdepth \maxdepth
+ \unvbox\@cclv\vskip\skip\footins\footnoterule
+ \global\setbox1\vbox{\makefootnoteparagraph}\unvbox1}\fi
+ \xdef\@freelist{\@freelist\@midlist}\gdef\@midlist{}\@combinefloats
+ \setbox\@outputbox\vbox to\@colht{\boxmaxdepth\maxdepth
+ \@texttop\dimen128=\dp\@outputbox\unvbox\@outputbox
+ \vskip-\dimen128\@textbottom}
+ \global\maxdepth\@maxdepth}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% From TeXbook, p.398 ff., AVOIDING the redefinition of \\ in LaTeX!!
+{\catcode`p=12 \catcode`t=12 \gdef\@ennumber#1pt{#1}}
+
+{\footnotesize \newdimen\footnotebaselineskip
+%CCCC --definitely needed:
+ \global
+ \footnotebaselineskip=\normalbaselineskip}
+
+\dimen0=\footnotebaselineskip \multiply\dimen0 by 1024
+\divide \dimen0 by \columnwidth \multiply\dimen0 by 64
+\xdef\fudgefactor{\expandafter\@ennumber\the\dimen0 }
+
+\def\makefootnoteparagraph{\unvbox\footins \makehboxofhboxes
+ \setbox0=\hbox{\unhbox0 \removehboxes}
+%CCCC ---now we are ready to set the paragraph:
+ \hsize\columnwidth
+ \@parboxrestore
+ \baselineskip=\footnotebaselineskip
+ \noindent
+%CCCC ---this is where the strut is needed:
+ \rule{\z@}{\footnotesep}%
+ \unhbox0\par}
+\def\makehboxofhboxes{\setbox0=\hbox{}
+ \loop\setbox2=\lastbox \ifhbox2 \setbox0=\hbox{\box2\unhbox0}\repeat}
+\def\removehboxes{\setbox0=\lastbox
+ \ifhbox0{\removehboxes}\unhbox0 \fi}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\endinput
+
+ FNPARA.STY
+ A LaTeX style to typeset footnotes in run-on paragraphs.
+
+History:
+
+A vain attempt at this LaTeX modification was tried in late
+September 1988 by Dominik Wujastyk, and sent to TeXhax and UKTeX
+for comment. Chris Rowley came up with a working
+version a few days later, but it still needs thorough testing.
+
+The Style:
+
+This LaTeX style changes the way LaTeX does footnotes. With this
+style invoked (\documentstyle[fnpara]{article}), footnotes will
+be typeset in a running paragraph, instead of one above another.
+It is suitable for texts such as critical editions, which contain
+many short footnotes.
+
+This is based on the TeX macros described by Knuth in the
+TeXbook, Dirty Tricks, pages 398--400. It is not tested beyond
+some simple examples. In particular, it has not been tested
+properly in connection with even the simplest of environments, nor with
+other floats.
+
+(In fact, ordinary LaTeX footnotes sometimes do not work well
+if they need splitting (e.g. producing blank pages,
+or appearing in shufled form): but these
+problems should not affect this style.
+I --CR-- have sent in a Bug Report about some
+of these problems.)
+
+Be aware of Knuth's note on the limitations of this method of
+doing the job: the TeX stack is used four times per footnote,
+and the stack is limited (TeXbook pp. 300--301). So if you have
+very many footnotes (in the hundreds) and encounter
+ "! TeX capacity exceeded, sorry [... save size ...]"
+errors, you may need to break your text into smaller sections.
+Fortunately, this is very easy to do with LaTeX. And the
+footnote counter can be reset to make the joins seamless.
+
+Chris Rowley
+Office tel: (England) 01 794 0575
+Janet: CA_ROWLEY@UK.AC.OPEN.ACS.VAX
+
+Dominik Wujastyk
+Office tel: (England) 01 387 4477 x 3013
+Janet: Wujastyk@UK.AC.UCL.EUCLID
+
+
+October 3, 1988
diff --git a/obsolete/macros/latex209/contrib/misc/index.doc b/obsolete/macros/latex209/contrib/misc/index.doc
new file mode 100644
index 0000000000..7060e05772
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/misc/index.doc
@@ -0,0 +1,1367 @@
+% \iffalse
+% ====================================================================
+% @LaTeX-style-file{
+% author = "David M. Jones",
+% version = "3.02",
+% date = "15 September 1993",
+% time = "15:11:39 EDT",
+% filename = "index.doc",
+% address = "MIT Laboratory for Computer Science
+% Room NE43-316
+% 545 Technology Square
+% Cambridge, MA 02139
+% USA",
+% telephone = "(617) 253-5936",
+% FAX = "(617) 253-3480",
+% checksum = "61047 1367 6478 49767",
+% email = "dmjones@theory.lcs.mit.edu",
+% codetable = "ISO/ASCII",
+% keywords = "LaTeX, index",
+% supported = "yes",
+% docstring = "This is a reimplementation of LaTeX's
+% indexing macros to provide better support
+% for indexing in LaTeX. For example, it
+% supports multiple indexes in a single
+% document and provides a more robust \index
+% command.
+%
+% The checksum field above contains a CRC-16
+% checksum as the first value, followed by
+% the equivalent of the standard UNIX wc
+% (word count) utility output of lines,
+% words, and characters. This is produced
+% by Robert Solovay's checksum utility.",
+%
+% }
+% ====================================================================
+% \fi
+%
+% \iffalse
+%
+% HOW TO INSTALL THIS FILE:
+%
+% If you have the latest versions of DocStrip and doc.sty installed on
+% your system, type "tex index.doc" to unpack the files index.sty and
+% sample.tex. Then install index.sty wherever style files belong on
+% your system and read the comments at the beginning of sample.tex to
+% see how to run the test. Finally, format the documentation by
+% executing the following three commands:
+%
+% latex index.doc
+% makeindex -s gind.ist index
+% latex index.doc
+%
+% If you don't already have DocStrip and doc.sty installed on your
+% system, you should get them from one of the following sources:
+%
+% ftp.uni-stuttgart.de:soft/tex/macros/latex/distribs/doc
+% pip.shsu.edu:tex-archive/macros/latex/distribs/doc
+% ftp.tex.ac.uk:tex-archive//macros/latex/distribs/doc
+%
+% If for some reason you really can't install the doc package on your
+% system, then you can name this file index.sty and use it as a style
+% file. However, you will likely notice some slowness in loading this
+% file, due to the large number of comments that have to be skipped
+% over.
+%
+% CAUTION: Use only as directed. Do not take internally. May cause
+% rash if applied directly to skin. Federal law prohibits
+% distributing without a proscription.
+%
+% __ __
+% / \ / \
+% / \ / \
+% / \ \ / \ \
+% / ) \ / ) \
+% \ ( / \ ( /
+% \ \ / \ \ /
+% \ / \ /
+% \__/ \__/
+% || ||
+% || ||
+% ------ ------
+%
+% Now the real fun starts. This file is designed to serve 4 (or 5, if
+% you prefer) distinct functions:
+%
+% (1) In the absence of DocStrip, it can be named index.sty and used
+% as a LaTeX style file.
+%
+% (2) It is a DocStrip batch file that can be used to unpack index.sty
+% and sample.tex. This function is triggered when the file is used as
+% an input file for plain TeX, i.e., when the command "tex index.doc"
+% is executed.
+%
+% (3) It is the driver file for the documentation of index.sty. This
+% function is triggered when the file is used as an input file for
+% LaTeX, i.e., when the command "latex index.doc" is executed.
+%
+% (4) It is the source file for steps 2 and 3.
+%
+% To make this work, we have to be able to determine which of these
+% cases we are in and take appropriate action.
+%
+% The next few lines of code accomplish this. First, note that if
+% this file is used as input to the doc.sty \DocInput command, then
+% the \iffalse ... \fi will cause this code to be ignored. Similarly,
+% the <install> guard prevents this code from being copied into any
+% output files by DocStrip.
+%
+% Next comes the more interesting code. We need two auxiliary
+% commands to make sure that the correct commands get executed at the
+% correct time. In order to avoid impinging on the user's namespace,
+% I use two macro names from index.sty.
+%
+% \proofmodetrue: This is a no-op, unless we are producing
+% documentation (i.e., the user has typed "latex index.doc"), in
+% which case it expands to the appropriate initialization code,
+% namely a \documentstyle command, plus \MakePercentIgnore to set
+% things up for doc.sty, and a call to \csname iffalse\endcsname
+% to match the fi that follows. (The earlier iffalse was ignored
+% because when that line was read, % was still a comment character
+% and not an ignored character.)
+%
+% \renewindex: This eats its argument unless this file is being used
+% as a DocStrip batchfile (i.e., the user has typed "tex
+% index.doc"), in which case it simply regurgitates its argument.
+% The commands inside the \renewindex commands are just normal
+% DocStrip batchfile commands.
+%
+% Before doing anything else, we check to make sure that \newindex is
+% not already defined. If it is, that means this file has already
+% been loaded once as a style file (or else someone else has already
+% defined a \newindex command), which means we should not load the
+% file a second time. (This is the same test that will be used later
+% to determine whether or not index.sty has already been loaded. So,
+% if you are using index.doc as index.sty, this test will actually be
+% made twice, but that should be ok.)
+%
+% Finally, we determine whether we are inside plain TeX or LaTeX by
+% checking to see if \documentstyle is defined. If we are inside
+% LaTeX, we check to see if we are being used as a style file or a
+% documentation file by checking to see if the \catcode of @ is 11
+% (letter) or not.
+%
+% The braces around the first two blocks of code below are necessary
+% because DocStrip will open this file and start reading it
+% line-by-line. The braces ensure that the entire \ifx ... \fi
+% structures are picked up at once.
+%
+% No doubt strange and terrible things will happen if you feed this
+% file to any dialect of TeX other than plain TeX or LaTeX.
+%
+% The blame for much of the following code goes to David Wald
+% <wald@theory.lcs.mit.edu>, who forced me to adopt this approach
+% after I had already come up with a safer alternative that was almost
+% as easy to unpack. If anything goes wrong, it's his fault.
+%
+% \fi
+%
+% \iffalse
+%<*install>
+{\expandafter\ifx\csname newindex\endcsname\relax\else\endinput\fi}
+{
+ \global\let\proofmodetrue\relax
+ \expandafter\ifx\csname documentstyle\endcsname\relax
+ \gdef\renewindex#1{#1}
+ \else
+ \gdef\renewindex#1{}
+ \ifcat a\noexpand @\else
+ \gdef\proofmodetrue{%
+ \documentstyle[doc]{article}\MakePercentIgnore
+ \csname iffalse\endcsname
+ }
+ \fi
+ \fi
+}
+\renewindex{\def\batchfile{index.doc}}
+\renewindex{\input docstrip.tex }
+\renewindex{\generateFile{index.sty}{t}{\from{index.doc}{style}}}
+\renewindex{\generateFile{sample.tex}{t}{\from{index.doc}{test}}}
+\renewindex{\endinput}
+\proofmodetrue
+%</install>
+% \fi
+
+\def\fileversion{v3.02}
+\def\filedate{15 September 1993}
+\def\docdate {15 September 1993}
+
+%% \CheckSum{692}
+%% \CharacterTable
+%% {Upper-case \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
+%% Lower-case \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
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%
+%
+% \DoNotIndex{\!,\/,\?,\@,\^,\_}
+% \DoNotIndex{\@@par,\@M,\@auxout,\@bsphack,\@esphack,\@depth,\@ehc}
+% \DoNotIndex{\@for,\@flushglue,\@gobble,\@gobbletwo,\@height,\@idxitem}
+% \DoNotIndex{\@ifnextchar,\@ifstar,\@ifundefined,\@input,\@latexerr}
+% \DoNotIndex{\@makeschapterhead,\@namedef,\@nameuse,\@nil}
+% \DoNotIndex{\@nobreakfalse,\@restonecolfalse,\@restonecoltrue}
+% \DoNotIndex{\@tempa,\@tempf,\@temptokena,\@themark,\@width}
+% \DoNotIndex{\active,\aindex,\baselineskip,\begin,\begingroup,\box}
+% \DoNotIndex{\c@page,\catcode,\chapter,\char,\chardef,\closeout}
+% \DoNotIndex{\CodelineIndex,\sp,\sb,\label,\leavevmode,\mark}
+% \DoNotIndex{\mark,\newinsert,\newwrite,\newtoks,\xdef}
+% \DoNotIndex{\columnsep,\columnseprule,\columnwidth,\csname,\def}
+% \DoNotIndex{\dimen,\do,\DocInput,\documentstyle,\edef,\else,\em}
+% \DoNotIndex{\EnableCrossrefs,\end,\endcsname,\endgroup,\endinput}
+% \DoNotIndex{\everypar,\expandafter,\fi,\filedate,\fileversion}
+% \DoNotIndex{\footnotesize,\gdef,\global,\glossary,\hangindent}
+% \DoNotIndex{\if@filesw,\if@nobreak,\if@twocolumn,\if@twoside}
+% \DoNotIndex{\hsize,\hskip,\ifhmode,\ifmmode,\ifodd,\ifvmode,\ifx}
+% \DoNotIndex{\immediate,\insert,\item,\jobname,\long}
+% \DoNotIndex{\let,\lineskip,\marginparsep,\marginparwidth,\maxdimen}
+% \DoNotIndex{\makeatletter,\noexpand,\openout,\protect,\rlap}
+% \DoNotIndex{\min,\newpage,\nobreak,\normalbaselineskip}
+% \DoNotIndex{\normallineskip,\p@,\par,\parfillskip,\parindent,\parskip}
+% \DoNotIndex{\penalty,\relax,\section,\sin,\sloppy,\space,\string}
+% \DoNotIndex{\tableofcontents,\the,\thepage,\thispagestyle,\toks,\tt}
+% \DoNotIndex{\twocolumn,\typeout,\uppercase,\vbox,\vrule,\vskip,\vss}
+% \DoNotIndex{\write,\z@,\z@skip}
+%
+% \MakeShortVerb{\=}
+%
+% \setcounter{StandardModuleDepth}{1}
+%
+% \CodelineIndex
+%
+% \title{A new implementation of \LaTeX's indexing
+% commands\thanks{This file has version number \fileversion,
+% last revised \filedate, documentation dated \docdate. The
+% definitive version of this file is
+% {\tt theory.lcs.mit.edu:pub/tex/index.doc}.}}
+%
+% \author{David M. Jones}
+%
+% \date{\filedate}
+%
+% \begin{document}
+%
+% \maketitle
+%
+% \section{Introduction}
+%
+% This style file reimplements \LaTeX's indexing macros to provide
+% better and more robust support for indexes. In particular, it
+% provides the following features:
+% \begin{enumerate}
+%
+% \item
+% Support for multiple indexes.
+%
+% \item
+% A $*$-variant of the =\index= command that, in addition to putting
+% it's argument in the index, also typesets it in the running text.
+%
+% \item
+% A =\shortindexingon= command that makes =^= and =_= shorthand for
+% =\index= and =\index*=, respectively (but only outside of math mode,
+% of course). This can be turned of with the =\shortindexingoff=
+% command.
+%
+% \item
+% The {\tt showidx} style option has been merged into this file. The
+% command =\proofmodetrue= can be used to enable the printing of index
+% entries in the margin of pages. The size and style of font can be
+% controlled with the =\indexproofstyle= command.
+%
+% \item
+% A two-stage process for creating the raw index files, similar to
+% that used to create tables of contents. This means that if you have
+% a large document consisting of several =\include='d files, you no
+% longer lose the index if you format only part of the document with
+% =\includeonly=.
+%
+% \item
+% The =\index= command has been rewritten to be more robust. In
+% particular, it no longer depends on =\catcode= changes to work
+% properly, so the new =\index= command can be used in places that the
+% original couldn't, such as inside the arguments of other macros.
+%
+% \end{enumerate}
+%
+%
+% \section{Creating an index with \LaTeX}
+%
+% Conceptually, there are three stages to creating an index with
+% \LaTeX. First, the raw index information has to be written out to a
+% file. Then, the raw information needs to be processed and turned
+% into a finished index. Finally, the finished index has to be read
+% back in by \LaTeX\ and formated.
+%
+% In \LaTeX, this is accomplished with the commands =\makeindex=,
+% =\index=, =\printindex=, and (most often) with the auxiliary program
+% {\tt makeindex}. Assuming that your main file is called {\tt
+% foo.tex}, =\makeindex= opens the file {\tt foo.idx} and initializes
+% it for holding the raw index entries and =\index= is used to put raw
+% index entries into {\tt foo.idx}. Then the raw index file is
+% processed by {\tt makeindex}, which puts the finished index in {\tt
+% foo.ind}. Finally, the =\printindex= command is used in your
+% \LaTeX\ document to indicate where the file {\tt foo.idx} should be
+% read back in, i.e., where the index should appear in your document.
+%
+% This style modifies the =\makeindex=, =\index=, and =\printindex=
+% commands, as described below.
+%
+%
+% \section{The user interface}
+%
+% There are four pieces of information associated with each index:
+% \begin{enumerate}
+%
+% \item
+% A short, unique tag that identifies the index.
+%
+% \item
+% The extension of the output file where the raw index information
+% will be put by \LaTeX.
+%
+% \item
+% The extension of the input file where the processed information will
+% be put by {\tt makeindex} to be read in later by \LaTeX.
+%
+% \item
+% The title of the index.
+%
+% \end{enumerate}
+%
+%
+% \DescribeMacro{\newindex}
+% Correspondingly, the =\newindex= command takes four arguments. For
+% example, if you wanted to declare an author index, you might use the
+% following:
+% \begin{verbatim}
+% \newindex{aut}{adx}{and}{Name Index}
+% \end{verbatim}
+% Here, =aut= is the tag used to identify the author index, and ``Name
+% Index'' is the title of the index. If the name of your main file is
+% =root.tex=, then \LaTeX\ will write the raw index entries to the
+% file =root.adx=, and you will execute the following {\tt makeindex}
+% command to process the author index:
+% \begin{verbatim}
+% makeindex -o root.and root.adx
+% \end{verbatim}
+%
+%
+% \DescribeMacro{\renewindex}
+% The =\renewindex= command takes the same four arguments as the
+% =\newindex= command and can be used to redefine indexes that have
+% been previously declared.
+%
+%
+% \DescribeMacro{\makeindex}
+% For backwards compatibility, the =\makeindex= command is redefined
+% to use =\newindex=. It is essentially equivalent to
+% \begin{verbatim}
+% \newindex{default}{idx}{ind}{Index}
+% \end{verbatim}
+% The index labeled =default= is special: it is the one that will be
+% used by =\index= and =\printindex= unless another index is
+% specified (see below).
+%
+%
+% \DescribeMacro{\printindex}
+% The =\printindex= command is modified by the addition of an optional
+% argument, which is the tag of the index that should be printed.
+%
+%
+% \DescribeMacro{\index}
+% The =\index= command is modified in two ways. First, there is a
+% $*$-variant of the command that, in addition to putting its
+% argument in an index, also typesets it on the page. Second,
+% =\index= now takes an optional argument that should be the tag of
+% the index where its argument should be put. If no such tag is
+% supplied, the =default= index (such as that opened by =\makeindex=
+% above) is used.
+%
+%
+% \DescribeMacro{\shortindexingon}
+% \DescribeMacro{\shortindexingoff}
+% Perhaps the most dubious feature of =index.sty= is that it allows
+% you to define the characters =^= and =_= to be abbreviations for
+% =\index*= and =\index= outside of math mode. These abbreviations
+% are enables by the =\shortindexingon= command and disabled by the
+% =\shortindexingoff= command. Both of these commands make their
+% changes locally rather than globally, so they can be used to enable
+% or disable the abbreviations within a group. (This might be useful,
+% for example, if you wanted the abbreviations turned on throughout
+% most of the documentation, but turned off in one particular
+% environment.) In addition,
+% \DescribeMacro{shortindexingon}=shortindexingon= can be used as an
+% environment if that seems appropriate.
+%
+%
+% \DescribeMacro{\proofmodetrue}
+% \DescribeMacro{\proofmodefalse}
+% \DescribeMacro{\indexproofstyle}
+% As mentioned above, the =showidx= document-style option has been
+% merged into =index.sty=. It can be turned on with =\proofmodetrue=
+% and turned off with =\proofmodefalse=. When it is turned on,
+% all\footnote{Well, most, at least. There are some circumstances
+% under which the index entries won't show up in the proofs, although
+% they will show up in the index.} index entries will be put in the
+% margin of the page where they appear. By default, they appear in
+% the typewriter font at =\footnotesize=, but the user can override
+% this with the =\indexproofstyle= command, for example,
+% \begin{verbatim}
+% \indexproofstyle{\footnotesize\it}
+% \end{verbatim}
+% will cause them to be put in italics instead.
+%
+%
+% \DescribeMacro{\disableindex}
+% There are some circumstances where it might be helpful to suppress
+% the writing of a particular raw index file. The =\disableindex=
+% command is provided for this purpose. It takes one argument, a
+% comma-separated list of tags of the indexes that should be disabled.
+% This command should come {\em before\/} the declarations for the
+% indexes that are being disabled\footnote{This limits its usefulness
+% somewhat, but since the output file for an index is opened when the
+% index is declared, the damage has already been done. We could close
+% the file, but we can't prevent a new output stream from being
+% allocated and we can't keep the old file from being truncated.}.
+% One situation where the =\disableindex= command might be useful is
+% if you have so many indexes that you are exhausting \TeX's supply of
+% output streams\footnote{\TeX\ only has 16 output streams, which are
+% allocated with the {\tt\string\newwrite} command. The standard
+% \LaTeX\ styles use from 3 to 7 of these, which should leave room for
+% up to 9 indexes. Of course, if you have extra output files, then
+% there will be fewer output streams left for indexes.}. For example,
+% suppose you have 10 indexes, but only 5 output streams available for
+% indexes. Then you could add a =\disableindex= command to the top of
+% your file to suppress the writing of all but 5 of the indexes.
+% (Note that the index entries would still get written to the =.aux=
+% file; they just wouldn't get copied to the individual raw index
+% files at the end of the run.) At the end of the run, you could then
+% re-run your main file a couple of times with different indexes
+% disabled until you had created all of the raw index files. This is
+% somewhat clumsy, but safer than any alternative I've come up
+% with\footnote{A less clumsy (for the user, at least) solution would
+% be to read the =.aux= file multiple times at the end of the run,
+% each time writing just one of the raw index files. The main
+% disadvantage of this scheme is that it would require a modification
+% of {\tt\string\enddocument}.}.
+%
+%
+% \section{Caveats}
+%
+% In order to implement this style file, it's been necessary to modify
+% a number of \LaTeX\ commands seemingly unrelated to indexing,
+% namely, =\@starttoc=, =\raggedbottom=, =\flushbottom=,
+% =\addcontentsline=, =\markboth=, and =\markright=. Naturally, this
+% could cause incompatibilities between {\tt index.sty} and any style
+% files that either redefine these same commands or make specific
+% assumptions about how they operate. See Section~\ref{sec:thecode}
+% for explanations of why these various commands needed modification.
+%
+% It's also been necessary to modify the =\theindex= environment, but
+% I've tried to do so very conservatively. If your style file uses
+% =\indexname= and your definition of =\theindex= doesn't take any
+% arguments, you should be ok. Otherwise, you'll have to redefine the
+% =\theindex= environment yourself if you don't want the \LaTeX\ {\tt
+% book.sty} default.
+%
+% In the current implementation, {\tt index.sty} uses one output
+% stream for each index. Since there are a limited number of output
+% indexes, this means that there is a limit on the number of indexes
+% you can have in a document. See the description of =\disableindex=
+% for a fuller discussion of this problem and one way around it.
+%
+%
+% \section{To do's}
+%
+% It might be nice if the =\index*= command parsed its argument so
+% that, for example, instead of writing `=\index{sin@$\sin$}$\sin$=',
+% one could write `=\index*{sin@$\sin$}='. However, this fraught with
+% numerous dangers, and I'm both too lazy and too cowardly to
+% undertake it now.
+%
+% Maybe the user should be given the option of deciding which
+% characters are used for the shortindexing abbreviations
+%
+% The documentation should be carefully read, edited, and finished.
+% (In particular, I should add some scathing comments about some of
+% the problems that made it necessary to redefine so many of \LaTeX's
+% commands.)
+%
+% Maybe it would be nice if this package were compatible with plain
+% \TeX.
+%
+% \StopEventually{}
+%
+% \section{The code}
+% \label{sec:thecode}
+%
+% As is customary, we first make sure the file is loaded only once.
+% Then we print an identifying message to the terminal.
+% loaded
+% \begin{macrocode}
+%<*style>
+\@ifundefined{newindex}{}{\endinput}
+
+\typeout{Style-Option: `index' \fileversion\space <\filedate> (dmj)}
+% \end{macrocode}
+%
+% \begin{macro}{\@ifundefined}
+% We begin by redefining the \LaTeX\ command =\@ifundefined= to
+% prevent it from expanding its arguments prematurely. This also
+% requires us to redefine =\@leftmark= and =\@rightmark= to make them
+% =\long=. The following three definitions are borrowed from {\tt
+% amsart.sty}, v1.1b $\langle$31 Jul 1991$\rangle$. I rely heavily
+% upon this more robust definition of =\@ifundefined=.
+% \begin{macrocode}
+\def\@ifundefined#1{%
+ \expandafter\ifx\csname#1\endcsname\relax
+ \expandafter\@leftmark
+ \else
+ \expandafter\@rightmark
+ \fi
+}
+
+\long\def\@leftmark#1#2{#1}
+\long\def\@rightmark#1#2{#2}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\disableindex}
+% The =\disableindex= should come before the declarations of the
+% indexes it refers to. (Question: If an index has been disabled,
+% should it show up in index proofs? Maybe there should be a separate
+% command to disable index proofs on and index-by-index basis.)
+% \begin{macrocode}
+\def\disableindex#1{%
+ \@for\@tempa:=#1\do{%
+ \@namedef{disable@\@tempa}{}%
+ \@ifundefined{tf@\@tempa}{}{%
+ \typeout{index.sty> Warning! It's too late to disable the
+ `\@tempa' index; the output}%
+ \typeout{index.sty> file \jobname.\@tempa\space has already
+ been opened for output. You should}%
+ \typeout{index.sty> put the \string\disableindex\space
+ command before the declaration of the}%
+ \typeout{index.sty> `\@tempa' index.}%
+ }%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\if@newindex}
+% \begin{macro}{\newindex}
+% \begin{macro}{\renewindex}
+% The =\newindex= and =\renewindex= commands are defined on analogy
+% with the =\[re]newcommand= macros. Each index is identified by a
+% unique tag, which is specified in the first argument of =\newindex=.
+% Most of the information about the index labeled \meta{tag} is kept
+% in the macro =\idx@=\meta{tag}, so we can check to see if a
+% particular index has already been defined by checking whether
+% =\idx@=\meta{tag} is defined. =\newindex= and =\renewindex= both
+% check to see if their first argument is already associated with an
+% index and then either issue an appropriate error message or call
+% =\@newindex=.
+%
+% The =\if@newindex= flag will be used to keep =\renewindex= from
+% re-allocating =\write= and =\toks= registers later.
+% \begin{macrocode}
+\newif\if@newindex
+
+\def\newindex#1{%
+ \@ifundefined{idx@#1}%
+ {\@newindextrue\@newindex{#1}}%
+ {%
+ \@latexerr{Index type `\string#1' already defined}\@ehc
+ \expandafter\@gobble\@gobbletwo
+ }%
+}
+
+\def\renewindex#1{%
+ \@ifundefined{idx@#1}%
+ {%
+ \@newindextrue
+ \@latexerr{Index type `\string#1' not defined}\@ehc
+ }%
+ {\@newindexfalse}%
+ \@newindex{#1}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@preamblecmds}
+% Neither =\newindex=, =\renewindex=, nor =\disableindex= should be
+% used anywhere except inside style files or in the preamble of a
+% document, so we add them to the =\@preamblecmds= list.
+% \begin{macrocode}
+\begingroup
+ \def\do{\noexpand\do\noexpand}%
+ \xdef\@preamblecmds{%
+ \@preamblecmds
+ \do\newindex
+ \do\renewindex
+ \do\disableindex
+ }
+\endgroup
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@newindex}
+% =\@newindex= does most of the work. First, it picks up the first
+% three arguments of the =\[re]newindex= command and stores the second
+% two in an appropriate =\idx@= macro. The title of the index is
+% treated differently, however, since it is potentially fragile in a
+% particularly odd way. To prevent mishaps, it is stored in a token
+% register. In addition to stashing away the information about the
+% index, =\@newindex= also opens an appropriate output files if we are
+% writing auxiliary files (i.e., unless =\nofiles= has been called).
+%
+% \begin{macro}{\my@newtoks}
+% Since we need to declare new token registers on the fly, we need a
+% non-=\outer= version of =\newtoks=.
+% \begin{macrocode}
+\def\my@newtoks{\csname newtoks\endcsname}
+
+\def\@newindex#1#2#3{%
+ \@namedef{idx@#1}{#2:#3}%
+ \if@filesw
+ \@ifundefined{disable@#1}{%
+ \if@newindex
+ \expandafter\newwrite\csname tf@#1\endcsname
+ \expandafter\my@newtoks\csname idxtitle@#1\endcsname
+ \else
+ \immediate\closeout\@nameuse{tf@#1}%
+ \fi
+ \immediate\openout\@nameuse{tf@#1}=\jobname.#2 %
+ \typeout{index.sty> Writing index file \jobname.#2 }%
+ }
+ {\typeout{index.sty> Index `#2' disabled -- not opening
+ \jobname.#2 }}%
+ \fi
+ \expandafter\csname idxtitle@#1\endcsname
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@second}
+% This is a useful macro for retreiving the second field of an index
+% specification.
+% \begin{macrocode}
+\def\@second#1:#2\@nil{#2}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@nearverbatim}
+% \begin{macro}{\@meaning}
+% =\@nearverbatim\foo= is much like =\meaning\foo=, except that it
+% suppresses the ``=macro ->='' string produced when =\meaning=
+% expands a macro. It is used by =\@wrindex= and =\@vwritefile= to
+% produce an ``almost verbatim'' copy of their arguments. This method
+% replaces the use of =\@sanitize= from latex.tex and allows indexing
+% macros to be used in places (such as inside macro arguments) where
+% the original =\index= command could not. Thanks to Donald Arseneau
+% $\langle${\tt asnd@erich.triumf.ca}$\rangle$ for pointing out this
+% trick to me. (For more information on this trick, see Dirty Trick
+% \#3 of the \TeX book, page 382).
+%
+% As defined, \@nearverbatim only works on macros. It would be nice
+% if it could work with other tokens, but it's more important that it
+% work only by expansion, which means we can't put in tests to see
+% what the next token is.
+% \begin{macrocode}{\@nearverbatim}
+\def\@nearverbatim{\expandafter\@meaning\meaning}
+
+\def\@meaning#1>{}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% Now we define the =\index= macro itself. The following definitions
+% are adapted from {\tt latex.tex} v2.09 $\langle$25 March
+% 1992$\rangle$.
+%
+% \begin{macro}{\makeindex}
+% First we redefine =\makeindex= to define the default index using
+% =\newindex=. We use =\edef= to make sure that =\indexname= gets
+% expanded here. Otherwise we'll get into an infinite loop later on
+% when we try to redefine =\indexname= inside the =\theindex=
+% environment.
+% \begin{macrocode}
+\edef\makeindex{%
+ \noexpand\newindex{default}{idx}{ind}{%
+ \expandafter\ifx\csname indexname\endcsname\relax
+ Index%
+ \else
+ \indexname
+ \fi
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\if@silentindex}
+% \begin{macro}{\if@addtoindex}
+% \begin{macro}{\if@proofmode}
+% We need three new flags. The first, =\if@silentindex=, indicates
+% whether the entry should be typeset in running text, as well as
+% written out to the index; this is used to implement the =\index*=
+% command. The second, =\if@addtoindex=, indicates whether entries
+% should be written to the index; this is used to disable the =\index=
+% command inside of page headings and tables of contents. The third,
+% =\ifproofmode=, indicates whether index entries should be put in the
+% margin of the page for proofing purposes.
+% \begin{macrocode}
+\newif\if@silentindex\@silentindextrue
+
+\newif\if@addtoindex\@addtoindextrue
+
+\newif\ifproofmode\proofmodefalse
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\index}
+% \begin{macro}{\p@index}
+% \begin{macro}{\x@index}
+% =\index= will be made self-protecting (a la =\em=, etc.) so it can
+% be used inside, for example, sectioning commands. Unfortunately, to
+% really make =\index= robust, we have to redefine some of \LaTeX's
+% commands for dealing with tables of contents and page headings.
+% (See below.) $*$sigh$*$
+% \begin{macrocode}
+\def\index{\protect\p@index}
+
+\def\p@index{%
+ \if@silentindex\@bsphack\fi
+ \@ifstar{\@silentindexfalse\@xindex}{\@silentindextrue\@xindex}%
+}
+
+\def\@xindex{\@ifnextchar[{\@index}{\@index[default]}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@index}
+% \begin{macro}{\@@index}
+% \begin{macro}{\@wrindex}
+% The following is much more complicated than it should have to be.
+% First, note the check to see if =\index= is equal to =\@gobble=.
+% This is so I don't have to redefine =\@outputpage=, which
+% temporarily disables =\label=, =\index=, and =\glossary= by
+% =\let='ing them equal to =\@gobble=. (For this reason, we have to
+% be very careful to make sure that =\index= has expanded to
+% =\p@index= before it gets to =\@outputpage=.) Second, note that if
+% =\if@addtoindex= is false, we don't complain about undefined index
+% types. This is because if your page headings, for example, are
+% being typeset in all uppercase, you might end up with something like
+% =\index[AUT]{...}= instead of =\index[aut]{...}=.
+% \begin{macrocode}
+\def\@index[#1]{%
+ \ifx\index\@gobble
+ \@addtoindexfalse
+ \fi
+ \def\@tempf{\@@index{#1}}%
+ \if@addtoindex
+ \@ifundefined{idx@#1}%
+ {%
+ \def\@tempf{%
+ \@latexerr{Index type `\string#1' undefined}%
+ \@ehc
+ \@silentindextrue
+ \@gobble
+ }%
+ }%
+ {}%
+ \fi
+ \@tempf
+}
+
+\def\@@index#1#2{%
+ \if@addtoindex
+ \if@filesw\@wrindex{#1}{#2}\fi
+ \ifproofmode\@showidx{#2}\fi
+ \fi
+ \if@silentindex\expandafter\@esphack\else\@silentindextrue#2\fi
+}
+
+\def\@wrindex#1#2{%
+ \begingroup
+ \let\thepage\relax
+ \def\@tempa{#2}%
+ \edef\@tempa{%
+ \write\@auxout{%
+ \string\@vwritefile{#1}{%
+ \string\indexentry{\@nearverbatim\@tempa}{\thepage}%
+ }%
+ }%
+ }%
+ \expandafter\endgroup\@tempa
+ \if@nobreak\ifvmode\nobreak\fi\fi
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\seename}
+% \begin{macro}{\see}
+% \begin{macro}{\printindex}
+% \begin{macro}{\@printindex}
+% The following are adapted from {\tt makeidx.sty}, v2.09 $\langle$21
+% Oct 91$\rangle$.
+% \begin{macrocode}
+\@ifundefined{seename}{\def\seename{see}}{}
+
+\def\see#1#2{{\em \seename\/} #1}
+
+\def\printindex{\@ifnextchar [{\@printindex}{\@printindex[default]}}
+
+\def\@printindex[#1]{%
+ \def\@indextype{#1}%
+ \@ifundefined{idx@#1}%
+ {\@latexerr{Index type `\string#1' undefined}\@ehc}%
+ {%
+ \edef\@tempa{\@nameuse{idx@#1}}%
+ \@input{\jobname.\expandafter\@second\@tempa\@nil}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@indexstar@}
+% Now we set things up for =\shortindexing=. First, we define a
+% one-token shorthand for =\index*=. This will be needed in the
+% definition of =\idx@activehat=.
+% \begin{macrocode}
+\def\@indexstar@{\index*}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\idx@activehat}
+% \begin{macro}{\idx@activebar}
+% Next, we define the values that =^= and =_= will have when
+% shortindexing is turned on.
+% \begin{macrocode}
+\def\idx@activehat{%
+ \relax
+ \ifmmode\expandafter\sp\else\expandafter\@indexstar@\fi
+}
+
+\def\idx@activebar{
+ \relax
+ \ifmmode\expandafter\sb\else\expandafter\index\fi
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\shortindexingon}
+% \begin{macro}{\shortindexingoff}
+% Now we define the =\shortindexingon= and =\shortindexinoff= commands
+% to turn shortindexing on and off (surprise!). =\shortindexingon=
+% saves the old definitions and =\catcode='s of =^= and =_= so they
+% can later be restored by =\shortindexingoff=. Both of these make
+% their changes local to any enclosing group, so they can be used as
+% declarations to disable or enable shortindexing temporarily. In
+% addition, {\tt shortindexingon} can also be used as an environment.
+%
+% This is potentially very confusing. My basic rationale (if it can
+% be described as such) was that under normal circumstances, one would
+% put =\shortindexingon= in the preamble of one's document, and never
+% want to turn it off. =\shortindexingoff= is an attempt to make
+% allowance for the contingency that someone might want to turn
+% shortindexing off, either permanently or temporarily.
+% \begin{macrocode}
+\newif\if@shortindexing
+
+\begingroup
+
+ \catcode`\^=\active
+ \catcode`\_=\active
+
+ \gdef\shortindexingon{%
+ \@shortindexingtrue
+ \chardef\old@idxhatcode=\catcode`\^\relax
+ \chardef\old@idxbarcode=\catcode`\_\relax
+ \catcode`\^=\active
+ \catcode`\_=\active
+ \let\old@idxhat=^%
+ \let\old@idxbar=_%
+ \let^\idx@activehat
+ \let_\idx@activebar
+ }
+
+ \gdef\shortindexingoff{%
+ \if@shortindexing
+ \@shortindexingfalse
+ \let^=\old@idxhat
+ \let_=\old@idxbar
+ \catcode`\^=\old@idxhatcode
+ \catcode`\_=\old@idxbarcode
+ \fi
+ }
+
+\endgroup
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% Now we redefine =\theindex=. We try to make the minimal possible
+% change, but if the user's style doesn't know about =\indexname=, we
+% have no alternative but to redefine the entire environment and issue
+% a warning.
+%
+% Thanks to Alan Jeffrey $\langle${\tt
+% alanje@cogs.sussex.ac.uk}$\rangle$ for pointing out how the package
+% should behave when =\indexname= is already defined and for the code
+% to implement that case.
+% \begin{macrocode}
+\expandafter\ifx\csname indexname\endcsname\relax
+
+ \typeout{index.sty> Uh oh! It looks like your document style
+ doesn't use \string\indexname.}
+ \typeout{index.sty> I'll have to redefine the
+ \string\theindex\space environment, using}
+ \typeout{index.sty> the `book' style default.}
+
+ \def\indexname{Index}
+% \end{macrocode}
+% The following is adapted from {\tt book.sty} v2.09 $\langle$14 Jan
+% 92$\rangle$.
+% \begin{macrocode}
+ \def\theindex{%
+ \@restonecoltrue
+ \if@twocolumn\@restonecolfalse\fi
+ \columnseprule\z@ \columnsep 35\p@
+ \edef\@indexname{%
+ \expandafter\the\@nameuse{idxtitle@\@indextype}%
+ }%
+ \twocolumn[\@makeschapterhead{\@indexname}]%
+ \@mkboth{\uppercase{\@indexname}}{\uppercase{\@indexname}}%
+ \thispagestyle{plain}%
+ \parindent\z@
+ \parskip\z@ plus .3\p@\relax\let\item\@idxitem
+ }
+
+\else
+
+ \@temptokena={%
+ \edef\indexname{\the\@nameuse{idxtitle@\@indextype}}%
+ }
+ \toks0=\expandafter{\theindex}
+ \edef\theindex{\the\@temptokena\the\toks0}
+
+\fi
+% \end{macrocode}
+%
+% \begin{macro}{\@vwritefile}
+% \begin{macro}{\x@vwritefile}
+% \begin{macro}{\y@vwritefile}
+% Now we define the =\@vwritefile= macro, which copies information
+% from the =aux= file to one of the other auxiliary files.
+% =\@vwritefile= performs essentially the same function as
+% =\@writefile=, except that it does not expand it second argument
+% (i.e., it writes it out verbatim (well, almost verbatim)).
+%
+% NOTE: There doesn't seem to be any reason why =\@writefile= *should*
+% expand its second argument and in fact, we later redefine
+% =\addcontentsline= to use =\@vwritefile= instead of =\@writefile=.
+% A slight extension of this idea could be used to solve the problem
+% of fragility in sectioning commands.
+%
+% =\@vwritefile=, like =\@writefile=, should be disabled when the
+% =aux= file is being read by =\begin{document}=. To avoid having to
+% redefine =\document=, we make the behaviour of =\@vwritefile=
+% conditional on the current meaning of =\@writefile=.
+% \begin{macrocode}
+\def\@vwritefile{%
+ \ifx\@writefile\@gobbletwo
+ \expandafter\@gobbletwo
+ \else
+ \expandafter\x@vwritefile
+ \fi
+}
+
+\def\x@vwritefile#1{%
+ \@ifundefined{tf@#1}{\@gobbletwo}{\y@vwritefile}{#1}%
+}
+
+\long\def\y@vwritefile#1#2{%
+ \def\@tempa{#2}%
+ \immediate\write\csname tf@#1\endcsname{\@nearverbatim\@tempa}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% Now we take some code from {\tt showidx.sty} and merge it into our
+% new system. There are four reasons for redefining the commands here
+% rather than just inputting {\tt showidx.sty} (or requiring the user
+% to do so). First, {\tt showidx.sty} ends with a call to
+% =\flushbottom=, which I want to avoid. Second, the instructions for
+% successfully using {\tt showidx.sty} along with {\tt index.sty}
+% would be somewhat tricky. This way, I can just tell users not to
+% use {\tt showidx.sty} at all. Third, I need to make some
+% alterations to =\@showidx= anyway. In particular, (a) I need to add
+% the =\@sanitizeat= command so this works correctly with AMS-\LaTeX\
+% and (b) I want to add the =\indexproofstyle= command so the user can
+% customize the size and font used for the index proofs. Finally,
+% {\tt showidx.sty} has at least two annoying bugs in it. See the
+% edit-history for version 2.01 for a description.
+%
+% \begin{macro}{\@indexbox}
+% This code is adapted from {\tt showidx.sty}, v2.09 $\langle$16 Jun
+% 1991$\rangle$.
+% \begin{macrocode}
+\newinsert\@indexbox
+
+\dimen\@indexbox=\maxdimen
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@sanitizeat}
+% The definition of =\@sanitizeat= is slightly tricky, since we need
+% =@= to be active when this macro is defined, but we also need it to
+% be part of the control sequence name.
+% \begin{macrocode}
+\begingroup
+ \catcode`\@=\active
+ \expandafter\gdef\csname\string @sanitizeat\endcsname
+ {\def @{\char`\@}}
+\endgroup
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\indexproofstyle}
+% \begin{macro}{\@showidx}
+% \begin{macro}{\@leftidx}
+% \begin{macro}{\@rightidx}
+% \begin{macro}{\@mkidx}
+% \begin{macro}{\raggedbottom}
+% \begin{macro}{\flushbottom}
+% \begin{macro}{\@texttop}
+% Note the cautious way of calling =\reset@font=, which is necessary
+% for this to work correctly under both the Old and New Font Selection
+% Schemes.
+% \begin{macrocode}
+\newtoks\indexproofstyle
+
+\indexproofstyle{\footnotesize\csname reset@font\endcsname\tt}
+
+\def\@showidx#1{%
+ \insert\@indexbox{%
+ \@sanitizeat
+ \the\indexproofstyle
+ \hsize\marginparwidth
+ \hangindent\marginparsep \parindent\z@
+ \everypar{}\let\par\@@par \parfillskip\@flushglue
+ \lineskip\normallineskip
+ \baselineskip .8\normalbaselineskip\sloppy
+ \raggedright \leavevmode
+ \vrule \@height .7\normalbaselineskip \@width \z@\relax#1\relax
+ \vrule \@height\z@ \@depth.3\normalbaselineskip \@width\z@\relax
+ }%
+ \ifhmode\penalty\@M \hskip\z@skip\fi
+}
+
+\def\@leftidx{\hskip-\marginparsep \hskip-\marginparwidth}
+
+\def\@rightidx{\hskip\columnwidth \hskip\marginparsep}
+
+\def\@mkidx{%
+ \vbox to \z@{%
+ \rlap{%
+ \if@twocolumn
+ \if@firstcolumn \@leftidx \else \@rightidx \fi
+ \else
+ \if@twoside
+ \ifodd\c@page \@rightidx \else \@leftidx \fi
+ \else
+ \@rightidx
+ \fi
+ \fi
+ \box\@indexbox
+ }%
+ \vss
+ }%
+}
+
+\def\raggedbottom{%
+ \def\@textbottom{\vskip\z@ plus.0001fil}%
+ \let\@texttop\@mkidx
+}
+
+\def\flushbottom{\let\@textbottom\relax \let\@texttop\@mkidx}
+
+\let\@texttop\@mkidx
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% Now, this next bit really gets up my nose. The only way to make
+% sure that the =\index= command gets handled correctly when used
+% inside of sectioning commands is to redefine a bunch of \LaTeX's
+% table of contents and running-heads macros. $*$blech$*$ Fragility
+% rears its ugly head again. (Incidentally, it should be possible to
+% use the =\@nearverbatim= trick to make arguments of sectioning
+% commands robust. I'll have to explore this.)
+%
+% These are based on {\tt latex.tex} 2.09 $\langle$25 March
+% 1992$\rangle$.
+%
+% \begin{macro}{\addcontentsline}
+% We need to redefine =\addcontentsline= to keep it from expanding
+% =\index= commands too far. In particular, we have removed =\index=
+% from the list of macros that are set equal to =\@gobble= and we
+% substitute =\@vwritefile= for =\@writefile=. This latter change
+% also means that we can simplify the definition of =\protect=
+% somewhat.
+% \begin{macrocode}
+\def\addcontentsline#1#2#3{%
+ \if@filesw
+ \begingroup
+ \let\label\@gobble
+ \let\glossary\@gobble
+ \def\protect##1{\string##1\space}%
+ \@temptokena{\thepage}%
+ \edef\@tempa{%
+ \write\@auxout{%
+ \string\@vwritefile{#1}{\string\contentsline{#2}{#3}%
+ {\the\@temptokena}}%
+ }%
+ }%
+ \@tempa
+ \endgroup
+ \if@nobreak\ifvmode\nobreak\fi\fi
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@starttoc}
+% We need to redefine =\@starttoc= to =\@addtoindexfalse= so that items
+% don't get written to the index from within tables of contents. The
+% only change here is the addition of =\@addtoindexfalse=.
+% \begin{macrocode}
+\def\@starttoc#1{%
+ \begingroup
+ \@addtoindexfalse
+ \makeatletter
+ \@input{\jobname.#1}%
+ \if@filesw
+ \expandafter\newwrite\csname tf@#1\endcsname
+ \immediate\openout \csname tf@#1\endcsname \jobname.#1\relax
+ \fi
+ \global\@nobreakfalse
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\markboth}
+% \begin{macro}{\markright}
+% Finally, we have to redefine =\markboth= and =\markright= to keep
+% them from disabling the expansion of =\index= while putting section
+% heads into the =\mark=. Otherwise, we'd end up with ``=\index='' in
+% the mark, which would cause problems when =\@outputpage= redefines
+% =\index= to be equal to =\@gobble=. Instead, we want =\index= to
+% expand to =\p@index= in the =\mark=, so we retain control over what
+% happens in \@outputpage.
+%
+% This time, the only change is to remove =\index= from the list of
+% macros that are =\let= equal to =\relax=.
+% \begin{macrocode}
+\def\markboth#1#2{%
+ \gdef\@themark{{#1}{#2}}%
+ \begingroup
+ \let\protect\noexpand
+ \let\label\relax
+ \let\glossary\relax
+ \mark{\@themark}%
+ \endgroup
+ \if@nobreak\ifvmode\nobreak\fi\fi
+}
+
+\def\markright#1{%
+ \begingroup
+ \let\protect\noexpand
+ \let\label\relax
+ \let\glossary\relax
+ \expandafter\@markright\@themark{#1}%
+ \mark{\@themark}%
+ \endgroup
+ \if@nobreak\ifvmode\nobreak\fi\fi
+}
+%</style>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \section{Edit history}
+%
+% \begin{description}
+%
+% \item[v1.00 (4 Mar 1993)]
+% initial version, posted to comp.text.tex.
+%
+% \item[v1.01 (4 Mar 1993)]
+% added =\renewindex= command and checking to make sure index is (or
+% is not) defined in =\newindex=, =\index= and =\printindex=. Also
+% tightened up the code in various places and added check to make sure
+% file is only loaded once.
+%
+% \item[v2.00 (24 Mar 1993)]
+% added support for =\index*=, proofmode, =\shortindexingon= and
+% =\shortindexingoff=.
+%
+% \item[v2.01 (24 Jun 1993)]
+% Fixed 3 bugs. (1) If proofmode was turned on, then something like
+% ``=\index{WORD}WORD='' would suppress the hyphenation of WORD. This
+% was fixed by adding ``=\penalty\@M\hskip\z@skip='' to the end of
+% =\@showidx=. (This is just the definition of =\allowhyphens=
+% borrowed from german.sty, v2 $\langle$4 Nov 1988$\rangle$). (2) The
+% =\hbox= in =\@mkidx= was being set at its natural width, which had a
+% tendency to interfere with the width of the page. The =\hbox= is
+% now replaced by =\rlap=. (3) If the title of an index (i.e., the
+% fourth argument of =\newindex=) contained a particularly fragile
+% command like~=\d=, havoc would ensue when =\theindex= tried to
+% extract the title. Titles are now kept in token registers to
+% prevent such unpleasantness. Bugs (2) and (3) were reported by
+% Dominik Wujastyk $\langle$D.Wujastyk@ucl.ac.uk$\rangle$ on 24 June
+% 1993. Note that bugs (1) and (2) are actually bugs in showidx.sty,
+% v2.09 $\langle$16 Jun 1991$\rangle$.
+%
+% \item[v2.02 (25 Jun 1993)]
+% Rewrote the code that implements the short indexing commands (=^=
+% and =_=) to make index.sty compatible with other style files that
+% need to make =^= and =_= active in some contexts. See the code for
+% more details.
+%
+% \item[v2.03 (30 Jun 1993)]
+% Once again rewrote the code that implements the short indexing
+% commands. Dumped the shortindexing environment and rewrote the
+% =\shortindexingon= and =\shortindxingoff= commands to save and
+% restore the =\catcode='s and meanings of =^= and =_= in the safest
+% possible (I hope) order. Also added the =\if@shortindexing= flag to
+% keep =\shortindexingoff= from doing anything if it is called outside
+% of the scope of a =\shortindexingon= command. (Question: Should
+% =\shortindexingon= check that flag before doing anything?)
+%
+% \item[v2.04 (beta) (14 Jul 1993)]
+% Added =\disableindex= command. Added =\newindex= and =\renewindex=
+% to =\@preamblecmds=. Add =\if@newindex= flag to =\@newindex= to
+% prevent =\renewindex= from re-allocating new =\write= and =\toks=
+% registers. Rewrote using {\tt doc.sty} and {\tt DocStrip}. Also
+% cleaned up the code somewhat.
+%
+% \item[v3.00 (15 Jul 1993)]
+% Made further minor tweaks to code and internal documentation.
+% Booted version number up to 3.00 and released on the world.
+%
+% \item[v3.01 (19 Jul 1993)]
+% Fixed {\tt DocStrip} CheckSum.
+%
+% \item[v3.02 (15 Sep 1993)]
+% Corrected spelling of =\@shortindexingfalse= in definition of
+% =\shortindexingoff=. Thanks to Hendrik G. Seliger $\langle
+% hank@Blimp.automat.uni-essen.de\rangle$ for this bug report. Also
+% added redefinitions of =\@leftmark= and =\@rightmark= to fix a bug
+% reported by Dominik Wujastyk $\langle$D.Wujastyk@ucl.ac.uk$\rangle$.
+%
+% \end{description}
+%
+% \DisableCrossrefs
+%
+% \section{The sample file}
+%
+% \begin{macrocode}
+%<test>%% This is a sample file for index.sty. To run the sample,
+%<test>%% execute the following commands:
+%<test>%%
+%<test>%% latex sample.tex
+%<test>%% makeindex sample
+%<test>%% makeindex -o sample.and sample.adx
+%<test>%% makeindex -o sample.nnd sample.ndx
+%<test>%% latex sample.tex
+%<test>
+%<test>\documentstyle[index]{book}
+%<test>
+%<test>\makeindex
+%<test>\newindex{aut}{adx}{and}{Name Index}
+%<test>\newindex{not}{ndx}{nnd}{List of Notation}
+%<test>
+%<test>\shortindexingon
+%<test>
+%<test>\proofmodetrue
+%<test>
+%<test>\def\aindex{\index*[aut]}
+%<test>
+%<test>\begin{document}
+%<test>
+%<test>\tableofcontents
+%<test>
+%<test>\newpage
+%<test>
+%<test>\chapter{Here is a ^[aut]{chapter} title}
+%<test>
+%<test>\section{Section header\index[aut]{section}}
+%<test>
+%<test>Here is some text.\index{subject}
+%<test>
+%<test>Here is \index[not]{notation}some more \index[not]{sin@$\sin$}
+%<test>text.
+%<test>
+%<test>Here is some ^{more} _[not]{notation} text.
+%<test>
+%<test>Here is yet more \aindex{text}.
+%<test>
+%<test>\section{Another Section header _[aut]{section2}}
+%<test>
+%<test>And here is some math: $x^1_b$.
+%<test>
+%<test>Here is an ^[aut]{index} entry \fbox{inside an
+%<test>\index[not]{min@$\min$}fbox}
+%<test>
+%<test>\fbox{Here is an ^[aut]{entry} in a box.}
+%<test>
+%<test>\printindex[not]
+%<test>
+%<test>\printindex[aut]
+%<test>
+%<test>\printindex
+%<test>
+%<test>\end{document}
+% \end{macrocode}
+%
+% \PrintIndex
+% \PrintChanges
+%
+% \Finale
+%
+% \end{document}
+\endinput
diff --git a/obsolete/macros/latex209/contrib/misc/nar.sty b/obsolete/macros/latex209/contrib/misc/nar.sty
new file mode 100644
index 0000000000..59a0a10766
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/misc/nar.sty
@@ -0,0 +1,282 @@
+%%% ====================================================================
+%%% @LaTeX-style-file{
+%%% author = "Tom Schneider",
+%%% version = "2.00",
+%%% date = "10 Sep 1991",
+%%% filename = "nar.sty",
+%%% address = "National Cancer Institute
+%%% Laboratory of Mathematical Biology
+%%% Frederick, Maryland 21701-1013
+%%% USA",
+%%% checksum = "64913 282 628 9329",
+%%% email = "toms@ncifcrf.gov (Internet)",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "nucleic acid research",
+%%% supported = "yes",
+%%% docstring = "This LaTeX style file is for the journal
+%%% Nucleic Acid Research. It should be used
+%%% as a major style, with
+%%% \documentstyle[...]{nar}.
+%%%
+%%% The checksum field above contains a CRC-16
+%%% checksum as the first value, followed by the
+%%% equivalent of the standard UNIX wc (word
+%%% count) utility output of lines, words, and
+%%% characters. This is produced by Robert
+%%% Solovay's checksum utility."
+%%% }
+%%% ====================================================================
+
+% version = 2.00 of nar.sty 1990 April 30
+%
+% from:
+% article.sty 16-Mar-88
+
+%
+% All cases of 'newcounter' were commented out because these
+% were `already used' by LaTeX. Why this is necessary, I don't know!
+%
+
+\typeout{Document Style `nar' <16 Mar 88>.}
+%\typeout{Document Style `article' <16 Mar 88>.}
+
+
+\def\@ptsize{0} \@namedef{ds@11pt}{\def\@ptsize{1}}
+\@namedef{ds@12pt}{\def\@ptsize{2}}
+\def\ds@twoside{\@twosidetrue \@mparswitchtrue} \def\ds@draft{\overfullrule
+5pt}
+\@options
+\input art1\@ptsize.sty\relax
+
+
+\def\labelenumi{\theenumi.}
+\def\theenumi{\arabic{enumi}}
+\def\labelenumii{(\theenumii)}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+\def\labelenumiii{\theenumiii.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+\def\labelenumiv{\theenumiv.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+\def\labelitemi{$\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+\def\quotation{\list{}{\listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin \parsep 0pt plus 1pt}\item[]}
+\let\endquotation=\endlist
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+\let\enddescription\endlist
+
+
+\def\theequation{\arabic{equation}}
+
+
+\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{empty}\c@page\z@}
+\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi}
+
+\arraycolsep 5pt \tabcolsep 6pt \arrayrulewidth .4pt \doublerulesep 2pt
+\tabbingsep \labelsep
+
+\skip\@mpfootins = \skip\footins
+\fboxsep = 3pt \fboxrule = .4pt
+
+%\newcounter{part}
+%\newcounter {section}
+%\newcounter {subsection}[section]
+%\newcounter {subsubsection}[subsection]
+%\newcounter {paragraph}[subsubsection]
+%\newcounter {subparagraph}[paragraph]
+
+\def\thepart{\Roman{part}} \def\thesection {\arabic{section}}
+\def\thesubsection {\thesection.\arabic{subsection}}
+\def\thesubsubsection {\thesubsection .\arabic{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+\def\thesubparagraph {\theparagraph.\arabic{subparagraph}}
+
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{3}
+
+\def\tableofcontents{\section*{Contents\@mkboth{CONTENTS}{CONTENTS}}
+ \@starttoc{toc}}
+\def\l@part#1#2{\addpenalty{\@secpenalty}
+ \addvspace{2.25em plus 1pt} \begingroup
+ \@tempdima 3em \parindent \z@ \rightskip \@pnumwidth \parfillskip
+-\@pnumwidth
+ {\large \bf \leavevmode #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
+ \nobreak \endgroup}
+\def\l@section#1#2{\addpenalty{\@secpenalty} \addvspace{1.0em plus 1pt}
+\@tempdima 1.5em \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \bf \leavevmode \advance\leftskip\@tempdima \hskip -\leftskip #1\nobreak\hfil
+\nobreak\hbox to\@pnumwidth{\hss #2}\par
+ \endgroup}
+
+\def\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}}
+\def\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}}
+\def\l@paragraph{\@dottedtocline{4}{7.0em}{4.1em}}
+\def\l@subparagraph{\@dottedtocline{5}{10em}{5em}}
+\def\listoffigures{\section*{List of Figures\@mkboth
+ {LIST OF FIGURES}{LIST OF FIGURES}}\@starttoc{lof}}
+\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
+\def\listoftables{\section*{List of Tables\@mkboth
+ {LIST OF TABLES}{LIST OF TABLES}}\@starttoc{lot}}
+\let\l@table\l@figure
+
+
+% This next line alters the cite from [] to () (worked the first time!!!)
+\def\@cite#1#2{({#1\if@tempswa , #2\fi})}
+% Modified from line 6317 in the DEFAULT DEFINITIONS of the file latex.tex,
+% which is: LATEX VERSION 2.09 - RELEASE OF 27 October 1986
+
+\def\thebibliography#1{\section*{References\@mkboth
+ {REFERENCES}{REFERENCES}}\list
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+\let\endthebibliography=\endlist
+
+
+\newif\if@restonecol
+\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\section*{Index}]
+ \@mkboth{INDEX}{INDEX}\thispagestyle{plain}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+\def\@idxitem{\par\hangindent 40pt}
+\def\subitem{\par\hangindent 40pt \hspace*{20pt}}
+\def\subsubitem{\par\hangindent 40pt \hspace*{30pt}}
+\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
+\def\indexspace{\par \vskip 10pt plus 5pt minus 3pt\relax}
+
+\def\footnoterule{\kern-3\p@
+ \hrule width .4\columnwidth
+ \kern 2.6\p@}
+
+\long\def\@makefntext#1{\parindent 1em\noindent
+ \hbox to 1.8em{\hss$^{\@thefnmark}$}#1}
+
+
+\setcounter{topnumber}{2}
+\def\topfraction{.7}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.3}
+\setcounter{totalnumber}{3}
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+\long\def\@makecaption#1#2{
+ \vskip 10pt
+ \setbox\@tempboxa\hbox{#1: #2}
+ \ifdim \wd\@tempboxa >\hsize #1: #2\par \else \hbox
+to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi}
+
+
+%\newcounter{figure}
+\def\thefigure{\@arabic\c@figure}
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{Figure \thefigure}
+\def\figure{\@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+%\newcounter{table}
+\def\thetable{\@arabic\c@table}
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{Table \thetable}
+\def\table{\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+
+
+\def\maketitle{\par
+ \begingroup
+ \def\thefootnote{\fnsymbol{footnote}}
+ \def\@makefnmark{\hbox
+ to 0pt{$^{\@thefnmark}$\hss}}
+ \if@twocolumn
+ \twocolumn[\@maketitle]
+ \else \newpage
+ \global\@topnum\z@ \@maketitle \fi\thispagestyle{plain}\@thanks
+ \endgroup
+ \setcounter{footnote}{0}
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\let\thanks\relax}
+\def\@maketitle{\newpage
+ \null
+ \vskip 2em \begin{center}
+ {\LARGE \@title \par} \vskip 1.5em {\large \lineskip .5em
+\begin{tabular}[t]{c}\@author
+ \end{tabular}\par}
+ \vskip 1em {\large \@date} \end{center}
+ \par
+ \vskip 1.5em}
+\def\abstract{\if@twocolumn
+\section*{Abstract}
+\else \small
+\begin{center}
+{\bf Abstract\vspace{-.5em}\vspace{0pt}}
+\end{center}
+\quotation
+\fi}
+\def\endabstract{\if@twocolumn\else\endquotation\fi}
+
+\mark{{}{}}
+
+\if@twoside \def\ps@headings{\let\@mkboth\markboth
+\def\@oddfoot{}\def\@evenfoot{}\def\@evenhead{\rm \thepage\hfil \sl
+\leftmark}\def\@oddhead{\hbox{}\sl \rightmark \hfil
+\rm\thepage}\def\sectionmark##1{\markboth {\uppercase{\ifnum \c@secnumdepth
+>\z@
+ \thesection\hskip 1em\relax \fi ##1}}{}}\def\subsectionmark##1{\markright
+{\ifnum \c@secnumdepth >\@ne
+ \thesubsection\hskip 1em\relax \fi ##1}}}
+\else \def\ps@headings{\let\@mkboth\markboth
+\def\@oddfoot{}\def\@evenfoot{}\def\@oddhead{\hbox {}\sl \rightmark \hfil
+\rm\thepage}\def\sectionmark##1{\markright {\uppercase{\ifnum \c@secnumdepth
+>\z@
+ \thesection\hskip 1em\relax \fi ##1}}}}
+\fi
+\def\ps@myheadings{\let\@mkboth\@gobbletwo
+\def\@oddhead{\hbox{}\sl\rightmark \hfil
+\rm\thepage}\def\@oddfoot{}\def\@evenhead{\rm \thepage\hfil\sl\leftmark\hbox
+{}}\def\@evenfoot{}\def\sectionmark##1{}\def\subsectionmark##1{}}
+
+
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+
+\ps@plain \pagenumbering{arabic} \onecolumn \if@twoside\else\raggedbottom\fi
diff --git a/obsolete/macros/latex209/contrib/misc/natsci.sty b/obsolete/macros/latex209/contrib/misc/natsci.sty
new file mode 100644
index 0000000000..9114409fcd
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/misc/natsci.sty
@@ -0,0 +1,61 @@
+%NAME: natsci.sty
+% natsci.sty 22 Feb 89
+
+% Correctly formats citations in the NATSCI bibliography style.
+% You also need the file natsci.bst to get the most out of this.
+
+% Use with LaTeX version 2.09 article document style
+% and the natsci bibliography style:
+% \documentstyle[natsci]{article}
+% \begin{document}
+% \bibliographystyle{natsci}
+
+% Copyright (c) 1987 by Stephen Gildea
+% Permission to copy all or part of this work is granted, provided
+% that the copies are not made or distributed for resale, and that
+% the copyright notice and this notice are retained.
+%
+% THIS WORK IS PROVIDED ON AN "AS IS" BASIS. THE AUTHOR PROVIDES NO
+% WARRANTY WHATSOEVER, EITHER EXPRESS OR IMPLIED, REGARDING THE WORK,
+% INCLUDING WARRANTIES WITH RESPECT TO ITS MERCHANTABILITY OR FITNESS
+% FOR ANY PARTICULAR PURPOSE.
+
+% If you make any improvements, I'd like to hear about them.
+
+% Stephen Gildea
+% MIT Earth Resources Lab
+% Cambridge, Mass. 02139
+% mit-erl!gildea
+% gildea@erl.mit.edu
+
+% This definition has to be changed slightly for different document
+% styles such as report.
+\def\thebibliography#1{\section*{References\@mkboth
+ {REFERENCES}{REFERENCES}}\list
+ %% default is no labels, for those not using \cite or BibTeX
+ {}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}\@bibsetup}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+
+% Don't put the citation in an hbox.
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+ \def\@citea{}\@cite{\@for\@citeb:=#2\do
+ {\@citea\def\@citea{\@citesep}\@ifundefined
+ {b@\@citeb}{{\bf ?}\@warning
+ {Citation `\@citeb' on page \thepage \space undefined}}%
+{\csname b@\@citeb\endcsname}}}{#1}}
+
+% undent first line of a reference by using negative \itemindent.
+\def\@bibsetup{\itemindent=-\leftmargin \itemsep=0pt}
+
+% Use a semicolon instead of a comma between multiple citations.
+\def\@citesep{; }
+
+% round parens instead of square brackets
+\def\@cite#1#2{({#1\if@tempswa , #2\fi})}
+
+% Labels should not be printed in References
+\def\@biblabel#1{\hfill}
diff --git a/obsolete/macros/latex209/contrib/misc/nofm.sty b/obsolete/macros/latex209/contrib/misc/nofm.sty
new file mode 100644
index 0000000000..062c1b6738
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/misc/nofm.sty
@@ -0,0 +1,56 @@
+% nofm.sty
+%
+% This is a LaTeX document style option for "n of m" style pagination.
+% It produces a centered header in the above style, and no footer;
+% variations to put the information elsewhere, incorporate other
+% information, or include the word "page" should be easy. This option
+% works by recording the last page's page number in the .aux file
+% (using the standard label/pageref mechanism). Therefore, you will
+% have to run LaTeX a second time if the number of pages changes, in
+% order to get correct output.
+%
+% -- Max Hailperin, 9/27/88
+%
+% 25 Feb 91 - Don't clobber \pagestyle, redefine \ps@plain.
+% Define \@lastpageref to eliminate warnings.
+% clayton@thumper.bellcore.com
+
+
+% Make the plain page style be the same as the empty page style to
+% avoid having a footer-centered page number on the first page and on
+% index pages (in article style, anyway).
+
+\let \ps@plain = \ps@empty
+
+
+% The below is reproduced from the latex.tex file, version 2.09 of 27 October
+% 1986, Copyright (C) 1985 by Leslie Lamport, with the exception of the
+% marked change in the first line----vvvvvvvvvvvvvvvvvv.
+
+\def\enddocument{\@checkend{document}\label{@lastpage}\clearpage\begingroup
+\if@filesw \immediate\closeout\@mainaux
+\def\global\@namedef##1##2{}\def\newlabel{\@testdef r}%
+\def\bibcite{\@testdef b}\@tempswafalse \makeatletter\input \jobname.aux
+\if@tempswa \@warning{Label(s) may have changed. Rerun to get
+cross-references right}\fi\fi\endgroup\deadcycles\z@\@@end}
+
+
+% Define a special-purpose \pageref to avoid having a "Reference
+% @lastpage undefined" warning on every page.
+
+\def\@lastpageref{%
+ \@ifundefined{r@@lastpage}{{\bf ??}}%
+ {\edef\@tempa{\@nameuse{r@@lastpage}}%
+ \expandafter\@cdr\@tempa\@nil\null
+ }%
+}
+
+
+% The page number is centered in the header. Change the definitions
+% to make it something else.
+
+\def \@oddhead{\rm\hfil\thepage\ of \@lastpageref\hfil}
+\def \@evenhead{\@oddhead}
+\def \@oddfoot{}
+\def \@evenfoot{\@oddfoot}
+
diff --git a/obsolete/macros/latex209/contrib/misc/preprint.sty b/obsolete/macros/latex209/contrib/misc/preprint.sty
new file mode 100644
index 0000000000..f6da168d40
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/misc/preprint.sty
@@ -0,0 +1,149 @@
+% aps12.sty
+% March 12, 1989 version
+\global\twelvepointontrue
+
+\lineskip 2pt \normallineskip 2pt%<== were 1pt each
+\def\baselinestretch{1}%
+
+\def\@normalsize{\@setsize\normalsize{16pt%14.5pt
+}\xiipt\@xiipt
+\abovedisplayskip 12pt plus3pt minus7pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6.5pt plus3.5pt
+minus3pt}
+\def\small{\@setsize\small{13.6pt}\xipt\@xipt
+\abovedisplayskip 11pt plus3pt minus6pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6.5pt plus3.5pt
+minus3pt
+\def\@listi{\parsep 4.5pt plus 2pt minus 1pt
+ \itemsep \parsep
+ \topsep 9pt plus 3pt minus 5pt}}
+\def\footnotesize{\@setsize\footnotesize{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6pt plus3pt minus3pt
+\def\@listi{\topsep 6pt plus 2pt minus 2pt\parsep 3pt plus 2pt minus 1pt
+\itemsep \parsep}}
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{18pt}\xivpt\@xivpt}
+\def\Large{\@setsize\Large{22pt}\xviipt\@xviipt}
+\def\LARGE{\@setsize\LARGE{25pt}\xxpt\@xxpt}
+\def\huge{\@setsize\huge{30pt}\xxvpt\@xxvpt}
+\let\Huge=\huge
+\normalsize
+
+
+
+\if@twoside \oddsidemargin 21pt \evensidemargin 59pt \marginparwidth 85pt
+\else \oddsidemargin 39.5pt \evensidemargin 39.5pt
+ \marginparwidth 68pt
+\fi
+\marginparsep 10pt
+ \topmargin 27pt \headheight 12pt \headsep 25pt \footheight 12pt \footskip
+30pt
+
+\textheight 536.5pt \textwidth 390pt \columnsep 10pt \columnseprule 0pt
+
+\footnotesep 8.4pt
+\skip\footins 10.8pt plus 4pt minus 2pt
+\floatsep 14pt plus 2pt minus 4pt \textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 14pt plus 4pt minus 4pt \@maxsep 20pt \dblfloatsep 14pt plus 2pt
+minus 4pt \dbltextfloatsep 20pt plus 2pt minus 4pt \@dblmaxsep 20pt
+\@fptop 0pt plus 1fil \@fpsep 10pt plus 2fil \@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil \@dblfpsep 10pt plus 2fil \@dblfpbot 0pt plus 1fil
+\marginparpush 7pt
+
+\parskip 0pt plus 1pt \parindent 1.5em \topsep 10pt plus 4pt minus 6pt
+\partopsep 3pt plus 2pt minus 2pt \itemsep 5pt plus 2.5pt minus 1pt
+\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301
+\@beginparpenalty -\@lowpenalty \@endparpenalty -\@lowpenalty \@itempenalty
+-\@lowpenalty
+
+\def\part{\cleardoublepage \thispagestyle{plain} \if@twocolumn \onecolumn
+\@tempswatrue \else \@tempswafalse \fi \hbox{}\vfil \bgroup \centering
+\secdef\@part\@spart}
+\def\@part[#1]#2{\ifnum \c@secnumdepth >-2\relax \refstepcounter{part}
+\addcontentsline{toc}{part}{\thepart \hspace{1em}#1}\else
+\addcontentsline{toc}{part}{#1}\fi \markboth{}{}
+ \ifnum \c@secnumdepth >-2\relax \huge\bf Part \thepart \par \vskip 20pt \fi
+\Huge \bf #1\@endpart}
+\def\@endpart{\par\egroup \vfil\newpage \if@twoside \hbox{}
+\thispagestyle{empty}
+ \newpage
+ \fi \if@tempswa \twocolumn \fi}
+\def\@spart#1{\Huge \bf #1\@endpart}
+
+\def\@makechapterhead#1{ \vspace*{50pt} { \parindent 0pt \raggedright
+ \ifnum \c@secnumdepth >\m@ne \huge\bf \@chapapp{} \thechapter \par
+ \vskip 20pt \fi \Huge \bf #1\par
+ \nobreak \vskip 40pt } }
+
+\def\@makeschapterhead#1{ \vspace*{50pt} { \parindent 0pt \raggedright
+ \Huge \bf #1\par
+ \nobreak \vskip 40pt } }
+
+\def\chapter{\clearpage \thispagestyle{plain} \global\@topnum\z@
+\@afterindentfalse \secdef\@chapter\@schapter}
+\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne
+ \refstepcounter{chapter}
+ \typeout{\@chapapp\space\thechapter.}
+ \addcontentsline{toc}{chapter}{\protect
+ \numberline{\thechapter}#1}\else
+ \addcontentsline{toc}{chapter}{#1}\fi
+ \chaptermark{#1}
+ \addtocontents{lof}{\protect\addvspace{10pt}}
+\addtocontents{lot}{\protect\addvspace{10pt}} \if@twocolumn
+\@topnewpage[\@makechapterhead{#2}]
+ \else \@makechapterhead{#2}
+ \@afterheading \fi}
+\def\@schapter#1{\if@twocolumn \@topnewpage[\@makeschapterhead{#1}]
+ \else \@makeschapterhead{#1}
+ \@afterheading\fi}
+
+\def\section{\@startsection {section}{1}{\z@}{-3.5ex plus -1ex minus
+ -.2ex}{2.3ex plus .2ex}{\Large\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-3.25ex plus -1ex minus
+ -.2ex}{1.5ex plus .2ex}{\large\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-3.25ex plus
+ -1ex minus -.2ex}{1.5ex plus .2ex}{\normalsize\bf}}
+\def\paragraph{\@startsection
+ {paragraph}{4}{\z@}{3.25ex plus 1ex minus .2ex}{-1em}{\normalsize\bf}}
+\def\subparagraph{\@startsection
+ {subparagraph}{4}{\parindent}{3.25ex plus 1ex minus
+ .2ex}{-1em}{\normalsize\bf}}
+
+\def\chaptermark#1{}
+
+\setcounter{secnumdepth}{2}
+
+\def\appendix{\par
+ \setcounter{chapter}{0}
+ \setcounter{section}{0}
+ \def\@chapapp{Appendix}
+ \def\thechapter{\Alph{chapter}}}
+
+
+\leftmargini 2.5em
+\leftmarginii 2.2em \leftmarginiii 1.87em \leftmarginiv 1.7em \leftmarginv 1em
+\leftmarginvi 1em
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\labelsep .5em
+\parsep 5pt plus 2.5pt minus 1pt
+\def\@listi{\leftmargin\leftmargini}
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 5pt plus 2.5pt minus 1pt
+ \parsep 2.5pt plus 1pt minus 1pt
+ \itemsep \parsep}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2.5pt plus 1pt minus 1pt
+ \parsep \z@ \partopsep 1pt plus 0pt minus 1pt
+ \itemsep \topsep}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
diff --git a/obsolete/macros/latex209/contrib/misc/refman.sty b/obsolete/macros/latex209/contrib/misc/refman.sty
new file mode 100644
index 0000000000..02e177cdc7
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/misc/refman.sty
@@ -0,0 +1,502 @@
+% This is REFMAN.STY by H.Partl, TU Wien, Version 1.1 of 4 Oct 1989.
+% Revised 30.08.93
+% --------------------------------------------------------------------------
+% Modifikations:
+% 30.08.93 by Wolfgang Kaspar; kaspar@uni-muenster.de
+% The correction of a LaTeX bug that occurs when marginpars and footnotes
+% appear on the same page (by Chris Rowley, TUGboat 9/2 Aug.88) is
+% no longer needed.
+% --------------------------------------------------------------------------
+% Document Style Option to `article' and `report',
+% for technical reference manuals, users' guides and articles,
+% with a design similar to that of the PostScript Reference Manual:
+% All pages have a wide left margin and no right margin, and section
+% headings and other `guiding' material appear in that margin.
+% Supports one-column only. REFMAN should be specified as the LAST
+% optional argument of the \documentstyle command, e.g.
+% \documentstyle[11pt,twoside,german,refman]{article}
+%
+% It CAN be used with twoside, fleqn and others.
+% It can NOT be used with twocolumn, titlepage, fullpage, a4, a4wide
+% and others.
+%
+% +-----------------------------------------------------------------+
+% ! This style file has been designed for reference manuals, users' !
+% ! guides, short instants, and related papers at the EDP centre of !
+% ! the Technical University of Vienna. It must be re-designed and !
+% ! changed before application at any other institution or for any !
+% ! other purpose. !
+% +-----------------------------------------------------------------+
+% Copyright H.Partl TU Wien 1988.
+
+% Process this file only once:
+\@ifundefined{leftmarginwidth}{}{\endinput}
+
+\typeout{ TU Wien Refman Style - Version 1.1 as of 4 Oct 1989, revised 30.08.93 }
+
+\newdimen\leftmarginwidth % value of odd & evensidemargin, set below.
+\newdimen\fullwidth % = \textwidth + \leftmarginwidth
+\newdimen\emptyheadtopmargin % used by some pagestyles
+\newdimen\emptyfoottopmargin % dto.
+
+% \longhrule and \longthickhrule are defined for \hrule's of width \fullwidth
+
+\def\longhrule{\par\hbox to \linewidth{\hss
+ \vrule width \fullwidth height 0.4pt depth 0pt}\par}
+\def\longthickhrule{\par\hbox to \linewidth{\hss
+ \vrule width \fullwidth height 1.0pt depth 0pt}\par}
+
+% Re-definitions of the \section commands to use \fullwidth and smaller
+% vertical skips and smaller fonts.
+% (Note that the afterskip must be >zero, not =zero)
+
+\def\secshape{\leftskip=-\leftmarginwidth % use \fullwidth
+ \rightskip=\@flushglue % raggedright
+ \hyphenpenalty=2000} % no hyphenation
+
+\def\section{\@startsection {section}{1}{\z@}{-2ex plus -1ex minus
+ -.2ex}{0.5ex plus .2ex}{\secshape\large\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-1.5ex plus -.5ex minus
+ -.2ex}{0.5ex plus .2ex}{\secshape\normalsize\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-1.5ex plus
+-.5ex minus -.2ex}{0.5ex plus .2ex}{\secshape\normalsize\rm}}
+\def\paragraph{\@startsection
+ {paragraph}{4}{\z@}{2ex plus 1ex minus .2ex}{-1em}{\normalsize\bf}}
+\def\subparagraph{\@startsection
+ {subparagraph}{4}{\parindent}{2ex plus 1ex minus
+ .2ex}{-1em}{\normalsize\bf}}
+
+% For ARTICLE:
+% Re-definitions of \maketitle and \part (\clearpage, \fullwidth, \hrules).
+% This \maketitle prints the \title only.
+% A \makeauthor command is defined to print the \author (to be used either
+% just after \maketitle or at the end of the article, without \thanks).
+
+\def\@redefinemaketitle{
+
+\def\maketitle{\par
+ \begingroup
+ \if@twocolumn
+ \twocolumn[\@maketitle]
+ \else \newpage
+ \global\@topnum\z@ % Prevents figures from going at top of page.
+ \@maketitle \fi\thispagestyle{plain}
+ \endgroup
+ \setcounter{footnote}{0}}
+
+\def\@maketitle{\clearpage
+ \longthickhrule\bigskip
+ {\secshape\parskip\z@\parindent\z@ \Large\bf \@title\par}
+ \bigskip\longthickhrule\bigskip}
+
+\def\makeauthor{\par\nopagebreak\vskip 2ex plus 1ex minus 1ex
+ \begin{flushright}\normalsize\sl \@author \end{flushright}\par
+ \vskip 2ex plus 1ex minus 1ex\relax }
+
+\def\and{\\*}
+\def\thanks{\footnote}
+
+% In \part, only \thepart (the Roman part number) is printed, without
+% the word `Part' in front of it, and \markboth is replaced by \@mkboth
+% to preserve the marks with the myheadings and myfootings page styles.
+
+\def\part{\par \clearpage \thispagestyle{plain}
+ \@afterindentfalse \secdef\@part\@spart}
+
+\def\@part[##1]##2{\ifnum \c@secnumdepth >\m@ne \refstepcounter{part}
+ \addcontentsline{toc}{part}{\thepart \hspace{1em}##1}\else
+ \addcontentsline{toc}{part}{##1}\fi
+ \longhrule\medskip
+ {\secshape\parskip\z@\parindent\z@ \Large\rm
+ \ifnum \c@secnumdepth >\m@ne \thepart.\quad \fi ##2\par}
+ \medskip\longhrule\bigskip \@mkboth{}{}\@afterheading }
+
+\def\@spart##1{\longhrule\medskip
+ {\secshape\parskip\z@\parindent\z@ \Large\rm ##1\par}
+ \medskip\longhrule\bigskip \@afterheading }
+
+} % end of \@redefinemaketitle
+
+% For REPORT:
+% Re-definition of \chapter (\clearpage, \fullwidth, \hrules).
+% However, \maketitle and \part remain unchanged.
+
+\def\@redefinechapter{
+
+\def\@makechapterhead##1{\longthickhrule\bigskip
+ {\secshape\parskip\z@\parindent\z@ \Large\bf
+ \ifnum \c@secnumdepth >\m@ne \@chapapp{} \thechapter.\quad \fi
+ ##1\par}
+ \bigskip\longthickhrule\bigskip}
+
+\def\@makeschapterhead##1{\longthickhrule\bigskip
+ {\secshape\parskip\z@\parindent\z@ \Large\bf ##1\par}
+ \bigskip\longthickhrule\bigskip}
+
+% No word `Chapter'/`Kapitel' before the chapter number, but the word
+% `Appendix'/`Anhang' will still be inserted after \appendix !
+\def\@chapapp{}
+
+% Note that \chapter itself is defined like this:
+% \def\chapter{\clearpage \thispagestyle{plain} \global\@topnum\z@
+% \@afterindentfalse \secdef\@chapter\@schapter}
+% This definition and those of \@chapter and \@schapter remain unchanged.
+
+} % end of \@redefinechapter
+
+% Now, do either the first one or the second one, depending on the main
+% document style (article= \chapter undefined, or report= \chapter defined).
+% (Note that \par must not appear inside \@ifundefined, therefore this
+% indirect approach is taken.)
+
+\@ifundefined{chapter}{\@redefinemaketitle}{\@redefinechapter}
+
+% Re-defintion of the \marginpar command to use always the left margin
+% (never the right margin). Be careful that Marginpars do not come to
+% near to each other!
+
+\def\@addmarginpar{\@next\@marbox\@currlist{\@cons\@freelist\@marbox
+ \@cons\@freelist\@currbox}\@latexbug\@tempcnta\@ne
+%- \if@twocolumn
+%- \if@firstcolumn \@tempcnta\m@ne \fi
+%- \else
+%- \if@mparswitch
+%- \ifodd\c@page \else\@tempcnta\m@ne \fi
+%- \fi
+%- \if@reversemargin \@tempcnta -\@tempcnta \fi
+%- \fi
+ \@tempcnta\m@ne % always to left margin <---
+ \ifnum\@tempcnta <\z@ \global\setbox\@marbox\box\@currbox \fi
+ \@tempdima\@mparbottom \advance\@tempdima -\@pageht
+ \advance\@tempdima\ht\@marbox \ifdim\@tempdima >\z@
+ \@warning{Marginpar on page \thepage\space moved}\else\@tempdima\z@ \fi
+ \global\@mparbottom\@pageht \global\advance\@mparbottom\@tempdima
+ \global\advance\@mparbottom\dp\@marbox
+ \global\advance\@mparbottom\marginparpush
+ \advance\@tempdima -\ht\@marbox
+ \global\ht\@marbox\z@ \global\dp\@marbox\z@
+ \vskip -\@pagedp \vskip\@tempdima\nointerlineskip
+ \hbox to\columnwidth
+ {\ifnum \@tempcnta >\z@
+ \hskip\columnwidth \hskip\marginparsep
+ \else \hskip -\marginparsep \hskip -\marginparwidth \fi
+ \box\@marbox \hss}
+ \vskip -\@tempdima
+ \nointerlineskip
+ \hbox{\vrule \@height\z@ \@width\z@ \@depth\@pagedp}}
+
+% Special Marginpars:
+% \marginlabel{X} puts X into a flushright Marginpar.
+% To be used like description-items or short
+% \subsubsection* headings.
+% \attention puts ! --> to the left of the text.
+% To mark an important piece of text.
+% \seealso{X} puts a small ---> X to the very left.
+% To mark a reference within the text.
+% These three commands start with an empty \mbox, i.e. they can be used
+% before the first word of a paragraph and still have the desired
+% effect, namely that the marginal stuff appears next to the first
+% line of this paragraph, not at the last line of the previous one.
+% They end with \ignorespaces, i.e. blanks (spaces) after the argument's
+% } are allowed and do NOT appear in the printed text.
+% Like all \marginpar's, they cannot be used in math mode or inside boxes.
+
+\def\marginlabel#1{\mbox{}\marginpar{\raggedleft #1}\ignorespaces}
+\def\attention{\mbox{}\marginpar{\raggedleft \large\bf ! $\rightarrow$}}
+\def\seealso#1{\mbox{}\marginpar{\small $\rightarrow$ #1}\ignorespaces}
+
+% The description environment is redefined such that the item labels use
+% the whole left margin (and are in roman, right bound, with colon).
+% \labelwidth = \leftmarginwidth + previous\@totalleftmargin +
+% + new\leftmargin - \labelsep
+% \descriptioncolontrue and -false can be used to select whether a colon
+% is added to the item label.
+% \descriptionlefttrue and -false can be used to select whether the item labels
+% are set left bound or right bound.
+
+\newif\ifdescriptioncolon \descriptioncolontrue
+\newif\ifdescriptionleft \descriptionleftfalse
+\def\descriptionlabel#1{\ifdescriptionleft\else \hfil \fi
+ \rm #1\ifdescriptioncolon :\fi
+ \ifdescriptionleft \hfil \fi}
+\def\description{\list{}{\labelsep=\marginparsep
+ \labelwidth=\leftmarginwidth \advance\labelwidth by \@totalleftmargin
+ \advance\labelwidth by \leftmargin \advance\labelwidth by -\labelsep
+ \let\makelabel=\descriptionlabel}}
+\let\enddescription=\endlist
+
+% The maxipage environment is a minipage that uses the \fullwidth,
+% with \hrules above and below. Marginpars are not allowed.
+% To be used for wide tables, long math equations, and the like.
+% It cannot be split across pages.
+% It can be used in floats, e.g. like
+% \begin{table}\begin{maxipage}
+% ... a wide table ... \caption{the caption}
+% \end{maxipage}\end{table}
+% \maxipageruletrue and -false can be used to select whether \hrule's are
+% added to the minpage.
+
+\newif\ifmaxipagerule \maxipageruletrue
+\def\maxipage{\par % (here a \vskip\parskip will happen by the final \par)
+ \mbox{}\kern-\leftmarginwidth \kern-\@totalleftmargin
+ \begin{minipage}{\fullwidth}
+ \medskip \ifmaxipagerule \hrule\medskip \fi
+ \parskip = 0.5\baselineskip % <--- same as outside minipage
+ \def\marginpar{\typeout{Marginpar not allowed within Maxipage.}}}
+\def\endmaxipage{\par \vskip\parskip
+ \medskip \ifmaxipagerule \hrule\medskip \fi
+ \end{minipage}\par}
+
+% The fullpage environment changes the page layout such that normal text
+% and all environments use the \fullwidth. Marginpars are not allowed.
+% Both \begin{fullpage} and \end{fullpage} start a new page before switching
+% to the other layout.
+% To be used for one or several special pages where the full line length is
+% needed.
+
+\def\fullpage{\clearpage \leftmarginwidth\z@ \textwidth=\fullwidth
+ \oddsidemargin=\z@ \evensidemargin\z@
+ \hsize=\fullwidth \linewidth=\fullwidth \columnwidth=\fullwidth
+ \def\marginpar{\typeout{Marginpar not allowed within Fullpage.}}}
+\def\endfullpage{\clearpage}
+
+% The example environment is a verse enironment with \tt font and with
+% trying to avoid page breaks at the \begin{example}. Lines in the example
+% should be separated by \\*.
+
+\def\example{\@beginparpenalty=\@highpenalty \verse \tt }
+\let\endexample=\endverse
+
+% Page Styles:
+% The pagestyles plain, headings and myheadings are redefined and new
+% pagestyles footings and myfootings are defined, which all use the
+% \fullwidth, with \thepage on the outer side of the (odd/even) page
+% and some with a \hrule below the head line or above the foot line.
+% My favourite is
+% \pagestyle{myfootings}
+% \markboth{the title of the paper}{the title of the paper}
+% (Note that the \markboth is not destroyed by the new \part command.)
+
+% The pagestyles headings and myheadings set \topmargin to \emptyfoottopmargin.
+% The pagestyles footings and myfootings set \topmargin to \emptyheadtopmargin.
+% The pagestyles empty and plain do not change \topmargin.
+% Therefore, within one document,
+% - you may switch between headings, myheadings, empty, and plain,
+% - or you may switch between footings, myfootings, empty, and plain,
+% - but you should not mix (my)headings with (my)footings pages.
+
+% As a compromise between article (section+subsection) and report
+% (chapter+section), \sectionmark (without uppercase) will be put on
+% both side pages in the headings and footings style (neither chapter
+% nor subsection).
+
+\def\ps@plain{\let\@mkboth\@gobbletwo
+ \def\@oddhead{}\def\@evenhead{}%
+ \def\@oddfoot{\rm\hfil\thepage}%
+ \def\@evenfoot{\hss \hbox to \fullwidth{\normalsize\rm\thepage\hfil}}}
+
+\if@twoside % If two-sided printing.
+\def\ps@headings{\let\@mkboth\markboth \topmargin\emptyfoottopmargin
+\def\@oddfoot{}\def\@evenfoot{}% No feet.
+\def\@evenhead{\hss\vbox to 0pt{\vss \hsize=\fullwidth
+ \hbox to \fullwidth{\normalsize\rm\thepage \hfil
+ \small\sl \leftmark}%
+ \vskip 3pt \hrule}}%
+\def\@oddhead{\hss\vbox to 0pt{\vss \hsize=\fullwidth
+ \hbox to \fullwidth{\small\sl \rightmark \hfil
+ \normalsize\rm\thepage}%
+ \vskip 3pt \hrule}}%
+\def\sectionmark##1{\markboth
+ {{\ifnum \c@secnumdepth >\z@ \thesection\hskip 1em\relax \fi ##1}}%
+ {{\ifnum \c@secnumdepth >\z@ \thesection\hskip 1em\relax \fi ##1}}}%
+\def\subsectionmark##1{}}
+\else % If one-sided printing.
+\def\ps@headings{\let\@mkboth\markboth \topmargin\emptyfoottopmargin
+\def\@oddfoot{}\def\@evenfoot{}% No feet.
+\def\@oddhead{\hss\vbox to 0pt{\vss \hsize=\fullwidth
+ \hbox to \fullwidth{\small\sl \rightmark \hfil
+ \normalsize\rm\thepage}%
+ \vskip 3pt \hrule}}%
+\def\sectionmark##1{\markright {{\ifnum \c@secnumdepth >\z@
+ \thesection\hskip 1em\relax \fi ##1}}}}
+\fi
+
+\if@twoside % If two-sided printing.
+\def\ps@footings{\let\@mkboth\markboth \topmargin\emptyheadtopmargin
+\def\@oddhead{}\def\@evenhead{}% No heads.
+\def\@evenfoot{\hss\vbox to 0pt{\vss \hsize=\fullwidth \hrule \vskip 3pt
+ \hbox to \fullwidth{\normalsize\rm\thepage \hfil
+ \small\sl\leftmark}}}%
+\def\@oddfoot{\hss\vbox to 0pt{\vss \hsize=\fullwidth \hrule \vskip 3pt
+ \hbox to \fullwidth{\small\sl\rightmark \hfil
+ \normalsize\rm\thepage}}}%
+\def\sectionmark##1{\markboth
+ {{\ifnum \c@secnumdepth >\z@ \thesection\hskip 1em\relax \fi ##1}}%
+ {{\ifnum \c@secnumdepth >\z@ \thesection\hskip 1em\relax \fi ##1}}}%
+\def\subsectionmark##1{}}
+\else % If one-sided printing.
+\def\ps@footings{\let\@mkboth\markboth \topmargin\emptyheadtopmargin
+\def\@oddhead{}\def\@evenhead{}% No heads.
+\def\@oddfoot{\hss\vbox to 0pt{\vss \hsize=\fullwidth \hrule \vskip 3pt
+ \hbox to \fullwidth{\small\sl\rightmark \hfil
+ \normalsize\rm\thepage}}}%
+\def\sectionmark##1{\markright {{\ifnum \c@secnumdepth >\z@
+ \thesection\hskip 1em\relax \fi ##1}}}}
+\fi
+
+\def\ps@myheadings{\let\@mkboth\@gobbletwo \topmargin\emptyfoottopmargin
+\def\@evenhead{\hss\vbox to 0pt{\vss \hsize=\fullwidth
+ \hbox to \fullwidth{\normalsize\rm\thepage \hfil
+ \small\sl\leftmark}%
+ \vskip 3pt \hrule}}%
+\def\@oddhead{\hss\vbox to 0pt{\vss \hsize=\fullwidth
+ \hbox to \fullwidth{\small\sl\rightmark \hfil
+ \normalsize\rm\thepage}%
+ \vskip 3pt \hrule}}%
+\def\@oddfoot{}\def\@evenfoot{}\def\sectionmark##1{}\def\subsectionmark##1{}}
+
+\def\ps@myfootings{\let\@mkboth\@gobbletwo \topmargin\emptyheadtopmargin
+\def\@evenfoot{\hss\vbox to 0pt{\vss \hsize=\fullwidth \hrule \vskip 3pt
+ \hbox to \fullwidth{\normalsize\rm\thepage \hfil
+ \small\sl\leftmark}}}%
+\def\@oddfoot{\hss\vbox to 0pt{\vss \hsize=\fullwidth \hrule \vskip 3pt
+ \hbox to \fullwidth{\small\sl\rightmark \hfil
+ \normalsize\rm\thepage}}}%
+\def\@oddhead{}\def\@evenhead{}\def\sectionmark##1{}\def\subsectionmark##1{}}
+
+% The \condbreak{length} command is defined for conditional pagebreaks:
+% If less then length vertical space remains on the current page, then
+% a new page is started. This means that the following stuff remains
+% together (either on the current or the next page).
+
+\def\condbreak#1{\vskip 0pt plus #1\pagebreak[3]\vskip 0pt plus -#1\relax}
+
+% The \noparskip command is defined to take away the vertical Parskip,
+% just like \noindent takes away the horizontal Parindent.
+
+\def\noparskip{\vskip-\parskip}
+
+% Correction of a LaTeX bug that occurs when marginpars and footnotes
+% appear on the same page (by Chris Rowley, TUGboat 9/2 Aug.88)
+%
+% no longer needed. 30.08.93 kaspar@uni-muenster.de
+
+%\def\@specialoutput{\ifnum\outputpenalty > -\@Mii
+% \@doclearpage
+% \else
+% \ifnum \outputpenalty <-\@Miii
+% \ifnum\outputpenalty<-\@MM \deadcycles\z@\fi
+% \global\setbox\@holdpg\vbox{\unvbox\@cclv}
+% \else \setbox\@tempboxa\box\@cclv
+% \@pagedp\dp\@holdpg \@pageht\ht\@holdpg
+% \unvbox\@holdpg
+%%- \ifvoid\footins\else\advance\@pageht\ht\footins
+%%- \advance\@pageht\skip\footins \advance\@pagedp\dp\footins
+%%- \insert\footins{\unvbox\footins}\fi
+% \@next\@currbox\@currlist{\ifnum\count\@currbox >\z@
+%% moved --->
+% \ifvoid\footins\else\advance\@pageht\ht\footins
+% \advance\@pageht\skip\footins \advance\@pagedp\dp\footins
+% \insert\footins{\unvbox\footins}\fi
+% \@addtocurcol\else
+%% moved and changed --->
+% \ifvoid\footins\else
+% \insert\footins{\unvbox\footins}\fi
+% \@addmarginpar\fi}\@latexbug
+% \ifnum \outputpenalty <\z@ \penalty \z@ \fi
+% \fi\fi}
+
+
+% Setting of the Layout Parameters and Dimensions:
+% ------------------------------------------------
+
+% Switch to \onecolumn and disable \twocolumn.
+\onecolumn
+\let\onecolumn=\relax
+\def\twocolumn{\typeout{Twocolumn not allowed with Refman.}}
+
+% Horizontal Layout:
+% \fullwidth = \leftmarginwidth + \textwidth
+% \odd&evensidemargin = \leftmarginwidth - 3mm
+% (DIN-A4 paper is about 6mm narrower than 8.5 Inch.)
+% \marginparwidth = \leftmarginwidth - \marginparsep
+
+% \textwidth, \columnwidth, \linewidth remain unchanged from art10...rep12
+\fullwidth=6.5in
+\leftmarginwidth=\fullwidth \advance\leftmarginwidth by -\textwidth
+\oddsidemargin=\leftmarginwidth \advance\oddsidemargin by -3mm
+\evensidemargin=\oddsidemargin
+\marginparwidth=\leftmarginwidth \advance\marginparwidth by -\marginparsep
+
+% The horizontal layout can be changed in the preamble with the command
+% \setleftmarginwidth{length}
+% This sets \leftmarginwidth=length and \textwidth=\fullwidth-<length> .
+% Example: \setleftmarginwidth{2.5in} ---> 2.5 : 4 = 4 : 6.5
+
+\newdimen\templength@
+\def\setleftmarginwidth#1{\templength@=#1\relax
+ \leftmarginwidth=\templength@
+ \textwidth=\fullwidth \advance\textwidth by -\templength@
+ \oddsidemargin=\leftmarginwidth \advance\oddsidemargin by -3mm
+ \evensidemargin=\oddsidemargin
+ \marginparwidth=\leftmarginwidth \advance\marginparwidth by -\marginparsep
+ \hsize=\textwidth \linewidth=\textwidth \columnwidth=\textwidth }
+
+% Vertical Layout (for DIN-A4 paper):
+% The Top Margin is made smaller by 4.5 baselineskips,
+% the Head and Foot separations are increased by 0.5 baselineskips each,
+% the Textheight is increased by 10 lines.
+% On DIN-A4 paper (which is about 2 lines higher than 11 Inch), this
+% makes the Bootom Margin equal to the Top Margin.
+% \raggedbottom is switched on (even for twoside).
+% With some pagestyles, the page contents are shifted up or down a bit,
+% by using \emptyheadtopmargin or \emptyfoottopmargin, respectively.
+
+\advance\topmargin by -4.5\baselineskip
+\advance\headsep by 0.5\baselineskip
+\advance\footskip by 0.5\baselineskip
+\advance\textheight by 10\baselineskip
+\@colht=\textheight \@colroom=\textheight
+\emptyheadtopmargin=\topmargin \advance\emptyheadtopmargin by -1\baselineskip
+\emptyfoottopmargin=\topmargin \advance\emptyfoottopmargin by 1\baselineskip
+\raggedbottom
+
+% Zero minimal vertical separation between Marginpars (because we use a lot
+% of them, and all must find room above each other).
+
+\marginparpush=\z@
+
+% Paragraph Layout:
+% Zero Parindent and non-zero Parskip. The stretchable glue in \parskip
+% helps LaTeX in finding the best place for page breaks.
+
+\parskip=0.5\baselineskip \advance\parskip by 0pt plus 2pt
+\parindent=\z@
+
+% Redefinition of the vertical spacing in the list environments
+% to use the same as \parskip in all relevant places (normalsize only):
+% \parsep = \parskip
+% \itemsep = \z@ % add nothing to \parskip between items
+% \topsep = \z@ % add nothing to \parskip before first item
+
+\def\@listI{\leftmargin\leftmargini
+ \topsep\z@ \parsep\parskip \itemsep\z@}
+\let\@listi\@listI
+\@listi
+
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep\z@ \parsep\parskip \itemsep\z@}
+
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep\z@ \parsep\parskip \itemsep\z@}
+
+% Note that listiv, listv and listvi don't change vertical parameters.
+
+
+% Switch on the new version of the plain pagestyle.
+\pagestyle{plain}
+
+% This is the end of REFMAN.STY.
+\endinput
diff --git a/obsolete/macros/latex209/contrib/misc/shadethm.sty b/obsolete/macros/latex209/contrib/misc/shadethm.sty
new file mode 100644
index 0000000000..a974cb7e21
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/misc/shadethm.sty
@@ -0,0 +1,187 @@
+\typeout{ LaTeX 2.09 substyle: ShadeThm <94/07/11 jh>}
+% ShadeThm.sty
+% Shaded theorem environments in LaTeX 2.09 with \newshadetheorem instead of
+% \newtheorem. Requires PostScript.
+%
+% USAGE
+% Used as a LaTeX substyle
+% \documentstyle[...,shadethm,...]{...}
+% it allows declarations like
+% \newshadetheorem{theorem}{Theorem}
+% so that
+% \begin{theorem} $e=mc^2$ \end{theorem}
+% will produce the usual theorem text, only placed in a shaded box.
+%
+% REMARKS
+% (1) You can of course have non-shaded environments, also. The
+% \newtheorem command still works (but see Remark (2)).
+% (2) Numbering within:
+% LaTeX allows you to say \newtheorem{guess}{Conjecture}[section] so
+% that at each new section the conjectures are numbered starting again
+% at 1. So does \newshadetheorem.
+% LaTeX also allows you to say \newtheorem{remark}[guess]{Remark} so
+% that remark and guess use the same counter:
+% \begin{guess}
+% Dinosaurs are small at one end, large in the middle,
+% and very small again at the other end.
+% \end{guess}
+% \begin{remark}
+% This conjecture is due to me.
+% \end{remark}
+% gets printed as
+% Conjecture 1 Dinosaurs are small at one end, large in the middle, and
+% very small again at the other end.
+% Remark 2 This conjecture is due to me.
+% The \newshadetheorem allows the same thing, but with one change. If you want
+% to refer to a theorem environment `xxx' that was declared with
+% \newshadetheorem{xxx}{Xxx} then you must call it `shadexxx': e.g.,
+% \newshadetheorem{thm}{Theorem}
+% \newshadetheorem{note}[shadethm]{Note}
+% (references to non-shaded theorem environments, of course, go as usual).
+% (3) Uses fancybox.sty and pstricks.sty. They are available, for instance,
+% in the TeX-archive at pip.shsu.edu. In particular, they require PostScript
+% for the shade. If you want to figure out a way to, for example, use PiCTeX
+% to shade, then that could work also. (I use dvips; PSTricks may work with
+% other PS drivers but it definitely works with dvips.)
+%
+% INSTALLATION
+% Put this where your TeX looks for .sty files. In emTeX that is probably
+% c:\emtex\texinput\shadethm.sty.
+% There are three parameters to set the default for (try it as it is, first).
+% (i) thmshade the darkness of the shading
+% (ii) shadeparindent the paragraph indentation inside the shaded text
+% (iii) frameboxsep the length by which the shade box surrounds the text
+% Find them by using your editor to find `PARAMETER'.
+% If you want this file to input fancybox and pstricks (that is, you don't
+% want to ask for them yourself) uncomment those lines.
+%
+% BUGS
+% 1) Page breaks are a problem since it sets the theorem before it shades it.
+% 2) I haven't tested it with the new LaTeX.
+%
+% HISTORY
+% 94VII11 jim hefferon hefferon@smcvax.smcvt.edu. First written (after lots
+% of sporadic tries, over months; I couldn't get any of the extant shading
+% macros to work with theorems) from a hint in TvZ's Fancybox writeup.
+% It's all so easy once you know how.
+%
+%\input{fancybox.sty}
+%\input{pstricks.sty}
+
+% PARAMETER: thmshade
+% Set the default darkness for the shading.
+% I find .97 looks good out of my printer, but a darker shade like .92 is
+% needed to make it copy well. (PostScript sets 0 as black and 1 as white.)
+% This can be reset in each document, say with \newgray{thmshade}{.92}
+% (or with \newrgbcolor{thmshade}{num1 num2 num3} for color, I think).
+\newgray{thmshade}{.97}
+
+% PARAMETER: saveparindent
+% Normally, in theorems, paragraphs retain their usual indent. But inside
+% a minipage they lose their indent, so I need to restore it once I'm inside
+% the minipage that is to be shaded. This can be changed inside of each
+% document, say with \resetlength{\saveparindent}{0pt}.
+\newlength{\saveparindent} %to have paragraphs default to their
+\setlength{\saveparindent}{\parindent} %usual indent inside the minipage
+
+% PARAMETER: frameboxsep
+% I think the shading looks best if the text doesn't run all the way to the
+% exact edge of the gray. That is, I like the gray to overlap outside the text
+% box a little. That amount is this number. This can be changed inside of
+% each document, say with \resetlength{\frameboxsep}{.2ex}.
+\newlength{\frameboxsep} % user can change in a .sty file or on
+\setlength{\frameboxsep}{2pt} % a per-document basis.
+
+\newbox{\shadesavebox} % no `@'; users can redefine shadebox if they want
+\newenvironment{shadebox}% % shadow boxes or something.
+{\beginsbox{\shadesavebox}\begin{minipage}{\textwidth}%
+\setlength{\parindent}{\saveparindent}}%
+{\end{minipage}\endsbox%
+{\begin{trivlist}\item[]%
+\psframebox*[fillcolor=thmshade,boxsep=false,framesep=\frameboxsep]{%
+\usebox{\shadesavebox}}%
+\end{trivlist}}}
+
+% The definition of \newshadetheorem is modelled on the one for \newtheorem
+% in latex.tex.
+% The invocation possibilities are:
+% \newshadetheorem{NAME}{TEXT}[COUNTER]
+% e.g., \newshadetheorem{theorem}{Theorem}[section] meaning to allow
+% one to say \begin{theorem} $e=mc^2$ \end{theorem} to produce
+% Theorem 1.1.1 e=mc2
+% shaded and numbered by section.
+% \newshadetheorem{NAME}[OLDNAME]{TEXT}
+% e.g., \newshadetheorem{remark}[theorem]{Remark} meaning to allow
+% one to say \begin{remark} Obvious. \end{remark} to produce
+% Remark 1.1.2 Obvious.
+% shaded and numbered with the same counter used for theorems.
+% The flowchart for parsing the arguments goes like this.
+% 1) \newshadetheorem{#1} (note #1<--NAME)
+% 2) If the next character is `[' then we have the second case. This
+% is handled by \shade@othm
+% 3) If not, go to \shade@nthm. There are two cases here, either there
+% is an optional argument (this is handled by \shade@xnthm) or there is
+% not (this is handled by \shade@ynthm).
+% (Possibly these cases could be folded somewhat as all use the same tail.)
+% Notice I have to have different names for the theorem and the environment.
+% I elected to call the theorem `xxx' by the name `shadexxx' so the user
+% just says `\begin{xxx} ...' for the environment. (All this is, of course,
+% just adapted from Lamport's code.)
+%
+\def\newshadetheorem#1{\@ifnextchar[{\shade@othm{#1}}{\shade@nthm{#1}}}
+
+\def\shade@othm#1[#2]#3{%
+\newtheorem{shade#1}[#2]{#3}%
+\newenvironment{#1}%
+{\begin{shadebox}\begin{shade#1}}%
+{\end{shade#1}\end{shadebox}}}
+
+\def\shade@nthm#1#2{\@ifnextchar[{\shade@xnthm{#1}{#2}}{\shade@ynthm{#1}{#2}}}
+
+\def\shade@xnthm#1#2[#3]{%
+\newtheorem{shade#1}{#2}[#3]%
+\newenvironment{#1}%
+{\begin{shadebox}\begin{shade#1}}%
+{\end{shade#1}\end{shadebox}}}
+
+\def\shade@ynthm#1#2{%
+\newtheorem{shade#1}{#2}%
+\newenvironment{#1}%
+{\begin{shadebox}\begin{shade#1}}%
+{\end{shade#1}\end{shadebox}}}
+
+\endinput %end shadethm.sty
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-test.tex-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+\documentstyle[fancybox,pstricks,shadethm]{article}
+
+\newshadetheorem{theorem}{Theorem}
+\newshadetheorem{cor}[shadetheorem]{Corollary}
+\newtheorem{remark}[shadetheorem]{Remark}
+
+\begin{document}
+Here is some initial text before the shaded box.
+
+\begin{theorem}
+This is the text to be shaded.
+\end{theorem}
+
+This is some text after the first shade.
+It is separated from the environments by a blank line; that is
+all handled as usual in \LaTeX.
+
+\begin{cor}
+This is more text to be shaded.
+It is numbered with the same counter as the environment above.
+
+Multiple paragraphs will be handled with the usual paragraph indentation,
+unless of course the user asks for a different paragraph indentation inside
+the environment.
+\end{cor}
+
+\begin{remark}
+More text.
+This time not set in shade, however it is numbered in the same sequence.
+\end{remark}
+
+Finishing text.
+\end{document}
diff --git a/obsolete/macros/latex209/contrib/misc/shadow.sty b/obsolete/macros/latex209/contrib/misc/shadow.sty
new file mode 100644
index 0000000000..4c4d5e76a6
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/misc/shadow.sty
@@ -0,0 +1,84 @@
+%%% ======================================================================
+%%% @LaTeX-style-file{
+%%% filename = "shadow.sty",
+%%% version = "1.2.1",
+%%% date = "16 September 1996",
+%%% time = "16:26:21.52 MET",
+%%% author = "Mauro Orlandini",
+%%% address = "TeSRE Institute/CNR
+%%% Area della Ricerca di Bologna
+%%% Via Gobetti 101
+%%% 40129 Bologna - Italy",
+%%% Email = "orlandini@tesre.bo.cnr.it (Internet)
+%%% 38045::ORLANDINI (DECnet)",
+%%% telephone = "+39 51 639-8667",
+%%% FAX = "+39 51 639-8723",
+%%% supported = "yes",
+%%% archived = "TeX archive",
+%%% keywords = "shadow",
+%%% abstract = "The command \shabox has the same meaning of the
+%%% LaTeX command \fbox except for the fact that a
+%%% "shadow" is added to the bottom and the right side
+%%% of the box. It computes the right dimension of the
+%%% box, even if the text spans over more than one
+%%% line; in this case a warning messagge is given.",
+%%% codetable = "ISO/ASCII",
+%%% checksum = "15806 84 430 4506",
+%%% docstring = "There are three parameters governing:
+%%% 1. the width of the lines delimiting the box:
+%%% \sboxrule
+%%% 2. the separation between the edge of the box and
+%%% its contents: \sboxsep
+%%% 3. the dimension of the shadow: \sdim
+%%% Sintax: \shabox{<text>}
+%%% where <text> is the text to be put in the
+%%% framed box. It can be an entire paragraph.
+%%% Adapted from the file dropshadow.tex by
+%%% drstrip@cd.sandia.gov.
+%%% V1.1 Works in a double column environment.
+%%% V1.2 When there is an online shadow box, it
+%%% will be centered on the line (in V1.1 the
+%%% box was aligned with the baseline).
+%%% (Courtesy by Mike Piff)
+%%% V1.2.1 Dropped of unwanted CRs by Ralf Nitsch
+%%%
+%%% The checksum field above contains a CRC-16
+%%% checksum as the first value, followed by the
+%%% equivalent of the standard UNIX wc (word
+%%% count) utility output of lines, words, and
+%%% characters. This is produced by Robert
+%%% Solovay's checksum utility."
+%%% }
+%%% ======================================================================
+\typeout{Style Option: `shadow' v1.2.1 <16 September 1996> (M.O.)}
+\newdimen\txtwdth \newdimen\sht \newdimen\shw \newbox\shbox
+\newdimen\sboxsep \newdimen\sboxrule \newdimen\sdim
+\sboxsep = 10pt
+\sdim = 4pt
+\sboxrule = .4pt
+\def\shabox#1{\setbox\@tempboxa\hbox{#1}% <-- V1.2.1 Added by R. Nitsch
+\shw\wd\@tempboxa
+\if@twocolumn\txtwdth\columnwidth\else\txtwdth\textwidth\fi
+\ifdim\shw<\txtwdth
+ \leavevmode\setbox\@tempboxa\hbox{#1}% <-- V1.2.1 Added by R. Nitsch
+\else
+ \typeout{Shadow Warning: Box dimension greater than textwidth.}
+ \setbox\@tempboxa\vbox{\hsize\txtwdth\advance\hsize-2\sboxsep
+ \advance\hsize-2\sboxrule \advance\hsize-2\sdim \advance\hsize-15pt#1}
+\fi
+ \setbox\shbox\hbox{\@tempdima\sboxrule
+ \advance\@tempdima \sboxsep \advance\@tempdima \dp\@tempboxa
+ \hbox{\lower \@tempdima\hbox
+ {\vbox{\hrule \@height \sboxrule
+ \hbox{\vrule \@width \sboxrule \hskip\sboxsep
+ \vbox{\vskip\sboxsep \box\@tempboxa\vskip\sboxsep}\hskip
+ \sboxsep\vrule \@width \sboxrule}
+ \hrule \@height \sboxrule}}}}% <-- V1.2.1 Added by R. Nitsch
+\sht\ht\shbox \advance\sht-\sdim
+\leavevmode\vbox{\baselineskip0pt\lineskip0pt\vtop{%% V1.2
+ %% Added \vtop
+ %% From M.Piff
+ \hbox{\copy\shbox\vrule width\sdim height\sht}
+ \hbox{\kern\sdim\vrule height\sdim width \wd\shbox}}}}
+
+\endinput
diff --git a/obsolete/macros/latex209/contrib/misc/showlabels.sty b/obsolete/macros/latex209/contrib/misc/showlabels.sty
new file mode 100644
index 0000000000..47d445c670
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/misc/showlabels.sty
@@ -0,0 +1,28 @@
+% showlabels.sty
+% gil@svax.cs.cornell.edu (Gil Neiger)
+%
+% Change \label, \ref, and \pageref to show labels in line
+%
+
+\def\ref#1{\@ifundefined{r@#1}{\mbox{\tt#1?}\@warning
+ {Reference `#1' on page \thepage \space
+ undefined}}{\edef\@tempa{\@nameuse{r@#1}}\expandafter
+ \@car\@tempa \@nil\null}}
+
+\def\pageref#1{\@ifundefined{r@#1}{\mbox{\tt#1?}\@warning
+ {Reference `#1' on page \thepage \space
+ undefined}}{\edef\@tempa{\@nameuse{r@#1}}\expandafter
+ \@cdr\@tempa\@nil\null}}
+
+\def\label#1{\@bsphack\if@filesw {\let\thepage\relax
+ \xdef\@gtempa{\write\@auxout{\string
+ \newlabel{#1}{{\@currentlabel}{\thepage}}}}}\@gtempa
+ \if@nobreak \ifvmode\nobreak\fi\fi\fi\@esphack
+ \mbox{\tt[#1]}}
+
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+ \def\@citea{}\@cite{\@for\@citeb:=#2\do
+ {\@citea\def\@citea{,}\@ifundefined
+ {b@\@citeb}{\mbox{\tt\@citeb?}\@warning
+ {Citation `\@citeb' on page \thepage \space undefined}}%
+\hbox{\csname b@\@citeb\endcsname}}}{#1}}
diff --git a/obsolete/macros/latex209/contrib/misc/spie.sty b/obsolete/macros/latex209/contrib/misc/spie.sty
new file mode 100644
index 0000000000..d8c965cea3
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/misc/spie.sty
@@ -0,0 +1,126 @@
+\typeout{Document Style Option `spie proceedings style'.}
+%
+% Prepared by Rick Zaccone <zaccone@bucknell.edu> on 6/3/91.
+% Modified by Adrian F Clark <alien@uk.ac.essex> on 11-Jan-1992.
+%
+% Usage:
+% \documentstyle[spie]{article}
+%
+% The user needs to make a few adjustments manually:
+%
+% 1. Section titles should be in upper case.
+% 2. Title, subsection, subsubsection, etc. should be in lower case except
+% for the first letter.
+% 3. Format authors as follows
+% \author{author1 \\[12pt]
+% affiliation\\
+% affiliation\\[12pt]
+% author2 \\[12pt]
+% affiliation\\
+% affiliation\\[12pt]}
+%
+% 4. No date: use \date{}
+% --------------------------------------------------------------------
+
+% No headers or footers
+
+\oddsidemargin -.15in \evensidemargin -.15in \topmargin .1in
+\headheight 0in \headsep 0in
+\footheight 0in \footskip 0in
+\pagestyle{empty} % No page numbers
+
+
+% Page parameters
+
+\parskip 12pt
+\textheight 8.8in \textwidth 6.8in
+\floatsep 6pt plus 2pt minus 4pt \textfloatsep 30pt plus 20pt minus 10pt
+
+
+% Center section headings and make them produce indexted next lines (ugh)
+
+\def\section{\@startsection {section}{1}{\z@}{3.5ex plus -1ex minus
+ -.2ex}{2.3ex plus .2ex}{\centering\Large\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{3.25ex plus -1ex minus
+ -.2ex}{1.5ex plus .2ex}{\large\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{3.25ex plus
+-1ex minus -.2ex}{1.5ex plus .2ex}{\normalsize\bf}}
+
+
+% Add theorem, lemma, and definition environments
+
+\def\@begintheorem#1#2{\par\bgroup{\sc #1\ #2. }\it\ignorespaces}
+\def\@opargbegintheorem#1#2#3{\par\bgroup{\sc #1\ #2\ (#3). }\it\ignorespaces}
+\def\@endtheorem{\egroup}
+\def\proof{\par{\it Proof}. \ignorespaces}
+\def\endproof{{\ \vbox{\hrule\hbox{%
+ \vrule height1.3ex\hskip0.8ex\vrule}\hrule
+ }}\par}
+\newtheorem{theorem}{Theorem}[section]
+\newtheorem{lemma}[theorem]{Lemma}
+\newtheorem{definition}[theorem]{Definition}
+
+
+% The abstract
+
+\def\abstract{
+\section*{ABSTRACT}
+}
+\def\endabstract{}
+
+% Citations are superscripts (taken from aip.sty)
+
+% Superscript citations -- skip optional arg to \cite
+% Move citation after period and comma.
+
+\def\@cite#1#2{\unskip\nobreak\relax
+ \def\@tempa{$\m@th^{\hbox{\the\scriptfont0 #1}}$}%
+ \futurelet\@tempc\@citexx}
+\def\@citexx{\ifx.\@tempc\let\@tempd=\@citepunct\else
+ \ifx,\@tempc\let\@tempd=\@citepunct\else
+ \let\@tempd=\@tempa\fi\fi\@tempd}
+\def\@citepunct{\@tempc\edef\@sf{\spacefactor=\the\spacefactor\relax}\@tempa
+ \@sf\@gobble}
+
+% \citenum emits the plain citation number without ornament
+% \citea puts its argument into the ornamentation for citations
+% thus \cite{foo} is equivalent to \citea{\citenum{foo}}
+
+\def\citenum#1{{\def\@cite##1##2{##1}\cite{#1}}}
+\def\citea#1{\@cite{#1}{}}
+
+% Collapse citation numbers to ranges. Non-numeric and undefined labels
+% are handled. No sorting is done. E.g., 1,3,2,3,4,5,foo,1,2,3,?,4,5
+% gives 1,3,2-5,foo,1-3,?,4,5
+
+\newcount\@tempcntc
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+ \@tempcnta\z@\@tempcntb\m@ne\def\@citea{}\@cite{\@for\@citeb:=#2\do
+ {\@ifundefined
+ {b@\@citeb}{\@citeo\@tempcntb\m@ne\@citea\def\@citea{,}{\bf ?}\@warning
+ {Citation `\@citeb' on page \thepage \space undefined}}%
+ {\setbox\z@\hbox{\global\@tempcntc0\csname b@\@citeb\endcsname\relax}%
+ \ifnum\@tempcntc=\z@ \@citeo\@tempcntb\m@ne
+ \@citea\def\@citea{,}\hbox{\csname b@\@citeb\endcsname}%
+ \else
+ \advance\@tempcntb\@ne
+ \ifnum\@tempcntb=\@tempcntc
+ \else\advance\@tempcntb\m@ne\@citeo
+ \@tempcnta\@tempcntc\@tempcntb\@tempcntc\fi\fi}}\@citeo}{#1}}
+\def\@citeo{\ifnum\@tempcnta>\@tempcntb\else\@citea\def\@citea{,}%
+ \ifnum\@tempcnta=\@tempcntb\the\@tempcnta\else
+ {\advance\@tempcnta\@ne\ifnum\@tempcnta=\@tempcntb \else \def\@citea{--}\fi
+ \advance\@tempcnta\m@ne\the\@tempcnta\@citea\the\@tempcntb}\fi\fi}
+
+
+% Give the references section a section number
+
+\def\thebibliography#1{\section{REFERENCES\@mkboth
+ {REFERENCES}{REFERENCES}}\list
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+\let\endthebibliography=\endlist
diff --git a/obsolete/macros/latex209/contrib/misc/subfigure.sty b/obsolete/macros/latex209/contrib/misc/subfigure.sty
new file mode 100644
index 0000000000..b8a448e7f9
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/misc/subfigure.sty
@@ -0,0 +1,446 @@
+%$% subfigure.sty
+%$% Subfigure/table command for use with the LaTeX figure environment.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Copyright (C) 1988-1995 Steven Douglas Cochran.
+%%%
+%%% The subfigure style is made available for academic and research
+%%% purposes only. No commercial license is hereby granted. Copying
+%%% and other reproduction is authorized only for research, education,
+%%% and other non-commercial purposes. No warranties, either
+%%% expressed or impiled, are made regarding the operation, use, or
+%%% results of the subfigure style.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% @LaTeX-style-file{
+%%% Author = "Steven Douglas Cochran",
+%%% Version = "2.0 (LaTeX209 version)",
+%%% Date = "1995 Mar 06",
+%%% Time = "12:43:14 EDT",
+%%% Filename = "subfigure.sty",
+%%% Address = "Digital Mapping Laboratory
+%%% School of Computer Science
+%%% Carnegie-Mellon University
+%%% 5000 Forbes Avenue
+%%% Pittsburgh, PA 15213-3891
+%%% USA",
+%%% Telephone = "(412) 268-5654",
+%%% FAX = "(412) 268-5576",
+%%% checksum = "23098 438 1899 18286",
+%%% Email = "sdc+@CS.CMU.EDU (Internet)",
+%%% CodeTable = "ISO/ASCII",
+%%% Keywords = "LaTeX, float, figure, table",
+%%% Supported = "yes",
+%%% Abstract = "LaTeX document-style option for
+%%% providing support for the inclusion of
+%%% small `sub' figures and tables. It
+%%% simplifies the positioning, captioning
+%%% and labeling of them within a single
+%%% figure or table environment.",
+%%% DocString = "The checksum field above contains a CRC-16
+%%% checksum as the first value, followed by
+%%% the equivalent of the standard UNIX wc
+%%% (word count) utility output of lines,
+%%% words, and characters. This is produced
+%%% by Robert Solovay's checksum utility."
+%%% }
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% $Log: subfigure.sty,v $
+%$% Revision 2.0 95/03/06 12:43:14 sdc
+%$% This version of `subfigure' is the first to be ported to LaTeX2e
+%$% (with backward compatibility to LaTeX 2.09). "\subfigure" and
+%$% "\subtable" are now identical and the environment controls
+%$% internal differences between them. Now, the caption setting
+%$% portion of "\@subfloat" is broken into the separate macros
+%$% "\@makesubfigurecaption" and "\@makesubtablecaption" to allow a
+%$% separate hook for the modification of how the caption is
+%$% constructed and to allow the table and figure captions to be
+%$% different. In addition, support of the `normal', `hang',
+%$% `center', `centerlast', 'nooneline'; `scriptsize', \ldots,
+%$% `Large'; `up', `it', `sl', `sc', `md', `bf', `rm', `sf', and `tt'
+%$% package options were added for compatibility with the caption.sty
+%$% by H.A. Sommerfeldt.}
+%$%
+%$% Revision 1.6 93/05/13 12:58:34 sdc
+%$% Changed to use the \thefigure macro in building the referenced
+%$% label. The old form caused a problem when used with the
+%$% report.sty as pointed out by Andrew Anselmo
+%$% (anselmo@cumesb.mech.columbia.edu). Also modified to restrict
+%$% the scope of the subfigure \label to the body of the subfigure.
+%$% Added \@thesubfigure to allow a separate labeling of the
+%$% subfigure in the figure and in the text. By default it is the
+%$% same as \thesubfigure with space appended. Added some hooks to
+%$% print the subfigure captions to the list-of-figures file if
+%$% desired. Finally, added the corresponding support for sub-tables
+%$% as well as sub-figures. NOTE: the optional caption is now a
+%$% moving argument and any fragile commands that appear in the
+%$% caption must be preceded by a \protect (just like that of the
+%$% \caption command).
+%$%
+%$% Revision 1.5 92/08/11 23:13:12 sdc
+%$% Fixed a bug which caused an problem with captions that contained
+%$% expressions like \sqrt; This was pointed out by Tom Scavo
+%$% (scavo@cie.uoregon.edu). A separate bug was fixed which caused
+%$% different sized captions to be misaligned; This problem was
+%$% pointed out by Simon Marshall (S.Marshal@Hull.ac.uk). Also
+%$% cleaned up the code a mite and *changed* the figure spacing so that
+%$% if no optional section is given, then the figure is only followed
+%$% by \subfigbottomskip and not that plus (\subfigcapskip + \strut
+%$% height). This should make it easier to adjust spacing as desired.
+%$%
+%$% Revision 1.4 92/06/27 10:40:34 sdc
+%$% Added a hack to allow the \label command to be used within the
+%$% body of the subfigure giving a reference label in the form
+%$% \arabic{thefigure}\thesubfigure. Added standard file header for
+%$% style.
+%$%
+%$% Revision 1.3 90/10/22 17:04:28 cochran
+%$% Changed test for empty caption inside of \@subfigure to compare
+%$% tokens and not the caption vs. \@empty. The former (incorrect)
+%$% test caused an error when the first two letters of the caption
+%$% were the same.
+%$%
+%$% Revision 1.2 89/08/30 07:18:29 cochran
+%$% Added a separate bottom margin and expanded the comments.
+%$%
+%$% Revision 1.1 88/11/02 11:03:46 cochran
+%$% Initial revision.
+%$%
+%$% 05 Mar 86 cochran@dworkin.usc.edu (USC-IRIS)
+%$% Created.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%$% Usage: \documentstyle[...,subfigure,...]{...}
+%$%
+%$% \subfigure[CAPTIONtext]{FIGUREbox}
+%%%
+%%% Creates a subfigure box with an optional CAPTION under a FIGURE.
+%%% The FIGURE is centered with \subfigtopskip of vertical space added
+%%% above. If there is a CAPTION, then \subfigcapskip vertical space
+%%% is added below the FIGURE followed by the CAPTION. Finally,
+%%% \subfigbottomskip of vertical space added at the bottom.
+%%%
+%%% If a CAPTION is given (including a null CAPTION `[]') then the
+%%% subfigure is labeled with a counter formatted by the macro
+%%% `\thesubfigure' which returns `(a)', `(b)', etc. If desired,
+%%% this macro may be redefined. The counter used for labeling the
+%%% subfigures is `subfigure' and is incremented for each subfigure
+%%% regardless of whether a CAPTION was printed.
+%%%
+%$% \subfigure[CAPTIONtext]{FIGUREbox}
+%%%
+%%% The subtable command is symmetric to the subfigure command defined
+%%% above.
+%%%
+%%% One example of use is to surround the figure in a center
+%%% environment or to specifying \centering:
+%%%
+%%% *---------*
+%%% \newcommand{\goodgap}{% | .. . | *---------*
+%%% \hspace{\subfigtopskip}% | . . | | . . . |
+%%% \hspace{\subfigbottomskip}} | .. . . | | . . .. |
+%%% ... *---------* *---------*
+%%% \begin{figure}% (a) First (b) Second
+%%% \centering Figure
+%%% \subfigure[First]{...}\goodgap
+%%% \subfigure[Second Figure]{...}\\ *---------*
+%%% \subfigure[Third]{\label{3figs-c}...}% | . .. . |
+%%% \caption{Three Subfigures.} | . .. . |
+%%% \label{3figs} *---------*
+%%% \end{figure} (c) Third
+%%% ... Figure 1. Three Subfigures.
+%%% Figure~\ref{3figs} contains
+%%% two top `subfigures' and Figure 1 contains two top `sub-
+%%% Figure~\ref{3figs-c}. figures' and Figure 1(c).
+%%%
+%%% A second example is to change the way that the subfigures are labeled
+%%% and to have the subfigure captions printed in the list-of-figures.
+%%%
+%%% \renewcommand{\thesubfigure}{\thefigure.\arabic{subfigure}}
+%%% \makeatletter
+%%% \renewcommand{\@thesubfigure}{\thesubfigure:\space}
+%%% \renewcommand{p@subfigure}{}
+%%% \makeatother
+%%% ...
+%%% \setcounter{lofdepth}{2}
+%%% \listoffigures
+%%% ...
+%%% \begin{figure}%
+%%% \begin{center}%
+%%% \subfigure[First]{% *--------------* *--------------*
+%%% \label{fig:first}% | .. . . | | . ... .. . . |
+%%% ...}% | . . . . | | . . . . .. |
+%%% \goodgap | .. . . . . | | . . . .. .. |
+%%% \subfigure[Second]{% *--------------* *--------------*
+%%% \label{fig:second}%
+%%% ...}% 1.1: First 1.2: Second
+%%% \end{center}%
+%%% \caption{Two Subfigures.} Figure 1. Two Subfigures.
+%%% \end{figure}
+%%% ... See subfigures 1.1 and 1.2.
+%%% See subfigures \ref{fig:first}
+%%% and \ref{fig:second}.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Options:
+%%%
+%%% I. Subfloat caption shape.
+%%% By default the caption paragraphs are centered under the
+%%% subfigure or table with a little indentation at each side.
+%%% There are three options that may be used to change the shape
+%%% of the centered paragraph -- they only have an effect when the
+%%% caption is more than one line long. These should be set in
+%%% the preamble of your LaTeX file:
+%%%
+%%% \subcaphangtrue Causes the label to be a hanging
+%%% indentation to the caption paragraph.
+%%% \subcapcentertrue Causes each line of the paragraph
+%%% to be separately centered.
+%%% \subcapcenterlasttrue Causes the last line only to be
+%%% centered.
+%%% \subcapnooneline If a caption fits on one line it
+%%% will, by default, be centered.
+%%% This option left-justifies the one
+%%% line caption.
+%%%
+%%% The hang option may be used in addition to either center
+%%% option. (If both center options are true it is the same as if
+%%% only the \subcapcenter was true.)
+%%%
+%%%
+%%% II. Subfloat label font.
+%%% The subfloat label font may be separately set by changing the
+%%% definition of \subcaplabelfont. For example:
+%%%
+%%% \newcommand{\subcaplabelfont}{\it}
+%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%
+%%% Identification
+%%%
+\ifx\if@compatibility\undefined\else
+ \NeedsTeXFormat{LaTeX2e}
+ \ProvidesPackage{subfigure}[1995/03/06 v2.0 subfigure package]
+ \typeout{Package: subfigure 1995/03/06 v2.0}
+\fi
+
+%%%
+%%% Initialization and Shared constants
+%%%
+\newif\ifsubcaphang
+\newif\ifsubcapcenter
+\newif\ifsubcapcenterlast
+\newif\ifsubcapnooneline
+
+%%
+%% Common values (mention of `subfig' in names is for upward compatibility)
+%%
+\newcommand{\subfigtopskip}{10pt} % Length from the top of the subfloat
+ % box to the begining of the FIGURE box.
+\newcommand{\subfigbottomskip}{10pt} % Length from the bottom of the CAPTION
+ % to the bottom of the subfloat.
+\newcommand{\subfigcapskip}{10pt} % Length from the bottom of the FIGURE box
+ % to the begining of the CAPTION.
+\newcommand{\subfigcapmargin}{10pt} % Indentation of the caption from the
+ % sides of the subfloat box (This should
+ % always be positive).
+\newcommand{\subcapsize}{} % Size of the CAPTION font.
+\newcommand{\subcaplabelfont}{} % Font of the caption label.
+
+%%
+%% Subfigure values
+%%
+\newcounter{subfigure}[figure] % Subfigure counter.
+\def\thesubfigure{(\alph{subfigure})} % Generate CAPTION label (text).
+\newcommand{\@thesubfigure}{% % Generate CAPTION label (figure).
+ {\subcaplabelfont\thesubfigure}\space}
+\let\p@subfigure\thefigure % Figure number for \label.
+
+\let\ext@subfigure\ext@figure % Default SubFigure file extension.
+\newcommand{\l@subfigure}{% % How to print an LOF subfigure line.
+ \@dottedxxxline{\ext@subfigure}{2}{3.9em}{2.3em}}
+\newcounter{lofdepth} % LOF depth counter.
+\setcounter{lofdepth}{1} % Default is to NOT print an LOF line.
+
+%%
+%% Subtable values
+%%
+\newcounter{subtable}[table] % Subtable counter.
+\def\thesubtable{(\alph{subtable})} % Generate CAPTION label (text).
+\newcommand{\@thesubtable}{% % Generate CAPTION label (figure).
+ {\subcaplabelfont\thesubtable}\space}
+\let\p@subtable\thetable % Figure number for \label.
+
+\let\ext@subtable\ext@table % Default SubTable file extension.
+\newcommand{\l@subtable}{% % How to print an LOT subtable line.
+ \@dottedxxxline{\ext@subtable}{2}{3.9em}{2.3em}}
+\newcounter{lotdepth} % LOT depth counter.
+\setcounter{lotdepth}{1} % Default is to NOT print an LOT line.
+
+
+%%
+%% Declaration of options
+%%
+\ifx\if@compatibility\undefined
+ \subcaphangfalse
+ \subcapcenterfalse
+ \subcapcenterlastfalse
+ \subcapnoonelinefalse
+ \def\subcapsize{\footnotesize}
+\else
+ \DeclareOption{normal}{%
+ \subcaphangfalse
+ \subcapcenterfalse
+ \subcapcenterlastfalse}
+ \DeclareOption{hang}{\subcaphangtrue}
+ \DeclareOption{center}{\subcapcentertrue}
+ \DeclareOption{centerlast}{\subcapcenterlasttrue}
+ \DeclareOption{nooneline}{\subcapnoonelinetrue}
+ \DeclareOption{isu}{\ExecuteOption{hang}}
+ \DeclareOption{anne}{\ExecuteOption{centerlast}}
+
+ \DeclareOption{scriptsize}{\renewcommand{\subcapsize}{\scriptsize}}
+ \DeclareOption{footnotesize}{\renewcommand{\subcapsize}{\footnotesize}}
+ \DeclareOption{small}{\renewcommand{\subcapsize}{\small}}
+ \DeclareOption{normalsize}{\renewcommand{\subcapsize}{\normalsize}}
+ \DeclareOption{large}{\renewcommand{\subcapsize}{\large}}
+ \DeclareOption{Large}{\renewcommand{\subcapsize}{\Large}}
+ \DeclareOption{up}{\renewcommand{\subcaplabelfont}{\upshape}}
+ \DeclareOption{it}{\renewcommand{\subcaplabelfont}{\itshape}}
+ \DeclareOption{sl}{\renewcommand{\subcaplabelfont}{\slshape}}
+ \DeclareOption{sc}{\renewcommand{\subcaplabelfont}{\scshape}}
+ \DeclareOption{md}{\renewcommand{\subcaplabelfont}{\mdseries}}
+ \DeclareOption{bf}{\renewcommand{\subcaplabelfont}{\bfseries}}
+ \DeclareOption{rm}{\renewcommand{\subcaplabelfont}{\rmfamily}}
+ \DeclareOption{sf}{\renewcommand{\subcaplabelfont}{\sffamily}}
+ \DeclareOption{tt}{\renewcommand{\subcaplabelfont}{\ttfamily}}
+
+ \ExecuteOptions{normal,footnotesize}
+ \ProcessOptions
+\fi
+
+
+%%%
+%%% Define the subfigure and subtable commands
+%%%
+\newcommand{\subfigure}{%
+ \bgroup
+ % Since the table caption is usually generated later, we
+ % must locally anticipate the future value of its counter.
+ \advance\csname c@\@captype\endcsname\@ne
+ \refstepcounter{sub\@captype}%
+ \leavevmode
+ \@ifnextchar [%
+ {\@subfloat{sub\@captype}}%
+ {\@subfloat{sub\@captype}[\@empty]}}
+\let\subtable\subfigure
+
+%%%
+%%% Define the common subfloat macro
+%%%
+\def\@subfloat#1[#2]#3{%
+ \setbox\@tempboxa \hbox{#3}%
+ \@tempdima=\wd\@tempboxa
+ \vtop{%
+ %% Put the top spacing and the figure in the top box
+ \vbox{%
+ \vskip\subfigtopskip
+ \box\@tempboxa}%
+ %% Now skip down and add the caption paragraph
+ %% (unless #2 == \@empty)
+ \ifx \@empty#2\relax \else
+ \vskip\subfigcapskip
+ \@subcaption{#1}{#2}%
+ \fi
+ %% Finally add the bottom spacing.
+ \vskip\subfigbottomskip}%
+ \egroup}
+
+\newcommand{\@subfigcaptionlist}{}
+
+\newcommand{\@subcaption}[2]{%
+ \begingroup
+ \let\label\@gobble
+ \def\protect{\string\string\string}%
+ \xdef\@subfigcaptionlist{%
+ \@subfigcaptionlist,%
+ {\protect\numberline {\@currentlabel}%
+ \noexpand{\ignorespaces #2}}}%
+ \endgroup
+ \@nameuse{@make#1caption}{\@nameuse{@the#1}}{#2}}
+
+\newcommand{\@makesubfigurecaption}[2]{%
+ \setbox\@tempboxa \hbox{%
+ \subcapsize
+ \ignorespaces #1%
+ \ignorespaces #2}%
+ \@tempdimb=-\subfigcapmargin
+ \multiply\@tempdimb\tw@
+ \advance\@tempdimb\@tempdima
+ \hbox to\@tempdima{%
+ \hfil
+ \ifdim \wd\@tempboxa >\@tempdimb
+ \subfig@caption{#1}{#2}%
+ \else\ifsubcapnooneline
+ \subfig@caption{#1}{#2}%
+ \else
+ \box\@tempboxa
+ \fi\fi
+ \hfil}}
+
+\let\@makesubtablecaption\@makesubfigurecaption
+
+\newcommand{\subfig@caption}[2]{%
+ \ifsubcaphang
+ \sbox{\@tempboxa}{%
+ \subcapsize
+ \ignorespaces #1}%
+ \addtolength{\@tempdimb}{-\wd\@tempboxa}%
+ \usebox{\@tempboxa}%
+ \subfig@captionpar{\@tempdimb}{#2}%
+ \else
+ \subfig@captionpar{\@tempdimb}{#1#2}%
+ \fi}
+
+\newcommand{\subfig@captionpar}[2]{%
+ \parbox[t]{#1}{%
+ \strut
+ \ifsubcapcenter
+ \setlength{\leftskip}{\@flushglue}%
+ \setlength{\rightskip}{\@flushglue}%
+ \setlength{\parfillskip}{\z@skip}%
+ \else\ifsubcapcenterlast
+ \addtolength{\leftskip}{0pt plus 1fil}%
+ \addtolength{\rightskip}{0pt plus -1fil}%
+ \setlength{\parfillskip}{0pt plus 2fil}%
+ \fi\fi
+ \subcapsize
+ \ignorespaces #2}}
+
+%%%
+%%% Generalized wrapper for the \@dottedtocline macro. This checks for
+%%% the level based on the output file (#1) and not using only
+%%% \@tocdepth.
+%%%
+\newcommand{\@dottedxxxline}[6]{%
+ \ifnum #2>\@nameuse{c@#1depth}\else
+ \@dottedtocline{0}{#3}{#4}{#5}{#6}
+ \fi}
+
+%%%
+%%% Finally, wrap the \@caption macro to dump any sub-captions saved
+%%% after calling the standard \@caption.
+%%%
+\let\subfig@oldcaption\@caption
+
+\long\def\@caption#1[#2]#3{%
+ \subfig@oldcaption{#1}[{#2}]{#3}%
+ \@for \@tempa:=\@subfigcaptionlist \do {%
+ \ifx\@empty\@tempa\relax \else
+ \addcontentsline
+ {\@nameuse{ext@sub#1}}%
+ {sub#1}%
+ {\@tempa}%
+ \fi}%
+ \gdef\@subfigcaptionlist{}}
+\endinput
+
+%%%
+%%% End of file `subfigure.sty'.
diff --git a/obsolete/macros/latex209/contrib/misc/texnames.sty b/obsolete/macros/latex209/contrib/misc/texnames.sty
new file mode 100644
index 0000000000..7314a8de47
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/misc/texnames.sty
@@ -0,0 +1,13 @@
+\font\mf=logo10
+\hyphenchar\mf=-1
+\newcommand{\METAFONT}{{\mf METAFONT}}
+\newcommand{\AMSTEX}{$\cal A$\kern-.1667em\lower.5ex\hbox{$\cal M$}\kern-.125em
+ $\cal S$-\TeX}
+\newcommand{\AMSTeX}{\AMSTEX}
+\newcommand{\BibTeX}{{\sc Bib}\TeX}
+\newcommand{\VorTeX}{{V\kern-2.7pt\lower.5ex\hbox{O\kern-1.4pt R}\kern-2.6pt
+ T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX}}
+\newcommand\FergTeX{T\kern-.1667em\lower.5ex\hbox{\^E}\kern-.125emX}
+\font\gut=cminch
+\hyphenchar\gut=-1
+\newcommand{\Gut}{{\gut GUT}{\Huge \kern-1em\hbox{enberg}}}
diff --git a/obsolete/macros/latex209/contrib/misc/threepart.sty b/obsolete/macros/latex209/contrib/misc/threepart.sty
new file mode 100644
index 0000000000..8d9104688d
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/misc/threepart.sty
@@ -0,0 +1,40 @@
+% Three part head and foot macros. 1/87
+% Lance Berc
+% Olsen & Associates mcvax!unizh!olsen!lance@seismo.css.gov
+% Seefeldstrasse 233
+% CH-8008 Zurich
+
+% How users can set the head and foot text.
+\def\lhead#1{\gdef\@lhead{#1}} \def\lfoot#1{\gdef\@lfoot{#1}}
+\def\chead#1{\gdef\@chead{#1}} \def\cfoot#1{\gdef\@cfoot{#1}}
+\def\rhead#1{\gdef\@rhead{#1}} \def\rfoot#1{\gdef\@rfoot{#1}}
+
+% Initialization of the head and foot text.
+% By default the page number is at the center of the foot and everything
+% else is empty.
+\def\@lhead{} \def\@lfoot{}
+\def\@chead{} \def\@cfoot{{\rm \thepage}}
+\def\@rhead{} \def\@rfoot{}
+
+% Put together a three part header or footer given the left, center and
+% right text. The \lap commands put the text into an hbox of zero size,
+% so overlapping text is not detected (it just overlaps).
+\def\@threepart#1#2#3{\rlap{#1} \hfil {#2} \hfil \llap{#3}}
+
+% Swap the notices on odd and even pages when twosided.
+\def\ps@threepartheadings
+ {
+ \def\@oddhead{\@threepart{\@lhead}{\@chead}{\@rhead}}
+ \def\@oddfoot{\@threepart{\@lfoot}{\@cfoot}{\@rfoot}}
+
+ \if@twoside
+ \def\@evenhead{\@threepart{\@rhead}{\@chead}{\@lhead}}
+ \def\@evenfoot{\@threepart{\@rfoot}{\@cfoot}{\@lfoot}}
+ \else
+ \def\@evenhead{\@threepart{\@lhead}{\@chead}{\@rhead}}
+ \def\@evenfoot{\@threepart{\@lfoot}{\@cfoot}{\@rfoot}}
+ \fi
+ }
+
+% Default page style
+\ps@threepartheadings
diff --git a/obsolete/macros/latex209/contrib/misc/twoup.sty b/obsolete/macros/latex209/contrib/misc/twoup.sty
new file mode 100644
index 0000000000..b9fb4796d0
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/misc/twoup.sty
@@ -0,0 +1,20 @@
+% Gary Levin gary@sun.mcs.clarkson.edu
+%
+% to format files for two up printing use the following style file
+% feel free to modify before you install. the units are pretty good, so
+% don't fiddle much. leaves enough room for punching holes at the top.
+%
+% once latex'ed, reorganize the file using
+% dvidvi '2:0(-0.35in,-0.25in),1(4.65in,-0.25in)' $1.dvi twoup.dvi
+% then print using dvi2ps -L
+% probably should package as a shell file
+%
+\newcommand\twoup{
+\topmargin 0.00in
+\oddsidemargin 0.00in
+\evensidemargin 0.00in
+\headheight 0.25in
+\headsep 0.20in
+\textheight 6.50in
+\pagestyle{headings}
+}
diff --git a/obsolete/macros/latex209/contrib/misc/varioref.sty b/obsolete/macros/latex209/contrib/misc/varioref.sty
new file mode 100644
index 0000000000..0d895e04bc
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/misc/varioref.sty
@@ -0,0 +1,168 @@
+%%
+%% This is file `varioref.sty', generated
+%% on <1993/5/1> with the docstrip utility (2.1e).
+%%
+%% The original source files were:
+%%
+%% varioref.doc (with options: `style')
+%%
+%%
+%% Copyright (C) 1992,1993 by Frank Mittelbach. All rights reserved.
+%%
+%%
+%% IMPORTANT NOTICE:
+%%
+%% You are not allowed to change this file. You may however copy this
+%% file to a file with a different name and then change the copy.
+%%
+%% You are NOT ALLOWED to distribute this file alone. You are NOT
+%% ALLOWED to take money for the distribution or use of this file (or a
+%% changed version) except for a nominal charge for copying etc.
+%%
+%% You are allowed to distribute this file under the condition that it is
+%% distributed together with all files mentioned in readme.mz7.
+%%
+%% If you receive only some of these files from someone, complain!
+%%
+%% However, if these files are distributed by established suppliers as
+%% part of a complete TeX distribution, and the structure of the
+%% distribution would make it difficult to distribute the whole set of
+%% files, *those parties* are allowed to distribute only some of the
+%% files provided that it is made clear that the user will get a complete
+%% distribution-set upon request to that supplier (not me). Notice that
+%% this permission is not granted to the end user.
+%%
+%% For error reports in case of UNCHANGED versions see readme files.
+%%
+%%
+%%
+
+\def\filename{varioref}
+\def\fileversion{v0.1g}
+\def\filedate{93/02/14}
+\def\docdate {93/02/14}
+
+%% \CheckSum{257}
+%% \CharacterTable
+%% {Upper-case \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
+%% Lower-case \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
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%
+%% Style-option varioref to use with LaTeX v2.09
+%% Copyright (C) 1992-1993 Frank Mittelbach, all rights reserved.
+\@ifundefined{c@vrcnt}{}{\endinput}
+\typeout{Style option: `varioref'
+ \fileversion\space <\filedate> (FMi)}
+\typeout{English documentation
+ \@spaces\@spaces\space<\docdate> (FMi)}
+\newcounter{vrcnt}
+\def\vpageref{\protect\p@vpageref}
+\def\p@vpageref{\@ifnextchar[%
+ \@vpageref{\@vpageref[\reftextcurrent]}%
+}
+\def\@vpageref[#1]{\@ifnextchar[%
+ \@@vpageref{\@@vpageref[#1][\unskip\space]}}
+\def\@@vpageref[#1][#2]#3{%
+ \leavevmode\unskip
+ \global\advance\c@vrcnt\@ne
+ \@ifundefined{r@vr@\the\c@vrcnt}%
+ {\@namedef{r@vr@\the\c@vrcnt}{{??}{??}}}{}%
+ \edef\@tempa{\expandafter\expandafter\expandafter
+ \@cdr\csname r@vr@\the\c@vrcnt\endcsname
+ \@nil}%
+ \@ifundefined{r@xvr@\the\c@vrcnt}%
+ {\@namedef{r@xvr@\the\c@vrcnt}{{??}{??}}}{}%
+ \edef\@tempb{\expandafter\expandafter\expandafter
+ \@cdr\csname r@xvr@\the\c@vrcnt\endcsname
+ \@nil}%
+ {\let\@currentlabel\@empty\label{xvr@\the\c@vrcnt}}%
+ \ifx\@tempa\@tempb\else
+ \vref@err{***^^J%
+ * Warning: \noexpand\vref over page boundary
+ \@tempa-\@tempb\space (may loop)^^J%
+ ***}%
+ \fi
+ \@ifundefined{r@#3}{\@namedef{r@#3}{{??}{??}}}{}%
+ \edef\@tempb{\expandafter\expandafter\expandafter
+ \@cdr\csname r@#3\endcsname
+ \@nil}%
+ \space
+ \ifx\@tempa\@tempb
+ #1%
+ \else
+ #2%
+ \is@pos@number\@tempb
+ {%
+ \is@pos@number\@tempa
+ {\@tempcnta\@tempa
+ \advance\@tempcnta\@ne
+ }%
+ {\@tempcnta\maxdimen}%
+ \ifnum \@tempb =\@tempcnta
+ \ifodd\@tempcnta
+ \if@twoside
+ \reftextfaceafter
+ \else
+ \reftextafter
+ \fi
+ \else
+ \reftextafter
+ \fi
+ \else
+ \advance\@tempcnta-2
+ \ifnum \@tempb =\@tempcnta
+ \ifodd\@tempcnta
+ \reftextbefore
+ \else
+ \if@twoside
+ \reftextfacebefore
+ \else
+ \reftextbefore
+ \fi
+ \fi
+ \else
+ \reftextfaraway{#3}%
+ \fi
+ \fi
+ }%
+ {\reftextfaraway{#3}}%
+ \fi
+ {\let\@currentlabel\@empty\label{vr@\the\c@vrcnt}}%
+}
+\def\vrefwarning{\let\vref@err\typeout}
+\let\vref@err\errmessage
+\def\vref{\protect\p@vref}
+\def\p@vref#1{%
+ \unskip~\ref{#1}%
+ \@vpageref[\unskip]{#1}%
+}
+\def\is@pos@number#1{\is@pos@num0#1\space\@nil}
+\def\is@pos@num{\afterassignment\is@pos@num@ \count@}
+\def\is@pos@num@#1\@nil{%
+ \if0#10%
+ \expandafter\@firstarg \else
+ \expandafter\@secondarg \fi}
+\def\@firstarg#1#2{#1}
+\def\@secondarg#1#2{#2}
+\def\reftextvario#1#2{\ifodd\c@vrcnt #1\else#2\fi}
+\def\reftextfaceafter {on the \reftextvario{facing}{next} page}
+\def\reftextfacebefore{on the \reftextvario{facing}{preceding} page}
+\def\reftextafter {on the \reftextvario{following}{next} page}
+\def\reftextbefore {on the \reftextvario{preceding page}{page before}}
+\def\reftextcurrent {on \reftextvario{this}{the current} page}
+\def\reftextfaraway#1{on page~\pageref{#1}}
+\def\fullref#1{\ref{#1} on page~\pageref{#1}}
+\endinput
+%%
+%% End of file `varioref.sty'.
diff --git a/obsolete/macros/latex209/contrib/misc/xr.sty b/obsolete/macros/latex209/contrib/misc/xr.sty
new file mode 100644
index 0000000000..b4b11da30c
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/misc/xr.sty
@@ -0,0 +1,207 @@
+%%% ====================================================================
+%%% @LaTeX-style-file{
+%%% author = "David Carlisle",
+%%% version = "5.01",
+%%% date = "20 July 1993",
+%%% time = "10:57:34 BST",
+%%% filename = "xr.sty",
+%%% address = "Computer Science Department
+%%% Manchester University
+%%% Oxford Road
+%%% Manchester
+%%% England
+%%% M13 9PL",
+%%% telephone = "+44 61 275 6139",
+%%% FAX = "+44 61 275 6236",
+%%% checksum = "04455 207 971 7348",
+%%% email = "carlisle@cs.man.ac.uk (Internet)",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "LaTeX, \ref, \pageref, \label",
+%%% supported = "yes",
+%%% docstring = "
+%%%
+%%% xr.sty
+%%%
+%%% A style which allows the use \[page]ref in one file to access
+%%% labels defined by \label in another document.
+%%% Each such file which is to be cross referenced is declared with
+%%% the \externaldocument command.
+%%%
+%%% Versions 1-4 of this style were written by Jean-Pierre Drucbert
+%%%
+%%% Version 5 re-implements the main mechanism, and adds an
+%%% optional argument to allow the user to resolve conflicts if two
+%%% files use the same \label.
+%%%
+%%% The checksum field above was produced by
+%%% Robert Solovay's checksum utility.",
+%%% }
+%%% ====================================================================
+%
+% Version 5.00 07 July 1993
+% New mechanism (\read instead of \input).
+%
+% Version 5.01 20 July 1993
+% V5.00 did not import aux files of \include'ed files. (Reported by
+% Jean-Pierre Drucbert.)
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%<*x>
+% This file may be used without modification as a style (.sty) file.
+%
+% If you have Mittelbach's doc.sty, this file may be formatted with a
+% command like:
+% latex xr.sty
+%
+% If you have the Mittelbach/Duchier/Braams docstrip utility, you may
+% produce a faster loading .sty file. Rename this file to: xr.doc
+% Then run this file through *plain* TeX:
+% tex xr.doc
+% This should produce the file xr.sty.
+% If you do not have plain TeX on your system, you can trick LaTeX into
+% doing the work as follows:
+% latex \def\fmtname{plain} \input xr.doc
+% Note that you may need to quote the arguments here to stop your
+% operating system treating the \ characters incorrectly.
+%
+% latex xr.doc
+% Will produce a typeset version of the documentation, as above.
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\plain{plain}\ifx\fmtname\plain\csname fi\endcsname
+ \def\batchfile{xr.doc}
+ \input docstrip
+ \preamble
+
+ Do not distribute the stripped version of this file.
+ The checksum in the header refers to the documented version.
+
+ \endpreamble
+ \generateFile{xr.sty}{t}{\from{xr.doc}{}}
+ \endinput
+\fi
+%
+\ifcat a\noexpand @\let\next\relax\else\def\next{%
+ \documentstyle[doc]{article}\MakePercentIgnore}\fi\next
+%
+%\def\eatmodule<#1>{}\eatmodule
+%</x>
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \textwidth=355pt ^^A Allow macrocode text with 72 columns.
+% \CodelineIndex ^^A Code lines numbered.
+% \DisableCrossrefs ^^A No Cross references.
+% \MakeShortVerb{\"} ^^A "\foo" works like \verb+\foo+
+%
+% \title{xr.sty}
+% \author{D. P. Carlisle^^A
+% \thanks{The Author of Versions 1--4 was Jean-Pierre Drucbert}}
+% \date{20 July 1993}
+%
+% \begin{document}
+% \maketitle
+%
+% This style implements a system for eXternal References.
+%
+% If one document needs to refer to sections of another, say "aaa.tex",
+% then this style may be given as a "\documentstyle" option in the main
+% file, and the command "\externaldocument{aaa}" given in the preamble.
+%
+% Then you may use "\ref" and "\pageref" to refer to anything which has
+% been given a "\label" in either "aaa.tex" or the main document.
+% You may declare any number of such external documents.
+%
+% If any of the external documents, or the main document, use the same
+% "\label" then an error will occur as the label will be multiply
+% defined. To overcome this problem "\externaldocument" has an optional
+% argument. If you declare "\externaldocument[A-]{aaa}" Then all
+% references from "aaa" are prefixed by "A-". So for instance, if a
+% section of "aaa" had "\label{intro}", then this could be referenced
+% with "\ref{A-intro}". The prefix need not be "A-", it can be any
+% string chosen to ensure that all the labels imported from external
+% files are unique. Note however that if your style declares certain
+% active characters (":" in French, \verb|"| in German) then these
+% characters can not usually be used in "\label", and similarly may not
+% be used in the optional argument to "\externaldocument".
+%
+% \typeout{End of the Introduction and Examples.}
+% \typein[\answer]%
+% {Do you want an annotated listing of the macro definitions (y/n) ?}
+% \def\next{y}\ifx\answer\next\else\expandafter\stop\fi
+%
+% \section{The macros}
+% Check for the optional argument.
+% \begin{macrocode}
+\def\externaldocument{\@ifnextchar[{\XR@}{\XR@[]}}
+% \end{macrocode}
+%
+% Save the optional prefix. Start processing the first "aux" file.
+% \begin{macrocode}
+\def\XR@[#1]#2{{%
+ \makeatletter
+ \def\XR@prefix{#1}%
+ \XR@next#2.aux\relax\\}}
+% \end{macrocode}
+%
+% Process the next "aux" file in the list and remove it from the head of
+% the list of files to process.
+% \begin{macrocode}
+\def\XR@next#1\relax#2\\{%
+ \edef\XR@list{#2}%
+ \XR@loop{#1}}
+% \end{macrocode}
+%
+% Check whether the list of "aux" files is empty.
+% \begin{macrocode}
+\def\XR@aux{%
+ \ifx\XR@list\@empty\else\expandafter\XR@explist\fi}
+% \end{macrocode}
+%
+
+% Expand the list of aux files, and call "\XR@next" to process the first
+% one.
+% \begin{macrocode}
+\def\XR@explist{\expandafter\XR@next\XR@list\\}
+% \end{macrocode}
+%
+% If the "aux" file exists, loop through line by line, looking for
+% "\newlabel" and "\@input". Otherwise process the next file in the
+% list.
+% \begin{macrocode}
+\def\XR@loop#1{\openin\@inputcheck#1\relax
+ \ifeof\@inputcheck
+ \typeout{^^JNo file #1^^JLABELS NOT IMPORTED.^^J}%
+ \expandafter\XR@aux
+ \else
+ \typeout{IMPORTING LABELS FROM #1}%
+ \expandafter\XR@read\fi}
+% \end{macrocode}
+%
+% Read the next line of the aux file.
+% \begin{macrocode}
+\def\XR@read{%
+ \read\@inputcheck to\XR@line
+% \end{macrocode}
+% The "..." make sure that "\XR@test" always has sufficient arguments.
+% \begin{macrocode}
+ \expandafter\XR@test\XR@line...\XR@}
+% \end{macrocode}
+%
+% Look at the first token of the line.
+% If it is "\newlabel", do the "\newlabel". If it is "\@input", add the
+% filename to the list of files to process. Otherwise ignore.
+% Go around the loop if not at end of file. Finally process the next
+% file in the list.
+% \begin{macrocode}
+\long\def\XR@test#1#2#3#4\XR@{%
+ \ifx#1\newlabel
+ \newlabel{\XR@prefix#2}{#3}%
+ \else\ifx#1\@input
+ \edef\XR@list{\XR@list#2\relax}%
+ \fi\fi
+ \ifeof\@inputcheck\expandafter\XR@aux
+ \else\expandafter\XR@read\fi}
+% \end{macrocode}
+%
+% \end{document}
+\endinput
diff --git a/obsolete/macros/latex209/contrib/mitthesis/mitthesis-sample.tex b/obsolete/macros/latex209/contrib/mitthesis/mitthesis-sample.tex
new file mode 100644
index 0000000000..60dee20994
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/mitthesis/mitthesis-sample.tex
@@ -0,0 +1,135 @@
+% mitthesis-sample.tex 12 Sep 89
+% by Stephen Gildea <gildea@erl.mit.edu>
+\documentstyle[11pt,mitthesis]{report}
+\begin{document}
+
+\title{Mixed Mode Oblique Ionograms in Transverse Shear Deformations
+of Epitaxial Laminar Turbulent Circular Cylindrical Shells}
+
+\author{J. Casey Salas}
+\prevdegrees{B.S., University of California (1978) \\
+ S.M., Massachusetts Institute of Technology (1981)}
+\department{Department of Electrical Engineering and Computer Science}
+
+% If the thesis is for two degrees simultaneously, list them both
+% separated by \and like this:
+% \degree{Doctor of Philosophy \and Master of Science}
+\degree{Doctor of Philosophy}
+
+\degreemonth{February}
+\degreeyear{1987}
+\thesisdate{December 10, 1986}
+
+% If the thesis is copyright by the Institute, leave this line out and
+% the standard copyright line will be used instead.
+\copyrightnotice{J. Casey Salas, 1986}
+
+% If there is more than one supervisor, use the \supervisor command
+% once for each.
+\supervisor{John D. Galli}{Director, Sound Instrument Laboratory}
+
+% The \supervisor command takes an optional argument in case you
+% want to label a person other than "Thesis Supervisor". For example,
+% \supervisor[Thesis Co-supervisor]{Michael Prange}{Senior Research Scientist}
+
+% this is the department committee chairman, not the thesis committee chairman
+\chairman{Arthur C. Smith}
+ {Chairman, Departmental Committee on Graduate Students}
+
+% Make the titlepage based on the above information. If you need
+% something special and can't use the standard form, you can specify
+% the exact text of the titlepage yourself. Put it in a titlepage
+% environment and leave blank lines where you want vertical space.
+% The spaces will be adjusted to fill the entire page. The dotted
+% lines for the signatures are made with the \signature command.
+\maketitle
+
+% The abstractpage environment sets up everything on the page except
+% the text itself. The title and other header material are put at the
+% top of the page, and the supervisors are listed at the bottom. A
+% new page is begun both before and after. Of course, an abstract may
+% be more than one page itself. If you need more control over the
+% format of the page, you can use the abstract environment, which puts
+% the word "Abstract" at the beginning and single spaces its text.
+
+\begin{abstractpage}
+Recursive lattice least squares (RLLS) was selected as the baseline
+algorithm for the identification. Simulation results on a
+one-dimensional LSS demonstrated that it provided good estimates, was
+not ill-conditioned in the presence of under-excited modes, allowed
+activity by a supervisory control system which prevented damage to the
+LSS or excessive drift, and was capable of real-time processing for
+typical LSS models.
+
+The editor generates data files
+representing this model that can be used as input to a ray-tracing
+program. The description of the file format is
+written in a high-level declarative language, so that the editor can
+be easily modified to support other formats.
+\end{abstractpage}
+
+% The text of the thesis itself begins here.
+
+% You may want to put a \tableofcontents command here.
+
+% An acknowledgments section (probably begun with
+% \section*{Acknowledgments}) might go here.
+
+\chapter{Introduction}
+
+\section{Background}
+Observed elevation changes near the 1979 hypocenter
+(on the southern end of Imperial fault) and in the Brawley Seismic Zone show
+significant deviations from those predicted by models of fault slip
+inferred from strong ground motion measurements. Specifically, the
+geodetic data suggest that
+slip on the Imperial fault is significantly lower in the
+vicinity of the earthquake hypocenter
+than along the central and northern sections of the
+fault. In addition,
+there is marginal evidence that the dip of the Imperial fault
+changes along strike from approximately vertical
+just north of the US-Mexico border to between $70^\circ$ and $80^\circ$ near
+the northernmost extent of the 1979 surface break. This change in dip
+may be related to a change in local strike along the fault. Large
+elevation changes ($>15$ cm) also occur within the Brawley Seismic
+Zone well north of the primary surface faulting.
+
+While these
+movements are consistent with a number of possible fault
+models, our prefered interpretation based on geodetic and seismic
+observations (aftershock locations and focal mechanisms)
+involves right lateral, aseismic slip on a northwest
+striking fault along the east side of the Brawley Seismic Zone and
+conjugate left lateral faulting on a northeast striking fault
+(possibly associated with a M=5.8 aftershock).\footnote{Buried creep on this
+same right lateral fault in the Brawley Seismic Zone can also
+account for vertical deformation during the postseismic period of the
+1940, M=7.1 Imperial Valley earthquake as well as deformation during the
+interseismic period between the 1940 and 1979 events.}
+
+Substantial
+right lateral slip in the Brawley Seismic Zone suggests that a
+significant part of the shear strain released during and following the
+1940 and 1979 earthquakes on the Imperial fault is transferred through
+the Brawley Seismic Zone to the southern end of the San Andreas
+fault.
+
+Elevation changes in the Imperial Valley, California derived from
+repeated leveling surveys for the time period including the 1979,
+M=6.6 earthquake, provide some constraints on fault geometry and slip
+distribution associated with this event. Many of the first order
+features of the observed vertical movements are well matched by simple
+models consisting of variable slip on planar faults in an elastic
+half-space using fault offsets
+inferred from strong ground motion observations (Archuleta, 1984) and measured
+after-slip. The geodetic and seismic observations suggest that
+significant slip is confined to depths above
+13 km with maximum right lateral offset reaching about 1.5 m on the
+Imperial fault. Dip slip occurs predominantly in
+the sediments on the upper 5 km of the Imperial fault and on the
+Brawley fault. Right lateral after-slip is confined to the upper 5 km
+of the Imperial fault and reaches about 30 cm for the period 1979 to
+1981.
+
+\end{document}
diff --git a/obsolete/macros/latex209/contrib/mitthesis/mitthesis.sty b/obsolete/macros/latex209/contrib/mitthesis/mitthesis.sty
new file mode 100644
index 0000000000..a70bd4bfc1
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/mitthesis/mitthesis.sty
@@ -0,0 +1,186 @@
+% mitthesis.sty 12 Sep 89
+% For Massachusetts Institute of Technology theses (grad and undergrad),
+% based on "Specifications for Thesis Preparation" Revised 1986.
+%
+% This style option is designed to work with the report document
+% style of LaTeX version 2.09. Use
+% \documentstyle[mitthesis]{report}
+
+% "Preferably, the text should appear on only one side of the paper."
+% Hence no doubleside option.
+
+% Copyright (c) 1987 by Stephen Gildea
+% Permission to copy all or part of this work is granted, provided
+% that the copies are not made or distributed for resale, and that
+% the copyright notice and this notice are retained.
+%
+% THIS WORK IS PROVIDED ON AN "AS IS" BASIS. THE AUTHOR PROVIDES NO
+% WARRANTY WHATSOEVER, EITHER EXPRESS OR IMPLIED, REGARDING THE WORK,
+% INCLUDING WARRANTIES WITH RESPECT TO ITS MERCHANTABILITY OR FITNESS
+% FOR ANY PARTICULAR PURPOSE.
+
+% If you make any improvements, I'd like to hear about them.
+
+% Stephen Gildea
+% MIT Earth Resources Lab
+% Cambridge, Massachusetts 02139
+% mit-erl!gildea
+% gildea@erl.mit.edu
+
+% 29 Jun 87 original version
+% 12 Sep 89 <prange> \supervisor optional arg added
+
+% "Margins must be at least an inch and a quarter on the binding margin
+% (normally the left side), and at least one inch on the other sides."
+\oddsidemargin .25in
+\evensidemargin 0in
+
+\topmargin 0in
+\headheight 0in % no header
+\headsep \headheight
+
+\textwidth 6.25in
+\textheight 8.5in
+
+\footskip .4in
+
+% "The main body of the text should utilize a space and a half or double
+% spacing. The abstract, biography, footnotes, and bibliography
+% sections may be single spaced"
+\input doublespace.sty %available from Clarkson LaTeX-style collection
+\def\baselinestretch{1.5}
+
+%% End of formatting parameters %%
+
+%% Define all the pieces that go on the title page and the abstract.
+
+% \title and \author already exist
+
+\def\prevdegrees#1{\gdef\@prevdegrees{#1}}
+\def\@prevdegrees{}
+
+\def\department#1{\gdef\@department{#1}}
+
+% If you are getting two degrees, use \and between the names.
+\def\degree#1{\setbox0\hbox{#1} %for side effect of setting \@degreeword
+ \gdef\@degree{#1}}
+
+% \and is used inside the \degree argument to separate two degrees
+\def\and{\gdef\@degreeword{degrees} \par and \par}
+\def\@degreeword{degree}
+
+% If there is no \copyrightnotice command, it is asssumed that MIT
+% holds the copyright. This commands adds the copyright symbol to the
+% beginning, and puts the standard permission notice below.
+\def\copyrightnotice#1{\copyrightnoticetext{\copyright\ #1\par\permission}}
+
+% Occacionally you will need to exactly specify the text of the
+% copyright notice. The \copyrightnoticetext command is then useful.
+\long\def\copyrightnoticetext#1{\gdef\@copyrightnotice{#1}}
+\def\@copyrightnotice{\copyright\ \Mit\ \@degreeyear}
+
+\def\thesisdate#1{\gdef\@thesisdate{#1}}
+
+% typically just a month and year
+\def\degreemonth#1{\gdef\@degreemonth{#1}}
+\def\degreeyear#1{\gdef\@degreeyear{#1}}
+
+% Usage: \supervisor{name}{title}
+% \chairman{name}{title}
+
+% since there can be more than one supervisor,
+% we build the appropriate boxes for the titlepage and
+% the abstractpage as the user makes multiple calls
+% to \supervisor
+\newbox\@titlesupervisor \newbox\@abstractsupervisor
+
+% The \supervisor command takes an optional argument in case you
+% want to label a person other than "Thesis Supervisor". For example,
+% \supervisor[Thesis Co-supervisor]{Arthur Cheng}{Principle Research Scientist}
+
+\def\supervisor{\@ifnextchar[{\@supervisor}{\@supervisor[Thesis Supervisor]}}
+\def\@supervisor[#1]#2#3{\setbox\@titlesupervisor\vbox
+ {\unvbox\@titlesupervisor \vskip 10pt plus 1fil minus 1fil
+ \def\baselinestretch{1}\large
+ \signature{Certified by}{#2 \\ #3 \\ #1}}
+ \setbox\@abstractsupervisor\vbox{\unvbox\@abstractsupervisor
+ \vskip\baselineskip \def\baselinestretch{1}\@normalsize
+ \par\noindent #1: #2 \\ Title: #3}}
+
+% department chairman, not thesis committee chairman
+\def\chairman#1#2{\gdef\@chairmanname{#1}\gdef\@chairmantitle{#2}}
+
+\def\maketitle{\begin{titlepage}
+\large
+{\def\baselinestretch{1.2}\Large\bf \@title \par}
+by\par
+{\Large \@author}
+\par
+\@prevdegrees
+\par
+Submitted to the \@department \\
+in partial fulfillment of the requirements for the \@degreeword\ of
+\par
+\@degree
+\par
+at the
+\par\MIT\par
+\@degreemonth\ \@degreeyear
+\par
+\@copyrightnotice
+\par
+\vskip \baselineskip
+\signature{Signature of Author}{\@department \\ \@thesisdate}
+\par
+\unvbox\@titlesupervisor
+\par
+\signature{Accepted by}{\@chairmanname \\ \@chairmantitle}
+\end{titlepage}}
+
+% this environment should probably be called abstract,
+% but we want people to also be able to get at the more
+% basic abstact environment
+\def\abstractpage{\newpage
+\begin{center}{\large{\bf \@title} \\
+by \\
+\@author \\[\baselineskip]}
+\par
+\def\baselinestretch{1}\@normalsize
+Submitted to the \@department \\
+on \@thesisdate, in partial fulfillment of the \\
+requirements for the \@degreeword\ of \\
+\@degree
+\end{center}
+\par
+\begin{abstract}}
+
+\def\endabstractpage{\end{abstract}\noindent
+ \unvbox\@abstractsupervisor \newpage}
+
+% You can use the titlepage environment to do it all yourself if you
+% don't want to use \maketitle. If the titlepage environment, the
+% paragraph skip is infinitely stretchable, so if you leave a blank line
+% between lines that you want space between, the space will stretch so
+% that the title page fills up the entire page.
+\def\titlepage{\newpage\centering
+ \thispagestyle{empty}
+ \parindent 0pt \parskip 10pt plus 1fil minus 1fil
+ \def\baselinestretch{1}\@normalsize\vbox to \vsize\bgroup\vbox to 9in\bgroup}
+% The \kern0pt pushes any depth into the height. Thanks to Richard Stone.
+\def\endtitlepage{\par\kern 0pt\egroup\vss\egroup\newpage}
+
+\def\MIT{MASSACHUSETTS INSTITUTE OF TECHNOLOGY}
+\def\Mit{Massachusetts Institute of Technology}
+
+\def\permission{\par\noindent{\centering
+ The author hereby grants to MIT permission to reproduce and \\*
+ to distribute copies of this thesis document in whole or in part.}\par}
+
+\def\signature#1#2{\par\noindent#1\dotfill\null\\*
+ {\raggedleft #2\par}}
+
+\def\abstract{\subsection*{Abstract}\small\def\baselinestretch{1}\@normalsize}
+\def\endabstract{\par}
+
+% If using the report style, use - instead of . in the figure number.
+\@ifundefined{thechapter}{}{\def\thefigure{\thechapter-\arabic{figure}}}
diff --git a/obsolete/macros/latex209/contrib/ml/ascii.tcp b/obsolete/macros/latex209/contrib/ml/ascii.tcp
new file mode 100644
index 0000000000..02ad35e136
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/ml/ascii.tcp
Binary files differ
diff --git a/obsolete/macros/latex209/contrib/ml/babel.com b/obsolete/macros/latex209/contrib/ml/babel.com
new file mode 100644
index 0000000000..b1c6936d47
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/ml/babel.com
@@ -0,0 +1,152 @@
+%%
+%% This is file `babel.com', generated
+%% on <1993/12/9> with the docstrip utility (2.1e).
+%%
+%% The original source files were:
+%%
+%% babel.doc (with options: `code')
+%%
+%% Copyright (C) 1989-1993 by Johannes Braams.
+%% All rights reserved.
+%%
+%% This file is part of the Babel package, version 3.3.
+%%
+%% IMPORTANT NOTICE:
+%%
+%% You are not allowed to change this file. You may however copy
+%% this file to a file with a different name and then change the copy
+%% if you obey the restrictions on file changes described in
+%% readme.babel.
+%%
+%% You are allowed to distribute this file under the condition that
+%% it is distributed together with all files mentioned in readme.babel.
+%% If you receive only some of these files from someone, complain!
+%%
+%% You are NOT ALLOWED to distribute this file alone. You are NOT
+%% ALLOWED to take money for the distribution or use of either this
+%% file or a changed version, except for a nominal charge for copying
+%% etc.
+%%
+%% For error reports in case of UNCHANGED versions see readme files.
+%%
+%% Please do not request updates from me directly. Distribution is
+%% done through Mail-Servers and TeX organizations.
+%%
+%%%\iffalse
+%%% @LaTeX-file{
+%%% author = "Johannes L. Braams",
+%%% version = "3.3.2",
+%%% date = "23 September 1993",
+%%% time = "23:26:20 MET",
+%%% filename = "babel.doc",
+%%% address = "PTT Research
+%%% St. Paulusstraat 4
+%%% 2264 XZ Leidschendam
+%%% The Netherlands",
+%%% telephone = "(70) 3325051",
+%%% FAX = "(70) 3326477",
+%%% checksum = "52222 1292 6341 53569",
+%%% email = "J.L.Braams@research.ptt.nl (Internet)",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "babel",
+%%% supported = "yes",
+%%% docstring = "This file ,babel.doc contains the core of
+%%% the babel system as it was described in
+%%% TuGboat Volume 12 no 2 and Volume 14 no 1.
+%%%
+%%% The checksum field above contains a CRC-16
+%%% checksum as the first value, followed by the
+%%% equivalent of the standard UNIX wc (word
+%%% count) utility output of lines, words, and
+%%% characters. This is produced by Robert
+%%% Solovay's checksum utility.",
+%%% }
+%%% \fi
+%%
+\def\fileversion{babel-3.3.2}
+\def\filedate{23 september 1993}
+\wlog{Style option `babel' version \fileversion\space <\filedate>}
+\ifx\undefined\iflanguage
+ \input babel.switch\relax
+\fi
+\let\babel@core@loaded\relax
+\def\babel@add@special#1{\begingroup
+ \def\do{\noexpand\do\noexpand}%
+ \def\@makeother{\noexpand\@makeother\noexpand}%
+ \edef\x{\endgroup
+ \def\noexpand\dospecials{\dospecials\do#1}%
+ \expandafter\ifx\csname @sanitize\endcsname\relax \else
+ \def\noexpand\@sanitize{\@sanitize\@makeother#1}%
+ \fi}%
+ \x}
+\def\babel@remove@special#1{\begingroup
+ \def\x##1##2{\ifnum`#1=`##2\noexpand\empty
+ \else\noexpand##1\noexpand##2\fi}%
+ \def\do{\x\do}%
+ \def\@makeother{\x\@makeother}%
+ \edef\x{\endgroup
+ \def\noexpand\dospecials{\dospecials}%
+ \expandafter\ifx\csname @sanitize\endcsname\relax \else
+ \def\noexpand\@sanitize{\@sanitize}%
+ \fi}%
+ \x}
+\def\babel@beginsave{\babel@savecnt\z@}
+\newcount\babel@savecnt
+\babel@beginsave
+\def\babel@save#1{%
+ \expandafter\let\csname babel@\number\babel@savecnt\endcsname #1\relax
+ \begingroup
+ \toks@\expandafter{\originalTeX \let#1=}%
+ \edef\x{\endgroup
+ \def\noexpand\originalTeX{\the\toks@ \expandafter\noexpand
+ \csname babel@\number\babel@savecnt\endcsname\relax}}%
+ \x
+ \advance\babel@savecnt\@ne}
+\def\babel@savevariable#1{\begingroup
+ \toks@\expandafter{\originalTeX #1=}%
+ \edef\x{\endgroup
+ \def\noexpand\originalTeX{\the\toks@ \the#1\relax}}%
+ \x}
+\def\addto#1#2{%
+ \ifx\undefined#1\def#1{#2}\else
+ \expandafter\def\expandafter#1\expandafter{#1#2}%
+ \fi
+}
+\def\allowhyphens{\penalty\@M \hskip\z@skip}
+\def\set@low@box#1{\setbox\tw@\hbox{,}\setbox\z@\hbox{#1}%
+ \dimen\z@\ht\z@ \advance\dimen\z@ -\ht\tw@%
+ \setbox\z@\hbox{\lower\dimen\z@ \box\z@}\ht\z@\ht\tw@ \dp\z@\dp\tw@}
+\def\save@sf@q#1{{\ifhmode
+ \edef\@SF{\spacefactor\the\spacefactor}\else
+ \let\@SF\empty \fi \leavevmode #1\@SF}}
+{\def\format{lplain}
+\ifx\fmtname\format
+\else
+ \aftergroup\endinput
+\fi}
+\long\def\babel@sanitize@arg#1#2{\bgroup\def\@tempa{#2}%
+ \expandafter\babel@strip@meaning\meaning\@tempa\relax{#1}}
+\def\babel@strip@meaning#1->#2\relax#3{\egroup #3{#2}}
+\let\LTX@label=\label
+\def\label#1{\babel@sanitize@arg\LTX@label{#1}}
+\let\LTX@newlabel=\newlabel
+\def\newlabel#1#2{\babel@sanitize@arg\LTX@newlabel{#1}{#2}}
+\let\LTX@ref=\ref
+\def\ref#1{\babel@sanitize@arg\LTX@ref{#1}}
+\let\LTX@pageref=\pageref
+\def\pageref#1{\babel@sanitize@arg\LTX@pageref{#1}}
+\let\LTX@@citex\@citex
+\def\@citex[#1]#2{\babel@sanitize@arg{\LTX@@citex[#1]}{#2}}
+\let\LTX@nocite\nocite
+\def\nocite#1{\babel@sanitize@arg\LTX@nocite{#1}}
+\let\LTX@bibcite\bibcite
+\def\bibcite#1#2{\babel@sanitize@arg\LTX@bibcite{#1}{#2}}
+\let\LTX@@bibitem\@bibitem
+\def\@bibitem#1{\babel@sanitize@arg\LTX@@bibitem{#1}}
+\let\LTX@@lbibitem\@lbibitem
+\def\@lbibitem[#1]#2{\babel@sanitize@arg{\LTX@@lbibitem[#1]}{#2}}
+\let\LTX@@testdef=\@testdef
+\def\@testdef#1#2{\babel@sanitize@arg{\LTX@@testdef{#1}}{#2}}
+\endinput
+%%
+%% End of file `babel.com'.
diff --git a/obsolete/macros/latex209/contrib/ml/babel.sty b/obsolete/macros/latex209/contrib/ml/babel.sty
new file mode 100644
index 0000000000..ad6c30562f
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/ml/babel.sty
@@ -0,0 +1,207 @@
+%%
+%% This is file `babel.sty', generated on <1993/5/18>
+%% with the docstrip utility (2.0r).
+%%
+%% The original source file was `babel.doc'.
+%%
+%%
+%% IMPORTANT NOTICE:
+%% You are not allowed to distribute this file.
+%% For distribution of the original source see
+%% the copyright notice in the file babel.doc.
+%%
+\def\filename{babel.doc}
+\let\thisfilename\filename
+\def\fileversion{babel-3.0c}
+\def\filedate{15 july 1991}
+\def\docdate{6 juni 1991}
+%% \CheckSum{5282}
+%% \CharacterTable
+%% {Upper-case \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
+%% Lower-case \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
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%
+\wlog{Style option `babel' version \fileversion\space <\filedate>}
+\wlog{English documentation dated <\docdate>}
+\@ifundefined{iflanguage}{\input babel.switch\relax}{\relax}
+\let\babel@core@loaded\relax
+{\def\format{plain}
+\ifx\fmtname\format
+ \aftergroup\endinput
+\fi}
+\@ifundefined{doc@style}%
+ {\def\doc@style{0}%
+ \@ifundefined{opening}%
+ {\@ifundefined{chapter}%
+ {\def\doc@style{1}}%
+ {\def\doc@style{2}}%
+ }{\def\doc@style{3}}%
+ }{\relax}%
+\newif\if@restonecol
+\@ifundefined{figurename}{\def\fnum@figure{\figurename{} \thefigure}}{}
+\@ifundefined{tablename}{\def\fnum@table{\tablename{} \thetable}}{}
+\ifcase \doc@style\relax
+\or
+\@ifundefined{contentsname}%
+ {\def\tableofcontents{\section*{\contentsname%
+ \@mkboth{\uppercase\expandafter{\contentsname}}%
+ {\uppercase\expandafter{\contentsname}}}%
+ \@starttoc{toc}}}{}%
+
+\@ifundefined{listfigurename}%
+ {\def\listoffigures{\section*{\listfigurename\@mkboth%
+ {\uppercase\expandafter{\listfigurename}}%
+ {\uppercase\expandafter{\listfigurename}}}\@starttoc{lof}}}{}%
+
+\@ifundefined{listtablename}%
+ {\def\listoftables{\section*{\listtablename\@mkboth%
+ {\uppercase\expandafter{\listtablename}}%
+ {\uppercase\expandafter{\listtablename}}}\@starttoc{lot}}}{}%
+\@ifundefined{refname}%
+ {\def\thebibliography#1{\section*{\refname%
+ \@mkboth{\uppercase\expandafter{\refname}}%
+ {\uppercase\expandafter{\refname}}}%
+ \list{[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}
+ \leftmargin\labelwidth%
+ \advance\leftmargin\labelsep%
+ \usecounter{enumi}}%
+ \def\newblock{\hskip 0.11em plus 0.33em minus 0.07em}%
+ \sloppy\clubpenalty4000\widowpenalty4000%
+ \sfcode`\.=1000\relax}}{}%
+
+\@ifundefined{indexname}%
+ {\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi%
+ \columnseprule \z@%
+ \columnsep 35pt\twocolumn[\section*{\indexname}]%
+ \@mkboth{\uppercase\expandafter{\indexname}}%
+ {\uppercase\expandafter{\indexname}}\thispagestyle{plain}%
+ \parindent\z@ \parskip\z@ plus 0.3pt\relax\let\item\@idxitem}}{}%
+\@ifundefined{abstractname}%
+ {\def\abstract{\if@twocolumn%
+ \section*{\abstractname}%
+ \else \small%
+ \begin{center}%
+ {\bf \abstractname\vspace{-0.5em}\vspace{0pt}}%
+ \end{center}%
+ \quotation%
+ \fi}}{}%
+\@ifundefined{partname}%
+{\def\@part[#1]#2{\ifnum \c@secnumdepth >\m@ne % IF secnumdepth > -1
+ \refstepcounter{part} % THEN step part counter
+ \addcontentsline{toc}{part}{\thepart % add toc line
+ \hspace{1em}#1}\else % ELSE add unnumbered line
+ \addcontentsline{toc}{part}{#1}\fi % FI
+ { \parindent 0pt \raggedright
+ \ifnum \c@secnumdepth >\m@ne % IF secnumdepth > -1
+ \Large \bf \partname{} \thepart % THEN Print 'Part' and
+ \par \nobreak % number in \Large boldface.
+ \fi % FI
+ \huge \bf % Select \huge boldface.
+ #2\markboth{}{}\par } % Print title and set heading marks null.
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 3ex % Space between title and text.
+ \@afterheading % Routine called after part and
+ } % section heading.
+}{}%
+\or
+\@ifundefined{contentsname}%
+ {\def\tableofcontents{\@restonecolfalse%
+ \if@twocolumn\@restonecoltrue\onecolumn%
+ \fi\chapter*{\contentsname%
+ \@mkboth{\uppercase\expandafter{\contentsname}}%
+ {\uppercase\expandafter{\contentsname}}}%
+ \@starttoc{toc}\if@restonecol\twocolumn\fi}}{}%
+
+\@ifundefined{listfigurename}
+ {\def\listoffigures{\@restonecolfalse%
+ \if@twocolumn\@restonecoltrue\onecolumn%
+ \fi\chapter*{\listfigurename%
+ \@mkboth{\uppercase\expandafter{\listfigurename}}%
+ {\uppercase\expandafter{\listfigurename}}}%
+ \@starttoc{lof}\if@restonecol\twocolumn\fi}}{}%
+
+\@ifundefined{listtablename}
+ {\def\listoftables{\@restonecolfalse%
+ \if@twocolumn\@restonecoltrue\onecolumn%
+ \fi\chapter*{\listtablename%
+ \@mkboth{\uppercase\expandafter{\listtablename}}%
+ {\uppercase\expandafter{\listtablename}}}%
+ \@starttoc{lot}\if@restonecol\twocolumn\fi}}{}%
+\@ifundefined{bibname}
+ {\def\thebibliography#1{\chapter*{\bibname%
+ \@mkboth{\uppercase\expandafter{\bibname}}%
+ {\uppercase\expandafter{\bibname}}}%
+ \list{[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}%
+ \leftmargin\labelwidth \advance\leftmargin\labelsep%
+ \usecounter{enumi}}%
+ \def\newblock{\hskip 0.11em plus 0.33em minus 0.07em}%
+ \sloppy\clubpenalty4000\widowpenalty4000%
+ \sfcode`\.=1000\relax}}{}%
+
+\@ifundefined{indexname}
+ {\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi%
+ \columnseprule \z@%
+ \columnsep 35pt\twocolumn[\@makeschapterhead{\indexname}]%
+ \@mkboth{\uppercase\expandafter{\indexname}}%
+ {\uppercase\expandafter{\indexname}}%
+ \thispagestyle{plain}\parindent\z@%
+ \parskip\z@ plus 0.3pt\relax\let\item\@idxitem}}{}%
+\@ifundefined{abstractname}
+ {\def\abstract{\titlepage%
+ \null\vfil%
+ \begin{center}%
+ {\bf \abstractname}%
+ \end{center}}}{}%
+\@ifundefined{chaptername}{\def\@chapapp{\chaptername}}{}
+
+\@ifundefined{appendixname}
+ {\def\appendix{\par%
+ \setcounter{chapter}{0}%
+ \setcounter{section}{0}%
+ \def\@chapapp{\appendixname}%
+ \def\thechapter{\Alph{chapter}}}}{}%
+
+\@ifundefined{partname}
+ {\def\@part[#1]#2{\ifnum \c@secnumdepth >-2\relax% IF secnumdepth > -2
+ \refstepcounter{part} % THEN step part counter
+ \addcontentsline{toc}{part}{\thepart% add toc line
+ \hspace{1em}#1}\else % ELSE add unnumbered line
+ \addcontentsline{toc}{part}{#1}\fi % FI
+ \markboth{}{}
+ {\centering % %% added 19 Jan 88
+ \ifnum \c@secnumdepth >-2\relax % IF secnumdepth > -2
+ \huge\bf \partname{} \thepart % THEN Print 'Part' and number
+ \par % in \huge bold.
+ \vskip 20pt \fi % Add space before title.
+ \Huge \bf % FI
+ #1\par}\@endpart}}{} % Print Title in \Huge bold.
+\or
+\@ifundefined{ccname}%
+ {\def\cc#1{\par\noindent%
+ \parbox[t]{\textwidth}%
+ {\@hangfrom{\rm \ccname : }\ignorespaces #1\strut}\par}}{}%
+
+\@ifundefined{enclname}%
+ {\def\encl#1{\par\noindent%
+ \parbox[t]{\textwidth}%
+ {\@hangfrom{\rm \enclname : }\ignorespaces #1\strut}\par}}{}%
+\@ifundefined{headtoname}
+ {\def\ps@headings{%
+ \def\@oddhead{\sl \headtoname{} \ignorespaces\toname \hfil%
+ \@date \hfil \headpagename{} \thepage}%
+ \def\@oddfoot{}}}{}%
+\fi
+\endinput
+%%
+%% End of file `babel.sty'.
diff --git a/obsolete/macros/latex209/contrib/ml/babel.swi b/obsolete/macros/latex209/contrib/ml/babel.swi
new file mode 100644
index 0000000000..33d15a1aa7
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/ml/babel.swi
@@ -0,0 +1,138 @@
+%%
+%% This is file `babel.switch', generated
+%% on <1993/9/27> with the docstrip utility (2.0r).
+%%
+%% The original source files were:
+%%
+%% hyphen.doc
+%%
+%% Copyright (C) 1989-1993 by Johannes Braams.
+%% All rights reserved.
+%%
+%% This file is part of the Babel package, version 3.3.
+%%
+%% IMPORTANT NOTICE:
+%%
+%% You are not allowed to change this file. You may however copy
+%% this file to a file with a different name and then change the copy
+%% if you obey the restrictions on file changes described in
+%% readme.babel.
+%%
+%% You are allowed to distribute this file under the condition that
+%% it is distributed together with all files mentioned in readme.babel.
+%% If you receive only some of these files from someone, complain!
+%%
+%% You are NOT ALLOWED to distribute this file alone. You are NOT
+%% ALLOWED to take money for the distribution or use of either this
+%% file or a changed version, except for a nominal charge for copying
+%% etc.
+%%
+%% For error reports in case of UNCHANGED versions see readme files.
+%%
+%% Please do not request updates from me directly. Distribution is
+%% done through Mail-Servers and TeX organizations.
+%%
+%%%\iffalse
+%%% @LaTeX-style-file{
+%%% author = "Braams J.L.",
+%%% version = "1.1f",
+%%% date = "11 July 1993,
+%%% time = "00:08:27 MET,
+%%% filename = "hyphen.doc",
+%%% address = "PTT Research
+%%% St. Paulusstraat 4
+%%% 2264 XZ Leidschendam
+%%% The Netherlands",
+%%% telephone = "(70) 3325051",
+%%% FAX = "(70) 3326477",
+%%% checksum = "62265 567 3115 23933",
+%%% email = "J.L.Braams@research.ptt.nl (Internet)",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "babel",
+%%% supported = "yes",
+%%% abstract = "",
+%%% docstring = "This file contains the part of the babel
+%%% core that implements the language switching
+%%% mechanism. It also contains the code to
+%%% switch hyphenation tables for versions of
+%%% TeX later than 3.0. With the docstrip
+%%% program two variants of this file can be
+%%% produced.",
+%%% }
+%%% \fi
+\expandafter\ifx\csname iflanguage\endcsname\relax \else
+\expandafter\endinput
+\fi
+\ifx\language\undefined
+ \csname newcount\endcsname\language
+\fi
+\ifx\newlanguage\undefined
+ \csname newcount\endcsname\last@language
+\else
+ \countdef\last@language=19
+\fi
+\ifx\newlanguage\undefined
+ \def\addlanguage#1{%
+ \global\advance\last@language \@ne
+ \ifnum\last@language<\@cclvi
+ \else
+ \errmessage{No room for a new \string\language!}%
+ \fi
+ \global\chardef#1\last@language
+ \wlog{\string#1 = \string\language\the\last@language}}
+\else
+ \def\addlanguage{\alloc@9\language\chardef\@cclvi}
+\fi
+\def\adddialect#1#2{%
+ \global\chardef#1#2\relax
+ \wlog{\string#1 = a dialect from \string\language#2}}
+\def\iflanguage#1#2#3{%
+ \expandafter\ifx\csname l@#1\endcsname\relax
+ \@nolanerr{#1}%
+ \else
+ \ifnum\csname l@#1\endcsname=\language #2%
+ \else#3\fi
+ \fi}
+\def\selectlanguage#1{\protect\p@selectlanguage{%
+ \ifnum\escapechar=\expandafter`\string#1\empty
+ \else \string#1\empty\fi}}
+\ifx\undefined\protect\let\protect\relax\fi
+\def\p@selectlanguage#1{\relax
+ \expandafter\ifx\csname l@#1\endcsname\relax
+ \@nolanerr{#1}%
+ \else
+ \language=\csname l@#1\endcsname\relax
+ \originalTeX
+ \edef\languagename{#1}%
+ \expandafter\def\expandafter\originalTeX
+ \expandafter{\csname noextras#1\endcsname
+ \let\originalTeX\empty}%
+ \babel@beginsave
+ \csname captions#1\endcsname
+ \csname date#1\endcsname
+ \csname extras#1\endcsname\relax
+ \fi}%
+\ifx\undefined\originalTeX\let\originalTeX\empty\fi
+\ifx\undefined\babel@beginsave\let\babel@beginsave\relax\fi
+\def\@nolanerr#1{%
+ \errhelp{Your command will be ignored, type <return> to proceed}%
+ \errmessage{You haven't defined the language #1\space yet}}
+%% \CharacterTable
+%% {Upper-case \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
+%% Lower-case \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
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%
+\endinput
+%%
+%% End of file `babel.switch'.
diff --git a/obsolete/macros/latex209/contrib/ml/cmcyr.sty b/obsolete/macros/latex209/contrib/ml/cmcyr.sty
new file mode 100644
index 0000000000..47e02fceac
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/ml/cmcyr.sty
@@ -0,0 +1,277 @@
+%%
+%% This is file `cmcyr.sty'
+%% Modified for use with DVIps
+\def\fileversion{1.1}
+\def\filedate{94/09/16}
+\def\docdate {}
+
+\expandafter\ifx\csname daterussian\endcsname\else\endinput\fi
+\typeout{Style Option: `cmcyr'
+ \fileversion\space <\filedate>}
+%\typeout{English Documentation:
+% \@spaces\space <\docdate>}
+
+%\def\@fonterr#1#2{%
+%\edef\@tempc{#2}\expandafter\errhelp\expandafter{\@tempc}%
+%\typeout{Font Selection error.^^J
+% Type \space H <return> \space for immediate help.}\errmessage{#1}}
+%
+\wlog{Style Option: `cmcyr' \fileversion\space <\filedate>}
+\expandafter\ifx\csname selectfont\endcsname
+ \typeout{The `cmcyr' style option can only be used
+ ^^Jwith the new font selection scheme.}\endinput\fi
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Cyrillic
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%+
+% Medium weight series
+%-
+%
+% Cyrillic-Regular
+%
+\new@fontshape{cyr}{m}{n}{%
+ <5>cmcyr10 at4.82pt%
+ <6>cmcyr10 at6pt%
+ <7>cmcyr10 at6.94pt%
+ <8>cmcyr10 at8.33pt%
+ <9>cmcyr10 at9pt%
+ <10>cmcyr10 at10pt%
+ <11>cmcyr10 at10.95pt%
+ <12>cmcyr10 at12pt%
+ <14>cmcyr10 at14.4pt%
+ <17>cmcyr10 at17.28pt%
+ <20>cmcyr10 at20.74pt%
+ <25>cmcyr10 at24.88pt%
+ }{}
+%
+% Cyrillic-SansSerif
+%
+%\new@fontshape{cyr}{m}{sf}{%
+% <5>cmcss10 at4.82pt%
+% <6>cmcss10 at5.79pt%
+% <7>cmcss10 at6.94pt%
+% <8>cmcss10 at8.33pt%
+% <9>cmcss10 at9pt%
+% <10>cmcss10 at10pt%
+% <11>cmcss10 at10.95pt%
+% <12>cmcss10 at12pt%
+% <14>cmcss10 at14.4pt%
+% <17>cmcss10 at17.28pt%
+% <20>cmcss10 at20.74pt%
+% <25>cmcss10 at24.88pt%
+% }{}
+%
+% Cyrillic-Italic
+%
+\new@fontshape{cyr}{m}{it}{%
+ <5>cmcti10 at4.82pt%
+ <6>cmcti10 at5.79pt%
+ <7>cmcti10 at6.94pt%
+ <8>cmcti10 at8.33pt%
+ <9>cmcti10 at9pt%
+ <10>cmcti10 at10pt%
+ <11>cmcti10 at10.95pt%
+ <12>cmcti10 at12pt%
+ <14>cmcti10 at14.4pt%
+ <17>cmcti10 at17.28pt%
+ <20>cmcti10 at20.74pt%
+ <25>cmcti10 at24.88pt%
+ }{}
+%
+% Cyrillic-Slanted
+%
+\new@fontshape{cyr}{m}{sl}{%
+ <5>cmcsl10 at4.82pt%
+ <6>cmcsl10 at5.79pt%
+ <7>cmcsl10 at6.94pt%
+ <8>cmcsl10 at8.33pt%
+ <9>cmcsl10 at9pt%
+ <10>cmcsl10 at10pt%
+ <11>cmcsl10 at10.95pt%
+ <12>cmcsl10 at12pt%
+ <14>cmcsl10 at14.4pt%
+ <17>cmcsl10 at17.28pt%
+ <20>cmcsl10 at20.74pt%
+ <25>cmcsl10 at24.88pt%
+ }{}
+%
+% Cyrillic-TypewriterType
+%
+\new@fontshape{cyr}{m}{tt}{%
+ <5>cmctt10 at4.82pt%
+ <6>cmctt10 at5.79pt%
+ <7>cmctt10 at6.94pt%
+ <8>cmctt10 at8.33pt%
+ <9>cmctt10 at9pt%
+ <10>cmctt10 at10pt%
+ <11>cmctt10 at10.95pt%
+ <12>cmctt10 at12pt%
+ <14>cmctt10 at14.4pt%
+ <17>cmctt10 at17.28pt%
+ <20>cmctt10 at20.74pt%
+ <25>cmctt10 at24.88pt%
+ }{}
+%+
+% The bold weight series
+%-
+%
+% Cyrillic-Bold
+%
+\new@fontshape{cyr}{b}{n}{%
+ <5>cmcbx10 at4.82pt%
+ <6>cmcbx10 at5.79pt%
+ <7>cmcbx10 at6.94pt%
+ <8>cmcbx10 at8.33pt%
+ <9>cmcbx10 at9pt%
+ <10>cmcbx10 at10pt%
+ <11>cmcbx10 at10.95pt%
+ <12>cmcbx10 at12pt%
+ <14>cmcbx10 at14.4pt%
+ <17>cmcbx10 at17.28pt%
+ <20>cmcbx10 at20.74pt%
+ <25>cmcbx10 at24.88pt%
+ }{}
+%
+% Cyrillic-BoldItalic
+%
+\new@fontshape{cyr}{b}{it}{%
+ <5>cmcbxti1 at4.82pt%
+ <6>cmcbxti1 at5.79pt%
+ <7>cmcbxti1 at6.94pt%
+ <8>cmcbxti1 at8.33pt%
+ <9>cmcbxti1 at9pt%
+ <10>cmcbxti1 at10pt%
+ <11>cmcbxti1 at10.95pt%
+ <12>cmcbxti1 at12pt%
+ <14>cmcbxti1 at14.4pt%
+ <17>cmcbxti1 at17.28pt%
+ <20>cmcbxti1 at20.74pt%
+ <25>cmcbxti1 at24.88pt%
+ }{}
+%
+% Cyrillic-BoldSlanted
+%
+\new@fontshape{cyr}{b}{sl}{%
+ <5>cmcbxsl1 at4.82pt%
+ <6>cmcbxsl1 at5.79pt%
+ <7>cmcbxsl1 at6.94pt%
+ <8>cmcbxsl1 at8.33pt%
+ <9>cmcbxsl1 at9pt%
+ <10>cmcbxsl1 at10pt%
+ <11>cmcbxsl1 at10.95pt%
+ <12>cmcbxsl1 at12pt%
+ <14>cmcbxsl1 at14.4pt%
+ <17>cmcbxsl1 at17.28pt%
+ <20>cmcbxsl1 at20.74pt%
+ <25>cmcbxsl1 at24.88pt%
+ }{}
+%
+% Cyrillic-BoldSansSerif
+%
+\new@fontshape{cyr}{b}{sf}{%
+ <5>cmcssdc1 at4.82pt%
+ <6>cmcssdc1 at5.79pt%
+ <7>cmcssdc1 at6.94pt%
+ <8>cmcssdc1 at8.33pt%
+ <9>cmcssdc1 at9pt%
+ <10>cmcssdc1 at10pt%
+ <11>cmcssdc1 at10.95pt%
+ <12>cmcssdc1 at12pt%
+ <14>cmcssdc1 at14.4pt%
+ <17>cmcssdc1 at17.28pt%
+ <20>cmcssdc1 at20.74pt%
+ <25>cmcssdc1 at24.88pt%
+ }{}
+
+\extra@def{cyr}{}{}
+
+\def\graffiti{\protect\pgraffiti}
+\def\@makefnmark{\raise 1ex\hbox{\scriptsize\@thefnmark}}
+
+%+
+% Now make these fonts the defaults??
+%-
+\gdef\cyrmode{%
+\def\pgraffiti{\family{cyr}\series{c}\shape{sl}\size{9}{10pt}\selectfont}%
+ \chardef\Zh='021%
+ \chardef\zh='031%
+ \chardef\Ui='022%
+ \chardef\ui='032%
+ \chardef\Kh='110%
+ \chardef\kh='150%
+ \chardef\Ts='103%
+ \chardef\ts='143%
+ \chardef\Ch='121%
+ \chardef\ch='161%
+ \chardef\Sh='130%
+ \chardef\sh='170%
+ \chardef\Shch='127%
+ \chardef\shch='167%
+ \chardef\cDprime='137%
+ \chardef\cdprime='176%
+ \chardef\cPrime='136%
+ \chardef\cprime='176%
+ \chardef\Ee='003%
+ \chardef\ee='013%
+ \chardef\Yu='020%
+ \chardef\yu='030%
+ \chardef\Ya='027%
+ \chardef\ya='037}
+\gdef\transcyr{\family{cmr}\selectfont\@ifnextchar
+ [{\@transcyr}{\@transcyr[n]}}
+\def\@transcyr[#1]{\if #1s%
+ \def\Zh{\v{Z}}%
+ \def\zh{\v{z}}%
+ \def\Ui{J}%
+ \def\ui{j}%
+ \def\Kh{Ch}%
+ \def\kh{ch}%
+ \def\Ts{C}%
+ \def\ts{c}%
+ \def\Ch{\v{C}}%
+ \def\ch{\v{c}}%
+ \def\Sh{\v{S}}%
+ \def\sh{\v{s}}%
+ \def\Shch{\v{S}\v{c}}%
+ \def\shch{\v{s}\v{c}}%
+ \def\cprime{\kern0pt'\kern0pt\relax}%
+ \def\cPrime{\kern0pt'\kern0pt\relax}%
+ \def\cdprime{\kern0pt'\kern0pt'\kern0pt\relax}%
+ \def\cDprime{\kern0pt'\kern0pt'\kern0pt\relax}%
+ \def\Ee{\`{E}}%
+ \def\ee{\`{e}}%
+ \def\Yu{\t{J}{u}}%
+ \def\yu{\t{\j}{u}}%
+ \def\Ya{\t{J}{a}}%
+ \def\ya{\t{\j}{a}}%
+\else\if #1n%
+ \def\Zh{\t{Z}{h}}%
+ \def\zh{\t{z}{h}}%
+ \def\Ui{\t{U}{i}}%
+ \def\ui{\t{u}{i}}%
+ \def\Kh{\t{K}{h}}%
+ \def\kh{\t{k}{h}}%
+ \def\Ts{\t{T}{s}}%
+ \def\ts{\t{t}{s}}%
+ \def\Ch{\t{C}{h}}%
+ \def\ch{\t{c}{h}}%
+ \def\Sh{\t{S}{h}}%
+ \def\sh{\t{s}{h}}%
+ \def\Shch{\t{S}{h}\t{c}{h}}%
+ \def\shch{\t{s}{h}\t{c}{h}}%
+ \def\cprime{$^\prime$}%
+ \def\cPrime{$\underline{^\prime}$}%
+ \def\cDprime{$^{\prime\prime}$}%
+ \def\cdprime{$\underline{^{\prime\prime}}$}%
+ \def\Ee{\`{E}}%
+ \def\ee{\`{e}}%
+ \def\Yu{\t{Y}{u}}%
+ \def\yu{\t{y}{u}}%
+ \def\Ya{\t{Y}{a}}%
+ \def\ya{\t{y}{a}}%
+\fi\fi}
+\gdef\cyr{\family{cyr}\selectfont\cyrmode\frenchpunctuation}
+\endinput
diff --git a/obsolete/macros/latex209/contrib/ml/doc.sty b/obsolete/macros/latex209/contrib/ml/doc.sty
new file mode 100644
index 0000000000..f466b2e3be
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/ml/doc.sty
@@ -0,0 +1,741 @@
+%%
+%% This is file `doc.sty', generated
+%% on <1993/9/27> with the docstrip utility (2.0r).
+%%
+%% The original source files were:
+%%
+%% doc.doc (with options: `style,multicol')
+%%
+%% Copyright (C) 1989-1992 by Frank Mittelbach. All rights reserved.
+%%
+%% This file is part of the doc package.
+%%
+%% IMPORTANT NOTICE:
+%%
+%% You are not allowed to change this file. You may however copy
+%% this file to a file with a different name and then change the
+%% copy if you obey the restrictions on file changes described in
+%% readme.mz.
+%%
+%% You are NOT ALLOWED to distribute this file alone. You are NOT
+%% ALLOWED to take money for the distribution or use of this file
+%% (or a changed version) except for a nominal charge for copying
+%% etc.
+%%
+%% You are allowed to distribute this file under the condition that
+%% it is distributed together with all files mentioned in
+%% readme.mz0.
+%%
+%% If you receive only some of these files from someone, complain!
+%%
+%% However, if these files are distributed by established suppliers
+%% as part of a complete TeX distribution, and the structure of the
+%% distribution would make it difficult to distribute the whole set
+%% of files, *those parties* are allowed to distribute only some of
+%% the files provided that it is made clear that the user will get
+%% a complete distribution-set upon request to that supplier (not
+%% me). Notice that this permission is not granted to the end
+%% user.
+%%
+%%
+%% For error reports in case of UNCHANGED versions see readme.mz
+%%
+%%
+
+\def\fileversion{v1.7k}
+\def\filedate{92/08/24}
+\def\docdate {92/08/28}
+
+%% \CharacterTable
+%% {Upper-case \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
+%% Lower-case \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
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%
+
+%% Copyright (C) 1989-1992 Frank Mittelbach, all rights reserved.
+%%% \CharacterTable
+%%% {Upper-case \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
+%%% Lower-case \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
+%%% Digits \0\1\2\3\4\5\6\7\8\9
+%%% Exclamation \! Double quote \" Hash (number) \#
+%%% Dollar \$ Percent \% Ampersand \&
+%%% Acute accent \' Left paren \( Right paren \)
+%%% Asterisk \* Plus \+ Comma \,
+%%% Minus \- Point \. Solidus \/
+%%% Colon \: Semicolon \; Less than \<
+%%% Equals \= Greater than \> Question mark \?
+%%% Commercial at \@ Left bracket \[ Backslash \\
+%%% Right bracket \] Circumflex \^ Underscore \_
+%%% Grave accent \` Left brace \{ Vertical bar \|
+%%% Right brace \} Tilde \~}
+%%%
+\@ifundefined{macro@cnt}{}{\endinput} \typeout{Style-Option: `doc'
+\fileversion \@spaces\space\space <\filedate> (FMi)} \typeout{English
+ Documentation \@spaces\@spaces\space <\docdate> (DLo, FMi, RMCS)}
+\catcode`\^^A=14
+\def\macrocode{\macro@code
+ \frenchspacing \@vobeyspaces
+ \xmacro@code}
+\def\macro@code{%
+ \topsep \MacrocodeTopsep
+ \@beginparpenalty \predisplaypenalty
+ \trivlist \parskip \z@ \item[]%
+ \macro@font
+ \leftskip\@totalleftmargin \advance\leftskip\MacroIndent
+ \rightskip\z@ \parindent\z@ \parfillskip\@flushglue
+ \blank@linefalse \def\par{\ifblank@line
+ \leavevmode\fi
+ \blank@linetrue\@@par
+ \penalty\interlinepenalty}
+ \obeylines \let\do\@makeother \catcode`\`\active \@noligs \dospecials
+ \global\@newlistfalse
+ \global\@minipagefalse
+ \ifcodeline@index
+ \everypar{\global\advance\c@CodelineNo\@ne
+ \llap{\theCodelineNo\ \hskip\@totalleftmargin}%
+ \check@module}%
+ \else \everypar{\check@module}%
+ \fi
+ \init@crossref}
+\newif\ifblank@line
+\def\endmacrocode{%
+ \ifpm@module \endgroup \pm@modulefalse \fi
+ \everypar{}%
+ \global\@inlabelfalse
+ \endtrivlist
+ \close@crossref}
+\@ifundefined{MacroFont}{%
+ \ifx\undefined\selectfont
+ \def\MacroFont{\small\tt}\else
+ \def\MacroFont{\math@fontsfalse\reset@font\small\tt}\fi
+ }{}
+\@ifundefined{AltMacroFont}{%
+ \ifx\undefined\selectfont
+ \def\AltMacroFont{\small\tt}\else
+ \def\AltMacroFont{\math@fontsfalse\small\reset@font\it\tt}\fi
+ }{}
+\let\macro@font=\MacroFont
+\def\check@module{%
+ \ifcheck@modules
+ \ifpm@module \endgroup \pm@modulefalse \fi
+ \expandafter\futurelet\expandafter\next\expandafter\ch@percent
+ \fi}
+\newif\ifpm@module
+\def\DontCheckModules{\check@modulesfalse}
+\def\CheckModules{\check@modulestrue}
+\newif\ifcheck@modules \check@modulestrue
+\def\ch@percent{%
+ \if \percentchar\next
+ \expandafter\check@angle
+ \fi}
+\def\check@angle#1{\futurelet\next\ch@angle}
+\def\ch@angle{\if<\next
+ \expandafter\ch@plus@etc
+ \else \percentchar \fi}
+\def\ch@plus@etc<{\futurelet\next\check@plus@etc}
+\def\check@plus@etc{%
+ \if +\next
+ \let\next\pm@module
+ \else\if -\next
+ \let\next\pm@module
+ \else\if *\next
+ \let\next\star@module
+ \else\if /\next
+ \let\next\slash@module
+ \else
+ \let\next\pm@module
+ \fi\fi\fi\fi
+ \next}
+\def\pm@module#1>{\pm@moduletrue
+ \Module{#1}\begingroup
+ \advance\guard@level\@ne
+ \ifnum\guard@level>\c@StandardModuleDepth\AltMacroFont\fi
+}
+\def\star@module#1>{%
+ \Module{#1}%
+ \global \advance \guard@level\@ne
+ \ifnum \guard@level>\c@StandardModuleDepth
+ \global\let\macro@font=\AltMacroFont \macro@font
+ \fi}
+\def\slash@module#1>{%
+ \Module{#1}%
+ \global \advance \guard@level\m@ne
+ \ifnum \guard@level=\c@StandardModuleDepth
+ \global\let\macro@font\MacroFont \macro@font
+ \fi
+}
+\newcounter{StandardModuleDepth}
+\newcount \guard@level
+\@ifundefined{Module}{%
+ \ifx\undefined\selectfont
+ \def\Module#1{{\mod@math@codes$\fam\sffam\langle #1\rangle$}}
+ \else
+ \expandafter\ifx\csname ds@oldlfont\endcsname\relax
+ \def\Module#1{{\mod@math@codes$\langle\sfmath{#1}\rangle$}}
+ \else
+ \def\Module#1{{\mod@math@codes$\langle{\sfmath #1}\rangle$}}
+ \fi
+ \fi}{}
+\def\mod@math@codes{\mathcode`\|="226A \mathcode`\&="2026}
+\ifx\selectfont\undefined
+\else
+ \ifx\sfmath\undefined
+ \newmathalphabet*{\sfmath}{\sfdefault}{m}{n}\fi
+\fi
+\newskip\MacrocodeTopsep \MacrocodeTopsep = 3pt plus 1.2pt minus 1pt
+\newdimen\MacroIndent
+\settowidth\MacroIndent{\rm\scriptsize 00\ }
+\@namedef{macrocode*}{\macro@code\sxmacro@code}
+\expandafter\let\csname endmacrocode*\endcsname = \endmacrocode
+\catcode`\!=\catcode`\% ^^A In this section there must not be
+ ^^A any exclamation marks.
+ ^^A
+\begingroup
+\catcode`\|=\z@ \catcode`\[=\@ne \catcode`\]=\tw@
+\catcode`\{=12 \catcode`\}=12
+\catcode`\%=12 \catcode`\ =\active \catcode`\\=\active
+!% \end{macrocode*}
+! Next follows the actual definition of \verb+\macro@code+;
+! notice the
+! use of the new escape character. We manage to get the argument
+! surrounded by the string \verb+\end{macrocode}+, but at the end
+! however, in spite of the actual characters used during the
+! definition of
+! this macro, \verb+\end+ with the argument \verb+{macrocode}+
+! will be executed, to ensure a balanced environment.
+! \begin{macrocode*}
+|gdef|xmacro@code#1% \end{macrocode}[#1|end[macrocode]]
+!% \end{macrocode*}
+! \begin{macro}{\sxmacro@code}
+! The definition of \verb+\sxmacro@code+ is completely analogous,
+! only
+! here a slightly different terminating string will be used.
+! Note that the space is not active in this environment.
+! \begin{macrocode}
+|catcode`| =12
+|gdef|sxmacro@code#1% \end{macrocode*}[#1|end[macrocode*]]
+!% \end{macrocode}
+! because the \verb+\catcode+ changes have been made local by
+! commencing a
+! new group, there now follows the matching \verb+\endgroup+
+! in a rather
+! unusual style of writing.
+! \begin{macrocode}
+|endgroup
+!% \end{macrocode}
+\catcode`\!=12
+\def\DescribeMacro{\leavevmode\@bsphack
+ \begingroup\MakePrivateLetters\Describe@Macro}
+\def\Describe@Macro#1{\endgroup
+ \marginpar{\raggedleft\PrintDescribeMacro{#1}}%
+ \SpecialUsageIndex{#1}\@esphack\ignorespaces}
+\def\DescribeEnv{\leavevmode\@bsphack\begingroup\MakePrivateLetters
+ \Describe@Env}
+\def\Describe@Env#1{\endgroup
+ \marginpar{\raggedleft\PrintDescribeEnv{#1}}%
+ \SpecialEnvIndex{#1}\@esphack\ignorespaces}
+\reversemarginpar
+\setlength\marginparpush{0pt} \setlength\marginparwidth{8pc}
+{\catcode`\|=\z@ \catcode`\\=12
+|gdef|bslash{\}}
+\def\verbatim{\@beginparpenalty \predisplaypenalty \@verbatim
+ \MacroFont \frenchspacing \@vobeyspaces \@xverbatim}
+\@namedef{verbatim*}{\@beginparpenalty \predisplaypenalty \@verbatim
+ \MacroFont \@sxverbatim}
+\def\@verbatim{\trivlist \item[]\if@minipage\else\vskip\parskip\fi
+ \leftskip\@totalleftmargin\rightskip\z@
+ \parindent\z@\parfillskip\@flushglue\parskip\z@
+ \@@par
+ \@tempswafalse
+ \def\par{\if@tempswa\hbox{}\fi\@tempswatrue\@@par
+ \penalty\interlinepenalty
+ \check@percent}%
+ \obeylines \catcode`\`\active \@noligs \let\do\@makeother
+ \dospecials}
+{\catcode`\%=12
+ \long\gdef\check@percent#1{\ifx #1%\let\next\@empty \else
+ \let\next=#1\fi \next}}
+\begingroup
+ \lccode`\~=`\^^M
+ \lowercase{%
+ \gdef\verb{\relax
+ \ifmmode \hbox \else \leavevmode\null \fi
+ \bgroup
+ \tt \catcode`\`\active \@noligs
+ \let~\verb@err
+ \catcode`\^^M\active
+ \let\do\@makeother \dospecials
+ \@ifstar\@sverb{\@vobeyspaces \frenchspacing \@sverb}}}
+\endgroup
+\def\verb@err{\egroup\@latexerr{\string\verb\space
+ command ended by end of line.}\@ehc}
+\def\@sverb#1{%
+ \catcode`#1\active \lccode`\~`#1%
+ \lowercase{\let~\egroup}}
+\newcount\macro@cnt \macro@cnt=0
+\newcount\macro@level \macro@level=0
+\def\macro{%
+ \ifnum\macro@level=\z@ \begingroup \fi
+ \catcode`\\12
+ \MakePrivateLetters \m@cro@}
+\long\def\m@cro@#1{\endgroup \topsep\MacroTopsep \trivlist
+ \advance\macro@level\@ne
+ \edef\saved@macroname{\string#1}%
+ \def\makelabel##1{\llap{##1}}%
+ \if@inlabel
+ \let\@tempa\@empty \count@\macro@cnt
+ \loop \ifnum\count@>\z@
+ \edef\@tempa{\@tempa\hbox{\strut}}\advance\count@\m@ne \repeat
+ \edef\makelabel##1{\llap{\vtop to\baselineskip
+ {\@tempa\hbox{##1}\vss}}}%
+ \advance \macro@cnt \@ne
+ \else \macro@cnt\@ne \fi
+ \edef\@tempa{\noexpand\item[\noexpand\PrintMacroName{\string#1}]}%
+ \@tempa
+ {\advance\c@CodelineNo\@ne\SpecialMainIndex{#1}\nobreak}%
+ \DoNotIndex{#1}%
+ \ignorespaces}
+\def\endmacro{%
+ \endtrivlist
+ \ifnum\macro@level>\@ne \advance\macro@level\m@ne \begingroup \fi}
+\newskip\MacroTopsep \MacroTopsep = 7pt plus 2pt minus 2pt
+\@ifundefined{PrintMacroName}
+ {\def\PrintMacroName#1{\strut \MacroFont \string #1\ }}{}
+\@ifundefined{PrintDescribeMacro}
+ {\def\PrintDescribeMacro#1{\strut \MacroFont \string #1\ }}{}
+\@ifundefined{PrintDescribeEnv}
+ {\def\PrintDescribeEnv#1{\strut \MacroFont #1\ }}{}
+\begingroup
+\catcode`\~\active
+\gdef\SpecialEscapechar#1{%
+ \begingroup
+ \uccode`\~`#1%
+ \uppercase{\gdef\active@escape@char{~}}%
+ \escapechar\m@ne \xdef\special@escape@char{\string#1}%
+ \endgroup}
+\endgroup
+\begingroup \catcode`\|=\z@ \catcode`\\=\active
+|gdef|init@crossref{|catcode`|\|active |let\|bslash
+ |MakePrivateLetters
+ |catcode|expandafter`|special@escape@char|active
+ |expandafter|let|active@escape@char|scan@macro}
+|endgroup
+\SpecialEscapechar{\\}
+\@ifundefined{MakePrivateLetters}
+ {\let\MakePrivateLetters\makeatletter}{}
+\def\close@crossref{\SpecialEscapechar\\}
+\def\scan@macro{%
+ \special@escape@char
+ \step@checksum
+ \ifscan@allowed
+ \let\macro@namepart\@empty
+ \def\next{\futurelet\next\macro@switch}%
+ \else \let\next\@empty \fi
+ \next}
+\newif\ifscan@allowed \scan@allowedtrue
+\def\DisableCrossrefs{\@bsphack\scan@allowedfalse\@esphack}
+\def\EnableCrossrefs{\@bsphack\scan@allowedtrue
+ \def\DisableCrossrefs{\@bsphack\@esphack}\@esphack}
+\def\macro@switch{\ifcat\noexpand\next a%
+ \let\next\macro@name
+ \else \let\next\short@macro \fi
+ \next}
+\def\short@macro#1{\begingroup
+ \catcode`\&=11 \uccode`\&=\expandafter`\string#1%
+ \uppercase{\def\macro@namepart{&}}%
+ \endgroup
+ \ifnot@excluded
+ \produce@index{#1}\fi
+ \scan@allowedfalse#1%
+ \scan@allowedtrue }
+\def\produce@index#1{%
+ \if\noexpand#1\special@escape@char
+ \scan@allowedfalse \it@is@a\special@escape@char \else
+ \if\noexpand#1\bslash \it@is@a\bslash \else
+ \if\noexpand#1\space \it@is@a\space \else
+ \ifx#1\par
+ \it@is@a\space \else
+ \ifx#1\relax \else
+ \if\noexpand#1\bgroup \LeftBraceIndex \else
+ \if\noexpand#1\egroup \RightBraceIndex \else
+ \if\noexpand#1\percentchar \PercentIndex \else
+ \it@is@a{\string#1}%
+ \fi \fi \fi \fi \fi \fi \fi \fi}
+\def\macro@name#1{\edef\macro@namepart{\macro@namepart#1}%
+ \futurelet\next\more@macroname}
+\def\more@macroname{\ifcat\noexpand\next a%
+ \let\next\macro@name
+ \else \let\next\macro@finish \fi
+ \next}
+\def\macro@finish{%
+ \macro@namepart
+ \ifnot@excluded
+ \edef\@tempa{\noexpand\SpecialIndex{\bslash\macro@namepart}}%
+ \@tempa \fi}
+\def\DoNotIndex{\begingroup \MakePrivateLetters
+ \catcode`\\12
+ \do@not@index}
+\long\def\do@not@index#1{%
+ \endgroup
+ \addto@hook\index@excludelist{#1,}}
+\long\def\addto@hook#1#2{#1\expandafter{\the#1#2}}
+\newtoks\index@excludelist
+\index@excludelist{}
+\begingroup
+\catcode`\|=0%
+\catcode`\\=12
+|gdef|ifnot@excluded{|expandafter
+ |expanded@notin|expandafter{|expandafter
+ \|macro@namepart,}{|the|index@excludelist}}
+|endgroup
+\def\expanded@notin#1#2{%
+ \def\in@@##1#1##2##3\in@@{%
+ \ifx\expanded@notin##2}%
+ \expandafter\in@@#2#1\expanded@notin\in@@}
+\@ifundefined{actualchar}{\def\actualchar{=}}{}
+\@ifundefined{quotechar}{\def\quotechar{!}}{}
+\@ifundefined{levelchar}{\def\levelchar{>}}{}
+\@ifundefined{encapchar}{\def\encapchar{|}}{}
+\@ifundefined{verbatimchar}{\def\verbatimchar{+}}{}
+\def\SpecialIndex#1{\@bsphack\special@index{\expandafter\@gobble
+ \string#1\actualchar
+ \string\verb\quotechar*\verbatimchar\string#1\verbatimchar}%
+ \@esphack}
+
+\def\SpecialMainIndex#1{\@bsphack\special@index{\expandafter\@gobble
+ \string#1\actualchar
+ \string\verb
+ \quotechar*\verbatimchar
+ \string#1\verbatimchar
+ \encapchar main}%
+ \@esphack}
+\def\SpecialUsageIndex#1{\@bsphack\index{\expandafter\@gobble\string#1%
+ \actualchar\string\verb\quotechar*\verbatimchar
+ \string#1\verbatimchar
+ \encapchar usage}\@esphack}
+\def\SpecialEnvIndex#1{\@bsphack
+ \index{#1\actualchar{\tt #1} (environment)\encapchar usage}%
+ \index{environments:\levelchar{\tt #1}\encapchar usage}\@esphack}
+\def\SortIndex#1#2{\index{#1\actualchar#2}}
+\def\it@is@a#1{\special@index{\quotechar #1\actualchar
+ \string\verb\quotechar*\verbatimchar
+ \quotechar\bslash\quotechar#1\verbatimchar}}
+\@ifundefined{LeftBraceIndex}{\def\LeftBraceIndex{%
+ \special@index{\bgroup\actualchar\string\verb\quotechar*\verbatimchar
+ \quotechar\bslash{\verbatimchar\string\iffalse}\string\fi}}}{}
+
+\@ifundefined{RightBraceIndex}{\def\RightBraceIndex{%
+ \special@index{\egroup\actualchar\string\iffalse{\string\fi\string\verb
+ \quotechar*\verbatimchar\quotechar\bslash}\verbatimchar}}}{}
+\@ifundefined{PercentIndex}
+ {\def\PercentIndex{\it@is@a\percentchar}}{}
+\def\OldMakeindex{\def\PercentIndex{%
+ \special@index{\quotechar\percentchar\actualchar\string\verb
+ \quotechar*\verbatimchar\quotechar\bslash
+ \percentchar\percentchar\verbatimchar}}}
+{\catcode`\%=12 \gdef\percentchar{%}}
+\newif\ifhave@multicol
+\openin\@ne multicol.sty
+\ifeof\@ne \else \have@multicoltrue \fi
+\closein\@ne \relax
+\have@multicoltrue
+\ifhave@multicol \input{multicol.sty} \fi
+\newdimen\IndexMin \IndexMin = 80pt
+\newcount\c@IndexColumns \c@IndexColumns = 3
+\ifhave@multicol
+ \renewenvironment{theindex}
+ {\begin{multicols}\c@IndexColumns[\index@prologue][\IndexMin]%
+ \IndexParms \let\item\@idxitem \ignorespaces}%
+ {\end{multicols}}
+\else
+ \typeout{Can't find multicols.sty -- will use normal index layout if
+ necessary.}
+ \def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+ \columnseprule \z@ \columnsep 35\p@
+ \twocolumn[\index@prologue]%
+ \IndexParms \let\item\@idxitem \ignorespaces}
+ \def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
+\fi
+\long\def\IndexPrologue#1{\@bsphack\def\index@prologue{#1}\@esphack}
+\@ifundefined{index@prologue}
+ {\def\index@prologue{\section*{Index}%
+ \markboth{Index}{Index}%
+ The italic numbers denote the pages where the
+ corresponding entry is described,
+ numbers underlined point to the definition,
+ all others indicate the places where it is used.
+ }}{}
+\@ifundefined{IndexParms}
+ {\def\IndexParms{%
+ \parindent \z@
+ \columnsep 15pt
+ \parskip 0pt plus 1pt
+ \rightskip 15pt
+ \mathsurround \z@
+ \parfillskip=-15pt
+ \small
+ \def\@idxitem{\par\hangindent 30pt}%
+ \def\subitem{\@idxitem\hspace*{15pt}}%
+ \def\subsubitem{\@idxitem\hspace*{25pt}}%
+ \def\indexspace{\par\vspace{10pt plus 2pt minus 3pt}}%
+ }}{}
+\def\efill{\hfill\nopagebreak}%
+\def\dotfill{\leaders\hbox to.6em{\hss .\hss}\hskip\z@ plus 1fill}%
+\def\dotfil{\leaders\hbox to.6em{\hss .\hss}\hfil}%
+\def\pfill{\unskip~\dotfill\penalty500\strut\nobreak
+ \dotfil~\ignorespaces}%
+\def\*{\leavevmode\lower.8ex\hbox{$\,\widetilde{\ }\,$}}
+\@ifundefined{main}{\def\main#1{\underline{#1}}}{}
+\@ifundefined{usage}{\def\usage#1{{\it #1}}}{}
+\def\PrintIndex{\@input{\jobname.ind}}
+\def\printindex{\typeout{\string\printindex\space is obsolete!}%
+ \typeout{Please use \string\PrintIndex\space
+ if you are a macro implementor^^J
+ or get a newer version of the documented
+ software if you are a user}%
+ \PrintIndex}
+\def\changes{\@bsphack\begingroup\@sanitize
+ \catcode`\\\z@ \catcode`\ 10 \MakePercentIgnore
+ \changes@}
+\def\changes@#1#2#3{%
+ \def\protect##1{\string##1\space}%
+ \edef\@tempa{\noexpand\glossary{#1\levelchar
+ \expandafter\@gobble
+ \saved@macroname\actualchar
+ \string\verb\quotechar*%
+ \verbatimchar\saved@macroname
+ \verbatimchar:\levelchar #3}}%
+ \@tempa\endgroup\@esphack}
+\def\saved@macroname{"General"}
+\let\RecordChanges\makeglossary
+\newdimen\GlossaryMin \GlossaryMin = 80pt
+\newcount\c@GlossaryColumns \c@GlossaryColumns = 2
+\ifhave@multicol
+ \newenvironment{theglossary}{%
+ \begin{multicols}\c@GlossaryColumns
+ [\glossary@prologue][\GlossaryMin]%
+ \GlossaryParms \let\item\@idxitem \ignorespaces}%
+ {\end{multicols}}
+\else
+ \newenvironment{theglossary}{%
+ \@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+ \columnseprule \z@ \columnsep 35\p@
+ \twocolumn[\glossary@prologue]%
+ \GlossaryParms \let\item\@idxitem \ignorespaces}
+ {\if@restonecol\onecolumn\else\clearpage\fi}
+\fi
+\long\def\GlossaryPrologue#1{\@bsphack
+ \def\glossary@prologue{#1}%
+ \@esphack}
+\@ifundefined{glossary@prologue}
+ {\def\glossary@prologue{\section*{{Change History}}%
+ \markboth{{Change History}}{{Change History}}%
+ }}{}
+\@ifundefined{GlossaryParms}{\let\GlossaryParms\IndexParms}{}
+\def\PrintChanges{\@input{\jobname.gls}}
+\long\def\StopEventually#1{\@bsphack\gdef\Finale{#1%
+ \check@checksum}%
+ \init@checksum
+ \@esphack}
+\def\OnlyDescription{\@bsphack\long\def\StopEventually##1{%
+ ##1\endinput}\@esphack}
+\begingroup
+\obeyspaces%
+\catcode`\^^M\active%
+\gdef\meta{\begingroup\obeyspaces\catcode`\^^M\active%
+\let^^M\do@space\let \do@space%
+\def\-{\egroup\discretionary{-}{}{}\hbox\bgroup\it}%
+\m@ta}%
+\endgroup
+\def\m@ta#1{\leavevmode\hbox\bgroup$\langle$\it#1\/$\rangle$\egroup
+ \endgroup}
+\def\do@space{\egroup\space
+ \hbox\bgroup\it\futurelet\next\sp@ce}
+\def\sp@ce{\ifx\next\do@space\expandafter\sp@@ce\fi}
+\def\sp@@ce#1{\futurelet\next\sp@ce}
+\def\IndexInput#1{%
+ \begingroup \macro@code
+ \frenchspacing \@vobeyspaces
+ \input{#1}\endmacrocode
+ \endgroup}
+\def\maketitle{\par
+ \begingroup \def \thefootnote {\fnsymbol {footnote}}%
+ \setcounter {footnote}\z@
+ \def \@makefnmark {\hbox to \z@{$^{\@thefnmark }$\hss }}%
+ \if@twocolumn \twocolumn [\@maketitle ]%
+ \else \newpage \global \@topnum \z@ \@maketitle \fi
+ \thispagestyle{titlepage}\@thanks \endgroup
+ \setcounter {footnote}\z@
+ \gdef\@date{\today}\gdef\@thanks{}%
+ \gdef\@author{}\gdef\@title{}}
+\@ifundefined{ps@titlepage}
+ {\let\ps@titlepage=\ps@plain}{}
+\def\MakeShortVerb#1{%
+ \typeout{*** Made \expandafter\@gobble\string#1\space a short
+ reference for \string\verb \on@line\space ***}%
+ \add@special{#1}%
+ \expandafter
+ \xdef\csname cc\string#1\endcsname{\the\catcode`#1}%
+ \begingroup
+ \catcode`\~\active \lccode`\~`#1%
+ \lowercase{%
+ \global\expandafter\let
+ \csname ac\string#1\endcsname~%
+ \gdef~{\verb~}}%
+ \endgroup
+ \global\catcode`#1\active}
+\def\DeleteShortVerb#1{%
+ \expandafter\ifx\csname cc\string#1\endcsname\relax
+ \else
+ \typeout{*** Deleted \expandafter\@gobble\string#1\space as short
+ reference for \string\verb \on@line\space ***}%
+ \rem@special{#1}%
+ \global\catcode`#1\csname cc\string#1\endcsname
+ \ifnum\catcode`#1=\active
+ \begingroup
+ \catcode`\~\active \lccode`\~`#1%
+ \lowercase{%
+ \global\expandafter\let\expandafter~%
+ \csname ac\string#1\endcsname}%
+ \endgroup \fi \fi}
+\def\add@special#1{%
+ \rem@special{#1}%
+ \expandafter\gdef\expandafter\dospecials\expandafter
+ {\dospecials \do #1}%
+ \expandafter\gdef\expandafter\@sanitize\expandafter
+ {\@sanitize \@makeother #1}}
+\def\rem@special#1{%
+ \def\do##1{%
+ \ifnum`#1=`##1 \else \noexpand\do\noexpand##1\fi}%
+ \xdef\dospecials{\dospecials}%
+ \begingroup
+ \def\@makeother##1{%
+ \ifnum`#1=`##1 \else \noexpand\@makeother\noexpand##1\fi}%
+ \xdef\@sanitize{\@sanitize}%
+ \endgroup}
+\def\MakeShortverb{\typeout{*** Switch to \noexpand\MakeShortVerb
+ syntax, this is obsolete ***}\MakeShortVerb}
+\def\DeleteShortverb{\typeout{*** Switch to \noexpand\DeleteShortVerb
+ syntax, this is obsolete ***}\DeleteShortVerb}
+\def\init@checksum{\relax
+ \global\bslash@cnt\z@}
+\def\check@checksum{\relax
+ \ifnum\check@sum=\z@
+ \typeout{**********************************}%
+ \typeout{* This macro file has no checksum!}%
+ \typeout{* The checksum should be \the\bslash@cnt!}%
+ \typeout{**********************************}%
+ \else
+ \ifnum\check@sum=\bslash@cnt
+ \typeout{*******************}%
+ \typeout{* Checksum passed *}%
+ \typeout{*******************}%
+ \else
+ \errhelp\wrong@checksum
+ \errmessage{Checksum not passed
+ (\the\check@sum<>\the\bslash@cnt)}%
+ \fi
+ \fi
+ \global\check@sum\z@}
+\newcount\check@sum \check@sum = \z@
+\newcount\bslash@cnt \bslash@cnt = \z@
+\newhelp\wrong@checksum
+ {The currently documented file seems to be wrong.^^J%
+ Try to get a correct version.}%
+\def\CheckSum#1{\@bsphack\global\check@sum#1\relax\@esphack}
+\def\step@checksum{\global\advance\bslash@cnt\@ne}
+\def\CharacterTable{\begingroup \CharTableChanges \character@table}
+\begingroup
+ \catcode`\~=11
+ \gdef\character@table#1{\def\used~table{#1}%
+ \ifx\used~table\default~table
+ \typeout{***************************}%
+ \typeout{* Character table correct *}%
+ \typeout{***************************}%
+ \else
+ \errhelp\wrong@table
+ \errmessage{Character table corrupted}%
+ \show\default~table
+ \show\used~table
+ \fi
+ \endgroup}
+ \global\let\CharTableChanges\@empty
+ \makeatother
+ \gdef\default~table
+ {Upper-case \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
+ Lower-case \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
+ Digits \0\1\2\3\4\5\6\7\8\9
+ Exclamation \! Double quote \" Hash (number) \#
+ Dollar \$ Percent \% Ampersand \&
+ Acute accent \' Left paren \( Right paren \)
+ Asterisk \* Plus \+ Comma \,
+ Minus \- Point \. Solidus \/
+ Colon \: Semicolon \; Less than \<
+ Equals \= Greater than \> Question mark \?
+ Commercial at \@ Left bracket \[ Backslash \\
+ Right bracket \] Circumflex \^ Underscore \_
+ Grave accent \` Left brace \{ Vertical bar \|
+ Right brace \} Tilde \~}
+\endgroup
+ \newhelp\wrong@table{Some of the ASCII characters are corrupted.^^J
+ I now \string\show\space you both tables for comparison.}
+\newif\ifcodeline@index \codeline@indexfalse
+\def\codeline@wrindex#1{\if@filesw
+ \immediate\write\@indexfile
+ {\string\indexentry{#1}%
+ {\number\c@CodelineNo}}\fi}
+\let\special@index = \@gobble
+\def\CodelineIndex{\makeindex
+ \codeline@indextrue
+ \let\special@index\codeline@wrindex}
+\def\PageIndex{\makeindex
+ \codeline@indexfalse
+ \let\special@index\index}
+\newcount\c@CodelineNo \c@CodelineNo\z@
+\@ifundefined{theCodelineNo}
+ {\ifx\selectfont\undefined
+ \def\theCodelineNo{\rm\scriptsize\arabic{CodelineNo}}%
+ \else
+ \def\theCodelineNo{\reset@font\scriptsize\arabic{CodelineNo}}%
+ \fi}
+ {}
+ \tolerance=1000\relax
+{ \catcode`\"=12
+ \global\mathcode`\\="705C \global\mathcode`\@="7040 }
+\@ifundefined{DocstyleParms}{}{}
+\DocstyleParms \let\DocstyleParms\relax
+\@ifundefined{AmSTeX}
+ {\def\AmSTeX{\leavevmode\hbox{$\cal A\kern-.2em\lower.376ex%
+ \hbox{$\cal M$}\kern-.2em\cal S$-\TeX}}}{}
+\@ifundefined{BibTeX}
+ {\def\BibTeX{{\rm B\kern-.05em{\sc i\kern-.025em b}\kern-.08em%
+ T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}}{}
+\@ifundefined{SliTeX}
+ {\def\SliTeX{{\rm S\kern-.06emL\kern-.18em\raise.32ex\hbox
+ {\sc i}\kern -.03em\TeX}}}{}
+\@ifundefined{PlainTeX}{\def\PlainTeX{{\sc Plain}\kern2pt\TeX}}{}
+\@ifundefined{Web}{\def\Web{{\sc Web}}}{}
+\def\MakePercentIgnore{\catcode`\%9\relax}
+\def\MakePercentComment{\catcode`\%14\relax}
+\def\DocInput#1{\MakePercentIgnore\input{#1}\MakePercentComment}
+\ifx\on@line\undefined
+ \def\on@line{ on input line \the\inputlineno}
+ \errhelp{Support for input line numbers has been added
+ to latex.tex <dec91>.^^J^^J%
+ Please update to a newer LaTeX release.}
+ \errmessage{Obsolete LaTeX release (older than Dec.91)}
+\fi
+\endinput
+%%
+%% End of file `doc.sty'.
diff --git a/obsolete/macros/latex209/contrib/ml/dutch.tex b/obsolete/macros/latex209/contrib/ml/dutch.tex
new file mode 100644
index 0000000000..9ec0817281
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/ml/dutch.tex
@@ -0,0 +1,199 @@
+%%
+%% This is file `dutch.tex', generated on <1994/9/16>
+%%
+\def\filename{dutch.tex}
+\def\fileversion{dutch-1.2}
+\def\filedate{16 sept 1994}
+%%
+{\def\format{plain}
+\ifx\fmtname\format
+ \expandafter\ifx\csname @ifundefined\endcsname\relax
+ \gdef\next{latexhax.com}
+ \aftergroup\input\aftergroup\next
+ \fi
+\fi}
+\chardef\atcatcode=\catcode`\@
+\makeatletter
+\@ifundefined{captionsdutch}{}{\catcode`\@=\atcatcode\endinput}
+\wlog{Language: `Dutch' version \fileversion\space<\filedate>}
+\ifx\undefined\babel@core@loaded\input babel.com\fi
+\ifx\undefined\originalTeX \let\originalTeX\relax \else\originalTeX\fi
+\ifx\undefined\l@dutch
+ \message{!! The language `Dutch' doesn't have hyphenation patterns.}
+ \message{!! I will use the patterns loaded for \string\language=0 instead.}
+ \adddialect\l@dutch0\fi
+\def\captionsdutch{%
+\def\dashes{--}%
+\def\leftquotes{\dlqq}%
+\def\rightquotes{\drqq}%
+\def\presentname{Aanwezig:}%
+\def\notpresentname{Niet Aanwezig:}%
+\def\agendaname{Agenda}%
+\def\openname{Opening}%
+\def\signname{Getekend:}%
+\def\tlxname{telex:}%
+\def\telname{telefoon:}%
+\def\faxname{telefax:}%
+\def\emailname{E-mail:}%
+\def\fidoname{Fidonet:}%
+\def\bankname{rekeningnr.:}%
+\def\of{van }%
+\def\Of{van }%
+\def\In{In }%
+\def\from{Uit }%
+\def\and{en }%
+\def\page{p. }%
+\def\pages{pp. }%
+\def\atplace{te }%
+\def\volume{Deel}%
+\def\editor{(ed.)}%
+\def\editors{(eds.)}%
+\def\ownedition{Uitgegeven in eigen beheer}%
+\def\first{Eerste druk}%
+\def\second{Tweede druk}%
+\def\third{Derde druk}%
+\def\secondrevised{Tweede herziene druk}%
+\def\thirdrevised{Derde herziene druk}%
+\def\fourthrevised{Vierde herziene druk}%
+\def\fifthrevised{Vijfde herziene druk}%
+\def\sixthrevised{Zesde herziene druk}%
+\def\seventhrevised{Zevende herziene druk}%
+\def\eightthrevised{Achtste herziene druk}%
+\def\ninthrevised{Negende herziene druk}%
+\def\higher{$^{\rm e}$ druk}%
+\def\technicalreport{Intern Rapport}%
+\def\masters{Doktoraalskriptie}%
+\def\conference{Referaat voor een Congres }%
+\def\phdthesis{Dissertatie}%
+\def\tbp{Nog te publiceren}%
+\def\seename{zie ook}%
+\def\jan{januari }%
+\def\feb{februari }%
+\def\mar{maart }%
+\def\apr{april }%
+\def\may{mei }%
+\def\jun{juni }%
+\def\jul{juli }%
+\def\aug{augustus }%
+\def\sep{september }%
+\def\oct{oktober }%
+\def\nov{november }%
+\def\dec{december }%
+\def\exercisename{Oefening}%
+\def\lessonname{Les}%
+\def\prefname{Voorwoord}%
+\def\refname{Referenties}%
+\def\rename{Onderwerp:}%
+\def\yourlettername{Uw brief van}%
+\def\yourrefname{Uw kenmerk}%
+\def\ourrefname{Ons kenmerk}%
+\def\datetext{Datum}%
+\def\abstractname{Samenvatting}%
+\def\bibname{Bibliografie}%
+\def\notesname{Noten}%
+\def\chaptername{Hoofdstuk}%
+\def\appendixname{Bijlage:}%
+\def\contentsname{Inhoudsopgave}%
+\def\listfigurename{Lijst van figuren}%
+\def\listtablename{Lijst van tabellen}%
+\def\indexname{Index}%
+\def\figurename{Figuur}%
+\def\tablename{Tabel}%
+\def\partname{Deel}%
+\def\enclname{Bijlagen:}%
+\def\ccname{i.a.a.:}%
+\def\psname{P.S.:}%
+\def\headtoname{Geaddresseerde}%
+\def\headpagename{Bladnummer}%
+\def\arabicedname{Arabische uitgave}%
+\def\croatianedname{Kroatische uitgave}%
+\def\czechedname{Tsjechische uitgave}%
+\def\danishedname{Deense uitgave}%
+\def\dutchedname{Nederlandse uitgave}%
+\def\englishedname{Engelse uitgave}%
+\def\esperantoedname{Esperanto uitgave}%
+\def\finnishedname{Finse uitgave}%
+\def\frenchedname{Franse uitgave}%
+\def\germanedname{Duitse uitgave}%
+\def\greekedname{Griekse uitgave}%
+\def\hebrewedname{Hebreeuwse uitgave}%
+\def\hindiedname{Hindi uitgave}%
+\def\italianedname{Italiaanse uitgave}%
+\def\maasaiedname{Maasai uitgave}%
+\def\magyaredname{Hongaarse uitgave}%
+\def\norskedname{Noorse uitgave}%
+\def\polishedname{Poolse uitgave}%
+\def\portugesedname{Portugese uitgave}%
+\def\romanianedname{Roemeense uitgave}%
+\def\russianedname{Russische uitgave}%
+\def\sloveneedname{Sloveense uitgave}%
+\def\spanishedname{Spaanse uitgave}%
+\def\swahiliedname{Swahili uitgave}%
+\def\swedishedname{Zweedse uitgave}%
+\def\tamiledname{Tamil uitgave}%
+\def\turkishedname{Turkse uitgave}%
+\def\nul{\ifnum\ii=0 nul\else\getall\fi}%
+\def\getall{\ifcase\ii\or\qmeen\or\qmtwee\or\qmdrie\or\qmvier\or\qmvijf\or%
+ \qmzes\or\qmze\-ven\or\qmacht\or\qmne\-gen\or\qmtien\or\qmelf\or\qmtwaalf\or%
+ \qmder\-tien\or\qmveer\-tien\else%
+ \jj=\ii\ifnum\ii<100 \divide\jj by 10 \edef\tig{\ifcase\jj\or tien\or%
+ twin\-tig\or der\-tig\or veer\-tig\or vijf\-tig\or zes\-tig\or ze\-ven\-tig\or%
+ tach\-tig\or ne\-gen\-tig\fi}\multiply\jj by 10 \advance\ii by-\jj\getall%
+ \ifnum\jj=10 \else\ifcase\ii\or\-en\or"en\or"en\else\-en\fi\fi\qm\tig%
+ \else\ifnum\ii<1000 \num100 \qmhon\-derd%
+ \else\ifnum\ii<1100 \num1000 \qmdui\-zend%
+ \else\ifnum\ii<2000 \num100 \qmhon\-derd%
+ \else\ifnum\ii<1000000 \num1000 \qmdui\-zend%
+ \else\num1000000 \qmmil\-joen%
+ \fi\fi\fi\fi\fi\fi}}
+\def\datedutch{%
+\def\today{\number\day~\ifcase\month\or
+ januari\or februari\or maart\or april\or mei\or juni\or juli\or
+ augustus\or september\or oktober\or november\or december\fi
+ \space \number\year}}
+\begingroup \catcode`\"\active
+\gdef\extrasdutch{%
+ \frenchspacing\let\resetspacing\nonfrenchspacing%
+ \let\original@dospecials\dospecials%
+ \let\original@sanitize\@sanitize%
+ \let\original@dieresis\"%
+ \let\original@dq="%
+ \edef\original@xcode{\catcode`\noexpand\"=\the\catcode`\"\relax}
+ \catcode`\"\active%
+ \def"{\protect\active@dq}%
+% \def\"{\protect\@umlaut}%
+ \righthyphenmin=2%
+ \umlautlow%
+}
+\endgroup
+\begingroup\catcode`\"=\active
+\gdef\noextrasdutch{%
+ \catcode`\"12%
+ \original@xcode
+ \let"\original@dq
+ \let\"\original@dieresis%
+ \let\dospecials\original@dospecials%
+ \let\@sanitize\original@sanitize%
+ \resetspacing%
+}\endgroup
+\def\set@low@box#1{\setbox\tw@\hbox{,}\setbox\z@\hbox{#1}%
+ \dimen\z@\ht\z@ \advance\dimen\z@ -\ht\tw@%
+ \setbox\z@\hbox{\lower\dimen\z@ \box\z@}\ht\z@\ht\tw@ \dp\z@\dp\tw@}
+\def\dlqq{\protect\@dlqq}
+\def\@dlqq{{\ifhmode \edef\@SF{\spacefactor\the\spacefactor}\else%
+ \let\@SF\empty \fi \leavevmode%
+ \set@low@box{''}\box\z@\kern-.04em\allowhyphens\@SF\relax}}
+\def\drqq{\protect\@drqq}
+\def\@drqq{{\ifhmode \edef\@SF{\spacefactor\the\spacefactor}\else%
+ \let\@SF\empty \fi ''\@SF\relax}}
+\let\dieresis\"
+%\def\@umlaut#1{%
+% \ifx #1u\dieresis{u}\else
+% \allowhyphens\discretionary{-}{#1}{\dieresis #1}\allowhyphens\fi}
+\def\-{\allowhyphens\discretionary{-}{}{}\allowhyphens}
+\@ifundefined{l@dutch}{\adddialect\l@dutch0}{}
+
+\catcode`\@=\atcatcode \let\atcatcode\relax
+\endinput
+%%
+%% End of file `dutch.tex'.
diff --git a/obsolete/macros/latex209/contrib/ml/english.tex b/obsolete/macros/latex209/contrib/ml/english.tex
new file mode 100644
index 0000000000..74fb2013bf
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/ml/english.tex
@@ -0,0 +1,174 @@
+
+%%
+%% This is file `english.tex', generated on <1994/2/16>.
+%%
+\def\filename{english.tex}
+\def\fileversion{english-1.2}
+\def\filedate{16 sept 1994}
+%%
+{\def\format{plain}
+\ifx\fmtname\format
+ \expandafter\ifx\csname @ifundefined\endcsname\relax
+ \gdef\next{latexhax.com}
+ \aftergroup\input\aftergroup\next
+ \fi
+\fi}
+\chardef\atcatcode=\catcode`\@
+\makeatletter
+\@ifundefined{captionsenglish}{}{\catcode`\@=\atcatcode\endinput}
+\wlog{Language: `English' version \fileversion\space<\filedate>}
+\ifx\undefined\babel@core@loaded\input babel.com\fi
+\ifx\undefined\originalTeX \let\originalTeX\relax \else\originalTeX\fi
+\ifx\undefined\l@english
+ \message{!! The language `English' doesn't have hyphenation patterns.}
+ \message{!! I will use the patterns loaded for \string\language=0 instead.}
+ \adddialect\l@english0\fi
+\def\captionsenglish{%
+\def\dashes{---}%
+\def\leftquotes{``}%
+\def\rightquotes{''}%
+\def\presentname{Attendance:}%
+\def\notpresentname{Not Attended:}%
+\def\agendaname{Agenda}%
+\def\openname{Opening}%
+\def\signname{Signed:}%
+\def\telname{telephone:}%
+\def\faxname{telefax:}%
+\def\emailname{E-mail:}%
+\def\fidoname{Fidonet:}%
+\def\bankname{Bank account:}%
+\def\of{of }%
+\def\Of{of }%
+\def\In{In }%
+\def\from{In }%
+\def\and{and }%
+\def\page{page }%
+\def\pages{pages }%
+\def\atplace{in }%
+\def\volume{volume}%
+\def\editor{editor}%
+\def\editors{editors}%
+\def\ownedition{Published under own control}%
+\def\first{first edition}%
+\def\second{second edition}%
+\def\third{third edition}%
+\def\secondrevised{second revised edition}%
+\def\thirdrevised{third revised edition}%
+\def\fourthrevised{fourth revised edition}%
+\def\fifthrevised{fifth revised edition}%
+\def\sixthrevised{sixth revised edition}%
+\def\seventhrevised{seventh revised edition}%
+\def\eightthrevised{eighth revised edition}%
+\def\ninthrevised{ninth revised edition}%
+\def\higher{$^{\rm th}$ edition}%
+\def\technicalreport{Technical Report}%
+\def\masters{Master's thesis}%
+\def\conference{Paper for a Conference }%
+\def\phdthesis{PhD thesis}%
+\def\tbp{To be published}%
+\def\seename{see}%
+\def\jan{January }%
+\def\feb{February }%
+\def\mar{March }%
+\def\apr{April }%
+\def\may{May }%
+\def\jun{June }%
+\def\jul{July }%
+\def\aug{August }%
+\def\sep{September }%
+\def\oct{October }%
+\def\nov{November }%
+\def\dec{December }%
+\def\exercisename{Exercise }%
+\def\lessonname{Lesson }%
+\def\prefname{Preface}%
+\def\refname{References}%
+\def\rename{Re}%
+\def\yourlettername{Your letter of}%
+\def\yourrefname{Your reference}%
+\def\ourrefname{Our reference}%
+\def\datetext{Date}%
+\def\abstractname{Abstract}%
+\def\bibname{Bibliography}%
+\def\notesname{Notes}%
+\def\chaptername{Chapter }%
+\def\appendixname{Appendix }%
+\def\contentsname{Contents}%
+\def\listfigurename{List of Figures}%
+\def\listtablename{List of Tables}%
+\def\indexname{Index}%
+\def\figurename{Figure}%
+\def\tablename{Table}%
+\def\partname{Part}%
+\def\enclname{Enclosure:}%
+\def\enclnames{Enclosures:}%
+\def\ccname{cc:}%
+\def\psname{P.S.:}%
+\def\headtoname{To}%
+\def\headpagename{Page}%
+\def\arabicedname{Arabic edition}%
+\def\croatianedname{Croatian edition}%
+\def\czechedname{Czech edition}%
+\def\danishedname{Danish edition}%
+\def\dutchedname{Dutch edition}%
+\def\englishedname{English edition}%
+\def\esperantoedname{Esperanto edition}%
+\def\finnishedname{Finnish edition}%
+\def\frenchedname{French edition}%
+\def\germanedname{German edition}%
+\def\greekedname{Greek edition}%
+\def\hebrewedname{Hebrew edition}%
+\def\hindiedname{Hindi edition}%
+\def\italianedname{Italian edition}%
+\def\maasaiedname{Maasai edition}%
+\def\magyaredname{Hungarian edition}%
+\def\norskedname{Norwegian edition}%
+\def\polishedname{Polish edition}%
+\def\portugesedname{Portuguese edition}%
+\def\romanianedname{Romanian edition}%
+\def\russianedname{Russian edition}%
+\def\sloveneedname{Slovenian edition}%
+\def\spanishedname{Spanish edition}%
+\def\swahiliedname{Swahili edition}%
+\def\swedishedname{Swedish edition}%
+\def\tamiledname{Tamil edition}%
+\def\turkishedname{Turkish edition}}
+\def\dateenglish{%
+\def\today{\ifcase\day\or
+ 1st\or 2nd\or 3rd\or 4th\or 5th\or
+ 6th\or 7th\or 8th\or 9th\or 10th\or
+ 11th\or 12th\or 13th\or 14th\or 15th\or
+ 16th\or 17th\or 18th\or 19th\or 20th\or
+ 21st\or 22nd\or 23rd\or 24th\or 25th\or
+ 26th\or 27th\or 28th\or 29th\or 30th\or
+ 31st\fi~\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space \number\year}}
+\def\dateamerican{%
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}}
+\def\extrasenglish{\nonfrenchspacing}
+\def\noextrasenglish{}
+\@ifundefined{l@english}{\adddialect\l@english0}{}
+\adddialect\l@american\l@english
+\let\captionsamerican\captionsenglish
+\let\extrasamerican\extrasenglish
+\let\noextrasamerican\noextrasenglish
+\hyphenation{Ki-twai Ma-ta-pa-to}
+%\@bsphack\@ifundefined{l@english}{\@nolanerr{english}}%
+% {\language=\csname l@english\endcsname\relax
+% \l@nguage=\csname l@english\endcsname\relax
+% \originalTeX
+% \csname captionsenglish\endcsname
+% \csname dateenglish\endcsname
+% \csname extrasenglish\endcsname
+% \def\originalTeX{\csname noextrasenglish\endcsname}%
+% \@esphack}%
+
+\catcode`\@=\atcatcode \let\atcatcode\relax
+\endinput
+%%
+%% End of file `english.tex'.
diff --git a/obsolete/macros/latex209/contrib/ml/french.tex b/obsolete/macros/latex209/contrib/ml/french.tex
new file mode 100644
index 0000000000..828b198d65
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/ml/french.tex
@@ -0,0 +1,163 @@
+%%
+%% This is file `french.tex', generated on <1994/9/16>.
+%%
+\def\filename{french.tex}
+\def\fileversion{french-1.2}
+\def\filedate{16 sept 1994}
+%%
+{\def\format{plain}
+\ifx\fmtname\format
+ \expandafter\ifx\csname @ifundefined\endcsname\relax
+ \gdef\next{latexhax.com}
+ \aftergroup\input\aftergroup\next
+ \fi
+\fi}
+\chardef\atcatcode=\catcode`\@
+\makeatletter
+\@ifundefined{captionsfrench}{}{\catcode`\@=\atcatcode\endinput}
+\wlog{Language: `French' version \fileversion\space<\filedate>}
+\ifx\undefined\babel@core@loaded\input babel.com\fi
+\ifx\undefined\originalTeX \let\originalTeX\relax \else\originalTeX\fi
+\ifx\undefined\l@french
+ \message{!! The language `French' doesn't have hyphenation patterns.}
+ \message{!! I will use the patterns loaded for \string\language=0 instead.}
+ \adddialect\l@french0\fi
+\def\captionsfrench{%
+\def\dashes{---}
+\def\leftquotes{\ouvreguillemet\everypar={\ouvreguillemet\ }\,}%
+\def\rightquotes{\,\fermeguillemet\everypar={}}%
+\def\presentname{Pr\'esent:}%
+\def\notpresentname{Absent:}%
+\def\agendaname{Agenda}%
+\def\openname{Ouverture}%
+\def\signname{Sign\'e:}%
+\def\tlxname{T\'elex:}%
+\def\telname{T\'el\'ephone:}%
+\def\faxname{T\'el\'ecopier:}%
+\def\emailname{Courrier \'electronique:}%
+\def\fidoname{R\'eseau de Fido:}%
+\def\bankname{num\'ero de compte:}%
+\def\of{de la S\'erie }%
+\def\Of{au s\'eminaire de l'Organisation }%
+\def\in{Dans }%
+\def\from{Dans }%
+\def\and{at }%
+\def\page{page }%
+\def\pages{pages }%
+\def\atplace{\`a }%
+\def\volume{Tome}%
+\def\editor{\'ed.}%
+\def\editors{\'eds.}%
+\def\ownedition{Publi\'e en regie propre}%
+\def\first{\'edition simplex}%
+\def\second{seconde \'edition}%
+\def\third{troisi\`eme \'edition}%
+\def\secondrevised{seconde \'edition revis\'ee}%
+\def\thirdrevised{troisi\`eme \'edition revis\'ee}%
+\def\fourthrevised{quatri\`eme \'edition revis\'ee}%
+\def\fifthrevised{cinqui\`eme \'edition revis\'ee}%
+\def\sixthrevised{sizi\`eme \'edition revis\'ee}%
+\def\seventhrevised{septi\`eme \'edition revis\'ee}%
+\def\eightthrevised{huiti\`eme \'edition revis\'ee}%
+\def\ninthrevised{neuvi\`eme \'edition revis\'ee}%
+\def\higher{$^{\rm e}$ \'edition}%
+\def\technicalreport{Rapport Interne}%
+\def\masters{M\'emoire de licence}%Th\`ese de Doctorat
+\def\conference{Communication pr\'esent\'ee }%
+\def\phdthesis{Th\`ese}%Dissertation doctorale
+\def\tbp{A publier}%
+\def\seename{voir}%
+\def\jan{janvier }%
+\def\feb{f\'evrier }%
+\def\mar{mars }%
+\def\apr{avril }%
+\def\may{mai }%
+\def\jun{juin }%
+\def\jul{juillet }%
+\def\aug{ao\^ut }%
+\def\sep{septembre }%
+\def\oct{octobre }%
+\def\nov{novembre }%
+\def\dec{d\'ecembre }%
+\def\lessonname{Le\c{c}on }%
+\def\exercisename{Exercise }%
+\def\prefname{Pr\'eface}%
+\def\refname{R\'ef\'erences}%
+\def\rename{Objet:}%
+\def\yourlettername{Votre lettre du}%
+\def\yourrefname{Vos r\'ef\'erences:}%
+\def\ourrefname{Nos r\'ef\'erences:}%
+\def\datetext{Date:}%
+\def\abstractname{R\'esum\'e}%
+\def\bibname{Bibliographie}%
+\def\notesname{Notes}%
+\def\chaptername{Chapitre }%
+\def\appendixname{Annexe }%
+\def\contentsname{Table des mati\`eres}%
+\def\listfigurename{Liste des figures}%
+\def\listtablename{Liste des tableaux}%
+\def\indexname{Index}%
+\def\figurename{Figure}%
+\def\tablename{Tableau}%
+\def\partname{Partie}%
+\def\enclname{Pi\`ece jointe:}%
+\def\enclnames{Pi\`eces jointes:}%
+\def\ccname{Copie \`a:}%
+\def\psname{P.S.:}%
+\def\headtoname{\`A l'attention de}%
+\def\headpagename{Page}%
+\def\arabicedname{\'edition arabe}%
+\def\croatianedname{\'edition croate}%
+\def\czechedname{\'edition tch\`eque}%
+\def\danishedname{\'edition danoise}%
+\def\dutchedname{\'edition hollandaise}%
+\def\englishedname{\'edition anglaise}%
+\def\esperantoedname{\'edition esperanto}%
+\def\finnishedname{\'edition finnoise}%
+\def\frenchedname{\'edition fran\c{c}aise}%
+\def\germanedname{\'edition allemande}%
+\def\greekedname{\'edition grecque}%
+\def\hebrewedname{\'edition hebreue}%
+\def\hindiedname{\'edition hindi}%
+\def\italianedname{\'edition italienne}%
+\def\maasaiedname{\'edition maasai}%
+\def\magyaredname{\'edition hongroise}%
+\def\norskedname{\'edition norv\'egienne}%
+\def\polishedname{\'edition polonaise}%
+\def\portugesedname{\'edition portugu\`ese}%
+\def\romanianedname{\'edition roumaine}%
+\def\russianedname{\'edition russe}%
+\def\sloveneedname{\'edition slovaine}%
+\def\spanishedname{\'edition espagnole}%
+\def\swahiliedname{\'edition swahili}%
+\def\swedishedname{\'edition su\'edoise}%
+\def\tamiledname{\'edition tamil}%
+\def\turkishedname{\'edition turque}}
+\def\datefrench{%
+\def\today{\ifnum\day=1\relax 1\/$^{\rm er}$\else
+ \number\day\fi \space\ifcase\month\or
+ janvier\or f\'evrier\or mars\or avril\or mai\or juin\or
+ juillet\or ao\^ut\or septembre\or octobre\or novembre\or d\'ecembre\fi
+ \space\number\year}}
+\begingroup
+\def\do{\noexpand\do\noexpand}%
+\xdef\french@dospecials{\dospecials\do\;\do:\do\!\do\?}%
+\expandafter\ifx\csname @sanitize\endcsname\relax \else
+ \def\@makeother{\noexpand\@makeother\noexpand}%
+ \xdef\french@sanitize{\@sanitize%
+ \@makeother\;\@makeother\;\@makeother\!\@makeother?}%
+\fi
+\endgroup
+\@ifundefined{l@french}{\adddialect\l@french0}{}
+% \l@nguage=\csname l@french\endcsname\relax
+% \originalTeX
+% \csname captionsfrench\endcsname
+% \csname datefrench\endcsname
+% \csname extrasfrench\endcsname
+% \def\originalTeX{\csname noextrasfrench\endcsname}%
+% \@esphack}%
+
+\catcode`\@=\atcatcode \let\atcatcode\relax
+\endinput
+%%
+%% End of file `french.tex'.
diff --git a/obsolete/macros/latex209/contrib/ml/german.tex b/obsolete/macros/latex209/contrib/ml/german.tex
new file mode 100644
index 0000000000..c8d50c2491
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/ml/german.tex
@@ -0,0 +1,222 @@
+%%
+%% This is file `german.tex', generated on <1994/2/16>.
+%%
+\def\filename{german.tex}
+\def\fileversion{german-1.2}
+\def\filedate{16 sept 1994}
+%%
+{\def\format{plain}
+\ifx\fmtname\format
+ \expandafter\ifx\csname @ifundefined\endcsname\relax
+ \gdef\next{latexhax.com}
+ \aftergroup\input\aftergroup\next
+ \fi
+\fi}
+\chardef\atcatcode=\catcode`\@
+\makeatletter
+\@ifundefined{captionsgerman}{}{\catcode`\@=\atcatcode\endinput}
+\wlog{Language: `German' version \fileversion\space<\filedate>}
+\ifx\undefined\babel@core@loaded\input babel.com\fi
+\ifx\undefined\originalTeX \let\originalTeX\relax \else\originalTeX\fi
+\ifx\undefined\l@german
+ \message{!! The language `German' doesn't have hyphenation patterns.}
+ \message{!! I will use the patterns loaded for \string\language=0 instead.}
+ \adddialect\l@german0\fi
+\def\captionsgerman{%
+\def\dashes{--}%
+\def\leftquotes{\glqq\/}%
+\def\rightquotes{\grqq}%
+\def\presentname{Anwesend:}%
+\def\notpresentname{Abwesend:}%
+\def\agendaname{Agenda}%
+\def\openname{\"Offnung}%
+\def\signname{Unterzeichnet:}%
+\def\tlxname{Telex:}%
+\def\telname{Telephon:}%
+\def\faxname{Telefax:}%
+\def\emailname{E-mail:}%
+\def\fidoname{Fidonetz:}%
+\def\bankname{Bankkonto:}%
+\def\of{aus der Reihe }%
+\def\Of{von }%
+\def\in{In }%
+\def\from{Aus }%
+\def\and{und }%
+\def\page{Seite }%
+\def\pages{Seiten }%
+\def\atplace{in }%
+\def\volume{Band}%
+\def\editor{Hrsg.}%
+\def\editors{Hrsg.}%
+\def\ownedition{Im Selbstverlag}%
+\def\first{erste Auf"|lage}%
+\def\second{zweite Auf"|lage}%
+\def\third{dritte Auf"|lage}%
+\def\secondrevised{zweite neubearbeitete Auf"|lage}%
+\def\thirdrevised{dritte neubearbeitete Auf"|lage}%
+\def\fourthrevised{vierte neubearbeitete Auf"|lage}%
+\def\fifthrevised{f\"unfte neubearbeitete Auf"|lage}%
+\def\sixthrevised{sechste neubearbeitete Auf"|lage}%
+\def\seventhrevised{siebte neubearbeitete Auf"|lage}%
+\def\eightthrevised{achtste neubearbeitete Auf"|lage}%
+\def\ninthrevised{neunte neubearbeitete Auf"|lage}%
+\def\higher{. Auf"|lage}%
+\def\technicalreport{Interner Rapport}%
+\def\masters{Doktorandenarbeit}%
+\def\conference{Vortrag f\"ur eine Tagung }%
+\def\phdthesis{Dissertation}%
+\def\tbp{Noch zu ver\"offentlichen}%
+\def\seename{siehe}%
+\def\jan{Januar }%
+\def\feb{Februar }%
+\def\mar{M\"arz }%
+\def\apr{April }%
+\def\may{Mai }%
+\def\jun{Juni }%
+\def\jul{Juli }%
+\def\aug{August }%
+\def\sep{September }%
+\def\oct{October }%
+\def\nov{November }%
+\def\dec{Dezember }%
+\def\exercisename{\"Ubung }%
+\def\lessonname{Lektion }%
+\def\prefname{Vorwort}%
+\def\refname{Literatur}%
+\def\rename{Betreff}%
+\def\yourlettername{Ihr Brief vom}%
+\def\yourrefname{Ihr Zeichen:}%
+\def\ourrefname{Unser Zeichen:}%
+\def\datetext{Datum:}%
+\def\abstractname{Zusammenfassung}%
+\def\bibname{Literaturverzeichnis}%
+\def\notesname{Anmerkungen}%
+\def\chaptername{Kapitel }%%
+\def\appendixname{Anhang }%%
+\def\contentsname{Inhaltsverzeichnis}% % oder nur: Inhalt
+\def\listfigurename{Abbildungsverzeichnis}%
+\def\listtablename{Tabellenverzeichnis}%
+\def\indexname{Index}%
+\def\figurename{Abbildung}%
+\def\tablename{Tabelle}% % oder: Tafel
+\def\partname{Teil}%
+\def\enclname{Anlage:}% % oder: Beilage(n)
+\def\enclnames{Anlagen:}% % oder: Beilage(n)
+\def\ccname{Verteiler:}% % oder: Kopien an
+\def\psname{P.S.:}%
+\def\headtoname{An}%
+\def\headpagename{Seite}%
+\def\arabicedname{Arabische Ausgabe}%
+\def\croatianedname{Kroatische Ausgabe}%
+\def\czechedname{Tchechische Ausgabe}%
+\def\danishedname{D\"anische Ausgabe}%
+\def\dutchedname{Holl\"andische Ausgabe}%
+\def\englishedname{Englische Ausgabe}%
+\def\esperantoedname{Esperanto Ausgabe}%
+\def\finnishedname{Finnische Ausgabe}%
+\def\frenchedname{Franz\"osische Ausgabe}%
+\def\germanedname{Deutsche Ausgabe}%
+\def\greekedname{Griechische Ausgabe}%
+\def\hebrewedname{Hebr\"aische Ausgabe}%
+\def\hindiedname{Hindi Ausgabe}%
+\def\italianedname{Italienische Ausgabe}%
+\def\maasaiedname{Maasai Ausgabe}%
+\def\magyaredname{Ungarische Ausgabe}%
+\def\norskedname{Nordische Ausgabe}%
+\def\polishedname{Polnische Ausgabe}%
+\def\portugesedname{Portugiesische Ausgabe}%
+\def\romanianedname{Rum\"anische Ausgabe}%
+\def\russianedname{Russische Ausgabe}%
+\def\sloveneedname{Slovenische Ausgabe}%
+\def\spanishedname{Spanische Ausgabe}%
+\def\swahiliedname{Suaheli Ausgabe}%
+\def\swedishedname{Schwedische Ausgabe}%
+\def\tamiledname{Tamil Ausgabe}%
+\def\turkishedname{T\"urkische Ausgabe}%
+\def\nul{\ifnum\ii=0 null\else\ifnum\ii=1 eins\getall\fi\fi}%
+\def\getall{\ifcase\ii\or\qmein\or\qmzwei\or\qmdrei\or\qmvier\or\qmf"unf\or%
+ \qmsechs\or\qmsie\-ben\or\qmacht\or\qmneun\or\qmzehn\or\qmelf\or\qmzw"olf\or%
+ \qmdrei\-zehn\or\qmvier\-zehn\else%
+ \jj=\ii\ifnum\ii<100 \divide\jj by 10 \edef\zig{\ifcase\jj\or zehn\or%
+ zwan\-zig\or drei\-"ssig\or vier\-zig\or f"unf\-zig\or sechs\-zig\or%
+ sieb\-zig\or ach\-zig\or neun\-zig\fi}\multiply\jj by 10 \advance\ii%
+ by-\jj\getall \ifnum\jj=10 \else\ifcase\ii\or\-und\else\-und\fi\fi\qm\zig%
+ \else\ifnum\ii<1000 \num100 \qmhun\-dert%
+ \else\ifnum\ii<1100 \num1000 \qmtau\-send%
+ \else\ifnum\ii<2000 \num100 \qmhun\-dert%
+ \else\ifnum\ii<1000000 \num1000 \qmtau\-send%
+ \else\num1000000 \qmmil\-jon%
+ \fi\fi\fi\fi\fi\fi}}
+\def\dategerman{%
+\def\today{\number\day.~\ifcase\month\or
+ Januar\or Februar\or M\"arz\or April\or Mai\or Juni\or
+ Juli\or August\or September\or Oktober\or November\or Dezember\fi
+ \space\number\year}}
+\def\dateaustrian{%
+\def\today{\number\day.~\ifcase\month\or
+ J\"anner\or Februar\or M\"arz\or April\or Mai\or Juni\or
+ Juli\or August\or September\or Oktober\or November\or Dezember\fi
+ \space\number\year}}
+\begingroup \catcode`\"\active
+\def\extrasgerman{%
+ \ifnum\the\sfcode`\.=\@m\frenchspacing\fi%
+ \let\original@three\3%
+ \let\original@dieresis\"%
+ \let\original@dq="%
+ \edef\original@xcode{\lccode`\noexpand\^^Y=\the\lccode`\^^Y\relax%
+ \catcode`\noexpand\"=\the\catcode`\"\relax}
+ \lccode`\^^Y=`\^^Y%
+ \let\3\ss%
+ \catcode`\"\active%
+ \umlautlow%
+ \def"{\protect\active@dq}}%
+\endgroup
+\begingroup\catcode`\"=\active
+\def\noextrasgerman{%
+ \catcode`\"12%
+ \original@xcode
+ \let"\original@dq%
+ \let\"\original@dieresis% \umlauthigh%
+ \let\3\original@three%
+}\endgroup
+\def\umlauthigh{\let\"=\dieresis}
+\def\set@low@box#1{\setbox\tw@\hbox{,}\setbox\z@\hbox{#1}
+ \dimen\z@\ht\z@ \advance\dimen\z@ -\ht\tw@
+ \setbox\z@\hbox{\lower\dimen\z@ \box\z@}\ht\z@\ht\tw@ \dp\z@\dp\tw@}
+\def\glqq{\protect\@glqq}
+\def\@glqq{{\ifhmode \edef\@SF{\spacefactor\the\spacefactor}\else
+ \let\@SF\empty \fi \leavevmode
+ \set@low@box{''}\box\z@\kern-.04em\allowhyphens\@SF\relax}}
+\def\grqq{\protect\@grqq}
+\def\@grqq{{\ifhmode \edef\@SF{\spacefactor\the\spacefactor}\else
+ \let\@SF\empty \fi \kern-.07em``\kern.07em\@SF\relax}}
+\def\glq{\protect\@glq}
+\def\@glq{{\ifhmode \edef\@SF{\spacefactor\the\spacefactor}\else
+ \let\@SF\empty \fi \leavevmode
+ \set@low@box{'}\box\z@\kern-.04em\allowhyphens\@SF\relax}}
+\def\grq{\protect\@grq}
+\def\@grq{\kern-.07em`\kern.07em}
+\begingroup \catcode`\"=\active
+\global\let"\dq
+\global\let\active@dq\dq
+\endgroup
+\@ifundefined{l@german}{\adddialect\l@german0}{}
+\adddialect\l@austrian\l@german
+\let\captionsaustrian\captionsgerman
+\let\extrasaustrian\extrasgerman
+\let\noextrasaustrian\noextrasgerman
+\def\ck{\allowhyphens\discretionary{k-}{k}{ck}\allowhyphens}
+%\@bsphack\@ifundefined{l@german}{\@nolanerr{german}}%
+% {\language=\csname l@german\endcsname\relax
+% \l@nguage=\csname l@german\endcsname\relax
+% \originalTeX
+% \csname captionsgerman\endcsname
+% \csname dategerman\endcsname
+% \csname extrasgerman\endcsname
+% \def\originalTeX{\csname noextrasgerman\endcsname}%
+% \@esphack}}%
+
+\catcode`\@=\atcatcode \let\atcatcode\relax
+\endinput
+%%
+%% End of file `german.tex'.
diff --git a/obsolete/macros/latex209/contrib/ml/greek.tex b/obsolete/macros/latex209/contrib/ml/greek.tex
new file mode 100644
index 0000000000..17e634c6aa
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/ml/greek.tex
@@ -0,0 +1,205 @@
+%%
+%% This is file `greek.tex', generated on <1993/6/16>.
+%%
+\def\fileversion{greek-1.2}
+\def\filedate{16 sept 1994}
+%%
+{\def\format{plain}
+\ifx\fmtname\format
+ \expandafter\ifx\csname @ifundefined\endcsname\relax
+ \gdef\next{latexhax.com}
+ \aftergroup\input\aftergroup\next
+ \fi
+\fi}
+\chardef\atcatcode=\catcode`\@
+\makeatletter
+\@ifundefined{captionsgreek}{}{\catcode`\@=\atcatcode\endinput}
+\wlog{Language: `Greek' version \fileversion\space<\filedate>}
+\ifx\undefined\babel@core@loaded\input babel.com\fi
+\ifx\undefined\originalTeX \let\originalTeX\relax \else\originalTeX\fi
+\ifx\undefined\l@greek
+ \message{!! The language `Greek' doesn't have hyphenation patterns.}
+ \message{!! I will use the patterns loaded for \string\language=0 instead.}
+ \adddialect\l@greek0\fi
+\openin1 rgreekmac \ifeof1
+ \typeout{! I can't find file `rgreekmac.tex'.}
+ \else\closein1 \relax\input{rgreekmac}\fi
+ \def\begingreek{\bgroup\family{greek}\selectfont%
+ \ifx\keybgreek\undefined\relax\else\keybgreek\fi%
+ \greektrue}
+ \def\beginmgreek{\typeout{Warning:
+ Use monotoniko.sty for monotonical greek!}%
+ \family{mgreek}\selectfont\ifx\keybgreek\undefined\relax%
+ \else\keybgreek\fi\greektrue}
+ \def\monotoniko{\family{mgreek}\selectfont}
+ \def\polutoniko{\family{greek}\selectfont}
+\ifx\selectfont\undefined\endinput\fi
+
+\gdef\captionsgreek{%
+\def\dashes{---}%
+\def\leftquotes{((}%
+\def\rightquotes{))}%
+\def\presentname{Parous'ia:}%
+\def\notpresentname{>Apous'ia:}%
+\def\agendaname{Shmeiwmat'arion}%
+\def\openname{>'Anoigma}%
+\def\signname{>Upograf'h:}%
+\def\tlxname{Thl'etupon:}%
+\def\telname{Thl'efwnon:}%
+\def\faxname{Thl'efax:}%
+\def\emailname{E-mail:}%
+\def\fidoname{Fidonet:}%
+\def\bankname{Trapezitik'os logariasm'os:}%
+\def\of{\ifgreek\relax\else\begingreek\fi t~hs Seir~as \endgreek}%
+\def\Of{\ifgreek\relax\else\begingreek\fi t~hs Diorgan'wsews \endgreek}%
+\def\in{\ifgreek\relax\else\begingreek\fi >Ev \endgreek}%
+\def\from{\ifgreek\relax\else\begingreek\fi >Ek \endgreek}%
+\def\and{\ifgreek\relax\else\begingreek\fi ka`i \endgreek}%
+\def\page{\ifgreek\relax\else\begingreek\fi sel. \endgreek}%
+\def\pages{\ifgreek\relax\else\begingreek\fi sel. \endgreek}%
+\def\atplace{\ifgreek\relax\else\begingreek\fi >en \endgreek}%
+\def\volume{\ifgreek\relax\else\begingreek\fi T'omos\endgreek}%
+\def\editor{\ifgreek\relax\else\begingreek\fi >ekd'oths\endgreek}%
+\def\editors{\ifgreek\relax\else\begingreek\fi >ekd'otes\endgreek}%
+\def\ownedition{\ifgreek\relax\else\begingreek\fi
+di`a logariasm`on to~u suggraf'ews\endgreek}%
+\def\first{\ifgreek\relax\else\begingreek\fi pr~wth >ekt'upwsh\endgreek}%
+\def\second{\ifgreek\relax\else\begingreek\fi de'uterh >ekt'upwsh\endgreek}%
+\def\third{\ifgreek\relax\else\begingreek\fi tr'ith >ekt'upwsh\endgreek}%
+\def\secondrevised{\ifgreek\relax\else\begingreek\fi
+de'uterh >ekt'upwsh, n'ea >exergas'ia\endgreek}%
+\def\thirdrevised{\ifgreek\relax\else\begingreek\fi
+tr'ith >ekt'upwsh, n'ea >exergas'ia\endgreek}%
+\def\fourthrevised{\ifgreek\relax\else\begingreek\fi
+tet'arth >ekt'upwsh, n'ea >exergas'ia\endgreek}%
+\def\fifthrevised{\ifgreek\relax\else\begingreek\fi
+p'empth >ekt'upwsh, n'ea >exergas'ia\endgreek}%
+\def\sixthrevised{\ifgreek\relax\else\begingreek\fi
+<'ekth >ekt'upwsh, n'ea >exergas'ia\endgreek}%
+\def\seventhrevised{\ifgreek\relax\else\begingreek\fi
+<ebd'omh >ekt'upwsh, n'ea >exergas'ia\endgreek}%
+\def\eightthrevised{\ifgreek\relax\else\begingreek\fi
+>ogd'oh >ekt'upwsh, n'ea >exergas'ia\endgreek}%
+\def\ninthrevised{\ifgreek\relax\else\begingreek\fi
+>en'ath >ekt'upwsh, n'ea >exergas'ia\endgreek}%
+\def\higher{\ifgreek\relax\else\begingreek\fi $^h$
+>ekt'upwsh\endgreek}%
+\def\technicalreport{\ifgreek\relax\else\begingreek\fi
+>Eswterik'o >Anafor'a\endgreek}%
+\def\masters{\ifgreek\relax\else\begingreek\fi
+Didaktorik'h diatrib'h\endgreek}%
+\def\conference{\ifgreek\relax\else\begingreek\fi
+Di'alexh gi`a Sunedr'iasin \endgreek}%
+\def\phdthesis{\ifgreek\relax\else\begingreek\fi
+>Ena'isimos diatrib'h\endgreek}%
+\def\tbp{\ifgreek\relax\else\begingreek\fi N`a dhme'uein\endgreek}%
+\def\seename{\ifgreek\relax\else\begingreek\fi bl'epe\endgreek}%
+\def\jan{\ifgreek\relax\else\begingreek\fi >Ianou'arios \endgreek}%
+\def\feb{\ifgreek\relax\else\begingreek\fi Febrou'arios \endgreek}%
+\def\mar{\ifgreek\relax\else\begingreek\fi M'artios \endgreek}%
+\def\apr{\ifgreek\relax\else\begingreek\fi >Apr'ilios \endgreek}%
+\def\may{\ifgreek\relax\else\begingreek\fi M'a"ios \endgreek}%
+\def\jun{\ifgreek\relax\else\begingreek\fi >Io'unios \endgreek}%
+\def\jul{\ifgreek\relax\else\begingreek\fi >Io'ulios \endgreek}%
+\def\aug{\ifgreek\relax\else\begingreek\fi A>'ugoustos \endgreek}%
+\def\sep{\ifgreek\relax\else\begingreek\fi Sept'embrios \endgreek}%
+\def\oct{\ifgreek\relax\else\begingreek\fi >Okt'wbrios \endgreek}%
+\def\nov{\ifgreek\relax\else\begingreek\fi No'embrios \endgreek}%
+\def\dec{\ifgreek\relax\else\begingreek\fi Dek'embrios \endgreek}%
+\def\lessonname{M'ajhma}%
+\def\exercisename{>'Askhsh}%
+\def\prefname{Pr'ologos}%
+\def\rename{<Upoke'imenon:}%
+\def\refname{Sqetik'a suggr'ammata}%
+\def\yourlettername{T`o gr'amma so~u t~hs:}%
+\def\yourrefname{T`o gn'wrisma so~u:}%
+\def\ourrefname{T`o gn'wrisma <hm~wn:}%
+\def\datetext{<Hmerwmhn'ia:}%
+\def\abstractname{Sugkefala'iwsh}%
+\def\bibname{Kat'alogos bibl'iwn}%
+\def\notesname{Par'ajeseis}%
+\def\chaptername{Kef'alaion }%
+\def\appendixname{Par'arthma }%
+\def\contentsname{Perieq'omena}%
+\def\listfigurename{Kat'alogos e>ikon~wn}%
+\def\listtablename{Kat'alogos p'inakwn}%
+\def\indexname{P'inax perieqom'enwn}%
+\def\figurename{E>ik'ona}%
+\def\tablename{P'inax}%
+\def\partname{M'eros}%
+\def\enclname{>Es'wkleiston:}%
+\def\enclnames{>Es'wkleista:}%
+\def\ccname{Dianome~us:}%
+\def\psname{U.G.:}%
+\def\headtoname{Pr`os}%
+\def\headpagename{Sel'ida}%
+\def\arabicedname{>'ekdosis >arabik'h}%
+\def\croatianedname{>'ekdosis kroatik'h}%
+\def\czechedname{>'ekdosis tseqik'h}%
+\def\danishedname{>'ekdosis danik'h}%
+\def\dutchedname{>'ekdosis <ollandik'h}%
+\def\englishedname{>'ekdosis >agglik'h}%
+\def\esperantoedname{>'ekdosis >esper'anto}%
+\def\finnishedname{>'ekdosis fillandik'h}%
+\def\frenchedname{>'ekdosis gallik'h}%
+\def\germanedname{>'ekdosis germanik'h}%
+\def\greekedname{>'ekdosis <ellhnik'h}%
+\def\hebrewedname{>'ekdosis <ebra"ik'h}%
+\def\hindiedname{>'ekdosis <indik'h}%
+\def\italianedname{>'ekdosis >italik'h}%
+\def\maasaiedname{>'ekdosis maasai}%
+\def\magyaredname{>'ekdosis o>uggrik'h}%
+\def\norskedname{>'ekdosis norbhgik'h}%
+\def\polishedname{>'ekdosis polwnik'h}%
+\def\portugesedname{>'ekdosis portogallik'h}%
+\def\romanianedname{>'ekdosis roumanik'h}%
+\def\russianedname{>'ekdosis rwssik'h}%
+\def\sloveneedname{>'ekdosis slobenik'h}%
+\def\spanishedname{>'ekdosis <ispanik'h}%
+\def\swedishedname{>'ekdosis souhdik'h}%
+\def\tamiledname{>'ekdosis t'amil}%
+\def\turkishedname{>'ekdosis tourkik'h}}
+\gdef\dategreek{%
+\def\today{\ifnum\day=1\relax 1h\else
+ \number\day\fi \space\ifcase\month\or
+ >Ianouar'iou\or Febrouar'iou\or Mart'iou\or >April'iou\or Ma'iou\or
+ >Ioun'iou\or >Ioul'iou\or A>ugo'ustou\or Septembr'iou\or
+ >Oktwbr'iou\or Noembr'iou\or Dekembr'iou\fi
+ \space\number\year}}
+\def\extrasgreek{\ifnum\the\sfcode`\.=\@m\frenchspacing\fi}
+\let\regulargreek\rm%
+\let\slantedgreek\sl%
+\let\italicgreek\it%
+\let\boldgreek\bf%
+\let\smallcapsgreek\sc%
+\def\noextrasgreek{}
+%\@ifundefined{l@greek}{\adddialect\l@greek0}{}
+\adddialect\l@greek\l@english
+\let\noextrasgreek\noextrasenglish
+\gdef\begingrk{\bgroup\family{greek}\selectfont%
+\greektrue\greekmode\keybgreek%
+\def\rm{\regulargreek}%
+\def\sl{\slantedgreek}%
+\def\it{\italicgreek}%
+\def\bf{\boldgreek}%
+\def\sc{\smallcapsgreek}%
+\def\smc{\smallcapsgreek}%
+}
+\gdef\begingreek{\protect\begingrk}
+
+%\@bsphack\@ifundefined{l@greek}{\@nolanerr{greek}}%
+% {\language=\csname l@greek\endcsname\relax
+% \l@nguage=\csname l@greek\endcsname\relax
+% \originalTeX
+% \csname captionsgreek\endcsname
+% \csname dategreek\endcsname
+% \csname extrasgreek\endcsname
+% \def\originalTeX{\csname noextrasgreek\endcsname}%
+% \@esphack}%
+%\family{greek}\selectfont\ifx\keybgreek\undefined\relax\else\keybgreek\fi
+
+\catcode`\@=\atcatcode \let\atcatcode\relax
+\begingreek
+\endinput
+%%
+%% End of file `greek.tex'.
diff --git a/obsolete/macros/latex209/contrib/ml/ibmkbd.sty b/obsolete/macros/latex209/contrib/ml/ibmkbd.sty
new file mode 100644
index 0000000000..c78820fba7
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/ml/ibmkbd.sty
@@ -0,0 +1,315 @@
+\typeout{The extended characters used with this style
+ correspond with ASCII.TCP.}
+\newif\ifgreek
+\newif\ifdots\dotstrue
+\def\adddialect#1#2{%
+ \global\chardef#1#2
+ \wlog{\string#1 = a dialect from \string\language#2}}
+\def\ifnextchar#1#2#3{\let\tempe #1\def\tempa{#2}\def\tempb{#3}\futurelet
+ \tempc\ifnch}
+\def\ifnch{\ifx\tempc\tempe\let\tempd\tempa\else\let\tempd\tempb\fi\tempd}
+\ifx\iflanguage\undefined\def\iflanguage#1#2#3{#3}\fi
+\def\root#1{\ifmmode\sqrt#1\else\begin{math}\sqrt#1\end{math}\fi}
+\def\asciicxxviii{\iflanguage{russian}A{\c{C}}} % 128 €
+\def\asciicxxix{\iflanguage{russian}B{\"u}} % 129
+\def\asciicxxx{\iflanguage{russian}V\eac} % 130 ‚
+\def\asciicxxxi{\iflanguage{russian}G\ahat} % 131 ƒ
+\def\asciicxxxii{\iflanguage{russian}D{\"a}} % 132 „
+\def\asciicxxxiii{\iflanguage{russian}E\agr} % 133 …
+\def\asciicxxxiv{\iflanguage{russian}{\Z }{\aa }} % 134 †
+\def\asciicxxxv{\iflanguage{russian}Z{\c{c}}} % 135 ‡
+\def\asciicxxxvi{\iflanguage{russian}I\ehat} % 136 ˆ
+\def\asciicxxxvii{\iflanguage{russian}J{\"e}} % 137 ‰
+\def\asciicxxxviii{\iflanguage{russian}K\egr} % 138 Š
+\def\asciicxxxix{\iflanguage{russian}L\idots} % 139 ‹
+\def\asciicxl{\iflanguage{russian}M\ihat} % 140 Œ
+\def\asciicxli{\iflanguage{russian}N\igr} % 141
+\def\asciicxlii{\iflanguage{russian}O{\"A}} % 142 Ž
+\def\asciicxliii{\iflanguage{russian}P\AA } % 143
+\def\asciicxliv{\iflanguage{russian}R\'E} % 144
+\def\asciicxlv{\iflanguage{russian}S{\ae }} % 145 ‘
+\def\asciicxlvi{\iflanguage{russian}T{\AE }} % 146 ’
+\def\asciicxlvii{\iflanguage{russian}U\ohat} % 147 “
+\def\asciicxlviii{\iflanguage{russian}F{\"o}} % 148 ”
+\def\asciicxlix{\iflanguage{russian}H\ogr} % 149 •
+\def\asciicl{\iflanguage{russian}C\uhat} % 150 –
+\def\asciicli{\iflanguage{russian}{\Cz}\ugr} % 151 —
+\def\asciiclii{\iflanguage{russian}{\S}{\allowhyphens
+ i\kern-0.06pt j\allowhyphens}} % 152 ˜
+\def\asciicliii{\iflanguage{russian}{\Scz}{\"O}} % 153 ™
+\def\asciicliv{\iflanguage{russian}{\tz}{\"U}} % 154 š
+\def\asciiclvi{\iflanguage{russian}{\mz}{\pounds }} % 156 œ
+\def\asciiclviii{\iflanguage{russian}{\Ju}{}} % 158 ž
+\def\asciiclix{\iflanguage{russian}{\Ja}{{\it f\,}}} % 159 Ÿ
+\def\asciiclx{\iflanguage{russian}a\aac} % 160  
+\def\asciiclxi{\iflanguage{russian}b\iac} % 161 ¡
+\def\asciiclxii{\iflanguage{russian}v\oac} % 162 ¢
+\def\asciiclxiii{\iflanguage{russian}g\uac} % 163 £
+\def\asciiclxiv{\iflanguage{russian}d\ntilde} % 164 ¤
+\def\asciiclxv{\iflanguage{russian}e\~N} % 165 ¥
+\def\asciiclxvi{\iflanguage{russian}{\z}{}} % 166 ¦
+\def\asciiclxviii{\iflanguage{russian}i{?`}} % 168 ¨
+\def\asciiclxx
+ {\iflanguage{russian}k{\ifmmode\neg\else{\begin{math}\neg\end{math}}\fi{}}}
+% 170 ª
+\def\asciiclxxi{\iflanguage{russian}{l}
+ \ifmmode{\frac{1}{2}}\else{\begin{math}\frac{1}{2}\end{math}}\fi{}} % 171 «
+\def\asciiclxxii{\iflanguage{russian}{m}
+ \ifmmode{\frac{1}{4}}\else{\begin{math}\frac{1}{4}\end{math}}\fi{}} % 172 ¬
+\def\asciiclxxiii{\iflanguage{russian}n{!`}} % 173 ­
+\def\asciiclxxiv{\iflanguage{russian}o\leftquotes } % 174 ®
+\def\asciiclxxv{\iflanguage{russian}p\rightquotes } % 175 ¯
+\def\asciiclxxix{\,/\,\allowhyphens} % 179 ³
+\def\asciiclxxxvi{\ifmmode\|\else{\begin{math}\|\end{math}}\fi{}} % 186 º
+\def\asciicxci{\iflanguage{russian}{\leftquotes }{\rceil }} % 191 ¿
+\def\asciicxcii{\iflanguage{russian}{\rightquotes }{\lfloor }} % 192 À
+\def\asciicxciii{\ifmmode\bot\else{\begin{math}\bot\end{math}}\fi{}} % 193 Á
+\def\asciicxciv{\ifmmode\top\else{\begin{math}\top\end{math}}\fi{}} % 194 Â
+\def\asciicxcvi#1 {\mbox{\dashes#1}{ }} % 196 Ä
+\def\asciicxcvii{\dag } % 197 Å
+\def\asciicxcviii{\ifmmode\models\else{\begin{math}\models\end{math}}\fi{}} % 198 Æ
+\def\asciiccxvi{\ddag } % 216 Ø
+\def\asciiccxvii{\rfloor } % 217 Ù
+\def\asciiccxviii{\lceil } % 218 Ú
+\def\asciiccxxi{\discretionary{-}{}{\kern.03em}} % Ý
+\def\asciiccxxiv{\ifgreek{a}\else\iflanguage{russian}{r}
+ {\ifmmode\alpha\else{\begin{math}\alpha\end{math}}\fi}\fi{}} % 224 à
+\def\asciiccxxv{\ifgreek{b}\else\iflanguage{russian}s\ss{}\fi{}} % 225 á
+\def\asciiccxxvi{\ifgreek{G}\else\iflanguage{russian}{t}
+ {\ifmmode\Gamma\else{\begin{math}\Gamma\end{math}}\fi}\fi{}}% 226 â
+\def\asciiccxxvii{\ifgreek{p}\else\iflanguage{russian}{u}
+ {\ifmmode\pi\else{\begin{math}\pi\end{math}}\fi}\fi{}} % 227 ã
+\def\asciiccxxviii{\ifgreek{S}\else\iflanguage{russian}{v}
+ {\ifmmode\Sigma\else{\begin{math}\Sigma\end{math}}\fi}\fi{}} % 228 ä
+\def\asciiccxxix{\ifgreek{s}\else\iflanguage{russian}{h}
+ {\ifmmode\sigma\else{\begin{math}\sigma\end{math}}\fi}\fi{}} % 229 å
+\def\asciiccxxx{\ifgreek{m}\else\iflanguage{russian}{c}
+ {\ifmmode\mu\else{\begin{math}\mu\end{math}}\fi}\fi{}} % 230 æ
+\def\asciiccxxxi{\ifgreek{g}\else\iflanguage{russian}{\cz}
+ {\ifmmode\gamma\else{\begin{math}\gamma\end{math}}\fi}\fi{}} % 231 ç
+\def\asciiccxxxii{\ifgreek{F}\else\iflanguage{russian}{\s}
+ {\ifmmode\Phi\else{\begin{math}\Phi\end{math}}\fi}\fi{}} % 231 è
+\def\asciiccxxxiii{\ifgreek{j}\else\iflanguage{russian}{\scz}
+ {\ifmmode\theta\else{\begin{math}\theta\end{math}}\fi}\fi{}} % 233 é
+\def\asciiccxxxiv{\ifgreek{W}\else\iflanguage{russian}{\Tz}
+ {\ifmmode\Omega\else{\begin{math}\Omega\end{math}}\fi}\fi{}} % 234 ê
+\def\asciiccxxxv{\ifgreek{d}\else\iflanguage{russian}{y}
+ {\ifmmode\delta\else{\begin{math}\delta\end{math}}\fi}\fi{}} % 235 ë
+\def\asciiccxxxvi{\iflanguage{russian}{\Mz}
+ {\ifmmode\infty\else{\begin{math}\infty\end{math}}\fi{}}} % 236 ì
+\def\asciiccxxxvii{\iflanguage{russian}z{\o }} % 237 í
+\def\asciiccxxxviii{\ifgreek{e}\else\iflanguage{russian}{\ju}
+ {\ifmmode\varepsilon\else{\begin{math}\varepsilon\end{math}}\fi}\fi{}}
+% 238 î
+\def\asciiccxxxix{\iflanguage{russian}{\ja}
+{\ifmmode\bigcap\else{\begin{math}\bigcap\end{math}}\fi{}}} % 239 ï
+\def\asciiccxl{\ifmmode\equiv\else{\begin{math}\equiv\end{math}}\fi{}} % 240 ð
+\def\asciiccxli{\iflanguage{russian}{"e}
+ {\ifmmode\pm\else{\begin{math}\pm\end{math}}\fi{}}} % 241 ñ
+\def\asciiccxlii{\iflanguage{russian}
+ {\ifmmode^{2}\else{\begin{math}^{2}\end{math}}\fi{}}
+ {\ifmmode\geq\else{\begin{math}\geq\end{math}}\fi{}}} % 242 ò
+\def\asciiccxliii{\iflanguage{russian}{\footnote}
+ {\ifmmode\leq\else{\begin{math}\leq\end{math}}\fi{}}} % 243 ó
+\def\asciiccxlvi{\ifmmode\div\else{\begin{math}\div\end{math}}\fi{}} % 246 ö
+\def\asciiccxlvii{\ifmmode\approx\else{\begin{math}\approx\end{math}}\fi{}} % 247 ÷
+\def\asciiccxlviii{\ifmmode{^0}\else{\begin{math}^0\end{math}}\fi{}} % 248 ø
+\def\asciiccxlix{\pel} % 249 ù
+\def\asciiccla{\ifdots\hbox\bgroup\fi%\else\unskip\penalty-301\fi
+ \ifnextchar\asciiccl{\ifmmode\mathinner{\ldotp\,}
+ \else\begin{math}\mathinner{\ldotp\,}\end{math}\fi\dotsfalse}
+ {\ifmmode\mathinner{\ldotp\,}
+ \else\begin{math}\mathinner{\ldotp\,}\end{math}\fi\egroup\dotstrue}}
+\def\asciiccl{\protect\asciiccla} %
+%\@ifnextcharú{\ifmmode\ldotp\,\else
+% \begin{math}\ldotp\,\end{math}\fi\linebreak}
+% {\ifmmode\ldotp\,\else
+% \begin{math}\ldotp\,\end{math}\fi\nolinebreak}
+% % 250 ú
+\def\asciiccli{\root} % û
+\def\asciicclii{\footnote} % ü
+\def\asciiccliii{\ifmmode{^2}\else{\begin{math}^2\end{math}}\fi}
+\def\asciiccliv{\item } % þ
+\gdef\agr{\`{a}}
+\gdef\egr{\`{e}}
+\gdef\igr{\`{\i}}
+\gdef\ogr{\`{o}}
+\gdef\ugr{\`{u}}
+\gdef\aac{\'{a}}
+\gdef\eac{\'{e}}
+\gdef\iac{\'{\i}}
+\gdef\oac{\'{o}}
+\gdef\uac{\'{u}}
+\gdef\ahat{\^{a}}
+\gdef\ehat{\^{e}}
+\gdef\ihat{\^{\i}}
+\gdef\ohat{\^{o}}
+\gdef\uhat{\^{u}}
+\catcode`\"\active
+\gdef\idots{"i}
+\catcode`\"12
+\gdef\ntilde{\~{n}}
+\gdef\E{\relax}
+\gdef\e{\relax}
+\gdef\S{\relax}
+\gdef\s{\relax}
+\gdef\Z{\relax}
+\gdef\z{\relax}
+\gdef\Ja{\relax}
+\gdef\ja{\relax}
+\gdef\Ju{\relax}
+\gdef\ju{\relax}
+\gdef\Cz{\relax}
+\gdef\cz{\relax}
+\gdef\Mz{\relax}
+\gdef\mz{\relax}
+\gdef\Tz{\relax}
+\gdef\tz{\relax}
+\gdef\Scz{\relax}
+\gdef\scz{\relax}
+\catcode\lq\'=11
+\catcode\lq\`=11
+\catcode\lq\~=11
+\lccode\lq\'=\lq\'%
+\lccode\lq\`=\lq\`%
+\lccode\lq\~=\lq\~%
+\def\gobble#1{}
+\def\keybgreek{\ifx‚\undefined%
+\typeout{Warning: Be sure your TeX version uses ascii.tcp^^J
+\@spaces\@spaces
+or do not use an extended keyboard!}\fi%
+\def\eac{'e}%
+\def\ahat{~a}%
+\def\agr{`a}%
+\def\ehat{~e}%
+\def\egr{`e}%
+\def\ogr{`o}%
+\def\ihat{~i}%
+\def\igr{`i}%
+\def\ohat{~o}%
+\def\uhat{~u}%
+\def\ugr{`u}%
+\def\aac{'a}%
+\def\iac{'i}%
+\def\oac{'o}%
+\def\uac{'u}%
+\def\ntilde{~h}%
+\def\asciiccxxxvi{~w}%
+}
+\catcode\lq\'=12
+\catcode\lq\`=12
+\catcode\lq\~=13
+\lccode\lq\'=\lq\'%
+\lccode\lq\`=\lq\`%
+\lccode\lq\~=\lq\~%
+\newcount\vwl
+\newcount\acct
+\def\lt{<}
+\def\gt{>}
+{%
+\catcode\lq\<=13%
+\catcode\lq\>=13%
+\catcode\lq\~=11%
+\catcode\lq\"=11%
+\catcode\lq\|=11%
+\catcode\lq\'=13%
+\catcode\lq\`=13%
+\lccode\lq\>=\lq\>%
+\lccode\lq\<=\lq\<%
+\lccode\lq\~=\lq\~%
+\lccode\lq\"=\lq\"%
+\lccode\lq\|=\lq\|%
+\lccode\lq\'=\lq\'%
+\lccode\lq\`=\lq\`%
+ \gdef'{\ifnextchar `{\expandafter\smoothgrave\gobble}%
+ {\ifnextchar ~{\expandafter\smoothcircumflex\gobble}%
+ {\ifnextchar '{\expandafter\accent\rq136\gobble}%
+ {\ifnextchar\asciiclx{\expandafter\aaclenis\gobble}%
+ {\ifnextchar\asciicxxx{\expandafter\eaclenis\gobble}%
+ {\ifnextchar\asciiclxi{\expandafter\iaclenis\gobble}%
+ {\ifnextchar\asciiclxii{\expandafter\oaclenis\gobble}%
+ {\ifnextchar\asciiclxiii{\expandafter\uaclenis\gobble}%
+ {\ifnextchar\asciicxxxiii{\expandafter\agrlenis\gobble}%
+ {\ifnextchar\asciicxxxviii{\expandafter\egrlenis\gobble}%
+ {\ifnextchar\asciicxli{\expandafter\igrlenis\gobble}%
+ {\ifnextchar\asciicxlix{\expandafter\ogrlenis\gobble}%
+ {\ifnextchar\asciicli{\expandafter\ugrlenis\gobble}%
+ {\char\lq\'}}}}}}}}}}}}}}
+ \gdef`{\ifnextchar `{\expandafter\roughgrave\gobble}%
+ {\ifnextchar ~{\expandafter\roughcircumflex\gobble}%
+ {\ifnextchar '{\expandafter\accent\rq126\gobble}%
+ {\ifnextchar\asciiclx{\expandafter\aacasper\gobble}%
+ {\ifnextchar\asciicxxx{\expandafter\eacasper\gobble}%
+ {\ifnextchar\asciiclxi{\expandafter\iaclenis\gobble}%
+ {\ifnextchar\asciiclxii{\expandafter\oacasper\gobble}%
+ {\ifnextchar\asciiclxiii{\expandafter\uaclenis\gobble}%
+ {\ifnextchar\asciicxxxiii{\expandafter\agrasper\gobble}%
+ {\ifnextchar\asciicxxxviii{\expandafter\egrasper\gobble}%
+ {\ifnextchar\asciicxli{\expandafter\igrlenis\gobble}%
+ {\ifnextchar\asciicxlix{\expandafter\ograsper\gobble}%
+ {\ifnextchar\asciicli{\expandafter\ugrlenis\gobble}%
+ {\char\lq\`}}}}}}}}}}}}}}
+ \gdef>{\ifnextchar `{\expandafter\smoothgrave\gobble}%
+ {\ifnextchar ~{\expandafter\smoothcircumflex\gobble}%
+ {\ifnextchar '{\expandafter\accent\rq136\gobble}%
+ {\ifnextchar\asciiclx{\expandafter\aaclenis\gobble}%
+ {\ifnextchar\asciicxxx{\expandafter\eaclenis\gobble}%
+ {\ifnextchar\asciiclxi{\expandafter\iaclenis\gobble}%
+ {\ifnextchar\asciiclxii{\expandafter\oaclenis\gobble}%
+ {\ifnextchar\asciiclxiii{\expandafter\uaclenis\gobble}%
+ {\ifnextchar\asciicxxxiii{\expandafter\agrlenis\gobble}%
+ {\ifnextchar\asciicxxxviii{\expandafter\egrlenis\gobble}%
+ {\ifnextchar\asciicxli{\expandafter\igrlenis\gobble}%
+ {\ifnextchar\asciicxlix{\expandafter\ogrlenis\gobble}%
+ {\ifnextchar\asciicli{\expandafter\ugrlenis\gobble}%
+ {\char\lq\>}}}}}}}}}}}}}}
+ \gdef\aaclenis{\accent\rq136 a\relax}
+ \gdef\eaclenis{\accent\rq136 e\relax}
+ \gdef\iaclenis{\accent\rq136 i\relax}
+ \gdef\oaclenis{\accent\rq136 o\relax}
+ \gdef\uaclenis{\accent\rq136 u\relax}
+ \gdef\agrlenis{\accent\rq137 a\relax}
+ \gdef\egrlenis{\accent\rq137 e\relax}
+ \gdef\igrlenis{\accent\rq137 i\relax}
+ \gdef\ogrlenis{\accent\rq137 o\relax}
+ \gdef\ugrlenis{\accent\rq137 u\relax}
+ \gdef<{\ifnextchar `{\expandafter\roughgrave\gobble}%
+ {\ifnextchar ~{\expandafter\roughcircumflex\gobble}%
+ {\ifnextchar '{\expandafter\accent\rq126\gobble}%
+ {\ifnextchar\asciiclx{\expandafter\aacasper\gobble}%
+ {\ifnextchar\asciicxxx{\expandafter\eacasper\gobble}%
+ {\ifnextchar\asciiclxi{\expandafter\iaclenis\gobble}%
+ {\ifnextchar\asciiclxii{\expandafter\oacasper\gobble}%
+ {\ifnextchar\asciiclxiii{\expandafter\uaclenis\gobble}%
+ {\ifnextchar\asciicxxxiii{\expandafter\agrasper\gobble}%
+ {\ifnextchar\asciicxxxviii{\expandafter\egrasper\gobble}%
+ {\ifnextchar\asciicxli{\expandafter\igrlenis\gobble}%
+ {\ifnextchar\asciicxlix{\expandafter\ograsper\gobble}%
+ {\ifnextchar\asciicli{\expandafter\ugrlenis\gobble}%
+ {\char\lq\<}}}}}}}}}}}}}}
+ \gdef\aacasper{\accent\rq126 a\relax}
+ \gdef\eacasper{\accent\rq126 e\relax}
+ \gdef\iacasper{\accent\rq126 i\relax}
+ \gdef\oacasper{\accent\rq126 o\relax}
+ \gdef\uacasper{\accent\rq126 u\relax}
+ \gdef\agrasper{\accent\rq103 a\relax}
+ \gdef\egrasper{\accent\rq103 e\relax}
+ \gdef\igrasper{\accent\rq103 i\relax}
+ \gdef\ograsper{\accent\rq103 o\relax}
+ \gdef\ugrasper{\accent\rq103 u\relax}
+ \gdef\smoothgrave#1{\acct=\rq137 \vwl=\lq#1 \dobreathinggrave}
+ \gdef\roughgrave#1{\acct=\rq103 \vwl=\lq#1 \dobreathinggrave}
+ \gdef\dobreathinggrave{\ifnum\vwl\lt\rq133%40 %if uppercase
+ \ifnum\vwl\gt\rq100%
+ \char\the\acct\char\the\vwl\else\expandafter\testiota\fi\fi}
+ \gdef\smoothcircumflex#1{\acct=\rq134 \vwl=\lq#1 \dobreathingcircumflex}
+ \gdef\roughcircumflex#1{\acct=\rq100 \vwl=\lq#1 \dobreathingcircumflex}
+ \gdef\dobreathingcircumflex{\ifnum\vwl\lt\rq140 %if uppercase
+ \char\the\acct\kern -.2em\char\the\vwl\else
+ \doaccent\fi}
+ \gdef\doaccent{\accent\the\acct \char\the\vwl\relax}
+ \gdef\testiota{\ifnextchar |{\addiota\doaccent\gobble}{\doaccent}}
+ \gdef\addiota{\ifnum\vwl=\lq a\vwl=\rq370%
+ \else\ifnum\vwl=\lq h\vwl=\rq371 \else\vwl=\rq372 \fi\fi}
+ \gdef\doaccent{\accent\the\acct \char\the\vwl\relax}
+}
diff --git a/obsolete/macros/latex209/contrib/ml/ipa.sty b/obsolete/macros/latex209/contrib/ml/ipa.sty
new file mode 100644
index 0000000000..67329c5aa6
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/ml/ipa.sty
@@ -0,0 +1,294 @@
+%%
+%% This is file `ipa.sty'
+
+\def\fileversion{v1.2}
+\def\filedate{93/1/20}
+
+\typeout{Style Option: `ipa'
+ \fileversion\space <\filedate>}
+\@ifundefined{selectfont}
+ {\@latexerr{`ipa' style option could only be used
+ with the new font selection scheme}\@eha
+ \endinput}{}
+\new@fontshape{ipa}{m}{n}{%
+ <5>wsuipa8 at5pt%
+ <6>wsuipa8 at5.6pt%
+ <7>wsuipa8 at7pt%
+ <8>wsuipa8%
+ <9>wsuipa9%
+ <10>wsuipa10%
+ <11>wsuipa11%
+ <12>wsuipa12%
+ <14>wsuipa10 at14.4pt%
+ <17>wsuipa17%
+ <20>wsuipa12 at20.74pt%
+ <25>wsuipa12 at24.88pt}{}%
+\new@fontshape{ipa}{m}{sl}{%
+ <5>wslipa8 at5pt%
+ <6>wslipa8 at5.6pt%
+ <7>wslipa8 at7pt%
+ <8>wslipa8%
+ <9>wslipa9%
+ <10>wslipa10%
+ <11>wslipa11%
+ <12>wslipa12%
+ <14>wslipa10 at14.4pt%
+ <17>wslipa17%
+ <20>wslipa12 at20.74pt%
+ <25>wslipa12 at24.88pt}{}%
+\new@fontshape{ipa}{bx}{n}{%
+ <5>wbxipa8 at5pt%
+ <6>wbxipa8 at5.6pt%
+ <7>wbxipa8 at7pt%
+ <8>wbxipa8%
+ <9>wbxipa9%
+ <10>wbxipa10%
+ <11>wbxipa11%
+ <12>wbxipa12%
+ <14>wbxipa10 at14.4pt%
+ <17>wbxipa17%
+ <20>wbxipa12 at20.74pt%
+ <25>wbxipa12 at24.88pt}{}%
+\extra@def{ipa}{}{}
+
+\def\graffiti{\protect\pgraffiti}
+\def\pgraffiti{\family{ipa}\series{c}\shape{sl}\size{9}{10pt}\selectfont}
+\def\@makefnmark{\raise 1ex\hbox{\scriptsize\@thefnmark}}
+
+\gdef\ipa#1{{\protect\family{ipa}\protect\selectfont#1}} % \ipa redefined
+
+%% The following macro is necessary to place an accent over the
+%% character definitions below. For example, you should say:
+%% \diatop[\^|\openo]
+%%
+
+\def\diatop[#1|#2]{{\setbox1=\hbox{{#1{}}}\setbox2=\hbox{{#2{}}}%
+ \dimen0=\ifdim\wd1>\wd2\wd1\else\wd2\fi%
+ \dimen1=\ht2\advance\dimen1by-1ex%
+ \setbox1=\hbox to1\dimen0{\hss#1\hss}%
+ \rlap{\raise1\dimen1\box1}%
+ \hbox to1\dimen0{\hss#2\hss}}}%
+
+%% As an alternative, you could uncomment the following two lines:
+%%
+%% \catcode`"=\active
+%% \def"#1#2{\diatop[#1|#2]}
+%%
+%% And then you could place an accent over the ipa character by
+%% calling the macro " which itself calls \diatop. For example, you
+%% would say:
+%%
+%% "\^\openo
+
+%% THE FOLLOWING macros access the IPA chars from the WSU IPA font
+
+%% A-type shapes:
+\def\inva{{\ipa{\char'000}}}%
+\def\scripta{{\ipa{\char'001}}}%
+\def\nialpha{{\ipa{\char'002}}}%
+\def\invscripta{{\ipa{\char'003}}}%
+\def\invv{{\ipa{\char'004}}}%
+
+%% B-type shapes:
+\def\crossb{{\ipa{\char'005}}}%
+\def\barb{{\ipa{\char'006}}}%
+\def\slashb{{\ipa{\char'007}}}%
+\def\hookb{{\ipa{\char'010}}}%
+\def\nibeta{{\ipa{\char'011}}}%
+
+%% C-type shapes:
+\def\slashc{{\ipa{\char'012}}}%
+\def\curlyc{{\ipa{\char'013}}}%
+\def\clickc{{\ipa{\char'014}}}%
+
+%% D-type shapes:
+\def\crossd{{\ipa{\char'015}}}%
+\def\bard{{\ipa{\char'016}}}%
+\def\slashd{{\ipa{\char'017}}}%
+\def\hookd{{\ipa{\char'020}}}%
+\def\taild{{\ipa{\char'021}}}%
+\def\dz{{\ipa{\char'022}}}%
+\def\eth{{\ipa{\char'023}}}%
+\def\scd{{\ipa{\char'024}}}%
+
+%% E-type shapes:
+\def\schwa{{\ipa{\char'025}}}%
+\def\er{{\ipa{\char'026}}}%
+\def\reve{{\ipa{\char'027}}}%
+\def\niepsilon{{\ipa{\char'030}}}%
+\def\revepsilon{{\ipa{\char'031}}}%
+\def\hookrevepsilon{{\ipa{\char'032}}}%
+\def\closedrevepsilon{{\ipa{\char'033}}}%
+
+%% G-type shapes:
+\def\scriptg{{\ipa{\char'034}}}%
+\def\hookg{{\ipa{\char'035}}}%
+\def\scg{{\ipa{\char'036}}}%
+\def\nigamma{{\ipa{\char'037}}}%
+\def\ipagamma{{\ipa{\char'040}}}%
+\def\babygamma{{\ipa{\char'041}}}%
+
+%% H-type shapes:
+\def\hv{{\ipa{\char'042}}}%
+\def\crossh{{\ipa{\char'043}}}%
+\def\hookh{{\ipa{\char'044}}}%
+\def\hookheng{{\ipa{\char'045}}}%
+\def\invh{{\ipa{\char'046}}}%
+
+%% I-type shapes:
+\def\bari{{\ipa{\char'047}}}%
+\def\dlbari{{\ipa{\char'050}}}% ``dotless bar i''
+\def\niiota{{\ipa{\char'051}}}%
+\def\sci{{\ipa{\char'052}}}%
+\def\barsci{{\ipa{\char'053}}}% ``barred small cap i''
+
+%% J-type shape:
+\def\invf{{\ipa{\char'054}}}%
+
+%% L-type shapes:
+\def\tildel{{\ipa{\char'055}}}%
+\def\barl{{\ipa{\char'056}}}%
+\def\latfric{{\ipa{\char'057}}}%
+\def\taill{{\ipa{\char'060}}}%
+\def\lz{{\ipa{\char'061}}}%
+\def\nilambda{{\ipa{\char'062}}}%
+\def\crossnilambda{{\ipa{\char'063}}}%
+
+%% M-type shapes:
+\def\labdentalnas{{\ipa{\char'064}}}%
+\def\invm{{\ipa{\char'065}}}%
+\def\legm{{\ipa{\char'066}}}%
+
+%% N-type shapes:
+\def\nj{{\ipa{\char'067}}}%
+\def\eng{{\ipa{\char'070}}}%
+\def\tailn{{\ipa{\char'071}}}%
+\def\scn{{\ipa{\char'072}}}%
+
+%% O-type shapes:
+\def\clickb{{\ipa{\char'073}}}%
+\def\baro{{\ipa{\char'074}}}%
+\def\openo{{\kern.05em\ipa{\char'075}\kern-.05em}}%
+\def\niomega{{\ipa{\char'076}}}%
+\def\closedniomega{{\ipa{\char'077}}}%
+\def\oo{{\ipa{\char'100}}}%
+
+%% P-type shapes:
+\def\barp{{\ipa{\char'101}}}%
+\def\thorn{{\ipa{\char'102}}}%
+\def\niphi{{\ipa{\char'103}}}%
+
+%% R-type shapes:
+\def\flapr{{\ipa{\char'104}}}%
+\def\legr{{\ipa{\char'105}}}%
+\def\tailr{{\ipa{\char'106}}}%
+\def\invr{{\ipa{\char'107}}}%
+\def\tailinvr{{\ipa{\char'110}}}%
+\def\invlegr{{\ipa{\char'111}}}%
+\def\scr{{\ipa{\char'112}}}%
+\def\invscr{{\ipa{\char'113}}}%
+
+%% S-type shapes:
+\def\tails{{\ipa{\char'114}}}%
+\def\esh{{\ipa{\char'115}}}%
+\def\curlyesh{{\ipa{\char'116}}}%
+\def\nisigma{{\ipa{\char'117}}}%
+
+%% T-type shapes:
+\def\tailt{{\ipa{\char'120}\kern-.05em}}%
+\def\tesh{{\ipa{\char'121}}}%
+\def\clickt{{\ipa{\char'122}}}%
+\def\nitheta{{\ipa{\char'123}}}%
+
+%% U-type shapes:
+\def\baru{{\ipa{\char'124}}}%
+\def\slashu{{\ipa{\char'125}}}%
+\def\niupsilon{{\ipa{\char'126}}}%
+\def\scu{{\ipa{\char'127}}}%
+\def\barscu{{\ipa{\char'130}}}%
+
+%% V-type shape:
+\def\scriptv{{\ipa{\char'131}}}%
+
+%% W-type shape:
+\def\invw{{\ipa{\char'132}}}%
+
+%% X-type shape:
+\def\nichi{{\ipa{\char'133}}}%
+
+%% Y-type shapes:
+\def\invy{{\ipa{\char'134}}}%
+\def\scy{{\ipa{\char'135}}}%
+
+%% Z-type shapes:
+\def\curlyz{{\ipa{\char'136}}}%
+\def\tailz{{\ipa{\char'137}}}%
+\def\yogh{{\ipa{\char'140}}}%
+\def\curlyyogh{{\ipa{\char'141}}}%
+
+%% ?-type shapes:
+\def\glotstop{{\ipa{\char'142}}}%
+\def\revglotstop{{\ipa{\char'143}}}%
+\def\invglotstop{{\ipa{\char'144}}}%
+\def\ejective{{\ipa{\char'145}}}%
+\def\reveject{{\ipa{\char'146}}}%
+
+%% AND that should be it, as far as actual characters go.
+%%
+%% THE following is the set of diacritics. Please try to get
+%% the 4 t-bars lined up above the 4 pointers, so you may
+%% have to reshuffle things a bit. Not to worry too much. I
+%% think the diacritics can be grouped more according to
+%% shape, so comma-like things are together, etc.
+%%
+
+\def\dental#1{\oalign{#1\crcr
+ \hidewidth{\ipa{\char'147}}\hidewidth}}
+
+\def\upt{{\ipa{\char'154}}}% These are IPA pointers
+\def\downt{{\ipa{\char'155}}}%
+\def\leftt{{\ipa{\char'156}}}%
+\def\rightt{{\ipa{\char'157}}}%
+
+ % These are American versions of t-bars
+\def\upp{{\ipa{\char'164}}}%
+\def\downp{{\ipa{\char'165}}}%
+\def\leftp{{\ipa{\char'166}}}%
+\def\rightp{{\ipa{\char'167}}}%
+
+\def\stress{{\ipa{\char'150}}}% primary stress
+\def\secstress{{\ipa{\char'151}}}% secondary stress
+
+\def\syllabic{{\ipa{\char'152}}}% syllabic marker
+
+\def\corner{{\ipa{\char'153}}}%
+
+ % American equivalent: raised dot
+\def\halflength{{\ipa{\char'160}}}%
+ % American equivalent: colon
+\def\length{{\ipa{\char'161}}}%
+
+\def\underdots{{\ipa{\char'162}}}%
+
+ % ``reversed apostrophe'', p. 216
+\def\ain{{\ipa{\char'163}}}%
+
+\def\overring{{\ipa{\char'170}}}%
+\def\underring{{\ipa{\char'171}}}%
+
+\def\open{{\ipa{\char'172}}}%
+
+\def\midtilde{{\ipa{\char'173}}}%
+\def\undertilde{{\ipa{\char'174}}}%
+
+\def\underwedge{{\ipa{\char'175}}}%
+
+\def\polishhook{{\ipa{\char'176}}}%
+
+\def\underarch#1{\oalign{#1\crcr
+ \hidewidth{\ipa{\char'177}}\hidewidth}}
+
+%% AND that's it for the diacritics.
+
+\endinput
+%% End of file `ipa.sty'.
diff --git a/obsolete/macros/latex209/contrib/ml/logos.sty b/obsolete/macros/latex209/contrib/ml/logos.sty
new file mode 100644
index 0000000000..be509486b7
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/ml/logos.sty
@@ -0,0 +1,109 @@
+% File : logos.sty
+% Author : Hans Stoks with ideas from Johannes Braams (JL_Braams@pttrnl.nl)
+% Date : 8-apr-1991
+% Version: 1.0
+% Purpose: Defines a new version of the LaTeX-logo and others for use
+% with the new font-selectionscheme by Mittelbach and Schoepf
+% Works with LaTeX 2.09 with lfonts.new (FMi & RS)
+%
+% With the new fontselection it becomes possible to ask for the
+% current size of the current font. Thus it becomes possible to
+% select the letter A from a font two steps smaller than the current
+% font instead of a \sc A.
+% The advantage is that \LaTeX now also works with \it, \bf and the like.
+% With 6-point we also chose 5-point for the letter a since no 4-point
+% font is available.
+%-
+\ifx\logosloaded\undefined\let\logosloaded\relax\else\endinput\fi
+\@ifundefined{selectfont}{\relax}{%
+\new@fontshape{manual}{m}{n}{%
+ <5>manfnt at4.82pt%
+ <6>manfnt at5.79pt%
+ <7>manfnt at6.94pt%
+ <8>manfnt at8.33pt%
+ <9>manfnt at9pt%
+ <10>manfnt%
+ <11>manfnt at10.95pt%
+ <12>manfnt at12pt%
+ <14>manfnt at14.4pt%
+ <17>manfnt at17.28pt%
+ <20>manfnt at20.74pt
+ <25>manfnt at24.88pt%
+ <30>manfnt}{}%
+\extra@def{manual}{}{}
+\new@fontshape{dunhill}{m}{n}{%
+ <5>cmdunh10 at4.82pt%
+ <6>cmdunh10 at5.79pt%
+ <7>cmdunh10 at6.94pt%
+ <8>cmdunh10 at8.33pt%
+ <9>cmdunh10 at9pt%
+ <10>cmdunh10%
+ <11>cmdunh10 at10.95pt%
+ <12>cmdunh10 at12pt%
+ <14>cmdunh10 at14.4pt%
+ <17>cmdunh10 at17.28pt%
+ <20>cmdunh10 at20.74pt
+ <25>cmdunh10 at24.88pt%
+ <30>cmdunh10}{}%
+\extra@def{dunhill}{}{}
+\gdef\graffiti{\protect\pgraffiti}
+\gdef\pgraffiti{\family{manual}\series{c}\shape{sl}\size{9}{10pt}\selectfont}
+\gdef\@makefnmark{\raise 1ex\hbox{\scriptsize\@thefnmark}}
+\gdef\smaller{\count0=\f@size\relax%
+\ifnum\count0=6\size{5}{\baselineskip}\else%
+\ifnum\count0=7\size{5}{\baselineskip}\else%
+\ifnum\count0=8\size{6}{\baselineskip}\else%
+\ifnum\count0=9\size{7}{\baselineskip}\else%
+\ifnum\count0=10\size{8}{\baselineskip}\else%
+\ifnum\count0=11\size{9}{\baselineskip}\else%
+\ifnum\count0=12\size{10}{\baselineskip}\else%
+\ifnum\count0=14\size{11}{\baselineskip}\else%
+\ifnum\count0=17\size{12}{\baselineskip}\else%
+\ifnum\count0=20\size{14}{\baselineskip}\else%
+\ifnum\count0=25\size{17}{\baselineskip}%
+\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\selectfont}%
+\newcount\mfc@unt
+\gdef\Metafont{%
+\mfc@unt=\f@size\relax%
+\ifnum\mfc@unt=6\size{6}{\baselineskip}%
+{\family{manual}\selectfont META\-FONT}\else%
+\ifnum\mfc@unt=7\size{7}{\baselineskip}%
+{\family{manual}\selectfont META\-FONT}\else%
+\ifnum\mfc@unt=8\size{10}{\baselineskip}%
+{\family{manual}\selectfont opqr\-stuq}\else%
+\ifnum\mfc@unt=9\size{10}{\baselineskip}%
+{\family{manual}\selectfont hijk\-lmnj}\else%
+\ifnum\mfc@unt=10\size{10}{\baselineskip}%
+{\family{manual}\selectfont META\-FONT}\else%
+\ifnum\mfc@unt=11\size{11}{\baselineskip}%
+{\family{manual}\selectfont META\-FONT}\else%
+\ifnum\mfc@unt=12\size{12}{\baselineskip}%
+{\family{manual}\selectfont META\-FONT}\else%
+\ifnum\mfc@unt=14\size{14}{\baselineskip}%
+{\family{manual}\selectfont META\-FONT}\else%
+\ifnum\mfc@unt=17\size{17}{\baselineskip}%
+{\family{manual}\selectfont META\-FONT}\else%
+\ifnum\mfc@unt=20\size{20}{\baselineskip}%
+{\family{manual}\selectfont META\-FONT}\else%
+\ifnum\mfc@unt=25\size{25}{\baselineskip}%
+{\family{manual}\selectfont META\-FONT}\else%
+\ifnum\mfc@unt=30\size{10}{\baselineskip}%
+{\family{manual}\selectfont{\vbox to30pt{}()*+,-.*}}%
+\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}}%
+\let\metafont\MF
+\let\latex\LaTeX
+\gdef\BibTeX{{\rm B\kern-.05em{\sc i\kern-.025emb}\kern-.08em\TeX}}
+\gdef\LaTeX{\@ifundefined{selectfont}{\latex}{%
+L\kern-.36em\raise.3ex\hbox{\protect\smaller A}\kern-.15em
+ T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}
+\gdef\MF{\@ifundefined{selectfont}{{\small\sf META}\-{\small\sf FONT}}%
+ {\Metafont}}%{{\protect\smaller\sf META}\-{\protect\smaller\sf FONT}}
+\gdef\WEB{{\tt WEB}}%
+\gdef\STEGON{\@ifundefined{selectfont}%
+ {{\sf\small ST{\Large\rm\ital{\kern-.1em\t{}\kern-.1667em e}}GON}}%
+ {{\protect\smaller\sf
+ST{\LARGE\rm\ital{\protect\smaller\kern-.1em\t{}\kern-.1667em e}}GON}}}%
+\gdef\de_Volkskrant{\@ifundefined{selectfont}%
+ {de Volks\-krant}%
+ {{\family{dunhill}\selectfont\protect\smaller de Volks\-krant}}}%
+\endinput
diff --git a/obsolete/macros/latex209/contrib/ml/ltugboat.sty b/obsolete/macros/latex209/contrib/ml/ltugboat.sty
new file mode 120000
index 0000000000..052eefff3e
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/ml/ltugboat.sty
@@ -0,0 +1 @@
+../../../../../macros/latex209/contrib/tugboat/ltugboat.sty \ No newline at end of file
diff --git a/obsolete/macros/latex209/contrib/ml/minutes.sty b/obsolete/macros/latex209/contrib/ml/minutes.sty
new file mode 100644
index 0000000000..9d3c1b14bb
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/ml/minutes.sty
@@ -0,0 +1,181 @@
+% This is MINUTES.STY in text format
+% a style for generating minutes of a meeting
+\def\fileversion{0.1}\def\filedate{16 sept 1994}
+% Author:
+% Hans Stoks
+% u251006@vm.uci.kun.nl
+\typeout{Document Style `Minutes'. Version <\fileversion>, <\filedate>}
+\input a4.sty
+\input outline.sty
+
+\def\@ptsize{1}
+\@namedef{ds@10pt}{\def\@ptsize{0}}
+\@namedef{ds@11pt}{\def\@ptsize{1}}
+\@namedef{ds@12pt}{\def\@ptsize{2}}
+\@twosidefalse
+\@options
+\lineskip 1pt \normallineskip 1pt
+\def\baselinestretch{1}
+% separation between text en foot
+\newdimen\footsep \footsep=1.5cm % like headsep
+\advance\footskip by \footsep
+\def\ps@empty{
+ \def\@oddhead{}\def\@oddfoot{}
+ \def\@evenhead{}\def\@evenfoot{}}
+\def\ps@plain{
+ \def\@oddhead{}\def\@evenhead{}
+ \def\@oddfoot{\rm\hfil\thepage}
+ \let\@evenfoot=\@oddfoot}
+\ifcase \@ptsize\relax\parindent15pt
+\def\@normalsize{\@setsize\normalsize{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6pt plus3pt minus3pt}
+\def\small{\@setsize\small{11pt}\ixpt\@ixpt
+\abovedisplayskip 8.5pt plus 3pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2pt\belowdisplayshortskip 4pt plus2pt minus 2pt}
+\def\footnotesize{\@setsize\footnotesize{9.5pt}\viiipt\@viiipt
+\abovedisplayskip 6pt plus 2pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt\belowdisplayshortskip 3pt plus 1pt minus
+2pt}
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\or\parindent17pt
+\def\@normalsize{\@setsize\normalsize{13.6pt}\xipt\@xipt
+\abovedisplayskip 11pt plus3pt minus6pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6.5pt plus3.5pt
+minus3pt}
+\def\small{\@setsize\small{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6pt plus3pt minus3pt}
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt
+\abovedisplayskip 8pt plus 2pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt\belowdisplayshortskip 4pt plus 2pt minus
+2pt}
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\or\parindent1.5em
+\def\@normalsize{\@setsize\normalsize{15pt}\xiipt\@xiipt
+\abovedisplayskip 12pt plus3pt minus7pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6.5pt plus3.5pt
+minus3pt}
+\def\small{\@setsize\small{13.6pt}\xipt\@xipt
+\abovedisplayskip 11pt plus3pt minus6pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6.5pt plus3.5pt
+minus3pt}
+\def\footnotesize{\@setsize\footnotesize{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6pt plus3pt minus3pt}
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{18pt}\xivpt\@xivpt}
+\def\Large{\@setsize\Large{22pt}\xviipt\@xviipt}
+\def\LARGE{\@setsize\LARGE{25pt}\xxpt\@xxpt}
+\def\huge{\@setsize\huge{30pt}\xxvpt\@xxvpt}
+\let\Huge=\huge
+\fi
+\normalsize
+\def\topfraction{.7}
+\def\bottomfraction{.3}
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+\newdimen\@inspring
+\newdimen\@restlijn
+\@inspring=8em
+\@restlijn=\textwidth
+\advance \@restlijn by -\@inspring
+
+\gdef\title#1#2{%
+ \begin{flushleft}
+ {\Large\bf#1}\\
+ {\it#2}
+ \end{flushleft}
+ \vspace{2\baselineskip}}
+
+\gdef\f@rstskip{\vspace{2\baselineskip}}
+\gdef\pr@sent{\presentname}
+\gdef\notpr@sent{\notpresentname}
+
+\def\present#1{\f@rstskip\par
+ \halign{\vtop{\hsize\@inspring\noindent##} &
+ \vtop{\hsize\@restlijn\noindent##} \cr \pr@sent &
+ #1\cr}\def\pr@sent{\hspace\@inspring}\let\f@rstskip\relax}
+
+\def\notpresent#1{\f@rstskip\par
+ \halign{\vtop{\hsize\@inspring\noindent##} &
+ \vtop{\hsize\@restlijn\noindent##} \cr \notpr@sent &
+ #1\cr}\def\notpr@sent{\hspace\@inspring}\let\f@rstskip\relax}
+
+\newcounter{agenda}
+\def\theagenda{\arabic{agenda}}
+\def\agendamark#1{}
+%\def\l@agenda{}
+\def\numberline#1{\noindent{#1. }}
+\def\contentsline#1#2#3{#2\\}
+\def\head#1{%
+ \vspace{0.5\baselineskip}
+ \item
+ \begin{flushleft}
+ {\large\bf#1}
+ \end{flushleft}
+ \vspace{0.2\baselineskip}
+ \parskip0.3\baselineskip}
+
+\def\l@agenda#1#2{\addpenalty{\@secpenalty}% good place for page break
+ \addvspace{1.0em plus\p@}%
+ \@tempdima 1.5em
+ \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \bf
+ \leavevmode
+ \advance\leftskip\@tempdima
+ \hskip -\leftskip
+ #1\nobreak\hfil \nobreak\hbox to\@pnumwidth{\hss #2}\par
+ \endgroup}
+\setcounter{secnumdepth}{3}
+\def\point{\@startsection{agenda}{1}{\z@}{-3.25ex
+ plus-1ex minus-.2ex}{1.5ex
+ plus.2ex}{\reset@font\normalsize\bf}}
+\def\makeagenda{\point*\agendaname\@starttoc{toc}}
+\def\opening{\point*\openname}%\addtocounter{agenda}{-1}}
+
+\def\signature#1{\def\fromsig{#1}}\def\fromsig{}
+
+\def\approval{\par\interlinepenalty200\parindent\z@\relax}
+
+\long\def\closing#1{\par\nobreak\vspace{\parskip}
+ \interlinepenalty\@M\noindent
+ \ifx\@empty\fromsig
+ \else\ignorespaces #1\signname
+ \vspace{6\medskipamount}
+ \halign{\vtop{\hsize\@inspring\noindent##} &
+ \vtop{\hsize\@restlijn\noindent##} \cr \hspace{\@inspring} &
+ \fromsig\cr}
+ \fi \par}
+
+\setoutlinesep{0.2\baselineskip}
+
+\parskip .7em plus .3em minus .2em
+\topsep .4em \partopsep 0pt \itemsep .4em
+\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301
+\@beginparpenalty -\@lowpenalty \@endparpenalty -\@lowpenalty \@itempenalty
+-\@lowpenalty
+\sloppy\ps@plain
+\pagenumbering{arabic} \onecolumn \@fileswtrue
+\ifx\undefined\presentname\def\presentname{Attendance}\fi
+\ifx\undefined\notpresentname\def\notpresentname{Not Attended}\fi
+\ifx\undefined\agendaname\def\agendaname{Agenda}\fi
+\ifx\undefined\openname\def\openname{Opening}\fi
+\ifx\undefined\signname\def\signname{Signed}\fi
diff --git a/obsolete/macros/latex209/contrib/ml/ml.bib b/obsolete/macros/latex209/contrib/ml/ml.bib
new file mode 100644
index 0000000000..f5e26a7c6a
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/ml/ml.bib
@@ -0,0 +1,454 @@
+@STRING{dutch = {\dutchedition}}
+@STRING{english = {\englishedition}}
+@STRING{french = {\frenchedition}}
+@STRING{german = {\germanedition}}
+@STRING{greek = {\greekedition}}
+@STRING{maasai = {\maasaiedition}}
+@STRING{russian = {\russianedition}}
+@STRING{spanish = {\spanishedition}}
+@STRING{swahili = {\swahiliedition}}
+
+@STRING{Alphen =
+ {\iflanguage{greek}{>'Alfen >`an d`e Ra~in}
+ {\iflanguage{russian}{Alfn v Rejne}
+ {Al\-phen aan de Rijn}}}}
+@STRING{Amersfoort =
+ {\iflanguage{greek}{>'Amersfort}
+ {Amers\-foort}}}
+@STRING{Amman =
+ {\iflanguage{greek}{>Amm'an}
+ {Amman}}}
+@STRING{Amsterdam =
+ {\iflanguage{greek}{>Amsterd'am}
+ {Am\-ster\-dam}}}
+@STRING{Assen =
+ {\iflanguage{greek}{>'Assen}
+ {As\-sen}}}
+@STRING{Athens =
+ {\iflanguage{greek}{>Aj~hnai}
+ {\iflanguage{russian}{Afiny}
+ {\iflanguage{english}{Athens}
+ {\iflanguage{french}{Ath\`ene}
+ {\iflanguage{spanish}{Atenas}
+ {Athene}}}}}}}
+@STRING{Auxerre =
+ {\iflanguage{greek}{>Wxa~ir}
+ {\iflanguage{russian}{Aukserre}
+ {Auxerre}}}}
+@STRING{Baarn =
+ {\iflanguage{greek}{B'arnh}
+ {Baarn}}}
+@STRING{Bale =
+ {\iflanguage{greek}{B~al}
+ {\iflanguage{russian}{Bal{\Mz}}
+ {\iflanguage{english}{Bale}
+ {B\^ale}}}}}
+@STRING{Baltimore =
+ {\iflanguage{greek}{B'altimwr}
+ {Baltimore}}}
+@STRING{Berlin =
+ {\iflanguage{greek}{Berol~ino}
+ {\iflanguage{dutch}{Berlijn}
+ {\iflanguage{spanish}{Berl\'{\i}n}
+ {Ber\-lin}}}}}
+@STRING{Bern =
+ {\iflanguage{greek}{B'ernh}
+ {\iflanguage{french}{Berne}
+ {Bern}}}}
+@STRING{Bloomington =
+ {\iflanguage{greek}{Blo'umigktwn}
+ {\iflanguage{russian}{Blumington}
+ {Bloomington}}}}
+@STRING{Bonn =
+ {\iflanguage{greek}{B'onnh}
+ {Bonn}}}
+@STRING{Bruges =
+ {\iflanguage{greek}{Br'ugh}
+ {\iflanguage{russian}{Br{\ju}ge}
+ {\iflanguage{dutch}{Brugge}
+ {\iflanguage{german}{Br\"ugge}
+ {\iflanguage{spanish}{Brujas}
+ {Bruges}}}}}}}
+@STRING{Brunswick =
+ {\iflanguage{greek}{Br'aounsoueiq}
+ {\iflanguage{russian}{Braun{\s}veig}
+ {\iflanguage{dutch}{Brunswijk}
+ {\iflanguage{german}{Braunschweig}
+ {Brunswick}}}}}}
+@STRING{Brussels =
+ {\iflanguage{greek}{Brux'ellai}
+ {\iflanguage{russian}{Br{\ju}ssel{\Mz}}
+ {\iflanguage{dutch}{Brussel}
+ {\iflanguage{english}{Brussels}
+ {\iflanguage{french}{Bruxelles}
+ {\iflanguage{german}{Br\"ussel}
+ {\iflanguage{spanish}{Bruselas}{}}}}}}}}}
+@STRING{Bussum =
+ {\iflanguage{greek}{Bo'ussoum}
+ {Bus\-sum}}}
+@STRING{Cambridge =
+ {\iflanguage{greek}{K'embrits}
+ {\iflanguage{russian}{Kembrid{\z}}
+ {Cambridge}}}}
+@STRING{Caracas =
+ {\iflanguage{greek}{Kar'akas}
+ {\iflanguage{russian}{Karakas}
+ {Ca\-ra\-cas}}}}
+@STRING{Chicago =
+ {\iflanguage{greek}{Sik'agon}
+ {\iflanguage{russian}{Cikago}
+ {\iflanguage{german}{Chikago}
+ {Chicago}}}}}
+@STRING{Cologne =
+ {\iflanguage{greek}{Kol'wnia}
+ {\iflanguage{russian}{Keln{\Mz}}
+ {\iflanguage{dutch}{Keulen}
+ {\iflanguage{english}{Brussels}
+ {\iflanguage{french}{Bruxelles}
+ {\iflanguage{german}{K\"oln}
+ {\iflanguage{spanish}{Colonia}
+ {Cologne}}}}}}}}}
+@STRING{Dakar =
+ {\iflanguage{greek}{D'akar}
+ {Dakar}}}
+@STRING{Dar =
+ {\iflanguage{greek}{Dar es Salaam}
+ {\iflanguage{russian}{Dar es Salaam}
+ {Dar es Salaam}}}}
+@STRING{Delft =
+ {\iflanguage{greek}{D'elft}
+ {Delft}}}
+@STRING{Deventer =
+ {\iflanguage{greek}{D'ebenter}
+ {De\-ven\-ter}}}
+@STRING{Diemen =
+ {\iflanguage{greek}{D'imen}
+ {\iflanguage{russian}{Dimn}
+ {Die\-men}}}}
+@STRING{Dordrecht =
+ {\iflanguage{greek}{D'ordreqt}
+ {\iflanguage{russian}{Dordre{\ch}t}
+ {Dor\-drecht}}}}
+@STRING{Evanston =
+ {\iflanguage{greek}{H>'uanston (>'illinois)}
+ {\iflanguage{russian}{Ivanston (Illinois)}
+ {Evanston (Illinois)}}}}
+@STRING{Frankfurt =
+ {\iflanguage{greek}{Fragkfo'urth}
+ {\iflanguage{russian}{Frankfurt}
+ {Frank\-furt am Main}}}}
+@STRING{Garden =
+ {\iflanguage{greek}{G'arden S'ith}
+ {\iflanguage{russian}{Gardn Siti{\ui}}
+ {Garden City}}}}
+@STRING{Geneva =
+ {\iflanguage{greek}{Gen'euh}
+ {\iflanguage{russian}{{\Z}eneva}
+ {\iflanguage{english}{Geneva}
+ {\iflanguage{german}{Genf}
+ {\iflanguage{spanish}{Ginebra}
+ {Gen\`eve}}}}}}}
+@STRING{Glencoe =
+ {\iflanguage{greek}{Gl'enkw (Illinois)}
+ {\iflanguage{russian}{Glenko (Illinois)}
+ {Glencoe (Illinois)}}}}
+@STRING{Glueckstadt =
+ {\iflanguage{greek}{Gl'ukstadt}
+ {\iflanguage{russian}{Gl{\ju}kstadt}
+ {\iflanguage{german}{Gl\"uckstadt}
+ {Glueckstadt}}}}}
+@STRING{Godesberg =
+ {\iflanguage{greek}{G'wdesberg}
+ {Go\-des\-berg}}}
+@STRING{Goettingen =
+ {\iflanguage{greek}{Go~itiggen}
+ {\iflanguage{russian}{Getingn}
+ {\iflanguage{german}{G\"ottingen}
+ {Goettingen}}}}}
+@STRING{Gorinchem =
+ {\iflanguage{greek}{G'orinqem}
+ {\iflanguage{russian}{Gorin{\kh}em}
+ {Gorinchem}}}}
+@STRING{Goteborg =
+ {\iflanguage{greek}{Go~iteborg}
+ {\iflanguage{russian}{Geteborg}
+ {G\o{}teborg}}}}
+@STRING{Groningen =
+ {\iflanguage{greek}{Gr'wniggen}
+ {Gro\-nin\-gen}}}
+@STRING{Guetersloh =
+ {\iflanguage{greek}{G'uterslw}
+ {\iflanguage{russian}{G{\ju}trslo}
+ {\iflanguage{german}{G\"utersloh}
+ {Guetersloh}}}}}
+@STRING{Haarlem =
+ {\iflanguage{greek}{Q'arlem}
+ {\iflanguage{russian}{{\Ch}arlm}
+ {\iflanguage{english}{Harlem (The Netherlands)}
+ {\iflanguage{french}{Harlem (Pays-Bas)}
+ {Haar\-lem}}}}}}
+@STRING{Hague =
+ {\iflanguage{greek}{Q'agh}
+ {\iflanguage{russian}{Den {\Ch}ag}
+ {\iflanguage{french}{La Haye}
+ {\iflanguage{spanish}{La Haya}
+ {Den Haag}}}}}}
+@STRING{Harmondsworth =
+ {\iflanguage{greek}{Q'armondsborj (M'iddlesex)}
+ {\iflanguage{russian}{{\Ch}armondsvyrf (Middleseks)}
+ {Harmondsworth (Middlesex)}}}}
+@STRING{Heidelberg =
+ {\iflanguage{greek}{Qe~idelberg}
+ {\iflanguage{russian}{{\Ch}ejdlberg}
+ {Hei\-del\-berg}}}}
+@STRING{Indiana =
+ {\iflanguage{greek}{O>uin'wna Leik, >Indi'ana}
+ {\iflanguage{russian}{Vinona Lejk, Indiana}
+ {Winona Lake, Indiana}}}}
+@STRING{Italy =
+ {\iflanguage{dutch}{Itali\"e}
+ {\iflanguage{french}{L'Italie}
+ {\iflanguage{german}{Italien}
+ {\iflanguage{greek}{>Ital'ia}
+ {\iflanguage{spanish}{Italia}
+ {\iflanguage{russian}{Itali{\ya}}
+ {Italy}}}}}}}}
+@STRING{Ithaca =
+ {\iflanguage{greek}{>Ij'akh}
+ {\iflanguage{russian}{Ifaka}
+ {Ithaca}}}}
+@STRING{Kampen =
+ {\iflanguage{greek}{K'ampen}
+ {Kam\-pen}}}
+@STRING{Kenya =
+ {\iflanguage{dutch}{Kenia}
+ {\iflanguage{german}{Kenia}
+ {\iflanguage{greek}{K'enia}
+ {Kenya}}}}}
+@STRING{LA =
+ {\iflanguage{greek}{L`os >'Aggeles}
+ {Los Angeles}}}
+@STRING{Leipzig =
+ {\iflanguage{greek}{La'iptsig}
+ {\iflanguage{russian}{Lejpcig}
+ {Leip\-zig}}}}
+@STRING{Leyden =
+ {\iflanguage{greek}{Le'iden}
+ {\iflanguage{russian}{Lejdn}
+ {\iflanguage{french}{Leyde}
+ {\iflanguage{german}{Leyden}
+ {Lei\-den}}}}}}
+@STRING{London =
+ {\iflanguage{greek}{Lond\'ino}
+ {\iflanguage{dutch}{Londen}
+ {\iflanguage{french}{Londres}
+ {\iflanguage{spanish}{Londres}
+ {London}}}}}}
+@STRING{Louvain =
+ {\iflanguage{greek}{Loua~in}
+ {\iflanguage{russian}{Lyvn}
+ {\iflanguage{dutch}{Leuven}
+ {Louvain}}}}}
+@STRING{Malden =
+ {\iflanguage{greek}{M'alden}
+ {Mal\-den}}}
+@STRING{Manchester =
+ {\iflanguage{greek}{M'entsester}
+ {\iflanguage{russian}{Mencestr}
+ {Manchester}}}}
+@STRING{Mannheim =
+ {\iflanguage{greek}{M'anqaim}
+ {\iflanguage{russian}{Man{\ch}aim}
+ {Mannheim}}}}
+@STRING{Meppel =
+ {\iflanguage{greek}{M'epl}
+ {Mep\-pel}}}
+@STRING{Metuchen =
+ {\iflanguage{greek}{Meto'utsen (N'ea <I'ersh)}
+ {\iflanguage{russian}{Metu{\cz}n (N{\ju} D{\z}yrsn)}
+ {Metuchen (New Jersey)}}}}
+@STRING{Michigan =
+ {\iflanguage{greek}{Gr`en R'epids, M'itsigen}
+ {\iflanguage{russian}{Gren Repids, Mi{\cz}ign}
+ {Grand Rapids, Michigan}}}}
+@STRING{Moedling =
+ {\iflanguage{greek}{Bi'enna-Moidligg}
+ {\iflanguage{russian}{Bena-Medling}
+ {\iflanguage{dutch}{Wenen-M\"odling}
+ {\iflanguage{french}{Vienne-M\"odling}
+ {\iflanguage{german}{Wien-M\"odling}
+ {\iflanguage{spanish}{Viena-M\"odling}{}}}}}}}}
+@STRING{Moscow =
+ {\iflanguage{greek}{M'osqa}
+ {\iflanguage{russian}{Moskva}
+ {\iflanguage{dutch}{Moskou}
+ {\iflanguage{french}{Moscou}
+ {\iflanguage{german}{Moskau}
+ {\iflanguage{spanish}{Mosc\'u}{}}}}}}}}
+@STRING{Muhangi =
+ {\iflanguage{greek}{Mouq'aggi (Za"ire)}
+ {\iflanguage{russian}{Mu{\ch}angi (Zaire)}
+ {Muhangi (Zaire)}}}}
+@STRING{Munich =
+ {\iflanguage{greek}{M'onaqon}
+ {\iflanguage{russian}{M{\ju}n{\ch}n}
+ {\iflanguage{english}{Munich}
+ {\iflanguage{spanish}{Munich}
+ {M\"un\-chen}}}}}}
+@STRING{Munster =
+ {\iflanguage{greek}{Mhtr\opolis}
+ {\iflanguage{russian}{Sobor}
+ {M\"unster}}}}
+@STRING{Munstergeleen =
+ {\iflanguage{greek}{M'unsterqela'in}
+ {\iflanguage{russian}{M{\ju}nstr{\ch}len}
+ {Munstergeleen}}}}
+@STRING{Nairobi =
+ {\iflanguage{greek}{Nair'wbi}
+ {\iflanguage{russian}{Najrobi}
+ {Nairobi}}}}
+@STRING{ND =
+ {\iflanguage{greek}{N'ea D'elqi}
+ {\iflanguage{russian}{N{\ju} Del{\ch}i}
+ {New Delhi}}}}
+@STRING{Norman =
+ {\iflanguage{greek}{N'orman}
+ {Norman}}}
+@STRING{NY =
+ {\iflanguage{greek}{N'ea <U'orkh}
+ {\iflanguage{russian}{N{\ju} Jork}
+ {New York}}}}
+@STRING{Nymegen =
+ {\iflanguage{greek}{N'imegen}
+ {\iflanguage{russian}{Nejmegn}
+ {\iflanguage{french}{Nim\`egue}
+ {\iflanguage{german}{Nimwegen}
+ {N"y\-me\-gen}}}}}}
+@STRING{Oxford =
+ {\iflanguage{greek}{>'Oxford}
+ {\iflanguage{russian}{Oksford}
+ {Oxford}}}}
+@STRING{Pennsylvania =
+ {\iflanguage{greek}{Pensulu'enia}
+ {Pennsylvania}}}
+@STRING{Paramaribo =
+ {\iflanguage{greek}{Param'aribw}
+ {Paramaribo}}}
+@STRING{Paris =
+ {\iflanguage{greek}{Par'isi}
+ {\iflanguage{russian}{Pari{\z}}
+ {\iflanguage{dutch}{Par"ys}
+ {Paris}}}}}
+@STRING{Pittsburgh =
+ {\iflanguage{greek}{P'ittsbourg}
+ {\iflanguage{russian}{Pittsburg}
+ {Pittsburgh}}}}
+@STRING{Rome =
+ {\iflanguage{greek}{R'wmh}
+ {\iflanguage{russian}{Rim}
+ {\iflanguage{italian}{Roma}
+ {\iflanguage{spanish}{Roma}
+ {Rome}}}}}}
+@STRING{Rotterdam =
+ {\iflanguage{greek}{Rotterd'am}
+ {Rot\-ter\-dam}}}
+@STRING{Saarbruecken =
+ {\iflanguage{greek}{Zarbro'uken}
+ {\iflanguage{russian}{Zarbr{\ju}kn}
+ {\iflanguage{english}{Saar\-bruecken}
+ {Saarbr\"ucken}}}}}
+@STRING{Sachsenmuehle =
+ {\iflanguage{greek}{Z'axenmule}
+ {\iflanguage{russian}{Zaksm{\ju}l{\Mz}}
+ {\iflanguage{english}{Sachsenmuehle}
+ {Sachsenm\"uhle}}}}}
+@STRING{StFe =
+ {\iflanguage{greek}{S`anta F'e (N'eo Mexik'on)}
+ {\iflanguage{russian}{Santa F{\e} (N{\ju} Meksika)}
+ {\iflanguage{spanish}{Santa Fe (Neuvo Mexico)}
+ {Santa Fe (New Mexico)}}}}}
+@STRING{Stuttgart =
+ {\iflanguage{greek}{Sto'uttgart}
+ {\iflanguage{russian}{{\S}tuttgart}
+ {Stuttgart}}}}
+@STRING{Suriname =
+ {\iflanguage{greek}{S'uriname}
+ {Su\-ri\-na\-me}}}
+@STRING{Tanzania =
+ {\iflanguage{french}{La Tanzanie}
+ {\iflanguage{german}{Tansania}
+ {\iflanguage{greek}{Tanzan'ia}
+ {Tanzania}}}}}
+@STRING{Thessalonica =
+ {\iflanguage{greek}{Jessalon'ikh}
+ {\iflanguage{russian}{Fessaloniki}
+ {\iflanguage{french}{Thessalonique}
+ {Thessalonica}}}}}
+@STRING{Tucson =
+ {\iflanguage{greek}{T'akson}
+ {\iflanguage{russian}{Takson}
+ {Tucson}}}}
+@STRING{Utrecht =
+ {\iflanguage{greek}{O>'utreqt}
+ {\iflanguage{russian}{{\Ju}tre{\ch}t}
+ {\mbox{Utrecht}}}}}
+@STRING{Vienna =
+ {\iflanguage{greek}{B'ienna}
+ {\iflanguage{russian}{Vena}
+ {\iflanguage{dutch}{Wenen}
+ {\iflanguage{french}{Vienne}
+ {\iflanguage{german}{Wien}
+ {\iflanguage{spanish}{Viena}{}}}}}}}}
+@STRING{Wageningen =
+ {\iflanguage{greek}{O>u'ageniggen}
+ {\iflanguage{russian}{Vageningn}
+ {Wa\-ge\-nin\-gen}}}}
+@STRING{Washington =
+ {\iflanguage{greek}{O>u'asigktwn}
+ {\iflanguage{russian}{Va{\s}ington}
+ {Washington}}}}
+@STRING{Weisweil =
+ {\iflanguage{greek}{O>u'a"isoua"il}
+ {\iflanguage{russian}{Vajsvajl{\Mz}}
+ {Weis\-weil}}}}
+@STRING{Wiesbaden =
+ {\iflanguage{greek}{O>u'ismbaden}
+ {\iflanguage{russian}{Visbadn}
+ {Wies\-ba\-den}}}}
+@STRING{Wikor =
+ {\iflanguage{greek}{O>u'ikor}
+ {\iflanguage{russian}{Vikor}
+ {Wikor}}}}
+@STRING{Yaunde =
+ {\iflanguage{greek}{I>ao~unde}
+ {\iflanguage{russian}{{\Ya}unde}
+ {Yaunde}}}}
+@STRING{Zurich =
+ {\iflanguage{greek}{Zur'iqh}
+ {\iflanguage{russian}{{\Cz\ju}ri{\ch}}
+ {\iflanguage{french}{Zurich}
+ {Z\"u\-rich}}}}}
+@STRING{Zutphen =
+ {\iflanguage{greek}{Z'utfen}
+ {\iflanguage{russian}{Z{\ju}tfn}
+ {Zutphen}}}}
+
+@STRING{Herodotus =
+ {\iflanguage{greek}{<'Hr'odotos}
+ {\iflanguage{russian}{{\Ch\e}rodotos}
+ {\iflanguage{german}{Herodot}
+ {Herodotus}}}}}
+@STRING{Historiae =
+ {\iflanguage{greek}{<Istor'iai}
+ {\iflanguage{russian}{{\Ch}istorii}
+ {Histori{\ae}}}}}
+@STRING{Ilias =
+ {\iflanguage{greek}{Ili'as}
+ {Ilias}}}
+@STRING{Homer =
+ {\iflanguage{greek}{<'Omhros}
+ {\iflanguage{russian}{{\Ch}om{\e}ros}
+ {\iflanguage{english}{Homer}
+ {\iflanguage{german}{Homer}
+ {\iflanguage{french}{Hom\`ere}
+ {Homerus}}}}}}}
diff --git a/obsolete/macros/latex209/contrib/ml/ml.doc b/obsolete/macros/latex209/contrib/ml/ml.doc
new file mode 100644
index 0000000000..9b56926c59
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/ml/ml.doc
@@ -0,0 +1,970 @@
+\def\filename{ml.doc}
+\let\thisfilename\filename
+\def\fileversion{ml-1.92}
+\def\filedate{16 sept 1994}
+\def\docdate{16 sept 1994}
+%% \CheckSum{2296}
+%% \CharacterTable
+%% {Upper-case \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
+%% Lower-case \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
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%
+%
+%\iffalse
+%
+% ML DOCUMENT-STYLE option for LaTeX version 2.09
+% Copyright (C) 1993 by Hans Stoks, Malden, The Netherlands
+%
+% Please report errors to: J.W.H.M. Stoks
+% U251006@VM.UCI.KUN.NL
+%\fi
+%
+% \changes{ml~1.3}{20 febr 93}{Corrected some bugs}
+% \changes{ml~1.9}{15 june 93}{Except for ml.sty renamed the sty files to
+% be input to .tex}
+%
+% \DoNotIndex{\!,\',\,,\.,,\:,\;,\?,\/,\^,\`,\@M}
+% \DoNotIndex{\@,\@ne,\@m,\@afterheading,\@date,\@endpart}
+% \DoNotIndex{\@hangfrom,\@idxitem,\@makeschapterhead,\@mkboth}
+% \DoNotIndex{\@oddfoot,\@oddhead,\@restonecolfalse,\@restonecoltrue}
+% \DoNotIndex{\@starttoc,\@unused}
+% \DoNotIndex{\accent,\active}
+% \DoNotIndex{\addcontentsline,\advance,\Alph,\arabic}
+% \DoNotIndex{\baselineskip,\begin,\begingroup,\bf,\box,\c@secnumdepth}
+% \DoNotIndex{\catcode,\centering,\char,\chardef,\clubpenalty}
+% \DoNotIndex{\columnsep,\columnseprule,\crcr,\csname}
+% \DoNotIndex{\day,\def,\dimen,\discretionary,\divide,\dp,\do,\docdate}
+% \DoNotIndex{\edef,\else,\empty,\end,\endgroup,\endcsname,\endinput}
+% \DoNotIndex{\errhelp,\errmessage,\expandafter,\fi,\filedate}
+% \DoNotIndex{\fileversion,\fmtname,\fnum@figure,\fnum@table,\fontdimen}
+% \DoNotIndex{\gdef,\global}
+% \DoNotIndex{\hbox,\hidewidth,\hfil,\hskip,\hspace,\ht,\Huge,\huge,\ialign}
+% \DoNotIndex{\if@twocolumn,\ifcase,\ifcat,\ifhmode,\ifmmode,\ifnum}
+% \DoNotIndex{\ifx,\immediate,\ignorespaces,\input,\item,\kern,\labelsep,\Large}
+% \DoNotIndex{\large,\labelwidth,\lccode,\leftmargin,\leavevmode,\let}
+% \DoNotIndex{\lineskip,\list,\ll,\long,\lower,\m@ne}
+% \DoNotIndex{\mathchar,\mathaccent,\markboth,\month,\multiply}
+% \DoNotIndex{\newblock,\newbox,\newcount,\newdimen,\newwrite}
+%^^A\newif is defined \outer
+% \DoNotIndex{\nobreak,\noexpand,\noindent,\null,\number}
+% \DoNotIndex{\onecolumn,\or}
+% \DoNotIndex{\p@,\parbox,\parindent,\parskip,\penalty,\protect,\ps@headings}
+%^^A\par is defined \outer
+% \DoNotIndex{\quotation,\raggedright,\raise,\refstepcounter,\relax,\rm,\setbox}
+% \DoNotIndex{\section,\setcounter,\settowidth,\scriptscriptstyle}
+% \DoNotIndex{\sfcode,\sl,\sloppy,\small,\space,\strut}
+% \DoNotIndex{\textwidth,\thechapter,\thefigure,\thepage,\spacefactor,\string}
+% \DoNotIndex{\the,\thepart,\thetable,\thispagestyle,\titlepage,\tracingmacros}
+% \DoNotIndex{\tw@,\twocolumn,\typeout,\uppercase,\usecounter,\vbox,\vfil}
+% \DoNotIndex{\vskip,\vspace,\vss,\widowpenalty,\write,\xdef,\year,\z@,\z@skip}
+%
+%
+% \title {ML, a multilingual style-option system for use
+% with \LaTeX's standard document styles\thanks{
+% I took this mainly from J.~Braam's babel.doc, since
+% I wanted my ml to be compatible with his babel.}}
+%
+% \author{Hans Stoks}
+% \address{Kroonsingel 36\\
+% 6581 BM Malden\\
+% The Netherlands}
+% {\catcode`\"12
+% \netaddress{u251006@vm.uci.kun.nl}
+% }
+% \date{Printed \today}
+%
+% \maketitle
+%
+% \section{History}
+% For a long time I have been struggling to make documents
+% using different languages in the same document.
+% When M.~Ferguson came up with his ml.tex and H.~Partl with his german.sty
+% I started working at a styleoption which was mainly based on Partl's
+% example.
+%
+% The first problem I faced (on my 8088 processor) was to input so many
+% hyphenation patterns. I discovered that with only two pattern files,
+% say one for american and one for continental hyphenation,
+% I was able to hyphenate most modern languages correctly. I took
+% the original hyphen.tex (ahyphen.tex) for american and the {\sc celex}
+% patterns for continental hyphenation. However, I had to modify
+% especially the {\sc celex} patterns to have them function also with german
+% and french (for that reason I renamed the latter to euhyphen).
+%
+% Another thing I usually hate very much is to have to decide before
+% beginning my document how many and which different languages I am going
+% to use. So I made the call for the different languages automatic:
+% I just say \verb=\dutch=, or \verb=\Dutch=, or \verb=\dutchTeX=, to
+% switch to dutch (in fact these commands all input the file nl.sty).
+% Then {\sf babel} came and for a long time I continued with my ml.sty
+% (since it suited me well). However, I knew one day I just had to look at
+% this style especially since it seems to me to be accepted widely.
+%
+% This new version of ml.sty is a modification to make it compatible
+% with {\sf babel.} I designed it so that my old documents (and those of
+% some beta testers whom I gave my style) do not have to be changed;
+% i.e. the only style option requested is ml. I renamed the different
+% style files to be input to .tex and modified them somewhat
+% with ideas from the different style files coming with {\sf babel.} However,
+% basically I wanted to keep my files since they do much more translating
+% than J.~Braam's files.
+%
+% \section{The user interface}
+%
+% The user interface of this system of style options is quite simple.
+% It consists of only two commands. These commands can be used to
+% select another language or to find out what the current language is.
+%
+% \DescribeMacro\selectlanguage
+% When a user wants to switch from one language to another he
+% can do so using the macro \verb=\selectlanguage=. This macro
+% takes the language, defined previously by a language-specific option,
+% as its argument. It calls several macros that should be
+% defined in the language-specific files to activate the special
+% definitions for the language chosen. For compatibility with
+% the original {\tt german.tex} (as much as possible)
+% the synonym
+% \verb=\setlanguage= is available, if it isn't already defined.
+% And for compatibility with my older ml.sty the commands \verb=\dutch=,
+% \verb=\Dutch=, or \verb=\dutchTeX=, \verb=\german=, \verb=\German=, or
+% \verb=\germanTeX=, \verb=\french=, \verb=\French=, or \verb=\frenchTeX=,
+% \verb=\english=, \verb=\English=, or \verb=\originalTeX=
+% \verb=\russian=, \verb=\Russian=, or \verb=\cyrTeX=, and
+% \verb=\greekTeX= still function in the same way they did.
+%
+% \DescribeMacro\iflanguage
+% If more than one language is used it might be necessary to know
+% which language is active at a specific time. This can be checked
+% by a call to \verb=\iflanguage=. This macro takes three arguments.
+% The first argument is the name of a language,
+% the second and third arguments are the actions
+% to take if the result of the test is {\tt true} or {\tt false}
+% respectively.
+%
+%\StopEventually{%
+% \clearpage
+% \let\filename\thisfilename
+% \clearpage
+% \def\filename{index}
+% \PrintIndex
+% \clearpage
+% \def\filename{changes}
+% \PrintChanges
+% \makesignature
+% }
+%
+% \section{The implementation}
+%
+% The first thing to do is to write the current version of this
+% file\footnote{The file described in this section is called
+% {\tt \filename},
+% has version number~\fileversion,
+% was last revised on~\filedate,
+% while the documentation was last revised on~\docdate.}.
+% \begin{macrocode}
+\wlog{Style option `ml' version \fileversion\space <\filedate>}
+\wlog{English documentation dated <\docdate>}
+% \end{macrocode}
+%
+% We want to be compatible with the {\sf babel} system, so we first
+% input babel.sty.
+% \begin{macrocode}
+\ifx\undefined\mdqon\relax\else\endinput\fi
+\@ifundefined{iflanguage}{\input babel.sty\relax}{\relax}
+\ifx\undefined\babel@core@loaded\input babel.com\fi
+% \end{macrocode}
+%
+%\let\filename\thisfilename
+%
+% \subsection{Correcting and adding some LaTeX commands}
+%
+% Every now and then I find in my reader list a message concerning some
+% correction on some LaTeX command. I use to collect them and keep them
+% here in my ml style since I am using this style as my default anyway.
+%
+% \begin{macrocode}
+\let\firstcolmark\relax
+\def\@outputdblcol{\if@firstcolumn
+\xdef\firstcolmark{\firstmark}
+\global\@firstcolumnfalse
+ \global\setbox\@leftcolumn\box\@outputbox
+ \else \global\@firstcolumntrue
+ \setbox\@outputbox\vbox{\hbox to\textwidth{\hbox to\columnwidth
+ {\box\@leftcolumn \hss}\hfil \vrule width\columnseprule\hfil
+ \hbox to\columnwidth{\box\@outputbox \hss}}}\@combinedblfloats
+ \@outputpage \begingroup \@dblfloatplacement \@startdblcolumn
+ \@whilesw\if@fcolmade \fi{\@outputpage\@startdblcolumn}\endgroup
+ \fi}
+\def\ps@right
+{\let\@mkboth\markboth
+\def\@oddfoot{}\def\@evenfoot{}\def\@evenhead{\rm \thepage\hfil \sl
+\leftmark}\def\@oddhead{\hbox{}\sl \rightmark \hfil
+\hbox to 0pt{\kern30pt \rm\thepage\hss}
+}\def\sectionmark##1{\markright {\uppercase{\ifnum \c@secnumdepth >\z@
+ \thesection\hskip 1em\relax \fi ##1}}}}
+% \end{macrocode}
+%
+% Correction on \verb=\tt_=:
+%
+% \begin{macrocode}
+\let\typewriter\tt
+\gdef\tt{\typewriter\def\_{\char95}}
+% \end{macrocode}
+%
+% \subsubsection{Some useful definitions}
+%
+% I have done quite some nice things with H.~Partl's macros containing
+% the double quote, not only while using german. So I already define
+% \verb=\mdqon= and \verb=\mdqoff= right here
+%
+% \begin{macrocode}
+\def\mdqon{\catcode`\"\active}
+\def\mdqoff{\catcode`\"12}
+% \end{macrocode}
+%
+% Now I would like to be able to switch to a lower trema in different
+% languages\ldots
+%
+% \begin{macrocode}
+\gdef\allowhyphens{\penalty\@M \hskip\z@skip}
+\newcount\U@C\newbox\U@B\newdimen\U@D
+\gdef\umlauthigh{\def\"{\protect{\accent127 ##1}}}
+\gdef\umlautlow{\def\"{\protect\newumlaut}}
+\gdef\newumlaut#1{\leavevmode\allowhyphens
+ \vbox{\baselineskip\z@skip \lineskip.25ex
+ \ialign{##\crcr\hidewidth
+ \setbox\U@B\hbox{#1}\U@D .01\p@\U@C\U@D
+ \U@D\ht\U@B\advance\U@D -1ex\divide\U@D \U@C
+ \U@C\U@D\U@D\the\fontdimen1\the\font
+ \multiply\U@D \U@C\divide\U@D 100\kern\U@D
+ \vbox to .20ex
+ {\hbox{\char127}\vss}\hidewidth\crcr#1\crcr}}\allowhyphens}
+\gdef\@UMLAUT{\"}
+\gdef\@MATHUMLAUT{\mathaccent"707F }
+\gdef\@SS{\mathchar"7019 }
+\gdef\dq{"}
+\gdef\highumlaut#1{\leavevmode\allowhyphens%
+ \accent127 #1\allowhyphens}%
+% \end{macrocode}
+%
+% I add the quotes to the definitions of dospecials and sanitize:
+%
+% \begin{macrocode}
+\begingroup
+\def\do{\noexpand\do\noexpand}%
+\xdef\dospecials{\dospecials\do\"}%
+\expandafter\ifx\csname @sanitize\endcsname\relax \else
+ \def\@makeother{\noexpand\@makeother\noexpand}%
+ \xdef\@sanitize{\@sanitize\@makeother\"}%
+\fi
+\endgroup
+% \end{macrocode}
+%
+% and can now use the double quotes for fancy effects (I need a
+% dieresis for use in a discretionary command and, for efficiency,
+% I define a short macro for the most frequent characters used after
+% the double quotes).
+%
+% \begin{macrocode}
+{\mdqon
+\gdef"{\protect\active@dq}
+\gdef\dieresis{\"}
+\gdef\active@dq#1{%
+ \ifx #1s\ifmmode\@SS\else\ss\fi{}%
+\else\ifx #1a\ifmmode\@MATHUMLAUT a\else\@UMLAUT a\fi
+\else\ifx #1o\ifmmode\@MATHUMLAUT o\else\@UMLAUT o\fi
+\else\ifx #1u\ifmmode\@MATHUMLAUT u\else\@UMLAUT u\fi
+\else\ifx #1A\ifmmode\@MATHUMLAUT A\else\@UMLAUT A\fi
+\else\ifx #1O\ifmmode\@MATHUMLAUT O\else\@UMLAUT O\fi
+\else\ifx #1U\ifmmode\@MATHUMLAUT U\else\@UMLAUT U\fi
+\else\ifx #1`\leftquotes{}%
+\else\ifx #1'\rightquotes{}%
+\else\other@active@dq{#1}%
+\fi\fi\fi\fi\fi\fi\fi\fi\fi }
+% now a separate command for the less frequent ones:
+\gdef\other@active@dq#1{%
+ \ifx #1e\ifmmode\@MATHUMLAUT e\else\highumlaut e\fi
+\else\ifx #1i\ifmmode\discretionary{-}{#1}{\@MATHUMLAUT i}
+ \else\discretionary{-}{#1}{\dieresis\i}\fi
+\else\ifx #1j\ifmmode\discretionary{-}{#1}{\@MATHUMLAUT j}
+ \else\discretionary{-}{#1}{\dieresis\j}\fi
+\else\ifx #1E\ifmmode\@MATHUMLAUT E\else\highumlaut E\fi
+\else\ifx #1I\ifmmode\@MATHUMLAUT I\else\highumlaut I\fi
+\else\ifx #1SSS%
+\else\ifx #1-\allowhyphens\-\allowhyphens
+\else\ifx #1"\hskip\z@skip\allowhyphens
+\else\ifx #1|\discretionary{-}{}{\kern.03em}%
+\else\ifx #1c\allowhyphens\discretionary{k-}{}{c}\allowhyphens
+\else\ifx #1f\allowhyphens\discretionary{ff-}{}{f}\allowhyphens
+\else\ifx #1k\allowhyphens\discretionary{k-}{}{}\allowhyphens %% Maasai
+\else\ifx #1l\allowhyphens\discretionary{ll-}{}{l}\allowhyphens
+\else\ifx #1m\allowhyphens\discretionary{mm-}{}{m}\allowhyphens
+\else\ifx #1n\allowhyphens\discretionary{nn-}{}{n}\allowhyphens
+\else\ifx #1p\allowhyphens\discretionary{pp-}{}{p}\allowhyphens
+\else\ifx #1t\allowhyphens\discretionary{tt-}{}{t}\allowhyphens
+\else\ifx #1C\allowhyphens\discretionary{K-}{}{C}\allowhyphens
+\else\ifx #1F\allowhyphens\discretionary{FF-}{}{F}\allowhyphens
+\else\ifx #1K\allowhyphens\discretionary{K-}{}{}\allowhyphens %% Maasai
+\else\ifx #1L\allowhyphens\discretionary{LL-}{}{L}\allowhyphens
+\else\ifx #1M\allowhyphens\discretionary{MM-}{}{M}\allowhyphens
+\else\ifx #1N\allowhyphens\discretionary{NN-}{}{N}\allowhyphens
+\else\ifx #1P\allowhyphens\discretionary{PP-}{}{Pp}\allowhyphens
+\else\ifx #1T\allowhyphens\discretionary{TT-}{}{T}\allowhyphens
+\else\ifx #1y\allowhyphens i\kern-0.06\p@ j\allowhyphens%
+\else\ifx #1Y\allowhyphens I\kern-0.05\p@ J\allowhyphens%
+\else\ifx #1<\flqq{}%
+\else\ifx #1>\frqq{}%
+\else \dq #1%
+\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+\fi\fi\fi\fi\fi\fi\fi\fi }
+\gdef\at{{\char '100}}
+\gdef\boi{{\tt\char '134}}
+\gdef\circonflexe{{\char '136}}
+\gdef\tild{{\char '176}}
+\gdef\degre{{\char '27}}
+\gdef\french@circumflex#1{{\accent'136\if#1i\i\else#1\fi}}
+\gdef\french@dieresis#1{{\accent'177\if#1i\i\else#1\fi}}
+\gdef\up#1{\raise 1ex\hbox{\small#1}}
+\gdef\No{\kern-.25em\lower.2ex\hbox{\degre}}
+\gdef\ieme{$^{\rm e }$\kern+.17em}
+\gdef\FrenchEnumerate#1{$#1^{\rm o}$\kern+.29em}
+\gdef\FrenchPopularEnumerate#1{#1\No\kern-.25em)\kern+.3em}
+\gdef\primo{\FrenchEnumerate1}
+\gdef\secundo{\FrenchEnumerate2}
+\gdef\tertio{\FrenchEnumerate3}
+\gdef\quatro{\FrenchEnumerate4}
+\gdef\fprimo){\FrenchPopularEnumerate1}
+\gdef\fsecundo){\FrenchPopularEnumerate2}
+\gdef\ftertio){\FrenchPopularEnumerate3}
+\gdef\fquatro){\FrenchPopularEnumerate4}
+\gdef\flqq{\protect\@flqq}
+\gdef\@flqq{\ifhmode \edef\@SF{\spacefactor\the\spacefactor}\else
+ \let\@SF\empty \fi
+ \ifmmode \ll \else \leavevmode
+ \raise .2ex \hbox{$\scriptscriptstyle \ll $}\fi \@SF\relax}
+\gdef\frqq{\protect\@frqq}
+\gdef\@frqq{\ifhmode \edef\@SF{\spacefactor\the\spacefactor}\else
+ \let\@SF\empty \fi
+ \ifmmode \gg \else \leavevmode
+ \raise .2ex \hbox{$\scriptscriptstyle \gg $}\fi \@SF\relax}
+\gdef\flq{\protect\@flq}
+\gdef\@flq{\ifhmode \edef\@SF{\spacefactor\the\spacefactor}\else
+ \let\@SF\empty \fi
+ \ifmmode < \else \leavevmode
+ \raise .2ex \hbox{$\scriptscriptstyle < $}\fi \@SF\relax}
+\gdef\frq{\protect\@frq}
+\gdef\@frq{\ifhmode \edef\@SF{\spacefactor\the\spacefactor}\else
+ \let\@SF\empty \fi
+ \ifmmode > \else \leavevmode
+ \raise .2ex \hbox{$\scriptscriptstyle > $}\fi \@SF\relax}
+}
+\gdef\ouvreguillemet{\leavevmode\hbox{\ly(\kern-0.13em(}\nobreak}
+\gdef\fermeguillemet{\nobreak\leavevmode\hbox{\ly)\kern-0.13em)}}
+% \end{macrocode}
+%
+% This is where I end having made quotes active (mdqon). Now
+% I would like to add some more useful definitions to make the
+% input of my files a little bit more convenient.
+%
+% To avoid having to make lots of italic corrections:
+%
+% \begin{macrocode}
+\gdef\bold#1{{\bf#1\/}}
+\gdef\emph#1{{\em#1\/}}
+\gdef\ital#1{{\it#1\/}}
+\gdef\slant#1{{\sl#1\/}}
+% \end{macrocode}
+%
+% To prevent overfull hboxes with words containing ():
+%
+% \begin{macrocode}
+\let\stopmath\)
+\gdef\specialhyphen{%
+\ifmmode\stopmath\else\allowhyphens\discretionary{-)}{}{-)}\allowhyphens\fi}
+\def\){\protect\specialhyphen}
+% \end{macrocode}
+%
+% For an underline in italic:
+%
+% \begin{macrocode}
+\gdef\B#1{\kern-.0667em\b{\kern.1788em#1}}
+% \end{macrocode}
+%
+% Some of the definitions I collected:
+%
+% \begin{macrocode}
+\gdef\rref#1{\ref{#1}\begingroup
+ \def\x{#1}\edef\x{\expandafter\GetMeaning\meaning\x\MeaningEnd}%
+ \ref{\x}\marginpar{\verb^ \x ^}\endgroup}
+\gdef\llabel#1{\label{#1}\begingroup
+ \def\x{#1}\edef\x{\expandafter\GetMeaning\meaning\x\MeaningEnd}%
+ \ref{\x}\marginpar{\verb^ \x ^}\endgroup}
+\gdef\trademark{\raise 1ex\hbox{\ooalign{\hfil\raise.07ex\hbox{\sevenrm
+ R}\hfil\crcr\mathhexbox20D}}}
+% \end{macrocode}
+%
+% For chemical formulas:
+%
+% \begin{macrocode}
+\gdef\ch#1{$\textfont1=\the\font#1$}
+% \end{macrocode}
+%
+% Finally there are some macros which I would like to incorporate but
+% witch I leave out for the moment since they are not quite worked out yet.
+%
+% So I have been thinking of a definition for big initials or photos:
+%
+% \begin{verbatim}
+% \def\photo#1#2{\hangindent#1\noindent\hangafter-#2}
+% \def\initial#1#2#3
+% {\hangindent#1\noindent\hangafter-#2\smash{\lower#2\baselineskip\hbox
+% to0pt{#3\hfill}}}
+% \end{verbatim}
+%
+% Eventually I want to have something for generating grammar paradigms:
+%
+% \begin{verbatim}
+% {\def\adjpar#1#2#3{ \begin{tabular}{rllll}
+% & & Masc. & Fem. & Neut. \\
+% Sg. & Nom. & #1 & #2 & #3 \\
+% \adjpari }
+% \def\adjpari#1#2#3{ & Gen. & #1 & #2 & #3 \\ \adjparii}
+% \def\adjparii#1#2#3{ & Dat. & #1 & #2 & #3 \\ \adjpariii}
+% \def\adjpariii#1#2#3{ & Acc. & #1 & #2 & #3 \\ \adjpariv}
+% \def\adjpariv#1#2#3{ Pl. & Nom. & #1 & #2 & #3 \\ \adjparv}
+% \def\adjparv#1#2#3{ & Gen. & #1 & #2 & #3 \\ \adjparvi}
+% \def\adjparvi#1#2#3{ & Dat. & #1 & #2 & #3 \\ \adjparvii}
+% \def\adjparvii#1#2#3{ & Acc. & #1 & #2 & #3 \end{tabular}}}
+% \end{verbatim}
+%
+%\section{The actual ml style code}
+%
+% \subsection{My extra multilingual macros}
+%
+% Maybe David van Leeuwen's (DAVID@HLERUL59) `getallen' are useful:
+%
+% \begin{macrocode}
+\newcount\ii\newcount\jj\newif\ifhyphen
+\gdef\numb{\hyphenfalse\afterassignment\nul\ii=}
+\gdef\num#1 #2 {\divide\jj by #1 \ifnum\jj>1 {\ii=\jj\getall}\fi
+ #2\multiply\jj by #1 \advance\ii by -\jj\getall}
+\gdef\qm{\ifhyphen\-\else\global\hyphentrue\fi}
+\gdef\s#1 {\showhyphens{\numb#1}}
+\newcount\n\newcount\m
+\n=0
+\m=1
+% \end{macrocode}
+%
+% Some (school) books have exercises\ldots
+%
+% \begin{macrocode}
+\def\lesson{\def\chaptername{\lessonname}\chapter}
+\def\exercise{\section*{\centering{\exercisename{}\thesection}}}
+\def\singleexercise{\section*{\centering{\exercisename{}\thechapter}}}
+\gdef\beginexercise{\@ifnextchar[\beginsingleexercise\begin@xercise}
+ \gdef\begin@xercise{
+ \refstepcounter{section}\exercise{}
+ \begin{itemize}\begin{enumerate}}
+ \gdef\beginsingleexercise[]{
+ \refstepcounter{section}\singleexercise{}
+ \begin{itemize}\begin{enumerate}}
+\gdef\endexercise{\end{enumerate}\end{itemize}}
+% \end{macrocode}
+%
+% And some books happen to have been published in different editions:
+%
+% \begin{macrocode}
+\gdef\higherthenthird#1{\bgroup%
+ \def\arabicedition{\arabicedname}%
+ \def\croatianedition{\croatianedname}%
+ \def\czechedition{\czechedname}%
+ \def\danishedition{\danishedname}%
+ \def\dutchedition{\dutchedname}%
+ \def\englishedition{\englishedname}%
+ \def\esperantoedition{\esperantoedname}%
+ \def\finnishedition{\finnishedname}%
+ \def\frenchedition{\frenchedname}%
+ \def\germanedition{\germanedname}%
+ \def\greekedition{\greekedname}%
+ \def\hebrewedition{\hebrewedname}%
+ \def\hindiedition{\hindiedname}%
+ \def\italianedition{\italianedname}%
+ \def\maasaiedition{\maasaiedname}%
+ \def\magyaredition{\magyaredname}%
+ \def\norskedition{\norskedname}%
+ \def\polishedition{\polishedname}%
+ \def\portugesedition{\portugesedname}%
+ \def\romanianedition{\romanianedname}%
+ \def\russianedition{\russianedname}%
+ \def\sloveneedition{\sloveneedname}%
+ \def\spanishedition{\spanishedname}%
+ \def\swahiliedition{\swahiliedname}%
+ \def\swedishedition{\swedishedname}%
+ \def\tamiledition{\tamiledname}%
+ \def\turkishedition{\turkishedname}\if#12%
+ {2\higher}\else\if#13%
+ {3\higher}\else\if#14%
+ {4\higher}\else\if#15%
+ {5\higher}\else\if#16%
+ {6\higher}\else\if#17%
+ {7\higher}\else\if#18%
+ {8\higher}\else\if#19%
+ {9\higher}\else#1\fi\fi\fi\fi\fi\fi\fi\fi\egroup}
+\gdef\edition#1{\@bsphack\@ifundefined{l@#1}{\@nolanerr{#1}}%
+ {\language\csname l@#1\endcsname\@esphack}}%
+\gdef\arabicedition{\edition{arabic}}
+\gdef\croatianedition{\edition{croatian}}
+\gdef\czechedition{\edition{czech}}
+\gdef\danishedition{\edition{danish}}
+\gdef\dutchedition{\edition{dutch}}
+\gdef\englishedition{\edition{english}}
+\gdef\esperantoedition{\edition{esperanto}}
+\gdef\finnishedition{\edition{finnish}}
+\gdef\frenchedition{\edition{french}}
+\gdef\germanedition{\edition{german}}
+\gdef\greekedition{\edition{greek}}
+\gdef\hebrewedition{\edition{hebrew}}
+\gdef\hindiedition{\edition{hindi}}
+\gdef\italianedition{\edition{italian}}
+\gdef\maasaiedition{\edition{maasai}}
+\gdef\magyaredition{\edition{magyar}}
+\gdef\norskedition{\edition{norsk}}
+\gdef\polishedition{\edition{polish}}
+\gdef\portugesedition{\edition{portuges}}
+\gdef\romanianedition{\edition{romanian}}
+\gdef\russianedition{\edition{russian}}
+\gdef\sloveneedition{\edition{slovene}}
+\gdef\spanishedition{\edition{spanish}}
+\gdef\swahiliedition{\edition{swahili}}
+\gdef\swedishedition{\edition{swedish}}
+\gdef\tamiledition{\edition{tamil}}
+\gdef\turkishedition{\edition{turkish}}
+% \end{macrocode}
+%
+% Then a book is supposed to begin with a preamble and to end with
+% a postamble.
+%
+% \begin{macrocode}
+\gdef\subtitle#1{\def\@subtitle{#1}}
+\gdef\soustitre#1{\begin{flushright}{\it#1}\end{flushright}}
+\gdef\see#1#2{{\em\seename\ #1,} #2}
+\newif\ifpagenumbering\pagenumberingtrue
+\gdef\sschapter#1{\ifpagenumbering
+ \bgroup\@schapter{#1}\pagenumbering{arabic}\egroup\pagenumberingfalse
+ \else\@schapter{#1}\fi}
+\gdef\cchapter[#1]#2{\ifpagenumbering\bgroup\@chapter[#1]{#2}
+ \pagenumbering{arabic}\egroup\pagenumberingfalse
+ \else\@chapter[#1]{#2}\fi}
+\gdef\ch@pter{\clearpage\relax\if@twoside \ifodd\c@page\else
+ \hbox{}\relax\newpage\thispagestyle{empty}
+ \if@twocolumn\hbox{}\newpage\fi\fi\fi
+ \thispagestyle{plain}\global\@topnum\z@\@afterindentfalse
+ \secdef\cchapter\sschapter}
+\gdef\maketitlepages{\def\chapter{\thispagestyle{empty}\ch@pter}
+ \pagenumbering{roman}
+ \begin{titlepage}\setcounter{page}{-3}
+ \null
+ \vfil
+ \vskip2\baselineskip \begin{center}
+ {\Huge\sc \@title \par}\end{center}
+ \end{titlepage}\begin{titlepage}\setcounter{page}{-2}\null\vfil
+ \end{titlepage}\begin{titlepage}
+ \let\footnotesize\small \let\footnoterule\relax\setcounter{page}{-1}
+ \null
+ \vfil
+ \vskip 60pt \begin{center}
+ {\LARGE\sc \@title \par} \ifx\@subtitle\undefined\relax\else
+ {\large \@subtitle \par}\fi \vskip 3em {\large
+ \lineskip .75em
+ \begin{tabular}[t]{c}\@author
+ \end{tabular}\par}
+ \vfil {\large \@date \par} \end{center}
+ \end{titlepage}\begin{titlepage}\null\vfil\end{titlepage}
+ \setcounter{footnote}{0} \let\thanks\relax
+ \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\let\maketitle\relax}
+\gdef\tableofcontents{\bgroup\@restonecolfalse
+ \if@twocolumn\@restonecoltrue\onecolumn
+ \fi\pagenumberingfalse\chapter*{\contentsname
+ \@mkboth{\uppercase{\contentsname}}{\uppercase{\contentsname}}}
+ \@starttoc{toc}\if@restonecol\twocolumn\fi\egroup}
+\gdef\listoffigures{\bgroup\@restonecolfalse
+ \if@twocolumn\@restonecoltrue\onecolumn
+ \fi\pagenumberingfalse\chapter*{\listfigurename\@mkboth
+ {\uppercase{\listfigurename}}{\uppercase{\listfigurename}}}\@starttoc
+ {lof}\if@restonecol
+ \twocolumn\fi\egroup}
+\gdef\listoftables{\bgroup\@restonecolfalse
+ \if@twocolumn\@restonecoltrue\onecolumn
+ \fi\pagenumberingfalse\chapter*{\listtablename\@mkboth
+ {\uppercase{\listtablename}}{\uppercase{\listtablename}}}\@starttoc
+ {lot}\if@restonecol
+ \twocolumn\fi\egroup}
+\def\preface{\bgroup\pagenumberingfalse\chapter*{\prefname}
+ \addcontentsline{toc}{chapter}{\prefname}\egroup}
+% \end{macrocode}
+%
+% I want to make \verb=\footnote= also function in section headings---but
+% I do not want footnotemarks to appear in the table of contents---and
+% let it report indexentries in it.
+%
+% \begin{macrocode}
+\long\gdef\@footnotetext#1{\insert\footins{\footnotesize
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\footnotesep
+ \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
+ \hsize\columnwidth \@parboxrestore
+ \edef\@currentlabel{\csname p@footnote\endcsname\@thefnmark}\@makefntext
+ \def\@wrindex{\wrindex}{\rule{\z@}{\footnotesep}\ignorespaces
+ #1\strut}}}
+\global\let\f@@tnote\footnote%
+\global\let\c@ntentsline\contentsline%
+\gdef\footnote{\rm\kern.05em\protect\f@@tnote}
+\gdef\nofootnote#1{\relax}
+\gdef\contentsline{%
+ \def\f@@tnote{\nofootnote}\let\footnotemark\relax\c@ntentsline}
+% \end{macrocode}
+%
+% Finally I want the bibliography and the index to appear in the toc.
+%
+% \begin{macrocode}
+\gdef\mlbibfilename#1{\def\bibfn{#1}}
+\gdef\bibliography#1{%
+ \if@filesw\immediate\write\@auxout{\string\bibdata{\bibfn,#1}}\fi
+ \@input{\jobname.bbl}}
+\gdef~{\penalty1000\ }
+\gdef\notename#1{#1\,n.}
+\gdef\index#1{\ifx\ind@x\undefined\relax\else\protect\ind@x{#1}\fi}
+\global\let\enddoc\enddocument
+\gdef\wrindex#1{\let\thepage\relax\xdef\@gtempa{%
+ \write\@indexfile{\string\indexentry{#1|notename}{\thepage}}}
+ \endgroup\@gtempa\if@nobreak \ifvmode\nobreak\fi\fi\@esphack}
+\gdef\makeindex{\if@filesw \newwrite\@indexfile
+ \immediate\openout\@indexfile=\jobname.idx
+ \def\ind@x{\@bsphack\begingroup\ifx\no@french@active@punct\undefined\relax
+ \else\no@french@active@punct\def\'{\accent 19}\fi
+ \def\protect####1{\string####1\space}\@sanitize\@wrindex}
+ \typeout{Writing index file \jobname.idx}\fi
+ \def\theidx{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+ \columnseprule.4pt\small\columnsep 35pt
+ \twocolumn[\@makeschapterhead{\indexname}]
+ \@mkboth{\uppercase{\indexname}}{\uppercase{\indexname}}
+ \thispagestyle{plain}\parindent\z@\parskip\z@ plus .3pt\relax%
+ \let\item\@idxitem\addcontentsline{toc}{chapter}{\indexname}}
+ \def\theindex{\ifx\multicols\undefined
+ \makeatletter\inputstyle{multicol}\makeatother
+ \ifx\multicols\undefined\theidx\else
+ \columnseprule=.4pt\small\chapter*{\indexname}
+ \parindent\z@\parskip\z@ plus.3pt\relax\let\item\@idxitem
+ \addcontentsline{toc}{chapter}{\indexname}
+ \begin{multicols}{2}\fi\fi}
+ \def\endtheindex{\ifx\multicols\undefined\if@restonecol\onecolumn\else
+ \clearpage\fi\else\end{multicols}\fi}
+ \def\enddocument{\@input{\jobname.ind}\enddoc}}
+\gdef\cover{\@input{\jobname.ind}\def\enddocument{\enddoc}\pagestyle{empty}}
+% \end{macrocode}
+%
+% \section{Parallel Columns}
+%
+% I think a feature generating parallel columns, viz. one column of text
+% to the left and one column of (translated) text to the right, is essential
+% to a multilingual system. I have been working on this for a long time and
+% up till now I am not quite content with the result. The following code I
+% took basically from some macro I found in my reader list. I adapted it
+% somewhat and the result is not bad. However, a big problem is generating
+% footnotes. The numbers of the footnotes do not correspond with the
+% footnotes on the same page. Actually it seems footnotes appear on the
+% page {\em before\/} they appear in the text. Anyway, for the time being
+% I shall have to do with this code. For the future, however, I am thinking
+% of a more complex mechanism. Maybe I shall have to make two runs: First
+% to collect the text of one column, in order to know where exactly it skips
+% to the next page and then with this knowledge inserting the next column.
+%
+% \begin{macrocode}
+\newinsert\mcpfootins
+\long\def\mcpfootnote#1{\footnotemark\addtocounter{footnote}{-1}
+ \global\setbox\mcpfootins \vbox{\unvcopy\mcpfootins\footnotesize%
+ \interlinepenalty\interfootnotelinepenalty\floatingpenalty=20000
+ \splittopskip\footnotesep%\splitmaxdepth \dp\strutbox%
+ \hsize\columnwidth\pagebreak[3]
+ \parindent 1em\noindent\hbox to 1.8em{\hss\footnotemark}
+ {\rule{0pt}{\footnotesep}\ignorespaces #1\strut}}}
+\gdef\multicolpar#1{\def\f@@tnote{\mcpfootnote}\let\footins\mcpfootins
+ \addvspace\topsep\pretolerance1001\tolerance9999
+ \finalhyphendemerits3000000\hbadness5000\vbadness10001
+ \advance\baselineskip0pt\multicolumnparallelparagraphs{#1}{2em}}
+\gdef\endmulticolpar{\xpar\egroup\egroup\leavevmode}
+\newcount\columnsleft \newcount\totalcolumns \newdimen\separation
+\gdef\multicolumnparallelparagraphs#1#2{\totalcolumns#1\separation#2
+ \let\xpar\par\vskip\parskip\columnsleft\totalcolumns\relax
+ \hbox to\hsize\bgroup\let\par\nextmulticolumnparallelparagraph
+ % Set hsize = (old hsize - (#1 - 1)*#2 ) / #1
+ \dimen0\separation\advance\hsize-\columnsleft\dimen0
+ \advance\hsize\dimen0\divide\hsize\columnsleft\relax
+ \leavevmode\vtop\bgroup\parindent0pt}
+\gdef\nextmulticolumnparallelparagraph{\strut\egroup\advance\columnsleft-1
+ \ifnum\columnsleft>0\hfil\leavevmode\vtop\bgroup\parindent0pt
+ \else\strut\egroup\xpar\vskip\parskip\xpar
+ \multicolumnparallelparagraphs\totalcolumns\separation
+ \fi}
+% \end{macrocode}
+%
+% Now we get the language selecting mechanism. I define a newcount
+% \verb=\l@nguage= in order to avoid conflicts with several dialects
+% using the same language count. Consequently I redefine
+% \verb=\p@selectlanguage= so that it contains also this newcount, and
+% \verb=\iflanguage= so that it also knows about different dialects.
+%
+% But first I have to take into account special languages, those that
+% use different alphabets.
+%
+% \begin{macrocode}
+\newcount\l@nguage
+\newif\ifgreek
+\newif\ifrussian
+\begingroup
+\catcode`\;=\active \catcode`\:=\active
+\catcode`\!=\active \catcode`\?=\active
+\gdef\french@active@punct{%
+ \catcode`\;=\active\catcode`\:=\active%
+ \catcode`\!=\active\catcode`\?=\active\relax}
+\gdef\no@french@active@punct{%
+ \catcode`\;=12\catcode`\:=12%
+ \catcode`\!=12\catcode`\?=12\relax}
+\endgroup
+\begingroup
+\catcode`\;=\active \catcode`\:=\active
+\catcode`\!=\active \catcode`\?=\active
+\gdef\extrasfrench{%
+ \let\original@dospecials\dospecials%
+ \let\original@sanitize\@sanitize%
+ \let\original@ref\ref%
+ \let\original@pageref\pageref%
+ \let\original@cite\cite%
+ \let\original@label\label%
+ \let\original@newlabel\newlabel%
+ \let\original@bibcite\bibcite%
+ \let\original@@bibitem\@bibitem%
+ \let\original@@lbitem\@lbitem%
+ \let\original@@testdef\@testdef%
+ \let\original@sc=;\let\original@co=:%
+ \let\original@em=!\let\original@qm=?%
+ \let\original@dieresis\"%
+ \let\original@circumflex\^%
+ \let\original@active@sc\active@sc%
+ \let\original@active@co\active@co%
+ \let\original@active@em\active@em%
+ \let\original@active@qm\active@qm%
+ \edef\original@xcode{%
+ \catcode`\noexpand\:=\the\catcode`\:\relax%
+ \catcode`\noexpand\;=\the\catcode`\;\relax%
+ \catcode`\noexpand\!=\the\catcode`\!\relax%
+ \catcode`\noexpand\?=\the\catcode`\?\relax}%
+ \let\dospecials\french@dospecials%
+ \let\@sanitize\french@sanitize%
+ \def\"{\protect\french@dieresis}%
+ \def\^{\protect\french@circumflex}%
+ \french@active@punct%
+ \def;{\protect\active@sc}%
+ \def:{\protect\active@co}%
+ \def!{\protect\active@em}%
+ \def?{\protect\active@qm}%
+ \let\active@sc\french@active@sc%
+ \let\active@co\french@active@co%
+ \let\active@em\french@active@em%
+ \let\active@qm\french@active@qm%
+ \let\ref\french@ref%
+ \let\pageref\french@pageref%
+ \let\cite\french@cite%
+ \let\label\french@label%
+ \let\newlabel\french@newlabel%
+ \let\@testdef\french@@testdef%
+ \let\@bibitem\french@@bibitem%
+ \let\@lbitem\french@lbitem%
+ \let\bibcite\french@bibcite%
+ \frenchspacing\let\resetspacing\nonfrenchspacing%
+}\endgroup
+\begingroup\french@active@punct
+\def\noextrasfrench{%
+ \no@french@active@punct%
+ \original@xcode;
+ \let;\original@sc%
+ \let:\original@co%
+ \let!\original@em%
+ \let?\original@qm%
+ \let\active@sc\original@active@sc%
+ \let\active@co\original@active@co%
+ \let\active@em\original@active@em%
+ \let\active@qm\original@active@qm%
+ \let\"\original@dieresis%
+ \let\^\original@circumflex%
+ \let\dospecials\original@dospecials%
+ \let\@sanitize\original@sanitize%
+ \let\ref\original@ref%
+ \let\pageref\original@pageref%
+ \let\cite\original@cite%
+ \let\label\original@label%
+ \let\newlabel\original@newlabel%
+ \let\@testdef\original@@testdef%
+ \let\@bibitem\original@@bibitem%
+ \let\@lbitem\original@lbitem%
+ \let\bibcite\original@bibcite%
+ \resetspacing%
+}\endgroup
+\def\french@active@sc{%
+ \ifmmode%
+ \string;%
+ \else\relax%
+ \ifhmode%
+% \ifdim\lastskip>\z@%
+ \unskip\penalty\@M\,%
+% \fi%
+ \fi%
+ \string;%
+ \fi}%
+\def\french@active@co{\ifmmode\string:\else\relax%
+ \ifhmode%\ifdim\lastskip>\z@%
+ \unskip\penalty\@M\,%\fi
+ \fi\string:\fi}
+\def\french@active@em{\ifmmode\string!\else\relax%
+ \ifhmode%\ifdim\lastskip>\z@%
+ \unskip\penalty\@M\,%\fi
+ \fi\string!\fi}
+\def\french@active@qm{%
+ \ifmmode\string?%
+ \else\relax%
+ \ifhmode%\ifdim\lastskip>\z@%
+ \unskip\kern\fontdimen2\font%
+ \kern-1.4\fontdimen3\font%
+ \fi%\fi%
+ \string?\fi}
+\def\french@ref{\no@french@active@punct\@french@ref}
+\def\@french@ref#1{\original@ref{#1}\french@active@punct}
+\def\french@pageref{\no@french@active@punct\@french@pageref}
+\def\@french@pageref#1{\original@pageref{#1}\french@active@punct}
+\def\french@cite{\no@french@active@punct\@french@cite}
+\def\@french@cite#1{\original@cite{#1}\french@active@punct}
+\def\french@label{\no@french@active@punct\@french@label}
+\def\@french@label#1{\original@label{#1}\french@active@punct}
+\def\french@newlabel{\no@french@active@punct\@french@newlabel}
+\def\@french@newlabel#1#2{\original@newlabel{#1}{#2}%
+ \french@active@punct}
+\def\french@bibcite{\no@french@active@punct\@french@bibcite}
+\def\@french@bibcite#1#2{\original@bibcite{#1}{#2}\french@active@punct}
+\def\french@@bibitem{\no@french@active@punct\@french@@bibitem}
+\def\@french@@bibitem#1{\original@@bibitem{#1}\french@active@punct}
+\def\french@@lbitem{\no@french@active@punct\@french@@lbitem}
+\def\@french@@lbitem#1{\original@@lbitem{#1}\french@active@punct}
+\def\french@@testdef{\no@french@active@punct\@french@@testdef}
+\def\@french@@testdef #1#2#3{\original@@testdef{#1}{#2}{#3}%
+ \french@active@punct}
+\gdef\p@selectlanguage#1{\ifgreek\endgreek\fi\russianfalse
+ \no@french@active@punct
+ \@bsphack\input#1
+ \expandafter\ifx\csname l@#1\endcsname\relax
+ \@nolanerr{#1}
+ \else
+ \language=\csname l@#1\endcsname\relax
+ \l@nguage=\csname l@#1\endcsname\relax
+ \originalTeX\mdqon
+ \edef\languagename{#1}
+ \expandafter\def\expandafter\originalTeX
+ \expandafter{\csname noextras#1\endcsname
+ \let\originalTeX\empty}
+ \babel@beginsave
+ \csname captions#1\endcsname
+ \csname date#1\endcsname
+ \csname extras#1\endcsname\relax
+ \fi}
+\gdef\iflanguage#1#2#3{\@bsphack\@ifundefined{l@#1}{#3}
+ {\ifnum\l@nguage=\csname l@#1\endcsname\relax#2\else#3\fi\@esphack}}
+% \end{macrocode}
+% Because of their non roman alphabets I shall have to put in Greek
+% and Russian here. For the convenience of editing I also defined a
+% special ibmkbd.sty that could be input separately and since we are
+% inputting now anyway I could as well add some other useful styles.
+% However, if you do not have or want to use these styles, you can
+% skip them.
+% For that reason I define the command \verb=\inputstyle= which loads a
+% style file only if it exists.
+% \begin{macrocode}
+\gdef\inputstyle#1{\openin1 #1.sty \ifeof1
+ \typeout{! I can't find file `#1.sty'.}
+ \else\closein1 \relax\input{#1.sty}\fi}
+\inputstyle{ibmkbd} % for an extended keyboard
+\inputstyle{picins} % to insert pictures (in columns)
+\inputstyle{setspace} % to manipulate interline spacing
+\inputstyle{logos} % some frequently used logos
+\inputstyle{rgreek}
+\inputstyle{cmcyr}
+\gdef\dutchTeX{\selectlanguage{dutch}}
+\gdef\frenchTeX{\selectlanguage{french}}
+\gdef\germanTeX{\selectlanguage{german}}
+\gdef\greekTeX{\selectlanguage{greek}}
+\gdef\cyrTeX{\selectlanguage{russian}}
+\gdef\english{\selectlanguage{english}}
+\gdef\English{\selectlanguage{english}}
+\global\let\dutch\dutchTeX
+\global\let\french\frenchTeX
+\global\let\german\germanTeX
+\global\let\greek\greekTeX
+\global\let\russian\cyrTeX
+\global\let\Dutch\dutchTeX
+\global\let\French\frenchTeX
+\global\let\German\germanTeX
+\global\let\Greek\greekTeX
+\global\let\Russian\cyrTeX
+%
+% \end{macrocode}
+%
+% Some people call French Francais [sic]. Now, if language French
+% is not defined, neither is Francais, we can just relax. But if
+% French is not defined, but Francais is I would French like to be
+% Francais so I can use its hyphenation patterns. Otherwise, if
+% Francais is not defined, but French is I would Francais like to be
+% French.
+%
+% \begin{macrocode}
+\ifx\undefined\l@french
+ \ifx\undefined\l@francais
+\else
+ \global\let\l@french\l@francais
+ \fi
+\fi
+\ifx\undefined\l@francais
+ \ifx\undefined\l@french
+\else
+ \global\let\l@francais\l@french
+ \fi
+\fi
+\mlbibfilename{ml}
+% \end{macrocode}
+%
+% \section{Some corrections on the NFSS}
+%
+% Since I am using the NFSS as my default and since I think the
+% capability to use different fonts should be part of a multilingual
+% system I include some corrections on the NFSS I found while using it.
+%
+% \begin{macrocode}
+\global\let\mathit\mit
+\expandafter\ifx\csname selectfont\endcsname\relax\else
+\gdef\ly{\family{lasy}\selectfont}
+\gdef\tensf{\family{cmss}\series{m}\shape{n}\size{10}{13pt}\selectfont}
+\gdef\tensl{\family{cmsl}\series{m}\shape{n}\size{10}{12pt}\selectfont}
+\fi
+\selectlanguage{english}
+% \end{macrocode}
+%
+% \Finale
+\endinput
diff --git a/obsolete/macros/latex209/contrib/ml/ml.sty b/obsolete/macros/latex209/contrib/ml/ml.sty
new file mode 100644
index 0000000000..32dc58989b
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/ml/ml.sty
@@ -0,0 +1,496 @@
+%%
+%% This is file `ml.sty', generated on <1994/7/21>
+%% with the docstrip utility (2.0r).
+%%
+%% The original source file was `ml.doc'.
+%%
+%%
+%% IMPORTANT NOTICE:
+%% You are not allowed to distribute this file.
+%% For distribution of the original source see
+%% the copyright notice in the file ml.doc.
+%%
+\def\filename{ml.doc}
+\let\thisfilename\filename
+\def\fileversion{ml-1.9}
+\def\filedate{15 june 1993}
+\def\docdate{15 june 1993}
+%% \CheckSum{1920}
+%% \CharacterTable
+%% {Upper-case \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
+%% Lower-case \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
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%
+\wlog{Style option `ml' version \fileversion\space <\filedate>}
+\wlog{English documentation dated <\docdate>}
+\makeatletter
+\ifx\undefined\mdqon\relax\else\endinput\fi
+\@ifundefined{iflanguage}{\input babel.sty\relax}{\relax}
+\ifx\undefined\babel@core@loaded\input babel.com\fi
+\let\firstcolmark\relax
+\def\@outputdblcol{\if@firstcolumn
+\xdef\firstcolmark{\firstmark}
+\global\@firstcolumnfalse
+ \global\setbox\@leftcolumn\box\@outputbox
+ \else \global\@firstcolumntrue
+ \setbox\@outputbox\vbox{\hbox to\textwidth{\hbox to\columnwidth
+ {\box\@leftcolumn \hss}\hfil \vrule width\columnseprule\hfil
+ \hbox to\columnwidth{\box\@outputbox \hss}}}\@combinedblfloats
+ \@outputpage \begingroup \@dblfloatplacement \@startdblcolumn
+ \@whilesw\if@fcolmade \fi{\@outputpage\@startdblcolumn}\endgroup
+ \fi}
+\def\ps@right
+{\let\@mkboth\markboth
+\def\@oddfoot{}\def\@evenfoot{}\def\@evenhead{\rm \thepage\hfil \sl
+\leftmark}\def\@oddhead{\hbox{}\sl \rightmark \hfil
+\hbox to 0pt{\kern30pt \rm\thepage\hss}
+}\def\sectionmark##1{\markright {\uppercase{\ifnum \c@secnumdepth >\z@
+ \thesection\hskip 1em\relax \fi ##1}}}}
+\let\typewriter\tt
+\gdef\tt{\typewriter\def\_{\char95}}
+\def\mdqon{\catcode`\"\active}
+\def\mdqoff{\catcode`\"12 }
+\gdef\allowhyphens{\penalty\@M \hskip\z@skip}
+\newcount\U@C\newbox\U@B\newdimen\U@D
+\gdef\umlauthigh{\def\"{\protect{\accent127 ##1}}}
+\gdef\umlautlow{\def\"{\protect\newumlaut}}
+\gdef\newumlaut#1{\leavevmode\allowhyphens
+ \vbox{\baselineskip\z@skip \lineskip.25ex
+ \ialign{##\crcr\hidewidth
+ \setbox\U@B\hbox{#1}\U@D .01\p@\U@C\U@D
+ \U@D\ht\U@B\advance\U@D -1ex\divide\U@D \U@C
+ \U@C\U@D\U@D\the\fontdimen1\the\font
+ \multiply\U@D \U@C\divide\U@D 100\kern\U@D
+ \vbox to .20ex
+ {\hbox{\char127}\vss}\hidewidth\crcr#1\crcr}}\allowhyphens}
+\gdef\@UMLAUT{\"}
+\gdef\@MATHUMLAUT{\mathaccent"707F }
+\gdef\@SS{\mathchar"7019 }
+\gdef\dq{"}
+\gdef\highumlaut#1{\leavevmode\allowhyphens%
+ \accent127 #1\allowhyphens}%
+\begingroup
+\def\do{\noexpand\do\noexpand}%
+\xdef\dospecials{\dospecials\do\"}%
+\expandafter\ifx\csname @sanitize\endcsname\relax \else
+ \def\@makeother{\noexpand\@makeother\noexpand}%
+ \xdef\@sanitize{\@sanitize\@makeother\"}%
+\fi
+\endgroup
+{\mdqon
+\gdef"{\protect\active@dq}
+\gdef\dieresis{\"}
+\gdef\active@dq#1{%
+ \ifx #1s\ifmmode\@SS\else\ss\fi{}%
+\else\ifx #1a\ifmmode\@MATHUMLAUT a\else\@UMLAUT a\fi
+\else\ifx #1o\ifmmode\@MATHUMLAUT o\else\@UMLAUT o\fi
+\else\ifx #1u\ifmmode\@MATHUMLAUT u\else\@UMLAUT u\fi
+\else\ifx #1A\ifmmode\@MATHUMLAUT A\else\@UMLAUT A\fi
+\else\ifx #1O\ifmmode\@MATHUMLAUT O\else\@UMLAUT O\fi
+\else\ifx #1U\ifmmode\@MATHUMLAUT U\else\@UMLAUT U\fi
+\else\ifx #1`\leftquotes{}%
+\else\ifx #1'\rightquotes{}%
+\else\other@active@dq{#1}%
+\fi\fi\fi\fi\fi\fi\fi\fi\fi }
+\gdef\other@active@dq#1{%
+ \ifx #1e\ifmmode\@MATHUMLAUT e\else\highumlaut e\fi
+\else\ifx #1i\ifmmode\discretionary{-}{#1}{\@MATHUMLAUT i}
+ \else\discretionary{-}{#1}{\dieresis\i}\fi
+\else\ifx #1j\ifmmode\discretionary{-}{#1}{\@MATHUMLAUT j}
+ \else\discretionary{-}{#1}{\dieresis\j}\fi
+\else\ifx #1E\ifmmode\@MATHUMLAUT E\else\highumlaut E\fi
+\else\ifx #1I\ifmmode\@MATHUMLAUT I\else\highumlaut I\fi
+\else\ifx #1SSS%
+\else\ifx #1-\allowhyphens\-\allowhyphens
+\else\ifx #1"\hskip\z@skip\allowhyphens
+\else\ifx #1|\discretionary{-}{}{\kern.03em}%
+\else\ifx #1c\allowhyphens\discretionary{k-}{}{c}\allowhyphens
+\else\ifx #1f\allowhyphens\discretionary{ff-}{}{f}\allowhyphens
+\else\ifx #1k\allowhyphens\discretionary{k-}{}{}\allowhyphens %% Maasai
+\else\ifx #1l\allowhyphens\discretionary{ll-}{}{l}\allowhyphens
+\else\ifx #1m\allowhyphens\discretionary{mm-}{}{m}\allowhyphens
+\else\ifx #1n\allowhyphens\discretionary{nn-}{}{n}\allowhyphens
+\else\ifx #1p\allowhyphens\discretionary{pp-}{}{p}\allowhyphens
+\else\ifx #1t\allowhyphens\discretionary{tt-}{}{t}\allowhyphens
+\else\ifx #1C\allowhyphens\discretionary{K-}{}{C}\allowhyphens
+\else\ifx #1F\allowhyphens\discretionary{FF-}{}{F}\allowhyphens
+\else\ifx #1K\allowhyphens\discretionary{K-}{}{}\allowhyphens %% Maasai
+\else\ifx #1L\allowhyphens\discretionary{LL-}{}{L}\allowhyphens
+\else\ifx #1M\allowhyphens\discretionary{MM-}{}{M}\allowhyphens
+\else\ifx #1N\allowhyphens\discretionary{NN-}{}{N}\allowhyphens
+\else\ifx #1P\allowhyphens\discretionary{PP-}{}{Pp}\allowhyphens
+\else\ifx #1T\allowhyphens\discretionary{TT-}{}{T}\allowhyphens
+\else\ifx #1y\allowhyphens i\kern-0.06\p@ j\allowhyphens%
+\else\ifx #1Y\allowhyphens I\kern-0.05\p@ J\allowhyphens%
+\else\ifx #1<\flqq{}%
+\else\ifx #1>\frqq{}%
+\else \dq #1%
+\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+\fi\fi\fi\fi\fi\fi\fi\fi }
+\gdef\at{{\char '100}}
+\gdef\boi{{\tt\char '134}}
+\gdef\circonflexe{{\char '136}}
+\gdef\tild{{\char '176}}
+\gdef\degre{{\char'27}}
+\gdef\french@circumflex#1{{\accent"5E \if#1i\i\else#1\fi}}
+\gdef\french@dieresis#1{{\accent"7F \if#1i\i\else#1\fi}}
+\gdef\up#1{\raise 1ex\hbox{\small#1}}
+\gdef\No{\kern-.25em\lower.2ex\hbox{\degre}}
+\gdef\ieme{$^{\rm e }$\kern+.17em}
+\gdef\FrenchEnumerate#1{$#1^{\rm o}$\kern+.29em}
+\gdef\FrenchPopularEnumerate#1{#1\No\kern-.25em)\kern+.3em}
+\gdef\primo{\FrenchEnumerate1}
+\gdef\secundo{\FrenchEnumerate2}
+\gdef\tertio{\FrenchEnumerate3}
+\gdef\quatro{\FrenchEnumerate4}
+\gdef\fprimo){\FrenchPopularEnumerate1}
+\gdef\fsecundo){\FrenchPopularEnumerate2}
+\gdef\ftertio){\FrenchPopularEnumerate3}
+\gdef\fquatro){\FrenchPopularEnumerate4}
+} % end of \mdqon
+\mdqon
+\gdef\flqq{\protect\@flqq}
+\gdef\@flqq{\ifhmode \edef\@SF{\spacefactor\the\spacefactor}\else
+ \let\@SF\empty \fi
+ \ifmmode \ll \else \leavevmode
+ \raise .2ex \hbox{$\scriptscriptstyle \ll $}\fi \@SF\relax}
+\gdef\frqq{\protect\@frqq}
+\gdef\@frqq{\ifhmode \edef\@SF{\spacefactor\the\spacefactor}\else
+ \let\@SF\empty \fi
+ \ifmmode \gg \else \leavevmode
+ \raise .2ex \hbox{$\scriptscriptstyle \gg $}\fi \@SF\relax}
+\gdef\flq{\protect\@flq}
+\gdef\@flq{\ifhmode \edef\@SF{\spacefactor\the\spacefactor}\else
+ \let\@SF\empty \fi
+ \ifmmode < \else \leavevmode
+ \raise .2ex \hbox{$\scriptscriptstyle < $}\fi \@SF\relax}
+\gdef\frq{\protect\@frq}
+\gdef\@frq{\ifhmode \edef\@SF{\spacefactor\the\spacefactor}\else
+ \let\@SF\empty \fi
+ \ifmmode > \else \leavevmode
+ \raise .2ex \hbox{$\scriptscriptstyle > $}\fi \@SF\relax}
+\gdef\bold#1{{\bf#1\/}}
+\gdef\emph#1{{\em#1\/}}
+\gdef\ital#1{{\it#1\/}}
+\gdef\slant#1{{\sl#1\/}}
+\let\stopmath\)
+\gdef\specialhyphen{%
+\ifmmode\stopmath\else\allowhyphens\discretionary{-)}{}{-)}\allowhyphens\fi}
+\def\){\protect\specialhyphen}
+\gdef\B#1{\kern-.0667em\b{\kern.1788em#1}}
+\gdef\rref#1{\ref{#1}\begingroup
+ \def\x{#1}\edef\x{\expandafter\GetMeaning\meaning\x\MeaningEnd}%
+ \ref{\x}\marginpar{\verb^ \x ^}\endgroup}
+\gdef\llabel#1{\label{#1}\begingroup
+ \def\x{#1}\edef\x{\expandafter\GetMeaning\meaning\x\MeaningEnd}%
+ \ref{\x}\marginpar{\verb^ \x ^}\endgroup}
+\gdef\trademark{\raise 1ex\hbox{\ooalign{\hfil\raise.07ex\hbox{\sevenrm
+ R}\hfil\crcr\mathhexbox20D}}}
+\gdef\ch#1{$\textfont1=\the\font#1$}
+\gdef\framepar#1{\framebox[\hsize]{\vbox{\begin{quote}#1\end{quote}}}}
+\newcount\ii\newcount\jj\newif\ifhyphen
+\gdef\numb{\hyphenfalse\afterassignment\nul\ii=}
+\gdef\num#1 #2 {\divide\jj by #1 \ifnum\jj>1 {\ii=\jj\getall}\fi
+ #2\multiply\jj by #1 \advance\ii by -\jj\getall}
+\gdef\qm{\ifhyphen\-\else\global\hyphentrue\fi}
+\gdef\s#1 {\showhyphens{\numb#1}}
+\newcount\n\newcount\m
+\n=0
+\m=1
+\def\lesson{\def\chaptername{\lessonname}\chapter}
+\def\exercise{\section*{\centering{\exercisename{}\thesection}}}
+\def\singleexercise{\section*{\centering{\exercisename{}\thechapter}}}
+\gdef\beginexercise{\@ifnextchar[\beginsingleexercise\begin@xercise}
+ \gdef\begin@xercise{
+ \refstepcounter{section}\exercise{}
+ \begin{itemize}\begin{enumerate}}
+ \gdef\beginsingleexercise[]{
+ \refstepcounter{section}\singleexercise{}
+ \begin{itemize}\begin{enumerate}}
+\gdef\endexercise{\end{enumerate}\end{itemize}}
+\gdef\editions#1{\bgroup
+\if#1{arabic}\arabicedname\else
+\if#1{croatian}\croatianedname\else
+\if#1{czech}\czechedname\else
+\if#1{danish}\danishedname\else
+\if#1{dutch}\dutchedname\else
+\if#1{english}\englishedname\else
+\if#1{esperanto}\esperantoedname\else
+\if#1{finnish}\finnishedname\else
+\if#1{french}\frenchedname\else
+\if#1{german}\germanedname\else
+\if#1{greek}\greekedname\else
+\if#1{hebrew}\hebrewedname\else
+\if#1{italian}\italianedname\else
+\if#1{maasai}\maasaiedname\else
+\if#1{magyar}\magyaredname\else
+\if#1{norsk}\norskedname\else
+\if#1{polish}\polishedname\else
+\if#1{portuges}\portugesedname\else
+\if#1{romanian}\romanianedname\else
+\if#1{russian}\russianedname\else
+\if#1{slovene}\sloveneedname\else
+\if#1{spanish}\spanishedname\else
+\if#1{swahili}\swahiliedname\else
+\if#1{swedish}\swedishedname\else
+\typeout{Language not supported!}
+\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
+\gdef\higherthenthird#1{\bgroup%
+ \def\arabicedition{\arabicedname}%
+ \def\croatianedition{\croatianedname}%
+ \def\czechedition{\czechedname}%
+ \def\danishedition{\danishedname}%
+ \def\dutchedition{\dutchedname}%
+ \def\englishedition{\englishedname}%
+ \def\esperantoedition{\esperantoedname}%
+ \def\finnishedition{\finnishedname}%
+ \def\frenchedition{\frenchedname}%
+ \def\germanedition{\germanedname}%
+ \def\greekedition{\greekedname}%
+ \def\hebrewedition{\hebrewedname}%
+ \def\hindiedition{\hindiedname}%
+ \def\italianedition{\italianedname}%
+ \def\maasaiedition{\maasaiedname}%
+ \def\magyaredition{\magyaredname}%
+ \def\norskedition{\norskedname}%
+ \def\polishedition{\polishedname}%
+ \def\portugesedition{\portugesedname}%
+ \def\romanianedition{\romanianedname}%
+ \def\russianedition{\russianedname}%
+ \def\sloveneedition{\sloveneedname}%
+ \def\spanishedition{\spanishedname}%
+ \def\swahiliedition{\swahiliedname}%
+ \def\swedishedition{\swedishedname}%
+ \def\tamiledition{\tamiledname}%
+ \def\turkishedition{\turkishedname}\if#12%
+ {2\higher}\else\if#13%
+ {3\higher}\else\if#14%
+ {4\higher}\else\if#15%
+ {5\higher}\else\if#16%
+ {6\higher}\else\if#17%
+ {7\higher}\else\if#18%
+ {8\higher}\else\if#19%
+ {9\higher}\else#1\fi\fi\fi\fi\fi\fi\fi\fi\egroup}
+\gdef\edition#1{\@bsphack\@ifundefined{l@#1}{\@nolanerr{#1}}%
+ {\language\csname l@#1\endcsname\@esphack}}%
+\gdef\arabicedition{\edition{arabic}}
+\gdef\croatianedition{\edition{croatian}}
+\gdef\czechedition{\edition{czech}}
+\gdef\danishedition{\edition{danish}}
+\gdef\dutchedition{\edition{dutch}}
+\gdef\englishedition{\edition{english}}
+\gdef\esperantoedition{\edition{esperanto}}
+\gdef\finnishedition{\edition{finnish}}
+\gdef\frenchedition{\edition{french}}
+\gdef\germanedition{\edition{german}}
+\gdef\greekedition{\edition{greek}}
+\gdef\hebrewedition{\edition{hebrew}}
+\gdef\hindiedition{\edition{hindi}}
+\gdef\italianedition{\edition{italian}}
+\gdef\maasaiedition{\edition{maasai}}
+\gdef\magyaredition{\edition{magyar}}
+\gdef\norskedition{\edition{norsk}}
+\gdef\polishedition{\edition{polish}}
+\gdef\portugesedition{\edition{portuges}}
+\gdef\romanianedition{\edition{romanian}}
+\gdef\russianedition{\edition{russian}}
+\gdef\sloveneedition{\edition{slovene}}
+\gdef\spanishedition{\edition{spanish}}
+\gdef\swahiliedition{\edition{swahili}}
+\gdef\swedishedition{\edition{swedish}}
+\gdef\tamiledition{\edition{tamil}}
+\gdef\turkishedition{\edition{turkish}}
+\gdef\subtitle#1{\def\@subtitle{#1}}
+\gdef\soustitre#1{\begin{flushright}{\it#1}\end{flushright}}
+\gdef\see#1#2{{\em\seename\ #1,} #2}
+\newif\ifpagenumbering\pagenumberingtrue
+\gdef\sschapter#1{\ifpagenumbering
+ \bgroup\@schapter{#1}\pagenumbering{arabic}\egroup\pagenumberingfalse
+ \else\@schapter{#1}\fi}
+\gdef\cchapter[#1]#2{\ifpagenumbering\bgroup\@chapter[#1]{#2}
+ \pagenumbering{arabic}\egroup\pagenumberingfalse
+ \else\@chapter[#1]{#2}\fi}
+\gdef\ch@pter{\clearpage\relax\if@twoside \ifodd\c@page\else
+ \hbox{}\relax\newpage\thispagestyle{empty}
+ \if@twocolumn\hbox{}\newpage\fi\fi\fi
+ \thispagestyle{plain}\global\@topnum\z@\@afterindentfalse
+ \secdef\cchapter\sschapter}
+\gdef\maketitlepages{\def\chapter{\thispagestyle{empty}\ch@pter}
+ \pagenumbering{roman}
+ \begin{titlepage}\setcounter{page}{-3}
+ \null
+ \vfil
+ \vskip2\baselineskip \begin{center}
+ {\Huge\sc \@title \par}\end{center}
+ \end{titlepage}\begin{titlepage}\setcounter{page}{-2}\null\vfil
+ \end{titlepage}\begin{titlepage}
+ \let\footnotesize\small \let\footnoterule\relax\setcounter{page}{-1}
+ \null
+ \vfil
+ \vskip 60pt \begin{center}
+ {\LARGE\sc \@title \par} \ifx\@subtitle\undefined\relax\else
+ {\large \@subtitle \par}\fi \vskip 3em {\large
+ \lineskip .75em
+ \begin{tabular}[t]{c}\@author
+ \end{tabular}\par}
+ \vfil {\large \@date \par} \end{center}
+ \end{titlepage}\begin{titlepage}\null\vfil\end{titlepage}
+ \setcounter{footnote}{0} \let\thanks\relax
+ \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\let\maketitle\relax}
+\gdef\tableofcontents{\bgroup\@restonecolfalse
+ \if@twocolumn\@restonecoltrue\onecolumn
+ \fi\pagenumberingfalse\chapter*{\contentsname
+ \@mkboth{\uppercase{\contentsname}}{\uppercase{\contentsname}}}
+ \@starttoc{toc}\if@restonecol\twocolumn\fi\egroup}
+\gdef\listoffigures{\bgroup\@restonecolfalse
+ \if@twocolumn\@restonecoltrue\onecolumn
+ \fi\pagenumberingfalse\chapter*{\listfigurename\@mkboth
+ {\uppercase{\listfigurename}}{\uppercase{\listfigurename}}}\@starttoc
+ {lof}\if@restonecol
+ \twocolumn\fi\egroup}
+\gdef\listoftables{\bgroup\@restonecolfalse
+ \if@twocolumn\@restonecoltrue\onecolumn
+ \fi\pagenumberingfalse\chapter*{\listtablename\@mkboth
+ {\uppercase{\listtablename}}{\uppercase{\listtablename}}}\@starttoc
+ {lot}\if@restonecol
+ \twocolumn\fi\egroup}
+\def\preface{\bgroup\pagenumberingfalse\chapter*{\prefname}
+ \addcontentsline{toc}{chapter}{\prefname}\egroup}
+\long\gdef\@footnotetext#1{\insert\footins{\footnotesize
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\footnotesep
+ \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
+ \hsize\columnwidth \@parboxrestore
+ \edef\@currentlabel{\csname p@footnote\endcsname\@thefnmark}\@makefntext
+ \def\@wrindex{\wrindex}{\rule{\z@}{\footnotesep}\ignorespaces
+ #1\strut}}}
+\global\let\f@@tnote\footnote%
+\global\let\c@ntentsline\contentsline%
+\gdef\footnote{\rm\kern.05em\protect\f@@tnote}
+\gdef\nofootnote#1{\relax}
+\gdef\contentsline{%
+ \def\f@@tnote{\nofootnote}\let\footnotemark\relax\c@ntentsline}
+\gdef\mlbibfilename#1{\def\bibfn{#1}}
+\gdef\bibliography#1{\addcontentsline{toc}{chapter}{\bibname}
+ \if@filesw\immediate\write\@auxout{\string\bibdata{\bibfn,#1}}\fi
+ \@input{\jobname.bbl}}
+\gdef~{\penalty1000\ }
+\gdef\notename#1{#1\,n.}
+\gdef\index#1{\ifx\ind@x\undefined\relax\else\protect\ind@x{#1}\fi}
+\global\let\enddoc\enddocument
+\gdef\wrindex#1{\let\thepage\relax\xdef\@gtempa{%
+ \write\@indexfile{\string\indexentry{#1|notename}{\thepage}}}
+ \endgroup\@gtempa\if@nobreak \ifvmode\nobreak\fi\fi\@esphack}
+\gdef\makeindex{\if@filesw \newwrite\@indexfile
+ \immediate\openout\@indexfile=\jobname.idx
+ \def\ind@x{\@bsphack\begingroup\ifx\no@french@active@punct\undefined\relax
+ \else\no@french@active@punct\def\'{\accent 19}\fi
+ \def\protect####1{\string####1\space}\@sanitize\@wrindex}
+ \typeout{Writing index file \jobname.idx}\fi
+ \def\theidx{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+ \columnseprule.4pt\small\columnsep 35pt
+ \twocolumn[\@makeschapterhead{\indexname}]
+ \@mkboth{\uppercase{\indexname}}{\uppercase{\indexname}}
+ \thispagestyle{plain}\parindent\z@\parskip\z@ plus .3pt\relax%
+ \let\item\@idxitem\addcontentsline{toc}{chapter}{\indexname}}
+ \def\theindex{\ifx\multicols\undefined
+ \makeatletter\inputstyle{multicol}\makeatother
+ \ifx\multicols\undefined\theidx\else
+ \columnseprule=.4pt\small\chapter*{\indexname}
+ \parindent\z@\parskip\z@ plus.3pt\relax\let\item\@idxitem
+ \addcontentsline{toc}{chapter}{\indexname}
+ \begin{multicols}{2}\fi\fi}
+ \def\endtheindex{\ifx\multicols\undefined\if@restonecol\onecolumn\else
+ \clearpage\fi\else\end{multicols}\fi}
+ \def\enddocument{\@input{\jobname.ind}\enddoc}}
+\gdef\cover{\@input{\jobname.ind}\def\enddocument{\enddoc}\pagestyle{empty}}
+\newinsert\mcpfootins
+\long\def\mcpfootnote#1{\footnotemark\addtocounter{footnote}{-1}
+ \global\setbox\mcpfootins \vbox{\unvcopy\mcpfootins\footnotesize%
+ \interlinepenalty\interfootnotelinepenalty\floatingpenalty=20000
+ \splittopskip\footnotesep%\splitmaxdepth \dp\strutbox%
+ \hsize\columnwidth\pagebreak[3]
+ \parindent 1em\noindent\hbox to 1.8em{\hss\footnotemark}
+ {\rule{0pt}{\footnotesep}\ignorespaces #1\strut}}}
+\gdef\multicolpar#1{\def\f@@tnote{\mcpfootnote}\let\footins\mcpfootins
+ \addvspace\topsep\pretolerance1001\tolerance9999
+ \finalhyphendemerits3000000\hbadness5000\vbadness10001
+ \advance\baselineskip0pt\multicolumnparallelparagraphs{#1}{2em}}
+\gdef\endmulticolpar{\xpar\egroup\egroup\leavevmode}
+\newcount\columnsleft \newcount\totalcolumns \newdimen\separation
+\gdef\multicolumnparallelparagraphs#1#2{\totalcolumns#1\separation#2
+ \let\xpar\par\vskip\parskip\columnsleft\totalcolumns\relax
+ \hbox to\hsize\bgroup\let\par\nextmulticolumnparallelparagraph
+ % Set hsize = (old hsize - (#1 - 1)*#2 ) / #1
+ \dimen0\separation\advance\hsize-\columnsleft\dimen0
+ \advance\hsize\dimen0\divide\hsize\columnsleft\relax
+ \leavevmode\vtop\bgroup\parindent0pt}
+\gdef\nextmulticolumnparallelparagraph{\strut\egroup\advance\columnsleft-1
+ \ifnum\columnsleft>0\hfil\leavevmode\vtop\bgroup\parindent0pt
+ \else\strut\egroup\xpar\vskip\parskip\xpar
+ \multicolumnparallelparagraphs\totalcolumns\separation
+ \fi}
+\newcount\l@nguage
+\newif\ifgreek
+\newif\ifrussian
+\gdef\p@selectlanguage#1{\ifgreek\endgreek\fi\russianfalse\@bsphack\input#1
+ \@ifundefined{l@#1}{\@nolanerr{#1}}%
+ {\language=\csname l@#1\endcsname\relax
+ \l@nguage=\csname l@#1\endcsname\relax
+ \originalTeX\mdqon
+ \csname captions#1\endcsname
+ \csname date#1\endcsname
+ \csname extras#1\endcsname
+ \def\originalTeX{\csname noextras#1\endcsname}%
+ \@esphack}}%
+\gdef\iflanguage#1#2#3{\@bsphack\@ifundefined{l@#1}{#3}
+ {\ifnum\l@nguage=\csname l@#1\endcsname\relax#2\else#3\fi\@esphack}}
+\gdef\inputstyle#1{\openin1 #1.sty \ifeof1
+ \typeout{! I can't find file `#1.sty'.}
+ \else\closein1 \relax\input{#1.sty}\fi}
+\inputstyle{ibmkbd} % for an extended keyboard
+\inputstyle{setspace} % to manipulate interline spacing
+\inputstyle{logos} % some frequently used logos
+\inputstyle{rgreek}
+\inputstyle{cmcyr}
+\gdef\dutchTeX{\selectlanguage{dutch}}
+\gdef\frenchTeX{\selectlanguage{french}}
+\gdef\germanTeX{\selectlanguage{german}}
+\gdef\greekTeX{\selectlanguage{greek}}
+\gdef\begingreek{\selectlanguage{greek}}
+\gdef\beginmgreek{\selectlanguage{greek}\monotoniko}
+\gdef\cyrTeX{\selectlanguage{russian}}
+\gdef\english{\selectlanguage{english}}
+\gdef\English{\selectlanguage{english}}
+\global\let\dutch\dutchTeX
+\global\let\french\frenchTeX
+\global\let\german\germanTeX
+\global\let\greek\greekTeX
+\global\let\russian\cyrTeX
+\global\let\Dutch\dutchTeX
+\global\let\French\frenchTeX
+\global\let\German\germanTeX
+\global\let\Greek\greekTeX
+\global\let\Russian\cyrTeX
+\mlbibfilename{ml}
+\expandafter\ifx\csname selectfont\endcsname
+\def\ly{\family{lasy}\selectfont}
+\let\mathit\mit
+\def\tensf{\family{cmss}\series{m}\shape{n}\size{10}{13pt}\selectfont}
+\def\tensl{\family{cmsl}\series{m}\shape{n}\size{10}{12pt}\selectfont}
+\else \endinput \fi
+\selectlanguage{english}\makeatother\mdqoff
+\endinput
+%%
+%% End of file `ml.sty'.
diff --git a/obsolete/macros/latex209/contrib/ml/mldoc.tex b/obsolete/macros/latex209/contrib/ml/mldoc.tex
new file mode 100644
index 0000000000..43b0a2aafa
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/ml/mldoc.tex
@@ -0,0 +1,52 @@
+\documentstyle[newdoc]{ltugboat}
+%
+% \EnableCrossrefs
+ \DisableCrossrefs % use \DisableCrossrefs if the index is ready
+
+ \RecordChanges
+% \OnlyDescription
+% \PageIndex
+ \CodelineIndex
+
+ \SelfDocumenting % macro defined in ltugboat.sty
+
+% -------------------------------------------------
+%^^A! aanwijzingen voor TUGboat-redactie in het Engels
+% define \dlqq so that we can give an example of "'
+% -------------------------------------------------
+\makeatletter
+\gdef\dlqq{{\setbox\tw@=\hbox{,}\setbox\z@=\hbox{''}%
+ \dimen\z@=\ht\z@ \advance\dimen\z@-\ht\tw@
+ \setbox\z@=\hbox{\lower\dimen\z@\box\z@}\ht\z@=\ht\tw@
+ \dp\z@=\dp\tw@ \box\z@\kern-.04em}}
+%+
+% Some extra definitions needed in the article
+%-
+\def\langvar{$\langle \it lang \rangle$}
+\def\ttbs{\char'134}
+\def\note#1{{\bf #1}}
+%\def\note#1{}
+\def\bsl{\protect\bslash}
+%
+\renewenvironment{theglossary}{%
+ \glossary@prologue%
+ \GlossaryParms \let\item\@idxitem \ignorespaces}%
+ {}
+%
+\ifx\indefined\selectfont
+\else
+ \def\tensl{\shape{sl}\size{10}{12pt}\selectfont}
+\fi
+\makeatother
+%
+\setcounter{page}{1}
+\def\rtitlex{The implementation of the {\sf ml} system}
+\def\midrtitle{}
+\def\PrelimDraftfooter{%
+ \dlap{\kern\textheight\kern3pc
+ \rlap{\hbox to \pagewd{\filename\hfil{\tensl printed \Now}}}
+ }}
+
+\begin{document}
+ \DocInput{ml.doc}
+\end{document}
diff --git a/obsolete/macros/latex209/contrib/ml/mlletter.sty b/obsolete/macros/latex209/contrib/ml/mlletter.sty
new file mode 100644
index 0000000000..6846358926
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/ml/mlletter.sty
@@ -0,0 +1,570 @@
+% This is MLLETTER.STY in text format
+% a modification of Victor Eijkhout's BRIEF.STY,
+% a letter style following Dutch NEN-norms 1025, 1026, and 3162.
+\def\fileversion{0.1}\def\filedate{16 sept 1994}
+% A MultiLingual letterstyle compatible with letter.sty
+%
+% Author:
+% Hans Stoks
+% u251006@vm.uci.kun.nl
+%
+% Main changes of BRIEF.STY:
+% do away with \b@language,
+% let translation be done by external files
+
+\typeout{Document Style `Mlletter'. Version <\fileversion>, <\filedate>}
+
+\def\@ptsize{1}
+\@namedef{ds@10pt}{\def\@ptsize{0}}
+\@namedef{ds@11pt}{\def\@ptsize{1}}
+\@namedef{ds@12pt}{\def\@ptsize{2}}
+\@twosidefalse
+\def\ds@draft{\overfullrule 5pt}
+
+\def\ds@USletter{\@elfinchtrue} \newif\if@elfinch
+\@namedef{ds@a4}{\message{You do not need an A4-option:
+paper is adjusted automatically.}}
+\def\ds@sober{}
+
+\def\ds@typhulp{\@typhulptrue} \newif\if@typhulp
+\def\ds@streepjes{\@streepjestrue} \newif\if@streepjes
+\def\ds@adresrechts{\@adresrechtstrue} \newif\if@adresrechts
+
+\@options
+
+\lineskip 1pt \normallineskip 1pt
+\def\baselinestretch{1}
+
+%%%%%%%%%%%%%%%%%%%%%%% point size %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifcase \@ptsize\relax
+\def\@normalsize{\@setsize\normalsize{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6pt plus3pt minus3pt}
+\def\small{\@setsize\small{11pt}\ixpt\@ixpt
+\abovedisplayskip 8.5pt plus 3pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2pt\belowdisplayshortskip 4pt plus2pt minus 2pt}
+\def\footnotesize{\@setsize\footnotesize{9.5pt}\viiipt\@viiipt
+\abovedisplayskip 6pt plus 2pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt\belowdisplayshortskip 3pt plus 1pt minus
+2pt}
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\or
+\def\@normalsize{\@setsize\normalsize{13.6pt}\xipt\@xipt
+\abovedisplayskip 11pt plus3pt minus6pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6.5pt plus3.5pt
+minus3pt}
+\def\small{\@setsize\small{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6pt plus3pt minus3pt}
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt
+\abovedisplayskip 8pt plus 2pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt\belowdisplayshortskip 4pt plus 2pt minus
+2pt}
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\or
+\def\@normalsize{\@setsize\normalsize{15pt}\xiipt\@xiipt
+\abovedisplayskip 12pt plus3pt minus7pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6.5pt plus3.5pt
+minus3pt}
+\def\small{\@setsize\small{13.6pt}\xipt\@xipt
+\abovedisplayskip 11pt plus3pt minus6pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6.5pt plus3.5pt
+minus3pt}
+\def\footnotesize{\@setsize\footnotesize{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6pt plus3pt minus3pt}
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{18pt}\xivpt\@xivpt}
+\def\Large{\@setsize\Large{22pt}\xviipt\@xviipt}
+\def\LARGE{\@setsize\LARGE{25pt}\xxpt\@xxpt}
+\def\huge{\@setsize\huge{30pt}\xxvpt\@xxvpt}
+\let\Huge=\huge
+\fi
+\normalsize
+
+%%%%%%%%%%%%%%%%%%%%%% Paper Size %%%%%%%%%%%%%%%%%%%%%%%%%%
+% 33mm leftmargin
+\oddsidemargin=7.6mm \evensidemargin=\oddsidemargin
+
+% rightmargin according to NEN 10mm; maybe better 33mm.
+\textwidth=144mm \@rightskip=0cm plus 5cm \rightskip=\@rightskip
+% no margin notes.
+\marginparwidth=0pt \marginparsep=0pt \marginparpush=0pt
+
+% topmargin 13mm
+\topmargin-12.4mm
+% heading up to 50mm from the top
+\headheight=37mm \headsep=0mm
+% textheight, the leftover
+\textheight=197mm
+\if@elfinch \advance\textheight by -17.6mm \fi
+
+% a possibillity to use other windows (vensters)
+\newdimen\vensterskip \vensterskip=50mm %% the default
+\newdimen\@vensterskip
+\newdimen\@firstheadheight \newdimen\@otherheadheight
+\newdimen\@othertextheight
+\newdimen\@otherheadsep \newdimen\@vervolgsep
+\@otherheadsep=2mm
+\def\@prepareerhoofden{\@vensterskip=\vensterskip
+ \advance\@vensterskip by -50mm
+ \@firstheadheight=\headheight
+ \@otherheadheight=\headheight % this should not be here
+ \@othertextheight=\textheight % idem
+ }
+
+% separation between text en foot
+\newdimen\footsep \footsep=1.5cm % like headsep
+
+\columnsep 10pt \columnseprule 0pt % if you want columns?!
+\raggedbottom %% hm! we seem to need this.
+
+%%%%%%%%%%%%%V we'll get to this later
+\footnotesep 12pt \skip\footins 10pt plus 2pt minus 4pt
+\floatsep 12pt plus 2pt minus 2pt
+\textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 12pt plus 2pt minus 2pt
+\dblfloatsep 12pt plus 2pt minus 2pt
+\dbltextfloatsep 20pt plus 2pt minus 4pt
+\@maxsep 20pt
+\@dblmaxsep 20pt
+\@fptop 0pt plus 1fil
+\@fpsep 8pt plus 2fil
+\@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil
+\@dblfpsep 8pt plus 2fil
+\@dblfpbot 0pt plus 1fil
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%% opening / closing %%%%%%%%%%%%%%%%%%%%%
+\font\refkopfont=cmssq8
+\font\kleinvet=cmbx7
+
+\def\opening#1{\thispagestyle{firstpage}
+ \adresveld
+ \prevdepth=-1000pt \vskip-2pt %% ????
+ \referentieregel
+ \@dosubject #1\par\nobreak}
+\def\ondertekening#1{\def\fromsig{#1}}\def\fromsig{}
+% It is possible now to declare a signature
+% (\ondertekening) after the closing (\afsluiting).
+\long\def\afsluiting#1{\par\nobreak\vspace{\parskip}
+ \stopbreaks \noindent
+ \ifx\@empty\fromsig
+ \def\ondertekening##1{\def\fromsig{##1}
+ \parbox{.5\textwidth}{\raggedright
+ \ignorespaces #1\\[6\medskipamount] \fromsig \strut}}
+ \else \parbox{.5\textwidth}{\raggedright
+ \ignorespaces #1\\[6\medskipamount]
+ \fromsig \strut}
+ \fi \par}
+
+\def\betreft#1{\def\@subject{#1}} \def\@subject{}
+\def\@dosubject{\ifx\@empty\@subject
+ \else \par\noindent
+ \parbox[t]{\textwidth}{\@hangfrom{\refkopfont \rename
+ \enspace}\rm\ignorespaces \@subject\strut}\par\fi}
+\def\ps{\par\startbreaks\psname\ }
+\def\cc#1{\par\noindent
+ \parbox[t]{\textwidth}{\@hangfrom{\ccname\ }\ignorespaces
+ #1\strut}\par}
+\def\bijlage#1{\par\noindent
+ \parbox[t]{\textwidth}{\@hangfrom{\rm \enclname\ }\ignorespaces
+ #1\strut}\par}
+\def\bijlagen#1{\par\noindent
+ \parbox[t]{\textwidth}{\@hangfrom{\rm \enclnames\ }\ignorespaces
+ #1\strut}\par}
+\def\stopletter{}
+
+\long\def\brief#1{\newpage
+ \c@page\@ne
+ \interlinepenalty=200 \@processto{#1}
+ \@defrefveld{\@Ad}{\headtoname}{\toname}
+%% only without any date the user will get \today.
+ \ifdim\wd\@Dt=0cm \@defrefveld{\@Dt}{\datetext}{\today}\fi
+%% maybe the user has a different windowsize,
+% which he specified;
+% so it is only now that we can prepare the headings.
+ \@prepareerhoofden % (looks like we are cannibals)
+%% maybe some more headheight and less textheight
+% for the subsequent pages. Nb: no changes of textheight
+% on the first page.
+ {\setbox\@tempboxa=\vervolghoofd
+ \@tempdima=\ht\@tempboxa
+ \advance\@tempdima by -\@otherheadheight
+ \ifdim\@tempdima>0cm
+ \global\advance\@otherheadheight by \@tempdima
+ \global\advance\@othertextheight by -\@tempdima \fi}
+%% idem look at the foot
+ {\setbox\@tempboxa=\vbox{\voetregel}
+ \global\footskip=\ht\@tempboxa % maybe a little bit less?
+ \global\advance\footskip by \footsep}
+ } % except if it has been there already!!!
+
+\def\endbrief{\stopletter\@@par\pagebreak\@@par
+ \if@filesw \begingroup
+ \def\protect{\string} \let\\=\relax
+ \def\protect##1{\string##1\space}
+ \immediate\write\@auxout{\string\mlabel{\returnaddress}
+ {\toname\\ \toaddress}}
+ \endgroup \fi
+ }
+
+\long\def\@processto#1{\@xproc #1\\@@@\ifx\toaddress\@empty
+ \else \@yproc #1@@@\fi}
+\long\def\@xproc #1\\#2@@@{\def\toname{#1}\def\toaddress{#2}}
+\long\def\@yproc #1\\#2@@@{\def\toaddress{#2}}
+\def\stopbreaks{\interlinepenalty \@M
+ \def\par{\@@par\nobreak}\let\\=\@nobreakcr
+ \let\vspace\@nobreakvspace}
+\def\@nobreakvspace{\@ifstar{\@nobreakvspacex}{\@nobreakvspacex}}
+\def\@nobreakvspacex#1{\ifvmode\nobreak\vskip #1\relax\else
+ \@bsphack\vadjust{\nobreak\vskip #1}\@esphack\fi}
+\def\@nobreakcr{\vadjust{\penalty\@M}\@ifstar{\@xnewline}{\@xnewline}}
+\def\startbreaks{\let\\=\@normalcr
+ \interlinepenalty 200\relax
+ \def\par{\@@par\penalty 200\relax}}
+
+% relics of 'letter', not used.
+\def\name#1{\def\fromname{#1}}
+\long\def\address#1{\def\fromaddress{#1}}\def\fromaddress{}
+\def\location#1{\def\fromlocation{#1}}\def\fromlocation{}
+\def\telephone#1{\def\telephonenum{#1}}\def\telephonenum{}
+\def\returnaddress{}
+
+\def\document{\endgroup
+ \@colht\textheight \@colroom\textheight \vsize\textheight
+ \columnwidth\textwidth \@clubpenalty\clubpenalty
+ \if@twocolumn \advance\columnwidth -\columnsep
+ \divide\columnwidth\tw@ \hsize\columnwidth \@firstcolumntrue
+ \fi
+ \hsize\columnwidth \linewidth\hsize
+ \begingroup\@floatplacement\@dblfloatplacement\endgroup
+ \if@filesw \immediate\openout\@mainaux=\jobname.aux
+ \immediate\write\@mainaux{\string\startlabels\string\@startlabels}\fi
+ \csname process@table\endcsname %% new font selection scheme
+ \def\do##1{\let ##1\@notprerr}
+ \@preamblecmds
+ \let\do\noexpand
+ \@normalsize\everypar{}}
+\def\enddocument{\@checkend{document}\newpage\begingroup
+ \if@filesw \immediate\closeout\@mainaux
+ \makeatletter\input \jobname.aux\clearpage
+ \fi\endgroup\deadcycles\z@\@@end}
+
+\def\makelabels{\@fileswtrue}\let\maaketiketten=\makelabels
+\def\@startlabels{}
+\newcount\labelcount
+
+%%%%%%%%%%%%%%%%%%%%%%%% address %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newdimen\adresveldbreedte
+\newif\if@antwoordadres
+\def\backaddress#1{\@antwoordadrestrue\def\@antwoordadres{#1}}
+\def\@antwoordadres{}
+\def\adresveld{\hbox{}\kern-\topskip
+ \kern\@vensterskip
+ \begingroup
+ \if@adresrechts \adresveldbreedte=4\refveldbreedte
+ \advance\adresveldbreedte by -76mm
+ \def\@tempa{\moveright 76mm}
+ \else \let\@tempa\relax \adresveldbreedte=83mm\fi
+ \setbox\@tempboxa= % addressee plus address
+ \vtop{\hsize=\adresveldbreedte \@normalsize
+ \rightskip=0cm plus \adresveldbreedte
+ \let\\=\@nobreakcr\toname\\ \toaddress}
+ \bgroup\baselineskip=0pt %% this avoids a lot of problems.
+ \lineskip=0pt %% this also
+ \if@antwoordadres\@tempa\vbox to 0cm{
+ \hbox to \adresveldbreedte{\kleinvet
+ \def\\{\unskip\enspace$\bullet$\enspace\ignorespaces}%
+ \@antwoordadres\hfil}\kern2pt
+ \hrule \vss}\fi
+ \if@typhulp \@tempa\llap{\vbox to 0cm
+ {\vskip9mm\streepje\vss}} \fi
+ \kern9mm \kern-\ht\@tempboxa \@tempdima=\dp\@tempboxa
+ \@tempa\box\@tempboxa \kern-\@tempdima
+ \vskip31mm
+ \egroup\endgroup}
+
+
+%%%%%%%%%%%%%%%%%%%%%% reference %%%%%%%%%%%%%%%%%%%%%%%%%%
+\newdimen\refveldbreedte
+\refveldbreedte=38mm %% 3/2 inch. see NEN 3516
+
+\def\@defrefveld#1#2#3{\setbox#1=\@refveld{#2}{#3}}
+\def\@refveld#1#2{\vtop{\hsize=\refveldbreedte \parskip=0cm
+ \everypar{}% this might be in the preamble!!
+ \lineskiplimit=\z@ \baselineskip=12pt
+ \lineskip=\z@
+ \rightskip=0cm plus \refveldbreedte
+ minus .5\refveldbreedte
+ \vbox{\refkopfont\baselineskip=10pt
+ #1\@@par}\kern2pt\strut\ignorespaces#2}}
+
+% references will stay if there are more than one letter to be processed
+\newbox\@UB \newbox\@UK \newbox\@OK \newbox\@Dt
+\def\yourletter#1{\@defrefveld{\@UB}{\yourlettername}{#1}}
+\def\yourref#1{\@defrefveld{\@UK}{\yourrefname}{#1}}
+\def\ourref#1{\@defrefveld{\@OK}{\ourrefname}{#1}}
+\def\date#1{\def\@tempa{}\def\@tempb{#1}\ifx\@tempa\@tempb
+ \setbox\@Dt\hbox{ }\else\@defrefveld{\@Dt}{\datetext}{#1}\fi}
+% Date is initialized to \today in \brief,
+% without any statement concerning date there will not be any.
+
+\def\referentieregel{\hbox
+ {\hbox to \refveldbreedte{\copy\@UB\hfil}%
+ \hbox to \refveldbreedte{\copy\@UK\hfil}%
+ \hbox to \refveldbreedte{\copy\@OK\hfil}%
+ \hbox to \refveldbreedte{\copy\@Dt\hfil}\hss}}
+
+\newbox\@Ad % To: initialized in \brief
+\def\vervolgreferentieregel{\hbox
+ {\hbox to \refveldbreedte{\copy\@Ad\hfil}%
+ \hskip\refveldbreedte
+ \hbox to \refveldbreedte{\copy\@Dt\hfil}%
+ \@refveld{\headpagename}{\thepage}\hss}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%% headers / footers %%%%%%%%%%%%%%%%%%%%%%%
+\def\briefhoofd{}\def\vervolghoofd{\vbox{}}
+\def\maakbriefhoofd
+ {\@ifstar {\@kortvervolgbriefhoofd}{\@langvervolgbriefhoofd}}
+\def\@kortvervolgbriefhoofd
+ #1#2{
+ \@maakbriefhoofd{#1}{#2}
+ \def\vervolghoofd{\vbox{\hsize=4\refveldbreedte
+ \hbox to \hsize{\Large \sf #1\strut\hfil}
+ \hrule \kern2mm \vervolgreferentieregel}}}
+\def\@langvervolgbriefhoofd
+ #1#2{
+ \@maakbriefhoofd{#1}{#2}
+ \def\vervolghoofd{\vbox{\briefhoofd\vskip2mm
+ \vervolgreferentieregel
+ \vbox{}}}}
+\def\@maakbriefhoofd#1#2{\def\briefhoofd{%
+ \vbox{\hsize=4\refveldbreedte
+ \hbox to \hsize{\Large \sf #1\strut\hfil}
+ \hrule
+ \moveright 3\refveldbreedte\@refveld{\strut #2}{}
+ \vbox{}}}}
+\newbox\@voetruimte \setbox\@voetruimte=\hbox{}
+\newcount\@voetteller
+\def\voetregel{\copy\@voetruimte}
+\def\voetitem#1#2{\advance\@voetteller by 1
+ \setbox\@voetruimte=\hbox to 4\refveldbreedte
+ {\unhbox\@voetruimte
+ \ifcase\@voetteller \relax \or \relax \or
+ \hfil \else \hfill \fi
+ \@refveld{#1}{#2}\hskip0cm plus 3\refveldbreedte}}
+\def\ps@empty{
+ \def\@oddhead{}\def\@oddfoot{}
+ \def\@evenhead{}\def\@evenfoot{}}
+\def\ps@plain{
+ \def\@oddhead{}\def\@evenhead{}
+ \def\@oddfoot{\rm\hfil\thepage}
+ \let\@evenfoot=\@oddfoot}
+%% hss because head and foot are to wide.
+\def\@hss{\hskip 0cm plus 1filll minus 1filll\relax}
+\def\ps@headings{
+ \def\@oddhead{\vbox to \@otherheadheight
+ {\vervolghoofd\vfil
+ \if@streepjes\streepjes{\@otherheadheight}\fi}%
+ \hss}
+ \let\@evenhead=\@oddhead
+ \def\@oddfoot{\voetregel\hss} \let\@evenfoot=\@oddfoot}
+\def\ps@firstpage{\global\headheight=\@otherheadheight
+ \global\textheight=\@othertextheight %?? werkt dit ??
+ \global\headsep=\@otherheadsep
+ \def\@oddhead{\vbox to \@firstheadheight
+ {\briefhoofd\vfil
+ \if@streepjes\streepjes{\@firstheadheight}\fi}%
+ \hss}
+ \def\@evenhead{}
+ \def\@oddfoot{\voetregel\hss} \let\@evenfoot=\@oddfoot}
+
+\ps@headings
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% strips %%%%%%%%%%%%%%%%%%%%%%%%%%
+%% only for envelopes EN-DL-V implemented
+\def\streepje{\hbox to 2mm{\hrulefill}}
+\def\streepjes#1{\vbox to 0cm
+ {\kern-#1 %% to the top of the heading, 13mm below
+ \hbox to \textwidth %% the top of the paper
+ {\llap{\perfstreepje\kern24mm}\hfill %% 7mm from the top at 33mm
+ \rlap{\kern24mm\vouwstreepjes}} %% 7mm from the top at 33mm
+ \vss}} %% see textwidth above.
+\def\perfstreepje {\vtop{\kern\z@
+ \kern 135mm %% 297/2 - 13
+ \streepje}}
+\def\vouwstreepjes{\vtop{\kern\z@
+ \kern 92mm %% 105-13
+ \streepje %% supposed to be without any width
+ \kern 50mm %% 155-150
+ \streepje}}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%% lists %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% from `artikel3'
+\def\@listi{\leftmargin\leftmargini
+ \labelsep=.5em
+ \labelwidth=\leftmargin \advance\labelwidth by -\labelsep
+ \topsep=-.5\parskip plus 1pt %V half the amount of white around lists
+ \parsep \z@ %V defaults added
+ \itemsep \parsep} %V defaults added
+\def\@listii{\leftmargin\leftmarginii \labelsep=.5em
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep=-.5\parskip plus 1pt %V half the amount of white around lists
+ \parsep \z@ %V zeroed
+ \itemsep \parsep}
+\def\@listiii{\leftmargin\leftmarginiii \labelsep=.5em
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep=-.5\parskip plus 1pt %V half the amount of white around lists
+ \parsep \z@
+ \partopsep \z@ %V zeroed
+ \itemsep \topsep}
+\def\@listiv{\leftmargin\leftmarginiv \labelsep=.5em
+ \topsep=-.5\parskip plus 1pt %V half the amount of white around lists
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv \labelsep=.5em
+ \topsep=-.5\parskip plus 1pt %V half the amount of white around lists
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi \labelsep=.5em
+ \topsep=-.5\parskip plus 1pt %V half the amount of white around lists
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
+\leftmargini 2.5em
+\leftmarginii 2.2em \leftmarginiii 1.87em
+\leftmarginiv 1.7em \leftmarginv 1em
+\leftmarginvi 1em
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\labelsep 5pt
+\parsep 0pt
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% varia %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\parskip .7em plus .3em minus .2em
+\parindent 0pt \topsep .4em \partopsep 0pt \itemsep .4em
+\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301
+\@beginparpenalty -\@lowpenalty \@endparpenalty -\@lowpenalty \@itempenalty
+-\@lowpenalty
+
+
+\def\labelenumi{\arabic{enumi}.}
+\def\theenumi{\arabic{enumi}}
+\def\labelenumii{(\alph{enumii})}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+\def\labelenumiii{\roman{enumiii}.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+\def\labelenumiv{\Alph{enumiv}.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+\def\labelitemi{$\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -15pt\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 15pt}\item[]}
+\let\endverse\endlist
+\def\quotation{\list{}{\listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin}\item[]}
+\let\endquotation=\endlist
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+\let\enddescription\endlist
+
+
+\def\theequation{\arabic{equation}}
+
+\arraycolsep 5pt \tabcolsep 6pt \arrayrulewidth .4pt \doublerulesep 2pt
+\tabbingsep \labelsep
+\skip\@mpfootins = \skip\footins
+\fboxsep = 3pt \fboxrule = .4pt
+
+\def\footnoterule{\kern-1\p@
+ \hrule width .4\columnwidth
+ \kern .6\p@}
+
+\long\def\@makefntext#1{\noindent
+ \hbox to \leftmargini{${\@thefnmark}$.\hfil}#1}
+
+
+\c@topnumber=2
+\def\topfraction{.7}
+\c@bottomnumber=1
+\def\bottomfraction{.3}
+\c@totalnumber=3
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\c@dbltopnumber= 2
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+
+\smallskipamount=.5\parskip \medskipamount=\parskip
+\bigskipamount=2\parskip
+\pagenumbering{arabic} \onecolumn \@fileswfalse
+
+%%%%%%%%%%%%%%%%%%%%%%%%%% labels %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\startlabels{\labelcount=0 \baselineskip=0pt \lineskip=0pt
+\pagestyle{empty}
+\let\@texttop=\relax
+\topmargin -50pt
+\headsep 0pt
+\oddsidemargin -35pt
+\evensidemargin -35pt
+\textheight 10in
+\@colht\textheight \@colroom\textheight \vsize\textheight
+\textwidth 550pt
+\columnsep 25pt
+\xpt
+\baselineskip=0pt
+\lineskip=0pt
+\boxmaxdepth=0pt
+\twocolumn\relax}
+\def\mlabel#1#2{\setbox0\vbox{\parbox[b]{3.6in}{\strut\ignorespaces #2}}
+ \vbox to 2in{\vss \box0 \vss}}
+
+%% and finally, muchos against my will, emulation of original
+%% LaTeX letter style.
+\let\letter=\brief \let\endletter=\endbrief
+\let\closing=\afsluiting
+\def\signature{\ondertekening}
+\def\encl{\@ifstar{\bijlage}{\bijlagen}}
+\def\address#1{\maakbriefhoofd*{}{#1}}
+\let\re=\betreft
+
+%% with english translations of extra commands
+\let\footitem=\voetitem
+\def\windowright{\@adresrechtstrue}
+\gdef\b@ckaddress#1{\def\backaddressname{#1}}
+\gdef\makehead{\let\backaddress\b@ckaddress\maakbriefhoofd}
+\ifx\undefined\rename\def\rename{Re}\fi
+\ifx\undefined\psname\def\psname{P.S.:}\fi
+\ifx\undefined\ccname\def\psname{cc.:}\fi
+\ifx\undefined\enclname\def\enclname{Enclosure:}\fi
+\ifx\undefined\enclnames\def\enclnames{Enclosures:}\fi
+\ifx\undefined\headtoname\def\headtoname{To}\fi
+\ifx\undefined\yourlettername\def\yourlettername{Your letter of}\fi
+\ifx\undefined\yourrefname\def\yourrefname{Your reference}\fi
+\ifx\undefined\ourrefname\def\ourrefname{Our reference}\fi
+\ifx\undefined\datetext\def\datetext{Date}\fi
+\ifx\undefined\headpagename\def\headpagename{Page}\fi
+\endinput
diff --git a/obsolete/macros/latex209/contrib/ml/mlletter.tex b/obsolete/macros/latex209/contrib/ml/mlletter.tex
new file mode 100644
index 0000000000..217e7b7838
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/ml/mlletter.tex
@@ -0,0 +1,33 @@
+%
+% Generic TeX/LaTeX preamble for address.tex .
+%
+\ifundefined{LaTeX} % TeX
+ \magnification=\magstep1
+ \voffset=0in
+ \hoffset=0in
+ \vsize=9in
+ \hsize=6.5in
+ \nopagenumbers
+ %
+ \def\\{\hfil\break}
+ \def\newpage{\vfil\eject}
+\else % LaTeX
+ \documentstyle[12pt,ml,places,streepjes]{mlletter}
+ \topmargin 0in
+ \headheight 0in
+ \headsep 0in
+ \oddsidemargin 0in
+ \textheight 9in
+ \textwidth 6.5in
+ \pagestyle{empty}
+ \def\letter{}
+ \def\endletter{}
+ \makeatletter
+ \long\def\letter{\ifx\@empty\fromaddress
+ \brief{\Name\relax\\\AddrBlock{1}}\else
+ \brief{\Name\relax\\\AddrBlock{1}\address}\fi}
+ \let\endletter\endbrief
+ \makeatother
+\fi
+% For sending within the country:
+\def\holland{}
diff --git a/obsolete/macros/latex209/contrib/ml/multicol.sty b/obsolete/macros/latex209/contrib/ml/multicol.sty
new file mode 100644
index 0000000000..3a17442a04
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/ml/multicol.sty
@@ -0,0 +1,525 @@
+%%
+%% This is file `multicol.sty', generated
+%% on <1993/9/27> with the docstrip utility (2.0r).
+%%
+%% The original source files were:
+%%
+%% multicol.doc (with options: `style,check,marktrace')
+%%
+%% Copyright (C) 1989-1992 by Frank Mittelbach. All rights reserved.
+%%
+%% This file is part of the multicol package.
+%%
+%% IMPORTANT NOTICE:
+%%
+%% You are not allowed to change this file. You may however copy
+%% this file to a file with a different name and then change the copy
+%% if you obey the restrictions on file changes described in
+%% readme.mz.
+%%
+%% You are NOT ALLOWED to distribute this file alone. You are NOT
+%% ALLOWED to take money for the distribution or use of this file (or
+%% a changed version) except for a nominal charge for copying etc.
+%%
+%% You are allowed to distribute this file under the condition that
+%% it is distributed together with all files mentioned in readme.mz1.
+%%
+%% If you receive only some of these files from someone, complain!
+%%
+%% However, if these files are distributed by established suppliers
+%% as part of a complete TeX distribution, and the structure of the
+%% distribution would make it difficult to distribute the whole set
+%% of files, *those parties* are allowed to distribute only some of
+%% the files provided that it is made clear that the user will get a
+%% complete distribution-set upon request to that supplier (not me).
+%% Notice that this permission is not granted to the end user.
+%%
+%%
+%% For error reports in case of UNCHANGED versions see readme.mz
+%%
+%%
+\def\fileversion{v1.4m}
+\def\filedate{92/09/04}
+\def\docdate {92/09/04}
+
+%% \CheckSum{1101}
+%% \CharacterTable
+%% {Upper-case \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
+%% Lower-case \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
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%
+%% Style-option `multicol' to use with LaTeX v2.09
+%% Copyright (C) 1989-1992 Frank Mittelbach, all rights reserved.
+\@ifundefined{mult@cols}{}{\endinput}
+\typeout{Style option: `multicol'
+ \fileversion\space <\filedate> (FMi)}
+\typeout{English documentation
+ \@spaces\@spaces\space<\docdate> (FMi)}
+\def\multicols#1{\col@number#1\relax
+ \ifnum\col@number<\tw@
+ \@warning{Using `\number\col@number'
+ columns doesn't seem a good idea.^^J
+ I therefore use two columns instead}%
+ \col@number\tw@ \fi
+ \ifnum\col@number>5
+ \@warning{Current implementation doesn't
+ support more than five columns.^^J
+ I therefore use five columns instead}%
+ \col@number5 \fi
+ \@ifnextchar[\mult@cols{\mult@cols[]}}
+\def\mult@cols[#1]{\@ifnextchar[%
+ {\mult@@cols{#1}}%
+ {\mult@@cols{#1}[\premulticols]}}
+\def\mult@@cols#1[#2]{%
+ \par
+ \ifinner \@boxedmulticolstrue
+ \else
+ \ifnum \doublecol@number>\z@
+ \@boxedmulticolstrue
+ \fi
+ \fi
+ \ifnum\c@tracingmulticols>\z@
+ \typeout{^^J^^JStarting multicolumn
+ output with \the\col@number
+ \space columns%
+ \if@boxedmulticols\space
+ (boxed mode)\fi
+ \on@line:^^J}\fi
+ \enough@room{#2}%
+ {#1\par}\addvspace\multicolsep
+ \begingroup
+ \prepare@multicols
+ \if@boxedmulticols
+ \setbox\mult@box\vbox\bgroup
+ \penalty-\@M
+ \fi
+ \ignorespaces}
+\newif\if@boxedmulticols \@boxedmulticolsfalse
+\newbox\mult@box
+\def\enough@room#1{%
+ \if@boxedmulticols\else
+ \par
+ \bgroup\@nobreakfalse\addpenalty\z@\egroup
+ \page@free \pagegoal
+ \advance \page@free -\pagetotal
+ \ifnum \c@tracingmulticols>\z@
+ \typeout{Current page:}%
+ \message{\@spaces goal height=%
+ \the\pagegoal: used \the\pagetotal
+ \space -> free=\the\page@free}%
+ \typeout{\@spaces needed \the#1
+ (for \string#1)}\fi
+ \ifdim \page@free <#1\newpage \fi
+ \fi}
+\def\prepare@multicols{%
+ \multicol@leftmargin\@totalleftmargin
+ \@totalleftmargin\z@
+ \parshape\z@
+ \doublecol@number\col@number
+ \multiply\doublecol@number\tw@
+ \if@boxedmulticols
+ \let\l@kept@firstmark\kept@firstmark
+ \let\l@kept@botmark\kept@botmark
+ \global\let\kept@firstmark\@empty
+ \global\let\kept@botmark\@empty
+ \else
+ \nointerlineskip \null
+ \output{%
+ \global\setbox\partial@page\vbox
+ {%
+ \ifvoid\partial@page\else
+ \@latexerr{Error saving partial
+ page\on@line}%
+ {The part of the page before
+ the multicols environment was
+ nearly full with the result
+ that starting the environment
+ will produce an overfull
+ page. Some text may be lost!
+ Please increase \premulticols
+ either generally or for this
+ environment by specifying a
+ suitable value in the second
+ optional argument to the
+ multicols environment.}
+ \unvbox\partial@page
+ \box\last@line
+ \fi
+ \unvbox\@cclv
+ \global\setbox\last@line\lastbox
+ }%
+ \prep@keptmarks
+ \global\let\kept@topmark\firstmark
+ }\eject
+ \advance\@colroom-\ht\partial@page
+ \vsize\col@number\@colroom
+ \advance\vsize\c@collectmore\baselineskip
+ \output{\multi@column@out}%
+ \multiply\count\footins\col@number
+ \multiply\skip \footins\col@number
+ \reinsert@footnotes
+ \fi
+ \vbadness10001 \hbadness5000
+ \tolerance\multicoltolerance
+ \pretolerance\multicolpretolerance
+ \setemergencystretch\col@number\hsize
+ \set@floatcmds
+ \advance\baselineskip\multicolbaselineskip
+ \hsize\linewidth \advance\hsize\columnsep
+ \advance\hsize-\col@number\columnsep
+ \divide\hsize\col@number
+ \full@width\linewidth
+ \linewidth\hsize
+}
+\newdimen\multicol@leftmargin
+\def\endmulticols{\par
+ \if@boxedmulticols
+ \egroup
+ \setbox\@tempboxa\vsplit\mult@box to\z@
+ \balance@columns
+ \return@nonemptymark{first}\kept@firstmark
+ \return@nonemptymark{bot}\kept@botmark
+ \page@sofar
+ \global\let\kept@firstmark\l@kept@firstmark
+ \global\let\kept@botmark\l@kept@botmark
+ \ifnum\c@tracingmulticols>\tw@
+ \typeout{Restore kept marks to%
+ ^^J first: \meaning\kept@firstmark%
+ ^^J bot\space\space:
+ \meaning\kept@botmark }%
+ \fi
+ \else
+ \bgroup\@nobreakfalse\addpenalty\z@\egroup
+ \output{\balance@columns@out}\eject
+ \ifvbox\partial@page\unvbox\partial@page\fi
+ \global\let\kept@firstmark\@empty
+ \global\let\kept@botmark\@empty
+ \ifnum\c@tracingmulticols>\tw@
+ \typeout{Make kept marks empty}%
+ \fi
+ \fi
+ \@checkend{multicols}%
+ \endgroup
+ \if@boxedmulticols\else
+ \reinsert@footnotes
+ \fi
+ \global\c@unbalance\z@
+ \enough@room\postmulticols
+ \addvspace\multicolsep
+ \ifnum\c@tracingmulticols>\z@
+ \typeout{^^JEnding multicolumn
+ output%
+ \if@boxedmulticols
+ \space(boxed mode)\fi
+ .^^J^^J}\fi}
+\newcount\c@unbalance
+\newcount\c@collectmore
+\newcount\c@tracingmulticols
+\newcount\col@number
+\newcount\doublecol@number
+\newcount\multicoltolerance
+\newcount\multicolpretolerance
+\newdimen\full@width
+\newdimen\page@free
+\newdimen\premulticols
+\newdimen\postmulticols
+\newskip\multicolsep
+\newskip\multicolbaselineskip
+\newbox\partial@page
+\newbox\last@line
+\c@unbalance = 0
+\c@collectmore = 0
+\c@tracingmulticols = 0
+\col@number = 1
+\multicoltolerance = 9999
+\multicolpretolerance = -1
+\premulticols = 50pt
+\postmulticols= 20pt
+\multicolsep = 12pt plus 4pt minus 3pt
+\multicolbaselineskip=0pt
+\def\process@cols#1#2{\count@#1\relax
+ \loop #2%
+ \advance\count@\tw@
+ \ifnum\count@<\doublecol@number
+ \repeat}
+\def\page@sofar{%
+ \process@cols\z@{\wd\count@\hsize}%
+ \ifnum\c@tracingmulticols>\z@
+ \typeout{Column spec:
+ (\the\multicol@leftmargin\space -->
+ \the\full@width\space = \the\hsize
+ \space x \the\col@number)^^J}%
+ \fi
+\ifvmode\else\errmessage{Multicol Error}\fi
+ \moveright\multicol@leftmargin
+ \hbox to\full@width{%
+ \process@cols\tw@{\box\count@
+ \hss\vrule\@width\columnseprule\hss}%
+ \box\z@
+ \rlap{\phantom p}%
+}%
+}
+\def\reinsert@footnotes{\ifvoid\footins\else
+ \insert\footins{}\fi}
+\def\multi@column@out{%
+ \ifnum\outputpenalty <-\@Mi
+ \speci@ls \else
+ \splittopskip\topskip
+ \splitmaxdepth\maxdepth
+ \dimen@\@colroom
+ \divide\skip\footins\col@number
+ \ifvoid\footins \else
+ \advance\dimen@-\skip\footins
+ \advance\dimen@-\ht\footins \fi
+ \process@cols\tw@{\setbox\count@
+ \vsplit\@cclv to\dimen@
+ \set@keptmarks
+ \ifshr@nking
+ \setbox\count@\vbox to\dimen@
+ {\unvbox\count@\vfill}%
+ \fi
+ }%
+ \setbox\z@\vsplit\@cclv to\dimen@
+ \set@keptmarks
+ \ifshr@nking
+ \setbox\z@\vbox to\dimen@
+ {\unvbox\z@\vfill}%
+ \fi
+ \ifvoid\@cclv \else
+ \unvbox\@cclv
+ \penalty\outputpenalty
+ \ifvoid\footins\else
+ \@warning{I moved some lines to
+ the next page.^^J
+ \@spaces Footnotes on page
+ \thepage\space might be wrong}%
+ \fi
+ \ifnum \c@tracingmulticols>\thr@@
+ \hrule\allowbreak \fi
+ \fi
+ \ifx\@empty\kept@firstmark
+ \let\firstmark\kept@topmark
+ \let\botmark\kept@topmark
+ \else
+ \let\firstmark\kept@firstmark
+ \let\botmark\kept@botmark
+ \fi
+ \ifnum\c@tracingmulticols>\tw@
+ \typeout{Use kept top
+ \space\space mark:
+ `\meaning\kept@topmark'%
+ ^^JUse kept first mark:
+ `\meaning\kept@firstmark'%
+ ^^JUse kept bot
+ \space\space mark:
+ `\meaning\kept@botmark'%
+ ^^JProduce first mark:
+ `\meaning\firstmark'%
+ ^^JProduce bot
+ \space\space mark:
+ `\meaning\botmark'}%
+ \fi
+ \setbox\@cclv\vbox{\unvbox\partial@page
+ \page@sofar}%
+ \@makecol\@outputpage
+ \global\let\kept@topmark\botmark
+ \global\let\kept@firstmark\@empty
+ \global\let\kept@botmark\@empty
+ \ifnum\c@tracingmulticols>\tw@
+ \typeout{(Re)Init top
+ \space\space mark:
+ `\meaning\kept@topmark'}%
+ \fi
+ \global\@colroom\@colht
+ \process@deferreds
+ \@whilesw\if@fcolmade\fi{\@outputpage
+ \global\@colroom\@colht
+ \process@deferreds}%
+ \ifnum\c@tracingmulticols>\@ne
+ \typeout{Colroom: \the\@colht\space
+ after float space removed
+ = \the\@colroom }\fi
+ \global\vsize\col@number\@colroom
+ \global\advance\vsize
+ \c@collectmore\baselineskip
+ \fi}
+\def\speci@ls{%
+ \typeout{Floats and marginpars not
+ allowed inside `multicols'
+ environment!}%
+ \unvbox\@cclv\reinsert@footnotes
+ \xdef\@freelist{\@freelist\@currlist}%
+ \gdef\@currlist{}}
+\def\process@deferreds{%
+ \@floatplacement
+ \@tryfcolumn\@deferlist
+ \if@fcolmade\else
+ \begingroup
+ \let\@tempb\@deferlist
+ \gdef\@deferlist{}%
+ \let\@elt\@scolelt
+ \@tempb \endgroup
+ \fi}
+\newif\ifshr@nking
+\def\raggedcolumns{%
+ \@bsphack\shr@nkingtrue\@esphack}
+\def\flushcolumns{%
+ \@bsphack\shr@nkingfalse\@esphack}
+\def\balance@columns@out{%
+ \setbox\mult@box\vbox{\unvbox\@cclv}%
+ \balance@columns
+ \global\vsize\@colroom
+ \global\advance\vsize\ht\partial@page
+ \unvbox\partial@page
+ \return@nonemptymark{first}\kept@firstmark
+ \return@nonemptymark{bot}\kept@botmark
+ \page@sofar}
+\def\balance@columns{%
+ \setbox\mult@box\vbox to\ht\mult@box{%
+ \unvbox\mult@box
+ \remove@discardable@items
+ }%
+ \get@keptmarks\mult@box
+ \splittopskip\topskip
+ \splitmaxdepth\maxdepth
+ \@tempdima\ht\mult@box
+ \advance\@tempdima\dp\mult@box
+ \divide\@tempdima\col@number
+ \count@\@tempdima
+ \divide\count@\baselineskip
+ \dimen@\count@\baselineskip
+ \advance\dimen@\topskip
+ \ifdim \dimen@ >\@tempdima
+ \advance\dimen@-\baselineskip
+ \fi
+ \advance\dimen@\c@unbalance\baselineskip
+ \ifnum\c@tracingmulticols>\@ne
+ \typeout{Balance columns\on@line:
+ \ifnum\c@unbalance=\z@\else
+ (off balance=\number\c@unbalance)\fi}%
+ \fi
+ \ifnum\dimen@<\topskip
+ \ifnum\c@tracingmulticols>\@ne
+ \typeout{Start value
+ \the\dimen@ \space ->
+ \the\topskip \space (corrected)}%
+ \fi
+ \dimen@\topskip
+ \fi
+ \vbadness\@M \loop
+ {\process@cols\@ne{\global\setbox\count@
+ \box\voidb@x}}%
+ \global\setbox\@ne\copy\mult@box
+ {\process@cols\thr@@{%
+ \global\setbox\count@
+ \vsplit\@ne to\dimen@
+ }}%
+ \boxmaxdepth\maxdepth
+ \global\setbox\@ne\vbox{\unvbox\@ne}%
+ \ifnum\c@tracingmulticols>\@ne
+ \message{\@spaces First column
+ = \the\ht\thr@@}\fi
+ \ifshr@nking \global\setbox\thr@@
+ \vbox{\unvbox\thr@@}%
+ \ifnum\c@tracingmulticols>\@ne
+ \message{ after shrinking
+ \the\ht\thr@@}\fi\fi
+ \ifnum\c@tracingmulticols>\@ne
+ \message{<> last column =
+ \the\ht\@ne^^J}%
+ \fi
+ \ifdim\ht\@ne >\ht\thr@@
+ \advance\dimen@\p@
+ \repeat
+ \dimen@\ht\thr@@
+ \ifdim\dimen@>\@colroom
+ \dimen@\@colroom
+ \fi
+ \process@cols\z@{\@tempcnta\count@
+ \advance\@tempcnta\@ne
+ \setbox\count@\vbox to\dimen@
+ {\unvbox\@tempcnta
+ \ifshr@nking\vfill\fi}}%
+}
+\@ifundefined{emergencystretch}
+ {\newdimen\emergencystretch}{}
+\def\setemergencystretch#1#2{%
+ \emergencystretch 4pt
+ \multiply\emergencystretch#1}
+
+\def\set@floatcmds{%
+ \let\@dblfloat\@dbflt
+ \def\end@dblfloat{\par
+ \vskip\z@\egroup
+ \ifnum\@floatpenalty<\z@
+ \@cons\@deferlist\@currbox
+ \fi
+ \ifnum\@floatpenalty=-\@Mii
+ \@esphack
+ \fi}}
+\def\kept@topmark{{}{}}
+\let\kept@firstmark\@empty
+\let\kept@botmark\@empty
+\def\return@nonemptymark#1#2{%
+ \ifx#2\@empty
+ \else
+ \ifnum\c@tracingmulticols>\tw@
+ \typeout{Returned #1 mark: \meaning#2}%
+ \nobreak
+ \fi
+ \mark{#2}%
+ \nobreak
+ \fi}
+\def\get@keptmarks#1{%
+ \begingroup
+ \vbadness\@M
+ \setbox#1\copy#1%
+ \setbox#1\vsplit#1to\maxdimen
+ \set@keptmarks
+ \endgroup
+}
+\def\set@keptmarks{%
+ \ifx\kept@firstmark\@empty
+ \expandafter\gdef\expandafter
+ \kept@firstmark
+ \expandafter{\splitfirstmark}%
+ \ifnum\c@tracingmulticols>\tw@
+ \ifx\kept@firstmark\@empty\else
+ \typeout{Set kept first mark:
+ `\meaning\kept@firstmark'}%
+ \fi
+ \fi
+ \fi
+ \expandafter\def\expandafter\@tempa
+ \expandafter{\splitbotmark}%
+ \ifx\@tempa\@empty\else
+ \global\let\kept@botmark\@tempa
+ \ifnum\c@tracingmulticols>\tw@
+ \typeout{Set kept bot mark:
+ `\meaning\kept@botmark'}%
+ \fi
+ \fi}%
+\def\prep@keptmarks{%
+ \if@boxedmulticols \else
+ \get@keptmarks\partial@page
+ \fi}
+\def\remove@discardable@items{%
+ \unskip\unpenalty\unkern
+ \unskip\unpenalty\unkern
+ \unskip\unpenalty\unkern
+ \unskip\unpenalty\unkern
+}
+\endinput
+%%
+%% End of file `multicol.sty'.
diff --git a/obsolete/macros/latex209/contrib/ml/newdoc.sty b/obsolete/macros/latex209/contrib/ml/newdoc.sty
new file mode 100644
index 0000000000..581c985fae
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/ml/newdoc.sty
@@ -0,0 +1,65 @@
+%%
+%% This is file `newdoc.sty', generated
+%% on <1993/9/27> with the docstrip utility (2.0r).
+%%
+%% The original source files were:
+%%
+%% newdoc.doc
+%%
+%% Copyright (C) 1989-1992 by Frank Mittelbach. All rights reserved.
+%%
+%% This file is part of the doc package.
+%%
+%% IMPORTANT NOTICE:
+%%
+%% You are not allowed to change this file. You may however copy
+%% this file to a file with a different name and then change the
+%% copy if you obey the restrictions on file changes described in
+%% readme.mz.
+%%
+%% You are NOT ALLOWED to distribute this file alone. You are NOT
+%% ALLOWED to take money for the distribution or use of this file
+%% (or a changed version) except for a nominal charge for copying
+%% etc.
+%%
+%% You are allowed to distribute this file under the condition that
+%% it is distributed together with all files mentioned in
+%% readme.mz0.
+%%
+%% If you receive only some of these files from someone, complain!
+%%
+%% However, if these files are distributed by established suppliers
+%% as part of a complete TeX distribution, and the structure of the
+%% distribution would make it difficult to distribute the whole set
+%% of files, *those parties* are allowed to distribute only some of
+%% the files provided that it is made clear that the user will get
+%% a complete distribution-set upon request to that supplier (not
+%% me). Notice that this permission is not granted to the end
+%% user.
+%%
+%%
+%% For error reports in case of UNCHANGED versions see readme.mz
+%%
+%%
+
+%% \CheckSum{1}
+%% \CharacterTable
+%% {Upper-case \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
+%% Lower-case \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
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%
+\input{doc.sty}
+\endinput
+%%
+%% End of file `newdoc.sty'.
diff --git a/obsolete/macros/latex209/contrib/ml/places.sty b/obsolete/macros/latex209/contrib/ml/places.sty
new file mode 100644
index 0000000000..630cc580c1
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/ml/places.sty
@@ -0,0 +1,63 @@
+\def\belgium {\iflanguage{dutch} {Belgi\"e}
+ {\iflanguage{french} {La Belgique}
+ {\iflanguage{german} {Belgien}
+ {\iflanguage{greek} {B'elgion}
+ {\iflanguage{russian} {Bel{\cprime}gi{\ya}}
+ {Belgium}}}}}}
+\def\ethiopia {\iflanguage{dutch} {Ethiopi\"e}
+ {\iflanguage{french} {L'\'Ethiopie}
+ {\iflanguage{german} {\"Athiopien}
+ {\iflanguage{greek} {>Aijiop'ia}
+ {\iflanguage{russian} {\Efiopi{\ya}}
+ {Ethiopia}}}}}}
+\def\germany {\iflanguage{dutch} {Duitsland}
+ {\iflanguage{french} {L'Alemagne}
+ {\iflanguage{german} {Deutschland}
+ {\iflanguage{greek} {German'ia}
+ {\iflanguage{russian} {Germani{\ya}}
+ {Germany}}}}}}
+\def\holland {\iflanguage{dutch} {Nederland}
+ {\iflanguage{french} {Les Pays Bas}
+ {\iflanguage{german} {Die Niederlande}
+ {\iflanguage{greek} {K'atw Q~wrai}
+ {\iflanguage{russian} {Niderlandy}
+ {The Netherlands}}}}}}
+\def\ireland {\iflanguage{dutch} {Ierland}
+ {\iflanguage{french} {L'Irlande}
+ {\iflanguage{german} {Irland}
+ {\iflanguage{greek} {>Irland'ia}
+ {\iflanguage{russian} {Irlandi{\ya}}
+ {Ireland}}}}}}
+\def\israel {\iflanguage{dutch} {Isra\"el}
+ {\iflanguage{french} {L'Israel}
+ {\iflanguage{greek} {>Isra'hl}
+ {\iflanguage{russian} {Izrail{\cprime}}
+ {Israel}}}}}
+\def\italy {\iflanguage{dutch} {Itali\"e}
+ {\iflanguage{french} {L'Italie}
+ {\iflanguage{german} {Italien}
+ {\iflanguage{greek} {>Ital'ia}
+ {\iflanguage{russian} {Itali{\ya}}
+ {Italy}}}}}}
+\def\kenya {\iflanguage{german} {Kenia}
+ {\iflanguage{greek} {K'enia}
+ {\iflanguage{russian} {Ken{\ya}}
+ {Kenya}}}}
+\def\rwanda {\iflanguage{dutch} {Rwanda}
+ {\iflanguage{french} {Le Rwanda}
+ {\iflanguage{greek} {Rou'anda}
+ {Rwanda}}}}
+\def\tanzania {\iflanguage{french} {La Tanzanie}
+ {\iflanguage{german} {Tansania}
+ {\iflanguage{greek} {Tanzan'ia}
+ {Tanzania}}}}
+\def\usa {\iflanguage{dutch} {Verenigde Staten}
+ {\iflanguage{french} {Les \'Etats-Unies}
+ {\iflanguage{german} {Vereinigte Staaten}
+ {\iflanguage{greek} {<Hnwm'enai Polite~iai}
+ {\iflanguage{russian} {Ob{\cdprime}edin\"ennye Gosudarstva}
+ {U.S.A.}}}}}}
+\def\zaire {\iflanguage{dutch} {Za\"{\i}re}
+ {\iflanguage{greek} {Za"ire}
+ {\iflanguage{russian} {Zaire}
+ {Zaire}}}}
diff --git a/obsolete/macros/latex209/contrib/ml/plainml.bst b/obsolete/macros/latex209/contrib/ml/plainml.bst
new file mode 100644
index 0000000000..359c26d60d
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/ml/plainml.bst
@@ -0,0 +1,1272 @@
+% BibTeX bibliography style `plainml'
+ % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
+ % Copyright (C) 1991, all rights reserved.
+ % Copying of this file is authorized only if either
+ % (1) you make absolutely no changes to your copy, including name, or
+ % (2) if you do make changes, you name it something other than
+ % btxbst.doc, plain(ml).bst, unsrt.bst, alpha.bst, and abbrv.bst.
+ % This restriction helps ensure that all standard styles are identical.
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ isbn
+ journal
+ key
+ language
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ abstract
+ school
+ series
+ title
+ type
+ volume
+ year
+ }
+ {}
+ { label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ "\newblock " write$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.bibitem}
+{newline$
+ language empty$
+ {"\bibitem{" write$
+ cite$ write$
+ "}" write$}
+ {"\bibitem{" write$
+ cite$ write$
+ "}" write$
+ language write$}
+ if$
+ newline$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ newline$
+}
+
+FUNCTION {abstract.entry}
+{ add.period$
+ write$
+ newline$
+ "\makeabstract{" write$
+ abstract write$
+ "}" write$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "{\em " swap$ * "}" * }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " et~al." * }
+ { " \and " * t * } % <----------
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names }
+ if$
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+ { ", \editors" * } % <----------
+ { ", \editor" * } % <----------
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title "t" change.case$ }
+ if$
+}
+
+FUNCTION {format.isbn}
+{ isbn empty$
+ { "" }
+ { "{\sc isbn}~" isbn * }
+ if$
+}
+
+FUNCTION {format.conference}
+{ organization empty$
+ { "\conference\atplace " address * }
+ { "\conference\Of " organization * " \atplace " address * * }
+ if$
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+ month
+ }
+ if$
+ }
+ { month empty$
+ 'year
+ { month " " * year * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "\volume~" volume * %% tie.or.space.connect % <---------- ff.
+ series empty$
+ 'skip$% { ", \volume" } %
+ { " \of " * series emphasize * }%{ ", " series emphasize * ", \volume" * } %
+ if$
+ "volume and number" number either.or.check% volume tie.or.space.connect %
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "number" }
+ { "Number" }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " \in " * series * } % \In ?
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { edition "1" =
+ { "\first" } % Tweede
+ { edition "2" =
+ { "\second" }
+ { edition "3" =
+ { "\third" }
+ { "\higherthenthird" edition * }
+ if$
+ }
+ if$
+ }
+ if$
+ % output.state mid.sentence =
+ % { "l" change.case$ " \edition" * } % <----------
+ % { "t" change.case$ " \edition" * } % <----------
+ % if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "\pages" pages n.dashify tie.or.space.connect } % <----------
+ { "\page" pages tie.or.space.connect } % <----------
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ number empty$
+ 'skip$
+ { "(" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ":" * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "\chaptername" } % <----------
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { "\from " booktitle emphasize * } % <---------- Uit !
+ { "\from " format.editors * ", " * booktitle emphasize * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "\technicalreport" } % <----------
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "\from {\em " journal * "\/}" * } % <---------- In !
+ if$
+ }
+ { "\from " key * } % <---------- In !
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et~al." * }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et~al." * }
+ { " \and " * editor #2 "{vv~}{ll}" format.name$ * } % <----------
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "\from " % <---------- In !
+ }
+ { "\volume~" volume %% tie.or.space.connect % <----------
+ " \of " * % <----------
+ }
+ if$
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "{\em " * series * "\/}" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "\from {\em " booktitle * "\/}" * } % <----------
+ if$
+ }
+ { "\from " key * } % <----------
+ if$
+ }
+ { "\from " format.crossref.editor * } % <----------
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { journal emphasize "journal" output.check
+ format.vol.num.pages output
+ format.date "year" output.check
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ abstract empty$ %%
+ { fin.entry } %%
+ { abstract.entry } %%
+ if$ %%
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ format.isbn "isbn" output.check
+ new.block
+ note output
+ abstract empty$ %%
+ { fin.entry } %%
+ { abstract.entry } %%
+ if$ %%
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ new.block
+ format.title "title" output.check
+ howpublished address new.block.checkb
+ howpublished output
+ address output
+ format.date output
+ format.isbn "isbn" output.check
+ new.block
+ note output
+ abstract empty$ %%
+ { fin.entry } %%
+ { abstract.entry } %%
+ if$ %%
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ abstract empty$ %%
+ { fin.entry } %%
+ { abstract.entry } %%
+ if$ %%
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ note output
+ abstract empty$ %%
+ { fin.entry } %%
+ { abstract.entry } %%
+ if$ %%
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ address empty$
+ { organization publisher new.sentence.checkb
+ organization output
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ organization output
+ publisher output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ abstract empty$ %%
+ { fin.entry } %%
+ { abstract.entry } %%
+ if$ %%
+}
+
+FUNCTION {conference}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ address empty$
+ { organization publisher new.sentence.checkb
+ organization output
+ publisher output
+ format.date "year" output.check
+ }
+ { format.conference "conference" output.check
+ format.date "year" output.check
+ new.sentence
+ publisher output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ abstract empty$ %%
+ { fin.entry } %%
+ { abstract.entry } %%
+ if$ %%
+}
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization empty$
+ 'skip$
+ { organization output.nonnull
+ address output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ { address new.block.checka
+ address output
+ }
+ 'skip$
+ if$
+ }
+ { organization address new.block.checkb
+ organization output
+ address output
+ }
+ if$
+ format.edition output
+ format.date output
+ new.block
+ note output
+ abstract empty$ %%
+ { fin.entry } %%
+ { abstract.entry } %%
+ if$ %%
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ "\masters" format.thesis.type output.nonnull % <----------
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ abstract empty$ %%
+ { fin.entry } %%
+ { abstract.entry } %%
+ if$ %%
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished output
+ format.date output
+ new.block
+ note output
+ abstract empty$ %%
+ { fin.entry } %%
+ { abstract.entry } %%
+ if$ %%
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.btitle "title" output.check
+ new.block
+ "\phdthesis" format.thesis.type output.nonnull % <----------
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ format.isbn "isbn" output.check
+ new.block
+ note output
+ abstract empty$ %%
+ { fin.entry } %%
+ { abstract.entry } %%
+ if$ %%
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output }
+ { format.editors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { editor empty$
+ { publisher new.sentence.checka }
+ { organization publisher new.sentence.checkb
+ organization output
+ }
+ if$
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ }
+ if$
+ new.block
+ note output
+ abstract empty$ %%
+ { fin.entry } %%
+ { abstract.entry } %%
+ if$ %%
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ abstract empty$ %%
+ { fin.entry } %%
+ { abstract.entry } %%
+ if$ %%
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ note "note" output.check
+ address output %% ! %%
+ format.date output
+ abstract empty$ %%
+ { fin.entry } %%
+ { abstract.entry } %%
+ if$ %%
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"\jan"} % <---------- ff.
+MACRO {feb} {"\feb"}
+MACRO {mar} {"\mar"}
+MACRO {apr} {"\apr"}
+MACRO {may} {"\may"}
+MACRO {jun} {"\jun"}
+MACRO {jul} {"\jul"}
+MACRO {aug} {"\aug"}
+MACRO {sep} {"\sep"}
+MACRO {oct} {"\oct"}
+MACRO {nov} {"\nov"}
+MACRO {dec} {"\dec"}
+
+MACRO {acmcs} {"{\sc Acm} Computing Surveys"}
+MACRO {acta} {"Acta Informatica"}
+MACRO {cacm} {"Communications of the {\sc Acm}"}
+MACRO {ibmjrd} {"{\sc Ibm} Journal of Research and Development"}
+MACRO {ibmsj} {"{\sc Ibm} Systems Journal"}
+MACRO {ieeese} {"{\sc Ieee} Transactions on Software Engineering"}
+MACRO {ieeetc} {"{\sc Ieee} Transactions on Computers"}
+MACRO {ieeetcad}
+ {"{\sc Ieee} Transactions on Computer-Aided Design of Integrated Circuits"}
+MACRO {ipl} {"Information Processing Letters"}
+MACRO {jacm} {"Journal of the {\sc Acm}"}
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+MACRO {scp} {"Science of Computer Programming"}
+MACRO {sicomp} {"{\sc Siam} Journal on Computing"}
+MACRO {tocs} {"{\sc Acm} Transactions on Computer Systems"}
+MACRO {tods} {"{\sc Acm} Transactions on Database Systems"}
+MACRO {tog} {"{\sc Acm} Transactions on Graphics"}
+MACRO {toms} {"{\sc Acm} Transactions on Mathematical Software"}
+MACRO {toois} {"{\sc Acm} Transactions on Office Information Systems"}
+MACRO {poplas} {"{\sc Acm} Transactions on Programming Languages and Systems"}
+MACRO {tcs} {"Theoretical Computer Science"}
+MACRO {Dokl} {"{\cyr Doklady Akademij Nauk SSSR}"}
+MACRO {Usp} {"{\cyr Uspe\ch i Akademij Nauk SSSR}"}
+MACRO {FizElJa}
+ {"{\cyr Fizika {\E}lementarni\ch\ {\Cz}astic i Atomnogo {\Ja}dra}"}
+MACRO {PiZETF} {"{\cyr Pis{\mz}ma v {\Z}\E TF}"}
+MACRO {ZETF}
+ {"{\cyr {\Z}urnal \Eksperimental{\mz}noj i Teoreti{\cz}eskoj Fiziki}"}
+
+MACRO {AcP} {"Acta Physica"}
+MACRO {AcPA} {"Acta Physica Austriaca"}
+MACRO {AcPP} {"Acta Physica Polonica"}
+MACRO {AdP} {"Advances in Physics"}
+MACRO {AdNP} {"Advances in Nuclear Physics"}
+MACRO {AmJP} {"American Journal of Physics"}
+MACRO {ANA} {"Apostolate to the Nomads of {\sc Amecea}"}
+MACRO {AnPDu} {"Annalen der Physik (Leipzig)"}
+MACRO {AnPFr} {"Annales de Physique (\paris)"}
+MACRO {AnPNY} {"Annals of Physics (\ny)"}
+MACRO {ARevNS} {"Annual Review of Nuclear Science"}
+MACRO {ADNDT} {"Atomic Data and Nuclear Data Tables"}
+MACRO {AusJP} {"Australian Journal of Physics"}
+MACRO {CanJP} {"Canadian Journal Physics"}
+MACRO {CPC} {"Computer Physics Communications"}
+MACRO {EJP} {"European Journal of Physics"}
+MACRO {EPL} {"Europhysics Letters"}
+MACRO {FBS} {"Few Body Systems"}
+MACRO {FBSSup} {"Few Body Systems Supplement"}
+MACRO {FortP} {"Fortschritte der Physik"}
+MACRO {HePA} {"Helvetica Physica Acta"}
+MACRO {IEEE} {"{\sc Ieee} Transactions"}
+MACRO {IJMP} {"International Journal of Modern Physics"}
+MACRO {JETP} {"{\sc Jetp}"}
+MACRO {JETPL} {"{\sc Jetp} Letters"}
+MACRO {JaFi} {"{\cyr {\Ja}derna\ja Fizika}"}
+MACRO {JPFr} {"Journal de Physique (Paris)"}
+MACRO {JP} {"Journal of Physics"}
+MACRO {JPSJ} {"Journal of the Physical Society of Japan"}
+MACRO {JPSJSup}{"Journal of the Physical Society of Japan Supplement"}
+MACRO {MPL} {"Modern Physics Letters"}
+MACRO {NCim} {"Il Nuovo Cimento"}
+MACRO {NDS} {"Nuclear Data Sheets"}
+MACRO {NP} {"Nuclear Physics"}
+MACRO {PL} {"Physics Letters"}
+MACRO {PRSLon} {"Proceedings of the Royal Society of London"}
+MACRO {PR} {"Physical Review"}
+MACRO {PRL} {"Physical Review Letters"}
+MACRO {PRep} {"Physics Reports"}
+MACRO {PScr} {"Physica Scripta"}
+MACRO {PToday} {"Physics Today"}
+MACRO {PTP} {"Progress of Theoretical Physics"}
+MACRO {RMP} {"Reviews of Modern Physics"}
+MACRO {ScAm} {"Scientific American"}
+MACRO {SSin} {"Scienta Sinica"}
+MACRO {SovJNP} {"Soviet Journal of Nuclear Physics"}
+MACRO {SovJPN} {"Soviet Journal of Particles and Nuclei"}
+MACRO {SovPDo} {"Soviet Physics Doklady"}
+MACRO {SovPUs} {"Soviet Physics Uspekhi"}
+MACRO {STS} {"Bulletin of Science, Technology and Social Affairs"}
+MACRO {ZfN} {"Zeitschrift f{\H{u}}r Naturforschung"}
+MACRO {ZfP} {"Zeitschrift f{\H{u}}r Physik"}
+
+MACRO {KUN} {"Katholieke Universiteit Nij\-me\-gen"}
+MACRO {RUU} {"Rijksuniversiteit te Utrecht"}
+MACRO {UvA} {"Universiteit van Amsterdam"}
+MACRO {RUG} {"Rijksuniversiteit te Groningen"}
+MACRO {RUL} {"Rijksuniversiteit te Leiden"}
+MACRO {VU} {"Vrije Universiteit"}
+MACRO {TUD} {"Technische Universiteit Delft"}
+
+MACRO {revised2} {"\secondrevised"}
+MACRO {revised3} {"\thirdrevised"}
+MACRO {revised4} {"\fourthrevised"}
+MACRO {revised5} {"\fifthrevised"}
+MACRO {revised6} {"\sixhrevised"}
+MACRO {revised7} {"\seventhrevised"}
+MACRO {revised8} {"\eightthrevised"}
+MACRO {revised9} {"\ninthrevised"}
+
+MACRO {tbp} {"\tbp"} % <----------
+MACRO {own} {"\ownedition"}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+% s num.names$ 'numnames :=
+% numnames 'namesleft :=
+% { namesleft #0 > }
+% { nameptr #1 >
+% { " " * }
+% 'skip$
+% if$
+ s nameptr "{ll{ } }{vv{ }}{ f{ }}{ jj{ }}" format.name$ 't := % s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
+% nameptr numnames = t "others" = and
+% { "et al" * }
+% {
+t sortify * %}
+% if$
+% nameptr #1 + 'nameptr :=
+% namesleft #1 - 'namesleft :=
+% }
+% while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {presort}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label }
+
+INTEGERS { number.label longest.label.width }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #1 'number.label :=
+ #0 'longest.label.width :=
+}
+
+FUNCTION {longest.label.pass}
+{ number.label int.to.str$ 'label :=
+ number.label #1 + 'number.label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {longest.label.pass}
+
+FUNCTION {begin.bib}
+{ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "\begin{thebibliography}{" longest.label * "}" * write$ newline$
+ "\addcontentsline{toc}{chapter}{\bibname}" write$ newline$
+ "\def\makeabstract#1{\openin1{#1}\ifeof1 \relax" write$ newline$
+ "\else\closein1 \relax\input{#1}\fi}" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+ "\end{thebibliography}" write$ newline$
+}
+
+EXECUTE {end.bib}
diff --git a/obsolete/macros/latex209/contrib/ml/readme b/obsolete/macros/latex209/contrib/ml/readme
new file mode 100644
index 0000000000..9657ae14c4
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/ml/readme
@@ -0,0 +1,24 @@
+This is ml.sty, a multilingual style option to generate documents in
+LaTeX built on babel.sty (so you need babel.sty babel.switch and
+babel.com) but which does much more translation than babel does. It is
+still in the process of being developed. But I do not think I shall be
+working on it for quite some time since I am leaving for Africa soon.
+It is not yet compatible with LaTeX2e. Run docstrip on ml.doc. give
+ml as your first option in your document. Select a language with the
+command \selectlanguage{}. More information in the file mldoc.tex
+
+Some things to think about:
+
+I want the diaeresis to be closer to the character ("i)
+
+I want parallel columns
+
+I want compatability with LaTeX2e
+
+have fun
+
+Hans Stoks
+somewhere in Africa
+(E-mail: sanders@studs.sci.kun.nl --- Note: This is my brother, who
+posted the package on the net for me. *Don't* flood him with mail about
+ml.sty, as he doesn't know much about it.)
diff --git a/obsolete/macros/latex209/contrib/ml/rgreek.sty b/obsolete/macros/latex209/contrib/ml/rgreek.sty
new file mode 100644
index 0000000000..982fc6c514
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/ml/rgreek.sty
@@ -0,0 +1,129 @@
+\def\fileversion{v1.1}
+\def\filedate{94/09/16}
+\def\docdate {94/09/16}
+
+\expandafter\ifx\csname dategreek\endcsname\else\endinput\fi
+\expandafter\ifx\csname selectfont\endcsname
+ \typeout{The `rgreek' style option can only be used
+ ^^Jwith the new font selection scheme.}\endinput\fi
+ \openin1 rgreekmac \ifeof1
+ \typeout{! I can't find file `rgreekmac.tex'.}
+ \else\closein1 \relax\input{rgreekmac}\fi
+\typeout{Style Option: `rgreek'
+ \fileversion\space <\filedate>}
+\typeout{English Documentation:
+ \@spaces\space <\docdate>}
+
+\new@fontshape{greek}{m}{n}{%
+ <5>grreg8 at5pt%
+ <6>grreg8 at5.6pt%
+ <7>grreg8 at7pt%
+ <8>grreg8%
+ <9>grreg9%
+ <10>rgrrg10%
+ <11>rgrrg10 at10.95pt%
+ <12>rgrrg10 at12pt%
+ <14>rgrrg10 at14.4pt%
+ <17>rgrrg10 at17.28pt%
+ <20>rgrrg10 at20.74pt
+ <25>rgrrg10 at24.88pt}{}%
+\new@fontshape{greek}{m}{tt}{%
+ <5>grtt8 at5pt%
+ <6>grtt8 at5.6pt%
+ <7>grtt8 at7pt%
+ <8>grtt8%
+ <9>grtt9%
+ <10>grtt10%
+ <11>grtt10 at10.95pt%
+ <12>grtt10 at12pt%
+ <14>grtt10 at14.4pt%
+ <17>grtt10 at17.28pt%
+ <20>grtt10 at20.74pt%
+ <25>grtt10 at24.88pt}{}%
+\new@fontshape{greek}{m}{sl}{%
+ <5>rgrsl10 at5pt%
+ <6>rgrsl10 at5.6pt%
+ <7>rgrsl10 at7pt%
+ <8>rgrsl10 at8pt%
+ <9>rgrsl10 at9pt%
+ <10>rgrsl10%
+ <11>rgrsl10 at10.95pt%
+ <12>rgrsl10 at12pt%
+ <14>rgrsl10 at14.4pt%
+ <17>rgrsl10 at17.28pt%
+ <20>rgrsl10 at20.74pt%
+ <25>rgrsl10 at24.88pt}{}%
+\new@fontshape{greek}{m}{it}{%
+ <5>rgrti10 at5pt%
+ <6>rgrti10 at5.6pt%
+ <7>rgrti10 at7pt%
+ <8>rgrti10 at8pt%
+ <9>rgrti10 at9pt%
+ <10>rgrti10%
+ <11>rgrti10 at10.95pt%
+ <12>rgrti10 at12pt%
+ <14>rgrti10 at14.4pt%
+ <17>rgrti10 at17.28pt%
+ <20>rgrti10 at20.74pt%
+ <25>rgrti10 at24.88pt}{}%
+\new@fontshape{greek}{m}{sc}{%
+ <5>rgrsc10 at5pt%
+ <6>rgrsc10 at5.6pt%
+ <7>rgrsc10 at7pt%
+ <8>rgrsc10 at8pt%
+ <9>rgrsc10 at9pt%
+ <10>rgrsc10%
+ <11>rgrsc10 at10.95pt%
+ <12>rgrsc10 at12pt%
+ <14>rgrsc10 at14.4pt%
+ <17>rgrsc10 at17.28pt%
+ <20>rgrsc10 at20.74pt%
+ <25>rgrsc10 at24.88pt}{}%
+\new@fontshape{greek}{bf}{n}{%
+ <5>grbld8 at5pt%
+ <6>grbld8 at5.6pt%
+ <7>grbld8 at7pt%
+ <8>grbld8%
+ <9>grbld9%
+ <10>rgrbf10%
+ <11>rgrbf10 at10.95pt%
+ <12>rgrbf10 at12pt%
+ <14>rgrbf10 at14.4pt%
+ <17>rgrbf10 at17.28pt%
+ <20>rgrbf10 at20.74pt%
+ <25>rgrbf10 at24.88pt}{}%
+\extra@def{greek}{}{}
+
+\def\graffiti{\protect\pgraffiti}
+\def\pgraffiti{\family{greek}\series{c}\shape{sl}\size{9}{10pt}\selectfont}
+\def\@makefnmark{\raise 1ex\hbox{\scriptsize\@thefnmark}}
+\gdef\pel{\raisebox{.6ex}{.}\ } % punctus elevatus
+
+\newif\ifgreek\greekfalse
+\def\greekmode{%
+\catcode`\<=13%
+\catcode`\>=13%
+\catcode`\'=13%11
+\catcode`\`=13%11
+\catcode`\~=11%
+\catcode`\"=11%
+\catcode`\|=11%
+\lccode`\<=`\<%
+\lccode`\>=`\>%
+\lccode`\'=`\'%
+\lccode`\`=`\`%
+\lccode`\~=`\~%
+\lccode`\"=`\"%
+\lccode`\|=`\|%
+\family{greek}\selectfont%
+\ifx\keybgreek\undefined\relax\else\keybgreek\fi\greektrue}
+\def\begingreek{\bgroup\greekmode}
+\def\endgreek{\egroup}
+
+\let\math=$
+{\catcode`\$=13
+\gdef\greekdelims{\catcode`\$=13
+\def${\ifgreek\endgreek\else\begingreek\fi}
+\def\display{\math\math}\def\enddisplay{\math\math}}}
+
+\endinput
diff --git a/obsolete/macros/latex209/contrib/ml/rgreekma.tex b/obsolete/macros/latex209/contrib/ml/rgreekma.tex
new file mode 100644
index 0000000000..54c3fb4770
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/ml/rgreekma.tex
@@ -0,0 +1,151 @@
+\def\lt{<}
+\def\gt{>}
+\newcount\fontnumber
+\fontnumber=0
+\newif\ifoneaccent\oneaccenttrue
+\def\ifnextchar#1#2#3{\let\tempe #1\def\tempa{#2}\def\tempb{#3}\futurelet
+ \tempc\ifnch}
+\def\ifnch{\ifx\tempc\tempe\let\tempd\tempa\else\let\tempd\tempb\fi\tempd}
+\def\gobble#1{}
+\def\greekmode{%
+\catcode`\<=13%
+\catcode`\>=13%
+\catcode`\'=13%11
+\catcode`\`=13%
+\catcode`\~=11%
+\catcode`\"=13%
+\lccode`\<=`\<%
+\lccode`\>=`\>%
+\lccode`\'=`\'%
+\lccode`\~=`\~%
+\lccode`\"=`\"%
+\def\rg{\fontnumber=1\tengr}%
+\def\sl{\fontnumber=2\tengrsl}%
+\def\it{\fontnumber=3\tengrit}%
+\def\bf{\fontnumber=4\tengrbf}%
+\def\smc{\fontnumber=5\tengrsmc}%
+\def\I##1{\setbox0\hbox{##1}\ifdim\ht0=1ex\accent\lq174 ##1%
+ \else{\ooalign{\hidewidth\char\lq174\hidewidth\crcr\unhbox0}}\fi}}%
+\newcount\vwl
+\newcount\acct
+{
+ \greekmode
+ \gdef"{\ifnextchar '{\expandafter\diaeresisacute\gobble}{\accent\lq\"}}
+ \gdef\diaeresisacute#1{\accent\rq043 #1}
+ \gdef`{'}
+}
+
+\newif\ifgreek\greekfalse
+
+\def\begingreek{\bgroup\font\tengr=rgrrg10\font\tengrsl=rgrsl10%
+\font\tengrbf=rgrbf10\font\tengrit=rgrti10\font\tengrsmc=rgrsc10%
+\greektrue\greekmode\rg}
+\def\beginmgreek{\bgroup\font\tengr=mrgrrg10\font\tengrsl=mrgrsl10%
+\font\tengrbf=mrgrbf10\font\tengrit=mrgrti10\font\tengrsmc=rgrsc10%
+\greektrue\greekmode\rg}
+\def\endgreek{\egroup}
+\def\endmgreek{\egroup}
+\def\monotoniko{%
+\font\tengr=mrgrrg10\font\tengrsl=mrgrsl10%
+\font\tengrbf=mrgrbf10\font\tengrit=mrgrti10%
+\ifnum\fontnumber=5\smc%
+ \else\ifnum\fontnumber=4\bf%
+ \else\ifnum\fontnumber=3\it%
+ \else\ifnum\fontnumber=2\sl%
+ \else\rg%
+ \fi%
+ \fi%
+ \fi%
+\fi%
+}
+\def\polutoniko{%
+\font\tengr=rgrrg10\font\tengrsl=rgrsl10%
+\font\tengrbf=rgrbf10\font\tengrit=rgrti10%
+\ifnum\fontnumber=5\smc%
+ \else\ifnum\fontnumber=4\bf%
+ \else\ifnum\fontnumber=3\it%
+ \else\ifnum\fontnumber=2\sl%
+ \else\rg%
+ \fi%
+ \fi%
+ \fi%
+\fi%
+}
+\let\math=$%
+{\catcode`\$=13%
+\gdef\greekdelims{\catcode`\$=13%
+\def${\ifgreek\endgreek\else\begingreek\fi}
+\def\display{\math\math}\def\enddisplay{\math\math}}}
+\def\grave#1{{\edef\next{\the\font}\smc\accent\rq001\next#1}}
+\def\roughgrave#1{{\edef\next{\the\font}\smc\accent\rq002\next#1}}
+\def\smoothgrave#1{{\edef\next{\the\font}\smc\accent\rq003\next#1}}
+\def\diaeresisgrave#1{{\edef\next{\the\font}\smc\accent\rq004\next#1}}
+\def\diaeresiscircumflex#1{{\edef\next{\the\font}\smc\accent\rq005\next#1}}
+\def\breve#1{{\edef\next{\the\font}\smc\accent\rq006\next#1}}
+\def\macron#1{{\edef\next{\the\font}\smc\accent\rq007\next#1}}
+\def\rhorough{{\tengrsmc
+\ifnum\fontnumber=5\char\rq162
+ \else\ifnum\fontnumber=4\char\rq016
+ \else\ifnum\fontnumber=3\char\rq014
+ \else\ifnum\fontnumber=2\char\rq012
+ \else\char\rq010
+ \fi
+ \fi
+ \fi
+\fi
+}}
+\def\rhosmooth{{\tengrsmc
+\ifnum\fontnumber=5\char\rq162
+ \else\ifnum\fontnumber=4\char\rq017
+ \else\ifnum\fontnumber=3\char\rq015
+ \else\ifnum\fontnumber=2\char\rq013
+ \else\char\rq011
+ \fi
+ \fi
+ \fi
+\fi
+}}
+\def\digamma{{\smc\char\rq135}}
+\def\smallDigamma{{\smc\char\rq140}}
+\def\Digamma{{\tengrsmc
+\ifnum\fontnumber=5\char\rq021
+ \else\ifnum\fontnumber=4\char\rq027
+ \else\ifnum\fontnumber=3\char\rq025
+ \else\ifnum\fontnumber=2\char\rq023
+ \else\char\rq021
+ \fi
+ \fi
+ \fi
+\fi
+}}
+\def\vardigamma{{\tengrsmc
+\ifnum\fontnumber=5\char\rq020
+ \else\ifnum\fontnumber=4\char\rq026
+ \else\ifnum\fontnumber=3\char\rq024
+ \else\ifnum\fontnumber=2\char\rq022
+ \else\char\rq020
+ \fi
+ \fi
+ \fi
+\fi
+}}
+\def\understroke{{\smc\char\rq046}}
+\def\overstroke{{\smc\char\rq044}}
+\def\sanpi{{\smc\char\rq136}}
+\def\Sanpi{{\smc\char\rq137}}
+\def\qoppa{{\smc\char\rq133}}
+\def\varqoppa{{\smc\char\rq134}}
+\def\Qoppa{{\smc\char\rq103}}
+\def\Tao{{\smc\char\rq177}}
+\def\ssh{\breve{s}}\def\SSH{\breve{S}}
+\def\dz{\breve{z}}\def\DZ{\breve{Z}}
+\def\psh{\breve{y}}\def\PSH{\breve{Y}}
+\def\ksh{\breve{x}}\def\KSH{\breve{X}}
+\def\inviota{{\smc\char\rq126}}
+\def\grMF{{\smc\char\rq030\char\rq031\char\rq032\char\rq033}\-{\smc%
+\char\rq034\char\rq036\char\rq037\char\rq032}}
+\def\MF{{\smc\char\rq030\char\rq031\char\rq032\char\rq033}\-{\smc%
+\char\rq040\char\rq036\char\rq037\char\rq032}}
+
+\endinput
+
diff --git a/obsolete/macros/latex209/contrib/ml/russian.tex b/obsolete/macros/latex209/contrib/ml/russian.tex
new file mode 100644
index 0000000000..c2a7f8e686
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/ml/russian.tex
@@ -0,0 +1,176 @@
+%%
+%% This is file `russian.tex'
+%%
+\def\filename{russian.tex}
+\def\fileversion{1.1}
+\def\filedate{16 sept 1994}
+\def\docdate {}
+
+% \ifundefined{daterussian} or \daterussian=\relax
+\expandafter\ifx\csname daterussian\endcsname\endinput
+% \then go ahead \else do nothing
+\else \relax \fi
+\ifx\undefined\l@russian
+ \message{!! The language `Russian' doesn't have hyphenation patterns.}
+ \message{!! I will use the patterns loaded for \string\language=0 instead.}
+ \adddialect\l@russian0\fi
+\gdef\daterussian{\def\today{\number\day ogo\space\ifcase\month\or
+ {\ya}nvar{\ya}\or Fevral{\ya}\or Marta\or Aprel{\ya}\or Ma{\ya}\or
+ i{\yu}n{\ya}\or I{\yu}l{\ya}\or Avgusta\or Sent{\ya}br{\ya}\or
+ Okt{\ya}br{\ya}\or No{\ya}br{\ya}\or Dekabr{\ya}\fi
+ \space\number\year}}
+
+\gdef\russianedition{\fhyph}
+\ifx\fhyph\undefined\gdef\fhyph{\relax}\fi
+\gdef\captionsrussian{\fhyph%
+\def\dashes{---}%
+\def\leftquotes{\ouvreguillemet\everypar={\ouvreguillemet\ }\,}%
+\def\rightquotes{\,\fermeguillemet\everypar={}}%
+\def\presentname{Prisustvu{\yu\shch}ie:}%
+\def\notpresentname{Otsustvu{\yu\shch}ie:}%
+\def\agendaname{Slu{\zh}ebnik}%
+\def\openname{Otkrytie}%
+\def\signname{Podpicanie:}%
+\def\tlxname{Teleks:}%
+\def\telname{Telefon:}%
+\def\faxname{Telefaks:}%
+\def\emailname{E-mail:}%
+\def\fidoname{Fidonet:}%
+\def\bankname{Teku{\shch}i{\ui} S{\ch\"e}t:}%
+\def\of{iz serii }%
+\def\Of{Organizacii }%
+\def\in{Vo }%
+\def\from{Iz }%
+\def\and{i }%
+\def\page{stranica }%
+\def\pages{stranicy }%
+\def\atplace{vo }%
+\def\volume{Tom}%
+\def\editor{izdatel{\cprime}}%
+\def\editors{izdateli}%
+\def\ownedition{izdanie avtora}%
+\def\first{pervoe izdanie}%
+\def\second{vtoroe izdanie}%
+\def\third{tretoe izdanie}%
+\def\secondrevised{vtoroe pererabotannoe izdanie}%
+\def\thirdrevised{tretoe pererabotannoe izdanie}%
+\def\fourthrevised{{\ch}etv\"{e}rtoe pererabotannoe izdanie}%
+\def\fifthrevised{p{\ya}toe pererabotannoe izdanie}%
+\def\sixthrevised{{\sh}ectoe pererabotannoe izdanie}%
+\def\seventhrevised{ced{\cprime}moe pererabotannoe izdanie}%
+\def\eightthrevised{boc{\cprime}moe pererabotannoe izdanie}%
+\def\ninthrevised{dev{\ya}toe pererabotannoe izdanie}%
+\def\higher{oe izdanie}%
+\def\technicalreport{Vnutrennoe Donesenie}%
+\def\masters{Vypusknoe Co{\ch}inenie}%
+\def\conference{Referat dl{\ya} zasedani{\ya}}%
+\def\phdthesis{Dissertaci{\ya}}%
+\def\tbp{Opublikovat{\cprime}}%
+\def\seename{cmotri}%
+\def\jan{{\ya}nvar{\cprime}}%
+\def\feb{fevral{\cprime}}%
+\def\mar{mart}%
+\def\apr{aprel{\cprime}}%
+\def\may{ma{\ui}}%
+\def\jun{i{\yu}n{\cprime}}%
+\def\jul{i{\yu}l{\cprime}}%
+\def\aug{avgust}%
+\def\sep{sent{\ya}br{\cprime}}%
+\def\oct{okt{\ya}br{\cprime}}%
+\def\nov{no{\ya}br{\cprime}}%
+\def\dec{dekabr{\cprime}}%
+\def\lessonname{Urok }%
+\def\exercisename{Upra{\zh}nenie }%
+\def\prefname{Predislovie }%
+\def\refname{Spisok literatur}%
+\def\rename{Kasaets{\ya}:}%
+\def\yourlettername{Va{\sh}e pic{\cprime}o ot}%
+\def\yourrefname{Va{\sh}a pometka:}%
+\def\ourrefname{Na{\sh}a pometka:}%
+\def\datetext{{\ch}uclo:}%
+\def\abstractname{Rez{\yu}me}%
+\def\bibname{Bibliografi{\ya}}%
+\def\notesname{Zametki}%
+\def\chaptername{Glava}%
+\def\appendixname{Prilo{\zh}enie}%
+\def\contentsname{Soder{\zh}anie}%
+\def\listfigurename{Spisok izobra{\zh}enii}%
+\def\listtablename{Spisok tablic}%
+\def\indexname{Indekc}%
+\def\figurename{Izobra{\zh}enie}%
+\def\tablename{Tablica}%
+\def\partname{{\Ch}ast{\cprime}}%
+\def\enclname{prilo{\zh}enie}%
+\def\enclnames{prilo{\zh}eni{\ya}}%
+\def\ccname{Raspredelenie:}%
+\def\psname{P.S.:}%
+\def\headtoname{Vo}%
+\def\headpagename{Stranica}%
+\def\arabicedname{po arabski}%
+\def\croatianedname{po {\kh}orvacki}%
+\def\czechedname{po ce{\sh}ski}%
+\def\danishedname{po datski}%
+\def\dutchedname{po gollandski}%
+\def\englishedname{po angli{\ui}ski}%
+\def\esperantoedname{po esperantski}%
+\def\finnishedname{po finski}%
+\def\frenchedname{po francuzki}%
+\def\germanedname{po nemecki}%
+\def\greekedname{po gre{\ch}eski}%
+\def\hebrewedname{po evre{\ui}ski}%
+\def\hindiedname{po indi{\ui}ski}%
+\def\italianedname{po ital{\cprime\ya}nski}%
+\def\maasaiedname{po maasa{\ui}ski}%
+\def\magyaredname{po vengerski}%
+\def\norskedname{po norve{\zh}ski}%
+\def\polishedname{po pol{\cprime}ski}%
+\def\portugesedname{po portugal{\cprime}ski}%
+\def\romanianedname{po rumynski}%
+\def\russianedname{po russki}%
+\def\sloveneedname{po slowenski}%
+\def\spanishedname{po ispanski}%
+\def\swahiliedname{po sva{\kh}ili}%
+\def\swedishedname{po {\sh}vedski}%
+\def\tamiledname{po tamil{\cprime}ski}%
+\def\turkishedname{po turecki}%
+}
+\let\extrasrussian\extrasfrench
+\let\noextrasrussian\noextrasfrench
+\@ifundefined{l@russian}{\adddialect\l@russian0}{}
+\endinput
+% Q: What kind of transliteration schemes are there?
+% A: The most important one is called KOI-7: the Russian alphabet is
+% given by the ASCII characters (note the exchange of upper and lower
+% cases):
+%
+% UPPER CASE: abwgde$vzijklmnoprstufhc~{}"yx|`q
+% lower case: ABWGDE#VZIJKLMNOPRSTUFHC^[]_YX\@Q
+%
+% The following extensions to the official standard KOI-7 are supported
+% in Glen Thobe's conversion programs for invertibility:
+% '"'=YER, '#'=yo, '$'=YO, '<'=left guillemet, '>'=right guillemet.
+%
+% A slightly different (multicharacter) scheme is employed by Steve
+% Gaardner's (gaarder@theory.tc.cornell.edu) conversion code from Old
+% KOI-8. This provides easy readability but suffers from some
+% transliteration weirdness, such as mapping short ii and yeri on the
+% same character:
+%
+% #include <stdio.h>
+% char transtbl[64][5] =
+% {"yu", "a", "b", "ts", "d" , "e", "f", "g", "kh", "i", "y" , "k", "l",
+% "m", "n", "o", "p", "ya", "r" , "s", "t", "u", "zh", "v", "'",
+% "y", "z", "sh", "e", "shch", "ch", "`",
+% "YU", "A", "B", "TS", "D" , "E", "F", "G", "KH", "I", "Y" , "K", "L",
+% "M", "N", "O", "P", "YA", "R" , "S", "T", "U", "ZH", "V", "'",
+% "Y", "Z", "SH", "E", "SHCH", "CH", "`" };
+% main()
+% {
+% int c;
+%
+% while ((c = getchar()) != EOF)
+% { if ( c > 0x80) c -= 0x80;
+% if ( c < 0x40) putchar(c);
+% else printf("%s",transtbl[c-0x40]);
+% }
+% }
diff --git a/obsolete/macros/latex209/contrib/ml/setspace.sty b/obsolete/macros/latex209/contrib/ml/setspace.sty
new file mode 100644
index 0000000000..d8006c13bf
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/ml/setspace.sty
@@ -0,0 +1,178 @@
+%% FILE: setspace.sty in SYS2.TEX.PUB.ISULATEX.STYLES
+%% AUTHOR: Erica M. S. Harris
+%% DATE: April 1990
+%% DESCR: LaTeX Document style option "setspace"
+%% Usage: \documentstyle[...,setspace,...]{...}
+%% Based on the doublespace option created by Stephen Page.
+%%
+%% This style option provides commands and environments for doing
+%% double and one-and-a-half spacing based on pt size.
+%%
+%% Single spacing is the default.
+%%
+%% Three commands, \doublespacing, \onehalfspacing, and
+%% \singlespacing, are for use in the preamble to set the overall
+%% spacing for the document. If a different spacing is required then
+%% the \setstretch{baselinestretch} command can be used in the
+%% preamble to set the baselinestretch appropriately. The default
+%% spacing with this style option is single spacing.
+%%
+%% Three environments, singlespace, onehalfspace, and doublespace,
+%% allow the spacing to be changed within the document. Both the
+%% onehalfspace and doublespace environments are intended to increase
+%% the spacing, so the onehalfspace environment should not be used in
+%% a double spaced document. If an increased spacing different from
+%% one-and-a-half or double spacing is required then the spacing
+%% environment can be used. The spacing environment takes one
+%% argument which is the larger baselinestretch to use,
+%% e.g., \begin{spacing}{2.5}.
+%%
+%% \footins is adjusted the same as \parskip - appears to work. Lose
+%% stretch parts but don't consider that to be crucial
+%%
+%% Removed code for altering spacing before and after displayed
+%% equations - just looked too much.
+%%
+%% MODS:
+%%
+%% PLEASE REPORT ANY BUGS
+%%
+%% Old Documentation follows:
+%% 1. A new environment "singlespace" is provided, within which single
+%% spacing will apply.
+%% JFL - changed so that it works in regular text and so that
+%% vertical space before and after is correctly computed
+%% 2. Double spacing is turned off within footnotes and floats (figures
+%% and tables).
+%% 3. Proper double spacing happens below tabular environments and in
+%% other places where LaTeX uses a strut.
+%% 4. Slightly more space is inserted before footnotes.
+%% 5. JFL - fixes spacing before and after displayed math
+%%
+%%
+%% mods: Jean-Francois Lamy
+%% lamy@ai.toronto.edu
+%% lamy@utai.uucp
+%%
+%% POSSIBLE BUGS:
+%% . Increasing struts may possibly cause some other obscure part of
+%% formatting to fall over.
+%% . \begin{singlespace}\begin{quote} produces the wrong spacing before
+%% the quote (extra glue is inserted).
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%---Set up double spacing
+
+\def\doublespacing{\ifcase \@ptsize \relax % 10pt
+ \def\baselinestretch{1.667}
+ \or % 11pt
+ \def\baselinestretch{1.618}
+ \or % 12pt
+ \def\baselinestretch{1.655}
+ \fi}
+%\doublespacing % the default
+
+\def\onehalfspacing{\ifcase \@ptsize \relax % 10pt
+ \def\baselinestretch{1.25}
+ \or % 11pt
+ \def\baselinestretch{1.213}
+ \or % 12pt
+ \def\baselinestretch{1.241}
+ \fi}
+
+\def\singlespacing{\def\baselinestretch{1}}
+
+\def\setstretch#1{\renewcommand{\baselinestretch}{#1}}
+
+%---Stretch the baseline BEFORE calculating the strut size. This improves
+% spacing below tabular environments etc., probably...
+% Comments are welcomed.
+\ifx\selectfont\undefined\gdef\@setsize#1#2#3#4{\@nomath#1\let\@currsize#1 %
+ \baselineskip #2\baselineskip\baselinestretch\baselineskip%
+ \parskip\baselinestretch\parskip%
+ \setbox\strutbox\hbox{\vrule height.7\baselineskip
+ depth.3\baselineskip width\z@}%
+ \skip\footins\baselinestretch\skip\footins%
+ \normalbaselineskip\baselineskip#3#4}\else
+\gdef\@setsize#1#2#3#4{\@nomath#1\size{#4}{#2}\selectfont%
+ \let\@currsize#1\baselineskip\baselinestretch\baselineskip%
+ \parskip\baselinestretch\parskip%
+ \skip\footins\baselinestretch\skip\footins}\fi
+
+%---Increase the space between last line of text and footnote rule.
+%\skip\footins 20pt plus4pt minus4pt
+
+%---Reset baselinestretch within footnotes and floats.
+
+\def\@xfloat#1[#2]{\ifhmode \@bsphack\@floatpenalty -\@Mii\else
+ \@floatpenalty-\@Miii\fi\def\@captype{#1}\ifinner
+ \@parmoderr\@floatpenalty\z@
+ \else\@next\@currbox\@freelist{\@tempcnta\csname ftype@#1\endcsname
+ \multiply\@tempcnta\@xxxii\advance\@tempcnta\sixt@@n
+ \@tfor \@tempa :=#2\do
+ {\if\@tempa h\advance\@tempcnta \@ne\fi
+ \if\@tempa t\advance\@tempcnta \tw@\fi
+ \if\@tempa b\advance\@tempcnta 4\relax\fi
+ \if\@tempa p\advance\@tempcnta 8\relax\fi
+ }\global\count\@currbox\@tempcnta}\@fltovf\fi
+ \global\setbox\@currbox\vbox\bgroup
+ \def\baselinestretch{1}\@normalsize
+ \boxmaxdepth\z@
+ \hsize\columnwidth \@parboxrestore}
+
+\long\def\@footnotetext#1{\insert\footins{\def\baselinestretch{1}\footnotesize
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\footnotesep
+ \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
+ \hsize\columnwidth \@parboxrestore
+ \edef\@currentlabel{\csname p@footnote\endcsname\@thefnmark}\@makefntext
+ {\rule{\z@}{\footnotesep}\ignorespaces
+ #1\strut}}}
+
+% A single spaced quote (say) is done by surrounding singlespace with quote.
+%
+\def\singlespace{%
+\vskip\parskip%
+\vskip\baselineskip%
+\def\baselinestretch{1}%
+\ifx\@currsize\normalsize\@normalsize\else\@currsize\fi%
+\vskip-\parskip%
+\vskip-\baselineskip}
+
+\def\endsinglespace{\par}
+
+% spacing, doublespace and onehalfspace all are meant to INCREASE the
+% spacing (i.e. calling onehalfspace from within doublespace will not
+% produce a graceful transition between spacings)
+%
+\def\spacing#1{\par%
+ \def\baselinestretch{#1}%
+ \ifx\@currsize\normalsize\@normalsize\else\@currsize\fi}
+
+\def\endspacing{\par%
+ \vskip \parskip%
+ \vskip \baselineskip%
+}% \endgroup%
+% \vskip -\parskip%
+% \vskip -\baselineskip%
+% \begingroup}
+
+% one and a half spacing is 1.5 x pt size
+\def\onehalfspace{\ifcase \@ptsize \relax % 10pt
+ \spacing{1.25}
+ \or % 11pt
+ \spacing{1.213}
+ \or % 12pt
+ \spacing{1.241}
+ \fi}
+\let\endonehalfspace=\endspacing
+
+% double spacing is 2 x pt size
+\def\doublespace{\ifcase \@ptsize \relax % 10pt
+ \spacing{1.667}
+ \or % 11pt
+ \spacing{1.618}
+ \or % 12pt
+ \spacing{1.655}
+ \fi}
+\let\enddoublespace=\endspacing
diff --git a/obsolete/macros/latex209/contrib/ml/swahili.tex b/obsolete/macros/latex209/contrib/ml/swahili.tex
new file mode 100644
index 0000000000..1ccb5c3537
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/ml/swahili.tex
@@ -0,0 +1,219 @@
+%%
+%% This is file `swahili.tex', generated on <1994/6/09>
+%%
+\def\filename{swahili.tex}
+\def\fileversion{swahili-1.1}
+\def\filedate{16 june 1994}
+%%
+{\def\format{plain}
+\ifx\fmtname\format
+ \expandafter\ifx\csname @ifundefined\endcsname\relax
+ \gdef\next{latexhax.com}
+ \aftergroup\input\aftergroup\next
+ \fi
+\fi}
+\chardef\atcatcode=\catcode`\@
+\makeatletter
+\@ifundefined{captionsswahili}{}{\catcode`\@=\atcatcode\endinput}
+\wlog{Language: `Swahili' version \fileversion\space<\filedate>}
+\ifx\undefined\babel@core@loaded\input babel.com\fi
+\ifx\undefined\originalTeX \let\originalTeX\relax \else\originalTeX\fi
+\gdef\higherthenthird#1{\bgroup%
+ \def\arabicedition{\arabicedname}%
+ \def\croatianedition{\croatianedname}%
+ \def\czechedition{\czechedname}%
+ \def\danishedition{\danishedname}%
+ \def\dutchedition{\dutchedname}%
+ \def\englishedition{\englishedname}%
+ \def\esperantoedition{\esperantoedname}%
+ \def\finnishedition{\finnishedname}%
+ \def\frenchedition{\frenchedname}%
+ \def\germanedition{\germanedname}%
+ \def\greekedition{\greekedname}%
+ \def\hebrewedition{\hebrewedname}%
+ \def\hindiedition{\hindiedname}%
+ \def\italianedition{\italianedname}%
+ \def\maasaiedition{\maasaiedname}%
+ \def\magyaredition{\magyaredname}%
+ \def\norskedition{\norskedname}%
+ \def\polishedition{\polishedname}%
+ \def\portugesedition{\portugesedname}%
+ \def\romanianedition{\romanianedname}%
+ \def\russianedition{\russianedname}%
+ \def\sloveneedition{\sloveneedname}%
+ \def\spanishedition{\spanishedname}%
+ \def\swahiliedition{\swahiliedname}%
+ \def\swedishedition{\swedishedname}%
+ \def\tamiledition{\tamiledname}%
+ \def\turkishedition{\turkishedname}\if#12%
+ {\higher 2}\else\if#13%
+ {\higher 3}\else\if#14%
+ {\higher 4}\else\if#15%
+ {\higher 5}\else\if#16%
+ {\higher 6}\else\if#17%
+ {\higher 7}\else\if#18%
+ {\higher 8}\else\if#19%
+ {\higher 9}\else#1\fi\fi\fi\fi\fi\fi\fi\fi\egroup}
+\def\captionsswahili{%
+\def\dashes{---}%
+\def\leftquotes{``}%
+\def\rightquotes{''}%
+\def\telname{Simu: }%
+\def\faxname{Faks: }%
+\def\of{ya }%
+\def\Of{Ya }%
+\def\In{Kwenye }%
+\def\from{Kutoka }%
+\def\and{na }%
+\def\page{uk.~}%
+\def\pages{kr.~}%
+\def\atplace{}%
+\def\volume{Hatua}%
+\def\editor{(mtunzi)}%
+\def\editors{(watunzi)}%
+\def\ownedition{Kimetungwa na mwandishi}%
+\def\first{Utunzi wa kwanza}%
+\def\second{Utunzi wa pili}%
+\def\third{Utunzi wa tatu}%
+\def\secondrevised{Utunzi wa pili na marekebisho}%
+\def\thirdrevised{Utunzi wa tatu na marekebisho}%
+\def\fourthrevised{Utunzi wa nne na marekebisho}%
+\def\fifthrevised{Utunzi wa tano na marekebisho}%
+\def\sixthrevised{Utunzi wa sita na marekebisho}%
+\def\seventhrevised{Utunzi wa saba na marekebisho}%
+\def\eightthrevised{Utunzi wa nane na marekebisho}%
+\def\ninthrevised{Utunzi wa tisa na marekebisho}%
+\def\higher{Utunzi wa }%
+\def\technicalreport{Ripoti}%
+\def\masters{Stashahada}%
+\def\conference{Hotuba ya semina }%
+\def\phdthesis{Dissertatie}%
+\def\tbp{Kinachapishwa}%
+\def\seename{angalia}%
+\def\jan{mwezi wa kwanza }%
+\def\feb{mwezi wa pili }%
+\def\mar{mwezi wa tatu }%
+\def\apr{mwezi wa nne }%
+\def\may{mwezi wa tano }%
+\def\jun{mwezi wa sita }%
+\def\jul{mwezi wa saba }%
+\def\aug{mwezi wa nane }%
+\def\sep{mwezi wa tisa }%
+\def\oct{mwezi wa kumi }%
+\def\nov{mwezi wa kumi na moja }%
+\def\dec{mwezi wa kumi na mbili }%
+\def\exercisename{Zoezi}%
+\def\lessonname{Somo}%
+\def\prefname{Dibaji}%
+\def\refname{Maelekezo}%
+\def\rename{Yahusu}%
+\def\abstractname{Kifupi}%
+\def\bibname{Bibliografie}%
+\def\notesname{Maelezo}%
+\def\chaptername{Sura ya }%
+\def\appendixname{Viambatisho sehemu ya }%
+\def\contentsname{Yaliyomo}%
+\def\listfigurename{Picha zilizomo}%
+\def\listtablename{Lijst van tabellen}%
+\def\indexname{Index}%
+\def\figurename{Picha}%
+\def\tablename{Tabel}%
+\def\partname{Sehemu}%
+\def\enclname{Ambatanisha}%
+\def\ccname{Nakala}%
+\def\psname{P.S.}%
+\def\headtoname{Kwa}%
+\def\headpagename{Ukurasa wa}%
+\def\arabicedname{Tolea la kiarabu}%
+\def\croatianedname{Tolea la kikroatsia}%
+\def\czechedname{Tolea la kichekoslovakia}%
+\def\danishedname{Tolea la kidenmak}%
+\def\dutchedname{Tolea la kidachi}%
+\def\englishedname{Tolea la kiingereza}%
+\def\esperantoedname{Tolea la kiesperanto}%
+\def\finnishedname{Tolea la kifinland}%
+\def\frenchedname{Tolea la kifaransa}%
+\def\germanedname{Tolea la kijerumani}%
+\def\greekedname{Tolea la kigiriki}%
+\def\hebrewedname{Tolea la kiebrania}%
+\def\hindiedname{Tolea la kihindi}%
+\def\italianedname{Tolea la kiitalia}%
+\def\maasaiedname{Tolea la kimasai}%
+\def\magyaredname{Tolea la kihangari}%
+\def\norskedname{Tolea la kinorwei}%
+\def\polishedname{Tolea la kipoland}%
+\def\portugesedname{Tolea la kireno}%
+\def\romanianedname{Tolea la kiromania}%
+\def\russianedname{Tolea la kirusi}%
+\def\sloveneedname{Tolea la kisloven}%
+\def\spanishedname{Tolea la kihispania}%
+\def\swahiliedname{Tolea la kiswahili}%
+\def\swedishedname{Tolea la kiswiden}%
+\def\tamiledname{Tolea la kitamil}%
+\def\turkishedname{Tolea la kituruki}%
+%\def\nul{\ifnum\ii=0 nul\else\hesabu\fi}%
+%\def\getall{\ifcase\ii\or\qmeen\or\qmtwee\or\qmdrie\or\qmvier\or\qmvijf\or%
+%\qmzes\or\qmze\-ven\or\qmacht\or\qmne\-gen\or\qmtien\or\qmelf\or\qmtwaalf\or%
+% \qmder\-tien\or\qmveer\-tien\else%
+% \jj=\ii\ifnum\ii<100 \divide\jj by 10 \edef\tig{\ifcase\jj\or tien\or%
+% twin\-tig\or der\-tig\or veer\-tig\or vijf\-tig\or zes\-tig\or
+%ze\-ven\-tig\or%
+% tach\-tig\or ne\-gen\-tig\fi}\multiply\jj by 10 \advance\ii
+%by-\jj\getall%
+% \ifnum\jj=10
+%\else\ifcase\ii\or\-en\or"en\or"en\else\-en\fi\fi\qm\tig%
+% \else\ifnum\ii<1000 \num100 \qmhon\-derd%
+% \else\ifnum\ii<1100 \num1000 \qmdui\-zend%
+% \else\ifnum\ii<2000 \num100 \qmhon\-derd%
+% \else\ifnum\ii<1000000 \num1000 \qmdui\-zend%
+% \else\num1000000 \qmmil\-joen%
+% \fi\fi\fi\fi\fi\fi}
+}
+\def\dateswahili{%
+\def\today{\number\day~\ifcase\month\or
+ mwezi wa kwanza\or mwezi wa pili\or mwezi wa tatu\or mwezi wa nne\or
+ mwezi wa tano\or mwezi wa sita\or mwezi wa saba\or mwezi wa nane\or
+ mwezi wa tisa\or mwezi wa kumi\or mwezi wa kumi na moja\or
+ mwezi wa kumi na mbili\fi
+ \space \number\year}}
+\begingroup \catcode`\"\active
+\gdef\extrasswahili{%
+ \ifnum\the\sfcode`\.=\@m\frenchspacing\fi%
+ \let\original@dospecials\dospecials%
+ \let\original@sanitize\@sanitize%
+ \let\original@dieresis\"%
+ \let\original@dq="%
+ \edef\original@xcode{\catcode`\noexpand\"=\the\catcode`\"\relax}
+ \catcode`\"\active%
+ \umlautlow%
+% \def"{\protect\active@dq}%
+% \def\"{\protect\@umlaut}%
+}
+\endgroup
+\begingroup\catcode`\"=\active
+\gdef\noextrasswahili{%
+ \catcode`\"12%
+ \original@xcode
+ \let"\original@dq
+ \let\"\original@dieresis%
+ \let\dospecials\original@dospecials%
+ \let\@sanitize\original@sanitize%
+}\endgroup
+%\@ifundefined{l@swahili}{\adddialect\l@swahili0}{}
+\adddialect\l@swahili\l@french
+
+%\@bsphack\@ifundefined{l@swahili}{\@nolanerr{swahili}}%
+% {\language=\csname l@swahili\endcsname\relax
+% \l@nguage=\csname l@swahili\endcsname\relax
+\hyphenation{Ne-der-as-selt Ritschl}
+% \originalTeX
+% \csname captionsswahili\endcsname
+% \csname dateswahili\endcsname
+% \csname extrasswahili\endcsname
+% \def\originalTeX{\csname noextrasswahili\endcsname}%
+% \@esphack}%
+
+\catcode`\@=\atcatcode \let\atcatcode\relax
+\endinput
+%%
+%% End of file `swahili.tex'.
diff --git a/obsolete/macros/latex209/contrib/ml/tugboat.cmn b/obsolete/macros/latex209/contrib/ml/tugboat.cmn
new file mode 120000
index 0000000000..a10c88d36c
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/ml/tugboat.cmn
@@ -0,0 +1 @@
+../../../../../macros/plain/contrib/tugboat/tugboat.cmn \ No newline at end of file
diff --git a/obsolete/macros/latex209/contrib/mnras/README b/obsolete/macros/latex209/contrib/mnras/README
new file mode 100644
index 0000000000..a4e513707f
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/mnras/README
@@ -0,0 +1,17 @@
+% readme.txt (v1.1 released 5th September 1994)
+% for Monthly Notices LaTeX style file
+%
+% The files for MN are as follows:
+%
+% README.TXT this file
+% MN.STY the style file
+% MNGUIDE.TEX authors' instructions
+% MNSAMPLE.TEX sample pages
+% MNLAND.TEX landscape page for sample pages
+%
+% If you have obtained this package by FTP you should have one large
+% file in which the above files are concatenated. Use a text editor,
+% or word-processor to split these files at the text `CUT HERE'.
+%
+% Typeset MNGUIDE.TEX and the sample pages with MN.STY for
+% instructions and examples.
diff --git a/obsolete/macros/latex209/contrib/mnras/mn.sty b/obsolete/macros/latex209/contrib/mnras/mn.sty
new file mode 100644
index 0000000000..cfc54307d3
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/mnras/mn.sty
@@ -0,0 +1,1873 @@
+% Blackwell Science MN journal document style
+% v1.4, released 14th September 1995
+%
+% Copyright (C) Cambridge University Press 1994
+% for LaTeX version 2.09, 1988, by Leslie Lamport
+% based on the original LaTeX ARTICLE DOCUMENT STYLE
+% modifications by Sue Brooks, Alison Woollatt and Mark Reed 1993, 1994
+%
+% > Incorporating also parts of authordate.sty
+% by David Rhead, Cripps Computing Centre (Feb 1990).
+% > Incorporating special symbol code from laa.sty v1.1 (25th Feb 1991)
+% used with the permission of Springer Verlag.
+% > Incorporating parts of mssymb.tex (8th July 1987).
+% > Incorporating newfont.sty vALPHA pl 8 (16th August 1994), by M. Reed
+%
+% v0.1.01 SFB text area, abstract heading, secnumdepth,
+% \dblfloatpagefraction
+% v0.1.02 SFB landscape, galley and referee options;
+% new catchline; enumerated lists; correct raggedright
+% on section headings;
+% v0.1.03 SFB continued floats with \caption* (removed now),
+% short captions centred
+% v0.1.04 SFB appendices, unnumbered list (using description)
+% v0.1.05 AJW roman catchline, final statement
+% v1.0 RM BSP note, \bsp, added to cup specials
+% v1.1 AJW / MR, 28th January 1994. NFSS 1/2 compatible,
+% Springer-Verlag macros added
+% v1.2 AJW, 18th July 1994. Improved cont. captions,
+% MR font selection check improved,
+% MR removed some redundant code, AW \sevensize added,
+% MR Added MR's `NewFont' support, MR Improved NFSS 1/2 support,
+% MR Added support for Bold math and AMS symbols for NFSS 1,
+% MR par's in abstract now have par indents.
+% MR added \ifCUPmtlplainloaded switch for use in documents.
+% MR Added mnsym.tex (for Times version).
+% v1.25 MR, not released to authors 16th August 1994.
+% Replaced existing Newfont.sty code with updated code, after
+% discovering several bugs. This version not released to authors
+% because they are unlikely to find the bugs unless:
+% 1) they have an extremely long article,
+% 2) have used many \New.. commands (no docs were supplied for
+% these anyway).
+% v1.3 MR, 5 September 1994. Added printing of style file version to
+% 'Printed' info in catchline. Will help us identify how the
+% article was produced (TeX/LaTeX) and the version number of the
+% macros.
+% MR Tables and Figures no longer get double spaced when using the
+% `referee' or `doublespacing' options.
+% MR Corrected 7th footnote symbol: made a \star\star (was **).
+% MR Corrected problem where some headings were not upper-case
+% when they should have been (\section*).
+% v1.4 AJW, 14th September 1995. Add footlines and \newauthor,
+% correct \listparindent in enumerate environment.
+
+\newif\ifoldfss
+\newif\ifnfssone
+\newif\ifnfsstwo
+\def\f@s@s{}
+
+\@ifundefined{DeclareFontShape}%
+ {%
+ \@ifundefined{selectfont}%
+ {\global\oldfsstrue\let\reset@font=\relax%
+ \def\f@s@s{with OFSS,\space}}% old font selection scheme
+ {\global\nfssonetrue\def\f@s@s{with NFSS release 1,\space}}%
+ }%
+ {\global\nfsstwotrue\def\f@s@s{with NFSS release 2,\space}}%
+
+\def\@version{1.4}
+
+\typeout{Document Style `MN' \f@s@s v\@version, released 14th September 1995}
+
+% Journals use two-sided printing.
+%
+\@twosidetrue
+\@twocolumntrue
+\@mparswitchtrue
+\def\ds@draft{\overfullrule 5pt}
+\def\ds@twocolumn{\@twocolumntrue}
+\def\ds@onecolumn{\@twocolumnfalse}
+
+% letters option
+%
+\newif\if@letters
+\def\ds@letters{\@letterstrue}
+
+% landscape option
+%
+\newif\ifSFB@landscape
+\def\ds@landscape{\SFB@landscapetrue}
+
+% galley option
+%
+\newif\ifSFB@galley
+\def\ds@galley{\SFB@galleytrue}
+
+% referee option
+%
+\newif\ifSFB@referee
+\def\ds@referee{%
+ \SFB@refereetrue
+ \@twocolumnfalse
+}
+\newif\ifdoublesp@cing
+\def\ds@doublespacing{%
+ \doublesp@cingtrue
+}%
+\@options
+%
+% ****************************************
+% * FONTS *
+% ****************************************
+%
+\lineskip 1pt
+\normallineskip 1pt
+\ifSFB@referee
+ \def\baselinestretch{1.5}
+\else
+ \ifdoublesp@cing
+ \def\baselinestretch{2}
+\else
+ \def\baselinestretch{1}
+\fi\fi
+\if@twocolumn
+ \def\@normalsize{\@setsize\normalsize{11pt}\ixpt\@ixpt
+ \abovedisplayskip 6pt plus 2pt minus 2pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip 6pt plus 2pt
+ \belowdisplayshortskip \abovedisplayshortskip
+ \let\@listi\@listI}
+ \else
+ \ifSFB@referee
+ \def\@normalsize{\@setsize\normalsize{14pt}\xiipt\@xiipt
+ \abovedisplayskip 4pt plus 1pt minus 1pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip 4pt plus 1pt
+ \belowdisplayshortskip \abovedisplayshortskip
+ \let\@listi\@listI}
+ \else
+ \def\@normalsize{\@setsize\normalsize{12pt}\ixpt\@ixpt
+ \abovedisplayskip 4pt plus 1pt minus 1pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip 4pt plus 1pt
+ \belowdisplayshortskip \abovedisplayshortskip
+ \let\@listi\@listI}
+ \fi
+\fi
+\def\small{\@setsize\small{10pt}\viiipt\@viiipt
+ \abovedisplayskip 4pt plus 1pt minus 1pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip 4pt plus 1pt
+ \belowdisplayshortskip \abovedisplayshortskip
+ \def\@listi{\leftmargin\leftmargini
+ \topsep 2pt plus 1pt minus 1pt
+ \parsep \z@
+ \itemsep 2pt}}
+\def\footnotesize{\@setsize\footnotesize{10pt}\viiipt\@viiipt
+ \abovedisplayskip 4pt plus 1pt minus 1pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip 4pt plus 1pt
+ \belowdisplayshortskip \abovedisplayshortskip
+ \def\@listi{\leftmargin\leftmargini
+ \topsep 2pt plus 1pt minus 1pt
+ \parsep \z@
+ \itemsep 2pt}}
+\def\scriptsize{\@setsize\scriptsize{8pt}\vipt\@vipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+%
+\if@twocolumn
+ \def\large{\@setsize\large{11pt}\xpt\@xpt}
+ \else
+ \def\large{\@setsize\large{12pt}\xpt\@xpt}
+ \fi
+\def\Large{\@setsize\Large{14pt}\xiipt\@xiipt}
+\def\LARGE{\@setsize\LARGE{17pt}\xivpt\@xivpt}
+\def\huge{\@setsize\huge{20pt}\xviipt\@xviipt}
+\def\Huge{\@setsize\Huge{25pt}\xxpt\@xxpt}
+%
+\def\sevensize{\@setsize\sevensize{8pt}\viipt\@viipt}
+%
+\normalsize
+
+%%%%%%%%%%%%%%%%%%%%%%%% Extra Math / Symbol code %%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\hexnumber#1{\ifcase#1 0\or1\or2\or3\or4\or5\or6\or7%
+ \or8\or9\or A\or B\or C\or D\or E\or F\fi}
+
+\def\setboxz@h{\setbox\z@\hbox}
+\def\wdz@{\wd\z@}
+\def\boxz@{\box\z@}
+\def\setbox@ne{\setbox\@ne}
+\def\wd@ne{\wd\@ne}
+
+\def\math@atom#1#2{%
+ \binrel@{#1}\binrel@@{#2}}
+\def\binrel@#1{\setboxz@h{\thinmuskip0mu
+ \medmuskip\m@ne mu\thickmuskip\@ne mu$#1\m@th$}%
+ \setbox@ne\hbox{\thinmuskip0mu\medmuskip\m@ne mu\thickmuskip
+ \@ne mu${}#1{}\m@th$}%
+ \setbox\tw@\hbox{\hskip\wd@ne\hskip-\wdz@}}
+\def\binrel@@#1{\ifdim\wd2<\z@\mathbin{#1}\else\ifdim\wd\tw@>\z@
+ \mathrel{#1}\else{#1}\fi\fi}
+
+% These must be here because \newif and \newtoks are defined \outer.
+\newif\iffirstta
+\newtoks\math@groups
+\newif\ifd@f
+
+\ifoldfss
+%
+% newfont.sty
+% ALPHA VERSION patchlevel 8, 16th August 1994, M. Reed
+
+% \addtom@thgroup{math font loading info}
+% Adds to internal \math@groups definition, which is executed at the end
+% of each size changing command. It is called by \NewSymbolFont.
+
+\math@groups={}
+\def\addtom@thgroup#1#2{#1\expandafter{\the#1#2}} % \mac={new\the\mac}
+
+
+% Redefine \@setsize to allow math fonts to be reloaded automatically.
+% \@setsize\SIZE{BASELINESKIP}\FONTSIZE\@FONTSIZE
+% \@setsize\tiny{6pt}\vpt\@vpt
+
+\def\@setsize#1#2#3#4{\@nomath#1\let\@currsize#1\baselineskip
+ #2\setbox\strutbox\hbox{\vrule height.7\baselineskip
+ depth.3\baselineskip width\z@}\baselineskip\baselinestretch\baselineskip
+ \normalbaselineskip\baselineskip#3#4\relax
+ \the\math@groups
+}
+
+
+% Make LaTeX change the values of \s@ze, \ss@ze, \sss@ze when \@npt is
+% executed. This makes it possible for math characters to be loaded
+% at the correct size automatically when the size is changed.
+
+% \addtosizeh@ok{x}{10}{7}{5}
+
+\def\addtosizeh@ok#1#2#3#4{%
+ \expandafter\def\csname @#1pt\endcsname{%
+ \def\s@ze{#2}\def\ss@ze{#3}\def\sss@ze{#4}%
+ }%
+}
+
+
+% \resetsizehook allows the size parameters to be reset after \addtosizeh@ok
+% has been called (it re-defines \@npt).
+% e.g JFM which requires \xpt to have 10.5pt instead of 10pt.
+% Note: \resetsizehook must be used BEFORE \begin{document}, and BEFORE any
+% \New... commands.
+
+% e.g. \resetsizehook{x}{10.5}{7}{5}
+
+\let\resetsizehook=\addtosizeh@ok
+
+
+% Standard LaTeX sizes
+
+\ifx\CUP@mtlplain@loaded\undefined
+ \addtosizeh@ok{v} {5} {5} {5}
+ \addtosizeh@ok{vi} {6} {6} {6}
+ \addtosizeh@ok{vii} {7} {6} {5}
+ \addtosizeh@ok{viii} {8} {6} {5}
+ \addtosizeh@ok{ix} {9} {6} {5}
+ \addtosizeh@ok{x} {10} {7} {5}
+ \addtosizeh@ok{xi} {10.95} {8} {6}
+ \addtosizeh@ok{xii} {12} {8} {6}
+ \addtosizeh@ok{xiv} {14.4} {10} {7}
+ \addtosizeh@ok{xvii} {17.28} {12} {10}
+ \addtosizeh@ok{xx} {20.74} {14.4} {12}
+ \addtosizeh@ok{xxv} {24.88} {20.74} {17.28}
+\else
+ \addtosizeh@ok{v} {5} {5} {5}
+ \addtosizeh@ok{vi} {6} {6} {6}
+ \addtosizeh@ok{vii} {7} {6} {5}
+ \addtosizeh@ok{viii} {8} {6} {5}
+ \addtosizeh@ok{ix} {9} {6} {5}
+ \addtosizeh@ok{x} {10}{7} {5}
+ \addtosizeh@ok{xi} {11}{8} {6}
+ \addtosizeh@ok{xii} {12}{8} {6}
+ \addtosizeh@ok{xiv} {14}{10} {7}
+ \addtosizeh@ok{xvii} {17}{12}{10}
+ \addtosizeh@ok{xx} {20}{14}{12}
+ \addtosizeh@ok{xxv} {25}{20}{17}
+\fi
+
+
+\def\get@font#1#2#3{%
+ \edef\fonts@ze{\romannumeral#3}% 10 -> x
+ \edef\fontn@me{\fonts@ze#1}% AMSa -> xAMSa
+ \@ifundefined{\fontn@me}%
+ {%%\typeout{defining \fontn@me}%
+ \global\expandafter\font\csname \fontn@me\endcsname=#2 at #3pt}%
+ {}%
+}
+
+\def\ass@tfont#1#2{%
+ \xdef\fam@name{\csname #1\endcsname}%
+ \xdef\font@name{\csname #2\endcsname}%
+ \let\textfont@name\font@name
+ \textfont\fam@name\textfont@name
+}
+
+\def\ass@sfont#1#2{%
+ \xdef\fam@name{\csname #1\endcsname}%
+ \xdef\font@name{\csname #2\endcsname}%
+ \let\textfont@name\font@name
+ \scriptfont\fam@name\textfont@name
+}
+
+\def\ass@ssfont#1#2{%
+ \xdef\fam@name{\csname #1\endcsname}%
+ \xdef\font@name{\csname #2\endcsname}%
+ \let\textfont@name\font@name
+ \scriptscriptfont\fam@name\textfont@name
+}
+
+
+% fam name base font (allocates a \newfam)
+% \NewSymbolFont {AMSa} {mtxm10}
+
+\def\NewSymbolFont#1#2{%
+ \expandafter\ifx\csname sym#1fam\endcsname\relax % if not defined
+ \expandafter\newfam\csname sym#1fam\endcsname
+ \expandafter\edef\csname sym#1fam\endcsname{\the\allocationnumber}%
+ \addtom@thgroup\math@groups{%
+ \get@font{#1}{#2}{\s@ze}%
+ \ass@tfont{sym#1fam}{\fontn@me}%
+ \get@font{#1}{#2}{\ss@ze}%
+ \ass@sfont{sym#1fam}{\fontn@me}%
+ \get@font{#1}{#2}{\sss@ze}%
+ \ass@ssfont{sym#1fam}{\fontn@me}%
+ }%
+ \else
+ \errmessage{Family `#1' already defined}%
+ \fi
+}
+
+
+% symbol type fam pos (hex)
+% \NewMathSymbol {\blacksquare} {0} {AMSa} {04}
+
+\def\NewMathSymbol#1#2#3#4{%
+ \edef\f@mly{\expandafter\hexnumber{\csname sym#3fam\endcsname}}%
+ \mathchardef#1="#2\f@mly#4\relax
+}
+
+
+% macro name type fam1 pos fam2 pos
+% \NewMathDelimiter{\ulcorner} {4} {AMSa} {70} {AMSb} {70}
+
+\def\NewMathDelimiter#1#2#3#4#5#6{%
+ \d@ftrue
+ \expandafter\ifx\csname sym#3fam\endcsname\relax
+ \d@ffalse \errmessage{Family `#3' is not defined}%
+ \fi
+ \expandafter\ifx\csname sym#5fam\endcsname\relax
+ \d@ffalse \errmessage{Family `#5' is not defined}%
+ \fi
+ \ifd@f
+ \edef\f@mly{\expandafter\hexnumber{\csname sym#3fam\endcsname}}%
+ \edef\f@mlytw@{\expandafter\hexnumber{\csname sym#5fam\endcsname}}%
+ \xdef#1{\delimiter"#2\f@mly #4\f@mlytw@ #6\relax}%
+ \fi
+}
+
+
+% macro name base font skewchar setting e.g '60 (octal)
+% \NewMathAlphabet {mathbssi} {mtmisb10} {}
+
+\def\m@thit{1}
+
+\def\set@skchar#1{\global\expandafter\skewchar
+ \csname\fontn@me\endcsname=#1\relax}
+
+\def\NewMathAlphabet#1#2#3{%
+ \def\tst{#3}%
+ \ifx\tst\empty\else % if a \skewchar setting is present
+ \expandafter\gdef\csname #1@sc\endcsname{}% \def\cmd@sc{..}
+ \fi
+ %
+ \expandafter\def\csname #1\endcsname{% \def\cmd{\protect\@cmd}
+ \protect\csname @#1\endcsname}%
+ %
+ \expandafter\def\csname @#1\endcsname##1{% \def\@cmd{..}
+ {%
+ \begingroup
+ \get@font{#1}{#2}{\s@ze}%
+ \@ifundefined{#1@sc}{}{\set@skchar{#3}}%
+ \ass@tfont{m@thit}{\fontn@me}%
+ \get@font{#1}{#2}{\ss@ze}%
+ \@ifundefined{#1@sc}{}{\set@skchar{#3}}%
+ \ass@sfont{m@thit}{\fontn@me}%
+ \get@font{#1}{#2}{\sss@ze}%
+ \@ifundefined{#1@sc}{}{\set@skchar{#3}}%
+ \ass@ssfont{m@thit}{\fontn@me}%
+ %
+ \math@atom{##1}{%
+ \mathchoice%
+ {\hbox{$\m@th\displaystyle##1$}}%
+ {\hbox{$\m@th\textstyle##1$}}%
+ {\hbox{$\m@th\scriptstyle##1$}}%
+ {\hbox{$\m@th\scriptscriptstyle##1$}}}%
+ \endgroup
+ }%
+ }%
+}
+
+
+% macro name base font hyphenchar setting e.g -1 (off)
+% \NewTextAlphabet {textbfit} {mtbxti10} {}
+
+% save a family if \NewTextAlphabet is not used.
+\firsttatrue
+
+\def\set@hchar#1{\global\expandafter\hyphenchar
+ \csname\fontn@me\endcsname=#1\relax}
+
+\def\NewTextAlphabet#1#2#3{%
+ \iffirstta
+ \global\firsttafalse
+ \newfam\scratchfam
+ \edef\scrt@fam{\the\allocationnumber}%
+ \fi
+ \def\tst{#3}%
+ \ifx\tst\empty\else % if a \hyphenchar setting is required
+ \expandafter\gdef\csname #1@hc\endcsname{}% \def\cmd@sc{..}
+ \fi
+ %
+ \expandafter\def\csname #1\endcsname{% \def\cmd{\protect\t@cmd}
+ \protect\csname t@#1\endcsname}%
+ %
+ \long\expandafter\def\csname t@#1\endcsname##1{% \def\t@cmd{..}
+ \ifmmode
+ \typeout{Warning: do not use \expandafter\string\csname #1\endcsname
+ \space in math mode}\fi%
+ {%
+ \get@font{#1}{#2}{\s@ze}\let\t@xtfnt=\fontn@me\relax
+ \@ifundefined{#1@hc}{}{\set@hchar{#3}}%
+ \ass@tfont{scrt@fam}{\fontn@me}%
+ \get@font{#1}{#2}{\ss@ze}%
+ \@ifundefined{#1@hc}{}{\set@hchar{#3}}%
+ \ass@sfont{scrt@fam}{\fontn@me}%
+ \get@font{#1}{#2}{\sss@ze}%
+ \@ifundefined{#1@hc}{}{\set@hchar{#3}}%
+ \ass@ssfont{scrt@fam}{\fontn@me}%
+ \fam\scratchfam\csname\t@xtfnt\endcsname
+ ##1%
+ }%
+ }%
+ %
+ \expandafter\def\csname #1shape% \def\cmdshape{\protect\@cmdshape}
+ \endcsname{\protect\csname @#1shape\endcsname}%
+ %
+ \expandafter\def\csname @#1shape\endcsname{% \def\@cmdshape
+ \ifmmode
+ \typeout{Warning: do not use \expandafter\string\csname
+ #1shape\endcsname \space in math mode}\fi
+ %
+ \get@font{#1}{#2}{\s@ze}\let\t@xtfnt=\fontn@me\relax
+ \@ifundefined{#1@hc}{}{\set@hchar{#3}}%
+ \ass@tfont{scrt@fam}{\fontn@me}%
+ \get@font{#1}{#2}{\ss@ze}%
+ \@ifundefined{#1@hc}{}{\set@hchar{#3}}%
+ \ass@sfont{scrt@fam}{\fontn@me}%
+ \get@font{#1}{#2}{\sss@ze}%
+ \@ifundefined{#1@hc}{}{\set@hchar{#3}}%
+ \ass@ssfont{scrt@fam}{\fontn@me}%
+ \fam\scratchfam\csname\t@xtfnt\endcsname
+ }%
+}
+
+
+% \bmath{math text}
+
+\ifx\CUP@mtlplain@loaded\undefined
+ \def\math@itfnt{cmmib10}
+ \def\math@syfnt{cmbsy10}
+\else
+ \def\math@itfnt{mtmib10}
+ \def\math@syfnt{mtbsy10}
+\fi
+
+\def\m@thsy{2}
+
+\def\bmath{\protect\@bmath}
+\def\@bmath#1{%
+ {%
+ \begingroup
+ \get@font{mthit}{\math@itfnt}{\s@ze}\set@skchar{'177}%
+ \ass@tfont{m@thit}{\fontn@me}%
+ \get@font{mthit}{\math@itfnt}{\ss@ze}\set@skchar{'177}%
+ \ass@sfont{m@thit}{\fontn@me}%
+ \get@font{mthit}{\math@itfnt}{\sss@ze}\set@skchar{'177}%
+ \ass@ssfont{m@thit}{\fontn@me}%
+ %
+ \get@font{mthsy}{\math@syfnt}{\s@ze}\set@skchar{'60}%
+ \ass@tfont{m@thsy}{\fontn@me}%
+ \get@font{mthsy}{\math@syfnt}{\ss@ze}\set@skchar{'60}%
+ \ass@sfont{m@thsy}{\fontn@me}%
+ \get@font{mthsy}{\math@syfnt}{\sss@ze}\set@skchar{'60}%
+ \ass@ssfont{m@thsy}{\fontn@me}%
+ %
+ \math@atom{#1}{%
+ \mathchoice%
+ {\hbox{$\m@th\displaystyle#1$}}%
+ {\hbox{$\m@th\textstyle#1$}}%
+ {\hbox{$\m@th\scriptstyle#1$}}%
+ {\hbox{$\m@th\scriptscriptstyle#1$}}}%
+ \endgroup
+ }%
+}
+%
+\fi % End of ofss
+
+% Make these do nothing (for backwards compatibility}
+\let\loadboldmathitalic=\relax
+\let\loadboldgreek=\relax
+
+\ifoldfss % if NFSS release 1 or 2
+\else
+ %
+ \def\mathch{\protect\p@mathch}
+ \def\p@mathch#1#2{%
+ \begingroup
+ \let\@nomath\@gobble \mathversion{#1}%
+ \math@atom{#2}{%
+ \mathchoice%
+ {\hbox{$\m@th\displaystyle#2$}}%
+ {\hbox{$\m@th\textstyle#2$}}%
+ {\hbox{$\m@th\scriptstyle#2$}}%
+ {\hbox{$\m@th\scriptscriptstyle#2$}}}%
+ \endgroup}
+ %
+ \def\bmath{\protect\p@boldm}
+ \def\p@boldm#1{\mathch{bold}{#1}}
+ %
+\fi
+
+
+% Define lowercase bold Greek.
+% Use \boldeta for bold \eta (clashes with \beta).
+
+\ifnfsstwo % if OFSS or NFSS release 1
+\else
+%
+ \def\balpha{\bmath{\alpha}}
+ \def\bbeta{\bmath{\beta}}
+ \def\bgamma{\bmath{\gamma}}
+ \def\bdelta{\bmath{\delta}}
+ \def\bepsilon{\bmath{\epsilon}}
+ \def\bzeta{\bmath{\zeta}}
+ \def\boldeta{\bmath{\eta}}
+ \def\btheta{\bmath{\theta}}
+ \def\biota{\bmath{\iota}}
+ \def\bkappa{\bmath{\kappa}}
+ \def\blambda{\bmath{\lambda}}
+ \def\bmu{\bmath{\mu}}
+ \def\bnu{\bmath{\nu}}
+ \def\bxi{\bmath{\xi}}
+ \def\bpi{\bmath{\pi}}
+ \def\brho{\bmath{\rho}}
+ \def\bsigma{\bmath{\sigma}}
+ \def\btau{\bmath{\tau}}
+ \def\bupsilon{\bmath{\upsilon}}
+ \def\bphi{\bmath{\phi}}
+ \def\bchi{\bmath{\chi}}
+ \def\bpsi{\bmath{\psi}}
+ \def\bomega{\bmath{\omega}}
+ \def\bvarepsilon{\bmath{\varepsilon}}
+ \def\bvartheta{\bmath{\vartheta}}
+ \def\bvarpi{\bmath{\varpi}}
+ \def\bvarrho{\bmath{\varrho}}
+ \def\bvarsigma{\bmath{\varsigma}}
+ \def\bvarphi{\bmath{\varphi}}
+ %
+\fi
+
+\ifnfsstwo
+ %
+ \let\mit=\mathnormal
+ %
+ % The following is needed beause NFSS release 2 does not define the bold
+ % math symbol font to be available!
+ %
+ \SetSymbolFont{symbols}{bold}{OMS}{cmsy}{b}{n}
+ %
+ \DeclareSymbolFont{bmisymbols}{OML}{cmm}{b}{it}
+ \DeclareMathSymbol{\balpha}{0}{bmisymbols}{"0B}
+ \DeclareMathSymbol{\bbeta}{0}{bmisymbols}{"0C}
+ \DeclareMathSymbol{\bgamma}{0}{bmisymbols}{"0D}
+ \DeclareMathSymbol{\bdelta}{0}{bmisymbols}{"0E}
+ \DeclareMathSymbol{\bepsilon}{0}{bmisymbols}{"0F}
+ \DeclareMathSymbol{\bzeta}{0}{bmisymbols}{"10}
+ \DeclareMathSymbol{\boldeta}{0}{bmisymbols}{"11}
+ \DeclareMathSymbol{\btheta}{0}{bmisymbols}{"12}
+ \DeclareMathSymbol{\biota}{0}{bmisymbols}{"13}
+ \DeclareMathSymbol{\bkappa}{0}{bmisymbols}{"14}
+ \DeclareMathSymbol{\blambda}{0}{bmisymbols}{"15}
+ \DeclareMathSymbol{\bmu}{0}{bmisymbols}{"16}
+ \DeclareMathSymbol{\bnu}{0}{bmisymbols}{"17}
+ \DeclareMathSymbol{\bxi}{0}{bmisymbols}{"18}
+ \DeclareMathSymbol{\bpi}{0}{bmisymbols}{"19}
+ \DeclareMathSymbol{\brho}{0}{bmisymbols}{"1A}
+ \DeclareMathSymbol{\bsigma}{0}{bmisymbols}{"1B}
+ \DeclareMathSymbol{\btau}{0}{bmisymbols}{"1C}
+ \DeclareMathSymbol{\bupsilon}{0}{bmisymbols}{"1D}
+ \DeclareMathSymbol{\bphi}{0}{bmisymbols}{"1E}
+ \DeclareMathSymbol{\bchi}{0}{bmisymbols}{"1F}
+ \DeclareMathSymbol{\bpsi}{0}{bmisymbols}{"20}
+ \DeclareMathSymbol{\bomega}{0}{bmisymbols}{"21}
+ \DeclareMathSymbol{\bvarepsilon}{0}{bmisymbols}{"22}
+ \DeclareMathSymbol{\bvartheta}{0}{bmisymbols}{"23}
+ \DeclareMathSymbol{\bvarpi}{0}{bmisymbols}{"24}
+ \DeclareMathSymbol{\bvarrho}{0}{bmisymbols}{"25}
+ \DeclareMathSymbol{\bvarsigma}{0}{bmisymbols}{"26}
+ \DeclareMathSymbol{\bvarphi}{0}{bmisymbols}{"27}
+ %
+\fi
+
+
+% Define font shapes for Euler upright Math, bold upright Math,
+% AMS symbol fonts A and B, sans-serif bold, bold text italic,
+% math italic bold and bold math symbol.
+% These font shapes are defined in mnsym.tex to use Times fonts.
+
+\ifx\CUP@mtlplain@loaded\undefined
+ %
+ \ifnfssone
+ %
+ \new@fontshape{eur}{m}{n}{%
+ <5>eurm5<6>eurm6<7>eurm7<8>eurm8<9>eurm9<10>eurm10%
+ <11>eurm10 at 10.95pt<12>eurm10 at 12pt<14>eurm10 at 14.4pt%
+ <17>eurm10 at 17.28pt<20>eurm10 at 20.74pt<25>eurm10 at 24.88pt}{}
+ %
+ \new@fontshape{eur}{b}{n}{%
+ <5>eurb5<6>eurb6<7>eurb7<8>eurb8<9>eurb9<10>eurb10%
+ <11>eurb10 at 10.95pt<12>eurb10 at 12pt<14>eurb10 at 14.4pt%
+ <17>eurb10 at 17.28pt<20>eurb10 at 20.74pt<25>eurb10 at 24.88pt}{}
+ %
+ \new@fontshape{msa}{m}{n}{%
+ <5>msam5<6>msam6<7>msam7<8>msam8<9>msam9<10>msam10%
+ <11>msam10 at 10.95pt<12>msam10 at 12pt<14>msam10 at 14.4pt%
+ <17>msam10 at 17.28pt<20>msam10 at 20.74pt<25>msam10 at 24.88pt}{}
+ %
+ \new@fontshape{msb}{m}{n}{%
+ <5>msbm5<6>msbm6<7>msbm7<8>msbm8<9>msbm9<10>msbm10%
+ <11>msbm10 at 10.95pt<12>msbm10 at 12pt<14>msbm10 at 14.4pt%
+ <17>msbm10 at 17.28pt<20>msbm10 at 20.74pt<25>msbm10 at 24.88pt}{}
+ %
+ \new@fontshape{cmss}{bx}{n}{%
+ <5>cmssbx10 at5pt<6>cmssbx10 at6pt<7>cmssbx10 at7pt<8>cmssbx10 at8pt%
+ <9>cmssbx10 at9pt<10>cmssbx10<11>cmssbx10 at10.95pt<12>cmssbx10 at12pt%
+ <14>cmssbx10 at14.4pt<17>cmssbx10 at17.28pt<20>cmssbx10 at20.74pt%
+ <25>cmssbx10 at24.88pt}{}
+ %
+ \new@fontshape{cmr}{bx}{it}{%
+ <5>cmbxti10 at5pt<6>cmbxti10 at6pt<7>cmbxti10 at7pt<8>cmbxti10 at8pt%
+ <9>cmbxti10 at9pt<10>cmbxti10<11>cmbxti10 at10.95pt<12>cmbxti10 at12pt%
+ <14>cmbxti10 at14.4pt<17>cmbxti10 at17.28pt<20>cmbxti10 at20.74pt%
+ <25>cmbxti10 at24.88pt}{}
+ %
+ \new@fontshape{cmm}{b}{it}{%
+ <5>cmmib10 at5pt<6>cmmib10 at6pt<7>cmmib10 at7pt<8>cmmib10 at8pt%
+ <9>cmmib10 at9pt<10>cmmib10<11>cmmib10 at10.95pt<12>cmmib10 at12pt%
+ <14>cmmib10 at14.4pt<17>cmmib10 at17.28pt<20>cmmib10 at20.74pt%
+ <25>cmmib10 at24.88pt}{}
+ %
+ \new@fontshape{cmsy}{b}{n}{%
+ <5>cmbsy10 at5pt<6>cmbsy10 at6pt<7>cmbsy10 at7pt<8>cmbsy10 at8pt%
+ <9>cmbsy10 at9pt<10>cmbsy10<11>cmbsy10 at10.95pt<12>cmbsy10 at12pt%
+ <14>cmbsy10 at14.4pt<17>cmbsy10 at17.28pt<20>cmbsy10 at20.74pt%
+ <25>cmbsy10 at24.88pt}{}
+ %
+ \def\UseAMStwoboldmath{%
+ \new@fontshape{cmm}{b}{it}{%
+ <5>cmmib5<6>cmmib6<7>cmmib7<8>cmmib8<9>cmmib9<10>cmmib10%
+ <11>cmmib10 at10.95pt<12>cmmib10 at12pt<14>cmmib10 at14.4pt%
+ <17>cmmib10 at17.28pt<20>cmmib10 at20.74pt<25>cmmib10 at24.88pt}{}
+ %
+ \new@fontshape{cmsy}{b}{n}{%
+ <5>cmbsy5<6>cmbsy6<7>cmbsy7<8>cmbsy8<9>cmbsy9<10>cmbsy10%
+ <11>cmbsy10 at10.95pt<12>cmbsy10 at12pt<14>cmbsy10 at14.4pt%
+ <17>cmbsy10 at17.28pt<20>cmbsy10 at20.74pt<25>cmbsy10 at24.88pt}{}
+ }%
+ %
+ \fi % End of NFSS release 1
+\else
+ \let\UseAMStwoboldmath=\relax
+\fi
+
+
+% Astronomy and Astrophysics symbol macros
+
+\def\la{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\reset@font\displaystyle##$\hfil\cr<\cr\sim\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\reset@font\textstyle##$\hfil\cr
+<\cr\sim\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\reset@font\scriptstyle##$\hfil\cr
+<\cr\sim\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\reset@font\scriptscriptstyle##$\hfil\cr
+<\cr\sim\cr}}}}}
+
+\def\ga{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\reset@font\displaystyle##$\hfil\cr>\cr\sim\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\reset@font\textstyle##$\hfil\cr
+>\cr\sim\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\reset@font\scriptstyle##$\hfil\cr
+>\cr\sim\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\reset@font\scriptscriptstyle##$\hfil\cr
+>\cr\sim\cr}}}}}
+
+\def\getsto{\mathrel{\mathchoice {\vcenter{\offinterlineskip
+\halign{\hfil
+$\reset@font\displaystyle##$\hfil\cr\gets\cr\to\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\reset@font\textstyle##$\hfil\cr\gets
+\cr\to\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\reset@font\scriptstyle##$\hfil\cr\gets
+\cr\to\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\reset@font\scriptscriptstyle##$\hfil\cr
+\gets\cr\to\cr}}}}}
+
+\def\cor{\mathrel{\mathchoice {\hbox{$\widehat=$}}{\hbox{$\widehat=$}}
+{\hbox{$\reset@font\scriptstyle\hat=$}}
+{\hbox{$\reset@font\scriptscriptstyle\hat=$}}}}
+
+\def\lid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\reset@font\displaystyle##$\hfil\cr<\cr\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\reset@font\textstyle##$\hfil\cr<\cr
+\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\reset@font\scriptstyle##$\hfil\cr<\cr
+\noalign{\vskip1pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\reset@font\scriptscriptstyle##$\hfil\cr
+<\cr
+\noalign{\vskip0.9pt}=\cr}}}}}
+
+\def\gid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\reset@font\displaystyle##$\hfil\cr>\cr\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\reset@font\textstyle##$\hfil\cr>\cr
+\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\reset@font\scriptstyle##$\hfil\cr>\cr
+\noalign{\vskip1pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\reset@font\scriptscriptstyle##$\hfil\cr
+>\cr
+\noalign{\vskip0.9pt}=\cr}}}}}
+
+\def\sol{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\reset@font\displaystyle##$\hfil\cr\sim\cr<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\reset@font\textstyle##$\hfil\cr\sim\cr
+<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\reset@font\scriptstyle##$\hfil\cr\sim\cr
+<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\reset@font\scriptscriptstyle##$\hfil\cr
+\sim\cr<\cr}}}}}
+
+\def\sog{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\reset@font\displaystyle##$\hfil\cr\sim\cr>\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\reset@font\textstyle##$\hfil\cr\sim\cr
+>\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\reset@font\scriptstyle##$\hfil\cr
+\sim\cr>\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\reset@font\scriptscriptstyle##$\hfil\cr
+\sim\cr>\cr}}}}}
+
+\def\lse{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\reset@font\displaystyle##$\hfil\cr<\cr\simeq\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\reset@font\textstyle##$\hfil\cr
+<\cr\simeq\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\reset@font\scriptstyle##$\hfil\cr
+<\cr\simeq\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\reset@font\scriptscriptstyle##$\hfil\cr
+<\cr\simeq\cr}}}}}
+
+\def\gse{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\reset@font\displaystyle##$\hfil\cr>\cr\simeq\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\reset@font\textstyle##$\hfil\cr
+>\cr\simeq\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\reset@font\scriptstyle##$\hfil\cr
+>\cr\simeq\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\reset@font\scriptscriptstyle##$\hfil\cr
+>\cr\simeq\cr}}}}}
+
+\def\grole{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\reset@font\displaystyle##$\hfil\cr>\cr\noalign{\vskip-1.5pt}<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\reset@font\textstyle##$\hfil\cr
+>\cr\noalign{\vskip-1.5pt}<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\reset@font\scriptstyle##$\hfil\cr
+>\cr\noalign{\vskip-1pt}<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\reset@font\scriptscriptstyle##$\hfil\cr
+>\cr\noalign{\vskip-0.5pt}<\cr}}}}}
+
+\def\leogr{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\reset@font\displaystyle##$\hfil\cr<\cr\noalign{\vskip-1.5pt}>\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\reset@font\textstyle##$\hfil\cr
+<\cr\noalign{\vskip-1.5pt}>\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\reset@font\scriptstyle##$\hfil\cr
+<\cr\noalign{\vskip-1pt}>\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\reset@font\scriptscriptstyle##$\hfil\cr
+<\cr\noalign{\vskip-0.5pt}>\cr}}}}}
+
+\def\loa{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\reset@font\displaystyle##$\hfil\cr<\cr\approx\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\reset@font\textstyle##$\hfil\cr
+<\cr\approx\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\reset@font\scriptstyle##$\hfil\cr
+<\cr\approx\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\reset@font\scriptscriptstyle##$\hfil\cr
+<\cr\approx\cr}}}}}
+
+\def\goa{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\reset@font\displaystyle##$\hfil\cr>\cr\approx\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\reset@font\textstyle##$\hfil\cr
+>\cr\approx\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\reset@font\scriptstyle##$\hfil\cr
+>\cr\approx\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\reset@font\scriptscriptstyle##$\hfil\cr
+>\cr\approx\cr}}}}}
+
+\def\sun{\hbox{$\odot$}}
+\def\degr{\hbox{$^\circ$}}
+\def\diameter{{\ifmmode\mathchoice
+{\ooalign{\hfil\hbox{$\reset@font\displaystyle/$}\hfil\crcr
+{\hbox{$\reset@font\displaystyle\mathchar"20D$}}}}
+{\ooalign{\hfil\hbox{$\reset@font\textstyle/$}\hfil\crcr
+{\hbox{$\reset@font\textstyle\mathchar"20D$}}}}
+{\ooalign{\hfil\hbox{$\reset@font\scriptstyle/$}\hfil\crcr
+{\hbox{$\reset@font\scriptstyle\mathchar"20D$}}}}
+{\ooalign{\hfil\hbox{$\reset@font\scriptscriptstyle/$}\hfil\crcr
+{\hbox{$\reset@font\scriptscriptstyle\mathchar"20D$}}}}
+\else{\ooalign{\hfil/\hfil\crcr\mathhexbox20D}}%
+\fi}}
+
+\def\sq{\ifmmode\squareforqed\else{\unskip\nobreak\hfil
+\penalty50\hskip1em\null\nobreak\hfil\squareforqed
+\parfillskip=0pt\finalhyphendemerits=0\endgraf}\fi}
+\def\squareforqed{\hbox{\rlap{$\sqcap$}$\sqcup$}}
+
+\ifoldfss
+ \newcommand{\r@mn}[1] {{\rm #1}}%
+\else
+ \newcommand{\r@mn}[1] {\mathrm{#1}}%
+\fi
+
+\def\fd{\hbox{$.\!\!^{\reset@font\r@mn{d}}$}}
+\def\fh{\hbox{$.\!\!^{\reset@font\r@mn{h}}$}}
+\def\fm{\hbox{$.\!\!^{\reset@font\r@mn{m}}$}}
+\def\fs{\hbox{$.\!\!^{\reset@font\r@mn{s}}$}}
+\def\fdg{\hbox{$.\!\!^\circ$}}
+\def\farcm{\hbox{$.\mkern-4mu^\prime$}}
+\def\farcs{\hbox{$.\!\!^{\prime\prime}$}}
+\def\fp{\hbox{$.\!\!^{\reset@font\scriptscriptstyle\r@mn{p}}$}}
+\def\arcmin{\hbox{$^\prime$}}
+\def\arcsec{\hbox{$^{\prime\prime}$}}
+
+%%%%%%%%%%%%%%%%%%%%% End of Extra Math / Symbol code %%%%%%%%%%%%%%%%%%%%%
+
+% ****************************************
+% * PAGE LAYOUT *
+% ****************************************
+%
+% SIDE MARGINS:
+\if@twocolumn
+ \oddsidemargin -2.5pc \evensidemargin -2.5pc
+\else
+ \ifSFB@referee
+ \oddsidemargin \z@ \evensidemargin \z@
+ \else
+ \oddsidemargin -2pc \evensidemargin -2pc
+ \fi
+\fi
+\marginparwidth 4pc
+\marginparsep 0.5pc
+
+% VERTICAL SPACING:
+%\if@twocolumn
+% \topmargin -2pc
+%\else
+ \topmargin \z@
+%\fi
+\headheight 14pt
+\headsep 15pt
+\topskip 9pt
+\footheight 11pt
+\footskip 22pt % was 26pt
+%
+% DIMENSION OF TEXT: % SFB 0.1.01
+%
+\newdimen\SFB@measure
+\SFB@measure 42pc
+%
+\textheight 682pt
+\textwidth \SFB@measure
+%
+\ifSFB@landscape
+ \textwidth \textheight
+ \textheight \SFB@measure
+\fi
+\ifSFB@referee
+ \textwidth 39pc
+\fi
+\columnsep 2pc
+\columnseprule 0pt
+
+% FOOTNOTES:
+\footnotesep 6pt
+\skip\footins 19.5pt plus 12pt minus 1pt
+
+% FLOATS:
+\floatsep 12pt plus 5.5pt minus 1pt
+\textfloatsep 12pt plus 7.5pt
+\intextsep 12pt plus 5.5pt minus 2pt
+\@maxsep 15pt
+\dblfloatsep 12pt plus 5.5pt minus 2pt
+\dbltextfloatsep 15pt plus 4.5pt minus 3pt
+\@dblmaxsep 15pt
+\@fptop 0pt plus 0fil
+\@fpsep 12pt plus 0fil
+\@fpbot 0pt plus 0fil% 3fil ajw
+\@dblfptop 0pt plus 0fil
+\@dblfpsep 12pt plus 0fil
+\@dblfpbot 0pt plus 0fil% 3fil ajw
+\marginparpush 5pt
+
+% ****************************************
+% * PARAGRAPHING *
+% ****************************************
+%
+\newdimen\realparindent % needed for abstract
+\parskip \z@ plus .1pt
+\parindent 18pt
+\realparindent=\parindent
+\partopsep 0pt plus 1pt
+\@lowpenalty 51
+\@medpenalty 151
+\@highpenalty 301
+\@beginparpenalty -\@lowpenalty
+\@endparpenalty -\@lowpenalty
+\@itempenalty -\@lowpenalty
+\clubpenalty=0
+\widowpenalty=10000
+
+% ****************************************
+% * PARTS & SECTIONS NUMBERS *
+% ****************************************
+%
+\newcounter {part}
+\newcounter {section}
+\newcounter {subsection}[section]
+\newcounter {subsubsection}[subsection]
+\newcounter {paragraph}[subsubsection]
+\newcounter {subparagraph}[paragraph]
+\def\thepart {\arabic{part}}
+\def\thesection {\arabic{section}}
+\def\thesubsection {\thesection.\arabic{subsection}}
+\def\thesubsubsection {\thesubsection.\arabic{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+\def\thesubparagraph {\theparagraph.\arabic{subparagraph}}
+
+% ****************************************
+% * PARTS *
+% ****************************************
+%
+\def\part{\par \addvspace{4ex}\@afterindentfalse
+ \secdef\@part\@spart}
+\def\@part[#1]#2{\ifnum \c@secnumdepth >\m@ne
+ \refstepcounter{part}
+ \addcontentsline{toc}{part}{Part \thepart: #1}
+ \else \addcontentsline{toc}{part}{#1}
+ \fi
+ {\parindent 0pt \raggedright
+ \ifnum \c@secnumdepth >\m@ne
+ \reset@font\large\rm PART
+ \ifcase\thepart \or ONE \or TWO \or THREE \or FOUR \or FIVE
+ \or SIX \or SEVEN \or EIGHT \or NINE \or TEN \else \fi
+ \par \nobreak
+ \fi
+ \reset@font\LARGE \rm #2 \markboth{}{}\par }
+ \nobreak \vskip 3ex \@afterheading}
+\def\@spart#1{{\parindent 0pt \raggedright
+ \reset@font\LARGE \rm #1\par}
+ \nobreak \vskip 3ex \@afterheading}
+
+% ****************************************
+% * SECTIONS *
+% ****************************************
+%
+% \@startsection modified to leave less space before \subsection
+% if it immediately follows \section
+
+% \@startsection {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}
+
+\newif\if@levelone
+
+\def\@startsection#1#2#3#4#5#6{\if@noskipsec \leavevmode \fi
+ \par \@tempskipa #4\relax
+ \@afterindenttrue
+ \ifnum #2=\@ne % if level=1 ie. section
+ \global\@levelonetrue
+ \else
+ \global\@levelonefalse
+ \fi
+ \ifdim \@tempskipa <\z@ \@tempskipa -\@tempskipa \@afterindentfalse\fi
+ \if@nobreak
+ \everypar{}\ifnum#2=2 \vskip 0pt plus1pt\fi % was 6pt
+ \else
+ \addpenalty{\@secpenalty}\addvspace{\@tempskipa}
+ \fi \@ifstar
+ {\@ssect{#3}{#4}{#5}{#6}}{\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}}
+
+%\def\SFB@hangraggedright{\rightskip\@flushglue \let\\=\newline}
+%\def\SFB@raggedright{\rightskip\@flushglue \let\\=\@centercr
+% \parindent=\SFB@indent}
+
+\def\SFB@hangraggedright{\rightskip=\@flushglue \let\\=\@centercr \parindent=0pt}
+
+\def\section{\@startsection{section}{1}{\z@}
+ {-24pt plus -12pt minus -1pt}{6pt}
+ {\SFB@hangraggedright\reset@font\normalsize\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}
+ {-18pt plus -9pt minus -1pt}{6pt}
+ {\SFB@hangraggedright\reset@font\normalsize\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}
+ {-18pt plus -9pt minus -1pt}{6pt}
+ {\SFB@hangraggedright\reset@font\normalsize\it}}
+\def\paragraph{\@startsection{paragraph}{4}{\z@}
+ {12pt plus 2.25pt minus 1pt}{-0.5em}{\reset@font\normalsize\bf}}
+\def\subparagraph{\@startsection{subparagraph}{5}{\parindent}
+ {12pt plus 2.25pt minus 1pt}{-0.5em}{\reset@font\normalsize\it}}
+\setcounter{secnumdepth}{4} % SFB 0.1.01
+%
+% \@sect{NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}[ARG1]{ARG2}
+\def\@sect#1#2#3#4#5#6[#7]#8{%
+ \ifnum #2>\c@secnumdepth
+ \def\@svsec{}%
+ \else
+ \refstepcounter{#1}%
+ \if@levelone % is it a \section or \section*
+ \ifSFB@appendix
+ \edef\@svsec{}%
+ \else
+ \edef\@svsec{\csname the#1\endcsname\hskip 1em}%
+ \fi
+ \else
+ \edef\@svsec{\csname the#1\endcsname\hskip 1em}%
+ \fi
+ \fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #6\relax
+ \if@levelone
+ \ifSFB@appendix
+ \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M
+ APPENDIX \csname the#1\endcsname:\hskip 0.5em\uppercase{#8}\par}%
+ \else
+ \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M
+ \uppercase{#8}\par}%
+ \fi
+ \else
+ \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\par}%
+ \fi
+ \endgroup
+ \csname #1mark\endcsname{#7}%
+ \addcontentsline{toc}{#1}{\ifnum #2>\c@secnumdepth \else %ajw
+ \protect\numberline{\csname the#1\endcsname}\fi #7}%ajw
+ \else
+ \def\@svsechd{#6\hskip #3\@svsec \if@levelone \uppercase{#8}\else #8\fi
+ \csname #1mark\endcsname{#7}
+ \addcontentsline{toc}{#1}{\ifnum #2>\c@secnumdepth \else %ajw
+ \protect\numberline{\csname the#1\endcsname}\fi#7}%ajw
+ }\fi
+ \@xsect{#5}}
+
+% from latex.tex
+% \@ssect{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}{ARG}
+\def\@ssect#1#2#3#4#5{%
+ \@tempskipa #3\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #4\@hangfrom{\hskip #1}{%
+ \interlinepenalty \@M
+ \if@levelone
+ \uppercase{#5}%
+ \else {#5}%
+ \fi\par}%
+ \endgroup
+ \else
+ \def\@svsechd{#4\hskip #1\relax
+ \if@levelone
+ \uppercase{#5}%
+ \else {#5}%
+ \fi}
+ \fi
+ \@xsect{#3}%
+}
+
+\newif\ifSFB@appendix
+\def\appendix{\par
+ \SFB@appendixtrue
+ \@addtoreset{equation}{section}
+ \@addtoreset{table}{section}
+ \@addtoreset{figure}{section}
+ \setcounter{section}{0}
+ \setcounter{equation}{0}
+ \setcounter{figure}{0}
+ \setcounter{table}{0}
+ \def\thesection{\Alph{section}}
+ \def\thesubsection{\thesection\arabic{subsection}}
+ \def\theequation{\thesection\arabic{equation}}
+ \def\thefigure{\thesection\@arabic\c@figure}
+ \def\thetable{\thesection\@arabic\c@table}
+}
+
+% ****************************************
+% * SKIPS *
+% ****************************************
+%
+\newskip\@indentskip
+\newskip\smallindent
+\newskip\@footindent
+\newskip\@leftskip
+\@indentskip=18pt
+\smallindent=1.5em
+\@footindent=\smallindent
+\@leftskip=\z@
+
+% ****************************************
+% * LISTS *
+% ****************************************
+%
+\leftmargini \z@
+\leftmarginii 1.25pc
+\leftmarginiii 1.25pc
+\leftmarginiv 1.25pc
+\leftmarginv 1pc
+\leftmarginvi 1pc
+\leftmargin\leftmargini
+\labelsep 0.5em
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+%
+% label macros for Range-Left and Range-Right labels
+\def\makeRLlabel#1{\rlap{#1}\hss}
+\def\makeRRlabel#1{\hss\llap{#1}}
+\def\makenewlabel#1{#1}
+%
+\def\@listI{\leftmargin\leftmargini
+ \parsep \z@
+ \topsep 6pt plus 1pt minus 1pt
+ \itemsep \z@ plus .1pt
+}
+\let\@listi\@listI
+\@listi
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 6pt plus 1pt minus 1pt
+ \parsep \z@
+ \itemsep \z@ plus .1pt
+}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 6pt plus 1pt minus 1pt
+ \parsep \z@
+ \partopsep \z@
+ \itemsep \topsep
+}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep
+}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep
+}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep
+}
+%
+% ITEMIZE
+\def\itemize{%
+ \ifnum \@itemdepth >3 \@toodeep
+ \else \advance\@itemdepth \@ne
+ \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
+ \list{\csname\@itemitem\endcsname}%
+ {\let\makelabel\makeRRlabel}%
+ \parindent 1em%
+ \leftmargin 3.5em\labelsep 0.5em\itemindent 2.0em\labelwidth 0.5em%
+ \fi}
+\def\labelitemi{$\bullet$}
+\def\labelitemii{--}
+\def\labelitemiii{$\cdot$}
+\def\labelitemiv{*}
+%
+% ENUMERATE
+% SFB -- enumerate with optional argument to set left margin...
+\def\enumerate{\ifnum \@enumdepth >3 \@toodeep \else
+ \advance\@enumdepth \@ne
+ \edef\@enumctr{enum\romannumeral\the\@enumdepth}%
+ \fi
+ \@ifnextchar [{\@enumeratetwo}{\@enumerateone}%
+}
+\def\@enumeratetwo[#1]{%
+ \list{\csname label\@enumctr\endcsname}%
+ {\settowidth\labelwidth{[#1]}
+ \leftmargin\z@
+ \listparindent 1em
+ \usecounter{\@enumctr}
+ \let\makelabel\makenewlabel}
+}
+\def\@enumerateone{%
+ \list{\csname label\@enumctr\endcsname}%
+ {\usecounter{\@enumctr}\itemindent 1em\listparindent 1em
+ \let\makelabel\makenewlabel}}
+%
+\def\labelenumi{\theenumi}
+\def\theenumi{(\roman{enumi})}
+\def\labelenumii{(\theenumii)}
+\def\theenumii{(\alph{enumii})}
+\def\p@enumii{\theenumi}
+\def\labelenumiii{\theenumiii}
+\def\theenumiii{(\arabic{enumiii})}
+\def\p@enumiii{\theenumi(\theenumii)}
+\def\labelenumiv{\theenumiv}
+\def\theenumiv{(\Alph{enumiv})}
+\def\p@enumiv{\p@enumiii\theenumiii}
+%
+% DESCRIPTION
+%\def\descriptionlabel#1{\hspace\labelsep \reset@font\bf #1}
+%\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+% \leftmargin 1em
+% \itemindent-1em
+%}}
+\def\descriptionlabel#1{\reset@font\bf #1}
+\def\description{\list{}{\labelwidth\z@
+ \leftmargin \z@
+ \itemindent 1em
+}}
+\let\enddescription\endlist
+
+% ****************************************
+% * DISPLAYED TEXT *
+% ****************************************
+%
+% VERSE
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@
+ \itemindent -\@indentskip
+ \listparindent \itemindent
+ \rightmargin\leftmargin
+ \advance\leftmargin \@indentskip}\item[]}
+\let\endverse\endlist
+%
+% QUOTATION
+\def\quotation{\list{}{\listparindent \smallindent
+% \itemindent\listparindent
+ \leftmargin\z@\rightmargin\leftmargin
+ \parsep 0pt plus 1pt}\item[]\reset@font\small}
+\let\endquotation=\endlist
+%
+% QUOTE
+\def\quote{\list{}{\leftmargin\z@\rightmargin\leftmargin}\item[]%
+ \reset@font\small}
+\let\endquote=\endlist
+
+% ****************************************
+% * OTHER ENVIRONMENTS *
+% ****************************************
+%
+% THEOREM
+\def\@begintheorem#1#2{\reset@font\rm \trivlist \item[\hskip \labelsep
+ {\reset@font\bf #1\ #2.}]}
+\def\@opargbegintheorem#1#2#3{\reset@font\rm \trivlist
+ \item[\hskip \labelsep{\reset@font\bf #1\ #2.\ (#3)}]}
+\def\@endtheorem{\endtrivlist}
+%
+% PROOF
+\def\proof{\reset@font\rm \trivlist \item[\hskip \labelsep
+ {\reset@font\it Proof.}]}
+\def\endproof{\hspace*{1em}{\begin{picture}(6.5,6.5)%
+ \put(0,0){\framebox(6.5,6.5){}}\end{picture}}\endtrivlist}
+\@namedef{proof*}{\reset@font\rm \trivlist \item[\hskip \labelsep
+ {\reset@font\it Proof.}]}
+\@namedef{endproof*}{\endtrivlist}
+\def\proofbox{\begin{picture}(6.5,6.5)%
+ \put(0,0){\framebox(6.5,6.5){}}\end{picture}}
+%
+% TITLEPAGE
+\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{empty}\c@page\z@}
+\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi}
+
+% ARRAY AND TABULAR
+%
+\arraycolsep 5pt
+\tabcolsep 6pt
+\arrayrulewidth .5pt
+\doublerulesep 1.5pt
+
+\def\tabular{\def\@halignto{}
+ \def\hline{\noalign{\ifnum0=`}\fi
+ \vskip 3pt
+ \hrule \@height \arrayrulewidth
+% {\hbox to 0.667\textwidth{\hrulefill}}
+ \vskip 3pt
+ \futurelet \@tempa\@xhline}
+ \def\fullhline{\noalign{\ifnum0=`}\fi
+ \vskip 3pt
+ \hrule \@height \arrayrulewidth
+% {\hbox to \textwidth{\hrulefill}}
+ \vskip 3pt
+ \futurelet \@tempa\@xhline}
+ \def\@xhline{\ifx\@tempa\hline
+ \vskip -6pt
+ \vskip \doublerulesep
+ \fi
+ \ifnum0=`{\fi}}
+ \def\@arrayrule{\@addtopreamble{\hskip -.5\arrayrulewidth
+% \vrule \@width \arrayrulewidth
+ \hskip .5\arrayrulewidth}}
+\@tabular
+}
+% TABBING
+%
+\tabbingsep \labelsep
+
+% MINIPAGE
+%
+\skip\@mpfootins = \skip\footins
+
+% FRAMEBOX
+%
+% Space left between box and text by \fbox and \framebox.
+\fboxsep = 3pt
+% Width of rules in box made by \fbox and \framebox.
+\fboxrule = \arrayrulewidth
+
+% ****************************************
+% * TITLE AND ABSTRACT *
+% ****************************************
+%
+\def\maketitle{\par
+ \begingroup
+ \if@twocolumn
+ \twocolumn[\vspace*{17pt}\@maketitle]
+ \else
+ \newpage
+ \global\@topnum\z@
+ \@maketitle
+ \fi
+ \thispagestyle{titlepage}
+ \endgroup
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@author{}
+ \gdef\@title{}
+ \let\thanks\relax
+}
+\def\newauthor{%
+ \end{author@tabular}\par
+ \begin{author@tabular}[t]{@{}l@{}}%
+}
+\def\and{%
+ \end{author@tabular}\vskip 3pt\par
+ \begin{author@tabular}[t]{@{}l@{}}%
+}
+\def\@maketitle{\newpage
+ \vspace*{7pt}
+ {\raggedright \sloppy
+ {\reset@font\huge \bf \@title \par}
+ \vskip 23pt
+ {\reset@font\LARGE
+ \begin{author@tabular}[t]{@{}l@{}}\@author
+ \end{author@tabular}\par}
+ \vskip 22pt
+ }
+ \par\noindent
+ {\reset@font\small \@date \par}
+ \vskip 22pt
+}
+%
+\def\abstract{\if@twocolumn
+ \start@SFBbox\@abstract
+ \else
+ \@abstract
+ \fi}
+\def\endabstract{\if@twocolumn
+ \endlist\finish@SFBbox
+ \else
+ \endlist
+ \fi}
+\def\@abstract{\list{}{%
+ \listparindent\realparindent
+ \itemindent\z@
+ \labelwidth\z@ \labelsep\z@
+ \leftmargin 11pc\rightmargin\z@
+ \parsep 0pt plus 1pt}\item[]%
+ \reset@font\normalsize{\bf ABSTRACT}\\\reset@font\large
+} % SFB 0.1.01
+%
+\newif\ifSFB@keywords
+\def\keywords{\if@twocolumn
+ \start@SFBbox\@keywords
+ \else
+ \@keywords
+ \fi
+}
+\def\@keywords{\list{}{%
+ \labelwidth\z@ \labelsep\z@
+ \leftmargin 11pc\rightmargin\z@
+ \parsep 0pt plus 1pt}\item[]\reset@font\large{\bf Key words: }%
+}
+\def\endkeywords{\if@twocolumn
+ \endlist\addvspace{37pt plus 0.5\baselineskip}\finish@SFBbox
+ \else
+ \endlist
+ \fi
+ \@thanks
+ \gdef\@thanks{}
+ \SFB@keywordstrue
+}
+\def\nokeywords{\ifSFB@keywords\else
+ \if@twocolumn \start@SFBbox\addvspace{37pt}\finish@SFBbox \fi
+ \@thanks
+ \gdef\@thanks{}\fi
+}
+
+\def\author@tabular{\def\@halignto{}\@authortable}
+\let\endauthor@tabular=\endtabular
+%
+\def\author@tabcrone{\vspace{2pt}{\ifnum0=`}\fi%
+ \@xtabularcr[-7pt]\reset@font\small\it
+ \let\\=\author@tabcrtwo\ignorespaces}
+%
+\def\author@tabcrtwo{{\ifnum0=`}\fi\@xtabularcr[-7pt]\reset@font\small\it
+ \let\\=\author@tabcrtwo\ignorespaces}
+%
+\def\@authortable{\leavevmode \hbox \bgroup $\let\@acol\@tabacol
+ \let\@classz\@tabclassz \let\@classiv\@tabclassiv
+ \let\\=\author@tabcrone\ignorespaces \@tabarray}
+
+\def\start@SFBbox{\@next\@currbox\@freelist{}{}%
+ \global\setbox\@currbox
+ \vbox\bgroup
+ \hsize \textwidth
+ \@parboxrestore
+}
+\def\finish@SFBbox{\par\vskip -\dbltextfloatsep
+ \egroup
+ \global\count\@currbox\tw@
+ \global\@dbltopnum\@ne
+ \global\@dbltoproom\maxdimen\@addtodblcol
+ \global\vsize\@colht
+ \global\@colroom\@colht
+}
+
+% ****************************************
+% * PAGE STYLES *
+% ****************************************
+%
+\mark{{}{}}
+\gdef\@author{\mbox{}}
+\def\author{\@ifnextchar [{\@authortwo}{\@authorone}}
+\def\@authortwo[#1]#2{\gdef\@author{#2}\gdef\@shortauthor{#1}}
+\def\@authorone#1{\gdef\@author{#1}\gdef\@shortauthor{#1}}
+%\def\shortauthor#1{\gdef\@shortauthor{#1}}
+\gdef\@shortauthor{}
+\gdef\@title{\mbox{}}
+\def\title{\@ifnextchar [{\@titletwo}{\@titleone}}
+\def\@titletwo[#1]#2{\gdef\@title{#2}\gdef\@shorttitle{#1}}
+\def\@titleone#1{\gdef\@title{#1}\gdef\@shorttitle{#1}}
+%\def\shorttitle#1{\gdef\@shorttitle{#1}}
+\gdef\@shorttitle{}
+\def\volume#1{\gdef\@volume{#1}}
+\gdef\@volume{000}
+\def\tod@y{\today}
+\def\microfiche#1{\gdef\@microfiche{#1}}
+\gdef\@microfiche{}
+\def\pubyear#1{\gdef\@pubyear{#1}}
+\gdef\@pubyear{0000}
+\def\pagerange#1{\gdef\@pagerange{#1}}
+\gdef\@pagerange{000--000}
+\def\journal#1{\gdef\@journal{#1}}
+\def\plate#1{\gdef\pl@te{#1}}
+\ifx\CUP@mtlplain@loaded\undefined
+ \def\@printed{\qquad Printed \tod@y\qquad
+ (MN \LaTeX\ style file v\@version)}
+\else
+ \def\@printed{}
+\fi
+\gdef\@journal{{Mon.\ Not.\ R.\ Astron.\ Soc.} {\bf \@volume}, \@pagerange\
+% (\number\year) \@microfiche\@printed}
+ (\@pubyear) \@microfiche\@printed}
+%
+% \ps@empty and \ps@plain defined in LATEX.TEX
+%
+\def\@ddell{}
+\if@letters
+ \def\@ddell{L}
+\fi
+\def\ps@headings{\let\@mkboth\markboth
+ \def\@oddhead{\Large\hfill{\it\@shorttitle}\hspace{1.5em}%
+ \rm\@ddell\thepage}
+ \def\@oddfoot{\small\copyright\ \@pubyear\ RAS, MNRAS {\bf \@volume}, \@pagerange\hfil}
+ \def\@evenhead{\Large\@ddell\thepage\hspace{1.5em}\it\@shortauthor\hfill}
+ \def\@evenfoot{\hfil\small\copyright\ \@pubyear\ RAS, MNRAS {\bf \@volume}, \@pagerange}
+ \def\sectionmark##1{\markboth{##1}{}}
+ \def\subsectionmark##1{\markright{##1}}}
+
+\def\ps@myheadings{\let\@mkboth\@gobbletwo
+ \def\@oddhead{\Large\hfill\it\rightmark\hspace{1.5em}\rm\@ddell\thepage}
+ \def\@oddfoot{\small\copyright\ \@pubyear\ RAS, MNRAS {\bf \@volume}, \@pagerange\hfil}
+ \def\@evenhead{\Large\@ddell\thepage\hspace{1.5em}\it\leftmark\hfill}
+ \def\@evenfoot{\hfil\small\copyright\ \@pubyear\ RAS, MNRAS {\bf \@volume}, \@pagerange}
+ \def\sectionmark##1{}
+ \def\subsectionmark##1{}}
+
+\def\ps@titlepage{\let\@mkboth\@gobbletwo
+ \def\@oddhead{\footnotesize\@journal\hfill}
+ \def\@oddfoot{\small\copyright\ \@pubyear\ RAS\hfil}
+ \def\@evenhead{\footnotesize\@journal\hfill}
+ \def\@evenfoot{\hfil\small\copyright\ \@pubyear\ RAS}
+ \def\sectionmark##1{}
+ \def\subsectionmark##1{}}
+
+\def\ps@plate{\let\@mkboth\@gobbletwo
+ \def\@oddhead{\footnotesize\pl@te\hfill}
+ \def\@oddfoot{\small\copyright\ \@pubyear\ RAS, MNRAS {\bf \@volume},
+ \@pagerange\hfil}
+ \def\@evenhead{\footnotesize\pl@te\hfill}
+ \def\@evenfoot{\hfil\small\copyright\ \@pubyear\ RAS, MNRAS {\bf \@volume},
+ \@pagerange}
+}
+
+% ****************************************
+% * TABLE OF CONTENTS, ETC. *
+% ****************************************
+%
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{2}
+\def\@undottedtocline#1#2#3#4#5{\ifnum #1>\c@tocdepth
+ \else
+ \vskip \z@ plus .2pt
+ {\hangindent #2\relax
+ \rightskip \@tocrmarg \parfillskip -\rightskip
+ \parindent #2\relax \@afterindenttrue
+ \interlinepenalty\@M \leavevmode
+ \@tempdima #3\relax #4\nobreak \hfill \nobreak
+ \hbox to\@pnumwidth{\hfil\reset@font\rm \ }\par}\fi}
+\def\tableofcontents{\@restonecolfalse
+ \if@twocolumn\@restonecoltrue\onecolumn\fi
+ \section*{CONTENTS} \@starttoc{toc}
+ \if@restonecol\twocolumn\fi \par\vspace{12pt}}
+\def\l@part#1#2{\addpenalty{-\@highpenalty}
+ \addvspace{2.25em plus 1pt}
+ \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ {\reset@font\normalsize\rm
+ \leavevmode \hspace*{3pc}
+ #1\hfil \hbox to\@pnumwidth{\hss \ }}\par
+ \nobreak \global\@nobreaktrue
+ \everypar{\global\@nobreakfalse\everypar{}}\endgroup}
+\def\l@section#1#2{\addpenalty{\@secpenalty}
+ \@tempdima 1.5em
+ \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth \reset@font\rm \leavevmode
+ \advance\leftskip\@tempdima \hskip -\leftskip
+ #1\nobreak\hfil \nobreak\hbox to\@pnumwidth{\hss \ }\par
+ \endgroup}
+\def\l@subsection{\@undottedtocline{2}{1.5em}{2.3em}}
+\def\l@subsubsection{\@undottedtocline{3}{3.8em}{3.2em}}
+\def\l@paragraph{\@undottedtocline{4}{7.0em}{4.1em}}
+\def\l@subparagraph{\@undottedtocline{5}{10em}{5em}}
+\def\listoffigures{\@restonecolfalse
+ \if@twocolumn\@restonecoltrue\onecolumn\fi
+ \section*{LIST OF FIGURES\@mkboth{LIST OF FIGURES}{LIST OF FIGURES}}
+ \@starttoc{lof} \if@restonecol\twocolumn\fi}
+\def\l@figure{\@undottedtocline{1}{1.5em}{2.3em}}
+\def\listoftables{\@restonecolfalse
+ \if@twocolumn\@restonecoltrue\onecolumn\fi
+ \section*{LIST OF TABLES\@mkboth{LIST OF TABLES}{LIST OF TABLES}}
+ \@starttoc{lot} \if@restonecol\twocolumn\fi}
+\let\l@table\l@figure
+
+% ****************************************
+% * BIBLIOGRAPHY *
+% ****************************************
+%
+
+\newcounter{dummy}
+\def\thebibliography#1{\section*{REFERENCES}
+ \addcontentsline{toc}{section}{REFERENCES}
+ \list{}{\usecounter{dummy}%
+ \labelwidth\z@
+ \leftmargin 1.5em
+ \itemsep \z@
+ \itemindent-\leftmargin}
+ \reset@font\small
+ \parindent\z@
+ \parskip\z@ plus .1pt\relax
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax
+}
+\let\endthebibliography=\endlist
+\def\@biblabel#1{\hspace*{\labelsep}[#1]}
+
+% ****************************************
+% * THE INDEX *
+% ****************************************
+%
+\newif\if@restonecol
+\def\theindex{\section*{INDEX}
+ \addcontentsline{toc}{section}{INDEX}
+ \reset@font\footnotesize \parindent\z@ \parskip\z@ plus .1pt\relax
+ \let\item\@idxitem}
+\def\@idxitem{\par\hangindent 1em}
+\def\subitem {\par\hangindent 1em \hspace*{1em}}
+\def\subsubitem{\par\hangindent 1em\hspace*{1em}}
+\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
+\def\indexspace{\par\vskip\baselineskip \relax}
+
+% ****************************************
+% * FOOTNOTES *
+% ****************************************
+%
+\def\footnoterule{\kern-3\p@ \hrule width 12pc height \z@ \kern 3\p@}
+
+\renewcommand{\thefootnote}{\mbox{{$\fnsymbol{footnote}$}}}
+
+\def\@fnsymbol#1{\ifcase#1\or \mbox{$\star$}\or \dagger\or \ddagger\or
+ \S \or \P \or \|\or \mbox{$\star\star$}\or \dagger\dagger
+ \or \ddagger\ddagger\or \S\S\or \P\P\or \|\|\else ***
+ \fi\relax}
+
+\long\def\@makefntext#1{\parindent 1em\noindent
+ $^{\@thefnmark}$\hspace{4pt}#1}
+
+%\long\def\@makefntext#1{\@setpar{\@@par\@tempdima \hsize
+% \advance\@tempdima-18pt\parshape \@ne 18pt\@tempdima}\par
+% \noindent \hbox to \z@{\hss$^{\@thefnmark}$\hspace{0.5em}}#1}
+
+% ****************************************
+% * FIGURES AND TABLES *
+% ****************************************
+%
+\setcounter{topnumber}{2}
+\def\topfraction{.9}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.9}
+\setcounter{totalnumber}{3}
+\def\textfraction{.1}
+\def\floatpagefraction{.9}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.9}
+\def\dblfloatpagefraction{.9}
+
+\newif\ifst@rredfloat
+\newcounter{table}
+\def\thetable{\@arabic\c@table}
+\def\fps@table{tbp}
+\def\ftype@table{1}
+\def\fstyle@table{\reset@font\small\rm}
+\def\ext@table{lot}
+\def\fnum@table{Table \thetable}
+\def\table{\def\baselinestretch{1}%
+ \let\@makecaption=\SFB@maketablecaption%
+ \@float{table}\fstyle@table}
+\let\endtable\end@float
+\@namedef{table*}{\def\baselinestretch{1}\st@rredfloattrue
+ \let\@makecaption=\SFB@maketablecaption%
+ \@dblfloat{table}\centering\fstyle@table}
+\@namedef{endtable*}{\end@dblfloat\st@rredfloatfalse}
+
+\newcounter{figure}
+\def\thefigure{\@arabic\c@figure}
+\def\fps@figure{tbp}
+\def\ftype@figure{2}
+\def\fstyle@figure{\reset@font\small\rm}
+\def\ext@figure{lof}
+\def\fnum@figure{Figure \thefigure}
+\def\figure{\def\baselinestretch{1}%
+ \let\@makecaption=\SFB@makefigurecaption%
+ \@float{figure}\fstyle@figure}
+\let\endfigure\end@float
+\@namedef{figure*}{\def\baselinestretch{1}\st@rredfloattrue
+ \let\@makecaption=\SFB@makefigurecaption%
+ \@dblfloat{figure}\centering\fstyle@figure}
+\@namedef{endfigure*}{\end@dblfloat\st@rredfloatfalse}
+
+\long\def\SFB@makefigurecaption#1#2{\vskip 6pt
+ \setbox\@tempboxa\hbox{\reset@font\small{\bf #1}%
+ \if@cont \ -- {\it continued}\else{\bf .}\fi\ {\rm #2}\par}%
+ \ifdim \wd\@tempboxa >\hsize
+ {\reset@font\small{\bf #1}%
+ \if@cont \ -- {\it continued}\else{\bf .}\fi\ {\rm #2}\par}%
+ \else
+ \ifst@rredfloat
+ \hbox to\hsize{\hfill\box\@tempboxa\hfill}%
+ \else
+ \hbox to\hsize{\hfill\box\@tempboxa\hfill}%
+ \fi
+ \fi
+ \vskip 6pt
+ \@contfalse
+}
+
+\long\def\SFB@maketablecaption#1#2{\vskip 6pt
+ \setbox\@tempboxa\hbox{\reset@font\small{\bf #1}%
+ \if@cont \ -- {\it continued}\else{\bf .}\fi\ {\rm #2}\par}%
+ \ifdim \wd\@tempboxa >\hsize
+ {\reset@font\small{\bf #1}%
+ \if@cont \ -- {\it continued}\else{\bf .}\fi\ {\rm #2}\par}%
+ \else
+ \hbox to\hsize{\box\@tempboxa\hfill}%
+ \fi
+ \vskip 6pt
+ \@contfalse
+}
+
+\newif\if@cont
+\def\caption{\refstepcounter\@captype \@dblarg{\@caption\@captype}}
+\def\contcaption{\@conttrue\SFB@caption\@captype}
+
+\long\def\SFB@caption#1#2{%\par
+ \begingroup
+ \@parboxrestore
+ \reset@font\normalsize
+ \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #2}\par
+ \endgroup}
+
+% ****************************************
+% * CUP specials *
+% ****************************************
+%
+%
+% The following code is taken from authordate.sty, by David Rhead, of
+% the Cripps Computing Centre (February 1990), with some modifications
+% by ggw. It is intended for documents
+% that use the author-date citation system. When used in conjunction with
+% authordate1.bst, ... , authordate4.bst, it allows citations of the
+% form \shortcite{bloggs-60} as well as the usual \cite{bloggs-60}.
+% When
+% ... \cite{bloggs-60} ... \shortcite{bloggs-60} ...
+% appears in the input file,
+% ... (Bloggs, 1960) ... (1960) ...
+% appears in the final document.
+%
+% Code taken from apalike.sty.
+%
+\def\@cite#1#2{(#1\if@tempswa , #2\fi)}
+\def\@biblabel#1{}
+
+% Set length of hanging indentation for bibliography entries
+%
+\newlength{\bibhang}
+\setlength{\bibhang}{2em}
+
+% Define default title and page-head text.
+%
+\def\bibtitle{References}
+\def\bibheadtitle{REFERENCES}
+
+% Code taken from aaai.sty.
+%
+% don't box citations, add space between multiple citations, separate with ;
+\def\@citex[#1]#2{%
+ \if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+ \def\@citea{}\@cite{\@for\@citeb:=#2\do
+ {\@citea\def\@citea{; }\@ifundefined
+ {b@\@citeb}{{\reset@font\bf ?}\@warning
+ {Citation `\@citeb' on page \thepage \space undefined}}%
+{\csname b@\@citeb\endcsname}}}{#1}}
+% Allow short (name-less) citations, when used in
+% conjunction with a bibliography style that creates labels like
+% \citename{<names>, }<year>
+\let\@internalcite\cite
+\def\cite{\def\citename##1{##1}\@internalcite}
+\def\shortcite{\def\citename##1{}\@internalcite}
+
+% RM for BSP note at end of article
+\def\bsp{\medskip\reset@font\normalsize\noindent This paper has been
+ produced using the Royal Astronomical Society/Blackwell Science
+ \LaTeX\ style file.}
+
+
+% ****************************************
+% * FLEQN *
+% ****************************************
+%
+% FLEQN DOCUMENT-STYLE OPTION - released 9 March 1987
+% for LaTeX version 2.09
+% Copyright (C) 1987 by Leslie Lamport
+%
+% The following commands make the displayed math environments flush left,
+% with an indentation of \mathindent from the prevailing left margin.
+
+\def\[{\relax\ifmmode\@badmath\else\begin{trivlist}\item[]\leavevmode
+ \hbox to\linewidth\bgroup$
+ \displaystyle
+ \hskip\mathindent\bgroup\fi}
+
+\def\]{\relax\ifmmode \egroup $\hfil
+ \egroup \end{trivlist}\else \@badmath \fi}
+
+\def\equation{\refstepcounter{equation}\trivlist \item[]\leavevmode
+ \hbox to\linewidth\bgroup $
+ \displaystyle
+\hskip\mathindent}
+
+
+\def\endequation{$\hfil
+ \displaywidth\linewidth\@eqnnum\egroup \endtrivlist}
+
+\def\eqnarray{\stepcounter{equation}\let\@currentlabel=\theequation
+\global\@eqnswtrue
+\global\@eqcnt\z@\tabskip\mathindent\let\\=\@eqncr
+\abovedisplayskip\topsep\ifvmode\advance\abovedisplayskip\partopsep\fi
+\belowdisplayskip\abovedisplayskip
+\belowdisplayshortskip\abovedisplayskip
+\abovedisplayshortskip\abovedisplayskip
+$$\halign
+to \linewidth\bgroup\@eqnsel\hskip\@centering$\displaystyle\tabskip\z@
+ {##}$&\global\@eqcnt\@ne \hskip 2\arraycolsep \hfil${##}$\hfil
+ &\global\@eqcnt\tw@ \hskip 2\arraycolsep $\displaystyle{##}$\hfil
+ \tabskip\@centering&\llap{##}\tabskip\z@\cr}
+
+\def\endeqnarray{\@@eqncr\egroup
+ \global\advance\c@equation\m@ne$$\global\@ignoretrue}
+
+\newdimen\mathindent
+\mathindent = \z@
+
+% ****************************************
+% * MISCELLANEOUS *
+% ****************************************
+%
+% DATE
+\def\today{\number\day\ \ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December
+ \fi \ \number\year}
+
+% ****************************************
+% * INITIALIZATION *
+% ****************************************
+%
+%
+\newif\ifCUPmtlplainloaded
+\ifx\CUP@mtlplain@loaded\undefined
+\else
+ \global\CUPmtlplainloadedtrue
+ \input mnsym
+\fi
+%
+\flushbottom
+\ps@headings
+\ifSFB@galley
+ \raggedbottom
+ \ps@empty
+\fi
+\ifSFB@referee
+ \raggedbottom
+\fi
+\pagenumbering{arabic}
+\if@twocolumn
+ \twocolumn
+ \sloppy
+\else
+ \onecolumn
+\fi
+\frenchspacing
+
+% end of MN.sty
diff --git a/obsolete/macros/latex209/contrib/mnras/mnguide.tex b/obsolete/macros/latex209/contrib/mnras/mnguide.tex
new file mode 100644
index 0000000000..bf5cc70dd2
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/mnras/mnguide.tex
@@ -0,0 +1,1853 @@
+% mnguide.tex
+%
+% v1.3 released 14th September 1995
+% v1.2 released 5th September 1994 (M. Reed)
+% v1.1 released 18th July 1994
+% v1.0 released 28th January 1994
+
+\documentstyle{mn}
+
+% If your system has the AMS fonts version 2.0 installed, MN.sty can be
+% made to use them by uncommenting the line: %\AMStwofontstrue
+%
+% By doing this, you will be able to obtain upright Greek characters.
+% e.g. \umu, \upi etc. See the section on "Upright Greek characters" in
+% this guide for further information.
+%
+% If you are using AMS 2.0 fonts, bold math letters/symbols are available
+% at a larger range of sizes for NFSS release 1 and 2 (using \boldmath or
+% preferably \bmath).
+
+\newif\ifAMStwofonts
+%\AMStwofontstrue
+
+%%%%% AUTHORS - PLACE YOUR OWN MACROS HERE %%%%%
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\ifoldfss
+ %
+ \newcommand{\rmn}[1] {{\rm #1}}
+ \newcommand{\itl}[1] {{\it #1}}
+ \newcommand{\bld}[1] {{\bf #1}}
+ %
+ \ifCUPmtlplainloaded \else
+ \NewTextAlphabet{textbfit} {cmbxti10} {}
+ \NewTextAlphabet{textbfss} {cmssbx10} {}
+ \NewMathAlphabet{mathbfit} {cmbxti10} {} % for math mode
+ \NewMathAlphabet{mathbfss} {cmssbx10} {} % " " "
+ \fi
+ %
+ \ifAMStwofonts
+ %
+ \ifCUPmtlplainloaded \else
+ \NewSymbolFont{upmath} {eurm10}
+ \NewSymbolFont{AMSa} {msam10}
+ \NewMathSymbol{\upi} {0}{upmath}{19}
+ \NewMathSymbol{\umu} {0}{upmath}{16}
+ \NewMathSymbol{\upartial}{0}{upmath}{40}
+ \NewMathSymbol{\leqslant}{3}{AMSa}{36}
+ \NewMathSymbol{\geqslant}{3}{AMSa}{3E}
+ \let\oldle=\le \let\oldleq=\leq
+ \let\oldge=\ge \let\oldgeq=\geq
+ \let\leq=\leqslant \let\le=\leqslant
+ \let\geq=\geqslant \let\ge=\geqslant
+ \fi
+ %
+ \fi
+%
+\fi % End of OFSS
+
+\ifnfssone
+ %
+ \newmathalphabet{\mathit}
+ \addtoversion{normal}{\mathit}{cmr}{m}{it}
+ \addtoversion{bold}{\mathit}{cmr}{bx}{it}
+ %
+ \newcommand{\rmn}[1] {\mathrm{#1}}
+ \newcommand{\itl}[1] {\mathit{#1}}
+ \newcommand{\bld}[1] {\mathbf{#1}}
+ %
+ \def\textbfit{\protect\txtbfit}
+ \def\textbfss{\protect\txtbfss}
+ \long\def\txtbfit#1{{\fontfamily{cmr}\fontseries{bx}\fontshape{it}%
+ \selectfont #1}}
+ \long\def\txtbfss#1{{\fontfamily{cmss}\fontseries{bx}\fontshape{n}%
+ \selectfont #1}}
+ %
+ \newmathalphabet{\mathbfit} % math mode version of \textbfit{..}
+ \addtoversion{normal}{\mathbfit}{cmr}{bx}{it}
+ \addtoversion{bold}{\mathbfit}{cmr}{bx}{it}
+ %
+ \newmathalphabet{\mathbfss} % math mode version of \textbfss{..}
+ \addtoversion{normal}{\mathbfss}{cmss}{bx}{n}
+ \addtoversion{bold}{\mathbfss}{cmss}{bx}{n}
+ %
+ \ifAMStwofonts
+ %
+ \ifCUPmtlplainloaded \else
+ %
+ % Make NFSS 1 use the extra sizes available for bold math italic and
+ % bold math symbol. These definitions may already be loaded if your
+ % NFSS format was built with fontdef.max.
+ %
+ \UseAMStwoboldmath
+ %
+ \makeatletter
+ \new@mathgroup\upmath@group
+ \define@mathgroup\mv@normal\upmath@group{eur}{m}{n}
+ \define@mathgroup\mv@bold\upmath@group{eur}{b}{n}
+ \edef\UPM{\hexnumber\upmath@group}
+ %
+ \new@mathgroup\amsa@group
+ \define@mathgroup\mv@normal\amsa@group{msa}{m}{n}
+ \define@mathgroup\mv@bold\amsa@group{msa}{m}{n}
+ \edef\AMSa{\hexnumber\amsa@group}
+ \makeatother
+ %
+ \mathchardef\upi="0\UPM19
+ \mathchardef\umu="0\UPM16
+ \mathchardef\upartial="0\UPM40
+ \mathchardef\leqslant="3\AMSa36
+ \mathchardef\geqslant="3\AMSa3E
+ %
+ \let\oldle=\le \let\oldleq=\leq
+ \let\oldge=\ge \let\oldgeq=\geq
+ \let\leq=\leqslant \let\le=\leqslant
+ \let\geq=\geqslant \let\ge=\geqslant
+ %
+ \fi
+ \fi
+ %
+\fi % End of NFSS release 1
+
+\ifnfsstwo
+ %
+ \newcommand{\rmn}[1] {\mathrm{#1}}
+ \newcommand{\itl}[1] {\mathit{#1}}
+ \newcommand{\bld}[1] {\mathbf{#1}}
+ %
+ \def\textbfit{\protect\txtbfit}
+ \def\textbfss{\protect\txtbfss}
+ \long\def\txtbfit#1{{\fontfamily{cmr}\fontseries{bx}\fontshape{it}%
+ \selectfont #1}}
+ \long\def\txtbfss#1{{\fontfamily{cmss}\fontseries{bx}\fontshape{n}%
+ \selectfont #1}}
+ %
+ \DeclareMathAlphabet{\mathbfit}{OT1}{cmr}{bx}{it}
+ \SetMathAlphabet\mathbfit{bold}{OT1}{cmr}{bx}{it}
+ \DeclareMathAlphabet{\mathbfss}{OT1}{cmss}{bx}{n}
+ \SetMathAlphabet\mathbfss{bold}{OT1}{cmss}{bx}{n}
+ %
+ \ifAMStwofonts
+ %
+ \ifCUPmtlplainloaded \else
+ \DeclareSymbolFont{UPM}{U}{eur}{m}{n}
+ \SetSymbolFont{UPM}{bold}{U}{eur}{b}{n}
+ \DeclareSymbolFont{AMSa}{U}{msa}{m}{n}
+ \DeclareMathSymbol{\upi}{0}{UPM}{"19}
+ \DeclareMathSymbol{\umu}{0}{UPM}{"16}
+ \DeclareMathSymbol{\upartial}{0}{UPM}{"40}
+ \DeclareMathSymbol{\leqslant}{3}{AMSa}{"36}
+ \DeclareMathSymbol{\geqslant}{3}{AMSa}{"3E}
+ %
+ \let\oldle=\le \let\oldleq=\leq
+ \let\oldge=\ge \let\oldgeq=\geq
+ \let\leq=\leqslant \let\le=\leqslant
+ \let\geq=\geqslant \let\ge=\geqslant
+ %
+ \fi
+ \fi
+ %
+\fi % End of NFSS release 2
+
+\ifCUPmtlplainloaded \else
+ \ifAMStwofonts \else % If no AMS fonts
+ \def\upi{\pi}
+ \def\umu{\mu}
+ \def\upartial{\partial}
+ \fi
+\fi
+
+\long\def\boxit#1{\noindent\ignorespaces
+ \framebox[\hsize][l]{\hbox{\vbox{\raggedright #1\par}}}\par
+ \medskip\noindent\ignorespaces
+} % for guide only
+
+
+\title[Monthly Notices: \LaTeX\ guide for authors]
+ {Monthly Notices of the Royal Astronomical
+ Society: \\ \LaTeX\ style guide for authors}
+\author[A. Woollatt et al.]
+ {A.~Woollatt,$^1$\thanks{Affiliated to ICRA.}
+ M.~Reed,$^1$ R.~Mulvey,$^1$ K.~Matthews,$^1$
+ D.~Starling,$^1$ Y.~Yu,$^1$
+ \newauthor % starts a new line in the
+ % author environment
+ A.~Richardson$^1$ and P.~Smith$^2$\\
+ $^1$Cambridge University Press, Shaftesbury
+ Road, Cambridge CB2 2BS\\
+ $^2$Blackwell Science,
+ 23 Ainslie Place, Edinburgh EH3 6AJ}
+\date{Accepted 1993 December 11. Received 1993 March 17}
+\pagerange{\pageref{firstpage}--\pageref{lastpage}}
+\pubyear{1994}
+
+\def\LaTeX{L\kern-.36em\raise.3ex\hbox{a}\kern-.15em
+ T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}
+
+\newtheorem{theorem}{Theorem}[section]
+
+\begin{document}
+
+\label{firstpage}
+
+\maketitle
+
+\begin{abstract}
+ This guide is for authors who are preparing papers for the
+ Monthly Notices of the Royal Astronomical Society using the
+\LaTeX\ document preparation system and the MN style file.
+\end{abstract}
+
+\begin{keywords}
+ \LaTeX\ -- style files: \verb"mn.sty"\ -- sample text -- user guide.
+\end{keywords}
+
+\section{Introduction}
+
+In addition to the standard submission of hardcopy from authors,
+Monthly Notices accepts machine-readable forms of papers in \LaTeX.
+The layout design for Monthly Notices has been implemented as a
+\LaTeX\ style file. The MN style is based on the \verb"ARTICLE" style
+as discussed in the \LaTeX\ manual \cite {la}. Commands which differ
+from the standard \LaTeX\ interface, or which are provided in addition
+to the standard interface, are explained in this guide. This guide is
+not a substitute for the \LaTeX\ manual itself. Authors planning to
+submit their papers in \LaTeX\ are advised to use \verb"mn.sty" as
+early as possible in the creation of their files.
+
+\subsection{The MN document style}
+
+The use of \LaTeX\ document styles allows a simple change of style
+(or style option) to transform the appearance of your document. The
+MN style file preserves the standard \LaTeX\ interface such that any
+document that can be produced using the standard \LaTeX\ \verb"ARTICLE"
+style can also be produced with the MN style. However, the measure (or
+width of text) is narrower than the default for \verb"ARTICLE", and even
+narrower than for the \verb"A4" style, therefore line breaks will change
+and long equations may need re-setting.
+
+When your article is printed in the Monthly Notices journal, it is typeset
+in Monotype Times. As most authors do not have this font, it is likely that
+the make-up will change with the change of font. For this reason, we ask
+you to ignore details such as slightly long lines, page stretching, or
+figures falling out of synchronization, because these details can be dealt with at a later stage.
+
+\subsection{General style issues}
+
+For general style issues, authors are referred to the `Instructions for
+ Authors' on the inside back cover of Monthly Notices. Authors
+who are interested in the details of style are referred to Butcher
+\shortcite {bu} and The Chicago Manual \shortcite {ch}. The language of
+the journal is British English and spelling should conform to this.
+
+Use should be made of symbolic references (\verb"\ref") in order to
+protect against late changes of order, etc.
+
+\subsection{Submission of \LaTeX\ articles to the journal}
+
+Authors are urged to state that electronic submission is intended when
+first submitting their paper.
+Papers should initially be submitted in the usual way to the Executive
+Secretary, Royal Astronomical Society, Burlington House, London W1V 0NL,
+as set out on the inside front cover of
+each issue of Monthly Notices. Three hard copies should be supplied.
+One of these copies should
+be single-sided and double-spaced throughout, while the other two should
+be weight-reduced, by being either single-spaced or double-sided. Note
+that articles, or revised versions thereof, may not be submitted by
+electronic mail. Appropriate gaps should be left for figures, original
+versions and copies of which should also be supplied. Authors should
+ensure that their figures are suitable (in terms of lettering size, etc.)
+for the reductions they intend.
+
+Authors who wish to include PostScript artwork dir\-ectly into their
+articles can do so, by using either Tomas Rokicki's {\sf EPSF} macros
+or Trevor Darrell's {\sf PSFIG} macros (both of which are supplied with
+the DVIPS PostScript driver). Please remember to supply any additional
+figure macros you use with your article.
+Please also supply hard copies of your figures, for the use of production
+editors and as a back-up.
+Authors should not attempt to
+use implementation specific \verb"\special"'s directly.
+
+The correct Monthly Notices House Style should be used -- details are
+given in the Instructions for Authors, in the Style Guide published
+in the 1 January 1993 issue (\hbox{MNRAS}, 260, 1), and in Appendix~C of
+this guide. No disk should be submitted
+at this initial stage. When the paper has been accepted, the double-spaced
+copy will be marked up by sub-editors at Blackwell Science
+(BS) and returned to you for correction. When the requested corrections
+have been made, you should send the following to BS:
+%
+\begin{enumerate}
+\item a 3.5-inch or 5.25-inch PC disk (double- or high-density or
+ Apple Mac), containing the {\em corrected\/} version of the paper,
+ plus any macro files you have been using. The files for the final
+ version should be text-only, with no system-dependent control codes
+ (often called an ASCII file);
+\item two hard copies of the corrected version, plus the original marked
+ copy of the article; {\em any further author corrections should be
+ clearly indicated on the latter\/};
+\item a signed statement that the revised copy and the disk do indeed
+ correspond.
+\end{enumerate}
+%
+In addition, you should submit the following information concerning the
+disk and its contents:
+%
+\begin{enumerate}
+\item the disk format (e.g. IBM 360k);
+\item how many files the disk contains, their names,
+ a description of the file contents and the number of pages each file
+ will produce when printed; details of any user-defined macros;
+\item the computer system and implementation of \LaTeX\ used (e.g.
+ IBM AT, PC\TeX\ v3.0).
+\end{enumerate}
+%
+Ensure that any author-defined macros are gathered together in the file,
+just before the \verb"\begin{document}" command.
+
+Unless the layout of the paper has to be significantly changed by the
+typesetter (for example, if the gaps left for the figures are not
+suitable), it will not be necessary to send you a typeset proof to check,
+as the paper will be set directly from your submitted disk. However, you
+should note that, if serious problems are encountered with the coding of
+your paper (missing author-defined macros, for example), it may prove
+necessary to divert the paper to conventional typesetting.
+
+\section{Using the MN style}
+
+If the file \verb"mn.sty" is not already in the appropriate system
+directory for \LaTeX\ files, either arrange for it to be put there,
+or copy it to your working directory. The MN document style is implemented
+as a complete document style, {\em not\/} a document style option. In
+order to use the MN style, replace \verb"article" by \verb"mn" in the
+\verb"\documentstyle" command at the beginning of your document:
+%
+\begin{verbatim}
+\documentstyle{article}
+\end{verbatim}
+%
+is replaced by
+%
+\begin{verbatim}
+\documentstyle{mn}
+\end{verbatim}
+%
+In general, the following standard document style options should {\em
+not\/} be used with the MN style:
+%
+\begin{enumerate}
+ \item {\tt 10pt}, {\tt 11pt}, {\tt 12pt} -- unavailable;
+ \item {\tt twoside} (no associated style file) -- {\tt
+ twoside} is the default;
+ \item {\tt fleqn}, {\tt leqno}, {\tt titlepage} --
+ should not be used (\verb"fleqn" is already incorporated into
+ the MN style);
+ \item {\tt twocolumn} -- is not necessary as it is the default style.
+\end{enumerate}
+%
+If necessary, {\tt draft}, {\tt proc}, {\tt ifthen} and {\tt bezier} can be used.
+
+The MN style file has been designed to operate with the standard version
+of \verb"lfonts.tex" that is distributed as part of \LaTeX. If you have
+access to the source file for this guide, \verb"mnguide.tex", and to the
+specimen article, \verb"mnsample.tex", attempt to typeset both of these.
+If you find font problems you might investigate whether a non-standard
+version of \verb"lfonts.tex" has been installed in your system.
+
+\subsection{Additional document style options}
+
+The following additional style options are available with the MN style:
+\begin{description}
+ \item {\tt onecolumn} -- to be used {\it only} when two-column output
+ is unable to accommodate long equations;
+ \item {\tt landscape} -- for producing wide figures and tables which
+ need to be included in landscape format (i.e.\ sideways) rather
+ than portrait (i.e.\ upright). This option is described below.
+ \item {\tt doublespacing} -- this will double-space your
+ article by setting \verb"\baselinestretch" to 2.
+ \item {\tt referee} -- 12/20pt text size, single column,
+ measure 16.45cm, left margin 2.75cm on A4 page.
+ \item {\tt galley} -- no running heads, no attempt to align
+ the bottom of columns.
+\end{description}
+
+\subsection{Landscape pages}
+
+If a table or illustration is too wide to fit the standard measure, it
+must be turned, with its caption, through 90 degrees anticlockwise.
+Landscape illustrations and/or tables cannot be produced directly
+using the MN style file because \TeX\ itself cannot turn the
+page, and not all device drivers provide such a facility.
+The following procedure can be used to produce such pages.
+%
+\begin{enumerate}
+ \item Use the \verb"table*" or \verb"figure*" environments in your
+ document to create the space for your table or figure on the
+ appropriate page of your document. Include an empty
+ caption in this environment to ensure the correct
+ numbering of subsequent tables and figures. For instance, the
+ following code prints a page with the running head, a message
+ half way down and the figure number towards the bottom. If you
+ are including a plate, the running headline is different, and you
+ need to key in the three lines that are marked with \verb"% **",
+ with an appropriate headline.
+%
+\begin{verbatim}
+% ** \clearpage
+% ** \thispagestyle{plate}
+% ** \plate{Opposite p.~812, MNRAS, {\bf 261}}
+\begin{figure*}
+ \vbox to220mm{\vfil Landscape figure to go here.
+ \caption{}
+ \vfil}
+ \label{landfig}
+\end{figure*}
+\end{verbatim}
+%
+\item Create a separate document with the corresponding document style
+ but also with the \verb"landscape" document style option, and
+ include the \verb"\pagestyle" command, as follows:
+%
+\begin{verbatim}
+\documentstyle[landscape]{mn}
+\pagestyle{empty}
+\end{verbatim}
+%
+ \item Include your complete tables and illustrations (or space for
+ these) with captions using the \verb"table*" and \verb"figure*"
+ environments.
+ \item Before each float environment, use the
+ \verb"\setcounter" command to ensure the correct numbering of
+ the caption. For example,
+%
+\begin{verbatim}
+\setcounter{table}{0}
+\begin{table*}
+ \begin{minipage}{115mm}
+ \caption{The Largest Optical Telescopes.}
+ \label{tab1}
+ \begin{tabular}{@{}llllcll}
+ :
+ \end{tabular}
+ \end{minipage}
+\end{table*}
+\end{verbatim}
+%
+The corresponding example for a figure would be:
+%
+\begin{verbatim}
+\clearpage
+\setcounter{figure}{12}
+\begin{figure*}
+ \vspace{144mm}
+ \caption{Chart for a cold plasma.}
+ \label{fig13}
+\end{figure*}
+\end{verbatim}
+\end{enumerate}
+
+
+\section{Additional facilities}
+
+In addition to all the standard \LaTeX\ design elements, the MN style
+includes the following features.
+%
+\begin{enumerate}
+ \item Extended commands for specifying a short version of the title and
+ author(s) for the running headlines.
+ \item A \verb"keywords" environment and a \verb"\nokeywords" command.
+ \item Use of the \verb"description" environment for unnumbered lists.
+ \item A \verb"\contcaption" command to produce captions for continued
+ figures or tables.
+ \end{enumerate}
+%
+In general, once you have used the additional \verb"mn.sty" facilities
+in your document, do not process it with a standard \LaTeX\ style file.
+
+\subsection{Titles and author's name}
+
+In the MN style, the title of the article and the author's name (or
+authors' names) are used both at the beginning of the article for the
+main title and throughout the article as running headlines at the top
+of every page. The title is used on odd-numbered pages (rectos) and the
+author's name appears on even-numbered pages (versos). Although the
+main heading can run to several lines of text, the running headline
+must be a single line ($\le 45$ characters). Moreover, the main
+heading can also incorporate new line commands (e.g. \verb"\\") but
+these are not acceptable in a running headline. To enable you to
+specify an alternative short title and an alternative short author's
+name, the standard \verb"\title" and \verb"\author" commands have been
+extended to take an optional argument to be used as the running
+headline. The running headlines for this guide were produced using the
+following code:
+%
+\begin{verbatim}
+\title[Monthly Notices: \LaTeX\ guide for authors]
+ {Monthly Notices of the Royal Astronomical
+ Society: \\ \LaTeX\ style guide for authors}
+\end{verbatim}
+%
+and
+%
+\begin{verbatim}
+\author[A. Woollatt et al.]
+ {A.~Woollatt,$^1$\thanks{Affiliated to ICRA.}
+ M.~Reed,$^1$ R.~Mulvey,$^1$ K.~Matthews,$^1$
+ D.~Starling,$^1$ Y.~Yu,$^1$
+ \newauthor % starts a new line in the
+ % author environment
+ A.~Richardson$^1$ and P.~Smith$^2$\\
+ $^1$Cambridge University Press, Shaftesbury
+ Road, Cambridge CB2 2BS\\
+ $^2$Blackwell Science,
+ 23 Ainslie Place, Edinburgh EH3 6AJ}
+\end{verbatim}
+%
+The \verb"\thanks" note produces a footnote to the title or author.
+
+\subsection{Key words and abstracts}
+
+At the beginning of your article, the title should be generated in the
+usual way using the \verb"\maketitle" command. Immediately following
+the title you should include an abstract followed by a list of key
+words. The abstract should be enclosed within an \verb"abstract"
+environment, followed immediately by the key words enclosed in a
+\verb"keywords" environment. For example, the titles for this guide
+were produced by the following source:
+%
+\begin{verbatim}
+\maketitle
+\begin{abstract}
+ This guide is for authors who are preparing
+ papers for the Monthly Notices of the
+ Royal Astronomical Society using the \LaTeX\
+ document preparation system and the MN style
+ file.
+\end{abstract}
+\begin{keywords}
+ \LaTeX\ -- style files: \verb"mn.sty"\ --
+ sample text -- user guide.
+\end{keywords}
+
+\section{Introduction}
+ :
+\end{verbatim}
+%
+The heading `{\bf Key words}' is included automatically and the key
+words are followed by vertical space. If, for any reason, there are no
+key words, you should insert the \verb"\nokeywords" command immediately
+after the end of the \verb"abstract" environment. This ensures that the
+vertical space after the abstract and/or title is correct and that any
+\verb"thanks" acknowledgments are correctly included at the bottom of
+the first column. For example,
+%
+\begin{verbatim}
+\maketitle
+\begin{abstract}
+ :
+\end{abstract}
+\nokeywords
+
+\section{Introduction}
+ :
+\end{verbatim}
+
+\subsection{Lists}
+
+The MN style provides numbered lists using the \verb"enumerate"
+environment and unnumbered lists using the \verb"description"
+environment with an empty label. Bulleted lists are not part of the MN
+style and the \verb"itemize" environment should not be used.
+
+The enumerated list numbers each list item with roman numerals:
+%
+\begin{enumerate}
+ \item first item
+ \item second item
+ \item third item
+\end{enumerate}
+%
+Alternative numbering styles can be achieved by inserting a
+redefinition of the number labelling command after the
+\verb"\begin{enumerate}". For example, the list
+%
+\begin{enumerate}
+\renewcommand{\theenumi}{(\arabic{enumi})}
+ \item first item
+ \item second item
+ \item etc\ldots
+\end{enumerate}
+%
+was produced by:
+%
+\begin{verbatim}
+\begin{enumerate}
+ \renewcommand{\theenumi}{(\arabic{enumi})}
+ \item first item
+ :
+\end{enumerate}
+\end{verbatim}
+%
+Unnumbered lists are provided using the \verb"description" environment.
+For example,
+\begin{description}
+ \item First unnumbered item which has no label and is indented from
+ the left margin.
+ \item Second unnumbered item.
+ \item Third unnumbered item.
+\end{description}
+was produced by:
+%
+\begin{verbatim}
+\begin{description}
+ \item First unnumbered item...
+ \item Second unnumbered item.
+ \item Third unnumbered item.
+\end{description}
+\end{verbatim}
+
+\subsection{Captions for continued figures and tables}\label{contfigtab}
+
+The \verb"\contcaption" command may be used to produce a caption with the
+same number as the previous caption (for the corresponding type of
+float). For instance, if a very large table does not fit on one page,
+it must be split into two floats; the second float should use the
+\verb"\contcaption" command:
+%
+\begin{verbatim}
+\begin{table}
+ \contcaption{}
+ \begin{tabular}{@{}lccll}
+ :
+ \end{tabular}
+\end{table}
+\end{verbatim}
+
+
+\section[]{Some guidelines for using\\* standard facilities}
+
+The following notes may help you achieve the best effects with the MN
+style file.
+
+\subsection{Sections}
+
+\LaTeX\ provides five levels of section headings and they are all
+defined in the MN style file:
+\begin{description}
+ \item \verb"\section"
+ \item \verb"\subsection"
+ \item \verb"\subsubsection"
+ \item \verb"\paragraph"
+ \item \verb"\subparagraph"
+\end{description}
+Section numbers are given for section, subsection, subsubsection
+and paragraph headings. Section headings are automatically converted to
+upper case; if you need any other style, see the example in Section~\ref{headings}.
+
+If you find your section/subsection (etc.)\ headings are wrapping round,
+you must use the \verb"\\*" to end individual lines and include the
+optional argument \verb"[]" in the section command. This ensures that
+the turnover is flushleft.
+
+\subsection{Illustrations (or figures)}
+
+The MN style will cope with most positioning of your illustrations and
+you should not normally use the optional positional qualifiers on the
+\verb"figure" environment which would override these decisions. See
+`Instructions for Authors' in Monthly Notices for submission of
+artwork. Figure captions should be below the figure itself, therefore
+the \verb"\caption" command should appear after the figure or space
+left for an illustration. For example, Fig.~\ref{sample-figure} is
+produced using the following commands:
+%
+\begin{verbatim}
+\begin{figure}
+ \vspace{5.5cm}
+ \caption{An example figure in which space has
+ been left for the artwork.}
+ \label{sample-figure}
+\end{figure}
+\end{verbatim}
+
+\begin{figure}
+ \vspace{5.5cm}
+ \caption{An example figure in which space has been
+ left for the artwork.}
+ \label{sample-figure}
+\end{figure}
+
+\subsection{Tables}
+
+The MN style will cope with most positioning of your tables and you
+should not normally use the optional positional qualifiers on the
+\verb"table" environment which would override these decisions. Table
+captions should be at the top, therefore the \verb"\caption" command
+should appear before the body of the table.
+
+The \verb"tabular" environment can be used to produce tables with
+single horizontal rules, which are allowed, if desired, at the head and
+foot only. This environment has been modified for the MN style in the
+following ways:
+%
+\begin{enumerate}
+ \item additional vertical space is inserted on either side of a rule;
+ \item vertical lines are not produced.
+\end{enumerate}
+%
+Commands to redefine quantities such as \verb"\arraystretch" should be
+omitted. For example, Table~\ref{symbols} is produced using the
+following commands. Note that \verb"\rmn" will produce a roman character
+in math mode. It has been defined in two ways in the source code of
+the guide, one way for authors using the New Font Selection Scheme, and
+the other for authors using the old font selection scheme. There are
+also \verb"\bld" and \verb"\itl", which produce bold face and text italic
+in math mode.
+\begin{table}
+ \caption{Radio-band beaming model parameters
+ for FSRQs and BL Lacs.}
+ \label{symbols}
+ \begin{tabular}{@{}lcccccc}
+ Class & $\gamma _1$ & $\gamma _2$
+ & $\langle \gamma \rangle$
+ & $G$ & $f$ & $\theta _{\rmn{c}}$ \\
+ BL Lacs &5 & 36 & 7 & $-4.0$
+ & $1.0\times 10^{-2}$ & 10$^\circ$ \\
+ FSRQs & 5 & 40 & 11 & $-2.3$
+ & $0.5\times 10^{-2}$ & 14$^\circ$ \\
+ \end{tabular}
+
+ \medskip
+ {\em G} is the slope of the Lorentz factor distribution, i.e.
+ $n(\gamma)\propto \gamma ^G$, extending between $\gamma _1$ and
+ $\gamma_2$, with mean value $\langle \gamma \rangle$, {\em f\/} is the
+ ratio between the intrinsic jet luminosity and the extended, unbeamed
+ luminosity, while $\theta_{\rmn{c}}$ is the critical angle separating
+ the beamed class from the parent population.
+\end{table}
+\begin{verbatim}
+\begin{table}
+ \caption{Radio-band beaming model parameters
+ for FSRQs and BL Lacs.}
+ \label{symbols}
+ \begin{tabular}{@{}lcccccc}
+ Class & $\gamma _1$ & $\gamma _2$
+ & $\langle \gamma \rangle$
+ & $G$ & $f$ & $\theta _{\rmn{c}}$ \\
+ BL Lacs &5 & 36 & 7 & $-4.0$
+ & $1.0\times 10^{-2}$ & 10$^\circ$ \\
+ FSRQs & 5 & 40 & 11 & $-2.3$
+ & $0.5\times 10^{-2}$ & 14$^\circ$ \\
+ \end{tabular}
+
+ \medskip
+ {\em G} is the slope of the Lorentz factor
+ :
+ class from the parent population.
+\end{table}
+\end{verbatim}
+%
+If you have a table that is to extend over two columns, you need to use
+\verb"table*" in a minipage environment, i.e., you can say
+%
+\begin{verbatim}
+\begin{table*}
+\begin{minipage}{80mm}
+ \caption{Caption which will wrap round to the
+ width of the minipage environment.}
+ \begin{tabular}{%
+ :
+ \end{tabular}
+\end{minipage}
+\end{table*}
+\end{verbatim}
+%
+The width of the minipage should more or less be the width of your table,
+so you can only guess on a value on the first pass. The value will have to
+be adjusted when your article is typeset in Times, so don't worry about
+making it the exact size.
+
+\subsection{Running headlines}
+
+As described above, the title of the article and the author's name (or
+authors' names) are used as running headlines at the top of every page.
+The headline on left-hand pages can list up to three names; for more than
+three use et~al. The \verb"\pagestyle" and \verb"\thispagestyle"
+commands should {\em not\/} be used. Similarly, the commands
+\verb"\markright" and \verb"\markboth" should not be necessary.
+
+
+\subsection[]{Typesetting mathematics}\label{TMth}
+
+\subsubsection{Displayed mathematics}
+
+The MN style will set displayed mathematics flush with the left margin,
+provided that you use the \LaTeX\ standard of open and closed square
+brackets as delimiters. The equation
+\[
+ \sum_{i=1}^p \lambda_i = \rmn{trace}(\bld{S})
+\]
+was typeset in the MN style using the commands
+%
+\begin{verbatim}
+\[
+ \sum_{i=1}^p \lambda_i = \rmn{trace}(\bld{S})
+\]
+\end{verbatim}
+%
+Note the difference between the positioning of this equation and of
+the following centred equation,
+$$ \alpha_{j+1} > \bar{\alpha}+ks_{\alpha} $$
+which was (wrongly) typeset using double dollars as follows:
+%
+\begin{verbatim}
+$$ \alpha_{j+1} > \bar{\alpha}+ks_{\alpha} $$
+\end{verbatim}
+
+
+\subsubsection{Bold math italic / bold symbols}
+
+To get bold math italic you can use \verb"\boldmath" (which only works for
+the `normal' size), but in many implementations of \LaTeX\ this has not
+been defined at 9pt. An alternative is to use \verb"\bmath" which works
+for all sizes. e.g.
+%
+\begin{verbatim}
+\[
+ d(\bmath{s_{t_u}}) = \langle [RM(\bmath{X_y}
+ + \bmath{s_t}) - RM(\bmath{x_y})]^2 \rangle
+\]
+\end{verbatim}
+%
+to produce:
+\[
+ d(\bmath{s_{t_u}}) = \langle [RM(\bmath{X_y}
+ + \bmath{s_t}) - RM(\bmath{x_y})]^2 \rangle
+\]
+Working this way, scriptstyle and scriptscriptstyle sizes will take care of themselves.
+
+\subsubsection{Bold Greek}\label{boldgreek}
+
+Bold lowercase Greek characters can now be obtained by prefixing
+the normal (unbold) symbol name with a `b', e.g.\ \verb"\bgamma" gives
+$\bgamma$. This rule does not apply to bold \verb"\eta", as this would lead
+to a name clash with \verb"\beta". Instead use \verb"\boldeta" for bold eta.
+Note that there is no \verb"\omicron" (so there is no \verb"\bomicron"),
+just use `o' in math mode for omicron ($o$) and `\verb"\bmath{o}"' for bold omicron ($\bmath{o}$).
+
+For bold uppercase Greek, prefix the unbold character name with
+\ifoldfss
+%
+\verb"\bf", e.g.\ \verb"\bf\Gamma" gives $\bf\Gamma$.
+%
+\else
+%
+\verb"\mathbf", e.g.\ \verb"\mathbf\Gamma" gives $\mathbf\Gamma$.
+%
+\fi
+Upper and lowercase Greek characters are available in all typesizes.
+
+You can then use these definitions in math mode, as you would normal Greek
+characters:
+%
+\ifoldfss
+%
+\begin{verbatim}
+\[
+ \balpha_{\bmu} = {\bf\Theta} \alpha.
+\]
+\end{verbatim}
+%
+\else
+%
+\begin{verbatim}
+\[
+ \balpha_{\bmu} = \mathbf{\Theta} \alpha.
+\]
+\end{verbatim}
+%
+\fi
+%
+will produce
+%
+\ifoldfss
+%
+\[
+ \balpha_{\bmu} = {\bf\Theta} \alpha.
+\]
+%
+\else
+%
+\[
+ \balpha_{\bmu} = \mathbf{\Theta} \alpha.
+\]
+%
+\fi
+
+\subsubsection{Upright Greek characters}\label{upgreek}
+
+You can obtain upright Greek characters if you have access to the
+American Maths Society Euler fonts (version 2.0), but you may not
+have these. In this case, you will have to use the normal math italic
+symbols and the typesetter will substitute the corresponding upright
+characters. You will make this easier if you can use the macros \verb|\upi|,
+\verb|\umu| and \verb|\upartial| etc.\ in your text to indicate the need for upright characters, together with the following definitions in the preamble
+(before \verb|\begin{document}|):
+
+\subsubsection*{Authors with AMS fonts}
+
+\ifoldfss
+%
+\begin{verbatim}
+\ifCUPmtlplainloaded \else
+ \NewSymbolFont{upmath} {eurm10}
+ \NewMathSymbol{\upi} {0}{upmath}{19}
+ \NewMathSymbol{\umu} {0}{upmath}{16}
+ \NewMathSymbol{\upartial}{0}{upmath}{40}
+\fi
+\end{verbatim}
+%
+\fi
+
+\ifnfssone
+%
+\begin{verbatim}
+\ifCUPmtlplainloaded \else
+ \makeatletter
+ \new@mathgroup\upmath@group
+ \define@mathgroup\mv@normal\upmath@group{eur}{m}{n}
+ \define@mathgroup\mv@bold\upmath@group{eur}{b}{n}
+ \edef\UPM{\hexnumber\upmath@group}
+ \makeatother
+ \mathchardef\upi="0\UPM19
+ \mathchardef\umu="0\UPM16
+ \mathchardef\upartial="0\UPM40
+\fi
+\end{verbatim}
+%
+\fi
+
+\ifnfsstwo
+%
+\begin{verbatim}
+\ifCUPmtlplainloaded \else
+ \DeclareSymbolFont{UPM}{U}{eur}{m}{n}
+ \SetSymbolFont{UPM}{bold}{U}{eur}{b}{n}
+ \DeclareMathSymbol{\upi}{0}{UPM}{"19}
+ \DeclareMathSymbol{\umu}{0}{UPM}{"16}
+ \DeclareMathSymbol{\upartial}{0}{UPM}{"40}
+\fi
+\end{verbatim}
+%
+\fi
+
+\subsubsection*{Authors without AMS fonts}
+
+\begin{verbatim}
+\ifCUPmtlplainloaded \else
+ \def\umu{\mu}
+ \def\upi{\pi}
+ \def\upartial{\partial}
+\fi
+\end{verbatim}
+Wether you have AMS fonts or not, the \verb|\if..| and \verb|\fi| are
+required in the above examples to ensure that when your article is
+typeset in Monotype Times, the correct definitions for these symbols
+are used.
+
+The sample pages and guide can be made to use AMS fonts if you have them.
+To use them, just uncomment the following line in the preamble
+of \verb|mnguide.tex| and \verb|mnsample.tex|:
+%
+\begin{verbatim}
+%\AMStwofontstrue
+\end{verbatim}
+%
+If you do this, the following upright symbols are used in the
+sample pages and guide: \verb|\upi|, \verb|\umu| and \verb|\upartial|.
+
+
+\subsubsection{Special symbols}\label{SVsymbols}
+
+The macros for the special symbols in Tables~\ref{mathmode} and~\ref{anymode}
+have been taken from the Springer Verlag `Astronomy and Astrophysics'
+design, with their permission. They are directly compatible and use the
+same macro names.
+These symbols will work in all text sizes, but are only guaranteed to work
+in text and displaystyles. Some of the symbols will not get any smaller when
+they are used in sub- or superscripts, and will therefore be displayed at the
+wrong size. Don't worry about this as the typesetter will be able to sort
+this out.
+%
+\begin{table*}
+\begin{minipage}{110mm}
+\caption{Special symbols which can only be used in math mode.}
+\label{mathmode}
+\begin{tabular}{@{}llllll}
+Input & Explanation & Output & Input & Explanation & Output\\
+\hline
+\verb"\la" & less or approx & $\la$ &
+ \verb"\ga" & greater or approx & $\ga$\\[2pt]
+\verb"\getsto" & gets over to & $\getsto$ &
+ \verb"\cor" & corresponds to & $\cor$\\[2pt]
+\verb"\lid" & less or equal & $\lid$ &
+ \verb"\gid" & greater or equal & $\gid$\\[2pt]
+\verb"\sol" & similar over less & $\sol$ &
+ \verb"\sog" & similar over greater & $\sog$\\[2pt]
+\verb"\lse" & less over simeq & $\lse$ &
+ \verb"\gse" & greater over simeq & $\gse$\\[2pt]
+\verb"\grole" & greater over less & $\grole$ &
+ \verb"\leogr" & less over greater & $\leogr$\\[2pt]
+\verb"\loa" & less over approx & $\loa$ &
+ \verb"\goa" & greater over approx & $\goa$\\
+\hline
+\end{tabular}
+\end{minipage}
+\end{table*}
+%
+\begin{table*}
+\begin{minipage}{120mm}
+\caption{Special symbols which don't have to be
+used in math mode.}
+\label{anymode}
+\begin{tabular}{@{}llllll}
+Input & Explanation & Output & Input & Explanation & Output\\
+\hline
+\verb"\sun" & sun symbol & $\sun$ &
+ \verb"\degr" & degree & $\degr$\\[2pt]
+\verb"\diameter" & diameter & \diameter &
+ \verb"\sq" & square & \squareforqed\\[2pt]
+\verb"\fd" & fraction of day & \fd &
+ \verb"\fh" & fraction of hour & \fh\\[2pt]
+\verb"\fm" & fraction of minute & \fm &
+ \verb"\fs" & fraction of second & \fs\\[2pt]
+\verb"\fdg" & fraction of degree & \fdg &
+ \verb"\fp" & fraction of period & \fp\\[2pt]
+\verb"\farcs" & fraction of arcsecond & \farcs &
+ \verb"\farcm" & fraction of arcmin & \farcm\\[2pt]
+\verb"\arcsec" & arcsecond & \arcsec &
+ \verb"\arcmin" & arcminute & \arcmin\\
+\hline
+\end{tabular}
+\end{minipage}
+\end{table*}
+
+\subsection{Bibliography}
+
+References to published literature should be quoted in text by author
+and date: e.g. Draine (1978) or (Begelman, Blandford \& Rees 1984).
+Where more than one reference is cited having the same author(s) and date,
+the letters a,b,c, \ldots\ should follow the date; e.g.\ Smith (1988a),
+Smith (1988b), etc.
+
+\subsubsection{References in the text}
+
+References in the text are given by author and date, and, whichever
+method is used to produce the bibliography, the references in the text
+are done in the same way. Each bibliographical entry has a key, which
+is assigned by the author and used to refer to that entry in the text.
+There is one form of citation -- \verb"\cite{key}" -- to produce the
+author and date, and another form -- \verb"\shortcite{key}" -- which
+produces the date only. Thus, Stella \& Campana \shortcite{sc} is
+produced by
+%
+\begin{verbatim}
+Stella \& Campana \shortcite{sc}
+\end{verbatim}
+%
+while \cite{mtw} is produced by
+%
+\begin{verbatim}
+\cite{mtw}
+\end{verbatim}
+%
+When you introduce a three-author paper, you should list all
+three authors at the first citation, and thereafter use et al.
+
+\subsubsection{The list of references}
+
+The following listing shows some references prepared in the style of
+the journal; the code produces the references at the end of this guide.
+The following rules apply for the ordering of your references:
+%
+\begin{enumerate}
+ \item if an author has written several papers, some with other authors,
+ the rule is that the single-author papers precede the two-author
+ papers, which, in turn, precede the multi-author papers;
+ \item within the two-author paper citations, the order is determined
+ by the second author's surname, regardless of date;
+ \item within the multi-author paper citations, the order is
+ chronological, regardless of authors' surnames.
+\end{enumerate}
+%
+\begin{verbatim}
+\begin{thebibliography}{}
+ \bibitem[\protect\citename{Butcher }1992]{bu}
+ Butcher J., 1992, Copy-editing: The Cambridge
+ Handbook, 3rd edn. Cambridge Univ. Press,
+ Cambridge
+ \bibitem[\protect\citename{The Chicago Manual }%
+ 1982]{ch} The Chicago Manual of Style, 1982.
+ Univ. Chicago Press, Chicago
+ \bibitem[\protect\citename{Blanco }1991]{bl}
+ Blanco P., 1991, PhD thesis, Edinburgh
+ University
+ \bibitem[\protect\citename{Brown \& Jones }%
+ 1989]{bj} Brown A. B., Jones C. D., 1989,
+ in Robinson E. F., Smith G. H., eds,
+ Proc. IAU Symp. 345, Black Dwarfs.
+ Kluwer, Dordrecht, p. 210
+ \bibitem[\protect\citename{Edelson }1987]{ed}
+ Edelson R. A., 1987, ApJ, 313, 651
+ \bibitem[\protect\citename{Lamport }1986]{la}
+ Lamport L., 1986, \LaTeX: A Document
+ Preparation System. Addison--Wesley, New York
+ \bibitem[\protect\citename{Mirabel \& Sanders }%
+ 1989]{ms} Mirabel I. F., Sanders D. B., 1989,
+ ApJ, 340, L53
+ \bibitem[\protect\citename{Misner et al.\ }%
+ 1973]{mtw} Misner C. W., Thorne K. S.,
+ Wheeler J. A., 1973, Gravitation.
+ Freeman, San Francisco
+ \bibitem[\protect\citename{Sopp \& Alexander }%
+ 1991]{sa} Sopp H. M., Alexander P., 1991,
+ MNRAS, 251, 112
+ \bibitem[\protect\citename{Stella \& Campana }%
+ 1991]{sc} Stella L., Campana S., 1991, in
+ Treves A., Perola G. C., Stella L., eds,
+ Iron Line Diagnostic in X-ray Sources.
+ Springer--Verlag, Berlin, p. 230
+\end{thebibliography}
+\end{verbatim}
+%
+Each entry takes the form
+%
+\begin{verbatim}
+\bibitem[\protect\citename{Author(s), }%
+ Date]{tag} Bibliography entry
+\end{verbatim}
+%
+where \verb"Author(s)" should be the author names as they are cited in
+the text, \verb"Date" is the date to be cited in the text, and
+\verb"tag" is the tag that is to be used as an argument for the
+\verb"\cite{}" and \verb"\shortcite{}" commands. \verb"Bibliography
+entry" should be the material that is to appear in the bibliography,
+suitably formatted.
+
+\subsection{Appendices}
+
+The appendices in this guide were generated by typing:
+%
+\begin{verbatim}
+\appendix
+\section{For authors}
+ :
+\section{For editors}
+\end{verbatim}
+%
+You only need to type \verb"\appendix" once. Thereafter, every
+\verb"\section" command will generate a new appendix which will be
+numbered A, B, etc.
+
+
+\section[]{Example of section heading with\\*
+ S{\sevensize\bf MALL} C{\sevensize\bf APS},
+ \lowercase{lowercase}, \textbfit{italic},
+ and bold\\* Greek such as
+ $\bmu^{\bkappa}$}\label{headings}
+
+\ifoldfss
+%
+There are at least two ways of achieving this section head. The first
+involves the use of \verb"\boldmath". You could say:
+%
+\begin{verbatim}
+\section[]{Example of section heading with\\*
+ S{\sevensize\bf MALL} C{\sevensize\bf APS},
+ \lowercase{lowercase}, \textbfit{italic},
+ and bold\\* Greek such as
+ \mbox{\boldmath{$\mu^{\kappa}$}}}
+\end{verbatim}
+%
+Many implementations of \LaTeX\ do not support \verb"\boldmath" at 9pt,
+so you may need to use the bold Greek characters as described in
+Section~\ref{boldgreek}, and typeset the section head as follows:
+%
+\begin{verbatim}
+\section[]{Example of section heading with\\*
+ S{\sevensize\bf MALL} C{\sevensize\bf APS},
+ \lowercase{lowercase}, \textbfit{italic},
+ and bold\\* Greek such as
+ $\bmu^{\bkappa}$}
+\end{verbatim}
+%
+\else % nfss
+%
+Was produced with:
+%
+\begin{verbatim}
+\section[]{Example of section heading with\\*
+ S{\sevensize MALL} C{\sevensize APS},
+ \lowercase{lowercase}, \textbfit{italic},
+ and bold\\* Greek such as
+ $\bmu^{\bkappa}$}
+\end{verbatim}
+%
+\fi
+
+\begin{thebibliography}{}
+ \bibitem[\protect\citename{Butcher }1992]{bu}
+ Butcher J., 1992, Copy-editing: The Cambridge
+ Handbook, 3rd edn. Cambridge Univ. Press,
+ Cambridge
+ \bibitem[\protect\citename{The Chicago Manual }%
+ 1982]{ch} The Chicago Manual of Style 1982. Univ.
+ Chicago Press, Chicago
+ \bibitem[\protect\citename{Blanco }1991]{bl}
+ Blanco P., 1991, PhD thesis, Edinburgh
+ University
+ \bibitem[\protect\citename{Brown \& Jones }%
+ 1989]{bj} Brown A. B., Jones C. D., 1989,
+ in Robinson E. F., Smith G. H., eds,
+ Proc. IAU Symp. 345, Black Dwarfs.
+ Kluwer, Dordrecht, p. 210
+ \bibitem[\protect\citename{Edelson }1987]{ed}
+ Edelson R. A., 1987, ApJ, 313, 651
+ \bibitem[\protect\citename{Lamport }1986]{la}
+ Lamport L., 1986, \LaTeX: A Document
+ Preparation System. Addison--Wesley, New York
+ \bibitem[\protect\citename{Mirabel \& Sanders }%
+ 1989]{ms} Mirabel I. F., Sanders D. B., 1989,
+ ApJ, 340, L53
+ \bibitem[\protect\citename{Misner et al.\ }%
+ 1973]{mtw} Misner C. W., Thorne K. S.,
+ Wheeler J. A., 1973, Gravitation.
+ Freeman, San Francisco
+ \bibitem[\protect\citename{Sopp \& Alexander }%
+ 1991]{sa} Sopp H. M., Alexander P., 1991,
+ MNRAS, 251, 112
+ \bibitem[\protect\citename{Stella \& Campana }%
+ 1991]{sc} Stella L., Campana S., 1991, in
+ Treves A., Perola G. C., Stella L., eds,
+ Iron Line Diagnostic in X-ray Sources.
+ Springer--Verlag, Berlin, p. 230
+\end{thebibliography}
+
+
+\appendix
+\section{For authors}
+
+Table~\ref{authors} is a list of design macros which are unique to MN. The
+list displays each macro's name and description.
+
+\begin{table*}
+\begin{minipage}{155mm}
+\caption{Authors' notes.}
+\label{authors}
+\begin{tabular}{@{}ll}
+\verb"\title[optional short title]{long title}"
+ & short title used in running head\\
+\verb"\author[optional short author(s)]{long author(s)}"
+ & short author(s) used in running head\\
+\verb"\newauthor" & starts a new line in the author environment\\
+\verb"\begin{abstract}...\end{abstract}"& for abstract on titlepage\\
+\verb"\begin{keywords}...\end{keywords}"& for keywords on titlepage\\
+\verb"\nokeywords" & if there are no keywords on titlepage\\
+\verb"\begin{figure*}...\end{figure*}" & for a double spanning figure in two-column mode\\
+\verb"\begin{table*}...\end{table*}" & for a double spanning table in
+ two-column mode\\
+\verb"\plate{Opposite p.~812, MNRAS, {\bf 261}}"
+ & used with \verb"\thispagestyle{plate}" for plate pages\\
+\verb"\contcaption{}" & for continuation figure and table captions\\
+\verb"\bmath{math text}" & Bold math italic / symbols.\\
+\verb"\textbfit{text}", \verb"\mathbfit{text}" & Bold text italic
+ (defined in the preamble of \verb"mnsample.tex").\\
+\verb"\textbfss{text}", \verb"\mathbfss{text}" & Bold text sans serif
+ (defined in the preamble of \verb"mnsample.tex").\\
+\end{tabular}
+\end{minipage}
+\end{table*}
+
+
+\section{For editors}
+
+The additional features shown in Table~\ref{editors} may be used for
+production purposes.
+
+\begin{table*}
+\begin{minipage}{155mm}
+\caption{Editors' notes.}
+\label{editors}
+\begin{tabular}{@{}lp{270pt}}
+\verb"\pagerange{000--000}"& for catchline, note use of en-rule\\
+\verb"\pagerange{L00--L00}"& for letters option, used in catchline\\
+\verb"\volume{000}" & volume number, for catchline\\
+\verb"\pubyear{0000}" & publication year, for catchline\\
+\verb"\microfiche{MN000/0}" & for articles accompanied by microfiche\\
+\verb"\journal" & replace the whole catchline at one go\\
+\verb"[doublespacing]" & documentstyle option for doublespacing\\
+\verb"[galley]" & documentstyle option for running to galley\\
+\verb"[landscape]" & documentstyle option for landscape illustrations\\
+\verb"[letters]" & documentstyle option, for short communications
+ (adds L to folios)\\
+\verb"[onecolumn]" & documentstyle option for one-column \\
+\verb"[referee]" & documentstyle option for 12/20pt, single col,
+ 39pc measure\\
+\verb"\bsp" & typesets the final phrase `This paper has been produced
+ using the\\
+ & Royal Astronomical Society/Blackwell Science \LaTeX\ style
+ file.'\\
+\end{tabular}
+\end{minipage}
+\end{table*}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\makeatletter
+% define \thebiblio (same as thebibliography, but
+% without the section heading)
+\def\thebiblio#1{%
+ \list{}{\usecounter{dummy}%
+ \labelwidth\z@
+ \leftmargin 1.5em
+ \itemsep \z@
+ \itemindent-\leftmargin}
+ \reset@font\small
+ \parindent\z@
+ \parskip\z@ plus .1pt\relax
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax
+}
+\let\endthebiblio=\endlist
+\makeatother
+
+
+\section{Monthly Notices journal style}
+
+Authors submitting \TeX\ or \LaTeX\ papers to Monthly Notices
+may wish to note the following points regarding journal style.
+Adherence to correct style from the start will obviously save time
+and effort later on, in terms of fewer requested subeditorial
+corrections. The notes given here relate to common style errors found
+in Monthly Notices manuscripts, and are {\it not\/} intended to be
+exhaustive. Please see the editorials in issues 257/2 and 260/1, as
+well as any recent issue of the journal, for more details. As far
+as possible, the subeditor will indicate which of your changes
+would be best done globally, thus saving you time.
+
+\subsection{Punctuation}
+
+When deciding where to add commas, it may be helpful to read
+through the sentence and note where the natural `pauses' occur.
+The needs of readers for whom English is not a first language
+should be borne in mind when punctuating long sentences. For
+example, consider the following sentence as it appeared in Monthly Notices:
+`When we do not limit ourselves by constraints arising
+from the choice of an initial fluctuation spectrum, structures in
+an open universe, including the peculiar velocity structure, can
+be reproduced in a flat Lema\^{\i}tre universe for a large part of
+their evolution.' Now consider the same sentence without commas:
+`When we do not limit ourselves by constraints arising from the
+choice of an initial fluctuation spectrum structures in an open
+universe including the peculiar velocity structure can be reproduced
+in a flat Lema\^{\i}tre universe for a large part of their
+evolution.'
+
+\subsection{Spelling}
+
+Please use British spelling -- e.g.\ centre not center, labelled
+not labeled. The following style regarding -ise and -ize spellings is
+followed. -ise: devise, surprise, comprise, revise,
+exercise, analyse. -ize: recognize, criticize, minimize, emphasize, organize.
+
+\subsection{Titles and section/subsection headings}
+
+With the exception of section headings (e.g.\
+{\bf INTRO\-DUC\-TION}\ldots),
+capital letters should be used only where they occur in a normal
+sentence -- e.g.\
+`\textbfit{ROSAT\/} {\bf observations of the unusual star}\ldots', not
+`\textbfit{ROSAT\/} {\bf Observations of the Unusual Star}\ldots'.
+
+\subsection{Key words}
+
+The list of Monthly Notices key words is published with the 4th
+issue of each volume. No other key words should be used. Please
+use the correct layout for key words:
+\smallskip
+
+\noindent {\bf Key words:} galaxies: active -- galaxies: Seyfert --
+radio continuum: galaxies.
+
+\subsection{Hyphens and N-rules}
+
+\begin{enumerate}
+\item Hyphens (one dash in \TeX/\LaTeX). Monthly Notices uses hyphens
+for compound adjectives (e.g.\ low-density gas, least-squares fit,
+two-component model). This also applies to simple units (e.g.\
+1.5-m telescope, 284.5-nm line), but not to complex units or
+ranges, which could become cumbersome (e.g.\ 15 km s$^{-1}$ feature,
+100--200 $\umu$m observations).
+
+\item N-rules (two dashes in \TeX/\LaTeX). These are used (a) to
+separate key words, (b) as parentheses (e.g.\ `the results --
+assuming no temperature gradient -- are indicative of\ldots), (c) to
+denote a range (e.g.\ 1.6--2.2 $\umu$m), and (d) to denote the joining
+of two words (e.g.\ Kolmogorov--Smirnov test, Herbig--Haro
+object).
+
+\item The M-rule (three dashes in \TeX/\LaTeX) is not used in
+Monthly Notices.
+\end{enumerate}
+
+
+\subsection{References}
+
+It is important to use the correct reference style, details of
+which can be found in the editorials cited above, and which is
+demonstrated in any recent issue of the journal. The main points
+are summarized below.
+%
+\begin{enumerate}
+\item In text -- for three-author papers, give all three authors
+at first mention, and `et al.' thereafter.
+
+\item In references list -- no bold or italic, no commas after
+author surnames, and no ampersand between final two author names.
+Use simplified abbreviations for frequently used journals (e.g.\
+MNRAS, ApJ, A\&A, PASP -- see full list in editorial in issue
+260/1). List all authors if eight or less, otherwise `et al.' For
+example,
+\end{enumerate}
+
+\begin{thebiblio}{}% you should use {thebibliography} here.
+\bibitem{} Biggs J.D., Lyne A.G., 1992, MNRAS, 254, 257
+
+\bibitem{} Brown A.B., Jones C.D., 1989, in Robinson E.F.,
+Smith G.H., eds, Proc. IAU Symp. 345, Black Dwarfs. Kluwer, Dordrecht,
+p.~210
+
+\bibitem{} Felsteiner J., Opher R., 1991, in Treves A., ed.,
+Iron Line Diagnostics in X-ray Sources. Springer-Verlag, Berlin, p.~209
+
+\bibitem{} Gunn J.E., Knapp G., 1993, in Soifer B.T., ed., ASP
+Conf.\ Ser.\ Vol.~43, Sky Surveys. Astron.\ Soc.\ Pac., San Francisco, p.~267
+
+\bibitem{} Peebles P.J.E., 1980, The Large-Scale Structure of the Universe. Princeton Univ. Press, Princeton, NJ
+
+\bibitem{} Pounds K.A. et al., 1993, MNRAS, 260, 77
+
+\bibitem{} Williams B.G., 1992, PhD thesis, Univ.\ Edinburgh
+\end{thebiblio}
+
+\subsection{Maths}
+Scalar variables are italic; vectors are bold italic; matrices
+are `bold Univers' font (like bold sans serif). Differential d,
+complex i, exponential e, sin, cos, tan, log, etc., are roman.
+Sub/superscripts that are physical variables are italic, while
+those that are just labels are roman (e.g.\ $C_p$, but $T_{\rmn{eff}}$).
+Equations should be punctuated as part of the sentence.
+
+\subsection{Miscellaneous}
+
+e.g., i.e., cf., etc., are roman.
+Single quotes ` ' not double quotes `` ".
+Take care to use correct units -- see recent \hbox{issues} for details.
+Use superscript $-1$, not solidus /, for units -- e.g.\ km~s$^{-1}$ not
+km/s. The unit of arcseconds is arcsec when used to denote angular
+size or separation (e.g.\ `beamsize 12~arcsec', `30~arcsec
+west of the star'); use \arcsec\ for positions (e.g.\
+Dec.~$-30^\circ$~29\arcmin~23\arcsec) (similarly for arcminutes).
+The unit of magnitudes is mag,
+not superscript m. Percentages should be written `per cent', not
+\%. Use the degree symbol $^\circ$ (\verb"$^\circ$") except to denote, e.g., areas, where
+`deg$^2$' may be more appropriate (e.g.\ `a survey area of 3~deg$^2$').
+Degree symbols should be positioned above the decimal point if
+there is one -- i.e.\ 23\fdg 4 not 23.4$^\circ$ (similarly for superscript
+h, m, s, and \arcmin, \arcsec\ symbols in coordinates). See guide for coding.
+Ionized species should be denoted by small caps, with a thin
+space -- e.g.\ \hbox{He\,{\sc ii}}, \hbox{C\,{\sc iv}},
+\hbox{[Fe\,{\sc ii}]} 465.8 nm, \hbox{N\,{\sc iii}} 463.4~nm. If
+lack of the correct font at your site prevents this from coming
+out on your printout, it would be helpful if you were to indicate
+as such on your manuscript so that the subeditor knows that there
+is no need for correction.
+Computer software (e.g.\ {\sc figaro}) should be in small capitals.
+Satellite names should be italic (e.g.\ {\it Ginga, IRAS\/}).
+The correct bracket order is \{[( )]\}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\section{Trouble-shooting}
+
+Authors may from time to time encounter problems with the preparation
+of their papers in \TeX/\LaTeX. The appropriate action to
+take will depend on the nature of the problem -- the following is
+intended to act as a guide.
+%
+\begin{enumerate}
+\item If a problem is with \TeX/\LaTeX\ itself, rather than with the
+actual macros, please refer to the appropriate handbooks for
+initial advice.\footnote{\TeX : Knuth D., 1986, The \TeX book.
+Addison Wesley; \LaTeX: Lamport L., 1985, \LaTeX\ User's Guide and
+Reference Manual. Addison Wesley.} If the
+solution cannot be found, and you suspect that the problem lies
+with the macros, then please contact the RAS Journal Production
+team at Blackwell Science (BS), 23 Ainslie
+Place, Edinburgh EH3 6AJ, UK (Tel: 031 226 7232; Fax: 031 226 3803;
+omit the first zero if calling from outside the UK).
+The BS office will shortly be
+accessible by email -- please see the Instructions for Authors on
+the inside back cover of Monthly Notices for details. Please
+provide precise details of the problem (what you were trying to
+do -- ideally, include examples of source code as well -- and
+what exactly happened; what error message was received).
+
+\item Problems with page make-up, particularly in the two-column
+mode (e.g.\ large spaces between paragraphs, or under headings or
+figures; uneven columns; figures/tables appearing out of order).
+Please do {\it not\/} attempt to remedy these yourself using `hard' page
+make-up commands -- the typesetters at Cambridge University Press
+(CUP) will sort out problems when typesetting. (You may, if you
+wish, draw attention to particular problems when submitting the
+final version of your paper.)
+
+\item If a required font is not available at your site, allow \TeX\
+to substitute the font and report the problem on your disk
+documentation form.
+
+\item If you choose to use \verb"\boldmath", you may find that boldmath has not been defined locally for use with a particular size of font. If this is the case, you will get a message that reads something like:
+%
+\begin{verbatim}
+LaTeX Warning: No \boldmath typeface in this size,
+using \unboldmath on input line 44.
+\end{verbatim}
+
+If you get this message, you are advised to use the alternative described
+in this guide for attaining bold face math italic characters,
+i.e.\ \verb"\bmath{...}".
+\end{enumerate}
+
+
+\subsection{Fixes for coding problems}
+
+The new versions of the style files and macros have been designed
+to minimize the need for user-defined macros to create special
+symbols. Authors are urged, wherever possible, to use the following
+coding rather than create their own. This will minimize the
+danger of author-defined macros being accidentally `over-ridden'
+when the paper is typeset in Monotype Times (see Section~\ref{TMth},
+`Typesetting mathematics', in the \LaTeX\ author guide).
+%
+\begin{enumerate}
+\item Fonts in sections and paper titles. The following are examples
+of styles that sometimes prove difficult to code.
+\end{enumerate}
+
+
+\subsubsection*{P\lowercase{aper titles}}
+
+\boxit{\huge\bf
+ A survey of \textbfit{IRAS\/} galaxies at
+ $\bmath{\delta > \bld{50}^\circ}$}
+%
+is produced by:
+%
+\begin{verbatim}
+\title[A survey of IRAS galaxies at
+ $\delta > 50^\circ$]
+ {A survey of \textbfit{IRAS\/} galaxies at
+ $\bmath{\delta > \bld{50}^\circ}$}
+\end{verbatim}
+\bigskip
+
+\boxit{\huge\bf Observations of compact H\,{\Large\bf II} regions}
+%
+is produced by:
+%
+\begin{verbatim}
+\title[Observations of compact H\,{\normalsize
+ \it II} regions]
+ {Observations of compact H\,{\Large\bf II}
+ regions}
+\end{verbatim}
+
+
+\subsubsection*{S\lowercase{ection headings}}
+
+\boxit{\bf 1\quad THE \textbfit{IRAS\/} DATA FOR
+ $\bmath{\delta > \bld{50}^\circ}$}
+%
+is produced by:
+%
+\begin{verbatim}
+\section[]{The \textbfit{IRAS\/} data for
+ $\bmath{\delta > \bld{50}^\circ}$
+\end{verbatim}
+\bigskip
+
+\boxit{\bf 2\quad H\,{\sevensize\bf II} GALAXIES AT
+ $\bmath{\lowercase{z} > \bld{1.6}}$}
+%
+is produced by:
+%
+\begin{verbatim}
+\section[]{H\,{\sevensize\bf II} galaxies at
+ $\bmath{\lowercase{z} > \bld{1.6}}$}
+\end{verbatim}
+
+
+\subsubsection*{S\lowercase{ubsection headings}}
+
+\boxit{\bf 2.1\quad The \textbfit{IRAS\/} data for
+ $\bmath{\delta > \bld{50}^\circ}$: galaxies\\
+ at $\bmath{z > \bld{1.5}}$}
+%
+is produced by:
+%
+\begin{verbatim}
+\subsection[]{The \textbfit{IRAS\/} data for
+ $\bmath{\delta > \bld{50}^\circ}$: galaxies\\
+ at $\bmath{z > \bld{1.5}}$}
+\end{verbatim}
+\bigskip
+
+\boxit{\bf 2.2\quad Observations of compact H\,{\sevensize\bf II} regions}
+%
+is produced by:
+%
+\begin{verbatim}
+\subsection[]{Observations of compact
+ H\,{\sevensize\bf II} regions}
+\end{verbatim}
+\bigskip
+
+\boxit{\it 2.2.1\quad A survey of radio galaxies for
+ $\delta > \itl{50}^\circ$}
+%
+is produced by:
+%
+\begin{verbatim}
+\subsubsection[]{A survey of radio galaxies for
+ $\delta > \itl{50}^\circ$}
+\end{verbatim}
+\bigskip
+
+\boxit{\it 2.2.2\quad Determination of T$_{eff}$ in compact
+ H\,{\sevensize\it II} regions}
+%
+is produced by:
+%
+\begin{verbatim}
+\subsubsection[]{Determination of T$_{eff}$ in
+ compact H\,{\sevensize\it II} regions}
+\end{verbatim}
+\bigskip
+
+\begin{enumerate}
+\stepcounter{enumi}
+
+\item Small capitals and other unusual fonts in table and figure captions:
+\par\smallskip
+\boxit{\small {\bf Figure 1.} Profiles of the H$\alpha$ and
+ N\,{\sc iii} lines observed.}
+%
+is produced by:
+%
+\begin{verbatim}
+\caption{Profiles of the H$\alpha$ and
+ N\,{\sc iii} lines observed.}
+\end{verbatim}
+
+\item Multiple author lists (to get the correct vertical spacing
+and wraparound on the title page of a multiple-author paper).
+\par\smallskip
+
+\boxit{\huge\bf
+ The variation in the\newline
+ strength of low-$\bmath{l}$ solar
+ $\bmath{p}$-modes: 1981--2
+\medskip
+
+\LARGE
+ Y. Elsworth, R. Howe, G.R. Isaac, C.P. McLeod,
+ B.A. Miller, R. New,
+ C.C. Speake and S.J. Wheeler}
+%
+is produced by:
+%
+\begin{verbatim}
+\title[The variation in the strength of low-$l$
+ solar $p$-modes: 1981--2]%
+ {The variation in the strength of
+ low-$\bmath{l}$ solar
+ $\bmath{p}$-modes: 1981--2}
+
+\author[Y. Elsworth et al.]
+ {Y. Elsworth, R. Howe, G.R. Isaac,\cr
+ C.P. McLeod, B.A. Miller, R. New,\cr
+ C.C. Speake and S.J. Wheeler}
+\end{verbatim}
+
+\item Ionized species (as used in the examples above). The correct
+style calls for the use of small capitals and a thin space after
+the symbol for the element: e.g.\ for \hbox{H\,{\sc ii}}, use the code
+\verb"\hbox{H\,{\sc ii}}". The use of the \verb"\hbox" will stop the
+H and the {\sc ii} being separated.
+
+\item Lower case greek pi ($\pi$), mu ($\mu$) and partial ($\partial$).
+In certain circumstances, the Monthly Notices style calls for these to be
+roman [when pi is used to denote the constant 3.1415$\ldots$, mu is
+used to denote `micro' in a unit (e.g.\ $\umu$m, $\umu$Jy), and partial
+is a differential symbol]. See Subsubsection~\ref{upgreek} for instructions.
+
+\item Decimal degrees, arcmin, arcsec, hours, minutes and seconds.
+The symbol needs to be placed vertically above the decimal point.
+For example, the sentence
+%
+\begin{quote}
+The observations were made along position angle
+120\fdg 5, starting from the central coordinates
+$\rmn{RA}(1950)=19^{\rmn{h}}~22^{\rmn{m}}~18\fs2$,
+$\rmn{Dec.}~(1950)=45^\circ~18'~36\farcs 4$
+\end{quote}
+%
+uses the following coding:
+%
+\begin{verbatim}
+The observations were made along position angle
+120\fdg 5, starting from the central coordinates
+$\rmn{RA}(1950)=19^{\rmn{h}}~22^{\rmn{m}}~18\fs2$,
+$\rmn{Dec.}~(1950)=45^\circ~18'~36\farcs 4$
+\end{verbatim}
+
+\item The correct coding for the prime symbol \arcmin\ is
+\verb"\arcmin", and that for \arcsec\ is \verb"\arcsec"; see the two
+tables on special symbols.
+
+\item N-rules, hyphens and minus signs (see style guide for
+correct usage). To create the correct symbols in the sentence
+%
+\begin{quote}
+The high-resolution observations were made along a
+line at an angle of $-15^\circ$ (east from north)
+from the axis of the jet, which runs north--south
+\end{quote}
+you would use the following code:
+%
+\begin{verbatim}
+The high-resolution observations were made along a
+line at an angle of $-15^\circ$ (east from north)
+from the axis of the jet, which runs north--south
+\end{verbatim}
+
+\item Vectors and matrices should be bold italic and bold sans
+serif respectively. To create the correct fonts for the vector $\bmath{x}$
+and the matrix \textbfss{P}, you should use \verb"$\bmath{x}$" and
+\verb"\textbfss{P}" respectively; \verb"\mathbfss" is for use in
+math mode. Bold face text italic can be obtained by using
+\verb"\textbfit{..}" and \verb"\mathbfit{..}" for math mode.
+
+\item Bold italic superscripts and subscripts. To get these
+to come out in the correct font and the right size,
+you need to use \verb"\bmath". You can create the output
+$\bmath{k_x}$ by typing \verb"$\bmath{k_x}$".
+Try to avoid using \LaTeX\ commands to determine script sizes
+that are already defined in the style file. For example, macros such as
+%
+\begin{verbatim}
+\newcommand{\th}{^\mbox{\tiny th}}
+\end{verbatim}
+%
+are generating extra work;
+%
+\begin{verbatim}
+\newcommand{\th}{^{th}}
+\end{verbatim}
+%
+will do, and will get the size of the superscript right whether
+in main text, tables or captions (the use of \verb"\tiny" over-rides
+the style file).
+Also, the \verb"\mbox" is not necessary, as \TeX\ won't split a
+superscript/subscript from its variable at a line break.
+
+\item Calligraphic letters (uppercase only).
+%
+\ifnfsstwo
+%
+Normal uppercase calligraphic can be produced with \verb"\mathcal" as
+normal (in math mode). Bold calligraphic can be produced with \verb"\bmath".
+e.g.\ \verb"$\bmath{\mathcal A}$" gives $\bmath{\mathcal A}$.
+%
+\else
+%
+Normal uppercase calligraphic can be produced with \verb"\cal" as
+normal (in math mode). Bold calligraphic can be produced with \verb"\bmath".
+e.g.\ \verb"$\bmath{\cal A}$" gives $\bmath{\cal A}$.
+%
+\fi
+
+\item Automatic scaling of brackets. The codes \verb"\left" and
+\verb"\right" should be used to scale brackets automatically to
+fit the equation being set. For example, to get
+\[
+ v = x \left( \frac{N+2}{N} \right)
+\]
+use the code
+%
+\begin{verbatim}
+\[
+ v = x \left( \frac{N+2}{N} \right)
+\]
+\end{verbatim}
+
+\item Roman font in equations. It is often necessary to make some
+symbols roman in an equation (e.g.\ units, subscripts). For example,
+to get the following output:
+\[
+ \sigma \simeq (r/13~h^{-1}~\rmn{Mpc})^{-0.9},
+ \qquad \omega = \frac{N-N_{\rmn{s}}}{N_{\rmn{R}}},
+\]
+you should use:
+%
+\begin{verbatim}
+\[
+ \sigma \simeq (r/13~h^{-1}~\rmn{Mpc})^{-0.9},
+ \qquad \omega=\frac{N-N_{\rmn{s}}}{N_{\rmn{R}}},
+\]
+\end{verbatim}
+
+\item Continuation figure and table captions.
+See Section~\ref{contfigtab}.
+\end{enumerate}
+
+
+\subsection{Springer-Verlag macro names}
+
+These have been incorporated from the Astronomy \& Astrophysics \LaTeX\
+style file, to aid in the creation of various commonly used
+astronomical symbols. Please see Subsection~\ref{SVsymbols} for details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\bsp % ``This paper has been produced using the ...''
+
+\label{lastpage}
+
+\end{document}
diff --git a/obsolete/macros/latex209/contrib/mnras/mnland.tex b/obsolete/macros/latex209/contrib/mnras/mnland.tex
new file mode 100644
index 0000000000..c462b066b6
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/mnras/mnland.tex
@@ -0,0 +1,34 @@
+% mnland.tex, landscape material for sample pages
+% v1.1 released 18th July 1994
+% v1.0 released 28th January 1994
+
+\documentstyle[landscape]{mn}
+
+\ifoldfss
+ \newcommand{\rmn}[1] {{\rm #1}}
+\else
+ \newcommand{\rmn}[1] {\mathrm{#1}}
+\fi
+
+\pagestyle{empty}
+
+\begin{document}
+
+% only use the following if your dvi driver understands `landscape'
+%\hbox{\special{landscape}}
+
+\clearpage
+\setcounter{figure}{3}
+\begin{figure*}
+\vspace{144mm}
+\caption{Photometric comparisons in the overlap areas between the
+ fields. The differences between photometry of individual images from
+ different fields for the overlapping fields 52--51, 50--51, 50--28 and
+ 30--29 are shown for the $B_{\rmn{J}}$ and $R$ wavebands. The axes are as
+ follows. Left-hand panels: $\Delta B$ ($-1$ to 1) against
+ $\langle B \rangle$ (13 to 21). Right-hand panels: $\Delta R$ ($-1$ to 1)
+ against $\langle R \rangle$ (12 to 20).}
+\label{landfig}
+\end{figure*}
+
+\end{document}
diff --git a/obsolete/macros/latex209/contrib/mnras/mnsample.tex b/obsolete/macros/latex209/contrib/mnras/mnsample.tex
new file mode 100644
index 0000000000..ec0105d7a4
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/mnras/mnsample.tex
@@ -0,0 +1,743 @@
+% mnsample.tex
+%
+% v1.2 released 5th September 1994 (M. Reed)
+% v1.1 released 18th July 1994
+% v1.0 released 28th January 1994
+
+\documentstyle{mn}
+
+% If your system has the AMS fonts version 2.0 installed, MN.sty can be
+% made to use them by uncommenting the line: %\AMStwofontstrue
+%
+% By doing this, you will be able to obtain upright Greek characters.
+% e.g. \umu, \upi etc. See the section on "Upright Greek characters" in
+% this guide for further information.
+%
+% If you are using AMS 2.0 fonts, bold math letters/symbols are available
+% at a larger range of sizes for NFSS release 1 and 2 (using \boldmath or
+% preferably \bmath).
+
+\newif\ifAMStwofonts
+%\AMStwofontstrue
+
+%%%%% AUTHORS - PLACE YOUR OWN MACROS HERE %%%%%
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\ifoldfss
+ %
+ \newcommand{\rmn}[1] {{\rm #1}}
+ \newcommand{\itl}[1] {{\it #1}}
+ \newcommand{\bld}[1] {{\bf #1}}
+ %
+ \ifCUPmtlplainloaded \else
+ \NewTextAlphabet{textbfit} {cmbxti10} {}
+ \NewTextAlphabet{textbfss} {cmssbx10} {}
+ \NewMathAlphabet{mathbfit} {cmbxti10} {} % for math mode
+ \NewMathAlphabet{mathbfss} {cmssbx10} {} % " " "
+ \fi
+ %
+ \ifAMStwofonts
+ %
+ \ifCUPmtlplainloaded \else
+ \NewSymbolFont{upmath} {eurm10}
+ \NewSymbolFont{AMSa} {msam10}
+ \NewMathSymbol{\upi} {0}{upmath}{19}
+ \NewMathSymbol{\umu} {0}{upmath}{16}
+ \NewMathSymbol{\upartial}{0}{upmath}{40}
+ \NewMathSymbol{\leqslant}{3}{AMSa}{36}
+ \NewMathSymbol{\geqslant}{3}{AMSa}{3E}
+ \let\oldle=\le \let\oldleq=\leq
+ \let\oldge=\ge \let\oldgeq=\geq
+ \let\leq=\leqslant \let\le=\leqslant
+ \let\geq=\geqslant \let\ge=\geqslant
+ \fi
+ %
+ \fi
+%
+\fi % End of OFSS
+
+\ifnfssone
+ %
+ \newmathalphabet{\mathit}
+ \addtoversion{normal}{\mathit}{cmr}{m}{it}
+ \addtoversion{bold}{\mathit}{cmr}{bx}{it}
+ %
+ \newcommand{\rmn}[1] {\mathrm{#1}}
+ \newcommand{\itl}[1] {\mathit{#1}}
+ \newcommand{\bld}[1] {\mathbf{#1}}
+ %
+ \def\textbfit{\protect\txtbfit}
+ \def\textbfss{\protect\txtbfss}
+ \long\def\txtbfit#1{{\fontfamily{cmr}\fontseries{bx}\fontshape{it}%
+ \selectfont #1}}
+ \long\def\txtbfss#1{{\fontfamily{cmss}\fontseries{bx}\fontshape{n}%
+ \selectfont #1}}
+ %
+ \newmathalphabet{\mathbfit} % math mode version of \textbfit{..}
+ \addtoversion{normal}{\mathbfit}{cmr}{bx}{it}
+ \addtoversion{bold}{\mathbfit}{cmr}{bx}{it}
+ %
+ \newmathalphabet{\mathbfss} % math mode version of \textbfss{..}
+ \addtoversion{normal}{\mathbfss}{cmss}{bx}{n}
+ \addtoversion{bold}{\mathbfss}{cmss}{bx}{n}
+ %
+ \ifAMStwofonts
+ %
+ \ifCUPmtlplainloaded \else
+ %
+ % Make NFSS 1 use the extra sizes available for bold math italic and
+ % bold math symbol. These definitions may already be loaded if your
+ % NFSS format was built with fontdef.max.
+ %
+ \UseAMStwoboldmath
+ %
+ \makeatletter
+ \new@mathgroup\upmath@group
+ \define@mathgroup\mv@normal\upmath@group{eur}{m}{n}
+ \define@mathgroup\mv@bold\upmath@group{eur}{b}{n}
+ \edef\UPM{\hexnumber\upmath@group}
+ %
+ \new@mathgroup\amsa@group
+ \define@mathgroup\mv@normal\amsa@group{msa}{m}{n}
+ \define@mathgroup\mv@bold\amsa@group{msa}{m}{n}
+ \edef\AMSa{\hexnumber\amsa@group}
+ \makeatother
+ %
+ \mathchardef\upi="0\UPM19
+ \mathchardef\umu="0\UPM16
+ \mathchardef\upartial="0\UPM40
+ \mathchardef\leqslant="3\AMSa36
+ \mathchardef\geqslant="3\AMSa3E
+ %
+ \let\oldle=\le \let\oldleq=\leq
+ \let\oldge=\ge \let\oldgeq=\geq
+ \let\leq=\leqslant \let\le=\leqslant
+ \let\geq=\geqslant \let\ge=\geqslant
+ %
+ \fi
+ \fi
+ %
+\fi % End of NFSS release 1
+
+\ifnfsstwo
+ %
+ \newcommand{\rmn}[1] {\mathrm{#1}}
+ \newcommand{\itl}[1] {\mathit{#1}}
+ \newcommand{\bld}[1] {\mathbf{#1}}
+ %
+ \def\textbfit{\protect\txtbfit}
+ \def\textbfss{\protect\txtbfss}
+ \long\def\txtbfit#1{{\fontfamily{cmr}\fontseries{bx}\fontshape{it}%
+ \selectfont #1}}
+ \long\def\txtbfss#1{{\fontfamily{cmss}\fontseries{bx}\fontshape{n}%
+ \selectfont #1}}
+ %
+ \DeclareMathAlphabet{\mathbfit}{OT1}{cmr}{bx}{it}
+ \SetMathAlphabet\mathbfit{bold}{OT1}{cmr}{bx}{it}
+ \DeclareMathAlphabet{\mathbfss}{OT1}{cmss}{bx}{n}
+ \SetMathAlphabet\mathbfss{bold}{OT1}{cmss}{bx}{n}
+ %
+ \ifAMStwofonts
+ %
+ \ifCUPmtlplainloaded \else
+ \DeclareSymbolFont{UPM}{U}{eur}{m}{n}
+ \SetSymbolFont{UPM}{bold}{U}{eur}{b}{n}
+ \DeclareSymbolFont{AMSa}{U}{msa}{m}{n}
+ \DeclareMathSymbol{\upi}{0}{UPM}{"19}
+ \DeclareMathSymbol{\umu}{0}{UPM}{"16}
+ \DeclareMathSymbol{\upartial}{0}{UPM}{"40}
+ \DeclareMathSymbol{\leqslant}{3}{AMSa}{"36}
+ \DeclareMathSymbol{\geqslant}{3}{AMSa}{"3E}
+ %
+ \let\oldle=\le \let\oldleq=\leq
+ \let\oldge=\ge \let\oldgeq=\geq
+ \let\leq=\leqslant \let\le=\leqslant
+ \let\geq=\geqslant \let\ge=\geqslant
+ %
+ \fi
+ \fi
+ %
+\fi % End of NFSS release 2
+
+\ifCUPmtlplainloaded \else
+ \ifAMStwofonts \else % If no AMS fonts
+ \def\upi{\pi}
+ \def\umu{\mu}
+ \def\upartial{\partial}
+ \fi
+\fi
+
+
+\title{Dust envelopes around RV Tauri stars}
+\author[A. V. Raveendran]
+ {A. V. Raveendran \\
+ Indian Institute of Astrophysics, Bangalore 560034, India}
+\date{Accepted 1988 December 15.
+ Received 1988 December 14;
+ in original form 1988 October 11}
+
+\pagerange{\pageref{firstpage}--\pageref{lastpage}}
+\pubyear{1994}
+
+\begin{document}
+
+\maketitle
+
+\label{firstpage}
+
+\begin{abstract}
+In the {\it IRAS\/} [12]--[25], [25]--[60] colour--colour diagram, RV
+Tauri stars are found to populate cooler temperature regions
+$(T<600\,\rmn{K})$, distinctly different from those occupied by the
+oxygen and carbon Miras. The {\it IRAS\/} fluxes are consistent with the
+dust density in the envelope varying as the inverse square of the
+radial distance, implying that the grain formation processes in these
+objects are most probably continuous and not sporadic. It is found that
+the spectroscopic subgroups A and B are well separated in the
+far-infrared two-colour diagram, with group B objects having
+systematically cooler dust envelopes. We interpret this as being due to
+a difference in the nature of grains, including the chemical
+composition, in the two cases.
+\end{abstract}
+
+\begin{keywords}
+circumstellar matter -- infrared: stars.
+\end{keywords}
+
+\section{Introduction}
+
+It has been well established that RV Tauri variables possess infrared
+emission far in excess of their expected blackbody continuum, arising
+from their extended cool dust envelopes (Gehrz \& Woolf 1970; Gehrz
+1972; Gehrz \& Ney 1972). Recently, Lloyd Evans (1985) and Goldsmith
+et al.\ (1987) have given detailed descriptions of the
+near-infrared properties of RV Tauri stars. In this paper we present an
+analysis of the {\it IRAS\/} data of RV Tauri stars with the help of the
+far-infrared two-colour diagram and a grid computed using a simple
+model of the dust envelope. Such two-colour plots have already been
+employed extensively by several investigators to study the
+circumstellar envelopes around oxygen-rich and carbon-rich objects
+which are in the late stages of stellar evolution (Hacking et al.\
+1985; Zuckerman \& Dyck 1986; van der Veen \& Habing 1988; Willems \&
+de Jong 1988).
+
+Table 1 summarizes the basic data on the 17 objects detected at
+\hbox{60\,$\umu$m}. Apart from the {\it IRAS\/} identification and the flux
+densities at 12-, 25-, 60- and 100-$\umu$m wavebands, it gives the
+spectroscopic groups of Preston et al.\ (1963), the light-curve classes
+of Kukarkin et al.\ (1969) and the periods of light variation. The
+list, which contains about 20 per cent of all the known RV Tauri
+stars, is essentially the same as that given by Jura (1986). The
+spectroscopic subgroups are from either Preston et al.\ (1963) or Lloyd
+Evans (1985).
+\begin{table*}
+ \centering
+ \begin{minipage}{140mm}
+ \caption{Data on the RV Tauri stars detected by {\it IRAS}.}
+ \begin{tabular}{@{}llrrrrlrlr@{}}
+ Name & & \multicolumn{4}{c}{Flux density (Jy)%
+ \footnote{Observed by {\em IRAS}.}}\\
+ Variable & {\it IRAS} & 12$\,\umu$m & 25$\,\umu$m & 60$\,\umu$m
+ & 100$\,\umu$m & Sp. & Period & Light- & $T_0\,(\rmn{K})$ \\
+ & & & & & & group & (d) & curve \\
+ & & & & & & & & type \\[10pt]
+ TW Cam & 04166$+$5719 & 8.27 & 5.62 & 1.82 & $<$1.73 & A & 85.6 & a & 555 \\
+ RV Tau & 04440$+$2605 & 22.53 & 18.08 & 6.40 & 2.52 & A & 78.9 & b & 460 \\
+ DY Ori & 06034$+$1354 & 12.44 & 14.93 & 4.12 & $<$11.22 & B & 60.3 & & 295 \\
+ CT Ori & 06072$+$0953 & 6.16 & 5.57 & 1.22 & $<$1.54 & B & 135.6 & & 330 \\
+ SU Gem & 06108$+$2734 & 7.90 & 5.69 & 2.16 & $<$11.66 & A & 50.1 & b & 575 \\
+ UY CMa & 06160$-$1701 & 3.51 & 2.48 & 0.57 & $<$1.00 & B & 113.9 & a & 420 \\
+ U Mon & 07284$-$0940 & 124.30 & 88.43 & 26.28 & 9.24 & A & 92.3 & b & 480 \\
+ AR Pup & 08011$-$3627 & 131.33 & 94.32 & 25.81 & 11.65 & B & 75.0 & b & 450 \\
+ IW Car & 09256$-$6324 & 101/06 & 96.24 & 34.19 & 13.07 & B & 67.5 & b & 395 \\
+ GK Car & 11118$-$5726 & 2.87 & 2.48 & 0.78 & $<$12.13 & B & 55.6 & & 405 \\
+ RU Cen & 12067$-$4508 & 5.36 & 11.02 & 5.57 & 2.01 & B & 64.7 & & 255 \\
+ SX Cen & 12185$-$4856 & 5.95 & 3.62 & 1.09 & $<$1.50 & B & 32.9 & b & 590 \\
+ AI Sco & 17530$-$3348 & 17.68 & 11.46 & 2.88 & $<$45.62 & A & 71.0 & b & 480 \\
+ AC Her & 18281$+$2149 & 41.47 & 65.33 & 21.12 & 7.79 & B & 75.5 & a & 260 \\
+ R Sct & 18448$-$0545 & 20.88 & 9.30 & 8.10 & $<$138.78 & A & 140.2 & a \\
+ R Sge & 20117$+$1634 & 10.63 & 7.57 & 2.10 & $<$1.66 & A & 70.6 & b & 455 \\
+ V Vul & 20343$+$2625 & 12.39 & 5.72 & 1.29 & $<$6.96 & A & 75.7 & a & 690
+\end{tabular}
+\end{minipage}
+\end{table*}
+
+\section[]{Description of the Envelope\\* Model}
+
+If we assume that the dust grains in the envelope are predominantly of
+the same kind and are in thermal equilibrium, the luminosity at
+frequency $\nu$ in the infrared is given by
+\begin{equation}
+ L(\nu)=\mskip-12mu\int\limits_{\rmn{envelope}}\mskip-12mu
+ \rho(r)Q_{\rmn{abs}}(\nu)B[\nu,T_{\rmn{g}}(r)]\exp [-\tau(\nu,r)]\>
+ \rmn{d}V,
+\end{equation}
+ where
+ $Q_{\rmn{abs}}(\nu)$ is the absorption efficiency at frequency $\nu$,
+ $\rho(r)$ is the dust grain density,
+ $T_{\rmn{g}}(\nu)$ is the grain temperature,
+ $B[\nu,T_{\rmn{g}}(r)]$ is the Planck function, and
+ $\tau(\nu,r)$ is the optical depth at distance {\it r\/} from the
+ centre of the star.
+
+The temperature $T_{\rmn{g}}(r)$ is determined by the condition of energy
+balance: amount of energy radiated = amount of energy absorbed. The
+amount of energy absorbed at any point is proportional to the total
+available energy at that point, which consists of:
+\begin{enumerate}
+ \item the attenuated and diluted stellar radiation;
+ \item scattered radiation, and
+ \item reradiation from other grains.
+\end{enumerate}
+
+Detailed solutions of radiative transfer in circumstellar dust shells
+by Rowan-Robinson \& Harris (1983a,b) indicate that the effect of
+heating by other grains becomes significant only at large optical
+depths at the absorbing frequencies $[\tau(\rmn{UV})\gg 10]$, and at
+optical depths $\tau(\rmn{UV})<1$ the grains have approximately the
+same temperature that they would have if they were seeing the starlight
+unattenuated and no other radiation.
+
+The Planck mean optical depths of circumstellar envelopes around
+several RV Tauri stars, derived from the ratios of the luminosities of
+the dust shell (at infrared wavelengths) and the star, range from 0.07
+to 0.63 (Goldsmith et al.\ 1987). There is much uncertainty in the
+nature of the optical properties of dust grains in the envelope. The
+carbon-rich RV Tauri stars are also reported to show the 10-$\umu$m
+silicate emission feature typical of oxygen-rich objects (Gehrz \& Ney
+1972; Olnon \& Raimond 1986). The pure terrestrial silicates or lunar
+silicates are found to be completely unsuitable to account for the
+infrared emission from circumstellar dust shells around M-type stars
+(Rowan-Robinson \& Harris 1983a). We assume that the absorption
+efficiency $Q_{\rmn{abs}} (\nu)$ in the infrared varies as
+$\nu^{\gamma}$. ${\gamma}=1$ appears to provide a reasonable fit in a
+variety of sources (Harvey, Thronson \& Gatley 1979; Jura 1986). Under
+these circumstances the condition of energy balance implies that the
+dust temperature $T_{\rmn{g}}$ will vary as $r^{\beta}$.
+
+In view of the low value of the observed Planck mean optical depth for
+the stellar radiation and the nature of the assumed frequency
+dependence of the absorption efficiency, the extinction of the infrared
+radiation by the dust envelope can be neglected. If we consider the
+envelope to be spherically symmetric, equation (1) reduces to
+\begin{equation}
+ L(\nu)=\!\!\int_{r_{1}}^{r_{2}}\!\!4\upi r^2\rho(r)\> Q_{\rmn{abs}}(\nu)B[\nu,T_{\rmn{g}}(r)]\> {\rmn{d}}r,
+\end{equation}
+where $r_1$ and $r_2$ are the inner and outer radii of the shell. For
+a dusty density distribution $\rho(r)\propto r^{\alpha}$ and $r_2\gg
+r_1$, equation (2) reduces to
+\begin{equation}
+ L(\nu)\propto \nu^{2+\gamma-Q}\int_{X_0}^{\infty}{{x^Q}\over
+ {\rmn{e}^x-1}}\rmn{d}x ,
+\end{equation}
+where $Q=-(\alpha+\beta+3)/\beta$ and $X_0=(h\nu /kT_0)$. $T_0$
+represents the temperature at the inner boundary of the dust shell
+where grains start condensing. In a steady radiation pressure driven
+mass outflow in the optically thin case, values of $\alpha$ lie near $-2$
+(Gilman 1972). $\gamma$ and $\beta$ are related by
+$\beta=-2/(\gamma+4)$.
+
+In the {\it IRAS\/} Point Source Catalog (PSC, Beichman et al.\ 1985a),
+the flux densities have been quoted at the effective wavelengths 12,
+25, 60 and \hbox{100\,$\umu$m}, assuming a flat energy spectrum $[\nu F(\nu)=1]$
+for the observed sources. For each model given by equation (3), using
+the relative system response, the colour-correction factors (Beichman
+et al.\ 1985b) in each of the {\it IRAS\/} passbands were
+calculated and the fluxes were converted into flux densities expected
+for a flat energy distribution, as assumed in the {\it IRAS\/} PSC, so
+that the computed colours can be directly compared with the colours
+determined from the catalogue quantities. Such a procedure is
+more appropriate than correcting the {\it IRAS\/} colours for the energy
+distribution given by a particular model and then comparing them with
+those computed by the model.
+
+\subsection{Colour--colour diagram}
+
+The IR colour is defined as
+\[
+ [\nu_1]-[\nu_2]=-2.5\log [f(\nu_1)/f(\nu_2)],
+\]
+ where $\nu_1$ and $\nu_2$ are any two wavebands and $f(\nu_1)$
+and $f(\nu_2)$ are the corresponding flux densities assuming a flat
+energy spectrum for the source.
+In Fig.~1, we have plotted the [25]--[60] colours of RV Tauri stars
+against their corresponding [12]--[25] colours derived from the {\it
+IRAS\/} data. Filled circles represent stars of group A and open circles
+stars of group B. The two sets of near-parallel lines represent the
+loci of constant inner shell temperature $T_0$ and the quantity $Q$
+defined above. The models correspond to the case of absorption
+efficiency $Q_{\rmn{abs}}(\nu)$ varying as $\nu$ (with $\gamma=1$ and
+hence $\beta=-0.4$). We have omitted R Sct in Fig.~1 because it shows a
+large deviation from the average relation shown by all the other
+objects. R Sct has a comparatively large excess at 60$\,\umu$m, but the
+extent of a possible contamination by the infrared cirrus (Low et
+al. 1984) is unknown. Goldsmith et al.\ (1987) found no evidence
+of the presence of a dust envelope at near-IR wavelengths and the
+spectrum was consistent with a stellar continuum. This explains why R
+Sct lies well below the mean relation shown by stars of groups A and C
+between the [3.6]--[11.3] colour excess and the photometrically
+determined (Fe/H) (Dawson 1979). R Sct has the longest period of
+140$\,$d among the RV Tauri stars detected at far-infrared wavelengths
+and does not have the 10-$\umu$m emission feature seen in other objects
+(Gehrz 1972; Olnon \& Raimond 1986). R Sct is probably the most
+irregular RV Tauri star known (McLaughlin 1932).
+
+\begin{figure}
+ \vspace{302pt}
+ \caption{Plot of [25]--[60] colours of RV Tauri stars against their
+ [12]--[25] colours after normalizing as indicated in Beichman et al.\
+ (1985b). Some of the objects are identified by their variable-star
+ names. Typical error bars are shown in the bottom right-hand corner.
+ The lines represent the loci for constant inner shell temperature and
+ the quantity $Q$. Note the separation of group A and B stars at $T_0
+ \sim$ 460$\,$\,K. Positions occupied by a sample of carbon and oxygen
+ Miras are also shown. The $Q=1.0$ line differs from the blackbody line
+ by a maximum of $\sim 0.05$.}
+\end{figure}
+The inner shell temperatures $(T_0)$ derived for the various objects
+are also given in Table~1 and we find the majority of them to have
+temperatures in the narrow range 400--600$\,$K. If the dependences of
+$Q_{\rmn{abs}}(\nu)$ on $\nu$ and $\rho(r)$ on $r$ are similar in all
+the objects considered, then in the colour--colour diagram they all
+should lie along a line corresponding to different values of $T_0$ and
+in Fig.~1 we find that this is essentially the case. In view of the
+quoted uncertainties in the flux measurements, we cannot attach much
+significance to the scatter in Fig.~1.
+
+At \hbox{100\,$\umu$m} the infrared sky is characterized by emission, called
+infrared cirrus, from interstellar dust on all spatial scales (Low et
+al. 1984), thereby impairing the measurements at far-infrared
+wavelengths. In Fig.~2, we have plotted the [60]--[100] colours of the
+six RV Tauri stars detected at \hbox{100\,$\umu$m} against their [25]--[60]
+colours, along with the grid showing the regions of different values
+for inner shell temperature $T_0$ and the quantity $Q$, as in Fig.~1.
+The results indicated by Fig.~2 are consistent with those derived from
+Fig.~1. AR Pup shows a large excess at \hbox{100\,$\umu$m} but, in view of the
+large values for the cirrus flags given in the catalogue, the intrinsic
+flux at \hbox{100\,$\umu$m} is uncertain.
+
+\subsection{Radial distribution of dust}
+
+\begin{figure*}
+ \vspace*{174pt}
+ \caption{Plot of the [60]--[100] colours of RV Tauri stars against
+ their [25]--[60] colours after normalizing as indicated in Beichman
+ et al.\ (1985b). The solid lines represent the loci for constant
+ inner shell temperature and the quantity $Q$. The dashed line shows
+ the locus for a blackbody distribution.}
+\end{figure*}
+
+From Fig.~1, it is evident that all RV Tauri stars lie between the
+lines corresponding to $Q=1.5$ and 0.5. With
+ \[
+ \alpha=-(1+Q)\beta-3,
+ \]
+ these values suggest limits of $r^{-2.0}$ and $r^{-2.4}$ for the
+dust density variation, indicating a near-constant mass-loss rate. Jura
+(1986) has suggested that the density in the circumstellar envelope
+around RV Tauri stars varies as $r^{-1}$, implying a mass-loss rate
+that was greater in the past than it is currently. By fitting a power
+law to the observed fluxes, such that $f(\nu)$ varies as $\nu^q$,
+values of $q$ determined by him for the various objects given in Table~1
+lie in the range 0.6--1.2, with a mean $\skew5\bar q=0.98$. The
+assumption of a power law corresponds to the case of $X_0=0$ in
+equation (3) and hence we get
+ \[
+ q=2+\gamma -Q.
+ \]
+Since we assume that $Q_{\rmn{abs}}(\nu)$ varies as $\nu$, the
+resulting value for $Q$=2.0. None of the objects is found to lie in the
+corresponding region in the colour--colour diagram. Even this extreme
+value for $Q$ implies a density which varies as $r^{-1.8}$.
+
+Goldsmith et al.\ (1987) have reported that the simultaneous
+optical and near-IR data of AC Her can be fitted by a combination of
+two blackbodies at 5680 and 1800\,K, representing, respectively, the
+stellar and dust shell temperatures, and suggested that in RV Tauri
+stars the grain formation is a sporadic phenomenon and not a continuous
+process. Apparently, they have been influenced by the remark by Gehrz
+\& Woolf (1970) that their data in the 3.5--11$\,\umu$m region of AC Her
+indicated a dust temperature of $\sim$300\,K. We find that the {\it K--L\/}
+colours given by Gehrz (1972), Lloyd Evans (1985) and Goldsmith et
+al. (1987) are all consistent with each other. Surely, hot dust ($\sim
+1800\,$K), if present at the time of observations by Goldsmith et
+al. (1987), would have affected the {\it K--L\/} colour significantly.
+AC Her, like other members of its class, is found to execute elongated
+loops in the ({\it U--B\/}), ({\it B--V\/}) plane (Preston et al.\
+1963), indicating that significant departure of the stellar continuum
+from the blackbody is to be expected. Further, their data show only a
+marginal excess at the near-IR wavelengths. We feel that the case for
+the existence of hot dust around AC Her and hence for the sporadic
+grain formation around RV Tauri stars is not strong. In Fig.~3 we find that AC Her and RU Cen lie very close to R Sct
+which, according to Goldsmith et al.\ (1987), shows no evidence
+for the presence of a hot dust envelope.
+
+\subsubsection{Comparison with oxygen and carbon Miras}
+
+In Fig.~1 we have also shown the positions of a sample of oxygen-rich
+and carbon-rich Miras. At the low temperatures characteristic of the
+Miras, a part of the emission at 12$\,\umu$m comes from the photosphere.
+For a blackbody at 2000$\,$K, the ratio of fluxes at wavelengths of 12
+and 2$\,\umu$m $(f_{12}/f_{2})\sim 0.18$. The Miras shown in Fig.~1 have
+$(f_{12}/f_{2})$ ratios larger than twice the above value. It is
+clear that the three groups of objects populate three different regions
+of the diagram. Hacking et al.\ (1985) have already noticed that
+there are distinct differences between the {\it IRAS\/} colours of
+oxygen-rich and carbon-rich objects. On the basis of an analysis, using
+a bigger sample of bright giant stars in the {\it IRAS\/} catalogue, this
+has been interpreted by Zuckerman \& Dyck (1986) as being due to a
+systematic difference in the dust grain emissivity index. U Mon shows
+the 10-$\umu$m silicate emission convincingly and, in most of the other
+objects for which low-resolution spectra in the near-infrared have been
+reported (Gehrz 1972; Olnon \& Raimond 1986), the 10-$\umu$m emission
+may be partly attributed to silicates. Hence it is reasonable to expect
+that, in the envelopes around at least some of the RV Tauri stars, the
+dust grains are predominantly of silicates, as in the case of oxygen
+Miras (Rowan-Robinson \& Harris 1983a). The fact that none of the RV
+Tauri stars is found in the region of the two-colour diagram occupied
+by the oxygen Miras indicates that the emissivity indices of the
+silicate grains in the two cases are different. Because of the higher
+temperatures and luminosities, the environment of grain formation will
+be different in RV Tauri stars.
+
+\subsubsection{Correlation with subgroups}
+
+Preston et al.\ (1963) have identified three spectroscopic
+subgroups, which are designated as groups A, B and C. Objects of group
+A are metal-rich; group C are metal-poor; group B objects are also
+metal-poor, but show carbon enhancements (Preston et al.\ 1963; Lloyd
+Evans 1974; Dawson 1979; Baird 1981). It is interesting to see that
+Table~1 contains no group C objects and that in Fig.~1 there is a clear
+separation of the two spectroscopic subgroups A and B, with the
+demarcation occurring at an inner shell temperature of about 450$\,$K,
+group B stars having lower temperatures than group A. SX Cen is the
+only exception. Lloyd Evans (1974) has reported that metal lines are
+stronger in SX Cen than in other group B objects. It may be worth
+noting that SX Cen has the shortest period among the 100 or so objects
+with the RV Tauri classification. RU Cen has the coolest inner shell
+temperature, as already suggested by the near-infrared spectrum (Gehrz
+\& Ney 1972).
+\begin{figure}
+ \vspace*{174pt}
+ \caption{Plot of ({\it K--L\/}) colours of RV Tauri stars detected by
+ {\it IRAS\/} against their corresponding ({\it J--K\/}) colours. The
+ position of AR Pup is indicated. The three objects lying close to the
+ blackbody line are AC Her, RU Cen and R Sct.}
+\end{figure}
+
+Group B objects follow a different mean relationship from those of group
+A, having systematically larger 11-$\umu$m excess for a given excess at
+3$\,\umu$m (Lloyd Evans 1985). For a general sample of RV Tauri stars,
+the distinction between the oxygen-rich and carbon-rich objects is not
+that apparent in the {\it JHKL\/} bands. In Fig.~3 we have plotted the
+near-IR magnitudes of the objects given in Table~1 (except V Vul which
+has no available measurements) in the {\it J--K, K--L\/} plane. The
+colours, taken from Lloyd Evans (1985) and Goldsmith et al.\
+(1987), are averaged if more than one observation exists, because the
+internal agreements are found to be often of the order of observational
+uncertainties, in accordance with the earlier finding by Gehrz (1972)
+that variability has relatively little effect on colours. Barring RU
+Cen and AC Her, it is evident that stars belonging to group B show
+systematically larger excesses at {\it L\/} band for a given excess at
+{\it K}. The low excesses at near-IR wavelengths for AC Her and RU Cen
+are consistent with the very low dust temperatures indicated by the
+far-infrared colours.
+%
+\begin{figure*}
+\vbox to 220mm{\vfil
+Landscape figure to go here. This figure was not part of the original
+paper and is inserted here for illustrative purposes.\\ See the author
+guide for details on how to handle landscape figures or tables, and
+\verb|mnland.tex|.
+\caption{}
+\vfil}
+\label{landfig}
+\end{figure*}
+
+It is already well established that from {\it UBV\/} photometry one can
+distinguish between groups A and B, members of group A being
+significantly redder than those of group B (Preston et al.\ 1963).
+Similarly, Dawson (1979) has found that the two spectroscopic groups
+are well separated in the DDO colour--colour diagrams when mean colours
+are used for the individual objects.
+
+The clear separation of the spectroscopic subgroups A and B in the IR
+two-colour diagram suggests that the natures of dust grains in the
+envelopes in the two cases are not identical. This is to be expected
+because of the differences in the physical properties of the stars
+themselves. The average colours of group B stars are bluer than group
+A, but the envelope dust temperatures of B are cooler than those of A.
+The near-IR spectra of AC Her and RU Cen are extremely similar (Gehrz
+\& Ney 1972). The striking similarities in the optical spectra of AC
+Her and RU Cen have been pointed out by Bidelman (O'Connell 1961). We
+feel that the physical properties, including the chemical composition,
+of the grains formed in the circumstellar envelope strongly depend on
+those of the embedded star. This, probably, explains the diversity of
+the energy distributions of RV Tauri stars in the near-infrared found
+by Gehrz \& Ney (1972). On the basis of the observed differences in
+chemical abundances and space distribution of RV Tauri stars, Lloyd
+Evans (1985) has already pointed out that there is no direct
+evolutionary connection between group A and group B objects, thus
+ruling out the possibility that group B objects are the evolutionary
+successors of group A, in which grain formation has stopped and the
+cooler temperatures for the former are caused by an envelope expansion.
+
+Kukarkin et al.\ (1969) have subdivided RV Tauri stars
+into two classes, RVa and RVb, on the basis of their light curves; the
+former shows a constant mean brightness, whereas the latter shows a
+cyclically varying mean brightness. Extensive observations in the
+near-infrared show that, on average, RVb stars are redder than RVa
+stars, and Lloyd Evans (1985) has suggested that in RVb stars dust
+shells are denser in the inner regions and hence radiate strongly in
+the 1--3$\,\umu$m region. Fig.~3 confirms this; RVb objects show
+systematically larger ({\it J--K\/}) and ({\it K--L\/}) colours than RVa
+objects. Apparently, there is no distinction between objects of the two
+light-curve types at far-infrared wavelengths (Fig.~1).
+
+\section{Conclusions}
+
+In the [12]--[25], [25]--[60] colour diagram, RV Tauri stars populate
+cooler temperature regions $(T<600 \,\rmn{K})$, distinctly different from
+those occupied by the oxygen and carbon Miras. Using a simple model
+in which
+\begin{enumerate}
+ \item the envelope is spherically symmetric,
+ \item the IR-emitting grains are predominantly of the same kind, and
+ \item in the infrared the absorption efficiency $Q_{\rmn{abs}}
+ (\nu)\propto\nu$,
+\end{enumerate}
+we find that the {\it IRAS\/} fluxes are
+consistent with the density in the envelope $\rho(r)\propto r^{-2}$,
+where {\it r\/} is the radial distance. Such a dependence for the dust
+density implies that the mass-loss rates in RV Tauri stars have not
+reduced considerably during the recent past, contrary to the suggestion
+by Jura (1986). In the two-colour diagram, the blackbody line and the
+line corresponding to $\rho(r)\propto r^{-2.2}$ nearly overlap and the
+present data are insufficient to resolve between the two cases. The
+latter case is more physically reasonable, however.
+
+The spectroscopic subgroups A and B are well separated in the {\it
+IRAS\/} two-colour diagram, with group B objects having systematically
+cooler dust envelopes. If we consider only the objects detected by {\it
+IRAS}, we find that stars belonging to group B show systematically
+larger excess at {\it L\/} band for a given excess at {\it K}.
+Apparently, there is no correlation between the light-curve types (RVa
+and RVb) and the far-infrared behaviour of these objects. It is fairly
+certain that the physical properties, including the chemical
+composition, of the embedded stars are directly reflected by those of
+the dust grains. Most probably, the grain formation process in RV Tauri
+stars is continuous and not sporadic as suggested by Goldsmith et
+al.\ (1987).
+
+\section*{Acknowledgments}
+
+I thank Professor N. Kameswara Rao for some helpful suggestions,
+Dr H. C. Bhatt for a critical reading of the original version of the
+paper and an anonymous referee for very useful comments that improved
+the presentation of the paper.
+
+
+\begin{thebibliography}{99}
+\bibitem{b1} Baird S.R., 1981, ApJ, 245, 208
+\bibitem{b2} Beichman C.A., Neugebauer G., Habing H.J., Clegg P.E.,
+ Chester T.J., 1985a, {\it IRAS\/} Point Source Catalog. Jet
+ Propulsion Laboratory, Pasadena
+\bibitem{b3} Beichman C.A., Neugebauer G., Habing H.J., Clegg P.E.,
+ Chester T.J., 1985b, {\it IRAS\/} Explanatory Supplement. Jet
+ Propulsion Laboratory, Pasadena
+\bibitem{b4} Dawson D.W., 1979, ApJS, 41, 97
+\bibitem{b5} Gerhz R.D., 1972, ApJ, 178, 715
+\bibitem{b6} Gerhz R.D., Ney E.P., 1972, PASP, 84, 768
+\bibitem{b7} Gerhz R.D., Woolf N.J., 1970, ApJ, 161, L213
+\bibitem{b8} Gilman R.C., 1972, ApJ, 178, 423
+\bibitem{b9} Goldsmith M.J., Evans A., Albinson J.S., Bode M.F., 1987, MNRAS,
+ 227, 143
+\bibitem{b10} Hacking P. et al., 1985, PASP, 97, 616
+\bibitem{b11} Harvey P.M., Thronson H.A., Gatley I., 1979, ApJ, 231, 115
+\bibitem{b12} Jura M., 1986, ApJ, 309, 732
+\bibitem{b13} Kukarkin B.V. et al., 1969, General Catalogue of Variable Stars.
+ Moscow
+\bibitem{b14} Lloyd Evans T., 1974, MNRAS, 167, 17{\sc p}
+\bibitem{b15} Lloyd Evans T., 1985, MNRAS, 217, 493
+\bibitem{b16} Low F.J. et al., 1984, ApJ, 278, L19
+\bibitem{b17} McLaughlin D.B., 1932, Publ. Univ. Obs. Mich., 4, 135
+\bibitem{b18} O'Connell J.K., 1961, Specola Vaticana Ric. Astron., 6, 341
+\bibitem{b19} Olnon F.M., Raimond E., 1986, A\&AS, 65, 607
+\bibitem{b20} Preston G.W., Krzeminski W., Smak J., Williams J.A.,
+ 1963, ApJ, 137, 401
+\bibitem{b21} Rowan-Robinson M., Harris S., 1983a, MNRAS, 202, 767
+\bibitem{b22} Rowan-Robinson M., Harris S., 1983b, MNRAS, 202, 797
+\bibitem{b23} van der Veen W.E.C.J., Habing H.J., 1988, A\&A, 194, 125
+\bibitem{b24} Willems F.J., de Jong T., 1988, A\&A, 196, 173
+\bibitem{b25} Zuckerman B., Dyck H.M., 1986, ApJ, 311, 345
+\end{thebibliography}
+
+\appendix
+
+\section[]{Large gaps in L\lowercase{y}${\balpha}$ forests\\* due to fluctuations in line distribution}
+
+(This appendix was not part of the original paper by A.V.~Raveendran
+and is included here just for illustrative purposes.)
+
+Spectroscopic observations of bright quasars show that the mean number
+density of Ly$\alpha$ forest lines, which satisfy certain criteria,
+evolves like $\rmn{d}N/\rmn{d}z=A(1+z)^\gamma$, where $A$ and~$\gamma$ are two
+constants. Given the above intrinsic line distribution we examine the
+probability of finding large gaps in the Ly$\alpha$ forests. We
+concentrate here only on the statistics and neglect all observational
+complications such as the line blending effect (see Ostriker, Bajtlik
+\&~Duncan 1988).
+
+Suppose we have observed a Ly$\alpha$ forest between redshifts $z_1$
+and~$z_2$ and found $N-1$ lines. For high-redshift quasars $z_2$~is
+usually the emission redshift $z_{\rmn{em}}$ and $z_1$ is set to
+$(\lambda_{\rmn{Ly}\beta}/\lambda_{\rmn{Ly}\alpha})(1+z_{\rmn{em}})=0.844
+(1+z_{\rmn{em}})$ to avoid contamination by Ly$\beta$ lines. We
+want to know whether the largest gaps observed in the forest are
+significantly inconsistent with the above line distribution. To do
+this we introduce a new variable~$x$:
+%
+\begin{equation}
+x={(1+z)^{\gamma+1}-(1+z_1)^{\gamma+1} \over
+ (1+z_2)^{\gamma+1}-(1+z_1)^{\gamma+1}}.
+\end{equation}
+%
+$x$ varies from 0 to 1. We then have $\rmn{d}N/\rmn{d}x=\lambda$, where $\lambda$
+is the mean number of lines between $z_1$ and $z_2$ and is given by
+%
+\begin{equation}
+\lambda\equiv{A[(1+z_2)^{\gamma+1}-(1+z_1)^{\gamma+1}]\over\gamma+1}.
+\end{equation}
+%
+This means that the Ly$\alpha$ forest lines are uniformly
+distributed in~$x$. The probability of finding $N-1$ lines between $z_1$
+and~$z_2$, $P_{N-1}$, is assumed to be the Poisson distribution.
+%
+\newpage
+%
+\begin{figure}
+\vspace{11pc}
+\caption{$P(>x_{\rmn{gap}})$ as a function of $x_{\rmn{gap}}$ for,
+ from left to right, $N=160$, 150, 140, 110, 100, 90, 50, 45 and~40.}
+\label{appenfig}
+\end{figure}
+
+\subsection{Subsection title}
+
+We plot in Fig.~\ref{appenfig} $P(>x_{\rmn{gap}})$ for several $N$ values.
+We see that, for $N=100$ and $x_{\rmn{gap}}=0.06$, $P(>0.06)\approx20$
+per cent. This means that the probability of finding a gap with a size
+larger than six times the mean separation is not significantly small.
+When the mean number of lines is large, $\lambda\sim N>>1$, our
+$P(>x_{\rmn{gap}})$ approaches the result obtained by Ostriker et al.\
+(1988) for small (but still very large if measured in units of the mean
+separation) $x_{\rmn{gap}}$, i.e., $P(>x_{\rmn{gap}})\sim N(1-
+x_{\rmn{gap}})^{N-1}\sim N {\rmn{exp}}(-\lambda x_{\rmn{gap}})$.
+
+\bsp
+
+\label{lastpage}
+
+\end{document}
diff --git a/obsolete/macros/latex209/contrib/multido/md-doc.dvi b/obsolete/macros/latex209/contrib/multido/md-doc.dvi
new file mode 100644
index 0000000000..74803b62d7
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/multido/md-doc.dvi
Binary files differ
diff --git a/obsolete/macros/latex209/contrib/multido/md-doc.tex b/obsolete/macros/latex209/contrib/multido/md-doc.tex
new file mode 100644
index 0000000000..ed44f56a26
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/multido/md-doc.tex
@@ -0,0 +1,459 @@
+%%%%%%%%%%%%%%%%%%%%%%%% md-doc.tex Version 1.0, 92/09/28 %%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%% COPYING %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% COPYRIGHT 1992, by Timothy Van Zandt, tvz@Princeton.EDU
+%%
+%% Copying of part or all of this file is allowed under the following
+%% conditions only:
+%% (1) You may freely distribute unchanged copies of the file. Please
+%% include the documentation when you do so.
+%% (2) You may modify a renamed copy of the file, but only for personal
+%% use or use within an organization.
+%% (3) You may copy fragments from the file, for personal use or for
+%% distribution, as long as credit is given where credit is due.
+%%
+%% You are NOT ALLOWED to take money for the distribution or use of
+%% this file or modified versions or fragments thereof, except for
+%% a nominal charge for copying etc.
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%% DESCRIPTION: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% multido.tex contains a loop macro, \multido, that supports floating
+%% point addition and has a nice interface. Among other things, it
+%% is useful for pictures and putting numbers on axes. multido.tex
+%% is compatible with most TeX macro packages. Name a copy of the file
+%% multido.sty if you want to use as a LaTeX style option.
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%% GETTING MULTIDO %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% The complete multido.tex distribution is available in .tar.Z form from
+%% the /pub directory at Princeton.EDU. multido.tex is also available
+%% at various TeX archives. However, all you really need is multido.tex
+%% and md-doc.tex.
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%% PRINTING THE DOCUMENTATION
+%%%%%%%%%%%%%%%%%%%%%%%% %%
+%% multido.tex is also distributed with the documentation already
+%% typeset. Check the /pub directory at Princeton.EDU if you can
+%% handle .tar.Z files.
+%%
+%% This file contains the Usage Notes, Run with LaTeX with or without NFSS.
+%%
+%% If you include the doc style option, the documented code
+%% in multido.doc is also printed at the end. For this,
+%% you must have the files doc.sty and gind.ist from Frank
+%% Mittelbach's doc package (try the /soft/tex/latex-supported/doc
+%% directory at ftp.uni-stuttgart.de ). This documented was originally
+%% prepared using v1.7k (92/08/24) of doc.sty.
+%%
+%% To make an index on UNIX using makeindex, resolve cross-references and
+%% give the command:
+%% makeindex -s gind.ist multido.idx
+%% and run the file again. The index is only for the documented code.
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%% BEGIN PREAMBLE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+\documentstyle[12pt]{article}
+\input multido.tex
+\catcode`\@=11
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%% DOC? STUFF %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Check whether doc.sty has been input. If not, code won't be printed.
+%% \CodeLineIndex can only be used in preamble. Other code-specific
+%% preamble stuff has been left to the end of this file.
+%%
+\@ifundefined{StopEventually}%
+ {\def\StopEventually{\end{document}}}%
+ {\CodelineIndex}
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%% PAGE PARAMETERS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+\setlength{\parindent}{0pt} % paragraph indent
+\setlength{\parskip}{4pt plus 1pt minus 1pt}
+\setlength{\oddsidemargin}{4pc}
+\setlength{\evensidemargin}{4pc}
+\setlength{\topmargin}{-2.5pc}
+\setlength{\headheight}{12pt} % height of running head
+\setlength{\headsep}{20pt} % distance between header and text
+\setlength{\textheight}{54pc} % height of text on page
+\setlength{\textwidth}{35pc} % total width of a page
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%% VERBATIM %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% This is good for examples, using \verb or whatever explicitly.
+\def\Ex{\quote\tt}
+\def\endEx{\endquote}
+%%
+%% In the verbatim environment, \trivlist is changed to \list, so that
+%% verbatim code is offset from the left margin.
+%%
+\def\@verbatim{%
+ \list{}{} \item[]%
+ \leftskip\@totalleftmargin\rightskip\z@
+ \parindent\z@\parfillskip\@flushglue
+ \@@par\leavevmode\parskip=\z@
+ \def\par{\leavevmode\null\@@par}%
+ \obeylines
+ \let\do\@makeother \dospecials\catcode`\>=14\tt}
+\def\endverbatim{\endlist}
+%%
+\def\m#1{{\rm\it #1}} % For just putting things in italics (m=>meta>)
+\def\M#1{{\tt\{}\m{#1}{\tt\}}} % Argument is in italic, enclosed in tt braces.
+\def\N#1{{\tt\string#1}} % For in-line macro names
+\catcode`\>=13\def>{} % Now we can write \LaTeX> without problem.
+%%
+%% This is adapted from Mittelbach's doc.sty:
+\def\MyShortVerb#1{%
+ \expandafter
+ \xdef\csname cc\string#1\endcsname{\the\catcode`#1}%
+ \begingroup
+ \catcode`\~\active \lccode`\~`#1%
+ \lowercase{%
+ \global\expandafter\let
+ \csname ac\string#1\endcsname~%
+ \gdef~{\verb~}}%
+ \endgroup
+ \global\catcode`#1\active}
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%% SECTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Section headings use customizable fonts, leave less space above
+%% and below, and may overhang on left.
+%%
+\def\section{\@startsection{section}{1}{\sechang}{-3ex plus -1ex
+ minus -.2ex}{1.5ex plus .2ex}{\secfont}}
+\def\subsection{\@startsection{subsection}{2}{\subsechang}{-2.75ex plus -1ex
+ minus -.2ex}{1.25ex plus .2ex}{\subsecfont}}
+\newdimen\sechang
+\newdimen\subsechang
+\sechang=-.6in
+\subsechang=-.375in
+\def\secfont{\Large\bf} % Section headings
+\def\subsecfont{\tt\large} % Subsection heading
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+%%%%%%%%%%%%%%%%%%%%%% DATES, VERSIONS AND TITLES %%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+\def\expanddate#1/#2/#3/{\number#3{} \month=#2 \ifcase\month\or
+ January \or February \or March \or April \or May \or June \or
+ July \or August \or September \or October \or November \or December \fi
+ 19#1}
+\def\thefiledate{\expandafter\expanddate\filedate/}
+\date{Version \fileversion\\ \thefiledate}
+\def\@maketitle{\newpage
+ \null
+ \begin{center}
+ {\Large\bf \@title \par}
+ \vskip 1.2em {\lineskip .5em
+ \begin{tabular}[t]{c}\@author\end{tabular}\par}
+ \vskip .8em {\@date}%
+ \end{center}
+ \par
+ \vskip .5em}
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%% PAGE STYLE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+\pagestyle{myheadings}
+\markright{Documentation for multido.tex \hfill
+ v.\fileversion\hskip 1em \thefiledate\hfill}%
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%% END PREAMBLE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+\MyShortVerb\"
+\catcode`\@=12
+\begin{document}
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\title{Documentation for multido.tex:\\[2pt]
+ A loop macro for Generic \protect\TeX}
+\author{Timothy Van Zandt%
+ \thanks{Author's address: Department of Economics, Princeton University,
+ Princeton, NJ 08544-1021, USA. Internet: {\tt tvz@Princeton.EDU}}}
+\maketitle
+
+
+\section{Usage notes}
+
+ "multido.tex"/"multido.sty" contains the \N\multido> macro, which is a loop
+facility for Generic TeX. This macro happens to be useful for drawing
+pictures, and was originally developed for the PSTricks
+package,\footnote{PSTricks is an extensive collection of PostScript-based
+macros for Generic TeX. It is available from the /pub directory at
+Princeton.EDU, and \TeX> archives.} but you can use it for other purposes as
+well.
+
+ A special feature is support of fixed-point addition. For example, PSTricks
+uses the \N\multido> to put numbers on axes, much like in the following
+\LaTeX> example:
+ PSTricks uses "\multdo" internally to put numbers on axes, much like in this
+\LaTeX> example:
+\begin{verbatim}>
+\setlength{\unitlength}{1cm}
+\small
+\begin{picture}(8,1)(0,-.5)
+\put(0,0){\vector(1,0){8}}
+\multido{\i=0+1,\n=0+0.25}{8}{%
+ \put(\i,-.1){\line(0,1){.2}}
+ \put(\i,-.2){\makebox[t](0,0){\n}}}
+\end{picture}
+\end{verbatim}
+\begin{center}\leavevmode
+\setlength{\unitlength}{1cm}
+\small
+\begin{picture}(8,1)(0,-.5)
+\put(0,0){\vector(1,0){8}}
+\multido{\i=0+1,\n=0+0.25}{8}{%
+ \put(\i,-.1){\line(0,1){.2}}
+ \put(\i,-.2){\makebox(0,0)[t]{\n}}}
+\end{picture}
+\end{center}
+
+The general syntax for \N\multido> is:
+\begin{Ex}
+"\multido"\M{variables}\M{repetitions}\M{stuff}
+\end{Ex}
+ \m{stuff} is whatever you want repeated; it can be any balanced \TeX{} input.
+\m{repetitions} is the number times \m{stuff} is repeated.
+
+ The first argument is the interesting one. \m{variables} is a comma-separated
+list of variable declarations.\footnote{Don't use commas to mark the decimal
+point within the \protect\m{variables} argument, as they will be confused for
+delimiters.} Each variable declaration is of the form:
+\begin{center}\em
+ variable "=" initial value "+" increment
+\end{center}
+ \m{variable} is a command sequence that can be used in \m{stuff}. It is
+initially set to {\em initial value}, and is then incremented by {\em
+increment} with each repetition.
+
+ The first letter of the variable name determines the variable type. There are
+four variable types:
+\begin{description}
+ \item[Dimension (d or D)] The initial value and the increment should be
+dimensions (lengths, in \LaTeX> parlance). The substitution text is a
+dimension, with "sp" units. E.g., "\dx=4cm+5pt".
+
+ \item[Number (n or N)] The initial value and increment should be integers or
+numbers with the same number of digits to the right of the decimal. The one
+exception is that it is always OK for the initial value to be an integer.
+There can be at most 8 digits on each side of the decimal. The substitution
+text is a number, with fixed-point addition. E.g., "\n=3+7.05",
+"\Nx=5.30+-1.25".
+
+ \item[Integer (i or I)] The initial value and increment should be integers.
+This gives the same result as using a number variable, but it is faster. E.g.,
+"\I=2+-1".
+
+ \item[Real (r or R)] The initial value and increment should be integers or
+numbers with at most 4 digits on each side of the decimal. The substitution
+text is a number, but with floating point addition and occasional small
+errors. This gives a less satisfactory result than using a number variable,
+but it is faster. E.g., "\ry=4.2+1.05".
+\end{description}
+
+ Here are some examples that illustrate how the substitution text is
+determined:
+\begin{quote}
+"\multido{}{10}{\TeX\ }"\\[3pt]
+\hbox to 2em{}\multido{}{10}{\TeX\ }{}\\[8pt]
+"\multido{\d=2pt+3pt}{5}{\d, }"\\[3pt]
+\hbox to 2em{}\multido{\d=2pt+3pt}{5}{\d, }{}\\[8pt]
+"\multido{\n=2+3}{10}{\n, }"\\[3pt]
+\hbox to 2em{}\multido{\n=2+3}{10}{\n, }{}\\[8pt]
+"\multido{\i=2+3}{10}{\i, }"\\[3pt]
+\hbox to 2em{}\multido{\i=2+-3}{10}{\i, }{}\\[8pt]
+"\multido{\r=2+3.05}{6}{\r, }"\\[3pt]
+\hbox to 2em{}\multido{\r=2+3.05}{6}{\r, }{}\\[8pt]
+"\multido{\n=2.00+3.05}{8}{\n, }"\\[3pt]
+\hbox to 2em{}\multido{\n=2.00+-3.05}{8}{\n, }{}
+\end{quote}
+
+Here are some details about the choice of names:
+\begin{itemize}
+ \item Your computer won't explode if you use names that conflict with \TeX>
+internal commands, but you might want to check name conflicts if you get
+inexplicable errors. The command "\MultidoCheckNames" can be useful in this
+case. It causes \N\multido> to report an error whenever you use a variable
+name that is already defined. But see the next item.
+ \item The whole \N\multido> loop is grouped. This means, e.g., that although
+"\i" is a Plain \TeX{} command sequence (giving a dotless ``\i''), you can use
+the variable "\i" if you do not use any dotless i's in \m{stuff} (and if you
+do not use "\MultidoCheckNames").
+\end{itemize}
+
+Here are a few more details:
+\begin{itemize}
+\item \N\Multido> commands can be nested.
+ \item Spaces after a \N\multido> command are ignored. This makes \N\multido>
+more hospitable for pictures.
+ \item Spaces between the various parts of the \m{variables} argument are
+ignored.
+\end{itemize}
+
+ And finally here a few special features, some of which are of interest mainly
+macro writers and other \TeX nicians:
+\begin{itemize}
+ \item The material that is repeated is not grouped, so that you can insert
+your own recursive routines.
+ \item There is a variant, "\mmultido", which works just like "\multido"
+except that the variables are all incremented once before starting.
+ \item There are variants, "\Multido" and "\MMultido" of "\multido" and
+"\mmultido", resp., that do not group the whole loop. This can be useful,
+e.g., for making entries in an alignment environment. However, these cannot be
+nested within any "\multido" macro.
+ \item If the number of repetitions is a negative number, the variables are
+incremented backwards.
+ \item The count register "\multidocount" keeps track of the number of the
+iterations.
+ \item The command "\multidostop" causes the "\multido" loop to quit at the
+end of the current iteration.
+\item Fixed point addition is performed by \N\FPadd> and \N\FPsub:
+\begin{Ex}
+"\FPadd"\M{num1}\M{num2}\M{cs}\\
+"\FPsub"\M{num1}\M{num2}\M{cs}
+\end{Ex}
+ \m{num2}\/ is added to or subtracted from \m{num1}, and the answers is stored
+in the command sequence given as the third argument. The rules about decimals
+and so on that apply to number variables apply here as well. E.g., after
+\begin{Ex}
+ "\FPsub{1.75}{-0.15}{\answer}"
+\end{Ex}
+the definition of "\answer" is 1.90.
+\end{itemize}
+
+\clearpage
+
+%%%%%%%%%%%%%%%%%% STOP HERE IF DOC.STY NOT INPUT%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+\StopEventually{}
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%% BEGIN CODE-SPECIFIC PREAMBLE %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+\catcode`\@=11
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%% CHANGE TO MACRO ENVIRONMENTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% A change to the doc.sty's macro environment.
+%% Prints macro names like subsections, instead of as marginal notes.
+%% Argument is comma separated list of macro names.
+%% No nested macro environments.
+%%
+%% WHY: Don't need as many \begin{macro} ... \end{macro}.
+%% Works even there isn't anything between \begin{macro} and
+%% \begin{macrocode}.
+%%
+\newif\iffirst@macroname
+\newif\ifnestedmacro
+\def\macro{%
+ \ifnum\macro@level=\z@
+ \def\next{\MakePrivateLetters \m@cro@}%
+ \else
+ \def\next{\@latexerr{Nested \string\begin{macro}}\@eha
+ \endgroup\end{macro}\macro@level=\z@\begin{macro}}
+ \fi
+ \next}
+\def\m@cro@#1{%
+ \first@macronametrue
+ \m@@cro@@#1,\@nil,}
+\def\m@@cro@@#1,{%
+ \def\@tempa{#1}\def\@tempb{\@nil}%
+ \ifx\@tempa\@tempb
+ \let\next\finishm@@cro@@
+ \else
+ {\advance\c@CodelineNo\@ne\SpecialMainIndex{#1}\nobreak}%
+ \DoNotIndex{#1}%
+ \iffirst@macroname
+ \edef\saved@macronames{\string#1}%
+ \first@macronamefalse
+ \else
+ \def\comma{\noexpand\comma}%
+ \edef\saved@macronames{\saved@macronames\comma\string#1}%
+ \fi
+ \let\next\m@@cro@@
+ \fi
+ \next}
+\def\finishm@@cro@@{%
+ \advance\macro@level\@ne
+ \def\comma{{\rm, }}%
+ \subsection*{\tt\saved@macronames}}
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%% DO NOT INDEX %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+\DoNotIndex{\ ,\!,\[,\\,\],\^,\`,\{,\},\~}
+\DoNotIndex{\@ifundefined,\@namedef,\@spaces,\@tempa,\@tempb}
+\DoNotIndex{\@warning,\active}
+\DoNotIndex{\begingroup,\catcode,\char,\csname,\def,\do}
+\DoNotIndex{\docdate,\dospecials,\edef,\else,\endcsname,\endgroup}
+\DoNotIndex{\expandafter,\fi,\filedate,\fileversion}
+\DoNotIndex{\gdef,\if,\ifcat}
+\DoNotIndex{\ifx,\immediate,\lccode,\let}
+\DoNotIndex{\lowercase,\next,\noexpand}
+\DoNotIndex{\relax,\space,\the}
+\DoNotIndex{\toks@,\count@,\dimen@,\dimen@ii}
+\DoNotIndex{\theatcode,\string,\t,\@empty,\@nil,\@nnil,\advance}
+\DoNotIndex{\dimen@i,\@,\endinput,\errhelp,\errmessage,\global,ifnum}
+\DoNotIndex{\p,\number,\newtoks,\ignorespaces,\message,\multido@temp}
+\DoNotIndex{\newcount,\xdef,\z@,\@ne,\tw@,\number,\undefined,\ifnum}
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%% OTHER DOC PARAMETERS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+\setcounter{IndexColumns}{2} % two column index;
+
+%\DisableCrossrefs
+\EnableCrossrefs
+
+ \IndexPrologue{This index is only for the documented code. Underlined numbers
+refer roughly to the line number of the entry's definition, and all others
+indicate code lines where it is used.}
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%% END CODE-SPECIFIC PREAMBLE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+\catcode`\@=12
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\section{Documented code}
+
+\DocInput{multido.doc}
+
+\clearpage
+
+\PrintIndex
+
+\end{document}
diff --git a/obsolete/macros/latex209/contrib/multido/md-make.tex b/obsolete/macros/latex209/contrib/multido/md-make.tex
new file mode 100644
index 0000000000..5cdd5d72c7
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/multido/md-make.tex
@@ -0,0 +1,83 @@
+%% md-make.tex 1992 tvz@Princeton.EDU
+%%
+%% Run Plain TeX or LaTeX on this file to create a macro file multido.tex
+%% from multido.doc, stripped of comments.
+%%
+%% This is basically a take-off from F. Mittelbach's docstrip.tex
+%%
+%% This macros can be used for stripping comments from any TeX file.
+%% Just change these two lines:
+\def\outfile{multido.tex}
+\def\infile{multido.doc}
+
+\catcode`\@=11
+\expandafter\ifx\csname @latexerr\endcsname\relax\else\let\end\@@end\fi
+
+\newread\@infile
+\newwrite\@outfile
+
+\def\typeout{\immediate\write16}
+\typeout{}
+\typeout{Preparing to make stripped macro file \outfile.}
+
+\immediate\openin1=\outfile\relax
+\ifeof1\else
+ \typeout{%
+ File `\outfile' exists and will be overwritten if in current directory!!!}
+\fi
+
+\def\check@@OK#1#2\@nil{\ifx#1y\else\expandafter\end\fi}
+
+\typeout{Make `\outfile'? (y=yes, n=no)}
+\read16 to\OK
+\expandafter\check@@OK\OK\@nil
+
+\newif\ifflag
+
+{\catcode`\%=12\gdef\%{%}}
+\edef\@@percent{\%\%}
+
+\def\process@line{\expandafter\process@@line\inline\relax\relax\@nil}
+\def\process@@line#1#2#3\@nil{%
+ \def\temp{#1}%
+ \ifx\temp\%
+ \def\temp{#1#2}%
+ \ifx\temp\@@percent\owrite\inline\fi
+ \else
+ \owrite\inline
+ \fi}
+
+\def\owrite#1{\immediate\write\@outfile{#1}}
+
+\def\mo#1{\catcode`#1=12\relax}
+\def\sanitize{\mo\ \mo\\\mo\$\mo\&\mo\#\mo\^\mo\_\mo\%\mo\~\mo\}\mo\{}
+
+\def\stripfile{%
+ \begingroup
+ \sanitize
+ \endlinechar-1
+ \flagtrue
+ \loop
+ \read\@infile to\inline
+ \ifeof\@infile\flagfalse\fi
+ \ifflag
+ \process@line
+ \repeat
+ \endgroup}
+
+\immediate\openout\@outfile\outfile\relax
+
+\owrite{\%\% This is file `\outfile' generated on
+ <\the\year/\the\month/\the\day>.}
+\owrite{\%\% The original source file was `\infile'.}
+\owrite{\%\%}
+
+\immediate\openin\@infile\infile\relax
+\stripfile
+\immediate\closein\@infile
+
+\owrite{\%\%}%
+\owrite{\%\% End of file `\outfile'.}%
+\immediate\closeout\@outfile
+
+\end
diff --git a/obsolete/macros/latex209/contrib/multido/md-read.me b/obsolete/macros/latex209/contrib/multido/md-read.me
new file mode 100644
index 0000000000..7045f62ac1
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/multido/md-read.me
@@ -0,0 +1,60 @@
+***********************************************************************
+**** "readme" file for multido.tex, v1.0, 92/09/28 ****
+***********************************************************************
+
+COPYRIGHT 1992, by Timothy Van Zandt, tvz@Princeton.EDU
+
+COPYING:
+
+ Copying of part or all of any file in the multido.tex distribution
+ is allowed under the following conditions only:
+
+ (1) You may freely distribute unchanged copies of the files. Please
+ include the documentation when you do so.
+ (2) You may modify a renamed copy of any file, but only for personal
+ use or use within an organization.
+ (3) You may copy fragments from the files, for personal use or for use
+ in a macro package for distribution, as long as credit is given
+ where credit is due.
+
+ You are NOT ALLOWED to take money for the distribution or use of
+ these files or modified versions or fragments thereof, except for
+ a nominal charge for copying etc.
+
+DESCRIPTION:
+
+ multido.tex contains a loop macro, \multido, that supports floating
+ point addition and has a nice interface. Among other things, it
+ is useful for pictures and putting numbers on axes. multido.tex
+ is compatible with most TeX macro packages.
+
+GETTING MULTIDO
+
+ The complete multido.tex distribution is available in .tar.Z form from
+ the /pub directory at Princeton.EDU. multido.tex is also available
+ at various TeX archives. However, all you really need is multido.tex
+ and md-doc.tex.
+
+FILES:
+
+ multido.tex: The stripped input file.
+ multido.sty: Same as multido.tex, but with .sty extension.
+ multido.doc: Documented code, from which multido.tex was extracted.
+ md-doc.dvi: Documentation, already typeset.
+ md-doc.tex: The LaTeX file from which md-doc.dvi was generated.
+ md-make.tex: For getting multido.tex from multido.doc.
+ md-read.me: This file.
+
+PRINTING THE DOCUMENTATION:
+
+ Pages 1-4 of md-doc.dvi are the User's Guide. Pages 5-12 are the
+ documentated code - probably not worth printing as there isn't much
+ documentation.
+
+ If this prints out OK for you, then you don't need to typeset md-doc.tex.
+
+INSTALLATION:
+
+ Put multido.tex and multido.sty where your TeX looks for inputs.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% END md-read.me %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/obsolete/macros/latex209/contrib/multido/multido.doc b/obsolete/macros/latex209/contrib/multido/multido.doc
new file mode 100644
index 0000000000..0ce7f128aa
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/multido/multido.doc
@@ -0,0 +1,907 @@
+%\iffalse%%%%%%%%%%%%% BEGIN multido.doc %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\fileversion{1.2}
+\def\filedate{92/10/12}
+%
+% DESCRIPTION:
+% multido.tex/multido.sty contains a loop macro, \multido, that supports
+% fixed point addition and has a nice interface. Among other things, it
+% is useful for pictures and putting numbers on axes. multido.tex
+% is compatible with most TeX macro packages, including Plain TeX, LaTeX,
+% AmSTeX, and Ams-LaTeX.
+%
+% INSTALLATION:
+% This file can be used as the input file. However, stripped input files
+% will load faster. To extract these files and typeset the documentation,
+% uncomment this line:
+%{}\let\endinput\relax
+% Plus one or more of the next three lines:
+%{}\let\PrintUsage\relax % To typeset Usage Notes.
+%{}\let\PrintCode\relax % To typeset Usage Notes and code.
+%{}\let\ExtractFiles\relax % To extract stripped multido.tex/multido.sty.
+% (Each line should still begin with {})
+% To print Usage Notes and/or Code, you must use LaTeX.
+% To extract files only, you can use Plain TeX or LaTeX.
+% To typeset code, you must have Frank Mittelbach's doc.sty, preferably
+% v1.7k (or later?), and gind.ist to make an index with
+% makeindex -s gind.ist multido.idx , if desired.
+%
+% CHANGES:
+%
+% V1.1: Fixed bug in FPadd that gave wrong answer for, e.g., 3.4 + -0.2.
+%
+% V1.2: Make unit optional for dimension variables when using PSTricks.
+%
+%--------------------------- BEGIN DOCUMENTED CODE -------------------------
+%%
+%% File multido.tex, for use with Generic TeX.
+%%
+%% COPYRIGHT 1992, by Timothy Van Zandt, tvz@Princeton.EDU
+%%
+%% Copying of part or all of this file is allowed under the following
+%% conditions only:
+%% (1) You may freely distribute unchanged copies of the file. Please
+%% include the documentation when you do so.
+%% (2) You may modify a renamed copy of the file, but only for personal
+%% use or use within an organization.
+%% (3) You may copy fragments from the file, for personal use or for
+%% distribution, as long as credit is given where credit is due.
+%%
+%% You are NOT ALLOWED to take money for the distribution or use of
+%% this file or modified versions or fragments thereof, except for
+%% a nominal charge for copying etc.
+%%
+% \fi
+% \CheckSum{528}
+% \CharacterTable
+% {Upper-case \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
+% Lower-case \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
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+% Yes, the documentation is pretty scimpy.
+%
+% These macros use \TeX{} primitives, plus the Plain \TeX{} commands:
+% \begin{quote}
+% "\dimen@", "\dimen@i", "\count@", "\newcount", "\newtoks", "\@ne",
+% "\tw@", and "\@z@".
+% \end{quote}
+%
+% Check whether file has been loaded already.
+% \begin{macrocode}
+\expandafter\ifx\csname multido@\endcsname\relax\else
+ \expandafter\endinput
+\fi
+% \end{macrocode}
+%
+% Identify the file on the terminal:
+% \begin{macrocode}
+\message{\space\space v\fileversion\space\space
+ \filedate\space\space <tvz>}
+% \end{macrocode}
+%
+% Take care of the catcode of "@":
+% \begin{macrocode}
+\edef\MultidoAtCode{\the\catcode`\@}
+\catcode`\@=11
+% \end{macrocode}
+%
+% These are some hacks borrowed from PSTricks, which are loaded if PSTricks is
+% not being used. "\@dimtonum" strips the value of "#1", a dimension register,
+% of the "pt", and assigns the result to "#2", a command sequence.
+% \begin{macrocode}
+\expandafter\ifx\csname @pstrickserr\endcsname\relax
+ \def\@empty{}
+ \def\@nnil{\@nil}
+ \def\@dimtonum#1#2{\edef#2{\@@dimtonum#1}}
+ \def\@@dimtonum#1{\expandafter\@@@dimtonum\the#1}
+ {\let\@nnil\expandafter\catcode`\p=12\catcode`\t=12
+ \global\@nnil\def\csname @@@dimtonum\endcsname#1pt{#1}}
+\fi
+% \end{macrocode}
+%
+% \begin{macro}{\multido@count,\multidocount}
+% "\multido@count" stores the number of repetitions. "\multidocount" keeps
+% track of the iteration. These are also used locally as scratch counters by
+% "\FPadd@".
+% \begin{macrocode}
+\newcount\multido@count
+\newcount\multidocount
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\multido@stuff}
+% "\multido@stuff" is used to store the \m{stuff} that is to be repeated.
+% \begin{macrocode}
+\newtoks\multido@stuff
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\multido,\mmultido,\Multido,\MMultido}
+% \begin{macrocode}
+\def\multido{\multido@{}{\begingroup}{\endgroup}}
+\def\mmultido{\multido@{\multido@stepvar}{\begingroup}{\endgroup}}
+\def\Multido{\multido@{}{}{}}
+\def\MMultido{\multido@{\multido@stepvar}{}{}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\multido@}
+% "\multido@initvar" processes the variable declarations, initializing the
+% value of the variables and defining "\multido@stepvar" to increment the
+% variables with each repetition. "\multido@count" is set to the number of
+% repetitions.
+% \begin{macrocode}
+\def\multido@#1#2#3#4#5#6{%\
+ #2%
+ \multido@count=#5\relax
+ \def\multido@stepvar{}%
+ \def\do{\noexpand\do\noexpand}%
+ \multido@initvar#4,\@nil,%
+ \let\do\noexpand
+ \edef\multido@stepvar{\multido@stepvar}%
+ \ifnum\multido@count<\z@\multido@count=-\multido@count\fi
+ \multidocount=1\relax
+ #1%
+ \multido@stuff{#6}%
+ \multido@loop
+ #3%
+ \ignorespaces}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\multido@loop}
+% "\multido@loop" does the repetition.
+% \begin{macrocode}
+\def\multido@loop{%
+ \the\multido@stuff
+ \ifnum\multidocount<\multido@count
+ \advance\multidocount\@ne
+ \multido@stepvar
+ \expandafter\multido@loop
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\multidostop}
+% \begin{macrocode}
+\def\multidostop{\multidocount=\multido@count}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\multido@initvar,\multido@@initvar,\multido@getvartype}
+% "\multido@initvar" passes each variable declaration to "\multido@@initvar".
+% \begin{macrocode}
+\def\multido@badvar{%
+ \multido@count=0
+ \errhelp{\multido command will be skipped.}%
+ \errmessage{Bad \string\multido\space variable declaration}}
+\def\multido@initvar#1,{%
+ \def\multido@temp{#1}%
+ \ifx\multido@temp\@nnil\else
+ \ifx\multido@temp\@empty\else
+ \multido@@initvar#1\@nil=+\@nil\relax
+ \fi
+ \expandafter\multido@initvar
+ \fi}
+\def\multido@@initvar#1=#2+#3\@nil#4\relax{%
+ \ifx\@empty#4\@empty
+ \multido@badvar
+ \else
+ \multido@vartype#1\@empty
+ \ifx\multido@temp\relax
+ \multido@badvar
+ \else
+ \multido@temp{#2}{#3}#1%
+ \fi
+ \fi}
+\def\multido@vartype#1{%
+ \ifcat\noexpand\@nil\noexpand#1%
+ \expandafter\multido@@vartype\string#1\@nil
+ \else
+ \let\multido@temp\relax
+ \fi}
+\def\multido@@vartype#1#2#3\@nil{%
+ \expandafter\let\expandafter\multido@temp
+ \csname multido@init@#2\endcsname}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\MultidoCheckNames}
+% \begin{macrocode}
+\def\MultidoCheckNames{%
+ \let\multido@@@vartype\multido@vartype
+ \def\multido@vartype##1{%
+ \ifx\undefined##1%
+ \multido@@@vartype{##1}%
+ \else
+ \errhelp{\multido command will be skipped.}%
+ \errmessage{Multido variable \string##1 already defined}%
+ \let\multido@temp\relax
+ \fi}}
+% \end{macrocode}
+% \end{macro}
+%
+% For each variable type, we must now define "\multido@init"\m{vartype}. The
+% syntax of these macros is:
+% \begin{quote}\tt
+% "\multido@init@"\m{vartype}\M{initial value}\M{increment}\M{variable}
+% \end{quote}
+% and the outcome should be:
+% \begin{enumerate}
+% \item Set \m{variable} to the initial value.
+% \item Invoke "\multido@addtostep"\M{step stuff}, where \m{step stuff} is
+% whatever should be done to increment the variable. \M{step stuff} is
+% expanded first, with expansion suppressed by "\do".
+% \end{enumerate}
+%
+% \begin{macro}{\multido@addtostep}
+% \begin{macrocode}
+\def\multido@addtostep#1{\edef\multido@stepvar{\multido@stepvar#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\multido@init@d,\multido@init@D,\multido@step@d}
+% We start with the variable type for dimensions ("d", "D").
+% \begin{macrocode}
+\def\multido@init@d#1#2#3{%
+ \expandafter\ifx\csname pssetlength\endcsname\relax
+ \dimen@=#1\relax\dimen@i=#2\relax
+ \else
+ \pssetlength\dimen@{#1}\pssetlength\dimen@i{#2}%
+ \fi
+ \edef#3{\number\dimen@ sp}%
+ \ifnum\multido@count<\z@\dimen@i=-\dimen@i\fi
+ \multido@addtostep{\do\multido@step@d{\do#3}{\number\dimen@i sp}}}
+\def\multido@step@d#1#2{%
+ \dimen@=#1\advance\dimen@#2
+ \edef#1{\number\dimen@ sp}}%
+\def\multido@init@D{\multido@init@d}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\multido@init@i,\multido@init@I,\multido@step@i}
+% Now the variable type for integers ("i", "I").
+% \begin{macrocode}
+\def\multido@init@i#1#2#3{%
+ \count@=#1\relax
+ \edef#3{\the\count@}%
+ \count@=#2\relax
+ \ifnum\multido@count<\z@\count@=-\count@\fi
+ \multido@addtostep{\do\multido@step@i{\do#3}{\the\count@}}}
+\def\multido@step@i#1#2{%
+ \count@=#1\advance\count@ by #2
+ \edef#1{\the\count@}}
+\def\multido@init@I{\multido@init@i}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\multido@init@r,\multido@init@R,\multido@step@r}
+% Now the variable type for reals ("r", "R").
+% \begin{macrocode}
+\def\multido@init@r#1#2#3{%
+ \dimen@=#1pt
+ \@dimtonum\dimen@#3%
+ \dimen@=#2pt
+ \ifnum\multido@count<\z@\dimen@=-\dimen@\fi
+ \multido@addtostep{\do\multido@step@r{\do#3}{\number\dimen@ sp}}}
+\def\multido@step@r#1#2{%
+ \dimen@=#1pt\advance\dimen@#2
+ \@dimtonum\dimen@#1}
+\def\multido@init@R{\multido@init@r}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\multido@init@n,\multido@step@n}
+% Now the variable type for numbers ("n", "N").
+% \begin{macrocode}
+\def\multido@init@n#1#2#3{%
+ \edef#3{#1}%
+ \ifnum\multido@count<\z@\expandafter\FPsub\else\expandafter\FPadd\fi
+ {0}{#2}\multido@temp
+ \multido@addtostep{\do\FPadd{\do#3}{\multido@temp}{\do#3}}}
+\def\multido@init@N{\multido@init@n}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FPadd,\FPsub}
+% Simple fixed-point addition couldn't be harder. "\dimen@" and "\dimen@i" are
+% used as scratch {\em counters} (to avoid creating a new counter). "\count@",
+% "\multido@count" and "\multidocount" are also used as scratch counters. %
+% This is probably pretty optimal, given the requirements that leading and
+% trailing spaces be OK in the arguments, and that there need not be any
+% numbers to the left of the decimal.
+% \begin{macrocode}
+\def\FPadd#1#2#3{%
+ \edef\multido@temp{#1..\noexpand\@nil#2}%
+ \expandafter\FPadd@\multido@temp..\@nil
+ \let#3\multido@temp}
+\def\FPsub#1#2{%
+ \edef\multido@temp{\noexpand\FPsub@#2\noexpand\@empty}%
+ \FPadd{#1}{\multido@temp}}
+\def\FPsub@#1{\ifx-#1\else-#1\fi}
+\def\FPadd@#1.#2.#3\@nil#4.#5.#6\@nil{%
+ \begingroup
+ \def\multido@temp{\let\next\relax}%
+ \let\next\z@
+ \afterassignment\multido@temp\count@=#1\next
+ \dimen@i=0#2sp\relax
+ \let\next\z@
+ \afterassignment\multido@temp\multido@count=#4\next
+ \multidocount=0#5\relax
+ \dimen@=\number\count@ sp
+ \count@=\@ne
+ \FPadd@@@#500000000\@nil
+ \ifnum#11<\z@
+ \count@=-\tw@
+ \dimen@=-\dimen@
+ \fi
+ \ifnum#41<\z@
+ \count@=-\count@
+ \multido@count=-\multido@count
+ \fi
+ \ifnum\count@>\z@
+ \advance\multido@count\dimen@
+ \advance\multidocount\dimen@i
+ \ifnum\multidocount<\multido@temp\relax
+ \advance\multidocount\multido@temp\relax
+ \else
+ \advance\multido@count\@ne
+ \fi
+ \advance\count@-3
+ \else
+ \advance\multido@count-\dimen@
+ \advance\multidocount-\dimen@i
+ \ifnum\multido@count<\z@
+ \multido@count=-\multido@count
+ \multidocount=-\multidocount
+ \advance\count@\@ne
+ \else
+ \ifnum\multido@count=\z@
+ \ifnum\multidocount<\z@
+ \multidocount=-\multidocount
+ \advance\count@\@ne
+ \fi
+ \fi
+ \fi
+ \ifnum\multidocount<\z@
+ \advance\multidocount\multido@temp
+ \advance\multido@count-\@ne
+ \fi
+ \advance\multidocount\multido@temp\relax
+ \fi
+ \expandafter\FPadd@@\the\multidocount\@empty\@nil
+ \endgroup}
+\def\FPadd@@#1#2#3\@nil{\xdef\multido@temp{%
+ \ifnum\count@=-1-\fi
+ \the\multido@count\ifx#2\@empty\else.#2#3\fi}}
+\def\FPadd@@@#1#2#3#4#5#6#7#8#9\@nil{\def\multido@temp{1#9}}
+% \end{macrocode}
+%
+% \end{macro}
+% \begin{macrocode}
+\catcode`\@=\MultidoAtCode\relax
+% \end{macrocode}
+%
+% \Finale
+% \Endinput
+%
+\endinput
+%
+%%%%%%%%%%%%%%%%%%%%%%%% END DOCUMENTED CODE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\catcode`\@=11
+
+%%%%%%%%%%%%%%%%%%%%%%%% INPUT FILE EXTRACTION %%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifx\ExtractFiles\relax\else
+ \begingroup
+ \catcode`\*=0 *catcode`*\=12
+ *long*def*next#1\relax\relax\relax{*endgroup}
+ *def*do#1{*catcode`#1=12}*dospecials*expandafter*next*fi
+\fi
+
+\def\infile{multido.doc}
+\def\outfile{multido.tex}
+\def\styfile{multido.sty}
+
+\newread\Infile
+\newwrite\Outfile
+
+\def\typeout{\immediate\write16}
+\newif\ifflag
+\def\CheckOK#1#2+{\ifx#1y\flagtrue\else\flagfalse\fi}
+
+\def\CheckFile#1{%
+ \typeout{}
+ \typeout{Preparing to make file `#1'.}
+ \immediate\openin1=#1\relax
+ \ifeof1\else
+ \typeout{%
+ File `#1' exists and will be overwritten if in current directory!!!}
+ \fi
+ \typeout{Make `#1'? (y=yes, n=no)}
+ \read16 to\OK
+ \expandafter\CheckOK\OK+}
+
+\begingroup
+ \catcode`\{=12
+ \catcode`\}=12
+ \catcode`\(=1
+ \catcode`\)=2
+ \catcode`\%=12
+ \gdef\%(%)
+ \gdef\Percent(%%)
+ \gdef\Braces({})
+\endgroup
+
+\def\temp#1{}
+\edef\Endinput{\expandafter\temp\string\\endinput}
+
+\def\ProcessLine{\expandafter\ProcessLINE\inline\relax\relax\nil}
+\def\ProcessLINE#1#2#3\nil{%
+ \def\tempa{#1}%
+ \def\tempb{#1#2}%
+ \ifx\tempa\%
+ \ifx\tempb\Percent\owrite\inline\fi
+ \else
+ \ifx\tempb\Braces\else\owrite\inline\fi
+ \fi}
+
+\def\owrite#1{\immediate\write\Outfile{#1}}
+
+\def\stripfile{%
+ \begingroup
+ \def\do##1{\catcode`##1=12\relax}
+ \dospecials
+ \endlinechar-1
+ \flagtrue
+ \loop
+ \read\Infile to\inline
+ \ifx\inline\Endinput\flagfalse\fi
+ \ifeof\Infile\flagfalse\fi
+ \ifflag
+ \ProcessLine
+ \repeat
+ \endgroup}
+
+\CheckFile{\outfile}
+
+\ifflag
+ \immediate\openout\Outfile\outfile\relax
+
+ \owrite{\%\% This is file `\outfile' generated on
+ \the\year/\the\month/\the\day.}
+ \owrite{\%\% The original source file was `\infile'.}
+ \owrite{\%\%}
+
+ \immediate\openin\Infile\infile\relax
+ \stripfile
+ \immediate\closein\Infile
+
+ \owrite{\Endinput}
+ \owrite{\%\%}
+ \owrite{\%\% End of file `\outfile'.}
+ \immediate\closeout\Outfile
+\fi
+
+\expandafter\ifx\csname styfile\endcsname\relax\flagfalse\else
+ \CheckFile{\styfile}
+\fi
+
+\ifflag
+ \immediate\openout\Outfile\styfile\relax
+ \immediate\write\Outfile{\string\input\space \outfile}
+ \immediate\write\Outfile{\Endinput}
+ \immediate\closeout\Outfile
+\fi
+\relax\relax\relax
+%%%%%%%%%%%%%%%%%%% END INPUT FILE EXTRACTION %%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\ifx\PrintUsage\relax
+ \let\next\relax
+\else
+ \ifx\PrintCode\relax
+ \let\next\relax
+ \else
+ \expandafter\ifx\csname @latexerr\endcsname\relax
+ \let\next\end\else\let\next\@@end
+ \fi
+ \fi
+\fi
+\next
+
+%%%%%%%%%%%%%% BEGIN PREAMBLE FOR DOCUMENATION %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%%
+\let\FileVersion\fileversion
+\let\FileDate\filedate
+%%
+\documentstyle[12pt]{article}
+\makeatletter
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%% DOC? STUFF %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Check whether doc.sty has been input. If not, code won't be printed.
+%% \CodeLineIndex can only be used in preamble. Other code-specific
+%% preamble stuff has been left to the end of this file.
+%%
+\ifx\PrintCode\relax\@input{doc.sty}\CodelineIndex\else
+ \def\StopEventually{\end{document}}
+\fi
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%% PAGE PARAMETERS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+\setlength{\parindent}{0pt} % paragraph indent
+\setlength{\parskip}{4pt plus 1pt minus 1pt}
+\setlength{\oddsidemargin}{4pc}
+\setlength{\evensidemargin}{4pc}
+\setlength{\topmargin}{-2.5pc}
+\setlength{\headheight}{12pt} % height of running head
+\setlength{\headsep}{20pt} % distance between header and text
+\setlength{\textheight}{54pc} % height of text on page
+\setlength{\textwidth}{35pc} % total width of a page
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%% VERBATIM %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% This is good for examples, using \verb or whatever explicitly.
+\def\Ex{\quote\tt}
+\def\endEx{\endquote}
+%%
+%% In the verbatim environment, \trivlist is changed to \list, so that
+%% verbatim code is offset from the left margin.
+%%
+\def\@verbatim{%
+ \list{}{} \item[]%
+ \leftskip\@totalleftmargin\rightskip\z@
+ \parindent\z@\parfillskip\@flushglue
+ \@@par\leavevmode\parskip=\z@
+ \def\par{\leavevmode\null\@@par}%
+ \obeylines
+ \let\do\@makeother \dospecials\catcode`\>=14\tt}
+\def\endverbatim{\endlist}
+%%
+\def\m#1{{\rm\it #1}} % For just putting things in italics (m=>meta>)
+\def\M#1{{\tt\{}\m{#1}{\tt\}}} % Argument is in italic, enclosed in tt braces.
+\def\N#1{{\tt\string#1}} % For in-line macro names
+\catcode`\>=13\def>{} % Now we can write \LaTeX> without problem.
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%% SECTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Section headings use customizable fonts, leave less space above
+%% and below, and may overhang on left.
+%%
+\def\section{\@startsection{section}{1}{\sechang}{-3ex plus -1ex
+ minus -.2ex}{1.5ex plus .2ex}{\secfont}}
+\def\subsection{\@startsection{subsection}{2}{\subsechang}{-2.75ex plus -1ex
+ minus -.2ex}{1.25ex plus .2ex}{\subsecfont}}
+\newdimen\sechang
+\newdimen\subsechang
+\sechang=-.6in
+\subsechang=-.375in
+\def\secfont{\Large\bf} % Section headings
+\def\subsecfont{\tt\large} % Subsection heading
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+%%%%%%%%%%%%%%%%%%%%%% DATES, VERSIONS AND TITLES %%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+\def\expanddate#1/#2/#3/{\number#3{} \month=#2 \ifcase\month\or
+ January \or February \or March \or April \or May \or June \or
+ July \or August \or September \or October \or November \or December \fi
+ 19#1}
+\def\thefiledate{\expandafter\expanddate\FileDate/}
+\date{Version \FileVersion\\ \thefiledate}
+\def\@maketitle{\newpage
+ \null
+ \begin{center}
+ {\Large\bf \@title \par}
+ \vskip 1.2em {\lineskip .5em
+ \begin{tabular}[t]{c}\@author\end{tabular}\par}
+ \vskip .8em {\@date}%
+ \end{center}
+ \par
+ \vskip .5em}
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%% PAGE STYLE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+\pagestyle{myheadings}
+\markright{Documentation for multido.tex \hfill
+ v.\FileVersion\hskip 1em \thefiledate\hfill}%
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%% END PREAMBLE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+\catcode`\"=13
+\def"{\verb"}
+\catcode`\@=12
+\begin{document}
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\title{Documentation for multido.tex:\\[2pt]
+ A loop macro for Generic \protect\TeX}
+\author{Timothy Van Zandt%
+ \thanks{Author's address: Department of Economics, Princeton University,
+ Princeton, NJ 08544-1021, USA. Internet: {\tt tvz@Princeton.EDU}}}
+\maketitle
+
+
+\section{Usage notes}
+
+ "multido.tex"/"multido.sty" contains the \N\multido> macro, which is a loop
+facility for Generic TeX. This macro happens to be useful for drawing
+pictures, and was originally developed for the PSTricks
+package,\footnote{PSTricks is an extensive collection of PostScript-based
+macros for Generic TeX. It is available from the /pub directory at
+Princeton.EDU, and \TeX> archives.} but you can use it for other purposes as
+well.
+
+ A special feature is support of fixed-point addition. For example, PSTricks
+uses the \N\multido> to put numbers on axes, much like in the following
+\LaTeX> example:
+\begin{verbatim}>
+\setlength{\unitlength}{1cm}
+\small
+\begin{picture}(8,1)(0,-.5)
+\put(0,0){\vector(1,0){8}}
+\multido{\i=0+1,\n=0+0.25}{8}{%
+ \put(\i,-.1){\line(0,1){.2}}
+ \put(\i,-.2){\makebox(0,0)[t]{\n}}}
+\end{picture}
+\end{verbatim}
+\begin{center}\leavevmode
+\setlength{\unitlength}{1cm}
+\small
+\begin{picture}(8,1)(0,-.5)
+\put(0,0){\vector(1,0){8}}
+\multido{\i=0+1,\n=0+0.25}{8}{%
+ \put(\i,-.1){\line(0,1){.2}}
+ \put(\i,-.2){\makebox(0,0)[t]{\n}}}
+\end{picture}
+\end{center}
+
+The general syntax for \N\multido> is:
+\begin{Ex}
+"\multido"\M{variables}\M{repetitions}\M{stuff}
+\end{Ex}
+ \m{stuff} is whatever you want repeated; it can be any balanced \TeX{} input.
+\m{repetitions} is the number times \m{stuff} is repeated.
+
+ The first argument is the interesting one. \m{variables} is a comma-separated
+list of variable declarations.\footnote{Don't use commas to mark the decimal
+point within the \protect\m{variables} argument, as they will be confused for
+delimiters.} Each variable declaration is of the form:
+\begin{center}\em
+ variable "=" initial value "+" increment
+\end{center}
+ \m{variable} is a command sequence that can be used in \m{stuff}. It is
+initially set to {\em initial value}, and is then incremented by {\em
+increment} with each repetition.
+
+ The first letter of the variable name determines the variable type. There are
+four variable types:
+\begin{description}
+ \item[Dimension (d or D)] The initial value and the increment should be
+dimensions (lengths, in \LaTeX> parlance). The substitution text is a
+dimension, with "sp" units. E.g., "\dx=4cm+5pt".\footnote{For PSTricks users,
+the unit is optional.}
+
+ \item[Number (n or N)] The initial value and increment should be integers or
+numbers with the same number of digits to the right of the decimal. The one
+exception is that it is always OK for the initial value to be an integer.
+There can be at most 8 digits on each side of the decimal. The substitution
+text is a number, with fixed-point addition. E.g., "\n=3+7.05",
+"\Nx=5.30+-1.25".
+
+ \item[Integer (i or I)] The initial value and increment should be integers.
+This gives the same result as using a number variable, but it is faster. E.g.,
+"\I=2+-1".
+
+ \item[Real (r or R)] The initial value and increment should be integers or
+numbers with at most 4 digits on each side of the decimal. The substitution
+text is a number, but with floating point addition and occasional small
+errors. This gives a less satisfactory result than using a number variable,
+but it is faster. E.g., "\ry=4.2+1.05".
+\end{description}
+
+ Here are some examples that illustrate how the substitution text is
+determined:
+\begin{quote}
+"\multido{}{10}{\TeX\ }"\\[3pt]
+\hbox to 2em{}\multido{}{10}{\TeX\ }{}\\[8pt]
+"\multido{\d=2pt+3pt}{5}{\d, }"\\[3pt]
+\hbox to 2em{}\multido{\d=2pt+3pt}{5}{\d, }{}\\[8pt]
+"\multido{\n=2+3}{10}{\n, }"\\[3pt]
+\hbox to 2em{}\multido{\n=2+3}{10}{\n, }{}\\[8pt]
+"\multido{\i=2+-3}{10}{\i, }"\\[3pt]
+\hbox to 2em{}\multido{\i=2+-3}{10}{\i, }{}\\[8pt]
+"\multido{\r=2+3.05}{6}{\r, }"\\[3pt]
+\hbox to 2em{}\multido{\r=2+3.05}{6}{\r, }{}\\[8pt]
+"\multido{\n=2.00+-3.05}{8}{\n, }"\\[3pt]
+\hbox to 2em{}\multido{\n=2.00+-3.05}{8}{\n, }{}
+\end{quote}
+
+Here are some details about the choice of names:
+\begin{itemize}
+ \item Your computer won't explode if you use names that conflict with \TeX>
+internal commands, but you might want to check name conflicts if you get
+inexplicable errors. The command "\MultidoCheckNames" can be useful in this
+case. It causes \N\multido> to report an error whenever you use a variable
+name that is already defined. But see the next item.
+ \item The whole \N\multido> loop is grouped. This means, e.g., that although
+"\i" is a Plain \TeX{} command sequence (giving a dotless ``\i''), you can use
+the variable "\i" if you do not use any dotless i's in \m{stuff} (and if you
+do not use "\MultidoCheckNames").
+\end{itemize}
+
+Here are a few more details:
+\begin{itemize}
+\item \N\Multido> commands can be nested.
+ \item Spaces after a \N\multido> command are ignored. This makes \N\multido>
+more hospitable for pictures.
+ \item Spaces between the various parts of the \m{variables} argument are
+ignored.
+\end{itemize}
+
+ And finally here a few special features, some of which are of interest mainly
+macro writers and other \TeX nicians:
+\begin{itemize}
+ \item The material that is repeated is not grouped, so that you can insert
+your own recursive routines.
+ \item There is a variant, "\mmultido", which works just like "\multido"
+except that the variables are all incremented once before starting.
+ \item There are variants, "\Multido" and "\MMultido" of "\multido" and
+"\mmultido", resp., that do not group the whole loop. This can be useful,
+e.g., for making entries in an alignment environment. However, these cannot be
+nested within any "\multido" macro.
+ \item If the number of repetitions is a negative number, the variables are
+incremented backwards.
+ \item The count register "\multidocount" keeps track of the number of current
+iteration.
+ \item The command "\multidostop" causes the "\multido" loop to quit at the
+end of the current iteration.
+\item Fixed point addition is performed by \N\FPadd> and \N\FPsub:
+\begin{Ex}
+"\FPadd"\M{num1}\M{num2}\M{\string\cs}\\
+"\FPsub"\M{num1}\M{num2}\M{\string\cs}
+\end{Ex}
+ \m{num2}\/ is added to or subtracted from \m{num1}, and the answers is stored
+in the command sequence given as the third argument. The rules about decimals
+and so on that apply to number variables apply here as well. E.g., after
+\begin{Ex}
+ "\FPsub{1.75}{-0.15}{\answer}"
+\end{Ex}
+the definition of "\answer" is 1.90.
+\end{itemize}
+
+\clearpage
+
+%%%%%%%%%%%%%%%%%% STOP HERE IF DOC.STY NOT INPUT%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+\StopEventually{}
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%% BEGIN CODE-SPECIFIC PREAMBLE %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+\catcode`\@=11
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%% CHANGE TO MACRO ENVIRONMENTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% A change to the doc.sty's macro environment.
+%% Prints macro names like subsections, instead of as marginal notes.
+%% Argument is comma separated list of macro names.
+%% No nested macro environments.
+%%
+%% WHY: Don't need as many \begin{macro} ... \end{macro}.
+%% Works even there isn't anything between \begin{macro} and
+%% \begin{macrocode}.
+%%
+\newif\iffirst@macroname
+\newif\ifnestedmacro
+\def\macro{%
+ \ifnum\macro@level=\z@
+ \def\next{\MakePrivateLetters \m@cro@}%
+ \else
+ \def\next{\@latexerr{Nested \string\begin{macro}}\@eha
+ \endgroup\end{macro}\macro@level=\z@\begin{macro}}
+ \fi
+ \next}
+\def\m@cro@#1{%
+ \first@macronametrue
+ \m@@cro@@#1,\@nil,}
+\def\m@@cro@@#1,{%
+ \def\@tempa{#1}\def\@tempb{\@nil}%
+ \ifx\@tempa\@tempb
+ \let\next\finishm@@cro@@
+ \else
+ {\advance\c@CodelineNo\@ne\SpecialMainIndex{#1}\nobreak}%
+ \DoNotIndex{#1}%
+ \iffirst@macroname
+ \edef\saved@macronames{\string#1}%
+ \first@macronamefalse
+ \else
+ \def\comma{\noexpand\comma}%
+ \edef\saved@macronames{\saved@macronames\comma\string#1}%
+ \fi
+ \let\next\m@@cro@@
+ \fi
+ \next}
+\def\finishm@@cro@@{%
+ \advance\macro@level\@ne
+ \def\comma{{\rm, }}%
+ \subsection*{\tt\saved@macronames}}
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%% DO NOT INDEX %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+\DoNotIndex{\ ,\!,\[,\\,\],\^,\`,\{,\},\~}
+\DoNotIndex{\@ifundefined,\@namedef,\@spaces,\@tempa,\@tempb}
+\DoNotIndex{\@warning,\active}
+\DoNotIndex{\begingroup,\catcode,\char,\csname,\def,\do}
+\DoNotIndex{\docdate,\dospecials,\edef,\else,\endcsname,\endgroup}
+\DoNotIndex{\expandafter,\fi,\filedate,\fileversion}
+\DoNotIndex{\gdef,\if,\ifcat}
+\DoNotIndex{\ifx,\immediate,\lccode,\let}
+\DoNotIndex{\lowercase,\next,\noexpand}
+\DoNotIndex{\relax,\space,\the}
+\DoNotIndex{\toks@,\count@,\dimen@,\dimen@ii}
+\DoNotIndex{\theatcode,\string,\t,\@empty,\@nil,\@nnil,\advance}
+\DoNotIndex{\dimen@i,\@,\endinput,\errhelp,\errmessage,\global,ifnum}
+\DoNotIndex{\p,\number,\newtoks,\ignorespaces,\message,\multido@temp}
+\DoNotIndex{\newcount,\xdef,\z@,\@ne,\tw@,\number,\undefined,\ifnum}
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%% OTHER DOC PARAMETERS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+\setcounter{IndexColumns}{2} % two column index;
+
+%\DisableCrossrefs
+\EnableCrossrefs
+
+\IndexPrologue{This index is only for the documented code. Underlined numbers refer roughly to the line number of the entry's definition, and all others indicate code lines where it is used.}
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%% END CODE-SPECIFIC PREAMBLE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+\catcode`\@=12
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\section{Documented code}
+
+\def\Endinput{\clearpage\PrintIndex\end{document}}
+
+\DocInput{multido.doc}
+%%%%%%%%%%%%%%%%%%% END DOCUMENTATION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%% END multido.doc %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
diff --git a/obsolete/macros/latex209/contrib/multido/multido.readme b/obsolete/macros/latex209/contrib/multido/multido.readme
new file mode 100644
index 0000000000..e99bf86a04
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/multido/multido.readme
@@ -0,0 +1,24 @@
+From: tvz@zandtwerk.Princeton.EDU
+Newsgroups: comp.text.tex
+Date: 21 Oct 92 19:12:29 GMT
+Organization: Princeton University
+Nntp-Posting-Host: zandtwerk.princeton.edu
+
+(This is a repost. The previously posted file had lines exceeeding 78
+characters.)
+
+Appended is v1.2 of multido.tex/multido.sty. v1.1 fixed a bug in
+fixed-point addition, and v1.2 made the unit optional for dimension
+variables when used with PSTricks. The version distributed with v0.92
+of PSTricks is v1.1.
+
+The appended file is called multido.doc. It can be used as the input
+file without modification, but it can also be used to extract stripped
+input files and to print the documentation.
+
+Tim
+---
+Timothy Van Zandt (609)258-4050 tvz@Princeton.EDU (NeXTMail)
+Dept. of Economics, Princeton University, Princeton, NJ 08544
+
+
diff --git a/obsolete/macros/latex209/contrib/multido/multido.sty b/obsolete/macros/latex209/contrib/multido/multido.sty
new file mode 100644
index 0000000000..da78169679
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/multido/multido.sty
@@ -0,0 +1,2 @@
+\input multido.tex
+\endinput
diff --git a/obsolete/macros/latex209/contrib/multido/multido.tex b/obsolete/macros/latex209/contrib/multido/multido.tex
new file mode 100644
index 0000000000..45c86505df
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/multido/multido.tex
@@ -0,0 +1,563 @@
+%%% Save file as: MULTIDO.TEX/MULTIDO.STY Source: FILESERV@SHSU.BITNET
+%%% NOTE: The documentation for this TeX macro/LaTeX style option appears
+%%% in multido.doc, a LaTeX file which follows \endinput
+%%% The following checksum includes all SHSU-generated topmatter
+%%% checksum = "61709 563 2028 19405"
+%% BEGIN multido.tex/multido.sty
+%%
+\def\fileversion{1.3}
+\def\filedate{92/11/06}
+%%
+%% COPYRIGHT 1992, by Timothy Van Zandt, tvz@Princeton.EDU
+%%
+%% DESCRIPTION:
+%% multido.tex/multido.sty contains a loop macro, \multido, that supports
+%% fixed-point addition and has a nice interface. Among other things, it
+%% is useful for pictures and putting numbers on axes. multido.tex
+%% is compatible with most TeX macro packages, including Plain TeX, LaTeX,
+%% AmSTeX, and Ams-LaTeX.
+%%
+%% INSTALLATION:
+%% Put this file where your TeX looks for inputs, under the name multido.tex.
+%% Name a copy multido.sty to use as a LaTeX style option, or create a file
+%% multido.sty with the lines:
+%% \input multido.tex
+%% \endinput
+%%
+%% DOCUMENTATION:
+%% See multido.doc, which might be appended to this file.
+%%
+%% COPYING:
+%% Copying of part or all of this file is allowed under the following
+%% conditions only:
+%% (1) You may freely distribute unchanged copies of the file. Please
+%% include the documentation when you do so.
+%% (2) You may modify a renamed copy of the file, but only for personal
+%% use or use within an organization.
+%% (3) You may copy fragments from the file, for personal use or for
+%% distribution, as long as credit is given where credit is due.
+%%
+%% You are NOT ALLOWED to take money for the distribution or use of
+%% this file or modified versions or fragments thereof, except for
+%% a nominal charge for copying etc.
+%%
+%% CODE:
+% These macros use TeX primitives, plus the Plain TeX commands:
+% \dimen@, \dimen@i, \count@, \newcount, \newtoks, \@ne, \tw@, \@z@.
+%
+% Check if file is loaded, announce file on terminal, and take care of @:
+%
+\expandafter\ifx\csname multido@\endcsname\relax\else\expandafter\endinput\fi
+\message{\space\space v\fileversion\space\space\filedate\space\space <tvz>}
+\edef\MultidoAtCode{\the\catcode`\@}\catcode`\@=11
+%
+% These are some hacks borrowed from PSTricks, which are loaded if PSTricks is
+% not being used. "\@dimtonum" strips the value of "#1", a dimension register,
+% of the "pt", and assigns the result to "#2", a command sequence.
+%
+\expandafter\ifx\csname @pstrickserr\endcsname\relax
+ \def\@empty{}
+ \def\@nnil{\@nil}
+ \def\@dimtonum#1#2{\edef#2{\@@dimtonum#1}}
+ \def\@@dimtonum#1{\expandafter\@@@dimtonum\the#1}
+ {\let\@nnil\expandafter\catcode`\p=12\catcode`\t=12
+ \global\@nnil\def\csname @@@dimtonum\endcsname#1pt{#1}}
+\fi
+%
+% "\multido@count" stores the number of repetitions. "\multidocount" keeps
+% track of the iteration. These are also used locally as scratch counters by
+% "\FPadd@". "\multido@stuff" is used to store the <stuff> that is to be
+% repeated.
+%
+\newcount\multido@count
+\newcount\multidocount
+\newtoks\multido@stuff
+%
+\def\multido{\multido@{}{\begingroup}{\endgroup}}
+\def\mmultido{\multido@{\multido@stepvar}{\begingroup}{\endgroup}}
+\def\Multido{\multido@{}{}{}}
+\def\MMultido{\multido@{\multido@stepvar}{}{}}
+%
+% "\multido@initvar" processes the variable declarations, initializing the
+% value of the variables and defining "\multido@stepvar" to increment the
+% variables with each repetition. "\multido@count" is set to the number of
+% repetitions.
+%
+\long\def\multido@#1#2#3#4#5#6{%
+ #2%
+ \multido@count=#5\relax
+ \ifnum\multido@count=\z@\else\multido@@{#1}{#4}{#6}\fi
+ #3%
+ \ignorespaces}
+\def\multido@@#1#2#3{%
+ \def\multido@stepvar{}%
+ \def\do{\noexpand\do\noexpand}%
+ \multido@initvar#2,\@nil,%
+ \let\do\noexpand
+ \edef\multido@stepvar{\multido@stepvar}%
+ \ifnum\multido@count<\z@\multido@count=-\multido@count\fi
+ \multidocount=1\relax
+ #1%
+ \multido@stuff{#3}%
+ \multido@loop}
+\def\multido@loop{%
+ \the\multido@stuff
+ \ifnum\multidocount<\multido@count
+ \advance\multidocount\@ne
+ \multido@stepvar
+ \expandafter\multido@loop
+ \fi}
+\def\multidostop{\multidocount=\multido@count}
+\def\multido@badvar{%
+ \multido@count=0
+ \errhelp{\multido command will be skipped.}%
+ \errmessage{Bad \string\multido\space variable declaration}}
+\def\multido@initvar#1,{%
+ \def\multido@temp{#1}%
+ \ifx\multido@temp\@nnil\else
+ \ifx\multido@temp\@empty\else
+ \multido@@initvar#1\@nil=+\@nil\relax
+ \fi
+ \expandafter\multido@initvar
+ \fi}
+\def\multido@@initvar#1=#2+#3\@nil#4\relax{%
+ \ifx\@empty#4\@empty
+ \multido@badvar
+ \else
+ \multido@vartype#1\@empty
+ \ifx\multido@temp\relax
+ \multido@badvar
+ \else
+ \multido@temp{#2}{#3}#1%
+ \fi
+ \fi}
+\def\multido@vartype#1{%
+ \ifcat\noexpand\@nil\noexpand#1%
+ \expandafter\multido@@vartype\string#1\@nil
+ \else
+ \let\multido@temp\relax
+ \fi}
+\def\multido@@vartype#1#2#3\@nil{%
+ \expandafter\let\expandafter\multido@temp
+ \csname multido@init@#2\endcsname}
+\def\MultidoCheckNames{%
+ \let\multido@@@vartype\multido@vartype
+ \def\multido@vartype##1{%
+ \ifx\undefined##1%
+ \multido@@@vartype{##1}%
+ \else
+ \errhelp{\multido command will be skipped.}%
+ \errmessage{Multido variable \string##1 already defined}%
+ \let\multido@temp\relax
+ \fi}}
+%
+% For each variable type, we must now define \multido@init<vartype>. The
+% syntax of these macros is:
+%
+% \multido@init@<vartype>{initial value}{increment}{variable}
+%
+% and the outcome should be:
+%
+% 1. Set <variable> to the initial value.
+% 2. Invoke \multido@addtostep{step stuff}, where <step stuff> is whatever
+% should be done to increment the variable. <step stuff> is expanded first,
+% with expansion suppressed by "\do".
+%
+\def\multido@addtostep#1{\edef\multido@stepvar{\multido@stepvar#1}}
+%
+% Variable type for dimensions ("d", "D"):
+%
+\def\multido@init@d#1#2#3{%
+ \expandafter\ifx\csname pssetlength\endcsname\relax
+ \dimen@=#1\relax\dimen@i=#2\relax
+ \else
+ \pssetlength\dimen@{#1}\pssetlength\dimen@i{#2}%
+ \fi
+ \edef#3{\number\dimen@ sp}%
+ \ifnum\multido@count<\z@\dimen@i=-\dimen@i\fi
+ \multido@addtostep{\do\multido@step@d{\do#3}{\number\dimen@i sp}}}
+\def\multido@step@d#1#2{%
+ \dimen@=#1\advance\dimen@#2
+ \edef#1{\number\dimen@ sp}}%
+\def\multido@init@D{\multido@init@d}
+%
+% Variable type for integers ("i", "I"):
+%
+\def\multido@init@i#1#2#3{%
+ \count@=#1\relax
+ \edef#3{\the\count@}%
+ \count@=#2\relax
+ \ifnum\multido@count<\z@\count@=-\count@\fi
+ \multido@addtostep{\do\multido@step@i{\do#3}{\the\count@}}}
+\def\multido@step@i#1#2{%
+ \count@=#1\advance\count@ by #2
+ \edef#1{\the\count@}}
+\def\multido@init@I{\multido@init@i}
+%
+% Variable type for reals ("r", "R").
+%
+\def\multido@init@r#1#2#3{%
+ \dimen@=#1pt
+ \@dimtonum\dimen@#3%
+ \dimen@=#2pt
+ \ifnum\multido@count<\z@\dimen@=-\dimen@\fi
+ \multido@addtostep{\do\multido@step@r{\do#3}{\number\dimen@ sp}}}
+\def\multido@step@r#1#2{%
+ \dimen@=#1pt\advance\dimen@#2
+ \@dimtonum\dimen@#1}
+\def\multido@init@R{\multido@init@r}
+%
+% Variable type for numbers ("n", "N").
+%
+\def\multido@init@n#1#2#3{%
+ \edef#3{#1}%
+ \ifnum\multido@count<\z@\expandafter\FPsub\else\expandafter\FPadd\fi
+ {0}{#2}\multido@temp
+ \multido@addtostep{\do\FPadd{\do#3}{\multido@temp}{\do#3}}}
+\def\multido@init@N{\multido@init@n}
+%
+% Simple fixed-point addition couldn't be harder. "\dimen@" and "\dimen@i" are
+% used as scratch {\em counters} (to avoid creating a new counter). "\count@",
+% "\multido@count" and "\multidocount" are also used as scratch counters.
+%
+% This is probably pretty close to optimal, given the requirements that
+% leading and trailing spaces be OK in the arguments, and that there need not
+% be any numbers to the left of the decimal.
+%
+\def\FPadd#1#2#3{%
+ \edef\multido@temp{#1..\noexpand\@nil#2}%
+ \expandafter\FPadd@\multido@temp..\@nil
+ \let#3\multido@temp}
+\def\FPsub#1#2{%
+ \edef\multido@temp{\noexpand\FPsub@#2\noexpand\@empty}%
+ \FPadd{#1}{\multido@temp}}
+\def\FPsub@#1{\ifx-#1\else-#1\fi}
+\def\FPadd@#1.#2.#3\@nil#4.#5.#6\@nil{%
+ \begingroup
+ \def\multido@temp{\let\next\relax}%
+ \let\next\z@
+ \afterassignment\multido@temp\count@=#1\next
+ \dimen@i=0#2sp\relax
+ \let\next\z@
+ \afterassignment\multido@temp\multido@count=#4\next
+ \multidocount=0#5\relax
+ \dimen@=\number\count@ sp
+ \count@=\@ne
+ \FPadd@@@#500000000\@nil
+ \ifnum#11<\z@
+ \count@=-\tw@
+ \dimen@=-\dimen@
+ \fi
+ \ifnum#41<\z@
+ \count@=-\count@
+ \multido@count=-\multido@count
+ \fi
+ \ifnum\count@>\z@
+ \advance\multido@count\dimen@
+ \advance\multidocount\dimen@i
+ \ifnum\multidocount<\multido@temp\relax
+ \advance\multidocount\multido@temp\relax
+ \else
+ \advance\multido@count\@ne
+ \fi
+ \advance\count@-3
+ \else
+ \advance\multido@count-\dimen@
+ \advance\multidocount-\dimen@i
+ \ifnum\multido@count<\z@
+ \multido@count=-\multido@count
+ \multidocount=-\multidocount
+ \advance\count@\@ne
+ \else
+ \ifnum\multido@count=\z@
+ \ifnum\multidocount<\z@
+ \multidocount=-\multidocount
+ \advance\count@\@ne
+ \fi
+ \fi
+ \fi
+ \ifnum\multidocount<\z@
+ \advance\multidocount\multido@temp
+ \advance\multido@count-\@ne
+ \fi
+ \advance\multidocount\multido@temp\relax
+ \fi
+ \expandafter\FPadd@@\the\multidocount\@empty\@nil
+ \endgroup}
+\def\FPadd@@#1#2#3\@nil{\xdef\multido@temp{%
+ \ifnum\count@=-1-\fi
+ \the\multido@count\ifx#2\@empty\else.#2#3\fi}}
+\def\FPadd@@@#1#2#3#4#5#6#7#8#9\@nil{\def\multido@temp{1#9}}
+%
+\catcode`\@=\MultidoAtCode\relax
+\endinput
+%% END multido.tex/multido.sty
+
+%% BEGIN multido.doc
+%%
+%% Documentation for multido.tex/multido.sty.
+%% Run through LaTeX, with or without the NFSS.
+%%
+%% If you find this file appended to multido.tex, copy it to a separate file
+%% or simply add "\let\endinput\relax" to the beginning of multido.tex.
+%%
+\documentstyle[12pt]{article}
+\input multido.tex
+
+\makeatletter
+
+%% PAGE PARAMETERS:
+\setlength{\parindent}{0pt} % paragraph indent
+\setlength{\parskip}{4pt plus 1pt minus 1pt}
+\setlength{\topmargin}{-2.5pc}
+\setlength{\headheight}{12pt} % height of running head
+\setlength{\headsep}{30pt} % distance between header and text
+\setlength{\textheight}{54pc} % height of text on page
+%%
+%% DATES, VERSIONS AND TITLES:
+%%
+\def\expanddate#1/#2/#3/{\year=19#1 \month=#2 \day=#3}
+\begingroup
+ \expandafter\expanddate\filedate/
+ \xdef\thefiledate{\today}
+\endgroup
+\date{Version \fileversion\\ \thefiledate}
+\def\@maketitle{%
+ \begin{center}
+ {\Large\bf \@title \par}
+ \vskip 1.2em {\lineskip .5em
+ \begin{tabular}[t]{c}\@author\end{tabular}\par}
+ \vskip .8em {\@date}%
+ \end{center}
+ \par
+ \vskip .5em}
+%%
+%% PAGE STYLE:
+%%
+\pagestyle{myheadings}
+\markright{Documentation for multido.tex \hfill
+ v.\fileversion\hskip 1em \thefiledate\hfill}%
+%%
+%% VERBATIM:
+%%
+\begingroup
+ \catcode`\{=12 \catcode`\}=12
+ \catcode`\(=1 \catcode`\)=2
+ \catcode`\+=0 \catcode`\\=12
+ +gdef+|(\) % \| = character \
+ +gdef+{({) % \{ = character {
+ +gdef+}(}) % \} = character }
++endgroup
+\def\Backslash{\protect\|}
+%%
+%% Define some functional font commands:
+%%
+\def\MainFont{\tt} % For macro definitions.
+\def\UsageFont{\tt} % For in-line macro names.
+\def\InlineFont{\tt} % For other in-line snipets of code.
+\def\MetaFont{\rm\it} % For meta arguments.
+%%
+%% Short-cuts for font commands:
+%%
+\def\s#1{\string#1}
+\def\t#1{{\InlineFont\string#1}} % For other in-line code.
+\def\m#1{{\MetaFont #1\/}} % For just putting things in italics
+\def\M#1{{\InlineFont\{\m{#1}\}}} % Arg is in italic, enclosed in tt braces.
+\let\N\t % For in-line macro names.
+\catcode`\<=13 \def<#1>{\m{#1}} % <meta>
+%%
+%% This is for listing macro definitions in a quote-like environment.
+%%
+\begingroup
+ \catcode`\[=1 \catcode`\]=2
+ \catcode`\{=13 \catcode`\}=12
+ \gdef\@MD[%
+ \catcode`\{=13 \catcode`\}=12
+ \def{##1}[\{[\MetaFont ##1]\}]]
+\endgroup
+\def\MD{%
+ \quote
+ \begingroup
+ \@MD
+ \def\end{\endgroup\end}%
+ \def\\{\@centercr\s}%
+ \MainFont
+ \s}
+\def\endMD{\endquote}
+%%
+%% END PREAMBLE:
+%%
+\catcode`\"=13
+\def"{\verb"}
+\catcode`\@=12
+\begin{document}
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\title{Documentation for multido.tex:\\[2pt]
+ A loop macro for Generic \protect\TeX}
+\author{Timothy Van Zandt%
+ \thanks{Author's address: Department of Economics, Princeton University,
+ Princeton, NJ 08544-1021, USA. Internet: {\tt tvz@Princeton.EDU}}}
+\maketitle
+
+ "multido.tex"/"multido.sty" contains the \N\multido\ macro, which is a loop
+facility for Generic TeX. This macro happens to be useful for drawing
+pictures, and was originally developed for the PSTricks
+package,\footnote{PSTricks is an extensive collection of PostScript-based
+macros for Generic TeX. It is available from the /pub directory at
+Princeton.EDU, and \TeX\ archives.} but you can use it for other purposes as
+well.
+
+ A special feature is support of fixed-point addition. For example, PSTricks
+uses the \N\multido\ to put numbers on axes, much like in the following
+\LaTeX\ example:
+\begin{verbatim}
+ \setlength{\unitlength}{1cm}
+ \small
+ \begin{picture}(8,1)(0,-.5)
+ \put(0,0){\vector(1,0){8}}
+ \multido{\i=0+1,\n=0+0.25}{8}{%
+ \put(\i,-.1){\line(0,1){.2}}
+ \put(\i,-.2){\makebox(0,0)[t]{\n}}}
+ \end{picture}
+\end{verbatim}
+\begin{center}
+ \setlength{\unitlength}{1cm}
+ \small
+ \begin{picture}(8,1)(0,-.5)
+ \put(0,0){\vector(1,0){8}}
+ \multido{\i=0+1,\n=0+0.25}{8}{%
+ \put(\i,-.1){\line(0,1){.2}}
+ \put(\i,-.2){\makebox(0,0)[t]{\n}}}
+ \end{picture}
+\end{center}
+
+The general syntax for \N\multido\ is:
+\begin{MD}
+ \multido{variables}{repetitions}{stuff}
+\end{MD}
+ <stuff> is whatever you want repeated; it can be any balanced \TeX\ input.
+<repetitions> is the number times <stuff> is repeated.
+
+ The first argument is the interesting one. <variables> is a comma-separated
+list of variable declarations.\footnote{Don't use commas to mark the decimal
+point within the \protect<variables> argument, as they will be confused for
+delimiters.} Each variable declaration is of the form:
+\begin{center}\tt
+ <variable> = <initial value> + <increment>
+\end{center}
+ <variable> is a command sequence that can be used in <stuff>. It is initially
+set to <initial value>, and is then incremented by <increment> with each
+repetition.
+
+ The first letter of the variable name determines the variable type. There are
+four variable types:
+\begin{description}
+ \item[Dimension (d or D)] The initial value and the increment should be
+dimensions (lengths, in \LaTeX\ parlance). The substitution text is a
+dimension, with "sp" units. E.g., "\dx=4cm+5pt".\footnote{For PSTricks users,
+the unit is optional.}
+
+ \item[Number (n or N)] The initial value and increment should be integers or
+numbers with the same number of digits to the right of the decimal. The one
+exception is that it is always OK for the initial value to be an integer.
+There can be at most 8 digits on each side of the decimal. The substitution
+text is a number, with fixed-point addition. E.g., "\n=3+7.05",
+"\Nx=5.30+-1.25".
+
+ \item[Integer (i or I)] The initial value and increment should be integers.
+This gives the same result as using a number variable, but it is faster. E.g.,
+"\I=2+-1".
+
+ \item[Real (r or R)] The initial value and increment should be integers or
+numbers with at most 4 digits on each side of the decimal. The substitution
+text is a number, but with floating point addition and occasional small
+errors. This gives a less satisfactory result than using a number variable,
+but it is faster. E.g., "\ry=4.2+1.05".
+\end{description}
+
+ Here are some examples that illustrate how the substitution text is
+determined:
+\begin{quote}
+ "\multido{}{10}{\TeX\ }"\\[3pt]
+ \hbox to 2em{}\multido{}{10}{\TeX\ }{}\\[8pt]
+ "\multido{\d=2pt+3pt}{5}{\d, }"\\[3pt]
+ \hbox to 2em{}\multido{\d=2pt+3pt}{5}{\d, }{}\\[8pt]
+ "\multido{\n=2+3}{10}{\n, }"\\[3pt]
+ \hbox to 2em{}\multido{\n=2+3}{10}{\n, }{}\\[8pt]
+ "\multido{\i=2+-3}{10}{\i, }"\\[3pt]
+ \hbox to 2em{}\multido{\i=2+-3}{10}{\i, }{}\\[8pt]
+ "\multido{\r=2+3.05}{6}{\r, }"\\[3pt]
+ \hbox to 2em{}\multido{\r=2+3.05}{6}{\r, }{}\\[8pt]
+ "\multido{\n=2.00+-3.05}{8}{\n, }"\\[3pt]
+ \hbox to 2em{}\multido{\n=2.00+-3.05}{8}{\n, }{}
+\end{quote}
+
+Here are some details about the choice of names:
+\begin{itemize}
+ \item Your computer won't explode if you use names that conflict with \TeX\
+internal commands, but you might want to check name conflicts if you get
+inexplicable errors. The command \N\MultidoCheckNames\ can be useful in this
+case. It causes \N\multido\ to report an error whenever you use a variable
+name that is already defined. But see the next item.
+ \item The whole \N\multido\ loop is grouped. This means, e.g., that although
+"\i" is a Plain \TeX\ command sequence (giving a dotless ``\i''), you can use
+the variable "\i" if you do not use any dotless i's in <stuff> (and if you do
+not use \N\MultidoCheckNames).
+\end{itemize}
+
+Here are a few more details:
+\begin{itemize}
+\item \N\Multido\ commands can be nested.
+ \item Spaces after a \N\multido\ command are ignored. This makes \N\multido\
+more hospitable for pictures.
+ \item Spaces between the various parts of the <variables> argument are
+ignored.
+\end{itemize}
+
+ And finally here a few special features, some of which are of interest mainly
+macro writers and other \TeX nicians:
+\begin{itemize}
+ \item The material that is repeated is not grouped, so that you can insert
+your own recursive routines.
+ \item There is a variant, "\mmultido", which works just like "\multido"
+except that the variables are all incremented once before starting.
+ \item If you use "\Multido" or "\MMultido" instead of "\multido" or
+"\mmultido", resp., then the whole loop is not grouped. This can be useful,
+e.g., for making entries in an alignment environment. However, these cannot be
+nested within any "\multido" macro.
+ \item If the number of repetitions is a negative number, the variables are
+incremented backwards.
+ \item The count register "\multidocount" keeps track of the number of current
+iteration.
+ \item The command "\multidostop" causes the "\multido" loop to quit at the
+end of the current iteration.
+\item Fixed point addition is performed by \N\FPadd\ and \N\FPsub:
+\begin{MD}
+ \FPadd{num1}{num2}{command}\\
+ \FPsub{num1}{num2}{command}
+\end{MD}
+ <num2> is added to or subtracted from <num1>, and the answers is stored in
+the command sequence given as the third argument. The rules about decimals and
+so on that apply to number variables apply here as well. E.g., after
+\begin{verbatim}
+ \FPsub{1.75}{-0.15}{\answer}
+\end{verbatim}
+the definition of "\answer" is 1.90.
+\end{itemize}
+
+\subsection*{Changes:}
+
+\begin{description}
+ \item[V1.1] Fixed bug in \N\FPadd\ that gave wrong answer for, e.g., $3.4 +
+-0.2.$
+
+\item[V1.2] Made unit optional for dimension variables when using PSTricks.
+
+ \item[V1.3] Now 0 repetitions really gets 0 repetitions. "\def\multido@"
+changed to "\long\def\multido@".
+\end{description}
+
+\end{document}
+%% END multido.doc
diff --git a/obsolete/macros/latex209/contrib/outline/outline.sty b/obsolete/macros/latex209/contrib/outline/outline.sty
new file mode 100644
index 0000000000..0a309d0586
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/outline/outline.sty
@@ -0,0 +1,50 @@
+% Save file as: OUTLINE.STY Source: FILESERV@SHSU.BITNET
+% outline.sty by Peter Halvorson, Georgia Institute of Technology,
+% Nuclear Engineering, (404) 894-8710 peter@fission.gatech.edu
+% ne201ph@prism.gatech.edu
+% As of January 10, 1991
+% Create six-level list environment {outline} for making outlines; mark
+% each outline topic with \item. Use of label/ref sequences provided.
+% A direct hack of the enumerate code from latex.tex ( added more depth and
+% outline style numbering). Use as you would use the enumerate environment.
+
+\@definecounter{@outlndepth}
+\newcount\@outlndepth \@outlndepth = 0
+
+\@definecounter{outlni}
+\@definecounter{outlnii}
+\@definecounter{outlniii}
+\@definecounter{outlniv}
+\@definecounter{outlnv}
+\@definecounter{outlnvi}
+
+\def\outline{\ifnum \@outlndepth >5 \@toodeep\else
+ \advance\@outlndepth \@ne
+ \edef\@outlnctr{outln\romannumeral\the\@outlndepth}\list
+ {\csname label\@outlnctr\endcsname}{\usecounter
+ {\@outlnctr}\def\makelabel##1{\hss\llap{##1}}}\fi}
+
+\let\endoutline =\endlist
+
+\def\labeloutlni{\theoutlni.}
+\def\theoutlni{\Roman{outlni}}
+
+\def\labeloutlnii{\theoutlnii.}
+\def\theoutlnii{\Alph{outlnii}}
+\def\p@outlnii{\theoutlni}
+
+\def\labeloutlniii{\theoutlniii.}
+\def\theoutlniii{\arabic{outlniii}}
+\def\p@outlniii{\p@outlnii\theoutlnii}
+
+\def\labeloutlniv{\theoutlniv.}
+\def\theoutlniv{\alph{outlniv}}
+\def\p@outlniv{\p@outlniii\theoutlniii}
+
+\def\labeloutlnv{(\theoutlnv)}
+\def\theoutlnv{\arabic{outlnv}}
+\def\p@outlnv{\p@outlniv\theoutlniv}
+
+\def\labeloutlnvi{(\theoutlnvi)}
+\def\theoutlnvi{\alph{outlnvi}}
+\def\p@outlnvi{\p@outlnv\theoutlnv}
diff --git a/obsolete/macros/latex209/contrib/outline/outline.tex b/obsolete/macros/latex209/contrib/outline/outline.tex
new file mode 100644
index 0000000000..aad701566d
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/outline/outline.tex
@@ -0,0 +1,94 @@
+% Save file as: OUTLINE-SAMPLE.TEX Source: FILESERV@SHSU.BITNET
+\documentstyle[outline]{report}
+
+% [outline] includes new outline environment. I. A. 1. a. (1) (a)
+% use \begin{outline} \item ... \end{outline}
+
+\pagestyle{empty}
+
+\begin{document}
+
+\begin{outline}
+ \item {\bf Introduction }
+ \begin{outline}
+ \item {\bf Applications } \\
+ Motivation for research and applications related to the
+ subject.
+ \item {\bf Organization } \\
+ Explain organization of the report, what is included, and what
+ is not.
+ \end{outline}
+ \item {\bf Literature Survey }
+ \begin{outline}
+ \item {\bf Experimental Work } \\
+ Literature describing experiments with something in common with
+ my experiment. My experiment is subdivided into section
+ relating to each aspect of the whole.
+ \begin{outline}
+ \item {\bf Drop Delivery } \\
+ Literature relating to the production of droplets.
+ \begin{outline}
+ \item {\bf Continuous } \\
+ Continuous drop production methods, i.e. jet methods.
+ \item {\bf Drop on Demand } \\
+ Drop on demand methods, i.e. ink jet devices. Produce drops
+ whenever needed, simplifies control of frequency.
+ \item {\bf Flexibility } \\
+ Best methods in terms of flexible velocities, volumes, and
+ frequencies.
+ \item {\bf Control Circuitry } \\
+ Circuitry necessary to control the drops, may include
+ control of generation, size, and frequency. Divertors and
+ drop chargers.
+ \item {\bf Extensibility } \\
+ Methods extensible to 2D applications.
+ \item {\bf Recirculation } \\
+ Recirculation techniques, pump, none, capillary.
+ \end{outline}
+ \item {\bf Instrumentation } \\
+ Literature dealing with measurement of various parameters.
+ \begin{outline}
+ \item {\bf Temperature }
+ \begin{outline}
+ \item {\bf Heater Surface }
+ \item {\bf Fluid Temperature }
+ \item {\bf Heat Flux }
+ \item {\bf Heat Transfer Coefficient }
+ \end{outline}
+ \item {\bf Drop Characteristics }
+ \begin{outline}
+ \item {\bf Size }
+ \item {\bf Velocity }
+ \item {\bf Frequency }
+ \end{outline}
+ \end{outline}
+ \item {\bf Heating Element } \\
+ Literature dealing with the heating element. Material
+ properties, surface properties, heat sources.
+ \begin{outline}
+ \item {\bf Material }
+ \item {\bf Heat Source }
+ \end{outline}
+ \end{outline}
+ \item {\bf Analytical Work }
+ \begin{outline}
+ \item {\bf Evaporation }
+ \item {\bf Boiling }
+ \item {\bf Leidenfrost Temperatures }
+ \item {\bf Heat Transfer }
+ \item {\bf Numerical Analysis }
+ \begin{outline}
+ \item {\bf Drop Characteristics }
+ \item {\bf Surface Wetting }
+ \item {\bf Transient Temperatures }
+ \end{outline}
+ \end{outline}
+ \end{outline}
+ \item {\bf Proposed Research }
+ \begin{outline}
+ \item {\bf Experimental Work }
+ \item {\bf Analytical Work }
+ \end{outline}
+\end{outline}
+
+\end{document}
diff --git a/obsolete/macros/latex209/contrib/outline/outlineitems.sty b/obsolete/macros/latex209/contrib/outline/outlineitems.sty
new file mode 100644
index 0000000000..a12bd00651
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/outline/outlineitems.sty
@@ -0,0 +1,51 @@
+% Save file as: OUTLINEITEMS.STY Source: FILESERV@SHSU.BITNET
+%% OUTLINEITEMS.STY -- Different outline \item options for LaTeX version 2.09
+%% September 28, 1988; revised January 9, 1991 (label/ref now operable)
+%% George D. Greenwade (BED_GDG@SHSU), Department of Economics and Business
+%% Analysis, Sam Houston State University, Huntsville, TX 77341-2118
+%%
+%% Includes original FULLPAGE.STY as default. Defines \outlineitems
+%% for traditional outline enumerations; retains standard
+%% default for enumeration under \normalitems.
+
+\marginparwidth 0pt
+\oddsidemargin 0pt
+\evensidemargin 0pt
+\marginparsep 0pt
+
+\topmargin 0pt
+
+\textwidth 6.5in
+\textheight 8.5 in
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% define the enumeration options %%
+%% (\outlineitems and \normalitems) %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\outlineitems{
+\def\theenumi{\Roman{enumi}}
+\def\labelenumi{\theenumi.}
+\def\theenumii{\Alph{enumii}}
+\def\p@enumii{\theenumi.}
+\def\labelenumii{\theenumii.}
+\def\theenumiii{\arabic{enumiii}}
+\def\p@enumiii{\p@enumii\theenumii.}
+\def\labelenumiii{\theenumiii.}
+\def\theenumiv{\alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii.}
+\def\labelenumiv{\theenumiv.}
+}
+
+\def\normalitems{
+\def\theenumi{\arabic{enumi}}
+\def\labelenumi{\theenumi.}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi.}
+\def\labelenumii{\theenumii.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\p@enumii\theenumii.}
+\def\labelenumiii{\theenumiii.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii.}
+\def\labelenumiv{\theenumiv.}
+}
diff --git a/obsolete/macros/latex209/contrib/resume/res-sample.tex b/obsolete/macros/latex209/contrib/resume/res-sample.tex
new file mode 100644
index 0000000000..7c7d570917
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/resume/res-sample.tex
@@ -0,0 +1,83 @@
+\documentstyle[margin,line]{res}
+
+% Logos
+% =====
+
+\font\attand=cmr7
+%\font\MetafontLogoFont=logo10
+
+\def\PS{{\tt P\small OST\tt S\small CRIPT}}
+\def\ATT{{AT{\attand \&}T}}
+\def\MF{{METAFONT}}
+\def\Cplusplus{{\rm C\raise.5ex\hbox{\small ++}}}
+\def\AmSTeX{{$\cal A\kern-.1667em\lower.5ex\hbox{$\cal M$}\kern-.125em
+S$-\TeX}}
+
+\begin{document}
+
+\name{Michael R. DeCorte}
+\address{2300 Naudain St\\
+Phily, PA\\
+(215) 546-0497\
+{\tt mrd@sun.soe.clarkson.edu}}
+
+\begin{resume}
+
+\section{Objective:}
+Gee, why can't I put ``To play with cool toys and have fun''?
+
+\section{Education:}
+{\bf Major:} Bachelor of Science, Computer Science, Clarkson
+University May 1989\\
+
+
+\section{Publications:}
+My picture was in my HS newpaper onc. Does that count?
+
+
+\section{Projects:}
+{\tt Eclipse}\\
+During a lunar eclipse the moon projects its shadow over the earth.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% I put the experience stuff here
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\begin{format}
+\title{l}\dates{r}\\
+\body\\
+\end{format}
+
+\title{Unix Wizard}
+\dates{September 1986 to Present}
+
+\section{Experience:}
+\begin{position}
+{\it Math and Computer Science},Clarkson University---
+Well, people keep asking me all these nifty questions about Unix
+so that makes me a Wizard right?
+\end{position}
+
+\title{\TeX{} Wizard}
+\dates{September 1986 to Present}
+
+\begin{position}
+{\it Math and Computer Science},Clarkson University---
+See Unix Wizard for a description and substitue \TeX{} for Unix.
+\end{position}
+
+\section{Systems:}
+\begin{ncolumn}{4}
+$\bullet$ Unix 4.x &$\bullet$ Unix V &$\bullet$ Sun OS
+&$\bullet$ VMS\\
+\end{ncolumn}
+
+\section{References:}
+Call me I will see if I can dig someone up. I hope my old room mate
+counts.
+
+\end{resume}
+\end{document}
+
+
+
diff --git a/obsolete/macros/latex209/contrib/resume/res-sample2.tex b/obsolete/macros/latex209/contrib/resume/res-sample2.tex
new file mode 100644
index 0000000000..891c60c0a9
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/resume/res-sample2.tex
@@ -0,0 +1,149 @@
+\documentstyle[margin,line]{res}
+
+% Logos
+% =====
+
+\font\attand=cmr7
+%\font\MetafontLogoFont=logo10
+
+\def\PS{{\tt P\small OST\tt S\small CRIPT}}
+\def\ATT{{AT{\attand \&}T}}
+\def\MF{{METAFONT}}
+\def\Cplusplus{{\rm C\raise.5ex\hbox{\small ++}}}
+\def\AmSTeX{{$\cal A\kern-.1667em\lower.5ex\hbox{$\cal M$}\kern-.125em
+S$-\TeX}}
+
+\oddsidemargin -.5in
+\evensidemargin -.5in
+\textwidth=6.0in
+
+\begin{document}
+
+
+\name{Mark R. Anderson}
+\address{mail code c-014\\
+University of California, San Diego\\
+La Jolla, CA 92093}
+
+\begin{resume}
+
+\section{\sc Objective}
+I wish to join a team involved in software development of a parallel
+processing system.
+
+\section{\sc Education}
+University of California at San Diego, San Diego, CA. \newline
+M.S. in Computer Science, June 1985; GPA: 4.0
+
+Harvey Mudd College, Claremont, CA. \newline
+B.S. in Mathematics, May 1982; GPA: 3.3
+
+Graduate coursework includes:
+Advanced Compiler Construction,
+Automata Theory,
+Combinatorial Algorithms,
+Operating Systems,
+Software Engineering,
+Parallel Processing Seminars,
+Formal Semantics of Programming Languages Seminars.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% I put the experience stuff here
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\begin{format}
+\title{l}\employer{r}\\
+\location{l}\dates{r}\\
+\body\\
+\end{format}
+
+\title{\em Research Assistant.}
+\employer{\bf Prep-P Project.}
+\dates{\bf Sep. 1984 -- Present.}
+\location{UCSD}
+
+\section{\sc Research and Work Experience}
+\begin{position}
+The Prep-P project is
+developing a preprocessor for the CHiP parallel architecture.
+The goal of the preprocessor is to map problems that use an arbitrary
+number of processes onto the processing elements of a fixed
+size machine.
+On this project I have served as co-supervisor.
+My duties included devising tasks for and supervising the work of others
+as well as writing and maintaining programs written in C.
+\end{position}
+
+\title{\em Teaching Assistant}
+\employer{\bf Department of EECS}
+\dates{\bf Sep. 1984 -- Dec. 1985.}
+\location{UCSD}
+\begin{position}
+I graded homework and
+conducted review sessions for graduate and undergraduate classes.
+\end{position}
+
+\title{\em Consultant}
+\employer{\bf Simple Software}
+\dates{\bf Feb. 1984 -- Apr. 1984.}
+\location{San Diego, CA.}
+\begin{position}
+I was hired as a consultant to develop a file compression
+system on micros.
+The system was written in C.
+\end{position}
+
+\title{\em Programmer/Analyst}
+\employer{\bf System Development Corporation}
+\dates{\bf May 1982 -- Sep. 1983.}
+\location{Santa Monica, CA.}
+\begin{position}
+I was a member of a group developing an interactive testing system
+for the Jovial programming language. I wrote parts of a Jovial to
+threaded code compiler in CWIC. CWIC is SDC's Lisp based compiler
+writing system.
+\end{position}
+
+\title{\em Research Assistant.}
+\employer{\bf Self-Sorting Memory Project}
+\dates{\bf Sep. 1981 -- Dec. 1981.}
+\location{Harvey Mudd College}
+\begin{position}
+I wrote a simulation of an algorithm which performed Gaussian elimination
+on a parallel machine using self-sorting memory modules.
+The simulator was written in Fortran.
+\end{position}
+
+\section{\sc Special Skills}
+Programming Languages: Algol, C, Fortran, Jovial, Lisp, Pascal, Snobol, and
+SETL. \newline
+Assembly Languages: 6502, 8051, 8086. \newline
+Operating Systems: IBM CMS, Unix, Vax VMS.
+
+\section{\sc Honors and Awards}
+University of California Regents Fellowship \newline
+Graduation with Distinction from Harvey Mudd College
+
+\section{\sc Publications:}
+D. Beeman, R. Lynds, and M. R. Anderson, ``Structural
+and vibrational properties of a model vitreous $As_{2}O_{3}$,''
+Journal of Non-Crystalline Solids Vol. 42 pp. 61-7 (October 1980).
+
+D. Beeman, J. Silverman, R. Lynds, and M. R. Anderson,
+``Modeling studies of amorphous carbon.,'' Physics Review
+B Vol. 30 pp. 870-5 (July 15, 1984).
+
+M. Anderson and F. Berman, ``A Complexity Measure for
+Demand Driven Data Flow Models,'' UCSD Dept. of Computer
+Science Technical Report (CS-087) (September 1986).
+
+M. Anderson and F. Berman, ``Removing Useless Tokens from
+a Dataflow Computation,'' submitted for publication (Jan 1987).
+
+
+\section{\sc References}
+Available on request.
+
+\end{resume}
+\end{document}
+
diff --git a/obsolete/macros/latex209/contrib/resume/res.sty b/obsolete/macros/latex209/contrib/resume/res.sty
new file mode 100644
index 0000000000..3885051dba
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/resume/res.sty
@@ -0,0 +1,781 @@
+% RESUME DOCUMENT STYLE -- Released 23 Nov 1989
+% for LaTeX version 2.09
+% Copyright (C) 1988,1989 by Michael DeCorte
+
+\typeout{Document Style `res' <26 Sep 89>.}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% res.sty
+%
+% \documentstyle{res}
+%
+% Copyright (c) 1988 by Michael DeCorte
+% Permission to copy all or part of this work is granted, provided
+% that the copies are not made or distributed for resale, and that
+% the copyright notice and this notice are retained.
+%
+% THIS WORK IS PROVIDED ON AN "AS IS" BASIS. THE AUTHOR PROVIDES NO
+% WARRANTY WHATSOEVER, EITHER EXPRESS OR IMPLIED, REGARDING THE WORK,
+% INCLUDING WARRANTIES WITH RESPECT TO ITS MERCHANTABILITY OR FITNESS
+% FOR ANY PARTICULAR PURPOSE.
+%
+% If you make any improvements, I'd like to hear about them.
+%
+% Michael DeCorte
+% P.O. Box 652
+% Potsdam NY 13676
+% mrd@sun.soe.clarkson.edu
+% mrd@clutx.bitnet
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% You can have multiple style options the legal options ones are:
+%
+% centered the name and address are centered at the top of the
+% page (default)
+%
+% line the name is the left with a horizontal line then
+% the address to the right
+%
+% overlapped the section titles overlap the body text (default)
+%
+% margin the section titles are to the left of the body text
+%
+% 11pt use 11 point fonts instead of 10 point fonts
+%
+% 12pt use 12 point fonts instead of 10 point fonts
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Commands
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \Resume prints the word resume but typeset nicely
+%
+% \newsectionwidth{dimen}
+% defines the amount of space the labels extend
+% into the left margin.
+% DO NOT TRY to change any of the dimensions
+% yourself. You will probably confuse the style file.
+%
+% \name{text} defines your name
+%
+% \address{text}
+% defines your address
+% this can be called twice if you have two addresses
+% use \\'s to indicate where either line breaks or
+% comas should go
+%
+% \opening this prints your name and address at that spot
+% this is not normally needed, as \begin{resume}
+% does this but is provided just in case you need
+% to do something odd
+%
+% \begin{resume} ... \end{resume}
+% all of the resume should go inside of this
+% environment
+%
+% \section{text}
+% This prints 'text' in the left hand margin.
+% Its exact placement depends on what the style
+% options has been set to. (overlapped or margin)
+% You should use \\ to start a new line. If the
+% style option is margin, the \\ is converted
+% to a space.
+% To use this in any of the list environments, put
+% the \section after the \item[] but before the
+% text.
+% Eg.
+% \begin{itemize}
+% \item\section{text}
+% text
+% \end{itemize}
+%
+% \begin{ncolumn}{n} ... \end{ncolumn}
+% creates a tabular environment with n equally
+% spaced columns. Separate columns by & and
+% end them with \\
+%
+% \begin{position} ... \end{position}
+% this is used to print a job description. There should
+% be only one job description in it. Information
+% related to the job (such as title, dates...) will
+% be printed.
+%
+% \begin{format} ... \end{format}
+% used to change the default format for the position
+% environment. Within it the recognized commands are:
+% \title{option}
+% \employer{option}
+% \location{option}
+% \dates{option}
+% \body
+% \\
+% where option is one of l,r,c standing for left, right, center.
+% The format will eventually be used to make several
+% tabular environments and you are defining the number of columns
+% and the placement of text within the columns of the tabulars.
+% Each row is terminated by a \\. Any number of options can
+% be on a line, they will each be set in their own columns.
+% Any of the options except \body may be left out.
+%
+% Eg.
+% \begin{format}
+% \title{l}\employer{r}\\
+% \dates{r}\\
+% \body\\
+% \location{l}\\
+% \end{format}
+%
+% In this example the title and employer information
+% are set in 2 columns left justified and right justified
+% respectively. Then the date is set right justified.
+% Then the body is set. Then the location is set left
+% justified.
+%
+% \employer{text}
+% \title{text}
+% \dates{text}
+% \location{text}
+% declare text for the next invocation of the position
+% environment
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Glue
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% sectionskip the amount of horizontal before a section
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Dimensions
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% sectionwidth the amount that the section titles go in the
+% left margin
+%
+% resumewidth the width of the total resume from the left
+% margin to the right. Don't use textwidth
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Definitions
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% sectionfont the font used to print section titles
+% use \renewcommand to change it
+%
+% namefont the font used to print your name
+% use \renewcommand to change it
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% THINGS TO DO
+%
+% add lm,rm options to format style to allow things to be placed
+% in the left or right margin respectivly
+%
+% add capability so that \body doesn't have to be proceeded (followed)
+% by a \\ allowing part of the description (eg. location) to be the
+% first (last) thing of the body
+%
+% clean up the list building procedures
+%
+% write docs to tell people how to use this
+
+
+\nofiles % resume's don't need .aux files
+
+
+\newtoks\tabular@text % holds the current list being processed
+\newtoks\tabular@head % holds the head tabular list
+\newtoks\tabular@tail % holds the tail tabular list
+\newtoks\@ta % used by \@append
+\newtoks\undefined@token\undefined@token={}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% prints a centered name with the address centered
+% or the two address on opposite sides of the page
+%
+\def\@printcentername{\begingroup
+ % print the name centered
+ \leavevmode\hbox to \textwidth{\hfil\@tablebox{\namefont\@name}\hfil}\par
+ \@ifundefined{@addressone}{%
+ % do nothing
+ }{%
+ \@ifundefined{@addresstwo}{
+ % only one address
+ \leavevmode\hbox to \textwidth{\hfil\@tablebox{\@addressone}\hfil}\par
+ }{
+ % two addresses
+ \leavevmode\hbox to \textwidth{\@tablebox{\@addressone}\hfil
+ \@tablebox{\@addresstwo}}\par
+ }%
+ }%
+\endgroup}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% this is used to print the name and address at the top of
+% the page with a hline in between
+%
+\def\namefont{\large\bf}
+\def\@linename{\begingroup
+ \def\\{, }
+ {\namefont\@name}
+ \vskip 2pt
+ \fullline
+ \vskip 2pt
+ % where do you live?
+ \@ifundefined{@addressone}{%
+ % do nothing
+ }{%
+ \leavevmode\hbox to \textwidth
+ {\hfill\vbox{\hbox{\@addressone}
+ \hbox{\@addresstwo}
+ }%
+ }\par
+ }
+\endgroup}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% HEADINGS:
+% There are two types of headings:
+% 1) one with the name centered and the address centered or
+% in the left and right side if there are two address
+% 2) one where the name is in the upper left corner
+% the a line accross the paper
+% then the address all on one line in the right corner
+% the second address will be directly below the first if defined
+%
+\let\print@name\relax
+\def\ds@centered{\ifx\print@name\relax\let\print@name\@printcentername\fi}
+\def\ds@line{\ifx\print@name\relax\let\print@name\@linename\fi}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Use this to set the sectionwidth.
+% It adjust the width of the text as well as the hoffset
+% You probably shouldn't touch any of the size paramaters
+% unless you really understand all of this but it is not
+% hard. Either way, it can only be executed once
+%
+\def\sectionfont{\bf}
+\newdimen\sectionwidth
+\newskip\sectionskip
+\newdimen\resumewidth
+
+\resumewidth=6.5in
+\sectionskip=3.5ex plus 1ex minus -.2ex % values stolen from LaTeX
+
+\def\newsectionwidth#1{%
+ \sectionwidth=#1
+ \textwidth=\resumewidth
+ \advance\textwidth-\sectionwidth
+ \hsize=\textwidth
+ \hoffset=\sectionwidth
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This is for sectiontitles that are entirely in the left margin.
+% multiline sectiontitles are permited and will be broken by
+% \TeX{} to fit into a box \verb|\sectionwidth| wide. It is advised
+% that \verb|\\| be used to break the lines by hand as \TeX{} will
+% probably not do what you want.
+%
+% When using this with {\tt tabbing} and {\tt list} (or anything
+% that is made out of {\tt list}) put the \section's inside of
+% the \verb|\begin{}| and the \verb|\item|Eg.
+% \begin{verbatim}
+% \begin{trivlist}
+% \item[]
+% \section{foo}
+% text
+% \end{trivlist}
+% \end{verbatim}
+%
+\def\boxed@sectiontitle#1{%
+ % this macro may be called in a tabular. Special code must be written
+ % to accomodate this. In LaTeX, a tabular is made out of hboxes.
+ % TeX never goes into horizontal mode because of this; it only
+ % gets into vertical mode and restricted horizontal mode. Certain
+ % indenting problems must be handled because of this. They
+ % are delt with at the end of this routine.
+ % It is also necessary to close the hbox that was created before
+ % the \section and create a new one when this macro has ended.
+ % This macro therefore simulates a \kill, so that any text before
+ % the \section not be printed. The proper use is therefore
+ % ...
+ % text\\
+ % \section{foo}
+ % more text\\
+ % ...
+ \ifx\\\@tabcr % is this in a tabular? (this *should* work but is a cludge)
+ \@stopfield % the is the first part of a \kill
+ \else
+ \@@par % This will end the previous paragraph if needed and
+ % go into vertical mode. If this was already in
+ % vertical mode then the \par does nothing.
+
+ \fi
+ \begingroup
+ \everypar={}%
+ \def\par{\@@par}%
+ \let\\=\@normalcr
+ \addpenalty{\@secpenalty} % this would be a good place for a page break
+ % \@secpenalty is what LaTeX uses before its
+ % section's. It happens to be -300
+ \addvspace{\sectionskip} % put in a bit of glue
+ % The following hbox will be contributed to the page list without going
+ % into horizontal mode. Therefore, any \parindent's, \parshape's, \leftskip
+ % will be ignored but \hoffset's are not. The result is that the box will
+ % only by \hoffset. This is what I want
+ \hbox to 0pt{%
+ \hss % this is an llap. In other words, this glue
+ % will shrink by the width of the stuff in the vbox
+ % (\sectionwidth) into the left margin and then
+ % insert the contents of the vbox.
+ \vtop to 0pt{% make a 0pt height paragraph, with the baseline at the
+ % lined up with the baseline of the first box in the list
+ \leftskip=0pt
+ \hsize=\sectionwidth
+ \textwidth=\sectionwidth
+ \raggedright % you don't want this filled out to the right margin
+ \sectionfont
+ #1\vss % Go into horizontal mode; do the paragraph;
+ % go into vertical mode; add some negative glue
+ % to give a box of 0pt height and depth
+ }%
+ }%
+ \addpenalty{-\@secpenalty} % this would be a bad place for a page break
+ \vskip-\baselineskip % when the next box is processed, baselineskip glue
+ % glue will be added (the box has no depth because of
+ % the \vss; therefore, we don't have to worry about
+ % \lineskiplimit). This -\baselineskip glue
+ % is to undo this. \nointerlineskip doesn't
+ % work because the baseline of this line would be lined
+ % up with the top of the top of the next box. We
+ % want the baselines lined up.
+ %
+ % It may have been possible to do this by forcing the
+ % baseline of this box to be the top of the box but
+ % then the interline skip between this box and the
+ % previous box would be off as the baselines of the
+ % this box (the one that being made above) and the
+ % previous line would be separated by \baselineskip
+ % (probably, it may be separted by the depth of the
+ % previous box + \lineskip) but as the baseline of
+ % this box has been moved to the top, the box's would
+ % separted by to much glue. The exact amount being
+ % the height of this box.
+ \endgroup
+ \ifx\\\@tabcr % is this in a tabular? (this *should* work but is a cludge)
+ % this is the second part of the \kill; it starts the next tabbing line
+ % Because this routine will never get into paragraph mode when used in
+ % tabbing the \parskip that is discussed below will never be inserted.
+ % Therefore it should not be negated as done below.
+ \@startline
+ \ignorespaces
+ \else
+ \vskip-\parskip % The next thing to be contributed will be a paragraph.
+ % Right before being contributed though a \vskip\parskip
+ % will be inserted. This is to negate it.
+ %
+ % I do consider this to be a bit of a cludge but
+ % I can not find a way to write \unskipfutureskip
+ % or a way to make TeX think that nothing has
+ % been contributed to the page list.
+ \fi
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This is for sectiontitles that are entirely above the section text
+%
+\def\unboxed@sectiontitle#1{%
+ \ifx\\\@tabcr % see boxed@sectiontitle for explation
+ \@stopfield
+ \else
+ \@@par
+ \fi
+ \begingroup
+ \everypar={}%
+ \def\par{\@@par}%
+ \def\\{ }
+ \addpenalty{\@secpenalty}
+ \addvspace{\sectionskip}
+ \hbox to 0pt{\hss\hbox to \sectionwidth{\sectionfont#1\hss}}
+ \addpenalty{-\@secpenalty} % this would be a bad place for a page break
+ \endgroup
+ \ifx\\\@tabcr % see boxed@sectiontitle for explation
+ \@startline
+ \else
+ \vskip-\parskip
+ \fi
+ \ignorespaces
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% There are two types of section headings:
+% 1) the section heading is all on one line and directly
+% below it, is the body of the text
+% 2) the section heading is entirely in the left margin
+% (possibly taking multiple lines) with the body of
+% the text next to it
+%
+\let\@@section\relax
+\def\ds@overlapped{\ifx\@@section\relax\newsectionwidth{0.5in}\let
+ \@@section\unboxed@sectiontitle\fi}
+\def\ds@margin{\ifx\@@section\relax\newsectionwidth{1.3in}\let
+ \@@section\boxed@sectiontitle\fi}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% DEFAULTS: (some of them)
+%
+% centered name
+% overlapped section titles
+%
+% format is:
+% title employer
+% location dates
+% body
+% with everything in the left of its column
+
+\input article.sty
+
+\ds@centered
+\ds@overlapped
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% typeset resume all nice and pretty
+%
+\def\Resume{{R\'{e}sum\'{e}}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% makes a line of width \textwidth starting at -\hoffset
+%
+\def\fullline{ % hrules only listen to \hoffset
+ \nointerlineskip % so I have this code
+ \moveleft\hoffset\vbox{\hrule width\textwidth}
+ \nointerlineskip
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% create a multiline box.
+%
+\def\@tablebox#1{\begin{tabular}[t]{@{}l@{\extracolsep{\fill}}}#1\end{tabular}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% use this to define your name
+%
+\def\name#1{\def\@name{#1}}
+
+\def\@name{}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% use this to define your address, this may be called more than once.
+%
+\let\@addressone\relax
+\let\@addresstwo\relax
+
+\def\address#1{
+ \@ifundefined{@addressone}{\def\@addressone{#1}}{\def\@addresstwo{#1}}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% if you want to print your name and address is a slightly
+% different format than sugessted, then this can be used
+% to place it exactly where you want
+%
+\def\opening{\def\@opening{}
+ \begingroup
+ \leftskip=-\hoffset % I use leftskip to move things to the left as
+ \advance\textwidth\hoffset % changing hoffset doesn't work. But this
+ \hsize=\textwidth % doesn't really work as hboxes are rules
+ % are unaffeted
+ \let\par=\@@par
+ \parindent=0pt
+ \parskip=0pt
+ \print@name
+ \endgroup
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% all of the resume goes in the resume environment
+%
+\newenvironment{resume}{\begingroup
+ \@ifundefined{@opening}{\opening}{}
+}{\endgroup}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% gives you a tabular environment with n equally spaced columns
+% \begin{ncolumn}{#} ... \end{ncolumn}
+%
+% The p option of LaTeX is broken in all but the newest verion
+% of latex.tex, this is how to fix it
+%
+\def\@endpbox{\par\egroup\hfil}
+\let\@@endpbox=\@endpbox
+
+\newdimen\@columnwidth % the width of each column equal to
+\def\ncolumn#1{%
+ % \@columnwidth = \textwidth / #1
+ \@columnwidth=\textwidth \divide\@columnwidth by #1
+ \begin{tabular*}{\textwidth}[t]%
+ {*{#1}{@{}p{\@columnwidth}@{\extracolsep{\fill}}}}
+}
+
+\def\endncolumn{\end{tabular*}}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \employer{text} defines employer to be text
+% \location{text} defines location to be text
+% \dates{text} defines dates to be text
+% \title{text} defines title to be text
+% \body
+%
+
+\def\employer#1{\def\@employer{\print@employer{#1}}}
+\def\location#1{\def\@location{\print@location{#1}}}
+\def\dates#1{\def\@dates{\print@dates{#1}}}
+\def\title#1{\def\@title{\print@title{#1}}}
+
+\let\l@justify\raggedright
+\let\r@justify\raggedleft
+\let\c@justify\centering
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \@format{name}{justify}
+% will define \print@#1 to print it's one argument
+% justified according to #2 which can be
+% l = left
+% r = right
+% c = center
+%
+% eg.
+% \@format{employer}{c}
+% is the same as \def\print@employer#1{{\centering #1\par}}
+%
+\def\@format#1#2{%
+ \expandafter\gdef\csname print@#1\endcsname##1{%
+ {\csname#2@justify\endcsname##1\par}}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% this is used to define how the position environment should
+% formated.
+%
+% \begin{format} positioning text \end{format}
+% where positioning text may be
+% \employer{pos}
+% \location{pos}
+% \dates{pos}
+% \title{pos}
+% \body (for the body of the position environment)
+% where pos is
+% l for left
+% r for right
+% c for center
+% use \\ to break the line
+% you don't have to use all of the options.
+% on any one line, you should indicate what you want on that line
+% and where it should go within its column.
+% eg.
+% the following prints the employer in the left with the location
+% centered within that its column. It then prints the date on the
+% right. Then it prints the body of the position environment. Then
+% it prints the title centered within its column; as there is only
+% one column here it is really just centered.
+%
+% \begin{format}
+% \employer{l}\location{c}\\
+% \dates{r}\\
+% \body\\
+% \title{c}\\
+% \end{format}
+
+\newcounter{numberofcolumns}
+\newenvironment{format}{%
+ \def\end@line@head{\append@tabular@head{tabular@text}\tabular@text={}%
+ \c@numberofcolumns 0}
+ \def\end@line@tail{\append@tabular@tail{tabular@text}\tabular@text={}%
+ \c@numberofcolumns 0}
+ \tabular@text={}
+ \tabular@head={}
+ \tabular@tail={}
+ \c@numberofcolumns 0
+ \let\\=\end@line@head
+ \def\employer##1{\advance\c@numberofcolumns 1
+ \@format{employer}{##1}
+ \append@tabular@text{employer}}
+ \def\location##1{\advance\c@numberofcolumns 1
+ \@format{location}{##1}
+ \append@tabular@text{location}}
+ \def\dates##1{\advance\c@numberofcolumns 1
+ \@format{dates}{##1}
+ \append@tabular@text{dates}}
+ \def\title##1{\advance\c@numberofcolumns 1
+ \@format{title}{##1}
+ \append@tabular@text{title}}
+ \def\body{\iftoks\tabular@head\undefined@token\then
+ \else
+ \@append{\noexpand\\}\to\tabular@head
+ \skotfi
+ \let\\=\end@line@tail}}{}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%taken from page 378 of TeXbook but freely hacked
+%
+% appends the expansion of #1 to the token list #2
+
+\def\@append#1\to#2{%
+ \@ta=\expandafter{#1}%
+ \xdef\@append@temp{\the#2\the\@ta}
+ \global#2=\expandafter{\@append@temp}%
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% CHAA006%vaxb.rhbnc.ac.uk@NSS.Cs.Ucl.AC.UK
+% texhax.88.078
+% is used to see if two token lists are equal
+% there must be a better way
+%
+
+\let \then = \empty
+\def \iftoks #1#2\then #3\else #4\skotfi{
+ \edef \1{\the #1}
+ \edef \2{\the #2}
+ \ifx \1\2\then #3\else #4\fi}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \append@tabular@text{command}
+%
+% appends command to the end of \tabular@text.
+% NOTE: command MUST be a command but without the \
+% Eg. \append@tabular@text{relax}
+%
+% used to define \tabular@text for the tabular environment
+% used by append@tabular@head and append@tabular@tail
+%
+
+\def\append@tabular@text#1{%
+\iftoks\tabular@text\undefined@token\then
+ \global\tabular@text=\expandafter{\csname @#1\endcsname}
+\else
+ \@append{&}\to\tabular@text
+ \@append{\csname @#1\endcsname}\to\tabular@text
+\skotfi
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% append@tabular@head
+%
+% appends command to the end of \tabular@text@head
+% NOTE: command MUST be a command but without the \
+% Eg. \append@tabular@head{relax}
+%
+% used to define \tabular@head for the tabular environment
+% used by the position environment
+%
+\def\append@tabular@head#1{%
+ \ifnum\the\c@numberofcolumns=0\relax
+ \else
+ \iftoks\tabular@head\undefined@token\then
+ \relax
+ \else
+ \@append{\noexpand\\}\to\tabular@head
+ \@append{\noexpand\penalty-\@secpenalty}\to\tabular@head
+ \skotfi
+ \@append{\noexpand\begin{ncolumn}}\to\tabular@head
+ \@append{\expandafter{\the\c@numberofcolumns}}\to\tabular@head
+ \@append{\the\csname#1\endcsname}\to\tabular@head
+ \@append{\noexpand\end{ncolumn}}\to\tabular@head
+ \fi
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% append@tabular@tail
+%
+% appends command to the end of \tabular@text@htail
+% NOTE: command MUST be a command but without the \
+% Eg. \append@tabular@tail{relax}
+%
+% used to define \tabular@tail for the tabular environment
+% used by the position environment
+%
+\def\append@tabular@tail#1{%
+ \ifnum\the\c@numberofcolumns=0\relax
+ \else
+ \iftoks\tabular@tail\undefined@token\then
+ \else
+ \@append{\noexpand\\}\to\tabular@tail
+ \@append{\noexpand\penalty-\@secpenalty}\to\tabular@tail
+ \skotfi
+ \@append{\noexpand\begin{ncolumn}}\to\tabular@tail
+ \@append{\expandafter{\the\c@numberofcolumns}}\to\tabular@tail
+ \@append{\the\csname#1\endcsname}\to\tabular@tail
+ \@append{\noexpand\end{ncolumn}}\to\tabular@tail
+ \fi
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% put the actual job descriptions here
+% \begin{postion} ... \end{position}
+% in the ... describe the position.
+% don't put the \dates \location etc in here. define them before hand
+\newenvironment{position}%
+ {%
+ \begingroup
+ \par
+ \the\tabular@head
+% \addpenalty{-\@secpenalty}% bad place for a page break
+ \penalty -\@secpenalty % bad place for a page break
+ \penalty 10000
+ \ignorespaces
+ }{%
+ \the\tabular@tail
+% \addpenalty{\@secpenalty}% good place for a page break
+ \penalty \@secpenalty % good place for a page break
+ \endgroup
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% DEFAULTS: (the rest of them)
+%
+% centered name
+% overlapped section titles
+%
+% format is:
+% title employer
+% location dates
+% body
+% with everything in the left of its column
+
+\@secpenalty = -500
+\topmargin 0pt
+\headheight 0pt
+\headsep 0pt
+\textheight 9in
+\parindent 0pt
+\topmargin 0in
+\oddsidemargin 0pt
+\evensidemargin 0pt
+\marginparwidth 0pt
+\parindent 0pt
+\parskip \baselineskip
+\setcounter{secnumdepth}{0}
+\def\@listI{\leftmargin\leftmargini
+\topsep 0pt
+\parskip 0pt
+\partopsep 2pt plus 2pt
+\parsep 2pt plus 2pt
+\itemsep \parsep}
+
+\pagestyle{empty} % don't want page numbers
+
+\begin{format}
+\title{l}\employer{r}\\
+\location{l}\dates{r}\\
+\body\\
+\end{format}
+
+\let\section\@@section
+
diff --git a/obsolete/macros/latex209/contrib/resume/resume-sample.tex b/obsolete/macros/latex209/contrib/resume/resume-sample.tex
new file mode 100644
index 0000000000..8522f68afd
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/resume/resume-sample.tex
@@ -0,0 +1,58 @@
+% resume-sample.tex 23 Oct 89
+% An example using the resume style option
+% By Stephen Gildea
+
+% original version 28 Sep 88
+% minor changes 23 Oct 89
+
+\documentstyle[11pt,resume]{article}
+\begin{document}
+
+\name{TERRY R. GENSYM}
+
+\addresses
+{{\bf Work Address} \\
+MIT Room E34--660 \\
+77 Massachusetts Ave. \\
+Cambridge, MA 02139 \\
+(617) 253--7955}
+{{\bf Home Address} \\
+72 West St.~Apt.~1 \\
+Cambridge, MA 02138 \\
+(617) 492--5543}
+
+\begin{llist}
+\sectiontitle{Objective}
+A large office, good pay, and very little work.
+Frequent expense-account trips to exotic lands would be a plus.
+
+\sectiontitle{Experience}
+\employer{CHENG'S CHINESE RESTAURANT} \location{Cambridge, MA}
+\dates{1970--1979}
+Soup taster for a small family-owned restaurant. Had final
+responsibility for the amount of Soy Sauce that went into the soups.
+
+\employer{CARL'S FASHIONS} \location{Watertown, MA}
+\dates{1979--1982}
+Needle-threader for Kelly Hormel, a leading tailor in the Boston area.
+Duties included keeping all needles ready for use and threaded with
+the appropriate type and color of thread for each day's jobs.
+
+\employer{INSIDIOUS BLUE MACHINES} \location{San Jose, CA}
+\dates{1982--present}
+Chief light bulb changer, with over 1500 square feet of office under my
+jurisdiction. The eyes of thousands were on me.
+
+\sectiontitle{Education}
+\employer{MASSACHUSETTS INSTITUTE OF TECHNOLOGY} \location{Cambridge, MA}
+B.A. in English History June 1970. Graduated at the top of my class.
+
+\sectiontitle{Publications}
+``A Multi-Threaded System for Needle Management,'' {\em Womens Wear Daily,}
+August 20, 1981.
+
+``The Representation of Flavor,'' with August Rancatori, {\em IEEE 1985
+Proceedings of the Workshop on Taste in Computers.}
+
+\end{llist}
+\end{document}
diff --git a/obsolete/macros/latex209/contrib/resume/resume.sty b/obsolete/macros/latex209/contrib/resume/resume.sty
new file mode 100644
index 0000000000..e70ec0c86c
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/resume/resume.sty
@@ -0,0 +1,100 @@
+% resume.sty 08 Mar 89
+% style option for formatting resumes.
+
+% This style option is designed to work with the article document
+% style of LaTeX version 2.09. Use
+% \documentstyle[resume]{article}
+
+% Copyright (c) 1987 by Stephen Gildea
+% Permission to copy all or part of this work is granted, provided
+% that the copies are not made or distributed for resale, and that
+% the copyright notice and this notice are retained.
+%
+% THIS WORK IS PROVIDED ON AN "AS IS" BASIS. THE AUTHOR PROVIDES NO
+% WARRANTY WHATSOEVER, EITHER EXPRESS OR IMPLIED, REGARDING THE WORK,
+% INCLUDING WARRANTIES WITH RESPECT TO ITS MERCHANTABILITY OR FITNESS
+% FOR ANY PARTICULAR PURPOSE.
+
+% If you make any improvements, I'd like to hear about them.
+
+% Stephen Gildea
+% MIT Earth Resources Lab
+% Cambridge, Mass. 02139
+% mit-erl!gildea
+% gildea@erl.mit.edu
+
+% 23 May 87 version 1
+% 08 Jun 88 center single \address lines
+% 02 Sep 88 enhancement to \employer from Jerry Leichter
+% LEICHTER-JERRY@cs.yale.edu or <LEICHTER@Venus.YCC.Yale.Edu>
+% 08 Mar 89 allow \\ in \sectiontitle to make multi-line titles
+
+\topmargin 0pt
+\headheight 0pt
+\headsep 0pt
+\textheight 9in
+\pagestyle{empty}
+\parindent 0pt
+\parskip \baselineskip
+\topmargin 0in
+\oddsidemargin 0in
+\evensidemargin 0in
+\textwidth 6.5in
+
+\setcounter{secnumdepth}{0}
+
+% use this to print your name at the top of the page
+\def\name#1{{\large\centering#1\\[2\baselineskip]}}
+
+% one address
+\def\address#1{{\centering #1\par}}
+
+% two addresses (say, home and work). They get printed side by side
+\def\addresses#1#2{\hbox to \hsize{\@tablebox{#1}\hfil\@tablebox{#2}}}
+
+\def\@tablebox#1{\begin{tabular}[t]{@{}l@{}}#1\end{tabular}}
+
+\newbox\@title
+
+% Most of the resume goes inside a llist environment. Within it, use
+% the \sectiontitle{title} command to begin new sections. The title
+% of the section is put in the left margin. The section text begins
+% on the next line if the sectiontitle is too long.
+\newenvironment{llist}{\begin{list}{}{\setlength
+ \labelwidth{1in}\setlength\leftmargin{\labelwidth}\addtolength
+ \leftmargin{\labelsep}\itemsep 5pt plus 2pt minus 2pt
+ \parsep 10pt plus 2pt minus 2pt
+ %% Set the depth of the title to 0 in case more than one line.
+ %% If the title takes more lines than the body, you lose.
+ \def\sectiontitle##1{\setbox\@title=\hbox{{\bf\@tablebox{##1}}}\dp\@title=0pt
+ \item[\copy\@title]\ifdim\wd\@title>\labelwidth
+ \leavevmode \\* \else \fi}
+ \def\makelabel##1{##1\hfill}}}{\end{list}}
+
+% like itemize but bullets are at the left margin
+\newenvironment{items}{\begin{list}{$\bullet$}
+ {\setlength\labelwidth{.5em}\setlength\leftmargin{1em}
+ \def\makelabel##1{##1\hfill}}}{\end{list}}
+
+% Use the \employer and \location commands to print the names and
+% cities of your employers. \employer always starts a new paragraph,
+% and should be followed by \location.
+%
+% \employer* is like \employer but is used for additional information
+% about the employer. It does NOT start a new paragraph, must
+% NOT be followed by \location, and always forces a new line after itself.
+\def\employer{\@ifstar{\@semployer}{\@employer}}
+\def\@employer#1{\par{\sc #1}}
+\def\@semployer#1{{\sc #1}\\}
+
+% The location is always flush right. It is moved to the next
+% line if there is not room left on this one.
+% See the TeXbook Chapter 14.
+\def\location#1{{\unskip\nobreak\hfill\penalty50\hskip2em
+ \hbox{}\nobreak\hfill \hbox{#1}\finalhyphendemerits=0 \\}}
+
+% This prints the date flush left.
+% The major shortcoming of this file:
+% There needs to be an option to print the date in the left margin,
+% because many people like to do it that way.
+\def\dates#1{#1\\[2pt]}
diff --git a/obsolete/macros/latex209/contrib/script/checkprt.tex b/obsolete/macros/latex209/contrib/script/checkprt.tex
new file mode 100644
index 0000000000..6c4d8ed87a
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/script/checkprt.tex
@@ -0,0 +1,104 @@
+% checkprt.tex -- by Frank Neukam (01 Dec 1993)
+
+\typeout{}
+\typeout{*** checkprt.tex v2.0 by Frank Neukam <01 Dec 1993> ***}
+\typeout{}
+\documentstyle{script_s}
+\pagestyle{empty}
+
+\textwidth 210mm
+\textheight 297mm
+\oddsidemargin -1in
+\evensidemargin -1in
+\marginparwidth 0in
+\marginparsep 0in
+\topmargin -1in
+\headheight 0in
+\headsep 0in
+\footheight 0in
+\footskip 0in
+\topskip 0in
+\parindent 0in
+
+\begin{document}
+\scriptsize\sf
+\newcounter{unitcnt}
+\setlength{\unitlength}{1sp}
+\begin{picture}(0,0)
+\put(9323400,-27690498){\line(1,0){20511480}}
+\put(19579140,-9323400){\line(0,-1){36734196}}
+%
+% left
+% mm
+\multiput(186468,-27690498)(186468,0){50}{\line(0,1){372936}}
+\multiput(932340,-27690498)(932340,0){10}{\line(0,1){559404}}
+\multiput(1864680,-27690498)(1864680,0){5}{\line(0,1){745872}}
+\setcounter{unitcnt}{10}
+\multiput(1864680,-26571690)(1864680,0){5}%
+ {\makebox(0,0){\arabic{unitcnt}}\addtocounter{unitcnt}{10}}
+\put(10255740,-27354856){mm}
+% inch
+\multiput(236815,-27690498)(236815,0){40}{\line(0,-1){372936}}
+\multiput(473629,-27690498)(473629,0){20}{\line(0,-1){559404}}
+\multiput(4736290,-27690498)(4736290,0){2}{\line(0,-1){745872}}
+\setcounter{unitcnt}{1}
+\multiput(4736290,-28809306)(4736290,0){2}%
+ {\makebox(0,0){\arabic{unitcnt}}\addtocounter{unitcnt}{1}}
+\put(10255740,-28343136){inch}
+%
+% right
+% mm
+\multiput(38971812,-27690498)(-186468,0){50}{\line(0,1){372936}}
+\multiput(38225940,-27690498)(-932340,0){10}{\line(0,1){559404}}
+\multiput(37293600,-27690498)(-1864680,0){5}{\line(0,1){745872}}
+\setcounter{unitcnt}{10}
+\multiput(37293600,-26571690)(-1864680,0){5}%
+ {\makebox(0,0){\arabic{unitcnt}}\addtocounter{unitcnt}{10}}
+\put(27932906,-27354856){mm}
+% inch
+\multiput(38921465,-27690498)(-236815,0){40}{\line(0,-1){372936}}
+\multiput(38684651,-27690498)(-473629,0){20}{\line(0,-1){559404}}
+\multiput(34421990,-27690498)(-4736290,0){2}{\line(0,-1){745872}}
+\setcounter{unitcnt}{1}
+\multiput(34421990,-28809306)(-4736290,0){2}%
+ {\makebox(0,0){\arabic{unitcnt}}\addtocounter{unitcnt}{1}}
+\put(27932906,-28343136){inch}
+%
+% top
+% mm
+\multiput(19579140,-186468)(0,-186468){50}{\line(-1,0){372936}}
+\multiput(19579140,-932340)(0,-932340){10}{\line(-1,0){559404}}
+\multiput(19579140,-1864680)(0,-1864680){5}{\line(-1,0){745872}}
+\setcounter{unitcnt}{10}
+\multiput(18460332,-1864680)(0,-1864680){5}%
+ {\makebox(0,0){\arabic{unitcnt}}\addtocounter{unitcnt}{10}}
+\put(18460332,-10442208){\makebox(0,0)[b]{mm}}
+% inch
+\multiput(19579140,-236815)(0,-236815){40}{\line(1,0){372936}}
+\multiput(19579140,-473629)(0,-473629){20}{\line(1,0){559404}}
+\multiput(19579140,-4736290)(0,-4736290){2}{\line(1,0){745872}}
+\setcounter{unitcnt}{1}
+\multiput(20697948,-4736290)(0,-4736290){2}%
+ {\makebox(0,0){\arabic{unitcnt}}\addtocounter{unitcnt}{1}}
+\put(20697948,-10442208){\makebox(0,0)[b]{inch}}
+%
+% bottom
+% mm
+\multiput(19579140,-55194528)(0,186468){50}{\line(-1,0){372936}}
+\multiput(19579140,-54448656)(0,932340){10}{\line(-1,0){559404}}
+\multiput(19579140,-53516316)(0,1864680){5}{\line(-1,0){745872}}
+\setcounter{unitcnt}{10}
+\multiput(18460332,-53516316)(0,1864680){5}%
+ {\makebox(0,0){\arabic{unitcnt}}\addtocounter{unitcnt}{10}}
+\put(18460332,-45311724){\makebox(0,0)[b]{mm}}
+% inch
+\multiput(19579140,-55144181)(0,236815){40}{\line(1,0){372936}}
+\multiput(19579140,-54907367)(0,473629){20}{\line(1,0){559404}}
+\multiput(19579140,-50644706)(0,4736290){2}{\line(1,0){745872}}
+\setcounter{unitcnt}{1}
+\multiput(20697948,-50644706)(0,4736290){2}%
+ {\makebox(0,0){\arabic{unitcnt}}\addtocounter{unitcnt}{1}}
+\put(20697948,-45311724){\makebox(0,0)[b]{inch}}
+\end{picture}
+\end{document}
+
diff --git a/obsolete/macros/latex209/contrib/script/dir.tex b/obsolete/macros/latex209/contrib/script/dir.tex
new file mode 100644
index 0000000000..1aa7b8d117
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/script/dir.tex
@@ -0,0 +1,74 @@
+% dir.tex -- by Frank Neukam (01 Dec 1993)
+% Generates a directory from given .ADR file
+% Remove `german' two lines below if german.sty is unavailable or useless
+
+\documentstyle[german,10pt,twoside]{script_s}
+\headseplineon
+\raggedbottom
+
+\def\empty{}
+\def\adrfile{}
+\def\adrtitle{}
+
+\typeout{}
+\typeout{*** dir.tex v2.0 by Frank Neukam <01 Dec 1993> ***}
+\typeout{}
+\typein[\adrfile]{Name of .ADR file (without .ADR): }
+\typeout{}
+\typein[\adrtitle]{Title of directory: }
+\typeout{}
+\ifx\adrtitle\empty\def\adrtitle{\ }\fi
+
+\newdimen\paperwidth
+\newdimen\leftfield
+\newdimen\rightfield
+\newdimen\adrindent
+\paperwidth 210mm
+\leftfield 40mm
+\rightfield 25mm
+\adrindent 1em
+\advance\leftfield by -\adrindent
+\textwidth 70mm
+\oddsidemargin -1in
+\evensidemargin -1in
+\advance\oddsidemargin by 9mm
+\advance\evensidemargin by \paperwidth
+\advance\evensidemargin by -9mm
+\advance\evensidemargin by -\textwidth
+\textheight 120mm
+\headheight 1\baselineskip
+\headsep 0.5\baselineskip
+\footheight 1\baselineskip
+\footskip 1.5\baselineskip
+\topmargin -1in
+\advance\topmargin by 8mm
+\marginparwidth 0in
+\marginparsep 0in
+\marginparpush 0in
+\parskip 0.5\baselineskip
+\parindent 0in
+
+\begin{document}
+\def\headfont{\sfb}
+\def\adrchar#1{\clearpage\typeout{#1}\markboth{#1}{#1}}
+\def\adrentry#1#2#3#4#5#6#7#8{\hspace{\adrindent}%
+ \parbox[b]{\leftfield}{\raggedright \hspace{-\adrindent}{\sc #1}%
+ \ifx #2\empty \else , #2\fi%
+ \ifx #3\empty \else \par #3\fi%
+ \ifx #7\empty \else \par (#7)\fi}%
+ \hfill%
+ \parbox[b]{\rightfield}{\raggedright%
+ \ifx #8\empty \else {\scriptsize #8}\par \fi #4}\par}
+\ifx\adrfile\empty \else
+ \pagestyle{empty}
+ \null\vfil
+ \begin{center}
+ {\Large \sfb \adrtitle}
+ \end{center}
+ \vfil\vfil\null
+ \cleardoublepage
+ \pagestyle{myheadings}
+ \input\adrfile.adr\relax
+\fi
+\end{document}
+
diff --git a/obsolete/macros/latex209/contrib/script/phone.tex b/obsolete/macros/latex209/contrib/script/phone.tex
new file mode 100644
index 0000000000..e58671e268
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/script/phone.tex
@@ -0,0 +1,31 @@
+% phone.tex -- by Frank Neukam (01 Dec 1993)
+% Generates a list of phone numbers from given .ADR file
+% Remove `german' two lines below if german.sty is unavailable or useless
+
+\documentstyle[german,12pt]{script_s}
+
+\def\empty{}
+\def\adrfile{}
+\def\adrtitle{}
+
+\typeout{}
+\typeout{*** phone.tex v2.0 by Frank Neukam <01 Dec 1993> ***}
+\typeout{}
+\typein[\adrfile]{Name of .ADR file (without .ADR): }
+\typeout{}
+\typein[\adrtitle]{Title of the list of phone numbers: }
+\typeout{}
+
+\parindent 0pt
+\pagestyle{empty}
+\begin{document}
+{\LARGE \sfb \null\hfill\adrtitle\hfill\null\par \vspace{3ex}}
+\def\adrchar#1{\vspace{1ex}}
+\def\adrentry#1#2#3#4#5#6#7#8{\setbox0\hbox{#4}
+ {\sc #1}%
+ \ifx #2\empty \else , #2\fi%
+ \ifx #7\empty \else \ (#7)\fi%
+ \ \dotfill\ \unhbox0\par}
+\ifx\adrfile\empty \else \input\adrfile.adr\relax \fi
+\end{document}
+
diff --git a/obsolete/macros/latex209/contrib/script/script.dvi b/obsolete/macros/latex209/contrib/script/script.dvi
new file mode 100644
index 0000000000..71460cb122
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/script/script.dvi
Binary files differ
diff --git a/obsolete/macros/latex209/contrib/script/script.sty b/obsolete/macros/latex209/contrib/script/script.sty
new file mode 100644
index 0000000000..e4d32f55d1
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/script/script.sty
@@ -0,0 +1,673 @@
+% script.sty -- by Frank Neukam (01 Dec 1993)
+% based on Leslie Lamport's report and book styles.
+
+\typeout{Document Style `script' v2.0 by Frank Neukam <01 Dec 1993>}
+
+\ifx\selectfont\undefined
+ \font\tensfb =cmssbx10 scaled \magstep0
+ \font\elvsfb =cmssbx10 scaled \magstephalf
+ \font\twlsfb =cmssbx10 scaled \magstep1
+ \font\frtnsfb =cmssbx10 scaled \magstep2
+ \font\svtnsfb =cmssbx10 scaled \magstep3
+ \font\twtysfb =cmssbx10 scaled \magstep4
+ \font\twfvsfb =cmssbx10 scaled \magstep5
+\else
+ \def\tensfb{\family{\sfdefault}\series{bx}\shape{n}\size{10}{12pt}\selectfont}
+ \def\elvsfb{\family{\sfdefault}\series{bx}\shape{n}\size{11}{13.6pt}\selectfont}
+ \def\twlsfb{\family{\sfdefault}\series{bx}\shape{n}\size{12}{14.5pt}\selectfont}
+ \def\frtnsfb{\family{\sfdefault}\series{bx}\shape{n}\size{14}{18pt}\selectfont}
+ \def\svtnsfb{\family{\sfdefault}\series{bx}\shape{n}\size{17}{22pt}\selectfont}
+ \def\twtysfb{\family{\sfdefault}\series{bx}\shape{n}\size{20}{25pt}\selectfont}
+ \def\twfvsfb{\family{\sfdefault}\series{bx}\shape{n}\size{25}{30pt}\selectfont}
+\fi
+
+\def\@ptsize{1}
+\@namedef{ds@10pt}{\def\@ptsize{0}}
+\@namedef{ds@11pt}{\def\@ptsize{1}}
+\@namedef{ds@12pt}{\def\@ptsize{2}}
+\newdimen\paperwidth
+\newdimen\paperheight
+\paperwidth 210mm
+\paperheight 297mm
+\@namedef{ds@DINA3}{\paperwidth=297mm \paperheight=420mm}
+\@namedef{ds@DINA4}{\paperwidth=210mm \paperheight=297mm}
+\@namedef{ds@DINA5}{\paperwidth=148.5mm \paperheight=210mm}
+\@namedef{ds@DINA6}{\paperwidth=105mm \paperheight=148.5mm}
+\@namedef{ds@DINA3l}{\paperwidth=420mm \paperheight=297mm}
+\@namedef{ds@DINA4l}{\paperwidth=297mm \paperheight=210mm}
+\@namedef{ds@DINA5l}{\paperwidth=210mm \paperheight=148.5mm}
+\@namedef{ds@DINA6l}{\paperwidth=148.5mm \paperheight=105mm}
+\def\ds@draft{\overfullrule 5pt}
+\def\ds@twoside{\@twosidetrue \@mparswitchtrue}
+\@options
+\input script1\@ptsize.sty\relax
+\normalsize
+
+\newif\if@hincl
+\def\headincludeon{\@hincltrue}
+\def\headincludeoff{\@hinclfalse}
+\newif\if@hsl
+\def\headseplineon{\@hsltrue \@hincltrue}
+\def\headseplineoff{\@hslfalse \@hinclfalse}
+\headseplineoff
+\newif\if@fincl
+\def\footincludeon{\@fincltrue}
+\def\footincludeoff{\@finclfalse}
+\newif\if@fsl
+\def\footseplineon{\@fsltrue \@fincltrue}
+\def\footseplineoff{\@fslfalse \@finclfalse}
+\footseplineoff
+\newdimen\sc@bcor
+\newcount\sc@div
+\newdimen\sc@hblk
+\newdimen\sc@vblk
+\newdimen\sc@temp
+\def\typearea{\@ifnextchar [{\@typearea}{\@typearea[0mm]}}
+\def\@typearea[#1]#2{
+ \normalsize
+ \sc@bcor #1
+ \sc@div=#2
+ \sc@hblk \paperwidth
+ \advance \sc@hblk by -\sc@bcor
+ \divide\sc@hblk by \sc@div
+ \oddsidemargin -1in
+ \evensidemargin -1in
+ \if@twoside
+ \advance\oddsidemargin by \sc@hblk
+ \advance\oddsidemargin by \sc@bcor
+ \advance\evensidemargin by 2\sc@hblk
+ \else
+ \advance\oddsidemargin by 1.5\sc@hblk
+ \advance\oddsidemargin by \sc@bcor
+ \evensidemargin\oddsidemargin
+ \fi
+ \textwidth \paperwidth
+ \advance\textwidth by -\sc@bcor
+ \advance\textwidth by -3\sc@hblk
+ \headheight 15pt
+ \headsep 1.5\baselineskip
+ \footskip 3.5\baselineskip
+ \sc@vblk \paperheight
+ \divide\sc@vblk by \sc@div
+ \sc@temp \paperheight
+ \advance\sc@temp by -3\sc@vblk
+ \if@hincl
+ \advance\sc@temp by -\headheight
+ \advance\sc@temp by -\headsep
+ \fi
+ \if@fincl
+ \advance\sc@temp by -\footskip
+ \fi
+ \textheight \topskip
+ \@whiledim\textheight<\sc@temp
+ \do{\advance\textheight by \baselineskip}
+ \topmargin \sc@vblk
+ \advance\topmargin by -1in
+ \if@hincl \else
+ \advance\topmargin by -\headheight
+ \advance\topmargin by -\headsep
+ \fi
+ \if@twoside
+ \marginparwidth 1.5\sc@hblk
+ \else
+ \marginparwidth \sc@hblk
+ \fi
+ \marginparsep 1cc
+ \marginparpush 0.45\baselineskip}
+\def\areaset{\@ifnextchar [{\@areaset}{\@areaset[0mm]}}
+\def\@areaset[#1]#2#3{
+ \normalsize
+ \sc@bcor #1
+ \textwidth #2
+ \textheight #3
+ \sc@hblk \paperwidth
+ \advance\sc@hblk by -\sc@bcor
+ \advance\sc@hblk by -\textwidth
+ \divide\sc@hblk by 3
+ \oddsidemargin -1in
+ \evensidemargin -1in
+ \if@twoside
+ \advance\oddsidemargin by \sc@hblk
+ \advance\oddsidemargin by \sc@bcor
+ \advance\evensidemargin by 2\sc@hblk
+ \else
+ \advance\oddsidemargin by 1.5\sc@hblk
+ \advance\oddsidemargin by \sc@bcor
+ \evensidemargin\oddsidemargin
+ \fi
+ \headheight 15pt
+ \headsep 1.5\baselineskip
+ \footskip 3.5\baselineskip
+ \sc@vblk \paperheight
+ \advance\sc@vblk by -\textheight
+ \divide\sc@vblk by 3
+ \if@hincl
+ \advance\textheight by -\headheight
+ \advance\textheight by -\headsep
+ \fi
+ \if@fincl
+ \advance\textheight by -\footskip
+ \fi
+ \topmargin \sc@vblk
+ \advance\topmargin by -1in
+ \if@hincl \else
+ \advance\topmargin by -\headheight
+ \advance\topmargin by -\headsep
+ \fi
+ \if@twoside
+ \marginparwidth 1.5\sc@hblk
+ \else
+ \marginparwidth \sc@hblk
+ \fi
+ \marginparsep 1cc
+ \marginparpush 0.45\baselineskip}
+\ifcase \@ptsize\relax \typearea{8} \or \typearea{10} \or \typearea{12} \fi
+
+\parskip 0pt plus 1pt
+\parindent 1em
+\partopsep 3pt plus 2pt minus 2pt
+\footnotesep 0.6\baselineskip
+\skip\footins 0.75\baselineskip plus 4pt minus 2pt
+\skip\@mpfootins = \skip\footins
+\columnsep 1cc
+\columnseprule 0pt
+\floatsep 1\baselineskip plus 2pt minus 2pt
+\textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 1\baselineskip plus 2pt minus 2pt
+\@maxsep 20pt
+\dblfloatsep 1\baselineskip plus 2pt minus 2pt
+\dbltextfloatsep 20pt plus 2pt minus 4pt
+\@dblmaxsep 20pt
+\@fptop 0pt plus 1fil
+\@fpsep 0.7\baselineskip plus 2fil
+\@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil
+\@dblfpsep 0.7\baselineskip plus 2fil
+\@dblfpbot 0pt plus 1fil
+
+\arraycolsep 5pt
+\tabcolsep 6pt
+\arrayrulewidth 0.4pt
+\doublerulesep 2pt
+\fboxsep 3pt
+\fboxrule 0.4pt
+\tabbingsep \labelsep
+
+\labelsep .5em
+\leftmargini 2.5em
+\leftmarginii 2.2em
+\leftmarginiii 1.87em
+\leftmarginiv 1.7em
+\leftmarginv 1em
+\leftmarginvi 1em
+\leftmargin\leftmargini
+\labelwidth\leftmargini
+\advance\labelwidth-\labelsep
+\def\@listI{\leftmargin\leftmargini
+ \topsep 0.8em plus 0.2em minus 0.4em
+ \parsep 0.4em plus 2pt minus 1pt
+ \itemsep \parsep}
+\let\@listi\@listI
+\@listi
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 0.4em plus 2pt minus 1pt
+ \parsep 0.2em plus 1pt minus 1pt
+ \itemsep \parsep}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 0.2em plus 1pt minus 1pt
+ \parsep \z@
+ \partopsep 1pt plus 0pt minus 1pt
+ \itemsep \topsep}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
+\@lowpenalty 51
+\@medpenalty 151
+\@highpenalty 301
+\@beginparpenalty -\@lowpenalty
+\@endparpenalty -\@lowpenalty
+\@itempenalty -\@lowpenalty
+
+\def\theenumi{\arabic{enumi}}
+\def\theenumii{\alph{enumii}}
+\def\theenumiii{\roman{enumiii}}
+\def\theenumiv{\Alph{enumiv}}
+\def\labelenumi{\theenumi.}
+\def\labelenumii{\theenumii)}
+\def\labelenumiii{\theenumiii.}
+\def\labelenumiv{\theenumiv.}
+\def\p@enumii{\theenumi}
+\def\p@enumiii{\theenumi\theenumii)}
+\def\p@enumiv{\p@enumiii\theenumiii}
+\def\labelitemi{$\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\triangleright$}
+\def\labelitemiv{$\cdot$}
+
+\newcounter{part}
+\newcounter {chapter}
+\newcounter {section}[chapter]
+\newcounter {subsection}[section]
+\newcounter {subsubsection}[subsection]
+\newcounter {paragraph}[subsubsection]
+\newcounter {subparagraph}[paragraph]
+
+\def\thepart {\Roman{part}}
+\def\thechapter {\arabic{chapter}}
+\def\thesection {\thechapter.\arabic{section}}
+\def\thesubsection {\thesection.\arabic{subsection}}
+\def\thesubsubsection {\thesubsection .\arabic{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+\def\thesubparagraph {\theparagraph.\arabic{subparagraph}}
+
+\setcounter{secnumdepth}{2}
+\setcounter{tocdepth}{2}
+
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+
+\def\quotation{\list{}{\listparindent 1em
+ \itemindent\listparindent
+ \rightmargin\leftmargin\parsep 0pt plus 1pt}\item[]}
+\let\endquotation=\endlist
+
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+\def\descriptionlabel#1{\hspace\labelsep \descfont #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+\let\enddescription\endlist
+\newdimen\descriptionmargin
+\descriptionmargin=3em
+
+\def\labelinglabel#1{#1\hfil\sc@septext}
+\def\labeling{\@ifnextchar [{\@labeling}{\@labeling[]}}
+\def\@labeling[#1]#2{\def\sc@septext{#1}
+ \list{}{\settowidth{\labelwidth}{#2#1}
+ \leftmargin\labelwidth \advance\leftmargin by \labelsep
+ \let\makelabel\labelinglabel}}
+\let\endlabeling\endlist
+
+\def\marginline#1{\marginpar%
+ {\if@twoside \ifodd\c@page \raggedright \else \raggedleft \fi
+ \else \raggedright \fi #1}}
+
+\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{empty}\c@page\z@}
+\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi}
+
+\def\next@tpage{\newpage\thispagestyle{empty}\null}
+\def\@extratitle{}
+\long\def\extratitle#1{\def\@extratitle{#1}}
+\def\@titlehead{}
+\long\def\titlehead#1{\def\@titlehead{#1}}
+\def\@subject{}
+\def\subject#1{\def\@subject{#1}}
+\def\@publishers{}
+\def\publishers#1{\def\@publishers{#1}}
+\def\@uppertitleback{}
+\long\def\uppertitleback#1{\def\@uppertitleback{#1}}
+\def\@lowertitleback{}
+\long\def\lowertitleback#1{\def\@lowertitleback{#1}}
+\def\@dedication{}
+\def\dedication#1{\def\@dedication{#1}}
+\def\maketitle{\@ifnextchar [{\@maketitle}{\@maketitle[1]}}
+\def\@maketitle[#1]{\bgroup \@restonecolfalse
+ \if@twocolumn \@restonecoltrue\onecolumn \else \newpage \fi
+ \thispagestyle{empty}\null
+ \setcounter{page}{#1}
+ \let\footnotesize\small
+ \let\footnoterule\relax
+ \ifx\@extratitle\@empty \else
+ \noindent\@extratitle \next@tpage \if@twoside \next@tpage \fi
+ \fi
+ \ifx\@titlehead\@empty \else
+ \noindent\begin{minipage}[t]{\textwidth}
+ \@titlehead
+ \end{minipage}\par
+ \fi
+ \null \vfill
+ \ifx\@subject\@empty \else
+ {\centering \Large \@subject \par}
+ \vskip 3em
+ \fi
+ {\centering \huge \sectfont \@title \par}
+ \vskip 3em
+ {\centering \Large \lineskip 0.75em
+ \begin{tabular}[t]{c}\@author
+ \end{tabular}\par}
+ \vskip 1.5em
+ {\centering \Large \@date \par}
+ \vskip 0pt plus 3fill
+ {\centering \Large \@publishers \par}
+ \vskip 3em
+ \par \@thanks
+ \if@twoside \next@tpage
+ \noindent\begin{minipage}[t]{\textwidth}
+ \@uppertitleback
+ \end{minipage}\par
+ \vfill
+ \noindent\begin{minipage}[b]{\textwidth}
+ \@lowertitleback
+ \end{minipage}
+ \fi
+ \ifx\@dedication\@empty \else
+ \next@tpage \vfill
+ {\centering \Large \@dedication \par}
+ \vskip 0pt plus 3fill
+ \if@twoside \next@tpage \fi
+ \fi
+ \if@restonecol\twocolumn \else \newpage \fi
+ \egroup
+ \setcounter{footnote}{0}
+ \let\thanks\relax \gdef\@extratitle{}\gdef\@titlehead{}\gdef\@subject{}%
+ \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\gdef\@publishers{}%
+ \gdef\@uppertitleback{}\gdef\@lowertitleback{}\gdef\@dedication{}%
+ \let\maketitle\relax \let\@maketitle\relax}
+
+\newif\if@abstrt
+\def\abstracton{\@abstrttrue}
+\def\abstractoff{\@abstrtfalse}
+\def\abstractname{Abstract}
+\def\abstract{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{empty} \null \vfil
+ \if@abstrt \begin{center} {\sectfont \abstractname} \end{center}\fi}
+\def\endabstract{\par \vfil \null
+ \if@twoside \next@tpage \fi
+ \if@restonecol\twocolumn \else \newpage \fi}
+
+\def\partname{Part}
+\def\part{\cleardoublepage \thispagestyle{empty} \if@twocolumn \onecolumn
+ \@tempswatrue \else \@tempswafalse \fi \null \vfil \secdef\@part\@spart}
+\def\@part[#1]#2{\ifnum \c@secnumdepth >-2\relax \refstepcounter{part}
+ \addcontentsline{toc}{part}{\thepart\hspace{1em}#1}\else
+ \addcontentsline{toc}{part}{#1}\fi \markboth{}{}
+ {\centering \ifnum \c@secnumdepth >-2\relax \huge \sectfont\partname{}
+ \thepart \par \vskip 20pt \fi \Huge \sectfont #2\par}\@endpart}
+\def\@spart#1{{\centering \Huge \sectfont #1\par}\@endpart}
+\def\@endpart{\vfil\newpage \if@twoside \null \thispagestyle{empty}
+ \newpage \fi \if@tempswa \twocolumn \fi}
+
+\def\chaptername{Chapter}
+\def\@chapapp{\chaptername}
+\def\chaptermark#1{}
+\def\chapter{\clearpage \thispagestyle{plain} \global\@topnum\z@
+ \@afterindentfalse \secdef\@chapter\@schapter}
+\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne
+ \refstepcounter{chapter}
+ \typeout{\@chapapp\space\thechapter.}
+ \addcontentsline{toc}{chapter}{\protect \numberline{\thechapter.}#1}
+ \else
+ \addcontentsline{toc}{chapter}{#1}\fi
+ \chaptermark{#1}
+ \addtocontents{lof}{\protect\addvspace{10pt}}
+ \addtocontents{lot}{\protect\addvspace{10pt}}
+ \if@twocolumn \@topnewpage[\@makechapterhead{#2}]
+ \else \@makechapterhead{#2} \fi \@afterheading}
+\def\@schapter#1{\if@twocolumn \@topnewpage[\@makeschapterhead{#1}]
+ \else \@makeschapterhead{#1} \fi \@afterheading}
+\def\@makechapterhead#1{\vspace*{50pt} {\Huge \sectfont
+ \@hangfrom{\ifnum \c@secnumdepth >\m@ne \thechapter. \fi}%
+ {\raggedright \interlinepenalty \@M #1\par}} \nobreak \vskip 40pt}
+\def\@makeschapterhead#1{\vspace*{50pt} {\Huge \sectfont \@hangfrom{}%
+ {\raggedright \interlinepenalty \@M #1\par}} \nobreak \vskip 40pt}
+
+\def\addchap{\clearpage \thispagestyle{plain} \global\@topnum\z@
+ \@afterindentfalse \secdef\@addchap\@saddchap}
+\def\@addchap[#1]#2{\typeout{#2}
+ \addcontentsline{toc}{chapter}{#1}
+ \if@twoside \markboth{#1}{}\else \markright{#1} \fi
+ \addtocontents{lof}{\protect\addvspace{10pt}}
+ \addtocontents{lot}{\protect\addvspace{10pt}}
+ \if@twocolumn \@topnewpage[\@makeschapterhead{#2}]
+ \else \@makeschapterhead{#2} \fi \@afterheading}
+\def\@saddchap#1{\markboth{}{}
+ \if@twocolumn \@topnewpage[\@makeschapterhead{#1}]
+ \else \@makeschapterhead{#1} \fi \@afterheading}
+
+\def\appendixname{Appendix}
+\def\appendix{\par
+ \setcounter{chapter}{0}
+ \setcounter{section}{0}
+ \def\@chapapp{\appendixname}
+ \def\thechapter{\Alph{chapter}}}
+
+\def\section{\@startsection {section}{1}{\z@}{-3.5ex plus -1ex minus
+ -.2ex}{2.3ex plus .2ex}{\Large \sectfont}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-3.25ex plus -1ex minus
+ -.2ex}{1.5ex plus .2ex}{\large \sectfont}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-3.25ex plus -1ex
+ minus -.2ex}{1.5ex plus .2ex}{\sectfont}}
+\def\paragraph{\@startsection{paragraph}{4}{\z@}{3.25ex plus 1ex minus
+ .2ex}{-1em}{\sectfont}}
+\def\subparagraph{\@startsection{subparagraph}{4}{\parindent}{3.25ex plus
+ 1ex minus .2ex}{-1em}{\sectfont}}
+
+\def\minisec#1{\@afterindentfalse \vskip 1.5ex {\parindent 0pt \raggedright
+ \sectfont #1\par\nobreak}\@afterheading}
+
+\def\contentsname{Contents}
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\def\tableofcontents{\@restonecolfalse
+ \if@twocolumn\@restonecoltrue\onecolumn\fi
+ \chapter*{\contentsname \@mkboth{\contentsname}{\contentsname}}
+ \@starttoc{toc}\if@restonecol\twocolumn\fi}
+\def\l@part#1#2{\addpenalty{-\@highpenalty}
+ \addvspace{2.25em plus 1pt} \begingroup
+ \@tempdima 3em \parindent \z@ \rightskip \@pnumwidth \parfillskip
+ -\@pnumwidth
+ {\sectfont \leavevmode #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
+ \nobreak \global\@nobreaktrue \everypar{\global\@nobreakfalse\everypar{}}
+ \endgroup}
+\def\l@chapter#1#2{\addpenalty{-\@highpenalty}
+ \vskip 1.0em plus 1pt \@tempdima 1.5em \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \sectfont \leavevmode \advance\leftskip\@tempdima \hskip -\leftskip
+ #1\nobreak\hfil\nobreak\hbox to\@pnumwidth{\hss #2}\par
+ \penalty\@highpenalty \endgroup}
+\def\l@section{\@dottedtocline{1}{1.5em}{2.3em}}
+\def\l@subsection{\@dottedtocline{2}{3.8em}{3.2em}}
+\def\l@subsubsection{\@dottedtocline{3}{7.0em}{4.1em}}
+\def\l@paragraph{\@dottedtocline{4}{10em}{5em}}
+\def\l@subparagraph{\@dottedtocline{5}{12em}{6em}}
+
+\def\listfigurename{List of Figures}
+\def\listoffigures{\@restonecolfalse
+ \if@twocolumn\@restonecoltrue\onecolumn\fi
+ \chapter*{\listfigurename \@mkboth{\listfigurename}{\listfigurename}}
+ \@starttoc{lof}\if@restonecol\twocolumn\fi}
+\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
+
+\def\listtablename{List of Tables}
+\def\listoftables{\@restonecolfalse
+ \if@twocolumn\@restonecoltrue\onecolumn\fi
+ \chapter*{\listtablename \@mkboth{\listtablename}{\listtablename}}
+ \@starttoc{lot}\if@restonecol\twocolumn\fi}
+\let\l@table\l@figure
+
+\def\bibname{Bibliography}
+\def\thebibliography#1{\chapter*{\bibname \@mkboth{\bibname}{\bibname}}
+ \list{[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip 0.11em plus 0.33em minus 0.07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+\let\endthebibliography=\endlist
+
+\def\indexname{Index}
+\newif\if@restonecol
+\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+ \columnseprule \z@
+ \columnsep 35pt\twocolumn[\@makeschapterhead{\indexname}]
+ \@mkboth{\indexname}{\indexname}
+ \thispagestyle{plain}\parindent\z@
+ \parskip\z@ plus 0.3pt\relax\let\item\@idxitem}
+\def\@idxitem{\par\hangindent 40pt}
+\def\subitem{\par\hangindent 40pt \hspace*{20pt}}
+\def\subsubitem{\par\hangindent 40pt \hspace*{30pt}}
+\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
+\def\indexspace{\par \vskip 10pt plus 5pt minus 3pt\relax}
+
+\@addtoreset{footnote}{chapter}
+\def\footnoterule{\kern-3\p@
+ \hrule width 0.4\columnwidth
+ \kern 2.6\p@}
+\long\def\@makefntext#1{\noindent \sc@temp\columnwidth%
+ \advance\sc@temp by -1.5em \hbox to 1em{\hss$^{\@thefnmark}$}\hskip .5em%
+ \parbox[t]{\sc@temp}{\parindent 0pt\parskip 0pt\hskip -.5em #1}}
+
+\@addtoreset{equation}{chapter}
+\def\theequation{\thechapter.\arabic{equation}}
+
+\setcounter{topnumber}{2}
+\def\topfraction{.7}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.3}
+\setcounter{totalnumber}{3}
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+\long\def\@makecaption#1#2{\vskip 10pt
+ \setbox\@tempboxa\hbox{\captfont #1: #2}
+ \ifdim \wd\@tempboxa >\hsize \@hangfrom{\captfont #1: }%
+ {\captfont #2\par}
+ \else \hbox to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi}
+
+\def\figurename{Figure}
+\newcounter{figure}[chapter]
+\def\thefigure{\thechapter.\@arabic\c@figure}
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{\figurename{} \thefigure}
+\def\figure{\@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+
+\def\tablename{Table}
+\newcounter{table}[chapter]
+\def\thetable{\thechapter.\@arabic\c@table}
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{\tablename{} \thetable}
+\def\table{\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+
+\mark{{}{}}
+\if@twoside
+ \def\ps@plain{\let\@mkboth\@gobbletwo
+ \def\@evenhead{}%
+ \def\@oddhead{}%
+ \def\@evenfoot{\vbox{\hsize=\textwidth
+ \if@fsl \hrule \vskip 3pt \fi
+ \hbox to \textwidth{\pnumfont\thepage\hfil}}}%
+ \def\@oddfoot{\vbox{\hsize=\textwidth
+ \if@fsl \hrule \vskip 3pt \fi
+ \hbox to \textwidth{\pnumfont\hfil\thepage}}}}
+ \def\ps@headings{\let\@mkboth\markboth
+ \def\@evenhead{\vbox{\hsize=\textwidth
+ \hbox to \textwidth{\headfont\leftmark\hfil}
+ \if@hsl \vskip 1.5pt \hrule \fi}}%
+ \def\@oddhead{\vbox{\hsize=\textwidth
+ \hbox to \textwidth{\headfont\hfil\rightmark}
+ \if@hsl \vskip 1.5pt \hrule \fi}}%
+ \def\@evenfoot{\vbox{\hsize=\textwidth
+ \if@fsl \hrule \vskip 3pt \fi
+ \hbox to \textwidth{\pnumfont\thepage\hfil}}}%
+ \def\@oddfoot{\vbox{\hsize=\textwidth
+ \if@fsl \hrule \vskip 3pt \fi
+ \hbox to \textwidth{\pnumfont\hfil\thepage}}}%
+ \def\chaptermark##1{\markboth {\ifnum \c@secnumdepth >\m@ne
+ \thechapter. \ \fi ##1}{}}%
+ \def\sectionmark##1{\markright {\ifnum \c@secnumdepth >\z@
+ \thesection\ \ \fi ##1}}%
+ \def\subsectionmark##1{}}
+ \def\ps@myheadings{\let\@mkboth\@gobbletwo
+ \def\@evenhead{\vbox{\hsize=\textwidth
+ \hbox to \textwidth{\headfont\leftmark\hfil}
+ \if@hsl \vskip 1.5pt \hrule \fi}}%
+ \def\@oddhead{\vbox{\hsize=\textwidth
+ \hbox to \textwidth{\headfont\hfil\rightmark}
+ \if@hsl \vskip 1.5pt \hrule \fi}}%
+ \def\@evenfoot{\vbox{\hsize=\textwidth
+ \if@fsl \hrule \vskip 3pt \fi
+ \hbox to \textwidth{\pnumfont\thepage\hfil}}}%
+ \def\@oddfoot{\vbox{\hsize=\textwidth
+ \if@fsl \hrule \vskip 3pt \fi
+ \hbox to \textwidth{\pnumfont\hfil\thepage}}}%
+ \def\chaptermark##1{}%
+ \def\sectionmark##1{}%
+ \def\subsectionmark##1{}}
+\else
+ \def\ps@plain{\let\@mkboth\@gobbletwo
+ \def\@evenhead{}%
+ \def\@oddhead{}%
+ \def\@evenfoot{}%
+ \def\@oddfoot{\vbox{\hsize=\textwidth
+ \if@fsl \hrule \vskip 3pt \fi
+ \hbox to \textwidth{\pnumfont\hfil\thepage\hfil}}}}
+ \def\ps@headings{\let\@mkboth\markboth
+ \def\@evenhead{}%
+ \def\@oddhead{\vbox{\hsize=\textwidth
+ \hbox to \textwidth{\headfont\hfil\rightmark\hfil}
+ \if@hsl \vskip 1.5pt \hrule \fi}}%
+ \def\@evenfoot{}%
+ \def\@oddfoot{\vbox{\hsize=\textwidth
+ \if@fsl \hrule \vskip 3pt \fi
+ \hbox to \textwidth{\pnumfont\hfil\thepage\hfil}}}%
+ \def\chaptermark##1{\markright {\ifnum \c@secnumdepth >\m@ne
+ \thechapter. \ \fi ##1}}%
+ \def\sectionmark##1{}%
+ \def\subsectionmark##1{}}
+ \def\ps@myheadings{\let\@mkboth\@gobbletwo
+ \def\@evenhead{}%
+ \def\@oddhead{\vbox{\hsize=\textwidth
+ \hbox to \textwidth{\headfont\hfil\rightmark\hfil}
+ \if@hsl \vskip 1.5pt \hrule \fi}}%
+ \def\@evenfoot{}%
+ \def\@oddfoot{\vbox{\hsize=\textwidth
+ \if@fsl \hrule \vskip 3pt \fi
+ \hbox to \textwidth{\pnumfont\hfil\thepage\hfil}}}%
+ \def\chaptermark##1{}%
+ \def\sectionmark##1{}%
+ \def\subsectionmark##1{}}
+\fi
+
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+
+\@abstrttrue
+\ps@headings
+\pagenumbering{arabic}
+\onecolumn
+\if@twoside \else \raggedbottom \fi
+\frenchspacing
+\def\captfont{\rm}
+\def\descfont{\sfb}
+\def\headfont{\it}
+\def\pnumfont{\rm}
+\def\sectfont{\sfb}
+
diff --git a/obsolete/macros/latex209/contrib/script/script.tex b/obsolete/macros/latex209/contrib/script/script.tex
new file mode 100644
index 0000000000..28b2479786
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/script/script.tex
@@ -0,0 +1,1466 @@
+\documentstyle[twoside,german]{script}
+\headseplineon
+\typearea{10}
+\sloppy
+\def\com#1{{\tt \char92 #1}}
+
+\date{1. Dezember 1993}
+
+\begin{document}
+
+\title{Die Document-Style-Familie\\"`Script"'}
+\author{Version 2.0}
+\uppertitleback{Haftungsausschlu"s:\\Es wird keinerlei Haftung "ubernommen
+ f"ur irgendwelche Sch"aden, die aus der Benutzung der Programme des hier
+ beschriebenen Paketes folgen.}
+\maketitle[-1]
+
+\tableofcontents
+
+\chapter{Allgemeines}
+
+\section{Einleitung}
+
+Urspr"unglich versuchte ich im Rahmen eines gr"o"seren Projektes\footnote{es
+handelte sich um ein Vorlesungs-Skript -- daher auch der Name f"ur die hier
+beschriebene Style-Familie} lediglich den "`boldface extended"'-Font
+({\tt cmbx}) in "Uberschriften durch einen sch"oneren zu ersetzen und
+forschte deshalb in den Style-Dateien nach "Anderungsm"oglichkeiten.
+Ungef"ahr gleichzeitig bekam ich ein sehr gutes Buch "uber Typographie%
+\footnote{{\sc Jan Tschichold}: Ausgew"ahlte Aufs"atze "uber die Gestalt des
+Buches und der Typographie, Zweite Auf\/lage, Birkh"auser Verlag Basel 1987}
+in die Hand, und es wurde mir sehr bald klar: es m"ussen komplett
+neue Styles her, die auch die europ"aischen typographischen Regeln und
+Papierformate (insbesondere DIN A4) ber"ucksichtigen.
+
+Nach einigen Wochen Arbeit habe ich am 6. Juni 1992 die Version~1.0
+der Document-Style-Familie "`Script"' per FTP ver"offentlicht und
+war sehr "uberrascht "uber die gro"se Resonanz. Neben
+vielen kleineren Problemen (die allerdings meistens auf \LaTeX\ und
+nicht auf {\tt script} zur"uckzuf"uhren waren) wurde auch eine echte
+Unzul"anglichkeit zur Verbesserung an mich herangetragen: der {\tt
+script\_l}-Style lieferte in Verbindung mit dem neuen Fontauswahlschema
+von Mittelbach und Sch"opf einige Fehlermeldungen. Dieses Schema --
+im folgenden kurz NFSS genannt -- war damals auf meinem Rechner noch
+nicht installiert, so da"s mir dieses Manko nicht aufgefallen war.
+Die jetzt vorliegende "`Script"'-Version~2.0 sollte nun in allen
+Teilen sowohl mit dem alten als auch dem neuen Fontauswahlschema
+fehlerfrei laufen. "Ubrigens kann ich das NFSS besten Gewissens jedermann
+empfehlen; es ist sehr angenehm damit zu arbeiten und wird ab der
+n"achsten \LaTeX -Version sowieso Standard.
+
+Der Erstbenutzer von "`Script"' kann einen ersten Eindruck von den
+durchgef"uhrten "Anderungen gegen"uber den Standardstyles durch diese
+Dokumentation selbst bekommen; sie wurde mit
+\verb|\documentstyle[twoside,german]{script}| und nachtr"aglicher
+Einstellung von \verb|\headseplineon| (siehe S.~\pageref{HEADSEPLINE})
+gesetzt. Doch auch "`alten Hasen"' sei die Lekt"ure ans Herz gelegt,
+da sich so manche Kleinigkeit gegen"uber Version~1.0 ge"andert hat.
+Diese Modifikationen sind jedoch aufw"artskompatibel und im Text gesondert
+erw"ahnt.
+
+\section{Autor, Copyright und Danksagungen}
+
+Die Document-Style-Familie {\tt script} und die dazugeh"orige Dokumentation
+(die Sie gerade lesen) wurden von Frank Neukam geschrieben. "`Script"'
+ist, wie bei \TeX\ "ublich, frei kopierbar (public domain).
+Nachtr"agliche "Anderungen Ihrerseits sind nat"urlich wie
+bei den Originalen legitim, nur bitte ich darum, bei Minimalmodifikationen
+der Styles die Autorenangabe nicht allzu dreist zu ver"andern (oder gar
+meinen werten Namen frech durch den eigenen zu ersetzen!), sondern
+Kommentarzeilen wie "`Modified by \dots"' einzuf"ugen. Au"serdem sollte dann
+in der typeout message und der ersten Kommentarzeile das Datum aktualisiert
+und jede "Anderung kommentiert werden.
+
+Sollten Sie Ihre modifizierte Version ver"offentlichen wollen,
+so bitte ich, diese nicht (wie schon geschehen) als "`offizielle"' neue
+Ausgabe mit neuer Versionsnummer zu verbreiten und wom"oglich sogar das
+alte Original auf einer Mailbox oder einem FTP-Server zu "uberschreiben.
+Bitte kennzeichnen Sie in diesem Fall Ihre Version eindeutig als "`Patch"',
+belassen Sie die Versionsnummer (sonst gibt es irgendwann zig verschiedene
+Modifikationen mit identischen Nummern) und speichern Sie sie in einem
+anderen Verzeichnis oder Archiv als das Original. Falls Sie Ihre "Anderungen
+gerne in einer neuen "`offiziellen"' Version von {\tt script} sehen w"urden,
+so setzen Sie sich bitte mit mir in Verbindung (Adresse siehe unten).
+
+Mein besonderer Dank gilt an dieser Stelle dem Rechenzentrum der
+Universit"at Karlsruhe f"ur viele Probeausdrucke, Thorsten Hoeppner,
+Klaus-J"urgen Wald und Christian Wurll f"ur Ideen und Kritik, Uta
+Janssen f"ur typographische Beratung, Dr.~Karlheinz Fingerle f"ur die
+Bereitstellung des NFSS, Oliver Schurr f"ur seinen Artikel "uber "`Script"'
+im DANTE-Magazin\footnote{Die \TeX nische Kom"odie, Heft 3/92}, Markus
+Kohm f"ur das Patch zur Papiergr"o"seneinstellung, Sven Gohlke f"ur
+Programmierarbeit und Tips bez"uglich der Sprachumschaltung beim {\tt
+script\_l.sty} sowie allen eifrigen Briefeschreibern, deren Lob, Kritik und
+Verbesserungsvorschl"agen Sie diese neue Version zu verdanken haben.
+
+\section{Was ist was}
+
+Das komplette Paket der Version~2.0 besteht aus folgenden Files:
+\begin{labeling}[\ ]{\tt checkprt.tex}
+\item[\tt checkprt.tex] Testseite zur genauen Einstellung von
+ Druckertreibern
+\item[\tt dir.tex] Programm zum Drucken eines Adre"sbuches aus einem
+ {\tt .adr}-File (siehe S.~\pageref{ADR})
+\item[\tt phone.tex] Programm zum Drucken eines
+ Telefonnummern-Verzeichnisses aus einem {\tt .adr}-File;
+ erst seit Version~2.0 Bestandteil des Paketes
+\item[\tt script.dvi] Dokumentation zur "`Script"'-Stylefamilie
+\item[\tt script.sty] Style-Hauptdatei; entspricht einem Mittelding aus
+ {\tt report.sty} und {\tt book.sty}
+\item[\tt script.tex] Quelltext zu {\tt script.dvi}
+\item[\tt script10.sty] Hilfsdatei f"ur alle drei Hauptstyles; wird von
+ diesen bei Einstellung der 10pt-Schrift nachgeladen
+\item[\tt script11.sty] Dito, f"ur 11 pt
+\item[\tt script12.sty] Dito, f"ur 12 pt
+\item[\tt script\_l.sty] Style-Hauptdatei "`script\_letter"'; entspricht dem
+ {\tt letter.sty}
+\item[\tt script\_s.sty] Style-Hauptdatei "`script\_small"'; entspricht dem
+ {\tt article.sty}
+\item[\tt sctitle.sty] Pendant zu {\tt titlepage.sty}; erzeugt eine eigene
+ Titelseite
+\item[\tt typearea.sty] Style-Option zur einfacheren Satzspiegeleinstellung
+\end{labeling}
+
+\section{Kompatibilit"at zu den Originalstyles}
+
+Alle Befehle, die in den zugrundeliegenden Original-Styles {\tt article},
+{\tt report}, {\tt book} und {\tt letter} vorhanden sind,
+sind auch weiterhin verf"ugbar. Es wurden lediglich Befehle hinzugef"ugt
+bzw. schon vorhandene Einstellungen und Befehlsdefinitionen modifiziert.
+Dadurch mu"s man bei Verwendung der "`Script"'-Styles eigentlich nichts
+besonders beachten, nur das Ergebnis wird etwas anders aussehen als
+gewohnt. So ist es auch kein Problem, "`alte"' Texte dem neuen Layout
+anzupassen, indem man in der Definition des Document-Styles z.B.
+{\tt article} einfach durch {\tt script\_s} ersetzt. Um die neuen
+M"oglichkeiten jedoch voll aussch"opfen zu k"onnen, ist die Lekt"ure
+dieser Anleitung unumg"anglich.
+
+\section{Fehler}
+
+Als Entsch"adigung daf"ur, da"s sich mit Sicherheit irgendwo neue Fehler
+in die Styles eingeschlichen haben, wurden ein paar bei den Originalen
+vorhandene entfernt. Falls Sie einen Fehler finden, der eindeutig
+auf eine Fehlprogrammierung der verwendeten Style-Dateien zur"uckzuf"uhren
+ist, bitte ich Sie, mir das auch im Interesse der anderen Benutzer zu
+schreiben, damit ich ihn beim n"achsten Update entfernen kann.
+Aber auch f"ur sonstige Kritik und Verbesserungsvorschl"age bin
+ich immer dankbar; bitte bestehen Sie jedoch nicht auf einer R"uckantwort
+und bestellen Sie keine Styles bei mir (irgendwoher m"ussen Sie diese
+Anleitung ja haben, da sind auch die Styles selbst bestimmt nicht weit).
+Hier meine Adresse:
+\begin{quote}
+Frank Neukam\\
+Franz-Stadelmayer-Str. 30\\
+97074 W"urzburg
+\end{quote}
+
+\chapter{Das neue Layout}
+
+\section{Die neuen Fonts}
+
+"Uberall, wo fr"uher Extended Boldface verwendet wurde (also in allen
+"Uberschriften, im Inhaltsverzeichnis und im {\tt description} Environment)
+wird jetzt standardm"a"sig ein neuer Font benutzt, n"amlich Sansserif
+Bold Extended ({\tt cmssbx}). Es handelt sich dabei um eine serifenlose
+Schrift in halbfetter Ausf"uhrung, die durch den Befehl \verb|\sfb|%
+\footnote{Bei Verwendung des NFSS ist die Befehlsfolge \com{sf}\com{bf}
+dem \com{sfb}-Kommando vorzuziehen, da \com{sfb} aus Kompatibilit"atsgr"unden
+wie ein "`alter"' Fontselektionsbefehl arbeitet, also {\em alle\/}
+Fontparameter einstellt.} selektiert wird. Zu beachten ist lediglich, da"s
+als kleinste Gr"o"se ein 10pt-Font zur Verf"ugung steht; wird z.B. mittels
+\verb|\tiny\sfb| eine kleinere Schrift gew"unscht, so wird aus
+Lesbarkeitsgr"unden die normale Extended Boldface eingestellt, da diese
+auch noch in kleineren Entwurfsgr"o"sen vorhanden ist.
+
+\section{Der Satzspiegel}
+
+\subsection{Grundlegendes}
+
+Der Satzspiegel definiert die Gr"o"se des bedruckten Bereichs einer Seite%
+\footnote{Im folgenden auch "`Textbereich"' genannt; Kopfzeile, Fu"szeile
+und Randnoten z"ahlen jedoch nicht dazu.} und dessen Positionierung auf
+der Seite; seine Breite ist abh"angig von der gew"ahlten Schriftart und
+-gr"o"se (optimale Lesbarkeit ist bei ca. 60-70 Zeichen pro Zeile gegeben).
+Bei seiner Konstruktion ist besonders auf die Seitenproportionen
+(Verh"altnis von Breite zu H"ohe) sowie auf seinen Stand auf der Seite zu
+achten.
+
+Jan Tschichold hat in dem in der Einleitung angegebenen Buch eine
+Konstruktion vorgeschlagen, die einfach durchf"uhrbar ist und bei jedem
+Seitenverh"altnis des gew"ahlten Papierformats (also auch bei dem
+"`unklassischen"' DIN A4-Format mit dem Seitenverh"altnis 1:$\sqrt{2}$, von
+dem in allen {\tt script}-Hauptstyles normalerweise ausgegangen wird) sehr
+ansprechende Ergebnisse liefert. Dies liegt wohl in der Hauptsache daran,
+da"s hier der Satzspiegel die gleichen Seitenverh"altnisse wie die zu
+bedruckende Seite selbst aufweist; auch die R"ander stehen in einer sehr
+einfachen Relation zueinander (innerer zu "au"serer bzw. oberer zu unterer
+Rand verhalten sich wie 1:2; bei einseitigem Druck, also ohne die
+{\tt twoside}-Option, sind innerer und "au"serer Rand gleich gro"s).
+
+\subsection{Konstruktion}
+
+Die Konstruktion basiert auf einer Einteilung der Breite und H"ohe
+der Seite in $n$ gleiche Teile. Das Ergebnis ist je eine L"angenangabe f"ur
+die Horizontale -- im folgenden mit HLE (horizontale L"angeneinheit)
+abgek"urzt -- und die Vertikale (VLE).
+
+\begin{description}
+\item[Beispiel: ] F"ur eine DIN A4-Seite (210 mm $\times$ 297 mm) ergibt
+ sich bei Zehnteilung der Seite ($n=10$) f"ur die horizontale
+ L"angeneinheit HLE = 210 mm $\div$ 10 = 21 mm und f"ur die
+ vertikale L"angeneinheit VLE = 297 mm $\div$ 10 = 29.7 mm.
+\end{description}
+
+\noindent Nun wird bei doppelseitigem Druck einfach der innere Rand%
+\footnote{Es ist hier der effektiv sichtbare Rand gemeint, nicht die odd-
+bzw. evensidemargin-Einstellung; diese Gr"o"sen werden intern so
+errechnet, da"s eben genau der gew"unschte Rand sichtbar ist.} auf eine
+Breite von 1 HLE und der "au"sere Rand auf 2 HLE gesetzt. Soll einseitig
+gedruckt werden, so wird sowohl der innere als auch der "au"sere Rand auf
+1.5 HLE eingestellt. Analog dazu wird ein oberer Rand von 1 VLE und ein
+unterer Rand von 2 VLE freigelassen. F"ur den Textbereich bleibt so eine
+Fl"ache von $(n-3)$ HLE Breite mal $(n-3)$ VLE H"ohe. Randbemerkungen
+("`marginal notes"') stehen im "au"seren Rand und sind auf eine Breite von
+1.5 HLE (bei Verwendung der {\tt twoside}-Option) bzw. 1 HLE (sonst)
+begrenzt.
+
+\begin{description}
+\item[Beispiel: ] Bei Sechsteilung der Seite ($n=6$) sind der linke und
+ rechte Rand zusammen 3 HLE und der Textbereich ebenfalls
+ $6-3=3$ HLE breit. Das gleiche gilt f"ur die vertikalen
+ Gr"o"sen. Damit ist bei einer Sechsteilung der Seite der
+ Textbereich genau halb so breit und hoch wie die gesamte
+ Seite.
+\end{description}
+
+\noindent Die \TeX-Forderung, da"s die Textbereichsbreite
+(\verb|\textwidth|) ein Vielfaches der Zeichenbreite der
+{\tt Typewriter}-Schrift sein soll, wird durch die beschriebene exakte
+Konstruktion nicht erf"ullt.
+Sie wird allerdings selbst von den Original-Styles nicht eingehalten und
+ist nur bei komplett in {\tt Typewriter}-Schrift geschriebenen Zeilen von
+Belang. In Abschnitt~\ref{AREASET} wird eine M"oglichkeit aufgezeigt, wie
+z.B. f"ur Programmlistings der Satzspiegel doch noch der \verb|\tt|-Schrift
+angepa"st werden kann.
+
+Die zweite Regel der Satzspiegelkonstruktion, da"s \verb|\textheight| (die
+H"ohe des Textbereiches) gleich \verb|\topskip| vermehrt um ein ganzzahliges
+Vielfaches des Grundlinienabstandes (\verb|\baselineskip|) sein soll, wurde
+jedoch befolgt. Damit wird erreicht, da"s bei komplett mit Flie"stext
+gef"ullten Seiten (also Seiten ohne "Uberschriften, Tabellen, {\em displayed
+material\/} o."a.) die Abs"atze nicht auseinandergezogen werden m"ussen, um
+zu gew"ahrleisten, da"s die unterste Zeile mit dem unteren Rand des
+Textbereichs zusammenf"allt. Der Satzspiegel kann dadurch maximal eine
+knappe Zeile h"oher werden als dies bei einer exakten Konstruktion der Fall
+gewesen w"are.
+
+\subsection{Auswahl des gew"unschten Satzspiegels}
+
+Man erkennt leicht, da"s f"ur kleine $n$ auch der Textbereich im Verh"altnis
+zur Seitengr"o"se klein ist, und f"ur sehr gro"se $n$ der Textbereich die
+Seite nahezu ausf"ullt (Randbemerkungen sind bei $n$ gr"o"ser als 12 mangels
+Platz kaum noch m"oglich bzw. sinnvoll umbrechbar). So l"a"st sich mit
+lediglich einer Gr"o"se der Satzspiegel in weiten Grenzen ver"andern, und
+man hat au"serdem noch die Garantie, da"s er immer optimal konstruiert ist.
+
+Optional l"a"st sich noch ein Bindungs-Korrektur-Ma"s {\em BCOR\/} (f"ur
+binding-correction) angeben, so da"s bei der Satzspiegelkonstruktion
+ber"ucksichtigt wird, da"s ein Teil der Seite durch Heftung oder Bindung
+nicht sichtbar ist oder abgefr"ast wird. Die Seite wird dazu um {\em BCOR\/}
+schm"aler betrachtet, als sie wirklich ist, der Satzspiegel auf dieser Basis
+berechnet, und anschlie"send der innere Rand um dieses St"uck vergr"o"sert.
+
+\begin{description}
+\item[Beispiel: ] Ist durch eine Klebebindung, bei der sich die Seiten nicht
+ mehr bis ganz innen aufschlagen lassen, der sichtbare
+ Bereich der Seite nicht mehr 210 mm breit (DIN A4), sondern
+ 8 mm weniger, so gibt man f"ur {\em BCOR\/} 8 mm an (wie und wo
+ steht weiter unten) und schon steht der Satzspiegel z.B. bei
+ einseitigem Druck wieder exakt mittig auf dem sichtbaren
+ Teil der Seite und hat auch die gleichen Proportionen wie
+ dieser (202:297 statt 210:297).
+\end{description}
+
+\noindent Der Satzspiegel wird durch Angabe des Befehls
+\begin{quote}
+\verb|\typearea[|{\em BCOR\/}\verb|]{|{\em DIV\/}\verb|}|
+\end{quote}
+neu konstruiert. Weil interne Gr"o"sen wie \verb|\oddsidemargin| u."a.
+ver"andert werden, die nur in der Pr"aambel (dem Teil der Textquelldatei vor
+\verb|\begin{document}|) modifiziert werden d"urfen, ist auch der
+\verb|\typearea|-Befehl nur in der Pr"aambel erlaubt. Die Optionalangabe
+{\em BCOR\/} stellt die gleichnamige Gr"o"se zur Bindungs-Korrektur ein,
+w"ahrend {\em DIV\/} die Rolle des oben genannten Divisors $n$ "ubernimmt.
+{\em BCOR\/} bedarf einer Ma"seinheit, wobei alle bei \TeX\ erlaubten
+Einheiten m"oglich sind (pt, mm, cm, in, \dots), {\em DIV\/} hingegen mu"s
+eine ganze Zahl gr"o"ser als 3 sein.
+
+Bei Verwendung des {\tt script} oder {\tt script\_s}-Styles wird
+{\em DIV\/} nach Tabelle~\ref{DIV1} gew"ahlt (wobei keine Bindungs-Korrektur
+vorgenommen wird) und der \verb|\typearea|-Befehl durch den
+\verb|\documentstyle|-Befehl automatisch ausgef"uhrt.
+
+\begin{table}
+\centering
+\begin{tabular}{|c|c|}
+\hline
+Textfontgr"o"se & {\em DIV} \\
+\hline
+10pt & 8 \\
+11pt & 10 \\
+12pt & 12 \\
+\hline
+\end{tabular}
+
+\caption{{\em DIV\/}-Voreinstellungen}
+\label{DIV1}
+\end{table}
+
+Als Anhaltspunkt f"ur die manuelle {\em DIV\/}-Einstellung kann
+Tabelle~\ref{DIV2} dienen. Dabei wurde {\em BCOR\/} = 0 und das Papierformat
+DIN A4 sowie zweiseitiger Druck zugrundegelegt; die Abstimmung der
+Textbereichsh"ohe auf den (von der gew"ahlten Schriftgr"o"se abh"angigen)
+Grundlinienabstand, die die Textbereichsh"ohe nochmals um maximal 14.5 pt
+$\simeq$ 5.1 mm vergr"o"sern kann, wurde nicht ber"ucksichtigt.
+
+\begin{table}
+\centering
+\begin{tabular}{|c||c|c|c|c|}
+\hline
+ & \multicolumn{2}{c|}{Textbereich} & \multicolumn{2}{c|}{R"ander}\\
+{\em DIV}& Breite [mm] & H"ohe [mm] & oben [mm] & innen [mm] \\
+\hline
+6 & 105.00 & 148.50 & 49.50 & 35.00 \\
+7 & 120.00 & 169.71 & 42.43 & 30.00 \\
+8 & 131.25 & 185.63 & 37.13 & 26.25 \\
+9 & 140.00 & 198.00 & 33.00 & 23.33 \\
+10 & 147.00 & 207.90 & 29.70 & 21.00 \\
+11 & 152.73 & 216.00 & 27.00 & 19.09 \\
+12 & 157.50 & 222.75 & 24.75 & 17.50 \\
+13 & 161.54 & 228.46 & 22.85 & 16.15 \\
+14 & 165.00 & 233.36 & 21.21 & 15.00 \\
+15 & 168.00 & 237.60 & 19.80 & 14.00 \\
+\hline
+\end{tabular}
+
+\caption{Satzspiegelma"se in Abh"angigkeit von {\em DIV}}
+\label{DIV2}
+\end{table}
+
+\subsection{Ungew"ohnliche Satzspiegel\label{AREASET}}
+
+Wird ein Satzspiegel gew"unscht, der ungew"ohnliche Proportionen hat oder
+zwar wie oben angegeben konstruiert werden soll, jedoch {\em exakt\/} die
+in der vorstehenden Tabelle aufgef"uhrten Ma"se (ohne die Korrektur auf
+Vielfache des Grundlinienabstandes) haben soll, so gibt es noch alternativ
+zu \verb|\typearea| den Befehl
+\begin{quote}
+\verb|\areaset[|{\em BCOR\/}\verb|]{|{\em WIDTH\/}\verb|}{|{\em HEIGHT\/}%
+\verb|}|
+\end{quote}
+der die Textbereichsbreite auf {\em WIDTH\/} und die Textbereichsh"ohe auf
+{\em HEIGHT\/} setzt (jeweils ohne jede nachtr"agliche Korrektur) und die
+Rand- und Randnoten-Einstellungen so vornimmt, da"s der Textbereich sinnvoll
+positioniert wird ("ahnlich wie beim \verb|\typearea|-Befehl). Auch die
+Wirkung der optionalen {\em BCOR\/}-Angabe ist wie schon oben beschrieben.
+
+Damit ist es nun sehr einfach m"oglich, z.B. genau quadratische oder sehr
+schmale hohe Satzspiegel zu verwirklichen. Wenn die automatische
+Positionierung nicht gef"allt, kann diese durch die entsprechenden Befehle
+nat"urlich auch noch nachtr"aglich ver"andert werden. Weiterhin ist es
+hiermit m"oglich, die Satzspiegelbreite auf die Breite eines vorgegebenen
+Textes abzustimmen.
+Als Beispiel soll, wie weiter oben angek"undigt, der Textbereich der Breite
+von 30 Zeichen in {\tt Typewriter}-Schrift angepa"st werden. Eine
+Befehlsfolge, die dieses durchf"uhrt, w"urde etwa lauten:
+\begin{quote}
+\verb|\newlength{\thirtytt}|\\
+\verb|\settowidth{\thirtytt}{\tt 123456789012345678901234567890}|\\
+\verb|\areaset{\thirtytt}{20cm} % Textbereichsh"ohe: 20cm|
+\end{quote}
+Auch dieser Befehl darf selbstverst"andlich nur in der Pr"aambel
+auftreten.
+
+\subsection{Ber"ucksichtigung von Kopf- und/oder Fu"szeile}
+
+Manchmal ist es sinnvoll, da"s bei der Konstruktion des Satzspiegels auch
+die Kopf- und/oder Fu"szeile als zum Textbereich dazugeh"orig betrachtet wird.
+Dies ist z.B. der Fall, wenn der Kolumnentitel wie in dieser Dokumentation
+durch eine horizontale Linie vom eigentlichen Text getrennt ist und dadurch
+optisch n"aher an diesen heranr"uckt.
+
+Bei Angabe des \verb|\headincludeon| Befehls gilt bei einer nachfolgenden
+Satzspiegelberechnung mit Hilfe des \verb|\typearea|- oder
+\verb|\areaset|-Befehls alles, was oben "uber den Textbereich gesagt wurde,
+f"ur Textbereich plus Kopfzeile. Dieses Verhalten l"a"st sich nat"urlich mit
+der komplement"aren Anweisung \verb|\headincludeoff| wieder abschalten.
+F"ur Fu"szeilen gibt es ab der Version~2.0 von {\tt script} die entsprechenden
+Befehle \verb|\footincludeon| bzw. \verb|\footincludeoff|.
+
+\subsection{Andere Papierformate}
+
+Sollen sich die Satzspiegelberechnungen nicht auf DIN A4
+(wie es hier voreingestellt ist), sondern auf ein anderes Papierformat
+beziehen, so mu"s nun nicht mehr -- wie dies noch in der Version~1.0
+der "`Script"'-Styles der Fall war -- die Datei {\tt typearea.sty}
+modifiziert werden. Ab Version~2.0 lassen sich andere Blattma"se als
+DIN A4 einfach durch die "Anderung der Variablen \verb|\paperwidth| bzw.
+\verb|\paperheight| (vor dem Aufruf des \verb|\typearea|- bzw.
+\verb|\areaset|-Befehls) einstellen. Einem Vorschlag von Markus Kohm folgend,
+werden diese beiden Variablen automatisch durch die Angabe einer der
+Optionen \verb|DINA3|, \verb|DINA4|\footnote{Diese Option wurde nur der
+Vollst"andigkeit halber mit aufgenommen, da auch ohne deren Angabe das
+Papierformat DIN~A4 zugrunde gelegt wird.}, \verb|DINA5|, \verb|DINA6|,
+\verb|DINA3l|, \verb|DINA4l|, \verb|DINA5l| oder \verb|DINA6l| im
+\verb|\documentstyle| Befehl gesetzt und der Satzspiegel entsprechend
+berechnet. Der Buchstabe \verb|l| am Ende dieser Optionen kennzeichnet
+dabei die Verwendung des Querformats (\verb|l| steht f"ur "`Landscape"',
+dem englischen Fachbegriff f"ur Druck im Querformat).
+
+\begin{description}
+\item[Beispiel 1: ] Ein Gedichtb"andchen soll im DIN A5-Format gedruckt
+ werden. Dazu gen"ugt nun die Angabe von \verb|DINA5| als
+ Styleoption, z.B.:
+ \begin{quote}
+ \verb|\documentstyle[german,DINA5]{script}|
+ \end{quote}
+\item[Beispiel 2: ] Der Textbereich eines Zeitplanes im DIN A4
+ {\em Quer\/}format soll exakt 270~mm mal 190~mm
+ gro"s sein. Dies wird erreicht durch die Angabe von
+ \begin{quote}
+ \verb|\documentstyle[german,DINA4l]{script_s}|\\
+ \verb|\areaset{270mm}{190mm}|
+ \end{quote}
+ und einer (systemabh"angigen) Anweisung an den Druckertreiber,
+ im Querformat zu drucken.
+\item[Beispiel 3: ] Beim Gedichtb"andchen aus Beispiel~1 soll zus"atzlich
+ eine Abfr"asung von 1,5~mm ber"ucksichtigt werden. Dazu mu"s
+ der Satzspiegel nochmal neu konstruiert werden, z.B. mit
+ \begin{quote}
+ \verb|\documentstyle[german,DINA5]{script}|\\
+ \verb|\typearea[1.5mm]{12}|
+ \end{quote}
+\item[Beispiel 4: ] Es soll auf Endlospapier mit den Ma"sen
+ $8\frac{1}{4}$~inch mal 12~inch gedruckt werden, und auch dort
+ soll der Satzspiegel ordentlich aussehen. Mit den Befehlen
+ \begin{quote}
+ \verb|\paperwidth 8.25in|\\
+ \verb|\paperheight 12in|\\
+ \verb|\typearea{10}|
+ \end{quote}
+ wird dies erreicht. Druckt man "ofters auf Endlospapier, so
+ empfiehlt es sich, diese Anweisungen in eine eigene Optionsdatei
+ (z.B. \verb|endlos.sty|) zu schreiben, die man dann einfach
+ z.B. mit
+ \begin{quote}
+ \verb|\documentstyle[endlos,german]{script}|
+ \end{quote}
+ verwenden kann. Soll zus"atzlich das Argument des
+ \verb|\typearea|-Befehls abh"angig von der gew"ahlten
+ Schriftgr"o"se sein, so ersetzt man in dieser Optionsdatei
+ \verb|\typearea{10}| durch
+ \begin{quote}
+ \verb|\ifcase \@ptsize\relax|\\
+ \verb| \typearea{8} %10pt|\\
+ \verb| \or \typearea{10} %11pt|\\
+ \verb| \or \typearea{12} %12pt|\\
+ \verb|\fi|
+ \end{quote}
+\end{description}
+
+\subsection{Einbindung der Befehle zur Satzspiegeleinstellung}
+
+In die beiden Hauptstyles {\tt script} und {\tt script\_s} sind die
+Befehle \verb|\typearea| und \verb|\areaset| bereits eingebunden. Da der
+brieferzeugende {\tt script\_l}-Style einen besonderen und vor allem
+festen Satzspiegel besitzt, wurde bei ihm auf die Einbindung verzichtet.
+
+Um diese Befehle auch in anderen Styles benutzen zu k"onnen, wurden ihre
+Definitionen zus"atzlich seperat in die Optionsdatei {\tt typearea.sty}
+geschrieben. Diese nimmt auch die von der gew"ahlten Schriftgr"o"se
+abh"angigen Voreinstellungen des Satzspiegels vor. Bei Verwendung des
+originalen {\tt article}-Styles wird also durch Angabe von
+\begin{quote}
+\verb|\documentstyle[11pt,typearea]{article}|
+\end{quote}
+die 11pt-Schrift ausgew"ahlt und anschlie"send der neu eingebundene
+\verb|\typearea{10}|-Befehl automatisch ausgef"uhrt.
+
+Selbstverst"andlich kann {\tt typearea.sty} auch in Verbindung mit jedem
+anderen Style benutzt werden, jedoch ist dieses nur sinnvoll, wenn dieser
+nicht von einem festen Layout ausgeht (wie dies z.B. beim {\tt letter}-Style
+und seinen Varianten der Fall ist).
+
+\section{Sonstige "Anderungen}
+
+\subsection{Default-Fontgr"o"se}
+
+Wird in der Definition des Document-Styles nichts anderes angegeben, so wird
+standardm"a"sig als Textfont der 11pt-Font verwendet (wie z.B. in dieser
+Dokumentation). Eine Ausnahme hiervon bildet wieder der
+{\tt script\_l}-Style, bei dem ohne Optionsangabe die 12pt-Schrift benutzt
+wird. Im Gegensatz zu den Originalstyles wird jedoch keine Fehlermeldung
+erzeugt, wenn der Default-Font trotzdem als Option angegeben wird
+(probieren Sie doch einmal \verb|\documentstyle[10pt]{article}|\dots).
+
+\subsection{Kapitel"uberschriften und Nummerierung}
+
+Kapitel"uberschriften im {\tt script}-Style werden ohne die bei {\tt report}
+und {\tt book} "ublichen eigenen Zeilen f"ur das Wort "`Kapitel"' und die
+Kapitelnummer gesetzt, sondern wie bei "Uberschriften niedrigerer Priorit"at
+mit der Kapitelnummer direkt vor der eigentlichen "Uberschrift. Da hierdurch
+ein Anhang leicht f"ur ein normales Kapitel gehalten werden kann (er
+unterscheidet sich von diesen ja nur durch die Art der Nummerierung), ist
+es empfehlenswert, ihn mit \verb|\part*{Anhang}| deutlich vom Rest des
+Dokumentes abzusetzen.
+
+Nach einfachen Abschnittsnummern steht einheitlich ein Punkt (1. statt 1 ,
+aber nicht 1.1. sondern 1.1). Die einzige Ausnahme bildet die Nummerierung
+der Parts, da bei r"omischer Z"ahlung ein nachfolgender Punkt un"ublich ist.
+Dies gilt selbstverst"andlich auch f"ur Eintr"age in Kolumnentitel und in
+das Inhaltsverzeichnis.
+
+\subsection{Kolumnentitel und Pagina}
+
+Der {\tt script}-Style benutzt als Default den Pagestyle {\tt headings},
+der in den Kopfteil der Seiten das aktuelle Kapitel (linke Seiten) bzw.
+den aktuellen Abschnitt (rechte Seiten) schreibt (sog. lebender
+Kolumnentitel bzw. running head). Weiterhin wird eine Seitennummer in den
+Fu"sbereich der Seite gesetzt (sog. Pagina). {\tt script\_s} stellt
+standardm"a"sig {\tt plain} als Pagestyle ein, jedoch sind nat"urlich
+auch hier {\tt headings}, {\tt myheadings} und {\tt empty} verf"ugbar.
+Beim Brief stehen teilweise andere Seitenstile zur Auswahl, die in
+Abschnitt~\ref{PAGESTYLES} behandelt werden.
+
+Normalerweise werden Kolumnentitel und Pagina zentriert; wurde jedoch die
+{\tt twoside} Option angegeben, so wird beides an den "au"seren Rand der
+Seite gesetzt.
+
+Die Definitionen der Pagestyles {\tt headings}, {\tt myheadings} und
+{\tt plain}, sowie die Befehle zum automatischen Setzen der Kolumnentitel
+durch Befehle wie \verb|\section| oder \verb|\tableofcontents| wurden
+dahingehend ver"andert, da"s die Kolumnentitel mit normaler
+Gro"s-Klein-Schreibung (vorher alles gro"s), standardm"a"sig in
+{\it Italics} (vorher {\sl slanted}) und bei Kapiteln ohne das Wort
+CHAPTER bzw. KAPITEL gesetzt werden. Die Seitennummer wurde generell aus
+der Kopfzeile in die sonst leere Fu"szeile verbannt.
+Diese Ma"snahmen haben neben der besseren Lesbarkeit ("`Inhaltsverzeichnis"'
+liest sich viel angenehmer als "`INHALTSVERZEICHNIS"') vor allem den
+Vorteil, da"s nun auch wesentlich l"angere Abschnitts-"Uberschriften in die
+Kopfzeile passen ohne abgeschnitten zu werden.
+
+Wird unter den Kolumnentiteln eine horizontale Linie gew"unscht, so ist
+auch dies jetzt ohne Probleme m"oglich\label{HEADSEPLINE}: sie l"a"st sich
+einfach mit
+\begin{quote}
+\verb|\headseplineon|
+\end{quote}
+an- bzw. durch
+\begin{quote}
+\verb|\headseplineoff|
+\end{quote}
+wieder ausschalten. Das funktioniert nat"urlich nur bei den Pagestyles
+{\tt headings} und {\tt myheadings}, da ja alle anderen keinen Kolumnentitel
+generieren. Durch diese Befehle wird auch \verb|\headinclude|
+automatisch sinnvoll miteingestellt, d.h. \verb|\headincludeon| bei
+\verb|\headseplineon| und \verb|\headincludeoff| bei \verb|\headseplineoff|.
+Damit dies zum Tragen kommt, mu"s allerdings nach einer Ver"anderung dieses
+Schalters der Satzspiegel neu konstruiert werden. Default ist in den beiden
+Hauptstyles {\tt script} und {\tt script\_s} (bei {\tt script\_l} ist wieder
+alles anders; siehe Abschnitt~\ref{PAGESTYLES}) \verb|\headseplineoff|.
+
+\begin{description}
+\item[Beispiel: ] In der vorliegenden Dokumentation wurde
+ mit \verb|\headseplineon| der horizontale Strich unter den
+ Kolumnentiteln eingeschaltet (dadurch wurde auch gleichzeitig
+ \verb|\headincludeon| ausgef"uhrt). Damit der Satzspiegel dieser
+ "Anderung angepa"st wird, mu"ste dieser mit \verb|\typearea{10}| neu
+ berechnet werden.
+\end{description}
+
+\noindent Ab der Version~2.0 von {\tt script} und {\tt script\_s} gilt das
+oben f"ur eine horizontale Linie unter den Kolumnentiteln gesagte auch f"ur
+die Fu"szeile. Mit
+\begin{quote}
+\verb|\footseplineon|
+\end{quote}
+kann man die Erzeugung einer solche Linie oberhalb der Seitennummer in
+den Pagestyles {\tt plain}, {\tt headings} und {\tt myheadings} an-,
+und mit
+\begin{quote}
+\verb|\footseplineoff|
+\end{quote}
+wieder abschalten. Analog zu den \verb|\headinclude|-Befehlen existieren
+auch die Varianten f"ur die Fu"szeile \verb|\footincludeon| und
+\verb|\footincludeoff|.
+
+\subsection{Kleinere kosmetische Ver"anderungen}
+
+In Fu"snoten ist ein kleiner horizontaler Bereich (1 em) nur f"ur die
+Fu"snotennummer reserviert, der eigentliche Text beginnt also immer erst
+diesen Abstand vom linken Rand entfernt. Bei mehrzeiligen Fu"snoten werden
+die Folgezeilen nochmals 0.5 em links eingezogen. Dadurch setzen
+sich diese besser voneinander ab.
+
+Abs"atze werden ohne vertikalen Zwischenraum und mit einem Einzug von
+1 em (entspricht 1 \verb|\quad|) gesetzt.
+
+Zus"atzlich wurde der im europ"aischen Raum "ubliche "`franz"osische"'
+Punktbehandlungsmodus (\verb|\frenchspacing|) selektiert, was den Vorteil
+hat, da"s man nicht mehr hinter Abk"urzungen, die mit einem Kleinbuchstaben
+enden, ein \verb*|\ | schreiben mu"s, um einen zu gro"sen Zwischenraum zu
+vermeiden.
+
+Bei der {\tt enumerate}-Umgebung wurde in der zweiten Ebene eine Klammer
+entfernt, so da"s a) statt (a) geschrieben wird. Weiterhin wurde in der
+dritten Ebene des {\tt itemize}-Environments der "`$\ast$"' durch
+ein "`$\triangleright$"' ersetzt (das sieht zumindest f"ur meinen
+Geschmack etwas gef"alliger aus).
+
+Die Autoren- und Datumsangaben in Titeln erscheinen nicht in \verb|\large|,
+sondern in \verb|\Large|.
+
+In mehrzeiligen Captions (Unterschriften von {\tt table} bzw. {\tt figure})
+werden die zweiten und folgenden Zeilen so weit links einger"uckt, da"s
+diese nicht mehr unter "`Abbildung \dots:"', sondern unter dem eigentlichen
+Text der ersten Zeile beginnen.
+
+Es wurden noch etliche weitere Kleinigkeiten im Layout ver"andert,
+die allerdings dem unge"ubten Auge kaum auf\/fallen werden. So ist etwa der
+Spaltenabstand im zweispaltigen Satz von 10 pt auf die "ubliche 1 cc
+verg"o"sert worden (1 Cicero $\simeq$ 12 pt). Will man alles ganz genau
+wissen, so kann man ja immer noch die jeweilige Style-Datei studieren
+(dazu sollte man allerdings auch die niedrigeren \TeX-Befehle kennen bzw.
+zuerst die {\tt .doc}-Versionen der Originalstyles durcharbeiten).
+
+\chapter{Zus"atzliche Befehle}
+
+\section{Die Erweiterungen des Abstracts und der Titelseite}
+
+Bei Abstracts besteht nun die M"oglichkeit, die automatisch erzeugte
+"Uberschrift (z.B. "`Zusammenfassung"') mit \verb|\abstractoff| aus- bzw.
+mit \verb|\abstracton| wieder anzuschalten (voreingestellt ist
+\verb|\abstracton|).
+
+Der \verb|\maketitle|-Befehl des {\tt script}-Hauptstyles wurde durch die
+folgenden optionalen Angaben wesentlich erweitert:
+\begin{itemize}
+\item \verb|\extratitle{|{\em Schmutztitel\/}\verb|}| erzeugt eine eigene
+ Seite, auf der der sog. "`Schmutztitel"'\footnote{Fr"uher war der
+ Buchblock oftmals nicht durch einen Buchdeckel vor Verschmutzung
+ gesch"utzt; diese Aufgabe "ubernahm dann die erste Seite des Buches, die
+ meist einen Kurztitel, eben jenen "`Schmutztitel"', trug. Auch heute
+ noch wird gerne eine Extraseite vor dem eigentlichen Haupttitel f"ur
+ Verlagsname, Buchreihennummer o."a. benutzt.} steht. Dieser wird wie
+ normaler Text, also ohne Zentrierung und in normaler Schriftart und
+ -gr"o"se gesetzt. Dadurch ist dessen Gestaltung v"ollig dem Anwender
+ "uberlassen. Die R"uckseite ist auch im zweiseitigen Druck leer.
+\item In den Kopfteil der Haupttitelseite kann nun mittels \verb|\titlehead|
+ zus"atzlicher Text wie z.B. eine Institutsadresse geschrieben werden.
+\item Direkt oberhalb des eigentlichen Titels wird durch \verb|\subject|
+ eine Zusatzangabe (z.B. "`Diplomarbeit"') in etwas gr"o"serer Schrift
+ eingef"ugt.
+\item \verb|\publishers{|{\em Verlag\/}\verb|}| plaziert den Verlagsnamen
+ in den unteren Teil der Haupttitelseite.
+\item Im zweiseitigen Druck l"a"st sich die R"uckseite des Haupttitels f"ur
+ weitere Informationen (im Beispiel dieser Dokumentation ist dies
+ der Haftungsausschlu"s) nutzen. Dazu stehen die Befehle
+ \verb|\uppertitleback| und \verb|\lowertitleback| zur Verf"ugung.
+\item \verb|\dedication{|{\em Widmung\/}\verb|}| erzeugt eine seperate
+ Widmungsseite, wobei {\em Widmung\/} zentriert und in etwas gr"o"serer
+ Schrift gesetzt wird. Wie bei \verb|\extratitle| ist die R"uckseite
+ grunds"atzlich leer.
+\end{itemize}
+
+\begin{description}
+\item[Beispiel: ] \
+\begin{verbatim}
+\titlehead{Institut f"ur Nachrichtentechnik \hfill SS1993
+ \\Hochschulstr.12
+ \\3456 Unistadt}
+\subject{Diplomarbeit}
+\title{Digitale Raumsimulation mit dem DSP56004}
+\author{Ulrich Ungenannt}
+\lowertitleback{Diese Diplomarbeit wurde mit dem Textsatzsystem
+ \TeX\ erstellt.}
+\maketitle
+\end{verbatim}
+\end{description}
+
+\noindent Der Titel (Kurz- oder Haupttitel) beginnt normalerweise auf Seite
+1; im Original war hierf"ur Seite 0 vorgesehen, was zu der unangenehmen
+Tatsache f"uhrte, da"s die Titelseite im zweiseitigen Druck links zu liegen
+kam. Durch Angabe einer Zusatzoption (z.B. \verb|\maketitle[-1]|) l"a"st
+sich die Startseite jetzt beliebig festlegen.
+
+Im {\tt script\_s}-Hauptstyle ist von den genannten Features lediglich
+\verb|\titlehead| und \verb|\subject| vorhanden. Um jedoch auch dort oder
+in anderen Styles wie z.B. {\tt article} eine eigene Titelseite mit allen
+zus"atzlichen M"oglichkeiten zur Verf"ugung zu stellen, wurden alle dazu
+notwendigen Definitionen in die Optionsdatei {\tt sctitle.sty} geschrieben.
+Ab Version~2.0 dieses Files ist jedoch zu beachten, da"s der Font, in dem
+der Haupttitel und der Titel des Abstracts erscheint, vom Hauptstyle
+abh"angig ist: Bei Verwendung von {\tt script\_s}, Version~2.0, werden die
+Titel mit dem Zeichensatz gesetzt, der im \verb|\sectfont|-Befehl
+definiert ist (siehe Abschnitt~\ref{SECTFONT}). In Verbindung mit allen
+Hauptstyles, die diesen Befehl nicht kennen (das d"urften fast alle
+anderen sein, z.B. {\tt article}, {\tt report}, {\tt book}, {\tt script\_s}
+Version~1.0 usw.), wird f"ur die Titel \verb|\bf| selektiert.
+
+\section{Die "`xxxxfont"'-Variablen\label{SECTFONT}}
+
+Seit der Version~2.0 des "`Script"'-Paketes sind mehrere Variablen
+zur globalen Schrift\-"an\-de\-rung in Kolumnentiteln, Paginierung, Captions,
+"Uberschriften und dem {\tt description}-Environment bereitgestellt.
+Dadurch lassen sich mit einem einzigen Befehl z.B. s"amtliche "Uberschriften
+statt in \verb|\sfb| in \verb|\rm| ausgegeben. Dazu mu"s nur (am besten
+in der Pr"aambel) die Anweisung
+\begin{quote}
+\verb|\def\sectfont{\rm}|
+\end{quote}
+oder, was gleichbedeutend ist,
+\begin{quote}
+\verb|\renewcommand{\sectfont}{\rm}|
+\end{quote}
+stehen. Auf die gleiche Art und Weise k"onnen auch die anderen
+Fonteinstellungen ge"andert werden:
+
+\vspace{3ex}
+\begin{tabular}{lll}
+Variable & Wirkung auf: & Default \\
+\hline
+\verb|\captfont| & Caption-Texte & \verb|\rm| \\
+\verb|\descfont| & Item-Texte des {\tt description}-Environments
+ & \verb|\sfb| \\
+\verb|\headfont| & Kolumnentitel & \verb|\it| \\
+\verb|\pnumfont| & Paginierung & \verb|\rm| \\
+\verb|\sectfont| & S"amtliche "Uberschriften und Titel
+ & \verb|\sfb| \\
+\end{tabular}
+\vspace{3ex}
+
+\noindent Selbstverst"andlich sind nicht nur Fonteinstellungs-, sondern
+auch Gr"o"sen"anderungsbefehle m"oglich. Im {\tt script\_l}-Style ist
+keiner dieser Variablen definiert, da es dort weder Captions noch
+"Uberschriften gibt und Kopf- sowie Fu"szeilen h"aufig grundlegend
+modifiziert werden.
+
+\section{Die "`marginline"'}
+
+Analog zum \verb|\marginpar| wurde die \verb|\marginline| eingef"uhrt, die
+f"ur einzeilige Randnotizen gedacht ist. Bei diesen tritt n"amlich im
+{\tt twoside}-Modus auf linken Seiten das Problem auf, da"s sie mit
+\verb|\marginpar| nicht rechtsb"undig gesetzt werden (was sinnvoll w"are),
+sondern durch den Blocksatz einer nicht vollen Zeile linksb"undig
+erscheinen. Bei Verwendung von \verb|\marginline{|{\em Randnotiz\/}\verb|}|
+werden einzeilige Texte sinnvoll in den "au"seren Rand gesetzt, was zum
+Beispiel zum Hervorheben von Querverweisen n"utzlich ist.
+
+\section{Der "`addchap"'- bzw. "`addsec"'-Befehl}
+
+F"ur unnummerierte Abschnitte wie z.B. ein Vorwort oder Danksagungen
+stand bisher nur der \verb|\chapter*|- bzw. \verb|\section*|-Befehl zur
+Verf"ugung, die allerdings den Nachteil haben, da"s sie zwar das bis auf die
+Nummerierung komplette "Uberschrifts-Layout erzeugen, jedoch weder einen
+Eintrag ins Inhaltsverzeichnis noch einen Kolumnentitel generieren. Dies
+mu"ste, falls dies erw"unscht war, nachtr"aglich von Hand durchgef"uhrt
+werden, was wohl nicht ganz der \LaTeX-Philosophie entspricht.
+
+Gerade f"ur die oben genannten Anwendungen wurden daher die neuen Befehle
+\verb|\addchap| ("`additional chapter"', bei {\tt script.sty}) und
+\verb|\addsec| ("`additional section"', bei {\tt script\_s.sty})
+implementiert, die bis auf die fehlende Nummerierung genauso wie der
+\verb|\chapter|- bzw. \verb|\section|-Befehl (ohne Stern!) arbeiten, also
+alle Eintr"age an den entsprechenden Stellen erzeugen.
+Nat"urlich existieren auch \verb|\addchap*| bzw. \verb|\addsec*|,
+die den Stern-Versionen der "ublichen Befehle sehr "ahnlich sind,
+nur da"s zus"atzlich die Kolumnentitel gel"oscht werden (geht z.B. der zu
+einem \verb|\chapter*| geh"orende Text "uber mehrere Seiten, so tauchen
+die -- veralteten! -- Kolumnentitel pl"otzlich wieder auf). Zus"atzlich ist
+als Optionalargument wie bei den Originalen ein anderer Eintrag ins
+Inhaltsverzeichnis als die Abschnitts"uberschrift angebbar.
+
+\section{Der "`minisec"'-Befehl}
+
+Manchmal ist eine Art "Uberschrift w"unschenswert, die zwar etwas
+hervortritt (etwa durch die Wahl einer anderen Schrift), ansonsten aber eng
+mit dem nachfolgenden Text zusammenh"angt, also nicht wie bei den "ublichen
+Sektionierungsbefehlen relativ viel vertikalen Freiraum vor und nach der
+"Uberschrift l"a"st.
+
+\minisec{Wirkung des neuen "`minisec"'-Befehls:}
+Der Befehl \verb|\minisec| ("`minisec"' steht f"ur "`mini-section"')
+bewirkt nun genau das oben genannte, indem er das Argument in
+\verb|\sfb| mit einem vertikalen Freiraum von 1.5 ex vorher und keinem
+danach setzt. Die obige Zwischen"uberschrift wurde als Beispiel mit
+\verb|\minisec{Wirkung des ...}| gesetzt. Mini-Sections werden nicht mit
+ins Inhaltsverzeichnis aufgenommen. Da von vorneherein keine Nummerierung
+vorgesehen ist, existiert auch keine Version mit Stern von diesem Befehl.
+Genauso wie \verb|\marginline|, \verb|\addchap|, \verb|\addsec| und die
+Titelseitenerweiterungen existiert \verb|\minisec| nicht im
+{\tt script\_l}-Style.
+
+\section{Das "`labeling"'-Environment}
+
+\begin{labeling}{Wirkung:}
+\item[Wirkung:] Wie in dieser tabellarischen Aufstellung, die auch
+ gleichzeitig wieder ein Beispiel f"ur die Wirkung des
+ Environments ist, setzt "`labeling"' Text
+ wie in einem normalen Absatz, nur da"s zus"atzlich ein Titel
+ vorangestellt werden kann (in diesem Fall "`Wirkung"').
+
+ Pro Titel sind, wie hier vorgef"uhrt, mehrere Abs"atze m"oglich, um
+ auch umfangreichere Texte "ubersichtlich gliedern zu k"onnen.
+\item[Syntax:] "`labeling"' ist ein gew"ohnliches Environment mit einer
+ Zusatzangabe plus einem Optionalargument:
+ \begin{quote}
+ \verb|\begin{labeling}[|{\em Trennzeichen\/}\verb|]{|%
+ {\em l"angster Titel\/}\verb|}|\\
+ \verb|\item[|{\em Titel\/}\verb|]| {\tt ...}\\
+ \ {\tt ...}\\
+ \verb|\end{labeling}|
+ \end{quote}
+ Dabei ist {\em l"angster Titel\/} das l"angste \verb|\item|-Argument
+ inklusive allen eventuellen Schrift"anderungsbefehlen. Wird kein
+ Trennzeichen ben"otigt, so kann dieses zusammen mit dem eckigen
+ Klammerpaar weggelassen werden.
+\item[Beispiel:] Die Standardform eines mathematischen Beweises wird
+ folgenderma"sen erzeugt:
+ \begin{quote}
+ \begin{verbatim}
+\begin{labeling}[:]{\sfb Auss.}
+\item[\sfb Vor.] $x$ sei ...
+\item[\sfb Auss.] Es gilt ...
+\item[\sfb Bew.] Nach Satz ...
+\end{labeling}
+ \end{verbatim}
+ \end{quote}
+ Dies bewirkt die Ausgabe:
+ \begin{labeling}[:]{\sfb Auss.}
+ \item[\sfb Vor.] $x$ sei \dots
+ \item[\sfb Auss.] Es gilt \dots
+ \item[\sfb Bew.] Nach Satz \dots
+ \end{labeling}
+\end{labeling}
+
+\chapter{Der script\_l-Style}
+
+\section{Das Original}
+
+Nur wenige \LaTeX-Anwender haben bisher auch Briefe mit \TeX\ geschrieben,
+was wohl vor allem daran liegt, da"s der originale {\tt letter}-Style sehr
+auf das amerikanische Brief\/format zugeschnitten und au"serdem schlecht
+dokumentiert ist. Daher soll hier kurz der Aufbau eines Quelltextes
+f"ur Briefe erl"autert werden. Ein typisches Eingabefile hat folgende
+Form:
+\begin{quote}
+\begin{verbatim}
+\documentstyle[german]{letter}
+\name{Name des Absenders}
+\address{Adresse des Absenders}
+\signature{Unterschrift}
+\begin{document}
+
+\begin{letter}{Name und Adresse des Empf"angers des ersten Briefes}
+\opening{Anrede (z.B. Sehr geehrte Damen und Herren,)}
+Brieftext...Brieftext...Brieftext
+\closing{Gru"sformel (z.B. Mit freundlichen Gr"u"sen)}
+\ps{Postskriptum}
+\cc{Verteiler (z.B. Direktion\\Personalb"uro)}
+\encl{Anlagen (z.B. Lebenslauf\\Lichtbild)}
+\end{letter}
+
+\begin{letter}{Name und Adresse des Empf"angers des zweiten Briefes}
+ ...
+\end{letter}
+
+ ...
+\end{document}
+\end{verbatim}
+\end{quote}
+Die Befehle \verb|\signature|, \verb|\closing|, \verb|\ps|, \verb|\cc|
+und \verb|\encl| sind optional. Bei fehlender \verb|\signature|-Angabe wird
+das \verb|\name|-Argument als Unterschrift gesetzt. Ist eine gedruckte
+Unterschrift v"ollig unerw"unscht, so kann diese durch \verb|\signature{\ }|
+unterdr"uckt werden.
+
+Zu beachten ist weiterhin, da"s Adre"sfeld, Datum usw.
+erst durch den \verb|\opening|-Befehl erzeugt werden (wichtig z.B. bei
+Rechnungen ohne Anrede; dort mu"s dann trotzdem ein leerer
+\verb|\opening{}|-Befehl stehen). Dies hat weiterhin zur Folge, da"s
+z.B. bei einer zu langen {\tt backaddress} (s.u.) eine "`Overfull
+hbox"' in der Zeile gemeldet wird, in der der \verb|\opening|-Befehl
+steht, obwohl dieser gar nicht die eigentliche Ursache ist. Bei einer
+solchen Warnung sind also auch alle vorherigen Befehle zu pr"ufen!
+
+Um sich bei jedem Brief die wiederholte Eingabe der eigenen Adresse und
+sonstiger Voreinstellungen zu ersparen, ist es empfehlenswert, diese in eine
+eigene Datei (z.B. {\tt privat.sty}) zu schreiben, die dann einfach als
+Option beim \verb|\documentstyle| angegeben wird (ohne {\tt .sty}).
+Ein Beispiel f"ur eine solche Datei findet sich auf Seite~\pageref{PRIVAT}.
+
+\section{Zus"atzliche Eigenschaften des script\_l-Styles}
+
+Der neue {\tt script\_l}-Hauptstyle ist gegen"uber dem Original wesentlich
+erweitert und flexibler gestaltet worden. Ihn zeichnet vor allem die
+M"oglichkeit der Benutzung eigener Adre"sdateien und nahezu
+uneingeschr"ankte Serienbrief\/f"ahigkeit aus. Im Gegensatz zum
+{\tt letter}-Style, der die fontgr"o"senabh"angigen Einstellungen selbst
+vornimmt, verwendet {\tt script\_l} die Hilfsdateien {\tt script10.sty},
+{\tt script11.sty} und {\tt script12.sty}.
+
+\subsection{Mehrsprachigkeit}
+
+Der {\tt script\_l}-Style wurde von vorneherein mehrsprachig ausgelegt
+(englisch, amerikanisches englisch, deutsch, "osterreichisch und franz"osisch;
+voreingestellt ist amerikanisches englisch). Seit der Version~2.0 von
+{\tt script\_l} wird die Mehrsprachigkeit von \TeX3 voll unterst"utzt;
+dies hat allerdings zur Folge, da"s die Benutzung eines "`antiken"' \TeX\
+("alter als Version~3) in Verbindung mit dem neuen Briefstyle eine
+Fehlermeldung mit Abbruchm"oglichkeit produziert.
+
+Zur Einstellung der Sprache der automatisch gesetzten ("`Caption"'-) Texte
+wie "`Betreff"', "`Seite"', "`Anlagen"' usw. stehen die folgenden Befehle
+zur Verf"ugung:
+\begin{quote}
+\verb|\captionsenglish|\\
+\verb|\captionsUSenglish|\\
+\verb|\captionsgerman|\\
+\verb|\captionsaustrian|\\
+\verb|\captionsfrench|
+\end{quote}
+
+\noindent Die Schreibweise des Datums wird wird durch die nachstehenden
+Befehle festgelegt:
+\begin{labeling}[ :]{\com{dateUSenglish}}
+\item[\com{dateenglish}] 1/12/1993
+\item[\com{dateUSenglish}] 12/1/1993
+\item[\com{dategerman}] 1.\,12.\,1993
+\item[\com{dateaustrian}] 1.\,12.\,1993
+\item[\com{datefrench}] 1.\,12.\,1993
+\end{labeling}
+
+\noindent Es ist generell empfehlenswert (aber nicht zwingend notwendig),
+grunds"atzlich {\tt german} oder {\tt german3} als Option im
+\verb|\documentstyle|-Befehl anzugeben, da diese Styles den sehr
+komfortablen \verb|\selectlanguage|-Befehl zur Verf"ugung stellen, der
+gleichzeitig Captiontexte, die Schreibweise des Datums, einige
+sprachspezifische Extras und Trennregeln der verwendeten Sprache anpa"st.
+Im Zusammenhang mit {\tt script\_l} ist jedoch zu beachten, da"s
+\verb|\selectlanguage| erst {\em nach\/} \verb|\begin{document}| verwendet
+werden sollte\footnote{Die briefspezifischen Caption-Texte und Datumsformate
+werden nach einem Vorschlag von Sven Gohlke erst durch den
+\com{begin\{document\}}-Befehl definiert. Daher werden diese erst nach
+diesem Befehl aktiv.}.
+
+\begin{description}
+\item[Beispiel 1: ] F"ur eine Datei mit rein englischsprachigen Briefen
+(amerikanisches Englisch) gen"ugt:
+\begin{quote}
+\begin{verbatim}
+\documentstyle{script_l}
+\begin{document}
+\begin{letter}{...}
+(...)
+\end{verbatim}
+\end{quote}
+\item[Beispiel 2: ] F"ur eine Datei mit rein deutschsprachigen Briefen
+gen"ugt:
+\begin{quote}
+\begin{verbatim}
+\documentstyle[german]{script_l}
+\begin{document}
+\begin{letter}{...}
+(...)
+\end{verbatim}
+\end{quote}
+\item[Beispiel 3: ] Bei gemischtsprachigen Briefen empfiehlt sich:
+\begin{quote}
+\begin{verbatim}
+\documentstyle[german]{script_l}
+\begin{document}
+
+\selectlanguage{USenglish}
+\begin{letter}{...}
+(...)
+\end{letter}
+
+\selectlanguage{german}
+\begin{letter}{...}
+(...)
+\end{letter}
+
+(...)
+\end{verbatim}
+\end{quote}
+\end{description}
+
+\subsection{Zweiseitiger Druck}
+
+Zweiseitig gedruckte Briefe werden durch Angabe der {\tt twoside}-Option
+unterst"utzt; jedoch "andert sich hier im Gegensatz zum {\tt script}- oder
+{\tt script\_s}-Style der Satzspiegel nicht, sondern es wird lediglich
+sichergestellt, da"s ein neuer Brief immer auf einer ungeraden
+{\em Druck\/}seite beginnt. Die {\em interne\/} \TeX-Seitenz"ahlung startet
+bei jedem \verb|\begin{letter}|-Befehl wieder bei 1.
+
+\subsection{Layout}
+
+Der {\tt script\_l}-Style verwendet einen festen Satzspiegel, an dem
+nichts mehr ver"andert werden sollte. Er ist recht anspruchsvoll, was
+Ma"shaltigkeit und bedruckbaren Bereich des verwendeten Druckers angeht, da
+Falzmarken so weit links wie m"oglich und die Adresse wirklich im
+Adre"sfenster eines Fensterbriefumschlages stehen sollen. Aus diesem Grund
+wurde dem Paket eine Datei {\tt checkprt.tex} mitgegeben, die eine Testseite
+zur Drucker(treiber)einstellung erzeugt. Mit ihrer Hilfe kann sehr leicht in
+Millimetern und Inch gemessen werden, welcher Bereich der Seite bedruckbar
+ist und ob die Offsets des {\tt dvi}-Treibers stimmen.
+
+Die H"ohe des Kopfbereichs der Seite ist in der {\tt script\_l}-Version~2.0
+von 20~mm auf 22~mm vergr"o"sert worden\footnote{Dadurch ist der Abstand
+des oberen Papierrandes vom Briefkopf von 10~mm auf 9~mm geschrumpft;
+die meisten mir bekannten Laser- und Tintenstrahldrucker kommen jedoch
+auch damit noch zurecht. Sollten durch diese "Anderung Probleme entstehen,
+so k"onnen diese durch geeignete Einstellung des Druckertreibers in der
+Regel umgangen werden.}; damit gibt es hoffentlich keine
+Probleme mehr bei Verwendung des voreingestellten Briefkopf-Formates%
+\footnote{Diese Probleme traten auf bei Verwendung der 12pt-Schrift und
+wenn beide Zeilen der Adresse Unterl"angen besa"sen. Dreizeilige Adressangaben
+sind jedoch nach wie vor mangels Platz nicht m"oglich. Falls mehr Information
+im Briefkopf untergebracht werden soll, so mu"s ein eigener entwickelt
+werden.}. Der Fu"sbereich der Seite ist 20 mm hoch, linker und
+rechter Rand sind beide 25.4 mm breit.
+
+Abs"atze werden ohne Einzug und mit einem vertikalen Abstand von einem
+halben \verb|\baselineskip| gesetzt. Ein unterer Randausgleich wird auch im
+zweiseitigen Druck nicht durchgef"uhrt (\verb|\raggedbottom|).
+
+Gegen"uber der Version~1.0 wurde die Brieftext-Zentrierung leicht
+verbessert, was die Probleme bei umfangreicheren Briefen mit sehr langen
+Abs"atzen hoffentlich beseitigt hat.
+
+\subsection{Adre"sfeld und Zusatz-"`location"'-Feld}
+
+Zur Beschriftung des Briefumschlages gab es im Original den
+\verb|\makelabels|-Befehl, der dazu gedacht war, Adre"setiketten zu
+bedrucken. Da mir keine Konfiguration bekannt ist, in der dieser Befehl
+mit all seinen Anforderungen bez"uglich Papierwechsel etc. wirklich Sinn
+macht, habe ich ihn erst gar nicht in den neuen Briefstyle
+miteinbezogen (mal ehrlich: haben Sie \verb|\makelabels| benutzt?)
+Hier sehe ich auch die -- hoffentlich -- einzige M"oglichkeit, wo eine
+Inkompatibilit"at zu den Originalstyles auftreten kann.
+
+Als Entsch"adigung erm"oglicht {\tt script\_l} die Verwendung von
+Fensterbriefumschl"agen, die Adre"setiketten "uberfl"ussig machen. In einem
+Feld der H"ohe \verb|\addrheight| und Breite \verb|\addrwidth|, das
+\verb|\addrvskip| von der Textbereichsoberkante und (\verb|\addrindent|
+plus 25.4 mm) vom linken Rand des Papiers entfernt ist, wird dazu die bei
+\verb|\begin{letter}| angegebene Adresse vertikal zentriert. Optional kann
+noch mit
+\begin{quote}
+\verb|\backaddress{|{\em R"ucksende-Adresse\/}\verb|}|
+\end{quote}
+eine kleingeschriebene R"ucksende-Adresse und mit
+\begin{quote}
+\verb|\specialmail{|{\em Versandart\/}\verb|}|
+\end{quote}
+eine spezielle Versandart (z.B. Einschreiben) in dieses Feld eingeblendet
+werden.
+
+Im freien Raum rechts neben dem Adre"sfeld l"a"st sich noch zus"atzlicher
+Text (z.B. Zweigstellen einer Firma) unterbringen. Dieser wird durch
+\begin{quote}
+\verb|\location{|{\em Zusatz-Information\/}\verb|}|
+\end{quote}
+in ein \verb|\locwidth| breites Feld geschrieben, dessen rechter Rand mit
+der rechten Begrenzung des Textbereiches "ubereinstimmt.
+
+Beide Felder zusammen sind durch \verb|\addrfieldoff| ab- bzw. mit
+\verb|\addrfieldon| wieder anschaltbar (Default: \verb|\addrfieldon|).
+Dies kann z.B. f"ur pers"onliche Schreiben ohne Gesch"aftsbriefcharakter von
+Nutzen sein (wenngleich ich in diesem Falle eher zum F"uller greifen
+w"urde).
+
+Noch eine kleine Anmerkung zur Schreibweise des Wortes "`Adresse"':
+deutsch schreibt es sich mit {\em einem\/} "`d"', w"ahrend es im Englischen
+"`a{\em dd\/}ress"' hei"st. Daher ist bei allen Befehlen, die "`address"'
+enthalten, auf das doppelte "`d"' zu achten. Anweisungen, die etwas mit
+dem unten beschriebenen {\tt .adr}-File zu tun haben, werden allerdings mit
+{\em einem\/} "`d"' geschrieben (\verb|\adrentry| und \verb|\adrchar|).
+
+\subsection{Referenzfeld}
+
+Unterhalb des Adre"sfeldes steht normalerweise das Datum bzw. bei
+Gesch"aftsbriefen ein Referenzfeld mit vorgedruckten Unterfeldern f"ur
+Kundennummer, Durchwahl, Sachbearbeiter und "ahnliches. Dies ist jetzt
+auch m"oglich: ohne weitere Angabe erscheint rechtsb"undig Ort (definiert
+durch \verb|\place{|{\em Ort\/}\verb|}|) und Datum, w"ahrend bei Benutzung
+mindestens eines der folgenden Befehle das Datum in Vordruckform und die
+gew"unschten Unterfelder horizontal gegeneinander zentriert gesetzt werden:
+\begin{quote}
+\verb|\yourref{|{\em Ihr Zeichen\/}\verb|}|\\
+\verb|\yourmail{|{\em Ihr Schreiben vom\/}\verb|}|\\
+\verb|\myref{|{\em Unser Zeichen\/}\verb|}|\\
+\verb|\customer{|{\em Kundennummer\/}\verb|}|\\
+\verb|\invoice{|{\em Rechnungsnummer\/}\verb|}|\\
+\verb|\refitemi{|{\em Eigenes Feld 1\/}\verb|}|\\
+\verb|\refitemii{|{\em Eigenes Feld 2\/}\verb|}|\\
+\verb|\refitemiii{|{\em Eigenes Feld 3\/}\verb|}|
+\end{quote}
+Die "`Vordrucke"' der selbstdefinierten Unterfelder lassen sich mit
+\verb|\refitemnamei|, \verb|\refitemnameii| und \verb|\refitemnameiii|
+bestimmen.
+
+\subsection{Titel und Betreff}
+
+Keine eigene Titelseite, sondern eine fettgedruckte "Uberschrift (z.B.
+"`Rechnung"', "`1. Mahnung"') wird durch
+\begin{quote}
+\verb|\title{|{\em "Uberschrift\/}\verb|}|
+\end{quote}
+unterhalb des Referenzfeldes erzeugt.
+
+\noindent Ein "`Betreff"' l"a"st sich mit
+\begin{quote}
+\verb|\subject{|{\em Kurzinhalt des Briefes\/}\verb|}|
+\end{quote}
+angeben, wobei mit \verb|\subjecton| bzw. \verb|\subjectoff| das Wort
+"`Betr."' selbst an- und ausgeschaltet werden kann (voreingestellt ist
+\verb|\subjectoff|).
+
+\subsection{Seitenstile\label{PAGESTYLES}}
+
+Im {\tt script\_l}-Style stehen nach wie vor die Seitenstile {\tt empty},
+{\tt plain} und {\tt headings} zur Verf"ugung (Default ist {\tt plain}).
+Zus"atzlich gibt es noch speziell f"ur die erste Seite eines Briefes
+den Pagestyle {\tt firstpage}. Der eigentliche Clou an der Sache ist nun,
+da"s die Eintr"age in den Kopf- und Fu"sbereich der Seiten bei
+{\tt firstpage} und {\tt headings} frei gestaltbar sind. Dies geschieht
+durch die Befehle \verb|\firsthead|, \verb|\firstfoot|, \verb|\nexthead| und
+\verb|\nextfoot|, die bei einer "Anderung auf jeden Fall {\em vor\/} dem
+Aufruf des zugeh"origen \verb|\pagestyle{...}|- bzw.
+\verb|\begin{letter}|-Befehls ausgef"uhrt werden m"ussen. Als Beispiel
+sollen die Vorbelegungen der Styledatei dienen\footnote{Das Verst"andnis
+der Definitionen ist zugegebenerma"sen nicht ganz einfach. Die Bedeutung der
+verwendeten Variablen schlagen Sie bitte in der Variablen"ubersicht in
+Abschnitt~\ref{VARIABLEN} nach.}:
+\begin{quote}
+\begin{verbatim}
+\firsthead{\parbox[b]{\textwidth}{\begin{center}
+ {\sc \ignorespaces \fromname}\\[-8pt]
+ \rule{\textwidth}{.4pt}\\
+ \ignorespaces \fromaddress \end{center}}}
+\firstfoot{}
+\nexthead{\parbox[b]{\textwidth}{{%
+ \sc \ignorespaces \fromname}\\[8pt] \headtoname\
+ \ignorespaces \toname \hfill \datename:\ \today
+ \hfill \pagename\ \thepage\\[-8pt]
+ \rule{\textwidth}{.4pt}}}
+\nextfoot{}
+\end{verbatim}
+\end{quote}
+Dadurch ist es nun m"oglich, eigene Briefk"opfe und Fu"sleisten (z.B. f"ur
+Bankverbindungen, Gerichtsstand etc.) zu entwerfen. Der Phantasie sind
+eigentlich nur durch die zur Verf"ugung stehenden Zeichens"atze Grenzen
+gesetzt; Ausgefallenes l"a"st sich durch das {\tt picture}-Environment
+oder "`Metafont"' realisieren.
+
+\subsection{Adre"sdateien}
+
+Um nicht in jedem Brief die komplette Anschrift des Adressaten nachschlagen
+und vor allem eingeben zu m"ussen, wurden Adre"sdateien ({\tt .adr}-Files)
+\label{ADR} eingef"uhrt. Sie enthalten f"ur jeden Adressaten einen Eintrag
+in Form eines \verb|\adrentry|-Befehles, der acht Argumente mit folgender
+Bedeutung hat:
+\begin{labeling}[. Argument:]{8}
+\item[1] Name
+\item[2] Vorname
+\item[3] Adresse
+\item[4] Telefonnummer
+\item[5] zur freien Verf"ugung
+\item[6] zur freien Verf"ugung
+\item[7] Kommentar
+\item[8] K"urzel
+\end{labeling}
+Eine solche Adre"sdatei bindet man mit \verb|\input| entweder direkt in
+den Quelltext des Briefes (am besten noch in der Pr"aambel) oder in das
+oben vorgeschlagene Optionsfile, das die Voreinstellungen enth"alt, ein.
+
+\begin{description}
+\item[Beispiel: ] Mein pers"onliches Optionsfile\label{PRIVAT} sieht
+folgenderma"sen aus:
+\begin{verbatim}
+% privat.sty
+\name{Frank Neukam}
+\address{Franz-Stadelmayer-Str. 30\\97074 W"urzburg}
+\backaddress{F. Neukam, F.-Stadelmayer-Str. 30, 97074 W"urzburg}
+\place{W"urzburg, }
+\input{privat.adr}
+\end{verbatim}
+\end{description}
+
+\noindent F"ur jeden {\tt .adr}-Eintrag wird dann die komplette Anschrift
+unter dem jeweiligen K"urzel als \TeX-Makro abgelegt. Um das "Uberschreiben
+von \TeX- oder \LaTeX-Befehlen zu vermeiden, ist es empfehlenswert, f"ur
+K"urzel nur Gro"sbuchstaben zu verwenden. Lautet also z.B. ein
+{\tt .adr}-Eintrag
+\begin{quote}
+\begin{verbatim}
+\adrentry{abc-Lernsysteme}
+ {}
+ {z.Hd. Frau Streb\\Schulstr.1\\2345 Paukstadt}
+ {0\,678 / 90\,12\,34}
+ {}
+ {}
+ {}
+ {ABC}
+\end{verbatim}
+\end{quote}
+so schreibt man anstelle der kompletten Adresse nur noch
+\begin{quote}
+\verb|\begin{letter}{\ABC}|
+\end{quote}
+
+\noindent Mit Hilfe des im {\tt script}-Paket enthaltenen
+{\tt dir.tex}-Files kann aus einer {\tt .adr}-Datei ein Adre"sheft erzeugt
+werden, das nach Zurechtschneidung in die Standard-Taschenkalenderh"ullen
+pa"st. Dazu sollten die Eintr"age alphabetisch sortiert sein und vor jedem
+neu begonnenen Anfangsbuchstaben des Nachnamens ein
+\begin{quote}
+\verb|\adrchar{|{\em Anfangsbuchstabe\/}\verb|}|
+\end{quote}
+stehen. Vom {\tt script\_l.sty} wird dieser Befehl ignoriert; {\tt dir.tex}
+jedoch beginnt bei einer solchen Anweisung eine neue Seite und schreibt
+diesen Buchstaben in die Kopfzeile. Am besten probieren Sie dieses Programm
+einfach einmal anhand einer kleinen Adre"sdatei aus, alle ben"otigten
+Informationen werden w"ahrend des \TeX-Kompilerlaufes erfragt.
+
+"Ahnlich wie {\tt dir.tex} arbeitet das Programm {\tt phone.tex},
+nur da"s dieses anstelle eines Adre"sheftes ein Telefonnummern-Verzeichnis
+anlegt. \verb|\adrchar| erzeugt hier lediglich einen kleinen vertikalen
+Zwischenraum.
+
+\subsection{Serienbriefe}
+
+Eine weitere Anwendung der {\tt .adr}-Dateien sind Serienbriefe.
+
+\begin{description}
+\item[Beispiel: ] Mit der folgenden kurzen Datei kann eine Einladung an
+s"amtliche Kollegen eines Betriebes erzeugt werden:
+\begin{verbatim}
+\documentstyle[privat,german]{script_l}
+\begin{document}
+\def\adrentry#1#2#3#4#5#6#7#8{
+ \begin{letter}{#2 #1\\#3}
+ \opening{Liebe Kolleginnen und Kollegen,}
+ anl"a"slich meines ...
+ \closing{Mit freundlichen Gr"u"sen}
+ \end{letter}
+}
+\input{kollegen.adr}
+\end{document}
+\end{verbatim}
+\end{description}
+
+\noindent Soll der Brieftext abh"angig von Adressatenmerkmalen, die in den
+beiden noch freien Argumenten des \verb|\adrentry|-Befehls stehen,
+ver"anderlich sein, k"onnen Konstrukte der folgenden Form verwendet
+werden\footnote{Als Beispiel ist das Geschlecht des Empf"angers im Argument
+\#5 kodiert : m f"ur m"annlich, w f"ur weiblich. In Argument \#6 steht die
+Anzahl der Kinder.}:
+\begin{quote}
+\begin{verbatim}
+\def\adrentry#1#2#3#4#5#6#7#8{
+ \ifcase #6
+ % Dieser Zweig wird bei #6 = 0 abgearbeitet.
+ % In diesem Beispiel sind Empf"anger ohne Kinder uninteressant,
+ % weshalb im \else-Zweig nur Briefe an Kunden mit mindestens
+ % einem Kind erzeugt werden.
+ \else
+ % #6 > 0
+ \begin{letter}{#2 #1\\#3}
+ \if #5m \opening{Sehr geehrter Herr #1,} \fi
+ \if #5w \opening{Sehr geehrte Frau #1,} \fi
+
+ Sie als% Direkt nach 'als' mu"s ein % stehen, da der \if-Befehl
+ % vor 'gl"ucklich..' einen zus"atzlichen Leerraum
+ % generiert.
+ \if #5m gl"ucklicher Vater \fi
+ \if #5w gl"uckliche Mutter \fi
+ wissen sicher am besten, was gut f"ur
+ \ifnum #6 < 2
+ Ihr Kind
+ \else
+ Ihre Kinder
+ \fi
+ ist. Um Sie...
+
+ \closing{Mit freundlichen Gr"u"sen}
+ \end{letter}
+ \fi
+}
+\end{verbatim}
+\end{quote}
+Es ist also auch m"oglich, den Brieftext auf bestimmte Empf"angermerkmale
+gezielt abzustimmen und so den Eindruck eines pers"onlichen Schreibens
+zu erwecken. Die Anwendungsbreite ist lediglich durch die maximale Anzahl
+von zwei freien \verb|\adrchar|-Argumenten begrenzt.
+
+\newpage
+\section{Befehls- und Variablen"ubersicht\label{VARIABLEN}}
+
+\minisec{Briefspezifische Befehle, die strukturbeschreibend sind oder eine
+Ausgabe erzeugen:}
+\vspace{0.5em}
+\begin{labeling}{\tt 12345678901234567890123}
+\item[\com{begin\{letter\}\{}{\em Adressat\/\tt \}}]
+ Markiert den Beginn eines Briefes an {\em Adressat\/} und beginnt eine
+ neue Seite
+\item[\com{end\{letter\}}]
+ Markiert das Ende eines Briefes
+\item[\com{opening\{}{\em Anrede\/\tt \}}]
+ Setzt alle Teile eines Briefes oberhalb und einschlie"slich der
+ {\em Anrede}
+\item[\com{closing\{}{\em Gru"sformel\/\tt \}}]
+ Setzt {\em Gru"sformel\/} und Unterschrift
+\item[\com{ps\{}{\em Postskriptum\/\tt \}}]
+ Setzt ein {\em Postskriptum}
+\item[\com{cc\{}{\em Verteiler\/\tt \}}]
+ Setzt eine Verteilerliste (Eintr"age durch \com{}\com{} abgetrennt)
+\item[\com{encl\{}{\em Anlagen\/\tt \}}]
+ Setzt eine Anlagenliste (Eintr"age durch \com{}\com{} abgetrennt)
+\end{labeling}
+\vspace{1em}
+
+\minisec{Befehle der Adre"sdateien:}
+\vspace{0.5em}
+\verb|\adrchar| und \verb|\adrentry| (s.o.)
+\vspace{1.5em}
+
+\minisec{Befehle zur Sprachumschaltung:}
+\vspace{0.5em}
+\begin{labeling}{\com{captionsUSenglish}}
+\item[\com{captionsenglish}] Selektiert englische Caption-Texte
+\item[\com{captionsUSenglish}] Selektiert amerikanische Caption-Texte
+\item[\com{captionsgerman}] Selektiert deutsche Caption-Texte
+\item[\com{captionsaustrian}] Selektiert "osterreichische Caption-Texte
+\item[\com{captionsfrench}] Selektiert franz"osische Caption-Texte
+\item[\com{dateenglish}] Englisches Datum (1/12/1993)
+\item[\com{dateUSenglish}] Amerikanisches Datum (12/1/1993)
+\item[\com{dategerman}] Deutsches Datum (1.\,12.\,1993)
+\item[\com{dateaustrian}] "Osterreichisches Datum (1.\,12.\,1993)
+\item[\com{datefrench}] Franz"osisches Datum (1.\,12.\,1993)
+\end{labeling}
+\vspace{1em}
+
+\minisec{Sprachabh"angige Variablen}
+\vspace{0.5em}
+(d"urfen an beliebiger Stelle nach dem \verb|\begin{document}|-Befehl
+verwendet werden, k"onnen aber nur mit Hilfe von \verb|\def| oder
+\verb|\renewcommand| ge"andert werden; die Liste enth"alt die Variableninhalte
+nur in englisch, deutsch und franz"osisch, da die amerikanischen Namen
+den englischen und die "osterreichischen den deutschen entsprechen):
+\vspace{0.5em}
+\begin{labeling}{\tt 1234567890123}
+\item[\com{yourrefname}]
+ Your ref. / Ihr Zeichen / Vos r\'ef\'erences
+\item[\com{yourmailname}]
+ Your letter of / Ihr Schreiben vom / Votre lettre du
+\item[\com{myrefname}]
+ Our ref. / Unser Zeichen / Nos r\'ef\'erences
+\item[\com{customername}]
+ Customer no. / Kundennummer / Num\'ero de client
+\item[\com{invoicename}]
+ Invoice no./ Rechnungsnummer / Num\'ero de facture
+\item[\com{subjectname}]
+ Subject / Betr. / Concernant
+\item[\com{ccname}]
+ cc / Kopien an / Copie \`a
+\item[\com{enclname}]
+ encl / Anlagen / Annexes
+\item[\com{headtoname}]
+ To / An / A
+\item[\com{datename}]
+ Date / Datum / Date
+\item[\com{pagename}]
+ Page / Seite / Page
+\end{labeling}
+\vspace{1em}
+
+\minisec{Briefspezifische Variablen und deren Befehle zur Neu- oder
+Umdefininierung}
+\vspace{0.5em}
+(Variablen mit \verb|@| sind gesch"utzt; alle anderen k"onnen
+an beliebiger Stelle verwendet werden):
+\vspace{0.5em}
+\begin{labeling}["andert]{\tt 123456789012345}
+\item[\com{name}] \com{fromname}
+\item[\com{signature}] \com{fromsig}
+\item[\com{address}] \com{fromaddress}
+\item[\com{place}] \com{fromplace}
+\item[\com{location}] \com{fromlocation}
+\item[\com{backaddress}] \com{frombackaddress}
+\item[\com{telephone}] \com{telephonenum}
+\item[\com{yourref}] \com{varyourref}
+\item[\com{yourmail}] \com{varyourmail}
+\item[\com{myref}] \com{varmyref}
+\item[\com{customer}] \com{varcustomer}
+\item[\com{invoice}] \com{varinvoice}
+\item[\com{refitemi}] \com{varrefitemi}
+\item[\com{refitemii}] \com{varrefitemii}
+\item[\com{refitemiii}] \com{varrefitemiii}
+\item[\com{refitemnamei}] \com{varrefitemnamei}
+\item[\com{refitemnameii}] \com{varrefitemnameii}
+\item[\com{refitemnameiii}] \com{varrefitemnameiii}
+\item[\com{specialmail}] \verb|\@specialmail|
+\item[\com{title}] \verb|\@title|
+\item[\com{subject}] \verb|\@subject|
+\item[\com{firsthead}] \verb|\@firsthead|
+\item[\com{firstfoot}] \verb|\@firstfoot|
+\item[\com{nexthead}] \verb|\@nexthead|
+\item[\com{nextfoot}] \verb|\@nextfoot|
+\end{labeling}
+\vspace{1em}
+
+\minisec{Briefspezifische L"angenangaben}
+\vspace{0.5em}
+(voreingestellte L"ange in eckigen Klammern; die Ma"se \verb|\foldvskipi|
+bis \verb|\foldvskipiii| sind erst ab der Version~2.0 Bestandteil des
+{\tt script\_l.sty}):
+\vspace{0.5em}
+\begin{labeling}{\tt 1234567890123}
+\item[\com{foldhskip}] Abstand der Falzmarken vom linken Papierrand [3.5 mm]
+\item[\com{foldvskipi}] Abstand der ersten Falzmarke vom oberen
+ Papierrand [65 mm]
+\item[\com{foldvskipii}] Abstand der zweiten Falzmarke von der ersten
+ Falzmarke [40.5 mm]
+\item[\com{foldvskipiii}] Abstand der dritten Falzmarke von der zweiten
+ Falzmarke [58.5 mm]
+\item[\com{addrvskip}] Abstand des Adre"sfensters von der
+ Textbereichs-Oberkante [7.5 mm]
+\item[\com{addrindent}] Abstand des Adre"sfensters vom linken Rand des
+ Textbereiches [0 mm]
+\item[\com{addrwidth}] Breite des Adre"sfensters [70 mm]
+\item[\com{addrheight}] H"ohe des Adre"sfensters [35 mm]
+\item[\com{locwidth}] Breite des "`Location"'-Feldes [(\verb|\textwidth|
+ $-$ \verb|\addrwidth|)/2]
+\item[\com{refvskip}] Abstand des Referenzfeldes von der
+ Adre"sfeld-Unterkante [5.5 mm]
+\item[\com{sigindent}] Abstand der Gru"sformel und der Unterschrift vom
+ linken Rand des Textbereiches [0 mm]
+\end{labeling}
+\vspace{1em}
+
+\minisec{Schalter}
+\vspace{0.5em}
+(an jeden Schalternamen ist noch {\tt on} bzw. {\tt off} anzuh"angen):
+\vspace{0.5em}
+\begin{labeling}[schaltet]{\tt 1234567890}
+\item[\com{foldmarks}] Falzmarken [Default = on]
+\item[\com{addrfield}] Adre"s- und "`Location"'-Feld [Default = on]
+\item[\com{subject}] "`Betreff"'-Text [Default = off]
+\end{labeling}
+
+\end{document}
+
diff --git a/obsolete/macros/latex209/contrib/script/script10.sty b/obsolete/macros/latex209/contrib/script/script10.sty
new file mode 100644
index 0000000000..7ef7fec147
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/script/script10.sty
@@ -0,0 +1,39 @@
+% script10.sty -- by Frank Neukam (01 Dec 1993)
+
+\lineskip 1pt
+\normallineskip 1pt
+\def\baselinestretch{1}
+
+\def\@normalsize{\@setsize\normalsize{12pt}\xpt\@xpt
+ \let\sfb=\tensfb
+ \abovedisplayskip 10pt plus2pt minus5pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus3pt
+ \belowdisplayshortskip 6pt plus3pt minus3pt
+ \let\@listi\@listI}
+\def\small{\@setsize\small{11pt}\ixpt\@ixpt
+ \let\sfb=\bf
+ \abovedisplayskip 8.5pt plus 3pt minus 4pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus2pt
+ \belowdisplayshortskip 4pt plus2pt minus 2pt
+ \def\@listi{\leftmargin\leftmargini \topsep 4pt plus 2pt minus 2pt
+ \parsep 2pt plus 1pt minus 1pt
+ \itemsep \parsep}}
+\def\footnotesize{\@setsize\footnotesize{9.5pt}\viiipt\@viiipt
+ \let\sfb=\bf
+ \abovedisplayskip 6pt plus 2pt minus 4pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus 1pt
+ \belowdisplayshortskip 3pt plus 1pt minus 2pt
+ \def\@listi{\leftmargin\leftmargini \topsep 3pt plus 1pt minus 1pt
+ \parsep 2pt plus 1pt minus 1pt
+ \itemsep \parsep}}
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt \let\sfb=\bf}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt \let\sfb=\bf}
+\def\large{\@setsize\large{14.5pt}\xiipt\@xiipt \let\sfb=\twlsfb}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt \let\sfb=\frtnsfb}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt \let\sfb=\svtnsfb}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt \let\sfb=\twtysfb}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt \let\sfb=\twfvsfb}
+
diff --git a/obsolete/macros/latex209/contrib/script/script11.sty b/obsolete/macros/latex209/contrib/script/script11.sty
new file mode 100644
index 0000000000..8508c0c0db
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/script/script11.sty
@@ -0,0 +1,39 @@
+% script11.sty -- by Frank Neukam (01 Dec 1993)
+
+\lineskip 1pt
+\normallineskip 1pt
+\def\baselinestretch{1}
+
+\def\@normalsize{\@setsize\normalsize{13.6pt}\xipt\@xipt
+ \let\sfb=\elvsfb
+ \abovedisplayskip 11pt plus3pt minus6pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus3pt
+ \belowdisplayshortskip 6.5pt plus3.5pt minus3pt
+ \let\@listi\@listI}
+\def\small{\@setsize\small{12pt}\xpt\@xpt
+ \let\sfb=\tensfb
+ \abovedisplayskip 10pt plus2pt minus5pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus3pt
+ \belowdisplayshortskip 6pt plus3pt minus3pt
+ \def\@listi{\leftmargin\leftmargini \topsep 6pt plus 2pt minus 2pt
+ \parsep 3pt plus 2pt minus 1pt
+ \itemsep \parsep}}
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt
+ \let\sfb=\bf
+ \abovedisplayskip 8pt plus 2pt minus 4pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus 1pt
+ \belowdisplayshortskip 4pt plus 2pt minus 2pt
+ \def\@listi{\leftmargin\leftmargini \topsep 4pt plus 2pt minus 2pt
+ \parsep 2pt plus 1pt minus 1pt
+ \itemsep \parsep}}
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt \let\sfb=\bf}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt \let\sfb=\bf}
+\def\large{\@setsize\large{14.5pt}\xiipt\@xiipt \let\sfb=\twlsfb}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt \let\sfb=\frtnsfb}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt \let\sfb=\svtnsfb}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt \let\sfb=\twtysfb}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt \let\sfb=\twfvsfb}
+
diff --git a/obsolete/macros/latex209/contrib/script/script12.sty b/obsolete/macros/latex209/contrib/script/script12.sty
new file mode 100644
index 0000000000..2a7edd7852
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/script/script12.sty
@@ -0,0 +1,39 @@
+% script12.sty -- by Frank Neukam (01 Dec 1993)
+
+\lineskip 1pt
+\normallineskip 1pt
+\def\baselinestretch{1}
+
+\def\@normalsize{\@setsize\normalsize{14.5pt}\xiipt\@xiipt
+ \let\sfb=\twlsfb
+ \abovedisplayskip 12pt plus3pt minus7pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus3pt
+ \belowdisplayshortskip 6.5pt plus3.5pt minus3pt
+ \let\@listi\@listI}
+\def\small{\@setsize\small{13.6pt}\xipt\@xipt
+ \let\sfb=\elvsfb
+ \abovedisplayskip 11pt plus3pt minus6pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus3pt
+ \belowdisplayshortskip 6.5pt plus3.5pt minus3pt
+ \def\@listi{\leftmargin\leftmargini \parsep 4.5pt plus 2pt minus 1pt
+ \itemsep \parsep
+ \topsep 9pt plus 3pt minus 5pt}}
+\def\footnotesize{\@setsize\footnotesize{12pt}\xpt\@xpt
+ \let\sfb=\tensfb
+ \abovedisplayskip 10pt plus2pt minus5pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus3pt
+ \belowdisplayshortskip 6pt plus3pt minus3pt
+ \def\@listi{\leftmargin\leftmargini \topsep 6pt plus 2pt minus 2pt
+ \parsep 3pt plus 2pt minus 1pt
+ \itemsep \parsep}}
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt \let\sfb=\bf}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt \let\sfb=\bf}
+\def\large{\@setsize\large{18pt}\xivpt\@xivpt \let\sfb=\frtnsfb}
+\def\Large{\@setsize\Large{22pt}\xviipt\@xviipt \let\sfb=\svtnsfb}
+\def\LARGE{\@setsize\LARGE{25pt}\xxpt\@xxpt \let\sfb=\twtysfb}
+\def\huge{\@setsize\huge{30pt}\xxvpt\@xxvpt \let\sfb=\twfvsfb}
+\let\Huge=\huge
+
diff --git a/obsolete/macros/latex209/contrib/script/script_l.sty b/obsolete/macros/latex209/contrib/script/script_l.sty
new file mode 100644
index 0000000000..3b8577d87d
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/script/script_l.sty
@@ -0,0 +1,514 @@
+% script_l.sty -- by Frank Neukam (01 Dec 1993)
+% based on Leslie Lamport's letter style.
+
+\typeout{Document Style `script_l' v2.0 by Frank Neukam <01 Dec 1993>}
+
+\expandafter\ifx\csname language\endcsname\relax
+ \errhelp{Use script_l v1.0 or install TeX3 or MLTeX.}
+ \errmessage{script_l v2.0 can only be used with TeX3 or MLTeX!}
+\fi
+
+\ifx\selectfont\undefined
+ \font\tensfb =cmssbx10 scaled \magstep0
+ \font\elvsfb =cmssbx10 scaled \magstephalf
+ \font\twlsfb =cmssbx10 scaled \magstep1
+ \font\frtnsfb =cmssbx10 scaled \magstep2
+ \font\svtnsfb =cmssbx10 scaled \magstep3
+ \font\twtysfb =cmssbx10 scaled \magstep4
+ \font\twfvsfb =cmssbx10 scaled \magstep5
+\else
+ \def\tensfb{\family{\sfdefault}\series{bx}\shape{n}\size{10}{12pt}\selectfont}
+ \def\elvsfb{\family{\sfdefault}\series{bx}\shape{n}\size{11}{13.6pt}\selectfont}
+ \def\twlsfb{\family{\sfdefault}\series{bx}\shape{n}\size{12}{14.5pt}\selectfont}
+ \def\frtnsfb{\family{\sfdefault}\series{bx}\shape{n}\size{14}{18pt}\selectfont}
+ \def\svtnsfb{\family{\sfdefault}\series{bx}\shape{n}\size{17}{22pt}\selectfont}
+ \def\twtysfb{\family{\sfdefault}\series{bx}\shape{n}\size{20}{25pt}\selectfont}
+ \def\twfvsfb{\family{\sfdefault}\series{bx}\shape{n}\size{25}{30pt}\selectfont}
+\fi
+
+\def\@ptsize{2}
+\@namedef{ds@10pt}{\def\@ptsize{0}}
+\@namedef{ds@11pt}{\def\@ptsize{1}}
+\@namedef{ds@12pt}{\def\@ptsize{2}}
+\def\ds@draft{\overfullrule 5pt}
+\def\ds@twoside{\@twosidetrue \@mparswitchtrue}
+\@options
+\input script1\@ptsize.sty\relax
+\normalsize
+
+\let\sc@document=\document
+\def\document{\sc@document
+ \def\captionsenglish{%
+ \def\yourrefname{Your ref.}
+ \def\yourmailname{Your letter of}
+ \def\myrefname{Our ref.}
+ \def\customername{Customer no.}
+ \def\invoicename{Invoice no.}
+ \def\subjectname{Subject}
+ \def\ccname{cc}
+ \def\enclname{encl}
+ \def\headtoname{To}
+ \def\datename{Date}
+ \def\pagename{Page}}
+ \let\captionsUSenglish=\captionsenglish
+ \def\captionsgerman{%
+ \def\yourrefname{Ihr Zeichen}
+ \def\yourmailname{Ihr Schreiben vom}
+ \def\myrefname{Unser Zeichen}
+ \def\customername{Kundennummer}
+ \def\invoicename{Rechnungsnummer}
+ \def\subjectname{Betr.}
+ \def\ccname{Kopien an}
+ \def\enclname{Anlagen}
+ \def\headtoname{An}
+ \def\datename{Datum}
+ \def\pagename{Seite}}
+ \let\captionsaustrian=\captionsgerman
+ \def\captionsfrench{%
+ \def\yourrefname{Vos r\'ef\'erences}
+ \def\yourmailname{Votre lettre du}
+ \def\myrefname{Nos r\'ef\'erences}
+ \def\customername{Num\'ero de client}
+ \def\invoicename{Num\'ero de facture}
+ \def\subjectname{Concernant}
+ \def\ccname{Copie \`a}
+ \def\enclname{Annexes}
+ \def\headtoname{A}
+ \def\datename{Date}
+ \def\pagename{Page}}
+ \def\dateenglish{\def\today{\number\day/\number\month/\number\year}}
+ \def\dateUSenglish{\def\today{\number\month/\number\day/\number\year}}
+ \def\dategerman{\def\today{\number\day.\,\number\month.\,\number\year}}
+ \let\dateaustrian=\dategerman
+ \let\datefrench=\dategerman
+ \ifcase\language
+ \captionsUSenglish
+ \dateUSenglish
+ \or
+ \captionsgerman
+ \dategerman
+ \or
+ \captionsfrench
+ \datefrench
+ \fi}
+
+\oddsidemargin 0in
+\evensidemargin 0in
+\marginparwidth 0.9in
+\marginparsep 0.1in
+\marginparpush 0.45\baselineskip
+\topmargin -15.5mm
+\headheight 22mm
+\headsep 9mm
+\footheight 20mm
+\footskip 30mm
+\textheight 217mm
+\textwidth 159.2mm
+
+\parskip 0.5\baselineskip
+\parindent 0pt
+\smallskipamount=0.5\parskip
+\medskipamount=\parskip
+\bigskipamount=2\parskip
+\footnotesep 0.8\baselineskip
+\skip\footins 0.75\baselineskip plus 2pt minus 4pt
+\skip\@mpfootins = \skip\footins
+\columnsep 1cc
+\columnseprule 0pt
+\floatsep 1\baselineskip plus 2pt minus 2pt
+\textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 1\baselineskip plus 2pt minus 2pt
+\@maxsep 20pt
+\dblfloatsep 1\baselineskip plus 2pt minus 2pt
+\dbltextfloatsep 20pt plus 2pt minus 4pt
+\@dblmaxsep 20pt
+\@fptop 0pt plus 1fil
+\@fpsep 0.7\baselineskip plus 2fil
+\@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil
+\@dblfpsep 0.7\baselineskip plus 2fil
+\@dblfpbot 0pt plus 1fil
+
+\arraycolsep 5pt
+\tabcolsep 6pt
+\arrayrulewidth 0.4pt
+\doublerulesep 2pt
+\fboxsep 3pt
+\fboxrule 0.4pt
+\tabbingsep \labelsep
+
+\topsep 0.25\baselineskip
+\partopsep 0pt
+\itemsep 0.25\baselineskip
+\parsep 0.25\baselineskip
+\labelsep .5em
+\leftmargini 2.5em
+\leftmarginii 2.2em
+\leftmarginiii 1.87em
+\leftmarginiv 1.7em
+\leftmarginv 1em
+\leftmarginvi 1em
+\leftmargin\leftmargini
+\labelwidth\leftmargini
+\advance\labelwidth-\labelsep
+\def\@listI{\leftmargin\leftmargini}
+\let\@listi\@listI
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+\@listi
+
+\@lowpenalty 51
+\@medpenalty 151
+\@highpenalty 301
+\@beginparpenalty -\@lowpenalty
+\@endparpenalty -\@lowpenalty
+\@itempenalty -\@lowpenalty
+
+\def\theenumi{\arabic{enumi}}
+\def\theenumii{\alph{enumii}}
+\def\theenumiii{\roman{enumiii}}
+\def\theenumiv{\Alph{enumiv}}
+\def\labelenumi{\theenumi.}
+\def\labelenumii{\theenumii)}
+\def\labelenumiii{\theenumiii.}
+\def\labelenumiv{\theenumiv.}
+\def\p@enumii{\theenumi}
+\def\p@enumiii{\theenumi\theenumii)}
+\def\p@enumiv{\p@enumiii\theenumiii}
+\def\labelitemi{$\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\triangleright$}
+\def\labelitemiv{$\cdot$}
+
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+
+\def\quotation{\list{}{\listparindent 1em
+ \itemindent\listparindent
+ \rightmargin\leftmargin\parsep 0pt plus 1pt}\item[]}
+\let\endquotation=\endlist
+
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+\def\descriptionlabel#1{\hspace\labelsep \sfb #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+\let\enddescription\endlist
+\newdimen\descriptionmargin
+\descriptionmargin=3em
+
+\def\labelinglabel#1{#1\hfil\sc@septext}
+\def\labeling{\@ifnextchar [{\@labeling}{\@labeling[]}}
+\def\@labeling[#1]#2{\def\sc@septext{#1}
+ \list{}{\settowidth{\labelwidth}{#2#1}
+ \leftmargin\labelwidth \advance\leftmargin by \labelsep
+ \let\makelabel\labelinglabel}}
+\let\endlabeling\endlist
+
+\def\fromname{}
+\def\fromsig{}
+\def\fromaddress{}
+\def\fromplace{}
+\def\fromlocation{}
+\def\frombackaddress{}
+\def\telephonenum{}
+\def\varyourref{}
+\def\varyourmail{}
+\def\varmyref{}
+\def\varcustomer{}
+\def\varinvoice{}
+\def\varrefitemi{}
+\def\varrefitemii{}
+\def\varrefitemiii{}
+\def\varrefitemnamei{}
+\def\varrefitemnameii{}
+\def\varrefitemnameiii{}
+\def\@specialmail{}
+\def\@title{}
+\def\@subject{}
+
+\def\name#1{\def\fromname{#1}}
+\def\signature#1{\def\fromsig{#1}}
+\long\def\address#1{\def\fromaddress{#1}}
+\def\place#1{\def\fromplace{#1}}
+\long\def\location#1{\def\fromlocation{#1}}
+\def\backaddress#1{\def\frombackaddress{#1}}
+\def\telephone#1{\def\telephonenum{#1}}
+\def\yourref#1{\def\varyourref{#1}}
+\def\yourmail#1{\def\varyourmail{#1}}
+\def\myref#1{\def\varmyref{#1}}
+\def\customer#1{\def\varcustomer{#1}}
+\def\invoice#1{\def\varinvoice{#1}}
+\def\refitemi#1{\def\varrefitemi{#1}}
+\def\refitemii#1{\def\varrefitemii{#1}}
+\def\refitemiii#1{\def\varrefitemiii{#1}}
+\def\refitemnamei#1{\def\varrefitemnamei{#1}}
+\def\refitemnameii#1{\def\varrefitemnameii{#1}}
+\def\refitemnameiii#1{\def\varrefitemnameiii{#1}}
+\def\specialmail#1{\def\@specialmail{#1}}
+\def\title#1{\def\@title{#1}}
+\def\subject#1{\def\@subject{#1}}
+\long\def\firsthead#1{\def\@firsthead{#1}}
+\long\def\firstfoot#1{\def\@firstfoot{#1}}
+\long\def\nexthead#1{\def\@nexthead{#1}}
+\long\def\nextfoot#1{\def\@nextfoot{#1}}
+
+\newif\if@fold
+\newif\if@afield
+\newif\if@subj
+\def\foldmarkson{\@foldtrue}
+\def\foldmarksoff{\@foldfalse}
+\def\addrfieldon{\@afieldtrue}
+\def\addrfieldoff{\@afieldfalse}
+\def\subjecton{\@subjtrue}
+\def\subjectoff{\@subjfalse}
+
+\newdimen\sc@temp
+\newdimen\sc@@temp
+\newdimen\foldhskip
+\newdimen\foldvskipi
+\newdimen\foldvskipii
+\newdimen\foldvskipiii
+\newdimen\addrvskip
+\newdimen\addrindent
+\newdimen\addrwidth
+\newdimen\addrheight
+\newdimen\locwidth
+\newdimen\refvskip
+\newdimen\sigindent
+
+\foldhskip 3.5mm
+\foldvskipi 65mm
+\foldvskipii 40.5mm
+\foldvskipiii 58.5mm
+\addrvskip 7.5mm
+\addrindent 0mm
+\addrwidth 70mm
+\addrheight 35mm
+\locwidth\textwidth
+\advance\locwidth by -\addrwidth
+\divide\locwidth by 2
+\refvskip 5.5mm
+\sigindent 0mm
+
+\def\adrentry#1#2#3#4#5#6#7#8{\ifx #8\@empty \else
+ \ifx #2\@empty
+ \expandafter\def\csname #8\endcsname{#1\\#3}
+ \else
+ \expandafter\def\csname #8\endcsname{#2 #1\\#3}
+ \fi \fi}
+\def\adrchar#1{}
+
+\long\def\letter#1{\newpage
+ \if@twoside\ifodd\c@page\else \thispagestyle{empty}\null\newpage \fi\fi
+ \c@page\@ne \interlinepenalty=200 \@processto{#1}}
+\def\stopletter{}
+\def\endletter{\stopletter\@@par\pagebreak\@@par}
+\long\def\@processto#1{\expandafter\@xproc #1\\@@@\ifx\toaddress\@empty
+ \else\expandafter\@yproc #1@@@\fi}
+\long\def\@xproc #1\\#2@@@{\def\toname{#1}\def\toaddress{#2}}
+\long\def\@yproc #1\\#2@@@{\def\toaddress{#2}}
+
+\def\stopbreaks{\interlinepenalty \@M
+ \def\par{\@@par\nobreak}\let\\=\@nobreakcr
+ \let\vspace\@nobreakvspace}
+\def\@nobreakvspace{\@ifstar{\@nobreakvspacex}{\@nobreakvspacex}}
+\def\@nobreakvspacex#1{\ifvmode\nobreak\vskip #1\relax\else
+ \@bsphack\vadjust{\nobreak\vskip #1}\@esphack\fi}
+\def\@nobreakcr{\vadjust{\penalty\@M}\@ifstar{\@xnewline}{\@xnewline}}
+\def\startbreaks{\let\\=\@normalcr
+ \interlinepenalty 200\def\par{\@@par\penalty 200}}
+
+\def\@foldmarks{\if@fold \bgroup
+ \reversemarginpar\vspace{\foldvskipi}
+ \marginpar{\hspace{\foldhskip}\rule{2mm}{.2pt}} \vspace{\foldvskipii}
+ \marginpar{\hspace{\foldhskip}\rule{4mm}{.2pt}} \vspace{\foldvskipiii}
+ \marginpar{\hspace{\foldhskip}\rule{2mm}{.2pt}}
+ \vspace{-\foldvskipiii}\vspace{-\foldvskipii}\vspace{-\foldvskipi}
+ \egroup \fi}
+
+\def\@addrfield{\bgroup
+ \setbox0\vbox{\hsize\addrwidth
+ \ifx\frombackaddress\@empty \else
+ \underline{\scriptsize \sf \frombackaddress} \fi}
+ \setbox1\vbox{\hsize\addrwidth
+ \ifx\@specialmail\@empty \else \underline{\@specialmail} \fi}
+ \setbox2\vbox{\hsize\addrwidth
+ \toname \\ \toaddress}
+ \vskip\addrvskip \hskip\addrindent
+ \vbox to \addrheight{%
+ \ifx\frombackaddress\@empty \else \box0 \fi
+ \ifx\@specialmail\@empty \else \vfil\box1 \fi
+ \vfil\box2\vfil}\egroup}
+
+\def\@locfield{\begin{minipage}[b]{\locwidth}\fromlocation\end{minipage}}
+
+\newif\if@ref
+\def\@datefield{\@reffalse
+ \ifx\varyourref\@empty \else \@reftrue \fi
+ \ifx\varyourmail\@empty \else \@reftrue \fi
+ \ifx\varmyref\@empty \else \@reftrue \fi
+ \ifx\varcustomer\@empty \else \@reftrue \fi
+ \ifx\varinvoice\@empty \else \@reftrue \fi
+ \ifx\varrefitemi\@empty \else \@reftrue \fi
+ \ifx\varrefitemii\@empty \else \@reftrue \fi
+ \ifx\varrefitemiii\@empty \else \@reftrue \fi
+ \vskip -\parskip
+ \vskip \refvskip
+ \if@ref
+ \ifx\varyourref\@empty \else
+ \settowidth{\sc@temp}{\varyourref}
+ \setbox0\hbox{\scriptsize \sf \yourrefname}
+ \ifdim \sc@temp > \wd0 \sc@@temp\sc@temp \else \sc@@temp\wd0 \fi
+ \parbox[t]{\sc@@temp}{\noindent \box0\par \varyourref}\hfill
+ \fi
+ \ifx\varyourmail\@empty \else
+ \settowidth{\sc@temp}{\varyourmail}
+ \setbox0\hbox{\scriptsize \sf \yourmailname}
+ \ifdim \sc@temp > \wd0 \sc@@temp\sc@temp \else \sc@@temp\wd0 \fi
+ \parbox[t]{\sc@@temp}{\noindent \box0\par \varyourmail}\hfill
+ \fi
+ \ifx\varmyref\@empty \else
+ \settowidth{\sc@temp}{\varmyref}
+ \setbox0\hbox{\scriptsize \sf \myrefname}
+ \ifdim \sc@temp > \wd0 \sc@@temp\sc@temp \else \sc@@temp\wd0 \fi
+ \parbox[t]{\sc@@temp}{\noindent \box0\par \varmyref}\hfill
+ \fi
+ \ifx\varcustomer\@empty \else
+ \settowidth{\sc@temp}{\varcustomer}
+ \setbox0\hbox{\scriptsize \sf \customername}
+ \ifdim \sc@temp > \wd0 \sc@@temp\sc@temp \else \sc@@temp\wd0 \fi
+ \parbox[t]{\sc@@temp}{\noindent \box0\par \varcustomer}\hfill
+ \fi
+ \ifx\varinvoice\@empty \else
+ \settowidth{\sc@temp}{\varinvoice}
+ \setbox0\hbox{\scriptsize \sf \invoicename}
+ \ifdim \sc@temp > \wd0 \sc@@temp\sc@temp \else \sc@@temp\wd0 \fi
+ \parbox[t]{\sc@@temp}{\noindent \box0\par \varinvoice}\hfill
+ \fi
+ \ifx\varrefitemi\@empty \else
+ \settowidth{\sc@temp}{\varrefitemi}
+ \setbox0\hbox{\scriptsize \sf \varrefitemnamei}
+ \ifdim \sc@temp > \wd0 \sc@@temp\sc@temp \else \sc@@temp\wd0 \fi
+ \parbox[t]{\sc@@temp}{\noindent \box0\par \varrefitemi}\hfill
+ \fi
+ \ifx\varrefitemii\@empty \else
+ \settowidth{\sc@temp}{\varrefitemii}
+ \setbox0\hbox{\scriptsize \sf \varrefitemnameii}
+ \ifdim \sc@temp > \wd0 \sc@@temp\sc@temp \else \sc@@temp\wd0 \fi
+ \parbox[t]{\sc@@temp}{\noindent \box0\par \varrefitemii}\hfill
+ \fi
+ \ifx\varrefitemiii\@empty \else
+ \settowidth{\sc@temp}{\varrefitemiii}
+ \setbox0\hbox{\scriptsize \sf \varrefitemnameiii}
+ \ifdim \sc@temp > \wd0 \sc@@temp\sc@temp \else \sc@@temp\wd0 \fi
+ \parbox[t]{\sc@@temp}{\noindent \box0\par \varrefitemiii}\hfill
+ \fi
+ \ifx\@date\@empty \else
+ \settowidth{\sc@temp}{\@date}
+ \setbox0\hbox{\scriptsize \sf \datename}
+ \ifdim \sc@temp > \wd0 \sc@@temp\sc@temp \else \sc@@temp\wd0 \fi
+ \parbox[t]{\sc@@temp}{\noindent \box0\par \@date}
+ \fi
+ \par
+ \vspace{2.5\baselineskip}
+ \else
+ {\ifx\@date\@empty \else \raggedleft\fromplace\@date\par \fi}
+ \vspace{1.5\baselineskip}
+ \fi}
+
+\def\maketitle{\ifx\@title\@empty \else
+ {\centering \LARGE \sfb \@title\par} \vspace{1\baselineskip} \fi}
+
+\def\@subjfield{\if@subj%
+ \ifx\@subject\@empty\else\subjectname: \fi
+ \fi \@subject \par \vspace{1\baselineskip}}
+
+\def\opening#1{\thispagestyle{firstpage} \null \@foldmarks
+ \if@afield \@addrfield \hfill \@locfield \par \fi
+ \@datefield
+ \maketitle
+ \@subjfield
+ #1\par\nobreak}
+
+\long\def\closing#1{\par\nobreak\vspace{0.5\baselineskip}
+ \stopbreaks \noindent \sc@temp\textwidth \advance\sc@temp by
+ -\sigindent \hspace{\sigindent}%
+ \parbox{\sc@temp}{\raggedright \ignorespaces #1\\[6\medskipamount]
+ \ifx\@empty\fromsig \fromname \else \fromsig \fi\strut}\par
+ \vspace{1.5\baselineskip}}
+
+\def\ps{\par\startbreaks}
+
+\def\cc#1{\par\noindent \parbox[t]{\textwidth}{\@hangfrom{\ccname: }%
+ \ignorespaces #1\strut}\par}
+
+\def\encl#1{\par\noindent \parbox[t]{\textwidth}{\@hangfrom{\enclname: }%
+ \ignorespaces #1\strut}\par}
+
+\def\footnoterule{\kern-1\p@
+ \hrule width 0.4\columnwidth
+ \kern .6\p@}
+\long\def\@makefntext#1{\noindent \sc@temp\columnwidth%
+ \advance\sc@temp by -1.5em \hbox to 1em{\hss$^{\@thefnmark}$}\hskip .5em%
+ \parbox[t]{\sc@temp}{\parindent 0pt\parskip 0pt\hskip -.5em #1}}
+
+\def\theequation{\arabic{equation}}
+
+\setcounter{topnumber}{2}
+\def\topfraction{.7}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.3}
+\setcounter{totalnumber}{3}
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+\def\@firsthead{\parbox[b]{\textwidth}{\begin{center}
+ {\sc \ignorespaces \fromname}\\[-8pt] \rule{\textwidth}{.4pt}\\
+ \ignorespaces \fromaddress \end{center}}}
+\def\@firstfoot{}
+\def\@nexthead{\parbox[b]{\textwidth}{{%
+ \sc \ignorespaces \fromname}\\[8pt] \headtoname\ \ignorespaces \toname
+ \hfill \datename:\ \@date \hfill \pagename\
+ \thepage\\[-8pt] \rule{\textwidth}{.4pt}}}
+\def\@nextfoot{}
+
+\mark{{}{}}
+\def\ps@plain{\def\@evenhead{\rm\hfil-- \thepage\ --\hfil}%
+ \let\@oddhead\@evenhead%
+ \def\@evenfoot{}%
+ \def\@oddfoot{}}
+\def\ps@firstpage{%
+ \def\@evenhead{\@firsthead}%
+ \let\@oddhead\@evenhead%
+ \def\@evenfoot{\@firstfoot}%
+ \let\@oddfoot\@evenfoot}
+\def\ps@headings{%
+ \def\@evenhead{\@nexthead}%
+ \let\@oddhead\@evenhead%
+ \def\@evenfoot{\@nextfoot}%
+ \let\@oddfoot\@evenfoot}
+
+\@foldtrue
+\@afieldtrue
+\@subjfalse
+\ps@plain
+\pagenumbering{arabic}
+\onecolumn
+\raggedbottom
+\frenchspacing
+
diff --git a/obsolete/macros/latex209/contrib/script/script_s.sty b/obsolete/macros/latex209/contrib/script/script_s.sty
new file mode 100644
index 0000000000..e0a4347c06
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/script/script_s.sty
@@ -0,0 +1,602 @@
+% script_s.sty -- by Frank Neukam (01 Dec 1993)
+% based on Leslie Lamport's article style.
+
+\typeout{Document Style `script_s' v2.0 by Frank Neukam <01 Dec 1993>}
+
+\ifx\selectfont\undefined
+ \font\tensfb =cmssbx10 scaled \magstep0
+ \font\elvsfb =cmssbx10 scaled \magstephalf
+ \font\twlsfb =cmssbx10 scaled \magstep1
+ \font\frtnsfb =cmssbx10 scaled \magstep2
+ \font\svtnsfb =cmssbx10 scaled \magstep3
+ \font\twtysfb =cmssbx10 scaled \magstep4
+ \font\twfvsfb =cmssbx10 scaled \magstep5
+\else
+ \def\tensfb{\family{\sfdefault}\series{bx}\shape{n}\size{10}{12pt}\selectfont}
+ \def\elvsfb{\family{\sfdefault}\series{bx}\shape{n}\size{11}{13.6pt}\selectfont}
+ \def\twlsfb{\family{\sfdefault}\series{bx}\shape{n}\size{12}{14.5pt}\selectfont}
+ \def\frtnsfb{\family{\sfdefault}\series{bx}\shape{n}\size{14}{18pt}\selectfont}
+ \def\svtnsfb{\family{\sfdefault}\series{bx}\shape{n}\size{17}{22pt}\selectfont}
+ \def\twtysfb{\family{\sfdefault}\series{bx}\shape{n}\size{20}{25pt}\selectfont}
+ \def\twfvsfb{\family{\sfdefault}\series{bx}\shape{n}\size{25}{30pt}\selectfont}
+\fi
+
+\def\@ptsize{1}
+\@namedef{ds@10pt}{\def\@ptsize{0}}
+\@namedef{ds@11pt}{\def\@ptsize{1}}
+\@namedef{ds@12pt}{\def\@ptsize{2}}
+\newdimen\paperwidth
+\newdimen\paperheight
+\paperwidth 210mm
+\paperheight 297mm
+\@namedef{ds@DINA3}{\paperwidth=297mm \paperheight=420mm}
+\@namedef{ds@DINA4}{\paperwidth=210mm \paperheight=297mm}
+\@namedef{ds@DINA5}{\paperwidth=148.5mm \paperheight=210mm}
+\@namedef{ds@DINA6}{\paperwidth=105mm \paperheight=148.5mm}
+\@namedef{ds@DINA3l}{\paperwidth=420mm \paperheight=297mm}
+\@namedef{ds@DINA4l}{\paperwidth=297mm \paperheight=210mm}
+\@namedef{ds@DINA5l}{\paperwidth=210mm \paperheight=148.5mm}
+\@namedef{ds@DINA6l}{\paperwidth=148.5mm \paperheight=105mm}
+\def\ds@draft{\overfullrule 5pt}
+\def\ds@twoside{\@twosidetrue \@mparswitchtrue}
+\@options
+\input script1\@ptsize.sty\relax
+\normalsize
+
+\newif\if@hincl
+\def\headincludeon{\@hincltrue}
+\def\headincludeoff{\@hinclfalse}
+\newif\if@hsl
+\def\headseplineon{\@hsltrue \@hincltrue}
+\def\headseplineoff{\@hslfalse \@hinclfalse}
+\headseplineoff
+\newif\if@fincl
+\def\footincludeon{\@fincltrue}
+\def\footincludeoff{\@finclfalse}
+\newif\if@fsl
+\def\footseplineon{\@fsltrue \@fincltrue}
+\def\footseplineoff{\@fslfalse \@finclfalse}
+\footseplineoff
+\newdimen\sc@bcor
+\newcount\sc@div
+\newdimen\sc@hblk
+\newdimen\sc@vblk
+\newdimen\sc@temp
+\def\typearea{\@ifnextchar [{\@typearea}{\@typearea[0mm]}}
+\def\@typearea[#1]#2{
+ \normalsize
+ \sc@bcor #1
+ \sc@div=#2
+ \sc@hblk \paperwidth
+ \advance \sc@hblk by -\sc@bcor
+ \divide\sc@hblk by \sc@div
+ \oddsidemargin -1in
+ \evensidemargin -1in
+ \if@twoside
+ \advance\oddsidemargin by \sc@hblk
+ \advance\oddsidemargin by \sc@bcor
+ \advance\evensidemargin by 2\sc@hblk
+ \else
+ \advance\oddsidemargin by 1.5\sc@hblk
+ \advance\oddsidemargin by \sc@bcor
+ \evensidemargin\oddsidemargin
+ \fi
+ \textwidth \paperwidth
+ \advance\textwidth by -\sc@bcor
+ \advance\textwidth by -3\sc@hblk
+ \headheight 15pt
+ \headsep 1.5\baselineskip
+ \footskip 3.5\baselineskip
+ \sc@vblk \paperheight
+ \divide\sc@vblk by \sc@div
+ \sc@temp \paperheight
+ \advance\sc@temp by -3\sc@vblk
+ \if@hincl
+ \advance\sc@temp by -\headheight
+ \advance\sc@temp by -\headsep
+ \fi
+ \if@fincl
+ \advance\sc@temp by -\footskip
+ \fi
+ \textheight \topskip
+ \@whiledim\textheight<\sc@temp
+ \do{\advance\textheight by \baselineskip}
+ \topmargin \sc@vblk
+ \advance\topmargin by -1in
+ \if@hincl \else
+ \advance\topmargin by -\headheight
+ \advance\topmargin by -\headsep
+ \fi
+ \if@twoside
+ \marginparwidth 1.5\sc@hblk
+ \else
+ \marginparwidth \sc@hblk
+ \fi
+ \marginparsep 1cc
+ \marginparpush 0.45\baselineskip}
+\def\areaset{\@ifnextchar [{\@areaset}{\@areaset[0mm]}}
+\def\@areaset[#1]#2#3{
+ \normalsize
+ \sc@bcor #1
+ \textwidth #2
+ \textheight #3
+ \sc@hblk \paperwidth
+ \advance\sc@hblk by -\sc@bcor
+ \advance\sc@hblk by -\textwidth
+ \divide\sc@hblk by 3
+ \oddsidemargin -1in
+ \evensidemargin -1in
+ \if@twoside
+ \advance\oddsidemargin by \sc@hblk
+ \advance\oddsidemargin by \sc@bcor
+ \advance\evensidemargin by 2\sc@hblk
+ \else
+ \advance\oddsidemargin by 1.5\sc@hblk
+ \advance\oddsidemargin by \sc@bcor
+ \evensidemargin\oddsidemargin
+ \fi
+ \headheight 15pt
+ \headsep 1.5\baselineskip
+ \footskip 3.5\baselineskip
+ \sc@vblk \paperheight
+ \advance\sc@vblk by -\textheight
+ \divide\sc@vblk by 3
+ \if@hincl
+ \advance\textheight by -\headheight
+ \advance\textheight by -\headsep
+ \fi
+ \if@fincl
+ \advance\textheight by -\footskip
+ \fi
+ \topmargin \sc@vblk
+ \advance\topmargin by -1in
+ \if@hincl \else
+ \advance\topmargin by -\headheight
+ \advance\topmargin by -\headsep
+ \fi
+ \if@twoside
+ \marginparwidth 1.5\sc@hblk
+ \else
+ \marginparwidth \sc@hblk
+ \fi
+ \marginparsep 1cc
+ \marginparpush 0.45\baselineskip}
+\ifcase \@ptsize\relax \typearea{8} \or \typearea{10} \or \typearea{12} \fi
+
+\parskip 0pt plus 1pt
+\parindent 1em
+\partopsep 3pt plus 2pt minus 2pt
+\footnotesep 0.6\baselineskip
+\skip\footins 0.75\baselineskip plus 4pt minus 2pt
+\skip\@mpfootins = \skip\footins
+\columnsep 1cc
+\columnseprule 0pt
+\floatsep 1\baselineskip plus 2pt minus 2pt
+\textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 1\baselineskip plus 2pt minus 2pt
+\@maxsep 20pt
+\dblfloatsep 1\baselineskip plus 2pt minus 2pt
+\dbltextfloatsep 20pt plus 2pt minus 4pt
+\@dblmaxsep 20pt
+\@fptop 0pt plus 1fil
+\@fpsep 0.7\baselineskip plus 2fil
+\@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil
+\@dblfpsep 0.7\baselineskip plus 2fil
+\@dblfpbot 0pt plus 1fil
+
+\arraycolsep 5pt
+\tabcolsep 6pt
+\arrayrulewidth 0.4pt
+\doublerulesep 2pt
+\fboxsep 3pt
+\fboxrule 0.4pt
+\tabbingsep \labelsep
+
+\labelsep .5em
+\leftmargini 2.5em
+\leftmarginii 2.2em
+\leftmarginiii 1.87em
+\leftmarginiv 1.7em
+\leftmarginv 1em
+\leftmarginvi 1em
+\leftmargin\leftmargini
+\labelwidth\leftmargini
+\advance\labelwidth-\labelsep
+\def\@listI{\leftmargin\leftmargini
+ \topsep 0.8em plus 0.2em minus 0.4em
+ \parsep 0.4em plus 2pt minus 1pt
+ \itemsep \parsep}
+\let\@listi\@listI
+\@listi
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 0.4em plus 2pt minus 1pt
+ \parsep 0.2em plus 1pt minus 1pt
+ \itemsep \parsep}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 0.2em plus 1pt minus 1pt
+ \parsep \z@
+ \partopsep 1pt plus 0pt minus 1pt
+ \itemsep \topsep}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
+\@lowpenalty 51
+\@medpenalty 151
+\@highpenalty 301
+\@beginparpenalty -\@lowpenalty
+\@endparpenalty -\@lowpenalty
+\@itempenalty -\@lowpenalty
+
+\def\theenumi{\arabic{enumi}}
+\def\theenumii{\alph{enumii}}
+\def\theenumiii{\roman{enumiii}}
+\def\theenumiv{\Alph{enumiv}}
+\def\labelenumi{\theenumi.}
+\def\labelenumii{\theenumii)}
+\def\labelenumiii{\theenumiii.}
+\def\labelenumiv{\theenumiv.}
+\def\p@enumii{\theenumi}
+\def\p@enumiii{\theenumi\theenumii)}
+\def\p@enumiv{\p@enumiii\theenumiii}
+\def\labelitemi{$\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\triangleright$}
+\def\labelitemiv{$\cdot$}
+
+\newcounter{part}
+\newcounter {section}
+\newcounter {subsection}[section]
+\newcounter {subsubsection}[subsection]
+\newcounter {paragraph}[subsubsection]
+\newcounter {subparagraph}[paragraph]
+
+\def\thepart {\Roman{part}}
+\def\thesection {\arabic{section}}
+\def\thesubsection {\thesection.\arabic{subsection}}
+\def\thesubsubsection {\thesubsection .\arabic{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+\def\thesubparagraph {\theparagraph.\arabic{subparagraph}}
+
+\setcounter{secnumdepth}{3}
+\setcounter{tocdepth}{3}
+
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+
+\def\quotation{\list{}{\listparindent 1em
+ \itemindent\listparindent
+ \rightmargin\leftmargin\parsep 0pt plus 1pt}\item[]}
+\let\endquotation=\endlist
+
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+\def\descriptionlabel#1{\hspace\labelsep \descfont #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+\let\enddescription\endlist
+\newdimen\descriptionmargin
+\descriptionmargin=3em
+
+\def\labelinglabel#1{#1\hfil\sc@septext}
+\def\labeling{\@ifnextchar [{\@labeling}{\@labeling[]}}
+\def\@labeling[#1]#2{\def\sc@septext{#1}
+ \list{}{\settowidth{\labelwidth}{#2#1}
+ \leftmargin\labelwidth \advance\leftmargin by \labelsep
+ \let\makelabel\labelinglabel}}
+\let\endlabeling\endlist
+
+\def\marginline#1{\marginpar%
+ {\if@twoside \ifodd\c@page \raggedright \else \raggedleft \fi
+ \else \raggedright \fi #1}}
+
+\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{empty}\c@page\z@}
+\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi}
+
+\def\@titlehead{}
+\long\def\titlehead#1{\def\@titlehead{#1}}
+\def\@subject{}
+\def\subject#1{\def\@subject{#1}}
+\def\maketitle{\par \begingroup
+ \def\thefootnote{\fnsymbol{footnote}}
+ \def\@makefnmark{\hbox to 0pt{$^{\@thefnmark}$\hss}}
+ \if@twocolumn
+ \twocolumn[\@maketitle]
+ \else
+ \newpage \global\@topnum\z@ \@maketitle
+ \fi
+ \thispagestyle{plain}\@thanks \endgroup
+ \setcounter{footnote}{0}
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@titlehead{}\gdef\@subject{}%
+ \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\let\thanks\relax}
+\def\@maketitle{\newpage
+ \ifx\@titlehead\@empty \else
+ \noindent\begin{minipage}[t]{\textwidth}
+ \@titlehead
+ \end{minipage}\par\null\vskip 1em
+ \fi
+ \null \vskip 2em
+ \ifx\@subject\@empty \else
+ {\centering \Large \@subject \par}
+ \vskip 1.5em
+ \fi
+ \begin{center}
+ {\huge \sectfont \@title \par} \vskip 1.5em {\Large \lineskip .5em
+ \begin{tabular}[t]{c}\@author
+ \end{tabular}\par}
+ \vskip 1em {\Large \@date}
+ \end{center}
+ \par \vskip 5em}
+
+\newif\if@abstrt
+\def\abstracton{\@abstrttrue}
+\def\abstractoff{\@abstrtfalse}
+\def\abstractname{Abstract}
+\def\abstract{\if@abstrt \if@twocolumn \section*{\abstractname} \else
+ \begin{center} {\sectfont \abstractname \vspace{-.5em}} \end{center}\fi
+ \quotation \fi}
+\def\endabstract{\if@twocolumn \else \endquotation \fi}
+
+\def\partname{Part}
+\def\part{\par \addvspace{4ex} \@afterindentfalse \secdef\@part\@spart}
+\def\@part[#1]#2{\ifnum \c@secnumdepth >\m@ne \refstepcounter{part}
+ \addcontentsline{toc}{part}{\thepart\hspace{1em}#1}\else
+ \addcontentsline{toc}{part}{#1}\fi \markboth{}{}
+ {\parindent 0pt \raggedright \ifnum \c@secnumdepth >\m@ne \LARGE \sectfont
+ \partname{} \thepart \par\nobreak \fi \huge \sectfont #2\par}\@endpart}
+\def\@spart#1{{\parindent 0pt \raggedright \huge \sectfont #1\par}\@endpart}
+\def\@endpart{\nobreak \vskip 3ex \@afterheading}
+
+\def\section{\@afterindentfalse \secdef\@section\@ssection}
+\def\@section[#1]#2{\ifnum \c@secnumdepth >\z@
+ \refstepcounter{section}
+ \addcontentsline{toc}{section}{\protect \numberline{\thesection.}#1}
+ \else
+ \addcontentsline{toc}{section}{#1}\fi
+ \sectionmark{#1}
+ \@makesectionhead{#2} \@afterheading}
+\def\@ssection#1{\@makessectionhead{#1} \@afterheading}
+\def\@makesectionhead#1{\vskip 3.5ex plus 1ex minus .2ex {\Large \sectfont
+ \@hangfrom{\ifnum \c@secnumdepth >\z@ \thesection.\hskip .7em\fi}%
+ {\raggedright \interlinepenalty \@M #1\par}} \nobreak \vskip 2.3ex
+ plus .2ex}
+\def\@makessectionhead#1{\vskip 3.5ex plus 1ex minus .2ex {\Large \sectfont
+ \@hangfrom{}{\raggedright \interlinepenalty \@M #1\par}} \nobreak
+ \vskip 2.3ex plus .2ex}
+
+\def\addsec{\secdef\@addsec\@saddsec}
+\def\@addsec[#1]#2{\addcontentsline{toc}{section}{#1}
+ \if@twoside \markboth{#1}{}\else \markright{#1}\fi \section*{#2}}
+\def\@saddsec#1{\section*{#1}\markboth{}{}}
+
+\def\appendix{\par
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \def\thesection{\Alph{section}}}
+
+\def\subsection{\@startsection{subsection}{2}{\z@}{-3.25ex plus -1ex minus
+ -.2ex}{1.5ex plus .2ex}{\large \sectfont}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-3.25ex plus -1ex
+ minus -.2ex}{1.5ex plus .2ex}{\sectfont}}
+\def\paragraph{\@startsection{paragraph}{4}{\z@}{3.25ex plus 1ex minus
+ .2ex}{-1em}{\sectfont}}
+\def\subparagraph{\@startsection{subparagraph}{4}{\parindent}{3.25ex plus
+ 1ex minus .2ex}{-1em}{\sectfont}}
+
+\def\minisec#1{\@afterindentfalse \vskip 1.5ex {\parindent 0pt \raggedright
+ \sectfont #1\par\nobreak}\@afterheading}
+
+\def\contentsname{Contents}
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\def\tableofcontents{\section*{\contentsname
+ \@mkboth{\contentsname}{\contentsname}}
+ \@starttoc{toc}}
+\def\l@part#1#2{\addpenalty{\@secpenalty}
+ \addvspace{2.25em plus 1pt} \begingroup
+ \@tempdima 3em \parindent \z@ \rightskip \@pnumwidth \parfillskip
+ -\@pnumwidth
+ {\sectfont \leavevmode #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
+ \nobreak \endgroup}
+\def\l@section#1#2{\addpenalty{\@secpenalty}
+ \addvspace{1.0em plus 1pt} \@tempdima 1.5em \begingroup
+ \parindent \z@ \rightskip \@pnumwidth \parfillskip -\@pnumwidth
+ \sectfont \leavevmode \advance\leftskip\@tempdima \hskip -\leftskip%
+ #1\nobreak \hfil\nobreak\hbox to\@pnumwidth{\hss #2}\par
+ \endgroup}
+\def\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}}
+\def\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}}
+\def\l@paragraph{\@dottedtocline{4}{7.0em}{4.1em}}
+\def\l@subparagraph{\@dottedtocline{5}{10em}{5em}}
+
+\def\listfigurename{List of Figures}
+\def\listoffigures{\section*{\listfigurename\@mkboth
+ {\listfigurename}{\listfigurename}} \@starttoc{lof}}
+\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
+
+\def\listtablename{List of Tables}
+\def\listoftables{\section*{\listtablename\@mkboth
+ {\listtablename}{\listtablename}} \@starttoc{lot}}
+\let\l@table\l@figure
+
+\def\refname{References}
+\def\thebibliography#1{\section*{\refname \@mkboth{\refname}{\refname}}
+ \list{[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip 0.11em plus 0.33em minus 0.07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+\let\endthebibliography=\endlist
+
+\def\indexname{Index}
+\newif\if@restonecol
+\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+ \columnseprule \z@
+ \columnsep 35pt\twocolumn[\section*{\indexname}]
+ \@mkboth{\indexname}{\indexname}
+ \thispagestyle{plain}\parindent\z@
+ \parskip\z@ plus 0.3pt\relax\let\item\@idxitem}
+\def\@idxitem{\par\hangindent 40pt}
+\def\subitem{\par\hangindent 40pt \hspace*{20pt}}
+\def\subsubitem{\par\hangindent 40pt \hspace*{30pt}}
+\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
+\def\indexspace{\par \vskip 10pt plus 5pt minus 3pt\relax}
+
+\def\footnoterule{\kern-3\p@
+ \hrule width 0.4\columnwidth
+ \kern 2.6\p@}
+\long\def\@makefntext#1{\noindent \sc@temp\columnwidth%
+ \advance\sc@temp by -1.5em \hbox to 1em{\hss$^{\@thefnmark}$}\hskip .5em%
+ \parbox[t]{\sc@temp}{\parindent 0pt\parskip 0pt\hskip -.5em #1}}
+
+\def\theequation{\arabic{equation}}
+
+\setcounter{topnumber}{2}
+\def\topfraction{.7}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.3}
+\setcounter{totalnumber}{3}
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+\long\def\@makecaption#1#2{\vskip 10pt
+ \setbox\@tempboxa\hbox{\captfont #1: #2}
+ \ifdim \wd\@tempboxa >\hsize \@hangfrom{\captfont #1: }%
+ {\captfont #2\par}
+ \else \hbox to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi}
+
+\def\figurename{Figure}
+\newcounter{figure}
+\def\thefigure{\@arabic\c@figure}
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{\figurename{} \thefigure}
+\def\figure{\@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+
+\def\tablename{Table}
+\newcounter{table}
+\def\thetable{\@arabic\c@table}
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{\tablename{} \thetable}
+\def\table{\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+
+\mark{{}{}}
+\if@twoside
+ \def\ps@plain{\let\@mkboth\@gobbletwo
+ \def\@evenhead{}%
+ \def\@oddhead{}%
+ \def\@evenfoot{\vbox{\hsize=\textwidth
+ \if@fsl \hrule \vskip 3pt \fi
+ \hbox to \textwidth{\pnumfont\thepage\hfil}}}%
+ \def\@oddfoot{\vbox{\hsize=\textwidth
+ \if@fsl \hrule \vskip 3pt \fi
+ \hbox to \textwidth{\pnumfont\hfil\thepage}}}}
+ \def\ps@headings{\let\@mkboth\markboth
+ \def\@evenhead{\vbox{\hsize=\textwidth
+ \hbox to \textwidth{\headfont\leftmark\hfil}
+ \if@hsl \vskip 1.5pt \hrule \fi}}%
+ \def\@oddhead{\vbox{\hsize=\textwidth
+ \hbox to \textwidth{\headfont\hfil\rightmark}
+ \if@hsl \vskip 1.5pt \hrule \fi}}%
+ \def\@evenfoot{\vbox{\hsize=\textwidth
+ \if@fsl \hrule \vskip 3pt \fi
+ \hbox to \textwidth{\pnumfont\thepage\hfil}}}%
+ \def\@oddfoot{\vbox{\hsize=\textwidth
+ \if@fsl \hrule \vskip 3pt \fi
+ \hbox to \textwidth{\pnumfont\hfil\thepage}}}%
+ \def\sectionmark##1{\markboth {\ifnum \c@secnumdepth >\z@
+ \thesection. \ \fi ##1}{}}%
+ \def\subsectionmark##1{\markright {\ifnum \c@secnumdepth >\@ne
+ \thesubsection\ \ \fi ##1}}}
+ \def\ps@myheadings{\let\@mkboth\@gobbletwo
+ \def\@evenhead{\vbox{\hsize=\textwidth
+ \hbox to \textwidth{\headfont\leftmark\hfil}
+ \if@hsl \vskip 1.5pt \hrule \fi}}%
+ \def\@oddhead{\vbox{\hsize=\textwidth
+ \hbox to \textwidth{\headfont\hfil\rightmark}
+ \if@hsl \vskip 1.5pt \hrule \fi}}%
+ \def\@evenfoot{\vbox{\hsize=\textwidth
+ \if@fsl \hrule \vskip 3pt \fi
+ \hbox to \textwidth{\pnumfont\thepage\hfil}}}%
+ \def\@oddfoot{\vbox{\hsize=\textwidth
+ \if@fsl \hrule \vskip 3pt \fi
+ \hbox to \textwidth{\pnumfont\hfil\thepage}}}%
+ \def\sectionmark##1{}%
+ \def\subsectionmark##1{}}
+\else
+ \def\ps@plain{\let\@mkboth\@gobbletwo
+ \def\@evenhead{}%
+ \def\@oddhead{}%
+ \def\@evenfoot{}%
+ \def\@oddfoot{\vbox{\hsize=\textwidth
+ \if@fsl \hrule \vskip 3pt \fi
+ \hbox to \textwidth{\pnumfont\hfil\thepage\hfil}}}}
+ \def\ps@headings{\let\@mkboth\markboth
+ \def\@evenhead{}%
+ \def\@oddhead{\vbox{\hsize=\textwidth
+ \hbox to \textwidth{\headfont\hfil\rightmark\hfil}
+ \if@hsl \vskip 1.5pt \hrule \fi}}%
+ \def\@evenfoot{}%
+ \def\@oddfoot{\vbox{\hsize=\textwidth
+ \if@fsl \hrule \vskip 3pt \fi
+ \hbox to \textwidth{\pnumfont\hfil\thepage\hfil}}}%
+ \def\sectionmark##1{\markright {\ifnum \c@secnumdepth >\z@
+ \thesection. \ \fi ##1}}%
+ \def\subsectionmark##1{}}
+ \def\ps@myheadings{\let\@mkboth\@gobbletwo
+ \def\@evenhead{}%
+ \def\@oddhead{\vbox{\hsize=\textwidth
+ \hbox to \textwidth{\headfont\hfil\rightmark\hfil}
+ \if@hsl \vskip 1.5pt \hrule \fi}}%
+ \def\@evenfoot{}%
+ \def\@oddfoot{\vbox{\hsize=\textwidth
+ \if@fsl \hrule \vskip 3pt \fi
+ \hbox to \textwidth{\pnumfont\hfil\thepage\hfil}}}%
+ \def\sectionmark##1{}%
+ \def\subsectionmark##1{}}
+\fi
+
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+
+\@abstrttrue
+\ps@plain
+\pagenumbering{arabic}
+\onecolumn
+\if@twoside \else \raggedbottom \fi
+\frenchspacing
+\def\captfont{\rm}
+\def\descfont{\sfb}
+\def\headfont{\it}
+\def\pnumfont{\rm}
+\def\sectfont{\sfb}
+
diff --git a/obsolete/macros/latex209/contrib/script/sctitle.sty b/obsolete/macros/latex209/contrib/script/sctitle.sty
new file mode 100644
index 0000000000..a6140e017a
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/script/sctitle.sty
@@ -0,0 +1,88 @@
+% sctitle.sty -- by Frank Neukam (01 Dec 1993)
+
+\ifx\sectfont\undefined
+ \def\@sectfont{\bf}
+\else
+ \let\@sectfont=\sectfont
+\fi
+
+\def\next@tpage{\newpage\thispagestyle{empty}\null}
+\def\@extratitle{}
+\long\def\extratitle#1{\def\@extratitle{#1}}
+\def\@titlehead{}
+\long\def\titlehead#1{\def\@titlehead{#1}}
+\def\@subject{}
+\def\subject#1{\def\@subject{#1}}
+\def\@publishers{}
+\def\publishers#1{\def\@publishers{#1}}
+\def\@uppertitleback{}
+\long\def\uppertitleback#1{\def\@uppertitleback{#1}}
+\def\@lowertitleback{}
+\long\def\lowertitleback#1{\def\@lowertitleback{#1}}
+\def\@dedication{}
+\def\dedication#1{\def\@dedication{#1}}
+\def\maketitle{\@ifnextchar [{\@maketitle}{\@maketitle[1]}}
+\def\@maketitle[#1]{\bgroup \@restonecolfalse
+ \if@twocolumn \@restonecoltrue\onecolumn \else \newpage \fi
+ \thispagestyle{empty}\null
+ \setcounter{page}{#1}
+ \let\footnotesize\small
+ \let\footnoterule\relax
+ \ifx\@extratitle\@empty \else
+ \noindent\@extratitle \next@tpage \if@twoside \next@tpage \fi
+ \fi
+ \ifx\@titlehead\@empty \else
+ \noindent\begin{minipage}[t]{\textwidth}
+ \@titlehead
+ \end{minipage}\par
+ \fi
+ \null \vfill
+ \ifx\@subject\@empty \else
+ {\centering \Large \@subject \par}
+ \vskip 3em
+ \fi
+ {\centering \huge \@sectfont \@title \par}
+ \vskip 3em
+ {\centering \Large \lineskip 0.75em
+ \begin{tabular}[t]{c}\@author
+ \end{tabular}\par}
+ \vskip 1.5em
+ {\centering \Large \@date \par}
+ \vskip 0pt plus 3fill
+ {\centering \Large \@publishers \par}
+ \vskip 3em
+ \par \@thanks
+ \if@twoside \next@tpage
+ \noindent\begin{minipage}[t]{\textwidth}
+ \@uppertitleback
+ \end{minipage}\par
+ \vfill
+ \noindent\begin{minipage}[b]{\textwidth}
+ \@lowertitleback
+ \end{minipage}
+ \fi
+ \ifx\@dedication\@empty \else
+ \next@tpage \vfill
+ {\centering \Large \@dedication \par}
+ \vskip 0pt plus 3fill
+ \if@twoside \next@tpage \fi
+ \fi
+ \if@restonecol\twocolumn \else \newpage \fi
+ \egroup
+ \setcounter{footnote}{0}
+ \let\thanks\relax \gdef\@extratitle{}\gdef\@titlehead{}\gdef\@subject{}%
+ \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\gdef\@publishers{}%
+ \gdef\@uppertitleback{}\gdef\@lowertitleback{}\gdef\@dedication{}%
+ \let\maketitle\relax \let\@maketitle\relax}
+
+\newif\if@abstrt
+\def\abstracton{\@abstrttrue}
+\def\abstractoff{\@abstrtfalse}
+\def\abstractname{Abstract}
+\def\abstract{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{empty} \null \vfil
+ \if@abstrt \begin{center} {\@sectfont \abstractname} \end{center}\fi}
+\def\endabstract{\par \vfil \null
+ \if@twoside \next@tpage \fi
+ \if@restonecol\twocolumn \else \newpage \fi}
+
diff --git a/obsolete/macros/latex209/contrib/script/typearea.sty b/obsolete/macros/latex209/contrib/script/typearea.sty
new file mode 100644
index 0000000000..46eb39f9ba
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/script/typearea.sty
@@ -0,0 +1,120 @@
+% typearea.sty -- by Frank Neukam (01 Dec 1993)
+
+\newif\if@hincl
+\def\headincludeon{\@hincltrue}
+\def\headincludeoff{\@hinclfalse}
+\@hinclfalse
+\newif\if@fincl
+\def\footincludeon{\@fincltrue}
+\def\footincludeoff{\@finclfalse}
+\@finclfalse
+\newdimen\paperwidth
+\newdimen\paperheight
+\newdimen\ta@bcor
+\newcount\ta@div
+\newdimen\ta@hblk
+\newdimen\ta@vblk
+\newdimen\ta@temp
+\paperwidth 210mm
+\paperheight 297mm
+\def\typearea{\@ifnextchar [{\@typearea}{\@typearea[0mm]}}
+\def\@typearea[#1]#2{
+ \normalsize
+ \ta@bcor #1
+ \ta@div=#2
+ \ta@hblk \paperwidth
+ \advance \ta@hblk by -\ta@bcor
+ \divide\ta@hblk by \ta@div
+ \oddsidemargin -1in
+ \evensidemargin -1in
+ \if@twoside
+ \advance\oddsidemargin by \ta@hblk
+ \advance\oddsidemargin by \ta@bcor
+ \advance\evensidemargin by 2\ta@hblk
+ \else
+ \advance\oddsidemargin by 1.5\ta@hblk
+ \advance\oddsidemargin by \ta@bcor
+ \evensidemargin\oddsidemargin
+ \fi
+ \textwidth \paperwidth
+ \advance\textwidth by -\ta@bcor
+ \advance\textwidth by -3\ta@hblk
+ \headheight 15pt
+ \headsep 1.5\baselineskip
+ \footskip 3.5\baselineskip
+ \ta@vblk \paperheight
+ \divide\ta@vblk by \ta@div
+ \ta@temp \paperheight
+ \advance\ta@temp by -3\ta@vblk
+ \if@hincl
+ \advance\ta@temp by -\headheight
+ \advance\ta@temp by -\headsep
+ \fi
+ \if@fincl
+ \advance\ta@temp by -\footskip
+ \fi
+ \textheight \topskip
+ \@whiledim\textheight<\ta@temp
+ \do{\advance\textheight by \baselineskip}
+ \topmargin \ta@vblk
+ \advance\topmargin by -1in
+ \if@hincl \else
+ \advance\topmargin by -\headheight
+ \advance\topmargin by -\headsep
+ \fi
+ \if@twoside
+ \marginparwidth 1.5\ta@hblk
+ \else
+ \marginparwidth \ta@hblk
+ \fi
+ \marginparsep 1cc
+ \marginparpush 0.45\baselineskip}
+\def\areaset{\@ifnextchar [{\@areaset}{\@areaset[0mm]}}
+\def\@areaset[#1]#2#3{
+ \normalsize
+ \ta@bcor #1
+ \textwidth #2
+ \textheight #3
+ \ta@hblk \paperwidth
+ \advance\ta@hblk by -\ta@bcor
+ \advance\ta@hblk by -\textwidth
+ \divide\ta@hblk by 3
+ \oddsidemargin -1in
+ \evensidemargin -1in
+ \if@twoside
+ \advance\oddsidemargin by \ta@hblk
+ \advance\oddsidemargin by \ta@bcor
+ \advance\evensidemargin by 2\ta@hblk
+ \else
+ \advance\oddsidemargin by 1.5\ta@hblk
+ \advance\oddsidemargin by \ta@bcor
+ \evensidemargin\oddsidemargin
+ \fi
+ \headheight 15pt
+ \headsep 1.5\baselineskip
+ \footskip 3.5\baselineskip
+ \ta@vblk \paperheight
+ \advance\ta@vblk by -\textheight
+ \divide\ta@vblk by 3
+ \if@hincl
+ \advance\textheight by -\headheight
+ \advance\textheight by -\headsep
+ \fi
+ \if@fincl
+ \advance\textheight by -\footskip
+ \fi
+ \topmargin \ta@vblk
+ \advance\topmargin by -1in
+ \if@hincl \else
+ \advance\topmargin by -\headheight
+ \advance\topmargin by -\headsep
+ \fi
+ \if@twoside
+ \marginparwidth 1.5\ta@hblk
+ \else
+ \marginparwidth \ta@hblk
+ \fi
+ \marginparsep 1cc
+ \marginparpush 0.45\baselineskip}
+\ifcase \@ptsize\relax \typearea{8} \or \typearea{10} \or \typearea{12} \fi
+
diff --git a/obsolete/macros/latex209/contrib/siam/fixup.sty b/obsolete/macros/latex209/contrib/siam/fixup.sty
new file mode 100644
index 0000000000..da8fe4e450
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/siam/fixup.sty
@@ -0,0 +1,167 @@
+% FIXUP DOCUMENT STYLE OPTION
+% for LaTeX Version 2.09 <25 Jan 1988>
+% by John Hobby
+%
+% If the fleqn style option is also used, it should precede this one.
+
+
+\hyphenation{bi-dif-fer-en-tial buzz-word data-path equi-vari-ant gauss-ian
+ hexa-dec-i-mal le-gendre mass-a-chu-setts non-smooth
+ qua-si-smooth stand-alone time-stamp wave-guide white-space}
+
+
+
+
+% Fix Plain's \bigl, \Bigl, etc. macros so that they try to scale with
+% LaTeX size changes. This uses the fact that \@setsize sets \ht\strutbox
+% to be 70% of the normal unstretched baselineskip.
+
+\def\big#1{{\hbox{$\left#1\vcenter to1.428\ht\strutbox{}\right.\n@space$}}}
+\def\Big#1{{\hbox{$\left#1\vcenter to2.142\ht\strutbox{}\right.\n@space$}}}
+\def\bigg#1{{\hbox{$\left#1\vcenter to2.857\ht\strutbox{}\right.\n@space$}}}
+\def\Bigg#1{{\hbox{$\left#1\vcenter to3.571\ht\strutbox{}\right.\n@space$}}}
+
+
+
+
+
+% Fix \sbox and \mbox so that they do not take the box contents as a parameter.
+% This makes environments that depend on catcode changes work inside
+
+\def\sbox#1{\setbox#1\hbox}
+\def\mbox{\leavevmode\hbox}
+
+
+
+
+
+
+% Apply \addpenalty's trick for not confusing \addvspace so that the \write
+% from \addtocontents or \addcontentsline will not mess up vertical spacing
+
+\def\addvstuff#1{%
+ \ifvmode\ifdim\lastskip=\z@ #1%
+ \else \@tempskipb\lastskip
+ \vskip -\lastskip #1\vskip\@tempskipb
+ \fi
+ \else #1\fi}
+
+\def\addpenalty#1{\ifvmode
+ \if@minipage\else\if@nobreak\else
+ \addvstuff{\penalty#1}%
+ \fi\fi
+ \else\@noitemerr\fi}
+
+\long\def\addtocontents#1#2{%
+ \if@filesw \begingroup
+ \let\label\@gobble \let\index\@gobble
+ \def\protect##1{\string\string\string##1\string\space\space}%
+ \edef\@tempa{\write \@auxout {\string\@writefile{#1}{#2}}}%
+ \addvstuff{\@tempa \if@nobreak \ifvmode\nobreak\fi\fi}%
+ \endgroup\fi}
+
+\def\addcontentsline#1#2#3{%
+ \if@filesw \begingroup
+ \let\label\@gobble \let\index\@gobble
+ \def\protect##1{\string\string\string##1\string\space\space}%
+ \@temptokena{\thepage}%
+ \edef\@tempa{\write \@auxout{\string\@writefile{#1}%
+ {\protect\contentsline{#2}{#3}{\the\@temptokena}}}}%
+ \addvstuff{\@tempa \if@nobreak \ifvmode\nobreak\fi\fi}%
+ \endgroup\fi}
+
+
+
+
+% Make floats use the trick from the minipage environment to avoid extraneous
+% space at the top. e.g., "\begin{figure} \begin{center}..."
+
+\def\@xfloat#1[#2]{\ifhmode \@bsphack\@floatpenalty -\@Mii\else
+ \@floatpenalty-\@Miii\fi\def\@captype{#1}\ifinner
+ \@parmoderr\@floatpenalty\z@
+ \else\@next\@currbox\@freelist{\@tempcnta\csname ftype@#1\endcsname
+ \multiply\@tempcnta\@xxxii\advance\@tempcnta\sixt@@n
+ \@tfor \@tempa :=#2\do
+ {\if\@tempa h\advance\@tempcnta \@ne\fi
+ \if\@tempa t\advance\@tempcnta \tw@\fi
+ \if\@tempa b\advance\@tempcnta 4\relax\fi
+ \if\@tempa p\advance\@tempcnta 8\relax\fi
+ }\global\count\@currbox\@tempcnta}\@fltovf\fi
+ \global\setbox\@currbox\vbox\bgroup
+ \hsize\columnwidth \@parboxrestore
+ \@minipagetrue
+ \everypar{\global\@minipagefalse\everypar{}}}
+
+
+
+
+% We now redefine the eqnarray environment to correct the space around
+% the operator. Since the fleqn document style option also redefines
+% this environment, we carefully check the previous definition before
+% making any changes. Any changes to the definition in LaTeX itself
+% or in the fleqn document style option will cause the `Warning: unable...'
+% message to appear. If this happens it will be necessary to update the
+% definitions of \@tempa and \@tempb below and incorperate the changes into
+% the new definitions of \eqnarray.
+
+
+% This is the current definition of \eqnarray for the fleqn document style
+% option:
+
+\def\@tempa{\stepcounter{equation}\let\@currentlabel=\theequation
+\global\@eqnswtrue
+\global\@eqcnt\z@\tabskip\mathindent\let\\=\@eqncr
+\abovedisplayskip\topsep\ifvmode\advance\abovedisplayskip\partopsep\fi
+\belowdisplayskip\abovedisplayskip
+\belowdisplayshortskip\abovedisplayskip
+\abovedisplayshortskip\abovedisplayskip
+$$\halign to
+\linewidth\bgroup\@eqnsel\hskip\@centering$\displaystyle\tabskip\z@
+{##}$&\global\@eqcnt\@ne \hskip 2\arraycolsep \hfil${##}$\hfil
+&\global\@eqcnt\tw@ \hskip 2\arraycolsep $\displaystyle{##}$\hfil
+\tabskip\@centering&\llap{##}\tabskip\z@\cr}
+
+
+% Here is the corresponding defintion from latex.tex:
+
+\def\@tempb{\stepcounter{equation}\let\@currentlabel=\theequation
+\global\@eqnswtrue
+\global\@eqcnt\z@\tabskip\@centering\let\\=\@eqncr
+$$\halign to \displaywidth\bgroup\@eqnsel\hskip\@centering
+ $\displaystyle\tabskip\z@{##}$&\global\@eqcnt\@ne
+ \hskip 2\arraycolsep \hfil${##}$\hfil
+ &\global\@eqcnt\tw@ \hskip 2\arraycolsep $\displaystyle\tabskip\z@{##}$\hfil
+ \tabskip\@centering&\llap{##}\tabskip\z@\cr}
+
+
+\ifx\eqnarray\@tempa % If the fleqn document style option is in effect
+
+ \def\eqnarray{\stepcounter{equation}\let\@currentlabel=\theequation
+ \global\@eqnswtrue
+ \global\@eqcnt\z@\tabskip\mathindent\let\\=\@eqncr
+ \abovedisplayskip\topsep\ifvmode\advance\abovedisplayskip\partopsep\fi
+ \belowdisplayskip\abovedisplayskip
+ \belowdisplayshortskip\abovedisplayskip
+ \abovedisplayshortskip\abovedisplayskip
+ $$\halign to \linewidth\bgroup\hfil
+ $\displaystyle\tabskip\z@{##}$&\global\@eqcnt\@ne
+ \hfil$\displaystyle{{}##{}}$\hfil
+ &\global\@eqcnt\tw@ $\displaystyle{##}$\hfil
+ \tabskip\@centering&\llap{##}\tabskip\z@\cr}
+
+\else\ifx\eqnarray\@tempb % Else try the default eqnarray environment
+
+ \def\eqnarray{\stepcounter{equation}\let\@currentlabel=\theequation
+ \global\@eqnswtrue
+ \global\@eqcnt\z@\tabskip\@centering\let\\=\@eqncr
+ $$\halign to \displaywidth\bgroup\hfil
+ $\displaystyle\tabskip\z@{##}$&\global\@eqcnt\@ne
+ \hfil$\displaystyle{{}##{}}$\hfil
+ &\global\@eqcnt\tw@ $\displaystyle{##}$\hfil
+ \tabskip\@centering&\llap{##}\tabskip\z@\cr}
+
+\else \typeout{Warning: Unable to fix unknown version of \string\enarray.}
+\fi\fi
+
+\def\@tempa{} % Free up TeX's memory
+\def\@tempb{}
diff --git a/obsolete/macros/latex209/contrib/siam/numinsec.sty b/obsolete/macros/latex209/contrib/siam/numinsec.sty
new file mode 100644
index 0000000000..a849c4965a
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/siam/numinsec.sty
@@ -0,0 +1,16 @@
+% SIAM Style option to get numbering of equations, figures, tables within sections
+
+\@addtoreset{equation}{section} % Makes \section reset 'equation' counter.
+\def\theequation{\thesection.\arabic{equation}}
+
+\@addtoreset{theorem}{section}
+\def\thetheorem{\thesection.\@arabic\c@theorem}
+\def\thelemma{\thesection.\@arabic\c@theorem}
+\def\thecorollary{\thecorollary.\@arabic\c@theorem}
+\def\theproposition{\theproposition.\@arabic\c@theorem}
+
+\@addtoreset{figure}{section}
+\def\thefigure{\thesection.\@arabic\c@figure}
+
+\@addtoreset{table}{section}
+\def\thetable{\thesection.\@arabic\c@table}
diff --git a/obsolete/macros/latex209/contrib/siam/siam-doc.tex b/obsolete/macros/latex209/contrib/siam/siam-doc.tex
new file mode 100644
index 0000000000..85325cabef
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/siam/siam-doc.tex
@@ -0,0 +1,166 @@
+\documentstyle{siam}
+\title{Using the SIAM \LaTeX\ Style%
+ \thanks{This document was written September 24, 1986.}}
+\author{Howard Trickey%
+ \thanks{AT\&T Bell Laboratories, 600 Mountain Ave.,
+ Murray Hill, NJ 07974.
+ {\tt research!trickey} or {\tt trickey@btl.csnet}}}
+\begin{document}
+\maketitle
+\begin{abstract}
+This note explains how to use a \LaTeX\ style that produces a good
+approximation to the style used in SIAM journals.
+The note is itself an example of the {\tt siam} style in action.
+\end{abstract}
+\begin{keywords}
+Document preparation, \LaTeX, SIAM
+\end{keywords}
+
+\section{Introduction}
+The {\em Society for Industrial and Applied Mathematics (SIAM)\/}
+publishes a number of journals, as shown in Table~\ref{pub-table}.
+Authors who have prepared their articles using \LaTeX\ \cite{latexbook}
+can get them formatted in a style identical to a typical paper
+in one of those journals.
+Input that is suitable for the \LaTeX\ {\tt article} style needs
+only a couple of modifications besides changing the document style
+to {\tt siam}.
+
+\begin{table}\label{pub-table}
+\caption{SIAM Publications}
+\begin{center}
+\begin{tabular}{l}
+\hline
+SIAM Journal on Algebraic and Discrete Methods\\
+SIAM Journal on Applied Mathematics\\
+SIAM Journal on Computing\\
+SIAM Journal on Control and Optimization\\
+SIAM Journal on Mathematical Analysis\\
+SIAM Journal on Numerical Analysis\\
+SIAM Journal on Scientific and Statistical Computing\\
+\hline
+\end{tabular}
+\end{center}
+\end{table}
+
+This paper itself gives an example of the {\tt siam} style.
+Figure~\ref{outline-fig} is an outline of the input used.
+
+\begin{figure}
+\begin{center}
+\begin{verbatim}
+\documentstyle{siam}
+\title{Using the SIAM \LaTeX\ Style%
+ \thanks{This document was written September 24, 1986.}}
+\author{Howard Trickey%
+ \thanks{AT\&T Bell Laboratories, 600 Mountain Ave.,
+ Murray Hill, NJ 07974.
+ {\tt research!trickey} or {\tt trickey@btl.csnet}}}
+\begin{document}
+\maketitle
+\begin{abstract}
+This note explains ...
+\end{abstract}
+\begin{keywords}
+Document preparation, \LaTeX, SIAM
+\end{keywords}
+
+\section{Introduction}
+...
+\section*{Acknowledgment}
+\bibliography{siam}
+\bibliographystyle{siam}
+\end{document}
+\end{verbatim}
+\end{center}
+\caption{Input used to produce this paper}\label{outline-fig}
+\end{figure}
+
+\section{Title Material}
+Use the \LaTeX\ \verb|\title| and \verb|\author| declarations and the
+\verb|\maketitle| command as usual.
+SIAM journals don't put author affiliations below or beside
+the author(s); instead, use \verb|\thanks| to list addresses.
+In fact, it is an error to use \verb|\\| in the \verb|\author|
+command, because it interferes with some fairly fancy
+footwork that the style uses to change the author and title
+to all uppercase.
+If there are several authors with the same affiliation,
+the best I can suggest is to \verb|\thanks| only one, see
+what footnote mark comes out, and manually place it after
+the others (sorry).
+
+The \verb|\maketitle| can be followed by an abstract and/or a keywords
+section, as shown in the introduction.
+
+\section{Figures and Tables}
+SIAM tables have their captions above the table contents,
+while figures have captions below the contents.
+Place the \verb|\caption| command accordingly.
+Figure~\ref{outline-fig} and Table~\ref{pub-table}
+were examples.
+
+\section{Mathematics}
+Equations are entered as usual.
+SIAM journals put equation numbers on the left.
+It appears to be up to the author whether equations are numbered
+within a section (e.g., (4.2)) or within the paper (e.g., (2)).
+The {\tt siam} style uses the latter, as this example from
+the {\em SIAM Journal on Numerical Analysis\/}
+\cite{bube} shows:
+\begin{equation}
+r_k=\int_{-\Delta}^{\Delta} r(2k\Delta+\tau)\,d\tau\qquad (0\le k \le n)
+\end{equation}
+
+There are four ``theorem-like'' environments predefined:
+theorem, lemma, corollary, and proposition.
+Again, SIAM does not appear to prescribe the exact numbering scheme
+to be used.
+The {\tt siam} style numbers them all in the same index space, and
+not within each section.
+There is also a \verb|\proof| environment.
+For example, here is Theorem~1 of the example paper \cite{bube}:
+\begin{theorem}
+Suppose the ramp reflectance is sampled. Then
+\begin{equation}\label{theq}
+\|R_j\|_2 \le c_0 \equiv \|R_X\| < 1
+\end{equation}
+whenever $(j+1)\Delta\le X$;
+thus the discrete inverse problem can be solved,
+yielding a positive discrete impedance profile.
+\end{theorem}
+\begin{proof}
+Fix $\Delta$, and fix $j$ and $x$ with $0<x=(j+1)\Delta \le X$.\\
+\dots so since $R_j$ is symmetric, (\ref{theq}) follows.
+\end{proof}
+
+\section{SIAM Bibliographies}
+The {\tt siam} bibliography style uses numeric labels, abbreviations
+from Mathematical Reviews, titles in italics, mixed upper-lower case
+for book titles, lower case for article titles, and uses commas
+to separate fields.
+SIAM journal articles sometimes order the entries alphabetically,
+sometimes order-of-reference.
+The {\tt siam} style does alphabetic ordering.
+
+\section{Page Styles}
+Use the {\tt plain} style, or perhaps {\tt empty} or {\tt myheadings}.
+The {\tt headings} style doesn't do the right thing.
+(A problem with making {\tt headings} work is that
+often the title and/or authors have to be abbreviated to fit
+in the headings.)
+
+\section*{Acknowledgment}
+Eric Grosse and Bill Coughran were the instigators and first users
+of this style.
+Eric has made it available via {\em netlib}, a repository
+of mathematical software. You can get the {\tt siam} style
+files by
+\begin{verbatim}
+ mail research!netlib
+ send latex from siam
+\end{verbatim}
+
+\bibliography{siam}
+\bibliographystyle{siam}
+\end{document}
diff --git a/obsolete/macros/latex209/contrib/siam/siam.bib b/obsolete/macros/latex209/contrib/siam/siam.bib
new file mode 100644
index 0000000000..3d1f0ae79a
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/siam/siam.bib
@@ -0,0 +1,18 @@
+@BOOK(latexbook,
+ key = "Lamport",
+ author = "Leslie Lamport",
+ title = "{\LaTeX}: A Document Preparation System",
+ publisher = "Addison-Wesley",
+ year = 1986,
+ address = "Reading, Massachusetts")
+
+@ARTICLE(bube,
+ author = "Kenneth P. Bube",
+ title = "Numerical Methods for Reflection Inverse Problems:
+ Convergence and Nonimpulsive Sources",
+ journal = "SIAM J. Numerical Analysis",
+ volume = 23,
+ number = 2,
+ year = 1986,
+ month = apr,
+ pages = "227--258")
diff --git a/obsolete/macros/latex209/contrib/siam/siam.bst b/obsolete/macros/latex209/contrib/siam/siam.bst
new file mode 100644
index 0000000000..5ab0e39599
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/siam/siam.bst
@@ -0,0 +1,1035 @@
+% SIAM bibliography style (24-Jan-88 version)
+% numeric labels, alphabetic order, Mathematical Reviews abbreviations,
+% names in \sc, titles in italics, book titles mixed upper-lower and article
+% titles lowercase, commas separate all fields except before "notes".
+%
+% History
+% 1/30/86 (HWT) Original version, by Howard Trickey.
+% 6/15/87 (HWT) Fix format.editors---Martin Costabel.
+% 1/24/88 (OP&HWT) Updated for BibTeX version 0.99a, Oren Patashnik;
+% THIS `siam' VERSION DOES NOT WORK WITH BIBTEX 0.98i.
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ volume
+ year
+ }
+ {}
+ { label }
+
+INTEGERS { output.state before.all mid.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ "\newblock " write$
+ }
+ 'write$
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+ "\bibitem{" write$
+ cite$ write$
+ "}" write$
+ newline$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "{\em " swap$ * "}" * }
+ if$
+}
+
+FUNCTION {scapify}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "{\sc " swap$ * "}" * }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " et~al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+STRINGS { last.authors }
+
+FUNCTION {init.last.authors}
+{ "" 'last.authors :=
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" 'last.authors :=
+ ""
+ }
+ { author last.authors =
+ { "\leavevmode\vrule height 2pt depth -1.6pt width 23pt" }
+ { author format.names scapify }
+ if$
+ author 'last.authors :=
+ }
+ if$
+}
+
+FUNCTION {format.organization}
+{ organization empty$
+ { "" 'last.authors :=
+ ""
+ }
+ { organization last.authors =
+ { "\leavevmode\vrule height 2pt depth -1.6pt width 23pt" }
+ { organization scapify }
+ if$
+ organization 'last.authors :=
+ }
+ if$
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" 'last.authors :=
+ ""
+ }
+ { editor last.authors =
+ { "\leavevmode\vrule height 2pt depth -1.6pt width 23pt" }
+ { editor format.names scapify }
+ if$
+ editor num.names$ #1 >
+ { ", eds." * }
+ { ", ed." * }
+ if$
+ editor 'last.authors :=
+ }
+ if$
+}
+
+FUNCTION {format.ineditors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+ { ", eds." * }
+ { ", ed." * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title "t" change.case$ emphasize }
+ if$
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+ month
+ }
+ if$
+ }
+ { month empty$
+ 'year
+ { month " " * year * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "vol.~" volume *
+ series empty$
+ 'skip$
+ { " of " * series * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { "no.~" number *
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { edition "l" change.case$ "~ed." * }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "pp.~" pages n.dashify * }
+ { "p.~" pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.year}
+{ volume field.or.null
+ year empty$
+ { "empty year in " cite$ * warning$ }
+ { " (" year * ")" * * }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "ch.~" chapter * }
+ { type "l" change.case$ chapter tie.or.space.connect }
+ if$
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { "in " booktitle * }
+ { "in " booktitle * ", " * format.ineditors * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "l" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Tech. Report" }
+ 'type
+ if$
+ number empty$
+ { "l" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "in " journal * }
+ if$
+ }
+ { "in " key * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et~al." * }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et~al." * }
+ { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "in "
+ }
+ { "vol.~" volume *
+ " of " *
+ }
+ if$
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { series * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "in " booktitle * }
+ if$
+ }
+ { "in " key * }
+ if$
+ }
+ { "in " format.crossref.editor * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ format.title "title" output.check
+ crossref missing$
+ { journal "journal" output.check
+ format.vol.year output
+ }
+ { format.article.crossref output.nonnull }
+ if$
+ format.pages output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.number.series output
+ publisher "publisher" output.check
+ address output
+ }
+ { format.book.crossref output.nonnull }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ format.title "title" output.check
+ howpublished new.block.checka
+ howpublished output
+ address output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.number.series output
+ publisher "publisher" output.check
+ address output
+ }
+ { format.book.crossref output.nonnull }
+ if$
+ format.edition output
+ format.date "year" output.check
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ format.title "title" output.check
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ publisher "publisher" output.check
+ address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull }
+ if$
+ format.chapter.pages output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ format.title "title" output.check
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { organization output
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ organization output
+ publisher output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull }
+ if$
+ format.pages output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { format.organization output }
+ { format.authors output.nonnull }
+ if$
+ format.btitle "title" output.check
+ author empty$
+ 'skip$
+ { organization output }
+ if$
+ address output
+ format.edition output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ format.title "title" output.check
+ "master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ format.title output
+ howpublished new.block.checka
+ howpublished output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ format.btitle "title" output.check
+ "PhD thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { format.organization output }
+ { format.editors output.nonnull }
+ if$
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ format.title "title" output.check
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ format.title "title" output.check
+ new.block
+ note "note" output.check
+ format.date output
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"Jan."}
+
+MACRO {feb} {"Feb."}
+
+MACRO {mar} {"Mar."}
+
+MACRO {apr} {"Apr."}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"Aug."}
+
+MACRO {sep} {"Sept."}
+
+MACRO {oct} {"Oct."}
+
+MACRO {nov} {"Nov."}
+
+MACRO {dec} {"Dec."}
+
+MACRO {acmcs} {"ACM Comput. Surveys"}
+
+MACRO {acta} {"Acta Inf."}
+
+MACRO {cacm} {"Comm. ACM"}
+
+MACRO {ibmjrd} {"IBM J. Res. Dev."}
+
+MACRO {ibmsj} {"IBM Syst.~J."}
+
+MACRO {ieeese} {"IEEE Trans. Softw. Eng."}
+
+MACRO {ieeetc} {"IEEE Trans. Comput."}
+
+MACRO {ieeetcad}
+ {"IEEE Trans. Comput.-Aided Design Integrated Circuits"}
+
+MACRO {ipl} {"Inf. Process. Lett."}
+
+MACRO {jacm} {"J.~Assoc. Comput. Mach."}
+
+MACRO {jcss} {"J.~Comput. System Sci."}
+
+MACRO {scp} {"Sci. Comput. Programming"}
+
+MACRO {sicomp} {"SIAM J. Comput."}
+
+MACRO {tocs} {"ACM Trans. Comput. Syst."}
+
+MACRO {tods} {"ACM Trans. Database Syst."}
+
+MACRO {tog} {"ACM Trans. Gr."}
+
+MACRO {toms} {"ACM Trans. Math. Softw."}
+
+MACRO {toois} {"ACM Trans. Office Inf. Syst."}
+
+MACRO {toplas} {"ACM Trans. Prog. Lang. Syst."}
+
+MACRO {tcs} {"Theoretical Comput. Sci."}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { nameptr #1 >
+ { " " * }
+ 'skip$
+ if$
+ s nameptr "{vv{ } }{ll{ }}{ f{ }}{ jj{ }}" format.name$ 't :=
+ nameptr numnames = t "others" = and
+ { "et al" * }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {presort}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label }
+
+INTEGERS { number.label longest.label.width }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #1 'number.label :=
+ #0 'longest.label.width :=
+}
+
+FUNCTION {longest.label.pass}
+{ number.label int.to.str$ 'label :=
+ number.label #1 + 'number.label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {longest.label.pass}
+
+FUNCTION {begin.bib}
+{ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "\begin{thebibliography}{" longest.label * "}" * write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+EXECUTE {init.last.authors}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+ "\end{thebibliography}" write$ newline$
+}
+
+EXECUTE {end.bib}
diff --git a/obsolete/macros/latex209/contrib/siam/siam.sty b/obsolete/macros/latex209/contrib/siam/siam.sty
new file mode 100644
index 0000000000..3eeff39ab7
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/siam/siam.sty
@@ -0,0 +1,340 @@
+% siam.sty 11 Feb 88, based on article.sty 5 Feb 88
+% Changed to hardwire the right headings for publications
+% Christian Bischof, 22January1990
+% last modified by P. Duggan 11/5/91
+% description-environment indention modified 6 Nov 91
+\typeout{Document Style 'siam'. Released 11 February 1988}
+\def\myoddhead{ }
+\def\myevenhead{ }
+%\typeout{*******************************************************}
+%\typeout{*** Make sure running heads are correct in siam.sty ***}
+%\typeout{*******************************************************}
+
+\def\@ptsize{0} \@namedef{ds@11pt}{\def\@ptsize{1}}
+\@namedef{ds@12pt}{\def\@ptsize{2}}
+\def\ds@twoside{\@twosidetrue \@mparswitchtrue} \def\ds@draft{\overfullrule
+5pt}
+\@options
+\input siam1\@ptsize.sty\relax
+
+
+\def\labelenumi{\arabic{enumi}.}
+\def\theenumi{\arabic{enumi}}
+\def\labelenumii{(\alph{enumii})}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+\def\labelenumiii{\roman{enumiii}.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+\def\labelenumiv{\Alph{enumiv}.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+\def\labelitemi{$\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+\def\quotation{\list{}{\listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin \parsep 0pt plus 1pt}\item[]}
+\let\endquotation=\endlist
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+%\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\descriptionlabel#1{\bf #1}
+%\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+\def\description{\list{}{\labelwidth10pt
+ \let\makelabel\descriptionlabel}}
+\let\enddescription\endlist
+
+\newcounter{part}
+\newcounter {section}
+\newcounter {subsection}[section]
+\newcounter {subsubsection}[subsection]
+\newcounter {paragraph}[subsubsection]
+\newcounter {subparagraph}[paragraph]
+
+\def\@begintheorem#1#2{\par\bgroup{\sc #1\ #2. }\it\ignorespaces}
+\def\@opargbegintheorem#1#2#3{\par\bgroup{\sc #1\ #2\ (#3). }\it\ignorespaces}
+\def\@endtheorem{\egroup}
+\def\proof{\par{\it Proof}. \ignorespaces}
+\def\endproof{{\ \vbox{\hrule\hbox{%
+ \vrule height1.3ex\hskip0.8ex\vrule}\hrule
+ }}\par}
+\newtheorem{theorem}{Theorem}[section]
+\newtheorem{lemma}[theorem]{Lemma}
+\newtheorem{corollary}[theorem]{Corollary}
+\newtheorem{proposition}[theorem]{Proposition}
+
+\def\theequation{\arabic{equation}}
+\def\@eqnnum{\hbox to .01pt{}\rlap{\rm \hskip -\displaywidth(\theequation)}}
+
+
+\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{empty}\c@page\z@}
+\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi}
+
+\arraycolsep 5pt \tabcolsep 6pt \arrayrulewidth .4pt \doublerulesep 2pt
+\tabbingsep \labelsep
+
+\skip\@mpfootins = \skip\footins
+\fboxsep = 3pt \fboxrule = .4pt
+
+\def\thepart{\Roman{part}} \def\thesection {\arabic{section}}
+\def\thesubsection {\thesection.\arabic{subsection}}
+\def\thesubsubsection {\thesubsection .\arabic{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+\def\thesubparagraph {\theparagraph.\arabic{subparagraph}}
+\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
+ \def\@svsec{}\else
+ \refstepcounter{#1}\edef\@svsec{\csname the#1\endcsname.\hskip .5em }\fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #6\relax
+ \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\par}
+ \endgroup
+ \csname #1mark\endcsname{#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #7}\else
+ \def\@svsechd{#6\hskip #3\@svsec #8.\csname #1mark\endcsname
+ {#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #7}}\fi
+ \@xsect{#5}}
+\def\@ssect#1#2#3#4#5{\@tempskipa #3\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #4\@hangfrom{\hskip #1}{\interlinepenalty \@M
+#5.\par}\endgroup
+ \else \def\@svsechd{#4\hskip #1\relax #5.}\fi
+ \@xsect{#3}}
+
+
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{3}
+
+\def\tableofcontents{\section*{Contents\@mkboth{CONTENTS}{CONTENTS}}
+ \@starttoc{toc}}
+\def\l@part#1#2{\addpenalty{\@secpenalty}
+ \addvspace{2.25em plus 1pt} \begingroup
+ \@tempdima 3em \parindent \z@ \rightskip \@pnumwidth \parfillskip
+-\@pnumwidth
+ {\bf \leavevmode #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
+ \nobreak \endgroup}
+\def\l@section#1#2{\addpenalty{\@secpenalty} \addvspace{1.0em plus 1pt}
+\@tempdima 1.5em \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \bf \leavevmode \advance\leftskip\@tempdima \hskip -\leftskip #1\nobreak\hfil
+\nobreak\hbox to\@pnumwidth{\hss #2}\par
+ \endgroup}
+\def\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}}
+\def\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}}
+\def\l@paragraph{\@dottedtocline{4}{7.0em}{4.1em}}
+\def\l@subparagraph{\@dottedtocline{5}{10em}{5em}}
+\def\listoffigures{\section*{List of Figures\@mkboth
+ {LIST OF FIGURES}{LIST OF FIGURES}}\@starttoc{lof}}
+\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
+\def\listoftables{\section*{List of Tables\@mkboth
+ {LIST OF TABLES}{LIST OF TABLES}}\@starttoc{lot}}
+\let\l@table\l@figure
+
+
+\def\thebibliography#1{\par\addvspace{.25in}%
+\begin{center}\footnotesize REFERENCES\end{center}\@mkboth
+ {REFERENCES}{REFERENCES}\addvspace{.15in}\nopagebreak\list
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep \advance\leftmargin 16pt \itemindent -16pt
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax\footnotesize}
+\let\endthebibliography=\endlist
+
+
+\newif\if@restonecol
+\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\section*{Index}]
+ \@mkboth{INDEX}{INDEX}\thispagestyle{plain}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+\def\@idxitem{\par\hangindent 40pt}
+\def\subitem{\par\hangindent 40pt \hspace*{20pt}}
+\def\subsubitem{\par\hangindent 40pt \hspace*{30pt}}
+\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
+\def\indexspace{\par \vskip 10pt plus 5pt minus 3pt\relax}
+
+\def\footnoterule{\kern-3\p@
+ \hrule width .5in
+ \kern 2.6\p@}
+
+\long\def\@makefntext#1{\parindent .25in\noindent
+ \hbox to .25in{\hss$^{\@thefnmark}$\kern 3pt}#1}
+
+
+\setcounter{topnumber}{2}
+\def\topfraction{.9}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.1}
+\setcounter{totalnumber}{3}
+\def\textfraction{.1}
+\def\floatpagefraction{.91}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+\def\@figtxt{figure}
+\long\def\@makecaption#1#2{\footnotesize
+ \setlength{\parindent}{1.5pc}
+ \ifx\@captype\@figtxt
+ \vskip 10pt
+ \setbox\@tempboxa\hbox{{\sc #1}. {\it #2}}
+ \ifdim \wd\@tempboxa >\hsize {\sc #1}. {\it #2}\par \else \hbox
+to\hsize{\hfil\box\@tempboxa\hfil}%
+ \fi\else\hbox to\hsize{\hfil{\sc #1}\hfil}%
+ \setbox\@tempboxa\hbox{{\it #2}}%
+ \ifdim \wd\@tempboxa >\hsize {\it #2}\par \else
+ \hbox to \hsize{\hfil\box\@tempboxa\hfil}\fi
+ \vskip 10pt
+ \fi}
+
+
+\newcounter{figure}
+\def\thefigure{\@arabic\c@figure}
+\def\fps@figure{tp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{Fig.\ \thefigure}
+\def\figure{\@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+\newcounter{table}
+\def\thetable{\@arabic\c@table}
+\def\fps@table{tp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{Table \thetable}
+\def\table{\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+
+
+\def\maketitle{\par
+ \begingroup
+ \def\thefootnote{\fnsymbol{footnote}}
+ \def\@makefnmark{\hbox
+ to 0pt{$^{\@thefnmark}$\hss}}
+ \if@twocolumn
+ \twocolumn[\@maketitle]
+ \else %%%% commented out for \newpage
+ \global\@topnum\z@ \@maketitle \fi\thispagestyle{plain}\@thanks
+ \endgroup
+ \setcounter{footnote}{0}
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\let\thanks\relax}
+\def\@maketitle{%%% commented out\newpage
+ \null
+ \begin{center}
+ {\bf\@ucnothanks\@title\par}\vskip .075in
+ {\footnotesize\spaceskip=1.5\fontdimen2\the\font
+ \def\and{\ \scriptsize AND }\@tempswafalse\expandafter\@doauth\@author\and\relax}
+ \end{center}
+ \par \vskip .11in}
+\def\@ucnothanks#1{\expandafter\@ucnt#1\thanks\relax}
+\def\@ucnt#1\thanks{\uppercase{#1}\futurelet\@tempa\@ucnta}
+\def\@ucnta{\ifx\@tempa\relax\else\@ucntb\fi}
+\def\@ucntb#1\thanks\relax{\thanks{#1}}
+\def\@doauth#1\and{\let\@nextdoa=\@doauth
+ \def\@tempc{\@ucnothanks{#1}}
+ \futurelet\@tempa\@doautha}
+\def\@doautha{\ifx\@tempa\relax
+ \if@tempswa {\and}\fi
+ \let\@nextdoa=\relax
+ \else
+ \if@tempswa \gdef\and{,\ \scriptsize AND }, \fi
+ \fi
+ \@tempc\unskip\@tempswatrue\@nextdoa}
+\let\and=\relax
+\def\@abssec#1{\vspace{.05in}\footnotesize \parindent .2in
+{\bf #1. }\ignorespaces}
+\def\abstract{\@abssec{Abstract}}
+\def\keywords{\@abssec{Key words}}
+\def\AMSMOS{\@abssec{AMS(MOS) subject classifications}}
+
+\def\endabstract{\par\vspace{.1in}}
+\let\endkeywords\endabstract
+\let\endAMSMOS\endabstract
+
+\mark{{}{}}
+
+\def\ps@plain{\let\@mkboth\@gobbletwo
+ \def\@oddhead{}\def\@oddfoot{\footnotesize\rm\hfil\thepage
+ \hfil}\def\@evenhead{}\let\@evenfoot\@oddfoot}
+\if@twoside \def\ps@headings{\let\@mkboth\markboth
+\def\@oddfoot{}\def\@evenfoot{}\def\@evenhead{
+\rm\rlap{\thepage}\footnotesize\rm
+\hfil \leftmark\hfil}\def\@oddhead{\hbox{}\hfil
+{\footnotesize\rm\rightmark \hfil}\llap{\rm\thepage}}
+\def\sectionmark##1{\markboth {\uppercase{\ifnum \c@secnumdepth
+>\z@
+ \thesection.\hskip 1em\relax \fi ##1}}{}}\def\subsectionmark##1{\markright
+{\ifnum \c@secnumdepth >\@ne
+ \thesubsection.\hskip 1em\relax \fi ##1}}}
+\else \def\ps@headings{\let\@mkboth\markboth\def\@oddfoot{}\def\@evenfoot{}%
+\def\@oddhead{\hbox{}\hfil{\footnotesize\rm \rightmark}\hfil
+\llap{\rm\thepage}}\def\sectionmark##1{\markright
+{\uppercase{\ifnum \c@secnumdepth >\z@
+ \thesection.\hskip 1em\relax \fi ##1}}}}
+\fi
+\def\ps@myheadings{\let\@mkboth\@gobbletwo
+\def\@oddhead{\hbox{}\hfil{\footnotesize\rm {\scriptsize \myoddhead}
+\rightmark}\hfil
+\llap{\rm\thepage}}\def\@oddfoot{}%
+\def\@evenhead{\rm\rlap{\thepage}\footnotesize\rm
+\hfil \leftmark {\scriptsize \myevenhead}
+\hfil\hbox{}}\def\@evenfoot{}\def\sectionmark##1{}%
+\def\subsectionmark##1{}}
+
+\def\sameauthor{\leavevmode\vrule height 2pt depth -1.6pt width 23pt}
+
+\def\endproof{\vbox{\hrule\hbox{%
+ \vrule height1.3ex\hskip0.8ex\vrule}\hrule
+ }}
+
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+
+
+\ps@plain \pagenumbering{arabic} \onecolumn \if@twoside\else\raggedbottom\fi
+
+
+\font\sevbf=cmbx7
+\@addfontinfo\@xpt{\def\pbf{\fam\bffam\tenbf}\scriptfont\bffam\sevbf}
+
+%\font\eightbf=cmbx8
+%\@addfontinfo\@viiipt{\def\pbf{\fam\bffam\tenbf}\textfont\bffam\eightbf}
+
+%\font\sevsyb=cmbsy7
+%\@addfontinfo\@xpt{\def\pbf{\fam\bffam\tensyb}\scriptfont\bffam\sevsyb}
+
+\font\sevsf=cmss8
+\@addfontinfo\@xpt{\def\psf{\fam\sffam\tensf}\scriptfont\sffam\sevsf}
+
+%\font\sevmib=cmmib7
+%\@addfontinfo\@xpt{\def\boldmath{\@prtct\@nomathbold
+%\scriptfont\@ne\sevmib \@prtct\@boldtrue}}
+
diff --git a/obsolete/macros/latex209/contrib/siam/siam10.sty b/obsolete/macros/latex209/contrib/siam/siam10.sty
new file mode 100644
index 0000000000..d93acc5525
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/siam/siam10.sty
@@ -0,0 +1,103 @@
+% ====================== SIAM10.STY ============================== %
+% siam10.sty 5 Feb 88, based on art10.sty 22 Dec 87
+\lineskip 1pt \normallineskip 1pt
+\def\baselinestretch{1}
+
+\def\@normalsize{\@setsize\normalsize{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \abovedisplayskip
+\belowdisplayshortskip \belowdisplayskip \let\@listi\@listI}
+\def\small{\@setsize\small{11pt}\ixpt\@ixpt
+\abovedisplayskip 8.5pt plus 3pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \abovedisplayskip\belowdisplayshortskip \belowdisplayskip
+\def\@listi{\leftmargin\leftmargini \leftmargin\leftmargini \topsep \z@\parsep \z@
+\itemsep \parsep}}
+\def\footnotesize{\@setsize\footnotesize{9.5pt}\viiipt\@viiipt
+\abovedisplayskip 6pt plus 2pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \abovedisplayskip\belowdisplayshortskip \belowdisplayskip
+\def\@listi{\leftmargin\leftmargini \topsep \z@\parsep \z@
+\itemsep \parsep}}
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\normalsize
+
+\oddsidemargin .5in \evensidemargin .5in
+\marginparwidth 1.25in \marginparsep .25in
+ \topmargin \z@ \headheight 10pt \headsep .2in \footskip .2in
+
+\textheight 8.25in \textwidth 5.125in \columnsep 10pt \columnseprule 0pt
+
+\footnotesep 6.65pt
+\skip\footins 13pt plus 4pt minus 2pt
+\floatsep 12pt plus 2pt minus 2pt \textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 12pt plus 2pt minus 2pt \@maxsep 20pt \dblfloatsep 12pt plus 2pt
+minus 2pt \dbltextfloatsep 20pt plus 2pt minus 4pt \@dblmaxsep 20pt
+\@fptop 0pt plus 1fil \@fpsep 8pt plus 2fil \@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil \@dblfpsep 8pt plus 2fil \@dblfpbot 0pt plus 1fil
+\marginparpush 5pt
+
+\parskip 0pt plus 1pt \parindent .25in \partopsep \z@
+\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301
+\@beginparpenalty -\@lowpenalty \@endparpenalty -\@lowpenalty \@itempenalty
+-\@lowpenalty
+
+
+\def\part{\par \addvspace{4ex} \@afterindentfalse \secdef\@part\@spart}
+\def\@part[#1]#2{\ifnum \c@secnumdepth >\m@ne \refstepcounter{part}
+\addcontentsline{toc}{part}{\thepart \hspace{1em}#1}\else
+\addcontentsline{toc}{part}{#1}\fi { \parindent 0pt \raggedright
+ \ifnum \c@secnumdepth >\m@ne \bf Part \thepart \par \nobreak \fi
+\bf #2\markboth{}{}\par } \nobreak \vskip 3ex \@afterheading }
+\def\@spart#1{{\parindent 0pt \raggedright
+ \bf
+ #1\par} \nobreak \vskip 3ex \@afterheading }
+\def\section{\@startsection {section}{1}{.25in}{1.3ex plus .5ex minus
+ .2ex}{-.5em plus -.1em}{\bf}}
+\def\subsection{\@startsection {subsection}{2}{.25in}{1.3ex plus .5ex minus
+ .2ex}{-.5em plus -.1em}{\bf}}
+\def\subsubsection{\@startsection {subsubsection}{3}{.25in}{1.3ex plus .5ex minus
+ .2ex}{-.5em plus -.1em}{\bf}}
+\def\paragraph{\@startsection {paragraph}{4}{.25in}{1.3ex plus .5ex minus
+ .2ex}{-.5em plus -.1em}{\it}}
+\def\subparagraph{\@startsection {subparagraph}{4}{.25in}{1.3ex plus .5ex minus
+ .2ex}{-.5em plus -.1em}{\it}}
+
+
+\setcounter{secnumdepth}{3}
+
+\def\appendix{\par
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \def\thesection{\Alph{section}}}
+
+
+\leftmargini .5in
+\leftmarginii 22pt \leftmarginiii 18.7pt \leftmarginiv 17pt \leftmarginv 10pt
+\leftmarginvi 10pt
+\leftmargin\leftmargini
+\labelsep 5pt
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\def\@listI{\leftmargin\leftmargini \parsep \z@ \topsep \z@ \itemsep \parsep}
+\let\@listi\@listI
+\@listi
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep \z@
+ \parsep \z@
+ \itemsep \parsep}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep \z@
+ \parsep \z@ \partopsep \z@
+ \itemsep \topsep}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
diff --git a/obsolete/macros/latex209/contrib/siam/siam11.sty b/obsolete/macros/latex209/contrib/siam/siam11.sty
new file mode 100644
index 0000000000..2764392c10
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/siam/siam11.sty
@@ -0,0 +1,104 @@
+% siam11.sty 5 Feb 88, based on art11.sty 22 Dec 87
+\lineskip 1pt \normallineskip 1pt
+\def\baselinestretch{1}
+
+\def\@normalsize{\@setsize\normalsize{13.6pt}\xipt\@ixpt
+\abovedisplayskip 11pt plus3pt minus6pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \abovedisplayskip
+\belowdisplayshortskip \belowdisplayskip \let\@listi\@listI}
+\def\small{\@setsize\small{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \abovedisplayskip\belowdisplayshortskip \belowdisplayskip
+\def\@listi{\leftmargin\leftmargini \topsep \z@\parsep \z@
+\itemsep \parsep}}
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt
+\abovedisplayskip 8pt plus 2pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \abovedisplayskip\belowdisplayshortskip \belowdisplayskip
+\def\@listi{\leftmargin\leftmargini \topsep \z@\parsep \z@
+\itemsep \parsep}}
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\normalsize
+
+\voffset -.4in
+\oddsidemargin .3in \evensidemargin .3in
+\marginparwidth 1.14in \marginparsep .25in
+ \topmargin \z@ \headheight 11pt \headsep .22in \footskip .22in
+
+\textheight 9in \textwidth 5.64in \columnsep 11pt \columnseprule 0pt
+
+\footnotesep 7.3pt
+\skip\footins 14pt plus 4pt minus 2pt
+\floatsep 12pt plus 2pt minus 2pt \textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 12pt plus 2pt minus 2pt \@maxsep 20pt \dblfloatsep 12pt plus 2pt
+minus 2pt \dbltextfloatsep 20pt plus 2pt minus 4pt \@dblmaxsep 20pt
+\@fptop 0pt plus 1fil \@fpsep 8pt plus 2fil \@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil \@dblfpsep 8pt plus 2fil \@dblfpbot 0pt plus 1fil
+\marginparpush 5pt
+
+\parskip 0pt plus 1pt \parindent .275in \partopsep \z@
+\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301
+\@beginparpenalty -\@lowpenalty \@endparpenalty -\@lowpenalty \@itempenalty
+-\@lowpenalty
+
+
+\def\part{\par \addvspace{4ex} \@afterindentfalse \secdef\@part\@spart}
+\def\@part[#1]#2{\ifnum \c@secnumdepth >\m@ne \refstepcounter{part}
+\addcontentsline{toc}{part}{\thepart \hspace{1em}#1}\else
+\addcontentsline{toc}{part}{#1}\fi { \parindent 0pt \raggedright
+ \ifnum \c@secnumdepth >\m@ne \bf Part \thepart \par \nobreak \fi
+\bf #2\markboth{}{}\par } \nobreak \vskip 3ex \@afterheading }
+\def\@spart#1{{\parindent 0pt \raggedright
+ \bf
+ #1\par} \nobreak \vskip 3ex \@afterheading }
+\def\section{\@startsection {section}{1}{.275in}{1.4ex plus .5ex minus
+ .2ex}{-.55em plus -.1em}{\bf}}
+\def\subsection{\@startsection {subsection}{2}{.275in}{1.4ex plus .5ex minus
+ .2ex}{-.55em plus -.1em}{\bf}}
+\def\subsubsection{\@startsection {subsubsection}{3}{.275in}{1.4ex plus .5ex minus
+ .2ex}{-.55em plus -.1em}{\bf}}
+\def\paragraph{\@startsection {paragraph}{4}{.275in}{1.4ex plus .5ex minus
+ .2ex}{-.55em plus -.1em}{\it}}
+\def\subparagraph{\@startsection {subparagraph}{4}{.275in}{1.4ex plus .5ex minus
+ .2ex}{-.55em plus -.1em}{\it}}
+
+
+\setcounter{secnumdepth}{3}
+
+\def\appendix{\par
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \def\thesection{\Alph{section}}}
+
+
+\leftmargini .55in
+\leftmarginii 2.2em \leftmarginiii 1.87em \leftmarginiv 1.7em \leftmarginv 1em
+\leftmarginvi 1em
+\leftmargin\leftmargini
+\labelsep .5em
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\def\@listI{\leftmargin\leftmargini \parsep \z@ \topsep \z@ \itemsep \parsep}
+\let\@listi\@listI
+\@listi
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep \z@
+ \parsep \z@
+ \itemsep \parsep}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep \z@
+ \parsep \z@ \partopsep \z@
+ \itemsep \topsep}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
diff --git a/obsolete/macros/latex209/contrib/siam/siam12.sty b/obsolete/macros/latex209/contrib/siam/siam12.sty
new file mode 100644
index 0000000000..b4c119b317
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/siam/siam12.sty
@@ -0,0 +1,105 @@
+% siam12.sty 5 Feb 88, based on art12.sty 22 Dec 87
+\lineskip 1pt \normallineskip 1pt
+\def\baselinestretch{1}
+
+\def\@normalsize{\@setsize\normalsize{15pt}\xiipt\@xiipt
+\abovedisplayskip 12pt plus3pt minus7pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \abovedisplayskip
+\belowdisplayshortskip \belowdisplayskip \let\@listi\@listI}
+\def\small{\@setsize\small{13.6pt}\xipt\@xipt
+\abovedisplayskip 11pt plus3pt minus6pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \abovedisplayskip\belowdisplayshortskip \belowdisplayskip
+\def\@listi{\leftmargin\leftmargini \topsep \z@\parsep \z@
+\itemsep \parsep}}
+\def\footnotesize{\@setsize\footnotesize{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \abovedisplayskip\belowdisplayshortskip \belowdisplayskip
+\def\@listi{\leftmargin\leftmargini \topsep \z@\parsep \z@
+\itemsep \parsep}}
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{18pt}\xivpt\@xivpt}
+\def\Large{\@setsize\Large{22pt}\xviipt\@xviipt}
+\def\LARGE{\@setsize\LARGE{25pt}\xxpt\@xxpt}
+\def\huge{\@setsize\huge{30pt}\xxvpt\@xxvpt}
+\let\Huge=\huge
+\normalsize
+
+\voffset -.4in
+\if@twoside \oddsidemargin .5in \evensidemargin -.15in
+\else \oddsidemargin .25in \evensidemargin .25in \fi
+\marginparwidth 1in \marginparsep .25in
+ \topmargin \z@ \headheight 12pt \headsep .24in \footskip .2in
+
+\textheight 9in \textwidth 6.15in \columnsep 12pt \columnseprule 0pt
+
+\footnotesep 8pt
+\skip\footins 16pt plus 5pt minus 3pt
+\floatsep 14pt plus 4pt minus 4pt \textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 14pt plus 4pt minus 4pt \@maxsep 20pt \dblfloatsep 12pt plus 2pt
+minus 2pt \dbltextfloatsep 20pt plus 2pt minus 4pt \@dblmaxsep 20pt
+\@fptop 0pt plus 1fil \@fpsep 8pt plus 2fil \@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil \@dblfpsep 8pt plus 2fil \@dblfpbot 0pt plus 1fil
+\marginparpush 5pt
+
+\parskip 0pt plus 1pt \parindent .3in \partopsep \z@
+\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301
+\@beginparpenalty -\@lowpenalty \@endparpenalty -\@lowpenalty \@itempenalty
+-\@lowpenalty
+
+
+\def\part{\par \addvspace{4ex} \@afterindentfalse \secdef\@part\@spart}
+\def\@part[#1]#2{\ifnum \c@secnumdepth >\m@ne \refstepcounter{part}
+\addcontentsline{toc}{part}{\thepart \hspace{1em}#1}\else
+\addcontentsline{toc}{part}{#1}\fi { \parindent 0pt \raggedright
+ \ifnum \c@secnumdepth >\m@ne \bf Part \thepart \par \nobreak \fi
+\bf #2\markboth{}{}\par } \nobreak \vskip 3ex \@afterheading }
+\def\@spart#1{{\parindent 0pt \raggedright
+ \bf
+ #1\par} \nobreak \vskip 3ex \@afterheading }
+\def\section{\@startsection {section}{1}{.3in}{1.6ex plus .6ex minus
+ .2ex}{-.5em plus -.1em}{\bf}}
+\def\subsection{\@startsection {subsection}{2}{.3in}{1.6ex plus .6ex minus
+ .2ex}{-.5em plus -.1em}{\bf}}
+\def\subsubsection{\@startsection {subsubsection}{3}{.3in}{1.6ex plus .6ex minus
+ .2ex}{-.5em plus -.1em}{\bf}}
+\def\paragraph{\@startsection {paragraph}{4}{.3in}{1.6ex plus .6ex minus
+ .2ex}{-.5em plus -.1em}{\it}}
+\def\subparagraph{\@startsection {subparagraph}{4}{.3in}{1.6ex plus .6ex minus
+ .2ex}{-.5em plus -.1em}{\it}}
+
+
+\setcounter{secnumdepth}{3}
+
+\def\appendix{\par
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \def\thesection{\Alph{section}}}
+
+
+\leftmargini .6in
+\leftmarginii 2.2em \leftmarginiii 1.87em \leftmarginiv 1.7em \leftmarginv 1em
+\leftmarginvi 1em
+\leftmargin\leftmargini
+\labelsep .5em
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\def\@listI{\leftmargin\leftmargini \parsep \z@ \topsep \z@ \itemsep \parsep}
+\let\@listi\@listI
+\@listi
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep \z@
+ \parsep \z@
+ \itemsep \parsep}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep \z@
+ \parsep \z@ \partopsep \z@
+ \itemsep \topsep}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
diff --git a/obsolete/macros/latex209/contrib/springer/jnsl/jns.sty b/obsolete/macros/latex209/contrib/springer/jnsl/jns.sty
new file mode 100644
index 0000000000..12b9b490ab
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/jnsl/jns.sty
@@ -0,0 +1,801 @@
+% JNS DOCUMENT STYLE -- Released 16 July 1990
+% i.e. Journal of Nonlinear Science document style
+% for LaTeX version 2.09
+
+% This style file is an adaptation of
+% the original LaTeX article.sty, by:
+% Frank Holzwarth, Springer-Verlag Heidelberg,
+% Tiergartenstrasse 17, D-6900 Heidelberg.
+
+\typeout{Document Style `jns' <16 Jul 90>.}
+
+\frenchspacing
+\def~{\penalty\@M\kern3pt}
+
+\def\thebibliography#1{\section*{References}\small\list
+ {\arabic{enumi}.}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus -.07em}
+ \sloppy
+ \sfcode`\.=1000\relax}
+
+\def\ds@citeauthoryear{\def\thebibliography##1{\section*{References}%
+ \small\list{}{\settowidth\labelwidth{}\leftmargin\parindent
+ \itemindent=-\parindent
+ \labelsep=\z@
+ \usecounter{enumi}}%
+ \def\newblock{\hskip .11em plus .33em minus -.07em}%
+ \sloppy
+ \sfcode`\.=1000\relax}%
+ \def\@cite##1{##1}%
+ \def\@lbibitem[##1]##2{\item[]\if@filesw
+ {\def\protect####1{\string ####1\space}\immediate
+ \write\@auxout{\string\bibcite{##2}{##1}}}\fi\ignorespaces}}%
+
+\newif\if@envcountreset\@envcountresetfalse
+\def\ds@envcountreset{\@envcountresettrue}
+
+\def\@mbi{cmmib10}
+\def\@ptsize{0} \@namedef{ds@11pt}{\def\@ptsize{1}}
+\@namedef{ds@12pt}{\def\@ptsize{2}}
+\def\ds@twoside{\@twosidetrue \@mparswitchtrue}
+\def\ds@draft{\overfullrule
+5pt}
+\@options
+
+\ds@twoside
+
+\lineskip 1pt \normallineskip 1pt
+\def\baselinestretch{1}
+
+\def\@normalsize{\@setsize\normalsize{12pt}\xpt\@xpt
+\abovedisplayskip=3 mm plus6pt minus 4pt
+\belowdisplayskip=3 mm plus6pt minus 4pt
+\abovedisplayshortskip=0mm plus6pt minus 2pt
+\belowdisplayshortskip=2 mm plus4pt minus 4pt}
+
+\mathchardef\Gamma="0100
+\mathchardef\Delta="0101
+\mathchardef\Theta="0102
+\mathchardef\Lambda="0103
+\mathchardef\Xi="0104
+\mathchardef\Pi="0105
+\mathchardef\Sigma="0106
+\mathchardef\Upsilon="0107
+\mathchardef\Phi="0108
+\mathchardef\Psi="0109
+\mathchardef\Omega="010A
+
+\def\small{\@setsize\small{10pt}\viiipt\@viiipt
+\abovedisplayskip=2.5 mm plus5pt minus 3pt
+\belowdisplayskip=2.5 mm plus5pt minus 3pt
+\abovedisplayshortskip=0mm plus6pt minus 2pt
+\belowdisplayshortskip=2 mm plus4pt minus 4pt
+\def\@listi{\topsep 4pt plus 2pt minus 2pt}}
+
+\def\footnotesize{\@setsize\footnotesize{10pt}\viiipt\@viiipt
+\abovedisplayskip=2.5 mm plus5pt minus 3pt
+\belowdisplayskip=2.5 mm plus5pt minus 3pt
+\abovedisplayshortskip=0mm plus6pt minus 2pt
+\belowdisplayshortskip=2 mm plus4pt minus 4pt
+\def\@listi{\topsep 4pt plus 2pt minus 2pt}}
+
+\def\scriptsize{\@setsize\scriptsize{8.4pt}\viipt\@viipt}
+
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{13.2pt}\xipt\@xipt}
+\def\Large{\@setsize\Large{14.4pt}\xiipt\@xiipt}
+\def\LARGE{\@setsize\LARGE{16pt}\xivpt\@xivpt}
+\def\huge{\@setsize\huge{22pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\@normalsize
+
+\if@twoside
+ \oddsidemargin 44pt
+ \evensidemargin 82pt
+ \marginparwidth 107pt
+\else \oddsidemargin 63pt \evensidemargin 63pt
+ \marginparwidth 90pt
+\fi
+\marginparsep 11pt
+\topmargin 11pt \headheight 12pt \headsep 13.66pt
+\footheight 12pt \footskip 30pt
+\textwidth 12.2cm
+\textheight 19.4cm
+\columnsep 1cc \columnseprule 0pt
+
+\footnotesep 7.7pt
+\skip\footins 9pt plus 4pt minus 2pt
+\floatsep 12pt plus 2pt minus 2pt
+\textfloatsep 8mm plus 2pt minus 4pt
+\intextsep 8mm plus 2pt minus 2pt
+\@maxsep 8mm
+
+\dblfloatsep 12pt plus 2pt minus 2pt
+\dbltextfloatsep 20pt plus 2pt minus 4pt
+\@dblmaxsep 20pt
+
+\@fptop 0pt plus 1fil \@fpsep 8pt plus 2fil \@fpbot 0pt plus 1fil
+\@dblfptop0pt plus1fil \@dblfpsep8pt plus2fil\@dblfpbot 0pt plus1fil
+\marginparpush 5pt
+
+\parskip 0pt plus 1pt \parindent 1.5em \topsep 8pt plus 2pt minus 4pt
+\partopsep 2pt plus 1pt minus 1pt \itemsep \z@
+\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301
+\@beginparpenalty-\@lowpenalty\@endparpenalty -\@lowpenalty\@itempenalty
+-\@lowpenalty
+
+\def\vec#1{\mathchoice{\mbox{\boldmath$\displaystyle\bf#1$}}
+{\mbox{\boldmath$\textstyle\bf#1$}}
+{\mbox{\boldmath$\scriptstyle\bf#1$}}
+{\mbox{\boldmath$\scriptscriptstyle\bf#1$}}}
+
+\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
+ \def\@svsec{}\else
+ \refstepcounter{#1}\edef\@svsec{\csname the#1\endcsname. }\fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #6\relax
+ \noindent{\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\par}
+ \endgroup
+ \csname #1mark\endcsname{#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #7}\else
+ \def\@svsechd{#6\hskip #3\@svsec #8\csname #1mark\endcsname
+ {#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #7}}\fi
+ \@xsect{#5}}
+
+\def\part{\par \addvspace{4ex} \@afterindentfalse \secdef\@part\@spart}
+
+\def\@part[#1]#2{\ifnum \c@secnumdepth >\m@ne \refstepcounter{part}
+\addcontentsline{toc}{part}{\thepart \hspace{1em}#1}\else
+\addcontentsline{toc}{part}{#1}\fi { \parindent 0pt \raggedright
+ \ifnum \c@secnumdepth >\m@ne \Large \bf
+ Part\thepart\par\nobreak\fi\huge
+\bf #2\markboth{}{}\par } \nobreak \vskip 3ex \@afterheading }
+
+\def\@spart#1{{\parindent 0pt \raggedright
+ \huge \bf
+ #1\par} \nobreak \vskip 3ex \@afterheading }
+
+\def\section{\@startsection {section}{1}{\z@}{-18pt plus -4pt minus
+-4pt}{12pt plus 4pt minus 4pt}{\normalsize\bf\boldmath
+\pretolerance=10000\relax\rightskip=0pt plus8em}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-18pt plus-4pt minus
+ -4pt}{8pt plus 4pt minus 4pt}{\normalsize\it
+\pretolerance=10000\relax\rightskip=0pt plus8em}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-18pt plus-4pt
+ minus -4pt}{-0.5em plus -.22em minus -0.1em}{\normalsize\bf\boldmath}}
+\def\paragraph{\@startsection{paragraph}{4}{\z@}{-12pt plus -4pt minus
+ -4pt}{-0.5em plus -.22em minus -0.1em}{\normalsize\it}}
+\def\subparagraph#1{\typeout{JNS Warning: You should not use
+\protect\subparagraph \space in this style.}\vskip0.5cm
+You should not use $\backslash${\tt subparagraph} in this
+style.\vskip0.5cm}
+
+\setcounter{secnumdepth}{2}
+
+\def\appendix{\par
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \def\thesection{\Alph{section}}}
+
+% Define \keywords
+\def\keywords{\par\vspace{12pt}\noindent{\bf Key words: }\ignorespaces}
+
+% Define \acknowledgements
+\def\acknowledgements{\vspace{12pt}\noindent{\em Acknowledgements.\/ }}
+
+% The `abstract' environment has been renamed to `abstr' so a new environment
+% `abstract' can be defined in terms of the old one.
+\def\abstr{{\noindent \bf Summary. }%
+\ignorespaces}
+\def\endabstr{\relax}
+
+\newenvironment{abstract}{\begin{abstr}}{\end{abstr}}
+
+\leftmargini 17pt \leftmarginii 17pt
+\leftmarginiii 17pt \leftmarginiv 17pt
+\leftmarginv 10pt \leftmarginvi 10pt
+\leftmargin\leftmargini \labelwidth\leftmargini
+\advance\labelwidth-\labelsep
+\labelsep 5pt
+\parsep 0pt plus 1pt
+\def\@listi{\leftmargin\leftmargini}
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 0pt plus 1pt}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 0pt plus 1pt}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep
+ \topsep 0pt plus 1pt}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep
+ \topsep 0pt plus 1pt}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep
+ \topsep 0pt plus 1pt}
+
+\def\labelenumi{\arabic{enumi}.}
+\def\theenumi{\arabic{enumi}}
+\def\labelenumii{(\alph{enumii})}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+\def\labelenumiii{\roman{enumiii}.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+\def\labelenumiv{\Alph{enumiv}.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+\def\labelitemi{\bf --}
+\def\labelitemii{$\bullet$}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+\def\quotation{\list{}{\listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin}\item[]}
+\let\endquotation=\endlist
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+\let\enddescription\endlist
+
+\def\theequation{\arabic{equation}}
+
+\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{empty}\c@page\z@}
+\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi}
+
+\arraycolsep 1.4pt \tabcolsep 1.4pt \arrayrulewidth .4pt \doublerulesep
+2pt
+\tabbingsep \labelsep
+
+\skip\@mpfootins = \skip\footins
+\fboxsep = 3pt \fboxrule = .4pt
+
+\newcounter{part}
+\newcounter {section}
+\newcounter {subsection}[section]
+\newcounter {subsubsection}[subsection]
+\newcounter {paragraph}[subsubsection]
+
+\def\thepart{\Roman{part}}
+\def\thesection {\arabic{section}}
+\def\thesubsection {\thesection.\arabic{subsection}}
+\def\thesubsubsection {\thesubsection.\arabic{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{3}
+
+\def\tableofcontents{\section*{Table of Contents}
+ \@starttoc{toc}}
+\def\l@part#1#2{\addpenalty{\@secpenalty}
+ \addvspace{2.25em plus 1pt} \begingroup
+ \@tempdima 3em \parindent \z@ \rightskip \@pnumwidth \parfillskip
+-\@pnumwidth
+ {\Large \bf \leavevmode #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
+ \nobreak \endgroup}
+%
+\def\numberline#1{\advance\hangindent by\@tempdima%
+\hbox to\@tempdima{\hss#1\enspace}}
+%
+\def\bf@dottedtocline#1#2#3#4#5{\ifnum #1>\c@tocdepth \else
+ \vskip \z@ plus .2pt
+ {\leftskip #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip
+ \parindent #2\relax\@afterindenttrue
+ \interlinepenalty\@M
+ \leavevmode
+ \@tempdima #3\relax \advance\leftskip \@tempdima \hbox{}\hskip -\leftskip
+{\bf#4}\nobreak\leaders\hbox{$\m@th \mkern \@dotsep mu.\mkern \@dotsep
+ mu$}\hfill \nobreak \hbox to\@pnumwidth{\hfil\rm #5}\par}\fi}
+%
+\def\l@section{\vskip2mm\bf@dottedtocline{1}{0em}{1.7em}}
+\def\l@subsection{\@dottedtocline{2}{1.7em}{2.3em}}
+\def\l@subsubsection{\@dottedtocline{3}{4em}{2em}}
+\def\l@paragraph{\@dottedtocline{4}{6em}{2em}}
+\def\l@subparagraph{\@dottedtocline{5}{8em}{2em}}
+\def\listoffigures{\section*{List of Figures\markboth
+ {List of Figures}{List of Figures}}\@starttoc{lof}}
+\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
+\def\listoftables{\section*{List of Tables\markboth
+ {List of Tables}{List of Tables}}\@starttoc{lot}}
+\let\l@table\l@figure
+
+\def\endthebibliography{\endlist\normalsize}
+
+\newif\if@restonecol
+\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\section*{Index}]
+ \markboth{Index}{Index}\thispagestyle{plain}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+\def\@idxitem{\par\hangindent 40pt}
+\def\subitem{\par\hangindent 40pt \hspace*{20pt}}
+\def\subsubitem{\par\hangindent 40pt \hspace*{30pt}}
+\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
+\def\indexspace{\par \vskip 10pt plus 5pt minus 3pt\relax}
+
+\def\footnoterule{\kern-3\p@\hrule width 2 true cm\kern 2.6\p@}
+
+\long\def\@makefntext#1{\@setpar{\@@par\@tempdima \hsize
+ \advance\@tempdima-1em\parshape \@ne 1em\@tempdima}\par
+ \parindent 1em\noindent \hbox to \z@{\hss$^{\@thefnmark}$\ }#1}
+
+\setcounter{topnumber}{2}
+\def\topfraction{.9}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.3}
+\setcounter{totalnumber}{3}
+\def\textfraction{.15}
+\def\floatpagefraction{.85}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.85}
+\def\dblfloatpagefraction{.85}
+
+\long\def\@makecaption#1#2{
+ \vskip 10pt
+ \setbox\@tempboxa\hbox{{\bf #1} #2}
+ \ifdim \wd\@tempboxa >\hsize \unhbox\@tempboxa\par \else \hbox
+to\hsize{\box\@tempboxa\hfil}
+ \fi\vskip5pt}
+
+\long\def\@caption#1[#2]#3{\addcontentsline{\csname
+ ext@#1\endcsname}{#1}{\protect\numberline{\csname
+ the#1\endcsname}{\ignorespaces #2}}\par
+ \begingroup
+ \@parboxrestore
+ \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par
+ \endgroup}
+
+\newcounter{figure}
+\def\thefigure{\@arabic\c@figure}
+
+\def\fps@figure{htbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{Fig.\thinspace\thefigure.}
+\def\figure{\@float{figure}\small\rm}
+\def\endfigure{\vskip-5pt\end@float}
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+
+\newcounter{table}
+\def\thetable{\@arabic\c@table}
+\def\fps@table{htbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{Table \thetable.}
+\def\table{\@float{table}\small\rm}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+
+% LaTeX does not provide a command to enter the authors institute
+% addresses. The \institute command is defined here.
+
+\newcounter{@inst}
+\newcounter{@auth}
+\newdimen\instindent
+
+\def\institute#1{\gdef\@institute{#1}}
+
+\def\institutename{\par
+ \begingroup
+ \parskip=0pt
+ \setcounter{@inst}{1}%
+ \def\and{\par\stepcounter{@inst}%
+ \hangindent\instindent\hangafter=0\noindent
+ \llap{$^{\the@inst}$\enspace}\ignorespaces}%
+ \setbox0=\vbox{\def\thanks##1{}\@institute}%
+ \ifnum\c@@inst>9\relax\setbox0=\hbox{$^{88}$\enspace}%
+ \else\setbox0=\hbox{$^{8}$\enspace}\fi
+ \instindent=\wd0\relax
+ \ifnum\c@@inst=1\relax\else
+ \setcounter{footnote}{\c@@inst}%
+ \setcounter{@inst}{1}%
+ \hangindent\instindent\hangafter=0\noindent
+ \llap{$^{\the@inst}$\enspace}\fi\ignorespaces
+ \@institute\par
+ \endgroup}
+
+\def\@thanks{}
+
+\def\@fnsymbol#1{\ifcase#1\or\star\or{\star\star}\or{\star\star\star}%
+ \or \dagger\or \ddagger\or
+ \mathchar "278\or \mathchar "27B\or \|\or **\or \dagger\dagger
+ \or \ddagger\ddagger\else\@ctrerr\fi\relax}
+
+\def\inst#1{\unskip\/$^{#1}$}
+
+\def\subtitle#1{\gdef\@subtitle{#1}}
+\def\@subtitle{}
+
+\def\titlerunning#1{\gdef\@titlerunning{#1}}
+\def\@titlerunning{}
+
+\def\authorrunning#1{\gdef\@authorrunning{#1}}
+\def\@authorrunning{}
+
+\def\Logo{\setbox254=\hbox{ THE JOURNAL OF }%
+\vbox{\hrule\hbox{\vrule\vbox{\kern3pt
+\copy254
+\hbox to\wd254{\hfil NONLINEAR\hfil}
+\hbox to\wd254{\hfil SCIENCE\hfil}
+\hbox to\wd254{\hfil\number\day.\number\month.\number\year\hfil}
+\kern3pt}\vrule}\hrule}}
+\def\makeheadbox{\hbox to\hsize{\hfil
+\Logo}}
+
+\def\maketitle{\par
+ \begingroup
+ \parindent=\z@
+ \def\thefootnote{\fnsymbol{footnote}}
+ \if@twocolumn
+ \twocolumn[\@maketitle]
+ \else \newpage
+ \global\@topnum\z@ \@maketitle \fi\thispagestyle{empty}\@thanks
+ \endgroup
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\gdef\@subtitle{}%
+ \let\thanks\relax}
+
+\def\@maketitle{\newpage
+ \rm
+ \makeheadbox
+ {\LARGE \bf\boldmath
+ \pretolerance=10000
+ \rightskip=0pt plus 4cm
+ \vskip2.1cm
+ \@title \par}\vskip .4cm
+\if!\@subtitle!\else {\bf\boldmath
+ \vskip -.2cm
+ \pretolerance=10000
+ \rightskip=0pt plus 3cm
+ \@subtitle \par}\vskip .4cm\fi
+{\bf\@author\vskip.1cm
+\def\\{ }\def\inst##1{}\def\thanks##1{}\def\and{}%
+\setcounter{@auth}{1}%
+\if!\@titlerunning!\else\def\@title{\@titlerunning}\fi
+\if!\@authorrunning!\else\def\@author{\@authorrunning}\fi
+\xdef\@author{\@author\unskip\unskip}%
+\xdef\@title{\ignorespaces\@title}%
+\instindent=\hsize\advance\instindent by-1cm\relax
+\setbox0=\hbox{\small\@author}\ifdim\wd0>\instindent
+\typeout{Warning: The running head produced by the
+\protect\author \space command}\typeout{exceeds the pagewidth,
+please supply a short form with \protect\authorrunning.}%
+\def\@author{Author(s) suppressed due to excessive length,
+please use {\tt$\backslash$authorrunning}.}\fi
+\setbox0=\hbox{\small\@title}\ifdim\wd0>\instindent
+\typeout{Warning: The running head produced by the
+\protect\title \space command}\typeout{exceeds the pagewidth,
+please supply a short form with \protect\titlerunning.}%
+\def\@title{Title suppressed due to excessive length,
+please use {\tt$\backslash$titlerunning}.}\fi
+\markboth{\@author}{\@title}}
+ {\small\rm\institutename
+ \par
+ \vskip 0.3cm
+ \@date
+ \par}
+ \vskip 0.8cm}
+
+\mark{{}{}}
+
+\if@twoside
+\def\ps@headings{\def\@oddfoot{}\def\@evenfoot{}%
+\def\@evenhead{\small\rm
+\thepage\hfil\leftmark}\def\@oddhead{\hbox{}\small\rm\rightmark \hfil
+\thepage}\def\sectionmark##1{}%
+\def\subsectionmark##1{}}
+\else \def\ps@headings{\def\@oddfoot{}\def\@evenfoot{}\def
+\@oddhead{\hbox
+{}\sl \rightmark \hfil \rm\thepage}\def\sectionmark##1{\markright
+{\uppercase{\ifnum \c@secnumdepth >\z@
+ \thesection\hskip 1em\relax \fi ##1}}}}
+\fi
+\def\ps@myheadings{\def\@oddhead{\hbox{}\sl\rightmark \hfil
+\rm\thepage}\def\@oddfoot{}\def\@evenhead{\rm \thepage\hfil\sl
+\leftmark\hbox
+{}}\def\@evenfoot{}\def\sectionmark##1{}\def\subsectionmark##1{}}
+
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+
+\ps@headings \pagenumbering{arabic} \onecolumn
+\if@twoside\else\raggedbottom\fi
+
+% new environments and theorems
+% borrowed form the LTMP-style of Springer-Verlag
+% designed by Dr. Christoph Ender
+%
+% define the new theorem like environments
+% define a new style of environments where it is possible to define
+% the font % used as the theorem name and the fontfamily for the text.
+%
+% \newstytheorem{name}{thefont}{txtfont}{Text}[Counter]
+% \newstytheorem{name}{thefont}{txtfont}[oldname]{Text}
+%
+% #1 - name of theorem
+% #2 - theorem font
+% #3 - text font
+%
+\def\newstytheorem#1#2#3{%
+\@ifnextchar[{\che@othm{#1}{#2}{#3}}{\che@nthm{#1}{#2}{#3}}}
+%
+% #1 - name of theorem
+% #2 - theorem font
+% #3 - text font
+% #4 - text string of theorem name
+%
+\def\che@nthm#1#2#3#4{%
+\@ifnextchar[{\che@xnthm{#1}{#2}{#3}{#4}}{\che@ynthm{#1}{#2}{#3}{#4}}}
+%
+% #1 - name of theorem
+% #2 - theorem font
+% #3 - text font
+% #4 - text string of thorem name
+% #5 - add theorem counter to reset list of another counter
+%
+\def\che@xnthm#1#2#3#4[#5]{\expandafter
+\@ifdefinable\csname #1\endcsname
+{\@definecounter{#1}\if@envcountreset\@addtoreset{#1}{#5}\fi
+\expandafter\xdef\csname the#1\endcsname{\@thmcounter{#1}}%
+\global\@namedef{#1}{\che@thm{#1}{#4}{#2}{#3}}\global
+\@namedef{end#1}{\@endtheorem}}}
+%
+% #1 - name of theorem
+% #2 - theorem font
+% #3 - text font
+% #4 - text string of thorem name
+%
+\def\che@ynthm#1#2#3#4{\expandafter\@ifdefinable\csname #1\endcsname
+{\@definecounter{#1}%
+\expandafter\xdef\csname the#1\endcsname{\@thmcounter{#1}}%
+\global\@namedef{#1}{\che@thm{#1}{#2}{#3}{#4}}\global
+\@namedef{end#1}{\@endtheorem}}}
+%
+% change oldthm if oldname in specification is '*'
+% then don't use a counter
+% #1 - countername
+% #2 - theorem font
+% #3 - text font
+% #4 - counter used
+% #5 - string containing theorem name to print
+%
+\def\che@othm#1#2#3[#4]#5{\expandafter\@ifdefinable
+\csname#1\endcsname%
+{\@@othm@{#1}{#2}{#3}{#4}{#5}\global\@namedef{end#1}{\@endtheorem}}}
+%
+\def\@@othm@#1#2#3#4#5{\if *#4{\global\@namedef{the#1}{\relax}
+\global\@namedef{#1}{\@bthm@{}{#5}{#2}{#3}}}\else
+{\global\@namedef{the#1}{\@nameuse{the#4}}% define the counter
+\global\@namedef{#1}{\che@thm{#4}{#5}{#2}{#3}}}\fi}
+%
+% new defs for theorem environment che 17-MAR-1989
+% it improves the option possible
+%
+% #1 - countername = theorem name
+% #2 - string containing theorem name to print
+% #3 - theorem font
+% #4 - text font
+\def\che@thm#1#2#3#4{\@ifnextchar({\@athm{#1}{#2}{#3}{#4}}{%
+\@ifnextchar *{\@bthm{#1}{#2}{#3}{#4}}%
+{\@@thm{#1}{#2}{#3}{#4}}}}
+%
+% \begin{thm}(A.1)[test] results in:
+% \end{thm} thm A.1 (test) ....
+% #1 - theorem
+% #2 - string of theorem name
+% #3 - font for theorem name and label
+% #4 - Text font
+% #5 - is the new label
+% #6 - optional string
+%
+\def\@athm#1#2#3#4(#5){\@ifnextchar[{%
+\@aythm{#1}{#2}{#3}{#4}{#5}}{\@axthm{#1}{#2}{#3}{#4}{#5}}}
+\def\@axthm#1#2#3#4#5{\@@locthmlab{#1}{#5}%
+\@begintheorem{#2}{#5}{#3}{#4}\ignorespaces}
+\def\@aythm#1#2#3#4#5[#6]{\@@locthmlab{#1}{#5}%
+\fuh@opargbegintheorem{#2}{#5}{#6}{#3}{#4}\ignorespaces}
+%
+% \begin{thm}*[xytest] results in:
+% \end{thm} thm (xytest) ....
+% #1 - theorem
+% #2 - string of theorem name
+% #3 - font for theorem name and label
+% #4 - Text font
+% #5 - optional string
+%
+\def\@bthm@#1#2#3#4{\@ifnextchar[{\@bythm{#1}{#2}{#3}{#4}}{%
+\@bxthm{#1}{#2}{#3}{#4}}}
+\def\@bthm#1#2#3#4*{\@ifnextchar[{\@bythm{#1}{#2}{#3}{#4}}{%
+\@bxthm{#1}{#2}{#3}{#4}}}
+\def\@bxthm#1#2#3#4{\if !#1!\relax\else\@@locthmlab{#1}{}\fi
+\@@begintheorem{#2}{#3}{#4}\ignorespaces}
+\def\@bythm#1#2#3#4[#5]{%
+\@@opargbegintheorem{#2}{#3}{#4}{#5}\ignorespaces}
+%
+% define local label
+% if no number or a user specified label occured
+%
+\def\@@locthmlab#1#2{\expandafter\def\csname the#1\endcsname{#2}
+\let\@chetempa\protect\def\protect{\noexpand\protect\noexpand}%
+\edef\@currentlabel{\csname p@#1\endcsname\csname the#1\endcsname}%
+\let\protect\@chetempa}
+%
+% #1 - counter = theorem name
+% #2 - string with name
+% #3 - font for theorem name and label
+% #4 - font for text
+\def\@@thm#1#2#3#4{\refstepcounter
+ {#1}\@ifnextchar[{\che@ythm{#1}{#2}{#3}{#4}}{%
+ \che@xthm{#1}{#2}{#3}{#4}}}
+%
+\def\che@xthm#1#2#3#4{\che@begintheorem{#2}{\csname
+the#1\endcsname}{#3}{#4}\ignorespaces}
+\def\che@ythm#1#2#3#4[#5]{\che@opargbegintheorem{#2}{\csname
+ the#1\endcsname}{#5}{#3}{#4}\ignorespaces}
+%
+% #1 - name of theorem
+% #2 - label string
+% #3 - font for name and lable
+% #4 - text fomt
+%
+\def\che@begintheorem#1#2#3#4{#4\trivlist\item[#3 #1\ts #2.]}
+%
+% #1 - name of theorem
+% #2 - label string
+% #3 - additonal text
+% #4 - font for name and lable
+% #5 - text fomt
+%
+\def\che@opargbegintheorem#1#2#3#4#5{#5 \trivlist
+\item[#4 #1\ts #2\ #3.]}
+%
+\def\fuh@opargbegintheorem#1#2#3{\it \trivlist
+ \item[\hskip \labelsep{\bf #1\ #2\ (#3).}]}
+%
+\def\@@begintheorem#1#2#3{#3\trivlist\item[#2 #1.]}
+\def\@@opargbegintheorem#1#2#3#4{#3\trivlist\item[#2 #1 #4.]}
+
+\newstytheorem{theorem}{\bf}{\it}{Theorem}[section]
+\newstytheorem{example}{\it}{\rm}{Example}[section]
+\newstytheorem{proposition}{\bf}{\it}[theorem]{Proposition}
+\newstytheorem{corollary}{\bf}{\it}[theorem]{Corollary}
+\newstytheorem{lemma}{\bf}{\it}[theorem]{Lemma}
+\newstytheorem{proof}{\it}{\rm}[*]{Proof}
+\newstytheorem{definition}{\bf}{\rm}[theorem]{Definition}
+\newstytheorem{remark}{\it}{\rm}[*]{Remark}
+\newstytheorem{exercise}{\it}{\rm}[theorem]{Exercise}
+\newstytheorem{problem}{\it}{\rm}[theorem]{Problem}
+\newstytheorem{solution}{\it}{\rm}[theorem]{Solution}
+\newstytheorem{note}{\it}{\rm}[theorem]{Note}
+\newstytheorem{question}{\it}{\rm}[theorem]{Question}
+
+\def\squareforqed{\hbox{\rlap{$\sqcap$}$\sqcup$}}
+\def\qed{\ifmmode\squareforqed\else{\unskip\nobreak\hfil
+\penalty50\hskip1em\null\nobreak\hfil\squareforqed
+\parfillskip=0pt\finalhyphendemerits=0\endgraf}\fi}
+
+\def\getsto{\mathrel{\mathchoice {\vcenter{\offinterlineskip
+\halign{\hfil
+$\displaystyle##$\hfil\cr\gets\cr\to\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr\gets
+\cr\to\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr\gets
+\cr\to\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+\gets\cr\to\cr}}}}}
+\def\lid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr<\cr\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr<\cr
+\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr<\cr
+\noalign{\vskip1pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+<\cr
+\noalign{\vskip0.9pt}=\cr}}}}}
+\def\gid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr>\cr\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr>\cr
+\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr>\cr
+\noalign{\vskip1pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+>\cr
+\noalign{\vskip0.9pt}=\cr}}}}}
+\def\grole{\mathrel{\mathchoice {\vcenter{\offinterlineskip
+\halign{\hfil
+$\displaystyle##$\hfil\cr>\cr\noalign{\vskip-1pt}<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr
+>\cr\noalign{\vskip-1pt}<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr
+>\cr\noalign{\vskip-0.8pt}<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+>\cr\noalign{\vskip-0.3pt}<\cr}}}}}
+\def\bbbr{{\rm I\!R}} %reelle Zahlen
+\def\bbbm{{\rm I\!M}}
+\def\bbbn{{\rm I\!N}} %natuerliche Zahlen
+\def\bbbf{{\rm I\!F}}
+\def\bbbh{{\rm I\!H}}
+\def\bbbk{{\rm I\!K}}
+\def\bbbp{{\rm I\!P}}
+\def\bbbone{{\mathchoice {\rm 1\mskip-4mu l} {\rm 1\mskip-4mu l}
+{\rm 1\mskip-4.5mu l} {\rm 1\mskip-5mu l}}}
+\def\bbbc{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}}}
+\def\bbbq{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm
+Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle\rm Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle\rm Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}}}}
+\def\bbbt{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm
+T$}\hbox{\hbox to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle\rm T$}\hbox{\hbox
+to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle\rm T$}\hbox{\hbox
+to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm T$}\hbox{\hbox
+to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}}}
+\def\bbbs{{\mathchoice
+{\setbox0=\hbox{$\displaystyle \rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox
+to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle \rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox
+to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle \rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox
+to0pt{\kern0.5\wd0\vrule height0.45\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.4\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox
+to0pt{\kern0.55\wd0\vrule height0.45\ht0\hss}\box0}}}}
+\def\bbbz{{\mathchoice {\hbox{$\sf\textstyle Z\kern-0.4em Z$}}
+{\hbox{$\sf\textstyle Z\kern-0.4em Z$}}
+{\hbox{$\sf\scriptstyle Z\kern-0.3em Z$}}
+{\hbox{$\sf\scriptscriptstyle Z\kern-0.2em Z$}}}}
+\def\ts{\thinspace}
+
+\def\typeset{\vfill\small\noindent This article was processed using
+the \LaTeX{} macro package with JNS style\par}
+
+\def\enddocument{\par\typeset
+\@checkend{document}\clearpage\begingroup
+\if@filesw \immediate\closeout\@mainaux
+\def\global\@namedef##1##2{}\def\newlabel{\@testdef r}%
+\def\bibcite{\@testdef b}\@tempswafalse\makeatletter\input \jobname.aux
+\if@tempswa \@warning{Label(s) may have changed. Rerun to get
+cross-references right}\fi\fi\endgroup\deadcycles\z@\@@end}
diff --git a/obsolete/macros/latex209/contrib/springer/jnsl/jnsl.dem b/obsolete/macros/latex209/contrib/springer/jnsl/jnsl.dem
new file mode 100644
index 0000000000..8a082828dc
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/jnsl/jnsl.dem
@@ -0,0 +1,354 @@
+% This is JNSL.DEM the demonstration file of
+% the LaTeX macro package from Springer-Verlag
+% for the Journal of Nonlinear Science
+% version of 16 July 1990
+\def\12{{1\ov 2}}
+\def\al{\alpha}
+\def\Aun{A_\un}
+\def\aun{a_\un}
+\def\bullet{\cdot}
+\def\Bun{B_\un}
+\def\bun{b_\un}
+\def\de{\delta}
+\def\dx{\dot x}
+\def\ep{\varepsilon}
+\def\fa{\forall}
+\def\for{{\rm for}}
+\def\Lai{\Lambda}
+\def\lb{\left[}
+\def\lg{\left\{}
+\def\degr{\hbox{$^\circ$}}
+\def\arcmin{\hbox{$^\prime$}}
+\def\arcsec{\hbox{$^{\prime\prime}$}}
+\def\liminfuu{{\rm lim inf}\,}
+\def\liminfu{\mathop{\vphantom{\tst\sum}\hbox{\liminfuu}}}
+\def\limsupuu{{\rm lim sup}\,}
+\def\limsupu{\mathop{\vphantom{\tst\sum}\hbox{\limsupuu}}}
+\def\lr{\left(}
+\def\lss{\left\|}
+\def\Min{{\rm Min\,}}
+\def\NN{\bbbn}
+\def\ol{\overline}
+\def\om{\omega}
+\def\ov{\over}
+\def\rb{\right]}
+\def\rg{\right\}}
+\def\RRn{\bbbr^{2n}}
+\def\RR{\bbbr}
+\def\rr{\right)}
+\def\rss{\right\|}
+\def\sm{\setminus}
+\def\tst{\textstyle}
+\def\tx{\wt x}
+\def\un{\infty}
+\def\wt{\widetilde}
+\def\ZZ{\bbbz}
+\documentstyle{jns}
+\begin{document}
+
+\title{Haupttitel 14 pt halbfett/Title boldface -- 14/16}
+\titlerunning{Expression of Cellular Oncogenes}
+\subtitle{Untertitel 10 pt halbfett/Subtitle boldface -- 10/11}
+
+\author{Ivar Ekeland\inst{1} and Roger Temam\inst{2}}
+\authorrunning{R. M\"uller}
+
+\institute{Princeton University, Princeton NJ 08544, USA
+\and
+Universit\'e de Paris-Sud,
+Laboratoire d'Analyse Num\'erique, B\^atiment 425,\\
+F-91405 Orsay Cedex, France}
+
+\date{Received June 5, 1989}
+
+\maketitle
+
+\begin{abstract}
+A new variant of the multi-grid algorithms is presented. It uses
+multiple coarse-grid corrections with particularly associated
+prolongations and restrictions. In this paper the robustness with
+respect to anisotropic problems is considered.
+
+\keywords multi-grid method -- coarse--grid correction --
+singular perturbation -- robustness.
+\end{abstract}
+
+\section{The Anisotropic Equation and Standard Multi-Grid Methods}
+\subsection{Introduction}
+Multi-grid methods are known as very fast solvers of a large class of
+discretised partial differential equations. However, the multi-grid
+method cannot be understood as a fixed algorithm. Usually, the
+components of the multi-grid iteration have to be adapted to the given
+problem and sometimes the problems are modified in order to make them
+acceptable for multi-grid methods. In particular, the smoothing
+iteration is the most delicated part of the multi-grid process.
+
+An iteration is called a {\em robust} one, if it works for a sufficient
+large class of problems. Attempts have been made to construct robust
+multi-grid iterations by means of sophisticated smoothing processes\dots
+\newpage
+With this chapter, the preliminaries are over, and we begin the search
+for periodic solutions to Hamiltonian systems. All this will be done in
+the convex case; that is, we shall study the boundary-value problem
+\begin{eqnarray*}\dot x&=&JH' (t,x)\\ x(0) &=& x(T)
+\end{eqnarray*}
+with $H(t,\bullet )$ a convex function of $x$, going to $+\un$ when
+$\lss x\rss \to \un$.
+
+\subsection{Autonomous Systems}
+In this section, we will consider the case when the Hamiltonian $H(x)$
+is autonomous. For the sake of simplicity, we shall also assume that it
+is $C^1$.
+
+We shall first consider the question of nontriviality, within the
+general framework of $\lr \Aun , \Bun\rr$-subquadratic Hamiltonians. In
+the second subsection, we shall look into the special case when $H$ is
+$\lr 0,\bun\rr$-subquadratic, and we shall try to derive additional
+information.
+\subsubsection{ The General Case: Nontriviality.}
+We assume that $H$ is $\lr \Aun , \Bun \rr$-sub\-qua\-dra\-tic at infinity,
+for some constant symmetric matrices $\Aun$ and $\Bun$, with $\Bun
+-\Aun$ positive definite. Set:
+\begin{eqnarray}
+\gamma :&=&{\rm smallest\ eigenvalue\ of}\ \ \Bun - \Aun \\
+\lambda : &=& {\rm largest\ negative\ eigenvalue\ of}\ \ J {d\ov dt}
++\Aun\ . \end{eqnarray}
+
+Theorem 21 tells us that if $\lambda +\gamma < 0$, the boundary-value
+problem:
+\begin{equation}\begin{array}{rcl} \dx&=&JH' (x)\\
+x(0)&=&x (T)\end{array}\end{equation}
+has at least one solution $\ol x$, which is found by minimizing the dual
+action functional:
+\begin{equation} \psi (u) = \int_o^T \lb \12 \lr \Lai_o^{-1} u,u\rr + N^\ast (-u)\rb
+dt\end{equation}
+
+\noindent on the range of $\Lai$, which is a subspace $R (\Lai )\sb L^2$ with
+finite codimension. Here
+\begin{equation} N(x) := H(x) - \12 \lr \Aun x,x\rr\end{equation}
+is a convex function, and
+\begin{equation} N(x) \le \12 \lr \lr \Bun - \Aun\rr x,x\rr + c\ \ \ \fa x\
+.\end{equation}
+
+\begin{proposition} Assume $H'(0)=0$ and $ H(0)=0$. Set:
+\begin{equation} \de := \liminfu_{x\to 0} 2 N (x) \lss x\rss^{-2}\ .
+\label{eq:one}
+\end{equation}
+
+If $\gamma < - \lambda < \de$, the solution $\ol u$ is non-zero:
+\begin{equation} \ol x (t) \ne 0\ \ \ \fa t\ .\end{equation}
+\end{proposition}
+\begin{proof} Condition (\ref{eq:one}) means that, for every $\de ' >
+\de$, there is some $\ep > 0$ such that
+\begin{equation} \lss x\rss \le \ep \Rightarrow N (x) \le {\de '\ov 2} \lss x\rss^2\
+.\end{equation}
+
+It is an exercise in convex analysis, into which we shall not go, to
+show that this implies that there is an $\eta > 0$ such that
+\begin{equation} f\lss x\rss \le \eta \Rightarrow N^\ast (y) \le {1\ov 2\de '} \lss
+y\rss^2\ .\label{eq:two}\end{equation}
+
+\begin{figure}
+\vspace{2.5cm}
+\caption{This is the caption of the figure displaying a white eagle and
+a white horse on a snow field}
+\end{figure}
+
+Since $u_1$ is a smooth function, we will have $\lss hu_1\rss_\un \le
+\eta$ for $h$ small enough, and inequality (\ref{eq:two}) will hold,
+yielding thereby:
+\begin{equation} \psi (hu_1) \le {h^2\ov 2} {1\ov \lambda} \lss u_1 \rss_2^2 + {h^2\ov 2}
+{1\ov \de '} \lss u_1\rss^2\ .\end{equation}
+
+If we choose $\de '$ close enough to $\de$, the quantity $\lr {1\ov \lambda}
++ {1\ov \de '}\rr$ will be negative, and we end up with
+\begin{equation} \psi (hu_1) < 0\ \ \ \ \ \for\
+\ h\ne 0\ \ {\rm small}\ .\end{equation}
+
+On the other hand, we check directly that $\psi (0) = 0$. This shows
+that 0 cannot be a minimizer of $\psi$, not even a local one. So $\ol u
+\ne 0$ and $\ol u \ne \Lai_o^{-1} (0) = 0$. \qed
+\end{proof}
+\begin{corollary} Assume $H$ is $C^2$ and $\lr \aun
+,\bun\rr$-subquadratic at infinity. Let
+$\xi_1,\allowbreak\dots,\allowbreak\xi_N$ be the
+equilibria, that is, the solutions of $H' (\xi ) = 0$. Denote by $\om_k$
+the smallest eigenvalue of $H'' \lr \xi_k\rr$, and set:
+\begin{equation} \om : = \Min \lg \om_1 , \dots , \om_k\rg\ .\end{equation}
+If:
+\begin{equation} {T\ov 2\pi} \bun < - E \lb - {T\ov 2\pi}\aun\rb < {T\ov
+2\pi}\om\label{eq:three}\end{equation}
+then minimization of $\psi$ yields a non-constant $T$-periodic solution
+$\ol x$.\end{corollary}
+
+We recall once more that by the integer part $E [\al ]$ of $\al \in
+\RR$, we mean the $a\in \ZZ$ such that $a< \al \le a+1$. For instance,
+if we take $\aun = 0$, Corollary 2 tells us that $\ol x$ exists and is
+non-constant provided that:
+
+\begin{equation} {T\ov 2\pi} \bun < 1 < {T\ov 2\pi}\end{equation}
+or
+\begin{equation} T\in \lr {2\pi\ov \om},{2\pi\ov \bun}\rr\ .
+\label{eq:four}\end{equation}
+
+\begin{proof} The spectrum of $\Lai$ is ${2\pi\ov T} \ZZ +\aun$. The
+largest negative eigenvalue $\lambda$ is given by ${2\pi\ov T}k_o +\aun$,
+where
+\begin{equation} {2\pi\ov T}k_o + \aun < 0\le {2\pi\ov T} (k_o +1) + \aun\
+.\end{equation}
+Hence:
+\begin{equation} k_o = E \lb - {T\ov 2\pi} \aun\rb \ .\end{equation}
+
+The condition $\gamma < -\lambda < \de$ now becomes:
+\begin{equation} \bun - \aun < - {2\pi\ov T} k_o -\aun < \om -\aun\end{equation}
+which is precisely condition (\ref{eq:three}).\qed
+\end{proof}
+
+\begin{lemma} Assume that $H$ is $C^2$ on $\RRn \sm \{ 0\}$ and
+that $H'' (x)$ is non-de\-gen\-er\-ate for any $x\ne 0$. Then any local
+minimizer $\tx$ of $\psi$ has minimal period $T$.\end{lemma}
+\begin{proof} We know that $\tx$, or $\tx + \xi$ for some constant $\xi
+\in \RRn$, is a $T$-periodic solution of the Hamiltonian system:
+\begin{equation} \dx = JH' (x)\ .\end{equation}
+
+There is no loss of generality in taking $\xi = 0$. So $\psi (x) \ge
+\psi (\tx )$ for all $\tx$ in some neighbourhood of $x$ in $W^{1,2} \lr
+\RR / T\ZZ ; \RRn\rr$.
+
+But this index is precisely the index $i_T (\tx )$ of the $T$-periodic
+solution $\tx$ over the interval $(0,T)$, as defined in Sect.~2.6. So
+\begin{equation} i_T (\tx ) = 0\ .\label{eq:five}\end{equation}
+
+Now if $\tx$ has a lower period, $T/k$ say, we would have, by Corollary
+31:
+\begin{equation} i_T (\tx ) = i_{kT/k}(\tx ) \ge ki_{T/k} (\tx ) + k-1 \ge k-1 \ge
+1\ .\end{equation}
+
+This would contradict (\ref{eq:five}), and thus cannot happen.\qed
+\end{proof}
+\paragraph{Notes and Comments.} The results in this section are a
+refined version of \cite{clar:eke}; the minimality result of Proposition
+14 was the first of its kind.
+
+To understand the nontriviality conditions, such as the one in formula
+(\ref{eq:four}), one may think of a one-parameter family $x_T$, $T\in
+\lr 2\pi\om^{-1}, 2\pi \bun^{-1}\rr$ of periodic solutions, $x_T (0) =
+x_T (T)$, with $x_T$ going away to infinity when $T\to 2\pi \om^{-1}$,
+which is the period of the linearized system at 0.
+
+\begin{table}
+\caption[ ]{Observational results from NGC 4827}
+\begin{flushleft}
+\renewcommand{\arraystretch}{1.2}
+\begin{tabular}{llllllllllllll}
+\hline
+ & & \multicolumn{3}{l}{RA (1950)} &\ & \multicolumn{3}{l}{Dec (1950)}
+ & $S$ & Pol & \% & $\log P$\\
+\cline{3-5}\cline{7-9}
+ & &(h) &(m) & (s) & & (\degr) & (\arcmin) & (\arcsec)
+ & (mJy) & (mJy) & & (W Hz$^{-1}$)\\
+\hline
+Core & (5 GHz) & 12 & 54 & 18.0 & & 27 & 26 & 56.2
+ & 8 & & & 21.64 \\
+Total&(327 MHz)& & & & & & &
+ & 210 & & & 23.13 \\
+ &(1.4 GHz)& & & & & & &
+ & 57 & 1.3 & 2 & 22.49 \\
+ & (5 GHz) & & & & & & &
+ & 26 & 0.73 & 3 & 22.15 \\
+\hline
+\end{tabular}
+\renewcommand{\arraystretch}{1}
+\end{flushleft}
+\end{table}
+\begin{theorem} [(Ghoussoub-Preiss)] Assume $H(t,x)$ is
+$(0,\ep )$-subquadratic at
+infinity for all $\ep > 0$, and $T$-periodic in $t$
+\begin{equation} H (t,\bullet )\ \ \ \ \ {\rm is\ convex}\ \ \fa t\end{equation}
+\begin{equation} H (\bullet ,x)\ \ \ \ \ {\rm is}\ \ T{\rm -periodic}\ \ \fa x
+\end{equation}
+\begin{equation} H (t,x)\ge n\lr \lss x\rss\rr\ \ \ \ \ {\rm with}\ \ n (s)s^{-1}\to
+\un\ \ {\rm as}\ \ s\to \un\end{equation}
+\begin{equation} \fa \ep > 0\ ,\ \ \ \exists c\ :\ H(t,x) \le {\ep\ov 2}\lss x\rss^2 +
+c\ .\end{equation}
+
+Assume also that $H$ is $C^2$, and $H'' (t,x)$ is positive definite
+everywhere. Then there is a sequence $x_k$, $k\in \NN$, of $kT$-periodic
+solutions of the system
+\begin{equation} \dx = JH' (t,x)\end{equation}
+such that, for every $k\in \NN$, there is some $p_o\in\NN$ with:
+\begin{equation} p\ge p_o\Rightarrow x_{pk} \ne x_k\ .
+\end{equation}
+\qed
+\end{theorem}
+\begin{example} [{\rm(External forcing)}] Consider the system:
+\begin{equation} \dx = JH' (x) + f(t)\end{equation}
+where the Hamiltonian $H$ is $\lr 0,\bun\rr$-subquadratic, and the
+forcing term is a distribution on the circle:
+\begin{equation} f = {d\ov dt} F + f_o\ \ \ \ \ {\rm with}\ \ F\in L^2 \lr \RR / T\ZZ
+; \RRn\rr\ ,\end{equation}
+where $f_o : = T^{-1}\int_o^T f (t) dt$. For instance,
+\begin{equation} f (t) = \sum_{k\in \NN} \de_k \xi\ ,\end{equation}
+where $\de_k$ is the Dirac mass at $t= k$ and $\xi \in \RRn$ is a
+constant, fits the prescription. This means that the system $\dx = JH'
+(x)$ is being excited by a series of identical shocks at interval $T$.
+\end{example}
+\begin{definition} Let $A_\un (t)$ and $B_\un (t)$ be symmetric
+operators in $\RRn$, depending continuously on $t\in [0,T]$, such that
+$A_\un (t) \le B_\un (t)$ for all $t$.
+
+A Borelian function $H: [0,T]\times \RRn \to \RR$ is called $\lr A_\un
+,B_\un\rr$-{\it subquadratic at infinity} if there exists a function
+$N(t,x)$ such that:
+\begin{equation} H (t,x) = \12 \lr A_\un (t) x,x\rr + N(t,x)\end{equation}
+\begin{equation} \fa t\ ,\ \ \ N(t,x)\ \ \ \ \ {\rm is\ convex\ with\ respect\ to}\
+\ x\end{equation}
+\begin{equation} N(t,x) \ge n\lr \lss x\rss\rr\ \ \ \ \ {\rm with}\ \ n(s)s^{-1}\to
++\un\ \ {\rm as}\ \ s\to +\un\end{equation}
+\begin{equation} \exists c\in \RR\ :\ \ \ H (t,x) \le \12 \lr B_\un (t) x,x\rr + c\ \
+\ \fa x\ .\end{equation}
+
+If $A_\un (t) = a_\un I$ and $B_\un (t) = b_\un I$, with $a_\un \le
+b_\un \in \RR$, we shall say that $H$ is $\lr a_\un
+,b_\un\rr$-subquadratic at infinity. As an example, the function $\lss x
+\rss^\al$, with $1\le \al < 2$, is $(0,\ep )$-subquadratic at infinity
+for every $\ep > 0$. Similarly, the Hamiltonian
+\begin{equation} H (t,x) = \12 k \lss k\rss^2 +\lss x\rss^\al\end{equation}
+is $(k,k+\ep )$-subquadratic for every $\ep > 0$. Note that, if $k<0$,
+it is not convex.
+\end{definition}
+
+\paragraph{Notes and Comments.} The first results on subharmonics were
+obtained by Rabinowitz in \cite{rab}, who showed the existence of
+infinitely many subharmonics both in the subquadratic and superquadratic
+case, with suitable growth conditions on $H'$. Again the duality
+approach enabled Clarke and Ekeland in \cite{clar:eke:2} to treat the
+same problem in the convex-subquadratic case, with growth conditions on
+$H$ only.
+
+Recently, Michalek and Tarantello (see \cite{mich:tar} and \cite{tar})
+have obtained lower bound on the number of subharmonics of period $kT$,
+based on symmetry considerations and on pinching estimates, as in
+Sect.~5.2 of this article.
+
+\begin{thebibliography}{MT1}
+\bibitem[CE1]{clar:eke} Clarke, F., Ekeland, I.: Nonlinear oscillations
+and
+boundary-value problems for Hamiltonian systems. Arch. Rat. Mech. Anal.
+{\bf 78} (1982) 315--333
+\bibitem[CE2]{clar:eke:2} Clarke, F., Ekeland, I.: Solutions
+p\'eriodiques, du
+p\'eriode donn\'ee, des \'equations hamiltoniennes. Note CRAS Paris {\bf
+287} (1978) 1013--1015
+\bibitem[MT1]{mich:tar} Michalek, R., Tarantello, G.: Subharmonic
+solutions with
+prescribed minimal period for nonautonomous Hamiltonian systems. J.
+Diff. Eq. {\bf 72} (1988) 28--55
+\bibitem[Ta1]{tar} Tarantello, G.: Subharmonic solutions for Hamiltonian
+systems via a $\bbbz_p$ pseudoindex theory. Annali di Matematica Pura
+(to appear)
+\bibitem[Ra1]{rab} Rabinowitz, P.: On subharmonic solutions of a
+Hamiltonian
+system. Comm. Pure Appl. Math. {\bf 33} (1980) 609--633
+\end{thebibliography}
+\end{document}
diff --git a/obsolete/macros/latex209/contrib/springer/jnsl/jnsl.doc b/obsolete/macros/latex209/contrib/springer/jnsl/jnsl.doc
new file mode 100644
index 0000000000..45d3abd88c
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/jnsl/jnsl.doc
@@ -0,0 +1,1162 @@
+% This is JNSL.DOC the documentation file of
+% the LaTeX macro package from Springer-Verlag
+% for the Journal of Nonlinear Science
+% version of 16 July 1990
+\documentstyle[jnsldoc]{jns}
+%
+\newfont{\titelfont}{cmr10 scaled 1728}
+\newfont{\titelbffont}{cmbx10 scaled 2074}
+\newfont{\titelbigfont}{cmr10 scaled 2488}
+\markboth{Style File for Authors Coding with \LaTeX{}}{Style File
+for Authors Coding with \LaTeX{}}
+%
+\begin{document}
+\thispagestyle{empty}
+\begin{flushleft}
+{\titelbffont Style File}\\[6pt]
+{\titelbffont for Authors Coding with \LaTex{}}\\[2cm]
+\end{flushleft}
+\rule{\textwidth}{1pt}
+\vspace{2pt}
+\begin{flushright}
+\begin{tabular}{@{}l}
+{\titelbigfont The Journal of}\\[9pt]
+{\titelbigfont Nonlinear Science}\\[10pt]
+\end{tabular}
+\end{flushright}
+\rule{\textwidth}{1pt}
+\vfill
+\begin{flushright}
+\begin{tabular}{@{}l}
+{\titelfont Springer-Verlag}\\[5pt]
+{\titelfont New \kern-4pt York Berlin Heidelberg Tokyo}\\[5pt]
+{\titelfont London Paris Hong \kern-3pt Kong}
+\end{tabular}
+\end{flushright}
+\newpage
+%
+\section*{For further information please contact us:}
+%
+\begin{flushleft}
+\begin{tabular}{l@{\quad}l@{\hspace{3mm}}l}
+$\bullet$ & \multicolumn{2}{l}{\bf Springer-Verlag New \kern-3pt
+York}\\[0.5mm]
+ & \multicolumn{2}{l}{Springer-Verlag New \kern-2pt York, 175 Fifth
+ Avenue,}\\
+ & & New \kern-2pt York, New \kern-2pt York 10010
+ USA\\[0.5mm]
+ & Telex: & 232235\\
+ & Fax: & (212)437-6272\\
+ & Editorial: & (Mon--Fr; preferably between 9 a.m.
+ and 4 p.m. --\\
+ & & Mountain Standard Time)\\
+ & & Telephone (212)460-1565\\
+ & net-address: & TROWBRIDGE@COMPUSERVE.COM\\[1mm]
+$\bullet$ & \multicolumn{2}{l}{\bf Springer-Verlag Heidelberg}\\[1mm]
+ & \multicolumn{2}{l}{Springer-Verlag, Postfach 105280, D-6900 Heidelberg
+ 1, FRG}\\[0.5mm]
+ & DATEX-P dial: & FRG 456 221 4305\\
+ & & If you do not yet have an account, press RETURN\\
+ & & when asked for your name; then simply leave a message.\\
+ & & The file name should be your name and country\\
+ & & or state, e.g.\ smith-texas\\
+ & Telex: & 461723\\
+ & Telefax: & (06221)43982\\
+ & Editorial: & (Mon--Fr; preferably between 9 a.m.\\
+ & & and 4 p.m. -- European local time)\\
+ & & Telephone (0049)(0)6221-487534\\
+ & \multicolumn{2}{l}{\TeX{}nical and \LaTeX{}nical information
+ (Mon--Fri; preferably between}\\
+ & & 9 a.m. and 1 p.m. -- European local time):\\
+ & & Telephone (0049)(0)6221-487478\\
+ &bitnet/EARN:& SPRINGER@DHDSPRI6
+\end{tabular}
+\end{flushleft}
+\rule{\textwidth}{1pt}
+%
+\section*{Mailing address for your disk/magnetic tape and output:}
+%
+\begin{quote}
+Springer-Verlag New \kern-2pt York, Inc.\\
+175 Fifth Avenue\\
+New \kern-2pt York, New \kern-2pt York 10010 USA
+\end{quote}
+The following formats are acceptable: 5.25$^{\prime\prime}$ diskette
+MS-DOS, 5.25$^{\prime\prime}$ CP/M, 3.5$^{\prime\prime}$ diskette
+MS-DOS, 3.5$^{\prime\prime}$ diskette Apple MacIntosh, 9-track 1600
+bpi magnetic tape VAX/VMS, 9-track 1600 bpi magnetic tape ANSI with
+label, 9-track 1600 bpi magnetic tape, SUN-Streamer Tape.
+
+Once you have completed your work using this macro package,
+please submit your own printout of the {\it final
+version together with the disk or magnetic tape}, containing your
+\LaTeX{} input (source) file und the final DVI-file and make sure
+that the text is {\it identical in both cases.}
+
+Contributions coded with \LaTeX{} but not with the JNS style, cannot be
+accepted for electronic processing; they will be typeset in the
+conventional way.
+%
+\newpage
+\tableofcontents
+\newpage
+%
+\section{Introduction}
+%
+Authors wishing to code their contribution
+for the
+\begin{center}
+{\it Journal of Nonlinear Science,}
+\end{center}
+with \LaTeX{}, as well as those who have already coded with \LaTeX{},
+will be provided with a style file that will give the text the
+desired layout. Authors are requested to
+adhere strictly to these instructions; {\it the style
+file must not be changed}.
+
+The text output area is automatically set within an area of
+12.2\,cm horizontally and 19.4\,cm vertically, excluding
+running heads.
+
+If you are already familiar with \LaTeX{}, then the
+JNS style file should not give you any major difficulties.
+This style file will change the layout to the required JNS style
+(it will for instance define the layout of \verb|\section|).
+We had to invent some extra commands,
+which are not provided by \LaTeX{} (e.g.\
+\verb|\institute|, see also Sect.\,\ref{contbegin})
+
+For the main body of the paper (the text) you
+should use the commands of the standard \LaTeX{} ``article'' style.
+Even if you are familiar with those commands, we urge you to read
+this entire documentation thoroughly. It contains many suggestions on
+how to use our commands properly; thus your paper
+will be formatted exactly to JNS standard.
+For the input of the references at the end of your contribution,
+please follow our instructions given in Sect.\,\ref{refer} References.
+
+The majority of these hints are not specific for JNS; they may improve
+your use of \LaTeX{} in general.
+Furthermore, the documentation provides suggestions about the proper
+editing and use
+of the input files (capitalization, abbreviation etc.) (see
+Sect.\,\ref{refedit} How to Edit Your Input File).
+%
+\section{How to Proceed}
+%
+Please insert the enclosed diskette or tape into your computer. You will
+find the following files:
+\begin{flushleft}
+\begin{tabular}{@{}p{2.5cm}l}
+{\it jnsl.doc} & General instructions (this document),\\
+ & {\it jnsl.doc} means jns latex.documentation\\
+{\it jnsl.dem} & An example showing how to code the text\\
+{\it jns.sty} & Style file to invoke \LaTeX{}
+\end{tabular}
+\end{flushleft}
+You have to run each file twice with: \verb|latex file.name|.
+%
+\subsection{How to Invoke the JNS Style File}
+%
+The JNS style file is an adaptation of the \LaTeX{} ``article'' style.
+Therefore you may use all ``article'' style commands to prepare your
+manuscript.
+JNS style is invoked by replacing ``article'' by ``jns'' in the first
+line of your document:
+\begin{verbatim}
+\documentstyle{jns}|
+%
+\begin{document}
+ <Your contribution>
+\end{document}
+\end{verbatim}
+%
+\subsection{Contributions Already Coded with \protect\LaTeX{} without
+the JNS Style File}
+%
+If your file is already coded with \LaTeX{} you can easily
+adapt it a posteriori to JNS style. Contributions submitted
+to us in \LaTeX{} but not adapted to JNS style,
+cannot be accepted for electronic processing; they will be typeset
+in the conventional way.
+
+Please refrain from using any \LaTeX{} or \TeX{} commands
+that affect the layout or formatting of your document (i.e. commands
+like \verb|\textheight|, \verb|\vspace|, \verb|\hoffset| etc.).
+There may nevertheless be exceptional occasions on which to
+use some of them.
+
+The JNS style has been carefully designed to produce the right layout
+from your \LaTeX{} input. If there is anything specific you would like
+to do and for which the style file does not provide a command,
+{\em please contact us.\/}
+%
+\section{General Rules for Coding Formulas}
+%
+With mathematical formulas you may proceed as described
+in Sect.\,3.3 of the {\em \LaTeX{} User's Guide \& Reference
+Manual\/} by Leslie Lamport (1986), Addison-Wesley Publishing
+Company, Reading, Mass.
+
+Equations are automatically numbered sequentially throughout
+your contribution using arabic numerals in parentheses on the right-hand side.
+
+When you are working in math mode everything is typeset in italics.
+Sometimes you need to insert non-mathematical elements (e.g.\
+words or phrases). Such insertions should be coded in roman
+(with \verb|\mbox|) as illustrated in the following example:
+\begin{flushleft}
+{\it Sample Input}
+\end{flushleft}
+\begin{verbatim}
+\begin{equation}
+ \left(\frac{a^{2} + b^{2}}{c^{3}} \right) = 1 \quad
+ \mbox{ if } c\neq 0 \mbox{ and if } a,b,c\in \bbbr \enspace .
+\end{equation}
+\end{verbatim}
+{\it Sample Output}
+\begin{equation}
+ \left(\frac{a^{2} + b^{2}}{c^{3}} \right) = 1 \quad
+ \mbox{ if } c\neq 0 \mbox{ and if } a,b,c\in \bbbr \enspace .
+\end{equation}
+
+If you wish to start a new paragraph immediately after a displayed
+equation, insert a blank line so as to produce the required
+indentation. If there is no new paragraph either do not insert
+a blank line or code \verb|\noindent| immediately before
+continuing the text. Titles have no end punctuation.
+
+Please punctuate a displayed equation in the same way as other
+ordinary text but with an \verb|\enspace| before end punctuation.
+
+Note that the sizes of the parentheses or other delimiter
+symbols used in equations should ideally match the height of the
+formulas being enclosed. This is automatically taken care of by
+the following \LaTeX{} commands:\\[2mm]
+\verb|\left(| or \verb|\left[| and
+\verb|\right)| or \verb|\right]|.
+%
+\subsection{Italic and Roman Type in Math Mode}
+%
+\begin{alpherate}
+\item
+In math mode \TeX{} and \LaTeX{} treat all letters as though they
+were mathematical or physical variables, hence they are typeset in
+italics. However, for certain components of formulas, like short texts,
+this would be incorrect and therefore coding in roman is required.
+Roman should also be used for
+subscripts and superscripts {\it in formulas\/} where these are
+merely labels and not in themselves variables,
+e.g.\ $T_{\rm eff}$ \ not \ $T_{eff}$,
+$T_{\rm K}$ \ not \ $T_K$ (K = Kelvin),
+$m_{\rm e}$ \ not \ $m_e$ (e = electron).
+However, do not code for roman
+if the sub/superscripts represent variables,
+e.g.\ $\sum_{i=1}^{n} a_{i}$.
+\item
+Please ensure that {\em physical units\/} (e.g.\ pc, erg s$^{-1}$
+K, cm$^{-3}$, W m$^{-2}$ Hz$^{-1}$, m kg s$^{-2}$ A$^{-2}$) and
+{\it abbreviations} such as Ord, Var, GL, SL, sgn, const.\
+are always set in roman type. To ensure
+this use the \verb|\rm| command: \verb|{\rm Hz}|.
+On p.\ 46 of the {\em \LaTeX{} User's Guide \& Reference
+Manual\/} by Leslie Lamport you will find the names of
+common mathe\-matical functions, such as log, sin, exp, max and sup.
+These should be coded as \verb|\log|,
+\verb|\sin|, \verb|\exp|, \verb|\max|, \verb|\sup|
+and will appear in roman.
+\item
+Chemical symbols and formulas should be coded for roman,
+e.g.\ Fe not $Fe$, H$_2$O not {\em H$_2$O\/}.
+\item
+Familiar foreign words and phrases, e.g.\ et al.,
+a priori, in situ, brems\-strah\-lung, eigenvalues should not be
+italicized.
+\end{alpherate}
+%
+\section{How to Edit Your Input (Source) File}
+\label{refedit}
+%
+\subsection{Headings}
+%
+All words in headings should be capitalized except for
+conjunctions, prepositions
+(e.g.\ on, of, by, and, or, but, from, with, without, under)
+and definite and indefinite articles (the, a, an) unless they appear at
+the beginning. Formula letters must be typeset as in the text.
+%
+\subsection{Capitalization and Non-capitalization}
+%
+\begin{alpherate}
+\item
+The following should always be capitalized:
+\begin{itemize}
+\item
+Headings (see preceding Sect.\,4.1)
+\item
+Abbreviations and expressions
+in the text such as Fig(s)., Table(s), Sect(s)., Chap(s).,
+Theorem, Corollary, Definition etc. when used with numbers, e.g.\
+Fig.\,3, Table\,1, Theorem 2.
+\end{itemize}
+Please follow the special rules in Sect.\,4.3 for referring to equations.
+\item
+The following should {\it not\/} be capitalized:
+\begin{itemize}
+\item
+The words figure(s), table(s), equation(s),
+theorem(s) in the text when used without an accompanying number
+\item
+Figure legends and table captions except for names and
+abbreviations.
+\end{itemize}
+\end{alpherate}
+%
+\subsection{Abbreviation of Words}
+%
+\begin{alpherate}
+\item
+The following {\it should} be abbreviated
+when they appear in running text {\it
+unless\/} they come at the beginning of a sentence: Chap., Sect., Fig.;
+e.g.\ The results are depicted in Fig.\,5. Figure 9 reveals that \dots .\\
+{\it Please note\/}: Equations should usually be referred to solely by their
+number in parentheses: e.g.\ (14). However, when the reference comes at the
+beginning of a sentence, the unabbreviated word ``Equation''
+should be used: e.g.\ Equation (14) is very important. However, (15)
+makes it clear that \dots .
+\item
+If abbreviations of names or concepts are used
+throughout the text, they should be defined at first occurrence,
+e.g.\ Plurisubharmonic (PSH) Functions, Strong Optimization (SOPT)
+Problem.
+\end{alpherate}
+%
+\section{How to Code the Beginning of Your Contribution}
+\label{contbegin}
+%
+The title of your contribution should be coded as follows:
+\begin{verbatim}
+\title{<Your contribution title>}
+\end{verbatim}
+All words in titles should be capitalized except for
+conjunctions, prepositions
+(e.g.\ on, of, by, and, or, but, from, with, without, under)
+and definite and indefinite articles (the, a, an) unless they appear at
+the beginning. Formula letters must be typeset as in the text.
+Titles have no end punctuation.
+
+If a long \verb|\title| must be divided please use the
+code \verb|\\| (for new line).\\[6mm]
+Now the name(s) of the authors(s) must be given:
+\begin{verbatim}
+\author{<author(s) name(s)>}
+\end{verbatim}
+Numbers referring to different addresses are
+to be attached to each author.
+If you have done this correctly, the entry now reads, for example:
+\begin{verbatim}
+\author{Ivar Ekeland\inst{1} and Roger Temam\inst{2}}
+\end{verbatim}
+The first name\footnote{Other initials are optional
+and may be inserted if this is the usual
+way of writing your name, e.g.\ Alfred J.~Holmes, E.~Henry Green.}
+is followed by the surname.
+
+If there is more than one author, the order is up to you.
+However, if there are more than two authors, you must separate the names
+by commas. If the authors have different affiliations,
+each name has to be followed by:
+\begin{verbatim}
+\inst{no}
+\end{verbatim}
+\newpage
+Next the address(es) of institute(s), company etc. is (are) required.
+If there is more than one address, the entries are numbered
+automatically with \verb|\and|, in the order in which you type them.
+Please make sure that the numbers match those placed next to
+to the authors' names.
+\begin{verbatim}
+\institute{<name of an institute>
+\and <name of the next institute>
+\and <name of the next institute>}
+\end{verbatim}
+Unlike usual \LaTeX{} the \verb|\and| command is used with the
+\verb|\institute| and not with the \verb|\author| command.
+
+\medskip
+If footnotes are needed in \verb|\title| please code
+(immediately after the word where the footnote
+indicator should be placed):
+\begin{verbatim}
+\thanks{<text>}
+\end{verbatim}
+\verb|\thanks| may only appear in \verb|\title|, \verb|\author|
+and \verb|\institute| (see below) to footnote anything.
+
+\medskip\noindent
+The command
+\begin{verbatim}
+\maketitle
+\end{verbatim}
+formats the complete heading of your article. If you leave
+it out the work done so far will produce {\bf no} text,
+see {\it Sample Input} on p.~\pageref{samppage}.
+%
+\section{How to Code Your Text}
+%
+The contribution title and all headings should be capitalized
+except for conjunctions, prepositions
+(e.g.\ on, of, by, and, or, but, from, with, without, under)
+and definite and indefinite articles (the, a, an) unless they appear at
+the beginning. Formula letters must be typeset as in the text.
+
+Headings will be automatically numbered by the following codes.\\[2mm]
+{\it Sample Input}
+\begin{verbatim}
+\section{This is a First-Order Title}
+\subsection{This is a Second-Order Title}
+\subsubsection{This is a Third-Order Title.}
+\paragraph{This is a Fourth-Order Title.}
+\end{verbatim}
+\verb|\section| and \verb|\subsection| have no end punctuation.\\
+\verb|\subsubsection| and \verb|\paragraph|
+need to be punctuated at the end.
+
+Note that \verb|\title| and \verb|\author| will create the page
+header (running head), but it may happen that you need to shorten your
+title for the page header, because only one line is allowed (our macro
+will produce an error message whereupon you must provide a shortened
+version of the title for the page header). In this case you should use
+the following coding directly after the coding of \verb|\title|
+or \verb|\author|.
+\begin{verbatim}
+\titlerunning{Abbreviated contribution title}
+\authorrunning{Abbreviated authors}
+\end{verbatim}
+\newpage
+In addition to the above-mentioned headings your text may be structured
+by subsections indicated by run-in headings (theorem-like environments).
+All the theorem-like environments are numbered automatically
+throughout the sections of your file.
+If you call lemma once, this will be numbered 1; if corollary follows,
+this will be numbered 2; if you then call lemma again, this will be
+numbered 3.
+
+But in case you want to reset this counter at 1 in each section,
+please give the document style option \verb|envcountreset|:
+\begin{verbatim}
+\documentstyle[envcountreset]{jns}
+\end{verbatim}
+
+\vspace{.5cm}\noindent
+The following possibilities for run-in headings are available:
+\begin{flushleft}
+\verb|\begin{lemma} Text of the lemma \end{lemma}|\quad (see Output
+Sample 1)\\[2mm]
+%
+\verb|\begin{lemma}[additional explanation of lemma] Text of
+lemma \end{lemma}| \quad (see Output Sample 2)\\[2mm]
+%
+\verb|\begin{lemma}(overriding automatic numbering.) Text of the lemma
+\end{lemma}| \quad (see Output Sample 3)\\[2mm]
+%
+\verb|\begin{lemma}(x)[additional explanation of lemma] Text of
+lemma\end{lemma}| \quad (see Output Sample 4)\\[2mm]
+%
+\verb|\begin{lemma}* Text of lemma \end{lemma}| \quad (see Output
+Sample 5)\\[2mm]
+%
+\verb|\begin{lemma}*[additional explanation of lemma] Text of
+lemma\end{lemma}| \quad (see Output Sample 6)
+\end{flushleft}
+%
+\begin{flushleft}
+{\it Output Sample 1}
+\begin{lemma}Text of lemma\end{lemma}
+%
+{\it Output Sample 2}
+\begin{lemma}[additional explanation of lemma] Text of lemma\end{lemma}
+%
+{\it Output Sample 3}
+\begin{lemma}(overriding automatic numbering.) Text of lemma\end{lemma}
+%
+{\it Output Sample 4}
+\begin{lemma}(x)[additional explanation of lemma] Text of lemma\end{lemma}
+%
+{\it Output Sample 5}
+\begin{lemma}* Text of lemma\end{lemma}
+%
+{\it Output Sample 6}
+\begin{lemma}*[additional explanation of lemma] Text of lemma\end{lemma}
+\end{flushleft}
+\newpage
+\noindent
+The following variety of run-in headings are at your disposal:
+\begin{alpherate}
+\item
+{\bf Bold} run-in headings with italicized text
+as built-in environments:
+\begin{verbatim}
+\begin{proposition} <text> \end{proposition}
+\begin{corollary} <text> \end{corollary}
+\begin{lemma} <text> \end{lemma}
+\begin{theorem} <text> \end{theorem}
+\end{verbatim}
+\item
+The following must generally appear as {\it italic} run-in heading:
+\begin{verbatim}
+\begin{proof} <text> \qed \end{proof}
+\end{verbatim}
+\item
+Further {\it italic} or {\bf bold} run-in headings may also occur:
+\begin{verbatim}
+\begin{definition} <text> \end{definition}
+\begin{example} <text> \end{example}
+\begin{remark} <text> \end{remark}
+\begin{exercise} <text> \end{exercise}
+\begin{problem} <text> \end{problem}
+\begin{solution} <text> \end{solution}
+\begin{note} <text> \end{note}
+\begin{question} <text> \end{question}
+\end{verbatim}
+\end{alpherate}
+%
+\subsubsection*{Defining Your Own Environments.}
+%
+You can define additional environments using the command
+\verb|\newstytheorem| which has five parameters. The first is the name
+your environment should have (e.g.\ \verb|conjecture|).
+After this follows the
+font family used for this heading (please use only \verb|\bf| for bold
+or \verb|\it| for italic) and the font family to use for the text of
+this new environment (e.g.\ \verb|\it| or \verb|\rm|). Then the name of
+an already known environment should be given in brackets (e.g.\
+\verb|[theorem]|). Your new environment will be numbered like the old
+one. Finally comes the real text of the new run-in heading (e.g.\
+\verb|Conjecture|).\\
+Sample definition:
+\begin{verbatim}
+\newstytheorem{conjecture}{\bf}{\it}[theorem]{Conjecture}
+\end{verbatim}
+\newstytheorem{conjecture}{\bf}{\it}[theorem]{Conjecture}
+Use of that definition:
+\begin{verbatim}
+\begin{conjecture} <text> \end{conjecture}
+\end{verbatim}
+e.g.
+\begin{verbatim}
+\begin{conjecture} It is clear that ...\end{conjecture}
+\end{verbatim}
+Its output:
+\begin{conjecture}
+It is clear that \dots
+\end{conjecture}
+\newpage
+%
+\noindent
+{\it Sample Input}
+\label{samppage}
+\begin{verbatim}
+\title{Hamiltonian Mechanics}
+
+\author{Ivar Ekeland\inst{1} and Roger Temam\inst{2}}
+
+\institute{Princeton University, Princeton NJ 08544, USA
+\and
+Universit\'{e} de Paris-Sud,
+Laboratoire d'Analyse Num\'{e}rique, B\^{a}timent 425,\\
+F-91405 Orsay Cedex, France}
+
+\maketitle
+%
+\section{Fixed-Period Problems: The Sublinear Case}
+%
+With this chapter, the preliminaries are over, and we begin the
+search for periodic solutions \dots
+%
+\subsection{Autonomous Systems}
+%
+In this section we will consider the case when the Hamiltonian
+$H(x)$ \dots
+%
+\subsubsection*{The General Case: Nontriviality.}
+%
+We assume that $H$ is
+$\left(A_{\infty}, B_{\infty}\right)$-subqua\-dra\-tic
+at infinity, for some constant \dots
+%
+\paragraph{Notes and Comments.}
+The first results on subharmonics were \dots
+%
+\begin{proposition}
+Assume $H'(0)=0$ and $ H(0)=0$. Set \dots
+\end{proposition}
+\begin{proof}[of proposition]
+Condition (8) means that, for every $\delta'>\delta$, there is
+some $\varepsilon>0$ such that \dots \qed
+\end{proof}
+%
+\begin{example}[\rm (External forcing)]
+Consider the system \dots
+\end{example}
+\begin{corollary}
+Assume $H$ is $C^{2}$ and
+$\left(a_{\infty}, b_{\infty}\right)$-subquadratic
+at infinity. Let \dots
+\end{corollary}
+\begin{lemma}
+Assume that $H$ is $C^{2}$ on $\bbbr^{2n}\backslash \{0\}$
+and that $H''(x)$ is \dots
+\end{lemma}
+\begin{theorem}[(Ghoussoub-Preiss)]
+Let $X$ be a Banach Space and $\Phi:X\to\bbbr$ \dots
+\end{theorem}
+\begin{definition}
+We shall say that a $C^{1}$ function $\Phi:X\to\bbbr$
+satisfies \dots
+\end{definition}
+\end{verbatim}
+{\it Sample Output\/} (follows on the next page together with
+examples of the above run-in headings)
+%
+\setcounter{theorem}{0}
+\title{Hamiltonian Mechanics}
+
+\author{Ivar Ekeland\inst{1} and Roger Temam\inst{2}}
+
+\institute{Princeton University, Princeton NJ 08544, USA
+\and
+Universit\'{e} de Paris-Sud,
+Laboratoire d'Analyse Num\'{e}rique, B\^{a}timent 425,\\
+F-91405 Orsay Cedex, France}
+
+\maketitle
+%
+\section*{1 \ Fixed-Period Problems: The Sublinear Case}
+%
+With this chapter, the preliminaries are over, and we begin the search
+for periodic solutions \dots
+%
+\subsection*{1.1 \ Autonomous Systems}
+%
+In this section we will consider the case when the Hamiltonian
+$H(x)$ \dots
+%
+\subsubsection*{The General Case: Nontriviality.}
+%
+We assume that $H$ is
+$\left(A_{\infty}, B_{\infty}\right)$-subqua\-dra\-tic at
+infinity, for some constant \dots
+%
+\paragraph{Notes and Comments.}
+The first results on subharmonics were \dots
+%
+\begin{proposition}
+Assume $H'(0)=0$ and $ H(0)=0$. Set \dots
+\end{proposition}
+\begin{proof}[of proposition]
+Condition (8) means that, for every $\delta'>\delta$, there is
+some $\varepsilon>0$ such that \dots \qed
+\end{proof}
+%
+\begin{example}[\rm (External forcing)]
+Consider the system \dots
+\end{example}
+\begin{corollary}
+Assume $H$ is $C^{2}$ and
+$\left(a_{\infty}, b_{\infty}\right)$-subquadratic
+at infinity. Let \dots
+\end{corollary}
+\begin{lemma}
+Assume that $H$ is $C^{2}$ on $\bbbr^{2n}\backslash \{0\}$
+and that $H''(x)$ is \dots
+\end{lemma}
+\begin{theorem}[(Ghoussoub-Preiss)]
+Let $X$ be a Banach Space and $\Phi:X\to\bbbr$ \dots
+\end{theorem}
+\begin{definition}
+We shall say that a $C^{1}$ function $\Phi:X\to\bbbr$ satisfies \dots
+\end{definition}
+\newpage
+%
+\markboth{Style File for Authors Coding with \LaTeX{}}{Style File
+for Authors Coding with \LaTeX{}}
+\section{Fine Tuning of the Text}
+%
+The following should be used to improve the readability of the text:
+\begin{flushleft}
+\begin{tabular}{@{}p{.19\textwidth}p{.79\textwidth}}
+\verb|\,| & a thin space, e.g.\ between numbers or between units
+ and num\-bers; a line division will not be made
+ following this space\\
+\verb|--| & en dash; two strokes, without a space at either end\\
+\verb*| -- | & en dash; two strokes, with a space at either end\\
+\verb|-| & hyphen; one stroke, no space at either end\\
+\verb|$-$| & minus, in the text {\em only} \\[8mm]
+{\em Input} & \verb|21\,$^{\circ}$C etc.,|\\
+ & \verb|Dr h.\,c.\,Rockefellar-Smith \dots|\\
+ & \verb|20,000\,km and Prof.\,Dr Mallory \dots|\\
+ & \verb|1950--1985 \dots|\\
+ & \verb|this -- written on a computer -- is now printed|\\
+ & \verb|$-30$\,K \dots|\\[3mm]
+{\em Output} & 21\,$^{\circ}$C etc., Dr h.\,c.\,Rockefellar-Smith \dots\\
+ & 20,000\,km and Prof.\,Dr Mallory \dots\\
+ & 1950--1985 \dots\\
+ & this -- written on a computer -- is now printed\\
+ & $-30$\,K \dots
+\end{tabular}
+\end{flushleft}
+%
+\section {Special Typefaces}
+%
+Normal type (roman) need not be coded. {\it Italic}
+(not {\sl slanted}) or, if necessary, {\bf boldface}
+should be used for emphasis in the text.
+\begin{flushleft}
+\begin{tabular}{@{}p{.19\textwidth}p{.79\textwidth}}
+\verb|{\it Text}| & {\it Italicized Text}\\
+\verb|{\em Text}| & {\em Emphasized Text}\\
+ & {\it If you would like to emphasize a {\em definition} within an
+ italicized text (e.g.\ of a {\em theorem)} you should code the
+ expression to be emphasized by} \verb|\em|.\\
+\verb|{\bf Text}| & {\bf Important Text}\\
+\verb|\vec{Symbol}| & Vectors may only appear in math mode. The default
+ \LaTeX{} vector symbol has been adapted to JNS conventions.\\
+ & \verb|$\vec{A times B\cdot C}| yields $\vec{A\times B\cdot C}$\\
+ & \verb|$\vec{A}^{T} \otimes \vec{B} \otimes \vec{\hat{D}}$|\\
+ & yields $\vec{A}^{T} \otimes \vec{B} \otimes \vec{\hat{D}}$
+\end{tabular}
+\end{flushleft}
+\newpage
+%
+\section {Footnotes}
+%
+Footnotes within the text should be coded:
+\begin{verbatim}
+\footnote{Text}
+\end{verbatim}
+{\it Sample Input}
+\begin{flushleft}
+Text with a footnote\verb|\footnote{The footnote is automatically
+numbered.}| and text continues \dots
+\end{flushleft}
+{\it Sample Output}
+\begin{flushleft}
+Text with a footnote\footnote{The footnote is automatically numbered.}
+and text continues \dots
+\end{flushleft}
+%
+\section {Lists}
+%
+Please code lists as described below:\\[2mm]
+{\it Sample Input}
+\begin{verbatim}
+\begin{enumerate}
+ \item First item
+ \item Second item
+ \begin{enumerate}
+ \item First nested item
+ \item Second nested item
+ \end{enumerate}
+ \item Third item
+\end{enumerate}
+\end{verbatim}
+{\it Sample Output}
+ \begin{enumerate}
+\item First item
+\item Second item
+ \begin{enumerate}
+ \item First nested item
+ \item Second nested item
+ \end{enumerate}
+\item Third item
+\end{enumerate}
+\newpage
+%
+\section {Figures}
+%
+Figure legends should be inserted after (not in)
+the paragraph in which the figure is first mentioned.
+They will be numbered automatically.
+
+{\it The figures\/} (line drawings and those containing halftone inserts
+as well as halftone figures) {\it should not be pasted into your
+laserprinter output}. They should be enclosed separately in camera-ready
+form (original artwork, glossy prints, photographs and/or slides). The
+lettering should be suitable for reproduction, and after reduction the
+height of capital letters should be at least
+1.8\,mm and not more than 2.5\,mm.
+Check that lines and other details are uniformly black and
+that the lettering on figures is clearly legible.
+
+To leave the desired amount of space for the height of
+your figures, please use the coding described below.
+As can be seen in the output, we will automatically
+provide 1\,cm space above and below the figure,
+so that you should only leave the space equivalent to the size of the
+figure itself. Please note that ``\verb|x|'' in the following
+coding stands for the actual height of the figure:
+\begin{verbatim}
+\begin{figure}
+\vspace{x cm}
+\caption[ ]{...text of caption...} (Do type [ ])
+\end{figure}
+\end{verbatim}
+\begin{flushleft}
+{\it Sample Input}
+\end{flushleft}
+\begin{verbatim}
+\begin{figure}
+\vspace{2.5cm}
+\caption{This is the caption of the figure displaying a white
+eagle and a white horse on a snow field}
+\end{figure}
+\end{verbatim}
+\begin{flushleft}
+{\it Sample Output}
+\end{flushleft}
+\begin{figure}
+\vspace{2.5cm}
+\caption{This is the caption of the figure displaying a white eagle and
+a white horse on a snow field}
+\end{figure}
+%
+\section{Tables}
+%
+Table captions should be treated
+in the same way as figure legends, except that
+the table captions appear {\it above} the tables. The tables
+will be numbered automatically.
+%
+\subsection{Tables Coded with \protect\LaTeX{}}
+%
+Please use the following coding:\\[2mm]
+{\it Sample Input}
+\begin{verbatim}
+\begin{table}
+\caption[ ]{Observational results from NGC 4827}
+\begin{flushleft}
+\begin{tabular}{llllllllllllll}
+\hline
+ & & \multicolumn{3}{l}{RA (1950)} &\
+ & \multicolumn{3}{l}{Dec (1950)}
+ & $S$ & Pol & \% & $\log P$\\
+\cline{3-5}\cline{7-9}
+ & &(h) &(m) & (s) & & (\degr)
+ & (\arcmin) & (\arcsec)
+ & (mJy) & (mJy) & & (W Hz$^{-1}$)\\
+\hline
+Core & (5 GHz) & 12 & 54 & 18.0 & & 27 & 26 & 56.2
+ & 8 & & & 21.64 \\
+Total&(327 MHz)& & & & & & &
+ & 210 & & & 23.13 \\
+ &(1.4 GHz)& & & & & & &
+ & 57 & 1.3 & 2 & 22.49 \\
+ & (5 GHz) & & & & & & &
+ & 26 & 0.73 & 3 & 22.15 \\
+\hline
+\end{tabular}
+\end{flushleft}
+\end{table}
+
+Before continuing your text you need an empty line. \dots
+\end{verbatim}
+
+\begin{table}
+\caption[ ]{Observational results from NGC 4827}
+\begin{flushleft}
+\renewcommand{\arraystretch}{1.2}
+\begin{tabular}{llllllllllllll}
+\hline
+ & & \multicolumn{3}{l}{RA (1950)} &\ & \multicolumn{3}{l}{Dec (1950)}
+ & $S$ & Pol & \% & $\log P$\\
+\cline{3-5}\cline{7-9}
+ & &(h) &(m) & (s) & & (\degr) & (\arcmin) & (\arcsec)
+ & (mJy) & (mJy) & & (W Hz$^{-1}$)\\
+\hline
+Core & (5 GHz) & 12 & 54 & 18.0 & & 27 & 26 & 56.2
+ & 8 & & & 21.64 \\
+Total&(327 MHz)& & & & & & &
+ & 210 & & & 23.13 \\
+ &(1.4 GHz)& & & & & & &
+ & 57 & 1.3 & 2 & 22.49 \\
+ & (5 GHz) & & & & & & &
+ & 26 & 0.73 & 3 & 22.15 \\
+\hline
+\end{tabular}
+\renewcommand{\arraystretch}{1}
+\end{flushleft}
+\end{table}
+
+Before continuing your text you need an empty line. \dots
+
+\vspace{3mm}
+For further information you will find a complete description of
+the tabular environment
+on p.~63~ff. and p.~182 of the {\em \LaTeX{} User's Guide \& Reference
+Manual\/} by Leslie Lamport.
+%
+\subsection{Tables Not Coded with \protect\LaTeX{}}
+%
+If you do not wish to code your table using \LaTeX{}
+but prefer to have it reproduced separately,
+proceed as for figures and use the following coding:\\[2mm]
+{\it Sample Input}
+\begin{verbatim}
+\begin{table}
+\caption{text of your caption}
+\vspace{x cm} % the actual height needed for your table
+\end{table}
+\end{verbatim}
+%
+\subsection{Signs and Characters}
+%
+\subsubsection*{Special Signs.}
+%
+You may need to use special signs. The available ones are listed in the
+{\em \LaTeX{} User's Guide \& Reference Manual\/} by Leslie Lamport,
+pp.~44\,ff.
+We have created further symbols for math mode (enclosed in \$):
+\begin{center}
+\begin{tabular}{l@{\hspace{1em}yields\hspace{1em}}
+c@{\hspace{3em}}l@{\hspace{1em}yields\hspace{1em}}c}
+\verb|\grole| & $\grole$ & \verb|\getsto| & $\getsto$\\
+\verb|\lid| & $\lid$ & \verb|\gid| & $\gid$
+\end{tabular}
+\end{center}
+%
+\subsubsection*{Gothic (Fraktur).}
+%
+If gothic letters are {\it necessary}, please use those of the
+relevant \AmSTeX{} alphabet which are available from the
+American Mathematical Society.
+
+In \LaTeX{} only the following gothic letters are
+available: \verb|$\Re$| yields $\Re$ and \verb|$\Im$| yields $\Im$.
+These should {\it not\/} be used when you need gothic letters for your
+contribution. Use \AmSTeX{} gothic as explained above.
+For the real and the imaginary parts of a complex number within math mode
+you should use instead: \verb|$\rm Re$| (which yields Re) or
+\verb|$\rm Im$| (which yields Im).
+%
+\subsubsection*{Script.}
+%
+For script capitals use the coding
+\begin{center}
+\begin{tabular}{l@{\hspace{1em}which yields\hspace{1em}}c}
+\verb|$\cal AB$| & $\cal AB$
+\end{tabular}
+\end{center}
+(see p.~43 of the \LaTeX{} book).
+%
+\subsubsection*{Special Roman.}
+%
+If you need other symbols than those below, you could use
+the blackboard bold characters of \AmSTeX{}, but there might arise
+capacity problems
+in loading additional \AmSTeX{} fonts. Therefore we created
+the blackboard bold characters listed below.
+\begin{flushleft}
+\begin{tabular}{@{}ll@{ yields }
+c@{\hspace{1.1em}}ll@{ yields }c}
+\verb|\bbbc| & (complex numbers) & $\bbbc$
+ & \verb|\bbbf| & (blackboard bold F) & $\bbbf$\\
+\verb|\bbbh| & (blackboard bold H) & $\bbbh$
+ & \verb|\bbbk| & (blackboard bold K) & $\bbbk$\\
+\verb|\bbbm| & (blackboard bold M) & $\bbbm$
+ & \verb|\bbbn| & (natural numbers N) & $\bbbn$\\
+\verb|\bbbp| & (blackboard bold P) & $\bbbp$
+ & \verb|\bbbq| & (rational numbers) & $\bbbq$\\
+\verb|\bbbr| & (real numbers) & $\bbbr$
+ & \verb|\bbbs| & (blackboard bold S) & $\bbbs$\\
+\verb|\bbbt| & (blackboard bold T) & $\bbbt$
+ & \verb|\bbbz| & (whole numbers) & $\bbbz$\\
+\verb|\bbbone| & (symbol one) & $\bbbone$
+\end{tabular}
+\end{flushleft}
+\begin{displaymath}
+\begin{array}{c}
+\bbbc^{\bbbc^{\bbbc}} \otimes
+\bbbf_{\bbbf_{\bbbf}} \otimes
+\bbbh_{\bbbh_{\bbbh}} \otimes
+\bbbk_{\bbbk_{\bbbk}} \otimes
+\bbbm^{\bbbm^{\bbbm}} \otimes
+\bbbn_{\bbbn_{\bbbn}} \otimes
+\bbbp^{\bbbp^{\bbbp}}\\[2mm]
+\otimes
+\bbbq_{\bbbq_{\bbbq}} \otimes
+\bbbr^{\bbbr^{\bbbr}} \otimes
+\bbbs^{\bbbs_{\bbbs}} \otimes
+\bbbt^{\bbbt^{\bbbt}} \otimes
+\bbbz \otimes
+\bbbone^{\bbbone_{\bbbone}}
+\end{array}
+\end{displaymath}
+%
+\subsubsection*{Sans Serif.}
+%
+Using our macros you can also choose this font family;
+use the command \verb|\sf| for {\sf sans serif}
+(like \verb|\it| for {\it italic style}).
+%
+\section{References}
+\label{refer}
+%
+There are three reference systems available; only one, of course,
+should be used for your contribution. With each system (by author-year,
+by number only or by letter-number) a reference list
+containing all citations in the
+text, should be included at the end of your contribution placing the
+\LaTeX{} environment \verb|thebibliography| there.
+For an overall information on that environment
+see the {\em \LaTeX{} User's Guide \& Reference
+Manual\/} by Leslie Lamport, p.~73.
+%
+\subsection{Author-Year System}
+%
+References are cited in the text by name and year in parentheses
+and should look as follows:
+(Smith 1970, 1980), (Ekeland et al. 1985, Theorem 2), (Jones and Jaffe
+1986; Farrow 1988, Chap.\,2). If the name is part of the sentence
+only the year may appear in parentheses,
+e.g.\ Ekeland et al. (1985, Sect.\,2.1)
+The reference list should contain all citations occurring in the text,
+ordered alphabetically by surname (with initials following). If there
+are several works by the same author(s) the references should be listed
+in the appropriate order indicated below:
+\begin{alpherate}
+\item
+One author: list works chronologically;
+\item
+Author and same co-author(s): list works chronologically;
+\item
+Author and different co-authors: list works alphabetically
+according to co-authors.
+\end{alpherate}
+If there are several works by the same author(s) and in the same year,
+but which are cited separately, they should be distinguished by
+the use of ``a'', ``b'' etc., e.g.\ (Smith 1982a), (Ekeland et al. 1982b).
+%
+\subsubsection*{How to Code Author-Year System.}
+%
+If you want to use this system you have to specify in \verb|documentstyle|
+the option \verb|[citeauthoryear]|, like:
+\begin{verbatim}
+\documentstyle[citeauthoryear]{jns}
+\end{verbatim}
+Write your citations in the
+text explicitly except for the year, leaving that up to \LaTeX{} with the
+\verb|\cite| command. Then give only the appropriate year as the optional
+argument (i.e. the label in square brackets) with the \verb|\bibitem|
+command(s).\\[2mm]
+{\it Sample Input}
+\begin{verbatim}
+The results in this section are a refined version
+of Clarke and Ekeland (\cite{clar:eke}); the minimality result of
+Proposition~14 was the first of its kind.
+\end{verbatim}
+The above input produces the citation: ``\dots\ refined version of
+Clarke and Ekeland (1982); the minimality\dots''. Then the
+\verb|\bibitem|
+entry of the \verb|thebibliography| environment should read:
+\begin{verbatim}
+\begin{thebibliography}{} % (do not forget {})
+.
+.
+\bibitem[1982]{clar:eke}
+Clarke, F., Ekeland, I.:
+Nonlinear oscillations and boundary-value problems for
+Hamiltonian systems.
+Arch. Rat. Mech. Anal. {\bf 78} (1982) 315--333
+.
+.
+\end{thebibliography}
+\end{verbatim}
+{\it Sample Output}
+\bibauthoryear
+%
+\subsection{References by Letter-Number or by Number Only}
+%
+References are cited in the text -- using the \verb|\cite|
+command of \LaTeX{} -- by number or by letter-number in square
+brackets, e.g.\ [1] or [E1, S2], [P1], according to your use of the
+\verb|\bibitem| command in the \verb|thebibliography| environment. The
+coding is as follows: if you choose your own label for the sources by
+giving an optional argument to the \verb|\bibitem| command the citations
+in the text are marked with the label you supplied. Otherwise a simple
+numbering is done.
+\begin{verbatim}
+The results in this section are a refined version
+of \cite{clar:eke}; the minimality result of Proposition~14
+was the first of its kind.
+\end{verbatim}
+The above input produces the citation: ``\dots\ refined version of
+[CE1]; the min\-i\-mality\dots''. Then the \verb|\bibitem| entry of
+the \verb|thebibliography| environment should read:
+\begin{verbatim}
+\begin{thebibliography}{MT1}
+.
+.
+\bibitem[CE1]{clar:eke}
+Clarke, F., Ekeland, I.:
+Nonlinear oscillations and boundary-value problems for
+Hamiltonian systems.
+Arch. Rat. Mech. Anal. {\bf 78} (1982) 315--333
+.
+.
+\end{thebibliography}
+\end{verbatim}
+The complete bibliography looks like this:
+%
+\begin{thebibliography}{MT1}
+%
+\bibitem[CE1]{clar:eke}
+Clarke, F., Ekeland, I.:
+Nonlinear oscillations and
+boundary-value problems for Hamiltonian systems.
+Arch. Rat. Mech. Anal. {\bf 78} (1982) 315--333
+%
+\bibitem[CE2]{clar:eke:2}
+Clarke, F., Ekeland, I.:
+Solutions p\'{e}riodiques, du
+p\'{e}riode donn\'{e}e, des \'{e}quations hamiltoniennes.
+Note CRAS Paris {\bf 287} (1978) 1013--1015
+%
+\bibitem[MT1]{mich:tar}
+Michalek, R., Tarantello, G.:
+Subharmonic solutions with prescribed minimal
+period for nonautonomous Hamiltonian systems.
+J. Diff. Eq. {\bf 72} (1988) 28--55
+%
+\bibitem[Ta1]{tar}
+Tarantello, G.:
+Subharmonic solutions for Hamiltonian
+systems via a $\bbbz_{p}$ pseudoindex theory.
+Annali di Matematica Pura (to appear)
+%
+\bibitem[Ra1]{rab}
+Rabinowitz, P.:
+On subharmonic solutions of a Hamiltonian system.
+Comm. Pure Appl. Math. {\bf 33} (1980) 609--633
+\end{thebibliography}
+%
+\subsubsection*{Number-Only System.}
+%
+For this system do not use the optional argument
+in the \verb|\bibitem| command: then, only numbers will
+appear for the citations in the text (enclosed in square brackets)
+as well as for the marks in your
+bibliography (here the number is only end-punctuated without
+square brackets).
+\begin{verbatim}
+\begin{thebibliography}{1}
+\bibitem[CE1]{clar:eke}
+Clarke, F., Ekeland, I.:
+Nonlinear oscillations and boundary-value problems for
+Hamiltonian systems.
+Arch. Rat. Mech. Anal. {\bf 78} (1982) 315--333
+\end{thebibliography}
+\end{verbatim}
+%
+\end{document}
diff --git a/obsolete/macros/latex209/contrib/springer/jnsl/jnsldoc.sty b/obsolete/macros/latex209/contrib/springer/jnsl/jnsldoc.sty
new file mode 100644
index 0000000000..41f2ab345e
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/jnsl/jnsldoc.sty
@@ -0,0 +1,39 @@
+% This is JNSLDOC.STY the modification of the
+% JNS style file for the documentation of
+% the LaTeX macro package from Springer-Verlag
+% for the Journal of Nonlinear Science
+% version of 16 July 1990
+\def\LaTex{{\xxvpt
+\def\psc{\@getfont\psc\scfam\@xxvpt{\@mcsc\@magscale5}}\LaTeX}}
+\def\textfontii{\the\textfont\tw@}
+\def\AmSTeX{{\textfontii A}\kern-.1667em\lower.5ex\hbox
+ {\textfontii M}\kern-.125em{\textfontii S}-\TeX}
+%
+\def\degr{\hbox{$^\circ$}}
+\def\arcmin{\hbox{$^\prime$}}
+\def\arcsec{\hbox{$^{\prime\prime}$}}
+%
+\renewcommand{\labelitemi}{--}
+\newenvironment{alpherate}%
+{\renewcommand{\labelenumi}{\alph{enumi})}\begin{enumerate}}%
+{\end{enumerate}\renewcommand{\labelenumi}{enumi}}
+%
+\def\bibauthoryear{\begingroup
+\def\thebibliography##1{\section*{References}%
+ \small\list{}{\settowidth\labelwidth{}\leftmargin\parindent
+ \itemindent=-\parindent
+ \labelsep=\z@
+ \usecounter{enumi}}%
+ \def\newblock{\hskip .11em plus .33em minus -.07em}%
+ \sloppy
+ \sfcode`\.=1000\relax}%
+ \def\@cite##1{##1}%
+ \def\@lbibitem[##1]##2{\item[]\if@filesw
+ {\def\protect####1{\string ####1\space}\immediate
+ \write\@auxout{\string\bibcite{##2}{##1}}}\fi\ignorespaces}%
+\begin{thebibliography}{}
+\bibitem[1982]{clar:eke} Clarke, F., Ekeland, I.: Nonlinear
+oscillations and boundary-value problems for Hamiltonian systems.
+Arch. Rat. Mech. Anal. {\bf 78} (1982) 315--333
+\end{thebibliography}
+\endgroup}
diff --git a/obsolete/macros/latex209/contrib/springer/laa/laa.dem b/obsolete/macros/latex209/contrib/springer/laa/laa.dem
new file mode 100644
index 0000000000..672c5ae1c9
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/laa/laa.dem
@@ -0,0 +1,467 @@
+% laa.dem version 1.1 as of 25-Feb-91
+%
+% This is LAA.DEM, the demonstration file of the
+% LaTeX style file from Springer-Verlag for the
+% Astronomy and Astrophysics Main Journal
+%
+% It is for use with LaTeX version 2.09
+%
+% Please report all errors via e-mail to SPRINGER@DHDSPRI6.bitnet
+% or to the address mentioned on page 2 of the documentation
+%
+%\documentstyle{laamt} % LaTeX A&A Monotype Times Fonts
+\documentstyle{laa} % LaTeX A&A Standard Fonts
+
+%_____________________________________ `Thermodynamical' derivatives.
+%
+\newcommand{\DXDYCZ}[3]{\left( \frac{ \partial #1 }{ \partial #2 }
+ \right)_{#3}
+ }
+
+\begin{document}
+
+ \thesaurus{06 % A&A Section 6: Form. struct. and evolut. of stars
+ (03.11.1; % Cosmogony,
+ 16.06.1; % Planets and satellites: general,
+ 19.06.1; % Solar system: general,
+ 19.37.1; % Stars: formation of,
+ 19.53.1; % Stars: oscillations of,
+ 19.63.1) % Stars: structure of.
+ }
+%
+ \title{Hydrodynamics of giant planet formation}
+
+ \subtitle{I. Overviewing the $\kappa$-mechanism}
+
+ \author{G. Wuchterl
+% \inst{1}
+ }
+
+% \offprints{G. Wuchterl}
+
+ \institute{Institut f\"ur Theoretische
+ Astrophysik der Universit\"at Heidelberg, Im Neuenheimer
+ Feld 561,\\
+ W--6900 Heidelberg, Federal Republic of Germany\\
+ EARN: WCAH at DS0RUS1I
+ }
+
+ \date{Received September 15, 1989; accepted March 16, 1990}
+
+ \maketitle
+
+ \begin{abstract}
+%______________________________________ Do not leave a blank line here!
+%
+% 14.Sep.'90: Demo-Vs.
+%_____________________________________ Do not leave a blank line here!
+ To investigate the physical nature of the `nucleated instability'
+ of proto giant planets (Mizuno 1980), the stability of layers
+ in static,
+ radiative gas spheres is analysed on the basis of Baker's
+ 1966 standard one-zone model. It is shown that stability
+ depends only upon the equations of state, the opacities
+ and the local thermodynamic state in the layer. Stability
+ and instability can therefore be expressed in the form
+ of stability equations of state which are universal for a
+ given composition.
+
+ The stability equations of state are
+ calculated for solar composition and are displayed in the domain
+ $-14 \leq \lg \rho / {\rm [g\, cm^{-3}]} \leq 0 $,
+ $ 8.8 \leq \lg e / {\rm [erg\, g^{-1}]} \leq 17.7$. These displays
+ may be
+ used to determine the one-zone stability of layers in stellar
+ or planetary structure models by directly reading off the value of
+ the stability equations for the thermodynamic state of these layers,
+ specified
+ by state quantities as density $\rho$, temperature $T$ or
+ specific internal energy $e$.
+ Regions of instability in the $(\rho,e)$-plane are described
+ and related to the underlying microphysical processes.
+ Vibrational instability is found to be a common phenomenon
+ at temperatures lower than the second He ionisation
+ zone. The $\kappa$-mechanism is widespread under `cool'
+ conditions.
+
+ \keywords{giant planet formation --
+ $\kappa$-mechanism --
+ stability of gas spheres
+ }
+ \end{abstract}
+
+%
+% 14.Sep.'90: Demo-Vs.
+%________________________________________________________________
+
+\section{Introduction}
+
+ In the {\em nucleated instability\/} (also called core
+ instability) hypothesis of giant planet
+ formation, a critical mass for static core envelope
+ protoplanets has been found. Mizuno (1980) determined
+ the critical mass of the core to be about $12 \,M_\oplus$
+ ($M_\oplus=5.975 \, 10^{27}\rm \,g$ is the Earth mass), which
+ is independent of the outer boundary
+ conditions and therefore independent of the location in the
+ solar nebula. This critical value for the core mass corresponds
+ closely to the cores of today's giant planets.
+
+ Although no hydrodynamical study was available many workers
+ conjectured that a collapse or rapid contraction will ensue
+ after accumulating the critical mass. The main motivation for
+ this article
+ is to investigate the stability of the static envelope at the
+ critical mass. With this aim the local, linear stability of static
+ radiative gas spheres is investigated on the basis of Baker's
+ (1966) standard one-zone model. The nonlinear, hydrodynamic
+ evolution of the protogiant planet
+ beyond the critical mass, as calculated by Wuchterl
+ (1989), will be described in a forthcoming article.
+
+ The fact that Wuchterl (1989) found the excitation of
+ hydrodynamical waves in his models raises considerable interest
+ on the transition from static to dynamic evolutionary phases
+ of the protogiant planet at the critical mass.
+ The waves
+ play a crucial role in the development of the so-called
+ nucleated instability in the nucleated instability hypothesis.
+ They lead to the formation of
+ shock waves and massive outflow phenomena.
+ The protoplanet evolves into a new quasi-equilibrium structure
+ with a {\em pulsating} envelope, after the mass loss phase
+ has declined.
+
+ Phenomena similar to the ones described above for giant planet
+ formation have been found in hydrodynamical models concerning
+ star formation where protostellar cores explode
+ (Tscharnuter 1987, Balluch 1988),
+ whereas earlier studies found quasi-steady collapse flows. The
+ similarities in the
+ (micro)physics, i.e., constitutive relations of protostellar cores and
+ protogiant planets serve as a further motivation for this study.
+
+%
+% 14.Sep.'90: Demo-Vs.
+%__________________________________________________________________
+
+\section{Baker's standard one-zone model}
+
+% Two column figure (place early!)
+%______________________________________________ Gamma_1 (lg rho, lg e)
+ \begin{figure*}
+ \picplace{4cm}
+ \caption{Adiabatic exponent $\Gamma_1$.
+ $\Gamma_1$ is plotted as a function of
+ $\lg$ internal energy $\rm [erg\,g^{-1}]$ and $\lg$ density
+ $\rm [g\,cm^{-3}]$
+ }
+ \label{FigGam}
+ \end{figure*}
+%
+ In this section the one-zone model of Baker (1966), originally
+ used to study the Cephe{\"{\i}}d pulsation mechanism, will
+ be briefly reviewed. The resulting stability criteria will
+ be rewritten in terms of local state variables, local timescales
+ and constitutive relations.
+
+ Baker (1966) investigates the stability of thin layers in
+ self-gravitating,
+ spherical gas clouds with the following properties:
+ \begin{itemize}
+ \item hydrostatic equilibrium,
+ \item thermal equilibrium,
+ \item energy transport by grey radiation diffusion.
+ \end{itemize}
+ For the one-zone-model Baker obtains necessary conditions
+ for dynamical, secular and vibrational (or pulsational)
+ stability [Eqs.\ (34a,\,b,\,c) in Baker 1966]. Using Baker's
+ notation:
+ \[
+ \begin{array}{lp{0.8\linewidth}}
+ M_{\rm r} & mass internal to the radius $r$ \\
+ m & mass of the zone \\
+ r_0 & unperturbed zone radius \\
+ \rho_0 & unperturbed density in the zone \\
+ T_0 & unperturbed temperature in the zone \\
+ L_{r0} & unperturbed luminosity \\
+ E_{\rm th} & thermal energy of the zone
+ \end{array}
+ \]
+\noindent
+ and with the definitions of the {\em local cooling time\/}
+ (see Fig.~\ref{FigGam})
+ \begin{equation}
+ \tau_{\rm co} = \frac{E_{\rm th}}{L_{r0}} \,,
+ \end{equation}
+ and the {\em local free-fall time\/}
+ \begin{equation}
+ \tau_{\rm ff} =
+ \sqrt{ \frac{3 \pi}{32 G} \frac{4\pi r_0^3}{3 M_{\rm r}} }\,,
+ \end{equation}
+ Baker's $K$ and $\sigma_0$ have the following form:
+ \begin{eqnarray}
+ \sigma_0 & = & \frac{\pi}{\sqrt{8}}
+ \frac{1}{ \tau_{\rm ff} } \\
+ K & = & \frac{\sqrt{32}}{\pi} \frac{1}{\delta}
+ \frac{ \tau_{\rm ff} }
+ { \tau_{\rm co} }\,;
+ \end{eqnarray}
+ where $ E_{\rm th} \approx m (P_0/{\rho_0})$ has been used and
+ \begin{equation}
+ \delta = - \left(
+ \frac{ \partial \ln \rho }{ \partial \ln T }
+ \right)_P
+ \end{equation}
+ is a thermodynamical quantity which is
+ %of order $1$ and
+ equal to $1$ for nonreacting mixtures of classical perfect
+ gases.
+ The physical meaning of $ \sigma_0 $ and $K$ is clearly visible in
+ the equations above. $\sigma_0$ represents a frequency of the order one
+ per free-fall time. $K$ is
+ proportional to the ratio of the free-fall time and the cooling time.
+ Substituting into Baker's criteria, using thermodynamic identities
+ and definitions of thermodynamic quantities,
+ \begin{equation}
+ \Gamma_1 = \DXDYCZ{\ln P}{\ln \rho}{S} \; , \;
+ \chi^{}_\rho = \DXDYCZ{\ln P}{\ln \rho}{T} \; , \;
+ \kappa^{}_{P} = \DXDYCZ{\ln \kappa}{\ln P}{T} \, ,
+ \end{equation}
+ \begin{equation}
+ \nabla_{\rm ad} = \DXDYCZ{\ln T}{\ln P}{S} \; , \;
+ \chi^{}_T = \DXDYCZ{\ln P}{\ln T}{\rho} \; , \;
+ \kappa^{}_{T} = \DXDYCZ{\ln \kappa}{\ln T}{T} \, ,
+ \end{equation}
+ one obtains, after some pages of algebra, the conditions for
+ {\em stability} given
+ below:
+ \begin{eqnarray}
+ \frac{\pi^2}{8} \frac{1}{\tau_{\rm ff}^2}
+ ( 3 \Gamma_1 - 4 )
+ & > & 0 \label{ZSDynSta} \\
+ \frac{\pi^2}{\tau_{\rm co}
+ \tau_{\rm ff}^2}
+ \Gamma_1 \nabla_{\rm ad}
+ \left[ \frac{ 1- 3/4 \chi^{}_\rho }{ \chi^{}_T }
+ ( \kappa^{}_T - 4 )
+ + \kappa^{}_P + 1
+ \right]
+ & > & 0 \label{ZSSecSta} \\
+ \frac{\pi^2}{4} \frac{3}{\tau_{ \rm co }
+ \tau_{ \rm ff }^2
+ }
+ \Gamma_1^2 \, \nabla_{\rm ad} \left[
+ 4 \nabla_{\rm ad}
+ - ( \nabla_{\rm ad} \kappa^{}_T
+ + \kappa^{}_P
+ )
+ - \frac{4}{3 \Gamma_1}
+ \right]
+ & > & 0 \label{ZSVibSta}
+ \end{eqnarray}
+%
+ For a physical discussion of the stability criteria see Baker (1966)
+ or Cox (1980).
+
+ We observe that these criteria for dynamical, secular and
+ vibrational stability, respectively, can be factorized into
+ \begin{enumerate}
+ \item a factor containing local timescales only,
+ \item a factor containing only constitutive relations and
+ their derivatives.
+ \end{enumerate}
+ The first factors, depending on only timescales, are positive
+ by definition. The signs of the left hand sides of the
+ inequalities~(\ref{ZSDynSta}), (\ref{ZSSecSta}) and (\ref{ZSVibSta})
+ therefore depend exclusively on the second factors containing
+ the constitutive relations. Since they depend only
+ on state variables, the stability criteria themselves are {\em
+ functions of the thermodynamic state in the local zone}. The
+ one-zone stability can therefore be determined
+ from a simple equation of state, given for example, as a function
+ of density and
+ temperature. Once the microphysics, i.e.\ the thermodynamics
+ and opacities (see Table~\ref{KapSou}), are specified (in practice
+%
+ by specifying a chemical composition) the one-zone stability can
+ be inferred if the thermodynamic state is specified.
+ The zone -- or in
+ other words the layer -- will be stable or unstable in
+ whatever object it is imbedded as long as it satisfies the
+ one-zone-model assumptions. Only the specific growth rates
+ (depending upon the time scales) will be different for layers
+ in different objects.
+
+%__________________________________________________ One column table
+ \begin{table}
+ \caption{Opacity sources}
+ \label{KapSou}
+ \[
+ \begin{array}{p{0.5\linewidth}l}
+ \hline
+ \noalign{\smallskip}
+ Source & T / {[\rm K]} \\
+ \noalign{\smallskip}
+ \hline
+ \noalign{\smallskip}
+ Yorke 1979, Yorke 1980a & \leq 1700 \\
+ Kr\"ugel 1971 & 1700 \leq T \leq 5000 \\
+ Cox \& Stewart 1969 & 5000 \leq \\
+ \noalign{\smallskip}
+ \hline
+ \end{array}
+ \]
+ \end{table}
+%
+%
+%___________________________________ Two column table (place early!)
+ \begin{table*}
+ \caption{Regions of secular instability}
+ \label{TabSecInst}
+ \picplace{4cm}
+ \end{table*}
+ We will now write down the sign (and therefore stability)
+ determining parts of the left-hand sides of the inequalities
+ (\ref{ZSDynSta}), (\ref{ZSSecSta}) and (\ref{ZSVibSta}) and thereby
+ obtain {\em stability equations of state}.
+
+ The sign determining part of inequality~(\ref{ZSDynSta}) is
+ $3\Gamma_1 - 4$ and it reduces to the
+ criterion for dynamical stability
+ \begin{equation}
+ \Gamma_1 > \frac{4}{3}\,.
+ \end{equation}
+ Stability of the thermodynamical equilibrium demands
+ \begin{equation}
+ \chi^{}_\rho > 0, \;\; c_v > 0\, ,
+ \end{equation}
+ and
+ \begin{equation}
+ \chi^{}_T > 0
+ \end{equation}
+ holds for a wide range of physical situations.
+ With
+ \begin{eqnarray}
+ \Gamma_3 - 1 = \frac{P}{\rho T} \frac{\chi^{}_T}{c_v}&>&0\\
+ \Gamma_1 = \chi_\rho^{} + \chi_T^{} (\Gamma_3 -1)&>&0\\
+ \nabla_{\rm ad} = \frac{\Gamma_3 - 1}{\Gamma_1} &>&0
+ \end{eqnarray}
+ we find the sign determining terms in inequalities~(\ref{ZSSecSta})
+ and (\ref{ZSVibSta}) respectively and obtain the following form
+ of the criteria for dynamical, secular and vibrational
+ {\em stability}, respectively:
+ \begin{eqnarray}
+ 3 \Gamma_1 - 4 =: S_{\rm dyn} > & 0 & \label{DynSta} \\
+%
+ \frac{ 1- 3/4 \chi^{}_\rho }{ \chi^{}_T } ( \kappa^{}_T - 4 )
+ + \kappa^{}_P + 1 =: S_{\rm sec} > & 0 & \label{SecSta} \\
+%
+ 4 \nabla_{\rm ad} - ( \nabla_{\rm ad} \kappa^{}_T + \kappa^{}_P )
+ - \frac{4}{3 \Gamma_1} =: S_{\rm vib}
+ > & 0\,.& \label{VibSta}
+ \end{eqnarray}
+ The constitutive relations are to be evaluated for the
+ unperturbed thermodynamic state (say $(\rho_0, T_0)$) of the zone.
+ We see that the one-zone stability of the layer depends only on
+ the constitutive relations $\Gamma_1$,
+ $\nabla_{\rm ad}$, $\chi_T^{},\,\chi_\rho^{}$,
+ $\kappa_P^{},\,\kappa_T^{}$.
+ These depend only on the unperturbed
+ thermodynamical state of the layer. Therefore the above relations
+ define the one-zone-stability equations of state
+ $S_{\rm dyn},\,S_{\rm sec}$
+ and $S_{\rm vib}$. See Fig.~\ref{FigVibStab} for a picture of
+ $S_{\rm vib}$. Regions of secular instability are
+ listed in Table~\ref{TabSecInst}.
+
+%
+% One column figure
+%----------------------------------------------------------- S_vib
+ \begin{figure}[htbp]
+ \picplace{5cm}
+ \caption{Vibrational stability equation of state
+ $S_{\rm vib}(\lg e, \lg \rho)$.
+ $>0$ means vibrational stability
+ }
+ \label{FigVibStab}
+ \end{figure}
+%
+%
+% 14.Sep.'90: Demo Vs.
+%______________________________________________________________
+
+\section{Conclusions}
+
+ \begin{enumerate}
+ \item The conditions for the stability of static, radiative
+ layers in gas spheres, as described by Baker's (1966) standard
+ one-zone model, can be expressed as stability equations
+ of state. These stability equations of state depend only on
+ the local thermodynamic state of the layer.
+ \item If the constitutive relations -- equations of state and
+ Rosseland mean opacities -- are specified, the stability
+ equations of state can be evaluated without specifying
+ properties of the layer.
+ \item For solar composition gas the $\kappa$-mechanism is
+ working in the regions of the ice and dust features
+ in the opacities, the $\rm H_2$ dissociation and the
+ combined H, first He ionization zone, as
+ indicated by vibrational instability. These regions
+ of instability are much larger in extent and degree of
+ instability than the second He ionization zone
+ that drives the Cephe{\"\i}d pulsations.
+ \end{enumerate}
+
+ \acknowledgements
+%________________________________________ Do not leave a blank line here!
+ Part of this work was supported by the German
+ {\em Deut\-sche For\-schungs\-ge\-mein\-schaft, DFG\/} project
+ number Ts~17/2--1.
+
+%
+% 14.Sep.'90: Demo-Vs.
+%_____________________________________________________________________
+
+\begin{thebibliography}{}
+
+ \bibitem{} Baker N., 1966,
+ in: Stellar Evolution,
+ eds.\ R. F. Stein, A. G. W. Cameron,
+ Plenum, New York, p.\ 333
+
+ \bibitem{} Balluch M., 1988,
+ A\&A 200, 58
+
+ \bibitem{} Cox J. P., 1980,
+ Theory of Stellar Pulsation,
+ Princeton University Press, Princeton, p.\ 165
+
+ \bibitem{} Cox A. N., Stewart J. N., 1969,
+ Academia Nauk, Scientific Information 15, 1
+
+ \bibitem{} Kr\"ugel E., 1971,
+ Der Rosselandsche Mittelwert bei tiefen Temperaturen,
+ Diplom--Thesis, Univ.\ G\"ottingen
+
+ \bibitem{} Mizuno H., 1980,
+ Prog. Theor. Phys. 64, 544
+
+ \bibitem{} Tscharnuter W. M., 1987,
+ A\&A 188, 55
+
+ \bibitem{} Wuchterl G., 1989,
+ Zur Entstehung der Gasplaneten.\ Ku\-gel\-sym\-me\-tri\-sche
+ Gas\-str\"o\-mun\-gen auf Pro\-to\-pla\-ne\-ten,
+ Dissertation, Univ.\ Wien
+
+ \bibitem{} Yorke H. W., 1979,
+ A\&A 80, 215
+
+ \bibitem{} Yorke H. W., 1980a,
+ A\&A 86, 286
+
+\end{thebibliography}
+
+\end{document}
+ \ No newline at end of file
diff --git a/obsolete/macros/latex209/contrib/springer/laa/laa.doc b/obsolete/macros/latex209/contrib/springer/laa/laa.doc
new file mode 100644
index 0000000000..97fe2458d9
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/laa/laa.doc
@@ -0,0 +1,1458 @@
+% laa.doc version 1.1 as of 25-Feb-91
+%
+% This is LAA.DOC, the documentation of the
+% LaTeX style file from Springer-Verlag for the
+% Astronomy and Astrophysics Main Journal
+%
+% It is for use with LaTeX version 2.09
+%
+% Please report all errors via e-mail to SPRINGER@DHDSPRI6.bitnet
+% or to the address mentioned on page 2 of the documentation
+%
+\documentstyle{laa}
+\def\LaTex{{\xviipt{\rm L\kern-.36em\raise.3ex\hbox{\xviipt\sc a}\kern-.15em
+ T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}}
+\def\textfontii{\the\textfont\tw@}
+\def\AmSTeX{{\textfontii A}\kern-.1667em\lower.5ex\hbox
+ {\textfontii M}\kern-.125em{\textfontii S}-\TeX}
+%
+\renewcommand{\labelitemi}{--}
+\newenvironment{alpherate}%
+{\renewcommand{\labelenumi}{(\alph{enumi})}\begin{enumerate}}%
+{\renewcommand{\labelenumi}{enumi}\end{enumerate}}
+%
+\setlength{\textwidth}{14.5truecm}
+\addtolength{\fboxsep}{2pt}
+\setlength{\fboxrule}{0.4pt}
+\newcommand{\BibTeX}{{\sc Bib}\TeX}
+\newcommand{\laa}{\LaTeX{} A\&A style}
+\newcommand{\Msun}{M_{\odot}}
+\newcommand{\listing}[1]{\begin{verbatim}\input#1}
+%
+% demonstration article for A&A
+% units etc.
+\newcommand{\cm}{\ {\rm cm}}
+\newcommand{\mG}{\ {\rm mG}}
+\newcommand{\dyn}{\ {\rm dyn}}
+\newcommand{\erg}{\ {\rm erg}}
+\newcommand{\kpc}{\ {\rm kpc}}
+\newcommand{\yr}{\ {\rm yr}}
+\newcommand{\secnd}{\ {\rm s}}
+\newcommand{\Msol}{M_{\odot}}
+%
+% references
+%
+\newcommand{\araa}{ARA\&A} % Annual Review of Astronomy and Astrophys.
+\newcommand{\afz}{Afz} % Astrofizica
+\newcommand{\aj}{AJ} % Astronomical Journal
+\newcommand{\azh}{AZh} % Astronomicekij Zhurnal
+\newcommand{\aaa}{A\&A} % Astronomy and Astrophysics
+\newcommand{\aas}{A\&AS} % Astronomy and Astrophys. Supplement Series
+\newcommand{\aar}{A\&AR} % Astronomy and Astrophysics Review
+\newcommand{\apj}{ApJ} % Astronphysical Journal
+\newcommand{\apss}{Ap\&SS} % Astronphysics and Space Science
+\newcommand{\baas}{BAAS} % Bulletin of the American Astron. Society
+\newcommand{\jaa}{JA\&A} % Journal of Astronomy and Astrophysics
+\newcommand{\mnras}{MNRAS} % Monthly Notices of the Roy. Astron. Society
+\newcommand{\nat}{Nat} % Nature
+\newcommand{\pasj}{PASJ} % Publ. of the Astron. Society of Japan
+\newcommand{\pasp}{PASP} % Publ. of the Astron. Society of the Pacific
+\newcommand{\paspc}{PASPC} % Publ. Astron. Soc. Pacific Conf. Proc.
+\newcommand{\qjras}{QJRAS} % Quart. Journal of the Royal Astron. Society
+\newcommand{\Sci}{Sci} % Science
+\newcommand{\sova}{SvA} % Soviet Astronomy
+\newcommand{\rasav}{Ric.~astr.~Specola astr.~Vatic.}
+% Richerche Astronomicha. Specola astronomica Vaticana
+\newcommand{\sca}{Scient.~Am.} % Scientific American
+\newcommand{\stel}{Sky Telesc.} % Sky and Telescope
+\newcommand{\spsrev}{Space Sci.~Rev.} % Space Science Reviews
+\newcommand{\phfl}{Phys. Fluids}
+\newcommand{\phrev}{Phys. Rev.}
+\newcommand{\rprph}{Rep. Prog. Phys.}
+\newcommand{\rmph}{Rev. Mod. Phys.}
+\newcommand{\jplph}{J. Plasma Phys.}
+\newcommand{\jmph}{J. Math. Phys.}
+\newcommand{\jgeores}{J. Geophys. Res.}
+%
+\newfont{\mytitlebigfont}{cmr10 scaled \magstep5}
+\newfont{\mytitlefont}{cmr10 scaled \magstep3}
+%
+\begin{document}
+\onecolumn
+\begin{titlepage}
+\thispagestyle{empty}
+\renewcommand{\baselinestretch}{4}\small\normalsize
+\vspace*{.5cm}
+\begin{center}
+\mytitlebigfont
+ASTRONOMY\\
+AND\\
+ASTROPHYSICS
+\end{center}
+\vspace{2cm}
+\begin{center}
+\mytitlefont
+A European Journal\\[3cm]
+Springer Verlag\\
+\LaTex{} A\&A style file\\
+1990
+\end{center}
+\renewcommand{\baselinestretch}{1}\small\normalsize
+\end{titlepage}
+%
+\addtocounter{page}{1}
+\section*{For further information please contact us at Springer-Verlag,
+Heidelberg:}
+\label{assist}
+%
+\begin{flushleft}
+\begin{tabular}{@{}l@{\hspace{.5cm}}p{.5\textwidth}}
+Mailing address: & Springer-Verlag\\
+ & New Technologies/Product Developement\\
+ & P.O.~Box 105280\\
+ & D-6900 Heidelberg 1, FRG\\[2mm]
+Datex-P dial: & FRG 456 221 4305\\
+ & If you do not yet have an account, press RETURN when
+ asked for your name; then simply leave a message.\\
+ & The file name should be your name and country
+ or state, e.g. smith-texas\\[2mm]
+bitnet/EARN: & SPRINGER @ DHDSPRI6 \\[2mm]
+Telex: & 46\,17\,23 \\[2mm]
+Telefax: & (0) 62\,21 43\,982
+\end{tabular}
+\end{flushleft}
+\rule{\textwidth}{1pt}
+%
+\section*{Mailing address for your disk/magnetic tape and output:}
+%
+\begin{flushleft}
+\begin{tabular*}{\textwidth}%
+{@{}l@{\extracolsep{\fill}}ll@{\extracolsep{0pt}}}
+J.~Lequeux (Editor in Chief) & M.~Grewing (Editor in Chief) &
+ S.~R.~Pottasch (Letters Editor)\\
+Astronomy and Astrophysics & Astronomy and Astrophysics & Kapteyn
+ Astronomical Institute\\
+Editorial Office & Editorial Office & P.O.~Box 800\\
+Observatoire de Meudon & c/o Astronomisches Institut &
+ NL--9700 AV Groningen\\
+F--92\,195 Meudon Principal Cedex & Waldh\"auserstra\ss{}e 64 & The
+ Netherlands\\
+France & D--7400 T\"ubingen & Tel. (31-50) 63\,40\,93\\
+Tel. (33-1) 45-07-06-30 & Fed.~Rep.~of Germany & Telex (44) 53\,572
+ stars nl\\
+Telex (42) 27\,09\,12 obsastr & Tel. (49-70\,71) 29\,49\,82 & Telefax
+ (31-50) 63\,40\,33\\
+Telefax (33-1) 46\,26\,62\,93 & Telefax (49-0\,70\,71) 29\,34\,58\\
+ & Telex (41) 7\,262\,714 ait d \\
+E-Mail: & E-Mail\\
+EARN AANDA @ FRMEU 51 & Datex-P 02\,62-45\,707\,130\,039\\
+SPAN MESIOA::AANDA & SPAN AITMVX::AAPTUE
+\end{tabular*}
+\end{flushleft}
+The following formats are acceptable: 5.25$^{\prime\prime}$ diskette
+MS-DOS, 5.25$^{\prime\prime}$ CP/M, 3.5$^{\prime\prime}$ diskette
+MS-DOS, 3.5$^{\prime\prime}$ diskette Apple MacIntosh, 9-track 1600
+bpi magnetic tape VAX/VMS, 9-track 1600 bpi magnetic tape ANSI with
+label, 9-track 1600 bpi magnetic tape SUN-Streamer Tape.
+
+Once you have completed your work using this style file,
+please submit your own printout of the
+{\em final version together with the disk
+or magnetic tape\/} containing your
+\LaTeX{} input (source) file and the final DVI-file and {\em make sure
+that the text in each is identical.}
+
+Articles coded with \LaTeX{} but not with the \laa{} file,
+and those not using Monotype Times fonts (MT fonts), cannot be
+accepted for electronic processing; they will be typeset in the
+conventional way.
+%
+\newpage
+\tableofcontents
+\newpage
+%
+\section{Introduction}
+%
+Authors wishing to code their article for
+\begin{center}
+{\em Astronomy and Astrophysics}
+\end{center}
+with \LaTeX{}, as well as
+those who have already coded it with \LaTeX{},
+will be provided with a style file that will give the text the
+desired layout. Authors are requested
+to adhere strictly to these instructions; {\em the \laa{} file
+must not be changed}.
+
+For the main body of the paper (the text)
+you should use the commands of standard \LaTeX{}.
+Even if you are familiar with these commands, we urge you to read
+this entire document thoroughly. It contains many suggestions on
+how to use our commands properly; thus with little work your paper
+will be formatted exactly to the A\&A standard.
+
+If you are already familiar with \LaTeX{}, then the
+\laa{} file should not give you any major difficulties.
+This style file will change the layout to the required A\&A style
+(for instance it will define the layout of \verb|\section|).
+We have also invented some extra commands,
+which are not provided by \LaTeX{} (e.g.
+\verb|\institute|, see Sect.~\ref{contbegin}).
+
+The majority of these hints are not specific for A\&A; they may improve
+your use of \LaTeX{} in general.
+Furthermore, the documentation provides suggestions for the proper
+editing and use
+of the input files (capitalization, abbreviation, etc. -- see
+Sect.~\ref{refedit}).
+
+Depending on your \LaTeX{} installation, especially the file
+\verb|LFONTS.TEX|, you can get the
+\LaTeX{} warning: \verb|No \boldmath typeface
+in this size, using \unboldmath.| This can be ignored because in
+the final version with the original MT fonts it will be correct.
+
+Articles using \LaTeX{} but not coded and formatted with the \laa{} file
+or {\em without} using MT fonts will have to be processed in the conventional
+way.
+%
+\subsection{Preparing the final version for submission}
+%
+Before submitting the {\em final} version of an article to the editorial
+office, authors must run \LaTeX{} with the MTLPLAIN format file.
+(Run it twice if you have citations or references.)
+In this way the original Monotype Times fonts (MT fonts)
+can be simulated, i.e. the length of lines, paragraphs, width of
+characters, and word divisions are absolutely identical with the printed
+version. Thus, proofreading becomes unnecessary and, at the same time,
+publication times are shortened. The installation of the MT fonts is
+described on page \pageref{mtinstr}.
+
+We do not advise using M\LaTeX{} (see Sect.~\ref{mlatex})
+from the start. Please note
+that the fonts will be only a simulation of the Monotype
+Times fonts.
+They may not appear well proportioned on your own printout
+if you use, for example, HP Laserjet, Apple Laserwriter
+(in general Postscript capable printers),
+this will be automatically corrected in the final version
+produced by the printers.
+The Previewer from Arbortext will work with the simulated
+fonts; however, other preview programs may not work.
+\begin{flushleft}
+\addtolength{\textwidth}{-11pt}
+\fbox{\parbox{\textwidth}{Once you have
+completed your work using this style file,
+please submit your own printout of the final version
+{\em together with the disk or magnetic tape} containing your
+\LaTeX{} input (source) file and the final DVI-file and {\em make sure
+that the text in each is identical.}}}
+\addtolength{\textwidth}{11pt}
+\end{flushleft}
+%
+\section{How to begin}
+%
+Please insert the enclosed diskette or tape into your computer. You will
+find the following files:
+\begin{flushleft}
+\begin{tabular}{l@{\hspace{5mm}}l@{\hspace{5mm}}l}
+Directory &Files&Contents \\
+\verb|\latex|&{\em laa.doc}
+ & General instructions (this document).\\
+\verb|\latex|&{\em laa.dem} & Run this to get a sample output.\\
+\verb|\latex|&{\em laa.sty}
+ & {\rm \laa{}} file for use with normal CM-Fonts.\\
+\verb|\latex|&{\em laamt.sty}
+ & {\rm \laa{}} file for use with MT-Fonts.\\[1.5mm]
+\verb|\|&{\em aa.the}
+& List of thesaurus codes (print it using the plain package
+\verb|\plain\aa.cmm|).
+\end{tabular}
+\end{flushleft}
+You need to run your file with the command:
+\verb|latex filename| or \verb|mlatex filename|.
+If you have citations or references run it
+once more with the same command.
+
+In order to facilitate the refereeing process (and to yield fine
+preprints!), please generate a ``referee version'' (single column,
+double-line spacing), before using the MT fonts
+by giving the following document-style option in
+the line \verb|\documentstyle{laa}| (or see in laatext.dem):
+\begin{verbatim}
+\documentstyle[referee]{laa}
+\end{verbatim}
+After acceptance of your paper, delete this option in order to generate
+the final version.
+%
+\subsection{How to invoke the \protect\laa{} file}
+%
+The \laa{} file is an adaptation of the \LaTeX{} ``article'' style.
+Therefore you may use all ``article'' style commands to prepare your
+manuscript. \laa{} file is invoked by requesting ``laa'' in the
+\verb|documentstyle|-command:
+\begin{verbatim}
+\documentstyle{laa}
+ \begin{document}
+ <your article>
+ \end{document}
+\end{verbatim}
+Do not use any other document-style options except for \verb|referee|!
+%
+\subsection{Articles already coded with \LaTeX{} without
+the \protect\laa{} file}
+%
+If your file is already coded with \LaTeX{}
+you can easily adapt it a posteriori to \laa{}.
+Articles using \LaTeX{} but not coded and formatted with the
+\laa{} file cannot be accepted at the present
+time; they will have to be processed in the conventional way.
+
+Please refrain from using any \LaTeX{} or \TeX{} commands
+that affect the layout or formatting of your document (i.e. commands
+like \verb|\textheight|, \verb|\vspace|, \verb|\hoffset|, etc.).
+There may nevertheless be exceptional occasions
+when some of them may be used.
+
+The \laa{} file has been carefully designed to produce the right layout
+from your \LaTeX{} input. If there is anything specific you would like
+to do and for which the style file does not provide a command,
+{\em please contact us.\/}
+
+If you have your own macros or definitions, insert them as shown here:
+\begin{verbatim}
+\documentstyle{laa}
+ <your own macros or definitions>
+ \begin{document}
+ <your article>
+ \end{document}
+\end{verbatim}
+%
+\section{General rules for coding formulas}
+%
+With mathematical formulas, you may proceed as described
+in Sect.~3.3 of the {\em \LaTeX{} User's Guide \& Reference
+Manual\/} by Leslie Lamport (1986), Addison-Wesley Publishing
+Company, Reading, Mass.
+
+A formula that appears in the running text is produced by enclosing
+it in \verb|$| signs, e.g. \verb|$ x^{2} $|
+produces $x^{2}$.\label{math}
+
+Displayed formulas are produced by the
+equation environment; here
+equations are automatically numbered sequentially throughout
+your article using arabic
+numerals in parentheses on the right-hand side.
+
+If you have to break equations, please use the eqnarray environment
+described in Sect.~3.3.5 on p.~49 of the \LaTeX{} book.
+
+If you wish to start a new paragraph immediately after a displayed
+equation, insert a blank line to produce the required
+indention. If there is no new paragraph either do not insert
+a blank line or insert a blank line and
+code \verb|\noindent| immediately before continuing the text.
+
+Please punctuate a displayed equation in the same way as
+ordinary text.
+
+Note that the sizes of the parentheses or other delimiter
+symbols used in equations should ideally match the height of the
+formulas being enclosed. This is automatically taken care of by
+the following \LaTeX{} commands, e.g.\ \
+\verb|\left(| \quad or \quad \verb|\left[| \quad and \quad
+\verb|\right)| \quad or \quad \verb|\right]|.
+%
+\subsection{Italic and roman type in the math mode}
+%
+\begin{alpherate}
+\item
+In the math mode \TeX{} and \LaTeX{} treat all letters as though they
+were mathematical or physical variables; hence they are typeset in
+italics. However, any textual elements within formulas should be
+coded for roman. Roman should also be used for
+subscripts and superscripts {\em in formulas\/} where these are
+merely labels and not in themselves variables, e.g.\\
+\verb|$T_{\rm eff} = 5\,10^{9} \mbox{ K}$| produce
+$T_{\rm eff} = 5\,10^{9} \mbox{ K}$\\
+\verb|$T_{\rm K}$| produce $T_{\rm K}$ (K = Kelvin)\\
+\verb|$m_{\rm e}$| produce $m_{\rm e}$ (e = electron).
+
+However, do not code for roman
+if the subscripts or superscripts represent variables,
+e.g. $\sum_{i=1}^{n} a_{i}$.
+
+\paragraph{Sample input}
+\begin{verbatim}
+\begin{equation}
+ \left(\frac{a^{2} + b^{2}}{c^{3}} \right) = 1 \quad
+ \mbox{ if } c\neq 0 \mbox{ and if } a,b,c\in \bbbr.
+\end{equation}
+\end{verbatim}
+
+\paragraph{Sample output}
+\begin{equation}
+ \left(\frac{a^{2} + b^{2}}{c^{3}} \right) = 1 \quad
+ \mbox{ if } c\neq 0 \mbox{ and if } a,b,c\in \bbbr.
+\end{equation}
+%
+\item
+Please ensure that {\em physical units\/} (e.g.\ pc, erg s$^{-1}$
+K, cm$^{-3}$, W m$^{-2}$ Hz$^{-1}$, m kg s$^{-2}$ A$^{-2}$) and
+{\em abbreviations} such as Ord, Var, GL, SL, sgn, const.\
+are always set in roman type. To ensure
+this use the \verb|\mbox| command: \verb|\mbox{Hz}|.
+On p.\ 46 of the {\em \LaTeX{} User's Guide \& Reference
+Manual\/} by Leslie Lamport you will find the names of
+common mathe\-matical functions, such as log, sin, exp, max and sup.
+These should be coded as \verb|\log|,
+\verb|\sin|, \verb|\exp|, \verb|\max|, \verb|\sup|
+and will then automatically appear in roman.
+%
+\item
+In order
+to distinguish ``d'' used as ``differential sign'' and ``e''
+used as ``exponential function'' from normal variables,
+please code ``d'' and ``e'' for roman.
+%
+\item
+Chemical symbols and formulas should be coded for roman,
+e.g.\ Fe not $Fe$, H$_{2}$O not {\em H$_{2}$O\/}, H$\alpha$ not
+{\em H${\alpha}$}.
+\end{alpherate}
+%
+\section{How to edit your input (source) file}
+\label{refedit}
+%
+\subsection{Headings}
+%
+The main title, subtitle, and all headings should not be capitalized,
+except, of course, for the first letter and any other words which are
+always capitalized. Titles have no end punctuation.
+%
+\subsection{Capitalization and non-capitalization}
+\label{capit}
+%
+\begin{alpherate}
+\item
+The following should always be capitalized:
+\begin{itemize}
+\item
+Abbreviations and expressions in the text such as
+Fig(s)., Table(s), Sect(s)., Chap(s)., Paper, Theorem,
+etc. but only when used with numbers, e.g. Fig.~3, Table~1,
+Paper III, Theorem 2.
+\end{itemize}
+Please follow the special rules
+in Sect.~4.3 for referring to equations.
+\item
+The following should {\em not\/} be capitalized:
+\begin{itemize}
+\item
+The words figure(s), table(s), equation(s),
+theorem(s) in the text when used without an accompanying number.
+\item
+Figure legends and table captions except for names,
+certain abbreviations, and the opening letter.
+\end{itemize}
+\end{alpherate}
+%
+\subsection{Abbreviation of words}
+%
+\begin{alpherate}
+\item
+The following {\em should\/} be abbreviated
+when they appear in running text followed by a number {\em unless\/}
+they come at the beginning of a sentence:
+Chap., Sect., Fig., Eq.; e.g.\\
+The results are depicted in Fig.~5. Figure 9 reveals that \dots\\
+{\em Please note\/}: Equations should be referred by the abbreveation
+``Eq.'' and the respective number in parentheses,
+e.g.\ Eq.~(14). However, when the reference comes at the
+beginning of a sentence, the unabbreviated word ``Equation''
+should be used, e.g.\\
+Equation (14) is very important. However, Eq.~(15)
+makes it clear that \dots
+\item
+If abbreviations of names or concepts are used throughout
+the article, they should be defined at first occurrence,
+e.g. active galactic nuclei (AGN), magnetohydrodynamic (MHD).
+If these names or concepts are also mentioned in the Abstract,
+they should be defined there as well.
+\end{alpherate}
+%
+\subsection{Foreign words and phrases}
+%
+Foreign words that have not come into general use are italicized.
+If a word or phrase or its abbrevation can be found in the main body
+of {\em Webster's\/} (and this also applies to British usage),
+it and its abbrevation are considered to be in general use and
+are not italicized. E.g. et al., cf., e.g.,
+a priori, in situ, brems\-strah\-lung, eigenvalues, should not be
+italicized.
+%
+\section{How to code the beginning of your article}
+\label{contbegin}
+%
+\subsection{Section number and thesaurus codes}
+\label{thescode}
+%
+When your article is published, the title and author(s)
+will be printed in the table of contents under the appropriate section
+heading (e.g. ``Cosmology'', ``Extragalactic astronomy'' etc.) In the
+annual index (and later in the 5-year index) your article will appear
+under between one and six (maximum) different subject headings
+(or key words). For computer storage and sorting, it is
+necessary that the {\em section number\/} and {\em thesaurus
+code numbers\/} are typeset above the title in the page proofs.
+The thirteen subject sections are listed on the first page of each
+issue of the journal. The list of thesaurus code numbers (revised in
+December 1989) is to be found on pages 471--473 of the 1989 annual
+index (A\&A 226/2, December II, 1989). These numbers correspond to
+the subject headings (or key words) used in the annual indexes.
+\begin{verbatim}
+\thesaurus{<thesaurus code(s)>}
+\end{verbatim}
+
+\paragraph{Example:}
+An article on ``Magnetohydrodynamic shock waves'' belongs to
+Sect.~3 (``Extragalactic astronomy'') and will be listed in the annual
+index under ``Acceleration mechanisms'' (01.01.1),
+``Galaxies: jets of''
+(07.13.1) and ``Hydromagnetics'' (08.01.1). The complete coding, printed
+automatically in boldface at the top of the
+first page, should have the following
+presentation (note that the codes within the parentheses are
+separated by semicolons):
+\begin{verbatim}
+\thesaurus{03(01.01.1; 07.13.1; 08.01.1)}
+\end{verbatim}
+The list of possible thesaurus codes and their meanings are included on
+the file {\em laa.the} in the root directory of the distribution
+disk (to be \TeX{}'ed using the plain\,\TeX{} package
+\verb|\plain\aa.cmm|).
+%
+\subsection{The title}
+%
+Code the title of your article as follows:
+\begin{verbatim}
+\title{<your title>}
+\subtitle{<your subtitle>}
+\end{verbatim}
+The main title and the subtitle should not be capitalized,
+except for the first letter and any other words which are
+always capitalized.
+
+If a long \verb|\title| or \verb|\subtitle|
+needs to be divided, please use the code \verb|\\| \ \ (for new line).
+%
+\subsection{Names of authors}
+%
+The preferred form for each name is: initial(s)
+of the forename(s) followed by the family name.
+\begin{verbatim}
+\author{<first author's name>
+\and <second author's name> ...}
+\end{verbatim}
+If there is more than one author, the order is optional.
+The names should be separated by \verb|\and|.
+
+If the authors have different affiliations, each name has to be
+followed by
+\begin{verbatim}
+\inst{<number>}
+\end{verbatim}
+Numbers referring to
+different addresses should be attached to each author.
+
+If there is more than one author, please provide an address for
+offprint requests, for example
+\begin{verbatim}
+\offprints{<name>}
+\end{verbatim}
+%
+\subsection{Addresses}
+%
+If there is more than one address,
+the entries are numbered automatically
+with \verb|\and|, in the order in which you type them.
+Please make sure that the numbers match those placed next to
+to the authors' names.
+\begin{verbatim}
+\institute{<name of the first institute>
+\and <name of the second institute> ...}
+\end{verbatim}
+(Unlike usual \LaTeX{} the \verb|\and| command is also used with the
+\verb|\institute| command.)
+%
+\subsection{Footnotes to the title block other than addresses}
+%
+If footnotes to the title, subtitle, author's names or institute
+addresses are needed, please code immediately after the word
+where the footnote indicator should be placed. These footnotes
+are marked by asterisks ($\star$). Please make the following
+input:
+\begin{verbatim}
+\thanks{<text>}
+\end{verbatim}
+%
+\subsection{Dates of receipt and acceptance}
+%
+Although the dates of receipt and acceptance of your
+manuscript will be fixed by the editors and inserted
+by the publisher, please make the following input:
+\verb|\date{Received date; accepted date}|
+
+The date is inserted later in the format {\tt month day,
+year}.
+\paragraph{Example:}\verb|\date{Received June 2, accepted September 22,
+1988}|
+\subsection{Typesetting the header}
+%
+After having entered the commands described so far in this section,
+please enter the command
+\begin{verbatim}
+\maketitle
+\end{verbatim}
+It will format the complete heading of your article. If you leave
+it out, the work done so far will produce {\em no\/} text.
+You will find a complete example of the beginning of an article
+later in this section.
+%
+\subsection{Abstract}
+%
+Proceed as follows:
+\begin{verbatim}
+\begin{abstract}
+<text of your abstract (summary)>
+\keywords{<keyword -- keyword -- keyword ...>}
+\end{abstract}
+\end{verbatim}
+
+Please make sure that there is no blank line between
+the \verb|\begin{abstract}| string
+and the text of your abstract.
+%
+\subsection{Key words}
+%
+For the sake of simplicity and uniformity, authors should choose
+not more than six key words which are identical to those already
+chosen as thesaurus codes in Sect.~\ref{thescode} above.
+The heading ``Key words'' appears automatically.
+The individual key words
+should be separated by an en-dash (see Sect.~\ref{finetune})
+with one blank before and after.
+%
+\subsection{A complete example for the beginning}
+%
+\begin{verbatim}
+\thesaurus{03(01.01.1; 07.13.1; 08.01.1)}
+\title{Magnetohydrodynamic shock waves}
+\subtitle{I. Investigation of the structure of hot spots in
+ extragalactic radio jets}
+\author{N.~Copernicus\inst{1} \and G.~Galilei\inst{1,2} \and
+ E.P.~Hubble\inst{2,3} \and I.~Newton\inst{4}\thanks{On leave from
+ the Max-Planck-Institut f\"ur Radioastronomie, Auf dem H\"ugel 69,
+ D-5300 Bonn 1, Federal Republic of Germany}
+ \and C.~Ptolemaeus\inst{5}}
+\offprints{E.P.~Hubble}
+\institute{Institute of Physics, Pedagogical University, Pl.~Slowianski
+ 6, PL-65-069 Zielona Gora, Poland
+\and
+ Instituto di Fisica Generale, Via Pietro Giuria 1, I-10125
+ Torino, Italiy
+\and
+ Havard-Smithsonian Center for Astrophysics, 60 Garden Street,
+ Cambridge, MA 02138, USA
+\and
+ Armagh Observatory, Armagh, BT 61 9 DG, Northern Ireland
+\and
+ Department of Astronomy, University of Athens, Panepistimiopolis,
+ GR-15771 Zografos, Greece}
+\date{Received date; accepted date}
+\maketitle
+\begin{abstract}
+The theory of special relativistic magnetohydrodynamic shock waves is
+...
+\keywords{acceleration mechanisms -- galaxies: jets of -- hydromagnetics}
+\end{abstract}
+\end{verbatim}
+%
+\section{How to code your text}
+%
+As for the main title and subtitle, headings should not be capitalized,
+except, of course, for the first letter and any other words which
+are always capitalized. Similary, headings -- except for italic run-in
+headings (produced by \verb|\paragraph{...}|) -- have no end
+punctuation.
+
+Main headings will be automatically numbered by the following makros.
+
+\paragraph{Sample input}
+\begin{verbatim}
+\section{This is a first-order title}
+\subsection{This is a second-order title}
+\subsubsection{This is a third-order title}
+\paragraph{This is an italic run-in heading.}
+\end{verbatim}
+
+\paragraph{Sample output}
+\section*{1. This is a first-order title}
+\subsection*{1.1. This is a second-order title}
+\subsubsection*{1.1.1. This is a third-order title}
+\paragraph{This is an italic run-in heading.} The text
+continues in regular roman typeface.
+%
+\section{Fine tuning of the text}
+\label{finetune}
+%
+The following should be used to improve the readability of the text:
+\begin{flushleft}
+\begin{tabular}{@{}l@{\hspace{.5cm}}p{.7\textwidth}}
+\verb|\,| & a thin space, e.g.\ between numbers with more than
+ 5 digits; a line division will not be made
+ following this space,\\
+\verb|--| & en-dash; two strokes, without a space at either end,\\
+\verb*| -- | & em-dash; two strokes, with a space at either end,\\
+\verb|-| & hyphen; one stroke, no space at either end,\\
+\verb|$-$| & minus, in the text {\em only},\\
+\verb|~| & tilde between parts of names.
+\end{tabular}
+\end{flushleft}
+
+\paragraph{Sample input}
+\begin{verbatim}
+20\,000 km, 1\,000\,000 s, NGC 468\,324
+1950--1985, p.~11--21
+this -- written on a computer -- is now printed
+signal-to-noise ration, early-type, metal-poor, non-relativistic
+$-30$ K, $-5^{\circ}$C
+Dr~h.c.~Rockefeller-Smith and Prof.~Dr~Mallory
+\end{verbatim}
+
+\paragraph{Sample output}
+\begin{flushleft}
+20\,000 km, 1\,000\,000 s, NGC 468\,324\\
+1950--1985, p.~11--21\\
+this -- written on a computer -- is now printed\\
+signal-to-noise ration, early-type, metal-poor, non-relativistic\\
+$-30$ K, $-5^{\circ}$C\\
+Dr~h.c.~Rockefeller-Smith and Prof.~Dr~Mallory
+\end{flushleft}
+%
+\section{Special typefaces}
+%
+Normal type (roman) need not be specified. {\em Emphasize\/}
+(not {\sl slanted\/}) should be used for emphasis in the text.
+\begin{flushleft}
+\begin{tabular}{@{}l@{\hspace{.5cm}}l}
+\verb|{\em Text}| & {\em Emphasized Text}.\\
+\verb|\vec{Symbol}| & Vectors may only appear in math mode.
+See note below.\\
+ & \verb|$\vec{A} \times \vec{B} \cdot \vec{C}|
+ yields $\vec{A}\times\vec{B}\cdot\vec{C}$.\\
+ & \verb|$\vec{A\/}^{\rm T} \otimes \vec{B} \otimes \vec{\hat D}$|\\
+ & yields $\vec{A\/}^{\rm T} \otimes \vec{B} \otimes \vec{\hat D}$.\\
+\verb|\tens{Symbol}| & Tensors may only appear in math mode. \\
+ & \verb|\tens{ABC}| yields $\tens{ABC}.$
+\end{tabular}
+\end{flushleft}
+\paragraph{Note:}
+Normally vectors are typeset as boldface italic symbols. But depending
+on your \LaTeX{} installation, especially the file \verb|LFONTS.TEX|,
+you might get the vectors printed as normal mathematical symbols, i.e.
+in italic typeface. You then will get the \LaTeX{} warning: \verb|No
+\boldmath typeface in this size, using \unboldmath.| This can be ignored
+because in the final version with the original MT fonts it will be
+correct.
+%
+\section{Footnotes}
+%
+Footnotes need to be punctuated at the end.
+Footnotes within the text should be coded
+\begin{verbatim}
+\footnote{<text>}
+\end{verbatim}
+
+\paragraph{Sample input}
+\begin{verbatim}
+Text with a footnote\footnote{The footnote is automatically
+numbered.} and text continues \dots
+\end{verbatim}
+
+\paragraph{Sample output}
+\begin{flushleft}
+Text with a footnote\footnote{The footnote is automatically
+numbered.} and text continues \dots
+\end{flushleft}
+%
+\section{Lists}
+%
+Please code lists as described below:
+
+\paragraph{Sample input}
+\begin{verbatim}
+\begin{enumerate}
+ \item First item,
+ \item second item,
+ \begin{enumerate}
+ \item first nested item,
+ \item second nested item,
+ \end{enumerate}
+ \item third item.
+\end{enumerate}
+\end{verbatim}
+
+\paragraph{Sample output}
+\begin{enumerate}
+\item First item,
+\item second item,
+\begin{enumerate}
+\item first nested item,
+\item second nested item,
+\end{enumerate}
+\item third item.
+\end{enumerate}
+%
+\newpage
+\section{Figures}
+%
+The final positioning of floating objects (i.e. figures and tables)
+should be done at the end of development of your text.
+
+For further information see also Sect.~3.6.2 on p.~63 of the
+{\em \LaTeX{} User's Guide \& Reference
+Manual\/} by Leslie Lamport (1986), Addison-Wesley Publishing
+Company, Reading, Mass.
+Figure legends should be inserted after or before
+(not in) the paragraph in which the figure is first mentioned.
+They will be numbered automatically.
+
+The figure, including the legend, must not exceed 23~cm in height.
+Taller figures will be swallowed by \LaTeX{} without warning.
+
+{\em No\/} figures ({\em line drawings, halftone figures\/},
+or {\em figures containing halftone areas\/})
+should be pasted in, these will be reproduced separately.
+They should be enclosed separately in camera-ready form (glossy prints
+or photographs).
+
+As can be seen in the output, we will automatically
+leave 1~cm free above the box for the figure and 0.5~cm below.
+Please note that ``\verb|x|'' in the following
+coding stands for the {\em actual\/} height
+of the figure.
+%
+\subsection{Figures of width up to 8.8~cm (one column)}
+%
+Please code as follows:
+\begin{flushleft}
+\verb|\begin{figure}|\\
+\verb|\picplace{x cm}|\\
+\verb|\caption[ ]{...text of caption...}| \quad
+ (Type [ ] to save auxiliary space)\\
+\verb|\end{figure}|
+\end{flushleft}
+
+\paragraph{Sample input}
+\begin{verbatim}
+\begin{figure}
+\picplace{2.5cm}
+\caption[ ]{This is the caption of width up to 8.8~cm (one column)}
+\end{figure}
+\end{verbatim}
+
+\begin{figure}[h]
+\fbox{\rule[-1.6cm]{7.8cm}{0cm}\phantom{Text}}
+\caption[ ]{This is the caption of width up to 8.8~cm (one column)}
+\end{figure}
+%
+\subsection{Figures of width up to 18~cm (extending over both columns)}
+%
+\begin{flushleft}
+\verb|\begin{figure*}|\\
+\verb|\picplace{x cm}|\\
+\verb|\caption[ ]{...text of caption...}| \quad
+ (Type [ ] to save auxiliary space)\\
+\verb|\end{figure*}|
+\end{flushleft}
+
+\paragraph{Sample input}
+\begin{verbatim}
+\begin{figure*}
+\picplace{1.5cm}
+\caption[ ]{This is the caption of the figure of width 18~cm
+ (extending over both columns)}
+\end{figure*}
+\end{verbatim}
+
+\newpage
+\typeout{The following overfull \string\hbox\space message can be
+ignored, the box is}
+\typeout{intentionally wider than the \string\textwidth\space of
+this documentation}
+\typeout{to demonstrate the output of double column figures in
+the journal.}
+\begin{figure*}[h]
+\fbox{\rule[-0.9cm]{17cm}{0cm}\phantom{Text}}
+\caption[ ]{This is the caption of the
+figure of width 18~cm (extending over both columns)}
+\end{figure*}
+%
+\section{Tables}
+%
+Tables should be treated
+in the same way as figure legends, except that
+the table captions appear {\em above\/} the tables. The tables
+will be numbered automa\-tically.
+
+Table columns should be set flush left. Vertical lines
+are normally not necessary and should only be inserted
+in exceptional cases for the sake of clarity.
+
+For further information you will find a complete description of
+the table and tabular environment
+on p.~63~ff. and p.~182 of the {\em \LaTeX{} User's Guide \&
+Reference Manual\/} by Leslie Lamport.
+
+Height of tables must not exceed 23 cm. Taller tables will be swallowed
+by \LaTeX{} without warning.
+%
+\subsection{Tables coded with \LaTeX{} of width up to 8.8~cm
+(one column)}
+%
+As an example for simple coding of a table we give you
+the following advice for the coding.
+(Before continuing your text after the
+table environment you need an empty line.)
+
+\paragraph{Sample input}
+\begin{verbatim}
+\begin{table}
+\caption[ ]{Critical $N$ values}
+\begin{flushleft}
+\begin{tabular}{llllll}
+\hline
+$\Msun$ & $beta_{0}$ & $T_{\rm c6}$ & $\gamma$ & $N_{\rm crit}^{\rm L}$
+ & $N_{\rm crit}^{\rm Te}$\\
+\hline
+ 30 & 0.82 & 38.4 & 35.7 & 154 & 320 \\
+ 60 & 0.67 & 42.1 & 34.7 & 138 & 340 \\
+120 & 0.52 & 45.1 & 34.0 & 124 & 370 \\
+\hline
+\end{tabular}
+\end{flushleft}
+\end{table}
+\end{verbatim}
+
+\begin{table}[h]
+\caption[ ]{Critical $N$ values}
+\begin{flushleft}
+\renewcommand{\arraystretch}{1.2}
+\begin{tabular}{llllll}
+\hline
+$\Msun$ & $\beta_{0}$ & $T_{\rm c6}$ & $\gamma$ & $N_{\rm crit}^{\rm L}$
+ & $N_{\rm crit}^{\rm Te}$\\
+\hline
+ 30 & 0.82 & 38.4 & 35.7 & 154 & 320 \\
+ 60 & 0.67 & 42.1 & 34.7 & 138 & 340 \\
+120 & 0.52 & 45.1 & 34.0 & 124 & 370 \\
+\hline
+\end{tabular}
+\renewcommand{\arraystretch}{1}
+\end{flushleft}
+\end{table}
+%
+\subsection{Tables coded with \LaTeX{} of width up to 18~cm (extending
+over both columns)}
+%
+\paragraph{Sample input}
+\begin{verbatim}
+\begin{table*}
+\caption[ ]{Observational results from NGC 4827}
+\begin{flushleft}
+\begin{tabular}{llllllllllllll}
+\hline
+ & & \multicolumn{3}{l}{RA (1950)} &\ & \multicolumn{3}{l}{Dec (1950)}
+ & $S$ & Pol & \% & $\log P$\\
+\cline{3-5}\cline{7-9}
+ & &(h) &(m) & (s) & & (\degr) & (\arcmin) & (\arcsec)
+ & (mJy) & (mJy) & & (W Hz$^{-1}$)\\
+\hline
+Core & (5 GHz) & 12 & 54 & 18.0 & & 27 & 26 & 56.2
+ & 8 & & & 21.64 \\
+Total&(327 MHz)& & & & & & &
+ & 210 & & & 23.13 \\
+ &(1.4 GHz)& & & & & & &
+ & 57 & 1.3 & 2 & 22.49 \\
+ & (5 GHz) & & & & & & &
+ & 26 & 0.73 & 3 & 22.15 \\
+\hline
+\end{tabular}
+\end{flushleft}
+\end{table*}
+\end{verbatim}
+
+\begin{table*}[h]
+\caption[ ]{Observational results from NGC 4827}
+\begin{flushleft}
+\renewcommand{\arraystretch}{1.2}
+\begin{tabular}{llllllllllllll}
+\hline
+ & & \multicolumn{3}{l}{RA (1950)} &\ & \multicolumn{3}{l}{Dec (1950)}
+ & $S$ & Pol & \% & $\log P$\\
+\cline{3-5}\cline{7-9}
+ & &(h) &(m) & (s) & & (\degr) & (\arcmin) & (\arcsec)
+ & (mJy) & (mJy) & & (W Hz$^{-1}$)\\
+\hline
+Core & (5 GHz) & 12 & 54 & 18.0 & & 27 & 26 & 56.2
+ & 8 & & & 21.64 \\
+Total&(327 MHz)& & & & & & &
+ & 210 & & & 23.13 \\
+ &(1.4 GHz)& & & & & & &
+ & 57 & 1.3 & 2 & 22.49 \\
+ & (5 GHz) & & & & & & &
+ & 26 & 0.73 & 3 & 22.15 \\
+\hline
+\end{tabular}
+\renewcommand{\arraystretch}{1}
+\end{flushleft}
+\end{table*}
+%
+\subsection{Tables not coded with \LaTeX{}}
+%
+If you do not wish to code your table using \LaTeX{}
+but prefer to have it reproduced separately,
+proceed similarily as for figures and use the following coding:
+
+\paragraph{Sample input}
+\begin{flushleft}
+\verb|\begin{table}| \quad
+ or \verb|\begin{table*}| for double-column table\\
+\verb|\caption[ ]{... text of caption ...}|\\
+\verb|\vspace{x cm}| \quad \verb|x| is the actual
+ height needed for your table\\
+\verb|\end{table}| \quad or \verb|\end{table*}| for double-column table
+\end{flushleft}
+%
+\section{Acknowledgements}
+%
+\paragraph{Sample input}
+\begin{flushleft}
+\verb|\acknowlegements{This research was partially supported by the
+Sonderforschungsbereich}|
+\end{flushleft}
+
+\acknowledgements This research was partially supported by the
+Sonderforschungsbereich
+%
+\section{Appendices}
+%
+Type \verb|\appendix| \\
+%
+Sets all sectioncounter etc to 0.
+Begin the actual appendix by typing\\
+\verb|\section{Appendix}|
+%
+\section{Signs and characters}
+%
+\subsection{Special signs}
+%
+You may need to use special signs.
+The available ones are listed in the
+{\em \LaTeX{} User's Guide \& Reference
+Manual\/} by Leslie Lamport, pp.~44~ff.
+We have created further symbols for math mode
+(see p.~\pageref{math}):
+\begin{flushleft}
+\renewcommand{\arraystretch}{1.25}
+\begin{tabular}{lll@{\hspace{2.5cm}}lll}
+\hline
+Input & Explanation & Output & Input & Explanation & Output\\
+\hline
+\verb|\la| & less or approx & $\la$ &
+ \verb|\ga| & greater or approx & $\ga$\\
+\verb|\getsto| & gets over to & $\getsto$ &
+ \verb|\cor| & corresponds to & $\cor$\\
+\verb|\lid| & less or equal & $\lid$ &
+ \verb|\gid| & greater or equal & $\gid$\\
+\verb|\sol| & similar over less & $\sol$ &
+ \verb|\sog| & similar over greater & $\sog$\\
+\verb|\lse| & less over simeq & $\lse$ &
+ \verb|\gse| & greater over simeq & $\gse$\\
+\verb|\grole| & greater over less & $\grole$ &
+ \verb|\leogr| & less over greater & $\leogr$\\
+\verb|\loa| & less over approx & $\loa$ &
+ \verb|\goa| & greater over approx & $\goa$\\
+\hline
+\end{tabular}
+\renewcommand{\arraystretch}{1}
+\end{flushleft}
+
+%
+%\newpage
+\subsection{Special characters in general}
+%
+\begin{flushleft}
+\renewcommand{\arraystretch}{1.25}
+\begin{tabular}{lll@{\hspace{2cm}}lll}
+\hline
+Input & Explanation & Output & Input & Explanation & Output\\
+\hline
+\verb|\sun| & sun symbol & $\sun$ &
+ \verb|\degr| & degree & $\degr$\\
+\verb|\diameter| & diameter & \diameter &
+ \verb|\sq| & square & \squareforqed\\
+\verb|\fd| & fraction of day & \fd &
+ \verb|\fh| & fraction of hour & \fh\\
+\verb|\fm| & fraction of minute & \fm &
+ \verb|\fs| & fraction of second & \fs\\
+\verb|\fdg| & fraction of degree & \fdg &
+ \verb|\fp| & fraction of period & \fp\\
+\verb|\farcs| & fraction of arcsecond & \farcs &
+ \verb|\farcm| & fraction of arcmin & \farcm\\
+\verb|\arcsec| & arcsecond & \arcsec &
+ \verb|\arcmin| & arcminute & \arcmin\\
+\hline
+\end{tabular}
+\renewcommand{\arraystretch}{1}
+\end{flushleft}
+%
+\subsection{Gothic (Fraktur)}
+%
+In \LaTeX{} only the following gothic letters are
+available: \verb|$\Re$| which yields $\Re$, and \verb|$\Im$|
+which yields $\Im$.
+For the real and the imaginary parts of a complex number within math mode
+you should use instead \verb|$\mbox{Re}$| (which yields
+$\mbox{Re}$) or \verb|$\mbox{Im}$| (which yields $\mbox{Im}$).
+%
+\subsection{Script}
+%
+For script capitals use the coding\\
+\verb|${\cal AB}$| which yields ${\cal AB}$
+(see p.~43 of the \LaTeX{} book).
+%
+\subsection{Special roman}
+%
+We have created
+the blackboard bold characters also named special roman
+characters listed below.
+\begin{flushleft}
+\renewcommand{\arraystretch}{1.25}
+\begin{tabular}{lll@{\hspace{2cm}}lll}
+\hline
+Input & Explanation & Output & Input & Explanation & Output\\
+\hline
+\verb|$\bbbc$| & complex numbers & $\bbbc$ &
+\verb|$\bbbf$| & blackboard bold F & $\bbbf$ \\
+\verb|$\bbbh$| & blackboard bold H & $\bbbh$ &
+\verb|$\bbbk$| & blackboard bold K & $\bbbk$ \\
+\verb|$\bbbm$| & blackboard bold M & $\bbbm$ &
+\verb|$\bbbn$| & natural numbers N & $\bbbn$ \\
+\verb|$\bbbp$| & blackboard bold P & $\bbbp$ &
+\verb|$\bbbq$| & rational numbers & $\bbbq$ \\
+\verb|$\bbbr$| & real numbers & $\bbbr$ &
+\verb|$\bbbs$| & blackboard bold S & $\bbbs$ \\
+\verb|$\bbbt$| & blackboard bold T & $\bbbt$ &
+\verb|$\bbbz$| & integer numbers & $\bbbz$ \\
+\verb|$\bbbone$| & symbol one & $\bbbone$ & & & \\
+\hline
+\end{tabular}
+\renewcommand{\arraystretch}{1}
+\end{flushleft}
+%
+\subsection{Small capitals}
+%
+Small capitals are used for roman numerals denoting ``degree of
+ionization'' e.g.\ H\,{\sc i}, H\,{\sc ii} region, C\,{\sc iv} produced
+by \verb|H\,{\sc i}|, \verb|H\,{\sc ii} region|, \verb|C\,{\sc iv}|.
+%
+\subsection{Invented symbols}
+%
+If you use your own home-grown symbols, we need a list of these for the
+further processing.
+%
+Our package automatically produces a list of all special symbols if they
+have names of the form \verb|\special| xx where xx is a roman numeral.
+%
+So either define your symbols giving them names \verb|\speciali
+\specialii| etc. or assign these names as ``aliases"\\
+\verb|\def\peter{...}|\\
+\verb|\let\speciali =\peter|\\
+%
+Be sure your makros work without math mode.
+%
+\section{References}
+\label{refer}
+%
+For overall information on the reference environment
+see the {\em \LaTeX{} User's Guide \& Reference
+Manual\/} by Leslie Lamport, p.~73.
+
+Please abbreviate journal names according to the lists 16.2 and 16.3
+only.
+%
+\subsection{Author--year system}
+%
+References are cited in the text by name and year in parentheses
+and should look as follows:
+(Smith 1970, 1980; Ekeland et al. 1985, Theorem 2; Jones \& Jaffe
+1986; Farrow 1988, Chap.~2). If the name is part of the sentence
+only the year may appear in parentheses,
+e.g.\ Ekeland et al. (1985, Sect.~2.1).
+The reference list should contain all citations occurring in the text,
+ordered alphabetically by surname (with initials following). If there
+are several works by the same author(s) the references should be listed
+in the appropriate order indicated below:
+\begin{alpherate}
+\item
+One author: list works chronologically;
+\item
+Author and same co-author(s): list works chronologically;
+\item
+Author and different co-authors: list works alphabetically
+according to co-authors.
+\end{alpherate}
+If there are several works by the same author(s) and in the same year,
+but which are cited separately, they should be distinguished by
+the use of ``a'', ``b'' etc., e.g. (Smith 1982a; Ekeland et al. 1982b).
+%
+\subsubsection{How to code author-year system}
+%
+Write the surname of the author for your citation in the
+text explicitly, leaving the year up to \LaTeX{} with the
+\verb|\cite{<label name>}| command.
+Then give only the appropriate year as the optional
+argument with the command \verb|\bibitem[<year>]{<label name>}|.
+
+\paragraph{Sample input}
+\begin{verbatim}
+The results in this section are a refined version of
+Clarke \& Ekeland (\cite{clar:eke}); the minimality result
+of Proposition~14 was the first of its kind.
+\end{verbatim}
+The above input produces (after running your programm twice)
+the citation:
+
+\paragraph{Sample output}
+\begin{flushleft}
+``\dots{} refined version of
+Clarke \& Ekeland (\cite{clar:eke}); the minimality \dots''.
+\end{flushleft}
+
+Then the \verb|\bibitem|
+entry of the \verb|thebibliography| environment should read:
+\begin{verbatim}
+\begin{thebibliography}{} % (do not forget {})
+\bibitem[1982]{clar:eke}
+Clarke, F., Ekeland, I. 1982, Nonlinear oscillations
+and boundary-value problems for Hamiltonian systems,
+Arch.~Rat.~Mech.~Anal., 78, 315
+\bibitem[1985]{milani:nobili}
+Milani, A., Nobili, A.M. 1985, A\&A, 144, 261
+\end{thebibliography}
+\end{verbatim}
+
+\paragraph{Sample output}
+\begin{thebibliography}{} % (do not forget {})
+\bibitem[1982]{clar:eke}
+Clarke, F., Ekeland, I. 1982, Nonlinear oscillations
+and boundary-value problems for Hamiltonian systems,
+Arch.~Rat.~Mech.~Anal., 78, 315
+\bibitem[1985]{milani:nobili}
+Milani, A., Nobili, A.M. 1985, A\&A, 144, 261
+\end{thebibliography}
+%
+\newpage
+\subsection{Abbreviations of frequently used journals}
+%
+\begin{flushleft}
+\begin{tabular}{@{}ll}
+ARA\&A & Annual Review of Astronomy and Astrophysics\\
+Afz & Astrofizica\\
+AJ & Astronomical Journal (the)\\
+AZh & Astronomiceskij Zhurnal\\
+A\&A & Astronomy and Astrophysics (Letters indicated by number)\\
+A\&AS & Astronomy and Astrophysics Supplement Series\\
+A\&AR & Astronomy and Astrophysics Review (the)\\
+ApJ & Astrophysical Journal (the) (Letters indicated by number)\\
+ApJS & Astrophysical Journal Supplement Series (the)\\
+Ap\&SS & Astrophysics and Space Science\\
+BAAS & Bulletin of the American Astronomical Society\\
+JA\&A & Journal of Astronomy and Astrophysics\\
+MNRAS & Monthly Notices of the Royal Astronomical Society\\
+Nat & Nature\\
+PASJ & Publications of the Astronomical Society of Japan\\
+PASP & Publications of the Astronomical Society of the Pacific\\
+PASPC & Ditto, Conference Proceedings\\
+QJRAS & Quarterly Journal of the Royal Astronomical Society\\
+Sci & Science\\
+SvA & Soviet Astronomy
+\end{tabular}
+\end{flushleft}
+%
+\subsection{Abbreviations of less frequently used journals
+(IAU acronyms)}
+%
+\begin{flushleft}
+\begin{tabular}{@{}p{.35\textwidth}p{.6\textwidth}}
+Acta Astron.~Sin.
+ & Acta Astronomica Sinica\\
+Acta Astron.
+ & Acta Astronomica\\
+Ark.~Astron.
+ & Arkiv for Astronomi\\
+Astron.~Nachr.
+ & Astronomische Nachrichten\\
+Aust.~J.~Phys.
+ & Australian Journal of Physics\\
+Aust.~J.~Phys.~ Astrophys.~Suppl.
+ & Australian Journal of Physics Astrophysics Supplement\\
+Chin.~Astron.
+ & Chinese Astronomy\\
+C.~R.~Acad.~Sci.~Paris
+ & Comptes Rendus de l'Acad\'{e}mie des Science\\
+IAU Circ.
+ & International Astronomical Union, Circular\\
+Icarus & Icarus\\
+Ir. Astron.~ J.
+ & Irish Astronomical Journal\\
+J.~R.~Astron.~Soc.~Can.
+ & Journal of the Royal Astronomical Society of Canada\\
+Mem.~R.~Astron.~Soc.
+ & Memoirs of the Royal Astronomical Society\\
+Mem.~Soc.~Astron.~Ital.
+ & Memorie della Societa Astronomica Italiana\\
+Mitt.~Astron.~Ges.
+ & Mitteilungen der Astronomischen Gesellschaft\\
+Mon.~Notes Astron.~Soc.~S.~Afr.
+ & Monthly Notes of the Astronomical Society of Southern Africa\\
+Observatory & Observatory (the)\\
+Phil.~Trans.~R.~Soc.~London,~Ser.~A
+ & Philosophical Transactions of the Royal Society of London,\\
+ & Series A\\
+Proc.~Astron.~Soc.~Aust.
+ & Proceedings of the Astronomical Society of Australia\\
+Rev.~Mex.~Astron.~Astrofis.
+ & Revista Mexicana de Astronomia y Astrofisica\\
+Ric.~Astron.~Specola~Vaticana
+ & Ricerche Astronomiche. Specola Vaticana\\
+Sci.~Am. & Scientific American\\
+Sky Telesc. & Sky and Telescope\\
+Space Sci.~Rev. & Space Science Reviews
+\end{tabular}
+\end{flushleft}
+%
+\subsection{The use of\/ {\rm\BibTeX{}}}
+%
+If you normally use \BibTeX{} to produce your references please
+customize its bibliography style according to the things mentioned
+above. We are working on an A\&A bibliography style for \BibTeX{} but
+it is not yet completely tested.
+So please be patient until the next release appears.
+%
+\section{How to install and use M\LaTeX{}}
+\label{mlatex}
+%
+Before submitting the final version of an article to the editorial
+office, authors must run \LaTeX{} with the \verb|MTLPLAIN| format file
+over their \LaTeX{} input;
+in this way the original Monotype Times fonts can be simulated,
+i.e. the length of lines, paragraphs, width of characters
+and word divisions are absolutely identical with the
+printed version. Only then is it not necessary for authors
+to read proof; at the same time, publication times are shortened.
+
+The final DVI-file directly drives the typesetting machine that can
+process the MT fonts only, CM fonts will not work.
+Therefore not the standard \LaTeX{} format file but the
+\verb|MTLPLAIN.FMT| must be used by \TeX{} for this last run.
+%
+\subsection{For PC users}
+%
+The diskettes with the MT fonts contain an installation program that
+will ask you for some configurations of your machine (e.g. path and name
+of the directory containing the \TeX{} program etc.). Then the data is
+copied to the appropriate directories of your hard disk.
+
+PC-\TeX{} and the MT fonts must be installed so that M\LaTeX{} can run
+(TEX.EXE is necessary).
+
+To create the \verb|MTLPLAIN.FMT| file, you have to call \TeX{} as
+\verb|INITEX| using the command \verb|TEX| \verb|MTLPLAIN /I|.
+When ``\verb|*|'' appears, ``\verb|\dump|'' should be
+entered. The file produced, \verb|MTLPLAIN.FMT|, must be stored in
+the directory where \TeX{} normally looks for its ``formats''.
+\verb|MTLPLAIN.FMT| is a special format file for use with
+PC-\TeX{} that does not work
+with the normal CM fonts (computer modern fonts)
+but with MT fonts (Monotype Times fonts) only.
+
+The installation of MT fonts may involve an additional time investment
+\label{mtinstr}
+for the user, as a variety of new directories are produced (if they are
+not already available):
+\begin{flushleft}
+\begin{tabular}{l@{\quad}l@{\quad}llll}
+$\backslash$pctex\\
+ & $\backslash$texinput\\
+ & $\backslash$textfms\\
+ & $\backslash$texfmts\\
+ & $\backslash$pixel\\
+ & & $\backslash$pk150 & $\backslash$pk180 &
+ $\backslash$pk210 & $\backslash$pk240 \cr
+ & & $\backslash$pk270 & $\backslash$pk300 &
+ $\backslash$pk330 & $\backslash$pk350 \cr
+ & & $\backslash$pk360 & $\backslash$pk420 &
+ $\backslash$pk425 & $\backslash$pk500 \cr
+ & & $\backslash$pk510 & $\backslash$pk600 &
+ $\backslash$pk625 & $\backslash$pk750
+\end{tabular}
+\end{flushleft}
+The names of these directories correspond to the standard \TeX{} names.
+It is possible that the hierarchy of the directories
+is different in other systems; to check this, please look at the
+directory names of your CM pixel files. If the directory names differ,
+give the correct names when asked by the installation program.
+
+In general, the printer- or screen-driver must be instructed how to find
+the MT pixel files.
+Most of the drivers have a configuration file that contains
+the names of the fonts available to the printer. There the MT fonts
+have to be added. Please refer to your driver manual.
+The names normally given to the pixel files
+by the installation program are \verb|\pctex\pixel\pk|\dots.
+If you run into trouble at this point, please call for assistance (see
+p.~\pageref{assist}).
+
+When the MT fonts have been installed and the file \verb|MTLPLAIN.FMT|
+is available, the user can start M\LaTeX{} by entering the command
+\verb|TEX &MTLPLAIN <filename>|.
+%
+\subsection{For mini, micro or mainframe users}
+%
+For technical and organizational reasons, no guidelines can be
+supplied for the installation of MT fonts in large computers
+(e.g. VAX, IBM). Users are kindly requested to
+have the MT fonts installed by a \TeX{}nician or a
+technician with appropriate knowledge of \TeX{}. When the installation
+has been completed, M\LaTeX{} must be initialized by giving the command
+``\verb|INITEX MTLPLAIN|''; when ``\verb|*|'' appears,
+``\verb|\dump|'' should be entered.
+The file produced, \verb|MTLPLAIN.FMT|, must be stored in the
+directory ``FORMATS''. The local \TeX{}nician
+can then tell users how to start up M\LaTeX{}.
+%
+\section{Output example of an article}
+%
+On the diskette you will find the file {\em laa.dem} in the directory
+{\tt LATEX} containing the \LaTeX{} source of a typical article. Please
+refer to it in the case of any problems. To gain an overall impression
+of the style and layout of A\&A articles, please also refer to the
+journal itself.
+%
+
+\end{document}
+ \ No newline at end of file
diff --git a/obsolete/macros/latex209/contrib/springer/laa/laa.sty b/obsolete/macros/latex209/contrib/springer/laa/laa.sty
new file mode 100644
index 0000000000..58829f5bb0
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/laa/laa.sty
@@ -0,0 +1,855 @@
+% laa.sty version 1.1 as of 25-Feb-91
+%
+% This is LAA.STY, the LaTeX style file
+% from Springer-Verlag for the
+% Astronomy and Astrophysics Main Journal
+%
+% It is for use with LaTeX version 2.09
+%
+% Please report all errors via e-mail to SPRINGER@DHDSPRI6.bitnet
+% or to the address mentioned on page 2 of the documentation
+%
+\typeout{Document Style `laa'. <25 Feb 1991>}
+
+\frenchspacing
+\def~{\penalty\@M\kern3pt}
+
+\def\@ptsize{0} \@namedef{ds@11pt}{\def\@ptsize{1}}
+\@namedef{ds@12pt}{\def\@ptsize{2}}
+\def\ds@twoside{\@twosidetrue \@mparswitchtrue}
+\def\ds@draft{\overfullrule 5pt}
+\newif\if@referee \@refereefalse
+\def\ds@referee{\@refereetrue}
+\@options
+
+\widowpenalty=9000
+\clubpenalty=9000
+
+\lineskip 1pt \normallineskip 1pt
+\def\baselinestretch{1}
+
+\parskip 0pt plus 1pt
+\topsep 10pt plus2pt minus5pt
+\partopsep 0pt
+\itemsep 0pt plus 1pt
+\parindent 1.5em
+\leftmargin \parindent
+\leftmargini \leftmargin
+\leftmarginii \leftmargin
+\leftmarginiii \leftmargin
+\leftmarginiv \leftmargin
+\leftmarginv \leftmargin
+\leftmarginvi \leftmargin
+\labelwidth\leftmargini
+\labelsep 4pt
+\advance\labelwidth-\labelsep
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep \z@}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep \z@}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
+\if@referee
+\def\@normalsize{\@setsize\normalsize{18dd}\xpt\@xpt
+\abovedisplayskip 18pt plus2pt minus5pt
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt
+\belowdisplayshortskip 8pt plus3pt minus3pt
+\def\@listi{\topsep 6pt plus 2pt minus 2pt
+\leftmargin \leftmargini
+\parsep 3pt plus 1pt minus 1pt
+\itemsep \parsep}}
+\def\small{\@setsize\small{16dd}\ixpt\@ixpt
+\abovedisplayskip 15pt plus 3pt minus 4pt
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2pt
+\belowdisplayshortskip 6pt plus2pt minus 2pt
+\def\@listi{\topsep 6pt plus 2pt minus 2pt
+\leftmargin \leftmargini
+\parsep 3pt plus 1pt minus 1pt
+\itemsep \parsep}}
+\def\footnotesize{\@setsize\footnotesize{18dd}\xpt\@xpt
+\abovedisplayskip 18pt plus 2pt minus 5pt
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt
+\belowdisplayshortskip 8pt plus 1pt minus 2pt
+\def\@listi{\topsep 6pt plus 2pt minus 2pt
+\leftmargin \leftmargini
+\parsep 3pt plus 1pt minus 1pt
+\itemsep \parsep}}
+\def\scriptsize{\@setsize\scriptsize{14pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{24dd}\xivpt\@xivpt}
+\def\Large{\@setsize\Large{24dd}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{30dd}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\else
+\def\@normalsize{\@setsize\normalsize{10dd}\ixpt\@ixpt
+\abovedisplayskip 10pt plus2pt minus5pt
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt
+\belowdisplayshortskip 6pt plus3pt minus3pt
+\def\@listi{\topsep 4pt plus 2pt minus 2pt
+\leftmargin \leftmargini
+\parsep 0pt
+\itemsep \parsep}}
+\def\small{\@setsize\small{9dd}\viiipt\@viiipt
+\abovedisplayskip 8.5pt plus 3pt minus 4pt
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 2pt
+\belowdisplayshortskip 4pt plus2pt minus 2pt
+\def\@listi{\topsep 3pt plus 2pt minus 2pt
+\leftmargin \leftmargini
+\parsep 0pt
+\itemsep \parsep}}
+\def\footnotesize{\@setsize\footnotesize{10dd}\ixpt\@ixpt
+\abovedisplayskip 6pt plus 2pt minus 4pt
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt
+\belowdisplayshortskip 3pt plus 1pt minus 2pt
+\def\@listi{\topsep 4pt plus 2pt minus 2pt
+\leftmargin \leftmargini
+\parsep 0pt
+\itemsep \parsep}}
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{13dd}\xivpt\@xivpt}
+\def\Large{\@setsize\Large{13dd}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{17dd}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\fi
+\@normalsize
+
+% Margins, textwidth and textheight are set to A&A formatting
+% conventions:
+
+\if@twoside \oddsidemargin 1.5cm \evensidemargin 1.5cm \marginparwidth
+107pt \else \oddsidemargin 63pt \evensidemargin 63pt \marginparwidth
+90pt \fi
+\marginparsep 11pt
+% The next offsets are set to get well centered output from our
+% laserprinter. Users may set the required offsets for local equipment
+% by adjusting equivalent values in their DVI to printer program.
+ \voffset -3.3true cm
+ \hoffset -3.2true cm
+\topmargin 27pt \headheight 12pt \headsep 25pt \footheight 12pt
+\footskip 30pt
+\textheight 23.5cm \textwidth 40cc \columnsep 1cc \columnseprule 0pt
+
+\footnotesep 8pt
+\skip\footins 9pt plus 4pt minus 2pt
+\floatsep 12pt plus 2pt minus 2pt \textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 12pt plus 2pt minus 2pt \@maxsep 20pt \dblfloatsep 12pt plus
+2pt minus 2pt \dbltextfloatsep 20pt plus 2pt minus 4pt \@dblmaxsep 20pt
+\@fptop 0pt plus 1fil \@fpsep 8pt plus 2fil \@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil \@dblfpsep 8pt plus 2fil \@dblfpbot 0pt plus
+1fil \marginparpush 5pt
+
+\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301 \@beginparpenalty
+-\@lowpenalty \@endparpenalty -\@lowpenalty \@itempenalty -\@lowpenalty
+
+\def\vec#1{\ifmmode\mathchoice{\mbox{\boldmath$\displaystyle#1$}}
+{\mbox{\boldmath$\textstyle#1$}}
+{\mbox{\boldmath$\scriptstyle#1$}}
+{\mbox{\boldmath$\scriptscriptstyle#1$}}\else
+\hbox{\boldmath$\textstyle#1$}\fi}
+
+\def\tens#1{\ifmmode\mathchoice{\mbox{$\sf\displaystyle#1$}}
+{\mbox{$\sf\textstyle#1$}}
+{\mbox{$\sf\scriptstyle#1$}}
+{\mbox{$\sf\scriptscriptstyle#1$}}\else
+\hbox{$\sf\textstyle#1$}\fi}
+
+\def\part{\par \addvspace{4ex} \@afterindentfalse \secdef\@part\@spart}
+\def\@part[#1]#2{\ifnum \c@secnumdepth >\m@ne \refstepcounter{part}
+\addcontentsline{toc}{part}{\thepart \hspace{1em}#1}\else
+\addcontentsline{toc}{part}{#1}\fi { \parindent 0pt \raggedright \ifnum
+\c@secnumdepth >\m@ne \Large \bf Part \thepart \par \nobreak \fi \huge
+\bf #2\markboth{}{}\par } \nobreak \vskip 3ex \@afterheading }
+\def\@spart#1{{\parindent 0pt \raggedright \huge \bf #1\par} \nobreak
+\vskip 3ex \@afterheading }
+
+% Section definitions have been adapted to produce (sub)section headings
+% in A&A typefaces.
+\def\section{\@startsection {section}{1}{\z@}{-3.5ex plus -1ex minus
+ -.2ex}{1.5ex plus .2ex}{\normalsize\bf\boldmath}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-3.25ex plus -1ex
+minus -.2ex}{1.5ex plus .2ex}{\normalsize\it}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-3.25ex plus
+-1ex minus -.2ex}{1.5ex plus .2ex}{\normalsize}}
+\def\paragraph{\@startsection {paragraph}{4}{\z@}{3.25ex plus 1ex minus
+.2ex}{-.6em}{\normalsize\it}}
+\def\subparagraph#1{\typeout{AandA Warning: You should not use
+\protect\subparagraph \space in this style.}\vskip0.5cm
+You should not use $\backslash${\tt subparagraph} in this
+style.\vskip0.5cm}
+
+\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
+ \def\@svsec{}\else
+ \refstepcounter{#1}\edef\@svsec{\csname the#1\endcsname.\ }\fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #6\relax
+ \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\par}
+ \endgroup
+ \csname #1mark\endcsname{#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname.}\fi
+ #7}\else
+ \def\@svsechd{#6\hskip #3\@svsec #8\csname #1mark\endcsname
+ {#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname.}\fi
+ #7}}\fi
+ \@xsect{#5}}
+
+\def\@xsect#1{\@tempskipa #1\relax
+ \ifdim \@tempskipa>\z@
+ \par \nobreak
+ \addvspace{\@tempskipa}
+ \@afterheading
+ \else \global\@nobreakfalse \global\@noskipsectrue
+ \everypar{\if@noskipsec \global\@noskipsecfalse
+ \clubpenalty\@M \hskip -\parindent
+ \begingroup \@svsechd \endgroup \unskip
+ \hskip -#1
+ \else \clubpenalty \@clubpenalty
+ \everypar{}\fi}\fi\ignorespaces}
+
+\setcounter{secnumdepth}{3}
+
+\def\appendix{\par
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \def\thesection{\Alph{section}}
+ \renewcommand{\theequation}{\thesection\arabic{equation}}
+ \setcounter{equation}{0}
+ \@addtoreset{equation}{section}}
+
+% End of art10.sty
+
+\def\labelenumi{\arabic{enumi}.}
+\def\theenumi{\arabic{enumi}}
+\def\labelenumii{(\alph{enumii})}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+\def\labelenumiii{\roman{enumiii}.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+\def\labelenumiv{\Alph{enumiv}.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+\def\labelitemi{\bf --}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\bullet$}
+\def\labelitemiv{$\cdot$}
+
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+\def\quotation{\list{}{\listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin \parsep 0pt plus 1pt}\item[]}
+\let\endquotation=\endlist
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+\let\enddescription\endlist
+
+
+\def\theequation{\arabic{equation}}
+
+
+\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{empty}\c@page\z@}
+\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi}
+
+\arraycolsep 2.5pt \tabcolsep 6pt
+\arrayrulewidth .4pt \doublerulesep 2pt
+\tabbingsep \labelsep
+
+\skip\@mpfootins = \skip\footins
+\fboxsep = 3pt \fboxrule = .4pt
+
+\newcounter{part}
+\newcounter {section}
+\newcounter {subsection}[section]
+\newcounter {subsubsection}[subsection]
+\newcounter {paragraph}[subsubsection]
+\newcounter {subparagraph}[paragraph]
+
+% Following commands have been adapted to produce (sub)section headings
+% according to A&A layout (a period after each number).
+
+\def\thepart{\Roman{part}} \def\thesection {\arabic{section}}
+\def\thesubsection {\thesection.\arabic{subsection}}
+\def\thesubsubsection {\thesubsection.\arabic{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+\def\thesubparagraph {\theparagraph.\arabic{subparagraph}}
+
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{3}
+
+\def\tableofcontents{\section*{Contents\markboth{CONTENTS}{CONTENTS}}
+ \@starttoc{toc}}
+\def\l@part#1#2{\addpenalty{\@secpenalty}
+ \addvspace{2.25em plus 1pt} \begingroup
+ \@tempdima 3em \parindent \z@ \rightskip \@pnumwidth \parfillskip
+-\@pnumwidth
+ {\large \bf \leavevmode #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
+ \nobreak \endgroup}
+\def\l@section#1#2{\addpenalty{\@secpenalty} \addvspace{1.0em plus 1pt}
+\@tempdima 1.5em \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \bf \leavevmode #1\hfil \hbox to\@pnumwidth{\hss #2}\par
+ \endgroup}
+\def\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}}
+\def\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}}
+\def\l@paragraph{\@dottedtocline{4}{7.0em}{4.1em}}
+\def\l@subparagraph{\@dottedtocline{5}{10em}{5em}}
+\def\listoffigures{\section*{List of Figures\markboth
+ {LIST OF FIGURES}{LIST OF FIGURES}}\@starttoc{lof}}
+\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
+\def\listoftables{\section*{List of Tables\markboth
+ {LIST OF TABLES}{LIST OF TABLES}}\@starttoc{lot}}
+\let\l@table\l@figure
+
+
+% \list parameters have been adjusted in the `thebibliography'
+% environment to the match A&A layout of References.
+\def\thebibliography#1{\section*{References\markboth
+ {REFERENCES}{REFERENCES}}\list
+% The \arabic{enumi} command has been removed because we don't use
+% numbered citations in astronomical journals.
+ {}{\setlength\labelwidth{1.4em}\leftmargin\labelwidth
+ \setlength\parsep{0pt}\setlength\itemsep{0pt}
+ \setlength{\itemindent}{-\leftmargin}
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus -.07em}
+ \sloppy
+ \sfcode`\.=1000\relax}
+\let\endthebibliography=\endlist
+
+\newif\if@restonecol
+\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\section*{Index}]
+ \markboth{INDEX}{INDEX}\thispagestyle{plain}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+\def\@idxitem{\par\hangindent 40pt}
+\def\subitem{\par\hangindent 40pt \hspace*{20pt}}
+\def\subsubitem{\par\hangindent 40pt \hspace*{30pt}}
+\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
+\def\indexspace{\par \vskip 10pt plus 5pt minus 3pt\relax}
+
+\def\footnoterule{\kern-3\p@
+ \hrule width 2cm
+ \kern 2.6\p@}
+
+\long\def\@makefntext#1{\parindent 1em\noindent
+ \hbox to 1.8em{\hss$^{\@thefnmark}$}#1}
+
+\setcounter{topnumber}{2}
+\def\topfraction{.9}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.3}
+\setcounter{totalnumber}{3}
+\def\textfraction{.15}
+\def\floatpagefraction{.85}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.85}
+\def\dblfloatpagefraction{.85}
+
+% Captions of figures and tables are printed in a different point size
+% in A&A. There is only one \caption command in LaTeX, so we have to let
+% the \caption command know whether it is used within the `figure'
+% environment or within the `table' environment to decide what point
+% size should be used.
+
+\def\aafigurecaption{figure}
+
+\long\def\@makecaption#1#2{
+ \vskip 10pt
+% Use \small lettering when in `figure' environment:
+\makeatletter
+\ifx\@captype\aafigurecaption\small\fi
+\makeatother
+% Make sure that `Table <N>.' or `Fig. <N>.' is typeset in boldface:
+ \setbox\@tempboxa\hbox{{\bf #1} #2}
+ \ifdim \wd\@tempboxa >\hsize \unhbox\@tempboxa\par \else \hbox
+to\hsize{\box\@tempboxa\hfil}
+ \fi
+\makeatletter
+\ifx\@captype\aafigurecaption\else\vskip6pt\fi
+\makeatother}
+
+\def\picplace#1{\vbox{\hrule\@height 0.4pt\@width\hsize
+\hbox to\hsize{\vrule\@width 0.4pt\@height#1\hfil
+\vrule\@width 0.4pt\@height#1}\hrule\@height 0.4pt\@width\hsize}}
+
+\newcounter{figure}
+\def\thefigure{\@arabic\c@figure}
+\def\fps@figure{htbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{Fig.\ \thefigure.}
+\def\figure{\@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+
+\newcounter{table}
+\def\thetable{\@arabic\c@table}
+\def\fps@table{htbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{Table \thetable.}
+\def\table{\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+
+% LaTeX does not provide a command to enter the authors institute
+% addresses. The \institute command is defined here.
+
+\newcounter{@inst}
+\newcounter{@auth}
+\newdimen\instindent
+
+\def\institute#1{\gdef\@institute{#1}}
+
+\def\institutename{\par
+ \begingroup
+ \parindent=0pt
+ \parskip=0pt
+ \setcounter{@inst}{1}%
+ \def\and{\par\stepcounter{@inst}%
+ \noindent
+ \hbox to\instindent{\hss$^{\the@inst}$\enspace}\ignorespaces}%
+ \setbox0=\vbox{\def\thanks##1{}\@institute}
+ \ifnum\c@@inst>9\relax\setbox0=\hbox{$^{88}$\enspace}%
+ \else\setbox0=\hbox{$^{8}$\enspace}\fi
+ \instindent=\wd0\relax
+ \ifnum\c@@inst=1\relax\else
+ \setcounter{@inst}{1}%
+ \hangindent\instindent\hangafter=0\noindent
+ \llap{$^{\the@inst}$\enspace}\fi\ignorespaces
+ \@institute\par
+ \endgroup}
+
+\def\offprints#1{\begingroup
+\def\protect{\noexpand\protect\noexpand}\xdef\@thanks{\@thanks
+\protect\footnotetext[0]{\unskip{\it Send offprint requests
+to\/}: \ignorespaces#1}}\endgroup\ignorespaces}
+
+\def\@thanks{}
+
+\long\def\@makefntext#1{\parindent 1em\noindent
+$^{\@thefnmark}$#1}
+
+\def\@fnsymbol#1{\ifcase#1\or\star\or{\star\star}\or{\star\star\star}%
+ \or \dagger\or \ddagger\or
+ \mathchar "278\or \mathchar "27B\or \|\or **\or \dagger\dagger
+ \or \ddagger\ddagger \else\@ctrerr\fi\relax}
+
+\def\inst#1{\unskip$^{#1}$}
+
+\def\subtitle#1{\gdef\@subtitle{#1}}
+\def\@subtitle{}
+
+\def\thesaurus#1{\gdef\@thesaurus{#1}}
+\def\@thesaurus{missing; you have not inserted them}%
+
+\def\maketitle{\par
+ \begingroup
+ \def\thefootnote{\fnsymbol{footnote}}
+ \if@twocolumn
+ \twocolumn[\@maketitle]
+ \else
+ \newpage \@maketitle
+ \fi
+ \global\@topnum\z@
+ \thispagestyle{empty}\@thanks
+ \endgroup
+ \setcounter{footnote}{0}
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\gdef\@subtitle{}%
+ \let\thanks\relax}
+
+\def\AALogo{\setbox254=\hbox{ ASTROPHYSICS }%
+\vbox{\baselineskip=10dd\hrule\hbox{\vrule\vbox{\kern3pt
+\hbox to\wd254{\hfil ASTRONOMY\hfil}
+\hbox to\wd254{\hfil AND\hfil}\copy254
+\hbox to\wd254{\hfil\number\day.\number\month.\number\year\hfil}
+\kern3pt}\vrule}\hrule}}
+\def\makeheadbox{{\hsize=30cc
+\hbox to0pt{\vbox{\baselineskip=10dd\hrule\hbox
+to\hsize{\vrule\kern3pt\vbox{\kern3pt
+\hbox{\bf A\&A manuscript no.}
+\hbox{(will be inserted by hand later)}
+\kern3pt\hrule\kern3pt\bf
+\hbox{Your thesaurus codes are:}
+\hbox{\rightskip=0pt plus3em\advance\hsize by-7pt
+\vbox{\noindent\ignorespaces\@thesaurus}}
+\kern3pt}\hfil\kern3pt\vrule}\hrule}
+\rlap{\quad\AALogo}\hss}}}
+
+\def\@maketitle{\newpage
+ \rm\vbox to0pt{}\vskip-8mm
+ \makeheadbox
+ \vskip13.5mm
+ {\LARGE \bf\boldmath
+ \pretolerance=10000
+ \rightskip=0pt plus 4cm
+ \noindent\ignorespaces
+ \@title \par}\vskip .3cm
+\if!\@subtitle!\else {\Large \bf\boldmath
+ \vskip .05cm
+ \pretolerance=10000
+ \rightskip=0pt plus 3cm
+ \noindent\@subtitle \par}\vskip .4cm\fi
+ {\bf \lineskip .5em
+\setbox0=\vbox{\setcounter{@auth}{1}\def\and{\stepcounter{@auth}}%
+\def\thanks##1{}\@author\global\c@@inst=\c@@auth}%
+\def\lastand{\ifnum\c@@inst=2\relax\unskip{} and \else
+\unskip, and \fi}%
+\setcounter{@auth}{1}%
+\def\and{\stepcounter{@auth}\ifnum\c@@auth=\c@@inst\lastand\else
+\unskip, \fi}%
+ \noindent\@author\vskip.125cm}
+ \institutename
+ \vskip .35cm {\normalsize\noindent\@date}
+ \par
+ \vskip .7cm}
+
+% The `abstract' environment has been renamed to `abstr' so a new
+% environment `abstract' can be defined in terms of the old one. Using
+% the standard LaTeX `abstract' environment now yields the A&A Summary.
+\def\abstr{{\noindent \bf Abstract. }\ignorespaces}
+\def\endabstr{\relax}
+
+\mark{{}{}}
+
+\if@twoside
+\def\ps@headings{\def\@oddfoot{}\def\@evenfoot{}\def\@evenhead{\rm
+\thepage\hfil \sl \leftmark}\def\@oddhead{\hbox{}\sl \rightmark \hfil
+\rm\thepage}\def\sectionmark##1{\markboth {\uppercase{\ifnum
+\c@secnumdepth >\z@ \thesection\hskip 1em\relax \fi
+##1}}{}}\def\subsectionmark##1{\markright {\ifnum \c@secnumdepth >\@ne
+\thesubsection\hskip 1em\relax \fi ##1}}}
+\else
+\def\ps@headings{\def\@oddfoot{}\def\@evenfoot{}\def\@oddhead{\hbox
+{}\sl \rightmark \hfil \rm\thepage}\def\sectionmark##1{\markright
+{\uppercase{\ifnum \c@secnumdepth >\z@ \thesection\hskip 1em\relax \fi
+##1}}}}
+\fi
+\def\ps@myheadings{\def\@oddhead{\hbox{}\hfil\rm\thepage\hfil
+}\def\@oddfoot{}\def\@evenhead{\hfil\rm\thepage\hfil\hbox
+{}}\def\@evenfoot{}\def\sectionmark##1{}\def\subsectionmark##1{}}
+
+
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+
+\ps@myheadings \pagenumbering{arabic} \onecolumn
+\if@twoside\else\raggedbottom\fi
+
+% Here the LaTeX `twocolumn.sty' is included.
+
+% twocolumn.sty 27 Jan 85
+\if@referee
+ \textwidth 30cc
+ \onecolumn
+\else
+ \twocolumn
+\fi
+\sloppy
+\flushbottom
+\marginparwidth 48pt
+% End of twocolumn.sty
+
+\def\@array[#1]#2{\setbox\@arstrutbox=\hbox{\vrule
+ height\arraystretch \ht\strutbox
+ depth\arraystretch \dp\strutbox
+ width\z@}\@mkpream{@{}#2}\edef\@preamble{\halign \noexpand\@halignto
+\bgroup \tabskip\z@ \@arstrut \@preamble \tabskip\z@ \cr}%
+\let\@startpbox\@@startpbox \let\@endpbox\@@endpbox
+ \if #1t\vtop \else \if#1b\vbox \else \vcenter \fi\fi
+ \bgroup \let\par\relax
+ \let\@sharp##\let\protect\relax \lineskip\z@\baselineskip\z@\@preamble}
+
+% Here the LaTeX `fleqn.sty' is included.
+% fleqn.sty 6 Feb 85
+\def\[{\relax\ifmmode\@badmath\else\begingroup\trivlist
+\item[]\leavevmode \hbox to\linewidth\bgroup$ \displaystyle
+\hskip\mathindent\bgroup\fi}
+\def\]{\relax\ifmmode \egroup $\hfil \egroup \endtrivlist \endgroup\else
+\@badmath \fi}
+\def\equation{\refstepcounter{equation}\trivlist \item[]\leavevmode
+\hbox to\linewidth\bgroup $ \displaystyle \hskip\mathindent}
+\def\endequation{$\hfil \displaywidth\linewidth\@eqnnum\egroup
+\endtrivlist}
+\def\eqnarray{\stepcounter{equation}\let\@currentlabel=\theequation
+\global\@eqnswtrue \global\@eqcnt\z@\tabskip\mathindent\let\\=\@eqncr
+\abovedisplayskip\topsep\ifvmode\advance\abovedisplayskip\partopsep\fi
+\belowdisplayskip\abovedisplayskip
+\belowdisplayshortskip\abovedisplayskip
+\abovedisplayshortskip\abovedisplayskip $$\halign to
+\linewidth\bgroup\@eqnsel\hskip\@centering$\displaystyle\tabskip\z@
+{##}$&\global\@eqcnt\@ne \hskip 2\arraycolsep \hfil${##}$\hfil
+&\global\@eqcnt\tw@ \hskip 2\arraycolsep $\displaystyle{##}$\hfil
+\tabskip\@centering&\llap{##}\tabskip\z@\cr}
+\def\endeqnarray{\@@eqncr\egroup
+\global\advance\c@equation\m@ne$$\global\@ignoretrue}
+\newdimen\mathindent
+% A&A does not indent equations:
+\mathindent = 0pt
+
+% End of `fleqn.sty
+
+% Redefine `abstract' environment to close with a \rule
+
+\newenvironment{abstract}{\begin{abstr}\ignorespaces}{\vskip0.5cm\hrule
+\vskip3ptplus10dd\null\end{abstr}}
+
+% Define \keywords
+
+\def\keywords{\par\vspace{12pt}\noindent{\bf Key words: }}
+
+% Define \acknowledgements
+
+\def\acknowledgements{\vspace{12pt}\noindent{\em Acknowledgements.\/ }%
+\ignorespaces}
+
+% Redefine \@cite so no square brackets are output.
+% Redefine \@biblabel so the label is not output in the bibliography.
+
+\def\@cite#1#2{{#1\if@tempswa , #2\fi}}
+\def\@biblabel#1{}
+
+\def\squareforqed{\hbox{\rlap{$\sqcap$}$\sqcup$}}
+\def\sq{\ifmmode\squareforqed\else{\unskip\nobreak\hfil
+\penalty50\hskip1em\null\nobreak\hfil\squareforqed
+\parfillskip=0pt\finalhyphendemerits=0\endgraf}\fi}
+
+\def\sun{\hbox{$\odot$}}
+\def\la{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr<\cr\sim\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr
+<\cr\sim\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr
+<\cr\sim\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+<\cr\sim\cr}}}}}
+\def\ga{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr>\cr\sim\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr
+>\cr\sim\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr
+>\cr\sim\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+>\cr\sim\cr}}}}}
+\def\degr{\hbox{$^\circ$}}
+\def\arcmin{\hbox{$^\prime$}}
+\def\arcsec{\hbox{$^{\prime\prime}$}}
+\def\utw{\smash{\rlap{\lower5pt\hbox{$\sim$}}}}
+\def\udtw{\smash{\rlap{\lower6pt\hbox{$\approx$}}}}
+\def\fd{\hbox{$.\!\!^{\rm d}$}}
+\def\fh{\hbox{$.\!\!^{\rm h}$}}
+\def\fm{\hbox{$.\!\!^{\rm m}$}}
+\def\fs{\hbox{$.\!\!^{\rm s}$}}
+\def\fdg{\hbox{$.\!\!^\circ$}}
+\def\farcm{\hbox{$.\mkern-4mu^\prime$}}
+\def\farcs{\hbox{$.\!\!^{\prime\prime}$}}
+\def\fp{\hbox{$.\!\!^{\scriptscriptstyle\rm p}$}}
+\def\cor{\mathrel{\mathchoice {\hbox{$\widehat=$}}{\hbox{$\widehat=$}}
+{\hbox{$\scriptstyle\hat=$}}
+{\hbox{$\scriptscriptstyle\hat=$}}}}
+\def\sol{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr\sim\cr<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr\sim\cr
+<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr\sim\cr
+<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+\sim\cr<\cr}}}}}
+\def\sog{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr\sim\cr>\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr\sim\cr
+>\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr
+\sim\cr>\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+\sim\cr>\cr}}}}}
+\def\lse{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr<\cr\simeq\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr
+<\cr\simeq\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr
+<\cr\simeq\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+<\cr\simeq\cr}}}}}
+\def\gse{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr>\cr\simeq\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr
+>\cr\simeq\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr
+>\cr\simeq\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+>\cr\simeq\cr}}}}}
+\def\grole{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr>\cr\noalign{\vskip-1.5pt}<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr
+>\cr\noalign{\vskip-1.5pt}<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr
+>\cr\noalign{\vskip-1pt}<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+>\cr\noalign{\vskip-0.5pt}<\cr}}}}}
+\def\leogr{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr<\cr\noalign{\vskip-1.5pt}>\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr
+<\cr\noalign{\vskip-1.5pt}>\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr
+<\cr\noalign{\vskip-1pt}>\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+<\cr\noalign{\vskip-0.5pt}>\cr}}}}}
+\def\loa{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr<\cr\approx\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr
+<\cr\approx\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr
+<\cr\approx\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+<\cr\approx\cr}}}}}
+\def\goa{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr>\cr\approx\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr
+>\cr\approx\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr
+>\cr\approx\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+>\cr\approx\cr}}}}}
+\def\diameter{{\ifmmode\mathchoice
+{\ooalign{\hfil\hbox{$\displaystyle/$}\hfil\crcr
+{\hbox{$\displaystyle\mathchar"20D$}}}}
+{\ooalign{\hfil\hbox{$\textstyle/$}\hfil\crcr
+{\hbox{$\textstyle\mathchar"20D$}}}}
+{\ooalign{\hfil\hbox{$\scriptstyle/$}\hfil\crcr
+{\hbox{$\scriptstyle\mathchar"20D$}}}}
+{\ooalign{\hfil\hbox{$\scriptscriptstyle/$}\hfil\crcr
+{\hbox{$\scriptscriptstyle\mathchar"20D$}}}}
+\else{\ooalign{\hfil/\hfil\crcr\mathhexbox20D}}%
+\fi}}
+
+
+\def\getsto{\mathrel{\mathchoice {\vcenter{\offinterlineskip
+\halign{\hfil
+$\displaystyle##$\hfil\cr\gets\cr\to\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr\gets
+\cr\to\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr\gets
+\cr\to\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+\gets\cr\to\cr}}}}}
+\def\lid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr<\cr\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr<\cr
+\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr<\cr
+\noalign{\vskip1pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+<\cr
+\noalign{\vskip0.9pt}=\cr}}}}}
+\def\gid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr>\cr\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr>\cr
+\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr>\cr
+\noalign{\vskip1pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+>\cr
+\noalign{\vskip0.9pt}=\cr}}}}}
+\def\bbbr{{\rm I\!R}} %reelle Zahlen
+\def\bbbm{{\rm I\!M}}
+\def\bbbn{{\rm I\!N}} %natuerliche Zahlen
+\def\bbbf{{\rm I\!F}}
+\def\bbbh{{\rm I\!H}}
+\def\bbbk{{\rm I\!K}}
+\def\bbbp{{\rm I\!P}}
+\def\bbbone{{\mathchoice {\rm 1\mskip-4mu l} {\rm 1\mskip-4mu l}
+{\rm 1\mskip-4.5mu l} {\rm 1\mskip-5mu l}}}
+\def\bbbc{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}}}
+\def\bbbq{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm
+Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle\rm Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle\rm Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}}}}
+\def\bbbt{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm
+T$}\hbox{\hbox to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle\rm T$}\hbox{\hbox
+to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle\rm T$}\hbox{\hbox
+to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm T$}\hbox{\hbox
+to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}}}
+\def\bbbs{{\mathchoice
+{\setbox0=\hbox{$\displaystyle \rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox
+to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle \rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox
+to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle \rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox
+to0pt{\kern0.5\wd0\vrule height0.45\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.4\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox
+to0pt{\kern0.55\wd0\vrule height0.45\ht0\hss}\box0}}}}
+\def\bbbz{{\mathchoice {\hbox{$\sf\textstyle Z\kern-0.4em Z$}}
+{\hbox{$\sf\textstyle Z\kern-0.4em Z$}}
+{\hbox{$\sf\scriptstyle Z\kern-0.3em Z$}}
+{\hbox{$\sf\scriptscriptstyle Z\kern-0.2em Z$}}}}
+\def\ts{\thinspace}
+
+\def\typeset{\vfill{\small\noindent This article was processed by the
+author using Springer-Verlag \LaTeX\ A\&A style file 1990.\par}}
+
+\def\enddocument{\par\typeset
+\@checkend{document}\clearpage\begingroup
+\if@filesw \immediate\closeout\@mainaux
+\def\global\@namedef##1##2{}\def\newlabel{\@testdef r}%
+\def\bibcite{\@testdef b}\@tempswafalse\makeatletter\input \jobname.aux
+\if@tempswa \@warning{Label(s) may have changed. Rerun to get
+cross-references right}\fi\fi\endgroup\deadcycles\z@\@@end}
+ \ No newline at end of file
diff --git a/obsolete/macros/latex209/contrib/springer/laa/laa.the b/obsolete/macros/latex209/contrib/springer/laa/laa.the
new file mode 100644
index 0000000000..798b167192
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/laa/laa.the
@@ -0,0 +1,364 @@
+% laa.the version 1 as of 23-Oct-90
+%
+% This is LAA.THE, the the thesaurus-list for the
+% Astronomy and Astrophysics Main Journal
+%
+\documentstyle{laa}
+\begin{document}
+\twocolumn[\LARGE\bf Thesaurus of key words used in the annual subject
+indexes\\
+\large\bf(revised November 1989, valid from January 1990
+until further notice)]
+{\bf N.B.} The key words listed under the code numbers 07.11.1, 09.11.1,
+09.16.1, 09.22.1, 16.03.1, 16.07.1, 16.14.1, 17.02.1, 19.42.1 and
+19.93.1 are intended for use with specific astronomical objects; each
+contains the word ``individual". The corresponding code numbers should
+never be used alone, but always in combination with the most common
+names for the astronomical objects in question. For example, if a paper
+discusses three individual galaxies, these should be coded on the title
+page of the manuscript in the following manner: \\ \indent
+07.11.1 Arp 220; 07.11.1 M 51; 07.11.1 NGC 4472\\
+Note that {\sl each object} (in the example the three galaxies) counts
+as {\sl one} Thesaurus code. No more than {\sl six} codes all together
+should be listed as this is the limit fixed by the computer program.
+%\begin{table}
+%\begin{flushleft}
+%\begin{tabular}{@{}l@{ }l}
+\begin{tabbing}
+ \= Absolute magnitudes; {\sl see Stars: luminosities of}\\%
+ \= Abundances; {\sl see under the different objects}\\%
+{\bf 01.01.1} \= Acceleration mechanisms\\%
+{\bf 01.01.2} \= Accretion, accretion disks\\%
+{\bf 01.02.1} \= Analytical methods\\%
+ \> Associations; {\sl see Clusters: open, and associations}\\%
+{\bf 01.03.1} \= Asteroids\\%
+{\bf 01.04.1} \= Astrometry\\%
+{\bf 01.05.1} \= Astronomical constants\\%
+{\bf 01.06.1} \= Atlases\\%
+{\bf 01.07.1} \= Atomic and molecular data\\%
+{\bf 01.08.1} \= Atomic and molecular processes; {\sl see also Chemical}\\%
+ \> {\sl reactions}\\%
+{\bf 01.08.2} \= Background radiations\\%
+ \> Binary stars; {\sl see Stars: binaries}\\%
+\\%
+{\bf 02.01.1} \= BL Lacertae objects\\%
+{\bf 02.02.1} \= Black holes\\%
+\\%
+{\bf 03.01.1} \= Catalogues and dictionaries\\%
+{\bf 03.02.1} \= Celestial mechanics\\%
+{\bf 03.03.1} \= Chemical reactions\\%
+{\bf 03.04.1} \= Clusters: of galaxies\\%
+{\bf 03.05.1} \= Clusters: globular\\%
+{\bf 03.06.1} \= Clusters: open, and associations\\%
+ \> Collisions, atomic and molecular; {\sl see Atomic and}\\%
+ \> {\sl molecular data}\\%
+{\bf 03.07.1} \= Comets\\%
+{\bf 03.08.1} \= Convection\\%
+{\bf 03.10.1} \= Cosmic rays; {\sl see also Sun (the): cosmic rays}\\%
+{\bf 03.11.1} \= Cosmogony\\%
+{\bf 03.12.1} \= Cosmology\\%
+{\bf 03.12.2} \= Dark matter\\%
+\\%
+{\bf 04.01.1} \= Data analysis; {\sl see also Image processing}\\%
+{\bf 04.02.1} \= Dense matter\\%
+{\bf 04.03.1} \= Distances, distance scale\\%
+ \> Double stars; {\sl see Stars: binaries}\\%
+ \> Dust; {\sl see Interstellar medium: dust; Interplanetary}\\%
+ \> {\sl medium}\\%
+\\%
+{\bf 05.01.1} \= Earth: atmosphere\\%
+{\bf 05.02.1} \= Earth: general\\%
+%\end{tabular}
+%\end{flushleft}
+%\end{table}
+%\clearpage
+%\begin{table}
+%\begin{flushleft}
+%\begin{tabular}{@{}l@{ }l}
+{\bf 05.02.2} \= Earth: rotation\\%
+{\bf 05.03.1} \= Eclipses\\%
+{\bf 05.04.1} \= Editorials\\%
+{\bf 05.06.1} \= Elementary particles\\%
+{\bf 05.07.1} \= Ephemerides\\%
+{\bf 05.08.1} \= Errata\\%
+\\%
+{\bf 06.01.1} \= Fundamental stars and other objects\\%
+\\%
+{\bf 07.01.1} \= Galaxies: active; {\sl see also Galaxies, Seyfert;}\\%
+ \> {\sl Galaxies: nuclei of; Quasars}\\%
+{\bf 07.02.1} \= Galaxies: barred\\%
+ \> Galaxies: clusters of, {\sl see Clusters: of galaxies}\\%
+{\bf 07.03.1} \= Galaxies: compact\\%
+{\bf 07.05.1} \= Galaxies: dwarf elliptical\\%
+{\bf 07.06.1} \= Galaxies: elliptical\\%
+{\bf 07.07.1} \= Galaxies: evolution of\\%
+{\bf 07.08.1} \= Galaxies: formation of\\%
+{\bf 07.09.1} \= Galaxies: general\\%
+{\bf 07.10.1} \= Galaxies: haloes of\\%
+{\bf 07.11.1} \= Galaxies: individual; {\sl see also Galaxies: Magellanic}\\%
+ \> {\sl Clouds}\\%
+{\bf 07.12.1} \= Galaxies: irregular\\%
+{\bf 07.13.1} \= Galaxies: jets of\\%
+{\bf 07.14.1} \= Galaxies: kinematics and dynamics of\\%
+{\bf 07.15.1} \= Galaxies: lenticular\\%
+{\bf 07.16.1} \= Galaxies: Magellanic Clouds\\%
+{\bf 07.17.1} \= Galaxies: radio\\%
+{\bf 07.18.1} \= Galaxies: nuclei of\\%
+{\bf 07.19.1} \= Galaxies: redshifts of\\%
+{\bf 07.20.1} \= Galaxies: Seyfert\\%
+{\bf 07.21.1} \= Galaxies: spiral\\%
+{\bf 07.22.1} \= Galaxies: stellar content of\\%
+{\bf 07.23.1} \= Galaxies: structure of\\%
+{\bf 07.24.1} \= Galaxy (the): bulge of\\%
+{\bf 07.25.1} \= Galaxy (the): center of\\%
+{\bf 07.27.1} \= Galaxy (the): disk of\\%
+{\bf 07.28.1} \= Galaxy (the): evolution of\\%
+{\bf 07.29.1} \= Galaxy (the): general\\%
+{\bf 07.30.1} \= Galaxy (the): halo of\\%
+{\bf 07.31.1} \= Galaxy (the): kinematics and dynamics of\\%
+{\bf 07.32.1} \= Galaxy (the): solar neighbourhood\\%
+{\bf 07.33.1} \= Galaxy (the): stellar content of\\%
+{\bf 07.34.1} \= Galaxy (the): structure of\\%
+{\bf 07.35.1} \= Gamma rays: bursts\\%
+{\bf 07.36.1} \= Gamma rays: general\\%
+ \> Gas dynamcis; {\sl see Hydrodynamics and hydromagnetics}\\%
+ \> Grains; {\sl see Interstellar medium: dust; Interplanetary}\\%
+ \> {\sl medium}\\%
+{\bf 07.37.1} \= Gravitation\\%
+{\bf 07.37.2} \= Herbig-Haro objects\\%
+\\%
+{\bf 08.01.1} \= Hydrodynamics\\%
+{\bf 08.02.1} \= Hydromagnetics\\%
+ \> H\small{II} regions; {\sl see Interstellar medium: H\small{II} regions}\\%
+\\%
+{\bf 09.01.1} \= Image processing\\%
+{\bf 09.02.1} \= Infrared radiation\\%
+{\bf 09.03.1} \= Instruments; {\sl see also: Interferometry; Radio telescopes;}\\%
+ \> {\sl Space vehicles}\\%
+{\bf 09.04.1} \= Interferometry\\%
+{\bf 09.05.1} \= Intergalactic medium\\%
+{\bf 09.06.1} \= Interplanetary medium\\%
+{\bf 09.07.1} \= Interstellar medium: abundances\\%
+{\bf 09.08.1} \= Interstellar medium: bubbles\\%
+{\bf 09.09.1} \= Interstellar medium: clouds: general\\%
+{\bf 09.10.1} \= Interstellar medium: clouds: high velocity\\%
+{\bf 09.11.1} \= Interstellar medium: clouds: individual\\%
+{\bf 09.12.1} \= Interstellar medium: dust\\%
+{\bf 09.13.1} \= Interstellar medium: extinction\\%
+{\bf 09.14.1} \= Interstellar medium: general\\%
+{\bf 09.15.1} \= Interstellar medium: H\small{II} regions: general\\%
+{\bf 09.16.1} \= Interstellar medium: H\small{II} regions: individual\\%
+{\bf 09.17.1} \= Interstellar medium: kinematics and dynamics of\\%
+{\bf 09.18.1} \= Interstellar medium: magnetic field\\%
+{\bf 09.19.1} \= Interstellar medium: molecules\\%
+ \> Interstellar medium: planetary nebulae; {\sl see Planetary}\\%
+ \> {\sl nebulae}\\%
+{\bf 09.20.1} \= Interstellar medium: radiation field\\%
+{\bf 09.21.1} \= Interstellar medium: reflection nebulae: general\\%
+{\bf 09.22.1} \= Interstellar medium: reflection nebulae: individual\\%
+ \> Interstellar medium: shells; {\sl see Interstellar medium:}\\%
+ \> {\sl bubbles}\\%
+ \> Interstellar medium: supernova remnants;\\%
+ \> {\sl see Supernovae and supernova remnants}\\%
+\\%
+{\bf 12.01.1} \= Lines: formation; {\sl see also: Radiation transfer}\\%
+{\bf 12.02.1} \= Lines: identification\\%
+{\bf 12.03.1} \= Lines: profile\\%
+{\bf 12.04.1} \= Luminosity function, mass function\\%
+ \> Magellanic Clouds: {\sl see Galaxies: Magellanic Clouds}\\%
+\\%
+{\bf 13.01.1} \= Magnetic field\\%
+ \> Magnetohydrodynamics; {\sl see Hydromagnetics, plasmas}\\%
+{\bf 13.02.1} \= Masers\\%
+ \> Mass function; {\sl see Luminosity function, mass function}\\%
+{\bf 13.03.1} \= Meteors, meteorites\\%
+ \> Microwave background; {\sl see Cosmic background}\\%
+ \> {\sl radiation}\\%
+ \> Molecules; {\sl see Atomic and molecular data; Interstellar}\\%
+ \> {\sl medium: molecules; Radio lines: molecular}\\%
+ \> Nebulae; {\sl see Interstellar medium: H\small{II} regions; Planetary}\\%
+ \> {\sl nebulae; Interstellar medium: reflection nebulae; Super-}\\%
+ \> {\sl novae and supernova remnants}\\%
+ \> Neutrinos; {\sl see Elementary particles}\\%
+\\%
+{\bf 14.01.1} \= Nuclear reactions\\%
+{\bf 14.02.1} \= Nucleosynthesis\\%
+{\bf 14.03.1} \= Numerical methods\\%
+\\%
+{\bf 15.01.1} \= Observational methods\\%
+{\bf 15.02.1} \= Occultations\\%
+ \> Parallaxes; {\sl see Distances, distance scale}\\%
+ \> Particle acceleration; {\sl see Acceleration mechanisms}\\%
+\\%
+{\bf 16.01.1} \= Photometry\\%
+{\bf 16.02.1} \= Planetary nebulae: general\\%
+{\bf 16.03.1} \= Planetary nebulae: individual\\%
+{\bf 16.04.1} \= Planets and satellites: abundances\\%
+{\bf 16.05.1} \= Planets and satellites: atmospheres of\\%
+{\bf 16.06.1} \= Planets and satellites: general\\%
+{\bf 16.07.1} \= Planets and satellites: individual\\%
+{\bf 16.08.1} \= Planets and satellites: magnetospheres of\\%
+{\bf 16.09.1} \= Planets and satellites: Moon\\%
+{\bf 16.09.2} \= Planets and satellites: rings\\%
+{\bf 16.10.1} \= Planets and satellites: satellites\\%
+{\bf 16.11.1} \= Plasmas\\%
+{\bf 16.12.1} \= Polarization\\%
+ \> Positions; {\sl see Astrometry; Fundamental stars and other}\\%
+ \> {\sl objects}\\%
+ \> Proper motions; {\sl see Astrometry; Fundamental stars and}\\%
+ \> {\sl other objects}\\%
+ \> Protostars; {\sl see Stars: pre-main-sequence; Interstellar}\\%
+ \> {\sl medium: clouds; Interstellar medium: kinematics and}\\%
+ \> {\sl dynamics of}\\%
+{\bf 16.13.1} \= Pulsars: general\\%
+{\bf 16.14.1} \= Pulsars: individual\\%
+\\%
+{\bf 17.01.1} \= Quasars: general\\%
+{\bf 17.02.1} \= Quasars: individual\\%
+{\bf 17.03.1} \= Quasars: jets of\\%
+{\bf 17.04.1} \= Quasars: redshifts of\\%
+\\%
+{\bf 18.01.1} \= Radar astronomy\\%
+{\bf 18.02.1} \= Radial velocities: {\sl see also Galaxy (the): kinematics and}\\%
+ \> {\sl dynamics of; Galaxies: redshifts of; Quasars: redshift of}\\%
+{\bf 18.03.1} \= Radiation mechanisms: general\\%
+{\bf 18.03.2} \= Radiation mechanisms: synchrotron radiation\\%
+{\bf 18.04.1} \= Radiation transfer; {\sl see also Lines, formation}\\%
+ \> Radio galaxies; {\sl see Galaxies, radio}\\%
+{\bf 18.05.1} \= Radio lines: molecular\\%
+{\bf 18.06.1} \= Radio lines: recombination\\%
+{\bf 18.07.1} \= Radio lines: 21-cm\\%
+{\bf 18.08.1} \= Radio sources: general; {\sl see also individual objects}\\%
+{\bf 18.08.2} \= Radio continuum\\%
+{\bf 18.09.1} \= Radio telescopes\\%
+{\bf 18.09.2} \= Reference systems\\%
+{\bf 18.10.1} \= Relativity\\%
+\\%
+{\bf 19.01.1} \= Satellites; {\sl see Planets and satellites}\\%
+{\bf 19.02.1} \= Scintillation\\%
+{\bf 19.03.1} \= Seeing\\%
+{\bf 19.04.1} \= Shock waves\\%
+{\bf 19.05.1} \= Site testing\\%
+ \> Solar neighbourhood: {\sl see Galaxy (the): solar neighbour-}\\%
+ \> {\sl hood}\\%
+{\bf 19.06.1} \= Solar system: general\\%
+ \> solar wind; {\sl see Interplanetary medium}\\%
+{\bf 19.07.1} \= Space vehicles and instruments\\%
+{\bf 19.08.1} \= Spectrophotometry\\%
+{\bf 19.09.1} \= Spectroscopy\\%
+ \> Spiral structure: {\sl see Galaxy (the): kinematics and}\\%
+ \> {\sl dynamics of; Galaxy (the): structure of; Galaxies:}\\%
+ \> {\sl kinematics and dynamics of; Galaxies: spiral; Galaxies:}\\%
+ \> {\sl structure of}\\%
+{\bf 19.10.1} \= Stars: abundances\\%
+{\bf 19.11.1} \= Stars: activity of\\%
+{\bf 19.12.1} \= Stars: atmospheres of\\%
+{\bf 19.13.1} \= Stars: Be\\%
+{\bf 19.14.1} \= Stars: $\beta$ Cep\\%
+{\bf 19.15.1} \= Stars: binaries: close\\%
+{\bf 19.16.1} \= Stars: binaries: general\\%
+{\bf 19.17.1} \= Stars: binaries: spectroscopic\\%
+{\bf 19.18.1} \= Stars: binaries: symbiotic\\%
+{\bf 19.19.1} \= Stars: binaries: visual\\%
+{\bf 19.20.1} \= Stars: blue stragglers\\%
+{\bf 19.21.1} \= Stars: bolometric correction\\%
+{\bf 19.22.1} \= Stars: carbon\\%
+ \> Stars: cataclysmic variables; {\sl see Stars: novae}\\%
+{\bf 19.23.1} \= Stars: Cepheids\\%
+{\bf 19.24.1} \= Stars: chromospheres of\\%
+{\bf 19.25.1} \= Stars: circumstellar matter\\%
+{\bf 19.25.2} \= Stars: chemical peculiar\\%
+{\bf 19.26.1} \= Stars: classification\\%
+{\bf 19.27.1} \= Stars: collapsed\\%
+{\bf 19.28.1} \= Stars: colors of\\%
+{\bf 19.29.1} \= Stars: coronae of\\%
+{\bf 19.30.1} \= Stars: diameters of\\%
+{\bf 19.31.1} \= Stars: $\delta$ Sct\\%
+{\bf 19.31.2} \= Stars: dynamics\\%
+{\bf 19.31.3} \= Stars: dwarfs\\%
+{\bf 19.32.1} \= Stars: early-type\\%
+{\bf 19.33.1} \= Stars: emission-line\\%
+{\bf 19.34.1} \= Stars: evolution of\\%
+{\bf 19.35.1} \= Stars: faint blue\\%
+{\bf 19.36.1} \= Stars: flare\\%
+{\bf 19.37.1} \= Stars: formation of\\%
+{\bf 19.38.1} \= Stars: general\\%
+{\bf 19.39.1} \= Stars: giant\\%
+{\bf 19.40.1} \= Stars: helium\\%
+{\bf 19.41.1} \= Stars: Hertzsprung-Russell diagram\\%
+{\bf 19.42.1} \= Stars: individual\\%
+ \> Stars: interior; {\sl see Stars: structure of}\\%
+{\bf 19.43.1} \= Stars: late-type\\%
+{\bf 19.44.1} \= Stars: long-period variables\\%
+{\bf 19.45.1} \= Stars: luminosities of\\%
+{\bf 19.46.1} \= Stars: magnetic field\\%
+{\bf 19.47.1} \= Stars: mass of\\%
+{\bf 19.48.1} \= Stars: mass loss\\%
+{\bf 19.49.1} \= Stars: mass-luminosity relation\\%
+ \> Stars: Mira; {\sl see Stars: long-period variables}\\%
+{\bf 19.50.1} \= Stars: neutron\\%
+{\bf 19.51.1} \= Stars: novae and cataclysmic variables\\%
+{\bf 19.52.1} \= Stars: OH/IR\\%
+{\bf 19.53.1} \= Stars: oscillations of\\%
+{\bf 19.55.1} \= Stars: Population I\\%
+{\bf 19.56.1} \= Stars: Population II\\%
+{\bf 19.57.1} \= Stars: Population III\\%
+{\bf 19.58.1} \= Stars: pre-main-sequence\\%
+{\bf 19.59.1} \= Stars: radio radiation of\\%
+{\bf 19.60.1} \= Stars: rotation of\\%
+{\bf 19.61.1} \= Stars: RR Lyr\\%
+{\bf 19.62.1} \= Stars: runaway\\%
+{\bf 19.63.1} \= Stars: structure of\\%
+{\bf 19.64.1} \= Stars: subdwarf\\%
+{\bf 19.65.1} \= Stars: supergiant\\%
+ \> Stars: supernovae; {\sl see Supernovae and supernova}\\%
+ \> remnants\\%
+{\bf 19.66.1} \= Stars: temperatures of\\%
+ \> Stars: T Tau; {\sl see Stars: pre-main-sequence}\\%
+{\bf 19.67.1} \= Stars: variable\\%
+{\bf 19.68.1} \= Stars: white dwarf\\%
+ \> Stars: winds; {\sl see Stars: mass loss}\\%
+{\bf 19.69.1} \= Stars: Wolf-Rayet\\%
+ \> Submillimetre radiation; {\sl see Infrared radiation}\\%
+{\bf 19.70.1} \= Sun (the): abundances\\%
+{\bf 19.71.1} \= Sun (the): activity of\\%
+{\bf 19.72.1} \= Sun (the): atmosphere of\\%
+{\bf 19.73.1} \= Sun (the): bursts\\%
+{\bf 19.74.1} \= Sun (the): chromosphere of\\%
+{\bf 19.75.1} \= Sun (the): corona of\\%
+{\bf 19.76.1} \= Sun (the): cosmic rays\\%
+{\bf 19.77.1} \= Sun (the): faculae\\%
+{\bf 19.78.1} \= Sun (the): flares\\%
+{\bf 19.79.1} \= Sun (the): general\\%
+{\bf 19.80.1} \= Sun (the): granulation\\%
+ \> Sun (the): {\sl see Sun (the): structure of}\\%
+{\bf 19.81.1} \= Sun (the): magnetic fields\\%
+{\bf 19.82.1} \= Sun (the): oscillations of\\%
+{\bf 19.83.1} \= Sun (the): photosphere of\\%
+{\bf 19.84.1} \= Sun (the): prominences\\%
+{\bf 19.85.1} \= Sun (the): radio radiation of\\%
+{\bf 19.86.1} \= Sun (the): rotation of\\%
+{\bf 19.87.1} \= Sun (the): solar-terrestrial relations;\\%
+ \> {\sl see also Interplanetary medium}\\%
+{\bf 19.88.1} \= Sun (the): solar wind; {\sl see also Interplanetary medium}\\%
+{\bf 19.89.1} \= Sun (the): structure of\\%
+{\bf 19.90.1} \= Sun (the): sunspots\\%
+{\bf 19.91.1} \= Sun (the): X-rays\\%
+{\bf 19.92.1} \= Supernovae and supernova remnants: general\\%
+{\bf 19.93.1} \= Supernovae and supernova remnants: individual\\%
+{\bf 19.94.1} \= Surveys\\%
+ \> Synchrotron radiation; {\sl see Radiation mechanisms}\\%
+{\bf 19.95.1} \= Time\\%
+ \> Transition probabilities: {\sl see Atomic and molecular data}\\%
+\\%
+{\bf 20.01.1} \= Turbulence\\%
+{\bf 20.01.2} \= Universe (the): structure of\\%
+\\%
+{\bf 21.01.1} \= UV radiation; {\sl see also under the different objects}\\%
+\\%
+{\bf 24.01.1} \= X-rays: binaries\\%
+{\bf 24.02.1} \= X-rays: bursts\\%
+{\bf 24.03.1} \= X-rays: general\\%
+{\bf 24.04.1} \= X-rays: spectroscopy\\%
+\end{tabbing}
+\end{document}
diff --git a/obsolete/macros/latex209/contrib/springer/laa/laamt.sty b/obsolete/macros/latex209/contrib/springer/laa/laamt.sty
new file mode 100644
index 0000000000..8cc38aad08
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/laa/laamt.sty
@@ -0,0 +1,996 @@
+% laamt.sty version 1.1 as of 25-Feb-91
+%
+% This is LAAMT.STY, the LaTeX style file
+% from Springer-Verlag for the
+% Astronomy and Astrophysics Main Journal
+% using the Monotype Times fonts from
+% the Universit\"atsdruckerei H. St\"urtz at W\"urzburg
+%
+% It is for use with LaTeX version 2.09
+% and only with the MTLaTeX format file
+%
+% Please report all errors via e-mail to SPRINGER@DHDSPRI6.bitnet
+% or to the address mentioned on page 2 of the documentation
+%
+\typeout{Document Style `laamt'. <25 Feb 1991>}
+
+\frenchspacing
+\def~{\penalty\@M\kern3pt}
+
+\font\egtsf = mtss10 at 8pt
+
+\def\viiipt{\textfont\z@\egtrm
+ \scriptfont\z@\sixrm \scriptscriptfont\z@\fivrm
+\textfont\@ne\egtmi \scriptfont\@ne\sixmi \scriptscriptfont\@ne\fivmi
+\textfont\tw@\egtsy \scriptfont\tw@\sixsy \scriptscriptfont\tw@\fivsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex
+\scriptscriptfont\thr@@\tenex
+\def\prm{\fam\z@\egtrm}%
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\egtmi
+ \textfont\tw@\egtsy \textfont\lyfam\egtly
+ \@boldfalse}\@boldfalse
+\def\boldmath{\@ifundefined{egtmib}{\global\font\egtmib=mtmib10 at 8pt%
+ \global\font\egtsyb=mtbsy10 at 8pt%
+ \global\font\egtlyb=mtlasb10 at 8pt\relax\@addfontinfo\@viiipt
+ {\def\boldmath{\everymath{\mit}\everydisplay{\mit}\@prtct\@nomathbold
+ \textfont\@ne\egtmib \textfont\tw@\egtsyb
+ \textfont\lyfam\egtlyb \@prtct\@boldtrue}}}{}\@viiipt\boldmath}%
+\def\pit{\fam\itfam\egtit}\textfont\itfam\egtit
+ \scriptfont\itfam\sevit \scriptscriptfont\itfam\sevit
+\def\psl{\@getfont\psl\slfam\@viiipt{mtsl10 at 8pt}}%
+\def\pbf{\@getfont\pbf\bffam\@viiipt{mtbx10 at 8pt}}%
+\def\ptt{\@getfont\ptt\ttfam\@viiipt{mttt10 at 8pt}%
+\@nohyphens\ptt\@viiipt}%
+%\def\psf{\@getfont\psf\sffam\@viiipt{mtss10 at 8pt}}%
+\def\psf{\fam\sffam\egtsf}\textfont\sffam\egtsf
+ \scriptfont\sffam\sixsf \scriptscriptfont\sffam\fivsf
+\def\psc{\@getfont\psc\scfam\@viiipt{mtcsc10 at 8pt}}%
+\def\ly{\fam\lyfam\egtly}\textfont\lyfam\egtly
+ \scriptfont\lyfam\sixly \scriptscriptfont\lyfam\fivly
+\@setstrut \rm}
+
+\def\@viiipt{}
+
+\font\ninsf = mtss10 at 9pt
+\font\fivsf = mtss10 at 5pt
+\font\sixsf = mtss10 at 6pt
+
+\def\ixpt{\textfont\z@\ninrm
+ \scriptfont\z@\sixrm \scriptscriptfont\z@\fivrm
+\textfont\@ne\ninmi \scriptfont\@ne\sixmi \scriptscriptfont\@ne\fivmi
+\textfont\tw@\ninsy \scriptfont\tw@\sixsy \scriptscriptfont\tw@\fivsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex
+\scriptscriptfont\thr@@\tenex
+\def\prm{\fam\z@\ninrm}%
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\ninmi
+ \textfont\tw@\ninsy \textfont\lyfam\ninly
+ \@boldfalse}\@boldfalse
+\def\boldmath{\@ifundefined{ninmib}{\global\font\ninmib=mtmib10 at 9pt%
+ \global\font\ninsyb=mtbsy10 at 9pt%
+ \global\font\ninlyb=mtlasb10 at 9pt\relax\@addfontinfo\@ixpt
+ {\def\boldmath{\everymath{\mit}\everydisplay{\mit}\@prtct\@nomathbold
+ \textfont\@ne\ninmib \textfont\tw@\ninsyb
+ \textfont\lyfam\ninlyb \@prtct\@boldtrue}}}{}\@ixpt\boldmath}%
+\def\pit{\fam\itfam\ninit}\textfont\itfam\ninit
+ \scriptfont\itfam\sevit \scriptscriptfont\itfam\sevit
+\def\psl{\@getfont\psl\slfam\@ixpt{mtsl10 at 9pt}}%
+\def\pbf{\fam\bffam\ninbf}\textfont\bffam\ninbf
+ \scriptfont\bffam\ninbf \scriptscriptfont\bffam\ninbf
+\def\ptt{\fam\ttfam\nintt}\textfont\ttfam\nintt
+ \scriptfont\ttfam\nintt \scriptscriptfont\ttfam\nintt
+%def\psf{\@getfont\psf\sffam\@ixpt{mtss10 at 9pt}}%
+\def\psf{\fam\sffam\ninsf}\textfont\sffam\ninsf
+ \scriptfont\sffam\sixsf \scriptscriptfont\sffam\fivsf
+\def\psc{\@getfont\psc\scfam\@ixpt{mtcsc10 at 9pt}}%
+\def\ly{\fam\lyfam\ninly}\textfont\lyfam\ninly
+ \scriptfont\lyfam\sixly \scriptscriptfont\lyfam\fivly
+\@setstrut \rm}
+
+\def\@ixpt{}
+
+\def\xivpt{\textfont\z@\frtnrm
+ \scriptfont\z@\tenrm \scriptscriptfont\z@\sevrm
+\textfont\@ne\frtnmi \scriptfont\@ne\tenmi \scriptscriptfont\@ne\sevmi
+\textfont\tw@\frtnsy \scriptfont\tw@\tensy \scriptscriptfont\tw@\sevsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex
+\scriptscriptfont\thr@@\tenex
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\frtnmi \textfont\tw@\frtnsy
+ \textfont\lyfam\frtnly \@boldfalse}\@boldfalse
+\def\boldmath{\@ifundefined{frtnmib}{\global\font
+ \frtnmib=mtmib10 at 14pt\global\font\frtnsyb=mtbsy10 at 14pt%
+ \global\font\frtnlyb=mtlasb10 at 14pt\relax\@addfontinfo\@xivpt
+ {\def\boldmath{\everymath
+ {\mit}\everydisplay{\mit}\@prtct\@nomathbold
+ \textfont\@ne\frtnmib \textfont\tw@\frtnsyb
+ \textfont\lyfam\frtnlyb\@prtct\@boldtrue}}}{}\@xivpt
+ \boldmath}%
+\def\prm{\fam\z@\frtnrm}%
+\def\pit{\@getfont\pit\itfam\@xivpt{mtti10 at 14pt}}%
+\def\psl{\@getfont\psl\slfam\@xivpt{mtsl10 at 14pt}}%
+\def\pbf{\fam\bffam\frtnbf}\textfont\bffam\frtnbf
+ \scriptfont\bffam\tenbf \scriptscriptfont\bffam\ninbf
+\def\ptt{\@getfont\ptt\ttfam\@xivpt{mttt10 at 14pt}%
+\@nohyphens\ptt\@xivpt}%
+\def\psf{\@getfont\psf\sffam\@xivpt{mtss10 at 14pt}}%
+\def\psc{\@getfont\psc\scfam\@xivpt{mtcsc10 at 14pt}}%
+\def\ly{\fam\lyfam\frtnly}\textfont\lyfam\frtnly
+ \scriptfont\lyfam\tenly \scriptscriptfont\lyfam\sevly
+\@setstrut \rm}
+
+\def\@xivpt{}
+
+\def\xviipt{\textfont\z@\svtnrm
+ \scriptfont\z@\twlrm \scriptscriptfont\z@\tenrm
+\textfont\@ne\svtnmi \scriptfont\@ne\twlmi \scriptscriptfont\@ne\tenmi
+\textfont\tw@\svtnsy \scriptfont\tw@\twlsy \scriptscriptfont\tw@\tensy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex
+\scriptscriptfont\thr@@\tenex
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\svtnmi \textfont\tw@\svtnsy
+ \textfont\lyfam\svtnly
+ \@boldfalse}\@boldfalse
+\def\boldmath{\@ifundefined{svtnmib}{\global\font
+ \svtnmib=mtmib10 at 17pt\global\font\svtnsyb=mtbsy10 at 17pt%
+ \global\font\svtnlyb=mtlasb10 at17pt\relax\@addfontinfo\@xviipt
+ {\def\boldmath{\everymath
+ {\mit}\everydisplay{\mit}\@prtct\@nomathbold
+ \textfont\@ne\svtnmib \textfont\tw@\svtnsyb
+ \textfont\lyfam\svtnlyb\@prtct\@boldtrue}}}{}\@xviipt
+ \boldmath}%
+\def\prm{\fam\z@\svtnrm}%
+\def\pit{\@getfont\pit\itfam\@xviipt{mtti10 at 17pt}}%
+\def\psl{\@getfont\psl\slfam\@xviipt{mtsl10 at 17pt}}%
+\def\pbf{\fam\bffam\svtnbf}\textfont\bffam\svtnbf
+ \scriptfont\bffam\twlbf \scriptscriptfont\bffam\tenbf
+\def\ptt{\@getfont\ptt\ttfam\@xviipt{mttt10 at 17pt}\@nohyphens
+ \ptt\@xviipt}%
+\def\psf{\@getfont\psf\sffam\@xviipt{mtss10 at 17pt}}%
+\def\psc{\@getfont\psc\scfam\@xviipt{mtcsc10 at 17pt}}%
+\def\ly{\fam\lyfam\svtnly}\textfont\lyfam\svtnly
+ \scriptfont\lyfam\twlly \scriptscriptfont\lyfam\tenly
+\@setstrut \rm}
+
+\def\@xviipt{}
+
+\def\@ptsize{0} \@namedef{ds@11pt}{\def\@ptsize{1}}
+\@namedef{ds@12pt}{\def\@ptsize{2}}
+\def\ds@twoside{\@twosidetrue \@mparswitchtrue}
+\def\ds@draft{\overfullrule 5pt}
+\newif\if@referee \@refereefalse
+\def\ds@referee{\@refereetrue}
+\@options
+
+\widowpenalty=9000
+\clubpenalty=9000
+
+\lineskip 1pt \normallineskip 1pt
+\def\baselinestretch{1}
+
+\parskip 0pt plus 1pt
+\topsep 10pt plus2pt minus5pt
+\partopsep 0pt
+\itemsep 0pt plus 1pt
+\parindent 1.5em
+\leftmargin \parindent
+\leftmargini \leftmargin
+\leftmarginii \leftmargin
+\leftmarginiii \leftmargin
+\leftmarginiv \leftmargin
+\leftmarginv \leftmargin
+\leftmarginvi \leftmargin
+\labelwidth\leftmargini
+\labelsep 4pt
+\advance\labelwidth-\labelsep
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep \z@}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep \z@}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
+\if@referee
+\def\@normalsize{\@setsize\normalsize{18dd}\xpt\@xpt
+\abovedisplayskip 18pt plus2pt minus5pt
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt
+\belowdisplayshortskip 8pt plus3pt minus3pt
+\def\@listi{\topsep 6pt plus 2pt minus 2pt
+\leftmargin \leftmargini
+\parsep 3pt plus 1pt minus 1pt
+\itemsep \parsep}}
+\def\small{\@setsize\small{16dd}\ixpt\@ixpt
+\abovedisplayskip 15pt plus 3pt minus 4pt
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2pt
+\belowdisplayshortskip 6pt plus2pt minus 2pt
+\def\@listi{\topsep 6pt plus 2pt minus 2pt
+\leftmargin \leftmargini
+\parsep 3pt plus 1pt minus 1pt
+\itemsep \parsep}}
+\def\footnotesize{\@setsize\footnotesize{18dd}\xpt\@xpt
+\abovedisplayskip 18pt plus 2pt minus 5pt
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt
+\belowdisplayshortskip 8pt plus 1pt minus 2pt
+\def\@listi{\topsep 6pt plus 2pt minus 2pt
+\leftmargin \leftmargini
+\parsep 3pt plus 1pt minus 1pt
+\itemsep \parsep}}
+\def\scriptsize{\@setsize\scriptsize{14pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{24dd}\xivpt\@xivpt}
+\def\Large{\@setsize\Large{24dd}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{30dd}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\else
+\def\@normalsize{\@setsize\normalsize{10dd}\ixpt\@ixpt
+\abovedisplayskip 10pt plus2pt minus5pt
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt
+\belowdisplayshortskip 6pt plus3pt minus3pt
+\def\@listi{\topsep 4pt plus 2pt minus 2pt
+\leftmargin \leftmargini
+\parsep 0pt
+\itemsep \parsep}}
+\def\small{\@setsize\small{9dd}\viiipt\@viiipt
+\abovedisplayskip 8.5pt plus 3pt minus 4pt
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 2pt
+\belowdisplayshortskip 4pt plus2pt minus 2pt
+\def\@listi{\topsep 3pt plus 2pt minus 2pt
+\leftmargin \leftmargini
+\parsep 0pt
+\itemsep \parsep}}
+\def\footnotesize{\@setsize\footnotesize{10dd}\ixpt\@ixpt
+\abovedisplayskip 6pt plus 2pt minus 4pt
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt
+\belowdisplayshortskip 3pt plus 1pt minus 2pt
+\def\@listi{\topsep 4pt plus 2pt minus 2pt
+\leftmargin \leftmargini
+\parsep 0pt
+\itemsep \parsep}}
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{13dd}\xivpt\@xivpt}
+\def\Large{\@setsize\Large{13dd}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{17dd}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\fi
+\@normalsize
+
+% Margins, textwidth and textheight are set to A&A formatting
+% conventions:
+
+\if@twoside \oddsidemargin 1.5cm \evensidemargin 1.5cm \marginparwidth
+107pt \else \oddsidemargin 63pt \evensidemargin 63pt \marginparwidth
+90pt \fi
+\marginparsep 11pt
+% The next offsets are set to get well centered output from our
+% laserprinter. Users may set the required offsets for local equipment
+% by adjusting equivalent values in their DVI to printer program.
+ \voffset -3.3true cm
+ \hoffset -3.2true cm
+\topmargin 27pt \headheight 12pt \headsep 25pt \footheight 12pt
+\footskip 30pt
+\textheight 23.5cm \textwidth 40cc \columnsep 1cc \columnseprule 0pt
+
+\footnotesep 8pt
+\skip\footins 9pt plus 4pt minus 2pt
+\floatsep 12pt plus 2pt minus 2pt \textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 12pt plus 2pt minus 2pt \@maxsep 20pt \dblfloatsep 12pt plus
+2pt minus 2pt \dbltextfloatsep 20pt plus 2pt minus 4pt \@dblmaxsep 20pt
+\@fptop 0pt plus 1fil \@fpsep 8pt plus 2fil \@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil \@dblfpsep 8pt plus 2fil \@dblfpbot 0pt plus
+1fil \marginparpush 5pt
+
+\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301 \@beginparpenalty
+-\@lowpenalty \@endparpenalty -\@lowpenalty \@itempenalty -\@lowpenalty
+
+\def\vec#1{\ifmmode\mathchoice{\mbox{\boldmath$\displaystyle#1$}}
+{\mbox{\boldmath$\textstyle#1$}}
+{\mbox{\boldmath$\scriptstyle#1$}}
+{\mbox{\boldmath$\scriptscriptstyle#1$}}\else
+\hbox{\boldmath$\textstyle#1$}\fi}
+
+\def\tens#1{\ifmmode\mathchoice{\mbox{$\sf\displaystyle#1$}}
+{\mbox{$\sf\textstyle#1$}}
+{\mbox{$\sf\scriptstyle#1$}}
+{\mbox{$\sf\scriptscriptstyle#1$}}\else
+\hbox{$\sf\textstyle#1$}\fi}
+
+\def\part{\par \addvspace{4ex} \@afterindentfalse \secdef\@part\@spart}
+\def\@part[#1]#2{\ifnum \c@secnumdepth >\m@ne \refstepcounter{part}
+\addcontentsline{toc}{part}{\thepart \hspace{1em}#1}\else
+\addcontentsline{toc}{part}{#1}\fi { \parindent 0pt \raggedright \ifnum
+\c@secnumdepth >\m@ne \Large \bf Part \thepart \par \nobreak \fi \huge
+\bf #2\markboth{}{}\par } \nobreak \vskip 3ex \@afterheading }
+\def\@spart#1{{\parindent 0pt \raggedright \huge \bf #1\par} \nobreak
+\vskip 3ex \@afterheading }
+
+% Section definitions have been adapted to produce (sub)section headings
+% in A&A typefaces.
+\def\section{\@startsection {section}{1}{\z@}{-3.5ex plus -1ex minus
+ -.2ex}{1.5ex plus .2ex}{\normalsize\bf\boldmath}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-3.25ex plus -1ex
+minus -.2ex}{1.5ex plus .2ex}{\normalsize\it}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-3.25ex plus
+-1ex minus -.2ex}{1.5ex plus .2ex}{\normalsize}}
+\def\paragraph{\@startsection {paragraph}{4}{\z@}{3.25ex plus 1ex minus
+.2ex}{-.6em}{\normalsize\it}}
+\def\subparagraph#1{\typeout{AandA Warning: You should not use
+\protect\subparagraph \space in this style.}\vskip0.5cm
+You should not use $\backslash${\tt subparagraph} in this
+style.\vskip0.5cm}
+
+\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
+ \def\@svsec{}\else
+ \refstepcounter{#1}\edef\@svsec{\csname the#1\endcsname.\ }\fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #6\relax
+ \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\par}
+ \endgroup
+ \csname #1mark\endcsname{#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname.}\fi
+ #7}\else
+ \def\@svsechd{#6\hskip #3\@svsec #8\csname #1mark\endcsname
+ {#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname.}\fi
+ #7}}\fi
+ \@xsect{#5}}
+
+\def\@xsect#1{\@tempskipa #1\relax
+ \ifdim \@tempskipa>\z@
+ \par \nobreak
+ \addvspace{\@tempskipa}
+ \@afterheading
+ \else \global\@nobreakfalse \global\@noskipsectrue
+ \everypar{\if@noskipsec \global\@noskipsecfalse
+ \clubpenalty\@M \hskip -\parindent
+ \begingroup \@svsechd \endgroup \unskip
+ \hskip -#1
+ \else \clubpenalty \@clubpenalty
+ \everypar{}\fi}\fi\ignorespaces}
+
+\setcounter{secnumdepth}{3}
+
+\def\appendix{\par
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \def\thesection{\Alph{section}}
+ \renewcommand{\theequation}{\thesection\arabic{equation}}
+ \setcounter{equation}{0}
+ \@addtoreset{equation}{section}}
+
+% End of art10.sty
+
+\def\labelenumi{\arabic{enumi}.}
+\def\theenumi{\arabic{enumi}}
+\def\labelenumii{(\alph{enumii})}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+\def\labelenumiii{\roman{enumiii}.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+\def\labelenumiv{\Alph{enumiv}.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+\def\labelitemi{\bf --}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\bullet$}
+\def\labelitemiv{$\cdot$}
+
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+\def\quotation{\list{}{\listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin \parsep 0pt plus 1pt}\item[]}
+\let\endquotation=\endlist
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+\let\enddescription\endlist
+
+
+\def\theequation{\arabic{equation}}
+
+
+\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{empty}\c@page\z@}
+\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi}
+
+\arraycolsep 2.5pt \tabcolsep 6pt
+\arrayrulewidth .4pt \doublerulesep 2pt
+\tabbingsep \labelsep
+
+\skip\@mpfootins = \skip\footins
+\fboxsep = 3pt \fboxrule = .4pt
+
+\newcounter{part}
+\newcounter {section}
+\newcounter {subsection}[section]
+\newcounter {subsubsection}[subsection]
+\newcounter {paragraph}[subsubsection]
+\newcounter {subparagraph}[paragraph]
+
+% Following commands have been adapted to produce (sub)section headings
+% according to A&A layout (a period after each number).
+
+\def\thepart{\Roman{part}} \def\thesection {\arabic{section}}
+\def\thesubsection {\thesection.\arabic{subsection}}
+\def\thesubsubsection {\thesubsection.\arabic{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+\def\thesubparagraph {\theparagraph.\arabic{subparagraph}}
+
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{3}
+
+\def\tableofcontents{\section*{Contents\markboth{CONTENTS}{CONTENTS}}
+ \@starttoc{toc}}
+\def\l@part#1#2{\addpenalty{\@secpenalty}
+ \addvspace{2.25em plus 1pt} \begingroup
+ \@tempdima 3em \parindent \z@ \rightskip \@pnumwidth \parfillskip
+-\@pnumwidth
+ {\large \bf \leavevmode #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
+ \nobreak \endgroup}
+\def\l@section#1#2{\addpenalty{\@secpenalty} \addvspace{1.0em plus 1pt}
+\@tempdima 1.5em \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \bf \leavevmode #1\hfil \hbox to\@pnumwidth{\hss #2}\par
+ \endgroup}
+\def\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}}
+\def\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}}
+\def\l@paragraph{\@dottedtocline{4}{7.0em}{4.1em}}
+\def\l@subparagraph{\@dottedtocline{5}{10em}{5em}}
+\def\listoffigures{\section*{List of Figures\markboth
+ {LIST OF FIGURES}{LIST OF FIGURES}}\@starttoc{lof}}
+\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
+\def\listoftables{\section*{List of Tables\markboth
+ {LIST OF TABLES}{LIST OF TABLES}}\@starttoc{lot}}
+\let\l@table\l@figure
+
+
+% \list parameters have been adjusted in the `thebibliography'
+% environment to the match A&A layout of References.
+\def\thebibliography#1{\section*{References\markboth
+ {REFERENCES}{REFERENCES}}\list
+% The \arabic{enumi} command has been removed because we don't use
+% numbered citations in astronomical journals.
+ {}{\setlength\labelwidth{1.4em}\leftmargin\labelwidth
+ \setlength\parsep{0pt}\setlength\itemsep{0pt}
+ \setlength{\itemindent}{-\leftmargin}
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus -.07em}
+ \sloppy
+ \sfcode`\.=1000\relax}
+\let\endthebibliography=\endlist
+
+\newif\if@restonecol
+\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\section*{Index}]
+ \markboth{INDEX}{INDEX}\thispagestyle{plain}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+\def\@idxitem{\par\hangindent 40pt}
+\def\subitem{\par\hangindent 40pt \hspace*{20pt}}
+\def\subsubitem{\par\hangindent 40pt \hspace*{30pt}}
+\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
+\def\indexspace{\par \vskip 10pt plus 5pt minus 3pt\relax}
+
+\def\footnoterule{\kern-3\p@
+ \hrule width 2cm
+ \kern 2.6\p@}
+
+\long\def\@makefntext#1{\parindent 1em\noindent
+ \hbox to 1.8em{\hss$^{\@thefnmark}$}#1}
+
+\setcounter{topnumber}{2}
+\def\topfraction{.9}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.3}
+\setcounter{totalnumber}{3}
+\def\textfraction{.15}
+\def\floatpagefraction{.85}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.85}
+\def\dblfloatpagefraction{.85}
+
+% Captions of figures and tables are printed in a different point size
+% in A&A. There is only one \caption command in LaTeX, so we have to let
+% the \caption command know whether it is used within the `figure'
+% environment or within the `table' environment to decide what point
+% size should be used.
+
+\def\aafigurecaption{figure}
+
+\long\def\@makecaption#1#2{
+ \vskip 10pt
+% Use \small lettering when in `figure' environment:
+\makeatletter
+\ifx\@captype\aafigurecaption\small\fi
+\makeatother
+% Make sure that `Table <N>.' or `Fig. <N>.' is typeset in boldface:
+ \setbox\@tempboxa\hbox{{\bf #1} #2}
+ \ifdim \wd\@tempboxa >\hsize \unhbox\@tempboxa\par \else \hbox
+to\hsize{\box\@tempboxa\hfil}
+ \fi
+\makeatletter
+\ifx\@captype\aafigurecaption\else\vskip6pt\fi
+\makeatother}
+
+\def\picplace#1{\vbox{\hrule\@height 0.4pt\@width\hsize
+\hbox to\hsize{\vrule\@width 0.4pt\@height#1\hfil
+\vrule\@width 0.4pt\@height#1}\hrule\@height 0.4pt\@width\hsize}}
+
+\newcounter{figure}
+\def\thefigure{\@arabic\c@figure}
+\def\fps@figure{htbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{Fig.\ \thefigure.}
+\def\figure{\@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+
+\newcounter{table}
+\def\thetable{\@arabic\c@table}
+\def\fps@table{htbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{Table \thetable.}
+\def\table{\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+
+% LaTeX does not provide a command to enter the authors institute
+% addresses. The \institute command is defined here.
+
+\newcounter{@inst}
+\newcounter{@auth}
+\newdimen\instindent
+
+\def\institute#1{\gdef\@institute{#1}}
+
+\def\institutename{\par
+ \begingroup
+ \parindent=0pt
+ \parskip=0pt
+ \setcounter{@inst}{1}%
+ \def\and{\par\stepcounter{@inst}%
+ \noindent
+ \hbox to\instindent{\hss$^{\the@inst}$\enspace}\ignorespaces}%
+ \setbox0=\vbox{\def\thanks##1{}\@institute}
+ \ifnum\c@@inst>9\relax\setbox0=\hbox{$^{88}$\enspace}%
+ \else\setbox0=\hbox{$^{8}$\enspace}\fi
+ \instindent=\wd0\relax
+ \ifnum\c@@inst=1\relax\else
+ \setcounter{@inst}{1}%
+ \hangindent\instindent\hangafter=0\noindent
+ \llap{$^{\the@inst}$\enspace}\fi\ignorespaces
+ \@institute\par
+ \endgroup}
+
+\def\offprints#1{\begingroup
+\def\protect{\noexpand\protect\noexpand}\xdef\@thanks{\@thanks
+\protect\footnotetext[0]{\unskip{\it Send offprint requests
+to\/}: \ignorespaces#1}}\endgroup\ignorespaces}
+
+\def\@thanks{}
+
+\long\def\@makefntext#1{\parindent 1em\noindent
+$^{\@thefnmark}$#1}
+
+\def\@fnsymbol#1{\ifcase#1\or\star\or{\star\star}\or{\star\star\star}%
+ \or \dagger\or \ddagger\or
+ \mathchar "278\or \mathchar "27B\or \|\or **\or \dagger\dagger
+ \or \ddagger\ddagger \else\@ctrerr\fi\relax}
+
+\def\inst#1{\unskip$^{#1}$}
+
+\def\subtitle#1{\gdef\@subtitle{#1}}
+\def\@subtitle{}
+
+\def\thesaurus#1{\gdef\@thesaurus{#1}}
+\def\@thesaurus{missing; you have not inserted them}%
+
+\def\maketitle{\par
+ \begingroup
+ \def\thefootnote{\fnsymbol{footnote}}
+ \if@twocolumn
+ \twocolumn[\@maketitle]
+ \else
+ \newpage \@maketitle
+ \fi
+ \global\@topnum\z@
+ \thispagestyle{empty}\@thanks
+ \endgroup
+ \setcounter{footnote}{0}
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\gdef\@subtitle{}%
+ \let\thanks\relax}
+
+\def\AALogo{\setbox254=\hbox{ ASTROPHYSICS }%
+\vbox{\baselineskip=10dd\hrule\hbox{\vrule\vbox{\kern3pt
+\hbox to\wd254{\hfil ASTRONOMY\hfil}
+\hbox to\wd254{\hfil AND\hfil}\copy254
+\hbox to\wd254{\hfil\number\day.\number\month.\number\year\hfil}
+\kern3pt}\vrule}\hrule}}
+\def\makeheadbox{{\hsize=30cc
+\hbox to0pt{\vbox{\baselineskip=10dd\hrule\hbox
+to\hsize{\vrule\kern3pt\vbox{\kern3pt
+\hbox{\bf A\&A manuscript no.}
+\hbox{(will be inserted by hand later)}
+\kern3pt\hrule\kern3pt\bf
+\hbox{Your thesaurus codes are:}
+\hbox{\rightskip=0pt plus3em\advance\hsize by-7pt
+\vbox{\noindent\ignorespaces\@thesaurus}}
+\kern3pt}\hfil\kern3pt\vrule}\hrule}
+\rlap{\quad\AALogo}\hss}}}
+
+\def\@maketitle{\newpage
+ \rm\vbox to0pt{}\vskip-8mm
+ \makeheadbox
+ \vskip13.5mm
+ {\LARGE \bf\boldmath
+ \pretolerance=10000
+ \rightskip=0pt plus 4cm
+ \noindent\ignorespaces
+ \@title \par}\vskip .3cm
+\if!\@subtitle!\else {\Large \bf\boldmath
+ \vskip .05cm
+ \pretolerance=10000
+ \rightskip=0pt plus 3cm
+ \noindent\@subtitle \par}\vskip .4cm\fi
+ {\bf \lineskip .5em
+\setbox0=\vbox{\setcounter{@auth}{1}\def\and{\stepcounter{@auth}}%
+\def\thanks##1{}\@author\global\c@@inst=\c@@auth}%
+\def\lastand{\ifnum\c@@inst=2\relax\unskip{} and \else
+\unskip, and \fi}%
+\setcounter{@auth}{1}%
+\def\and{\stepcounter{@auth}\ifnum\c@@auth=\c@@inst\lastand\else
+\unskip, \fi}%
+ \noindent\@author\vskip.125cm}
+ \institutename
+ \vskip .35cm {\normalsize\noindent\@date}
+ \par
+ \vskip .7cm}
+
+% The `abstract' environment has been renamed to `abstr' so a new
+% environment `abstract' can be defined in terms of the old one. Using
+% the standard LaTeX `abstract' environment now yields the A&A Summary.
+\def\abstr{{\noindent \bf Abstract. }\ignorespaces}
+\def\endabstr{\relax}
+
+\mark{{}{}}
+
+\if@twoside
+\def\ps@headings{\def\@oddfoot{}\def\@evenfoot{}\def\@evenhead{\rm
+\thepage\hfil \sl \leftmark}\def\@oddhead{\hbox{}\sl \rightmark \hfil
+\rm\thepage}\def\sectionmark##1{\markboth {\uppercase{\ifnum
+\c@secnumdepth >\z@ \thesection\hskip 1em\relax \fi
+##1}}{}}\def\subsectionmark##1{\markright {\ifnum \c@secnumdepth >\@ne
+\thesubsection\hskip 1em\relax \fi ##1}}}
+\else
+\def\ps@headings{\def\@oddfoot{}\def\@evenfoot{}\def\@oddhead{\hbox
+{}\sl \rightmark \hfil \rm\thepage}\def\sectionmark##1{\markright
+{\uppercase{\ifnum \c@secnumdepth >\z@ \thesection\hskip 1em\relax \fi
+##1}}}}
+\fi
+\def\ps@myheadings{\def\@oddhead{\hbox{}\hfil\rm\thepage\hfil
+}\def\@oddfoot{}\def\@evenhead{\hfil\rm\thepage\hfil\hbox
+{}}\def\@evenfoot{}\def\sectionmark##1{}\def\subsectionmark##1{}}
+
+
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+
+\ps@myheadings \pagenumbering{arabic} \onecolumn
+\if@twoside\else\raggedbottom\fi
+
+% Here the LaTeX `twocolumn.sty' is included.
+
+% twocolumn.sty 27 Jan 85
+\if@referee
+ \textwidth 30cc
+ \onecolumn
+\else
+ \twocolumn
+\fi
+\sloppy
+\flushbottom
+\marginparwidth 48pt
+% End of twocolumn.sty
+
+\def\@array[#1]#2{\setbox\@arstrutbox=\hbox{\vrule
+ height\arraystretch \ht\strutbox
+ depth\arraystretch \dp\strutbox
+ width\z@}\@mkpream{@{}#2}\edef\@preamble{\halign \noexpand\@halignto
+\bgroup \tabskip\z@ \@arstrut \@preamble \tabskip\z@ \cr}%
+\let\@startpbox\@@startpbox \let\@endpbox\@@endpbox
+ \if #1t\vtop \else \if#1b\vbox \else \vcenter \fi\fi
+ \bgroup \let\par\relax
+ \let\@sharp##\let\protect\relax \lineskip\z@\baselineskip\z@\@preamble}
+
+% Here the LaTeX `fleqn.sty' is included.
+% fleqn.sty 6 Feb 85
+\def\[{\relax\ifmmode\@badmath\else\begingroup\trivlist
+\item[]\leavevmode \hbox to\linewidth\bgroup$ \displaystyle
+\hskip\mathindent\bgroup\fi}
+\def\]{\relax\ifmmode \egroup $\hfil \egroup \endtrivlist \endgroup\else
+\@badmath \fi}
+\def\equation{\refstepcounter{equation}\trivlist \item[]\leavevmode
+\hbox to\linewidth\bgroup $ \displaystyle \hskip\mathindent}
+\def\endequation{$\hfil \displaywidth\linewidth\@eqnnum\egroup
+\endtrivlist}
+\def\eqnarray{\stepcounter{equation}\let\@currentlabel=\theequation
+\global\@eqnswtrue \global\@eqcnt\z@\tabskip\mathindent\let\\=\@eqncr
+\abovedisplayskip\topsep\ifvmode\advance\abovedisplayskip\partopsep\fi
+\belowdisplayskip\abovedisplayskip
+\belowdisplayshortskip\abovedisplayskip
+\abovedisplayshortskip\abovedisplayskip $$\halign to
+\linewidth\bgroup\@eqnsel\hskip\@centering$\displaystyle\tabskip\z@
+{##}$&\global\@eqcnt\@ne \hskip 2\arraycolsep \hfil${##}$\hfil
+&\global\@eqcnt\tw@ \hskip 2\arraycolsep $\displaystyle{##}$\hfil
+\tabskip\@centering&\llap{##}\tabskip\z@\cr}
+\def\endeqnarray{\@@eqncr\egroup
+\global\advance\c@equation\m@ne$$\global\@ignoretrue}
+\newdimen\mathindent
+% A&A does not indent equations:
+\mathindent = 0pt
+
+% End of `fleqn.sty
+
+% Redefine `abstract' environment to close with a \rule
+
+\newenvironment{abstract}{\begin{abstr}\ignorespaces}{\vskip0.5cm\hrule
+\vskip3ptplus10dd\null\end{abstr}}
+
+% Define \keywords
+
+\def\keywords{\par\vspace{12pt}\noindent{\bf Key words: }}
+
+% Define \acknowledgements
+
+\def\acknowledgements{\vspace{12pt}\noindent{\em Acknowledgements.\/ }%
+\ignorespaces}
+
+% Redefine \@cite so no square brackets are output.
+% Redefine \@biblabel so the label is not output in the bibliography.
+
+\def\@cite#1#2{{#1\if@tempswa , #2\fi}}
+\def\@biblabel#1{}
+
+\def\squareforqed{\hbox{\rlap{$\sqcap$}$\sqcup$}}
+\def\sq{\ifmmode\squareforqed\else{\unskip\nobreak\hfil
+\penalty50\hskip1em\null\nobreak\hfil\squareforqed
+\parfillskip=0pt\finalhyphendemerits=0\endgraf}\fi}
+
+\def\sun{\hbox{$\odot$}}
+\def\la{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr<\cr\sim\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr
+<\cr\sim\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr
+<\cr\sim\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+<\cr\sim\cr}}}}}
+\def\ga{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr>\cr\sim\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr
+>\cr\sim\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr
+>\cr\sim\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+>\cr\sim\cr}}}}}
+\def\degr{\hbox{$^\circ$}}
+\def\arcmin{\hbox{$^\prime$}}
+\def\arcsec{\hbox{$^{\prime\prime}$}}
+\def\utw{\smash{\rlap{\lower5pt\hbox{$\sim$}}}}
+\def\udtw{\smash{\rlap{\lower6pt\hbox{$\approx$}}}}
+\def\fd{\hbox{$.\!\!^{\rm d}$}}
+\def\fh{\hbox{$.\!\!^{\rm h}$}}
+\def\fm{\hbox{$.\!\!^{\rm m}$}}
+\def\fs{\hbox{$.\!\!^{\rm s}$}}
+\def\fdg{\hbox{$.\!\!^\circ$}}
+\def\farcm{\hbox{$.\mkern-4mu^\prime$}}
+\def\farcs{\hbox{$.\!\!^{\prime\prime}$}}
+\def\fp{\hbox{$.\!\!^{\scriptscriptstyle\rm p}$}}
+\def\cor{\mathrel{\mathchoice {\hbox{$\widehat=$}}{\hbox{$\widehat=$}}
+{\hbox{$\scriptstyle\hat=$}}
+{\hbox{$\scriptscriptstyle\hat=$}}}}
+\def\sol{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr\sim\cr<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr\sim\cr
+<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr\sim\cr
+<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+\sim\cr<\cr}}}}}
+\def\sog{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr\sim\cr>\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr\sim\cr
+>\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr
+\sim\cr>\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+\sim\cr>\cr}}}}}
+\def\lse{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr<\cr\simeq\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr
+<\cr\simeq\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr
+<\cr\simeq\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+<\cr\simeq\cr}}}}}
+\def\gse{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr>\cr\simeq\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr
+>\cr\simeq\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr
+>\cr\simeq\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+>\cr\simeq\cr}}}}}
+\def\grole{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr>\cr\noalign{\vskip-1.5pt}<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr
+>\cr\noalign{\vskip-1.5pt}<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr
+>\cr\noalign{\vskip-1pt}<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+>\cr\noalign{\vskip-0.5pt}<\cr}}}}}
+\def\leogr{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr<\cr\noalign{\vskip-1.5pt}>\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr
+<\cr\noalign{\vskip-1.5pt}>\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr
+<\cr\noalign{\vskip-1pt}>\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+<\cr\noalign{\vskip-0.5pt}>\cr}}}}}
+\def\loa{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr<\cr\approx\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr
+<\cr\approx\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr
+<\cr\approx\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+<\cr\approx\cr}}}}}
+\def\goa{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr>\cr\approx\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr
+>\cr\approx\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr
+>\cr\approx\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+>\cr\approx\cr}}}}}
+\def\diameter{{\ifmmode\mathchoice
+{\ooalign{\hfil\hbox{$\displaystyle/$}\hfil\crcr
+{\hbox{$\displaystyle\mathchar"20D$}}}}
+{\ooalign{\hfil\hbox{$\textstyle/$}\hfil\crcr
+{\hbox{$\textstyle\mathchar"20D$}}}}
+{\ooalign{\hfil\hbox{$\scriptstyle/$}\hfil\crcr
+{\hbox{$\scriptstyle\mathchar"20D$}}}}
+{\ooalign{\hfil\hbox{$\scriptscriptstyle/$}\hfil\crcr
+{\hbox{$\scriptscriptstyle\mathchar"20D$}}}}
+\else{\ooalign{\hfil/\hfil\crcr\mathhexbox20D}}%
+\fi}}
+
+
+\def\getsto{\mathrel{\mathchoice {\vcenter{\offinterlineskip
+\halign{\hfil
+$\displaystyle##$\hfil\cr\gets\cr\to\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr\gets
+\cr\to\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr\gets
+\cr\to\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+\gets\cr\to\cr}}}}}
+\def\lid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr<\cr\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr<\cr
+\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr<\cr
+\noalign{\vskip1pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+<\cr
+\noalign{\vskip0.9pt}=\cr}}}}}
+\def\gid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr>\cr\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr>\cr
+\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr>\cr
+\noalign{\vskip1pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+>\cr
+\noalign{\vskip0.9pt}=\cr}}}}}
+\def\bbbr{{\rm I\!R}} %reelle Zahlen
+\def\bbbm{{\rm I\!M}}
+\def\bbbn{{\rm I\!N}} %natuerliche Zahlen
+\def\bbbf{{\rm I\!F}}
+\def\bbbh{{\rm I\!H}}
+\def\bbbk{{\rm I\!K}}
+\def\bbbp{{\rm I\!P}}
+\def\bbbone{{\mathchoice {\rm 1\mskip-4mu l} {\rm 1\mskip-4mu l}
+{\rm 1\mskip-4.5mu l} {\rm 1\mskip-5mu l}}}
+\def\bbbc{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}}}
+\def\bbbq{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm
+Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle\rm Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle\rm Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}}}}
+\def\bbbt{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm
+T$}\hbox{\hbox to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle\rm T$}\hbox{\hbox
+to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle\rm T$}\hbox{\hbox
+to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm T$}\hbox{\hbox
+to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}}}
+\def\bbbs{{\mathchoice
+{\setbox0=\hbox{$\displaystyle \rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox
+to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle \rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox
+to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle \rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox
+to0pt{\kern0.5\wd0\vrule height0.45\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.4\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox
+to0pt{\kern0.55\wd0\vrule height0.45\ht0\hss}\box0}}}}
+\def\bbbz{{\mathchoice {\hbox{$\sf\textstyle Z\kern-0.4em Z$}}
+{\hbox{$\sf\textstyle Z\kern-0.4em Z$}}
+{\hbox{$\sf\scriptstyle Z\kern-0.3em Z$}}
+{\hbox{$\sf\scriptscriptstyle Z\kern-0.2em Z$}}}}
+\def\ts{\thinspace}
+
+\def\typeset{\vfill{\small\noindent This article was processed by the
+author using Springer-Verlag \LaTeX\ A\&A style file 1990.\par}}
+
+\def\enddocument{\par\typeset
+\@checkend{document}\clearpage\begingroup
+\if@filesw \immediate\closeout\@mainaux
+\def\global\@namedef##1##2{}\def\newlabel{\@testdef r}%
+\def\bibcite{\@testdef b}\@tempswafalse\makeatletter\input \jobname.aux
+\if@tempswa \@warning{Label(s) may have changed. Rerun to get
+cross-references right}\fi\fi\endgroup\deadcycles\z@\@@end}
+ \ No newline at end of file
diff --git a/obsolete/macros/latex209/contrib/springer/laa/read.me b/obsolete/macros/latex209/contrib/springer/laa/read.me
new file mode 100644
index 0000000000..35cfa2e7a2
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/laa/read.me
@@ -0,0 +1,14 @@
+How to proceed
+
+On this diskette or tape you find the following files:
+
+read.me (the file you are currently reading)
+aa.the the thesaurus-list. TeX it to get a paper version
+ or use it online for searching.
+laa.doc general instructions, this is the LaTeX source
+ for the documentation. Please LaTeX it if you
+ have the paper version not at hand
+laa.dem run this to get a sample output of an article
+laa.sty the LaTeX style file for use with CM-fonts (for LaTeX 2.09)
+laamt.sty the LaTeX style file for use with MT-fonts (for LaTeX 2.09)
+ \ No newline at end of file
diff --git a/obsolete/macros/latex209/contrib/springer/ljour/amsfont.sty b/obsolete/macros/latex209/contrib/springer/ljour/amsfont.sty
new file mode 100644
index 0000000000..eeff36b184
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/ljour/amsfont.sty
@@ -0,0 +1,247 @@
+% amsfont.sty
+% LaTeX substyle defining AMS fonts
+% Springer-Verlag HD
+%-----------------------------------------------------------------------
+%% This file `amsfont.sty', is a slightly changed `amsfonts.sty'
+%% which was generated from `amsfonts.doc'
+%% on 21-JUN-1991 by the docstrip.ams utility (1.0).
+%%
+%% The only changes consider the selection of {cmm}{b}{it}
+%% and {cmsy}{b}{n} fonts that are commented out.
+%%
+\expandafter\ifx\csname amsfonts.sty\endcsname\relax
+\expandafter\def\csname amsfonts.sty\endcsname{}
+\else\message{---already loaded}\endinput\fi
+\def\filename{amsfonts.sty}
+\def\fileversion{1.1} \def\filedate{21-JUN-1991}
+\immediate\write16{%
+AMS-LaTeX option `\filename' (\fileversion, \filedate)}
+%%% end of file header
+\def\RIfM@{\relax\protect\ifmmode}
+\def\boxz@{\box\z@}
+\def\setboxz@h{\setbox\z@\hbox}
+\def\wdz@{\wd\z@}
+\def\noaccents@{\def\accentclass@{0}}
+\def\Invalid@@{Invalid use of \string}
+\def\nonmatherr@#1{\err@
+ {\string#1\space allowed only in math mode}\@ehd}
+\@ifundefined{err@}{\def\err@{\@latexerr}}{}
+\new@mathgroup\msa@group
+\new@mathgroup\msb@group
+\define@mathgroup\mv@normal\msa@group{msa}{m}{n}
+\define@mathgroup\mv@normal\msb@group{msb}{m}{n}
+\define@mathgroup\mv@bold\msa@group{msa}{m}{n}
+\define@mathgroup\mv@bold\msb@group{msb}{m}{n}
+{\catcode`\"=12
+\edef\@tempa{\hexnumber@\msa@group}%
+\edef\@tempb{\hexnumber@\msb@group}%
+\xdef\ulcorner{\delimiter"4\@tempa 70\@tempa 70 }
+\xdef\urcorner{\delimiter"5\@tempa 71\@tempa 71 }
+\xdef\llcorner{\delimiter"4\@tempa 78\@tempa 78 }
+\xdef\lrcorner{\delimiter"5\@tempa 79\@tempa 79 }
+\xdef\yen {\noexpand\mathhexbox\@tempa 55 }
+\xdef\checkmark{\noexpand\mathhexbox\@tempa 58 }
+\xdef\circledR {\noexpand\mathhexbox\@tempa 72 }
+\xdef\maltese {\noexpand\mathhexbox\@tempa 7A }
+\xdef\widehat#1{\noexpand\setboxz@h{$\noexpand\m@th#1$}%
+ \noexpand\ifdim\noexpand\wdz@>\tw@ em\mathaccent"0\@tempb5B{#1}%
+ \noexpand\else\mathaccent"0362{#1}\noexpand\fi}
+\xdef\widetilde#1{\noexpand\setboxz@h{$\noexpand\m@th#1$}%
+ \noexpand\ifdim\noexpand\wdz@>\tw@ em\mathaccent"0\@tempb5D{#1}%
+ \noexpand\else\mathaccent"0365{#1}\noexpand\fi}
+\mathchardef\dabar@="0\@tempa39
+\xdef\dashrightarrow{\mathrel{\dabar@\dabar@\mathchar"0\@tempa4B}}%
+\xdef\dashleftarrow{\mathrel{\mathchar"0\@tempa4C\dabar@\dabar@}}%
+\global\let\dasharrow\dashrightarrow
+\gdef\newsymbol#1#2#3#4#5{%
+ \@ifdefinable#1{%
+ \edef\next@
+ {\ifcase #2 \or
+ \hexnumber@{\msa@group}\or
+ \hexnumber@{\msb@group}\fi}%
+ \ifx\next@\@empty
+ \err@{\Invalid@@\newsymbol}\@ehd%
+ \else
+ \global\mathchardef#1"#3\next@#4#5
+ \fi}}
+}
+\let\rightleftharpoons\undefined \newsymbol\rightleftharpoons 130A
+\let\angle\undefined \newsymbol\angle 105C
+\let\hbar\undefined \newsymbol\hbar 207E
+\let\sqsubset\undefined \newsymbol\sqsubset 1340
+\let\sqsupset\undefined \newsymbol\sqsupset 1341
+\let\mho\undefined \newsymbol\mho 2066
+\let\Box\undefined \newsymbol\Box 1203
+\let\Diamond\undefined \newsymbol\Diamond 1206
+\let\leadsto\undefined \newsymbol\leadsto 1320
+\let\lhd\undefined \newsymbol\lhd 1343
+\let\unlhd\undefined \newsymbol\unlhd 1345
+\let\rhd\undefined \newsymbol\rhd 1342
+\let\unrhd\undefined \newsymbol\unrhd 1344
+\edef\Join{\mathrel{\mathchar"0\hexnumber@\msb@group 6F\mkern-13.8mu%
+ \mathchar"0\hexnumber@\msb@group 6E}}
+\def\frak{\protect\pfrak}
+\def\pfrak{\RIfM@\expandafter\frak@\else
+ \expandafter\nonmatherr@\expandafter\frak\fi}
+\newmathalphabet\frak@
+\addtoversion{normal}\frak@{euf}{m}{n}
+\addtoversion{bold}\frak@{euf}{m}{n}
+\def\bold{\protect\pbold}
+\def\pbold{\RIfM@\expandafter\bold@\else
+ \expandafter\nonmatherr@\expandafter\bold\fi}
+\newmathalphabet*\bold@{cmr}{bx}{n}
+\def\Bbb{\protect\pBbb}
+\def\pBbb{\RIfM@\expandafter\Bbb@\else
+ \expandafter\nonmatherr@\expandafter\Bbb\fi}
+\edef\Bbb@{\noexpand\use@mathgroup
+ \expandafter\noexpand\csname =msb\endcsname
+ \msb@group}
+\def\goth{\family{euf}\selectfont\frak@}
+\newbox\Mathstrutbox@
+\setbox\Mathstrutbox@\null
+\def\Mathstrut@{\copy\Mathstrutbox@}
+\addto@hook\every@size{\setbox\z@\hbox{$\m@th($}%
+ \ht\Mathstrutbox@\ht\z@
+ \dp\Mathstrutbox@\dp\z@}
+\newbox\strutbox@
+\def\strut@{\copy\strutbox@}
+\addto@hook\every@size{%
+ \setbox\strutbox@\hbox{\lower.5\normallineskiplimit
+ \vbox{\kern-\normallineskiplimit\copy\strutbox}}}
+\def\big{\bBigg@\@ne}
+\def\Big{\bBigg@{1.5}}
+\def\bigg{\bBigg@\tw@}
+\def\Bigg{\bBigg@{2.5}}
+\def\bBigg@#1#2{%
+ {%
+ \hbox{$\left#2\vcenter to#1\big@size{}\right.%
+ \nulldelimiterspace\z@ \m@th$}}}
+\addto@hook\every@size{\setbox\z@\vbox{\hbox{$($}\kern\z@}%
+ \big@size 1.2\ht\z@}
+\newdimen\big@size
+\newdimen\ex@
+\addto@hook\every@size{\ex@.2326\fontdimen5\textfont\@ne}
+\newdimen\minaw@
+\addto@hook\every@size{\minaw@11.11128\ex@}
+\addto@hook\every@size{\jot\thr@@\ex@}
+\newmuskip\dotsspace@
+\dotsspace@1.5mu
+\def\smash{\@ifnextchar[\@xsmash{\@xsmash[tb]}}
+\def\@xsmash[#1]{\def\smash@{#1}%
+ \ifmmode\expandafter\mathpalette\expandafter\mathsm@sh\else
+ \expandafter\makesm@sh\fi}
+\def\finsm@sh{\def\mb@t{\ht\z@\z@}\def\mb@b{\dp\z@\z@}%
+ \expandafter\@tfor\expandafter\@tempa
+ \expandafter:\expandafter=\smash@\do
+ {\csname mb@\@tempa\endcsname}%
+ \leavevmode\boxz@}
+\def\default@mextra{\def\accentclass@{7}}
+\extra@def{cmm}{\skewchar#1'177}{\noaccents@}
+\extra@def{cmsy}{\skewchar#1'60}{\noaccents@}
+\new@fontshape{msa}{m}{n}{%
+ <5>msam5%
+ <6>msam6%
+ <7>msam7%
+ <8>msam8%
+ <9>msam9%
+ <10>msam10%
+ <11>msam10 at10.95pt%
+ <12>msam10 at12pt%
+ <14>msam10 at14.4pt%
+ <17>msam10 at17.28pt%
+ <20>msam10 at20.74pt%
+ <25>msam10 at24.88pt}{}
+\extra@def{msa}{}{}
+\new@fontshape{msb}{m}{n}{%
+ <5>msbm5%
+ <6>msbm6%
+ <7>msbm7%
+ <8>msbm8%
+ <9>msbm9%
+ <10>msbm10%
+ <11>msbm10 at10.95pt%
+ <12>msbm10 at12pt%
+ <14>msbm10 at14.4pt%
+ <17>msbm10 at17.28pt%
+ <20>msbm10 at20.74pt%
+ <25>msbm10 at24.88pt}{}
+\extra@def{msb}{}{\noaccents@}
+\new@fontshape{euf}{m}{n}{%
+ <5>eufm5%
+ <6>eufm6%
+ <7>eufm7%
+ <8>eufm8%
+ <9>eufm9%
+ <10>eufm10%
+ <11>eufm10 at10.95pt%
+ <12>eufm10 at12pt%
+ <14>eufm10 at14.4pt%
+ <17>eufm10 at17.28pt%
+ <20>eufm10 at20.74pt%
+ <25>eufm10 at24.88pt}{}
+%\new@fontshape{euf}{b}{n}{%
+% <5>eufb5%
+% <6>eufb6%
+% <7>eufb7%
+% <8>eufb8%
+% <9>eufb9%
+% <10>eufb10%
+% <11>eufb10 at10.95pt%
+% <12>eufb10 at12pt%
+% <14>eufb14%
+% <17>eufb14 at17.28pt%
+% <20>eufb14 at20.74pt%
+% <25>eufb14 at24.88pt}{}
+\extra@def{euf}{\hyphenchar#1\m@ne
+ \@tempdima\fontdimen2#1%
+ \fontdimen3#1.4\@tempdima
+ \fontdimen4#1.3\@tempdima}
+ {\noaccents@}
+%\new@fontshape{cmm}{b}{it}{%
+% <5>cmmib5%
+% <6>cmmib6%
+% <7>cmmib7%
+% <8>cmmib8%
+% <9>cmmib9%
+% <10>cmmib10%
+% <11>cmmib10 at10.95pt%
+% <12>cmmib10 at12pt%
+% <14>cmmib10 at14.4pt%
+% <17>cmmib10 at17.28pt%
+% <20>cmmib10 at20.74pt%
+% <25>cmmib10 at24.88pt%
+% }{}
+%\new@fontshape{cmsy}{b}{n}{%
+% <5>cmbsy5%
+% <6>cmbsy6%
+% <7>cmbsy7%
+% <8>cmbsy8%
+% <9>cmbsy9%
+% <10>cmbsy10%
+% <11>cmbsy10 at10.95pt%
+% <12>cmbsy10 at12pt%
+% <14>cmbsy10 at14.4pt%
+% <17>cmbsy10 at17.28pt%
+% <20>cmbsy10 at20.74pt%
+% <25>cmbsy10 at24.88pt%
+% }{}
+\def\unbracefonts@{\let\math@bgroup\@empty\let\math@egroup\@empty}
+\def\operator@font{\mathgroup\z@}
+%% \CharacterTable
+%% {Upper-case \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
+%% Lower-case \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
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+\endinput
+%%
+%% End of file `amsfont.sty'.
diff --git a/obsolete/macros/latex209/contrib/springer/ljour/amssymb.sty b/obsolete/macros/latex209/contrib/springer/ljour/amssymb.sty
new file mode 100644
index 0000000000..361defb76c
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/ljour/amssymb.sty
@@ -0,0 +1,265 @@
+%% This is file `amssymb.sty' generated from `amssymb.doc'
+%% on 21-JUN-1991 by the docstrip.ams utility (1.0).
+%%
+%%@texfile{%
+%% filename="amssymb.sty",
+%% version="1.1",
+%% date="21-JUN-1991",
+%% filetype="AMS-LaTeX: option",
+%% copyright="Copyright (C) American Mathematical Society, all rights
+%% reserved. Copying of this file is authorized only if either:
+%% (1) you make absolutely no changes to your copy, including name;
+%% OR (2) if you do make changes, you first rename it to some other
+%% name.",
+%% author="American Mathematical Society",
+%% address="American Mathematical Society,
+%% Technical Support Group,
+%% P. O. Box 6248,
+%% Providence, RI 02940,
+%% USA",
+%% telephone="401-455-4080 or (in the USA) 800-321-4AMS",
+%% email="Internet: Tech-Support@Math.AMS.com",
+%% checksumtype="line count",
+%% checksum="265",
+%% codetable="ISO/ASCII",
+%% keywords="latex, amslatex, ams-latex, math symbol, amsfonts, msam,
+%% msbm",
+%% abstract="This file is part of the AMS-\LaTeX{} package, ver. 1.1.
+%% It is a \LaTeX{} option that defines symbol names for all the math
+%% symbols in the fonts MSAM and MSBM, of the AMSFonts (2.0+)
+%% package."
+%%}
+\expandafter\ifx\csname amssymb.sty\endcsname\relax
+\expandafter\def\csname amssymb.sty\endcsname{}
+\else\message{---already loaded}\endinput\fi
+\def\filename{amssymb.sty}
+\def\fileversion{1.1} \def\filedate{21-JUN-1991}
+\immediate\write16{%
+AMS-LaTeX option `\filename' (\fileversion, \filedate)}
+%%% end of file header
+\@ifundefined{amsfonts.sty}{\input{amsfonts.sty}}{}%
+\newsymbol\boxdot 1200
+\newsymbol\boxplus 1201
+\newsymbol\boxtimes 1202
+\newsymbol\square 1003
+\newsymbol\blacksquare 1004
+\newsymbol\centerdot 1205
+\newsymbol\lozenge 1006
+\newsymbol\blacklozenge 1007
+\newsymbol\circlearrowright 1308
+\newsymbol\circlearrowleft 1309
+\let\rightleftharpoons\undefined
+\newsymbol\rightleftharpoons 130A
+\newsymbol\leftrightharpoons 130B
+\newsymbol\boxminus 120C
+\newsymbol\Vdash 130D
+\newsymbol\Vvdash 130E
+\newsymbol\vDash 130F
+\newsymbol\twoheadrightarrow 1310
+\newsymbol\twoheadleftarrow 1311
+\newsymbol\leftleftarrows 1312
+\newsymbol\rightrightarrows 1313
+\newsymbol\upuparrows 1314
+\newsymbol\downdownarrows 1315
+\newsymbol\upharpoonright 1316
+ \let\restriction\upharpoonright
+\newsymbol\downharpoonright 1317
+\newsymbol\upharpoonleft 1318
+\newsymbol\downharpoonleft 1319
+\newsymbol\rightarrowtail 131A
+\newsymbol\leftarrowtail 131B
+\newsymbol\leftrightarrows 131C
+\newsymbol\rightleftarrows 131D
+\newsymbol\Lsh 131E
+\newsymbol\Rsh 131F
+\newsymbol\rightsquigarrow 1320
+\newsymbol\leftrightsquigarrow 1321
+\newsymbol\looparrowleft 1322
+\newsymbol\looparrowright 1323
+\newsymbol\circeq 1324
+\newsymbol\succsim 1325
+\newsymbol\gtrsim 1326
+\newsymbol\gtrapprox 1327
+\newsymbol\multimap 1328
+\newsymbol\therefore 1329
+\newsymbol\because 132A
+\newsymbol\doteqdot 132B
+ \let\Doteq\doteqdot
+\newsymbol\triangleq 132C
+\newsymbol\precsim 132D
+\newsymbol\lesssim 132E
+\newsymbol\lessapprox 132F
+\newsymbol\eqslantless 1330
+\newsymbol\eqslantgtr 1331
+\newsymbol\curlyeqprec 1332
+\newsymbol\curlyeqsucc 1333
+\newsymbol\preccurlyeq 1334
+\newsymbol\leqq 1335
+\newsymbol\leqslant 1336
+\newsymbol\lessgtr 1337
+\newsymbol\backprime 1038
+\newsymbol\risingdotseq 133A
+\newsymbol\fallingdotseq 133B
+\newsymbol\succcurlyeq 133C
+\newsymbol\geqq 133D
+\newsymbol\geqslant 133E
+\newsymbol\gtrless 133F
+\newsymbol\vartriangleright 1342
+\newsymbol\vartriangleleft 1343
+\newsymbol\trianglerighteq 1344
+\newsymbol\trianglelefteq 1345
+\newsymbol\bigstar 1046
+\newsymbol\between 1347
+\newsymbol\blacktriangledown 1048
+\newsymbol\blacktriangleright 1349
+\newsymbol\blacktriangleleft 134A
+\newsymbol\vartriangle 134D
+\newsymbol\blacktriangle 104E
+\newsymbol\triangledown 104F
+\newsymbol\eqcirc 1350
+\newsymbol\lesseqgtr 1351
+\newsymbol\gtreqless 1352
+\newsymbol\lesseqqgtr 1353
+\newsymbol\gtreqqless 1354
+\newsymbol\Rrightarrow 1356
+\newsymbol\Lleftarrow 1357
+\newsymbol\veebar 1259
+\newsymbol\barwedge 125A
+\newsymbol\doublebarwedge 125B
+\newsymbol\measuredangle 105D
+\newsymbol\sphericalangle 105E
+\newsymbol\varpropto 135F
+\newsymbol\smallsmile 1360
+\newsymbol\smallfrown 1361
+\newsymbol\Subset 1362
+\newsymbol\Supset 1363
+\newsymbol\Cup 1264
+ \let\doublecup\Cup
+\newsymbol\Cap 1265
+ \let\doublecap\Cap
+\newsymbol\curlywedge 1266
+\newsymbol\curlyvee 1267
+\newsymbol\leftthreetimes 1268
+\newsymbol\rightthreetimes 1269
+\newsymbol\subseteqq 136A
+\newsymbol\supseteqq 136B
+\newsymbol\bumpeq 136C
+\newsymbol\Bumpeq 136D
+\newsymbol\lll 136E
+ \let\llless\lll
+\newsymbol\ggg 136F
+ \let\gggtr\ggg
+\newsymbol\circledS 1073
+\newsymbol\pitchfork 1374
+\newsymbol\dotplus 1275
+\newsymbol\backsim 1376
+\newsymbol\backsimeq 1377
+\newsymbol\complement 107B
+\newsymbol\intercal 127C
+\newsymbol\circledcirc 127D
+\newsymbol\circledast 127E
+\newsymbol\circleddash 127F
+\newsymbol\lvertneqq 2300
+\newsymbol\gvertneqq 2301
+\newsymbol\nleq 2302
+\newsymbol\ngeq 2303
+\newsymbol\nless 2304
+\newsymbol\ngtr 2305
+\newsymbol\nprec 2306
+\newsymbol\nsucc 2307
+\newsymbol\lneqq 2308
+\newsymbol\gneqq 2309
+\newsymbol\nleqslant 230A
+\newsymbol\ngeqslant 230B
+\newsymbol\lneq 230C
+\newsymbol\gneq 230D
+\newsymbol\npreceq 230E
+\newsymbol\nsucceq 230F
+\newsymbol\precnsim 2310
+\newsymbol\succnsim 2311
+\newsymbol\lnsim 2312
+\newsymbol\gnsim 2313
+\newsymbol\nleqq 2314
+\newsymbol\ngeqq 2315
+\newsymbol\precneqq 2316
+\newsymbol\succneqq 2317
+\newsymbol\precnapprox 2318
+\newsymbol\succnapprox 2319
+\newsymbol\lnapprox 231A
+\newsymbol\gnapprox 231B
+\newsymbol\nsim 231C
+\newsymbol\ncong 231D
+\newsymbol\varsubsetneq 2320
+\newsymbol\varsupsetneq 2321
+\newsymbol\nsubseteqq 2322
+\newsymbol\nsupseteqq 2323
+\newsymbol\subsetneqq 2324
+\newsymbol\supsetneqq 2325
+\newsymbol\varsubsetneqq 2326
+\newsymbol\varsupsetneqq 2327
+\newsymbol\subsetneq 2328
+\newsymbol\supsetneq 2329
+\newsymbol\nsubseteq 232A
+\newsymbol\nsupseteq 232B
+\newsymbol\nparallel 232C
+\newsymbol\nmid 232D
+\newsymbol\nshortmid 232E
+\newsymbol\nshortparallel 232F
+\newsymbol\nvdash 2330
+\newsymbol\nVdash 2331
+\newsymbol\nvDash 2332
+\newsymbol\nVDash 2333
+\newsymbol\ntrianglerighteq 2334
+\newsymbol\ntrianglelefteq 2335
+\newsymbol\ntriangleleft 2336
+\newsymbol\ntriangleright 2337
+\newsymbol\nleftarrow 2338
+\newsymbol\nrightarrow 2339
+\newsymbol\nLeftarrow 233A
+\newsymbol\nRightarrow 233B
+\newsymbol\nLeftrightarrow 233C
+\newsymbol\nleftrightarrow 233D
+\newsymbol\divideontimes 223E
+\newsymbol\varnothing 203F
+\newsymbol\nexists 2040
+\newsymbol\eth 2067
+\newsymbol\eqsim 2368
+\newsymbol\beth 2069
+\newsymbol\gimel 206A
+\newsymbol\daleth 206B
+\newsymbol\lessdot 236C
+\newsymbol\gtrdot 236D
+\newsymbol\ltimes 226E
+\newsymbol\rtimes 226F
+\newsymbol\shortmid 2370
+\newsymbol\shortparallel 2371
+\newsymbol\smallsetminus 2272
+\newsymbol\thicksim 2373
+\newsymbol\thickapprox 2374
+\newsymbol\approxeq 2375
+\newsymbol\succapprox 2376
+\newsymbol\precapprox 2377
+\newsymbol\curvearrowleft 2378
+\newsymbol\curvearrowright 2379
+\newsymbol\digamma 207A
+\newsymbol\varkappa 207B
+\newsymbol\hslash 207D
+\newsymbol\backepsilon 237F
+%% \CharacterTable
+%% {Upper-case \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
+%% Lower-case \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
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+\endinput
+%%
+%% End of file `amssymb.sty'.
diff --git a/obsolete/macros/latex209/contrib/springer/ljour/cljour1.ini b/obsolete/macros/latex209/contrib/springer/ljour/cljour1.ini
new file mode 100644
index 0000000000..cab23aaa84
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/ljour/cljour1.ini
@@ -0,0 +1,13 @@
+% cljour1.ini
+% LaTeX package LJour1 1.0: initialization file of format with CM fonts
+% (c) Springer-Verlag HD
+%----------------------------------------------------------------------
+\let\FONTS=C
+\input flplain
+\input hyphen
+\makeatletter
+\input ljour1.mac
+\input amsfont.sty
+\makeatother
+\def\springerstylefile{cljour1}
+\dump
diff --git a/obsolete/macros/latex209/contrib/springer/ljour/flplain.tex b/obsolete/macros/latex209/contrib/springer/ljour/flplain.tex
new file mode 100644
index 0000000000..047ebc68dc
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/ljour/flplain.tex
@@ -0,0 +1,20 @@
+% flplain.tex
+% LaTeX initialization utility file
+% (c) Springer-Verlag HD
+%----------------------------------------------------------------------
+% This file forces the first sub-\input of lplain to sleep
+% (this is normally the hyphenation which can be read in later)
+% and the second to call for lfonts.new then normal conditions
+% are restored.
+%
+\catcode`\{=1 % left brace is begin-group character
+\catcode`\}=2 % right brace is end-group character
+\catcode`\#=6 % hash mark is macro parameter character
+%
+\let\x=\input
+\def\y#1 {\let\input\x \let\x=\undefined \input lfonts.new}
+\def\input#1 {\let\input=\y \let\y=\undefinded}
+%
+\x lplain
+%
+\endinput
diff --git a/obsolete/macros/latex209/contrib/springer/ljour/fontdef.tex b/obsolete/macros/latex209/contrib/springer/ljour/fontdef.tex
new file mode 100644
index 0000000000..7b13700021
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/ljour/fontdef.tex
@@ -0,0 +1,1261 @@
+% fontdef.tex
+% LaTeX NFSS font definition part for CM or PS fonts
+% (c) Springer-Verlag HD
+%----------------------------------------------------------------------
+\if C\FONTS
+%% This is file `fontdef.cm'
+%% it is part of the Springer Verlag LaTeX support for use
+%% with the New Font Selection Scheme.
+%% From original copyright (C) 1989,1990 by Frank Mittelbach, Rainer Schoepf.
+%% changed January 20th 1993 by Springer Verlag
+%% It contains the NFSS-file 'fontdef.ori' with
+%%
+%% \def\fileversion{v1.1k}
+%% \def\filedate{91/11/26}
+%% \def\docdate {91/11/26}
+%%
+%% and only a few changes to the fonts that are selected.
+
+%% Error Reports in case of UNCHANGED versions to
+%%
+%% Springer Verlag
+%% Dept. New Technologies/Product Development
+%% Tiergartenstrasse 17
+%% D-W-6900 Heidelberg
+%% FRG
+
+\def\fileversion{v1.0}
+\def\filedate{93/01/20}
+\def\docdate {91/11/26}
+
+%% \CheckSum{127}
+%% \CharacterTable
+%% {Upper-case \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
+%% Lower-case \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
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%
+%% This file contains the external font information needed to load
+%% the standard families of the computer modern fonts
+%% designed by Donald E. Knuth.
+%% This means that some of the font shapes are not available in
+%% all sizes; in this case some other size (or other font) is
+%% substituted instead.
+%%
+%% For a larger collection of fonts see the file `fontdef.max'.
+%%
+%% You should *not* change this file! If you want to change the
+%% fonts/shapes you should create a copy of it named `fontdef.tex'
+%% and edit this one according to your needs!
+%%
+%% The format of a font/shape definition is as follows:
+%%
+%% \new@fontshape{family}{series}{shape}%
+%% {<size_1>external_font_1%
+%% <size_2>external_font_2%
+%% ...
+%% <size_n>external_font_n}{}
+%%
+%% (Don't forget the final {} !)
+%%
+%% family : Name of font family like cmr etc.
+%% series : Weight and width of the font in 1 to 4 letter
+%% abbreviations. A table is given in the tugboat article
+%% distributed together with this file.
+%% shape : Either n (normal), it (italic), sc (small caps), sl
+%% (slanted) or u (upright italic).
+%% <size_i> : The size in printer points. Standard LaTeX supports 5,
+%% 6, 7, 8, 9, 10, 11, 12, 14, 17, 20, 25 corresponding to
+%% \tiny, \scriptsize and so on. The angle brackets are
+%% part of the syntax!
+%%
+%% external_font_i : The name of the external font in your font
+%% library. If the font/shape is not available in a
+%% certain size you may use the name of a replacement
+%% font. E.g. one can substitute cmr5 for cmti.. which is
+%% only available in size 7 and higher. If you put a `1'
+%% in front of the name of the font a warning message will
+%% be produced (saying that the font has been substituted
+%% for the real one) when you use it for the first time.
+%% Below you can find examples of this mechanism.
+%%
+%% For font/shape combinations which aren't available at all like
+%% computer modern sans serif small caps a suitable default will be
+%% used automatically unless you specify a substitution yourself with
+%% the \subst@fontshape command.
+%%
+%% It syntax is as follows:
+%%
+%% \subst@fontshape{family}{series}{shape}%
+%% {subst_family}{subst_series}{subst_shape}
+%%
+%% This might be necessary if the automatically selected default does
+%% not match your needs. For example: the font shape choosen instead
+%% of `computer modern sans serif small caps' would be `computer
+%% modern sans serif normal'. With a \subst@fontshape command you can
+%% change this, for example, to `computer modern roman small caps' as
+%% we did below. (If you don't like this remove this line in your
+%% *copy* of this file.)
+%%
+%% Finally, for every family there is an \extra@def macro. It defines
+%% special action to be done at load time for every font of the family.
+%% In most cases you can simply write
+%%
+%% \extra@def{family}{}{}
+%%
+%% In this file it is used to suppress hyphenation for typewriter
+%% fonts (see \extra@def{cmtt}... below) and to set the \skewchar
+%% for math fonts (see \extra@def{cmm}... and \extra@def{cmsy}...).
+%%
+%%
+\newlinechar`\^^J
+\immediate\write\sixt@@n{File: `fontdef.cm' \space
+ \fileversion\space <\filedate> (Springer Verlag)}
+\immediate\write\sixt@@n{English Documentation
+ \@spaces\space <\docdate> (FMi and RmS)}
+\immediate\write\sixt@@n
+ {^^JIncludes Font/Shape Definitions for:^^J
+ ^^J\@spaces Computer Modern Standard Fonts%
+ .^^J}
+\immediate\write\sixt@@n
+ {********************************************************************}
+\immediate\write\sixt@@n
+ {* Customized by Springer Verlag to change the default fonts.}
+\immediate\write\sixt@@n
+ {********************************************************************}
+%%
+%% Please don't change the next lines unless you know exactly what you
+%% are doing.
+%%
+\def\default@shape{n}
+\def\default@series{m}
+\def\default@family{cmr}
+\def\default@errfont{cmsy10}
+%%
+%% Again, this is doubly dangerous bent.
+%%
+\fontfamily\default@family
+\fontseries\default@series
+\fontshape\default@shape
+%%
+%% And here is your playground:
+%%
+\new@fontshape{cmr}{m}{n}{%
+ <5>cmr5%
+ <6>cmr6%
+ <7>cmr7%
+ <8>cmr8%
+ <9>cmr9%
+ <10>cmr10%
+ <11>cmr10 at10.95pt%
+ <12>cmr12%
+ <14>cmr12 at14.4pt%
+ <17>cmr17%
+ <20>cmr17 at20.736pt%
+ <25>cmr17 at24.8832pt}{}
+\extra@def{cmr}{}{}
+\new@fontshape{cmr}{m}{sl}{%
+ <5>1cmr5%
+ <6>1cmr6%
+ <7>1cmr7%
+ <8>cmsl8%
+ <9>cmsl9%
+ <10>cmsl10%
+ <11>cmsl10 at10.95pt%
+ <12>cmsl12%
+ <14>cmsl12 at14.4pt%
+ <17>cmsl12 at17.28pt%
+ <20>cmsl12 at20.74pt%
+ <25>cmsl12 at24.88pt%
+ }{}
+
+\new@fontshape{cmr}{m}{it}{%
+ <5>1cmr5%
+ <6>1cmr6%
+ <7>cmti7%
+ <8>cmti8%
+ <9>cmti9%
+ <10>cmti10%
+ <11>cmti10 at10.95pt%
+ <12>cmti12%
+ <14>cmti12 at14.4pt%
+ <17>cmti12 at17.28pt%
+ <20>cmti12 at20.74pt%
+ <25>cmti12 at24.88pt%
+ }{}
+
+\new@fontshape{cmr}{m}{sc}{%
+ <5>1cmr5%
+ <6>1cmr6%
+ <7>1cmr7%
+ <8>cmcsc10 at8pt%
+ <9>cmcsc10 at9pt%
+ <10>cmcsc10%
+ <11>cmcsc10 at10.95pt%
+ <12>cmcsc10 at12pt%
+ <14>cmcsc10 at14.4pt%
+ <17>cmcsc10 at17.28pt%
+ <20>cmcsc10 at20.74pt%
+ <25>cmcsc10 at24.88pt%
+ }{}
+%%
+%% Warning: please note that the upright shape below is used
+%% for the \pounds symbol of LaTeX. So this font
+%% definition shouldn't be removed.
+%%
+% If cmu below 10pt is not available we substitute
+% cmti as far as possible (sizes 7, 8, 9). This is
+% done because cmu is used mainly for producing the
+% the \pound symbol and it is better to get a slanted
+% (or bigger) pound then to get a $ sign in such situations.
+%%
+\new@fontshape{cmr}{m}{u}{%
+ <5>1cmti7%
+ <6>1cmti7%
+ <7>1cmti7%
+ <8>1cmti8%
+ <9>1cmti9%
+ <10>cmu10%
+ <11>cmu10 at10.95pt%
+ <12>cmu10 at12pt%
+ <14>cmu10 at14.4pt%
+ <17>cmu10 at17.28pt%
+ <20>cmu10 at20.74pt%
+ <25>cmu10 at24.88pt%
+ }{}
+
+%%%%%%%% bold series
+
+\new@fontshape{cmr}{b}{n}{%
+ <5>1cmbx5%
+ <6>1cmbx6%
+ <7>1cmbx7%
+ <8>1cmbx8%
+ <9>1cmbx9%
+ <10>cmb10%
+ <11>cmb10 at10.95pt%
+ <12>cmb10 at12pt%
+ <14>cmb10 at14.4pt%
+ <17>cmb10 at17.28pt%
+ <20>cmb10 at20.736pt%
+ <25>cmb10 at24.8832pt%
+ }{}
+
+%%%%%%%%% bold extended series
+
+\new@fontshape{cmr}{bx}{n}{%
+ <5>cmbx5%
+ <6>cmbx6%
+ <7>cmbx7%
+ <8>cmbx8%
+ <9>cmbx9%
+ <10>cmbx10%
+ <11>cmbx10 at10.95pt%
+ <12>cmbx12%
+ <14>cmbx12 at14.4pt%
+ <17>cmbx12 at17.28pt%
+ <20>cmbx12 at20.74pt%
+ <25>cmbx12 at24.88pt%
+ }{}
+
+\new@fontshape{cmr}{bx}{sl}{%
+ <5>1cmbx5%
+ <6>1cmbx6%
+ <7>1cmbx7%
+ <8>1cmbx8%
+ <9>1cmbx9%
+ <10>cmbxsl10%
+ <11>cmbxsl10 at10.95pt%
+ <12>cmbxsl10 at12pt%
+ <14>cmbxsl10 at14.4pt%
+ <17>cmbxsl10 at17.28pt%
+ <20>cmbxsl10 at20.74pt%
+ <25>cmbxsl10 at24.88pt%
+ }{}
+
+\new@fontshape{cmr}{bx}{it}{%
+ <5>1cmbx5%
+ <6>1cmbx6%
+ <7>1cmbx7%
+ <8>1cmbx8%
+ <9>1cmbx9%
+ <10>cmbxti10%
+ <11>cmbxti10 at10.95pt%
+ <12>cmbxti10 at12pt%
+ <14>cmbxti10 at14.4pt%
+ <17>cmbxti10 at17.28pt%
+ <20>cmbxti10 at20.74pt%
+ <25>cmbxti10 at24.88pt%
+ }{}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Sans serif font shapes
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\new@fontshape{cmss}{m}{n}{%
+ <5>cmss10 at5pt%
+ <6>cmss10 at6pt%
+ <7>cmss10 at7pt%
+ <8>cmss8%
+ <9>cmss9%
+ <10>cmss10%
+ <11>cmss10 at10.95pt%
+ <12>cmss12%
+ <14>cmss12 at14.4pt%
+ <17>cmss17%
+ <20>cmss17 at20.74pt%
+ <25>cmss17 at24.88pt%
+ }{}
+
+
+\subst@fontshape{cmss}{m}{it}{cmss}{m}{sl}
+
+\new@fontshape{cmss}{m}{sl}{%
+ <5>1cmr5%
+ <6>1cmr6%
+ <7>1cmr7%
+ <8>cmssi8%
+ <9>cmssi9%
+ <10>cmssi10%
+ <11>cmssi10 at10.95pt%
+ <12>cmssi12%
+ <14>cmssi12 at14.4pt%
+ <17>cmssi17%
+ <20>cmssi17 at20.74pt%
+ <25>cmssi17 at24.88pt%
+ }{}
+
+%%%%%%% Font/shape undefined, therefore substituted
+
+\subst@fontshape{cmss}{m}{sc}{cmr}{m}{sc}
+
+%%%%%%%% semibold condensed series
+
+\new@fontshape{cmss}{sbc}{n}{%
+ <5>1cmr5%
+ <6>1cmr6%
+ <7>1cmr7%
+ <8>1cmss8%
+ <9>1cmss9%
+ <10>cmssdc10%
+ <11>cmssdc10 at10.95pt%
+ <12>cmssdc10 at12pt%
+ <14>cmssdc10 at14.4pt%
+ <17>cmssdc10 at17.28pt%
+ <20>cmssdc10 at20.74pt%
+ <25>cmssdc10 at24.88pt%
+ }{}
+
+%%%%%%%%% bold extended series
+
+\new@fontshape{cmss}{bx}{n}{%
+ <5>1cmbx5%
+ <6>1cmbx6%
+ <7>1cmbx7%
+ <8>1cmbx8%
+ <9>1cmbx9%
+ <10>cmssbx10%
+ <11>cmssbx10 at10.95pt%
+ <12>cmssbx10 at12pt%
+ <14>cmssbx10 at14.4pt%
+ <17>cmssbx10 at17.28pt%
+ <20>cmssbx10 at20.74pt%
+ <25>cmssbx10 at24.88pt%
+ }{}
+
+\extra@def{cmss}{}{}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Typewriter font shapes
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\new@fontshape{cmtt}{m}{n}{%
+ <5>1cmr5%
+ <6>1cmr6%
+ <7>1cmr7%
+ <8>cmtt8%
+ <9>cmtt9%
+ <10>cmtt10%
+ <11>cmtt10 at10.95pt%
+ <12>cmtt12%
+ <14>cmtt12 at14.4pt%
+ <17>cmtt12 at17.28pt%
+ <20>cmtt12 at20.74pt%
+ <25>cmtt12 at24.88pt%
+ }{}
+
+\new@fontshape{cmtt}{m}{it}{%
+ <5>1cmr5%
+ <6>1cmr6%
+ <7>1cmr7%
+ <8>1cmtt8%
+ <9>1cmtt9%
+ <10>cmitt10%
+ <11>cmitt10 at10.95pt%
+ <12>cmitt10 at12pt%
+ <14>cmitt10 at14.4pt%
+ <17>cmitt10 at17.28pt%
+ <20>cmitt10 at20.74pt%
+ <25>cmitt10 at24.88pt%
+ }{}
+
+\new@fontshape{cmtt}{m}{sl}{%
+ <5>1cmr5%
+ <6>1cmr6%
+ <7>1cmr7%
+ <8>1cmtt8%
+ <9>1cmtt9%
+ <10>cmsltt10%
+ <11>cmsltt10 at10.95pt%
+ <12>cmsltt10 at12pt%
+ <14>cmsltt10 at14.4pt%
+ <17>cmsltt10 at17.28pt%
+ <20>cmsltt10 at20.74pt%
+ <25>cmsltt10 at24.88pt%
+ }{}
+
+\new@fontshape{cmtt}{m}{sc}{%
+ <5>1cmr5%
+ <6>1cmr6%
+ <7>1cmr7%
+ <8>1cmtt8%
+ <9>1cmtt9%
+ <10>cmtcsc10%
+ <11>cmtcsc10 at10.95pt%
+ <12>cmtcsc10 at12pt%
+ <14>cmtcsc10 at14.4pt%
+ <17>cmtcsc10 at17.28pt%
+ <20>cmtcsc10 at20.74pt%
+ <25>cmtcsc10 at24.88pt%
+ }{}
+
+\extra@def{cmtt}{\hyphenchar #1\m@ne}{}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Math italic font shapes
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\new@fontshape{cmm}{m}{it}{%
+ <5>cmmi5%
+ <6>cmmi6%
+ <7>cmmi7%
+ <8>cmmi8%
+ <9>cmmi9%
+ <10>cmmi10%
+ <11>cmmi10 at10.95pt%
+ <12>cmmi12%
+ <14>cmmi12 at14.4pt%
+ <17>cmmi12 at17.28pt%
+ <20>cmmi12 at20.74pt%
+ <25>cmmi12 at24.88pt%
+ }{}
+
+\new@fontshape{cmm}{b}{it}{%
+ <5>cmmib10 at5pt%
+ <6>cmmib10 at6pt% 1cmmi6%
+ <7>cmmib10 at7pt%
+ <8>cmmib10 at8pt% 1cmmi8%
+ <9>1cmmi9%
+ <10>cmmib10%
+ <11>cmmib10 at10.95pt%
+ <12>cmmib10 at12pt%
+ <14>cmmib10 at14.4pt%
+ <17>cmmib10 at17.28pt%
+ <20>cmmib10 at20.74pt%
+ <25>cmmib10 at24.88pt%
+ }{}
+
+\extra@def{cmm}{\skewchar#1'177}{}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Math symbol font shapes
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\new@fontshape{cmsy}{m}{n}{%
+ <5>cmsy5%
+ <6>cmsy6%
+ <7>cmsy7%
+ <8>cmsy8%
+ <9>cmsy9%
+ <10>cmsy10%
+ <11>cmsy10 at10.95pt%
+ <12>cmsy10 at12pt%
+ <14>cmsy10 at14.4pt%
+ <17>cmsy10 at17.28pt%
+ <20>cmsy10 at20.74pt%
+ <25>cmsy10 at24.88pt%
+ }{}
+
+\new@fontshape{cmsy}{b}{n}{%
+ <5>cmbsy10 at5pt%
+ <6>cmbsy10 at6pt%
+ <7>cmbsy10 at7pt%
+ <8>cmbsy10 at8pt%
+ <9>1cmsy9%
+ <10>cmbsy10%
+ <11>cmbsy10 at10.95pt%
+ <12>cmbsy10 at12pt%
+ <14>cmbsy10 at14.4pt%
+ <17>cmbsy10 at17.28pt%
+ <20>cmbsy10 at20.74pt%
+ <25>cmbsy10 at24.88pt%
+ }{}
+
+\extra@def{cmsy}{\skewchar#1'60}{}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% LaTeX symbol font shapes
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\new@fontshape{lasy}{m}{n}{%
+ <5>lasy5%
+ <6>lasy6%
+ <7>lasy7%
+ <8>lasy8%
+ <9>lasy9%
+ <10>lasy10%
+ <11>lasy10 at10.95pt%
+ <12>lasy10 at12pt%
+ <14>lasy10 at14.4pt%
+ <17>lasy10 at17.28pt%
+ <20>lasy10 at20.74pt%
+ <25>lasy10 at24.88pt%
+ }{}
+
+\new@fontshape{lasy}{b}{n}{%
+ <5>lasyb10 at5pt%
+ <6>lasyb10 at6pt%
+ <7>lasyb10 at7pt%
+ <8>lasyb10 at8pt%
+ <9>lasyb10 at9pt%
+ <10>lasyb10%
+ <11>lasyb10 at10.95pt%
+ <12>lasyb10 at12pt%
+ <14>lasyb10 at14.4pt%
+ <17>lasyb10 at17.28pt%
+ <20>lasyb10 at20.74pt%
+ <25>lasyb10 at24.88pt%
+ }{}
+
+\extra@def{lasy}{}{}
+\else
+
+%%
+%% This is file `fontdef.ps'
+%% it is part of the Springer Verlag LaTeX support for use
+%% with the New Font Selection Scheme.
+%% From original copyright (C) 1989,1990 by Frank Mittelbach, Rainer Schoepf.
+%% changed January 20th 1993 by Springer Verlag
+%%
+%% It provides font selection including PostScript fonts
+%% using the NFSS from Frank Mittelbach, Rainer Schoepf.
+
+%% Error Reports in case of UNCHANGED versions to
+%%
+%% Springer Verlag
+%% Dept. New Technologies/Product Development
+%% Tiergartenstrasse 17
+%% D-W-6900 Heidelberg
+%% FRG
+
+\def\fileversion{v1.0}
+\def\filedate{93/01/20}
+
+%% \CheckSum{126}
+%% \CharacterTable
+%% {Upper-case \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
+%% Lower-case \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
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%
+%% This file contains the external font information needed to load
+%% the standard families of the computer modern fonts
+%% designed by Donald E. Knuth.
+%% This means that some of the font shapes are not available in
+%% all sizes; in this case some other size (or other font) is
+%% substituted instead.
+%%
+%% For a larger collection of fonts see the file `fontdef.max'.
+%%
+%% You should *not* change this file! If you want to change the
+%% fonts/shapes you should create a copy of it named `fontdef.tex'
+%% and edit this one according to your needs!
+%%
+%% The format of a font/shape definition is as follows:
+%%
+%% \new@fontshape{family}{series}{shape}%
+%% {<size_1>external_font_1%
+%% <size_2>external_font_2%
+%% ...
+%% <size_n>external_font_n}{}
+%%
+%% (Don't forget the final {} !)
+%%
+%% family : Name of font family like cmr etc.
+%% series : Weight and width of the font in 1 to 4 letter
+%% abbreviations. A table is given in the tugboat article
+%% distributed together with this file.
+%% shape : Either n (normal), it (italic), sc (small caps), sl
+%% (slanted) or u (upright italic).
+%% <size_i> : The size in printer points. Standard LaTeX supports 5,
+%% 6, 7, 8, 9, 10, 11, 12, 14, 17, 20, 25 corresponding to
+%% \tiny, \scriptsize and so on. The angle brackets are
+%% part of the syntax!
+%%
+%% external_font_i : The name of the external font in your font
+%% library. If the font/shape is not available in a
+%% certain size you may use the name of a replacement
+%% font. E.g. one can substitute cmr5 for cmti.. which is
+%% only available in size 7 and higher. If you put a `1'
+%% in front of the name of the font a warning message will
+%% be produced (saying that the font has been substituted
+%% for the real one) when you use it for the first time.
+%% Below you can find examples of this mechanism.
+%%
+%% For font/shape combinations which aren't available at all like
+%% computer modern sans serif small caps a suitable default will be
+%% used automatically unless you specify a substitution yourself with
+%% the \subst@fontshape command.
+%%
+%% It syntax is as follows:
+%%
+%% \subst@fontshape{family}{series}{shape}%
+%% {subst_family}{subst_series}{subst_shape}
+%%
+%% This might be necessary if the automatically selected default does
+%% not match your needs. For example: the font shape choosen instead
+%% of `computer modern sans serif small caps' would be `computer
+%% modern sans serif normal'. With a \subst@fontshape command you can
+%% change this, for example, to `computer modern roman small caps' as
+%% we did below. (If you don't like this remove this line in your
+%% *copy* of this file.)
+%%
+%% Finally, for every family there is an \extra@def macro. It defines
+%% special action to be done at load time for every font of the family.
+%% In most cases you can simply write
+%%
+%% \extra@def{family}{}{}
+%%
+%% In this file it is used to suppress hyphenation for typewriter
+%% fonts (see \extra@def{cmtt}... below) and to set the \skewchar
+%% for math fonts (see \extra@def{cmm}... and \extra@def{cmsy}...).
+%%
+%%
+\newlinechar`\^^J
+\immediate\write\sixt@@n{File: `fontdef.ps' \space
+ \fileversion\space <\filedate> (Springer Verlag)}
+\immediate\write\sixt@@n
+ {********************************************************************}
+\immediate\write\sixt@@n
+ {*by Springer Verlag from M & S original, to support PostScript fonts *}
+\immediate\write\sixt@@n
+ {********************************************************************}
+%%
+%% Please don't change the next lines unless you know exactly what you
+%% are doing.
+%%
+\def\default@shape{n}
+\def\default@series{m}
+\def\default@family{cmr}
+\def\default@errfont{cmsy10}
+%%
+%% Again, this is doubly dangerous bent.
+%%
+\family\default@family
+\series\default@series
+\shape\default@shape
+%%
+%% And here is your playground:
+%%
+%%
+%% Generalized scheme for PostScript fonts, assuming they
+%% all have the same basic structure
+\def\postscript@fontdef#1#2#3#4#5#6#7#8{
+% 1 : full name for family
+% 2 : short name for family
+% 3 : tfm name for normal font
+% 4 : tfm name for italic font
+% 5 : tfm name for bold font
+% 6 : tfm name for bolditalic font
+% 7 : tfm name for smallcaps font
+% 8 : tfm name for slanted font
+\immediate\write\sixt@@n
+ {********************************************************************}
+\immediate\write\sixt@@n
+ {Defining fonts for PostScript #1 family, with }
+\immediate\write\sixt@@n
+ {#2 as shortname}
+\immediate\write\sixt@@n
+ {#3 as TFM name for normal font}
+\immediate\write\sixt@@n
+ {#4 as TFM name for italic font}
+\immediate\write\sixt@@n
+ {#5 as TFM name for bold font}
+\immediate\write\sixt@@n
+ {#6 as TFM name for bolditalic font}
+\immediate\write\sixt@@n
+ {#7 as TFM name for smallcaps font}
+\immediate\write\sixt@@n
+ {#8 as TFM name for slanted font}
+
+\immediate\write\sixt@@n
+ {********************************************************************}
+\new@fontshape{#2}{m}{n}{%
+ <5>#3 at5pt%
+ <6>#3 at6pt%
+ <7>#3 at7pt%
+ <8>#3 at8pt%
+ <9>#3 at9pt%
+ <10>#3 at10pt%
+ <11>#3 at11pt%
+ <12>#3 at12pt%
+ <14>#3 at14pt%
+ <17>#3 at17pt%
+ <20>#3 at20pt%
+ <25>#3 at25pt}{}
+\extra@def{#2}{}{}
+
+\new@fontshape{#2}{m}{sc}{%
+ <5>#7 at5pt%
+ <6>#7 at6pt%
+ <7>#7 at7pt%
+ <8>#7 at8pt%
+ <9>#7 at9pt%
+ <10>#7 at10pt%
+ <11>#7 at11pt%
+ <12>#7 at12pt%
+ <14>#7 at14pt%
+ <17>#7 at17pt%
+ <20>#7 at20pt%
+ <25>#7 at25pt%
+ }{}
+
+
+\new@fontshape{#2}{m}{it}{%
+ <5>#4 at5pt%
+ <6>#4 at6pt%
+ <7>#4 at7pt%
+ <8>#4 at8pt%
+ <9>#4 at9pt%
+ <10>#4 at10pt%
+ <11>#4 at11pt%
+ <12>#4 at12pt%
+ <14>#4 at14pt%
+ <17>#4 at17pt%
+ <20>#4 at20pt%
+ <25>#4 at25pt%
+ }{}
+
+\new@fontshape{#2}{m}{sl}{%
+ <5>#8 at5pt%
+ <6>#8 at6pt%
+ <7>#8 at7pt%
+ <8>#8 at8pt%
+ <9>#8 at9pt%
+ <10>#8 at10pt%
+ <11>#8 at11pt%
+ <12>#8 at12pt%
+ <14>#8 at14pt%
+ <17>#8 at17pt%
+ <20>#8 at20pt%
+ <25>#8 at25pt%
+ }{}
+
+\new@fontshape{#2}{bx}{n}{%
+ <5>#5 at6pt%
+ <6>#5 at6pt%
+ <7>#5 at7pt%
+ <8>#5 at8pt%
+ <9>#5 at9pt%
+ <10>#5 at10pt%
+ <11>#5 at11pt%
+ <12>#5 at12pt%
+ <14>#5 at14pt%
+ <17>#5 at17pt%
+ <20>#5 at20pt%
+ <25>#5 at25pt%
+ }{}
+
+\new@fontshape{#2}{bx}{it}{%
+ <5>#6 at6pt%
+ <6>#6 at6pt%
+ <7>#6 at7pt%
+ <8>#6 at8pt%
+ <9>#6 at9pt%
+ <10>#6 at10pt%
+ <11>#6 at11pt%
+ <12>#6 at12pt%
+ <14>#6 at14pt%
+ <17>#6 at17pt%
+ <20>#6 at20pt%
+ <25>#6 at25pt%
+ }{}
+
+
+% bold and bold-extended regarded as the same
+% slanted and smallcaps only in normal font
+\subst@fontshape{#2}{b}{sc}{#2}{m}{sc}
+\subst@fontshape{#2}{b}{sl}{#2}{m}{sl}
+\subst@fontshape{#2}{bx}{sc}{#2}{m}{sc}
+\subst@fontshape{#2}{bx}{sl}{#2}{m}{sl}
+\subst@fontshape{#2}{b}{n}{#2}{bx}{n}
+\subst@fontshape{#2}{b}{it}{#2}{bx}{it}
+}
+%%
+%\new@fontshape{cmr}{m}{n}{%
+% <5>cmr5%
+% <6>cmr6%
+% <7>cmr7%
+% <8>cmr8%
+% <9>cmr9%
+% <10>cmr10%
+% <11>cmr10 at10.95pt%
+% <12>cmr12%
+% <14>cmr12 at14.4pt%
+% <17>cmr17%
+% <20>cmr17 at20.736pt%
+% <25>cmr17 at24.8832pt}{}
+%\extra@def{cmr}{}{}
+%\new@fontshape{cmr}{m}{sl}{%
+% <5>1cmr5%
+% <6>1cmr6%
+% <7>1cmr7%
+% <8>cmsl8%
+% <9>cmsl9%
+% <10>cmsl10%
+% <11>cmsl10 at10.95pt%
+% <12>cmsl12%
+% <14>cmsl12 at14.4pt%
+% <17>cmsl12 at17.28pt%
+% <20>cmsl12 at20.74pt%
+% <25>cmsl12 at24.88pt%
+% }{}
+%
+%\new@fontshape{cmr}{m}{it}{%
+% <5>1cmr5%
+% <6>1cmr6%
+% <7>cmti7%
+% <8>cmti8%
+% <9>cmti9%
+% <10>cmti10%
+% <11>cmti10 at10.95pt%
+% <12>cmti12%
+% <14>cmti12 at14.4pt%
+% <17>cmti12 at17.28pt%
+% <20>cmti12 at20.74pt%
+% <25>cmti12 at24.88pt%
+% }{}
+%
+%\new@fontshape{cmr}{m}{sc}{%
+% <5>1cmr5%
+% <6>1cmr6%
+% <7>1cmr7%
+% <8>cmcsc10 at8pt%
+% <9>cmcsc10 at9pt%
+% <10>cmcsc10%
+% <11>cmcsc10 at10.95pt%
+% <12>cmcsc10 at12pt%
+% <14>cmcsc10 at14.4pt%
+% <17>cmcsc10 at17.28pt%
+% <20>cmcsc10 at20.74pt%
+% <25>cmcsc10 at24.88pt%
+% }{}
+%%%
+%%% Warning: please note that the upright shape below is used
+%%% for the \pounds symbol of LaTeX. So this font
+%%% definition shouldn't be removed.
+%%%
+%% If cmu below 10pt is not available we substitute
+%% cmti as far as possible (sizes 7, 8, 9). This is
+%% done because cmu is used mainly for producing the
+%% the \pound symbol and it is better to get a slanted
+%% (or bigger) pound then to get a $ sign in such situations.
+%%%
+%\new@fontshape{cmr}{m}{u}{%
+% <5>1cmti7%
+% <6>1cmti7%
+% <7>1cmti7%
+% <8>1cmti8%
+% <9>1cmti9%
+% <10>cmu10%
+% <11>cmu10 at10.95pt%
+% <12>cmu10 at12pt%
+% <14>cmu10 at14.4pt%
+% <17>cmu10 at17.28pt%
+% <20>cmu10 at20.74pt%
+% <25>cmu10 at24.88pt%
+% }{}
+%
+%%%%%%%%% bold series
+%
+%\new@fontshape{cmr}{b}{n}{%
+% <5>1cmbx5%
+% <6>1cmbx6%
+% <7>1cmbx7%
+% <8>1cmbx8%
+% <9>1cmbx9%
+% <10>cmb10%
+% <11>cmb10 at10.95pt%
+% <12>cmb10 at12pt%
+% <14>cmb10 at14.4pt%
+% <17>cmb10 at17.28pt%
+% <20>cmb10 at20.736pt%
+% <25>cmb10 at24.8832pt%
+% }{}
+%
+%%%%%%%%%% bold extended series
+%
+%\new@fontshape{cmr}{bx}{n}{%
+% <5>cmbx5%
+% <6>cmbx6%
+% <7>cmbx7%
+% <8>cmbx8%
+% <9>cmbx9%
+% <10>cmbx10%
+% <11>cmbx10 at10.95pt%
+% <12>cmbx12%
+% <14>cmbx12 at14.4pt%
+% <17>cmbx12 at17.28pt%
+% <20>cmbx12 at20.74pt%
+% <25>cmbx12 at24.88pt%
+% }{}
+%
+%\new@fontshape{cmr}{bx}{sl}{%
+% <5>1cmbx5%
+% <6>1cmbx6%
+% <7>1cmbx7%
+% <8>1cmbx8%
+% <9>1cmbx9%
+% <10>cmbxsl10%
+% <11>cmbxsl10 at10.95pt%
+% <12>cmbxsl10 at12pt%
+% <14>cmbxsl10 at14.4pt%
+% <17>cmbxsl10 at17.28pt%
+% <20>cmbxsl10 at20.74pt%
+% <25>cmbxsl10 at24.88pt%
+% }{}
+%
+%\new@fontshape{cmr}{bx}{it}{%
+% <5>1cmbx5%
+% <6>1cmbx6%
+% <7>1cmbx7%
+% <8>1cmbx8%
+% <9>1cmbx9%
+% <10>cmbxti10%
+% <11>cmbxti10 at10.95pt%
+% <12>cmbxti10 at12pt%
+% <14>cmbxti10 at14.4pt%
+% <17>cmbxti10 at17.28pt%
+% <20>cmbxti10 at20.74pt%
+% <25>cmbxti10 at24.88pt%
+% }{}
+
+\postscript@fontdef{Times}{cmr}{psmtimr}{psmtimi}{psmtimb}{psmtimbi}{psmtimr}{psmtimi}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Sans serif font shapes
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\postscript@fontdef{Helvetica}{cmss}{psmhlv}{psmhlvo}{psmhlvb}{psmhlvbo}{psmhlv}{psmhlv}
+
+%\new@fontshape{cmss}{m}{n}{%
+% <5>1cmr5%
+% <6>1cmr6%
+% <7>1cmr7%
+% <8>cmss8%
+% <9>cmss9%
+% <10>cmss10%
+% <11>cmss10 at10.95pt%
+% <12>cmss12%
+% <14>cmss12 at14.4pt%
+% <17>cmss17%
+% <20>cmss17 at20.74pt%
+% <25>cmss17 at24.88pt%
+% }{}
+%
+%
+%\subst@fontshape{cmss}{m}{it}{cmss}{m}{sl}
+%
+%\new@fontshape{cmss}{m}{sl}{%
+% <5>1cmr5%
+% <6>1cmr6%
+% <7>1cmr7%
+% <8>cmssi8%
+% <9>cmssi9%
+% <10>cmssi10%
+% <11>cmssi10 at10.95pt%
+% <12>cmssi12%
+% <14>cmssi12 at14.4pt%
+% <17>cmssi17%
+% <20>cmssi17 at20.74pt%
+% <25>cmssi17 at24.88pt%
+% }{}
+%
+%%%%%%%% Font/shape undefined, therefore substituted
+%
+%\subst@fontshape{cmss}{m}{sc}{cmr}{m}{sc}
+%
+%%%%%%%%% semibold condensed series
+%
+%\new@fontshape{cmss}{sbc}{n}{%
+% <5>1cmr5%
+% <6>1cmr6%
+% <7>1cmr7%
+% <8>1cmss8%
+% <9>1cmss9%
+% <10>cmssdc10%
+% <11>cmssdc10 at10.95pt%
+% <12>cmssdc10 at12pt%
+% <14>cmssdc10 at14.4pt%
+% <17>cmssdc10 at17.28pt%
+% <20>cmssdc10 at20.74pt%
+% <25>cmssdc10 at24.88pt%
+% }{}
+%
+%%%%%%%%%% bold extended series
+%
+%\new@fontshape{cmss}{bx}{n}{%
+% <5>1cmbx5%
+% <6>1cmbx6%
+% <7>1cmbx7%
+% <8>1cmbx8%
+% <9>1cmbx9%
+% <10>cmssbx10%
+% <11>cmssbx10 at10.95pt%
+% <12>cmssbx10 at12pt%
+% <14>cmssbx10 at14.4pt%
+% <17>cmssbx10 at17.28pt%
+% <20>cmssbx10 at20.74pt%
+% <25>cmssbx10 at24.88pt%
+% }{}
+%
+%\extra@def{cmss}{}{}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Typewriter font shapes
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\postscript@fontdef{Courier}{cmtt}{psmcou}{psmcouo}{psmcoub}{psmcoubo}{psmcou}{psmcou}
+\extra@def{cmtt}{\hyphenchar #1\m@ne}{}
+
+%\new@fontshape{cmtt}{m}{n}{%
+% <5>1cmr5%
+% <6>1cmr6%
+% <7>1cmr7%
+% <8>cmtt8%
+% <9>cmtt9%
+% <10>cmtt10%
+% <11>cmtt10 at10.95pt%
+% <12>cmtt12%
+% <14>cmtt12 at14.4pt%
+% <17>cmtt12 at17.28pt%
+% <20>cmtt12 at20.74pt%
+% <25>cmtt12 at24.88pt%
+% }{}
+%
+%\new@fontshape{cmtt}{m}{it}{%
+% <5>1cmr5%
+% <6>1cmr6%
+% <7>1cmr7%
+% <8>1cmtt8%
+% <9>1cmtt9%
+% <10>cmitt10%
+% <11>cmitt10 at10.95pt%
+% <12>cmitt10 at12pt%
+% <14>cmitt10 at14.4pt%
+% <17>cmitt10 at17.28pt%
+% <20>cmitt10 at20.74pt%
+% <25>cmitt10 at24.88pt%
+% }{}
+%
+%\new@fontshape{cmtt}{m}{sl}{%
+% <5>1cmr5%
+% <6>1cmr6%
+% <7>1cmr7%
+% <8>1cmtt8%
+% <9>1cmtt9%
+% <10>cmsltt10%
+% <11>cmsltt10 at10.95pt%
+% <12>cmsltt10 at12pt%
+% <14>cmsltt10 at14.4pt%
+% <17>cmsltt10 at17.28pt%
+% <20>cmsltt10 at20.74pt%
+% <25>cmsltt10 at24.88pt%
+% }{}
+%
+%\new@fontshape{cmtt}{m}{sc}{%
+% <5>1cmr5%
+% <6>1cmr6%
+% <7>1cmr7%
+% <8>1cmtt8%
+% <9>1cmtt9%
+% <10>cmtcsc10%
+% <11>cmtcsc10 at10.95pt%
+% <12>cmtcsc10 at12pt%
+% <14>cmtcsc10 at14.4pt%
+% <17>cmtcsc10 at17.28pt%
+% <20>cmtcsc10 at20.74pt%
+% <25>cmtcsc10 at24.88pt%
+% }{}
+%
+%\extra@def{cmtt}{\hyphenchar #1\m@ne}{}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Math italic font shapes
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\new@fontshape{cmm}{m}{it}{%
+ <5>cmmi5%
+ <6>cmmi6%
+ <7>cmmi7%
+ <8>cmmi8%
+ <9>cmmi9%
+ <10>cmmi10%
+ <11>cmmi10 at10.95pt%
+ <12>cmmi12%
+ <14>cmmi12 at14.4pt%
+ <17>cmmi12 at17.28pt%
+ <20>cmmi12 at20.74pt%
+ <25>cmmi12 at24.88pt%
+ }{}
+
+\new@fontshape{cmm}{b}{it}{%
+ <5>cmmib10 at5pt%<5>1cmmi5%
+ <6>cmmib10 at6pt%<6>1cmmi6%
+ <7>cmmib10 at7pt%<7>1cmmi7%
+ <8>cmmib10 at8pt%<8>1cmmi8%
+ <9>1cmmi9%
+ <10>cmmib10%
+ <11>cmmib10 at10.95pt%
+ <12>cmmib10 at12pt%
+ <14>cmmib10 at14.4pt%
+ <17>cmmib10 at17.28pt%
+ <20>cmmib10 at20.74pt%
+ <25>cmmib10 at24.88pt%
+ }{}
+
+\extra@def{cmm}{\skewchar#1'177}{}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Math symbol font shapes
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\new@fontshape{cmsy}{m}{n}{%
+ <5>cmsy5%
+ <6>cmsy6%
+ <7>cmsy7%
+ <8>cmsy8%
+ <9>cmsy9%
+ <10>cmsy10%
+ <11>cmsy10 at10.95pt%
+ <12>cmsy10 at12pt%
+ <14>cmsy10 at14.4pt%
+ <17>cmsy10 at17.28pt%
+ <20>cmsy10 at20.74pt%
+ <25>cmsy10 at24.88pt%
+ }{}
+
+\new@fontshape{cmsy}{b}{n}{%
+ <5>cmbsy10 at5pt%<5>1cmsy5%
+ <6>cmbsy10 at6pt%<6>1cmsy6%
+ <7>cmbsy10 at7pt%<7>1cmsy7%
+ <8>cmbsy10 at8pt%<8>1cmsy8%
+ <9>1cmsy9%
+ <10>cmbsy10%
+ <11>cmbsy10 at10.95pt%
+ <12>cmbsy10 at12pt%
+ <14>cmbsy10 at14.4pt%
+ <17>cmbsy10 at17.28pt%
+ <20>cmbsy10 at20.74pt%
+ <25>cmbsy10 at24.88pt%
+ }{}
+
+\extra@def{cmsy}{\skewchar#1'60}{}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% LaTeX symbol font shapes
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\new@fontshape{lasy}{m}{n}{%
+ <5>lasy5%
+ <6>lasy6%
+ <7>lasy7%
+ <8>lasy8%
+ <9>lasy9%
+ <10>lasy10%
+ <11>lasy10 at10.95pt%
+ <12>lasy10 at12pt%
+ <14>lasy10 at14.4pt%
+ <17>lasy10 at17.28pt%
+ <20>lasy10 at20.74pt%
+ <25>lasy10 at24.88pt%
+ }{}
+
+\new@fontshape{lasy}{b}{n}{%
+ <5>lasyb10 at5pt%<5>1lasy5%
+ <6>lasyb10 at6pt%<6>1lasy6%
+ <7>lasyb10 at7pt%<7>1lasy7%
+ <8>lasyb10 at8pt%<8>1lasy8%
+ <9>lasyb10 at9pt%<9>1lasy9%
+ <10>lasyb10%
+ <11>lasyb10 at10.95pt%
+ <12>lasyb10 at12pt%
+ <14>lasyb10 at14.4pt%
+ <17>lasyb10 at17.28pt%
+ <20>lasyb10 at20.74pt%
+ <25>lasyb10 at24.88pt%
+ }{}
+
+\extra@def{lasy}{}{}
+
+
+
+
+
+%%
+%% End of file `fontdef.ps'.
+
+
+
+\fi
+\endinput
diff --git a/obsolete/macros/latex209/contrib/springer/ljour/linvmat.dem b/obsolete/macros/latex209/contrib/springer/ljour/linvmat.dem
new file mode 100644
index 0000000000..0877d4ba54
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/ljour/linvmat.dem
@@ -0,0 +1,361 @@
+% linvmat.dem
+% LaTeX package LJour1 1.0: demo file for Inventiones mathematicae
+% (c) Springer-Verlag HD
+%----------------------------------------------------------------------
+%
+% customization
+\documentstyle[bibay]{pljour1}
+\journalname{Inventiones mathematicae} % State name of journal
+\newcommand{\DXDYCZ}[3]{\left( \frac{ \partial #1 }{ \partial #2 }
+ \right)_{#3}}
+% end of customization
+%
+\begin{document}
+%
+\title{ Optimality relationships for $p$-cyclic
+ SOR\thanks{Research supported in part by the US Air Force under
+ grant no. AFOSR-88-0285 and the National Science Foundation under
+ grant no. DMS-85-0285.}\fnmsep\thanks{In memory of J.L. Verdier}}
+\subtitle{A demonstration text}
+\author{Daniel J. Pierce\inst{1} \and Apostolos
+ Jadjidimos\inst{2}\fnmsep\thanks{{\it Present address:\/} Department
+ of Computer Science, Purdue University, West Lafayette, IN 47907, USA.}
+ \and Robert J. Plemmons\inst{3}}
+\mail{R. Plemmons}
+\titlerunning{Optimality relationships for $p$-cyclic SOR}
+\authorrunning{D. J. Pierce et al.}
+\institute{Boeing Computer Service, P.O. Box 24346, MS 7L-21,
+ Seattle, WA 98124-0346, USA \and
+ Department of Mathematics, University of Ioannina, GR-45 1210
+ Ionnanina, Greece \and
+ Department of Computer Science and Mathematics, North Carolina
+ State University, Raleigh, NC 27695-8205, USA}
+\date{Oblatum 20-I-1989 \& 3-VIII-1991}
+\maketitle
+\begin{abstract}
+ The optimality question for block $p$-cyclic matrix into a block
+ $q$-cyclic form, $q < p$, results in asymptotically faster SOR
+ convergence for the same amount of work per iteration. As a
+ consequence block 2-cyclic SOR is optimal under these conditions.
+\end{abstract}
+
+\section{Introduction}
+This text was compiled to demonstrate the use of the Springer
+\LaTeX\ macropackages {\em LJour1\/} for one-column journals.
+Please refer to \cite{leslie} for general information on coding \LaTeX{}
+and to the \cite{springer} for information concerning the Springer
+layout.
+
+Parts of this ``article" were taken from different real articles, but
+may have been changed to show a special feature of a macro.
+
+\section{Notation}
+
+Here are a few examples of how to use special fonts. Vectors are denoted
+by boldface letters: $\vec V,\; \vec W$. Tensors are denoted by sans
+serif letters: $\tens{A, B}$. If no tensors are needed, sans serif
+letters may be reserved for other purposes. Vector spaces may be denoted
+by gothic letters: $\frak{G, H}$. Sets of functions are denoted by
+script letters: ${\cal W}_i,{\cal F}$. Sets of numbers are denoted by
+special roman letters ${\Bbb R}, {\Bbb C}$.
+
+You are of course (within limits) free to design your own notation but
+sticking to conventions makes your article easier for others to read.
+
+\section{Preliminaries}
+Let us state a few well known results and demonstrate how to typeset
+lists. The functions $f$ and $g$ of (1) and (2) fulfill the following
+assumptions:
+
+\begin{enumerate}
+\item $f: B_f \subset {\Bbb R}^n \times {\Bbb R}^n \times [a,b] \to
+{\Bbb R}^n$ \\
+$f^\prime _x$, $f^\prime_y$ exist and are continous
+\item ker$(f^\prime _y (y, x, t)) = N (t)\quad \forall (y, x, t)
+\in B_f$ \\
+${\rm rank} (f^\prime _y (y, x, t)) = r$ \\
+${\rm dim} (N (t)) = n - r$
+\item $Q(t)$ denotes a projection onto $N(t)$ \\
+$Q$ is smooth and $P(t) := I - Q (t)$
+\item The matrix $G (y, x, t) := f^\prime _y (y, x, t) + f^\prime
+_x (y, x, t) Q (t)$ is nonsingular \\
+$\forall (y, x, t) \in B_f$\quad (i.e. (1) is transferable)
+\item $g: B_g \subset {\Bbb R}^n \times {\Bbb R}^n \to M \subset
+{\Bbb R}^n$ \\
+$g^\prime _{x_a} , g^\prime _{x_b}$ exist and are continuous\\
+${\rm im} (g^\prime _{x_a} , g^\prime _{x_b}) =: M$
+\end{enumerate}
+
+Now we give another example of a list with changed indentation.
+
+\begin{description}[Shoot.]
+
+\item[Shoot.]
+Collocation methods for this type of equations are considered in
+\cite{yser} and \cite{wendl}. Shooting and difference methods for
+linear, {\it solvable} DAE's in the sense of [9], also with higher
+index, are treated in [8] under the assumption that consistent initial
+values can be calculated and a stable integration method is available.
+
+\item[Diff.]
+This paper aims at constructing an algorithm for solving a BVP in
+transferable nonlinear DAE's with nonsingular Jacobian and the same
+dimension as in the ODE case.
+
+\begin{description}[Jacob.]
+
+\item[Jacob.] We also deal with Jacobians, which means that we
+explain the functions, advantages and inconveniences of calling them not
+Jacobians.....
+
+\item[Nonl.] Nonlinear functions play an important role in
+this connection. Please note that we always call them nonlinear whenever
+there is no............
+
+\end{description}
+
+\end{description}
+
+\section{The shooting method}
+The natural way to construct a shooting method for DAE's is described by
+\cite{yser}.
+
+The physical meaning of $ \sigma_0 $ and $K$ is clearly visible in
+the equations above. $\sigma_0$ represents a frequency of the order one
+per free-fall time. $K$ is
+proportional to the ratio of the free-fall time and the cooling time.
+Substituting into Baker's criteria, using thermodynamic identities
+and definitions of thermodynamic quantities,
+\begin{displaymath}
+ \Gamma_1 = \DXDYCZ{\ln P}{\ln \rho}{S} \, , \;
+ \chi^{}_\rho = \DXDYCZ{\ln P}{\ln \rho}{T} \, , \;
+ \kappa^{}_{P} = \DXDYCZ{\ln \kappa}{\ln P}{T}
+\end{displaymath}
+\begin{displaymath}
+ \nabla_{\rm ad} = \DXDYCZ{\ln T}{\ln P}{S} \, , \;
+ \chi^{}_T = \DXDYCZ{\ln P}{\ln T}{\rho} \, , \;
+ \kappa^{}_{T} = \DXDYCZ{\ln \kappa}{\ln T}{T}
+\end{displaymath}
+one obtains, after some pages of algebra, the conditions for
+{\em stability} given
+below:
+\begin{eqnarray}
+ \frac{\pi^2}{8} \frac{1}{\tau_{\rm ff}^2}
+ ( 3 \Gamma_1 - 4 )
+ & > & 0 \label{ZSDynSta} \\
+ \frac{\pi^2}{\tau_{\rm co}
+ \tau_{\rm ff}^2}
+ \Gamma_1 \nabla_{\rm ad}
+ \left[ \frac{ 1- 3/4 \chi^{}_\rho }{ \chi^{}_T }
+ ( \kappa^{}_T - 4 )
+ + \kappa^{}_P + 1
+ \right]
+ & > & 0 \label{ZSSecSta} \\
+ \frac{\pi^2}{4} \frac{3}{\tau_{ \rm co }
+ \tau_{ \rm ff }^2
+ }
+ \Gamma_1^2 \, \nabla_{\rm ad} \left[
+ 4 \nabla_{\rm ad}
+ - ( \nabla_{\rm ad} \kappa^{}_T
+ + \kappa^{}_P
+ )
+ - \frac{4}{3 \Gamma_1}
+ \right]
+ & > & 0 \label{ZSVibSta}
+\end{eqnarray}
+
+For a physical discussion of the stability criteria see \cite{tetz}
+or \cite{yser}.
+
+\subsection{Disadvantages of the method}
+
+The disadvantage of Eq. (\ref{ZSVibSta}) is the singularity of the
+Jacobian. If we use the representation of
+$z_i = P_i z_i + Q_i z_i =: u_i + v_i$, we obtain the following system
+
+\begin{eqnarray}
+g (u_0 + v_0 , x (t_m, t_{m-1}, u_{m-1}))& = & 0 \label{dis}\\
+u_i - P_i x (t_i; t_{i-1}, u_{i-1}) & = & 0\;,
+ \quad i = 1, \ldots , m-1\;. \label{das}
+\end{eqnarray}
+
+\subsection{Specialization of $V$}
+
+Now we specialize $V := \hat S^\prime $ in. Let $P_D$ be a
+projector with ${\rm im} (P_D) = M$. If we demand Eq. (\ref{das}) and
+\begin{eqnarray*}
+VV^- &=& P_D \\
+V^-V &=& P\; ,
+\end{eqnarray*}
+%
+the generalized inverse $V^-$ in uniquely determined. Using Lemma 1 we
+construct a regular matrix $K$ so that ${\rm im} (P_D) \oplus {\rm im}
+(K^{-1} Q) = {\Bbb R}^n$. This provides the possibility to add without
+loss $(K^{-1} Q) = {\Bbb R}^n$. This provides the possibility to add,
+without loss of information, the Eqs.\ts (\ref{dis}) and (\ref{six})
+(after multiplying by $K^{-1})$. The following shooting operator is
+created
+\begin{equation}
+\quad S (\xi ) := \left\{
+\begin{array}{ll}
+ S_1 (\xi):= & \left\{
+ \begin{array} {ll}
+ g (u_0 + v_0, x (t_m; t_{m-1}, u_{m-1})) + K^{-1} Q_0 u_0
+ &\quad (a)\\
+ u_i - P_i x (t_i; t_{i-1} , u_{i-1})\; i = 1, \ldots , m-1
+ & \quad(b)
+ \end{array} \right. \\
+ S_2 (\xi) := & \left\{
+ \begin{array} {ll}
+ Q_0 y_0 + P_0 v_0 & \quad (c)\\
+ f(y_0, u_0 + v_0, t_0) & \quad (d) \quad ,
+ \end{array}
+ \right.
+\end{array} \right.\label{six}
+\end{equation}
+%
+with $\xi := (u_0 , u_1, \ldots , u_{m-1} , y_0, v_0)^{\rm T}$.
+
+\begin{lemma}
+Let $V$ be a singular matrix and $V^-$ a reflexive inverse of $V$ with
+Sect. (2.3) and $VV^- = P_D$, $V^-V = P$, where $P$ and $P_D$ satisfy
+the conditions of Lemma 2.1. Then the matrix $V + K^{-1} Q$ is
+nonsingular and
+%
+\[ (V + K^{-1} Q) ^{-1} = V^- + QK\; , \]
+%
+where $K$ is defined in Sect. (2.2).
+\end{lemma}
+
+\begin{proof}
+\begin{eqnarray*}
+(V + K^{-1}Q)(V^- + QK) & = & VV^- + VQK + K^{-1}QV^- + K^{-1} QK \\
+& = & P_D + 0 + 0 + Q_D = I\; . \quad\qed
+\end{eqnarray*}
+\end{proof}
+
+\begin{remark}
+The value $w := (P_s v_0 + Q_0 G^{-1} f (y_0, u_0 + v_0, t_0))$ at
+the right-hand side of Eq. (16) is the solution of the linear system
+\begin{equation}
+ J_4 \left(\begin{array}{c} \eta \\ w \end{array} \right)
+ = \left(\begin{array}{c} Q_0 y_0 + P_0 v_0 \\
+ f (y_0, u_0 + v_0, t_0) \end{array} \right)
+\end{equation}
+\end{remark}
+
+\begin{figure}\picplace {4 cm}
+\firstcaption{The doping profile $C (t)$ has the same structure as
+$N_-$}
+\secondcaption{The doping profile of $C (z)$}
+\end{figure}
+
+This leads to the following algorithm to compute the iteration $\xi^i$:
+\begin{description}[5 ---]
+\item[0 -- ] initial value $\xi^0 := (u_0^0 , \ldots , u^0_{m-1} , y_0^0
+, v_0^0)$
+\item[1 -- ] $i:= 0$
+\item[2 -- ] compute $u^{i+1}$ with (3.16)
+\item[3 -- ] compute $y^{i+1}_0, v_0^{i+1}$ with (3.17) using $\Delta
+u^{i+1} := u^{i+1} - u^i$
+\item[4 -- ]$i:= i + 1$
+\item[5 -- ]{\tt IF} accuracy not reached {\tt THEN GOTO 2 ELSE STOP}
+\end{description}
+
+\begin{theorem} Let the assumptions (A), (B) be fulfilled. Then the
+non-linear equation
+$$
+S (\xi) = 0
+$$
+has a nonsingular Jacobian in a neighbourhood of
+$$
+\xi = \xi_\star := (u_{\star 0}, \ldots , u_{\star m-1} , y_{\star 0},
+v_{\star 0})\; ,
+$$
+which corresponds with $x_\star$.
+\end{theorem}
+
+\section{Implementation}
+If listing of a program is desired, this is possible too \cite{darnell}
+
+\begin{verbatim}
+void get_two_kbd_chars()
+{
+ extern char KEYBOARD;
+ char c0, c1;
+
+ c0 = KEYBOARD;
+ c1 = KEYBOARD;
+}
+\end{verbatim}
+
+\section{Solutions}
+We solve this problem with the relative accuracy of integration $1d-4$.
+The experimental tests of the Standard Model and thereby of the
+unification of the weak and electromagnetic interactions have reached a
+new level of accuracy. The results are given in Table \ref{KapSou}.
+
+\begin{table}
+ \caption{Opacity sources}\label{KapSou}
+ \centering
+ \begin{tabular}{ll}
+ \hline\noalign{\smallskip}
+ Source & T/[K] \\
+ \noalign{\smallskip}
+ \hline
+ \noalign{\smallskip}
+ Yorke 1979, Yorke 1980a & $\leq 1700^{\rm a}$ \\
+ Kr\"ugel 1971 & $1700 \leq T \leq 5000$ \\
+ Cox and Stewart 1969 & $5000 \leq $ \\
+ \noalign{\smallskip}\hline\noalign{\smallskip}
+ $^{\rm a}$ This is a footnote.
+ \end{tabular}
+\end{table}
+
+\begin{acknowledgement}I wish to thank Prof. Dr. Roswitha M\"arz for
+many helpful discussions.\end{acknowledgement}
+
+\begin{thebibliography}[9]{References}
+% Note that space for square brackets is added to the width of the label
+% specified in the [] argument. If you don't use []s in your
+% bibliography, specify a narrower label or omit the specification
+% altogether. In this case \parindent is used.
+
+\bibitem{1.}{darnell}{[1]}
+Darnell, P.A., Margolis, P.E.: C, A software engineering
+approach. Berlin Heidelberg New York: Springer-Verlag, 1988
+
+\bibitem{2.}{leslie}{[2]}
+Lamport, L.: \LaTeX: A document preparation system.
+Addison-Wesley Publishing Company, Inc., 1986
+
+\bibitem{3.}{seroul}{[3]}
+Seroul, R., Levy, S.: A beginner's book of \TeX{}. New York Berlin
+Heidelberg: Springer, 1989
+
+\bibitem{4.}{springer}{[4]}
+LJour1: Springer's \LaTeX{} style file for journals with one-column
+layout. Heidelberg: Springer-Verlag, 1993
+
+\bibitem{5.}{stroud}{[5]}
+Strout, A.H.: Approximate calculation of multiple integrals.
+Englewood Cliffs, N.J.: Prentice Hall, 1971
+
+\bibitem{6.}{tetz}{[6]}
+Tetzlaff, A.: Stability in the Common Market. (To appear)
+
+\bibitem{7.}{wendl}{[7]}
+Wendland, W.L.: Strongly elliptic boundary integral equations.
+In: A. Iserles, M. Powell, (eds.) The state of the art in numerical
+analysis. Oxford: Clarendon Press, 1987, pp. 511--561
+
+\bibitem{8.}{yser}{[8]}
+Yserentant, H.: A remark on the numerical computation of
+improper integrals. Computing {\bf 30}, 179--183 (1983)
+
+\medskip\noindent
+\bibitem{Please}{}{}refer to a recent issue of the journal for further
+examples on how to format references.
+
+\end{thebibliography}
+\end{document}
diff --git a/obsolete/macros/latex209/contrib/springer/ljour/ljour1.doc b/obsolete/macros/latex209/contrib/springer/ljour/ljour1.doc
new file mode 100644
index 0000000000..2d6c9e2b30
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/ljour/ljour1.doc
@@ -0,0 +1,1791 @@
+% ljour1.doc
+%-----------------------------------------------------------------------
+% LJour1 1.0: LaTeX style file for journals with one column layout
+% User's guide
+% (c) Springer-Verlag HD
+%-----------------------------------------------------------------------
+% use format file cljour1 !!
+\documentstyle[bibay]{cljour1}
+\makeatletter
+\journalname{Springer technical documentation}
+\renewcommand{\abstractname}{}
+\renewcommand{\makeheadbox}{}
+\newcommand{\ljour}{{\em LJour1\/}}
+\newcommand{\Msun}{M_{\odot}}
+\newcommand{\BibTeX}{{\sc Bib}\TeX}
+\def\sectionmark#1{\markright{{\ifnum\c@secnumdepth>\z@
+ \thesection.\hskip\betweenumberspace\fi #1}}}
+
+\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
+ \let\@svsec\@empty\else
+ \refstepcounter{#1}\edef\@svsec{\csname the#1%
+ \endcsname.\hskip\betweenumberspace\ignorespaces}\fi % LsD
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #6\relax
+ \@hangfrom{\hskip #3\relax\@svsec}{%
+ \raggedright%
+ \hyphenpenalty \@M%
+ \interlinepenalty \@M #8\par}%
+ \endgroup
+ \csname #1mark\endcsname{#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname.}\fi
+ #7}\else
+ \def\@svsechd{#6\hskip #3\relax
+ \@svsec #8\hskip\aftertext\ignorespaces% LsD
+ \csname #1mark\endcsname
+ {#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname.}\fi
+ #7}}\fi
+ \@xsect{#5}}
+
+\def\tableofcontents{\section*{Contents}\@starttoc{toc}}
+\def\l@section#1#2{\addpenalty{\@secpenalty} \addvspace{0.5em plus 1pt}
+\@tempdima 1.5em \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \bf \leavevmode #1\hfil \hbox to\@pnumwidth{\hss #2}\par
+ \endgroup}
+\def\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}}
+\setcounter{tocdepth}{2}% Only two levels of sections in the toc
+\makeatother
+\begin{document}
+%\pagestyle{headings}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\overfullrule=0pt
+\headnote{Springer-Verlag technical information}
+\title {LJour1: Springer's \LaTeX{} style file\\
+for journals with one-column layout
+\\
+\\
+User's guide}
+\titlerunning{LJour1: User's guide}
+\author{}
+\authorrunning{LJour1: User's guide}
+\institute{}
+\date{version 1.0}
+\maketitle
+\markboth{LJour1: User's guide}{LJour1: User's guide}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{abstract}
+This user's guide for the \LaTeX{} style file {\it LJour1\/} as well as
+the macro package itself have been developed by Springer-Verlag
+Heidelberg as a free service to authors and editors preparing articles
+for Springer journals.
+
+This user's guide and the macros may be copied and passed on to other
+Springer authors, but may not be sold or placed on any mailserver other
+than the one maintained by Springer-Verlag. Our macro packages may not
+be incorporated into other \TeX{} macro packages, and \LaTeX{} style
+files may not be used commercially, unless permission has been granted
+by Springer-Verlag.
+
+For all questions regarding the macro packages please write to
+\medskip
+{\obeylines
+Springer-Verlag
+New Technologies / Product Development
+Tiergartenstrasse 17
+D-69121 Heidelberg
+Germany
+\smallskip
+Fax number: x49 6221 487\,648
+E-mail: {\tt springer@vax.ntp.springer.de}
+Mailserver: {\tt svserv@vax.ntp.springer.de}
+}\medskip
+
+Please address all questions regarding typography, handling etc. to the
+editors or to the production department which is in charge of your
+journal.
+
+This macro package is available via mailserver. To obtain a copy,
+send an e-mail message to {\tt svserv@vax.ntp.springer.de} containing
+the line\\
+{\tt send /tex/latex/ljour1.zip}
+\end{abstract}
+\tableofcontents
+\section{Introduction} \label{intro}
+%
+This is the user's guide for our style files for journals with
+single-column layout. It is used with the document preparation system
+\LaTeX, a macro package for the typesetting program \TeX{}.
+
+\begin{petit}
+The program \TeX, which was developed by Donald E. Knuth at Stanford
+University, represents the state of the art in computer typesetting. The
+facts that it handles almost every typesetting problem, that it runs on
+almost any computer and that it is public domain software are the
+reasons why it is now one of the most widely used typesetting programs
+in the scientific community. In almost every country \TeX\ user groups
+have been founded. These and the international user group TUG can help
+you if you have any questions concerning \LaTeX{} that your local \TeX
+pert cannot answer.\end{petit}
+
+If you do not have \TeX{} and \LaTeX{} installed in your computer, you
+can obtain a copy for VAX computers from the company Maria
+Code\footnote{Address: Maria Code, DP Services, 1371 Sydney Drive,
+Sunnyvale, CA 94087, USA}. Installation may involve quite a bit of work.
+Commercial implementations are therefore available from a number of
+software houses, e.g. PC\TeX\footnote{PC\TeX\ is a trademark of Personal
+\TeX\ Inc.} from Personal \TeX, Inc. The \TeX\ user groups will provide
+you with the necessary information.
+
+In this user's guide we chiefly explain the Springer macros and some of
+the Springer layout conventions. A number of books are available with
+information concerning the program itself\footnote{For instance L.
+Lamport: {\it \LaTeX, A Document Preparation System\/} (Addison-Wesley
+Publ. Co.) 0-201-15790-X}.
+
+\noindent\fbox{\parbox{11.8cm}{ As this macro package may be used for
+articles for a number of journals, it contains macros for textual
+elements that may not appear in your journal. Please refer to the demo
+files or a recent copy of your journal for further details.
+\hfill\break\indent This documentation also includes rules for proper
+styling, e.g. capitalization and abbreviation of words, but in any case,
+we ask you to read the {\it Instructions for Authors\/} printed in every
+issue of the journals, where additional information not covered by this
+manual is given.}}
+
+\section{\TeX nical background information}
+\label{back}
+
+\subsection{Springer style files}
+
+As \LaTeX\ has become more and more {\it the\/} typesetting program for
+mathematical and scientific publications containing formulas and other
+complicated elements (from the typesetting point of view), we encourage
+authors to submit their contributions in the form of a \LaTeX (or \TeX)
+input file using our macros.
+
+In order that these manuscripts are uniformly prepared in the layout
+used by the particular journal, Springer provides macro packages or
+style files containing macros that can be used to achieve the desired
+result. Here you will find all the macros that are necessary to specify
+the textual elements that may appear in your text. If you feel that we
+have missed something important, we would be very grateful for
+your suggestions.
+
+Formulas and straight text are typed using the standard \LaTeX\
+commands.
+
+\subsection{Using PostScript fonts}
+
+Some of the journals covered by this macro package are phototypeset
+using the PostScript\footnote{PostScript is a trademark of Adobe.} Times
+(PS) fonts. As use of PostScript fonts results in a slightly different
+page make-up from Computer Modern (CM) fonts, we provide the possibility
+to use our macros with either CM or PS fonts. Provided you have a
+PostScript printer, you can make a \TeX-PS printout showing you the page
+make-up as it will appear in the journal.
+
+Please note that to preview dvi files using PS fonts requires either
+special drivers such as {\em DVIWINDOW\/}\footnote{Available from Y\&Y.}
+or {\em Ghostscript\/} or pixel fonts that simulate the PS fonts on your
+monitor.
+
+If, for technical reasons, you are not able to use the PS fonts, it is
+also possible to use our macro package together with the ordinary CM
+fonts. Note, however, that in this case we will have to rerun your file
+with PS fonts and correct for bad line breaks, making it necessary for
+you to check it again once you receive the proofs from the printer. The
+additional time required for these procedures plus the additional costs
+involved mean that preferably files \TeX ed with PS fonts should be
+submitted. All this, of course, does not apply to camera-ready journals.
+See Sect.~\ref{format} for information on how to build up a \TeX\
+format file including our macros and either the CM or PS fonts.
+
+\subsection{Why format files?}\label{why}
+
+As our macro package requires a lot of fonts in addition to those
+preloaded by \LaTeX, it will normally not work if used via the
+\verb|\documentstyle| statement. It is therefore necessary to create a
+new so-called format file with our package. This is done by submitting a
+set of macro definitions to a program called \verb|initex|. This program
+processes the definitions, the font specifications, and the original
+\LaTeX{} macros and stores all of them in ``compiled" form in a format
+file. This process does not produce any output, in the way that an
+ordinary run of \TeX\ does, but speeds things up for all subsequent runs
+you make, using \LaTeX{} in combination with our macros and font
+selection.
+
+For technical details, please see Sect. \ref{format}.
+
+\subsection{Hardware and software requirements}
+
+As we are striving to meet all of the needs of authors typing a
+manuscript using our format, the style file has developed into an object
+that requires a certain amount of disk storage capacity and memory
+space. In some installations of \TeX\ you may have to increase the
+amount of memory that is allocated. Please refer to the documentation of
+your \TeX\ installation for details.
+
+\subsubsection{\TeX\ and \LaTeX\ version}
+
+We have developed this style file with PC\TeX\ based on \TeX\ version
+3.0 through 3.14, \LaTeX\ 2.09 and the New Font Selection Scheme (NFSS)
+vers. 1. Using it with other versions or implementations may cause
+difficulties. If you run into problems, please contact us and we will
+try to help.
+
+\paragraph*{Warning:} PC\TeX{} 2.9 contains a bug that will cause
+failure of the initex run!
+
+\subsubsection{Files}
+The following files have to be present on your system, as they will be
+read in when the format file is created:
+
+\begin{itemize}
+\item {\tt latex.tex} as of March 25, 1992 or later
+\item {\tt lplain.tex}
+\item {\tt art10.sty}
+\item {\tt article.sty}
+\item {\tt hyphen.tex} or another hyphenation file
+\item the NFSS. If you don't have this set of files, you can get it from
+any \TeX{} file server or from Springer-Verlag NTP department on
+request.
+\end{itemize}
+
+\noindent
+All other files come with the macro package {\em LJour1}.
+
+\subsubsection{Fonts}\label{fonts}
+
+We have included access to the AMS\footnote{American Mathematical
+Society} symbol fonts and the AMS Euler fonts in our macro package.
+These fonts contain many symbols used by mathematicians and are now
+available on a public domain basis, provided the publication where they
+are used mentions their use. You can order them on DOS diskettes if
+necessary.
+
+The tfm and pixel files of the fonts used by the style files must be
+present on your installation. For your convenience we have listed below
+the fonts used by this package. Either the CM or the PS list applies.
+
+\begin{petit}\noindent
+\vbox
+{\offinterlineskip \tabskip = 0pt
+{\halign{\strut
+#\enspace \hfill &
+\vrule width 0.2pt# &
+\hfill\enspace#\enspace \hfill &
+\vrule width 0.2pt# &
+\hfill\enspace#\enspace \hfill &
+\vrule width 0.2pt# &
+\hfill\enspace#\enspace \hfill &
+\vrule width 0.2pt# &
+\hfill\enspace#\enspace \hfill &
+\vrule width 0.2pt# &
+\hfill\enspace#\enspace \hfill &
+\vrule width 0.2pt# &
+\hfill\enspace#\hfill \cr
+\noalign{\hrule height 0.2pt}
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt}
+{\bf CM fonts} && 5\ts pt && 6\ts pt && 7\ts pt && 8\ts pt && 10\ts pt && 14.4\ts pt \cr
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt\hrule height 0.2pt}
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt}
+ cmr && $\times$ && $\times$ && $\times$ && $\times$ && $\times$ && --- \cr
+ && && && && &&5/700 && \cr
+ && && && && &&5/1000 && \cr
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt\hrule height 0.2pt}
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt}
+cmbx && $\times$ && $\times$ && $\times$ && $\times$ && $\times$ &&
+10/1440$^*$
+\cr
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt\hrule height 0.2pt}
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt}
+cmmi && $\times$ && $\times$ && $\times$ && $\times$ && $\times$ && --- \cr
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt\hrule height 0.2pt}
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt}
+cmsy && $\times$ && $\times$ && $\times$ && $\times$ && $\times$ && --- \cr
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt\hrule height 0.2pt}
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt}
+cmmib && --- && 10/640 && 10/700 && 10/833 && $\times$ && 10/1440 \cr
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt\hrule height 0.2pt}
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt}
+cmti && --- && --- && --- && $\times$ && $\times$ && 10/1440 \cr
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt\hrule height 0.2pt}
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt}
+cmtt && --- && --- && --- && $\times$ && $\times$ && ---\cr
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt\hrule height 0.2pt}
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt}
+cmbsy && --- && --- && --- && 10/833 && $\times$ && 10/1440\cr
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt\hrule height 0.2pt}
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt}
+cmex && --- && --- && --- && --- && $\times$ && ---\cr
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt\hrule height 0.2pt}
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt}
+cmbxti && --- && --- && --- && --- && --- && 10/1440\cr
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt\hrule height 0.2pt}
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt}
+msam && $\times$ && $\times$ && $\times$ && $\times$ && $\times$ && 10/1440\cr
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt\hrule height 0.2pt}
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt}
+msbm && $\times$ && $\times$ && $\times$ && $\times$ && $\times$ && 10/1440\cr
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt\hrule height 0.2pt}
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt}
+eufm && $\times$ && $\times$ && $\times$ && $\times$ && $\times$ && 10/1440\cr
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt\hrule height 0.2pt}
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt}
+cmcsc && 10/500 && 10/600 && 10/700 && 10/800 && $\times$ && 10/1440\cr
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt\hrule height 0.2pt}
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt}
+cmss && 8/625 && 8/750 && 8/875 && 8 && $\times$ && 10/1440\cr
+&&&&&&&&&&&& \cr
+\noalign{\hrule }}}}
+
+\smallskip\noindent $^*$ cmbx10 scaled 1440
+\end{petit}
+
+Using the PS fonts can be a bit tricky if you have never done it before.
+In the standard PS fonts the characters are arranged slightly
+differently from CM fonts, and you may run into trouble when trying to
+print accented letters. It is therefore necessary to work with a set of
+PS fonts that have their character positions remapped according to
+\TeX{} conventions. Also the names given to the PS fonts are not the
+same on all installations. At our site, the following naming conventions
+(as used by ArborText) apply, {\tt PSM} indicating that the fonts have
+been remapped for \TeX{}.
+
+\begin{description}[\tt PSMTIMBI]
+\item[\tt PSMTIMR] Times-Roman
+\item[\tt PSMTIMB] Times-Bold
+\item[\tt PSMTIMI] Times-Italic
+\item[\tt PSMTIMBI] Times-Italic-Bold
+\item[\tt PSMCOU] Courier
+\item[\tt PSMHLV] Helvetica
+\end{description}
+
+\noindent If the fonts have different names on your system, you will
+unfortunately have to use the CM fonts unless you are able to edit the
+file named {\tt fontdef.tex} to include the correct names. Note that
+more fonts are defined in this file than the ones mentioned above, but
+they are not needed for {\em LJour1}.
+
+\vbox{\noindent
+\begin{petit}\medskip
+{\offinterlineskip \tabskip = 0pt{\halign{\strut
+#\enspace \hfill &
+\vrule width 0.2pt# &
+\hfill\enspace#\enspace \hfill &
+\vrule width 0.2pt# &
+\hfill\enspace#\enspace \hfill &
+\vrule width 0.2pt# &
+\hfill\enspace#\enspace \hfill &
+\vrule width 0.2pt# &
+\hfill\enspace#\enspace \hfill &
+\vrule width 0.2pt# &
+\hfill\enspace#\enspace \hfill &
+\vrule width 0.2pt# &
+\hfill\enspace#\hfill \cr
+\noalign{\hrule}
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt}
+{\bf PS fonts} && at 5\ts pt && at 6\ts pt && at 7\ts pt && at 8\ts pt && at
+10\ts pt
+&& at 14\ts pt
+\cr
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt\hrule height 0.2pt}
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt}
+ psmtimr && $\times$ && $\times$ && $\times$ && $\times$ && $\times$
+&&
+--- \cr
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt\hrule height 0.2pt}
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt}
+psmtimb && $\times$ && $\times$ && $\times$ && $\times$ &&
+$\times$
+&&
+$\times$\cr
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt\hrule height 0.2pt}
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt}
+cmmi && $\times$ && $\times$ && $\times$ && $\times$ && $\times$ &&
+--- \cr
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt\hrule height 0.2pt}
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt}
+cmsy && $\times$ && $\times$ && $\times$ && $\times$ && $\times$ &&
+--- \cr
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt\hrule height 0.2pt}
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt}
+cmmib && --- && $\times$ && $\times$ && $\times$ && $\times$ &&
+$\times$ \cr
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt\hrule height 0.2pt}
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt}
+psmtimi && --- && --- && --- && $\times$ && $\times$ && $\times$\cr
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt\hrule height 0.2pt}
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt}
+psmcou && --- && --- && --- && $\times$ && $\times$ && ---\cr
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt\hrule height 0.2pt}
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt}
+cmbsy && --- && --- && --- && $\times$ && $\times$ && $\times$\cr
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt\hrule height 0.2pt}
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt}
+cmex && --- && --- && --- && --- && $\times$ && ---\cr
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt\hrule height 0.2pt}
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt}
+psmtimbi && --- && --- && --- && --- && --- && $\times$\cr
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt\hrule height 0.2pt}
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt}
+msam && $\times$ && $\times$ && $\times$ && $\times$ && $\times$ &&
+$\times$\cr
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt\hrule height 0.2pt}
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt}
+msbm && $\times$ && $\times$ && $\times$ && $\times$ && $\times$ &&
+$\times$\cr
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt\hrule height 0.2pt}
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt}
+eufm && $\times$ && $\times$ && $\times$ && $\times$ && $\times$ &&
+$\times$ \cr
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt\hrule height 0.2pt}
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt}
+cmcsc && $\times$ && $\times$ && $\times$ && $\times$ && $\times$ &&
+$\times$\cr
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt\hrule height 0.2pt}
+&&&&&&&&&&&& \cr
+\noalign{\vskip -6pt}
+psmhlv && $\times$ && $\times$ && $\times$ && $\times$ && $\times$ &&
+$\times$\cr
+&&&&&&&&&&&& \cr
+\noalign{\hrule }}}}
+\end{petit}}
+
+\section{Creating format files}
+\label{format}
+The package comes with the following files
+
+\begin{description}[\tt mmmmmmmmmm.mmm]
+\item[\tt read.me] General information on the package
+\item[\tt cljour1.ini] \verb|.ini| file for a format file using
+ CM fonts
+\item[\tt pljour1.ini] \verb|.ini| file for a format file using
+ PS fonts
+\item[\tt flplain.tex] Macro file
+\item[\tt ljour1.mac] Macro file
+\item[\tt fontdef.tex] Font definitions (NFSS)
+\item[\tt preload.tex] Copy of {\tt preload.min} (NFSS)
+\item[\tt xxxlfont.sty] Copy of {\tt oldlfont.sty} (NFSS)
+\item[\tt amsfont.sty] Macro file defining AMS fonts
+\item[\tt amssymb.sty] Style option defining AMS symbols
+\item[\tt ljour1.doc] \LaTeX\ source of the user's guide
+\item[\tt ljour1.ref] ``Reference card" listing all commands available
+\item[\tt *.dem] Various demo files for different journals
+\end{description}
+
+\noindent For reasons that are explained in Sect.~\ref{why} our macros
+must be used as a format file and not merely via a \verb|\documentstyle|
+statement.
+
+\paragraph*{Creating a format file} is done using the program
+\verb|initex|.
+
+1. Create a directory called {\tt ljour1} and copy all files from the
+package except the style options into this directory. The style option
+file has to be transfered into a directory that \TeX{} searches for
+input files.
+
+2. Decide for which language you want to create a format file and, for a
+language other than English, edit the file \verb|cljour1.ini| or
+\verb|pljour1.ini| so that it includes the correct hyphenation patterns.
+Ask your \TeX pert for the correct file name or consult the
+documentation of your \TeX\ implementation. English hyphenation patterns
+are the default setting.
+
+3. Make sure that all fonts required are on your hard disk. If
+necessary, install the NFSS and any fonts that are missing.
+
+4. Before creating a PS format file, check and if necessary correct the
+names of the PS fonts in the file {\tt fontdef.tex}.
+
+5. Run \verb|initex| with the file \verb|cljour1.ini| or
+\verb|pljour1.ini|. The exact syntax of this command depends on the
+implementation. If necessary increase the amount of font and/or main
+memory allocated by \TeX{}.
+
+After \verb|initex| has successfully completed its task, you will have a
+format file called \verb|cljour1.fmt| if you requested CM fonts and
+\verb|pljour1.fmt| if you requested PS fonts.
+
+6. You will want to create both a CM and a PS format file, the first
+for previewing and the second for the final run.
+
+7. After you have completed both format files you can remove the
+following files from your hard disk:\newline
+{\tt pljour1.ini}, {\tt cljour1.ini}, {\tt ljour1.mac}
+{\tt flplain.tex}\newline
+{\tt fontdef.tex}, {\tt preload.tex},
+{\tt xxxlfont.sty}, {\tt amsfont.sty}.
+
+\subsection*{3.1. Installing the fonts}
+
+For DOS installations you can have the program \verb|finstall| (to be
+found on the AMS fonts diskettes only, not in the macro package
+itself) install the AMS fonts for you. In all other cases you must copy
+the files from diskettes into the appropriate directories yourself.
+
+Do not forget that, in general, the printer or screen driver must be
+instructed how to find the additional pixel files. Most of the drivers
+have a configuration file that contains the names of the fonts available
+to the printer. The names of these fonts have to be added to this file.
+Please refer to your driver manual. The names normally given to the
+pixel files by the installation program are \\
+\verb|\pctex\pixel\pk|{\it nnn}\verb|\<fontname>.pk|, where {\it nnn\/} is
+a three-digit number indicating the size of the font.
+
+\section{Using the style file}
+\label{using}
+
+The {\it LJour1\/} style is an adaptation of the \LaTeX{} {\it
+article\/} style. Therefore you may use all {\it article\/} style
+commands to prepare your manuscript. This style creates a number of
+macros and redefines others. This may sometimes involve a change in
+syntax.
+
+Although all style specifications are already incorporated in the format
+file, the \verb|\documentstyle| command has to be entered as usual. This
+is done to prevent mismatching format file and style specifications.
+
+The top of your article file must thus contain the lines
+\begin{verse}
+\verb|\documentstyle{cljour1}| or \verb|\documentstyle{pljour1}|\\
+\verb|<any macro definitions you wish to make>|\\
+\verb|\begin{document}|\\
+\end{verse}
+
+\noindent%
+To create the DVI file you must then use a command similar to\\
+\verb|tex &cljour1 <filename>|\\
+or\\
+\verb|tex &pljour1 <filename>|\\
+
+\noindent
+Make sure that format file name and specified document style are the
+same!
+
+\subsection{Style options}
+As style options can substantially change the layout of an article, we
+suggest that you use them with caution. The style options treated below,
+however, are suitable for our macro package. If you need other style
+options, you must include them on the diskette when you finally submit
+your file.
+
+\subsubsection{Style options {\tt referee} and {\tt footinfo}}
+When first submitting your paper to the editor, please make a referee
+version printed in double line spacing. This is done with the style
+option {\tt referee}. Send this printout to the editor, but do not
+include the diskette at this stage. When the paper has been accepted and
+you have incorporated all necessary changes in your file, please remove
+the style option and create the final printout.
+
+Using style option \verb|footinfo| will generate footlines such as the
+one shown here:
+
+\medskip
+\hbox to \hsize{\small\tt\noindent
+Page: 11\hfill job:ljour1\hfill macro: cljour1\hfill date/time: 2-Mar-1993/12:41}
+
+\medskip\noindent%
+If you want to use both options, you must type \verb|referee| before
+\verb|footinfo|.
+
+\subsubsection{Style option {\tt leqno}}
+In the default setting, equation numbers are positioned at the right
+margin of the page. If your journal usually has them at the left margin,
+please use the style option \verb|leqno|.
+
+\subsubsection{Style option {\tt bibay}}
+Use this option if you want to reference by author's name and year of
+publication.
+
+\subsubsection{Style options {\tt deutsch}, {\tt german} and {\tt
+francais}}
+Some of our macros insert fixed phrases, such as {\it Theorem\/} or {\it
+Lemma\/}, into your text. In the default setting, these words are in
+English. If you publish a text in French or German, you can translate
+these words into the respective languages by including the option
+\verb|deutsch| or \verb|francais| respectively at the top of the file.
+Usually you will then also include an option like \verb|german| to ease
+input of accented letters etc.
+
+\subsubsection{Style option {\tt amssymb}}
+This option allows you to use the large number of special AMS symbols.
+Note, however, that this may cause your \TeX\ to run out of pool, i.e.
+the capacity for characters in names of control sequences.
+
+\subsection{The preamble}
+At the top of your file, a few commands must be entered to set things up
+correctly for the journal for which you are preparing an article.
+
+\subsubsection{Name of the journal} Specify the name of the journal with
+the command \\ \verb|\journalname{<name of journal>}|
+
+\subsubsection{Summary or Abstract?}
+In the default setting, the summary of your article will be prefixed
+with the run-in heading {\it Summary}. If, however, your journal uses
+{\it Abstract}, include the command
+\verb|\renewcommand{\abstractname}{Abstract.}| \\
+If no run-in heading is to be printed at all, type\\
+\verb|\renewcommand{\abstractname}{}|
+
+\subsubsection{Heading to the subject classification}
+This heading may be changed with the command \\
+\verb|\renewcommand{\subclassname}{{\it <heading>.}}|
+
+\subsection{Articles already coded with \TeX{} but without
+the \ljour{} style file}
+
+\TeX\ files submitted for publication but not using our style file will
+have to be adapted and rerun with our macro package and fonts, thus
+causing a delay in publication.
+
+\subsection{Words of advice}
+
+If your text or your own macros contain layout commands such as
+\verb|\vspace| or \verb|\newpage|, these should be taken out. (There may
+be exceptional occasions on which some of them can be used, but then
+only with the PS fonts.)
+
+Also, unless your article will be reproduced from your camera-ready
+pages, please do not use any ``exotic" fonts that might not be available
+at our typesetters' installation.
+
+Please do not change or override our macro definitions. If you submit a
+file that does not meet our layout requirements, in most cases your
+article will
+have to be typeset in the conventional way.
+
+\subsection{Sending the file to Springer-Verlag}
+
+Once your article has been accepted for publication and you have
+completed your work using this style file, please rerun it twice without
+the style option \verb|referee| and submit your own printout of the
+final version {\it together with the diskette\/} containing your \TeX\
+input (source) file and all style options you used {\em Please make sure
+that the text in the file and the printout is identical.\/} The
+following diskettes are acceptable:
+
+\begin{itemize}
+\item{}5.25$''$ diskette MS-DOS
+\item{}3.5$''$ diskette MS-DOS or Macintosh
+\end{itemize}
+
+\noindent {\it Please indicate clearly whether the diskette is in DOS or
+in Macintosh format.\/}
+
+\section{Editorial and stylistic conventions}
+\label{ed}
+
+\subsection{General considerations}
+
+If you have any reservations concerning your proficiency in English,
+please have your manuscript checked by a native speaker of English
+before you submit it.
+
+\subsection{Headings}\label{ed:heads}
+
+The main title, subtitle, and all headings should not be capitalized,
+except, of course, for the first word and any words which are always
+capitalized, such as proper names. Abbreviations and symbols should be
+typeset as in the text. Displayed titles have no end punctuation, but
+run-in headings do.
+
+\subsection{Capitalization}
+%
+\begin{description}[a)]
+\item[a)] The following should always be capitalized:
+
+Abbreviations and expressions in the text, such as Fig(s)., Table(s),
+Eq(s)., Sect(s)., Chap(s)., Paper, and Theorem, {\em when used with
+numbers}, e.g. Fig.\ts 3, Table 1, Paper III, Theorem 2.\\
+Please follow the special rules in Sect.~\ref{ed:math} for referring
+to equations.
+
+\item[b)] The following should {\it not\/} be capitalized
+
+\begin{itemize}
+\item The words figures(s), table(s), equation(s), section(s),
+ chapter(s), paper, theorem(s) in the text when used without an
+ accompanying number.
+\item Figure legends and table captions except for names, certain
+ abbreviations, and the first word.
+\end{itemize}
+\end{description}
+
+\subsection{Abbreviation of words}\label{ed:math}
+%
+\begin{description}[a)]
+\item[a)] The following {\it should\/} be abbreviated when they appear
+in running text followed by a number {\it unless\/} they come at the
+beginning of a sentence:
+
+\item[]Chap., Fig., Eq.; e.g. The results are depicted in Fig.\ts 5.
+Figure 9 reveals that $\ldots$\\
+{\it Please note:\/} Equations should be referred to by the abbreviation
+Eq. and the respective number in parentheses, e.g. Eq.\ts (14).\\
+However, when the reference comes at the beginning of a sentence, the
+unabbreviated word Equation should be used, e.g. Equation (14) shows
+that $\ldots$ However, Eq.\ts (15) makes it clear that $\ldots$
+
+\item[b)]If abbreviations of names or concepts are used throughout the
+text, they should be explained at first mention, e.g. plurisubharmonic
+(PSH) functions, strong optimization (SOPT) problem. If these names are
+also used in the summary or abstract, they should be explained there as
+well.
+\end{description}
+
+\subsection{Foreign words and phrases}
+%
+Foreign words that have not come into general use should be italicized.
+If a word or phrase or its abbreviation can be found in the main body of
+{\it Webster's\/} (and this also applies to British usage), it and its
+abbreviation are considered to be in general use and are not italicized.
+For example, et al., cf., e.g., a priori, in situ, and bremsstrahlung
+should appear in roman.
+
+\subsection{Punctuation}
+%
+Punctuation of equations will be dealt with in Sect.~\ref{math}.
+Not only headings, but also figure legends and table captions should
+have no end punctuation.
+
+\subsection{Fine tuning of the text}
+%
+The following should be used to improve the readability of the text:
+\medskip
+%%
+\begin{description}[\tt \char"20--\char"20]
+\item[\tt\char92,] a thin space, e.g. in numbers with more than 5
+ digits; a line division will not be made following
+ this space.
+\item[\tt-] hyphen; one stroke, {\it no\/} space at either end.
+\item[\tt--] en-dash; two strokes, {\it no\/} space at either
+ end. Please note: in \LaTeX, \verb|---| gives an
+ em-dash ``---"; Springer does not use this, but
+ rather the shorter en-dash {\it with\/} spaces, i.e.
+\item[\tt \char"20--\char"20]
+ space, two strokes, for an en-dash, space $\to $
+ ``Springer em-dash".
+\item[\tt\char"24-\char"24]
+ minus, in the text {\it only\/}.
+\item[\tt\char"7E] tilde between parts of names or between numbers and
+ units, producing a hard space
+\end{description}
+%%
+Their use is best explained in the following example.
+\medskip\noindent
+%
+\paragraph{Sample input}
+
+\begin{verbatim}
+20\,000~km, 1\,000\,000~s, NGC 468\,324
+1950--1985, pp.~11--21
+this -- written on a computer -- is now printed
+signal-to-noise ratio, early-type, metal-poor,
+non-relativistic
+$-30$~K, $-5^{\circ}$C
+Dr.~h.c.~Rockefeller-Smith and Prof.~Dr.~Mallory
+\end{verbatim}
+
+\paragraph{Sample output}\leavevmode
+
+\medskip\noindent
+20\,000~km, 1\,000\,000~s, NGC 468\,324 \\
+1950--1985, pp.~11--21 \\
+this -- written on a computer -- is now printed \\
+signal-to-noise ratio, early-type, metal-poor, non-relativistic\\
+$-30$~K, $-5^{\circ}$C \\
+Dr.~h.c.~Rockefeller-Smith and Prof.~Dr.~Mallory
+
+\section{General rules for coding mathematics}
+\label{math}
+
+For mathematical expressions and tables please use standard \LaTeX.
+
+If there are long equations in the text that extend beyond the type area
+(12.2 cm), insert an \verb|\linebreak[0]| where the equation can be
+divided. Please refer to your \LaTeX{} documentation on how to typeset
+displayed equations.
+
+Remember to check your journal to see whether equation numbers
+have to be set at left or the right margin and include the style option
+\verb|leqno| where necessary.
+
+If you wish to start a new paragraph immediately after a displayed
+equation, insert a blank line to produce the required indentation. If
+there is no new paragraph, either do not insert a blank line, or insert
+a blank line and type \verb|\noindent| before continuing the text.
+
+If you want to structure the source text for better readability please
+use blank lines beginning with a percentage sign (\verb|%|) at such
+places.
+
+Please punctuate a displayed equation in the same way as any other
+written statement. Note, however, that any punctuation should be within
+or immediately after the displayed equation, never after the equation
+number. Please insert \verb|\;| before the punctuation sign to supply a
+little extra space.
+
+Note that the size of the parentheses or other delimiter symbols used in
+equations should ideally match the height of the formulas being
+enclosed. This is automatically taken care of by the following \LaTeX\
+commands, e.g. \verb|\left(| or \verb|\left[| and \verb|\right)| or
+\verb|\right]| (see {\it\LaTeX{} user's guide \& reference manual\/} p.
+48f.
+
+\subsection*{6.1. Italic and roman in math mode}
+
+In math mode \LaTeX\ treats all letters as though they were mathematical
+or physical variables; hence they are typeset in italics. However, for
+certain components of equations this would be incorrect and therefore
+coding in roman is required. The following elements of an equation
+should be set in roman by using the command \verb|{\rm ...}|.
+
+\begin{description}[a)]
+\item[a)]Text. Since \LaTeX\ ignores interword spaces in math mode, use
+the sequence \verb|\mbox{\rm <text>}| to typeset more than one word.
+
+\item[b)]Subscripts and superscripts where these are merely labels and
+not in themselves variables, e.g. $T_{\rm eff}$ not $T_{eff}$, $T_{\rm
+K}$ not $T_K$ (K = Kelvin), $m_{\rm e}$ not $m_e$ (e = electron).
+However, do not use roman if the sub-/superscripts represent variables,
+e.g. $\sum^n_{i=1} a_i$.
+
+\item[c)]Please ensure that {\it abbreviations\/} such as Ord, Var, GL,
+SL, Hom, Aut, Ker, sgn, const. etc. and {\it physical units\/} (e.g. pc,
+erg, s$^{-1}$, K, W, m$^{-2}$, Hz$^{-1}$) in math mode are always set in
+roman type. On p. 171 of the \LaTeX{} manual and further pages
+referenced there, you will find common math
+functions to be used in math mode such as \verb|\sin|, \verb|\cos|,
+\verb|\exp|, \verb|\log|.
+
+\item[d)]``e" used as ``exponential function", and ``i" used as
+``imaginary unity". Here we provide the macros \verb|\E| and
+\verb|\I|.\\ e.g. \verb|$d z/d x = \E^x+\I x$| yields $d z/d x = \E^x +
+\I x$.
+
+\item[e)]Chemical symbols and formulas should be set in roman, e.g. Fe
+not $Fe$, H$_2$O not $H_2O$, H$\alpha $ not $H\alpha $.
+\end{description}
+
+\section{Special fonts and symbols}
+\label{sym}
+
+Use the following commands to switch to other typefaces.
+%
+\begin{description}[Special roman]
+
+\item[Vectors] Vectors are typed using the command\\
+\verb|\vec{<symbol>}|. \\
+Example:
+\verb|$\vec{A}\times\vec{B}\times\vec{\Omega}$|\\
+yields $\vec A \times \vec B\times\vec{\Omega}$\\
+or \verb|$\vec{A}^T \otimes\vec{\hat D}$|
+yields $\vec A^T\otimes \vec{\hat D}$
+
+\item[Tensors] Ordinary second-order tensors (without indices)
+are typed with the command \verb|\tens{<symbol>}|.\\
+Example: \verb|$\tens{A}$| yields $\tens{A}$
+
+\item[Gothic] The command \verb|\frak{<symbol>}| requests
+$\frak{fraktur}$ or $\frak{gothic}$ letters.
+
+\item[Script] Use the command \verb|{\cal <symbol>}| to
+type script symbols ${\cal ABC}$, which will be replaced by a more
+elegant font during phototypesetting.
+
+\item[Sans serif] If no tensors are needed, use the
+command \verb|{\sf <symbol>}| to get sans serif letters. Note the
+different syntax.\\
+Example: \verb|{\sf A}| yields {\sf A}.
+
+\item[Special roman] Use the command \verb|{\Bbb <symbol>}|
+to get special roman letters from the AMS font.
+Example: \verb|{$\Bbb R$}| yields $\Bbb R$.
+
+\item[AMS symbols] Further symbols from the AMS {\it msam\/} and {\it
+msbm\/} fonts may be accessed via the usual commands as listed in the
+AMS-\TeX\ guide.\footnote{Note that you then have to use the style
+option {\tt amssymb} or define the necessary commands in the preamble.}
+
+\end{description}
+
+\medskip\noindent
+Please note that \verb|\frak|, \verb|\tens|, \verb|\vec|, \verb|\Bbb|
+and \verb|\cal| may only be used in math mode and that some symbols are
+not available in the size necessary for the main title. These symbols
+are set in text size and will be stripped in later after
+phototypesetting.
+
+\section{The head of an article}
+\label{top}
+
+\subsection{A template for the beginning of an article}
+%
+\begin{verbatim}
+\documentstyle{<format>}
+\journalname{<name of journal>}
+<further material for the preamble>
+\begin{document}
+\headnote{<text>}
+\title{<your title>}
+\titlerunning{<short form of title>}
+\subtitle{your subtitle>}
+\author{<name of first author> \and <name of second author> ... }
+\authorrunning{<names of first author> et al.}
+\institute{<name and address of first institute> \and
+<name of second...>}
+\dedication{<dedication>}
+\mail{<name of corresponding author>}
+\maketitle
+\end{verbatim}
+
+\noindent%
+The \verb|.dem| files demonstrate a rather complicated case for the
+head of an article.
+
+\subsection{Headnote}
+%
+If your paper is intended for a particular section of the journal, e.g.
+{\it Research article\/}, the section heading should be inserted in the
+form \verb|\headnote{<text>}|. This element is optional.
+
+\subsection{The title}
+%
+For the title and subtitle of your article there are the following two
+commands:
+
+\smallskip\noindent
+\verb|\title{<your title>}|\\
+\verb|\subtitle{<your subtitle>}| (optional)
+
+\medskip\noindent
+Use \verb|\\| to split a long \verb|\title| or \verb|\subtitle|.
+
+\subsection{Name(s) of the author(s)}
+%
+The preferred form for each name is: initial(s) of the forename(s)
+followed by the family name. Use the command
+\verb|\author{<author's name>}|.
+If there is more than one author the order is optional. The names must
+be separated by the command \verb|\and|.
+
+If the authors have different affiliations, each name has to be
+followed by
+\begin{verbatim}
+\inst{<number>}
+\end{verbatim}
+Numbers referring to different addresses should be attached to each
+author. If there is more than one \verb|\inst| to an author, please
+separate them by \verb|\fnmsep|.
+
+If there are three or more authors, the running title should be changed
+as described in the next subsection.
+
+\subsection{Changing the running heads}
+
+Normally the running heads are produced automatically by the command
+\verb|\maketitle| using the contents of \verb|\title| and
+\verb|\author|. If the result is too long for the page header (running
+head) our macro will produce an error message and you will be asked to
+supply a shorter version. This is done using the
+syntax
+
+\smallskip\noindent \verb|\titlerunning{<text>}|\\
+\verb|\authorrunning{<name of first author> et al.}|
+
+\smallskip\noindent
+These commands must be entered before \verb|\maketitle|.
+
+\subsection{Affiliations}
+Addresses are set with the command \verb|\institute|. If there is more
+than one address, the entries are numbered automatically with
+\verb|\and|, in the order in which you type them. Please make sure that
+the numbers match those placed next to to the authors' names.
+
+\begin{verbatim}
+\institute{<name of the first institute>
+\and <name of the second institute> ...}
+\end{verbatim}
+(Unlike usual \LaTeX{}, in our style the \verb|\and| command is also
+used within the \verb|\institute| command.)
+
+\subsection{Footnotes to the title block}
+%
+If footnotes to the title or subtitle are needed, use the command
+
+\medskip\noindent
+\verb|\thanks{<text of footnote>}|
+
+\medskip \noindent instead of the ordinary footnote command. These
+footnotes are marked by asterisks ($\star$). If you need more than one
+consecutive footnote, use \verb|\fnmsep| to typeset the comma separating
+the asterisks.
+
+This macro is also used if you have to give the present address of an
+author to be typeset like a footnote at the bottom of the page.
+
+\noindent{\it Example:}
+\verb|R. Muller\thanks{{\it Present address:\/} Malibu, CA}|
+
+\subsection{Dedication}
+%
+If you wish to dedicate your article to somebody, you can do so by
+specifying \verb|\dedication{<dedication>}|
+
+\subsection{Dates}
+
+Although the dates of receipt and acceptance of your manuscript will be
+fixed by the editors and inserted by the publisher, please make the
+following input: \verb|\date{Received: <date> / Accepted: <date>}|
+
+The date is inserted later, usually in the format {\tt day month year}.
+
+\medskip\noindent
+{\em Examples:}
+
+\smallskip\noindent
+\verb|\date{Received: 2 June 1988 / Accepted: 22 September 1988}|\\
+\verb|\date{Received: 4 December 1990 / Accepted: 19 March 1991}|
+
+\subsection{Typesetting the title block}
+%
+After having entered the commands described so far in this section,
+please enter the command\\
+\verb|\maketitle| \\
+This command will format the complete title of your article. If you
+leave it out, no title will be printed.
+
+\subsection{Abstract/Summary}
+%
+Type the abstract/summary using the syntax
+\begin{verbatim}
+\begin{abstract}
+<text of your abstract (summary)>
+\end{abstract}
+\end{verbatim}
+
+\noindent%
+The word {\it Summary\/} (or whatever has been defined with
+\verb|\abstractname|) is automatically provided by the macros.
+Summaries should only have one paragraph.
+
+\subsection{Key words or subject classification}
+
+Here you have the syntax\\
+\verb|\subclass{<Classifications>}| or \\
+\verb|\keywords{<keyword> -- <keyword> -- <keyword> ...}| \\
+(whichever applies to your journal). Please refer to the demo file or a
+recent issue of the journal to establish which of the two applies to
+your article.
+
+\subsection{Translation of title and summary}
+
+If your article is not written in English, you may wish or be required
+to give a translation of title, summary and keywords. In this case,
+please insert
+
+\begin{verbatim}
+\transtitle{<title in English>}
+\begin{transsummary} <English translation of summary>
+\end{transsummary}
+\transkey {<key words in English>}
+\end{verbatim}
+
+\subsection{Differences between journals}\label{diff:jour}
+
+Not all the features described in Sect.\,\ref{top} may apply to your
+journal. Some may be obligatory, others only optional or even not
+allowed. Please check the demo file for your journal or a recent printed
+issue if you are not sure what to use.
+
+\section{Headings}
+\label{head}
+
+For rules on capitalization and punctuation see Sect.~\ref{ed:heads}.
+Typeset headings using the following commands:
+
+\medskip\noindent
+\verb|\section{<text>}|\\
+\verb|\subsection{<text>}|\\
+\verb|\subsubsection{<text>}|\smallskip
+
+\noindent%
+If a long title of order 1 through 3 has to be divided please use the
+command \verb|\\|.
+
+\paragraph{Remark:} Please avoid using footnotes in headings.
+
+\section{Footnotes}
+\label{foots}
+
+Footnotes should have end punctuation. Footnotes within the text should
+be coded: \\
+\verb|\footnote{<text>}| ({\it no\/} blank before \verb|\footnote|)
+
+\section{Lists}
+\label{lists}
+
+Simple lists are done using:
+\begin{verbatim}
+\begin{itemize}
+\item <first item>
+\item <second item>
+...
+\begin{itemize}
+\item <first item of sublist>
+\end{itemize}
+\item <last item of main list>
+\end{itemize}
+\end{verbatim}
+
+For enumerated lists please code:
+\begin{verbatim}
+\begin{enumerate}
+\item <first item>
+\item <second item>
+\item ...
+\begin{enumerate}
+\item <first item of sublist>
+\end{enumerate}
+\item <last item of main list>
+\end{enumerate}
+\end{verbatim}
+
+For descriptions, use the description environment (see \LaTeX{} book p.
+26 f.). We have enhanced this environment by an optional parameter,
+which lets you specify the largest item label to appear within the
+list. If you code
+
+\begin{verbatim}
+\begin{description}[<largelabel>]
+\item[<label1>] <text1>
+\item[<label2>] <text2>
+\end{description}\end{verbatim}
+\noindent%
+the texts of all items are indented by the width of \verb|<largelabel>|
+and the item labels are typeset flush left within this space. Note: The
+optional parameter will work only two levels deep.
+
+\paragraph{Sample input}
+\begin{verbatim}
+\begin{description}[Fact 2.4.(S).]
+\item[Fact 2.1.]
+A non-t.t. $U$-rank 1 type which is isolated among non-algebraics
+has infinite multiplicity.
+\item[Fact 2.2.]
+Let $A \subseteq B$, $S(A)\not\in p \subseteq q \in S(B)$. Suppose
+$p$ and $q$ are non-t.t. and $U$-rank 1.
+\item[Fact 2.3.]
+Let $p \in S(A)$ be an isolated and non-t.t. $U$-rank 1 type. If
+$\models p$, then $p$ has infinitely many solated and
+non-algebraic extensions over $Aa$.
+\item[Fact 2.4.(S).]
+Let every $b \in \bar b$ have $U$-rank 1 and suppose the weakly
+minimal type $t(a/\bar b)$ which ${\rm dnf} /\emptyset$ is not
+isolated (and thus of finite multiplicity).
+\end{description}
+\end{verbatim}
+
+\paragraph{Sample output}
+\begin{description}[Fact 2.4.(S).]
+\item[Fact 2.1.]
+A non-t.t. $U$-rank 1 type which is isolated among non-algebraics has
+infinite multiplicity.
+\item[Fact 2.2.]
+Let $A \subseteq B$, $S(A)\not\in p \subseteq q \in S(B)$. Suppose $p$
+and $q$ are non-t.t. and $U$-rank 1. Further, let mult $(q) = \infty$.
+\item[Fact 2.3.]
+Let $p \in S(A)$ be an isolated and non-t.t. $U$-rank 1 type. If
+$\models p$, then $p$ has infinitely many solated and non-algebraic
+extensions over $Aa$.
+\item[Fact 2.4.(S).]
+Let every $b \in \bar b$ have $U$-rank 1 and suppose the weakly minimal
+type $t(a/\bar b)$ which ${\rm dnf} /\emptyset$ is not isolated (and
+thus of finite multiplicity).
+\end{description}
+
+\section{Paragraphs in small print}
+\label{pets}
+
+The syntax \verb|\begin{petit} <text> \end{petit}| is used for
+paragraphs in small print (petit), employed for passages in the text
+that the reader may disregard upon first reading or for exercises.
+
+\section{Mini-environments such as lemmas and theorems}
+\label{lemmas}
+
+To typeset things such as definitions, examples, and theorems
+a number of predefined environments are available:
+
+{\it claim\/}, {\it conjecture\/}, {\it corollary\/},
+{\it definition\/}, {\it example\/}, {\it exercise\/}, {\it lemma\/},
+{\it note\/}, {\it problem\/}, {\it property\/}, {\it proposition\/},
+{\it question\/}, {\it solution\/}, {\it theorem\/}, {\it proof\/}
+and {\it remark\/}.
+
+The words ``{\bf Theorem}", ``{\bf Lemma}", ``{\bf Corollary}",
+``{\bf Definition}", ``{\bf Pro\-posi\-tion}" etc. are printed in
+{\bf boldface}, followed by the formulation in {\it italics}. The words
+``{\it Proof\/}", ``{\it Remark\/}", ``{\it Example\/}" etc. are printed
+in {\it italics\/} with the formulation in ordinary (roman) typeface.
+
+These environments have the following syntax:
+\begin{verbatim}
+\begin{<name of environment>}[<optional material>]
+<text for that environment>
+\end{<name of environment>}
+\end{verbatim}
+
+Note that the labeling as well as the counting is done by \LaTeX. The
+fonts for the label and the text are predefined. In our style unlike
+standard \LaTeX{} these fonts may however vary from one environment to
+another. The optional material typed in angular brackets is appended to
+the label directly after the numbering. In this case no colon is set
+after the number, but after the optional material. Please refer also to
+the \LaTeX{} book p. 58 f.
+
+\paragraph{Sample input}
+\begin{verbatim}
+\begin{conjecture}[L. Breiman] There is no such thing as a free
+lunch. \end{conjecture}
+\end{verbatim}
+
+\paragraph{Sample output}
+\begin{conjecture}[L. Breiman] There is no such thing as a free lunch.
+\end{conjecture}
+
+When using the style options \verb|deutsch| or \verb|francais| the
+captions for these predefined environments are translated into the
+respective language.
+
+\subsection*{13.1 Defining your own environments}
+
+We have changed the syntax of the commands \verb|\newtheorem|
+and \verb|\newtheorem*| used to define additional environments.
+
+\noindent%
+\verb|\newtheorem| can be used in two ways.
+
+\subsubsection*{13.1.1 Method 1}
+\begin{verbatim}
+\newtheorem{<env_nam>}{<caption>}[<within>]
+{<cap_font>}{<body_font>}
+\end{verbatim}
+
+\noindent
+This defines a new environment \verb|<env_nam>| which prints the caption
+\verb|<caption>| in the font \verb|<cap_font>| and the text itself in
+the font \verb|<body_font>|. The environment is numbered beginning anew
+with every new section unless you specify something else with the
+optional parameter \verb|<within>|.
+
+\paragraph{Example} \leavevmode\\
+
+\medskip\noindent
+\verb|\newtheorem{joke}{Joke}[subsection]{\bf}{\rm}|
+
+\noindent defines a new environment called \verb|joke| which prints the
+caption {\bf Joke} in boldface and the text in roman. The jokes are
+numbered starting from 1 at the beginning of every subsection with the
+number of the subsection preceding the number of the joke e.g. 7.2.1 for
+the first joke in subsection 7.2.
+
+\subsubsection*{13.1.2. Method 2}
+Sometimes you will want to create an environment that shares its counter
+with another environment, say {\it main theorem\/} to be numbered like a
+{\it theorem\/}. In this case, use the syntax
+\begin{verbatim}
+\newtheorem{<env_nam>}[<num_like>]{<caption>}
+{<cap_font>}{<body_font>}
+\end{verbatim}
+
+\noindent%
+Here the environment with which the new environment should share its
+counter is specified with the optional argument \verb|[<num_like>]|.
+
+\paragraph{Sample input}
+\begin{verbatim}
+\newtheorem{mainth}[theorem]{Main theorem}{\bf}{\it}
+\begin{theorem} The early bird gets the worm. \end{theorem}
+\begin{mainth} The early worm gets eaten. \end{mainth}
+\end{verbatim}
+
+\paragraph{Sample output}
+\newtheorem{mainth}[theorem]{Main theorem}{\bf}{\it}
+\begin{theorem} The early bird gets the worm. \end{theorem}
+\begin{mainth} The early worm gets eaten. \end{mainth}
+
+\subsubsection*{13.1.3. Unnumbered environments}
+If you wish to have an unnumbered environment, please
+use the syntax \\
+\verb|\newtheorem*{<env_nam>}{<caption>}{<cap_font>}{<body_font>}|
+
+\subsubsection*{13.1.4. Articles in a language other than English}
+Please note that unlike the headings of the predefined environments
+those of your newly defined environments will not be automatically
+translated when you switch to another language using the document style
+options \verb|[...deutsch...]| or \verb|[...francais...]|. You will have
+to define new environments with translated captions or change the
+English captions with:\\
+\verb|\renewcommand{<env_nam>name}{<translated caption>}|
+
+\smallskip\noindent
+{\it Example:\/} \verb|\renewcommand{counterexamplename}{Gegenbeispiel}|
+
+\section{Listings of computer programs}
+\label{verbs}
+
+Authors sometimes wish to include portions of program listings or
+mention program commands in their articles. These are normally set in
+typewriter font. Printing a short command string of just a few words
+inside a paragraph is done with the command \verb@\verb|<text>|@.
+Everything between the two vertical lines \verb@|...|@ is printed in
+typewriter font. If the text itself contains the character ``\verb@|@'',
+any other character that is not part of the text may be used as
+delimiter instead. Thus \verb@\verb|$a+b$|@ produces \verb|$a+b$| and
+\verb,\verb@|$a+b$|@, produces \verb@|$a+b$|@.
+
+Please do not use \verb|\verb*| as this command might not work properly
+with PS fonts.
+
+For small portions of a program where the line breaks should be
+preserved, please use the {\tt verbatim} environment. Again, please do
+not use the environment {\tt verbatim*}.
+
+\section{Figures}
+\label{figs}
+
+The final positions of figures and tables should be fixed when the text
+is complete.
+
+Figure coding should be inserted as a separate paragraph near the place
+where the figure is first mentioned in the text. If you are not
+satisfied with the position \LaTeX{} chooses for the figure, try moving
+its input a little towards the top of the file. The figures will be
+numbered sequentially using arabic numerals. If your figure is narrower
+than the width of the text, please do not try to fill the empty space
+with text.
+
+{\it The figures\/} (line drawings, halftones or combinations of the
+two) {\it should not be pasted into your laser printer output.\/} They
+should be enclosed separately in camera-ready form (original artwork,
+glossy prints, photographs and/or slides). Computer-drawn figures are
+acceptable provided they are of comparable quality. Lines and curves
+must be smooth. The lettering should be suitable for reproduction, and
+after reduction the capital letters should be at least 1.8\ts mm and not
+more than 2.5\ts mm in height. Check that lines and other details are
+uniformly black and that the lettering on figures is clearly legible.
+
+To leave the desired amount of space for the height of each figure,
+please use the coding given below. To generate the necessary amount of
+white space for the figure, you can choose between the commands
+\verb|\vspace <height>| and \verb|\picplace{<height>}|, the latter
+drawing a frame of the height you specified. The necessary
+additional empty space above (at least 1\ts cm) and below (at least
+0.5\ts cm) the figure will be inserted automatically.
+
+See also Sect. 3.5.1 on p.59 in the \LaTeX{} manual.
+
+{\it Important:\/} The figure, including the legend, must not exceed
+19.6\ts cm in height. Longer figures will be swallowed by \LaTeX{}
+without warning.
+
+{\samepage
+\subsection{One figure}
+\paragraph{Syntax}
+\begin{verbatim}
+\begin{figure}
+\picplace{<height>cm}
+\caption[]{<text of figure legend>}
+\end{figure}\end{verbatim}} %end of scope for \samepage
+
+\paragraph{Sample input}
+\begin{verbatim}
+\begin{figure}
+\picplace{1cm}
+\caption[]{This is a figure legend}
+\end{figure}\end{verbatim}
+
+\begin{figure}[h]
+\picplace{1cm}
+\caption[]{This is a figure legend}
+\end{figure}
+
+
+\subsection{Two figures side by side}
+
+If you have two figures that you want to insert side by side and their
+total width does not exceed that of the type area (12.2 cm), then please
+code:
+
+\begin{verbatim}
+\begin{figure}
+\picplace{<height>cm}
+\firstcaption{<legend of first figure>}
+\secondcaption{<legend of second figure>}
+\end{figure}\end{verbatim}
+where \verb|<height>| is the height of the taller figure.
+
+\paragraph{Sample input}
+\begin{verbatim}
+\begin{figure}
+\picplace{1 cm}
+\firstcaption{Snowman in Iceland}
+\secondcaption{Lemon ice-cream on a white tablecloth}
+\end{figure}\end{verbatim}
+
+\begin{figure}
+\picplace{1 cm}
+\firstcaption{Snowman in Iceland}
+\secondcaption{Lemon ice-cream on a white tablecloth}
+\end{figure}
+
+\subsection{Two figures side by side with legends one below the other}
+
+If the amount of text in the legends of two figures (to be placed side
+by side) greatly differs, please use the following coding:
+
+\paragraph{Sample input}
+\begin{verbatim}
+\begin{figure}
+\picplace{1 cm}
+\caption{Legend of first figure}
+\caption {This is the extremely long legend of the second figure
+and should therefore be typeset using the full width of the type
+area. For typographical and aesthetic reasons it would be
+unacceptable if these legends were set next to one another in two
+columns, with a 2-line legend for the first figure and a 16-line
+legend for the second. Therefore we suggest that the legends for
+the two figures should be placed one below the other. It is not
+necessary to place the figure numbers below or beside the two
+figures because it should be clear that the left one is the first
+figure and the right one the second}
+\end{figure}
+\end{verbatim}
+
+\begin{figure}
+\picplace{1 cm}
+\caption{Legend of first figure}
+\caption {This is the extremely long legend of the second figure and
+should therefore be typeset using the full width of the type area. For
+typographical and aesthetic reasons it would be unacceptable if these
+legends were set next to one another in two columns, with a 2-line
+legend for the first figure and a 16-line legend for the second.
+Therefore we suggest that the legends for the two figures should be
+placed one below the other. It is not necessary to place the figure
+numbers below or beside the two figures because it should be clear that
+the left one is the first figure and the right one the second}
+\end{figure}
+
+\section{Tables}
+\label{tables}
+
+Table captions should be treated in the same way as figure legends,
+except that the table captions appear {\em above\/} the tables. The
+tables are also numbered sequentially (using arabic numerals).
+
+Table columns should be set flush left. Vertical lines are normally not
+necessary and should only be inserted in exceptional cases for the sake
+of clarity.
+
+For further information you will find a complete description of the
+table and tabular environment on p.\,63 f. and p.\,182 of the \LaTeX{}
+manual.
+
+{\it Important:\/} The height of each table, including the caption, must
+not exceed 19.6~cm. Tables exceeding this limit will be swallowed by
+\LaTeX.
+
+\subsection{Tables coded with \LaTeX}
+%
+Use the following standard syntax:
+
+\paragraph{Sample input}
+\begin{verbatim}
+\begin{table}
+\centering
+\caption[ ]{Critical $N$ values}
+\begin{tabular}{llllll}
+\hline\noalign{\smallskip}
+$\Msun$ & $beta_{0}$ & $T_{\rm c6}$ & $\gamma$ &
+$N_{\rm crit}^{\rm L}$ & $N_{\rm crit}^{\rm Te}$\\
+\noalign{\smallskip}\hline\noalign{\smallskip}
+ 30 & 0.82 & 38.4 & 35.7 & 154 & 320 \\
+ 60 & 0.67 & 42.1 & 34.7 & 138 & 340 \\
+120 & 0.52 & 45.1 & 34.0 & 124 & 370 \\
+\noalign{\smallskip}\hline
+\end{tabular}
+\end{table}
+\end{verbatim}
+
+\begin{table}
+\centering
+\caption[ ]{Critical $N$ values}
+%renewcommand{\arraystretch}{1.2}
+\begin{tabular}{llllll}
+\hline\noalign{\smallskip}
+$\Msun$ & $\beta_{0}$ & $T_{\rm c6}$ & $\gamma$ & $N_{\rm crit}^{\rm L}$
+ & $N_{\rm crit}^{\rm Te}$\\
+\noalign{\smallskip}\hline\noalign{\smallskip}
+ 30 & 0.82 & 38.4 & 35.7 & 154 & 320 \\
+ 60 & 0.67 & 42.1 & 34.7 & 138 & 340 \\
+120 & 0.52 & 45.1 & 34.0 & 124 & 370 \\
+\noalign{\smallskip}\hline
+\end{tabular}
+%renewcommand{\arraystretch}{1}
+\end{table}
+
+\subsection{Tables not coded with \LaTeX}
+
+If you do not wish to code your table using \LaTeX\ but prefer to have
+it reproduced separately, proceed as for figures and use the following
+coding:
+
+\begin{verbatim}
+\begin{table}
+\caption[]{<text of caption>}
+\picplace{<height> cm}
+\end{table}
+\end{verbatim}
+
+\paragraph{Sample input}
+
+\begin{verbatim}
+\begin{table}
+\caption[]{Example of a table not coded with \LaTeX}
+\picplace{1 cm}
+\end{table}
+\end{verbatim}
+
+\begin{table}
+\caption[]{Example of a table not coded with \LaTeX}
+\picplace{1 cm}
+\end{table}
+
+\section{Acknowledgements}
+\label{ack}
+
+The command
+\begin{verbatim}
+\begin{acknowledgement}We thank A.\,Einstein for many helpful
+discussions.\end{acknowledgement}
+\end{verbatim}
+will print
+\begin{acknowledgement}We thank A.\,Einstein for many helpful
+discussions.\end{acknowledgement}
+
+\section{Appendix}
+\label{app}
+
+If you enter the command \verb|\appendix|, the following sections will
+be numbered with capital letters.
+
+\section{References}
+\label{refs}
+
+There are three reference systems available; only one, of course, should
+be used. Please refer to the {\it Instructions for Authors\/} as to
+which version is used in your journal. With each system (by author and
+year, by number only, or by letter or letter and number) a reference
+list, preferably headed ``References" and containing all citations
+appearing in the text, should be included at the end of your article.
+
+Please refer to p.\,72 ff. and p.\,187 ff. of the \LaTeX{} manual for
+overall information on the reference environment. We have added a new
+mandatory argument to the bibliography environment, namely the title of
+the reference section.
+
+Begin your bibliography with the command
+
+\smallskip\noindent
+\verb|\begin{thebibliography}[<label>]{<title>}|
+
+\smallskip\noindent
+where \verb|<title>| is something like {\tt References} and
+\verb|<label>| is the widest label (number or letter combination) to be
+used in the reference list. This argument is necessary to adjust the
+amount of indentation for wide labels. In the default setting the
+standard indentation for paragraphs is used.
+
+\subsection{References by number or by letter and number}
+
+Using standard \LaTeX{} syntax, references are cited in the text either
+by numbers or by the author's initials plus a sequence number where
+necessary. This number or letter/number combination is enclosed in
+square brackets, e.g. [1], [2], [BG], [GP\,1]. See p.\,72 ff. of the
+\LaTeX{} manual for details.
+
+The reference list is then either organized alphabetically or sorted
+according to the sequence of the citation in the text (the latter
+applies to citation by number only).
+
+\subsection{Author-year system}
+
+If you want to reference by author's name and year of publication, you
+have to use the style option \verb|bibay|. This changes the syntax of
+the command \verb|\bibitem|.
+
+References are cited in the text by name and year in parentheses, e.g.
+(Smith 1970, 1980), (Ekeland et al. 1985, Theorem 2), (Jones and Jaffe
+1986; Farrow 1988, Chap.\, 2), or with only the year in parentheses if
+the name is part of the sentence, e.g. Ekeland et al. (1985, Sect.\,
+2.1). The reference list should contain all citations that appear in the
+text, ordered alphabetically by surname (with initials following). If
+there are several works by the same author(s) the references should be
+listed in the appropriate order as indicated below:
+
+\smallskip
+\begin{description}[a)]
+\item[a)] One author: chronologically;
+\item[b)] Author and one co-author: alphabetically by coauthor, then
+chronologically;
+\item[c)] Author and more than one co-author: chronologically.
+\end{description}
+
+If there are several works by the same author(s) in the same year,
+they should be distinguished by the use of ``a",
+``b" etc., e.g. (Smith 1982a), (Ekeland et al. 1982b).
+
+Your bibliography entries must have the following structure:
+
+\smallskip\noindent
+\verb|\bibitem{}{<key>}{<citation>} <bibliographic entry>|,
+
+\smallskip\noindent
+
+where \verb|<key>| is the key used when citing in the text with
+\verb|\cite|. The argument of the third pair of braces,
+\verb|<citation>|, is the text that is to be printed in the text, when a
+publication is cited. The braces around the citation text are printed
+automatically. Please note that \LaTeX will not break a line inside the
+citation string and that the first pair of braces is obligatory.
+
+\paragraph{Sample input}
+\begin{verbatim}
+This is implicit in the recent work of \cite{ar} and the results
+are also discussed in \cite{le}. Consider as an example the
+theorem stated in \cite{dir}. We refer now to the hypothesis
+given in \cite{rh}. Extensions of the theorems are also
+interesting (Arnold 1968).
+
+\begin{thebibliography}{References}{}
+\bibitem {}{ar}{Arnold (1968)} Arnold V.I. (1968): Singularities
+ of smooth mappings. Usp. Mat. Nauk {\bf 23}, 3--44 (Russian).
+ [English transl.: Russ. Math. Surv. {\bf 23} (1968) 1--43]
+\bibitem {}{dir}{Lerch et al. (1983)} Dirac, P.A.M. (1950): On
+ generalized Hamiltonian dynamics. Can. J. Math {\bf 2}(2),
+ 129--148
+\bibitem {}{gro}{Gr\"otschel et al. (1988)} Gr\"otschel, M.,
+ Lov\'asz, L., Schrijver, A. (1988): Geometric algorithms and
+ combinatorial optimization. (Algorithms and Combinatorics,
+ vol.\, 2) Springer, Berlin Heidelberg New York
+\bibitem {}{le}{Lerche, Klosko et al. (1983)}Lerch, F.J., Klosko,
+ S.M., Patel, G.B. (1983): A refined gravity model from LAGEOS
+ (GEM-L2). NASA, Tech. Memo TM 84986
+\bibitem {}{rh}{Rham (1931)}Rham G. de (1931): Sur l'analysis
+ situs de vari\'et\'es \'a $n$ dimensions. J. Math. Pure Appl.
+ {\bf 10}, 115--200
+\end{thebibliography}
+\end{verbatim}
+
+\noindent{\it Sample output}
+
+\medskip\noindent
+This is implicit in the recent work of \cite{ar} and the results are
+also discussed in \cite{le}. Consider as an example the theorem stated
+in \cite{dir}. We refer now to the hypothesis given in \cite{rh}.
+Extensions of the theorems are also interesting (Arnold 1968).
+
+\begin{thebibliography}{References}{}
+\bibitem {}{ar}{Arnold (1968)} Arnold V.I. (1968): Singularities of
+ smooth mappings. Usp. Mat. Nauk {\bf 23}, 3--44 (Russian). [English
+ transl.: Russ. Math. Surv. {\bf 23} (1968) 1--43]
+\bibitem {}{dir}{Lerch et al. (1983)} Dirac, P.A.M. (1950): On
+ generalized Hamiltonian dynamics. Can. J. Math {\bf 2}(2), 129--148
+\bibitem {}{gro}{Gr\"otschel et al. (1988)} Gr\"otschel, M., Lov\'asz,
+ L., Schrijver, A. (1988): Geometric algorithms and combinatorial
+ optimization. (Algorithms and Combinatorics, vol.\, 2) Springer,
+ Berlin Heidelberg New York
+\bibitem {}{le}{Lerche, Klosko et al. (1983)}Lerch, F.J., Klosko, S.M.,
+ Patel, G.B. (1983): A refined gravity model from LAGEOS (GEM-L2).
+ NASA, Tech. Memo TM 84986
+\bibitem {}{rh}{Rham (1931)}Rham G. de (1931): Sur l'analysis situs de
+ vari\'et\'es \'a $n$ dimensions. J. Math. Pure Appl. {\bf 10},
+ 115--200
+\end{thebibliography}
+
+\section{Example of an article\label{exs}}
+
+For a number of journals there are demo files ending with {\tt .dem}.
+Please \LaTeX\ them with the format file you created to get an example
+of an article typed with our style file. You might find it helpful to
+examine the input to see how certain more complicated things are done.
+
+\section{Reference card\label{r:card}}
+
+If you have received this macro package directly from us on diskettes,
+you also received a reference card listing all commands we created.
+
+The \LaTeX\ file for this command list is the file \verb|ljour1.ref|.
+
+\end{document}
diff --git a/obsolete/macros/latex209/contrib/springer/ljour/ljour1.mac b/obsolete/macros/latex209/contrib/springer/ljour/ljour1.mac
new file mode 100644
index 0000000000..6a384e8779
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/ljour/ljour1.mac
@@ -0,0 +1,1179 @@
+% ljour1.mac
+% LaTeX package LJour1 1.0: main style file for one column journals
+% (c) Springer-Verlag HD
+%----------------------------------------------------------------------
+%
+% It is for use with: LATEX VERSION 2.09 <25 March 1992>
+% and the NFSS from F. Mittelbach and R. Schoepf
+%
+% Please report all errors via e-mail to SPRINGER@vax.ntp.springer.de
+% or to the address mentioned on page 2 of the documentation
+%
+% This is sprbegch.tex
+% changes to LaTeX for Springer styles begin herewith
+%
+\makeatletter
+%
+\def\@optiondef#1{\expandafter\def\csname sp@#1\endcsname{}}
+%
+\def\@springererr#1#2{%
+\edef\@tempc{#2}\expandafter\errhelp\expandafter{\@tempc}%
+\typeout{Springer Style error. \space See documentation for
+ explanation.^^J \space\@spaces\@spaces\@spaces Type \space H <return>
+ \space for immediate help.}\errmessage{#1}}
+%
+\def\@springerwarn#1#2{%
+\edef\@tempc{#2}\expandafter\errhelp\expandafter{\@tempc}%
+\typeout{Springer Style Warning. \space See documentation for
+ explanation.^^J \space\@spaces\@spaces\@spaces Type \space H <return>
+ \space for immediate help.}\errmessage{#1}}
+\def\springerstylefile{}
+% This is document.tex
+% checks whether style specified in \documentstyle and style used as
+% formatfile are the same
+\def\@documentstyle[#1]#2{\makeatletter
+ \def\@tempx{#2}
+ \def\@optionlist{#1}\gdef\@optionfiles{}%
+ \@ifundefined{springerstylefile}{\input \@tempx.sty\relax}%
+ {\ifx\@tempx\springerstylefile\relax
+ \typeout{This is \springerstylefile.}%
+ \else
+ \@springererr{Style '\springerstylefile' is preloaded}{Please
+ check your input.}\fi
+ \@options}
+ \let\@elt\input \@optionfiles \let\@elt\relax
+ \def\normalsize{\@normalsize}%
+ \makeatother
+ \normalsize\rm
+ \mark{{}{}}}
+%
+% Checks whether options specified to \documentstyle are allowed with
+% current style (e.g. are listed in the dataset options.tex)
+\def\@options{\let\@elt\relax
+ \@for\@tempa:=\@optionlist\do{
+ \@ifundefined{sp@\@tempa}%
+ {\@springerwarn{Option '\@tempa' not tested with
+ \springerstylefile, this may not work}%
+ {Press return to continue, but keep your
+ fingers crossed.}}%
+ {}%
+ \@ifundefined{ds@\@tempa}{\xdef\@optionfiles{\@optionfiles
+ \@elt \@tempa.sty\relax}}{\csname ds@\@tempa\endcsname}%
+ }%
+}
+% This is options.tex
+% it contains the table of options tested with the package
+% Use \@optiondef{NAME} to enable the option NAME.
+%
+\@optiondef{amssymb}
+\@optiondef{draft}
+\@optiondef{script}
+\@optiondef{footinfo}
+\@optiondef{twoside}
+\@optiondef{referee}
+\@optiondef{leqno}
+\@optiondef{array}
+\@optiondef{bibay}
+\@optiondef{deutsch}
+\@optiondef{francais}
+\@optiondef{german}
+% This is articl10.tex
+% load article style and substyle
+% disable \@options before and enable it after all.
+%
+\@ifundefined{springerstyletest}{%
+ \typeout{Loading article style and art10 substyle}
+ \let\@tempy\@options \let\@options\relax
+ \let\@tempi\input \def\input#1\relax{}
+ \let\normalsize\relax
+ \@tempi art10.sty
+ \@tempi article.sty
+ \let\input\@tempi
+ \let\@options\@tempy}{\relax}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This is misc.xxx
+%
+% It defines various commands not available in "plain LaTeX"
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\ts}{\thinspace{}}
+\newcommand{\sq}{\hbox{\rlap{$\sqcap$}$\sqcup$}}
+\newcommand{\qed}{\ifmmode\sq\else{\unskip\nobreak\hfil
+ \penalty50\hskip1em\null\nobreak\hfil\sq
+ \parfillskip=0pt\finalhyphendemerits=0\endgraf}\fi{}}
+\def\E{{\rm e}}
+\let\eul=\E
+\def\I{{\rm i}}
+\let\imag=\I
+% Frame for paste-in figures or tables
+\def\picplace#1{\vbox{\hrule\@height 0.4pt\@width\hsize
+\hbox to\hsize{\vrule\@width 0.4pt\@height#1\hfil
+\vrule\@width 0.4pt\@height#1}\hrule\@height 0.4pt\@width\hsize}}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This is referee.tex
+%
+% It defines the style option "referee"
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newif\if@referee \@refereefalse
+\def\ds@referee{\@refereetrue
+\typeout{A referee's copy will be produced.}%
+\def\baselinestretch{2}\small
+\normalsize\rm
+\newbox\refereebox
+\setbox\refereebox=\vbox to0pt{\vskip0.5cm%
+ \hbox to\textwidth{\normalsize\tt\hrulefill\lower0.5ex
+ \hbox{\kern5pt referee's copy\kern5pt}\hrulefill}\vss}%
+\def\@oddfoot{\copy\refereebox}\let\@evenfoot=\@oddfoot}
+% This is ucgreek
+% the definition of versal greek characters
+\mathchardef\Gamma="0100
+\mathchardef\Delta="0101
+\mathchardef\Theta="0102
+\mathchardef\Lambda="0103
+\mathchardef\Xi="0104
+\mathchardef\Pi="0105
+\mathchardef\Sigma="0106
+\mathchardef\Upsilon="0107
+\mathchardef\Phi="0108
+\mathchardef\Psi="0109
+\mathchardef\Omega="010A
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This is vector.tex
+%
+% It redefines the plain TeX \vec command
+% and adds a \tens command for tensors
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\vec#1{\relax\ifmmode\mathchoice{\mbox{\boldmath$\displaystyle#1$}}
+{\mbox{\boldmath$\textstyle#1$}}
+{\mbox{\boldmath$\scriptstyle#1$}}
+{\mbox{\boldmath$\scriptscriptstyle#1$}}\else
+\hbox{\boldmath$\textstyle#1$}\fi}
+
+\def\tens#1{\relax\ifmmode\mathchoice{\mbox{$\sf\displaystyle#1$}}
+{\mbox{$\sf\textstyle#1$}}
+{\mbox{$\sf\scriptstyle#1$}}
+{\mbox{$\sf\scriptscriptstyle#1$}}\else
+\hbox{$\sf\textstyle#1$}\fi}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This is defaults.tex
+%
+% It sets the switches for twoside printing, numbering
+% of equations and kind of citation.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\@twosidetrue % twoside is default
+\newif\if@bibay \@bibayfalse % citation with numbers
+ % is default
+\newif\if@numart \@numartfalse % numbering with chapternumbers
+ % is default
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This is layout.lj1
+%
+% It defines various sizes and settings for journals
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\topmargin=0cm
+\textwidth=27cc
+\textheight=525dd
+\oddsidemargin=0cm
+\evensidemargin=0cm
+\headsep=16.74dd
+%
+\baselineskip=10.5dd
+\parindent=15pt
+\parskip=0pt plus 1pt
+\hfuzz=2pt
+\frenchspacing
+%
+\tolerance=500
+%
+\abovedisplayskip=3 mm plus6pt minus 4pt
+\belowdisplayskip=3 mm plus6pt minus 4pt
+\abovedisplayshortskip=0.0 mm plus6pt
+\belowdisplayshortskip=2 mm plus4pt minus 4pt
+%
+\predisplaypenalty=0
+\clubpenalty=20000
+\widowpenalty=20000
+%
+\newdimen\betweenumberspace % dimension for space between
+\betweenumberspace=3.33pt % number and text of titles.
+\newdimen\aftertext % dimension for space after
+\aftertext=5pt % text of title.
+\newdimen\headlineindent % dimension for space between
+\headlineindent=1.166cm % number and text of headings.
+%
+% Figures and tables are processed in small print
+\def\figure{\small\rm\@float{figure}}
+\@namedef{figure*}{\small\rm\@dblfloat{figure}}
+\def\table{\small\rm\@float{table}}
+\@namedef{table*}{\small\rm\@dblfloat{table}}
+\def\fps@figure{htbp}
+\def\fps@table{htbp}
+%
+\labelsep=5pt % measures for lists
+\leftmargini=\parindent
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\leftmarginii=\parindent
+\parsep=\parskip
+%
+\def\@listI{\leftmargin\leftmargini
+ \parsep=\parskip
+ \topsep=\medskipamount
+ \itemsep=\parskip \advance\itemsep by -\parsep}
+\let\@listi\@listI
+\@listi
+%
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth by -\labelsep
+ \parsep=\parskip
+ \topsep=\z@
+ \itemsep=\parskip \advance\itemsep by -\parsep}
+%
+\def\@normalsize{\@setsize\normalsize{10.5dd}\xpt\@xpt
+\abovedisplayskip=3 mm plus6pt minus 4pt
+\belowdisplayskip=3 mm plus6pt minus 4pt
+\abovedisplayshortskip=0.0 mm plus6pt
+\belowdisplayshortskip=2 mm plus4pt minus 4pt
+\let\@listi\@listI}
+%
+\def\small{\@setsize\small{9dd}\viiipt\@viiipt
+\abovedisplayskip 8.5pt plus 3pt minus 4pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2pt%
+\belowdisplayshortskip 4pt plus2pt minus 2pt
+\def\@listi{\leftmargin\leftmargini
+\topsep 4pt plus 2pt minus 2pt\parsep\parskip
+\itemsep\parskip}}
+%
+\def\petit{\par\addvspace{6pt}\small}
+\def\endpetit{\par\addvspace{6pt}}
+%
+\def\footnotesize{\@setsize\footnotesize{9dd}\viiipt\@viiipt
+\abovedisplayskip 6pt plus 2pt minus 4pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt%
+\belowdisplayshortskip 3pt plus 1pt minus 2pt
+\def\@listi{\leftmargin\leftmargini
+\topsep 3pt plus 1pt minus 1pt\parsep\parskip
+\itemsep\parskip}}
+%
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{16dd}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+% This is texte.tex
+% it defines various texts and their translations
+% called up with documentstyle options
+\def\abstractname{Summary.}
+\def\ackname{Acknowledgement.}
+\def\andname{and}
+\def\appendixname{Appendix}
+\def\chaptername{Chapter}
+\def\claimname{Claim}
+\def\conjecturename{Conjecture}
+\def\contentsname{Contents}
+\def\corollaryname{Corollary}
+\def\definitionname{Definition}
+\def\examplename{Example}
+\def\exercisename{Exercise}
+\def\figurename{Fig.}
+\def\keywordname{{\bf Keywords.}}
+\def\lemmaname{Lemma}
+\def\contriblistname{List of contributors}
+\def\listfigurename{List of Figures}
+\def\listtablename{List of Tables}
+\def\mailname{{\it Correspondence to\/}:}
+\def\noteaddname{Note added in proof}
+\def\notename{Note}
+\def\partname{Part}
+\def\problemname{Problem}
+\def\proofname{Proof}
+\def\propertyname{Property}
+\def\propositionname{Proposition}
+\def\questionname{Question}
+\def\remarkname{Remark}
+\def\solutionname{Solution}
+\def\subclassname{{\it Subject Classifications.}}
+\def\tablename{Table}
+\def\theoremname{Theorem}
+% Names of theorem like environments are already defined
+% but must be translated if another language is chosen
+%
+% French section
+\def\ds@francais{\typeout{On parle francais.}%
+ \def\abstractname{R\'esum\'e.}%
+ \def\ackname{Remerciements.}%
+ \def\andname{et}%
+ \def\appendixname{Appendice}
+ \def\chaptername{Chapitre}%
+ \def\claimname{Pr\'etention.}%
+ \def\conjecturename{Hypoth\`ese}%
+ \def\contentsname{Table des mati\`eres}%
+ \def\corollaryname{Corrolaire}%
+ \def\definitionname{D\'efinition}%
+ \def\examplename{Exemple}%
+ \def\exercisename{Exercice}%
+ \def\figurename{Fig.}%
+ \def\keywordname{{\bf Mots-cl\'e.}}
+ \def\lemmaname{Lemme}%
+ \def\contriblistname{List of contributors}
+ \def\listfigurename{Liste des figures}%
+ \def\listtablename{Liste des tables}%
+ \def\noteaddname{Note ajout\'ee \`a l'\'epreuve}%
+ \def\notename{Remarque}%
+ \def\partname{Partie}%
+ \def\problemname{Probl\`eme}%
+ \def\proofname{\'Epreuve}%
+ \def\propertyname{Caract\'eristique}%
+%\def\propositionname{Proposition}%
+ \def\questionname{Question}%
+ \def\remarkname{Remarque}%
+ \def\solutionname{Solution}%
+ \def\tablename{Tableau}%
+ \def\theoremname{Th\'eor\`eme}%
+}
+%
+% German section
+\def\ds@deutsch{\typeout{Man spricht deutsch.}%
+ \def\abstractname{Zusammenfassung.}%
+ \def\ackname{Danksagung.}%
+ \def\andname{und}%
+ \def\appendixname{Anhang}%
+ \def\chaptername{Kapitel}%
+ \def\claimname{Behauptung.}%
+ \def\conjecturename{Hypothese}%
+ \def\contentsname{Inhaltsverzeichnis}%
+ \def\corollaryname{Korrolar}%
+%\def\definitionname{Definition}%
+ \def\examplename{Beispiel}%
+ \def\exercisename{\"Ubung}%
+ \def\figurename{Abb.}%
+ \def\keywordname{{\bf Schl\"usselw\"orter.}}
+%\def\lemmaname{Lemma}%
+ \def\contriblistname{List of contributors}
+ \def\listfigurename{Abbildungsverzeichnis}%
+ \def\listtablename{Tabellenverzeichnis}%
+ \def\noteaddname{Nachtrag}%
+ \def\notename{Anmerkung}%
+ \def\partname{Teil}%
+%\def\problemname{Problem}%
+ \def\proofname{Beweis}%
+ \def\propertyname{Eigenschaft}%
+%\def\propositionname{Proposition}%
+ \def\questionname{Frage}%
+ \def\remarkname{Anmerkung}%
+ \def\solutionname{L\"osung}%
+ \def\tablename{Tab.}%
+%\def\theoremname{Theorem}%
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This is headjour.tex
+%
+% Titles for journals are redefined
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\setcounter{secnumdepth}{3} % depth of the highest-level
+ % sectioning command
+\def\thesection{\arabic{section}}
+\def\thesubsection{\thesection.\arabic{subsection}}
+\def\thesubsubsection{\thesubsection.\arabic{subsubsection}}
+%
+% definition of \chapter
+% not allowed with this springer style
+\def\chapter#1{\@springererr{Command \string\chapter \space
+ is not allowed with this Style File}%
+ {Please remove command \string\chapter.}%
+ \relax}
+%
+\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
+ \let\@svsec\@empty\else
+ \refstepcounter{#1}\edef\@svsec{\csname the#1%
+ \endcsname.\hskip\betweenumberspace\ignorespaces}\fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #6\relax
+ \@hangfrom{\hskip #3\relax\@svsec}{%
+ \raggedright
+ \hyphenpenalty \@M%
+ \interlinepenalty \@M #8\par}%
+ \endgroup
+ \csname #1mark\endcsname{#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #7}\else
+ \def\@svsechd{#6\hskip #3\relax
+ \@svsec #8\hskip\aftertext\ignorespaces
+ \csname #1mark\endcsname
+ {#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #7}}\fi
+ \@xsect{#5}}
+%
+% measures and setting of sections
+%
+\def\section{\@startsection{section}{1}{\z@}%
+ {-21dd plus-4pt minus-4pt}{10.5dd plus 4pt
+ minus4pt}{\normalsize\bf\boldmath}}
+\def\subsection{\@startsection{subsection}{2}{\z@}%
+ {-21dd plus-4pt minus-4pt}{10.5dd plus 4pt
+ minus4pt}{\normalsize\it}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}%
+ {-21dd plus-4pt minus-4pt}{10.5dd plus 4pt
+ minus4pt}{\normalsize}}
+\def\paragraph{\@startsection{subsubsection}{4}{\z@}%
+ {-21dd plus-4pt minus-4pt}{-1pt}{\normalsize\it}}
+% definition of \subparagraph
+% not allowed with springer styles
+\def\subsubparagraph#1{\@springererr{Command \string\subparagraph \space
+ is not allowed with this Style File}%
+ {Please remove command \string\subparagraph.}%
+ \relax}
+% definition of \part
+% not allowed with springer styles
+\def\part#1{\@springererr{Command \string\part \space
+ is not allowed with this Style File}%
+ {Please remove command \string\part.}%
+ \relax}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This is toc.xxx
+%
+% it modifies the appearence of the table of contents
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\tableofcontents{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \fi\chapter*{\contentsname \@mkboth{{\contentsname}}{{\contentsname}}}
+ \@starttoc{toc}\if@restonecol\twocolumn\fi}
+
+\def\l@part#1#2{\addpenalty{\@secpenalty}%
+ \addvspace{1.8em plus\p@}% % space above part line
+ \begingroup
+ \parindent \z@
+ \rightskip \z@ plus 5em
+ \hrule\vskip5pt
+ \bf\boldmath % set line in boldface
+ \leavevmode % TeX command to enter horizontal mode.
+ #1\par
+ \vskip5pt
+ \hrule
+ \vskip8pt
+ \nobreak % Never break after part entry
+ \endgroup}
+
+\def\@dotsep{2}
+
+\def\l@chapter#1#2{\addpenalty{-\@highpenalty}
+ \vskip 1.0em plus 1pt \@tempdima 1.5em \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \leavevmode \advance\leftskip\@tempdima \hskip -\leftskip
+ {\bf\boldmath#1}\nobreak
+ \leaders\hbox{$\m@th \mkern \@dotsep mu.\mkern
+ \@dotsep mu$}\hfill
+ \nobreak\hbox to\@pnumwidth{\hss #2}\par
+ \penalty\@highpenalty \endgroup}
+
+\def\l@section{\@dottedtocline{1}{1.5em}{2.3em}}
+\def\l@subsection{\@dottedtocline{2}{3.8em}{3.2em}}
+\def\l@subsubsection{\@dottedtocline{3}{7.0em}{4.1em}}
+\def\l@paragraph{\@dottedtocline{4}{10em}{5em}}
+\def\l@subparagraph{\@dottedtocline{5}{12em}{6em}}
+
+\def\listoffigures{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \fi\chapter*{\listfigurename\@mkboth{{\listfigurename}}{{\listfigurename}}}
+ \@starttoc{lof}\if@restonecol\twocolumn\fi}
+\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
+
+\def\listoftables{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \fi\chapter*{\listtablename\@mkboth{{\listtablename}}{{\listtablename}}}
+ \@starttoc{lot}\if@restonecol\twocolumn\fi}
+\let\l@table\l@figure
+% This is kopf.xxx
+% it does the whole head of a contribution extending the
+% \maketitle command.
+% LaTeX does not provide a command to enter the authors institute
+% addresses. The \institute command is defined here.
+
+\newcounter{inst}
+\newcounter{auth}
+\newdimen\instindent
+\newbox\authrun
+\newtoks\authorrunning
+\newbox\titrun
+\newtoks\titlerunning
+
+\def\journalname#1{\gdef\@journalname{#1}}
+
+\def\headnote#1{\gdef\@headnote{#1}}
+\def\@headnote{}
+
+\def\dedication#1{\gdef\@dedic{#1}}
+\def\@dedic{}
+
+\def\institute#1{\gdef\@institute{#1}}
+
+\def\institutename{\par
+ \begingroup
+ \parindent=0pt
+ \parskip=0pt
+ \setcounter{inst}{1}%
+ \def\and{\par\stepcounter{inst}%
+ \noindent
+ \hbox to\instindent{\hss$^{\theinst}$\enspace}\ignorespaces}%
+ \setbox0=\vbox{\def\thanks##1{}\@institute}
+ \ifnum\value{inst}>9\relax\setbox0=\hbox{$^{88}$\enspace}%
+ \else\setbox0=\hbox{$^{8}$\enspace}\fi
+ \instindent=\wd0\relax
+ \ifnum\value{inst}=1\relax
+ \else
+ \setcounter{inst}{1}%
+ \noindent
+ \hbox to\instindent{\hss$^{\theinst}$\enspace}\ignorespaces
+ \fi
+ \small
+ \ignorespaces
+ \@institute\par
+ \endgroup}
+
+\def\mail#1{\begingroup
+\def\protect{\noexpand\protect\noexpand}\xdef\@thanks{%
+\protect\footnotetext[0]{\kern-\parindent\mailname\
+\ignorespaces#1}\@thanks}\endgroup\ignorespaces}
+
+\def\@thanks{}
+
+\def\@fnsymbol#1{\ifcase#1\or\star\or{\star\star}\or{\star\star\star}%
+ \or \dagger\or \ddagger\or
+ \mathchar "278\or \mathchar "27B\or \|\or **\or \dagger\dagger
+ \or \ddagger\ddagger \else\@ctrerr\fi\relax}
+
+\def\inst#1{\unskip$^{#1}$}
+\def\fnmsep{\unskip$^,$}
+
+\def\subtitle#1{\gdef\@subtitle{#1}}
+\def\@subtitle{}
+
+%\def\thesaurus#1{\gdef\@thesaurus{#1}}
+
+\def\ch@ckobl#1#2{\@ifundefined{@#1}
+ {\typeout{Missing \expandafter\string\csname#1\endcsname}%
+ \csname #1\endcsname{#2}}
+ {}}
+
+\def\maketitle{\par
+%\ch@ckobl{thesaurus}{missing; you have not inserted them}
+\ch@ckobl{journalname}{Noname}
+\ch@ckobl{date}{the date of receipt and acceptance should be inserted
+later}
+\ch@ckobl{title}{A title should be given}
+\ch@ckobl{author}{Name(s) and initial(s) of author(s) should be given}
+\ch@ckobl{institute}{Address(es) of author(s) should be given}
+ \begingroup
+ \def\thefootnote{\fnsymbol{footnote}}
+ \if@twocolumn
+ \twocolumn[\@maketitle]
+ \else
+ \newpage \@maketitle
+ \fi
+ \global\@topnum\z@
+ \thispagestyle{empty}\@thanks
+ \def\\{ }\def\inst##1{\unskip}\def\thanks##1{\unskip}%
+ \def\fnmsep{\unskip}%
+ \if!\the\authorrunning!
+ \value{inst}=\value{auth}%
+ \setcounter{auth}{1}%
+ \else
+ \edef\@author{\the\authorrunning}%
+ \fi
+ \global\setbox\authrun=\hbox{\small\rm\unboldmath\@author\unskip}%
+ \instindent=\hsize
+ \advance\instindent by-\headlineindent
+ \ifdim\wd\authrun>\instindent
+ \typeout{Names of authors too long for running head. Please supply}%
+ \typeout{a shorter form with \string\authorrunning\space prior to
+ \string\maketitle}%
+ \global\setbox\authrun=\hbox{\small\rm
+ Authors suppressed due to excessive length}%
+ \fi
+ \xdef\@author{\copy\authrun}%
+ \if!\the\titlerunning!\else
+ \edef\@title{\the\titlerunning}%
+ \fi
+ \global\setbox\titrun=\hbox{\small\rm\unboldmath\ignorespaces\@title}%
+ \ifdim\wd\titrun>\instindent
+ \typeout{Title too long for running head. Please supply}%
+ \typeout{a shorter form with \string\titlerunning\space prior to
+ \string\maketitle}%
+ \global\setbox\titrun=\hbox{\small\rm
+ Title suppressed due to excessive length}%
+ \fi
+ \xdef\@title{\copy\titrun}%
+ \markboth{\@author}{\@title}
+ \endgroup
+ \setcounter{footnote}{0}
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\gdef\@subtitle{}%
+ \let\thanks\relax}
+
+\def\makeheadbox{{%
+\hbox to0pt{\vbox{\baselineskip=10dd\hrule\hbox
+to\hsize{\vrule\kern3pt\vbox{\kern3pt
+\hbox{\bf\@journalname\ Manuscript-Nr.}
+\hbox{(will be inserted by hand later)}
+\kern3pt}\hfil\kern3pt\vrule}\hrule}%
+\hss}}}
+
+\def\@maketitle{\newpage
+ \rm\vbox to0pt{}\vskip-8mm
+ \makeheadbox
+ \vskip13.5mm
+ {\Large \bf\boldmath
+ \pretolerance=10000
+ \rightskip=0pt plus 4cm
+ \if!\@headnote!\else
+ \noindent
+ {\em\ignorespaces\@headnote\par}\vskip 3.5mm
+ \fi
+ \noindent\ignorespaces
+ \@title \par}\vskip 3.5mm\relax
+ \bf\boldmath
+ \if!\@subtitle!\else
+ \vskip .05cm
+ \pretolerance=10000
+ \rightskip=0pt plus 3cm
+ \noindent\ignorespaces\@subtitle \par\vskip .4cm
+ \fi
+ \lineskip .5em
+ \setbox0=\vbox{\setcounter{auth}{1}\def\and{\stepcounter{auth}}%
+ \def\thanks##1{}\@author}%
+ \def\lastand{\ifnum\value{inst}=2\relax
+ \unskip{} \andname\
+ \else
+ \unskip, \andname\
+ \fi}%
+ \def\and{\stepcounter{auth}\relax
+ \ifnum\value{auth}=\value{inst}%
+ \lastand
+ \else
+ \unskip,
+ \fi}%
+ \value{inst}=\value{auth}%
+ \setcounter{auth}{1}%
+ \noindent\ignorespaces\@author\vskip.225cm
+ \unboldmath\small\rm
+ \institutename
+ \vskip .4cm \noindent\@date
+ \if!\@dedic!\else
+ \par
+ \normalsize\it
+ \addvspace\baselineskip
+ \noindent\@dedic
+ \fi
+ \par
+ \vskip .5cm}
+
+% Define `abstract' environment
+\def\abstract{\trivlist\item[\hskip\labelsep
+{\bf\abstractname}]\if!\abstractname!\hskip-\labelsep\fi}
+\let\endabstract=\endtrivlist
+
+% Define `transsummary' environment
+\def\transsummary{\trivlist\item[\hskip\labelsep
+{\bf Summary.}]}
+\let\endtranssummary=\endtrivlist
+
+% Define \transtitle, (\trans-)\keywords and \subclass
+\def\transtitle#1{\par\addvspace\baselineskip\noindent
+{\bf\ignorespaces#1}\par}
+\def\transkey#1{\par\addvspace\baselineskip\noindent
+{\bf Keywords. }\ignorespaces#1\par}
+\def\keywords{\par\addvspace\baselineskip\noindent\keywordname\
+\ignorespaces}
+\def\subclass{\par\addvspace\baselineskip\noindent\subclassname\
+\ignorespaces}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This is runnhead.j
+%
+% It redefines the headings of a text. There are two
+% pagestyles possible: "\pagestyle{headings}" and
+% "\pagestyle{myheadings}". The later is the default.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\if@twoside
+\def\ps@headings{\let\@mkboth\markboth
+ \def\@oddfoot{}\def\@evenfoot{}
+ \def\@evenhead{\rm\thepage\hskip\headlineindent\leftmark\hfil}
+ \def\@oddhead{\hfil\rightmark\hskip\headlineindent\rm\thepage}
+ \let\chaptermark\@gobble
+ \def\sectionmark##1{\markright{{\ifnum\c@secnumdepth>\z@
+ \thesection.\hskip\betweenumberspace\fi ##1}}}}
+\else \def\ps@headings{\let\@mkboth\markboth
+ \def\@oddfoot{}\def\@evenfoot{}
+ \def\@oddhead{\hfil\rightmark\hskip\headlineindent\rm\thepage}
+ \let\chaptermark\@gobble
+ \def\sectionmark##1{\markright{{\ifnum\c@secnumdepth>\z@
+ \thesection.\hskip\betweenumberspace\fi ##1}}}}
+\fi
+\def\ps@myheadings{\let\@mkboth\@gobbletwo
+ \def\@oddfoot{}\def\@evenfoot{}
+ \def\@evenhead{\small\rm\thepage\hfil\leftmark}
+ \def\@oddhead{\small\rm\rightmark\hfil\thepage}
+ \def\chaptermark##1{}
+ \def\sectionmark##1{}%
+ \def\subsectionmark##1{}}
+\ps@myheadings
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This is theorem.xxx
+%
+% It redefines the "\newtheorem" command.
+%
+% Usage now:
+%
+% \newtheorem{env_nam}{caption}[within]{cap_font}{body_font}
+% or \newtheorem{env_nam}[numbered_like]{caption}{cap_font}{body_font}
+% or \newtheorem*{env_nam}{caption}{cap_font}{body_font}
+%
+% New is "cap_font" and "body_font". It stands for
+% fontdefinition of the caption and the text itself.
+%
+% "\newtheorem*" gives a theorem without number.
+%
+% A defined newthoerem environment is used as described
+% by Lamport.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\@thmcounterend{.}
+
+\def\newtheorem{\@ifstar{\@sthm}{\@Sthm}}
+
+% definition of \newtheorem with number
+
+\def\@Sthm#1{\@ifnextchar[{\@othm{#1}}{\@nthm{#1}}}
+
+\def\@xnthm#1#2[#3]#4#5{\expandafter\@ifdefinable\csname #1\endcsname
+ {\@definecounter{#1}\@addtoreset{#1}{#3}%
+ \expandafter\xdef\csname the#1\endcsname{\expandafter\noexpand
+ \csname the#3\endcsname \@thmcountersep \@thmcounter{#1}}%
+ \expandafter\xdef\csname #1name\endcsname{#2}%
+ \global\@namedef{#1}{\@thm{#1}{\csname #1name\endcsname}{#4}{#5}}%
+ \global\@namedef{end#1}{\@endtheorem}}}
+
+\def\@ynthm#1#2#3#4{\expandafter\@ifdefinable\csname #1\endcsname
+ {\@definecounter{#1}%
+ \expandafter\xdef\csname the#1\endcsname{\@thmcounter{#1}}%
+ \expandafter\xdef\csname #1name\endcsname{#2}%
+ \global\@namedef{#1}{\@thm{#1}{\csname #1name\endcsname}{#3}{#4}}%
+ \global\@namedef{end#1}{\@endtheorem}}}
+
+\def\@othm#1[#2]#3#4#5{%
+ \@ifundefined{c@#2}{\@latexerr{No theorem environment `#2' defined}\@eha}%
+ {\expandafter\@ifdefinable\csname #1\endcsname
+ {\global\@namedef{the#1}{\@nameuse{the#2}}%
+ \expandafter\xdef\csname #1name\endcsname{#3}%
+ \global\@namedef{#1}{\@thm{#2}{\csname #1name\endcsname}{#4}{#5}}%
+ \global\@namedef{end#1}{\@endtheorem}}}}
+
+\def\@thm#1#2#3#4{\refstepcounter
+ {#1}\@ifnextchar[{\@ythm{#1}{#2}{#3}{#4}}{\@xthm{#1}{#2}{#3}{#4}}}
+
+\def\@xthm#1#2#3#4{\@begintheorem{#2}{\csname the#1\endcsname}{#3}{#4}%
+ \ignorespaces}
+
+\def\@ythm#1#2#3#4[#5]{\@opargbegintheorem{#2}{\csname
+ the#1\endcsname}{#5}{#3}{#4}\ignorespaces}
+
+\def\@begintheorem#1#2#3#4{\trivlist
+ \item[\hskip\labelsep{#3#1\ #2\@thmcounterend}]#4}
+
+\def\@opargbegintheorem#1#2#3#4#5{\trivlist
+ \item[\hskip\labelsep{#4#1\ #2\ (#3)\@thmcounterend}]#5}
+
+% definition of \newtheorem* without number
+
+\def\@sthm#1#2{\@Ynthm{#1}{#2}}
+
+\def\@Ynthm#1#2#3#4{\expandafter\@ifdefinable\csname #1\endcsname
+ {\global\@namedef{#1}{\@Thm{\csname #1name\endcsname}{#3}{#4}}%
+ \expandafter\xdef\csname #1name\endcsname{#2}%
+ \global\@namedef{end#1}{\@endtheorem}}}
+
+\def\@Thm#1#2#3{\@ifnextchar[{\@Ythm{#1}{#2}{#3}}{\@Xthm{#1}{#2}{#3}}}
+
+\def\@Xthm#1#2#3{\@Begintheorem{#1}{#2}{#3}\ignorespaces}
+
+\def\@Ythm#1#2#3[#4]{\@Opargbegintheorem{#1}
+ {#4}{#2}{#3}\ignorespaces}
+
+\def\@Begintheorem#1#2#3{#3\trivlist
+ \item[\hskip\labelsep{#2#1\@thmcounterend}]}
+
+\def\@Opargbegintheorem#1#2#3#4{#4\trivlist
+ \item[\hskip\labelsep{#3#1\ (#2)\@thmcounterend}]}
+
+% definition of divers theorem environments
+
+\newtheorem*{claim}{Claim}{\it}{\rm}
+\newtheorem{conjecture}{Conjecture}{\it}{\rm}
+\newtheorem{corollary}{Corollary}{\bf}{\it}
+\newtheorem{definition}{Definition}{\bf}{\it}
+\newtheorem{example}{Example}{\it}{\rm}
+\newtheorem{exercise}{Exercise}{\bf}{\rm}
+\newtheorem{lemma}{Lemma}{\bf}{\it}
+\newtheorem{note}{Note}{\it}{\rm}
+\newtheorem{problem}{Problem}{\bf}{\rm}
+\newtheorem{property}{Property}{\it}{\rm}
+\newtheorem{proposition}{Proposition}{\bf}{\it}
+\newtheorem{question}{Question}{\it}{\rm}
+\newtheorem{solution}{Solution}{\bf}{\rm}
+\newtheorem{theorem}{Theorem}{\bf}{\it}
+\newtheorem*{proof}{Proof}{\it}{\rm}
+\newtheorem{remark}{Remark}{\it}{\rm}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This is figure.xxx
+%
+% It redefines the captions for "figure" and "table"
+% environments.
+%
+% There are two new kind of captions: "\firstcaption"
+% and "\secondcaption" for captions set side by side.
+%
+% Usage for the new commands: like "\caption".
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\long\def\@caption#1[#2]#3{\par\addcontentsline{\csname
+ ext@#1\endcsname}{#1}{\protect\numberline{\csname
+ the#1\endcsname}{\ignorespaces #2}}\begingroup
+ \@parboxrestore
+ \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par
+ \endgroup}
+
+\def\firstcaption{\refstepcounter\@captype\@dblarg%
+ {\@firstcaption\@captype}}
+
+\def\secondcaption{\refstepcounter\@captype\@dblarg%
+ {\@secondcaption\@captype}}
+
+\long\def\@firstcaption#1[#2]#3{\addcontentsline{\csname
+ ext@#1\endcsname}{#1}{\protect\numberline{\csname
+ the#1\endcsname}{\ignorespaces #2}}\begingroup
+ \@parboxrestore
+ \vskip10pt
+ \@maketwocaptions{\csname fnum@#1\endcsname}{\ignorespaces #3}%
+ \ignorespaces\hspace{.073\textwidth}\hfil%
+ \endgroup}
+
+\long\def\@secondcaption#1[#2]#3{\addcontentsline{\csname
+ ext@#1\endcsname}{#1}{\protect\numberline{\csname
+ the#1\endcsname}{\ignorespaces #2}}\begingroup
+ \@parboxrestore
+ \@maketwocaptions{\csname fnum@#1\endcsname}{\ignorespaces #3}\par
+ \endgroup}
+
+\long\def\@maketwocaptions#1#2{%
+ \parbox[t]{.46\textwidth}{{\bf #1.} #2}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\fig@type{figure}
+
+\long\def\@makecaption#1#2{\if\@captype\fig@type\vskip 10pt\fi
+ \setbox\@tempboxa\hbox{{\bf #1.} #2}%
+ \ifdim \wd\@tempboxa >\hsize {\bf #1.} #2\par
+ \else \hbox to\hsize{\hfil\unhbox\@tempboxa\hfil}\fi
+ \if\@captype\fig@type\else\vskip5.5pt\fi}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This is bibjour.xxx
+%
+% It redefines the "bibliography" environment.
+%
+% Usage: \begin{thebibliography}[label]{title}
+%
+% where "title" is the text of the title which will be
+% typeset, e.g. "References" or "Bibliography". It must
+% be given.
+%
+% together with "bibay" style option (e.g.
+% \documentstyle[bibay]{article}):
+%
+% \bibitem{label}{key}{referenced text}
+% for author-year-citation
+%
+% without style option (as described by Lamport):
+%
+% \bibitem[label]{key}
+% \bibitem{key}
+%
+% \cite{key} (as described by Lamport)
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% definition of \begin{thebibliography}
+
+\def\thebibliography{\@ifnextchar[{\@lThebibliography}%
+ {\@Thebibliography}}
+
+\def\@lThebibliography[#1]#2{\section*{#2\@mkboth{#2}{#2}}%
+ \small\rm
+ \list{\arabic{enumiv}.}{\settowidth\labelwidth{[#1]}
+ \leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumiv}%
+ \let\p@enumiv\@empty
+ \def\theenumiv{\arabic{enumiv}}}%
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+
+\def\@Thebibliography#1{\section*{#1\@mkboth{#1}{#1}}
+ \small\rm
+ \list{\arabic{enumiv}.}%
+ {\settowidth\labelwidth{\hspace\parindent\hskip-\labelsep}%
+ \usecounter{enumiv}%
+ \let\p@enumiv\@empty
+ \def\theenumiv{\arabic{enumiv}}%
+ \leftmargin\labelwidth
+ \advance\leftmargin\labelsep}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+
+\let\endthebibliography=\endlist
+
+% definition of \bibitem and \cite
+\def\ds@bibay{\@bibaytrue
+ \def\bibitem{\@bibitem}%
+ \def\@bibitem##1##2##3{\ifx!##1!\item[]\hskip-\labelwidth
+ \hskip-\labelsep\else\item[\@biblabel{##1}]\fi
+ \if@filesw
+ {\def\protect####1{\string ####1\space}\immediate
+ \write\@auxout{\string\bibcite{##2}{##3}}}%
+ \fi\ignorespaces}%
+%
+ \def\cite{\@ifnextchar[{\@tempswatrue\@citex}%
+ {\@tempswafalse\@citex[]}}%
+%
+ \def\@citex[##1]##2{%
+ \if@filesw
+ \immediate\write\@auxout{\string\citation{##2}}%
+ \fi
+ \def\@citea{}%
+ \@cite{\@for\@citeb:=##2\do
+ {\@citea\def\@citea{,\penalty\@m\ }\@ifundefined
+ {b@\@citeb}{{\bf ?}\@warning
+ {Citation `\@citeb' on page \thepage \space undefined}}%
+ \hbox{\csname b@\@citeb\endcsname}}}%
+ {##1}}%
+%
+ \def\@cite##1##2{{##1\if@tempswa , ##2\fi}}%
+ \def\@biblabel##1{##1\hfill}}
+%
+\def\bibitem{\@ifnextchar[{\@lbibitem}{\@bibitem}}
+\def\@lbibitem[#1]#2{\itemindent\z@
+ \item[\@biblabel{#1}]\if@filesw
+ {\def\protect##1{\string ##1\space}\immediate
+ \write\@auxout{\string\bibcite{#2}{#1}}}\fi\ignorespaces}
+%
+\def\@bibitem#1{\item\if@filesw \immediate\write\@auxout
+ {\string\bibcite{#1}{\the\c@enumiv}}\fi\ignorespaces}
+%
+\def\cite{\@ifnextchar[{\@tempswatrue\@citex}{\@tempswafalse\@citex[]}}
+%
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+ \def\@citea{}%
+ \@cite{\@for\@citeb:=#2\do
+ {\@citea\def\@citea{,\penalty\@m\ }\@ifundefined
+ {b@\@citeb}{{\bf ?}\@warning
+ {Citation `\@citeb' on page \thepage \space undefined}}%
+ \hbox{\csname b@\@citeb\endcsname}}}%
+ {#1}}
+\def\@cite#1#2{[{#1\if@tempswa , #2\fi}]}
+\def\@biblabel#1{[#1]\hfill}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This is fonotej.xxx
+%
+% It redefines how footnotes will be typeset.
+%
+% Usage like described by Lamport.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newdimen\footnoterulewidth
+ \footnoterulewidth=4cc
+
+\def\footnoterule{\kern-3\p@
+ \hrule width\footnoterulewidth
+ \kern 2.6\p@}
+
+\long\def\@makefntext#1{\@setpar{\@@par\@tempdima \hsize
+ \advance\@tempdima-15pt\parshape \@ne 15pt \@tempdima}\par
+ \parindent 15pt\noindent \hbox to \z@{%
+ \hss\hss$^{\@thefnmark}$ }#1}
+% This is footinfo.tex
+% it provides an informatory line on every page
+%
+\def\SpringerMacroPackageNameA{\springerstylefile}
+% \thetime, \thedate and \timstamp are macros to include
+% time, date (or both) of the TeX run in the document
+\def\maketimestamp{\count255=\time
+\divide\count255 by 60\relax
+\edef\thetime{\the\count255:}%
+\multiply\count255 by-60\relax
+\advance\count255 by\time
+\edef\thetime{\thetime\ifnum\count255<10 0\fi\the\count255}
+\edef\thedate{\number\day-\ifcase\month\or Jan\or Feb\or Mar\or
+ Apr\or May\or Jun\or Jul\or Aug\or Sep\or Oct\or
+ Nov\or Dec\fi-\number\year}
+\def\timstamp{\hbox to\hsize{\tt\hfil\thedate\hfil\thetime\hfil}}}
+\maketimestamp
+%
+% \footinfo generates a info footline on every page containing
+% pagenumber, jobname, macroname, and timestamp
+\def\ds@footinfo{\maketimestamp
+ \def\@oddfoot{\footnotesize\tt Page: \thepage\hfil job: \jobname\hfil
+ macro: \SpringerMacroPackageNameA\hfil
+ date/time: \thedate/\thetime}%
+ \let\@evenfoot=\@oddfoot}
+\def\footinfo{\maketimestamp
+ \ds@footinfo
+ \typeout{You ordered a foot-info line. }}
+\def\nofootinfo{%
+ \def\@oddfoot{}\def\@evenfoot{}%
+ \typeout{Foot-info has been disabled. }}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This is environ.xxx
+%
+% It defines the environment for acknowledgements.
+% and noteadd
+%
+% Usage e.g.: \begin{acknowledgement}
+% Text
+% \end{acknowledgement}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Define `abstract' environment
+\def\acknowledgement{\par\addvspace{17pt}\small\rm
+\trivlist\item[\hskip\labelsep
+{\it\ackname}]}
+\def\endacknowledgement{\endtrivlist\addvspace{6pt}}
+% Define `noteadd' environment
+\def\noteadd{\par\addvspace{17pt}\small\rm
+\trivlist\item[\hskip\labelsep
+{\it\noteaddname}]}
+\def\endnoteadd{\endtrivlist\addvspace{6pt}}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This is item.xxx
+%
+% It redefines the kind of label for "itemize", "enumerate"
+% and "description" environment. The last is extended by
+% an optional parameter. Its length is used for overall
+% indentation.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% labels of enumerate
+
+\def\labelenumi{\theenumi.}
+\def\labelenumii{\theenumii)}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+
+% labels of itemize
+
+\def\labelitemi{\bf --}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\bullet$}
+\def\labelitemiv{$\cdot$}
+
+% labels of description
+\def\descriptionlabel#1{\hspace\labelsep #1\hfil}
+
+% make indentations changeable
+
+\def\setitemindent#1{\settowidth{\labelwidth}{#1}%
+ \leftmargini\labelwidth
+ \advance\leftmargini\labelsep
+ \def\@listi{\leftmargin\leftmargini
+ \labelwidth\leftmargini\advance\labelwidth by -\labelsep
+ \parsep=\parskip
+ \topsep=\medskipamount
+ \itemsep=\parskip \advance\itemsep by -\parsep}}
+\def\setitemitemindent#1{\settowidth{\labelwidth}{#1}%
+ \leftmarginii\labelwidth
+ \advance\leftmarginii\labelsep
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth by -\labelsep
+ \parsep=\parskip
+ \topsep=\z@
+ \itemsep=\parskip \advance\itemsep by -\parsep}}
+%
+% adjusted environment "description"
+% if an optional parameter (at the first two levels of lists)
+% is present, its width is considered to be the widest mark
+% throughout the current list.
+\def\description{\@ifnextchar[{\@describe}{\list{}{\labelwidth\z@
+ \itemindent-\leftmargin \let\makelabel\descriptionlabel}}}
+%
+\def\describelabel#1{#1\hfil}
+\def\@describe[#1]{\relax\ifnum\@listdepth=0
+\setitemindent{#1}\else\ifnum\@listdepth=1
+\setitemitemindent{#1}\fi\fi
+\list{--}{\let\makelabel\describelabel}}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This is typeset.xxx
+%
+% It defines last text of every article.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\def\typeset{\small\noindent This article was processed by the author
+ using the \LaTeX{} style file {\it\springerstylefile\/}
+ from Springer-Verlag.\par}
+
+\def\enddocument{\par\vspace{2\bigskipamount}\typeset
+ \@checkend{document}\clearpage\begingroup
+ \if@filesw \immediate\closeout\@mainaux
+ \def\global\@namedef##1##2{}\def\newlabel{\@testdef r}%
+ \def\bibcite{\@testdef b}\@tempswafalse \makeatletter\input \jobname.aux
+ \if@tempswa \@@warning{Label(s) may have changed. Rerun to get
+ cross-references right}\fi\fi\endgroup\deadcycles\z@\@@end}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This is numberj.xxx
+%
+% It redefines the kind of numeration for figures,
+% tables and equations like they should appear in
+% journals.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\let\ds@numart=\relax
+%
+\def\thefigure{\@arabic\c@figure}
+\def\thetable{\@arabic\c@table}
+\def\theequation{\arabic{equation}}
diff --git a/obsolete/macros/latex209/contrib/springer/ljour/ljour1.ref b/obsolete/macros/latex209/contrib/springer/ljour/ljour1.ref
new file mode 100644
index 0000000000..2d5b4455f0
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/ljour/ljour1.ref
@@ -0,0 +1,249 @@
+% ljour1.ref
+% LJour1 vers. 1.0, LaTeX style file for Springer journals with
+% one-column layout: Reference card
+% (c) Springer-Verlag HD
+%-----------------------------------------------------------------------
+% Please use style cljour1.
+\documentstyle{cljour1}
+\nofiles
+\renewcommand{\typeset}{}
+\newcommand{\oneskip}{\vskip0.7\baselineskip}
+\newcommand{\twoskip}{\vskip1.4\baselineskip}
+\newcommand{\halfskip}{\vskip0.35\baselineskip}
+\newcommand{\mhalfskip}{\vskip-0.65\baselineskip}
+\textwidth 12cm \textheight 18.5cm
+\parindent=0pt\parskip=0pt
+\pagestyle{plain}
+\begin{document}
+
+{\large\bf LJour1: reference card\hfill version 1.0}
+\twoskip
+\noindent This is a list of commands provided by the \LaTeX{} style file
+{\it LJour1}. For a complete description of these commands please refer
+to the user's guide.
+\oneskip\hrule\twoskip
+\obeylines
+
+{\bf Using the style file}
+\oneskip
+\verb|tex &cljour1 <filename>| or \verb|tex &pljour1 <filename>|
+
+\oneskip
+{\it Documentstyle}
+\halfskip
+\verb|cljour1| or \verb|pljour1|
+
+\oneskip
+{\it Styleoptions}
+\mhalfskip
+\begin{flushleft}\tt
+referee\hfill footinfo\hfill leqno\hfill bibay\hfill deutsch\hfill%
+german\hfill francais\hfill amssymb
+\end{flushleft}
+
+\oneskip\hrule\twoskip%------------------------------
+{\bf The beginning of an article}
+\begin{verbatim}
+\documentstyle[<style options>]{<docstyle>}
+<macro definitions>
+\journalname{<name of journal>}
+\renewcommand{\abstractname}{<heading for abstract>.}
+\renewcommand{\subclassname}{{\it <heading>.}}
+\begin{document}
+\headnote{<text>}
+\title{<title of article>}
+\titlerunning{<short form of title>}
+\subtitle{<subtitle of article>}
+\author{<name of first author>\inst{<number>}
+\and <name of second author>\inst{<number>} ...}
+\authorrunning{<name of first author> et al.}
+\institute{<first address> \and <second address>}
+\thanks{<text of footnote>}
+\thanks{{\it Present address:\/} <address>}
+\offprints{<name>}
+\date{Received <date>; accepted <date>}
+\dedication{<dedication>}
+\maketitle
+\begin{abstract} <abstract> \end{abstract}
+\keywords{<keyword -- keyword -- ...>}
+\subclass{<classification>}
+\transtitle{<title in English>}
+\begin{transsummary} <English translation of summary>
+\end{transsummary}
+\transkey {<key words in English>}
+\end{verbatim}
+
+\oneskip
+{\it Footnote mark separator}
+\halfskip
+\verb|\fnmsep|
+
+\oneskip\hrule\twoskip%------------------------------
+
+{\bf Headings}
+\begin{verbatim}
+\section{<title of section>}
+\subsection{<title of subsection>}
+\subsubsection{<title of subsection>}
+\paragraph{<title of paragraph>}
+\end{verbatim}
+\oneskip\hrule\twoskip%------------------------------
+
+{\bf Special typefaces}
+\begin{verbatim}
+\vec{<letter>}
+\tens{<letter>}
+{\Bbb <symbol>}
+{\sc <text>}
+\end{verbatim}
+\oneskip\hrule\twoskip%------------------------------
+
+{\bf Footnotes}
+\oneskip
+\verb|\footnote{<text>}|
+
+\oneskip\hrule\twoskip%------------------------------
+
+{\bf Lists}
+\begin{verbatim}
+\begin{description}[<largelabel>]
+\item[<label>] <text>
+\end{description}
+\end{verbatim}
+\oneskip\hrule\twoskip%------------------------------
+
+{\bf Paragraphs in small print}
+\begin{verbatim}
+\begin{petit} <text> \end{petit}
+\end{verbatim}
+\oneskip\hrule\twoskip%------------------------------
+%\vfill\eject
+
+{\bf Mini-environments}
+\begin{verbatim}
+\begin{<name of environment>}[<optional material>]
+<text for that environment>
+\end{<name of environment>}
+\end{verbatim}
+
+\oneskip
+{\it Defining new environments}
+\mhalfskip
+\begin{verbatim}
+\newtheorem{<env_nam>}{<caption>}[<within>]
+{<cap_font>}{<body_font>}
+\end{verbatim}
+or
+\begin{verbatim}
+\newtheorem{<env_nam>}[<num_like>]{<caption>}
+{<cap_font>}{<body_font>}
+\end{verbatim}
+\oneskip\hrule\twoskip%------------------------------
+
+{\bf Listings of computer programs}
+\oneskip
+\verb@\verb|<code>|@
+
+\noindent\verb|\begin{verbatim}|
+\verb|<code>|
+\verb|\end{verbatim}|
+
+\oneskip\hrule\twoskip%------------------------------
+
+{\bf Figures}
+\oneskip
+{\it One figure}
+\mhalfskip
+\begin{verbatim}
+\begin{figure}
+\picplace{<height> cm}
+\caption[]{<text>}
+\end{figure}
+\end{verbatim}
+
+\oneskip
+{\it Two figures side by side}
+\mhalfskip
+\begin{verbatim}
+\begin{figure}
+\picplace{<height>cm}
+\firstcaption{<legend of first figure>}
+\secondcaption{<legend of second figure>}
+\end{figure}\end{verbatim}
+
+\oneskip
+{\it Two figures side by side with legend one below the other}
+\mhalfskip
+\begin{verbatim}
+\begin{figure}
+\picplace{<height> cm}
+\caption{<legend of first figure>}
+\caption{<legend of second figure>}
+\end{figure}
+\end{verbatim}
+\oneskip\hrule\twoskip%------------------------------
+%\vfill\eject
+
+{\bf Tables}
+\oneskip
+{\it Coded with \LaTeX}
+\mhalfskip
+\begin{verbatim}
+\begin{table}
+\centering
+\caption[ ]{<table caption>}
+\begin{tabular}{<alignment specs>}
+<input for table>
+\end{tabular}
+\end{table}
+\end{verbatim}
+
+\oneskip
+{\it Not coded with \LaTeX}
+\mhalfskip
+\begin{verbatim}
+\begin{table}
+\caption[]{<text of caption>}
+\picplace{<height> cm}
+\end{table}
+\end{verbatim}
+\oneskip\hrule\twoskip%------------------------------
+
+{\bf Acknowledgements}
+\oneskip
+\verb|\begin{acknowledgements} <text>
+\end{acknowledgements}|
+\oneskip\hrule\twoskip%------------------------------
+
+{\bf Appendices}
+\oneskip
+\verb|\appendix|
+\oneskip\hrule\twoskip%------------------------------
+
+{\bf References}
+\oneskip
+\verb|\cite{<ref-id>}|
+
+\oneskip
+{\it By number or by letter and number}
+\mhalfskip
+\begin{verbatim}
+\begin{thebibliography}[<label>]{<title>}
+<bibliographic entries>
+\end{thebibliography}
+\end{verbatim}
+For details please see \LaTeX{} manual.
+
+\oneskip
+{\it Author-year system}
+\mhalfskip
+\begin{verbatim}
+\begin{thebibliography}[<label>]{<title>}
+\bibitem{}{<key>}{<citation>} <bibliographic entry>
+...
+\end{thebibliography}
+\end{verbatim}
+
+\vfill
+{\large\bf\hfill Springer International}
+\end{document}
diff --git a/obsolete/macros/latex209/contrib/springer/ljour/lmatann.dem b/obsolete/macros/latex209/contrib/springer/ljour/lmatann.dem
new file mode 100644
index 0000000000..af97517f29
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/ljour/lmatann.dem
@@ -0,0 +1,360 @@
+% lmatann.dem
+% LaTeX package LJour1 1.0: demo file for Mathematische Annalen
+% (c) Springer-Verlag HD
+%----------------------------------------------------------------------
+%
+% customization
+\documentstyle[bibay]{pljour1}
+\journalname{Mathematische Annalen } % State name of journal
+\newcommand{\DXDYCZ}[3]{\left( \frac{ \partial #1 }{ \partial #2 }
+ \right)_{#3}}
+% end of customization
+%
+\begin{document}
+%
+\title{ Optimality relationships for $p$-cyclic
+ SOR\thanks{Research supported in part by the US Air Force under
+ grant no. AFOSR-88-0285 and the National Science Foundation under
+ grant no. DMS-85-0285.}\fnmsep\thanks{In memory of J.L. Verdier}}
+\subtitle{A demonstration text}
+\author{Daniel J. Pierce\inst{1} \and Apostolos
+ Jadjidimos\inst{2}\fnmsep\thanks{{\it Present address:\/} Department
+ of Computer Science, Purdue University, West Lafayette, IN 47907, USA.}
+ \and Robert J. Plemmons\inst{3}}
+\mail{R. Plemmons}
+\titlerunning{Optimality relationships for $p$-cyclic SOR}
+\authorrunning{D. J. Pierce et al.}
+\institute{Boeing Computer Service, P.O. Box 24346, MS 7L-21,
+ Seattle, WA 98124-0346, USA \and
+ Department of Mathematics, University of Ioannina, GR-45 1210
+ Ionnanina, Greece \and
+ Department of Computer Science and Mathematics, North Carolina
+ State University, Raleigh, NC 27695-8205, USA}
+\date{Received: 20 January 1989 / Accepted: 3 August 1991}
+\maketitle
+
+\section{Introduction}
+This text was compiled to demonstrate the use of the Springer
+\LaTeX\ macropackages {\em LJour1\/} for one-column journals.
+Please refer to \cite{leslie} for general information on coding \LaTeX{}
+and to the \cite{springer} for information concerning the Springer
+layout.
+
+Parts of this ``article" were taken from different real articles, but
+may have been changed to show a special feature of a macro.
+
+\section{Notation}
+
+Here are a few examples of how to use special fonts. Vectors are denoted
+by boldface letters: $\vec V,\; \vec W$. Tensors are denoted by sans
+serif letters: $\tens{A, B}$. If no tensors are needed, sans serif
+letters may be reserved for other purposes. Vector spaces may be denoted
+by gothic letters: $\frak{G, H}$. Sets of functions are denoted by
+script letters: ${\cal W}_i,{\cal F}$. Sets of numbers are denoted by
+special roman letters ${\Bbb R}, {\Bbb C}$.
+
+You are of course (within limits) free to design your own notation but
+sticking to conventions makes your article easier for others to read.
+
+\section{Preliminaries}
+Let us state a few well known results and demonstrate how to typeset
+lists. The functions $f$ and $g$ of (1) and (2) fulfill the following
+assumptions:
+
+\begin{enumerate}
+\item $f: B_f \subset {\Bbb R}^n \times {\Bbb R}^n \times [a,b] \to
+{\Bbb R}^n$ \\
+$f^\prime _x$, $f^\prime_y$ exist and are continous
+\item ker$(f^\prime _y (y, x, t)) = N (t)\quad \forall (y, x, t)
+\in B_f$ \\
+${\rm rank} (f^\prime _y (y, x, t)) = r$ \\
+${\rm dim} (N (t)) = n - r$
+\item $Q(t)$ denotes a projection onto $N(t)$ \\
+$Q$ is smooth and $P(t) := I - Q (t)$
+\item The matrix $G (y, x, t) := f^\prime _y (y, x, t) + f^\prime
+_x (y, x, t) Q (t)$ is nonsingular \\
+$\forall (y, x, t) \in B_f$\quad (i.e. (1) is transferable)
+\item $g: B_g \subset {\Bbb R}^n \times {\Bbb R}^n \to M \subset
+{\Bbb R}^n$ \\
+$g^\prime _{x_a} , g^\prime _{x_b}$ exist and are continuous\\
+${\rm im} (g^\prime _{x_a} , g^\prime _{x_b}) =: M$
+\end{enumerate}
+
+Now we give another example of a list with changed indentation.
+
+\begin{description}[Shoot.]
+
+\item[Shoot.]
+Collocation methods for this type of equations are considered in
+\cite{yser} and \cite{wendl}. Shooting and difference methods for
+linear, {\it solvable} DAE's in the sense of [9], also with higher
+index, are treated in [8] under the assumption that consistent initial
+values can be calculated and a stable integration method is available.
+
+\item[Diff.]
+This paper aims at constructing an algorithm for solving a BVP in
+transferable nonlinear DAE's with nonsingular Jacobian and the same
+dimension as in the ODE case.
+
+\begin{description}[Jacob.]
+
+\item[Jacob.] We also deal with Jacobians, which means that we
+explain the functions, advantages and inconveniences of calling them not
+Jacobians.....
+
+\item[Nonl.] Nonlinear functions play an important role in
+this connection. Please note that we always call them nonlinear whenever
+there is no............
+
+\end{description}
+
+\end{description}
+
+\section{The shooting method}
+The natural way to construct a shooting method for DAE's is described by
+\cite{yser}.
+
+The physical meaning of $ \sigma_0 $ and $K$ is clearly visible in
+the equations above. $\sigma_0$ represents a frequency of the order one
+per free-fall time. $K$ is
+proportional to the ratio of the free-fall time and the cooling time.
+Substituting into Baker's criteria, using thermodynamic identities
+and definitions of thermodynamic quantities,
+\begin{displaymath}
+ \Gamma_1 = \DXDYCZ{\ln P}{\ln \rho}{S} \, , \;
+ \chi^{}_\rho = \DXDYCZ{\ln P}{\ln \rho}{T} \, , \;
+ \kappa^{}_{P} = \DXDYCZ{\ln \kappa}{\ln P}{T}
+\end{displaymath}
+\begin{displaymath}
+ \nabla_{\rm ad} = \DXDYCZ{\ln T}{\ln P}{S} \, , \;
+ \chi^{}_T = \DXDYCZ{\ln P}{\ln T}{\rho} \, , \;
+ \kappa^{}_{T} = \DXDYCZ{\ln \kappa}{\ln T}{T}
+\end{displaymath}
+one obtains, after some pages of algebra, the conditions for
+{\em stability} given
+below:
+\begin{eqnarray}
+ \frac{\pi^2}{8} \frac{1}{\tau_{\rm ff}^2}
+ ( 3 \Gamma_1 - 4 )
+ & > & 0 \label{ZSDynSta} \\
+ \frac{\pi^2}{\tau_{\rm co}
+ \tau_{\rm ff}^2}
+ \Gamma_1 \nabla_{\rm ad}
+ \left[ \frac{ 1- 3/4 \chi^{}_\rho }{ \chi^{}_T }
+ ( \kappa^{}_T - 4 )
+ + \kappa^{}_P + 1
+ \right]
+ & > & 0 \label{ZSSecSta} \\
+ \frac{\pi^2}{4} \frac{3}{\tau_{ \rm co }
+ \tau_{ \rm ff }^2
+ }
+ \Gamma_1^2 \, \nabla_{\rm ad} \left[
+ 4 \nabla_{\rm ad}
+ - ( \nabla_{\rm ad} \kappa^{}_T
+ + \kappa^{}_P
+ )
+ - \frac{4}{3 \Gamma_1}
+ \right]
+ & > & 0 \label{ZSVibSta}
+\end{eqnarray}
+
+For a physical discussion of the stability criteria see \cite{tetz}
+or \cite{yser}.
+
+\subsection{Disadvantages of the method}
+
+The disadvantage of Eq. (\ref{ZSVibSta}) is the singularity of the
+Jacobian. If we use the representation of
+$z_i = P_i z_i + Q_i z_i =: u_i + v_i$, we obtain the following system
+
+\begin{eqnarray}
+g (u_0 + v_0 , x (t_m, t_{m-1}, u_{m-1}))& = & 0 \label{dis}\\
+u_i - P_i x (t_i; t_{i-1}, u_{i-1}) & = & 0\;,
+ \quad i = 1, \ldots , m-1\;. \label{das}
+\end{eqnarray}
+
+\subsection{Specialization of $V$}
+
+Now we specialize $V := \hat S^\prime $ in. Let $P_D$ be a
+projector with ${\rm im} (P_D) = M$. If we demand Eq. (\ref{das}) and
+\begin{eqnarray*}
+VV^- &=& P_D \\
+V^-V &=& P\; ,
+\end{eqnarray*}
+%
+the generalized inverse $V^-$ in uniquely determined. Using Lemma 1 we
+construct a regular matrix $K$ so that ${\rm im} (P_D) \oplus {\rm im}
+(K^{-1} Q) = {\Bbb R}^n$. This provides the possibility to add without
+loss $(K^{-1} Q) = {\Bbb R}^n$. This provides the possibility to add,
+without loss of information, the Eqs.\ts (\ref{dis}) and (\ref{six})
+(after multiplying by $K^{-1})$. The following shooting operator is
+created
+\begin{equation}
+\quad S (\xi ) := \left\{
+\begin{array}{ll}
+ S_1 (\xi):= & \left\{
+ \begin{array} {ll}
+ g (u_0 + v_0, x (t_m; t_{m-1}, u_{m-1})) + K^{-1} Q_0 u_0
+ &\quad (a)\\
+ u_i - P_i x (t_i; t_{i-1} , u_{i-1})\; i = 1, \ldots , m-1
+ & \quad(b)
+ \end{array} \right. \\
+ S_2 (\xi) := & \left\{
+ \begin{array} {ll}
+ Q_0 y_0 + P_0 v_0 & \quad (c)\\
+ f(y_0, u_0 + v_0, t_0) & \quad (d) \quad ,
+ \end{array}
+ \right.
+\end{array} \right.\label{six}
+\end{equation}
+%
+with $\xi := (u_0 , u_1, \ldots , u_{m-1} , y_0, v_0)^{\rm T}$.
+
+\begin{lemma}
+Let $V$ be a singular matrix and $V^-$ a reflexive inverse of $V$ with
+Sect. (2.3) and $VV^- = P_D$, $V^-V = P$, where $P$ and $P_D$ satisfy
+the conditions of Lemma 2.1. Then the matrix $V + K^{-1} Q$ is
+nonsingular and
+%
+\[ (V + K^{-1} Q) ^{-1} = V^- + QK\; , \]
+%
+where $K$ is defined in Sect. (2.2).
+\end{lemma}
+
+\begin{proof}
+\begin{eqnarray*}
+(V + K^{-1}Q)(V^- + QK) & = & VV^- + VQK + K^{-1}QV^- + K^{-1} QK \\
+& = & P_D + 0 + 0 + Q_D = I\; . \quad\qed
+\end{eqnarray*}
+\end{proof}
+
+\begin{remark}
+The value $w := (P_s v_0 + Q_0 G^{-1} f (y_0, u_0 + v_0, t_0))$ at
+the right-hand side of Eq. (16) is the solution of the linear system
+\begin{equation}
+ J_4 \left(\begin{array}{c} \eta \\ w \end{array} \right)
+ = \left(\begin{array}{c} Q_0 y_0 + P_0 v_0 \\
+ f (y_0, u_0 + v_0, t_0) \end{array} \right)
+\end{equation}
+\end{remark}
+
+\begin{figure}\picplace {4 cm}
+\firstcaption{The doping profile $C (t)$ has the same structure as
+$N_-$}
+\secondcaption{The doping profile of $C (z)$}
+\end{figure}
+
+This leads to the following algorithm to compute the iteration $\xi^i$:
+\begin{description}[5 ---]
+\item[0 -- ] initial value $\xi^0 := (u_0^0 , \ldots , u^0_{m-1} , y_0^0
+, v_0^0)$
+\item[1 -- ] $i:= 0$
+\item[2 -- ] compute $u^{i+1}$ with (3.16)
+\item[3 -- ] compute $y^{i+1}_0, v_0^{i+1}$ with (3.17) using $\Delta
+u^{i+1} := u^{i+1} - u^i$
+\item[4 -- ]$i:= i + 1$
+\item[5 -- ]{\tt IF} accuracy not reached {\tt THEN GOTO 2 ELSE STOP}
+\end{description}
+
+\begin{theorem} Let the assumptions (A), (B) be fulfilled. Then the
+non-linear equation
+$$
+S (\xi) = 0
+$$
+has a nonsingular Jacobian in a neighbourhood of
+$$
+\xi = \xi_\star := (u_{\star 0}, \ldots , u_{\star m-1} , y_{\star 0},
+v_{\star 0})\; ,
+$$
+which corresponds with $x_\star$.
+\end{theorem}
+
+\section{Implementation}
+If listing of a program is desired, this is possible too \cite{darnell}
+
+\begin{verbatim}
+void get_two_kbd_chars()
+{
+ extern char KEYBOARD;
+ char c0, c1;
+
+ c0 = KEYBOARD;
+ c1 = KEYBOARD;
+}
+\end{verbatim}
+
+\section{Solutions}
+
+We solve this problem with the relative accuracy of integration $1d-4$.
+The physical meaning of $ \sigma_0 $ and $K$ is clearly visible in the
+equations above. $\sigma_0$ represents a frequency of the order one per
+free-fall time. $K$ is proportional to the ratio of the free-fall time
+and the cooling time. The experimental tests of the Standard Model and
+thereby of the unification of the weak and electromagnetic interactions
+have reached a new level of accuracy. The results are given in Table
+\ref{KapSou}.
+
+\begin{table}
+ \caption{Opacity sources}\label{KapSou}
+ \centering
+ \begin{tabular}{ll}
+ \hline\noalign{\smallskip}
+ Source & T/[K] \\
+ \noalign{\smallskip}
+ \hline
+ \noalign{\smallskip}
+ Yorke 1979, Yorke 1980a & $\leq 1700^{\rm a}$ \\
+ Kr\"ugel 1971 & $1700 \leq T \leq 5000$ \\
+ Cox and Stewart 1969 & $5000 \leq $ \\
+ \noalign{\smallskip}\hline\noalign{\smallskip}
+ $^{\rm a}$ This is a footnote.
+ \end{tabular}
+\end{table}
+
+\begin{acknowledgement}I wish to thank Prof. Dr. Roswitha M\"arz for
+many helpful discussions.\end{acknowledgement}
+
+\begin{thebibliography}[9]{References}
+% Note that space for square brackets is added to the width of the label
+% specified in the [] argument. If you don't use []s in your
+% bibliography, specify a narrower label or omit the specification
+% altogether. In this case \parindent is used.
+
+\bibitem{1.}{darnell}{[1]}
+Darnell, P.A., Margolis, P.E. (1988): C, A software engineering
+approach. Springer Verlag Berlin Heidelberg New York
+
+\bibitem{2.}{leslie}{[2]}
+Lamport, L. (1986): \LaTeX: A document preparation system.
+Addison-Wesley Publishing Company, Inc.
+
+\bibitem{3.}{seroul}{[3]}
+Seroul, R., Levy, S. (1989): A beginner's book of \TeX{}. Springer New
+York Berlin Heidelberg
+
+\bibitem{4.}{springer}{[4]}
+LJour1: Springer's \LaTeX{} style file for journals with one-column
+layout. Springer Heidelberg
+
+\bibitem{5.}{stroud}{[5]}
+Strout, A.H. (1971): approximate calculation of multiple integrals.
+Prentice Hall, Englewood Cliffs, N.J.
+
+\bibitem{6.}{tetz}{[6]}
+Tetzlaff, A. (1970): Stability in the Common Market. To appear.
+
+\bibitem{7.}{wendl}{[15]}
+Wendland, W.L., (1987): Strongly elliptic boundary integral equations.
+In: A. Iserles, M. Powell, eds., The state of the art in numerical
+analysis. Clarendon Press, Oxford, pp. 511--561
+
+\bibitem{8.}{yser}{[16]}
+Yserentant, H. (1983): A remark on the numerical computation of
+improper integrals. Computing {\bf 30}, 179--183
+
+\medskip\noindent
+\bibitem{Please}{}{}refer to a recent issue of the journal for further
+examples on how to format references.
+
+\end{thebibliography}
+\end{document}
diff --git a/obsolete/macros/latex209/contrib/springer/ljour/lnummat.dem b/obsolete/macros/latex209/contrib/springer/ljour/lnummat.dem
new file mode 100644
index 0000000000..90105d535c
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/ljour/lnummat.dem
@@ -0,0 +1,365 @@
+% lnummat.dem
+% LaTeX package LJour1 1.0: demo file for Numerische Mathematik
+% (c) Springer-Verlag HD
+%----------------------------------------------------------------------
+%
+% customization
+\documentstyle[bibay,leqno]{pljour1}
+\journalname{Numerische Mathematik} % State name of journal
+\renewcommand{\subclassname}
+ {{\it Mathematics Subject Classification (1991):\/}}
+\newcommand{\DXDYCZ}[3]{\left( \frac{ \partial #1 }{ \partial #2 }
+ \right)_{#3}}
+% end of customization
+%
+\begin{document}
+%
+\title{ Optimality relationships for $p$-cyclic
+ SOR\thanks{Research supported in part by the US Air Force under
+ grant no. AFOSR-88-0285 and the National Science Foundation under
+ grant no. DMS-85-0285.}\fnmsep\thanks{Second footnote.}}
+\subtitle{A demonstration text}
+\author{Daniel J. Pierce\inst{1} \and Apostolos
+ Jadjidimos\inst{2}\fnmsep\thanks{{\it Present address:\/} Department
+ of Computer Science, Purdue University, West Lafayette, IN 47907, USA.}
+ \and Robert J. Plemmons\inst{3}}
+\mail{R. Plemmons}
+\titlerunning{Optimality relationships for $p$-cyclic SOR}
+\authorrunning{D. J. Pierce et al.}
+\institute{Boeing Computer Service, P.O. Box 24346, MS 7L-21,
+ Seattle, WA 98124-0346, USA \and
+ Department of Mathematics, University of Ioannina, GR-45 1210
+ Ionnanina, Greece \and
+ Department of Computer Science and Mathematics, North Carolina
+ State University, \\
+ Raleigh, NC 27695-8205, USA}
+\date{Received January 20, 1992}
+\maketitle
+\begin{abstract}
+ The optimality question for block $p$-cyclic matrix into a block
+ $q$-cyclic form, $q < p$, results in asymptotically faster SOR
+ convergence for the same amount of work per iteration. As a
+ consequence block 2-cyclic SOR is optimal under these conditions.
+\end{abstract}
+\subclass{65N30}
+
+\section{Introduction}
+This text was compiled to demonstrate the use of the Springer
+\LaTeX\ macropackages {\em LJour1\/} for one-column journals.
+Please refer to \cite{leslie} for general information on coding \LaTeX{}
+and to the \cite{springer} for information concerning the Springer
+layout.
+
+Parts of this ``article" were taken from different real articles, but
+may have been changed to show a special feature of a macro.
+
+\section{Notation}
+
+Here are a few examples of how to use special fonts. Vectors are denoted
+by boldface letters: $\vec V,\; \vec W$. Tensors are denoted by sans
+serif letters: $\tens{A, B}$. If no tensors are needed, sans serif
+letters may be reserved for other purposes. Vector spaces may be denoted
+by gothic letters: $\frak{G, H}$. Sets of functions are denoted by
+script letters: ${\cal W}_i,{\cal F}$. Sets of numbers are denoted by
+special roman letters ${\Bbb R}, {\Bbb C}$.
+
+You are of course (within limits) free to design your own notation but
+sticking to conventions makes your article easier for others to read.
+
+\section{Preliminaries}
+Let us state a few well known results and demonstrate how to typeset
+lists. The functions $f$ and $g$ of (1) and (2) fulfill the following
+assumptions:
+
+\begin{enumerate}
+\item $f: B_f \subset {\Bbb R}^n \times {\Bbb R}^n \times [a,b] \to
+{\Bbb R}^n$ \\
+$f^\prime _x$, $f^\prime_y$ exist and are continous
+\item ker$(f^\prime _y (y, x, t)) = N (t)\quad \forall (y, x, t)
+\in B_f$ \\
+${\rm rank} (f^\prime _y (y, x, t)) = r$ \\
+${\rm dim} (N (t)) = n - r$
+\item $Q(t)$ denotes a projection onto $N(t)$ \\
+$Q$ is smooth and $P(t) := I - Q (t)$
+\item The matrix $G (y, x, t) := f^\prime _y (y, x, t) + f^\prime
+_x (y, x, t) Q (t)$ is nonsingular \\
+$\forall (y, x, t) \in B_f$\quad (i.e. (1) is transferable)
+\item $g: B_g \subset {\Bbb R}^n \times {\Bbb R}^n \to M \subset
+{\Bbb R}^n$ \\
+$g^\prime _{x_a} , g^\prime _{x_b}$ exist and are continuous\\
+${\rm im} (g^\prime _{x_a} , g^\prime _{x_b}) =: M$
+\end{enumerate}
+
+Now we give another example of a list with changed indentation.
+
+\begin{description}[Shoot.]
+
+\item[Shoot.]
+Collocation methods for this type of equations are considered. Shooting
+and difference methods for linear, {\em solvable} DAE's, also with
+higher index, are treated in \cite{wendl} under the assumption that
+consistent initial values can be calculated and a stable integration
+method is available.
+
+\item[Diff.]
+This paper aims at constructing an algorithm for solving a BVP in
+transferable nonlinear DAE's with nonsingular Jacobian and the same
+dimension as in the ODE case.
+
+\begin{description}[Jacob.]
+
+\item[Jacob.] We also deal with Jacobians, which means that we
+explain the functions, advantages and inconveniences of calling them not
+Jacobians.
+
+\item[Nonl.] Nonlinear functions play an important role in
+this connection. Please note that we always call them nonlinear whenever
+they are not linear.
+
+\end{description}
+
+\end{description}
+
+\section{The shooting method}
+The natural way to construct a shooting method to solve equations
+of type DAE is described by \cite{yser}.
+
+The physical meaning of $ \sigma_0 $ and $K$ is clearly visible in
+the equations above. $\sigma_0$ represents a frequency of the order one
+per free-fall time. $K$ is
+proportional to the ratio of the free-fall time and the cooling time.
+Substituting into Baker's criteria, using thermodynamic identities
+and definitions of thermodynamic quantities,
+\begin{displaymath}
+ \Gamma_1 = \DXDYCZ{\ln P}{\ln \rho}{S} \, , \;
+ \chi^{}_\rho = \DXDYCZ{\ln P}{\ln \rho}{T} \, , \;
+ \kappa^{}_{P} = \DXDYCZ{\ln \kappa}{\ln P}{T}
+\end{displaymath}
+\begin{displaymath}
+ \nabla_{\rm ad} = \DXDYCZ{\ln T}{\ln P}{S} \, , \;
+ \chi^{}_T = \DXDYCZ{\ln P}{\ln T}{\rho} \, , \;
+ \kappa^{}_{T} = \DXDYCZ{\ln \kappa}{\ln T}{T}
+\end{displaymath}
+one obtains, after some pages of algebra, the conditions for
+{\em stability} given
+below:
+\begin{eqnarray}
+ \frac{\pi^2}{8} \frac{1}{\tau_{\rm ff}^2}
+ ( 3 \Gamma_1 - 4 )
+ & > & 0 \label{ZSDynSta} \\
+ \frac{\pi^2}{\tau_{\rm co}
+ \tau_{\rm ff}^2}
+ \Gamma_1 \nabla_{\rm ad}
+ \left[ \frac{ 1- 3/4 \chi^{}_\rho }{ \chi^{}_T }
+ ( \kappa^{}_T - 4 )
+ + \kappa^{}_P + 1
+ \right]
+ & > & 0 \label{ZSSecSta} \\
+ \frac{\pi^2}{4} \frac{3}{\tau_{ \rm co }
+ \tau_{ \rm ff }^2
+ }
+ \Gamma_1^2 \, \nabla_{\rm ad} \left[
+ 4 \nabla_{\rm ad}
+ - ( \nabla_{\rm ad} \kappa^{}_T
+ + \kappa^{}_P
+ )
+ - \frac{4}{3 \Gamma_1}
+ \right]
+ & > & 0 \label{ZSVibSta}
+\end{eqnarray}
+
+For further examples and a physical discussion of the stability criteria
+see \cite{tetz} or \cite{yser}.
+
+\subsection{Disadvantages of the method}
+
+The disadvantage of Eq. (\ref{ZSVibSta}) is the singularity of the
+Jacobian. If we use the representation of
+$z_i = P_i z_i + Q_i z_i =: u_i + v_i$, we obtain the following system
+
+\begin{eqnarray}
+g (u_0 + v_0 , x (t_m, t_{m-1}, u_{m-1}))& = & 0 \label{dis}\\
+u_i - P_i x (t_i; t_{i-1}, u_{i-1}) & = & 0\;,
+ \quad i = 1, \ldots , m-1\;. \label{das}
+\end{eqnarray}
+
+\subsection{Specialization of $V$}
+
+Now we specialize $V := \hat S^\prime $ in. Let $P_D$ be a
+projector with ${\rm im} (P_D) = M$. If we demand Eq. (\ref{das}) and
+\begin{eqnarray*}
+VV^- &=& P_D \\
+V^-V &=& P\; ,
+\end{eqnarray*}
+%
+the generalized inverse $V^-$ in uniquely determined. Using Lemma 1 we
+construct a regular matrix $K$ so that ${\rm im} (P_D) \oplus {\rm im}
+(K^{-1} Q) = {\Bbb R}^n$. This provides the possibility to add without
+loss $(K^{-1} Q) = {\Bbb R}^n$. This provides the possibility to add,
+without loss of information, the Eqs.\ts (\ref{dis}) and (\ref{six})
+(after multiplying by $K^{-1})$. The following shooting operator is
+created
+\begin{equation}
+\quad S (\xi ) := \left\{
+\begin{array}{ll}
+ S_1 (\xi):= & \left\{
+ \begin{array} {ll}
+ g (u_0 + v_0, x (t_m; t_{m-1}, u_{m-1})) + K^{-1} Q_0 u_0
+ &\quad (a)\\
+ u_i - P_i x (t_i; t_{i-1} , u_{i-1})\; i = 1, \ldots , m-1
+ & \quad(b)
+ \end{array} \right. \\
+ S_2 (\xi) := & \left\{
+ \begin{array} {ll}
+ Q_0 y_0 + P_0 v_0 & \quad (c)\\
+ f(y_0, u_0 + v_0, t_0) & \quad (d) \quad ,
+ \end{array}
+ \right.
+\end{array} \right.\label{six}
+\end{equation}
+%
+with $\xi := (u_0 , u_1, \ldots , u_{m-1} , y_0, v_0)^{\rm T}$.
+
+\begin{lemma}
+Let $V$ be a singular matrix and $V^-$ a reflexive inverse of $V$ with
+Sect. (2.3) and $VV^- = P_D$, $V^-V = P$, where $P$ and $P_D$ satisfy
+the conditions of Lemma 2.1. Then the matrix $V + K^{-1} Q$ is
+nonsingular and
+%
+\[ (V + K^{-1} Q) ^{-1} = V^- + QK\; , \]
+%
+where $K$ is defined in Sect. (2.2).
+\end{lemma}
+
+\begin{proof}
+\begin{eqnarray*}
+(V + K^{-1}Q)(V^- + QK) & = & VV^- + VQK + K^{-1}QV^- + K^{-1} QK \\
+& = & P_D + 0 + 0 + Q_D = I\; . \quad\qed
+\end{eqnarray*}
+\end{proof}
+
+\begin{remark}
+The value $w := (P_s v_0 + Q_0 G^{-1} f (y_0, u_0 + v_0, t_0))$ at
+the right-hand side of Eq. (16) is the solution of the linear system
+\begin{equation}
+ J_4 \left(\begin{array}{c} \eta \\ w \end{array} \right)
+ = \left(\begin{array}{c} Q_0 y_0 + P_0 v_0 \\
+ f (y_0, u_0 + v_0, t_0) \end{array} \right)
+\end{equation}
+\end{remark}
+
+\begin{figure}\picplace {4 cm}
+\firstcaption{The doping profile $C (t)$ has the same structure as
+$N_-$}
+\secondcaption{The doping profile of $C (z)$}
+\end{figure}
+
+This leads to the following algorithm to compute the iteration $\xi^i$:
+\begin{description}[5 ---]
+\item[0 -- ] initial value $\xi^0 := (u_0^0 , \ldots , u^0_{m-1} , y_0^0
+, v_0^0)$
+\item[1 -- ] $i:= 0$
+\item[2 -- ] compute $u^{i+1}$ with (3.16)
+\item[3 -- ] compute $y^{i+1}_0, v_0^{i+1}$ with (3.17) using $\Delta
+u^{i+1} := u^{i+1} - u^i$
+\item[4 -- ]$i:= i + 1$
+\item[5 -- ]{\tt IF} accuracy not reached {\tt THEN GOTO 2 ELSE STOP}
+\end{description}
+
+\begin{theorem} Let the assumptions (A), (B) be fulfilled. Then the
+non-linear equation
+$$
+S (\xi) = 0
+$$
+has a nonsingular Jacobian in a neighbourhood of
+$$
+\xi = \xi_\star := (u_{\star 0}, \ldots , u_{\star m-1} , y_{\star 0},
+v_{\star 0})\; ,
+$$
+which corresponds with $x_\star$.
+\end{theorem}
+
+\section{Implementation}
+If listing of a program is desired, this is possible too \cite{darnell}
+
+\begin{verbatim}
+void get_two_kbd_chars()
+{
+ extern char KEYBOARD;
+ char c0, c1;
+
+ c0 = KEYBOARD;
+ c1 = KEYBOARD;
+}
+\end{verbatim}
+
+\section{Solutions}
+We solve this problem with the relative accuracy of integration $1d-4$.
+The experimental tests of the Standard Model and thereby of the
+unification of the weak and electromagnetic interactions have reached a
+new level of accuracy. The results are given in Table \ref{KapSou}.
+
+\begin{table}
+ \caption{Opacity sources}\label{KapSou}
+ \centering
+ \begin{tabular}{ll}
+ \hline\noalign{\smallskip}
+ Source & T/[K] \\
+ \noalign{\smallskip}
+ \hline
+ \noalign{\smallskip}
+ Yorke 1979, Yorke 1980a & $\leq 1700^{\rm a}$ \\
+ Kr\"ugel 1971 & $1700 \leq T \leq 5000$ \\
+ Cox and Stewart 1969 & $5000 \leq $ \\
+ \noalign{\smallskip}\hline\noalign{\smallskip}
+ $^{\rm a}$ This is a footnote.
+ \end{tabular}
+\end{table}
+
+\begin{acknowledgement}I wish to thank Prof. Dr. Roswitha M\"arz for
+many helpful discussions.\end{acknowledgement}
+
+\begin{thebibliography}[9]{References}
+% Note that space for square brackets is added to the width of the label
+% specified in the [] argument. If you don't use []s in your
+% bibliography, specify a narrower label or omit the specification
+% altogether. In this case \parindent is used.
+
+\bibitem{}{darnell}{(Darnell, 1988)}
+Darnell, P.A., Margolis, P.E. (1988): C, A software engineering
+approach. Springer Verlag Berlin Heidelberg New York
+
+\bibitem{}{leslie}{Lamport (1986)}
+Lamport, L. (1986): \LaTeX: A document preparation system.
+Addison-Wesley Publishing Company, Inc.
+
+\bibitem{}{seroul}{Seroul (1989)}
+Seroul, R., Levy, S. (1989): A beginner's book of \TeX{}. Springer New
+York Berlin Heidelberg
+
+\bibitem{}{springer}{LJour1 user's guide}
+LJour1: Springer's \LaTeX{} style file for journals with one-column
+layout. Springer Heidelberg
+
+\bibitem{}{stroud}{Strout (1971)}
+Strout, A.H. (1971): approximate calculation of multiple integrals.
+Prentice Hall, Englewood Cliffs, N.J.
+
+\bibitem{}{tetz}{Tetzlaff (1970)}
+Tetzlaff, A. (1970): Stability in the Common Market. To appear.
+
+\bibitem{}{wendl}{Wendland (1987)}
+Wendland, W.L., (1987): Strongly elliptic boundary integral equations.
+In: A. Iserles, M. Powell, eds., The state of the art in numerical
+analysis. Clarendon Press, Oxford, pp. 511--561
+
+\bibitem{}{yser}{Yserentant (1983)}
+Yserentant, H. (1983): A remark on the numerical computation of
+improper integrals. Computing {\bf 30}, 179--183
+
+\medskip\noindent
+\bibitem{Please}{}{}refer to a recent issue of the journal for further
+examples on how to format references.
+
+\end{thebibliography}
+\end{document}
diff --git a/obsolete/macros/latex209/contrib/springer/ljour/pljour1.ini b/obsolete/macros/latex209/contrib/springer/ljour/pljour1.ini
new file mode 100644
index 0000000000..bd096d4858
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/ljour/pljour1.ini
@@ -0,0 +1,13 @@
+% pljour1.ini
+% LaTeX package LJour1 1.0: initialization file of format with PS fonts
+% (c) Springer-Verlag HD
+%----------------------------------------------------------------------
+\let\FONTS=P
+\input flplain
+\input hyphen
+\makeatletter
+\input ljour1.mac
+\input amsfont.sty
+\makeatother
+\def\springerstylefile{pljour1}
+\dump
diff --git a/obsolete/macros/latex209/contrib/springer/ljour/preload.tex b/obsolete/macros/latex209/contrib/springer/ljour/preload.tex
new file mode 100644
index 0000000000..ce3b312cfe
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/ljour/preload.tex
@@ -0,0 +1,130 @@
+%% Save file as: PRELOAD.MIN Source: FILESERV@SHSU.BITNET
+%% Note: This is a file from the FONTSEL set written by Frank Mittelbach
+%% <PZF5HZ@RUIPC1E.BITNET> and Rainer Schoepf <SCHOEPF@SC.ZIB-Berlin.DE>
+%%
+%% This is file `/usr2/distrib/latex209/nfss/preload.min' generated
+%% on <1991/11/22> with the docstrip utility (v1.1k).
+%%
+%% The original source files were:
+%%
+%% preload.doc (with modules: `min')
+
+%%
+%% Copyright (C) 1989,1990,1991 by Frank Mittelbach, Rainer Schoepf.
+%% All rights reserved.
+%%
+%% This file is part of the NFSS (New Font Selection Scheme) package.
+%%
+%% IMPORTANT NOTICE:
+%%
+%% You are not allowed to change this file. You may however copy this file
+%% to a file with a different name and then change the copy if you obey
+%% the restrictions on file changes described in readme.mz.
+%%
+%% You are allowed to distribute this file under the condition that it is
+%% distributed together with all files mentioned in readme.mz3. If you
+%% receive only some of these files from someone, complain!
+%%
+%% You are NOT ALLOWED to distribute this file alone. You are NOT ALLOWED
+%% to take money for the distribution or use of either this file or a
+%% changed version, except for a nominal charge for copying etc.
+%%
+%% For error reports in case of UNCHANGED versions see readme files.
+%%
+%% Please do not request updates from us directly. Distribution is done
+%% through Mail-Servers and TeX organizations.
+%%
+
+\def\fileversion{v1.0h}
+\def\filedate{91/11/22}
+\def\docdate {91/11/22}
+
+%% \CheckSum{52}
+%% \CharacterTable
+%% {Upper-case \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
+%% Lower-case \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
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+
+%%
+%% This file preloads the absolute minimum of fonts (5) needed
+%% to successfully generate a format file for LaTeX.
+%%
+%% You should *not* change this file! If you want to preload more
+%% or less fonts you should create a copy of it named `preload.tex'
+%% and edit this one according to your needs!
+%%
+%%
+\immediate\write\sixt@@n{File: `preload.%
+ min' \space
+ \fileversion\space <\filedate> (FMi and RmS)}
+\immediate\write\sixt@@n{English Documentation
+ \@spaces\space <\docdate> (FMi and RmS)}
+\immediate\write\sixt@@n
+ {********************************************************************}
+\immediate\write\sixt@@n
+ {* Probably customized by YOU who forgot to change the lines above! *}
+\immediate\write\sixt@@n
+ {********************************************************************}
+%%
+%% We begin by loading the math extension font (cmex10)
+%% and the \LaTeX{} line and circle fonts.
+%% It is necessary to do this explicitly since these are
+%% used by {\tt lplain.tex} and {\tt latex.tex}.
+%% Since the internal font name contains \verb+/+ characters
+%% and digits we construct the name via \verb+\csname+.
+\expandafter\font\csname cmex/m/n/10\endcsname=cmex10
+\font\tenln =line10 \font\tenlnw =linew10
+\font\tencirc=lcircle10 \font\tencircw=lcirclew10
+
+%% The preloads below (with comment signs in front) will be loaded
+%% whenever standard \LaTeX{} is starting in 10pt size. So maybe you
+%% like to preload at least these 9 fonts or a similar set if you
+%% prefer documents in 11pt or 12pt size.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%
+%% cm roman fonts
+%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ %% None preloaded
+ %% \preload@sizes{cmr}{m}{n}{5,7,10}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%
+%% cm sans serif fonts
+%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ %% None preloaded
+
+%%%%%%%%%%%%%%%%%%%%%%%%%
+%% cm typewriter fonts
+%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ %% None preloaded
+
+%%%%%%%%%%%%%%%%%%%%%%%%%
+%% cm math fonts
+%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ %% \preload@sizes{cmm}{m}{it}{5,7,10}
+ %% \preload@sizes{cmsy}{m}{n}{5,7,10}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%
+%% LaTeX symbol fonts
+%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ %% None preloaded
+
+
+\endinput
+%%
+%% End of file `/usr2/distrib/latex209/nfss/preload.min'.
diff --git a/obsolete/macros/latex209/contrib/springer/ljour/read.me b/obsolete/macros/latex209/contrib/springer/ljour/read.me
new file mode 100644
index 0000000000..9158f463c0
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/ljour/read.me
@@ -0,0 +1,133 @@
+ read.me
+-----------------------------------------------------------------------
+LJour1 1.0: LaTeX style file for journals with one column layout
+read-me file
+ (c) Springer-Verlag HD
+-----------------------------------------------------------------------
+The package comes with the following files
+
+read.me General information on the package
+cljour1.ini .ini file for a format file using
+ CM fonts
+pljour1.ini .ini file for a format file using
+ PS fonts
+flplain.tex Macro file
+ljour1.mac Macro file
+fontdef.tex Font definitions (NFSS)
+preload.tex Copy of preload.min (NFSS)
+xxxlfont.sty Copy of oldlfont.sty (NFSS)
+amsfont.sty Macro file defining AMS fonts
+amssymb.sty Style option defining AMS symbols
+ljour1.doc LaTeX source of the user's guide
+ljour1.ref ``Reference card" listing all commands available
+*.dem Various demo files for different journals
+
+In addition, the following files have to be present on your system:
+- latex.tex as of March 25, 1992 or later
+- lplain.tex
+- art10.tex
+- article.tex
+- hyphen.tex or another hyphenation file
+- the New Font Selection Scheme (NFSS). If you don't have this set of
+ files, you can get it from any TeX file server or from
+ Springer-Verlag, NTP department on request.
+
+Using LJour1
+------------
+Please read the following instructions before starting to work with the
+macropackage.
+
+Why format files?
+-----------------
+As our macro package requires a lot of fonts in addition to those
+preloaded by LaTeX, it will normally not work if used via the
+\documentstyle statement. It is therefore necessary to create a new
+so-called format file with our package. This is done by submitting a set
+of macro definitions to a program called initex. This program processes
+the definitions, the font specifications, and the original LaTeX macros
+and stores all of them in "compiled" form in a format file. This process
+does not produce any output, in the way that an ordinary run of TeX
+does, but speeds things up for all subsequent runs you make, using LaTeX
+in combination with our macros and font selection.
+
+Creating the format file
+------------------------
+1. Create a directory called ljour1 and copy all files from the package
+except the style options into this directory. The style option file has
+to be transfered into a directory that TeX searches for input files.
+
+2. Decide for which language you want to create a format file and, for a
+language other than English, edit the file cljour1.ini or pljour1.ini so
+that it includes the correct hyphenation patterns. Ask your TeXpert for
+the correct file name or consult the documentation of your TeX
+implementation. English hyphenation patterns are the default setting.
+
+3. Make sure that all fonts required are on your hard disk. If
+necessary, install the NFSS and any fonts that are missing.
+
+4. Before creating a PS format file, check and if necessary correct the
+names of the PS fonts in the file fontdef.tex.
+
+5. Run initex with the file cljour1.ini or pljour1.ini. The exact syntax
+of this command depends on the implementation. If necessary increase the
+amount of font and/or main memory allocated by TeX.
+
+After initex has successfully completed its task, you will have a format
+file called cljour1.fmt if you requested CM fonts and pljour1.fmt if you
+requested PS fonts.
+
+6. You will want to create both a CM and a PS format file, the first for
+previewing and the second for the final run.
+
+7. After you have completed both format files you can remove the
+following files from your hard disk:
+ pljour1.ini, cljour1.ini, ljour1.mac, flplain.tex fontdef.tex,
+ preload.tex, xxxlfont.sty, amsfont.sty.
+
+Installing the fonts
+--------------------
+For DOS installations you can have the program finstall (to be
+found on the AMS fonts diskettes only, not in the macro package
+itself) install the AMS fonts for you. In all other cases you must copy
+the files from diskettes into the appropriate directories yourself.
+
+Do not forget that, in general, the printer or screen driver must be
+instructed how to find the additional pixel files. Most of the drivers
+have a configuration file that contains the names of the fonts available
+to the printer. The names of these fonts have to be added to this file.
+Please refer to your driver manual. The names normally given to the
+pixel files by the installation program are
+ \pctex\pixel\pk<nnn>\<fontname>.pk,
+where <nnn> is a three-digit number indicating the size of the font.
+
+Printing the User's Guide
+-------------------------
+Now you are ready to print the User's Guide. TeX it using your format
+file by issuing the command
+
+ tex &cljour1 ljour1.doc
+
+Ordering the macro package from the mailserver
+----------------------------------------------
+This macro package is available via mailserver. To obtain a copy,
+send an e-mail message to
+
+ svserv@vax.ntp.springer.de
+
+containing the line
+
+ send /tex/latex/ljour1.zip
+
+Technical support
+-----------------
+If you need help in using the macro packages or if you have suggestions
+on to how to improve them, please contact us at
+
+ Springer-Verlag
+ New Technologies/Product Development
+ P.O. Box 105280
+ D-69121 Heidelberg, Germany
+
+e-mail: springer@vax.ntp.springer.de
+Mailserver: svserv@vax.ntp.springer.de
+Telefax: (0) 6221 487 648
diff --git a/obsolete/macros/latex209/contrib/springer/ljour/xxxlfont.sty b/obsolete/macros/latex209/contrib/springer/ljour/xxxlfont.sty
new file mode 100644
index 0000000000..cb45f12aec
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/ljour/xxxlfont.sty
@@ -0,0 +1,144 @@
+% xxxlfont.sty
+% LaTeX copy of oldlfont.sty
+% Springer-Verlag HD
+%-----------------------------------------------------------------------
+%% Save file as: OLDLFONT.STY Source: FILESERV@SHSU.BITNET
+%% Note: This is a file from the FONTSEL set written by Frank Mittelbach
+%% <PZF5HZ@RUIPC1E.BITNET> and Rainer Schoepf <SCHOEPF@SC.ZIB-Berlin.DE>
+%%
+%% This is file `/usr2/distrib/latex209/nfss/oldlfont.sty' generated
+%% on <1991/11/27> with the docstrip utility (v1.1k).
+%%
+%% The original source files were:
+%%
+%% oldlfont.doc
+
+%%
+%% Copyright (C) 1989,1990,1991 by Frank Mittelbach, Rainer Schoepf.
+%% All rights reserved.
+%%
+%% This file is part of the NFSS (New Font Selection Scheme) package.
+%%
+%% IMPORTANT NOTICE:
+%%
+%% You are not allowed to change this file. You may however copy this file
+%% to a file with a different name and then change the copy if you obey
+%% the restrictions on file changes described in readme.mz.
+%%
+%% You are allowed to distribute this file under the condition that it is
+%% distributed together with all files mentioned in readme.mz3. If you
+%% receive only some of these files from someone, complain!
+%%
+%% You are NOT ALLOWED to distribute this file alone. You are NOT ALLOWED
+%% to take money for the distribution or use of either this file or a
+%% changed version, except for a nominal charge for copying etc.
+%%
+%% For error reports in case of UNCHANGED versions see readme files.
+%%
+%% Please do not request updates from us directly. Distribution is done
+%% through Mail-Servers and TeX organizations.
+%%
+\def\fileversion{v1.3a}
+\def\filedate{91/11/27}
+\def\docdate {91/11/27}
+
+%% \CheckSum{222}
+%% \CharacterTable
+%% {Upper-case \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
+%% Lower-case \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
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%% Copyright (C) 1989,1990,1991 Frank Mittelbach and Rainer Sch\"opf,
+%% all rights reserved.
+
+\expandafter\ifx\csname ds@oldlfont\endcsname\relax
+ \let\ds@oldlfont\@empty
+ \else \endinput \fi
+\immediate
+ \write\sixt@@n{Style-Option: `oldlfont'
+ \fileversion\space <\filedate> (FMi and RmS)}
+\immediate
+ \write\sixt@@n{English Documentation
+ \@spaces\@spaces\space <\docdate> (FMi and RmS)}
+\def\newfont#1#2{\@ifdefinable#1{\global
+ \font#1=#2\relax}}
+\def\symbol#1{\char #1\relax}
+\def\@gobbletwo#1#2{}
+\let\load\@gobbletwo
+\new@mathgroup\bffam
+\new@mathgroup\sffam
+\new@mathgroup\ttfam
+\new@mathgroup\itfam
+\new@mathgroup\scfam
+\new@mathgroup\slfam
+\new@internalmathalphabet\mathbf\bffam{cmr}{bx}{n}
+\new@internalmathalphabet\mathsf\sffam{cmss}{m}{n}
+\new@internalmathalphabet\mathtt\ttfam{cmtt}{m}{n}
+\new@internalmathalphabet\mathit\itfam{cmr}{m}{it}
+\new@internalmathalphabet\mathsc\scfam{cmr}{m}{sc}
+\new@internalmathalphabet\mathsl\slfam{cmr}{m}{sl}
+\def\prm{\fontfamily\rmdefault
+ \fontseries\default@series
+ \fontshape\default@shape\selectfont
+ \mathrm}
+\def\psf{\fontfamily\sfdefault
+ \fontseries\default@series
+ \fontshape\default@shape\selectfont\mathsf}
+\def\psl{\fontfamily\rmdefault
+ \fontseries\default@series
+ \fontshape\sldefault\selectfont\mathsl}
+\def\pbf{\fontfamily\rmdefault
+ \fontseries\bfdefault
+ \fontshape\default@shape\selectfont\mathbf}
+\def\psc{\fontfamily\rmdefault
+ \fontseries\default@series
+ \fontshape\scdefault\selectfont\mathsc}
+\def\pit{\fontfamily\rmdefault
+ \fontseries\default@series
+ \fontshape\itdefault\selectfont\mathit}
+\def\ptt{\fontfamily\ttdefault
+ \fontseries\default@series
+ \fontshape\default@shape\selectfont\mathtt}
+\def\em{\protect\pem}
+\def\pem{\@nomath\em \ifdim \fontdimen\@ne\font >\z@
+ \rm \else \it \fi}
+\def\@setsize#1#2#3#4{\@nomath#1\fontsize{#4}{#2}%
+ \fontfamily\default@family
+ \fontseries\default@series\fontshape\default@shape
+ \selectfont}
+
+\let\math@bgroup\@empty
+\let\math@egroup\@empty
+\ifx\lyfam\undefined
+ \new@mathgroup\lyfam
+ \define@mathgroup\mv@normal\lyfam
+ {lasy}{m}{n}
+ \define@mathgroup\mv@bold\lyfam
+ {lasy}{b}{n}
+
+\edef\@tempa{\hexnumber@\lyfam}
+\mathchardef\mho"0\@tempa 30
+\mathchardef\Join"3\@tempa 31
+\mathchardef\Box"0\@tempa 32
+\mathchardef\Diamond"0\@tempa 33
+\mathchardef\leadsto"3\@tempa 3B
+\mathchardef\sqsubset"3\@tempa 3C
+\mathchardef\sqsupset"3\@tempa 3D
+\mathchardef\lhd"3\@tempa 01
+\mathchardef\unlhd"3\@tempa 02
+\mathchardef\rhd"3\@tempa 03
+\mathchardef\unrhd"3\@tempa 04
+\fi
+\endinput
+%%
+%% End of file `/usr2/distrib/latex209/nfss/oldlfont.sty'.
diff --git a/obsolete/macros/latex209/contrib/springer/llncs/llncs.dem b/obsolete/macros/latex209/contrib/springer/llncs/llncs.dem
new file mode 100644
index 0000000000..b580e8d795
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/llncs/llncs.dem
@@ -0,0 +1,434 @@
+% This is LLNCS.DEM the demonstration file of
+% the LaTeX macro package from Springer-Verlag
+% for Lecture Notes in Computer Science, version 1.1
+\documentstyle{llncs}
+%
+\begin{document}
+
+\title{Hamiltonian Mechanics}
+
+\author{Ivar Ekeland\inst{1} and Roger Temam\inst{2}}
+
+\institute{Princeton University, Princeton NJ 08544, USA
+\and
+Universit\'{e} de Paris-Sud,
+Laboratoire d'Analyse Num\'{e}rique, B\^{a}timent 425,\\
+F-91405 Orsay Cedex, France}
+
+\maketitle
+
+\begin{abstract}
+The abstract should summarize the contents of the paper
+using at least 70 and at most 150 words. It will be set in 9-point
+font size and be inset 1.0 cm from the right and left margins.
+There will be two blank lines before and after the Abstract. \dots
+\end{abstract}
+%
+\section{Fixed-Period Problems: The Sublinear Case}
+%
+With this chapter, the preliminaries are over, and we begin the search
+for periodic solutions to Hamiltonian systems. All this will be done in
+the convex case; that is, we shall study the boundary-value problem
+\begin{eqnarray*}
+ \dot{x}&=&JH' (t,x)\\
+ x(0) &=& x(T)
+\end{eqnarray*}
+with $H(t,\cdot)$ a convex function of $x$, going to $+\infty$ when
+$\left\|x\right\| \to \infty$.
+
+%
+\subsection{Autonomous Systems}
+%
+In this section, we will consider the case when the Hamiltonian $H(x)$
+is autonomous. For the sake of simplicity, we shall also assume that it
+is $C^{1}$.
+
+We shall first consider the question of nontriviality, within the
+general framework of
+$\left(A_{\infty},B_{\infty}\right)$-subquadratic Hamiltonians. In
+the second subsection, we shall look into the special case when $H$ is
+$\left(0,b_{\infty}\right)$-subquadratic,
+and we shall try to derive additional information.
+%
+\subsubsection{ The General Case: Nontriviality.}
+%
+We assume that $H$ is
+$\left(A_{\infty},B_{\infty}\right)$-sub\-qua\-dra\-tic at infinity,
+for some constant symmetric matrices $A_{\infty}$ and $B_{\infty}$,
+with $B_{\infty}-A_{\infty}$ positive definite. Set:
+\begin{eqnarray}
+\gamma :&=&{\rm smallest\ eigenvalue\ of}\ \ B_{\infty} - A_{\infty} \\
+ \lambda : &=& {\rm largest\ negative\ eigenvalue\ of}\ \
+ J \frac{d}{dt} +A_{\infty}\ .
+\end{eqnarray}
+
+Theorem 21 tells us that if $\lambda +\gamma < 0$, the boundary-value
+problem:
+\begin{equation}
+\begin{array}{rcl}
+ \dot{x}&=&JH' (x)\\
+ x(0)&=&x (T)
+\end{array}
+\end{equation}
+has at least one solution
+$\overline{x}$, which is found by minimizing the dual
+action functional:
+\begin{equation}
+ \psi (u) = \int_{o}^{T} \left[\frac{1}{2}
+ \left(\Lambda_{o}^{-1} u,u\right) + N^{\ast} (-u)\right] dt
+\end{equation}
+on the range of $\Lambda$, which is a subspace $R (\Lambda)_{L}^{2}$
+with finite codimension. Here
+\begin{equation}
+ N(x) := H(x) - \frac{1}{2} \left(A_{\infty} x,x\right)
+\end{equation}
+is a convex function, and
+\begin{equation}
+ N(x) \le \frac{1}{2}
+ \left(\left(B_{\infty} - A_{\infty}\right) x,x\right)
+ + c\ \ \ \forall x\ .
+\end{equation}
+
+%
+\begin{proposition}
+Assume $H'(0)=0$ and $ H(0)=0$. Set:
+\begin{equation}
+ \delta := \liminf_{x\to 0} 2 N (x) \left\|x\right\|^{-2}\ .
+ \label{eq:one}
+\end{equation}
+
+If $\gamma < - \lambda < \delta$,
+the solution $\overline{u}$ is non-zero:
+\begin{equation}
+ \overline{x} (t) \ne 0\ \ \ \forall t\ .
+\end{equation}
+\end{proposition}
+%
+\begin{proof}
+Condition (\ref{eq:one}) means that, for every
+$\delta ' > \delta$, there is some $\varepsilon > 0$ such that
+\begin{equation}
+ \left\|x\right\| \le \varepsilon \Rightarrow N (x) \le
+ \frac{\delta '}{2} \left\|x\right\|^{2}\ .
+\end{equation}
+
+It is an exercise in convex analysis, into which we shall not go, to
+show that this implies that there is an $\eta > 0$ such that
+\begin{equation}
+ f\left\|x\right\| \le \eta
+ \Rightarrow N^{\ast} (y) \le \frac{1}{2\delta '}
+ \left\|y\right\|^{2}\ .
+ \label{eq:two}
+\end{equation}
+
+\begin{figure}
+\vspace{2.5cm}
+\caption{This is the caption of the figure displaying a white eagle and
+a white horse on a snow field}
+\end{figure}
+
+Since $u_{1}$ is a smooth function, we will have
+$\left\|hu_{1}\right\|_\infty \le \eta$
+for $h$ small enough, and inequality (\ref{eq:two}) will hold,
+yielding thereby:
+\begin{equation}
+ \psi (hu_{1}) \le \frac{h^{2}}{2}
+ \frac{1}{\lambda} \left\|u_{1} \right\|_{2}^{2} + \frac{h^{2}}{2}
+ \frac{1}{\delta '} \left\|u_{1}\right\|^{2}\ .
+\end{equation}
+
+If we choose $\delta '$ close enough to $\delta$, the quantity
+$\left(\frac{1}{\lambda} + \frac{1}{\delta '}\right)$
+will be negative, and we end up with
+\begin{equation}
+ \psi (hu_{1}) < 0\ \ \ \ \ {\rm for}\ \ h\ne 0\ \ {\rm small}\ .
+\end{equation}
+
+On the other hand, we check directly that $\psi (0) = 0$. This shows
+that 0 cannot be a minimizer of $\psi$, not even a local one.
+So $\overline{u} \ne 0$ and
+$\overline{u} \ne \Lambda_{o}^{-1} (0) = 0$. \qed
+\end{proof}
+%
+\begin{corollary}
+Assume $H$ is $C^{2}$ and
+$\left(a_{\infty},b_{\infty}\right)$-subquadratic at infinity. Let
+$\xi_{1},\allowbreak\dots,\allowbreak\xi_{N}$ be the
+equilibria, that is, the solutions of $H' (\xi ) = 0$.
+Denote by $\omega_{k}$
+the smallest eigenvalue of $H'' \left(\xi_{k}\right)$, and set:
+\begin{equation}
+ \omega : = {\rm Min\,} \left\{\omega_{1},\dots,\omega_{k}\right\}\ .
+\end{equation}
+If:
+\begin{equation}
+ \frac{T}{2\pi} b_{\infty} <
+ - E \left[- \frac{T}{2\pi}a_{\infty}\right] <
+ \frac{T}{2\pi}\omega
+ \label{eq:three}
+\end{equation}
+then minimization of $\psi$ yields a non-constant $T$-periodic solution
+$\overline{x}$.
+\end{corollary}
+%
+
+We recall once more that by the integer part $E [\alpha ]$ of
+$\alpha \in \bbbr$, we mean the $a\in \bbbz$
+such that $a< \alpha \le a+1$. For instance,
+if we take $a_{\infty} = 0$, Corollary 2 tells
+us that $\overline{x}$ exists and is
+non-constant provided that:
+
+\begin{equation}
+ \frac{T}{2\pi} b_{\infty} < 1 < \frac{T}{2\pi}
+\end{equation}
+or
+\begin{equation}
+ T\in \left(\frac{2\pi}{\omega},\frac{2\pi}{b_{\infty}}\right)\ .
+ \label{eq:four}
+\end{equation}
+
+%
+\begin{proof}
+The spectrum of $\Lambda$ is $\frac{2\pi}{T} \bbbz +a_{\infty}$. The
+largest negative eigenvalue $\lambda$ is given by
+$\frac{2\pi}{T}k_{o} +a_{\infty}$,
+where
+\begin{equation}
+ \frac{2\pi}{T}k_{o} + a_{\infty} < 0
+ \le \frac{2\pi}{T} (k_{o} +1) + a_{\infty}\ .
+\end{equation}
+Hence:
+\begin{equation}
+ k_{o} = E \left[- \frac{T}{2\pi} a_{\infty}\right] \ .
+\end{equation}
+
+The condition $\gamma < -\lambda < \delta$ now becomes:
+\begin{equation}
+ b_{\infty} - a_{\infty} <
+ - \frac{2\pi}{T} k_{o} -a_{\infty} < \omega -a_{\infty}
+\end{equation}
+which is precisely condition (\ref{eq:three}).\qed
+\end{proof}
+%
+
+\begin{lemma}
+Assume that $H$ is $C^{2}$ on $\bbbr^{2n} \setminus \{ 0\}$ and
+that $H'' (x)$ is non-de\-gen\-er\-ate for any $x\ne 0$. Then any local
+minimizer $\widetilde{x}$ of $\psi$ has minimal period $T$.
+\end{lemma}
+%
+\begin{proof}
+We know that $\widetilde{x}$, or
+$\widetilde{x} + \xi$ for some constant $\xi
+\in \bbbr^{2n}$, is a $T$-periodic solution of the Hamiltonian system:
+\begin{equation}
+ \dot{x} = JH' (x)\ .
+\end{equation}
+
+There is no loss of generality in taking $\xi = 0$. So
+$\psi (x) \ge \psi (\widetilde{x} )$
+for all $\widetilde{x}$ in some neighbourhood of $x$ in
+$W^{1,2} \left(\bbbr / T\bbbz ; \bbbr^{2n}\right)$.
+
+But this index is precisely the index
+$i_{T} (\widetilde{x} )$ of the $T$-periodic
+solution $\widetilde{x}$ over the interval
+$(0,T)$, as defined in Sect.~2.6. So
+\begin{equation}
+ i_{T} (\widetilde{x} ) = 0\ .
+ \label{eq:five}
+\end{equation}
+
+Now if $\widetilde{x}$ has a lower period, $T/k$ say,
+we would have, by Corollary 31:
+\begin{equation}
+ i_{T} (\widetilde{x} ) =
+ i_{kT/k}(\widetilde{x} ) \ge
+ ki_{T/k} (\widetilde{x} ) + k-1 \ge k-1 \ge 1\ .
+\end{equation}
+
+This would contradict (\ref{eq:five}), and thus cannot happen.\qed
+\end{proof}
+%
+\paragraph{Notes and Comments.}
+The results in this section are a
+refined version of \cite{clar:eke};
+the minimality result of Proposition
+14 was the first of its kind.
+
+To understand the nontriviality conditions, such as the one in formula
+(\ref{eq:four}), one may think of a one-parameter family
+$x_{T}$, $T\in \left(2\pi\omega^{-1}, 2\pi b_{\infty}^{-1}\right)$
+of periodic solutions, $x_{T} (0) = x_{T} (T)$,
+with $x_{T}$ going away to infinity when $T\to 2\pi \omega^{-1}$,
+which is the period of the linearized system at 0.
+
+\begin{table}
+\caption{This is the example table taken out of {\it The
+\TeX{}book,} p.\,246}
+\vspace{2pt}
+\begin{tabular}{r@{\quad}rl}
+\hline
+\multicolumn{1}{l}{\rule{0pt}{12pt}
+ Year}&\multicolumn{2}{l}{World population}\\[2pt]
+\hline\rule{0pt}{12pt}
+8000 B.C. & 5,000,000& \\
+ 50 A.D. & 200,000,000& \\
+1650 A.D. & 500,000,000& \\
+1945 A.D. & 2,300,000,000& \\
+1980 A.D. & 4,400,000,000& \\[2pt]
+\hline
+\end{tabular}
+\end{table}
+%
+\begin{theorem} [(Ghoussoub-Preiss)]
+Assume $H(t,x)$ is
+$(0,\varepsilon )$-subquadratic at
+infinity for all $\varepsilon > 0$, and $T$-periodic in $t$
+\begin{equation}
+ H (t,\cdot )\ \ \ \ \ {\rm is\ convex}\ \ \forall t
+\end{equation}
+\begin{equation}
+ H (\cdot ,x)\ \ \ \ \ {\rm is}\ \ T{\rm -periodic}\ \ \forall x
+\end{equation}
+\begin{equation}
+ H (t,x)\ge n\left(\left\|x\right\|\right)\ \ \ \ \
+ {\rm with}\ \ n (s)s^{-1}\to \infty\ \ {\rm as}\ \ s\to \infty
+\end{equation}
+\begin{equation}
+ \forall \varepsilon > 0\ ,\ \ \ \exists c\ :\
+ H(t,x) \le \frac{\varepsilon}{2}\left\|x\right\|^{2} + c\ .
+\end{equation}
+
+Assume also that $H$ is $C^{2}$, and $H'' (t,x)$ is positive definite
+everywhere. Then there is a sequence $x_{k}$, $k\in \bbbn$, of
+$kT$-periodic solutions of the system
+\begin{equation}
+ \dot{x} = JH' (t,x)
+\end{equation}
+such that, for every $k\in \bbbn$, there is some $p_{o}\in\bbbn$ with:
+\begin{equation}
+ p\ge p_{o}\Rightarrow x_{pk} \ne x_{k}\ .
+\end{equation}
+\qed
+\end{theorem}
+%
+\begin{example} [{\rm(External forcing)}]
+Consider the system:
+\begin{equation}
+ \dot{x} = JH' (x) + f(t)
+\end{equation}
+where the Hamiltonian $H$ is
+$\left(0,b_{\infty}\right)$-subquadratic, and the
+forcing term is a distribution on the circle:
+\begin{equation}
+ f = \frac{d}{dt} F + f_{o}\ \ \ \ \
+ {\rm with}\ \ F\in L^{2} \left(\bbbr / T\bbbz; \bbbr^{2n}\right)\ ,
+\end{equation}
+where $f_{o} : = T^{-1}\int_{o}^{T} f (t) dt$. For instance,
+\begin{equation}
+ f (t) = \sum_{k\in \bbbn} \delta_{k} \xi\ ,
+\end{equation}
+where $\delta_{k}$ is the Dirac mass at $t= k$ and
+$\xi \in \bbbr^{2n}$ is a
+constant, fits the prescription. This means that the system
+$\dot{x} = JH' (x)$ is being excited by a
+series of identical shocks at interval $T$.
+\end{example}
+%
+\begin{definition}
+Let $A_{\infty} (t)$ and $B_{\infty} (t)$ be symmetric
+operators in $\bbbr^{2n}$, depending continuously on
+$t\in [0,T]$, such that
+$A_{\infty} (t) \le B_{\infty} (t)$ for all $t$.
+
+A Borelian function
+$H: [0,T]\times \bbbr^{2n} \to \bbbr$
+is called
+$\left(A_{\infty} ,B_{\infty}\right)$-{\it subquadratic at infinity}
+if there exists a function $N(t,x)$ such that:
+\begin{equation}
+ H (t,x) = \frac{1}{2} \left(A_{\infty} (t) x,x\right) + N(t,x)
+\end{equation}
+\begin{equation}
+ \forall t\ ,\ \ \ N(t,x)\ \ \ \ \
+ {\rm is\ convex\ with\ respect\ to}\ \ x
+\end{equation}
+\begin{equation}
+ N(t,x) \ge n\left(\left\|x\right\|\right)\ \ \ \ \
+ {\rm with}\ \ n(s)s^{-1}\to +\infty\ \ {\rm as}\ \ s\to +\infty
+\end{equation}
+\begin{equation}
+ \exists c\in \bbbr\ :\ \ \ H (t,x) \le
+ \frac{1}{2} \left(B_{\infty} (t) x,x\right) + c\ \ \ \forall x\ .
+\end{equation}
+
+If $A_{\infty} (t) = a_{\infty} I$ and
+$B_{\infty} (t) = b_{\infty} I$, with
+$a_{\infty} \le b_{\infty} \in \bbbr$,
+we shall say that $H$ is
+$\left(a_{\infty},b_{\infty}\right)$-subquadratic
+at infinity. As an example, the function
+$\left\|x\right\|^{\alpha}$, with
+$1\le \alpha < 2$, is $(0,\varepsilon )$-subquadratic at infinity
+for every $\varepsilon > 0$. Similarly, the Hamiltonian
+\begin{equation}
+H (t,x) = \frac{1}{2} k \left\|k\right\|^{2} +\left\|x\right\|^{\alpha}
+\end{equation}
+is $(k,k+\varepsilon )$-subquadratic for every $\varepsilon > 0$.
+Note that, if $k<0$, it is not convex.
+\end{definition}
+%
+
+\paragraph{Notes and Comments.}
+The first results on subharmonics were
+obtained by Rabinowitz in \cite{rab}, who showed the existence of
+infinitely many subharmonics both in the subquadratic and superquadratic
+case, with suitable growth conditions on $H'$. Again the duality
+approach enabled Clarke and Ekeland in \cite{clar:eke:2} to treat the
+same problem in the convex-subquadratic case, with growth conditions on
+$H$ only.
+
+Recently, Michalek and Tarantello (see \cite{mich:tar} and \cite{tar})
+have obtained lower bound on the number of subharmonics of period $kT$,
+based on symmetry considerations and on pinching estimates, as in
+Sect.~5.2 of this article.
+
+%
+% ---- Bibliography ----
+%
+\begin{thebibliography}{5}
+%
+\bibitem {clar:eke}
+Clarke, F., Ekeland, I.:
+Nonlinear oscillations and
+boundary-value problems for Hamiltonian systems.
+Arch. Rat. Mech. Anal. {\bf 78} (1982) 315--333
+%
+\bibitem {clar:eke:2}
+Clarke, F., Ekeland, I.:
+Solutions p\'{e}riodiques, du
+p\'{e}riode donn\'{e}e, des \'{e}quations hamiltoniennes.
+Note CRAS Paris {\bf 287} (1978) 1013--1015
+%
+\bibitem {mich:tar}
+Michalek, R., Tarantello, G.:
+Subharmonic solutions with prescribed minimal
+period for nonautonomous Hamiltonian systems.
+J. Diff. Eq. {\bf 72} (1988) 28--55
+%
+\bibitem {tar}
+Tarantello, G.:
+Subharmonic solutions for Hamiltonian
+systems via a $\bbbz_{p}$ pseudoindex theory.
+Annali di Matematica Pura (to appear)
+%
+\bibitem {rab}
+Rabinowitz, P.:
+On subharmonic solutions of a Hamiltonian system.
+Comm. Pure Appl. Math. {\bf 33} (1980) 609--633
+\end{thebibliography}
+%
+\end{document}
+ \ No newline at end of file
diff --git a/obsolete/macros/latex209/contrib/springer/llncs/llncs.doc b/obsolete/macros/latex209/contrib/springer/llncs/llncs.doc
new file mode 100644
index 0000000000..2f06a65a8f
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/llncs/llncs.doc
@@ -0,0 +1,1117 @@
+% This is LLNCS.DOC the documentation file of
+% the LaTeX macro package from Springer-Verlag
+% for Lecture Notes in Computer Science, version 1.1
+\documentstyle[llncsdoc]{llncs}
+%
+\newfont{\titelfont}{cmr10 scaled 1728}
+\newfont{\titelbffont}{cmbx10 scaled 2074}
+\newfont{\titelbigfont}{cmr10 scaled 2488}
+\markboth{Style File for Authors Coding with \LaTeX{}}{Style File
+for Authors Coding with \LaTeX{}}
+%
+\begin{document}
+\thispagestyle{empty}
+\begin{flushleft}
+{\titelbffont Style File}\\[6pt]
+{\titelbffont for Authors Coding with \LaTex{}}\\[2cm]
+\end{flushleft}
+\rule{\textwidth}{1pt}
+\vspace{2pt}
+\begin{flushright}
+\begin{tabular}{@{}l}
+{\titelbigfont Lecture Notes}\\[7pt]
+{\titelbigfont in Computer Science}\\[10pt]
+{\titelfont Version 1.1}
+\end{tabular}
+\end{flushright}
+\rule{\textwidth}{1pt}
+\vfill
+\begin{flushright}
+\begin{tabular}{@{}l}
+{\titelfont Springer-Verlag}\\[8pt]
+{\titelfont Berlin\enspace Heidelberg\enspace New\kern0.1em York}\\[5pt]
+{\titelfont London\enspace Paris\enspace Tokyo}\\[5pt]
+{\titelfont Hong Kong\enspace Barcelona\enspace Budapest}
+\end{tabular}
+\end{flushright}
+\newpage
+%
+\section*{For further information please contact us:}
+%
+\begin{flushleft}
+\begin{tabular}{l@{\quad}l@{\hspace{3mm}}l}
+$\bullet$ & \multicolumn{2}{l}{\bf Springer-Verlag Heidelberg}\\[1mm]
+& \multicolumn{2}{l}{Department New Technologies/Product Development}\\
+& \multicolumn{2}{l}{Springer-Verlag, Postfach 105280, W-6900 Heidelberg
+1, FRG}\\[0.5mm]
+ & Telex: & 461723\\
+ & Telefax: & (06221)487648\\
+ &bitnet/EARN:& SPRINGER @ DHDSPRI6
+\end{tabular}
+\end{flushleft}
+\rule{\textwidth}{1pt}
+%
+\section*{Acceptable formats of your disk/magnetic tape and output:}
+%
+The following formats are acceptable: 5.25$^{\prime\prime}$ diskette
+MS-DOS, 5.25$^{\prime\prime}$ CP/M, 3.5$^{\prime\prime}$ diskette
+MS-DOS, 3.5$^{\prime\prime}$ diskette Apple MacIntosh, 9-track 1600
+bpi magnetic tape VAX/VMS, 9-track 1600 bpi magnetic tape ANSI with
+label, SUN-Streamer Tape.
+
+Once you have completed your work using this macro package,
+please submit your own printout of the {\it final
+version together with the disk or magnetic tape}, containing your
+\LaTeX{} input (source) file und the final DVI-file and make sure
+that the text is {\it identical in both cases.}
+
+\bigskip
+This macro package, as well as all other macro packages and style
+files that Springer distributes, are also available through our
+mailserver
+
+SVSERV @ DHDSPRI6.bitnet
+%
+\newpage
+\tableofcontents
+\newpage
+%
+\section{Introduction}
+%
+Authors wishing to code their contribution
+with \LaTeX{}, as well as those who have already coded with \LaTeX{},
+will be provided with a style file that will give the text the
+desired layout. Authors are requested to
+adhere strictly to these instructions; {\it the style
+file must not be changed}.
+
+The text output area is automatically set within an area of
+12.2\,cm horizontally and 19.3\,cm vertically.
+
+If you are already familiar with \LaTeX{}, then the
+LLNCS style file should not give you any major difficulties.
+This style file will change the layout to the required LLNCS style
+(it will for instance define the layout of \verb|\section|).
+We had to invent some extra commands,
+which are not provided by \LaTeX{} (e.g.\
+\verb|\institute|, see also Sect.\,\ref{contbegin})
+
+For the main body of the paper (the text) you
+should use the commands of the standard \LaTeX{} ``article'' style.
+Even if you are familiar with those commands, we urge you to read
+this entire documentation thoroughly. It contains many suggestions on
+how to use our commands properly; thus your paper
+will be formatted exactly to LLNCS standard.
+For the input of the references at the end of your contribution,
+please follow our instructions given in Sect.\,\ref{refer} References.
+
+The majority of these hints are not specific for LLNCS; they may improve
+your use of \LaTeX{} in general.
+Furthermore, the documentation provides suggestions about the proper
+editing and use
+of the input files (capitalization, abbreviation etc.) (see
+Sect.\,\ref{refedit} How to Edit Your Input File).
+%
+\section{How to Proceed}
+%
+Please insert the enclosed diskette or tape into your computer. You will
+find the following files:
+\begin{flushleft}
+\begin{tabular}{@{}p{2.5cm}l}
+{\it llncs.doc} & General instructions (this document),\\
+ & {\it llncs.doc} means llncs latex documentation\\
+{\it llncs.dem} & An example showing how to code the text\\
+{\it llncs.sty} & Style file to invoke \LaTeX{}
+\end{tabular}
+\end{flushleft}
+You have to run each file twice with: \verb|latex file.name|.
+%
+\subsection{How to Invoke the LLNCS Style File}
+%
+The LLNCS style file is an adaptation of the \LaTeX{} ``article'' style.
+Therefore you may use all ``article'' style commands to prepare your
+manuscript.
+LLNCS style is invoked by replacing ``article'' by ``llncs'' in the
+first
+line of your document:
+\begin{verbatim}
+\documentstyle{llncs}
+%
+\begin{document}
+ <Your contribution>
+\end{document}
+\end{verbatim}
+%
+\subsection{Contributions Already Coded with \protect\LaTeX{} without
+the \protect\\ LLNCS Style File}
+%
+If your file is already coded with \LaTeX{} you can easily
+adapt it a posteriori to LLNCS style.
+
+Please refrain from using any \LaTeX{} or \TeX{} commands
+that affect the layout or formatting of your document (i.e. commands
+like \verb|\textheight|, \verb|\vspace|, \verb|\hoffset| etc.).
+There may nevertheless be exceptional occasions on which to
+use some of them.
+
+The LLNCS style has been carefully designed to produce the right layout
+from your \LaTeX{} input. If there is anything specific you would like
+to do and for which the style file does not provide a command,
+{\em please contact us.\/}
+%
+\section{General Rules for Coding Formulas}
+%
+With mathematical formulas you may proceed as described
+in Sect.\,3.3 of the {\em \LaTeX{} User's Guide \& Reference
+Manual\/} by Leslie Lamport (1986), Addison-Wesley Publishing
+Company, Reading, Mass.
+
+Equations are automatically numbered sequentially throughout your
+contribution using arabic numerals in parentheses on the right-hand
+side.
+
+When you are working in math mode everything is typeset in italics.
+Sometimes you need to insert non-mathematical elements (e.g.\
+words or phrases). Such insertions should be coded in roman
+(with \verb|\mbox|) as illustrated in the following example:
+\begin{flushleft}
+{\it Sample Input}
+\end{flushleft}
+\begin{verbatim}
+\begin{equation}
+ \left(\frac{a^{2} + b^{2}}{c^{3}} \right) = 1 \quad
+ \mbox{ if } c\neq 0 \mbox{ and if } a,b,c\in \bbbr \enspace .
+\end{equation}
+\end{verbatim}
+{\it Sample Output}
+\begin{equation}
+ \left(\frac{a^{2} + b^{2}}{c^{3}} \right) = 1 \quad
+ \mbox{ if } c\neq 0 \mbox{ and if } a,b,c\in \bbbr \enspace .
+\end{equation}
+
+If you wish to start a new paragraph immediately after a displayed
+equation, insert a blank line so as to produce the required
+indentation. If there is no new paragraph either do not insert
+a blank line or code \verb|\noindent| immediately before
+continuing the text. Titles have no end punctuation.
+
+Please punctuate a displayed equation in the same way as other
+ordinary text but with an \verb|\enspace| before end punctuation.
+
+Note that the sizes of the parentheses or other delimiter
+symbols used in equations should ideally match the height of the
+formulas being enclosed. This is automatically taken care of by
+the following \LaTeX{} commands:\\[2mm]
+\verb|\left(| or \verb|\left[| and
+\verb|\right)| or \verb|\right]|.
+%
+\subsection{Italic and Roman Type in Math Mode}
+%
+\begin{alpherate}
+\item
+In math mode \TeX{} and \LaTeX{} treat all letters as though they
+were mathematical or physical variables, hence they are typeset in
+italics. However, for certain components of formulas, like short texts,
+this would be incorrect and therefore coding in roman is required.
+Roman should also be used for
+subscripts and superscripts {\it in formulas\/} where these are
+merely labels and not in themselves variables,
+e.g.\ $T_{\rm eff}$ \ not \ $T_{eff}$,
+$T_{\rm K}$ \ not \ $T_K$ (K = Kelvin),
+$m_{\rm e}$ \ not \ $m_e$ (e = electron).
+However, do not code for roman
+if the sub/superscripts represent variables,
+e.g.\ $\sum_{i=1}^{n} a_{i}$.
+\item
+Please ensure that {\em physical units\/} (e.g.\ pc, erg s$^{-1}$
+K, cm$^{-3}$, W m$^{-2}$ Hz$^{-1}$, m kg s$^{-2}$ A$^{-2}$) and
+{\it abbreviations} such as Ord, Var, GL, SL, sgn, const.\
+are always set in roman type. To ensure
+this use the \verb|\rm| command: \verb|{\rm Hz}|.
+On p.\ 46 of the {\em \LaTeX{} User's Guide \& Reference
+Manual\/} by Leslie Lamport you will find the names of
+common mathe\-matical functions, such as log, sin, exp, max and sup.
+These should be coded as \verb|\log|,
+\verb|\sin|, \verb|\exp|, \verb|\max|, \verb|\sup|
+and will appear in roman.
+\item
+Chemical symbols and formulas should be coded for roman,
+e.g.\ Fe not $Fe$, H$_2$O not {\em H$_2$O\/}.
+\item
+Familiar foreign words and phrases, e.g.\ et al.,
+a priori, in situ, brems\-strah\-lung, eigenvalues should not be
+italicized.
+\end{alpherate}
+%
+\section{How to Edit Your Input (Source) File}
+\label{refedit}
+%
+\subsection{Headings}
+%
+All words in headings should be capitalized except for
+conjunctions, prepositions
+(e.g.\ on, of, by, and, or, but, from, with, without, under)
+and definite and indefinite articles (the, a, an) unless they appear at
+the beginning. Formula letters must be typeset as in the text.
+%
+\subsection{Capitalization and Non-capitalization}
+%
+\begin{alpherate}
+\item
+The following should always be capitalized:
+\begin{itemize}
+\item
+Headings (see preceding Sect.\,4.1)
+\item
+Abbreviations and expressions
+in the text such as Fig(s)., Table(s), Sect(s)., Chap(s).,
+Theorem, Corollary, Definition etc. when used with numbers, e.g.\
+Fig.\,3, Table\,1, Theorem 2.
+\end{itemize}
+Please follow the special rules in Sect.\,4.3 for referring to
+equations.
+\item
+The following should {\it not\/} be capitalized:
+\begin{itemize}
+\item
+The words figure(s), table(s), equation(s),
+theorem(s) in the text when used without an accompanying number
+\item
+Figure legends and table captions except for names and
+abbreviations.
+\end{itemize}
+\end{alpherate}
+%
+\subsection{Abbreviation of Words}
+%
+\begin{alpherate}
+\item
+The following {\it should} be abbreviated when they appear in running
+text {\it unless\/} they come at the beginning of a sentence: Chap.,
+Sect., Fig.; e.g.\ The results are depicted in Fig.\,5. Figure 9 reveals
+that \dots .\\
+{\it Please note\/}: Equations should usually be referred to solely by
+their number in parentheses: e.g.\ (14). However, when the reference
+comes at the beginning of a sentence, the unabbreviated word
+``Equation'' should be used: e.g.\ Equation (14) is very important.
+However, (15) makes it clear that \dots .
+\item
+If abbreviations of names or concepts are used
+throughout the text, they should be defined at first occurrence,
+e.g.\ Plurisubharmonic (PSH) Functions, Strong Optimization (SOPT)
+Problem.
+\end{alpherate}
+%
+\section{How to Code the Beginning of Your Contribution}
+\label{contbegin}
+%
+The title of your contribution should be coded as follows:
+\begin{verbatim}
+\title{<Your contribution title>}
+\end{verbatim}
+All words in titles should be capitalized except for
+conjunctions, prepositions
+(e.g.\ on, of, by, and, or, but, from, with, without, under)
+and definite and indefinite articles (the, a, an) unless they appear at
+the beginning. Formula letters must be typeset as in the text.
+Titles have no end punctuation.
+
+If a long \verb|\title| must be divided please use the
+code \verb|\\| (for new line).\\[6mm]
+Now the name(s) of the authors(s) must be given:
+\begin{verbatim}
+\author{<author(s) name(s)>}
+\end{verbatim}
+Numbers referring to different addresses are
+to be attached to each author.
+If you have done this correctly, the entry now reads, for example:
+\begin{verbatim}
+\author{Ivar Ekeland\inst{1} and Roger Temam\inst{2}}
+\end{verbatim}
+The first name\footnote{Other initials are optional
+and may be inserted if this is the usual
+way of writing your name, e.g.\ Alfred J.~Holmes, E.~Henry Green.}
+is followed by the surname.
+
+If there is more than one author, the order is up to you.
+However, if there are more than two authors, you must separate the names
+by commas. If the authors have different affiliations,
+each name has to be followed by:
+\begin{verbatim}
+\inst{<no>}
+\end{verbatim}
+\newpage
+Next the address(es) of institute(s), company etc. is (are) required.
+If there is more than one address, the entries are numbered
+automatically with \verb|\and|, in the order in which you type them.
+Please make sure that the numbers match those placed next to
+to the authors' names.
+\begin{verbatim}
+\institute{<name of an institute>
+\and <name of the next institute>
+\and <name of the next institute>}
+\end{verbatim}
+Unlike usual \LaTeX{} the \verb|\and| command is used with the
+\verb|\institute| and not with the \verb|\author| command.
+
+\medskip
+If footnotes are needed in \verb|\title| please code
+(immediately after the word where the footnote
+indicator should be placed):
+\begin{verbatim}
+\thanks{<text>}
+\end{verbatim}
+\verb|\thanks| may only appear in \verb|\title|, \verb|\author|
+and \verb|\institute| (see below) to footnote anything.
+
+\medskip\noindent
+The command
+\begin{verbatim}
+\maketitle
+\end{verbatim}
+formats the complete heading of your article. If you leave
+it out the work done so far will produce {\bf no} text,
+see {\it Sample Input\/} on p.~\pageref{samppage}.
+
+Then the abstract should follow. Please refer to the
+demonstration file {\tt llncs.dem} for an example or
+to the {\it Sample Input\/} like above.
+%
+\section{How to Code Your Text}
+%
+The contribution title and all headings should be capitalized
+except for conjunctions, prepositions
+(e.g.\ on, of, by, and, or, but, from, with, without, under)
+and definite and indefinite articles (the, a, an) unless they appear at
+the beginning. Formula letters must be typeset as in the text.
+
+Headings will be automatically numbered by the following codes.\\[2mm]
+{\it Sample Input}
+\begin{verbatim}
+\section{This is a First-Order Title}
+\subsection{This is a Second-Order Title}
+\subsubsection{This is a Third-Order Title.}
+\paragraph{This is a Fourth-Order Title.}
+\end{verbatim}
+\verb|\section| and \verb|\subsection| have no end punctuation.\\
+\verb|\subsubsection| and \verb|\paragraph|
+need to be punctuated at the end.
+
+In addition to the above-mentioned headings your text may be structured
+by subsections indicated by run-in headings (theorem-like environments).
+All the theorem-like environments are numbered automatically
+throughout the sections of your file.
+If you call lemma once, this will be numbered 1; if corollary follows,
+this will be numbered 2; if you then call lemma again, this will be
+numbered 3.
+\newpage
+But in case you want to reset this counter at 1 in each section,
+please give the document style option \verb|envcountreset|:
+\begin{verbatim}
+\documentstyle[envcountreset]{llncs}
+\end{verbatim}
+
+\vspace{.5cm}\noindent
+The following possibilities for run-in headings are available:
+\begin{flushleft}
+\verb|\begin{lemma} Text of the lemma \end{lemma}|\quad (see Output
+Sample 1)\\[2mm]
+%
+\verb|\begin{lemma}[additional explanation of lemma] Text of
+lemma \end{lemma}| \quad (see Output Sample 2)\\[2mm]
+%
+\verb|\begin{lemma}(overriding automatic numbering.) Text of the lemma
+\end{lemma}| \quad (see Output Sample 3)\\[2mm]
+%
+\verb|\begin{lemma}(x)[additional explanation of lemma] Text of
+lemma\end{lemma}| \quad (see Output Sample 4)\\[2mm]
+%
+\verb|\begin{lemma}* Text of lemma \end{lemma}| \quad (see Output
+Sample 5)\\[2mm]
+%
+\verb|\begin{lemma}*[additional explanation of lemma] Text of
+lemma\end{lemma}| \quad (see Output Sample 6)
+\end{flushleft}
+%
+{\it Output Sample 1}
+\begin{lemma}Text of lemma\end{lemma}
+%
+{\it Output Sample 2}
+\begin{lemma}[additional explanation of lemma] Text of lemma\end{lemma}
+%
+{\it Output Sample 3}
+\begin{lemma}(overriding automatic numbering.) Text of lemma\end{lemma}
+%
+{\it Output Sample 4}
+\begin{lemma}(x)[additional explanation of lemma] Text of
+lemma\end{lemma}
+%
+{\it Output Sample 5}
+\begin{lemma}* Text of lemma\end{lemma}
+%
+{\it Output Sample 6}
+\begin{lemma}*[additional explanation of lemma] Text of lemma\end{lemma}
+\noindent
+The following variety of run-in headings are at your disposal:
+\begin{alpherate}
+\item
+{\bf Bold} run-in headings with italicized text
+as built-in environments:
+\begin{verbatim}
+\begin{proposition} <text> \end{proposition}
+\begin{corollary} <text> \end{corollary}
+\begin{lemma} <text> \end{lemma}
+\begin{theorem} <text> \end{theorem}
+\end{verbatim}
+\item
+The following must generally appear as {\it italic} run-in heading:
+\begin{verbatim}
+\begin{proof} <text> \qed \end{proof}
+\end{verbatim}
+\item
+Further {\it italic} or {\bf bold} run-in headings may also occur:
+\begin{verbatim}
+\begin{definition} <text> \end{definition}
+\begin{example} <text> \end{example}
+\begin{remark} <text> \end{remark}
+\begin{exercise} <text> \end{exercise}
+\begin{problem} <text> \end{problem}
+\begin{solution} <text> \end{solution}
+\begin{note} <text> \end{note}
+\begin{question} <text> \end{question}
+\end{verbatim}
+\end{alpherate}
+%
+\subsubsection*{Defining Your Own Environments.}
+%
+You can define additional environments using the command
+\verb|\newstytheorem| which has five parameters. The first is the name
+your environment should have (e.g.\ \verb|conjecture|).
+After this follows the
+font family used for this heading (please use only \verb|\bf| for bold
+or \verb|\it| for italic) and the font family to use for the text of
+this new environment (e.g.\ \verb|\it| or \verb|\rm|). Then the name of
+an already known environment should be given in brackets (e.g.\
+\verb|[theorem]|). Your new environment will be numbered like the old
+one. Finally comes the real text of the new run-in heading (e.g.\
+\verb|Conjecture|).\\
+Sample definition:
+\begin{verbatim}
+\newstytheorem{conjecture}{\bf}{\it}[theorem]{Conjecture}
+\end{verbatim}
+\newstytheorem{conjecture}{\bf}{\it}[theorem]{Conjecture}
+Use of that definition:
+\begin{verbatim}
+\begin{conjecture} <text> \end{conjecture}
+\end{verbatim}
+e.g.
+\begin{verbatim}
+\begin{conjecture} It is clear that ...\end{conjecture}
+\end{verbatim}
+Its output:
+\begin{conjecture}
+It is clear that \dots
+\end{conjecture}
+%
+\noindent
+{\it Sample Input}
+\label{samppage}
+\begin{verbatim}
+\title{Hamiltonian Mechanics}
+
+\author{Ivar Ekeland\inst{1} and Roger Temam\inst{2}}
+
+\institute{Princeton University, Princeton NJ 08544, USA
+\and
+Universit\'{e} de Paris-Sud,
+Laboratoire d'Analyse Num\'{e}rique, B\^{a}timent 425,\\
+F-91405 Orsay Cedex, France}
+
+\maketitle
+%
+\begin{abstract}
+This paragraph shall summarize the contents of the paper
+in short terms.
+\end{abstract}
+%
+\section{Fixed-Period Problems: The Sublinear Case}
+%
+With this chapter, the preliminaries are over, and we begin the
+search for periodic solutions \dots
+%
+\subsection{Autonomous Systems}
+%
+In this section we will consider the case when the Hamiltonian
+$H(x)$ \dots
+%
+\subsubsection*{The General Case: Nontriviality.}
+%
+We assume that $H$ is
+$\left(A_{\infty}, B_{\infty}\right)$-subqua\-dra\-tic
+at infinity, for some constant \dots
+%
+\paragraph{Notes and Comments.}
+The first results on subharmonics were \dots
+%
+\begin{proposition}
+Assume $H'(0)=0$ and $ H(0)=0$. Set \dots
+\end{proposition}
+\begin{proof}[of proposition]
+Condition (8) means that, for every $\delta'>\delta$, there is
+some $\varepsilon>0$ such that \dots \qed
+\end{proof}
+%
+\begin{example}[\rm (External forcing)]
+Consider the system \dots
+\end{example}
+\begin{corollary}
+Assume $H$ is $C^{2}$ and
+$\left(a_{\infty}, b_{\infty}\right)$-subquadratic
+at infinity. Let \dots
+\end{corollary}
+\end{verbatim}
+\newpage
+\begin{verbatim}
+\begin{lemma}
+Assume that $H$ is $C^{2}$ on $\bbbr^{2n}\backslash \{0\}$
+and that $H''(x)$ is \dots
+\end{lemma}
+\begin{theorem}[(Ghoussoub-Preiss)]
+Let $X$ be a Banach Space and $\Phi:X\to\bbbr$ \dots
+\end{theorem}
+\begin{definition}
+We shall say that a $C^{1}$ function $\Phi:X\to\bbbr$
+satisfies \dots
+\end{definition}
+\end{verbatim}
+{\it Sample Output\/} (follows on the next page together with
+examples of the above run-in headings)
+%
+\title{Hamiltonian Mechanics}
+
+\author{Ivar Ekeland\inst{1} and Roger Temam\inst{2}}
+
+\institute{Princeton University, Princeton NJ 08544, USA
+\and
+Universit\'{e} de Paris-Sud,
+Laboratoire d'Analyse Num\'{e}rique, B\^{a}timent 425,\\
+F-91405 Orsay Cedex, France}
+
+\maketitle
+%
+\begin{abstract}
+This paragraph shall summarize the contents of the paper
+in short terms.
+\end{abstract}
+%
+\section*{1\quad Fixed-Period Problems: The Sublinear Case}
+%
+With this chapter, the preliminaries are over, and we begin the search
+for periodic solutions \dots
+%
+\subsection*{1.1\quad Autonomous Systems}
+%
+In this section we will consider the case when the Hamiltonian
+$H(x)$ \dots
+%
+\subsubsection*{The General Case: Nontriviality.}
+%
+We assume that $H$ is
+$\left(A_{\infty}, B_{\infty}\right)$-subqua\-dra\-tic at
+infinity, for some constant \dots
+%
+\paragraph{Notes and Comments.}
+The first results on subharmonics were \dots
+%
+\begin{proposition}
+Assume $H'(0)=0$ and $ H(0)=0$. Set \dots
+\end{proposition}
+\begin{proof}[of proposition]
+Condition (8) means that, for every $\delta'>\delta$, there is
+some $\varepsilon>0$ such that \dots \qed
+\end{proof}
+%
+\begin{example}[\rm (External forcing)]
+Consider the system \dots
+\end{example}
+\begin{corollary}
+Assume $H$ is $C^{2}$ and
+$\left(a_{\infty}, b_{\infty}\right)$-subquadratic
+at infinity. Let \dots
+\end{corollary}
+\begin{lemma}
+Assume that $H$ is $C^{2}$ on $\bbbr^{2n}\backslash \{0\}$
+and that $H''(x)$ is \dots
+\end{lemma}
+\begin{theorem}[(Ghoussoub-Preiss)]
+Let $X$ be a Banach Space and $\Phi:X\to\bbbr$ \dots
+\end{theorem}
+\begin{definition}
+We shall say that a $C^{1}$ function $\Phi:X\to\bbbr$ satisfies \dots
+\end{definition}
+%
+\section{Fine Tuning of the Text}
+%
+The following should be used to improve the readability of the text:
+\begin{flushleft}
+\begin{tabular}{@{}p{.19\textwidth}p{.79\textwidth}}
+\verb|\,| & a thin space, e.g.\ between numbers or between units
+ and num\-bers; a line division will not be made
+ following this space\\
+\verb|--| & en dash; two strokes, without a space at either end\\
+\verb*| -- |& en dash; two strokes, with a space at either end\\
+\verb|-| & hyphen; one stroke, no space at either end\\
+\verb|$-$| & minus, in the text {\em only} \\[8mm]
+{\em Input} & \verb|21\,$^{\circ}$C etc.,|\\
+ & \verb|Dr h.\,c.\,Rockefellar-Smith \dots|\\
+ & \verb|20,000\,km and Prof.\,Dr Mallory \dots|\\
+ & \verb|1950--1985 \dots|\\
+ & \verb|this -- written on a computer -- is now printed|\\
+ & \verb|$-30$\,K \dots|\\[3mm]
+{\em Output}& 21\,$^{\circ}$C etc., Dr h.\,c.\,Rockefellar-Smith \dots\\
+ & 20,000\,km and Prof.\,Dr Mallory \dots\\
+ & 1950--1985 \dots\\
+ & this -- written on a computer -- is now printed\\
+ & $-30$\,K \dots
+\end{tabular}
+\end{flushleft}
+%
+\section {Special Typefaces}
+%
+Normal type (roman) need not be coded. {\it Italic}
+(not {\sl slanted}) or, if necessary, {\bf boldface}
+should be used for emphasis in the text.
+\begin{flushleft}
+\begin{tabular}{@{}p{.19\textwidth}p{.79\textwidth}}
+\verb|{\it Text}| & {\it Italicized Text}\\
+\verb|{\em Text}| & {\em Emphasized Text}\\
+ & {\it If you would like to emphasize a {\em definition} within an
+ italicized text (e.g.\ of a {\em theorem)} you should code the
+ expression to be emphasized by} \verb|\em|.\\
+\verb|{\bf Text}| & {\bf Important Text}\\
+\verb|\vec{Symbol}| & Vectors may only appear in math mode. The default
+ \LaTeX{} vector symbol has been adapted to LLNCS conventions.\\
+ & \verb|$\vec{A times B\cdot C}| yields $\vec{A\times B\cdot C}$\\
+ & \verb|$\vec{A}^{T} \otimes \vec{B} \otimes \vec{\hat{D}}$|\\
+ & yields $\vec{A}^{T} \otimes \vec{B} \otimes \vec{\hat{D}}$
+\end{tabular}
+\end{flushleft}
+%
+\section {Footnotes}
+%
+Footnotes within the text should be coded:
+\begin{verbatim}
+\footnote{Text}
+\end{verbatim}
+{\it Sample Input}
+\begin{flushleft}
+Text with a footnote\verb|\footnote{The footnote is automatically
+numbered.}| and text continues \dots
+\end{flushleft}
+{\it Sample Output}
+\begin{flushleft}
+Text with a footnote\footnote{The footnote is automatically numbered.}
+and text continues \dots
+\end{flushleft}
+%
+\section {Lists}
+%
+Please code lists as described below:\\[2mm]
+{\it Sample Input}
+\begin{verbatim}
+\begin{enumerate}
+ \item First item
+ \item Second item
+ \begin{enumerate}
+ \item First nested item
+ \item Second nested item
+ \end{enumerate}
+ \item Third item
+\end{enumerate}
+\end{verbatim}
+{\it Sample Output}
+ \begin{enumerate}
+\item First item
+\item Second item
+ \begin{enumerate}
+ \item First nested item
+ \item Second nested item
+ \end{enumerate}
+\item Third item
+\end{enumerate}
+%
+\section {Figures}
+%
+Figure legends should be inserted after (not in)
+the paragraph in which the figure is first mentioned.
+They will be numbered automatically.
+
+{\it The figures\/} (line drawings and those containing halftone inserts
+as well as halftone figures) {\it should not be pasted into your
+laserprinter output}. They should be enclosed separately in camera-ready
+form (original artwork, glossy prints, photographs and/or slides). The
+lettering should be suitable for reproduction, and after reduction the
+height of capital letters should be at least
+1.8\,mm and not more than 2.5\,mm.
+Check that lines and other details are uniformly black and
+that the lettering on figures is clearly legible.
+
+To leave the desired amount of space for the height of
+your figures, please use the coding described below.
+As can be seen in the output, we will automatically
+provide 1\,cm space above and below the figure,
+so that you should only leave the space equivalent to the size of the
+figure itself. Please note that ``\verb|x|'' in the following
+coding stands for the actual height of the figure:
+\begin{verbatim}
+\begin{figure}
+\vspace{x cm}
+\caption[ ]{...text of caption...} (Do type [ ])
+\end{figure}
+\end{verbatim}
+\begin{flushleft}
+{\it Sample Input}
+\end{flushleft}
+\begin{verbatim}
+\begin{figure}
+\vspace{2.5cm}
+\caption{This is the caption of the figure displaying a white
+eagle and a white horse on a snow field}
+\end{figure}
+\end{verbatim}
+\begin{flushleft}
+{\it Sample Output}
+\end{flushleft}
+\begin{figure}
+\vspace{2.5cm}
+\caption{This is the caption of the figure displaying a white eagle and
+a white horse on a snow field}
+\end{figure}
+%
+\section{Tables}
+%
+Table captions should be treated
+in the same way as figure legends, except that
+the table captions appear {\it above} the tables. The tables
+will be numbered automatically.
+%
+\subsection{Tables Coded with \protect\LaTeX{}}
+%
+Please use the following coding:\\[2mm]
+{\it Sample Input}
+\begin{verbatim}
+\begin{table}
+\caption{This is the example table taken out of {\it The
+\TeX{}book,} p.\,246}
+\vspace{2pt}
+\begin{tabular}{r@{\quad}rl}
+\hline
+\multicolumn{1}{l}{\rule{0pt}{12pt}
+ Year}&\multicolumn{2}{l}{World population}\\[2pt]
+\hline\rule{0pt}{12pt}
+8000 B.C. & 5,000,000& \\
+ 50 A.D. & 200,000,000& \\
+1650 A.D. & 500,000,000& \\
+1945 A.D. & 2,300,000,000& \\
+1980 A.D. & 4,400,000,000& \\[2pt]
+\hline
+\end{tabular}
+\end{table}
+
+Before continuing your text you need an empty line. \dots
+\end{verbatim}
+{\it Sample Output}
+\begin{table}
+\caption{This is the example table taken out of {\it The
+\TeX{}book,} p.\,246}
+\vspace{2pt}
+\begin{tabular}{r@{\quad}rl}
+\hline
+\multicolumn{1}{l}{\rule{0pt}{12pt}
+ Year}&\multicolumn{2}{l}{World population}\\[2pt]
+\hline\rule{0pt}{12pt}
+8000 B.C. & 5,000,000& \\
+ 50 A.D. & 200,000,000& \\
+1650 A.D. & 500,000,000& \\
+1945 A.D. & 2,300,000,000& \\
+1980 A.D. & 4,400,000,000& \\[2pt]
+\hline
+\end{tabular}
+\end{table}
+
+Before continuing your text you need an empty line. \dots
+
+\vspace{3mm}
+For further information you will find a complete description of
+the tabular environment
+on p.~63~ff. and p.~182 of the {\em \LaTeX{} User's Guide \& Reference
+Manual\/} by Leslie Lamport.
+%
+\subsection{Tables Not Coded with \protect\LaTeX{}}
+%
+If you do not wish to code your table using \LaTeX{}
+but prefer to have it reproduced separately,
+proceed as for figures and use the following coding:\\[2mm]
+{\it Sample Input}
+\begin{verbatim}
+\begin{table}
+\caption{text of your caption}
+\vspace{x cm} % the actual height needed for your table
+\end{table}
+\end{verbatim}
+%
+\subsection{Signs and Characters}
+%
+\subsubsection*{Special Signs.}
+%
+You may need to use special signs. The available ones are listed in the
+{\em \LaTeX{} User's Guide \& Reference Manual\/} by Leslie Lamport,
+pp.~44\,ff.
+We have created further symbols for math mode (enclosed in \$):
+\begin{center}
+\begin{tabular}{l@{\hspace{1em}yields\hspace{1em}}
+c@{\hspace{3em}}l@{\hspace{1em}yields\hspace{1em}}c}
+\verb|\grole| & $\grole$ & \verb|\getsto| & $\getsto$\\
+\verb|\lid| & $\lid$ & \verb|\gid| & $\gid$
+\end{tabular}
+\end{center}
+%
+\subsubsection*{Gothic (Fraktur).}
+%
+If gothic letters are {\it necessary}, please use those of the
+relevant \AmSTeX{} alphabet which are available from the
+American Mathematical Society.
+
+In \LaTeX{} only the following gothic letters are available:
+\verb|$\Re$| yields $\Re$ and \verb|$\Im$| yields $\Im$. These should
+{\it not\/} be used when you need gothic letters for your contribution.
+Use \AmSTeX{} gothic as explained above. For the real and the imaginary
+parts of a complex number within math mode you should use instead:
+\verb|$\rm Re$| (which yields Re) or \verb|$\rm Im$| (which yields Im).
+%
+\subsubsection*{Script.}
+%
+For script capitals use the coding
+\begin{center}
+\begin{tabular}{l@{\hspace{1em}which yields\hspace{1em}}c}
+\verb|$\cal AB$| & $\cal AB$
+\end{tabular}
+\end{center}
+(see p.~43 of the \LaTeX{} book).
+%
+\subsubsection*{Special Roman.}
+%
+If you need other symbols than those below, you could use
+the blackboard bold characters of \AmSTeX{}, but there might arise
+capacity problems
+in loading additional \AmSTeX{} fonts. Therefore we created
+the blackboard bold characters listed below.
+Some of them are not esthetically
+satisfactory. This need not deter you from using them:
+in the final printed form they will be
+replaced by the well-designed MT (monotype) characters of
+the phototypesetting machine.
+\begin{flushleft}
+\begin{tabular}{@{}ll@{ yields }
+c@{\hspace{1.1em}}ll@{ yields }c}
+\verb|\bbbc| & (complex numbers) & $\bbbc$
+ & \verb|\bbbf| & (blackboard bold F) & $\bbbf$\\
+\verb|\bbbh| & (blackboard bold H) & $\bbbh$
+ & \verb|\bbbk| & (blackboard bold K) & $\bbbk$\\
+\verb|\bbbm| & (blackboard bold M) & $\bbbm$
+ & \verb|\bbbn| & (natural numbers N) & $\bbbn$\\
+\verb|\bbbp| & (blackboard bold P) & $\bbbp$
+ & \verb|\bbbq| & (rational numbers) & $\bbbq$\\
+\verb|\bbbr| & (real numbers) & $\bbbr$
+ & \verb|\bbbs| & (blackboard bold S) & $\bbbs$\\
+\verb|\bbbt| & (blackboard bold T) & $\bbbt$
+ & \verb|\bbbz| & (whole numbers) & $\bbbz$\\
+\verb|\bbbone| & (symbol one) & $\bbbone$
+\end{tabular}
+\end{flushleft}
+\begin{displaymath}
+\begin{array}{c}
+\bbbc^{\bbbc^{\bbbc}} \otimes
+\bbbf_{\bbbf_{\bbbf}} \otimes
+\bbbh_{\bbbh_{\bbbh}} \otimes
+\bbbk_{\bbbk_{\bbbk}} \otimes
+\bbbm^{\bbbm^{\bbbm}} \otimes
+\bbbn_{\bbbn_{\bbbn}} \otimes
+\bbbp^{\bbbp^{\bbbp}}\\[2mm]
+\otimes
+\bbbq_{\bbbq_{\bbbq}} \otimes
+\bbbr^{\bbbr^{\bbbr}} \otimes
+\bbbs^{\bbbs_{\bbbs}} \otimes
+\bbbt^{\bbbt^{\bbbt}} \otimes
+\bbbz \otimes
+\bbbone^{\bbbone_{\bbbone}}
+\end{array}
+\end{displaymath}
+%
+\subsubsection*{Sans Serif.}
+%
+Using our macros you can also choose this font family;
+use the command \verb|\sf| for {\sf sans serif}
+(like \verb|\it| for {\it italic style}).
+%
+\section{References}
+\label{refer}
+%
+There are three reference systems available; only one, of course,
+should be used for your contribution. With each system (by
+number only, by letter-number or by author-year) a reference list
+containing all citations in the
+text, should be included at the end of your contribution placing the
+\LaTeX{} environment \verb|thebibliography| there.
+For an overall information on that environment
+see the {\em \LaTeX{} User's Guide \& Reference
+Manual\/} by Leslie Lamport, p.~73.
+%
+\subsection{References by Letter-Number or by Number Only}
+%
+References are cited in the text -- using the \verb|\cite|
+command of \LaTeX{} -- by number or by letter-number in square
+brackets, e.g.\ [1] or [E1, S2], [P1], according to your use of the
+\verb|\bibitem| command in the \verb|thebibliography| environment. The
+coding is as follows: if you choose your own label for the sources by
+giving an optional argument to the \verb|\bibitem| command the citations
+in the text are marked with the label you supplied. Otherwise a simple
+numbering is done, which is preferred.
+\begin{verbatim}
+The results in this section are a refined version
+of \cite{clar:eke}; the minimality result of Proposition~14
+was the first of its kind.
+\end{verbatim}
+The above input produces the citation: ``\dots\ refined version of
+[CE1]; the min\-i\-mality\dots''. Then the \verb|\bibitem| entry of
+the \verb|thebibliography| environment should read:
+\begin{verbatim}
+\begin{thebibliography}{[MT1]}
+.
+.
+\bibitem[CE1]{clar:eke}
+Clarke, F., Ekeland, I.:
+Nonlinear oscillations and boundary-value problems for
+Hamiltonian systems.
+Arch. Rat. Mech. Anal. {\bf 78} (1982) 315--333
+.
+.
+\end{thebibliography}
+\end{verbatim}
+The complete bibliography looks like this:
+%
+\begin{thebibliography}{[MT1]}
+%
+\bibitem[CE1]{clar:eke}
+Clarke, F., Ekeland, I.:
+Nonlinear oscillations and
+boundary-value problems for Hamiltonian systems.
+Arch. Rat. Mech. Anal. {\bf 78} (1982) 315--333
+%
+\bibitem[CE2]{clar:eke:2}
+Clarke, F., Ekeland, I.:
+Solutions p\'{e}riodiques, du
+p\'{e}riode donn\'{e}e, des \'{e}quations hamiltoniennes.
+Note CRAS Paris {\bf 287} (1978) 1013--1015
+%
+\bibitem[MT1]{mich:tar}
+Michalek, R., Tarantello, G.:
+Subharmonic solutions with prescribed minimal
+period for nonautonomous Hamiltonian systems.
+J. Diff. Eq. {\bf 72} (1988) 28--55
+%
+\bibitem[Ta1]{tar}
+Tarantello, G.:
+Subharmonic solutions for Hamiltonian
+systems via a $\bbbz_{p}$ pseudoindex theory.
+Annali di Matematica Pura (to appear)
+%
+\bibitem[Ra1]{rab}
+Rabinowitz, P.:
+On subharmonic solutions of a Hamiltonian system.
+Comm. Pure Appl. Math. {\bf 33} (1980) 609--633
+\end{thebibliography}
+%
+\subsubsection*{Number-Only System.}
+%
+For this preferred system do not use the optional argument
+in the \verb|\bibitem| command: then, only numbers will
+appear for the citations in the text (enclosed in square brackets)
+as well as for the marks in your
+bibliography (here the number is only end-punctuated without
+square brackets).
+\begin{verbatim}
+\begin{thebibliography}{1}
+\bibitem {clar:eke}
+Clarke, F., Ekeland, I.:
+Nonlinear oscillations and boundary-value problems for
+Hamiltonian systems.
+Arch. Rat. Mech. Anal. {\bf 78} (1982) 315--333
+\end{thebibliography}
+\end{verbatim}
+%
+\subsection{Author-Year System}
+%
+References are cited in the text by name and year in parentheses
+and should look as follows:
+(Smith 1970, 1980), (Ekeland et al. 1985, Theorem 2), (Jones and Jaffe
+1986; Farrow 1988, Chap.\,2). If the name is part of the sentence
+only the year may appear in parentheses,
+e.g.\ Ekeland et al. (1985, Sect.\,2.1)
+The reference list should contain all citations occurring in the text,
+ordered alphabetically by surname (with initials following). If there
+are several works by the same author(s) the references should be listed
+in the appropriate order indicated below:
+\begin{alpherate}
+\setlength{\hfuzz}{5pt}
+\item
+One author: list works chronologically;
+\item
+Author and same co-author(s): list works chronologically;
+\item
+Author and different co-authors: list works alphabetically
+according to co-authors.
+\end{alpherate}
+If there are several works by the same author(s) and in the same year,
+but which are cited separately, they should be distinguished by the use
+of ``a'', ``b'' etc., e.g.\ (Smith 1982a), (Ekeland et al. 1982b).
+%
+\subsubsection*{How to Code Author-Year System.}
+%
+If you want to use this system you have to specify in
+\verb|documentstyle| the option \verb|[citeauthoryear]|, like:
+\begin{verbatim}
+\documentstyle[citeauthoryear]{llncs}
+\end{verbatim}
+Write your citations in the text explicitly except for the year, leaving
+that up to \LaTeX{} with the \verb|\cite| command. Then give only the
+appropriate year as the optional argument (i.e. the label in square
+brackets) with the \verb|\bibitem| command(s).\\[2mm]
+{\it Sample Input}
+\begin{verbatim}
+The results in this section are a refined version
+of Clarke and Ekeland (\cite{clar:eke}); the minimality result of
+Proposition~14 was the first of its kind.
+\end{verbatim}
+The above input produces the citation: ``\dots\ refined version of
+Clarke and Ekeland (1982); the minimality\dots''. Then the
+\verb|\bibitem|
+entry of the \verb|thebibliography| environment should read:
+\begin{verbatim}
+\begin{thebibliography}{} % (do not forget {})
+.
+.
+\bibitem[1982]{clar:eke}
+Clarke, F., Ekeland, I.:
+Nonlinear oscillations and boundary-value problems for
+Hamiltonian systems.
+Arch. Rat. Mech. Anal. {\bf 78} (1982) 315--333
+.
+.
+\end{thebibliography}
+\end{verbatim}
+{\it Sample Output}
+\bibauthoryear
+%
+\end{document}
+ \ No newline at end of file
diff --git a/obsolete/macros/latex209/contrib/springer/llncs/llncs.sty b/obsolete/macros/latex209/contrib/springer/llncs/llncs.sty
new file mode 100644
index 0000000000..672c693a9e
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/llncs/llncs.sty
@@ -0,0 +1,754 @@
+% LLNCS DOCUMENT STYLE -- version 1.1
+% for LaTeX version 2.09
+
+% This style file is an adaptation of
+% the original LaTeX article.sty, by:
+% Frank Holzwarth, Springer-Verlag Heidelberg,
+% Tiergartenstrasse 17, D-6900 Heidelberg.
+
+\typeout{Document Style `llncs', <version 1.1>}
+
+\frenchspacing
+\def~{\penalty\@M\kern3pt}
+
+\def\thebibliography#1{\section*{References}\small\list
+ {\arabic{enumi}.}{\settowidth\labelwidth{#1.}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus -.07em}
+ \sloppy
+ \sfcode`\.=1000\relax}
+
+\def\ds@citeauthoryear{\def\thebibliography##1{\section*{References}%
+ \small\list{}{\settowidth\labelwidth{}\leftmargin\parindent
+ \itemindent=-\parindent
+ \labelsep=\z@
+ \usecounter{enumi}}%
+ \def\newblock{\hskip .11em plus .33em minus -.07em}%
+ \sloppy
+ \sfcode`\.=1000\relax}%
+ \def\@cite##1{##1}%
+ \def\@lbibitem[##1]##2{\item[]\if@filesw
+ {\def\protect####1{\string ####1\space}\immediate
+ \write\@auxout{\string\bibcite{##2}{##1}}}\fi\ignorespaces}}%
+
+\newif\if@envcountreset\@envcountresetfalse
+\def\ds@envcountreset{\@envcountresettrue}
+
+\def\@mbi{cmmib10}
+\def\@ptsize{0} \@namedef{ds@11pt}{\def\@ptsize{1}}
+\@namedef{ds@12pt}{\def\@ptsize{2}}
+\def\ds@twoside{\@twosidetrue \@mparswitchtrue}
+\def\ds@draft{\overfullrule
+5pt}
+\@options
+
+\ds@twoside
+
+\lineskip 1pt \normallineskip 1pt
+\def\baselinestretch{1}
+
+\def\@normalsize{\@setsize\normalsize{12pt}\xpt\@xpt
+\abovedisplayskip=3 mm plus6pt minus 4pt
+\belowdisplayskip=3 mm plus6pt minus 4pt
+\abovedisplayshortskip=0mm plus6pt minus 2pt
+\belowdisplayshortskip=2 mm plus4pt minus 4pt}
+
+\mathchardef\Gamma="0100
+\mathchardef\Delta="0101
+\mathchardef\Theta="0102
+\mathchardef\Lambda="0103
+\mathchardef\Xi="0104
+\mathchardef\Pi="0105
+\mathchardef\Sigma="0106
+\mathchardef\Upsilon="0107
+\mathchardef\Phi="0108
+\mathchardef\Psi="0109
+\mathchardef\Omega="010A
+
+\def\small{\@setsize\small{11pt}\ixpt\@ixpt
+\abovedisplayskip=2.5 mm plus5pt minus 3pt
+\belowdisplayskip=2.5 mm plus5pt minus 3pt
+\abovedisplayshortskip=0mm plus6pt minus 2pt
+\belowdisplayshortskip=2 mm plus4pt minus 4pt
+\def\@listi{\leftmargin\leftmargini\topsep 4pt plus 2pt minus 2pt}}
+
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt
+\abovedisplayskip=2.5 mm plus5pt minus 3pt
+\belowdisplayskip=2.5 mm plus5pt minus 3pt
+\abovedisplayshortskip=0mm plus6pt minus 2pt
+\belowdisplayshortskip=2 mm plus4pt minus 4pt
+\def\@listi{\leftmargin\leftmargini\topsep 4pt plus 2pt minus 2pt}}
+
+\def\scriptsize{\@setsize\scriptsize{8.4pt}\viipt\@viipt}
+
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{13.2pt}\xipt\@xipt}
+\def\Large{\@setsize\Large{14.4pt}\xiipt\@xiipt}
+\def\LARGE{\@setsize\LARGE{16.8pt}\xivpt\@xivpt}
+\def\huge{\@setsize\huge{22pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\@normalsize
+
+\if@twoside
+ \oddsidemargin 44pt
+ \evensidemargin 82pt
+ \marginparwidth 107pt
+\else \oddsidemargin 63pt \evensidemargin 63pt
+ \marginparwidth 90pt
+\fi
+\marginparsep 11pt
+\topmargin 11pt \headheight 12pt \headsep 13.66pt
+\footheight 12pt \footskip 30pt
+\textwidth 12.2truecm
+\textheight 19.3truecm
+\columnsep 1cc \columnseprule 0pt
+
+\footnotesep 7.7pt
+\skip\footins 9pt plus 4pt minus 2pt
+\floatsep 12pt plus 2pt minus 2pt
+\textfloatsep 8mm plus 2pt minus 4pt
+\intextsep 8mm plus 2pt minus 2pt
+\@maxsep 8mm
+
+\dblfloatsep 12pt plus 2pt minus 2pt
+\dbltextfloatsep 20pt plus 2pt minus 4pt
+\@dblmaxsep 20pt
+
+\@fptop 0pt plus 1fil \@fpsep 8pt plus 2fil \@fpbot 0pt plus 1fil
+\@dblfptop0pt plus1fil \@dblfpsep8pt plus2fil\@dblfpbot 0pt plus1fil
+\marginparpush 5pt
+
+\parskip 0pt plus 1pt \parindent 1.5em \topsep 8pt plus 2pt minus 4pt
+\partopsep 2pt plus 1pt minus 1pt \itemsep \z@
+\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301
+\@beginparpenalty-\@lowpenalty\@endparpenalty -\@lowpenalty\@itempenalty
+-\@lowpenalty
+
+\def\vec#1{\mathchoice{\mbox{\boldmath$\displaystyle\bf#1$}}
+{\mbox{\boldmath$\textstyle\bf#1$}}
+{\mbox{\boldmath$\scriptstyle\bf#1$}}
+{\mbox{\boldmath$\scriptscriptstyle\bf#1$}}}
+
+\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
+ \def\@svsec{}\else
+ \refstepcounter{#1}\edef\@svsec{\csname the#1\endcsname\quad }\fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #6\relax
+ \noindent{\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\par}
+ \endgroup
+ \csname #1mark\endcsname{#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #7}\else
+ \def\@svsechd{#6\hskip #3\@svsec #8\csname #1mark\endcsname
+ {#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #7}}\fi
+ \@xsect{#5}}
+
+\def\part{\par \addvspace{4ex} \@afterindentfalse \secdef\@part\@spart}
+
+\def\@part[#1]#2{\ifnum \c@secnumdepth >\m@ne \refstepcounter{part}
+\addcontentsline{toc}{part}{\thepart \hspace{1em}#1}\else
+\addcontentsline{toc}{part}{#1}\fi { \parindent 0pt \raggedright
+ \ifnum \c@secnumdepth >\m@ne \Large \bf
+ Part\thepart\par\nobreak\fi\huge
+\bf #2\markboth{}{}\par } \nobreak \vskip 3ex \@afterheading }
+
+\def\@spart#1{{\parindent 0pt \raggedright
+ \huge \bf
+ #1\par} \nobreak \vskip 3ex \@afterheading }
+
+\def\section{\@startsection {section}{1}{\z@}{-18pt plus -4pt minus
+-4pt}{12pt plus 4pt minus 4pt}{\Large\bf\boldmath
+\pretolerance=10000\relax\rightskip=0pt plus8em}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-18pt plus-4pt minus
+ -4pt}{8pt plus 4pt minus 4pt}{\normalsize\bf\boldmath
+\pretolerance=10000\relax\rightskip=0pt plus8em}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-18pt plus-4pt
+ minus -4pt}{-0.5em plus -.22em minus -0.1em}{\normalsize\bf\boldmath}}
+\def\paragraph{\@startsection{paragraph}{4}{\z@}{-12pt plus -4pt minus
+ -4pt}{-0.5em plus -.22em minus -0.1em}{\normalsize\it}}
+\def\subparagraph#1{\typeout{LLNCS Warning: You should not use
+\protect\subparagraph \space in this style.}\vskip0.5cm
+You should not use $\backslash${\tt subparagraph} in this
+style.\vskip0.5cm}
+
+\setcounter{secnumdepth}{2}
+
+\def\appendix{\par
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \def\thesection{\Alph{section}}}
+
+\leftmargini 17pt \leftmarginii 17pt
+\leftmarginiii 17pt \leftmarginiv 17pt
+\leftmarginv 10pt \leftmarginvi 10pt
+\leftmargin\leftmargini \labelwidth\leftmargini
+\advance\labelwidth-\labelsep
+\labelsep 5pt
+\parsep 0pt plus 1pt
+\def\@listi{\leftmargin\leftmargini}
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 0pt plus 1pt}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 0pt plus 1pt}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep
+ \topsep 0pt plus 1pt}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep
+ \topsep 0pt plus 1pt}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep
+ \topsep 0pt plus 1pt}
+
+\def\labelenumi{\arabic{enumi}.}
+\def\theenumi{\arabic{enumi}}
+\def\labelenumii{(\alph{enumii})}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+\def\labelenumiii{\roman{enumiii}.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+\def\labelenumiv{\Alph{enumiv}.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+\def\labelitemi{\bf --}
+\def\labelitemii{$\bullet$}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+\def\quotation{\list{}{\listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin}\item[]}
+\let\endquotation=\endlist
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+\let\enddescription\endlist
+
+\def\theequation{\arabic{equation}}
+
+\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{empty}\c@page\z@}
+\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi}
+
+\arraycolsep 1.4pt \tabcolsep 1.4pt \arrayrulewidth .4pt \doublerulesep
+2pt
+\tabbingsep \labelsep
+
+\skip\@mpfootins = \skip\footins
+\fboxsep = 3pt \fboxrule = .4pt
+
+\newcounter{part}
+\newcounter {section}
+\newcounter {subsection}[section]
+\newcounter {subsubsection}[subsection]
+\newcounter {paragraph}[subsubsection]
+
+\def\thepart{\Roman{part}}
+\def\thesection {\arabic{section}}
+\def\thesubsection {\thesection.\arabic{subsection}}
+\def\thesubsubsection {\thesubsection.\arabic{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{3}
+
+\def\tableofcontents{\section*{Table of Contents}
+ \@starttoc{toc}}
+\def\l@part#1#2{\addpenalty{\@secpenalty}
+ \addvspace{2.25em plus 1pt} \begingroup
+ \@tempdima 3em \parindent \z@ \rightskip \@pnumwidth \parfillskip
+-\@pnumwidth
+ {\Large \bf \leavevmode #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
+ \nobreak \endgroup}
+%
+\def\numberline#1{\advance\hangindent by\@tempdima%
+\hbox to\@tempdima{\hss#1\enspace}}
+%
+\def\bf@dottedtocline#1#2#3#4#5{\ifnum #1>\c@tocdepth \else
+ \vskip \z@ plus .2pt
+ {\leftskip #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip
+ \parindent #2\relax\@afterindenttrue
+ \interlinepenalty\@M
+ \leavevmode
+ \@tempdima #3\relax \advance\leftskip \@tempdima \hbox{}\hskip
+ -\leftskip
+{\bf#4}\nobreak\leaders\hbox{$\m@th \mkern \@dotsep mu.\mkern \@dotsep
+ mu$}\hfill \nobreak \hbox to\@pnumwidth{\hfil\rm #5}\par}\fi}
+%
+\def\l@section{\vskip2mm\bf@dottedtocline{1}{0em}{1.7em}}
+\def\l@subsection{\@dottedtocline{2}{1.7em}{2.3em}}
+\def\l@subsubsection{\@dottedtocline{3}{4em}{2em}}
+\def\l@paragraph{\@dottedtocline{4}{6em}{2em}}
+\def\l@subparagraph{\@dottedtocline{5}{8em}{2em}}
+\def\listoffigures{\section*{List of Figures\markboth
+ {List of Figures}{List of Figures}}\@starttoc{lof}}
+\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
+\def\listoftables{\section*{List of Tables\markboth
+ {List of Tables}{List of Tables}}\@starttoc{lot}}
+\let\l@table\l@figure
+
+\def\endthebibliography{\endlist\normalsize}
+
+\newif\if@restonecol
+\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\section*{Index}]
+ \markboth{Index}{Index}\thispagestyle{plain}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+\def\@idxitem{\par\hangindent 40pt}
+\def\subitem{\par\hangindent 40pt \hspace*{20pt}}
+\def\subsubitem{\par\hangindent 40pt \hspace*{30pt}}
+\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
+\def\indexspace{\par \vskip 10pt plus 5pt minus 3pt\relax}
+
+\def\footnoterule{\kern-3\p@\hrule width 2 true cm\kern 2.6\p@}
+
+\long\def\@makefntext#1{\@setpar{\@@par\@tempdima \hsize
+ \advance\@tempdima-1em\parshape \@ne 1em\@tempdima}\par
+ \parindent 1em\noindent \hbox to \z@{\hss$^{\@thefnmark}$\ }#1}
+
+\setcounter{topnumber}{2}
+\def\topfraction{.9}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.3}
+\setcounter{totalnumber}{3}
+\def\textfraction{.15}
+\def\floatpagefraction{.85}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.85}
+\def\dblfloatpagefraction{.85}
+
+\long\def\@makecaption#1#2{
+ \vskip 10pt
+ \setbox\@tempboxa\hbox{{\bf #1} #2}
+ \ifdim \wd\@tempboxa >\hsize \unhbox\@tempboxa\par \else \hbox
+to\hsize{\box\@tempboxa\hfil}
+ \fi\vskip5pt}
+
+\long\def\@caption#1[#2]#3{\addcontentsline{\csname
+ ext@#1\endcsname}{#1}{\protect\numberline{\csname
+ the#1\endcsname}{\ignorespaces #2}}\par
+ \begingroup
+ \@parboxrestore
+ \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par
+ \endgroup}
+
+\newcounter{figure}
+\def\thefigure{\@arabic\c@figure}
+
+\def\fps@figure{htbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{Fig.\thinspace\thefigure.}
+\def\figure{\@float{figure}\small\rm}
+\def\endfigure{\vskip-5pt\end@float}
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+
+\newcounter{table}
+\def\thetable{\@arabic\c@table}
+\def\fps@table{htbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{Table \thetable.}
+\def\table{\@float{table}\small\rm}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+
+% LaTeX does not provide a command to enter the authors institute
+% addresses. The \institute command is defined here.
+
+\newcounter{@inst}
+\newcounter{@auth}
+
+\def\institute#1{\gdef\@institute{#1}}
+
+\def\institutename{\par
+ \begingroup
+ \parskip=\z@
+ \parindent=\z@
+ \setcounter{@inst}{1}%
+ \def\and{\par\stepcounter{@inst}%
+ \noindent$^{\the@inst}$\enspace\ignorespaces}%
+ \setbox0=\vbox{\def\thanks##1{}\@institute}%
+ \ifnum\c@@inst=1\relax
+ \else
+ \setcounter{footnote}{\c@@inst}%
+ \setcounter{@inst}{1}%
+ \noindent$^{\the@inst}$\enspace
+ \fi
+ \ignorespaces
+ \@institute\par
+ \endgroup}
+
+\def\@thanks{}
+
+\def\@fnsymbol#1{\ifcase#1\or\star\or{\star\star}\or{\star\star\star}%
+ \or \dagger\or \ddagger\or
+ \mathchar "278\or \mathchar "27B\or \|\or **\or \dagger\dagger
+ \or \ddagger\ddagger\else\@ctrerr\fi\relax}
+
+\def\inst#1{\unskip$^{#1}$}
+
+\def\subtitle#1{\gdef\@subtitle{#1}}
+\def\@subtitle{}
+
+\def\maketitle{\par
+ \begingroup
+ \parindent=\z@
+ \def\thefootnote{\fnsymbol{footnote}}
+ \if@twocolumn
+ \twocolumn[\@maketitle]
+ \else \newpage
+ \global\@topnum\z@ \@maketitle \fi\thispagestyle{empty}\@thanks
+ \endgroup
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\gdef\@subtitle{}%
+ \let\thanks\relax}
+
+\def\@maketitle{\newpage
+ \begin{center}%
+ {\LARGE \bf\boldmath
+ \pretolerance=10000
+ \@title \par}\vskip .8cm
+\if!\@subtitle!\else {\Large \bf\boldmath
+ \vskip -.65cm
+ \pretolerance=10000
+ \@subtitle \par}\vskip .8cm\fi
+{\normalsize\rm\lineskip .5em
+\@author\vskip.35cm}
+ {\small\rm\institutename}
+ \end{center}%
+ }
+
+\mark{{}{}}
+
+% Define `abstract' environment
+\def\abstract{%
+\list{}{\advance\topsep by0.35cm\relax\small\rm
+ \leftmargin=1cm
+ \labelwidth=\z@
+ \listparindent=\z@
+ \itemindent\listparindent
+ \rightmargin\leftmargin}\item[\hskip\labelsep\bf Abstract.]}
+\let\endabstract=\endlist
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+\def\ps@headings{\def\@evenhead{}%
+\let\@oddhead\@evenhead
+\let\@evenfoot\@evenhead
+\let\@oddfoot\@evenhead
+\def\sectionmark##1{}%
+\def\subsectionmark##1{}}
+\def\ps@myheadings{\let\@mkboth\@gobbletwo
+\def\@oddhead{\hbox{}\small\rm\rightmark \hfil\thepage}%
+\def\@oddfoot{}\def\@evenhead{\small\rm\thepage\hfil
+\leftmark\hbox {}}%
+\def\@evenfoot{}\def\sectionmark##1{}\def\subsectionmark##1{}}
+
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+
+\ps@headings \pagenumbering{arabic} \onecolumn
+\if@twoside\else\raggedbottom\fi
+
+% new environments and theorems
+% borrowed form the LTMP-style of Springer-Verlag
+% designed by Dr. Christoph Ender
+%
+% define the new theorem like environments
+% define a new style of environments where it is possible to define
+% the font % used as the theorem name and the fontfamily for the text.
+%
+% \newstytheorem{name}{thefont}{txtfont}{Text}[Counter]
+% \newstytheorem{name}{thefont}{txtfont}[oldname]{Text}
+%
+% #1 - name of theorem
+% #2 - theorem font
+% #3 - text font
+%
+\def\newstytheorem#1#2#3{%
+\@ifnextchar[{\che@othm{#1}{#2}{#3}}{\che@nthm{#1}{#2}{#3}}}
+%
+% #1 - name of theorem
+% #2 - theorem font
+% #3 - text font
+% #4 - text string of thorem name
+%
+\def\che@nthm#1#2#3#4{%
+\@ifnextchar[{\che@xnthm{#1}{#2}{#3}{#4}}{\che@ynthm{#1}{#2}{#3}{#4}}}
+%
+% #1 - name of theorem
+% #2 - theorem font
+% #3 - text font
+% #4 - text string of thorem name
+% #5 - add theorem counter to reset list of another counter
+%
+\def\che@xnthm#1#2#3#4[#5]{\expandafter
+\@ifdefinable\csname #1\endcsname
+{\@definecounter{#1}\if@envcountreset\@addtoreset{#1}{#5}\fi
+\expandafter\xdef\csname the#1\endcsname{\@thmcounter{#1}}%
+\global\@namedef{#1}{\che@thm{#1}{#4}{#2}{#3}}\global
+\@namedef{end#1}{\@endtheorem}}}
+%
+% #1 - name of theorem
+% #2 - theorem font
+% #3 - text font
+% #4 - text string of thorem name
+%
+\def\che@ynthm#1#2#3#4{\expandafter\@ifdefinable\csname #1\endcsname
+{\@definecounter{#1}%
+\expandafter\xdef\csname the#1\endcsname{\@thmcounter{#1}}%
+\global\@namedef{#1}{\che@thm{#1}{#2}{#3}{#4}}\global
+\@namedef{end#1}{\@endtheorem}}}
+%
+% change oldthm if oldname in specification is '*'
+% then don't use a counter
+% #1 - countername
+% #2 - theorem font
+% #3 - text font
+% #4 - counter used
+% #5 - string containing theorem name to print
+%
+\def\che@othm#1#2#3[#4]#5{\expandafter\@ifdefinable
+\csname#1\endcsname%
+{\@@othm@{#1}{#2}{#3}{#4}{#5}\global\@namedef{end#1}{\@endtheorem}}}
+%
+\def\@@othm@#1#2#3#4#5{\if *#4{\global\@namedef{the#1}{\relax}
+\global\@namedef{#1}{\@bthm@{}{#5}{#2}{#3}}}\else
+{\global\@namedef{the#1}{\@nameuse{the#4}}% define the counter
+\global\@namedef{#1}{\che@thm{#4}{#5}{#2}{#3}}}\fi}
+%
+% new defs for theorem environment che 17-MAR-1989
+% it improves the option possible
+%
+% #1 - countername = theorem name
+% #2 - string containing theorem name to print
+% #3 - theorem font
+% #4 - text font
+\def\che@thm#1#2#3#4{\@ifnextchar({\@athm{#1}{#2}{#3}{#4}}{%
+\@ifnextchar *{\@bthm{#1}{#2}{#3}{#4}}%
+{\@@thm{#1}{#2}{#3}{#4}}}}
+%
+% \begin{thm}(A.1)[test] results in:
+% \end{thm} thm A.1 (test) ....
+% #1 - theorem
+% #2 - string of theorem name
+% #3 - font for theorem name and label
+% #4 - Text font
+% #5 - is the new label
+% #6 - optional string
+%
+\def\@athm#1#2#3#4(#5){\@ifnextchar[{%
+\@aythm{#1}{#2}{#3}{#4}{#5}}{\@axthm{#1}{#2}{#3}{#4}{#5}}}
+\def\@axthm#1#2#3#4#5{\@@locthmlab{#1}{#5}%
+\@begintheorem{#2}{#5}{#3}{#4}\ignorespaces}
+\def\@aythm#1#2#3#4#5[#6]{\@@locthmlab{#1}{#5}%
+\fuh@opargbegintheorem{#2}{#5}{#6}{#3}{#4}\ignorespaces}
+%
+% \begin{thm}*[xytest] results in:
+% \end{thm} thm (xytest) ....
+% #1 - theorem
+% #2 - string of theorem name
+% #3 - font for theorem name and label
+% #4 - Text font
+% #5 - optional string
+%
+\def\@bthm@#1#2#3#4{\@ifnextchar[{\@bythm{#1}{#2}{#3}{#4}}{%
+\@bxthm{#1}{#2}{#3}{#4}}}
+\def\@bthm#1#2#3#4*{\@ifnextchar[{\@bythm{#1}{#2}{#3}{#4}}{%
+\@bxthm{#1}{#2}{#3}{#4}}}
+\def\@bxthm#1#2#3#4{\if !#1!\relax\else\@@locthmlab{#1}{}\fi
+\@@begintheorem{#2}{#3}{#4}\ignorespaces}
+\def\@bythm#1#2#3#4[#5]{%
+\@@opargbegintheorem{#2}{#3}{#4}{#5}\ignorespaces}
+%
+% define local label
+% if no number or a user specified label occured
+%
+\def\@@locthmlab#1#2{\expandafter\def\csname the#1\endcsname{#2}
+\let\@chetempa\protect\def\protect{\noexpand\protect\noexpand}%
+\edef\@currentlabel{\csname p@#1\endcsname\csname the#1\endcsname}%
+\let\protect\@chetempa}
+%
+% #1 - counter = theorem name
+% #2 - string with name
+% #3 - font for theorem name and label
+% #4 - font for text
+\def\@@thm#1#2#3#4{\refstepcounter
+ {#1}\@ifnextchar[{\che@ythm{#1}{#2}{#3}{#4}}{%
+ \che@xthm{#1}{#2}{#3}{#4}}}
+%
+\def\che@xthm#1#2#3#4{\che@begintheorem{#2}{\csname
+the#1\endcsname}{#3}{#4}\ignorespaces}
+\def\che@ythm#1#2#3#4[#5]{\che@opargbegintheorem{#2}{\csname
+ the#1\endcsname}{#5}{#3}{#4}\ignorespaces}
+%
+% #1 - name of theorem
+% #2 - label string
+% #3 - font for name and lable
+% #4 - text fomt
+%
+\def\che@begintheorem#1#2#3#4{#4\trivlist\item[\hskip\labelsep
+#3#1\ts #2.]}
+%
+% #1 - name of theorem
+% #2 - label string
+% #3 - additonal text
+% #4 - font for name and lable
+% #5 - text fomt
+%
+\def\che@opargbegintheorem#1#2#3#4#5{#5\trivlist
+\item[\hskip\labelsep#4#1\ts #2\ #3.]}
+%
+\def\fuh@opargbegintheorem#1#2#3{\it \trivlist
+ \item[\hskip \labelsep{\bf #1\ #2\ (#3).}]}
+%
+\def\@@begintheorem#1#2#3{#3\trivlist\item[\hskip\labelsep
+#2#1.]}
+\def\@@opargbegintheorem#1#2#3#4{#3\trivlist\item[\hskip\labelsep
+#2#1 #4.]}
+
+\newstytheorem{theorem}{\bf}{\it}{Theorem}[section]
+\newstytheorem{example}{\it}{\rm}{Example}[section]
+\newstytheorem{proposition}{\bf}{\it}[theorem]{Proposition}
+\newstytheorem{corollary}{\bf}{\it}[theorem]{Corollary}
+\newstytheorem{lemma}{\bf}{\it}[theorem]{Lemma}
+\newstytheorem{proof}{\it}{\rm}[*]{Proof}
+\newstytheorem{definition}{\bf}{\rm}[theorem]{Definition}
+\newstytheorem{remark}{\it}{\rm}[*]{Remark}
+\newstytheorem{exercise}{\it}{\rm}[theorem]{Exercise}
+\newstytheorem{problem}{\it}{\rm}[theorem]{Problem}
+\newstytheorem{solution}{\it}{\rm}[theorem]{Solution}
+\newstytheorem{note}{\it}{\rm}[theorem]{Note}
+\newstytheorem{question}{\it}{\rm}[theorem]{Question}
+
+\def\squareforqed{\hbox{\rlap{$\sqcap$}$\sqcup$}}
+\def\qed{\ifmmode\squareforqed\else{\unskip\nobreak\hfil
+\penalty50\hskip1em\null\nobreak\hfil\squareforqed
+\parfillskip=0pt\finalhyphendemerits=0\endgraf}\fi}
+
+\def\getsto{\mathrel{\mathchoice {\vcenter{\offinterlineskip
+\halign{\hfil
+$\displaystyle##$\hfil\cr\gets\cr\to\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr\gets
+\cr\to\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr\gets
+\cr\to\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+\gets\cr\to\cr}}}}}
+\def\lid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr<\cr\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr<\cr
+\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr<\cr
+\noalign{\vskip1pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+<\cr
+\noalign{\vskip0.9pt}=\cr}}}}}
+\def\gid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr>\cr\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr>\cr
+\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr>\cr
+\noalign{\vskip1pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+>\cr
+\noalign{\vskip0.9pt}=\cr}}}}}
+\def\grole{\mathrel{\mathchoice {\vcenter{\offinterlineskip
+\halign{\hfil
+$\displaystyle##$\hfil\cr>\cr\noalign{\vskip-1pt}<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr
+>\cr\noalign{\vskip-1pt}<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr
+>\cr\noalign{\vskip-0.8pt}<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+>\cr\noalign{\vskip-0.3pt}<\cr}}}}}
+\def\bbbr{{\rm I\!R}} %reelle Zahlen
+\def\bbbm{{\rm I\!M}}
+\def\bbbn{{\rm I\!N}} %natuerliche Zahlen
+\def\bbbf{{\rm I\!F}}
+\def\bbbh{{\rm I\!H}}
+\def\bbbk{{\rm I\!K}}
+\def\bbbp{{\rm I\!P}}
+\def\bbbone{{\mathchoice {\rm 1\mskip-4mu l} {\rm 1\mskip-4mu l}
+{\rm 1\mskip-4.5mu l} {\rm 1\mskip-5mu l}}}
+\def\bbbc{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}}}
+\def\bbbq{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm
+Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle\rm Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle\rm Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}}}}
+\def\bbbt{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm
+T$}\hbox{\hbox to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle\rm T$}\hbox{\hbox
+to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle\rm T$}\hbox{\hbox
+to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm T$}\hbox{\hbox
+to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}}}
+\def\bbbs{{\mathchoice
+{\setbox0=\hbox{$\displaystyle \rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox
+to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle \rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox
+to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle \rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox
+to0pt{\kern0.5\wd0\vrule height0.45\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.4\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox
+to0pt{\kern0.55\wd0\vrule height0.45\ht0\hss}\box0}}}}
+\def\bbbz{{\mathchoice {\hbox{$\sf\textstyle Z\kern-0.4em Z$}}
+{\hbox{$\sf\textstyle Z\kern-0.4em Z$}}
+{\hbox{$\sf\scriptstyle Z\kern-0.3em Z$}}
+{\hbox{$\sf\scriptscriptstyle Z\kern-0.2em Z$}}}}
+\def\ts{\thinspace}
+
+\def\typeset{\vfill\small\noindent This article was processed using
+the \LaTeX\ macro package with LLNCS style\par}
+
+\def\enddocument{\par\typeset
+\@checkend{document}\clearpage\begingroup
+\if@filesw \immediate\closeout\@mainaux
+\def\global\@namedef##1##2{}\def\newlabel{\@testdef r}%
+\def\bibcite{\@testdef b}\@tempswafalse\makeatletter\input \jobname.aux
+\if@tempswa \@warning{Label(s) may have changed. Rerun to get
+cross-references right}\fi\fi\endgroup\deadcycles\z@\@@end}
+ \ No newline at end of file
diff --git a/obsolete/macros/latex209/contrib/springer/llncs/llncsdoc.sty b/obsolete/macros/latex209/contrib/springer/llncs/llncsdoc.sty
new file mode 100644
index 0000000000..a87f4db93e
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/llncs/llncsdoc.sty
@@ -0,0 +1,45 @@
+% This is LLNCSDOC.STY the modification of the
+% LLNCS style file for the documentation of
+% the LaTeX macro package from Springer-Verlag
+% for multiple authors books in mathematics, version 1.1
+\def\LaTex{{\xxvpt
+\def\psc{\@getfont\psc\scfam\@xxvpt{\@mcsc\@magscale5}}\LaTeX}}
+\def\textfontii{\the\textfont\tw@}
+\def\AmSTeX{{\textfontii A}\kern-.1667em\lower.5ex\hbox
+ {\textfontii M}\kern-.125em{\textfontii S}-\TeX}
+%
+\def\ps@myheadings{\let\@mkboth\@gobbletwo
+\def\@oddhead{\hbox{}\hfil\small\rm
+\LaTeX\ style file for Lecture Notes in Computer Science --
+documentation\qquad\thepage}%
+\def\@oddfoot{}\def\@evenhead{\small\rm\thepage\qquad
+\LaTeX\ style file for Lecture Notes in Computer Science --
+documentation\hfil\hbox {}}%
+\def\@evenfoot{}\def\sectionmark##1{}\def\subsectionmark##1{}}
+\ps@myheadings
+%
+\renewcommand{\labelitemi}{--}
+\newenvironment{alpherate}%
+{\renewcommand{\labelenumi}{\alph{enumi})}\begin{enumerate}}%
+{\end{enumerate}\renewcommand{\labelenumi}{enumi}}
+%
+\def\bibauthoryear{\begingroup
+\def\thebibliography##1{\section*{References}%
+ \small\list{}{\settowidth\labelwidth{}\leftmargin\parindent
+ \itemindent=-\parindent
+ \labelsep=\z@
+ \usecounter{enumi}}%
+ \def\newblock{\hskip .11em plus .33em minus -.07em}%
+ \sloppy
+ \sfcode`\.=1000\relax}%
+ \def\@cite##1{##1}%
+ \def\@lbibitem[##1]##2{\item[]\if@filesw
+ {\def\protect####1{\string ####1\space}\immediate
+ \write\@auxout{\string\bibcite{##2}{##1}}}\fi\ignorespaces}%
+\begin{thebibliography}{}
+\bibitem[1982]{clar:eke} Clarke, F., Ekeland, I.: Nonlinear
+oscillations and boundary-value problems for Hamiltonian systems.
+Arch. Rat. Mech. Anal. {\bf 78} (1982) 315--333
+\end{thebibliography}
+\endgroup}
+ \ No newline at end of file
diff --git a/obsolete/macros/latex209/contrib/springer/llncs/read.me b/obsolete/macros/latex209/contrib/springer/llncs/read.me
new file mode 100644
index 0000000000..30b24117ae
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/llncs/read.me
@@ -0,0 +1,12 @@
+How to proceed
+
+On this diskette or tape you find the following files:
+
+llncs.doc general instructions, this is the LaTeX source
+ for the documentation. Please LaTeX it if you
+ have the paper version not at hand
+llncsdoc.sty modifications of the LLNCS style
+ needed for LLNCS.DOC
+llncs.dem an example showing how to code
+llncs.sty the LaTeX style file (for LaTeX 2.09)
+ \ No newline at end of file
diff --git a/obsolete/macros/latex209/contrib/springer/lmamult/lmamudoc.sty b/obsolete/macros/latex209/contrib/springer/lmamult/lmamudoc.sty
new file mode 100644
index 0000000000..11ee066a89
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/lmamult/lmamudoc.sty
@@ -0,0 +1,34 @@
+% This is LMAMUDOC.STY the modification of the
+% LMAMULT style file for the documentation of
+% the LaTeX macro package from Springer-Verlag
+% for multiple authors books in mathematics
+\def\LaTex{{\xxvpt
+\def\psc{\@getfont\psc\scfam\@xxvpt{\@mcsc\@magscale5}}\LaTeX}}
+\def\textfontii{\the\textfont\tw@}
+\def\AmSTeX{{\textfontii A}\kern-.1667em\lower.5ex\hbox
+ {\textfontii M}\kern-.125em{\textfontii S}-\TeX}
+%
+\renewcommand{\labelitemi}{--}
+\newenvironment{alpherate}%
+{\renewcommand{\labelenumi}{\alph{enumi})}\begin{enumerate}}%
+{\end{enumerate}\renewcommand{\labelenumi}{enumi}}
+%
+\def\bibauthoryear{\begingroup
+\def\thebibliography##1{\section*{References}%
+ \small\list{}{\settowidth\labelwidth{}\leftmargin\parindent
+ \itemindent=-\parindent
+ \labelsep=\z@
+ \usecounter{enumi}}%
+ \def\newblock{\hskip .11em plus .33em minus -.07em}%
+ \sloppy
+ \sfcode`\.=1000\relax}%
+ \def\@cite##1{##1}%
+ \def\@lbibitem[##1]##2{\item[]\if@filesw
+ {\def\protect####1{\string ####1\space}\immediate
+ \write\@auxout{\string\bibcite{##2}{##1}}}\fi\ignorespaces}%
+\begin{thebibliography}{}
+\bibitem[1982]{clar:eke} Clarke, F., Ekeland, I.: Nonlinear
+oscillations and boundary-value problems for Hamiltonian systems.
+Arch. Rat. Mech. Anal. {\bf 78} (1982) 315--333
+\end{thebibliography}
+\endgroup}
diff --git a/obsolete/macros/latex209/contrib/springer/lmamult/lmamult.dem b/obsolete/macros/latex209/contrib/springer/lmamult/lmamult.dem
new file mode 100644
index 0000000000..22aadc59e6
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/lmamult/lmamult.dem
@@ -0,0 +1,426 @@
+% This is LMAMULT.DEM the demonstration file of
+% the LaTeX macro package from Springer-Verlag
+% for multi author books in mathematics, version of March 1991
+\documentstyle{lmamult}
+%
+\begin{document}
+
+\title{Hamiltonian Mechanics}
+
+\author{Ivar Ekeland\inst{1} and Roger Temam\inst{2}}
+
+\institute{Princeton University, Princeton NJ 08544, USA
+\and
+Universit\'{e} de Paris-Sud,
+Laboratoire d'Analyse Num\'{e}rique, B\^{a}timent 425,\\
+F-91405 Orsay Cedex, France}
+
+\maketitle
+%
+\section{Fixed-Period Problems: The Sublinear Case}
+%
+With this chapter, the preliminaries are over, and we begin the search
+for periodic solutions to Hamiltonian systems. All this will be done in
+the convex case; that is, we shall study the boundary-value problem
+\begin{eqnarray*}
+ \dot{x}&=&JH' (t,x)\\
+ x(0) &=& x(T)
+\end{eqnarray*}
+with $H(t,\cdot)$ a convex function of $x$, going to $+\infty$ when
+$\left\|x\right\| \to \infty$.
+
+%
+\subsection{Autonomous Systems}
+%
+In this section, we will consider the case when the Hamiltonian $H(x)$
+is autonomous. For the sake of simplicity, we shall also assume that it
+is $C^{1}$.
+
+We shall first consider the question of nontriviality, within the
+general framework of
+$\left(A_{\infty},B_{\infty}\right)$-subquadratic Hamiltonians. In
+the second subsection, we shall look into the special case when $H$ is
+$\left(0,b_{\infty}\right)$-subquadratic,
+and we shall try to derive additional information.
+%
+\subsubsection{ The General Case: Nontriviality.}
+%
+We assume that $H$ is
+$\left(A_{\infty},B_{\infty}\right)$-sub\-qua\-dra\-tic at infinity,
+for some constant symmetric matrices $A_{\infty}$ and $B_{\infty}$,
+with $B_{\infty}-A_{\infty}$ positive definite. Set:
+\begin{eqnarray}
+\gamma :&=&{\rm smallest\ eigenvalue\ of}\ \ B_{\infty} - A_{\infty} \\
+ \lambda : &=& {\rm largest\ negative\ eigenvalue\ of}\ \
+ J \frac{d}{dt} +A_{\infty}\ .
+\end{eqnarray}
+
+Theorem 21 tells us that if $\lambda +\gamma < 0$, the boundary-value
+problem:
+\begin{equation}
+\begin{array}{rcl}
+ \dot{x}&=&JH' (x)\\
+ x(0)&=&x (T)
+\end{array}
+\end{equation}
+has at least one solution
+$\overline{x}$, which is found by minimizing the dual
+action functional:
+\begin{equation}
+ \psi (u) = \int_{o}^{T} \left[\frac{1}{2}
+ \left(\Lambda_{o}^{-1} u,u\right) + N^{\ast} (-u)\right] dt
+\end{equation}
+on the range of $\Lambda$, which is a subspace $R (\Lambda)_{L}^{2}$
+with finite codimension. Here
+\begin{equation}
+ N(x) := H(x) - \frac{1}{2} \left(A_{\infty} x,x\right)
+\end{equation}
+is a convex function, and
+\begin{equation}
+ N(x) \le \frac{1}{2}
+ \left(\left(B_{\infty} - A_{\infty}\right) x,x\right)
+ + c\ \ \ \forall x\ .
+\end{equation}
+
+%
+\begin{proposition}
+Assume $H'(0)=0$ and $ H(0)=0$. Set:
+\begin{equation}
+ \delta := \liminf_{x\to 0} 2 N (x) \left\|x\right\|^{-2}\ .
+ \label{eq:one}
+\end{equation}
+
+If $\gamma < - \lambda < \delta$,
+the solution $\overline{u}$ is non-zero:
+\begin{equation}
+ \overline{x} (t) \ne 0\ \ \ \forall t\ .
+\end{equation}
+\end{proposition}
+%
+\begin{proof}
+Condition (\ref{eq:one}) means that, for every
+$\delta ' > \delta$, there is some $\varepsilon > 0$ such that
+\begin{equation}
+ \left\|x\right\| \le \varepsilon \Rightarrow N (x) \le
+ \frac{\delta '}{2} \left\|x\right\|^{2}\ .
+\end{equation}
+
+It is an exercise in convex analysis, into which we shall not go, to
+show that this implies that there is an $\eta > 0$ such that
+\begin{equation}
+ f\left\|x\right\| \le \eta
+ \Rightarrow N^{\ast} (y) \le \frac{1}{2\delta '}
+ \left\|y\right\|^{2}\ .
+ \label{eq:two}
+\end{equation}
+
+\begin{figure}
+\vspace{2.5cm}
+\caption{This is the caption of the figure displaying a white eagle and
+a white horse on a snow field}
+\end{figure}
+
+Since $u_{1}$ is a smooth function, we will have
+$\left\|hu_{1}\right\|_\infty \le \eta$
+for $h$ small enough, and inequality (\ref{eq:two}) will hold,
+yielding thereby:
+\begin{equation}
+ \psi (hu_{1}) \le \frac{h^{2}}{2}
+ \frac{1}{\lambda} \left\|u_{1} \right\|_{2}^{2} + \frac{h^{2}}{2}
+ \frac{1}{\delta '} \left\|u_{1}\right\|^{2}\ .
+\end{equation}
+
+If we choose $\delta '$ close enough to $\delta$, the quantity
+$\left(\frac{1}{\lambda} + \frac{1}{\delta '}\right)$
+will be negative, and we end up with
+\begin{equation}
+ \psi (hu_{1}) < 0\ \ \ \ \ {\rm for}\ \ h\ne 0\ \ {\rm small}\ .
+\end{equation}
+
+On the other hand, we check directly that $\psi (0) = 0$. This shows
+that 0 cannot be a minimizer of $\psi$, not even a local one.
+So $\overline{u} \ne 0$ and
+$\overline{u} \ne \Lambda_{o}^{-1} (0) = 0$. \qed
+\end{proof}
+%
+\begin{corollary}
+Assume $H$ is $C^{2}$ and
+$\left(a_{\infty},b_{\infty}\right)$-subquadratic at infinity. Let
+$\xi_{1},\allowbreak\dots,\allowbreak\xi_{N}$ be the
+equilibria, that is, the solutions of $H' (\xi ) = 0$.
+Denote by $\omega_{k}$
+the smallest eigenvalue of $H'' \left(\xi_{k}\right)$, and set:
+\begin{equation}
+ \omega : = {\rm Min\,} \left\{\omega_{1},\dots,\omega_{k}\right\}\ .
+\end{equation}
+If:
+\begin{equation}
+ \frac{T}{2\pi} b_{\infty} <
+ - E \left[- \frac{T}{2\pi}a_{\infty}\right] <
+ \frac{T}{2\pi}\omega
+ \label{eq:three}
+\end{equation}
+then minimization of $\psi$ yields a non-constant $T$-periodic solution
+$\overline{x}$.
+\end{corollary}
+%
+
+We recall once more that by the integer part $E [\alpha ]$ of
+$\alpha \in \bbbr$, we mean the $a\in \bbbz$
+such that $a< \alpha \le a+1$. For instance,
+if we take $a_{\infty} = 0$, Corollary 2 tells
+us that $\overline{x}$ exists and is
+non-constant provided that:
+
+\begin{equation}
+ \frac{T}{2\pi} b_{\infty} < 1 < \frac{T}{2\pi}
+\end{equation}
+or
+\begin{equation}
+ T\in \left(\frac{2\pi}{\omega},\frac{2\pi}{b_{\infty}}\right)\ .
+ \label{eq:four}
+\end{equation}
+
+%
+\begin{proof}
+The spectrum of $\Lambda$ is $\frac{2\pi}{T} \bbbz +a_{\infty}$. The
+largest negative eigenvalue $\lambda$ is given by
+$\frac{2\pi}{T}k_{o} +a_{\infty}$,
+where
+\begin{equation}
+ \frac{2\pi}{T}k_{o} + a_{\infty} < 0
+ \le \frac{2\pi}{T} (k_{o} +1) + a_{\infty}\ .
+\end{equation}
+Hence:
+\begin{equation}
+ k_{o} = E \left[- \frac{T}{2\pi} a_{\infty}\right] \ .
+\end{equation}
+
+The condition $\gamma < -\lambda < \delta$ now becomes:
+\begin{equation}
+ b_{\infty} - a_{\infty} <
+ - \frac{2\pi}{T} k_{o} -a_{\infty} < \omega -a_{\infty}
+\end{equation}
+which is precisely condition (\ref{eq:three}).\qed
+\end{proof}
+%
+
+\begin{lemma}
+Assume that $H$ is $C^{2}$ on $\bbbr^{2n} \setminus \{ 0\}$ and
+that $H'' (x)$ is non-de\-gen\-er\-ate for any $x\ne 0$. Then any local
+minimizer $\widetilde{x}$ of $\psi$ has minimal period $T$.
+\end{lemma}
+%
+\begin{proof}
+We know that $\widetilde{x}$, or
+$\widetilde{x} + \xi$ for some constant $\xi
+\in \bbbr^{2n}$, is a $T$-periodic solution of the Hamiltonian system:
+\begin{equation}
+ \dot{x} = JH' (x)\ .
+\end{equation}
+
+There is no loss of generality in taking $\xi = 0$. So
+$\psi (x) \ge \psi (\widetilde{x} )$
+for all $\widetilde{x}$ in some neighbourhood of $x$ in
+$W^{1,2} \left(\bbbr / T\bbbz ; \bbbr^{2n}\right)$.
+
+But this index is precisely the index
+$i_{T} (\widetilde{x} )$ of the $T$-periodic
+solution $\widetilde{x}$ over the interval
+$(0,T)$, as defined in Sect.~2.6. So
+\begin{equation}
+ i_{T} (\widetilde{x} ) = 0\ .
+ \label{eq:five}
+\end{equation}
+
+Now if $\widetilde{x}$ has a lower period, $T/k$ say,
+we would have, by Corollary 31:
+\begin{equation}
+ i_{T} (\widetilde{x} ) =
+ i_{kT/k}(\widetilde{x} ) \ge
+ ki_{T/k} (\widetilde{x} ) + k-1 \ge k-1 \ge 1\ .
+\end{equation}
+
+This would contradict (\ref{eq:five}), and thus cannot happen.\qed
+\end{proof}
+%
+\paragraph{Notes and Comments.}
+The results in this section are a
+refined version of \cite{clar:eke};
+the minimality result of Proposition
+14 was the first of its kind.
+
+To understand the nontriviality conditions, such as the one in formula
+(\ref{eq:four}), one may think of a one-parameter family
+$x_{T}$, $T\in \left(2\pi\omega^{-1}, 2\pi b_{\infty}^{-1}\right)$
+of periodic solutions, $x_{T} (0) = x_{T} (T)$,
+with $x_{T}$ going away to infinity when $T\to 2\pi \omega^{-1}$,
+which is the period of the linearized system at 0.
+
+\begin{table}
+\caption{This is the example table taken out of {\it The
+\TeX{}book,} p.\,246}
+\vspace{2pt}
+\begin{tabular}{r@{\quad}rl}
+\hline
+\multicolumn{1}{l}{\rule{0pt}{12pt}
+ Year}&\multicolumn{2}{l}{World population}\\[2pt]
+\hline\rule{0pt}{12pt}
+8000 B.C. & 5,000,000& \\
+ 50 A.D. & 200,000,000& \\
+1650 A.D. & 500,000,000& \\
+1945 A.D. & 2,300,000,000& \\
+1980 A.D. & 4,400,000,000& \\[2pt]
+\hline
+\end{tabular}
+\end{table}
+%
+\begin{theorem} [(Ghoussoub-Preiss)]
+Assume $H(t,x)$ is
+$(0,\varepsilon )$-subquadratic at
+infinity for all $\varepsilon > 0$, and $T$-periodic in $t$
+\begin{equation}
+ H (t,\cdot )\ \ \ \ \ {\rm is\ convex}\ \ \forall t
+\end{equation}
+\begin{equation}
+ H (\cdot ,x)\ \ \ \ \ {\rm is}\ \ T{\rm -periodic}\ \ \forall x
+\end{equation}
+\begin{equation}
+ H (t,x)\ge n\left(\left\|x\right\|\right)\ \ \ \ \
+ {\rm with}\ \ n (s)s^{-1}\to \infty\ \ {\rm as}\ \ s\to \infty
+\end{equation}
+\begin{equation}
+ \forall \varepsilon > 0\ ,\ \ \ \exists c\ :\
+ H(t,x) \le \frac{\varepsilon}{2}\left\|x\right\|^{2} + c\ .
+\end{equation}
+
+Assume also that $H$ is $C^{2}$, and $H'' (t,x)$ is positive definite
+everywhere. Then there is a sequence $x_{k}$, $k\in \bbbn$, of
+$kT$-periodic solutions of the system
+\begin{equation}
+ \dot{x} = JH' (t,x)
+\end{equation}
+such that, for every $k\in \bbbn$, there is some $p_{o}\in\bbbn$ with:
+\begin{equation}
+ p\ge p_{o}\Rightarrow x_{pk} \ne x_{k}\ .
+\end{equation}
+\qed
+\end{theorem}
+%
+\begin{example} [{\rm(External forcing)}]
+Consider the system:
+\begin{equation}
+ \dot{x} = JH' (x) + f(t)
+\end{equation}
+where the Hamiltonian $H$ is
+$\left(0,b_{\infty}\right)$-subquadratic, and the
+forcing term is a distribution on the circle:
+\begin{equation}
+ f = \frac{d}{dt} F + f_{o}\ \ \ \ \
+ {\rm with}\ \ F\in L^{2} \left(\bbbr / T\bbbz; \bbbr^{2n}\right)\ ,
+\end{equation}
+where $f_{o} : = T^{-1}\int_{o}^{T} f (t) dt$. For instance,
+\begin{equation}
+ f (t) = \sum_{k\in \bbbn} \delta_{k} \xi\ ,
+\end{equation}
+where $\delta_{k}$ is the Dirac mass at $t= k$ and
+$\xi \in \bbbr^{2n}$ is a
+constant, fits the prescription. This means that the system
+$\dot{x} = JH' (x)$ is being excited by a
+series of identical shocks at interval $T$.
+\end{example}
+%
+\begin{definition}
+Let $A_{\infty} (t)$ and $B_{\infty} (t)$ be symmetric
+operators in $\bbbr^{2n}$, depending continuously on
+$t\in [0,T]$, such that
+$A_{\infty} (t) \le B_{\infty} (t)$ for all $t$.
+
+A Borelian function
+$H: [0,T]\times \bbbr^{2n} \to \bbbr$
+is called
+$\left(A_{\infty} ,B_{\infty}\right)$-{\it subquadratic at infinity}
+if there exists a function $N(t,x)$ such that:
+\begin{equation}
+ H (t,x) = \frac{1}{2} \left(A_{\infty} (t) x,x\right) + N(t,x)
+\end{equation}
+\begin{equation}
+ \forall t\ ,\ \ \ N(t,x)\ \ \ \ \
+ {\rm is\ convex\ with\ respect\ to}\ \ x
+\end{equation}
+\begin{equation}
+ N(t,x) \ge n\left(\left\|x\right\|\right)\ \ \ \ \
+ {\rm with}\ \ n(s)s^{-1}\to +\infty\ \ {\rm as}\ \ s\to +\infty
+\end{equation}
+\begin{equation}
+ \exists c\in \bbbr\ :\ \ \ H (t,x) \le
+ \frac{1}{2} \left(B_{\infty} (t) x,x\right) + c\ \ \ \forall x\ .
+\end{equation}
+
+If $A_{\infty} (t) = a_{\infty} I$ and
+$B_{\infty} (t) = b_{\infty} I$, with
+$a_{\infty} \le b_{\infty} \in \bbbr$,
+we shall say that $H$ is
+$\left(a_{\infty},b_{\infty}\right)$-subquadratic
+at infinity. As an example, the function
+$\left\|x\right\|^{\alpha}$, with
+$1\le \alpha < 2$, is $(0,\varepsilon )$-subquadratic at infinity
+for every $\varepsilon > 0$. Similarly, the Hamiltonian
+\begin{equation}
+H (t,x) = \frac{1}{2} k \left\|k\right\|^{2} +\left\|x\right\|^{\alpha}
+\end{equation}
+is $(k,k+\varepsilon )$-subquadratic for every $\varepsilon > 0$.
+Note that, if $k<0$, it is not convex.
+\end{definition}
+%
+
+\paragraph{Notes and Comments.}
+The first results on subharmonics were
+obtained by Rabinowitz in \cite{rab}, who showed the existence of
+infinitely many subharmonics both in the subquadratic and superquadratic
+case, with suitable growth conditions on $H'$. Again the duality
+approach enabled Clarke and Ekeland in \cite{clar:eke:2} to treat the
+same problem in the convex-subquadratic case, with growth conditions on
+$H$ only.
+
+Recently, Michalek and Tarantello (see \cite{mich:tar} and \cite{tar})
+have obtained lower bound on the number of subharmonics of period $kT$,
+based on symmetry considerations and on pinching estimates, as in
+Sect.~5.2 of this article.
+
+%
+% ---- Bibliography ----
+%
+\begin{thebibliography}{MT1}
+%
+\bibitem[CE1]{clar:eke}
+Clarke, F., Ekeland, I.:
+Nonlinear oscillations and
+boundary-value problems for Hamiltonian systems.
+Arch. Rat. Mech. Anal. {\bf 78} (1982) 315--333
+%
+\bibitem[CE2]{clar:eke:2}
+Clarke, F., Ekeland, I.:
+Solutions p\'{e}riodiques, du
+p\'{e}riode donn\'{e}e, des \'{e}quations hamiltoniennes.
+Note CRAS Paris {\bf 287} (1978) 1013--1015
+%
+\bibitem[MT1]{mich:tar}
+Michalek, R., Tarantello, G.:
+Subharmonic solutions with prescribed minimal
+period for nonautonomous Hamiltonian systems.
+J. Diff. Eq. {\bf 72} (1988) 28--55
+%
+\bibitem[Ta1]{tar}
+Tarantello, G.:
+Subharmonic solutions for Hamiltonian
+systems via a $\bbbz_{p}$ pseudoindex theory.
+Annali di Matematica Pura (to appear)
+%
+\bibitem[Ra1]{rab}
+Rabinowitz, P.:
+On subharmonic solutions of a Hamiltonian system.
+Comm. Pure Appl. Math. {\bf 33} (1980) 609--633
+\end{thebibliography}
+%
+\end{document}
diff --git a/obsolete/macros/latex209/contrib/springer/lmamult/lmamult.doc b/obsolete/macros/latex209/contrib/springer/lmamult/lmamult.doc
new file mode 100644
index 0000000000..81fd37a375
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/lmamult/lmamult.doc
@@ -0,0 +1,1114 @@
+% This is LMAMULT.DOC the documentation file of
+% the LaTeX macro package from Springer-Verlag
+% for multiauthor books in mathematics
+\documentstyle[lmamudoc]{lmamult}
+%
+\newfont{\titelfont}{cmr10 scaled 1728}
+\newfont{\titelbffont}{cmbx10 scaled 2074}
+\newfont{\titelbigfont}{cmr10 scaled 2488}
+\markboth{Style File for Authors Coding with \LaTeX{}}{Style File
+for Authors Coding with \LaTeX{}}
+%
+\begin{document}
+\thispagestyle{empty}
+\begin{flushleft}
+{\titelbffont Style File}\\[6pt]
+{\titelbffont for Authors Coding with \LaTex{}}\\[2cm]
+\end{flushleft}
+\rule{\textwidth}{1pt}
+\vspace{2pt}
+\begin{flushright}
+\begin{tabular}{@{}l}
+{\titelbigfont Multiple-Author Mathematics}\\[8pt]
+{\titelfont Version of March 1991}
+\end{tabular}
+\end{flushright}
+\rule{\textwidth}{1pt}
+\vfill
+\begin{flushright}
+\begin{tabular}{@{}l}
+{\titelfont Springer-Verlag}\\[8pt]
+{\titelfont Berlin\enspace Heidelberg\enspace New\kern0.1em York}\\[5pt]
+{\titelfont London\enspace Paris\enspace Tokyo}\\[5pt]
+{\titelfont Hong Kong\enspace Barcelona\enspace Budapest}
+\end{tabular}
+\end{flushright}
+\newpage
+%
+\section*{For further information please contact us:}
+%
+\begin{flushleft}
+\begin{tabular}{l@{\quad}l@{\hspace{3mm}}l}
+$\bullet$ & \multicolumn{2}{l}{\bf Springer-Verlag Heidelberg}\\[1mm]
+& \multicolumn{2}{l}{Department New Technologies/Product Development}\\
+& \multicolumn{2}{l}{Springer-Verlag, Postfach 105280, W-6900 Heidelberg
+1, FRG}\\[0.5mm]
+ & DATEX-P dial: & FRG 456 221 4305\\
+ & & If you do not yet have an account, press RETURN\\
+ & & when asked for your name; then simply leave a message.\\
+ & & The file name should be your name and country\\
+ & & or state, e.g.\ smith-texas\\
+ & Telex: & 461723\\
+ & Telefax: & (06221)43982\\
+ &bitnet/EARN:& SPRINGER @ DHDSPRI6
+\end{tabular}
+\end{flushleft}
+\rule{\textwidth}{1pt}
+%
+\section*{Acceptable formats of your disk/magnetic tape and output:}
+%
+The following formats are acceptable: 5.25$^{\prime\prime}$ diskette
+MS-DOS, 5.25$^{\prime\prime}$ CP/M, 3.5$^{\prime\prime}$ diskette
+MS-DOS, 3.5$^{\prime\prime}$ diskette Apple MacIntosh, 9-track 1600
+bpi magnetic tape VAX/VMS, 9-track 1600 bpi magnetic tape ANSI with
+label, SUN-Streamer Tape.
+
+Once you have completed your work using this macro package,
+please submit your own printout of the {\it final
+version together with the disk or magnetic tape}, containing your
+\LaTeX{} input (source) file und the final DVI-file and make sure
+that the text is {\it identical in both cases.}
+%
+\newpage
+\tableofcontents
+\newpage
+%
+\section{Introduction}
+%
+Authors wishing to code their contribution
+with \LaTeX{}, as well as those who have already coded with \LaTeX{},
+will be provided with a style file that will give the text the
+desired layout. Authors are requested to
+adhere strictly to these instructions; {\it the style
+file must not be changed}.
+
+The text output area is automatically set within an area of
+12.2\,cm horizontally and 19.4\,cm vertically, excluding
+running heads.
+
+If you are already familiar with \LaTeX{}, then the
+LMAMULT style file should not give you any major difficulties.
+This style file will change the layout to the required LMAMULT style
+(it will for instance define the layout of \verb|\section|).
+We had to invent some extra commands,
+which are not provided by \LaTeX{} (e.g.\
+\verb|\institute|, see also Sect.\,\ref{contbegin})
+
+For the main body of the paper (the text) you
+should use the commands of the standard \LaTeX{} ``article'' style.
+Even if you are familiar with those commands, we urge you to read
+this entire documentation thoroughly. It contains many suggestions on
+how to use our commands properly; thus your paper
+will be formatted exactly to LMAMULT standard.
+For the input of the references at the end of your contribution,
+please follow our instructions given in Sect.\,\ref{refer} References.
+
+The majority of these hints are not specific for LMAMULT; they may improve
+your use of \LaTeX{} in general.
+Furthermore, the documentation provides suggestions about the proper
+editing and use
+of the input files (capitalization, abbreviation etc.) (see
+Sect.\,\ref{refedit} How to Edit Your Input File).
+%
+\section{How to Proceed}
+%
+Please insert the enclosed diskette or tape into your computer. You will
+find the following files:
+\begin{flushleft}
+\begin{tabular}{@{}p{2.5cm}l}
+{\it lmamult.doc} & General instructions (this document),\\
+ & {\it lmamult.doc} means lmamult latex documentation\\
+{\it lmamult.dem} & An example showing how to code the text\\
+{\it lmamult.sty} & Style file to invoke \LaTeX{}
+\end{tabular}
+\end{flushleft}
+You have to run each file twice with: \verb|latex file.name|.
+%
+\subsection{How to Invoke the LMAMULT Style File}
+%
+The LMAMULT style file is an adaptation of the \LaTeX{} ``article'' style.
+Therefore you may use all ``article'' style commands to prepare your
+manuscript.
+LMAMULT style is invoked by replacing ``article'' by ``lmamult'' in the first
+line of your document:
+\begin{verbatim}
+\documentstyle{lmamult}
+%
+\begin{document}
+ <Your contribution>
+\end{document}
+\end{verbatim}
+%
+\subsection{Contributions Already Coded with \protect\LaTeX{} without
+the \protect\\ LMAMULT Style File}
+%
+If your file is already coded with \LaTeX{} you can easily
+adapt it a posteriori to LMAMULT style.
+
+Please refrain from using any \LaTeX{} or \TeX{} commands
+that affect the layout or formatting of your document (i.e. commands
+like \verb|\textheight|, \verb|\vspace|, \verb|\hoffset| etc.).
+There may nevertheless be exceptional occasions on which to
+use some of them.
+
+The LMAMULT style has been carefully designed to produce the right layout
+from your \LaTeX{} input. If there is anything specific you would like
+to do and for which the style file does not provide a command,
+{\em please contact us.\/}
+%
+\section{General Rules for Coding Formulas}
+%
+With mathematical formulas you may proceed as described
+in Sect.\,3.3 of the {\em \LaTeX{} User's Guide \& Reference
+Manual\/} by Leslie Lamport (1986), Addison-Wesley Publishing
+Company, Reading, Mass.
+
+Equations are automatically numbered sequentially throughout your
+contribution using arabic numerals in parentheses on the right-hand
+side.
+
+When you are working in math mode everything is typeset in italics.
+Sometimes you need to insert non-mathematical elements (e.g.\
+words or phrases). Such insertions should be coded in roman
+(with \verb|\mbox|) as illustrated in the following example:
+\begin{flushleft}
+{\it Sample Input}
+\end{flushleft}
+\begin{verbatim}
+\begin{equation}
+ \left(\frac{a^{2} + b^{2}}{c^{3}} \right) = 1 \quad
+ \mbox{ if } c\neq 0 \mbox{ and if } a,b,c\in \bbbr \enspace .
+\end{equation}
+\end{verbatim}
+{\it Sample Output}
+\begin{equation}
+ \left(\frac{a^{2} + b^{2}}{c^{3}} \right) = 1 \quad
+ \mbox{ if } c\neq 0 \mbox{ and if } a,b,c\in \bbbr \enspace .
+\end{equation}
+
+If you wish to start a new paragraph immediately after a displayed
+equation, insert a blank line so as to produce the required
+indentation. If there is no new paragraph either do not insert
+a blank line or code \verb|\noindent| immediately before
+continuing the text. Titles have no end punctuation.
+
+Please punctuate a displayed equation in the same way as other
+ordinary text but with an \verb|\enspace| before end punctuation.
+
+Note that the sizes of the parentheses or other delimiter
+symbols used in equations should ideally match the height of the
+formulas being enclosed. This is automatically taken care of by
+the following \LaTeX{} commands:\\[2mm]
+\verb|\left(| or \verb|\left[| and
+\verb|\right)| or \verb|\right]|.
+%
+\subsection{Italic and Roman Type in Math Mode}
+%
+\begin{alpherate}
+\item
+In math mode \TeX{} and \LaTeX{} treat all letters as though they
+were mathematical or physical variables, hence they are typeset in
+italics. However, for certain components of formulas, like short texts,
+this would be incorrect and therefore coding in roman is required.
+Roman should also be used for
+subscripts and superscripts {\it in formulas\/} where these are
+merely labels and not in themselves variables,
+e.g.\ $T_{\rm eff}$ \ not \ $T_{eff}$,
+$T_{\rm K}$ \ not \ $T_K$ (K = Kelvin),
+$m_{\rm e}$ \ not \ $m_e$ (e = electron).
+However, do not code for roman
+if the sub/superscripts represent variables,
+e.g.\ $\sum_{i=1}^{n} a_{i}$.
+\item
+Please ensure that {\em physical units\/} (e.g.\ pc, erg s$^{-1}$
+K, cm$^{-3}$, W m$^{-2}$ Hz$^{-1}$, m kg s$^{-2}$ A$^{-2}$) and
+{\it abbreviations} such as Ord, Var, GL, SL, sgn, const.\
+are always set in roman type. To ensure
+this use the \verb|\rm| command: \verb|{\rm Hz}|.
+On p.\ 46 of the {\em \LaTeX{} User's Guide \& Reference
+Manual\/} by Leslie Lamport you will find the names of
+common mathe\-matical functions, such as log, sin, exp, max and sup.
+These should be coded as \verb|\log|,
+\verb|\sin|, \verb|\exp|, \verb|\max|, \verb|\sup|
+and will appear in roman.
+\item
+Chemical symbols and formulas should be coded for roman,
+e.g.\ Fe not $Fe$, H$_2$O not {\em H$_2$O\/}.
+\item
+Familiar foreign words and phrases, e.g.\ et al.,
+a priori, in situ, brems\-strah\-lung, eigenvalues should not be
+italicized.
+\end{alpherate}
+%
+\section{How to Edit Your Input (Source) File}
+\label{refedit}
+%
+\subsection{Headings}
+%
+All words in headings should be capitalized except for
+conjunctions, prepositions
+(e.g.\ on, of, by, and, or, but, from, with, without, under)
+and definite and indefinite articles (the, a, an) unless they appear at
+the beginning. Formula letters must be typeset as in the text.
+%
+\subsection{Capitalization and Non-capitalization}
+%
+\begin{alpherate}
+\item
+The following should always be capitalized:
+\begin{itemize}
+\item
+Headings (see preceding Sect.\,4.1)
+\item
+Abbreviations and expressions
+in the text such as Fig(s)., Table(s), Sect(s)., Chap(s).,
+Theorem, Corollary, Definition etc. when used with numbers, e.g.\
+Fig.\,3, Table\,1, Theorem 2.
+\end{itemize}
+Please follow the special rules in Sect.\,4.3 for referring to
+equations.
+\item
+The following should {\it not\/} be capitalized:
+\begin{itemize}
+\item
+The words figure(s), table(s), equation(s),
+theorem(s) in the text when used without an accompanying number
+\item
+Figure legends and table captions except for names and
+abbreviations.
+\end{itemize}
+\end{alpherate}
+%
+\subsection{Abbreviation of Words}
+%
+\begin{alpherate}
+\item
+The following {\it should} be abbreviated when they appear in running
+text {\it unless\/} they come at the beginning of a sentence: Chap.,
+Sect., Fig.; e.g.\ The results are depicted in Fig.\,5. Figure 9 reveals
+that \dots .\\
+{\it Please note\/}: Equations should usually be referred to solely by
+their number in parentheses: e.g.\ (14). However, when the reference
+comes at the beginning of a sentence, the unabbreviated word
+``Equation'' should be used: e.g.\ Equation (14) is very important.
+However, (15) makes it clear that \dots .
+\item
+If abbreviations of names or concepts are used
+throughout the text, they should be defined at first occurrence,
+e.g.\ Plurisubharmonic (PSH) Functions, Strong Optimization (SOPT)
+Problem.
+\end{alpherate}
+%
+\section{How to Code the Beginning of Your Contribution}
+\label{contbegin}
+%
+The title of your contribution should be coded as follows:
+\begin{verbatim}
+\title{<Your contribution title>}
+\end{verbatim}
+All words in titles should be capitalized except for
+conjunctions, prepositions
+(e.g.\ on, of, by, and, or, but, from, with, without, under)
+and definite and indefinite articles (the, a, an) unless they appear at
+the beginning. Formula letters must be typeset as in the text.
+Titles have no end punctuation.
+
+If a long \verb|\title| must be divided please use the
+code \verb|\\| (for new line).\\[6mm]
+Now the name(s) of the authors(s) must be given:
+\begin{verbatim}
+\author{<author(s) name(s)>}
+\end{verbatim}
+Numbers referring to different addresses are
+to be attached to each author.
+If you have done this correctly, the entry now reads, for example:
+\begin{verbatim}
+\author{Ivar Ekeland\inst{1} and Roger Temam\inst{2}}
+\end{verbatim}
+The first name\footnote{Other initials are optional
+and may be inserted if this is the usual
+way of writing your name, e.g.\ Alfred J.~Holmes, E.~Henry Green.}
+is followed by the surname.
+
+If there is more than one author, the order is up to you.
+However, if there are more than two authors, you must separate the names
+by commas. If the authors have different affiliations,
+each name has to be followed by:
+\begin{verbatim}
+\inst{no}
+\end{verbatim}
+\newpage
+Next the address(es) of institute(s), company etc. is (are) required.
+If there is more than one address, the entries are numbered
+automatically with \verb|\and|, in the order in which you type them.
+Please make sure that the numbers match those placed next to
+to the authors' names.
+\begin{verbatim}
+\institute{<name of an institute>
+\and <name of the next institute>
+\and <name of the next institute>}
+\end{verbatim}
+Unlike usual \LaTeX{} the \verb|\and| command is used with the
+\verb|\institute| and not with the \verb|\author| command.
+
+\medskip
+If footnotes are needed in \verb|\title| please code
+(immediately after the word where the footnote
+indicator should be placed):
+\begin{verbatim}
+\thanks{<text>}
+\end{verbatim}
+\verb|\thanks| may only appear in \verb|\title|, \verb|\author|
+and \verb|\institute| (see below) to footnote anything.
+
+\medskip\noindent
+The command
+\begin{verbatim}
+\maketitle
+\end{verbatim}
+formats the complete heading of your article. If you leave
+it out the work done so far will produce {\bf no} text,
+see {\it Sample Input} on p.~\pageref{samppage}.
+%
+\section{How to Code Your Text}
+%
+The contribution title and all headings should be capitalized
+except for conjunctions, prepositions
+(e.g.\ on, of, by, and, or, but, from, with, without, under)
+and definite and indefinite articles (the, a, an) unless they appear at
+the beginning. Formula letters must be typeset as in the text.
+
+Headings will be automatically numbered by the following codes.\\[2mm]
+{\it Sample Input}
+\begin{verbatim}
+\section{This is a First-Order Title}
+\subsection{This is a Second-Order Title}
+\subsubsection{This is a Third-Order Title.}
+\paragraph{This is a Fourth-Order Title.}
+\end{verbatim}
+\verb|\section| and \verb|\subsection| have no end punctuation.\\
+\verb|\subsubsection| and \verb|\paragraph|
+need to be punctuated at the end.
+
+Note that \verb|\title| and \verb|\author| will create the page
+header (running head), but it may happen that you need to shorten your
+title for the page header, because only one line is allowed (our macro
+will produce an error message whereupon you must provide a shortened
+version of the title for the page header). In this case you should use
+the following coding directly after the coding of \verb|\title|
+or \verb|\author|.
+\begin{verbatim}
+\titlerunning{Abbreviated contribution title}
+\authorrunning{Abbreviated authors}
+\end{verbatim}
+\newpage
+In addition to the above-mentioned headings your text may be structured
+by subsections indicated by run-in headings (theorem-like environments).
+All the theorem-like environments are numbered automatically
+throughout the sections of your file.
+If you call lemma once, this will be numbered 1; if corollary follows,
+this will be numbered 2; if you then call lemma again, this will be
+numbered 3.
+
+But in case you want to reset this counter at 1 in each section,
+please give the document style option \verb|envcountreset|:
+\begin{verbatim}
+\documentstyle[envcountreset]{lmamult}
+\end{verbatim}
+
+\vspace{.5cm}\noindent
+The following possibilities for run-in headings are available:
+\begin{flushleft}
+\verb|\begin{lemma} Text of the lemma \end{lemma}|\quad (see Output
+Sample 1)\\[2mm]
+%
+\verb|\begin{lemma}[additional explanation of lemma] Text of
+lemma \end{lemma}| \quad (see Output Sample 2)\\[2mm]
+%
+\verb|\begin{lemma}(overriding automatic numbering.) Text of the lemma
+\end{lemma}| \quad (see Output Sample 3)\\[2mm]
+%
+\verb|\begin{lemma}(x)[additional explanation of lemma] Text of
+lemma\end{lemma}| \quad (see Output Sample 4)\\[2mm]
+%
+\verb|\begin{lemma}* Text of lemma \end{lemma}| \quad (see Output
+Sample 5)\\[2mm]
+%
+\verb|\begin{lemma}*[additional explanation of lemma] Text of
+lemma\end{lemma}| \quad (see Output Sample 6)
+\end{flushleft}
+%
+\begin{flushleft}
+{\it Output Sample 1}
+\begin{lemma}Text of lemma\end{lemma}
+%
+{\it Output Sample 2}
+\begin{lemma}[additional explanation of lemma] Text of lemma\end{lemma}
+%
+{\it Output Sample 3}
+\begin{lemma}(overriding automatic numbering.) Text of lemma\end{lemma}
+%
+{\it Output Sample 4}
+\begin{lemma}(x)[additional explanation of lemma] Text of
+lemma\end{lemma}
+%
+{\it Output Sample 5}
+\begin{lemma}* Text of lemma\end{lemma}
+%
+{\it Output Sample 6}
+\begin{lemma}*[additional explanation of lemma] Text of lemma\end{lemma}
+\end{flushleft}
+\newpage
+\noindent
+The following variety of run-in headings are at your disposal:
+\begin{alpherate}
+\item
+{\bf Bold} run-in headings with italicized text
+as built-in environments:
+\begin{verbatim}
+\begin{proposition} <text> \end{proposition}
+\begin{corollary} <text> \end{corollary}
+\begin{lemma} <text> \end{lemma}
+\begin{theorem} <text> \end{theorem}
+\end{verbatim}
+\item
+The following must generally appear as {\it italic} run-in heading:
+\begin{verbatim}
+\begin{proof} <text> \qed \end{proof}
+\end{verbatim}
+\item
+Further {\it italic} or {\bf bold} run-in headings may also occur:
+\begin{verbatim}
+\begin{definition} <text> \end{definition}
+\begin{example} <text> \end{example}
+\begin{remark} <text> \end{remark}
+\begin{exercise} <text> \end{exercise}
+\begin{problem} <text> \end{problem}
+\begin{solution} <text> \end{solution}
+\begin{note} <text> \end{note}
+\begin{question} <text> \end{question}
+\end{verbatim}
+\end{alpherate}
+%
+\subsubsection*{Defining Your Own Environments.}
+%
+You can define additional environments using the command
+\verb|\newstytheorem| which has five parameters. The first is the name
+your environment should have (e.g.\ \verb|conjecture|).
+After this follows the
+font family used for this heading (please use only \verb|\bf| for bold
+or \verb|\it| for italic) and the font family to use for the text of
+this new environment (e.g.\ \verb|\it| or \verb|\rm|). Then the name of
+an already known environment should be given in brackets (e.g.\
+\verb|[theorem]|). Your new environment will be numbered like the old
+one. Finally comes the real text of the new run-in heading (e.g.\
+\verb|Conjecture|).\\
+Sample definition:
+\begin{verbatim}
+\newstytheorem{conjecture}{\bf}{\it}[theorem]{Conjecture}
+\end{verbatim}
+\newstytheorem{conjecture}{\bf}{\it}[theorem]{Conjecture}
+Use of that definition:
+\begin{verbatim}
+\begin{conjecture} <text> \end{conjecture}
+\end{verbatim}
+e.g.
+\begin{verbatim}
+\begin{conjecture} It is clear that ...\end{conjecture}
+\end{verbatim}
+Its output:
+\begin{conjecture}
+It is clear that \dots
+\end{conjecture}
+\newpage
+%
+\noindent
+{\it Sample Input}
+\label{samppage}
+\begin{verbatim}
+\title{Hamiltonian Mechanics}
+
+\author{Ivar Ekeland\inst{1} and Roger Temam\inst{2}}
+
+\institute{Princeton University, Princeton NJ 08544, USA
+\and
+Universit\'{e} de Paris-Sud,
+Laboratoire d'Analyse Num\'{e}rique, B\^{a}timent 425,\\
+F-91405 Orsay Cedex, France}
+
+\maketitle
+%
+\section{Fixed-Period Problems: The Sublinear Case}
+%
+With this chapter, the preliminaries are over, and we begin the
+search for periodic solutions \dots
+%
+\subsection{Autonomous Systems}
+%
+In this section we will consider the case when the Hamiltonian
+$H(x)$ \dots
+%
+\subsubsection*{The General Case: Nontriviality.}
+%
+We assume that $H$ is
+$\left(A_{\infty}, B_{\infty}\right)$-subqua\-dra\-tic
+at infinity, for some constant \dots
+%
+\paragraph{Notes and Comments.}
+The first results on subharmonics were \dots
+%
+\begin{proposition}
+Assume $H'(0)=0$ and $ H(0)=0$. Set \dots
+\end{proposition}
+\begin{proof}[of proposition]
+Condition (8) means that, for every $\delta'>\delta$, there is
+some $\varepsilon>0$ such that \dots \qed
+\end{proof}
+%
+\begin{example}[\rm (External forcing)]
+Consider the system \dots
+\end{example}
+\begin{corollary}
+Assume $H$ is $C^{2}$ and
+$\left(a_{\infty}, b_{\infty}\right)$-subquadratic
+at infinity. Let \dots
+\end{corollary}
+\begin{lemma}
+Assume that $H$ is $C^{2}$ on $\bbbr^{2n}\backslash \{0\}$
+and that $H''(x)$ is \dots
+\end{lemma}
+\begin{theorem}[(Ghoussoub-Preiss)]
+Let $X$ be a Banach Space and $\Phi:X\to\bbbr$ \dots
+\end{theorem}
+\begin{definition}
+We shall say that a $C^{1}$ function $\Phi:X\to\bbbr$
+satisfies \dots
+\end{definition}
+\end{verbatim}
+{\it Sample Output\/} (follows on the next page together with
+examples of the above run-in headings)
+%
+\title{Hamiltonian Mechanics}
+
+\author{Ivar Ekeland\inst{1} and Roger Temam\inst{2}}
+
+\institute{Princeton University, Princeton NJ 08544, USA
+\and
+Universit\'{e} de Paris-Sud,
+Laboratoire d'Analyse Num\'{e}rique, B\^{a}timent 425,\\
+F-91405 Orsay Cedex, France}
+
+\maketitle
+%
+\section*{1 \ Fixed-Period Problems: The Sublinear Case}
+%
+With this chapter, the preliminaries are over, and we begin the search
+for periodic solutions \dots
+%
+\subsection*{1.1 \ Autonomous Systems}
+%
+In this section we will consider the case when the Hamiltonian
+$H(x)$ \dots
+%
+\subsubsection*{The General Case: Nontriviality.}
+%
+We assume that $H$ is
+$\left(A_{\infty}, B_{\infty}\right)$-subqua\-dra\-tic at
+infinity, for some constant \dots
+%
+\paragraph{Notes and Comments.}
+The first results on subharmonics were \dots
+%
+\begin{proposition}
+Assume $H'(0)=0$ and $ H(0)=0$. Set \dots
+\end{proposition}
+\begin{proof}[of proposition]
+Condition (8) means that, for every $\delta'>\delta$, there is
+some $\varepsilon>0$ such that \dots \qed
+\end{proof}
+%
+\begin{example}[\rm (External forcing)]
+Consider the system \dots
+\end{example}
+\begin{corollary}
+Assume $H$ is $C^{2}$ and
+$\left(a_{\infty}, b_{\infty}\right)$-subquadratic
+at infinity. Let \dots
+\end{corollary}
+\begin{lemma}
+Assume that $H$ is $C^{2}$ on $\bbbr^{2n}\backslash \{0\}$
+and that $H''(x)$ is \dots
+\end{lemma}
+\begin{theorem}[(Ghoussoub-Preiss)]
+Let $X$ be a Banach Space and $\Phi:X\to\bbbr$ \dots
+\end{theorem}
+\begin{definition}
+We shall say that a $C^{1}$ function $\Phi:X\to\bbbr$ satisfies \dots
+\end{definition}
+\newpage
+%
+\section{Fine Tuning of the Text}
+%
+The following should be used to improve the readability of the text:
+\begin{flushleft}
+\begin{tabular}{@{}p{.19\textwidth}p{.79\textwidth}}
+\verb|\,| & a thin space, e.g.\ between numbers or between units
+ and num\-bers; a line division will not be made
+ following this space\\
+\verb|--| & en dash; two strokes, without a space at either end\\
+\verb*| -- |& en dash; two strokes, with a space at either end\\
+\verb|-| & hyphen; one stroke, no space at either end\\
+\verb|$-$| & minus, in the text {\em only} \\[8mm]
+{\em Input} & \verb|21\,$^{\circ}$C etc.,|\\
+ & \verb|Dr h.\,c.\,Rockefellar-Smith \dots|\\
+ & \verb|20,000\,km and Prof.\,Dr Mallory \dots|\\
+ & \verb|1950--1985 \dots|\\
+ & \verb|this -- written on a computer -- is now printed|\\
+ & \verb|$-30$\,K \dots|\\[3mm]
+{\em Output}& 21\,$^{\circ}$C etc., Dr h.\,c.\,Rockefellar-Smith \dots\\
+ & 20,000\,km and Prof.\,Dr Mallory \dots\\
+ & 1950--1985 \dots\\
+ & this -- written on a computer -- is now printed\\
+ & $-30$\,K \dots
+\end{tabular}
+\end{flushleft}
+%
+\section {Special Typefaces}
+%
+Normal type (roman) need not be coded. {\it Italic}
+(not {\sl slanted}) or, if necessary, {\bf boldface}
+should be used for emphasis in the text.
+\begin{flushleft}
+\begin{tabular}{@{}p{.19\textwidth}p{.79\textwidth}}
+\verb|{\it Text}| & {\it Italicized Text}\\
+\verb|{\em Text}| & {\em Emphasized Text}\\
+ & {\it If you would like to emphasize a {\em definition} within an
+ italicized text (e.g.\ of a {\em theorem)} you should code the
+ expression to be emphasized by} \verb|\em|.\\
+\verb|{\bf Text}| & {\bf Important Text}\\
+\verb|\vec{Symbol}| & Vectors may only appear in math mode. The default
+ \LaTeX{} vector symbol has been adapted to LMAMULT conventions.\\
+ & \verb|$\vec{A times B\cdot C}| yields $\vec{A\times B\cdot C}$\\
+ & \verb|$\vec{A}^{T} \otimes \vec{B} \otimes \vec{\hat{D}}$|\\
+ & yields $\vec{A}^{T} \otimes \vec{B} \otimes \vec{\hat{D}}$
+\end{tabular}
+\end{flushleft}
+\newpage
+%
+\section {Footnotes}
+%
+Footnotes within the text should be coded:
+\begin{verbatim}
+\footnote{Text}
+\end{verbatim}
+{\it Sample Input}
+\begin{flushleft}
+Text with a footnote\verb|\footnote{The footnote is automatically
+numbered.}| and text continues \dots
+\end{flushleft}
+{\it Sample Output}
+\begin{flushleft}
+Text with a footnote\footnote{The footnote is automatically numbered.}
+and text continues \dots
+\end{flushleft}
+%
+\section {Lists}
+%
+Please code lists as described below:\\[2mm]
+{\it Sample Input}
+\begin{verbatim}
+\begin{enumerate}
+ \item First item
+ \item Second item
+ \begin{enumerate}
+ \item First nested item
+ \item Second nested item
+ \end{enumerate}
+ \item Third item
+\end{enumerate}
+\end{verbatim}
+{\it Sample Output}
+ \begin{enumerate}
+\item First item
+\item Second item
+ \begin{enumerate}
+ \item First nested item
+ \item Second nested item
+ \end{enumerate}
+\item Third item
+\end{enumerate}
+\newpage
+%
+\section {Figures}
+%
+Figure legends should be inserted after (not in)
+the paragraph in which the figure is first mentioned.
+They will be numbered automatically.
+
+{\it The figures\/} (line drawings and those containing halftone inserts
+as well as halftone figures) {\it should not be pasted into your
+laserprinter output}. They should be enclosed separately in camera-ready
+form (original artwork, glossy prints, photographs and/or slides). The
+lettering should be suitable for reproduction, and after reduction the
+height of capital letters should be at least
+1.8\,mm and not more than 2.5\,mm.
+Check that lines and other details are uniformly black and
+that the lettering on figures is clearly legible.
+
+To leave the desired amount of space for the height of
+your figures, please use the coding described below.
+As can be seen in the output, we will automatically
+provide 1\,cm space above and below the figure,
+so that you should only leave the space equivalent to the size of the
+figure itself. Please note that ``\verb|x|'' in the following
+coding stands for the actual height of the figure:
+\begin{verbatim}
+\begin{figure}
+\vspace{x cm}
+\caption[ ]{...text of caption...} (Do type [ ])
+\end{figure}
+\end{verbatim}
+\begin{flushleft}
+{\it Sample Input}
+\end{flushleft}
+\begin{verbatim}
+\begin{figure}
+\vspace{2.5cm}
+\caption{This is the caption of the figure displaying a white
+eagle and a white horse on a snow field}
+\end{figure}
+\end{verbatim}
+\begin{flushleft}
+{\it Sample Output}
+\end{flushleft}
+\begin{figure}
+\vspace{2.5cm}
+\caption{This is the caption of the figure displaying a white eagle and
+a white horse on a snow field}
+\end{figure}
+%
+\section{Tables}
+%
+Table captions should be treated
+in the same way as figure legends, except that
+the table captions appear {\it above} the tables. The tables
+will be numbered automatically.
+%
+\subsection{Tables Coded with \protect\LaTeX{}}
+%
+Please use the following coding:\\[2mm]
+{\it Sample Input}
+\begin{verbatim}
+\begin{table}
+\caption{This is the example table taken out of {\it The
+\TeX{}book,} p.\,246}
+\vspace{2pt}
+\begin{tabular}{r@{\quad}rl}
+\hline
+\multicolumn{1}{l}{\rule{0pt}{12pt}
+ Year}&\multicolumn{2}{l}{World population}\\[2pt]
+\hline\rule{0pt}{12pt}
+8000 B.C. & 5,000,000& \\
+ 50 A.D. & 200,000,000& \\
+1650 A.D. & 500,000,000& \\
+1945 A.D. & 2,300,000,000& \\
+1980 A.D. & 4,400,000,000& \\[2pt]
+\hline
+\end{tabular}
+\end{table}
+
+Before continuing your text you need an empty line. \dots
+\end{verbatim}
+{\it Sample Output}
+\begin{table}
+\caption{This is the example table taken out of {\it The
+\TeX{}book,} p.\,246}
+\vspace{2pt}
+\begin{tabular}{r@{\quad}rl}
+\hline
+\multicolumn{1}{l}{\rule{0pt}{12pt}
+ Year}&\multicolumn{2}{l}{World population}\\[2pt]
+\hline\rule{0pt}{12pt}
+8000 B.C. & 5,000,000& \\
+ 50 A.D. & 200,000,000& \\
+1650 A.D. & 500,000,000& \\
+1945 A.D. & 2,300,000,000& \\
+1980 A.D. & 4,400,000,000& \\[2pt]
+\hline
+\end{tabular}
+\end{table}
+
+Before continuing your text you need an empty line. \dots
+
+\vspace{3mm}
+For further information you will find a complete description of
+the tabular environment
+on p.~63~ff. and p.~182 of the {\em \LaTeX{} User's Guide \& Reference
+Manual\/} by Leslie Lamport.
+%
+\subsection{Tables Not Coded with \protect\LaTeX{}}
+%
+If you do not wish to code your table using \LaTeX{}
+but prefer to have it reproduced separately,
+proceed as for figures and use the following coding:\\[2mm]
+{\it Sample Input}
+\begin{verbatim}
+\begin{table}
+\caption{text of your caption}
+\vspace{x cm} % the actual height needed for your table
+\end{table}
+\end{verbatim}
+%
+\subsection{Signs and Characters}
+%
+\subsubsection*{Special Signs.}
+%
+You may need to use special signs. The available ones are listed in the
+{\em \LaTeX{} User's Guide \& Reference Manual\/} by Leslie Lamport,
+pp.~44\,ff.
+We have created further symbols for math mode (enclosed in \$):
+\begin{center}
+\begin{tabular}{l@{\hspace{1em}yields\hspace{1em}}
+c@{\hspace{3em}}l@{\hspace{1em}yields\hspace{1em}}c}
+\verb|\grole| & $\grole$ & \verb|\getsto| & $\getsto$\\
+\verb|\lid| & $\lid$ & \verb|\gid| & $\gid$
+\end{tabular}
+\end{center}
+%
+\subsubsection*{Gothic (Fraktur).}
+%
+If gothic letters are {\it necessary}, please use those of the
+relevant \AmSTeX{} alphabet which are available from the
+American Mathematical Society.
+
+In \LaTeX{} only the following gothic letters are available:
+\verb|$\Re$| yields $\Re$ and \verb|$\Im$| yields $\Im$. These should
+{\it not\/} be used when you need gothic letters for your contribution.
+Use \AmSTeX{} gothic as explained above. For the real and the imaginary
+parts of a complex number within math mode you should use instead:
+\verb|$\rm Re$| (which yields Re) or \verb|$\rm Im$| (which yields Im).
+%
+\subsubsection*{Script.}
+%
+For script capitals use the coding
+\begin{center}
+\begin{tabular}{l@{\hspace{1em}which yields\hspace{1em}}c}
+\verb|$\cal AB$| & $\cal AB$
+\end{tabular}
+\end{center}
+(see p.~43 of the \LaTeX{} book).
+%
+\subsubsection*{Special Roman.}
+%
+If you need other symbols than those below, you could use
+the blackboard bold characters of \AmSTeX{}, but there might arise
+capacity problems
+in loading additional \AmSTeX{} fonts. Therefore we created
+the blackboard bold characters listed below.
+Some of them are not esthetically
+satisfactory. This need not deter you from using them:
+in the final printed form they will be
+replaced by the well-designed MT (monotype) characters of
+the phototypesetting machine.
+\begin{flushleft}
+\begin{tabular}{@{}ll@{ yields }
+c@{\hspace{1.1em}}ll@{ yields }c}
+\verb|\bbbc| & (complex numbers) & $\bbbc$
+ & \verb|\bbbf| & (blackboard bold F) & $\bbbf$\\
+\verb|\bbbh| & (blackboard bold H) & $\bbbh$
+ & \verb|\bbbk| & (blackboard bold K) & $\bbbk$\\
+\verb|\bbbm| & (blackboard bold M) & $\bbbm$
+ & \verb|\bbbn| & (natural numbers N) & $\bbbn$\\
+\verb|\bbbp| & (blackboard bold P) & $\bbbp$
+ & \verb|\bbbq| & (rational numbers) & $\bbbq$\\
+\verb|\bbbr| & (real numbers) & $\bbbr$
+ & \verb|\bbbs| & (blackboard bold S) & $\bbbs$\\
+\verb|\bbbt| & (blackboard bold T) & $\bbbt$
+ & \verb|\bbbz| & (whole numbers) & $\bbbz$\\
+\verb|\bbbone| & (symbol one) & $\bbbone$
+\end{tabular}
+\end{flushleft}
+\begin{displaymath}
+\begin{array}{c}
+\bbbc^{\bbbc^{\bbbc}} \otimes
+\bbbf_{\bbbf_{\bbbf}} \otimes
+\bbbh_{\bbbh_{\bbbh}} \otimes
+\bbbk_{\bbbk_{\bbbk}} \otimes
+\bbbm^{\bbbm^{\bbbm}} \otimes
+\bbbn_{\bbbn_{\bbbn}} \otimes
+\bbbp^{\bbbp^{\bbbp}}\\[2mm]
+\otimes
+\bbbq_{\bbbq_{\bbbq}} \otimes
+\bbbr^{\bbbr^{\bbbr}} \otimes
+\bbbs^{\bbbs_{\bbbs}} \otimes
+\bbbt^{\bbbt^{\bbbt}} \otimes
+\bbbz \otimes
+\bbbone^{\bbbone_{\bbbone}}
+\end{array}
+\end{displaymath}
+%
+\subsubsection*{Sans Serif.}
+%
+Using our macros you can also choose this font family;
+use the command \verb|\sf| for {\sf sans serif}
+(like \verb|\it| for {\it italic style}).
+%
+\section{References}
+\label{refer}
+%
+There are three reference systems available; only one, of course,
+should be used for your contribution. With each system (by author-year,
+by number only or by letter-number) a reference list
+containing all citations in the
+text, should be included at the end of your contribution placing the
+\LaTeX{} environment \verb|thebibliography| there.
+For an overall information on that environment
+see the {\em \LaTeX{} User's Guide \& Reference
+Manual\/} by Leslie Lamport, p.~73.
+%
+\subsection{Author-Year System}
+%
+References are cited in the text by name and year in parentheses
+and should look as follows:
+(Smith 1970, 1980), (Ekeland et al. 1985, Theorem 2), (Jones and Jaffe
+1986; Farrow 1988, Chap.\,2). If the name is part of the sentence
+only the year may appear in parentheses,
+e.g.\ Ekeland et al. (1985, Sect.\,2.1)
+The reference list should contain all citations occurring in the text,
+ordered alphabetically by surname (with initials following). If there
+are several works by the same author(s) the references should be listed
+in the appropriate order indicated below:
+\begin{alpherate}
+\item
+One author: list works chronologically;
+\item
+Author and same co-author(s): list works chronologically;
+\item
+Author and different co-authors: list works alphabetically
+according to co-authors.
+\end{alpherate}
+If there are several works by the same author(s) and in the same year,
+but which are cited separately, they should be distinguished by the use
+of ``a'', ``b'' etc., e.g.\ (Smith 1982a), (Ekeland et al. 1982b).
+%
+\subsubsection*{How to Code Author-Year System.}
+%
+If you want to use this system you have to specify in
+\verb|documentstyle| the option \verb|[citeauthoryear]|, like:
+\begin{verbatim}
+\documentstyle[citeauthoryear]{lmamult}
+\end{verbatim}
+Write your citations in the text explicitly except for the year, leaving
+that up to \LaTeX{} with the \verb|\cite| command. Then give only the
+appropriate year as the optional argument (i.e. the label in square
+brackets) with the \verb|\bibitem| command(s).\\[2mm]
+{\it Sample Input}
+\begin{verbatim}
+The results in this section are a refined version
+of Clarke and Ekeland (\cite{clar:eke}); the minimality result of
+Proposition~14 was the first of its kind.
+\end{verbatim}
+The above input produces the citation: ``\dots\ refined version of
+Clarke and Ekeland (1982); the minimality\dots''. Then the
+\verb|\bibitem|
+entry of the \verb|thebibliography| environment should read:
+\begin{verbatim}
+\begin{thebibliography}{} % (do not forget {})
+.
+.
+\bibitem[1982]{clar:eke}
+Clarke, F., Ekeland, I.:
+Nonlinear oscillations and boundary-value problems for
+Hamiltonian systems.
+Arch. Rat. Mech. Anal. {\bf 78} (1982) 315--333
+.
+.
+\end{thebibliography}
+\end{verbatim}
+{\it Sample Output}
+\bibauthoryear
+%
+\subsection{References by Letter-Number or by Number Only}
+%
+References are cited in the text -- using the \verb|\cite|
+command of \LaTeX{} -- by number or by letter-number in square
+brackets, e.g.\ [1] or [E1, S2], [P1], according to your use of the
+\verb|\bibitem| command in the \verb|thebibliography| environment. The
+coding is as follows: if you choose your own label for the sources by
+giving an optional argument to the \verb|\bibitem| command the citations
+in the text are marked with the label you supplied. Otherwise a simple
+numbering is done.
+\begin{verbatim}
+The results in this section are a refined version
+of \cite{clar:eke}; the minimality result of Proposition~14
+was the first of its kind.
+\end{verbatim}
+The above input produces the citation: ``\dots\ refined version of
+[CE1]; the min\-i\-mality\dots''. Then the \verb|\bibitem| entry of
+the \verb|thebibliography| environment should read:
+\begin{verbatim}
+\begin{thebibliography}{MT1}
+.
+.
+\bibitem[CE1]{clar:eke}
+Clarke, F., Ekeland, I.:
+Nonlinear oscillations and boundary-value problems for
+Hamiltonian systems.
+Arch. Rat. Mech. Anal. {\bf 78} (1982) 315--333
+.
+.
+\end{thebibliography}
+\end{verbatim}
+The complete bibliography looks like this:
+%
+\begin{thebibliography}{MT1}
+%
+\bibitem[CE1]{clar:eke}
+Clarke, F., Ekeland, I.:
+Nonlinear oscillations and
+boundary-value problems for Hamiltonian systems.
+Arch. Rat. Mech. Anal. {\bf 78} (1982) 315--333
+%
+\bibitem[CE2]{clar:eke:2}
+Clarke, F., Ekeland, I.:
+Solutions p\'{e}riodiques, du
+p\'{e}riode donn\'{e}e, des \'{e}quations hamiltoniennes.
+Note CRAS Paris {\bf 287} (1978) 1013--1015
+%
+\bibitem[MT1]{mich:tar}
+Michalek, R., Tarantello, G.:
+Subharmonic solutions with prescribed minimal
+period for nonautonomous Hamiltonian systems.
+J. Diff. Eq. {\bf 72} (1988) 28--55
+%
+\bibitem[Ta1]{tar}
+Tarantello, G.:
+Subharmonic solutions for Hamiltonian
+systems via a $\bbbz_{p}$ pseudoindex theory.
+Annali di Matematica Pura (to appear)
+%
+\bibitem[Ra1]{rab}
+Rabinowitz, P.:
+On subharmonic solutions of a Hamiltonian system.
+Comm. Pure Appl. Math. {\bf 33} (1980) 609--633
+\end{thebibliography}
+%
+\subsubsection*{Number-Only System.}
+%
+For this system do not use the optional argument
+in the \verb|\bibitem| command: then, only numbers will
+appear for the citations in the text (enclosed in square brackets)
+as well as for the marks in your
+bibliography (here the number is only end-punctuated without
+square brackets).
+\begin{verbatim}
+\begin{thebibliography}{1}
+\bibitem[CE1]{clar:eke}
+Clarke, F., Ekeland, I.:
+Nonlinear oscillations and boundary-value problems for
+Hamiltonian systems.
+Arch. Rat. Mech. Anal. {\bf 78} (1982) 315--333
+\end{thebibliography}
+\end{verbatim}
+%
+\end{document}
diff --git a/obsolete/macros/latex209/contrib/springer/lmamult/lmamult.sty b/obsolete/macros/latex209/contrib/springer/lmamult/lmamult.sty
new file mode 100644
index 0000000000..8c8ea68db1
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/lmamult/lmamult.sty
@@ -0,0 +1,775 @@
+% LMAMULT DOCUMENT STYLE -- Released 29 December 1989
+% for LaTeX version 2.09
+
+% This style file is an adaptation of
+% the original LaTeX article.sty, by:
+% Frank Holzwarth, Springer-Verlag Heidelberg,
+% Tiergartenstrasse 17, D-6900 Heidelberg.
+
+\typeout{Document Style `lmamult' <29 Dec 89>.}
+
+\frenchspacing
+\def~{\penalty\@M\kern3pt}
+
+\def\thebibliography#1{\section*{References}\small\list
+ {\arabic{enumi}.}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus -.07em}
+ \sloppy
+ \sfcode`\.=1000\relax}
+
+\def\ds@citeauthoryear{\def\thebibliography##1{\section*{References}%
+ \small\list{}{\settowidth\labelwidth{}\leftmargin\parindent
+ \itemindent=-\parindent
+ \labelsep=\z@
+ \usecounter{enumi}}%
+ \def\newblock{\hskip .11em plus .33em minus -.07em}%
+ \sloppy
+ \sfcode`\.=1000\relax}%
+ \def\@cite##1{##1}%
+ \def\@lbibitem[##1]##2{\item[]\if@filesw
+ {\def\protect####1{\string ####1\space}\immediate
+ \write\@auxout{\string\bibcite{##2}{##1}}}\fi\ignorespaces}}%
+
+\newif\if@envcountreset\@envcountresetfalse
+\def\ds@envcountreset{\@envcountresettrue}
+
+\def\@mbi{cmmib10}
+\def\@ptsize{0} \@namedef{ds@11pt}{\def\@ptsize{1}}
+\@namedef{ds@12pt}{\def\@ptsize{2}}
+\def\ds@twoside{\@twosidetrue \@mparswitchtrue}
+\def\ds@draft{\overfullrule
+5pt}
+\@options
+
+\ds@twoside
+
+\lineskip 1pt \normallineskip 1pt
+\def\baselinestretch{1}
+
+\def\@normalsize{\@setsize\normalsize{12pt}\xpt\@xpt
+\abovedisplayskip=3 mm plus6pt minus 4pt
+\belowdisplayskip=3 mm plus6pt minus 4pt
+\abovedisplayshortskip=0mm plus6pt minus 2pt
+\belowdisplayshortskip=2 mm plus4pt minus 4pt}
+
+\mathchardef\Gamma="0100
+\mathchardef\Delta="0101
+\mathchardef\Theta="0102
+\mathchardef\Lambda="0103
+\mathchardef\Xi="0104
+\mathchardef\Pi="0105
+\mathchardef\Sigma="0106
+\mathchardef\Upsilon="0107
+\mathchardef\Phi="0108
+\mathchardef\Psi="0109
+\mathchardef\Omega="010A
+
+\def\small{\@setsize\small{11pt}\ixpt\@ixpt
+\abovedisplayskip=2.5 mm plus5pt minus 3pt
+\belowdisplayskip=2.5 mm plus5pt minus 3pt
+\abovedisplayshortskip=0mm plus6pt minus 2pt
+\belowdisplayshortskip=2 mm plus4pt minus 4pt
+\def\@listi{\topsep 4pt plus 2pt minus 2pt}}
+
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt
+\abovedisplayskip=2.5 mm plus5pt minus 3pt
+\belowdisplayskip=2.5 mm plus5pt minus 3pt
+\abovedisplayshortskip=0mm plus6pt minus 2pt
+\belowdisplayshortskip=2 mm plus4pt minus 4pt
+\def\@listi{\topsep 4pt plus 2pt minus 2pt}}
+
+\def\scriptsize{\@setsize\scriptsize{8.4pt}\viipt\@viipt}
+
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{13.2pt}\xipt\@xipt}
+\def\Large{\@setsize\Large{14.4pt}\xiipt\@xiipt}
+\def\LARGE{\@setsize\LARGE{16.8pt}\xivpt\@xivpt}
+\def\huge{\@setsize\huge{22pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\@normalsize
+
+\if@twoside
+ \oddsidemargin 44pt
+ \evensidemargin 82pt
+ \marginparwidth 107pt
+\else \oddsidemargin 63pt \evensidemargin 63pt
+ \marginparwidth 90pt
+\fi
+\marginparsep 11pt
+\topmargin 11pt \headheight 12pt \headsep 13.66pt
+\footheight 12pt \footskip 30pt
+\textwidth 12.2truecm
+\textheight 19.4truecm
+\columnsep 1cc \columnseprule 0pt
+
+\footnotesep 7.7pt
+\skip\footins 9pt plus 4pt minus 2pt
+\floatsep 12pt plus 2pt minus 2pt
+\textfloatsep 8mm plus 2pt minus 4pt
+\intextsep 8mm plus 2pt minus 2pt
+\@maxsep 8mm
+
+\dblfloatsep 12pt plus 2pt minus 2pt
+\dbltextfloatsep 20pt plus 2pt minus 4pt
+\@dblmaxsep 20pt
+
+\@fptop 0pt plus 1fil \@fpsep 8pt plus 2fil \@fpbot 0pt plus 1fil
+\@dblfptop0pt plus1fil \@dblfpsep8pt plus2fil\@dblfpbot 0pt plus1fil
+\marginparpush 5pt
+
+\parskip 0pt plus 1pt \parindent 1.5em \topsep 8pt plus 2pt minus 4pt
+\partopsep 2pt plus 1pt minus 1pt \itemsep \z@
+\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301
+\@beginparpenalty-\@lowpenalty\@endparpenalty -\@lowpenalty\@itempenalty
+-\@lowpenalty
+
+\def\vec#1{\mathchoice{\mbox{\boldmath$\displaystyle\bf#1$}}
+{\mbox{\boldmath$\textstyle\bf#1$}}
+{\mbox{\boldmath$\scriptstyle\bf#1$}}
+{\mbox{\boldmath$\scriptscriptstyle\bf#1$}}}
+
+\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
+ \def\@svsec{}\else
+ \refstepcounter{#1}\edef\@svsec{\csname the#1\endcsname\enspace }\fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #6\relax
+ \noindent{\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\par}
+ \endgroup
+ \csname #1mark\endcsname{#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #7}\else
+ \def\@svsechd{#6\hskip #3\@svsec #8\csname #1mark\endcsname
+ {#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #7}}\fi
+ \@xsect{#5}}
+
+\def\part{\par \addvspace{4ex} \@afterindentfalse \secdef\@part\@spart}
+
+\def\@part[#1]#2{\ifnum \c@secnumdepth >\m@ne \refstepcounter{part}
+\addcontentsline{toc}{part}{\thepart \hspace{1em}#1}\else
+\addcontentsline{toc}{part}{#1}\fi { \parindent 0pt \raggedright
+ \ifnum \c@secnumdepth >\m@ne \Large \bf
+ Part\thepart\par\nobreak\fi\huge
+\bf #2\markboth{}{}\par } \nobreak \vskip 3ex \@afterheading }
+
+\def\@spart#1{{\parindent 0pt \raggedright
+ \huge \bf
+ #1\par} \nobreak \vskip 3ex \@afterheading }
+
+\def\section{\@startsection {section}{1}{\z@}{-18pt plus -4pt minus
+-4pt}{12pt plus 4pt minus 4pt}{\Large\bf\boldmath
+\pretolerance=10000\relax\rightskip=0pt plus8em}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-18pt plus-4pt minus
+ -4pt}{8pt plus 4pt minus 4pt}{\normalsize\bf\boldmath
+\pretolerance=10000\relax\rightskip=0pt plus8em}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-18pt plus-4pt
+ minus -4pt}{-0.5em plus -.22em minus -0.1em}{\normalsize\bf\boldmath}}
+\def\paragraph{\@startsection{paragraph}{4}{\z@}{-12pt plus -4pt minus
+ -4pt}{-0.5em plus -.22em minus -0.1em}{\normalsize\it}}
+\def\subparagraph#1{\typeout{LMAMULT Warning: You should not use
+\protect\subparagraph \space in this style.}\vskip0.5cm
+You should not use $\backslash${\tt subparagraph} in this
+style.\vskip0.5cm}
+
+\setcounter{secnumdepth}{2}
+
+\def\appendix{\par
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \def\thesection{\Alph{section}}}
+
+\leftmargini 17pt \leftmarginii 17pt
+\leftmarginiii 17pt \leftmarginiv 17pt
+\leftmarginv 10pt \leftmarginvi 10pt
+\leftmargin\leftmargini \labelwidth\leftmargini
+\advance\labelwidth-\labelsep
+\labelsep 5pt
+\parsep 0pt plus 1pt
+\def\@listi{\leftmargin\leftmargini}
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 0pt plus 1pt}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 0pt plus 1pt}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep
+ \topsep 0pt plus 1pt}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep
+ \topsep 0pt plus 1pt}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep
+ \topsep 0pt plus 1pt}
+
+\def\labelenumi{\arabic{enumi}.}
+\def\theenumi{\arabic{enumi}}
+\def\labelenumii{(\alph{enumii})}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+\def\labelenumiii{\roman{enumiii}.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+\def\labelenumiv{\Alph{enumiv}.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+\def\labelitemi{\bf --}
+\def\labelitemii{$\bullet$}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+\def\quotation{\list{}{\listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin}\item[]}
+\let\endquotation=\endlist
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+\let\enddescription\endlist
+
+\def\theequation{\arabic{equation}}
+
+\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{empty}\c@page\z@}
+\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi}
+
+\arraycolsep 1.4pt \tabcolsep 1.4pt \arrayrulewidth .4pt \doublerulesep
+2pt
+\tabbingsep \labelsep
+
+\skip\@mpfootins = \skip\footins
+\fboxsep = 3pt \fboxrule = .4pt
+
+\newcounter{part}
+\newcounter {section}
+\newcounter {subsection}[section]
+\newcounter {subsubsection}[subsection]
+\newcounter {paragraph}[subsubsection]
+
+\def\thepart{\Roman{part}}
+\def\thesection {\arabic{section}}
+\def\thesubsection {\thesection.\arabic{subsection}}
+\def\thesubsubsection {\thesubsection.\arabic{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{3}
+
+\def\tableofcontents{\section*{Table of Contents}
+ \@starttoc{toc}}
+\def\l@part#1#2{\addpenalty{\@secpenalty}
+ \addvspace{2.25em plus 1pt} \begingroup
+ \@tempdima 3em \parindent \z@ \rightskip \@pnumwidth \parfillskip
+-\@pnumwidth
+ {\Large \bf \leavevmode #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
+ \nobreak \endgroup}
+%
+\def\numberline#1{\advance\hangindent by\@tempdima%
+\hbox to\@tempdima{\hss#1\enspace}}
+%
+\def\bf@dottedtocline#1#2#3#4#5{\ifnum #1>\c@tocdepth \else
+ \vskip \z@ plus .2pt
+ {\leftskip #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip
+ \parindent #2\relax\@afterindenttrue
+ \interlinepenalty\@M
+ \leavevmode
+ \@tempdima #3\relax \advance\leftskip \@tempdima \hbox{}\hskip
+ -\leftskip
+{\bf#4}\nobreak\leaders\hbox{$\m@th \mkern \@dotsep mu.\mkern \@dotsep
+ mu$}\hfill \nobreak \hbox to\@pnumwidth{\hfil\rm #5}\par}\fi}
+%
+\def\l@section{\vskip2mm\bf@dottedtocline{1}{0em}{1.7em}}
+\def\l@subsection{\@dottedtocline{2}{1.7em}{2.3em}}
+\def\l@subsubsection{\@dottedtocline{3}{4em}{2em}}
+\def\l@paragraph{\@dottedtocline{4}{6em}{2em}}
+\def\l@subparagraph{\@dottedtocline{5}{8em}{2em}}
+\def\listoffigures{\section*{List of Figures\markboth
+ {List of Figures}{List of Figures}}\@starttoc{lof}}
+\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
+\def\listoftables{\section*{List of Tables\markboth
+ {List of Tables}{List of Tables}}\@starttoc{lot}}
+\let\l@table\l@figure
+
+\def\endthebibliography{\endlist\normalsize}
+
+\newif\if@restonecol
+\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\section*{Index}]
+ \markboth{Index}{Index}\thispagestyle{plain}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+\def\@idxitem{\par\hangindent 40pt}
+\def\subitem{\par\hangindent 40pt \hspace*{20pt}}
+\def\subsubitem{\par\hangindent 40pt \hspace*{30pt}}
+\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
+\def\indexspace{\par \vskip 10pt plus 5pt minus 3pt\relax}
+
+\def\footnoterule{\kern-3\p@\hrule width 2 true cm\kern 2.6\p@}
+
+\long\def\@makefntext#1{\@setpar{\@@par\@tempdima \hsize
+ \advance\@tempdima-1em\parshape \@ne 1em\@tempdima}\par
+ \parindent 1em\noindent \hbox to \z@{\hss$^{\@thefnmark}$\ }#1}
+
+\setcounter{topnumber}{2}
+\def\topfraction{.9}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.3}
+\setcounter{totalnumber}{3}
+\def\textfraction{.15}
+\def\floatpagefraction{.85}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.85}
+\def\dblfloatpagefraction{.85}
+
+\long\def\@makecaption#1#2{
+ \vskip 10pt
+ \setbox\@tempboxa\hbox{{\bf #1} #2}
+ \ifdim \wd\@tempboxa >\hsize \unhbox\@tempboxa\par \else \hbox
+to\hsize{\box\@tempboxa\hfil}
+ \fi\vskip5pt}
+
+\long\def\@caption#1[#2]#3{\addcontentsline{\csname
+ ext@#1\endcsname}{#1}{\protect\numberline{\csname
+ the#1\endcsname}{\ignorespaces #2}}\par
+ \begingroup
+ \@parboxrestore
+ \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par
+ \endgroup}
+
+\newcounter{figure}
+\def\thefigure{\@arabic\c@figure}
+
+\def\fps@figure{htbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{Fig.\thinspace\thefigure.}
+\def\figure{\@float{figure}\small\rm}
+\def\endfigure{\vskip-5pt\end@float}
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+
+\newcounter{table}
+\def\thetable{\@arabic\c@table}
+\def\fps@table{htbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{Table \thetable.}
+\def\table{\@float{table}\small\rm}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+
+% LaTeX does not provide a command to enter the authors institute
+% addresses. The \institute command is defined here.
+
+\newcounter{@inst}
+\newcounter{@auth}
+\newdimen\instindent
+
+\def\institute#1{\gdef\@institute{#1}}
+
+\def\institutename{\par
+ \begingroup
+ \parskip=0pt
+ \setcounter{@inst}{1}%
+ \def\and{\par\stepcounter{@inst}%
+ \hangindent\instindent\hangafter=0\noindent
+ \llap{$^{\the@inst}$\enspace}\ignorespaces}%
+ \setbox0=\vbox{\def\thanks##1{}\@institute}%
+ \ifnum\c@@inst>9\relax\setbox0=\hbox{$^{88}$\enspace}%
+ \else\setbox0=\hbox{$^{8}$\enspace}\fi
+ \instindent=\wd0\relax
+ \ifnum\c@@inst=1\relax\else
+ \setcounter{footnote}{\c@@inst}%
+ \setcounter{@inst}{1}%
+ \hangindent\instindent\hangafter=0\noindent
+ \llap{$^{\the@inst}$\enspace}\fi\ignorespaces
+ \@institute\par
+ \endgroup}
+
+\def\@thanks{}
+
+\def\@fnsymbol#1{\ifcase#1\or\star\or{\star\star}\or{\star\star\star}%
+ \or \dagger\or \ddagger\or
+ \mathchar "278\or \mathchar "27B\or \|\or **\or \dagger\dagger
+ \or \ddagger\ddagger\else\@ctrerr\fi\relax}
+
+\def\inst#1{\unskip\/$^{#1}$}
+
+\def\subtitle#1{\gdef\@subtitle{#1}}
+\def\@subtitle{}
+
+\def\titlerunning#1{\gdef\@titlerunning{#1}}
+\def\@titlerunning{}
+
+\def\authorrunning#1{\gdef\@authorrunning{#1}}
+\def\@authorrunning{}
+
+\def\maketitle{\par
+ \begingroup
+ \parindent=\z@
+ \def\thefootnote{\fnsymbol{footnote}}
+ \if@twocolumn
+ \twocolumn[\@maketitle]
+ \else \newpage
+ \global\@topnum\z@ \@maketitle \fi\thispagestyle{empty}\@thanks
+ \endgroup
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\gdef\@subtitle{}%
+ \let\thanks\relax}
+
+\def\@maketitle{\newpage
+ {\LARGE \bf\boldmath
+ \pretolerance=10000
+ \rightskip=0pt plus 4cm
+ \@title \par}\vskip .6cm
+\if!\@subtitle!\else {\Large \bf\boldmath
+ \vskip -.45cm
+ \pretolerance=10000
+ \rightskip=0pt plus 3cm
+ \@subtitle \par}\vskip .6cm\fi
+{\large\it \lineskip .5em
+\@author\vskip.35cm
+\def\\{ }\def\inst##1{}\def\thanks##1{}\def\and{}%
+\setcounter{@auth}{1}%
+\if!\@titlerunning!\else\def\@title{\@titlerunning}\fi
+\if!\@authorrunning!\else\def\@author{\@authorrunning}\fi
+\xdef\@author{\@author\unskip\unskip}%
+\xdef\@title{\ignorespaces\@title}%
+\instindent=\hsize\advance\instindent by-1cm\relax
+\setbox0=\hbox{\@author}\ifdim\wd0>\instindent
+\typeout{LMAMULT Warning: The running head produced by the
+\protect\author \space command}\typeout{exceeds the pagewidth,
+please supply a short form with \protect\authorrunning.}%
+\def\@author{Authors suppressed due to excessive length,
+please use {\tt$\backslash$authorrunning}.}\fi
+\setbox0=\hbox{\@title}\ifdim\wd0>\instindent
+\typeout{LMAMULT Warning: The running head produced by the
+\protect\title \space command}\typeout{exceeds the pagewidth,
+please supply a short form with \protect\titlerunning.}%
+\def\@title{Title suppressed due to excessive length,
+please use {\tt$\backslash$titlerunning}.}\fi
+\markboth{\@author}{\@title}}
+ {\small\rm\institutename}
+ \par
+ \ifdim\pagetotal<5.8true cm\instindent=5.8true cm\relax
+ \advance\instindent by-\pagetotal\relax
+ \advance\instindent by-18pt\relax
+ \ifdim\instindent>0pt\relax\vskip\instindent\hrule height0pt\fi\fi}
+
+\mark{{}{}}
+
+\if@twoside
+\def\ps@headings{\def\@oddfoot{}\def\@evenfoot{}%
+\def\@evenhead{\small\rm
+\thepage\hfil\leftmark}\def\@oddhead{\hbox{}\small\rm\rightmark \hfil
+\thepage}\def\sectionmark##1{}%
+\def\subsectionmark##1{}}
+\else \def\ps@headings{\def\@oddfoot{}\def\@evenfoot{}\def
+\@oddhead{\hbox
+{}\sl \rightmark \hfil \rm\thepage}\def\sectionmark##1{\markright
+{\uppercase{\ifnum \c@secnumdepth >\z@
+ \thesection\hskip 1em\relax \fi ##1}}}}
+\fi
+\def\ps@myheadings{\def\@oddhead{\hbox{}\sl\rightmark \hfil
+\rm\thepage}\def\@oddfoot{}\def\@evenhead{\rm \thepage\hfil\sl
+\leftmark\hbox
+{}}\def\@evenfoot{}\def\sectionmark##1{}\def\subsectionmark##1{}}
+
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+
+\ps@headings \pagenumbering{arabic} \onecolumn
+\if@twoside\else\raggedbottom\fi
+
+% new environments and theorems
+% borrowed form the LTMP-style of Springer-Verlag
+% designed by Dr. Christoph Ender
+%
+% define the new theorem like environments
+% define a new style of environments where it is possible to define
+% the font % used as the theorem name and the fontfamily for the text.
+%
+% \newstytheorem{name}{thefont}{txtfont}{Text}[Counter]
+% \newstytheorem{name}{thefont}{txtfont}[oldname]{Text}
+%
+% #1 - name of theorem
+% #2 - theorem font
+% #3 - text font
+%
+\def\newstytheorem#1#2#3{%
+\@ifnextchar[{\che@othm{#1}{#2}{#3}}{\che@nthm{#1}{#2}{#3}}}
+%
+% #1 - name of theorem
+% #2 - theorem font
+% #3 - text font
+% #4 - text string of thorem name
+%
+\def\che@nthm#1#2#3#4{%
+\@ifnextchar[{\che@xnthm{#1}{#2}{#3}{#4}}{\che@ynthm{#1}{#2}{#3}{#4}}}
+%
+% #1 - name of theorem
+% #2 - theorem font
+% #3 - text font
+% #4 - text string of thorem name
+% #5 - add theorem counter to reset list of another counter
+%
+\def\che@xnthm#1#2#3#4[#5]{\expandafter
+\@ifdefinable\csname #1\endcsname
+{\@definecounter{#1}\if@envcountreset\@addtoreset{#1}{#5}\fi
+\expandafter\xdef\csname the#1\endcsname{\@thmcounter{#1}}%
+\global\@namedef{#1}{\che@thm{#1}{#4}{#2}{#3}}\global
+\@namedef{end#1}{\@endtheorem}}}
+%
+% #1 - name of theorem
+% #2 - theorem font
+% #3 - text font
+% #4 - text string of thorem name
+%
+\def\che@ynthm#1#2#3#4{\expandafter\@ifdefinable\csname #1\endcsname
+{\@definecounter{#1}%
+\expandafter\xdef\csname the#1\endcsname{\@thmcounter{#1}}%
+\global\@namedef{#1}{\che@thm{#1}{#2}{#3}{#4}}\global
+\@namedef{end#1}{\@endtheorem}}}
+%
+% change oldthm if oldname in specification is '*'
+% then don't use a counter
+% #1 - countername
+% #2 - theorem font
+% #3 - text font
+% #4 - counter used
+% #5 - string containing theorem name to print
+%
+\def\che@othm#1#2#3[#4]#5{\expandafter\@ifdefinable
+\csname#1\endcsname%
+{\@@othm@{#1}{#2}{#3}{#4}{#5}\global\@namedef{end#1}{\@endtheorem}}}
+%
+\def\@@othm@#1#2#3#4#5{\if *#4{\global\@namedef{the#1}{\relax}
+\global\@namedef{#1}{\@bthm@{}{#5}{#2}{#3}}}\else
+{\global\@namedef{the#1}{\@nameuse{the#4}}% define the counter
+\global\@namedef{#1}{\che@thm{#4}{#5}{#2}{#3}}}\fi}
+%
+% new defs for theorem environment che 17-MAR-1989
+% it improves the option possible
+%
+% #1 - countername = theorem name
+% #2 - string containing theorem name to print
+% #3 - theorem font
+% #4 - text font
+\def\che@thm#1#2#3#4{\@ifnextchar({\@athm{#1}{#2}{#3}{#4}}{%
+\@ifnextchar *{\@bthm{#1}{#2}{#3}{#4}}%
+{\@@thm{#1}{#2}{#3}{#4}}}}
+%
+% \begin{thm}(A.1)[test] results in:
+% \end{thm} thm A.1 (test) ....
+% #1 - theorem
+% #2 - string of theorem name
+% #3 - font for theorem name and label
+% #4 - Text font
+% #5 - is the new label
+% #6 - optional string
+%
+\def\@athm#1#2#3#4(#5){\@ifnextchar[{%
+\@aythm{#1}{#2}{#3}{#4}{#5}}{\@axthm{#1}{#2}{#3}{#4}{#5}}}
+\def\@axthm#1#2#3#4#5{\@@locthmlab{#1}{#5}%
+\@begintheorem{#2}{#5}{#3}{#4}\ignorespaces}
+\def\@aythm#1#2#3#4#5[#6]{\@@locthmlab{#1}{#5}%
+\fuh@opargbegintheorem{#2}{#5}{#6}{#3}{#4}\ignorespaces}
+%
+% \begin{thm}*[xytest] results in:
+% \end{thm} thm (xytest) ....
+% #1 - theorem
+% #2 - string of theorem name
+% #3 - font for theorem name and label
+% #4 - Text font
+% #5 - optional string
+%
+\def\@bthm@#1#2#3#4{\@ifnextchar[{\@bythm{#1}{#2}{#3}{#4}}{%
+\@bxthm{#1}{#2}{#3}{#4}}}
+\def\@bthm#1#2#3#4*{\@ifnextchar[{\@bythm{#1}{#2}{#3}{#4}}{%
+\@bxthm{#1}{#2}{#3}{#4}}}
+\def\@bxthm#1#2#3#4{\if !#1!\relax\else\@@locthmlab{#1}{}\fi
+\@@begintheorem{#2}{#3}{#4}\ignorespaces}
+\def\@bythm#1#2#3#4[#5]{%
+\@@opargbegintheorem{#2}{#3}{#4}{#5}\ignorespaces}
+%
+% define local label
+% if no number or a user specified label occured
+%
+\def\@@locthmlab#1#2{\expandafter\def\csname the#1\endcsname{#2}
+\let\@chetempa\protect\def\protect{\noexpand\protect\noexpand}%
+\edef\@currentlabel{\csname p@#1\endcsname\csname the#1\endcsname}%
+\let\protect\@chetempa}
+%
+% #1 - counter = theorem name
+% #2 - string with name
+% #3 - font for theorem name and label
+% #4 - font for text
+\def\@@thm#1#2#3#4{\refstepcounter
+ {#1}\@ifnextchar[{\che@ythm{#1}{#2}{#3}{#4}}{%
+ \che@xthm{#1}{#2}{#3}{#4}}}
+%
+\def\che@xthm#1#2#3#4{\che@begintheorem{#2}{\csname
+the#1\endcsname}{#3}{#4}\ignorespaces}
+\def\che@ythm#1#2#3#4[#5]{\che@opargbegintheorem{#2}{\csname
+ the#1\endcsname}{#5}{#3}{#4}\ignorespaces}
+%
+% #1 - name of theorem
+% #2 - label string
+% #3 - font for name and lable
+% #4 - text fomt
+%
+\def\che@begintheorem#1#2#3#4{#4\trivlist\item[#3 #1\ts #2.]}
+%
+% #1 - name of theorem
+% #2 - label string
+% #3 - additonal text
+% #4 - font for name and lable
+% #5 - text fomt
+%
+\def\che@opargbegintheorem#1#2#3#4#5{#5 \trivlist
+\item[#4 #1\ts #2\ #3.]}
+%
+\def\fuh@opargbegintheorem#1#2#3{\it \trivlist
+ \item[\hskip \labelsep{\bf #1\ #2\ (#3).}]}
+%
+\def\@@begintheorem#1#2#3{#3\trivlist\item[#2 #1.]}
+\def\@@opargbegintheorem#1#2#3#4{#3\trivlist\item[#2 #1 #4.]}
+
+\newstytheorem{theorem}{\bf}{\it}{Theorem}[section]
+\newstytheorem{example}{\it}{\rm}{Example}[section]
+\newstytheorem{proposition}{\bf}{\it}[theorem]{Proposition}
+\newstytheorem{corollary}{\bf}{\it}[theorem]{Corollary}
+\newstytheorem{lemma}{\bf}{\it}[theorem]{Lemma}
+\newstytheorem{proof}{\it}{\rm}[*]{Proof}
+\newstytheorem{definition}{\bf}{\rm}[theorem]{Definition}
+\newstytheorem{remark}{\it}{\rm}[*]{Remark}
+\newstytheorem{exercise}{\it}{\rm}[theorem]{Exercise}
+\newstytheorem{problem}{\it}{\rm}[theorem]{Problem}
+\newstytheorem{solution}{\it}{\rm}[theorem]{Solution}
+\newstytheorem{note}{\it}{\rm}[theorem]{Note}
+\newstytheorem{question}{\it}{\rm}[theorem]{Question}
+
+\def\squareforqed{\hbox{\rlap{$\sqcap$}$\sqcup$}}
+\def\qed{\ifmmode\squareforqed\else{\unskip\nobreak\hfil
+\penalty50\hskip1em\null\nobreak\hfil\squareforqed
+\parfillskip=0pt\finalhyphendemerits=0\endgraf}\fi}
+
+\def\getsto{\mathrel{\mathchoice {\vcenter{\offinterlineskip
+\halign{\hfil
+$\displaystyle##$\hfil\cr\gets\cr\to\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr\gets
+\cr\to\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr\gets
+\cr\to\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+\gets\cr\to\cr}}}}}
+\def\lid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr<\cr\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr<\cr
+\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr<\cr
+\noalign{\vskip1pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+<\cr
+\noalign{\vskip0.9pt}=\cr}}}}}
+\def\gid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr>\cr\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr>\cr
+\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr>\cr
+\noalign{\vskip1pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+>\cr
+\noalign{\vskip0.9pt}=\cr}}}}}
+\def\grole{\mathrel{\mathchoice {\vcenter{\offinterlineskip
+\halign{\hfil
+$\displaystyle##$\hfil\cr>\cr\noalign{\vskip-1pt}<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr
+>\cr\noalign{\vskip-1pt}<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr
+>\cr\noalign{\vskip-0.8pt}<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+>\cr\noalign{\vskip-0.3pt}<\cr}}}}}
+\def\bbbr{{\rm I\!R}} %reelle Zahlen
+\def\bbbm{{\rm I\!M}}
+\def\bbbn{{\rm I\!N}} %natuerliche Zahlen
+\def\bbbf{{\rm I\!F}}
+\def\bbbh{{\rm I\!H}}
+\def\bbbk{{\rm I\!K}}
+\def\bbbp{{\rm I\!P}}
+\def\bbbone{{\mathchoice {\rm 1\mskip-4mu l} {\rm 1\mskip-4mu l}
+{\rm 1\mskip-4.5mu l} {\rm 1\mskip-5mu l}}}
+\def\bbbc{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}}}
+\def\bbbq{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm
+Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle\rm Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle\rm Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}}}}
+\def\bbbt{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm
+T$}\hbox{\hbox to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle\rm T$}\hbox{\hbox
+to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle\rm T$}\hbox{\hbox
+to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm T$}\hbox{\hbox
+to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}}}
+\def\bbbs{{\mathchoice
+{\setbox0=\hbox{$\displaystyle \rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox
+to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle \rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox
+to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle \rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox
+to0pt{\kern0.5\wd0\vrule height0.45\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.4\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox
+to0pt{\kern0.55\wd0\vrule height0.45\ht0\hss}\box0}}}}
+\def\bbbz{{\mathchoice {\hbox{$\sf\textstyle Z\kern-0.4em Z$}}
+{\hbox{$\sf\textstyle Z\kern-0.4em Z$}}
+{\hbox{$\sf\scriptstyle Z\kern-0.3em Z$}}
+{\hbox{$\sf\scriptscriptstyle Z\kern-0.2em Z$}}}}
+\def\ts{\thinspace}
+
+\def\typeset{\vfill\small\noindent This article was processed using
+the \LaTeX\ macro package with LMAMULT style\par}
+
+\def\enddocument{\par\typeset
+\@checkend{document}\clearpage\begingroup
+\if@filesw \immediate\closeout\@mainaux
+\def\global\@namedef##1##2{}\def\newlabel{\@testdef r}%
+\def\bibcite{\@testdef b}\@tempswafalse\makeatletter\input \jobname.aux
+\if@tempswa \@warning{Label(s) may have changed. Rerun to get
+cross-references right}\fi\fi\endgroup\deadcycles\z@\@@end}
diff --git a/obsolete/macros/latex209/contrib/springer/lmamult/read.me b/obsolete/macros/latex209/contrib/springer/lmamult/read.me
new file mode 100644
index 0000000000..75840e3284
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/lmamult/read.me
@@ -0,0 +1,11 @@
+How to proceed
+
+On this diskette or tape you find the following files:
+
+lmamult.doc general instructions, this is the LaTeX source
+ for the documentation. Please LaTeX it if you
+ have the paper version not at hand
+lmamudoc.sty modifications of the LMAMULT style
+ needed for LMAMULT.DOC
+lmamult.dem an example showing how to code
+lmamult.sty the LaTeX style file (for LaTeX 2.09)
diff --git a/obsolete/macros/latex209/contrib/springer/mathsing/mathsing.dem b/obsolete/macros/latex209/contrib/springer/mathsing/mathsing.dem
new file mode 100644
index 0000000000..492e831ea5
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/mathsing/mathsing.dem
@@ -0,0 +1,651 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This is an example of writing a book using LaTeX and Springer's
+% MATHSING.STY style option file.
+%
+% The \documentstyle command specifies the use of the 12pt book style.
+% Do not remove the 12pt option since this would only change the
+% fontsizes but no other dimensions. The "mathsing" entry of the
+% style option list specifies the use of the Springer changes to the
+% LaTeX default layout for books. The "mathdef" entry specifies a
+% user defined macro file with extension .STY that is included before
+% processing the various chapters.
+%
+% To start TeX use
+%
+% $ tex &lplain math
+%
+% or a similar command depending on your operating system.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+\documentstyle[12pt,mathsing]{book}
+%\documentstyle{mathsing}
+\newthe{conjecture}{conjecture*}{Conjecture}{lemmacount}{\bf}{\it}
+\def\frak{\rm}
+ \numberlikebook
+% \numberlikearticle
+\begin{document}
+\chapter{Orbits on Flag Manifolds}
+Please note that this is a preliminary example text demonstrating our
+preliminary MathSing \LaTeX style file.
+\section{$H$-Orbits on $X=G/P$}
+
+Let $G$ be a connected real semisimple Lie group
+and $X$ the flag manifold of $G$.
+$X$ is a homogeneous space of $G$ and the isotropy subgroup
+$P=P_x$ of
+each point $x$ of $X$ is called a minimal parabolic subgroup
+of $G$.
+Let $\sigma$ be an involutive automorphism ($\sigma ^2=id.$)
+of $G$
+and $H$ a subgroup of $G^\sigma =\{x\in G\mid \sigma x=x\}$
+containing
+the identity component $G^\sigma_0$ of $G^\sigma$.
+Irreducible pairs $({\frak g}, {\frak h})$ of Lie algebras
+of $G$ and $H$ are
+classified by \cite{Be}.
+
+The following are special cases of $H$-orbit decompositions
+of
+$X=G/P$.\\[5pt]
+\indent
+(i) Let $\sigma$ be a Cartan involution of $G$,
+${\frak g}={\frak k}\oplus
+{\frak s}$ the Cartan decomposition of the Lie algebra
+${\frak g}$ of $G$ for
+$\sigma$ and $K=H=G^\sigma$. Then $P=MAN$ where
+$A=P\cap\exp {\frak s}$, $M=Z_K(A)$ and $N$ is the unipotent
+radical of $P$. The Iwasawa decomposition
+$G=KAN(\cong K\times A\times N)$
+implies that $\#(K\setminus G/P)=1$.
+
+(ii) Let $G=G_1\times G_1$, $P=P_1\times P_1$ and
+$\sigma (x, y)=(y, x)$ for $(x, y)\in G_1\times G_1$.
+Then $H=G^\sigma=\{(x, x)\in G\mid x\in G_1\}$. Since
+$H\setminus G\cong G_1$ by the map $H(x, y)\mapsto x^{-1}y$,
+the
+double coset decomposition $H\setminus G/P$ is
+identified with the Bruhat decomposition
+$P_1\setminus G_1/P_1$.
+
+(iii) When $G$ is a complex semisimple Lie group and $\sigma$
+is a
+conjugation of $G$, $H$-orbits on $X$ are studied in \cite{A}.
+This study
+suggested the formulation for the following general cases.
+
+Let $\theta$ be a Cartan involution of $G$ such that
+$\sigma\theta =\theta\sigma$, ${\frak g}={\frak k}\oplus {\frak
+s}$
+the Cartan decomposition of ${\frak g}$ for $\theta$ and $K=G^\theta$.
+
+\begin{definition} An element $x$ of $X$ is called ``special''
+when $A_x=P_x\cap \exp {\frak s}$ is $\sigma$-stable. Put
+$$U=\{x\in X\mid x \mbox{ is special }\}\enspace .$$
+\end{definition}
+
+\noindent
+\begin{theorem} [{\rm[R, M1]}.] {\em $K\cap H\setminus U\cong H\setminus
+X$ by the inclusion map $U\hookrightarrow X$.}
+There exists a unique subgroup $H^a$ of $G$ such that
+$G^{\sigma\theta}_0 \subset H^a \subset
+G^{\sigma\theta}$ and that $K\cap H^a=K\cap H$. (Rem. $(H^a)^a=H$.)
+\end{theorem}
+\begin{corollary} {\rm\cite{M1}.} There exists a one-to-one
+correspondence
+$D\mapsto D^a$ between $H$-orbits and $H^a$-orbits on $X$ given
+by $K\cap
+H\setminus U\cong H\setminus X$ and $K\cap H\setminus
+U\cong H^a\setminus X$.
+\end{corollary}
+
+\begin{example} {}{}Let $G=SL(2,\bbbc)$. Then
+$X=P^1(\bbbc)=\bbbc \cup \{\infty\}$,
+$${\rm where}\quad
+\left(\matrix{a & b \cr c & d}\right)x={ax+b\over cx+d} \quad
+{\rm for}\
+\left(\matrix{a & b \cr c & d}\right)\in SL(2,\bbbc), \ x\in
+X.$$
+$${\rm Let}\quad
+\sigma\left(\matrix{a & b \cr c & d}\right)=
+\left(\matrix{a & -b \cr -c & d}\right),
+\quad{\rm and}\quad\theta g={}^t\bar g^{-1}.$$
+Then
+$$K=SU(2),\quad H=G^\sigma =
+\biggl\{\left(\matrix{a & 0 \cr 0 &
+a^{-1}}\right)\mid a\in \bbbc^\times\biggr\},$$
+$$H^a=G^{\sigma\theta}=SU(1,1)=
+\biggl\{\left(\matrix{a & b \cr \bar b &
+\bar a}\right)\mid a\bar a-b\bar b=1\biggr\}.$$
+The $H$-orbits on $X$ are $\{0\},\ \bbbc^\times$ and $\{\infty\}$
+and the corresponding $H^a$-orbits are $\{|x|<1\},\ \{|x|=1\}$
+and
+$\{|x|>1\}$, respectively.
+($U=\{0\}\cup \{|x|=1\}\cup \{\infty\}$\,.)
+\end{example}
+
+\section{Expression by Symbols}
+
+\begin{remark}[1] If $H=G^\sigma_0$, then $H\setminus X$ depends
+only on the pair $({\frak g}, \sigma )$ because
+$$X\cong \mbox{ the set of minimal parabolic subalgebras of
+}{\frak g}$$
+and
+$$H\setminus X\cong {\rm Ad}(H)\mbox{-conjugacy classes of minimal
+parabolic subalgebras of }{\frak g}\enspace .$$
+\end{remark}
+
+\noindent
+\begin{theorem} {\rm\cite{MO}.} Let $G$ and $H$ be as in the following
+list
+(complex classical cases). Then we can express $H\setminus X$
+(and
+$H^a\setminus X$) by symbols. ($p+q=n$, $[H: G^\sigma_0]=1$
+or $2$.)
+\end{theorem}
+
+\begin{table}
+\begin{petit}
+\caption{Example of a table}
+ \begin{tabular}{l @{\hspace{8pt}}
+ | @{\hspace{8pt}} c @{\hspace{8pt}}
+ | @{\hspace{8pt}} c @{\hspace{8pt}}
+ | @{\hspace{8pt}} c }
+\rule[-5pt]{0pt}{5pt}
+ Type & $G$ & $H$ & $H^a$ \\ \hline
+\rule[5pt]{0pt}{8pt}
+ AI & $GL(n, \bbbc)$ & $O(n, \bbbc)$ & $GL(n, \bbbr)$ \\
+ AII & $GL(n, \bbbc)$ & $Sp(n/2, \bbbc)$ ($n$ even) & $U^*(n)$
+\\
+ AIII & $GL(n, \bbbc)$ & $GL(p, \bbbc)\times GL(q, \bbbc)$
+& $U(p, q)$ \\
+ BI & $SO(2n+1, \bbbc)$ & $S(O(2p+1, \bbbc)\times O(2q, \bbbc))$
+ & $SO(2p+1, 2q)$ \\
+ CI & $Sp(n, \bbbc)$ & $GL(n, \bbbc)$ & $Sp(n, \bbbr)$ \\
+ CII
+ & $Sp(n, \bbbc)$ & $Sp(p, \bbbc)\times Sp(q, \bbbc)$ & $Sp(p,
+q)$ \\
+ DI & $SO(2n, \bbbc)$ & $S(O(2p, \bbbc)\times O(2q, \bbbc))$
+ & $SO(2p, 2q)$ \\
+ DI' & $SO(2n, \bbbc)$ & $S(O(2p+1, \bbbc)\times O(2q-1, \bbbc))$
+ & $SO(2p+1, 2q-1)$ \\
+ DIII & $SO(2n, \bbbc)$ & $GL(n, \bbbc)$ & $SO^*(2n)$ \\
+ \end{tabular}
+\end{petit}
+\end{table}
+
+\begin{note}
+In \cite{MO} p.155, we should read $GL(n, \bbbc)$
+for $\bbbc^\times\times PSL(n, \bbbc)$ on the line of DIII in
+Table 1.
+\end{note}
+
+Precise description of symbols and many examples are given in
+\cite{MO}. But we can explain shortly the essencial part as
+follows.
+
+Let $x\in U\subset X$. Then
+${\frak a}_x={\rm Lie}(P_x)\cap {\frak s}$ is
+$\sigma$-stable by the definition of $U$. Let
+$\Sigma_x$ be the root system of the pair
+$({\frak g}, {\frak a}_x)$ and $\Sigma_x^+$ the positive system
+of
+$\Sigma_x$ corresponding to $P_x$. Let $\Psi_x$ denote the set
+of
+simple roots in $\Sigma_x^+$. Then we can take an orthogonal
+basis
+$\{e_1,\ldots , e_n\}$ of the dual ${\frak a}_x^*$ of ${\frak
+a}_x$
+such that
+\[ \Psi_x=\left\{ \begin{array}{lc} \{\alpha_1,\ldots , \alpha_{n-1}\}
+ & \mbox{ if }G=GL(n, \bbbc), \\
+ \{\alpha_1,\ldots , \alpha_n\} & \mbox{ otherwise,}
+ \end{array} \right. \]
+where $\alpha_1=e_1-e_2, \ldots , \alpha_{n-1}=e_{n-1}-e_n$
+and
+$\alpha_n=e_n$, $e_{2n}$ or $e_{n-1}+e_n$ if $G=SO(2n+1, \bbbc)$,
+$Sp(n, \bbbc)$ or $SO(2n, \bbbc)$, respectively.
+
+To the left coset $(K\cap H)x$ in $U$, there corresponds a sequence
+$\varepsilon_1\varepsilon_2\ldots \varepsilon_n$ consisting
+of the
+following four kinds of letters.
+
+($\pm$) If $\sigma e_i=e_i$, then $\varepsilon_i=+$ (``a boy'')
+or $-$ (``a girl''). When $\varepsilon_i=\pm$ and $\varepsilon_j=\pm$
+($i\ne j$),
+$$\varepsilon_i=\varepsilon_j \iff
+{\frak g}({\frak a}_x, e_i-e_j)\subset {\rm Lie}(H)\enspace
+.$$
+
+(a) If $\sigma e_i=e_j$ with $i\ne j$, then we put a small letter
+(``a family name'') to the couple $(\varepsilon_i, \varepsilon_j)$.
+
+(A) If $\sigma e_i=-e_j$ with $i\ne j$, then we put a capital
+letter
+to the ``old'' couple $(\varepsilon_i, \varepsilon_j)$.
+
+(O) If $\sigma e_i=-e_i$, then $\varepsilon_i=O$ (``the aged''
+or
+``dead''?).
+
+Let $w_i$ be the reflection with respect to the simple root
+$\alpha_i$
+and $P_i=P\cup Pw_iP$ ($P=P_x$) the parabolic subgroup of $G$
+for
+$\alpha_i$. Let $\pi_i$ denote the projection of $X=G/P$ onto
+$G/P_i$.
+
+\section*{Notation} For two $H$-orbits $D_1$ and $D_2$ on $X$, we
+write
+$$D_1\stackrel{i}{\rightarrow}D_2 \iff \pi_i(D_1)=\pi_i(D_2)
+\mbox{ and } \dim D_1<\dim D_2\enspace .$$
+
+%\vspace{1ex}
+We put here two examples. (You can see 23 figures of examples
+in \cite{MO}.)
+
+\setlength{\unitlength}{1mm}
+\thicklines
+\begin{picture}(115,70)(4,0)
+\put(10,60){\makebox(0,0){$-++$}}
+\put(30,60){\makebox(0,0){$+-+$}}
+\put(50,60){\makebox(0,0){$++-$}}
+\put(20,40){\makebox(0,0){$aa+$}}
+\put(40,40){\makebox(0,0){$+aa$}}
+\put(30,20){\makebox(0,0){$a+a$}}
+\put(11,58){\vector(1,-2){8}}
+\put(31,58){\vector(1,-2){8}}
+\put(21,38){\vector(1,-2){8}}
+\put(29,58){\vector(-1,-2){8}}
+\put(49,58){\vector(-1,-2){8}}
+\put(39,38){\vector(-1,-2){8}}
+\put(12,49){1}
+\put(22,49){1}
+\put(36,49){2}
+\put(46,49){2}
+\put(22,29){2}
+\put(36,29){1}
+\put(30,9){\makebox(0,0){\ixpt{\bf Fig. 1.} $G=GL(3, \bbbc)$}}
+\put(30,4){\makebox(0,0){\ixpt$H=GL(2, \bbbc)\times GL(1, \bbbc)$}}
+
+\put(66,64){\makebox(0,0){$++$}}
+\put(82,64){\makebox(0,0){$+-$}}
+\put(98,64){\makebox(0,0){$-+$}}
+\put(114,64){\makebox(0,0){$--$}}
+\put(74,48){\makebox(0,0){$+O$}}
+\put(90,48){\makebox(0,0){$aa$}}
+\put(106,48){\makebox(0,0){$-O$}}
+\put(74,32){\makebox(0,0){$O+$}}
+\put(90,32){\makebox(0,0){$AA$}}
+\put(106,32){\makebox(0,0){$O-$}}
+\put(90,16){\makebox(0,0){$OO$}}
+\put(67,62){\vector(1,-2){6}}
+\put(83,62){\vector(1,-2){6}}
+\put(99,62){\vector(1,-2){6}}
+\put(81,62){\vector(-1,-2){6}}
+\put(97,62){\vector(-1,-2){6}}
+\put(113,62){\vector(-1,-2){6}}
+\put(74,46){\vector(0,-1){12}}
+\put(90,46){\vector(0,-1){12}}
+\put(106,46){\vector(0,-1){12}}
+\put(76,30){\vector(1,-1){12}}
+\put(90,30){\vector(0,-1){12}}
+\put(104,30){\vector(-1,-1){12}}
+\put(67,55){2}
+\put(76,55){2}
+\put(84,55){1}
+\put(95,55){1}
+\put(103,55){2}
+\put(111,55){2}
+\put(72,39){1}
+\put(88,39){2}
+\put(107,39){1}
+\put(79,23){2}
+\put(88,23){1}
+\put(99,23){2}
+\put(90,4){\makebox(0,0){\ixpt{\bf Fig. 2.} $G=Sp(2, \bbbc)$,
+$H=GL(2, \bbbc)$}}
+\end{picture}
+
+\begin{remark}[2] (\cite{Sp}, \cite{M2}) In complex cases, we
+can
+find all
+the closure relations among $H$-orbits on $X$ from the following
+two
+properties.
+
+(a) $D_1\stackrel{i}{\rightarrow}D_2 \Rightarrow D_1\subset
+D_2^{cl}$.
+
+(b) $D_1\stackrel{i}{\rightarrow}D_2, D_3\stackrel{i}{\rightarrow}D_4$
+and
+$D_1\subset D_3^{cl}\ \Rightarrow\ D_2\subset D_4^{cl}$.
+
+This is proved by the same argument as that of the Bruhat ordering
+since
+$$D_1\stackrel{i}{\rightarrow}D_2 \mbox{ and } D_1\stackrel{i}{\to}D_3\
+\Rightarrow\ D_2=D_3$$ in complex cases. To find all the closure
+relations in
+general real cases, we should follow a rather complicated procedure
+given in
+\cite{M2}.
+\end{remark}
+
+\begin{remark}[3] These diagrams of orbits are useful to the
+study of the
+asymptotic behavior of spherical functions on semisimple symmetric
+spaces
+(\cite{O}) and embeddings of Harish-Chandra modules into principal
+series
+(\cite{MO}).
+\end{remark}
+
+\begin{remark} [4] (Problem) If $\Sigma =\Sigma ({\frak g}, {\frak
+a})$ is
+classical, then there exists (in principle) a similar
+(sometimes the same)
+expression of the $H$-orbits on $X$ as that in a complex case.
+Give a
+complete list of such expressions by symbols. (For example,
+it is proved in
+\cite{M2} that the diagram of $H^a\setminus X$ is upside-down
+to that of
+$H\setminus X$.)
+\end{remark}
+\begin{example} {}{}($=$ Exercise). When $G=GL(n, \bbbf)$ and
+$H=GL(p,
+\bbbf)\times GL(n-p, \bbbf)$ for a division algebra $\bbbf$
+of characteristic
+$\ne 2$, the diagram of the $H$-orbits on $X$ does not depend
+on $\bbbf$.
+\end{example}
+
+\begin{problem*} Give good symbols for $H$-orbits on $X$ when
+$\Sigma$ is exceptional.
+\end{problem*}
+
+%pagestyle{myheadings}
+\newpage
+\markright{Uzawa's Stuff (This is to demonstrate changed headlines.)}
+\section{Uzawa's Function $f$ and Vector Field $v$ on $X$ \protect\\
+(Related to Intersections of \protect
+$H$- and $H^a$-Orbits on $X$)}
+%pagestyle{headings}
+
+Recently, T. Uzawa discovered the following function $f$
+and vector field $v$
+on $X$ which have very nice properties with respect to $H$-orbits
+and
+$H^a$-orbits.
+
+Let $Y_0$ be a generic element of ${\frak s}$.
+Then $Y_0$ defines a minimal parabolic subgroup $P_0$ of $G$
+such that $Y_0\in {\frak a}_0={\rm Lie}(P_0)\cap {\frak s}$
+and
+that $Y_0$ is dominant for the positive system of the root system
+$\Sigma ({\frak g}, {\frak a}_0)$ corresponding to $P_0$.
+By the natural identification
+$$G/P_0\cong K/M_0\cong {\rm Ad}(K)Y_0$$
+($K\cap P_0=M_0=$ the centralizer of $Y_0$ in $K$), $X=G/P_0$
+is embedded into ${\frak s}$. Let $Y_x$ denote the element in
+Ad$(K)Y_0$ corresponding to $x\in X$.
+
+\begin{definition} (i) We define a function $f$ on $X$ by
+$f(x)=|Y_x^+|^2=B(Y_x^+, Y_x^+)$ on $X$ where
+$Y_x^+={1\over 2}(Y_x+\sigma Y_x)$ and $B( , )$ is the Killing
+form on ${\frak g}$.
+
+(ii) A vector field $v$ on $X$ is defined by $v_x=$ the
+(infinitesimal) $Y_x^+$-action at $x$ for $x\in X$.
+
+(iii) $\Phi_t$ ($t\in \bbbr$) is the one-parameter group of
+transformations of $X$ for the vector field $v$.
+
+(iv) $\Phi_{\pm\infty}(x)=\lim_{t\to\pm\infty}\Phi_t(x)$ for
+$x\in X$.
+\end{definition}
+
+\begin{remark}[5] The vector field $v$ is the gradient of the
+function $f$ with respect to the $K$-invariant Riemannian metric
+on $X=K/M_0$ induced from the inner product
+$(Z, Z')=B([Z, Y_0], Z'_{\frak s})$ on ${\frak k}^{\perp{\frak
+m}_0}$
+where $Z'_{\frak s}$ is the element in ${\frak s}$ such
+that $Z'_{\frak s}-Z'\in {\rm Lie}(P_0)$.
+\end{remark}
+
+\begin{remark}[6] If the real rank of $G$ is larger than one,
+then $f$ and $v$ depend essencially (not constant multiple)
+on
+the choice of $Y_0$.
+\end{remark}
+
+\begin{example} {}{}{\rm (continued from Example 1.9)} Take
+$$Y_0=\pmatrix{1 & 0 \cr 0 & -1}\in
+{\frak s}=\biggl\{\pmatrix{z & x+iy \cr x-iy & -z}
+\mid x, y, z\in \bbbr \biggr\}\enspace .$$
+Since $P_0$ is the subgroup of $G$ consisting of upper
+triangular matrices, $eP_0$ corresponds to $\infty$ in
+$P^1(\bbbc)=\bbbc\cup \{\infty\}$ and
+$$kP_0\mapsto \pmatrix{a & b \cr -\bar b & \bar a}\infty =
+{a \over -\bar b}\quad \mbox{ for }\quad k=
+\pmatrix{a & b \cr -\bar b & \bar a}\in K\enspace .$$
+On the other hand,
+\begin{eqnarray*}
+\pmatrix{a & b \cr -\bar b & \bar a}
+\pmatrix{1 & 0 \cr 0 & -1}
+\pmatrix{a & b \cr -\bar b & \bar a}^{-1}
+& = & \pmatrix{a & -b \cr -\bar b & -\bar a}
+\pmatrix{\bar a & -b \cr \bar b & a} \\
+& = &
+\pmatrix{a\bar a -b\bar b & -2ab \cr -2\bar a\bar b &
+ -a\bar a +b\bar b}\enspace .
+\end{eqnarray*}
+So Ad$(K)Y_0$ is the sphere given by $x^2+y^2+z^2=1$
+and the function $f$ is
+given by $z^2$. Two points $\{\infty\}$, $\{0\}$ and
+the unit circle in
+$P^1(\bbbc)$ correspond to $(0, 0, 1)$, $(0, 0, -1)$
+and the circle defined
+by $z=0$, respectively, in Ad$(K)Y_0$.
+\end{example}
+
+\noindent
+\begin{theorem} {\rm\cite{U}} (i) $v$ is tangent to
+$H$-orbits and $H^a$-orbits.
+
+(ii) $(df)_x=0 \iff v_x=0 \iff x$ is special.
+
+(iii) Let $D$ be an $H$-orbit on $X$. Then
+there exists $m=\min_{x\in D}f(x)$ and for $x\in D$,
+$$f(x)=m \iff x \enspace \mbox{is special}\enspace .$$
+
+(iv) $\Phi_{-\infty}(D)=D\cap U$ for $H$-orbits $D$ on
+$X$.
+\end{theorem}
+
+\begin{corollary}(1) {\em \cite{M3} }(a) $D\cap D^a=(K\cap
+H)x$
+for an $x\in U$.
+
+(b) For two $H$-orbits $D$ and $E$ on $X$,
+$$D^{cl}\supset E \iff D\cap E^a\ne \phi
+\iff D^a\subset (E^a)^{cl}\enspace .$$
+\end{corollary}
+
+\begin{proof} (\cite{U}) (a) Let $x\in D\cap D^a$.
+We have only to show that
+$x\in U$ by Theorem 1. Let $m$ be the value of the
+function $f$ at the points
+in $D\cap U$ ($=D^a\cap U$). Suppose that $x\notin U$.
+Then $f(x)>m$ by
+(iii). Since the function for the $H^a$-orbit structure
+is $|Y_0|^2-f(x)$, we
+have also $f(x)<m$ by (iii), a contradiction.
+
+(b) Since $(H^a)^a=H$, we have only to prove the left $\iff$.
+
+The assertion $D^{cl}\supset E \Rightarrow D\cap E^a\ne \phi$
+is clear since
+$$T_x(E)+T_x(E^a)=T_x(X)$$
+for any $x\in E\cap E^a$ (\cite{M3}).
+
+Suppose that $D\cap E^a\ne \phi$ and let $x\in D\cap E^a$. Then
+$$\Phi_\infty(x)=\lim_{t\to \infty}\Phi_t(x)\in D^{cl}\cap E^a\cap
+U=
+D^{cl}\cap E\cap U$$
+by (i) and (iv). Hence $D^{cl}\cap E\ne \phi$ and therefore
+$D^{cl}\supset E$. \qed
+\end{proof}
+
+\begin{corollary}(2) Let $D$ be an $H$-orbit on $X$ and
+$x\in D\cap D^a$. Then
+$$D\cong (K\cap H)\times_L\Phi_{-\infty}^{-1}(x)\leqno(i)$$
+where $L=K\cap H\cap P_x$ and
+$$D\cap E^a\cong (K\cap H)\times_L(\Phi_{-\infty}^{-1}(x)\cap
+E^a)
+\leqno(ii)$$
+for any $H^a$-orbit $E^a$ on $X$. (Moreover it is clear that
+the
+fibers $\Phi_{-\infty}^{-1}(x)$ and $\Phi_{-\infty}^{-1}(x)\cap
+E^a$
+are contractible to the point $x$.)
+\end{corollary}
+
+\section{Remarks on Spherical Subgroups}
+
+Suppose that $G$ is a complex semisimple Lie group. A complex
+Lie
+subgroup
+$H$ of $G$ is called ``spherical'' if there exists an open $H$-orbit
+on $X$.
+Such pairs $(G, H)$ are classified by \cite{K} when $G$ is simple
+and $H$ is
+reductive, and by \cite{Br2} in general.\\[8pt]
+\noindent
+\begin{theorem} [{\rm[Br1, V]}] $H\subset G$ is spherical $\iff
+\#(H\setminus X)$ is finite. (Note that $\Leftarrow$ is clear.)
+\end{theorem}
+There is a simple proof of $\Rightarrow$ using ``rank-one sections''
+as follows.
+
+\begin{proof} We may assume that $HP$ is open in $G$. Write
+$G=P_{\beta_1}P_{\beta_2}\cdots P_{\beta_m}$ where the $\beta_i$'s
+are simple
+roots and $P_{\beta_i}=P\cup Pw_{\beta_i}P$. Put
+$P^{(i)}=P_{\beta_1}P_{\beta_2}\cdots P_{\beta_i}$ ($P^{(0)}=P$).
+We will
+show
+$$ \#(H\setminus HP^{(i)}/P)<\infty \mbox{ for } i=0, 1,\ldots
+, m$$
+by induction on $i$.
+
+By the hypothesis of induction, we may assume that
+$$ HP^{(i-1)}=Hg_1P\cup \cdots \cup Hg_kP\enspace .$$
+Then we have
+$$ HP^{(i)}=Hg_1P_{\beta_i}\cup \cdots \cup Hg_kP_{\beta_i}\enspace
+.$$
+We have only to show that $\#(H\setminus Hg_jP_{\beta_i}/P)<\infty$
+for $j=1,\ldots , k$. Since $HP^{(i-1)}$ is open in $G$,
+$(g_jP_{\beta_i}/P)\cap (HP^{(i-1)}/P)$ is (Zariski) open in
+the one-dimensional subvariety $g_jP_{\beta_i}/P$ of the complex
+alge
+braic variety $X$. Hence the compliment of $(g_jP_{\beta_i}/P)\cap
+(HP^{(i-1)}/P)$ in $g_jP_{\beta_i}/P$ consists of finte points
+and therefore $\#(H\setminus Hg_jP_{\beta_i}/P)<\infty$. \qed
+\end{proof}
+
+Let $G$ be a real semisimple Lie group and $H$ a Lie subgroup
+of $G$.
+
+\begin{conjecture}(1) If the real rank of $G$ is one and there
+exists an open $H$-orbit on $X=G/P$, then $\#(H\setminus X)<\infty$.
+\end{conjecture}
+
+By the same argument as above for spherical subgroups, Conjecture
+1 implies
+the following Conjecture 2.
+
+\begin{conjecture}(2) If there exists an open $H$-orbit on
+$X$, then $\#(H\setminus X)<\infty$.
+\end{conjecture}
+
+\begin{remark}[7] In general, $\#(H\setminus G/P)<\infty$ does
+not imply $\#(H_\bbbc \setminus G_\bbbc /P_\bbbc )<\infty$.
+For example, if $G=SU(n, 1)$ ($n>2$) and $H=\theta N$ (where
+$N$ is the unipotent radical of $P$), then $\#(H\setminus G/P)=2$
+and $
+\#(H_\bbbc \setminus G_\bbbc /P_\bbbc )=\infty$.
+\end{remark}
+
+\begin{thebibliography}{[M-O]}
+\bibitem[A]{A} Aomoto, K.: On some double coset decompositions
+of complex
+semi-simple Lie groups. J. Math. Soc. Japan {\bf 18} (1966)
+1--44
+\bibitem[Be]{Be} Berger, M.: Les \'{e}space symm\'{e}triques
+non compacts.
+Ann. Sci. \'{E}cole Norm. Sup. {\bf 74} (1957) 85--177
+\bibitem[Br1]{Br1} Brion, M.: Quelques propri\'{e}t\'{e}s des
+espaces
+homog\`{e}nes sph\'{e}riques. Manuscripta Math. {\bf 55} (1986)
+191--198
+\bibitem[Br2]{Br2} Brion, M.: Classification des espaces homog\`{e}nes
+sph\'{e}riques. Comp. Math. {\bf 63} (1987) 189--208
+\bibitem[F]{F} Flensted-Jensen, M.: Discrete series for semisimple
+symmetric spaces. Ann. Math. {\bf 111} (1980) 253--311
+\bibitem[H]{H} Hecht, H., Mili\v{c}i\'{c}, D., Schmid, W.,
+Wolf, J. A.: Localizations and standard modules for real semisimple
+Lie groups I: The duality theorem, Invent. math. {\bf 90} (1987)
+297--332
+\bibitem[K]{K} Kr\"{a}mer, M.: Sph\"{a}rische Untergruppen in
+Kompakten
+zusammenh\"{a}ngenden Liegruppen. Comp. Math. {\bf 38} (1979)
+129-153
+\bibitem[M1]{M1} Matsuki, T.: The orbits of affine symmetric
+spaces under the
+action of minimal parabolic subgroups. J. Math. Soc. Japan {\bf
+31} (1979)
+331--357
+\bibitem[M2]{M2} Matsuki, T.: Closure relations for orbits on
+affine
+symmetric spaces under the action of minimal parabolic subgroups.
+Adv.
+Studies Pure Math. {\bf 14} (1988) 541--559
+\bibitem[M3]{M3} Matsuki, T.: Closure relations for orbits on
+affine
+symmetric spaces under the action of parabolic subgroups. Intersections
+of
+associated orbits. Hiroshima Math. J. {\bf 18} (1988) 59--67
+\bibitem[M-O]{MO} Matsuki, T., Oshima, T.: Embeddings of discrete
+series into
+principal series. In: The Orbit Method in Representation Theory.
+Birkh\"{a}user, Boston 1990, pp. 147--175
+\bibitem[O]{O} Oshima, T.: Asymptotic behavior of spherical
+functions on
+semisimple symmetric spaces. Adv. Studies Pure Math. {\bf 14}
+(1988)
+561--601
+\bibitem[O-M]{O-M} Oshima, T., Matsuki, T.: A description of
+discrete series for semisimple symmetric spaces, Adv. Studies
+Pure Math. {\bf 4} (1984) 331--390
+\bibitem[R]{R} Rossmann, W.: The structure of semisimple symmetric
+spaces.
+Canad. J. Math. {\bf 31} (1979) 157--180
+\bibitem[S]{Sp} Springer, T. A.: Some results on algebraic groups
+with
+involutions. Adv. Studies Pure Math. {\bf 6} (1984) 525--534
+\bibitem[U]{U} Uzawa, T.: Invariant hyperfunction sections of
+line bundles.
+Preprint 1990
+\bibitem[V]{V} Vinberg, E. B.: Complexity of actions of reductive
+groups.
+Funct. Anal. Appl. {\bf 20} (1985) 1--11
+\bibitem[W]{W} Wolf, J. A.: Finiteness of orbit structure for
+real flag manifolds, Geometriae Dedicata {\bf 3} (1974) 377--384
+\end{thebibliography}
+\end{document}
+ \ No newline at end of file
diff --git a/obsolete/macros/latex209/contrib/springer/mathsing/mathsing.doc b/obsolete/macros/latex209/contrib/springer/mathsing/mathsing.doc
new file mode 100644
index 0000000000..9dc11b0196
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/mathsing/mathsing.doc
@@ -0,0 +1,1145 @@
+\documentstyle[12pt,mathsing]{book}
+%
+\numberlikebook
+\let\ts=\thinspace
+\let\picplace=\vspace
+%
+\newfont{\fivebf}{cmbx7 scaled 714} %Fonts fuer die Vektor-definition
+\newfont{\sevenbf}{cmbx7}
+%
+\makeatletter
+
+\def\laTeX{{\rm L\kern-.35em\raise.3ex\hbox{\LARGE A}\kern-.15em
+T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}
+
+\newcommand{\BibTeX}{{\rm B\kern-.05em{\sc i\kern-.025em b}\kern-.08em
+ T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}
+%
+\def\textfontii{\the\textfont\tw@}
+\def\AmSTeX{{\textfontii A}\kern-.1667em\lower.5ex\hbox
+ {\textfontii M}\kern-.125em{\textfontii S}-\TeX}
+%
+\def\runnheadl{Single-Author Mathematics -- \LaTeX{} Style File}
+\def\runnheadr{Documentation}
+\def\@evenhead{\rm\small\thepage\hspace{1.5cm}\runnheadl\hfil\hbox{}}
+\def\@oddhead{\hbox{}\hfil\rm\small\runnheadr\hspace{1.5cm}\thepage}
+%
+% braik: \tableofcontents changed to produce arabic page numbers
+\def\tableofcontents{
+ \@restonecolfalse
+ \if@twocolumn\@restonecoltrue\onecolumn\fi
+ \chapter*{Table of Contents}
+ \markboth{Table of Contents}{Table of Contents} % headline
+ \renewcommand{\thepage}{\arabic{page}} % arabic page numbers
+ \@starttoc{toc}\if@restonecol\twocolumn\fi
+ }
+% braik: \chapter should not start new page
+\def\chapter{\vskip18pt \global\@topnum\z@
+\@afterindentfalse \secdef\@chapter\@schapter}
+%
+\def\@makechapterhead#1{{\parindent 0pt \noindent\raggedright
+{\Large \bf \thechapter.\hspace{0.3cm}#1\par}%
+ \nobreak\vskip\baselineskip} }
+
+\def\@makeschapterhead#1{{\parindent 0pt \raggedright
+ \Large \bf #1\par
+ \nobreak \vskip\baselineskip} }
+%%%
+\makeatother
+%
+\begin{document}
+% hier geht's dann los!
+\thispagestyle{empty}
+\noindent
+\rule{\textwidth}{1pt}
+\vspace*{11mm}
+
+\noindent
+{\Huge \bf Single - Author Mathematics}
+
+\vspace*{11mm} \noindent
+{\huge \laTeX{} MathSing Style File}
+
+\vspace*{11mm} \noindent
+\rule{\textwidth}{1pt}
+
+\vspace*{11mm}\noindent
+Version 1.1
+\vfill
+\noindent
+{
+{\huge Springer-\kern-1pt Verlag}\\
+\LARGE
+Berlin\enspace Heidelberg\enspace New~Y\kern-2.5pt ork\\
+London\enspace Paris\enspace Tokyo\enspace Hong~Kong \\
+Barcelona\enspace Budapest}
+\newpage \noindent
+\rule{\textwidth}{1pt}
+\section*{For further information please contact us\newline
+at Springer-Verlag, Heidelberg:}
+%
+%begin{flushleft}
+\begin{tabular}{@{}l@{\hspace{.35cm}}p{0.75\textwidth}}
+Mailing address: & Springer-Verlag\\
+ & New Technologies/Product Developement\\
+ & P.O.~Box 105280\\
+ & D-6900 Heidelberg 1, FRG\\[2mm]
+bitnet/EARN: & SPRINGER @ DHDSPRI6 \\[2mm]
+Telex: & 46\,17\,23 \\[2mm]
+Telefax: & (0) 62\,21 43\,982
+\end{tabular}
+
+\bigskip\noindent
+All Springer macros are also available through our mailserver
+
+SVSERV@DHDSPRI6.bitnet.
+
+\noindent Send an e-mail just containing the word "help"
+to this e-mail address and you will receive further information.
+%end{flushleft}
+
+\bigskip\bigskip\noindent
+Once you have completed your work using this style file, please
+submit your own printout of the {\it final version together with the
+disk/magnetic tape\/}$^*$ containing your \LaTeX{} input (source) file
+and
+the final DVI file and make sure that the text is {\it identical in both
+cases}. Moreover, please check that you have also copied the dataset
+containing your macros on the disk.
+\vfill
+\begin{itemize}
+\item[$^*$] {\it The following formats are acceptable:}
+%\smallskip
+\item[] $5.25^{\prime\prime}$ or $3.5^{\prime\prime}$ diskette MS-DOS,
+$5.25^{\prime\prime}$ CP/M, $3.5^{\prime\prime}$ diskette Apple
+Macintosh, 9-track 1600 bpi magnetic tape VAX/VMS, 9-track 1600 bpi
+magnetic tape ANSI with label, SUN-Streamer Tape.\par
+\end{itemize}
+\bigskip\bigskip
+\rule{\textwidth}{1pt}
+%%%
+\newpage
+\tableofcontents
+\newpage
+%
+%
+\chapter{Introduction}
+%
+Authors wishing to code their book
+with \LaTeX{}, as well as
+those who have already coded it with \LaTeX{},
+will be provided with a style file that will give the text the
+desired layout. Authors are requested
+to adhere strictly to these instructions; {\em the \LaTeX{}-mathsing file must not be changed}.
+
+For the main body of the text
+you should use the commands of standard \LaTeX{}.
+Even if you are familiar with these commands, we urge you to read
+this entire document thoroughly. It contains many suggestions on
+how to use our commands properly; thus with little work your book
+will be formatted exactly to the Springer standard.
+
+If you are already familiar with \LaTeX{}, then the \LaTeX{}
+MathSing file should not give you any major difficulties.
+This style file will change the layout to the required MathSing style
+(for instance it will define the layout of \verb|\section|).
+We have also invented some extra commands,
+which are not provided by \LaTeX{}.
+
+The majority of these hints are not specific for MathSing; they may improve
+your use of \LaTeX{} in general.
+Furthermore, the documentation provides suggestions for the proper
+editing and use
+of the input files (capitalization, abbreviation, etc. -- see
+Sects.~\ref{refedit} ff).
+
+\vspace{12pt}
+\chapter{How to Begin}
+
+Please insert the enclosed diskette or tape into your computer. You will
+find the following files:
+%end{document}
+\begin{flushleft}
+\begin{tabular}{@{}l@{\hspace{1cm}}l}
+{\em mathsing.doc} & General instructions (this document).\\
+{\em mathsing.dem} & Run this to get a sample output.\\
+{\em mathsing.sty} & \LaTeX{} MathSing file for use with normal CM-Fonts.\\
+\end{tabular}
+\end{flushleft}
+You need to run your file with the command:
+\verb|latex filename|.
+If you have citations or references run it
+once more with the same command.
+
+\section{How to invoke the \LaTeX{} MathSing style file}
+
+The \LaTeX{} MathSing style file is substyle for the \LaTeX{}
+``book'' style.
+Therefore you may use all ``book'' style commands to prepare your
+manuscript except the command \verb|\part|. \LaTeX{} MathSing style file
+is invoked by requesting ``book'' in the
+\verb|documentstyle|-command:
+\begin{verbatim}
+\documentstyle[12pt,mathsing]{book}
+ \begin{document}
+ <your book>
+ \end{document}
+\end{verbatim}
+Do not use any other document-style options!
+
+\section{Text Already Coded with \LaTeX{} Without
+the \LaTeX{} mathsing file}
+
+If your file is already coded with \LaTeX{}
+you can easily adapt it a posteriori to \LaTeX{} MathSing style.
+
+Please refrain from using any \LaTeX{} or \TeX{} commands
+that affect the layout or formatting of your document (i.e. commands
+like \verb|\textheight|, \verb|\vspace|, \verb|\hoffset|, etc.).
+There may nevertheless be exceptional occasions
+when some of them may be used.
+
+The \LaTeX{}-MathSing style file has been carefully designed to produce
+the right layout
+from your \LaTeX{} input. If there is anything specific you would like
+to do and for which the style file does not provide a command,
+{\em please contact us.\/}
+
+If you have your own macros or definitions, insert them as shown here:
+\begin{verbatim}
+\documentstyle[12pt, mathsing]{book}
+ <your own macros or definitions>
+ \begin{document}
+ <your book>
+ \end{document}
+\end{verbatim}
+
+ or, if your macros are in a separate file:
+
+\begin{verbatim}
+\documentstyle[12pt, mathsing, <macrofilename>]{book}
+\begin{document}
+ <your book>
+ \end{document}
+\end{verbatim}
+
+\noindent
+Please supply comments with your macros to help us understand them.
+
+\section{Problems with PC\ts\TeX{}}
+In PC\ts\TeX{} the default memory capacity is not sufficient to
+accommodate
+our fonts. To cope with this problem, invoke \TeX{} with the following
+command:
+\begin{verbatim}
+latex file.tex /f=26000 /m=65000
+\end{verbatim}
+
+
+\chapter{General Rules for Coding Formulas}
+
+With mathematical formulas, you may proceed as described
+in Sect.~3.3 of the {\em \LaTeX{} User's Guide \& Reference
+Manual\/} by Leslie Lamport (1986), Addison-Wesley Publishing
+Company, Reading, Mass.
+
+A formula that appears in the running text is produced by enclosing
+it in \verb|$| signs, e.g. \verb|$ x^{2} $|
+produces $x^{2}$.\label{math}
+
+Displayed formulas are produced by the
+equation environment; here
+equations are automatically numbered sequentially throughout
+the chapters of your book using arabic
+numerals in parentheses on the right-hand side.
+
+You can choose between two kinds of numbering:
+\begin{itemize}
+\item the command \verb|\numberlikebook| at the beginning of your file,
+after the
+\verb|\documentstyle| and before the \verb|\begin{document}| command
+invokes structured numbering, e.g. (1.1), (1.2) of equations, tables
+and figures.
+\item Replacing this command by the command
+\verb|\numberlikearticle| results in ``ordinary" numbering e.g. (1),
+(2).
+\end{itemize}
+
+If you have to break equations, please use the eqnarray environment
+described in Sect.~3.3.5 on p.~49 of the \LaTeX{} book.
+
+If you wish to start a new paragraph immediately after a displayed
+equation, insert a blank line to produce the required
+indention. If there is no new paragraph either do not insert
+a blank line or insert a blank line and
+type \verb|\noindent| immediately before continuing the text.
+
+Please punctuate a displayed equation in the same way as
+ordinary text.
+
+Note that the sizes of the parentheses or other delimiter
+symbols used in equations should ideally match the height of the
+formulas being enclosed. This is automatically taken care of by
+the following \LaTeX{} commands, e.g.\ \
+\verb|\left(| \quad or \quad \verb|\left[| \quad and \quad
+\verb|\right)| \quad or \quad \verb|\right]|.
+
+\section{Italic and Roman Type in the Math Mode}
+
+\begin{itemize}
+\item[a)]
+In the math mode \TeX{} and \LaTeX{} treat all letters as though they
+were mathematical or physical variables; hence they are typeset in
+italics. However, any textual elements within formulas should be
+set in roman. Roman should also be used for
+subscripts and superscripts {\em in formulas\/} where these are
+merely labels and not in themselves variables, e.g.\\
+\verb|$T_{\rm eff} = 5\,10^{9} \mbox{ K}$|\quad produce\quad
+$T_{\rm eff} = 5 \cdot 10^{9} \mbox{ K}$\\
+\verb|$T_{\rm K}$|\quad produce\quad $T_{\rm K}$ (K = Kelvin)\\
+\verb|$m_{\rm e}$|\quad produce\quad $m_{\rm e}$ (e = electron).
+
+\paragraph{Sample Input}
+\begin{verbatim}
+\begin{equation}
+ \left(\frac{a^{2} + b^{2}}{c^{3}} \right) = 1 \quad
+ \mbox{ if } c\neq 0 \mbox{ and if } a,b,c\in \bbbr.
+\end{equation}
+\end{verbatim}
+
+\paragraph{Sample Output}
+\begin{equation}
+ \left(\frac{a^{2} + b^{2}}{c^{3}} \right) = 1 \quad
+ \mbox{ if } c\neq 0 \mbox{ and if } a,b,c\in \bbbr.
+\end{equation}
+
+%\begin{itemize}
+\item[b)]
+Please ensure that {\em physical units\/} (e.g.\ pc, erg\ts s$^{-1}$\ts
+K, cm$^{-3}$, W\ts m$^{-2}$\ts Hz$^{-1}$, m\ts kg\ts s$^{-2}$\ts
+A$^{-2}$) and
+{\em abbreviations} such as Ord, Var, GL, SL, sgn, const.\
+are always set in roman type. To ensure
+this use the \verb|\mbox| command: \verb|\mbox{Hz}|.
+On p.\ 46 of the {\em \LaTeX{} User's Guide \& Reference
+Manual\/} by Leslie Lamport you will find the names of
+common mathe\-matical functions, such as log, sin, exp, max and sup.
+These should be coded as \verb|\log|,
+\verb|\sin|, \verb|\exp|, \verb|\max|, \verb|\sup|
+and will then automatically appear in roman.
+
+\item[c)]
+In order
+to distinguish ``d'' used as ``differential sign'' and ``e''
+used as ``exponential function'' from normal variables,
+please set those in roman.
+%
+\item[d)]
+Chemical symbols and formulas should be set in roman,
+e.g.\ Fe not $Fe$, H$_{2}$O not {\em H$_{2}$O\/}, H$\alpha$ not
+{\em H${\alpha}$}.
+\end{itemize}
+
+
+\chapter{How to Edit Your Input (Source) File}
+
+\section{Headings}
+
+All words in headings should be capitalized except for conjunctions,
+prepositions up to five letters (e.g. on, of, by, and, or, but, from,
+with, with, under) and definite and indefinite articles (the, a, an)
+unless they appear at the beginning of a sentence. Formula letters must
+be typeset as in the text.
+
+\section{Capitalization and Non-capitalization}\label{refedit}
+\begin{itemize}
+\item[a)] The following should always be capitalized:
+\begin{itemize}
+\item Headings (see preceding Sect.\ts 4.1)
+\item Abbreviations and expressions in the text such as
+Fig(s).,
+Table(s), Sect(s)., Chap(s)., Theorem, Corollary, Definition, etc. when
+used with numbers, e.g. Fig.\ts 3.1, Table 1.1, Theorem 2.1.
+\end{itemize}
+\item[] Please see below the special rules in Sect.\ts 4.3 for
+referring to equations.
+\item[b)] The following should {\it not\/} be capitalized:
+\begin{itemize}
+\item The words figure(s), table(s), equation(s),
+theorem(s) in the text when used without an accompanying number.
+\item Figure legends and table captions except for names and
+abbreviations.
+\end{itemize}
+\end{itemize}
+\section{Abbreviation of Words}
+\begin{itemize}
+\item[a)] The following {\it should\/} be abbreviated in the running
+text
+{\it unless\/} they come at the beginning of a sentence: Chap., Sect.,
+Fig.; e.g. The results are depicted in Fig.\ts 5. Figure 9 reveals that
+\dots
+\item[] {\it Please note\/}: Equations should be referred to solely by
+their number in parentheses e.g. (14). However, when the reference comes
+at the beginning of a sentence, the unabbreviated word ``Equation"
+should be used: e.g. Equation (14) is very important. However, (15)
+makes it clear that \dots
+\item[b)] If abbreviations of names or concepts are used throughout the
+text, they should be defined at first occurrence, e.g. Plurisubharmonic
+(PSH) Functions, Strong Optimization (SOPT) Problem.
+\end{itemize}
+
+\section{Foreign Words and Phrases}
+Foreign words that have not come into general use are italicized.
+If a word or phrase or its abbrevation can be found in the main body
+of {\em Webster's\/} (and this also applies to British usage),
+it and its abbrevation are considered to be in general use and
+are not italicized. E.g. et al., cf., e.g.,
+a priori, in situ, brems\-strah\-lung, eigenvalues, should not be
+italicized.
+
+
+\chapter{Sectioning Commands}
+
+Main headings will be automatically numbered by the following macros.
+
+\paragraph{Sample Input}
+\begin{verbatim}
+\chapter{This is a First-Order Title}
+\section{This is a Second-Order Title}
+\subsection{This is a Third-Order Title}
+\subsubsection{This is an Bold Run-in Heading.}
+\paragraph{This is an Italic Run-in Heading}
+\end{verbatim}
+
+\newpage
+\paragraph{Sample Output}\
+
+
+\chapter*{1. This is a First-Order Title}
+\section*{1.1 This is a Second-Order Title}
+\subsection*{1.1.1 This is a Third-Order Title}
+\subsubsection*{This is an Bold Run-in Heading.} The text continues in
+regular roman typeface.
+\paragraph{This is an italic run-in heading.} The text
+continues \dots
+
+
+\chapter{Minienvironments}
+We have defined a number of minienvironments, namely for lemma,
+propositions, theorems, corollaries, exercises, problems, solutions,
+definitions, examples, notes and questions.
+
+These commands automatically provide the correct fonts and print the
+appropriate run-in headings. They all come in two flavors: without an
+asterisk they produce automatically numbered run-in heading.
+
+An optional argument is enclosed in [\ ] brackets. Note that unlike
+the standard \LaTeX syntax, no brackets or fullstops are provided
+automatically but have to be typed by the user.
+
+Using an asterisk will turn off the automatic numbering:
+
+General syntax:
+\begin{verbatim}
+\begin{<env.name>}
+ <text>
+\end{<env.name}
+\end{verbatim}
+ or
+\begin{verbatim}
+\begin{<env.name>}[<text>]
+ <text>
+\end{<env.name}
+\end{verbatim}
+ or
+\begin{verbatim}
+\begin{<env.name>*}
+ <text>
+\end{<env.name*}
+\end{verbatim}
+
+\paragraph{Sample Input}
+\begin{verbatim}
+\begin{lemma}
+Every day the night falls
+\end{lemma}
+\begin{lemma}[(Proverb).]
+At night, all cats are grey
+\end{lemma}
+\begin{theorem*}
+Every day the cats are grey
+\end{theorem*}
+\end{verbatim}
+
+\paragraph{Sample Output}\
+
+
+\begin{lemma}
+Every day the night falls
+\end{lemma}
+\begin{lemma}[(Proverb).]
+At night, all cats are grey
+\end{lemma}
+\begin{theorem*}
+Every day the cats are grey
+\end{theorem*}
+
+\section{Defining new minienvironments}
+If you want to define similar minienvironments or alter existing ones,
+you can do so by using the command
+\begin{verbatim}
+\newthe{<environmentname>}{<environmentname>}
+ {lemmacount}{<title of heading>}
+ {<font of heading>}
+ {<font of text>}
+\end{verbatim}
+
+
+\chapter{Fine Tuning of the Text}
+
+The following should be used to improve the readability of the text:
+\begin{flushleft}
+\begin{tabular}{@{}l@{\hspace{.5cm}}p{.7\textwidth}}
+\verb|\,| & a thin space, e.g.\ between numbers with more than
+ 5 digits; a line division will not be made
+ following this space,\\
+\verb|--| & en-dash; two strokes, without a space at either end,\\
+\verb*| -- | & em-dash; two strokes, with a space at either end,\\
+\verb|-| & hyphen; one stroke, no space at either end,\\
+\verb|$-$| & minus, in the text {\em only},\\
+\verb|~| & tilde between parts of names.
+\end{tabular}
+\end{flushleft}
+
+\paragraph{Sample Input}
+\begin{verbatim}
+20\,000 km, 1\,000\,000 s, NGC 468\,324
+1950--1985, p.~11--21
+this -- written on a computer -- is now printed
+signal-to-noise ratio, early-type, metal-poor, non-relativistic
+$-30$ K, $-5^{\circ}$C
+Dr~h.c.~Rockefeller-Smith and Prof.~Dr~Mallory
+\end{verbatim}
+
+\paragraph{Sample Output}
+\begin{flushleft}
+20\,000 km, 1\,000\,000 s, NGC 468\,324\\
+1950--1985, p.~11--21\\
+this -- written on a computer -- is now printed\\
+signal-to-noise ratio, early-type, metal-poor, non-relativistic\\
+$-30$ K, $-5^{\circ}$C\\
+Dr~h.c.~Rockefeller-Smith and Prof.~Dr~Mallory
+\end{flushleft}
+
+
+\chapter{Special Typefaces}
+
+Normal type (roman) need not be specified. {\em Italic\/}
+(not {\sl slanted\/}) should be used for emphasis in the text or, if
+not avoidable, {\bf boldface} could be used too.
+\begin{flushleft}
+\begin{tabular}{@{}l@{\hspace{.5cm}}l}
+\verb|{\em <text>}| & {\em Emphasized Text}.\\
+
+\verb|\begin{petit}| & Paragraph in small print (petit) for passages in the \\
+\verb|<text>| & text that the reader may skip upon first reading or for \\
+\verb|\end{petit}| & exercises or sections of similar
+importance.\\
+\end{tabular}
+\end{flushleft}
+
+For the use of further typefaces, please refer to Sect. 3.1 of the
+\LaTeX manual by Lamport.
+
+\chapter{Footnotes}
+
+Footnotes need to be punctuated at the end.
+Footnotes within the text should be coded
+\begin{verbatim}
+\footnote{<text>}
+\end{verbatim}
+
+\paragraph{Sample Input}
+\begin{verbatim}
+Text with a footnote\footnote{The footnote is automatically
+numbered.} and text continues \dots
+\end{verbatim}
+
+\noindent
+{\bf Remark}: Please avoid using footnotes in headings.
+
+\paragraph{Sample Output}
+\begin{flushleft}
+Text with a footnote\footnote{The footnote is automatically
+numbered.} and text continues \dots
+\end{flushleft}
+
+
+\chapter{Lists}
+
+Please code lists as described below:
+
+\paragraph{Sample Input}
+\begin{verbatim}
+\begin{enumerate}
+ \item First item.
+ \item Second item.
+ \begin{enumerate}
+ \item First nested item.
+ \item Second nested item.
+ \end{enumerate}
+ \item Third item.
+\end{enumerate}
+\end{verbatim}
+
+\paragraph{Sample Output}
+\begin{enumerate}
+\item First item.
+\item Second item.
+\begin{enumerate}
+\item First nested item.
+\item Second nested item.
+\end{enumerate}
+\item Third item.
+\end{enumerate}
+
+
+\chapter{Figures}
+
+{\it The figures\/} (line drawings and those containing halftone inserts
+as well as halftone figures) {\it should not be pasted into your
+laserprinter output}. They should be enclosed separately in camera-ready
+form (original artwork, glossy prints, photographs and/or slides). The
+lettering should be suitable for reproduction, and after reduction the
+capital letters should be at least 1.8 mm and not more than 2.5 mm in
+height. Check that lines and other details are uniformly black and that
+the lettering on figures is clearly legible.
+
+To leave the desired amount of space for the height of your figures,
+please use the following coding. As can be seen in the output, we will
+automatically provide 1\ts cm space above and below the figure, so that
+you should only leave the space corresponding to the size of the figure
+itself.
+
+If the figure is narrower than the page-width, please do not try to fill
+up the empty space with text.
+
+The final positioning of floating objects (i.e. figures and tables)
+should be done at the end of development of your text.
+
+For further information see also Sect.~3.6.2 on p.~63 of the
+{\em \LaTeX{} User's Guide \& Reference
+Manual\/} by Leslie Lamport (1986), Addison-Wesley Publishing
+Company, Reading, Mass.
+Figure legends should be inserted after or before
+(not in) the paragraph in which the figure is first mentioned.
+They will be numbered automatically.
+
+The figure, including the legend, must not exceed 23~cm in height.
+Taller figures will be swallowed by \LaTeX{} without warning.
+
+Please code as follows:
+\begin{flushleft}
+\verb|\begin{figure}|\\
+\verb|\picplace{<height> cm}|\\
+\verb|\caption[ ]{<text of caption>}| \quad
+ (Type [ ] to save auxiliary space)\\
+\verb|\end{figure}|
+\end{flushleft}
+
+\paragraph{Sample Input}
+\begin{verbatim}
+\begin{figure}
+\picplace{2.5cm}
+\caption[ ]{This is the caption.}
+\end{figure}
+\end{verbatim}
+
+\noindent
+Please use the minipage environment to place two figures next to each
+other.
+
+\paragraph{Sample Output}\ \\[2mm]
+see fig.\ts 11.1
+\begin{figure}%\label{table11.1}
+\picplace{2.5cm}
+\caption[ ]{This is the caption.}
+\end{figure}
+
+\chapter{Tables}
+
+Tables should be treated
+in the same way as figure legends, except that
+the table captions appear {\em above\/} the tables. The tables
+will be numbered automa\-tically.
+
+Table columns should be set flush left. Vertical lines
+are normally not necessary and should only be inserted
+in exceptional cases for the sake of clarity. Please note that tables
+should be set in small print using the \verb|\small| command.
+
+For further information you will find a complete description of
+the table and tabular environment
+on p.~63~ff. and p.~182 of the {\em \LaTeX{} User's Guide \&
+Reference Manual\/} by Leslie Lamport.
+
+Height of tables must not exceed 23 cm. Taller tables will be swallowed
+by \LaTeX{} without warning.
+
+\section{Tables coded with \LaTeX{}}
+
+As an example for simple coding of a table we give you
+the following advice for the coding.
+(Before continuing your text after the
+table environment you need an empty line.)
+
+\paragraph{Sample Input}
+
+\begin{verbatim}
+\begin{table}
+\caption[ ]{Critical $N$ values}
+\begin{flushleft}
+\small
+\begin{tabular}{llllll}
+\hline
+\noalign{\vskip 3pt}
+$M_$\sun & $beta_{0}$ & $T_{\rm c6}$ & $\gamma$
+ & $N_{\rm crit}^{\rm L}$
+ & $N_{\rm crit}^{\rm Te}$\\
+\noalign{\vskip 3pt}
+\hline
+\noalign{\vskip 3pt}
+ 30 & 0.82 & 38.4 & 35.7 & 154 & 320 \\
+ 60 & 0.67 & 42.1 & 34.7 & 138 & 340 \\
+120 & 0.52 & 45.1 & 34.0 & 124 & 370 \\
+\noalign{\vskip 3pt}
+\hline
+\end{tabular}
+\end{flushleft}
+\end{table}
+\end{verbatim}
+
+\paragraph{Sample Output}\ \\[2mm]
+See table\ts12.1
+\begin{table}
+%\label{table12.1}
+\caption[ ]{Critical $N$ values}
+\begin{flushleft}
+\small
+\begin{tabular}{llllll}
+\hline
+\noalign{\vskip 3pt}
+$M_\sun$ & $beta_{0}$ & $T_{\rm c6}$ & $\gamma$
+ & $N_{\rm crit}^{\rm L}$
+ & $N_{\rm crit}^{\rm Te}$\\
+\noalign{\vskip 3pt}
+\hline
+\noalign{\vskip 3pt}
+ 30 & 0.82 & 38.4 & 35.7 & 154 & 320 \\
+ 60 & 0.67 & 42.1 & 34.7 & 138 & 340 \\
+120 & 0.52 & 45.1 & 34.0 & 124 & 370 \\
+\noalign{\vskip 3pt}
+\hline
+\end{tabular}
+\end{flushleft}
+\end{table}
+
+\newpage
+\paragraph{Sample Input}
+
+\begin{verbatim}
+\begin{table}
+\caption[ ]{Observational results from NGC 4827}
+\small
+\begin{flushleft}
+\renewcommand{\arraystretch}{1.2}
+\begin{tabular}{lllllllllllll}
+\hline
+ & & \multicolumn{3}{l}{RA (1950)} &\
+ & \multicolumn{3}{l}{Dec (1950)}
+ & $S$ & Pol & \% & $\log P$\\
+ \cline{3-5}\cline{7-9}
+ & &(h) & (m) & (s) & & (\degr) & (\arcmin)
+ & (\arcsec) & (mJy) & (mJy) & & (W Hz$^{-1}$)\\
+\hline
+Core & (5 GHz) & 12 & 54 & 18.0 & & 27 & 26 & 56.2
+ & 8 & & & 21.64 \\
+Total&(327 MHz)& & & & & & &
+ & 210 & & & 23.13 \\
+ &(1.4 GHz)& & & & & & &
+ & 57 & 1.3 & 2 & 22.49 \\
+ & (5 GHz) & & & & & & &
+ & 26 & 0.73 & 3 & 22.15 \\
+\hline
+\end{tabular}
+\renewcommand{\arraystretch}{1}
+\end{flushleft}
+\end{table}
+\end{verbatim}
+
+\paragraph{Sample Output}\ \\[2mm]
+See table\ts 12.2
+\begin{table}
+\label{table12.2}
+\caption[ ]{Observational results from NGC 4827}
+\small
+\begin{flushleft}
+\renewcommand{\arraystretch}{1.2}
+\tabcolsep=0.9\tabcolsep
+\begin{tabular}{lllllllllllll}
+\hline
+ & & \multicolumn{3}{l}{RA (1950)} &\
+ & \multicolumn{3}{l}{Dec (1950)}
+ & $S$ & Pol & \% & $\log P$\\
+ \cline{3-5}\cline{7-9}
+ & &(h) & (m) & (s) & & (\degr) & (\arcmin)
+ & (\arcsec) & (mJy) & (mJy) & & (W Hz$^{-1}$)\\
+\hline
+Core & (5 GHz) & 12 & 54 & 18.0 & & 27 & 26 & 56.2
+ & 8 & & & 21.64 \\
+Total&(327 MHz)& & & & & & &
+ & 210 & & & 23.13 \\
+ &(1.4 GHz)& & & & & & &
+ & 57 & 1.3 & 2 & 22.49 \\
+ & (5 GHz) & & & & & & &
+ & 26 & 0.73 & 3 & 22.15 \\
+\hline
+\end{tabular}
+\renewcommand{\arraystretch}{1}
+\end{flushleft}
+\end{table}
+\section{Tables Not Coded with \LaTeX{}}
+
+If you do not wish to code your table using \LaTeX{}
+but prefer to have it reproduced separately,
+proceed similarily as for figures and use the following coding:
+
+\paragraph{Sample Input}
+\begin{flushleft}
+\verb|\begin{table}| \\
+\verb|\caption[ ]{<text of caption>}|\\
+\verb|\vspace{<actual height of table> cm}| \\
+\verb|\end{table}|
+\end{flushleft}
+
+
+\chapter{Appendices}
+
+Type \verb|\appendix| to set all sectioncounter etc to 0.
+Begin the actual appendix by typing\\
+\verb|\section{Appendix}|
+
+
+\chapter{Signs and Characters}
+
+\section{Special Signs}
+
+You may need to use special signs. Though quite a number is supplied by
+{\em \LaTeX{}} (see
+{\em \LaTeX{} User's Guide \& Reference Manual\/} by Leslie Lamport, pp.~44~ff.) we have created further
+symbols.
+
+\section{Mathematical Symbols}
+\begin{flushleft}
+%\small
+\footnotesize
+\renewcommand{\arraystretch}{1.25}
+\begin{tabular}{lll@{\hspace{1.5cm}}lll}
+\hline
+Input & Explanation & Output & Input & Explanation & Output\\
+\hline
+\verb|\la| & less or approx & $\la$ &
+ \verb|\ga| & greater or approx & $\ga$\\
+\verb|\getsto| & gets over to & $\getsto$ &
+ \verb|\cor| & corresponds to & $\cor$\\
+\verb|\lid| & less or equal & $\lid$ &
+ \verb|\gid| & greater or equal & $\gid$\\
+\verb|\sol| & similar over less & $\sol$ &
+ \verb|\sog| & similar over greater & $\sog$\\
+\verb|\lse| & less over simeq & $\lse$ &
+ \verb|\gse| & greater over simeq & $\gse$\\
+\verb|\grole| & greater over less & $\grole$ &
+ \verb|\leogr| & less over greater & $\leogr$\\
+\verb|\loa| & less over approx & $\loa$ &
+ \verb|\goa| & greater over approx & $\goa$\\
+\verb|\qed| & less over approx & $\qed$ & \\
+\hline
+\end{tabular}
+\renewcommand{\arraystretch}{1}
+\end{flushleft}
+
+\section{Special Roman or Blackboard Bold}
+
+\begin{flushleft}
+%\small
+\footnotesize
+\renewcommand{\arraystretch}{1.25}
+\begin{tabular}{lll@{\hspace{1cm}}lll}
+\hline
+Input & Explanation & Output & Input & Explanation & Output\\
+\hline
+\verb|$\bbbc$| & complex numbers & $\bbbc$ &
+\verb|$\bbbf$| & blackboard bold F & $\bbbf$ \\
+\verb|$\bbbh$| & blackboard bold H & $\bbbh$ &
+\verb|$\bbbk$| & blackboard bold K & $\bbbk$ \\
+\verb|$\bbbm$| & blackboard bold M & $\bbbm$ &
+\verb|$\bbbn$| & natural numbers N & $\bbbn$ \\
+\verb|$\bbbp$| & blackboard bold P & $\bbbp$ &
+\verb|$\bbbq$| & rational numbers & $\bbbq$ \\
+\verb|$\bbbr$| & real numbers & $\bbbr$ &
+\verb|$\bbbs$| & blackboard bold S & $\bbbs$ \\
+\verb|$\bbbt$| & blackboard bold T & $\bbbt$ &
+\verb|$\bbbz$| & integer numbers & $\bbbz$ \\
+\verb|$\bbbone$| & symbol one & $\bbbone$ & & & \\
+\hline
+\end{tabular}
+\renewcommand{\arraystretch}{1}
+\end{flushleft}
+
+\section{Gothic (Fraktur)}
+If gothic letters are {\em necessary}, please
+use those from \AmSTeX{},
+available from the American Mathematical Society.
+
+For the real and imaginary parts
+of a complex number within math mode the commands \verb|$\Re$|
+and \verb|$\Im$| have been redefined to produce Re and Im
+instead of gothic letters.
+
+\section{Script}
+
+For script capitals use the coding\\
+\verb|${\cal AB}$| which yields ${\cal AB}$
+(see p.~43 of the \LaTeX{} book).
+
+\section{Vectors}
+\begin{flushleft}
+\begin{tabular}{@{}l@{\hspace{.5cm}}l}
+\verb|\vec{<Symbol>}| & Vectors may only appear in math mode.\\
+\end{tabular}
+\end{flushleft}
+\verb|$\vec{A} \times \vec{B} \cdot \vec{C}|\quad
+ yields $\vec{A}\times\vec{B}\cdot\vec{C}$.\\
+\verb|$\vec{A\/}^{\rm T} \otimes \vec{B} \otimes \vec{\hat D}$|\\
+yields $\vec{A\/}^{\rm T} \otimes \vec{B} \otimes
+\vec{\hat D}$.
+
+
+\def\refchapter{\chapter*{References}
+\parindent0pt\parskip0pt\small}
+\chapter{References}
+
+There are three reference systems available; only one, of course,
+should be used. With each system (by author-year,
+by number only or by letter-number) a reference list
+containing all citations in the
+text, should be included at the end of your book.
+
+\newpage
+\paragraph{Examples of Typical Text Containing Reference Citations}\
+\\[2mm]
+This is implicit in recent work of Arnold (1968) and Lerch et al. (1983)
+\dots\\
+Consider as an example the following theorem [1].\\
+We refer now to the hypothesis as given in [S1].
+
+\section{Author-Year System}
+References are cited in the text by name and year in parentheses, e.g.
+(Smith 1970, 1980), (Ekeland et al. 1985, Theorem 2), (Jones and Jaffe
+1986; Farrow 1988, Chap.\ts 2) or only the year in parentheses if the
+name is part of the sentence, e.g. Ekeland et al. (1985, Sect.\ts 2.1).
+The reference list should contain all citations contained in the text,
+ordered alphabetically by surname (with initials following). If there
+are several works by the same author(s) the references should be listed
+in the appropriate order indicated below:
+\medskip
+\begin{itemize}
+\item[a)] One author: list works chronologically;
+\item[b)] Author and same co-author(s): list works chronologically;
+\item[c)] Author and different co-authors: list works alphabetically
+according to co-authors.
+\end{itemize}
+\medskip
+If there are several works by the same author(s) and in the same year,
+but cited separately, they should be distinguished by
+the use of ``a", ``b" etc., e.g. (Smith 1982a), (Ekeland et al. 1982b).
+
+To achieve a reference list in the author-year system, please use the
+following springer macro syntax
+
+\noindent
+\verb|\begin{references}{}|\quad Don't forget those empty braces\\
+\verb|\refer <text>|\\
+\verb|\refer ...|\\
+\quad $\vdots$\\
+\verb|\end{references}|
+
+\paragraph{Sample Input}
+
+\begin{verbatim}
+\begin{references}{}
+ \refer Clarke, F., Ekeland, I. 1982, Nonlinear oscillations
+ and boundary-value problems for Hamiltonian systems,
+ Arch. Rat. Mech. Anal. {\bf 78}, (1982) 315--333
+ \refer Rabinowitz, P.: On subharmonic solutions
+ of a Hamiltonian system. Comm. Pure Appl. Math.
+ {\bf 33} (1980) 609--633
+\end{references}
+\end{verbatim}
+
+\paragraph{Sample Output}\
+
+\begin{references}{}
+
+ \refer Clarke, F., Ekeland, I. 1982, Nonlinear oscillations and
+ boundary-value problems for Hamiltonian systems,
+ Arch. Rat. Mech. Anal. {\bf 78}, (1982) 315--333
+ \refer Rabinowitz, P.: On subharmonic solutions of a Hamiltonian
+ system. Comm. Pure Appl. Math. {\bf 33} (1980) 609--633
+
+\end{references}
+
+\section{References by Number Only or by Letter-Number}
+The author-year system is probably the most convenient to the reader.
+However,\newline
+ refer\-en{}ces may instead be cited in the text by
+numbers
+in square brackets, e.g. [1], [2] etc. used sequentially throughout your
+text or by letter-number, e.g. [E1, S2], [P1] etc. or a
+similar version.
+For example, the first two references are given as [1] and [2] in the
+text, and as 1. and 2. (i.e. the brackets are dropped) in the reference
+list.
+
+\subsection{Syntax for Number-Only System}
+
+\verb|\begin{references}{<widest number used in ref. list>}|\\
+\verb|\refno{<no.>}<text>|\\
+\verb|\refno ...|\\
+\quad $\vdots$\\
+\verb|\end{references}|
+
+\paragraph{Sample Input}
+\begin{verbatim}
+%
+\begin{references}{1.}
+ \refno{1.} Clarke, F., Ekeland, I. 1982, Nonlinear oscillations
+ and boundary-value problems for Hamiltonian systems,
+ Arch. Rat. Mech. Anal. {\bf 78}, (1982) 315--333
+ \refno{2.} Rabinowitz, P.: On subharmonic solutions
+ of a Hamiltonian system. Comm. Pure Appl. Math.
+ {\bf 33} (1980) 609--633
+\end{references}
+\end{verbatim}
+
+\newpage
+\paragraph{Sample Output}\
+
+\begin{references}{1.} %Springer macros
+ \refno{1.} Clarke, F., Ekeland, I. 1982, Nonlinear oscillations and
+ boundary-value problems for Hamiltonian systems,
+ Arch. Rat. Mech. Anal. {\bf 78}, (1982) 315--333
+ \refno{2.} Rabinowitz, P.: On subharmonic solutions of a Hamiltonian
+ system. Comm. Pure Appl. Math. {\bf 33} (1980) 609--633
+\end{references}
+
+\subsection{Letter-Number system}
+Here you have the choice between the traditional \LaTeX{}-way of doing
+things and Springer macros.
+
+\smallskip\noindent
+Traditional \LaTeX{} syntax
+
+\begin{verbatim}
+\begin{thebibliography}{widest-label} % \LaTeX{} standard macros
+ \bibitem[<label>]{name}<text>
+ \bibitem[<label>]{name}<text>
+\end{thebibliography}
+\end{verbatim}
+
+\paragraph{Sample Input}
+
+\begin{verbatim}
+\begin{thebibliography}{[MT1]}
+\bibitem[CE1]{CE1} Clarke, F., Ekeland, I. 1982,
+ Nonlinear oscillations and boundary-value
+ problems for Hamiltonian systems,
+ Arch. Rat. Mech. Anal. {\bf 78},
+ (1982) 315--333
+\bibitem[Ra1]{Ra1} Rabinowitz, P.: On subharmonic solutions
+ of a Hamiltonian system. Comm. Pure Appl.
+ Math. {\bf 33} (1980) 609--633
+\end{thebibliography}
+\end{verbatim}
+
+\paragraph{Sample Ouput}\
+
+\begin{thebibliography}{[MT1]}
+\bibitem[CE1]{CE1} Clarke, F., Ekeland, I. 1982, Nonlinear oscillations and
+boundary-value problems for Hamiltonian systems, Arch. Rat. Mech. Anal.
+{\bf 78}, (1982) 315--333
+\bibitem[Ra1]{Ra1} Rabinowitz, P.: On subharmonic solutions of a
+Hamiltonian system. Comm. Pure Appl. Math. {\bf 33} (1980) 609--633
+\end{thebibliography}
+
+\noindent
+For overall information on the reference environment
+see the {\em \LaTeX{} User's Guide \& Reference
+Manual\/} by Leslie Lamport, p.~73.
+
+\subsection{Springer macros syntax}
+
+\verb|\begin{references}{[<widest label used in your list>]}|\\
+\verb|\refmark{[<label>]}<text>|\\
+\verb|\refmark ...|\\
+\quad $\vdots$\\
+\verb|\end{references}|
+
+\paragraph{Sample Input}
+\begin{verbatim}
+%
+\begin{references}{[CEW]}
+ \refmark{[Aa]} Clarke, F., Ekeland, I. 1982,
+ Nonlinear oscillations and boundary-value
+ problems for Hamiltonian systems,
+ Arch. Rat. Mech. Anal. {\bf 78}, (1982) 315--333
+ \refmark{[Bi]} Rabinowitz, P.: On subharmonic solutions
+ of a Hamiltonian system. Comm. Pure Appl. Math.
+ {\bf 33} (1980) 609--633
+ \end{references}
+\end{verbatim}
+
+\noindent{\em Sample Output}
+
+\begin{references}{[CEW]}
+ \refmark{[Aa]} Clarke, F., Ekeland, I. 1982, Nonlinear oscillations and
+ boundary-value problems for Hamiltonian systems,
+ Arch. Rat. Mech. Anal. {\bf 78}, (1982) 315--333
+ \refmark{[Bi]} Rabinowitz, P.: On subharmonic solutions of a Hamiltonian
+ system. Comm. Pure Appl. Math. {\bf 33} (1980) 609--633
+ \end{references}
+
+\smallskip
+In reality, all these references start at the top of a new right page
+thus creating an empty page if necessary.
+
+\smallskip\noindent
+{\it Very important\/}: For each entry in the reference list please
+follow {\it exactly\/} the order shown in the examples and
+ensure that the references cited in the text (name-year,
+number or letter-number) correspond exactly with the entries
+in the reference list.
+
+\section{The use of\/ {\rm\BibTeX{}}}
+
+If you normally use \BibTeX{} to produce your references please
+customize its bibliography style according to the things mentioned
+above.
+
+\chapter{Postscriptum}
+
+We include a file named mathsing.dem on the diskette containing the
+\TeX{} -- input for an example of a text being formatted with the
+MathSing style-file.
+\end{document}
+ \ No newline at end of file
diff --git a/obsolete/macros/latex209/contrib/springer/mathsing/mathsing.sty b/obsolete/macros/latex209/contrib/springer/mathsing/mathsing.sty
new file mode 100644
index 0000000000..8d888fa76b
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/mathsing/mathsing.sty
@@ -0,0 +1,934 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% MATHSING.STY Version 1.1
+%
+% This LaTeX style option file contains necessary macros for writing
+% camera ready english single author math book manuscripts.
+%
+%
+% Usage:
+%
+% \documentstyle[12pt,mathsing]{book}
+% ...
+%
+% Change log:
+%
+% 90/11/04 pagestyle empty for first page of chapter
+% 90/11/04 distinct figure and table captions
+% 90/11/04 \small for captions and headings
+% 90/11/04 improved definition of theorem-like environments
+% 90/12/01 separation after chapter title changed to 5.1cm
+% 90/12/01 page size changed to 45x14.4+10pt=23.05cm
+% 90/12/01 references
+% 90/12/01 common counter for theorem-like environments
+% 90/12/02 table of contents
+% 90/12/02 final improvements and corrections
+% 90/12/26 two styles for equation numbers
+% 91/02/05 \numberlikebook and \numberlikearticle replace
+% \eqnbook and \eqnarticle
+% 91/10/07 \listoffigures, \listoftables made similar to
+% \tableofcontents,
+% running head of Index changed: Sachverzeichnis -> Index,
+% \newthe now uses \thechapter instead of \arabic{chapter}
+% 91/02/05 binding: \tablebook, \tablearticle
+% \figurebook, \figurearticle added
+% 91/10/07 holzwarth: \listoffigures, \listoftables
+% according to \tableofcontents,
+% \begin{theindex}
+% \newthe to produce correct numbers
+% 91/12/03 \chapter, \section, and \subsection now do not
+% hyphenate the headings any more
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% change the catcode of @ (allows names containing @ after \begin{document})
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\makeatletter
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% page layout and dimensions
+%
+% The following commands are redefined:
+%
+% \ps@headings (cf. BOOK.STY)
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%
+% Layout
+%
+% Note: The following values do not apply for English Springer
+% books on phsics; use \baselineskip=14pt, \textwidth=13.8cm,
+% \textheight=640pt (=45x14pt+10pt=22.5cm) instead!
+%
+
+\baselineskip=14.4pt % LaTeX default
+
+\topmargin=0cm
+\textwidth=14.2cm % 1.2 x 11.833 cm
+\textheight=658pt % 45x14.4pt+10pt = 658pt = 23.0554cm
+%\textheight=23.2502cm % 1.2x19.3752cm=23.2502cm (first version)
+\oddsidemargin=0.7cm
+\evensidemargin=0.7cm
+\headsep=20pt % ?
+
+\parindent=7mm % 1.2 x 5.833mm
+
+\hfuzz=2pt % supress "overfull box" messages below 2pt
+
+\frenchspacing % no large blanks at the end of a sentence
+
+
+\tolerance=500
+
+\abovedisplayskip=3.6 mm plus7.2pt minus 4.8pt
+\belowdisplayskip=3.6 mm plus7.2pt minus 4.8pt
+\abovedisplayshortskip=0.0 mm plus7.2pt minus 2.4pt
+\belowdisplayshortskip=2.4 mm plus4.8pt minus 4.8pt
+
+\predisplaypenalty=0 % penalties for page break
+\clubpenalty=10000 %
+\widowpenalty=10000 %
+
+
+%
+% running titles
+%
+
+% binding 5.2.91 \hspace changed to 1.0 cm | |
+% binding 5.2.91 dot deleted after \thesection |
+\def\ps@headings{
+ \let\@mkboth\markboth
+ \def\@oddfoot{}
+ \def\@evenfoot{}
+ \def\@evenhead{\rm\small\thepage\hspace{1.0cm}\leftmark\hfil\hbox{}}
+ \def\@oddhead{\hbox{}\hfil\rm\small\rightmark\hspace{1.0cm}\thepage}
+ \def\chaptermark##1{\markboth
+ {\ifnum \c@secnumdepth >\m@ne \thechapter.\ \fi ##1}{}}
+%hier punkt raus. binding |
+ \def\sectionmark##1{\markright
+ {\ifnum \c@secnumdepth >\z@ \thesection\ \fi ##1}}
+ }
+
+\pagestyle{headings}
+
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Chapters and Sections
+%
+% The following commands are redefined:
+%
+% \@makechapterhead (cf. BK12.STY)
+% \@makeschapterhead (cf. BK12.STY)
+% \chapter (cf. BK12.STY)
+% \@sect (cf. LATEX.TEX)
+% \section (cf. BK12.STY)
+% \subsection (cf. BK12.STY)
+% \subsubsection (cf. BK12.STY)
+% \paragraph (cf. BK12.STY)
+% \subparagraph (cf. BK12.STY)
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%
+% number of numbered section levels
+%
+
+\setcounter{secnumdepth}{3}
+
+
+%
+% Adapt the font size for chapter titles and supress printing of
+% the word "chapter"
+%
+
+\def\@makechapterhead#1{ { \parindent 0pt \raggedright
+% \pretolerance added 12/3/91 fuh
+{\pretolerance=10000\Large \bf \thechapter.\hspace{0.3cm}#1\par}%
+ \nobreak \vskip 4cm \vskip\baselineskip} }
+
+\def\@makeschapterhead#1{ { \parindent 0pt \raggedright
+% \pretolerance added 12/3/91 fuh
+ \pretolerance=10000\Large \bf #1\par
+ \nobreak \vskip 4cm \vskip\baselineskip} }
+
+%
+% define pagestyle=empty for first page of a chapter
+%
+
+\def\chapter{\cleardoublepage \thispagestyle{empty} \global\@topnum\z@
+\@afterindentfalse \secdef\@chapter\@schapter}
+
+%
+% Change the distance between section number and title from 1em to 2mm
+% binding: changed again to 1en=0.5em | 5.2.91
+%
+
+\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
+ \def\@svsec{}\else
+ \refstepcounter{#1}%
+ \edef\@svsec{\csname the#1\endcsname\hskip 0.5em }\fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #6\relax
+% changed by Binding :) 20.3.91
+% old: \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\par}
+% \@hangfrom deleted to avoid hanging indentation \noindent added
+ {\noindent\hskip #3\relax\@svsec}%
+ {\interlinepenalty \@M #8\par}
+ \endgroup
+ \csname #1mark\endcsname{#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #7}\else
+ \def\@svsechd{#6\hskip #3\@svsec #8\csname #1mark\endcsname
+ {#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #7}}\fi
+ \@xsect{#5}}
+
+
+%
+% Font size for section titles;
+% Increased vertical space before and after sections, subsections
+% and subsubsections by 1ex; run-in headings starting with subsubsection
+%
+% (\@startsection{NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE})
+%
+
+%binding, 18.3.91: \boldmath inserted
+\def\section{\@startsection{section}{1}{\z@}{
+ -4.50ex plus -1ex minus -.2ex}{3.3ex plus .2ex}
+ {\large\bf\boldmath\raggedright\pretolerance=10000}}
+% \raggedright and \pretolerance added 12/3/91 fuh
+\def\subsection{\@startsection{subsection}{2}{\z@}{
+ -4.25ex plus -1ex minus -.2ex}{2.5ex plus .2ex}
+ {\normalsize\bf\boldmath\raggedright\pretolerance=10000}}
+% \raggedright and \pretolerance added 12/3/91 fuh
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{
+ -3.25ex plus -1ex minus -.2ex}{-0.5em}
+ {\normalsize\bf\boldmath}}
+\def\paragraph{\@startsection{paragraph}{4}{\z@}{
+ -3.25ex plus -1ex minus -.2ex}{-0.5em}{\normalsize\it}}
+\def\subparagraph{\@startsection{subparagraph}{5}{\@}{
+ -3.25ex plus -1ex minus -.2ex}{-0.5em}{\normalsize\it}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%20.3.91, binding: \labelitemi changed
+\renewcommand{\labelitemi}{$\bullet$}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Tables
+%
+% Change width of horizontal and vertical lines in arrays and tables
+%
+% The following commands are redefined:
+%
+% \arrayrulewidth
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\arrayrulewidth0.15mm
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Figure and table captions (small)
+%
+% To meet the different requirements for table and figure captions
+% new macros \@makefigurecaption and \@maketablecaption are introduced
+% in addition to \@makecaption (cf. BOOK.STY). The \@caption macro is
+% changed to check for figures and tables.
+%
+% The following commands are redefined:
+%
+% \@caption (cf. LATEX.TEX)
+% \fnum@figure (cf. BOOK.STY)
+% \fnum@table (cf. BOOK.STY)
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\long\def\@caption#1[#2]#3{\addcontentsline{\csname
+ ext@#1\endcsname}{#1}{\protect\numberline{\csname
+ the#1\endcsname}{\ignorespaces #2}}\par
+ \begingroup
+ \@parboxrestore
+ \normalsize
+ \csname @make#1caption\endcsname
+ {\csname fnum@#1\endcsname}{\ignorespaces #3}\par
+ \endgroup}
+
+\long\def\@makefigurecaption#1#2{
+ \vskip 10pt % skip between figure and caption
+ {\small % required here for correct \baselineskip !
+ \setbox\@tempboxa\hbox{\small{\bf#1}#2}
+ \ifdim \wd\@tempboxa >\hsize
+ \unhbox\@tempboxa\par
+ \else
+ \hbox to\hsize{\hfil\box\@tempboxa\hfil} % centered short caption !
+ \fi}
+ \vskip 10pt} % additional space between caption and text
+
+\long\def\@maketablecaption#1#2{
+ \vskip 10pt % additional space between text and caption
+ {\small % required here for correct \baselineskip !
+ \setbox\@tempboxa\hbox{\small{\bf#1}#2}
+ \ifdim \wd\@tempboxa >\hsize
+ \unhbox\@tempboxa\par
+ \else \hbox to\hsize{\box\@tempboxa\hfil} % leftadjusted short caption !
+ \fi}
+ \vskip 10pt} % skip between caption and table
+
+\def\fnum@figure{Fig.$\,$\thefigure.$\;$}
+\def\fnum@table{Table$\,$\thetable.$\;$}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Distance between text and floatings (tables, figures)
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\floatsep 14pt plus 2pt minus 4pt % LaTeX defaults values
+\textfloatsep 20pt plus 2pt minus 4pt %
+\intextsep 14pt plus 4pt minus 4pt %
+\@maxsep 20pt %
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Table of contents
+%
+% The following commands are redefined:
+%
+% \l@chapter (cf. LATEX.STY)
+% \tableofcontents
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%
+% lowest level for table of contents entries
+%
+\setcounter{tocdepth}{3}
+
+%
+% dotted line for chapters in table of contents
+% (cf. definition of \@dottedline in LATEX.STY)
+%
+\def\l@chapter#1#2{\pagebreak[3]
+ \vskip 1.0em plus 1pt \@tempdima 1.5em \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \rm \leavevmode #1
+ \nobreak\leaders\hbox{$\m@th \mkern \@dotsep mu.\mkern \@dotsep mu$}\hfill
+ \nobreak
+ \hbox to\@pnumwidth{\hss \rm #2}\par
+ \endgroup}
+
+%
+% Adaption of \tableofcontents (title,headings,pagenumber)
+%
+
+\def\tableofcontents{
+ \@restonecolfalse
+ \if@twocolumn\@restonecoltrue\onecolumn\fi
+ \chapter*{Table of Contents}
+ \markboth{Table of Contents}{Table of Contents} % headline
+ \renewcommand{\thepage}{\Roman{page}} % roman page number
+ \@starttoc{toc}\if@restonecol\twocolumn\fi}
+
+%%%%%%%% added 91/10/07 fuh %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% List of figures
+%
+% The following commands are redefined:
+%
+% \listoffigures
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\def\listoffigures{
+ \@restonecolfalse
+ \if@twocolumn\@restonecoltrue\onecolumn\fi
+ \chapter*{List of Figures}
+ \markboth{List of Figures}{List of Figures} % headline
+ \renewcommand{\thepage}{\Roman{page}} % roman page number
+ \@starttoc{lof}\if@restonecol\twocolumn\fi}
+
+%%%%%%%% added 91/10/07 fuh %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% List of tables
+%
+% The following commands are redefined:
+%
+% \listoftables
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\def\listoftables{
+ \@restonecolfalse
+ \if@twocolumn\@restonecoltrue\onecolumn\fi
+ \chapter*{List of Tables}
+ \markboth{List of Tables}{List of Tables} % headline
+ \renewcommand{\thepage}{\Roman{page}} % roman page number
+ \@starttoc{lot}\if@restonecol\twocolumn\fi}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Index (with table of contents entry)
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\theindex{ \cleardoublepage
+ \small
+ \columnseprule \z@
+ \columnsep=0.84cm
+ \twocolumn[\@makeschapterhead{Index}]
+ \addcontentsline{toc}{chapter}{Index}
+ \@mkboth{Index}{Index}
+ \thispagestyle{plain}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+\def\@idxitem{\par\hangindent 15pt}
+\def\subitem{\par\hangindent 15pt -- }
+\def\endtheindex{\clearpage}
+\def\indexspace{\par \vskip 10pt plus 5pt minus 3pt\relax}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% References (Bibliography)
+%
+% Macros for creating a list of references in small print using LaTeX
+% defaults or some special Springer commands.
+%
+% Usage:
+%
+% \begin{thebibliography}{wide-label} % LaTeX standard macros
+% \bibitem[label]{name} ... text ...
+% \bibitem[label]{name} ... text ...
+% \end{thebibliography}
+%
+% or
+%
+% \begin{references}{wide-label} % Springer macros
+% \refer ... text ...
+% \refno{no.} ... text ...
+% \refmark{[label]} ... text ...
+% \end{references}
+%
+% New commands:
+%
+% \refchapter starts an unnumbered chapter "References"; small font
+% \refer unlabeled item with hanging indentation
+% \refno right adjusted label (for numbers)
+% \refmark left adjusted label (for text labels)
+%
+% Changed commands
+%
+% \thebibliography (BOOK.STY)
+% \endthebibliography (BOOK.STY)
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\refchapter{\chapter*{References}
+\parindent0pt\parskip0pt\small
+\addcontentsline{toc}{chapter}{References}
+\markboth{References}{References}}
+
+
+\def\thebibliography#1{\refchapter\list
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \labelsep0pt\advance\leftmargin\labelsep\itemsep0pt\parsep0pt
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus -.07em}
+ \sloppy
+ \sfcode`\.=1000\relax}
+\let\endthebibliography=\endlist
+
+
+\newenvironment{references}[1]{\refchapter
+ \settowidth\labelwidth{#1\enspace}
+ \begingroup}{\endgraf\endgroup}
+%
+% The following macros are from REFER.TEX.
+% \refindent is replaced by the predefined dimension \labelwidth
+% that is also used by \thebibliography; \ref is replaced by \refer
+% since \ref is already used for referencing lables!
+
+\newlinechar=`\|
+
+% \refer produces ordinary entries, successive line are indented 1em
+\def\refer{\goodbreak\hangindent1em\hangafter=1\noindent\ignorespaces}
+
+% \refno produces entries with right-aligned marks in the margin
+\def\refno#1{\goodbreak
+\setbox0=\hbox{#1\enspace}\ifdim\labelwidth<\wd0\relax
+\message{|Your reference `#1' is wider than you pretended in using
+\string\begref.}\fi
+\hangindent\labelwidth\hangafter=1\noindent
+\kern\labelwidth\llap{#1\enspace}\ignorespaces}
+
+% \refmark produces entries with left-aligned marks in the margin
+\def\refmark#1{\goodbreak
+\setbox0=\hbox{#1\enspace}\ifdim\labelwidth<\wd0\relax
+\message{|Your reference `#1' is wider than you pretended in using
+\string\begref.}\fi
+\hangindent\labelwidth\hangafter=1\noindent
+\hbox to\labelwidth{#1\hss}\ignorespaces}
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% New environments
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%
+% The following lines define a new environment 'listing'
+%
+% \begin{listing}
+% ...
+% \end{listing}
+%
+% that prints listings using \footnotesize and takes care to reset
+% the \baselineskip. The macro definition is based on ALLTT.STY that
+% allows various TEX commands to be given within the environment
+% (e.g. '\input', '\index' or '\it'). '%' has been retained as a special
+% character within 'listing', however, to avoid unwanted line breaks.
+%
+%
+
+\def\docspecials{\do\ \do\$\do\&%
+ \do\#\do\^\do\^^K\do\_\do\^^A\do\~}
+
+\newdimen\oldbaselineskip
+\def\listing{\par\noindent\oldbaselineskip=\baselineskip \footnotesize%
+\trivlist \item[]\if@minipage\else\vskip\parskip\fi
+\leftskip\@totalleftmargin\rightskip\z@
+\parindent\z@\parfillskip\@flushglue\parskip\z@
+\@tempswafalse \def\par{\if@tempswa\hbox{}\fi\@tempswatrue\@@par}
+\obeylines \tt \catcode``=13 \@noligs \let\do\@makeother \docspecials
+ \frenchspacing\@vobeyspaces}
+
+\def\endlisting{\endtrivlist\baselineskip=\oldbaselineskip}
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Acknowledgements ( = acknow.tex)
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\ack#1{\vskip11pt\begingroup\noindent{\it Acknowledgements\/}.
+\ignorespaces#1\vskip6pt\endgroup}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Definition of versal greek letters ( = ucgreek.tex)
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\mathchardef\Gamma="0100
+\mathchardef\Delta="0101
+\mathchardef\Theta="0102
+\mathchardef\Lambda="0103
+\mathchardef\Xi="0104
+\mathchardef\Pi="0105
+\mathchardef\Sigma="0106
+\mathchardef\Upsilon="0107
+\mathchardef\Phi="0108
+\mathchardef\Psi="0109
+\mathchardef\Omega="010A
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Vectors ( = vector.tex)
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% This is vector.tex
+% it redefines the plain TeX \vec command
+% to produce bold characters
+%
+\def\vec#1{\ifmmode
+\mathchoice{\mbox{\boldmath$\displaystyle\bf#1$}}
+{\mbox{\boldmath$\textstyle\bf#1$}}
+{\mbox{\boldmath$\scriptstyle\bf#1$}}
+{\mbox{\boldmath$\scriptscriptstyle\bf#1$}}\else
+{\mbox{\boldmath$\bf#1$}}\fi}
+%
+%\def\vec#1{{\textfont0=\tenbf\scriptfont0=\sevenbf
+%\scriptscriptfont0=\fivebf
+%\textfont1=\tenbf\scriptfont1=\sevenbf
+%\scriptscriptfont1=\fivebf
+%\ifmmode % supply all varieties of math sizes
+% \mathchoice{\hbox{$\displaystyle#1$}}{\hbox{$\textstyle#1$}}
+% {\hbox{$\scriptstyle#1$}}{\hbox{$\scriptscriptstyle#1$}}
+%\else\hbox{$#1$}\fi}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Symbols ( = symbols.tex )
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% This is symbols.tex
+% the symbols not available in plain TeX are constructed
+% by overprinting some characters
+
+\def\sun{{\hbox{$\odot$}}}
+\def\la{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr<\cr\noalign{\vskip1.5pt}\sim\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr<\cr
+\noalign{\vskip1.0pt}\sim\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr<\cr
+\noalign{\vskip0.5pt}\sim\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil
+\cr<\cr\noalign{\vskip0.5pt}\sim\cr}}}}}
+\def\ga{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr>\cr\noalign{\vskip1.5pt}\sim\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr>\cr
+\noalign{\vskip1.0pt}\sim\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr>\cr
+\noalign{\vskip0.5pt}\sim\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil
+\cr>\cr\noalign{\vskip0.5pt}\sim\cr}}}}}
+\def\sq{\hbox{\rlap{$\sqcap$}$\sqcup$}}
+\def\degr{\hbox{$^\circ$}}
+\def\arcmin{\hbox{$^\prime$}}
+\def\arcsec{\hbox{$^{\prime\prime}$}}
+\def\utw{\smash{\rlap{\lower5pt\hbox{$\sim$}}}}
+\def\udtw{\smash{\rlap{\lower6pt\hbox{$\approx$}}}}
+\def\fd{\hbox{$.\!\!^{\rm d}$}}
+\def\fh{\hbox{$.\!\!^{\rm h}$}}
+\def\fm{\hbox{$.\!\!^{\rm m}$}}
+\def\fs{\hbox{$.\!\!^{\rm s}$}}
+\def\fdg{\hbox{$.\!\!^\circ$}}
+\def\farcm{\hbox{$.\mkern-4mu^\prime$}}
+\def\farcs{\hbox{$.\!\!^{\prime\prime}$}}
+\def\fp{\hbox{$.\!\!^{\scriptscriptstyle\rm p}$}}
+\def\getsto{\mathrel{\mathchoice {\vcenter{\offinterlineskip
+\halign{\hfil$\displaystyle##$\hfil\cr\gets\cr\to\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr
+\gets\cr\to\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr
+\gets\cr\to\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+\gets\cr\to\cr}}}}}
+\def\cor{\mathrel{\mathchoice {\hbox{$\widehat=$}}{\hbox{$\widehat=$}}
+{\hbox{$\scriptstyle\hat=$}}
+{\hbox{$\scriptscriptstyle\hat=$}}}}
+\def\grole{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr>\cr\noalign{\vskip-1.5pt}<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr
+>\cr\noalign{\vskip-1.5pt}<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr
+>\cr\noalign{\vskip-1pt}<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+>\cr\noalign{\vskip-0.5pt}<\cr}}}}}
+\def\lid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr<\cr\noalign{\vskip1.5pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr<\cr
+\noalign{\vskip1pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr<\cr
+\noalign{\vskip0.5pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+<\cr\noalign{\vskip0.5pt}=\cr}}}}}
+\def\gid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr>\cr\noalign{\vskip1.5pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr>\cr
+\noalign{\vskip1pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr>\cr
+\noalign{\vskip0.5pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+>\cr\noalign{\vskip0.5pt}=\cr}}}}}
+\def\sol{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr\sim\cr\noalign{\vskip-0.2mm}<\cr}}}
+{\vcenter{\offinterlineskip
+\halign{\hfil$\textstyle##$\hfil\cr\sim\cr<\cr}}}
+{\vcenter{\offinterlineskip
+\halign{\hfil$\scriptstyle##$\hfil\cr\sim\cr<\cr}}}
+{\vcenter{\offinterlineskip
+\halign{\hfil$\scriptscriptstyle##$\hfil\cr\sim\cr<\cr}}}}}
+\def\sog{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr\sim\cr\noalign{\vskip-0.2mm}>\cr}}}
+{\vcenter{\offinterlineskip
+\halign{\hfil$\textstyle##$\hfil\cr\sim\cr>\cr}}}
+{\vcenter{\offinterlineskip
+\halign{\hfil$\scriptstyle##$\hfil\cr\sim\cr>\cr}}}
+{\vcenter{\offinterlineskip
+\halign{\hfil$\scriptscriptstyle##$\hfil\cr\sim\cr>\cr}}}}}
+\def\lse{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr<\cr\noalign{\vskip1.5pt}\simeq\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr<\cr
+\noalign{\vskip1pt}\simeq\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr<\cr
+\noalign{\vskip0.5pt}\simeq\cr}}}
+{\vcenter{\offinterlineskip
+\halign{\hfil$\scriptscriptstyle##$\hfil\cr<\cr
+\noalign{\vskip0.5pt}\simeq\cr}}}}}
+\def\gse{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr>\cr\noalign{\vskip1.5pt}\simeq\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr>\cr
+\noalign{\vskip1.0pt}\simeq\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr>\cr
+\noalign{\vskip0.5pt}\simeq\cr}}}
+{\vcenter{\offinterlineskip
+\halign{\hfil$\scriptscriptstyle##$\hfil\cr>\cr
+\noalign{\vskip0.5pt}\simeq\cr}}}}}
+\def\grole{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr>\cr\noalign{\vskip-1.5pt}<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr
+>\cr\noalign{\vskip-1.5pt}<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr
+>\cr\noalign{\vskip-1pt}<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+>\cr\noalign{\vskip-0.5pt}<\cr}}}}}
+\def\leogr{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr<\cr\noalign{\vskip-1.5pt}>\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr
+<\cr\noalign{\vskip-1.5pt}>\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr
+<\cr\noalign{\vskip-1pt}>\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+<\cr\noalign{\vskip-0.5pt}>\cr}}}}}
+\def\loa{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr<\cr\noalign{\vskip1.5pt}\approx\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr<\cr
+\noalign{\vskip1.0pt}\approx\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr<\cr
+\noalign{\vskip0.5pt}\approx\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+<\cr\noalign{\vskip0.5pt}\approx\cr}}}}}
+\def\goa{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr>\cr\noalign{\vskip1.5pt}\approx\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr>\cr
+\noalign{\vskip1.0pt}\approx\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr>\cr
+\noalign{\vskip0.5pt}\approx\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+>\cr\noalign{\vskip0.5pt}\approx\cr}}}}}
+\def\bbbr{{\rm I\!R}} %reelle Zahlen
+\def\bbbn{{\rm I\!N}} %natuerliche Zahlen
+\def\bbbm{{\rm I\!M}}
+\def\bbbh{{\rm I\!H}}
+\def\bbbf{{\rm I\!F}}
+\def\bbbk{{\rm I\!K}}
+\def\bbbp{{\rm I\!P}}
+\def\bbbone{{\mathchoice {\rm 1\mskip-4mu l} {\rm 1\mskip-4mu l}
+{\rm 1\mskip-4.5mu l} {\rm 1\mskip-5mu l}}}
+\def\bbbc{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}}}
+\def\bbbe{{\mathchoice {\setbox0=\hbox{\smalletextfont e}\hbox{\raise
+0.1\ht0\hbox to0pt{\kern0.4\wd0\vrule width0.3pt
+height0.7\ht0\hss}\box0}}
+{\setbox0=\hbox{\smalletextfont e}\hbox{\raise
+0.1\ht0\hbox to0pt{\kern0.4\wd0\vrule width0.3pt
+height0.7\ht0\hss}\box0}}
+{\setbox0=\hbox{\smallescriptfont e}\hbox{\raise
+0.1\ht0\hbox to0pt{\kern0.5\wd0\vrule width0.2pt
+height0.7\ht0\hss}\box0}}
+{\setbox0=\hbox{\smallescriptscriptfont e}\hbox{\raise
+0.1\ht0\hbox to0pt{\kern0.4\wd0\vrule width0.2pt
+height0.7\ht0\hss}\box0}}}}
+\def\bbbq{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle\rm Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle\rm Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}}}}
+\def\bbbt{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm
+T$}\hbox{\hbox to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle\rm T$}\hbox{\hbox
+to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle\rm T$}\hbox{\hbox
+to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm T$}\hbox{\hbox
+to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}}}
+\def\bbbs{{\mathchoice
+{\setbox0=\hbox{$\displaystyle \rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox
+to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle \rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox
+to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle \rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox
+to0pt{\kern0.5\wd0\vrule height0.45\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.4\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox
+to0pt{\kern0.55\wd0\vrule height0.45\ht0\hss}\box0}}}}
+
+%
+% note: changed \sans to \sf for LaTeX
+%
+
+\def\bbbz{{\mathchoice {\hbox{$\sf\textstyle Z\kern-0.4em Z$}}
+{\hbox{$\sf\textstyle Z\kern-0.4em Z$}}
+{\hbox{$\sf\scriptstyle Z\kern-0.3em Z$}}
+{\hbox{$\sf\scriptscriptstyle Z\kern-0.2em Z$}}}}
+
+\def\diameter{{\ifmmode\oslash\else$\oslash$\fi}}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% petit (substitute for petit.tex)
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+\newenvironment{petit}{\vskip6pt\begingroup\small}{\endgroup\vskip6pt}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% New environments
+%
+% lemma, proposition, theorem, corollary (\bf,\it) (numbered)
+% exercise, problem, solution, definition (\bf,\rm)
+% 27.3.91 binding: example, note and question changed to (\bf, \rm)
+%
+% lemma*, proposition*, theorem*, corollary* (\bf,\it) (unnumbered)
+% exercise*, problem*, solution*, definition* (\bf,\rm)
+% example*, note*, question* (\it,\rm)
+%
+% remark, proof (\it,\rm) (unnumbered)
+%
+% usage: \begin{lemma} or \begin{lemma}[COMMENT]
+% ... ...
+% \end{lemma} \end{lemma}
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% currently one counter is used for all theorem like environments
+
+\newcounter{lemmacount}[chapter]
+\renewcommand{\thelemmacount}{\thechapter.\arabic{lemmacount}}
+
+
+%
+% short form for defininng new theorem like environments:
+% \newthe{NAME}{NAME*}{TITLE}{COUNTER}{FONT1}{FONT2}
+%
+\def\@@begthe#1{\@ifnextchar[{\@optbegthe#1}{\@begthe#1}}
+%27.3.91 binding: dot deleted
+%def\@begthe#1{. #1} old
+\def\@begthe#1{ #1}
+\def\@optbegthe#1[#2]{ {#2} #1}
+\newcommand{\newthe}[6]{
+ \def\nlni{\par\ifvmode\removelastskip\fi\vskip\baselineskip\noindent}
+ \def\xxxend{\endgroup\vskip\baselineskip}
+ \newenvironment{#1}{\nlni\begingroup\refstepcounter{#4}#5#3
+%changed 91/10/7 fuh:\arabic{chapter}.\arabic{#4}\@@begthe{#6}}{\xxxend}
+ \thechapter.\arabic{#4}\@@begthe{#6}}{\xxxend}
+ \newenvironment{#2}{\nlni\begingroup#5#3\@@begthe{#6}}{\xxxend}}
+
+
+% Lemma, Proposition, Theorem, Corollary (\bf,\it)
+
+\newthe{lemma}{lemma*}{Lemma}{lemmacount}{\bf}{\it}
+\newthe{proposition}{proposition*}{Proposition}{lemmacount}{\bf}{\it}
+\newthe{theorem}{theorem*}{Theorem}{lemmacount}{\bf}{\it}
+\newthe{corollary}{corollary*}{Corollary}{lemmacount}{\bf}{\it}
+
+
+% Exercise, Problem, Solution, Definition (\bf,\rm)
+
+\newthe{exercise}{exercise*}{exercise}{lemmacount}{\bf}{\it}
+\newthe{problem}{problem*}{Problem}{lemmacount}{\bf}{\it}
+\newthe{solution}{solution*}{Solution}{lemmacount}{\bf}{\it}
+\newthe{definition}{definition*}{Definition}{lemmacount}{\bf}{\it}
+
+
+% Example, Note, Question (\bf,\rm)
+
+\newthe{example}{example*}{Example}{lemmacount}{\bf}{\rm}
+\newthe{note}{note*}{Note}{lemmacount}{\bf}{\rm}
+\newthe{question}{question*}{Question}{lemmacount}{\bf}{\rm}
+
+
+% Remark, Proof
+
+\newenvironment{remark}{\nlni\begingroup\it Remark. \rm}{
+ \endgroup\vskip\baselineskip}
+\newenvironment{proof}{\nlni\begingroup\it Proof. \rm}{
+ \endgroup\vskip\baselineskip}
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% qed
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\qed{\ifmmode\sq\else{\unskip\nobreak\hfil
+\penalty50\hskip1em\null\nobreak\hfil\sq
+\parfillskip=0pt\finalhyphendemerits=0\endgraf}\fi}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \eqnarticle simple equation numbers without chapter number
+% \eqnbook structured equation numbers (default)
+% changed by binding 5.2.91: changed to \numberlikearticle and
+% \numberlikebook, changing numbering of
+% figures and tables also.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\numberlikearticle{\global\def\theequation{\arabic{equation}}
+\global\def\thetable{\arabic{table}}
+\global\def\thefigure{\arabic{figure}}}
+\def\numberlikebook{\global\def\theequation{\thechapter.\arabic{equation}}
+\global\def\thetable{\thechapter.\arabic{table}}
+\global\def\thefigure{\thechapter.\arabic{figure}}}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Redeclaration of \makeatletter; no @-expressions may be used from now on
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\makeatother
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% End of MATHSING.STY
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+ \ No newline at end of file
diff --git a/obsolete/macros/latex209/contrib/springer/mathsing/read.me b/obsolete/macros/latex209/contrib/springer/mathsing/read.me
new file mode 100644
index 0000000000..1e813f9076
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/mathsing/read.me
@@ -0,0 +1,45 @@
+%%==================================================================%%
+%% %%
+%% %%
+%% LaTeX Style File %%
+%% %%
+%% Single - Author Mathematics %%
+%% %%
+%% %%
+%% (c) Springer-Verlag 1992 %%
+%% %%
+%% Version 1.1 %%
+%% %%
+%% %%
+%%==================================================================%%
+
+On this diskette or tape you find the following files:
+
+mathsing.sty LaTeX style file
+mathsing.doc This is the LaTeX source for the documentation.
+ Please LaTeX it.
+mathsing.dem example input file
+
+If you happen to find any bugs in our style file we would be very
+grateful if you could notify us. In order to help us reproduce the
+effects you report, please be so kind and provide us with LaTeX input,
+log-file and a short description of your "findings".
+
+We wish you happy TeXing and many thanks in advance.
+
+Springer-Verlag Heidelberg
+New Technologies / Product Development
+
+P.O. Box 105280
+W-6900 Heidelberg
+
+e-mail: SPRINGER@DHDSPRI6.bitnet
+
+
+All Springer macros are also available through our
+
+mailserver: SVSERV@DHDSPRI6.bitnet
+
+Send an e-mail just containing the word "help" to this e-mail
+address and you will receive further information.
+ \ No newline at end of file
diff --git a/obsolete/macros/latex209/contrib/springer/wics/wicread.me b/obsolete/macros/latex209/contrib/springer/wics/wicread.me
new file mode 100644
index 0000000000..1216c1751d
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/wics/wicread.me
@@ -0,0 +1,19 @@
+LATEX STYLE FILE FOR "WORKSHOPS IN COMPUTING" SERIES
+
+The style file on this disk is copyright
+(C) 1991 Springer-Verlag London Limited.
+
+It may be freely used for the production of papers intended for
+publication in the Springer "Workshops in Computing" series, and
+may be copied for this purpose.
+
+The file may not be used or copied for any other reason.
+
+We expect that authors will be able to suggest additions and
+improvements to this style file, and welcome any ideas. Please
+contact the Computing Editor or Associate Editor for Computing.
+
+Telephone (0) 81 947 5885
+Fax (0) 81 947 4651
+ (UK, international dialling code 44)
+
diff --git a/obsolete/macros/latex209/contrib/springer/wics/wicsadv.org b/obsolete/macros/latex209/contrib/springer/wics/wicsadv.org
new file mode 100644
index 0000000000..c24dda5614
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/wics/wicsadv.org
@@ -0,0 +1,97 @@
+%Please make the following changes to your source file
+%The file WICSBOOK.sty should be used as an option as follows
+%\documentstyle{FACS}
+\documentstyle[twoside,WICSBOOK]{article}
+%Please alter the \title command using \vspace{-3pc}\titlesize\bf as follows
+\title{\vspace{-3pc}\titlesize\bf This is an Example of a Title with only the
+Main Words in Capitals}
+
+%The address should be broken into "logical" units with each unit preceded by
+%\normalsize. Each author name should be preceded by the command \large as
+%shown.
+%\date{} removes the date of the last version of your paper.
+%In the case of multiple authors the "logical" units should be long enough to
+%avoid the authors/adresses being sided.
+
+\author{\large First Author\\
+\normalsize Institute or Department (optional), University or College\\
+\normalsize City and Country\and
+
+\large Second Author\\
+\normalsize Institute or Department (optional), University or College\\
+\normalsize City and Country \date{}}
+
+\begin{document}
+\maketitle
+%include \noindent and \ninesize in the abstract as shown
+
+\begin{abstract}\ninesize
+\noindent The text of the abstract, if there is one, or a 3 line space if an
+abstract is not supplied. The text of the abstract, if there is one, or a 3
+line space if an abstract is not supplied. The text of the abstract, if there
+is one, or a 3 line space if an abstract is not supplied. The text of the
+abstract, if there is one, or a 3 line space if an abstract is not supplied.
+
+The text of the abstract, if there is one, or a 3 line space if an abstract is
+not supplied. The text of the abstract, if there is one, or a 3 line space if
+an abstract is not supplied. The text of the abstract, if there is one, or a 3
+line space if an abstract is not supplied. The text of the abstract, if there
+is one, or a 3 line space if an abstract is not supplied. The text of the
+abstract, if there is one, or a 3 line space if an abstract is not supplied.
+The text of the abstract, if there is one, or a 3 line space if an abstract is
+not supplied. The text of the abstract, if there is one, or a 3 line space if
+an abstract is not supplied. \end{abstract} %The remainder of the file requires
+no special treatment.
+
+\section{Comments}
+Your cooperation in complying with the instructions provided in example.tex
+will add considerably to the overall appearance of the volume. Any suggestions
+that could improve the admittedly crude WICSBOOK.sty file would be appreciated
+and should be addressed to the publisher.
+
+\section{Example of a second level heading (the title is the first level)}
+
+\subsection{Example of a third level heading}
+
+\subsubsection{Example of a fourth level heading}
+A fifth level heading is indicated by a line space above with the
+heading in normal type not indented.
+
+A fifth level heading is indicated by a line space above with the heading in
+normal type not indented. {\bf Example of an equation}
+\[ x=\frac{y+2/2}{y^{2}+1}.\]
+{\bf The text following an equation is automatically indented unless the
+following is adopted}
+\[ x=\frac{y+2/2}{y^{2}+1}\]
+\noindent {\bf in which case the text is flush left.} A fifth level heading is
+indicated by a line space above with the heading in normal type not indented. A
+fifth level heading is indicated by a line space above with the heading in
+normal type not indented. {\bf Example of a reference. Either of \LaTeX\rq s
+systems may be adopted\ }\cite{ref1}. A fifth level heading is indicated by a
+line space above with the heading in normal type not indented. A fifth level
+heading is indicated by a line space above with the heading in normal type not
+
+\subsection{Example of a third level heading}
+indented. A fifth level heading is indicated by a line space above with the
+heading in normal type not indented. A fifth level heading is indicated by a
+line space above with the heading in normal type not
+indented. A fifth level heading is indicated by a line space above with the
+heading in normal type not indented.
+
+A fifth level heading is
+indicated by a line space above with the heading in normal type not
+indented. A fifth level heading is indicated by a line space above with the
+heading in normal type not indented. A fifth level heading is indicated by a
+line space above with the heading in normal type not
+indented. A fifth level heading is indicated by a line space above with the
+heading in normal type not indented. A fifth level heading is indicated by a
+line space above with the heading in normal type not indented. A fifth level
+heading is indicated by a line space above with the heading in normal type not
+indented.
+\begin{thebibliography}{1}
+\bibitem{ref1} A. Author, Paper title, Publication ({\bf if book} then page
+numbers, publisher details, date of publication) ({\bf if Journal} then vol.
+and page numbers
+\end{thebibliography}\end{document}
+
+
diff --git a/obsolete/macros/latex209/contrib/springer/wics/wicsadv.tex b/obsolete/macros/latex209/contrib/springer/wics/wicsadv.tex
new file mode 100644
index 0000000000..61cc8e0a89
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/wics/wicsadv.tex
@@ -0,0 +1,107 @@
+% WICSADV.TEX
+% Last modification : 30.10.91, M.Reed (CUP)
+
+% Please make the following changes to your source file.
+% The file WICSBOOK.sty should be used as an option as follows:
+
+\documentstyle[twoside,wicsbook]{article}
+
+% Please alter the \title command using \vspace{-3pc}\titlesize\bf as follows
+\title{\vspace{-3pc}\titlesize\bf This is an Example of a Title with only
+the Main Words in Capitals}
+
+% The address should be broken into "logical" units with each unit preceded
+% by \normalsize. Each author name should be preceded by the command \large
+% as shown.
+% \date{} removes the date of the last version of your paper.
+% In the case of multiple authors the "logical" units should be long enough
+% to avoid the authors/adresses being sided.
+
+\author{\large First Author\\
+ \normalsize Institute or Department (optional), University or College\\
+ \normalsize City and Country\and
+\large Second Author\\
+ \normalsize Institute or Department (optional), University or College\\
+ \normalsize City and Country \date{}}
+
+\begin{document}
+\maketitle
+% Include \noindent and \ninesize in the abstract as shown.
+
+\begin{abstract}\ninesize
+\noindent The text of the abstract, if there is one, or a 3 line space if an
+abstract is not supplied. The text of the abstract, if there is one, or a 3
+line space if an abstract is not supplied. The text of the abstract, if
+there is one, or a 3 line space if an abstract is not supplied. The text of
+the abstract, if there is one, or a 3 line space if an abstract is not
+supplied.
+
+The text of the abstract, if there is one, or a 3 line space if an abstract
+is not supplied. The text of the abstract, if there is one, or a 3 line
+space if an abstract is not supplied. The text of the abstract, if there
+is one, or a 3 line space if an abstract is not supplied. The text of the
+abstract, if there is one, or a 3 line space if an abstract is not supplied.
+The text of the abstract, if there is one, or a 3 line space if an abstract
+is not supplied. The text of the abstract, if there is one, or a 3 line space
+if an abstract is not supplied. The text of the abstract, if there is one, or
+a 3 line space if an abstract is not supplied.
+\end{abstract}
+
+% The remainder of the file requires no special treatment.
+
+\section{Comments}
+
+Your cooperation in complying with the instructions provided in example.tex
+will add considerably to the overall appearance of the volume. Any
+suggestions that could improve the admittedly crude WICSBOOK.sty file would
+be appreciated and should be addressed to the publisher.
+
+\section{Example of a second level heading (the title is the first level)}
+
+\subsection{Example of a third level heading}
+
+\subsubsection{Example of a fourth level heading}
+
+A fifth level heading is indicated by a line space above with the
+heading in normal type not indented.
+
+A fifth level heading is indicated by a line space above with the heading in
+normal type not indented. {\bf Example of an equation}
+\[ x=\frac{y+2/2}{y^{2}+1}.\]
+{\bf The text following an equation is automatically indented unless the
+following is adopted}
+\[ x=\frac{y+2/2}{y^{2}+1}\]
+\noindent {\bf in which case the text is flush left.} A fifth level heading
+is indicated by a line space above with the heading in normal type not
+indented. A fifth level heading is indicated by a line space above with the
+heading in normal type not indented. {\bf Example of a reference. Either of
+\LaTeX\rq s systems may be adopted\ }\cite{ref1}. A fifth level heading is
+indicated by a line space above with the heading in normal type not indented.
+A fifth level heading is indicated by a line space above with the heading in
+normal type not
+
+\subsection{Example of a third level heading}
+
+indented. A fifth level heading is indicated by a line space above with the
+heading in normal type not indented. A fifth level heading is indicated by
+a line space above with the heading in normal type not indented. A fifth
+level heading is indicated by a line space above with the heading in normal
+type not indented.
+
+A fifth level heading is indicated by a line space above with the heading in
+normal type not indented. A fifth level heading is indicated by a line space
+above with the heading in normal type not indented. A fifth level heading is
+indicated by a line space above with the heading in normal type not indented.
+A fifth level heading is indicated by a line space above with the heading in
+normal type not indented. A fifth level heading is indicated by a line space
+above with the heading in normal type not indented. A fifth level heading is
+indicated by a line space above with the heading in normal type not indented.
+
+\begin{thebibliography}{1}
+\bibitem{ref1} A. Author, Paper title, Publication ({\bf if book} then page
+numbers, publisher details, date of publication) ({\bf if Journal} then vol.
+and page numbers
+\end{thebibliography}
+
+\end{document}
+
diff --git a/obsolete/macros/latex209/contrib/springer/wics/wicsbook.org b/obsolete/macros/latex209/contrib/springer/wics/wicsbook.org
new file mode 100644
index 0000000000..02bd18faf4
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/wics/wicsbook.org
@@ -0,0 +1,58 @@
+%page numbers will be inserted by the printer
+\pagestyle{myheadings}\markboth{}{}
+\def\onesize{\@setsize\onesize{16pt}\xivpt\@xivpt}
+\def\twosize{\@setsize\onesize{14pt}\xiipt\@xiipt}
+\def\titlesize{\@setsize\titlesize{18pt}\xviipt\@xviipt}
+\def\ninesize{\@setsize\ninesize{10pt}\ixpt\@ixpt}
+\textwidth342pt
+%\textwidth29pc
+\textheight 46pc
+\renewcommand{\section}{\@startsection {section}{1}{\z@}{-3.5ex plus -1ex minus -.2ex}{2.3ex plus .2ex}{\onesize\bf}}
+\renewcommand{\subsection}{\@startsection{subsection}{2}{\z@}{-3.25ex plus -1ex minus -.2ex}{1.5ex plus .2ex}{\twosize\bf}}
+\renewcommand{\subsubsection}{\@startsection{subsubsection}{3}{\z@}{-3.25ex plus -1ex minus -.2ex}{1.5ex plus .2ex}{\normalsize\it}}
+\def\footnotesize{\@setsize\footnotesize{9pt}\viiipt\@viiipt
+\abovedisplayskip 6pt plus 2pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt\belowdisplayshortskip 3pt plus 1pt minus
+2pt
+\def\@listi{\leftmargin\leftmargini \topsep 3pt plus 1pt minus 1pt\parsep 2pt
+plus 1pt minus 1pt
+\itemsep \parsep}}
+\def\@normalsize{\@setsize\normalsize{11pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6pt plus3pt
+minus3pt\let\@listi\@listI}
+\def\footnoterule{\kern-3\p@
+ \hrule width 138pt
+ \kern 2.6\p@}
+%the following will indent equations
+\def\[{\relax\ifmmode\@badmath\else\bgroup\@beginparpenalty\predisplaypenalty
+ \@endparpenalty\postdisplaypenalty
+ \begin{trivlist}\item[]\leavevmode
+ \hbox to\linewidth\bgroup$ \displaystyle
+ \hskip\mathindent\bgroup\fi}
+\def\]{\relax\ifmmode \egroup $\hfil \egroup \end{trivlist}\egroup\else
+\@badmath \fi}
+\def\equation{\@beginparpenalty\predisplaypenalty
+ \@endparpenalty\postdisplaypenalty
+\refstepcounter{equation}\trivlist \item[]\leavevmode
+ \hbox to\linewidth\bgroup $ \displaystyle
+\hskip\mathindent}
+\def\endequation{$\hfil \displaywidth\linewidth\@eqnnum\egroup \endtrivlist}
+\def\eqnarray{\stepcounter{equation}\let\@currentlabel=\theequation
+\global\@eqnswtrue
+\global\@eqcnt\z@\tabskip\mathindent\let\\=\@eqncr
+\abovedisplayskip\topsep\ifvmode\advance\abovedisplayskip\partopsep\fi
+\belowdisplayskip\abovedisplayskip
+\belowdisplayshortskip\abovedisplayskip
+\abovedisplayshortskip\abovedisplayskip
+$$\halign to
+\linewidth\bgroup\@eqnsel\hskip\@centering$\displaystyle\tabskip\z@
+ {##}$&\global\@eqcnt\@ne \hskip 2\arraycolsep \hfil${##}$\hfil
+ &\global\@eqcnt\tw@ \hskip 2\arraycolsep $\displaystyle{##}$\hfil
+ \tabskip\@centering&\llap{##}\tabskip\z@\cr}
+\def\endeqnarray{\@@eqncr\egroup
+ \global\advance\c@equation\m@ne$$\global\@ignoretrue }
+\newdimen\mathindent
+\mathindent = 2 em
+
+
diff --git a/obsolete/macros/latex209/contrib/springer/wics/wicsbook.sty b/obsolete/macros/latex209/contrib/springer/wics/wicsbook.sty
new file mode 100644
index 0000000000..99683386ea
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/springer/wics/wicsbook.sty
@@ -0,0 +1,82 @@
+% WICSBOOK.STY
+% Last Modification : 30.10.91, M.Reed (CUP)
+
+% Modified \ps@myheadings, so that it never gives any page numbers.
+% The page numbers will be inserted by the printer.
+% ------------------- PAGE STYLES ----------------
+\def\ps@myheadings{%
+ \let\@mkboth\@gobbletwo%
+ \def\@oddhead{\hbox{}\sl\rightmark \hfil\rm}%
+ \def\@oddfoot{}%
+ \def\@evenhead{\rm \hfil\sl\leftmark\hbox{}}%
+ \def\@evenfoot{}%
+ \def\sectionmark##1{}%
+ \def\subsectionmark##1{}}
+% ------------------------------------------------
+
+\pagestyle{myheadings}%
+\markboth{}{}%
+
+\def\onesize{\@setsize\onesize{16pt}\xivpt\@xivpt}
+\def\twosize{\@setsize\onesize{14pt}\xiipt\@xiipt}
+\def\titlesize{\@setsize\titlesize{18pt}\xviipt\@xviipt}
+\def\ninesize{\@setsize\ninesize{10pt}\ixpt\@ixpt}
+\textwidth342pt
+%\textwidth29pc
+\textheight 46pc
+
+% Modified \section, \subsection and \subsubsection to have ragged right
+% headings.
+% ------------------- SECTIONS -------------------
+\renewcommand{\section}{\@startsection {section}{1}{\z@}%
+ {-3.5ex plus -1ex minus -.2ex}{2.3ex plus .2ex}{\onesize\raggedright\bf}}
+\renewcommand{\subsection}{\@startsection{subsection}{2}{\z@}%
+ {-3.25ex plus -1ex minus -.2ex}{1.5ex plus .2ex}{\twosize\raggedright\bf}}
+\renewcommand{\subsubsection}{\@startsection{subsubsection}{3}{\z@}%
+ {-3.25ex plus -1ex minus -.2ex}{1.5ex plus .2ex}{\normalsize\raggedright\it}}
+% ------------------------------------------------
+
+\def\footnotesize{\@setsize\footnotesize{9pt}\viiipt\@viiipt
+\abovedisplayskip 6pt plus 2pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt\belowdisplayshortskip 3pt plus 1pt minus
+2pt
+\def\@listi{\leftmargin\leftmargini \topsep 3pt plus 1pt minus 1pt\parsep 2pt
+plus 1pt minus 1pt
+\itemsep \parsep}}
+\def\@normalsize{\@setsize\normalsize{11pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6pt plus3pt
+minus3pt\let\@listi\@listI}
+\def\footnoterule{\kern-3\p@
+ \hrule width 138pt
+ \kern 2.6\p@}
+%the following will indent equations
+\def\[{\relax\ifmmode\@badmath\else\bgroup\@beginparpenalty\predisplaypenalty
+ \@endparpenalty\postdisplaypenalty
+ \begin{trivlist}\item[]\leavevmode
+ \hbox to\linewidth\bgroup$ \displaystyle
+ \hskip\mathindent\bgroup\fi}
+\def\]{\relax\ifmmode \egroup $\hfil \egroup \end{trivlist}\egroup\else
+\@badmath \fi}
+\def\equation{\@beginparpenalty\predisplaypenalty
+ \@endparpenalty\postdisplaypenalty
+\refstepcounter{equation}\trivlist \item[]\leavevmode
+ \hbox to\linewidth\bgroup $ \displaystyle
+\hskip\mathindent}
+\def\endequation{$\hfil \displaywidth\linewidth\@eqnnum\egroup \endtrivlist}
+\def\eqnarray{\stepcounter{equation}\let\@currentlabel=\theequation
+\global\@eqnswtrue
+\global\@eqcnt\z@\tabskip\mathindent\let\\=\@eqncr
+\abovedisplayskip\topsep\ifvmode\advance\abovedisplayskip\partopsep\fi
+\belowdisplayskip\abovedisplayskip
+\belowdisplayshortskip\abovedisplayskip
+\abovedisplayshortskip\abovedisplayskip
+$$\halign to
+\linewidth\bgroup\@eqnsel\hskip\@centering$\displaystyle\tabskip\z@
+ {##}$&\global\@eqcnt\@ne \hskip 2\arraycolsep \hfil${##}$\hfil
+ &\global\@eqcnt\tw@ \hskip 2\arraycolsep $\displaystyle{##}$\hfil
+ \tabskip\@centering&\llap{##}\tabskip\z@\cr}
+\def\endeqnarray{\@@eqncr\egroup
+ \global\advance\c@equation\m@ne$$\global\@ignoretrue }
+\newdimen\mathindent
+\mathindent = 2 em
diff --git a/obsolete/macros/latex209/contrib/stmary/README b/obsolete/macros/latex209/contrib/stmary/README
new file mode 100644
index 0000000000..9506136764
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/stmary/README
@@ -0,0 +1,10 @@
+This directory contains the LaTeX 2.09 packages for using the St
+Mary's Road math fonts. These packages are OBSOLETE and are NOT
+MAINTAINED. They have been replaced by the LaTeX2e packages in
+latex/contrib/supported/stmaryrd.
+
+These packages are supplied for `historical interest only'. I
+encourage anyone using these packages to upgrade to the latest version
+of LaTeX and to use the maintained stmaryrd package.
+
+Alan Jeffrey, 1 Oct 1994.
diff --git a/obsolete/macros/latex209/contrib/stmary/ltugboat.sty b/obsolete/macros/latex209/contrib/stmary/ltugboat.sty
new file mode 120000
index 0000000000..052eefff3e
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/stmary/ltugboat.sty
@@ -0,0 +1 @@
+../../../../../macros/latex209/contrib/tugboat/ltugboat.sty \ No newline at end of file
diff --git a/obsolete/macros/latex209/contrib/stmary/module.sty b/obsolete/macros/latex209/contrib/stmary/module.sty
new file mode 100644
index 0000000000..82e59c649f
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/stmary/module.sty
@@ -0,0 +1,267 @@
+%%% ====================================================================
+%%% @LaTeX-style-file{
+%%% author = "Alan Jeffrey",
+%%% version = "1.1",
+%%% date = "02 June 1992",
+%%% time = "14:51:35 BST",
+%%% filename = "module.sty",
+%%% address = "School of Cognitive and Computing Sciences
+%%% University of Sussex
+%%% Brighton BN1 9QH
+%%% UK",
+%%% telephone = "+44 273 606755 x 3238",
+%%% FAX = "+44 273 678188",
+%%% checksum = "59444 265 1437 10221",
+%%% email = "alanje@cogs.sussex.ac.uk",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "LaTeX module fonts",
+%%% supported = "yes",
+%%% abstract = "This is a document style option for
+%%% modularizing definitions",
+%%% docstring = "This is a document style option for
+%%% modularizing definitions. It is part of
+%%% the St Mary's Road font package, described
+%%% in stmaryrd.tex.
+%%%
+%%% Copyright 1992 Alan Jeffrey.
+%%%
+%%% The checksum field above contains a CRC-16
+%%% checksum as the first value, followed by the
+%%% equivalent of the standard UNIX wc (word
+%%% count) utility output of lines, words, and
+%%% characters. This is produced by Robert
+%%% Solovay's checksum utility.",
+%%% package = "St Mary's Road",
+%%% dependencies = "none",
+%%% }
+%%%
+%%% ====================================================================
+%%%
+%%% 23 May 1991, v1.0: Created file.
+%%%
+%%% 24 May 1991, v1.01: Hacked around with it quite a bit, redefined how
+%%% \iftag...\fi works, allowed \else, \isunsettag and conjunction.
+%%% Came up with the \modulefredloaded trick, implimented the settags
+%%% environment, rewrote some of the comments, defined tags so that
+%%% using one as a command causes an error message, changed the syntax
+%%% of \ifdef, and generally nicened it up a bit.
+%%%
+%%% 25 May 1991, v1.02: More hackery. Renamed \iftag to \iftest ... \then, and
+%%% reimplemented it. Renamed \issettag to \tagisset, ditto
+%%% \tagisunset. Introduced \truetest, \falsetest, \andtest, \ortest,
+%%% \nottest and \newfontselection. Went back to the original syntax
+%%% for \ifdef.
+%%%
+%%% 2 Jun 1992, v1.1: Added the file headers.
+
+% This style allows you to define modules for LaTeX, which the user can
+% then use all or none of, depending on their fancy. This is mainly
+% useful for loading in new symbol fonts, which may define over 200 new
+% commands, of which the user only wants a handful. At the moment, the
+% AMS gets round this by defining a command \newsymbol, but here we
+% present a more user-friendly way of getting the same effect.
+%
+% The main concept the user needs is that of a {\em tag\/} which is a
+% request to a module saying `please give me this facility'. Usually
+% these are just command names that the module will define---for
+% example the module stmaryrd has tags \varoplus, \bindnasrepma, and so
+% on. But there are other tags which control how the module behaves,
+% for example the tag \substitutefonts means `We don't have the
+% necessary fonts, please use substitutes instead.'
+%
+% To set the tag \foo, you say \settag{\foo}. To set \foo, \baz and
+% \bar, you can say \begin{settags} \foo\baz\bar \end{settags}.
+%
+% To unset the tag \foo, you say \unsettag{\foo}. To unset \foo, \baz
+% and \bar, you can say \begin{unsettags} \foo\baz\bar \end{unsettags}.
+%
+% You can then import a module. This can be done in various ways:
+%
+% a) By saying \import{fred}, which only loads the commands whose tags
+% you set.
+%
+% b) By saying \import*{fred}, which loads in all the commands.
+%
+% c) As a \documentstyle option, e.g. \documentstyle[module,fred]{article}.
+% This is equivalent to \import*{fred}.
+%
+% And that's it.
+
+% This all works by keeping a file fred.sty, which is loaded in when fred
+% is imported. This can have any sort of definition you like (including the
+% character @, which is made into a letter for the occasion). It should
+% include a command:
+%
+% \settag\modulefredloaded
+%
+% to tell other modules (including itself) that fred.sty has been loaded.
+% You also get a special command:
+%
+% \iftest <test> \then <true text> \fi
+%
+% or
+%
+% \iftest <test> \then <true text> \else <false text> \fi
+%
+% meaning `if the test is true, do the true text, otherwise do
+% the false text.' A test is of the form
+%
+% \truetest
+% \falsetest
+% \tagisset<tag>
+% \ortest{<test>}{<test>}
+% \andtest{<test>}{<test>}
+% \nottest{<test>}
+%
+% For example, there is a special tag called \everything, which is set if we
+% are meant to define every command we can. So if we are defining a
+% command \fred, we would like to test if either \fred or \everything has
+% been set. We can do this by saying
+%
+% \iftest \ortest{\tagisset\fred}{\tagisset\everything} \then \def\foo... \fi
+%
+% This is so common as to warrant its own syntactic sugar:
+%
+% \ifdef \then \def\foo... \fi
+%
+% You can also say \ifdef\then\mathchardef\foo...\fi,
+% \ifdef\then\let\foo...\fi, or any other defining command. Since
+% these are so common in modules, I've included the extra commands:
+%
+% \delimiterdef\foo"1234567 \textchardef\foo"123
+%
+% Another common usage is
+%
+% \iftest \tagisset\foo \then \settag\baz \fi
+%
+% meaning `If we are exporting \foo, we should export \baz as well.'
+% This sort of dependency information is so common as to warrant its own
+% syntactic sugar:
+%
+% \dependent\foo\baz
+%
+% Note that since modules may well be loaded in more than once, you have
+% to make sure your commands can be obeyed many times. To get round
+% this, the module `fred' can look at the value of \modulefredloaded to
+% see whether or not it's been loaded before. For example, if you have
+% some sensitive definitions (such as loading fonts) which shoudn't be
+% done more than once, you can say (before setting \modulefredloaded):
+%
+% \iftest \tagisunset\modulefredloaded \then ...sensitive material... \fi
+%
+% If your module does some font loading, it can look at the tag
+% \newfontselection to see whether the new font selection scheme has been
+% installed.
+
+% So how is this all done? Well, the name of the game is to use TeX's
+% primitive \if ... \fi constructs in such a way that they always group
+% nicely. So a <test> is a command that expands out to either \iftrue
+% or \iffalse. NB: \iffalse and \iftrue are *not* valid tests, as they'd
+% foul up the \if...\fi matching.
+
+\def\truetest{\iftrue}
+\def\falsetest{\iffalse}
+
+\def\ortest#1{#1\expandafter\K@true\else\expandafter\@identity\fi}
+\def\@identity#1{#1}
+\def\K@true#1{\iftrue}
+
+\def\andtest#1#2{#1\@fi#2}
+\def\@fi{\fi}
+
+\def\nottest#1{#1\expandafter\falsetest\else\expandafter\truetest\fi}
+
+% Then all that \iftest...\then has to do is expand out the test.
+
+\def\iftest#1\then{#1}
+
+% In order to make sure that \if ... \fi matching works properly, we need
+% to define \then to be an \if-like command.
+
+\let\then\iftrue
+
+% To test whether a tag is set or not we just look to see if it
+% is the same as \magic@value.
+
+\def\tagisset#1{\ifx\magic@value#1}
+
+% So to set a tag, we just \let it to \magic@value.
+
+\def\settag#1{\let#1\magic@value}
+\def\unsettag#1{\let#1\unmagic@value}
+
+% If the user says something like \settag\foo \import{fred} but fred
+% doesn't define \foo, we'd like some way of failing gracefully. We do
+% this by defining \magic@value and \unmagic@value to produce error messages.
+
+\def\magic@value{\set@error}
+\def\set@error{\@latexerr{This command is a set tag}{You just used a tag
+ where LaTeX expected an ordinary command.^^JIf you press return now, I'll
+ ignore the tag.^^JSee `A module system for LaTeX' by Alan Jeffrey for
+ details.}}
+
+\def\unmagic@value{\unset@error}
+\def\unset@error{\@latexerr{This command is an unset tag}{You just used a tag
+ where LaTeX expected an ordinary command.^^JIf you press return now, I'll
+ ignore the tag.^^JSee `A module system for LaTeX' by Alan Jeffrey for
+ details.}}
+
+% Then \ifdef and \dependent are just syntactic sugar, speeded up a bit.
+
+\def\ifdef\then#1#2%
+ {\tagisset\everything\expandafter\iftrue
+ \else\expandafter\tagisset\expandafter#2\fi#1#2}
+\def\dependent#1#2%
+ {\tagisset#1\settag#2\fi}
+
+% The settags and unsettags environments:
+
+\def\settags#1%
+ {\ifx#1\end\expandafter\end\else\settag#1\expandafter\settags\fi}
+\def\unsettags#1%
+ {\ifx#1\end\expandafter\end\else\unsettag#1\expandafter\unsettags\fi}
+
+% The trouble with \import is getting it to save the current values of
+% \everything and the catcode for @ correctly. Oh, if only I could
+% use TeX grouping for this, but I can't, because the font selection
+% scheme doesn't allow you to load fonts globally. Oh well.
+
+\def\import
+ {\@ifstar{\@import\settag}{\@import\unsettag}}
+\def\@import#1#2%
+ {\tagisset\everything
+ \def\next{\@@import{#2}\settag\everything}\else
+ \def\next{\@@import{#2}\unsettag\everything}\fi
+ #1\everything\next}
+\def\@@import#1%
+ {\edef\next{\noexpand\@@input #1.sty
+ \catcode`\noexpand\@\the\catcode`\@}\makeatletter\next}
+
+% We need to set \everything initially, so that if a module is read in
+% as a .sty file, it behaves like \import*{fred}.
+
+\settag\everything
+
+% And to be a well-behaved module, we should set \modulemoduleloaded.
+
+\settag\modulemoduleloaded
+
+% Look to see if \selectfont is defined (as a check for whether we're
+% using the new font selection scheme).
+
+\@ifundefined{selectfont}{}{\settag\newfontselection}
+
+% Old-fashioned LaTeX didn't have this:
+
+\def\hexnumber@#1{\ifcase#1 \z@
+ \or \@ne \or \tw@ \or \thr@@
+ \or 4\or 5\or 6\or 7\or 8\or
+ 9\or A\or B\or C\or D\or E\or F\fi}
+
+% A few extra commands for definitions:
+
+\def\textchardef#1"#2#3#4{\edef#1{\noexpand\mathhexbox#2#3#4}}
+\def\delimiterdef#1"#2#3#4#5#6#7#8{\edef#1{\delimiter"#2#3#4#5#6#7#8 }}
+
+% And that's that.
+
diff --git a/obsolete/macros/latex209/contrib/stmary/msam.sty b/obsolete/macros/latex209/contrib/stmary/msam.sty
new file mode 100644
index 0000000000..277709a1bf
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/stmary/msam.sty
@@ -0,0 +1,285 @@
+%%% ====================================================================
+%%% @LaTeX-style-file{
+%%% author = "Alan Jeffrey",
+%%% version = "1.1",
+%%% date = "02 June 1992",
+%%% time = "14:58:36 BST",
+%%% filename = "msam.sty",
+%%% address = "School of Cognitive and Computing Sciences
+%%% University of Sussex
+%%% Brighton BN1 9QH
+%%% UK",
+%%% telephone = "+44 273 606755 x 3238",
+%%% FAX = "+44 273 678188",
+%%% checksum = "23694 285 580 10809",
+%%% email = "alanje@cogs.sussex.ac.uk",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "LaTeX fonts AMS",
+%%% supported = "yes",
+%%% abstract = "This module imports the AMS A symbol font.",
+%%% docstring = "This module imports the AMS A symbol font.
+%%% It uses the module document style option,
+%%% which allows symbols to be loaded
+%%% individually, thus bypassing the need for
+%%% \newsymbol, and for the user to need to
+%%% know where each symbol is in the font
+%%% layout.
+%%%
+%%% It is described in stmaryrd.tex.
+%%%
+%%% Copyright 1992 Alan Jeffrey.
+%%%
+%%% The checksum field above contains a CRC-16
+%%% checksum as the first value, followed by the
+%%% equivalent of the standard UNIX wc (word
+%%% count) utility output of lines, words, and
+%%% characters. This is produced by Robert
+%%% Solovay's checksum utility.",
+%%% package = "St Mary's Road",
+%%% dependencies = "module.sty",
+%%% }
+%%% ====================================================================
+%%%
+%%% 23 May 1991, v1.01: file created.
+%%%
+%%% 21 Jun 1991, v1.02: Updated for the new module.sty.
+%%%
+%%% 7 Jul 1991, v1.03: Added \sqsubset and \sqsupset.
+%%%
+%%% 15 Aug 1991, v1.04: Added \checkmark.
+%%%
+%%% 2 Jun 1992, v1.1: Added the headers.
+
+% This is the module for importing the AMS A symbol font.
+% It's pretty incomplete at the moment, and specifically doesn't
+% understand the \substitutesymbols tag.
+%
+% But it's a start.
+
+\@ifundefined{modulemoduleloaded}{\input module.sty}{}
+
+% The first time the module is loaded, we grab the fonts.
+
+\iftest \tagisset\modulemsamloaded \then \else
+
+ \iftest \tagisset\newfontselection \then
+
+ \new@mathgroup\msa@group
+ \define@mathgroup\mv@normal\msa@group{msa}{m}{n}
+ \define@mathgroup\mv@bold\msa@group{msa}{m}{n}
+
+ \new@fontshape{msa}{m}{n}{%
+ <5>msam5%
+ <6>msam6%
+ <7>msam7%
+ <8>msam8%
+ <9>msam9%
+ <10>msam10%
+ <11>msam10 at10.95pt%
+ <12>msam10 at12pt%
+ <14>msam10 at14.4pt%
+ <17>msam10 at17.28pt%
+ <20>msam10 at20.736pt%
+ <25>msam10 at24.8832pt}{}
+
+ \else
+
+ \newfam\msa@group
+
+ \font\msamfiv msam5
+ \font\msamsix msam6
+ \font\msamsev msam7
+ \font\msamegt msam8
+ \font\msamnin msam9
+ \font\msamten msam10
+ \font\msamelv msam10 at10.95pt
+ \font\msamtwl msam10 at12pt
+ \font\msamfrtn msam10 at14.4pt
+ \font\msamsvtn msam10 at17.28pt
+ \font\msamtwty msam10 at20.736pt
+ \font\msamtwfv msam10 at24.8832pt
+
+ \@addfontinfo\@vpt{\textfont\msa@group\msamfiv
+ \scriptfont\msa@group\msamfiv
+ \scriptscriptfont\msa@group\msamfiv}
+ \@addfontinfo\@vipt{\textfont\msa@group\msamsix
+ \scriptfont\msa@group\msamsix
+ \scriptscriptfont\msa@group\msamsix}
+ \@addfontinfo\@viipt{\textfont\msa@group\msamsev
+ \scriptfont\msa@group\msamsix
+ \scriptscriptfont\msa@group\msamfiv}
+ \@addfontinfo\@viiipt{\textfont\msa@group\msamegt
+ \scriptfont\msa@group\msamsix
+ \scriptscriptfont\msa@group\msamfiv}
+ \@addfontinfo\@ixpt{\textfont\msa@group\msamnin
+ \scriptfont\msa@group\msamsix
+ \scriptscriptfont\msa@group\msamfiv}
+ \@addfontinfo\@xpt{\textfont\msa@group\msamten
+ \scriptfont\msa@group\msamsev
+ \scriptscriptfont\msa@group\msamfiv}
+ \@addfontinfo\@xipt{\textfont\msa@group\msamelv
+ \scriptfont\msa@group\msamsev
+ \scriptscriptfont\msa@group\msamfiv}
+ \@addfontinfo\@xiipt{\textfont\msa@group\msamtwl
+ \scriptfont\msa@group\msamegt
+ \scriptscriptfont\msa@group\msamsix}
+ \@addfontinfo\@xivpt{\textfont\msa@group\msamfrtn
+ \scriptfont\msa@group\msamten
+ \scriptscriptfont\msa@group\msamsev}
+ \@addfontinfo\@xviipt{\textfont\msa@group\msamsvtn
+ \scriptfont\msa@group\msamtwl
+ \scriptscriptfont\msa@group\msamten}
+ \@addfontinfo\@xxpt{\textfont\msa@group\msamtwty
+ \scriptfont\msa@group\msamfrtn
+ \scriptscriptfont\msa@group\msamtwl}
+ \@addfontinfo\@xxvpt{\textfont\msa@group\msamtwfv
+ \scriptfont\msa@group\msamtwty
+ \scriptscriptfont\msa@group\msamsvtn}
+ \fi
+
+\fi
+
+% For the rest of the style, ! is the hex number of the family.
+
+\catcode`\!\active
+\edef!{\hexnumber@\msa@group}
+
+% Then we load those symbols!
+
+\ifdef\then\mathchardef\square"0!03\fi
+\ifdef\then\mathchardef\blacksquare"0!04\fi
+\ifdef\then\mathchardef\lozenge"0!06\fi
+\ifdef\then\mathchardef\blacklozenge"0!07\fi
+\ifdef\then\mathchardef\backprime"0!38\fi
+\ifdef\then\mathchardef\bigstar"0!46\fi
+\ifdef\then\mathchardef\blacktriangledown"0!48\fi
+\ifdef\then\mathchardef\blacktriangle"0!4E\fi
+\ifdef\then\mathchardef\triangledown"0!4F\fi
+\ifdef\then\mathchardef\measuredangle"0!5D\fi
+\ifdef\then\mathchardef\sphericalangle"0!5E\fi
+\ifdef\then\mathchardef\circledS"0!73\fi
+\ifdef\then\mathchardef\complement"0!7B\fi
+
+\ifdef\then\mathchardef\boxdot"2!00\fi
+\ifdef\then\mathchardef\boxplus"2!01\fi
+\ifdef\then\mathchardef\boxtimes"2!02\fi
+\ifdef\then\mathchardef\centerdot"2!05\fi
+\ifdef\then\mathchardef\boxminus"2!0C\fi
+\ifdef\then\mathchardef\veebar"2!59\fi
+\ifdef\then\mathchardef\barwedge"2!5A\fi
+\ifdef\then\mathchardef\doublebarwedge"2!5B\fi
+\ifdef\then\mathchardef\Cup"2!64\fi
+\ifdef\then\mathchardef\doublecup"2!64\fi
+\ifdef\then\mathchardef\Cap"2!65\fi
+\ifdef\then\mathchardef\doublecap"2!65\fi
+\ifdef\then\mathchardef\curlywedge"2!66\fi
+\ifdef\then\mathchardef\curlyvee"2!67\fi
+\ifdef\then\mathchardef\leftthreetimes"2!68\fi
+\ifdef\then\mathchardef\rightthreetimes"2!69\fi
+\ifdef\then\mathchardef\dotplus"2!75\fi
+\ifdef\then\mathchardef\intercal"2!7C\fi
+\ifdef\then\mathchardef\circledcirc"2!7D\fi
+\ifdef\then\mathchardef\circledast"2!7E\fi
+\ifdef\then\mathchardef\circleddash"2!7F\fi
+
+\ifdef\then\mathchardef\circlearrowright"3!08\fi
+\ifdef\then\mathchardef\circlearrowleft"3!09\fi
+\ifdef\then\mathchardef\rightleftharpoons"3!0A\fi
+\ifdef\then\mathchardef\leftrightharpoons"3!0B\fi
+\ifdef\then\mathchardef\twoheadrightarrow"3!10\fi
+\ifdef\then\mathchardef\twoheadleftarrow"3!11\fi
+\ifdef\then\mathchardef\leftleftarrows"3!12\fi
+\ifdef\then\mathchardef\rightrightarrows"3!13\fi
+\ifdef\then\mathchardef\upuparrows"3!14\fi
+\ifdef\then\mathchardef\downdownarrows"3!15\fi
+\ifdef\then\mathchardef\upharpoonright"3!16\fi
+\ifdef\then\mathchardef\restriction"3!16\fi
+\ifdef\then\mathchardef\downharpoonright"3!17\fi
+\ifdef\then\mathchardef\upharpoonleft"3!18\fi
+\ifdef\then\mathchardef\downharpoonleft"3!19\fi
+\ifdef\then\mathchardef\rightarrowtail"3!1A\fi
+\ifdef\then\mathchardef\leftarrowtail"3!1B\fi
+\ifdef\then\mathchardef\leftrightarrows"3!1C\fi
+\ifdef\then\mathchardef\rightleftarrows"3!1D\fi
+\ifdef\then\mathchardef\rightsquigarrow"3!20\fi
+\ifdef\then\mathchardef\leftrightsquigarrow"3!21\fi
+\ifdef\then\mathchardef\looparrowleft"3!22\fi
+\ifdef\then\mathchardef\looparrowright"3!23\fi
+\ifdef\then\mathchardef\Rrightarrow"3!56\fi
+\ifdef\then\mathchardef\Lleftarrow"3!57\fi
+
+\ifdef\then\mathchardef\Vdash"3!0D\fi
+\ifdef\then\mathchardef\Vvdash"3!0E\fi
+\ifdef\then\mathchardef\vDash"3!0F\fi
+\ifdef\then\mathchardef\Lsh"3!1E\fi
+\ifdef\then\mathchardef\Rsh"3!1F\fi
+\ifdef\then\mathchardef\circeq"3!24\fi
+\ifdef\then\mathchardef\succsim"3!25\fi
+\ifdef\then\mathchardef\gtrsim"3!26\fi
+\ifdef\then\mathchardef\gtrapprox"3!27\fi
+\ifdef\then\mathchardef\multimap"3!28\fi
+\ifdef\then\mathchardef\therefore"3!29\fi
+\ifdef\then\mathchardef\because"3!2A\fi
+\ifdef\then\mathchardef\doteqdot"3!2B\fi
+\ifdef\then\mathchardef\Doteq"3!2B\fi
+\ifdef\then\mathchardef\triangleq"3!2C\fi
+\ifdef\then\mathchardef\precsim"3!2D\fi
+\ifdef\then\mathchardef\lesssim"3!2E\fi
+\ifdef\then\mathchardef\lessapprox"3!2F\fi
+\ifdef\then\mathchardef\eqslantless"3!30\fi
+\ifdef\then\mathchardef\eqslantgtr"3!31\fi
+\ifdef\then\mathchardef\curlyeqprec"3!32\fi
+\ifdef\then\mathchardef\curlyeqsucc"3!33\fi
+\ifdef\then\mathchardef\preccurlyeq"3!34\fi
+\ifdef\then\mathchardef\leqq"3!35\fi
+\ifdef\then\mathchardef\leqslant"3!36\fi
+\ifdef\then\mathchardef\lessgtr"3!37\fi
+\ifdef\then\mathchardef\risingdotseq"3!3A\fi
+\ifdef\then\mathchardef\fallingdotseq"3!3B\fi
+\ifdef\then\mathchardef\succcurlyeq"3!3C\fi
+\ifdef\then\mathchardef\geqq"3!3D\fi
+\ifdef\then\mathchardef\geqslant"3!3E\fi
+\ifdef\then\mathchardef\gtrless"3!3F\fi
+\ifdef\then\mathchardef\sqsubset"3!40\fi
+\ifdef\then\mathchardef\sqsupset"3!41\fi
+\ifdef\then\mathchardef\vartriangleright"3!42\fi
+\ifdef\then\mathchardef\vartriangleleft"3!43\fi
+\ifdef\then\mathchardef\trianglerighteq"3!44\fi
+\ifdef\then\mathchardef\trianglelefteq"3!45\fi
+\ifdef\then\mathchardef\between"3!47\fi
+\ifdef\then\mathchardef\blacktriangleright"3!49\fi
+\ifdef\then\mathchardef\blacktriangleleft"3!4A\fi
+\ifdef\then\mathchardef\vartriangle"3!4D\fi
+\ifdef\then\mathchardef\eqcirc"3!50\fi
+\ifdef\then\mathchardef\lesseqgtr"3!51\fi
+\ifdef\then\mathchardef\gtreqless"3!52\fi
+\ifdef\then\mathchardef\lesseqqgtr"3!53\fi
+\ifdef\then\mathchardef\gtreqqless"3!54\fi
+\ifdef\then\mathchardef\varpropto"3!5F\fi
+\ifdef\then\mathchardef\smallsmile"3!60\fi
+\ifdef\then\mathchardef\smallfrown"3!61\fi
+\ifdef\then\mathchardef\Subset"3!62\fi
+\ifdef\then\mathchardef\Supset"3!63\fi
+\ifdef\then\mathchardef\subseteqq"3!6A\fi
+\ifdef\then\mathchardef\supseteqq"3!6B\fi
+\ifdef\then\mathchardef\bumpeq"3!6C\fi
+\ifdef\then\mathchardef\Bumpeq"3!6D\fi
+\ifdef\then\mathchardef\lll"3!6E\fi
+\ifdef\then\mathchardef\llless"3!6E\fi
+\ifdef\then\mathchardef\ggg"3!6F\fi
+\ifdef\then\mathchardef\gggtr"3!6F\fi
+\ifdef\then\mathchardef\pitchfork"3!74\fi
+\ifdef\then\mathchardef\backsim"3!76\fi
+\ifdef\then\mathchardef\backsimeq"3!77\fi
+
+\ifdef\then\textchardef\checkmark"!58\fi
+
+% Change the catcode of ! back to other.
+
+\catcode`\!=12
+
+% Set our own name:
+
+\settag\modulemsamloaded
+
+% And that's it.
diff --git a/obsolete/macros/latex209/contrib/stmary/msbm.sty b/obsolete/macros/latex209/contrib/stmary/msbm.sty
new file mode 100644
index 0000000000..806b18d30b
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/stmary/msbm.sty
@@ -0,0 +1,253 @@
+%%% ====================================================================
+%%% @LaTeX-style-file{
+%%% author = "Alan Jeffrey",
+%%% version = "1.1",
+%%% date = "02 June 1992",
+%%% time = "15:02:39 BST",
+%%% filename = "msbm.sty",
+%%% address = "School of Cognitive and Computing Sciences
+%%% University of Sussex
+%%% Brighton BN1 9QH
+%%% UK",
+%%% telephone = "+44 273 606755 x 3238",
+%%% FAX = "+44 273 678188",
+%%% checksum = "39778 253 543 9329",
+%%% email = "alanje@cogs.sussex.ac.uk",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "LaTeX fonts AMS",
+%%% supported = "yes",
+%%% abstract = "This module imports the AMS B symbol font.",
+%%% docstring = "This module imports the AMS B symbol font.
+%%% It uses the module document style option,
+%%% which allows symbols to be loaded
+%%% individually, thus bypassing the need for
+%%% \newsymbol, and for the user to need to
+%%% know where each symbol is in the font
+%%% layout.
+%%%
+%%% It is described in stmaryrd.tex.
+%%%
+%%% Copyright 1992 Alan Jeffrey.
+%%%
+%%% The checksum field above contains a CRC-16
+%%% checksum as the first value, followed by the
+%%% equivalent of the standard UNIX wc (word
+%%% count) utility output of lines, words, and
+%%% characters. This is produced by Robert
+%%% Solovay's checksum utility.",
+%%% package = "St Mary's Road",
+%%% dependencies = "module.sty",
+%%% }
+%%% ====================================================================
+%%%
+%%% 24 May 1991, v1.0: file created.
+%%%
+%%% 21 Jun 1991, v1.01: Updated for the new module.sty.
+%%%
+%%% 2 Jun 1992, v1.1: Added the file headers.
+
+% This is the module for importing the AMS B symbol font.
+% It's pretty incomplete at the moment, and specifically doesn't
+% understand the \substitutesymbols tag.
+%
+% But it's a start.
+
+\@ifundefined{modulemoduleloaded}{\input module.sty}{}
+
+% The first time the module is loaded, we grab the fonts.
+
+\iftest \tagisset\modulemsbmloaded \then \else
+
+ \iftest \tagisset\newfontselection \then
+
+ \new@mathgroup\msb@group
+ \define@mathgroup\mv@normal\msb@group{msb}{m}{n}
+ \define@mathgroup\mv@bold\msb@group{msb}{m}{n}
+
+ \new@fontshape{msb}{m}{n}{%
+ <5>msbm5%
+ <6>msbm6%
+ <7>msbm7%
+ <8>msbm8%
+ <9>msbm9%
+ <10>msbm10%
+ <11>msbm10 at10.95pt%
+ <12>msbm10 at12pt%
+ <14>msbm10 at14.4pt%
+ <17>msbm10 at17.28pt%
+ <20>msbm10 at20.736pt%
+ <25>msbm10 at24.8832pt}{}
+
+ \else
+
+ \newfam\msb@group
+
+ \font\msbmfiv msbm5
+ \font\msbmsix msbm6
+ \font\msbmsev msbm7
+ \font\msbmegt msbm8
+ \font\msbmnin msbm9
+ \font\msbmten msbm10
+ \font\msbmelv msbm10 at10.95pt
+ \font\msbmtwl msbm10 at12pt
+ \font\msbmfrtn msbm10 at14.4pt
+ \font\msbmsvtn msbm10 at17.28pt
+ \font\msbmtwty msbm10 at20.736pt
+ \font\msbmtwfv msbm10 at24.8832pt
+
+ \@addfontinfo\@vpt{\textfont\msb@group\msbmfiv
+ \scriptfont\msb@group\msbmfiv
+ \scriptscriptfont\msb@group\msbmfiv}
+ \@addfontinfo\@vipt{\textfont\msb@group\msbmsix
+ \scriptfont\msb@group\msbmsix
+ \scriptscriptfont\msb@group\msbmsix}
+ \@addfontinfo\@viipt{\textfont\msb@group\msbmsev
+ \scriptfont\msb@group\msbmsix
+ \scriptscriptfont\msb@group\msbmfiv}
+ \@addfontinfo\@viiipt{\textfont\msb@group\msbmegt
+ \scriptfont\msb@group\msbmsix
+ \scriptscriptfont\msb@group\msbmfiv}
+ \@addfontinfo\@ixpt{\textfont\msb@group\msbmnin
+ \scriptfont\msb@group\msbmsix
+ \scriptscriptfont\msb@group\msbmfiv}
+ \@addfontinfo\@xpt{\textfont\msb@group\msbmten
+ \scriptfont\msb@group\msbmsev
+ \scriptscriptfont\msb@group\msbmfiv}
+ \@addfontinfo\@xipt{\textfont\msb@group\msbmelv
+ \scriptfont\msb@group\msbmsev
+ \scriptscriptfont\msb@group\msbmfiv}
+ \@addfontinfo\@xiipt{\textfont\msb@group\msbmtwl
+ \scriptfont\msb@group\msbmegt
+ \scriptscriptfont\msb@group\msbmsix}
+ \@addfontinfo\@xivpt{\textfont\msb@group\msbmfrtn
+ \scriptfont\msb@group\msbmten
+ \scriptscriptfont\msb@group\msbmsev}
+ \@addfontinfo\@xviipt{\textfont\msb@group\msbmsvtn
+ \scriptfont\msb@group\msbmtwl
+ \scriptscriptfont\msb@group\msbmten}
+ \@addfontinfo\@xxpt{\textfont\msb@group\msbmtwty
+ \scriptfont\msb@group\msbmfrtn
+ \scriptscriptfont\msb@group\msbmtwl}
+ \@addfontinfo\@xxvpt{\textfont\msb@group\msbmtwfv
+ \scriptfont\msb@group\msbmtwty
+ \scriptscriptfont\msb@group\msbmsvtn}
+ \fi
+
+\fi
+
+% For the rest of the style, ! is the hex number of the family.
+
+\catcode`\!\active
+\edef!{\hexnumber@\msb@group}
+
+% Then we load those symbols!
+
+\ifdef\then\mathchardef\varnothing"0!3F\fi
+\ifdef\then\mathchardef\nexists"0!40\fi
+\ifdef\then\mathchardef\eth"0!67\fi
+\ifdef\then\mathchardef\beth"0!69\fi
+\ifdef\then\mathchardef\gimel"0!6A\fi
+\ifdef\then\mathchardef\daleth"0!6B\fi
+\ifdef\then\mathchardef\digamma"0!7A\fi
+\ifdef\then\mathchardef\varkappa"0!7B\fi
+\ifdef\then\mathchardef\hslash"0!7D\fi
+
+\ifdef\then\mathchardef\divideontimes"2!3E\fi
+\ifdef\then\mathchardef\ltimes"2!6E\fi
+\ifdef\then\mathchardef\rtimes"2!6F\fi
+\ifdef\then\mathchardef\smallsetminus"2!72\fi
+
+\ifdef\then\mathchardef\lvertneqq"3!00\fi
+\ifdef\then\mathchardef\gvertneqq"3!01\fi
+\ifdef\then\mathchardef\nleq"3!02\fi
+\ifdef\then\mathchardef\ngeq"3!03\fi
+\ifdef\then\mathchardef\nless"3!04\fi
+\ifdef\then\mathchardef\ngtr"3!05\fi
+\ifdef\then\mathchardef\nprec"3!06\fi
+\ifdef\then\mathchardef\nsucc"3!07\fi
+\ifdef\then\mathchardef\lneqq"3!08\fi
+\ifdef\then\mathchardef\gneqq"3!09\fi
+\ifdef\then\mathchardef\nleqslant"3!0A\fi
+\ifdef\then\mathchardef\ngeqslant"3!0B\fi
+\ifdef\then\mathchardef\lneq"3!0C\fi
+\ifdef\then\mathchardef\gneq"3!0D\fi
+\ifdef\then\mathchardef\npreceq"3!0E\fi
+\ifdef\then\mathchardef\nsucceq"3!0F\fi
+\ifdef\then\mathchardef\precnsim"3!10\fi
+\ifdef\then\mathchardef\succnsim"3!11\fi
+\ifdef\then\mathchardef\lnsim"3!12\fi
+\ifdef\then\mathchardef\gnsim"3!13\fi
+\ifdef\then\mathchardef\nleqq"3!14\fi
+\ifdef\then\mathchardef\ngeqq"3!15\fi
+\ifdef\then\mathchardef\precneqq"3!16\fi
+\ifdef\then\mathchardef\succneqq"3!17\fi
+\ifdef\then\mathchardef\precnapprox"3!18\fi
+\ifdef\then\mathchardef\succnapprox"3!19\fi
+\ifdef\then\mathchardef\lnapprox"3!1A\fi
+\ifdef\then\mathchardef\gnapprox"3!1B\fi
+\ifdef\then\mathchardef\nsim"3!1C\fi
+\ifdef\then\mathchardef\ncong"3!1D\fi
+\ifdef\then\mathchardef\varsubsetneq"3!20\fi
+\ifdef\then\mathchardef\varsupsetneq"3!21\fi
+\ifdef\then\mathchardef\nsubseteqq"3!22\fi
+\ifdef\then\mathchardef\nsupseteqq"3!23\fi
+\ifdef\then\mathchardef\subsetneqq"3!24\fi
+\ifdef\then\mathchardef\supsetneqq"3!25\fi
+\ifdef\then\mathchardef\varsubsetneqq"3!26\fi
+\ifdef\then\mathchardef\varsupsetneqq"3!27\fi
+\ifdef\then\mathchardef\subsetneq"3!28\fi
+\ifdef\then\mathchardef\supsetneq"3!29\fi
+\ifdef\then\mathchardef\nsubseteq"3!2A\fi
+\ifdef\then\mathchardef\nsupseteq"3!2B\fi
+\ifdef\then\mathchardef\nparallel"3!2C\fi
+\ifdef\then\mathchardef\nmid"3!2D\fi
+\ifdef\then\mathchardef\nshortmid"3!2E\fi
+\ifdef\then\mathchardef\nshortparallel"3!2F\fi
+\ifdef\then\mathchardef\nvdash"3!30\fi
+\ifdef\then\mathchardef\nVdash"3!31\fi
+\ifdef\then\mathchardef\nvDash"3!32\fi
+\ifdef\then\mathchardef\nVDash"3!33\fi
+\ifdef\then\mathchardef\ntrianglerighteq"3!34\fi
+\ifdef\then\mathchardef\ntrianglelefteq"3!35\fi
+\ifdef\then\mathchardef\ntriangleleft"3!36\fi
+\ifdef\then\mathchardef\ntriangleright"3!37\fi
+\ifdef\then\mathchardef\nleftarrow"3!38\fi
+\ifdef\then\mathchardef\nrightarrow"3!39\fi
+\ifdef\then\mathchardef\nLeftarrow"3!3A\fi
+\ifdef\then\mathchardef\nRightarrow"3!3B\fi
+\ifdef\then\mathchardef\nLeftrightarrow"3!3C\fi
+\ifdef\then\mathchardef\nleftrightarrow"3!3D\fi
+\ifdef\then\mathchardef\eqsim"3!68\fi
+\ifdef\then\mathchardef\lessdot"3!6C\fi
+\ifdef\then\mathchardef\gtrdot"3!6D\fi
+\ifdef\then\mathchardef\shortmid"3!70\fi
+\ifdef\then\mathchardef\shortparallel"3!71\fi
+\ifdef\then\mathchardef\thicksim"3!73\fi
+\ifdef\then\mathchardef\thickapprox"3!74\fi
+\ifdef\then\mathchardef\approxeq"3!75\fi
+\ifdef\then\mathchardef\succapprox"3!76\fi
+\ifdef\then\mathchardef\precapprox"3!77\fi
+\ifdef\then\mathchardef\curvearrowleft"3!78\fi
+\ifdef\then\mathchardef\curvearrowright"3!79\fi
+\ifdef\then\mathchardef\backepsilon"3!7F\fi
+
+% Change the catcode of ! back to other.
+
+\catcode`\!=12
+
+% A hack from amsfonts.sty to define \Bbb
+
+\ifdef\then\def\Bbb{\protect\pBbb}
+ \def\pBbb{\RIfM@\expandafter\Bbb@\else
+ \expandafter\nonmatherr@\expandafter\Bbb\fi}
+ \edef\Bbb@{\noexpand\use@mathgroup
+ \expandafter\noexpand\csname =msb\endcsname
+ \msb@group}
+ \def\RIfM@{\relax\protect\ifmmode}
+\fi
+
+% Set our own name:
+
+\settag\modulemsbmloaded
+
+% And that's it.
diff --git a/obsolete/macros/latex209/contrib/stmary/stmaryrd.sty b/obsolete/macros/latex209/contrib/stmary/stmaryrd.sty
new file mode 100644
index 0000000000..d969309244
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/stmary/stmaryrd.sty
@@ -0,0 +1,335 @@
+%%% ====================================================================
+%%% @LaTeX-style-file{
+%%% author = "Alan Jeffrey",
+%%% version = "1.1",
+%%% date = "02 June 1992",
+%%% time = "15:30:37 BST",
+%%% filename = "stmaryrd.sty",
+%%% address = "School of Cognitive and Computing Sciences
+%%% University of Sussex
+%%% Brighton BN1 9QH
+%%% UK",
+%%% telephone = "+44 273 606755 x 3238",
+%%% FAX = "+44 273 678188",
+%%% checksum = "21107 335 695 12492",
+%%% email = "alanje@cogs.sussex.ac.uk",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "LaTeX math fonts symbols",
+%%% supported = "yes",
+%%% abstract = "This document style option loads the St
+%%% Mary's Road symbol font.",
+%%% docstring = "This document style option loads the St
+%%% Mary's Road symbol font. The font
+%%% contains a number of mathematical
+%%% characters which are not present in the
+%%% standard TeX and AMS symbol fonts.
+%%%
+%%% It is described in stmaryrd.tex.
+%%%
+%%% Copyright 1992 Alan Jeffrey.
+%%%
+%%% The checksum field above contains a CRC-16
+%%% checksum as the first value, followed by the
+%%% equivalent of the standard UNIX wc (word
+%%% count) utility output of lines, words, and
+%%% characters. This is produced by Robert
+%%% Solovay's checksum utility.",
+%%% package = "St Mary's Road",
+%%% dependencies = "module.sty stmary*.tfm",
+%%% }
+%%% ====================================================================
+%%%
+%%% 23 May 1991, v1.0: file created.
+%%%
+%%% 25 May 1991, v1.01: Updated for the new module.sty and stmaryrd.mf.
+%%%
+%%% 5 Jun 1991, v1.02: By mistake, \varotimes wasn't swapped for \otimes.
+%%%
+%%% 25 Jun 1991, v1.03: Added \longarrownot and \Longarrownot.
+%%%
+%%% 27 Jun 1991, v1.04: The default is now for the cmsy circles, not the
+%%% heavier ones. If you want \oplus, \otimes, etc. to generate the
+%%% heavier symbols, set the tag \heavycircles.
+%%%
+%%% 2 Jun 1992: v1.1: Added the headers.
+
+% This module loads in the St Mary's Road symbol font, and defines loads
+% of new commands to access it. It understands the tag \heavycircles
+% to mean `please give me the heavy versions of \oplus etc.' It
+% can cope with new or obsolete font selection, but doesn't understand the
+% \substitutesymbols tag yet.
+
+\@ifundefined{modulemoduleloaded}{\input module.sty}{}
+
+% Dependency information:
+
+\dependent\Mapsto\Mapstochar
+\dependent\mapsfrom\mapsfromchar
+\dependent\Mapsfrom\Mapsfromchar
+\dependent\longarrownot\arrownot
+\dependent\Longarrownot\Arrownot
+\dependent\Longmapsto\Mapstochar
+\dependent\longmapsfrom\mapsfromchar
+\dependent\Longmapsfrom\Mapsfromchar
+
+% If we're replacing the old eggshaped \oplus-like symbols, we need to
+% make sure they're defined.
+
+\iftest\tagisset\heavycircles\then
+ \settag\varotimes
+ \settag\varoast
+ \settag\varobar
+ \settag\varodot
+ \settag\varoslash
+ \settag\varobslash
+ \settag\varocircle
+ \settag\varoplus
+ \settag\varominus
+ \settag\varbigcirc
+\fi
+
+% The first time the module is loaded, we grab the fonts.
+
+\iftest \tagisset\modulestmaryrdloaded \then \else
+
+ \iftest \tagisset\newfontselection \then
+
+ \new@mathgroup\stmaryrdfam
+ \define@mathgroup\mv@normal\stmaryrdfam{stmaryrd}{m}{n}
+ \define@mathgroup\mv@bold\stmaryrdfam{stmaryrd}{m}{n}
+
+ \new@fontshape{stmaryrd}{m}{n}{%
+ <5>stmary5%
+ <6>stmary6%
+ <7>stmary7%
+ <8>stmary8%
+ <9>stmary9%
+ <10>stmary10%
+ <11>stmary10 at10.95pt%
+ <12>stmary10 at12pt%
+ <14>stmary10 at14.4pt%
+ <17>stmary10 at17.28pt%
+ <20>stmary10 at20.736pt%
+ <25>stmary10 at24.8832pt}{}
+
+ \else
+
+ \newfam\stmaryrdfam
+
+ \font\stmaryfiv stmary5
+ \font\stmarysix stmary6
+ \font\stmarysev stmary7
+ \font\stmaryegt stmary8
+ \font\stmarynin stmary9
+ \font\stmaryten stmary10
+ \font\stmaryelv stmary10 at10.95pt
+ \font\stmarytwl stmary10 at12pt
+ \font\stmaryfrtn stmary10 at14.4pt
+ \font\stmarysvtn stmary10 at17.28pt
+ \font\stmarytwty stmary10 at20.736pt
+ \font\stmarytwfv stmary10 at24.8832pt
+
+ \@addfontinfo\@vpt{\textfont\stmaryrdfam\stmaryfiv
+ \scriptfont\stmaryrdfam\stmaryfiv
+ \scriptscriptfont\stmaryrdfam\stmaryfiv}
+ \@addfontinfo\@vipt{\textfont\stmaryrdfam\stmarysix
+ \scriptfont\stmaryrdfam\stmarysix
+ \scriptscriptfont\stmaryrdfam\stmarysix}
+ \@addfontinfo\@viipt{\textfont\stmaryrdfam\stmarysev
+ \scriptfont\stmaryrdfam\stmarysix
+ \scriptscriptfont\stmaryrdfam\stmaryfiv}
+ \@addfontinfo\@viiipt{\textfont\stmaryrdfam\stmaryegt
+ \scriptfont\stmaryrdfam\stmarysix
+ \scriptscriptfont\stmaryrdfam\stmaryfiv}
+ \@addfontinfo\@ixpt{\textfont\stmaryrdfam\stmarynin
+ \scriptfont\stmaryrdfam\stmarysix
+ \scriptscriptfont\stmaryrdfam\stmaryfiv}
+ \@addfontinfo\@xpt{\textfont\stmaryrdfam\stmaryten
+ \scriptfont\stmaryrdfam\stmarysev
+ \scriptscriptfont\stmaryrdfam\stmaryfiv}
+ \@addfontinfo\@xipt{\textfont\stmaryrdfam\stmaryelv
+ \scriptfont\stmaryrdfam\stmarysev
+ \scriptscriptfont\stmaryrdfam\stmaryfiv}
+ \@addfontinfo\@xiipt{\textfont\stmaryrdfam\stmarytwl
+ \scriptfont\stmaryrdfam\stmaryegt
+ \scriptscriptfont\stmaryrdfam\stmarysix}
+ \@addfontinfo\@xivpt{\textfont\stmaryrdfam\stmaryfrtn
+ \scriptfont\stmaryrdfam\stmaryten
+ \scriptscriptfont\stmaryrdfam\stmarysev}
+ \@addfontinfo\@xviipt{\textfont\stmaryrdfam\stmarysvtn
+ \scriptfont\stmaryrdfam\stmarytwl
+ \scriptscriptfont\stmaryrdfam\stmaryten}
+ \@addfontinfo\@xxpt{\textfont\stmaryrdfam\stmarytwty
+ \scriptfont\stmaryrdfam\stmaryfrtn
+ \scriptscriptfont\stmaryrdfam\stmarytwl}
+ \@addfontinfo\@xxvpt{\textfont\stmaryrdfam\stmarytwfv
+ \scriptfont\stmaryrdfam\stmarytwty
+ \scriptscriptfont\stmaryrdfam\stmarysvtn}
+ \fi
+
+\fi
+
+% For the rest of the style, ! is the hex number of the family.
+
+\catcode`\!\active
+\edef!{\hexnumber@\stmaryrdfam}
+
+% Then we load those symbols!
+
+\ifdef\then\mathchardef\shortleftarrow"3!00\fi
+\ifdef\then\mathchardef\shortrightarrow"3!01\fi
+\ifdef\then\mathchardef\shortuparrow"3!02\fi
+\ifdef\then\mathchardef\shortdownarrow"3!03\fi
+\ifdef\then\mathchardef\Yup"2!04\fi
+\ifdef\then\mathchardef\Ydown"2!05\fi
+\ifdef\then\mathchardef\Yleft"2!06\fi
+\ifdef\then\mathchardef\Yright"2!07\fi
+\ifdef\then\mathchardef\varcurlyvee"2!08\fi
+\ifdef\then\mathchardef\varcurlywedge"2!09\fi
+\ifdef\then\mathchardef\minuso"2!0A\fi
+\ifdef\then\mathchardef\baro"2!0B\fi
+\ifdef\then\mathchardef\sslash"2!0C\fi
+\ifdef\then\mathchardef\bbslash"2!0D\fi
+\ifdef\then\mathchardef\moo"2!0E\fi
+\ifdef\then\mathchardef\varotimes"2!0F\fi
+\ifdef\then\mathchardef\varoast"2!10\fi
+\ifdef\then\mathchardef\varobar"2!11\fi
+\ifdef\then\mathchardef\varodot"2!12\fi
+\ifdef\then\mathchardef\varoslash"2!13\fi
+\ifdef\then\mathchardef\varobslash"2!14\fi
+\ifdef\then\mathchardef\varocircle"2!15\fi
+\ifdef\then\mathchardef\varoplus"2!16\fi
+\ifdef\then\mathchardef\varominus"2!17\fi
+\ifdef\then\mathchardef\boxast"2!18\fi
+\ifdef\then\mathchardef\boxbar"2!19\fi
+\ifdef\then\mathchardef\boxdot"2!1A\fi
+\ifdef\then\mathchardef\boxslash"2!1B\fi
+\ifdef\then\mathchardef\boxbslash"2!1C\fi
+\ifdef\then\mathchardef\boxcircle"2!1D\fi
+\ifdef\then\mathchardef\boxbox"2!1E\fi
+\ifdef\then\mathchardef\boxempty"2!1F\fi
+\ifdef\then\mathchardef\lightning"0!20\fi
+\ifdef\then\mathchardef\merge"2!21\fi
+\ifdef\then\mathchardef\vartimes"2!22\fi
+\ifdef\then\mathchardef\fatsemi"2!23\fi
+\ifdef\then\mathchardef\sswarrow"3!24\fi
+\ifdef\then\mathchardef\ssearrow"3!25\fi
+\ifdef\then\mathchardef\curlywedgeuparrow"3!26\fi
+\ifdef\then\mathchardef\curlywedgedownarrow"3!27\fi
+\ifdef\then\mathchardef\fatslash"2!28\fi
+\ifdef\then\mathchardef\fatbslash"2!29\fi
+\ifdef\then\mathchardef\lbag"2!2A\fi
+\ifdef\then\mathchardef\rbag"2!2B\fi
+\ifdef\then\mathchardef\varbigcirc"2!2C\fi
+\ifdef\then\mathchardef\leftrightarroweq"3!2D\fi
+\ifdef\then\mathchardef\curlyveedownarrow"3!2E\fi
+\ifdef\then\mathchardef\curlyveeuparrow"3!2F\fi
+\ifdef\then\mathchardef\nnwarrow"3!30\fi
+\ifdef\then\mathchardef\nnearrow"3!31\fi
+\ifdef\then\mathchardef\leftslice"2!32\fi
+\ifdef\then\mathchardef\rightslice"2!33\fi
+\ifdef\then\mathchardef\varolessthan"2!34\fi
+\ifdef\then\mathchardef\varogreaterthan"2!35\fi
+\ifdef\then\mathchardef\varovee"2!36\fi
+\ifdef\then\mathchardef\varowedge"2!37\fi
+\ifdef\then\mathchardef\talloblong"2!38\fi
+\ifdef\then\mathchardef\interleave"2!39\fi
+\ifdef\then\mathchardef\obar"2!3A\fi
+\ifdef\then\mathchardef\obslash"2!3B\fi
+\ifdef\then\mathchardef\olessthan"2!3C\fi
+\ifdef\then\mathchardef\ogreaterthan"2!3D\fi
+\ifdef\then\mathchardef\ovee"2!3E\fi
+\ifdef\then\mathchardef\owedge"2!3F\fi
+\ifdef\then\mathchardef\oblong"2!40\fi
+\ifdef\then\mathchardef\inplus"3!41\fi
+\ifdef\then\mathchardef\niplus"3!42\fi
+\ifdef\then\mathchardef\nplus"2!43\fi
+\ifdef\then\mathchardef\subsetplus"3!44\fi
+\ifdef\then\mathchardef\supsetplus"3!45\fi
+\ifdef\then\mathchardef\subsetpluseq"3!46\fi
+\ifdef\then\mathchardef\supsetpluseq"3!47\fi
+\ifdef\then\mathchardef\Lbag"4!48\fi
+\ifdef\then\mathchardef\Rbag"5!49\fi
+
+\ifdef\then\mathchardef\llparenthesis"4!4C\fi
+\ifdef\then\mathchardef\rrparenthesis"5!4D\fi
+\ifdef\then\mathchardef\binampersand"4!4E\fi
+\ifdef\then\mathchardef\bindnasrepma"5!4F\fi
+\ifdef\then\mathchardef\trianglelefteqslant"3!50\fi
+\ifdef\then\mathchardef\trianglerighteqslant"3!51\fi
+\ifdef\then\mathchardef\ntrianglelefteqslant"3!52\fi
+\ifdef\then\mathchardef\ntrianglerighteqslant"3!53\fi
+\ifdef\then\mathchardef\llfloor"4!54\fi
+\ifdef\then\mathchardef\rrfloor"5!55\fi
+\ifdef\then\mathchardef\llceil"4!56\fi
+\ifdef\then\mathchardef\rrceil"5!57\fi
+\ifdef\then\mathchardef\arrownot"3!58\fi
+\ifdef\then\mathchardef\Arrownot"3!59\fi
+\ifdef\then\mathchardef\Mapstochar"3!5A\fi
+\ifdef\then\mathchardef\mapsfromchar"3!5B\fi
+\ifdef\then\mathchardef\Mapsfromchar"3!5C\fi
+\ifdef\then\mathchardef\leftrightarrowtriangle"2!5D\fi
+\ifdef\then\mathchardef\leftarrowtriangle"3!5E\fi
+\ifdef\then\mathchardef\rightarrowtriangle"3!5F\fi
+\ifdef\then\mathchardef\bigtriangledown"1!60\fi
+\ifdef\then\mathchardef\bigtriangleup"1!61\fi
+\ifdef\then\mathchardef\bigcurlyvee"1!62\fi
+\ifdef\then\mathchardef\bigcurlywedge"1!63\fi
+\ifdef\then\mathchardef\bigsqcap"1!64\fi
+\ifdef\then\mathchardef\bigbox"1!65\fi
+\ifdef\then\mathchardef\bigparallel"1!66\fi
+\ifdef\then\mathchardef\biginterleave"1!67\fi
+\ifdef\then\mathchardef\bignplus"1!70\fi
+
+\ifdef\then\delimiterdef\llbracket"4!4A!71\fi
+\ifdef\then\delimiterdef\rrbracket"5!4B!79\fi
+
+\def\@tempa#1{\ifdef\then\def\varcopyright
+ {{\ooalign{\hfil\raise.07ex\hbox{c}\hfil\crcr\mathhexbox#12C}}}\fi}
+\expandafter\@tempa!
+
+% The long arrow negations.
+
+\ifdef\then\def\longarrownot{\mathrel{\mkern5.5mu\arrownot\mkern-5.5mu}}\fi
+\ifdef\then\def\Longarrownot{\mathrel{\mkern5.5mu\Arrownot\mkern-5.5mu}}\fi
+
+% The variants on \mapsto:
+
+\ifdef\then\def\Mapsto{\Mapstochar\Rightarrow}\fi
+\ifdef\then\def\mapsfrom{\leftarrow\mapsfromchar}\fi
+\ifdef\then\def\Mapsfrom{\Leftarrow\Mapsfromchar}\fi
+\ifdef\then\def\Longmapsto{\Mapstochar\Longrightarrow}\fi
+\ifdef\then\def\longmapsfrom{\longleftarrow\mapsfromchar}\fi
+\ifdef\then\def\Longmapsfrom{\Longleftarrow\Mapsfromchar}\fi
+
+\catcode`\!=12
+
+% The circular circles:
+
+\iftest
+ \andtest{\tagisset\heavycircles}{\nottest{\tagisset\swappedcircles}}
+\then
+ \def\@swap#1#2{\let\@tempa#1\let#1#2\let#2\@tempa}
+ \@swap\varotimes\otimes
+ \@swap\varolessthan\olessthan
+ \@swap\varogreaterthan\ogreaterthan
+ \@swap\varovee\ovee
+ \@swap\varowedge\owedge
+ \@swap\varoast\oast
+ \@swap\varobar\obar
+ \@swap\varodot\odot
+ \@swap\varoslash\oslash
+ \@swap\varobslash\obslash
+ \@swap\varocircle\ocircle
+ \@swap\varoplus\oplus
+ \@swap\varominus\ominus
+ \@swap\varbigcirc\bigcirc
+ \@swap\varcopyright\copyright
+ \settag\swappedcircles
+\fi
+
+% Set our own name:
+
+\settag\modulestmaryrdloaded
+
+% And that's it.
diff --git a/obsolete/macros/latex209/contrib/stmary/stmaryrd.tex b/obsolete/macros/latex209/contrib/stmary/stmaryrd.tex
new file mode 100644
index 0000000000..869d964089
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/stmary/stmaryrd.tex
@@ -0,0 +1,701 @@
+%%% ====================================================================
+%%% @LaTeX-file{
+%%% author-1 = "Jeremy Gibbons",
+%%% author-2 = "Alan Jeffrey",
+%%% version = "1.1",
+%%% date = "02 June 1992",
+%%% time = "15:06:36 BST",
+%%% filename = "stmaryrd.tex",
+%%% address-1 = "Department of Computer Science
+%%% University of Aukland
+%%% Private Bag
+%%% Aukland
+%%% New Zealand",
+%%% address-2 = "School of Cognitive and Computing Sciences
+%%% University of Sussex
+%%% Brighton BN1 9QH
+%%% UK",
+%%% telephone-1 = "+64 9 373 7599 x 5120",
+%%% telephone-2 = "+44 273 606755 x 3238",
+%%% FAX-1 = "+64 9 373 7453",
+%%% FAX-2 = "+44 273 678188",
+%%% checksum = "57063 696 2497 23237",
+%%% email-1 = "jeremy@cs.aukuni.ac.nz",
+%%% email-2 = "alanje@cogs.sussex.ac.uk",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "metafont symbols math fonts LaTeX module",
+%%% supported = "yes",
+%%% abstract = "This is the documentation for module.sty and
+%%% the St Mary's Road symbol font.",
+%%% docstring = "This is the documentation for module.sty and
+%%% the St Mary's Road symbol font. The font
+%%% contains a number of mathematical
+%%% characters which are not present in the
+%%% standard TeX and AMS symbol fonts.
+%%%
+%%% Copyright 1992 Jeremy Gibbons and Alan Jeffrey.
+%%%
+%%% The checksum field above contains a CRC-16
+%%% checksum as the first value, followed by the
+%%% equivalent of the standard UNIX wc (word
+%%% count) utility output of lines, words, and
+%%% characters. This is produced by Robert
+%%% Solovay's checksum utility.",
+%%% package = "St Mary's Road",
+%%% dependencies = "ltugboat.sty tugboat.com stmaryrd.sty
+%%% module.sty stmary*.tfm"
+%%% }
+%%% ====================================================================
+%%%
+%%% 27 Jun 1991, v1.0: Finished v1.0 of the documentation.
+%%%
+%%% 2 Jun 1992, v1.1: added the headers and changed our addresses.
+
+% A keyboard check:
+%
+% @ # $ % ^ & * ~ at hash dollar percent caret ampersand asterisk tilde
+% : ; , . colon semicolon comma period
+% ? ! question-mark exclamation-mark
+% " ' ` double-quote apostrophe back-quote
+% ( ) { } [ ] parentheses braces square-brackets
+% - + = / \ minus plus equals forward-slash backslash
+% _ | < > underscore vertical-bar less-than greater-than
+%
+
+\documentstyle[stmaryrd]{ltugboat}
+
+\title{The St Mary's Road symbol package}
+
+\author{Jeremy Gibbons}
+%\address{Programming Research Group\\
+% Oxford University\\
+% 11 Keble Road\\
+% Oxford OX1 3QD\\
+% UK}
+%\netaddress{jg@prg.ox.ac.uk}
+\address{Department of Computer Science\\
+ University of Aukland\\
+ Private Bag\\
+ Aukland\\
+ New Zealand}
+\netaddress{jeremy@cs.aukuni.ac.nz}
+
+\author{Alan Jeffrey}
+%\address{Department of Computer Sciences\\
+% Chalmers University\\
+% S-412 96 G\"oteborg\\
+% Sweden}
+%\netaddress{jeffrey@cs.chalmers.se}
+\address{School of Cognitive and Computing Sciences\\
+ University of Sussex\\
+ Falmer\\
+ Brighton BN1 4QR\\
+ UK}
+\netaddress{alanje@cogs.sussex.ac.uk}
+
+% The current version of ltugboat.sty uses (and doesn't define)
+% \tensl.
+
+\font\tensl cmsl10
+
+% The symbols environment for laying out symbol declarations.
+
+\def\symbols#1{\hbox\bgroup\count0=#1\startcolumn}
+\def\endsymbols{\endcolumn\egroup}
+\def\startcolumn{\vtop\bgroup\count1=\count0\relax}
+\def\endcolumn{\egroup}
+\def\dosymbol#1{\hbox to .33\textwidth{\hbox to
+ 2em{\hfil$#1$\hfil}{\tt\string#1}\hfil}%
+ \advance\count1 by-1\relax
+ \ifnum \count1=0\endcolumn\startcolumn\fi
+}
+
+% The \table macro from testfont.tex.
+
+\newcount\n
+\newcount\m
+\newcount\p
+\newdimen\dim
+\newif\ifskipping
+\def\oct#1{\hbox{\rm\'{}\kern-.2em\it#1\/\kern.05em}} % octal constant
+\def\hex#1{\hbox{\rm\H{}\tt#1}} % hexadecimal constant
+\def\setdigs#1"#2{\gdef\h{#2}% \h=hex prefix; \0\1=corresponding octal
+ \m=\n \divide\m by 64 \xdef\0{\the\m}%
+ \multiply\m by-64 \advance\m by\n \divide\m by 8 \xdef\1{\the\m}}
+\def\testrow{\setbox0=\hbox{\penalty 1\def\\{\char"\h}%
+ \\0\\1\\2\\3\\4\\5\\6\\7\\8\\9\\A\\B\\C\\D\\E\\F%
+ \global\p=\lastpenalty}} % \p=1 if none of the characters exist
+\def\oddline{\cr
+ \noalign{\nointerlineskip}
+ \multispan{19}\hrulefill&
+ \setbox0=\hbox{\lower 2.3pt\hbox{\hex{\h x}}}\smash{\box0}\cr
+ \noalign{\nointerlineskip}}
+\def\evenline{\loop\skippingfalse
+ \ifnum\n<256 \m=\n \divide\m 16 \chardef\next=\m
+ \expandafter\setdigs\meaning\next \testrow
+ \ifnum\p=1 \skippingtrue \fi\fi
+ \ifskipping \global\advance\n 16 \repeat
+ \ifnum\n=256 \let\next=\endchart\else\let\next=\morechart\fi
+ \next}
+\def\morechart{\cr\noalign{\hrule\penalty5000}
+ \chartline \oddline \m=\1 \advance\m 1 \xdef\1{\the\m}
+ \chartline \evenline}
+\def\chartline{&\oct{\0\1x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&}
+\def\chartstrut{\lower4.5pt\vbox to14pt{}}
+\def\table{$$\global\n=0
+ \halign to\hsize\bgroup
+ \chartstrut##\tabskip0pt plus10pt&
+ &\hfil##\hfil&\vrule##\cr
+ \lower6.5pt\null
+ &&&\oct0&&\oct1&&\oct2&&\oct3&&\oct4&&\oct5&&\oct6&&\oct7&\evenline}
+\def\endchart{\cr\noalign{\hrule}
+ \raise11.5pt\null&&&\hex 8&&\hex 9&&\hex A&&\hex B&
+ &\hex C&&\hex D&&\hex E&&\hex F&\cr\egroup$$\par}
+\def\:{\setbox0=\hbox{\char\n}%
+ \ifdim\ht0>7.5pt\reposition
+ \else\ifdim\dp0>2.5pt\reposition\fi\fi
+ \box0\global\advance\n 1 }
+\def\reposition{\setbox0=\vbox{\kern2pt\box0}\dim=\dp0
+ \advance\dim 2pt \dp0=\dim}
+
+% A little hackette to make <foo> expand out to $\langle${\it foo}$\rangle$.
+
+\catcode`\<=\active
+\def<#1>{\leavevmode\hbox{$\langle$\rm\it#1\/$\rangle$}}
+
+\ifx\normalshape\undefined
+ \def\stmaryrd{\stmaryten}
+\else
+ \def\stmaryrd{\family{stmaryrd}\selectfont}
+\fi
+
+\begin{document}
+
+\maketitle
+
+\section{Introduction}
+
+This is a guide to the St Mary's Road symbol package for \LaTeX. It
+contains a number of new commands for use in math mode, and a new
+document style option {\tt module}, for modularizing large {\tt sty}
+files. The package is available as free software, the only restriction
+we make is that it should always be distributed as a package, not as
+individual files. The package consists of:
+\begin{itemize}
+\item {\tt README}: a short description.
+\item {\tt stmaryrd.tex}: this documentation.
+\item {\tt ltugboat.sty}: the {\tt sty} file this document uses.
+\item {\tt stmaryrd.sty}: loads the St Mary's Road symbol font.
+\item {\tt msam.sty}: loads the AMS symbol A font.
+\item {\tt msbm.sty}: loads the AMS symbol B font.
+\item {\tt module.sty}: provides commands for modularizing document style
+ options.
+\item Various \MF\ files, which generate the St Mary's Road symbol
+ font.
+\end{itemize}
+At its simplest, you can use the St~Mary's Road symbol font by saying
+\begin{verbatim}
+ \documentstyle[stmaryrd]{article}
+\end{verbatim}
+This gives you the new symbols in Tables~\ref{Tab-op}, \ref{Tab-bin},
+\ref{Tab-rel}, \ref{Tab-arrow} and~\ref{Tab-delim}. However, this
+defines over 100 new commands, and if you are using a \TeX\
+implementation with limited memory, you might want to be more selective
+about which commands you use. In that case, you should read on, in order
+to find out about how modules work.
+
+\begin{table*}
+\begin{symbols}{3}
+\dosymbol\bigbox
+\dosymbol\bigcurlyvee
+\dosymbol\bigcurlywedge
+\dosymbol\biginterleave
+\dosymbol\bignplus
+\dosymbol\bigparallel
+\dosymbol\bigsqcap
+\dosymbol\bigtriangledown
+\dosymbol\bigtriangleup
+\end{symbols}
+\caption{New large operators}
+\label{Tab-op}
+\end{table*}
+
+\begin{table*}
+\begin{symbols}{19}
+\dosymbol\baro
+\dosymbol\bbslash
+\dosymbol\binampersand
+\dosymbol\bindnasrepma
+\dosymbol\boxast
+\dosymbol\boxbar
+\dosymbol\boxbox
+\dosymbol\boxbslash
+\dosymbol\boxcircle
+\dosymbol\boxdot
+\dosymbol\boxempty
+\dosymbol\boxslash
+\dosymbol\curlyveedownarrow
+\dosymbol\curlyveeuparrow
+\dosymbol\curlywedgedownarrow
+\dosymbol\curlywedgeuparrow
+\dosymbol\fatbslash
+\dosymbol\fatsemi
+\dosymbol\fatslash
+\dosymbol\interleave
+\dosymbol\leftslice
+\dosymbol\merge
+\dosymbol\minuso
+\dosymbol\moo
+\dosymbol\nplus
+\dosymbol\obar
+\dosymbol\oblong
+\dosymbol\obslash
+\dosymbol\ogreaterthan
+\dosymbol\olessthan
+\dosymbol\ovee
+\dosymbol\owedge
+\dosymbol\rightslice
+\dosymbol\sslash
+\dosymbol\talloblong
+\dosymbol\varbigcirc
+\dosymbol\varcurlyvee
+\dosymbol\varcurlywedge
+\dosymbol\varoast
+\dosymbol\varobar
+\dosymbol\varobslash
+\dosymbol\varocircle
+\dosymbol\varodot
+\dosymbol\varogreaterthan
+\dosymbol\varolessthan
+\dosymbol\varominus
+\dosymbol\varoplus
+\dosymbol\varoslash
+\dosymbol\varotimes
+\dosymbol\varovee
+\dosymbol\varowedge
+\dosymbol\vartimes
+\dosymbol\Ydown
+\dosymbol\Yleft
+\dosymbol\Yright
+\dosymbol\Yup
+\end{symbols}
+\caption{New binary operators}
+\label{Tab-bin}
+\end{table*}
+
+\begin{table*}
+\begin{symbols}{4}
+\dosymbol\inplus
+\dosymbol\niplus
+\dosymbol\ntrianglelefteqslant
+\dosymbol\ntrianglerighteqslant
+\dosymbol\subsetplus
+\dosymbol\subsetpluseq
+\dosymbol\supsetplus
+\dosymbol\supsetpluseq
+\dosymbol\trianglelefteqslant
+\dosymbol\trianglerighteqslant
+\end{symbols}
+\caption{New relations}
+\label{Tab-rel}
+\end{table*}
+
+\begin{table*}
+\begin{symbols}{7}
+\dosymbol\leftarrowtriangle
+\dosymbol\leftrightarroweq
+\dosymbol\leftrightarrowtriangle
+\dosymbol\lightning
+\dosymbol\Longmapsfrom
+\dosymbol\longmapsfrom
+\dosymbol\Longmapsto
+\dosymbol\Mapsfrom
+\dosymbol\mapsfrom
+\dosymbol\Mapsto
+\dosymbol\nnearrow
+\dosymbol\nnwarrow
+\dosymbol\rightarrowtriangle
+\dosymbol\shortdownarrow
+\dosymbol\shortleftarrow
+\dosymbol\shortrightarrow
+\dosymbol\shortuparrow
+\dosymbol\ssearrow
+\dosymbol\sswarrow
+\end{symbols}
+\caption{New arrows}
+\label{Tab-arrow}
+\end{table*}
+
+\begin{table*}
+\begin{symbols}{4}
+\dosymbol\Lbag
+\dosymbol\lbag
+\dosymbol\llbracket
+\dosymbol\llceil
+\dosymbol\llfloor
+\dosymbol\llparenthesis
+\dosymbol\Rbag
+\dosymbol\rbag
+\dosymbol\rrbracket
+\dosymbol\rrceil
+\dosymbol\rrfloor
+\dosymbol\rrparenthesis
+\end{symbols}
+\caption{New delimiters}
+\label{Tab-delim}
+\end{table*}
+
+\section{Modules}
+
+It is not uncommon for some document style options, particularly those
+loading new symbol fonts, to define hundreds of new commands, of which
+each user only wants a handful. This is not a problem on machines with
+memory to spare, but on a PC one has to be careful about these things.
+
+The solution adopted by the AMS, in their {\tt amsfonts} document style
+option, is to provide a new command \verb|\newsymbol|. For example, to
+use the symbol \verb|\lneq|, you say
+\begin{verbatim}
+ \newsymbol\lneqq 2308
+\end{verbatim}
+Unfortunately, this requires the user to look up the four-digit code for
+each symbol whenever they want to use it. The {\tt module} document
+style option is designed to get around this problem, by allowing
+the user to specify which new commands they want, without having to
+remember how they are defined.
+
+The main concept the user needs is that of a {\em tag\/} which is a
+request to a module saying `please give me this facility'. Usually
+these are just command names that the module will define---for
+example the module {\tt stmaryrd} has tags \verb|\varoplus|,
+\verb|\llbracket|, and so on. But there are other tags which control
+how the module behaves, for example the tag \verb|\heavycircles|
+means `please redefine $\oplus$, $\otimes$, etc.~to make them
+heavier.'
+
+To set the tag \verb|\foo|, you say \verb|\settag{\foo}|. To set
+\verb|\foo|, \verb|\baz| and \verb|\bar|, you say:
+\begin{verbatim}
+ \begin{settags}
+ \foo\baz\bar
+ \end{settags}
+\end{verbatim}
+To unset the tag \verb|\foo|, you say \verb|\unsettag{\foo}|. To unset
+\verb|\foo|, \verb|\baz| and \verb|\bar|, you say:
+\begin{verbatim}
+ \begin{unsettags}
+ \foo\baz\bar
+ \end{unsettags}
+\end{verbatim}
+You can then import a module. This can be done in various ways:
+\begin{itemize}
+\item By saying \verb|\import{fred}|, which only loads the commands whose
+ tags you set.
+\item By saying \verb|\import*{fred}|, which loads in all the commands.
+\item In the same way as a \verb|\documentstyle| option,
+ e.g.~\verb|\documentstyle[module,fred]{report}|.
+ This is equivalent to \verb|\import*{fred}|.
+\end{itemize}
+For example, to load in the St Mary's Road symbol font, but only define
+\verb|\Lbag| and \verb|\Rbag|, you say:
+\begin{verbatim}
+ \settag\Lbag \settag\Rbag
+ \import{stmaryrd}
+\end{verbatim}
+The St Mary's Road package comes with three modules---{\tt stmaryrd},
+which loads the St Mary's Road symbol font, {\tt msam}, which loads the
+AMS A font, and {\tt msbm}, which loads the AMS B font.
+
+\section{The {\tt stmaryrd} module}
+
+The St Mary's Road symbol font is designed to live with the AMS symbol
+fonts, and complement their focus on `concrete mathematics' by adding symbols
+for `abstract nonsense' such as domain theory ($\bigsqcap$), linear logic
+($\binampersand$ and $\bindnasrepma$), process theory ($\llfloor$
+and $\lightning$) and program calculation ($\moo$ and $\merge$).
+
+It also contains a number of circular characters (such as $\varotimes$,
+$\varoplus$, etc.)~which duplicate Knuth's. The only difference is that
+they have had digitization kludges added, so they are guaranteed to be
+symmetrical and circular. At low resolutions, Knuth's $\oplus$ tends to
+be rather egg-shaped. We have also made them the same weight as the
+other symbols. If you want \verb|\oplus| to produce $\varoplus$ and
+\verb|\varoplus| to produce $\oplus$, you should set the
+\verb|\heavycircles| tag.
+
+Note that \verb|\llbracket| and \verb|\rrbracket| are the only `growing'
+delimiters. For example:
+\[
+ \left\llbracket {\cal P} \right\rrbracket \quad
+ \left\llbracket \bigbox {\cal P} \right\rrbracket \quad
+ \left\llbracket \bigbox_{i\inplus I}^{a \varoplus b} P_i
+ \right\rrbracket \quad
+ \left\llbracket \begin{array}{c}a\\b\\c\end{array} \right\rrbracket \quad
+ \left\llbracket \begin{array}{c}a\\b\\c\\d\\e\\f\end{array} \right\rrbracket
+\]
+Table~\ref{Tab-special} contains characters that are only used to build
+other ones.
+For example:
+\begin{itemize}
+\item \verb|$\arrownot\rightarrow$| is $\arrownot\rightarrow$.
+\item \verb|$\Arrownot\Rightarrow$| is $\Arrownot\Rightarrow$.
+\item \verb|$\longarrownot\longrightarrow$| is $\longarrownot\longrightarrow$.
+\item \verb|$\Longarrownot\Longrightarrow$| is $\Longarrownot\Longrightarrow$.
+\end{itemize}
+The characters \verb|\mapsfromchar|, \verb|\Mapstochar| and
+\verb|\Mapsfromchar| are used in defining \verb|\mapsfrom|,
+\verb|\Mapsto| and \verb|\Mapsfrom|.
+
+\begin{table*}
+\begin{symbols}{3}
+\dosymbol\Arrownot
+\dosymbol\arrownot
+\dosymbol\Longarrownot
+\dosymbol\longarrownot
+\dosymbol\Mapsfromchar
+\dosymbol\mapsfromchar
+\dosymbol\Mapstochar
+\end{symbols}
+\caption{Special symbols used for building other symbols}
+\label{Tab-special}
+\end{table*}
+
+\begin{table*}
+{\stmaryrd\table}
+\caption{The font layout for {\tt stmary10}}
+\end{table*}
+
+\section{Implementing a module}
+
+So, how does this magic with tags work? Well, a module {\tt fred} is
+just a {\tt sty} file like any other, but uses some extra commands
+defined in the {\tt module} document style option, including
+\verb|\settag| and \verb|\unsettag|.
+
+Each module {\tt fred} should include the command
+\verb|\settag\modulefredloaded|, to tell other modules (including itself,
+if {\tt fred} is loaded more than once) that it has been loaded. For
+example, a module can check to see if the {\tt module} document style
+option has been loaded by saying:
+\begin{verbatim}
+ \@ifundefined{modulemoduleloaded}
+ {\input module.sty}{}
+\end{verbatim}
+The most important new command a module-writer has is \verb|\iftest|,
+which tests to see if a <test> is true or not. It has the syntax:
+\begin{verbatim}
+ \iftest <test>
+ \then <true text>
+ \fi
+\end{verbatim}
+or:
+\begin{verbatim}
+ \iftest <test>
+ \then <true text>
+ \else <false text>
+ \fi
+\end{verbatim}
+meaning `if the test is true, do the true text, otherwise do
+the false text.' A <test> is of the form:
+\begin{verbatim}
+ \truetest
+ \falsetest
+ \tagisset<tag>
+ \ortest{<test>}{<test>}
+ \andtest{<test>}{<test>}
+ \nottest{<test>}
+\end{verbatim}
+For example, there is a special tag \verb|\everything|, which is
+set if the module was imported with \verb|\import*| or loaded as a
+document style option. So if we are defining a command \verb|\foo|, we
+would like to test if either \verb|\foo| or \verb|\everything| has
+been set. We can do this by saying
+\begin{verbatim}
+ \iftest\ortest
+ {\tagisset\foo}{\tagisset\everything}
+ \then\def\foo{<definition>}
+ \fi
+\end{verbatim}
+This is so common as to warrant its own syntactic sugar:
+\begin{verbatim}
+ \ifdef\then\def\foo{<definition>}\fi
+\end{verbatim}
+This can also be used with \verb|\mathchardef|, \verb|\let|, or any other
+defining command. There are extra commands for defining new text
+characters (such as \verb|\varcopyright|) and delimiters (such as
+\verb|\llbracket|), since such definitions are so common:
+\begin{verbatim}
+ \delimiterdef\foo"<7 digits>
+ \textchardef\foo"<3 digits>
+\end{verbatim}
+Another common usage is
+\begin{verbatim}
+ \iftest\tagisset\foo
+ \then\settag\baz
+ \fi
+\end{verbatim}
+meaning `If we are exporting \verb|\foo|, we should export \verb|\baz| as
+well.' This sort of dependency information is so common as to warrant its
+own syntactic sugar:
+\begin{verbatim}
+ \dependent\foo\baz
+\end{verbatim}
+Note that since modules may well be loaded in more than once, care is
+needed to make sure the definitions stand up to being executed
+repeatedly. Unfortunately, this is not always the case---commands such
+as \verb|\newfam| or \verb|\font| should only be executed once. To get round
+this, the module {\tt fred} can look to see whether
+\verb|\modulefredloaded| is set. For example, you can say:
+\begin{verbatim}
+ \iftest\tagisset\modulefredloaded
+ \then\else <sensitive material>
+ \fi
+\end{verbatim}
+There is also a tag \verb|\newfontselection| which is set if Mittelbach
+and Sch\"opf's new font selection scheme is in force.
+
+\section{Implementing {\tt stmaryrd.sty}}
+
+As an example, we can look to see how the St Mary's Road module is
+implemented. To begin with, it looks to see if the {\tt module} document
+style is loaded, and inputs it if necessary:
+\begin{verbatim}
+ \@ifundefined{modulemoduleloaded}
+ {\input module.sty}{}
+\end{verbatim}
+Then it sets up the dependency information. For example, we need
+\verb|\Mapstochar| in order to build \verb|\Mapsto|.
+\begin{verbatim}
+ \dependent\Mapsto\Mapstochar
+ ...
+ \dependent\Longmapsfrom\Mapsfromchar
+\end{verbatim}
+If the \verb|\heavycircles| tag is set, we need to define
+\verb|\varotimes|, \verb|\varoast|, etc.
+\begin{verbatim}
+ \iftest\tagisset\heavycircles
+ \then
+ \settag\varotimes
+ ...
+ \settag\varbigcirc
+ \fi
+\end{verbatim}
+Then we can do the real work of the module, which is to load the fonts
+in. We only do this the first time the module is loaded.
+\begin{verbatim}
+ \iftest\tagisset\modulestmaryrdloaded
+ \then\else
+ \iftest\tagisset\newfontselection
+ \then <load the fonts the new way>
+ \else <load the fonts the old way>
+ \fi
+ \fi
+\end{verbatim}
+We can then define all those symbols, but first a quick cheat to make
+\verb|!| expand out to the hex digit for the St Mary's Road family.
+\begin{verbatim}
+ \catcode`\!\active
+ \edef!{\hexnumber@\stmaryrdfam}
+\end{verbatim}
+Then we have a huge number of definitions:
+\begin{verbatim}
+ \ifdef\then\mathchardef\shortleftarrow
+ "3!00\fi
+ ...
+ \ifdef\then\def\Longmapsfrom
+ {\Longleftarrow\Mapsfromchar}\fi
+\end{verbatim}
+There's then a little hackette to swap the circular operators around if
+necessary. This works by keeping a tag \verb|\swappedcircles| which is
+set once we've swapped the circles round. So we swap the circles if
+\verb|\heavycircles| is set and \verb|\swappedcircles| is not.
+\begin{verbatim}
+ \iftest\andtest
+ {\tagisset\heavycircles}
+ {\nottest{\tagisset\swappedcircles}}
+ \then\else
+ \def\@swap#1#2{\let\@tempa#1
+ \let#1#2\let#2\@tempa}
+ \@swap\varotimes\otimes
+ ...
+ \@swap\varcopyright\copyright
+ \settag\swappedcircles
+ \fi
+\end{verbatim}
+Finally, the St Mary's Road module sets its own name.
+\begin{verbatim}
+ \settag\modulestmaryrdloaded
+\end{verbatim}
+And that's it.
+
+\section{Implementing {\tt module.sty}}
+
+So the only question left is how the {\tt module} document style option
+is defined. The main problem is to implement \verb|\iftest| in a
+reasonably efficient manner, even though \TeX\ doesn't have primitives
+for `and' and `or' on booleans.
+
+The solution adopted here is to make a <test> a command which expands out
+to either \verb|\iftrue| or \verb|\iffalse|. Note that \verb|\iftrue|
+and \verb|\iffalse| are not good tests, since they would fall foul of
+\TeX's \verb|\if...\fi| matching.
+\begin{verbatim}
+ \def\truetest{\iftrue}
+ \def\falsetest{\iffalse}
+\end{verbatim}
+The definition of `or':
+\begin{verbatim}
+ \def\ortest#1{#1\expandafter\K@true
+ \else\expandafter\@identity\fi}
+ \def\@identity#1{#1}
+ \def\K@true#1{\iftrue}
+\end{verbatim}
+The definition of `and':
+\begin{verbatim}
+ \def\andtest#1#2{#1\@fi#2}
+ \def\@fi{\fi}
+\end{verbatim}
+The definition of `not':
+\begin{verbatim}
+ \def\nottest#1{#1\expandafter\falsetest
+ \else\expandafter\truetest\fi}
+\end{verbatim}
+Then all that \verb|\iftest<test>\then| has to do is expand out to <test>.
+\begin{verbatim}
+ \def\iftest#1\then{#1}
+\end{verbatim}
+However, in order to make sure that nested uses of \verb|\if...\fi| and
+\verb|\iftest...\then...\fi| work, we need to make \verb|\then| an
+\verb|\if|-like command. It doesn't matter which, since we're only using
+it to match against \verb|\fi| properly.
+\begin{verbatim}
+ \let\then\true
+\end{verbatim}
+Then we can set a tag by making it the same as some magic value
+\verb|\magic@value|.
+\begin{verbatim}
+ \def\tagisset#1{\ifx\magic@value#1}
+ \def\settag#1{\let#1\magic@value}
+ \def\unsettag#1{\let#1\unmagic@value}
+\end{verbatim}
+It doesn't matter which magic value we choose, so we let
+\verb|\magic@value| produce an error message. That way, if the user sets
+a tag, but none of the modules actually defines it, then they will get an
+error message if they try to use it.
+\begin{verbatim}
+ \def\magic@value{\set@error}
+ \def\set@error{<error message>}
+ \def\unmagic@value{\unset@error}
+ \def\unset@error{<error message>}
+\end{verbatim}
+The rest of the {\tt module} document style option is fairly routine.
+
+\section{Acknowledgements}
+
+We'd like to thank Dave Murphy for many thought-provoking comments, and
+Simon, Nigel and Stuart for making our life in St~Mary's Road livable.
+
+\makesignature
+
+\end{document}
+
diff --git a/obsolete/macros/latex209/contrib/stmary/tugboat.cmn b/obsolete/macros/latex209/contrib/stmary/tugboat.cmn
new file mode 120000
index 0000000000..a10c88d36c
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/stmary/tugboat.cmn
@@ -0,0 +1 @@
+../../../../../macros/plain/contrib/tugboat/tugboat.cmn \ No newline at end of file
diff --git a/obsolete/macros/latex209/contrib/svlatex/svcon.sty b/obsolete/macros/latex209/contrib/svlatex/svcon.sty
new file mode 100644
index 0000000000..c883b4a69a
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/svlatex/svcon.sty
@@ -0,0 +1,412 @@
+% Copyright (C) 1988 Springer-Verlag, Inc.
+%
+% Everyone is granted permission to copy and redistribute this file, as
+% long as it is unchanged.
+%
+%
+% smva.sty 01 Nov 87
+%
+%
+\newif\if@multipleauthors
+\@ifundefined{@svsa}{%
+ \@multipleauthorstrue
+ \typeout{Sub-style 'svcon' (Springer-Verlag Multi-Authored). Released January 1993}}%
+ {\@multipleauthorsfalse}
+\ds@twoside
+\headheight=9pt
+\headsep=15pt % 2pc-9pt
+\textheight=45pc
+\textwidth=27pc
+\parindent=1em
+%
+% Running head: 9 pt CM, c/lc, 2em# inside of fl. outside folio, base aligns
+% with folio; recto: CN, period, word # to CT; verso: contributor's name(s).
+% In single-author, verso: SN, period, word # to ST.
+%
+% If you want the running heads on the opposite pages, just put \flipheads
+% after the documentstyle. LaTeX isn't bright enough to allow one option
+% file to define ds@flipheads.
+%
+\newif\if@flipheads \@flipheadsfalse
+\def\flipheads{\@flipheadstrue}
+\def\ps@headings{\let\@mkboth=\markboth % Instead of \@gobbletwo, for toc
+ \def\@oddfoot{}\def\@evenfoot{}% No feet.
+ \if@flipheads
+ \def\@oddhead{\ixONxi\rm
+ \hbox{}\hfil{\rightmark}\hskip 2em minus 1em\thepage}%
+ \def\@evenhead{\ixONxi\rm \thepage\hskip 2em\leftmark \hfill}%
+ \else
+ \def\@oddhead{\ixONxi\rm
+ \hbox{}\hfil{\leftmark}\hskip 2em minus 1em\thepage}%
+ \def\@evenhead{\ixONxi\rm \thepage\hskip 2em\rightmark \hfill}%
+ \fi
+ \def\chaptermark##1{\markbothsame{\ifnum \c@secnumdepth >\m@ne
+ \@chapapp\ %\thechapter. \
+ \fi ##1}}%
+ \if@multipleauthors
+ \def\sectionmark##1{}%
+ \else
+ \def\sectionmark##1{\markleft{\ifnum \c@secnumdepth >\z@
+ \thesection. \ \fi ##1}}%
+ \fi
+}
+
+\pagestyle{headings}
+\pagenumbering{roman} % toc is in roman
+\def\@chapterauthors{}
+\def\markbothsame#1{\markboth{#1}{#1}}
+\def\markleft#1{{\let\protect\noexpand\expandafter\@markleft\@themark
+ {#1}\mark{\@themark}}}
+\def\@markleft#1#2#3{\gdef\@themark{{#3}{#2}}}
+\def\leftmark{\expandafter\@leftmark\topmark}
+%
+% All pages without running heads must carry corner marks.
+%
+\def\clap#1{\hbox to 0pt{\hss#1\hss}}
+\newdimen\@crosshairrule \@crosshairrule=.24pt
+\def\@crosshairs{\vbox to 0pt{\hsize=0pt\baselineskip=0pt\lineskip=0pt
+ \vss
+ \clap{\vrule height .125in width \@crosshairrule depth 0pt}
+ \clap{\vrule width .25in height \@crosshairrule depth 0pt}
+ \clap{\vrule height .125in width \@crosshairrule depth 0pt}
+ \vss}}
+\def\ps@empty{%
+\def\@oddhead{\hfill\raise\headheight\@crosshairs}
+\let\@evenhead\@oddhead
+\def\@evenfoot{}\let\@oddfoot\@evenfoot}
+\frenchspacing
+\def\@chapapp{}
+\def\viiiONx{\@setsize\viiiONx{10pt}\viipt\@viipt}
+\def\ixONxi{\@setsize\ixONxi{11pt}\ixpt\@ixpt}
+\def\xONxii{\normalsize}
+\def\xiiONxiv{\@setsize\xiiONxiv{14pt}\xiipt\@xiipt}
+\def\xivONxvi{\@setsize\xivONxvi{16pt}\xivpt\@xivpt}
+\def\xivONxiv{\@setsize\xivONxiv{14pt}\xivpt\@xivpt}
+\def\xxONxx{\@setsize\xxONxx{20pt}\xxpt\@xxpt}
+
+\def\chapter{\cleardoublepage % Starts new recto.
+ \thispagestyle{empty} % Page style of chapter page is 'empty'
+ \global\@topnum\z@ % Prevents figures from going at top of page.
+ \@afterindentfalse % Suppresses indent in first paragraph. Change
+ \secdef\@chapter\@schapter} % to \@afterindenttrue to have indent.
+
+%
+% Chapter number: 20 CM arabic numeral, fl.l, top text
+% Chapter title: 20/20 CM x 27pc, c/lc, fl.l, sink 60 pt from top
+% type to base of CT, to's fl.l, do not hyphenate
+%
+%\def\@makechapterhead#1{ % Heading for \chapter command
+% We want the chapter number to be 20 pts from top text. The simplest
+% was is to set \topskip, making sure there's nothing between the number
+% and the top of page, so \baselineskip doesn't come in.
+% { \topskip=60pt \parindent 0pt \raggedright
+% \xxONxx\rm
+% \ifnum \c@secnumdepth >\m@ne % IF secnumdepth > -1 THEN
+ % \@chapapp{} \thechapter % Print 'Chapter' and number.
+ % \par
+ % \vskip 20pt \fi % Space between number and title.
+ % DELETED CHAPTER NUMBER -- HR
+ % #1\par % Title.
+ % \nobreak % TeX penalty to prevent page break.
+ % \vskip-\prevdepth % Fool TeX into ignoring the depth of
+ % \prevdepth=0pt % the CT when spacing to the CA
+ % \if@multipleauthors
+ % \vskip 16pt % 2.5pi b/b between title and chapter authors
+ % \else
+ % \vskip 44pt % want ~60pt b/b to abstract
+ % \fi
+ % }
+% }
+
+\def\@makechapterhead#1{ % Heading for \chapter command
+ { \topskip=44pt \parindent 0pt \raggedright
+ \xxONxx\rm
+ #1\par % Title.
+ \nobreak % TeX penalty to prevent page break.
+ \vskip-\prevdepth % Fool TeX into ignoring the depth of
+ \prevdepth=0pt % the CT when spacing to the CA
+ \if@multipleauthors
+ \vskip 30pt % 2.5pi b/b between title and chapter authors
+ \else
+ \vskip 44pt % want ~60pt b/b to abstract
+ \fi
+ } }
+\def\@makeschapterhead#1{ % Heading for \chapter* command
+ { \topskip=44pt \parindent 0pt \raggedright
+ \xxONxx\rm
+ #1\par % Title.
+ \nobreak % TeX penalty to prevent page break.
+ \vskip-\prevdepth % Fool TeX into ignoring the depth of
+ \prevdepth=0pt % the CT when spacing to the CA
+ \if@multipleauthors
+ \vskip 16pt % 2.5pi b/b between title and chapter authors
+ \else
+ \vskip 44pt % want ~60pt b/b to abstract
+ \fi
+ } }
+
+\if@multipleauthors
+\gdef\chapterauthors#1{%
+ {\def\\{, }\def\footnote##1{}\def\footnotemark[##1]{}%
+ \xdef\@chapterauthors{#1}}%
+ \markright{\@chapterauthors}%
+ {\parindent0pt \raggedright\xivONxiv\rm #1\par
+ \nobreak
+ \vskip 12pt\noindent
+}}\fi
+
+%
+% Restart the footnote counter each chapter.
+%
+%\newcounter{footnote}[chapter]
+%
+% FN 1pc space above footnotes to text.
+% 5 pc 1/2 pt rule fl.l. above footnotes
+% leave 6pt # after rule followed by ftn
+%
+\skip\footins=18.5pt % space above line and below line, 1pc+6pt+.5pt
+\footskip=16pt
+\footnotesep=7pt % pretty arbitrary
+\def\footnotesize{\@setsize\footnotesize{10pt}\ixpt\@ixpt}
+\def\footnoterule{\kern-6.5pt\hrule width 5pc height .5pt\vskip 6pt}
+%
+% Footnote at end of chapter position below last text line (not at bottom
+% of page).
+%
+\def\clearpage{\par\penalty -\@M \write\m@ne{}\vbox{}\penalty -\@Mi}
+\def\@makecol{\ifvoid\footins \setbox\@outputbox\box\@cclv
+ \else\setbox\@outputbox
+ \vbox{\unvbox\@cclv\vskip\skip\footins\footnoterule\unvbox\footins}\fi
+ \xdef\@freelist{\@freelist\@midlist}\gdef\@midlist{}\@combinefloats
+ \setbox\@outputbox\vbox to\@colht{\boxmaxdepth\maxdepth
+ \@texttop
+ \@tempdima=\@colht \multiply\@tempdima by 10 \divide\@tempdima by 9
+ \ifdim \ht\@outputbox<\@tempdima
+ \unvbox\@outputbox \vfill
+ \else
+ \unvbox\@outputbox
+ \fi
+ \@textbottom}\global\maxdepth\@maxdepth}
+%
+% Abstract: 9/11 TRx25pi, sink 2.5pi b/b from CA
+%
+\def\abstract{\vskip 9pt % from CA
+\rightskip=1pc\leftskip=1pc\parindent=\z@
+\ixONxi\rm
+{ABSTRACT }}
+\def\endabstract{\par} % If we don't do this, the paragraph won't be
+ % set until after rightskip and leftskip have been
+ % returned to their old values.
+
+\def\tableofcontents{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \fi\chapter*{Contents\@mkboth{Contents}{Contents}}
+ \@starttoc{toc}\if@restonecol\twocolumn\fi}
+
+%
+% Don't indent the paragraph following each header. Vertical distances
+% showld have \baselineskip taken out, and the height of the next
+% line, which should be text (10/12 TR).
+%
+\setcounter{secnumdepth}{2} % number section and subsections
+\setcounter{tocdepth}{2} % and put them in the table of contents
+% No 1 Head, 14/16 CM, 36pt b/b above, 24 tp b/b below
+\def\section{\@startsection
+ {section}{1}{\z@}{-21pt plus 6pt minus 1pt}{12pt plus 2pt}%
+ {\xivONxvi\rm\raggedright}}
+% No 2 Head, 12/14 CM italic, 30pt above, 18 pt below
+\def\subsection{\@startsection
+ {subsection}{2}{\z@}{-16pt plus 4pt minus 1pt}{6pt plus 1pt}%
+ {\xiiONxiv\it\raggedright}}
+% No 3 Head, 10/12 CM, 24pt above, 18pt below
+\def\subsubsection{\@startsection
+ {subsubsection}{3}{\z@}{-12pt plus 3pt minus 1pt}{6pt plus 1pt}%
+ {\xONxii\rm\raggedright}}
+% No 4 Head, 10/12 CM italic, 20pt above, 18pt below
+\def\paragraph{\@startsection
+ {paragraph}{4}{\z@}{-8pt plus 2pt minus .5pt}{6pt plus 1pt}%
+ {\xONxii\it\raggedright}}
+% No 5 Head, 10/12 CM italic, period, en space to run in text, 18pt above
+\def\subparagraph#1{\@startsection
+ {subparagraph}{5}{\z@}{-6pt plus 2pt minus .5pt}{-.5em}{\xONxii\it}{#1.}}
+% Ack: Acknowledgements same as No 5 head, 36pt above
+\def\acknowledgments{\@startsection
+ {subparagraph}{6}{\z@}{-24pt plus 6pt minus 1pt}{-.5em}%
+ {\xONxii\it}*{Acknowledgments:\/}}
+% R-1: ``References'', same as No.2 head
+% unless it's single-author.
+\def\mainbibliography#1{{\@multipleauthorsfalse\bibliography{#1}}}
+\def\thebibliography#1{%
+\if@multipleauthors
+ \@startsection
+ {section}{2}{\z@}{-16pt plus 4pt minus 1pt}{6pt plus 1pt}%
+ {\xiiONxiv\rm\raggedright}{References}%
+\else
+ \chapter*{References\@mkboth
+ {References}{References}}%
+ \addcontentsline{toc}{chapter}{\protect\numberline{}References}%
+\fi
+%endif
+ \list
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus -.07em}
+ \sloppy
+ \sfcode`\.=1000\relax}
+% Put index in the toc
+\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\@makeschapterhead{Index}]
+ \addcontentsline{toc}{chapter}{\protect\numberline{}Index}%
+ \@mkboth{Index}{Index}\thispagestyle{empty}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+\def\theauthorindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\@makeschapterhead{Author Index}]
+ \addcontentsline{toc}{chapter}{\protect\numberline{}Author Index}%
+ \@mkboth{Author Index}{Author Index}\thispagestyle{empty}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+\def\thesubjectindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\@makeschapterhead{Subject Index}]
+ \addcontentsline{toc}{chapter}{\protect\numberlin6e{}Subject Index}%
+ \@mkboth{Subject Index}{Subject Index}\thispagestyle{empty}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+\def\thesymbolindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\@makeschapterhead{Symbol Index}]
+ \addcontentsline{toc}{chapter}{\protect\numberline{}Symbol Index}%
+ \@mkboth{Symbol Index}{Symbol Index}\thispagestyle{empty}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+
+%
+% lists: 10/12 TRx27pc, 1/2line# above/below
+%
+\topsep 6pt plus 3pt minus 1pt % Extra vertical space, in addition to
+ % \parskip, added above and below list and
+ % paragraphing environments.
+\itemsep 6pt plus 2pt minus 1pt % Extra vertical space, in addition to
+ % \parskip, added between list items.
+%
+% Eq: Center on text width; equation numbers set flush right, align with
+% last line of equation, 6pt # above/below.
+%
+\abovedisplayskip=6pt plus 1.5pt minus 3pt
+\belowdisplayskip=\abovedisplayskip
+\abovedisplayshortskip=\z@ plus 1.5pt
+\belowdisplayshortskip=3pt plus 1.5pt minus 1.5pt
+%
+% FL: Figure legends ``FIGURE 0.0'' 9/11 TR, c/lc, period, word # to text.
+%
+\long\def\@makecaption#1#2{{
+ \vskip 10pt
+ \ixONxi
+ \setbox\@tempboxa\hbox{#1. #2}
+ \ifdim \wd\@tempboxa >\hsize % IF longer than one line:
+ \unhbox\@tempboxa\hfil\par % THEN set as ordinary paragraph.
+ \else % ELSE center.
+ \hbox to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi}}
+\def\fnum@figure{\ixONxi FIGURE \thefigure}%{\sc FIGURE~}\thefigure}
+%
+% TN+TT: ``TABLE 0.0'' 9/11 TR, c/lc. period, word # to table title:
+% 3 pt # below to 1/2 pt rule x table measuer, 3 pt # below rule to
+% TCH
+%
+\arrayrulewidth=.5pt
+\def\fnum@table{\ixONxi TABLE~\thetable}
+\def\TableSubtitleRule{\noalign{\vskip 3pt}\hline\noalign{\vskip 3pt}}
+\long\def\TableFootnote#1{\gdef\TFN{#1}}
+
+\def\@@startpbox#1{\vtop\bgroup \hsize #1\@arrayparboxrestore
+\parindent=-1em\leftskip=1em}
+\newsavebox{\@stablebox}
+\def\stable#1#2{\@ifnextchar[{\@stable{#1}{#2}}{\@stable{#1}{#2}[h]}}
+\def\@stable#1#2[#3]{\begin{table}[#3]
+ \def\foo{#1}\def\TFN{}%
+ \viiiONx
+ \setbox\@stablebox=\hbox\bgroup
+ \begin{tabular}{#2}%
+ \noalign{\vskip 3pt}
+ \hline
+ \noalign{\vskip 3pt}}
+\@namedef{endstable}{\crcr\noalign{\vskip 6pt}\hline\end{tabular}\egroup
+$$\vbox{\hsize=\wd\@stablebox
+\caption{\foo}
+\box\@stablebox
+\prevdepth=0pt % last thing was a rule
+\par
+\TFN}$$
+\end{table}}
+%%%% GROT. This is hacked to move a label definition outside.
+%%%% I think the whole stable idea is broken.
+
+\def\stable#1#2{\@ifnextchar[{\@stable{#1}{#2}}{\@stable{#1}{#2}[h]}}
+\def\@stable#1#2[#3]{\table[#3]
+ \def\foo{#1}\def\TFN{}\def\stablelabel{}%
+ \viiiONx
+ \setbox\@stablebox=\hbox\bgroup\def\label##1{\gdef\stablelabel{\label{##1}}}%
+ \tabular{#2}%
+ \noalign{\vskip 3pt}%
+ \hline
+ \noalign{\vskip 3pt}}
+\@namedef{endstable}{\crcr\noalign{\vskip 6pt}\hline\endtabular\egroup
+$$\vbox{\hsize=\wd\@stablebox
+\caption{\foo}\stablelabel
+\box\@stablebox
+\prevdepth=0pt % last thing was a rule
+\par
+\TFN}$$
+\endtable}
+
+\def\stablecont#1#2{\@ifnextchar[{\@stablecont{#1}{#2}}{\@stablecont{#1}{#2}[h]}}
+\def\@stablecont#1#2[#3]{\table[#3]
+ \def\foo{#1}\def\TFN{}
+ \viiiONx
+ \setbox\@stablebox=\hbox\bgroup\def\label{\error}
+ \tabular{#2}%
+ \noalign{\vskip 3pt}%
+ \hline
+ \noalign{\vskip 3pt}}
+\@namedef{endstablecont}{\crcr\noalign{\vskip 6pt}\hline\endtabular\egroup
+$$\vbox{\hsize=\wd\@stablebox
+ \begingroup
+ \@parboxrestore
+ \vskip 10pt
+ \ixONxi
+ \setbox\@tempboxa\hbox{\ignorespaces \foo}
+ \ifdim \wd\@tempboxa >\hsize % IF longer than one line:
+ \unhbox\@tempboxa\hfil\par % THEN set as ordinary paragraph.
+ \else % ELSE center.
+ \hbox to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi\par
+ \endgroup
+\box\@stablebox
+\prevdepth=0pt % last thing was a rule
+\par
+\TFN}$$
+\endtable}
+
+%%%%
+\newdimen\stabularwidth
+
+\def\stabular{\@ifnextchar[{\@stabular}{\@stabular[h]}}
+\def\@stabular[#1]#2{
+ \setbox\@stablebox=\hbox\bgroup\viiiONx
+ \tabular[#1]{#2}%
+ \noalign{\vskip 3pt}%
+ \hline
+ \noalign{\vskip 3pt}}
+\def\endstabular{\crcr\noalign{\vskip 6pt}\hline\endtabular\egroup
+\stabularwidth=\wd\@stablebox
+\box\@stablebox}
+
+\def\thesection{\arabic{section}} %% deletes Chap No from Section.
+\def\thefigure{\@arabic\c@figure} %% deletes Chap No from Section.
+
+\def\appendix{\par
+ \setcounter{chapter}{0}
+ \setcounter{section}{0}
+ \def\@chapapp{}
+ \def\thechapter{\Alph{chapter}}}
+ \ No newline at end of file
diff --git a/obsolete/macros/latex209/contrib/svlatex/svlatex.doc b/obsolete/macros/latex209/contrib/svlatex/svlatex.doc
new file mode 100644
index 0000000000..d00d5ef2f3
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/svlatex/svlatex.doc
@@ -0,0 +1,186 @@
+\def\UNX{Unix}
+\documentstyle[svcon]{report}
+\begin{document}
+\pagenumbering{arabic}
+%\tableofcontents
+\chapter{Springer-Verlag New~York Document Styles for \LaTeX}
+\chapterauthors{Anne Author\\
+A. Writer}
+\begin{abstract}
+This document describes the \LaTeX\ styles ``svcon,'' Springer-Verlag's style package for multiauthored books and ``svsing,'' Springer-Verlag's style package for single-authored books. These styles are variations of the standard ``report'' style, and only the differences are noted here. For a complete reference, see \LaTeX: {\it A Document Preparation System} by Leslie Lamport. A short example of a paper prepared with the ``svcon'' style may be found at the end of this document. Support may be obtained for these macrosby sending a request by electronic mail to svnytex@spint.compuserve.com.
+\end{abstract}
+\section{Starting the Document}
+\label{starting}
+\subsection{Multiauthored Books} Each chapter in a multiauthored book may be written by different authors, who write and test their parts as self-contained manuscripts. The chapters are then submitted to the editor to be collected into the whole. An author's document should start out as follows.
+\begin{verbatim}
+\documentstyle[svcon]{report}
+\begin{document}
+\pagenumbering{arabic}
+\chapter{Title of your Chapter}
+\chapterauthors{Your Name\\
+Another Author's Name}
+\begin{abstract}
+The abstract...
+\end{abstract}
+\end{verbatim}
+and should end with
+\begin{verbatim}
+\end{document}
+\end{verbatim}
+All these are standard \LaTeX\ commands, except for \verb|\chapterauthors|. \verb|\chapterauthors| takes as an argument a list of authors, separated by the command \verb|\\|. (Author affliations will be listed in the front matter in a List of Contributors.) As a side-effect of this command, the chapter name and the names of the authors will be placed in the running heads automatically.
+
+\subsection{Single-Authored Books}
+A document that uses the ``svsing'' style should start as follows. \begin{verbatim}
+\documentstyle[svsing]{report}
+\begin{document}
+\end{verbatim} and each chapter starts with
+\begin{verbatim}
+\chapter{Chapter Title}
+\end{verbatim}
+Naturally, \verb|\chapterauthors| and the abstract is not necessary for each chapter. In this style, the chapter name and the section name will be placed in the running heads.
+\section{Sectioning Commands}
+The following sectioning commands are available in these styles: \verb|\part|, \verb|\chapter|, \verb|\section|, \verb|\subsection|,
+\verb|\subsubsection|, \verb|\paragraph|, and \verb|\subparagraph|; to be used as described in the \LaTeX\ book. \verb|\part| is only used when the separate papers are put together into one document. By default, \verb|\part|, \verb|\chapter|, \verb|\section|, and \verb|\subsection| are numbered and placed in the table of contents. The commands
+\begin{verbatim}
+\setcounter{secnumdepth}{2}% number section and subsections
+\setcounter{tocdepth}{2}% and put them in table of contents \end{verbatim}
+found in the style file may be copied and changed by the editor if desired, but should not be changed by the individual authors. The important words in a section argument should be capitalized.
+%\section{Tables}
+%A special type of float, the \verb|stable|, has been added. For example,
+%\begin{verbatim}
+%\begin{stable}{HYN Common Stock}{rcrp{2in}}
+%\multicolumn{1}{c}{Year}&
+%\multicolumn{1}{c}{Price}&
+%\multicolumn1c{Dividend}\\
+%\TableSubtitleRule 1971& 41--54& \$2.60\\
+% 2& 41--54& 2.70&
+%This paragraph is long enough to span at least two lines.
+%\TableFootnote{Prices are in dollars per share}
+%\end{stable}
+%\end{verbatim} will produce table \ref{shorttable} here or at the top of the %next page.
+%\begin{stable}{HYN Common Stock}{rcrp{2in}} \multicolumn{1}{c}{Year}&
+%\multicolumn{1}{c}{Price}&
+%\multicolumn1c{Dividend}\\
+%\TableSubtitleRule 1971& 41--54& \$2.60\\
+% 2& 41--54& 2.70&
+%This paragraph is long enough to span at least two lines.
+%\TableFootnote{Prices are in dollars per share}
+%\label{shorttable}
+%\end{stable} The first argument to \verb|stable| is the title of the table, %the second is the normal preamble that would be specified for a table made %with the \verb|tabular| environment. The body of the \verb|stable| is %specified in the same manner as the body of \verb|tabular|. The command %\verb|\TableSubtitleRule| will draw a horizontal rule below the column heads, %with the proper vertical spacing. Note that you have to specify the center%ing of the column heads, since \TeX\ doesn't know they're different from %normal column entries. \verb|\TableFootnote| takes one argument, the text to %go in the footnote of the table. It may appear anywhere in the body of the %\verb|stable|.
+\section{Acknowledgments}
+Acknowledgments go at the end of a chapter, just before the bibliography. \verb|\acknowledgments| is a sectioning command without any arguments, and should be followed by a paragraph of text.
+\section{The Bibliography}
+\label{bibl}
+Bibliographies are created with \verb|bibtex|. Generally, you will have a central bibliography database, which will have an entry for every paper you have ever referenced. Put the command \verb|\cite{CHERI83}|, in the text of the document, to reference the paper ``The Distributed V Kernel and its Performance for Diskless Workstations'' by D.R. Cheriton. Then, at the end of the document, but before the \verb|\end{document}|, put
+\begin{verbatim}
+\bibliographystyle{alpha}
+\bibliography{master}% name of your bibliography database \end{verbatim}
+Then, run your document through \LaTeX. It will complain \begin{verbatim} LaTeX Warning: Citation `CHERI83' on page 1 undefined.
+\end{verbatim} and
+\begin{verbatim}
+No file paper.bbl
+\end{verbatim}
+This will put some entries in the .aux file. Now run \verb|bibtex paper|, which will create the file paper.bbl, by extracting the proper references from your bibliographic database. \verb|bibtex| should not give any error messages. Then run \LaTeX\ again. Again, the warning
+\begin{verbatim}
+LaTeX Warning: Citation `CHERI83' on page 1 undefined. \end{verbatim} will appear. Run \LaTeX\ yet again, and there should be no warnings. This process must be repeated every time a new reference is added to your document, so you will probably want to wait until the paper is nearly finished before producing the bibliography.
+\subsection{The Bibliography Database}
+The bibliography entry for the preceding example would have been put into the file master.bib as follows:
+\begin{verbatim}
+@Inproceedings(CHERI83, key ="CHERI83",
+author="D.R.~Cheriton and W.~Zwaenepoel",
+title="The Distributed V Kernel and its Performance for
+Diskless Workstations",
+booktitle="Proceedings of the 9th Symposium on Operating
+System Principles",
+Organization="ACM", Year=1983)
+\end{verbatim}
+\subsection{What Bibtex Produces} In the preceding example, the file paper.bbl might contain
+\begin{verbatim}
+\begin{thebibliography}{CZ83}
+\bibitem[BL80]{lampson} Ed. B.W.~Lampson.
+\newblock
+{\it Distributed Systems: Architecture and Implementation}.
+\newblock
+Springer-Verlag, 1980.
+\bibitem[CZ83]{cheri83} D.R.~Cheriton and W.~Zwaenepoel.
+\newblock
+The distributed v kernel and its performance for diskless
+workstations.
+\newblock In {\it Proceedings of the 9th Symposium on
+Operating System Principles}, ACM, 1983.
+\end{thebibliography}
+\end{verbatim}
+If you don't have bibtex, this file could be produced by hand. However, bibtex should be part of the \LaTeX\ package.
+\section{Producing the Collected Works in the ``svmult'' Style}
+This section is for editors collecting chapters from various contributors of a multiauthored book. The standard commands up to and including \verb|\begin{document}|, and after and including \verb|\end{document}| must be removed from each chapter. Then, a master file should be produced, with the commands
+\begin{verbatim}
+\documentstyle[svmult]{report}
+\begin{document}
+\tableofcontents
+\pagenumbering{arabic}
+\end{verbatim}
+followed by an \verb|\include| command for each chapter. Front material may be in this master file, or a separate file that's included. \verb|part| commands, if desired, should be put in this file, between the \verb|include| commands.
+
+\subsection{Bibliography}
+In order to produce a bibliography for each chapter in a collected work, each chapter must be in a separate file, and be set up as in section \ref{bibl} (except the chapter doesn't end in \verb|\end{document}|). Run \LaTeX\ on the whole document, then bibtex on each chapter, then re-run \LaTeX\ on the whole document twice. A master bibliography for the entire work may be produced in the normal manner, by putting the appropriate commands in the master file and running bibtex on the master file. You can have both bibliographies for each chapter and for the entire work at the same time.
+\appendix
+\chapter{Getting Started}
+\section{A Short Example}
+This example will serve as a framework from which to start. \begin{verbatim}
+\documentstyle[svcon]{report}
+\begin{document}
+\pagenumbering{arabic}
+\chapter{Springer-Verlag Multi-Author Style for \LaTeX}
+\chapterauthors{Anne Author\\
+A. Writer}
+\begin{abstract}
+This document describes the style ``svcon,''
+Springer-Verlag's style package for
+multiauthored books that are typeset using \LaTeX.
+\end{abstract}
+\section{Starting the Document}
+Each chapter in a multiauthored book may be written by a
+different author, who write and test their parts as
+self-contained manuscripts.
+\subsection{The Bibliography Database}
+\acknowledgements
+Thanks go to the appropriate people.
+\appendix
+\chapter{Getting Started}
+\section{A Short Example}
+\bibliographystyle{alpha}
+\bibliography{master}% name of your bibliography database
+\end{document}
+\end{verbatim}
+
+\section{Submission of \TeX\ Files for Publication}
+
+Authors should submit the following to book editors and, likewise, editors or single authors should submit the same to Springer-Verlag.\\
+
+\vspace{.5pc}
+\noindent {\tt
+Hardcopy of the chapter (or book),\\
+plus a diskette or diskettes of all .tex files,\\
+plus all .dvi files,\\
+plus all author macro files,\\
+as well as originals and a photocopy of all illustrations.
+}
+
+\vspace{.5pc}
+Authors and editors should remember to keep at least one copy of all files and illustrations for themselves.
+
+\section{Indexes}
+
+These style files work for the output of a \LaTeX\ index file as well. Follow the instructions in the \LaTeX\ book. Authors wishing to generate separate author and subject indexes may use the commands
+\begin{verbatim}
+\begin{theauthorindex} . . .\end{theauthorindex}
+
+\begin{thesubjectindex} . . .\end{thesubjectindex}
+\end{verbatim}
+in place of the \verb|theindex| commands. This will produce the proper chapter heading as well as running heads.
+\section{Installing the Style Packages}
+Optimally, the files svsing.sty, svcon.sty, and svmult.sty should be placed in the same location as the rest of the style files; on \UNX, that might be /usr/local/lib/tex/macros/svcon.sty. If the user doesn't have the privileges to install system software, the environment variable \verb|TEXINPUTS| may be set to look for style files wherever desired. For example, on \UNX, the csh command
+\begin{verbatim}
+setenv TEXINPUTS ".:$HOME/lib:/usr/local/lib/tex/macros" \end{verbatim}
+will cause \TeX\ to look in the current directory, the user's private library directory, and the default system directory. svcon.sty will be found if placed in any of these locations. Equivalent commands are available on most other operating systems. Directly including the style file into your source, or using \verb|\input| or \verb|\include| will not work, because the style files contain special commands that are valid only when processed using \verb|documentstyle|.
+\end{document}  \ No newline at end of file
diff --git a/obsolete/macros/latex209/contrib/svlatex/svmult.sty b/obsolete/macros/latex209/contrib/svlatex/svmult.sty
new file mode 100644
index 0000000000..e8fa677639
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/svlatex/svmult.sty
@@ -0,0 +1,399 @@
+% Copyright (C) 1988 Springer-Verlag, Inc.
+%
+% Everyone is granted permission to copy and redistribute this file, as
+% long as it is unchanged.
+%
+%
+% smva.sty 01 Nov 87
+%
+%
+\newif\if@multipleauthors
+\@ifundefined{@svsa}{%
+ \@multipleauthorstrue
+ \typeout{Sub-style 'svmult' (Springer-Verlag Multi-Authored). Released January 1993}}%
+ {\@multipleauthorsfalse}
+\ds@twoside
+\headheight=9pt
+\headsep=15pt % 2pc-9pt
+\textheight=45pc
+\textwidth=27pc
+\parindent=1em
+%
+% Running head: 9 pt CM, c/lc, 2em# inside of fl. outside folio, base aligns
+% with folio; recto: CN, period, word # to CT; verso: contributor's name(s).
+% In single-author, verso: SN, period, word # to ST.
+%
+% If you want the running heads on the opposite pages, just put \flipheads
+% after the documentstyle. LaTeX isn't bright enough to allow one option
+% file to define ds@flipheads.
+%
+\newif\if@flipheads \@flipheadsfalse
+\def\flipheads{\@flipheadstrue}
+\def\ps@headings{\let\@mkboth=\markboth % Instead of \@gobbletwo, for toc
+ \def\@oddfoot{}\def\@evenfoot{}% No feet.
+ \if@flipheads
+ \def\@oddhead{\ixONxi\rm
+ \hbox{}\hfil{\rightmark}\hskip 2em minus 1em\thepage}%
+ \def\@evenhead{\ixONxi\rm \thepage\hskip 2em\leftmark \hfill}%
+ \else
+ \def\@oddhead{\ixONxi\rm
+ \hbox{}\hfil{\leftmark}\hskip 2em minus 1em\thepage}%
+ \def\@evenhead{\ixONxi\rm \thepage\hskip 2em\rightmark \hfill}%
+ \fi
+ \def\chaptermark##1{\markbothsame{\ifnum \c@secnumdepth >\m@ne
+ \@chapapp\ %\thechapter. \
+ \fi ##1}}%
+ \if@multipleauthors
+ \def\sectionmark##1{}%
+ \else
+ \def\sectionmark##1{\markleft{\ifnum \c@secnumdepth >\z@
+ \thesection. \ \fi ##1}}%
+ \fi
+}
+
+\pagestyle{headings}
+\pagenumbering{roman} % toc is in roman
+\def\@chapterauthors{}
+\def\markbothsame#1{\markboth{#1}{#1}}
+\def\markleft#1{{\let\protect\noexpand\expandafter\@markleft\@themark
+ {#1}\mark{\@themark}}}
+\def\@markleft#1#2#3{\gdef\@themark{{#3}{#2}}}
+\def\leftmark{\expandafter\@leftmark\topmark}
+%
+% All pages without running heads must carry corner marks.
+%
+\def\clap#1{\hbox to 0pt{\hss#1\hss}}
+\newdimen\@crosshairrule \@crosshairrule=.24pt
+\def\@crosshairs{\vbox to 0pt{\hsize=0pt\baselineskip=0pt\lineskip=0pt
+ \vss
+ \clap{\vrule height .125in width \@crosshairrule depth 0pt}
+ \clap{\vrule width .25in height \@crosshairrule depth 0pt}
+ \clap{\vrule height .125in width \@crosshairrule depth 0pt}
+ \vss}}
+\def\ps@empty{%
+\def\@oddhead{\hfill\raise\headheight\@crosshairs}
+\let\@evenhead\@oddhead
+\def\@evenfoot{}\let\@oddfoot\@evenfoot}
+\frenchspacing
+\def\@chapapp{}
+\def\viiiONx{\@setsize\viiiONx{10pt}\viipt\@viipt}
+\def\ixONxi{\@setsize\ixONxi{11pt}\ixpt\@ixpt}
+\def\xONxii{\normalsize}
+\def\xiiONxiv{\@setsize\xiiONxiv{14pt}\xiipt\@xiipt}
+\def\xivONxvi{\@setsize\xivONxvi{16pt}\xivpt\@xivpt}
+\def\xivONxiv{\@setsize\xivONxiv{14pt}\xivpt\@xivpt}
+\def\xxONxx{\@setsize\xxONxx{20pt}\xxpt\@xxpt}
+\font\chnum = cmr10 scaled \magstep5
+
+\def\chapter{\cleardoublepage % Starts new recto.
+ \thispagestyle{empty} % Page style of chapter page is 'empty'
+ \global\@topnum\z@ % Prevents figures from going at top of page.
+ \@afterindentfalse % Suppresses indent in first paragraph. Change
+ \secdef\@chapter\@schapter} % to \@afterindenttrue to have indent.
+
+%
+% Chapter number: 24 CM arabic numeral, fl.l, top text
+% Chapter title: 20/20 CM x 27pc, c/lc, fl.l, sink 60 pt from top
+% type to base of CT, to's fl.l, do not hyphenate
+
+\def\@makechapterhead#1{ % Heading for \chapter command
+% We want the chapter number to be 20 pts from top text. The simplest
+% was is to set \topskip, making sure there's nothing between the number
+% and the top of page, so \baselineskip doesn't come in.
+ { \topskip=20pt \parindent 0pt \raggedright
+ \xxONxx\rm
+ \ifnum \c@secnumdepth >\m@ne % IF secnumdepth > -1 THEN
+ \@chapapp{} {\chnum \thechapter} % Print 'Chapter' and number.
+ \par
+ \vskip 6pt \fi % Space between number and title.
+ #1\par % Title.
+ \nobreak % TeX penalty to prevent page break.
+ \vskip-\prevdepth % Fool TeX into ignoring the depth of
+ \prevdepth=0pt % the CT when spacing to the CA
+ \if@multipleauthors
+ \vskip 30pt % 2.5pi b/b between title and chapter authors
+ \else
+ \vskip 44pt % want ~60pt b/b to abstract
+ \fi
+}
+ }
+
+\def\@makeschapterhead#1{ % Heading for \chapter* command
+ { \topskip=44pt \parindent 0pt \raggedright
+ \xxONxx\rm
+ #1\par % Title.
+ \nobreak % TeX penalty to prevent page break.
+ \vskip-\prevdepth % Fool TeX into ignoring the depth of
+ \prevdepth=0pt % the CT when spacing to the CA
+ \if@multipleauthors
+ \vskip 30pt % 2.5pi b/b between title and chapter authors
+ \else
+ \vskip 44pt % want ~60pt b/b to abstract
+ \fi
+
+ } }
+
+\if@multipleauthors
+\gdef\chapterauthors#1{%
+ {\def\\{, }\def\footnote##1{}\def\footnotemark[##1]{}%
+ \xdef\@chapterauthors{#1}}%
+ \markright{\@chapterauthors}%
+ {\parindent0pt \raggedright\xivONxiv\rm #1\par
+ \nobreak
+ \vskip 12pt
+}}\fi
+
+%
+% Restart the footnote counter each chapter.
+%
+%\newcounter{footnote}[chapter]
+%
+% FN 1pc space above footnotes to text.
+% 5 pc 1/2 pt rule fl.l. above footnotes
+% leave 6pt # after rule followed by ftn
+%
+\skip\footins=18.5pt % space above line and below line, 1pc+6pt+.5pt
+\footskip=16pt
+\footnotesep=7pt % pretty arbitrary
+\def\footnotesize{\@setsize\footnotesize{10pt}\ixpt\@ixpt}
+\def\footnoterule{\kern-6.5pt\hrule width 5pc height .5pt\vskip 6pt}
+%
+% Footnote at end of chapter position below last text line (not at bottom
+% of page).
+%
+\def\clearpage{\par\penalty -\@M \write\m@ne{}\vbox{}\penalty -\@Mi}
+\def\@makecol{\ifvoid\footins \setbox\@outputbox\box\@cclv
+ \else\setbox\@outputbox
+ \vbox{\unvbox\@cclv\vskip\skip\footins\footnoterule\unvbox\footins}\fi
+ \xdef\@freelist{\@freelist\@midlist}\gdef\@midlist{}\@combinefloats
+ \setbox\@outputbox\vbox to\@colht{\boxmaxdepth\maxdepth
+ \@texttop
+ \@tempdima=\@colht \multiply\@tempdima by 10 \divide\@tempdima by 9
+ \ifdim \ht\@outputbox<\@tempdima
+ \unvbox\@outputbox \vfill
+ \else
+ \unvbox\@outputbox
+ \fi
+ \@textbottom}\global\maxdepth\@maxdepth}
+%
+% Abstract: 9/11 TRx25pi, sink 2.5pi b/b from CA
+%
+\def\abstract{\vskip 9pt % from CA
+\rightskip=1pc\leftskip=1pc\parindent=\z@
+\ixONxi\rm
+{ABSTRACT }}
+\def\endabstract{\par} % If we don't do this, the paragraph won't be
+ % set until after rightskip and leftskip have been
+ % returned to their old values.
+
+\def\tableofcontents{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \fi\chapter*{Contents\@mkboth{Contents}{Contents}}
+ \@starttoc{toc}\if@restonecol\twocolumn\fi}
+
+%
+% Don't indent the paragraph following each header. Vertical distances
+% showld have \baselineskip taken out, and the height of the next
+% line, which should be text (10/12 TR).
+%
+\setcounter{secnumdepth}{2} % number section and subsections
+\setcounter{tocdepth}{2} % and put them in the table of contents
+% No 1 Head, 14/16 CM, 36pt b/b above, 24 tp b/b below
+\def\section{\@startsection
+ {section}{1}{\z@}{-21pt plus 6pt minus 1pt}{12pt plus 2pt}%
+ {\xivONxvi\rm\raggedright}}
+% No 2 Head, 12/14 CM italic, 30pt above, 18 pt below
+\def\subsection{\@startsection
+ {subsection}{2}{\z@}{-16pt plus 4pt minus 1pt}{6pt plus 1pt}%
+ {\xiiONxiv\it\raggedright}}
+% No 3 Head, 10/12 CM, 24pt above, 18pt below
+\def\subsubsection{\@startsection
+ {subsubsection}{3}{\z@}{-12pt plus 3pt minus 1pt}{6pt plus 1pt}%
+ {\xONxii\rm\raggedright}}
+% No 4 Head, 10/12 CM italic, 20pt above, 18pt below
+\def\paragraph{\@startsection
+ {paragraph}{4}{\z@}{-8pt plus 2pt minus .5pt}{6pt plus 1pt}%
+ {\xONxii\it\raggedright}}
+% No 5 Head, 10/12 CM italic, period, en space to run in text, 18pt above
+\def\subparagraph#1{\@startsection
+ {subparagraph}{5}{\z@}{-6pt plus 2pt minus .5pt}{-.5em}{\xONxii\it}{#1.}}
+% Ack: Acknowledgements same as No 5 head, 36pt above
+\def\acknowledgments{\@startsection
+ {subparagraph}{6}{\z@}{-24pt plus 6pt minus 1pt}{-.5em}%
+ {\xONxii\it}*{Acknowledgments:\/}}
+% R-1: ``References'', same as No.2 head
+% unless it's single-author.
+\def\mainbibliography#1{{\@multipleauthorsfalse\bibliography{#1}}}
+\def\thebibliography#1{%
+\if@multipleauthors
+ \@startsection
+ {section}{2}{\z@}{-16pt plus 4pt minus 1pt}{6pt plus 1pt}%
+ {\xiiONxiv\rm\raggedright}{References}%
+\else
+ \chapter*{References\@mkboth
+ {References}{References}}%
+ \addcontentsline{toc}{chapter}{\protect\numberline{}References}%
+\fi
+%endif
+ \list
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus -.07em}
+ \sloppy
+ \sfcode`\.=1000\relax}
+% Put index in the toc
+\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\@makeschapterhead{Index}]
+ \addcontentsline{toc}{chapter}{\protect\numberline{}Index}%
+ \@mkboth{Index}{Index}\thispagestyle{empty}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+\def\theauthorindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\@makeschapterhead{Author Index}]
+ \addcontentsline{toc}{chapter}{\protect\numberline{}Author Index}%
+ \@mkboth{Author Index}{Author Index}\thispagestyle{empty}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+\def\thesubjectindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\@makeschapterhead{Subject Index}]
+ \addcontentsline{toc}{chapter}{\protect\numberlin6e{}Subject Index}%
+ \@mkboth{Subject Index}{Subject Index}\thispagestyle{empty}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+\def\thesymbolindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\@makeschapterhead{Symbol Index}]
+ \addcontentsline{toc}{chapter}{\protect\numberline{}Symbol Index}%
+ \@mkboth{Symbol Index}{Symbol Index}\thispagestyle{empty}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+
+%
+% lists: 10/12 TRx27pc, 1/2line# above/below
+%
+\topsep 6pt plus 3pt minus 1pt % Extra vertical space, in addition to
+ % \parskip, added above and below list and
+ % paragraphing environments.
+\itemsep 6pt plus 2pt minus 1pt % Extra vertical space, in addition to
+ % \parskip, added between list items.
+%
+% Eq: Center on text width; equation numbers set flush right, align with
+% last line of equation, 6pt # above/below.
+%
+\abovedisplayskip=6pt plus 1.5pt minus 3pt
+\belowdisplayskip=\abovedisplayskip
+\abovedisplayshortskip=\z@ plus 1.5pt
+\belowdisplayshortskip=3pt plus 1.5pt minus 1.5pt
+%
+% FL: Figure legends ``FIGURE 0.0'' 9/11 CM, c/lc, period, word # to text.
+%
+\long\def\@makecaption#1#2{{
+ \vskip 10pt
+ \ixONxi
+ \setbox\@tempboxa\hbox{#1. #2}
+ \ifdim \wd\@tempboxa >\hsize % IF longer than one line:
+ \unhbox\@tempboxa\hfil\par % THEN set as ordinary paragraph.
+ \else % ELSE center.
+ \hbox to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi}}
+\def\fnum@figure{\ixONxi FIGURE \thefigure}%
+%
+% TN+TT: ``TABLE 0.0'' 9/11 TR, c/lc. period, word # to table title:
+% 3 pt # below to 1/2 pt rule x table measuer, 3 pt # below rule to
+% TCH
+%
+\arrayrulewidth=.5pt
+\def\fnum@table{\ixONxi TABLE~\thetable}
+\def\TableSubtitleRule{\noalign{\vskip 3pt}\hline\noalign{\vskip 3pt}}
+\long\def\TableFootnote#1{\gdef\TFN{#1}}
+
+\def\@@startpbox#1{\vtop\bgroup \hsize #1\@arrayparboxrestore
+\parindent=-1em\leftskip=1em}
+\newsavebox{\@stablebox}
+\def\stable#1#2{\@ifnextchar[{\@stable{#1}{#2}}{\@stable{#1}{#2}[h]}}
+\def\@stable#1#2[#3]{\begin{table}[#3]
+ \def\foo{#1}\def\TFN{}%
+ \viiiONx
+ \setbox\@stablebox=\hbox\bgroup
+ \begin{tabular}{#2}%
+ \noalign{\vskip 3pt}
+ \hline
+ \noalign{\vskip 3pt}}
+\@namedef{endstable}{\crcr\noalign{\vskip 6pt}\hline\end{tabular}\egroup
+$$\vbox{\hsize=\wd\@stablebox
+\caption{\foo}
+\box\@stablebox
+\prevdepth=0pt % last thing was a rule
+\par
+\TFN}$$
+\end{table}}
+%%%% GROT. This is hacked to move a label definition outside.
+%%%% I think the whole stable idea is broken.
+
+\def\stable#1#2{\@ifnextchar[{\@stable{#1}{#2}}{\@stable{#1}{#2}[h]}}
+\def\@stable#1#2[#3]{\table[#3]
+ \def\foo{#1}\def\TFN{}\def\stablelabel{}%
+ \viiiONx
+ \setbox\@stablebox=\hbox\bgroup\def\label##1{\gdef\stablelabel{\label{##1}}}%
+ \tabular{#2}%
+ \noalign{\vskip 3pt}%
+ \hline
+ \noalign{\vskip 3pt}}
+\@namedef{endstable}{\crcr\noalign{\vskip 6pt}\hline\endtabular\egroup
+$$\vbox{\hsize=\wd\@stablebox
+\caption{\foo}\stablelabel
+\box\@stablebox
+\prevdepth=0pt % last thing was a rule
+\par
+\TFN}$$
+\endtable}
+
+\def\stablecont#1#2{\@ifnextchar[{\@stablecont{#1}{#2}}{\@stablecont{#1}{#2}[h]}}
+\def\@stablecont#1#2[#3]{\table[#3]
+ \def\foo{#1}\def\TFN{}
+ \viiiONx
+ \setbox\@stablebox=\hbox\bgroup\def\label{\error}
+ \tabular{#2}%
+ \noalign{\vskip 3pt}%
+ \hline
+ \noalign{\vskip 3pt}}
+\@namedef{endstablecont}{\crcr\noalign{\vskip 6pt}\hline\endtabular\egroup
+$$\vbox{\hsize=\wd\@stablebox
+ \begingroup
+ \@parboxrestore
+ \vskip 10pt
+ \ixONxi
+ \setbox\@tempboxa\hbox{\ignorespaces \foo}
+ \ifdim \wd\@tempboxa >\hsize % IF longer than one line:
+ \unhbox\@tempboxa\hfil\par % THEN set as ordinary paragraph.
+ \else % ELSE center.
+ \hbox to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi\par
+ \endgroup
+\box\@stablebox
+\prevdepth=0pt % last thing was a rule
+\par
+\TFN}$$
+\endtable}
+
+%%%%
+\newdimen\stabularwidth
+
+\def\stabular{\@ifnextchar[{\@stabular}{\@stabular[h]}}
+\def\@stabular[#1]#2{
+ \setbox\@stablebox=\hbox\bgroup\viiiONx
+ \tabular[#1]{#2}%
+ \noalign{\vskip 3pt}%
+ \hline
+ \noalign{\vskip 3pt}}
+\def\endstabular{\crcr\noalign{\vskip 6pt}\hline\endtabular\egroup
+\stabularwidth=\wd\@stablebox
+\box\@stablebox}
+
+\def\thefigure{\@arabic\c@figure} %% deletes Chap No from Section.
+
+\def\appendix{\par
+ \setcounter{chapter}{0}
+ \setcounter{section}{0}
+ \def\@chapapp{}
+ \def\thechapter{\Alph{chapter}}}
+ \ No newline at end of file
diff --git a/obsolete/macros/latex209/contrib/svlatex/svsing.sty b/obsolete/macros/latex209/contrib/svlatex/svsing.sty
new file mode 100644
index 0000000000..0d2369d771
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/svlatex/svsing.sty
@@ -0,0 +1,346 @@
+\typeout{Sub-style 'svsing' (Springer-Verlag Single-Authored). Released January 1993}
+
+% Copyright (C) 1988 Springer-Verlag, Inc.
+%
+% Everyone is granted permission to copy and redistribute this file, as
+% long as it is unchanged.
+%
+%
+
+\ds@twoside
+\headheight=9pt
+\headsep=15pt % 2pc-9pt
+\textheight=45pc
+\textwidth=27pc
+\parindent=1em
+%
+% Running head: 9 pt TR, c/lc, 2em# inside of fl. outside folio, base aligns
+% with folio; recto: CN, period, word # to CT; verso: contributor's name(s).
+% In single-author, verso: SN, period, word # to ST.
+%
+% If you want the running heads on the opposite pages, just put \flipheads
+% after the documentstyle. LaTeX isn't bright enough to allow one option
+% file to define ds@flipheads.
+%
+\def\ps@headings{\let\@mkboth=\markboth % Instead of \@gobbletwo, for toc
+ \def\@oddfoot{}\def\@evenfoot{}% No feet.
+ \def\@oddhead{\ixONxi\rm
+ \hbox{}\hfil{\leftmark}\hskip 2em minus 1em\thepage}%
+ \def\@evenhead{\ixONxi\rm \thepage\hskip 2em\rightmark \hfill}%
+ \def\chaptermark##1{\markbothsame{\ifnum \c@secnumdepth >\m@ne
+ \@chapapp\ \thechapter. \ \fi ##1}}%
+ \def\sectionmark##1{\markleft{\ifnum \c@secnumdepth >\z@
+ \thesection. \ ##1}}%
+ }
+
+\pagestyle{headings}
+\pagenumbering{roman} % toc is in roman
+\def\@chapterauthors{}
+\def\markbothsame#1{\markboth{#1}{#1}}
+\def\markleft#1{{\let\protect\noexpand\expandafter\@markleft\@themark
+ {#1}\mark{\@themark}}}
+\def\@markleft#1#2#3{\gdef\@themark{{#3}{#2}}}
+\def\leftmark{\expandafter\@leftmark\topmark}
+%
+% All pages without running heads must carry corner marks.
+%
+\def\clap#1{\hbox to 0pt{\hss#1\hss}}
+\newdimen\@crosshairrule \@crosshairrule=.24pt
+\def\@crosshairs{\vbox to 0pt{\hsize=0pt\baselineskip=0pt\lineskip=0pt
+ \vss
+ \clap{\vrule height .125in width \@crosshairrule depth 0pt}
+ \clap{\vrule width .25in height \@crosshairrule depth 0pt}
+ \clap{\vrule height .125in width \@crosshairrule depth 0pt}
+ \vss}}
+\def\ps@empty{%
+\def\@oddhead{\hfill\raise\headheight\@crosshairs}
+\let\@evenhead\@oddhead
+\def\@evenfoot{}\let\@oddfoot\@evenfoot}
+\frenchspacing
+\def\@chapapp{}
+\def\viiiONx{\@setsize\viiiONx{10pt}\viipt\@viipt}
+\def\ixONxi{\@setsize\ixONxi{11pt}\ixpt\@ixpt}
+\def\xONxii{\normalsize}
+\def\xiiONxiv{\@setsize\xiiONxiv{14pt}\xiipt\@xiipt}
+\def\xivONxvi{\@setsize\xivONxvi{16pt}\xivpt\@xivpt}
+\def\xivONxiv{\@setsize\xivONxiv{14pt}\xivpt\@xivpt}
+\def\xxONxx{\@setsize\xxONxx{20pt}\xxpt\@xxpt}
+\font\chnum = cmr10 scaled \magstep5
+
+\def\chapter{\cleardoublepage % Starts new recto.
+ \thispagestyle{empty} % Page style of chapter page is 'empty'
+ \global\@topnum\z@ % Prevents figures from going at top of page.
+ \@afterindentfalse % Suppresses indent in first paragraph. Change
+ \secdef\@chapter\@schapter} % to \@afterindenttrue to have indent.
+
+%
+% Chapter number: 24 CM, arabic numeral, fl.l, top text
+% Chapter title: 20/20 CM x 27pc, c/lc, fl.l, sink 60 pt from top
+% type to base of CT, to's fl.l, do not hyphenate
+%
+\def\@makechapterhead#1{ % Heading for \chapter command
+% We want the chapter number to be 20 pts from top text. The simplest
+% was is to set \topskip, making sure there's nothing between the number
+% and the top of page, so \baselineskip doesn't come in.
+\vbox to 20pc{{ \topskip=20pt \parindent 0pt \raggedright
+ \xxONxx\rm
+ \ifnum \c@secnumdepth >\m@ne % IF secnumdepth > -1 THEN
+ {\chnum \@chapapp{} \thechapter} % Print 'Chapter' and number.
+ \par
+ \vskip 10pt % Space between number and title.
+ #1\par % Title.
+ \nobreak % TeX penalty to prevent page break.
+~ \vfil
+} } }
+
+\def\@makeschapterhead#1{ % Heading for \chapter* command
+\vbox to 20pc{{ \topskip=46pt \parindent 0pt \raggedright
+ \xxONxx\rm
+ #1\par % Title.
+ \nobreak % TeX penalty to prevent page break.
+ %\v~fil
+} } }
+
+%
+% Restart the footnote counter each chapter.
+%
+%\newcounter{footnote}[chapter]
+%
+% FN 1pc space above footnotes to text.
+% 5 pc 1/2 pt rule fl.l. above footnotes
+% leave 6pt # after rule followed by ftn
+%
+\skip\footins=18.5pt % space above line and below line, 1pc+6pt+.5pt
+\footskip=16pt
+\footnotesep=7pt % pretty arbitrary
+\def\footnotesize{\@setsize\footnotesize{10pt}\ixpt\@ixpt}
+\def\footnoterule{\kern-6.5pt\hrule width 5pc height .5pt\vskip 6pt}
+%
+% Footnote at end of chapter position below last text line (not at bottom
+% of page).
+%
+\def\clearpage{\par\penalty -\@M \write\m@ne{}\vbox{}\penalty -\@Mi}
+\def\@makecol{\ifvoid\footins \setbox\@outputbox\box\@cclv
+ \else\setbox\@outputbox
+ \vbox{\unvbox\@cclv\vskip\skip\footins\footnoterule\unvbox\footins}\fi
+ \xdef\@freelist{\@freelist\@midlist}\gdef\@midlist{}\@combinefloats
+ \setbox\@outputbox\vbox to\@colht{\boxmaxdepth\maxdepth
+ \@texttop
+ \@tempdima=\@colht \multiply\@tempdima by 10 \divide\@tempdima by 9
+ \ifdim \ht\@outputbox<\@tempdima
+ \unvbox\@outputbox \vfill
+ \else
+ \unvbox\@outputbox
+ \fi
+ \@textbottom}\global\maxdepth\@maxdepth}
+%
+% Abstract: 9/11 TRx25pi, sink 2.5pi b/b from CA
+%
+\def\abstract{\vskip 21pt % from CA
+\rightskip=1pc\leftskip=1pc\parindent=\z@
+\ixONxi\rm
+{ABSTRACT }}
+\def\endabstract{\par} % If we don't do this, the paragraph won't be
+ % set until after rightskip and leftskip have been
+ % returned to their old values.
+
+\def\tableofcontents{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \fi\chapter*{Contents\@mkboth{Contents}{Contents}}
+ \@starttoc{toc}\if@restonecol\twocolumn\fi}
+
+%
+% Don't indent the paragraph following each header. Vertical distances
+% showld have \baselineskip taken out, and the height of the next
+% line, which should be text (10/12 TR).
+%
+\setcounter{secnumdepth}{2} % number section and subsections
+\setcounter{tocdepth}{2} % and put them in the table of contents
+% No 1 Head, 14/16 TR, 36pt b/b above, 24 tp b/b below
+\def\section{\@startsection
+ {section}{1}{\z@}{-21pt plus 6pt minus 1pt}{12pt plus 2pt}%
+ {\xivONxvi\rm\raggedright}}
+% No 2 Head, 12/14 TR, c/sc, 30pt above, 18 pt below
+\def\subsection{\@startsection
+ {subsection}{2}{\z@}{-16pt plus 4pt minus 1pt}{6pt plus 1pt}%
+ {\xiiONxiv\it\raggedright}}
+% No 3 Head, 10/12 TR, 24pt above, 18pt below
+\def\subsubsection{\@startsection
+ {subsubsection}{3}{\z@}{-12pt plus 3pt minus 1pt}{6pt plus 1pt}%
+ {\xONxii\rm\raggedright}}
+% No 4 Head, 10/12 TR italic, 20pt above, 18pt below
+\def\paragraph{\@startsection
+ {paragraph}{4}{\z@}{-8pt plus 2pt minus .5pt}{6pt plus 1pt}%
+ {\xONxii\it\raggedright}}
+% No 5 Head, 10/12 TR italic, period, en space to run in text, 18pt above
+\def\subparagraph#1{\@startsection
+ {subparagraph}{5}{\z@}{-6pt plus 2pt minus .5pt}{-.5em}{\xONxii\it}{#1.}}
+% Ack: Acknowledgements same as No 5 head, 36pt above
+\def\acknowledgments{\@startsection
+ {subparagraph}{6}{\z@}{-24pt plus 6pt minus 1pt}{-.5em}%
+ {\xONxii\it}*{Acknowledgments:\/}}
+% R-1: ``References'', same as No.2 head
+% unless it's single-author.
+\def\mainbibliography#1{{\@multipleauthorsfalse\bibliography{#1}}}
+\def\thebibliography#1{%
+ \chapter*{References\@mkboth
+ {References}{References}}%
+ \addcontentsline{toc}{chapter}{\protect\numberline{}References}%
+%endif
+ \list
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus -.07em}
+ \sloppy
+ \sfcode`\.=1000\relax}
+% Put index in the toc
+\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\@makeschapterhead{Index}]
+ \addcontentsline{toc}{chapter}{\protect\numberline{}Index}%
+ \@mkboth{Index}{Index}\thispagestyle{plain}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+\def\theauthorindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\@makeschapterhead{Author Index}]
+ \addcontentsline{toc}{chapter}{\protect\numberline{}Author Index}%
+ \@mkboth{Author Index}{Author Index}\thispagestyle{empty}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+\def\thesubjectindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\@makeschapterhead{Subject Index}]
+ \addcontentsline{toc}{chapter}{\protect\numberlin6e{}Subject Index}%
+ \@mkboth{Subject Index}{Subject Index}\thispagestyle{empty}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+\def\thesymbolindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\@makeschapterhead{Symbol Index}]
+ \addcontentsline{toc}{chapter}{\protect\numberline{}Symbol Index}%
+ \@mkboth{Symbol Index}{Symbol Index}\thispagestyle{empty}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+
+%
+% lists: 10/12 TRx27pc, 1/2line# above/below
+%
+\topsep 6pt plus 3pt minus 1pt % Extra vertical space, in addition to
+ % \parskip, added above and below list and
+ % paragraphing environments.
+\itemsep 6pt plus 2pt minus 1pt % Extra vertical space, in addition to
+ % \parskip, added between list items.
+%
+% Eq: Center on text width; equation numbers set flush right, align with
+% last line of equation, 6pt # above/below.
+%
+\abovedisplayskip=6pt plus 1.5pt minus 3pt
+\belowdisplayskip=\abovedisplayskip
+\abovedisplayshortskip=\z@ plus 1.5pt
+\belowdisplayshortskip=3pt plus 1.5pt minus 1.5pt
+%
+% FL: Figure legends ``FIGURE 0.0'' 9/11 TR, c/lc, period, word # to text.
+%
+\long\def\@makecaption#1#2{{
+ \vskip 10pt
+ \ixONxi
+ \setbox\@tempboxa\hbox{#1. #2}
+ \ifdim \wd\@tempboxa >\hsize % IF longer than one line:
+ \unhbox\@tempboxa\hfil\par % THEN set as ordinary paragraph.
+ \else % ELSE center.
+ \hbox to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi}}
+\def\fnum@figure{\ixONxi FIGURE \thefigure}%{\sc FIGURE~}\thefigure}
+%
+% TN+TT: ``TABLE 0.0'' 9/11 TR, c/lc. period, word # to table title:
+% 3 pt # below to 1/2 pt rule x table measuer, 3 pt # below rule to
+% TCH
+%
+\arrayrulewidth=.5pt
+\def\fnum@table{\ixONxi TABLE~\thetable}
+\def\TableSubtitleRule{\noalign{\vskip 3pt}\hline\noalign{\vskip 3pt}}
+\long\def\TableFootnote#1{\gdef\TFN{#1}}
+
+\def\@@startpbox#1{\vtop\bgroup \hsize #1\@arrayparboxrestore
+\parindent=-1em\leftskip=1em}
+\newsavebox{\@stablebox}
+\def\stable#1#2{\@ifnextchar[{\@stable{#1}{#2}}{\@stable{#1}{#2}[h]}}
+\def\@stable#1#2[#3]{\begin{table}[#3]
+ \def\foo{#1}\def\TFN{}%
+ \viiiONx
+ \setbox\@stablebox=\hbox\bgroup
+ \begin{tabular}{#2}%
+ \noalign{\vskip 3pt}
+ \hline
+ \noalign{\vskip 3pt}}
+\@namedef{endstable}{\crcr\noalign{\vskip 6pt}\hline\end{tabular}\egroup
+$$\vbox{\hsize=\wd\@stablebox
+\caption{\foo}
+\box\@stablebox
+\prevdepth=0pt % last thing was a rule
+\par
+\TFN}$$
+\end{table}}
+%%%% GROT. This is hacked to move a label definition outside.
+%%%% I think the whole stable idea is broken.
+
+\def\stable#1#2{\@ifnextchar[{\@stable{#1}{#2}}{\@stable{#1}{#2}[h]}}
+\def\@stable#1#2[#3]{\table[#3]
+ \def\foo{#1}\def\TFN{}\def\stablelabel{}%
+ \viiiONx
+ \setbox\@stablebox=\hbox\bgroup\def\label##1{\gdef\stablelabel{\label{##1}}}%
+ \tabular{#2}%
+ \noalign{\vskip 3pt}%
+ \hline
+ \noalign{\vskip 3pt}}
+\@namedef{endstable}{\crcr\noalign{\vskip 6pt}\hline\endtabular\egroup
+$$\vbox{\hsize=\wd\@stablebox
+\caption{\foo}\stablelabel
+\box\@stablebox
+\prevdepth=0pt % last thing was a rule
+\par
+\TFN}$$
+\endtable}
+
+\def\stablecont#1#2{\@ifnextchar[{\@stablecont{#1}{#2}}{\@stablecont{#1}{#2}[h]}}
+\def\@stablecont#1#2[#3]{\table[#3]
+ \def\foo{#1}\def\TFN{}
+ \viiiONx
+ \setbox\@stablebox=\hbox\bgroup\def\label{\error}
+ \tabular{#2}%
+ \noalign{\vskip 3pt}%
+ \hline
+ \noalign{\vskip 3pt}}
+\@namedef{endstablecont}{\crcr\noalign{\vskip 6pt}\hline\endtabular\egroup
+$$\vbox{\hsize=\wd\@stablebox
+ \begingroup
+ \@parboxrestore
+ \vskip 10pt
+ \ixONxi
+ \setbox\@tempboxa\hbox{\ignorespaces \foo}
+ \ifdim \wd\@tempboxa >\hsize % IF longer than one line:
+ \unhbox\@tempboxa\hfil\par % THEN set as ordinary paragraph.
+ \else % ELSE center.
+ \hbox to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi\par
+ \endgroup
+\box\@stablebox
+\prevdepth=0pt % last thing was a rule
+\par
+\TFN}$$
+\endtable}
+
+%%%%
+\newdimen\stabularwidth
+
+\def\stabular{\@ifnextchar[{\@stabular}{\@stabular[h]}}
+\def\@stabular[#1]#2{
+ \setbox\@stablebox=\hbox\bgroup\viiiONx
+ \tabular[#1]{#2}%
+ \noalign{\vskip 3pt}%
+ \hline
+ \noalign{\vskip 3pt}}
+\def\endstabular{\crcr\noalign{\vskip 6pt}\hline\endtabular\egroup
+\stabularwidth=\wd\@stablebox
+\box\@stablebox}
+
+
+% End of svsing
+ \ No newline at end of file
diff --git a/obsolete/macros/latex209/contrib/tamueethesis/NOTE b/obsolete/macros/latex209/contrib/tamueethesis/NOTE
new file mode 100644
index 0000000000..f280abe583
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/tamueethesis/NOTE
@@ -0,0 +1,14 @@
+ The following is a shar file for the thesis document styles of
+the Department of Electrical Engineering at Texas A&M University. Inside
+the file, there are style files, the eethesis maual, an example,
+and Postscript files of the example and manual. Please
+use /bin/sh command to shar the file. Run latex of manv4.tex and
+thesis.tex to get the manual and the example. In manv4.tex you may have
+difficulties to run through. If you have difficulties, please delete the two
+fonts {\euf R} and {\pun R} on line 1538, 1539 and 1542 of manv4.tex and you
+can get your printout.
+
+ If you have any problems, please let me know. Good luck.
+ wenlin@ee.tamu.edu (wenlin@128.194.24.2)
+
+Wen-Lin Hsieh
diff --git a/obsolete/macros/latex209/contrib/tamueethesis/READ.ME b/obsolete/macros/latex209/contrib/tamueethesis/READ.ME
new file mode 100644
index 0000000000..1a3d434f4d
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/tamueethesis/READ.ME
@@ -0,0 +1,23 @@
+READ.ME this file
+eethesis.sty eethesis style file I
+eethe12.sty eethesis style file II
+eethetitle.sty eethesis style file III
+manv4.tex the ee thesis manual
+manv4.ps the Postscript version of ee thesis manual
+app.sty the revised appendix sty file
+subequation.sty the subequation sty file
+file.c an example of c for the verbatimfile
+thesis.tex the main file of the example of eethesis
+thesis.ps the Postscript file of the example of eethesis
+title.tex the title of the example
+approve.tex the approval page of the example
+abstract.tex the abstract of the example
+ded.tex the dedication of the example
+ack.tex the acknowledgment of the example
+lists.tex the lists of the example
+ch1.tex chapter 1 of the example
+ch2.tex chapter 2 of the example
+bib.tex the bibliography of the example
+biblio.tex the bibliography (for bibtex) of the example
+append.tex Appendix A of the example
+vita.tex the vita of the example
diff --git a/obsolete/macros/latex209/contrib/tamueethesis/abstract.tex b/obsolete/macros/latex209/contrib/tamueethesis/abstract.tex
new file mode 100644
index 0000000000..dfb4d62763
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/tamueethesis/abstract.tex
@@ -0,0 +1,47 @@
+\absone
+{Transient Queueing Approximations for Computer\\Networks}
+{December 1986}
+{William A. Baker}
+{B.S., Rutgers University}
+{Dr. P.\ E.\ Cantrell}
+{ The objective of this thesis was to evaluate the performance of several
+transient queue approximations. The approximations were tested and
+characterized for a single M/M/1 queue and a tandem queue (two node)
+network.
+
+The five approximations tested in this thesis used a closure
+assumption to obtain the probability of an empty system. Then, depending
+on the method, equations were integrated to obtain the mean and, in
+some cases, the variance. Johnston's and Rider's methods solved for just the
+mean. Rothkopf/Oren's and Chang/Wang's methods obtained mean and variance
+values, and Clark's method produced several quantities which were used to
+find mean and variance statistics.
+
+For the M/M/1 case, the approximations by Clark and Chang were very accurate
+over a wide range of input patterns and initial conditions. Rothkopf's was
+accurate over all conditions but never as accurate as Chang or Clark.
+Johnston's and Rider's approximations performed acceptably only over some
+of the cases.
+The hardest
+conditions to follow, based on relative error, were low utilization cases with
+a large number in the queue at $t=0$.
+
+For nonstationary arrival patterns into the M/M/1 queue, Clark's method was
+superior to all others; mean and variance values were always within
+three percent of the exact.
+
+For the tandem queue, equations for $dM/dt$ and $dV/dt$ were derived
+to observe dependencies on joint probabilities between the queues. While
+the rate of change of the mean was only a function of the marginal
+probabilities of each queue, the rate of change for the variance
+included joint probability terms. An assumption of queue independence
+was made in order to implement the closure assumptions for the tandem
+queue.
+
+The approximations by Chang and Clark were very accurate in producing
+the mean. For low utilization cases, the methods experienced difficulties
+in following the true variance values. This was due to inaccuracies in the
+assumption that the two queues were independent of each other.
+
+In conclusion, the methods by Chang/Wang and Clark hold promise for
+use in modeling computer networks, particularly for the mean in each queue.}
diff --git a/obsolete/macros/latex209/contrib/tamueethesis/ack.tex b/obsolete/macros/latex209/contrib/tamueethesis/ack.tex
new file mode 100644
index 0000000000..3c39c8ef63
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/tamueethesis/ack.tex
@@ -0,0 +1,8 @@
+\acknow{Special thanks to Dr.\ P.\ E.\ Cantrell, whose guidance
+and patience made this thesis possible. I would also like to thank
+Drs. R.\ M.\ Feldman, J.\ D.\ Gibson, and K.\ Watson for their time
+and useful comments in reviewing this document.
+
+I am indebted to Dr.\ G.\ M.\ Clark of Ohio State University
+for help in implementing his
+approximation method.}
diff --git a/obsolete/macros/latex209/contrib/tamueethesis/app.sty b/obsolete/macros/latex209/contrib/tamueethesis/app.sty
new file mode 100644
index 0000000000..f27aff09c8
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/tamueethesis/app.sty
@@ -0,0 +1,49 @@
+\def\appendix#1{
+ \refstepcounter{appendix}
+ \newpage
+\def\theequation{\Alph{appendix}.\arabic{equation}}
+ \vskip .2truein
+ \addcontentsline{toc}{chapter}{\null\hspace{-2em}
+ APPENDIX \theappendix
+ \hspace{1.0em}#1}
+ \centerline {APPENDIX \theappendix}
+ \bigskip
+ \begin{center} {\uppercase{#1}}
+ \end{center}
+ \nobreak\bigskip}
+\tocnumflushright
+\def\fignumbox{9em}
+
+\def\l@chapter#1#2{\pagebreak[3]
+ \vskip 1.0em plus 1pt % space above chapter line
+% \@tempdima 1.55em % width of box holding chapter number
+% thesis mod
+% this section is adapted from def of \@dottedtocline
+% change hangindent in next line to
+% leftskip 6-20-89 to work with later latex changes
+ {\leftskip 2em\relax \rightskip \@tocrmarg \parfillskip -\rightskip
+ \parindent 2em\relax\@afterindenttrue
+ \interlinepenalty\@M
+ \leavevmode
+ \@tempdima 4em\relax % width of box holding chapter number
+% change 6-20-89
+ \advance\leftskip \@tempdima \hbox{}\hskip -\leftskip
+% end 6-20-89
+ \uppercase{#1}\nobreak\leaders\hbox{$\m@th \mkern \@dotsep mu.\mkern
+ \@dotsep mu$}\hfill \nobreak \hbox to\@pnumwidth{\hfil\rm #2}\par}
+ \vskip 1.0em plus 1pt} % space below chapter line
+%
+% \begingroup
+% \parindent \z@ \rightskip \@pnumwidth
+% \parfillskip -\@pnumwidth
+% \bf % Boldface.
+% \leavevmode % TeX command to enter horizontal mode.
+% #1\hfil \hbox to\@pnumwidth{\hss #2}\par
+%
+%
+% \endgroup}
+\def\l@section{\@dottedtocline{1}{7em}{1.5em}}
+\def\l@subsection{\@dottedtocline{2}{9em}{1.5em}}
+\def\l@subsubsection{\@dottedtocline{3}{11em}{1.5em}}
+\def\l@paragraph{\@dottedtocline{4}{13em}{1.5em}}
+\def\l@subparagraph{\@dottedtocline{5}{14em}{1.5em}}
diff --git a/obsolete/macros/latex209/contrib/tamueethesis/append.tex b/obsolete/macros/latex209/contrib/tamueethesis/append.tex
new file mode 100644
index 0000000000..22969ea7e7
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/tamueethesis/append.tex
@@ -0,0 +1,6 @@
+\appendix{Supplemental Results}
+\begin{figure}
+\vspace{8.0in}
+\caption{Rothkopf/Oren's $\widehat {P_0}$ results for stationary M/M/1 queue.}
+\label{fig:p0joh}
+\end{figure}
diff --git a/obsolete/macros/latex209/contrib/tamueethesis/approve.tex b/obsolete/macros/latex209/contrib/tamueethesis/approve.tex
new file mode 100644
index 0000000000..5227203203
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/tamueethesis/approve.tex
@@ -0,0 +1,9 @@
+\approvalone
+{Transient queueing approximations for computer\\networks}
+{William A. Baker}
+{Pierce E. Cantrell}
+{Richard M. Feldman}
+{Jerry D. Gibson}
+{Karan Watson}
+{Jo W. Howze}
+{December 1986}
diff --git a/obsolete/macros/latex209/contrib/tamueethesis/bib.tex b/obsolete/macros/latex209/contrib/tamueethesis/bib.tex
new file mode 100644
index 0000000000..5c820ade85
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/tamueethesis/bib.tex
@@ -0,0 +1,17 @@
+\begin{thebibliography}{99}
+\bibitem{AR:1} Author(s) of Report, ``Title of Report,'' {Research
+Report, Department of Publication, Name of University, Date of Publication.
+
+\bibitem{AJ:1} Author(s) of Journal, ``Title of article,'' {\sl
+Title of Journal,} vol. Volume number, pp. Page numbers, Date of Publication.
+
+\bibitem{AB:1} Author(s) of Book, {\sl Title of Book.} City, State of
+Publication: Name of Publishing Company, Date of Publication.
+
+\bibitem{AA:1} Author(s) of Article, ``Title of Article,'' in {\sl Title
+of Book.} Editor of Book, ED. City, State of Publication: Name of
+Publishing Company, Date of Publication, chap. Chapters, pp. Page numbers.
+
+\bibitem{AA:2} Author(s) of Article, ``Title of Article,'' in {\sl Title of
+Proceedings Record,} Location of Symposium, Date.
+\end{thebibliography}
diff --git a/obsolete/macros/latex209/contrib/tamueethesis/bibdata.bib b/obsolete/macros/latex209/contrib/tamueethesis/bibdata.bib
new file mode 100644
index 0000000000..7d1bf6c7d0
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/tamueethesis/bibdata.bib
@@ -0,0 +1,113 @@
+@techreport{JA:1,
+ author="Joe Author",
+ title="Title of Report",
+ type="Research Report",
+ institution="Department of Publication, Name of University",
+ year=1999,
+ number=23,
+ address="City, State",
+ month="October"}
+
+@article{AAJA:1,
+ author="Arthur Author and Joe Author",
+ title="Title of Journal Article",
+ journal="Title of Journal",
+ volume=76,
+ pages="27--45",
+ month="July",
+ year=1776}
+
+@book{AB:1,
+ author="Author Book",
+ title="Title of Book",
+ address="City, State of Publication",
+ publisher="Name of Publishing Company",
+ volume=1,
+ edition="16th",
+ year=1988}
+
+@inbook{MWJCDL:1,
+ author="Matthew Wright and James Chodzko and Danny Luk",
+ title="Title of Book",
+ chapter="4--5",
+ pages="56--99",
+ address="College Station, Texas",
+ publisher="Name of Publisher",
+ year=1988}
+
+@booklet{HC:1,
+ author="Han Chen",
+ title="Title of Booklet",
+ howpublished="Texas A\&M University",
+ address="College Station, Texas",
+ month="July",
+ year=1989}
+
+@manual{ROPC:1,
+ author="Russell L. Oertel and Pierce Cantrell",
+ title="\LaTeX\ Example Manual",
+ organization="Department of Electrical Engineering, Texas A\&M
+ University",
+ address="College Station, Texas",
+ month="September",
+ year=1988}
+
+@incollection{JS:1,
+ author="Joseph W. Simpson",
+ title="Title of Article",
+ booktitle="Title of Book",
+ editor="of Book, Editor",
+ address="City, State of Publication",
+ publisher="Name of Publishing Company",
+ year=1983,
+ chapter="3",
+ pages="400--402"}
+
+@proceedings{PR:1,
+ title="Title of Conference Proceedings",
+ editor="Peter J. Rizzo",
+ organization="Sponsoring Organization",
+ address="Location of Symposium",
+ publisher="Name of publisher",
+ month="June",
+ year=1987}
+
+@inproceedings{AA:1,
+ author=" Arthur Article",
+ title="Title of Conference Article",
+ booktitle="Title of Conference Proceedings Record",
+ organization="Sponsoring Organization",
+ address="Location of Symposium",
+ publisher="Name of Publisher",
+ month="January",
+ year=1989}
+
+@unpublished{PKGT:1,
+ author="P. Kenneth and G. E. Taylor",
+ title="Solution of variational problems with bounded control variables
+ by means of the generalized {N}ewton-{Raphson} method",
+ note="presented at the Symp.\ on Recent Advances in Optimization
+ Techniques, Carnegie Inst.\ of Tech., Pittsburgh, Pa.",
+ month="April",
+ year=1965}
+
+@phdthesis{RL:1,
+ author="R. E. Larson",
+ title="Title of Dissertation",
+ school="Stanford University",
+ address="Stanford, California",
+ year=1964}
+
+@mastersthesis{EG:1,
+ author="Elaine G. Haschke",
+ title="Title of Thesis",
+ school="Drofnats University",
+ address="West Yellowstone, Montana",
+ month="May",
+ year="1993"}
+
+@misc{JS:2,
+ author="J. D. Simon",
+ month="November",
+ year=1963,
+ howpublished="private communications"}
diff --git a/obsolete/macros/latex209/contrib/tamueethesis/biblio.tex b/obsolete/macros/latex209/contrib/tamueethesis/biblio.tex
new file mode 100644
index 0000000000..aa3886bb59
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/tamueethesis/biblio.tex
@@ -0,0 +1,2 @@
+\bibliographystyle{unsrt}
+\bibliography{bibdata}
diff --git a/obsolete/macros/latex209/contrib/tamueethesis/ch1.tex b/obsolete/macros/latex209/contrib/tamueethesis/ch1.tex
new file mode 100644
index 0000000000..5306053e86
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/tamueethesis/ch1.tex
@@ -0,0 +1,117 @@
+\chapter {Introduction}
+\label{ch:int}
+\body
+The objective of this thesis is to evaluate the performance of several
+transient queueing approximations for a network of queues. These
+approximations will be tested and characterized for a single M/M/1
+and a tandem queue (2 node) network~\cite{JA:1}.
+
+The statistics of queueing systems, such as the mean number in each
+queue and the variance, are often computed using steady state assumptions.
+In many systems, however, the queue parameters change with time and
+steady state assumptions lead to erroneous mean and variance quantities.
+It is therefore desirable to solve the transient system. Unfortunately,
+solutions to transient queueing systems are difficult to obtain. Although
+an analytic solution exists for the single M/M/1 queue, a network of two
+such queues remains an open problem. The approximation methods are used reduce
+the computational complexity of existing transient solutions and to provide
+insight into the behavior of systems for which no analytic solution exists.
+It is hoped that this research will serve to improve present methods of
+modelling computer networks~\cite{AAJA:1}.
+
+\section{Queueing Theory Background}
+Central to interpreting results from any queueing model is the understanding
+of the underlying queueing process. If you now refer to Fig.~\ref{fig:pic},
+you will see an example of the \LaTeX\ picture environment.
+\begin{figure}
+\centering
+\setlength{\unitlength}{1mm}
+\begin{picture}(50,39)
+\put(0,7){\makebox(0,0)[bl]{cm}}
+\multiput(10,7)(10,0){5}{\makebox(0,0)[b]{\protect\addtocounter{cm}{1}
+ \arabic{cm}}}
+\put(15,20){\circle{6}}
+\put(30,20){\circle{6}}
+\put(15,20){\circle*{2}}
+\put(30,20){\circle*{2}}
+\put(10,24){\framebox(25,8){car}}
+\put(10,32){\vector(-2,1){10}}
+\multiput(1,0)(1,0){49}{\line(0,1){2.5}}
+\multiput(5,0)(10,0){5}{\line(0,1){3.5}}
+\thicklines
+\put(0,0){\line(1,0){50}}
+\multiput(0,0)(10,0){6}{\line(0,1){5}}
+\end{picture}
+\caption{A sample {\bf\tt picture} environment.}
+\label{fig:pic}
+\end{figure}
+Of particular importance are five basic
+characteristics~\cite{AB:1}: arrival pattern of customers, service pattern of
+servers, queue discipline, system capacity, and the number of service channels.
+
+\section{Network Applications}
+
+The study of a network of queues can be used to provide useful information
+for the design and maintenance of computer networks, where several computers
+are communicating with each other. On the design side, the modeling of a
+network can provide statistics such the average number of packets waiting
+to be transmitted at each computer~\cite{MWJCDL:1}.
+
+\section {Solution Methods}
+The most common numerical solution to the transient queueing model is found
+through the use of the Kolmogorov forward equations~\cite{HC:1}.
+This method can handle non-stationary arrival and service rates
+and, for reasonable error bounds, provides an exact solution. One equation is
+integrated to find the probability of being in a particular state.
+
+\section{Thesis Structure}
+Chapter II starts by reviewing some of the fundamentals in queueing theory
+upon which the approximations are based. The closure approximations
+are presented for the M/M/1 queue and compared to reveal differences
+in structure~\cite{ROPC:1}.
+
+In Chapter III the M/M/1 approximations are tested against exact methods for both
+stationary and nonstationary arrival patterns. The stationary cases are compared
+against exact results from Cantrell~\cite{JS:1,PR:1}, while the
+nonstationary cases will be compared to solutions from Kolmogorov forward
+equations. Each approximation will
+be characterized to show areas of weakness and strength.
+
+In Chapter IV the methods proving to be most
+accurate will be tested in a two node feed-forward network, otherwise known
+as the tandem queue.
+The results are compared against the Kolmogorov forward equation solutions and
+results from the previous chapter to see the effect of the first node on the
+accuracy of the second node results.
+
+In Chapter V final conclusions are drawn and suggestions for further research
+topics are suggested.
+An equation using the equation environment
+\begin{equation}
+\lim_{x\to0}{\sin x\over x}=1,
+\end{equation}
+and one using the displaymath environment
+\begin{displaymath}
+\sqrt{1+\sqrt{1+\sqrt{1+x}}}.
+\end{displaymath}
+are displayed here. Now refer to Fig.~\ref{fig:block} for another example
+of what you can do with the \LaTeX\ picture environment.
+\begin{figure}
+\begin{center}
+\setlength{\unitlength}{1in}
+\begin{picture}(5,6)
+\thicklines
+\put(2,4){\framebox(1,0.75){\LaTeX}}
+\put(0.5,4){\framebox(1,0.75){User Input}}
+\put(3.5,4){\framebox(1.25,0.75){Document Style}}
+\put(2,2.25){\framebox(1,0.75){\TeX}}
+\put(1.75,0.5){\framebox(1.5,0.75){Printed Document}}
+\put(1.5,4.375){\vector(1,0){0.5}}
+\put(3.5,4.375){\vector(-1,0){0.5}}
+\put(2.5,4){\vector(0,-1){1}}
+\put(2.5,2.25){\vector(0,-1){1}}
+\end{picture}
+\end{center}
+\caption{Overall Structure}
+\label{fig:block}
+\end{figure}
diff --git a/obsolete/macros/latex209/contrib/tamueethesis/ch2.tex b/obsolete/macros/latex209/contrib/tamueethesis/ch2.tex
new file mode 100644
index 0000000000..2c97fccc79
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/tamueethesis/ch2.tex
@@ -0,0 +1,309 @@
+\chapter{Closure Approximations in the Tandem Queue}
+\label{ch:clo}
+The purpose of this chapter is to extend the results from the M/M/1 queue to
+a two queue system consisting of a M/M/1 queue whose output is directed
+to a second Markovian queue. This small network is known as a tandem queue
+and is depicted in Fig.~\ref{fig:tan}.
+\begin{figure}
+\centering
+\begin{picture}(360,180)
+\multiput(72,45)(0,18){4}{\framebox(18,18){0}}
+\multiput(90,45)(0,18){4}{\framebox(18,18){0}}
+\multiput(108,45)(0,18){3}{\framebox(18,18){1}}
+\multiput(126,45)(0,18){4}{\framebox(18,18){1}}
+\put(108,99){\framebox(18,18){0}}
+\multiput(234,45)(18,0){4}{\framebox(18,18){0}}
+\multiput(234,63)(18,0){4}{\framebox(18,18){0}}
+\multiput(234,81)(18,0){2}{\framebox(18,18){0}}
+\multiput(270,81)(18,0){2}{\framebox(18,18){1}}
+\multiput(234,99)(18,0){3}{\framebox(18,18){0}}
+\put(288,99){\framebox(18,18){1}}
+\put(126,72){\oval(32,15)[t]}
+\put(126,54){\oval(32,15)[b]}
+\multiput(110,54)(32,0){2}{\line(0,1){18}}
+\multiput(126,90)(162,0){2}{\oval(32,15)}
+\multiput(135,99)(162,0){2}{\oval(15,32)}
+\multiput(55,49)(162,0){2}{10}
+\multiput(55,67)(162,0){2}{11}
+\multiput(55,85)(162,0){2}{01}
+\multiput(55,103)(162,0){2}{00}
+\multiput(75,124)(162,0){2}{00}
+\multiput(93,124)(162,0){2}{01}
+\multiput(111,124)(162,0){2}{11}
+\multiput(129,124)(162,0){2}{10}
+\multiput(72,117)(162,0){2}{\thicklines \line(-1,1){28}}
+\multiput(54,137)(162,0){2}{CD}
+\multiput(35,125)(162,0){2}{AB}
+\end{picture}
+\caption{The two node tandem queue.}
+\label{fig:tan}
+\end{figure}
+The size of this network makes possible a solution by near-exact methods so
+that the closure methods can be evaluated for the dependencies of the mean and
+variance of the second queue on the state of the first queue. Since the first
+queue of the tandem is simply M/M/1, this chapter will concentrate on the
+results from the second queue. The two most accurate closure assumptions, Clark
+and Chang/Wang, will be compared against the Kolmogorov solution~\cite{AA:1}.
+
+\section{The Kolmogorov Solution}
+The state space for the tandem queue is a two-dimensional lattice
+of states indexed by the number in each queue. For example, $P_{1,2}(t)$ is
+the probability that there is one in the first queue and two in the second.
+The size of the state space depends on the maximum number in each queue. If
+each queue can hold 49 items, including server, than the number of possible
+states is $50^2$ or 2500~\cite{PKGT:1}.
+
+The Kolmogorov solution for the tandem queue was obtained using a stochastic
+balance between various states of the birth-death process. Fig.\ \ref{fig:sto}
+shows the stochastic balance used to obtain (\ref{eq:kolt4}).
+\begin{figure}
+\centering
+\begin{picture}(224,180)
+\put(36,50){\thicklines \framebox(60,80)[t]{\&}}
+\put(14,70){\line(1,0){22}}
+\put(0,110){\line(1,0){36}}
+\put(0,115){$x$}
+\put(14,70){\line(0,-1){40}}
+\put(14,30){\line(1,0){30}}
+\put(49,26){$c$}
+\put(96,90){\line(1,0){38}}
+\put(134,40){\thicklines \framebox(60,100){ }}
+\put(139,85){D}
+\put(194,110){\line(1,0){18}}
+\put(194,70){\line(1,0){18}}
+\put(204,75){$\overline{Q}$}
+\put(204,115){$Q$}
+\put(24,10){\thicklines \dashbox(200,150){ }}
+\end{picture}
+\caption{Stochastic balance for tandem queue without feedback.}
+\label{fig:sto}
+\end{figure}
+The Kolmogorov equation set for the tandem queue was found to be
+\begin{eqnarray}
+\frac{dP_{0,0}}{dt} & = & -\left( \gamma _1 + \gamma _2\right) P_{0,0} +
+\mu _2 P_{0,1} \label{eq:kolt1}\\
+\frac{dP_{0,i}}{dt} & = & -\left( \gamma _1 + \gamma _2+ \mu_2\right) P_{0,i} +
+\mu _2 P_{0,i+1} \nonumber \\
+& & \mbox{}+\qquad\gamma _2P_{0,i-1}+\mu _1 P_{1,i-1}
+\hspace{.993in}\qquad i=1,2,3... \label {eq:kolt2}\\
+\frac{dP_{j,0}}{dt} & = & -\left( \gamma _1 + \gamma _2+ \mu _1\right) P_{j,0}
++ \gamma _1P_{j-1,0} + \mu _2P_{j,1} \qquad j=1,2,3... \label{eq:kolt3} \\
+\frac{dP_{j,i}}{dt} & = & -\left( \gamma _1 + \gamma _2+ \mu _1
++\mu _2\right) P_{j,i} +\gamma _1P_{j-1,i}+
+\mu _2 P_{j,i+1} \nonumber \\
+& & \mbox{}+\qquad\gamma_2P_{j,i-1}+\mu _1 P_{j+1,i-1} \qquad \hspace{0.77in}
+j,i=1,2,3... \label{eq:kolt4}
+\end{eqnarray}
+
+The mean and variance statistics for the second queue are obtained by the
+following equations:
+\[ M_2 = \sum_{i=1}^{\infty}i\cdot\sum_{j=0}^{\infty}P_{j,i} \]
+\noindent { and}
+\[ V_2 = \sum_{i=1}^{\infty}i^2\cdot\sum_{j=0}^{\infty}P_{j,i} - M_2^2.\]
+Calculation of the mean and variance requires the truncation of the M/M/1$/\infty$
+to some maximum number of states. Stated differently, the M/M/1/$\infty$ queue
+model is approximated by an M/M/1/k queue. While it is impossible to
+evaluate the error in this approximation, an indication
+of the truncation error can be obtained by summing all the probability states
+up to state $k$ and subtracting this total from one. This yields the probability
+of being in a state greater than $k$. If this value is very small then
+its product with $i$ and $i^2$ will also be small.
+
+It is easy to see how large and complicated the Kolmogorov equation set can become
+for just a small network, and the usefulness of an accurate, state-reducing
+approximation~\cite{RL:1}.
+\section{Approximations for the Tandem Queue}
+\subsection{Independent Queue Assumption}
+Jackson \cite{EG:1} showed that a network of queues can be analyzed as
+a group of independent M/M/1 queues when the network is operating
+under steady-state conditions. One method to approximate the tandem queue
+state space is to assume that the independence holds under transient conditions
+as well. By assuming the two queues are independent, the joint probability
+$P_{j,i}$ simply becomes the product of the marginal probabilities, $P_j$ and
+$P_i$. Thus, the number of states needed to model the tandem M/M/1/50 queue by
+the Kolmogorov equations decreases from 2500 to 100.
+
+Since the primary motivation behind the approximation methods is to
+obtain accurate mean and variance statistics for the queues, it is
+of interest to investigate errors induced by assuming the queues
+to be independent. The mean and variance statistics for the first
+and second queues are defined as
+
+\begin{eqnarray}
+ M_1&=&\sum_{j=1}^{\infty}j\cdot P_j\nonumber\\
+ V_1&=&\sum_{j=1}^{\infty}j^2\cdot P_j - M_{1}^2,\nonumber
+\end{eqnarray}
+\noindent{and}
+\begin{eqnarray}
+ M_2&=&\sum_{i=1}^{\infty}i\cdot P_i\label{eq:m2}\\
+ V_2&=&\sum_{i=1}^{\infty}i^2\cdot P_i - M_{2}^2\label{eq:v2}.
+\end{eqnarray}
+
+The accuracy of $P_j$ for $j>0$ will determine the effectiveness of the
+independence assumption. By definition, $P_j=\sum_{i=0}^{\infty}P_{j,i}$.
+By summing (\ref{eq:kolt3}) and (\ref{eq:kolt4}), we obtain
+\begin{eqnarray*}
+\frac{dP_j}{dt} & = & -\left(\gamma_1 +\gamma_2 +\mu_1\right)\sum_{i=0}^{\infty}P_{j,i}
+-\mu_2\sum_{i=1}^{\infty}P_{j,i}+\gamma_1\sum_{i=0}^{\infty}P_{j-1,i} \\
+& & \mbox{}+\mu_1\sum_{i=1}^{\infty}P_{j+1,i-1}+\mu_2\sum_{i=0}^{\infty}
+P_{j,i+1}.
+\end{eqnarray*}
+By gathering similar terms and summing, the above equation simplifies to
+\begin{eqnarray*}
+\frac{dP_j}{dt} & = & -\left(\gamma_1 +\mu_1\right)P_j
++\gamma_1P_{j-1}+\mu_1P_{j+1},\hspace{1.25in}j=1,2,3...
+\end{eqnarray*}
+which is identical to (\ref{eq:kolt4}) developed for the single M/M/1 queue.
+This is true because the addition of
+the second queue does not effect the first in any manner. If, however,
+there was feedback from the second queue to the first then this result
+would no longer hold.
+
+The equation for $dP_i/dt$ for the second queue will now be derived
+to show how the joint probability state must be decoupled to
+obtain the independent queue probability equations.
+
+\subsection{Closure Approximations for the Tandem Queue}
+The approximations by Clark and Chang/Wang were shown in the previous
+chapter to be most accurate for the M/M/1 queue. In this section, we will
+investigate the extension of these approximations for the tandem queue.
+The resulting equation for $dM_2/dt$ is
+\begin{equation}
+\frac{dM_2}{dt}=\gamma_2+\mu_1\left(1-P0_1\right) - \mu_2\left(1-P0_2\right).
+\label{eq:dm2}
+\end{equation}
+
+To derive $dV_2/dt$, we differentiate (\ref{eq:v2}) to obtain
+\begin{equation}
+\frac{dV_2}{dt}=\sum_{i=1}^{\infty}i^2\cdot \frac{dP_i}{dt} -
+2M_2\cdot \frac{dM_2}{dt}.
+\label{eq:dv2a}
+\end{equation}
+
+\section{Implementation and Results}
+Clearly, there are two issues concerning the accuracy of the closure
+approximations in a tandem queue. The first is the accuracy of the assumption
+of independent queues. When is the assumption that $P0_2$ is independent on the
+state of the first queue a good one? Also, what error results from the
+approximation for $V_2(t)$ via (\ref{eq:dv2a})? The second concern is how well
+the closure approximations model the independent tandem queue. Since the
+independence assumption makes the tandem queue a network of two M/M/1 queues,
+the second issue was largely answered in the previous chapter. Therefore this
+chapter will be dedicated to investigating the performance of
+the independent queue assumption~\cite{JS:2}.
+
+\subsection{Test Conditions}
+Three approximations were compared against the truncated Kolmogorov solution
+for the tandem queue: the independent Kolmogorov solution, Chang/Wang's
+approximation, and Clark's approximation. The test cases were the same as
+those discussed in Chapter~\ref{ch:int}, except that cases with $\rho$ close to
+or greater than one could not be included. This is because the truncated
+Kolmogorov equation set models the tandem queue as two dependent M/M/1/k
+queues, requiring the integration of $k^2$ equations. If $\rho$ becomes too
+large then the probability of being in a state
+with greater than $k$ in a queue can no longer be neglected, resulting in
+mean and variance inaccuracies. We used $ k= 50 $ which limited $\rho \le 0.8$.
+
+\subsection{Results}
+The approximations all performed well for most of the conditions presented.
+The most accurate of the three was the Kolmogorov independent solution by
+a very small margin over Clark. Chang/Wang's method also was accurate, but
+it encountered difficulty with the high $M_0$, low utilization cases. See
+Table~\ref{tab:nsta} for the full comparison.
+\begin{table}[p]
+\caption{Results for Nonstationary M/M/1 Queue}
+\label{tab:nsta}
+\vspace{0.125in}
+\begin{center}
+\begin{tabular}[b]{|r|r|r|r|r|r|r|r|r|r|r|}
+\hline
+\multicolumn{3}{|l|}{Test case }&\multicolumn{8}{c|}{Average Percent Error,
+$e_{ave}$, in \%}\\ \cline{4-11}
+\multicolumn{3}{|l|}{parameters} &
+\multicolumn{1}{c|}{John.} &
+\multicolumn{1}{c|}{Rider} &
+\multicolumn{2}{c|}{Rothkopf} &
+\multicolumn{2}{c|}{Chang} &
+\multicolumn{2}{c|}{Clark} \\ \hline
+\multicolumn{1}{|c|}{$\frac{\lambda}{\mu}$} &
+\multicolumn{1}{c|}{$a$} &
+\multicolumn{1}{c|}{$T$} &
+\multicolumn{1}{c|}{$M(t)$} &
+\multicolumn{1}{c|}{$M(t)$} &
+\multicolumn{1}{c|}{$M(t)$} &
+\multicolumn{1}{c|}{$V(t)$} &
+\multicolumn{1}{c|}{$M(t)$} &
+\multicolumn{1}{c|}{$V(t)$} &
+\multicolumn{1}{c|}{$M(t)$} &
+\multicolumn{1}{c|}{$V(t)$} \\ \hline \hline
+0.5&1.0&10 &28.96 &9.77 &1.98 &11.27 &3.39 &5.00 &0.05 &0.47 \\
+0.5&1.0&20 &28.35 &11.75 &4.28 &21.06 &6.21 &9.37 &0.17 &0.65 \\
+0.5&1.0&40 &25.76 &14.24 &7.32 &32.02 &10.60 &16.07 &0.64 &1.96 \\
+0.5&1.0&60 &24.25 &16.48 &8.65 &33.88 &9.97 &19.25 &1.03 &2.47 \\
+0.5&1.0&80 &22.17 &17.04 &8.99 &32.19 &15.68 &17.41 &1.24 &2.70 \\
+0.5&1.0&100 &19.60 &14.92 &8.18 &20.33 &14.77 &18.63 &1.17 &2.75 \\
+0.5&1.0&120 &17.45 &13.03 &4.51 &11.37 &6.60 &21.80 &0.86 &2.19 \\
+\hline \hline
+0.9&0.25&10 &12.26 &4.82 &2.52 &9.26 &1.27 &4.50 &0.19 &0.67 \\
+0.9&0.25&20 &7.59 &3.71 &2.37 &11.26 &1.08 &4.39 &0.17 &0.76 \\
+0.9&0.25&40 &6.44 &3.81 &1.72 &13.10 &1.50 &5.65 &0.47 &1.20 \\
+0.9&0.25&60 &7.08 &4.13 &2.12 &14.26 &2.05 &7.72 &0.85 &1.71 \\
+0.9&0.25&80 &7.88 &4.37 &2.74 &15.13 &2.64 &10.26 &1.23 &2.20 \\
+0.9&0.25&100 &8.47 &4.65 &3.41 &15.79 &3.22 &13.22 &1.58 &2.73 \\
+0.9&0.25&120 &8.89 &5.09 &3.96 &16.25 &3.89 &16.52 &1.88 &3.27 \\
+\hline
+\end{tabular}
+\end{center}
+\end{table}
+The comparable performance of the approximations is shown in
+Fig.~\ref{fig:avet1}.
+\begin{figure}
+\vspace{8.0in}
+\caption{$e_{ave}$ for stationary tandem queue, $M_0=0$.}
+\label{fig:avet1}
+\end{figure}
+The Appendix also contains plots
+for the worst case percent error and the mean-square error.
+
+As can be seen from Table~\ref{tab:cpu}, Chang's method is much faster than the
+rest of the approximations.
+\begin{table}
+\begin{center}
+\caption{CPU Times for Stationary Tandem Queue}
+\label{tab:cpu}
+\vspace{0.125in}
+\begin{tabular}[b]{|r|r|r|r|r|r|}
+\hline
+\multicolumn{2}{|l|}{Test case }&\multicolumn{4}{c|}{CPU time for VAX 8650
+, in secs.}\\ \cline{3-6}
+\multicolumn{2}{|l|}{parameters} &
+\multicolumn{1}{c|}{Exact} &
+\multicolumn{1}{c|}{Independent} &
+\multicolumn{1}{c|}{ } &
+\multicolumn{1}{c|}{ } \\ \cline{1-2}
+\multicolumn{1}{|c|}{$\frac{\lambda}{\mu}$} &
+\multicolumn{1}{c|}{$T_{final}$} &
+\multicolumn{1}{c|}{Kolmogorov} &
+\multicolumn{1}{c|}{Kolmogorov} &
+\multicolumn{1}{c|}{Chang} &
+\multicolumn{1}{c|}{Clark} \\ \hline \hline
+0.1 &39 &20.76 &0.51 &0.08 &0.16 \\
+0.3 &56 &24.21 &0.48 &0.07 &0.27 \\
+0.6 &120 &44.96 &0.84 &0.04 &0.43 \\
+0.8 &300 &119.89 &2.27 &0.05 &1.44 \\
+\hline
+\end{tabular}
+\end{center}
+\end{table}
+Clark's method also provides significant
+computational savings over both the dependent and the independent
+Kolmogorov methods. As is usually the case, increased accuracy and information
+accompanies increased computation.
+
+This concludes the study of the tandem queue. To summarize, both Clark's and
+Chang/Wang's performed strongly for all tests when $\rho > 0.3$. For low utilization
+cases, the approximations incurred larger errors with respect to $e_{ave}$
+and $e_{wor}$. This however was due to numerical accuracy problems
+for small values of the mean coupled with large values (close to one) of $P0$
+in both queues. The $e_{wor}$ criterion in the Appendix did not show any model
+weakness for the low utilization cases.
diff --git a/obsolete/macros/latex209/contrib/tamueethesis/ded.tex b/obsolete/macros/latex209/contrib/tamueethesis/ded.tex
new file mode 100644
index 0000000000..01c0b67b34
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/tamueethesis/ded.tex
@@ -0,0 +1 @@
+\dedicate{my mother, Rose}
diff --git a/obsolete/macros/latex209/contrib/tamueethesis/eethe12.sty b/obsolete/macros/latex209/contrib/tamueethesis/eethe12.sty
new file mode 100644
index 0000000000..60b8b407bf
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/tamueethesis/eethe12.sty
@@ -0,0 +1,555 @@
+% EETHE12 DOCUMENT STYLE -- Ver. 2.21 released 5 July 1991
+% EETHE12 DOCUMENT STYLE -- Ver. 2.2 released 20 November 1990
+% EETHE12 DOCUMENT STYLE -- Ver. 2.1 released 20 June 1989
+% file EETHE12.DOC
+% Adapted from report.sty for LaTeX version 2.09
+% Copyright (C) 1985 by Leslie Lamport
+% fixed problems with \part command 5-3-89 --- RLO
+% fixed problemw with \part command 4-17-91 --- Ken
+% fixed problemw with \appendix that does not reset the equation number
+% that every time when \appendix start.
+%
+% ****************************************
+% * FONTS *
+% ****************************************
+%
+% thesis mod
+\def\tocspace{\baselineskip=16pt}
+\def\singlespace{\baselineskip=12pt}
+\def\refspace{\baselineskip=15pt}
+\def\doublespace{\baselineskip=24pt}
+\def\body{
+ \pagenumbering{arabic}\setcounter{page}{1}
+ \doublespace
+ \setlength{\headheight}{12pt}
+ \pagestyle{myheadings}
+ \def\@thefnmark{\char32}
+ \@footnotetext{\normalsize Journal model is {\sl IEEE}
+ {\sl Transactions on Automatic Control.}}\setcounter{footnote}{0}}
+%
+\lineskip 1pt % \lineskip is 1pt for all font sizes.
+\normallineskip 1pt
+\def\baselinestretch{1}
+
+% Each size-changing command \SIZE executes the command
+% \@setsize\SIZE{BASELINESKIP}\FONTSIZE\@FONTSIZE
+% where:
+% BASELINESKIP = Normal value of \baselineskip for that size. (Actual
+% value will be \baselinestretch * BASELINESKIP.)
+%
+% \FONTSIZE = Name of font-size command. The currently available
+% (preloaded) font sizes are: \vpt (5pt), \vipt (6pt),
+% \viipt (etc.), \viiipt, \ixpt, \xpt, \xipt, \xiipt,
+% \xivpt, \xviipt, \xxpt, \xxvpt.
+% \@FONTSIZE = The same as the font-size command except with an
+% '@' in front---e.g., if \FONTSIZE = \xivpt then
+% \@FONTSIZE = \@xivpt.
+%
+% For reasons of efficiency that needn't concern the designer,
+% the document style defines \@normalsize instead of \normalsize . This is
+% done only for \normalsize, not for any other size-changing commands.
+
+\def\@normalsize{\@setsize\normalsize{24pt}\xiipt\@xiipt
+\abovedisplayskip 12pt plus3pt minus7pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6.5pt plus3.5pt minus3pt}
+
+\def\small{\@setsize\small{13.6pt}\xipt\@xipt
+\abovedisplayskip 11pt plus3pt minus6pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6.5pt plus3.5pt minus3pt
+\def\@listi{\parsep 4.5pt plus 2pt minus 1pt
+ \itemsep \parsep
+ \topsep 9pt plus 3pt minus 5pt}}
+
+\def\footnotesize{\@setsize\footnotesize{12pt}\xiipt\@xiipt
+\abovedisplayskip 10pt plus2pt minus5pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6pt plus3pt minus3pt
+\def\@listi{\topsep 6pt plus 2pt minus 2pt\parsep 3pt plus 2pt minus 1pt
+\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{18pt}\xivpt\@xivpt}
+\def\Large{\@setsize\Large{22pt}\xviipt\@xviipt}
+\def\LARGE{\@setsize\LARGE{25pt}\xxpt\@xxpt}
+\def\huge{\@setsize\huge{30pt}\xxvpt\@xxvpt}
+\let\Huge=\huge
+
+\normalsize % Choose the normalsize font.
+
+
+% ****************************************
+% * PAGE LAYOUT *
+% ****************************************
+%
+% All margin dimensions measured from a point one inch from top and side
+% of page.
+
+% SIDE MARGINS:
+%\if@twoside % Values for two-sided printing:
+% \oddsidemargin 21pt % Left margin on odd-numbered pages.
+% \evensidemargin 59pt % Left margin on even-numbered pages.
+% \marginparwidth 85pt % Width of marginal notes.
+%\else % Values for one-sided printing:
+% \oddsidemargin 39.5pt % Note that \oddsidemargin = \evensidemargin
+% \evensidemargin 39.5pt
+% \marginparwidth 68pt
+%\fi
+%
+% thesis mod
+ \oddsidemargin .375in
+ \evensidemargin .375in
+ \marginparwidth 68pt
+%
+\marginparsep 10pt % Horizontal space between outer margin and
+ % marginal note
+
+
+% VERTICAL SPACING:
+ % Top of page:
+%\topmargin 27pt % Nominal distance from top of page to top of
+%
+% thesis mod
+\topmargin -.5in % *** move the page number to the center between top
+\headsep 42pt % *** edge and blue line. ******** K. C. 12-4-89
+%\topmargin -.15in % Nominal distance from top of page to top of
+ % box containing running head.
+\headheight 12pt % Height of box containing running head.
+%\headsep 15pt % Space between running head and text.
+% \topskip = 10pt % '\baselineskip' for first line of page.
+ % Bottom of page:
+\footheight 12pt % Height of box containing running foot.
+\footskip 30pt % Distance from baseline of box containing foot
+ % to baseline of last line of text.
+
+
+% DIMENSION OF TEXT:
+
+%\textheight 536.5pt % Height of text (including footnotes and figures,
+% % excluding running head and foot).
+%\textwidth 390pt % Width of text line.
+%
+% thesis mod
+\textheight 8.5in % Height of text (including footnotes and figures,
+ % excluding running head and foot).
+\textwidth 6in % Width of text line.
+%
+ % For two-column mode:
+\columnsep 10pt % Space between columns
+\columnseprule 0pt % Width of rule between columns.
+
+% A \raggedbottom command causes 'ragged bottom' pages: pages set to
+% natural height instead of being stretched to exactly \textheight.
+
+% FOOTNOTES:
+
+\footnotesep 14pt % Height of strut placed at the beginning of every
+ % footnote
+
+\skip\footins 8pt plus 2pt minus 4pt % Space between last line of text and
+ % top of first footnote.
+
+% FLOATS: (a float is something like a figure or table)
+%
+% FOR FLOATS ON A TEXT PAGE:
+%
+% ONE-COLUMN MODE OR SINGLE-COLUMN FLOATS IN TWO-COLUMN MODE:
+\floatsep 14pt plus 2pt minus 4pt % Space between adjacent floats moved
+ % to top or bottom of text page.
+\textfloatsep 20pt plus 2pt minus 4pt % Space between main text and floats
+ % at top or bottom of page.
+\intextsep 14pt plus 4pt minus 4pt % Space between in-text figures and
+ % text.
+\@maxsep 20pt % The maximum of \floatsep,
+ % \textfloatsep and \intextsep (minus
+ % the stretch and shrink).
+% TWO-COLUMN FLOATS IN TWO-COLUMN MODE:
+% thesis mod does not handle two-column mode
+%\dblfloatsep 14pt plus 2pt minus 4pt % Same as \floatsep for double-column
+% % figures in two-column mode.
+%\dbltextfloatsep 20pt plus 2pt minus 4pt % \textfloatsep for double-column
+% % floats.
+%\@dblmaxsep 20pt % The maximum of \dblfloatsep and
+% % \dbltexfloatsep.
+
+% FOR FLOATS ON A SEPARATE FLOAT PAGE OR COLUMN:
+% ONE-COLUMN MODE OR SINGLE-COLUMN FLOATS IN TWO-COLUMN MODE:
+\@fptop 0pt plus 1fil % Stretch at top of float page/column. (Must be
+ % 0pt plus ...)
+\@fpsep 10pt plus 2fil % Space between floats on float page/column.
+\@fpbot 0pt plus 1fil % Stretch at bottom of float page/column. (Must be
+ % 0pt plus ... )
+
+% DOUBLE-COLUMN FLOATS IN TWO-COLUMN MODE.
+% thesis mod does not handle two-column mode
+%\@dblfptop 0pt plus 1fil % Stretch at top of float page. (Must be 0pt plus ...)
+%\@dblfpsep 10pt plus 2fil % Space between floats on float page.
+%\@dblfpbot 0pt plus 1fil % Stretch at bottom of float page. (Must be
+% % 0pt plus ... )
+% MARGINAL NOTES:
+%
+\marginparpush 7pt % Minimum vertical separation between two marginal
+ % notes.
+
+
+% ****************************************
+% * PARAGRAPHING *
+% ****************************************
+%
+%\parskip 0pt plus 1pt % Extra vertical space between paragraphs.
+%\parindent 1.5em % Width of paragraph indentation.
+%
+% thesis mod
+\parskip 0pt % No extra vertical space between paragraphs.
+\parindent 2em % Width of paragraph indentation.
+%
+\topsep 10pt plus 4pt minus 6pt % Extra vertical space, in addition to
+ % \parskip, added above and below list and
+ % paragraphing environments.
+\partopsep 3pt plus 2pt minus 2pt % Extra vertical space, in addition to
+ % \parskip and \topsep, added when user
+ % leaves blank line before environment.
+\itemsep 5pt plus 2.5pt minus 1pt % Extra vertical space, in addition to
+ % \parskip, added between list items.
+
+% The following page-breaking penalties are defined
+
+\@lowpenalty 51 % Produced by \nopagebreak[1] or \nolinebreak[1]
+\@medpenalty 151 % Produced by \nopagebreak[2] or \nolinebreak[2]
+\@highpenalty 301 % Produced by \nopagebreak[3] or \nolinebreak[3]
+
+\@beginparpenalty -\@lowpenalty % Before a list or paragraph environment.
+\@endparpenalty -\@lowpenalty % After a list or paragraph environment.
+\@itempenalty -\@lowpenalty % Between list items.
+
+% \clubpenalty % 'Club line' at bottom of page.
+% \widowpenalty % 'Widow line' at top of page.
+% \displaywidowpenalty % Math display widow line.
+% \predisplaypenalty % Breaking before a math display.
+% \postdisplaypenalty % Breaking after a math display.
+% \interlinepenalty % Breaking at a line within a paragraph.
+% \brokenpenalty % Breaking after a hyphenated line.
+
+
+% ****************************************
+% * CHAPTERS AND SECTIONS *
+% ****************************************
+%
+
+\def\part{\par % \par is added by Ken 4-17-91
+% thesis mod
+% \cleardoublepage % Starts new page.
+% \thispagestyle{plain} % Page style of part page is 'plain'
+\stepcounter{section}
+\setcounter{section}{0}
+ \@afterindentfalse
+%
+ \if@twocolumn % IF two-column style
+ \onecolumn % THEN \onecolumn
+ \@tempswatrue % @tempswa := true
+ \else \@tempswafalse % ELSE @tempswa := false
+ \fi % FI
+ \hbox{}%\vfil % Add fil glue to center title
+ \bgroup \centering % BEGIN centering
+ \secdef\@part\@spart}
+
+\def\@part[#1]#2{\ifnum \c@secnumdepth >-2\relax % IF secnumdepth > -2
+ \refstepcounter{part} % THEN step part counter
+ \addcontentsline{toc}{part}{\thepart % add toc line
+ \hspace{1em}#1}\else % ELSE add unnumbered line
+ \addcontentsline{toc}{part}{#1}\fi % FI
+ \markboth{}{}
+ \ifnum \c@secnumdepth >-2\relax % IF secnumdepth > -2
+%
+% thesis mod
+% \huge\bf Part \thepart % THEN Print 'Part' and number
+% \par % in \huge bold.
+% \vskip 20pt \fi % Add space before title.
+% \Huge \bf % FI
+% #1\@endpart} % Print Title in \Huge bold.
+ \thepart\hspace{.6em} #1\@endpart\fi\par} % Print Title of Part
+ % \par is added by Ken 4-17-91
+
+% \@endpart finishes the part page
+%
+\def\@endpart{\par\egroup % END centering
+% \vfil\newpage % End page with 1fil glue.
+ \if@twoside % IF twoside printing
+ \hbox{} % THEN Produce totally blank page
+ \thispagestyle{empty}
+ \newpage
+ \fi % FI
+ \if@tempswa % IF @tempswa = true
+ \twocolumn % THEN \twocolumn
+ \fi} % FI
+
+\def\@spart#1{\Huge \bf % Print title in \huge boldface
+ #1\@endpart}
+
+% \@makechapterhead {TEXT} : Makes the heading for the \chapter command.
+%
+
+\def\@makechapterhead#1{ % Heading for \chapter command
+% \vspace*{50pt} % Space at top of text page.
+ { \parindent 0pt \raggedright
+ \ifnum \c@secnumdepth >\m@ne % IF secnumdepth > -1 THEN
+% \huge\bf \@chapapp{} \thechapter % Print 'Chapter' and number.
+%
+% thesis mod
+ \centering \@chapapp{} \thechapter % Print 'Chapter' and number.
+%
+ \par
+ \vskip 20pt \fi % Space between number and title.
+% \Huge \bf % Title.
+% #1\par
+% Thesis mod
+ \uppercase{#1}\par
+ \nobreak % TeX penalty to prevent page break.
+% \vskip 40pt % Space between title and text.
+ } }
+
+% \@makeschapterhead {TEXT} : Makes the heading for the \chapter* command.
+%
+
+\def\@makeschapterhead#1{ % Heading for \chapter* command
+% \vspace*{50pt} % Space at top of page.
+ { \parindent 0pt \raggedright
+% \Huge \bf % Title.
+% thesis mod
+ \centering
+%
+% #1\par
+% Thesis mod
+ \uppercase{#1}\par
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 40pt % Space between title and text.
+ } }
+
+% \secdef{UNSTARCMDS}{STARCMDS} :
+% When defining a \chapter or \section command without using
+% \@startsection, you can use \secdef as follows:
+% \def\chapter { ... \secdef \CMDA \CMDB }
+% \def\CMDA [#1]#2{ ... % Command to define \chapter[...]{...}
+% \def\CMDB #1{ ... % Command to define \chapter*{...}
+
+\def\chapter{\clearpage % Starts new page.
+% \thispagestyle{plain} % Page style of chapter page is 'plain'
+ \global\@topnum\z@ % Prevents figures from going at top of page.
+ \@afterindentfalse % Suppresses indent in first paragraph. Change
+ \secdef\@chapter\@schapter} % to \@afterindenttrue to have indent.
+
+\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne
+ \refstepcounter{chapter}
+ \typeout{\@chapapp\space\thechapter.}
+ \addcontentsline{toc}{chapter}{\protect
+ \numberline{\thechapter}\uppercase{#1}}
+ \else\addcontentsline{toc}{chapter}{#1}\fi
+ \chaptermark{#1}
+% \addtocontents{lof}{\protect\addvspace{10pt}} % Adds between-chapter space
+% \addtocontents{lot}{\protect\addvspace{10pt}} % to lists of figs & tables.
+ \if@twocolumn % Tests for two-column mode.
+ \@topnewpage[\@makechapterhead{#2}]
+ \else \@makechapterhead{\uppercase{#2}}
+ \@afterheading % Routine called after chapter and
+ \fi} % section heading.
+
+\def\@schapter#1{
+% thesis mod
+ \if@twocolumn \@topnewpage[\@makeschapterhead{#1}]
+ \else \@makeschapterhead{#1}
+ \@afterheading\fi}
+
+% \@startsection {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}
+% optional * [ALTHEADING]{HEADING}
+% Generic command to start a section.
+% NAME : e.g., 'subsection'
+% LEVEL : a number, denoting depth of section -- e.g., chapter=1,
+% section = 2, etc. A section number will be printed if
+% and only if LEVEL < or = the value of the secnumdepth
+% counter.
+% INDENT : Indentation of heading from left margin
+% BEFORESKIP : Absolute value = skip to leave above the heading.
+% If negative, then paragraph indent of text following
+% heading is suppressed.
+% AFTERSKIP : if positive, then skip to leave below heading,
+% else - skip to leave to right of run-in heading.
+% STYLE : commands to set style
+% If '*' missing, then increments the counter. If it is present, then
+% there should be no [ALTHEADING] argument. A sectioning command
+% is normally defined to \@startsection + its first six arguments.
+
+\def\section{\@startsection {section}{1}{\z@}{-3.5ex plus -1ex minus
+% -.2ex}{2.3ex plus .2ex}{\Large\bf}}
+ -.2ex}{2.3ex plus .2ex}{\normalsize}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-3.25ex plus -1ex minus
+% -.2ex}{1.5ex plus .2ex}{\large\bf}}
+ -.2ex}{1.5ex plus .2ex}{\normalsize\centering}}
+\def\subsubsection{\@startsection{subsubsection}{2}{\z@}{-3.25ex plus
+% -1ex minus -.2ex}{1.5ex plus .2ex}{\normalsize\bf}}
+ -1ex minus -.2ex}{1.5ex plus .2ex}{\normalsize}}
+\def\paragraph{\@startsection
+% {paragraph}{4}{\z@}{3.25ex plus 1ex minus .2ex}{-1em}{\normalsize\bf}}
+ {paragraph}{4}{\z@}{3.25ex plus 1ex minus .2ex}{-1em}{\normalsize}}
+\def\subparagraph{\@startsection
+ {subparagraph}{4}{\parindent}{3.25ex plus 1ex minus
+% .2ex}{-1em}{\normalsize\bf}}
+ .2ex}{-1em}{\normalsize}}
+
+
+\def\vita{
+ \newpage
+ \vskip .2truein
+ \centerline {VITA}
+ \addcontentsline{toc}{chapter}{\null \hspace{4.0em}VITA}
+ \bigskip}
+
+\def\typist#1{\vfill\noindent The typist for this thesis was #1.}
+\def\typeset#1{\vfill\noindent This document was typeset in \LaTeX\ by #1.}
+
+%
+%\def\appendix#1#2#3{
+\def\appendix#1{
+ \refstepcounter{appendix}
+ \newpage
+% thesis mod
+\@addtoreset{equation}{appendix} % Makes \appendix reset 'equation' counter.
+ % added by Ken 10-8-91
+\def\theequation{\Alph{appendix}.\arabic{equation}}
+ \vskip .2truein
+% \addcontentsline{toc}{section}{\null \hspace{2.0em}#1}
+ \addcontentsline{toc}{chapter}{\null \hspace{4.0em}APPENDIX \theappendix}
+ \centerline {APPENDIX \theappendix}
+ \bigskip
+ \begin{center} {\uppercase{#1}}
+ \end{center}
+% \centerline{\uppercase{#2}}
+% \centerline{\uppercase{#3}}
+ \nobreak\bigskip}
+
+% thesis mod
+\def\supplement{
+ \goodbreak
+ \vskip 1in
+ \goodbreak
+ \centerline{SUPPLEMENTAL SOURCES CONSULTED}
+ \nobreak
+ \bigskip
+ \nobreak}
+
+\newenvironment{supplements}{
+ \supplement
+% \newcounter{sucount}
+ \begin{list}{[\arabic{sucount}]}{\usecounter{sucount}
+ \addtolength{\leftmargin}{4mm}}
+ \refspace}{\addtolength{\leftmargin}{-4mm}\end{list}}
+
+
+\def\report#1#2#3#4#5{
+ {#1},\ ``{#2},''\ {\sl Research Report},\ {#3},\ {#4},\ {#5}.}
+\def\journal#1#2#3#4#5#6{
+ {#1},\ ``{#2},''\ {\sl {#3}},\ vol.~\hbox{#4},\ pp.~\hbox{#5},\ {#6}.}
+\def\book#1#2#3#4#5{
+ {#1},\ {\sl {#2}}.\ {#3}: {#4},\ {#5}.}
+\def\edbook#1#2#3#4#5#6#7#8#9{
+ {#1},\ ``{#2},''\ in\ {\sl {#3}}.\ {#4},~ED.\ {#5}: {#6},\ {#7},
+ \ chap.~{#8},\ pp.~{#9}.}
+\def\person#1#2{
+ {#1},\ private communications,\ {#2}.}
+\def\proceed#1#2#3#4#5{
+ {#1},\ ``{#2},''\ in\ {\sl {#3}},\ {#4},\ {#5}.}
+\def\confer#1#2#3#4#5{
+ {#1},\ ``{#2},''\ presented\ at\ the\ {#3},\ {#4},\ {#5}.}
+\def\other#1{#1}
+
+
+% Default initializations of \...mark commands. (See below for their
+% us in defining page styles.
+%
+
+\def\chaptermark#1{}
+% \def\sectionmark#1{} % Preloaded definitions
+% \def\subsectionmark#1{}
+% \def\subsubsectionmark#1{}
+% \def\paragraphmark#1{}
+% \def\subparagraphmark#1{}
+
+% The value of the counter secnumdepth gives the depth of the
+% highest-level sectioning command that is to produce section numbers.
+%
+
+\setcounter{secnumdepth}{2}
+
+% thesis mod - appendix is now defined above
+% APPENDIX
+%
+% The \appendix command must do the following:
+% -- reset the chapter counter to zero
+% -- set \@chapapp to Appendix (for messages)
+% -- redefine the chapter counter to produce appendix numbers
+% -- reset the section counter to zero
+% -- redefine the \chapter command if appendix titles and headings are
+% to look different from chapter titles and headings.
+
+%\def\appendix{\par
+% \setcounter{chapter}{0}
+% \setcounter{section}{0}
+% \def\@chapapp{APPENDIX}
+% \def\thechapter{\Alph{chapter}}}
+
+
+% ****************************************
+% * LISTS *
+% ****************************************
+%
+
+% The following commands are used to set the default values for the list
+% environment's parameters. See the LaTeX manual for an explanation of
+% the meanings of the parameters. Defaults for the list environment are
+% set as follows. First, \rightmargin, \listparindent and \itemindent
+% are set to 0pt. Then, for a Kth level list, the command \@listK is
+% called, where 'K' denotes 'i', 'ii', ... , 'vi'. (I.e., \@listiii is
+% called for a third-level list.) By convention, \@listK should set
+% \leftmargin to \leftmarginK.
+%
+% For efficiency, level-one list's values are defined at top level, and
+% \@listi is defined to set only \leftmargin.
+
+\leftmargini 2.5em
+\leftmarginii 2.2em % > \labelsep + width of '(m)'
+\leftmarginiii 1.87em % > \labelsep + width of 'vii.'
+\leftmarginiv 1.7em % > \labelsep + width of 'M.'
+\leftmarginv 1em
+\leftmarginvi 1em
+
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\labelsep .5em
+\parsep 5pt plus 2.5pt minus 1pt
+
+\def\@listi{\leftmargin\leftmargini}
+
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 5pt plus 2.5pt minus 1pt
+ \parsep 2.5pt plus 1pt minus 1pt
+ \itemsep \parsep}
+
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2.5pt plus 1pt minus 1pt
+ \parsep \z@ \partopsep 1pt plus 0pt minus 1pt
+ \itemsep \topsep}
+
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
diff --git a/obsolete/macros/latex209/contrib/tamueethesis/eethesis.sty b/obsolete/macros/latex209/contrib/tamueethesis/eethesis.sty
new file mode 100644
index 0000000000..d952e5eb06
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/tamueethesis/eethesis.sty
@@ -0,0 +1,1338 @@
+% EETHESIS DOCUMENT STYLE -- Version 2.22 Released 21 July 1993
+% EETHESIS DOCUMENT STYLE -- Version 2.21 Released 5 July 1991
+% EETHESIS DOCUMENT STYLE -- Version 2.2 Released 20 November 1990
+% EETHESIS DOCUMENT STYLE -- Version 2.1 Released 20 June 1989
+% Adapted from report.sty for LaTeX version 2.09
+% Copyright (C) 1985 by Leslie Lamport
+%
+% Change History:
+% 1) fixed roman numeral problem in list of tables 28 Feb 1989 --- RLO
+% 2) eliminated extra spacing at top of References section 3 May 1989 --- RLO
+% 3) Fixed problem with two line chapter titles in table of contents
+% where the second line did not indent properly. This problem
+% only appeared with versions of latex after the 4 Aug 88 release.
+% -p cantrell june 20, 1989
+% 4) Caption text set to be \def\captionpace{\baselineskip=18pt}.
+% --Ken 4-20-90
+% 5) In \listoffigures(\listoftables) the space between figure(table) line is
+% doublespaced, however, the space inside figure(table) line is \tocspace.
+% --Ken 5-28-90
+% 6) The numbers of 'TABLE OF CONTENTS', 'LIST OF FIGURES', and 'LIST OF
+% TABLES' in tableofcontents, listoffigures, and listoftables can be
+% switched to be lined up to right hand side of the box. The default is
+% lined up to the left hand side of the box, the command for switching to
+% be lined up to the right hand side of the box is \tocnumflushright.
+% The box of the number may be too samll,
+% the user can set the width of the box by setting \fignumbox to the
+% number the user thinks that is right (the default is 4em).
+% --Todd and Ken. 6-5-90
+% 7) newcommand \longcaption{sentence 1}{rest of caption}
+% only 'sentence 1' will be written to the lof/lot as appropriate.
+% 'sentence 1' and 'rest of caption' will be written together to the
+% figure/table caption.
+% --Todd
+% 8) Multiline Fig/Tab captions shown as following
+%
+% Fig. ##. Long caption ....
+% Start of second line ...
+% Statr of Third line ...
+% etc.
+% --Todd
+% 9) Put more sapce for Chapter headings before start of text.
+% --Todd
+% 10) The first paragraph indented for section and subsection.
+% --Todd
+% 11) Improve to set the title on the abstract page
+% --Todd
+% 12) Include doublespace.sty from Jean-Francois Lamy, and make the single
+% space in tabbing and tabular environment possible. It is simply write
+% as following.
+% \begin{sspace}
+% \begin{tabbing}(or \begin{tabular})
+% \foo
+% \foo
+% \end{tabular}(or \end{tabular}
+% \end{sspace}
+% For normal text just type \singlespace to switch to single spaced
+% contents, if it does not work, then try use \sspace environment.
+% --Ken 7-16-90
+% 13) Blueline emulating. If you want the blueline emulating alive, just
+% type \blueline, and then there will generate a frame similar to blue
+% line in every page.
+% --Ken 7-24-90
+% 14) verbatimfiles, this macro is adopted from Chris Rowley. It can include
+% code that the thesis either in the text or in the appendix.
+% \verbatimfile{<filename>} for verbatim inclusion of a file
+% \verbatimlisting[n]{<filename>} for verbatim inclusion
+% with line numbers every nth line
+% --Ken 7-24-90
+% 15) Originally when \ref chapter, section, or subsection, the \label
+% always generate 'chapter.', 'section.' and 'subsection.'. In this
+% version, the '.' is gone.
+% --Ken 7-24-90
+% 16) Table of Contents would violate the blue line at the bottom
+% of the page if certain letters were used on the lower most
+% line such as 'g' or 'q'. Removed some of the space between
+% lines of the table of contents to compress vertically the
+% text. This was accomplished by changing the
+% \vspace*{-1em} to \vspace*{-2em}.
+% --John Hermann 4-22-93
+% 17) Reduced the length of the line used by footnotes to separate
+% the footnote from the text. This was done so that the 10
+% character length requirement for the first footnote was
+% satisfied as specified by the thesis manual.
+% --John Hermann (jkh) 3-29-93
+% 18) The \parindent variable was changed from 20pt to 25pt in the
+% \verbatimlisting function.
+% --John Hermann 4-22-93
+% 19) The signature(approval) page has been modified based on
+% the OGS Thesis Manual version July 1992. This modification is
+% made in the eethetitle.sty file.
+% --Wen-Lin Hsieh 7-21-1993
+
+%\typeout{Document Style 'report'. Released 23 September 1985}
+%\typeout{Document Style 'eethesis'. Ver. 2.1 Released 20 June 1989}
+%\typeout{Document Style 'eethesis'. Ver. 2.2 Released 20 November 1990}
+\typeout{Document Style 'eethesis'. Ver. 2.21 Released 5 July 1991}
+
+% The type size option is handled by reading a different file for each
+% size, as follows, to define font size-specific commands:
+% 10pt : THE10, 11pt : THE11, 12pt : THE12
+% Implemented by \def'ing \@ptsize to last digit of file name.
+%
+% In eethesis of Electrical Engineering Dept. at Texas A&M university
+% only 12pt is available. The relational style files are eethe12.sty,
+% and eethetitle.sty.
+%
+
+\def\@ptsize{2} % Default is THE12.STY
+\@namedef{ds@11pt}{\def\@ptsize{1}} % 11pt option reads in THE11.STY
+\@namedef{ds@10pt}{\def\@ptsize{0}} % 10pt option reads in THE10.STY
+
+% Two-side or one-side printing.
+%
+% \@twosidefalse % Default is one-sided printing.
+\def\ds@twoside{\@twosidetrue % Defines twoside option.
+ \@mparswitchtrue} % Marginpars go on outside of page.
+% draft option
+%
+% \overfullrule = 0pt % Default is don't mark overfull hboxes.
+\def\ds@draft{\overfullrule 5pt} % Causes overfull hboxes to be marked.
+
+% The \@options command causes the execution of every command \ds@FOO
+% which is defined and for which the user typed the FOO option in his
+% \documentstyle command. For every option BAR he typed for which
+% \ds@BAR is not defined, the file BAR.sty will be read after the present
+% (main) .STY file is executed.
+
+\@options
+
+\input eethe1\@ptsize.sty\relax
+
+
+% ****************************************
+% * LISTS *
+% ****************************************
+%
+
+% ENUMERATE
+% Enumeration is done with four counters: enumi, enumii, enumiii
+% and enumiv, where enumN controls the numbering of the Nth level
+% enumeration. The label is generated by the commands \labelenumi
+% ... \labelenumiv. The expansion of \p@enumN\theenumN defines the
+% output of a \ref command.
+
+\def\labelenumi{\arabic{enumi}.}
+\def\theenumi{\arabic{enumi}}
+
+\def\labelenumii{(\alph{enumii})}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+
+\def\labelenumiii{\roman{enumiii}.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+
+\def\labelenumiv{\Alph{enumiv}.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+% ITEMIZE
+% Itemization is controlled by four commands: \labelitemi, \labelitemii,
+% \labelitemiii, and \labelitemiv, which define the labels of the various
+% itemization levels.
+
+\def\labelitemi{$\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+
+
+% VERSE
+% The verse environment is defined by making clever use of the
+% list environment's parameters. The user types \\ to end a line.
+% This is implemented by \let'in \\ equal \@centercr.
+%
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+
+% QUOTATION
+% Fills lines
+% Indents paragraph
+%
+\def\quotation{\list{}{\listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin\parsep 0pt plus 1pt}\item[]}
+\let\endquotation=\endlist
+
+% QUOTE -- same as quotation except no paragraph indentation,
+%
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+% DESCRIPTION
+%
+% To change the formatting of the label, you must redefine
+% \descriptionlabel.
+
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+
+\let\enddescription\endlist
+
+\newdimen\descriptionmargin
+\descriptionmargin=3em
+
+
+% ****************************************
+% * OTHER ENVIRONMENTS *
+% ****************************************
+%
+%
+% THEOREM
+% \@begintheorem ... \@endtheorem are the commands executed at the
+% beginning and end of a (user-defined) theorem-like environment.
+% Except \@opargbegintheorem is executed when an optional argument is
+% given. Cf. LATEX.TEX.
+%
+% \def\@begintheorem#1#2{\it \trivlist \item[\hskip \labelsep{\bf #1\ #2}]}
+% \def\@opargbegintheorem#1#2#3{\it \trivlist
+% \item[\hskip \labelsep{\bf #1\ #2\ (#3)}]}
+% \def\@endtheorem{\endtrivlist}
+
+
+% TITLEPAGE
+% In the normal environments, the titlepage environment does nothing but
+% start and end a page, and inhibit page numbers. It also resets the
+% page number to zero. In two-column style, it still makes a one-column
+% page.
+\def\titlepage{
+ \@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{empty}\c@page\z@}
+
+\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi}
+
+% ARRAY AND TABULAR
+%
+
+\arraycolsep 5pt % Half the space between columns in an array environment.
+\tabcolsep 6pt % Half the space between columns in a tabular environment.
+\arrayrulewidth .4pt % Width of rules in array and tabular environment.
+\doublerulesep 2pt % Space between adjacent rules in array or tabular env.
+
+% TABBING
+%
+\tabbingsep \labelsep % Space used by the \' command. (See LaTeX manual.)
+
+% MINIPAGE
+% \@minipagerestore is called upon entry to a minipage environment to
+% set up things that are to be handled differently inside a minipage
+% environment. In the current styles, it does nothing.
+%
+% \skip\@mpfootins : plays same role for footnotes in a minipage as
+% \skip\footins does for ordinary footnotes
+
+\skip\@mpfootins = \skip\footins
+
+% FRAMEBOX
+%
+\fboxsep = 3pt % Space left between box and text by \fbox and \framebox.
+\fboxrule = .4pt % Width of rules in box made by \fbox and \framebox.
+
+
+% ****************************************
+% * CHAPTERS AND SECTIONS *
+% ****************************************
+%
+% DEFINE COUNTERS:
+%
+% \newcounter{NEWCTR}[OLDCTR] : Defines NEWCTR to be a counter, which is
+% reset to zero when counter OLDCTR is stepped.
+% Counter OLDCTR must already be defined.
+
+\newcounter{part}
+\newcounter {chapter}
+\newcounter {section}[chapter]
+\newcounter {subsection}[section]
+\newcounter {subsubsection}[subsection]
+\newcounter {paragraph}[subsubsection]
+\newcounter {subparagraph}[paragraph]
+%
+% thesis mod
+\newcounter {appendix}
+\newcounter {sucount} % counter for supplemental sources
+%
+% For any counter CTR, \theCTR is a macro that defines the printed version
+% of counter CTR. It is defined in terms of the following macros:
+%
+% \arabic{COUNTER} : The value of COUNTER printed as an arabic numeral.
+% \roman{COUNTER} : Its value printed as a lower-case roman numberal.
+% \Roman{COUNTER} : Its value printed as an upper-case roman numberal.
+% \alph{COUNTER} : Value of COUNTER printed as a lower-case letter:
+% 1 = a, 2 = b, etc.
+% \Alph{COUNTER} : Value of COUNTER printed as an upper-case letter:
+% 1 = A, 2 = B, etc.
+%
+
+%\def\thepart {\Roman{part}}
+%\def\thechapter {\arabic{chapter}}
+%\def\thesection {\thechapter.\arabic{section}}
+%\def\thesubsection {\thesection.\arabic{subsection}}
+%\def\thesubsubsection {\thesubsection.\arabic{subsubsection}}
+%\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+%\def\thesubparagraph {\theparagraph.\arabic{subparagraph}}
+%
+% old eethesis mod
+%\def\thepart {\Roman{part}.}
+%\def\thechapter {\Roman{chapter}}
+%\def\thesection {\Alph{section}.}
+%\def\thesubsection {\arabic{subsection}.}
+%\def\thesubsubsection {\alph{subsubsection}.}
+%\def\theparagraph {\null}
+%\def\thesubparagraph {\null}
+%\def\theappendix {\Alph{appendix}}
+%
+% thesis mod
+\def\thepart {\Roman{part}.}
+\def\thechapter {\Roman{chapter}}
+\def\thesection {\Alph{section}}
+\def\thesubsection {\arabic{subsection}}
+\def\thesubsubsection {\alph{subsubsection}}
+\def\theparagraph {\null}
+\def\thesubparagraph {\null}
+\def\theappendix {\Alph{appendix}}
+
+%
+% when ref section(subsection and subsubsection) there is no '.' generated after
+% section number any more. Ken 6-29-90
+%
+\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
+ \def\@svsec{}\else
+ \refstepcounter{#1}\edef\@svsec{\csname the#1\endcsname.\hskip 1em }\fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #6\relax
+ \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\par}
+ \endgroup
+ \csname #1mark\endcsname{#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname.}\fi
+ #7}\else
+ \def\@svsechd{#6\hskip #3\@svsec #8\csname #1mark\endcsname
+ {#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname.}\fi
+ #7}}\fi
+ \@xsect{#5}}
+
+% \@chapapp is initially defined to be 'Chapter'. The \appendix
+% command redefines it to be 'Appendix'.
+%
+\def\@chapapp{CHAPTER}
+
+
+
+% ****************************************
+% * TABLE OF CONTENTS, ETC. *
+% ****************************************
+%
+% A \subsection command writes a
+% \contentsline{subsection}{TITLE}{PAGE}
+% command on the .toc file, where TITLE contains the contents of the
+% entry and PAGE is the page number. If subsections are being numbered,
+% then TITLE will be of the form
+% \numberline{NUM}{HEADING}
+% where NUM is the number produced by \thesubsection. Other sectioning
+% commands work similarly.
+%
+% A \caption command in a 'figure' environment writes
+% \contentsline{figure}{\numberline{NUM}{CAPTION}}{PAGE}
+% on the .lof file, where NUM is the number produced by \thefigure and
+% CAPTION is the figure caption. It works similarly for a 'table' environment.
+%
+% The command \contentsline{NAME} expands to \l@NAME. So, to specify
+% the table of contents, we must define \l@chapter, \l@section,
+% \l@subsection, ... ; to specify the list of figures, we must define
+% \l@figure; and so on. Most of these can be defined with the
+% \@dottedtocline command, which works as follows.
+%
+% \@dottedtocline{LEVEL}{INDENT}{NUMWIDTH}{TITLE}{PAGE}
+% LEVEL : An entry is produced only if LEVEL < or = value of
+% 'tocdepth' counter. Note, \chapter is level 0, \section
+% is level 1, etc.
+% INDENT : The indentation from the outer left margin of the start of
+% the contents line.
+% NUMWIDTH : The width of a box in which the section number is to go,
+% if TITLE includes a \numberline command.
+%
+% This command uses the following three parameters, which are set
+% with a \def (so em's can be used to make them depend upon the font).
+% \@pnumwidth : The width of a box in which the page number is put.
+% \@tocrmarg : The right margin for multiple line entries. One
+% wants \@tocrmarg > or = \@pnumwidth
+% \@dotsep : Separation between dots, in mu units. Should be \def'd to
+% a number like 2 or 1.7
+
+\def\@pnumwidth{1.5em}
+\def\@tocrmarg {4.5em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{3}
+
+
+% TABLEOFCONTENTS
+% In report style, \tableofcontents, figures, etc. are always
+% set in single-column style. @restonecol
+
+\newdimen\toddhack
+\newdimen\twoem \twoem 0em
+\newdimen\zeroem \zeroem 0em
+\newdimen\fignumbox \fignumbox 4em
+
+\def\tocnumflushright{
+\twoem 2em
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% The justification of the chapter heads is on the left side instead of
+% the right
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% The macro below controls how the box is formed.
+%\def\numberline#1{\hbox to\@tempdima{#1\hfil}}
+\def\numberline##1{\hbox to\@tempdima{\hfil##1\hskip 2ex\hskip \toddhack}}
+
+%
+% these control the spacing from the left margin
+% #1 is the indentation level at which an entry is produced in the toc file
+% #2 is the total indentation from the left margin
+% #3 is the width of the box containing the chapter/section number
+%
+
+\def\l@section{\@dottedtocline{1}{4em}{2.0em}}
+\def\l@subsection{\@dottedtocline{2}{6em}{2.0em}}
+\def\l@subsubsection{\@dottedtocline{3}{8.0em}{2.0em}}
+\def\l@paragraph{\@dottedtocline{4}{7em}{2.0em}}
+\def\l@subparagraph{\@dottedtocline{5}{8em}{2.0em}}
+
+
+\def\l@chapter##1##2{\pagebreak[3]
+\vskip 0.75em plus 1pt %%%%%% 1 em seems too large,
+ %%%%%% change to 0.75em; by Ken 7-8-91
+{\leftskip 0em\relax \rightskip \@tocrmarg \parfillskip -\rightskip
+\parindent 0em\relax\@afterindenttrue
+\interlinepenalty\@M
+\leavevmode
+\@tempdima 4em \toddhack 1em \relax
+\advance\leftskip \@tempdima \hbox{}\hskip -\leftskip
+\uppercase{##1}\nobreak\leaders\hbox{$\m@th \mkern \@dotsep mu.\mkern
+\@dotsep mu$}\hfill \nobreak \hbox to\@pnumwidth{\hfil\rm ##2}\par}
+\vskip 0.5em plus 1pt\toddhack 0em}} %%% change 1 em to 0.5em; by Ken 7-8-91.
+
+\def\tableofcontents{
+\newpage
+ \let \tempp \topskip
+ \topskip 1em
+% \@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn\fi
+% thesis mod
+\tocspace
+%
+% \chapter*{TABLE OF CONTENTS\markright{CONTENTS}}
+% thesis mod
+ \chapter*{\vspace*{-2em}TABLE OF CONTENTS\markright{CHAPTER}} % change -1em to -2em ; by jkh(16) 4-22-1993
+ {\vskip -1em CHAPTER \hfill Page\\}
+ \thispagestyle{myheadings}
+%
+ \@starttoc{toc}
+% \if@restonecol\twocolumn\fi}
+% thesis mod
+ \doublespace \topskip \tempp}
+%
+%\def\l@part#1#2{\addpenalty{-\@highpenalty}
+% \addvspace{2.25em plus 1pt} % space above part line
+% \begingroup
+% \@tempdima 3em % width of box holding part number, used by
+% \parindent \z@ \rightskip \@pnumwidth %% \numberline
+% \parfillskip -\@pnumwidth
+% {\large \bf % set line in \large boldface
+% \leavevmode % TeX command to enter horizontal mode.
+% #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
+% \nobreak % Never break after part entry
+% \endgroup}
+%
+% thesis mod
+\def\l@part#1#2{\pagebreak[3]
+ \vskip 0.75em plus 1pt % space above chapter line
+ %% change 1 em to 0.75em; by Ken 7-8-91.
+ \@tempdima 1.5em % width of box holding chapter number
+ \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \leavevmode % TeX command to enter horizontal mode.
+ #1\dotfill \hbox to\@pnumwidth{\hss #2}\par
+ \endgroup}
+
+\def\l@chapter#1#2{\pagebreak[3]
+ \vskip 0.75em plus 1pt % space above chapter line
+ %% change 1 em to 0.75em; by Ken 7-8-91.
+% \@tempdima 1.55em % width of box holding chapter number
+% thesis mod
+% this section is adapted from def of \@dottedtocline
+% change hangindent in next line to
+% leftskip 6-20-89 to work with later latex changes
+ {\leftskip 2em\relax \rightskip \@tocrmarg \parfillskip -\rightskip
+ \parindent 2em\relax\@afterindenttrue
+ \interlinepenalty\@M
+ \leavevmode
+ \@tempdima 4em\relax % width of box holding chapter number
+% change 6-20-89
+ \advance\leftskip \@tempdima \hbox{}\hskip -\leftskip
+% end 6-20-89
+ \uppercase{#1}\nobreak\leaders\hbox{$\m@th \mkern \@dotsep mu.\mkern
+ \@dotsep mu$}\hfill \nobreak \hbox to\@pnumwidth{\hfil\rm #2}\par}
+ \vskip 0.5em plus 1pt} % space below chapter line
+ %% change 1 em to 0.5em; by Ken 7-8-91.
+%
+% \begingroup
+% \parindent \z@ \rightskip \@pnumwidth
+% \parfillskip -\@pnumwidth
+% \bf % Boldface.
+% \leavevmode % TeX command to enter horizontal mode.
+% #1\hfil \hbox to\@pnumwidth{\hss #2}\par
+%
+%
+% \endgroup}
+
+%\def\l@section{\@dottedtocline{1}{1.55em}{2.3em}}
+%\def\l@subsection{\@dottedtocline{2}{3.8em}{3.2em}}
+%\def\l@subsubsection{\@dottedtocline{3}{7.0em}{4.1em}}
+%\def\l@paragraph{\@dottedtocline{4}{10em}{5em}}
+%\def\l@subparagraph{\@dottedtocline{5}{12em}{6em}}
+%
+% thesis mod
+\def\l@section{\@dottedtocline{1}{7em}{1.5em}}
+\def\l@subsection{\@dottedtocline{2}{9em}{1.5em}}
+\def\l@subsubsection{\@dottedtocline{3}{11em}{1.5em}}
+\def\l@paragraph{\@dottedtocline{4}{13em}{1.5em}}
+\def\l@subparagraph{\@dottedtocline{5}{14em}{1.5em}}
+%
+
+%LIST OF FIGURES
+%
+%\def\listoffigures{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+% \fi\chapter*{LIST OF FIGURES\markboth
+% {LIST OF FIGURES}{LIST OF FIGURES}}\@STARTTOC{lof}\if@restonecol\twocolumn
+% \fi}
+%
+% thesis mod
+\def\listoffigures{\tocspace % \tocspace for \listoffigures, Ken 5-28-90
+ \let \tempp \topskip
+ \topskip 1em
+ \chapter*{LIST OF FIGURES\markright{Figure}}
+ {\vskip -1em FIGURE \hfill Page\\}
+ \thispagestyle{myheadings}
+ \toddhack \twoem
+ \@starttoc{lof}\if@restonecol\twocolumn
+ \toddhack \zeroem
+ \fi\topskip \tempp \doublespace}
+%
+%\def\l@figure{\@dottedtocline{1}{0em}{5em}}
+%%%%
+%%%%
+%%%% Inside the figure line is \tocspaced (16pt)
+%%%% Between the figureline is 1.0em
+%%%% Revised by Ken, 5-28-90
+%%%%
+%%%%
+ %\begin
+\def\l@figure#1#2{\pagebreak[3]
+ \vskip .5em plus 1pt % space above figure line
+ {\leftskip 0pt\relax \rightskip \@tocrmarg \parfillskip -\rightskip
+ \parindent 0pt\relax\@afterindenttrue
+ \interlinepenalty\@M
+ \leavevmode
+ \@tempdima \fignumbox\relax % width of box holding figure number
+ % \fignumbox default to 4em
+ \advance\leftskip \@tempdima \hbox{}\hskip -\leftskip
+ #1\nobreak\leaders\hbox{$\m@th \mkern \@dotsep mu.\mkern
+ \@dotsep mu$}\hfill \nobreak \hbox to\@pnumwidth{\hfil #2}\par}
+ \vskip .5em plus 1pt} % space below figure line
+ %\end
+
+% LIST OF TABLES
+%
+%\def\listoftables{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+% \fi\chapter*{LIST OF TABLES\markboth
+% {LIST OF TABLES}{LIST OF TABLES}}\@starttoc{lot}\if@restonecol\twocolumn
+% \fi}
+% thesis mod
+\def\listoftables{\tocspace
+ \let \tempp \topskip
+ \topskip 1em
+ \chapter*{\vspace*{-1em}LIST OF TABLES\markright{Table}}
+ {\vskip -1em TABLE \hfill Page\\}
+ \thispagestyle{myheadings}
+ \toddhack \twoem
+ \@starttoc{lot}\if@restonecol\twocolumn
+ \toddhack \zeroem
+ \fi\topskip \tempp \doublespace}
+%
+\let\l@table\l@figure
+
+
+
+% ****************************************
+% * BIBLIOGRAPHY *
+% ****************************************
+%
+%
+% \def\newblock{\hskip .11em plus .33em minus -.07em} --
+% Defines the `closed' format, where the blocks (major units of
+% information) of an entry run together.
+%
+% \sloppy -- Used because it's rather hard to do line breaks in
+% bibliographies,
+%
+% \sfcode`\.=1000\relax --
+% Causes a `.' (period) not toproduce an end-of-sentence space.
+
+\def\thebibliography#1{
+\addcontentsline{toc}{chapter}{\null\hspace{4.0em}REFERENCES}
+%
+% Modification to eliminate extra space 5-3-89 --- RLO
+%\chapter*{REFERENCES\markboth{REFERENCES}{REFERENCES}}\list
+\vskip .2truein
+\centerline{REFERENCES}
+\bigskip
+\list % ******* LOST FOR SOME REASON, BUT RECOVERED AT RIGHT NOW ******
+%
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus -.07em}
+ \sloppy
+ \sfcode`\.=1000\relax}
+
+\let\endthebibliography=\endlist
+
+% \def\@biblabel#1{[#1]\hfill} % Produces the label for a \bibitem[...]
+ % command.
+% \def\@cite#1{[#1]} % Produces the output of the \cite command.
+
+
+
+% ****************************************
+% * THE INDEX *
+% ****************************************
+%
+% THE THEINDEX ENVIRONMENT
+% Produces double column format, with each paragraph a separate entry.
+% The user commands \item, \subitem and \subsubitem are used to
+% produce the entries, and \indexspace adds an extra vertical space
+% that's the right size to put above the first entry with a new letter
+% of the alphabet.
+
+\newif\if@restonecol
+
+\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\@makeschapterhead{Index}]
+ \markboth{INDEX}{INDEX}\thispagestyle{plain}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+
+\def\@idxitem{\par\hangindent 40pt}
+
+\def\subitem{\par\hangindent 40pt \hspace*{20pt}}
+
+\def\subsubitem{\par\hangindent 40pt \hspace*{30pt}}
+
+\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
+
+\def\indexspace{\par \vskip 10pt plus 5pt minus 3pt\relax}
+
+
+% ****************************************
+% * FOOTNOTES *
+% ****************************************
+%
+% \footnoterule is a macro to draw the rule separating the footnotes from
+% the text. It should take zero vertical space, so it needs a negative
+% skip to compensate for any positive space taken by the rule. (See
+% PLAIN.TEX.)
+
+% Paper format footnote separating line on first page of body must be 10 chars.
+% Therefore, changed the hrule below from .4 to .125
+% John Hermann (jkh(17)) March 27, 1993
+\def\footnoterule{\kern-1\p@
+ \hrule width .125\columnwidth
+ \kern .6\p@} % The \hrule has default height of .4pt .
+
+% \newcounter{footnote}
+\@addtoreset{footnote}{chapter} % Numbers footnotes within chapters
+
+% \@makefntext{NOTE} :
+% Must produce the actual footnote, using \@thefnmark as the mark
+% of the footnote and NOTE as the text. It is called when effectively
+% inside a \parbox of width \columnwidth (i.e., with \hsize =
+% \columnwidth).
+%
+% The following macro indents all lines of the footnote by 10pt, and
+% indents the first line of a new paragraph by 1em. To change these
+% dimensions, just substitute the desired value for '10pt' [in both
+% places] or '1em'. The mark is flushright against the footnote.
+% \long\def\@makefntext#1{\@setpar{\@@par\@tempdima \hsize
+% \advance\@tempdima-10pt\parshape \@ne 10pt \@tempdima}\par
+% \parindent 1em\noindent \hbox to \z@{\hss$^{\@thefnmark}$}#1}
+%
+% A simpler macro is used, in which the footnote text is
+% set like an ordinary text paragraph, with no indentation except
+% on the first line of a paragraph, and the first line of the
+% footnote. Thus, all the macro must do is set \parindent
+% to the appropriate value for succeeding paragraphs and put the
+% proper indentation before mark.
+
+\long\def\@makefntext#1{\parindent 1em\noindent
+ \hbox to 1.8em{\hss$^{\@thefnmark}$}#1}
+%
+% thesis mod
+%\long\def\@makefntext#1{\@setpar{\@@par\@tempdima \hsize
+% \advance\@tempdima-10pt\parshape \@ne 10pt \@tempdima}\par
+% \parindent 1em\noindent \hbox to z@{\hss$^{\@thefnmark}$}#1}
+%
+% \@makefnmark : A macro to generate the footnote marker that goes
+% in the text. Default used.
+%
+
+
+
+% ****************************************
+% * FIGURES AND TABLES *
+% ****************************************
+%
+% Float placement parameters. See LaTeX manual for their definition.
+%
+\setcounter{topnumber}{2}
+\def\topfraction{.7}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.3}
+\setcounter{totalnumber}{3}
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Long Captions -- this is a slightly modified \caption to allow just
+% the first sentence on a very long caption to be
+% written on the lof/lot
+%
+% \longcaption{sentence 1}{rest of caption}
+%
+% only 'sentence 1' will be written to the lof/lot as appropriate.
+% 'sentence 1' and 'rest of caption' will be written together to the
+% figure/table caption. --Todd
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+% \@dblarg{CMD}{ARG} : \@dblarg{CMD}{ARG} expands to CMD[ARG]{ARG}. Use
+% \@dblarg\CS when \CS takes arguments [ARG1]{ARG2},
+% where default is ARG1 = ARG2.
+%
+% \def\caption{\refstepcounter\@captype \@dblarg{\@caption\@captype}}
+
+
+\def\longcaption{\refstepcounter\@captype \@longcaption\@captype}
+
+\long\def\@longcaption#1#2#3{\par\addcontentsline{\csname
+ ext@#1\endcsname}{#1}{\protect\numberline{\csname
+ the#1\endcsname}{\ignorespaces #2}}\begingroup
+ \@parboxrestore
+ \normalsize
+ \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #2 #3}\par
+ \endgroup}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Multiline Fig. captions -- calculated the width of "Fig. ##. "
+% and use that to indent the caption so all lines will allign under the
+% first letter of the caption rather than against the right margin.
+%
+% Fig. ##. Long caption ....
+% Start of second line....
+% third line ... etc.
+% --Todd
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \@makecaption{NUMBER}{TEXT} : Macro to make a figure or table caption.
+% NUMBER : Figure or table number--e.g., 'Figure 3.2'
+% TEXT : The caption text.
+% Macro should be called inside a \parbox of right width, with \normalsize.
+
+\def\captionspace{\baselineskip=18pt} %%%%%%%%%%%%%%%%% 4-24-90
+ %% \captionspace is added by Ken 4-20-90
+\long\def\@makecaption#1#2{
+ \vskip 10pt
+ \setbox\@tempboxa\hbox{#1 #2} %
+ \ifdim \wd\@tempboxa >\hsize % IF longer than one line:
+ \captionspace % THEN measure the width of "Fig. ##. "
+ \setbox\@tempboxa\hbox{#1} % we'll indent the entire TEXT portion
+ \hangindent=\wd\@tempboxa % of the caption by this amount.
+ \hangafter=0 % The Fig. num. is typeset as a negative
+ % width hbox to cancel the \hangindent
+ % on the first line. This the only way
+ % I could line things up without
+ % messing with tex glue.
+ \setbox\@tempboxa\hbox{\llap{#1 }#2}
+ \unhbox\@tempboxa\par % set TEXT as an ordinary paragraph
+ \doublespace %
+ \else % ELSE center.
+ \hbox to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi}
+
+% To define a float of type TYPE (e.g., TYPE = figure), the document style
+% must define the following.
+%
+% \fps@TYPE : The default placement specifier for floats of type TYPE.
+%
+% \ftype@TYPE : The type number for floats of type TYPE. Each TYPE has
+% associated a unique positive TYPE NUMBER, which is a power
+% of two. E.g., figures might have type number 1, tables type
+% number 2, programs type number 4, etc.
+%
+% \ext@TYPE : The file extension indicating the file on which the
+% contents list for float type TYPE is stored. For example,
+% \ext@figure = 'lof'.
+%
+% \fnum@TYPE : A macro to generate the figure number for a caption.
+% For example, \fnum@TYPE == Figure \thefigure.
+%
+% The actual float-making environment commands--e.g., the commands
+% \figure and \endfigure--are defined in terms of the macros \@float
+% and \end@float, which are described below.
+%
+% \@float{TYPE}[PLACEMENT] : Macro to begin a float environment for a
+% single-column float of type TYPE with PLACEMENT as the placement
+% specifier. The default value of PLACEMENT is defined by \fps@TYPE.
+% The environment is ended by \end@float.
+% E.g., \figure == \@float{figure}, \endfigure == \end@float.
+
+
+% FIGURE
+
+\newcounter{figure}
+%\@addtoreset{figure}{chapter}
+%\def\thefigure{\@arabic\c@figure}
+%
+% thesis mod
+\def\thefigure{\@arabic\c@figure}
+
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{Fig.\ \thefigure.}
+\def\figure{\@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+
+% TABLE
+%
+\newcounter{table}
+%\@addtoreset{table}{chapter}
+%\def\thetable{\@arabic\c@table}
+% thesis mod
+%
+\def\thetable{\@Roman\c@table}
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{Table \thetable.}
+\def\table{\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+
+
+% ****************************************
+% * TITLE AND ABSTRACT *
+% ****************************************
+%
+%
+% Uses same title and abstract format as the article style's
+% titlepage option.
+
+\input eethetitle.sty
+
+
+% ****************************************
+% * PAGE STYLES *
+% ****************************************
+%
+% The page style 'foo' is defined by defining the command \ps@foo. This
+% command should make only local definitions. There should be no stray
+% spaces in the definition, since they could lead to mysterious extra
+% spaces in the output.
+%
+% The \ps@... command defines the macros \@oddhead, \@oddfoot,
+% \@evenhead, and \@evenfoot to define the running heads and
+% feet---e.g., \@oddhead is the macro to produce the contents of the
+% heading box for odd-numbered pages. It is called inside an \hbox of
+% width \textwidth.
+%
+% To make headings determined by the sectioning commands, the page style
+% defines the commands \chaptermark, \sectionmark, ... , where
+% \chaptermark{TEXT} is called by \chapter to set a mark, and so on.
+% The \...mark commands and the \...head macros are defined with the
+% help of the following macros. (All the \...mark commands should be
+% initialized to no-ops.)
+%
+% MARKING CONVENTIONS:
+% LaTeX extends TeX's \mark facility by producing two kinds of marks
+% a 'left' and a 'right' mark, using the following commands:
+% \markboth{LEFT}{RIGHT} : Adds both marks.
+% \markright{RIGHT} : Adds a 'right' mark.
+% \leftmark : Used in the \@oddhead, \@oddfoot, \@evenhead or \@evenfoot
+% macro, gets the current 'left' mark. Works like TeX's
+% \botmark command.
+% \rightmark : Used in the \@oddhead, \@oddfoot, \@evenhead or \@evenfoot
+% macro, gets the current 'right' mark. Works like TeX's
+% \firstmark command.
+% The marking commands work reasonably well for right marks 'numbered
+% within' left marks--e.g., the left mark is changed by a \chapter command and
+% the right mark is changed by a \section command. However, it does
+% produce somewhat anomalous results if two \bothmark's occur on the same page.
+%
+
+\mark{{}{}} % Initializes TeX's marks
+
+% \def\ps@empty{\def\@oddhead{}
+% \def\@oddfoot{}
+% \def\@evenhead{}\def\@evenfoot{}}
+%
+% \def\ps@plain{\def\@oddhead{}
+% \def\@oddfoot{\rm\hfil\thepage\hfil}
+% \def\@evenhead{}
+% \let\@evenfoot\@oddfoot}
+
+% Definition of 'headings' page style
+% Note the use of ##1 for parameter of \def\chaptermark inside the
+% \def\ps@headings.
+%
+
+\def\@headmk{\vbox to 36pt{\hbox to \hsize{\hfil \rm\thepage} %Ken 11-16-90
+ \vskip 37pt
+ \hbox to \hsize{\rightmark \hfil Page}}}
+\if@twoside % If two-sided printing.
+\def\ps@headings{\def\@oddfoot{}\def\@evenfoot{}% No feet.
+%\def\@evenhead{\rm \thepage\hfil \sl \leftmark}% Left heading.
+%\def\@oddhead{\hbox{}\sl \rightmark \hfil \rm\thepage}% Right heading.
+\def\@evenhead{\vbox to 36pt{\hbox to \hsize{\rm\thepage \hfil} % Ken 11-16-90
+ \vskip 37pt
+ \hbox to \hsize{\leftmark\hfil Page}}}
+\def\@oddhead{\@headmk} %%%%%%%%%%%% Ken 11-16-90
+\def\chaptermark##1{\markboth {\uppercase{\ifnum \c@secnumdepth >\m@ne
+ \@chapapp\ \thechapter. \ \fi ##1}}{}}%
+\def\sectionmark##1{\markright {\uppercase{\ifnum \c@secnumdepth >\z@
+ \thesection. \ \fi ##1}}}}
+\else % If one-sided printing.
+\def\ps@headings{\def\@oddfoot{}\def\@evenfoot{}% No feet.
+%\def\@oddhead{\hbox {}\sl \rightmark \hfil \rm\thepage}% Heading.
+%
+% thesis mod
+\def\@oddhead{\@headmk} %%%%%%%%%%%% Ken 11-16-90
+%\def\@oddhead{\vbox to 36pt{\hbox to \hsize{\hfil \rm\thepage}
+% \vskip 12pt
+% For page number moving to between top edge and blue line the \vskip should
+% be changed from 12 pt to 37pt. ******* K. C. 12-4-89
+% \vskip 37pt
+% \hbox to \hsize{\rightmark \hfil Page}}}
+%
+\def\chaptermark##1{\markright {\uppercase{\ifnum \c@secnumdepth >\m@ne
+ \@chapapp\ \thechapter. \ \fi ##1}}}}
+\fi
+
+% Definition of 'myheadings' page style.
+%
+% thesis mod - change necessary for headings on continued pages of toc, etc.
+%
+%\def\ps@myheadings{\def\@oddhead{\hbox{}\sl\rightmark \hfil \rm\thepage}%
+\def\ps@myheadings{\def\@oddhead{\vbox to \headheight{\hbox to \hsize{\hfil
+ \rm\thepage}\vfill}}
+\def\@oddfoot{}\def\@evenhead{\rm \thepage\hfil\null\hbox {}}
+%\sl\leftmark\hbox {}}%
+\def\@evenfoot{}\def\sectionmark##1{}\def\subsectionmark##1{}}
+
+
+
+% ****************************************
+% * MISCELLANEOUS *
+% ****************************************
+%
+% DATE
+%
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+
+% EQUATION and EQNARRAY -- put here because it must follow \chapter definition
+% thesis mod
+%
+% \newcounter{equation}
+%
+\@addtoreset{equation}{chapter} % Makes \chapter reset 'equation' counter.
+
+\def\theequation{\arabic{chapter}.\arabic{equation}}
+
+% \jot = 3pt % Extra space added between lines of an eqnarray environment
+
+% The macro \@eqnnum defines how equation numbers are to appear in equations.
+%
+% \def\@eqnnum{(\theequation)}
+%
+
+
+% ****************************************
+% * INITIALIZATION *
+% ****************************************
+%
+% Default initializations
+
+% thesis mod
+%\ps@plain % 'plain' page style
+\ps@myheadings % default is `myheadings' page style
+%
+\pagenumbering{arabic} % Arabic page numbers
+\onecolumn % Single-column.
+\if@twoside\else\raggedbottom\fi % Ragged bottom unless twoside option.
+
+% ***************************************
+% * SINGLESPACE ANd DOUBLESPACE *
+% ***************************************
+
+
+%-------------------------------------------------------------------------------
+%
+% LaTeX Document style option "doublespace"
+% -- usage: \documentstyle[...,doublespace,...]{...}
+%
+% This style option produces a double-spaced document by redefining
+% the LaTeX parameter \baselinestretch to 2.
+%
+% It also fixes a number of problems with standard LaTeX, as follows:
+%
+% 1. A new environment "singlespace" is provided, within which single
+% spacing will apply.
+% JFL - changed so that it works in regular text and so that vertical
+% space is before and after is correctly computed
+% 2. Double spacing is turned off within footnotes and floats (figures
+% and tables).
+% 3. Proper double spacing happens below tabular environments and in other
+% places where LaTeX uses a strut.
+% 4. Slightly more space is inserted before footnotes.
+% 5. JFL - fixes spacing before and after displayed math
+%
+% Note: This version sets a baselinestretch of 2. If this is too much,
+% put \setstretch{1.7} (or some appropriate value) before the
+% \begin{document} command. To print the document with single spacing
+% again, without removing "singlespace" environments, just put a
+% \setstretch{1} at the top of the document.
+%
+% PLEASE REPORT ANY BUGS
+%
+% Modified by: Jean-Francois Lamy
+% lamy@ai.toronto.edu
+% lamy@utai.uucp
+%
+% Author: Stephen Page -- sdpage@prg.oxford.ac.uk
+% sdpage%prg.oxford.ac.uk@cs.ucl.ac.uk
+%
+% Release date: 6 July 1986 - September 3, 1986
+%
+% Known bugs:
+% . It might be nice if spacing before the footnote rule (\footins)
+% were provided in a tidier way.
+% . Increasing struts may possibly cause some other obscure part of
+% formatting to fall over.
+% . \begin{singlespace}\begin{quote} produces the wrong spacing before
+% the quote (extra glue is inserted).
+% . shouldn't @setsize stretch parskip as well?
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%---Set up double spacing
+
+%\def\baselinestretch{1}
+
+
+%---New command "\setstretch" (slightly more mnemonic... and easier to type)
+
+\def\setstretch#1{\renewcommand{\baselinestretch}{#1}}
+
+%---Stretch the baseline BEFORE calculating the strut size. This improves
+% spacing below tabular environments etc., probably...
+% Comments are welcomed.
+
+\def\@setsize#1#2#3#4{\@nomath#1%
+ \let\@currsize#1\baselineskip
+ #2\baselineskip\baselinestretch\baselineskip
+ \parskip\baselinestretch\parskip
+ \setbox\strutbox\hbox{\vrule height.7\baselineskip
+ depth.3\baselineskip width\z@}%
+ \normalbaselineskip\baselineskip#3#4}
+
+
+%---Increase the space between last line of text and footnote rule.
+% This is a very untidy way to do it!
+
+\skip\footins 20pt plus4pt minus4pt
+
+
+%---Reset baselinestretch within footnotes and floats. Originally stolen
+% from Stanford thesis style.
+
+\def\@xfloat#1[#2]{\ifhmode \@bsphack\@floatpenalty -\@Mii\else
+ \@floatpenalty-\@Miii\fi\def\@captype{#1}\ifinner
+ \@parmoderr\@floatpenalty\z@
+ \else\@next\@currbox\@freelist{\@tempcnta\csname ftype@#1\endcsname
+ \multiply\@tempcnta\@xxxii\advance\@tempcnta\sixt@@n
+ \@tfor \@tempa :=#2\do
+ {\if\@tempa h\advance\@tempcnta \@ne\fi
+ \if\@tempa t\advance\@tempcnta \tw@\fi
+ \if\@tempa b\advance\@tempcnta 4\relax\fi
+ \if\@tempa p\advance\@tempcnta 8\relax\fi
+ }\global\count\@currbox\@tempcnta}\@fltovf\fi
+ \global\setbox\@currbox\vbox\bgroup
+ \def\baselinestretch{1}\small\normalsize
+ \boxmaxdepth\z@
+ \hsize\columnwidth \@parboxrestore}
+\long\def\@footnotetext#1{\insert\footins{\def\baselinestretch{1}\footnotesize
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\footnotesep
+ \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
+ \hsize\columnwidth \@parboxrestore
+ \edef\@currentlabel{\csname p@footnote\endcsname\@thefnmark}\@makefntext
+ {\rule{\z@}{\footnotesep}\ignorespaces
+ #1\strut}}}
+
+% Stolen from MIT.
+%
+% A single spaced quote (say) is done by surrounding singlespace with quote.
+%
+\def\sspace{%
+\vskip\parskip%
+\vskip\baselineskip%
+\def\baselinestretch{0.65}%
+\ifx\@currsize\normalsize\@normalsize\else\@currsize\fi%
+\vskip-\parskip%
+\vskip-\baselineskip%
+}
+
+\def\endsspace{\par}
+
+% spacing, doublespace and onehalfspace all are meant to INCREASE the
+% spacing (i.e. calling onehalfspace from within doublespace will not
+% produce a graceful transition between spacings)
+%
+\def\spacing#1{\par%
+ \def\baselinestretch{#1}%
+ \ifx\@currsize\normalsize\@normalsize\else\@currsize\fi}
+
+\def\endspacing{\par%
+ \vskip \parskip%
+ \vskip \baselineskip%
+ \endgroup%
+ \vskip -\parskip%
+ \vskip -\baselineskip%
+ \begingroup}
+
+\def\onehalfspace{\spacing{1.5}}
+\let\endonehalfspace=\endspacing
+
+\def\dspace{\spacing{2}}
+\let\dspace=\endspacing
+
+% Fix up spacing before and after displayed math
+% (arraystretch seems to do a fine job for inside LaTeX displayed math,
+% since array and eqnarray seem to be affected as expected)
+% Changing \baselinestretch and doing a font change also works if done here,
+% but then you have to change @setsize to remove the call to @nomath)
+%
+\everydisplay{
+ \abovedisplayskip \baselinestretch\abovedisplayskip%
+ \belowdisplayskip \abovedisplayskip%
+ \abovedisplayshortskip \baselinestretch\abovedisplayshortskip%
+ \belowdisplayshortskip \baselinestretch\belowdisplayshortskip}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% verbatimfiles, adopted from Chris Rowley %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% --- This LaTeX style-file defines two user-callable macros:
+% --- \verbatimfile{<filename>} for verbatim inclusion of a file
+% --- \verbatimlisting[n]{<filename>} for verbatim inclusion
+% with line numbers every nth line
+%
+% --- The macros are based on those distributed with Sunil Podar's
+% --- `EPIC.STY' macro package, attributed to Tim Morgan,
+% --- modified to keep internal macros internal by Adrian F. Clark,
+% --- alien@uk.ac.essex.ese
+% --- ---and further latexification by Chris Rowley,
+% --- ca_rowley@uk.ac.open.acs.vax.
+% --- optional argument for numbering multiples of [N] by H. Schulzrinne
+% hgschulz@cs.umass.edu
+%
+% --- Note that the precise layout of line breaks in this file is important!
+%
+
+\def\verbatimfile#1{\begingroup
+ \@verbatim\frenchspacing \@vobeyspaces
+ \input#1 \endgroup
+}
+
+\newcounter{lineno}\newcounter{Lineno}
+\def\verbatimlisting{\@ifnextchar[{\@verbatimlisting}{\@verbatimlisting[5]}}
+\def\@verbatimlisting[#1]#2{\setcounter{lineno}{0}\setcounter{Lineno}{0}%
+ \begingroup \@verbatim \frenchspacing \@vobeyspaces \parindent=25pt %jkh(18)
+ \everypar{\stepcounter{lineno}\stepcounter{Lineno}\ifnum\value{Lineno}=#1
+ \setcounter{Lineno}{0}\llap{\footnotesize\it\thelineno\ \ }\fi}\input#2
+ \endgroup
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Blue line emulator %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Box the pages similarly to the blue line paper boxs the pages.
+% In \tableofcontents, \listoffigures, and \listoftables we set the \headheight
+% to be 36pt and it is too much so we have to reduce that by setting
+% \extraspace to be 24pt. And after we finish \tableofcontents, \listoffigures,
+% and listoftables, the \extraspace should be recovered to be 0pt. So the
+% \extraspace should be set to 0pt just right before \include{ch1}.
+%
+%
+\def\blueline{
+\newdimen\topdist \topdist 4pt
+\newdimen\rightdist \rightdist .23in
+\newdimen\marsepsize \marsepsize 8pt
+\newdimen\theight \theight 8.5in
+\newdimen\twidth \twidth 6.0in
+\newdimen\botdist \botdist 6pt
+\newdimen\extraspace \extraspace 0pt
+\newdimen\extradim \extradim 0pt
+
+\def\tableofcontents{
+\newpage
+\extraspace 24pt
+ \let \tempp \topskip
+ \topskip 1em
+% \@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn\fi
+% thesis mod
+\tocspace
+%
+% \chapter*{TABLE OF CONTENTS\markright{CONTENTS}}
+% thesis mod
+ \chapter*{\vspace*{-1em}TABLE OF CONTENTS\markright{CHAPTER}}
+ {\vskip -1em CHAPTER \hfill Page\\}
+ \thispagestyle{myheadings}
+%
+ \@starttoc{toc}
+% \if@restonecol\twocolumn\fi}
+% thesis mod
+ \doublespace \topskip \tempp}
+%
+
+\def\listoffigures{\tocspace % \tocspace for \listoffigures, Ken 5-28-90
+ \let \tempp \topskip
+ \topskip 1em
+ \chapter*{LIST OF FIGURES\markright{Figure}}
+ {\vskip -1em FIGURE \hfill Page\\}
+ \thispagestyle{myheadings}
+ \toddhack \twoem
+ \@starttoc{lof}\if@restonecol\twocolumn
+ \toddhack \zeroem
+ \fi\topskip \tempp \doublespace} % the rest of the text is \doublespace
+ % Ken 5-28-90
+%
+
+\def\listoftables{\tocspace
+ \let \tempp \topskip
+ \topskip 1em
+ \chapter*{\vspace*{-1em}LIST OF TABLES\markright{Table}}
+ {\vskip -1em TABLE \hfill Page\\}
+ \thispagestyle{myheadings}
+ \toddhack \twoem
+ \@starttoc{lot}\if@restonecol\twocolumn
+ \toddhack \zeroem
+ \fi\topskip \tempp \doublespace}
+%
+
+\def\body{
+ \pagenumbering{arabic}\setcounter{page}{1}
+ \headheight 12pt
+ \extraspace 0pt % recover to \headheight = 12pt
+ \pagestyle{myheadings}
+ \def\@thefnmark{\char32}
+ \@footnotetext{\normalsize Journal model is {\sl IEEE}
+ {\sl Transactions on Automatic Control.}}\setcounter{footnote}{0}}
+
+%%% LaTeX's output routine, tweaked for page boxes.
+
+\def\@outputpage{\begingroup\catcode`\ =10
+ \extradim \extraspace
+ \let\-\@dischyph \let\'\@acci \let\`\@accii \let\=\@acciii
+ \if@specialpage
+ \global\@specialpagefalse\@nameuse{ps@\@specialstyle}\fi
+ \if@twoside
+ \ifodd\count\z@ \let\@thehead\@oddhead \let\@thefoot\@oddfoot
+ \let\@themargin\oddsidemargin
+ \else \let\@thehead\@evenhead
+ \let\@thefoot\@evenfoot \let\@themargin\evensidemargin
+ \fi\fi
+ \shipout
+ \vbox{\normalsize \baselineskip\z@ \lineskip\z@
+ \let\par\@@par %% 15 Sep 87
+ \vskip \topdist \moveright \rightdist
+ \vbox{\hrule\hbox{\vrule\kern 1.03\marsepsize\vbox{\vskip\topmargin
+ \setbox\@tempboxa
+ \vbox to\headheight{\vfil \hbox to\twidth
+ {\let\label\@gobble \let\index\@gobble
+ \@thehead}} %% 22 Feb 87
+ \dp\@tempboxa\z@
+ \box\@tempboxa
+ \vskip 0.84\headsep
+ \box\@outputbox
+ \baselineskip \footskip
+ \hbox to\textwidth{\let\label\@gobble
+ \let\index\@gobble %% 22 Feb 87
+ \@thefoot}\kern -\botdist \kern-\extradim}
+ \kern 1.1\marsepsize\vrule}
+ \hrule}}\global\@colht\theight
+ \endgroup\stepcounter{page}\let\firstmark\botmark}
+\makeatother
+}
diff --git a/obsolete/macros/latex209/contrib/tamueethesis/eethetitle.sty b/obsolete/macros/latex209/contrib/tamueethesis/eethetitle.sty
new file mode 100644
index 0000000000..b2a7097a12
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/tamueethesis/eethetitle.sty
@@ -0,0 +1,670 @@
+% EETITLEPAGE DOCUMENT-STYLE OPTION - Version 2.22 released 21 July 1993
+% EETITLEPAGE DOCUMENT-STYLE OPTION - Version 2.21 released 5 July 1991
+% EETITLEPAGE DOCUMENT-STYLE OPTION - Version 2.2 released 20 November 1990
+% EETITLEPAGE DOCUMENT-STYLE OPTION - Version 2.1 released 20 June 1989
+% FILE: eethetitle.sty
+% Modifications: 4-10-87 PEC, 12-1-88 RLO, 2-28-89 RLO
+% Fixed the centering problem of absone 7-4-91 Ken
+% Modify the approval page based on the 7/92 version of Thesis Manual,
+% 6-17-93, Wen-Lin Hsieh
+% THESIS modification
+% for LaTeX version 2.08
+% Copyright (C) 1985 by Leslie Lamport
+
+\def\type{Thesis} % Sets default document type to be a thesis
+\def\degree{MASTER OF SCIENCE} % Sets default degree to be a MS, 6/17/93
+\def\major{Electrical Engineering} % Sets default major to be ELEN, 6/17/93
+\def\maketitlepage#1#2#3#4#5{\begin{titlepage}
+ \let\footnotesize\small % Local definitions to make \thanks produce
+ \let\footnoterule\relax % \normalsize footnotes with no separating rule.
+ \setcounter{page}{0}
+ \null
+ \vfil
+ \vskip 5truept % To adjust centering.
+ \begin{center}
+ \vskip -2em % Adjust vertical position.
+ {\uppercase{#1} \par} % Set title in \normal size.
+ \vskip 4.5em % Vertical space after title. 6em --> 4.5em, 6/17/93
+ {\lineskip .75em % Author
+ \begin{tabular}[t]{c} A \type\\ by\\ \uppercase{#2}
+ \end{tabular}\par}
+ \vskip 5em % Vertical space after author.
+ {\singlespace Submitted to the Office of Graduate Studies of\\ Texas A\&M
+ University\\ in partial fulfillment of the requirements for the
+ degree of \\ \uppercase{#3}\smallskip}
+ \vskip 8em % Vertical space, 6-->8, 6/17/93
+ {#4 \par} % Date
+ \vskip 6.5em % Vertical space, 5-->6.5, 6/17/93
+ {Major Subject: #5}
+\end{center} \par
+\@thanks
+\vfil
+\null
+\end{titlepage}
+\setcounter{footnote}{0} % Footnotes start at zero again.
+\let\thanks\relax
+\gdef\@thanks{}\gdef\@author{}\gdef\@title{}\let\maketitlepage\relax}
+
+\newdimen\apprlineup
+\apprlineup 0pt
+\def\approvalone#1#2#3#4#5#6#7#8{\newpage
+\pagestyle{empty}
+\setcounter{page}{1}
+\null\vfill
+\vskip -3em % 6/17/1993
+\vspace*{\apprlineup} %%%%%%% To adjust cpproval line.
+\begin{center}
+ {\uppercase{#1} \par}
+ \vskip 1.5em % 5em-->1.5em, 6/17/93
+ {\lineskip .75em
+ \begin{tabular}[t]{c} A \type\\ by\\ \uppercase{#2}
+ \end{tabular}\par}
+ \vskip 2em % 6/17/93
+ {\singlespace Submitted to Texas A\&M University\\
+ in partial fulfillment of the requirements\\ for the
+ degree of \\ \degree}
+\end{center}
+\vskip .5em % 6/17/93
+\@@line{Approved as to style and content by:\hfil}
+\vskip .7truein
+{\singlespace
+\@@line{\vbox{\hrule height .7pt
+ \smallskip
+ \hbox to 2.5truein{\hss {#3}\hss}
+ \hbox to 2.5truein{\hss (Chair of Committee)\hss}}}\hfil
+\vskip .38truein
+\@@line{\vbox{\hrule height .7pt
+ \smallskip
+ \hbox to 2.5truein{\hss {#4}\hss}
+ \hbox to 2.5truein{\hss (Member)\hss}}\hfil
+\vbox{\hrule height .7pt
+ \smallskip
+ \hbox to 2.5truein{\hss {#5}\hss}
+ \hbox to 2.5truein{\hss (Member)\hss}}}
+\vskip .43truein
+\@@line{\vbox{\hrule height .7pt
+ \smallskip
+ \hbox to 2.5truein{\hss {#6}\hss}
+ \hbox to 2.5truein{\hss (Member)\hss}}\hfil
+\vbox{\hrule height .7pt
+ \smallskip
+ \hbox to 2.5truein{\hss {#7}\hss}
+ \hbox to 2.5truein{\hss (Head of Department)\hss}}}
+\vskip 2em % 6/17/93
+\centerline{#8}
+\vskip 2em % 6/17/93
+\centerline{Major Subject: \major}} % 6/17/93
+\vfill
+\newpage}
+
+\def\approvaltwo#1#2#3#4#5#6#7#8#9{\newpage
+\pagestyle{empty}
+\setcounter{page}{1}
+\null\vfill
+\vskip -3em % 6/17/93
+\vspace*{\apprlineup} %%%%%%% To adjust cpproval line.
+\begin{center}
+ {\uppercase{#1} \par}
+ \vskip 1.5em % 6/17/93
+ {\lineskip .75em
+ \begin{tabular}[t]{c} A \type\\ by\\ \uppercase{#2}
+ \end{tabular}\par}
+ \vskip 2em % 6/17/93
+ {\singlespace Submitted to Texas A\&M University\\
+ in partial fulfillment of the requirements\\ for the
+ degree of \\ \degree}
+\end{center}
+\vskip .5em % 6/17/93
+{Approved as to style and content by:\hfil}
+\vskip .7truein
+{\singlespace
+\@@line{\vbox{\hrule height .7pt
+ \smallskip
+ \hbox to 2.5truein{\hss {#3}\hss}
+ \hbox to 2.5truein{\hss (Chair of Committee)\hss}}\hfil
+\vbox{\hrule height .7pt
+ \smallskip
+ \hbox to 2.5truein{\hss {#4}\hss}
+ \hbox to 2.5truein{\hss (Member)\hss}}}
+\vskip .38truein
+\@@line{\vbox{\hrule height .7pt
+ \smallskip
+ \hbox to 2.5truein{\hss {#5}\hss}
+ \hbox to 2.5truein{\hss (Member)\hss}}\hfil
+\vbox{\hrule height .7pt
+ \smallskip
+ \hbox to 2.5truein{\hss {#6}\hss}
+ \hbox to 2.5truein{\hss (Member)\hss}}}
+\vskip .43truein
+\@@line{\vbox{\hrule height .7pt
+ \smallskip
+ \hbox to 2.5truein{\hss {#7}\hss}
+ \hbox to 2.5truein{\hss (Member)\hss}}\hfil
+\vbox{\hrule height .7pt
+ \smallskip
+ \hbox to 2.5truein{\hss {#8}\hss}
+ \hbox to 2.5truein{\hss (Head of Department)\hss}}}
+\vskip 2em % 6/17/93
+\centerline{#9}
+\vskip 2em % 6/17/93
+\centerline{Major Subject: \major}} % 6/17/93
+\vfill
+\newpage}
+
+\def\approvalthree#1#2#3#4#5#6#7#8{\newpage
+\pagestyle{empty}
+\setcounter{page}{1}
+\null\vfill
+\vskip -3em % 6/17/93
+\vspace*{\apprlineup} %%%%%%% To adjust cpproval line.
+\begin{center}
+ {\uppercase{#1} \par}
+ \vskip 1.5em % 6/17/93
+ {\lineskip .75em
+ \begin{tabular}[t]{c} A \type\\ by\\ \uppercase{#2}
+ \end{tabular}\par}
+ \vskip 2em % 6/17/93
+ {\singlespace Submitted to Texas A\&M University\\
+ in partial fulfillment of the requirements\\ for the
+ degree of \\ \degree}
+\end{center}
+\vskip .5em % 6/17/93
+{Approved as to style and content by:\hfil}
+\vskip .7truein
+{\singlespace
+%\@@line{\vbox{\hrule height .7pt
+% \smallskip
+% \hbox to 2.5truein{\hss {#3}\hss}
+% \hbox to 2.5truein{\hss (Co-Chair of Committee)\hss}}}\hfil
+%\vskip .38truein
+%\@@line{\vbox{\hrule height .7pt
+% \smallskip
+% \hbox to 2.5truein{\hss {#4}\hss}
+% \hbox to 2.5truein{\hss (Co-Chair of Committee)\hss}}\hfil
+%\vbox{\hrule height .7pt
+% \smallskip
+% \hbox to 2.5truein{\hss {#5}\hss}
+% \hbox to 2.5truein{\hss (Member)\hss}}}
+%\vskip .43truein
+%\@@line{\vbox{\hrule height .7pt
+% \smallskip
+% \hbox to 2.5truein{\hss {#6}\hss}
+% \hbox to 2.5truein{\hss (Member)\hss}}\hfil
+%\vbox{\hrule height .7pt
+% \smallskip
+% \hbox to 2.5truein{\hss {#7}\hss}
+% \hbox to 2.5truein{\hss (Head of Department)\hss}}}
+%\vskip .93truein
+%\centerline{#8}}
+%\vfill
+%\newpage}
+\@@line{\vbox{\hrule height .7pt
+ \smallskip
+ \hbox to 2.5truein{\hss {#3}\hss}
+ \hbox to 2.5truein{\hss (Co-Chair of Committee)\hss}}\hfil
+\vbox{\hrule height .7pt
+ \smallskip
+ \hbox to 2.5truein{\hss {#4}\hss}
+ \hbox to 2.5truein{\hss (Co-Chair of Committee)\hss}}}
+\vskip .38truein
+\@@line{\vbox{\hrule height .7pt
+ \smallskip
+ \hbox to 2.5truein{\hss {#5}\hss}
+ \hbox to 2.5truein{\hss (Member)\hss}}\hfil
+\vbox{\hrule height .7pt
+ \smallskip
+ \hbox to 2.5truein{\hss {#6}\hss}
+ \hbox to 2.5truein{\hss (Member)\hss}}}
+\vskip .43truein
+\@@line{%\vbox{
+ %\hbox to 2.5truein{}
+ %\hbox to 2.5truein{}}\hfil
+\vbox{\hrule height .7pt
+ \smallskip
+ \hbox to 2.5truein{\hss {#7}\hss}
+ \hbox to 2.5truein{\hss (Head of Department)\hss}}\hfil}
+ %\hbox to 2.5truein{\hss (Head of Department)\hss}}}
+\vskip 2em % 6/17/93
+\centerline{#8}
+\vskip 2em % 6/17/93
+\centerline{Major Subject: \major}} % 6/17/93
+\vfill
+\newpage}
+
+\def\approvalfour#1#2#3#4#5#6#7#8#9{\newpage
+\pagestyle{empty}
+\setcounter{page}{1}
+\null\vfill
+\vskip -3em % 6/17/93
+\vspace*{\apprlineup} %%%%%%% To adjust cpproval line.
+\begin{center}
+ {\uppercase{#1} \par}
+ \vskip 1.5em % 6/27/93
+ {\lineskip .75em
+ \begin{tabular}[t]{c} A \type\\ by\\ \uppercase{#2}
+ \end{tabular}\par}
+ \vskip 2em % 6/17/93
+ {\singlespace Submitted to Texas A\&M University\\
+ in partial fulfillment of the requirements\\ for the
+ degree of \\ \degree}
+\end{center}
+\vskip .5em % 6/17/93
+{Approved as to style and content by:\hfil}
+\vskip .7truein
+{\singlespace
+\@@line{\vbox{\hrule height .7pt
+ \smallskip
+ \hbox to 2.5truein{\hss {#3}\hss}
+ \hbox to 2.5truein{\hss (Co-Chair of Committee)\hss}}\hfil
+\vbox{\hrule height .7pt
+ \smallskip
+ \hbox to 2.5truein{\hss {#4}\hss}
+ \hbox to 2.5truein{\hss (Co-Chair of Committee)\hss}}}
+\vskip .38truein
+\@@line{\vbox{\hrule height .7pt
+ \smallskip
+ \hbox to 2.5truein{\hss {#5}\hss}
+ \hbox to 2.5truein{\hss (Member)\hss}}\hfil
+\vbox{\hrule height .7pt
+ \smallskip
+ \hbox to 2.5truein{\hss {#6}\hss}
+ \hbox to 2.5truein{\hss (Member)\hss}}}
+\vskip .43truein
+\@@line{\vbox{\hrule height .7pt
+ \smallskip
+ \hbox to 2.5truein{\hss {#7}\hss}
+ \hbox to 2.5truein{\hss (Member)\hss}}\hfil
+\vbox{\hrule height .7pt
+ \smallskip
+ \hbox to 2.5truein{\hss {#8}\hss}
+ \hbox to 2.5truein{\hss (Head of Department)\hss}}}
+\vskip 2em % 6/17/93
+\centerline{#9}
+\vskip 2em % 6/17/93
+\centerline{Major Subject: \major}}
+\vfill
+\newpage}
+
+\def\beginabs{\newpage\pagestyle{myheadings}\begingroup
+\pagenumbering{roman}
+\setcounter{page}{3}
+\null\vskip 2em\begin{center}}
+
+\def\endabs{\endgroup\newpage}
+
+%\long\def\absone#1#2#3#4#5#6#7{\beginabs
+%{ABSTRACT\\ \vskip 1em
+%#1\\ #2. (#3)\\ #4, B.S., #5\\ Chair of Advisory Committee: #6}
+%\vskip 1.5em
+%\end{center}
+%\indent #7
+%\endabs}
+%
+% Thesis mod
+%
+\long\def\absone#1#2#3#4#5#6{\beginabs
+{ABSTRACT\\ \vskip 1em
+#1. (#2)\\ #3, #4\\ Chair of Advisory Committee: #5}
+\vskip 1em
+\end{center}
+\hspace*{\parindent} #6
+\endabs}
+
+%%% The following revision causes some problem, therefore, we comment those new
+%%% revisions and recover the old stuff. ----- Ken 7-4-91
+%%%
+%%\long\def\absone#1#2#3#4#5#6{
+%
+% the problem is the ugly linebreaks involving the period and the end of
+% the title and the (DATE)
+%
+% the goal is to typeset "TITLE. (DATE)" without breaking ". (DATE)"
+% at any place across a line
+%
+% begin by setting the strings "TITLE." and "TITLE. (DATE)" into
+% temporary boxes.
+%
+%%\newsavebox\@tempboxb
+%%\newsavebox\@tempboxc
+%%\setbox\@tempboxb\hbox{#1. (#2)}
+%%\setbox\@tempboxc\hbox{#1.}
+%
+% next, make a crude estimate of how many lines TeX will use to set this.
+% this simplistic calculation ignores the effect of TeX glue and might
+% fail in borderline cases where the line is just a few points longer
+% or shorter than the hsize.
+%
+% estimate: #lines = ( width of box ) / ( current hsize )
+%
+%%\dimen0=\wd\@tempboxb \divide\dimen0 by \hsize
+%%\dimen2=\wd\@tempboxc \divide\dimen2 by \hsize
+%
+% if "TEXT. (DATE)" requires more lines than just "TEXT.", then we might
+% as well force a line break and typeset "TEXT.\\(DATE)" and not even
+% give TeX a chance to mess with ". (DATE)" If they look like the same
+% number of lines, set "TEXT. (DATE)" and hope for the best
+%
+%%\ifdim\dimen2<\dimen0
+%% \setbox\@tempboxb\hbox{#1.\\(#2)}
+%%\else
+%% \setbox\@tempboxb\hbox{#1. (#2)}
+%%\fi
+%
+% now back to the original abstract macro. this time, grab the text
+% from the \@tempboxb that we set above.
+%
+%%\beginabs
+%%{ABSTRACT\\ \vskip 1em
+%%\unhbox\@tempboxb\\ #3, #4\\ Chair of Advisory Committee: #5}
+%\vskip 1em
+%%\end{center}
+%%\hspace*{\parindent} #6
+%%\endabs}
+
+%\long\def\abstwo#1#2#3#4#5#6#7#8{\beginabs
+%{ABSTRACT\\ \vskip 1em
+%#1\\ #2. (#3)\\ #4, B.S., #5\\ \centerline{\hbox{\singlespace
+% Co--Chairs of Advisory Committee: \vtop{
+% \hbox{#6}
+% \hbox{#7}}}}}
+%\vskip 1.5em
+%\end{center}
+%\indent #8
+%\endabs}
+%
+% Thesis mod
+%
+\long\def\abstwo#1#2#3#4#5#6#7{\beginabs
+{ABSTRACT\\ \vskip 1em
+#1. (#2)\\ #3, #4\\ \centerline{\hbox{\singlespace
+ Co--Chairs of Advisory Committee: \vtop{
+ \hbox{#5}
+ \hbox{#6}}}}}
+\vskip 1em
+\end{center}
+\hspace*{\parindent} #7
+\endabs}
+
+\def\acknow{\newpage
+%\pagenumbering{roman}
+%\setcounter{page}{5}
+\vskip .2truein
+\centerline{ACKNOWLEDGMENTS}
+\indent}
+%\newpage}
+
+\def\dedicate#1{\newpage
+%\pagenumbering{roman}
+%\setcounter{page}{5}
+\null\vskip 7.5em
+\centerline{To #1}
+\newpage}
+
+% thesis mod - all of this next section is no longer needed in eethesis
+%\def\tocontchap{\newpage
+%\null\vskip 2em
+%\centerline{TABLE OF CONTENTS}
+%\vskip .25truein
+%\@@line{CHAPTER \hfil Page}
+%\vskip .2truein\singlespace}
+%
+%\def\tocchapcontinue{\newpage
+%\null\vskip 2em
+%\centerline{TABLE OF CONTENTS~~(Continued)}
+%\vskip .25truein
+%\@@line{CHAPTER \hfil Page}
+%\vskip .2truein\singlespace}
+%
+%\def\chapterno#1{\hbox to 0.45truein{\hfill #1}}
+%\def\sectionno#1{\hbox to 0.25truein{\hfill #1}}
+%\def\leaderfill{\leaders\hbox to 1em{\hss.\hss}\hfil}
+%\def\threeover{\hskip 1in}
+%\def\fourover{\hskip 1.4in}
+%\newcount\scount
+%\newcount\sscount
+%
+%\def\tochapone#1#2{\advance \scount by 1
+% \@@line{\chapterno{\uppercase\expandafter{\romannumeral\scount}}
+% ~~~~~~\uppercase{#1}\leaderfill
+% $#2$\kern 6pt}\bigskip\sscount=64}
+%
+%\def\tochaptwo#1#2#3{\advance \scount by 1
+% \@@line{\chapterno{\uppercase\expandafter{\romannumeral\scount}}
+% ~~~~~~\uppercase{#1}\hfil}
+% \@@line{\chapterno{}~~~~~~
+% \uppercase{#2}\leaderfill $#3$\kern 6 pt}\bigskip
+% \sscount=64}
+%
+%\def\tochapthree#1#2#3#4{\advance \scount by 1
+% \@@line{\chapterno{\uppercase\expandafter{\romannumeral\scount}}
+% ~~~~~~\uppercase{#1}\hfil}
+% \@@line{\chapterno{}~~~~~~~\uppercase{#2}\hfil}
+% \@@line{\chapterno{}~~~~~~~\uppercase{#3}
+% \leaderfill $#4$\kern 6 pt}\bigskip
+% \sscount=64}
+%
+%\def\tocrefvita#1#2{
+% \@@line{\chapterno{}
+% ~~~~~~\uppercase{#1}\leaderfill $#2$\kern 6 pt}\bigskip}
+%
+%\def\tocsubsectone#1#2{\advance \sscount by 1
+% \@@line{\threeover\sectionno{\char\sscount.}~~#1
+% \leaderfill $#2$\kern 6 pt}
+% \smallskip}
+%
+%\def\tocsubsectwo#1#2#3{\advance \sscount by 1
+% \@@line{\threeover\sectionno{\char\sscount.}~~#1\hfil}
+% \@@line{\threeover\sectionno{}~~{#2}\leaderfill $#3$\kern 6 pt}
+% \smallskip}
+%
+%\def\tocsubsecthree#1#2#3#4{\advance \sscount by 1
+% \@@line{\threeover\sectionno{\char\sscount.}~~#1\hfil}
+% \@@line{\threeover\sectionno{}~~{#2}\hfil}
+% \@@line{\threeover\sectionno{}~~{#3}\leaderfill $#4$\kern 6 pt}
+% \smallskip}
+%
+%\def\tocssectone#1#2{
+% \@@line{\fourover~~#1 \leaderfill $#2$\kern 6 pt}\smallskip}
+%
+%\def\tocssectwo#1#2#3{
+% \@@line{\fourover~~#1\hfil}
+% \@@line{\fourover~~#2 \leaderfill $#3$\kern 6 pt}\smallskip}
+%
+%\def\tocssecthree#1#2#3#4{
+% \@@line{\fourover~~#1\hfil}
+% \@@line{\fourover~~#2\hfil}
+% \@@line{\fourover~~#3 \leaderfill $#4$\kern 6 pt}\smallskip}
+%
+%\def\tocontsect{\newpage
+%\null\vskip 2em
+%\centerline{TABLE OF CONTENTS}
+%\vskip .25truein
+%\@@line {\hfil Page}
+%\vskip .2truein\singlespace}
+%\newcount\scount
+%
+%\def\tocsectcontinue{
+%\null\vskip 2em
+%\centerline{TABLE OF CONTENTS~~(Continued)}
+%\vskip .25truein
+%\@@line {\hfil Page}
+%\vskip .2truein\singlespace}
+%
+%\def\tocsectionone#1#2{\advance \scount by 1
+% \@@line{\chapterno{\uppercase\expandafter{\romannumeral\scount.}}
+% ~~~~~~\uppercase{#1}\leaderfill $#2$\kern 6 pt}\bigskip
+% \sscount=64}
+%
+%\def\tocsectiontwo#1#2#3{\advance \scount by 1
+% \@@line{\chapterno{\uppercase\expandafter{\romannumeral\scount.}}
+% ~~~~~~\uppercase{#1}\hfil}
+% \@@line{\chapterno{}~~~~~~~\uppercase{#2}
+% \leaderfill $#3$\kern 6 pt}\bigskip
+% \sscount=64}
+%
+%\def\tocsectionthree#1#2#3#4{\advance \scount by 1
+% \@@line{\chapterno{\uppercase\expandafter{\romannumeral\scount.}}
+% ~~~~~~\uppercase{#1}\hfil}
+% \@@line{\chapterno{}~~~~~~~\uppercase{#2}\hfil}
+% \@@line{\chapterno{}~~~~~~~\uppercase{#3}
+% \leaderfill $#4$\kern 6 pt}\bigskip
+% \sscount=64}
+%
+%\def\tabhead{\newpage
+%\null\vskip 2em
+%\centerline{LIST OF TABLES}
+%\bigskip
+%\@@line{~~Table \hfil Page}\medskip\singlespace}
+%
+%\def\tabheadcontinue{\newpage
+%\null\vskip 2em
+%\centerline{LIST OF TABLES~~(Continued)}
+%\bigskip
+%\@@line{~~Table \hfil Page}\medskip\singlespace}
+%
+%\newcount\tabcount
+%\def\tabno#1{\hbox to .5truein{\hfil #1}}
+%
+%\def\tableone#1#2{\advance \tabcount by 1
+% \@@line{\tabno{\uppercase\expandafter{\romannumeral\tabcount.}}
+% ~~~{#1}\leaderfill $#2$\kern 6 pt}\medskip}
+%
+%\def\tabletwo#1#2#3{\advance \tabcount by 1
+% \@@line{\tabno{\uppercase\expandafter{\romannumeral\tabcount.}}
+% ~~~{#1}\hfil}
+% \@@line{\tabno{}~~~~{#2}\leaderfill{#3}\kern 6 pt}\medskip}
+%
+%\def\fighead{\newpage
+%\null\vskip 2em
+%\centerline{LIST OF FIGURES}
+%\bigskip
+%\@@line{Figure \hfil Page}\medskip\singlespace}
+%
+%\def\figheadcontinue{\newpage
+%\null\vskip 2em
+%\centerline{LIST OF FIGURES~~(Continued)}
+%\bigskip
+%\@@line{Figure \hfil Page}\medskip\singlespace}
+%
+%\newcount\figcount
+%\def\figno{\hbox to .22truein{\hfil {$\the\figcount$}}}
+%
+%\def\figureone#1#2{\advance \figcount by 1
+% \@@line{\ \ {\figno}.~~~{#1}\leaderfill{#2}\kern6pt}\medskip}
+%
+%\def\figuretwo#1#2#3{\advance \figcount by 1
+% \@@line{\ \ {\figno}.~~~{#1}\hfill}
+% \@@line{\ \ {}~~~~~~~~{#2}\leaderfill{#3}\kern6pt}\medskip}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%\newcount\chaptercount
+%\newcount\sectioncount
+%\newcount\sectcount
+%\chaptercount=0
+%
+%\def\chapterone#1{\vfill\eject
+% \advance \chaptercount by 1
+% \centerline{
+% CHAPTER~~\uppercase\expandafter{\romannumeral\chaptercount}}
+% \bigskip
+% \centerline{\uppercase{#1}}
+% \nobreak\smallskip
+% \sectioncount=64}
+%
+%\def\chaptertwo#1#2{\vfill\eject
+% \advance \chaptercount by 1
+% \centerline{
+% CHAPTER~~\uppercase\expandafter{\romannumeral\chaptercount}}
+% \bigskip
+% \centerline{\uppercase{#1}}
+% \centerline{\uppercase{#2}}
+% \nobreak\smallskip
+% \sectioncount=64}
+%
+% % --- Note: sectioncount is initialized to the ---
+% % --- ACSII equivalent of the character 'A'. ---
+%
+%\sectcount=0
+%\def\sectiontwo#1#2{\vfill\eject
+% \advance \sectcount by 1
+% \centerline{
+% {\uppercase\expandafter{\romannumeral\sectcount}.}~~{\uppercase{#1}}}
+% \nobreak
+% \centerline{\uppercase{#2}}
+% \nobreak\bigskip
+% \sectioncount=64}
+%
+%\def\sectionone#1{\vfill\eject
+% \advance \sectcount by 1
+% \centerline{
+% {\uppercase\expandafter{\romannumeral\sectcount}.}~~{\uppercase{#1}}}
+% \nobreak\bigskip
+% \sectioncount=64}
+%
+%\def\myno#1{\hbox to 0.3truein{#1\hfill}}
+%\def\subsectwo#1#2{\advance \sectioncount by 1 \bigbreak\medskip\singlespace
+% \leftline{\myno{\char\sectioncount.}~~#1}
+% \nobreak
+% \leftline{\myno{}~~#2}
+% \nobreak\medskip\doublespace}
+%
+%\def\subsectone#1{\advance \sectioncount by 1 \bigbreak\medskip
+% \leftline{\myno{\char\sectioncount.}~~#1}
+% \nobreak\medskip}
+%
+%\def\gbigbreak{\par \ifdim\lastskip<\bigskipamount \removelastskip
+% \penalty-500\bigskip\fi}
+%
+%\def\ssectwo#1#2{\gbigbreak\medskip\goodbreak\singlespace
+% \centerline{#1}
+% \nobreak
+% \centerline{#2}
+% \nobreak\medskip\nobreak\doublespace}
+%
+%\def\ssectone#1{\gbigbreak\medskip\goodbreak
+% \centerline{#1}
+% \nobreak\medskip\nobreak}
+%
+%\def\appendix#1#2#3{\vfill\eject
+% \addcontentsline{toc}{appendix}{\null \hspace{3.5em}#1}
+% \centerline{\uppercase{#1}}
+% \bigskip
+% \centerline{\uppercase{#2}}
+% \centerline{\uppercase{#3}}
+% \nobreak\bigskip}
+
+%\def\eqmynum#1#2{$$#1\eqno({#2})$$\hspace{7truemm}}
+%
+%
+%\newcount\figurecount
+%\def\figpage#1#2{\singlespace %\pageinsert
+%\begin{figure}\vskip1pc %\endinsert
+%\advance \figurecount by 1
+%\centerline{{Fig.~$\the\figurecount$.}~~#1}
+%\centerline{#2}\endfigure %\endinsert
+%\doublespace}
+%
+%\newcount\figurecount
+%\def\fig#1#2{\singlespace
+%\advance \figurecount by 1
+%\centerline{{Fig.~$\the\figurecount$}~~#1}
+%\centerline{#2}}
+%
+%\newcount\tablecount
+%\def\tab#1#2#3{\singlespace
+%\advance \tablecount by 1
+%\centerline{TABLE~ \uppercase\expandafter{\romannumeral\tablecount.}}
+%\centerline{#1}
+%\centerline{#2}
+%\centerline{#3}
+%}
+%
+%\newcount\tablecount
+%\def\tablepage#1#2#3{\singlespace\pageinsert\topinsert\vskip1pc\endinsert
+%\advance \tablecount by 1
+%\centerline{TABLE~ \uppercase\expandafter{\romannumeral\tablecount.}}
+%\centerline{#1}
+%\centerline{#2}
+%\centerline{#3}
+%\endinsert}
diff --git a/obsolete/macros/latex209/contrib/tamueethesis/file.c b/obsolete/macros/latex209/contrib/tamueethesis/file.c
new file mode 100644
index 0000000000..daeef3d2e6
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/tamueethesis/file.c
@@ -0,0 +1,30 @@
+/**************************************************************/
+/* Filename: auto4.c by: Shiau Yan-Chyuan */
+/* */
+/* Usage: */
+/**************************************************************/
+
+#include <stdio.h>
+#include "malloc.h"
+
+#define LINE 121
+#define LOW 0.5
+#define MID 2.5
+#define UP 4.5
+
+typedef struct SOLUTION
+{
+ float rise_l,rise_m,rise_h,rise_r,rise_dt1,rise_dt2;
+ float fall_l,fall_m,fall_h,fall_f,fall_dt1,fall_dt2;
+ float pre_r_dt2,pre_f_dt2;
+ int flag_rl,flag_rm,flag_rh;
+ int flag_fl,flag_fm,flag_fh;
+} SX;
+
+struct SOLUTION sol[2];
+FILE *point_out,*point_abs,*fopen();
+char file_out[20],file_abs[20];
+float start_time=2.0e-09;
+/* char *sprintf(),*strcpy(),*fprintf(); */
+float fabs(),atof();
+int atoi();
diff --git a/obsolete/macros/latex209/contrib/tamueethesis/lists.tex b/obsolete/macros/latex209/contrib/tamueethesis/lists.tex
new file mode 100644
index 0000000000..13bf78408f
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/tamueethesis/lists.tex
@@ -0,0 +1,5 @@
+\pagestyle{headings}
+\setlength{\headheight}{36pt}
+\tableofcontents
+\listoftables
+\listoffigures
diff --git a/obsolete/macros/latex209/contrib/tamueethesis/manv4.ps b/obsolete/macros/latex209/contrib/tamueethesis/manv4.ps
new file mode 100644
index 0000000000..4e6702ce86
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/tamueethesis/manv4.ps
@@ -0,0 +1,3072 @@
+%!PS-Adobe-2.0
+%%Creator: dvips 5.516 Copyright 1986, 1993 Radical Eye Software
+%%Title: manv4.dvi
+%%CreationDate: Thu Jul 22 15:47:10 1993
+%%Pages: 59
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 612 792
+%%EndComments
+%DVIPSCommandLine: dvips manv4
+%DVIPSSource: TeX output 1993.07.22:1544
+%%BeginProcSet: tex.pro
+/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
+/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72
+mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1}
+ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
+isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div
+hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul
+TR matrix currentmatrix dup dup 4 get round 4 exch put dup dup 5 get
+round 5 exch put setmatrix}N /@landscape{/isls true N}B /@manualfeed{
+statusdict /manualfeed true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0
+0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{/nn 8 dict N nn
+begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N string /base X
+array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N end dup{/foo
+setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{/sf 1 N /fntrx
+FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]N df-tail}B /E{
+pop nn dup definefont setfont}B /ch-width{ch-data dup length 5 sub get}
+B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{128 ch-data dup
+length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub get 127 sub}B
+/ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data dup type
+/stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N /rc 0 N /gp
+0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup /base get 2
+index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0 ch-xoff
+ch-yoff ch-height sub ch-xoff ch-width add ch-yoff setcachedevice
+ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 add]{
+ch-image}imagemask restore}B /D{/cc X dup type /stringtype ne{]}if nn
+/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup length 1
+sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{cc 1 add D
+}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin 0 0
+moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul add
+.99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore showpage
+userdict /eop-hook known{eop-hook}if}N /@start{userdict /start-hook
+known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X
+/IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for
+65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0
+0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V
+{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7
+getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false}
+ifelse}{false}ifelse end{{gsave TR -.1 -.1 TR 1 1 scale rulex ruley
+false RMat{BDot}imagemask grestore}}{{gsave TR -.1 -.1 TR rulex ruley
+scale 1 1 false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave
+transform round exch round exch itransform moveto rulex 0 rlineto 0
+ruley neg rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta
+0 N /tail{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}
+B /c{-4 M}B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{
+3 M}B /k{4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p
+-1 w}B /q{p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{
+3 2 roll p a}B /bos{/SS save N}B /eos{SS restore}B end
+%%EndProcSet
+TeXDict begin 40258431 52099146 1000 300 300
+(/u4/test/eethesis/manv4.dvi) @start /Fa 1 51 df<0F8030E040708030C038E0
+384038003800700070006000C00180030006000C08080810183FF07FF0FFF00D157E9412
+>50 D E /Fb 1 83 df<000003FE00000000001FFFC0000000007FFFF000000001FFFFFC
+0000007FFFFFFF000001FFFFFFFF800003FFFFFFFFC00007FFFC01FFE00007FFF0007FF0
+000FFFE0001FF8000FFFE0000FFC000FFFE00007FC000FFFE00003FE000FFFE00001FE00
+07FFC00001FF0007FFC00000FF0003FF800000FF0001FF000000FF8001FE0000007F8001
+FE0000007F8003FE0000007F8003FC0000007F8003FC0000007F8003FC0000007F8003FC
+0000007F8003FC0000007F8003FC000000FF8003FC000000FF0003FC000000FF0003FC00
+0001FF0003FC000003FE0003FC000003FE0003FE000007FC0007FF00000FF80007FFC000
+1FF80007FFE0007FF00007FFFC03FFE00007FFFFFFFFC00007FFFFFFFF800007FFFFFFFF
+000007FFFFFFFC000007FBFFFFF0000007F9FFFF80000007F9FFFC00000007F8FFC00000
+000FF87FE00000000FF03FF00000000FF01FF80000000FF00FF80000000FF007FC000000
+0FF003FE0000000FF003FF0000000FF001FF8000000FF000FFC000001FF0007FE000003F
+F8003FF000007FFC001FF000007FFC000FFF8000FFFE0007FFE000FFFE0007FFF000FFFE
+0003FFF800FFFE0001FFF800FFFE0001FFFC007FFC0001FFFC007FFC0001FFFC003FF800
+01FFFC001FF00001FFFC0007C00000FFF80000000000FFF800000000007FF00000000000
+3FE000000000000F800031487BBF3A>82 D E /Fc 1 83 df<03F003E0000FFC0FF00018
+7E18F000301E20F000600F607000600FC07000E007C07800F007807F00F803803C007C03
+8030007C0380C0003E038380001E039FE0000E03FFF0000C0381F000180380F000300300
+7000200300700000030070000003007000000600700000060078000004007800000C0078
+000E10007C401F20003F807FC0003E00C780001C008300001800221D7F9B22>82
+D E /Fd 6 117 df<387CFEFEFE7C380000000000000000387CFEFEFE7C3807167C9510>
+58 D<FFF8001FFEFFFC001FFE07FC0000C007FE0000C006FF0000C0067F8000C0063FC0
+00C0061FE000C0060FE000C0060FF000C00607F800C00603FC00C00601FE00C00600FE00
+C00600FF00C006007F80C006003FC0C006001FE0C006000FF0C0060007F0C0060007F8C0
+060003FCC0060001FEC0060000FFC00600007FC00600007FC00600003FC00600001FC006
+00000FC006000007C006000003C006000003C0FFF00001C0FFF00000C027227EA12C>78
+D<00FE0007FF800F87C01E01E03E01F07C00F07C00F8FC00F8FC00F8FFFFF8FFFFF8FC00
+00FC0000FC00007C00007C00007E00003E00181F00300FC07003FFC000FF0015167E951A
+>101 D<FF07E000FF1FF8001F307C001F403C001F803E001F803E001F003E001F003E00
+1F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E00
+1F003E001F003E001F003E00FFE1FFC0FFE1FFC01A167E951F>110
+D<00FE0007FFC00F83E01E00F03E00F87C007C7C007C7C007CFC007EFC007EFC007EFC00
+7EFC007EFC007EFC007E7C007C7C007C3E00F81F01F00F83E007FFC000FE0017167E951C
+>I<0180000180000180000180000380000380000780000780000F80003F8000FFFF00FF
+FF000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F
+81800F81800F81800F81800F81800F830007C30003FE0000F80011207F9F16>116
+D E /Fe 39 122 df<0C1E3F3F1D02020204040810204080080F75A20F>39
+D<000F800030C000E06001C0700380700300700700700F00700E00701E00701E00701C00
+F03C00F03C00F03C00F07801E07801E07801E07801E0F003C0F003C0F003C0F00380E007
+80E00780E00700E00F00E00E00E01C00E01C00E0380060700030E0001F000014227AA019
+>48 D<0001000300030006001E002E03CE001C001C001C001C0038003800380038007000
+700070007000E000E000E000E001C001C001C001C003800380038003800780FFFC10217A
+A019>I<000FC000106000603800801800801C01001C02201E02101E04101E04101E0410
+1E08203C08203C0840380840780880F00700E00001C000030000060000180000200000C0
+000100000200000400100800301000202000605F80C063FFC040FF80807F00801E001722
+7CA019>I<0000030000000300000007000000070000000F0000000F0000001F0000002F
+0000002F0000004F0000004F800000878000008780000107800002078000020780000407
+80000407800008078000080780001007800030078000200780007FFF80004007C0008007
+C0008003C0010003C0030003C0020003C0040003C0040003C00C0003C03C0007C0FF003F
+FC1E237DA224>65 D<00FFFFF000000F003C00000F000E00000F000700001E000380001E
+000380001E0001C0001E0001C0003C0001C0003C0001E0003C0001E0003C0001E0007800
+01E000780001E000780001E000780001E000F00003C000F00003C000F00003C000F00003
+C001E000078001E000078001E000070001E0000F0003C0000E0003C0001C0003C0003C00
+03C00038000780007000078000E000078001C00007800700000F801C0000FFFFF0000023
+227DA125>68 D<00FFFFFF80000F000780000F000180000F000180001E000180001E0001
+80001E000100001E000100003C000100003C000100003C010100003C0100000078020000
+0078020000007806000000780E000000FFFC000000F00C000000F00C000000F00C000001
+E008000001E008000001E008040001E000080003C000080003C000080003C000100003C0
+00100007800020000780006000078000C000078001C0000F8007C000FFFFFF800021227D
+A121>I<00007F00800003808100000E00630000380027000070001F0000E0000E0001C0
+000E000380000E000700000E000F000004000E000004001E000004003C000004003C0000
+0800780000000078000000007800000000F000000000F000000000F000000000F0000000
+00F0003FFC00E00001E000E00001E000E00001E000E00003C000E00003C000F00003C000
+700003C0007000078000380007800018000F80001C0013800006002300000381C1000000
+FE000000212479A226>71 D<00FF800007FC000F80000F80000F80001780000F80001780
+001780002F000013C0002F000013C0004F000013C0008F000023C0009E000023C0011E00
+0023C0011E000023C0021E000043C0043C000043C0043C000043C0083C000041E0083C00
+0081E01078000081E02078000081E02078000081E04078000101E040F0000101E080F000
+0101E100F0000101E100F0000200F201E0000200F201E0000200F401E0000200F801E000
+0400F803C0000400F003C0000400F003C0000C00E003C0001E00C007C000FFC0C07FFC00
+2E227DA12C>77 D<00FF000FFC000F8001E0000F800180000FC000800013C001000013C0
+01000011E001000011E001000021E002000020F002000020F002000020F0020000407804
+000040780400004078040000403C040000803C080000803E080000801E080000801E0800
+01001F100001000F100001000F10000100079000020007A000020007A000020003E00002
+0003E000040003C000040001C000040001C0000C0001C0001E00008000FFC00080002622
+7DA124>I<0000FE0000078380000C00E0003800700070003800E0003801C0001C038000
+1C0700001C0F00001E1E00001E1C00001E3C00001E3C00001E7800001E7800001E780000
+1EF000003CF000003CF000003CF0000078F0000078E0000078E00000F0E00000F0E00001
+E0E00001C0F00003C0F00007807000070078000E0038001C001C0038000E00E000070380
+0001FC00001F2479A225>I<00FFFFE0000F0038000F001E000F000E001E0007001E0007
+001E0007001E0007003C000F003C000F003C000F003C001E0078001E0078003C00780078
+007800E000F003C000FFFE0000F0000000F0000001E0000001E0000001E0000001E00000
+03C0000003C0000003C0000003C00000078000000780000007800000078000000F800000
+FFF8000020227DA121>I<00FFFFC0000F0070000F003C000F001C001E000E001E000E00
+1E000F001E000F003C001E003C001E003C001E003C003C0078003800780070007801E000
+78078000FFFC0000F00E0000F0070000F0038001E003C001E003C001E003C001E003C003
+C0078003C0078003C0078003C0078007800F0007800F0107800F01078007020F800702FF
+F8038C000000F020237DA124>82 D<0001F020000E0C40001802C0003001C0006001C000
+E0018000C0018001C0018001C0018003C0010003C0010003C0000003C0000003E0000001
+F8000001FF000000FFE000007FF000001FF8000003FC0000007C0000003C0000001E0000
+001E0000001E0020001C0020001C0020001C002000180060003800600030007000600070
+00C000C8018000C607000081FC00001B247DA21B>I<1FFFFFF81E03C0381803C0183003
+C01820078018200780184007801040078010400F0010800F0010800F0010000F0000001E
+0000001E0000001E0000001E0000003C0000003C0000003C0000003C0000007800000078
+0000007800000078000000F0000000F0000000F0000000F0000001E0000001E0000001E0
+000001E0000003E00000FFFF00001D2277A123>I<3FFE03FF03C0007803C0006003C000
+20078000400780004007800040078000400F0000800F0000800F0000800F0000801E0001
+001E0001001E0001001E0001003C0002003C0002003C0002003C00020078000400780004
+00780004007800040070000800F0000800F0001000700010007000200070004000300040
+0038018000180200000E0C000003F00000202377A124>I<FFF001FF1F8000780F000060
+0F0000600F0000400F0000800F0000800F0001000F0003000F0002000F8004000F800400
+078008000780080007801000078020000780200007804000078040000780800007810000
+07C1000003C2000003C2000003C4000003C8000003C8000003D0000003D0000003E00000
+03C0000003C00000038000000180000001000000202376A124>I<007FF81FF8000FC007
+C000078003000007C002000003C004000003C008000003E010000001E030000001E02000
+0001F040000000F080000000F100000000FA000000007C000000007C000000007C000000
+003C000000003C000000007E000000009E000000011E000000031F000000060F00000004
+0F000000080F80000010078000002007C000004007C00000C003C000018003E000010001
+E000070001E0001F0003F000FFC01FFE0025227EA124>88 D<00F8C00185C00705C00E03
+800E03801C03803C0380380700780700780700780700F00E00F00E00F00E00F00E10F01C
+20701C20703C20305C40308C400F078014157B9419>97 D<03C03F800380038003800700
+0700070007000E000E000E000E001C001CF81D0C1E0E3C0638073807380F700F700F700F
+700FE01EE01EE01EE03CE038E038607060E031C01F0010237BA216>I<007E0001C10003
+01800703800E07801C07803C0000380000780000780000780000F00000F00000F00000F0
+0000F00100700100700200300C001830000FC00011157B9416>I<00003C0003F8000038
+0000380000380000700000700000700000700000E00000E00000E00000E00001C000F9C0
+0185C00705C00E03800E03801C03803C0380380700780700780700780700F00E00F00E00
+F00E00F00E10F01C20701C20703C20305C40308C400F078016237BA219>I<00F803840E
+021C023C0238027804F018FFE0F000F000E000E000E000E000E002E0026004701830600F
+800F157A9416>I<00003E0000470000CF00018F00018600038000038000038000070000
+0700000700000700000700000E0000FFF0000E00000E00000E00001C00001C00001C0000
+1C00001C0000380000380000380000380000380000700000700000700000700000700000
+E00000E00000E00000E00000C00001C00001C000718000F18000F300006200003C000018
+2D82A20F>I<001F180030B800E0B801C07001C0700380700780700700E00F00E00F00E0
+0F00E01E01C01E01C01E01C01E01C01E03800E03800E0780060B8006170001E700000700
+000700000E00000E00000E00701C00F01800F0300060E0003F8000151F7E9416>I<00F0
+000FE00000E00000E00000E00001C00001C00001C00001C0000380000380000380000380
+00070000071F0007218007C0C00F00E00F00E00E00E00E00E01C01C01C01C01C01C01C01
+C0380380380380380380380704700708700E08700E10700610E006206003C016237DA219
+>I<00C001E001C001C0000000000000000000000000000000001C002300430043008700
+870087000E000E001C001C001C00380038003840708070807080710032001C000C217BA0
+0F>I<00F0000FE00000E00000E00000E00001C00001C00001C00001C000038000038000
+0380000380000700000701E0070210070C700E10F00E10F00E20600E40001D80001E0000
+1FC0001C7000383800383800381C00381C20703840703840703840701880E01880600F00
+14237DA216>107 D<01E01FC001C001C001C0038003800380038007000700070007000E
+000E000E000E001C001C001C001C0038003800380038007000700070007100E200E200E2
+00E200640038000B237CA20C>I<1C0F80F8002610C10C00476066060087807807008780
+780700870070070087007007000E00E00E000E00E00E000E00E00E000E00E00E001C01C0
+1C001C01C01C001C01C01C001C01C0382038038038403803807040380380708038038030
+8070070031003003001E0024157B9428>I<1C0F002631C04740C08780E08780E08700E0
+8700E00E01C00E01C00E01C00E01C01C03801C03801C03801C0704380708380E08380E10
+3806107006203003C017157B941B>I<007E0001C3000381800701C00E01C01C01E03C01
+E03801E07801E07801E07801E0F003C0F003C0F00380F00780700700700E00700C003018
+0018700007C00013157B9419>I<01C1F002621804741C08780C08700E08700E08701E00
+E01E00E01E00E01E00E01E01C03C01C03C01C03C01C07803807003807003C0E003C1C007
+2380071E000700000700000E00000E00000E00000E00001C00001C00001C0000FFC00017
+1F7F9419>I<1C1F002620804741C08783C08703C08701808700000E00000E00000E0000
+0E00001C00001C00001C00001C000038000038000038000038000070000030000013157B
+9415>114 D<00FC000183000200800401800C03800C03000C00000F00000FF00007FC00
+03FE00003E00000F00000700700700F00600F00600E004004008002030001FC00011157D
+9414>I<00C001C001C001C001C003800380038003800700FFF8070007000E000E000E00
+0E001C001C001C001C003800380038003810702070207040708031001E000D1F7C9E10>
+I<1E00602300E04380E04381C08381C08701C08701C00703800E03800E03800E03801C07
+001C07001C07001C07081C0E10180E101C0E101C1E200C262007C3C016157B941A>I<1E
+03802307C04387C04383C08381C08700C08700C00700800E00800E00800E00801C01001C
+01001C01001C02001C02001C04001C08001C08000C300003C00013157B9416>I<1E0030
+2300704380704380E08380E08700E08700E00701C00E01C00E01C00E01C01C03801C0380
+1C03801C03801C07001C07001C07001C0F000C3E0003CE00000E00000E00001C00601C00
+F03800F03000E0600080C0004380003E0000151F7B9418>121 D
+E /Ff 32 122 df<0001E000000006100000000C100000001C1000000018100000003810
+000000381000000030100000003020000000702000000070400000007080000000710000
+00007200000000720000000074007FE00038001F000038000E00007800080000B8000800
+013C001000021C002000041C0040000C1E004000180E008000380F010000780702000070
+07840000F003840000F003C80000F001D00100F001E00100F000E002007801F006003802
+380C001C1C1C180007E007E00023257DA326>38 D<060F1F1F0E00000000000000000000
+003078F8787008157C940E>58 D<0000040000000006000000000E000000001E00000000
+1E000000003E000000003F000000004F000000004F000000008F000000008F000000010F
+000000010780000002078000000207800000040780000004078000000807C000000803C0
+00001003C000001003C000002003C000003FFFE000004001E000004001E000008001E000
+008001E000010001E000010000F000020000F000060000F000040000F0000C0000F0003E
+0001F800FF800FFF8021237EA225>65 D<0001FC02000F0306003C008C0070005C00E000
+3C01C0003C0380001C0700001C0F0000181E0000181E0000083E0000083C0000087C0000
+087C000000F8000000F8000000F8000000F8000000F8000000F0000000F0000000F00000
+00F0000020F0000020F0000040F80000407800004078000080380001003C0001001C0002
+000E000C000700100001C0E000003F00001F247AA223>67 D<03FFFFC000003E00F00000
+3C003C00003C001E00003C000E00003C000F00003C000780007800078000780007800078
+0007C000780003C000780003C000780007C000F00007C000F00007C000F00007C000F000
+07C000F00007C000F00007C001E0000F8001E0000F8001E0000F8001E0000F0001E0001F
+0001E0001E0003C0001E0003C0003C0003C000780003C000700003C000E00003C001C000
+078007800007C01E0000FFFFF8000022227EA125>I<03FFFFFF003E001F003C000E003C
+0006003C0002003C0002003C000200780002007800020078000200780202007802000078
+060000F0040000F0040000F01C0000FFFC0000F01C0000F00C0001E0080001E0080001E0
+080001E0080201E0000401E0000403C0000403C0000803C0000803C0001803C0001003C0
+0030078000F007C003E0FFFFFFE020227EA121>I<03FFFFFF003E001F003C000E003C00
+06003C0002003C0002003C00020078000200780002007800020078020200780200007806
+0000F0040000F0040000F01C0000FFFC0000F01C0000F00C0001E0080001E0080001E008
+0001E0080001E0000001E0000003C0000003C0000003C0000003C0000003C0000003C000
+0007C0000007C00000FFFE000020227EA120>I<03FFF0003E00003C00003C00003C0000
+3C00003C0000780000780000780000780000780000780000F00000F00000F00000F00000
+F00000F00001E00001E00001E00001E00001E00001E00003C00003C00003C00003C00003
+C00003C00007800007C000FFFC0014227EA112>73 D<03FE00000FF8003E00001F80002F
+00001F00002F00002F00002F00002F00002F00004F00002F00004F00004780009E000047
+80009E00004780011E00004780011E00004780021E000043C0041E000083C0043C000083
+C0083C000083C0083C000083C0103C000081E0103C000081E0203C000101E02078000101
+E04078000101E04078000100F08078000100F08078000100F10078000200F100F0000200
+F200F00002007C00F00002007C00F00002007800F00006007800F00006007001E0001F00
+3001F000FFE0203FFF002D227EA12D>77 D<03FFFFC0003E00F0003C0078003C003C003C
+003E003C001E003C003E0078003E0078003E0078003E0078003E0078003C0078007C00F0
+007800F000F000F001E000F0078000FFFE0000F0000001E0000001E0000001E0000001E0
+000001E0000001E0000003C0000003C0000003C0000003C0000003C0000003C000000780
+000007C00000FFFC00001F227EA121>80 D<000FC0800030318000C00B00018007000380
+07000300030007000300070003000E0002000E0002000F0002000F0000000F0000000F80
+000007E0000007FE000003FFC00001FFE000007FF000000FF8000000F800000078000000
+3C0000003C0000003C0020003C0040003800400038004000380060003000600070006000
+6000F000C000E8018000C607000081FC000019247DA21B>83 D<1FFFFFFE3C03E03E3803
+C00C3003C0042003C0046003C0044003C00440078004C007800480078004800780040007
+800000078000000F0000000F0000000F0000000F0000000F0000000F0000001E0000001E
+0000001E0000001E0000001E0000001E0000003C0000003C0000003C0000003C0000003C
+0000003C0000007C000000FC00003FFFF0001F227AA123>I<03FFE01FF8003F800FC000
+1F000700001F000600000F000400000F80080000078010000007C020000003C060000003
+E040000001E080000001F100000000F200000000FC000000007C000000007C000000003C
+000000003E000000005E000000009F000000010F000000030F80000002078000000407C0
+00000803C000001003E000002001E000006001F000004000F000008000F8000100007800
+0300007C001F8000FC00FFE007FFC025227FA125>88 D<03FC000606000F03000F038006
+01800001C0000380000380007F8003E3800F03801C0380380700780700F00708F00708F0
+0F08F00F08F017107867A01F83C015157D9418>97 D<0780003F80000700000700000700
+000700000700000700000E00000E00000E00000E00000E00000E00001C3F001CC1801D00
+C01E00601C00701C00703800783800783800783800783800783800787000F07000F07000
+E07001E07001C0700380E80700C61C0081F00015237BA21B>I<00FF000381C00603C00C
+03C01C0180380000780000700000F00000F00000F00000F00000F00000E00000F00000F0
+00807001007001003806001C180007E00012157C9416>I<00FE000383800701C00C00E0
+1C00E03800E07800E07000E0FFFFE0F00000F00000F00000F00000E00000E00000F00040
+7000803000801803000E0C0003F00013157D9416>101 D<0003E0000E30001C700038F0
+00307000700000700000700000E00000E00000E00000E00000E00000E0003FFE0001C000
+01C00001C00001C00001C000038000038000038000038000038000038000070000070000
+0700000700000700000700000E00000F0000FFF00014237FA20F>I<00000780001F8880
+0070D18000E0E18001C0700003C0700003C070000780F0000780F0000780F0000780E000
+0381E0000181C00002C30000027E00000400000004000000040000000600000007FF8000
+07FFE00007FFF0001C007800300018006000180060001800C0001800C0001800C0003000
+600060003000C0001C07800003FC00001921809518>I<00780003F80000700000700000
+700000700000700000700000E00000E00000E00000E00000E00000E00001C3F001CC1801
+D00C01E00E01E00E01C00E03C01C03801C03801C03801C03801C03801C07003807003807
+00380700380700380700380E00700F0078FFE7FF18237FA21B>I<007000F001F000F000
+E00000000000000000000000000000000001C00FC001C001C001C001C003800380038003
+80038003800700070007000700070007000E000F00FFE00C227FA10E>I<0078000003F8
+000000700000007000000070000000700000007000000070000000E0000000E0000000E0
+000000E0000000E0000000E0000001C07FC001C03E0001C0380001C0300001C0400001C0
+80000383000003840000038E000003BE000003CF00000387000007078000070380000701
+C0000701C0000700E0000700F0000E00F0000F00F800FFE3FE001A237FA21A>107
+D<007803F800700070007000700070007000E000E000E000E000E000E001C001C001C001
+C001C001C00380038003800380038003800700070007000700070007000E000F00FFE00D
+237FA20E>I<01C1F807E01FC60C183001D80E603801E007801C01E007801C01C007001C
+03C00F003803800E003803800E003803800E003803800E003803800E003807001C007007
+001C007007001C007007001C007007001C007007001C00700E003800E00F003C00F0FFE3
+FF8FFE27157F942A>I<01C3F01FCC1801D00C01E00E01E00E01C00E03C01C03801C0380
+1C03801C03801C03801C0700380700380700380700380700380700380E00700F0078FFE7
+FF18157F941B>I<007E000383800600C00C00E01C0070380070780078700078F00078F0
+0078F00078F00078E000F0E000F0E000E0F001E07001C07003803807001C1C0007F00015
+157D9418>I<00E1F8000FE60C0000E8060000F0070000E0038000E0038001C003C001C0
+03C001C003C001C003C001C003C001C003C003800780038007800380070003800F000380
+1E0003801C00074038000730E000070F80000700000007000000070000000E0000000E00
+00000E0000000E0000000E0000001E000000FFC000001A1F80941B>I<01C7C01FC8E001
+D1E001E1E001E0C001C00003C00003800003800003800003800003800007000007000007
+00000700000700000700000E00000F0000FFF00013157F9413>114
+D<01F906070C0318031801180118021C001FE00FF807FC007E000E400640064006600660
+0CE008D83087C010157E9413>I<008000800080018001000300030007000F001F00FFF8
+0E000E000E000E000E001C001C001C001C001C001C003810381038103810381038203820
+1C4007800D1F7C9E13>I<0E0070FE07F00E00F00E00700E00700E00701C00E01C00E01C
+00E01C00E01C00E01C00E03801C03801C03801C03801C03803C03805C0380B801C13C007
+E3F815157C941B>I<0FFC0FE001E0078000E0030000E0020000E0040000E00400007008
+0000700800007010000070300000782000003840000038400000388000003C8000001D00
+00001D0000001E0000001C0000000C000000080000000800000010000000100000002000
+0000400000F0400000F0800000F1000000C20000003C0000001B1F80941A>121
+D E /Fg 88 127 df<701CF01EF01EF01EF01EF01EF01EF01E701C701C701C701C701C60
+0C0F0E7B9D1A>34 D<01818003C3C003C3C003C3C003C3C003C3C003C3C07FFFF0FFFFF8
+FFFFF8FFFFF80787800787800787800F8F800F0F000F0F000F0F000F0F00FFFFF8FFFFF8
+FFFFF87FFFF01E1E001E1E001E1E001E1E001E1E001E1E000C0C00151E7E9D1A>I<0060
+0000E00000E00000E00000E00003F8000FFE001FFF803CE7C078E1C070E0E0E0E0E0E0E1
+E0E0E1E0E0E0C070E00078E0003FE0001FF00007FC0000FF0000EF8000E3C000E1C000E0
+E0F0E0E0F0E0E0F0E0E0E0E0E070E1C078E3C03CEF801FFF000FFE0003F00000E00000E0
+0000E00000600013277DA21A>I<1800C03C01E07E01E07E03E0E703C0E703C0E707C0E7
+0780E70F80E70F00E70F007E1F007E1E003C1E00183E00003C00007C0000780000780000
+F80000F00000F00001F00001E00003E00003C00003C0C007C3F00783F00787380F87380F
+07381F07381E07381E07383E07383C03F03C03F01800C015277EA21A>I<00E00003F000
+07F8000738000E1C000E1C000E1C000E1C000E38000E39FC0E71FC07F1FC07E1C007C1C0
+0781C00783800F83801F83803DC70079E70070EE00E07E00E07E00E03C08E03C1CF07E1C
+70FF1C3FE7F83FC3F80F00E0161E7F9D1A>I<183C3E1E0E0E0E0E0E1C3C38F0F0C0070F
+779D1A>I<0038007800F001E003C007800F000E001C001C0038003800700070007000E0
+00E000E000E000E000E000E000E000E000E000700070007000380038001C001C000E000F
+00078003C001E000F8007800380D2878A21A>I<6000F00078003C001E000F0007800380
+01C001C000E000E000700070007000380038003800380038003800380038003800380070
+0070007000E000E001C001C0038007800F001E003C007800F00060000D287CA21A>I<00
+E00000E00000E00000E00040E040F0E1E0F8E3E07EEFC01FFF0007FC0003F80007FC001F
+FF007EEFC0F8E3E0F0E1E040E04000E00000E00000E00000E00013157D991A>I<003000
+0078000078000078000078000078000078000078000078007FFFF0FFFFF8FFFFF87FFFF0
+00780000780000780000780000780000780000780000780000300015167E991A>I<183E
+7E7F3F1F070E0E1CFCF8E0080D77851A>I<7FFFC0FFFFE0FFFFE07FFFC013047D901A>I<
+3078FCFC7830060676851A>I<0000C00001E00001E00003E00003C00007C0000780000F
+80000F00000F00001F00001E00003E00003C00007C0000780000780000F80000F00001F0
+0001E00003E00003C00003C00007C0000780000F80000F00001F00001E00001E00003E00
+003C00007C0000780000F80000F00000F0000060000013277DA21A>I<01F00007FC000F
+FE001F1F001C07003803803803807001C07001C07001C0E000E0E000E0E000E0E000E0E0
+00E0E000E0E000E0E000E0E000E0F001E07001C07001C07803C03803803C07801C07001F
+1F000FFE0007FC0001F000131E7D9D1A>I<00C001C001C003C007C00FC07FC0FDC071C0
+01C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C0
+7FFF7FFF7FFF101E7B9D1A>I<03F0000FFC001FFF003C0F807803C07001C0E000E0F000
+E0F000E06000E00000E00000E00001C00001C0000380000780000F00000E00003C00007C
+0000F00001E00003C0000780000F00001E00E03C00E07FFFE0FFFFE07FFFE0131E7D9D1A
+>I<01FC0007FF001FFF801E03C03C01C03C00E03C00E00000E00000E00001C00003C000
+078001FF0001FF0001FFC00003E00000F0000070000078000038000038600038F00038F0
+0078E000707000F07E03E03FFFC00FFF0001FC00151E7E9D1A>I<000F80001F80003B80
+003B8000738000F38000E38001C38003C3800383800783800F03800E03801E03803C0380
+380380780380F00380FFFFFEFFFFFEFFFFFE000380000380000380000380000380000380
+003FF8007FFC003FF8171E7F9D1A>I<3FFFC07FFFC07FFFC07000007000007000007000
+0070000070000070000070000071F8007FFE007FFF007E07807803C03001C00001C00000
+E00000E00000E06000E0F000E0F001C0E001C07003807C0F803FFF000FFC0003F000131E
+7D9D1A>I<007E0001FF8003FFC00781E00F01E01E01E03C00C038000070000070000070
+0000E1F800E7FE00FFFF00FE0780F803C0F001C0F000E0F000E0E000E0F000E07000E070
+00E07001C03801C03C03801E0F800FFF0007FC0001F000131E7D9D1A>I<E00000FFFFF8
+FFFFF8FFFFF0E000E0E001C00003C0000780000F00000E00001C00001C00003800003800
+00700000700000E00000E00000E00001C00001C00001C00001C000038000038000038000
+038000038000038000038000038000151F7E9E1A>I<01FC0007FF001FFFC01F07C03C01
+E07800F07000707000707000707800F03800E01E03C00FFF8003FE0007FF001F8FC03C01
+E07800F0700070E00038E00038E00038E00038F000787000707800F03E03E01FFFC007FF
+0001FC00151E7E9D1A>I<01F00007FC001FFE003E0F003807807003807001C0E001C0E0
+01C0E001E0E000E0E000E0E001E07001E07803E03C0FE01FFFE00FFCE003F0E00001C000
+01C00001C0000380600380F00700F00F00F03E007FFC003FF0000FC000131E7D9D1A>I<
+3078FCFC78300000000000000000003078FCFC7830061576941A>I<183C7E7E3C180000
+00000000000000183C7E7E3E1E0E0E1C3CF8F0C0071C77941A>I<0000C00003E00007E0
+000FC0003F80007E0000FC0003F80007E0000FC0003F80007E0000FC0000FC00007E0000
+3F80000FC00007E00003F80000FC00007E00003F80000FC00007E00003E00000C0131A7D
+9B1A>I<7FFFF0FFFFF8FFFFF87FFFF00000000000000000000000007FFFF0FFFFF8FFFF
+F87FFFF0150C7E941A>I<600000F80000FC00007E00003F80000FC00007E00003F80000
+FC00007E00003F80000FC00007E00007E0000FC0003F80007E0000FC0003F80007E0000F
+C0003F80007E0000FC0000F80000600000131A7D9B1A>I<003E0001FF8003FFC007C1E0
+0F00E01E0F703C3FF0387FF07070F870E07870E078E1C038E1C038E1C038E1C038E1C038
+E1C038E1C038E1C03870E07070E0707070E0387FE03C3FC01E0F000F003807C0F803FFF0
+01FFE0003F00151E7E9D1A>64 D<003800007C00007C00006C0000EE0000EE0000EE0000
+C60000C60001C70001C70001C70001C7000383800383800383800383800701C00701C007
+FFC007FFC00FFFE00E00E00E00E00E00E00E00E01C00707F01FCFF83FE7F01FC171E7F9D
+1A>I<FFFE00FFFF80FFFFC01C03E01C00E01C00F01C00701C00701C00701C00701C00E0
+1C01E01C07C01FFF801FFF801FFFC01C01E01C00F01C00701C00381C00381C00381C0038
+1C00381C00781C00F01C01F0FFFFE0FFFFC0FFFF00151E7E9D1A>I<007C3801FF3807FF
+F80F83F81E00F81C0078380078380038700038700038700000E00000E00000E00000E000
+00E00000E00000E00000E000007000007000387000383800383800381C00701E00F00F83
+E007FFC001FF80007C00151E7E9D1A>I<7FFE00FFFF007FFF801C07C01C01E01C00F01C
+00701C00781C00381C00381C003C1C001C1C001C1C001C1C001C1C001C1C001C1C001C1C
+001C1C003C1C00381C00381C00781C00701C00F01C01E01C07C07FFFC0FFFF007FFE0016
+1E7F9D1A>I<FFFFF8FFFFF8FFFFF81C00381C00381C00381C00381C00001C00001C0000
+1C0E001C0E001C0E001FFE001FFE001FFE001C0E001C0E001C0E001C00001C00001C0000
+1C001C1C001C1C001C1C001C1C001CFFFFFCFFFFFCFFFFFC161E7E9D1A>I<7FFFFCFFFF
+FC7FFFFC0E001C0E001C0E001C0E001C0E00000E00000E00000E03800E03800E03800FFF
+800FFF800FFF800E03800E03800E03800E00000E00000E00000E00000E00000E00000E00
+000E00007FE000FFE0007FE000161E7F9D1A>I<00F8E003FEE007FFE00F07E01E03E03C
+01E03800E07000E07000E07000E0E00000E00000E00000E00000E00000E00000E00FF8E0
+0FF8E00FF8E000E07000E07000E07001E03801E03C03E01E03E00F07E007FFE003FEE000
+F8E0151E7E9D1A>I<FF83FEFF83FEFF83FE1C00701C00701C00701C00701C00701C0070
+1C00701C00701C00701C00701FFFF01FFFF01FFFF01C00701C00701C00701C00701C0070
+1C00701C00701C00701C00701C00701C0070FF83FEFF83FEFF83FE171E7F9D1A>I<FFFF
+80FFFF80FFFF8001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0
+0001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0
+0001C00001C000FFFF80FFFF80FFFF80111E7C9D1A>I<01FFC003FFC001FFC0000E0000
+0E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0000
+0E00000E00000E00000E00000E00000E00000E00600E00F00E00F01E00F03C007FF8003F
+F0000FC000121E7C9D1A>I<7F03F8FF87FC7F03F81C01E01C03C01C03801C07001C0F00
+1C1E001C1C001C38001C78001CF0001CF8001DF8001FDC001F9C001F0E001E0F001E0700
+1C07801C03801C01C01C01C01C00E01C00E01C00707F00FCFF81FE7F00FC171E7F9D1A>
+I<7FE000FFF0007FE0000E00000E00000E00000E00000E00000E00000E00000E00000E00
+000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E001C0E00
+1C0E001C0E001C0E001C7FFFFCFFFFFC7FFFFC161E7F9D1A>I<7E003F00FF007F807F00
+7F001D80DC001D80DC001D80DC001DC1DC001DC1DC001CC19C001CC19C001CE39C001CE3
+9C001C631C001C771C001C771C001C361C001C361C001C3E1C001C1C1C001C1C1C001C00
+1C001C001C001C001C001C001C001C001C001C001C001C001C007F007F00FF80FF807F00
+7F00191E809D1A>I<FE03FEFF03FEFF03FE1D80701D80701DC0701CC0701CC0701CE070
+1CE0701C60701C70701C70701C30701C38701C38701C18701C1C701C1C701C0C701C0E70
+1C0E701C06701C06701C07701C03701C0370FF81F0FF81F0FF80F0171E7F9D1A>I<0FFE
+003FFF807FFFC07C07C07001C0F001E0E000E0E000E0E000E0E000E0E000E0E000E0E000
+E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0F001E0F001
+E07001C07C07C07FFFC03FFF800FFE00131E7D9D1A>I<FFFE00FFFF80FFFFC01C03E01C
+00F01C00701C00781C00381C00381C00381C00381C00781C00701C00F01C03E01FFFC01F
+FF801FFE001C00001C00001C00001C00001C00001C00001C00001C00001C0000FF8000FF
+8000FF8000151E7E9D1A>I<FFFC00FFFF00FFFF801C07C01C01E01C00F01C00701C0070
+1C00701C00701C00F01C01E01C07C01FFF801FFF001FFF801C07C01C01C01C00E01C00E0
+1C00E01C00E01C00E01C00E21C00E71C00E71C00E7FF807EFF807EFF8038181E7F9D1A>
+82 D<03F1C00FFDC03FFFC07C0FC07003C0E003C0E001C0E001C0E001C0E00000700000
+7800003F00001FF00007FE0000FF00000F800003C00001C00000E00000E06000E0E000E0
+E000E0E001C0F001C0FC0780FFFF80EFFE00E3F800131E7D9D1A>I<7FFFFEFFFFFEFFFF
+FEE0380EE0380EE0380EE0380E0038000038000038000038000038000038000038000038
+000038000038000038000038000038000038000038000038000038000038000038000038
+0003FF8003FF8003FF80171E7F9D1A>I<FF83FEFF83FEFF83FE1C00701C00701C00701C
+00701C00701C00701C00701C00701C00701C00701C00701C00701C00701C00701C00701C
+00701C00701C00701C00701C00700E00E00E00E00701C00783C003FF8001FF00007C0017
+1E7F9D1A>I<FF01FEFF01FEFF01FE1C00701C00701C00701E00F00E00E00E00E00E00E0
+0701C00701C00701C00701C003838003838003838003838001C70001C70001C70001C700
+00C60000EE0000EE0000EE00006C00007C00007C00003800171E7F9D1A>I<FE00FEFF01
+FEFE00FE70001C78003C380038380038380038380038380038380038380038387C381C7C
+701CEE701CEE701CEE701CEE701CEE701CC6701CC6700DC7600DC7600DC7600D83600D83
+600D83600F83E00F83E00701C0171E7F9D1A>I<7F87F87F87F87F87F80F01C007038007
+838003870003C70001CE0001EE0000FC0000FC00007800007800007800007C00007C0000
+FE0000EE0001CF0001C7000387800383800703C00701C00E00E00E00E07F01FCFF83FE7F
+01FC171E7F9D1A>I<FF01FEFF01FEFF01FE1C00700E00E00E00E00701C00701C00783C0
+03838003C78001C70001C70000EE0000EE00007C00007C00003800003800003800003800
+00380000380000380000380000380000380001FF0001FF0001FF00171E7F9D1A>I<FFF8
+FFF8FFF8E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000
+E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000FFF8
+FFF8FFF80D2776A21A>91 D<600000F00000F00000F800007800007C00003C00003E0000
+1E00001E00001F00000F00000F800007800007C00003C00003C00003E00001E00001F000
+00F00000F800007800007800007C00003C00003E00001E00001F00000F00000F00000F80
+0007800007C00003C00003E00001E00001E00000C013277DA21A>I<FFF8FFF8FFF80038
+003800380038003800380038003800380038003800380038003800380038003800380038
+00380038003800380038003800380038003800380038003800380038FFF8FFF8FFF80D27
+7EA21A>I<7FFFC0FFFFE0FFFFE07FFFC013047D7E1A>95 D<061E1E387870E0E0E0E0E0
+F0F87830070F76A11A>I<1FF0003FFC007FFE00780F00300700000380000380007F8007
+FF801FFF803F8380780380700380E00380E00380E00380700780780F803FFFFC1FFDFC07
+F0FC16157D941A>I<FE0000FE0000FE00000E00000E00000E00000E00000E00000E0000
+0E3E000EFF800FFFE00FC1F00F80700F00380E00380E001C0E001C0E001C0E001C0E001C
+0E001C0E001C0F00380F00780F80F00FC1E00FFFC00EFF80063E00161E7F9D1A>I<00FF
+8003FFC00FFFE01F01E03C00C0780000700000700000E00000E00000E00000E00000E000
+007000007000007800703C00701F01F00FFFE003FFC000FE0014157D941A>I<001FC000
+1FC0001FC00001C00001C00001C00001C00001C00001C001F1C007FDC00FFFC01E0FC03C
+07C07803C07001C0E001C0E001C0E001C0E001C0E001C0E001C0E001C07003C07003C038
+07C03E0FC01FFFFC07FDFC01F1FC161E7E9D1A>I<01F80007FF000FFF801E07C03C01C0
+7800E07000E0E00070E00070FFFFF0FFFFF0FFFFF0E000007000007000007800703C0070
+1F01F00FFFE003FFC000FE0014157D941A>I<0007E0001FF0003FF800787800F03000E0
+0000E00000E00000E0007FFFF0FFFFF0FFFFF000E00000E00000E00000E00000E00000E0
+0000E00000E00000E00000E00000E00000E00000E00000E00000E0003FFF807FFFC03FFF
+80151E7F9D1A>I<01F87C07FFFE0FFFFE1E078C1C03803801C03801C03801C03801C038
+01C01C03801E07801FFF001FFE0039F8003800003800001C00001FFF801FFFE03FFFF878
+007C70001CE0000EE0000EE0000EE0000E70001C78003C3E00F81FFFF007FFC001FF0017
+217F941A>I<FE0000FE0000FE00000E00000E00000E00000E00000E00000E00000E3E00
+0EFF800FFFC00FC1C00F80E00F00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E0
+0E00E00E00E00E00E00E00E00E00E0FFE3FEFFE7FEFFE3FE171E7F9D1A>I<00C00001E0
+0001E00000C0000000000000000000000000000000000000007FE0007FE0007FE00000E0
+0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0
+0000E00000E0007FFF80FFFFC07FFF80121F7C9E1A>I<000C001E001E000C0000000000
+000000000000000FFE0FFE0FFE000E000E000E000E000E000E000E000E000E000E000E00
+0E000E000E000E000E000E000E000E000E000E000E000E001C601CF038FFF87FF01FC00F
+2A7E9E1A>I<FE0000FE0000FE00000E00000E00000E00000E00000E00000E00000E0FFC
+0E1FFE0E0FFC0E03C00E07800E0F000E1E000E3C000E78000EFC000FFC000FDE000F8F00
+0E07800E03800E01C00E01E00E00F0FFE3FEFFE3FFFFE3FE181E7F9D1A>I<FFE000FFE0
+00FFE00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0
+0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0
+0000E000FFFFE0FFFFE0FFFFE0131E7D9D1A>I<7CE0E000FFFBF8007FFFF8001F1F1C00
+1E1E1C001E1E1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C00
+1C1C1C001C1C1C001C1C1C001C1C1C001C1C1C007F1F1F00FF9F9F807F1F1F0019158094
+1A>I<FE3E00FEFF80FFFFC00FC1C00F80E00F00E00E00E00E00E00E00E00E00E00E00E0
+0E00E00E00E00E00E00E00E00E00E00E00E00E00E0FFE3FEFFE7FEFFE3FE17157F941A>
+I<01F00007FC001FFF003E0F803C07807803C07001C0E000E0E000E0E000E0E000E0E000
+E0E000E0F001E07001C07803C03C07803E0F801FFF0007FC0001F00013157D941A>I<FE
+3E00FEFF80FFFFE00FC1F00F80700F00380E00380E001C0E001C0E001C0E001C0E001C0E
+001C0E001C0F00380F00780F80F00FC1E00FFFC00EFF800E3E000E00000E00000E00000E
+00000E00000E00000E00000E0000FFE000FFE000FFE00016207F941A>I<01F8E007FEE0
+0FFFE01E07E03C03E07801E07001E0E000E0E000E0E000E0E000E0E000E0E000E0E001E0
+7001E07803E03C03E01E0FE00FFFE007FCE001F0E00000E00000E00000E00000E00000E0
+0000E00000E00000E0000FFE000FFE000FFE17207E941A>I<7F83F0FF8FF87FBFFC03FC
+3C03F01803E00003C00003C0000380000380000380000380000380000380000380000380
+000380000380007FFF00FFFF007FFF0016157E941A>I<07FB801FFF807FFF80780780E0
+0380E00380E003807800007FC0003FFC0007FE00003F800007806001C0E001C0E001C0F0
+03C0FC0780FFFF00EFFE00E3F80012157C941A>I<00C00001C00001C00001C00001C000
+01C00001C0007FFFE0FFFFE0FFFFE001C00001C00001C00001C00001C00001C00001C000
+01C00001C00001C00001C07001C07001C07001C07000E0E000FFE0007FC0001F00141C7F
+9B1A>I<FE0FE0FE0FE0FE0FE00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00
+E00E00E00E00E00E00E00E00E00E00E00E01E00F03E007FFFE03FFFE00FCFE17157F941A
+>I<7F83FCFFC7FE7F83FC0E00E00E00E00E00E00701C00701C00701C003838003838003
+838001C70001C70001C70000EE0000EE0000EE00007C00007C0000380017157F941A>I<
+FF83FEFFC7FEFF83FE3800383800381C00701C00701C00701C38701C7C701C7C700E6CE0
+0E6CE00EEEE00EEEE00EEEE00EC6E006C6C007C7C007C7C003838017157F941A>I<7FC7
+F87FCFFC7FC7F80703C003838003C70001EF0000FE00007C00007800003800007C0000EE
+0001EE0001C7000383800783C00F01C07FC7FCFFC7FE7FC7FC17157F941A>I<7FC3FCFF
+C7FE7FC3FC0E00E00E00E00700E00701C00781C00381C003838003C38001C38001C70000
+E70000E70000E600006600006E00003C00003C00003C0000380000380000380000700000
+700030700078E00071E0007FC0003F80001E000017207F941A>I<7FFFF0FFFFF0FFFFF0
+E001E0E003C0E00780000F00001E00003C0000780000F00001E00003C0000780000F0038
+1E00383C0038780038FFFFF8FFFFF8FFFFF815157E941A>I<0007E0001FE0003FE00078
+0000F00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0
+0001E00003C000FF8000FF0000FF800003C00001E00000E00000E00000E00000E00000E0
+0000E00000E00000E00000E00000E00000E00000F000007800003FE0001FE00007E01327
+7DA21A>I<7C0000FF0000FF800003C00001E00000E00000E00000E00000E00000E00000
+E00000E00000E00000E00000E00000E00000F000007800003FE0001FE0003FE000780000
+F00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00001
+E00003C000FF8000FF00007C000013277DA21A>125 D<0703001F87803FCF80F9FE00F0
+FC0060700011067C9D1A>I E /Fh 12 121 df<FFFFFC00FFFFFF0007800FC0078003E0
+078001F0078001F0078000F8078000F8078000F8078000F8078000F8078000F0078001F0
+078003E0078007C007801F0007FFFF00078007C0078001E0078000F0078000F807800078
+0780007C0780007C0780007C0780007C0780007C07800078078000F8078001F0078003F0
+07800FE0FFFFFF80FFFFFE001E227CA126>66 D<FFFCFFFC078007800780078007800780
+078007800780078007800780078007800780078007800780078007800780078007800780
+078007800780078007800780FFFCFFFC0E227DA114>73 D<FFFFF800FFFFFF0007800F80
+078003C0078001E0078001F0078000F0078000F8078000F8078000F8078000F8078000F8
+078000F0078001F0078001E0078003C007800F8007FFFE00078000000780000007800000
+078000000780000007800000078000000780000007800000078000000780000007800000
+0780000007800000FFFC0000FFFC00001D227CA125>80 D<01F80807FF181E07983800F8
+300078700038600018E00018E00008E00008E00008F000007800007C00003F00003FF800
+1FFF0007FFC001FFE0001FF00001F800007800003800003C00001C80001C80001C80001C
+80001CC00018E00038E00030F80070CF01E0C7FF8080FE0016247CA21E>83
+D<00040000000E0000000E0000000E0000001F0000001F0000003F800000278000002780
+000043C0000043C0000043C0000081E0000081E0000101F0000100F0000100F00003FFF8
+000200780006007C0004003C0004003C000C001E000C001E003C003F00FF00FFE01B1A7F
+991F>97 D<FFFF800F00E00F00700F00380F003C0F003C0F003C0F003C0F003C0F00780F
+00700F01E00FFFC00F00F00F00380F003C0F001C0F001E0F001E0F001E0F001E0F001C0F
+003C0F00780F00F0FFFFC0171A7E991D>I<003F0201C0C603002E0E001E1C000E1C0006
+380006780002700002700002F00000F00000F00000F00000F00000F00000700002700002
+7800023800041C00041C00080E000803003001C0C0003F00171A7E991D>I<FFF00F000F
+000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F
+000F000F000F000F00FFF00C1A7F990F>105 D<FFF0000F80000F00000F00000F00000F
+00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F
+00100F00100F00100F00300F00200F00600F00600F01E0FFFFE0141A7E991A>108
+D<007F800001C0E000070038000E001C001C000E003C000F003800070078000780700003
+8070000380F00003C0F00003C0F00003C0F00003C0F00003C0F00003C0F00003C0780007
+8078000780380007003C000F001C000E000E001C000700380001C0E000007F80001A1A7E
+9920>111 D<FFFE00000F03C0000F00E0000F00F0000F0078000F0078000F0078000F00
+78000F0078000F00F0000F00E0000F03C0000FFE00000F0380000F01E0000F00E0000F00
+F0000F00F0000F00F0000F00F0000F00F0000F00F0000F00F0400F0070400F003880FFF0
+1F001A1A7E991E>114 D<7FE07F800FC03E000F80180007C0100003C0200003E0600001
+F0400000F0800000790000007D0000003E0000001E0000001F0000000F00000017800000
+37C0000023C0000041E0000081F0000180F0000100780002007C0006003C000E003E001E
+003F00FF80FFE01B1A7F991F>120 D E /Fi 16 122 df<70F8F8F87005057C840E>58
+D<007FC003FF0007C000780007C000600005E000200009E000400009E000400008F00040
+0008F000400010F800800010780080001078008000103C008000203C010000203E010000
+201E010000201E010000400F020000400F020000400F0200004007820000800784000080
+07C400008003C400008003C400010001E800010001E800010001F800010000F800020000
+F0000200007000020000700006000070000F00002000FFE000200028227EA127>78
+D<00786001C4E00302E00601C00E01C01C01C03C01C0380380780380780380780380F007
+00F00700F00700F00708F00E10700E10701E1030262018C6200F01C015157E941A>97
+D<03C0003F80000380000380000380000700000700000700000700000E00000E00000E00
+000E00001C00001C78001D8E001E07003C07003803803803803807807007807007807007
+80700780E00F00E00F00E00F00E01E00E01C00601C0060380030700030C0000F00001123
+7DA215>I<003F0000E0800380C00701C00E03C01C03C03C00003C000078000078000078
+0000F00000F00000F00000F000007000407000403001803802001C1C0007E00012157E94
+15>I<00001E0001FC00001C00001C00001C000038000038000038000038000070000070
+0000700000700000E00078E001C4E00302E00601C00E01C01C01C03C01C0380380780380
+780380780380F00700F00700F00700F00708F00E10700E10701E1030262018C6200F01C0
+17237EA219>I<007C000382000701000E01001C0100380100780200700400FFF800F000
+00F00000E00000E00000E00000E00000E00080E000807003003004001838000FC0001115
+7D9417>I<00001E00000063800000C7800001C7800001C3000001800000038000000380
+0000038000000380000007000000070000000700000007000000FFF800000E0000000E00
+00000E0000000E0000000E0000000E0000001C0000001C0000001C0000001C0000001C00
+000038000000380000003800000038000000380000007000000070000000700000007000
+000060000000E0000000E0000000E0000000C0000070C00000F1800000F1000000620000
+003C000000192D7EA218>I<000F0C00389C00605C00C03801C038038038078038070070
+0F00700F00700F00701E00E01E00E01E00E01E00E01E01C00E01C00E03C00605C0031B80
+01E380000380000380000700000700000700700E00F00C00F018006070003FC000161F80
+9417>I<00F0000FE00000E00000E00000E00001C00001C00001C00001C0000380000380
+00038000038000070000071F0007218007C0C00F00E00F00E00E00E00E00E01C01C01C01
+C01C01C01C01C0380380380380380700380704700708700E08700E08700610E006206003
+C016237DA21C>I<00F0000FE00000E00000E00000E00001C00001C00001C00001C00003
+80000380000380000380000700000700F00703080704380E08780E10780E20300E40001C
+80001F00001FC0001C7000383800383800381C00381C10703820703820703820701840E0
+0C8060070015237DA219>107 D<3C07C000461860004720300087403800878038008700
+3800870038000E0070000E0070000E0070000E0070001C00E0001C00E0001C01C0001C01
+C1003801C200380382003803820038018400700188003000F00019157E941D>110
+D<003E0000C1800380C00700E00E00E01C00F03C00F03C00F07800F07800F07800F0F001
+E0F001E0F001C0F003C0700380700700700600381C001C380007E00014157E9417>I<00
+6000E000E000E000E001C001C001C001C00380FFFC0380038007000700070007000E000E
+000E000E001C001C001C001C08381038103820182018C007000E1F7F9E12>116
+D<01E0F006310C081A1C101A3C201C3C201C18201C000038000038000038000038000070
+0000700000700000700860E010F0E010F0E020E170404230803C1F0016157E941C>120
+D<1E00302300704380704380E08380E08380E08700E00701C00E01C00E01C00E01C01C03
+801C03801C03801C03801C07001C07001C07001C0F000C3E0003CE00000E00000E00001C
+00601C00F03800F03000E0600080C0004180003E0000151F7E9418>I
+E /Fj 5 111 df<FFFFFFFCFFFFFFFC1E027C8C27>0 D<03F0000FFC001FFE003FFF007F
+FF807FFF80FFFFC0FFFFC0FFFFC0FFFFC0FFFFC0FFFFC0FFFFC0FFFFC07FFF807FFF803F
+FF001FFE000FFC0003F00012147D9519>15 D<000F0038007000E001C001C001C001C001
+C001C001C001C001C001C001C001C001C001C001C001C001C0038007001E00F0001E0007
+00038001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001
+C000E000700038000F10317CA419>102 D<F0001E000700038001C001C001C001C001C0
+01C001C001C001C001C001C001C001C001C001C001C001C000E000700038000F00380070
+00E001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C0
+038007001E00F00010317CA419>I<C00000C00000E00000600000600000700000300000
+3000003800001800001800001C00000C00000C00000E0000060000060000070000030000
+03000003800001800001800001C00000C00000E000006000006000007000003000003000
+003800001800001800001C00000C00000C00000E00000600000600000700000300000300
+0003800001800001800001C00000C00000C012317DA419>110 D
+E /Fk 87 125 df<001F83E000706E3000C07C780180F8780380F0780700700007007000
+07007000070070000700700007007000070070000700700007007000FFFFFFC007007000
+070070000700700007007000070070000700700007007000070070000700700007007000
+070070000700700007007000070070000700700007007000070070000700700007007800
+7FE3FF801D2380A21C>11 D<001FC0000070200000C01000018038000380780007007800
+0700300007000000070000000700000007000000070000000700000007000000FFFFF800
+070078000700380007003800070038000700380007003800070038000700380007003800
+070038000700380007003800070038000700380007003800070038000700380007003800
+070038007FE1FF80192380A21B>I<001FD8000070380000C07800018078000380780007
+0038000700380007003800070038000700380007003800070038000700380007003800FF
+FFF800070038000700380007003800070038000700380007003800070038000700380007
+003800070038000700380007003800070038000700380007003800070038000700380007
+003800070038007FF3FF80192380A21B>I<000FC07F00007031C08000E00B004001801E
+00E003803E01E007003C01E007001C00C007001C000007001C000007001C000007001C00
+0007001C000007001C000007001C0000FFFFFFFFE007001C01E007001C00E007001C00E0
+07001C00E007001C00E007001C00E007001C00E007001C00E007001C00E007001C00E007
+001C00E007001C00E007001C00E007001C00E007001C00E007001C00E007001C00E00700
+1C00E007001C00E07FF1FFCFFE272380A229>I<70F8F8F8F8F8F8F87070707070707070
+70707070202020202020000000000070F8F8F87005247CA30E>33
+D<7038F87CFC7EFC7E743A04020402040204020804080410081008201040200F0F7EA218
+>I<0780000C001840001C0018200018003010007800701C00F0006013FF6000E00800E0
+00E00800C000E00801C000E008038000E008030000E008070000E0080E0000E0080C0000
+60101C000070101800003010380000182070000018406000000780E03C000001C0420000
+0180C100000381810000070380800006030080000E030040000C070040001C0700400038
+0700400030070040007007004000E007004000C007004001C00300400180030080038003
+80800700018100060000C1000E000042000C00003C0022287DA429>37
+D<003C000000006200000000C20000000181000000018100000003810000000381000000
+03810000000381000000038200000003820000000384000000038800000001C800000001
+D000000001E003FF8001C0007C0000E000380001E000300001F000200002700040000470
+0040000838008000183C008000301C010000701E020000700E020000F007040000F00788
+0000F003880000F001D00100F000E0010078007003003800B802003C031C04000E0C0E0C
+0003F003F00021257EA326>I<70F8FCFC7404040404080810102040060F7CA20E>I<0020
+0040008001000300060004000C000C00180018003000300030007000600060006000E000
+E000E000E000E000E000E000E000E000E000E000E000E000E00060006000600070003000
+30003000180018000C000C0004000600030001000080004000200B327CA413>I<800040
+002000100018000C000400060006000300030001800180018001C000C000C000C000E000
+E000E000E000E000E000E000E000E000E000E000E000E000E000C000C000C001C0018001
+800180030003000600060004000C00180010002000400080000B327DA413>I<00018000
+000180000001800000018000000180000001800000018000000180000001800000018000
+000180000001800000018000000180000001800000018000FFFFFFFEFFFFFFFE00018000
+000180000001800000018000000180000001800000018000000180000001800000018000
+0001800000018000000180000001800000018000000180001F227D9C26>43
+D<70F8FCFC7404040404080810102040060F7C840E>I<FFE0FFE00B027F8B10>I<70F8F8
+F87005057C840E>I<000180000180000380000300000300000700000600000600000E00
+000C00000C00001C00001800001800001800003800003000003000007000006000006000
+00E00000C00000C00001C000018000018000038000030000030000070000060000060000
+0E00000C00000C00000C00001C0000180000180000380000300000300000700000600000
+600000E00000C00000C0000011317DA418>I<01F000071C000C06001803003803803803
+807001C07001C07001C07001C0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F001
+E0F001E0F001E0F001E0F001E0F001E0F001E07001C07001C07001C07803C03803803803
+801C07000C0600071C0001F00013227EA018>I<008003800F80F3800380038003800380
+038003800380038003800380038003800380038003800380038003800380038003800380
+0380038003800380038007C0FFFE0F217CA018>I<03F0000C1C001007002007804003C0
+4003C08003E0F003E0F801E0F801E0F801E02003E00003E00003C00003C0000780000700
+000E00001C0000180000300000600000C000018000010000020020040020080020180060
+3000403FFFC07FFFC0FFFFC013217EA018>I<03F8000C1E001007002007804007C07807
+C07803C07807C03807C0000780000780000700000F00000E0000380003F000001C00000F
+000007800007800003C00003C00003E02003E07003E0F803E0F803E0F003C04003C04007
+80200780100F000C1C0003F00013227EA018>I<000200000600000E00000E00001E0000
+1E00002E00004E00004E00008E00008E00010E00020E00020E00040E00040E00080E0010
+0E00100E00200E00200E00400E00800E00FFFFF8000E00000E00000E00000E00000E0000
+0E00000E00001F0001FFF015217FA018>I<1000801E07001FFF001FFE001FF80013E000
+10000010000010000010000010000010000010F800130E001407001803801003800001C0
+0001C00001E00001E00001E00001E07001E0F001E0F001E0E001C08001C04003C0400380
+2007001006000C1C0003F00013227EA018>I<007E0001C1000300800601C00E03C01C03
+C0180180380000380000780000700000700000F0F800F30C00F40600F40300F80380F801
+C0F001C0F001E0F001E0F001E0F001E0F001E07001E07001E07001E03801C03801C01803
+801C03000C0600070C0001F00013227EA018>I<4000006000007FFFE07FFFC07FFFC040
+0080C0010080010080020080020000040000080000080000100000300000200000600000
+600000600000E00000C00000C00001C00001C00001C00001C00003C00003C00003C00003
+C00003C00003C00003C00003C00001800013237DA118>I<01F800060E00080300100180
+2001802000C06000C06000C06000C07000C07801803E01003F02001FC4000FF80003F800
+03FC00067F00083F80100F803007C06001C06000E0C000E0C00060C00060C00060C00060
+6000406000C03000801803000E0E0003F00013227EA018>I<01F000060C000C06001807
+00380380700380700380F001C0F001C0F001C0F001E0F001E0F001E0F001E0F001E07001
+E07003E03803E01805E00C05E00619E003E1E00001C00001C00001C00003800003803003
+00780700780600700C002018001030000FC00013227EA018>I<70F8F8F8700000000000
+00000000000070F8F8F87005157C940E>I<70F8F8F870000000000000000000000070F8
+F8F87808080808101010204040051F7C940E>I<FFFFFFFEFFFFFFFE0000000000000000
+000000000000000000000000000000000000000000000000FFFFFFFEFFFFFFFE1F0C7D91
+26>61 D<000FE00000701C0000800200030001800400004008000020080000201007C010
+20183008203008084060040440C0078441C0038481C00382838003828380038283800382
+8380038283800382838003828380038281C0038241C0038240C007824060078420300B84
+201831881007C0F00800000008000000040000000300000E00800078007007C0000FFC00
+1F237DA226>64 D<0001800000018000000180000003C0000003C0000003C0000005E000
+0005E000000DF0000008F0000008F0000010F800001078000010780000203C0000203C00
+00203C0000401E0000401E0000401E0000800F0000800F0000FFFF000100078001000780
+030007C0020003C0020003C0040003E0040001E0040001E00C0000F00C0000F03E0001F8
+FF800FFF20237EA225>I<FFFFF8000F800E0007800780078003C0078003E0078001E007
+8001F0078001F0078001F0078001F0078001F0078001E0078003E0078007C007800F8007
+803E0007FFFE0007800780078003C0078001E0078001F0078000F0078000F8078000F807
+8000F8078000F8078000F8078000F8078001F0078001F0078003E0078007C00F800F00FF
+FFFC001D227EA123>I<0007E0100038183000E0063001C00170038000F0070000F00E00
+00701E0000701C0000303C0000303C0000307C0000107800001078000010F8000000F800
+0000F8000000F8000000F8000000F8000000F8000000F800000078000000780000107C00
+00103C0000103C0000101C0000201E0000200E000040070000400380008001C0010000E0
+020000381C000007E0001C247DA223>I<FFFFF0000F801E0007800700078003C0078001
+C0078000E0078000F007800078078000780780007C0780003C0780003C0780003C078000
+3E0780003E0780003E0780003E0780003E0780003E0780003E0780003E0780003E078000
+3C0780003C0780007C0780007807800078078000F0078000E0078001E0078003C0078007
+000F801E00FFFFF8001F227EA125>I<FFFFFFC00F8007C0078001C0078000C007800040
+078000400780006007800020078000200780002007802020078020000780200007802000
+078060000780E00007FFE0000780E0000780600007802000078020000780200007802008
+0780000807800008078000100780001007800010078000300780003007800070078000E0
+0F8003E0FFFFFFE01D227EA121>I<FFFFFFC00F8007C0078001C0078000C00780004007
+800040078000600780002007800020078000200780202007802000078020000780200007
+8060000780E00007FFE0000780E000078060000780200007802000078020000780200007
+80000007800000078000000780000007800000078000000780000007800000078000000F
+C00000FFFE00001B227EA120>I<0007F008003C0C1800E0021801C001B8038000F80700
+00780F0000381E0000381E0000183C0000183C0000187C0000087800000878000008F800
+0000F8000000F8000000F8000000F8000000F8000000F8000000F8001FFF780000F87800
+00787C0000783C0000783C0000781E0000781E0000780F00007807000078038000B801C0
+00B800E00318003C0C080007F00020247DA226>I<FFFC3FFF0FC003F0078001E0078001
+E0078001E0078001E0078001E0078001E0078001E0078001E0078001E0078001E0078001
+E0078001E0078001E0078001E007FFFFE0078001E0078001E0078001E0078001E0078001
+E0078001E0078001E0078001E0078001E0078001E0078001E0078001E0078001E0078001
+E0078001E00FC003F0FFFC3FFF20227EA125>I<FFFC0FC0078007800780078007800780
+078007800780078007800780078007800780078007800780078007800780078007800780
+0780078007800780078007800FC0FFFC0E227EA112>I<03FFF0001F00000F00000F0000
+0F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F0000
+0F00000F00000F00000F00000F00000F00000F00000F00000F00000F00700F00F80F00F8
+0F00F80E00F01E00401C0020380018700007C00014237EA119>I<FFFC03FF000FC000F8
+000780006000078000400007800080000780010000078002000007800400000780080000
+078010000007802000000780400000078080000007818000000783C000000787E0000007
+89E000000788F000000790F0000007A078000007C03C000007803C000007801E00000780
+0F000007800F00000780078000078007C000078003C000078001E000078001E000078000
+F000078000F8000FC000FC00FFFC07FF8021227EA126>I<FFFE00000FC0000007800000
+078000000780000007800000078000000780000007800000078000000780000007800000
+078000000780000007800000078000000780000007800000078000000780000007800000
+078000000780008007800080078000800780008007800180078001800780010007800300
+0780030007800F000F803F00FFFFFF0019227EA11E>I<FFC00003FF0FC00003F007C000
+03E005E00005E005E00005E004F00009E004F00009E004F00009E004780011E004780011
+E004780011E0043C0021E0043C0021E0043C0021E0041E0041E0041E0041E0040F0081E0
+040F0081E0040F0081E004078101E004078101E004078101E00403C201E00403C201E004
+01E401E00401E401E00401E401E00400F801E00400F801E00400F801E004007001E00E00
+7001E01F007003F0FFE0203FFF28227EA12D>I<FF8007FF07C000F807C0007005E00020
+04F0002004F0002004780020047C0020043C0020041E0020041F0020040F002004078020
+040780200403C0200401E0200401E0200400F0200400F8200400782004003C2004003E20
+04001E2004000F2004000F20040007A0040003E0040003E0040001E0040001E0040000E0
+0E0000601F000060FFE0002020227EA125>I<000FE00000783C0000E00E0003C0078007
+8003C00F0001E00E0000E01E0000F03C0000783C0000787C00007C7C00007C7800003C78
+00003CF800003EF800003EF800003EF800003EF800003EF800003EF800003EF800003EF8
+00003E7800003C7C00007C7C00007C3C0000783E0000F81E0000F00F0001E00F0001E007
+8003C003C0078000E00E0000783C00000FE0001F247DA226>I<FFFFF0000F803C000780
+0F0007800780078007C0078003C0078003E0078003E0078003E0078003E0078003E00780
+03E0078003C0078007C00780078007800F0007803C0007FFF00007800000078000000780
+000007800000078000000780000007800000078000000780000007800000078000000780
+000007800000078000000FC00000FFFC00001B227EA121>I<FFFFE000000F803C000007
+800E00000780078000078007C000078003C000078003E000078003E000078003E0000780
+03E000078003E000078003C000078007C000078007800007800E000007803C000007FFE0
+00000780700000078038000007801C000007801E000007800E000007800F000007800F00
+0007800F000007800F000007800F800007800F800007800F800007800F808007800FC080
+078007C0800FC003C100FFFC01E2000000007C0021237EA124>82
+D<03F0200C0C601802603001E07000E0600060E00060E00060E00020E00020E00020F000
+00F000007800007F00003FF0001FFE000FFF0003FF80003FC00007E00001E00000F00000
+F0000070800070800070800070800070C00060C00060E000C0F000C0C80180C6070081FC
+0014247DA21B>I<7FFFFFF87807807860078018400780084007800840078008C007800C
+800780048007800480078004800780040007800000078000000780000007800000078000
+000780000007800000078000000780000007800000078000000780000007800000078000
+00078000000780000007800000078000000780000007800000078000000FC00003FFFF00
+1E227EA123>I<FFFC07FF0FC000F8078000700780002007800020078000200780002007
+800020078000200780002007800020078000200780002007800020078000200780002007
+800020078000200780002007800020078000200780002007800020078000200780002007
+8000200380004003C0004003C0004001C0008000E000800060010000300600001C080000
+03F00020237EA125>I<FFF0007FC01F80001F000F00000C000780000C00078000080007
+8000080003C000100003C000100003E000300001E000200001E000200000F000400000F0
+00400000F000400000780080000078008000007C018000003C010000003C010000001E02
+0000001E020000001F020000000F040000000F040000000F8C0000000788000000078800
+000003D000000003D000000003F000000001E000000001E000000000C000000000C00000
+0000C0000022237FA125>I<FFF03FFC03FE1F8007E000F80F0003C000700F0003C00020
+0F0003C00020078001E00040078001E00040078001E0004003C002F0008003C002F00080
+03C002F0008001E00478010001E00478010001E00478010000F0083C020000F0083C0200
+00F0083C020000F8183E06000078101E04000078101E0400007C101E0400003C200F0800
+003C200F0800003C200F0800001E40079000001E40079000001E40079000000F8003E000
+000F8003E000000F8003E00000070001C00000070001C00000070001C000000300018000
+0002000080002F237FA132>I<7FF807FF0007E001F80003C000E00003E000C00001E000
+800000F001000000F80300000078020000007C040000003E0C0000001E080000001F1000
+00000FB000000007A000000007C000000003E000000001E000000001F000000003F80000
+000278000000047C0000000C3E000000081E000000101F000000300F8000002007800000
+4007C00000C003E000008001E000010001F000030000F000070000F8001F8001FC00FFE0
+07FFC022227FA125>I<FFF0007FC01F80001F000F80000C00078000080007C000180003
+E000100001E000200001F000200000F000400000F800C000007C008000003C010000003E
+010000001E020000001F040000000F84000000078800000007D800000003D000000003E0
+00000001E000000001E000000001E000000001E000000001E000000001E000000001E000
+000001E000000001E000000001E000000001E000000001E000000003E00000003FFF0000
+22227FA125>I<7FFFFE7E003E78003C7000786000784000F0C000F0C001E08003C08003
+C0800780000780000F00001F00001E00003C00003C0000780000780000F00001F00001E0
+0103C00103C0010780010780030F00031E00021E00023C00063C000E78001EF8007EFFFF
+FE18227DA11E>I<FEFEC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0
+C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FEFE07317BA40E>I<0804100820102010
+402040208040804080408040B85CFC7EFC7E7C3E381C0F0F7AA218>I<FEFE0606060606
+060606060606060606060606060606060606060606060606060606060606060606060606
+06060606FEFE07317FA40E>I<08102020404080808080B8FCFC7C38060F7DA20E>96
+D<0FE0001838003C0C003C0E0018070000070000070000070000FF0007C7001E07003C07
+00780700700700F00708F00708F00708F00F087817083C23900FC1E015157E9418>I<0E
+0000FE00001E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E
+00000E00000E1F000E61C00E80600F00300E00380E003C0E001C0E001E0E001E0E001E0E
+001E0E001E0E001E0E001E0E001C0E003C0E00380F00700C80600C41C0083F0017237FA2
+1B>I<01FE000703000C07801C0780380300780000700000F00000F00000F00000F00000
+F00000F00000F000007000007800403800401C00800C010007060001F80012157E9416>
+I<0000E0000FE00001E00000E00000E00000E00000E00000E00000E00000E00000E00000
+E00000E00000E001F8E00704E00C02E01C01E03800E07800E07000E0F000E0F000E0F000
+E0F000E0F000E0F000E0F000E07000E07800E03800E01801E00C02E0070CF001F0FE1723
+7EA21B>I<01FC000707000C03801C01C03801C07801E07000E0F000E0FFFFE0F00000F0
+0000F00000F00000F000007000007800203800201C00400E008007030000FC0013157F94
+16>I<003C00C6018F038F030F070007000700070007000700070007000700FFF8070007
+00070007000700070007000700070007000700070007000700070007000700070007807F
+F8102380A20F>I<00007001F198071E180E0E181C07001C07003C07803C07803C07803C
+07801C07001C07000E0E000F1C0019F0001000001000001800001800001FFE000FFFC00F
+FFE03800F0600030400018C00018C00018C000186000306000303800E00E038003FE0015
+217F9518>I<0E0000FE00001E00000E00000E00000E00000E00000E00000E00000E0000
+0E00000E00000E00000E00000E1F800E60C00E80E00F00700F00700E00700E00700E0070
+0E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E0070
+FFE7FF18237FA21B>I<1C001E003E001E001C0000000000000000000000000000000000
+0E00FE001E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00
+0E000E00FFC00A227FA10E>I<01C003E003E003E001C000000000000000000000000000
+00000001E00FE001E000E000E000E000E000E000E000E000E000E000E000E000E000E000
+E000E000E000E000E000E000E000E000E000E060E0F0C0F18061803E000B2C82A10F>I<
+0E0000FE00001E00000E00000E00000E00000E00000E00000E00000E00000E00000E0000
+0E00000E00000E03FC0E01F00E01C00E01800E02000E04000E08000E10000E38000EF800
+0F1C000E1E000E0E000E07000E07800E03C00E01C00E01E00E00F00E00F8FFE3FE17237F
+A21A>I<0E00FE001E000E000E000E000E000E000E000E000E000E000E000E000E000E00
+0E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00
+FFE00B237FA20E>I<0E1FC07F00FE60E183801E807201C00F003C00E00F003C00E00E00
+3800E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E0038
+00E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800
+E0FFE3FF8FFE27157F942A>I<0E1F80FE60C01E80E00F00700F00700E00700E00700E00
+700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00
+70FFE7FF18157F941B>I<01FC000707000C01801800C03800E0700070700070F00078F0
+0078F00078F00078F00078F00078F000787000707800F03800E01C01C00E038007070001
+FC0015157F9418>I<0E1F00FE61C00E80600F00700E00380E003C0E001C0E001E0E001E
+0E001E0E001E0E001E0E001E0E001E0E003C0E003C0E00380F00700E80E00E41C00E3F00
+0E00000E00000E00000E00000E00000E00000E00000E00000E0000FFE000171F7F941B>
+I<01F8200704600E02601C01603801E07800E07800E0F000E0F000E0F000E0F000E0F000
+E0F000E0F000E07000E07800E03801E01C01E00C02E0070CE001F0E00000E00000E00000
+E00000E00000E00000E00000E00000E00000E0000FFE171F7E941A>I<0E3CFE461E8F0F
+0F0F060F000E000E000E000E000E000E000E000E000E000E000E000E000E000F00FFF010
+157F9413>I<0F8830786018C018C008C008E008F0007F803FE00FF001F8003C801C800C
+800CC00CC008E018D0308FC00E157E9413>I<02000200020002000600060006000E001E
+003E00FFF80E000E000E000E000E000E000E000E000E000E000E000E040E040E040E040E
+040E040708030801F00E1F7F9E13>I<0E0070FE07F01E00F00E00700E00700E00700E00
+700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00F00E00F00601
+7003827800FC7F18157F941B>I<FFC1FE1E00780E00300E00200E002007004007004003
+808003808003808001C10001C10000E20000E20000E20000740000740000380000380000
+380000100017157F941A>I<FF8FF8FF1E01E03C1C01C0180E01C0180E01E0100E01E010
+07026020070270200702702003843040038438400384384001C8188001C81C8001C81C80
+00F00D0000F00F0000F00F0000600600006006000060060020157F9423>I<FF83FE1F01
+F00E00C007008003810003830001C20000E400007800007800003800003C00004E00008E
+000187000103800201C00401E00C00E03E01F0FF03FE17157F941A>I<FFC1FE1E00780E
+00300E00200E002007004007004003808003808003808001C10001C10000E20000E20000
+E200007400007400003800003800003800001000001000002000002000002000004000F0
+4000F08000F180004300003C0000171F7F941A>I<3FFFC0380380300780200700600E00
+401C00403C0040380000700000E00001E00001C0000380400700400F00400E00C01C0080
+380080780180700780FFFF8012157F9416>I<FFFFFE1701808C18>I<FFFFFFFFFFFF3001
+808C31>I E /Fl 27 122 df<1C007F00FF80FF80FFC0FFC0FFC07FC01CC000C000C001
+C0018001800380070006000E001C00380030000A157BA913>39 D<000003800000000007
+C00000000007C0000000000FE0000000000FE0000000000FE0000000001FF0000000001F
+F0000000003FF8000000003FF8000000003FF80000000073FC0000000073FC00000000F3
+FE00000000E1FE00000000E1FE00000001C0FF00000001C0FF00000003C0FF8000000380
+7F80000007807FC0000007003FC0000007003FC000000E003FE000000E001FE000001E00
+1FF000001C000FF000001FFFFFF000003FFFFFF800003FFFFFF80000780007FC00007000
+03FC0000700003FC0000E00001FE0000E00001FE0001E00001FF0001C00000FF0001C000
+00FF00FFFE001FFFFEFFFE001FFFFEFFFE001FFFFE2F297EA834>65
+D<FFFFFFF80000FFFFFFFF8000FFFFFFFFE00003FC001FF80003FC0007FC0003FC0001FE
+0003FC0000FF0003FC00007F8003FC00003FC003FC00001FC003FC00001FE003FC00001F
+E003FC00000FF003FC00000FF003FC00000FF003FC00000FF003FC00000FF803FC00000F
+F803FC00000FF803FC00000FF803FC00000FF803FC00000FF803FC00000FF803FC00000F
+F803FC00000FF803FC00000FF803FC00000FF003FC00000FF003FC00000FF003FC00001F
+E003FC00001FE003FC00001FC003FC00003FC003FC00007F8003FC00007F0003FC0001FE
+0003FC0003FC0003FC001FF800FFFFFFFFE000FFFFFFFF8000FFFFFFFC00002D297DA835
+>68 D<FFFFFFFFE0FFFFFFFFE0FFFFFFFFE003FC001FE003FC0007F003FC0001F003FC00
+01F003FC0000F003FC00007003FC00007003FC00007003FC01C07803FC01C03803FC01C0
+3803FC01C03803FC03C00003FC03C00003FC0FC00003FFFFC00003FFFFC00003FFFFC000
+03FC0FC00003FC03C00003FC03C00003FC01C00E03FC01C00E03FC01C00E03FC01C01C03
+FC00001C03FC00001C03FC00001C03FC00003C03FC00003803FC00007803FC0000F803FC
+0001F803FC0003F803FC001FF8FFFFFFFFF0FFFFFFFFF0FFFFFFFFF027297DA82D>I<FF
+FFFFFFC0FFFFFFFFC0FFFFFFFFC003FC003FC003FC000FE003FC0003E003FC0001E003FC
+0001E003FC0000E003FC0000E003FC0000E003FC0000F003FC03807003FC03807003FC03
+807003FC03800003FC07800003FC07800003FC1F800003FFFF800003FFFF800003FFFF80
+0003FC1F800003FC07800003FC07800003FC03800003FC03800003FC03800003FC038000
+03FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003
+FC00000003FC000000FFFFFC0000FFFFFC0000FFFFFC000024297DA82B>I<FFFFFC0000
+FFFFFC0000FFFFFC000003FC00000003FC00000003FC00000003FC00000003FC00000003
+FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC
+00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00
+000003FC00000003FC0001C003FC0001C003FC0001C003FC0001C003FC0003C003FC0003
+8003FC00038003FC00078003FC00078003FC000F8003FC000F8003FC001F8003FC007F80
+03FC01FF00FFFFFFFF00FFFFFFFF00FFFFFFFF0022297DA829>76
+D<FFFE0000001FFFC0FFFE0000001FFFC0FFFF0000003FFFC003FF0000003FF00003FF00
+00003FF00003BF80000077F00003BF80000077F000039FC00000E7F000039FC00000E7F0
+00038FE00001C7F000038FE00001C7F0000387F0000387F0000387F0000387F0000387F0
+000387F0000383F8000707F0000383F8000707F0000381FC000E07F0000381FC000E07F0
+000380FE001C07F0000380FE001C07F0000380FF003807F00003807F003807F00003807F
+003807F00003803F807007F00003803F807007F00003801FC0E007F00003801FC0E007F0
+0003800FE1C007F00003800FE1C007F00003800FE1C007F000038007F38007F000038007
+F38007F000038003FF0007F000038003FF0007F000038001FE0007F000038001FE0007F0
+00038000FC0007F000038000FC0007F000FFFE00FC01FFFFC0FFFE007801FFFFC0FFFE00
+7801FFFFC03A297DA841>I<FFFC0000FFFEFFFE0000FFFEFFFF0000FFFE03FF80000380
+03FFC000038003FFE000038003BFE0000380039FF0000380038FF80003800387FC000380
+0387FE0003800383FE0003800381FF0003800380FF80038003807FC0038003807FE00380
+03803FF0038003801FF0038003800FF80380038007FC0380038003FE0380038003FF0380
+038001FF8380038000FF83800380007FC3800380003FE3800380001FF3800380001FFB80
+0380000FFB8003800007FF8003800003FF8003800001FF8003800001FF8003800000FF80
+038000007F80038000003F80038000001F80038000000F80FFFE00000F80FFFE00000780
+FFFE000003802F297DA836>I<FFFFFFE00000FFFFFFFE0000FFFFFFFF800003FC007FE0
+0003FC000FF00003FC0007F80003FC0007FC0003FC0003FC0003FC0003FE0003FC0003FE
+0003FC0003FE0003FC0003FE0003FC0003FE0003FC0003FE0003FC0003FC0003FC0007F8
+0003FC0007F80003FC001FE00003FC007FC00003FFFFFE000003FFFFF0000003FC01FC00
+0003FC007F000003FC007F800003FC003FC00003FC003FC00003FC001FE00003FC001FE0
+0003FC001FE00003FC001FE00003FC001FF00003FC001FF00003FC001FF00003FC001FF0
+0003FC001FF00703FC001FF80703FC000FF80703FC000FFC0FFFFFF007FE1EFFFFF001FF
+FCFFFFF0003FF030297DA834>82 D<007F806003FFF0E00FFFFFE01F807FE03F001FE07E
+0007E07E0003E07C0003E0FC0001E0FC0001E0FC0000E0FE0000E0FE0000E0FF000000FF
+C000007FFE00007FFFE0003FFFFC003FFFFF001FFFFF8007FFFFC003FFFFE000FFFFF000
+07FFF000007FF000000FF8000007F8000003F8E00003F8E00001F8E00001F8E00001F8F0
+0001F8F00001F0F80003F0FC0003E0FF0007E0FFE01FC0FFFFFF00E0FFFE00C01FF0001D
+297CA826>I<7FFFFFFFFFC07FFFFFFFFFC07FFFFFFFFFC07F803FC03FC07E003FC007C0
+78003FC003C078003FC003C070003FC001C0F0003FC001E0F0003FC001E0E0003FC000E0
+E0003FC000E0E0003FC000E0E0003FC000E0E0003FC000E000003FC0000000003FC00000
+00003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC00000
+00003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC00000
+00003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC00000
+00003FC0000000003FC00000007FFFFFE000007FFFFFE000007FFFFFE0002B287EA730>
+I<FFFFF001FFFCFFFFF001FFFCFFFFF001FFFC03FC0000070003FC0000070003FC000007
+0003FC0000070003FC0000070003FC0000070003FC0000070003FC0000070003FC000007
+0003FC0000070003FC0000070003FC0000070003FC0000070003FC0000070003FC000007
+0003FC0000070003FC0000070003FC0000070003FC0000070003FC0000070003FC000007
+0003FC0000070003FC0000070003FC0000070003FC0000070003FC0000070003FC000007
+0003FC00000F0001FC00000E0001FE00000E0000FE00001E0000FF00003C00007F800078
+00003FC000F800001FF007E0000007FFFFC0000001FFFF000000001FF800002E297DA835
+>I<01FF800007FFF0000F81FC001FC0FE001FC07F001FC07F001FC03F800F803F800000
+3F8000003F8000003F80000FFF8000FFFF8007FC3F801FE03F803F803F807F803F807F00
+3F80FE003F80FE003F80FE003F80FE007F80FF007F807F00FFC03F83DFFC0FFF0FFC01FC
+03FC1E1B7E9A21>97 D<001FF80000FFFE0003F01F000FE03F801FC03F803F803F803F80
+3F807F801F007F000000FF000000FF000000FF000000FF000000FF000000FF000000FF00
+0000FF000000FF0000007F0000007F8000003F8001C03FC001C01FC003C00FE0078003F0
+1F0000FFFC00001FE0001A1B7E9A1F>99 D<003FE00001FFF80003F07E000FE03F001FC0
+1F803F800FC03F800FC07F000FC07F0007E0FF0007E0FF0007E0FF0007E0FFFFFFE0FFFF
+FFE0FF000000FF000000FF000000FF0000007F0000007F8000003F8000E03F8001E01FC0
+01C00FE003C003F81F8000FFFE00001FF0001B1B7E9A20>101 D<00FF81F003FFE7FC0F
+C1FE7C1F80FC7C3F80FE7C3F007E107F007F007F007F007F007F007F007F007F007F007F
+007F003F007E003F80FE001F80FC000FC1F8001FFFE00018FF8000380000003C0000003C
+0000003E0000003FFFF8003FFFFF001FFFFFC00FFFFFE007FFFFF01FFFFFF07E0007F87C
+0001F8F80001F8F80000F8F80000F8F80000F8FC0001F87E0003F03F0007E00FC01F8003
+FFFE00007FF0001E287E9A22>103 D<FFE0000000FFE0000000FFE00000000FE0000000
+0FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000F
+E00000000FE00000000FE00000000FE00000000FE07F00000FE1FFC0000FE787E0000FEE
+07F0000FFC03F8000FF803F8000FF003F8000FF003F8000FF003F8000FE003F8000FE003
+F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8
+000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F800FFFE3FFF80
+FFFE3FFF80FFFE3FFF80212A7DA926>I<07001FC01FE03FE03FE03FE01FE01FC0070000
+00000000000000000000000000FFE0FFE0FFE00FE00FE00FE00FE00FE00FE00FE00FE00F
+E00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0FFFEFFFEFFFE0F2B7DAA14
+>I<FFE0FFE0FFE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0
+0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0
+0FE00FE00FE00FE0FFFEFFFEFFFE0F2A7DA914>108 D<FFC07F800FF000FFC1FFE03FFC
+00FFC783F0F07E000FCE03F9C07F000FDC01FB803F000FF801FF003F800FF001FE003F80
+0FF001FE003F800FF001FE003F800FE001FC003F800FE001FC003F800FE001FC003F800F
+E001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE0
+01FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001
+FC003F800FE001FC003F80FFFE1FFFC3FFF8FFFE1FFFC3FFF8FFFE1FFFC3FFF8351B7D9A
+3C>I<FFC07F0000FFC1FFC000FFC787E0000FCE07F0000FDC03F8000FF803F8000FF003
+F8000FF003F8000FF003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8
+000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F800
+0FE003F8000FE003F8000FE003F800FFFE3FFF80FFFE3FFF80FFFE3FFF80211B7D9A26>
+I<003FE00001FFFC0003F07E000FC01F801F800FC03F800FE03F0007E07F0007F07F0007
+F07F0007F0FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007
+F87F0007F07F0007F03F800FE03F800FE01F800FC00FC01F8007F07F0001FFFC00003FE0
+001D1B7E9A22>I<FFC1F0FFC7FCFFCE3E0FDC7F0FD87F0FF87F0FF07F0FF03E0FF0000F
+E0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000F
+E0000FE0000FE000FFFF00FFFF00FFFF00181B7E9A1C>114 D<03FE300FFFF03E03F078
+00F07000F0F00070F00070F80070FC0000FFE000FFFE007FFFC03FFFE01FFFF007FFF800
+FFFC0003FC0000FCE0007CE0003CF0003CF0003CF80078FC0078FF01F0F7FFC0C1FF0016
+1B7E9A1B>I<00700000700000700000700000F00000F00000F00001F00003F00003F000
+07F0001FFFF0FFFFF0FFFFF007F00007F00007F00007F00007F00007F00007F00007F000
+07F00007F00007F00007F00007F00007F03807F03807F03807F03807F03807F03807F038
+03F87001F8F000FFE0001F8015267FA51B>I<FFE03FF800FFE03FF800FFE03FF8000FE0
+03F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003
+F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8
+000FE003F8000FE003F8000FE007F8000FE007F8000FE00FF80007E01FF80003F03BFF80
+01FFF3FF80003FC3FF80211B7D9A26>I<FFFE03FF80FFFE03FF80FFFE03FF8007F00070
+0007F000700007F800F00003F800E00003FC01E00001FC01C00001FC01C00000FE038000
+00FE038000007F070000007F070000007F8F0000003F8E0000003FDE0000001FDC000000
+1FDC0000000FF80000000FF80000000FF800000007F000000007F000000003E000000003
+E000000001C000000001C000000003800000000380000038078000007C07000000FE0F00
+0000FE0E000000FE1E000000FE3C0000007C780000003FE00000000FC000000021277F9A
+24>121 D E /Fm 1 98 df<000100000003800000038000000380000007C0000007C000
+000BE0000009E0000009E0000010F0000010F0000030F800002078000020780000403C00
+00403C0000C03E0000801E0000801E0001FFFF0001FFFF0001000F000200078002000780
+040003C0040003C00C0003C00C0001E03E0003F0FF000FFEFF000FFE1F1F7E9E25>97
+D E /Fn 4 89 df<FFFFFFFF80FFFFFFFF8007E0001F8003E000078003E00001C003E000
+00C003E00000C003E000004003E000004003E000004003E000004003E000002003E00100
+2003E001002003E001000003E001000003E003000003E003000003E00F000003FFFF0000
+03FFFF000003E00F000003E003000003E003000003E001000003E001001003E001001003
+E001001003E000001003E000002003E000002003E000002003E000002003E000006003E0
+00006003E00000E003E00001E003E00003C007E0001FC0FFFFFFFFC0FFFFFFFFC024297E
+A829>69 D<FFFFE000FFFFE00007F0000003E0000003E0000003E0000003E0000003E000
+0003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E000
+0003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E000
+0103E0000103E0000103E0000103E0000203E0000203E0000203E0000203E0000603E000
+0603E0000E03E0001E03E0007C07E001FCFFFFFFFCFFFFFFFC20297EA825>76
+D<7FFFFFFFF87FFFFFFFF87C007C00F870007C003860007C001840007C000840007C0008
+C0007C000CC0007C000C80007C000480007C000480007C000480007C000480007C000400
+007C000000007C000000007C000000007C000000007C000000007C000000007C00000000
+7C000000007C000000007C000000007C000000007C000000007C000000007C000000007C
+000000007C000000007C000000007C000000007C000000007C000000007C000000007C00
+0000007C000000007C00000000FE000000FFFFFE0000FFFFFE0026297EA82B>84
+D<7FFF803FFE007FFF803FFE0003FC000FE00000F80007000000FC00020000007C000400
+00003E00040000003F00080000001F00100000001F80100000000FC02000000007C04000
+000007E04000000003F08000000001F10000000001F90000000000FE00000000007C0000
+0000007E00000000003F00000000001F00000000003F80000000002FC00000000047C000
+000000C7E00000000083E00000000101F00000000301F80000000200F80000000400FC00
+00000C007E00000008003E00000010003F00000030001F80000020000F80000040000FC0
+0000C00007E00001C00003E00007F0000FF000FFFC003FFFC0FFFC003FFFC02A297FA82D
+>88 D E end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 300dpi
+TeXDict begin
+
+%%EndSetup
+%%Page: 1 1
+1 0 bop 621 116 a Fn(L)636 108 y Fm(a)664 116 y Fn(T)697
+134 y(E)731 116 y(X)23 b Fl(Do)r(cume)o(n)n(t)d(St)n(yle)i(F)-6
+b(or)726 190 y(Thesis)22 b(F)-6 b(ormatting)720 644 y(USER'S)23
+b(MANUAL)889 921 y Fk(W)l(ritten)16 b(b)o(y:)613 1021
+y(Donna)h(Knigh)o(t)f(and)h(Suzanne)f(Lednic)o(ky)696
+1120 y(Vija)o(y)f(Ko)q(dali)h(and)h(Mik)o(e)e(P)o(a)o(yne)863
+1220 y(Russell)g(Oertel)853 1320 y(Pierce)g(Can)o(trell)858
+1419 y(Ken)h(J.)g(Chiang)846 1519 y(W)l(en-Lin)h(Hsieh)614
+1796 y(Departmen)o(t)d(of)j(Electrical)d(Engineering)766
+1895 y(T)l(exas)j(A&M)e(Univ)o(ersit)o(y)895 2172 y(V)l(ersion)g(2.3)
+910 2272 y(July)h(1993)p eop
+%%Page: 3 2
+3 1 bop 1872 -117 a Fk(iii)739 215 y(A)o(CKNO)o(WLEDGMENTS)210
+315 y(Sp)q(ecial)14 b(thanks)h(to)g(the)f(follo)o(wing)g(p)q(eople)g
+(for)h(their)e(assistance)i(in)f(preparing)h(this)f(man-)112
+415 y(ual)j(and)g(completing)d(this)i(pro)s(ject:)185
+556 y Fj(\017)24 b Fk(Lily)14 b(Mumme)o(rt)d(for)j(her)g(in)o(v)m
+(aluable)f(help)g(in)g(helping)g(us)i(\014x)e(our)i(most)e(stubb)q(orn)
+i(prob-)234 655 y(lems.)185 796 y Fj(\017)24 b Fk(Surja)c(Sutan)o(to)h
+(and)f(T)l(o)q(dd)g(Chauvin)g(for)g(answ)o(ering)f(questions)h(and)g
+(pro)o(viding)f(help)234 896 y(with)e(the)f(V)-5 b(AX.)185
+1037 y Fj(\017)24 b Fk(Bill)13 b(Bak)o(er)g(for)i(the)f(use)h(of)g(his)
+f(thesis)g(to)h(test)f(the)g(new)h(do)q(cumen)o(t)e(st)o(yle)g(and)i
+(to)g(b)q(e)g(the)234 1137 y(basis)i(of)g(the)f(example)e(included)h
+(in)h(this)g(man)o(ual.)185 1278 y Fj(\017)24 b Fk(Ka)o(y)16
+b(Y)l(o)q(c)o(ham)f(for)i(the)f(blo)q(c)o(k)g(diagram)f(example.)185
+1419 y Fj(\017)24 b Fk(Dr.)16 b(Naugle)g(for)h(his)f(T)662
+1430 y(E)689 1419 y(Xp)q(ertise.)185 1560 y Fj(\017)24
+b Fk(Elaine)16 b(Hasc)o(hk)o(e)f(for)i(help)e(in)h(t)o(yping)g(this)g
+(man)o(ual.)185 1701 y Fj(\017)24 b Fk(All)15 b(of)i(the)f(p)q(eople)g
+(at)h(the)f(Thesis)g(Clerk's)f(o\016ce)h(for)g(their)g(feedbac)o(k.)185
+1843 y Fj(\017)24 b Fk(T)l(o)q(dd)18 b(Chauvin)e(for)h(his)f(con)o
+(tribution)g(and)g(ideas)h(to)f(this)g(macro.)185 1984
+y Fj(\017)24 b Fk(Jon)g(Odegard,)h(Zhong)f(Deng,)h(and)f(Sho)o(wi-Min)f
+(Shen)g(for)h(their)e(kindly)g(using)i(this)234 2083
+y(draft)19 b(macro)f(and)h(ga)o(v)o(e)f(us)h(the)g(errors)f(and)h
+(suggestions)h(to)f(accomplish)e(the)h(\014nal)h(of)234
+2183 y(this)e(macro.)185 2324 y Fj(\017)24 b Fk(All)d(of)i(the)f(p)q
+(eople)g(used)g(the)g(previous)g(v)o(ersion)f(of)i(this)f(macro)f(and)i
+(dev)o(oted)e(their)234 2424 y(precious)16 b(suggestions)i(for)e(us)h
+(to)g(revise)e(this)h(new)g(macro.)p eop
+%%Page: 4 3
+4 2 bop 112 -1 a Fk(iv)740 191 y(T)l(ABLE)16 b(OF)g(CONTENTS)112
+375 y(CHAPTER)1452 b(P)o(age)345 562 y(I)42 b(INTR)o(ODUCTION)12
+b Fi(:)25 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g
+(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)95 b Fk(1)454
+684 y(A.)22 b(Bac)o(kground)36 b Fi(:)25 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h
+(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)
+95 b Fk(1)454 752 y(B.)24 b(Getting)16 b(Started)31 b
+Fi(:)25 b(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f
+(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)95 b Fk(3)454 819 y(C.)24
+b(Where)16 b(to)g(Find)g(the)g(Files)43 b Fi(:)25 b(:)f(:)h(:)f(:)h(:)f
+(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)95
+b Fk(3)454 887 y(D.)22 b(Running)17 b(Y)l(our)f(Thesis)28
+b Fi(:)d(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)
+f(:)h(:)f(:)h(:)95 b Fk(4)454 955 y(E.)26 b(Prin)o(ting)16
+b(Y)l(our)g(Thesis)35 b Fi(:)25 b(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f
+(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)95 b Fk(7)454
+1022 y(F.)27 b(Using)16 b(a)h(Sp)q(elling)e(Chec)o(k)o(er)25
+b Fi(:)g(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)
+f(:)h(:)95 b Fk(9)326 1143 y(I)q(I)42 b(USING)15 b(THE)i(THESIS)f(MA)o
+(CR)o(OS)h Fi(:)24 b(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)
+f(:)h(:)f(:)h(:)71 b Fk(12)454 1265 y(A.)22 b(The)16
+b(Title)g(P)o(age)45 b Fi(:)25 b(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)
+f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)71
+b Fk(12)454 1333 y(B.)24 b(The)16 b(Appro)o(v)m(al)g(P)o(age)32
+b Fi(:)24 b(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f
+(:)h(:)f(:)h(:)f(:)h(:)71 b Fk(12)454 1400 y(C.)40 b(The)17
+b(Abstract)f(P)o(age)23 b Fi(:)h(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)
+f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)71 b Fk(14)454
+1468 y(D.)22 b(The)16 b(Dedication)g(P)o(age)h(\(optional\))37
+b Fi(:)25 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)71
+b Fk(15)454 1535 y(E.)26 b(The)16 b(Ac)o(kno)o(wledgmen)o(t)d(P)o(age)k
+(\(optional\))k Fi(:)j(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)71
+b Fk(16)454 1603 y(F.)27 b(T)l(able)16 b(of)h(Con)o(ten)o(ts,)f(List)g
+(of)h(T)l(ables,)e(and)i(List)g(of)f(Figures)39 b Fi(:)24
+b(:)h(:)71 b Fk(16)454 1670 y(G.)21 b(The)16 b(Reference)f(P)o(age)20
+b Fi(:)k(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)
+h(:)f(:)h(:)f(:)h(:)71 b Fk(17)551 1738 y(1.)36 b(The)16
+b(L)737 1732 y Fh(a)761 1738 y Fk(T)788 1753 y(E)815
+1738 y(X)g(Bibliograph)o(y)f(En)o(vironmen)o(t)36 b Fi(:)24
+b(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)71 b Fk(17)551 1805 y(2.)36
+b Fh(Bib)p Fk(T)734 1816 y(E)761 1805 y(X)19 b Fi(:)25
+b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f
+(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)71 b Fk(19)551 1873 y(3.)36
+b(Supplemen)o(tal)13 b(Sources)k(Consulted)36 b Fi(:)24
+b(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)71 b Fk(25)454
+1941 y(H.)22 b(App)q(endices)45 b Fi(:)25 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h
+(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)
+71 b Fk(26)454 2008 y(I.)41 b(The)16 b(Vita)g(P)o(age)h
+Fi(:)24 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h
+(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)71 b Fk(26)307 2129
+y(I)q(I)q(I)42 b(F)o(ORMA)l(TTING)15 b(THE)h(BOD)o(Y)f
+Fi(:)24 b(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f
+(:)h(:)f(:)h(:)71 b Fk(27)454 2251 y(A.)22 b(The)16 b(First)g(P)o(age)h
+(of)f(the)g(Bo)q(dy)46 b Fi(:)25 b(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h
+(:)f(:)h(:)f(:)h(:)f(:)h(:)71 b Fk(27)454 2318 y(B.)24
+b(Headings)16 b(for)h(Chapters,)f(Sections,)g(and)h(Subsections)45
+b Fi(:)24 b(:)h(:)f(:)h(:)71 b Fk(27)454 2386 y(C.)24
+b(Equations)39 b Fi(:)24 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f
+(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)71
+b Fk(28)551 2454 y(1.)36 b(Sub)q(equations)24 b Fi(:)g(:)g(:)h(:)f(:)h
+(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)
+71 b Fk(29)454 2521 y(D.)22 b(T)l(ables)16 b(and)h(Figures)39
+b Fi(:)24 b(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f
+(:)h(:)f(:)h(:)f(:)h(:)71 b Fk(30)551 2589 y(1.)36 b(Creating)16
+b(T)l(ables)h(and)f(Figures)49 b Fi(:)24 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f
+(:)h(:)f(:)h(:)f(:)h(:)71 b Fk(31)551 2656 y(2.)36 b(Including)15
+b(T)l(ables)h(and)h(Figures)f(F)l(rom)f(Other)h(Sources)50
+b Fi(:)25 b(:)71 b Fk(32)551 2724 y(3.)36 b(P)o(ostScript)16
+b(Figures)28 b Fi(:)c(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h
+(:)f(:)h(:)f(:)h(:)f(:)h(:)71 b Fk(33)p eop
+%%Page: 5 4
+5 3 bop 1887 -129 a Fk(v)112 59 y(CHAPTER)1452 b(P)o(age)551
+223 y(4.)36 b(PGPLOT)24 b Fi(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)
+h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)71
+b Fk(33)551 290 y(5.)36 b(Fig)45 b Fi(:)25 b(:)f(:)h(:)f(:)h(:)f(:)g(:)
+h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h
+(:)f(:)h(:)71 b Fk(34)551 357 y(6.)36 b Fh(Pic)p Fk(T)733
+368 y(E)760 357 y(X)20 b Fi(:)25 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h
+(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)71
+b Fk(35)551 425 y(7.)36 b(PICSURE)50 b Fi(:)25 b(:)f(:)g(:)h(:)f(:)h(:)
+f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)71
+b Fk(36)551 492 y(8.)36 b(GNUPLOT)21 b Fi(:)k(:)f(:)g(:)h(:)f(:)h(:)f
+(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)71
+b Fk(36)551 559 y(9.)36 b(Placemen)o(t)13 b(of)k(T)l(ables)f(and)h
+(Figures)33 b Fi(:)24 b(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)71
+b Fk(36)454 627 y(E.)26 b(Including)15 b(Source)i(Co)q(de)g(in)o(to)f
+(the)g(Thesis)49 b Fi(:)24 b(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)71
+b Fk(38)454 694 y(F.)27 b(Blue)15 b(Line)h(Em)o(ulation)37
+b Fi(:)25 b(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h
+(:)f(:)h(:)f(:)h(:)71 b Fk(40)454 761 y(G.)21 b(W)l(riting)16
+b(Y)l(our)g(Prop)q(osal)38 b Fi(:)24 b(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f
+(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)71 b Fk(40)454
+829 y(H.)22 b(Miscellaneous)36 b Fi(:)24 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f
+(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)71
+b Fk(40)551 896 y(1.)36 b(The)16 b Fj(n)p Fg(label)e
+Fk(Command)48 b Fi(:)25 b(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h
+(:)f(:)h(:)f(:)h(:)71 b Fk(41)551 963 y(2.)36 b(New)15
+b(F)l(on)o(ts)44 b Fi(:)25 b(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)
+h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)71 b
+Fk(41)551 1031 y(3.)36 b Fh(Sli)p Fk(T)723 1041 y(E)750
+1031 y(X)30 b Fi(:)25 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f
+(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)71
+b Fk(41)551 1098 y(4.)36 b(PCs)17 b(and)f(Macin)o(toshes)41
+b Fi(:)24 b(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f
+(:)h(:)71 b Fk(41)551 1165 y(5.)36 b(Problem)14 b(Rep)q(orting)h
+Fi(:)24 b(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f
+(:)h(:)f(:)h(:)71 b Fk(42)405 1285 y(REFERENCES)39 b
+Fi(:)24 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f
+(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)71 b Fk(43)129
+1458 y(APPENDIX)15 b(A)48 b(SAMPLE)17 b(THESIS)40 b Fi(:)24
+b(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h
+(:)f(:)h(:)f(:)h(:)71 b Fk(44)129 1631 y(APPENDIX)15
+b(B)48 b Fh(BIB)p Ff(T)615 1642 y(E)644 1631 y(X)21 b
+Fi(:)j(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h
+(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)46 b Fk(101)129
+1805 y(APPENDIX)15 b(C)49 b(TRANSFIG)26 b Fi(:)e(:)h(:)f(:)h(:)f(:)g(:)
+h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h
+(:)f(:)h(:)46 b Fk(119)129 1978 y(APPENDIX)15 b(D)49
+b Fj(n)p Fg(PSFIG)14 b Fk(AND)i(EXAMPLES)k Fi(:)25 b(:)f(:)h(:)f(:)h(:)
+f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)46
+b Fk(141)129 2151 y(APPENDIX)15 b(E)49 b(GNUPLOT)40 b
+Fi(:)24 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f
+(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)46 b Fk(161)129
+2324 y(APPENDIX)15 b(F)49 b(D)o(VIHP)12 b Fi(:)25 b(:)f(:)h(:)f(:)h(:)f
+(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)
+f(:)h(:)f(:)h(:)f(:)h(:)46 b Fk(187)129 2497 y(APPENDIX)15
+b(G)49 b(D)o(VIPS)16 b Fi(:)25 b(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)
+f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f
+(:)h(:)46 b Fk(197)129 2670 y(APPENDIX)15 b(H)48 b(PGPLOT)18
+b(EXAMPLE)42 b Fi(:)25 b(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)
+f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)46 b Fk(205)p eop
+%%Page: 6 5
+6 4 bop 112 -117 a Fk(vi)112 71 y(CHAPTER)1452 b(P)o(age)129
+223 y(APPENDIX)15 b(I)48 b(SETTING)17 b(UP)f(A)g(CSC)h(STUDENT)f(A)o
+(CCOUNT)31 b Fi(:)25 b(:)f(:)h(:)f(:)h(:)f(:)h(:)46 b
+Fk(211)129 387 y(APPENDIX)15 b(J)49 b(T)510 397 y(E)537
+387 y(XR)o(O)o(X)15 b(CARD)e Fi(:)24 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h
+(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)46
+b Fk(215)129 550 y(APPENDIX)15 b(K)49 b(PICSURE)16 b(CARD)i
+Fi(:)25 b(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f
+(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)46 b Fk(219)p eop
+%%Page: 1 6
+1 5 bop 1888 -118 a Fk(1)873 123 y(CHAPTER)16 b(I)813
+306 y(INTR)o(ODUCTION)112 405 y(A.)48 b(Bac)o(kground)112
+554 y(The)16 b(Departmen)o(t)d(of)j(Electrical)d(Engineering)i(at)h(T)l
+(exas)f(A&M)g(Univ)o(ersit)o(y)d(previously)i(used)112
+654 y(b)q(oth)g(T)251 665 y(E)278 654 y(X)e(and)i(L)431
+648 y Fh(a)455 654 y Fk(T)482 669 y(E)509 654 y(X)e(to)h(generate)g
+(theses.)20 b(T)995 665 y(E)1022 654 y(X)12 b(can)h(create)f(do)q
+(cumen)o(ts)f(of)i(t)o(yp)q(eset)f(qualit)o(y)l(,)112
+753 y(but)k(it)g(is)f(di\016cult)g(to)h(learn,)f(requiring)g(a)h(great)
+g(deal)g(of)g(time)e(and)i(e\013ort)h(on)f(the)f(part)i(of)f(the)112
+853 y(user.)210 953 y(Donna)f(Knigh)o(t)d(and)i(Suzanne)g(Lednic)o(ky)e
+(w)o(ere)g(mem)o(b)q(ers)e(of)k(an)g(EE)f(403/404)j(team)c(that)112
+1052 y(designed)17 b(a)g(set)g(of)g(macros)f(called)g(\\T)841
+1063 y(E)869 1052 y(X)g(Macros)h(for)g(Thesis)g(F)l(ormatting")f(that)i
+(generated)112 1152 y(all)k(of)h(the)f(sp)q(ecial)g(pages)i(and)f
+(created)f(simpli\014ed)e(sectioning)i(commands,)f(making)h(T)1849
+1163 y(E)1876 1152 y(X)112 1252 y(m)o(uc)o(h)13 b(easier)i(to)h(use.)21
+b(Ho)o(w)o(ev)o(er,)13 b(their)h(pac)o(k)m(age)h(did)g(not)h(allo)o(w)f
+(virtual)f(lab)q(eling)h(of)h(equation)112 1351 y(and)h(reference)e(n)o
+(um)o(b)q(ers)g([1].)210 1451 y(Tw)o(o)20 b(y)o(ears)e(later,)h
+(another)h(EE)g(403/404)h(team,)d(Mik)o(e)g(P)o(a)o(yne)g(and)i(Vija)o
+(y)e(Ko)q(dali,)i(in-)112 1550 y(corp)q(orated)e(the)f(T)470
+1561 y(E)497 1550 y(X)f(macros)g(in)o(to)g(L)827 1544
+y Fh(a)851 1550 y Fk(T)878 1565 y(E)906 1550 y(X)g(do)q(cumen)o(t)f(st)
+o(yle)h Fg(thesis)p Fk(,)e(whic)o(h)i(made)g(the)g(for-)112
+1650 y(matting)d(of)i(theses)e(ev)o(en)g(easier.)20 b(Ho)o(w)o(ev)o
+(er,)12 b(this)i(do)q(cumen)o(t)f(st)o(yle)f(did)i(not)h(allo)o(w)e
+(studen)o(ts)h(to)112 1750 y(use)h(some)e(of)i(the)f(really)f(nice)h
+(features)g(of)h(L)929 1744 y Fh(a)953 1750 y Fk(T)980
+1765 y(E)1007 1750 y(X,)f(suc)o(h)g(as)h(the)f(automatic)g(table)g(of)h
+(con)o(ten)o(ts,)112 1849 y(list)h(of)h(tables,)e(and)i(list)f(of)g
+(\014gures)h([2].)210 1949 y(This)f(pac)o(k)m(age)h(incorp)q(orates)f
+(the)g(original)g(T)1067 1960 y(E)1094 1949 y(X)g(Thesis)g(Macros)g(in)
+o(to)g(a)g(new)g Fg(eethesis)112 2049 y Fk(do)q(cumen)o(t)h(st)o(yle)f
+(so)i(as)g(to)g(utilize)d(the)j(man)o(y)e(useful)h(built-in)f
+(functions)i(a)o(v)m(ailable)e(with)i(the)112 2148 y(L)124
+2142 y Fh(a)148 2148 y Fk(T)175 2163 y(E)203 2148 y(X)23
+b(system.)40 b(The)23 b(impro)o(v)o(em)o(en)o(ts)d(o)o(v)o(er)i(the)h
+(old)g Fg(thesis)e Fk(do)q(cumen)o(t)h(st)o(yle)g(are)h(listed)112
+2248 y(b)q(elo)o(w:)185 2385 y Fj(\017)h Fk(Sectioning)12
+b(is)f(no)o(w)i(done)f(b)o(y)f(the)h(standard)h(L)1074
+2379 y Fh(a)1098 2385 y Fk(T)1125 2400 y(E)1152 2385
+y(X)f(commands)e Fg(\\chapter,)22 b(\\section)p Fk(,)234
+2484 y(and)17 b Fg(\\subsection)o Fk(.)185 2624 y Fj(\017)24
+b Fk(The)13 b(T)l(able)f(of)h(Con)o(ten)o(ts,)f(List)h(of)g(T)l(ables,)
+g(and)g(List)f(of)h(Figures)f(are)g(no)o(w)h(automatically)p
+eop
+%%Page: 2 7
+2 6 bop 112 -100 a Fk(2)234 123 y(generated.)185 274
+y Fj(\017)24 b Fk(By)17 b(using)g(the)g Fg(\\include)d
+Fk(and)j Fg(\\includeonl)o(y)d Fk(commands,)h(y)o(ou)i(can)g(no)o(w)g
+(split)g(y)o(our)234 374 y(input)23 b(in)o(to)f(sections)g(without)g
+(ha)o(ving)h(to)f(re-initialize)e(page)j(n)o(um)o(b)q(ers)e(or)i
+(equation)234 474 y(n)o(um)o(b)q(ers)15 b(in)h(eac)o(h)g(\014le.)185
+625 y Fj(\017)24 b Fk(It)c(is)g(no)o(w)g(p)q(ossible)h(to)f(use)g
+Fh(Bib)p Fk(T)897 636 y(E)925 625 y(X)g(to)g(pro)q(duce)g(y)o(our)g
+(reference)f(pages.)33 b(This)21 b(will)234 725 y(free)14
+b(y)o(ou)f(from)g(w)o(orrying)h(ab)q(out)i(ho)o(w)e(to)g(format)f(y)o
+(our)h(bibliograph)o(y)g(as)g(w)o(ell)f(as)h(sa)o(ving)234
+825 y(y)o(ou)j(time)d(if)h(y)o(ou)i(write)e(sev)o(eral)g(pap)q(ers)i
+(using)g(man)o(y)e(of)h(the)g(same)g(sources.)185 976
+y Fj(\017)24 b Fk(If)17 b(the)f(caption)h(of)g(a)h(\014gure)f(or)g(a)g
+(table)g(is)f(longer)h(than)h(one)f(line,)e(the)i(new)f(macro)g(can)234
+1076 y(line)g(them)e(up)j(righ)o(t)f(after)g(the)g(table)g(or)g
+(\014gure)h(n)o(um)o(b)q(er.)185 1227 y Fj(\017)24 b
+Fk(There)e(are)g(some)f(new)g(options.)39 b(F)l(or)22
+b(example)e(the)h Fg(\\blueline)e Fk(command)g(can)j(b)q(e)234
+1327 y(included)16 b(to)g(em)o(ulate)e(blueline)h(pap)q(er,)h(and)h
+Fg(\\verbatimf)o(il)o(e{f)o(ile)o(})c Fk(and)234 1427
+y Fg(\\verbatimli)o(sti)o(ng[)o(n])o({fi)o(le})j Fk(can)k(b)q(e)g(used)
+g(to)g(include)f(co)q(de)h(or)g(a)g(program)g(in)o(to)234
+1526 y(the)c(thesis.)185 1678 y Fj(\017)24 b Fk(Finally)l(,)14
+b(all)h(kno)o(wn)g(errors)h(in)f(the)g(old)g Fg(thesis)e
+Fk(do)q(cumen)o(t)h(st)o(yle)g(ha)o(v)o(e)g(b)q(een)h(corrected)234
+1777 y(in)h(this)g(new)h Fg(eethesis)c Fk(do)q(cumen)o(t)i(st)o(yle.)
+210 1927 y(The)21 b(journal)g(mo)q(del)f(for)h(the)g
+Fg(eethesis)d Fk(do)q(cumen)o(t)h(st)o(yle)h(is)h Ff(IEEE)g(T)l
+(ransactions)h(on)112 2026 y(Automatic)17 b(Con)o(trol)p
+Fk(.)26 b(It)17 b(do)q(es)i(not)f(matter)f(if)g(y)o(our)h(ma)s(jor)f
+(area)h(is)g(comm)o(uni)o(cations,)e(com-)112 2126 y(puters,)e(p)q(o)o
+(w)o(er,)f(etc.,)g(as)h(this)f(journal)h(mo)q(del)e(is)h(accepted)g(b)o
+(y)f(the)h(en)o(tire)f(departmen)o(t.)19 b(There)112
+2226 y(are)e(man)o(y)f(di\013erences)f(in)i(format)f(among)g(the)h
+(IEEE)g(journals;)g(y)o(ou)g(cannot)g(simply)e(c)o(hange)112
+2325 y(the)20 b(fo)q(otnote)h(at)f(the)f(b)q(ottom)g(of)h(the)g
+(\014rst)g(page)g(to)g(sa)o(y)f(that)h(the)g(journal)g(mo)q(del)e(is)i
+(some)112 2425 y(other)d(IEEE)f(journal.)22 b(The)16
+b(fo)q(otnote)i(will)d(not)h(b)q(e)h(true)f(and)h(y)o(our)f(thesis)g
+(ma)o(y)e(b)q(e)j(rejected.)210 2525 y(If)i(y)o(ou)g(are)g(in)f(a)i
+(departmen)o(t)d(other)i(than)h(Electrical)d(Engineering,)i(y)o(ou)g
+(ma)o(y)e(still)h(b)q(e)112 2624 y(able)h(to)h(use)f(this)g(do)q(cumen)
+o(t)e(st)o(yle;)i(c)o(hec)o(k)e(with)i(y)o(our)g(departmen)o(t.)28
+b(If)19 b(the)f(journal)i(mo)q(del)p eop
+%%Page: 3 8
+3 7 bop 1888 -118 a Fk(3)112 123 y(pro)o(v)o(es)17 b(to)h(b)q(e)f
+(unsatisfactory)h(to)f(y)o(our)g(departmen)o(t,)e(y)o(ou)i(should)h
+(probably)f(consider)g(using)112 223 y(another)d(means)e(to)i(t)o(yp)q
+(e)f(y)o(our)g(thesis.)20 b(Changing)14 b(a)g(do)q(cumen)o(t)d(st)o
+(yle)h(is)h(not)h(a)f(trivial)f(matter;)112 322 y(only)17
+b(exp)q(erienced)d(users)j(should)f(attempt)f(it.)112
+516 y(B.)48 b(Getting)17 b(Started)112 669 y(Before)g(y)o(ou)h(em)o
+(bark)e(up)q(on)j(y)o(our)e(thesis)h(pro)q(duction,)g(w)o(e)f(suggest)i
+(that)f(y)o(ou)g(obtain)g(a)g(cop)o(y)112 769 y(of)24
+b(the)f(\\Thesis)h(Man)o(ual")g(and)f(a)h(cop)o(y)f(of)h(Leslie)e(Lamp)
+q(ort's)i(L)1389 763 y Fh(a)1413 769 y Fk(T)1440 784
+y(E)1467 769 y(X)f Fe(User's)h(Guide)g(and)112 868 y(R)n(efer)n(enc)n
+(e)e(Manual)f Fk([3])g(whic)o(h)f(are)g(a)o(v)m(ailable)g(in)h(the)f
+(MSC)h(Bo)q(okstore.)35 b(If)21 b(y)o(ou)f(in)o(tend)g(to)112
+968 y(write)h(equations)h(in)f(T)555 979 y(E)582 968
+y(X)h(y)o(ou)f(ma)o(y)f(wish)i(to)g(purc)o(hase)f(a)h(cop)o(y)f(of)h
+(Donald)g(Kn)o(uth's)f Fe(The)112 1068 y(T)139 1078 y(E)166
+1068 y(Xb)n(o)n(ok)g Fk([4],)g(whic)o(h)g(is)g(also)h(a)o(v)m(ailable)e
+(in)h(the)g(MSC)g(Bo)q(okstore.)37 b(Another)21 b(in)o(tro)q(ductory)
+112 1167 y(L)124 1161 y Fh(a)148 1167 y Fk(T)175 1182
+y(E)203 1167 y(X)12 b(b)q(o)q(ok)h(is)f(Da)o(vid)g(J.)g(Buerger's)f(L)
+827 1161 y Fh(a)851 1167 y Fk(T)878 1182 y(E)905 1167
+y(X)j Fe(for)f(Engine)n(ers)i(and)e(Scientists)h Fk([6],)e(also)h(a)o
+(v)m(ailable)112 1267 y(in)j(the)g(MSC)g(Bo)q(okstore.)22
+b(Y)l(ou)16 b(migh)o(t)e(also)i(\014nd)h(it)e(useful)h(to)g(ha)o(v)o(e)
+f(a)i(cop)o(y)e(of)i(the)e(Electrical)112 1367 y(Engineering)e(L)390
+1361 y Fh(a)414 1367 y Fk(T)441 1382 y(E)468 1367 y(X)f(Examples)g(b)q
+(o)q(ok,)i(whic)o(h)e(is)g(a)o(v)m(ailable)g(in)h(the)f(WER)o(C)h(Cop)o
+(y)f(Cen)o(ter.)20 b(W)l(e)112 1466 y(are)g(assuming)e(that)i(y)o(ou)f
+(ha)o(v)o(e)f(at)i(least)f(a)g(basic)h(understanding)f(of)h(L)1472
+1460 y Fh(a)1496 1466 y Fk(T)1523 1481 y(E)1550 1466
+y(X)f(and)h(an)f(editor.)112 1566 y(Y)l(ou)c(will)e(need)g(to)i
+(consult)f(the)g(L)730 1560 y Fh(a)754 1566 y Fk(T)781
+1581 y(E)808 1566 y(X)g(Users)g(Guide)g(and)h(p)q(ossibly)f
+Fe(The)i(T)1534 1577 y(E)1560 1566 y(Xb)n(o)n(ok)p Fk(,)e(the)g(latter)
+112 1665 y(when)j(pro)q(ducing)g(complex)d(mathematical)f(equations.)
+112 1860 y(C.)49 b(Where)16 b(to)g(Find)g(the)g(Files)112
+2012 y(There)g(are)h(t)o(w)o(o)f(t)o(yp)q(es)g(of)g(\014les)g(asso)q
+(ciated)h(with)g(the)f(L)1149 2006 y Fh(a)1173 2012 y
+Fk(T)1200 2028 y(E)1227 2012 y(X)g(thesis)g(do)q(cumen)o(t)f(st)o(yle:)
+185 2169 y Fj(\017)24 b Fg(.tex)14 b Fk(\014les:)20 b(There)14
+b(are)h(\\b)q(oiler-plate")g(\014les)f(for)h(eac)o(h)g(of)g(the)f
+(preliminary)e(and)j(supple-)234 2268 y(men)o(tary)g(pages.)23
+b(Y)l(ou)17 b(will)e(need)h(to)h(cop)o(y)f(all)h(of)f(these)h(\014les)f
+(in)o(to)g(y)o(our)h(o)o(wn)f(directory)234 2368 y(and)g(customize)c
+(them)h(for)i(y)o(our)f(thesis.)21 b(On)14 b(ee)g(or)h(eemips)e(y)o(ou)
+h(can)h(do)g(this)f(b)o(y)g(issuing)234 2468 y(the)i(command)491
+2624 y Fg(cp)25 b(/usr/loca)o(l/l)o(ib/)o(te)o(x/e)o(eth)o(es)o(is_)o
+(tem)o(pla)o(te)o(/*)d(.)p eop
+%%Page: 4 9
+4 8 bop 112 -100 a Fk(4)632 150 y(T)l(able)16 b(I.)g(Lo)q(cation)h(of)g
+Fg(eethesis)c Fk(Files)p 209 206 1625 2 v 209 216 V 208
+315 2 100 v 217 315 V 258 286 a(No)q(de)66 b(.st)o(y)16
+b(\014les)415 b(.tex)15 b(\014les)p 1824 315 V 1833 315
+V 209 317 1625 2 v 208 417 2 100 v 217 417 V 292 387
+a(ee)99 b(/usr/lo)q(cal/lib/tex/inputs)51 b(/usr/lo)q
+(cal/lib/tex/eethesis)p 1598 387 15 2 v 17 w(template)p
+1824 417 2 100 v 1833 417 V 208 516 V 217 516 V 242 487
+a(eemips)c(/usr/lo)q(cal/lib/tex/inputs)k(/usr/lo)q
+(cal/lib/tex/eethesis)p 1598 487 15 2 v 17 w(template)p
+1824 516 2 100 v 1833 516 V 208 616 V 217 616 V 253 586
+a(sigma)59 b(tex)p 505 586 15 2 v 17 w(ro)q(ot:[latex.st)o(yles])p
+1824 616 2 100 v 1833 616 V 208 716 V 217 716 V 255 686
+a(v)o(en)o(us)i(tex)p 505 686 15 2 v 17 w(ro)q(ot:[latex.st)o(yles])p
+1824 716 2 100 v 1833 716 V 209 717 1625 2 v 209 727
+V 234 848 a(Y)l(ou)15 b(will)f(need)h(to)g(cop)o(y)f(the)h(b)q
+(oiler-plate)f(\014les)h(from)f(ee)g(or)h(eemips)e(if)h(y)o(ou)h(are)g
+(running)234 948 y(on)i(SIGMA)f(or)g(VENUS)g(using)g(ftp.)185
+1083 y Fj(\017)24 b Fg(.sty)17 b Fk(\014les:)26 b(These)18
+b(are)h(the)f(\014les)g(that)h(L)1010 1077 y Fh(a)1034
+1083 y Fk(T)1061 1098 y(E)1088 1083 y(X)f(reads)h(in)f(to)h(con)o(trol)
+f(formatting.)28 b(Y)l(ou)234 1183 y(will)20 b(not)g(normally)f(need)h
+(to)g(access)g(these)g(\014les)g(directly)f(unless)h(y)o(ou)g(w)o(an)o
+(t)g(to)h(mo)q(d-)234 1282 y(ify)e(the)g(st)o(yle)f(or)h(cop)o(y)g(the)
+g(\014les)g(to)g(y)o(our)g(PC)h(or)f(Macin)o(tosh)g(\(see)g(Chapter)h
+(I)q(I)q(I,)e(Sec-)234 1382 y(tion)23 b(H{4\).)39 b(There)22
+b(are)h(three)e(\014les)h(asso)q(ciated)h(with)g(the)f(L)1425
+1376 y Fh(a)1449 1382 y Fk(T)1476 1397 y(E)1503 1382
+y(X)g(thesis)g(do)q(cumen)o(t)234 1482 y(st)o(yle:)e
+Fg(eethesis.st)o(y,)i(eethe12.sty)o(,)h(and)h(eethetitle)o(.st)o(y.)210
+1606 y Fk(App)q(endix)15 b(A)g(con)o(tains)h(a)g(sample)e(thesis)h
+(that)h(illustrates)f(the)g(output)i(from)d(this)i(do)q(cu-)112
+1706 y(men)o(t)f(st)o(yle.)20 b(T)l(able)c(I)g(sho)o(ws)h(the)f(lo)q
+(cation)h(of)f(the)g(\014les)g(on)h(v)m(arious)g(computers)e(on)h
+(campus.)112 1877 y(D.)49 b(Running)17 b(Y)l(our)f(Thesis)112
+2026 y(A)j(thesis)g(tends)g(to)g(b)q(e)g(so)h(long)f(that)h(y)o(ou)f
+(will)f(often)h(run)g(out)g(of)g(disk)g(space)g(if)g(y)o(ou)f(try)h(to)
+112 2126 y(run)d(it)f(all)g(at)h(once.)21 b(Also,)15
+b(it)g(is)h(ine\016cien)o(t)d(to)j(re-run)f(y)o(our)h(en)o(tire)e
+(thesis)h(when)h(all)f(y)o(ou)g(ha)o(v)o(e)112 2226 y(done)h(is)f(to)h
+(ha)o(v)o(e)e(made)g(a)i(small)e(c)o(hange)h(in)g(a)g(p)q(ortion)h(of)g
+(it.)k(Therefore,)15 b(it)g(is)g(recommende)o(d)112 2325
+y(that)i(y)o(ou)f(use)f(separate)i(\014les)e(for)h(eac)o(h)g(c)o
+(hapter)f(and)i(eac)o(h)e(preliminary)e(and)k(supplemen)o(tary)112
+2425 y(page.)22 b(The)15 b(b)q(est)h(w)o(a)o(y)e(to)i(do)g(this)f(is)f
+(to)i(use)f(the)g Fg(\\include)d Fk(and)k Fg(\\includeon)o(ly)c
+Fk(commands,)112 2525 y(whic)o(h)17 b(are)g(explained)f(in)h(Section)f
+(4.4)h(of)h(the)f(L)1016 2519 y Fh(a)1040 2525 y Fk(T)1067
+2540 y(E)1094 2525 y(X)g(man)o(ual.)22 b(Basically)l(,)15
+b(what)j(y)o(ou)f(should)112 2624 y(do)f(is)g(to)g(w)o(ork)f(from)f
+(one)i(main)e(\014le,)h(whic)o(h)g(will)f(then)h(call)g(the)g
+(\014le\(s\))g(y)o(ou)h(wish)f(to)h(w)o(ork)f(on.)p eop
+%%Page: 5 10
+5 9 bop 1888 -118 a Fk(5)112 123 y(Y)l(ou)17 b(need)g(not)g(en)o(ter)f
+(the)h(extension)f Fg(.tex)f Fk(in)i(the)f Fg(\\include)e
+Fk(statemen)o(ts.)22 b(A)16 b(sample)g(main)112 223 y(\014le)h(is)f(a)o
+(v)m(ailable)g(for)h(y)o(ou)g(to)g(edit)f(as)i(y)o(ou)e(wish;)h(it)f
+(is)h(called)e Fg(thesis.tex)f Fk(and)j(con)o(tains)g(the)112
+322 y(follo)o(wing)f(commands:)112 440 y Fg(\\documentst)o(yle)o({ee)o
+(the)o(si)o(s})112 502 y(\\includeonl)o(y{t)o(itl)o(e,a)o(pp)o(rov)o
+(al,)o(..)o(.})112 564 y(\045\\def\\type{)o(Dis)o(ser)o(tat)o(io)o(n})
+22 b(\045)k(Uncomment)c(this)i(line)g(for)h(dissertat)o(ion)112
+626 y(\045\\def\\degre)o(e{D)o(OCT)o(OR)d(OF)j(PHILOSOPHY)o(})e(\045)i
+(Uncomment)d(this)i(line)h(for)f(Ph.D.)112 689 y(\045\\def\\major)o
+({De)o(pt.)e(Name})i(\045)h(Uncomment)d(this)i(line)h(if)g(not)f(ELEN)
+112 751 y(\\begin{docu)o(men)o(t})112 813 y(\\pagenumber)o(ing)o({ro)o
+(man)o(})112 875 y(\\include{ti)o(tle)o(})112 938 y(\\include{ap)o(pro)
+o(val)o(})112 1000 y(\\include{ab)o(str)o(act)o(})112
+1062 y(\\include{de)o(d})112 1124 y(\\include{ac)o(k})112
+1187 y(\\include{li)o(sts)o(})112 1249 y(\\pagenumber)o(ing)o({ar)o
+(abi)o(c})112 1311 y(\\setlength{)o(\\he)o(adh)o(eig)o(ht)o(}{1)o(2pt)o
+(})112 1374 y(\\pagestyle{)o(myh)o(ead)o(ing)o(s})112
+1436 y(\\include{ch)o(1})112 1498 y(\\include{ch)o(2})112
+1560 y(\\include{bi)o(b})253 b(\045)25 b(Include)e(only)i(one)f(of)h
+(these)f(two)g(lines.)112 1623 y(\045)i(\\include{)o(bib)o(lio)o(})151
+b(\045)25 b("biblio")e(if)i(you)f(use)h(BibTeX,)e("bib")g(if)i(not.)112
+1685 y(\045)h(\\include{)o(sup)o(p})112 1747 y(\\include{ap)o(pen)o(d})
+112 1809 y(\\include{vi)o(ta})112 1872 y(\\end{docume)o(nt})210
+2026 y Fk(The)21 b Fg(\\include)c Fk(commands)i(tell)g(L)886
+2020 y Fh(a)910 2026 y Fk(T)937 2041 y(E)964 2026 y(X)h(whic)o(h)g
+(\014les)g(comprise)f(the)h(en)o(tire)f(do)q(cumen)o(t)112
+2126 y(while)h(the)f Fg(\\includeonl)o(y)e Fk(command)h(tells)h(L)1004
+2120 y Fh(a)1028 2126 y Fk(T)1055 2141 y(E)1082 2126
+y(X)h(whic)o(h)f(\014les)h(y)o(ou)g(w)o(an)o(t)g(to)g(run)h(at)f(that)
+112 2226 y(time.)42 b(When)23 b(y)o(ou)h Fg(latex)d Fk(the)j(main)e
+(\014le)h(\(i.e.,)g Fg(latex)h(thesis)p Fk(\),)e(L)1469
+2220 y Fh(a)1493 2226 y Fk(T)1520 2241 y(E)1548 2226
+y(X)h(will)f(ignore)i(all)112 2325 y Fg(\\include'd)13
+b Fk(\014les)k(that)g(are)f(not)h(men)o(tioned)e(in)h(the)g
+Fg(\\includeonl)o(y)e Fk(command,)g(but)j(it)f(will)112
+2425 y(k)o(eep)i(trac)o(k)f(of)i(page)g(n)o(um)o(b)q(ers,)e(equation)h
+(n)o(um)o(b)q(ers,)f(etc.)g(as)i(if)e(the)h(ignored)h(\014les)f(had)h
+(b)q(een)112 2525 y(included.)27 b(W)l(e)19 b(recomme)o(nd)d(that)j(y)o
+(ou)f(p)q(erfect)g(eac)o(h)g(p)q(ortion)h(of)g(y)o(our)g(thesis)f(b)o
+(y)g(using)h(the)112 2624 y Fg(\\includeonl)o(y)c Fk(command)g(to)j(w)o
+(ork)g(on)g(eac)o(h)f(\014le)g(individually)l(.)23 b(Y)l(ou)18
+b(can)f(delete)g(the)g Fg(.dvi)p eop
+%%Page: 6 11
+6 10 bop 112 -100 a Fk(6)112 123 y(\014les)20 b(from)f(y)o(our)g
+(directory)g(if)g(y)o(ou)h(wish,)g(but)g(y)o(ou)g(should)g(k)o(eep)f
+(the)g(latest)h(v)o(ersion)f(of)h(the)112 223 y Fg(.aux)13
+b Fk(\014les)h(around.)22 b(The)14 b Fg(.aux)f Fk(\014le)g(is)h(what)h
+(L)979 217 y Fh(a)1003 223 y Fk(T)1030 238 y(E)1058 223
+y(X)f(uses)g(to)h(k)o(eep)e(trac)o(k)h(of)g(things)h(relativ)o(e)d(to)
+112 322 y(the)h(other)f Fg(\\include'd)d Fk(\014les)j(\(e.g.,)g(page)h
+(n)o(um)o(b)q(ers,)e(equation)h(n)o(um)o(b)q(ers,)g(reference)e(n)o(um)
+o(b)q(ers,)112 422 y(\014gure)17 b(n)o(um)o(b)q(ers,)d(and)j(table)f(n)
+o(um)o(b)q(ers\).)112 521 y Fd(Note:)k Fk(When)c(using)f(the)g
+Fg(\\include)e Fk(command,)g(it)h(is)h(v)o(ery)f(imp)q(ortan)o(t)h(to)g
+(b)q(e)h(sure)f(that)h(an)o(y)112 621 y(new)h(coun)o(ters,)e(en)o
+(vironmen)o(ts,)e(etc.)i(that)h(y)o(ou)g(de\014ne)g(are)g(de\014ned)g
+(in)g(the)g(pream)o(ble)d(of)k(y)o(our)112 721 y(main)d(\014le)h
+(\(i.e.,)e(b)q(efore)i Fg(\\begin{docu)o(men)o(t})d Fk(in)j
+Fg(thesis.te)o(x)p Fk(\).)j(Do)e Fe(not)f Fk(de\014ne)g(an)o(y)g(of)h
+(these)112 820 y(things)h(in)f(the)g(middle)e(of)i(y)o(our)h(do)q
+(cumen)o(t)d(or)j(an)g(error)f(will)f(o)q(ccur.)210 920
+y(After)h(y)o(ou)h(ha)o(v)o(e)g(p)q(erfected)f(eac)o(h)h(section)g
+(individually)e(b)o(y)h(using)i Fg(\\includeon)o(ly)p
+Fk(,)c(y)o(ou)112 1020 y(need)21 b(to)g(put)h(the)e(en)o(tire)g(thesis)
+h(together.)35 b(The)21 b(b)q(est)g(w)o(a)o(y)g(to)g(do)h(this)f(is)g
+(to)g(start)g(at)h(the)112 1119 y(b)q(eginning)15 b(of)f(y)o(our)g(do)q
+(cumen)o(t)f(\(the)h(titlepage\))f(and)i(w)o(ork)f(to)h(the)e(end)h
+(\(the)g(vita\),)g(L)1719 1113 y Fh(a)1743 1119 y Fk(T)1770
+1134 y(E)1797 1119 y(X'ing)112 1219 y(one)21 b(or)f(more)f(\014les)h
+(at)g(a)h(time)d(using)i Fg(\\includeonl)o(y)p Fk(.)30
+b(The)20 b(only)g(\014le)g(that)g(should)h(not)f(b)q(e)112
+1318 y(L)124 1312 y Fh(a)148 1318 y Fk(T)175 1333 y(E)203
+1318 y(X'd)e(in)g(sequen)o(tial)g(order)h(is)g(the)f(\014le)g(that)i
+(con)o(tains)f(y)o(our)f(T)l(able)h(of)g(Con)o(ten)o(ts,)g(List)g(of)
+112 1418 y(T)l(ables,)k(and)f(List)g(of)g(Figures)g(\(i.e.,)f
+Fg(lists.tex)o Fk(\).)35 b(This)22 b(\014le)f(should)h(b)q(e)g(L)1594
+1412 y Fh(a)1618 1418 y Fk(T)1645 1433 y(E)1672 1418
+y(X'd)f(last)h(so)112 1518 y(that)f(it)f(can)h(gather)g(the)f(most)g
+(up-to-date)i(information)d(from)h(the)g(v)m(arious)h
+Fg(.aux)e Fk(\014les.)34 b(If)112 1617 y(y)o(ou)18 b(run)h(y)o(our)e
+(\014les)h(sequen)o(tially)l(,)e(they)h(will)g(ha)o(v)o(e)g(all)h(of)g
+(the)g(information)f(they)g(need)h(from)112 1717 y(the)h(previous)g
+(\014les)g(\(page)h(n)o(um)o(b)q(ers,)e(equation)h(n)o(um)o(b)q(ers,)f
+(etc.\))30 b(to)19 b(format)g(text)f(correctly)l(.)112
+1817 y(Ho)o(w)o(ev)o(er,)d(if)g(y)o(ou)i(ha)o(v)o(e)e(made)g(ma)s(jor)h
+(c)o(hanges)g(in)g(the)h(\014le)e(since)h(the)g(last)g(time)f(y)o(ou)h
+(L)1757 1811 y Fh(a)1781 1817 y Fk(T)1808 1832 y(E)1835
+1817 y(X'd)112 1916 y(it)i(\(i.e.,)e(c)o(hanges)i(whic)o(h)f(a\013ect)h
+(the)g Fg(.aux)e Fk(\014le\),)h(L)1063 1910 y Fh(a)1087
+1916 y Fk(T)1114 1931 y(E)1141 1916 y(X)h(will)e(output)j(a)f(w)o
+(arning)g(message)f(to)112 2016 y(y)o(our)g(screen)f(telling)g(y)o(ou)h
+(that)g(y)o(ou)g(m)o(ust)e(re-run)i(y)o(our)g(do)q(cumen)o(t)f(to)h
+(\\get)g(cross-references)112 2115 y(righ)o(t.")e(It)g(is)g(imp)q
+(ortan)o(t)g(that)g(y)o(ou)g(do)h(L)871 2109 y Fh(a)895
+2115 y Fk(T)922 2130 y(E)950 2115 y(X)e(y)o(our)i(thesis)f(again;)h
+(otherwise)f(page)g(n)o(um)o(b)q(ers,)112 2215 y(equation)20
+b(n)o(um)o(b)q(ers,)f(or)i(the)e(table)h(of)g(con)o(ten)o(ts)g(ma)o(y)e
+(not)j(b)q(e)f(correct.)32 b(It)19 b(is)h(imp)q(ortan)o(t)f(to)112
+2315 y(remem)o(b)q(er)13 b(that)k(when)f(y)o(ou)h(prin)o(t)e(a)i(p)q
+(ortion)g(of)g(y)o(our)f(thesis)g(it)g(ma)o(y)f(not)i(b)q(e)f(totally)g
+(correct)112 2414 y(if)e Fe(any)g Fk(of)h(the)f(other)g
+Fg(\\incude'd)22 b(.aux)13 b Fk(\014les)h(is)f(not)i(up-to-date.)22
+b(Do)15 b(not)f(b)q(e)g(alarmed)f(if)h(page)112 2514
+y(n)o(um)o(b)q(ers)k(or)h(equation)g(n)o(um)o(b)q(ers)f(are)h(wrong;)h
+(if)f(y)o(ou)g(L)1178 2508 y Fh(a)1202 2514 y Fk(T)1229
+2529 y(E)1256 2514 y(X)g(y)o(our)f(thesis)h(sequen)o(tially)e(and)112
+2614 y(re-run)h(individual)d(\014les)i(when)g(told)g(to)h(do)g(so)f(b)o
+(y)g(the)g(computer,)e(y)o(our)i(\014nal)g(output)h(should)p
+eop
+%%Page: 7 12
+7 11 bop 1888 -118 a Fk(7)112 123 y(b)q(e)17 b(correct.)112
+297 y(E.)49 b(Prin)o(ting)16 b(Y)l(our)g(Thesis)112 446
+y(Di\013eren)o(t)21 b(computers)f(at)i(T)l(exas)g(A&M)f(Univ)o(ersit)o
+(y)d(ha)o(v)o(e)j(di\013eren)o(t)g(commands)e(for)j(prin)o(t-)112
+545 y(ing)c(a)f(L)248 539 y Fh(a)272 545 y Fk(T)299 560
+y(E)326 545 y(X)g(do)q(cumen)o(t.)22 b(Y)l(ou)17 b(will)f(alw)o(a)o(ys)
+h(b)q(egin)g(the)g(pro)q(cess)h(with)f(the)f(command)f
+Fg(latex)112 645 y(filename)p Fk(.)35 b(This)21 b(pro)q(duces)i(a)f
+Fg(.dvi)e Fk(\014le)h(whic)o(h)f(can)i(b)q(e)g(transferred)f(to)h(an)o
+(y)g(other)g(com-)112 744 y(puter)c(for)g(further)f(pro)q(cessing.)27
+b(After)17 b(this,)g(y)o(ou)h(m)o(ust)e(run)i(some)f(sort)h(of)g
+Fg(dvi)e Fk(program)i(on)112 844 y(y)o(our)g(do)q(cumen)o(t)d(and)j
+(then)f(use)g(another)h(command)d(to)j(prin)o(t)e(it.)24
+b(Some)16 b(computer)g(systems)112 944 y(com)o(bine)f(all)g(of)i(these)
+f(steps)g(in)o(to)g(one)h(command.)210 1043 y(The)f(commands)f(for)h
+Fg(ee)g Fk(or)g Fg(eemips)e Fk(to)j Fg(dvi)e Fk(and)i
+Fg(print)d Fk(the)i(L)1411 1037 y Fh(a)1435 1043 y Fk(T)1462
+1058 y(E)1490 1043 y(X)g(output)h(are:)112 1140 y Fg(dvihp)24
+b(file)112 1190 y(lpr)h(-Phpzac)e(-l)i(file.hp)112 1336
+y(dvihp)18 b Fk(is)g(a)i(program)f(that)g(con)o(v)o(erts)f
+Fg(.dvi)f Fk(\014les)i(to)g Fg(.hp)f Fk(\014les)h(for)g(our)g
+Fg(HP)25 b(Laserjet)e(2000)112 1435 y Fk(laser)f(prin)o(ter.)37
+b(There)21 b(are)h(man)o(y)e(options)i(a)o(v)m(ailable)f(for)h
+Fg(dvihp)p Fk(,)f(for)h(details)f(the)h(man)o(ual)112
+1535 y(page)c(is)e(included)g(in)g(App)q(endix)h(F.)f(The)h
+Fg(-Phpzac)d Fk(option)j(selects)f(the)g Fg(HP)25 b(Laserjet)e(2000)112
+1635 y Fk(prin)o(ter)17 b(in)f(Zac)o(hry)h(214.)25 b(The)17
+b Fg(-l)g Fk(option)g(is)g(required)f(for)h(prin)o(ting)g
+Fg(.hp)f Fk(\014les.)24 b(If)16 b(y)o(ou)h(forget)112
+1734 y(to)g(put)g Fg(-l)e Fk(after)h Fg(lpr)p Fk(,)f(y)o(ou)h(will)f
+(not)i(get)f(an)o(y)g(binary)g(\014le)g(prin)o(tout.)210
+1834 y(The)23 b(EE)g(departmen)o(t)e(also)i(has)h(a)f(DEC)h(LPS20)g(P)o
+(ostScript)f(prin)o(ter.)39 b(F)l(or)23 b(straigh)o(t)112
+1933 y(L)124 1927 y Fh(a)148 1933 y Fk(T)175 1948 y(E)203
+1933 y(X,)f(this)h(prin)o(ter)g(is)g(slo)o(w)o(er)g(than)g(the)g
+Fg(Laserjet)g(2000)p Fk(,)g(and)h(the)f(cost)h(p)q(er)f(page)h(for)112
+2033 y(supplies)15 b(is)g(higher.)21 b(F)l(or)15 b(these)f(reasons,)i
+(w)o(e)f(ask)g(that)h(y)o(ou)f(use)g(the)f(LPS20)j(only)e(if)f(y)o(ou)h
+(ha)o(v)o(e)112 2133 y(P)o(ostScript)k(graphics)h(to)g(include)e(or)h
+(if)g(the)g Fg(Laserjet)k(2000)17 b Fk(is)i(do)o(wn.)31
+b(The)19 b(command)e(to)112 2232 y Fg(dvi)f Fk(and)g
+Fg(print)f Fk(the)h(output)h(on)g(ee)e(or)i(eemips)d(are)i(as)h(follo)o
+(ws:)112 2329 y Fg(dvips)24 b(file)112 2378 y(lpr)h(-Plpszac)e(-l)i
+(file.ps)112 2525 y(dvips)17 b Fk(con)o(v)o(erts)h Fg(.dvi)g
+Fk(\014les)g(to)h Fg(.ps)f Fk(\014les)g(for)h(a)h(P)o(ostScript)e(prin)
+o(ter.)28 b(There)19 b(are)f(man)o(y)g(op-)112 2624 y(tions)h(for)g
+Fg(dvips)p Fk(;)e(the)h(man)o(ual)f(page)i(is)f(included)f(in)h(App)q
+(endix)g(G.)g(The)h Fg(-Plpszac)c Fk(option)p eop
+%%Page: 8 13
+8 12 bop 112 -100 a Fk(8)112 123 y(selects)18 b(the)g(LPS20)i(prin)o
+(ter)d(in)h(Zac)o(hry)g(214.)29 b(Including)17 b(P)o(ostScript)i
+(graphics)f(is)h(discussed)112 223 y(in)d(Section)g(I)q(I)q(I.D.3.)210
+322 y(Users)h(of)g(SIGMA)f(and)h(VENUS)f(can)h(use)g(the)f(Xero)o(x)g
+(4050)i(prin)o(ter)e(a)o(v)m(ailable)g(in)h(ZCC.)112
+422 y(After)f(y)o(ou)g(\014nish)g(running)h(L)656 416
+y Fh(a)680 422 y Fk(T)707 437 y(E)734 422 y(X,)f(y)o(ou)g(just)g(t)o
+(yp)q(e)112 574 y Fg(texrox/que=)o(xrx)o(zcc)22 b(file)112
+726 y Fk(and)15 b(then)f(y)o(ou)g(can)h(go)g(to)f(the)g(ZCC)g(help)g
+(desk)g(to)g(get)h(y)o(our)f(prin)o(tout.)20 b(Chec)o(k)13
+b(at)i(a)f(help)g(desk)112 826 y(if)i(y)o(ou)g(don't)h(kno)o(w)f(the)g
+(commands)e(to)j(use)f(from)g(y)o(our)g(computer.)210
+925 y(There)c(are)g(t)o(w)o(o)h(recomme)o(nded)d(w)o(a)o(ys)i(for)h
+(prin)o(ting)e(y)o(our)i(thesis)f(on)g(blueline.)19 b(The)12
+b(\014rst)h(is)112 1025 y(to)h(send)f(y)o(our)g Fg(.dvi)f
+Fk(\014les)h(to)h(y)o(our)f(SIGMA)f(or)i(VENUS)e(accoun)o(t)h(\(a)o(v)m
+(ailable)f(to)i(ev)o(ery)e(studen)o(t)112 1124 y(|)17
+b(see)g(App)q(endix)f(I)h(for)g(instructions)g(on)g(getting)g(an)h
+(accoun)o(t\))e(and)i(then)f(send)g(y)o(our)g(thesis)112
+1224 y(to)h(the)e(Xero)o(x)g(4050)i(laser)f(prin)o(ter)e(in)i(the)f(R)o
+(CC)h(\(The)f(Remote)f(Computing)i(Cen)o(ter)f(b)q(ehind)112
+1324 y(the)h(library\))g(or)g(to)h(one)f(of)h(the)f(t)o(w)o(o)g(Xero)o
+(x)f(9700)j(laser)e(prin)o(ters)f(in)h(the)g(TCC)h(\(The)f(T)l(eague)
+112 1423 y(Computing)f(Cen)o(ter)g(in)g(the)g(T)l(eague)g(Building\).)k
+(The)d(commands)d(for)j(doing)f(this)g(are)112 1575 y
+Fg($)26 b(texrox/bo)o(x=n)o(nnn)o(/qu)o(eu)o(e=R)o(CC/)o(fo)o(rm=)o
+(11A)o(1)d(filename)176 b(\(for)24 b(the)h(4050\))112
+1675 y($)h(texrox/bo)o(x=m)o(mmm)o(/qu)o(eu)o(e=X)o(ERO)o(X/)o(for)o
+(m=1)o(1A1)c(filename)125 b(\(for)24 b(the)h(9700s\))112
+1827 y Fk(Do)15 b(not)f(t)o(yp)q(e)f(in)g(the)h(extension)f(on)h(y)o
+(our)f(\014lename.)19 b(Y)l(our)14 b(thesis)f(will)g(b)q(e)g(prin)o
+(ted)g(on)h(blueline)112 1927 y(pap)q(er)19 b(and)f(y)o(ou)f(ma)o(y)f
+(pic)o(k)h(it)g(up)g(from)g(the)g(b)q(o)o(x)h(that)g(y)o(ou)g(sp)q
+(eci\014ed)f(\(The)g(R)o(CC)h(b)q(o)o(xes)f(are)112 2026
+y(n)o(um)o(b)q(ered)d(from)g(100A)i(through)h(117E)f(and)g(the)f(TCC)h
+(b)q(o)o(xes)g(are)f(n)o(um)o(b)q(ered)e(001A)j(through)112
+2126 y(017D;)c(y)o(ou)f(ma)o(y)e(c)o(ho)q(ose)j(an)o(y)e(one\).)20
+b(The)11 b(T)918 2137 y(E)945 2126 y(X)p Fh(r)o(o)o(x)e
+Fk(reference)h(card)g(is)h(included)f(in)g(App)q(endix)g(J)112
+2226 y(of)17 b(this)f(man)o(ual.)210 2325 y(A)f(second)h(w)o(a)o(y)f
+(is)h(to)g(prin)o(t)e(y)o(our)i(thesis)f(on)h(a)g(laser)g(prin)o(ter)e
+(attac)o(hed)i(to)g(the)f(computer)112 2425 y(system)h(y)o(ou)h
+(usually)f(w)o(ork)h(on,)g(and)g(then)g(ha)o(v)o(e)f(one)h(of)g(the)g
+(cop)o(y)f(cen)o(ters)g(cop)o(y)g(y)o(our)h(thesis)112
+2525 y(on)i(blueline.)26 b(T)l(o)19 b(a)o(v)o(oid)f(pap)q(er)h(jams,)f
+(blueline)e(pap)q(er)j(is)f Fd(not)h Fk(allo)o(w)o(ed)e(in)h(EE)h
+(Departmen)o(t)112 2624 y(prin)o(ters.)p eop
+%%Page: 9 14
+9 13 bop 1888 -118 a Fk(9)210 123 y(P)o(ap)q(er)24 b(is)g(exp)q(ensiv)o
+(e.)44 b(Do)24 b(not)h(run)f(more)f(than)i(one)f(\014nal)g(cop)o(y)g
+(of)g(y)o(our)g(thesis)g(or)112 223 y(dissertation)18
+b(on)f(EE)g(Departmen)o(t)f(prin)o(ters.)22 b(T)l(ak)o(e)16
+b(y)o(our)h(\014nal)g(v)o(ersion)f(to)i(a)f(cop)o(y)g(cen)o(ter)e(to)
+112 322 y(obtain)i(additional)g(copies.)210 422 y(Sometimes)23
+b(a)j(laser)g(prin)o(ter)f(ma)o(y)g(b)q(e)h(out)h(of)f(adjustmen)o(t)f
+(and)h(y)o(our)g(output)h(ma)o(y)112 521 y(not)e(b)q(e)g(within)f(the)g
+(blue)g(line)g(\(try)g(to)h(\014nd)f(a)h(sheet)f(of)h(blueline)e(pap)q
+(er)i(to)g(c)o(hec)o(k)e(y)o(our)112 621 y(output\).)52
+b(T)l(o)27 b(alter)f(the)g(left/righ)o(t)f(orien)o(tation)h(on)h(the)f
+(page,)j(c)o(hange)d(the)g(parameter)112 721 y Fg(\\oddsidemar)o(gin)18
+b Fk(\(see)k(p.163)g(of)h(the)e(L)895 715 y Fh(a)919
+721 y Fk(T)946 736 y(E)973 721 y(X)h(b)q(o)q(ok\),)i(and)f(to)f(alter)f
+(the)h(top/b)q(ottom)g(ori-)112 820 y(en)o(tation)15
+b(c)o(hange)g(the)g(parameter)f Fg(\\topmargin)p Fk(,)d(whic)o(h)k(is)g
+(initially)e(set)i(at)g Fj(\000)p Fi(:)p Fk(15)h(inc)o(hes.)j(F)l(or)
+112 920 y(example,)c(if)h(the)g(laser)h(prin)o(ter)e(is)i(prin)o(ting)f
+(y)o(our)h(thesis)f(.25)h(inc)o(hes)f(to)q(o)i(far)f(to)g(the)f(left,)g
+(y)o(ou)112 1020 y(will)21 b(w)o(an)o(t)h(to)g(increase)f(the)h
+Fg(\\oddsidema)o(rg)o(in)p Fk(.)35 b(Since)21 b(the)g
+Fg(\\oddsidemar)o(gi)o(n)e Fk(is)j(initially)112 1119
+y(set)d(at)h(.25)f(inc)o(hes,)f(y)o(ou)h(will)f(w)o(an)o(t)h(to)g(c)o
+(hange)g(it)g(to)g(0.5)h(inc)o(hes)e(b)o(y)g(placing)h(the)g(command)
+112 1219 y Fg(\\setlength{)o(\\od)o(dsi)o(dem)o(ar)o(gin)o(}{0)o(.5)o
+(in})e Fk(in)o(to)k(y)o(our)g(main)e(\014le)h(\()p Fg(thesis.tex)p
+Fk(\))e(righ)o(t)i(b)q(e-)112 1318 y(fore)d(the)g Fg(\\begin{doc)o(ume)
+o(nt})c Fk(statemen)o(t.)22 b(If)16 b(y)o(our)h(thesis)f(is)h(b)q(eing)
+g(prin)o(ted)f(.25)h(inc)o(hes)f(to)q(o)112 1418 y(far)h(to)g(the)f
+(righ)o(t,)f(y)o(ou)h(can)h(set)f(the)g Fg(\\oddsidem)o(arg)o(in)d
+Fk(to)j Fg(0in)g Fk(in)g(the)g(same)f(manner.)112 1594
+y(F.)49 b(Using)16 b(a)g(Sp)q(elling)g(Chec)o(k)o(er)112
+1743 y(After)g(y)o(ou)g(ha)o(v)o(e)f(t)o(yp)q(ed)h(in)g(y)o(our)g
+(thesis,)g(it)g(is)g(a)g(go)q(o)q(d)j(idea)c(to)i(run)f(y)o(our)h(do)q
+(cumen)o(t)d(through)112 1842 y(a)h(sp)q(elling)f(c)o(hec)o(k)e
+(program.)21 b(There)13 b(are)i(a)f(n)o(um)o(b)q(er)f(of)h(di\013eren)o
+(t)f(sp)q(elling)h(programs)g(installed)112 1942 y(on)g(the)e(campus)g
+(computers.)19 b(If)12 b(p)q(ossible,)i(y)o(ou)e(probably)i(w)o(an)o(t)
+e(to)h(use)g(one)g(that)h(understands)112 2042 y(that)j(T)245
+2052 y(E)272 2042 y(X)f(and)h(L)432 2036 y Fh(a)456 2042
+y Fk(T)483 2057 y(E)510 2042 y(X)f(commands)f(should)h(not)h(b)q(e)f
+(\015agged)i(as)f(sp)q(elling)e(errors.)210 2141 y(On)j(VENUS)g(the)g
+(public)g(domain)f(sp)q(elling)h(program)g(installed)g(automatically)e
+(selects)112 2241 y(T)139 2252 y(E)167 2241 y(X/L)240
+2235 y Fh(a)264 2241 y Fk(T)291 2256 y(E)318 2241 y(X)g(mo)q(de.)k(T)l
+(o)d(c)o(hec)o(k)d(the)i(sp)q(elling)g(of)h(a)f(\014le)g
+Fg(junk.tex)d Fk(issue)j(the)g(command)343 2383 y Fg(spell)24
+b(junk.tex)210 2525 y Fk(On)11 b(ee)f(and)i(eemips)c(there)i(are)h(t)o
+(w)o(o)g(sp)q(elling)f(programs)h(that)h(can)f(b)q(e)g(used)g(with)f(T)
+1731 2535 y(E)1758 2525 y(X/L)1831 2519 y Fh(a)1855 2525
+y Fk(T)1882 2540 y(E)1910 2525 y(X.)112 2624 y(There)22
+b(is)f(an)h(in)o(teractiv)o(e)c(program)k Fg(ispell)p
+Fk(.)34 b(See)21 b(the)g(man)o(ual)f(page)i(for)g(information)e(on)p
+eop
+%%Page: 10 15
+10 14 bop 112 -100 a Fk(10)112 123 y Fg(ispell)p Fk(.)35
+b(Y)l(ou)21 b(can)g(also)h(use)f(the)g(follo)o(wing)g(metho)q(d)g(to)g
+(obtain)h(a)g(list)e(of)i(the)f(missp)q(elled)112 223
+y(w)o(ords)c(and)g(then)f(correct)g(them)e(using)j(an)g(editor:)p
+eop
+%%Page: 11 16
+11 15 bop 1864 -118 a Fk(11)343 123 y Fg(detex)24 b(<)h(file.tex)e(>)i
+(junk)343 173 y(spell)f(junk)g(>)h(misspell)112 326 y
+Fk(The)14 b(\014le)f Fg(misspell)e Fk(will)i(con)o(tain)g(a)h(list)f
+(of)h(the)f(missp)q(elled)f(w)o(ords.)21 b(If)13 b(y)o(ou)h(missp)q
+(ell)d(the)j(same)112 426 y(w)o(ord)21 b(sev)o(eral)d(times,)h(it)g
+(will)g(only)h(b)q(e)g(listed)f(once.)31 b(Therefore,)20
+b(b)q(e)g(sure)g(to)g(searc)o(h)g(for)g(all)112 526 y(o)q(ccurrences.)p
+eop
+%%Page: 12 17
+12 16 bop 112 -100 a Fk(12)863 123 y(CHAPTER)16 b(I)q(I)662
+306 y(USING)f(THE)h(THESIS)g(MA)o(CR)o(OS)112 405 y(A.)48
+b(The)17 b(Title)e(P)o(age)112 554 y(The)j(\014le)e(whic)o(h)h(y)o(ou)g
+(will)f(b)q(e)h(using)h(is)f(called)f Fg(title.tex)o
+Fk(.)22 b(After)16 b(cop)o(ying)h(this)g(\014le)f(to)i(y)o(our)112
+654 y(directory)l(,)13 b(edit)g(it)f(and)i(replace)f(the)g(data)h
+(enclosed)f(within)f(the)h(braces)h(with)f(the)g(appropriate)112
+753 y(information)20 b(for)h(y)o(our)g(particular)f(thesis.)34
+b(Remem)n(b)q(er)18 b(to)j(enclose)f(all)g(of)h(the)f(parameters)112
+853 y(within)g(braces.)33 b(As)19 b(required)g(b)o(y)h(the)g(Thesis)g
+(Man)o(ual,)g(the)g(mon)o(th)f(m)o(ust)f(b)q(e)j(either)e(Ma)o(y)l(,)
+112 953 y(August,)e(or)g(Decem)o(b)q(er.)i(The)d(follo)o(wing)g(is)g
+(the)h(\014le)e Fg(title.tex)e Fk(that)k(y)o(ou)f(ha)o(v)o(e)g(copied)g
+(in)o(to)112 1052 y(y)o(our)h(accoun)o(t:)112 1189 y
+Fg(\\maketitlep)o(age)112 1251 y({First)24 b(Line)g(of)h(Title\\\\)e
+(Second)g(Line)i(of)g(Title})49 b(\045)25 b(For)f(one-line)f(title,)
+1292 1314 y(\045)i(delete)e(the)i("\\\\")112 1376 y({Your)f(Full)g
+(Name})112 1438 y({Degree})228 b(\045)26 b(For)e(example,)f(`Master)g
+(of)i(Science')548 1500 y(\045)h(or)e(`Doctor)f(of)i(Philosophy')112
+1563 y({Month)f(Year})112 1625 y({Major)g(Subject})48
+b(\045)26 b(For)e(example,)f(`Electric)o(al)f(Engineering)o(')112
+1799 y Fk(No)o(w)17 b(run)f(L)325 1793 y Fh(a)349 1799
+y Fk(T)376 1814 y(E)403 1799 y(X)g(on)h(the)f(mo)q(di\014ed)f(\014le)h
+Fg(titlepage)o(.te)o(x)d Fk(as)k(usual.)112 1973 y(B.)48
+b(The)17 b(Appro)o(v)m(al)f(P)o(age)112 2122 y(W)l(e)f(ha)o(v)o(e)f
+(created)g(four)h(forms)f(of)h(the)f(Appro)o(v)m(al)g(P)o(age)h(to)g
+(accommo)q(date)e(the)i(most)f(common)112 2222 y(organizations)22
+b(of)f(the)g(Advisory)f(Committee)o(.)32 b(Use)20 b(only)h
+Fe(one)g Fk(of)g(the)f(follo)o(wing)h Fe(Appr)n(oval)112
+2322 y(Page)d Fk(macros:)172 2484 y(1.)24 b(F)l(or)17
+b(One)f(c)o(hairman)e(and)j(3)g(mem)o(b)q(ers)c(use)j
+Fg(\\approvalon)o(e)172 2624 y Fk(2.)24 b(F)l(or)17 b(One)f(c)o
+(hairman)e(and)j(4)g(mem)o(b)q(ers)c(use)j Fg(\\approvaltw)o(o)p
+eop
+%%Page: 13 18
+13 17 bop 1864 -118 a Fk(13)172 123 y(3.)24 b(F)l(or)17
+b(Tw)o(o)g(Co{Chairmen)e(and)i(2)g(mem)o(b)q(ers)c(use)j
+Fg(\\approvalth)o(ree)172 269 y Fk(4.)24 b(F)l(or)17
+b(Tw)o(o)g(Co{Chairmen)e(and)i(3)g(mem)o(b)q(ers)c(use)j
+Fg(\\approvalfo)o(ur)210 443 y Fk(If)g(y)o(ou're)f(not)i(in)f(one)h(of)
+f(these)g(categories,)g(either)g(c)o(hange)g(y)o(our)g(Advisory)g
+(Committee)112 542 y(or)22 b(cop)o(y)e Fg(eethetitle.)o(sty)d
+Fk(in)o(to)k(y)o(our)g(directory)f(and)h(edit)f(the)h(appro)o(v)m(al)h
+(page)f(macro)f(at)112 642 y(y)o(our)d(o)o(wn)f(risk!)210
+742 y(Y)l(ou)d(will)e(edit)h(one)h(of)g(the)f(appro)o(v)m(al)h(page)h
+(\014les)e(in)g(the)g(same)g(manner)f(that)j(y)o(ou)e(did)g(when)112
+841 y(creating)k(the)g(titlepage.)21 b(Remem)n(b)q(er)14
+b(to)i(enclose)g(all)f(of)i(the)f(parameters)f(within)h(braces.)210
+941 y(Examples)j(of)h(eac)o(h)g(of)g(the)g(appro)o(v)m(al)h(\014les)e
+(are)i(sho)o(wn)f(b)q(elo)o(w;)i(they)e(can)g(b)q(e)g(found)h(in)112
+1040 y Fg(approval.te)o(x)p Fk(.)30 b(Study)21 b(the)f(Thesis)g(Man)o
+(ual)g(for)h(additional)f(detailed)g(information.)32
+b(Use)112 1140 y(one)17 b(of)f(the)g(follo)o(wing)g(and)h(delete)e(the)
+h(others.)22 b(F)l(or)16 b(a)h(single)f(line)f(title)g(delete)g(the)h
+Fg(`\\\\')p Fk(.)112 1317 y Fg(\\approvalon)o(e)112 1379
+y({First)24 b(Line)g(of)h(Title\\\\)e(Second)g(Line)i(of)g(Title})112
+1441 y({Your)f(Full)g(Name})112 1503 y({Chairman's)e(name})112
+1566 y({Member's)h(Name})112 1628 y({Member's)g(Name})112
+1690 y({Member's)g(Name})112 1752 y({Head)h(of)h(Department')o(s)d
+(Name})112 1815 y({Month)i(Year})112 1939 y(\\approvaltw)o(o)112
+2001 y({First)g(Line)g(of)h(Title\\\\)e(Second)g(Line)i(of)g(Title})112
+2064 y({Your)f(Full)g(Name})112 2126 y({Chairman's)e(name})112
+2188 y({Member's)h(Name})112 2251 y({Member's)g(Name})112
+2313 y({Member's)g(Name})112 2375 y({Member's)g(Name})112
+2437 y({Head)h(of)h(Department')o(s)d(Name})112 2500
+y({Month)i(Year})112 2624 y(\\approvalth)o(ree)p eop
+%%Page: 14 19
+14 18 bop 112 -100 a Fk(14)112 123 y Fg({First)24 b(Line)g(of)h
+(Title\\\\)e(Second)g(Line)i(of)g(Title})112 185 y({Your)f(Full)g
+(Name})112 247 y({Co-Chairma)o(n's)e(name})112 310 y({Co-Chairma)o(n's)
+g(name})112 372 y({Member's)h(Name})112 434 y({Member's)g(Name})112
+497 y({Head)h(of)h(Department')o(s)d(Name})112 559 y({Month)i(Year})112
+683 y(\\approvalfo)o(ur)112 746 y({First)g(Line)g(of)h(Title\\\\)e
+(Second)g(Line)i(of)g(Title})112 808 y({Your)f(Full)g(Name})112
+870 y({Co-Chairma)o(n's)e(name})112 932 y({Co-Chairma)o(n's)g(name})112
+995 y({Member's)h(Name})112 1057 y({Member's)g(Name})112
+1119 y({Member's)g(Name})112 1181 y({Head)h(of)h(Department')o(s)d
+(Name})112 1244 y({Month)i(Year})112 1441 y Fd(Note:)d
+Fk(When)15 b(y)o(ou)h(run)g(the)g(appro)o(v)m(al)g(page,)g(y)o(ou)g(ma)
+o(y)e(get)i(some)e(\\o)o(v)o(er\014ll)h(h)o(b)q(o)o(x")h(w)o(arnings)
+112 1541 y(with)c(\\badness)h(10000.")22 b(Neglect)10
+b(these)h(w)o(arnings|h)o(b)q(o)o(xes)h(are)g(to)q(o)g(pic)o(ky!)18
+b(These)12 b(w)o(arnings)112 1641 y(are)17 b(due)f(to)h(the)f(la)o(y)o
+(out)f(of)i(the)f(appro)o(v)m(al)h(page)f(whic)o(h)g(is)g(formatted)f
+(correctly)l(.)112 1839 y(C.)65 b(The)17 b(Abstract)f(P)o(age)112
+1992 y(Y)l(ou)h(ha)o(v)o(e)f(t)o(w)o(o)h(alternativ)o(es)f(from)f(whic)
+o(h)h(to)h(c)o(ho)q(ose)h(in)e(creating)h(y)o(our)f(abstract)i(page.)23
+b(Use)112 2092 y Fg(\\absone)14 b Fk(if)i(y)o(ou)g(ha)o(v)o(e)g(one)g
+(c)o(hairman)f(on)i(y)o(our)f(Advisory)f(Committee;)e(use)j
+Fg(\\abstwo)e Fk(if)i(y)o(ou)112 2192 y(ha)o(v)o(e)g(t)o(w)o(o)g(co{c)o
+(hairmen.)k(Begin)c(b)o(y)g(editing)g(the)g(\014le)g
+Fg(abstract.t)o(ex)d Fk(and)k(replace)e(the)i(data)112
+2291 y(enclosed)f(within)g(the)h(braces)f(with)h(the)f(appropriate)h
+(information)f(for)g(y)o(our)h(thesis.)22 b(Include)112
+2391 y(the)11 b(en)o(tire)f(text)h(of)g(the)g(abstract)h(within)e(one)i
+(set)f(of)g(braces.)20 b(As)11 b(stated)g(in)g(the)g(Thesis)g(Man)o
+(ual,)112 2491 y(the)18 b(text)e(of)i(y)o(our)f(abstract)h(m)o(ust)e
+(not)h(exceed)f(350)j(w)o(ords)e(in)g(length.)24 b(The)18
+b(follo)o(wing)f(is)g(the)112 2590 y(\014le)f Fg(abstract.t)o(ex)p
+Fk(:)p eop
+%%Page: 15 20
+15 19 bop 1864 -118 a Fk(15)112 123 y Fg(\\absone)112
+185 y({First)24 b(Line)g(of)h(Title\\\\Sec)o(ond)d(Line)i(of)h(Title})
+112 247 y({Month)f(Year})112 310 y({Your)g(Full)g(Name})112
+372 y({Degree,)f(University;)o(\\\\)o(Deg)o(ree)o(,)f(University})g
+(\045)j(Degrees)e(ALREADY)g(RECEIVED,)1010 434 y(\045)i(e.g.)f({B.S.,)g
+(Rice)g(Universit)o(y;\\)o(\\)1010 497 y(\045)h(M.S.,)f(Texas)g(A\\&M)g
+(Universit)o(y})1010 559 y(\045)h(If)g(only)f(one)h(degree,)e(delete)g
+(`;\\\\')112 621 y({Chairman's)f(name})112 683 y({Place)i(your)g
+(abstract)f(between)g(these)h(braces.)f(The)h(text)g(of)h(your)f
+(abstract)112 746 y(must)h(not)f(exceed)g(350)g(words.)g(Place)f(your)i
+(abstract)d(between)h(these)h(braces.)112 808 y(The)h(text)f(of)h(your)
+f(abstract)f(must)h(not)h(exceed)e(350)i(words.})112
+932 y(\\abstwo)112 995 y({First)f(Line)g(of)h(Title\\\\Sec)o(ond)d
+(Line)i(of)h(Title})112 1057 y({Month)f(Year})112 1119
+y({Your)g(Full)g(Name})112 1181 y({Degree,)f(University;)o(\\\\)o(Deg)o
+(ree)o(,)f(University})112 1244 y({Co-Chairma)o(n's)g(name})112
+1306 y({Co-Chairma)o(n's)g(name})112 1368 y({Place)i(your)g(abstract)f
+(between)g(these)h(braces.)f(The)h(text)g(of)h(your)f(abstract)112
+1431 y(must)h(not)f(exceed)g(350)g(words.)g(Place)f(your)i(abstract)d
+(between)h(these)h(braces.)112 1493 y(The)h(text)f(of)h(your)f
+(abstract)f(must)h(not)h(exceed)e(350)i(words.})112 1680
+y Fk(D.)49 b(The)16 b(Dedication)g(P)o(age)h(\(optional\))112
+1831 y(Y)l(ou)i(ma)o(y)d(include)h(a)h(dedication)g(in)g(y)o(our)g
+(thesis)g(if)f(y)o(ou)h(lik)o(e.)25 b(Using)18 b(the)g
+Fg(\\dedicate)d Fk(com-)112 1931 y(mand,)g(y)o(ou)g(can)h(en)o(ter)e
+(in)i(as)g(man)o(y)e(names)g(as)i(will)f(\014t)g(on)h(one)g(line.)k(W)l
+(e)15 b(recommend)d(one)k(or)112 2030 y(t)o(w)o(o)f(names)f(only)l(.)20
+b(If)14 b(y)o(ou)h(do)g(not)g(wish)f(to)h(ha)o(v)o(e)f(this)h(page,)g
+(do)g(not)g(include)e(it)h(when)h(y)o(ou)f(run)112 2130
+y(y)o(our)j(\014nal)f(thesis)g(cop)o(y)l(.)21 b(The)16
+b(\014le)g(that)g(y)o(ou)g(will)g(b)q(e)g(editing)f(\()p
+Fg(ded.tex)p Fk(\))f(lo)q(oks)j(lik)o(e)d(this:)112 2327
+y Fg(\\dedicate{N)o(ame)o(})210 2525 y Fk(F)l(or)k(example,)d(if)i(y)o
+(ou)h(replaced)f(the)g(w)o(ord)h(\\Name")f(in)g(the)h(ab)q(o)o(v)o(e)f
+(\014le)g(with)h(\\Suzanne)112 2624 y(and)h(Donna,")g(then)f(y)o(ou)g
+(w)o(ould)g(get)g(the)f(follo)o(wing)h(line)e(appropriately)i(spaced)g
+(on)h(its)e(o)o(wn)p eop
+%%Page: 16 21
+16 20 bop 112 -100 a Fk(16)112 123 y(page:)763 223 y(T)l(o)17
+b(Suzanne)f(and)h(Donna)112 423 y(E.)49 b(The)16 b(Ac)o(kno)o(wledgmen)
+o(t)d(P)o(age)k(\(optional\))112 574 y(The)e(\014le)f(whic)o(h)g(y)o
+(ou)g(will)g(b)q(e)g(using)h(is)f(called)g Fg(ack.tex)p
+Fk(.)k(Begin)c(b)o(y)g(editing)g(this)g(\014le)g(inserting)112
+674 y(the)19 b(data)g(appropriate)g(for)g(y)o(our)g(thesis.)27
+b(Place)18 b(the)h(en)o(tire)e(text)h(of)h(y)o(our)f(ac)o(kno)o
+(wledgmen)o(t)112 773 y(within)d(one)g(set)f(of)i(braces.)k(If)15
+b(y)o(ou)f(do)i(not)f(wish)g(to)g(ha)o(v)o(e)f(this)h(page,)g(do)g(not)
+h(include)d(it)h(when)112 873 y(y)o(ou)j(run)f(y)o(our)g(\014nal)h
+(thesis)f(cop)o(y)l(.)k(The)d(follo)o(wing)e(is)i(the)f(\014le)f
+Fg(ack.tex)p Fk(:)112 1054 y Fg(\\acknow{Pla)o(ce)22
+b(your)j(acknowled)o(gm)o(ent)d(within)h(these)h(braces.})112
+1240 y Fk(F.)49 b(T)l(able)16 b(of)g(Con)o(ten)o(ts,)g(List)h(of)f(T)l
+(ables,)g(and)h(List)f(of)h(Figures)112 1353 y(Latex)12
+b(will)d(automatically)g(generate)i(these)g(for)g(y)o(ou)f(if)h(y)o(ou)
+f Fg(\\include)e Fk(a)k(\014le)e(suc)o(h)g(as)i Fg(lists.tex)112
+1416 y Fk(sho)o(wn)17 b(here:)112 1528 y Fg(\\pagestyle{)o(hea)o(din)o
+(gs})112 1590 y(\\setlength{)o(\\he)o(adh)o(eig)o(ht)o(}{3)o(6pt)o(})
+112 1653 y(\\tableofcon)o(ten)o(ts)112 1715 y(\\listoftabl)o(es)112
+1777 y(\\listoffigu)o(res)112 1927 y Fk(If)12 b(y)o(ou)g(ha)o(v)o(e)g
+(only)f(one)i(table)f(or)g(\014gure)h(\(or)f(no)h(tables)f(or)g
+(\014gures\),)h(y)o(ou)f(do)h(not)g(need)e(to)i(include)112
+2026 y(a)21 b(listing,)g(and)g(y)o(ou)g(can)f(therefore)g(delete)g(the)
+g(appropriate)h(command)e(from)g Fg(lists.tex)p Fk(.)112
+2126 y(Ev)o(ery)f(time)e(y)o(ou)j(use)f(a)h Fg(\\chapter)p
+Fk(,)d Fg(\\section)p Fk(,)f Fg(\\subsection)o Fk(,)h(or)j
+Fg(\\appendix)c Fk(command,)112 2226 y(an)g(en)o(try)e(will)f(b)q(e)i
+(created)g(in)f(the)h(T)l(able)f(of)h(Con)o(ten)o(ts.)21
+b(An)13 b(en)o(try)g(will)g(also)h(b)q(e)g(automatically)112
+2325 y(generated)k(for)f(the)g(References)f(and)i(Vita)f(pages.)25
+b(T)l(able)17 b(and)h(\014gure)f(en)o(tries)f(are)i(generated)112
+2425 y(b)o(y)k(the)f Fg(\\caption)e Fk(command.)36 b(Remem)n(b)q(er)19
+b(that)j(if)g(y)o(ou)f(mak)o(e)f(an)o(y)i(c)o(hanges)g(that)g(a\013ect)
+112 2525 y(these)15 b(lists,)g(y)o(ou)g(m)o(ust)f(L)573
+2519 y Fh(a)597 2525 y Fk(T)624 2540 y(E)651 2525 y(X)h(y)o(our)g(en)o
+(tire)f(do)q(cumen)o(t)f(to)j(up)q(date)g(the)f Fg(.aux)f
+Fk(\014les)g(b)q(efore)i(y)o(ou)112 2624 y(try)g(to)h
+Fg(\\include{l)o(ist)o(s})c Fk(to)j(generate)h(y)o(our)f(up)q(dated)h
+(lists.)p eop
+%%Page: 17 22
+17 21 bop 1864 -118 a Fk(17)210 123 y(If)19 b(y)o(our)f(T)l(able)h(of)g
+(Con)o(ten)o(ts)g(is)g(pro)q(duced)g(in)g(suc)o(h)g(a)g(w)o(a)o(y)g
+(that)g(there)g(are)g(no)g(c)o(hapter)112 223 y(en)o(tries)i(on)g(a)h
+(particular)f(page)g(\(see)g(the)g(second)g(page)h(of)g(the)e(T)l(able)
+i(of)f(Con)o(ten)o(ts)g(of)h(this)112 322 y(man)o(ual)14
+b(for)h(an)g(example\),)d(the)i(Thesis)h(Clerk)f(will)f(not)i(appro)o
+(v)o(e)f(y)o(our)h(thesis.)20 b(Y)l(ou)15 b(ha)o(v)o(e)f(t)o(w)o(o)112
+422 y(options:)32 b(either)20 b(white-out)h(the)f(w)o(ord)i(\\CHAPTER")
+f(and)h(ha)o(v)o(e)e(that)h(page)h(photo)q(copied)112
+521 y(on)o(to)d(blueline)e(pap)q(er,)i(or)g(force)f(a)g(pagebreak)h(b)o
+(y)f(putting)h(the)f(follo)o(wing)g(command)e(at)j(the)112
+621 y(b)q(eginning)e(of)g(one)f(of)h(y)o(our)f(c)o(hapter)f(\014les:)
+112 748 y Fg(\\addtoconte)o(nts)o({to)o(c}{)o(\\p)o(rot)o(ect)o(\\n)o
+(ewp)o(age)o(})112 876 y Fd(Note:)j Fk(Y)l(ou)11 b(ma)o(y)f(see)g(some)
+g(\\underfull)g(vb)q(o)o(x")i(w)o(arnings)f(when)g(running)g
+Fg(lists.tex)p Fk(.)16 b(Ignore)112 976 y(these)g(w)o(arnings;)h(they)f
+(are)g(due)g(to)h(the)f(format)f(of)i(these)f(pages.)112
+1148 y(G.)49 b(The)16 b(Reference)f(P)o(age)565 1297
+y(1.)49 b(The)16 b(L)764 1291 y Fh(a)788 1297 y Fk(T)815
+1312 y(E)842 1297 y(X)g(Bibliograph)o(y)f(En)o(vironmen)o(t)112
+1429 y(Y)l(ou)e(ha)o(v)o(e)g(t)o(w)o(o)f(c)o(hoices)g(of)i(ho)o(w)f(to)
+g(do)h(y)o(our)e(references.)19 b(The)13 b(\014rst)g(is)g(to)g(use)g
+(the)g(bibliograph)o(y)112 1528 y(en)o(vironmen)o(t)g(describ)q(ed)j
+(in)f(the)h(L)760 1522 y Fh(a)784 1528 y Fk(T)811 1543
+y(E)838 1528 y(X)f(man)o(ual.)20 b(This)c(will)f(pro)q(duce)h(the)g
+(appropriate)g(page)112 1628 y(headings)f(for)g(y)o(our)f(bibliograph)o
+(y)g(and)h(will)e(also)i(create)f(the)g(appropriate)h(T)l(able)f(of)h
+(Con)o(ten)o(ts)112 1728 y(en)o(try)l(.)27 b(The)19 b(L)376
+1722 y Fh(a)400 1728 y Fk(T)427 1743 y(E)454 1728 y(X)f(man)o(ual)f
+(can)i(sho)o(w)g(y)o(ou)f(ho)o(w)h(to)g(do)g(this.)28
+b(Be)17 b(sure)i(to)g(tak)o(e)e(adv)m(an)o(tage)112 1827
+y(of)k(the)f(automatic)f(referencing)f(facilit)o(y)g(o\013ered)j(b)o(y)
+e(L)1156 1821 y Fh(a)1180 1827 y Fk(T)1207 1842 y(E)1234
+1827 y(X.)h(The)g Fg(\\cite{})d Fk(command)h(and)112
+1927 y(the)c(other)h(facets)f(of)g(automatic)f(referencing)g(are)h
+(explained)f(in)h(Section)g(C.10.3)g(of)h(the)f(L)1798
+1921 y Fh(a)1822 1927 y Fk(T)1849 1942 y(E)1876 1927
+y(X)112 2026 y(Users)k(Guide.)26 b(It)18 b(can)g(b)q(e)g(v)o(ery)f(b)q
+(ene\014cial)g(to)h(use)g Fg(\\cite{})d Fk(to)k(note)f(y)o(our)g
+(citations)f(rather)112 2126 y(than)i(n)o(um)o(b)q(ering)d(them)h(y)o
+(ourself,)g(esp)q(ecially)g(if)g(y)o(ou)h(decide)f(to)i(delete)d(or)j
+(add)f(an)h(en)o(try)e(to)112 2226 y(y)o(our)k(bibliograph)o(y)l(.)32
+b(L)548 2220 y Fh(a)572 2226 y Fk(T)599 2241 y(E)626
+2226 y(X)20 b(will)f(ren)o(um)o(b)q(er)f(all)i(of)h(y)o(our)f
+(citations)g(automatically)l(.)31 b(If)20 b(y)o(ou)112
+2325 y(wish)d(to)g(pro)q(duce)g(y)o(our)g(bibliograph)o(y)f(this)h(w)o
+(a)o(y)l(,)e(y)o(ou)i(can)g(edit)f(the)g(\014le)g Fg(bib.tex)e
+Fk(and)j(use)g(a)112 2425 y(`\045')d(to)g(commen)o(t)d(out)k(the)f
+Fg(\\include{bi)o(bli)o(o})d Fk(command)h(in)i(y)o(our)g(main)f
+(\014le.)20 b(Examples)13 b(of)112 2525 y(references)e(formatted)h
+(according)g(to)h(the)f(journal)h(mo)q(del)e Ff(IEEE)i(T)l(ransactions)
+g(on)g(Automatic)112 2624 y(Con)o(trol)k Fk(are)f(giv)o(en)g(b)q(elo)o
+(w.)p eop
+%%Page: 18 23
+18 22 bop 112 -100 a Fk(18)112 123 y Fg(\\begin{theb)o(ibl)o(iog)o(rap)
+o(hy)o(}{1)o(0})112 247 y(\\bibitem{JA)o(:1})112 310
+y(Joe)25 b(Author,)e(``Title)g(of)i(report,'')d(Research)h(Report~23,)f
+(Department)g(of)164 372 y(Publicati)o(on,)g(Name)i(of)h(University)o
+(,)e(City,)g(State,)h(October)f(1999.)112 497 y(\\bibitem{AA)o(JA:)o
+(1})112 559 y(Arthur)h(Author)f(and)i(Joe)f(Author,)f(``Title)h(of)g
+(journal)g(article,')o(')e({\\sl)164 621 y(Title)i(of)g(Journal},)f
+(vol.~76,)f(pp.~27--45,)g(July)i(1776.)112 746 y(\\bibitem{AB)o(:1})112
+808 y(Author)g(Book,)g({\\sl)g(Title)g(of)h(Book},)e(vol.~1.)g(City,)h
+(State)g(of)h(Publicati)o(on:)164 870 y(Name)f(of)h(Publishing)d
+(Company,)g(16th)j(edition,)d(1988.)112 995 y(\\bibitem{MW)o(JCD)o(L:1)
+o(})112 1057 y(Matthew)i(Wright,)f(James)g(Chodzko,)g(and)i(Danny)e
+(Luk,)i({\\sl)f(Title)g(of)g(Book}.)164 1119 y(College)f(Station,)g
+(Texas:)g(Name)h(of)h(Publisher,)d(1988,)i(chap.~4--)o(5,)164
+1181 y(pp.~56--9)o(9.)112 1306 y(\\bibitem{HC)o(:1})112
+1368 y(Han)h(Chen,)f(``Title)f(of)i(Booklet,')o(')e(College)g(Station,)
+g(Texas,)g(Texas)h(A\\&M)164 1431 y(Universit)o(y,)e(July)j(1989.)112
+1555 y(\\bibitem{RO)o(PC:)o(1})112 1617 y(Russell~L.)d(Oertel)i(and)g
+(Pierce)g(Cantrell,)e({\\sl)i(\\LaTeX\\)f(Example)g(Manual}.)164
+1680 y(Departmen)o(t)g(of)i(Electrica)o(l)e(Engineeri)o(ng,)f(Texas)i
+(A\\&M)g(Universit)o(y,)164 1742 y(College)f(Station,)g(Texas,)g
+(September)f(1988.)112 1866 y(\\bibitem{JS)o(:1})112
+1929 y(Joseph~W.)h(Simpson,)g(``Title)g(of)h(article,'')e(in)j({\\sl)g
+(Title)e(of)i(Book}.)164 1991 y(Editor)e(of~Book,)g(Ed.,)h(City,)g
+(State)g(of)h(Publicati)o(on:)d(Name)i(of)164 2053 y(Publishin)o(g)f
+(Company,)f(1983,)i(chap.~3,)f(pp.~400--4)o(02.)112 2178
+y(\\bibitem{PR)o(:1})112 2240 y(Peter~J.)g(Rizzo,)h(Ed.,)g({\\sl)g
+(Title)g(of)h(Conferenc)o(e)e(Proceedin)o(gs})o(,)164
+2302 y(Sponsorin)o(g)g(Organizat)o(ion)o(,)g(Location)f(of)j
+(Symposium,)d(Name)i(of)164 2365 y(publisher)o(,)f(June)h(1987.)112
+2489 y(\\bibitem{AA)o(:1})112 2551 y(Arthur)g(Article,)f(``Title)g(of)i
+(conferenc)o(e)e(article,')o(')g(in)h({\\sl)h(Title)e(of)164
+2614 y(Conferenc)o(e)g(Proceedin)o(gs)f(Record},)h(Sponsoring)f
+(Organizati)o(on,)p eop
+%%Page: 19 24
+19 23 bop 1864 -118 a Fk(19)164 123 y Fg(Location)22
+b(of)j(Symposium,)d(Name)i(of)h(Publisher,)d(January)h(1989.)112
+247 y(\\bibitem{PK)o(GT:)o(1})112 310 y(P.)i(Kenneth)e(and)i(G.~E.)f
+(Taylor,)f(``Solution)f(of)j(variation)o(al)d(problems)164
+372 y(with)i(bounded)f(control)g(variables)f(by)j(means)f(of)h(the)g
+(generaliz)o(ed)164 434 y({N}ewton-)o({Ra)o(phs)o(on})d(method,'')g
+(presented)g(at)j(the)g(Symp.\\)e(on)i(Recent)164 497
+y(Advances)d(in)j(Optimizatio)o(n)e(Technique)o(s,)f(Carnegie)h
+(Inst.\\)g(of)i(Tech.,)164 559 y(Pittsburg)o(h,)d(Pa.,)j(April)e(1965.)
+112 683 y(\\bibitem{RL)o(:1})112 746 y(R.~E.)h(Larson,)f(``Title)g(of)i
+(dissertatio)o(n,')o(')d(Ph.D.)i(dissertatio)o(n,)164
+808 y(Stanford)e(University,)g(Stanford,)g(California,)g(1964.)112
+932 y(\\bibitem{EG)o(:1})112 995 y(Elaine~G.)h(Haschke,)g(``Title)g(of)
+h(thesis,'')f(Master's)g(thesis,)g(Drofnats)164 1057
+y(Universit)o(y,)f(West)j(Yellowsto)o(ne)o(,)e(Montana,)f(May)j(1993.)
+112 1181 y(\\bibitem{JS)o(:2})112 1244 y(J.~D.)f(Simon,)g(private)f
+(communica)o(tio)o(ns,)f(November)h(1963.)112 1368 y(\\end{thebib)o
+(lio)o(gra)o(phy)o(})883 1586 y Fk(2.)48 b Fh(Bib)p Fk(T)1078
+1597 y(E)1106 1586 y(X)112 1728 y(The)17 b(second)f(w)o(a)o(y)g(to)g
+(handle)g(references)f(is)h(to)h(use)f Fh(Bib)p Fk(T)1211
+1738 y(E)1238 1728 y(X.)g Fh(Bib)p Fk(T)1414 1738 y(E)1441
+1728 y(X)g(will)f(b)q(e)h(useful)g(if)g(y)o(ou)112 1827
+y(are)21 b(writing)f(other)h(pap)q(ers)g(\(p)q(ossibly)f(for)h
+(publication\))f(similar)e(to)j(y)o(our)f(thesis.)33
+b Fh(Bib)p Fk(T)1848 1838 y(E)1876 1827 y(X)112 1927
+y(allo)o(ws)18 b(y)o(ou)g(to)g(build)g(one)g(bibliographic)f(database)i
+(for)f(use)g(with)g(all)f(of)i(y)o(our)e(pap)q(ers.)27
+b(It)18 b(is)112 2026 y(explained)d(in)g(App)q(endix)g(B)g(of)h(the)g
+(L)810 2020 y Fh(a)834 2026 y Fk(T)861 2041 y(E)888 2026
+y(X)f(man)o(ual.)20 b(The)15 b(L)1242 2020 y Fh(a)1266
+2026 y Fk(T)1293 2041 y(E)1321 2026 y(X)g(man)o(ual)f(recommends)f
+(that)112 2126 y(y)o(ou)22 b(not)f(use)h Fh(Bib)p Fk(T)500
+2137 y(E)527 2126 y(X)f(for)h(just)f(one)g(pap)q(er,)i(but)f(w)o(e)e
+(think)h(it)g(should)h(b)q(e)f(used,)h(ev)o(en)e(for)112
+2226 y(just)d(y)o(our)g(thesis,)f(esp)q(ecially)f(if)h(y)o(ou)h(hate)f
+(w)o(orrying)h(ab)q(out)h(formatting)e(eac)o(h)g(en)o(try)g(of)h(y)o
+(our)112 2325 y(bibliograph)o(y)l(.)k(Another)15 b(go)q(o)q(d)j(reason)
+e(to)h(use)e Fh(Bib)p Fk(T)1121 2336 y(E)1149 2325 y(X)g(is)g(that)h
+(it)g(automatically)e(puts)i(y)o(our)112 2425 y(bibliograph)o(y)j(in)g
+(the)h(order)f(that)h(sources)f(w)o(ere)g(cited,)g(freeing)f(y)o(ou)i
+(from)e(w)o(orrying)h(ab)q(out)112 2525 y(that)e(problem)e(as)i(w)o
+(ell.)210 2624 y(Y)l(our)c(bibliographic)g(database)h(will)e(lo)q(ok)h
+(something)f(lik)o(e)g(the)h(\014le)f Fg(bibdata.bi)o(b)p
+Fk(,)e(whic)o(h)p eop
+%%Page: 20 25
+20 24 bop 112 -100 a Fk(20)112 123 y(is)21 b(sho)o(wn)g(on)f(the)g
+(follo)o(wing)g(pages)h(\(the)f(output)h(generated)f(from)f(this)i
+(\014le)e(w)o(as)i(sho)o(wn)g(in)112 223 y(the)h(previous)g(section\).)
+39 b(Y)l(ou)22 b(ma)o(y)e(notice)i(that)g(there)g(are)g(braces)g
+(around)h(a)f(few)g(of)h(the)112 322 y(w)o(ords)d(and)g(letters)e(in)g
+(the)h(database.)31 b(This)19 b(is)g(b)q(ecause)g Fh(Bib)p
+Fk(T)1340 333 y(E)1368 322 y(X)f(will)g(de-capitalize)g(all)g(of)112
+422 y(the)g(letters)f(in)h(titles,)f(except)f(for)j(the)e(\014rst)h
+(letter)f(of)h(the)g(\014rst)g(w)o(ord.)27 b(In)17 b(order)i(to)f
+(preserv)o(e)112 521 y(the)h(capitalization)f(of)h(prop)q(er)g(names)f
+(in)g(an)i(article)d(title,)h(y)o(ou)g(m)o(ust)g(enclose)g(the)g(w)o
+(ord)h(or)112 621 y(letter)c(in)h(braces)g(so)g(that)h
+Fh(Bib)p Fk(T)722 632 y(E)749 621 y(X)f(kno)o(ws)g(to)h(lea)o(v)o(e)d
+(it)h(alone.)21 b(P)o(ages)c(144{146)i(of)d(the)g(L)1798
+615 y Fh(a)1822 621 y Fk(T)1849 636 y(E)1876 621 y(X)112
+721 y(User's)f(Guide)h(will)e(help)h(y)o(ou)g(decide)g(ho)o(w)h(to)f
+(classify)g(eac)o(h)g(of)h(y)o(our)g(references.)j(Also,)c(there)112
+820 y(ha)o(v)o(e)k(b)q(een)g(some)f(minor)g(c)o(hanges)i(made)e(in)h
+Fh(Bib)p Fk(T)1101 831 y(E)1128 820 y(X)g(since)f(the)h(L)1405
+814 y Fh(a)1429 820 y Fk(T)1456 835 y(E)1484 820 y(X)g(User's)f(Guide)h
+(w)o(as)112 920 y(written.)36 b(These)21 b(c)o(hanges)g(are)g
+(explained)f(in)h(a)h(do)q(cumen)o(t)d(called)h Fh(Bib)p
+Ff(T)1546 931 y(E)1574 920 y(Xing)h Fk([5])f(that)i(is)112
+1020 y(included)16 b(in)g(App)q(endix)f(B.)185 1157 y
+Fj(\017)24 b Fk(@in)o(b)q(o)q(ok)18 b(and)g(@inpro)q(ceedings)f(are)h
+(for)f Fe(p)n(ortions)g Fk(of)h(a)f(b)q(o)q(ok)i(or)f(pro)q(ceedings)f
+(record,)234 1257 y(while)f(@b)q(o)q(ok)h(and)g(@pro)q(ceedings)g(are)f
+(for)g(the)g(en)o(tire)f(source.)185 1397 y Fj(\017)24
+b Fk(@b)q(o)q(oklet)17 b(and)g(@man)o(ual)e(are)h(formatted)g(m)o(uc)o
+(h)e(lik)o(e)g(a)j(b)q(o)q(ok.)185 1537 y Fj(\017)24
+b Fk(Y)l(ou)c(ma)o(y)d(use)i(the)g Fg(note)f Fk(\014eld)g(to)i
+(indicate)e(when)h(an)h(@unpublished)e(article)g(will)g(b)q(e)234
+1637 y(published)e(and)h(use)f(@misc)f(when)h(nothing)h(else)e(\014ts.)
+185 1777 y Fj(\017)24 b Fk(There)f(is)f(no)o(w)h(an)g(optional)h
+Fg(type)d Fk(argumen)o(t)g(in)i(@mastersthesis)e(and)j(@phdthesis)234
+1876 y(whic)o(h)15 b(y)o(ou)g(can)g(use)g(to)g(cause)g
+Fh(Bib)p Fk(T)931 1887 y(E)959 1876 y(X)f(to)i(call)e(y)o(our)h
+(reference)e(an)i(\\M.S.)g(Thesis")g(\(or)234 1976 y(whatev)o(er\))h
+(instead)g(of)h(the)f(default)g(\\Master's)g(Thesis.")112
+2126 y Fg(@techreport)o({JA)o(:1,)112 2188 y(author="Joe)22
+b(Author",)112 2251 y(title="Titl)o(e)h(of)i(Report",)112
+2313 y(type="Resea)o(rch)d(Report",)112 2375 y(institution)o(="D)o(epa)
+o(rtm)o(en)o(t)h(of)i(Publicati)o(on,)d(Name)i(of)h(University)o(",)112
+2437 y(year=1999,)112 2500 y(number=23,)112 2562 y(address="Ci)o(ty,)d
+(State",)112 2624 y(month="Octo)o(ber)o("})p eop
+%%Page: 21 26
+21 25 bop 1864 -118 a Fk(21)112 185 y Fg(@article{AA)o(JA:)o(1,)112
+247 y(author="Art)o(hur)22 b(Author)h(and)i(Joe)f(Author",)112
+310 y(title="Titl)o(e)f(of)i(Journal)e(Article",)112
+372 y(journal="Ti)o(tle)f(of)j(Journal",)112 434 y(volume=76,)112
+497 y(pages="27--)o(45")o(,)112 559 y(month="July)o(",)112
+621 y(year=1776})112 746 y(@book{AB:1,)112 808 y(author="Aut)o(hor)d
+(Book",)112 870 y(title="Titl)o(e)h(of)i(Book",)112 932
+y(address="Ci)o(ty,)d(State)i(of)h(Publicati)o(on")o(,)112
+995 y(publisher=")o(Nam)o(e)e(of)i(Publishin)o(g)d(Company",)112
+1057 y(volume=1,)112 1119 y(edition="16)o(th")o(,)112
+1181 y(year=1988})112 1306 y(@inbook{MWJ)o(CDL)o(:1,)112
+1368 y(author="Mat)o(the)o(w)h(Wright)g(and)i(James)e(Chodzko)g(and)i
+(Danny)f(Luk",)112 1431 y(title="Titl)o(e)f(of)i(Book",)112
+1493 y(chapter="4-)o(-5")o(,)112 1555 y(pages="56--)o(99")o(,)112
+1617 y(address="Co)o(lle)o(ge)d(Station,)h(Texas",)112
+1680 y(publisher=")o(Nam)o(e)g(of)i(Publisher)o(",)112
+1742 y(year=1988})112 1866 y(@booklet{HC)o(:1,)112 1929
+y(author="Han)d(Chen",)112 1991 y(title="Titl)o(e)h(of)i(Booklet",)112
+2053 y(howpublishe)o(d=")o(Tex)o(as)d(A\\&M)i(University")o(,)112
+2115 y(address="Co)o(lle)o(ge)e(Station,)h(Texas",)112
+2178 y(month="July)o(",)112 2240 y(year=1989})112 2365
+y(@manual{ROP)o(C:1)o(,)112 2427 y(author="Rus)o(sel)o(l)g(L.)i(Oertel)
+e(and)h(Pierce)g(Cantrell",)112 2489 y(title="\\LaT)o(eX\\)e(Example)h
+(Manual",)112 2551 y(organizatio)o(n=")o(Dep)o(art)o(me)o(nt)f(of)j
+(Electrical)d(Engineering)o(,)g(Texas)i(A\\&M)112 2614
+y(University")o(,)p eop
+%%Page: 22 27
+22 26 bop 112 -100 a Fk(22)112 123 y Fg(address="Co)o(lle)o(ge)22
+b(Station,)h(Texas",)112 185 y(month="Sept)o(emb)o(er")o(,)112
+247 y(year=1988})112 372 y(@incollecti)o(on{)o(JS:)o(1,)112
+434 y(author="Jos)o(eph)f(W.)j(Simpson",)112 497 y(title="Titl)o(e)e
+(of)i(Article",)112 559 y(booktitle=")o(Tit)o(le)d(of)j(Book",)112
+621 y(editor="of)d(Book,)i(Editor",)112 683 y(address="Ci)o(ty,)e
+(State)i(of)h(Publicati)o(on")o(,)112 746 y(publisher=")o(Nam)o(e)e(of)
+i(Publishin)o(g)d(Company",)112 808 y(year=1983,)112
+870 y(chapter="3")o(,)112 932 y(pages="400-)o(-40)o(2"})112
+1057 y(@proceeding)o(s{P)o(R:1)o(,)112 1119 y(title="Titl)o(e)h(of)i
+(Conferenc)o(e)e(Proceedin)o(gs")o(,)112 1181 y(editor="Pet)o(er)f(J.)j
+(Rizzo",)112 1244 y(organizatio)o(n=")o(Spo)o(nso)o(ri)o(ng)d
+(Organizatio)o(n",)112 1306 y(address="Lo)o(cat)o(ion)g(of)j(Symposium)
+o(",)112 1368 y(publisher=")o(Nam)o(e)e(of)i(publisher)o(",)112
+1431 y(month="June)o(",)112 1493 y(year=1987})112 1617
+y(@inproceedi)o(ngs)o({AA)o(:1,)112 1680 y(author=")e(Arthur)h
+(Article",)112 1742 y(title="Titl)o(e)f(of)i(Conferenc)o(e)e(Article",)
+112 1804 y(booktitle=")o(Tit)o(le)f(of)j(Conference)d(Proceeding)o(s)h
+(Record",)112 1866 y(organizatio)o(n=")o(Spo)o(nso)o(ri)o(ng)f
+(Organizatio)o(n",)112 1929 y(address="Lo)o(cat)o(ion)g(of)j(Symposium)
+o(",)112 1991 y(publisher=")o(Nam)o(e)e(of)i(Publisher)o(",)112
+2053 y(month="Janu)o(ary)o(",)112 2115 y(year=1989})112
+2240 y(@unpublishe)o(d{P)o(KGT)o(:1,)112 2302 y(author="P.)d(Kenneth)i
+(and)g(G.)h(E.)g(Taylor",)112 2365 y(title="Solu)o(tio)o(n)e(of)i
+(variation)o(al)d(problems)h(with)h(bounded)f(control)164
+2427 y(variables)f(by)j(means)f(of)h(the)f(generalized)e({N}ewton-{)o
+(Ra)o(phs)o(on})g(method",)112 2489 y(note="prese)o(nte)o(d)h(at)i(the)
+f(Symp.\\)f(on)i(Recent)f(Advances)f(in)h(Optimizatio)o(n)164
+2551 y(Technique)o(s,)e(Carnegie)h(Inst.\\)g(of)i(Tech.,)f(Pittsburgh)o
+(,)e(Pa.",)112 2614 y(month="Apri)o(l",)p eop
+%%Page: 23 28
+23 27 bop 1864 -118 a Fk(23)112 123 y Fg(year=1965})112
+247 y(@phdthesis{)o(RL:)o(1,)112 310 y(author="R.)22
+b(E.)j(Larson",)112 372 y(title="Titl)o(e)e(of)i(Dissertat)o(ion)o(",)
+112 434 y(school="Sta)o(nfo)o(rd)d(University")o(,)112
+497 y(address="St)o(anf)o(ord)o(,)h(Californi)o(a")o(,)112
+559 y(year=1964})112 683 y(@mastersthe)o(sis)o({EG)o(:1,)112
+746 y(author="Ela)o(ine)f(G.)j(Haschke",)112 808 y(title="Titl)o(e)e
+(of)i(Thesis",)112 870 y(school="Dro)o(fna)o(ts)d(University")o(,)112
+932 y(address="We)o(st)g(Yellowstone)o(,)h(Montana",)112
+995 y(month="May")o(,)112 1057 y(year="1993")o(})112
+1181 y(@misc{JS:2,)112 1244 y(author="J.)f(D.)j(Simon",)112
+1306 y(month="Nove)o(mbe)o(r",)112 1368 y(year=1963,)112
+1431 y(howpublishe)o(d=")o(pri)o(vat)o(e)d(communicati)o(ons)o("})210
+1588 y Fk(Once)d(y)o(ou)g(ha)o(v)o(e)f(created)h(y)o(our)f
+(bibliographic)h(database,)i(y)o(ou)e(are)g(ready)g(to)g(use)g(it)g(to)
+112 1687 y(automatically)i(create)g(the)g(bibliograph)o(y)h(of)g(y)o
+(our)f(thesis.)38 b(T)l(o)22 b(use)g Fh(Bib)p Fk(T)1577
+1698 y(E)1604 1687 y(X,)f(y)o(ou)h(should)112 1787 y
+Fg(\\include)15 b Fk(the)i(\014le)f Fg(biblio.tex)e Fk(\(sho)o(wn)k(b)q
+(elo)o(w\).)24 b(Also)17 b(use)g(the)g(`\045')f(to)h(commen)o(t)d(out)k
+(the)112 1887 y Fg(\\include{bi)o(b})13 b Fk(command)h(in)i(y)o(our)g
+(main)f(\014le.)369 2006 y Fg(\\bibliogra)o(ph)o(yst)o(yle)o({t)o(heu)o
+(nsr)o(t})369 2069 y(\\bibliogra)o(ph)o(y{b)o(ibd)o(at)o(a})210
+2226 y Fk(These)d(commands)f(sp)q(ecify)g(that)i(y)o(our)f(bibliograph)
+o(y)g(should)g(b)q(e)h(created)f(from)f(en)o(tries)g(in)112
+2325 y(the)j(\014le)f Fg(bibdata.bib)o Fk(.)18 b(There)13
+b(are)h(sev)o(eral)f(bibliograph)o(y)h(st)o(yles)f(that)h(can)g(b)q(e)g
+(used)g(with)g(the)112 2425 y(eethesis)i(do)q(cumen)o(t)e(st)o(yle;)h
+(the)g(st)o(yle)g Fg(theunsrt.b)o(st)d Fk(is)k(the)g(st)o(yle)f(used)h
+(in)f(the)h(examples)e(in)112 2525 y(this)h(man)o(ual.)20
+b(The)15 b(en)o(tries)f(in)h(this)f(st)o(yle)g(are)h(patterned)g(after)
+g(those)h(in)e Ff(IEEE)h(T)l(ransactions)112 2624 y(on)h(Automatic)e
+(Con)o(trol)p Fk(.)21 b(It)15 b(lists)g(the)g(sources)g(in)g(the)g
+(order)h(they)f(w)o(ere)f(cited.)20 b(There)15 b(is)g(also)p
+eop
+%%Page: 24 29
+24 28 bop 112 -100 a Fk(24)112 123 y(a)18 b(generic)e
+Fg(ieeetr.bst)o Fk(,)e(whic)o(h)j(formats)f(sources)h(similar)e(to)j
+(man)o(y)d(IEEE)j(publications.)23 b(If)112 223 y(neither)13
+b(of)h(these)g(st)o(yles)f(is)g(suitable)h(for)g(y)o(our)g(departmen)o
+(t,)e(y)o(ou)h(migh)o(t)f(consider)i Fg(acm.bst)d Fk(or)112
+322 y Fg(siam.bst)e Fk(whic)o(h)h(format)g(y)o(our)h(bibliograph)o(y)g
+(in)f(the)h(st)o(yle)f(of)h(A)o(CM)g(and)g(SIAM)f(publications.)112
+422 y(Chec)o(k)16 b(the)g Fg(tex.bibtex)c Fk(directory)k(on)g(the)g
+(mac)o(hine)e(that)j(y)o(ou)f(use)h(to)f(see)g(if)g(there)f(are)i(an)o
+(y)112 521 y(other)g Fg(.bst)e Fk(\014les)g(y)o(ou)i(can)f(use.)210
+621 y(If)g(none)g(of)h(these)e(st)o(yles)h(or)g(the)g(standard)h(st)o
+(yles)f(are)g(suitable)g(for)g(use)g(in)g(y)o(our)g(depart-)112
+721 y(men)o(t,)h(y)o(ou)i(can)f(t)o(yp)q(e)g(y)o(our)h(bibliograph)o(y)
+f(b)o(y)g(hand)h(as)g(explained)e(in)h(the)h(previous)f(section)112
+820 y(of)f(this)f(man)o(ual)f(or)h(y)o(ou)h(try)e(to)i(adapt)g(one)f
+(of)h(the)f(bibliograph)o(y)f(st)o(yles)h(\(a)g(w)o(ord)h(of)f(w)o
+(arning)112 920 y(|)f(adapting)i(an)e(existing)g(bibliograph)o(y)f(st)o
+(yle)g(is)h(not)h(a)f(trivial)f(matter\).)20 b(Alternativ)o(ely)l(,)12
+b(y)o(ou)112 1020 y(can)17 b(c)o(hec)o(k)d(the)i(L)429
+1014 y Fh(a)453 1020 y Fk(T)480 1035 y(E)508 1020 y(X)g(\014le)f(serv)o
+(er)g(at)i(Clarkson.)210 1119 y(T)l(o)j(create)e(the)g(bibliograph)o(y)
+l(,)h(y)o(ou)g(m)o(ust)e(\014rst)j(L)1146 1113 y Fh(a)1170
+1119 y Fk(T)1197 1134 y(E)1224 1119 y(X)e(eac)o(h)h(section)f(of)i(y)o
+(our)e(pap)q(er)i(so)112 1219 y(that)d Fg(.aux)e Fk(\014les)h(are)g
+(created.)21 b(After)15 b(this,)h(y)o(ou)g(t)o(yp)q(e:)369
+1398 y Fg($)25 b(bibtex)f(thesis)210 1628 y Fh(Bib)p
+Fk(T)319 1639 y(E)347 1628 y(X)10 b(will)g(then)g(create)h(a)g
+Fg(thesis.bb)o(l)d Fk(\014le)i(b)o(y)g(scanning)i(the)e
+Fg(.aux)g Fk(\014les)g(for)h Fj(n)p Fg(cite)p Fj(f)24
+b(g)112 1728 y Fk(commands.)f(Because)17 b Fh(Bib)p Fk(T)673
+1738 y(E)700 1728 y(X)g(reads)h(only)f(the)g Fg(.aux)f
+Fk(\014les,)h(it)g(do)q(esn't)g(matter)f(whic)o(h)h(\014les)112
+1827 y(y)o(ou)k(ha)o(v)o(e)e(men)o(tioned)f(in)i(an)h
+Fg(\\includeon)o(ly)c Fk(command.)31 b(It)20 b(will)f(create)h(an)g(en)
+o(try)g(in)g(the)112 1927 y(bibliograph)o(y)14 b(for)h(ev)o(ery)e
+(di\013eren)o(t)g(source)i(that)g(y)o(ou)f(cite)f(in)h(y)o(our)g(pap)q
+(er.)22 b(This)14 b Fg(.bbl)f Fk(\014le)h(will)112 2026
+y(lo)q(ok)j(v)o(ery)d(m)o(uc)o(h)g(lik)o(e)g(a)i(bibliograph)o(y)f
+(that)h(y)o(ou)g(migh)o(t)e(t)o(yp)q(e)h(in)o(to)h(a)g(L)1460
+2020 y Fh(a)1484 2026 y Fk(T)1511 2041 y(E)1538 2026
+y(X)f(\014le)h(y)o(ourself.)k(In)112 2126 y(fact,)14
+b(y)o(ou)g(ma)o(y)e(edit)i(the)f Fg(.bbl)g Fk(\014le)g(should)h(y)o(ou)
+g(\014nd)g(that)g(y)o(ou)g(w)o(ould)g(lik)o(e)e(to)i(mak)o(e)e(some)h
+(mi-)112 2226 y(nor)j(c)o(hanges)g(to)g(the)f(bibliograph)o(y)l(.)20
+b(\()p Fh(Bib)p Fk(T)944 2236 y(E)972 2226 y(X)15 b(isn't)g(p)q
+(erfect,)f(and)i(ma)o(y)e(not)i(handle)f(un)o(usual)112
+2325 y(things)j(quite)f(righ)o(t.\))25 b(Ho)o(w)o(ev)o(er,)16
+b(the)h Fg(.bbl)f Fk(\014le)h(y)o(ou)h(ha)o(v)o(e)e(edited)h(will)g(b)q
+(e)g(destro)o(y)o(ed,)g(and)h(a)112 2425 y(new)d(one)g(created)f(if)g
+(y)o(ou)g(run)h Fh(Bib)p Fk(T)798 2436 y(E)826 2425 y(X)f(again.)21
+b(The)15 b(next)f(time)e(y)o(ou)j(L)1444 2419 y Fh(a)1468
+2425 y Fk(T)1495 2440 y(E)1522 2425 y(X)f(y)o(our)h(pap)q(er)g(with)112
+2525 y Fg(\\includeonl)o(y{b)o(ibl)o(io})o Fk(,)c(the)i(bibliograph)o
+(y)h(will)e(b)q(e)i(prin)o(ted)f(as)h(if)f(y)o(ou)h(had)g(put)g(it)f
+(in)o(to)h(the)112 2624 y(thesis)j(y)o(ourself.)p eop
+%%Page: 25 30
+25 29 bop 1864 -118 a Fk(25)621 123 y(3.)49 b(Supplemen)o(tal)14
+b(Sources)i(Consulted)112 259 y(F)l(ollo)o(wing)23 b(y)o(our)h(list)e
+(of)i(references,)f(y)o(ou)g(ma)o(y)f(include)g(a)i(list)f(of)g
+(Supplemen)o(tal)e(Sources)112 359 y(Consulted)d(for)f(general)g
+(references)e(as)j(outlined)e(in)g(the)h(Thesis)g(Man)o(ual.)23
+b(Examples)15 b(of)j(this)112 459 y(are)f(sho)o(wn)g(b)q(elo)o(w.)112
+602 y Fg(\\begin{supp)o(lem)o(ent)o(s})112 664 y(\\item)24
+b(Author\(s\))f(of)i(Paper,)e(``Title)g(of)i(Paper,'')e(presented)f(at)
+112 727 y(the)j(Name)f(of)h(Conference)o(,)e(City,)g(State)h(of)h
+(Conference,)112 789 y(Date)g(of)g(Conferenc)o(e.)112
+913 y(\\item)f(Name)g(of)h(Person,)e(private)g(communicati)o(ons)o(,)g
+(Date.)112 1038 y(\\item)h(I)i(can)e(put)h(anything)d(here.)112
+1100 y(\\end{supple)o(men)o(ts})112 1163 y(\\end{docume)o(nt})210
+1343 y Fk(There)d(is)h(a)g(tric)o(k)e(y)o(ou)h(can)h(use)f(to)h(ha)o(v)
+o(e)f Fh(Bib)p Fk(T)1131 1354 y(E)1159 1343 y(X)g(mak)o(e)f(y)o(our)h
+(supplemen)o(tal)e(sources)112 1443 y(section)h(for)f(y)o(ou.)25
+b(Create)17 b(a)h(dumm)o(y)d(\014le)h(whic)o(h)h(con)o(tains)h(only)f
+(the)g Fg(\\bibliogra)o(phy)o(sty)o(le)112 1543 y Fk(command,)12
+b(the)h Fg(\\bibliogr)o(aph)o(y)d Fk(command,)h(and)j
+Fg(\\nocite)c Fk(commands.)19 b(Y)l(ou)13 b(can)g Fg(\\nocite)112
+1642 y Fk(all)22 b(of)g(y)o(our)g(supplemen)o(tal)e(sources)i(and)h
+(run)f Fh(Bib)p Fk(T)1146 1653 y(E)1174 1642 y(X)f(to)i(create)e(a)i
+Fg(.bbl)d Fk(\014le.)38 b(Y)l(ou)22 b(can)112 1742 y(then)j(edit)g(the)
+g Fg(.bbl)e Fk(\014le,)k(c)o(hanging)e(the)g(commands)e
+Fg(\\begin{theb)o(ib)o(lio)o(gra)o(phy)o(})f Fk(and)112
+1841 y Fg(\\end{thebib)o(lio)o(gra)o(phy)o(})f Fk(to)j
+Fg(\\begin{supp)o(lem)o(ent)o(s})d Fk(and)j Fg(\\end{supple)o(me)o(nts)
+o(})p Fk(.)42 b(Fi-)112 1941 y(nally)l(,)18 b(rename)e(the)i(\014le)f
+(to)i Fg(supp.tex)c Fk(and)k Fg(\\include)c Fk(it)i(in)h(y)o(our)g
+(thesis.)26 b(The)18 b(dumm)o(y)d(\014le)112 2041 y(should)i(lo)q(ok)g
+(something)e(lik)o(e)g(this:)112 2184 y Fg(\\documentst)o(yle)o({ee)o
+(the)o(si)o(s})112 2246 y(\\begin{docu)o(men)o(t})112
+2309 y(\\nocite{src)o(1})112 2371 y(\\nocite{src)o(2})112
+2433 y(\\nocite{src)o(3})112 2495 y(\\bibliograp)o(hys)o(tyl)o(e{t)o
+(he)o(sis)o(})112 2558 y(\\bibliograp)o(hy{)o(bib)o(dat)o(a})112
+2620 y(\\end{docume)o(nt})p eop
+%%Page: 26 31
+26 30 bop 112 -100 a Fk(26)112 123 y(H.)48 b(App)q(endices)112
+272 y(App)q(endices)13 b(ma)o(y)e(b)q(e)i(added)g(to)h(the)e(end)h(of)g
+(y)o(our)g(pap)q(er.)21 b(If)12 b(y)o(ou)h(c)o(ho)q(ose)h(to)f(ha)o(v)o
+(e)f(app)q(endices,)112 372 y(they)17 b(should)g(b)q(e)g(created)f(the)
+h(same)e(w)o(a)o(y)i(y)o(ou)f(w)o(ould)h(start)h(a)f(c)o(hapter)f
+(except)g(that)h(y)o(ou)f(use)112 471 y Fg(\\appendix{T)o(itl)o(e})d
+Fk(instead)j(of)h Fg(\\chapter{Ti)o(tl)o(e})p Fk(.)h(L)1195
+465 y Fh(a)1219 471 y Fk(T)1246 486 y(E)1274 471 y(X)e(will)f
+(automatically)g(lab)q(el)h(the)112 571 y(app)q(endix)25
+b(with)e(a)i(letter)d(\(i.e.,)i Fg(Appendix)f(A,)i(Appendix)d(B,)j
+(etc.)p Fk(\))e(and)h(capitalize)f(the)112 670 y(app)q(endix)17
+b(title.)j(This)c(is)g(the)g(\014le)g Fg(append.te)o(x)p
+Fk(.)112 787 y Fg(\\appendix{T)o(itl)o(e)23 b(of)i(Appendix})112
+849 y(This)g(is)g(the)f(text)g(of)h(the)g(Appendix.)d(If)j(this)f(is)h
+(the)g(first)e(appendix,)g(it)112 911 y(will)i(be)g(labeled)e(Appendix)
+f(A.)112 1165 y Fk(I.)48 b(The)17 b(Vita)e(P)o(age)112
+1314 y(The)21 b(\014le)e(whic)o(h)h(y)o(ou)g(will)f(b)q(e)h(using)g(is)
+g(called)g Fg(vita.tex)p Fk(.)30 b(Begin)19 b(b)o(y)h(inserting)f(y)o
+(our)h(brief)112 1413 y(biographical)k(sk)o(etc)o(h)d(as)j(the)f
+(parameter)f(for)h Fg(\\vita)e Fk(and)j(y)o(our)f(t)o(ypist's)f(name)f
+(\(whic)o(h)i(is)112 1513 y(probably)17 b Fe(your)f Fk(name\))g(as)h
+(the)f(parameter)f(for)i Fg(\\typist)p Fk(.)j(Y)l(our)c
+Fe(Vita)h Fk(m)o(ust)e(not)i(exceed)e(one)112 1613 y(page)j(in)f
+(length.)23 b(Y)l(ou)17 b(should)g(consult)g(the)g(Thesis)g(Man)o(ual)f
+(for)i(other)f(requiremen)n(ts)e(of)i(the)112 1712 y
+Fe(Vita)k Fk(paragraph.)34 b(Remem)n(b)q(er,)17 b(since)i(the)h(whole)g
+(paragraph)i(is)d(just)h(one)g(parameter,)g(y)o(ou)112
+1812 y(m)o(ust)12 b(use)i(only)f(one)g(set)h(of)f(braces.)21
+b(Do)14 b(not)g(enclose)e(ev)o(ery)g(line)g(y)o(ou)h(en)o(ter)g(with)g
+(braces!)20 b(This)112 1911 y(is)d(what)f(y)o(ou)h(will)e(see)h(in)g
+Fg(vita.tex)p Fk(:)112 2053 y Fg(\\vita{Place)22 b(the)j(text)f(of)h
+(your)f(Vita)g(between)f(these)h(braces.})112 2115 y(\\typist{Typ)o
+(ist)o('s)e(Name})210 2293 y Fk(If)13 b(y)o(ou)g(decide)g(that)h(y)o
+(ou)f(do)h(not)g(w)o(an)o(t)f(to)h(ac)o(kno)o(wledge)f(y)o(our)g(t)o
+(ypist)g(in)g(y)o(our)g(do)q(cumen)o(t,)112 2393 y(then)k(do)f(not)h
+(use)f(the)g Fg(\\typist)e Fk(command)g(after)i Fg(\\vita)p
+Fk(.)p eop
+%%Page: 27 32
+27 31 bop 1864 -118 a Fk(27)854 123 y(CHAPTER)16 b(I)q(I)q(I)699
+306 y(F)o(ORMA)l(TTING)f(THE)h(BOD)o(Y)112 405 y(The)g(b)q(o)q(dy)h(of)
+f(a)g(thesis)g(pro)q(duced)g(b)o(y)f(this)g(do)q(cumen)o(t)g(st)o(yle)f
+(is)i(formatted)f(using)h(the)f(journal)112 505 y Ff(IEEE)22
+b(T)l(ransactions)h(on)f(Automatic)d(Con)o(trol)j Fk(as)g(a)g(mo)q
+(del.)35 b(There)21 b(is)g(no)h Fe(simple)g Fk(w)o(a)o(y)f(to)112
+604 y(adapt)e(this)e(do)q(cumen)o(t)f(st)o(yle)h(so)h(that)g(it)f
+(follo)o(ws)g(a)h(di\013eren)o(t)e(mo)q(del.)24 b(W)l(e)17
+b(suggest)i(that)f(y)o(ou)112 704 y(either)c(use)g(this)g(system)e(as)j
+(it)f(is)g(\(assuming)f(y)o(our)h(departmen)o(t)f(will)g(appro)o(v)o(e)
+g(of)i(the)f(format\),)112 804 y(or)j(use)f(another)h(metho)q(d)f(for)g
+(writing)g(y)o(our)g(thesis.)112 981 y(A.)48 b(The)17
+b(First)e(P)o(age)i(of)g(the)f(Bo)q(dy)112 1131 y(The)e(\014rst)g(page)
+f(of)h(the)f(b)q(o)q(dy)i(of)e(y)o(our)h(thesis)f(is)g(a)h(sp)q(ecial)e
+(one.)21 b(The)13 b(page)h(n)o(um)o(b)q(ering)e(sc)o(heme)112
+1231 y(needs)h(to)g(b)q(e)g(reinitialized)e(so)i(that)g(the)g(page)h(n)
+o(um)o(b)q(ers)d(will)h(no)o(w)h(b)q(e)g(arabic)g(instead)g(of)g(roman)
+112 1330 y(n)o(umerals.)30 b(Y)l(ou)19 b(are)h(also)g(required)e(to)i
+(mak)o(e)e(a)i(fo)q(otnote)h(designating)f(the)f(journal)h(mo)q(del)112
+1430 y(y)o(ou)f(used.)30 b(W)l(e)18 b(ha)o(v)o(e)g(this)h(all)f(set)h
+(up)g(for)h(y)o(ou)e(with)h(a)g Fg(\\body)e Fk(command)g(to)j(b)q(e)f
+(used)g(after)112 1530 y(the)e(\014rst)f Fg(\\chapter)d
+Fk(command.)210 1629 y(The)20 b Fg(\\body)e Fk(command)g(is)i(allo)o(w)
+o(ed)f Fe(only)h Fk(in)f(Chapter)i(1.)32 b(If)20 b(y)o(ou)f(put)h
+Fg(\\body)f Fk(in)g(ev)o(ery)112 1729 y(c)o(hapter,)h(the)g(page)g(n)o
+(um)o(b)q(ers)f(will)f(b)q(e)i(reset)g(ev)o(ery)e(time)g(y)o(ou)i(put)g
+(the)f Fg(\\body)p Fk(.)30 b(Therefore,)112 1828 y Fe(DO)18
+b(NOT)f Fk(put)f Fg(\\body)f Fk(command)f(in)i(other)g(c)o(hapters)g
+(except)f(Chpater)i(1.)112 2006 y(B.)48 b(Headings)17
+b(for)f(Chapters,)h(Sections,)e(and)i(Subsections)112
+2156 y(No)o(w)h(y)o(ou)f(are)h(ready)f(to)h(en)o(ter)f(the)g(text)g(of)
+h(y)o(our)f(thesis.)25 b(Y)l(ou)17 b(ma)o(y)f(do)i(this)g(b)o(y)f
+(editing)g(the)112 2255 y(sample)c(c)o(hapter)g(\014les)h(whic)o(h)f(w)
+o(e)g(ha)o(v)o(e)h(pro)o(vided)f(for)h(y)o(ou.)20 b(There)14
+b(are)g(t)o(w)o(o)f(\014les:)20 b Fg(ch1.tex)11 b Fk(for)112
+2355 y(the)j(\014rst)g(c)o(hapter,)g(and)g Fg(ch2.tex)e
+Fk(for)i(all)f(subsequen)o(t)h(c)o(hapters.)20 b(Most)14
+b(theses)g(ha)o(v)o(e)f(c)o(hapters)112 2455 y(and)20
+b(sections.)27 b(V)l(ery)17 b(detailed)h(do)q(cumen)o(ts)f(often)i(ha)o
+(v)o(e)e(subsections)i(as)g(w)o(ell.)27 b(The)18 b(c)o(hapter)112
+2554 y(command)d(lo)q(oks)i(lik)o(e)d(this:)p eop
+%%Page: 28 33
+28 32 bop 112 -100 a Fk(28)292 123 y Fg(\\chapter{T)o(itl)o(e)22
+b(of)j(Chapter})112 289 y Fk(This)13 b(command)d(will)i(start)g(the)h
+(new)f(c)o(hapter)g(on)h(a)f(new)h(sheet)f(of)h(pap)q(er,)g(and)g(skip)
+f(the)g(prop)q(er)112 389 y(amoun)o(t)18 b(after)g(the)f(title)g(b)q
+(efore)h(it)f(b)q(egins)i(to)f(prin)o(t)f(y)o(our)h(text.)26
+b(Y)l(ou)18 b(do)g(not)g(need)g(to)g(lea)o(v)o(e)112
+489 y(an)o(y)d(sp)q(ecial)f(blank)h(lines)f(or)h(sp)q(ecify)f(an)o(y)h
+(spacing.)21 b(This)15 b(command)d(will)i(also)h(automatically)112
+588 y(capitalize)j(the)h(c)o(hapter)f(title;)h(it)f(is)h(the)g(only)f
+(one)i(of)f(the)g(sectioning)f(commands)f(that)j(will)112
+688 y(do)d(this.)k(The)c(c)o(hapters)f(are)g(n)o(um)o(b)q(ered)e(with)i
+(roman)g(n)o(umerals)f(automatically)l(.)292 867 y Fg(\\section{T)o(he)
+22 b(Title)i(of)h(Your)f(Section})112 1046 y Fk(The)14
+b(section)e(command,)g(sho)o(wn)i(ab)q(o)o(v)o(e,)f(will)f
+(left-justify)g(and)h(prop)q(erly)g(format)g(y)o(our)g(section)112
+1145 y(title.)20 b(The)15 b(\014rst)h(letter)e(of)h(eac)o(h)g(w)o(ord)h
+(in)f(the)g(section)f(title)g(m)o(ust)g(b)q(e)i(capitalized;)d(there)i
+(is)g(no)112 1245 y(automatic)j(capitalization.)26 b(The)19
+b(prop)q(er)f(amoun)o(t)g(of)h(spacing)f(for)h(the)f(text)f(preceding)h
+(and)112 1345 y(follo)o(wing)e(the)g(title)e(is)i(included)f(in)h(the)f
+(macro.)20 b(The)c(alphab)q(etic)g(c)o(haracters)g(that)g(lab)q(el)g
+(the)112 1444 y(sections)h(are)f(automatic!)k(Do)d(not)g(t)o(yp)q(e)f
+(them)e(in.)292 1623 y Fg(\\subsectio)o(n{T)o(he)22 b(Title)i(of)h
+(Your)f(Subsection)o(})210 1802 y Fk(This)e(command)e(cen)o(ters)h(y)o
+(our)g(subsection)h(title.)37 b(The)22 b(\014rst)g(letter)e(of)i(eac)o
+(h)g(w)o(ord)g(in)112 1902 y(a)g(subsection)f(title)e(should)j(b)q(e)f
+(capitalized;)g(there)g(is)g(no)g(automatic)f(capitalization.)34
+b(The)112 2001 y(prop)q(er)20 b(amoun)o(t)d(of)i(spacing)g(is)f
+(included)f(for)i(the)f(text)g(preceding)g(and)h(follo)o(wing)f(the)g
+(title;)112 2101 y(do)d(not)g(add)f(an)o(y)g(spacing.)21
+b(Subsections)14 b(will)f(automatically)f(b)q(e)j(assigned)f(arabic)g
+(subsection)112 2201 y(n)o(um)o(b)q(ers;)h(do)i(not)f(t)o(yp)q(e)g
+(them)f(in.)112 2376 y(C.)49 b(Equations)112 2525 y(If)13
+b(y)o(our)g(thesis)g(do)q(es)h(not)g(con)o(tain)f(complicated)e
+(mathematics,)g(the)h(material)g(in)h(Sections)g(3.3,)112
+2624 y(4.2,)19 b(and)f(App)q(endices)f(C.6)h(and)g(C.9.2)g(of)h(the)e
+(L)1036 2618 y Fh(a)1060 2624 y Fk(T)1087 2639 y(E)1114
+2624 y(X)h(man)o(ual)e(will)h(probably)h(b)q(e)g(su\016cien)o(t.)p
+eop
+%%Page: 29 34
+29 33 bop 1864 -118 a Fk(29)112 123 y(F)l(or)21 b(sophisticated)f
+(mathematics,)e(whic)o(h)i(is)g(T)1031 134 y(E)1058 123
+y(X's)f(real)h(strength,)h(y)o(ou)f(will)g(also)g(need)g(to)112
+223 y(study)d(the)f(T)358 233 y(E)385 223 y(Xb)q(o)q(ok.)210
+322 y(Y)l(ou)h(need)g(to)h(pa)o(y)f(particular)g(atten)o(tion)g(to)h
+(Section)e(4.2)i(of)g(the)f(L)1483 316 y Fh(a)1507 322
+y Fk(T)1534 337 y(E)1561 322 y(X)g(man)o(ual)f(where)112
+422 y(automated)e(n)o(um)o(b)q(ering)d(and)j(referencing)f(of)g
+(equations)h(are)f(describ)q(ed.)20 b(This)14 b(ma)o(y)e(seem)f(lik)o
+(e)112 521 y(more)17 b(trouble)g(than)h(it)e(is)i(w)o(orth.)25
+b(Ho)o(w)o(ev)o(er,)15 b(if)i(y)o(ou)g(ha)o(v)o(e)g(ev)o(er)f(remo)o(v)
+o(ed)e(an)k(equation)g(from)112 621 y(the)c(b)q(eginning)g(of)g(a)g
+(pap)q(er)g(and)g(then)f(had)i(to)f(ren)o(um)o(b)q(er)d(all)i
+(subsequen)o(t)g(equations,)h(y)o(ou)g(will)112 721 y(understand)j(ho)o
+(w)g(m)o(uc)o(h)d(w)o(ork)i(this)h(feature)e(can)i(sa)o(v)o(e)e(y)o
+(ou.)210 820 y(In)k(the)g Fg(eethesis)d Fk(do)q(cumen)o(t)i(st)o(yle,)g
+(equations)h(will)f(b)q(e)h(n)o(um)o(b)q(ered)f(b)o(y)g(c)o(hapter)h
+(\(e.g.,)112 920 y(1.1,)k(1.2,)p Fi(:)8 b(:)g(:)f Fk(2.1,)23
+b(2.2,)f(etc.\).)36 b(If)21 b(y)o(ou)g(need)g(sub)q(equations)h
+(\(e.g.,)g(1.1a,)g(1.1b,)h Fi(:)8 b(:)g(:)g Fk(\),)22
+b(see)f(the)112 1020 y(follo)o(wing)d(subsection.)24
+b(If)17 b(y)o(ou)g(ha)o(v)o(e)g(some)f(equations)i(whic)o(h)f(y)o(ou)g
+(do)h(not)g(w)o(an)o(t)f(n)o(um)o(b)q(ered,)112 1119
+y(y)o(ou)g(can)f(use)g(the)g Fg(displaymath)d Fk(en)o(vironmen)o(t)g
+(or)k(the)f Fg(\\nonumber)d Fk(command.)210 1219 y(The)20
+b Fg(\\ref{)j(})c Fk(command)f(do)q(es)i(not)g(place)f(paren)o(thesis)g
+(around)h(the)g(equations.)31 b(Y)l(ou)112 1318 y(will)12
+b(need)f(to)i(insert)f(these)g(b)o(y)f(y)o(ourself)h(\(e.g.,)g
+Fg(\(\\ref{lab)o(el)o(}\))p Fk(\).)17 b(When)12 b(y)o(ou)g(w)o(an)o(t)g
+(to)h(refer)e(to)112 1418 y(an)18 b(equation,)e(do)h
+Fd(not)f Fk(use)h(the)f(w)o(ord)h(equation)g(or)g(the)f(abbreviation)h
+(eqn.)k(Please)c(examine)112 1518 y(the)g(examples)d(in)i(App)q(endix)f
+(A.)827 1687 y(1.)48 b(Sub)q(equations)112 1819 y(If)18
+b(y)o(ou)f(w)o(an)o(t)h(the)f(equations)h(to)g(b)q(e)f(n)o(um)o(b)q
+(ered)f(as)i(sub)q(equations)h(\(e.g.,)d(1.1a,)i(1.1b,)g
+Fi(:)8 b(:)g(:)g Fk(1.1f,)112 1918 y(1.1g,)17 b(etc.\),)d(the)i(st)o
+(yle)f(\014le)g({)i Fg(subequatio)o(n.s)o(ty)o Fk(,)c(whic)o(h)i(is)h
+(in)g(the)g(st)o(yle-\014le)e(library)l(,)h(can)h(b)q(e)112
+2018 y(used.)21 b(If)11 b(y)o(ou)i(are)f(not)h(on)g Fg(ee)f
+Fk(or)h Fg(eemips)p Fk(,)d(please)i(c)o(hec)o(k)f(T)l(able)h(I)g(and)h
+(cop)o(y)f Fg(subequatio)o(n.s)o(ty)112 2118 y Fk(to)17
+b(y)o(our)f(lo)q(cal)g(directory)l(.)210 2217 y(The)e
+Fg(subequati)o(on.)o(st)o(y)d Fk(is)i(included)f(as)j(an)f(option)g(in)
+f(the)g Fg(documentst)o(yle)d Fk(as)k(follo)o(ws,)112
+2320 y Fg(\\documentst)o(yle)o([su)o(beq)o(ua)o(tio)o(n]{)o(ee)o(the)o
+(sis)o(})210 2472 y Fk(When)i(y)o(ou)g(w)o(an)o(t)h(to)f(add)h(the)f
+(sub)q(equations)h(in)o(to)f(the)g(thesis,)g(y)o(ou)g(can)g(t)o(yp)q(e)
+112 2574 y Fg(\\begin{sube)o(qua)o(tio)o(ns})138 2624
+y(\\begin{equ)o(ati)o(on})p eop
+%%Page: 30 35
+30 34 bop 112 -100 a Fk(30)164 123 y Fg(equation)22 b(1)138
+173 y(\\end{equat)o(ion)o(})164 223 y(Text)i(of)h(paragraph.)138
+272 y(\\begin{equ)o(ati)o(on})164 322 y(equation)d(2)138
+372 y(\\end{equat)o(ion)o(})112 422 y(\\end{subequ)o(ati)o(ons)o(})210
+571 y Fk(Equation)f(2)g(will)f(follo)o(w)g(equation)g(1)h(and)g(they)g
+(are)f(sub)q(equationed)h(ev)o(en)f(if)g(there)g(is)112
+670 y(some)c(text)f(in)h(b)q(et)o(w)o(een)g(them.)210
+770 y(The)g(follo)o(wing)g(is)g(a)h(simple)d(example.)19
+b(If)d(y)o(ou)g(t)o(yp)q(e,)112 869 y Fg(\\begin{sube)o(qua)o(tio)o
+(ns})138 919 y(\\begin{eqn)o(arr)o(ay})164 969 y(a)25
+b(&=&)g(b)g(+)g(c)g(+)h(d)f(\\\\)215 1019 y(&=&)g(e)g(+)g(f)g(+)h(g)f
+(\\nonumber)d(\\\\)215 1069 y(&)j(&)h(h)f(+)g(k)g(\\\\)215
+1118 y(&=&)g(x)g(+)g(y)138 1168 y(\\end{eqnar)o(ray)o(})112
+1218 y(\\end{subequ)o(ati)o(ons)o(})210 1367 y Fk(Y)l(ou)16
+b(will)f(get)i(the)f(follo)o(wing)g(equations,)868 1616
+y Fi(a)e Fk(=)f Fi(b)e Fk(+)g Fi(c)g Fk(+)g Fi(d)642
+b Fk(\(3.1a\))908 1728 y(=)13 b Fi(e)e Fk(+)g Fi(f)17
+b Fk(+)11 b Fi(g)959 1840 y(h)h Fk(+)f Fi(k)712 b Fk(\(3.1b\))908
+1952 y(=)13 b Fi(x)e Fk(+)g Fi(y)720 b Fk(\(3.1c\))210
+2102 y(Y)l(ou)11 b(can)h(refer)e(to)i(the)e(equation)i(in)e(the)h(same)
+g(manner)f(as)h(regular)h(equations.)19 b(Therefore,)112
+2201 y(y)o(ou)e(can)f(put)h Fg(\\label)d Fk(command)g(in)i(the)g(end)g
+(of)g(the)g(equation)h(and)f(then)h(use)f Fg(\\ref)f
+Fk(to)h(refer)112 2301 y(that)h(equation.)112 2475 y(D.)49
+b(T)l(ables)16 b(and)h(Figures)112 2624 y(L)124 2618
+y Fh(a)148 2624 y Fk(T)175 2639 y(E)203 2624 y(X)g(has)i(a)f
+Fg(table)e Fk(en)o(vironmen)o(t)f(and)j(a)g Fg(figure)e
+Fk(en)o(vironmen)o(t)f(so)j(that)g(y)o(ou)g(can)g(include)p
+eop
+%%Page: 31 36
+31 35 bop 1864 -118 a Fk(31)112 123 y(tables)16 b(and)h(\014gures)f(in)
+g(y)o(our)f(pap)q(ers.)22 b(The)16 b Fg(\\caption)d Fk(command)h(is)h
+(used)h(to)g(mak)o(e)e(titles)h(for)112 223 y(y)o(our)i(tables)f(and)h
+(\014gures)g(within)f(the)g(text)g(of)h(y)o(our)f(thesis.)22
+b(Lo)q(ok)c(on)f(pages)g(59,)g(72)g(and)g(177)112 322
+y(of)d(y)o(our)g(L)286 316 y Fh(a)310 322 y Fk(T)337
+337 y(E)364 322 y(X)f(man)o(ual)f(for)i(more)e(details)h(on)h
+Fg(\\caption)p Fk(.)j(Y)l(ou)d(ma)o(y)e(wish)h(to)h(use)f(the)h
+Fg(\\label)112 422 y Fk(command)i(along)j(with)f Fg(\\caption)c
+Fk(so)19 b(y)o(ou)f(can)g(automatically)e(reference)g(y)o(our)i
+(\014gures)g(and)112 521 y(tables)23 b(using)f(the)g
+Fg(\\ref)e Fk(command.)37 b(This)22 b(could)g(sa)o(v)o(e)g(y)o(ou)g
+(from)f(doing)h(a)h(great)f(deal)g(of)112 621 y(ren)o(um)o(b)q(ering)15
+b(should)h(y)o(ou)h(decide)e(to)h(add)h(or)g(delete)e(a)h(\014gure)h
+(or)f(table.)666 1046 y(1.)49 b(Creating)17 b(T)l(ables)f(and)h
+(Figures)112 1229 y(L)124 1223 y Fh(a)148 1229 y Fk(T)175
+1244 y(E)203 1229 y(X)e(is)h(v)o(ery)f(go)q(o)q(d)j(at)e(making)f
+(tables)h(and)h(simple)c(\014gures)k(suc)o(h)f(as)g(blo)q(c)o(k)g
+(diagrams.)21 b(Y)l(ou)112 1329 y(can)j(create)g(y)o(our)f(o)o(wn)h
+(tables)g(using)g(the)g Fg(tabular)d Fk(en)o(vironmen)o(t)g(and)j
+(create)g(y)o(our)f(o)o(wn)112 1429 y(\014gures)c(using)g(the)f
+Fg(picture)e Fk(en)o(vironmen)o(t)g(of)i(L)1035 1423
+y Fh(a)1059 1429 y Fk(T)1086 1444 y(E)1114 1429 y(X.)f(These)h(en)o
+(vironmen)o(ts)e(are)j(explained)112 1528 y(in)13 b(the)g(L)259
+1522 y Fh(a)283 1528 y Fk(T)310 1543 y(E)338 1528 y(X)f(User's)h
+(Guide.)19 b(Y)l(ou)14 b(will)e(need)g(to)i(lea)o(v)o(e)d(space)j(b)q
+(et)o(w)o(een)e(the)h(caption)g(and)h(y)o(our)112 1628
+y(table)19 b(and)g(b)q(et)o(w)o(een)f(y)o(our)g(\014gure)h(and)g(its)g
+(caption)f(\(see)h(examples)d(in)j(App)q(endix)e(A\).)h(Also,)112
+1728 y(the)g Fg(\\centering)c Fk(command)i(will)h(cen)o(ter)g(y)o(our)g
+(\014gure)h(or)h(table)e(if)h(it)f(is)h(included)e(just)j(after)112
+1827 y Fg(\\begin{figu)o(re})7 b Fk(or)12 b Fg(\\begin{tab)o(le})o
+Fk(.)17 b(Examples)9 b(sho)o(wing)j(the)f(use)g(of)g(these)g(en)o
+(vironmen)o(ts)112 1927 y(are)17 b(included)e(in)h(the)g(sample)f(pap)q
+(er)h(in)g(App)q(endix)g(A.)210 2026 y(The)i(caption)f(for)h(a)g
+(\014gure)g(go)q(es)g(b)q(elo)o(w)g(the)f(\014gure,)h(and)g(the)f
+(caption)h(for)f(a)h(table)f(go)q(es)112 2126 y(ab)q(o)o(v)o(e)j(the)f
+(table.)31 b(See)19 b(the)h(examples)d(in)j(App)q(endix)e(A)i(for)f
+(the)h(prop)q(er)g(placemen)o(t)d(of)j(the)112 2226 y
+Fg(\\caption{)j(})16 b Fk(command.)210 2325 y(When)e(y)o(ou)f(refer)g
+(to)i(a)f(\014gure,)g(use)g(the)f(abbreviation)h(Fig.)f(\(or)h(Figs.)f
+(for)h(sev)o(eral)f(\014gures\))112 2425 y(and)24 b(include)d(a)i(tie)e
+(\(i.e.,)h Fg(")k(~)f(")p Fk(\))d(to)h(a)o(v)o(oid)f(lea)o(ving)f
+(extra)h(space)h(or)g(line)e(breaking.)40 b(See)112 2525
+y(App)q(endix)17 b(A)f(for)i(examples.)j(Use)c(the)g(complete)d(w)o
+(ord)k(\\T)l(able")f(and)h(a)f(tie)g(for)g(referring)f(to)112
+2624 y(a)h(table.)p eop
+%%Page: 32 37
+32 36 bop 112 -100 a Fk(32)436 123 y(2.)49 b(Including)15
+b(T)l(ables)i(and)g(Figures)f(F)l(rom)f(Other)h(Sources)112
+256 y(Lea)o(ving)i(space)g(for)h(\014gures)f(and)h(tables)f(is)f
+(particularly)g(easy)h(in)g(L)1397 250 y Fh(a)1421 256
+y Fk(T)1448 271 y(E)1475 256 y(X.)f(One)h(common)e(ap-)112
+356 y(proac)o(h)e(in)f(theses)h(is)f(to)h(put)g(\014gures)g(on)g
+(separate)g(pages.)21 b(An)13 b(easy)g(w)o(a)o(y)h(to)f(lea)o(v)o(e)f
+(blank)i(pages)112 455 y(for)j(\014gures)g(and)g(still)e(k)o(eep)g(the)
+h(correct)f(page)i(n)o(um)o(b)q(ering)e(is)h(giv)o(en)f(b)q(elo)o(w.)
+112 580 y Fg(\\begin{figu)o(re})112 643 y(\\vspace{8.0)22
+b(in})537 b(\045)26 b(If)e(your)h(figure)e(does)h(not)h(require)1035
+705 y(\045)h(an)e(entire)g(page,)g(you)g(may)h(change)1035
+767 y(\045)h(`8.0)e(in')g(to)h(a)g(smaller)e(amount.)112
+830 y(\\caption{Is)o(n't)f(this)i(a)h(pretty)f(picture})112
+892 y(\\label{fig:)o(pre)o(tty)o(})112 954 y(\\end{figure)o(})210
+1116 y Fk(When)13 b(y)o(ou)f(include)g(\014gures)h(from)f(another)h
+(source,)g(one)g(w)o(a)o(y)f(to)i(do)f(it)f(is)h(to)g(use)f(L)1741
+1110 y Fh(a)1765 1116 y Fk(T)1792 1131 y(E)1820 1116
+y(X)g(to)112 1216 y(prin)o(t)k(the)g(caption)g(and)h(then)e
+(cut-and-paste)j(y)o(our)e(\014gure)g(in)o(to)g(place.)k(This)c(w)o(a)o
+(y)l(,)f(the)h(\014gure)112 1316 y(coun)o(ter)22 b(will)f(b)q(e)i
+(incremen)o(ted)c(and)k(the)f(\014gure)g(will)g(automatically)e(b)q(e)j
+(en)o(tered)e(in)o(to)h(the)112 1415 y(List)c(of)g(Figures.)25
+b(If)17 b(y)o(ou)g(c)o(ho)q(ose)h(to)g(ignore)f(our)h(advice,)f(y)o(ou)
+g(will)g(ha)o(v)o(e)f(to)i(do)g(these)f(things)112 1515
+y(y)o(ourself.)34 b(If)21 b(y)o(ou)f(use)h(\014gures)g(with)g(captions)
+g(not)g(made)f(b)o(y)g(L)1346 1509 y Fh(a)1370 1515 y
+Fk(T)1397 1530 y(E)1425 1515 y(X,)f(y)o(ou)i(m)o(ust)e(man)o(ually)112
+1615 y(mak)o(e)14 b(the)h(en)o(try)g(in)o(to)g(the)h(List)f(of)h
+(Figures)g(and)g(up)q(date)g(the)f(\014gure)h(coun)o(ter)f(b)o(y)g
+(putting)h(the)112 1714 y(follo)o(wing)g(commands)f(in)h(y)o(our)g
+(text)f(b)q(efore)i(the)f(next)g(\014gure)g(is)g(to)h(app)q(ear:)112
+1839 y Fg(\\addcontent)o(sli)o(ne{)o(lof)o(}{)o(fig)o(ure)o(}{)o(\\pr)o
+(ote)o(ct\\)o(nu)o(mbe)o(rli)o(ne{)o(n})o({ca)o(pti)o(on)o(}})112
+1901 y(\\addtocount)o(er{)o(fig)o(ure)o(}{)o(1})112 1964
+y(\\addtocount)o(er{)o(pag)o(e}{)o(1})112 2126 y Fk(If)j(y)o(ou)g(en)o
+(ter)f(more)g(than)i(one)f(\014gure,)h(y)o(ou)f(will)f(ha)o(v)o(e)g(to)
+h(use)g(sev)o(eral)f Fg(\\addcontent)o(sli)o(ne)112 2226
+y Fk(commands)c(and)i(replace)e(the)h(`1's)g(in)f(the)h(example)e(ab)q
+(o)o(v)o(e)i(with)g(the)g(n)o(um)o(b)q(er)f(of)h(\014gures)h(y)o(ou)112
+2325 y(added)g(and)g(the)f(n)o(um)o(b)q(er)e(of)j(pages)g(y)o(ou)f
+(added.)210 2425 y(Instead)d(of)f(the)g(cut)h(and)g(paste)g(metho)q(d,)
+e(it)h(is)h(also)g(p)q(ossible)f(to)h(include)e(\014gures)i(electron-)
+112 2525 y(ically)l(.)27 b(The)19 b(only)f(problem)f(with)i(including)f
+(\014gures)h(electronically)d(is)i(that)h(graphics)g(often)112
+2624 y(requires)c(lots)h(of)h(disk)e(space.)21 b(In)16
+b(the)f(follo)o(wing)h(sections,)f(w)o(e)h(describ)q(e)f(sev)o(eral)g
+(metho)q(ds)g(for)p eop
+%%Page: 33 38
+33 37 bop 1864 -118 a Fk(33)112 123 y(including)16 b(graphics.)21
+b(Sev)o(eral)15 b(of)h(the)g(programs)g(can)g(generate)f(output)i(that)
+f(can)g(b)q(e)g(prin)o(ted)112 223 y(on)23 b(either)e(the)i
+Fg(Laserjet)f(2000)f Fk(or)i(the)f(LPS20.)40 b(Our)23
+b(p)q(ersonal)g(fa)o(v)o(orite)e(is)h(to)h(generate)112
+322 y(P)o(ostScript)17 b(output)f(and)h(use)g(the)f(LPS20.)772
+494 y(3.)48 b(P)o(ostScript)17 b(Figures)112 626 y(P)o(ostScript)i(is)g
+(a)h(page)g(description)e(language)i(that)g(is)f(useful)g(for)g(do)q
+(cumen)o(ts)f(that)i(include)112 726 y(graphics.)26 b(There)18
+b(are)f(man)o(y)f(mac)o(hines)g(and)i(programs)g(that)g(can)g(generate)
+f(P)o(ostScript)h(\014g-)112 826 y(ures.)38 b(F)l(or)21
+b(example,)g(PGPLOT,)h(Fig,)g(and)h(GNUPLOT)e(describ)q(ed)g(b)q(elo)o
+(w)h(can)g(generate)112 925 y(P)o(ostScript)17 b(output)g(\(These)f
+(programs)h(can)g(also)g(generate)f(output)h(that)g(can)g(b)q(e)f(prin)
+o(ted)g(on)112 1025 y(non-P)o(ostScript)k(prin)o(ters)e(lik)o(e)g(our)h
+Fg(Laserjet)k(2000)18 b Fk(as)h(w)o(ell.\).)28 b(In)19
+b(addition,)g(virtually)f(all)112 1124 y(Macin)o(tosh)c(applications)f
+(can)h(generate)f(P)o(ostScript)h(\(e.g.,)f(MacDra)o(w,)h(Can)o(v)m
+(as,)g(Sup)q(erP)o(ain)o(t,)112 1224 y(and)k(DeltaGraph\).)23
+b(There)16 b(is)h(also)g(a)g(gro)o(wing)h(n)o(um)o(b)q(er)d(of)i(IBM)e
+(PC)i(applications)g(that)g(can)112 1324 y(generate)h(P)o(ostScript.)23
+b(The)18 b(easiest)f(t)o(yp)q(e)f(of)i(P)o(ostScript)f(\014gure)g(to)h
+(include)e(is)h(an)g(Encapsu-)112 1423 y(lated)i(P)o(ostScript)f
+(\014le)h(\(EPSF\).)f(In)h(purc)o(hasing)g(applications)f(for)h(y)o
+(our)g(Macin)o(tosh)f(or)i(PC,)112 1523 y(c)o(hec)o(k)11
+b(to)h(mak)o(e)f(sure)h(that)h(they)e(can)i(generate)f(EPSF.)g(Y)l(ou)g
+(can)g(simply)e(include)h(those)i(\014gures)112 1623
+y(in)o(to)j(y)o(our)f(T)348 1633 y(E)376 1623 y(X)g(or)h(L)499
+1617 y Fh(a)523 1623 y Fk(T)550 1638 y(E)577 1623 y(X)g(do)q(cumen)o
+(t.)j(An)d(imp)q(ortan)o(t)e(c)o(haracteristic)h(of)h(P)o(ostScript)f
+(\014gures)112 1722 y(is)i(that)g(they)f(are)g(scalable,)g(i.e.,)e(the)
+i(\014gures)h(can)g(b)q(e)f(scaled)g(to)h(an)o(y)f(size.)21
+b(The)c(DEC)g(LPS20)112 1822 y(is)g(a)f(P)o(ostScript)g(prin)o(ter;)f
+(the)h Fg(Laserjet)23 b(2000)14 b Fi(cannot)p 1048 1829
+146 2 v 17 w Fk(prin)o(t)h(P)o(ostScript.)210 1921 y(If)23
+b(y)o(ou)h(ha)o(v)o(e)e(P)o(ostScript)i(\014gures,)h(y)o(ou)e(can)h
+(use)g(the)f Fg(\\psfig)e Fk(command)h(to)i(include)112
+2021 y(those)h(\014gures)f(in)o(to)g(a)g(T)592 2032 y(E)619
+2021 y(X)g(or)g(L)759 2015 y Fh(a)783 2021 y Fk(T)810
+2036 y(E)838 2021 y(X)f(do)q(cumen)o(t.)43 b(In)24 b(App)q(endix)f(D,)h
+(y)o(ou)g(will)e(\014nd)j(the)112 2121 y Fg(\\psfig)16
+b Fk(man)o(ual)g(and)i(an)g(example)e(that)i(sho)o(ws)g(ho)o(w)g(to)g
+(include)e(\014gures)i(generated)g(on)g(the)112 2220
+y(Macin)o(tosh)e(in)o(to)g(T)474 2231 y(E)502 2220 y(X)f(or)i(L)626
+2214 y Fh(a)650 2220 y Fk(T)677 2235 y(E)704 2220 y(X)f(do)q(cumen)o
+(ts.)865 2392 y(4.)49 b(PGPLOT)112 2525 y(The)22 b(PGPLOT)h(F)l(ortran)
+g(graphics)f(subroutine)g(library)f(is)g(a)o(v)m(ailable)g(on)h(ee,)g
+(eemips,)f(and)112 2624 y(V)l(en)o(us.)f(Originally)13
+b(dev)o(elop)q(ed)g(b)o(y)g(T.)g(J.)h(P)o(earson)g(of)g(the)g(Caltec)o
+(h)f(Astronom)o(y)g(Departmen)o(t,)p eop
+%%Page: 34 39
+34 38 bop 112 -100 a Fk(34)112 123 y(the)24 b(lo)q(cal)g(v)o(ersion)f
+(has)i(b)q(een)e(mo)q(di\014ed)g(to)h(generate)g(output)h(that)f(can)g
+(also)g(b)q(e)g(directly)112 223 y(inserted)16 b(in)o(to)g(a)h(T)464
+233 y(E)491 223 y(X)g(or)f(L)616 217 y Fh(a)640 223 y
+Fk(T)667 238 y(E)695 223 y(X)g(do)q(cumen)o(t.)k(PGPLOT)e(is)e(the)h
+(primary)d(scien)o(ti\014c)h(graphics)112 322 y(pac)o(k)m(age)k(w)o(e)e
+(supp)q(ort)i(in)f(the)g(EE)g(departmen)o(t.)25 b(PGPLOT)19
+b(can)f(generate)g(either)f(T)1747 333 y(E)1774 322 y(X)g(fon)o(t)112
+422 y(\014le)22 b(output)h(or)g(P)o(ostScript)f(output.)40
+b(PGPLOT)24 b(can)e(also)h(plot)g(to)g(just)f(ab)q(out)i(an)o(y)e(kind)
+112 521 y(of)g(in)o(teractiv)o(e)d(device)g(kno)o(wn)j(to)f(man.)35
+b(An)21 b(in)o(teractiv)o(e)e(fron)o(t-end)i(for)g(PGPLOT)i(called)112
+621 y(`iplot')14 b(is)g(also)i(a)o(v)m(ailable.)k(Y)l(ou)14
+b(can)h(also)g(call)f(PGPLOT)i(routines)f(from)e(C.)i(A)f(user's)h(man)
+o(ual)112 721 y(is)i(a)o(v)m(ailable)g(from)e(the)i(WER)o(C)g(cop)o(y)g
+(cen)o(ter,)e(and)j(a)f(cop)o(y)g(is)f(a)o(v)m(ailable)h(for)g(c)o(hec)
+o(k)o(out)e(in)i(the)112 820 y(instrumen)o(t)12 b(ro)q(om.)19
+b(An)13 b(example)e(of)i(including)g(a)g(PGPLOT)h(P)o(ostScript)f
+(\014gure)g(in)o(to)g(a)h(L)1798 814 y Fh(a)1822 820
+y Fk(T)1849 835 y(E)1876 820 y(X)112 920 y(do)q(cumen)o(t)h(is)h(sho)o
+(wn)h(in)f(App)q(endix)g(H.)934 1103 y(5.)49 b(Fig)112
+1238 y(On)18 b(the)f(Sun)h(Sparc)f(w)o(orkstations)h(there)f(is)g(a)h
+(plotting)f(pac)o(k)m(age)h(called)e(Fig.)25 b(This)17
+b(pac)o(k)m(age)112 1338 y(can)c(b)q(e)g(used)f(to)h(dra)o(w)g(blo)q(c)
+o(k)e(diagrams.)20 b(The)13 b(graph)g(can)f(b)q(e)h(transferred)f(to)h
+(either)e(the)i(L)1798 1332 y Fh(a)1822 1338 y Fk(T)1849
+1353 y(E)1876 1338 y(X)112 1437 y Fg(picture)18 b Fk(en)o(vironmen)o(t)
+g(or)i(Fig)g(can)h(generate)f(P)o(ostScript)g(output.)34
+b(It)20 b(is)g(cum)o(b)q(ersome)d(to)112 1537 y(dra)o(w)h(\014gures)f
+(in)g(the)g Fg(picture)d Fk(en)o(vironmen)o(t)g(of)j(L)1077
+1531 y Fh(a)1101 1537 y Fk(T)1128 1552 y(E)1156 1537
+y(X.)f(Fig)h(is)f(a)i(neat)f(alternativ)o(e,)e(all)i(y)o(ou)112
+1637 y(need)h(to)h(do)g(is)f(use)g(the)g(mouse.)27 b(The)18
+b(help)g(command)e(is)i(in)o(teractiv)o(e.)25 b(T)l(o)19
+b(execute)e(Fig,)h(do)112 1736 y(the)f(follo)o(wing)112
+1856 y Fg(sun\045)25 b(fig)f(figure.fig)112 2026 y Fk(where)16
+b Fg(figure.fig)d Fk(is)j(the)g(\014le)g(name)f(of)h(the)g(\014gure)h
+(y)o(ou)f(w)o(an)o(t)g(to)h(dra)o(w.)210 2126 y(There)g(are)g(some)f
+(restrictions)g(on)i(L)891 2120 y Fh(a)915 2126 y Fk(T)942
+2141 y(E)969 2126 y(X)f Fg(picture)e Fk(output.)24 b(F)l(or)17
+b(example,)e(the)i(length)112 2226 y(of)g(the)f Fg(\\line)e
+Fk(should)j(b)q(e)f(more)f(than)i(10pt)g(\(or)f(1/7)i(in\),)d(the)h
+(diameter)e(of)i(a)h Fg(circle)d Fk(should)112 2325 y(b)q(e)g(less)f
+(than)h(1/2)h(inc)o(hes,)d(and)i(the)f(diameter)f(of)h(a)h(disk)f(\()p
+Fg(\\circle*)p Fk(\))e(should)j(b)q(e)f(less)g(than)h(0.2)112
+2425 y(inc)o(h.)23 b(There)16 b(is)h(an)g(ellipse)e(in)i(Fig,)f(but)h
+(there)f(is)h(no)g(ellipse)e(fon)o(t)i(in)g(L)1453 2419
+y Fh(a)1477 2425 y Fk(T)1504 2440 y(E)1531 2425 y(X.)f(If)g(y)o(ou)h
+(dra)o(w)g(an)112 2525 y(ellipse)f(in)g(Fig)g(and)i(use)f
+Fg(transfig)c Fk(to)k(transfer)g(y)o(our)g(\014gure)g(to)g(the)g
+Fg(picture)d Fk(en)o(vironmen)o(t,)112 2624 y(all)j(y)o(ou)h(can)f(get)
+h(is)f(an)h Fg(oval)p Fk(.)24 b(There)17 b(are)g(no)h(similar)d
+(restrictions)i(if)g(y)o(ou)g(select)g(P)o(ostScript)p
+eop
+%%Page: 35 40
+35 39 bop 1864 -118 a Fk(35)112 123 y(output.)34 b(Y)l(ou)20
+b(can)g(use)h Fg(transfig)c Fk(to)j(transfer)h(a)f(\014gure)h(with)f
+(an)g(ellipse)f(to)h(a)h(P)o(ostScript)112 223 y(\014le)15
+b(and)i(then)e(use)h(the)f Fg(\\psfig)f Fk(command)f(to)j(include)f
+(this)g(\014gure)h(in)o(to)g(a)g(L)1560 217 y Fh(a)1584
+223 y Fk(T)1611 238 y(E)1638 223 y(X)f(do)q(cumen)o(t.)112
+322 y(The)i(details)e(of)i(using)g Fg(\\psfig)d Fk(are)i(giv)o(en)f(in)
+h(App)q(endix)g(D.)210 422 y(The)j(follo)o(wing)g Fg(transfig)d
+Fk(command)h(is)i(used)h(to)f(transfer)h(y)o(our)f(\014gure)g(to)h(the)
+f(L)1798 416 y Fh(a)1822 422 y Fk(T)1849 437 y(E)1876
+422 y(X)112 521 y Fg(\\picture)14 b Fk(en)o(vironmen)o(t)f(\(this)j
+(can)h(b)q(e)f(prin)o(ted)g(on)g(the)g Fg(Laserjet)23
+b(2000)p Fk(\),)446 643 y Fg(sun\045)h(transfig)f(-L)h(latex)g(-f)h
+(cmr)g(figure.fi)o(g)446 693 y(sun\045)f(make)112 865
+y Fk(where)c Fg(sun\045)e Fk(is)h(the)h(prompt)e(of)i(the)f(sun)h(w)o
+(orkstation.)32 b(If)19 b(y)o(ou)h(w)o(an)o(t)f(to)h(get)g(a)g(P)o
+(ostScript)112 965 y(\014le,)c(y)o(ou)g(can)g(t)o(yp)q(e)g(the)g(follo)
+o(wing)g(command.)446 1086 y Fg(sun\045)24 b(transfig)f(-L)h
+(postscript)e(-f)j(cmr)g(figure.fig)446 1136 y(sun\045)f(make)210
+1308 y Fk(After)f(running)h(the)g(ab)q(o)o(v)o(e)g(t)o(w)o(o)f
+(commands,)h(y)o(ou)g(should)g(delete)e Fg(Makefile)p
+Fk(.)42 b(Next)112 1408 y(transfer)19 b(the)e(\014gure.tex)g(or)i
+(\014gure.ps)f(to)g(y)o(our)g(thesis)f(directory)g(and)i(include)d
+(that)j(\014le)e(in)o(to)112 1507 y(y)o(our)g(L)236 1501
+y Fh(a)260 1507 y Fk(T)287 1522 y(E)314 1507 y(X)f(do)q(cumen)o(t.)210
+1607 y(F)l(or)g(the)g(details)g(ab)q(out)i Fg(transfig)13
+b Fk(please)j(c)o(hec)o(k)e(App)q(endix)i(C.)883 1792
+y(6.)49 b Fh(Pic)p Fk(T)1078 1803 y(E)1105 1792 y(X)112
+1927 y(The)20 b(L)228 1921 y Fh(a)252 1927 y Fk(T)279
+1942 y(E)306 1927 y(X)f(picture)f(en)o(vironmen)o(t)e(is)j(useful)g
+(for)g(making)f(simple)f(pictures)h(and)i(blo)q(c)o(k)e(dia-)112
+2026 y(grams.)30 b Fh(Pic)p Fk(T)392 2037 y(E)420 2026
+y(X)19 b(is)f(useful)h(for)h(more)e(complicated)e(graphs)21
+b(and)f(plots;)g(y)o(ou)f(migh)o(t)f(\014nd)h(it)112
+2126 y(handy)e(for)f(plotting)g(data)h(to)f(displa)o(y)f(in)g(y)o(our)h
+(thesis.)21 b Fh(Pic)p Fk(T)1283 2137 y(E)1311 2126 y(X)15
+b(is)h(installed)f(on)h(eemips)e(and)112 2226 y(ee.)23
+b(Unfortunately)l(,)16 b Fh(Pic)p Fk(T)627 2236 y(E)655
+2226 y(X)g(tak)o(es)h(a)g(v)o(ery)f(long)h(time)e(to)i(execute)e(|)i(w)
+o(e)g(suggest)h(y)o(ou)e(run)112 2325 y(it)f(on)g(ee)f(or)g(eemips.)19
+b(F)l(urthermore,)13 b Fh(Pic)p Fk(T)923 2336 y(E)950
+2325 y(X)h(seems)f(to)i(us)g(to)g(b)q(e)g(more)e(complex)f(than)j
+(other)112 2425 y(plotting)g(pac)o(k)m(ages)f(suc)o(h)g(as)h(PGPLOT,)g
+(PICSURE,)e(and)i(DeltaGraph.)21 b(The)14 b Fh(Pic)p
+Fk(T)1726 2436 y(E)1753 2425 y(X)g(man-)112 2525 y(ual)19
+b(should)g(b)q(e)f(a)o(v)m(ailable)g(at)g(the)g(MSC)h(Bo)q(okstore,)g
+(and)f(a)h(cop)o(y)f(is)g(a)o(v)m(ailable)g(for)g(c)o(hec)o(k)o(out)112
+2624 y(in)e(the)g(instrumen)o(t)f(ro)q(om.)p eop
+%%Page: 36 41
+36 40 bop 112 -100 a Fk(36)860 123 y(7.)48 b(PICSURE)112
+255 y(The)16 b(PICSURE)e(graphing)i(program)f(is)g(a)o(v)m(ailable)f
+(on)i(SIGMA,)e(and)h(it)g(is)g(prett)o(y)f(p)q(opular)i(on)112
+354 y(our)g(campus.)k(Access)13 b(PICSURE)i(using)g(TEX)g(as)g(the)g
+(secondary)g(device)e(and)i(the)g(output)g(of)112 454
+y(PICSURE)f(can)g(b)q(e)g(included)f(in)o(to)g(a)i(T)851
+465 y(E)878 454 y(X)e(do)q(cumen)o(t.)19 b(When)14 b(a)h(c)o(hart)e(is)
+h(ready)g(to)g(b)q(e)g(p)q(orted)112 554 y(in)o(to)22
+b(T)244 564 y(E)272 554 y(X,)f(giv)o(e)g(the)h(command)e(`PLOT)j(2')f
+(and)h(answ)o(er)f(the)g(questions)h(concerning)e(plot)112
+653 y(orien)o(tation)14 b(and)g(size.)20 b(Actually)l(,)12
+b(the)i(`PLOT)g(2')f(command)f(starts)j(the)e(PGPLOT)i(program,)112
+753 y(and)f(will)d(generate)i(t)o(w)o(o)f(\014les,)h
+Fg(pvi.300pk)c Fk(and)14 b Fg(pvi.tfm)p Fk(,)c(in)i(the)h(curren)o(t)f
+(directory)l(.)19 b(Y)l(ou)12 b(can)112 852 y(cop)o(y)i(these)f(t)o(w)o
+(o)h(\014les)f(to)i(y)o(our)e(thesis)h(directory)f(and)h(then)g
+(include)e(the)i(follo)o(wing)f(commands)112 952 y(to)21
+b(the)e(place)h(the)f(\014gure)i(in)e(y)o(our)h(thesis)g(\(here)f(w)o
+(e)g(include)g(the)h(command)e(of)i(Example)e(1)112 1052
+y(from)e(the)g(PicSure)f(Line)h(Graph)h(card)g(as)g(our)f(example)e
+(from)h(App)q(endix)h(K\):)266 1140 y Fg(\\font\\chart)o(=pv)o(i)266
+1190 y(\\centerline)o({\\c)o(ha)o(rt)22 b(A})112 1328
+y Fk(App)q(endix)g(K)h(includes)f(t)o(w)o(o)g(PicSure)g(quic)o(k)g
+(reference)f(cards)i(and)g(there)f(include)g(sev)o(eral)112
+1428 y(examples)16 b(of)j(PicSure)e(graphs)i(in)f(T)808
+1439 y(E)835 1428 y(X.)f(The)h(detailed)f(man)o(ual)g(for)h(PICSURE)f
+(is)h(a)o(v)m(ailable)112 1528 y(in)e(the)g(WER)o(C)h(cop)o(y)f(cen)o
+(ter.)845 1695 y(8.)49 b(GNUPLOT)112 1827 y(GNUPLOT)23
+b(is)f(a)g(graphics)h(program)f(that)h(is)f(p)q(opular)h(with)f(T)1381
+1838 y(E)1408 1827 y(X)g(and)h(L)1580 1821 y Fh(a)1604
+1827 y Fk(T)1631 1842 y(E)1658 1827 y(X)f(users.)39 b(It)112
+1926 y(is)19 b(a)o(v)m(ailable)e(on)i(ee)f(and)h(eemips.)26
+b(GNUPLOT)18 b(can)h(generate)f(\014gures)h(using)g(mathematical)112
+2026 y(functions)f(or)g(input)f(data.)26 b(The)18 b(output)g(\014gure)g
+(can)f(b)q(e)h(either)f(P)o(ostScript)g(or)h(the)f Fg(picture)112
+2126 y Fk(en)o(vironmen)o(t)d(of)i(L)460 2120 y Fh(a)484
+2126 y Fk(T)511 2141 y(E)539 2126 y(X.)f(The)h(P)o(ostScript)g(\014le)g
+(can)g(b)q(e)h(included)e(in)o(to)g(a)i(T)1539 2136 y(E)1566
+2126 y(X)f(or)h(L)1691 2120 y Fh(a)1715 2126 y Fk(T)1742
+2141 y(E)1769 2126 y(X)f(do)q(c-)112 2225 y(umen)o(t)f(b)o(y)h(using)g
+(the)g Fg(\\psfig)e Fk(command.)19 b(The)e(man)o(ual)e(is)h(attac)o
+(hed)g(in)g(App)q(endix)f(E.)620 2393 y(9.)49 b(Placemen)o(t)13
+b(of)k(T)l(ables)f(and)h(Figures)112 2525 y(L)124 2519
+y Fh(a)148 2525 y Fk(T)175 2540 y(E)203 2525 y(X)11 b(will)e(nev)o(er)h
+(place)h(y)o(our)g(\014gure)g(or)h(table)e(on)i(an)g(earlier)d(page)j
+(than)g(the)f(text)f(immedi)o(ately)112 2624 y(preceding)k(the)g
+Fg(figure)e Fk(or)j Fg(table)d Fk(en)o(vironmen)o(t.)18
+b(Therefore,)c(the)g(b)q(est)g(place)g(for)h(y)o(ou)f(to)g(put)p
+eop
+%%Page: 37 42
+37 41 bop 1864 -118 a Fk(37)112 123 y(the)20 b Fg(figure)d
+Fk(or)i Fg(table)f Fk(en)o(vironmen)o(t)e(is)j(righ)o(t)g(after)g(the)g
+(sen)o(tence)f(in)h(whic)o(h)g(the)g(\014gure)g(or)112
+223 y(table)g(is)f(\014rst)g(referenced.)27 b(If)17 b(more)h(of)g(the)g
+(paragraph)j(follo)o(ws,)d(do)h Fe(not)g Fk(lea)o(v)o(e)e(a)h(blank)h
+(line)112 322 y(ab)q(o)o(v)o(e)e(or)f(b)q(elo)o(w)h(the)f(\014gure)g
+(or)h(table)f(en)o(vironmen)o(t)d(\(c.f.,)h(p.)i(60)h(L)1376
+316 y Fh(a)1400 322 y Fk(T)1427 337 y(E)1455 322 y(X)f(User's)f
+(Guide\).)210 422 y(There)j(is)h(an)g(optional)g(argumen)o(t)f(in)g
+(the)g Fg(\\begin{tabl)o(e/f)o(ig)o(ure)o(})e Fk(command)g(whic)o(h)112
+521 y(allo)o(ws)k(y)o(ou)f(to)g(sp)q(ecify)f(where)h(y)o(ou)g(w)o(an)o
+(t)g(y)o(our)g(table)g(or)h(\014gure)f(to)g(b)q(e)h(placed.)29
+b(T)l(ables)19 b(\(or)112 621 y(\014gures\))j(placed)e(using)h(the)g
+Fg([h])f Fk(placemen)o(t)e(option)j(\(placed)g(at)g(the)g(p)q(osition)g
+(in)g(the)f(text)112 721 y(where)c Fg(\\begin{tab)o(le/)o(fig)o(ur)o
+(e}[)o(h])c Fk(app)q(ears\))18 b(can)e(lo)q(ok)g(v)o(ery)f(go)q(o)q(d.)
+23 b(Ho)o(w)o(ev)o(er,)13 b(using)k(this)112 820 y(option)e(can)g(also)
+f(result)g(in)g(problems)f(\(see)h(p.)f(177)j(of)e(the)g(L)1226
+814 y Fh(a)1250 820 y Fk(T)1277 835 y(E)1305 820 y(X)f(User's)h
+(Guide\).)20 b(Our)14 b(advice)112 920 y(for)21 b(amateurs)e(is)g(to)i
+(use)f(the)f(default)h Fg([tbp])e Fk(option.)32 b(If)20
+b(y)o(ou)f(ha)o(v)o(e)g(problems)g(with)h(L)1798 914
+y Fh(a)1822 920 y Fk(T)1849 935 y(E)1876 920 y(X)112
+1020 y(insisting)g(up)q(on)h(putting)f(a)g(\014gure)g(or)g(table)g(in)f
+(a)h(bad)h(lo)q(cation,)f(read)g(App)q(endix)f(C.8.1)h(on)112
+1119 y(page)14 b(176)f(of)g(the)f(L)452 1113 y Fh(a)476
+1119 y Fk(T)503 1134 y(E)530 1119 y(X)g(User's)g(Guide)g(to)h(help)f(y)
+o(ou)g(try)h(to)f(o)o(v)o(ercome)e(L)1460 1113 y Fh(a)1484
+1119 y Fk(T)1511 1134 y(E)1539 1119 y(X's)h(stubb)q(ornness.)210
+1219 y(If)k(the)h(table)f(is)g(to)q(o)i(big)f(and)g(exceeds)f(one)g
+(page,)h(there)f(is)h(a)g(con)o(v)o(enien)o(t)d(w)o(a)o(y)j(to)g
+(handle)112 1318 y(this.)k(In)10 b(the)h(\014rst)g(page)g(of)h(that)f
+(table)f(y)o(ou)h(can)g(t)o(yp)q(e)f(as)i(usual)f(and)g(put)g
+Fg(\\begin{tabl)o(e})22 b(\\caption)112 1418 y Fk(and)16
+b Fg(\\end{table)o(})c Fk(to)j(generate)f(the)h(table)f(n)o(um)o(b)q
+(er)f(and)j(caption)e(of)i(that)f(table.)20 b(According)112
+1518 y(to)c(the)f(rules)g(of)h(the)f(thesis)g(clerk,)f(the)h(caption)h
+(of)g(the)f(table)g(on)h(the)f(second)h(page)f(should)h(b)q(e)112
+1617 y(as)h(follo)o(ws,)769 1767 y Fg(Table)24 b(XX.)g(Continued)112
+1917 y Fk(W)l(e)16 b(suggest)i(the)e(follo)o(wing)g(w)o(a)o(y)g(to)g
+(handle)g(the)g(second)h(page)g(of)f(a)h(table:)112 2046
+y Fg(\\begin{tabl)o(e})112 2109 y(\\centerline)o({Ta)o(ble)o(~\\t)o(he)
+o(tab)o(le.)22 b(Continued.)o(}\\)o(\\)112 2171 y(\\begin{tabu)o(lar)o
+(}[o)o(pti)o(on)o(]{a)o(dju)o(st)o(men)o(t})112 2233
+y(content)i(of)g(tabular)112 2296 y(\\end{tabula)o(r})112
+2358 y(\\end{table})112 2525 y Fk(where)19 b Fg(\\thetable)c
+Fk(is)k(a)g(L)612 2519 y Fh(a)636 2525 y Fk(T)663 2540
+y(E)690 2525 y(X)f(coun)o(ter)h(that)g(con)o(tains)f(the)h(table)f(n)o
+(um)o(b)q(er)f(of)i(the)f(curren)o(t)112 2624 y(table.)j(If)15
+b(y)o(our)g(table)g(is)g(longer)g(than)h(t)o(w)o(o)f(pages,)h(the)f
+(caption)g(for)h(the)f(rest)g(of)g(the)g(table)g(can)p
+eop
+%%Page: 38 43
+38 42 bop 112 -100 a Fk(38)112 123 y(b)q(e)16 b(done)f(in)g(the)g(same)
+f(w)o(a)o(y)l(.)20 b(Using)15 b(this)g(metho)q(d)f(of)h(breaking)g
+(tables,)g(y)o(ou)g(ha)o(v)o(e)f(to)i(measure)112 223
+y(the)h(length)f(of)g(the)g(table)g(and)h(man)o(ually)d(break)i(the)g
+(pages.)112 402 y(E.)49 b(Including)15 b(Source)i(Co)q(de)g(in)o(to)e
+(the)h(Thesis)112 552 y(Some)f(theses)g(ma)o(y)f(include)g(source)i(co)
+q(de)g(or)g(an)g(algorithm)e(in)h(the)g(text)g(b)q(o)q(dy)l(,)h
+(\014gure,)g(or)g(ap-)112 652 y(p)q(endix.)k(In)11 b(this)h(v)o(ersion)
+f(of)h Fg(eethesis.s)o(ty)o Fk(,)e(w)o(e)h(include)f(a)i(do)q(cumen)o
+(t)f(st)o(yle)f Fg(verbatimfil)o(es)112 751 y Fk(dev)o(elop)q(ed)k(b)o
+(y)h(Chris)f(Ro)o(wley)g(to)h(deal)g(with)f(this)h(problem.)k(There)c
+(are)f(t)o(w)o(o)h(commands)e(that)112 851 y(can)19 b(b)q(e)g(used.)28
+b Fg(\\verbatimfi)o(le{)o(fil)o(e.)o(c})15 b Fk(can)k(include)e(a)i
+(program)g(called)e Fg(file.c)g Fk(to)i(the)112 951 y(text.)37
+b Fg(verbatimli)o(sti)o(ng[)o(n])o({fi)o(le.)o(c})18
+b Fk(will)i(include)h(the)g(program)h Fg(file.c)d Fk(to)j(the)f(text)
+112 1050 y(and)c(will)e(list)h(the)g(line)f(n)o(um)o(b)q(ers)g(of)h
+(program)h Fg(file.c)d Fk(ev)o(ery)g Fg(n)i Fk(lines.)210
+1150 y(Supp)q(ose)h(w)o(e)f(ha)o(v)o(e)g(a)g(program)g
+Fg(file.c)p Fk(,)e(and)j(t)o(yp)q(e)f(the)g(commands,)112
+1259 y Fg(\\singlespac)o(e)112 1309 y(\\verbatimfi)o(le{)o(fil)o(e.c)o
+(})112 1359 y(\\doublespac)o(e)112 1518 y Fk(the)h(output)f(form)g(is)g
+(giv)o(en)f(b)q(elo)o(w:)112 1628 y Fg(/**********)o(***)o(***)o(***)o
+(**)o(***)o(***)o(**)o(***)o(***)o(***)o(**)o(***)o(***)o(***)o(**)o
+(***)o(***)o(**)o(***)o(/)112 1678 y(/*)25 b(Filename:)e(auto4.c)510
+b(by:)24 b(Shiau)g(Yan-Chyuan)48 b(*/)112 1728 y(/*)1538
+b(*/)112 1777 y(/*)25 b(Usage:)1357 b(*/)112 1827 y(/**********)o(***)o
+(***)o(***)o(**)o(***)o(***)o(**)o(***)o(***)o(***)o(**)o(***)o(***)o
+(***)o(**)o(***)o(***)o(**)o(***)o(/)112 1927 y(#include)23
+b(<stdio.h>)112 1977 y(#include)g("malloc.h")112 2076
+y(#define)h(LINE)g(121)112 2126 y(#define)g(LOW)g(0.5)112
+2176 y(#define)g(MID)g(2.5)112 2226 y(#define)g(UP)50
+b(4.5)112 2325 y(typedef)24 b(struct)f(SOLUTION)112 2375
+y({)215 2425 y(float)h(rise_l,ris)o(e_)o(m,r)o(ise)o(_h)o(,ri)o(se_)o
+(r,r)o(is)o(e_d)o(t1,)o(ris)o(e_)o(dt2)o(;)215 2475 y(float)g
+(fall_l,fal)o(l_)o(m,f)o(all)o(_h)o(,fa)o(ll_)o(f,f)o(al)o(l_d)o(t1,)o
+(fal)o(l_)o(dt2)o(;)215 2525 y(float)g(pre_r_dt2,)o(pr)o(e_f)o(_dt)o
+(2;)215 2574 y(int)h(flag_rl,f)o(lag)o(_r)o(m,f)o(lag)o(_r)o(h;)215
+2624 y(int)g(flag_fl,f)o(lag)o(_f)o(m,f)o(lag)o(_f)o(h;)p
+eop
+%%Page: 39 44
+39 43 bop 1864 -118 a Fk(39)112 123 y Fg(})26 b(SX;)112
+223 y(struct)e(SOLUTION)f(sol[2];)112 272 y(FILE)i(*point_ou)o(t,*)o
+(poi)o(nt)o(_ab)o(s,*)o(fo)o(pen)o(\(\);)112 322 y(char)g(file_out[)o
+(20])o(,fi)o(le)o(_ab)o(s[2)o(0])o(;)112 372 y(float)f(start_time=)o
+(2.0)o(e-)o(09;)112 422 y(/*)h(char)g(*sprintf\()o(\),*)o(st)o(rcp)o
+(y\(\))o(,*)o(fpr)o(int)o(f\(\))o(;)d(*/)112 472 y(float)i
+(fabs\(\),atof)o(\(\);)112 521 y(int)h(atoi\(\);)210
+621 y Fk(In)16 b(con)o(trast,)g(if)g(w)o(e)g(use)g Fg(\\verbatiml)o
+(ist)o(in)o(g[1)o(0]{)o(fi)o(le.)o(c})112 724 y(\\singlespac)o(e)112
+774 y(\\verbatimli)o(sti)o(ng[)o(10])o({f)o(ile)o(.c})112
+824 y(\\doublespac)o(e)112 977 y Fk(then)g Fg(file.c)e
+Fk(will)h(b)q(e)h(included)f(in)h(the)g(text)f(and)i(the)e(line)g(n)o
+(um)o(b)q(ers)g(prin)o(ted)g(ev)o(ery)g(10)h(lines)112
+1076 y(as)h(follo)o(ws,)216 1180 y Fg(/**********)o(***)o(**)o(***)o
+(***)o(**)o(***)o(***)o(***)o(**)o(***)o(***)o(**)o(***)o(***)o(***)o
+(**)o(***)o(***)o(***)o(/)216 1229 y(/*)25 b(Filename:)e(auto4.c)510
+b(by:)24 b(Shiau)g(Yan-Chyuan)48 b(*/)216 1279 y(/*)1538
+b(*/)216 1329 y(/*)25 b(Usage:)1357 b(*/)216 1379 y(/**********)o(***)o
+(**)o(***)o(***)o(**)o(***)o(***)o(***)o(**)o(***)o(***)o(**)o(***)o
+(***)o(***)o(**)o(***)o(***)o(***)o(/)216 1478 y(#include)23
+b(<stdio.h>)216 1528 y(#include)g("malloc.h")216 1628
+y(#define)g(LINE)i(121)216 1678 y(#define)e(LOW)i(0.5)132
+1728 y Fe(10)34 b Fg(#define)23 b(MID)i(2.5)216 1777
+y(#define)e(UP)51 b(4.5)216 1877 y(typedef)23 b(struct)h(SOLUTION)216
+1927 y({)319 1977 y(float)g(rise_l,ri)o(se_)o(m,)o(ris)o(e_h)o(,ri)o
+(se)o(_r,)o(ris)o(e_)o(dt1)o(,ri)o(se_)o(dt)o(2;)319
+2026 y(float)g(fall_l,fa)o(ll_)o(m,)o(fal)o(l_h)o(,fa)o(ll)o(_f,)o(fal)
+o(l_)o(dt1)o(,fa)o(ll_)o(dt)o(2;)319 2076 y(float)g(pre_r_dt2)o(,pr)o
+(e_)o(f_d)o(t2;)319 2126 y(int)g(flag_rl,fla)o(g_r)o(m,)o(fla)o(g_r)o
+(h;)319 2176 y(int)g(flag_fl,fla)o(g_f)o(m,)o(fla)o(g_f)o(h;)216
+2226 y(})i(SX;)132 2325 y Fe(20)34 b Fg(struct)24 b(SOLUTION)e(sol[2];)
+216 2375 y(FILE)i(*point_out,)o(*po)o(int)o(_a)o(bs,)o(*fo)o(pen)o
+(\(\))o(;)216 2425 y(char)g(file_out[20)o(],f)o(ile)o(_a)o(bs[)o(20])o
+(;)216 2475 y(float)g(start_time)o(=2.)o(0e-)o(09)o(;)216
+2525 y(/*)h(char)f(*sprintf\(\),)o(*st)o(rc)o(py\()o(\),*)o(fpr)o(in)o
+(tf\()o(\);)e(*/)216 2574 y(float)i(fabs\(\),ato)o(f\(\))o(;)216
+2624 y(int)h(atoi\(\);)p eop
+%%Page: 40 45
+40 44 bop 112 -100 a Fk(40)210 123 y(The)18 b Fg(\\verbatimfi)o(le)d
+Fk(and)j Fg(\\verbatimli)o(sti)o(ng)d Fk(can)j(b)q(e)g(used)g(in)g(the)
+g(text)g(b)q(o)q(dy)l(,)h(the)112 223 y Fg(figure)c Fk(en)o(vironmen)o
+(t,)e(or)j(in)g(an)h(App)q(endix.)112 463 y(F.)49 b(Blue)15
+b(Line)h(Em)o(ulation)112 625 y(The)e(text)f(of)h(the)g(thesis)f
+(should)i(not)f(exceed)e(the)i(frame)e(of)i(the)f(blue)h(line)e(pap)q
+(er.)21 b(Some)13 b(thesis)112 724 y(writers)21 b(ma)o(y)e(w)o(orry)i
+(if)g(their)f(\014gures)h(or)g(co)q(des)h(exceed)d(the)i(frame.)34
+b(W)l(e)20 b(ha)o(v)o(e)g(included)g(a)112 824 y(command)f
+Fg(\\blueline)f Fk(to)j(em)o(ulate)d(the)i(frame)g(of)h(the)f(blue)g
+(line)g(pap)q(er.)35 b(If)20 b(y)o(ou)g(w)o(an)o(t)h(to)112
+923 y(utilize)16 b(the)g(em)o(ulation)f(of)i(blue)g(line)f(y)o(ou)g(ha)
+o(v)o(e)h(to)g(t)o(yp)q(e)f Fg(\\blueline)e Fk(in)j(the)f(pream)o(ble,)
+f(then)112 1023 y(y)o(ou)g(will)f(get)g(a)h(frame)f(to)h(enclose)f(y)o
+(our)g(text)g(in)h(ev)o(ery)e(page)i(of)g(y)o(our)g(thesis.)20
+b(But)15 b(remem)n(b)q(er,)112 1123 y(after)i(y)o(ou)f(\014nish)g(y)o
+(our)g(thesis,)g(y)o(ou)g(should)h(commen)n(t)d(out)i(the)g
+Fg(\\blueline)d Fk(command.)112 1363 y(G.)49 b(W)l(riting)16
+b(Y)l(our)g(Prop)q(osal)112 1525 y(Y)l(ou)22 b(can)f(also)h(write)e(y)o
+(our)h(thesis)g(prop)q(osal)i(using)f(the)f Fg(eethesis)d
+Fk(do)q(cumen)o(t)i(st)o(yle.)34 b(The)112 1624 y(only)18
+b(thing)g(y)o(ou)g(should)h(do)f(di\013eren)o(tly)f(is)h(to)g(use)g
+(the)g(L)1200 1618 y Fh(a)1224 1624 y Fk(T)1251 1639
+y(E)1278 1624 y(X)g(command)e Fg(\\part)g Fk(instead)i(of)112
+1724 y Fg(\\chapter)p Fk(.)g(All)13 b(of)i(the)g(other)f(facilities)f
+(of)i(the)f Fg(eethesis)e Fk(do)q(cumen)o(t)h(st)o(yle)g(will)h(b)q(e)g
+(a)o(v)m(ailable)112 1824 y(to)19 b(y)o(ou,)f(although)h(the)e
+Fg(\\body)g Fk(command)f(ma)o(y)g(v)o(ery)h(w)o(ell)f(b)q(e)j(the)e
+(only)h(one)g(that)h(is)f(partic-)112 1923 y(ularly)f(useful.)22
+b(The)17 b Fg(\\part)e Fk(command)g(will)h(correctly)g(format)g(the)h
+(ma)s(jor)e(section)i(headings)112 2023 y(of)g(y)o(our)f(prop)q(osal)i
+(and)f(will)e(not)i(start)f(the)g(sections)g(on)h(new)f(pages)h(as)g
+Fg(\\chapter)d Fk(do)q(es.)112 2263 y(H.)48 b(Miscellaneous)112
+2425 y(In)16 b(this)f(section)g(w)o(e)g(attempt)f(to)h(an)o(ticipate)g
+(some)f(un)o(usual)i(situations)f(y)o(ou)h(migh)o(t)d(ha)o(v)o(e)i(and)
+112 2525 y(try)e(to)h(help)e(y)o(ou)h(deal)g(with)g(them.)19
+b(W)l(e)13 b(also)g(w)o(ould)h(lik)o(e)d(to)i(men)o(tion)f(a)h(few)g
+(features)g(of)h(L)1798 2519 y Fh(a)1822 2525 y Fk(T)1849
+2540 y(E)1876 2525 y(X)112 2624 y(that)j(y)o(ou)f(migh)o(t)f(\014nd)h
+(particularly)g(helpful.)p eop
+%%Page: 41 46
+41 45 bop 1864 -118 a Fk(41)725 123 y(1.)48 b(The)17
+b Fj(n)p Fg(label)d Fk(Command)112 258 y(The)j Fg(\\label)d
+Fk(command)g(can)i(also)h(b)q(e)f(used)g(in)g(conjunction)g(with)g(the)
+g Fg(\\pageref)e Fk(command)112 358 y(to)g(refer)f(to)g(text)g(on)h
+(other)f(pages.)21 b(This)14 b(can)f(b)q(e)h(helpful)e(as)i(y)o(ou)f
+(can)h(refer)e(to)i(another)g(section)112 458 y(of)i(text,)e(whic)o(h)h
+(migh)o(t)e(slide)i(from)f(page)i(to)f(page)h(as)g(y)o(ou)f(edit)g(y)o
+(our)g(text.)20 b(It)15 b(is)g(explained)f(on)112 557
+y(page)j(72)g(of)g(the)f(L)443 551 y Fh(a)467 557 y Fk(T)494
+572 y(E)521 557 y(X)g(Users)g(Guide.)856 745 y(2.)49
+b(New)16 b(F)l(on)o(ts)112 881 y(In)h(addition)f(to)h(the)f(fon)o(ts)h
+(of)g Fg(\\bf,)24 b(\\sf,)g(\\sl,)g(\\sc,)15 b Fk(and)i
+Fg(\\tt)p Fk(,)e(w)o(e)h(ha)o(v)o(e)g(man)o(y)f(new)h(fon)o(ts)112
+981 y(on)i(ee)e(and)i(eemips,)d(suc)o(h)i(as)g Fc(R)h
+Fk(and)f Fb(R)p Fk(.)g(If)g(y)o(ou)g(think)f(all)h(the)g(regular)g(fon)
+o(ts)g(supp)q(orted)h(b)o(y)112 1080 y(L)124 1074 y Fh(a)148
+1080 y Fk(T)175 1095 y(E)203 1080 y(X)e(are)g(not)h(enough)g(for)f(y)o
+(our)g(thesis,)g(y)o(ou)g(can)g(con)o(tact)g(to)h(W)l(en-Lin)g(Hsieh)
+112 1180 y(\()p Fg(wenlin@ee.t)o(amu)o(.ed)o(u)p Fk(\))c(and)k(he)f
+(will)f(sho)o(w)i(y)o(ou)f(the)g(fon)o(t)g(map.)888 1368
+y(3.)49 b Fh(Sli)p Fk(T)1073 1379 y(E)1100 1368 y(X)112
+1504 y(Y)l(ou)16 b(ma)o(y)f(\014nd)h Fh(Sli)p Fk(T)513
+1514 y(E)540 1504 y(X)g(useful)g(for)g(making)f(the)g(slides)h(that)g
+(y)o(ou)g(will)f(use)h(in)g(y)o(our)f(thesis)h(or)112
+1603 y(dissertation)i(defense.)24 b Fh(Sli)p Fk(T)667
+1614 y(E)694 1603 y(X)17 b(uses)h(sp)q(ecial)f(larger)g(fon)o(ts)h
+(whic)o(h)e(are)i(more)e(readable)h(than)112 1703 y(the)f(standard)h(L)
+411 1697 y Fh(a)435 1703 y Fk(T)462 1718 y(E)489 1703
+y(X)f(fon)o(ts.)21 b(Y)l(ou)16 b(ma)o(y)e(\014nd)i(it)f(v)o(ery)g(con)o
+(v)o(enien)o(t)e(to)j(pull)f(equations)h(directly)112
+1802 y(out)i(of)f(y)o(our)g(thesis)f(in)o(to)h(a)g(slide)f(\014le)g
+(whic)o(h)g Fh(Sli)p Fk(T)1074 1813 y(E)1101 1802 y(X)h(will)e(use)i
+(to)g(create)f(y)o(our)h(slides.)22 b(Refer)112 1902
+y(to)17 b(App)q(endix)f(A)f(of)i(the)f(L)600 1896 y Fh(a)624
+1902 y Fk(T)651 1917 y(E)678 1902 y(X)g(User's)g(Guide)g(for)g(more)f
+(information)g(ab)q(out)j Fh(Sli)p Fk(T)1719 1913 y(E)1746
+1902 y(X.)739 2090 y(4.)49 b(PCs)17 b(and)g(Macin)o(toshes)112
+2226 y(T)139 2236 y(E)167 2226 y(X)k(and)h(L)337 2220
+y Fh(a)361 2226 y Fk(T)388 2241 y(E)416 2226 y(X)f(b)q(oth)i(run)f(w)o
+(ell)e(on)i(IBM)f(PCs)h(and)h(MA)o(Cs)e(with)g(hard)i(disks)e(and)i
+(laser)112 2325 y(prin)o(ters.)e(F)l(or)16 b(example,)d(in)i(the)h
+(Electrical)d(Engineering)j(Departmen)o(t)e(w)o(e)h(run)h(PCT)1754
+2336 y(E)1782 2325 y(X)f(and)112 2425 y(L)124 2419 y
+Fh(a)148 2425 y Fk(T)175 2440 y(E)203 2425 y(X)g(on)g(IBM)f(A)l(T)h
+(clones)g(with)g(a)g(40MB)g(hard)h(disk,)f(EGA,)f(and)i(Laserjet)g(I)q
+(I.)e(W)l(e)h(also)g(run)112 2525 y Fi(N)156 2506 y Fa(2)196
+2525 y Fk(Computer)k(Asso)q(ciates)h Fg(cdvi)e Fk(preview)h(program)h
+(to)g(view)f(the)g(output)h(on)h(the)e(displa)o(y)112
+2624 y(b)q(efore)e(w)o(e)f(prin)o(t)f(|)h(this)g(sa)o(v)o(es)g(time)e
+(and)j(laser)f(prin)o(ters.)p eop
+%%Page: 42 47
+42 46 bop 112 -100 a Fk(42)210 123 y(Y)l(ou)16 b(are)f(w)o(elcome)e(to)
+j(cop)o(y)f(to)h(y)o(our)g(MA)o(C)e(or)i(PC)g(the)g(three)f(\014les)g
+(asso)q(ciated)h(with)g(the)112 223 y Fg(eethesis)e Fk(do)q(cumen)o(t)g
+(st)o(yle:)20 b Fg(eethesis.s)o(ty,)i(eethe12.st)o(y)p
+Fk(,)13 b(and)j Fg(eethetitle)o(.st)o(y)d Fk(\(see)112
+322 y(T)l(able)19 b(I)f(for)h(directories\).)27 b(Cop)o(y)19
+b(the)f Fg(.sty)f Fk(\014les,)h(whic)o(h)g(are)h(prin)o(table)e(ASCI)q
+(I)h(c)o(haracters,)112 422 y(using)f(Kermit,)d(X-Mo)q(dem,)g(or)j
+(ftp,)f(etc.)765 591 y(5.)48 b(Problem)15 b(Rep)q(orting)112
+723 y(If)j(y)o(our)f(thesis)h(is)g(rejected)e(b)o(y)h(the)h(thesis)f
+(clerk)g(b)q(ecause)h(of)g(an)g(error)g(or)g(de\014ciency)e(in)i(this)
+112 823 y(thesis)d(preparation)g(system,)e(please)h(send)h(electronic)e
+(mail)f(to)j Fg(cantrell@ee)o(.ta)o(mu)o(.ed)o(u,)c Fk(or)112
+922 y Fg(wenlin@ee.t)o(amu)o(.ed)o(u)p Fk(.)18 b(W)l(e)e(will)f(try)h
+(to)h(\014x)f(the)g(problem.)p eop
+%%Page: 43 48
+43 47 bop 1864 -118 a Fk(43)845 123 y(REFERENCES)137
+272 y([1])24 b(Donna)19 b(Knigh)o(t)e(and)h(Suzanne)g(Lednic)o(ky)l(,)e
+Ff(T)1072 283 y(E)1099 272 y(X)i(Macros)g(F)l(or)f(Thesis)h(F)l
+(ormatting)p Fk(.)e(De-)213 372 y(partmen)o(t)23 b(of)j(Electrical)d
+(Engineering,)j(T)l(exas)g(A&M)e(Univ)o(ersit)o(y)l(,)g(College)g
+(Station,)213 472 y(T)l(exas,)16 b(August)g(1984.)137
+613 y([2])24 b(Vija)o(y)19 b(Ko)q(dali)i(and)g(Mik)o(e)e(P)o(a)o(yne,)h
+(L)910 607 y Fh(a)934 613 y Fk(T)961 628 y(E)989 613
+y(X)g Ff(Do)q(cumen)o(t)f(St)o(yle)h(F)l(or)g(Thesis)h(F)l(ormatting)p
+Fk(.)213 712 y(Departmen)o(t)16 b(of)j(Electrical)d(Engineering,)i(T)l
+(exas)g(A&M)f(Univ)o(ersit)o(y)l(,)f(College)h(Station,)213
+812 y(T)l(exas,)f(1st)h(edition,)e(August)h(1986.)137
+953 y([3])24 b(Leslie)32 b(Lamp)q(ort,)37 b(L)615 947
+y Fh(a)639 953 y Fk(T)666 968 y(E)693 953 y(X)p Ff(:)32
+b(A)h(Do)q(cumen)o(t)f(Preparation)h(System)p Fk(.)e(Reading,)37
+b(Mas-)213 1053 y(sac)o(h)o(usetts:)21 b(Addison)16 b(W)l(esley)f
+(Publishing)h(Compan)o(y)l(,)f(1986.)137 1194 y([4])24
+b(Donald)14 b(E.)e(Kn)o(uth,)h Ff(The)g(T)727 1205 y(E)754
+1194 y(Xb)q(o)q(ok)p Fk(.)h(Reading,)f(Massac)o(h)o(usetts:)20
+b(Addison)13 b(W)l(esley)f(Pub-)213 1294 y(lishing)j(Compan)o(y)l(,)g
+(1986.)137 1435 y([5])24 b(Oren)16 b(P)o(atashnik,)g
+Fh(Bib)p Ff(T)686 1445 y(E)713 1435 y(Xing)p Fk(.)g(Stanford)h(Univ)o
+(ersit)o(y)l(,)c(F)l(ebruary)j(1988.)137 1576 y([6])24
+b(Da)o(vid)d(J.)g(Buerger,)h(L)637 1570 y Fh(a)661 1576
+y Fk(T)688 1591 y(E)715 1576 y(X)f Ff(for)h(Engineers)g(&)f(Scien)o
+(tists)p Fk(.)f(New)h(Y)l(ork,)h(McGra)o(w{Hill)213 1675
+y(Publishing)16 b(Compan)o(y)l(,)f(1990.)p eop
+%%Page: 44 49
+44 48 bop 854 123 a Fk(APPENDIX)15 b(A)813 326 y(SAMPLE)i(THESIS)112
+530 y(This)22 b(sample)d(thesis)i(is)g(adapted)h(from)e(Bill)f(Bak)o
+(er's)h(thesis,)i(whic)o(h)e(w)o(as)i(done)f(in)g(the)f(old)112
+629 y(L)124 623 y Fh(a)148 629 y Fk(T)175 644 y(E)203
+629 y(X)c Fe(Thesis)h Fk(do)q(cumen)o(tst)o(yle)e(in)h(1986.)25
+b(Since)16 b(m)o(uc)o(h)e(of)k(the)e(thesis)h(has)g(b)q(een)g(deleted)f
+(and)112 729 y(mo)q(di\014ed,)h(it)h(probably)g(do)q(esn't)g(mak)o(e)e
+(m)o(uc)o(h)g(sense)i(an)o(y)f(more)g(if)g(y)o(ou)h(try)f(to)i(read)f
+(it.)25 b(It)18 b(is)112 829 y(included)c(solely)f(for)i(y)o(our)f
+(reference)f(to)i(help)f(y)o(ou)g(see)g(ho)o(w)h(a)f(thesis)h(can)f(b)q
+(e)h(formatted)e(using)112 928 y(L)124 922 y Fh(a)148
+928 y Fk(T)175 943 y(E)203 928 y(X.)h(In)h(addition)h(to)g(the)f
+(material)f(from)g(Mr.)g(Bak)o(er's)h(thesis,)g(I)g(also)h(used)f
+(material)f(from)112 1028 y(the)j(sample)d(thesis)i(from)g(the)g(old)g
+(L)788 1022 y Fh(a)812 1028 y Fk(T)839 1043 y(E)866 1028
+y(X)g(Thesis)g(man)o(ual)f(and)i(other)g(sources.)p eop
+%%Page: 101 50
+101 49 bop 855 123 a Fk(APPENDIX)15 b(B)926 326 y Fh(Bib)p
+Ff(T)1035 337 y(E)1062 326 y(X)p eop
+%%Page: 119 51
+119 50 bop 855 123 a Fk(APPENDIX)15 b(C)883 326 y(TRANSFIG)p
+eop
+%%Page: 141 52
+141 51 bop 854 123 a Fk(APPENDIX)15 b(D)727 326 y Fj(n)p
+Fg(PSFIG)f Fk(AND)i(EXAMPLES)p eop
+%%Page: 161 53
+161 52 bop 856 123 a Fk(APPENDIX)15 b(E)888 326 y(GNUPLOT)p
+eop
+%%Page: 187 54
+187 53 bop 856 123 a Fk(APPENDIX)16 b(F)933 326 y(D)o(VIHP)p
+eop
+%%Page: 197 55
+197 54 bop 853 123 a Fk(APPENDIX)16 b(G)937 326 y(D)o(VIPS)p
+eop
+%%Page: 205 56
+205 55 bop 854 123 a Fk(APPENDIX)15 b(H)776 326 y(PGPLOT)j(EXAMPLE)p
+eop
+%%Page: 211 57
+211 56 bop 864 123 a Fk(APPENDIX)15 b(I)512 326 y(SETTING)h(UP)g(A)g
+(CSC)h(STUDENT)f(A)o(CCOUNT)p eop
+%%Page: 215 58
+215 57 bop 860 123 a Fk(APPENDIX)15 b(J)833 326 y(T)860
+337 y(E)887 326 y(XR)o(O)o(X)f(CARD)p eop
+%%Page: 219 59
+219 58 bop 853 123 a Fk(APPENDIX)16 b(K)823 326 y(PICSURE)g(CARD)p
+eop
+%%Trailer
+end
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/obsolete/macros/latex209/contrib/tamueethesis/manv4.tex b/obsolete/macros/latex209/contrib/tamueethesis/manv4.tex
new file mode 100644
index 0000000000..7223233b8c
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/tamueethesis/manv4.tex
@@ -0,0 +1,1639 @@
+% 28 Feb 1989 version
+% 18 May 1989 -- fixed changes to page numbering
+% in thesis.tex, updated directories.
+% 31 Aug 1989 version 2.1
+%
+% 20 Nov 1990 version 2.2
+%
+% 23 Jul 1993 version 2.3
+%
+\documentstyle[twoside,subequation,app]{eethesis}
+\newcommand{\Ps}{Post\-Script}
+\renewcommand{\leftmark}{\rightmark}
+\markboth{}{}
+\pagestyle{myheadings}
+\begin{document}
+\pagestyle{empty}
+\begin{center}
+{\large {\bf \LaTeX\ Document Style For \\
+Thesis Formatting \vspace{3cm}\\
+USER'S MANUAL}}\vspace{1.5cm}\\
+Written by:\\
+Donna Knight and Suzanne Lednicky\\
+Vijay Kodali and Mike Payne\\
+Russell Oertel\\
+Pierce Cantrell \\
+Ken J. Chiang \\
+Wen-Lin Hsieh \vspace{1.5cm}\\
+Department of Electrical Engineering\\
+Texas A\&M University\vspace{1.5cm}\\
+Version 2.3\\
+July 1993
+\end{center}
+\newpage
+
+\thispagestyle{myheadings}
+\markboth{}{}
+\pagenumbering{roman}
+\doublespace
+\acknow{Special thanks to the following people for their assistance in
+preparing this manual and completing this project:
+\setcounter{page}{3}
+\begin{itemize}
+\item Lily Mummert for her invaluable help in helping us fix our most stubborn
+ problems.
+\item Surja Sutanto and Todd Chauvin for answering questions and providing help
+ with the VAX.
+\item Bill Baker for the use of his thesis to test the new document style and
+ to be the basis of the example included in this manual.
+\item Kay Yocham for the block diagram example.
+\item Dr.\ Naugle for his \TeX pertise.
+\item Elaine Haschke for help in typing this manual.
+\item All of the people at the Thesis Clerk's office for their feedback.
+\item Todd Chauvin for his contribution and ideas to this
+ macro.
+\item Jon Odegard, Zhong Deng, and Showi-Min Shen for their kindly
+ using this draft macro and gave us the errors and suggestions to
+ accomplish the final of this macro.
+\item All of the people used the previous version of this macro
+ and devoted their precious suggestions for us to revise this new macro.
+\end{itemize}}
+
+\pagestyle{headings}
+\setlength{\headheight}{36pt}
+\tableofcontents
+
+\chapter{INTRODUCTION}
+\setlength{\headheight}{12pt}
+
+\pagenumbering{arabic}
+\setcounter{page}{1}
+\markboth{}{}
+\pagestyle{myheadings}
+\section{Background}
+The Department of Electrical Engineering at Texas
+A\&M University previously used both \TeX\ and \LaTeX\
+to generate theses. \TeX\ can create documents of typeset
+quality, but it is difficult to learn, requiring a great deal of time and
+effort on the part of the user.
+
+Donna Knight and Suzanne Lednicky were members of an EE 403/404 team that
+designed a set of macros called ``\TeX\ Macros for Thesis Formatting'' that
+generated all of the special pages and created simplified sectioning commands,
+making \TeX\ much easier to use. However, their package did not allow
+virtual labeling of equation and reference numbers~\cite{kl}.
+
+Two years later, another EE 403/404 team, Mike Payne and Vijay
+Kodali, incorporated the \TeX\ macros into \LaTeX\ document style {\tt thesis},
+which made the formatting of theses even easier. However, this document style
+did not allow students to use some of the really nice features of \LaTeX, such
+as the automatic table of contents, list of tables, and list of
+figures~\cite{pk}.
+
+This package incorporates the original \TeX\ Thesis Macros into a new
+{\tt eethesis} document style so as to utilize the many useful built-in
+functions available with the \LaTeX\ system. The improvements over the
+old {\tt thesis} document style are listed below:
+\begin{itemize}
+\item Sectioning is now done by the standard \LaTeX\ commands \verb+\chapter,
+\section+, and \verb+\subsection+.
+\item The Table of Contents, List of Tables, and List of Figures are now
+automatically generated.
+\item By using the \verb+\include+ and \verb+\includeonly+ commands, you can
+now split your input into sections without having to re-initialize page numbers
+or equation numbers in each file.
+\item It is now possible to use {\sc Bib}\TeX\ to produce your reference pages.
+This will free you from worrying about how to format your bibliography as well
+as saving you time if you write several papers using many of the same sources.
+\item If the caption of a figure or a table
+is longer than one line, the new macro
+can line them up right after the table or figure number.
+\item There are some new options. For example
+the \verb+\blueline+ command can be included to emulate blueline
+paper, and
+\verb+\verbatimfile{file}+ and \\
+\verb+\verbatimlisting[n]{file}+
+can be used to include code or a
+program into the thesis.
+\item Finally, all known errors in the old {\tt thesis} document style have been
+corrected in this new {\tt eethesis} document style.
+\end{itemize}
+
+The journal model for the {\tt eethesis} document style is {\sl IEEE
+Transactions on Automatic Control}. It does not matter if your major area is
+communications, computers, power, etc., as this journal model is accepted by
+the entire department. There are many differences in format among the IEEE
+journals; you cannot simply change the footnote at the bottom of the first page
+to say that the journal model is some other IEEE journal. The footnote will not
+be true and your thesis may be rejected.
+
+If you are in a department other than Electrical Engineering, you may still be
+able to use this document style; check with your department. If the journal
+model proves to be unsatisfactory to your department, you should probably
+consider using another means to type your thesis. Changing a document style is
+not a trivial matter; only experienced users should attempt it.
+
+\section{Getting Started}
+Before you embark upon your thesis production, we suggest that you obtain a
+copy of the ``Thesis Manual''
+and a copy of Leslie Lamport's {\em \LaTeX\
+User's Guide and Reference Manual}~\cite{ll} which are available in the MSC
+Bookstore. If you intend to write equations in \TeX\ you may wish to purchase
+a copy of Donald Knuth's {\it The \TeX book}~\cite{dk}, which is also available
+in the MSC Bookstore. Another introductory \LaTeX\ book is
+David J. Buerger's {\em \LaTeX\ for Engineers and
+Scientists}~\cite{db}, also available in the MSC Bookstore.
+You might also find it useful to have a copy of the
+Electrical Engineering \LaTeX\ Examples
+book, which is available in the WERC Copy Center.
+We are assuming that you have
+at least a basic understanding of \LaTeX\ and an editor. You will need
+to consult the \LaTeX\ Users Guide and possibly {\it The \TeX book},
+the latter when producing complex mathematical equations.
+
+\section{Where to Find the Files}
+There are two types of files associated with the \LaTeX\ thesis document
+style:
+%\doublespace
+\begin{itemize}
+\item \verb+.tex+ files: There are ``boiler-plate'' files for each of the
+preliminary and supplementary pages. You will need to copy all of these files
+into your own directory and customize them for your thesis.
+On ee or eemips you can do this by issuing the command
+
+\singlespace
+\begin{verbatim}
+ cp /usr/local/lib/tex/eethesis_template/* .
+\end{verbatim}
+\doublespace
+You will need to copy the
+boiler-plate files from ee or eemips if you are running on SIGMA or VENUS using
+ftp.
+\item \verb+.sty+ files: These are the files that \LaTeX\ reads in to control
+formatting. You will not normally need to access these files directly
+unless you want to modify the style or copy the files to your PC or Macintosh
+(see Chapter~III, Section~H--4). There are three files associated with the
+\LaTeX\ thesis document style: {\tt eethesis.sty,
+eethe12.sty, and eethetitle.sty.}
+\end{itemize}
+
+Appendix~A contains a sample thesis that illustrates the output from this
+document style. Table~I shows the location of the files on various computers on
+campus.
+
+\begin{table}[tbp]
+\caption{Location of {\tt eethesis} Files}
+\vspace{12pt}
+\centerline{
+\begin{tabular}{||c l l||}
+\hline\hline
+Node&.sty files&.tex files\\
+\hline
+ee&/usr/local/lib/tex/inputs&
+/usr/local/lib/tex/eethesis\_template\\
+eemips&/usr/local/lib/tex/inputs&
+/usr/local/lib/tex/eethesis\_template\\
+sigma&tex\_root:[latex.styles]&\\
+venus&tex\_root:[latex.styles]&\\
+\hline\hline
+\end{tabular}
+}
+\end{table}
+
+\section{Running Your Thesis}
+A thesis tends to be so long that you will often run out of disk space if you
+try to run it all at once. Also, it is inefficient to re-run your entire thesis
+when all you have done is to have made a small change in a portion of it.
+Therefore, it is recommended that you use separate files for each chapter and
+each preliminary and supplementary page. The best way to do this is to use the
+\verb+\include+ and \verb+\includeonly+ commands, which are explained in
+Section~4.4 of the \LaTeX\ manual. Basically, what you should do is to work from
+one main file, which will then call the file(s) you wish to work on. You need
+not enter the extension \verb+.tex+ in the \verb+\include+ statements. A sample
+main file is available for you to edit as you wish; it is called
+\verb+thesis.tex+ and contains the following commands:
+
+\refspace
+\begin{verbatim}
+ \documentstyle{eethesis}
+ \includeonly{title,approval,...}
+ %\def\type{Dissertation} % Uncomment this line for dissertation
+ %\def\degree{DOCTOR OF PHILOSOPHY} % Uncomment this line for Ph.D.
+ %\def\major{Dept. Name} % Uncomment this line if not ELEN
+ \begin{document}
+ \pagenumbering{roman}
+ \include{title}
+ \include{approval}
+ \include{abstract}
+ \include{ded}
+ \include{ack}
+ \include{lists}
+ \pagenumbering{arabic}
+ \setlength{\headheight}{12pt}
+ \pagestyle{myheadings}
+ \include{ch1}
+ \include{ch2}
+ \include{bib} % Include only one of these two lines.
+% \include{biblio} % "biblio" if you use BibTeX, "bib" if not.
+% \include{supp}
+ \include{append}
+ \include{vita}
+ \end{document}
+\end{verbatim}
+\doublespace
+
+The \verb+\include+ commands tell \LaTeX\ which files comprise the entire
+document while the \verb+\includeonly+ command tells \LaTeX\ which files you
+want to run at that time. When you \verb+latex+ the main file (i.e.,
+\verb+latex thesis+), \LaTeX\ will ignore all \verb+\include'd+ files that are
+not mentioned in the \verb+\includeonly+ command, but it will keep track of
+page numbers, equation numbers, etc.\ as if the ignored files
+had been included. We recommend that you perfect each portion of your thesis
+by using the \verb+\includeonly+ command to work on each file individually.
+You can delete the \verb+.dvi+ files from your directory if you wish, but you
+should keep the latest version of the \verb+.aux+ files around. The \verb+.aux+
+file is what \LaTeX\ uses to keep track of things relative to the other
+\verb+\include'd+ files (e.g., page numbers, equation numbers, reference
+numbers, figure numbers, and table numbers).
+
+\noindent {\bf Note:} When using the \verb+\include+ command, it is very
+important to be sure that any new counters, environments, etc.\ that you define
+are defined in the preamble of your main file (i.e., before
+\verb+\begin{document}+ in \verb+thesis.tex+). Do {\em not} define any of these
+things in the middle of your document or an error will occur.
+
+After you have perfected each section individually by using \verb+\includeonly+,
+you need to put the entire thesis together. The best way to do this
+is to start at the beginning of your document (the titlepage) and work to the
+end (the vita), \LaTeX'ing one or more files at a time using
+\verb+\includeonly+. The only file that should not be \LaTeX'd in sequential
+order is the file that contains your Table of Contents, List of Tables, and
+List of Figures (i.e., \verb+lists.tex+).
+This file should be \LaTeX'd last so that it can gather the most up-to-date
+information from the various \verb+.aux+ files. If you run your files
+sequentially, they will have all of the information they need from the previous
+files (page numbers, equation numbers, etc.) to format text correctly. However,
+if you have made major changes in the file since the last time you \LaTeX'd it
+(i.e., changes which affect the \verb+.aux+ file), \LaTeX\ will output a
+warning message to your screen telling you that you must re-run your document
+to ``get cross-references right.''\@ It is important that you do \LaTeX\ your
+thesis again; otherwise page numbers, equation numbers, or the table of contents
+may not be correct. It is important to remember that when you print
+a portion of your thesis it may not be totally correct if {\em any} of
+the other \verb+\incude'd .aux+ files is not up-to-date. Do not be alarmed if
+page numbers or equation numbers are wrong; if you \LaTeX\ your thesis
+sequentially and re-run individual files when told to do so by the computer,
+your final output should be correct.
+
+\section{Printing Your Thesis}
+Different computers at Texas A\&M University
+have different commands for printing a \LaTeX\
+document. You will always begin the process with the command {\tt latex filename}.
+This produces a {\tt .dvi} file which can be transferred to any other computer
+for further processing. After this, you must run some sort of {\tt dvi} program
+on your document and then use another command to print it. Some computer systems
+combine all of these steps into one command.
+
+The commands for \verb+ee+ or \verb+eemips+ to {\tt dvi} and {\tt print}
+the \LaTeX\ output are:
+
+\singlespace
+\begin{verbatim}
+dvihp file
+lpr -Phpzac -l file.hp
+\end{verbatim}
+
+\doublespace\noindent
+\verb+dvihp+ is a program that converts \verb+.dvi+ files to \verb+.hp+ files
+for our \verb+HP Laserjet 2000+ laser printer.
+There are many options available for \verb+dvihp+, for details the manual page
+is included in Appendix~F. The \verb+-Phpzac+ option selects the
+\verb+HP Laserjet 2000+ printer in Zachry~214.
+The \verb+-l+ option is required for printing \verb+.hp+ files.
+If you forget to put \verb+-l+ after \verb+lpr+,
+you will not get any binary file printout.
+
+The EE department also has a DEC LPS20 PostScript printer. For straight \LaTeX,
+this printer is slower than the {\tt Laserjet 2000}, and the cost per page for
+supplies is higher. For these reasons, we ask that you use the LPS20 only if you
+have PostScript graphics to include or if the {\tt Laserjet 2000} is down. The
+command to {\tt dvi} and {\tt print} the output on ee or eemips are as follows:
+
+\singlespace
+\begin{verbatim}
+dvips file
+lpr -Plpszac -l file.ps
+\end{verbatim}
+\doublespace
+{\tt dvips} converts {\tt .dvi} files to {\tt .ps} files for a PostScript
+printer. There are many options for {\tt dvips}; the manual page is included
+in Appendix~G. The \verb+-Plpszac+ option selects the LPS20 printer in
+Zachry~214. Including PostScript graphics is discussed in Section~III.D.3.
+
+Users of SIGMA and
+VENUS can use the Xerox 4050 printer available in ZCC. After
+you finish running \LaTeX, you just type
+\begin{verbatim}
+texrox/que=xrxzcc file
+\end{verbatim}
+and then you can go to the ZCC help desk to get your printout.
+Check at a help desk if you don't know the commands to use from your computer.
+
+There are two recommended ways for printing your thesis on blueline.
+The first is to send your \verb+.dvi+ files to your SIGMA or VENUS account
+(available to every student --- see Appendix~I for instructions on getting an
+account) and then send your thesis to the Xerox 4050
+laser printer in the RCC (The Remote Computing Center behind the library) or to
+one of the two Xerox 9700 laser printers in the TCC (The Teague Computing Center
+in the Teague Building).
+The commands for doing this are
+\begin{verbatim}
+$ texrox/box=nnnn/queue=RCC/form=11A1 filename (for the 4050)
+$ texrox/box=mmmm/queue=XEROX/form=11A1 filename (for the 9700s)
+\end{verbatim}
+Do not type in the extension on your filename.
+Your thesis will be printed on blueline paper and you may pick it up from the
+box that you specified (The RCC boxes are numbered from 100A through 117E and
+the TCC boxes are numbered 001A through 017D; you
+may choose any one). The
+\TeX{\sc rox} reference card is included in Appendix~J of this manual.
+
+A second way is to print your thesis on a laser printer attached to the computer
+system you usually work on, and then have one of the copy centers copy your
+thesis on blueline.
+To avoid paper jams, blueline paper is {\bf not} allowed in EE Department
+printers.
+
+Paper is expensive. Do not run more than one final copy of your thesis or
+dissertation on EE Department printers. Take your final version to a copy
+center to obtain additional copies.
+
+Sometimes a laser printer may be out of adjustment and your output may
+not be within the blue line (try to find a sheet of
+blueline paper to check your
+output). To alter the left/right orientation on the page, change the parameter
+\verb+\oddsidemargin+ (see p.163 of the \LaTeX\ book), and to alter the
+top/bottom orientation change the parameter \verb+\topmargin+, which is
+initially set at $-.15$ inches. For example, if
+the laser printer is printing your thesis .25 inches too far to the left, you
+will want to increase the \verb+\oddsidemargin+. Since the
+\verb+\oddsidemargin+ is initially set at .25 inches, you will want to change
+it to 0.5 inches by placing the command
+\verb+\setlength{\oddsidemargin}{0.5in}+ into your main file (\verb+thesis.tex+)
+right before the \verb+\begin{document}+ statement. If your thesis is being
+printed .25 inches too far to the right, you can set the \verb+\oddsidemargin+
+to \verb+0in+ in the same manner.
+
+\section{Using a Spelling Checker}
+After you have typed in your thesis, it is a good idea to run your document
+through a spelling check program. There are a number of different spelling
+programs installed on the campus computers. If possible, you probably want to
+use one that understands that \TeX\ and \LaTeX\ commands should not be flagged
+as spelling errors.
+
+On VENUS the public domain spelling program installed automatically
+selects \TeX/\LaTeX\ mode.
+To check the spelling of a file {\tt junk.tex} issue
+the command
+\begin{verbatim}
+ spell junk.tex
+\end{verbatim}
+
+\doublespace
+On ee and eemips there are two spelling programs that can be used with
+\TeX/\LaTeX.
+There is an interactive program \verb+ispell+. See the manual
+page for information
+on \verb+ispell+. You can also use the following method to obtain a list of the
+misspelled words and then correct them using an editor:
+\newpage
+
+\singlespace
+\begin{verbatim}
+ detex < file.tex > junk
+ spell junk > misspell
+\end{verbatim}
+\doublespace
+The file {\tt misspell} will contain a list
+of the misspelled words. If you misspell the
+same word several times, it will only be listed once. Therefore, be sure to
+search for all occurrences.
+
+\chapter{USING THE THESIS MACROS}
+\section{The Title Page}
+The file which you will be using is called {\tt title.tex}. After copying this
+file to your directory, edit it and replace the
+data enclosed within the braces with the appropriate information for your
+particular thesis. Remember to enclose all of the parameters within braces.
+As required by the Thesis Manual, the month must be either
+May, August, or December. The following is the file
+{\tt title.tex} that you have copied into your account:
+\medskip
+
+\refspace
+\begin{verbatim}
+\maketitlepage
+{First Line of Title\\ Second Line of Title} % For one-line title,
+ % delete the "\\"
+{Your Full Name}
+{Degree} % For example, `Master of Science'
+ % or `Doctor of Philosophy'
+{Month Year}
+{Major Subject} % For example, `Electrical Engineering'
+\end{verbatim}
+\doublespace
+
+\medskip\noindent
+Now run \LaTeX\ on the modified file {\tt titlepage.tex} as usual.
+
+\section{The Approval Page}
+We have created four forms of the Approval Page to accommodate
+the most common organizations of the Advisory Committee.
+Use only {\it one} of the following {\it Approval Page} macros:
+\smallskip
+
+\begin{enumerate}
+\item For One chairman and 3 members use \verb+\approvalone+
+\item For One chairman and 4 members use \verb+\approvaltwo+
+\item For Two Co--Chairmen and 2 members use \verb+\approvalthree+
+\item For Two Co--Chairmen and 3 members use \verb+\approvalfour+
+\end{enumerate}
+
+\smallskip
+If you're not in one of these categories, either change your
+Advisory Committee or copy \verb+eethetitle.sty+ into your directory and edit
+the approval page macro at your own risk!
+
+You will edit one of the approval page files in the same manner that you did
+when creating the titlepage. Remember to enclose all of the parameters within
+braces.
+
+Examples of each of the approval files are shown below; they can be found in
+\verb+approval.tex+. Study the Thesis Manual
+for additional detailed information. Use one of the following and delete
+the others. For a single line title delete the \verb+`\\'+.
+\nobreak
+\bigskip
+
+\refspace
+\begin{verbatim}
+\approvalone
+{First Line of Title\\ Second Line of Title}
+{Your Full Name}
+{Chairman's name}
+{Member's Name}
+{Member's Name}
+{Member's Name}
+{Head of Department's Name}
+{Month Year}
+
+\approvaltwo
+{First Line of Title\\ Second Line of Title}
+{Your Full Name}
+{Chairman's name}
+{Member's Name}
+{Member's Name}
+{Member's Name}
+{Member's Name}
+{Head of Department's Name}
+{Month Year}
+
+\approvalthree
+{First Line of Title\\ Second Line of Title}
+{Your Full Name}
+{Co-Chairman's name}
+{Co-Chairman's name}
+{Member's Name}
+{Member's Name}
+{Head of Department's Name}
+{Month Year}
+
+\approvalfour
+{First Line of Title\\ Second Line of Title}
+{Your Full Name}
+{Co-Chairman's name}
+{Co-Chairman's name}
+{Member's Name}
+{Member's Name}
+{Member's Name}
+{Head of Department's Name}
+{Month Year}
+\end{verbatim}
+\doublespace
+
+
+\smallskip
+\noindent {\bf Note:} When you run the approval page, you may get some
+``overfill hbox'' warnings with ``badness 10000.'' Neglect these
+warnings---hboxes are too picky! These warnings are due to the layout
+of the approval page which is formatted correctly.
+
+\section{ The Abstract Page}
+You have two alternatives from which to choose in creating your
+abstract page. Use \verb+\absone+ if you have one chairman
+on your Advisory Committee; use \verb+\abstwo+ if you have two co--chairmen.
+Begin by editing the file {\tt abstract.tex} and replace the data enclosed
+within the braces with the appropriate information for your thesis.
+Include the entire text of the abstract within one set of braces.
+As stated in the Thesis Manual, the text of your abstract must not
+exceed 350 words in length.
+The following is the file {\tt abstract.tex}:
+\medskip
+\goodbreak
+
+\refspace
+\begin{verbatim}
+\absone
+{First Line of Title\\Second Line of Title}
+{Month Year}
+{Your Full Name}
+{Degree, University;\\Degree, University} % Degrees ALREADY RECEIVED,
+ % e.g. {B.S., Rice University;\\
+ % M.S., Texas A\&M University}
+ % If only one degree, delete `;\\'
+{Chairman's name}
+{Place your abstract between these braces. The text of your abstract
+must not exceed 350 words. Place your abstract between these braces.
+The text of your abstract must not exceed 350 words.}
+
+\abstwo
+{First Line of Title\\Second Line of Title}
+{Month Year}
+{Your Full Name}
+{Degree, University;\\Degree, University}
+{Co-Chairman's name}
+{Co-Chairman's name}
+{Place your abstract between these braces. The text of your abstract
+must not exceed 350 words. Place your abstract between these braces.
+The text of your abstract must not exceed 350 words.}
+\end{verbatim}
+
+\doublespace
+\section{The Dedication Page (optional)}
+You may include a dedication in your thesis if you like. Using the
+\verb+\dedicate+ command, you can enter in as many names as will fit on one
+line. We recommend one or two names only. If you do not wish to have this
+page, do not include it when you run your final thesis copy.
+The file that you will be editing (\verb+ded.tex+) looks like this:
+\medskip
+
+\begin{verbatim}
+\dedicate{Name}
+\end{verbatim}
+
+\medskip
+\doublespace
+For example, if you replaced the word ``Name'' in the above file with
+``Suzanne and Donna,'' then you would get the following line
+appropriately spaced on its own page:\\
+\smallskip
+\centerline{To Suzanne and Donna}
+\doublespace
+
+\section{The Acknowledgment Page (optional)}
+The file which you will be using is called {\tt ack.tex}.
+Begin by editing this file inserting the data appropriate for your thesis.
+Place the entire text of your acknowledgment within
+one set of braces. If you do not wish to have this
+page, do not include it when you run your final thesis copy.
+The following is the file {\tt ack.tex}:
+\smallskip
+\goodbreak
+
+\begin{verbatim}
+\acknow{Place your acknowledgment within these braces.}
+\end{verbatim}
+\doublespace
+
+\section{Table of Contents, List of Tables, and List of Figures}
+Latex will automatically generate these for you if you \verb+\include+ a file
+such as \verb+lists.tex+ shown here:
+\refspace
+\begin{verbatim}
+ \pagestyle{headings}
+ \setlength{\headheight}{36pt}
+ \tableofcontents
+ \listoftables
+ \listoffigures
+\end{verbatim}
+\doublespace
+If you have only one table or figure (or no tables or figures), you do not need
+to include a listing, and you can therefore delete the appropriate command from
+\verb+lists.tex+. Every time you use a \verb+\chapter+, \verb+\section+,
+\verb+\subsection+, or \verb+\appendix+ command, an entry will be created in
+the Table of Contents. An entry will also be automatically generated for the
+References and Vita pages. Table and figure entries are generated by the
+\verb+\caption+ command. Remember that if you make any changes that affect
+these lists, you must \LaTeX\ your entire document to update the \verb+.aux+
+files before you try to \verb+\include{lists}+ to generate your updated lists.
+
+If your Table of Contents is produced in such a way that there are no chapter
+entries on a particular page (see the second page of the Table of Contents of
+this manual for an example), the Thesis Clerk will not approve your thesis. You
+have two options: either white-out the word ``CHAPTER'' and have that page
+photocopied onto blueline paper, or force a pagebreak by putting the following
+command at the beginning of one of your chapter files:
+\begin{verbatim}
+\addtocontents{toc}{\protect\newpage}
+\end{verbatim}
+
+\noindent {\bf Note:} You may see some ``underfull vbox'' warnings when running
+{\tt lists.tex}. Ignore these warnings; they are due to the format of these
+pages.
+
+\section{The Reference Page}
+\subsection{The \LaTeX\ Bibliography Environment}
+You have two choices of how to do your references. The first
+is to use the bibliography environment described in the \LaTeX\ manual.
+This will produce the appropriate page headings for your bibliography
+and will also create the appropriate Table of Contents entry. The \LaTeX\
+manual can show you how to do this. Be sure to take advantage of the automatic
+referencing facility offered by \LaTeX. The \verb+\cite{}+ command and the
+other facets of automatic referencing are explained in Section~C.10.3 of
+the \LaTeX\ Users Guide. It can be very beneficial to use \verb+\cite{}+ to note
+your citations rather than numbering them yourself, especially if you decide to
+delete or add an entry to your bibliography. \LaTeX\ will renumber all of your
+citations automatically. If you wish to produce your bibliography this way, you
+can edit the file \verb+bib.tex+ and use a `\%' to comment out the
+\verb+\include{biblio}+ command in your main file.
+Examples of references formatted according to the journal
+model {\sl IEEE Transactions on Automatic Control} are given below.
+
+\refspace
+\begin{verbatim}
+\begin{thebibliography}{10}
+
+\bibitem{JA:1}
+Joe Author, ``Title of report,'' Research Report~23, Department of
+ Publication, Name of University, City, State, October 1999.
+
+\bibitem{AAJA:1}
+Arthur Author and Joe Author, ``Title of journal article,'' {\sl
+ Title of Journal}, vol.~76, pp.~27--45, July 1776.
+
+\bibitem{AB:1}
+Author Book, {\sl Title of Book}, vol.~1. City, State of Publication:
+ Name of Publishing Company, 16th edition, 1988.
+
+\bibitem{MWJCDL:1}
+Matthew Wright, James Chodzko, and Danny Luk, {\sl Title of Book}.
+ College Station, Texas: Name of Publisher, 1988, chap.~4--5,
+ pp.~56--99.
+
+\bibitem{HC:1}
+Han Chen, ``Title of Booklet,'' College Station, Texas, Texas A\&M
+ University, July 1989.
+
+\bibitem{ROPC:1}
+Russell~L. Oertel and Pierce Cantrell, {\sl \LaTeX\ Example Manual}.
+ Department of Electrical Engineering, Texas A\&M University,
+ College Station, Texas, September 1988.
+
+\bibitem{JS:1}
+Joseph~W. Simpson, ``Title of article,'' in {\sl Title of Book}.
+ Editor of~Book, Ed., City, State of Publication: Name of
+ Publishing Company, 1983, chap.~3, pp.~400--402.
+
+\bibitem{PR:1}
+Peter~J. Rizzo, Ed., {\sl Title of Conference Proceedings},
+ Sponsoring Organization, Location of Symposium, Name of
+ publisher, June 1987.
+
+\bibitem{AA:1}
+Arthur Article, ``Title of conference article,'' in {\sl Title of
+ Conference Proceedings Record}, Sponsoring Organization,
+ Location of Symposium, Name of Publisher, January 1989.
+
+\bibitem{PKGT:1}
+P. Kenneth and G.~E. Taylor, ``Solution of variational problems
+ with bounded control variables by means of the generalized
+ {N}ewton-{Raphson} method,'' presented at the Symp.\ on Recent
+ Advances in Optimization Techniques, Carnegie Inst.\ of Tech.,
+ Pittsburgh, Pa., April 1965.
+
+\bibitem{RL:1}
+R.~E. Larson, ``Title of dissertation,'' Ph.D. dissertation,
+ Stanford University, Stanford, California, 1964.
+
+\bibitem{EG:1}
+Elaine~G. Haschke, ``Title of thesis,'' Master's thesis, Drofnats
+ University, West Yellowstone, Montana, May 1993.
+
+\bibitem{JS:2}
+J.~D. Simon, private communications, November 1963.
+
+\end{thebibliography}
+\end{verbatim}
+\doublespace
+\subsection{{\sc Bib}\TeX}
+The second way to handle references
+is to use {\sc Bib}\TeX.\@ {\sc Bib}\TeX\ will
+be useful if you are writing other papers (possibly
+for publication) similar to your thesis. {\sc Bib}\TeX\ allows
+you to build one bibliographic database for use with all of your
+papers. It is explained in Appendix~B of the \LaTeX\ manual. The \LaTeX\
+manual recommends that you not use {\sc Bib}\TeX\ for just one paper,
+but we think it should be used, even for just your thesis, especially
+if you hate worrying about formatting each entry of your bibliography. Another
+good reason to use {\sc Bib}\TeX\ is that it automatically puts your
+bibliography in the order that sources were cited, freeing you from worrying
+about that problem as well.
+
+Your bibliographic database will look something like the file
+\verb+bibdata.bib+, which is shown on the following pages (the output
+generated from this file
+was shown in the previous section). You may notice that there are braces
+around a few of the words and letters in the database. This is because
+{\sc Bib}\TeX\ will de-capitalize all of the letters in titles, except for the
+first letter of the first word. In order to preserve the capitalization of
+proper names in an article title, you must enclose the word or letter in braces
+so that {\sc Bib}\TeX\ knows to leave it alone. Pages 144--146 of the \LaTeX\
+User's Guide will help you decide how to classify each of your references. Also,
+there have been some minor changes made in {\sc Bib}\TeX\ since the \LaTeX\
+User's Guide was written. These changes are explained in a document called {\sl
+{\sc Bib}\TeX ing}~\cite{op} that is included in Appendix~B.
+\begin{itemize}
+\item @inbook and @inproceedings are for {\em portions} of a book or
+proceedings record, while @book and @proceedings are for the entire source.
+\item @booklet and @manual are formatted much like a book.
+\item You may use the {\tt note} field to indicate when an @unpublished article
+will be published and use @misc when nothing else fits.
+\item There is now an optional {\tt type} argument in @mastersthesis and
+@phdthesis which you can use to cause {\sc Bib}\TeX\ to call your reference an
+``M.S. Thesis'' (or whatever) instead of the default ``Master's Thesis.''
+\end{itemize}
+\goodbreak
+
+\refspace
+\begin{verbatim}
+@techreport{JA:1,
+ author="Joe Author",
+ title="Title of Report",
+ type="Research Report",
+ institution="Department of Publication, Name of University",
+ year=1999,
+ number=23,
+ address="City, State",
+ month="October"}
+
+@article{AAJA:1,
+ author="Arthur Author and Joe Author",
+ title="Title of Journal Article",
+ journal="Title of Journal",
+ volume=76,
+ pages="27--45",
+ month="July",
+ year=1776}
+
+@book{AB:1,
+ author="Author Book",
+ title="Title of Book",
+ address="City, State of Publication",
+ publisher="Name of Publishing Company",
+ volume=1,
+ edition="16th",
+ year=1988}
+
+@inbook{MWJCDL:1,
+ author="Matthew Wright and James Chodzko and Danny Luk",
+ title="Title of Book",
+ chapter="4--5",
+ pages="56--99",
+ address="College Station, Texas",
+ publisher="Name of Publisher",
+ year=1988}
+
+@booklet{HC:1,
+ author="Han Chen",
+ title="Title of Booklet",
+ howpublished="Texas A\&M University",
+ address="College Station, Texas",
+ month="July",
+ year=1989}
+
+@manual{ROPC:1,
+ author="Russell L. Oertel and Pierce Cantrell",
+ title="\LaTeX\ Example Manual",
+ organization="Department of Electrical Engineering, Texas A\&M
+ University",
+ address="College Station, Texas",
+ month="September",
+ year=1988}
+
+@incollection{JS:1,
+ author="Joseph W. Simpson",
+ title="Title of Article",
+ booktitle="Title of Book",
+ editor="of Book, Editor",
+ address="City, State of Publication",
+ publisher="Name of Publishing Company",
+ year=1983,
+ chapter="3",
+ pages="400--402"}
+
+@proceedings{PR:1,
+ title="Title of Conference Proceedings",
+ editor="Peter J. Rizzo",
+ organization="Sponsoring Organization",
+ address="Location of Symposium",
+ publisher="Name of publisher",
+ month="June",
+ year=1987}
+
+@inproceedings{AA:1,
+ author=" Arthur Article",
+ title="Title of Conference Article",
+ booktitle="Title of Conference Proceedings Record",
+ organization="Sponsoring Organization",
+ address="Location of Symposium",
+ publisher="Name of Publisher",
+ month="January",
+ year=1989}
+
+@unpublished{PKGT:1,
+ author="P. Kenneth and G. E. Taylor",
+ title="Solution of variational problems with bounded control
+ variables by means of the generalized {N}ewton-{Raphson} method",
+ note="presented at the Symp.\ on Recent Advances in Optimization
+ Techniques, Carnegie Inst.\ of Tech., Pittsburgh, Pa.",
+ month="April",
+ year=1965}
+
+@phdthesis{RL:1,
+ author="R. E. Larson",
+ title="Title of Dissertation",
+ school="Stanford University",
+ address="Stanford, California",
+ year=1964}
+
+@mastersthesis{EG:1,
+ author="Elaine G. Haschke",
+ title="Title of Thesis",
+ school="Drofnats University",
+ address="West Yellowstone, Montana",
+ month="May",
+ year="1993"}
+
+@misc{JS:2,
+ author="J. D. Simon",
+ month="November",
+ year=1963,
+ howpublished="private communications"}
+\end{verbatim}
+
+\doublespace
+Once you have created your bibliographic database, you are ready to use it to
+automatically create the bibliography of your thesis. To use {\sc Bib}\TeX, you
+should \verb+\include+ the file \verb+biblio.tex+ (shown below). Also use the
+`\%' to comment out the \verb+\include{bib}+ command in your main file.
+
+\refspace
+\begin{verbatim}
+ \bibliographystyle{theunsrt}
+ \bibliography{bibdata}
+\end{verbatim}
+\doublespace
+
+These commands specify that your bibliography should be created from entries
+in the file {\tt bibdata.bib}. There are several bibliography styles that can be
+used with the eethesis document style; the style {\tt theunsrt.bst} is the style
+used in the examples in this manual. The entries in this style are patterned
+after those in {\sl IEEE Transactions on Automatic Control}. It lists the
+sources in the order they were cited. There is also a generic {\tt ieeetr.bst},
+which formats sources similar to many IEEE publications. If neither of these
+styles is suitable for your department, you might consider {\tt acm.bst} or {\tt
+siam.bst} which format your bibliography in the style of ACM and SIAM
+publications. Check the {\tt tex.bibtex} directory on the machine that you use
+to see if there are any other {\tt .bst} files you can use.
+
+If none of these styles or the standard
+styles are suitable for use in your department, you can type your bibliography
+by hand as explained in the previous section of this manual or you try to adapt
+one of the bibliography styles (a word of warning --- adapting an existing
+bibliography style is not a trivial matter).
+Alternatively, you can check the \LaTeX\ file server at Clarkson.
+
+To create the bibliography, you must first \LaTeX\ each section of your paper
+so that {\tt .aux} files are created. After this, you type:
+
+\singlespace
+\begin{verbatim}
+ $ bibtex thesis
+\end{verbatim}
+
+\doublespace
+{\sc Bib}\TeX\ will then create a {\tt thesis.bbl} file by scanning the
+\verb+.aux+ files for {\tt $\backslash$cite\{~\}} commands. Because
+{\sc Bib}\TeX\ reads only the \verb+.aux+ files, it doesn't matter which files
+you have mentioned in an \verb+\includeonly+ command.
+It will create an entry in the bibliography for every different
+source that you cite in your paper. This {\tt .bbl} file will look very much
+like a bibliography that you might type into a \LaTeX\ file yourself. In fact,
+you may edit the {\tt .bbl} file should you find that you would like to make
+some minor changes to the bibliography. ({\sc Bib}\TeX\ isn't perfect, and may
+not handle unusual things quite right.) However, the {\tt .bbl} file you have
+edited will be destroyed, and a new one created if you run {\sc Bib}\TeX\
+again. The next time you \LaTeX\ your paper
+with \verb+\includeonly{biblio}+,
+the bibliography will be printed as if you had put it into the thesis yourself.
+\subsection{Supplemental Sources Consulted}
+Following your list of references, you may include a list of Supplemental
+Sources Consulted for general references as outlined in the Thesis Manual.
+Examples of this are shown below.
+
+\refspace
+\begin{verbatim}
+\begin{supplements}
+\item Author(s) of Paper, ``Title of Paper,'' presented at
+the Name of Conference, City, State of Conference,
+Date of Conference.
+
+\item Name of Person, private communications, Date.
+
+\item I can put anything here.
+\end{supplements}
+\end{document}
+\end{verbatim}
+
+\doublespace
+
+There is a trick you can use to have {\sc Bib}\TeX\ make your supplemental
+sources section for you. Create a dummy file which contains only the
+\verb+\bibliographystyle+ command, the \verb+\bibliography+ command, and
+\verb+\nocite+ commands. You can \verb+\nocite+ all of your supplemental
+sources and run {\sc Bib}\TeX\ to create a {\tt .bbl} file. You can then edit
+the {\tt .bbl} file, changing the commands \verb+\begin{thebibliography}+ and
+\verb+\end{thebibliography}+ to \verb+\begin{supplements}+ and
+\verb+\end{supplements}+. Finally, rename the file to {\tt supp.tex} and
+\verb+\include+ it in your thesis. The dummy file should look something like
+this:
+
+\refspace
+\begin{verbatim}
+\documentstyle{eethesis}
+\begin{document}
+\nocite{src1}
+\nocite{src2}
+\nocite{src3}
+\bibliographystyle{thesis}
+\bibliography{bibdata}
+\end{document}
+\end{verbatim}
+
+\doublespace
+
+\section{Appendices}
+Appendices may be added to the end of your paper. If you choose to have
+appendices, they should be created the same way you would start a chapter
+except that you use \verb+\appendix{Title}+ instead of \verb+\chapter{Title}+.
+\LaTeX\ will automatically label the appendix with a letter (i.e.,
+\verb+Appendix A, Appendix B, etc.+) and capitalize the appendix title. This is
+the file \verb+append.tex+.
+
+\refspace
+\begin{verbatim}
+\appendix{Title of Appendix}
+This is the text of the Appendix. If this is the first appendix, it
+will be labeled Appendix A.
+\end{verbatim}
+\medskip
+\doublespace
+
+\section{The Vita Page}
+The file which you will be using is called {\tt vita.tex}. Begin by
+inserting your brief biographical sketch as the parameter for \verb+\vita+
+and your typist's name (which is probably {\it your} name) as the
+parameter for \verb+\typist+. Your {\it Vita} must not exceed
+one page in length. You should consult the Thesis Manual for other
+requirements of the {\it Vita} paragraph.
+Remember, since the whole paragraph is just one parameter, you must use only
+one set of braces. Do not enclose every line you enter with braces!
+This is what you will see in {\tt vita.tex}:
+\medskip
+\goodbreak
+
+\refspace
+\begin{verbatim}
+\vita{Place the text of your Vita between these braces.}
+\typist{Typist's Name}
+\end{verbatim}
+
+\doublespace
+\medskip
+If you decide that you do not want to acknowledge your typist in your
+document, then do not use the \verb+\typist+ command after \verb+\vita+.
+
+\chapter{FORMATTING THE BODY}
+The body of a thesis produced by this document style is formatted using the
+journal {\sl IEEE Transactions on Automatic Control} as a model. There is no
+{\em simple} way to adapt this document style so that it follows a different
+model. We suggest that you either use this system as it is (assuming your
+department will approve of the format), or use another method for writing your
+thesis.
+
+\section{The First Page of the Body}
+The first page of the body of your thesis is a special one.
+The page numbering scheme needs to be
+reinitialized so that the page numbers will now be arabic instead
+of roman numerals. You are also required to make a footnote designating the
+journal model you used. We have this all set up for you with a \verb+\body+
+command to be used after the first \verb+\chapter+ command.
+
+The \verb+\body+ command is allowed {\em only} in Chapter~1. If you put
+\verb+\body+ in every chapter, the page numbers will be reset every time
+you put the \verb+\body+. Therefore, {\em DO NOT} put \verb+\body+ command
+in other chapters except Chpater~1.
+
+\section{Headings for Chapters, Sections, and Subsections}
+Now you are ready to enter the text of your thesis. You may do this by editing
+the sample chapter files which we have provided for you. There are two files:
+\verb+ch1.tex+ for the first chapter, and \verb+ch2.tex+ for all subsequent
+chapters. Most theses have chapters and sections. Very detailed documents
+often have subsections as well. The chapter command looks like this:
+\medskip
+\begin{verbatim}
+ \chapter{Title of Chapter}
+\end{verbatim}
+\medskip
+This command will start the new chapter on a new sheet of paper, and skip the
+proper amount after the title before it begins to print your text. You do not
+need to leave any special blank lines or specify any spacing. This command will
+also automatically capitalize the chapter title; it is the only one of the
+sectioning commands that will do this. The chapters are
+numbered with roman numerals automatically.
+
+\medskip
+\begin{verbatim}
+ \section{The Title of Your Section}
+\end{verbatim}
+\medskip
+The section command, shown above, will left-justify and properly format your
+section title. The first letter of each word in the section title must be
+capitalized; there is no automatic capitalization.
+The proper amount of spacing for the text preceding and following the title is
+included in the macro. The alphabetic characters that label the sections are
+automatic! Do not type them in.
+
+\medskip
+\begin{verbatim}
+ \subsection{The Title of Your Subsection}
+\end{verbatim}
+\medskip
+
+This command centers your subsection title. The first letter of each word in a
+subsection title should be capitalized; there is no automatic capitalization.
+The proper amount of spacing is included for the text preceding and following
+the title; do not add any spacing. Subsections will automatically be assigned
+arabic subsection numbers; do not type them in.
+
+\section{Equations}
+If your thesis does not contain complicated mathematics, the
+material in Sections~3.3, 4.2, and Appendices~C.6 and C.9.2
+of the \LaTeX\ manual will probably be sufficient. For
+sophisticated mathematics, which is \TeX 's real strength, you
+will also need to study the \TeX book.
+
+You need to pay particular attention to Section 4.2 of the
+\LaTeX\ manual where automated numbering and referencing
+of equations are described. This may seem like more trouble
+than it is worth. However, if you have ever removed an equation
+from the beginning of a paper and then had to renumber
+all subsequent equations, you will understand
+how much work this feature can save you.
+
+In the {\tt eethesis} document style, equations will
+be numbered by chapter (e.g.,
+1.1, 1.2,\ldots 2.1, 2.2, etc.). If you need subequations (e.g., 1.1a, 1.1b,
+\ldots), see the following subsection.
+If you have some
+equations which you do not want numbered, you can use the \verb+displaymath+
+environment or the \verb+\nonumber+ command.
+
+The \verb+\ref{ }+ command does not place
+parenthesis around the equations.
+You will need to insert these by yourself (e.g., \verb+(\ref{label})+).
+When you want
+to refer to an equation, do {\bf not}
+use the word equation or the abbreviation eqn. Please
+examine the examples in Appendix~A.
+
+\subsection{Subequations}\label{subeq}
+If you want the equations to be numbered as subequations (e.g., 1.1a, 1.1b,
+\ldots 1.1f, 1.1g, etc.), the style file~--~\verb+subequation.sty+, which is in
+the style-file library, can be used. If you are not on {\tt ee} or {\tt eemips},
+please check Table~I and copy \verb+subequation.sty+ to your local directory.
+
+The \verb+subequation.sty+ is included as an option in the \verb+documentstyle+
+as follows,
+
+\singlespace
+\begin{verbatim}
+\documentstyle[subequation]{eethesis}
+\end{verbatim}
+\doublespace
+
+When you want to add the subequations into the thesis, you can type
+
+\singlespace
+\begin{verbatim}
+\begin{subequations}
+ \begin{equation}
+ equation 1
+ \end{equation}
+ Text of paragraph.
+ \begin{equation}
+ equation 2
+ \end{equation}
+\end{subequations}
+\end{verbatim}
+\doublespace
+
+Equation~2 will follow equation~1 and they are subequationed even if there
+is some text in between them.
+
+The following is a simple example. If you type,
+
+\singlespace
+\begin{verbatim}
+\begin{subequations}
+ \begin{eqnarray}
+ a &=& b + c + d \\
+ &=& e + f + g \nonumber \\
+ & & h + k \\
+ &=& x + y
+ \end{eqnarray}
+\end{subequations}
+\end{verbatim}
+
+\doublespace
+You will get the following equations,
+
+\begin{subequations}
+ \begin{eqnarray}
+ a &=& b + c + d \\
+ &=& e + f + g \nonumber \\
+ & & h + k \\
+ &=& x + y
+ \end{eqnarray}
+\end{subequations}
+
+You can refer to the equation in the same manner
+as regular equations. Therefore,
+you can put \verb+\label+ command in the end of the equation and then
+use \verb+\ref+ to refer that equation.
+
+\section{Tables and Figures}
+\LaTeX\ has a \verb+table+ environment and a \verb+figure+ environment so that
+you can include tables and figures in your papers.
+The \verb+\caption+ command is used to make titles for your tables
+and figures within the text of your thesis. Look on pages 59, 72 and 177
+of your \LaTeX\ manual for more details on \verb+\caption+. You may wish to
+use the \verb+\label+ command along with \verb+\caption+ so you can
+automatically reference your figures and tables using the \verb+\ref+ command.
+This could save you from doing a great deal of renumbering should you decide to
+add or delete a figure or table.
+\subsection{Creating Tables and Figures}
+\LaTeX\ is very good at making tables and simple figures such as block
+diagrams. You can create your own tables using the \verb+tabular+ environment
+and create your own figures using the \verb+picture+ environment of \LaTeX.
+These environments are explained in the \LaTeX\ User's Guide. You will need to
+leave space between the caption and your table and between your figure and its
+caption (see examples in Appendix~A). Also, the \verb+\centering+ command will
+center your figure or table if it is included just after \verb+\begin{figure}+
+or \verb+\begin{table}+. Examples showing
+the use of these environments are included in the sample paper in Appendix~A.
+
+The caption for a figure goes below the figure, and the caption for a table
+goes above the table. See the examples in Appendix~A for the proper placement
+of the \verb+\caption{ }+ command.
+
+When you refer to a figure, use the abbreviation Fig.\ (or Figs.\ for several
+figures) and include a tie (i.e., \verb+" ~ "+) to avoid
+leaving extra space or line
+breaking. See Appendix~A for examples. Use the complete word ``Table''
+and a tie for
+referring to a table.
+\subsection{Including Tables and Figures From Other Sources}
+Leaving space for figures and tables is particularly easy
+in \LaTeX. One common approach in theses is to put
+figures on separate pages. An easy way to leave blank
+pages for figures and still keep the correct page numbering is given below.
+
+\refspace
+\begin{verbatim}
+\begin{figure}
+\vspace{8.0 in} % If your figure does not require
+ % an entire page, you may change
+ % `8.0 in' to a smaller amount.
+\caption{Isn't this a pretty picture}
+\label{fig:pretty}
+\end{figure}
+\end{verbatim}
+\doublespace
+
+When you include figures from another source,
+one way to do it is to use
+\LaTeX\ to print the caption and then cut-and-paste your figure into place.
+This way, the figure counter will be incremented and the figure will
+automatically be entered into the List of Figures. If you choose to ignore our
+advice, you will have to do these things yourself. If you use figures with
+captions not made by \LaTeX, you must manually make the entry into the List of
+Figures and update the figure counter by putting the following commands in your
+text before the next figure is to appear:
+
+\refspace
+\begin{verbatim}
+\addcontentsline{lof}{figure}{\protect\numberline{n}{caption}}
+\addtocounter{figure}{1}
+\addtocounter{page}{1}
+\end{verbatim}
+\doublespace
+If you enter more than one figure, you will have to use several
+\verb+\addcontentsline+ commands and replace the `1's in the example above with
+the number of figures you added and the number of pages you added.
+
+Instead of the cut and paste method, it is also possible to include figures
+electronically. The only problem with including figures electronically is
+that graphics often requires lots of disk space. In the following sections, we
+describe several methods for including graphics. Several of the programs can
+generate output that can be printed on either the {\tt Laserjet 2000} or the
+LPS20. Our personal favorite is to generate PostScript output and use the LPS20.
+
+\subsection{\Ps\ Figures}
+\Ps\ is a page description language that is useful for documents that include
+graphics. There are many machines and programs that can generate
+\Ps\ figures. For example, PGPLOT, Fig, and GNUPLOT described below can
+generate \Ps\ output (These programs can also generate output that can be
+printed on non-\Ps\ printers like our {\tt Laserjet 2000} as well.). In
+addition, virtually all Macintosh applications can generate PostScript (e.g.,
+MacDraw, Canvas, SuperPaint, and DeltaGraph). There is also a growing number
+of IBM PC applications that can generate PostScript. The easiest type of \Ps\
+figure to include is an Encapsulated \Ps\ file (EPSF).
+In purchasing applications
+for your Macintosh or PC, check to make sure that they can generate EPSF.
+You can simply include those figures
+into your \TeX\ or \LaTeX\ document.
+An important characteristic of
+\Ps\ figures is that they are scalable, i.e.,
+the figures can be scaled to any size.
+The DEC LPS20 is a \Ps\ printer; the {\tt Laserjet 2000} $\underline{cannot}$
+print \Ps.
+
+If you have
+\Ps\ figures, you can use the \verb+\psfig+ command to
+include those figures into a \TeX\ or \LaTeX\ document.
+In Appendix~D, you will find the \verb+\psfig+ manual and an example
+that shows how to include figures generated
+on the Macintosh into \TeX\ or \LaTeX\
+documents.
+
+\subsection{PGPLOT}
+The PGPLOT Fortran graphics subroutine library is available on ee,
+eemips, and Venus. Originally developed by
+T. J. Pearson of the Caltech Astronomy
+Department, the local version has been modified
+to generate output that can also be
+directly inserted into a \TeX\ or \LaTeX\ document.
+PGPLOT is the primary scientific graphics package we support in the EE
+department. PGPLOT can generate either \TeX\ font file output or \Ps\ output.
+PGPLOT can also plot to just about any kind of interactive device known to man.
+An interactive front-end for PGPLOT called `iplot' is also available. You can
+also call PGPLOT routines from C.
+A user's manual is
+available from the WERC copy center, and a copy is available for checkout
+in the instrument room. An example of including a PGPLOT
+\Ps\ figure into a \LaTeX\ document is shown in Appendix~H.
+
+\subsection{Fig}
+On the Sun Sparc workstations there is a plotting
+package called Fig. This package
+can be used to draw block diagrams. The graph
+can be transferred to either the \LaTeX\
+\verb+picture+ environment or Fig can generate \Ps\ output.
+It is cumbersome to draw figures in the
+\verb+picture+ environment of \LaTeX. Fig is a neat alternative, all you need to
+do is use the mouse. The help command is interactive. To execute
+Fig, do the following
+
+\singlespace
+\begin{verbatim}
+sun% fig figure.fig
+\end{verbatim}
+\doublespace
+
+\noindent
+where {\tt figure.fig} is the file name of the figure you want to draw.
+
+There are some restrictions on \LaTeX\ \verb+picture+
+output. For example, the length of the \verb+\line+ should be more than
+10pt (or 1/7 in), the diameter of a
+\verb+circle+ should be less than 1/2 inches, and
+the diameter of a disk (\verb+\circle*+) should be less than 0.2 inch. There is
+an ellipse in Fig, but there is no ellipse font in \LaTeX.
+If you draw an ellipse
+in Fig and use \verb+transfig+ to transfer your
+figure to the \verb+picture+ environment, all
+you can get is an \verb+oval+. There are no similar restrictions if you select
+PostScript output. You can use \verb+transfig+ to transfer a
+figure with an ellipse to a \Ps\ file and then use the
+\verb+\psfig+ command to include
+this figure into a \LaTeX\ document. The details of
+using \verb+\psfig+ are given in
+Appendix~D.
+
+The following \verb+transfig+ command is used to transfer your figure to
+the \LaTeX\ \verb+\picture+ environment (this can be printed on the {\tt
+Laserjet 2000}),
+
+\singlespace
+\begin{verbatim}
+ sun% transfig -L latex -f cmr figure.fig
+ sun% make
+\end{verbatim}
+\doublespace
+where \verb+sun%+ is the prompt of the sun workstation.
+If you want to get a \Ps\ file, you can type the following command.
+
+\singlespace
+\begin{verbatim}
+ sun% transfig -L postscript -f cmr figure.fig
+ sun% make
+\end{verbatim}
+\doublespace
+
+After running the above two commands, you should delete \verb+Makefile+.
+Next transfer the figure.tex or figure.ps to your thesis directory
+and include that file into your \LaTeX\ document.
+
+For the details about \verb+transfig+ please check Appendix~C.
+
+\subsection{{\sc Pic}\TeX}
+The \LaTeX\ picture environment is useful for making simple pictures and block
+diagrams. {\sc Pic}\TeX\ is useful for more complicated graphs and plots; you
+might find it handy for plotting data to display in your thesis.
+{\sc Pic}\TeX\ is installed on eemips and ee.
+Unfortunately, {\sc Pic}\TeX\ takes a very long time to execute --- we suggest
+you run it on ee or eemips. Furthermore,
+{\sc Pic}\TeX\ seems to us to be more complex
+than other plotting packages such as PGPLOT, PICSURE, and DeltaGraph.
+The {\sc Pic}\TeX\ manual should be available at the MSC Bookstore, and a
+copy is available for checkout in the instrument room.
+
+\subsection{PICSURE}
+The PICSURE graphing program is available on SIGMA, and it is pretty popular on
+our campus. Access PICSURE using TEX as the secondary device and
+the output of PICSURE can be included into a \TeX\ document. When a chart is
+ready to be ported into \TeX, give the command `PLOT 2' and answer the questions
+concerning plot orientation and size. Actually, the `PLOT 2' command starts
+the PGPLOT program, and will generate two files, \verb+pvi.300pk+ and
+\verb+pvi.tfm+, in the current directory. You can copy these two files to your
+thesis directory and then include the following commands to the place
+the figure in your thesis (here we include the command of Example~1
+from the PicSure Line
+Graph card as our example from Appendix~K):
+
+\singlespace
+\begin{verbatim}
+ \font\chart=pvi
+ \centerline{\chart A}
+\end{verbatim}
+\doublespace
+Appendix~K includes two PicSure quick reference cards and there include
+several examples of PicSure graphs in \TeX.
+The detailed manual for PICSURE is available in
+the WERC copy center.
+
+\subsection{GNUPLOT}
+GNUPLOT is a graphics program that is
+popular with \TeX\ and \LaTeX\ users.
+It is available on ee and eemips. GNUPLOT can
+generate figures using mathematical functions or input data. The output figure
+can be either PostScript or the \verb+picture+ environment of \LaTeX.
+The PostScript file can be included into a \TeX\ or \LaTeX\ document by using
+the \verb+\psfig+ command.
+The manual is attached in Appendix~E.
+
+\subsection{Placement of Tables and Figures}
+\LaTeX\ will never place your figure or table on an earlier page than the text
+immediately preceding the \verb+figure+ or \verb+table+ environment.
+Therefore, the best place for you to put the \verb+figure+ or \verb+table+
+environment is right after the sentence in which the figure or table is first
+referenced. If more of the paragraph follows, do {\em not} leave a blank line
+above or below the figure or table environment (c.f., p.~60 \LaTeX\ User's
+Guide).
+
+There is an optional argument in the
+\verb+\begin{table/figure}+ command which allows you to specify where you want
+your table or figure to be placed. Tables (or figures) placed using the
+\verb+[h]+ placement option (placed at the position in the text where
+\verb+\begin{table/figure}[h]+ appears) can look very good. However, using this
+option can also result in problems (see p.~177 of the \LaTeX\ User's Guide).
+Our advice for amateurs is to use the default \verb+[tbp]+ option.
+If you have problems with \LaTeX\ insisting upon putting a figure
+or table in a bad location, read Appendix~C.8.1 on page~176 of the \LaTeX\
+User's Guide to help you try to overcome \LaTeX's stubbornness.
+
+If the table is too big and exceeds one page, there is a convenient way
+to handle this. In the first page of that table you can type as usual and
+put \verb+\begin{table} \caption+ and \verb+\end{table}+ to generate the
+table number and caption of that table.
+According to the rules of the thesis clerk, the caption of the
+table on the second page should be as follows,
+\begin{center}
+{\tt Table XX. Continued}
+\end{center}
+We suggest the following way to handle the second page of a table:
+
+\refspace
+\begin{verbatim}
+\begin{table}
+\centerline{Table~\thetable. Continued.}\\
+\begin{tabular}[option]{adjustment}
+content of tabular
+\end{tabular}
+\end{table}
+\end{verbatim}
+
+\doublespace
+\noindent
+where \verb+\thetable+ is a \LaTeX\ counter that
+contains the table number of the current table.
+If your table is longer than two pages, the caption for
+the rest of the table can be done in the same way.
+Using this method of breaking tables, you have to measure the length
+of the table and manually break the pages.
+
+\section{Including Source Code into the Thesis}
+Some theses may include source code
+or an algorithm in the text body, figure, or appendix. In
+this version of \verb+eethesis.sty+, we include a document style
+\verb+verbatimfiles+ developed by Chris Rowley to deal with this
+problem. There are two commands that can be used.
+\verb+\verbatimfile{file.c}+
+can include a program called \verb+file.c+ to the text.
+\verb+verbatimlisting[n]{file.c}+ will include the program \verb+file.c+ to the
+text and will list the line numbers of program \verb+file.c+ every
+\verb+n+ lines.
+
+Suppose we have a program \verb+file.c+, and type the commands,
+
+\singlespace
+\begin{verbatim}
+\singlespace
+\verbatimfile{file.c}
+\doublespace
+\end{verbatim}
+\doublespace
+the output form is given below:
+
+\singlespace
+\verbatimfile{file.c}
+\doublespace
+
+In contrast, if we use \verb+\verbatimlisting[10]{file.c}+
+
+\singlespace
+\begin{verbatim}
+\singlespace
+\verbatimlisting[10]{file.c}
+\doublespace
+\end{verbatim}
+\doublespace
+then \verb+file.c+
+will be included in the text and the line numbers printed every
+10 lines as follows,
+
+\singlespace
+\verbatimlisting[10]{file.c}
+
+\doublespace
+The \verb+\verbatimfile+ and \verb+\verbatimlisting+ can be used in
+the text body, the \verb+figure+ environment, or in an Appendix.
+
+\section{Blue Line Emulation}
+The text of the thesis should not exceed the frame of the blue line
+paper. Some thesis writers may worry if their figures or codes exceed
+the frame. We have included a command \verb+\blueline+ to
+emulate the frame of the blue line paper. If you want to utilize the emulation
+of blue line you have to type \verb+\blueline+
+in the preamble, then you will get
+a frame to enclose your text in every page of your thesis. But remember, after
+you finish your thesis, you should comment out the \verb+\blueline+ command.
+
+\section{Writing Your Proposal}
+You can also write your thesis proposal using the {\tt eethesis} document style.
+The only thing you should do differently is to use the \LaTeX\ command
+\verb+\part+ instead of \verb+\chapter+. All of the other facilities of the
+{\tt eethesis} document style will be available to you, although the
+\verb+\body+ command may very well be the only one that is particularly useful.
+The \verb+\part+ command will correctly format the major section headings of
+your proposal and will not start the sections on new pages as \verb+\chapter+
+does.
+
+\section{Miscellaneous}
+In this section we attempt to anticipate some unusual situations you might have
+and try to help you deal with them. We also would like to mention a few features
+of \LaTeX\ that you might find particularly helpful.
+\subsection{The {\tt $\backslash$label} Command}
+The \verb+\label+ command can also be used in conjunction with the
+\verb+\pageref+ command to refer to text on other pages. This can be helpful as
+you can refer to another section of text, which might slide from page to page
+as you edit your text. It is explained on page 72 of the \LaTeX\ Users Guide.
+
+\newfont{\euf}{eufm10}
+\newfont{\pun}{punkbx20}
+\subsection{New Fonts}
+In addition to the fonts of \verb+\bf, \sf, \sl, \sc,+ and \verb+\tt+, we have
+many new fonts on ee and eemips, such as {\euf R} and {\pun R}. If you
+think all the regular fonts supported by \LaTeX\ are not enough for your
+thesis, you can contact to Wen-Lin Hsieh\\
+(\verb+wenlin@ee.tamu.edu+) and he will
+show you the font map.
+
+\subsection{{\sc Sli}\TeX}
+You may find {\sc Sli}\TeX\ useful for making the slides that you will use in
+your thesis or dissertation defense. {\sc Sli}\TeX\ uses special larger fonts
+which are more readable than the standard \LaTeX\ fonts. You may find it very
+convenient to pull equations directly out of your thesis into a slide file which
+{\sc Sli}\TeX\ will use to create your slides. Refer to Appendix~A of the
+\LaTeX\ User's Guide for more information about {\sc Sli}\TeX.
+
+\subsection{PCs and Macintoshes}
+\TeX\ and \LaTeX\ both run well on IBM PCs and MACs with hard disks and laser
+printers. For example, in the Electrical Engineering Department we run PC\TeX\
+and \LaTeX\ on IBM AT clones with a 40MB hard disk, EGA, and Laserjet II.\@
+We also run $N^{2}$ Computer Associates {\tt cdvi} preview program to view the
+output on the display before we print --- this saves time and laser printers.
+
+You are welcome to copy to your MAC or PC the three files associated with the
+{\tt eethesis} document style: {\tt eethesis.sty, eethe12.sty}, and {\tt
+eethetitle.sty} (see Table~I for directories). Copy the \verb+.sty+ files,
+which are printable ASCII characters, using Kermit, X-Modem, or ftp, etc.
+\subsection{Problem Reporting}
+If your thesis is rejected by the thesis clerk because of an error or deficiency
+in this thesis preparation system, please send electronic mail to
+\verb+cantrell@ee.tamu.edu,+ or
+\verb+wenlin@ee.tamu.edu+.
+We will try to fix the problem.
+
+\newpage
+\begin{thebibliography}{33}
+\bibitem{kl} Donna Knight and Suzanne Lednicky, {\sl \TeX\ Macros For
+Thesis Formatting}. Department of Electrical Engineering, Texas A\&M
+University, College Station, Texas, August 1984.
+\bibitem{pk} Vijay Kodali and Mike Payne, {\sl \LaTeX\ Document Style For
+Thesis Formatting}. Department of Electrical Engineering, Texas A\&M
+University, College Station, Texas, 1st edition, August 1986.
+\bibitem{ll} Leslie Lamport, {\sl \LaTeX: A Document Preparation System}. Reading,
+Massachusetts: Addison Wesley Publishing Company, 1986.
+\bibitem{dk} Donald E. Knuth, {\sl The \TeX book}. Reading, Massachusetts: Addison
+Wesley Publishing Company, 1986.
+\bibitem{op} Oren Patashnik, {\sl {\sc Bib}\TeX ing}. Stanford University,
+February 1988.
+\bibitem{db} David J. Buerger, {\sl \LaTeX\ for Engineers \& Scientists}.
+New York, McGraw--Hill Publishing Company, 1990.
+\end{thebibliography}
+
+\newcommand{\Bib}{{\sl {\sc Bib}\TeX}}
+
+\appendix{Sample Thesis}
+\pagestyle{empty}
+This sample thesis is adapted from Bill Baker's thesis, which was done in the
+old \LaTeX\ {\em Thesis} documentstyle in 1986. Since much of the thesis has
+been deleted and modified, it probably doesn't make much sense any more if you
+try to read it. It is included solely for your reference to help you see how a
+thesis can be formatted using \LaTeX. In addition to the material from
+Mr.~Baker's thesis, I also used material from the sample thesis from the old
+\LaTeX\ Thesis manual and other sources.
+
+\appendix{\Bib}
+\setcounter{page}{101}
+
+\appendix{Transfig}
+\setcounter{page}{119}
+
+\appendix{$\backslash${\tt psfig} and Examples}
+\setcounter{page}{141}
+
+\appendix{GNUPLOT}
+\setcounter{page}{161}
+
+\appendix{dvihp}
+\setcounter{page}{187}
+
+\appendix{dvips}
+\setcounter{page}{197}
+
+\appendix{PGPLOT Example}
+\setcounter{page}{205}
+
+\appendix{Setting up a CSC Student Account}
+\setcounter{page}{211}
+
+\appendix{\TeX ROX Card}
+\setcounter{page}{215}
+
+\appendix{PICSURE Card}
+\setcounter{page}{219}
+
+\end{document}
diff --git a/obsolete/macros/latex209/contrib/tamueethesis/subequation.sty b/obsolete/macros/latex209/contrib/tamueethesis/subequation.sty
new file mode 100644
index 0000000000..be96880ed9
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/tamueethesis/subequation.sty
@@ -0,0 +1,224 @@
+% This file, equations.sty (August 1988), contains a collection of macros
+% to aid in constructing displayed equations in LaTeX. Written by
+% Charles Karney
+% Plasma Physics Laboratory Phone: +1 609 243 2607
+% Princeton University MFEnet: Karney@PPC.MFEnet
+% PO Box 451 ARPAnet: Karney%PPC.MFEnet@NMFECC.ARPA
+% Princeton, NJ 08543-0451 Bitnet: Karney%PPC.MFEnet@ANLVMS.Bitnet
+% with some ideas and macros borrowed from John Hobby and Stephen Gildea.
+
+% --------------------USER DOCUMENTATION--------------------
+
+% Use this as a style option, e.g.,
+% \documentstyle[equations]{article}
+% These probably don't work in conjunction with the leqno option.
+
+% This implements the following:
+
+% (1) \yesnumber turns on an equation number in an eqnarray* environment
+% (just as \nonumber turns it off in an eqnarray environment). E.g.,
+% \begin{eqnarray*}
+% a &=& b \\
+% & & + c \\
+% & & + d \\
+% & & + e \\
+% & & + f \\
+% & & + g \yesnumber
+% \end{eqnarray*}
+
+% (2) The eqalign environment is just like Plain TeX's \eqalign. E.g.,
+% \begin{equation}
+% \begin{eqalign}
+% a &= b, \\
+% c &= d.
+% \end{eqalign}
+% \end{equation}
+% Note that \begin{equation} \end{equation} or equivalent is needed.
+
+% (3) The eqalignno environment is just like Plain TeX's \eqalignno. E.g.,
+% \begin{eqalignno}
+% a &= b, \label{foo}\\
+% c &= d. \label{bar}
+% \end{eqalignno}
+% Note the absence of \begin{equation} \end{equation}. \nonumber can be used
+% to suppress the equation number. eqalignno* is the same except that the
+% equation numbers are suppressed (unless a \yesnumber appears).
+
+% (4) The eqaligntwo environment is a two-equation per line equivalent of
+% eqalignno. E.g.,
+% \begin{eqaligntwo}
+% a &= b, & x &= y, \label{foo} \\
+% c &= d, & z &= w. \label{bar}
+% \end{eqaligntwo}
+% eqaligntwo* is defined similarly.
+
+% (5) The cases environment is just like Plain TeX's \cases. E.g.,
+% \begin{equation}
+% u(x) =
+% \begin{cases}
+% 0, & for $x < 0$,
+% 1, & for $x \ge 0$.
+% \end{cases}
+% \end{equation}
+% Note the first column is treated as math, the second column as text.
+
+% (6) I've borrowed John Hobby's modifications to the eqnarray environment
+% (to fix up the spacing around the operator), and to the \big, \bigg, etc.
+% operators (to make them scale with the point size).
+
+% (7) I've borrowed Stephen Gildea's subequations environment, and fixed it
+% so that it ignores spaces after the environment and so that you can refer
+% both to the overall set of equations and to individual subequations. E.g.,
+% \begin{subequations} \label{foo}
+% \begin{eqalignno}
+% a &= b, \label{foo-a} \\
+% c &= d, \label{foo-b}
+% \end{eqalignno}
+% text text text text ...
+% \begin{equation}
+% e = f. \label{foo-c}
+% \end{equation}
+% \end{subequations}
+% Now \ref{foo}, \ref{foo-a}, \ref{foo-b}, \ref{foo-c}, produce 1, 1a, 1b,
+% 1c.
+
+% --------------------END OF USER DOCUMENTATION--------------------
+
+% Fix up eqnarray* so that \yesnumber and \nonumber do the obvious things
+\newif\if@defeqnsw \@defeqnswtrue
+
+% This is John Hobby's (hobby@research.att.com) version to fix up the spacing.
+\def\eqnarray{\stepcounter{equation}\let\@currentlabel=\theequation
+\if@defeqnsw\global\@eqnswtrue\else\global\@eqnswfalse\fi
+%\global\@eqnswtrue % It seems redundant here. Deleted by Ken Chiang 4-3-90.
+\tabskip\@centering\let\\=\@eqncr
+$$\halign to \displaywidth\bgroup\hfil\global\@eqcnt\z@
+ $\displaystyle\tabskip\z@{##}$&\global\@eqcnt\@ne
+ \hfil$\displaystyle{{}##{}}$\hfil
+ &\global\@eqcnt\tw@ $\displaystyle{##}$\hfil
+ \tabskip\@centering&\llap{##}\tabskip\z@\cr}
+
+\def\yesnumber{\global\@eqnswtrue}
+%\def\nonumber{\global\@eqnswfalse}
+
+\def\@@eqncr{\let\@tempa\relax\global\advance\@eqcnt by \@ne
+ \ifcase\@eqcnt \def\@tempa{& & & &}\or \def\@tempa{& & &}\or
+ \def\@tempa{& &}\or \def\@tempa{&}\else\fi
+ \@tempa \if@eqnsw\@eqnnum\stepcounter{equation}\fi
+ \if@defeqnsw\global\@eqnswtrue\else\global\@eqnswfalse\fi
+ \global\@eqcnt\z@\cr}
+
+% Several formulas like \eqalign (to go inside \begin{equation}
+% \end{equation} or $$ $$.
+
+\def\@eqnacr{{\ifnum0=`}\fi\@ifstar{\@yeqnacr}{\@yeqnacr}}
+
+\def\@yeqnacr{\@ifnextchar [{\@xeqnacr}{\@xeqnacr[\z@]}}
+
+\def\@xeqnacr[#1]{\ifnum0=`{\fi}\cr \noalign{\vskip\jot\vskip #1\relax}}
+
+\def\eqalign{\null\,\vcenter\bgroup\openup1\jot \m@th \let\\=\@eqnacr
+\ialign\bgroup\strut
+\hfil$\displaystyle{##}$&$\displaystyle{{}##}$\hfil\crcr}
+\def\endeqalign{\crcr\egroup\egroup\,}
+
+% \cases
+
+\def\cases{\left\{\,\vcenter\bgroup\normalbaselines\m@th \let\\=\@eqnacr
+ \ialign\bgroup$##\hfil$&\quad##\hfil\crcr}
+\def\endcases{\crcr\egroup\egroup\right.}
+
+% Several formulas like \eqalignno (doesn't need the $$ $$)
+
+\def\eqalignno{\stepcounter{equation}\let\@currentlabel=\theequation
+\if@defeqnsw\global\@eqnswtrue\else\global\@eqnswfalse\fi
+\let\\=\@eqncr
+$$\displ@y \tabskip\@centering \halign to \displaywidth\bgroup
+ \global\@eqcnt\@ne\hfil
+ $\@lign\displaystyle{##}$\tabskip\z@skip&\global\@eqcnt\tw@
+ $\@lign\displaystyle{{}##}$\hfil\tabskip\@centering&
+ \llap{\@lign##}\tabskip\z@skip\crcr}
+
+\def\endeqalignno{\@@eqncr\egroup
+ \global\advance\c@equation\m@ne$$\global\@ignoretrue}
+
+
+% Here's the eqalignno* environment:
+
+\@namedef{eqalignno*}{\@defeqnswfalse\eqalignno}
+\@namedef{endeqalignno*}{\endeqalignno}
+
+% There is no definition of {eqnarray*}, and the \yesnumber does not work.
+% The following two lines are added by Ken Chiang. 4-3-90
+
+\@namedef{eqnarray*}{\@defeqnswfalse\eqnarray}
+\@namedef{endeqnarray*}{\endeqnarray}
+
+% Two formulas like \eqalignno (doesn't need the $$ $$)
+
+\def\eqaligntwo{\stepcounter{equation}\let\@currentlabel=\theequation
+\if@defeqnsw\global\@eqnswtrue\else\global\@eqnswfalse\fi
+\let\\=\@eqncr
+$$\displ@y \tabskip\@centering \halign to \displaywidth\bgroup
+ \global\@eqcnt\m@ne\hfil
+ $\@lign\displaystyle{##}$\tabskip\z@skip&\global\@eqcnt\z@
+ $\@lign\displaystyle{{}##}$\hfil\qquad&\global\@eqcnt\@ne
+ \hfil$\@lign\displaystyle{##}$&\global\@eqcnt\tw@
+ $\@lign\displaystyle{{}##}$\hfil\tabskip\@centering&
+ \llap{\@lign##}\tabskip\z@skip\crcr}
+
+\def\endeqaligntwo{\@@eqncr\egroup
+ \global\advance\c@equation\m@ne$$\global\@ignoretrue}
+
+\@namedef{eqaligntwo*}{\@defeqnswfalse\eqaligntwo}
+\@namedef{endeqaligntwo*}{\endeqaligntwo}
+
+% subequations
+%%% File: subeqn.sty
+%%% The subequations environment %%%
+%
+% Within the subequations environment, the only change is that
+% equations are labeled differently. The number stays the same,
+% and lower case letters are appended. For example, if after doing
+% three equations, numbered 1, 2, and 3, you start a subequations
+% environmment and do three more equations, they will be numbered
+% 4a, 4b, and 4c. After you end the subequations environment, the
+% next equation will be numbered 5.
+%
+% Both text and equations can be put inside the subequations environment.
+%
+% If you make any improvements, I'd like to hear about them.
+%
+% Stephen Gildea
+% MIT Earth Resources Lab
+% Cambridge, Mass. 02139
+% mit-erl!gildea
+% gildea@erl.mit.edu
+%
+\newtoks\@stequation
+
+\def\subequations{\refstepcounter{equation}%
+ \edef\@savedequation{\the\c@equation}%
+ \@stequation=\expandafter{\theequation}% %only want \theequation
+ \edef\@savedtheequation{\the\@stequation}% %expanded once
+ \edef\oldtheequation{\theequation}%
+ \setcounter{equation}{0}%
+ \def\theequation{\oldtheequation\alph{equation}}}
+
+\def\endsubequations{%
+ \setcounter{equation}{\@savedequation}%
+ \@stequation=\expandafter{\@savedtheequation}%
+ \edef\theequation{\the\@stequation}%
+ \global\@ignoretrue}
+
+% More from John Hobby
+% Fix Plain's \bigl, \Bigl, etc. macros so that they try to scale with
+% LaTeX size changes. This uses the fact that \@setsize sets \ht\strutbox
+% to be 70% of the normal unstretched baselineskip.
+
+\def\big#1{{\hbox{$\left#1\vcenter to1.428\ht\strutbox{}\right.\n@space$}}}
+\def\Big#1{{\hbox{$\left#1\vcenter to2.142\ht\strutbox{}\right.\n@space$}}}
+\def\bigg#1{{\hbox{$\left#1\vcenter to2.857\ht\strutbox{}\right.\n@space$}}}
+\def\Bigg#1{{\hbox{$\left#1\vcenter to3.571\ht\strutbox{}\right.\n@space$}}}
+
+\endinput
diff --git a/obsolete/macros/latex209/contrib/tamueethesis/thesis.ps b/obsolete/macros/latex209/contrib/tamueethesis/thesis.ps
new file mode 100644
index 0000000000..bd7d96f201
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/tamueethesis/thesis.ps
@@ -0,0 +1,1625 @@
+%!PS-Adobe-2.0
+%%Creator: dvips 5.516 Copyright 1986, 1993 Radical Eye Software
+%%Title: thesis.dvi
+%%CreationDate: Thu Jul 22 15:34:01 1993
+%%Pages: 27
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 612 792
+%%EndComments
+%DVIPSCommandLine: dvips thesis
+%DVIPSSource: TeX output 1993.07.22:1531
+%%BeginProcSet: tex.pro
+/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
+/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72
+mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1}
+ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
+isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div
+hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul
+TR matrix currentmatrix dup dup 4 get round 4 exch put dup dup 5 get
+round 5 exch put setmatrix}N /@landscape{/isls true N}B /@manualfeed{
+statusdict /manualfeed true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0
+0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{/nn 8 dict N nn
+begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N string /base X
+array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N end dup{/foo
+setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{/sf 1 N /fntrx
+FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]N df-tail}B /E{
+pop nn dup definefont setfont}B /ch-width{ch-data dup length 5 sub get}
+B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{128 ch-data dup
+length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub get 127 sub}B
+/ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data dup type
+/stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N /rc 0 N /gp
+0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup /base get 2
+index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0 ch-xoff
+ch-yoff ch-height sub ch-xoff ch-width add ch-yoff setcachedevice
+ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 add]{
+ch-image}imagemask restore}B /D{/cc X dup type /stringtype ne{]}if nn
+/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup length 1
+sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{cc 1 add D
+}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin 0 0
+moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul add
+.99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore showpage
+userdict /eop-hook known{eop-hook}if}N /@start{userdict /start-hook
+known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X
+/IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for
+65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0
+0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V
+{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7
+getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false}
+ifelse}{false}ifelse end{{gsave TR -.1 -.1 TR 1 1 scale rulex ruley
+false RMat{BDot}imagemask grestore}}{{gsave TR -.1 -.1 TR rulex ruley
+scale 1 1 false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave
+transform round exch round exch itransform moveto rulex 0 rlineto 0
+ruley neg rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta
+0 N /tail{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}
+B /c{-4 M}B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{
+3 M}B /k{4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p
+-1 w}B /q{p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{
+3 2 roll p a}B /bos{/SS save N}B /eos{SS restore}B end
+%%EndProcSet
+TeXDict begin 40258431 52099146 1000 300 300
+(/u4/test/eethesis/thesis.dvi) @start /Fa 27 121 df<00FFFFE0000F0038000F
+001C000F001E001E000E001E000F001E000F001E000F003C000E003C001E003C001E003C
+003C00780078007800F0007801E00078078000FFFF8000F001E000F000F000F0007801E0
+007801E0003801E0003C01E0003C03C0007803C0007803C0007803C000F0078000F00780
+01E0078003C0078007000F801E00FFFFF00020227DA122>66 D<00007F00800003808100
+000E00630000380027000070001F0000E0000E0001C0000E000380000E000700000E000F
+000004000E000004001E000004003C000004003C00000800780000000078000000007800
+000000F000000000F000000000F000000000F000000000F000000000E000000000E00000
+2000E000002000E000004000E000004000F0000080007000008000700001000038000200
+0018000400001C0008000006003000000381C0000000FE000000212479A223>I<00FFFF
+F000000F003C00000F000E00000F000700001E000380001E000380001E0001C0001E0001
+C0003C0001C0003C0001E0003C0001E0003C0001E000780001E000780001E000780001E0
+00780001E000F00003C000F00003C000F00003C000F00003C001E000078001E000078001
+E000070001E0000F0003C0000E0003C0001C0003C0003C0003C000380007800070000780
+00E000078001C00007800700000F801C0000FFFFF0000023227DA125>I<00FFFFFF8000
+0F000780000F000180000F000180001E000180001E000180001E000100001E000100003C
+000100003C000100003C010100003C01000000780200000078020000007806000000780E
+000000FFFC000000F00C000000F00C000000F00C000001E008000001E008000001E00804
+0001E000080003C000080003C000080003C000100003C000100007800020000780006000
+078000C000078001C0000F8007C000FFFFFF800021227DA121>I<0007FFC000003C0000
+003C0000003C00000078000000780000007800000078000000F0000000F0000000F00000
+00F0000001E0000001E0000001E0000001E0000003C0000003C0000003C0000003C00000
+078000000780000007800000078000000F0000000F0000380F0000780F0000F81E0000F8
+1E0000F03C0000403800004070000021E000001F8000001A237CA11A>74
+D<00FF800007FC000F80000F80000F80001780000F80001780001780002F000013C0002F
+000013C0004F000013C0008F000023C0009E000023C0011E000023C0011E000023C0021E
+000043C0043C000043C0043C000043C0083C000041E0083C000081E01078000081E02078
+000081E02078000081E04078000101E040F0000101E080F0000101E100F0000101E100F0
+000200F201E0000200F201E0000200F401E0000200F801E0000400F803C0000400F003C0
+000400F003C0000C00E003C0001E00C007C000FFC0C07FFC002E227DA12C>77
+D<00FFFFE0000F0038000F001E000F000E001E0007001E0007001E0007001E0007003C00
+0F003C000F003C000F003C001E0078001E0078003C00780078007800E000F003C000FFFE
+0000F0000000F0000001E0000001E0000001E0000001E0000003C0000003C0000003C000
+0003C00000078000000780000007800000078000000F800000FFF8000020227DA121>80
+D<00FFFFC0000F0070000F003C000F001C001E000E001E000E001E000F001E000F003C00
+1E003C001E003C001E003C003C0078003800780070007801E00078078000FFFC0000F00E
+0000F0070000F0038001E003C001E003C001E003C001E003C003C0078003C0078003C007
+8003C0078007800F0007800F0107800F01078007020F800702FFF8038C000000F020237D
+A124>82 D<1FFFFFF81E03C0381803C0183003C018200780182007801840078010400780
+10400F0010800F0010800F0010000F0000001E0000001E0000001E0000001E0000003C00
+00003C0000003C0000003C00000078000000780000007800000078000000F0000000F000
+0000F0000000F0000001E0000001E0000001E0000001E0000003E00000FFFF00001D2277
+A123>84 D<00F8C00185C00705C00E03800E03801C03803C038038070078070078070078
+0700F00E00F00E00F00E00F00E10F01C20701C20703C20305C40308C400F078014157B94
+19>97 D<007E0001C1000301800703800E07801C07803C00003800007800007800007800
+00F00000F00000F00000F00000F00100700100700200300C001830000FC00011157B9416
+>99 D<00003C0003F80000380000380000380000700000700000700000700000E00000E0
+0000E00000E00001C000F9C00185C00705C00E03800E03801C03803C0380380700780700
+780700780700F00E00F00E00F00E00F00E10F01C20701C20703C20305C40308C400F0780
+16237BA219>I<00F803840E021C023C0238027804F018FFE0F000F000E000E000E000E0
+00E002E0026004701830600F800F157A9416>I<00003E0000470000CF00018F00018600
+0380000380000380000700000700000700000700000700000E0000FFF0000E00000E0000
+0E00001C00001C00001C00001C00001C0000380000380000380000380000380000700000
+700000700000700000700000E00000E00000E00000E00000C00001C00001C000718000F1
+8000F300006200003C0000182D82A20F>I<001F180030B800E0B801C07001C070038070
+0780700700E00F00E00F00E00F00E01E01C01E01C01E01C01E01C01E03800E03800E0780
+060B8006170001E700000700000700000E00000E00000E00701C00F01800F0300060E000
+3F8000151F7E9416>I<00C001E001C001C0000000000000000000000000000000001C00
+2300430043008700870087000E000E001C001C001C003800380038407080708070807100
+32001C000C217BA00F>105 D<00F0000FE00000E00000E00000E00001C00001C00001C0
+0001C0000380000380000380000380000700000701E0070210070C700E10F00E10F00E20
+600E40001D80001E00001FC0001C7000383800383800381C00381C207038407038407038
+40701880E01880600F0014237DA216>107 D<01E01FC001C001C001C003800380038003
+8007000700070007000E000E000E000E001C001C001C001C003800380038003800700070
+0070007100E200E200E200E200640038000B237CA20C>I<1C0F80F8002610C10C004760
+66060087807807008780780700870070070087007007000E00E00E000E00E00E000E00E0
+0E000E00E00E001C01C01C001C01C01C001C01C01C001C01C03820380380384038038070
+403803807080380380308070070031003003001E0024157B9428>I<1C0F002631C04740
+C08780E08780E08700E08700E00E01C00E01C00E01C00E01C01C03801C03801C03801C07
+04380708380E08380E103806107006203003C017157B941B>I<007E0001C30003818007
+01C00E01C01C01E03C01E03801E07801E07801E07801E0F003C0F003C0F00380F0078070
+0700700E00700C0030180018700007C00013157B9419>I<01C1F002621804741C08780C
+08700E08700E08701E00E01E00E01E00E01E00E01E01C03C01C03C01C03C01C078038070
+03807003C0E003C1C0072380071E000700000700000E00000E00000E00000E00001C0000
+1C00001C0000FFC000171F7F9419>I<1C1F002620804741C08783C08703C08701808700
+000E00000E00000E00000E00001C00001C00001C00001C00003800003800003800003800
+0070000030000013157B9415>114 D<00FC000183000200800401800C03800C03000C00
+000F00000FF00007FC0003FE00003E00000F00000700700700F00600F00600E004004008
+002030001FC00011157D9414>I<00C001C001C001C001C003800380038003800700FFF8
+070007000E000E000E000E001C001C001C001C0038003800380038107020702070407080
+31001E000D1F7C9E10>I<1E00602300E04380E04381C08381C08701C08701C00703800E
+03800E03800E03801C07001C07001C07001C07081C0E10180E101C0E101C1E200C262007
+C3C016157B941A>I<03C1E0046210083470103CF02038F0203860203800007000007000
+00700000700000E00000E00000E00000E02061C040F1C040F1C080E2C100446200383C00
+14157D9416>120 D E /Fb 4 65 df<0000020000000E0000003E000001FE000007FE00
+003FFE0001FFFE000FFFFE00FFFFFE00FFFFFE000FFFFE0001FFFE00003FFE000007FE00
+0001FE0000003E0000000E000000020019127E882A>27 D<800000E00000F80000FF0000
+FFC000FFF800FFFF00FFFFE0FFFFFEFFFFFEFFFFE0FFFF00FFF800FFC000FF0000F80000
+E0000080000017126F882A>45 D<FFFFC07FFF807FFF803FFF003FFF001FFE001FFE001F
+FE000FFC000FFC0007F80007F80007F80003F00003F00003F00001E00001E00001E00000
+C00000C00000C00000C000121789982A>63 D<600000000000F00000000000F800000000
+007C00000000003E00000000001F00000000000F800000000007C00000000003E0000000
+0001F00000000000F800000000007C00000000003E00000000001F00000000000F800000
+000007C00000000003E00000000001F00000000000F800000000007C00000000003E0000
+0000001F00000000000F800000000007C00000000003E00000000001F00000000000F800
+000000007C00000000003E00000000001F00000000000F800000000007C00000000003E0
+0000000001F00000000000F800000000007C00000000003E00000000001F00000000000F
+800000000007C00000000003E00000000001F00000000000F800000000007C0000000000
+3C0000000000182E2E82AB2A>I E /Fc 5 113 df<FFFFFFFCFFFFFFFC1E027C8C27>0
+D<70F8F8F87005057C8E0E>I<0000000C0000003C000000F0000003C000000F0000003C
+000000F0000007C000001F00000078000001E00000078000001E00000078000000E00000
+00780000001E0000000780000001E0000000780000001F00000007C0000000F00000003C
+0000000F00000003C0000000F00000003C0000000C000000000000000000000000000000
+0000000000000000000000000000000000FFFFFFFCFFFFFFFC1E277C9F27>20
+D<03F80001F80007FE000FFE001E3F801C0300380FC03001802003E06000804001F0C000
+404000F9800040C0007F00002080003F00002080003E00002080001F00002080000F8000
+2080001F80002080001FC00060400033E00040400061F000402000C0F800803001807E03
+801807003F8F000FFE000FFC0003F00003F8002B157D9432>49 D<000000000300000000
+0300000000070000000006000000000E000000000C000000001C00000000180000000038
+00000000300000000070000000006000000000E000000000C000000001C0000000018000
+000003800000000300000000070000000006000000000E000000000C000000001C000000
+001800000000380006000030001E000070002F000060004F0000E000878000C000078001
+C00003C001800003C003800003C003000001E007000001E006000000F00E000000F00C00
+0000781C00000078180000003C380000003C300000001E700000001E600000000FE00000
+000FC000000007C0000000078000000003800000000300000028327D812A>112
+D E /Fd 3 50 df<FFFFF0FFFFF014027D881B>0 D<0000010000000080000000800000
+004000000020FFFFFFFCFFFFFFFC00000020000000400000008000000080000001001E0C
+7E8D23>33 D<0F8007C019E01C202070301040184008C00C800480078004800700048003
+8004800780048004C00C400860082030381010E01E600F8007C01E0E7E8D23>49
+D E /Fe 2 90 df<C00000000000F000000000003C00000000000F000000000003C00000
+000000F000000000003C00000000000F000000000003C00000000000F000000000003C00
+000000000F000000000003C00000000000F000000000003C00000000000F000000000003
+C00000000000F000000000003C00000000000F000000000003C00000000000F000000000
+00302C1781952A>72 D<8000007F00003FFF001FFF000FFE0007FE0003FC0001FC0000F8
+0000F800007000003000110C7F942A>89 D E /Ff 9 118 df<FC000000FF80000003F0
+0000007C0000001E0000000780000001C0000000E000000070000000380000001C000000
+0C0000000E000000070000000300000003800000018000000180000001C0000000C00000
+00C0000000E000000060000000600000006000000060000000601B1B998132>8
+D<0000006000000060000000600000006000000060000000E0000000C0000000C0000000
+C0000001C00000018000000380000003000000070000000E0000000C0000001C00000038
+00000070000000E0000001C00000078000001E0000007C000003F00000FF800000FC0000
+001B1B999A32>I<C0000000C0000000C0000000C0000000C0000000E000000060000000
+6000000060000000700000003000000038000000180000001C0000000E00000006000000
+070000000380000001C0000000E0000000700000003C0000000F00000007C0000001F800
+00003FE0000007E01B1B809A32>I<000007E000003FE00001F8000007C000000F000000
+3C00000070000000E0000001C000000380000007000000060000000E0000001C00000018
+000000380000003000000070000000700000006000000060000000E0000000C0000000C0
+000000C0000000C0000000C00000001B1B808132>I<FE00000000FFE000000001FC0000
+00001F0000000003C000000000F00000000038000000001E000000000700000000038000
+000001C000000000E0000000007000000000380000000018000000001C000000000C0000
+00000E000000000600000000070000000003000000000380000000018000000001800000
+0001C000000000C000000000C000000000C000000000E000000000600000000060000000
+00600000000060000000006000000000602323A18142>I<000000006000000000600000
+00006000000000600000000060000000006000000000E000000000C000000000C0000000
+00C000000000C000000001C0000000018000000003800000000300000000070000000006
+000000000E000000000C000000001C00000000180000000038000000007000000000E000
+000001C0000000038000000007000000001E000000003800000000F000000003C0000000
+1F00000001FC000000FFE0000000FE000000002323A1A242>I<C000000000C000000000
+C000000000C000000000C000000000C000000000E0000000006000000000600000000060
+00000000600000000070000000003000000000380000000018000000001C000000000C00
+0000000E00000000060000000007000000000300000000038000000001C000000000E000
+000000700000000038000000001C000000000F00000000038000000001E0000000007800
+0000001F0000000007F000000000FFE00000000FE0232380A242>I<0000000FE0000000
+FFE0000007F00000001F000000007800000001E000000003800000000F000000001C0000
+000038000000007000000000E000000001C0000000038000000003000000000700000000
+06000000000E000000000C000000001C0000000018000000003800000000300000000070
+000000007000000000600000000060000000006000000000E000000000C000000000C000
+000000C000000000C000000000C000000000C0000000002323808142>I<007F800001FF
+E00007FFF8000FFFFC001FFFFE003FFFFF003FFFFF007FFFFF807FFFFF80FFFFFFC0FFFF
+FFC0FFFFFFC0FFFFFFC0FFFFFFC0FFFFFFC0FFFFFFC0FFFFFFC07FFFFF807FFFFF803FFF
+FF003FFFFF001FFFFE000FFFFC0007FFF80001FFE000007F80001A1A8D8C19>117
+D E /Fg 17 118 df<3078F8787005057C840E>46 D<0000040000000006000000000E00
+0000001E000000001E000000003E000000003F000000004F000000004F000000008F0000
+00008F000000010F00000001078000000207800000020780000004078000000407800000
+0807C000000803C000001003C000001003C000002003C000003FFFE000004001E0000040
+01E000008001E000008001E000010001E000010000F000020000F000060000F000040000
+F0000C0000F0003E0001F800FF800FFF8021237EA225>65 D<0001FC02000F0306003C00
+8C0070005C00E0003C01C0003C0380001C0700001C0F0000181E0000181E0000083E0000
+083C0000087C0000087C000000F8000000F8000000F8000000F8000000F8000000F00000
+00F0000000F0000000F0000020F0000020F0000040F80000407800004078000080380001
+003C0001001C0002000E000C000700100001C0E000003F00001F247AA223>67
+D<03FFFFFF003E001F003C000E003C0006003C0002003C0002003C000200780002007800
+020078000200780202007802000078060000F0040000F0040000F01C0000FFFC0000F01C
+0000F00C0001E0080001E0080001E0080001E0080201E0000401E0000403C0000403C000
+0803C0000803C0001803C0001003C00030078000F007C003E0FFFFFFE020227EA121>69
+D<03FFF0003E00003C00003C00003C00003C00003C000078000078000078000078000078
+0000780000F00000F00000F00000F00000F00000F00001E00001E00001E00001E00001E0
+0001E00003C00003C00003C00003C00003C00003C00007800007C000FFFC0014227EA112
+>73 D<1FFFFFFE3C03E03E3803C00C3003C0042003C0046003C0044003C00440078004C0
+07800480078004800780040007800000078000000F0000000F0000000F0000000F000000
+0F0000000F0000001E0000001E0000001E0000001E0000001E0000001E0000003C000000
+3C0000003C0000003C0000003C0000003C0000007C000000FC00003FFFF0001F227AA123
+>84 D<03FC000606000F03000F03800601800001C0000380000380007F8003E3800F0380
+1C0380380700780700F00708F00708F00F08F00F08F017107867A01F83C015157D9418>
+97 D<00FF000381C00603C00C03C01C0180380000780000700000F00000F00000F00000
+F00000F00000E00000F00000F000807001007001003806001C180007E00012157C9416>
+99 D<007000F001F000F000E00000000000000000000000000000000001C00FC001C001
+C001C001C00380038003800380038003800700070007000700070007000E000F00FFE00C
+227FA10E>105 D<007803F800700070007000700070007000E000E000E000E000E000E0
+01C001C001C001C001C001C0038003800380038003800380070007000700070007000700
+0E000F00FFE00D237FA20E>108 D<01C1F807E01FC60C183001D80E603801E007801C01
+E007801C01C007001C03C00F003803800E003803800E003803800E003803800E00380380
+0E003807001C007007001C007007001C007007001C007007001C007007001C00700E0038
+00E00F003C00F0FFE3FF8FFE27157F942A>I<01C3F01FCC1801D00C01E00E01E00E01C0
+0E03C01C03801C03801C03801C03801C03801C0700380700380700380700380700380700
+380E00700F0078FFE7FF18157F941B>I<007E000383800600C00C00E01C007038007078
+0078700078F00078F00078F00078F00078E000F0E000F0E000E0F001E07001C070038038
+07001C1C0007F00015157D9418>I<01C7C01FC8E001D1E001E1E001E0C001C00003C000
+0380000380000380000380000380000700000700000700000700000700000700000E0000
+0F0000FFF00013157F9413>114 D<01F906070C0318031801180118021C001FE00FF807
+FC007E000E4006400640066006600CE008D83087C010157E9413>I<0080008000800180
+01000300030007000F001F00FFF80E000E000E000E000E001C001C001C001C001C001C00
+38103810381038103810382038201C4007800D1F7C9E13>I<0E0070FE07F00E00F00E00
+700E00700E00701C00E01C00E01C00E01C00E01C00E01C00E03801C03801C03801C03801
+C03803C03805C0380B801C13C007E3F815157C941B>I E /Fh 1
+98 df<00040000000E0000000E0000000E0000001F0000001F0000003F80000027800000
+2780000043C0000043C0000043C0000081E0000081E0000101F0000100F0000100F00003
+FFF8000200780006007C0004003C0004003C000C001E000C001E003C003F00FF00FFE01B
+1A7F991F>97 D E /Fi 5 115 df<FFFFFFFFE0FFFFFFFFF07000001FF078000001F03C
+000000781C000000180E0000000C0F000000040700000004038000000203C000000001E0
+00000000E0000000007000000000780000000038000000001C000000001E000000000F00
+0000000700000000038000000003800000000300000000070000000006000000000C0000
+00001800000000380000000030000000006000000000C000000001C00000000180000002
+030000000406000000040E0000000C0C00000018180000007830000001F07000001FF07F
+FFFFFFF0FFFFFFFFE0272A7E7F2C>80 D<FFFFFFFFFFFFC0FFFFFFFFFFFFE07F00000001
+FFE07F000000001FE03F8000000003F01FC000000000F00FC000000000380FE000000000
+1807F0000000000C03F8000000000403F8000000000401FC000000000200FE0000000000
+007F0000000000007F0000000000003F8000000000001FC000000000000FC00000000000
+0FE0000000000007F0000000000003F8000000000003F8000000000001FC000000000000
+FE0000000000007E0000000000007F0000000000003F8000000000001FC000000000001F
+C000000000000FC000000000000780000000000003800000000000070000000000000E00
+00000000001C000000000000380000000000007000000000000070000000000000E00000
+00000001C0000000000003800000000000070000000000000E0000000000000E00000000
+00001C0000000002003800000000040070000000000400E0000000000C01E00000000018
+01C00000000038038000000000F8070000000001F00E000000000FF01C00000001FFF03F
+FFFFFFFFFFE03FFFFFFFFFFFE07FFFFFFFFFFFE0FFFFFFFFFFFFC0373A7E7F3C>88
+D<00001C0000000000FF8000000007E3F00000003F007E000001F00007C0000F800000F8
+00380000000E00C000000001802908809F2A>99 D<00000000060000000006000000000E
+000000000C000000000C000000001C000000001800000000180000000038000000003000
+0000003000000000700000000060000000006000000000E000000000C000000000C00000
+0001C0000000018000000001800000000380000000030000000003000000000700000000
+060000000006000000000E000000000C000000000C000000001C00000000180000000018
+000000003800000000300000000030000000007000000000600000000060000800006000
+1C0000E0003C0000C0007C0000C000DC0001C0008E000180000E000180000E0003800007
+00030000070003000007000700000380060000038006000003800E000003800C000001C0
+0C000001C01C000001C018000000E018000000E038000000E030000000E0300000007070
+0000007060000000706000000038E000000038C000000038C00000001DC00000001D8000
+00001D800000001F800000000F000000000F000000000F00000000060000000006000000
+274B7C812A>113 D<000000000600000000060000000006000000000E000000000C0000
+00000C000000000C000000001C0000000018000000001800000000180000000038000000
+003000000000300000000030000000007000000000600000000060000000006000000000
+E000000000C000000000C000000000C000000001C0000000018000000001800000000180
+000000038000000003000000000300000000030000000007000000000600000000060000
+000006000000000E000000000C000000000C000000000C000000001C0000000018000000
+001800000000180000000038000000003000000000300000000030000000007000000000
+60000000006000000000600008000060001C0000E0001C0000C0003C0000C0005C0000C0
+005C0001C0008E000180000E000180000E000180000E0003800007000300000700030000
+0700030000070007000007000600000380060000038006000003800E000003800C000001
+C00C000001C00C000001C01C000001C018000001C018000000E018000000E038000000E0
+30000000E030000000E030000000707000000070600000007060000000706000000038E0
+00000038C000000038C000000038C000000039C00000001D800000001D800000001D8000
+00001F800000000F000000000F000000000F000000000F000000000E0000000006000000
+000600000027647C812A>I E /Fj 5 62 df<0030000030000030000030000030000030
+00003000003000003000003000003000FFFFFCFFFFFC0030000030000030000030000030
+0000300000300000300000300000300000300016187E931B>43 D<07C018303018701C60
+0C600CE00EE00EE00EE00EE00EE00EE00EE00EE00E600C600C701C30181C7007C00F157F
+9412>48 D<03000700FF0007000700070007000700070007000700070007000700070007
+0007000700070007007FF00C157E9412>I<0F8030E040708030C038E038403800380070
+0070006000C00180030006000C08080810183FF07FF0FFF00D157E9412>I<FFFFFCFFFF
+FC000000000000000000000000000000000000FFFFFCFFFFFC160A7E8C1B>61
+D E /Fk 15 121 df<0E00030003800180018001C000C000C00060006000700030003000
+7800980118020C040C080C180630066007C00310177E9615>21 D<0402000C06000C0600
+0C0600180C00180C00180C00180C003018003018803018803038807859006F8E00600000
+600000C00000C00000C0000080000011147E8D15>I<60F0F070101020204040040A7D83
+0A>59 D<071018F0307060706060C060C060C06080C080C480C4C1C446C838700F0E7E8D
+13>97 D<07C01C20301060106020FFC0C000C000C000C000C010402060C01F000C0E7E8D
+10>101 D<000E0013003700360060006000600060006007FC00C000C000C000C000C001
+800180018001800180018003000300030003006600E600CC007800101D7E9611>I<0300
+038003000000000000000000000000001C002400460046008C000C001800180018003100
+3100320032001C0009177F960C>105 D<00180038001000000000000000000000000001
+C0022004300430086000600060006000C000C000C000C001800180018001806300E300C6
+0078000D1D80960E>I<3E0C0C0C0C181818183030303060606060C0C8C8C8D07007177E
+960B>108 D<383C0044C6004702004602008E06000C06000C06000C0C00180C00180C40
+181840181880300880300F00120E7F8D15>110 D<07C00C20101020186018C018C018C0
+1880308030C060C0C061803E000D0E7E8D11>I<38F04518463846308C000C000C000C00
+1800180018001800300030000D0E7F8D10>114 D<1C04260E4606460686040C040C040C
+0418081808181018100C6007800F0E7F8D11>118 D<1C020426060E460606460606860C
+040C0C040C0C040C0C041818081818081818100818100C2C2003C7C0170E7F8D19>I<0F
+1F0011A18020C38020C300418000018000018000018000030000030200C30200E70400C5
+080078F000110E7F8D14>I E /Fl 7 118 df<00FF8003FFC00FFFE01F01E03C00C07800
+00700000700000E00000E00000E00000E00000E000007000007000007800703C00701F01
+F00FFFE003FFC000FE0014157D941A>99 D<01F80007FF000FFF801E07C03C01C07800E0
+7000E0E00070E00070FFFFF0FFFFF0FFFFF0E000007000007000007800703C00701F01F0
+0FFFE003FFC000FE0014157D941A>101 D<00C00001E00001E00000C000000000000000
+0000000000000000000000007FE0007FE0007FE00000E00000E00000E00000E00000E000
+00E00000E00000E00000E00000E00000E00000E00000E00000E00000E0007FFF80FFFFC0
+7FFF80121F7C9E1A>105 D<FE3E00FEFF80FFFFE00FC1F00F80700F00380E00380E001C
+0E001C0E001C0E001C0E001C0E001C0E001C0F00380F00780F80F00FC1E00FFFC00EFF80
+0E3E000E00000E00000E00000E00000E00000E00000E00000E0000FFE000FFE000FFE000
+16207F941A>112 D<7F83F0FF8FF87FBFFC03FC3C03F01803E00003C00003C000038000
+0380000380000380000380000380000380000380000380000380007FFF00FFFF007FFF00
+16157E941A>114 D<00C00001C00001C00001C00001C00001C00001C0007FFFE0FFFFE0
+FFFFE001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C070
+01C07001C07001C07000E0E000FFE0007FC0001F00141C7F9B1A>116
+D<FE0FE0FE0FE0FE0FE00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00
+E00E00E00E00E00E00E00E00E00E01E00F03E007FFFE03FFFE00FCFE17157F941A>I
+E /Fm 21 121 df<01F00107F8010FFC021FFC02380E0460020440030880010880010800
+00900000900000A00000A00000A00000C00000C00000C000008000008000008000018000
+018000018000030000030000030000030000060000060000060000040000040018207F94
+19>13 D<00C00C01C01C01C01C0380380380380380380380380700700700700700700700
+700E00E00E00E00E00E00E00E11E01C21E01C21E03C21E04C43F08C439F0383800003800
+00700000700000700000700000E00000E00000E00000E00000C0000018207E941D>22
+D<000F800018E000707000E07000C0380180380380780380780700780700780700780E00
+F00E00F00E00F00E01E01C01C01C01C01E03801E0700390C0038F0003800003800007000
+00700000700000700000E00000E00000E00000E00000C0000015207E9419>26
+D<70F8F8F87005057C840E>58 D<70F8FCFC7404040404080810102040060F7C840E>I<
+000180000180000380000300000300000700000600000600000E00000C00000C00001C00
+00180000180000180000380000300000300000700000600000600000E00000C00000C000
+01C0000180000180000380000300000300000700000600000600000E00000C00000C0000
+0C00001C0000180000180000380000300000300000700000600000600000E00000C00000
+C0000011317DA418>61 D<C0000000F00000003C0000000F00000003C0000000F0000000
+3E0000000F80000001E0000000780000001E0000000780000001E0000000780000007800
+0001E00000078000001E00000078000001E000000F8000003E000000F0000003C000000F
+0000003C000000F0000000C00000001D1C7C9926>I<007FC00001FF0007C00003E00007
+C00005E00007C00005E00009E0000BC00009E0000BC00009E00013C00009E00023C00011
+E00027800011E00047800011E00047800011E00087800021E0010F000020F0010F000020
+F0020F000020F0040F000040F0041E000040F0081E000040F0081E000040F0101E000080
+F0203C00008078203C00008078403C00008078803C000100788078000100790078000100
+7900780001007A00780002007C00F00002007C00F00002003800F00006003800F0000F00
+3001F000FFE0203FFF0030227EA12F>77 D<007FFFF0000007801C000007800F00000780
+0700000F000380000F000380000F000380000F000380001E000780001E000780001E0007
+80001E000F00003C000F00003C001E00003C003C00003C007000007801E000007FFF0000
+0078000000007800000000F000000000F000000000F000000000F000000001E000000001
+E000000001E000000001E000000003C000000003C000000003C000000003C000000007C0
+000000FFFC00000021227EA11F>80 D<00007F00000381C0000E00600038003800700038
+00E0001C01C0001E0380000E0700000E0F00000F0E00000F1E00000F3C00000F3C00000F
+7800000F7800000F7800000FF000001EF000001EF000001EF000001CF000003CE000003C
+E0000078E0000078E00000F0E00000E0F00001E0F01E03C0702103807840870038408E00
+1C40B8000E40F00007C1C02000FE80200000802000018040000180C00001C0800001C380
+0001FF000000FF000000FE0000007800202D7DA227>I<1FFFFFFE1E01E00E1801E00630
+01E0062003C0062003C0064003C0044003C0044007800480078004800780040007800000
+0F0000000F0000000F0000000F0000001E0000001E0000001E0000001E0000003C000000
+3C0000003C0000003C00000078000000780000007800000078000000F0000000F0000000
+F0000000F0000001F00000FFFFC0001F227EA11D>84 D<FFF8007FC00F80000F000F0000
+0C000F000008000F000010000F8000100007800020000780006000078000400007800080
+0007800080000780010000078002000007C002000003C004000003C00C000003C0080000
+03C010000003C010000003C020000003E040000003E040000001E080000001E180000001
+E100000001E200000001E200000001E400000001F800000000F800000000F000000000E0
+00000000E000000000C000000000C000000022237DA11C>86 D<00786001C4E00302E006
+01C00E01C01C01C03C01C0380380780380780380780380F00700F00700F00700F00708F0
+0E10700E10701E1030262018C6200F01C015157E941A>97 D<003F0000E0800380C00701
+C00E03C01C03C03C00003C0000780000780000780000F00000F00000F00000F000007000
+407000403001803802001C1C0007E00012157E9415>99 D<00001E0001FC00001C00001C
+00001C0000380000380000380000380000700000700000700000700000E00078E001C4E0
+0302E00601C00E01C01C01C03C01C0380380780380780380780380F00700F00700F00700
+F00708F00E10700E10701E1030262018C6200F01C017237EA219>I<007C000382000701
+000E01001C0100380100780200700400FFF800F00000F00000E00000E00000E00000E000
+00E00080E000807003003004001838000FC00011157D9417>I<00E000E001E000C00000
+000000000000000000000000000000001E0023004380438083808380870007000E000E00
+0E001C001C0038003820384070407040308031001E000C227EA111>105
+D<0000E00001E00001E00000C00000000000000000000000000000000000000000000000
+00000000001E000023000043800083800103800103800103800007000007000007000007
+00000E00000E00000E00000E00001C00001C00001C00001C000038000038000038000038
+0000700000700000700070E000F0C000F180006300003E0000132C81A114>I<00F0000F
+E00000E00000E00000E00001C00001C00001C00001C00003800003800003800003800007
+00000700F00703080704380E08780E10780E20300E40001C80001F00001FC0001C700038
+3800383800381C00381C10703820703820703820701840E00C8060070015237DA219>I<
+006000E000E000E000E001C001C001C001C00380FFFC0380038007000700070007000E00
+0E000E000E001C001C001C001C08381038103820182018C007000E1F7F9E12>116
+D<01E0F006310C081A1C101A3C201C3C201C18201C000038000038000038000038000070
+0000700000700000700860E010F0E010F0E020E170404230803C1F0016157E941C>120
+D E /Fn 81 124 df<001F83E000706E3000C07C780180F8780380F07807007000070070
+0007007000070070000700700007007000070070000700700007007000FFFFFFC0070070
+000700700007007000070070000700700007007000070070000700700007007000070070
+000700700007007000070070000700700007007000070070000700700007007000070078
+007FE3FF801D2380A21C>11 D<001FC0000070200000C010000180380003807800070078
+000700300007000000070000000700000007000000070000000700000007000000FFFFF8
+000700780007003800070038000700380007003800070038000700380007003800070038
+000700380007003800070038000700380007003800070038000700380007003800070038
+00070038007FE1FF80192380A21B>I<000FC07F00007031C08000E00B004001801E00E0
+03803E01E007003C01E007001C00C007001C000007001C000007001C000007001C000007
+001C000007001C000007001C0000FFFFFFFFE007001C01E007001C00E007001C00E00700
+1C00E007001C00E007001C00E007001C00E007001C00E007001C00E007001C00E007001C
+00E007001C00E007001C00E007001C00E007001C00E007001C00E007001C00E007001C00
+E007001C00E07FF1FFCFFE272380A229>14 D<0780000C001840001C0018200018003010
+007800701C00F0006013FF6000E00800E000E00800C000E00801C000E008038000E00803
+0000E008070000E0080E0000E0080C000060101C00007010180000301038000018207000
+0018406000000780E03C000001C04200000180C100000381810000070380800006030080
+000E030040000C070040001C07004000380700400030070040007007004000E007004000
+C007004001C0030040018003008003800380800700018100060000C1000E000042000C00
+003C0022287DA429>37 D<003C000000006200000000C200000001810000000181000000
+038100000003810000000381000000038100000003820000000382000000038400000003
+8800000001C800000001D000000001E003FF8001C0007C0000E000380001E000300001F0
+002000027000400004700040000838008000183C008000301C010000701E020000700E02
+0000F007040000F007880000F003880000F001D00100F000E0010078007003003800B802
+003C031C04000E0C0E0C0003F003F00021257EA326>I<70F8FCFC740404040408081010
+2040060F7CA20E>I<00200040008001000300060004000C000C00180018003000300030
+007000600060006000E000E000E000E000E000E000E000E000E000E000E000E000E000E0
+006000600060007000300030003000180018000C000C0004000600030001000080004000
+200B327CA413>I<800040002000100018000C0004000600060003000300018001800180
+01C000C000C000C000E000E000E000E000E000E000E000E000E000E000E000E000E000E0
+00C000C000C001C0018001800180030003000600060004000C0018001000200040008000
+0B327DA413>I<0001800000018000000180000001800000018000000180000001800000
+0180000001800000018000000180000001800000018000000180000001800000018000FF
+FFFFFEFFFFFFFE0001800000018000000180000001800000018000000180000001800000
+01800000018000000180000001800000018000000180000001800000018000000180001F
+227D9C26>43 D<70F8FCFC7404040404080810102040060F7C840E>I<FFE0FFE00B027F
+8B10>I<70F8F8F87005057C840E>I<000180000180000380000300000300000700000600
+000600000E00000C00000C00001C00001800001800001800003800003000003000007000
+00600000600000E00000C00000C00001C000018000018000038000030000030000070000
+0600000600000E00000C00000C00000C00001C0000180000180000380000300000300000
+700000600000600000E00000C00000C0000011317DA418>I<01F000071C000C06001803
+003803803803807001C07001C07001C07001C0F001E0F001E0F001E0F001E0F001E0F001
+E0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F001E07001C07001C07001C07803
+C03803803803801C07000C0600071C0001F00013227EA018>I<008003800F80F3800380
+038003800380038003800380038003800380038003800380038003800380038003800380
+0380038003800380038003800380038007C0FFFE0F217CA018>I<03F0000C1C00100700
+2007804003C04003C08003E0F003E0F801E0F801E0F801E02003E00003E00003C00003C0
+000780000700000E00001C0000180000300000600000C000018000010000020020040020
+0800201800603000403FFFC07FFFC0FFFFC013217EA018>I<03F8000C1E001007002007
+804007C07807C07803C07807C03807C0000780000780000700000F00000E0000380003F0
+00001C00000F000007800007800003C00003C00003E02003E07003E0F803E0F803E0F003
+C04003C0400780200780100F000C1C0003F00013227EA018>I<000200000600000E0000
+0E00001E00001E00002E00004E00004E00008E00008E00010E00020E00020E00040E0004
+0E00080E00100E00100E00200E00200E00400E00800E00FFFFF8000E00000E00000E0000
+0E00000E00000E00000E00001F0001FFF015217FA018>I<1000801E07001FFF001FFE00
+1FF80013E00010000010000010000010000010000010000010F800130E00140700180380
+1003800001C00001C00001E00001E00001E00001E07001E0F001E0F001E0E001C08001C0
+4003C04003802007001006000C1C0003F00013227EA018>I<007E0001C1000300800601
+C00E03C01C03C0180180380000380000780000700000700000F0F800F30C00F40600F403
+00F80380F801C0F001C0F001E0F001E0F001E0F001E0F001E07001E07001E07001E03801
+C03801C01803801C03000C0600070C0001F00013227EA018>I<4000006000007FFFE07F
+FFC07FFFC0400080C0010080010080020080020000040000080000080000100000300000
+200000600000600000600000E00000C00000C00001C00001C00001C00001C00003C00003
+C00003C00003C00003C00003C00003C00003C00001800013237DA118>I<01F800060E00
+0803001001802001802000C06000C06000C06000C07000C07801803E01003F02001FC400
+0FF80003F80003FC00067F00083F80100F803007C06001C06000E0C000E0C00060C00060
+C00060C000606000406000C03000801803000E0E0003F00013227EA018>I<01F000060C
+000C0600180700380380700380700380F001C0F001C0F001C0F001E0F001E0F001E0F001
+E0F001E07001E07003E03803E01805E00C05E00619E003E1E00001C00001C00001C00003
+80000380300300780700780600700C002018001030000FC00013227EA018>I<70F8F8F8
+70000000000000000000000070F8F8F87005157C940E>I<70F8F8F87000000000000000
+0000000070F8F8F87808080808101010204040051F7C940E>I<FFFFFFFEFFFFFFFE0000
+000000000000000000000000000000000000000000000000000000000000FFFFFFFEFFFF
+FFFE1F0C7D9126>61 D<07E01838201C400E800FF00FF00FF00F000F000E001C00380030
+006000C000C0008000800180010001000100010001000100000000000000000000000380
+07C007C007C0038010237DA217>63 D<0001800000018000000180000003C0000003C000
+0003C0000005E0000005E000000DF0000008F0000008F0000010F8000010780000107800
+00203C0000203C0000203C0000401E0000401E0000401E0000800F0000800F0000FFFF00
+0100078001000780030007C0020003C0020003C0040003E0040001E0040001E00C0000F0
+0C0000F03E0001F8FF800FFF20237EA225>65 D<FFFFF8000F800E0007800780078003C0
+078003E0078001E0078001F0078001F0078001F0078001F0078001F0078001E0078003E0
+078007C007800F8007803E0007FFFE0007800780078003C0078001E0078001F0078000F0
+078000F8078000F8078000F8078000F8078000F8078000F8078001F0078001F0078003E0
+078007C00F800F00FFFFFC001D227EA123>I<0007E0100038183000E0063001C0017003
+8000F0070000F00E0000701E0000701C0000303C0000303C0000307C0000107800001078
+000010F8000000F8000000F8000000F8000000F8000000F8000000F8000000F800000078
+000000780000107C0000103C0000103C0000101C0000201E0000200E0000400700004003
+80008001C0010000E0020000381C000007E0001C247DA223>I<FFFFF0000F801E000780
+0700078003C0078001C0078000E0078000F007800078078000780780007C0780003C0780
+003C0780003C0780003E0780003E0780003E0780003E0780003E0780003E0780003E0780
+003E0780003E0780003C0780003C0780007C0780007807800078078000F0078000E00780
+01E0078003C0078007000F801E00FFFFF8001F227EA125>I<FFFFFFC00F8007C0078001
+C0078000C007800040078000400780006007800020078000200780002007802020078020
+000780200007802000078060000780E00007FFE0000780E0000780600007802000078020
+000780200007802008078000080780000807800010078000100780001007800030078000
+3007800070078000E00F8003E0FFFFFFE01D227EA121>I<FFFFFFC00F8007C0078001C0
+078000C00780004007800040078000600780002007800020078000200780202007802000
+0780200007802000078060000780E00007FFE0000780E000078060000780200007802000
+078020000780200007800000078000000780000007800000078000000780000007800000
+07800000078000000FC00000FFFE00001B227EA120>I<0007F008003C0C1800E0021801
+C001B8038000F8070000780F0000381E0000381E0000183C0000183C0000187C00000878
+00000878000008F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8
+001FFF780000F8780000787C0000783C0000783C0000781E0000781E0000780F00007807
+000078038000B801C000B800E00318003C0C080007F00020247DA226>I<FFFC3FFF0FC0
+03F0078001E0078001E0078001E0078001E0078001E0078001E0078001E0078001E00780
+01E0078001E0078001E0078001E0078001E0078001E007FFFFE0078001E0078001E00780
+01E0078001E0078001E0078001E0078001E0078001E0078001E0078001E0078001E00780
+01E0078001E0078001E0078001E00FC003F0FFFC3FFF20227EA125>I<FFFC0FC0078007
+800780078007800780078007800780078007800780078007800780078007800780078007
+8007800780078007800780078007800780078007800FC0FFFC0E227EA112>I<03FFF000
+1F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F0000
+0F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F0000
+0F00700F00F80F00F80F00F80E00F01E00401C0020380018700007C00014237EA119>I<
+FFFC03FF000FC000F8000780006000078000400007800080000780010000078002000007
+800400000780080000078010000007802000000780400000078080000007818000000783
+C000000787E000000789E000000788F000000790F0000007A078000007C03C000007803C
+000007801E000007800F000007800F00000780078000078007C000078003C000078001E0
+00078001E000078000F000078000F8000FC000FC00FFFC07FF8021227EA126>I<FFFE00
+000FC0000007800000078000000780000007800000078000000780000007800000078000
+000780000007800000078000000780000007800000078000000780000007800000078000
+000780000007800000078000000780008007800080078000800780008007800180078001
+8007800100078003000780030007800F000F803F00FFFFFF0019227EA11E>I<FFC00003
+FF0FC00003F007C00003E005E00005E005E00005E004F00009E004F00009E004F00009E0
+04780011E004780011E004780011E0043C0021E0043C0021E0043C0021E0041E0041E004
+1E0041E0040F0081E0040F0081E0040F0081E004078101E004078101E004078101E00403
+C201E00403C201E00401E401E00401E401E00401E401E00400F801E00400F801E00400F8
+01E004007001E00E007001E01F007003F0FFE0203FFF28227EA12D>I<FF8007FF07C000
+F807C0007005E0002004F0002004F0002004780020047C0020043C0020041E0020041F00
+20040F002004078020040780200403C0200401E0200401E0200400F0200400F820040078
+2004003C2004003E2004001E2004000F2004000F20040007A0040003E0040003E0040001
+E0040001E0040000E00E0000601F000060FFE0002020227EA125>I<000FE00000783C00
+00E00E0003C00780078003C00F0001E00E0000E01E0000F03C0000783C0000787C00007C
+7C00007C7800003C7800003CF800003EF800003EF800003EF800003EF800003EF800003E
+F800003EF800003EF800003E7800003C7C00007C7C00007C3C0000783E0000F81E0000F0
+0F0001E00F0001E0078003C003C0078000E00E0000783C00000FE0001F247DA226>I<FF
+FFF0000F803C0007800F0007800780078007C0078003C0078003E0078003E0078003E007
+8003E0078003E0078003E0078003C0078007C00780078007800F0007803C0007FFF00007
+800000078000000780000007800000078000000780000007800000078000000780000007
+800000078000000780000007800000078000000FC00000FFFC00001B227EA121>I<000F
+E00000783C0000E00E0003C00780078003C00F0001E00E0000E01E0000F03E0000F83C00
+00787C00007C7C00007C7800003C7800003CF800003EF800003EF800003EF800003EF800
+003EF800003EF800003EF800003EF800003E7800003C7C00007C7C00007C3C0000783C00
+00781E0380F00E0420E00F0801E0078813C003C8178000E80E00007C3C02000FEC020000
+0C0200000C0200000E0600000F0E000007FC000007FC000007F8000003F8000001E01F2D
+7DA226>I<FFFFE000000F803C000007800E00000780078000078007C000078003C00007
+8003E000078003E000078003E000078003E000078003E000078003C000078007C0000780
+07800007800E000007803C000007FFE000000780700000078038000007801C000007801E
+000007800E000007800F000007800F000007800F000007800F000007800F800007800F80
+0007800F800007800F808007800FC080078007C0800FC003C100FFFC01E2000000007C00
+21237EA124>I<03F0200C0C601802603001E07000E0600060E00060E00060E00020E000
+20E00020F00000F000007800007F00003FF0001FFE000FFF0003FF80003FC00007E00001
+E00000F00000F0000070800070800070800070800070C00060C00060E000C0F000C0C801
+80C6070081FC0014247DA21B>I<7FFFFFF8780780786007801840078008400780084007
+8008C007800C800780048007800480078004800780040007800000078000000780000007
+800000078000000780000007800000078000000780000007800000078000000780000007
+80000007800000078000000780000007800000078000000780000007800000078000000F
+C00003FFFF001E227EA123>I<FFFC07FF0FC000F8078000700780002007800020078000
+200780002007800020078000200780002007800020078000200780002007800020078000
+200780002007800020078000200780002007800020078000200780002007800020078000
+2007800020078000200380004003C0004003C0004001C0008000E0008000600100003006
+00001C08000003F00020237EA125>I<FFF0007FC01F80001F000F00000C000780000C00
+0780000800078000080003C000100003C000100003E000300001E000200001E000200000
+F000400000F000400000F000400000780080000078008000007C018000003C010000003C
+010000001E020000001E020000001F020000000F040000000F040000000F8C0000000788
+000000078800000003D000000003D000000003F000000001E000000001E000000000C000
+000000C000000000C0000022237FA125>I<FFF03FFC03FE1F8007E000F80F0003C00070
+0F0003C000200F0003C00020078001E00040078001E00040078001E0004003C002F00080
+03C002F0008003C002F0008001E00478010001E00478010001E00478010000F0083C0200
+00F0083C020000F0083C020000F8183E06000078101E04000078101E0400007C101E0400
+003C200F0800003C200F0800003C200F0800001E40079000001E40079000001E40079000
+000F8003E000000F8003E000000F8003E00000070001C00000070001C00000070001C000
+0003000180000002000080002F237FA132>I<7FF807FF0007E001F80003C000E00003E0
+00C00001E000800000F001000000F80300000078020000007C040000003E0C0000001E08
+0000001F100000000FB000000007A000000007C000000003E000000001E000000001F000
+000003F80000000278000000047C0000000C3E000000081E000000101F000000300F8000
+0020078000004007C00000C003E000008001E000010001F000030000F000070000F8001F
+8001FC00FFE007FFC022227FA125>I<FFF0007FC01F80001F000F80000C000780000800
+07C000180003E000100001E000200001F000200000F000400000F800C000007C00800000
+3C010000003E010000001E020000001F040000000F84000000078800000007D800000003
+D000000003E000000001E000000001E000000001E000000001E000000001E000000001E0
+00000001E000000001E000000001E000000001E000000001E000000001E000000003E000
+00003FFF000022227FA125>I<FEFEC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0
+C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FEFE07317BA40E>91
+D<FEFE060606060606060606060606060606060606060606060606060606060606060606
+060606060606060606060606FEFE07317FA40E>93 D<0FE0001838003C0C003C0E001807
+0000070000070000070000FF0007C7001E07003C0700780700700700F00708F00708F007
+08F00F087817083C23900FC1E015157E9418>97 D<0E0000FE00001E00000E00000E0000
+0E00000E00000E00000E00000E00000E00000E00000E00000E00000E1F000E61C00E8060
+0F00300E00380E003C0E001C0E001E0E001E0E001E0E001E0E001E0E001E0E001E0E001C
+0E003C0E00380F00700C80600C41C0083F0017237FA21B>I<01FE000703000C07801C07
+80380300780000700000F00000F00000F00000F00000F00000F00000F000007000007800
+403800401C00800C010007060001F80012157E9416>I<0000E0000FE00001E00000E000
+00E00000E00000E00000E00000E00000E00000E00000E00000E00000E001F8E00704E00C
+02E01C01E03800E07800E07000E0F000E0F000E0F000E0F000E0F000E0F000E0F000E070
+00E07800E03800E01801E00C02E0070CF001F0FE17237EA21B>I<01FC000707000C0380
+1C01C03801C07801E07000E0F000E0FFFFE0F00000F00000F00000F00000F00000700000
+7800203800201C00400E008007030000FC0013157F9416>I<003C00C6018F038F030F07
+0007000700070007000700070007000700FFF80700070007000700070007000700070007
+0007000700070007000700070007000700070007807FF8102380A20F>I<00007001F198
+071E180E0E181C07001C07003C07803C07803C07803C07801C07001C07000E0E000F1C00
+19F0001000001000001800001800001FFE000FFFC00FFFE03800F0600030400018C00018
+C00018C000186000306000303800E00E038003FE0015217F9518>I<0E0000FE00001E00
+000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E1F
+800E60C00E80E00F00700F00700E00700E00700E00700E00700E00700E00700E00700E00
+700E00700E00700E00700E00700E00700E00700E0070FFE7FF18237FA21B>I<1C001E00
+3E001E001C00000000000000000000000000000000000E00FE001E000E000E000E000E00
+0E000E000E000E000E000E000E000E000E000E000E000E000E00FFC00A227FA10E>I<01
+C003E003E003E001C00000000000000000000000000000000001E00FE001E000E000E000
+E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000
+E000E000E060E0F0C0F18061803E000B2C82A10F>I<0E0000FE00001E00000E00000E00
+000E00000E00000E00000E00000E00000E00000E00000E00000E00000E03FC0E01F00E01
+C00E01800E02000E04000E08000E10000E38000EF8000F1C000E1E000E0E000E07000E07
+800E03C00E01C00E01E00E00F00E00F8FFE3FE17237FA21A>I<0E00FE001E000E000E00
+0E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00
+0E000E000E000E000E000E000E000E000E000E000E00FFE00B237FA20E>I<0E1FC07F00
+FE60E183801E807201C00F003C00E00F003C00E00E003800E00E003800E00E003800E00E
+003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E00
+3800E00E003800E00E003800E00E003800E00E003800E0FFE3FF8FFE27157F942A>I<0E
+1F80FE60C01E80E00F00700F00700E00700E00700E00700E00700E00700E00700E00700E
+00700E00700E00700E00700E00700E00700E00700E0070FFE7FF18157F941B>I<01FC00
+0707000C01801800C03800E0700070700070F00078F00078F00078F00078F00078F00078
+F000787000707800F03800E01C01C00E038007070001FC0015157F9418>I<0E1F00FE61
+C00E80600F00700E00380E003C0E001C0E001E0E001E0E001E0E001E0E001E0E001E0E00
+1E0E003C0E003C0E00380F00700E80E00E41C00E3F000E00000E00000E00000E00000E00
+000E00000E00000E00000E0000FFE000171F7F941B>I<01F8200704600E02601C016038
+01E07800E07800E0F000E0F000E0F000E0F000E0F000E0F000E0F000E07000E07800E038
+01E01C01E00C02E0070CE001F0E00000E00000E00000E00000E00000E00000E00000E000
+00E00000E0000FFE171F7E941A>I<0E3CFE461E8F0F0F0F060F000E000E000E000E000E
+000E000E000E000E000E000E000E000E000F00FFF010157F9413>I<0F8830786018C018
+C008C008E008F0007F803FE00FF001F8003C801C800C800CC00CC008E018D0308FC00E15
+7E9413>I<02000200020002000600060006000E001E003E00FFF80E000E000E000E000E
+000E000E000E000E000E000E000E040E040E040E040E040E040708030801F00E1F7F9E13
+>I<0E0070FE07F01E00F00E00700E00700E00700E00700E00700E00700E00700E00700E
+00700E00700E00700E00700E00700E00F00E00F006017003827800FC7F18157F941B>I<
+FFC1FE1E00780E00300E00200E002007004007004003808003808003808001C10001C100
+00E20000E20000E20000740000740000380000380000380000100017157F941A>I<FF8F
+F8FF1E01E03C1C01C0180E01C0180E01E0100E01E0100702602007027020070270200384
+3040038438400384384001C8188001C81C8001C81C8000F00D0000F00F0000F00F000060
+0600006006000060060020157F9423>I<FF83FE1F01F00E00C007008003810003830001
+C20000E400007800007800003800003C00004E00008E000187000103800201C00401E00C
+00E03E01F0FF03FE17157F941A>I<FFC1FE1E00780E00300E00200E0020070040070040
+03808003808003808001C10001C10000E20000E20000E200007400007400003800003800
+003800001000001000002000002000002000004000F04000F08000F180004300003C0000
+171F7F941A>I<3FFFC0380380300780200700600E00401C00403C0040380000700000E0
+0001E00001C0000380400700400F00400E00C01C0080380080780180700780FFFF801215
+7F9416>I<FFFFFE1701808C18>I E end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 300dpi
+TeXDict begin
+
+%%EndSetup
+%%Page: 0 1
+0 0 bop 270 255 a Fn(TRANSIENT)15 b(QUEUEING)g(APPR)o(O)o(XIMA)l(TIONS)
+e(F)o(OR)j(COMPUTER)866 355 y(NETW)o(ORKS)918 674 y(A)g(Thesis)987
+773 y(b)o(y)768 873 y(WILLIAM)g(A.)g(BAKER)511 1186 y(Submitted)e(to)j
+(the)f(O\016ce)f(of)i(Graduate)g(Studies)f(of)766 1235
+y(T)l(exas)h(A&M)e(Univ)o(ersit)o(y)399 1285 y(in)h(partial)g
+(ful\014llmen)o(t)d(of)k(the)f(requiremen)o(ts)d(for)k(the)f(degree)f
+(of)746 1385 y(MASTER)h(OF)g(SCIENCE)850 1887 y(Decem)o(b)q(er)e(1986)
+606 2304 y(Ma)s(jor)i(Sub)s(ject:)21 b(Electrical)14
+b(Engineering)p eop
+%%Page: 1 2
+1 1 bop 270 296 a Fn(TRANSIENT)15 b(QUEUEING)g(APPR)o(O)o(XIMA)l(TIONS)
+e(F)o(OR)j(COMPUTER)866 395 y(NETW)o(ORKS)918 568 y(A)g(Thesis)987
+668 y(b)o(y)768 767 y(WILLIAM)g(A.)g(BAKER)617 934 y(Submitted)f(to)h
+(T)l(exas)h(A&M)e(Univ)o(ersit)o(y)582 983 y(in)h(partial)g
+(ful\014llmen)o(t)d(of)k(the)f(requiremen)o(ts)838 1033
+y(for)g(the)g(degree)g(of)746 1133 y(MASTER)g(OF)g(SCIENCE)112
+1311 y(Appro)o(v)o(ed)g(as)h(to)f(st)o(yle)f(and)i(con)o(ten)o(t)f(b)o
+(y:)p 112 1538 750 3 v 296 1585 a(Pierce)f(E.)h(Can)o(trell)255
+1634 y(\(Chair)h(of)f(Committee\))p 112 1805 V 267 1852
+a(Ric)o(hard)g(M.)f(F)l(eldman)381 1902 y(\(Mem)o(b)q(er\))p
+1162 1805 V 1366 1852 a(Jerry)g(D.)i(Gibson)1431 1902
+y(\(Mem)o(b)q(er\))p 112 2051 V 333 2097 a(Karan)g(W)l(atson)381
+2147 y(\(Mem)o(b)q(er\))p 1162 2051 V 1396 2097 a(Jo)f(W.)g(Ho)o(wze)
+1300 2147 y(\(Head)g(of)h(Departmen)o(t\))850 2294 y(Decem)o(b)q(er)d
+(1986)606 2442 y(Ma)s(jor)i(Sub)s(ject:)21 b(Electrical)14
+b(Engineering)p eop
+%%Page: 3 3
+3 2 bop 1872 -117 a Fn(iii)875 313 y(ABSTRA)o(CT)473
+461 y(T)l(ransien)o(t)16 b(Queueing)g(Appro)o(ximations)e(for)j
+(Computer)715 561 y(Net)o(w)o(orks.)j(\(Decem)o(b)q(er)14
+b(1986\))550 661 y(William)g(A.)h(Bak)o(er,)g(B.S.,)f(Rutgers)j(Univ)o
+(ersit)o(y)485 760 y(Chair)f(of)h(Advisory)f(Committee)o(:)j(Dr.)i(P)l
+(.)16 b(E.)g(Can)o(trell)237 931 y(The)e(ob)s(jectiv)o(e)e(of)i(this)f
+(thesis)h(w)o(as)g(to)g(ev)m(aluate)f(the)h(p)q(erformance)e(of)i(sev)o
+(eral)f(transien)o(t)112 1030 y(queue)g(appro)o(ximations.)19
+b(The)13 b(appro)o(ximations)f(w)o(ere)h(tested)f(and)i(c)o
+(haracterized)d(for)j(a)f(single)112 1130 y(M/M/1)k(queue)f(and)h(a)f
+(tandem)f(queue)h(\(t)o(w)o(o)g(no)q(de\))h(net)o(w)o(ork.)210
+1229 y(The)d(\014v)o(e)e(appro)o(ximations)h(tested)h(in)f(this)g
+(thesis)h(used)f(a)h(closure)g(assumption)f(to)h(obtain)112
+1329 y(the)23 b(probabilit)o(y)g(of)g(an)h(empt)o(y)d(system.)40
+b(Then,)25 b(dep)q(ending)e(on)h(the)f(metho)q(d,)g(equations)112
+1429 y(w)o(ere)f(in)o(tegrated)g(to)g(obtain)h(the)f(mean)f(and,)j(in)e
+(some)f(cases,)i(the)f(v)m(ariance.)39 b(Johnston's)112
+1528 y(and)18 b(Rider's)d(metho)q(ds)h(solv)o(ed)g(for)h(just)f(the)h
+(mean.)k(Rothk)o(opf/Oren's)16 b(and)h(Chang/W)l(ang's)112
+1628 y(metho)q(ds)i(obtained)h(mean)e(and)i(v)m(ariance)f(v)m(alues,)h
+(and)g(Clark's)f(metho)q(d)g(pro)q(duced)h(sev)o(eral)112
+1728 y(quan)o(tities)c(whic)o(h)f(w)o(ere)h(used)g(to)h(\014nd)f(mean)f
+(and)i(v)m(ariance)f(statistics.)210 1827 y(F)l(or)d(the)f(M/M/1)h
+(case,)g(the)g(appro)o(ximations)f(b)o(y)g(Clark)g(and)i(Chang)f(w)o
+(ere)f(v)o(ery)g(accurate)112 1927 y(o)o(v)o(er)17 b(a)h(wide)g(range)g
+(of)g(input)f(patterns)h(and)h(initial)d(conditions.)25
+b(Rothk)o(opf)s('s)18 b(w)o(as)h(accurate)112 2026 y(o)o(v)o(er)d(all)g
+(conditions)h(but)g(nev)o(er)e(as)j(accurate)e(as)h(Chang)h(or)f
+(Clark.)23 b(Johnston's)17 b(and)h(Rider's)112 2126 y(appro)o
+(ximations)12 b(p)q(erformed)f(acceptably)h(only)h(o)o(v)o(er)e(some)h
+(of)g(the)h(cases.)20 b(The)12 b(hardest)h(condi-)112
+2226 y(tions)i(to)f(follo)o(w,)g(based)g(on)g(relativ)o(e)f(error,)g(w)
+o(ere)h(lo)o(w)f(utilization)g(cases)h(with)g(a)g(large)g(n)o(um)o(b)q
+(er)112 2325 y(in)i(the)g(queue)g(at)h Fm(t)c Fn(=)h(0.)210
+2425 y(F)l(or)19 b(nonstationary)g(arriv)m(al)g(patterns)f(in)o(to)g
+(the)h(M/M/1)g(queue,)e(Clark's)h(metho)q(d)g(w)o(as)112
+2525 y(sup)q(erior)f(to)g(all)g(others;)f(mean)g(and)h(v)m(ariance)f(v)
+m(alues)h(w)o(ere)f(alw)o(a)o(ys)g(within)g(three)g(p)q(ercen)o(t)g(of)
+112 2624 y(the)h(exact.)p eop
+%%Page: 4 4
+4 3 bop 1873 -117 a Fn(iv)210 116 y(F)l(or)17 b(the)g(tandem)g(queue,)f
+(equations)h(for)h Fm(dM)r(=dt)h Fn(and)e Fm(dV)5 b(=dt)19
+b Fn(w)o(ere)e(deriv)o(ed)e(to)j(observ)o(e)112 215 y(dep)q(endencies)f
+(on)g(join)o(t)g(probabilities)f(b)q(et)o(w)o(een)g(the)h(queues.)24
+b(While)16 b(the)h(rate)g(of)g(c)o(hange)g(of)112 315
+y(the)j(mean)e(w)o(as)i(only)f(a)h(function)f(of)h(the)f(marginal)f
+(probabilities)h(of)g(eac)o(h)g(queue,)g(the)g(rate)112
+415 y(of)e(c)o(hange)g(for)g(the)f(v)m(ariance)g(included)g(join)o(t)g
+(probabilit)o(y)f(terms.)21 b(An)16 b(assumption)g(of)h(queue)112
+514 y(indep)q(endence)11 b(w)o(as)i(made)d(in)i(order)g(to)g(implem)o
+(en)o(t)d(the)i(closure)h(assumptions)g(for)g(the)g(tandem)112
+614 y(queue.)210 713 y(The)20 b(appro)o(ximations)f(b)o(y)g(Chang)i
+(and)f(Clark)g(w)o(ere)f(v)o(ery)f(accurate)i(in)f(pro)q(ducing)i(the)
+112 813 y(mean.)f(F)l(or)c(lo)o(w)g(utilization)f(cases,)h(the)f(metho)
+q(ds)h(exp)q(erienced)e(di\016culties)g(in)h(follo)o(wing)h(the)112
+913 y(true)k(v)m(ariance)f(v)m(alues.)31 b(This)20 b(w)o(as)g(due)f(to)
+h(inaccuracies)f(in)g(the)g(assumption)g(that)h(the)g(t)o(w)o(o)112
+1012 y(queues)c(w)o(ere)g(indep)q(enden)o(t)f(of)i(eac)o(h)e(other.)210
+1112 y(In)j(conclusion,)g(the)g(metho)q(ds)g(b)o(y)f(Chang/W)l(ang)k
+(and)e(Clark)f(hold)g(promise)f(for)i(use)f(in)112 1212
+y(mo)q(deling)e(computer)e(net)o(w)o(orks,)i(particularly)f(for)h(the)g
+(mean)f(in)h(eac)o(h)g(queue.)p eop
+%%Page: 5 5
+5 4 bop 1887 -129 a Fn(v)795 581 y(T)l(o)16 b(m)o(y)f(mother,)f(Rose)p
+eop
+%%Page: 6 6
+6 5 bop 1873 -117 a Fn(vi)739 116 y(A)o(CKNO)o(WLEDGMENTS)210
+215 y(Sp)q(ecial)21 b(thanks)h(to)g(Dr.)f(P)l(.)g(E.)h(Can)o(trell,)f
+(whose)h(guidance)g(and)g(patience)e(made)h(this)112
+315 y(thesis)16 b(p)q(ossible.)21 b(I)15 b(w)o(ould)g(also)h(lik)o(e)e
+(to)i(thank)g(Drs.)21 b(R.)15 b(M.)g(F)l(eldman,)e(J.)i(D.)g(Gibson,)h
+(and)g(K.)112 415 y(W)l(atson)i(for)e(their)g(time)e(and)j(useful)f
+(commen)n(ts)e(in)i(reviewing)f(this)h(do)q(cumen)o(t.)210
+514 y(I)k(am)f(indebted)g(to)i(Dr.)f(G.)g(M.)f(Clark)h(of)g(Ohio)g
+(State)h(Univ)o(ersit)o(y)c(for)j(help)g(in)g(imple-)112
+614 y(men)o(ting)15 b(his)h(appro)o(ximation)f(metho)q(d.)p
+eop
+%%Page: 7 7
+7 6 bop 1860 -117 a Fn(vii)740 191 y(T)l(ABLE)16 b(OF)g(CONTENTS)112
+375 y(CHAPTER)1452 b(P)o(age)210 545 y(I)177 b(INTR)o(ODUCTION)12
+b Fm(:)25 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g
+(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)95 b Fn(1)454
+635 y(A.)22 b(Queueing)16 b(Theory)g(Bac)o(kground)35
+b Fm(:)24 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)
+95 b Fn(1)454 702 y(B.)24 b(Net)o(w)o(ork)15 b(Applications)k
+Fm(:)25 b(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h
+(:)f(:)h(:)f(:)h(:)95 b Fn(2)454 768 y(C.)24 b(Solution)16
+b(Metho)q(ds)30 b Fm(:)24 b(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f
+(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)95 b Fn(2)454
+835 y(D.)22 b(Thesis)16 b(Structure)e Fm(:)25 b(:)f(:)g(:)h(:)f(:)h(:)f
+(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)95
+b Fn(2)210 938 y(I)q(I)158 b(CLOSURE)17 b(APPR)o(O)o(XIMA)l(TIONS)c(IN)
+i(THE)i(T)l(ANDEM)e(QUEUE)40 b Fm(:)95 b Fn(5)454 1028
+y(A.)22 b(The)16 b(Kolmogoro)o(v)g(Solution)48 b Fm(:)24
+b(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)95
+b Fn(5)454 1095 y(B.)24 b(Appro)o(ximations)15 b(for)h(the)g(T)l(andem)
+g(Queue)27 b Fm(:)d(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)95
+b Fn(7)551 1161 y(1.)36 b(Indep)q(enden)o(t)15 b(Queue)h(Assumption)44
+b Fm(:)24 b(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)95
+b Fn(7)551 1228 y(2.)36 b(Closure)16 b(Appro)o(ximations)f(for)h(the)g
+(T)l(andem)f(Queue)23 b Fm(:)i(:)f(:)h(:)95 b Fn(9)454
+1294 y(C.)24 b(Implem)o(en)o(tation)13 b(and)k(Results)33
+b Fm(:)25 b(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h
+(:)95 b Fn(9)551 1360 y(1.)36 b(T)l(est)16 b(Conditions)47
+b Fm(:)25 b(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h
+(:)f(:)h(:)f(:)h(:)71 b Fn(10)551 1427 y(2.)36 b(Results)g
+Fm(:)25 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g
+(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)71 b Fn(10)405
+1530 y(REFERENCES)39 b Fm(:)24 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)
+h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)71
+b Fn(14)405 1657 y(APPENDIX)16 b(A)h Fm(:)25 b(:)f(:)h(:)f(:)h(:)f(:)g
+(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)
+h(:)f(:)h(:)71 b Fn(16)405 1785 y(VIT)l(A)20 b Fm(:)k(:)h(:)f(:)h(:)f
+(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)
+g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)71 b Fn(18)p
+eop
+%%Page: 8 8
+8 7 bop 1846 -117 a Fn(viii)810 240 y(LIST)16 b(OF)g(T)l(ABLES)112
+424 y(T)l(ABLE)1532 b(P)o(age)112 581 y(I)178 b(Results)16
+b(for)g(Nonstationary)h(M/M/1)g(Queue)c Fm(:)24 b(:)h(:)f(:)h(:)f(:)g
+(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)71 b Fn(11)112
+696 y(I)q(I)159 b(CPU)16 b(Times)e(for)j(Stationary)g(T)l(andem)e
+(Queue)26 b Fm(:)f(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h
+(:)71 b Fn(13)p eop
+%%Page: 9 9
+9 8 bop 1873 -117 a Fn(ix)796 223 y(LIST)17 b(OF)f(FIGURES)112
+406 y(FIGURE)1504 b(P)o(age)112 563 y(1)172 b(A)15 b(sample)g
+Fl(picture)f Fn(en)o(vironmen)o(t.)9 b Fm(:)25 b(:)f(:)h(:)f(:)h(:)f(:)
+h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)95
+b Fn(2)112 679 y(2)172 b(Ov)o(erall)14 b(Structure)23
+b Fm(:)h(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)
+h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)95 b
+Fn(4)112 794 y(3)172 b(The)16 b(t)o(w)o(o)g(no)q(de)h(tandem)e(queue.)
+39 b Fm(:)24 b(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h
+(:)f(:)h(:)f(:)h(:)f(:)h(:)95 b Fn(6)112 909 y(4)172
+b(Sto)q(c)o(hastic)16 b(balance)g(for)h(tandem)e(queue)g(without)i
+(feedbac)o(k.)22 b Fm(:)j(:)f(:)h(:)f(:)h(:)f(:)h(:)95
+b Fn(6)112 1024 y(5)172 b Fm(e)331 1031 y Fk(av)q(e)402
+1024 y Fn(for)17 b(stationary)f(tandem)g(queue,)f Fm(M)1085
+1031 y Fj(0)1118 1024 y Fn(=)f(0.)32 b Fm(:)25 b(:)f(:)h(:)f(:)g(:)h(:)
+f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)71 b Fn(12)112 1139 y(6)172
+b(Rothk)o(opf/Oren's)689 1123 y Fi(c)684 1139 y Fm(P)715
+1146 y Fj(0)751 1139 y Fn(results)16 b(for)h(stationary)g(M/M/1)g
+(queue.)h Fm(:)24 b(:)h(:)f(:)h(:)f(:)h(:)71 b Fn(17)p
+eop
+%%Page: 1 10
+1 9 bop 1888 -118 a Fn(1)873 123 y(CHAPTER)16 b(I)813
+306 y(INTR)o(ODUCTION)112 405 y(The)c(ob)s(jectiv)o(e)d(of)i(this)g
+(thesis)g(is)g(to)h(ev)m(aluate)f(the)g(p)q(erformance)f(of)h(sev)o
+(eral)f(transien)o(t)h(queueing)112 505 y(appro)o(ximations)20
+b(for)h(a)g(net)o(w)o(ork)f(of)g(queues.)34 b(These)20
+b(appro)o(ximations)g(will)f(b)q(e)i(tested)f(and)112
+604 y(c)o(haracterized)15 b(for)i(a)f(single)g(M/M/1)h(and)g(a)f
+(tandem)g(queue)f(\(2)i(no)q(de\))g(net)o(w)o(ork)e([1].)210
+704 y(The)h(statistics)g(of)g(queueing)g(systems,)e(suc)o(h)i(as)g(the)
+g(mean)f(n)o(um)o(b)q(er)f(in)i(eac)o(h)g(queue)f(and)112
+804 y(the)i(v)m(ariance,)g(are)h(often)f(computed)f(using)h(steady)h
+(state)f(assumptions.)24 b(In)17 b(man)o(y)f(systems,)112
+903 y(ho)o(w)o(ev)o(er,)c(the)f(queue)g(parameters)g(c)o(hange)h(with)g
+(time)e(and)i(steady)g(state)h(assumptions)e(lead)h(to)112
+1003 y(erroneous)i(mean)d(and)i(v)m(ariance)g(quan)o(tities.)18
+b(It)13 b(is)f(therefore)g(desirable)g(to)h(solv)o(e)f(the)g(transien)o
+(t)112 1103 y(system.)19 b(Unfortunately)l(,)13 b(solutions)h(to)f
+(transien)o(t)g(queueing)f(systems)g(are)h(di\016cult)f(to)h(obtain.)
+112 1202 y(Although)19 b(an)g(analytic)f(solution)g(exists)g(for)h(the)
+f(single)g(M/M/1)h(queue,)e(a)i(net)o(w)o(ork)f(of)h(t)o(w)o(o)112
+1302 y(suc)o(h)e(queues)f(remains)f(an)i(op)q(en)g(problem.)j(The)c
+(appro)o(ximation)f(metho)q(ds)h(are)h(used)f(reduce)112
+1401 y(the)k(computational)e(complexit)o(y)e(of)k(existing)e(transien)o
+(t)h(solutions)h(and)g(to)f(pro)o(vide)g(insigh)o(t)112
+1501 y(in)o(to)13 b(the)f(b)q(eha)o(vior)g(of)h(systems)e(for)h(whic)o
+(h)g(no)h(analytic)f(solution)g(exists.)20 b(It)12 b(is)g(hop)q(ed)h
+(that)g(this)112 1601 y(researc)o(h)j(will)f(serv)o(e)g(to)i(impro)o(v)
+o(e)d(presen)o(t)h(metho)q(ds)h(of)h(mo)q(delling)d(computer)h(net)o(w)
+o(orks)h([2].)112 1775 y(A.)48 b(Queueing)16 b(Theory)h(Bac)o(kground)
+112 1924 y(Cen)o(tral)g(to)h(in)o(terpreting)d(results)i(from)f(an)o(y)
+h(queueing)g(mo)q(del)f(is)h(the)f(understanding)i(of)g(the)112
+2024 y(underlying)g(queueing)g(pro)q(cess.)27 b(If)18
+b(y)o(ou)g(no)o(w)h(refer)e(to)i(Fig.)f(1,)g(y)o(ou)g(will)g(see)f(an)i
+(example)d(of)112 2124 y(the)21 b(L)213 2118 y Fh(a)237
+2124 y Fn(T)264 2139 y(E)291 2124 y(X)f(picture)g(en)o(vironmen)o(t.)32
+b(Of)20 b(particular)g(imp)q(ortance)g(are)g(\014v)o(e)g(basic)h(c)o
+(haracter-)112 2223 y(istics)f([3]:)30 b(arriv)m(al)20
+b(pattern)h(of)g(customers,)f(service)f(pattern)i(of)g(serv)o(ers,)f
+(queue)g(discipline,)112 2323 y(system)15 b(capacit)o(y)l(,)g(and)i
+(the)f(n)o(um)o(b)q(er)e(of)j(service)e(c)o(hannels.)p
+112 2413 225 2 v 200 2485 a(Journal)i(mo)q(del)e(is)h
+Fg(IEEE)h(T)l(ransactions)g(on)g(Automatic)d(Con)o(trol.)p
+eop
+%%Page: 2 11
+2 10 bop 1888 -118 a Fn(2)717 452 y(cm)50 b(1)94 b(2)g(3)h(4)f(5)860
+333 y Ff(\016\015)860 266 y(\017)q(\014)1037 333 y(\016\015)1037
+266 y(\017)q(\014)894 299 y(u)153 b(u)p 834 156 299 2
+v 834 250 2 95 v 950 214 a Fn(car)p 1131 250 V 834 252
+299 2 v 794 157 a Fe(H)752 136 y(H)717 119 y(H)-42 b(Y)p
+728 535 2 30 v 740 535 V 752 535 V 764 535 V 775 535
+V 787 535 V 799 535 V 811 535 V 823 535 V 835 535 V 846
+535 V 858 535 V 870 535 V 882 535 V 894 535 V 905 535
+V 917 535 V 929 535 V 941 535 V 953 535 V 964 535 V 976
+535 V 988 535 V 1000 535 V 1012 535 V 1023 535 V 1035
+535 V 1047 535 V 1059 535 V 1071 535 V 1083 535 V 1094
+535 V 1106 535 V 1118 535 V 1130 535 V 1142 535 V 1153
+535 V 1165 535 V 1177 535 V 1189 535 V 1201 535 V 1212
+535 V 1224 535 V 1236 535 V 1248 535 V 1260 535 V 1272
+535 V 1283 535 V 1295 535 V 775 535 2 42 v 894 535 V
+1012 535 V 1130 535 V 1248 535 V 717 537 591 4 v 716
+535 4 60 v 834 535 V 952 535 V 1070 535 V 1188 535 V
+1306 535 V 588 676 a Fn(Fig.)16 b(1.)22 b(A)15 b(sample)g
+Fl(picture)f Fn(en)o(vironmen)o(t.)112 819 y(B.)48 b(Net)o(w)o(ork)15
+b(Applications)112 968 y(The)j(study)g(of)g(a)g(net)o(w)o(ork)g(of)g
+(queues)f(can)h(b)q(e)g(used)g(to)g(pro)o(vide)f(useful)g(information)g
+(for)h(the)112 1067 y(design)23 b(and)f(main)o(tenance)f(of)h(computer)
+f(net)o(w)o(orks,)i(where)e(sev)o(eral)g(computers)g(are)i(com-)112
+1167 y(m)o(unicating)f(with)h(eac)o(h)f(other.)42 b(On)23
+b(the)g(design)g(side,)h(the)f(mo)q(deling)f(of)h(a)h(net)o(w)o(ork)e
+(can)112 1267 y(pro)o(vide)d(statistics)h(suc)o(h)f(the)h(a)o(v)o
+(erage)f(n)o(um)o(b)q(er)f(of)i(pac)o(k)o(ets)f(w)o(aiting)g(to)h(b)q
+(e)g(transmitted)e(at)112 1366 y(eac)o(h)e(computer)f([4].)112
+1541 y(C.)49 b(Solution)16 b(Metho)q(ds)112 1690 y(The)27
+b(most)e(common)f(n)o(umerical)g(solution)i(to)h(the)f(transien)o(t)f
+(queueing)h(mo)q(del)f(is)h(found)112 1790 y(through)20
+b(the)e(use)h(of)f(the)h(Kolmogoro)o(v)f(forw)o(ard)h(equations)f([5].)
+28 b(This)18 b(metho)q(d)g(can)h(handle)112 1889 y(non-stationary)k
+(arriv)m(al)d(and)i(service)d(rates)i(and,)h(for)f(reasonable)g(error)f
+(b)q(ounds,)j(pro)o(vides)112 1989 y(an)e(exact)e(solution.)33
+b(One)19 b(equation)h(is)g(in)o(tegrated)f(to)h(\014nd)h(the)e
+(probabilit)o(y)g(of)h(b)q(eing)h(in)e(a)112 2088 y(particular)d
+(state.)112 2263 y(D.)49 b(Thesis)16 b(Structure)112
+2412 y(Chapter)21 b(I)q(I)g(starts)g(b)o(y)f(reviewing)f(some)h(of)h
+(the)f(fundamen)o(tals)f(in)h(queueing)g(theory)g(up)q(on)112
+2512 y(whic)o(h)f(the)f(appro)o(ximations)g(are)h(based.)29
+b(The)19 b(closure)g(appro)o(ximations)e(are)i(presen)o(ted)f(for)112
+2611 y(the)f(M/M/1)f(queue)g(and)h(compared)e(to)i(rev)o(eal)d
+(di\013erences)i(in)g(structure)g([6].)p eop
+%%Page: 3 12
+3 11 bop 1888 -118 a Fn(3)210 123 y(In)23 b(Chapter)h(I)q(I)q(I)e(the)i
+(M/M/1)f(appro)o(ximations)g(are)g(tested)g(against)h(exact)f(metho)q
+(ds)112 223 y(for)h(b)q(oth)h(stationary)f(and)g(nonstationary)h(arriv)
+m(al)f(patterns.)44 b(The)23 b(stationary)i(cases)e(are)112
+322 y(compared)13 b(against)h(exact)f(results)g(from)g(Can)o(trell)f
+([7,)h(8],)h(while)e(the)h(nonstationary)i(cases)f(will)112
+422 y(b)q(e)k(compared)e(to)i(solutions)g(from)e(Kolmogoro)o(v)h(forw)o
+(ard)h(equations.)25 b(Eac)o(h)18 b(appro)o(ximation)112
+521 y(will)e(b)q(e)g(c)o(haracterized)f(to)h(sho)o(w)h(areas)g(of)g(w)o
+(eakness)f(and)h(strength.)210 621 y(In)g(Chapter)g(IV)f(the)g(metho)q
+(ds)h(pro)o(ving)f(to)h(b)q(e)g(most)f(accurate)h(will)f(b)q(e)h
+(tested)f(in)g(a)i(t)o(w)o(o)112 721 y(no)q(de)i(feed-forw)o(ard)f(net)
+o(w)o(ork,)f(otherwise)g(kno)o(wn)h(as)h(the)e(tandem)g(queue.)27
+b(The)19 b(results)f(are)112 820 y(compared)h(against)i(the)f
+(Kolmogoro)o(v)g(forw)o(ard)g(equation)g(solutions)h(and)f(results)g
+(from)f(the)112 920 y(previous)c(c)o(hapter)f(to)g(see)g(the)g
+(e\013ect)g(of)h(the)f(\014rst)h(no)q(de)g(on)f(the)h(accuracy)f(of)g
+(the)g(second)h(no)q(de)112 1020 y(results.)210 1119
+y(In)20 b(Chapter)h(V)f(\014nal)g(conclusions)h(are)f(dra)o(wn)h(and)g
+(suggestions)g(for)g(further)f(researc)o(h)112 1219 y(topics)d(are)f
+(suggested.)22 b(An)16 b(equation)g(using)h(the)f(equation)g(en)o
+(vironmen)o(t)874 1368 y(lim)871 1397 y Fk(x)p Fd(!)p
+Fj(0)957 1335 y Fn(sin)9 b Fm(x)p 957 1357 96 2 v 992
+1402 a(x)1072 1368 y Fn(=)14 b(1)p Fm(;)650 b Fn(\(1.1\))112
+1518 y(and)17 b(one)g(using)f(the)g(displa)o(ymath)f(en)o(vironmen)o(t)
+803 1590 y Fi(r)p 844 1590 365 2 v 844 1667 a Fn(1)d(+)929
+1607 y Fi(q)p 970 1607 239 2 v 970 1667 a Fn(1)g(+)1055
+1626 y Fc(p)p 1096 1626 113 2 v 1096 1667 a Fn(1)g(+)f
+Fm(x:)112 1817 y Fn(are)16 b(displa)o(y)o(ed)f(here.)20
+b(No)o(w)c(refer)f(to)h(Fig.)f(2)h(for)g(another)g(example)e(of)i(what)
+g(y)o(ou)g(can)f(do)i(with)112 1916 y(the)g(L)209 1910
+y Fh(a)233 1916 y Fn(T)260 1931 y(E)287 1916 y(X)f(picture)f(en)o
+(vironmen)o(t.)p eop
+%%Page: 4 13
+4 12 bop 1888 -118 a Fn(4)p 859 747 307 4 v 859 972 4
+225 v 949 869 a(L)961 863 y Fh(a)985 869 y Fn(T)1012
+884 y(E)1039 869 y(X)p 1162 972 V 859 975 307 4 v 409
+747 V 409 972 4 225 v 447 872 a(User)16 b(Input)p 713
+972 V 409 975 307 4 v 1309 747 382 4 v 1309 972 4 225
+v 652 w(Do)q(cumen)o(t)f(St)o(yle)p 1687 972 V 1309 975
+382 4 v 859 1272 307 4 v 859 1497 4 225 v 967 1396 a(T)994
+1407 y(E)1021 1396 y(X)p 1162 1497 V 859 1500 307 4 v
+784 1797 457 4 v 784 2022 4 225 v 815 1927 a(Prin)o(ted)h(Do)q(cumen)o
+(t)p 1237 2022 V 784 2025 457 4 v 713 863 150 4 v 821
+861 a Fb(-)p 1162 863 V 299 w(\033)p 1011 1274 4 300
+v 1012 1274 a(?)p 1011 1799 V 1012 1799 a(?)747 2369
+y Fn(Fig.)g(2.)21 b(Ov)o(erall)15 b(Structure)p eop
+%%Page: 5 14
+5 13 bop 1888 -118 a Fn(5)863 123 y(CHAPTER)16 b(I)q(I)346
+306 y(CLOSURE)g(APPR)o(O)o(XIMA)l(TIONS)d(IN)j(THE)g(T)l(ANDEM)g(QUEUE)
+112 405 y(The)22 b(purp)q(ose)h(of)f(this)g(c)o(hapter)f(is)h(to)g
+(extend)f(the)h(results)f(from)g(the)g(M/M/1)i(queue)e(to)h(a)112
+505 y(t)o(w)o(o)16 b(queue)e(system)g(consisting)h(of)h(a)f(M/M/1)h
+(queue)f(whose)g(output)h(is)f(directed)f(to)i(a)f(second)112
+604 y(Mark)o(o)o(vian)j(queue.)27 b(This)19 b(small)d(net)o(w)o(ork)i
+(is)g(kno)o(wn)h(as)g(a)g(tandem)e(queue)h(and)g(is)h(depicted)112
+704 y(in)e(Fig.)g(3.)24 b(The)17 b(size)g(of)g(this)g(net)o(w)o(ork)g
+(mak)o(es)e(p)q(ossible)i(a)h(solution)f(b)o(y)g(near-exact)g(metho)q
+(ds)112 804 y(so)i(that)e(the)g(closure)g(metho)q(ds)g(can)h(b)q(e)f
+(ev)m(aluated)h(for)f(the)g(dep)q(endencies)g(of)h(the)f(mean)f(and)112
+903 y(v)m(ariance)h(of)g(the)g(second)g(queue)f(on)i(the)e(state)i(of)f
+(the)f(\014rst)i(queue.)k(Since)16 b(the)h(\014rst)g(queue)f(of)112
+1003 y(the)j(tandem)e(is)h(simply)f(M/M/1,)i(this)f(c)o(hapter)g(will)f
+(concen)o(trate)h(on)h(the)f(results)g(from)g(the)112
+1103 y(second)f(queue.)j(The)c(t)o(w)o(o)g(most)f(accurate)g(closure)h
+(assumptions,)f(Clark)h(and)g(Chang/W)l(ang,)112 1202
+y(will)g(b)q(e)g(compared)f(against)i(the)f(Kolmogoro)o(v)g(solution)h
+([9].)112 1377 y(A.)48 b(The)17 b(Kolmogoro)o(v)e(Solution)112
+1526 y(The)j(state)g(space)g(for)g(the)f(tandem)g(queue)g(is)g(a)h(t)o
+(w)o(o-dimensional)e(lattice)g(of)i(states)h(indexed)112
+1625 y(b)o(y)14 b(the)g(n)o(um)o(b)q(er)e(in)i(eac)o(h)f(queue.)20
+b(F)l(or)14 b(example,)e Fm(P)1074 1632 y Fj(1)p Fk(;)p
+Fj(2)1121 1625 y Fn(\()p Fm(t)p Fn(\))i(is)g(the)g(probabilit)o(y)f
+(that)h(there)g(is)f(one)112 1725 y(in)k(the)f(\014rst)h(queue)f(and)i
+(t)o(w)o(o)e(in)h(the)f(second.)23 b(The)16 b(size)g(of)h(the)g(state)g
+(space)g(dep)q(ends)g(on)g(the)112 1825 y(maxim)o(um)c(n)o(um)o(b)q(er)
+j(in)g(eac)o(h)h(queue.)24 b(If)16 b(eac)o(h)h(queue)g(can)g(hold)h(49)
+g(items,)d(including)h(serv)o(er,)112 1924 y(than)h(the)f(n)o(um)o(b)q
+(er)f(of)h(p)q(ossible)h(states)g(is)f(50)963 1906 y
+Fj(2)999 1924 y Fn(or)h(2500)h([10].)210 2024 y(The)e(Kolmogoro)o(v)g
+(solution)g(for)g(the)g(tandem)f(queue)g(w)o(as)i(obtained)f(using)h(a)
+f(sto)q(c)o(hastic)112 2124 y(balance)e(b)q(et)o(w)o(een)f(v)m(arious)h
+(states)g(of)g(the)g(birth-death)f(pro)q(cess.)21 b(Fig.)13
+b(4)h(sho)o(ws)h(the)e(sto)q(c)o(hastic)112 2223 y(balance)21
+b(used)f(to)h(obtain)g(\(2.4\).)34 b(The)21 b(Kolmogoro)o(v)e(equation)
+i(set)f(for)h(the)f(tandem)f(queue)112 2323 y(w)o(as)e(found)g(to)g(b)q
+(e)301 2439 y Fm(dP)357 2446 y Fj(0)p Fk(;)p Fj(0)p 301
+2461 104 2 v 331 2506 a Fm(dt)451 2472 y Fn(=)42 b Fc(\000)8
+b Fn(\()p Fm(\015)622 2479 y Fj(1)653 2472 y Fn(+)j Fm(\015)727
+2479 y Fj(2)747 2472 y Fn(\))d Fm(P)805 2479 y Fj(0)p
+Fk(;)p Fj(0)864 2472 y Fn(+)j Fm(\026)942 2479 y Fj(2)962
+2472 y Fm(P)993 2479 y Fj(0)p Fk(;)p Fj(1)1812 2472 y
+Fn(\(2.1\))306 2558 y Fm(dP)362 2565 y Fj(0)p Fk(;i)p
+306 2580 99 2 v 334 2626 a Fm(dt)451 2591 y Fn(=)42 b
+Fc(\000)8 b Fn(\()p Fm(\015)622 2598 y Fj(1)653 2591
+y Fn(+)j Fm(\015)727 2598 y Fj(2)758 2591 y Fn(+)g Fm(\026)836
+2598 y Fj(2)856 2591 y Fn(\))d Fm(P)914 2598 y Fj(0)p
+Fk(;i)967 2591 y Fn(+)j Fm(\026)1045 2598 y Fj(2)1065
+2591 y Fm(P)1096 2598 y Fj(0)p Fk(;i)p Fj(+1)p eop
+%%Page: 6 15
+6 14 bop 1888 -118 a Fn(6)p 563 737 79 2 v 563 812 2
+75 v 589 791 a(0)p 639 812 V 563 814 79 2 v 563 662 V
+563 737 2 75 v 589 716 a(0)p 639 737 V 563 739 79 2 v
+563 588 V 563 662 2 75 v 589 641 a(0)p 639 662 V 563
+664 79 2 v 563 513 V 563 588 2 75 v 589 566 a(0)p 639
+588 V 563 590 79 2 v 637 737 V 637 812 2 75 v 664 791
+a(0)p 714 812 V 637 814 79 2 v 637 662 V 637 737 2 75
+v 664 716 a(0)p 714 737 V 637 739 79 2 v 637 588 V 637
+662 2 75 v 664 641 a(0)p 714 662 V 637 664 79 2 v 637
+513 V 637 588 2 75 v 664 566 a(0)p 714 588 V 637 590
+79 2 v 712 737 V 712 812 2 75 v 739 791 a(1)p 788 812
+V 712 814 79 2 v 712 662 V 712 737 2 75 v 739 716 a(1)p
+788 737 V 712 739 79 2 v 712 588 V 712 662 2 75 v 739
+641 a(1)p 788 662 V 712 664 79 2 v 787 737 V 787 812
+2 75 v 814 791 a(1)p 863 812 V 787 814 79 2 v 787 662
+V 787 737 2 75 v 814 716 a(1)p 863 737 V 787 739 79 2
+v 787 588 V 787 662 2 75 v 814 641 a(1)p 863 662 V 787
+664 79 2 v 787 513 V 787 588 2 75 v 814 566 a(1)p 863
+588 V 787 590 79 2 v 712 513 V 712 588 2 75 v -99 w(0)p
+788 588 V 712 590 79 2 v 1235 737 V 1235 812 2 75 v 1262
+791 a(0)p 1311 812 V 1235 814 79 2 v 1310 737 V 1310
+812 2 75 v 51 w(0)p 1386 812 V 1310 814 79 2 v 1384 737
+V 1384 812 2 75 v 50 w(0)p 1461 812 V 1384 814 79 2 v
+1459 737 V 1459 812 2 75 v 51 w(0)p 1536 812 V 1459 814
+79 2 v 1235 662 V 1235 737 2 75 v 1262 716 a(0)p 1311
+737 V 1235 739 79 2 v 1310 662 V 1310 737 2 75 v 51 w(0)p
+1386 737 V 1310 739 79 2 v 1384 662 V 1384 737 2 75 v
+50 w(0)p 1461 737 V 1384 739 79 2 v 1459 662 V 1459 737
+2 75 v 51 w(0)p 1536 737 V 1459 739 79 2 v 1235 588 V
+1235 662 2 75 v 1262 641 a(0)p 1311 662 V 1235 664 79
+2 v 1310 588 V 1310 662 2 75 v 51 w(0)p 1386 662 V 1310
+664 79 2 v 1384 588 V 1384 662 2 75 v 50 w(1)p 1461 662
+V 1384 664 79 2 v 1459 588 V 1459 662 2 75 v 51 w(1)p
+1536 662 V 1459 664 79 2 v 1235 513 V 1235 588 2 75 v
+1262 566 a(0)p 1311 588 V 1235 590 79 2 v 1310 513 V
+1310 588 2 75 v 51 w(0)p 1386 588 V 1310 590 79 2 v 1384
+513 V 1384 588 2 75 v 50 w(0)p 1461 588 V 1384 590 79
+2 v 1459 513 V 1459 588 2 75 v 51 w(1)p 1536 588 V 1459
+590 79 2 v 721 670 a Ff(\013)p 721 701 2 7 v 83 w(\010)p
+854 701 V 747 670 84 2 v 721 782 2 7 v 721 807 a(\012)p
+854 782 V 83 w(\011)p 747 807 84 2 v 721 775 2 75 v 854
+775 V 721 596 a(\013)p 721 632 2 13 v 721 658 a(\012)854
+596 y(\010)p 854 632 V 854 658 a(\011)p 747 658 84 2
+v 747 596 V 1393 596 a(\013)p 1393 632 2 13 v 1393 658
+a(\012)1526 596 y(\010)p 1526 632 V 1526 658 a(\011)p
+1419 658 84 2 v 1419 596 V 794 523 a(\013)p 794 630 2
+84 v 794 656 a(\012)856 523 y(\010)p 856 630 V 856 656
+a(\011)p 819 656 13 2 v 819 523 V 1466 523 a(\013)p 1466
+630 2 84 v 1466 656 a(\012)1528 523 y(\010)p 1528 630
+V 1528 656 a(\011)p 1492 656 13 2 v 1492 523 V 494 796
+a Fn(10)624 b(10)494 721 y(11)g(11)494 647 y(01)g(01)494
+572 y(00)g(00)577 485 y(00)g(00)-646 b(01)625 b(01)-646
+b(11)625 b(11)-646 b(10)624 b(10)523 514 y Fb(@)481 472
+y(@)448 439 y(@)1195 514 y(@)1154 472 y(@)1120 439 y(@)489
+431 y Fn(CD)601 b(CD)411 481 y(AB)f(AB)621 1141 y(Fig.)16
+b(3.)21 b(The)c(t)o(w)o(o)f(no)q(de)h(tandem)e(queue.)p
+694 1754 256 4 v 694 2086 4 333 v 803 1789 a(&)p 946
+2086 V 694 2089 256 4 v 606 2005 92 2 v 548 1839 150
+2 v 548 1818 a Fm(x)p 605 2171 2 167 v 606 2172 125 2
+v 751 2187 a(c)p 946 1922 158 2 v 1101 1712 256 4 v 1101
+2128 4 416 v 1353 2128 V 1101 2131 256 4 v 1125 1942
+a Fn(D)p 1353 1839 75 2 v 1353 2005 V 1394 1945 39 2
+v 1394 1984 a Fm(Q)1394 1818 y(Q)p 647 2255 3 4 v 647
+1633 V 1475 2255 V 1475 1633 V 653 2255 5 4 v 662 2255
+V 670 2255 V 678 2255 V 687 2255 V 695 2255 V 703 2255
+V 712 2255 V 720 2255 V 728 2255 V 736 2255 V 745 2255
+V 753 2255 V 761 2255 V 770 2255 V 778 2255 V 786 2255
+V 795 2255 V 803 2255 V 811 2255 V 819 2255 V 828 2255
+V 836 2255 V 844 2255 V 853 2255 V 861 2255 V 869 2255
+V 878 2255 V 886 2255 V 894 2255 V 902 2255 V 911 2255
+V 919 2255 V 927 2255 V 936 2255 V 944 2255 V 952 2255
+V 961 2255 V 969 2255 V 977 2255 V 986 2255 V 994 2255
+V 1002 2255 V 1010 2255 V 1019 2255 V 1027 2255 V 1035
+2255 V 1044 2255 V 1052 2255 V 1060 2255 V 1069 2255
+V 1077 2255 V 1085 2255 V 1093 2255 V 1102 2255 V 1110
+2255 V 1118 2255 V 1127 2255 V 1135 2255 V 1143 2255
+V 1152 2255 V 1160 2255 V 1168 2255 V 1176 2255 V 1185
+2255 V 1193 2255 V 1201 2255 V 1210 2255 V 1218 2255
+V 1226 2255 V 1235 2255 V 1243 2255 V 1251 2255 V 1259
+2255 V 1268 2255 V 1276 2255 V 1284 2255 V 1293 2255
+V 1301 2255 V 1309 2255 V 1318 2255 V 1326 2255 V 1334
+2255 V 1343 2255 V 1351 2255 V 1359 2255 V 1367 2255
+V 1376 2255 V 1384 2255 V 1392 2255 V 1401 2255 V 1409
+2255 V 1417 2255 V 1426 2255 V 1434 2255 V 1442 2255
+V 1450 2255 V 1459 2255 V 1467 2255 V 653 1633 V 662
+1633 V 670 1633 V 678 1633 V 687 1633 V 695 1633 V 703
+1633 V 712 1633 V 720 1633 V 728 1633 V 736 1633 V 745
+1633 V 753 1633 V 761 1633 V 770 1633 V 778 1633 V 786
+1633 V 795 1633 V 803 1633 V 811 1633 V 819 1633 V 828
+1633 V 836 1633 V 844 1633 V 853 1633 V 861 1633 V 869
+1633 V 878 1633 V 886 1633 V 894 1633 V 902 1633 V 911
+1633 V 919 1633 V 927 1633 V 936 1633 V 944 1633 V 952
+1633 V 961 1633 V 969 1633 V 977 1633 V 986 1633 V 994
+1633 V 1002 1633 V 1010 1633 V 1019 1633 V 1027 1633
+V 1035 1633 V 1044 1633 V 1052 1633 V 1060 1633 V 1069
+1633 V 1077 1633 V 1085 1633 V 1093 1633 V 1102 1633
+V 1110 1633 V 1118 1633 V 1127 1633 V 1135 1633 V 1143
+1633 V 1152 1633 V 1160 1633 V 1168 1633 V 1176 1633
+V 1185 1633 V 1193 1633 V 1201 1633 V 1210 1633 V 1218
+1633 V 1226 1633 V 1235 1633 V 1243 1633 V 1251 1633
+V 1259 1633 V 1268 1633 V 1276 1633 V 1284 1633 V 1293
+1633 V 1301 1633 V 1309 1633 V 1318 1633 V 1326 1633
+V 1334 1633 V 1343 1633 V 1351 1633 V 1359 1633 V 1367
+1633 V 1376 1633 V 1384 1633 V 1392 1633 V 1401 1633
+V 1409 1633 V 1417 1633 V 1426 1633 V 1434 1633 V 1442
+1633 V 1450 1633 V 1459 1633 V 1467 1633 V 646 2254 4
+3 v 1476 2254 V 646 1633 V 1476 1633 V 646 1641 4 5 v
+646 1650 V 646 1658 V 646 1666 V 646 1675 V 646 1683
+V 646 1691 V 646 1700 V 646 1708 V 646 1716 V 646 1724
+V 646 1733 V 646 1741 V 646 1749 V 646 1758 V 646 1766
+V 646 1774 V 646 1783 V 646 1791 V 646 1799 V 646 1807
+V 646 1816 V 646 1824 V 646 1832 V 646 1841 V 646 1849
+V 646 1857 V 646 1866 V 646 1874 V 646 1882 V 646 1890
+V 646 1899 V 646 1907 V 646 1915 V 646 1924 V 646 1932
+V 646 1940 V 646 1949 V 646 1957 V 646 1965 V 646 1974
+V 646 1982 V 646 1990 V 646 1998 V 646 2007 V 646 2015
+V 646 2023 V 646 2032 V 646 2040 V 646 2048 V 646 2057
+V 646 2065 V 646 2073 V 646 2081 V 646 2090 V 646 2098
+V 646 2106 V 646 2115 V 646 2123 V 646 2131 V 646 2140
+V 646 2148 V 646 2156 V 646 2164 V 646 2173 V 646 2181
+V 646 2189 V 646 2198 V 646 2206 V 646 2214 V 646 2223
+V 646 2231 V 646 2239 V 646 2247 V 1476 1641 V 1476 1650
+V 1476 1658 V 1476 1666 V 1476 1675 V 1476 1683 V 1476
+1691 V 1476 1700 V 1476 1708 V 1476 1716 V 1476 1724
+V 1476 1733 V 1476 1741 V 1476 1749 V 1476 1758 V 1476
+1766 V 1476 1774 V 1476 1783 V 1476 1791 V 1476 1799
+V 1476 1807 V 1476 1816 V 1476 1824 V 1476 1832 V 1476
+1841 V 1476 1849 V 1476 1857 V 1476 1866 V 1476 1874
+V 1476 1882 V 1476 1890 V 1476 1899 V 1476 1907 V 1476
+1915 V 1476 1924 V 1476 1932 V 1476 1940 V 1476 1949
+V 1476 1957 V 1476 1965 V 1476 1974 V 1476 1982 V 1476
+1990 V 1476 1998 V 1476 2007 V 1476 2015 V 1476 2023
+V 1476 2032 V 1476 2040 V 1476 2048 V 1476 2057 V 1476
+2065 V 1476 2073 V 1476 2081 V 1476 2090 V 1476 2098
+V 1476 2106 V 1476 2115 V 1476 2123 V 1476 2131 V 1476
+2140 V 1476 2148 V 1476 2156 V 1476 2164 V 1476 2173
+V 1476 2181 V 1476 2189 V 1476 2198 V 1476 2206 V 1476
+2214 V 1476 2223 V 1476 2231 V 1476 2239 V 1476 2247
+V 344 2436 a Fn(Fig.)h(4.)21 b(Sto)q(c)o(hastic)c(balance)f(for)g
+(tandem)f(queue)h(without)g(feedbac)o(k.)p eop
+%%Page: 7 16
+7 15 bop 1888 -118 a Fn(7)542 123 y(+)108 b Fm(\015)713
+130 y Fj(2)733 123 y Fm(P)764 130 y Fj(0)p Fk(;i)p Fd(\000)p
+Fj(1)862 123 y Fn(+)11 b Fm(\026)940 130 y Fj(1)961 123
+y Fm(P)992 130 y Fj(1)p Fk(;i)p Fd(\000)p Fj(1)1474 123
+y Fm(i)i Fn(=)h(1)p Fm(;)8 b Fn(2)p Fm(;)g Fn(3)p Fm(:::)98
+b Fn(\(2.2\))304 201 y Fm(dP)360 208 y Fk(j;)p Fj(0)p
+304 223 101 2 v 333 269 a Fm(dt)451 235 y Fn(=)42 b Fc(\000)8
+b Fn(\()p Fm(\015)622 242 y Fj(1)653 235 y Fn(+)j Fm(\015)727
+242 y Fj(2)758 235 y Fn(+)g Fm(\026)836 242 y Fj(1)856
+235 y Fn(\))d Fm(P)914 242 y Fk(j;)p Fj(0)969 235 y Fn(+)j
+Fm(\015)1043 242 y Fj(1)1063 235 y Fm(P)1094 242 y Fk(j)r
+Fd(\000)p Fj(1)p Fk(;)p Fj(0)1197 235 y Fn(+)g Fm(\026)1275
+242 y Fj(2)1295 235 y Fm(P)1326 242 y Fk(j;)p Fj(1)1468
+235 y Fm(j)16 b Fn(=)e(1)p Fm(;)8 b Fn(2)p Fm(;)g Fn(3)p
+Fm(:::)98 b Fn(\(2.3\))310 320 y Fm(dP)366 327 y Fk(j;i)p
+310 342 95 2 v 336 388 a Fm(dt)451 354 y Fn(=)42 b Fc(\000)8
+b Fn(\()p Fm(\015)622 361 y Fj(1)653 354 y Fn(+)j Fm(\015)727
+361 y Fj(2)758 354 y Fn(+)g Fm(\026)836 361 y Fj(1)867
+354 y Fn(+)g Fm(\026)945 361 y Fj(2)965 354 y Fn(\))d
+Fm(P)1023 361 y Fk(j;i)1073 354 y Fn(+)j Fm(\015)1147
+361 y Fj(1)1167 354 y Fm(P)1198 361 y Fk(j)r Fd(\000)p
+Fj(1)p Fk(;i)1295 354 y Fn(+)g Fm(\026)1373 361 y Fj(2)1393
+354 y Fm(P)1424 361 y Fk(j;i)p Fj(+1)542 466 y Fn(+)108
+b Fm(\015)713 473 y Fj(2)733 466 y Fm(P)764 473 y Fk(j;i)p
+Fd(\000)p Fj(1)859 466 y Fn(+)11 b Fm(\026)937 473 y
+Fj(1)957 466 y Fm(P)988 473 y Fk(j)r Fj(+1)p Fk(;i)p
+Fd(\000)p Fj(1)1447 466 y Fm(j;)d(i)14 b Fn(=)g(1)p Fm(;)8
+b Fn(2)p Fm(;)g Fn(3)p Fm(:::)82 b Fn(\(2.4\))210 616
+y(The)18 b(mean)f(and)i(v)m(ariance)f(statistics)g(for)g(the)g(second)g
+(queue)f(are)i(obtained)f(b)o(y)g(the)f(fol-)112 715
+y(lo)o(wing)g(equations:)816 815 y Fm(M)863 822 y Fj(2)897
+815 y Fn(=)961 761 y Fd(1)949 773 y Fi(X)950 864 y Fk(i)p
+Fj(=1)1017 815 y Fm(i)11 b Fc(\001)1083 761 y Fd(1)1070
+773 y Fi(X)1070 864 y Fk(j)r Fj(=0)1139 815 y Fm(P)1170
+822 y Fk(j;i)129 941 y Fn(and)742 1041 y Fm(V)770 1048
+y Fj(2)804 1041 y Fn(=)869 987 y Fd(1)856 1000 y Fi(X)858
+1091 y Fk(i)p Fj(=1)925 1041 y Fm(i)942 1021 y Fj(2)972
+1041 y Fc(\001)1010 987 y Fd(1)998 1000 y Fi(X)997 1091
+y Fk(j)r Fj(=0)1066 1041 y Fm(P)1097 1048 y Fk(j;i)1147
+1041 y Fc(\000)g Fm(M)1249 1021 y Fj(2)1244 1053 y(2)1269
+1041 y Fm(:)112 1168 y Fn(Calculation)20 b(of)g(the)g(mean)f(and)h(v)m
+(ariance)g(requires)e(the)i(truncation)g(of)g(the)g(M/M/1)p
+Fm(=)p Fc(1)g Fn(to)112 1267 y(some)c(maxim)o(um)d(n)o(um)o(b)q(er)i
+(of)i(states.)24 b(Stated)17 b(di\013eren)o(tly)l(,)e(the)i(M/M/1/)p
+Fc(1)h Fn(queue)e(mo)q(del)g(is)112 1367 y(appro)o(ximated)f(b)o(y)g
+(an)i(M/M/1/k)g(queue.)j(While)15 b(it)g(is)h(imp)q(ossible)e(to)j(ev)m
+(aluate)e(the)h(error)g(in)112 1467 y(this)d(appro)o(ximation,)f(an)h
+(indication)f(of)h(the)f(truncation)h(error)f(can)h(b)q(e)g(obtained)g
+(b)o(y)f(summing)112 1566 y(all)h(the)f(probabilit)o(y)g(states)h(up)f
+(to)h(state)g Fm(k)i Fn(and)e(subtracting)g(this)f(total)h(from)f(one.)
+20 b(This)13 b(yields)112 1666 y(the)k(probabilit)o(y)e(of)i(b)q(eing)g
+(in)f(a)h(state)g(greater)f(than)h Fm(k)r Fn(.)22 b(If)16
+b(this)h(v)m(alue)f(is)g(v)o(ery)g(small)e(then)j(its)112
+1765 y(pro)q(duct)g(with)g Fm(i)e Fn(and)i Fm(i)551 1747
+y Fj(2)587 1765 y Fn(will)e(also)i(b)q(e)f(small.)210
+1865 y(It)21 b(is)f(easy)i(to)f(see)g(ho)o(w)g(large)g(and)h
+(complicated)c(the)j(Kolmogoro)o(v)f(equation)h(set)g(can)112
+1965 y(b)q(ecome)e(for)h(just)h(a)f(small)f(net)o(w)o(ork,)h(and)g(the)
+g(usefulness)g(of)g(an)h(accurate,)f(state-reducing)112
+2064 y(appro)o(ximation)c([11].)112 2239 y(B.)48 b(Appro)o(ximations)15
+b(for)h(the)g(T)l(andem)g(Queue)626 2388 y(1.)49 b(Indep)q(enden)o(t)15
+b(Queue)h(Assumption)112 2520 y(Jac)o(kson)f([12)q(])f(sho)o(w)o(ed)h
+(that)g(a)g(net)o(w)o(ork)f(of)h(queues)f(can)h(b)q(e)f(analyzed)h(as)g
+(a)g(group)h(of)f(indep)q(en-)112 2619 y(den)o(t)21 b(M/M/1)g(queues)g
+(when)g(the)g(net)o(w)o(ork)f(is)h(op)q(erating)g(under)g(steady-state)
+h(conditions.)p eop
+%%Page: 8 17
+8 16 bop 1888 -118 a Fn(8)112 123 y(One)17 b(metho)q(d)f(to)h(appro)o
+(ximate)e(the)h(tandem)g(queue)f(state)i(space)g(is)f(to)h(assume)f
+(that)h(the)g(in-)112 223 y(dep)q(endence)c(holds)h(under)f(transien)o
+(t)h(conditions)f(as)h(w)o(ell.)19 b(By)13 b(assuming)g(the)g(t)o(w)o
+(o)g(queues)g(are)112 322 y(indep)q(enden)o(t,)19 b(the)g(join)o(t)g
+(probabilit)o(y)f Fm(P)893 329 y Fk(j;i)951 322 y Fn(simply)f(b)q
+(ecomes)h(the)h(pro)q(duct)h(of)g(the)f(marginal)112
+422 y(probabilities,)h Fm(P)441 429 y Fk(j)480 422 y
+Fn(and)h Fm(P)610 429 y Fk(i)625 422 y Fn(.)33 b(Th)o(us,)21
+b(the)f(n)o(um)o(b)q(er)e(of)j(states)g(needed)e(to)i(mo)q(del)e(the)h
+(tandem)112 521 y(M/M/1/50)e(queue)e(b)o(y)g(the)g(Kolmogoro)o(v)f
+(equations)i(decreases)f(from)f(2500)j(to)e(100.)210
+621 y(Since)k(the)h(primary)f(motiv)m(ation)g(b)q(ehind)h(the)g(appro)o
+(ximation)f(metho)q(ds)h(is)g(to)g(obtain)112 721 y(accurate)f(mean)e
+(and)h(v)m(ariance)g(statistics)g(for)h(the)f(queues,)g(it)g(is)g(of)g
+(in)o(terest)f(to)i(in)o(v)o(estigate)112 820 y(errors)g(induced)e(b)o
+(y)g(assuming)h(the)f(queues)g(to)i(b)q(e)f(indep)q(enden)o(t.)28
+b(The)19 b(mean)e(and)j(v)m(ariance)112 920 y(statistics)d(for)f(the)g
+(\014rst)h(and)f(second)h(queues)f(are)g(de\014ned)g(as)746
+1169 y Fm(M)793 1176 y Fj(1)855 1169 y Fn(=)947 1115
+y Fd(1)935 1128 y Fi(X)934 1219 y Fk(j)r Fj(=1)1004 1169
+y Fm(j)e Fc(\001)d Fm(P)1094 1176 y Fk(j)765 1318 y Fm(V)793
+1325 y Fj(1)855 1318 y Fn(=)947 1264 y Fd(1)935 1277
+y Fi(X)934 1368 y Fk(j)r Fj(=1)1004 1318 y Fm(j)1027
+1298 y Fj(2)1058 1318 y Fc(\001)f Fm(P)1113 1325 y Fk(j)1143
+1318 y Fc(\000)h Fm(M)1245 1298 y Fj(2)1240 1331 y(1)1265
+1318 y Fm(;)112 1468 y Fn(and)752 1617 y Fm(M)799 1624
+y Fj(2)861 1617 y Fn(=)952 1563 y Fd(1)940 1576 y Fi(X)942
+1667 y Fk(i)p Fj(=1)1008 1617 y Fm(i)g Fc(\001)g Fm(P)1092
+1624 y Fk(i)1812 1617 y Fn(\(2.5\))771 1760 y Fm(V)799
+1767 y Fj(2)861 1760 y Fn(=)952 1706 y Fd(1)940 1718
+y Fi(X)942 1810 y Fk(i)p Fj(=1)1008 1760 y Fm(i)1025
+1739 y Fj(2)1056 1760 y Fc(\001)g Fm(P)1112 1767 y Fk(i)1137
+1760 y Fc(\000)g Fm(M)1239 1739 y Fj(2)1234 1772 y(2)1259
+1760 y Fm(:)539 b Fn(\(2.6\))210 1909 y(The)14 b(accuracy)f(of)h
+Fm(P)591 1916 y Fk(j)624 1909 y Fn(for)g Fm(j)j(>)c Fn(0)i(will)d
+(determine)f(the)j(e\013ectiv)o(eness)e(of)i(the)g(indep)q(endence)112
+2009 y(assumption.)21 b(By)16 b(de\014nition,)f Fm(P)727
+2016 y Fk(j)760 2009 y Fn(=)812 1976 y Fi(P)855 1989
+y Fd(1)855 2021 y Fk(i)p Fj(=0)923 2009 y Fm(P)954 2016
+y Fk(j;i)992 2009 y Fn(.)22 b(By)15 b(summing)f(\(2.3\))j(and)f
+(\(2.4\),)h(w)o(e)e(obtain)392 2125 y Fm(dP)448 2132
+y Fk(j)p 392 2147 76 2 v 408 2193 a Fm(dt)514 2158 y
+Fn(=)41 b Fc(\000)8 b Fn(\()p Fm(\015)684 2165 y Fj(1)715
+2158 y Fn(+)j Fm(\015)789 2165 y Fj(2)820 2158 y Fn(+)g
+Fm(\026)898 2165 y Fj(1)918 2158 y Fn(\))958 2104 y Fd(1)946
+2117 y Fi(X)947 2208 y Fk(i)p Fj(=0)1014 2158 y Fm(P)1045
+2165 y Fk(j;i)1095 2158 y Fc(\000)f Fm(\026)1173 2165
+y Fj(2)1214 2104 y Fd(1)1202 2117 y Fi(X)1203 2208 y
+Fk(i)p Fj(=1)1270 2158 y Fm(P)1301 2165 y Fk(j;i)1351
+2158 y Fn(+)h Fm(\015)1425 2165 y Fj(1)1465 2104 y Fd(1)1453
+2117 y Fi(X)1454 2208 y Fk(i)p Fj(=0)1521 2158 y Fm(P)1552
+2165 y Fk(j)r Fd(\000)p Fj(1)p Fk(;i)604 2301 y Fn(+)g
+Fm(\026)682 2308 y Fj(1)723 2247 y Fd(1)711 2260 y Fi(X)712
+2351 y Fk(i)p Fj(=1)779 2301 y Fm(P)810 2308 y Fk(j)r
+Fj(+1)p Fk(;i)p Fd(\000)p Fj(1)952 2301 y Fn(+)g Fm(\026)1030
+2308 y Fj(2)1070 2247 y Fd(1)1058 2260 y Fi(X)1059 2351
+y Fk(i)p Fj(=0)1126 2301 y Fm(P)1157 2308 y Fk(j;i)p
+Fj(+1)1241 2301 y Fm(:)112 2451 y Fn(By)16 b(gathering)h(similar)d
+(terms)h(and)i(summing,)c(the)j(ab)q(o)o(v)o(e)g(equation)g
+(simpli\014es)e(to)243 2566 y Fm(dP)299 2573 y Fk(j)p
+243 2589 V 259 2634 a Fm(dt)364 2600 y Fn(=)42 b Fc(\000)8
+b Fn(\()p Fm(\015)535 2607 y Fj(1)566 2600 y Fn(+)j Fm(\026)644
+2607 y Fj(1)664 2600 y Fn(\))d Fm(P)722 2607 y Fk(j)752
+2600 y Fn(+)j Fm(\015)826 2607 y Fj(1)846 2600 y Fm(P)877
+2607 y Fk(j)r Fd(\000)p Fj(1)952 2600 y Fn(+)g Fm(\026)1030
+2607 y Fj(1)1050 2600 y Fm(P)1081 2607 y Fk(j)r Fj(+1)1144
+2600 y Fm(;)383 b(j)17 b Fn(=)d(1)p Fm(;)8 b Fn(2)p Fm(;)g
+Fn(3)p Fm(:::)p eop
+%%Page: 9 18
+9 17 bop 1888 -118 a Fn(9)112 123 y(whic)o(h)13 b(is)f(iden)o(tical)f
+(to)i(\(2.4\))g(dev)o(elop)q(ed)f(for)h(the)f(single)h(M/M/1)g(queue.)
+19 b(This)13 b(is)g(true)f(b)q(ecause)112 223 y(the)k(addition)f(of)h
+(the)f(second)g(queue)g(do)q(es)h(not)f(e\013ect)g(the)g(\014rst)h(in)f
+(an)o(y)g(manner.)20 b(If,)14 b(ho)o(w)o(ev)o(er,)112
+322 y(there)f(w)o(as)i(feedbac)o(k)d(from)h(the)g(second)h(queue)f(to)h
+(the)f(\014rst)h(then)f(this)h(result)f(w)o(ould)g(no)h(longer)112
+422 y(hold.)210 521 y(The)e(equation)g(for)h Fm(dP)628
+528 y Fk(i)642 521 y Fm(=dt)g Fn(for)f(the)g(second)g(queue)g(will)f
+(no)o(w)h(b)q(e)h(deriv)o(ed)d(to)j(sho)o(w)f(ho)o(w)h(the)112
+621 y(join)o(t)g(probabilit)o(y)e(state)i(m)o(ust)e(b)q(e)h(decoupled)g
+(to)h(obtain)g(the)f(indep)q(enden)o(t)g(queue)f(probabilit)o(y)112
+721 y(equations.)461 890 y(2.)49 b(Closure)17 b(Appro)o(ximations)d
+(for)j(the)f(T)l(andem)f(Queue)112 1022 y(The)i(appro)o(ximations)f(b)o
+(y)g(Clark)g(and)i(Chang/W)l(ang)h(w)o(ere)d(sho)o(wn)h(in)f(the)h
+(previous)f(c)o(hapter)112 1121 y(to)21 b(b)q(e)e(most)g(accurate)h
+(for)g(the)g(M/M/1)g(queue.)31 b(In)19 b(this)h(section,)g(w)o(e)f
+(will)f(in)o(v)o(estigate)h(the)112 1221 y(extension)e(of)g(these)f
+(appro)o(ximations)g(for)i(the)e(tandem)g(queue.)22 b(The)17
+b(resulting)f(equation)h(for)112 1321 y Fm(dM)184 1328
+y Fj(2)205 1321 y Fm(=dt)f Fn(is)577 1387 y Fm(dM)649
+1394 y Fj(2)p 577 1409 93 2 v 601 1454 a Fm(dt)688 1420
+y Fn(=)e Fm(\015)765 1427 y Fj(2)796 1420 y Fn(+)d Fm(\026)874
+1427 y Fj(1)902 1420 y Fn(\(1)g Fc(\000)g Fm(P)c Fn(0)1068
+1427 y Fj(1)1089 1420 y Fn(\))k Fc(\000)f Fm(\026)1197
+1427 y Fj(2)1226 1420 y Fn(\(1)h Fc(\000)g Fm(P)c Fn(0)1392
+1427 y Fj(2)1412 1420 y Fn(\))i Fm(:)358 b Fn(\(2.7\))210
+1547 y(T)l(o)17 b(deriv)o(e)d Fm(dV)478 1554 y Fj(2)499
+1547 y Fm(=dt)p Fn(,)i(w)o(e)g(di\013eren)o(tiate)f(\(2.6\))h(to)h
+(obtain)680 1663 y Fm(dV)733 1670 y Fj(2)p 680 1685 74
+2 v 696 1731 a Fm(dt)773 1696 y Fn(=)837 1642 y Fd(1)824
+1655 y Fi(X)826 1746 y Fk(i)p Fj(=1)893 1696 y Fm(i)910
+1676 y Fj(2)940 1696 y Fc(\001)970 1663 y Fm(dP)1026
+1670 y Fk(i)p 970 1685 71 2 v 984 1731 a Fm(dt)1057 1696
+y Fc(\000)11 b Fn(2)p Fm(M)1178 1703 y Fj(2)1209 1696
+y Fc(\001)1239 1663 y Fm(dM)1311 1670 y Fj(2)p 1239 1685
+93 2 v 1264 1731 a Fm(dt)1336 1696 y(:)462 b Fn(\(2.8\))112
+1871 y(C.)49 b(Implem)o(en)o(tation)13 b(and)k(Results)112
+2020 y(Clearly)l(,)c(there)g(are)h(t)o(w)o(o)g(issues)f(concerning)h
+(the)f(accuracy)g(of)h(the)g(closure)f(appro)o(ximations)g(in)112
+2120 y(a)k(tandem)f(queue.)21 b(The)16 b(\014rst)h(is)f(the)h(accuracy)
+f(of)h(the)f(assumption)g(of)h(indep)q(enden)o(t)e(queues.)112
+2219 y(When)e(is)g(the)f(assumption)g(that)h Fm(P)7 b
+Fn(0)795 2226 y Fj(2)828 2219 y Fn(is)13 b(indep)q(enden)o(t)f(on)h
+(the)f(state)h(of)g(the)g(\014rst)g(queue)e(a)j(go)q(o)q(d)112
+2319 y(one?)22 b(Also,)14 b(what)h(error)f(results)g(from)f(the)h
+(appro)o(ximation)f(for)i Fm(V)1361 2326 y Fj(2)1381
+2319 y Fn(\()p Fm(t)p Fn(\))f(via)g(\(2.8\)?)21 b(The)14
+b(second)112 2419 y(concern)f(is)f(ho)o(w)i(w)o(ell)d(the)i(closure)f
+(appro)o(ximations)g(mo)q(del)f(the)i(indep)q(enden)o(t)f(tandem)g
+(queue.)112 2518 y(Since)f(the)h(indep)q(endence)e(assumption)i(mak)o
+(es)e(the)h(tandem)g(queue)g(a)h(net)o(w)o(ork)f(of)h(t)o(w)o(o)g
+(M/M/1)112 2618 y(queues,)i(the)g(second)h(issue)f(w)o(as)h(largely)e
+(answ)o(ered)i(in)f(the)g(previous)g(c)o(hapter.)20 b(Therefore)14
+b(this)p eop
+%%Page: 10 19
+10 18 bop 1864 -118 a Fn(10)112 123 y(c)o(hapter)16 b(will)f(b)q(e)i
+(dedicated)e(to)h(in)o(v)o(estigating)g(the)f(p)q(erformance)h(of)g
+(the)g(indep)q(enden)o(t)f(queue)112 223 y(assumption)h([13)q(].)800
+392 y(1.)49 b(T)l(est)16 b(Conditions)112 524 y(Three)f(appro)o
+(ximations)f(w)o(ere)h(compared)f(against)i(the)e(truncated)h
+(Kolmogoro)o(v)g(solution)g(for)112 623 y(the)21 b(tandem)e(queue:)29
+b(the)21 b(indep)q(enden)o(t)e(Kolmogoro)o(v)h(solution,)i(Chang/W)l
+(ang's)g(appro)o(xi-)112 723 y(mation,)15 b(and)h(Clark's)g(appro)o
+(ximation.)k(The)c(test)f(cases)i(w)o(ere)e(the)g(same)g(as)h(those)h
+(discussed)112 823 y(in)h(Chapter)g(I,)g(except)e(that)j(cases)f(with)f
+Fm(\032)h Fn(close)g(to)g(or)g(greater)g(than)h(one)f(could)f(not)i(b)q
+(e)f(in-)112 922 y(cluded.)26 b(This)18 b(is)g(b)q(ecause)g(the)g
+(truncated)g(Kolmogoro)o(v)f(equation)h(set)g(mo)q(dels)f(the)h(tandem)
+112 1022 y(queue)e(as)h(t)o(w)o(o)e(dep)q(enden)o(t)h(M/M/1/k)h
+(queues,)e(requiring)g(the)h(in)o(tegration)g(of)g Fm(k)1661
+1004 y Fj(2)1697 1022 y Fn(equations.)112 1121 y(If)g
+Fm(\032)f Fn(b)q(ecomes)g(to)q(o)h(large)g(then)f(the)h(probabilit)o(y)
+e(of)i(b)q(eing)g(in)f(a)h(state)g(with)f(greater)h(than)g
+Fm(k)i Fn(in)112 1221 y(a)e(queue)f(can)h(no)g(longer)f(b)q(e)h
+(neglected,)e(resulting)h(in)g(mean)f(and)j(v)m(ariance)e
+(inaccuracies.)20 b(W)l(e)112 1321 y(used)d Fm(k)f Fn(=)e(50)j(whic)o
+(h)e(limited)e Fm(\032)h Fc(\024)g Fn(0)p Fm(:)p Fn(8.)891
+1490 y(2.)49 b(Results)112 1622 y(The)22 b(appro)o(ximations)f(all)f(p)
+q(erformed)h(w)o(ell)f(for)h(most)g(of)h(the)f(conditions)h(presen)o
+(ted.)35 b(The)112 1721 y(most)15 b(accurate)f(of)i(the)e(three)g(w)o
+(as)i(the)e(Kolmogoro)o(v)h(indep)q(enden)o(t)f(solution)h(b)o(y)f(a)h
+(v)o(ery)f(small)112 1821 y(margin)22 b(o)o(v)o(er)f(Clark.)39
+b(Chang/W)l(ang's)24 b(metho)q(d)d(also)i(w)o(as)g(accurate,)g(but)f
+(it)f(encoun)o(tered)112 1921 y(di\016cult)o(y)13 b(with)i(the)f(high)h
+Fm(M)660 1928 y Fj(0)680 1921 y Fn(,)g(lo)o(w)f(utilization)g(cases.)21
+b(See)14 b(T)l(able)h(I)f(for)h(the)g(full)f(comparison.)112
+2020 y(The)f(comparable)e(p)q(erformance)g(of)i(the)f(appro)o
+(ximations)g(is)g(sho)o(wn)h(in)f(Fig.)g(5.)20 b(The)12
+b(App)q(endix)112 2120 y(also)17 b(con)o(tains)g(plots)f(for)h(the)f(w)
+o(orst)g(case)h(p)q(ercen)o(t)e(error)h(and)h(the)f(mean-square)g
+(error.)210 2220 y(As)j(can)g(b)q(e)g(seen)g(from)f(T)l(able)h(I)q(I,)g
+(Chang's)h(metho)q(d)e(is)h(m)o(uc)o(h)e(faster)i(than)h(the)e(rest)h
+(of)112 2319 y(the)f(appro)o(ximations.)23 b(Clark's)17
+b(metho)q(d)g(also)h(pro)o(vides)f(signi\014can)o(t)g(computational)f
+(sa)o(vings)112 2419 y(o)o(v)o(er)j(b)q(oth)i(the)e(dep)q(enden)o(t)g
+(and)i(the)e(indep)q(enden)o(t)g(Kolmogoro)o(v)g(metho)q(ds.)31
+b(As)19 b(is)h(usually)112 2518 y(the)d(case,)e(increased)h(accuracy)g
+(and)h(information)e(accompanies)g(increased)h(computation.)210
+2618 y(This)f(concludes)g(the)g(study)g(of)h(the)f(tandem)f(queue.)20
+b(T)l(o)c(summarize,)c(b)q(oth)k(Clark's)f(and)p eop
+%%Page: 11 20
+11 19 bop 1864 -118 a Fn(11)481 447 y(T)l(able)16 b(I.)g(Results)g(for)
+g(Nonstationary)h(M/M/1)g(Queue)p 188 556 1649 2 v 187
+656 2 100 v 213 626 a(T)l(est)f(case)p 559 656 V 434
+w(Av)o(erage)f(P)o(ercen)o(t)g(Error,)h Fm(e)1373 633
+y Fk(av)q(e)1428 626 y Fn(,)g(in)g(\045)p 1836 656 V
+560 658 1277 2 v 187 756 2 100 v 213 726 a(parameters)p
+559 756 V 135 w(John.)p 726 756 V 50 w(Rider)p 893 756
+V 85 w(Rothk)o(opf)p 1212 756 V 152 w(Chang)p 1534 756
+V 186 w(Clark)p 1836 756 V 188 757 1649 2 v 187 857 2
+100 v 234 807 a Fk(\025)p 234 815 22 2 v 234 844 a(\026)p
+300 857 2 100 v 356 827 a Fm(a)p 436 857 V 99 w(T)p 559
+857 V 79 w(M)5 b Fn(\()p Fm(t)p Fn(\))p 726 857 V 59
+w Fm(M)g Fn(\()p Fm(t)p Fn(\))p 893 857 V 55 w Fm(M)g
+Fn(\()p Fm(t)p Fn(\))p 1051 857 V 58 w Fm(V)11 b Fn(\()p
+Fm(t)p Fn(\))p 1212 857 V 59 w Fm(M)5 b Fn(\()p Fm(t)p
+Fn(\))p 1373 857 V 60 w Fm(V)11 b Fn(\()p Fm(t)p Fn(\))p
+1534 857 V 57 w Fm(M)5 b Fn(\()p Fm(t)p Fn(\))p 1691
+857 V 50 w Fm(V)11 b Fn(\()p Fm(t)p Fn(\))p 1836 857
+V 188 859 1649 2 v 188 869 V 187 968 2 100 v 213 938
+a(0.5)p 300 968 V 75 w(1.0)p 436 968 V 74 w(10)p 559
+968 V 57 w(28.96)p 726 968 V 81 w(9.77)p 893 968 V 72
+w(1.98)p 1051 968 V 51 w(11.27)p 1212 968 V 75 w(3.39)p
+1373 968 V 75 w(5.00)p 1534 968 V 72 w(0.05)p 1691 968
+V 58 w(0.47)p 1836 968 V 187 1068 V 213 1038 a(0.5)p
+300 1068 V 75 w(1.0)p 436 1068 V 74 w(20)p 559 1068 V
+57 w(28.35)p 726 1068 V 57 w(11.75)p 893 1068 V 72 w(4.28)p
+1051 1068 V 51 w(21.06)p 1212 1068 V 75 w(6.21)p 1373
+1068 V 75 w(9.37)p 1534 1068 V 72 w(0.17)p 1691 1068
+V 58 w(0.65)p 1836 1068 V 187 1167 V 213 1138 a(0.5)p
+300 1167 V 75 w(1.0)p 436 1167 V 74 w(40)p 559 1167 V
+57 w(25.76)p 726 1167 V 57 w(14.24)p 893 1167 V 72 w(7.32)p
+1051 1167 V 51 w(32.02)p 1212 1167 V 50 w(10.60)p 1373
+1167 V 51 w(16.07)p 1534 1167 V 73 w(0.64)p 1691 1167
+V 58 w(1.96)p 1836 1167 V 187 1267 V 213 1237 a(0.5)p
+300 1267 V 75 w(1.0)p 436 1267 V 74 w(60)p 559 1267 V
+57 w(24.25)p 726 1267 V 57 w(16.48)p 893 1267 V 72 w(8.65)p
+1051 1267 V 51 w(33.88)p 1212 1267 V 75 w(9.97)p 1373
+1267 V 50 w(19.25)p 1534 1267 V 73 w(1.03)p 1691 1267
+V 58 w(2.47)p 1836 1267 V 187 1367 V 213 1337 a(0.5)p
+300 1367 V 75 w(1.0)p 436 1367 V 74 w(80)p 559 1367 V
+57 w(22.17)p 726 1367 V 57 w(17.04)p 893 1367 V 72 w(8.99)p
+1051 1367 V 51 w(32.19)p 1212 1367 V 50 w(15.68)p 1373
+1367 V 51 w(17.41)p 1534 1367 V 73 w(1.24)p 1691 1367
+V 58 w(2.70)p 1836 1367 V 187 1466 V 213 1436 a(0.5)p
+300 1466 V 75 w(1.0)p 436 1466 V 50 w(100)p 559 1466
+V 57 w(19.60)p 726 1466 V 57 w(14.92)p 893 1466 V 72
+w(8.18)p 1051 1466 V 51 w(20.33)p 1212 1466 V 50 w(14.77)p
+1373 1466 V 51 w(18.63)p 1534 1466 V 73 w(1.17)p 1691
+1466 V 58 w(2.75)p 1836 1466 V 187 1566 V 213 1536 a(0.5)p
+300 1566 V 75 w(1.0)p 436 1566 V 50 w(120)p 559 1566
+V 57 w(17.45)p 726 1566 V 57 w(13.03)p 893 1566 V 72
+w(4.51)p 1051 1566 V 51 w(11.37)p 1212 1566 V 75 w(6.60)p
+1373 1566 V 50 w(21.80)p 1534 1566 V 73 w(0.86)p 1691
+1566 V 58 w(2.19)p 1836 1566 V 188 1568 1649 2 v 188
+1578 V 187 1677 2 100 v 213 1647 a(0.9)p 300 1677 V 50
+w(0.25)p 436 1677 V 75 w(10)p 559 1677 V 57 w(12.26)p
+726 1677 V 81 w(4.82)p 893 1677 V 72 w(2.52)p 1051 1677
+V 75 w(9.26)p 1212 1677 V 75 w(1.27)p 1373 1677 V 75
+w(4.50)p 1534 1677 V 72 w(0.19)p 1691 1677 V 58 w(0.67)p
+1836 1677 V 187 1777 V 213 1747 a(0.9)p 300 1777 V 50
+w(0.25)p 436 1777 V 75 w(20)p 559 1777 V 81 w(7.59)p
+726 1777 V 81 w(3.71)p 893 1777 V 72 w(2.37)p 1051 1777
+V 51 w(11.26)p 1212 1777 V 75 w(1.08)p 1373 1777 V 75
+w(4.39)p 1534 1777 V 72 w(0.17)p 1691 1777 V 58 w(0.76)p
+1836 1777 V 187 1876 V 213 1847 a(0.9)p 300 1876 V 50
+w(0.25)p 436 1876 V 75 w(40)p 559 1876 V 81 w(6.44)p
+726 1876 V 81 w(3.81)p 893 1876 V 72 w(1.72)p 1051 1876
+V 51 w(13.10)p 1212 1876 V 75 w(1.50)p 1373 1876 V 75
+w(5.65)p 1534 1876 V 72 w(0.47)p 1691 1876 V 58 w(1.20)p
+1836 1876 V 187 1976 V 213 1946 a(0.9)p 300 1976 V 50
+w(0.25)p 436 1976 V 75 w(60)p 559 1976 V 81 w(7.08)p
+726 1976 V 81 w(4.13)p 893 1976 V 72 w(2.12)p 1051 1976
+V 51 w(14.26)p 1212 1976 V 75 w(2.05)p 1373 1976 V 75
+w(7.72)p 1534 1976 V 72 w(0.85)p 1691 1976 V 58 w(1.71)p
+1836 1976 V 187 2076 V 213 2046 a(0.9)p 300 2076 V 50
+w(0.25)p 436 2076 V 75 w(80)p 559 2076 V 81 w(7.88)p
+726 2076 V 81 w(4.37)p 893 2076 V 72 w(2.74)p 1051 2076
+V 51 w(15.13)p 1212 2076 V 75 w(2.64)p 1373 2076 V 50
+w(10.26)p 1534 2076 V 73 w(1.23)p 1691 2076 V 58 w(2.20)p
+1836 2076 V 187 2175 V 213 2145 a(0.9)p 300 2175 V 50
+w(0.25)p 436 2175 V 51 w(100)p 559 2175 V 81 w(8.47)p
+726 2175 V 81 w(4.65)p 893 2175 V 72 w(3.41)p 1051 2175
+V 51 w(15.79)p 1212 2175 V 75 w(3.22)p 1373 2175 V 50
+w(13.22)p 1534 2175 V 73 w(1.58)p 1691 2175 V 58 w(2.73)p
+1836 2175 V 187 2275 V 213 2245 a(0.9)p 300 2275 V 50
+w(0.25)p 436 2275 V 51 w(120)p 559 2275 V 81 w(8.89)p
+726 2275 V 81 w(5.09)p 893 2275 V 72 w(3.96)p 1051 2275
+V 51 w(16.25)p 1212 2275 V 75 w(3.89)p 1373 2275 V 50
+w(16.52)p 1534 2275 V 73 w(1.88)p 1691 2275 V 58 w(3.27)p
+1836 2275 V 188 2277 1649 2 v eop
+%%Page: 12 21
+12 20 bop 1864 -118 a Fn(12)483 2582 y(Fig.)15 b(5.)22
+b Fm(e)665 2589 y Fk(av)q(e)736 2582 y Fn(for)17 b(stationary)g(tandem)
+e(queue,)g Fm(M)1419 2589 y Fj(0)1453 2582 y Fn(=)e(0.)p
+eop
+%%Page: 13 22
+13 21 bop 1864 -118 a Fn(13)459 204 y(T)l(able)16 b(I)q(I.)g(CPU)g
+(Times)f(for)h(Stationary)h(T)l(andem)e(Queue)p 381 257
+1263 2 v 380 357 2 100 v 406 327 a(T)l(est)h(case)p 666
+357 V 194 w(CPU)g(time)e(for)j(V)-5 b(AX)14 b(8650)k(,)e(in)g(secs.)p
+1643 357 V 667 359 977 2 v 380 456 2 100 v 406 427 a(parameters)p
+666 456 V 116 w(Exact)p 973 456 V 116 w(Indep)q(enden)o(t)p
+1287 456 V 1475 456 V 1643 456 V 381 458 286 2 v 380
+556 2 100 v 427 507 a Fk(\025)p 427 515 22 2 v 427 543
+a(\026)p 492 556 2 100 v 523 526 a Fm(T)552 533 y Fk(f)t(inal)p
+666 556 V 692 526 a Fn(Kolmogoro)o(v)p 973 556 V 52 w(Kolmogoro)o(v)p
+1287 556 V 53 w(Chang)p 1475 556 V 51 w(Clark)p 1643
+556 V 381 558 1263 2 v 381 568 V 380 667 2 100 v 406
+637 a(0.1)p 492 667 V 125 w(39)p 666 667 V 197 w(20.76)p
+973 667 V 229 w(0.51)p 1287 667 V 102 w(0.08)p 1475 667
+V 81 w(0.16)p 1643 667 V 380 767 V 406 737 a(0.3)p 492
+767 V 125 w(56)p 666 767 V 197 w(24.21)p 973 767 V 229
+w(0.48)p 1287 767 V 102 w(0.07)p 1475 767 V 81 w(0.27)p
+1643 767 V 380 867 V 406 837 a(0.6)p 492 867 V 101 w(120)p
+666 867 V 197 w(44.96)p 973 867 V 229 w(0.84)p 1287 867
+V 102 w(0.04)p 1475 867 V 81 w(0.43)p 1643 867 V 380
+966 V 406 936 a(0.8)p 492 966 V 101 w(300)p 666 966 V
+173 w(119.89)p 973 966 V 229 w(2.27)p 1287 966 V 102
+w(0.05)p 1475 966 V 81 w(1.44)p 1643 966 V 381 968 1263
+2 v 112 1154 a(Chang/W)l(ang's)e(p)q(erformed)9 b(strongly)j(for)f(all)
+f(tests)h(when)g Fm(\032)j(>)g Fn(0)p Fm(:)p Fn(3.)19
+b(F)l(or)11 b(lo)o(w)g(utilization)f(cases,)112 1253
+y(the)k(appro)o(ximations)f(incurred)g(larger)h(errors)g(with)g(resp)q
+(ect)g(to)g Fm(e)1352 1260 y Fk(av)q(e)1421 1253 y Fn(and)g
+Fm(e)1536 1260 y Fk(w)q(or)1598 1253 y Fn(.)21 b(This)14
+b(ho)o(w)o(ev)o(er)112 1353 y(w)o(as)20 b(due)e(to)h(n)o(umerical)d
+(accuracy)i(problems)f(for)i(small)e(v)m(alues)h(of)h(the)f(mean)g
+(coupled)g(with)112 1453 y(large)f(v)m(alues)f(\(close)g(to)h(one\))g
+(of)f Fm(P)7 b Fn(0)17 b(in)f(b)q(oth)i(queues.)j(The)16
+b Fm(e)1290 1460 y Fk(w)q(or)1369 1453 y Fn(criterion)f(in)h(the)g(App)
+q(endix)112 1552 y(did)h(not)f(sho)o(w)h(an)o(y)f(mo)q(del)f(w)o
+(eakness)h(for)h(the)f(lo)o(w)g(utilization)f(cases.)p
+eop
+%%Page: 14 23
+14 22 bop 1864 -118 a Fn(14)845 123 y(REFERENCES)137
+315 y([1])24 b(Jo)q(e)c(Author.)31 b(Title)19 b(of)g(rep)q(ort.)32
+b(Researc)o(h)19 b(Rep)q(ort)h(23,)h(Departmen)o(t)d(of)h(Publication,)
+213 414 y(Name)14 b(of)j(Univ)o(ersit)o(y)l(,)c(Cit)o(y)l(,)i(State,)h
+(Octob)q(er)g(1999.)137 554 y([2])24 b(Arth)o(ur)14 b(Author)h(and)g
+(Jo)q(e)g(Author.)21 b(Title)13 b(of)i(journal)g(article.)20
+b Fa(Title)d(of)f(Journal)p Fn(,)e(76:27{)213 653 y(45,)i(July)g(1776.)
+137 793 y([3])24 b(Author)d(Bo)q(ok.)38 b Fa(Title)23
+b(of)f(Bo)n(ok)p Fn(,)g(v)o(olume)d(1.)37 b(Name)20 b(of)i(Publishing)f
+(Compan)o(y)l(,)h(Cit)o(y)l(,)213 892 y(State)16 b(of)h(Publication,)e
+(16th)i(edition,)e(1988.)137 1031 y([4])24 b(Matthew)17
+b(W)l(righ)o(t,)f(James)h(Cho)q(dzk)o(o,)g(and)h(Dann)o(y)f(Luk.)24
+b Fa(Title)19 b(of)f(Bo)n(ok)p Fn(,)f(c)o(hapter)g(4{5,)213
+1131 y(pages)g(56{99.)23 b(Name)14 b(of)j(Publisher,)e(College)h
+(Station,)g(T)l(exas,)g(1988.)137 1270 y([5])24 b(Han)d(Chen.)36
+b(Title)20 b(of)i(b)q(o)q(oklet.)36 b(T)l(exas)22 b(A&M)e(Univ)o(ersit)
+o(y)l(,)g(College)g(Station,)j(T)l(exas,)213 1370 y(July)15
+b(1989.)137 1509 y([6])24 b(Russell)17 b(L.)i(Oertel)e(and)h(Pierce)f
+(Can)o(trell.)27 b(L)1066 1503 y Fh(a)1090 1509 y Fn(T)1117
+1524 y(E)1144 1509 y(X)19 b Fa(Example)h(Manual)p Fn(.)28
+b(Departmen)o(t)16 b(of)213 1609 y(Electrical)e(Engineering,)i(T)l
+(exas)h(A&M)e(Univ)o(ersit)o(y)l(,)f(College)h(Station,)i(T)l(exas,)f
+(Septem-)213 1708 y(b)q(er)g(1988.)137 1848 y([7])24
+b(Joseph)19 b(W.)g(Simpson.)28 b(Title)18 b(of)h(article.)28
+b(In)18 b(Editor)h(of)g(Bo)q(ok,)h(editor,)f Fa(Title)h(of)g(Bo)n(ok)p
+Fn(,)213 1947 y(c)o(hapter)15 b(3,)h(pages)g(400{402.)i(Name)c(of)i
+(Publishing)f(Compan)o(y)l(,)g(Cit)o(y)l(,)f(State)i(of)g(Publica-)213
+2047 y(tion,)g(1983.)137 2186 y([8])24 b(P)o(eter)14
+b(J.)h(Rizzo,)f(editor.)20 b Fa(Title)d(of)g(Confer)n(enc)n(e)g(Pr)n(o)
+n(c)n(e)n(e)n(dings)p Fn(,)c(Lo)q(cation)k(of)e(Symp)q(osium,)213
+2286 y(June)h(1987.)h(Sp)q(onsoring)h(Organization,)e(Name)f(of)i
+(publisher.)137 2425 y([9])24 b(Arth)o(ur)19 b(Article.)29
+b(Title)18 b(of)i(conference)f(article.)29 b(In)20 b
+Fa(Title)h(of)f(Confer)n(enc)n(e)i(Pr)n(o)n(c)n(e)n(e)n(dings)213
+2525 y(R)n(e)n(c)n(or)n(d)p Fn(,)13 b(Lo)q(cation)18
+b(of)e(Symp)q(osium,)e(Jan)o(uary)i(1989.)h(Sp)q(onsoring)h
+(Organization,)e(Name)213 2624 y(of)g(Publisher.)p eop
+%%Page: 15 24
+15 23 bop 1864 -118 a Fn(15)112 123 y([10])25 b(P)l(.)20
+b(Kenneth)f(and)i(G.)f(E.)g(T)l(a)o(ylor.)33 b(Solution)21
+b(of)f(v)m(ariational)h(problems)e(with)h(b)q(ounded)213
+223 y(con)o(trol)h(v)m(ariables)h(b)o(y)g(means)f(of)h(the)g
+(generalized)f(Newton-Raphson)i(metho)q(d.)37 b(pre-)213
+322 y(sen)o(ted)16 b(at)g(the)h(Symp.)d(on)j(Recen)o(t)e(Adv)m(ances)h
+(in)h(Optimization)d(T)l(ec)o(hniques,)h(Carnegie)213
+422 y(Inst.)g(of)i(T)l(ec)o(h.,)e(Pittsburgh,)h(P)o(a.,)g(April)f
+(1965.)112 563 y([11])25 b(R.)17 b(E.)g(Larson.)27 b
+Fa(Title)19 b(of)g(Dissertation)p Fn(.)25 b(PhD)18 b(thesis,)f
+(Stanford)h(Univ)o(ersit)o(y)l(,)d(Stanford,)213 663
+y(California,)h(1964.)112 804 y([12])25 b(Elaine)19 b(G.)g(Hasc)o(hk)o
+(e.)29 b(Title)18 b(of)i(thesis.)30 b(Master's)19 b(thesis,)h(Drofnats)
+h(Univ)o(ersit)o(y)l(,)c(W)l(est)213 903 y(Y)l(ello)o(wstone,)d(Mon)o
+(tana,)j(Ma)o(y)f(1993.)112 1044 y([13])25 b(J.)16 b(D.)g(Simon.)k
+(priv)m(ate)c(comm)o(uni)o(cations,)d(No)o(v)o(em)o(b)q(er)h(1963.)p
+eop
+%%Page: 16 25
+16 24 bop 1864 -118 a Fn(16)854 123 y(APPENDIX)15 b(A)690
+326 y(SUPPLEMENT)l(AL)i(RESUL)l(TS)p eop
+%%Page: 17 26
+17 25 bop 1864 -118 a Fn(17)323 2587 y(Fig.)15 b(6.)22
+b(Rothk)o(opf/Oren's)863 2571 y Fi(c)858 2587 y Fm(P)889
+2594 y Fj(0)925 2587 y Fn(results)16 b(for)h(stationary)g(M/M/1)g
+(queue.)p eop
+%%Page: 18 27
+18 26 bop 1864 -118 a Fn(18)952 123 y(VIT)l(A)210 272
+y(Mr.)27 b(William)16 b(A.)h(Bak)o(er)g(w)o(as)i(b)q(orn)g(on)g(Ma)o(y)
+f(28,)h(1958)h(in)e(Camden)f(N.J.)g(He)h(receiv)o(ed)112
+372 y(his)f(B.)g(S.)f(in)h(Mec)o(hanical)f(Engineering)g(at)i(Rutger's)
+f(College)f(of)h(Engineering)g(in)g(1980.)25 b(His)112
+472 y(mailing)15 b(address)i(is)f(6)h(Suburban)g(Blvd.,)d(Delran)i
+(N.J.)112 2614 y(The)h(t)o(ypist)e(for)i(this)f(thesis)g(w)o(as)h
+(William)c(A.)j(Bak)o(er.)p eop
+%%Trailer
+end
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/obsolete/macros/latex209/contrib/tamueethesis/thesis.tex b/obsolete/macros/latex209/contrib/tamueethesis/thesis.tex
new file mode 100644
index 0000000000..693849d92c
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/tamueethesis/thesis.tex
@@ -0,0 +1,23 @@
+\documentstyle{eethesis}
+%\includeonly{ch2}
+%\def\type{Dissertation} % Uncommennt out this line if you are
+\newcounter{cm} % writing a dissertation
+\begin{document}
+\pagenumbering{roman}
+\include{title}
+\include{approve}
+\include{abstract}
+\include{ded}
+\include{ack}
+\include{lists}
+\pagenumbering{arabic}
+\setlength{\headheight}{12pt}
+\pagestyle{myheadings}
+\include{ch1}
+\include{ch2}
+%\include{bib} % Include only one of these two lines.
+\include{biblio} % "biblio" if you use BibTeX, "bib" if not
+%\include{supp}
+\include{append}
+\include{vita}
+\end{document}
diff --git a/obsolete/macros/latex209/contrib/tamueethesis/title.tex b/obsolete/macros/latex209/contrib/tamueethesis/title.tex
new file mode 100644
index 0000000000..9c95e4959e
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/tamueethesis/title.tex
@@ -0,0 +1,6 @@
+\maketitlepage
+{Transient queueing approximations for computer\\networks}
+{William A. Baker}
+{Master of Science}
+{December 1986}
+{Electrical Engineering}
diff --git a/obsolete/macros/latex209/contrib/tamueethesis/vita.tex b/obsolete/macros/latex209/contrib/tamueethesis/vita.tex
new file mode 100644
index 0000000000..d0f0134bd5
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/tamueethesis/vita.tex
@@ -0,0 +1,5 @@
+\vita{Mr. William A. Baker was born on May 28, 1958 in Camden N.J. He
+received his B.\ S.\ in Mechanical Engineering at Rutger's College
+of Engineering in 1980. His mailing address is 6 Suburban Blvd., Delran
+N.J.}
+\typist{William A. Baker}
diff --git a/obsolete/macros/latex209/contrib/vdm/.idx b/obsolete/macros/latex209/contrib/vdm/.idx
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/vdm/.idx
diff --git a/obsolete/macros/latex209/contrib/vdm/fnidx.idx b/obsolete/macros/latex209/contrib/vdm/fnidx.idx
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/vdm/fnidx.idx
diff --git a/obsolete/macros/latex209/contrib/vdm/moremath.ps b/obsolete/macros/latex209/contrib/vdm/moremath.ps
new file mode 100644
index 0000000000..f9ef7f24d3
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/vdm/moremath.ps
@@ -0,0 +1,550 @@
+%!PS-Adobe-2.0
+%%Title: Fontographer 2.4.1
+%%FontName: DemoMoreMath
+%%CreationDate: 2/13/89 9:14:34 AM
+%%Creator: PAUL BACSICH, THE OPEN UNIVERSITY
+%%Pages: 0
+%% Version 1.1 of MoreMath font, by Paul Bacsich.
+%%EndComments
+%serverdict begin 0 exitserver % remove first percent sign for PC fonts...
+systemdict/currentpacking known{/SavPak currentpacking def true setpacking}if
+userdict/AltRT6 known{{currentfile( )readstring{(%%%)eq{exit}if}{pop}ifelse}loop}if
+userdict begin/AltRT6 39 dict def AltRT6 begin/NL 0 def/B{bind def}bind def
+/Cache{NL 0 eq{setcachedevice}{6{pop}repeat}ifelse 0 0 moveto}B
+/SetWid{NL 0 eq{0 setcharwidth setgray}{pop setgray}ifelse 0 0 moveto}B
+/ShowInt{/NL NL 1 add store BC2 grestore/NL NL 1 sub store}B
+/charStr(.)def/Strk 0 def/Sstrk{/Strk 1 store}B
+/Cfill{PaintType 0 eq{Strk 0 eq{exec}{gsave exec grestore
+currentgray 0 ne{0 setgray}if stroke}ifelse}{pop stroke}ifelse}B
+/Fill{{fill}Cfill}def/Eofill{{eofill}Cfill}def/Cp{closepath 0 0 moveto}def
+/ShowExt{EFN exch get findfont setfont matrix currentmatrix exch
+InvMtx concat 0 0 moveto charStr 0 3 -1 roll put PaintType 0 ne Strk 0 ne
+or currentgray 0 ne or{charStr false charpath setmatrix Fill}
+{charStr show pop}ifelse grestore}B/stringtype{{UCS}forall}B
+/arraytype/exec load def/packedarraytype/exec load def
+/BuildChar{AltRT6 begin exch begin BC2 end end}B
+/BC2{save exch StrokeWidth setlinewidth/Strk 0 store
+Encoding exch get dup CharDefs exch known not{pop/.notdef}if
+CharDefs exch get newpath dup type exec restore}B
+/UVec[{rmoveto}{rlineto}{rcurveto}{ShowExt}{]concat}{Cache}{setlinewidth}
+{ShowInt}{setlinecap}{setlinejoin}{gsave}{[}{Fill}{Eofill}{stroke}{SetWid}
+{100 mul add}{100 mul}{100 div}{Cp}{Sstrk}{setgray}]def
+/UCS{dup 200 lt{100 sub}{dup 233 lt{216 sub 100 mul add}
+{233 sub UVec exch get exec}ifelse}ifelse}B
+/CD{/NF exch def{exch dup/FID ne{exch NF 3 1 roll put}
+{pop pop}ifelse}forall NF}B
+/MN{1 index length/Len exch def dup length Len add string dup
+Len 4 -1 roll putinterval dup 0 4 -1 roll putinterval}B
+/RC{(|______)anchorsearch {1 index MN cvn/NewN exch def cvn
+findfont dup maxlength dict CD dup/FontName NewN put dup
+/Encoding MacVec put NewN exch definefont pop}{pop}ifelse}B
+/RF{dup cvn FontDirectory exch known{pop}{RC}ifelse}B
+/MacVec 256 array def MacVec 0 /Helvetica findfont
+/Encoding get 0 128 getinterval putinterval MacVec 127 /DEL put
+MacVec 16#27 /quotesingle put MacVec 16#60 /grave put/NUL/SOH/STX/ETX
+/EOT/ENQ/ACK/BEL/BS/HT/LF/VT/FF/CR/SO/SI/DLE/DC1/DC2/DC3/DC4/NAK/SYN
+/ETB/CAN/EM/SUB/ESC/FS/GS/RS/US MacVec 0 32 getinterval astore pop
+/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
+/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls
+/register/copyright/trademark/acute/dieresis/notequal/AE/Oslash
+/infinity/plusminus/lessequal/greaterequal/yen/mu/partialdiff/summation
+/product/pi/integral/ordfeminine/ordmasculine/Omega/ae/oslash
+/questiondown/exclamdown/logicalnot/radical/florin/approxequal/Delta/guillemotleft
+/guillemotright/ellipsis/nbspace/Agrave/Atilde/Otilde/OE/oe
+/endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide/lozenge
+/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright/fi/fl
+/daggerdbl/periodcentered/quotesinglbase/quotedblbase
+/perthousand/Acircumflex/Ecircumflex/Aacute
+/Edieresis/Egrave/Iacute/Icircumflex/Idieresis/Igrave/Oacute/Ocircumflex
+/apple/Ograve/Uacute/Ucircumflex/Ugrave/dotlessi/circumflex/tilde
+/macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron
+MacVec 128 128 getinterval astore pop end end
+%%%%%%
+%%EndProlog
+/$DemoMoreMath 19 dict def $DemoMoreMath begin/PaintType 0 def/FontType 3 def
+/StrokeWidth 60 def/FontBBox[-91 -300 1603 900]def %/UniqueID 4475750 def
+/FontMatrix[0.001000 0 0 0.001000 0 0]def/InvMtx[1000 0 0 1000 0 0]def
+/CharDefs 257 dict def/FontName (DemoMoreMath) def
+/BuildChar{AltRT6/BuildChar get exec}def
+/FontInfo 3 dict def FontInfo begin
+/UnderlinePosition -160 def/UnderlineThickness 20 def end
+/Encoding AltRT6/MacVec get def CharDefs begin/.notdef{500 0 setcharwidth} def
+/SOH {815 0 432 -58 858 538 Cache 540 30 rmoveto 210 210 rlineto -210 210
+rlineto stroke }def
+/STX {580 0 -104 187 685 453 Cache 537 320 rmoveto -56 -80 -174 -80 -257
+0 rcurveto -83 80 -180 80 -236 0 rcurveto stroke }def
+/ETX {1000 0 -221 88 1221 394 Cache 0 240 rmoveto 1000 0 rlineto -120 80
+rmoveto 120 -80 rlineto -120 -78 rlineto stroke }def
+/EOT {575 0 -81 -3 691 483 Cache 545 400 rmoveto -320 0 rlineto -87 0 -160
+-73 -160 -160 rcurveto 0 -86 72 -160 158 -160 rcurveto 322 0 rlineto
+stroke }def
+/ENQ {380 0 74 250 306 450 Cache 160 350 rmoveto 0 -40 60 -40 60 0
+rcurveto 0 40 -60 40 -60 0 rcurveto Cp stroke }def
+/ACK {1000 0 -163 -83 938 706 Cache 40 setlinewidth 10 630 rmoveto 0 -160
+rlineto 120 160 rmoveto 120 0 rlineto 0 -80 rlineto -120 0 rlineto 0 -80
+rlineto 120 0 rlineto 120 160 rmoveto 120 0 rlineto 0 -160 rlineto -120
+0 rlineto 0 80 rmoveto 120 0 rlineto -490 -165 rmoveto 0 -105 rlineto 120
+0 rlineto -50 45 rmoveto 0 -100 rlineto 305 165 rmoveto -120 0
+rlineto 0 -80 rlineto 120 0 rlineto 0 -80 rlineto -120 0 rlineto 220 150
+rmoveto 0 -160 rlineto 120 0 rlineto 0 80 rlineto -120 0 rlineto 180 80
+rmoveto 120 0 rlineto 0 -160 rlineto -775 -60 rmoveto 0 -160 rlineto 120
+0 rlineto 0 160 rlineto Cp 0 80 rmoveto 120 0 rlineto 251 -87 rmoveto 0
+160 rlineto -120 0 rlineto 0 -80 rlineto 120 0 rlineto stroke }def
+/BEL {1570 0 -203 -87 1829 832 Cache 1103 715 rmoveto 0 -700 rlineto 219
+0 rlineto 100 0 221 58 221 203 rcurveto 0 160 -147 194 -164 193
+rcurveto -1 0 75 37 75 136 rcurveto 0 119 -94 168 -180 168 rcurveto
+Cp 1143 675 rmoveto 0 -255 rlineto 140 0 rlineto 77 0 131 53 131 127
+rcurveto 0 76 -49 128 -137 128 rcurveto Cp 1143 381 rmoveto 0 -326
+rlineto 180 0 rlineto 70 0 182 41 180 163 rcurveto -1 118 -114 163 -180
+163 rcurveto Cp 83 730 rmoveto 0 -700 rlineto 40 0 rlineto 0 350
+rlineto 131 0 rlineto 71 0 189 43 190 176 rcurveto 1 132 -116 174 -190
+174 rcurveto Cp 123 420 rmoveto 0 271 rlineto 130 0 rlineto 41 0 152 -21
+151 -135 rcurveto -1 -110 -113 -136 -150 -136 rcurveto Cp 520 720
+rmoveto 0 -700 rlineto 232 0 rlineto 53 0 315 43 314 351 rcurveto -1 303
+-256 349 -312 349 rcurveto Cp 560 681 rmoveto 0 -621 rlineto 190 0
+rlineto 41 0 275 38 276 311 rcurveto 1 273 -227 310 -272 310 rcurveto
+Cp stroke }def
+/space {1000 0 -1 -1 1 1 Cache 0 0 rmoveto Fill }def
+/exclam {1095 0 -157 83 1285 447 Cache 1064 160 rmoveto -1000 0
+rlineto 210 210 rlineto stroke }def
+/quotedbl {845 0 -159 -91 999 571 Cache 2 setlinejoin 330 480 rmoveto 480
+-240 rlineto -480 -240 rlineto -300 480 rmoveto 480 -240 rlineto -480 -240
+rlineto stroke }def
+/numbersign {0 0 62 452 474 618 Cache 40 setlinewidth 148 570 rmoveto 120
+-70 rlineto 120 70 rlineto stroke }def
+/dollar {1095 0 -191 33 1251 397 Cache 30 320 rmoveto 1000 0 rlineto -210
+-210 rlineto stroke }def
+/percent {80 0 -59 165 200 475 Cache 111 240 rmoveto -1 0 rlineto -43 0
+-80 37 -80 80 rcurveto 0 43 37 80 80 80 rcurveto 1 0 rlineto stroke }
+def
+/ampersand {560 0 -113 89 673 315 Cache 35 244 rmoveto 5 -4 rlineto 80
+-64 143 -80 240 -80 rcurveto 97 0 160 16 240 80 rcurveto 5 4 rlineto
+stroke }def
+/parenleft {545 0 -116 -91 656 571 Cache 510 480 rmoveto -80 -160 -260
+-240 -460 -240 rcurveto -20 0 rlineto 20 0 rlineto 200 0 380 -80 460 -240
+rcurveto stroke }def
+/parenright {545 0 -111 -91 661 571 Cache 35 480 rmoveto 80 -160 260 -240
+460 -240 rcurveto 20 0 rlineto -20 0 rlineto -200 0 -380 -80 -460 -240
+rcurveto stroke }def
+/asterisk {560 0 -113 85 673 311 Cache 35 156 rmoveto 5 4 rlineto 80 64
+143 80 240 80 rcurveto 97 0 160 -16 240 -80 rcurveto 5 -4 rlineto
+stroke }def
+/plus {1095 0 -191 75 1251 615 Cache 30 320 rmoveto 1000 0 rlineto -210
+210 rlineto -790 -370 rmoveto 1000 0 rlineto stroke }def
+/comma {735 0 -69 -88 817 570 Cache 0 setlinewidth 30 480 rmoveto 0 -80
+120 -80 120 0 rcurveto 0 80 -120 80 -120 0 rcurveto Cp 590 480
+rmoveto 0 -80 120 -80 120 0 rcurveto 0 80 -120 80 -120 0 rcurveto Cp 30
+0 rmoveto 0 -78 118 -78 118 0 rcurveto 0 78 -118 78 -118 0 rcurveto
+Cp 600 0 rmoveto 0 -78 118 -78 118 0 rcurveto 0 78 -118 78 -118 0
+rcurveto Cp Fill }def
+/hyphen {380 0 -93 166 473 454 Cache 30 240 rmoveto 320 0 rlineto -190
+110 rmoveto 0 -40 60 -40 60 0 rcurveto 0 40 -60 40 -60 0 rcurveto Cp
+stroke }def
+/period {735 0 -68 -88 808 570 Cache 0 setlinewidth 30 480 rmoveto 0 -80
+120 -80 120 0 rcurveto 0 80 -120 80 -120 0 rcurveto Cp 590 480
+rmoveto 0 -80 120 -80 120 0 rcurveto 0 80 -120 80 -120 0 rcurveto Cp 310
+0 rmoveto 0 -78 118 -78 118 0 rcurveto 0 78 -118 78 -118 0 rcurveto
+Cp Fill }def
+/slash {610 0 -81 -91 691 571 Cache 305 240 rmoveto 240 240 rlineto 0 -480
+rlineto Cp 65 480 rmoveto 240 -240 rlineto -240 -240 rlineto Cp
+stroke }def
+/zero {580 0 -77 -89 657 539 Cache 65 225 rmoveto 0 -300 450 -300 450 0
+rcurveto 0 300 -450 300 -450 0 rcurveto Cp 269 225 rmoveto 0 -26 40 -26
+40 0 rcurveto 0 26 -40 26 -40 0 rcurveto Cp stroke }def
+/one {1 167 SetWid 0 setlinewidth 100 0 rmoveto stroke }def
+/two {1 333 SetWid 0 setlinewidth 240 0 rmoveto Fill }def
+/three {1 1000 SetWid 0 setlinewidth 240 0 rmoveto Fill }def
+/colon {850 0 -154 -91 1004 571 Cache 2 setlinejoin 515 480 rmoveto -480
+-240 rlineto 480 -240 rlineto 300 480 rmoveto -480 -240 rlineto 480 -240
+rlineto stroke }def
+/semicolon {230 0 -14 -193 244 523 Cache 40 setlinewidth 55 450
+rmoveto 0 -120 rlineto 120 0 rlineto 0 120 rlineto Cp 55 120 rmoveto 0
+-120 rlineto 120 0 rlineto 0 0 rlineto 0 0 rlineto 0 120 rlineto Cp 115
+-120 rmoveto 50 120 rlineto -50 0 rlineto Cp stroke }def
+/less {550 0 -111 -259 661 579 Cache 2 setlinejoin 515 480 rmoveto -480
+-240 rlineto 480 -240 rlineto -480 80 rmoveto 480 -240 rlineto stroke }
+def
+/equal {560 0 -113 -7 673 487 Cache 35 404 rmoveto 5 -4 rlineto 80 -64
+143 -80 240 -80 rcurveto 97 0 160 16 240 80 rcurveto 5 4 rlineto -490 -328
+rmoveto 5 4 rlineto 80 64 143 80 240 80 rcurveto 97 0 160 -16 240 -80
+rcurveto 5 -4 rlineto stroke }def
+/greater {550 0 -111 -259 661 579 Cache 2 setlinejoin 35 480 rmoveto 480
+-240 rlineto -480 -240 rlineto 480 80 rmoveto -480 -240 rlineto
+stroke }def
+/at {1095 0 -157 33 1285 397 Cache 1064 320 rmoveto -1000 0 rlineto 210
+-210 rlineto stroke }def
+/B {510 0 -61 -55 571 705 Cache 40 setlinewidth 172 348 rmoveto 78 0
+rlineto 102 0 210 -61 210 -163 rcurveto 0 -103 -107 -165 -210 -165
+rcurveto -200 0 rlineto 0 610 rlineto 200 0 rlineto 88 0 181 -52 180 -140
+rcurveto -1 -87 -93 -136 -180 -136 rcurveto -78 0 rlineto -2 -332
+rmoveto 0 599 rlineto 170 -292 rmoveto 0 -290 rlineto 0 335 rmoveto 0 235
+rlineto stroke }def
+/C {620 0 -79 -77 718 723 Cache 40 setlinewidth 589 582 rmoveto 0 0 -61
+64 -229 64 rcurveto -140 0 -310 -115 -310 -323 rcurveto 0 -205 172 -323
+310 -323 rcurveto 161 0 229 67 229 67 rcurveto -419 510 rmoveto 0 -506
+rlineto stroke }def
+/D {860 0 -103 -99 1003 739 Cache 80 0 rmoveto 370 640 rlineto 370 -640
+rlineto Cp stroke }def
+/E {660 0 -133 -47 793 527 Cache 30 320 rmoveto 180 0 rlineto 0 1
+rlineto 0 35 10 61 34 85 rcurveto 24 24 51 34 86 34 rcurveto 35 0 60 -10
+85 -34 rcurveto 25 -24 35 -50 35 -85 rcurveto 0 -1 rlineto 180 0
+rlineto -600 -160 rmoveto 180 0 rlineto 0 -1 rlineto 0 -35 10 -61 34 -85
+rcurveto 24 -24 51 -34 86 -34 rcurveto 35 0 60 10 85 34 rcurveto 25 24
+35 50 35 85 rcurveto 0 1 rlineto 180 0 rlineto stroke }def
+/F {450 0 -62 -348 509 689 Cache 337 531 rmoveto -149 150 -375 -75 -226
+-225 rcurveto 149 -150 375 75 226 225 rcurveto Cp 225 252 rmoveto 0 -492
+rlineto -160 120 rmoveto 320 0 rlineto stroke }def
+/G {550 0 -111 -91 661 571 Cache 2 setlinejoin 35 480 rmoveto 480 -240
+rlineto -480 -240 rlineto 240 240 rmoveto -240 120 rlineto 240 -120
+rlineto -240 -120 rlineto Cp stroke }def
+/H {0 0 -195 671 1195 849 Cache 40 setlinewidth 1000 720 rmoveto -1000
+0 rlineto 0 0 rlineto 80 80 rlineto stroke }def
+/I {850 0 -116 -277 966 957 Cache 65 -160 rmoveto 0 640 rlineto 0 197 163
+360 360 360 rcurveto 197 0 360 -163 360 -360 rcurveto 0 -640 rlineto
+stroke }def
+/J {1 0 SetWid 0 setlinewidth 0 760 rmoveto 0 -280 rlineto 480 0
+rlineto 0 280 rlineto Cp Fill }def
+/L {550 0 -111 -91 661 571 Cache 2 setlinejoin 515 480 rmoveto -480 -240
+rlineto 480 -240 rlineto -240 240 rmoveto 240 120 rlineto -240 -120
+rlineto 240 -120 rlineto Cp stroke }def
+/M {759 0 -104 -97 872 737 Cache 65 160 rmoveto 0 -212 319 -212 319 0
+rcurveto 0 212 -319 212 -319 0 rcurveto Cp 342 278 rmoveto 361 361
+rlineto -160 0 rmoveto 160 0 rlineto 0 -160 rlineto stroke }def
+/N {580 0 -71 -55 651 705 Cache 40 setlinewidth 51 629 rmoveto 359 -609
+rlineto 120 0 rlineto 0 610 rlineto -480 -610 rmoveto 0 610 rlineto 115
+0 rlineto 362 -605 rlineto stroke }def
+/O {640 0 -169 -97 809 738 Cache 0 320 rmoveto 0 -426 640 -426 640 0
+rcurveto 0 426 -640 426 -640 0 rcurveto Cp stroke }def
+/P {900 0 -168 -229 1068 829 Cache 750 720 rmoveto 0 -840 rlineto -600
+0 rlineto 0 0 rlineto 0 0 rlineto 0 840 rlineto -120 -840 rmoveto 840 0
+rlineto stroke }def
+/Q {750 0 -91 -79 844 724 Cache 40 setlinewidth 266 40 rmoveto 18 21 27
+39 48 56 rcurveto 33 27 60 48 104 48 rcurveto 39 0 69 -8 96 -36
+rcurveto 88 -90 rlineto 6 -6 rlineto 9 -9 21 -14 34 -14 rcurveto 13 0 27
+2 32 13 rcurveto 1 2 2 5 3 8 rcurveto -108 40 rmoveto 4 2 13 8 13 8
+rcurveto 161 73 214 580 -212 580 rcurveto -425 0 -420 -645 6 -647
+rcurveto 102 0 178 46 178 46 rcurveto 0 0 6 5 9 7 rcurveto -393 528
+rmoveto 0 -510 rlineto 410 509 rmoveto 0 -497 rlineto stroke }def
+/R {520 0 -62 -55 582 705 Cache 40 setlinewidth 296 596 rmoveto 1 -236
+rmoveto 0 -38 rmoveto 173 -302 rlineto -120 0 rlineto -171 306
+rlineto 115 0 rlineto 72 0 166 39 166 152 rcurveto 0 117 -99 152 -163 152
+rcurveto -247 0 rlineto 0 -610 rlineto 120 0 rlineto 0 610 rlineto 180
+-10 rmoveto 0 -284 rlineto stroke }def
+/S {610 0 -81 -99 691 749 Cache 65 0 rmoveto 0 650 rlineto 480 0
+rlineto 0 -650 rlineto Cp stroke }def
+/T {700 0 -139 -99 839 739 Cache 30 640 rmoveto 320 0 rlineto 320 0
+rlineto -320 -640 rmoveto 0 640 rlineto stroke }def
+/U {850 0 -116 -277 966 957 Cache 65 840 rmoveto 0 -640 rlineto 0 -197
+163 -360 360 -360 rcurveto 197 0 360 163 360 360 rcurveto 0 640
+rlineto stroke }def
+/V {685 0 -62 -56 741 705 Cache 40 setlinewidth 398 20 rmoveto -210 610
+rlineto 0 0 rlineto -120 0 rlineto 211 -611 rlineto 120 0 rlineto 212 611
+rmoveto -212 -611 rlineto stroke }def
+/X {730 0 -98 -97 828 697 Cache 65 0 rmoveto 600 600 rlineto 0 -296
+rmoveto 0 296 rlineto -296 0 rlineto stroke }def
+/Y {730 0 -98 -96 828 695 Cache 665 0 rmoveto -600 599 rlineto 304 -599
+rmoveto 296 0 rlineto 0 296 rlineto stroke }def
+/Z {580 0 -72 -55 662 705 Cache 40 setlinewidth 500 20 rmoveto -450 0
+rlineto 370 605 rlineto -330 5 rmoveto 450 0 rlineto -370 -610
+rlineto stroke }def
+/bracketleft {595 0 -84 -3 714 483 Cache 565 80 rmoveto -500 0
+rlineto 0 320 rlineto 500 0 rlineto stroke }def
+/backslash {310 0 -38 -267 348 757 Cache 65 650 rmoveto 0 -810
+rlineto 0 0 rlineto 180 810 rmoveto 0 -810 rlineto stroke }def
+/bracketright {595 0 -119 -3 679 483 Cache 30 80 rmoveto 500 0
+rlineto 0 320 rlineto -500 0 rlineto stroke }def
+/asciicircum {80 0 -120 165 139 475 Cache -31 240 rmoveto 1 0 rlineto 43
+0 80 37 80 80 rcurveto 0 43 -37 80 -80 80 rcurveto -1 0 rlineto
+stroke }def
+/underscore {580 0 -77 -89 657 539 Cache 1 setlinecap 65 225 rmoveto 0
+-300 450 -300 450 0 rcurveto 0 300 -450 300 -450 0 rcurveto Cp 215 225
+rmoveto 151 0 rlineto stroke }def
+/a {815 0 -151 -58 931 538 Cache 30 160 rmoveto 640 0 rlineto -640 160
+rmoveto 640 0 rlineto -340 130 rmoveto 0 -420 rlineto 210 0 rmoveto 210
+210 rlineto -210 210 rlineto stroke }def
+/b {490 0 -64 -267 554 757 Cache 65 645 rmoveto 0 0 rlineto 0 5
+rlineto 360 0 rlineto 0 -810 rlineto -360 0 rlineto Cp stroke }def
+/c {420 0 -151 589 571 811 Cache 40 setlinewidth -30 640 rmoveto 38 34
+55 67 100 90 rcurveto 48 25 85 30 140 30 rcurveto 53 0 88 -7 135 -30
+rcurveto 47 -23 65 -56 105 -90 rcurveto -120 0 rmoveto 120 0 rlineto 0
+120 rlineto stroke }def
+/d {470 0 -61 -13 530 492 Cache 65 240 rmoveto 170 169 rlineto 169 -169
+rlineto -169 -170 rlineto Cp stroke }def
+/e {660 0 -133 79 793 521 Cache 30 160 rmoveto 600 0 rlineto -600 160
+rmoveto 180 0 rlineto 0 1 rlineto 0 35 10 61 34 85 rcurveto 24 24 51 34
+86 34 rcurveto 35 0 60 -10 85 -34 rcurveto 25 -24 35 -50 35 -85
+rcurveto 0 -1 rlineto 180 0 rlineto stroke }def
+/g {605 0 -87 -260 689 579 Cache 2 setlinejoin 60 480 rmoveto 480 -240
+rlineto -480 -240 rlineto 482 -89 rmoveto -41 -88 -152 -94 -248 -30
+rcurveto -95 64 -191 47 -232 -41 rcurveto stroke }def
+/h {0 0 -93 671 653 849 Cache 40 setlinewidth 530 720 rmoveto -500 0
+rlineto 80 80 rlineto stroke }def
+/i {0 0 192 -267 348 757 Cache 270 650 rmoveto 0 -810 rlineto 0 0
+rlineto stroke }def
+/j {435 0 -63 -91 503 571 Cache 60 160 rmoveto 80 -160 rlineto 240 480
+rlineto stroke }def
+/l {610 0 -85 -260 692 579 Cache 545 480 rmoveto -480 -240 rlineto 480
+-240 rlineto -3 -89 rmoveto -41 -88 -152 -94 -248 -30 rcurveto -95 64 -191
+47 -232 -41 rcurveto stroke }def
+/m {880 0 -120 -58 1000 538 Cache 65 400 rmoveto 0 -320 rlineto 0 160
+rmoveto 750 0 rlineto -210 -210 rmoveto 210 210 rlineto -210 210
+rlineto stroke }def
+/n {610 0 -81 -91 691 571 Cache 65 0 rmoveto 0 480 rlineto 480 0
+rlineto 0 -480 rlineto stroke }def
+/o {690 0 -171 -99 821 749 Cache 0 320 rmoveto 0 -426 640 -426 640 0
+rcurveto 0 426 -640 426 -640 0 rcurveto Cp 0 650 rmoveto 650 -650
+rlineto stroke }def
+/p {870 0 -163 -99 1033 749 Cache 190 650 rmoveto 0 -650 rlineto 0 0
+rlineto -160 0 rmoveto 810 0 rlineto -650 240 rmoveto 240 0 rlineto 0 -240
+rlineto stroke }def
+/r {240 0 -43 -171 343 826 Cache 65 720 rmoveto 33 -135 46 -239 47 -360
+rcurveto 2 -146 -10 -265 -52 -425 rcurveto 180 785 rmoveto -175 0
+rlineto 0 0 rlineto stroke }def
+/s {370 0 -47 41 417 439 Cache 65 360 rmoveto 240 0 rlineto 0 -240
+rlineto -240 0 rlineto Cp stroke }def
+/t {575 0 -81 -99 691 739 Cache 65 0 rmoveto 0 640 rlineto 0 -320
+rlineto 480 0 rlineto stroke }def
+/u {610 0 -81 -91 691 571 Cache 65 480 rmoveto 0 -240 rlineto 0 -131 109
+-240 240 -240 rcurveto 131 0 240 109 240 240 rcurveto 0 240 rlineto -360
+-160 rmoveto 240 0 rlineto -120 120 rmoveto 0 -235 rlineto stroke }
+def
+/w {610 0 -81 -91 691 571 Cache 65 480 rmoveto 0 -480 rlineto 480 0
+rlineto 0 480 rlineto stroke }def
+/x {730 0 -98 -97 828 697 Cache 65 0 rmoveto 600 600 rlineto stroke }
+def
+/y {730 0 -98 -96 828 695 Cache 665 0 rmoveto -600 599 rlineto stroke }
+def
+/braceleft {630 0 -84 -171 714 491 Cache 2 setlinecap 565 80 rmoveto -500
+0 rlineto 0 320 rlineto 500 0 rlineto -500 -480 rmoveto 500 0 rlineto
+stroke }def
+/bar {490 0 -64 -267 554 757 Cache 65 650 rmoveto 0 -810 rlineto 0 0
+rlineto 180 810 rmoveto 0 -810 rlineto 180 810 rmoveto 0 -810 rlineto
+stroke }def
+/braceright {630 0 -84 -171 714 491 Cache 2 setlinecap 65 80 rmoveto 500
+0 rlineto 0 320 rlineto -500 0 rlineto 500 -480 rmoveto -500 0
+rlineto stroke }def
+/asciitilde {1090 0 -150 -91 1240 571 Cache 2 setlinecap 65 0 rmoveto 0
+480 rlineto 480 0 rlineto 0 -480 rlineto 0 480 rmoveto 0 -480 rlineto 480
+0 rlineto 0 480 rlineto stroke }def
+/Aring {0 0 95 650 361 869 Cache 40 setlinewidth 165 700 rmoveto 126 119
+rlineto stroke }def
+/Ccedilla {275 0 -71 -89 313 719 Cache 32 8 rmoveto 78 45 121 90 152 165
+rcurveto 20 50 23 87 23 142 rcurveto 0 67 -9 112 -40 171 rcurveto -33 64
+-68 98 -132 136 rcurveto 175 -614 rmoveto -176 0 rlineto 0 175
+rlineto stroke }def
+/aacute {1000 0 -149 168 649 852 Cache 0 260 rmoveto 500 0 rlineto 0 500
+rlineto stroke }def
+/acircumflex {1000 0 -221 168 1221 852 Cache 500 260 rmoveto 0 500
+rlineto -500 -500 rmoveto 1000 0 rlineto stroke }def
+/adieresis {800 0 -109 -91 914 571 Cache 740 0 rmoveto -675 0 rlineto 480
+480 rlineto -222 -223 rmoveto 31 -34 53 -59 72 -102 rcurveto 11 -26 16
+-45 21 -73 rcurveto 6 -30 8 -51 9 -82 rcurveto stroke }def
+/aring {0 0 80 449 346 680 Cache 40 setlinewidth 150 500 rmoveto 126 129
+rlineto stroke }def
+/ccedilla {275 0 -71 -97 313 711 Cache 32 614 rmoveto 78 -45 121 -90 152
+-165 rcurveto 20 -50 23 -87 23 -142 rcurveto 0 -67 -9 -112 -40 -171
+rcurveto -33 -64 -68 -98 -132 -136 rcurveto 175 614 rmoveto -176 0
+rlineto 0 -175 rlineto stroke }def
+/eacute {1000 0 351 168 1149 852 Cache 500 760 rmoveto 0 -500 rlineto 500
+0 rlineto stroke }def
+/ecircumflex {1000 0 351 -357 1149 877 Cache 500 -240 rmoveto 0 1000
+rlineto 0 -500 rmoveto 500 0 rlineto stroke }def
+/iacute {1000 0 351 -332 1149 352 Cache 1000 260 rmoveto -500 0
+rlineto 0 -500 rlineto stroke }def
+/icircumflex {1000 0 -221 -332 1221 352 Cache 500 -240 rmoveto 0 500
+rlineto -500 0 rmoveto 1000 0 rlineto stroke }def
+/oacute {1000 0 -149 -332 649 352 Cache 500 -240 rmoveto 0 500
+rlineto -500 0 rlineto stroke }def
+/ocircumflex {1000 0 -149 -357 649 877 Cache 500 -240 rmoveto 0 1000
+rlineto -500 -500 rmoveto 500 0 rlineto stroke }def
+/ucircumflex {1000 0 -221 -357 1221 877 Cache 500 -240 rmoveto 0 1000
+rlineto -500 -500 rmoveto 1000 0 rlineto stroke }def
+/dagger {635 0 -125 -99 725 739 Cache 570 0 rmoveto 0 640 rlineto 0 -320
+rlineto -540 0 rlineto stroke }def
+/degree {0 0 -123 565 623 875 Cache 40 setlinewidth 400 820 rmoveto 100
+-100 rlineto -500 0 rlineto 0 0 rlineto 400 -100 rmoveto 100 100
+rlineto stroke }def
+/cent {0 0 -123 510 623 600 Cache 40 setlinewidth 500 555 rmoveto -500
+0 rlineto 0 0 rlineto stroke }def
+/sterling {1095 0 -191 163 1251 527 Cache 30 240 rmoveto 1000 0
+rlineto -210 210 rlineto stroke }def
+/section {0 0 62 449 474 671 Cache 40 setlinewidth 148 500 rmoveto 120
+120 rlineto 120 -120 rlineto 0 0 rlineto stroke }def
+/bullet {0 0 -123 400 623 710 Cache 40 setlinewidth 400 655 rmoveto 100
+-100 rlineto -500 0 rlineto 0 0 rlineto 400 -100 rmoveto 100 100
+rlineto stroke }def
+/paragraph {0 0 72 452 466 618 Cache 40 setlinewidth 156 570 rmoveto 23
+-46 61 -70 112 -70 rcurveto 51 0 89 23 114 70 rcurveto stroke }def
+/copyright {0 0 80 449 348 679 Cache 40 setlinewidth 278 500 rmoveto -128
+128 rlineto stroke }def
+/trademark {0 0 199 499 381 542 Cache 0 setlinewidth 320 520 rmoveto 0
+-26 40 -26 40 0 rcurveto 0 26 -40 26 -40 0 rcurveto Cp 320 519
+rmoveto 0 0 0 0 0 0 rcurveto 0 0 0 0 0 0 rcurveto Cp 220 520 rmoveto 0
+-26 40 -26 40 0 rcurveto 0 26 -40 26 -40 0 rcurveto Cp 220 519
+rmoveto 0 0 0 0 0 0 rcurveto 0 0 0 0 0 0 rcurveto Cp Fill }def
+/notequal {580 0 -109 82 689 465 Cache 40 160 rmoveto 500 0 rlineto -5
+201 rmoveto -48 -84 -166 -95 -256 -23 rcurveto -89 72 -187 63 -235 -21
+rcurveto stroke }def
+/AE {600 0 -108 71 690 703 Cache 541 160 rmoveto -500 0 rlineto 0 160
+rmoveto 0 0 rlineto 500 0 rlineto -500 294 rlineto stroke }def
+/Oslash {0 0 126 648 384 870 Cache 40 setlinewidth 195 759 rmoveto 0 -80
+120 -80 120 0 rcurveto 0 80 -120 80 -120 0 rcurveto Cp stroke }def
+/infinity {0 0 -115 462 594 657 Cache 40 setlinewidth 475 580 rmoveto -48
+-84 -146 -93 -236 -21 rcurveto -89 72 -187 64 -235 -20 rcurveto
+stroke }def
+/plusminus {1095 0 -156 -135 1286 405 Cache 1065 160 rmoveto -1000 0
+rlineto 210 -210 rlineto 790 370 rmoveto -1000 0 rlineto stroke }def
+/lessequal {450 0 -58 -179 508 659 Cache 65 240 rmoveto 320 320
+rlineto 0 -640 rlineto Cp stroke }def
+/greaterequal {450 0 -58 -179 508 659 Cache 385 240 rmoveto -320 320
+rlineto 0 -640 rlineto Cp stroke }def
+/yen {730 0 -98 -96 828 695 Cache 665 0 rmoveto -600 599 rlineto 295 0
+rmoveto -295 0 rlineto 0 -296 rlineto stroke }def
+/mu {575 0 -111 -3 661 483 Cache 35 400 rmoveto 320 0 rlineto 87 0 160
+-73 160 -160 rcurveto 0 -86 -72 -160 -158 -160 rcurveto -322 0
+rlineto 250 160 rmoveto 0 40 -60 40 -60 0 rcurveto 0 -40 60 -40 60 0
+rcurveto Cp stroke }def
+/partialdiff {610 0 -101 27 711 748 Cache 2 setlinecap 65 240 rmoveto 240
+415 rlineto 240 -415 rlineto Cp 50 120 rmoveto 510 0 rlineto stroke }
+def
+/summation {0 0 -78 -257 658 -62 Cache 40 setlinewidth 536 -138
+rmoveto -48 -84 -166 -94 -256 -22 rcurveto -89 72 -188 63 -236 -21
+rcurveto stroke }def
+/integral {1095 0 -191 -267 1251 757 Cache 270 645 rmoveto 0 0
+rlineto 0 5 rlineto 360 0 rlineto 0 -810 rlineto -360 0 rlineto Cp 30 240
+rmoveto 1000 0 rlineto -210 -210 rmoveto 210 210 rlineto -210 210
+rlineto stroke }def
+/ordmasculine {540 0 -81 -101 616 748 Cache 268 645 rmoveto -277 0 -285
+-645 0 -647 rcurveto 280 -2 277 647 0 647 rcurveto Cp 65 0 rmoveto 413
+649 rlineto stroke }def
+/ae {550 0 -111 -311 661 791 Cache 2 setlinejoin 35 680 rmoveto 480 -240
+rlineto -480 -240 rlineto 480 80 rmoveto -480 -240 rlineto 480 240
+rmoveto -480 -240 rlineto 480 -240 rlineto stroke }def
+/oslash {0 0 126 448 384 670 Cache 40 setlinewidth 195 559 rmoveto 0 -80
+120 -80 120 0 rcurveto 0 80 -120 80 -120 0 rcurveto Cp stroke }def
+/exclamdown {1000 0 264 499 316 542 Cache 0 setlinewidth 270 520
+rmoveto 0 -26 40 -26 40 0 rcurveto 0 26 -40 26 -40 0 rcurveto Cp Fill }
+def
+/logicalnot {575 0 -81 -3 691 483 Cache 545 400 rmoveto -320 0
+rlineto -87 0 -160 -73 -160 -160 rcurveto 0 -86 72 -160 158 -160
+rcurveto 322 0 rlineto -250 160 rmoveto 0 -40 60 -40 60 0 rcurveto 0 40
+-60 40 -60 0 rcurveto Cp stroke }def
+/florin {615 0 -86 -99 731 739 Cache 65 0 rmoveto 0 640 rlineto 0 -320
+rlineto 515 0 rlineto -360 320 rmoveto 0 -640 rlineto stroke }def
+/approxequal {730 0 -98 -97 828 697 Cache 65 0 rmoveto 600 600
+rlineto -599 -303 rmoveto -1 -296 rlineto 296 0 rlineto stroke }def
+/Delta {260 0 -19 -84 290 591 Cache 136 500 rmoveto 80 -55 79 -173 0 -257
+rcurveto -79 -83 -80 -181 0 -236 rcurveto stroke }def
+/guillemotleft {1000 0 -221 193 1221 327 Cache 0 260 rmoveto 1000 0
+rlineto stroke }def
+/guillemotright {1000 0 422 -357 578 877 Cache 500 -240 rmoveto 0 1000
+rlineto stroke }def
+/ellipsis {550 0 -111 -311 661 791 Cache 2 setlinejoin 515 680
+rmoveto -480 -240 rlineto 480 -240 rlineto -480 80 rmoveto 480 -240
+rlineto -480 240 rmoveto 480 -240 rlineto -480 -240 rlineto stroke }
+def
+/endash {540 0 -116 -97 656 697 Cache 30 240 rmoveto 480 0 rlineto -5 0
+rlineto 0 0 rlineto 5 0 rlineto 0 0 rlineto -240 240 rmoveto 0 -480
+rlineto 0 0 rlineto -240 600 rmoveto 480 0 rlineto stroke }def
+/quotedblleft {310 0 -46 -269 366 804 Cache 2 setlinecap 260 695
+rmoveto -200 0 rlineto 0 -855 rlineto 200 0 rlineto -100 854 rmoveto 0
+-854 rlineto stroke }def
+/quotedblright {590 0 -81 -91 691 571 Cache 545 0 rmoveto -480 0
+rlineto 480 480 rlineto stroke }def
+/quoteleft {325 0 -46 -269 366 804 Cache 2 setlinecap 60 695 rmoveto 200
+0 rlineto 0 -855 rlineto -200 0 rlineto 100 854 rmoveto 0 -854
+rlineto stroke }def
+/quoteright {590 0 -101 -91 671 571 Cache 45 0 rmoveto 480 0 rlineto -480
+480 rlineto stroke }def
+/lozenge {725 0 -98 -229 828 829 Cache 665 720 rmoveto -300 -840
+rlineto 0 0 rlineto 0 0 rlineto -300 840 rlineto stroke }def
+/fraction {1000 0 264 699 316 742 Cache 270 720 rmoveto 0 -26 40 -26 40
+0 rcurveto 0 26 -40 26 -40 0 rcurveto Cp Fill }def
+/currency {0 0 199 699 381 742 Cache 320 720 rmoveto 0 -26 40 -26 40 0
+rcurveto 0 26 -40 26 -40 0 rcurveto Cp 320 719 rmoveto 0 0 0 0 0 0
+rcurveto 0 0 0 0 0 0 rcurveto Cp 220 720 rmoveto 0 -26 40 -26 40 0
+rcurveto 0 26 -40 26 -40 0 rcurveto Cp 220 719 rmoveto 0 0 0 0 0 0
+rcurveto 0 0 0 0 0 0 rcurveto Cp Fill }def
+/guilsinglleft {0 0 36 630 500 840 Cache 148 770 rmoveto 120 -70
+rlineto 120 70 rlineto stroke }def
+/guilsinglright {0 0 -149 653 649 787 Cache 500 720 rmoveto -500 0
+rlineto 0 0 rlineto stroke }def
+/fi {0 0 -141 641 620 880 Cache 475 780 rmoveto -48 -84 -146 -92 -236 -20
+rcurveto -89 72 -187 63 -235 -21 rcurveto stroke }def
+/fl {0 0 36 627 500 893 Cache 148 700 rmoveto 120 120 rlineto 120 -120
+rlineto 0 0 rlineto stroke }def
+/daggerdbl {0 0 72 641 466 807 Cache 40 setlinewidth 156 759 rmoveto 23
+-46 61 -70 112 -70 rcurveto 51 0 89 23 114 70 rcurveto stroke }def
+/periodcentered {545 0 -116 -217 656 577 Cache 510 480 rmoveto -80 -160
+-260 -240 -460 -240 rcurveto -20 0 rlineto 20 0 rlineto 200 0 380 -80 460
+-240 rcurveto -460 130 rmoveto -20 0 rlineto 20 0 rlineto 187 0 335 -90
+415 -250 rcurveto stroke }def
+/quotesinglbase {545 0 -106 -217 666 577 Cache 40 480 rmoveto 80 -160 260
+-240 460 -240 rcurveto 20 0 rlineto -20 0 rlineto -200 0 -380 -80 -460
+-240 rcurveto 460 130 rmoveto 20 0 rlineto -20 0 rlineto -187 0 -335 -90
+-415 -250 rcurveto stroke }def
+/quotedblbase {730 0 -98 -229 828 829 Cache 665 720 rmoveto 0 -840
+rlineto -600 0 rlineto 0 0 rlineto 0 840 rlineto stroke }def
+/perthousand {540 0 -116 -9 656 609 Cache 30 240 rmoveto 480 0
+rlineto -480 160 rmoveto 120 0 rlineto 0 1 rlineto 0 35 10 61 34 85
+rcurveto 24 24 51 34 86 34 rcurveto 35 0 60 -10 85 -34 rcurveto 25 -24
+35 -50 35 -85 rcurveto 0 -1 rlineto 120 0 rlineto -480 -320 rmoveto 480
+0 rlineto stroke }def
+/Ecircumflex {575 0 -87 -99 692 739 Cache 65 0 rmoveto 0 640 rlineto 0
+-400 rlineto 0 160 rlineto 480 0 rlineto 0 -160 rmoveto -485 0
+rlineto stroke }def
+/Aacute {730 0 -98 -96 828 695 Cache 665 0 rmoveto -600 599 rlineto 304
+-599 rmoveto 296 0 rlineto 0 296 rlineto -305 303 rmoveto -295 0
+rlineto 0 -296 rlineto stroke }def
+/Edieresis {850 0 -116 -333 966 875 Cache 65 760 rmoveto 0 -618
+rlineto 0 -197 163 -360 360 -360 rcurveto 197 0 360 163 360 360
+rcurveto 0 618 rlineto -605 -525 rmoveto 480 0 rlineto -5 0 rlineto 0 0
+rlineto 5 0 rlineto 0 0 rlineto -240 240 rmoveto 0 -480 rlineto 0 0
+rlineto stroke }def
+/Egrave {0 0 25 -96 605 681 Cache 150 0 rmoveto 330 585 rlineto
+stroke }def
+/Icircumflex {860 0 -123 -99 983 739 Cache 60 640 rmoveto 370 -640
+rlineto 370 640 rlineto Cp stroke }def
+/Idieresis {615 0 -120 -102 706 797 Cache 507 271 rmoveto -148 150 -374
+-73 -226 -223 rcurveto 148 -150 374 73 226 223 rcurveto Cp 407 320
+rmoveto -348 346 rlineto 198 30 rmoveto -225 -227 rlineto stroke }def
+/Igrave {0 0 80 649 348 879 Cache 40 setlinewidth 278 700 rmoveto -128
+128 rlineto stroke }def
+/Oacute {0 0 -45 320 445 630 Cache 40 setlinewidth 50 375 rmoveto 300 200
+rlineto stroke }def
+/Uacute {600 0 -84 71 714 703 Cache 65 160 rmoveto 500 0 rlineto 0 160
+rmoveto 0 0 rlineto -500 0 rlineto 500 294 rlineto stroke }def
+/Ugrave {730 0 -98 -97 828 697 Cache 65 0 rmoveto 600 600 rlineto -600
+-304 rmoveto 0 -296 rlineto 296 0 rlineto 304 304 rmoveto 0 296
+rlineto -296 0 rlineto stroke }def
+/circumflex {730 0 -98 -229 828 829 Cache 65 -120 rmoveto 0 840
+rlineto 600 0 rlineto 0 -840 rlineto stroke }def
+/tilde {735 0 -98 -229 828 829 Cache 65 -120 rmoveto 300 840 rlineto 0
+0 rlineto 300 -840 rlineto stroke }def
+/macron {450 0 -58 -179 508 659 Cache 65 240 rmoveto 320 320 rlineto 0
+-640 rlineto Cp 65 240 rmoveto 320 0 rlineto stroke }def
+/breve {450 0 -58 -179 508 659 Cache 385 240 rmoveto -320 320 rlineto 0
+-640 rlineto Cp 385 240 rmoveto -320 0 rlineto stroke }def
+/dotaccent {0 0 -20 370 470 680 Cache 40 setlinewidth 75 425 rmoveto 300
+200 rlineto stroke }def
+/ogonek {1000 0 -148 -99 1138 739 Cache 105 161 rmoveto 0 -160
+rlineto 256 -1 rmoveto 0 160 rlineto -120 0 rlineto 0 -80 rlineto 120 0
+rlineto 344 80 rmoveto 0 -160 rlineto 120 0 rlineto 0 160 rlineto Cp 705
+80 rmoveto 120 0 rlineto -335 80 rmoveto 0 -160 rlineto 120 0 rlineto 0
+160 rlineto Cp 490 80 rmoveto 120 0 rlineto -20 560 rmoveto 0 -160
+rlineto 120 0 rlineto 0 160 rlineto Cp 815 640 rmoveto 0 -160 rlineto 120
+0 rlineto 0 80 rlineto -120 0 rlineto -760 80 rmoveto 0 -160 rlineto 120
+0 rlineto 0 160 rlineto Cp 275 640 rmoveto 0 -160 rlineto stroke }def
+/caron {1245 0 -183 -118 1368 551 Cache 40 setlinewidth 30 480
+rmoveto 0 -480 rlineto 445 480 rmoveto 0 -480 rlineto -280 0 rmoveto -3
+-60 87 -65 90 -5 rcurveto 3 60 -87 65 -90 5 rcurveto Cp 645 -5
+rmoveto 120 475 rlineto 145 -475 rlineto -220 165 rmoveto 170 0
+rlineto 55 159 rmoveto 240 0 rlineto 0 -320 rlineto stroke }def
+end/EFN[]def
+end systemdict/currentpacking known{SavPak setpacking}if
+/DemoMoreMath $DemoMoreMath definefont pop
+/DemoMoreMath findfont/EFN get AltRT6 begin{RF}forall end
+
diff --git a/obsolete/macros/latex209/contrib/vdm/pmmr.tfm b/obsolete/macros/latex209/contrib/vdm/pmmr.tfm
new file mode 100644
index 0000000000..11dfa6d8c6
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/vdm/pmmr.tfm
Binary files differ
diff --git a/obsolete/macros/latex209/contrib/vdm/typeidx.idx b/obsolete/macros/latex209/contrib/vdm/typeidx.idx
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/vdm/typeidx.idx
diff --git a/obsolete/macros/latex209/contrib/vdm/vdm.sty b/obsolete/macros/latex209/contrib/vdm/vdm.sty
new file mode 100644
index 0000000000..f0cdd35731
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/vdm/vdm.sty
@@ -0,0 +1,1413 @@
+%%% ====================================================================
+%%% @LaTeX-style-file{
+%%% author = "Mario Wolczko",
+%%% version = "3.01",
+%%% date = "21 May 1992",
+%%% time = "21:05:48 BST",
+%%% filename = "vdm.sty",
+%%% address = "Dept of Computer Science
+%%% The University of Manchester
+%%% Oxford Road
+%%% Manchester M13 9PL
+%%% UK",
+%%% telephone = "+44-61-275-6146",
+%%% FAX = "+44-61-275-6236",
+%%% checksum = "32169 1413 3689 43831",
+%%% email = "mario@cs.man.ac.uk (Internet)",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "LaTeX, VDM specification language",
+%%% supported = "yes",
+%%% docstring = "LaTeX macros for typesetting VDM
+%%% specifications.",
+%%% }
+%%% ====================================================================
+%
+% BSI VDM documentstyle option for LaTeX
+%
+% M. Wolczko
+%
+% Last edited: Thu May 21 21:05:52 1992 by mario (Mario Wolczko) on madarch
+%
+% Dept. of Computer Science Internet: mario@cs.man.ac.uk
+% The University uucp: mcsun!uknet!man.cs!mario
+% Manchester M13 9PL JANET: mario@uk.ac.man.cs
+% U.K. Tel: +44-61-275 6146 (FAX: 6236)
+%
+% Can use either the AMS ms[ab]m fonts or the MoreMath font if
+% available: follow the instructions near the string FONT-CUSTOMIZING.
+%
+%
+%
+%----------------------------------------------------------------
+%
+% Installation-dependent features
+%
+\let\vdm\relax % signal to ps-amsfonts
+
+\newif\ifams@% use AMS fonts?
+\newif\ifps@ % PostScript-based?
+\newif\ifmoremath@ % use MoreMath font?
+\newif\ifnfss@ % NFSS?
+
+% NFSS code is enabled if \selectfont is defined;
+% this is the usual test for the nfss.
+\ifx\selectfont\@undefined
+ \global\nfss@false
+\else
+ \global\nfss@true
+\fi
+
+\ifnfss@
+ % This is a patch for an NFSS bug, from Frank Mittelbach.
+ % It applies to the versions of lfonts.new of NFSS up to
+ %\def\fileversion{v1.3a}
+ %\def\filedate{91/11/27}
+ %\def\docdate {90/01/28}
+
+ \def\extract@alph@from@version#1#2{%
+ % #1 = alph id (cs)
+ % #2 = version (string)
+ \expandafter\extract@alph@from@version@\expandafter
+ #1\csname mv@#2\endcsname}
+
+ \def\extract@alph@from@version@#1#2{%
+ % #1 = alph id (cs)
+ % #2 = version (cs)
+ \def\extract@help##1\gdef#1##2##3\@nil{%
+ \def\@tempa####1{\gdef#2{##1####1##3}}%
+ \def\content@part{##2}}%
+ \expandafter\extract@help#2\@nil
+ \def\extract@group@no@etc\select@group#1##1##2##3\@nil{%
+ % ##1 group no
+ % ##2 extra part
+ % ##3 fam/ser/sha
+ \@tempa{%
+ \getanddefine@fonts{##1}##3%
+ \gdef#1{\use@mathgroup##2{##1}}}}%
+ \expandafter\extract@group@no@etc\content@part\@nil}
+
+ \def\select@group#1#2#3#4{\relax \ifmmode
+ \begingroup
+ \let \math@fonts \@empty
+ \escapechar \m@ne
+ \getanddefine@fonts #2#4%
+ \globaldefs \@ne
+ \math@fonts
+ \endgroup
+ \gdef #1{\use@mathgroup #3{#2}}%
+ \expandafter\extract@alph@from@version
+ \expandafter#1\expandafter{\math@version}%
+ \expandafter #1\fi }
+\fi
+
+\def\@fmtname{lplain}
+\def\@psfmtname{pslplain}
+
+\def\@testcmsy{\if@usecmsy \else
+ \@latexerr{Can't use vdm with this PSLaTeX}%
+ {This PSLaTeX does not have the CMSY symbols
+ available, and cannot be used with VDM style. Get
+ a guru to rebuild PSLaTeX with the CMSY and CMMI
+ fonts included.}\fi}
+\def\@testcmmi{\if@usecmmi \else
+ \@latexerr{Can't use vdm with this PSLaTeX}%
+ {This PSLaTeX does not have the CMMI symbols
+ available, and cannot be used with VDM style. Get
+ a guru to rebuild PSLaTeX with the CMSY and CMMI
+ fonts included.}\fi}
+
+\global\ps@false
+\ifx\fmtname\@psfmtname
+ \global\ps@true \@testcmsy \@testcmmi
+\fi
+
+
+
+% FONT-CUSTOMIZING
+% Decide under which conditions, you want to use which fonts.
+% You need to set either ams@true or ams@false, and either moremath@true or
+% moremath@false.
+% If in doubt, set both to false.
+
+% This uses moremath if pslatex/NFSS is in use , AMS fonts otherwise.
+\global\moremath@false \global\ams@true
+\ifps@
+ \ifnfss@ \global\moremath@true \global\ams@false \fi
+\else\ifx\fmtname\@fmtname
+\else \global\ams@false % don't use AMS for SliTeX
+\fi\fi
+
+\ifnfss@
+ \ifams@
+ % Firstly we call amsfonts.sty to load the AMS fonts for us.
+ \ifps@
+ \input ps-amsfonts.sty
+ \else
+ \input amsfonts.sty
+ \fi
+ \edef\msx@{\hexnumber@\msa@group}
+ \edef\msy@{\hexnumber@\msb@group}
+ \else\ifmoremath@
+ \new@mathgroup\mm@group
+ \define@mathgroup\mv@normal\mm@group{mm}{m}{n}
+ \edef\mm@{\hexnumber@\mm@group}
+ % FONT-CUSTOMIZING
+ % substitute correct name of MoreMath font here
+ \new@fontshape{mm}{m}{n}{%
+ <5>pmmr at5pt%
+ <6>pmmr at6pt%
+ <7>pmmr at7pt%
+ <8>pmmr at8pt%
+ <9>pmmr at9pt%
+ <10>pmmr at10pt%
+ <11>pmmr at10.95pt%
+ <12>pmmr at12pt%
+ <14>pmmr at14.4pt%
+ <17>pmmr at17.28pt%
+ <20>pmmr at20.74pt%
+ <25>pmmr at24.88pt}{}
+ \extra@def{mm}{}{}
+ \fi\fi
+ % \itfam is only defined if oldlfonts is in force, so if it is not defined,
+ % define it.
+ \ifx\itfam\@undefined
+ \new@mathgroup\itfam
+ \ifps@
+ \new@internalmathalphabet\mathit\itfam{times}{m}{it}
+ \else
+ \new@internalmathalphabet\mathit\itfam{cmr}{m}{it}
+ \fi
+ \fi
+ \ifx\math@bgroup\@empty
+ % nomargid synatax, \mathit will just switch the \fam if the font is
+ % already loaded, but will load the font the first time.
+ \def\vdm@it{\mathit}
+ \else
+ % margid syntax, as for nomargid, but here the scope of \mathit is its
+ % argument, so we call it with a null argument to make sure the font is
+ % loaded, then switch \fam in the old way.
+ \def\vdm@it{\mathit{}\fam\itfam}
+ \fi
+\else
+ \ifams@
+ % kludges for \newfam necessary because it's \outer
+ \csname newfam\endcsname\msxfam
+ \csname newfam\endcsname\msyfam
+
+ % this is lifted from amssymbols.sty
+ \ifcase\@ptsize
+ \font\tenmsx=msam10
+ \font\sevenmsx=msam7
+ \font\fivemsx=msam5
+ \font\tenmsy=msbm10
+ \font\sevenmsy=msbm7
+ \font\fivemsy=msbm5
+ \or
+ \font\tenmsx=msam10 scaled \magstephalf
+ \font\sevenmsx=msam8
+ \font\fivemsx=msam5 scaled \magstephalf
+ \font\tenmsy=msbm10 scaled \magstephalf
+ \font\sevenmsy=msbm8
+ \font\fivemsy=msbm5 scaled \magstephalf
+ \or
+ \font\tenmsx=msam10 scaled \magstep1
+ \font\sevenmsx=msam8
+ \font\fivemsx=msam5 scaled \magstephalf
+ \font\tenmsy=msbm10 scaled \magstep1
+ \font\sevenmsy=msbm8
+ \font\fivemsy=msbm5 scaled \magstephalf
+ \fi
+
+ \textfont\msxfam=\tenmsx \scriptfont\msxfam=\sevenmsx
+ \scriptscriptfont\msxfam=\fivemsx
+ \textfont\msyfam=\tenmsy \scriptfont\msyfam=\sevenmsy
+ \scriptscriptfont\msyfam=\fivemsy
+
+ \def\hexnumber@#1{\ifnum#1<10 \number#1\else
+ \ifnum#1=10 A\else\ifnum#1=11 B\else\ifnum#1=12 C\else
+ \ifnum#1=13 D\else\ifnum#1=14 E\else
+ \ifnum#1=15 F\fi\fi\fi\fi\fi\fi\fi}
+ \def\msx@{\hexnumber@\msxfam}
+ \def\msy@{\hexnumber@\msyfam}
+ \else\ifmoremath@
+ \csname newfam\endcsname\mmfam
+ \edef\mm@{\hexnumber@\mmfam}
+ \else\fi
+ \fi
+ % NFSS-change
+ % The previous version placed \fam\itfam in \everymath to get text italic
+ % in math mode. This does not work if this font has not yet been loaded.
+ % With oldlatex, most text italic sizes are preloaded, but \huge\it may not
+ % be.
+ % With the nfss, things may be set up so almost no fonts are preloaded.
+ % we will put \vdm@it into \everymath later, here we give the definition
+ % for oldlatex, \fam\itfam as before.
+ \def\vdm@it{\fam\itfam}
+\fi
+
+%----------------------------------------------------------------
+%
+% The vdm environment
+%
+% record whether we were in horizontal mode when entering...
+\newif\ifhm@
+
+\def\vdm{\ifhmode\hm@true\else\hm@false\fi
+ \@changeMathmodeCatcodes\@postUnderPenalty10000\relax}
+
+% after an \end{vdm} the next paragraph is not indented unless a \par
+% comes first (if we entered in horizontal mode). This is a bit of a
+% kludge!
+\def\endvdm{\ifhm@\else
+ \global\let\par=\@undonoindent
+ \global\everypar={{\setbox0=\lastbox}\global\everypar={}%
+ \global\let\par=\@@par}%
+ \fi}
+
+\def\@undonoindent{\global\everypar={}\global\let\par=\@@par\@@par}
+
+%-----------------------------------------------------------------
+%
+% Controlling line and page breaks
+%
+% Text within the vdm environment is essentially mathematical in
+% nature, so requires special care. Whenever outer vertical mode is
+% entered, the \@beginVerticalVDM command should be used. This sets
+% up \leftskip, \rightskip, \baselineskip, \lineskip and
+% \lineskiplimit to conform with the overall style.
+%
+% When entering unrestricted horizontal mode, the \@beginHorizontalVDM
+% command should be used. This sets up:
+% \leftskip and \rightskip to 0,
+% \\ to do line breaking
+% ragged right line breaking, with special penalties, and
+% enters math mode.
+% \@endHorizontalVDM should be called when leaving unrestricted
+% horizontal mode.
+
+\def\@beginVerticalVDM{\@changeMargins\@changeBaselineskip}
+
+\def\@beginHorizontalVDM{\@restoreLineSeparator
+ \@restoreMargins\@raggedRight\noindent$\strut\relax}
+\def\@endHorizontalVDM{\relax\strut$}
+
+% \VDMindent is used for \leftskip within VDM, \VDMrindent for
+% \rightskip, \VDMbaselineskip for \baselineskip
+\newdimen\VDMindent \VDMindent=\parindent
+\newdimen\VDMrindent \VDMrindent=\parindent
+\def\VDMbaselineskip{\baselineskip}
+
+\def\@changeMargins{\leftskip=\VDMindent \rightskip=\VDMrindent}
+\def\@restoreMargins{\advance\hsize by-\leftskip
+ \advance\hsize by-\rightskip
+ \leftskip=0pt \rightskip=0pt}
+\def\@changeBaselineskip{\baselineskip=\VDMbaselineskip
+ \lineskip=0pt \lineskiplimit=0pt
+ % need to alter the size of struts, too
+ \setbox\strutbox\hbox{\vrule height.7\baselineskip
+ depth.3\baselineskip width\z@}}
+
+% these are used in externals, records and cases
+\def\@changeLineSeparator{\let\\=\cr} % for usr within \halign
+\def\@restoreLineSeparator{\let\\=\newline}
+
+\def\@raggedRight{\rightskip=0pt plus 1fil
+ \hyphenpenalty=-100 \linepenalty=200
+ \binoppenalty=10000 \relpenalty=10000 \pretolerance=-1}
+
+%------------------------------------------------------------------------
+%
+% Font and Character Changes
+%
+% make a-zA-Z use the \it family within math mode, and ~ mean \hook.
+% Digits 0-9 remain as normal.
+\everymath=\expandafter{\the\everymath\vdm@it
+ \@changeMathmodeCatcodes}
+\everydisplay=\expandafter{\the\everydisplay\vdm@it
+ \@changeMathmodeCatcodes}
+\mathcode`\0="0030
+\mathcode`\1="0031
+\mathcode`\2="0032
+\mathcode`\3="0033
+\mathcode`\4="0034
+\mathcode`\5="0035
+\mathcode`\6="0036
+\mathcode`\7="0037
+\mathcode`\8="0038
+\mathcode`\9="0039
+
+% If the user really wants the normal codes, she can call \defaultMathcodes
+\def\defaultMathcodes{\let\vdm@it\relax}
+
+% remember the original mathcode of minus sign
+\edef\@minuscode{\the\mathcode`\-}
+
+\def\mathminus{\mathcode`\-=\@minuscode }
+\def\textminus{\mathcode`\-="002D }
+% by default, use text minus
+%\textminus
+
+% make a : into punctuation, a - into a letter, and | mean \mid
+\ifps@
+ \def\@changeOtherMathcodes{\mathcode`\:="603A \textminus
+ \mathcode`\|="327C \mathchardef\Or="32DA % this is a rel to get 5mu spacing
+ \mathcode`\f="0166} % normal letter spacing
+\else
+ % NFSS-change
+ % \mathcode`\-="042D changed to \mathcode`\-="002D as we can not rely on
+ % \itfam being fam 4.
+ \def\@changeOtherMathcodes{\mathcode`\:="603A \textminus
+ \mathcode`\|="326A \mathchardef\Or="325F }% this is a rel to get 5mu spacing
+ \def\relbar{\mathrel{\smash\minus}}% redefine because mathcode of -
+ % has changed
+\fi
+
+% alternative underscore
+\def\@VDMunderscore{\leavevmode
+ \kern.06em\vbox{\hrule\@height .2ex\@width .3em}\penalty\@postUnderPenalty
+ \hskip 0.1em}
+
+% Allow line breaks after an underscore, but not in vdm mode (see
+% \vdm). This is so long identifiers can be broken when run
+% into paragraphs.
+\newcount\@postUnderPenalty \@postUnderPenalty=200
+
+% now require some catcode trickery to enable us to change _ when we want to
+{\catcode`\_=\active \catcode`\"=\active
+ \gdef\@changeGlobalCatcodes{% make _ a normal char
+ \catcode`\_=\active \let_=\@VDMunderscore}
+ \gdef\@changeMathmodeCatcodes{%
+ % make ~ mean \hook, " do text, @ mean subscript
+ \let~=\hook
+ \catcode`\@=8
+ \catcode`\"=\active \let"=\@mathText}
+ \gdef\underscoreoff{% make _ a normal char
+ \catcode`\_=\active \let_=\@VDMunderscore}
+ \gdef\underscoreon{% restore underscore to usual meaning
+ \catcode`\_=8}
+ \gdef\@mathText#1"{\hbox{\mathTextFont #1\/}}}
+
+\ifnfss@
+ \def\mathTextFont{\mathrm}
+\else
+ \def\mathTextFont{\rm}
+\fi
+%----------------------------------------------------------------
+%
+% Keywords
+%
+\ifx\fmtname\@fmtname
+ \def\keywordFontBeginSequence{\sf}% user-definable
+\else\ifx\fmtname\@psfmtname
+ \def\keywordFontBeginSequence{\sf}% Helvetica is OK
+\else
+ \def\keywordFontBeginSequence{\bf}% good for SliTeX
+\fi\fi
+
+\def\kw#1{\hbox{\keywordFontBeginSequence #1\/}}
+
+\def\makeNewKeyword#1#2{% use \newcommand for extra checks
+ \newcommand{#1}{\hbox{\keywordFontBeginSequence #2\/}}}
+
+\makeNewKeyword{\nil}{nil}
+\makeNewKeyword{\True}{true}
+\makeNewKeyword{\true}{true}
+\makeNewKeyword{\False}{false}
+\makeNewKeyword{\false}{false}
+\makeNewKeyword{\rem}{ rem }
+
+\def\where{\par\moveright\VDMindent\hbox{\keywordFontBeginSequence where\/}}
+
+%----------------------------------------------------------------
+%
+% monadic operator creation
+%
+\def\newMonadicOperator#1#2{\newcommand{#1}{\kw{#2\kern.16667em}\nobreak}}
+
+%----------------------------------------------------------------
+%
+% primitive numeric types
+%
+% use the AMS fonts for these if possible
+
+\ifams@
+ \mathchardef\Bool="0\msy@42 % Booleans
+ \mathchardef\Nat="0\msy@4E % Natural numbers
+ \def\Nati{\Nat_1} % Positive natural numbers
+ \mathchardef\Int="0\msy@5A % Integers
+ \mathchardef\Real="0\msy@52 % Reals
+ \mathchardef\Rat="0\msy@51 % Rationals
+\else\ifmoremath@
+ \mathchardef\Bool="0\mm@42 % Booleans
+ \mathchardef\Nat="0\mm@4E % Natural numbers
+ \def\Nati{\Nat_1} % Positive natural numbers
+ \mathchardef\Int="0\mm@5A % Integers
+ \mathchardef\Real="0\mm@52 % Reals
+ \mathchardef\Rat="0\mm@51 % Rationals
+\else
+ \def\Bool{\hbox{\bf B\/}}
+ \def\Nat{\hbox{\bf N\/}}
+ \def\Nati{\hbox{$\hbox{\bf N}_1$}}
+ \def\Int{\hbox{\bf Z\/}}
+ \def\Real{\hbox{\bf R\/}}
+ \def\Rat{\hbox{\bf Q\/}}
+\fi\fi
+\let\Natone=\Nati % just for an alternative
+
+%----------------------------------------------------------------
+%
+% Operations
+%
+% The op environment. Within op you can specify args,
+% result, etc. which are gathered into registers, and output when the
+% op env. ends.
+%
+% The optional argument is the operation name
+
+% shorthand for an operation on its own: the vdmop env.
+\def\vdmop{\vdm\op} \def\endvdmop{\endop\endvdm}
+
+% registers constructed within an op environment
+\newtoks\@operationName
+\newbox\@operationNameBox
+\newif\ifArgumentListEncountered@
+\newtoks\@argumentListTokens
+\newtoks\@resultNameAndTypeTokens
+\newbox\@externalsBox
+\newbox\@preConditionBox
+\newbox\@postConditionBox
+\newbox\@errConditionBox
+
+\def\op{% clear temporaries, deal with optional arg
+ \setbox\@operationNameBox=\hbox{}%
+ \@argumentListTokens={}\ArgumentListEncountered@false
+ \@resultNameAndTypeTokens={}%
+ \setbox\@externalsBox=\box\voidb@x
+ \setbox\@preConditionBox=\box\voidb@x
+ \setbox\@postConditionBox=\box\voidb@x
+ \par\preOperationHook
+ \vskip\preOperationSkip
+ \@beginVerticalVDM
+ \@ifnextchar [{\@opname}{}}
+
+% breaking parameters
+\newcount\preOperationPenalty \preOperationPenalty=0
+\newcount\preExternalPenalty \preExternalPenalty=2000
+\newcount\prePreConditionPenalty \prePreConditionPenalty=800
+\newcount\prePostConditionPenalty \prePostConditionPenalty=500
+\newcount\preErrConditionPenalty \preErrConditionPenalty=500
+\newcount\postOperationPenalty \postOperationPenalty=-500
+
+% gaps between bits of operations
+\newskip\preOperationSkip \preOperationSkip=2ex plus 0.5ex minus 0.2ex
+\newskip\postOperationSkip \postOperationSkip=2ex plus 0.5ex minus 0.2ex
+\newskip\postHeaderSkip \postHeaderSkip=.5ex plus .2ex minus .2ex
+\newskip\postExternalsSkip \postExternalsSkip=.5ex plus .2ex minus .2ex
+\newskip\postPreConditionSkip \postPreConditionSkip=.5ex plus .2ex minus .2ex
+\newskip\preErrConditionSkip \preErrConditionSkip=.5ex plus .2ex minus .2ex
+
+\def\endop{% make up operation
+ % IMPORTANT---don't remove the vskips in this macro
+ % if you don't want one, set it to 0pt
+ \vskip 0pt
+ \@setOperationHeader
+ \betweenHeaderAndExternalsHook
+ \vskip\postHeaderSkip
+ \ifvoid\@externalsBox
+ \betweenExternalsAndPreConditionHook
+ \else \moveright\VDMindent\box\@externalsBox
+ \betweenExternalsAndPreConditionHook
+ \vskip\postExternalsSkip
+ \fi
+ \ifvoid\@preConditionBox
+ \betweenPreAndPostConditionHook
+ \else \moveright\VDMindent\box\@preConditionBox
+ \betweenPreAndPostConditionHook
+ \vskip\postPreConditionSkip
+ \fi
+ \ifvoid\@postConditionBox
+ \betweenPostAndErrHook
+ \else \moveright\VDMindent\box\@postConditionBox
+ \betweenPostAndErrConditionHook
+ \fi
+ \ifvoid\@errConditionBox
+ \else \vskip\preErrConditionSkip
+ \moveright\VDMindent\box\@errConditionBox
+ \fi
+ \postOperationHook
+ \vskip\postOperationSkip}
+
+% hooks for user-defined expansion
+% TeX is in outer vertical mode when these are called.
+% ALWAYS leave TeX in vertical mode after these macros have been called
+\def\preOperationHook{\penalty\preOperationPenalty }
+\def\betweenHeaderAndExternalsHook{\penalty\preExternalPenalty }
+\def\betweenExternalsAndPreConditionHook{\penalty\prePreConditionPenalty }
+\def\betweenPreAndPostConditionHook{\penalty\prePostConditionPenalty }
+\def\betweenPostAndErrConditionHook{\penalty\preErrConditionPenalty }
+\def\postOperationHook{\penalty\postOperationPenalty }
+
+% combine the operation name, argument list and result
+\def\@setOperationHeader{%
+ \moveright\VDMindent\vtop{%
+ \ifArgumentListEncountered@
+ \setbox\@operationNameBox=%
+ \hbox{\unhbox\@operationNameBox$($}\fi
+ \hangindent=\wd\@operationNameBox \hangafter=1
+ \noindent\kern-.05em\box\@operationNameBox
+ \@beginHorizontalVDM
+ \ifArgumentListEncountered@\the\@argumentListTokens)\fi
+ \ \the\@resultNameAndTypeTokens
+ \@endHorizontalVDM}}
+
+% set the operation name
+% \opname{name-of-operation}
+\def\opname#1{\@opname[#1]}
+\def\@opname[#1]{\@operationName={#1}%
+ \global\setbox\@operationNameBox=\hbox{$\relax#1$\ }}
+
+% set up the argument list
+% \args{ argument \\ argument \\ argument... } where \\ forces a line break
+% This is also used in the fn environment
+\def\args{\global\ArgumentListEncountered@true \global\@argumentListTokens=}
+
+% result name and type
+\def\res{\global\@resultNameAndTypeTokens=}
+
+% externals list
+%
+% An external list could be either very long or very short, so we provide
+% two forms. One is the short \ext{..} command, the other is the externals
+% environment.
+% Externals are always separated by \\
+%
+
+% we have to mess a little to get the catcode of : right
+\def\ext{\bgroup\@makeColonActive\@ext}
+\def\@ext#1{\externals#1\endexternals\egroup}
+
+\def\externals{\global\setbox\@externalsBox=%
+ \@beginIndentedPara{\hsize}{ext }{\@setUpExternals}}
+\def\endexternals{\@endIndentedPara{\@endAlignment}}
+
+\def\@setUpExternals{\@makeColonActive\@changeLineSeparator\@beginAlignment}
+
+% more catcode trickery for :
+{\catcode`\:=\active
+ \gdef\@makeColonActive{\catcode`\:=\active \let:=&}}
+
+% the \expandafters are necessary because TeX doesn't expand
+% \halign specs when scanning for # and &
+\def\@beginAlignment{\expandafter\halign\expandafter\bgroup
+ \the\@extAlign\strut\enspace&:\enspace$##$\hfil\cr}
+\def\@endAlignment{\crcr\egroup}
+
+% the user can decide on the exact alignment of the field names
+\newtoks\@extAlign
+\def\leftExternals{\@extAlign={$##$\hfil}}
+\def\rightExternals{\@extAlign={\hfil$##$}}
+\leftExternals
+
+\makeNewKeyword{\Rd}{rd } \makeNewKeyword{\Wr}{wr }
+
+% pre-condition, post-condition and err-condition
+%
+% once again we provide short forms \pre, \post, \err and environments
+% precond, postcond and errcond
+\def\pre#1{\precond#1\endprecond}
+\def\precond{\global\setbox\@preConditionBox=%
+ \@beginMathIndentedPara{\hsize}{pre }}
+\def\endprecond{\@endMathIndentedPara}
+
+\def\post#1{\postcond#1\endpostcond}
+\def\postcond{\global\setbox\@postConditionBox=%
+ \@beginMathIndentedPara{\hsize}{post }}
+\def\endpostcond{\@endMathIndentedPara}
+
+\def\err#1{\errcond#1\enderrcond}
+\def\errcond{\global\setbox\@errConditionBox=%
+ \@beginMathIndentedPara{\hsize}{errs }}
+\def\enderrcond{\@endMathIndentedPara}
+
+
+%----------------------------------------------------------------
+%
+% Box man\oe uvres
+%
+% Here's where all the tricky box manipulation commands go
+%
+% \@beginIndentedPara begins construction of a \hbox of width #1
+% which contains keyword #2 to the left of a para in a vtop.
+% #3 is evaluated within the inner vtop.
+% endIndentedPara closes the box off; its arg. is evaluated just
+% before closing the box.
+%
+\def\@beginIndentedPara#1#2#3{\hbox to #1\bgroup \setbox0=\kw{#2}%
+ \copy0 \strut \vtop\bgroup \advance\hsize by -\wd0 #3}
+\def\@endIndentedPara#1{\strut#1\egroup\hss\egroup}
+
+% \@beginMathIndentedPara places the para in vdm mode
+\def\@beginMathIndentedPara#1#2{\@beginIndentedPara{#1}{#2}%
+ {\@beginHorizontalVDM}}
+\def\@endMathIndentedPara{\@endIndentedPara{\@endHorizontalVDM}}
+
+% \@belowAndIndent#1#2 places #2 in a vbox below and to the right of #1
+\def\@belowAndIndent#1#2{#1\hfil\break
+ \@beginMathIndentedPara{\hsize}{\qquad}#2\@endMathIndentedPara}
+
+% \@mathIndentedPara does the whole thing
+\def\@mathIndentedPara#1#2#3{\@beginMathIndentedPara{#1}{#2}#3%
+ \@endMathIndentedPara}
+%----------------------------------------------------------------
+%
+% Constructions
+%
+% Here are all the standard constructions.
+% The only tricky one is \cases.
+% Those that construct a box must be made to make that box of 0 width,
+% and force a line break immediately afterwards.
+
+% \If mm-exp \Then mm-exp \Else mm-exp \Fi
+% multi-line indented if-then-else
+%
+\def\If#1\Then#2\Else#3\Fi{\vtop{%
+ \@mathIndentedPara{0pt}{if }{#1}%
+ \@mathIndentedPara{0pt}{then }{#2}%
+ \@mathIndentedPara{0pt}{else }{#3}}}
+
+% \SIf mm-exp \Then mm-exp \Else mm-exp \Fi
+% single line if-then-else
+\def\SIf#1\Then#2\Else#3\Fi{\hbox to 0pt{\vtop{\@beginHorizontalVDM
+ \kw{if }\nobreak#1\penalty0\hskip 0.5em
+ \kw{then }\nobreak#2\penalty-100\hskip 0.5em % break here OK
+ \kw{else }\nobreak#3\@endHorizontalVDM}\hss}}
+
+% \Let mm-exp \In mm-exp2
+% multi-line let..in ; mm-exp2 is `curried'
+\def\Let#1\In{\vtop{%
+ \@mathIndentedPara{0pt}{let }{#1\hskip 0.5em\kw{in}}}\hfil\break}
+
+% \SLet mm-exp \In mm-exp
+% single-line let..in
+\def\SLet#1\In#2{\hbox to 0pt{\vtop{\@beginHorizontalVDM
+ \kw{let }\nobreak#1\hskip 0.5em
+ \kw{in }\penalty-100 #2\@endHorizontalVDM}\hss}}
+
+% multi-line cases
+%
+% \Cases{ selecting-mm-exp }
+% from-case1 & to-case1 \\
+% from-case2 & to-case2 \\
+% ...
+% from-casen & to-casen
+% \Otherwise{ mm-exp }
+% \Endcases[optional text for the rest of the line]
+
+\newif\ifOtherwiseEncountered@
+\newtoks\@OtherwiseTokens
+
+\def\Cases#1{\hbox to 0pt\bgroup \vtop\bgroup
+ \@mathIndentedPara{\hsize}{cases }{\strut
+ #1\hskip 0.5em\strut\kw{of}}%
+ \bgroup % we might be in a nested case, so we have to
+ % save the \Otherwise bits we might lose
+ \OtherwiseEncountered@false \@changeLineSeparator
+ \@beginCasesAlignment}
+
+% the user can decide on the exact alignment
+\newtoks\@casesDef
+\def\leftCases{\@casesDef={$##$\hfil}}
+\def\rightCases{\@casesDef={\hfil$##$}}
+\rightCases
+
+% the \expandafters are necessary because TeX doesn't expand
+% \halign specs when scanning for # and &
+\def\@beginCasesAlignment{\expandafter\halign\expandafter\bgroup
+ \the\@casesDef&$\,\rightarrow##$\hfil\cr}
+
+\def\Otherwise{\global\OtherwiseEncountered@true \global\@OtherwiseTokens=}
+\let\Others=\Otherwise
+
+\def\Endcases{\@endCasesAlignment \@setOtherwise \egroup \@setEndcases}
+\def\@endCasesAlignment{\crcr\egroup}
+\def\@setOtherwise{\ifOtherwiseEncountered@ % have an otherwise clause
+ \@mathIndentedPara{\hsize}{others }{%
+ \strut\the\@OtherwiseTokens\strut}
+ \fi}
+
+% must test for the optional arg to follow the end
+\def\@setEndcases{\noindent
+ \strut\kw{end}\@ifnextchar [{\@unbracket}{\@finalCaseEnd}}
+\def\@unbracket[#1]{$#1$\@finalCaseEnd}
+\def\@finalCaseEnd{\egroup\hss\egroup}%\hfil\break
+
+%----------------------------------------------------------------
+%
+% special symbols
+
+% defined as
+\ifps@
+ \def\DEF{\raise.5ex
+ \hbox{\footnotesize\underline{$\mathchar"3\cmsy@34$}}}% a \triangle
+\else
+ \def\DEF{\raise.5ex
+ \hbox{\footnotesize\underline{$\mathchar"3234$}}}% a \triangle
+\fi
+
+% cross product
+\let\x=\times
+
+% logical connectives
+%
+\def\Iff{\penalty-50\mskip 7mu plus 2mu minus 2mu
+ \Leftrightarrow\mskip 7mu plus 2mu minus 2mu}
+\let\iff=\Iff
+\def\Implies{\penalty-35\mskip 6mu plus 2mu minus 1mu \Rightarrow
+ \mskip 6mu plus 2mu minus 1mu}
+\let\implies=\Implies
+% see changeOtherMathcodes for \Or
+\let\And=\land
+\let\@and=\and
+\def\and{\ifmmode\And\else\@and\fi}
+% use \neg for logical not, or
+\def\Not{\neg\,}
+
+% quantification
+%
+\ifps@
+ \mathchardef\Exists="0224
+ \mathchardef\Forall="0222
+ \mathchardef\suchthat="22D7
+\else
+ \mathchardef\Exists="0239
+ \mathchardef\Forall="0238
+ \mathchardef\suchthat="2201
+\fi
+\def\exists{\@ifstar{\@splitExists}{\@normalExists}}
+\ifams@
+ \mathchardef\@nexists="0\msy@40 % crossed out existential quantifier
+\else\ifps@
+ \def\@nexists{\hbox to 0pt{\kern0.2ex\raise0.1ex\hbox{/}\hss}\Exists}
+\else
+ \def\@nexists{\hbox to 0pt{\raise0.15ex\hbox{/}\hss}\Exists}
+\fi\fi
+\def\nexists{\@ifstar{\@splitNExists}{\@normalNExists}}
+\def\forall{\@ifstar{\@splitForall}{\@normalForall}}
+\def\unique{\@ifstar{\@splitUnique}{\@normalUnique}}
+\def\uniqueval{\@ifstar{\@splitUniqueval}{\@normalUniqueval}}
+
+\def\@normalExists#1#2{{\Exists#1}\suchthat #2}
+\def\@normalNExists#1#2{{\@nexists#1}\suchthat #2}
+\def\@normalForall#1#2{{\Forall#1}\suchthat #2}
+\def\@normalUnique#1#2{{\Exists!\,#1}\suchthat #2}
+\def\@normalUniqueval#1#2{{\iota\,#1}\suchthat #2}
+
+\def\@splitExists#1{\@belowAndIndent{\Exists#1\suchthat}}
+\def\@splitNExists#1{\@belowAndIndent{\@nexists#1\suchthat}}
+\def\@splitForall#1{\@belowAndIndent{\Forall#1\suchthat}}
+\def\@splitUnique#1{\@belowAndIndent{\Exists!\,#1\suchthat}}
+\def\@splitUniqueval#1{\@belowAndIndent{\iota\,#1\suchthat}}
+%
+% sequents
+%
+\let\Tstlp=\vdash
+%
+\def\sequent{\@ifstar{\@splitSequent}{\@normalSequent}}
+\def\@normalSequent#1#2{{#1}\:\Tstlp\: #2}
+\def\@splitSequent#1{\@belowAndIndent{#1\;\Tstlp}}
+
+%
+% strachey brackets
+%
+% (see TeXbook, p.437)
+\ifmoremath@
+ \def\term#1{\thinspace\mathchar"4\mm@ D2\relax#1\mathchar"5\mm@ D4\thinspace}
+\else
+ \def\term#1{[\mkern-\thinmuskip[#1\relax]\mkern-\thinmuskip]}
+\fi
+% function composition
+%
+\let\compf=\circ
+
+%----------------------------------------------------------------
+%
+% function environment
+%
+% This environment is similar to the op environment, but is used for
+% function definition.
+%
+% The mandatory first parameter is the name of the function, the
+% second is the argument list.
+%
+% The *-form simply doesn't force the parentheses round the argument list
+
+\def\fn{\parens@true\@beginVDMfunction}
+\@namedef{fn*}{\parens@false\@beginVDMfunction}
+\@namedef{endfn*}{\endfn}
+
+% short form
+\def\vdmfn{\vdm\parens@true \@beginVDMfunction}
+\def\endvdmfn{\endfn\endvdm}
+\@namedef{vdmfn*}{\vdm\parens@false \@beginVDMfunction}
+\@namedef{endvdmfn*}{\endfn\endvdm}
+
+% registers used within the fn environment
+\newtoks\@fnName
+\newbox\@fnNameBox
+\newif\ifsignatureEncountered@
+\newtoks\@signatureTokens
+\newbox\@fnDefnBox
+\newif\ifparens@
+
+\def\@beginVDMfunction#1#2{%
+ \@fnName={#1}%
+ \setbox\@fnNameBox=\hbox{$#1$}%
+ \setbox\@preConditionBox=\box\voidb@x % for people who want to do
+ \setbox\@postConditionBox=\box\voidb@x% implicit defns
+ \@signatureTokens={}\signatureEncountered@false
+ \ifparens@
+ \@argumentListTokens={(#2)}%
+ \else
+ \@argumentListTokens={#2}%
+ \fi
+ \par\preFunctionHook
+ \vskip\preFunctionSkip
+ \@beginVerticalVDM
+ \@beginFnDefn}
+
+% read in a signature
+\def\signature{\global\signatureEncountered@true \global\@signatureTokens=}
+
+\def\@beginFnDefn{\global\setbox\@fnDefnBox=\vtop\bgroup
+ \hangindent=2em \hangafter=1 \@beginHorizontalVDM
+ \advance\hsize by-2em % this fools vboxes within the
+ % function body about the hanging indent...yuk.
+ % If you change the size of the indent, change the
+ % corresponding line in \endfn.
+ \copy\@fnNameBox \the\@argumentListTokens
+ \quad\DEF\penalty-100\quad }
+
+\newskip\preFunctionSkip \preFunctionSkip=2ex plus .5ex minus .2ex
+\newskip\postFunctionSkip \postFunctionSkip=2ex plus .5ex minus .2ex
+\newskip\betweenSignatureAndBodySkip
+\betweenSignatureAndBodySkip=1.2ex plus .3ex minus .2ex
+\newskip\betweenFunctionAndPreSkip
+\betweenFunctionAndPreSkip=1.2ex plus .3ex minus .2ex
+
+\def\endfn{%
+ \advance\hsize by 2em% matches the dirty \advance in \@beginFnDefn
+ \@endHorizontalVDM
+ \egroup % this ends the vtop we started in \@beginFnDefn
+ \ifsignatureEncountered@
+ \setbox0=\hbox{\unhbox\@fnNameBox$\;\mathpunct:\,$}%
+ \dimen255=\wd0 \noindent \box0
+ \vtop{\advance\hsize by-\dimen255 \@beginHorizontalVDM
+ \the\@signatureTokens \@endHorizontalVDM}\par
+ \betweenSignatureAndBodyHook
+ \vskip\betweenSignatureAndBodySkip
+ \fi
+ \moveright\VDMindent\box\@fnDefnBox\,
+ \ifvoid\@preConditionBox
+ \betweenPreAndPostConditionHook
+ \vskip\postFunctionSkip
+ \else \betweenFunctionAndPreHook
+ \vskip\betweenFunctionAndPreSkip
+ \moveright\VDMindent\box\@preConditionBox
+ \betweenPreAndPostConditionHook
+ \vskip\postPreConditionSkip
+ \fi
+ \ifvoid\@postConditionBox
+ \postFunctionHook
+ \else \moveright\VDMindent\box\@postConditionBox
+ \postFunctionHook
+ \vskip\postOperationSkip
+ \fi}
+
+\newcount\preFunctionPenalty \preFunctionPenalty=0
+\newcount\betweenSignatureAndBodyPenalty
+ \betweenSignatureAndBodyPenalty=10000
+\newcount\betweenFunctionAndPrePenalty \betweenFunctionAndPrePenalty=1000
+\newcount\postFunctionPenalty \postFunctionPenalty=-500
+
+% These are called in outer vertical mode---they must also exit in this mode
+\def\preFunctionHook{\penalty\preFunctionPenalty }
+\def\betweenSignatureAndBodyHook{\penalty\betweenSignatureAndBodyPenalty }
+\def\betweenFunctionAndPreHook{\penalty\betweenFunctionAndPrePenalty }
+\def\postFunctionHook{\penalty\postFunctionPenalty }
+
+% other function-related things
+%
+
+% function arrow
+\def\to{\penalty-100\rightarrow}
+
+% explicit lamdba function
+\def\LambdaFn{\@ifstar{\@splitLambdaFn}{\@normalLambdaFn}}
+\def\@normalLambdaFn#1#2{{\lambda#1}\suchthat#2}
+\def\@splitLambdaFn#1#2{% place body in a separate box below and to the right
+ {\lambda#1}\suchthat\hfil\break
+ \@mathIndentedPara{\hsize}{\qquad}{#2}}
+
+%----------------------------------------------------------------
+%
+% Optional fields
+%
+\def\Opt#1{\big[#1\big]}
+
+
+%----------------------------------------------------------------
+%
+% Sets
+
+% new set type
+\def\setof#1{#1-\kw{set}}
+
+% set enumeration
+\def\set#1{\{#1\}}
+
+% empty set
+\def\emptyset{\{\,\}}
+
+% usual LaTeX operators apply: \in \notin \subset \subseteq
+\let\inter=\cap \let\intersection=\inter
+\let\Inter=\bigcap \let\Intersection=\Inter
+\let\union=\cup
+\let\Union=\bigcup
+\ifps@
+ \mathchardef\minus="222D
+\else
+ \mathchardef\minus="2200
+\fi
+\def\diff{\minus} \let\difference=\diff
+
+\newMonadicOperator{\card}{card}
+\newMonadicOperator{\Min}{min}
+\newMonadicOperator{\Max}{max}
+\newMonadicOperator{\abs}{abs}
+
+%----------------------------------------------------------------
+%
+% Map type
+
+% new map type
+\def\mapof#1#2{#1\buildrel m\over\longrightarrow#2}
+
+% one-one map
+\def\mapinto#1#2{#1\buildrel m\over\longleftrightarrow#2}
+
+% map enumeration
+\def\map#1{\{#1\}}
+
+% empty map
+\def\emptymap{\{\,\}}
+
+% map operators
+%
+% use \mapsto for |->
+% overwrite
+\def\owr{\dagger}
+
+\ifmoremath@
+ \mathchardef\dres="2\mm@ B2
+ \mathchardef\rres="2\mm@ B3 % the right hand version
+\else
+ \let\dres=\lhd
+ \let\rres=\rhd
+\fi
+
+% domain subtraction
+\ifmoremath@
+ \mathchardef\dsub="2\mm@ F8
+% what a horror -- some people will insist on these daft symbols...
+\else\ifps@
+ \def\dsub{\mathbin{\hbox{$\rlap{$\mathord\minus$}\mkern-3mu\hbox{$\dres$}$}}}
+\else
+ \def\dsub{\mathbin{\hbox{$\rlap{$\mathord\minus$}\mkern-1.5mu
+ \lower.1ex\hbox{$\dres$}$}}}
+\fi\fi
+
+% range subtraction
+\ifmoremath@
+ \mathchardef\rsub="2\mm@ F9
+\else\ifps@
+ \def\rsub{\mathbin{\hbox{$\rlap{$\mathord\minus$}\mkern-1.5mu\rres$}}}
+\else
+ \def\rsub{\mathbin{\hbox{$\rlap{$\mathord\minus$}\mkern-1.5mu
+ \lower.1ex\hbox{$\rres$}$}}}
+\fi\fi
+
+\newMonadicOperator{\dom}{dom}
+\newMonadicOperator{\rng}{rng}
+\newMonadicOperator{\merge}{merge}
+
+%----------------------------------------------------------------
+%
+% Sequences
+%
+
+% new type
+\def\seqof#1{#1^*}
+
+% non-empty sequence
+\def\neseqof#1{#1^+}
+
+% enumeration
+\def\seq#1{[#1]}
+
+% empty sequence
+\def\emptyseq{[\,]}
+
+\newMonadicOperator{\len}{len}
+\newMonadicOperator{\hd}{hd}
+\newMonadicOperator{\tl}{tl}
+\newMonadicOperator{\elems}{elems}
+\newMonadicOperator{\inds}{inds}
+\def\cons#1{\kw{cons}\nobreak(#1)}
+
+% sequence concatenation
+\ifmoremath@
+ \mathchardef\sconc="2\mm@63
+\else\ifams@
+ \def\sconc{\mathbin{\hbox{\raise1ex\hbox{$\mathchar"2\msy@79$}}}}
+\else
+ % this is truly yukky
+ \def\sconc{\mathbin{\hbox{\raise1ex\hbox{$\frown$}\kern-0.47em
+ \raise0.2ex\hbox{\it\char"12}}}}
+\fi\fi
+
+% distributed concatenation
+\newMonadicOperator{\Conc}{dconc}
+
+%----------------------------------------------------------------
+%
+% type equation
+%
+\newtoks\@typeName
+\def\type#1#2{{\@typeName{#1} \preTypeHook \vskip\preTypeSkip
+ \@beginVerticalVDM
+ \moveright\VDMindent\vtop{\@beginHorizontalVDM #1=#2%
+ \@endHorizontalVDM}
+ \postTypeHook \vskip\postTypeSkip}}
+
+% restricted type (has invariant)
+\def\rtype#1#2#3{{\@typeName{#1} \preTypeHook \vskip\preTypeSkip
+ \@beginVerticalVDM
+ \moveright\VDMindent\vtop{\@beginHorizontalVDM #1=#2%
+ \@endHorizontalVDM}
+ \vskip\betweenTypeAndInvSkip
+ \moveright\VDMindent\@mathIndentedPara{\hsize}{inv }{#3}%
+ \postTypeHook \vskip\postTypeSkip}}
+
+% initialised type
+\def\ritype#1#2#3#4{{\@typeName{#1} \preTypeHook \vskip\preTypeSkip
+ \@beginVerticalVDM
+ \moveright\VDMindent\vtop{\@beginHorizontalVDM #1=#2%
+ \@endHorizontalVDM}
+ \vskip\betweenTypeAndInvSkip
+ \moveright\VDMindent\@mathIndentedPara{\hsize}{inv }{#3}%
+ \vskip\betweenInvAndInitSkip
+ \moveright\VDMindent\@mathIndentedPara{\hsize}{init }{#4}%
+ \postTypeHook \vskip\postTypeSkip}}
+
+\def\preTypeHook{} \def\postTypeHook{}
+\newskip\preTypeSkip \preTypeSkip=1.2ex plus .5ex minus .3ex
+\newskip\postTypeSkip \postTypeSkip=1.2ex plus .5ex minus .3ex
+\newskip\betweenTypeAndInvSkip
+ \betweenTypeAndInvSkip=.5ex plus .3ex minus .2ex
+\newskip\betweenInvAndInitSkip
+ \betweenInvAndInitSkip=.5ex plus .3ex minus .2ex
+
+%----------------------------------------------------------------
+%
+% Composite Objects
+%
+
+% literal composition; we have a compose and a composite env.
+
+% single line compose
+\@namedef{composite*}#1{\kw{compose }$\relax#1\relax$\kw{ of }$\relax}
+\@namedef{endcomposite*}{\relax$\kw{ end}}
+
+% multiple line version
+\def\composite#1{\bgroup\vskip\preCompositeSkip
+ \@beginVerticalVDM
+ \moveright\VDMindent\vtop\bgroup
+ \@beginHorizontalVDM
+ \kw{compose }#1\kw{ of}%
+ \@endHorizontalVDM
+ \@makeColonActive\@changeLineSeparator
+ \expandafter\halign\expandafter\bgroup\expandafter\qquad
+ \the\@recordAlign\strut\enspace&:\enspace$##$\hfil\cr}
+\def\endcomposite{\crcr\egroup % closes \halign
+ \kw{end}\egroup % ends the \vtop
+ \vskip\postCompositeSkip\egroup}
+
+\def\scompose#1#2{\@nameuse{composite*}{#1}{#2}\@nameuse{endcomposite*}}
+
+\newskip\preCompositeSkip \preCompositeSkip=1.2ex plus .5ex minus .3ex
+\newskip\postCompositeSkip \postCompositeSkip=1.2ex plus .5ex minus .3ex
+
+% record composites; likewise we have a short and a long form
+\newtoks\@recordName
+
+\def\record#1{%
+ \InvEncountered@false \InitEncountered@false
+ \@invTokens={}\@initTokens={}
+ \@recordName{#1}
+ \par\preRecordHook
+ \vskip\preRecordSkip
+ \@beginVerticalVDM
+ \moveright\VDMindent\hbox\bgroup
+ \setbox0=\hbox{$#1$\enspace::\enspace}%
+ \@makeColonActive\@changeLineSeparator
+ \advance\hsize by-\wd0 \box0
+ \@restoreMargins
+ %
+ % the \expandafters are necessary because TeX doesn't expand
+ % \halign specs when scanning for # and &
+ \vtop\bgroup\expandafter\halign\expandafter\bgroup
+ \the\@recordAlign\strut\enspace&:\enspace$##$\hfil\cr}
+
+\def\endrecord{\crcr\egroup% closes halign
+ \egroup% closes vtop
+ \egroup% closes hbox
+ \ifInvEncountered@
+ \betweenRecordAndInvHook
+ \vskip\betweenRecordAndInvSkip
+ \moveright\VDMindent\@mathIndentedPara{\hsize}{inv }{%
+ \the\@invTokens}
+ \fi
+ \ifInitEncountered@
+ \betweenInvAndInitHook
+ \vskip\betweenInvAndInitSkip
+ \moveright\VDMindent\@mathIndentedPara{\hsize}{init }{%
+ \the\@initTokens}
+ \fi
+ \par\postRecordHook
+ \vskip\postRecordSkip}
+
+\def\inv{\global\InvEncountered@true \global\@invTokens=}
+\def\init{\global\InitEncountered@true \global\@initTokens=}
+
+\newif\ifInvEncountered@
+\newif\ifInitEncountered@
+\newtoks\@invTokens
+\newtoks\@initTokens
+\def\betweenRecordAndInvHook{}
+\def\betweenInvAndInitHook{}
+\newskip\betweenRecordAndInvSkip
+ \betweenRecordAndInvSkip=0.5ex plus 0.2ex minus 0.1ex
+\newskip\betweenInvAndInitSkip
+ \betweenInvAndInitSkip=0.5ex plus 0.2ex minus 0.1ex
+
+% the user can decide on the exact alignment of the field names
+\newtoks\@recordAlign
+\def\leftRecord{\@recordAlign={$##$\hfil}}
+\def\rightRecord{\@recordAlign={\hfil$##$}}
+\rightRecord
+
+% more catcode trickery
+\def\defrecord{\bgroup\@makeColonActive\@defrecord}
+\def\@defrecord#1#2{\record{#1}#2\endrecord\egroup}
+
+\newskip\preRecordSkip \preRecordSkip=.75ex plus .3ex minus .2ex
+\newskip\postRecordSkip \postRecordSkip=.75ex plus .3ex minus .2ex
+\newcount\preRecordPenalty \preRecordPenalty=0
+\newcount\postRecordPenalty \postRecordPenalty=-100
+\def\preRecordHook{\penalty\preRecordPenalty }
+\def\postRecordHook{\penalty\postRecordPenalty }
+
+% \chg: mu function on composites
+\def\chg#1#2#3{\mu(#1,#2\mapsto#3)}
+
+%----------------------------------------------------------------
+%
+% Hooks
+%
+% hooked identifiers --- these are taken from the TeXbook, p.357, 359
+\ifps@
+ \def\leftharpoonupfill{$\m@th \mathord\leftharpoonup \mkern-6mu
+ \cleaders\hbox{$\mkern-2mu \mathchar"0\cmsy@00 \mkern-2mu$}\hfill
+ \mkern-6mu \mathchar"0\cmsy@00$} % p.357, \leftarrowfill
+\else
+ \def\leftharpoonupfill{$\m@th \mathord\leftharpoonup \mkern-6mu
+ \cleaders\hbox{$\mkern-2mu \mathord\minus \mkern-2mu$}\hfill
+ \mkern-6mu \mathord\minus$} % p.357, \leftarrowfill
+\fi
+\def\overleftharpoonup#1{{%
+ \boxmaxdepth=\maxdimen % this fixes Lamport's figures, but isn't necessary
+ % for versions after 15 Dec 87
+ \vbox{\ialign{##\crcr % p.359, \overleftarrow
+ \leftharpoonupfill\crcr\noalign{\kern-\p@\nointerlineskip}
+ $\hfil\displaystyle{#1}\hfil$\crcr}}}}
+
+\let\hook=\overleftharpoonup % c'est simple comme bonjour
+
+%-----------------------------------------------------------------
+%
+% General formula environment, a bit like \[ \] but is
+% indented to \VDMindent and will take \\
+%
+%
+\def\form#1{\formula #1\endformula}
+
+\def\formula{\par\preFormulaHook
+ \vskip\preFormulaSkip
+ \@beginVerticalVDM
+ \bgroup
+ \moveright\VDMindent\vtop\bgroup\@beginHorizontalVDM}
+\def\endformula{\@endHorizontalVDM\egroup % ends the vtop
+ \egroup % ends the overall group
+ \par\postFormulaHook
+ \vskip\postFormulaSkip}
+
+\newskip\preFormulaSkip \preFormulaSkip=1.2ex plus .5ex minus .3ex
+\newskip\postFormulaSkip \postFormulaSkip=1.2ex plus .5ex minus .3ex
+\newcount\preFormulaPenalty \preFormulaPenalty=0
+\newcount\postFormulaPenalty \postFormulaPenalty=-100
+\def\preFormulaHook{\penalty\preFormulaPenalty }
+\def\postFormulaHook{\penalty\postFormulaPenalty }
+
+%----------------------------------------------------------------
+%
+% Formula within a box, when width is unknown
+%
+% equivalent to \parbox[t]{\hsize}{\@beginHorizontalVDM
+% ...\@endHorizontalVDM}
+%
+\def\formbox{\vtop\bgroup\@beginHorizontalVDM}
+\def\endformbox{\strut\@endHorizontalVDM\egroup}
+
+%----------------------------------------------------------------
+%
+% special font for constants
+%
+\def\constantFont{\sc}
+\def\const#1{\hbox{\constantFont{#1}\/}}
+
+%----------------------------------------------------------------
+%
+% line break and indent
+%
+\def\T#1{\\\hbox to #1em{}}
+
+%----------------------------------------------------------------
+%
+% line break and push line after to RHS
+%
+\def\R{\\\hspace*{\fill}}
+
+%----------------------------------------------------------------
+%
+% Proofs
+%
+% a proof environment for typesetting proofs in the "natural
+% deduction" style.
+
+\newdimen\ProofIndent \ProofIndent=\VDMindent
+\newdimen\ProofNumberWidth \ProofNumberWidth=\parindent
+
+\def\proof{\par\preProofHook
+ \vskip\preProofSkip
+ \let\&=\@proofLine
+ \moveright\ProofIndent\vtop\bgroup
+ \@indentLevel=1
+ \advance\linewidth by-\ProofIndent
+ \begin{tabbing}%
+ \hbox to\ProofNumberWidth{}\=\kill} % template line
+\def\endproof{\end{tabbing}\advance\linewidth by\ProofIndent
+ \egroup % ends the \vtop
+ \par\postProofHook
+ \vskip\postProofSkip}
+
+\newskip\preProofSkip \preProofSkip=1.2ex plus .5ex minus .3ex
+\newskip\postProofSkip \postProofSkip=1.2ex plus .5ex minus .3ex
+
+\newcount\preProofPenalty \preProofPenalty=-100
+\newcount\postProofPenalty \postProofPenalty=0
+\def\preProofHook{\penalty\preProofPenalty }
+\def\postProofHook{\penalty\postProofPenalty }
+
+\def\From{\@indentProof\kw{from }\=%
+ \global\advance\@indentLevel by 1
+ \@enterMathMode}
+\def\Infer{\global\advance\@indentLevel by-1
+ \@indentProof\kw{infer }\@enterMathMode}
+\def\@proofLine{\@indentProof\@enterMathMode}
+\def\by{\`}
+
+\newcount\@indentLevel
+\newcount\@indentCount
+\def\@indentProof{% do \>, \@indentLevel times
+ \global\@indentCount=\@indentLevel
+ \@gloop \>\global\advance\@indentCount by-1
+ \ifnum\@indentCount>0
+ \repeat}
+
+% need special loop macros that works in across boxes
+\def\@gloop#1\repeat{\gdef\@body{#1}\@giterate}
+\def\@giterate{\@body \global\let\@gloopNext=\@giterate
+ \else \global\let\@gloopNext=\relax \fi \@gloopNext}
+
+% this enters math mode and sets the LaTeX macros \@stopfield up
+% to exit math mode
+\def\@enterMathMode{\def\@stopfield{$\egroup}$}
+
+%----------------------------------------------------------------
+\def\VDMauthor{M.Wolczko,
+CS Dept.,
+Univ. of Manchester, UK.
+mario@cs.man.ac.uk
+uknet!man.cs!mario}
+
+\def\VDMversion{vdm3.0}
+
+\typeout{BSI VDM style option <1 May 1992>}
+%----------------------------------------------------------------
+%
+% Global changes
+%
+% All things that have to be invoked before the user's stuff appears
+% should go here.
+%
+% by default the math spacing and changes to @ and _ apply everywhere
+\@changeOtherMathcodes \@changeGlobalCatcodes
+%
+%-------------------the end--------------------------------------
+\endinput
+%
+% Summary of penalties
+%
+% Penalties in vertical mode
+%
+% \preOperationPenalty before an op begins
+% \preExternalPenalty between the header and externals of an op
+% \prePreConditionPenalty before the precondition
+% \prePostConditionPenalty before the postcondition
+% \postOperationPenalty at the end of an op
+%
+% \preFunctionPenalty before a fn begins
+% \betweenSignatureAndBodyPenalty -guess
+% \postFunctionPenalty after a fn ends
+%
+% \preRecordPenalty before a record
+% \postRecordPenalty after a record
+%
+% etc for formula, proof
+%
+% Penalties in horizontal mode in boxes
+%
+% \linepenalty 101 \@raggedRight
+% `if mm-exp ^ then..' 0 \SIf
+% `if ... then mm-exp ^ else' -100 \SIf
+% `let mm-exp in ^ ...' -100 \SLet
+% `map mm-exp ^ to ...' -50 \map
+% ^\iff -50 \iff
+% ^\implies -35 \implies
+% func(args) \DEF^ -100 \begin{fn}
+% \binoppenalty 10000
+% \relpenalty 10000
+% \hyphenpenalty -100 \suchthat
+% ^\to -100 \to
+% _^ 100 \@VDMunderscore
+%
diff --git a/obsolete/macros/latex209/contrib/vdm/vdm.tex b/obsolete/macros/latex209/contrib/vdm/vdm.tex
new file mode 100644
index 0000000000..ba10a34860
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/vdm/vdm.tex
@@ -0,0 +1,1533 @@
+%%% ====================================================================
+%%% @LaTeX-file{
+%%% author = "Mario Wolczko",
+%%% version = "4",
+%%% date = "21 May 1992",
+%%% time = "21:06:53 BST",
+%%% filename = "vdm.tex",
+%%% address = "Dept of Computer Science
+%%% The University of Manchester
+%%% Oxford Road
+%%% Manchester M13 9PL
+%%% UK",
+%%% telephone = "+44-61-275-6146",
+%%% FAX = "+44-61-275-6236",
+%%% checksum = "44880 1533 6504 51347",
+%%% email = "mario@cs.man.ac.uk (Internet)",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "LaTeX, VDM specification language",
+%%% supported = "yes",
+%%% docstring = "Documentation for vdm.sty",
+%%% }
+%%% ====================================================================
+\documentstyle[vdm]{article}
+
+\title{Typesetting BSI VDM with \LaTeX}
+\author{Mario Wolczko\\
+Dept. of Computer Science\\
+The University\\
+Manchester M13 9PL\\
+U.K.\\
+\verb;mario@cs.man.ac.uk;, {\tt ...!uknet!man.cs!mario}}
+\date{21 May 1992 \\
+Version 626836.626836}
+
+\newcommand{\Vdm}{{\tt vdm\/}}
+
+\newenvironment{dangerous}{\par\vspace{5pt}\bgroup\small\noindent}%
+ {\par\egroup\vspace{5pt}}
+
+\newlength{\righthalf} \setlength{\righthalf}{0.5\textwidth}
+\newlength{\lefthalf} \setlength{\lefthalf}{0.4\textwidth}
+\newenvironment{leftside}{\noindent\hspace{0.1\textwidth}%
+ \parbox[t]{\lefthalf}\bgroup\vspace{10pt}%
+ \noindent\begin{vdm}\leftskip=0pt\VDMindent=0pt}%
+ {\end{vdm}\egroup}
+\newenvironment{rightside}{\parbox[t]{\righthalf}\bgroup\begin{verbatim}}%
+ {\egroup}
+
+\renewcommand{\^}[1]{$\langle${\rm #1\/}$\rangle$}
+
+\newcommand{\mmexp}{\^{math-mode-expression}}
+\newcommand{\cs}[1]{\leavevmode\hbox{\tt \string#1}}
+
+\setlength{\VDMindent}{3\parindent}
+
+\setlength{\preOperationSkip}{0pt}
+\setlength{\preFunctionSkip}{0pt}
+\setlength{\preTypeSkip}{0pt}
+\setlength{\preCompositeSkip}{0pt}
+\setlength{\preRecordSkip}{0pt}
+\setlength{\preFormulaSkip}{0pt}
+
+\begin{document}
+\maketitle
+
+\tableofcontents
+
+\section{Overview}
+
+This document describes a style option, \Vdm, for use with
+\LaTeX. The purpose of \Vdm\ is to make the typesetting of VDM
+specifications easy. Other goals are:
+\begin{itemize}
+\item To enable users of \Vdm\ to communicate their specifications
+ to others, possibly in a variety of concrete syntaxes, without
+ having to change their source files
+\item To enable a user of \Vdm\ to concentrate on his%
+ \footnote{Read `his/her' for every occurence of `his'.}
+ specifications, and ignore the detailed layout as much as
+ possible. A side effect of this is that the effort required
+ to improve layout is concentrated in one place, within the
+ \Vdm\ macros.
+\end{itemize}
+(This version of the \Vdm\ style option uses the {\sc bsi} concrete
+syntax. Any document prepared using earlier versions is still
+accepted, but the way it is typeset will match more closely the {\sc
+bsi} standard concrete syntax. There are also a few additional
+commands (summarised at the end). Note that this is {\em not\/} a
+complete style file for all of {\sc bsi vdm}.)
+
+But enough evangelising. Let's get to the the real meat. This
+document is broken up into the following sections:
+\begin{itemize}
+\item General points about using \Vdm
+\item Typesetting formulas
+\item How to typeset data types
+\item How to typeset functions
+\item How to typeset operations
+\item How to typeset proofs
+\item How to tailor/extend the system for your own
+ application.
+\end{itemize}
+You should definitely read the first two sections---then you'll know
+roughly what you're in for, and whether you want to continue. The
+remaining sections can be read as and when you need them.
+
+\begin{dangerous}
+In keeping with the best traditions of \TeX\ documentation, paragraphs
+that contain material that is not essential for novices, but vital if
+you want to parameterise or extend the system, are in smaller type,
+like this one.
+\end{dangerous}
+
+Just to give a preliminary example, here is some output from \Vdm, and
+the corresponding input:
+
+\begin{vdm}
+\begin{fn}{dec}{ptrs,om} \\
+\signature{
+ \setof{Oop} \x \mapof{Oop}{Object} \to \mapof{Oop}{Object}
+}
+\If ptrs = \emptyset
+\Then om
+\Else \Let gone = \set{p \in ptrs | RC(om(p)) = 1} \In
+ \Let om' = gone \dsub om \In
+ \Let om'' = om' \owr
+ \map{p \mapsto \chg{om'(p)}{RC}{RC\minus 1}\R
+ | p \in ptrs \diff gone} \In
+ dec(\Union\set{\elems{BODY(om(p))} | p \in gone}, om'')
+\Fi
+\end{fn}
+
+\begin{op}[DESTROYPTR]\label{op-ex}
+\args{ Obj, Ptr : Oop }
+\ext{ \Wr OM : \mapof{Oop}{Basic_Object} }
+\pre{ ptr \in \elems{BODY(om(obj))} }
+\post{ om = ~{om} \owr \map{ obj \mapsto
+ \chg{om(obj)}{BODY}{BODY \diff \set{ptr}}}}
+\end{op}
+\end{vdm}
+
+% this is verbatim input
+\begin{verbatim}
+\begin{vdm}
+\begin{fn}{dec}{ptrs,om} \\
+\signature{
+ \setof{Oop} \x \mapof{Oop}{Object} \to \mapof{Oop}{Object}
+}
+\If ptrs = \emptyset
+\Then om
+\Else \Let gone = \set{p \in ptrs | RC(om(p)) = 1} \In
+ \Let om' = gone \dsub om \In
+ \Let om'' = om' \owr
+ \map{p \mapsto \chg{om'(p)}{RC}{RC\minus 1}
+ | p \in ptrs \diff gone} \In
+ dec(\Union\set{\elems{BODY(om(p))} | p \in gone}, om'')
+\Fi
+\end{fn}
+
+\begin{op}[DESTROYPTR]
+\args{ Obj, Ptr : Oop }
+\ext{ \Wr OM : \mapof{Oop}{Basic_Object} }
+\pre{ ptr \in \elems{BODY(om(obj))} }
+\post{ om = ~{om} \owr \map{ obj \mapsto
+ \chg{om(obj)}{BODY}{BODY \diff \set{ptr}}}}
+\end{op}
+\end{vdm}
+
+\end{verbatim}
+
+
+
+\section{Using \Vdm---General Points}
+
+To get at \Vdm, include {\tt vdm\/} as a document style option, e.g.:
+\begin{verbatim}
+ \documentstyle[12pt,vdm]{report}
+\end{verbatim}
+\begin{dangerous}
+To the best of my knowledge, the use of \Vdm\ does not conflict with
+any of the other document styles, except when something has been
+redefined. An attempt will be made to document all such redefinitions.
+\end{dangerous}
+Once \Vdm\ has been included, you can then use the {\tt vdm\/}
+environment. For example,
+\begin{verbatim}
+ \begin{vdm}
+ ....
+ \end{vdm}
+\end{verbatim}
+All specification material should be placed within the {\tt vdm\/}
+environment. The use of \Vdm\ only affects text within the {\tt vdm\/}
+environment, except for the following global changes (which are only
+relevant when in math or display math mode):
+\begin{enumerate}
+\item The mathcodes of a\dots z and A\dots Z have been changed. In
+ plain English, this means that when you type letters in math
+ mode the inter-letter spacing is different than it would be
+ had you not included \Vdm\ as an option.\footnote{This is not
+ the case if you are using PS\LaTeX.} This is because
+ \LaTeX\ math mode is usually tuned for single letter
+ identifiers, as used by mathematicians for millenia. However,
+ you and I both know that most meaningful identifiers have more
+ than one letter in them, so \Vdm\ provides better spacing for
+ them. As an example, if you type \verb;$identifier$;, \LaTeX\
+ would normally print {\defaultMathcodes$identifier$}, whereas
+ the use of \Vdm\ will yield $identifier$.
+ \begin{dangerous}If you really want to use the
+ `normal' inter-letter spacing, say \cs\defaultMathcodes.
+ \end{dangerous}
+\item Underscore gives you an underscore, and not a subscript. If
+ you want a subscript use \verb;@;, e.g.,~$x@0$ is typed
+ \verb;x@0;, or use \TeX's \cs\sb\ macro. An \verb;@; is still an
+ @ when not in math mode. Occasionally you may find that an @
+ in math mode {\em doesn't\/} give you a subscript
+ (particularly when used with moving arguments). Should
+ this happen, you are advised to use \TeX's \cs\sb\ macro,
+ e.g.,~\verb;$x\sb0$;.
+ \begin{dangerous}
+ If you don't use
+ underscores much, and you want to use \verb;_; for subscripts,
+ you can say \cs\underscoreon\ (and \cs\underscoreoff\ to
+ make it revert to its usual meaning in \Vdm).
+ \end{dangerous}
+\item \verb;-; typesets a hyphen, and not a minus sign. VDM specifications
+ usually contain a lot more
+ \begin{vdm}$long-identifiers$\end{vdm}\
+ than subtractions, so
+ on the whole this alteration should save effort.
+ If you really want
+ to do a single subtraction sign, use \cs\minus.
+ If you find the default is inappropriate, you can revert to
+ the original behaviour using \cs\mathminus; \cs\textminus\ is
+ the inverse. Example: \verb;a-b \mathminus a-b; gives
+ \begin{vdm}$a-b \ne\mathminus a-b$\end{vdm}.
+\item \verb;|; gives you a \begin{vdm}$|$\end{vdm}, and not a $\vert$.
+ Do you see the difference? No? The former goes between things,
+ e.g., \begin{vdm}$\set{x|p(x)}$\end{vdm}, while the latter is
+ a delimiter, e.g.,~$\vert x\vert$.
+ In VDM, most people use the former more than the latter, so again this
+ seems reasonable.
+ If you really want a $\vert$ (the second kind),
+ say \cs\vert.
+\item In \TeX\ and \LaTeX\ \verb;~; has always been a tie (a space
+ between words at which the line is never broken). Well
+ in \Vdm\ it isn't. \verb;~x; will give you a
+ \begin{vdm}$~x$\end{vdm}. For long identifiers, such as
+ \begin{vdm}$~{long}$\end{vdm}, say
+ \verb;~{long};.
+ {\em Note that this only applies in math
+ mode; elsewhere a \verb;~; is still a tie.}
+\item In math mode, the double quote character \verb;"; is actually
+ a macro. Placing text between pairs of double quotes causes
+ that text to be set in the normal text font. For example,
+ \verb;$x="a variable"$; gives you $x="a variable"$.
+ \begin{dangerous}
+ \indent If you want to change the font used for text placed between
+ quotes, redefine the command \cs\mathTextFont. By default
+ it is defined to be \cs\rm\ (\cs\mathrm for the New Font
+ Selection Scheme).
+ \end{dangerous}
+\item The following macros have been altered in a non-trivial way:
+ \cs\forall, \cs\exists\ (see later).
+\end{enumerate}
+
+\begin{dangerous}
+When you typeset some VDM within the {\tt vdm\/} environment, by
+default it is set in from the left margin by an amount equal to
+\cs\parindent, the indentation at the beginning of each paragraph.
+If you want to change this, change the value of \cs\VDMindent, e.g.:
+\begin{verbatim}
+ \setlength{\VDMindent}{0cm}
+\end{verbatim}
+will make your specs come out flush left. This document has been
+typeset with \cs\VDMindent\ equal to $3\times \cs\parindent$.
+
+Similarly, the right hand margin is controlled by a parameter called
+\cs\VDMrindent. By default it is also set to \cs\parindent.
+\end{dangerous}
+
+\begin{dangerous}
+You can have a particular line spacing in force within the
+{\tt vdm} environment.
+The spacing within a {\tt vdm} environment is dictated by the
+\cs\VDMbaselineskip\ command. Note that this is {\em not\/} a
+length, but a command. By default it expands to \cs\baselineskip\
+so that the line spacing is that of the surrounding text, whatever
+size that may be. To make it smaller, you may want to say
+\begin{verbatim}
+ \renewcommand{\VDMbaselineskip}{0.8\baselineskip}
+\end{verbatim}
+for example.
+\end{dangerous}
+
+
+\section{Typesetting formulas}
+
+Most of the text you enter within {\tt vdm\/} environments will be in
+\TeX's math mode, but VDM does its best to conceal this fact from you,
+so that you should rarely, if ever, have to type a dollar sign.
+However, several new features have been provided for the typesetting
+of logical formulas. Firstly, operators with sensible names have been
+provided: use \cs\Iff, \cs\Implies, \cs\Or, \cs\And\
+and \cs\Not\ for the operators~\begin{vdm}%
+$\Leftrightarrow,\Rightarrow,\Or,\And$ and $\Not$\end{vdm}.
+(To retain compatibility with a previous version, \cs\iff,
+\cs\implies, \cs\and\ and \cs\neg\ are still provided, but
+\cs\or\ is not.)
+
+A major change has come in the area of quantified expressions. In
+VDM, they
+have very well-defined forms, so the \LaTeX\ sequences \cs\forall\
+and \cs\exists\ have been re-defined to take arguments. For
+example, to get
+\begin{vdm}
+\begin{formula}
+\exists{x \in S}{p(x)}
+\end{formula}
+\end{vdm}
+\noindent type
+\begin{verbatim}
+ \exists{x \in S}{p(x)}
+\end{verbatim}
+Note the separating dot that was put in auto\-matically. If you want
+one of these dots by itself, you can have one by saying
+\cs\suchthat.
+
+In addition, two new quantifiers, \cs\unique\ and \cs\nexists, have
+been added:
+
+
+\noindent\begin{minipage}{\textwidth}\begin{leftside}
+\begin{formula}
+\unique{x \in S}{p(x)}
+\end{formula}
+\begin{formula}
+\nexists{x \in S}{p(x)}
+\end{formula}
+\end{leftside}\begin{rightside}
+\unique{x \in S}{p(x)}
+\nexists{x \in S}{p(x)}
+\end{verbatim}\end{rightside}\end{minipage}
+
+Additionally, to complement \cs\unique, there is \cs\uniqueval. This
+is the so-called ``iota-function'' that returns the unique value, if
+there is one:
+
+\noindent\begin{minipage}{\textwidth}\begin{leftside}
+\begin{formula}
+\uniqueval{x \in S}{p(x)}
+\end{formula}
+\end{leftside}\begin{rightside}
+\uniqueval{x \in S}{p(x)}
+\end{verbatim}\end{rightside}\end{minipage}
+
+
+\begin{dangerous}
+If you want to use the old versions of \cs\forall\ and
+\cs\exists\ they are available under the pseudonyms of
+\cs\Forall\ and \cs\Exists.
+\end{dangerous}
+
+If you find that the body of the quantified expression is too long to
+fit comfortably on a line, there are *-forms of the above commands
+that place the body of the quantified expression on a new line,
+slightly indented. For example,
+
+\begin{vdm}
+\begin{formula}
+\exists*{x \in S}{
+ p(x) \And q(x) \Or \Not p(x) \Implies r(x) \And S(x)}
+\end{formula}
+\end{vdm}
+
+\noindent can be obtained with
+\begin{verbatim}
+ \exists*{x \in S}{p(x) \And q(x) \Or \Not p(x)
+ \Implies r(x) \And S(x)}
+\end{verbatim}
+
+If you need ``Strachey'' brackets, e.g., $M\term{e}$, place the
+material to appear within the brackets within \verb;\term{ ... };,
+thus: \verb;$M\term{e}$;.
+
+A special control sequence, \cs\const, is available for constants.
+To get, for example, $\const{Yes}|\const{No}$, type
+\verb;\const{Yes}|\const{No};.
+\begin{dangerous}
+If you don't like the font that constants are set in, you can change
+them by redefining the command \cs\constantFont. By
+default it expands to \cs\sc.
+\end{dangerous}
+
+\subsection{The {\tt formula} Environment}
+
+Occasionally you may want a formula on its own, between paragraphs of
+text, say. Normally, the provided environments and commands suffice,
+but sometimes they don't. If you need an odd equation to stand on its
+own, use the {\tt formula} environment:
+\begin{verbatim}
+ \begin{formula}
+ x = 10
+ \Or \forall{i \in \Nat}{i \ne 10 \Implies i \ne x}
+ \end{formula}
+\end{verbatim}
+\sloppy
+The {\tt formula} environment is similar to displayed math mode,
+except: formulas are indented by \cs\VDMindent, not
+\cs\mathindent, and line breaks can be made using \cs\\.
+Also, within the {\tt formula} environment everything appears flush
+left, as opposed to being centred.
+
+\subsection{Constructions}
+
+A particularly nice feature of \Vdm\ is that you can typeset multi-line
+constructions such as those in the earlier example without having to
+worry about, say, lining up ``thens'' and ``elses'' with ``ifs''.
+In the following definitions, whenever you see the term \mmexp, you
+should type an expression as if in math mode, but you needn't put
+dollar signs in. All of the constructions described below can be used
+where a \mmexp\ is required. Each construction is shown by example;
+the output on the left results from the input on the right.
+Also note that each macro name begins with an upper-case letter.
+\TeX\ and \LaTeX\ frequently use the lower-case variants for
+completely unrelated things. Naturally, chaos will ensue if you mix
+the names up.
+
+Typesetting an \kw{if} is done using \cs\If\ \mmexp \cs\Then\ \mmexp
+\cs\Else\ \mmexp \cs\Fi.
+
+\noindent\begin{minipage}{\textwidth}\begin{leftside}
+ \begin{formula}
+ \If x\in S
+ \Then S \diff x
+ \Else \emptyset
+ \Fi
+ \end{formula}
+\end{leftside}%
+\begin{rightside}
+\If x\in S
+\Then S \diff x
+\Else \emptyset
+\Fi
+\end{verbatim}
+\end{rightside}\end{minipage}
+
+If you nest \cs\If{}s then you must enclose inner \cs\If{}s within
+braces:
+
+\noindent\begin{minipage}{\textwidth}\begin{leftside}
+ \begin{formula}
+ \If \ldots
+ \Then{
+ \If \ldots
+ \Then \ldots
+ \Else \ldots
+ \Fi
+ }\Else
+ \Fi
+ \end{formula}
+\end{leftside}\begin{rightside}
+\If ...
+\Then{
+ \If ...
+ \Then ...
+ \Else ...
+ \Fi
+}\Else
+\Fi
+\end{verbatim}\end{rightside}\end{minipage}
+
+You are advised to place the extra braces exactly as above; don't let
+extraneous spaces intervene between the keywords and the braces.
+
+The \cs\If\ macro always starts a new line for the \kw{then} and
+\kw{else} parts. If you want \TeX\ to try to choose line breaks, use
+\cs\SIf\ instead:
+
+\noindent\begin{minipage}{\textwidth}\begin{leftside}
+ \begin{formula}
+ \SIf a=b
+ \Then c=d+e
+ \Else p=q+r+s+t+u
+ \Fi
+ \end{formula}
+\end{leftside}%
+\begin{rightside}
+\SIf a=b
+\Then c=d+e
+\Else p=q+r+s+t+u
+\Fi
+\end{verbatim}
+\end{rightside}\end{minipage}
+
+\mbox{\kw{let}\dots\kw{in}} constructions are done in a similar way:
+\cs\Let{} \mmexp{} \cs\In{} \mmexp, and \cs\SLet{} \mmexp{}
+\cs\In{} \mmexp.
+
+\noindent\begin{minipage}{\textwidth}\begin{leftside}
+ \begin{formula}
+ \Let x=f(y,z) \In
+ g(x)+h(x)
+ \end{formula}
+\end{leftside}%
+\begin{rightside}
+\Let x=f(y,z) \In
+g(x)+h(x)
+\end{verbatim}
+\end{rightside}\end{minipage}
+
+\noindent\begin{minipage}{\textwidth}\begin{leftside}
+ \begin{formula}
+ \SLet x=f(y,z) \In{x^2}
+ \end{formula}
+\end{leftside}%
+\begin{rightside}
+\SLet x=f(y,z) \In{x^2}
+\end{verbatim}
+\end{rightside}\end{minipage}
+
+Notice that \cs\SLet\ takes a second argument, which is part of the
+same `paragraph', where \cs\Let\ does not.
+
+The typesetting of a \kw{cases} clause is more complicated. It takes
+the form:
+\begin{verse}
+\verb;\Cases{; \mmexp \verb;}; \\
+from-\mmexp \verb;&; to-\mmexp \cs\\ \\
+from-\mmexp \verb;&; to-\mmexp \cs\\ \\
+\dots \\
+\verb;\Otherwise{; \mmexp \verb;}; \\
+\verb;\Endcases;
+\end{verse}
+
+The \cs\Otherwise\ field is optional. This construction follows a
+general pattern that is common in \Vdm\ input: lists of things are
+separated by \cs\\s, and subfields are separated by \verb;&;s or
+\verb;:;s.
+\begin{dangerous}
+In reality, there is another, optional argument, after the
+\cs\Endcases. If you were to try typesetting something like
+\begin{verbatim}
+ (... var = \Cases ...
+ \Endcases)
+\end{verbatim}
+you'd find the closing right parenthesis in an unexpected place (on
+the same line as the $=$, in fact). To get text to the right of the
+\cs\Endcases\ you can place an optional argument within brackets
+after it:
+\begin{verbatim}
+ (... var = \Cases ...
+ \Endcases[)]
+\end{verbatim}
+Admittedly, this looks a little strange, but it does work.
+\end{dangerous}
+
+Here is an example of \cs\Cases\ in action:
+
+\begin{formula}
+ \Cases{ select(x) }
+ \nil & \emptyset \\
+ mk-Lst(hd,tl) & \set{hd} \union \elems{tl}
+ \Otherwise{ x }
+ \Endcases
+\end{formula}
+
+\begin{verbatim}
+ \Cases{ select(x) }
+ \nil & \emptyset \\
+ mk-Lst(hd,tl) & \set{hd} \union \elems{tl}
+ \Otherwise{ x }
+ \Endcases
+\end{verbatim}
+
+Note the \cs\\ is a {\em separator\/} and not a {\em
+terminator\/}---you don't need one after the last item. Also, the
+\cs\Otherwise\ can appear anywhere between the \verb;\Cases{}; and the
+\cs\Endcases, but it will always be typeset last.
+\begin{dangerous}
+Some people prefer the selectors to appear lined up on the left, some
+on the right. If you want them to appear on the left, say
+\cs\leftCases; if you want them on the right, say
+\cs\rightCases. The scope of the \cs\leftCases\ and
+\cs\rightCases\ commands is the current group. By default, you
+get \cs\rightCases.
+\end{dangerous}
+
+\subsubsection{The {\tt formbox} Environment}
+
+Occasionally you might find that you want to put a line break in a
+place that can't handle \cs\\. For example, if you have a \cs\Cases\
+command and the rhs of a particular case is too big, you can't use
+\cs\\ to break the line directly, as it will be interpreted as the
+separator between cases. Then you must the {\tt formbox} environment.
+It is similar to the {\tt formula} environment in that you can put all
+sorts of things in it, but it can be used within other constructions,
+unlike the {\tt formula} environment, which can only be used at the
+outermost level.
+
+This example should convey the general idea:
+\begin{verbatim}
+ \Cases{ f(x) }
+ mk-Very_long_constructor(foo,bar) &
+ {\begin{formbox}
+ long_predicate_with(foo) \\
+ \And long_predicate_with(bar)
+ \end{formbox}}
+ ...
+\end{verbatim}
+\begin{vdm}
+\begin{formula}
+ \Cases{ f(x) }
+ mk-Very_long_constructor(foo,bar) &
+ {\begin{formbox}
+ long_predicate_with(foo) \\
+ \And long_predicate_with(bar)
+ \end{formbox}}\\
+ \ldots
+ \Endcases
+\end{formula}
+\end{vdm}
+Note the extras braces around the {\tt formbox}; these are required to
+``hide'' the \cs\\ from the \cs\Cases.
+
+\subsection{Other General Points about Formulas}
+
+\cs\\ will%
+\footnote{For `will' read `should'.}
+{\em always\/}
+start a new line. Sometimes this is done in addition to some other
+function (as in the \cs\Cases\ macro, where it delimits a
+particular case), but you should be able to use \cs\\ almost
+anywhere to force a line break. Indeed, sooner or later you'll want
+to typeset a long formula and \TeX\ will not be able to break the line
+sensibly, or will choose an unpleasant break. In this case you'll
+have to use \cs\\.
+
+Frequently you need to indent things within multi-line formulas. To
+help you do this, a command is provided which breaks a line, and
+indents the next line by an amount which you can supply (in units of
+{\tt ems}). The \cs\T\ command takes a single argument that controls
+how much the next line will be indented:
+
+\noindent\begin{minipage}{\textwidth}\begin{leftside}
+\begin{formula}
+a \And b \T2
+\Implies b \And a \T1
+\Or d \And e
+\end{formula}
+\end{leftside}\begin{rightside}
+a \And b \T2
+\Implies b \And a \T1
+\Or d \And e
+\end{verbatim}\end{rightside}\end{minipage}
+
+Along similar lines is the \cs\R\ command. This does a line break,
+like \cs\\, but then pushes the formula on the next line as far to the
+right as it can:
+
+\noindent\begin{minipage}{\textwidth}\begin{leftside}
+\begin{formula}
+(a \And b \Implies b \And a) \R
+\Or d \And e
+\end{formula}
+\end{leftside}\begin{rightside}
+(a \And b \Implies b \And a) \R
+\Or d \And e
+\end{verbatim}\end{rightside}\end{minipage}
+
+Beware: it may end up pushing it further to the right than you
+expected! This is {\sc A Bug}, and {\sc Will Not Be Fixed}, so you'll
+have to work around it.
+
+The \cs\If, \cs\Let, etc., constructions are all unusual in
+that it's impossible to typeset something sensibly to the right of
+them. For example, if you try
+\begin{verbatim}
+ \exists{x \in S}{
+ \If x=0 \Then S=Q \Else S=P \Fi}
+ \Or S=\emptyset
+\end{verbatim}
+then you'll get
+
+\begin{vdm}
+ \begin{formula}
+ \exists{x \in S}{\If x=0 \Then S=Q \Else S=P \Fi} \Or S=\emptyset
+ \end{formula}
+\end{vdm}
+
+\noindent which is unlikely to be what you wanted.
+
+You should also remember that where \Vdm\ wants a \mmexp, \TeX\ will
+be placed in math mode. This is usually the right thing to do, but
+occasionally you might want a natural language comment to appear
+there.
+In this case you'll have to insert an \cs\mbox\ or a \cs\parbox\
+depending on whether your comment might span one or more lines:
+
+\noindent\begin{minipage}{\textwidth}\begin{leftside}
+ \begin{formula}
+ \If \mbox{the condition is true}
+ \Then \mbox{do the true part}
+ \Else "do the false part"
+ \Fi
+ \end{formula}
+\end{leftside}\begin{rightside}
+\If \mbox{the condition is true}
+\Then \mbox{do the true part}
+\Else "do the false part"
+\Fi
+\end{verbatim}\end{rightside}\end{minipage}
+The else-part illustrates how quotes can be used an an abbreviation
+for \verb;\mbox{...}; within math mode.
+
+Finally, all the constructions above will not break at a page
+boundary. This means that you're in big trouble if you want to
+typeset a three-page \cs\Cases. The only statement I can make to
+mitigate this is: you shouldn't have expressions that complicated in
+the first place---who do you expect to read them? Remember: ``truth
+is beauty'', so if your formulas are not beautiful, then chances are
+they're not true either.
+
+
+
+
+
+\section{Typesetting data types}
+
+The following table lists the primitive types and values available:
+
+\begin{center}
+\begin{tabular}{|l|l|l|}
+\hline
+$\set{0,1,\dots}$ & $\Nat$ & \cs\Nat \\
+$\set{1,2,\dots}$ & $\Natone$ & \cs\Natone,\cs\Nati \\
+$\set{\dots,\minus1,0,1,\dots}$& $\Int$ & \cs\Int \\
+Rationals & $\Rat$ & \cs\Rat \\
+Real numbers & $\Real$ & \cs\Real \\
+$\set{\true,\false}$ & $\Bool$ & \cs\Bool \\
+Truth & $\true$ & \cs\true,\cs\True \\
+Falsehood & $\false$ & \cs\false,\cs\False\\
+Nil & $\nil$ & \cs\nil \\
+\hline
+\end{tabular}
+\end{center}
+
+If you need a new keyword, you can create one easily. For example, if
+your favourite brand of logic has ``maybe'' as a value, you can say
+\begin{verbatim}
+ \makeNewKeyword{\maybe}{maybe}
+\end{verbatim}
+and henceforth \cs\maybe\ is a valid control sequence that produces
+the text \kw{maybe}. The text of the second argument to
+\cs\makeNewKeyword\ can be anything; it doesn't have to match your
+control sequence name.
+\begin{dangerous}
+If you don't like the font that keywords are set in, you can change
+it by redefining the command \cs\keywordFontBeginSequence. By
+default it expands to \cs\sf.
+\end{dangerous}
+
+The following type-related commands are provided:
+
+\begin{center}
+\begin{tabular}{|l|l|l|}
+\hline
+Output & Input & \\
+\hline
+$\setof{x}$ & \verb;\setof{x}; & set type constructor \\
+$\set{a,b,c}$ & \verb;\set{a,b,c}; & set enumeration \\
+$\emptyset$ & \cs\emptyset & the empty set \\
+$\seqof{x}$ & \verb;\seqof{x}; & seq. type constructor\\
+$\seq{a,b,a,c}$ & \verb;\seq{a,b,a,c}; & seq. enumeration\\
+$\emptyseq$ & \cs\emptyseq & the empty sequence \\
+$\mapof{x}{y}$ & \verb;\mapof{x}{y}; & map type constructor \\
+$\mapinto{x}{y}$& \verb;\mapinto{x}{y}; & one-one map type \\
+$\map{p\mapsto x}$
+ & \verb;\map{p\mapsto x}; & map enumeration\\
+$\emptymap$ & \cs\emptymap & the empty map \\
+\hline
+\end{tabular}
+\end{center}
+
+\noindent Here are the relevant operators:
+
+\begin{center}\small
+\begin{tabular}{llllll}
+$\in$ & \cs\in &
+ $\owr$ & \cs\owr &
+ $\sconc$ & \cs\sconc \\
+$\notin$ & \cs\notin &
+ $\dres$ & \cs\dres &
+ $\len{l}$ & \verb;\len{l};\\
+$\subset$ & \cs\subset&
+ $\rres$ & \cs\rres &
+ $\hd{l}$ & \verb;\hd{l}; \\
+$\subseteq$ & \cs\subseteq&
+ $\dsub$ & \cs\dsub &
+ $\tl{l}$ & \verb;\tl{l}; \\
+$\inter$ & \cs\inter,\cs\intersection;&
+ $\rsub$ & \cs\rsub &
+ $\elems{l}$ & \verb;\elems{l};\\
+$\Inter$ & \cs\Inter,\cs\Intersection;&
+ $\dom{m}$&\verb;\dom{m};&
+ $\inds{l}$ & \verb;\inds{l};\\
+$\union$ & \cs\union &
+ $\rng{m}$&\verb;\rng{m};&
+ $\Conc{l}$ & \verb;\Conc{l};\\
+$\Union$ & \cs\Union &
+ $\Min{s}$& \verb;\Min{s};&
+ $\cons{h,t}$ & \verb;\cons{h,t};\\
+$\diff$ & \cs\diff,\cs\difference;&
+ $\Max{s}$& \verb;\Max{s};&
+ & \\
+$\card{s}$ & \verb;\card{s};&
+ & &
+ &
+\end{tabular}
+\end{center}
+
+\begin{dangerous}
+If you invent a new monadic keyword operator (like \dom{}, etc.),
+then you can have \Vdm\ define for you a control sequence which
+switches font, and puts the right spacing in. For example,
+\begin{verbatim}
+ \newMonadicOperator{\inv}{inv}
+\end{verbatim}
+will define the \cs\inv\ control sequence to print
+{\keywordFontBeginSequence inv\/}. Henceforth you can say, e.g.,
+\verb;\inv{Foo};. All such sequences take one argument (they are
+monadic, after all).
+\end{dangerous}
+
+You can define a new type using
+\verb;\type{;type-name\verb;}{;type\verb;};:
+
+\noindent\begin{minipage}{\textwidth}\begin{leftside}
+ \type{Complex}{\Real\x \Real}
+\end{leftside}%
+\begin{rightside}
+\type{Complex}{\Real\x \Real}
+\end{verbatim}\end{rightside}\end{minipage}
+
+Composites types can be typeset using the {\tt composite} environment:
+
+\noindent\begin{minipage}{\textwidth}\begin{leftside}
+ \begin{composite}{Datec}
+ day:\set{1,\ldots,366}, \\
+ year:\set{1583,\ldots,2599}
+ \end{composite}
+\end{leftside}%
+\begin{rightside}
+\begin{composite}{Datec}
+ day :\set{1,\ldots,366}, \\
+ year:\set{1583,\ldots,2599}
+\end{composite}
+\end{verbatim}\end{rightside}\end{minipage}
+
+There is also a {\tt composite*} environment (and an equivalent
+\cs\scompose\ control sequence) that places the entire composite
+type on a single line:
+
+\noindent\begin{minipage}{\textwidth}\begin{leftside}
+ \begin{composite*}{Celsius}
+ \Real
+ \end{composite*}
+\end{leftside}%
+\begin{rightside}
+\begin{composite*}{Celsius}
+ \Real
+\end{composite*}
+\end{verbatim}\end{rightside}\end{minipage}
+
+\noindent\begin{minipage}{\textwidth}\begin{leftside}
+ \scompose{Celsius}{\Real}
+\end{leftside}%
+\begin{rightside}
+\scompose{Celsius}{\Real}
+\end{verbatim}\end{rightside}\end{minipage}
+
+`Records' can be defined using the {\tt record\/} environment:
+
+\begin{verse}
+\verb;\begin{record}{;record-type-name\verb;}; \\
+field-name \verb;:; field-type \cs\\ \\
+\dots \\
+\verb;\end{record};
+\end{verse}
+The colons are used as sub-field separators.
+
+\noindent\begin{minipage}{\textwidth}\begin{leftside}
+ \begin{record}{PERSON}
+ NM : \seqof{Char} \\
+ FEM : \Bool
+ \end{record}
+\end{leftside}%
+\begin{rightside}
+ \begin{record}{PERSON}
+ NM : \seqof{Char} \\
+ FEM : \Bool
+ \end{record}
+\end{verbatim}\end{rightside}\end{minipage}
+
+If the definition is short, you may prefer to use a short form:
+\begin{verbatim}
+ \defrecord{PERSON}{
+ NM : \seqof{Char} \\
+ FEM : \Bool
+ }
+\end{verbatim}
+
+\begin{dangerous}
+Some people prefer the field names to appear lined up on the left, some
+on the right. If you want them to appear on the left, say
+\cs\leftRecord; if you want them on the right, say
+\cs\rightRecord. The scope of the \cs\leftRecord\ and
+\cs\rightRecord\ commands are the current group. By default, you
+get \cs\rightRecord.
+\end{dangerous}
+
+Updating fields of composites using the $\mu$-function can be
+specified using \cs\chg:
+
+\noindent\begin{minipage}{\textwidth}\begin{leftside}
+ \begin{formula}
+ \chg{p}{FEM}{\Not man(q)}
+ \end{formula}
+\end{leftside}%
+\begin{rightside}
+\chg{p}{FEM}{\Not man(q)}
+\end{verbatim}\end{rightside}\end{minipage}
+
+Notice that the $\mu$, parentheses, comma and $\mapsto$ were inserted
+automatically.
+
+
+
+\section{How to Typeset Functions}
+
+Typesetting $\lambda$-expressions is easy:
+
+\noindent\begin{minipage}{\textwidth}\begin{leftside}
+ \begin{formula}
+ \LambdaFn{x,y}{x^2+y^2}
+ \end{formula}
+\end{leftside}%
+\begin{rightside}
+\LambdaFn{x,y}{x^2+y^2}
+\end{verbatim}\end{rightside}\end{minipage}
+
+As with \cs\forall, \cs\exists\ and \cs\unique,
+\cs\LamdbaFn\ has a *-form that places the body of the function
+below and to the right:
+
+\noindent\begin{minipage}{\textwidth}\begin{leftside}
+ \begin{formula}
+ \LambdaFn*{x,y,z}{
+ (x^2+y^2+z^2)^{\frac12}}
+ \end{formula}
+\end{leftside}%
+\begin{rightside}
+\LambdaFn*{x,y,z}{
+ (x^2+y^2+z^2)^{\frac12}}
+\end{verbatim}\end{rightside}\end{minipage}
+
+There is also a {\tt fn\/} (function) environment for defining named
+functions. It has the following structure:
+\begin{verse}
+\verb;\begin{fn}{;name-of-function\verb;}{; argument-list \verb;}; \\
+\verb;\signature{;signature-of-function\verb;}; \\
+\^{optional precondition}\\
+\^{optional postcondition}\\
+ body of function (a \mmexp) \\
+\verb;\end{fn};
+\end{verse}
+
+See the third page for an example. The \cs\signature\ is optional
+and can be placed anywhere within the body---it will always be typeset
+before the body. Useful macros within the \cs\signature\ are:
+\cs\x\ and \cs\to, which yield $\x$ and~$\to$. Note that you can also
+enter functions defined implicitly with pre- and post-conditions; see the
+next section on how to enter them.
+
+All of the material in the section on formulas is relevant within the
+body of the function.
+
+\sloppy\sloppy
+If you frequently intersperse your function definitions with text (and you
+should), you can save some typing by using the {\tt vdmfn\/} environment.
+\cs\begin\verb;{vdmfn}; \dots \cs\end\verb;{vdmfn}; is equivalent to
+\cs\begin\verb;{vdm};\cs\begin\verb;{fn}; \dots
+\cs\end\verb;{fn};\cs\end\verb;{vdm};.
+
+The {\tt fn} environment also has a *-form that does not insert
+parentheses around the argument list. For example:
+
+
+\noindent\begin{minipage}{\textwidth}\begin{leftside}
+\begin{fn*}{MP}{\term{p}\rho\sigma}
+\ldots
+\end{fn*}
+\end{leftside}\begin{rightside}
+\begin{fn*}{MP}{
+ \term{p}\rho\sigma}
+...
+\end{fn*}
+\end{verbatim}\end{rightside}\end{minipage}
+
+If you require the $\DEF$ symbol by itself, then you can get it by
+saying \cs\DEF.
+
+\subsection{Invariants}
+
+To typeset an invariant on a composite object, use the following
+structure:
+
+\noindent\begin{minipage}{\textwidth}\begin{leftside}
+\begin{record}{D}
+ day : Day \\
+ year : Year
+\end{record}
+\where
+\begin{fn}{inv-D}{mk-D(d,y)}
+ is-leapyr(y) \Or d \le 365
+\end{fn}
+\end{leftside}\begin{rightside}
+\begin{record}{D}
+ day : Day \\
+ year : Year
+\end{record}
+\where
+\begin{fn}{inv-D}{mk-D(d,y)}
+ is-leapyr(y) \Or d \le 365
+\end{fn}
+\end{verbatim}\end{rightside}\end{minipage}
+
+
+\section{How to Typeset Operations}
+
+Operations are typeset within the {\tt op\/} environment.
+The general structure is:
+
+\begin{verse}
+\verb;\begin{op}[;\^{name-of-operation}\verb;]; \\
+\verb;\args{;\^{list-of-arguments}\verb;}; \\
+\verb;\res{;\^{result(s)}\verb;}; \\
+\verb;\ext{;\^{list-of-externals}\verb;}; \\
+\^{pre-condition} \\
+\^{post-condition} \\
+\verb;\end{op};
+\end{verse}
+
+The order of the various parts within the {\tt op} environment is not
+important; they will always be printed in a canonical style (see
+page~\pageref{op-ex} for an example).
+
+Any of \cs\args, \cs\res, \cs\ext, \^{pre-condition} or
+\^{post-condition} may be omitted. \verb;\begin{vdmop}; is an
+abbreviation for \verb;\begin{vdm}\begin{op};; \verb;\end{vdmop}; is an
+abbreviation for \verb;\end{op}\end{vdm};.
+
+The \^{name-of-operation} can be any one-line expression; it is
+typeset in math mode. An alternative way of specifying the name of
+the operation is to omit the optional argument (within \verb;[];), and
+use \verb;\opname{;\^{name-of-operation}\verb;};, anywhere within the
+body of the {\tt op} environment.
+
+The \^{list-of-arguments} is a \mmexp\ that can span multiple lines;
+force a newline with \cs\\. If present it is placed within
+parentheses.
+
+The \^{result(s)} is also any \mmexp. It is typeset to the right of
+any arguments.
+
+The \^{list-of-externals} takes the following form:
+\begin{verse}
+\verb;\ext{; \\
+\quad $\langle$optional \cs\Rd\ or \cs\Wr$\rangle$
+ \^{external-name(s)} {\tt :\/} \^{external-types} \cs\\ \\
+\quad $\langle$optional \cs\Rd\ or \cs\Wr$\rangle$
+ \^{external-name(s)} {\tt :\/} \^{external-types} \cs\\ \\
+\dots \\
+\verb;};
+\end{verse}
+Alternatively, if the list of externals is long (say, more than five
+lines) the {\tt externals\/} environmment can be used:
+\begin{verse}
+\verb;\begin{externals}; \\
+\quad $\langle$optional \cs\Rd\ or \cs\Wr$\rangle$
+ \^{external-name(s)} {\tt :\/} \^{external-types} \cs\\ \\
+\quad $\langle$optional \cs\Rd\ or \cs\Wr$\rangle$
+ \^{external-name(s)} {\tt :\/} \^{external-types} \cs\\ \\
+\dots \\
+\verb;\end{externals};
+\end{verse}
+\begin{dangerous}
+Some people prefer the externals identifiers to appear lined up on the
+left, some on the right. If you want them to appear on the left, say
+\cs\leftExternals; if you want them on the right, say
+\cs\rightExternals. The scope of the \cs\leftExternals\ and
+\cs\rightExternals\ commands are the current group. By default,
+you get \cs\leftExternals.
+\end{dangerous}
+
+
+The \^{pre-condition} and \^{post-condition} take similar forms:
+\begin{verse}
+\verb;\pre{;\mmexp\verb;}; \\
+\end{verse}
+or
+\begin{verse}
+\verb;\begin{precond}; \\
+\mmexp \\
+\verb;\end{precond};
+\end{verse}
+and
+\begin{verse}
+\verb;\post{;\mmexp\verb;}; \\
+\end{verse}
+or
+\begin{verse}
+\verb;\begin{postcond}; \\
+\mmexp \\
+\verb;\end{postcond};
+\end{verse}
+Use the \cs\begin\dots\cs\end\ style if the \mmexp\ is longer
+than a few lines.
+All of the constructs mentioned in the section on formulas can be used
+within pre- and post-conditions.
+
+\section{Proofs}
+
+Here's an example of typesetting proofs in the ``natural deduction''
+style.
+
+\begin{proof}
+ \From E@1 \Or E@2 \\
+1 \From E@1 \\
+ \Infer E@2 \Or E@1 \` $\vee$-I(h1) \\
+2 \From E@2 \\
+ \Infer E@2 \Or E@1 \` $\vee$-I(h2) \\
+ \Infer E@2 \Or E@1 \` $\vee$-E(h,1,2)\\
+\end{proof}
+\begin{verbatim}
+ \begin{proof}
+ \From E@1 \Or E@2 \\
+ 1 \From E@1 \\
+ \Infer E@2 \Or E@1 \by $\vee$-I(h1) \\
+ 2 \From E@2 \\
+ \Infer E@2 \Or E@1 \by $\vee$-I(h2) \\
+ \Infer E@2 \Or E@1 \by $\vee$-E(h,1,2) \\
+ \end{proof}
+\end{verbatim}
+
+Proofs are embedded within the {\tt proof} environment. (A proof does
+not have to be within a {\tt vdm} environment.) Each line of the
+proof ends with \cs\\. Lines that begin a subproof
+have \cs\From\ after the equation number. Lines that end a
+subproof have \cs\Infer\ after the equation number. Other lines
+have \cs\& after the equation number (see next example). If you
+don't need an equation number, just omit it, but you must have one of
+either \cs\From, \cs\Infer\ or \cs\& on each proof line.
+If you want to include a justification of a particular proof line at
+the right hand end of the line, type it after a \cs\by. \cs\by\
+is optional; you needn't include it if you don't need a justification.
+
+Points worth bearing in mind:
+\begin{itemize}
+\item You are automatically placed in math mode after the
+ \cs\From, \cs\Infer\ or \cs\&; the math mode ends
+ at the next \cs\by\ or \cs\\.
+\item You {\em cannot} break a line in the middle simply by using
+ \cs\\ before \cs\by; you must use separate proof lines
+ to split a formula.
+\item You are within a {\tt tabbing} environment within a proof, so
+ you can use all the usual {\tt tabbing} commands (\cs\=,
+ \cs\>, etc.) to line things up across proof lines. Note
+ that you will explicitly have to enter math mode again after
+ any of these commands though.
+\end{itemize}
+
+Here's another example:
+
+\begin{proof}
+ \From \forall{x\in X}{E(x); s\in X} \\
+1 \& \Not\exists{x\in X}{\Not E(x)} \` $\Forall$-defn(h)\\
+2 \& \Not\Not E(s/x) \` $\Not\Exists$-E(1,h)\\
+ \Infer E(s/x) \\
+\end{proof}
+\begin{verbatim}
+\begin{proof}
+ \From \forall{x\in X}{E(x); s\in X} \\
+1 \& \Not\exists{x\in X}{\Not E(x)} \by $\Forall$-defn(h)\\
+2 \& \Not\Not E(s/x) \by $\Not\Exists$-E(1,h)\\
+ \Infer E(s/x) \\
+\end{proof}
+\end{verbatim}
+
+\begin{dangerous}
+The amount of space used by the proof number can be changed by
+changing the length \cs\ProofNumberWidth. The distance from the
+left margin to the proof number is dictated by \cs\ProofIndent.
+\end{dangerous}
+
+
+\section{Customising the Style}
+
+{\em Some people are never satisfied.} We all know that it's true.
+In order to cater for those who aren't satisfied with the output from
+\Vdm, some attempt has been made to allow a limited degree of
+customisation by the user. In particular, you can alter some of the
+internal spacing chosen by \Vdm, and even have your own macros called
+at chosen places within \Vdm's macros. Naturally, you are not advised
+to try this unless you feel you have some idea of what you want, and
+what you are doing. In this section we list the things that you can
+change, in order of increasing difficulty.
+
+\subsection{Changing the Spacing}
+
+In several places, essentially arbitrary spacings have been chosen by
+the author. The dimensions of these spaces are given by {\em rubber
+lengths.}\footnote{See the \LaTeX\ book for an explanation of rubber
+lengths} If you want to change any of them, use \LaTeX's
+\cs\setlength\ or \cs\addtolength\ commands.
+For example,
+\begin{verbatim}
+ \setlength{\postHeaderSkip}{13.33pt plus 2pt minus 1pt}
+\end{verbatim}
+
+\begin{dangerous}
+The {\tt plus} and {\tt minus} parts of a length let you say how much
+that length can grow or shrink by. For example, {\tt 12pt plus 2pt
+minus 1pt} means that the length will be in the range 11--14pt, with
+12pt as its ``natural'' length.
+\end{dangerous}
+
+The spaces in question all appear around \Vdm\ items such as
+operations, and in between major parts of such items. The names of
+the lengths should convey where they apply. The following table lists
+all the lengths, and their default settings. Note that an {\tt ex} is
+about the height of an ``x'' in the current font, and an {\tt em} is
+about the width of an ``M'' in the current font.
+
+\begin{center}
+\begin{tabular}{|l|l|l|}
+\hline
+\em Length &\em Default size &\em Used within \\
+\hline
+\cs\preOperationSkip &2ex $+$ 0.5ex $\minus$ 0.2ex & {\tt op} env \\
+\cs\postOperationSkip &2ex $+$ 0.5ex $\minus$ 0.2ex &\\
+\cs\postHeaderSkip &.5ex $+$ .2ex $\minus$ .2ex &\\
+\cs\postExternalsSkip &.5ex $+$ .2ex $\minus$ .2ex &\\
+\cs\postPreConditionSkip &.5ex $+$ .2ex $\minus$ .2ex &\\
+\hline
+\cs\preFunctionSkip &2ex $+$ .5ex $\minus$ .2ex & {\tt fn} env \\
+\cs\postFunctionSkip &2ex $+$ .5ex $\minus$ .2ex &\\
+\cs\betweenSignatureAndBodySkip&1.2ex $+$ .3ex $\minus$ .2ex &\\
+\cs\betweenFunctionAndPreSkip&1.2ex $+$ .3ex $\minus$ .2ex &\\
+\hline
+\cs\preTypeSkip &1.2ex $+$ .5ex $\minus$ .3ex & {\tt type} command \\
+\cs\postTypeSkip &1.2ex $+$ .5ex $\minus$ .3ex &\\
+\hline
+\cs\preCompositeSkip &1.2ex $+$ .5ex $\minus$ .3ex & {\tt
+composite} env \\
+\cs\postCompositeSkip &1.2ex $+$ .5ex $\minus$ .3ex &\\
+\hline
+\cs\preRecordSkip &.75ex $+$ .3ex $\minus$ .2ex & {\tt
+record} env \\
+\cs\postRecordSkip &.75ex $+$ .3ex $\minus$ .2ex &\\
+\hline
+\cs\preFormulaSkip &1.2ex $+$ .5ex $\minus$ .3ex & {\tt
+formula} env \\
+\cs\postFormulaSkip &1.2ex $+$ .5ex $\minus$ .3ex &\\
+\hline
+\cs\preProofSkip &.75ex $+$ .3ex $\minus$ .2ex & {\tt
+proof} env \\
+\cs\postProofSkip &.75ex $+$ .3ex $\minus$ .2ex &\\
+\hline
+\end{tabular}
+\end{center}
+
+\subsection{Controlling Line and Paragraph Breaks}
+
+\TeX\ uses the notion of {\em penalties\/} to decide where line and
+page breaks go. Various values of penalty are used at places within
+\Vdm\ to control breaks. To fully understand how to choose breaks,
+read {\em The \TeX{}book}. However, put simply, penalties are whole
+numbers in the range $\minus10000$~to $10000$. A value of $10000$
+means ``never break here,'' and a value of $\minus10000$ means
+``always break here.'' Values in between penalise or encourage
+breaking proportionally, so that, e.g.,~a value of $\minus500$
+encourages a break, but by no means forces it. A value of zero is
+neutral.
+
+To assign to a penalty~\cs\p, write {\tt \cs\p=1000}, for example.
+The table below list the penalties used by \Vdm, and their default
+values.
+
+\begin{center}
+\begin{tabular}{|l|l|l|}
+\hline
+\em Penalty Name & Default Value & Where Used \\
+\hline
+\cs\preOperationPenalty & 0 & {\tt op} env \\
+\cs\preExternalPenalty & 2000 & \\
+\cs\prePreConditionPenalty & 800 & \\
+\cs\prePostConditionPenalty & 500 & \\
+\cs\postOperationPenalty & -500 & \\
+\hline
+\cs\preFunctionPenalty & 0 & {\tt fn} env \\
+\cs\betweenSignatureAndBodyPenalty&500&\\
+\cs\betweenFunctionAndPrePenalty&1000&\\
+\cs\postFunctionPenalty & -500 & \\
+\hline
+\cs\preRecordPenalty & 0 & {\tt record} env\\
+\cs\postRecordPenalty & -100 & \\
+\hline
+\cs\preProofPenalty & -100 & {\tt proof} env\\
+\cs\postProofPenalty & 0 & \\
+\hline
+\cs\preFormulaPenalty & -100 & {\tt formula} env\\
+\cs\postFormulaPenalty & 0 & \\
+\hline
+\end{tabular}
+\end{center}
+
+
+\subsection{Unforeseen Changes}
+
+It is a truism that no matter how good the designer of a piece of
+software is, he can never foresee all of its uses. In this case, the
+author is quite certain that people will use \Vdm\ for all sorts of
+things apart from typesetting VDM specifications. To cater for those
+who find that \Vdm\ does almost, but not quite, what they want, a
+number of {\em hooks\/} have been left in place. These hooks are
+macros, which at the moment do little or nothing, but which can be
+redefined by users to change the basic operation of \Vdm (see the {\tt
+vdmindex} style for one such use). Needless to
+say, anyone wishing to redefine a hook should already be competent in
+the ways of \LaTeX\ at least, and probably \TeX\ as well. Rather than
+trying to explain what the hooks do, and where they do it, the user
+should look through the commented version of \Vdm\ (usually stored as
+{\tt vdm.doc}) and figure it out for himself. Below are listed all
+the provided hooks, their default definitions, and where they are used.
+
+\begin{center}\footnotesize
+\begin{tabular}{|l|l|}
+\hline
+\em Name of hook & \em Default definition \\
+\hline
+\multicolumn{2}{|c|}{{\tt op} environment} \\
+\hline
+\cs\preOperationHook
+ &\verb*;\penalty\preOperationPenalty ;\\
+\cs\betweenHeaderAndExternalsHook
+ &\verb*;\penalty\preExternalPenalty ;\\
+\cs\betweenExternalsAndPreConditionHook
+ &\verb*;\penalty\prePreConditionPenalty ;\\
+\cs\betweenPreAndPostConditionHook
+ &\verb*;\penalty\prePostConditionPenalty ;\\
+\cs\postOperationHook
+ &\verb*;\penalty\postOperationPenalty ;\\
+\hline
+\multicolumn{2}{|c|}{{\tt fn} environment} \\
+\hline
+\cs\preFunctionHook
+ &\verb*;\penalty\preFunctionPenalty ;\\
+\cs\betweenSignatureAndBodyHook
+ &\verb*;\penalty\betweenSignatureAndBodyPenalty ; \\
+\cs\betweenFunctionAndPreHook&\verb*;\vskip-\lastskip ;\\
+ &\verb;\vskip\betweenFunctionAndPreSkip ;\\
+ &\verb*;\penalty\betweenSignatureAndBodyPenalty ; \\
+\cs\postFunctionHook
+ &\verb*;\penalty\postFunctionPenalty ; \\
+\hline
+\multicolumn{2}{|c|}{{\tt record} environment} \\
+\hline
+\cs\preRecordHook
+ &\verb*;\penalty\preRecordPenalty ;\\
+\cs\postRecordHook
+ &\verb*;\penalty\postRecordPenalty ; \\
+\hline
+\multicolumn{2}{|c|}{{\tt proof} environment} \\
+\hline
+\cs\preProofHook
+ &\verb*;\penalty\preProofPenalty ;\\
+\cs\postProofHook
+ &\verb*;\penalty\postProofPenalty ; \\
+\hline
+\multicolumn{2}{|c|}{{\tt formula} environment} \\
+\hline
+\cs\preFormulaHook
+ &\verb*;\penalty\preFormulaPenalty ;\\
+\cs\postFormulaHook
+ &\verb*;\penalty\postFormulaPenalty ; \\
+\hline
+\end{tabular}
+\end{center}
+
+
+\section{Installing the \Vdm\ files}
+
+Place the files {\tt vdm.sty} and {\tt vdm.doc} in your standard
+directory for \LaTeX\ style files (your system administrator will know
+where this is). If you have the AMS fonts, change the appropriate
+line in {\tt vdm.doc} (see instructions at the head of the file)
+and make the corresponding change in {\tt vdm.sty}. If you're on a
+UNIX\footnote{UNIX is a trademark of AT\&T} system, you can make the
+{\tt .sty} file from the {\tt .doc} file with the command:
+\begin{verbatim}
+ sed -e '/^[ ]*%/d' -e 's/%.*/%/' -e '/^$/d' vdm.doc > vdm.sty
+\end{verbatim}
+There are two characters between the square brackets: a tab and a
+space. If you're on some other system, figure out an equivalent
+command, or make the two files the same.
+
+If you want to keep up with changes to the \Vdm\ style, send a message
+to the e-mail address on the front cover, and your name will be added
+to a mailing list, so that you can be provided with updates.
+
+
+\section{New \Vdm\ commands (introduced for the {\sc bsi} version)}
+
+\begin{itemize}
+ \item There is a new keyword, \cs\rem.
+ \item Operations can also have an {\em error condition\/} part, typeset
+ after the postcondition. The error condition is placed in an {\tt
+ errcond} environment. An alternative short form, \cs\err, is also
+ available, which works in the same way as \cs\pre\ and \cs\post.
+
+ In support of this new part, there is a hook,
+ \cs\betweenPostAndErrConditionHook, defined to be
+ \cs\penalty\ \cs\preErrConditionPenalty\ (the default penalty is
+ 500). The preceding white space is defined by
+ \cs\preErrConditionSkip\ (default .5ex $+$ .2ex $\minus$ .2ex).
+ \item \cs\Others\ is an alias for \cs\Otherwise.
+ \item Sequents are supported using the {\tt sequent} command,
+ thus:
+
+\noindent\begin{minipage}{\textwidth}\begin{leftside}
+\begin{formula}
+\sequent{A}{B}\\
+\sequent*{Truth,Beauty,eq-intr}{Truth=Beauty}
+\end{formula}
+\end{leftside}\begin{rightside}
+\sequent{A}{B}
+\sequent*{Truth,Beauty,eq-intr}
+ {Truth=Beauty}
+\end{verbatim}\end{rightside}\end{minipage}
+
+ \item Optional items can be typeset using \cs\Opt, thus:
+
+\noindent\begin{minipage}{\textwidth}\begin{leftside}
+$\Opt{fred}$
+\end{leftside}\begin{rightside}
+\Opt{fred}
+\end{verbatim}\end{rightside}\end{minipage}
+
+ \item There are two new monadic operators, \cs\abs\ and \cs\merge.
+
+ \item A non-empty sequence type can be defined using \cs\neseqof,
+ thus:
+
+\noindent\begin{minipage}{\textwidth}\begin{leftside}
+\begin{formula}
+\neseqof{\Nat}
+\end{formula}
+\end{leftside}\begin{rightside}
+\neseqof{\Nat}
+\end{verbatim}\end{rightside}\end{minipage}
+
+ \item Restricted types (those with invariants) can be typeset, with
+ or without initialisation, using \cs\ritype\ and \cs\rtype, thus:
+
+\noindent\begin{minipage}{\textwidth}\begin{leftside}
+\rtype{Partition}{\setof{(\setof{\Nat})}}{inv-Partition(p)}
+\ritype{Dict}{\Bool \x (\mapof{Letter}{Dict})}{\true}{(\true,\emptymap)}
+\end{leftside}\begin{rightside}
+\rtype{Partition}
+ {\setof{(\setof{\Nat})}}
+ {inv-Partition(p)}
+\ritype{Dict}
+ {\Bool \x (\mapof{Letter}{Dict})}
+ {\true}
+ {(\true,\emptymap)}
+\end{verbatim}\end{rightside}\end{minipage}
+
+ Accompanying these commands are \cs\betweenTypeAndInvSkip\ (default
+ .5ex $+$ .3ex $\minus$ .2ex) and \cs\betweenInvAndInitSkip\
+ (same default).
+
+ \item Record types may also have invariants and initial states
+ attached, using the \cs\inv\ and \cs\init\ commands within the {\tt
+ record} environment, thus:
+
+\noindent\begin{minipage}{\textwidth}\begin{leftside}
+\begin{record}{D}
+ day : Day \\
+ year : Year
+\inv{(mk-D(d,y)) \DEF\\
+\quad is-leapyr(y) \Or d \le 365}
+\init{day=40 \And year=1962}
+\end{record}
+\end{leftside}\begin{rightside}
+\begin{record}{D}
+ day : Day \\
+ year : Year
+\inv{(mk-D(d,y)) \DEF
+ is-leapyr(y) \Or d \le 365}
+\init{day=40 \And year=1962}
+\end{record}
+\end{verbatim}\end{rightside}\end{minipage}
+
+ To go with these are \cs\betweenRecordAndInvHook,
+ \cs\betweenInvAndInitHook, \cs\betweenRecordAndInvSkip\ (default
+ .5ex $+$ .2ex $\minus$ .1ex), and \cs\betweenInvAndInitSkip\
+ (same default).
+
+\end{itemize}
+
+\section{Acknowledgements}
+
+Many people have passed on useful suggestions and comments about \Vdm\
+and this documentation; many thanks to all of them. In particular I
+would like to acknowledge the extensive testing done by Lynn Marshall
+while preparing her thesis, and her helpful comments and ideas, and
+the numerous worthwhile discussions with Cliff Jones. Cliff, in
+particular, deserves the highest commendation for bravery, in actually
+using these macros in his book. Thanks to David Carlisle for helping
+with the conversion to \TeX~3.
+
+\end{document}
+
diff --git a/obsolete/macros/latex209/contrib/vdm/vdmindex b/obsolete/macros/latex209/contrib/vdm/vdmindex
new file mode 100644
index 0000000000..a9008b3e22
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/vdm/vdmindex
@@ -0,0 +1,17 @@
+#!/bin/sh
+#
+# vdmindex foo
+#
+# takes foo.idx and writes out type and function indexes on
+# typeidx.idx and fnidx.idx
+
+sed -e 's/\\unhbox \\voidb@x \\kern .06em\\vbox {\\hrule height.2exwidth.3em}\\penalty \\@postUnderPenalty \\hskip 0.1em/_/g' -e 's/@/\\sb /g' -e 's/\\atletter/@/g' \
+ $1.idx >/tmp/vdmidx$$
+cp /tmp/vdmidx$$ $1.idx
+rm -f /tmp/vdmidx$$
+egrep '({type-)|({rec-)' $1.idx |
+ sed -e 's/{type-/{/' -e 's/{rec-/{/' >typeidx.idx
+egrep '({fn-)|({op-)' $1.idx |
+ sed -e 's/{fn-/{/' -e 's/{op-/{/' >fnidx.idx
+makeindex typeidx.idx
+makeindex fnidx.idx
diff --git a/obsolete/macros/latex209/contrib/vdm/vdmindex.sty b/obsolete/macros/latex209/contrib/vdm/vdmindex.sty
new file mode 100644
index 0000000000..c3df2f7a8c
--- /dev/null
+++ b/obsolete/macros/latex209/contrib/vdm/vdmindex.sty
@@ -0,0 +1,78 @@
+%%% ====================================================================
+%%% @LaTeX-style-file{
+%%% author = "Mario Wolczko",
+%%% version = "2",
+%%% date = "21 May 1992",
+%%% time = "21:10:02 BST",
+%%% filename = "vdmindex.sty",
+%%% address = "Dept of Computer Science
+%%% The University of Manchester
+%%% Oxford Road
+%%% Manchester M13 9PL
+%%% UK",
+%%% telephone = "+44-61-275-6146",
+%%% FAX = "+44-61-275-6236",
+%%% checksum = "16947 78 289 2980",
+%%% email = "mario@madarch (Internet)",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "LaTeX, VDM specification language, indexing",
+%%% supported = "yes",
+%%% docstring = "Modifies the behaviour of the VDM style to
+%%% facilitate indexing of types, functions and operations.",
+%%% }
+%%% ====================================================================
+%
+% The makeidx and ifthen styles must also be included in the style options when
+% using this style, eg:
+% \documentstyle[vdm,makeidx,ifthen,vdmindex,12pt...
+% \makeindex
+% See the makeindex manual for more detail on how indexing works.
+%
+% Under normal use, an index of all \type, {record}, {fn} and {op}
+% names will be written to a .idx file. After this is done, the shell
+% script vdmindex should be run, generating typeidx.ind and fnidx.ind,
+% which are then subsequently included using \include, eg:
+% \section{Index to Types}
+% \input{typeidx.ind}
+%
+% \section{Index to Functions}
+% \input{fnidx.ind}
+%
+% Any type, record, function or operation can be excluded from the
+% index by placing the command \noindex within the environment (or
+% before, for \type).
+%
+{\makeatother\global\let\atletter@}
+
+% stuff to index names
+\newcommand{\@doindex}{yes}
+\def\noindex{\gdef\@doindex{no}}
+\def\doindex{\gdef\@doindex{yes}}
+
+\def\postOperationHook{%
+ \ifthenelse{\equal{\@doindex}{yes}}%
+ {\index{op-\the\@operationName\atletter$\the\@operationName$}}%
+ {\doindex}%
+ \penalty\postOperationPenalty}
+\def\postFunctionHook{%
+ \ifthenelse{\equal{\@doindex}{yes}}%
+ {\index{fn-\the\@fnName\atletter$\the\@fnName$}}%
+ {\doindex}%
+ \penalty\postFunctionPenalty}
+\def\postTypeHook{\ifthenelse{\equal{\@doindex}{yes}}%
+ {\index{type-\the\@typeName\atletter$\the\@typeName$}}%
+ {\doindex}}
+\def\postRecordHook{%
+ \ifthenelse{\equal{\@doindex}{yes}}%
+ {\index{rec-\the\@recordName\atletter$\the\@recordName$}}%
+ {\doindex}%
+ \penalty\postRecordPenalty}
+
+% this overrides LaTeX's theindex env, which generates "Index"
+% and goes into two column mode.
+\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+%\columnseprule \z@
+%\columnsep 35pt%\twocolumn[\@makeschapterhead{Index}]
+% \@mkboth{INDEX}{INDEX}\thispagestyle{plain}
+ \parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
diff --git a/obsolete/macros/luatex/generic/fontloader-luaotfload/README.md b/obsolete/macros/luatex/generic/fontloader-luaotfload/README.md
new file mode 100644
index 0000000000..71784a5973
--- /dev/null
+++ b/obsolete/macros/luatex/generic/fontloader-luaotfload/README.md
@@ -0,0 +1,25 @@
+# The fontloader-luaotfload package
+
+Additional fontloaders for luaotfload
+
+Version 1.0 Ulrike Fischer 2017-
+
+
+## License
+
+LATEX Project Public License 1.3c.
+
+## Contents
+
+- Readme.md (this file)
+- various fontloader-XXXX.lua files
+- luaotfload-letterspace.luaX -- and alternative version of luaotfload-letterspace.lua, needed for some of the fontloaders
+- luaotfload.confX -- an example configuration file, rename to luaotfload.conf to use it.
+- fontloader-luaotfload.tex, fontloader-luaotfload.pdf (the docu and example)
+- A number of test-XXX-files
+
+
+## Use and Installation
+
+Read the documentation.
+
diff --git a/obsolete/macros/luatex/generic/fontloader-luaotfload/fontloader-2017-02-11-stix.lua b/obsolete/macros/luatex/generic/fontloader-luaotfload/fontloader-2017-02-11-stix.lua
new file mode 100644
index 0000000000..eef6732d82
--- /dev/null
+++ b/obsolete/macros/luatex/generic/fontloader-luaotfload/fontloader-2017-02-11-stix.lua
@@ -0,0 +1,21882 @@
+--[[info-----------------------------------------------------------------------
+ Luaotfload fontloader package
+ build 2017-02-11 18:16:05 by phg@phlegethon
+-------------------------------------------------------------------------------
+-- UF
+texio.write_nl ("------------------")
+texio.write_nl ("!!!!! UF: this fontloader uses an experimental font-oto.lua")
+texio.write_nl ("------------------")
+-- /UF
+
+
+2017-07-14: UF exchanged font-oto-part to get around stix2 bug.
+
+ © 2017 PRAGMA ADE / ConTeXt Development Team
+
+ The code in this file is provided under the GPL v2.0 license. See the
+ file COPYING in the Luaotfload repository for details.
+
+ Report bugs to github.com/lualatex/luaotfload
+
+ This file has been assembled from components taken from Context. See
+ the Luaotfload documentation for details:
+
+ $ texdoc luaotfload
+ $ man 1 luaotfload-tool
+ $ man 5 luaotfload.conf
+
+ Included files:
+
+ · fontloader-data-con.lua
+ · fontloader-basics-nod.lua
+ · fontloader-font-ini.lua
+ · fontloader-font-con.lua
+ · fontloader-fonts-enc.lua
+ · fontloader-font-cid.lua
+ · fontloader-font-map.lua
+ · fontloader-font-oti.lua
+ · fontloader-font-otr.lua
+ · fontloader-font-cff.lua
+ · fontloader-font-ttf.lua
+ · fontloader-font-dsp.lua
+ · fontloader-font-oup.lua
+ · fontloader-font-otl.lua
+ · fontloader-font-oto.lua
+ · fontloader-font-otj.lua
+ · fontloader-font-ota.lua
+ · fontloader-font-ots.lua
+ · fontloader-font-osd.lua
+ · fontloader-font-ocl.lua
+ · fontloader-font-otc.lua
+ · fontloader-font-onr.lua
+ · fontloader-font-one.lua
+ · fontloader-font-afk.lua
+ · fontloader-font-tfm.lua
+ · fontloader-font-lua.lua
+ · fontloader-font-def.lua
+ · fontloader-fonts-ext.lua
+ · fontloader-font-gbn.lua
+
+--info]]-----------------------------------------------------------------------
+
+
+do --- [luaotfload, fontloader-2017-02-11.lua scope for “data-con†d8982c834ed9acc6193eee23067b9d5d] ---
+
+if not modules then modules={} end modules ['data-con']={
+ version=1.100,
+ comment="companion to luat-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local format,lower,gsub=string.format,string.lower,string.gsub
+local trace_cache=false trackers.register("resolvers.cache",function(v) trace_cache=v end)
+local trace_containers=false trackers.register("resolvers.containers",function(v) trace_containers=v end)
+local trace_storage=false trackers.register("resolvers.storage",function(v) trace_storage=v end)
+containers=containers or {}
+local containers=containers
+containers.usecache=true
+local report_containers=logs.reporter("resolvers","containers")
+local allocated={}
+local mt={
+ __index=function(t,k)
+ if k=="writable" then
+ local writable=caches.getwritablepath(t.category,t.subcategory) or { "." }
+ t.writable=writable
+ return writable
+ elseif k=="readables" then
+ local readables=caches.getreadablepaths(t.category,t.subcategory) or { "." }
+ t.readables=readables
+ return readables
+ end
+ end,
+ __storage__=true
+}
+function containers.define(category,subcategory,version,enabled)
+ if category and subcategory then
+ local c=allocated[category]
+ if not c then
+ c={}
+ allocated[category]=c
+ end
+ local s=c[subcategory]
+ if not s then
+ s={
+ category=category,
+ subcategory=subcategory,
+ storage={},
+ enabled=enabled,
+ version=version or math.pi,
+ trace=false,
+ }
+ setmetatable(s,mt)
+ c[subcategory]=s
+ end
+ return s
+ end
+end
+function containers.is_usable(container,name)
+ return container.enabled and caches and caches.is_writable(container.writable,name)
+end
+function containers.is_valid(container,name)
+ if name and name~="" then
+ local storage=container.storage[name]
+ return storage and storage.cache_version==container.version
+ else
+ return false
+ end
+end
+function containers.read(container,name)
+ local storage=container.storage
+ local stored=storage[name]
+ if not stored and container.enabled and caches and containers.usecache then
+ stored=caches.loaddata(container.readables,name,container.writable)
+ if stored and stored.cache_version==container.version then
+ if trace_cache or trace_containers then
+ report_containers("action %a, category %a, name %a","load",container.subcategory,name)
+ end
+ else
+ stored=nil
+ end
+ storage[name]=stored
+ elseif stored then
+ if trace_cache or trace_containers then
+ report_containers("action %a, category %a, name %a","reuse",container.subcategory,name)
+ end
+ end
+ return stored
+end
+function containers.write(container,name,data)
+ if data then
+ data.cache_version=container.version
+ if container.enabled and caches then
+ local unique,shared=data.unique,data.shared
+ data.unique,data.shared=nil,nil
+ caches.savedata(container.writable,name,data)
+ if trace_cache or trace_containers then
+ report_containers("action %a, category %a, name %a","save",container.subcategory,name)
+ end
+ data.unique,data.shared=unique,shared
+ end
+ if trace_cache or trace_containers then
+ report_containers("action %a, category %a, name %a","store",container.subcategory,name)
+ end
+ container.storage[name]=data
+ end
+ return data
+end
+function containers.content(container,name)
+ return container.storage[name]
+end
+function containers.cleanname(name)
+ return (gsub(lower(name),"[^%w\128-\255]+","-"))
+end
+
+end --- [luaotfload, fontloader-2017-02-11.lua scope for “data-conâ€] ---
+
+
+do --- [luaotfload, fontloader-2017-02-11.lua scope for “basics-nod†9288471b8395bfb683aba0ff3964d950] ---
+
+if not modules then modules={} end modules ['luatex-fonts-nod']={
+ version=1.001,
+ comment="companion to luatex-fonts.lua",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+if context then
+ texio.write_nl("fatal error: this module is not for context")
+ os.exit()
+end
+if tex.attribute[0]~=0 then
+ texio.write_nl("log","!")
+ texio.write_nl("log","! Attribute 0 is reserved for ConTeXt's font feature management and has to be")
+ texio.write_nl("log","! set to zero. Also, some attributes in the range 1-255 are used for special")
+ texio.write_nl("log","! purposes so setting them at the TeX end might break the font handler.")
+ texio.write_nl("log","!")
+ tex.attribute[0]=0
+end
+attributes=attributes or {}
+attributes.unsetvalue=-0x7FFFFFFF
+local numbers,last={},127
+attributes.private=attributes.private or function(name)
+ local number=numbers[name]
+ if not number then
+ if last<255 then
+ last=last+1
+ end
+ number=last
+ numbers[name]=number
+ end
+ return number
+end
+nodes={}
+nodes.pool={}
+nodes.handlers={}
+local nodecodes={}
+local glyphcodes=node.subtypes("glyph")
+local disccodes=node.subtypes("disc")
+for k,v in next,node.types() do
+ v=string.gsub(v,"_","")
+ nodecodes[k]=v
+ nodecodes[v]=k
+end
+for i=0,#glyphcodes do
+ glyphcodes[glyphcodes[i]]=i
+end
+for i=0,#disccodes do
+ disccodes[disccodes[i]]=i
+end
+nodes.nodecodes=nodecodes
+nodes.glyphcodes=glyphcodes
+nodes.disccodes=disccodes
+local flush_node=node.flush_node
+local remove_node=node.remove
+local new_node=node.new
+local traverse_id=node.traverse_id
+nodes.handlers.protectglyphs=node.protect_glyphs
+nodes.handlers.unprotectglyphs=node.unprotect_glyphs
+local math_code=nodecodes.math
+local end_of_math=node.end_of_math
+function node.end_of_math(n)
+ if n.id==math_code and n.subtype==1 then
+ return n
+ else
+ return end_of_math(n)
+ end
+end
+function nodes.remove(head,current,free_too)
+ local t=current
+ head,current=remove_node(head,current)
+ if t then
+ if free_too then
+ flush_node(t)
+ t=nil
+ else
+ t.next,t.prev=nil,nil
+ end
+ end
+ return head,current,t
+end
+function nodes.delete(head,current)
+ return nodes.remove(head,current,true)
+end
+function nodes.pool.kern(k)
+ local n=new_node("kern",1)
+ n.kern=k
+ return n
+end
+local getfield=node.getfield
+local setfield=node.setfield
+nodes.getfield=getfield
+nodes.setfield=setfield
+nodes.getattr=getfield
+nodes.setattr=setfield
+nodes.tostring=node.tostring or tostring
+nodes.copy=node.copy
+nodes.copy_node=node.copy
+nodes.copy_list=node.copy_list
+nodes.delete=node.delete
+nodes.dimensions=node.dimensions
+nodes.end_of_math=node.end_of_math
+nodes.flush_list=node.flush_list
+nodes.flush_node=node.flush_node
+nodes.flush=node.flush_node
+nodes.free=node.free
+nodes.insert_after=node.insert_after
+nodes.insert_before=node.insert_before
+nodes.hpack=node.hpack
+nodes.new=node.new
+nodes.tail=node.tail
+nodes.traverse=node.traverse
+nodes.traverse_id=node.traverse_id
+nodes.slide=node.slide
+nodes.vpack=node.vpack
+nodes.first_glyph=node.first_glyph
+nodes.has_glyph=node.has_glyph or node.first_glyph
+nodes.current_attr=node.current_attr
+nodes.has_field=node.has_field
+nodes.last_node=node.last_node
+nodes.usedlist=node.usedlist
+nodes.protrusion_skippable=node.protrusion_skippable
+nodes.write=node.write
+nodes.has_attribute=node.has_attribute
+nodes.set_attribute=node.set_attribute
+nodes.unset_attribute=node.unset_attribute
+nodes.protect_glyphs=node.protect_glyphs
+nodes.unprotect_glyphs=node.unprotect_glyphs
+nodes.mlist_to_hlist=node.mlist_to_hlist
+local direct=node.direct
+local nuts={}
+nodes.nuts=nuts
+local tonode=direct.tonode
+local tonut=direct.todirect
+nodes.tonode=tonode
+nodes.tonut=tonut
+nuts.tonode=tonode
+nuts.tonut=tonut
+local getfield=direct.getfield
+local setfield=direct.setfield
+nuts.getfield=getfield
+nuts.setfield=setfield
+nuts.getnext=direct.getnext
+nuts.setnext=direct.setnext
+nuts.getprev=direct.getprev
+nuts.setprev=direct.setprev
+nuts.getboth=direct.getboth
+nuts.setboth=direct.setboth
+nuts.getid=direct.getid
+nuts.getattr=direct.get_attribute or direct.has_attribute or getfield
+nuts.setattr=setfield
+nuts.getfont=direct.getfont
+nuts.setfont=direct.setfont
+nuts.getsubtype=direct.getsubtype
+nuts.setsubtype=direct.setsubtype or function(n,s) setfield(n,"subtype",s) end
+nuts.getchar=direct.getchar
+nuts.setchar=direct.setchar
+nuts.getdisc=direct.getdisc
+nuts.setdisc=direct.setdisc
+nuts.setlink=direct.setlink
+nuts.getlist=direct.getlist
+nuts.setlist=direct.setlist or function(n,l) setfield(n,"list",l) end
+nuts.getleader=direct.getleader
+nuts.setleader=direct.setleader or function(n,l) setfield(n,"leader",l) end
+if not direct.is_glyph then
+ local getchar=direct.getchar
+ local getid=direct.getid
+ local getfont=direct.getfont
+ local glyph_code=nodes.nodecodes.glyph
+ function direct.is_glyph(n,f)
+ local id=getid(n)
+ if id==glyph_code then
+ if f and getfont(n)==f then
+ return getchar(n)
+ else
+ return false
+ end
+ else
+ return nil,id
+ end
+ end
+ function direct.is_char(n,f)
+ local id=getid(n)
+ if id==glyph_code then
+ if getsubtype(n)>=256 then
+ return false
+ elseif f and getfont(n)==f then
+ return getchar(n)
+ else
+ return false
+ end
+ else
+ return nil,id
+ end
+ end
+end
+nuts.ischar=direct.is_char
+nuts.is_char=direct.is_char
+nuts.isglyph=direct.is_glyph
+nuts.is_glyph=direct.is_glyph
+nuts.insert_before=direct.insert_before
+nuts.insert_after=direct.insert_after
+nuts.delete=direct.delete
+nuts.copy=direct.copy
+nuts.copy_node=direct.copy
+nuts.copy_list=direct.copy_list
+nuts.tail=direct.tail
+nuts.flush_list=direct.flush_list
+nuts.flush_node=direct.flush_node
+nuts.flush=direct.flush
+nuts.free=direct.free
+nuts.remove=direct.remove
+nuts.is_node=direct.is_node
+nuts.end_of_math=direct.end_of_math
+nuts.traverse=direct.traverse
+nuts.traverse_id=direct.traverse_id
+nuts.traverse_char=direct.traverse_char
+nuts.ligaturing=direct.ligaturing
+nuts.kerning=direct.kerning
+nuts.getprop=nuts.getattr
+nuts.setprop=nuts.setattr
+local new_nut=direct.new
+nuts.new=new_nut
+nuts.pool={}
+function nuts.pool.kern(k)
+ local n=new_nut("kern",1)
+ setfield(n,"kern",k)
+ return n
+end
+local propertydata=direct.get_properties_table()
+nodes.properties={ data=propertydata }
+direct.set_properties_mode(true,true)
+function direct.set_properties_mode() end
+nuts.getprop=function(n,k)
+ local p=propertydata[n]
+ if p then
+ return p[k]
+ end
+end
+nuts.setprop=function(n,k,v)
+ if v then
+ local p=propertydata[n]
+ if p then
+ p[k]=v
+ else
+ propertydata[n]={ [k]=v }
+ end
+ end
+end
+nodes.setprop=nodes.setproperty
+nodes.getprop=nodes.getproperty
+
+end --- [luaotfload, fontloader-2017-02-11.lua scope for “basics-nodâ€] ---
+
+
+do --- [luaotfload, fontloader-2017-02-11.lua scope for “font-ini†10cb9a563a98e06ff79c35a8751e13dc] ---
+
+if not modules then modules={} end modules ['font-ini']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local allocate=utilities.storage.allocate
+fonts=fonts or {}
+local fonts=fonts
+fonts.hashes={ identifiers=allocate() }
+fonts.tables=fonts.tables or {}
+fonts.helpers=fonts.helpers or {}
+fonts.tracers=fonts.tracers or {}
+fonts.specifiers=fonts.specifiers or {}
+fonts.analyzers={}
+fonts.readers={}
+fonts.definers={ methods={} }
+fonts.loggers={ register=function() end }
+fontloader.totable=fontloader.to_table
+
+end --- [luaotfload, fontloader-2017-02-11.lua scope for “font-iniâ€] ---
+
+
+do --- [luaotfload, fontloader-2017-02-11.lua scope for “font-con†7575a7b4e6d04816072945e27d7d0b33] ---
+
+if not modules then modules={} end modules ['font-con']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local next,tostring,rawget=next,tostring,rawget
+local format,match,lower,gsub,find=string.format,string.match,string.lower,string.gsub,string.find
+local sort,insert,concat,sortedkeys,serialize,fastcopy=table.sort,table.insert,table.concat,table.sortedkeys,table.serialize,table.fastcopy
+local derivetable=table.derive
+local ioflush=io.flush
+local trace_defining=false trackers.register("fonts.defining",function(v) trace_defining=v end)
+local trace_scaling=false trackers.register("fonts.scaling",function(v) trace_scaling=v end)
+local report_defining=logs.reporter("fonts","defining")
+local fonts=fonts
+local constructors=fonts.constructors or {}
+fonts.constructors=constructors
+local handlers=fonts.handlers or {}
+fonts.handlers=handlers
+local allocate=utilities.storage.allocate
+local setmetatableindex=table.setmetatableindex
+constructors.dontembed=allocate()
+constructors.autocleanup=true
+constructors.namemode="fullpath"
+constructors.version=1.01
+constructors.cache=containers.define("fonts","constructors",constructors.version,false)
+constructors.privateoffset=0xF0000
+constructors.cacheintex=true
+local designsizes=allocate()
+constructors.designsizes=designsizes
+local loadedfonts=allocate()
+constructors.loadedfonts=loadedfonts
+local factors={
+ pt=65536.0,
+ bp=65781.8,
+}
+function constructors.setfactor(f)
+ constructors.factor=factors[f or 'pt'] or factors.pt
+end
+constructors.setfactor()
+function constructors.scaled(scaledpoints,designsize)
+ if scaledpoints<0 then
+ local factor=constructors.factor
+ if designsize then
+ if designsize>factor then
+ return (- scaledpoints/1000)*designsize
+ else
+ return (- scaledpoints/1000)*designsize*factor
+ end
+ else
+ return (- scaledpoints/1000)*10*factor
+ end
+ else
+ return scaledpoints
+ end
+end
+function constructors.cleanuptable(tfmdata)
+ if constructors.autocleanup and tfmdata.properties.virtualized then
+ for k,v in next,tfmdata.characters do
+ if v.commands then v.commands=nil end
+ end
+ end
+end
+function constructors.calculatescale(tfmdata,scaledpoints)
+ local parameters=tfmdata.parameters
+ if scaledpoints<0 then
+ scaledpoints=(- scaledpoints/1000)*(tfmdata.designsize or parameters.designsize)
+ end
+ return scaledpoints,scaledpoints/(parameters.units or 1000)
+end
+local unscaled={
+ ScriptPercentScaleDown=true,
+ ScriptScriptPercentScaleDown=true,
+ RadicalDegreeBottomRaisePercent=true,
+ NoLimitSupFactor=true,
+ NoLimitSubFactor=true,
+}
+function constructors.assignmathparameters(target,original)
+ local mathparameters=original.mathparameters
+ if mathparameters and next(mathparameters) then
+ local targetparameters=target.parameters
+ local targetproperties=target.properties
+ local targetmathparameters={}
+ local factor=targetproperties.math_is_scaled and 1 or targetparameters.factor
+ for name,value in next,mathparameters do
+ if unscaled[name] then
+ targetmathparameters[name]=value
+ else
+ targetmathparameters[name]=value*factor
+ end
+ end
+ if not targetmathparameters.FractionDelimiterSize then
+ targetmathparameters.FractionDelimiterSize=1.01*targetparameters.size
+ end
+ if not mathparameters.FractionDelimiterDisplayStyleSize then
+ targetmathparameters.FractionDelimiterDisplayStyleSize=2.40*targetparameters.size
+ end
+ target.mathparameters=targetmathparameters
+ end
+end
+function constructors.beforecopyingcharacters(target,original)
+end
+function constructors.aftercopyingcharacters(target,original)
+end
+constructors.sharefonts=false
+constructors.nofsharedfonts=0
+local sharednames={}
+function constructors.trytosharefont(target,tfmdata)
+ if constructors.sharefonts then
+ local characters=target.characters
+ local n=1
+ local t={ target.psname }
+ local u=sortedkeys(characters)
+ for i=1,#u do
+ local k=u[i]
+ n=n+1;t[n]=k
+ n=n+1;t[n]=characters[k].index or k
+ end
+ local h=md5.HEX(concat(t," "))
+ local s=sharednames[h]
+ if s then
+ if trace_defining then
+ report_defining("font %a uses backend resources of font %a",target.fullname,s)
+ end
+ target.fullname=s
+ constructors.nofsharedfonts=constructors.nofsharedfonts+1
+ target.properties.sharedwith=s
+ else
+ sharednames[h]=target.fullname
+ end
+ end
+end
+function constructors.enhanceparameters(parameters)
+ local xheight=parameters.x_height
+ local quad=parameters.quad
+ local space=parameters.space
+ local stretch=parameters.space_stretch
+ local shrink=parameters.space_shrink
+ local extra=parameters.extra_space
+ local slant=parameters.slant
+ parameters.xheight=xheight
+ parameters.spacestretch=stretch
+ parameters.spaceshrink=shrink
+ parameters.extraspace=extra
+ parameters.em=quad
+ parameters.ex=xheight
+ parameters.slantperpoint=slant
+ parameters.spacing={
+ width=space,
+ stretch=stretch,
+ shrink=shrink,
+ extra=extra,
+ }
+end
+local function mathkerns(v,vdelta)
+ local k={}
+ for i=1,#v do
+ local entry=v[i]
+ local height=entry.height
+ local kern=entry.kern
+ k[i]={
+ height=height and vdelta*height or 0,
+ kern=kern and vdelta*kern or 0,
+ }
+ end
+ return k
+end
+local psfake=0
+local function fixedpsname(psname,fallback)
+ local usedname=psname
+ if psname and psname~="" then
+ if find(psname," ") then
+ usedname=gsub(psname,"[%s]+","-")
+ else
+ end
+ elseif not fallback or fallback=="" then
+ psfake=psfake+1
+ psname="fakename-"..psfake
+ else
+ psname=fallback
+ usedname=gsub(psname,"[^a-zA-Z0-9]+","-")
+ end
+ return usedname,psname~=usedname
+end
+function constructors.scale(tfmdata,specification)
+ local target={}
+ if tonumber(specification) then
+ specification={ size=specification }
+ end
+ target.specification=specification
+ local scaledpoints=specification.size
+ local relativeid=specification.relativeid
+ local properties=tfmdata.properties or {}
+ local goodies=tfmdata.goodies or {}
+ local resources=tfmdata.resources or {}
+ local descriptions=tfmdata.descriptions or {}
+ local characters=tfmdata.characters or {}
+ local changed=tfmdata.changed or {}
+ local shared=tfmdata.shared or {}
+ local parameters=tfmdata.parameters or {}
+ local mathparameters=tfmdata.mathparameters or {}
+ local targetcharacters={}
+ local targetdescriptions=derivetable(descriptions)
+ local targetparameters=derivetable(parameters)
+ local targetproperties=derivetable(properties)
+ local targetgoodies=goodies
+ target.characters=targetcharacters
+ target.descriptions=targetdescriptions
+ target.parameters=targetparameters
+ target.properties=targetproperties
+ target.goodies=targetgoodies
+ target.shared=shared
+ target.resources=resources
+ target.unscaled=tfmdata
+ local mathsize=tonumber(specification.mathsize) or 0
+ local textsize=tonumber(specification.textsize) or scaledpoints
+ local forcedsize=tonumber(parameters.mathsize ) or 0
+ local extrafactor=tonumber(specification.factor ) or 1
+ if (mathsize==2 or forcedsize==2) and parameters.scriptpercentage then
+ scaledpoints=parameters.scriptpercentage*textsize/100
+ elseif (mathsize==3 or forcedsize==3) and parameters.scriptscriptpercentage then
+ scaledpoints=parameters.scriptscriptpercentage*textsize/100
+ elseif forcedsize>1000 then
+ scaledpoints=forcedsize
+ end
+ targetparameters.mathsize=mathsize
+ targetparameters.textsize=textsize
+ targetparameters.forcedsize=forcedsize
+ targetparameters.extrafactor=extrafactor
+ local tounicode=fonts.mappings.tounicode
+ local defaultwidth=resources.defaultwidth or 0
+ local defaultheight=resources.defaultheight or 0
+ local defaultdepth=resources.defaultdepth or 0
+ local units=parameters.units or 1000
+ if target.fonts then
+ target.fonts=fastcopy(target.fonts)
+ end
+ targetproperties.language=properties.language or "dflt"
+ targetproperties.script=properties.script or "dflt"
+ targetproperties.mode=properties.mode or "base"
+ local askedscaledpoints=scaledpoints
+ local scaledpoints,delta=constructors.calculatescale(tfmdata,scaledpoints,nil,specification)
+ local hdelta=delta
+ local vdelta=delta
+ target.designsize=parameters.designsize
+ target.units=units
+ target.units_per_em=units
+ local direction=properties.direction or tfmdata.direction or 0
+ target.direction=direction
+ properties.direction=direction
+ target.size=scaledpoints
+ target.encodingbytes=properties.encodingbytes or 1
+ target.embedding=properties.embedding or "subset"
+ target.tounicode=1
+ target.cidinfo=properties.cidinfo
+ target.format=properties.format
+ target.cache=constructors.cacheintex and "yes" or "renew"
+ local fontname=properties.fontname or tfmdata.fontname
+ local fullname=properties.fullname or tfmdata.fullname
+ local filename=properties.filename or tfmdata.filename
+ local psname=properties.psname or tfmdata.psname
+ local name=properties.name or tfmdata.name
+ local psname,psfixed=fixedpsname(psname,fontname or fullname or file.nameonly(filename))
+ target.fontname=fontname
+ target.fullname=fullname
+ target.filename=filename
+ target.psname=psname
+ target.name=name
+ properties.fontname=fontname
+ properties.fullname=fullname
+ properties.filename=filename
+ properties.psname=psname
+ properties.name=name
+ local expansion=parameters.expansion
+ if expansion then
+ target.stretch=expansion.stretch
+ target.shrink=expansion.shrink
+ target.step=expansion.step
+ target.auto_expand=expansion.auto
+ end
+ local protrusion=parameters.protrusion
+ if protrusion then
+ target.auto_protrude=protrusion.auto
+ end
+ local extendfactor=parameters.extendfactor or 0
+ if extendfactor~=0 and extendfactor~=1 then
+ hdelta=hdelta*extendfactor
+ target.extend=extendfactor*1000
+ else
+ target.extend=1000
+ end
+ local slantfactor=parameters.slantfactor or 0
+ if slantfactor~=0 then
+ target.slant=slantfactor*1000
+ else
+ target.slant=0
+ end
+ targetparameters.factor=delta
+ targetparameters.hfactor=hdelta
+ targetparameters.vfactor=vdelta
+ targetparameters.size=scaledpoints
+ targetparameters.units=units
+ targetparameters.scaledpoints=askedscaledpoints
+ local isvirtual=properties.virtualized or tfmdata.type=="virtual"
+ local hasquality=target.auto_expand or target.auto_protrude
+ local hasitalics=properties.hasitalics
+ local autoitalicamount=properties.autoitalicamount
+ local stackmath=not properties.nostackmath
+ local nonames=properties.noglyphnames
+ local haskerns=properties.haskerns or properties.mode=="base"
+ local hasligatures=properties.hasligatures or properties.mode=="base"
+ local realdimensions=properties.realdimensions
+ local writingmode=properties.writingmode or "horizontal"
+ local identity=properties.identity or "horizontal"
+ if changed and not next(changed) then
+ changed=false
+ end
+ target.type=isvirtual and "virtual" or "real"
+ target.writingmode=writingmode=="vertical" and "vertical" or "horizontal"
+ target.identity=identity=="vertical" and "vertical" or "horizontal"
+ target.postprocessors=tfmdata.postprocessors
+ local targetslant=(parameters.slant or parameters[1] or 0)*factors.pt
+ local targetspace=(parameters.space or parameters[2] or 0)*hdelta
+ local targetspace_stretch=(parameters.space_stretch or parameters[3] or 0)*hdelta
+ local targetspace_shrink=(parameters.space_shrink or parameters[4] or 0)*hdelta
+ local targetx_height=(parameters.x_height or parameters[5] or 0)*vdelta
+ local targetquad=(parameters.quad or parameters[6] or 0)*hdelta
+ local targetextra_space=(parameters.extra_space or parameters[7] or 0)*hdelta
+ targetparameters.slant=targetslant
+ targetparameters.space=targetspace
+ targetparameters.space_stretch=targetspace_stretch
+ targetparameters.space_shrink=targetspace_shrink
+ targetparameters.x_height=targetx_height
+ targetparameters.quad=targetquad
+ targetparameters.extra_space=targetextra_space
+ local ascender=parameters.ascender
+ if ascender then
+ targetparameters.ascender=delta*ascender
+ end
+ local descender=parameters.descender
+ if descender then
+ targetparameters.descender=delta*descender
+ end
+ constructors.enhanceparameters(targetparameters)
+ local protrusionfactor=(targetquad~=0 and 1000/targetquad) or 0
+ local scaledwidth=defaultwidth*hdelta
+ local scaledheight=defaultheight*vdelta
+ local scaleddepth=defaultdepth*vdelta
+ local hasmath=(properties.hasmath or next(mathparameters)) and true
+ if hasmath then
+ constructors.assignmathparameters(target,tfmdata)
+ properties.hasmath=true
+ target.nomath=false
+ target.MathConstants=target.mathparameters
+ else
+ properties.hasmath=false
+ target.nomath=true
+ target.mathparameters=nil
+ end
+ if hasmath then
+ local mathitalics=properties.mathitalics
+ if mathitalics==false then
+ if trace_defining then
+ report_defining("%s italics %s for font %a, fullname %a, filename %a","math",hasitalics and "ignored" or "disabled",name,fullname,filename)
+ end
+ hasitalics=false
+ autoitalicamount=false
+ end
+ else
+ local textitalics=properties.textitalics
+ if textitalics==false then
+ if trace_defining then
+ report_defining("%s italics %s for font %a, fullname %a, filename %a","text",hasitalics and "ignored" or "disabled",name,fullname,filename)
+ end
+ hasitalics=false
+ autoitalicamount=false
+ end
+ end
+ if trace_defining then
+ report_defining("defining tfm, name %a, fullname %a, filename %a, %spsname %a, hscale %a, vscale %a, math %a, italics %a",
+ name,fullname,filename,psfixed and "(fixed) " or "",psname,hdelta,vdelta,
+ hasmath and "enabled" or "disabled",hasitalics and "enabled" or "disabled")
+ end
+ constructors.beforecopyingcharacters(target,tfmdata)
+ local sharedkerns={}
+ for unicode,character in next,characters do
+ local chr,description,index
+ if changed then
+ local c=changed[unicode]
+ if c then
+ description=descriptions[c] or descriptions[unicode] or character
+ character=characters[c] or character
+ index=description.index or c
+ else
+ description=descriptions[unicode] or character
+ index=description.index or unicode
+ end
+ else
+ description=descriptions[unicode] or character
+ index=description.index or unicode
+ end
+ local width=description.width
+ local height=description.height
+ local depth=description.depth
+ if realdimensions then
+ if not height or height==0 then
+ local bb=description.boundingbox
+ local ht=bb[4]
+ if ht~=0 then
+ height=ht
+ end
+ if not depth or depth==0 then
+ local dp=-bb[2]
+ if dp~=0 then
+ depth=dp
+ end
+ end
+ elseif not depth or depth==0 then
+ local dp=-description.boundingbox[2]
+ if dp~=0 then
+ depth=dp
+ end
+ end
+ end
+ if width then width=hdelta*width else width=scaledwidth end
+ if height then height=vdelta*height else height=scaledheight end
+ if depth and depth~=0 then
+ depth=delta*depth
+ if nonames then
+ chr={
+ index=index,
+ height=height,
+ depth=depth,
+ width=width,
+ }
+ else
+ chr={
+ name=description.name,
+ index=index,
+ height=height,
+ depth=depth,
+ width=width,
+ }
+ end
+ else
+ if nonames then
+ chr={
+ index=index,
+ height=height,
+ width=width,
+ }
+ else
+ chr={
+ name=description.name,
+ index=index,
+ height=height,
+ width=width,
+ }
+ end
+ end
+ local isunicode=description.unicode
+ if isunicode then
+ chr.unicode=isunicode
+ chr.tounicode=tounicode(isunicode)
+ end
+ if hasquality then
+ local ve=character.expansion_factor
+ if ve then
+ chr.expansion_factor=ve*1000
+ end
+ local vl=character.left_protruding
+ if vl then
+ chr.left_protruding=protrusionfactor*width*vl
+ end
+ local vr=character.right_protruding
+ if vr then
+ chr.right_protruding=protrusionfactor*width*vr
+ end
+ end
+ if hasmath then
+ local vn=character.next
+ if vn then
+ chr.next=vn
+ else
+ local vv=character.vert_variants
+ if vv then
+ local t={}
+ for i=1,#vv do
+ local vvi=vv[i]
+ t[i]={
+ ["start"]=(vvi["start"] or 0)*vdelta,
+ ["end"]=(vvi["end"] or 0)*vdelta,
+ ["advance"]=(vvi["advance"] or 0)*vdelta,
+ ["extender"]=vvi["extender"],
+ ["glyph"]=vvi["glyph"],
+ }
+ end
+ chr.vert_variants=t
+ else
+ local hv=character.horiz_variants
+ if hv then
+ local t={}
+ for i=1,#hv do
+ local hvi=hv[i]
+ t[i]={
+ ["start"]=(hvi["start"] or 0)*hdelta,
+ ["end"]=(hvi["end"] or 0)*hdelta,
+ ["advance"]=(hvi["advance"] or 0)*hdelta,
+ ["extender"]=hvi["extender"],
+ ["glyph"]=hvi["glyph"],
+ }
+ end
+ chr.horiz_variants=t
+ end
+ end
+ end
+ local vi=character.vert_italic
+ if vi and vi~=0 then
+ chr.vert_italic=vi*hdelta
+ end
+ local va=character.accent
+ if va then
+ chr.top_accent=vdelta*va
+ end
+ if stackmath then
+ local mk=character.mathkerns
+ if mk then
+ local tr,tl,br,bl=mk.topright,mk.topleft,mk.bottomright,mk.bottomleft
+ chr.mathkern={
+ top_right=tr and mathkerns(tr,vdelta) or nil,
+ top_left=tl and mathkerns(tl,vdelta) or nil,
+ bottom_right=br and mathkerns(br,vdelta) or nil,
+ bottom_left=bl and mathkerns(bl,vdelta) or nil,
+ }
+ end
+ end
+ if hasitalics then
+ local vi=character.italic
+ if vi and vi~=0 then
+ chr.italic=vi*hdelta
+ end
+ end
+ elseif autoitalicamount then
+ local vi=description.italic
+ if not vi then
+ local bb=description.boundingbox
+ if bb then
+ local vi=bb[3]-description.width+autoitalicamount
+ if vi>0 then
+ chr.italic=vi*hdelta
+ end
+ else
+ end
+ elseif vi~=0 then
+ chr.italic=vi*hdelta
+ end
+ elseif hasitalics then
+ local vi=character.italic
+ if vi and vi~=0 then
+ chr.italic=vi*hdelta
+ end
+ end
+ if haskerns then
+ local vk=character.kerns
+ if vk then
+ local s=sharedkerns[vk]
+ if not s then
+ s={}
+ for k,v in next,vk do s[k]=v*hdelta end
+ sharedkerns[vk]=s
+ end
+ chr.kerns=s
+ end
+ end
+ if hasligatures then
+ local vl=character.ligatures
+ if vl then
+ if true then
+ chr.ligatures=vl
+ else
+ local tt={}
+ for i,l in next,vl do
+ tt[i]=l
+ end
+ chr.ligatures=tt
+ end
+ end
+ end
+ if isvirtual then
+ local vc=character.commands
+ if vc then
+ local ok=false
+ for i=1,#vc do
+ local key=vc[i][1]
+ if key=="right" or key=="down" then
+ ok=true
+ break
+ end
+ end
+ if ok then
+ local tt={}
+ for i=1,#vc do
+ local ivc=vc[i]
+ local key=ivc[1]
+ if key=="right" then
+ tt[i]={ key,ivc[2]*hdelta }
+ elseif key=="down" then
+ tt[i]={ key,ivc[2]*vdelta }
+ elseif key=="rule" then
+ tt[i]={ key,ivc[2]*vdelta,ivc[3]*hdelta }
+ else
+ tt[i]=ivc
+ end
+ end
+ chr.commands=tt
+ else
+ chr.commands=vc
+ end
+ chr.index=nil
+ end
+ end
+ targetcharacters[unicode]=chr
+ end
+ properties.setitalics=hasitalics
+ constructors.aftercopyingcharacters(target,tfmdata)
+ constructors.trytosharefont(target,tfmdata)
+ return target
+end
+function constructors.finalize(tfmdata)
+ if tfmdata.properties and tfmdata.properties.finalized then
+ return
+ end
+ if not tfmdata.characters then
+ return nil
+ end
+ if not tfmdata.goodies then
+ tfmdata.goodies={}
+ end
+ local parameters=tfmdata.parameters
+ if not parameters then
+ return nil
+ end
+ if not parameters.expansion then
+ parameters.expansion={
+ stretch=tfmdata.stretch or 0,
+ shrink=tfmdata.shrink or 0,
+ step=tfmdata.step or 0,
+ auto=tfmdata.auto_expand or false,
+ }
+ end
+ if not parameters.protrusion then
+ parameters.protrusion={
+ auto=auto_protrude
+ }
+ end
+ if not parameters.size then
+ parameters.size=tfmdata.size
+ end
+ if not parameters.extendfactor then
+ parameters.extendfactor=tfmdata.extend or 0
+ end
+ if not parameters.slantfactor then
+ parameters.slantfactor=tfmdata.slant or 0
+ end
+ local designsize=parameters.designsize
+ if designsize then
+ parameters.minsize=tfmdata.minsize or designsize
+ parameters.maxsize=tfmdata.maxsize or designsize
+ else
+ designsize=factors.pt*10
+ parameters.designsize=designsize
+ parameters.minsize=designsize
+ parameters.maxsize=designsize
+ end
+ parameters.minsize=tfmdata.minsize or parameters.designsize
+ parameters.maxsize=tfmdata.maxsize or parameters.designsize
+ if not parameters.units then
+ parameters.units=tfmdata.units or tfmdata.units_per_em or 1000
+ end
+ if not tfmdata.descriptions then
+ local descriptions={}
+ setmetatableindex(descriptions,function(t,k) local v={} t[k]=v return v end)
+ tfmdata.descriptions=descriptions
+ end
+ local properties=tfmdata.properties
+ if not properties then
+ properties={}
+ tfmdata.properties=properties
+ end
+ if not properties.virtualized then
+ properties.virtualized=tfmdata.type=="virtual"
+ end
+ if not tfmdata.properties then
+ tfmdata.properties={
+ fontname=tfmdata.fontname,
+ filename=tfmdata.filename,
+ fullname=tfmdata.fullname,
+ name=tfmdata.name,
+ psname=tfmdata.psname,
+ encodingbytes=tfmdata.encodingbytes or 1,
+ embedding=tfmdata.embedding or "subset",
+ tounicode=tfmdata.tounicode or 1,
+ cidinfo=tfmdata.cidinfo or nil,
+ format=tfmdata.format or "type1",
+ direction=tfmdata.direction or 0,
+ writingmode=tfmdata.writingmode or "horizontal",
+ identity=tfmdata.identity or "horizontal",
+ }
+ end
+ if not tfmdata.resources then
+ tfmdata.resources={}
+ end
+ if not tfmdata.shared then
+ tfmdata.shared={}
+ end
+ if not properties.hasmath then
+ properties.hasmath=not tfmdata.nomath
+ end
+ tfmdata.MathConstants=nil
+ tfmdata.postprocessors=nil
+ tfmdata.fontname=nil
+ tfmdata.filename=nil
+ tfmdata.fullname=nil
+ tfmdata.name=nil
+ tfmdata.psname=nil
+ tfmdata.encodingbytes=nil
+ tfmdata.embedding=nil
+ tfmdata.tounicode=nil
+ tfmdata.cidinfo=nil
+ tfmdata.format=nil
+ tfmdata.direction=nil
+ tfmdata.type=nil
+ tfmdata.nomath=nil
+ tfmdata.designsize=nil
+ tfmdata.size=nil
+ tfmdata.stretch=nil
+ tfmdata.shrink=nil
+ tfmdata.step=nil
+ tfmdata.auto_expand=nil
+ tfmdata.auto_protrude=nil
+ tfmdata.extend=nil
+ tfmdata.slant=nil
+ tfmdata.units=nil
+ tfmdata.units_per_em=nil
+ tfmdata.cache=nil
+ properties.finalized=true
+ return tfmdata
+end
+local hashmethods={}
+constructors.hashmethods=hashmethods
+function constructors.hashfeatures(specification)
+ local features=specification.features
+ if features then
+ local t,tn={},0
+ for category,list in next,features do
+ if next(list) then
+ local hasher=hashmethods[category]
+ if hasher then
+ local hash=hasher(list)
+ if hash then
+ tn=tn+1
+ t[tn]=category..":"..hash
+ end
+ end
+ end
+ end
+ if tn>0 then
+ return concat(t," & ")
+ end
+ end
+ return "unknown"
+end
+hashmethods.normal=function(list)
+ local s={}
+ local n=0
+ for k,v in next,list do
+ if not k then
+ elseif k=="number" or k=="features" then
+ else
+ n=n+1
+ s[n]=k..'='..tostring(v)
+ end
+ end
+ if n>0 then
+ sort(s)
+ return concat(s,"+")
+ end
+end
+function constructors.hashinstance(specification,force)
+ local hash,size,fallbacks=specification.hash,specification.size,specification.fallbacks
+ if force or not hash then
+ hash=constructors.hashfeatures(specification)
+ specification.hash=hash
+ end
+ if size<1000 and designsizes[hash] then
+ size=math.round(constructors.scaled(size,designsizes[hash]))
+ specification.size=size
+ end
+ if fallbacks then
+ return hash..' @ '..tostring(size)..' @ '..fallbacks
+ else
+ return hash..' @ '..tostring(size)
+ end
+end
+function constructors.setname(tfmdata,specification)
+ if constructors.namemode=="specification" then
+ local specname=specification.specification
+ if specname then
+ tfmdata.properties.name=specname
+ if trace_defining then
+ report_otf("overloaded fontname %a",specname)
+ end
+ end
+ end
+end
+function constructors.checkedfilename(data)
+ local foundfilename=data.foundfilename
+ if not foundfilename then
+ local askedfilename=data.filename or ""
+ if askedfilename~="" then
+ askedfilename=resolvers.resolve(askedfilename)
+ foundfilename=resolvers.findbinfile(askedfilename,"") or ""
+ if foundfilename=="" then
+ report_defining("source file %a is not found",askedfilename)
+ foundfilename=resolvers.findbinfile(file.basename(askedfilename),"") or ""
+ if foundfilename~="" then
+ report_defining("using source file %a due to cache mismatch",foundfilename)
+ end
+ end
+ end
+ data.foundfilename=foundfilename
+ end
+ return foundfilename
+end
+local formats=allocate()
+fonts.formats=formats
+setmetatableindex(formats,function(t,k)
+ local l=lower(k)
+ if rawget(t,k) then
+ t[k]=l
+ return l
+ end
+ return rawget(t,file.suffix(l))
+end)
+do
+ local function setindeed(mode,source,target,group,name,position)
+ local action=source[mode]
+ if not action then
+ return
+ end
+ local t=target[mode]
+ if not t then
+ report_defining("fatal error in setting feature %a, group %a, mode %a",name,group,mode)
+ os.exit()
+ elseif position then
+ insert(t,position,{ name=name,action=action })
+ else
+ for i=1,#t do
+ local ti=t[i]
+ if ti.name==name then
+ ti.action=action
+ return
+ end
+ end
+ insert(t,{ name=name,action=action })
+ end
+ end
+ local function set(group,name,target,source)
+ target=target[group]
+ if not target then
+ report_defining("fatal target error in setting feature %a, group %a",name,group)
+ os.exit()
+ end
+ local source=source[group]
+ if not source then
+ report_defining("fatal source error in setting feature %a, group %a",name,group)
+ os.exit()
+ end
+ local position=source.position
+ setindeed("node",source,target,group,name,position)
+ setindeed("base",source,target,group,name,position)
+ setindeed("plug",source,target,group,name,position)
+ end
+ local function register(where,specification)
+ local name=specification.name
+ if name and name~="" then
+ local default=specification.default
+ local description=specification.description
+ local initializers=specification.initializers
+ local processors=specification.processors
+ local manipulators=specification.manipulators
+ local modechecker=specification.modechecker
+ if default then
+ where.defaults[name]=default
+ end
+ if description and description~="" then
+ where.descriptions[name]=description
+ end
+ if initializers then
+ set('initializers',name,where,specification)
+ end
+ if processors then
+ set('processors',name,where,specification)
+ end
+ if manipulators then
+ set('manipulators',name,where,specification)
+ end
+ if modechecker then
+ where.modechecker=modechecker
+ end
+ end
+ end
+ constructors.registerfeature=register
+ function constructors.getfeatureaction(what,where,mode,name)
+ what=handlers[what].features
+ if what then
+ where=what[where]
+ if where then
+ mode=where[mode]
+ if mode then
+ for i=1,#mode do
+ local m=mode[i]
+ if m.name==name then
+ return m.action
+ end
+ end
+ end
+ end
+ end
+ end
+ local newfeatures={}
+ constructors.newfeatures=newfeatures
+ constructors.features=newfeatures
+ local function setnewfeatures(what)
+ local handler=handlers[what]
+ local features=handler.features
+ if not features then
+ local tables=handler.tables
+ local statistics=handler.statistics
+ features=allocate {
+ defaults={},
+ descriptions=tables and tables.features or {},
+ used=statistics and statistics.usedfeatures or {},
+ initializers={ base={},node={},plug={} },
+ processors={ base={},node={},plug={} },
+ manipulators={ base={},node={},plug={} },
+ }
+ features.register=function(specification) return register(features,specification) end
+ handler.features=features
+ end
+ return features
+ end
+ setmetatable(newfeatures,{
+ __call=function(t,k) local v=t[k] return v end,
+ __index=function(t,k) local v=setnewfeatures(k) t[k]=v return v end,
+ })
+end
+do
+ local newhandler={}
+ constructors.handlers=newhandler
+ constructors.newhandler=newhandler
+ local function setnewhandler(what)
+ local handler=handlers[what]
+ if not handler then
+ handler={}
+ handlers[what]=handler
+ end
+ return handler
+ end
+ setmetatable(newhandler,{
+ __call=function(t,k) local v=t[k] return v end,
+ __index=function(t,k) local v=setnewhandler(k) t[k]=v return v end,
+ })
+end
+do
+ local newenhancer={}
+ constructors.enhancers=newenhancer
+ constructors.newenhancer=newenhancer
+ local function setnewenhancer(format)
+ local handler=handlers[format]
+ local enhancers=handler.enhancers
+ if not enhancers then
+ local actions=allocate()
+ local before=allocate()
+ local after=allocate()
+ local order=allocate()
+ local patches={ before=before,after=after }
+ local trace=false
+ local report=logs.reporter("fonts",format.." enhancing")
+ trackers.register(format..".loading",function(v) trace=v end)
+ local function enhance(name,data,filename,raw)
+ local enhancer=actions[name]
+ if enhancer then
+ if trace then
+ report("apply enhancement %a to file %a",name,filename)
+ ioflush()
+ end
+ enhancer(data,filename,raw)
+ else
+ end
+ end
+ local function apply(data,filename,raw)
+ local basename=file.basename(lower(filename))
+ if trace then
+ report("%s enhancing file %a","start",filename)
+ end
+ ioflush()
+ for e=1,#order do
+ local enhancer=order[e]
+ local b=before[enhancer]
+ if b then
+ for pattern,action in next,b do
+ if find(basename,pattern) then
+ action(data,filename,raw)
+ end
+ end
+ end
+ enhance(enhancer,data,filename,raw)
+ local a=after[enhancer]
+ if a then
+ for pattern,action in next,a do
+ if find(basename,pattern) then
+ action(data,filename,raw)
+ end
+ end
+ end
+ ioflush()
+ end
+ if trace then
+ report("%s enhancing file %a","stop",filename)
+ end
+ ioflush()
+ end
+ local function register(what,action)
+ if action then
+ if actions[what] then
+ else
+ order[#order+1]=what
+ end
+ actions[what]=action
+ else
+ report("bad enhancer %a",what)
+ end
+ end
+ local function patch(what,where,pattern,action)
+ local pw=patches[what]
+ if pw then
+ local ww=pw[where]
+ if ww then
+ ww[pattern]=action
+ else
+ pw[where]={ [pattern]=action}
+ end
+ end
+ end
+ enhancers={
+ register=register,
+ apply=apply,
+ patch=patch,
+ patches={ register=patch },
+ }
+ handler.enhancers=enhancers
+ end
+ return enhancers
+ end
+ setmetatable(newenhancer,{
+ __call=function(t,k) local v=t[k] return v end,
+ __index=function(t,k) local v=setnewenhancer(k) t[k]=v return v end,
+ })
+end
+function constructors.checkedfeatures(what,features)
+ local defaults=handlers[what].features.defaults
+ if features and next(features) then
+ features=fastcopy(features)
+ for key,value in next,defaults do
+ if features[key]==nil then
+ features[key]=value
+ end
+ end
+ return features
+ else
+ return fastcopy(defaults)
+ end
+end
+function constructors.initializefeatures(what,tfmdata,features,trace,report)
+ if features and next(features) then
+ local properties=tfmdata.properties or {}
+ local whathandler=handlers[what]
+ local whatfeatures=whathandler.features
+ local whatmodechecker=whatfeatures.modechecker
+ local mode=properties.mode or (whatmodechecker and whatmodechecker(tfmdata,features,features.mode)) or features.mode or "base"
+ properties.mode=mode
+ features.mode=mode
+ local done={}
+ while true do
+ local redo=false
+ local initializers=whatfeatures.initializers[mode]
+ if initializers then
+ for i=1,#initializers do
+ local step=initializers[i]
+ local feature=step.name
+ local value=features[feature]
+ if not value then
+ elseif done[feature] then
+ else
+ local action=step.action
+ if trace then
+ report("initializing feature %a to %a for mode %a for font %a",feature,
+ value,mode,tfmdata.properties.fullname)
+ end
+ action(tfmdata,value,features)
+ if mode~=properties.mode or mode~=features.mode then
+ if whatmodechecker then
+ properties.mode=whatmodechecker(tfmdata,features,properties.mode)
+ features.mode=properties.mode
+ end
+ if mode~=properties.mode then
+ mode=properties.mode
+ redo=true
+ end
+ end
+ done[feature]=true
+ end
+ if redo then
+ break
+ end
+ end
+ if not redo then
+ break
+ end
+ else
+ break
+ end
+ end
+ properties.mode=mode
+ return true
+ else
+ return false
+ end
+end
+function constructors.collectprocessors(what,tfmdata,features,trace,report)
+ local processes,nofprocesses={},0
+ if features and next(features) then
+ local properties=tfmdata.properties
+ local whathandler=handlers[what]
+ local whatfeatures=whathandler.features
+ local whatprocessors=whatfeatures.processors
+ local mode=properties.mode
+ local processors=whatprocessors[mode]
+ if processors then
+ for i=1,#processors do
+ local step=processors[i]
+ local feature=step.name
+ if features[feature] then
+ local action=step.action
+ if trace then
+ report("installing feature processor %a for mode %a for font %a",feature,mode,tfmdata.properties.fullname)
+ end
+ if action then
+ nofprocesses=nofprocesses+1
+ processes[nofprocesses]=action
+ end
+ end
+ end
+ elseif trace then
+ report("no feature processors for mode %a for font %a",mode,properties.fullname)
+ end
+ end
+ return processes
+end
+function constructors.applymanipulators(what,tfmdata,features,trace,report)
+ if features and next(features) then
+ local properties=tfmdata.properties
+ local whathandler=handlers[what]
+ local whatfeatures=whathandler.features
+ local whatmanipulators=whatfeatures.manipulators
+ local mode=properties.mode
+ local manipulators=whatmanipulators[mode]
+ if manipulators then
+ for i=1,#manipulators do
+ local step=manipulators[i]
+ local feature=step.name
+ local value=features[feature]
+ if value then
+ local action=step.action
+ if trace then
+ report("applying feature manipulator %a for mode %a for font %a",feature,mode,properties.fullname)
+ end
+ if action then
+ action(tfmdata,feature,value)
+ end
+ end
+ end
+ end
+ end
+end
+function constructors.addcoreunicodes(unicodes)
+ if not unicodes then
+ unicodes={}
+ end
+ unicodes.space=0x0020
+ unicodes.hyphen=0x002D
+ unicodes.zwj=0x200D
+ unicodes.zwnj=0x200C
+ return unicodes
+end
+
+end --- [luaotfload, fontloader-2017-02-11.lua scope for “font-conâ€] ---
+
+
+do --- [luaotfload, fontloader-2017-02-11.lua scope for “fonts-enc†a7ace7c1969cd64a5ca9888838f3edb6] ---
+
+if not modules then modules={} end modules ['luatex-font-enc']={
+ version=1.001,
+ comment="companion to luatex-*.tex",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+if context then
+ texio.write_nl("fatal error: this module is not for context")
+ os.exit()
+end
+local fonts=fonts
+local encodings={}
+fonts.encodings=encodings
+encodings.agl={}
+encodings.known={}
+setmetatable(encodings.agl,{ __index=function(t,k)
+ if k=="unicodes" then
+ texio.write(" <loading (extended) adobe glyph list>")
+ local unicodes=dofile(resolvers.findfile("font-age.lua"))
+ encodings.agl={ unicodes=unicodes }
+ return unicodes
+ else
+ return nil
+ end
+end })
+encodings.cache=containers.define("fonts","enc",encodings.version,true)
+function encodings.load(filename)
+ local name=file.removesuffix(filename)
+ local data=containers.read(encodings.cache,name)
+ if data then
+ return data
+ end
+ local vector,tag,hash,unicodes={},"",{},{}
+ local foundname=resolvers.findfile(filename,'enc')
+ if foundname and foundname~="" then
+ local ok,encoding,size=resolvers.loadbinfile(foundname)
+ if ok and encoding then
+ encoding=string.gsub(encoding,"%%(.-)\n","")
+ local unicoding=encodings.agl.unicodes
+ local tag,vec=string.match(encoding,"/(%w+)%s*%[(.*)%]%s*def")
+ local i=0
+ for ch in string.gmatch(vec,"/([%a%d%.]+)") do
+ if ch~=".notdef" then
+ vector[i]=ch
+ if not hash[ch] then
+ hash[ch]=i
+ else
+ end
+ local u=unicoding[ch]
+ if u then
+ unicodes[u]=i
+ end
+ end
+ i=i+1
+ end
+ end
+ end
+ local data={
+ name=name,
+ tag=tag,
+ vector=vector,
+ hash=hash,
+ unicodes=unicodes
+ }
+ return containers.write(encodings.cache,name,data)
+end
+
+end --- [luaotfload, fontloader-2017-02-11.lua scope for “fonts-encâ€] ---
+
+
+do --- [luaotfload, fontloader-2017-02-11.lua scope for “font-cid†52421d1fdaa07ec4b1d936c6ff5079be] ---
+
+if not modules then modules={} end modules ['font-cid']={
+ version=1.001,
+ comment="companion to font-otf.lua (cidmaps)",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local format,match,lower=string.format,string.match,string.lower
+local tonumber=tonumber
+local P,S,R,C,V,lpegmatch=lpeg.P,lpeg.S,lpeg.R,lpeg.C,lpeg.V,lpeg.match
+local fonts,logs,trackers=fonts,logs,trackers
+local trace_loading=false trackers.register("otf.loading",function(v) trace_loading=v end)
+local report_otf=logs.reporter("fonts","otf loading")
+local cid={}
+fonts.cid=cid
+local cidmap={}
+local cidmax=10
+local number=C(R("09","af","AF")^1)
+local space=S(" \n\r\t")
+local spaces=space^0
+local period=P(".")
+local periods=period*period
+local name=P("/")*C((1-space)^1)
+local unicodes,names={},{}
+local function do_one(a,b)
+ unicodes[tonumber(a)]=tonumber(b,16)
+end
+local function do_range(a,b,c)
+ c=tonumber(c,16)
+ for i=tonumber(a),tonumber(b) do
+ unicodes[i]=c
+ c=c+1
+ end
+end
+local function do_name(a,b)
+ names[tonumber(a)]=b
+end
+local grammar=P { "start",
+ start=number*spaces*number*V("series"),
+ series=(spaces*(V("one")+V("range")+V("named")))^1,
+ one=(number*spaces*number)/do_one,
+ range=(number*periods*number*spaces*number)/do_range,
+ named=(number*spaces*name)/do_name
+}
+local function loadcidfile(filename)
+ local data=io.loaddata(filename)
+ if data then
+ unicodes,names={},{}
+ lpegmatch(grammar,data)
+ local supplement,registry,ordering=match(filename,"^(.-)%-(.-)%-()%.(.-)$")
+ return {
+ supplement=supplement,
+ registry=registry,
+ ordering=ordering,
+ filename=filename,
+ unicodes=unicodes,
+ names=names,
+ }
+ end
+end
+cid.loadfile=loadcidfile
+local template="%s-%s-%s.cidmap"
+local function locate(registry,ordering,supplement)
+ local filename=format(template,registry,ordering,supplement)
+ local hashname=lower(filename)
+ local found=cidmap[hashname]
+ if not found then
+ if trace_loading then
+ report_otf("checking cidmap, registry %a, ordering %a, supplement %a, filename %a",registry,ordering,supplement,filename)
+ end
+ local fullname=resolvers.findfile(filename,'cid') or ""
+ if fullname~="" then
+ found=loadcidfile(fullname)
+ if found then
+ if trace_loading then
+ report_otf("using cidmap file %a",filename)
+ end
+ cidmap[hashname]=found
+ found.usedname=file.basename(filename)
+ end
+ end
+ end
+ return found
+end
+function cid.getmap(specification)
+ if not specification then
+ report_otf("invalid cidinfo specification, table expected")
+ return
+ end
+ local registry=specification.registry
+ local ordering=specification.ordering
+ local supplement=specification.supplement
+ local filename=format(registry,ordering,supplement)
+ local lowername=lower(filename)
+ local found=cidmap[lowername]
+ if found then
+ return found
+ end
+ if ordering=="Identity" then
+ local found={
+ supplement=supplement,
+ registry=registry,
+ ordering=ordering,
+ filename=filename,
+ unicodes={},
+ names={},
+ }
+ cidmap[lowername]=found
+ return found
+ end
+ if trace_loading then
+ report_otf("cidmap needed, registry %a, ordering %a, supplement %a",registry,ordering,supplement)
+ end
+ found=locate(registry,ordering,supplement)
+ if not found then
+ local supnum=tonumber(supplement)
+ local cidnum=nil
+ if supnum<cidmax then
+ for s=supnum+1,cidmax do
+ local c=locate(registry,ordering,s)
+ if c then
+ found,cidnum=c,s
+ break
+ end
+ end
+ end
+ if not found and supnum>0 then
+ for s=supnum-1,0,-1 do
+ local c=locate(registry,ordering,s)
+ if c then
+ found,cidnum=c,s
+ break
+ end
+ end
+ end
+ registry=lower(registry)
+ ordering=lower(ordering)
+ if found and cidnum>0 then
+ for s=0,cidnum-1 do
+ local filename=format(template,registry,ordering,s)
+ if not cidmap[filename] then
+ cidmap[filename]=found
+ end
+ end
+ end
+ end
+ return found
+end
+
+end --- [luaotfload, fontloader-2017-02-11.lua scope for “font-cidâ€] ---
+
+
+do --- [luaotfload, fontloader-2017-02-11.lua scope for “font-map†8708bde7467785c4d3b7afdaf2f9333a] ---
+
+if not modules then modules={} end modules ['font-map']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local tonumber,next,type=tonumber,next,type
+local match,format,find,concat,gsub,lower=string.match,string.format,string.find,table.concat,string.gsub,string.lower
+local P,R,S,C,Ct,Cc,lpegmatch=lpeg.P,lpeg.R,lpeg.S,lpeg.C,lpeg.Ct,lpeg.Cc,lpeg.match
+local floor=math.floor
+local formatters=string.formatters
+local sortedhash,sortedkeys=table.sortedhash,table.sortedkeys
+local trace_loading=false trackers.register("fonts.loading",function(v) trace_loading=v end)
+local trace_mapping=false trackers.register("fonts.mapping",function(v) trace_mapping=v end)
+local report_fonts=logs.reporter("fonts","loading")
+local force_ligatures=false directives.register("fonts.mapping.forceligatures",function(v) force_ligatures=v end)
+local fonts=fonts or {}
+local mappings=fonts.mappings or {}
+fonts.mappings=mappings
+local allocate=utilities.storage.allocate
+local hex=R("AF","af","09")
+local hexfour=(hex*hex*hex^-2)/function(s) return tonumber(s,16) end
+local hexsix=(hex*hex*hex^-4)/function(s) return tonumber(s,16) end
+local dec=(R("09")^1)/tonumber
+local period=P(".")
+local unicode=(P("uni")+P("UNI"))*(hexfour*(period+P(-1))*Cc(false)+Ct(hexfour^1)*Cc(true))
+local ucode=(P("u")+P("U") )*(hexsix*(period+P(-1))*Cc(false)+Ct(hexsix^1)*Cc(true))
+local index=P("index")*dec*Cc(false)
+local parser=unicode+ucode+index
+local parsers={}
+local function makenameparser(str)
+ if not str or str=="" then
+ return parser
+ else
+ local p=parsers[str]
+ if not p then
+ p=P(str)*period*dec*Cc(false)
+ parsers[str]=p
+ end
+ return p
+ end
+end
+local f_single=formatters["%04X"]
+local f_double=formatters["%04X%04X"]
+local function tounicode16(unicode)
+ if unicode<0xD7FF or (unicode>0xDFFF and unicode<=0xFFFF) then
+ return f_single(unicode)
+ else
+ unicode=unicode-0x10000
+ return f_double(floor(unicode/1024)+0xD800,unicode%1024+0xDC00)
+ end
+end
+local function tounicode16sequence(unicodes)
+ local t={}
+ for l=1,#unicodes do
+ local u=unicodes[l]
+ if u<0xD7FF or (u>0xDFFF and u<=0xFFFF) then
+ t[l]=f_single(u)
+ else
+ u=u-0x10000
+ t[l]=f_double(floor(u/1024)+0xD800,u%1024+0xDC00)
+ end
+ end
+ return concat(t)
+end
+local function tounicode(unicode,name)
+ if type(unicode)=="table" then
+ local t={}
+ for l=1,#unicode do
+ local u=unicode[l]
+ if u<0xD7FF or (u>0xDFFF and u<=0xFFFF) then
+ t[l]=f_single(u)
+ else
+ u=u-0x10000
+ t[l]=f_double(floor(u/1024)+0xD800,u%1024+0xDC00)
+ end
+ end
+ return concat(t)
+ else
+ if unicode<0xD7FF or (unicode>0xDFFF and unicode<=0xFFFF) then
+ return f_single(unicode)
+ else
+ unicode=unicode-0x10000
+ return f_double(floor(unicode/1024)+0xD800,unicode%1024+0xDC00)
+ end
+ end
+end
+local function fromunicode16(str)
+ if #str==4 then
+ return tonumber(str,16)
+ else
+ local l,r=match(str,"(....)(....)")
+ return 0x10000+(tonumber(l,16)-0xD800)*0x400+tonumber(r,16)-0xDC00
+ end
+end
+mappings.makenameparser=makenameparser
+mappings.tounicode=tounicode
+mappings.tounicode16=tounicode16
+mappings.tounicode16sequence=tounicode16sequence
+mappings.fromunicode16=fromunicode16
+local ligseparator=P("_")
+local varseparator=P(".")
+local namesplitter=Ct(C((1-ligseparator-varseparator)^1)*(ligseparator*C((1-ligseparator-varseparator)^1))^0)
+do
+ local overloads=allocate {
+ IJ={ name="I_J",unicode={ 0x49,0x4A },mess=0x0132 },
+ ij={ name="i_j",unicode={ 0x69,0x6A },mess=0x0133 },
+ ff={ name="f_f",unicode={ 0x66,0x66 },mess=0xFB00 },
+ fi={ name="f_i",unicode={ 0x66,0x69 },mess=0xFB01 },
+ fl={ name="f_l",unicode={ 0x66,0x6C },mess=0xFB02 },
+ ffi={ name="f_f_i",unicode={ 0x66,0x66,0x69 },mess=0xFB03 },
+ ffl={ name="f_f_l",unicode={ 0x66,0x66,0x6C },mess=0xFB04 },
+ fj={ name="f_j",unicode={ 0x66,0x6A } },
+ fk={ name="f_k",unicode={ 0x66,0x6B } },
+ }
+ local o={}
+ for k,v in next,overloads do
+ local name=v.name
+ local mess=v.mess
+ if name then
+ o[name]=v
+ end
+ if mess then
+ o[mess]=v
+ end
+ o[k]=v
+ end
+ mappings.overloads=o
+end
+function mappings.addtounicode(data,filename,checklookups)
+ local resources=data.resources
+ local unicodes=resources.unicodes
+ if not unicodes then
+ if trace_mapping then
+ report_fonts("no unicode list, quitting tounicode for %a",filename)
+ end
+ return
+ end
+ local properties=data.properties
+ local descriptions=data.descriptions
+ local overloads=mappings.overloads
+ unicodes['space']=unicodes['space'] or 32
+ unicodes['hyphen']=unicodes['hyphen'] or 45
+ unicodes['zwj']=unicodes['zwj'] or 0x200D
+ unicodes['zwnj']=unicodes['zwnj'] or 0x200C
+ local private=fonts.constructors and fonts.constructors.privateoffset or 0xF0000
+ local unicodevector=fonts.encodings.agl.unicodes or {}
+ local contextvector=fonts.encodings.agl.ctxcodes or {}
+ local missing={}
+ local nofmissing=0
+ local oparser=nil
+ local cidnames=nil
+ local cidcodes=nil
+ local cidinfo=properties.cidinfo
+ local usedmap=cidinfo and fonts.cid.getmap(cidinfo)
+ local uparser=makenameparser()
+ if usedmap then
+ oparser=usedmap and makenameparser(cidinfo.ordering)
+ cidnames=usedmap.names
+ cidcodes=usedmap.unicodes
+ end
+ local ns=0
+ local nl=0
+ local dlist=sortedkeys(descriptions)
+ for i=1,#dlist do
+ local du=dlist[i]
+ local glyph=descriptions[du]
+ local name=glyph.name
+ if name then
+ local overload=overloads[name] or overloads[du]
+ if overload then
+ glyph.unicode=overload.unicode
+ else
+ local gu=glyph.unicode
+ if not gu or gu==-1 or du>=private or (du>=0xE000 and du<=0xF8FF) or du==0xFFFE or du==0xFFFF then
+ local unicode=unicodevector[name] or contextvector[name]
+ if unicode then
+ glyph.unicode=unicode
+ ns=ns+1
+ end
+ if (not unicode) and usedmap then
+ local foundindex=lpegmatch(oparser,name)
+ if foundindex then
+ unicode=cidcodes[foundindex]
+ if unicode then
+ glyph.unicode=unicode
+ ns=ns+1
+ else
+ local reference=cidnames[foundindex]
+ if reference then
+ local foundindex=lpegmatch(oparser,reference)
+ if foundindex then
+ unicode=cidcodes[foundindex]
+ if unicode then
+ glyph.unicode=unicode
+ ns=ns+1
+ end
+ end
+ if not unicode or unicode=="" then
+ local foundcodes,multiple=lpegmatch(uparser,reference)
+ if foundcodes then
+ glyph.unicode=foundcodes
+ if multiple then
+ nl=nl+1
+ unicode=true
+ else
+ ns=ns+1
+ unicode=foundcodes
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ if not unicode or unicode=="" then
+ local split=lpegmatch(namesplitter,name)
+ local nsplit=split and #split or 0
+ if nsplit==0 then
+ elseif nsplit==1 then
+ local base=split[1]
+ local u=unicodes[base] or unicodevector[base] or contextvector[name]
+ if not u then
+ elseif type(u)=="table" then
+ if u[1]<private then
+ unicode=u
+ glyph.unicode=unicode
+ end
+ elseif u<private then
+ unicode=u
+ glyph.unicode=unicode
+ end
+ else
+ local t,n={},0
+ for l=1,nsplit do
+ local base=split[l]
+ local u=unicodes[base] or unicodevector[base] or contextvector[name]
+ if not u then
+ break
+ elseif type(u)=="table" then
+ if u[1]>=private then
+ break
+ end
+ n=n+1
+ t[n]=u[1]
+ else
+ if u>=private then
+ break
+ end
+ n=n+1
+ t[n]=u
+ end
+ end
+ if n>0 then
+ if n==1 then
+ unicode=t[1]
+ else
+ unicode=t
+ end
+ glyph.unicode=unicode
+ end
+ end
+ nl=nl+1
+ end
+ if not unicode or unicode=="" then
+ local foundcodes,multiple=lpegmatch(uparser,name)
+ if foundcodes then
+ glyph.unicode=foundcodes
+ if multiple then
+ nl=nl+1
+ unicode=true
+ else
+ ns=ns+1
+ unicode=foundcodes
+ end
+ end
+ end
+ local r=overloads[unicode]
+ if r then
+ unicode=r.unicode
+ glyph.unicode=unicode
+ end
+ if not unicode then
+ missing[du]=true
+ nofmissing=nofmissing+1
+ end
+ end
+ end
+ else
+ local overload=overloads[du]
+ if overload then
+ glyph.unicode=overload.unicode
+ end
+ end
+ end
+ if type(checklookups)=="function" then
+ checklookups(data,missing,nofmissing)
+ end
+ local collected=false
+ local unicoded=0
+ for i=1,#dlist do
+ local du=dlist[i]
+ local glyph=descriptions[du]
+ if glyph.class=="ligature" and (force_ligatures or not glyph.unicode) then
+ if not collected then
+ collected=fonts.handlers.otf.readers.getcomponents(data)
+ if not collected then
+ break
+ end
+ end
+ local u=collected[du]
+ if u then
+ local n=#u
+ for i=1,n do
+ if u[i]>private then
+ n=0
+ break
+ end
+ end
+ if n>0 then
+ if n>1 then
+ glyph.unicode=u
+ else
+ glyph.unicode=u[1]
+ end
+ unicoded=unicoded+1
+ end
+ end
+ end
+ end
+ if trace_mapping and unicoded>0 then
+ report_fonts("%n ligature tounicode mappings deduced from gsub ligature features",unicoded)
+ end
+ if trace_mapping then
+ for i=1,#dlist do
+ local du=dlist[i]
+ local glyph=descriptions[du]
+ local name=glyph.name or "-"
+ local index=glyph.index or 0
+ local unicode=glyph.unicode
+ if unicode then
+ if type(unicode)=="table" then
+ local unicodes={}
+ for i=1,#unicode do
+ unicodes[i]=formatters("%U",unicode[i])
+ end
+ report_fonts("internal slot %U, name %a, unicode %U, tounicode % t",index,name,du,unicodes)
+ else
+ report_fonts("internal slot %U, name %a, unicode %U, tounicode %U",index,name,du,unicode)
+ end
+ else
+ report_fonts("internal slot %U, name %a, unicode %U",index,name,du)
+ end
+ end
+ end
+ if trace_loading and (ns>0 or nl>0) then
+ report_fonts("%s tounicode entries added, ligatures %s",nl+ns,ns)
+ end
+end
+
+end --- [luaotfload, fontloader-2017-02-11.lua scope for “font-mapâ€] ---
+
+
+do --- [luaotfload, fontloader-2017-02-11.lua scope for “font-oti†8f48c06a1d632febd7231ad5dfadfc53] ---
+
+if not modules then modules={} end modules ['font-oti']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local lower=string.lower
+local fonts=fonts
+local constructors=fonts.constructors
+local otf=constructors.handlers.otf
+local otffeatures=constructors.features.otf
+local registerotffeature=otffeatures.register
+local otftables=otf.tables or {}
+otf.tables=otftables
+local allocate=utilities.storage.allocate
+registerotffeature {
+ name="features",
+ description="initialization of feature handler",
+ default=true,
+}
+local function setmode(tfmdata,value)
+ if value then
+ tfmdata.properties.mode=lower(value)
+ end
+end
+otf.modeinitializer=setmode
+local function setlanguage(tfmdata,value)
+ if value then
+ local cleanvalue=lower(value)
+ local languages=otftables and otftables.languages
+ local properties=tfmdata.properties
+ if not languages then
+ properties.language=cleanvalue
+ elseif languages[value] then
+ properties.language=cleanvalue
+ else
+ properties.language="dflt"
+ end
+ end
+end
+local function setscript(tfmdata,value)
+ if value then
+ local cleanvalue=lower(value)
+ local scripts=otftables and otftables.scripts
+ local properties=tfmdata.properties
+ if not scripts then
+ properties.script=cleanvalue
+ elseif scripts[value] then
+ properties.script=cleanvalue
+ else
+ properties.script="dflt"
+ end
+ end
+end
+registerotffeature {
+ name="mode",
+ description="mode",
+ initializers={
+ base=setmode,
+ node=setmode,
+ plug=setmode,
+ }
+}
+registerotffeature {
+ name="language",
+ description="language",
+ initializers={
+ base=setlanguage,
+ node=setlanguage,
+ plug=setlanguage,
+ }
+}
+registerotffeature {
+ name="script",
+ description="script",
+ initializers={
+ base=setscript,
+ node=setscript,
+ plug=setscript,
+ }
+}
+otftables.featuretypes=allocate {
+ gpos_single="position",
+ gpos_pair="position",
+ gpos_cursive="position",
+ gpos_mark2base="position",
+ gpos_mark2ligature="position",
+ gpos_mark2mark="position",
+ gpos_context="position",
+ gpos_contextchain="position",
+ gsub_single="substitution",
+ gsub_multiple="substitution",
+ gsub_alternate="substitution",
+ gsub_ligature="substitution",
+ gsub_context="substitution",
+ gsub_contextchain="substitution",
+ gsub_reversecontextchain="substitution",
+ gsub_reversesub="substitution",
+}
+function otffeatures.checkeddefaultscript(featuretype,autoscript,scripts)
+ if featuretype=="position" then
+ local default=scripts.dflt
+ if default then
+ if autoscript=="position" or autoscript==true then
+ return default
+ else
+ report_otf("script feature %s not applied, enable default positioning")
+ end
+ else
+ end
+ elseif featuretype=="substitution" then
+ local default=scripts.dflt
+ if default then
+ if autoscript=="substitution" or autoscript==true then
+ return default
+ end
+ end
+ end
+end
+function otffeatures.checkeddefaultlanguage(featuretype,autolanguage,languages)
+ if featuretype=="position" then
+ local default=languages.dflt
+ if default then
+ if autolanguage=="position" or autolanguage==true then
+ return default
+ else
+ report_otf("language feature %s not applied, enable default positioning")
+ end
+ else
+ end
+ elseif featuretype=="substitution" then
+ local default=languages.dflt
+ if default then
+ if autolanguage=="substitution" or autolanguage==true then
+ return default
+ end
+ end
+ end
+end
+
+end --- [luaotfload, fontloader-2017-02-11.lua scope for “font-otiâ€] ---
+
+
+do --- [luaotfload, fontloader-2017-02-11.lua scope for “font-otr†2bd0085b78027f261218d63034f43474] ---
+
+if not modules then modules={} end modules ['font-otr']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local next,type,unpack=next,type,unpack
+local byte,lower,char,strip,gsub=string.byte,string.lower,string.char,string.strip,string.gsub
+local bittest=bit32.btest
+local concat,remove,unpack,fastcopy=table.concat,table.remov,table.unpack,table.fastcopy
+local floor,abs,sqrt,round=math.floor,math.abs,math.sqrt,math.round
+local P,R,S,C,Cs,Cc,Ct,Carg,Cmt=lpeg.P,lpeg.R,lpeg.S,lpeg.C,lpeg.Cs,lpeg.Cc,lpeg.Ct,lpeg.Carg,lpeg.Cmt
+local lpegmatch=lpeg.match
+local setmetatableindex=table.setmetatableindex
+local formatters=string.formatters
+local sortedkeys=table.sortedkeys
+local sortedhash=table.sortedhash
+local stripstring=string.strip
+local utf16_to_utf8_be=utf.utf16_to_utf8_be
+local report=logs.reporter("otf reader")
+local trace_cmap=false
+fonts=fonts or {}
+local handlers=fonts.handlers or {}
+fonts.handlers=handlers
+local otf=handlers.otf or {}
+handlers.otf=otf
+local readers=otf.readers or {}
+otf.readers=readers
+local streamreader=utilities.files
+local streamwriter=utilities.files
+readers.streamreader=streamreader
+readers.streamwriter=streamwriter
+local openfile=streamreader.open
+local closefile=streamreader.close
+local setposition=streamreader.setposition
+local skipshort=streamreader.skipshort
+local readbytes=streamreader.readbytes
+local readstring=streamreader.readstring
+local readbyte=streamreader.readcardinal1
+local readushort=streamreader.readcardinal2
+local readuint=streamreader.readcardinal3
+local readulong=streamreader.readcardinal4
+local readshort=streamreader.readinteger2
+local readlong=streamreader.readinteger4
+local readfixed=streamreader.readfixed4
+local readfword=readshort
+local readufword=readushort
+local readoffset=readushort
+local read2dot14=streamreader.read2dot14
+function streamreader.readtag(f)
+ return lower(strip(readstring(f,4)))
+end
+local function readlongdatetime(f)
+ local a,b,c,d,e,f,g,h=readbytes(f,8)
+ return 0x100000000*d+0x1000000*e+0x10000*f+0x100*g+h
+end
+local tableversion=0.004
+readers.tableversion=tableversion
+local privateoffset=fonts.constructors and fonts.constructors.privateoffset or 0xF0000
+local reportedskipped={}
+local function reportskippedtable(tag)
+ if not reportedskipped[tag] then
+ report("loading of table %a skipped (reported once only)",tag)
+ reportedskipped[tag]=true
+ end
+end
+local reservednames={ [0]="copyright",
+ "family",
+ "subfamily",
+ "uniqueid",
+ "fullname",
+ "version",
+ "postscriptname",
+ "trademark",
+ "manufacturer",
+ "designer",
+ "description",
+ "vendorurl",
+ "designerurl",
+ "license",
+ "licenseurl",
+ "reserved",
+ "typographicfamily",
+ "typographicsubfamily",
+ "compatiblefullname",
+ "sampletext",
+ "cidfindfontname",
+ "wwsfamily",
+ "wwssubfamily",
+ "lightbackgroundpalette",
+ "darkbackgroundpalette",
+}
+local platforms={ [0]="unicode",
+ "macintosh",
+ "iso",
+ "windows",
+ "custom",
+}
+local encodings={
+ unicode={ [0]="unicode 1.0 semantics",
+ "unicode 1.1 semantics",
+ "iso/iec 10646",
+ "unicode 2.0 bmp",
+ "unicode 2.0 full",
+ "unicode variation sequences",
+ "unicode full repertoire",
+ },
+ macintosh={ [0]="roman","japanese","chinese (traditional)","korean","arabic","hebrew","greek","russian",
+ "rsymbol","devanagari","gurmukhi","gujarati","oriya","bengali","tamil","telugu","kannada",
+ "malayalam","sinhalese","burmese","khmer","thai","laotian","georgian","armenian",
+ "chinese (simplified)","tibetan","mongolian","geez","slavic","vietnamese","sindhi",
+ "uninterpreted",
+ },
+ iso={ [0]="7-bit ascii",
+ "iso 10646",
+ "iso 8859-1",
+ },
+ windows={ [0]="symbol",
+ "unicode bmp",
+ "shiftjis",
+ "prc",
+ "big5",
+ "wansung",
+ "johab",
+ "reserved 7",
+ "reserved 8",
+ "reserved 9",
+ "unicode ucs-4",
+ },
+ custom={
+ }
+}
+local decoders={
+ unicode={},
+ macintosh={},
+ iso={},
+ windows={
+ ["unicode semantics"]=utf16_to_utf8_be,
+ ["unicode bmp"]=utf16_to_utf8_be,
+ ["unicode full"]=utf16_to_utf8_be,
+ ["unicode 1.0 semantics"]=utf16_to_utf8_be,
+ ["unicode 1.1 semantics"]=utf16_to_utf8_be,
+ ["unicode 2.0 bmp"]=utf16_to_utf8_be,
+ ["unicode 2.0 full"]=utf16_to_utf8_be,
+ ["unicode variation sequences"]=utf16_to_utf8_be,
+ ["unicode full repertoire"]=utf16_to_utf8_be,
+ },
+ custom={},
+}
+local languages={
+ unicode={
+ [ 0]="english",
+ },
+ macintosh={
+ [ 0]="english",
+ },
+ iso={},
+ windows={
+ [0x0409]="english - united states",
+ },
+ custom={},
+}
+local standardromanencoding={ [0]=
+ "notdef",".null","nonmarkingreturn","space","exclam","quotedbl",
+ "numbersign","dollar","percent","ampersand","quotesingle","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","Q","R","S","T","U","V","W","X","Y","Z","bracketleft",
+ "backslash","bracketright","asciicircum","underscore","grave","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","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","dagger","degree","cent","sterling",
+ "section","bullet","paragraph","germandbls","registered","copyright",
+ "trademark","acute","dieresis","notequal","AE","Oslash","infinity",
+ "plusminus","lessequal","greaterequal","yen","mu","partialdiff",
+ "summation","product","pi","integral","ordfeminine","ordmasculine",
+ "Omega","ae","oslash","questiondown","exclamdown","logicalnot",
+ "radical","florin","approxequal","Delta","guillemotleft",
+ "guillemotright","ellipsis","nonbreakingspace","Agrave","Atilde",
+ "Otilde","OE","oe","endash","emdash","quotedblleft","quotedblright",
+ "quoteleft","quoteright","divide","lozenge","ydieresis","Ydieresis",
+ "fraction","currency","guilsinglleft","guilsinglright","fi","fl",
+ "daggerdbl","periodcentered","quotesinglbase","quotedblbase",
+ "perthousand","Acircumflex","Ecircumflex","Aacute","Edieresis","Egrave",
+ "Iacute","Icircumflex","Idieresis","Igrave","Oacute","Ocircumflex",
+ "apple","Ograve","Uacute","Ucircumflex","Ugrave","dotlessi",
+ "circumflex","tilde","macron","breve","dotaccent","ring","cedilla",
+ "hungarumlaut","ogonek","caron","Lslash","lslash","Scaron","scaron",
+ "Zcaron","zcaron","brokenbar","Eth","eth","Yacute","yacute","Thorn",
+ "thorn","minus","multiply","onesuperior","twosuperior","threesuperior",
+ "onehalf","onequarter","threequarters","franc","Gbreve","gbreve",
+ "Idotaccent","Scedilla","scedilla","Cacute","cacute","Ccaron","ccaron",
+ "dcroat",
+}
+local weights={
+ [100]="thin",
+ [200]="extralight",
+ [300]="light",
+ [400]="normal",
+ [500]="medium",
+ [600]="semibold",
+ [700]="bold",
+ [800]="extrabold",
+ [900]="black",
+}
+local widths={
+ [1]="ultracondensed",
+ [2]="extracondensed",
+ [3]="condensed",
+ [4]="semicondensed",
+ [5]="normal",
+ [6]="semiexpanded",
+ [7]="expanded",
+ [8]="extraexpanded",
+ [9]="ultraexpanded",
+}
+setmetatableindex(weights,function(t,k)
+ local r=floor((k+50)/100)*100
+ local v=(r>900 and "black") or rawget(t,r) or "normal"
+ return v
+end)
+setmetatableindex(widths,function(t,k)
+ return "normal"
+end)
+local panoseweights={
+ [ 0]="normal",
+ [ 1]="normal",
+ [ 2]="verylight",
+ [ 3]="light",
+ [ 4]="thin",
+ [ 5]="book",
+ [ 6]="medium",
+ [ 7]="demi",
+ [ 8]="bold",
+ [ 9]="heavy",
+ [10]="black",
+}
+local panosewidths={
+ [ 0]="normal",
+ [ 1]="normal",
+ [ 2]="normal",
+ [ 3]="normal",
+ [ 4]="normal",
+ [ 5]="expanded",
+ [ 6]="condensed",
+ [ 7]="veryexpanded",
+ [ 8]="verycondensed",
+ [ 9]="monospaced",
+}
+local platformnames={
+ postscriptname=true,
+ fullname=true,
+ family=true,
+ subfamily=true,
+ typographicfamily=true,
+ typographicsubfamily=true,
+ compatiblefullname=true,
+}
+function readers.name(f,fontdata,specification)
+ local datatable=fontdata.tables.name
+ if datatable then
+ setposition(f,datatable.offset)
+ local format=readushort(f)
+ local nofnames=readushort(f)
+ local offset=readushort(f)
+ local start=datatable.offset+offset
+ local namelists={
+ unicode={},
+ windows={},
+ macintosh={},
+ }
+ for i=1,nofnames do
+ local platform=platforms[readushort(f)]
+ if platform then
+ local namelist=namelists[platform]
+ if namelist then
+ local encoding=readushort(f)
+ local language=readushort(f)
+ local encodings=encodings[platform]
+ local languages=languages[platform]
+ if encodings and languages then
+ local encoding=encodings[encoding]
+ local language=languages[language]
+ if encoding and language then
+ local name=reservednames[readushort(f)]
+ if name then
+ namelist[#namelist+1]={
+ platform=platform,
+ encoding=encoding,
+ language=language,
+ name=name,
+ length=readushort(f),
+ offset=start+readushort(f),
+ }
+ else
+ skipshort(f,2)
+ end
+ else
+ skipshort(f,3)
+ end
+ else
+ skipshort(f,3)
+ end
+ else
+ skipshort(f,5)
+ end
+ else
+ skipshort(f,5)
+ end
+ end
+ local names={}
+ local done={}
+ local function filter(platform,e,l)
+ local namelist=namelists[platform]
+ for i=1,#namelist do
+ local name=namelist[i]
+ local nametag=name.name
+ if not done[nametag] then
+ local encoding=name.encoding
+ local language=name.language
+ if (not e or encoding==e) and (not l or language==l) then
+ setposition(f,name.offset)
+ local content=readstring(f,name.length)
+ local decoder=decoders[platform]
+ if decoder then
+ decoder=decoder[encoding]
+ end
+ if decoder then
+ content=decoder(content)
+ end
+ names[nametag]={
+ content=content,
+ platform=platform,
+ encoding=encoding,
+ language=language,
+ }
+ done[nametag]=true
+ end
+ end
+ end
+ end
+ filter("windows","unicode bmp","english - united states")
+ filter("macintosh","roman","english")
+ filter("windows")
+ filter("macintosh")
+ filter("unicode")
+ fontdata.names=names
+ if specification.platformnames then
+ local collected={}
+ for platform,namelist in next,namelists do
+ local filtered=false
+ for i=1,#namelist do
+ local entry=namelist[i]
+ local name=entry.name
+ if platformnames[name] then
+ setposition(f,entry.offset)
+ local content=readstring(f,entry.length)
+ local encoding=entry.encoding
+ local decoder=decoders[platform]
+ if decoder then
+ decoder=decoder[encoding]
+ end
+ if decoder then
+ content=decoder(content)
+ end
+ if filtered then
+ filtered[name]=content
+ else
+ filtered={ [name]=content }
+ end
+ end
+ end
+ if filtered then
+ collected[platform]=filtered
+ end
+ end
+ fontdata.platformnames=collected
+ end
+ else
+ fontdata.names={}
+ end
+end
+local validutf=lpeg.patterns.validutf8
+local function getname(fontdata,key)
+ local names=fontdata.names
+ if names then
+ local value=names[key]
+ if value then
+ local content=value.content
+ return lpegmatch(validutf,content) and content or nil
+ end
+ end
+end
+readers["os/2"]=function(f,fontdata)
+ local datatable=fontdata.tables["os/2"]
+ if datatable then
+ setposition(f,datatable.offset)
+ local version=readushort(f)
+ local windowsmetrics={
+ version=version,
+ averagewidth=readshort(f),
+ weightclass=readushort(f),
+ widthclass=readushort(f),
+ fstype=readushort(f),
+ subscriptxsize=readshort(f),
+ subscriptysize=readshort(f),
+ subscriptxoffset=readshort(f),
+ subscriptyoffset=readshort(f),
+ superscriptxsize=readshort(f),
+ superscriptysize=readshort(f),
+ superscriptxoffset=readshort(f),
+ superscriptyoffset=readshort(f),
+ strikeoutsize=readshort(f),
+ strikeoutpos=readshort(f),
+ familyclass=readshort(f),
+ panose={ readbytes(f,10) },
+ unicoderanges={ readulong(f),readulong(f),readulong(f),readulong(f) },
+ vendor=readstring(f,4),
+ fsselection=readushort(f),
+ firstcharindex=readushort(f),
+ lastcharindex=readushort(f),
+ typoascender=readshort(f),
+ typodescender=readshort(f),
+ typolinegap=readshort(f),
+ winascent=readushort(f),
+ windescent=readushort(f),
+ }
+ if version>=1 then
+ windowsmetrics.codepageranges={ readulong(f),readulong(f) }
+ end
+ if version>=3 then
+ windowsmetrics.xheight=readshort(f)
+ windowsmetrics.capheight=readshort(f)
+ windowsmetrics.defaultchar=readushort(f)
+ windowsmetrics.breakchar=readushort(f)
+ end
+ windowsmetrics.weight=windowsmetrics.weightclass and weights[windowsmetrics.weightclass]
+ windowsmetrics.width=windowsmetrics.widthclass and widths [windowsmetrics.widthclass]
+ windowsmetrics.panoseweight=panoseweights[windowsmetrics.panose[3]]
+ windowsmetrics.panosewidth=panosewidths [windowsmetrics.panose[4]]
+ fontdata.windowsmetrics=windowsmetrics
+ else
+ fontdata.windowsmetrics={}
+ end
+end
+readers.head=function(f,fontdata)
+ local datatable=fontdata.tables.head
+ if datatable then
+ setposition(f,datatable.offset)
+ local fontheader={
+ version=readfixed(f),
+ revision=readfixed(f),
+ checksum=readulong(f),
+ magic=readulong(f),
+ flags=readushort(f),
+ units=readushort(f),
+ created=readlongdatetime(f),
+ modified=readlongdatetime(f),
+ xmin=readshort(f),
+ ymin=readshort(f),
+ xmax=readshort(f),
+ ymax=readshort(f),
+ macstyle=readushort(f),
+ smallpixels=readushort(f),
+ directionhint=readshort(f),
+ indextolocformat=readshort(f),
+ glyphformat=readshort(f),
+ }
+ fontdata.fontheader=fontheader
+ else
+ fontdata.fontheader={}
+ end
+ fontdata.nofglyphs=0
+end
+readers.hhea=function(f,fontdata,specification)
+ if specification.details then
+ local datatable=fontdata.tables.hhea
+ if datatable then
+ setposition(f,datatable.offset)
+ fontdata.horizontalheader={
+ version=readfixed(f),
+ ascender=readfword(f),
+ descender=readfword(f),
+ linegap=readfword(f),
+ maxadvancewidth=readufword(f),
+ minleftsidebearing=readfword(f),
+ minrightsidebearing=readfword(f),
+ maxextent=readfword(f),
+ caretsloperise=readshort(f),
+ caretsloperun=readshort(f),
+ caretoffset=readshort(f),
+ reserved_1=readshort(f),
+ reserved_2=readshort(f),
+ reserved_3=readshort(f),
+ reserved_4=readshort(f),
+ metricdataformat=readshort(f),
+ nofmetrics=readushort(f),
+ }
+ else
+ fontdata.horizontalheader={
+ nofmetrics=0,
+ }
+ end
+ end
+end
+readers.vhea=function(f,fontdata,specification)
+ if specification.details then
+ local datatable=fontdata.tables.vhea
+ if datatable then
+ setposition(f,datatable.offset)
+ local version=readfixed(f)
+ fontdata.verticalheader={
+ version=version,
+ ascender=readfword(f),
+ descender=readfword(f),
+ linegap=readfword(f),
+ maxadvanceheight=readufword(f),
+ mintopsidebearing=readfword(f),
+ minbottomsidebearing=readfword(f),
+ maxextent=readfword(f),
+ caretsloperise=readshort(f),
+ caretsloperun=readshort(f),
+ caretoffset=readshort(f),
+ reserved_1=readshort(f),
+ reserved_2=readshort(f),
+ reserved_3=readshort(f),
+ reserved_4=readshort(f),
+ metricdataformat=readshort(f),
+ nofmetrics=readushort(f),
+ }
+ else
+ fontdata.verticalheader={
+ nofmetrics=0,
+ }
+ end
+ end
+end
+readers.maxp=function(f,fontdata,specification)
+ if specification.details then
+ local datatable=fontdata.tables.maxp
+ if datatable then
+ setposition(f,datatable.offset)
+ local version=readfixed(f)
+ local nofglyphs=readushort(f)
+ fontdata.nofglyphs=nofglyphs
+ if version==0.5 then
+ fontdata.maximumprofile={
+ version=version,
+ nofglyphs=nofglyphs,
+ }
+ return
+ elseif version==1.0 then
+ fontdata.maximumprofile={
+ version=version,
+ nofglyphs=nofglyphs,
+ points=readushort(f),
+ contours=readushort(f),
+ compositepoints=readushort(f),
+ compositecontours=readushort(f),
+ zones=readushort(f),
+ twilightpoints=readushort(f),
+ storage=readushort(f),
+ functiondefs=readushort(f),
+ instructiondefs=readushort(f),
+ stackelements=readushort(f),
+ sizeofinstructions=readushort(f),
+ componentelements=readushort(f),
+ componentdepth=readushort(f),
+ }
+ return
+ end
+ end
+ fontdata.maximumprofile={
+ version=version,
+ nofglyphs=0,
+ }
+ end
+end
+readers.hmtx=function(f,fontdata,specification)
+ if specification.glyphs then
+ local datatable=fontdata.tables.hmtx
+ if datatable then
+ setposition(f,datatable.offset)
+ local horizontalheader=fontdata.horizontalheader
+ local nofmetrics=horizontalheader.nofmetrics
+ local glyphs=fontdata.glyphs
+ local nofglyphs=fontdata.nofglyphs
+ local width=0
+ local leftsidebearing=0
+ for i=0,nofmetrics-1 do
+ local glyph=glyphs[i]
+ width=readshort(f)
+ leftsidebearing=readshort(f)
+ if width~=0 then
+ glyph.width=width
+ end
+ end
+ for i=nofmetrics,nofglyphs-1 do
+ local glyph=glyphs[i]
+ if width~=0 then
+ glyph.width=width
+ end
+ end
+ end
+ end
+end
+readers.vmtx=function(f,fontdata,specification)
+ if specification.glyphs then
+ local datatable=fontdata.tables.vmtx
+ if datatable then
+ setposition(f,datatable.offset)
+ local verticalheader=fontdata.verticalheader
+ local nofmetrics=verticalheader.nofmetrics
+ local glyphs=fontdata.glyphs
+ local nofglyphs=fontdata.nofglyphs
+ local vheight=0
+ local vdefault=verticalheader.ascender+verticalheader.descender
+ local topsidebearing=0
+ for i=0,nofmetrics-1 do
+ local glyph=glyphs[i]
+ vheight=readshort(f)
+ topsidebearing=readshort(f)
+ if vheight~=0 and vheight~=vdefault then
+ glyph.vheight=vheight
+ end
+ end
+ for i=nofmetrics,nofglyphs-1 do
+ local glyph=glyphs[i]
+ if vheight~=0 and vheight~=vdefault then
+ glyph.vheight=vheight
+ end
+ end
+ end
+ end
+end
+readers.vorg=function(f,fontdata,specification)
+ if specification.glyphs then
+ local datatable=fontdata.tables.vorg
+ if datatable then
+ report("todo: %s","vorg")
+ end
+ end
+end
+readers.post=function(f,fontdata,specification)
+ local datatable=fontdata.tables.post
+ if datatable then
+ setposition(f,datatable.offset)
+ local version=readfixed(f)
+ fontdata.postscript={
+ version=version,
+ italicangle=round(1000*readfixed(f))/1000,
+ underlineposition=readfword(f),
+ underlinethickness=readfword(f),
+ monospaced=readulong(f),
+ minmemtype42=readulong(f),
+ maxmemtype42=readulong(f),
+ minmemtype1=readulong(f),
+ maxmemtype1=readulong(f),
+ }
+ if not specification.glyphs then
+ elseif version==1.0 then
+ for index=0,#standardromanencoding do
+ glyphs[index].name=standardromanencoding[index]
+ end
+ elseif version==2.0 then
+ local glyphs=fontdata.glyphs
+ local nofglyphs=readushort(f)
+ local indices={}
+ local names={}
+ local maxnames=0
+ for i=0,nofglyphs-1 do
+ local nameindex=readushort(f)
+ if nameindex>=258 then
+ maxnames=maxnames+1
+ nameindex=nameindex-257
+ indices[nameindex]=i
+ else
+ glyphs[i].name=standardromanencoding[nameindex]
+ end
+ end
+ for i=1,maxnames do
+ local mapping=indices[i]
+ if not mapping then
+ report("quit post name fetching at %a of %a: %s",i,maxnames,"no index")
+ break
+ else
+ local length=readbyte(f)
+ if length>0 then
+ glyphs[mapping].name=readstring(f,length)
+ else
+ report("quit post name fetching at %a of %a: %s",i,maxnames,"overflow")
+ break
+ end
+ end
+ end
+ elseif version==2.5 then
+ elseif version==3.0 then
+ end
+ else
+ fontdata.postscript={}
+ end
+end
+readers.cff=function(f,fontdata,specification)
+ if specification.glyphs then
+ reportskippedtable("cff")
+ end
+end
+local formatreaders={}
+local duplicatestoo=true
+local sequence={
+ { 3,1,4 },
+ { 3,10,12 },
+ { 0,3,4 },
+ { 0,1,4 },
+ { 0,0,6 },
+ { 3,0,6 },
+ { 0,5,14 },
+ { 3,10,13 },
+}
+local supported={}
+for i=1,#sequence do
+ local sp,se,sf=unpack(sequence[i])
+ local p=supported[sp]
+ if not p then
+ p={}
+ supported[sp]=p
+ end
+ local e=p[se]
+ if not e then
+ e={}
+ p[se]=e
+ end
+ e[sf]=true
+end
+formatreaders[4]=function(f,fontdata,offset)
+ setposition(f,offset+2)
+ local length=readushort(f)
+ local language=readushort(f)
+ local nofsegments=readushort(f)/2
+ skipshort(f,3)
+ local endchars={}
+ local startchars={}
+ local deltas={}
+ local offsets={}
+ local indices={}
+ local mapping=fontdata.mapping
+ local glyphs=fontdata.glyphs
+ local duplicates=fontdata.duplicates
+ local nofdone=0
+ for i=1,nofsegments do
+ endchars[i]=readushort(f)
+ end
+ local reserved=readushort(f)
+ for i=1,nofsegments do
+ startchars[i]=readushort(f)
+ end
+ for i=1,nofsegments do
+ deltas[i]=readshort(f)
+ end
+ for i=1,nofsegments do
+ offsets[i]=readushort(f)
+ end
+ local size=(length-2*2-5*2-4*nofsegments*2)/2
+ for i=1,size-1 do
+ indices[i]=readushort(f)
+ end
+ for segment=1,nofsegments do
+ local startchar=startchars[segment]
+ local endchar=endchars[segment]
+ local offset=offsets[segment]
+ local delta=deltas[segment]
+ if startchar==0xFFFF and endchar==0xFFFF then
+ elseif startchar==0xFFFF and offset==0 then
+ elseif offset==0xFFFF then
+ elseif offset==0 then
+ if trace_cmap then
+ report("format 4.%i segment %2i from %C upto %C at index %H",1,segment,startchar,endchar,(startchar+delta)%65536)
+ end
+ for unicode=startchar,endchar do
+ local index=(unicode+delta)%65536
+ if index and index>0 then
+ local glyph=glyphs[index]
+ if glyph then
+ local gu=glyph.unicode
+ if not gu then
+ glyph.unicode=unicode
+ nofdone=nofdone+1
+ elseif gu~=unicode then
+ if duplicatestoo then
+ local d=duplicates[gu]
+ if d then
+ d[unicode]=true
+ else
+ duplicates[gu]={ [unicode]=true }
+ end
+ else
+ report("duplicate case 1: %C %04i %s",unicode,index,glyphs[index].name)
+ end
+ end
+ if not mapping[index] then
+ mapping[index]=unicode
+ end
+ end
+ end
+ end
+ else
+ local shift=(segment-nofsegments+offset/2)-startchar
+ if trace_cmap then
+ report("format 4.%i segment %2i from %C upto %C at index %H",0,segment,startchar,endchar,(startchar+delta)%65536)
+ end
+ for unicode=startchar,endchar do
+ local slot=shift+unicode
+ local index=indices[slot]
+ if index and index>0 then
+ index=(index+delta)%65536
+ local glyph=glyphs[index]
+ if glyph then
+ local gu=glyph.unicode
+ if not gu then
+ glyph.unicode=unicode
+ nofdone=nofdone+1
+ elseif gu~=unicode then
+ if duplicatestoo then
+ local d=duplicates[gu]
+ if d then
+ d[unicode]=true
+ else
+ duplicates[gu]={ [unicode]=true }
+ end
+ else
+ report("duplicate case 2: %C %04i %s",unicode,index,glyphs[index].name)
+ end
+ end
+ if not mapping[index] then
+ mapping[index]=unicode
+ end
+ end
+ end
+ end
+ end
+ end
+ return nofdone
+end
+formatreaders[6]=function(f,fontdata,offset)
+ setposition(f,offset)
+ local format=readushort(f)
+ local length=readushort(f)
+ local language=readushort(f)
+ local mapping=fontdata.mapping
+ local glyphs=fontdata.glyphs
+ local duplicates=fontdata.duplicates
+ local start=readushort(f)
+ local count=readushort(f)
+ local stop=start+count-1
+ local nofdone=0
+ if trace_cmap then
+ report("format 6 from %C to %C",2,start,stop)
+ end
+ for unicode=start,stop do
+ local index=readushort(f)
+ if index>0 then
+ local glyph=glyphs[index]
+ if glyph then
+ local gu=glyph.unicode
+ if not gu then
+ glyph.unicode=unicode
+ nofdone=nofdone+1
+ elseif gu~=unicode then
+ end
+ if not mapping[index] then
+ mapping[index]=unicode
+ end
+ end
+ end
+ end
+ return nofdone
+end
+formatreaders[12]=function(f,fontdata,offset)
+ setposition(f,offset+2+2+4+4)
+ local mapping=fontdata.mapping
+ local glyphs=fontdata.glyphs
+ local duplicates=fontdata.duplicates
+ local nofgroups=readulong(f)
+ local nofdone=0
+ for i=1,nofgroups do
+ local first=readulong(f)
+ local last=readulong(f)
+ local index=readulong(f)
+ if trace_cmap then
+ report("format 12 from %C to %C starts at index %i",first,last,index)
+ end
+ for unicode=first,last do
+ local glyph=glyphs[index]
+ if glyph then
+ local gu=glyph.unicode
+ if not gu then
+ glyph.unicode=unicode
+ nofdone=nofdone+1
+ elseif gu~=unicode then
+ local d=duplicates[gu]
+ if d then
+ d[unicode]=true
+ else
+ duplicates[gu]={ [unicode]=true }
+ end
+ end
+ if not mapping[index] then
+ mapping[index]=unicode
+ end
+ end
+ index=index+1
+ end
+ end
+ return nofdone
+end
+formatreaders[13]=function(f,fontdata,offset)
+ setposition(f,offset+2+2+4+4)
+ local mapping=fontdata.mapping
+ local glyphs=fontdata.glyphs
+ local duplicates=fontdata.duplicates
+ local nofgroups=readulong(f)
+ local nofdone=0
+ for i=1,nofgroups do
+ local first=readulong(f)
+ local last=readulong(f)
+ local index=readulong(f)
+ if first<privateoffset then
+ if trace_cmap then
+ report("format 13 from %C to %C get index %i",first,last,index)
+ end
+ local glyph=glyphs[index]
+ local unicode=glyph.unicode
+ if not unicode then
+ unicode=first
+ glyph.unicode=unicode
+ first=first+1
+ end
+ local list=duplicates[unicode]
+ mapping[index]=unicode
+ if not list then
+ list={}
+ duplicates[unicode]=list
+ end
+ if last>=privateoffset then
+ local limit=privateoffset-1
+ report("format 13 from %C to %C pruned to %C",first,last,limit)
+ last=limit
+ end
+ for unicode=first,last do
+ list[unicode]=true
+ end
+ nofdone=nofdone+last-first+1
+ else
+ report("format 13 from %C to %C ignored",first,last)
+ end
+ end
+ return nofdone
+end
+formatreaders[14]=function(f,fontdata,offset)
+ if offset and offset~=0 then
+ setposition(f,offset)
+ local format=readushort(f)
+ local length=readulong(f)
+ local nofrecords=readulong(f)
+ local records={}
+ local variants={}
+ local nofdone=0
+ fontdata.variants=variants
+ for i=1,nofrecords do
+ records[i]={
+ selector=readuint(f),
+ default=readulong(f),
+ other=readulong(f),
+ }
+ end
+ for i=1,nofrecords do
+ local record=records[i]
+ local selector=record.selector
+ local default=record.default
+ local other=record.other
+ local other=record.other
+ if other~=0 then
+ setposition(f,offset+other)
+ local mapping={}
+ local count=readulong(f)
+ for i=1,count do
+ mapping[readuint(f)]=readushort(f)
+ end
+ nofdone=nofdone+count
+ variants[selector]=mapping
+ end
+ end
+ return nofdone
+ else
+ return 0
+ end
+end
+local function checkcmap(f,fontdata,records,platform,encoding,format)
+ local data=records[platform]
+ if not data then
+ return 0
+ end
+ data=data[encoding]
+ if not data then
+ return 0
+ end
+ data=data[format]
+ if not data then
+ return 0
+ end
+ local reader=formatreaders[format]
+ if not reader then
+ return 0
+ end
+ local p=platforms[platform]
+ local e=encodings[p]
+ local n=reader(f,fontdata,data) or 0
+ report("cmap checked: platform %i (%s), encoding %i (%s), format %i, new unicodes %i",platform,p,encoding,e and e[encoding] or "?",format,n)
+ return n
+end
+function readers.cmap(f,fontdata,specification)
+ if specification.glyphs then
+ local datatable=fontdata.tables.cmap
+ if datatable then
+ local tableoffset=datatable.offset
+ setposition(f,tableoffset)
+ local version=readushort(f)
+ local noftables=readushort(f)
+ local records={}
+ local unicodecid=false
+ local variantcid=false
+ local variants={}
+ local duplicates=fontdata.duplicates or {}
+ fontdata.duplicates=duplicates
+ for i=1,noftables do
+ local platform=readushort(f)
+ local encoding=readushort(f)
+ local offset=readulong(f)
+ local record=records[platform]
+ if not record then
+ records[platform]={
+ [encoding]={
+ offsets={ offset },
+ formats={},
+ }
+ }
+ else
+ local subtables=record[encoding]
+ if not subtables then
+ record[encoding]={
+ offsets={ offset },
+ formats={},
+ }
+ else
+ local offsets=subtables.offsets
+ offsets[#offsets+1]=offset
+ end
+ end
+ end
+ report("found cmaps:")
+ for platform,record in sortedhash(records) do
+ local p=platforms[platform]
+ local e=encodings[p]
+ local sp=supported[platform]
+ local ps=p or "?"
+ if sp then
+ report(" platform %i: %s",platform,ps)
+ else
+ report(" platform %i: %s (unsupported)",platform,ps)
+ end
+ for encoding,subtables in sortedhash(record) do
+ local se=sp and sp[encoding]
+ local es=e and e[encoding] or "?"
+ if se then
+ report(" encoding %i: %s",encoding,es)
+ else
+ report(" encoding %i: %s (unsupported)",encoding,es)
+ end
+ local offsets=subtables.offsets
+ local formats=subtables.formats
+ for i=1,#offsets do
+ local offset=tableoffset+offsets[i]
+ setposition(f,offset)
+ formats[readushort(f)]=offset
+ end
+ record[encoding]=formats
+ local list=sortedkeys(formats)
+ for i=1,#list do
+ if not (se and se[list[i]]) then
+ list[i]=list[i].." (unsupported)"
+ end
+ end
+ report(" formats: % t",list)
+ end
+ end
+ local ok=false
+ for i=1,#sequence do
+ local sp,se,sf=unpack(sequence[i])
+ if checkcmap(f,fontdata,records,sp,se,sf)>0 then
+ ok=true
+ end
+ end
+ if not ok then
+ report("no useable unicode cmap found")
+ end
+ fontdata.cidmaps={
+ version=version,
+ noftables=noftables,
+ records=records,
+ }
+ else
+ fontdata.cidmaps={}
+ end
+ end
+end
+function readers.loca(f,fontdata,specification)
+ if specification.glyphs then
+ reportskippedtable("loca")
+ end
+end
+function readers.glyf(f,fontdata,specification)
+ if specification.glyphs then
+ reportskippedtable("glyf")
+ end
+end
+function readers.colr(f,fontdata,specification)
+ if specification.glyphs then
+ reportskippedtable("colr")
+ end
+end
+function readers.cpal(f,fontdata,specification)
+ if specification.glyphs then
+ reportskippedtable("cpal")
+ end
+end
+function readers.svg(f,fontdata,specification)
+ if specification.glyphs then
+ reportskippedtable("svg")
+ end
+end
+function readers.kern(f,fontdata,specification)
+ if specification.kerns then
+ local datatable=fontdata.tables.kern
+ if datatable then
+ setposition(f,datatable.offset)
+ local version=readushort(f)
+ local noftables=readushort(f)
+ for i=1,noftables do
+ local version=readushort(f)
+ local length=readushort(f)
+ local coverage=readushort(f)
+ local format=bit32.rshift(coverage,8)
+ if format==0 then
+ local nofpairs=readushort(f)
+ local searchrange=readushort(f)
+ local entryselector=readushort(f)
+ local rangeshift=readushort(f)
+ local kerns={}
+ local glyphs=fontdata.glyphs
+ for i=1,nofpairs do
+ local left=readushort(f)
+ local right=readushort(f)
+ local kern=readfword(f)
+ local glyph=glyphs[left]
+ local kerns=glyph.kerns
+ if kerns then
+ kerns[right]=kern
+ else
+ glyph.kerns={ [right]=kern }
+ end
+ end
+ elseif format==2 then
+ report("todo: kern classes")
+ else
+ report("todo: kerns")
+ end
+ end
+ end
+ end
+end
+function readers.gdef(f,fontdata,specification)
+ if specification.details then
+ reportskippedtable("gdef")
+ end
+end
+function readers.gsub(f,fontdata,specification)
+ if specification.details then
+ reportskippedtable("gsub")
+ end
+end
+function readers.gpos(f,fontdata,specification)
+ if specification.details then
+ reportskippedtable("gpos")
+ end
+end
+function readers.math(f,fontdata,specification)
+ if specification.glyphs then
+ reportskippedtable("math")
+ end
+end
+local function getinfo(maindata,sub,platformnames,rawfamilynames,metricstoo)
+ local fontdata=sub and maindata.subfonts and maindata.subfonts[sub] or maindata
+ local names=fontdata.names
+ local info=nil
+ if names then
+ local metrics=fontdata.windowsmetrics or {}
+ local postscript=fontdata.postscript or {}
+ local fontheader=fontdata.fontheader or {}
+ local cffinfo=fontdata.cffinfo or {}
+ local filename=fontdata.filename
+ local weight=getname(fontdata,"weight") or (cffinfo and cffinfo.weight) or (metrics and metrics.weight)
+ local width=getname(fontdata,"width") or (cffinfo and cffinfo.width ) or (metrics and metrics.width )
+ local fontname=getname(fontdata,"postscriptname")
+ local fullname=getname(fontdata,"fullname")
+ local family=getname(fontdata,"family")
+ local subfamily=getname(fontdata,"subfamily")
+ local familyname=getname(fontdata,"typographicfamily")
+ local subfamilyname=getname(fontdata,"typographicsubfamily")
+ local compatiblename=getname(fontdata,"compatiblefullname")
+ if rawfamilynames then
+ else
+ if not familyname then familyname=family end
+ if not subfamilyname then subfamilyname=subfamily end
+ end
+ info={
+ subfontindex=fontdata.subfontindex or sub or 0,
+ version=getname(fontdata,"version"),
+ fontname=fontname,
+ fullname=fullname,
+ family=family,
+ subfamily=subfamily,
+ familyname=familyname,
+ subfamilyname=subfamilyname,
+ compatiblename=compatiblename,
+ weight=weight and lower(weight),
+ width=width and lower(width),
+ pfmweight=metrics.weightclass or 400,
+ pfmwidth=metrics.widthclass or 5,
+ panosewidth=metrics.panosewidth,
+ panoseweight=metrics.panoseweight,
+ italicangle=postscript.italicangle or 0,
+ units=fontheader.units or 0,
+ designsize=fontdata.designsize,
+ minsize=fontdata.minsize,
+ maxsize=fontdata.maxsize,
+ monospaced=(tonumber(postscript.monospaced or 0)>0) or metrics.panosewidth=="monospaced",
+ averagewidth=metrics.averagewidth,
+ xheight=metrics.xheight,
+ capheight=metrics.capheight,
+ ascender=metrics.typoascender,
+ descender=metrics.typodescender,
+ platformnames=platformnames and fontdata.platformnames or nil,
+ }
+ if metricstoo then
+ local keys={
+ "version",
+ "ascender","descender","linegap",
+ "maxadvancewidth","maxadvanceheight","maxextent",
+ "minbottomsidebearing","mintopsidebearing",
+ }
+ local h=fontdata.horizontalheader or {}
+ local v=fontdata.verticalheader or {}
+ if h then
+ local th={}
+ local tv={}
+ for i=1,#keys do
+ local key=keys[i]
+ th[key]=h[key] or 0
+ tv[key]=v[key] or 0
+ end
+ info.horizontalmetrics=th
+ info.verticalmetrics=tv
+ end
+ end
+ elseif n then
+ info={
+ filename=fontdata.filename,
+ comment="there is no info for subfont "..n,
+ }
+ else
+ info={
+ filename=fontdata.filename,
+ comment="there is no info",
+ }
+ end
+ return info
+end
+local function loadtables(f,specification,offset)
+ if offset then
+ setposition(f,offset)
+ end
+ local tables={}
+ local basename=file.basename(specification.filename)
+ local filesize=specification.filesize
+ local filetime=specification.filetime
+ local fontdata={
+ filename=basename,
+ filesize=filesize,
+ filetime=filetime,
+ version=readstring(f,4),
+ noftables=readushort(f),
+ searchrange=readushort(f),
+ entryselector=readushort(f),
+ rangeshift=readushort(f),
+ tables=tables,
+ }
+ for i=1,fontdata.noftables do
+ local tag=lower(stripstring(readstring(f,4)))
+ local checksum=readulong(f)
+ local offset=readulong(f)
+ local length=readulong(f)
+ if offset+length>filesize then
+ report("bad %a table in file %a",tag,basename)
+ end
+ tables[tag]={
+ checksum=checksum,
+ offset=offset,
+ length=length,
+ }
+ end
+ if tables.cff then
+ fontdata.format="opentype"
+ else
+ fontdata.format="truetype"
+ end
+ return fontdata
+end
+local function prepareglyps(fontdata)
+ local glyphs=setmetatableindex(function(t,k)
+ local v={
+ index=k,
+ }
+ t[k]=v
+ return v
+ end)
+ fontdata.glyphs=glyphs
+ fontdata.mapping={}
+end
+local function readdata(f,offset,specification)
+ local fontdata=loadtables(f,specification,offset)
+ if specification.glyphs then
+ prepareglyps(fontdata)
+ end
+ readers["name"](f,fontdata,specification)
+ local askedname=specification.askedname
+ if askedname then
+ local fullname=getname(fontdata,"fullname") or ""
+ local cleanname=gsub(askedname,"[^a-zA-Z0-9]","")
+ local foundname=gsub(fullname,"[^a-zA-Z0-9]","")
+ if lower(cleanname)~=lower(foundname) then
+ return
+ end
+ end
+ readers["os/2"](f,fontdata,specification)
+ readers["head"](f,fontdata,specification)
+ readers["maxp"](f,fontdata,specification)
+ readers["hhea"](f,fontdata,specification)
+ readers["vhea"](f,fontdata,specification)
+ readers["hmtx"](f,fontdata,specification)
+ readers["vmtx"](f,fontdata,specification)
+ readers["vorg"](f,fontdata,specification)
+ readers["post"](f,fontdata,specification)
+ readers["cff" ](f,fontdata,specification)
+ readers["cmap"](f,fontdata,specification)
+ readers["loca"](f,fontdata,specification)
+ readers["glyf"](f,fontdata,specification)
+ readers["colr"](f,fontdata,specification)
+ readers["cpal"](f,fontdata,specification)
+ readers["svg" ](f,fontdata,specification)
+ readers["kern"](f,fontdata,specification)
+ readers["gdef"](f,fontdata,specification)
+ readers["gsub"](f,fontdata,specification)
+ readers["gpos"](f,fontdata,specification)
+ readers["math"](f,fontdata,specification)
+ fontdata.locations=nil
+ fontdata.tables=nil
+ fontdata.cidmaps=nil
+ fontdata.dictionaries=nil
+ return fontdata
+end
+local function loadfontdata(specification)
+ local filename=specification.filename
+ local fileattr=lfs.attributes(filename)
+ local filesize=fileattr and fileattr.size or 0
+ local filetime=fileattr and fileattr.modification or 0
+ local f=openfile(filename,true)
+ if not f then
+ report("unable to open %a",filename)
+ elseif filesize==0 then
+ report("empty file %a",filename)
+ closefile(f)
+ else
+ specification.filesize=filesize
+ specification.filetime=filetime
+ local version=readstring(f,4)
+ local fontdata=nil
+ if version=="OTTO" or version=="true" or version=="\0\1\0\0" then
+ fontdata=readdata(f,0,specification)
+ elseif version=="ttcf" then
+ local subfont=tonumber(specification.subfont)
+ local offsets={}
+ local ttcversion=readulong(f)
+ local nofsubfonts=readulong(f)
+ for i=1,nofsubfonts do
+ offsets[i]=readulong(f)
+ end
+ if subfont then
+ if subfont>=1 and subfont<=nofsubfonts then
+ fontdata=readdata(f,offsets[subfont],specification)
+ else
+ report("no subfont %a in file %a",subfont,filename)
+ end
+ else
+ subfont=specification.subfont
+ if type(subfont)=="string" and subfont~="" then
+ specification.askedname=subfont
+ for i=1,nofsubfonts do
+ fontdata=readdata(f,offsets[i],specification)
+ if fontdata then
+ fontdata.subfontindex=i
+ report("subfont named %a has index %a",subfont,i)
+ break
+ end
+ end
+ if not fontdata then
+ report("no subfont named %a",subfont)
+ end
+ else
+ local subfonts={}
+ fontdata={
+ filename=filename,
+ filesize=filesize,
+ filetime=filetime,
+ version=version,
+ subfonts=subfonts,
+ ttcversion=ttcversion,
+ nofsubfonts=nofsubfonts,
+ }
+ for i=1,nofsubfonts do
+ subfonts[i]=readdata(f,offsets[i],specification)
+ end
+ end
+ end
+ else
+ report("unknown version %a in file %a",version,filename)
+ end
+ closefile(f)
+ return fontdata or {}
+ end
+end
+local function loadfont(specification,n)
+ if type(specification)=="string" then
+ specification={
+ filename=specification,
+ info=true,
+ details=true,
+ glyphs=true,
+ shapes=true,
+ kerns=true,
+ globalkerns=true,
+ lookups=true,
+ subfont=n or true,
+ tounicode=false,
+ }
+ end
+ if specification.shapes or specification.lookups or specification.kerns then
+ specification.glyphs=true
+ end
+ if specification.glyphs then
+ specification.details=true
+ end
+ if specification.details then
+ specification.info=true
+ end
+ if specification.platformnames then
+ specification.platformnames=true
+ end
+ local function message(str)
+ report("fatal error in file %a: %s\n%s",specification.filename,str,debug.traceback())
+ end
+ local ok,result=xpcall(loadfontdata,message,specification)
+ if ok then
+ return result
+ end
+end
+function readers.loadshapes(filename,n)
+ local fontdata=loadfont {
+ filename=filename,
+ shapes=true,
+ subfont=n,
+ }
+ if fontdata then
+ for k,v in next,fontdata.glyphs do
+ v.class=nil
+ v.index=nil
+ v.math=nil
+ end
+ end
+ return fontdata and {
+ filename=filename,
+ format=fontdata.format,
+ glyphs=fontdata.glyphs,
+ units=fontdata.fontheader.units,
+ } or {
+ filename=filename,
+ format="unknown",
+ glyphs={},
+ units=0,
+ }
+end
+function readers.loadfont(filename,n)
+ local fontdata=loadfont {
+ filename=filename,
+ glyphs=true,
+ shapes=false,
+ lookups=true,
+ subfont=n,
+ }
+ if fontdata then
+ return {
+ tableversion=tableversion,
+ creator="context mkiv",
+ size=fontdata.filesize,
+ time=fontdata.filetime,
+ glyphs=fontdata.glyphs,
+ descriptions=fontdata.descriptions,
+ format=fontdata.format,
+ goodies={},
+ metadata=getinfo(fontdata,n,false,false,true),
+ properties={
+ hasitalics=fontdata.hasitalics or false,
+ maxcolorclass=fontdata.maxcolorclass,
+ hascolor=fontdata.hascolor or false,
+ },
+ resources={
+ filename=filename,
+ private=privateoffset,
+ duplicates=fontdata.duplicates or {},
+ features=fontdata.features or {},
+ sublookups=fontdata.sublookups or {},
+ marks=fontdata.marks or {},
+ markclasses=fontdata.markclasses or {},
+ marksets=fontdata.marksets or {},
+ sequences=fontdata.sequences or {},
+ variants=fontdata.variants,
+ version=getname(fontdata,"version"),
+ cidinfo=fontdata.cidinfo,
+ mathconstants=fontdata.mathconstants,
+ colorpalettes=fontdata.colorpalettes,
+ svgshapes=fontdata.svgshapes,
+ },
+ }
+ end
+end
+function readers.getinfo(filename,specification)
+ local subfont=nil
+ local platformnames=false
+ local rawfamilynames=false
+ if type(specification)=="table" then
+ subfont=tonumber(specification.subfont)
+ platformnames=specification.platformnames
+ rawfamilynames=specification.rawfamilynames
+ else
+ subfont=tonumber(specification)
+ end
+ local fontdata=loadfont {
+ filename=filename,
+ details=true,
+ platformnames=platformnames,
+ }
+ if fontdata then
+ local subfonts=fontdata.subfonts
+ if not subfonts then
+ return getinfo(fontdata,nil,platformnames,rawfamilynames)
+ elseif not subfont then
+ local info={}
+ for i=1,#subfonts do
+ info[i]=getinfo(fontdata,i,platformnames,rawfamilynames)
+ end
+ return info
+ elseif subfont>=1 and subfont<=#subfonts then
+ return getinfo(fontdata,subfont,platformnames,rawfamilynames)
+ else
+ return {
+ filename=filename,
+ comment="there is no subfont "..subfont.." in this file"
+ }
+ end
+ else
+ return {
+ filename=filename,
+ comment="the file cannot be opened for reading",
+ }
+ end
+end
+function readers.rehash(fontdata,hashmethod)
+ report("the %a helper is not yet implemented","rehash")
+end
+function readers.checkhash(fontdata)
+ report("the %a helper is not yet implemented","checkhash")
+end
+function readers.pack(fontdata,hashmethod)
+ report("the %a helper is not yet implemented","pack")
+end
+function readers.unpack(fontdata)
+ report("the %a helper is not yet implemented","unpack")
+end
+function readers.expand(fontdata)
+ report("the %a helper is not yet implemented","unpack")
+end
+function readers.compact(fontdata)
+ report("the %a helper is not yet implemented","compact")
+end
+local extenders={}
+function readers.registerextender(extender)
+ extenders[#extenders+1]=extender
+end
+function readers.extend(fontdata)
+ for i=1,#extenders do
+ local extender=extenders[i]
+ local name=extender.name or "unknown"
+ local action=extender.action
+ if action then
+ action(fontdata)
+ end
+ end
+end
+
+end --- [luaotfload, fontloader-2017-02-11.lua scope for “font-otrâ€] ---
+
+
+do --- [luaotfload, fontloader-2017-02-11.lua scope for “font-cff†f3fc74e8629f7a2825c34a34550c790d] ---
+
+if not modules then modules={} end modules ['font-cff']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local next,type,tonumber=next,type,tonumber
+local byte=string.byte
+local concat,remove=table.concat,table.remove
+local floor,abs,round,ceil=math.floor,math.abs,math.round,math.ceil
+local P,C,R,S,C,Cs,Ct=lpeg.P,lpeg.C,lpeg.R,lpeg.S,lpeg.C,lpeg.Cs,lpeg.Ct
+local lpegmatch=lpeg.match
+local formatters=string.formatters
+local readers=fonts.handlers.otf.readers
+local streamreader=readers.streamreader
+local readbytes=streamreader.readbytes
+local readstring=streamreader.readstring
+local readbyte=streamreader.readcardinal1
+local readushort=streamreader.readcardinal2
+local readuint=streamreader.readcardinal3
+local readulong=streamreader.readcardinal4
+local setposition=streamreader.setposition
+local getposition=streamreader.getposition
+local setmetatableindex=table.setmetatableindex
+local trace_charstrings=false trackers.register("fonts.cff.charstrings",function(v) trace_charstrings=v end)
+local report=logs.reporter("otf reader","cff")
+local parsedictionaries
+local parsecharstring
+local parsecharstrings
+local resetcharstrings
+local parseprivates
+local defaultstrings={ [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","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","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","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",
+ "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",
+ "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","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",
+ "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","001.000","001.001","001.002","001.003",
+ "Black","Bold","Book","Light","Medium","Regular","Roman","Semibold",
+}
+local cffreaders={
+ readbyte,
+ readushort,
+ readuint,
+ readulong,
+}
+local function readheader(f)
+ local offset=getposition(f)
+ local header={
+ offset=offset,
+ major=readbyte(f),
+ minor=readbyte(f),
+ size=readbyte(f),
+ osize=readbyte(f),
+ }
+ setposition(f,offset+header.size)
+ return header
+end
+local function readlengths(f)
+ local count=readushort(f)
+ if count==0 then
+ return {}
+ end
+ local osize=readbyte(f)
+ local read=cffreaders[osize]
+ if not read then
+ report("bad offset size: %i",osize)
+ return {}
+ end
+ local lengths={}
+ local previous=read(f)
+ for i=1,count do
+ local offset=read(f)
+ lengths[i]=offset-previous
+ previous=offset
+ end
+ return lengths
+end
+local function readfontnames(f)
+ local names=readlengths(f)
+ for i=1,#names do
+ names[i]=readstring(f,names[i])
+ end
+ return names
+end
+local function readtopdictionaries(f)
+ local dictionaries=readlengths(f)
+ for i=1,#dictionaries do
+ dictionaries[i]=readstring(f,dictionaries[i])
+ end
+ return dictionaries
+end
+local function readstrings(f)
+ local lengths=readlengths(f)
+ local strings=setmetatableindex({},defaultstrings)
+ local index=#defaultstrings
+ for i=1,#lengths do
+ index=index+1
+ strings[index]=readstring(f,lengths[i])
+ end
+ return strings
+end
+do
+ local stack={}
+ local top=0
+ local result={}
+ local strings={}
+ local p_single=P("\00")/function()
+ result.version=strings[stack[top]] or "unset"
+ top=0
+ end+P("\01")/function()
+ result.notice=strings[stack[top]] or "unset"
+ top=0
+ end+P("\02")/function()
+ result.fullname=strings[stack[top]] or "unset"
+ top=0
+ end+P("\03")/function()
+ result.familyname=strings[stack[top]] or "unset"
+ top=0
+ end+P("\04")/function()
+ result.weight=strings[stack[top]] or "unset"
+ top=0
+ end+P("\05")/function()
+ result.fontbbox={ unpack(stack,1,4) }
+ top=0
+ end
++P("\13")/function()
+ result.uniqueid=stack[top]
+ top=0
+ end+P("\14")/function()
+ result.xuid=concat(stack,"",1,top)
+ top=0
+ end+P("\15")/function()
+ result.charset=stack[top]
+ top=0
+ end+P("\16")/function()
+ result.encoding=stack[top]
+ top=0
+ end+P("\17")/function()
+ result.charstrings=stack[top]
+ top=0
+ end+P("\18")/function()
+ result.private={
+ size=stack[top-1],
+ offset=stack[top],
+ }
+ top=0
+ end+P("\19")/function()
+ result.subroutines=stack[top]
+ end+P("\20")/function()
+ result.defaultwidthx=stack[top]
+ end+P("\21")/function()
+ result.nominalwidthx=stack[top]
+ end
+ local p_double=P("\12")*(
+ P("\00")/function()
+ result.copyright=stack[top]
+ top=0
+ end+P("\01")/function()
+ result.monospaced=stack[top]==1 and true or false
+ top=0
+ end+P("\02")/function()
+ result.italicangle=stack[top]
+ top=0
+ end+P("\03")/function()
+ result.underlineposition=stack[top]
+ top=0
+ end+P("\04")/function()
+ result.underlinethickness=stack[top]
+ top=0
+ end+P("\05")/function()
+ result.painttype=stack[top]
+ top=0
+ end+P("\06")/function()
+ result.charstringtype=stack[top]
+ top=0
+ end+P("\07")/function()
+ result.fontmatrix={ unpack(stack,1,6) }
+ top=0
+ end+P("\08")/function()
+ result.strokewidth=stack[top]
+ top=0
+ end+P("\20")/function()
+ result.syntheticbase=stack[top]
+ top=0
+ end+P("\21")/function()
+ result.postscript=strings[stack[top]] or "unset"
+ top=0
+ end+P("\22")/function()
+ result.basefontname=strings[stack[top]] or "unset"
+ top=0
+ end+P("\21")/function()
+ result.basefontblend=stack[top]
+ top=0
+ end+P("\30")/function()
+ result.cid.registry=strings[stack[top-2]] or "unset"
+ result.cid.ordering=strings[stack[top-1]] or "unset"
+ result.cid.supplement=stack[top]
+ top=0
+ end+P("\31")/function()
+ result.cid.fontversion=stack[top]
+ top=0
+ end+P("\32")/function()
+ result.cid.fontrevision=stack[top]
+ top=0
+ end+P("\33")/function()
+ result.cid.fonttype=stack[top]
+ top=0
+ end+P("\34")/function()
+ result.cid.count=stack[top]
+ top=0
+ end+P("\35")/function()
+ result.cid.uidbase=stack[top]
+ top=0
+ end+P("\36")/function()
+ result.cid.fdarray=stack[top]
+ top=0
+ end+P("\37")/function()
+ result.cid.fdselect=stack[top]
+ top=0
+ end+P("\38")/function()
+ result.cid.fontname=strings[stack[top]] or "unset"
+ top=0
+ end
+ )
+ local p_last=P("\x0F")/"0"+P("\x1F")/"1"+P("\x2F")/"2"+P("\x3F")/"3"+P("\x4F")/"4"+P("\x5F")/"5"+P("\x6F")/"6"+P("\x7F")/"7"+P("\x8F")/"8"+P("\x9F")/"9"+P("\xAF")/""+P("\xBF")/""+P("\xCF")/""+P("\xDF")/""+P("\xEF")/""+R("\xF0\xFF")/""
+ local remap={
+ ["\x00"]="00",["\x01"]="01",["\x02"]="02",["\x03"]="03",["\x04"]="04",["\x05"]="05",["\x06"]="06",["\x07"]="07",["\x08"]="08",["\x09"]="09",["\x0A"]="0.",["\x0B"]="0E",["\x0C"]="0E-",["\x0D"]="0",["\x0E"]="0-",["\x0F"]="0",
+ ["\x10"]="10",["\x11"]="11",["\x12"]="12",["\x13"]="13",["\x14"]="14",["\x15"]="15",["\x16"]="16",["\x17"]="17",["\x18"]="18",["\x19"]="19",["\x1A"]="0.",["\x1B"]="0E",["\x1C"]="0E-",["\x1D"]="0",["\x1E"]="0-",["\x1F"]="0",
+ ["\x20"]="20",["\x21"]="21",["\x22"]="22",["\x23"]="23",["\x24"]="24",["\x25"]="25",["\x26"]="26",["\x27"]="27",["\x28"]="28",["\x29"]="29",["\x2A"]="0.",["\x2B"]="0E",["\x2C"]="0E-",["\x2D"]="0",["\x2E"]="0-",["\x2F"]="0",
+ ["\x30"]="30",["\x31"]="31",["\x32"]="32",["\x33"]="33",["\x34"]="34",["\x35"]="35",["\x36"]="36",["\x37"]="37",["\x38"]="38",["\x39"]="39",["\x3A"]="0.",["\x3B"]="0E",["\x3C"]="0E-",["\x3D"]="0",["\x3E"]="0-",["\x3F"]="0",
+ ["\x40"]="40",["\x41"]="41",["\x42"]="42",["\x43"]="43",["\x44"]="44",["\x45"]="45",["\x46"]="46",["\x47"]="47",["\x48"]="48",["\x49"]="49",["\x4A"]="0.",["\x4B"]="0E",["\x4C"]="0E-",["\x4D"]="0",["\x4E"]="0-",["\x4F"]="0",
+ ["\x50"]="50",["\x51"]="51",["\x52"]="52",["\x53"]="53",["\x54"]="54",["\x55"]="55",["\x56"]="56",["\x57"]="57",["\x58"]="58",["\x59"]="59",["\x5A"]="0.",["\x5B"]="0E",["\x5C"]="0E-",["\x5D"]="0",["\x5E"]="0-",["\x5F"]="0",
+ ["\x60"]="60",["\x61"]="61",["\x62"]="62",["\x63"]="63",["\x64"]="64",["\x65"]="65",["\x66"]="66",["\x67"]="67",["\x68"]="68",["\x69"]="69",["\x6A"]="0.",["\x6B"]="0E",["\x6C"]="0E-",["\x6D"]="0",["\x6E"]="0-",["\x6F"]="0",
+ ["\x70"]="70",["\x71"]="71",["\x72"]="72",["\x73"]="73",["\x74"]="74",["\x75"]="75",["\x76"]="76",["\x77"]="77",["\x78"]="78",["\x79"]="79",["\x7A"]="0.",["\x7B"]="0E",["\x7C"]="0E-",["\x7D"]="0",["\x7E"]="0-",["\x7F"]="0",
+ ["\x80"]="80",["\x81"]="81",["\x82"]="82",["\x83"]="83",["\x84"]="84",["\x85"]="85",["\x86"]="86",["\x87"]="87",["\x88"]="88",["\x89"]="89",["\x8A"]="0.",["\x8B"]="0E",["\x8C"]="0E-",["\x8D"]="0",["\x8E"]="0-",["\x8F"]="0",
+ ["\x90"]="90",["\x91"]="91",["\x92"]="92",["\x93"]="93",["\x94"]="94",["\x95"]="95",["\x96"]="96",["\x97"]="97",["\x98"]="98",["\x99"]="99",["\x9A"]="0.",["\x9B"]="0E",["\x9C"]="0E-",["\x9D"]="0",["\x9E"]="0-",["\x9F"]="0",
+ ["\xA0"]=".0",["\xA1"]=".1",["\xA2"]=".2",["\xA3"]=".3",["\xA4"]=".4",["\xA5"]=".5",["\xA6"]=".6",["\xA7"]=".7",["\xA8"]=".8",["\xA9"]=".9",["\xAA"]="..",["\xAB"]=".E",["\xAC"]=".E-",["\xAD"]=".",["\xAE"]=".-",["\xAF"]=".",
+ ["\xB0"]="E0",["\xB1"]="E1",["\xB2"]="E2",["\xB3"]="E3",["\xB4"]="E4",["\xB5"]="E5",["\xB6"]="E6",["\xB7"]="E7",["\xB8"]="E8",["\xB9"]="E9",["\xBA"]="E.",["\xBB"]="EE",["\xBC"]="EE-",["\xBD"]="E",["\xBE"]="E-",["\xBF"]="E",
+ ["\xC0"]="E-0",["\xC1"]="E-1",["\xC2"]="E-2",["\xC3"]="E-3",["\xC4"]="E-4",["\xC5"]="E-5",["\xC6"]="E-6",["\xC7"]="E-7",["\xC8"]="E-8",["\xC9"]="E-9",["\xCA"]="E-.",["\xCB"]="E-E",["\xCC"]="E-E-",["\xCD"]="E-",["\xCE"]="E--",["\xCF"]="E-",
+ ["\xD0"]="-0",["\xD1"]="-1",["\xD2"]="-2",["\xD3"]="-3",["\xD4"]="-4",["\xD5"]="-5",["\xD6"]="-6",["\xD7"]="-7",["\xD8"]="-8",["\xD9"]="-9",["\xDA"]="-.",["\xDB"]="-E",["\xDC"]="-E-",["\xDD"]="-",["\xDE"]="--",["\xDF"]="-",
+ }
+ local p_nibbles=P("\30")*Cs(((1-p_last)/remap)^0+p_last)/function(n)
+ top=top+1
+ stack[top]=tonumber(n) or 0
+ end
+ local p_byte=C(R("\32\246"))/function(b0)
+ top=top+1
+ stack[top]=byte(b0)-139
+ end
+ local p_positive=C(R("\247\250"))*C(1)/function(b0,b1)
+ top=top+1
+ stack[top]=(byte(b0)-247)*256+byte(b1)+108
+ end
+ local p_negative=C(R("\251\254"))*C(1)/function(b0,b1)
+ top=top+1
+ stack[top]=-(byte(b0)-251)*256-byte(b1)-108
+ end
+ local p_short=P("\28")*C(1)*C(1)/function(b1,b2)
+ top=top+1
+ local n=0x100*byte(b1)+byte(b2)
+ if n>=0x8000 then
+ stack[top]=n-0xFFFF-1
+ else
+ stack[top]=n
+ end
+ end
+ local p_long=P("\29")*C(1)*C(1)*C(1)*C(1)/function(b1,b2,b3,b4)
+ top=top+1
+ local n=0x1000000*byte(b1)+0x10000*byte(b2)+0x100*byte(b3)+byte(b4)
+ if n>=0x8000000 then
+ stack[top]=n-0xFFFFFFFF-1
+ else
+ stack[top]=n
+ end
+ end
+ local p_unsupported=P(1)/function(detail)
+ top=0
+ end
+ local p_dictionary=(
+ p_byte+p_positive+p_negative+p_short+p_long+p_nibbles+p_single+p_double+p_unsupported
+ )^1
+ parsedictionaries=function(data,dictionaries)
+ stack={}
+ strings=data.strings
+ for i=1,#dictionaries do
+ top=0
+ result={
+ monospaced=false,
+ italicangle=0,
+ underlineposition=-100,
+ underlinethickness=50,
+ painttype=0,
+ charstringtype=2,
+ fontmatrix={ 0.001,0,0,0.001,0,0 },
+ fontbbox={ 0,0,0,0 },
+ strokewidth=0,
+ charset=0,
+ encoding=0,
+ cid={
+ fontversion=0,
+ fontrevision=0,
+ fonttype=0,
+ count=8720,
+ }
+ }
+ lpegmatch(p_dictionary,dictionaries[i])
+ dictionaries[i]=result
+ end
+ result={}
+ top=0
+ stack={}
+ end
+ parseprivates=function(data,dictionaries)
+ stack={}
+ strings=data.strings
+ for i=1,#dictionaries do
+ local private=dictionaries[i].private
+ if private and private.data then
+ top=0
+ result={
+ forcebold=false,
+ languagegroup=0,
+ expansionfactor=0.06,
+ initialrandomseed=0,
+ subroutines=0,
+ defaultwidthx=0,
+ nominalwidthx=0,
+ cid={
+ },
+ }
+ lpegmatch(p_dictionary,private.data)
+ private.data=result
+ end
+ end
+ result={}
+ top=0
+ stack={}
+ end
+ local x=0
+ local y=0
+ local width=false
+ local r=0
+ local stems=0
+ local globalbias=0
+ local localbias=0
+ local globals=false
+ local locals=false
+ local depth=1
+ local xmin=0
+ local xmax=0
+ local ymin=0
+ local ymax=0
+ local checked=false
+ local keepcurve=false
+ local version=2
+ local function showstate(where)
+ report("%w%-10s : [%s] n=%i",depth*2,where,concat(stack," ",1,top),top)
+ end
+ local function showvalue(where,value,showstack)
+ if showstack then
+ report("%w%-10s : %s : [%s] n=%i",depth*2,where,tostring(value),concat(stack," ",1,top),top)
+ else
+ report("%w%-10s : %s",depth*2,where,tostring(value))
+ end
+ end
+ local function moveto(x,y)
+ if keepcurve then
+ r=r+1
+ result[r]={ x,y,"m" }
+ end
+ if checked then
+ if x<xmin then xmin=x elseif x>xmax then xmax=x end
+ if y<ymin then ymin=y elseif y>ymax then ymax=y end
+ else
+ xmin=x
+ ymin=y
+ xmax=x
+ ymax=y
+ checked=true
+ end
+ end
+ local function lineto(x,y)
+ if keepcurve then
+ r=r+1
+ result[r]={ x,y,"l" }
+ end
+ if checked then
+ if x<xmin then xmin=x elseif x>xmax then xmax=x end
+ if y<ymin then ymin=y elseif y>ymax then ymax=y end
+ else
+ xmin=x
+ ymin=y
+ xmax=x
+ ymax=y
+ checked=true
+ end
+ end
+ local function curveto(x1,y1,x2,y2,x3,y3)
+ if keepcurve then
+ r=r+1
+ result[r]={ x1,y1,x2,y2,x3,y3,"c" }
+ end
+ if checked then
+ if x1<xmin then xmin=x1 elseif x1>xmax then xmax=x1 end
+ if y1<ymin then ymin=y1 elseif y1>ymax then ymax=y1 end
+ else
+ xmin=x1
+ ymin=y1
+ xmax=x1
+ ymax=y1
+ checked=true
+ end
+ if x2<xmin then xmin=x2 elseif x2>xmax then xmax=x2 end
+ if y2<ymin then ymin=y2 elseif y2>ymax then ymax=y2 end
+ if x3<xmin then xmin=x3 elseif x3>xmax then xmax=x3 end
+ if y3<ymin then ymin=y3 elseif y3>ymax then ymax=y3 end
+ end
+ local function rmoveto()
+ if top>2 then
+ if not width then
+ width=stack[1]
+ if trace_charstrings then
+ showvalue("width",width)
+ end
+ end
+ elseif not width then
+ width=true
+ end
+ if trace_charstrings then
+ showstate("rmoveto")
+ end
+ x=x+stack[top-1]
+ y=y+stack[top]
+ top=0
+ moveto(x,y)
+ end
+ local function hmoveto()
+ if top>1 then
+ if not width then
+ width=stack[1]
+ if trace_charstrings then
+ showvalue("width",width)
+ end
+ end
+ elseif not width then
+ width=true
+ end
+ if trace_charstrings then
+ showstate("hmoveto")
+ end
+ x=x+stack[top]
+ top=0
+ moveto(x,y)
+ end
+ local function vmoveto()
+ if top>1 then
+ if not width then
+ width=stack[1]
+ if trace_charstrings then
+ showvalue("width",width)
+ end
+ end
+ elseif not width then
+ width=true
+ end
+ if trace_charstrings then
+ showstate("vmoveto")
+ end
+ y=y+stack[top]
+ top=0
+ moveto(x,y)
+ end
+ local function rlineto()
+ if trace_charstrings then
+ showstate("rlineto")
+ end
+ for i=1,top,2 do
+ x=x+stack[i]
+ y=y+stack[i+1]
+ lineto(x,y)
+ end
+ top=0
+ end
+ local function xlineto(swap)
+ for i=1,top do
+ if swap then
+ x=x+stack[i]
+ swap=false
+ else
+ y=y+stack[i]
+ swap=true
+ end
+ lineto(x,y)
+ end
+ top=0
+ end
+ local function hlineto()
+ if trace_charstrings then
+ showstate("hlineto")
+ end
+ xlineto(true)
+ end
+ local function vlineto()
+ if trace_charstrings then
+ showstate("vlineto")
+ end
+ xlineto(false)
+ end
+ local function rrcurveto()
+ if trace_charstrings then
+ showstate("rrcurveto")
+ end
+ for i=1,top,6 do
+ local ax=x+stack[i]
+ local ay=y+stack[i+1]
+ local bx=ax+stack[i+2]
+ local by=ay+stack[i+3]
+ x=bx+stack[i+4]
+ y=by+stack[i+5]
+ curveto(ax,ay,bx,by,x,y)
+ end
+ top=0
+ end
+ local function hhcurveto()
+ if trace_charstrings then
+ showstate("hhcurveto")
+ end
+ local s=1
+ if top%2~=0 then
+ y=y+stack[1]
+ s=2
+ end
+ for i=s,top,4 do
+ local ax=x+stack[i]
+ local ay=y
+ local bx=ax+stack[i+1]
+ local by=ay+stack[i+2]
+ x=bx+stack[i+3]
+ y=by
+ curveto(ax,ay,bx,by,x,y)
+ end
+ top=0
+ end
+ local function vvcurveto()
+ if trace_charstrings then
+ showstate("vvcurveto")
+ end
+ local s=1
+ local d=0
+ if top%2~=0 then
+ d=stack[1]
+ s=2
+ end
+ for i=s,top,4 do
+ local ax=x+d
+ local ay=y+stack[i]
+ local bx=ax+stack[i+1]
+ local by=ay+stack[i+2]
+ x=bx
+ y=by+stack[i+3]
+ curveto(ax,ay,bx,by,x,y)
+ d=0
+ end
+ top=0
+ end
+ local function xxcurveto(swap)
+ local last=top%4~=0 and stack[top]
+ if last then
+ top=top-1
+ end
+ local sw=swap
+ for i=1,top,4 do
+ local ax,ay,bx,by
+ if swap then
+ ax=x+stack[i]
+ ay=y
+ bx=ax+stack[i+1]
+ by=ay+stack[i+2]
+ y=by+stack[i+3]
+ if last and i+3==top then
+ x=bx+last
+ else
+ x=bx
+ end
+ swap=false
+ else
+ ax=x
+ ay=y+stack[i]
+ bx=ax+stack[i+1]
+ by=ay+stack[i+2]
+ x=bx+stack[i+3]
+ if last and i+3==top then
+ y=by+last
+ else
+ y=by
+ end
+ swap=true
+ end
+ curveto(ax,ay,bx,by,x,y)
+ end
+ top=0
+ end
+ local function hvcurveto()
+ if trace_charstrings then
+ showstate("hvcurveto")
+ end
+ xxcurveto(true)
+ end
+ local function vhcurveto()
+ if trace_charstrings then
+ showstate("vhcurveto")
+ end
+ xxcurveto(false)
+ end
+ local function rcurveline()
+ if trace_charstrings then
+ showstate("rcurveline")
+ end
+ for i=1,top-2,6 do
+ local ax=x+stack[i]
+ local ay=y+stack[i+1]
+ local bx=ax+stack[i+2]
+ local by=ay+stack[i+3]
+ x=bx+stack[i+4]
+ y=by+stack[i+5]
+ curveto(ax,ay,bx,by,x,y)
+ end
+ x=x+stack[top-1]
+ y=y+stack[top]
+ lineto(x,y)
+ top=0
+ end
+ local function rlinecurve()
+ if trace_charstrings then
+ showstate("rlinecurve")
+ end
+ if top>6 then
+ for i=1,top-6,2 do
+ x=x+stack[i]
+ y=y+stack[i+1]
+ lineto(x,y)
+ end
+ end
+ local ax=x+stack[top-5]
+ local ay=y+stack[top-4]
+ local bx=ax+stack[top-3]
+ local by=ay+stack[top-2]
+ x=bx+stack[top-1]
+ y=by+stack[top]
+ curveto(ax,ay,bx,by,x,y)
+ top=0
+ end
+ local function flex()
+ if trace_charstrings then
+ showstate("flex")
+ end
+ local ax=x+stack[1]
+ local ay=y+stack[2]
+ local bx=ax+stack[3]
+ local by=ay+stack[4]
+ local cx=bx+stack[5]
+ local cy=by+stack[6]
+ curveto(ax,ay,bx,by,cx,cy)
+ local dx=cx+stack[7]
+ local dy=cy+stack[8]
+ local ex=dx+stack[9]
+ local ey=dy+stack[10]
+ x=ex+stack[11]
+ y=ey+stack[12]
+ curveto(dx,dy,ex,ey,x,y)
+ top=0
+ end
+ local function hflex()
+ if trace_charstrings then
+ showstate("hflex")
+ end
+ local ax=x+stack[1]
+ local ay=y
+ local bx=ax+stack[2]
+ local by=ay+stack[3]
+ local cx=bx+stack[4]
+ local cy=by
+ curveto(ax,ay,bx,by,cx,cy)
+ local dx=cx+stack[5]
+ local dy=by
+ local ex=dx+stack[6]
+ local ey=y
+ x=ex+stack[7]
+ curveto(dx,dy,ex,ey,x,y)
+ top=0
+ end
+ local function hflex1()
+ if trace_charstrings then
+ showstate("hflex1")
+ end
+ local ax=x+stack[1]
+ local ay=y+stack[2]
+ local bx=ax+stack[3]
+ local by=ay+stack[4]
+ local cx=bx+stack[5]
+ local cy=by
+ curveto(ax,ay,bx,by,cx,cy)
+ local dx=cx+stack[6]
+ local dy=by
+ local ex=dx+stack[7]
+ local ey=dy+stack[8]
+ x=ex+stack[9]
+ curveto(dx,dy,ex,ey,x,y)
+ top=0
+ end
+ local function flex1()
+ if trace_charstrings then
+ showstate("flex1")
+ end
+ local ax=x+stack[1]
+ local ay=y+stack[2]
+ local bx=ax+stack[3]
+ local by=ay+stack[4]
+ local cx=bx+stack[5]
+ local cy=by+stack[6]
+ curveto(ax,ay,bx,by,cx,cy)
+ local dx=cx+stack[7]
+ local dy=cy+stack[8]
+ local ex=dx+stack[9]
+ local ey=dy+stack[10]
+ if abs(ex-x)>abs(ey-y) then
+ x=ex+stack[11]
+ else
+ y=ey+stack[11]
+ end
+ curveto(dx,dy,ex,ey,x,y)
+ top=0
+ end
+ local function getstem()
+ if top==0 then
+ elseif top%2~=0 then
+ if width then
+ remove(stack,1)
+ else
+ width=remove(stack,1)
+ if trace_charstrings then
+ showvalue("width",width)
+ end
+ end
+ top=top-1
+ end
+ if trace_charstrings then
+ showstate("stem")
+ end
+ stems=stems+top/2
+ top=0
+ end
+ local function getmask()
+ if top==0 then
+ elseif top%2~=0 then
+ if width then
+ remove(stack,1)
+ else
+ width=remove(stack,1)
+ if trace_charstrings then
+ showvalue("width",width)
+ end
+ end
+ top=top-1
+ end
+ if trace_charstrings then
+ showstate(operator==19 and "hintmark" or "cntrmask")
+ end
+ stems=stems+top/2
+ top=0
+ if stems==0 then
+ elseif stems<=8 then
+ return 1
+ else
+ return floor((stems+7)/8)
+ end
+ end
+ local function unsupported(t)
+ if trace_charstrings then
+ showstate("unsupported "..t)
+ end
+ top=0
+ end
+ local function unsupportedsub(t)
+ if trace_charstrings then
+ showstate("unsupported sub "..t)
+ end
+ top=0
+ end
+ local function getstem3()
+ if trace_charstrings then
+ showstate("stem3")
+ end
+ top=0
+ end
+ local function divide()
+ if version==1 then
+ local d=stack[top]
+ top=top-1
+ stack[top]=stack[top]/d
+ end
+ end
+ local function closepath()
+ if version==1 then
+ if trace_charstrings then
+ showstate("closepath")
+ end
+ end
+ top=0
+ end
+ local function hsbw()
+ if version==1 then
+ if trace_charstrings then
+ showstate("dotsection")
+ end
+ width=stack[top]
+ end
+ top=0
+ end
+ local function seac()
+ if version==1 then
+ if trace_charstrings then
+ showstate("seac")
+ end
+ end
+ top=0
+ end
+ local function sbw()
+ if version==1 then
+ if trace_charstrings then
+ showstate("sbw")
+ end
+ width=stack[top-1]
+ end
+ top=0
+ end
+ local function callothersubr()
+ if version==1 then
+ if trace_charstrings then
+ showstate("callothersubr (unsupported)")
+ end
+ end
+ top=0
+ end
+ local function pop()
+ if version==1 then
+ if trace_charstrings then
+ showstate("pop (unsupported)")
+ end
+ top=top+1
+ stack[top]=0
+ else
+ top=0
+ end
+ end
+ local function setcurrentpoint()
+ if version==1 then
+ if trace_charstrings then
+ showstate("pop (unsupported)")
+ end
+ x=x+stack[top-1]
+ y=y+stack[top]
+ end
+ top=0
+ end
+ local actions={ [0]=unsupported,
+ getstem,
+ unsupported,
+ getstem,
+ vmoveto,
+ rlineto,
+ hlineto,
+ vlineto,
+ rrcurveto,
+ unsupported,
+ unsupported,
+ unsupported,
+ unsupported,
+ hsbw,
+ unsupported,
+ unsupported,
+ unsupported,
+ unsupported,
+ getstem,
+ getmask,
+ getmask,
+ rmoveto,
+ hmoveto,
+ getstem,
+ rcurveline,
+ rlinecurve,
+ vvcurveto,
+ hhcurveto,
+ unsupported,
+ unsupported,
+ vhcurveto,
+ hvcurveto,
+ }
+ local subactions={
+ [000]=dotsection,
+ [001]=getstem3,
+ [002]=getstem3,
+ [006]=seac,
+ [007]=sbw,
+ [012]=divide,
+ [016]=callothersubr,
+ [017]=pop,
+ [033]=setcurrentpoint,
+ [034]=hflex,
+ [035]=flex,
+ [036]=hflex1,
+ [037]=flex1,
+ }
+ local p_bytes=Ct((P(1)/byte)^0)
+ local function call(scope,list,bias,process)
+ depth=depth+1
+ if top==0 then
+ showstate(formatters["unknown %s call"](scope))
+ top=0
+ else
+ local index=stack[top]+bias
+ top=top-1
+ if trace_charstrings then
+ showvalue(scope,index,true)
+ end
+ local tab=list[index]
+ if tab then
+ if type(tab)=="string" then
+ tab=lpegmatch(p_bytes,tab)
+ list[index]=tab
+ end
+ process(tab)
+ else
+ showstate(formatters["unknown %s call %i"](scope,index))
+ top=0
+ end
+ end
+ depth=depth-1
+ end
+ local function process(tab)
+ local i=1
+ local n=#tab
+ while i<=n do
+ local t=tab[i]
+ if t>=32 and t<=246 then
+ top=top+1
+ stack[top]=t-139
+ i=i+1
+ elseif t>=247 and t<=250 then
+ top=top+1
+ stack[top]=(t-247)*256+tab[i+1]+108
+ i=i+2
+ elseif t>=251 and t<=254 then
+ top=top+1
+ stack[top]=-(t-251)*256-tab[i+1]-108
+ i=i+2
+ elseif t==28 then
+ top=top+1
+ local n=0x100*tab[i+1]+tab[i+2]
+ if n>=0x8000 then
+ stack[top]=n-0xFFFF-1
+ else
+ stack[top]=n
+ end
+ i=i+3
+ elseif t==255 then
+ local n=0x100*tab[i+1]+tab[i+2]
+ top=top+1
+ if n>=0x8000 then
+ stack[top]=n-0xFFFF-1+(0x100*tab[i+3]+tab[i+4])/0xFFFF
+ else
+ stack[top]=n+(0x100*tab[i+3]+tab[i+4])/0xFFFF
+ end
+ i=i+5
+ elseif t==11 then
+ if trace_charstrings then
+ showstate("return")
+ end
+ return
+ elseif t==10 then
+ call("local",locals,localbias,process)
+ i=i+1
+ elseif t==14 then
+ if width then
+ elseif top>0 then
+ width=stack[1]
+ if trace_charstrings then
+ showvalue("width",width)
+ end
+ else
+ width=true
+ end
+ if trace_charstrings then
+ showstate("endchar")
+ end
+ return
+ elseif t==29 then
+ call("global",globals,globalbias,process)
+ i=i+1
+ elseif t==12 then
+ i=i+1
+ local t=tab[i]
+ local a=subactions[t]
+ if a then
+ a(t)
+ else
+ if trace_charstrings then
+ showvalue("<subaction>",t)
+ end
+ top=0
+ end
+ i=i+1
+ else
+ local a=actions[t]
+ if a then
+ local s=a(t)
+ if s then
+ i=i+s
+ end
+ else
+ if trace_charstrings then
+ showvalue("<action>",t)
+ end
+ top=0
+ end
+ i=i+1
+ end
+ end
+ end
+ local function setbias(globals,locals)
+ if version==1 then
+ return
+ false,
+ false
+ else
+ local g,l=#globals,#locals
+ return
+ ((g<1240 and 107) or (g<33900 and 1131) or 32768)+1,
+ ((l<1240 and 107) or (l<33900 and 1131) or 32768)+1
+ end
+ end
+ parsecharstrings=function(data,glyphs,doshapes,tversion)
+ local dictionary=data.dictionaries[1]
+ local charstrings=dictionary.charstrings
+ local charset=dictionary.charset
+ local private=dictionary.private or { data={} }
+ keepcurve=doshapes
+ version=tversion
+ stack={}
+ glyphs=glyphs or {}
+ strings=data.strings
+ globals=data.routines or {}
+ locals=dictionary.subroutines or {}
+ globalbias,localbias=setbias(globals,locals)
+ local nominalwidth=private.data.nominalwidthx or 0
+ local defaultwidth=private.data.defaultwidthx or 0
+ for i=1,#charstrings do
+ local tab=charstrings[i]
+ if type(tab)=="string" then
+ tab=lpegmatch(p_bytes,tab)
+ end
+ local index=i-1
+ x=0
+ y=0
+ width=false
+ r=0
+ top=0
+ stems=0
+ result={}
+ xmin=0
+ xmax=0
+ ymin=0
+ ymax=0
+ checked=false
+ if trace_charstrings then
+ report("glyph: %i",index)
+ report("data: % t",tab)
+ end
+ process(tab)
+ local boundingbox={ round(xmin),round(ymin),round(xmax),round(ymax) }
+ if width==true or width==false then
+ width=defaultwidth
+ else
+ width=nominalwidth+width
+ end
+ local glyph=glyphs[index]
+ if not glyph then
+ glyphs[index]={
+ segments=doshapes~=false and result or nil,
+ boundingbox=boundingbox,
+ width=width,
+ name=charset[index],
+ }
+ else
+ glyph.segments=doshapes~=false and result or nil
+ glyph.boundingbox=boundingbox
+ if not glyph.width then
+ glyph.width=width
+ end
+ if charset and not glyph.name then
+ glyph.name=charset[index]
+ end
+ end
+ if trace_charstrings then
+ report("width: %s",tostring(width))
+ report("boundingbox: % t",boundingbox)
+ end
+ charstrings[i]=nil
+ end
+ return glyphs
+ end
+ parsecharstring=function(data,dictionary,tab,glyphs,index,doshapes,tversion)
+ local private=dictionary.private
+ keepcurve=doshapes
+ version=tversion
+ strings=data.strings
+ locals=dictionary.subroutines or {}
+ globals=data.routines or {}
+ globalbias,localbias=setbias(globals,locals)
+ local nominalwidth=private and private.data.nominalwidthx or 0
+ local defaultwidth=private and private.data.defaultwidthx or 0
+ if type(tab)=="string" then
+ tab=lpegmatch(p_bytes,tab)
+ end
+ x=0
+ y=0
+ width=false
+ r=0
+ top=0
+ stems=0
+ result={}
+ xmin=0
+ xmax=0
+ ymin=0
+ ymax=0
+ checked=false
+ if trace_charstrings then
+ report("glyph: %i",index)
+ report("data: % t",tab)
+ end
+ process(tab)
+ local boundingbox={ xmin,ymin,xmax,ymax }
+ if width==true or width==false then
+ width=defaultwidth
+ else
+ width=nominalwidth+width
+ end
+ index=index-1
+ local glyph=glyphs[index]
+ if not glyph then
+ glyphs[index]={
+ segments=doshapes~=false and result or nil,
+ boundingbox=boundingbox,
+ width=width,
+ name=charset[index],
+ }
+ else
+ glyph.segments=doshapes~=false and result or nil
+ glyph.boundingbox=boundingbox
+ if not glyph.width then
+ glyph.width=width
+ end
+ if charset and not glyph.name then
+ glyph.name=charset[index]
+ end
+ end
+ if trace_charstrings then
+ report("width: %s",tostring(width))
+ report("boundingbox: % t",boundingbox)
+ end
+ end
+ resetcharstrings=function()
+ result={}
+ top=0
+ stack={}
+ end
+end
+local function readglobals(f,data)
+ local routines=readlengths(f)
+ for i=1,#routines do
+ routines[i]=readstring(f,routines[i])
+ end
+ data.routines=routines
+end
+local function readencodings(f,data)
+ data.encodings={}
+end
+local function readcharsets(f,data,dictionary)
+ local header=data.header
+ local strings=data.strings
+ local nofglyphs=data.nofglyphs
+ local charsetoffset=dictionary.charset
+ if charsetoffset~=0 then
+ setposition(f,header.offset+charsetoffset)
+ local format=readbyte(f)
+ local charset={ [0]=".notdef" }
+ dictionary.charset=charset
+ if format==0 then
+ for i=1,nofglyphs do
+ charset[i]=strings[readushort(f)]
+ end
+ elseif format==1 or format==2 then
+ local readcount=format==1 and readbyte or readushort
+ local i=1
+ while i<=nofglyphs do
+ local sid=readushort(f)
+ local n=readcount(f)
+ for s=sid,sid+n do
+ charset[i]=strings[s]
+ i=i+1
+ if i>nofglyphs then
+ break
+ end
+ end
+ end
+ else
+ report("cff parser: unsupported charset format %a",format)
+ end
+ end
+end
+local function readprivates(f,data)
+ local header=data.header
+ local dictionaries=data.dictionaries
+ local private=dictionaries[1].private
+ if private then
+ setposition(f,header.offset+private.offset)
+ private.data=readstring(f,private.size)
+ end
+end
+local function readlocals(f,data,dictionary)
+ local header=data.header
+ local private=dictionary.private
+ if private then
+ local subroutineoffset=private.data.subroutines
+ if subroutineoffset~=0 then
+ setposition(f,header.offset+private.offset+subroutineoffset)
+ local subroutines=readlengths(f)
+ for i=1,#subroutines do
+ subroutines[i]=readstring(f,subroutines[i])
+ end
+ dictionary.subroutines=subroutines
+ private.data.subroutines=nil
+ else
+ dictionary.subroutines={}
+ end
+ else
+ dictionary.subroutines={}
+ end
+end
+local function readcharstrings(f,data)
+ local header=data.header
+ local dictionaries=data.dictionaries
+ local dictionary=dictionaries[1]
+ local type=dictionary.charstringtype
+ local offset=dictionary.charstrings
+ if type==2 then
+ setposition(f,header.offset+offset)
+ local charstrings=readlengths(f)
+ local nofglyphs=#charstrings
+ for i=1,nofglyphs do
+ charstrings[i]=readstring(f,charstrings[i])
+ end
+ data.nofglyphs=nofglyphs
+ dictionary.charstrings=charstrings
+ else
+ report("unsupported charstr type %i",type)
+ data.nofglyphs=0
+ dictionary.charstrings={}
+ end
+end
+local function readcidprivates(f,data)
+ local header=data.header
+ local dictionaries=data.dictionaries[1].cid.dictionaries
+ for i=1,#dictionaries do
+ local dictionary=dictionaries[i]
+ local private=dictionary.private
+ if private then
+ setposition(f,header.offset+private.offset)
+ private.data=readstring(f,private.size)
+ end
+ end
+ parseprivates(data,dictionaries)
+end
+local function readnoselect(f,data,glyphs,doshapes,version)
+ local dictionaries=data.dictionaries
+ local dictionary=dictionaries[1]
+ readglobals(f,data)
+ readcharstrings(f,data)
+ readencodings(f,data)
+ readcharsets(f,data,dictionary)
+ readprivates(f,data)
+ parseprivates(data,data.dictionaries)
+ readlocals(f,data,dictionary)
+ parsecharstrings(data,glyphs,doshapes,version)
+ resetcharstrings()
+end
+readers.parsecharstrings=parsecharstrings
+local function readfdselect(f,data,glyphs,doshapes,version)
+ local header=data.header
+ local dictionaries=data.dictionaries
+ local dictionary=dictionaries[1]
+ local cid=dictionary.cid
+ local cidselect=cid and cid.fdselect
+ readglobals(f,data)
+ readcharstrings(f,data)
+ readencodings(f,data)
+ local charstrings=dictionary.charstrings
+ local fdindex={}
+ local nofglyphs=data.nofglyphs
+ local maxindex=-1
+ setposition(f,header.offset+cidselect)
+ local format=readbyte(f)
+ if format==1 then
+ for i=0,nofglyphs do
+ local index=readbyte(i)
+ fdindex[i]=index
+ if index>maxindex then
+ maxindex=index
+ end
+ end
+ elseif format==3 then
+ local nofranges=readushort(f)
+ local first=readushort(f)
+ local index=readbyte(f)
+ while true do
+ local last=readushort(f)
+ if index>maxindex then
+ maxindex=index
+ end
+ for i=first,last do
+ fdindex[i]=index
+ end
+ if last>=nofglyphs then
+ break
+ else
+ first=last+1
+ index=readbyte(f)
+ end
+ end
+ else
+ end
+ if maxindex>=0 then
+ local cidarray=cid.fdarray
+ setposition(f,header.offset+cidarray)
+ local dictionaries=readlengths(f)
+ for i=1,#dictionaries do
+ dictionaries[i]=readstring(f,dictionaries[i])
+ end
+ parsedictionaries(data,dictionaries)
+ cid.dictionaries=dictionaries
+ readcidprivates(f,data)
+ for i=1,#dictionaries do
+ readlocals(f,data,dictionaries[i])
+ end
+ for i=1,#charstrings do
+ parsecharstring(data,dictionaries[fdindex[i]+1],charstrings[i],glyphs,i,doshapes,version)
+ end
+ resetcharstrings()
+ end
+end
+function readers.cff(f,fontdata,specification)
+ if specification.details then
+ local datatable=fontdata.tables.cff
+ if datatable then
+ local offset=datatable.offset
+ local glyphs=fontdata.glyphs
+ if not f then
+ report("invalid filehandle")
+ return
+ end
+ if offset then
+ setposition(f,offset)
+ end
+ local header=readheader(f)
+ if header.major>1 then
+ report("version mismatch")
+ return
+ end
+ local names=readfontnames(f)
+ local dictionaries=readtopdictionaries(f)
+ local strings=readstrings(f)
+ local data={
+ header=header,
+ names=names,
+ dictionaries=dictionaries,
+ strings=strings,
+ nofglyphs=fontdata.nofglyphs,
+ }
+ parsedictionaries(data,data.dictionaries)
+ local d=dictionaries[1]
+ local c=d.cid
+ fontdata.cffinfo={
+ familynamename=d.familyname,
+ fullname=d.fullname,
+ boundingbox=d.boundingbox,
+ weight=d.weight,
+ italicangle=d.italicangle,
+ underlineposition=d.underlineposition,
+ underlinethickness=d.underlinethickness,
+ monospaced=d.monospaced,
+ }
+ fontdata.cidinfo=c and {
+ registry=c.registry,
+ ordering=c.ordering,
+ supplement=c.supplement,
+ }
+ if not specification.glyphs then
+ else
+ local cid=d.cid
+ if cid and cid.fdselect then
+ readfdselect(f,data,glyphs,specification.shapes or false)
+ else
+ readnoselect(f,data,glyphs,specification.shapes or false)
+ end
+ end
+ end
+ end
+end
+
+end --- [luaotfload, fontloader-2017-02-11.lua scope for “font-cffâ€] ---
+
+
+do --- [luaotfload, fontloader-2017-02-11.lua scope for “font-ttf†e0893de6d0f3f421ee4386fa90429db8] ---
+
+if not modules then modules={} end modules ['font-ttf']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local next,type,unpack=next,type,unpack
+local bittest=bit32.btest
+local sqrt=math.sqrt
+local report=logs.reporter("otf reader","ttf")
+local readers=fonts.handlers.otf.readers
+local streamreader=readers.streamreader
+local setposition=streamreader.setposition
+local getposition=streamreader.getposition
+local skipbytes=streamreader.skip
+local readbyte=streamreader.readcardinal1
+local readushort=streamreader.readcardinal2
+local readulong=streamreader.readcardinal4
+local readchar=streamreader.readinteger1
+local readshort=streamreader.readinteger2
+local read2dot14=streamreader.read2dot14
+local function mergecomposites(glyphs,shapes)
+ local function merge(index,shape,components)
+ local contours={}
+ local nofcontours=0
+ for i=1,#components do
+ local component=components[i]
+ local subindex=component.index
+ local subshape=shapes[subindex]
+ local subcontours=subshape.contours
+ if not subcontours then
+ local subcomponents=subshape.components
+ if subcomponents then
+ subcontours=merge(subindex,subshape,subcomponents)
+ end
+ end
+ if subcontours then
+ local matrix=component.matrix
+ local xscale=matrix[1]
+ local xrotate=matrix[2]
+ local yrotate=matrix[3]
+ local yscale=matrix[4]
+ local xoffset=matrix[5]
+ local yoffset=matrix[6]
+ for i=1,#subcontours do
+ local points=subcontours[i]
+ local result={}
+ for i=1,#points do
+ local p=points[i]
+ local x=p[1]
+ local y=p[2]
+ result[i]={
+ xscale*x+xrotate*y+xoffset,
+ yscale*y+yrotate*x+yoffset,
+ p[3]
+ }
+ end
+ nofcontours=nofcontours+1
+ contours[nofcontours]=result
+ end
+ else
+ report("missing contours composite %s, component %s of %s, glyph %s",index,i,#components,subindex)
+ end
+ end
+ shape.contours=contours
+ shape.components=nil
+ return contours
+ end
+ for index=1,#glyphs do
+ local shape=shapes[index]
+ local components=shape.components
+ if components then
+ merge(index,shape,components)
+ end
+ end
+end
+local function readnothing(f,nofcontours)
+ return {
+ type="nothing",
+ }
+end
+local function curveto(m_x,m_y,l_x,l_y,r_x,r_y)
+ return {
+ l_x+2/3*(m_x-l_x),l_y+2/3*(m_y-l_y),
+ r_x+2/3*(m_x-r_x),r_y+2/3*(m_y-r_y),
+ r_x,r_y,"c"
+ }
+end
+local function contours2outlines(glyphs,shapes)
+ local quadratic=true
+ for index=1,#glyphs do
+ local glyph=glyphs[index]
+ local shape=shapes[index]
+ local contours=shape.contours
+ if contours then
+ local nofcontours=#contours
+ local segments={}
+ local nofsegments=0
+ glyph.segments=segments
+ if nofcontours>0 then
+ for i=1,nofcontours do
+ local contour=contours[i]
+ local nofcontour=#contour
+ if nofcontour>0 then
+ local first_pt=contour[1]
+ local first_on=first_pt[3]
+ if nofcontour==1 then
+ first_pt[3]="m"
+ nofsegments=nofsegments+1
+ segments[nofsegments]=first_pt
+ else
+ local first_on=first_pt[3]
+ local last_pt=contour[nofcontour]
+ local last_on=last_pt[3]
+ local start=1
+ local control_pt=false
+ if first_on then
+ start=2
+ else
+ if last_on then
+ first_pt=last_pt
+ else
+ first_pt={ (first_pt[1]+last_pt[1])/2,(first_pt[2]+last_pt[2])/2,false }
+ end
+ control_pt=first_pt
+ end
+ nofsegments=nofsegments+1
+ segments[nofsegments]={ first_pt[1],first_pt[2],"m" }
+ local previous_pt=first_pt
+ for i=start,nofcontour do
+ local current_pt=contour[i]
+ local current_on=current_pt[3]
+ local previous_on=previous_pt[3]
+ if previous_on then
+ if current_on then
+ nofsegments=nofsegments+1
+ segments[nofsegments]={ current_pt[1],current_pt[2],"l" }
+ else
+ control_pt=current_pt
+ end
+ elseif current_on then
+ local ps=segments[nofsegments]
+ nofsegments=nofsegments+1
+ if quadratic then
+ segments[nofsegments]={ control_pt[1],control_pt[2],current_pt[1],current_pt[2],"q" }
+ else
+ local p=segments[nofsegments-1] local n=#p
+ segments[nofsegments]=curveto(control_pt[1],control_pt[2],p[n-2],p[n-1],current_pt[1],current_pt[2])
+ end
+ control_pt=false
+ else
+ nofsegments=nofsegments+1
+ local halfway_x=(previous_pt[1]+current_pt[1])/2
+ local halfway_y=(previous_pt[2]+current_pt[2])/2
+ if quadratic then
+ segments[nofsegments]={ control_pt[1],control_pt[2],halfway_x,halfway_y,"q" }
+ else
+ local p=segments[nofsegments-1] local n=#p
+ segments[nofsegments]=curveto(control_pt[1],control_pt[2],p[n-2],p[n-1],halfway_x,halfway_y)
+ end
+ control_pt=current_pt
+ end
+ previous_pt=current_pt
+ end
+ if first_pt==last_pt then
+ else
+ nofsegments=nofsegments+1
+ if not control_pt then
+ segments[nofsegments]={ first_pt[1],first_pt[2],"l" }
+ elseif quadratic then
+ segments[nofsegments]={ control_pt[1],control_pt[2],first_pt[1],first_pt[2],"q" }
+ else
+ local p=last_pt local n=#p
+ segments[nofsegments]=curveto(control_pt[1],control_pt[2],p[n-2],p[n-1],first_pt[1],first_pt[2])
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+end
+local function readglyph(f,nofcontours)
+ local points={}
+ local endpoints={}
+ local instructions={}
+ local flags={}
+ for i=1,nofcontours do
+ endpoints[i]=readshort(f)+1
+ end
+ local nofpoints=endpoints[nofcontours]
+ local nofinstructions=readushort(f)
+ skipbytes(f,nofinstructions)
+ local i=1
+ while i<=nofpoints do
+ local flag=readbyte(f)
+ flags[i]=flag
+ if bittest(flag,0x0008) then
+ for j=1,readbyte(f) do
+ i=i+1
+ flags[i]=flag
+ end
+ end
+ i=i+1
+ end
+ local x=0
+ for i=1,nofpoints do
+ local flag=flags[i]
+ local short=bittest(flag,0x0002)
+ local same=bittest(flag,0x0010)
+ if short then
+ if same then
+ x=x+readbyte(f)
+ else
+ x=x-readbyte(f)
+ end
+ elseif same then
+ else
+ x=x+readshort(f)
+ end
+ points[i]={ x,y,bittest(flag,0x0001) }
+ end
+ local y=0
+ for i=1,nofpoints do
+ local flag=flags[i]
+ local short=bittest(flag,0x0004)
+ local same=bittest(flag,0x0020)
+ if short then
+ if same then
+ y=y+readbyte(f)
+ else
+ y=y-readbyte(f)
+ end
+ elseif same then
+ else
+ y=y+readshort(f)
+ end
+ points[i][2]=y
+ end
+ local first=1
+ for i=1,#endpoints do
+ local last=endpoints[i]
+ endpoints[i]={ unpack(points,first,last) }
+ first=last+1
+ end
+ return {
+ type="glyph",
+ contours=endpoints,
+ }
+end
+local function readcomposite(f)
+ local components={}
+ local nofcomponents=0
+ local instructions=false
+ while true do
+ local flags=readushort(f)
+ local index=readushort(f)
+ local f_xyarg=bittest(flags,0x0002)
+ local f_offset=bittest(flags,0x0800)
+ local xscale=1
+ local xrotate=0
+ local yrotate=0
+ local yscale=1
+ local xoffset=0
+ local yoffset=0
+ local base=false
+ local reference=false
+ if f_xyarg then
+ if bittest(flags,0x0001) then
+ xoffset=readshort(f)
+ yoffset=readshort(f)
+ else
+ xoffset=readchar(f)
+ yoffset=readchar(f)
+ end
+ else
+ if bittest(flags,0x0001) then
+ base=readshort(f)
+ reference=readshort(f)
+ else
+ base=readchar(f)
+ reference=readchar(f)
+ end
+ end
+ if bittest(flags,0x0008) then
+ xscale=read2dot14(f)
+ yscale=xscale
+ if f_xyarg and f_offset then
+ xoffset=xoffset*xscale
+ yoffset=yoffset*yscale
+ end
+ elseif bittest(flags,0x0040) then
+ xscale=read2dot14(f)
+ yscale=read2dot14(f)
+ if f_xyarg and f_offset then
+ xoffset=xoffset*xscale
+ yoffset=yoffset*yscale
+ end
+ elseif bittest(flags,0x0080) then
+ xscale=read2dot14(f)
+ xrotate=read2dot14(f)
+ yrotate=read2dot14(f)
+ yscale=read2dot14(f)
+ if f_xyarg and f_offset then
+ xoffset=xoffset*sqrt(xscale^2+xrotate^2)
+ yoffset=yoffset*sqrt(yrotate^2+yscale^2)
+ end
+ end
+ nofcomponents=nofcomponents+1
+ components[nofcomponents]={
+ index=index,
+ usemine=bittest(flags,0x0200),
+ round=bittest(flags,0x0006),
+ base=base,
+ reference=reference,
+ matrix={ xscale,xrotate,yrotate,yscale,xoffset,yoffset },
+ }
+ if bittest(flags,0x0100) then
+ instructions=true
+ end
+ if not bittest(flags,0x0020) then
+ break
+ end
+ end
+ return {
+ type="composite",
+ components=components,
+ }
+end
+function readers.loca(f,fontdata,specification)
+ if specification.glyphs then
+ local datatable=fontdata.tables.loca
+ if datatable then
+ local offset=fontdata.tables.glyf.offset
+ local format=fontdata.fontheader.indextolocformat
+ local locations={}
+ setposition(f,datatable.offset)
+ if format==1 then
+ local nofglyphs=datatable.length/4-1
+ -1
+ for i=0,nofglyphs do
+ locations[i]=offset+readulong(f)
+ end
+ fontdata.nofglyphs=nofglyphs
+ else
+ local nofglyphs=datatable.length/2-1
+ -1
+ for i=0,nofglyphs do
+ locations[i]=offset+readushort(f)*2
+ end
+ fontdata.nofglyphs=nofglyphs
+ end
+ fontdata.locations=locations
+ end
+ end
+end
+function readers.glyf(f,fontdata,specification)
+ if specification.glyphs then
+ local datatable=fontdata.tables.glyf
+ if datatable then
+ local locations=fontdata.locations
+ if locations then
+ local glyphs=fontdata.glyphs
+ local nofglyphs=fontdata.nofglyphs
+ local filesize=fontdata.filesize
+ local nothing={ 0,0,0,0 }
+ local shapes={}
+ local loadshapes=specification.shapes
+ for index=0,nofglyphs do
+ local location=locations[index]
+ if location>=filesize then
+ report("discarding %s glyphs due to glyph location bug",nofglyphs-index+1)
+ fontdata.nofglyphs=index-1
+ fontdata.badfont=true
+ break
+ elseif location>0 then
+ setposition(f,location)
+ local nofcontours=readshort(f)
+ glyphs[index].boundingbox={
+ readshort(f),
+ readshort(f),
+ readshort(f),
+ readshort(f),
+ }
+ if not loadshapes then
+ elseif nofcontours==0 then
+ shapes[index]=readnothing(f,nofcontours)
+ elseif nofcontours>0 then
+ shapes[index]=readglyph(f,nofcontours)
+ else
+ shapes[index]=readcomposite(f,nofcontours)
+ end
+ else
+ if loadshapes then
+ shapes[index]={}
+ end
+ glyphs[index].boundingbox=nothing
+ end
+ end
+ if loadshapes then
+ mergecomposites(glyphs,shapes)
+ contours2outlines(glyphs,shapes)
+ end
+ end
+ end
+ end
+end
+
+end --- [luaotfload, fontloader-2017-02-11.lua scope for “font-ttfâ€] ---
+
+
+do --- [luaotfload, fontloader-2017-02-11.lua scope for “font-dsp†4a5266ada979d5c2d48867dc3ffaefea] ---
+
+if not modules then modules={} end modules ['font-dsp']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local next,type=next,type
+local bittest=bit32.btest
+local rshift=bit32.rshift
+local concat=table.concat
+local lower=string.lower
+local copy=table.copy
+local sub=string.sub
+local strip=string.strip
+local tohash=table.tohash
+local reversed=table.reversed
+local setmetatableindex=table.setmetatableindex
+local formatters=string.formatters
+local sortedkeys=table.sortedkeys
+local sortedhash=table.sortedhash
+local report=logs.reporter("otf reader")
+local readers=fonts.handlers.otf.readers
+local streamreader=readers.streamreader
+local setposition=streamreader.setposition
+local getposition=streamreader.getposition
+local skipshort=streamreader.skipshort
+local readushort=streamreader.readcardinal2
+local readulong=streamreader.readcardinal4
+local readshort=streamreader.readinteger2
+local readfword=readshort
+local readstring=streamreader.readstring
+local readtag=streamreader.readtag
+local readbytes=streamreader.readbytes
+local gsubhandlers={}
+local gposhandlers={}
+local lookupidoffset=-1
+local classes={
+ "base",
+ "ligature",
+ "mark",
+ "component",
+}
+local gsubtypes={
+ "single",
+ "multiple",
+ "alternate",
+ "ligature",
+ "context",
+ "chainedcontext",
+ "extension",
+ "reversechainedcontextsingle",
+}
+local gpostypes={
+ "single",
+ "pair",
+ "cursive",
+ "marktobase",
+ "marktoligature",
+ "marktomark",
+ "context",
+ "chainedcontext",
+ "extension",
+}
+local chaindirections={
+ context=0,
+ chainedcontext=1,
+ reversechainedcontextsingle=-1,
+}
+local lookupnames={
+ gsub={
+ single="gsub_single",
+ multiple="gsub_multiple",
+ alternate="gsub_alternate",
+ ligature="gsub_ligature",
+ context="gsub_context",
+ chainedcontext="gsub_contextchain",
+ reversechainedcontextsingle="gsub_reversecontextchain",
+ },
+ gpos={
+ single="gpos_single",
+ pair="gpos_pair",
+ cursive="gpos_cursive",
+ marktobase="gpos_mark2base",
+ marktoligature="gpos_mark2ligature",
+ marktomark="gpos_mark2mark",
+ context="gpos_context",
+ chainedcontext="gpos_contextchain",
+ }
+}
+local lookupflags=setmetatableindex(function(t,k)
+ local v={
+ bittest(k,0x0008) and true or false,
+ bittest(k,0x0004) and true or false,
+ bittest(k,0x0002) and true or false,
+ bittest(k,0x0001) and true or false,
+ }
+ t[k]=v
+ return v
+end)
+local function readcoverage(f,offset,simple)
+ setposition(f,offset)
+ local coverageformat=readushort(f)
+ local coverage={}
+ if coverageformat==1 then
+ local nofcoverage=readushort(f)
+ if simple then
+ for i=1,nofcoverage do
+ coverage[i]=readushort(f)
+ end
+ else
+ for i=0,nofcoverage-1 do
+ coverage[readushort(f)]=i
+ end
+ end
+ elseif coverageformat==2 then
+ local nofranges=readushort(f)
+ local n=simple and 1 or 0
+ for i=1,nofranges do
+ local firstindex=readushort(f)
+ local lastindex=readushort(f)
+ local coverindex=readushort(f)
+ if simple then
+ for i=firstindex,lastindex do
+ coverage[n]=i
+ n=n+1
+ end
+ else
+ for i=firstindex,lastindex do
+ coverage[i]=n
+ n=n+1
+ end
+ end
+ end
+ else
+ report("unknown coverage format %a ",coverageformat)
+ end
+ return coverage
+end
+local function readclassdef(f,offset,preset)
+ setposition(f,offset)
+ local classdefformat=readushort(f)
+ local classdef={}
+ if type(preset)=="number" then
+ for k=0,preset-1 do
+ classdef[k]=1
+ end
+ end
+ if classdefformat==1 then
+ local index=readushort(f)
+ local nofclassdef=readushort(f)
+ for i=1,nofclassdef do
+ classdef[index]=readushort(f)+1
+ index=index+1
+ end
+ elseif classdefformat==2 then
+ local nofranges=readushort(f)
+ local n=0
+ for i=1,nofranges do
+ local firstindex=readushort(f)
+ local lastindex=readushort(f)
+ local class=readushort(f)+1
+ for i=firstindex,lastindex do
+ classdef[i]=class
+ end
+ end
+ else
+ report("unknown classdef format %a ",classdefformat)
+ end
+ if type(preset)=="table" then
+ for k in next,preset do
+ if not classdef[k] then
+ classdef[k]=1
+ end
+ end
+ end
+ return classdef
+end
+local function classtocoverage(defs)
+ if defs then
+ local list={}
+ for index,class in next,defs do
+ local c=list[class]
+ if c then
+ c[#c+1]=index
+ else
+ list[class]={ index }
+ end
+ end
+ return list
+ end
+end
+local function readposition(f,format)
+ if format==0 then
+ return nil
+ end
+ local x=bittest(format,0x0001) and readshort(f) or 0
+ local y=bittest(format,0x0002) and readshort(f) or 0
+ local h=bittest(format,0x0004) and readshort(f) or 0
+ local v=bittest(format,0x0008) and readshort(f) or 0
+ if x==0 and y==0 and h==0 and v==0 then
+ return nil
+ else
+ return { x,y,h,v }
+ end
+end
+local function readanchor(f,offset)
+ if not offset or offset==0 then
+ return nil
+ end
+ setposition(f,offset)
+ local format=readshort(f)
+ if format==0 then
+ report("invalid anchor format %i @ position %i",format,offset)
+ return false
+ elseif format>3 then
+ report("unsupported anchor format %i @ position %i",format,offset)
+ return false
+ end
+ return { readshort(f),readshort(f) }
+end
+local function readfirst(f,offset)
+ if offset then
+ setposition(f,offset)
+ end
+ return { readushort(f) }
+end
+local function readarray(f,offset,first)
+ if offset then
+ setposition(f,offset)
+ end
+ local n=readushort(f)
+ if first then
+ local t={ first }
+ for i=2,n do
+ t[i]=readushort(f)
+ end
+ return t,n
+ elseif n>0 then
+ local t={}
+ for i=1,n do
+ t[i]=readushort(f)
+ end
+ return t,n
+ end
+end
+local function readcoveragearray(f,offset,t,simple)
+ if not t then
+ return nil
+ end
+ local n=#t
+ if n==0 then
+ return nil
+ end
+ for i=1,n do
+ t[i]=readcoverage(f,offset+t[i],simple)
+ end
+ return t
+end
+local function covered(subset,all)
+ local used,u
+ for i=1,#subset do
+ local s=subset[i]
+ if all[s] then
+ if used then
+ u=u+1
+ used[u]=s
+ else
+ u=1
+ used={ s }
+ end
+ end
+ end
+ return used
+end
+local function readlookuparray(f,noflookups,nofcurrent)
+ local lookups={}
+ if noflookups>0 then
+ local length=0
+ for i=1,noflookups do
+ local index=readushort(f)+1
+ if index>length then
+ length=index
+ end
+ lookups[index]=readushort(f)+1
+ end
+ for index=1,length do
+ if not lookups[index] then
+ lookups[index]=false
+ end
+ end
+ end
+ return lookups
+end
+local function unchainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,what)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ if subtype==1 then
+ local coverage=readushort(f)
+ local subclasssets=readarray(f)
+ local rules={}
+ if subclasssets then
+ coverage=readcoverage(f,tableoffset+coverage,true)
+ for i=1,#subclasssets do
+ local offset=subclasssets[i]
+ if offset>0 then
+ local firstcoverage=coverage[i]
+ local rulesoffset=tableoffset+offset
+ local subclassrules=readarray(f,rulesoffset)
+ for rule=1,#subclassrules do
+ setposition(f,rulesoffset+subclassrules[rule])
+ local nofcurrent=readushort(f)
+ local noflookups=readushort(f)
+ local current={ { firstcoverage } }
+ for i=2,nofcurrent do
+ current[i]={ readushort(f) }
+ end
+ local lookups=readlookuparray(f,noflookups,nofcurrent)
+ rules[#rules+1]={
+ current=current,
+ lookups=lookups
+ }
+ end
+ end
+ end
+ else
+ report("empty subclassset in %a subtype %i","unchainedcontext",subtype)
+ end
+ return {
+ format="glyphs",
+ rules=rules,
+ }
+ elseif subtype==2 then
+ local coverage=readushort(f)
+ local currentclassdef=readushort(f)
+ local subclasssets=readarray(f)
+ local rules={}
+ if subclasssets then
+ coverage=readcoverage(f,tableoffset+coverage)
+ currentclassdef=readclassdef(f,tableoffset+currentclassdef,coverage)
+ local currentclasses=classtocoverage(currentclassdef,fontdata.glyphs)
+ for class=1,#subclasssets do
+ local offset=subclasssets[class]
+ if offset>0 then
+ local firstcoverage=currentclasses[class]
+ if firstcoverage then
+ firstcoverage=covered(firstcoverage,coverage)
+ if firstcoverage then
+ local rulesoffset=tableoffset+offset
+ local subclassrules=readarray(f,rulesoffset)
+ for rule=1,#subclassrules do
+ setposition(f,rulesoffset+subclassrules[rule])
+ local nofcurrent=readushort(f)
+ local noflookups=readushort(f)
+ local current={ firstcoverage }
+ for i=2,nofcurrent do
+ current[i]=currentclasses[readushort(f)+1]
+ end
+ local lookups=readlookuparray(f,noflookups,nofcurrent)
+ rules[#rules+1]={
+ current=current,
+ lookups=lookups
+ }
+ end
+ else
+ report("no coverage")
+ end
+ else
+ report("no coverage class")
+ end
+ end
+ end
+ else
+ report("empty subclassset in %a subtype %i","unchainedcontext",subtype)
+ end
+ return {
+ format="class",
+ rules=rules,
+ }
+ elseif subtype==3 then
+ local current=readarray(f)
+ local noflookups=readushort(f)
+ local lookups=readlookuparray(f,noflookups,#current)
+ current=readcoveragearray(f,tableoffset,current,true)
+ return {
+ format="coverage",
+ rules={
+ {
+ current=current,
+ lookups=lookups,
+ }
+ }
+ }
+ else
+ report("unsupported subtype %a in %a %s",subtype,"unchainedcontext",what)
+ end
+end
+local function chainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,what)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ if subtype==1 then
+ local coverage=readushort(f)
+ local subclasssets=readarray(f)
+ local rules={}
+ if subclasssets then
+ coverage=readcoverage(f,tableoffset+coverage,true)
+ for i=1,#subclasssets do
+ local offset=subclasssets[i]
+ if offset>0 then
+ local firstcoverage=coverage[i]
+ local rulesoffset=tableoffset+offset
+ local subclassrules=readarray(f,rulesoffset)
+ for rule=1,#subclassrules do
+ setposition(f,rulesoffset+subclassrules[rule])
+ local nofbefore=readushort(f)
+ local before
+ if nofbefore>0 then
+ before={}
+ for i=1,nofbefore do
+ before[i]={ readushort(f) }
+ end
+ end
+ local nofcurrent=readushort(f)
+ local current={ { firstcoverage } }
+ for i=2,nofcurrent do
+ current[i]={ readushort(f) }
+ end
+ local nofafter=readushort(f)
+ local after
+ if nofafter>0 then
+ after={}
+ for i=1,nofafter do
+ after[i]={ readushort(f) }
+ end
+ end
+ local noflookups=readushort(f)
+ local lookups=readlookuparray(f,noflookups,nofcurrent)
+ rules[#rules+1]={
+ before=before,
+ current=current,
+ after=after,
+ lookups=lookups,
+ }
+ end
+ end
+ end
+ else
+ report("empty subclassset in %a subtype %i","chainedcontext",subtype)
+ end
+ return {
+ format="glyphs",
+ rules=rules,
+ }
+ elseif subtype==2 then
+ local coverage=readushort(f)
+ local beforeclassdef=readushort(f)
+ local currentclassdef=readushort(f)
+ local afterclassdef=readushort(f)
+ local subclasssets=readarray(f)
+ local rules={}
+ if subclasssets then
+ local coverage=readcoverage(f,tableoffset+coverage)
+ local beforeclassdef=readclassdef(f,tableoffset+beforeclassdef,nofglyphs)
+ local currentclassdef=readclassdef(f,tableoffset+currentclassdef,coverage)
+ local afterclassdef=readclassdef(f,tableoffset+afterclassdef,nofglyphs)
+ local beforeclasses=classtocoverage(beforeclassdef,fontdata.glyphs)
+ local currentclasses=classtocoverage(currentclassdef,fontdata.glyphs)
+ local afterclasses=classtocoverage(afterclassdef,fontdata.glyphs)
+ for class=1,#subclasssets do
+ local offset=subclasssets[class]
+ if offset>0 then
+ local firstcoverage=currentclasses[class]
+ if firstcoverage then
+ firstcoverage=covered(firstcoverage,coverage)
+ if firstcoverage then
+ local rulesoffset=tableoffset+offset
+ local subclassrules=readarray(f,rulesoffset)
+ for rule=1,#subclassrules do
+ setposition(f,rulesoffset+subclassrules[rule])
+ local nofbefore=readushort(f)
+ local before
+ if nofbefore>0 then
+ before={}
+ for i=1,nofbefore do
+ before[i]=beforeclasses[readushort(f)+1]
+ end
+ end
+ local nofcurrent=readushort(f)
+ local current={ firstcoverage }
+ for i=2,nofcurrent do
+ current[i]=currentclasses[readushort(f)+1]
+ end
+ local nofafter=readushort(f)
+ local after
+ if nofafter>0 then
+ after={}
+ for i=1,nofafter do
+ after[i]=afterclasses[readushort(f)+1]
+ end
+ end
+ local noflookups=readushort(f)
+ local lookups=readlookuparray(f,noflookups,nofcurrent)
+ rules[#rules+1]={
+ before=before,
+ current=current,
+ after=after,
+ lookups=lookups,
+ }
+ end
+ else
+ report("no coverage")
+ end
+ else
+ report("class is not covered")
+ end
+ end
+ end
+ else
+ report("empty subclassset in %a subtype %i","chainedcontext",subtype)
+ end
+ return {
+ format="class",
+ rules=rules,
+ }
+ elseif subtype==3 then
+ local before=readarray(f)
+ local current=readarray(f)
+ local after=readarray(f)
+ local noflookups=readushort(f)
+ local lookups=readlookuparray(f,noflookups,#current)
+ before=readcoveragearray(f,tableoffset,before,true)
+ current=readcoveragearray(f,tableoffset,current,true)
+ after=readcoveragearray(f,tableoffset,after,true)
+ return {
+ format="coverage",
+ rules={
+ {
+ before=before,
+ current=current,
+ after=after,
+ lookups=lookups,
+ }
+ }
+ }
+ else
+ report("unsupported subtype %a in %a %s",subtype,"chainedcontext",what)
+ end
+end
+local function extension(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,types,handlers,what)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ if subtype==1 then
+ local lookuptype=types[readushort(f)]
+ local faroffset=readulong(f)
+ local handler=handlers[lookuptype]
+ if handler then
+ return handler(f,fontdata,lookupid,tableoffset+faroffset,0,glyphs,nofglyphs),lookuptype
+ else
+ report("no handler for lookuptype %a subtype %a in %s %s",lookuptype,subtype,what,"extension")
+ end
+ else
+ report("unsupported subtype %a in %s %s",subtype,what,"extension")
+ end
+end
+function gsubhandlers.single(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ if subtype==1 then
+ local coverage=readushort(f)
+ local delta=readshort(f)
+ local coverage=readcoverage(f,tableoffset+coverage)
+ for index in next,coverage do
+ local newindex=index+delta
+ if index>nofglyphs or newindex>nofglyphs then
+ report("invalid index in %s format %i: %i -> %i (max %i)","single",subtype,index,newindex,nofglyphs)
+ coverage[index]=nil
+ else
+ coverage[index]=newindex
+ end
+ end
+ return {
+ coverage=coverage
+ }
+ elseif subtype==2 then
+ local coverage=readushort(f)
+ local nofreplacements=readushort(f)
+ local replacements={}
+ for i=1,nofreplacements do
+ replacements[i]=readushort(f)
+ end
+ local coverage=readcoverage(f,tableoffset+coverage)
+ for index,newindex in next,coverage do
+ newindex=newindex+1
+ if index>nofglyphs or newindex>nofglyphs then
+ report("invalid index in %s format %i: %i -> %i (max %i)","single",subtype,index,newindex,nofglyphs)
+ coverage[index]=nil
+ else
+ coverage[index]=replacements[newindex]
+ end
+ end
+ return {
+ coverage=coverage
+ }
+ else
+ report("unsupported subtype %a in %a substitution",subtype,"single")
+ end
+end
+local function sethandler(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,what)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ if subtype==1 then
+ local coverage=readushort(f)
+ local nofsequence=readushort(f)
+ local sequences={}
+ for i=1,nofsequence do
+ sequences[i]=readushort(f)
+ end
+ for i=1,nofsequence do
+ setposition(f,tableoffset+sequences[i])
+ local n=readushort(f)
+ local s={}
+ for i=1,n do
+ s[i]=readushort(f)
+ end
+ sequences[i]=s
+ end
+ local coverage=readcoverage(f,tableoffset+coverage)
+ for index,newindex in next,coverage do
+ newindex=newindex+1
+ if index>nofglyphs or newindex>nofglyphs then
+ report("invalid index in %s format %i: %i -> %i (max %i)",what,subtype,index,newindex,nofglyphs)
+ coverage[index]=nil
+ else
+ coverage[index]=sequences[newindex]
+ end
+ end
+ return {
+ coverage=coverage
+ }
+ else
+ report("unsupported subtype %a in %a substitution",subtype,what)
+ end
+end
+function gsubhandlers.multiple(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return sethandler(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,"multiple")
+end
+function gsubhandlers.alternate(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return sethandler(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,"alternate")
+end
+function gsubhandlers.ligature(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ if subtype==1 then
+ local coverage=readushort(f)
+ local nofsets=readushort(f)
+ local ligatures={}
+ for i=1,nofsets do
+ ligatures[i]=readushort(f)
+ end
+ for i=1,nofsets do
+ local offset=lookupoffset+offset+ligatures[i]
+ setposition(f,offset)
+ local n=readushort(f)
+ local l={}
+ for i=1,n do
+ l[i]=offset+readushort(f)
+ end
+ ligatures[i]=l
+ end
+ local coverage=readcoverage(f,tableoffset+coverage)
+ for index,newindex in next,coverage do
+ local hash={}
+ local ligatures=ligatures[newindex+1]
+ for i=1,#ligatures do
+ local offset=ligatures[i]
+ setposition(f,offset)
+ local lig=readushort(f)
+ local cnt=readushort(f)
+ local hsh=hash
+ for i=2,cnt do
+ local c=readushort(f)
+ local h=hsh[c]
+ if not h then
+ h={}
+ hsh[c]=h
+ end
+ hsh=h
+ end
+ hsh.ligature=lig
+ end
+ coverage[index]=hash
+ end
+ return {
+ coverage=coverage
+ }
+ else
+ report("unsupported subtype %a in %a substitution",subtype,"ligature")
+ end
+end
+function gsubhandlers.context(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return unchainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,"substitution"),"context"
+end
+function gsubhandlers.chainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return chainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,"substitution"),"chainedcontext"
+end
+function gsubhandlers.extension(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return extension(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,gsubtypes,gsubhandlers,"substitution")
+end
+function gsubhandlers.reversechainedcontextsingle(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ if subtype==1 then
+ local current=readfirst(f)
+ local before=readarray(f)
+ local after=readarray(f)
+ local replacements=readarray(f)
+ current=readcoveragearray(f,tableoffset,current,true)
+ before=readcoveragearray(f,tableoffset,before,true)
+ after=readcoveragearray(f,tableoffset,after,true)
+ return {
+ coverage={
+ format="reversecoverage",
+ before=before,
+ current=current,
+ after=after,
+ replacements=replacements,
+ }
+ },"reversechainedcontextsingle"
+ else
+ report("unsupported subtype %a in %a substitution",subtype,"reversechainedcontextsingle")
+ end
+end
+local function readpairsets(f,tableoffset,sets,format1,format2)
+ local done={}
+ for i=1,#sets do
+ local offset=sets[i]
+ local reused=done[offset]
+ if not reused then
+ setposition(f,tableoffset+offset)
+ local n=readushort(f)
+ reused={}
+ for i=1,n do
+ reused[i]={
+ readushort(f),
+ readposition(f,format1),
+ readposition(f,format2)
+ }
+ end
+ done[offset]=reused
+ end
+ sets[i]=reused
+ end
+ return sets
+end
+local function readpairclasssets(f,nofclasses1,nofclasses2,format1,format2)
+ local classlist1={}
+ for i=1,nofclasses1 do
+ local classlist2={}
+ classlist1[i]=classlist2
+ for j=1,nofclasses2 do
+ local one=readposition(f,format1)
+ local two=readposition(f,format2)
+ if one or two then
+ classlist2[j]={ one,two }
+ else
+ classlist2[j]=false
+ end
+ end
+ end
+ return classlist1
+end
+function gposhandlers.single(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ if subtype==1 then
+ local coverage=readushort(f)
+ local format=readushort(f)
+ local value=readposition(f,format)
+ local coverage=readcoverage(f,tableoffset+coverage)
+ for index,newindex in next,coverage do
+ coverage[index]=value
+ end
+ return {
+ format="pair",
+ coverage=coverage
+ }
+ elseif subtype==2 then
+ local coverage=readushort(f)
+ local format=readushort(f)
+ local values={}
+ local nofvalues=readushort(f)
+ for i=1,nofvalues do
+ values[i]=readposition(f,format)
+ end
+ local coverage=readcoverage(f,tableoffset+coverage)
+ for index,newindex in next,coverage do
+ coverage[index]=values[newindex+1]
+ end
+ return {
+ format="pair",
+ coverage=coverage
+ }
+ else
+ report("unsupported subtype %a in %a positioning",subtype,"single")
+ end
+end
+function gposhandlers.pair(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ if subtype==1 then
+ local coverage=readushort(f)
+ local format1=readushort(f)
+ local format2=readushort(f)
+ local sets=readarray(f)
+ sets=readpairsets(f,tableoffset,sets,format1,format2)
+ coverage=readcoverage(f,tableoffset+coverage)
+ for index,newindex in next,coverage do
+ local set=sets[newindex+1]
+ local hash={}
+ for i=1,#set do
+ local value=set[i]
+ if value then
+ local other=value[1]
+ local first=value[2]
+ local second=value[3]
+ if first or second then
+ hash[other]={ first,second }
+ else
+ hash[other]=nil
+ end
+ end
+ end
+ coverage[index]=hash
+ end
+ return {
+ format="pair",
+ coverage=coverage
+ }
+ elseif subtype==2 then
+ local coverage=readushort(f)
+ local format1=readushort(f)
+ local format2=readushort(f)
+ local classdef1=readushort(f)
+ local classdef2=readushort(f)
+ local nofclasses1=readushort(f)
+ local nofclasses2=readushort(f)
+ local classlist=readpairclasssets(f,nofclasses1,nofclasses2,format1,format2)
+ coverage=readcoverage(f,tableoffset+coverage)
+ classdef1=readclassdef(f,tableoffset+classdef1,coverage)
+ classdef2=readclassdef(f,tableoffset+classdef2,nofglyphs)
+ local usedcoverage={}
+ for g1,c1 in next,classdef1 do
+ if coverage[g1] then
+ local l1=classlist[c1]
+ if l1 then
+ local hash={}
+ for paired,class in next,classdef2 do
+ local offsets=l1[class]
+ if offsets then
+ local first=offsets[1]
+ local second=offsets[2]
+ if first or second then
+ hash[paired]={ first,second }
+ else
+ end
+ end
+ end
+ usedcoverage[g1]=hash
+ end
+ end
+ end
+ return {
+ format="pair",
+ coverage=usedcoverage
+ }
+ elseif subtype==3 then
+ report("yet unsupported subtype %a in %a positioning",subtype,"pair")
+ else
+ report("unsupported subtype %a in %a positioning",subtype,"pair")
+ end
+end
+function gposhandlers.cursive(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ if subtype==1 then
+ local coverage=tableoffset+readushort(f)
+ local nofrecords=readushort(f)
+ local records={}
+ for i=1,nofrecords do
+ local entry=readushort(f)
+ local exit=readushort(f)
+ records[i]={
+ entry=entry~=0 and (tableoffset+entry) or false,
+ exit=exit~=0 and (tableoffset+exit ) or false,
+ }
+ end
+ coverage=readcoverage(f,coverage)
+ for i=1,nofrecords do
+ local r=records[i]
+ records[i]={
+ 1,
+ readanchor(f,r.entry) or nil,
+ readanchor(f,r.exit ) or nil,
+ }
+ end
+ for index,newindex in next,coverage do
+ coverage[index]=records[newindex+1]
+ end
+ return {
+ coverage=coverage
+ }
+ else
+ report("unsupported subtype %a in %a positioning",subtype,"cursive")
+ end
+end
+local function handlemark(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,ligature)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ if subtype==1 then
+ local markcoverage=tableoffset+readushort(f)
+ local basecoverage=tableoffset+readushort(f)
+ local nofclasses=readushort(f)
+ local markoffset=tableoffset+readushort(f)
+ local baseoffset=tableoffset+readushort(f)
+ local markcoverage=readcoverage(f,markcoverage)
+ local basecoverage=readcoverage(f,basecoverage,true)
+ setposition(f,markoffset)
+ local markclasses={}
+ local nofmarkclasses=readushort(f)
+ local lastanchor=fontdata.lastanchor or 0
+ local usedanchors={}
+ for i=1,nofmarkclasses do
+ local class=readushort(f)+1
+ local offset=readushort(f)
+ if offset==0 then
+ markclasses[i]=false
+ else
+ markclasses[i]={ class,markoffset+offset }
+ end
+ usedanchors[class]=true
+ end
+ for i=1,nofmarkclasses do
+ local mc=markclasses[i]
+ if mc then
+ mc[2]=readanchor(f,mc[2])
+ end
+ end
+ setposition(f,baseoffset)
+ local nofbaserecords=readushort(f)
+ local baserecords={}
+ if ligature then
+ for i=1,nofbaserecords do
+ local offset=readushort(f)
+ if offset==0 then
+ baserecords[i]=false
+ else
+ baserecords[i]=baseoffset+offset
+ end
+ end
+ for i=1,nofbaserecords do
+ local recordoffset=baserecords[i]
+ if recordoffset then
+ setposition(f,recordoffset)
+ local nofcomponents=readushort(f)
+ local components={}
+ for i=1,nofcomponents do
+ local classes={}
+ for i=1,nofclasses do
+ local offset=readushort(f)
+ if offset~=0 then
+ classes[i]=recordoffset+offset
+ else
+ classes[i]=false
+ end
+ end
+ components[i]=classes
+ end
+ baserecords[i]=components
+ end
+ end
+ local baseclasses={}
+ for i=1,nofclasses do
+ baseclasses[i]={}
+ end
+ for i=1,nofbaserecords do
+ local components=baserecords[i]
+ if components then
+ local b=basecoverage[i]
+ for c=1,#components do
+ local classes=components[c]
+ if classes then
+ for i=1,nofclasses do
+ local anchor=readanchor(f,classes[i])
+ local bclass=baseclasses[i]
+ local bentry=bclass[b]
+ if bentry then
+ bentry[c]=anchor
+ else
+ bclass[b]={ [c]=anchor }
+ end
+ end
+ end
+ end
+ end
+ end
+ for index,newindex in next,markcoverage do
+ markcoverage[index]=markclasses[newindex+1] or nil
+ end
+ return {
+ format="ligature",
+ baseclasses=baseclasses,
+ coverage=markcoverage,
+ }
+ else
+ for i=1,nofbaserecords do
+ local r={}
+ for j=1,nofclasses do
+ local offset=readushort(f)
+ if offset==0 then
+ r[j]=false
+ else
+ r[j]=baseoffset+offset
+ end
+ end
+ baserecords[i]=r
+ end
+ local baseclasses={}
+ for i=1,nofclasses do
+ baseclasses[i]={}
+ end
+ for i=1,nofbaserecords do
+ local r=baserecords[i]
+ local b=basecoverage[i]
+ for j=1,nofclasses do
+ baseclasses[j][b]=readanchor(f,r[j])
+ end
+ end
+ for index,newindex in next,markcoverage do
+ markcoverage[index]=markclasses[newindex+1] or nil
+ end
+ return {
+ format="base",
+ baseclasses=baseclasses,
+ coverage=markcoverage,
+ }
+ end
+ else
+ report("unsupported subtype %a in",subtype)
+ end
+end
+function gposhandlers.marktobase(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return handlemark(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+end
+function gposhandlers.marktoligature(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return handlemark(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,true)
+end
+function gposhandlers.marktomark(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return handlemark(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+end
+function gposhandlers.context(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return unchainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,"positioning"),"context"
+end
+function gposhandlers.chainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return chainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,"positioning"),"chainedcontext"
+end
+function gposhandlers.extension(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return extension(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,gpostypes,gposhandlers,"positioning")
+end
+do
+ local plugins={}
+ function plugins.size(f,fontdata,tableoffset,feature)
+ if fontdata.designsize then
+ else
+ local function check(offset)
+ setposition(f,offset)
+ local designsize=readushort(f)
+ if designsize>0 then
+ local fontstyle=readushort(f)
+ local guimenuid=readushort(f)
+ local minsize=readushort(f)
+ local maxsize=readushort(f)
+ if minsize==0 and maxsize==0 and fontstyleid==0 and guimenuid==0 then
+ minsize=designsize
+ maxsize=designsize
+ end
+ if designsize>=minsize and designsize<=maxsize then
+ return minsize,maxsize,designsize
+ end
+ end
+ end
+ local minsize,maxsize,designsize=check(tableoffset+feature.offset+feature.parameters)
+ if not designsize then
+ minsize,maxsize,designsize=check(tableoffset+feature.parameters)
+ if designsize then
+ report("bad size feature in %a, falling back to wrong offset",fontdata.filename or "?")
+ else
+ report("bad size feature in %a,",fontdata.filename or "?")
+ end
+ end
+ if designsize then
+ fontdata.minsize=minsize
+ fontdata.maxsize=maxsize
+ fontdata.designsize=designsize
+ end
+ end
+ end
+ local function reorderfeatures(fontdata,scripts,features)
+ local scriptlangs={}
+ local featurehash={}
+ local featureorder={}
+ for script,languages in next,scripts do
+ for language,record in next,languages do
+ local hash={}
+ local list=record.featureindices
+ for k=1,#list do
+ local index=list[k]
+ local feature=features[index]
+ local lookups=feature.lookups
+ local tag=feature.tag
+ if tag then
+ hash[tag]=true
+ end
+ if lookups then
+ for i=1,#lookups do
+ local lookup=lookups[i]
+ local o=featureorder[lookup]
+ if o then
+ local okay=true
+ for i=1,#o do
+ if o[i]==tag then
+ okay=false
+ break
+ end
+ end
+ if okay then
+ o[#o+1]=tag
+ end
+ else
+ featureorder[lookup]={ tag }
+ end
+ local f=featurehash[lookup]
+ if f then
+ local h=f[tag]
+ if h then
+ local s=h[script]
+ if s then
+ s[language]=true
+ else
+ h[script]={ [language]=true }
+ end
+ else
+ f[tag]={ [script]={ [language]=true } }
+ end
+ else
+ featurehash[lookup]={ [tag]={ [script]={ [language]=true } } }
+ end
+ local h=scriptlangs[tag]
+ if h then
+ local s=h[script]
+ if s then
+ s[language]=true
+ else
+ h[script]={ [language]=true }
+ end
+ else
+ scriptlangs[tag]={ [script]={ [language]=true } }
+ end
+ end
+ end
+ end
+ end
+ end
+ return scriptlangs,featurehash,featureorder
+ end
+ local function readscriplan(f,fontdata,scriptoffset)
+ setposition(f,scriptoffset)
+ local nofscripts=readushort(f)
+ local scripts={}
+ for i=1,nofscripts do
+ scripts[readtag(f)]=scriptoffset+readushort(f)
+ end
+ local languagesystems=setmetatableindex("table")
+ for script,offset in next,scripts do
+ setposition(f,offset)
+ local defaultoffset=readushort(f)
+ local noflanguages=readushort(f)
+ local languages={}
+ if defaultoffset>0 then
+ languages.dflt=languagesystems[offset+defaultoffset]
+ end
+ for i=1,noflanguages do
+ local language=readtag(f)
+ local offset=offset+readushort(f)
+ languages[language]=languagesystems[offset]
+ end
+ scripts[script]=languages
+ end
+ for offset,usedfeatures in next,languagesystems do
+ if offset>0 then
+ setposition(f,offset)
+ local featureindices={}
+ usedfeatures.featureindices=featureindices
+ usedfeatures.lookuporder=readushort(f)
+ usedfeatures.requiredindex=readushort(f)
+ local noffeatures=readushort(f)
+ for i=1,noffeatures do
+ featureindices[i]=readushort(f)+1
+ end
+ end
+ end
+ return scripts
+ end
+ local function readfeatures(f,fontdata,featureoffset)
+ setposition(f,featureoffset)
+ local features={}
+ local noffeatures=readushort(f)
+ for i=1,noffeatures do
+ features[i]={
+ tag=readtag(f),
+ offset=readushort(f)
+ }
+ end
+ for i=1,noffeatures do
+ local feature=features[i]
+ local offset=featureoffset+feature.offset
+ setposition(f,offset)
+ local parameters=readushort(f)
+ local noflookups=readushort(f)
+ if noflookups>0 then
+ local lookups={}
+ feature.lookups=lookups
+ for j=1,noflookups do
+ lookups[j]=readushort(f)+1
+ end
+ end
+ if parameters>0 then
+ feature.parameters=parameters
+ local plugin=plugins[feature.tag]
+ if plugin then
+ plugin(f,fontdata,featureoffset,feature)
+ end
+ end
+ end
+ return features
+ end
+ local function readlookups(f,lookupoffset,lookuptypes,featurehash,featureorder)
+ setposition(f,lookupoffset)
+ local lookups={}
+ local noflookups=readushort(f)
+ for i=1,noflookups do
+ lookups[i]=readushort(f)
+ end
+ for lookupid=1,noflookups do
+ local index=lookups[lookupid]
+ setposition(f,lookupoffset+index)
+ local subtables={}
+ local typebits=readushort(f)
+ local flagbits=readushort(f)
+ local lookuptype=lookuptypes[typebits]
+ local lookupflags=lookupflags[flagbits]
+ local nofsubtables=readushort(f)
+ for j=1,nofsubtables do
+ local offset=readushort(f)
+ subtables[j]=offset+index
+ end
+ local markclass=bittest(flagbits,0x0010)
+ if markclass then
+ markclass=readushort(f)
+ end
+ local markset=rshift(flagbits,8)
+ if markset>0 then
+ markclass=markset
+ end
+ lookups[lookupid]={
+ type=lookuptype,
+ flags=lookupflags,
+ name=lookupid,
+ subtables=subtables,
+ markclass=markclass,
+ features=featurehash[lookupid],
+ order=featureorder[lookupid],
+ }
+ end
+ return lookups
+ end
+ local function readscriptoffsets(f,fontdata,tableoffset)
+ if not tableoffset then
+ return
+ end
+ setposition(f,tableoffset)
+ local version=readulong(f)
+ if version~=0x00010000 then
+ report("table version %a of %a is not supported (yet), maybe font %s is bad",version,what,fontdata.filename)
+ return
+ end
+ return tableoffset+readushort(f),tableoffset+readushort(f),tableoffset+readushort(f)
+ end
+ local f_lookupname=formatters["%s_%s_%s"]
+ local function resolvelookups(f,lookupoffset,fontdata,lookups,lookuptypes,lookuphandlers,what)
+ local sequences=fontdata.sequences or {}
+ local sublookuplist=fontdata.sublookups or {}
+ fontdata.sequences=sequences
+ fontdata.sublookups=sublookuplist
+ local nofsublookups=#sublookuplist
+ local nofsequences=#sequences
+ local lastsublookup=nofsublookups
+ local lastsequence=nofsequences
+ local lookupnames=lookupnames[what]
+ local sublookuphash={}
+ local sublookupcheck={}
+ local glyphs=fontdata.glyphs
+ local nofglyphs=fontdata.nofglyphs or #glyphs
+ local noflookups=#lookups
+ local lookupprefix=sub(what,2,2)
+ for lookupid=1,noflookups do
+ local lookup=lookups[lookupid]
+ local lookuptype=lookup.type
+ local subtables=lookup.subtables
+ local features=lookup.features
+ local handler=lookuphandlers[lookuptype]
+ if handler then
+ local nofsubtables=#subtables
+ local order=lookup.order
+ local flags=lookup.flags
+ if flags[1] then flags[1]="mark" end
+ if flags[2] then flags[2]="ligature" end
+ if flags[3] then flags[3]="base" end
+ local markclass=lookup.markclass
+ if nofsubtables>0 then
+ local steps={}
+ local nofsteps=0
+ local oldtype=nil
+ for s=1,nofsubtables do
+ local step,lt=handler(f,fontdata,lookupid,lookupoffset,subtables[s],glyphs,nofglyphs)
+ if lt then
+ lookuptype=lt
+ if oldtype and lt~=oldtype then
+ report("messy %s lookup type %a and %a",what,lookuptype,oldtype)
+ end
+ oldtype=lookuptype
+ end
+ if not step then
+ report("unsupported %s lookup type %a",what,lookuptype)
+ else
+ nofsteps=nofsteps+1
+ steps[nofsteps]=step
+ local rules=step.rules
+ if rules then
+ for i=1,#rules do
+ local rule=rules[i]
+ local before=rule.before
+ local current=rule.current
+ local after=rule.after
+ if before then
+ for i=1,#before do
+ before[i]=tohash(before[i])
+ end
+ rule.before=reversed(before)
+ end
+ if current then
+ for i=1,#current do
+ current[i]=tohash(current[i])
+ end
+ end
+ if after then
+ for i=1,#after do
+ after[i]=tohash(after[i])
+ end
+ end
+ end
+ end
+ end
+ end
+ if nofsteps~=nofsubtables then
+ report("bogus subtables removed in %s lookup type %a",what,lookuptype)
+ end
+ lookuptype=lookupnames[lookuptype] or lookuptype
+ if features then
+ nofsequences=nofsequences+1
+ local l={
+ index=nofsequences,
+ name=f_lookupname(lookupprefix,"s",lookupid+lookupidoffset),
+ steps=steps,
+ nofsteps=nofsteps,
+ type=lookuptype,
+ markclass=markclass or nil,
+ flags=flags,
+ order=order,
+ features=features,
+ }
+ sequences[nofsequences]=l
+ lookup.done=l
+ else
+ nofsublookups=nofsublookups+1
+ local l={
+ index=nofsublookups,
+ name=f_lookupname(lookupprefix,"l",lookupid+lookupidoffset),
+ steps=steps,
+ nofsteps=nofsteps,
+ type=lookuptype,
+ markclass=markclass or nil,
+ flags=flags,
+ }
+ sublookuplist[nofsublookups]=l
+ sublookuphash[lookupid]=nofsublookups
+ sublookupcheck[lookupid]=0
+ lookup.done=l
+ end
+ else
+ report("no subtables for lookup %a",lookupid)
+ end
+ else
+ report("no handler for lookup %a with type %a",lookupid,lookuptype)
+ end
+ end
+ local reported={}
+ local function report_issue(i,what,sequence,kind)
+ local name=sequence.name
+ if not reported[name] then
+ report("rule %i in %s lookup %a has %s lookups",i,what,name,kind)
+ reported[name]=true
+ end
+ end
+ for i=lastsequence+1,nofsequences do
+ local sequence=sequences[i]
+ local steps=sequence.steps
+ for i=1,#steps do
+ local step=steps[i]
+ local rules=step.rules
+ if rules then
+ for i=1,#rules do
+ local rule=rules[i]
+ local rlookups=rule.lookups
+ if not rlookups then
+ report_issue(i,what,sequence,"no")
+ elseif not next(rlookups) then
+ report_issue(i,what,sequence,"empty")
+ rule.lookups=nil
+ else
+ local length=#rlookups
+ for index=1,length do
+ local lookupid=rlookups[index]
+ if lookupid then
+ local h=sublookuphash[lookupid]
+ if not h then
+ local lookup=lookups[lookupid]
+ if lookup then
+ local d=lookup.done
+ if d then
+ nofsublookups=nofsublookups+1
+ h={
+ index=nofsublookups,
+ name=f_lookupname(lookupprefix,"d",lookupid+lookupidoffset),
+ derived=true,
+ steps=d.steps,
+ nofsteps=d.nofsteps,
+ type=d.lookuptype,
+ markclass=d.markclass or nil,
+ flags=d.flags,
+ }
+ sublookuplist[nofsublookups]=copy(h)
+ sublookuphash[lookupid]=nofsublookups
+ sublookupcheck[lookupid]=1
+ h=nofsublookups
+ else
+ report_issue(i,what,sequence,"missing")
+ rule.lookups=nil
+ break
+ end
+ else
+ report_issue(i,what,sequence,"bad")
+ rule.lookups=nil
+ break
+ end
+ else
+ sublookupcheck[lookupid]=sublookupcheck[lookupid]+1
+ end
+ rlookups[index]=h or false
+ else
+ rlookups[index]=false
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ for i,n in sortedhash(sublookupcheck) do
+ local l=lookups[i]
+ local t=l.type
+ if n==0 and t~="extension" then
+ local d=l.done
+ report("%s lookup %s of type %a is not used",what,d and d.name or l.name,t)
+ end
+ end
+ end
+ local function readscripts(f,fontdata,what,lookuptypes,lookuphandlers,lookupstoo)
+ local datatable=fontdata.tables[what]
+ if not datatable then
+ return
+ end
+ local tableoffset=datatable.offset
+ if not tableoffset then
+ return
+ end
+ local scriptoffset,featureoffset,lookupoffset=readscriptoffsets(f,fontdata,tableoffset)
+ if not scriptoffset then
+ return
+ end
+ local scripts=readscriplan(f,fontdata,scriptoffset)
+ local features=readfeatures(f,fontdata,featureoffset)
+ local scriptlangs,featurehash,featureorder=reorderfeatures(fontdata,scripts,features)
+ if fontdata.features then
+ fontdata.features[what]=scriptlangs
+ else
+ fontdata.features={ [what]=scriptlangs }
+ end
+ if not lookupstoo then
+ return
+ end
+ local lookups=readlookups(f,lookupoffset,lookuptypes,featurehash,featureorder)
+ if lookups then
+ resolvelookups(f,lookupoffset,fontdata,lookups,lookuptypes,lookuphandlers,what)
+ end
+ end
+ local function checkkerns(f,fontdata,specification)
+ local datatable=fontdata.tables.kern
+ if not datatable then
+ return
+ end
+ local features=fontdata.features
+ local gposfeatures=features and features.gpos
+ local name
+ if not gposfeatures or not gposfeatures.kern then
+ name="kern"
+ elseif specification.globalkerns then
+ name="globalkern"
+ else
+ report("ignoring global kern table using gpos kern feature")
+ return
+ end
+ report("adding global kern table as gpos feature %a",name)
+ setposition(f,datatable.offset)
+ local version=readushort(f)
+ local noftables=readushort(f)
+ local kerns=setmetatableindex("table")
+ for i=1,noftables do
+ local version=readushort(f)
+ local length=readushort(f)
+ local coverage=readushort(f)
+ local format=bit32.rshift(coverage,8)
+ if format==0 then
+ local nofpairs=readushort(f)
+ local searchrange=readushort(f)
+ local entryselector=readushort(f)
+ local rangeshift=readushort(f)
+ for i=1,nofpairs do
+ kerns[readushort(f)][readushort(f)]=readfword(f)
+ end
+ elseif format==2 then
+ else
+ end
+ end
+ local feature={ dflt={ dflt=true } }
+ if not features then
+ fontdata.features={ gpos={ [name]=feature } }
+ elseif not gposfeatures then
+ fontdata.features.gpos={ [name]=feature }
+ else
+ gposfeatures[name]=feature
+ end
+ local sequences=fontdata.sequences
+ if not sequences then
+ sequences={}
+ fontdata.sequences=sequences
+ end
+ local nofsequences=#sequences+1
+ sequences[nofsequences]={
+ index=nofsequences,
+ name=name,
+ steps={
+ {
+ coverage=kerns,
+ format="kern",
+ },
+ },
+ nofsteps=1,
+ type="gpos_pair",
+ flags={ false,false,false,false },
+ order={ name },
+ features={ [name]=feature },
+ }
+ end
+ function readers.gsub(f,fontdata,specification)
+ if specification.details then
+ readscripts(f,fontdata,"gsub",gsubtypes,gsubhandlers,specification.lookups)
+ end
+ end
+ function readers.gpos(f,fontdata,specification)
+ if specification.details then
+ readscripts(f,fontdata,"gpos",gpostypes,gposhandlers,specification.lookups)
+ if specification.lookups then
+ checkkerns(f,fontdata,specification)
+ end
+ end
+ end
+end
+function readers.gdef(f,fontdata,specification)
+ if specification.glyphs then
+ local datatable=fontdata.tables.gdef
+ if datatable then
+ local tableoffset=datatable.offset
+ setposition(f,tableoffset)
+ local version=readulong(f)
+ local classoffset=tableoffset+readushort(f)
+ local attachmentoffset=tableoffset+readushort(f)
+ local ligaturecarets=tableoffset+readushort(f)
+ local markclassoffset=tableoffset+readushort(f)
+ local marksetsoffset=version==0x00010002 and (tableoffset+readushort(f))
+ local glyphs=fontdata.glyphs
+ local marks={}
+ local markclasses=setmetatableindex("table")
+ local marksets=setmetatableindex("table")
+ fontdata.marks=marks
+ fontdata.markclasses=markclasses
+ fontdata.marksets=marksets
+ setposition(f,classoffset)
+ local classformat=readushort(f)
+ if classformat==1 then
+ local firstindex=readushort(f)
+ local lastindex=firstindex+readushort(f)-1
+ for index=firstindex,lastindex do
+ local class=classes[readushort(f)]
+ if class=="mark" then
+ marks[index]=true
+ end
+ glyphs[index].class=class
+ end
+ elseif classformat==2 then
+ local nofranges=readushort(f)
+ for i=1,nofranges do
+ local firstindex=readushort(f)
+ local lastindex=readushort(f)
+ local class=classes[readushort(f)]
+ if class then
+ for index=firstindex,lastindex do
+ glyphs[index].class=class
+ if class=="mark" then
+ marks[index]=true
+ end
+ end
+ end
+ end
+ end
+ setposition(f,markclassoffset)
+ local classformat=readushort(f)
+ if classformat==1 then
+ local firstindex=readushort(f)
+ local lastindex=firstindex+readushort(f)-1
+ for index=firstindex,lastindex do
+ markclasses[readushort(f)][index]=true
+ end
+ elseif classformat==2 then
+ local nofranges=readushort(f)
+ for i=1,nofranges do
+ local firstindex=readushort(f)
+ local lastindex=readushort(f)
+ local class=markclasses[readushort(f)]
+ for index=firstindex,lastindex do
+ class[index]=true
+ end
+ end
+ end
+ if marksetsoffset and marksetsoffset>tableoffset then
+ setposition(f,marksetsoffset)
+ local format=readushort(f)
+ if format==1 then
+ local nofsets=readushort(f)
+ local sets={}
+ for i=1,nofsets do
+ sets[i]=readulong(f)
+ end
+ for i=1,nofsets do
+ local offset=sets[i]
+ if offset~=0 then
+ marksets[i]=readcoverage(f,marksetsoffset+offset)
+ end
+ end
+ end
+ end
+ end
+ end
+end
+local function readmathvalue(f)
+ local v=readshort(f)
+ skipshort(f,1)
+ return v
+end
+local function readmathconstants(f,fontdata,offset)
+ setposition(f,offset)
+ fontdata.mathconstants={
+ ScriptPercentScaleDown=readshort(f),
+ ScriptScriptPercentScaleDown=readshort(f),
+ DelimitedSubFormulaMinHeight=readushort(f),
+ DisplayOperatorMinHeight=readushort(f),
+ MathLeading=readmathvalue(f),
+ AxisHeight=readmathvalue(f),
+ AccentBaseHeight=readmathvalue(f),
+ FlattenedAccentBaseHeight=readmathvalue(f),
+ SubscriptShiftDown=readmathvalue(f),
+ SubscriptTopMax=readmathvalue(f),
+ SubscriptBaselineDropMin=readmathvalue(f),
+ SuperscriptShiftUp=readmathvalue(f),
+ SuperscriptShiftUpCramped=readmathvalue(f),
+ SuperscriptBottomMin=readmathvalue(f),
+ SuperscriptBaselineDropMax=readmathvalue(f),
+ SubSuperscriptGapMin=readmathvalue(f),
+ SuperscriptBottomMaxWithSubscript=readmathvalue(f),
+ SpaceAfterScript=readmathvalue(f),
+ UpperLimitGapMin=readmathvalue(f),
+ UpperLimitBaselineRiseMin=readmathvalue(f),
+ LowerLimitGapMin=readmathvalue(f),
+ LowerLimitBaselineDropMin=readmathvalue(f),
+ StackTopShiftUp=readmathvalue(f),
+ StackTopDisplayStyleShiftUp=readmathvalue(f),
+ StackBottomShiftDown=readmathvalue(f),
+ StackBottomDisplayStyleShiftDown=readmathvalue(f),
+ StackGapMin=readmathvalue(f),
+ StackDisplayStyleGapMin=readmathvalue(f),
+ StretchStackTopShiftUp=readmathvalue(f),
+ StretchStackBottomShiftDown=readmathvalue(f),
+ StretchStackGapAboveMin=readmathvalue(f),
+ StretchStackGapBelowMin=readmathvalue(f),
+ FractionNumeratorShiftUp=readmathvalue(f),
+ FractionNumeratorDisplayStyleShiftUp=readmathvalue(f),
+ FractionDenominatorShiftDown=readmathvalue(f),
+ FractionDenominatorDisplayStyleShiftDown=readmathvalue(f),
+ FractionNumeratorGapMin=readmathvalue(f),
+ FractionNumeratorDisplayStyleGapMin=readmathvalue(f),
+ FractionRuleThickness=readmathvalue(f),
+ FractionDenominatorGapMin=readmathvalue(f),
+ FractionDenominatorDisplayStyleGapMin=readmathvalue(f),
+ SkewedFractionHorizontalGap=readmathvalue(f),
+ SkewedFractionVerticalGap=readmathvalue(f),
+ OverbarVerticalGap=readmathvalue(f),
+ OverbarRuleThickness=readmathvalue(f),
+ OverbarExtraAscender=readmathvalue(f),
+ UnderbarVerticalGap=readmathvalue(f),
+ UnderbarRuleThickness=readmathvalue(f),
+ UnderbarExtraDescender=readmathvalue(f),
+ RadicalVerticalGap=readmathvalue(f),
+ RadicalDisplayStyleVerticalGap=readmathvalue(f),
+ RadicalRuleThickness=readmathvalue(f),
+ RadicalExtraAscender=readmathvalue(f),
+ RadicalKernBeforeDegree=readmathvalue(f),
+ RadicalKernAfterDegree=readmathvalue(f),
+ RadicalDegreeBottomRaisePercent=readshort(f),
+ }
+end
+local function readmathglyphinfo(f,fontdata,offset)
+ setposition(f,offset)
+ local italics=readushort(f)
+ local accents=readushort(f)
+ local extensions=readushort(f)
+ local kerns=readushort(f)
+ local glyphs=fontdata.glyphs
+ if italics~=0 then
+ setposition(f,offset+italics)
+ local coverage=readushort(f)
+ local nofglyphs=readushort(f)
+ coverage=readcoverage(f,offset+italics+coverage,true)
+ setposition(f,offset+italics+4)
+ for i=1,nofglyphs do
+ local italic=readmathvalue(f)
+ if italic~=0 then
+ local glyph=glyphs[coverage[i]]
+ local math=glyph.math
+ if not math then
+ glyph.math={ italic=italic }
+ else
+ math.italic=italic
+ end
+ end
+ end
+ fontdata.hasitalics=true
+ end
+ if accents~=0 then
+ setposition(f,offset+accents)
+ local coverage=readushort(f)
+ local nofglyphs=readushort(f)
+ coverage=readcoverage(f,offset+accents+coverage,true)
+ setposition(f,offset+accents+4)
+ for i=1,nofglyphs do
+ local accent=readmathvalue(f)
+ if accent~=0 then
+ local glyph=glyphs[coverage[i]]
+ local math=glyph.math
+ if not math then
+ glyph.math={ accent=accent }
+ else
+ math.accent=accent
+ end
+ end
+ end
+ end
+ if extensions~=0 then
+ setposition(f,offset+extensions)
+ end
+ if kerns~=0 then
+ local kernoffset=offset+kerns
+ setposition(f,kernoffset)
+ local coverage=readushort(f)
+ local nofglyphs=readushort(f)
+ if nofglyphs>0 then
+ local function get(offset)
+ setposition(f,kernoffset+offset)
+ local n=readushort(f)
+ if n==0 then
+ local k=readmathvalue(f)
+ if k==0 then
+ else
+ return { { kern=k } }
+ end
+ else
+ local l={}
+ for i=1,n do
+ l[i]={ height=readmathvalue(f) }
+ end
+ for i=1,n do
+ l[i].kern=readmathvalue(f)
+ end
+ l[n+1]={ kern=readmathvalue(f) }
+ return l
+ end
+ end
+ local kernsets={}
+ for i=1,nofglyphs do
+ local topright=readushort(f)
+ local topleft=readushort(f)
+ local bottomright=readushort(f)
+ local bottomleft=readushort(f)
+ kernsets[i]={
+ topright=topright~=0 and topright or nil,
+ topleft=topleft~=0 and topleft or nil,
+ bottomright=bottomright~=0 and bottomright or nil,
+ bottomleft=bottomleft~=0 and bottomleft or nil,
+ }
+ end
+ coverage=readcoverage(f,kernoffset+coverage,true)
+ for i=1,nofglyphs do
+ local kernset=kernsets[i]
+ if next(kernset) then
+ local k=kernset.topright if k then kernset.topright=get(k) end
+ local k=kernset.topleft if k then kernset.topleft=get(k) end
+ local k=kernset.bottomright if k then kernset.bottomright=get(k) end
+ local k=kernset.bottomleft if k then kernset.bottomleft=get(k) end
+ if next(kernset) then
+ local glyph=glyphs[coverage[i]]
+ local math=glyph.math
+ if math then
+ math.kerns=kernset
+ else
+ glyph.math={ kerns=kernset }
+ end
+ end
+ end
+ end
+ end
+ end
+end
+local function readmathvariants(f,fontdata,offset)
+ setposition(f,offset)
+ local glyphs=fontdata.glyphs
+ local minoverlap=readushort(f)
+ local vcoverage=readushort(f)
+ local hcoverage=readushort(f)
+ local vnofglyphs=readushort(f)
+ local hnofglyphs=readushort(f)
+ local vconstruction={}
+ local hconstruction={}
+ for i=1,vnofglyphs do
+ vconstruction[i]=readushort(f)
+ end
+ for i=1,hnofglyphs do
+ hconstruction[i]=readushort(f)
+ end
+ fontdata.mathconstants.MinConnectorOverlap=minoverlap
+ local function get(offset,coverage,nofglyphs,construction,kvariants,kparts,kitalic)
+ if coverage~=0 and nofglyphs>0 then
+ local coverage=readcoverage(f,offset+coverage,true)
+ for i=1,nofglyphs do
+ local c=construction[i]
+ if c~=0 then
+ local index=coverage[i]
+ local glyph=glyphs[index]
+ local math=glyph.math
+ setposition(f,offset+c)
+ local assembly=readushort(f)
+ local nofvariants=readushort(f)
+ if nofvariants>0 then
+ local variants,v=nil,0
+ for i=1,nofvariants do
+ local variant=readushort(f)
+ if variant==index then
+ elseif variants then
+ v=v+1
+ variants[v]=variant
+ else
+ v=1
+ variants={ variant }
+ end
+ skipshort(f)
+ end
+ if not variants then
+ elseif not math then
+ math={ [kvariants]=variants }
+ glyph.math=math
+ else
+ math[kvariants]=variants
+ end
+ end
+ if assembly~=0 then
+ setposition(f,offset+c+assembly)
+ local italic=readmathvalue(f)
+ local nofparts=readushort(f)
+ local parts={}
+ for i=1,nofparts do
+ local p={
+ glyph=readushort(f),
+ start=readushort(f),
+ ["end"]=readushort(f),
+ advance=readushort(f),
+ }
+ local flags=readushort(f)
+ if bittest(flags,0x0001) then
+ p.extender=1
+ end
+ parts[i]=p
+ end
+ if not math then
+ math={
+ [kparts]=parts
+ }
+ glyph.math=math
+ else
+ math[kparts]=parts
+ end
+ if italic and italic~=0 then
+ math[kitalic]=italic
+ end
+ end
+ end
+ end
+ end
+ end
+ get(offset,vcoverage,vnofglyphs,vconstruction,"vvariants","vparts","vitalic")
+ get(offset,hcoverage,hnofglyphs,hconstruction,"hvariants","hparts","hitalic")
+end
+function readers.math(f,fontdata,specification)
+ if specification.glyphs then
+ local datatable=fontdata.tables.math
+ if datatable then
+ local tableoffset=datatable.offset
+ setposition(f,tableoffset)
+ local version=readulong(f)
+ if version~=0x00010000 then
+ report("table version %a of %a is not supported (yet), maybe font %s is bad",version,"math",fontdata.filename)
+ return
+ end
+ local constants=readushort(f)
+ local glyphinfo=readushort(f)
+ local variants=readushort(f)
+ if constants==0 then
+ report("the math table of %a has no constants",fontdata.filename)
+ else
+ readmathconstants(f,fontdata,tableoffset+constants)
+ end
+ if glyphinfo~=0 then
+ readmathglyphinfo(f,fontdata,tableoffset+glyphinfo)
+ end
+ if variants~=0 then
+ readmathvariants(f,fontdata,tableoffset+variants)
+ end
+ end
+ end
+end
+function readers.colr(f,fontdata,specification)
+ local datatable=fontdata.tables.colr
+ if datatable then
+ if specification.glyphs then
+ local tableoffset=datatable.offset
+ setposition(f,tableoffset)
+ local version=readushort(f)
+ if version~=0 then
+ report("table version %a of %a is not supported (yet), maybe font %s is bad",version,"colr",fontdata.filename)
+ return
+ end
+ if not fontdata.tables.cpal then
+ report("color table %a in font %a has no mandate %a table","colr",fontdata.filename,"cpal")
+ fontdata.colorpalettes={}
+ end
+ local glyphs=fontdata.glyphs
+ local nofglyphs=readushort(f)
+ local baseoffset=readulong(f)
+ local layeroffset=readulong(f)
+ local noflayers=readushort(f)
+ local layerrecords={}
+ local maxclass=0
+ setposition(f,tableoffset+layeroffset)
+ for i=1,noflayers do
+ local slot=readushort(f)
+ local class=readushort(f)
+ if class<0xFFFF then
+ class=class+1
+ if class>maxclass then
+ maxclass=class
+ end
+ end
+ layerrecords[i]={
+ slot=slot,
+ class=class,
+ }
+ end
+ fontdata.maxcolorclass=maxclass
+ setposition(f,tableoffset+baseoffset)
+ for i=0,nofglyphs-1 do
+ local glyphindex=readushort(f)
+ local firstlayer=readushort(f)
+ local noflayers=readushort(f)
+ local t={}
+ for i=1,noflayers do
+ t[i]=layerrecords[firstlayer+i]
+ end
+ glyphs[glyphindex].colors=t
+ end
+ end
+ fontdata.hascolor=true
+ end
+end
+function readers.cpal(f,fontdata,specification)
+ if specification.glyphs then
+ local datatable=fontdata.tables.cpal
+ if datatable then
+ local tableoffset=datatable.offset
+ setposition(f,tableoffset)
+ local version=readushort(f)
+ if version>1 then
+ report("table version %a of %a is not supported (yet), maybe font %s is bad",version,"cpal",fontdata.filename)
+ return
+ end
+ local nofpaletteentries=readushort(f)
+ local nofpalettes=readushort(f)
+ local nofcolorrecords=readushort(f)
+ local firstcoloroffset=readulong(f)
+ local colorrecords={}
+ local palettes={}
+ for i=1,nofpalettes do
+ palettes[i]=readushort(f)
+ end
+ if version==1 then
+ local palettettypesoffset=readulong(f)
+ local palettelabelsoffset=readulong(f)
+ local paletteentryoffset=readulong(f)
+ end
+ setposition(f,tableoffset+firstcoloroffset)
+ for i=1,nofcolorrecords do
+ local b,g,r,a=readbytes(f,4)
+ colorrecords[i]={
+ r,g,b,a~=255 and a or nil,
+ }
+ end
+ for i=1,nofpalettes do
+ local p={}
+ local o=palettes[i]
+ for j=1,nofpaletteentries do
+ p[j]=colorrecords[o+j]
+ end
+ palettes[i]=p
+ end
+ fontdata.colorpalettes=palettes
+ end
+ end
+end
+function readers.svg(f,fontdata,specification)
+ local datatable=fontdata.tables.svg
+ if datatable then
+ if specification.glyphs then
+ local tableoffset=datatable.offset
+ setposition(f,tableoffset)
+ local version=readushort(f)
+ if version~=0 then
+ report("table version %a of %a is not supported (yet), maybe font %s is bad",version,"svg",fontdata.filename)
+ return
+ end
+ local glyphs=fontdata.glyphs
+ local indexoffset=tableoffset+readulong(f)
+ local reserved=readulong(f)
+ setposition(f,indexoffset)
+ local nofentries=readushort(f)
+ local entries={}
+ for i=1,nofentries do
+ entries[i]={
+ first=readushort(f),
+ last=readushort(f),
+ offset=indexoffset+readulong(f),
+ length=readulong(f),
+ }
+ end
+ for i=1,nofentries do
+ local entry=entries[i]
+ setposition(f,entry.offset)
+ entries[i]={
+ first=entry.first,
+ last=entry.last,
+ data=readstring(f,entry.length)
+ }
+ end
+ fontdata.svgshapes=entries
+ end
+ fontdata.hascolor=true
+ end
+end
+
+end --- [luaotfload, fontloader-2017-02-11.lua scope for “font-dspâ€] ---
+
+
+do --- [luaotfload, fontloader-2017-02-11.lua scope for “font-oup†f7237130b648a4c2b477dabedc7f90e8] ---
+
+if not modules then modules={} end modules ['font-oup']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local next,type=next,type
+local P,R,S=lpeg.P,lpeg.R,lpeg.S
+local lpegmatch=lpeg.match
+local insert,remove,copy,unpack=table.insert,table.remove,table.copy,table.unpack
+local formatters=string.formatters
+local sortedkeys=table.sortedkeys
+local sortedhash=table.sortedhash
+local tohash=table.tohash
+local report=logs.reporter("otf reader")
+local trace_markwidth=false trackers.register("otf.markwidth",function(v) trace_markwidth=v end)
+local readers=fonts.handlers.otf.readers
+local privateoffset=fonts.constructors and fonts.constructors.privateoffset or 0xF0000
+local f_private=formatters["P%05X"]
+local f_unicode=formatters["U%05X"]
+local f_index=formatters["I%05X"]
+local f_character_y=formatters["%C"]
+local f_character_n=formatters["[ %C ]"]
+local check_duplicates=true
+local check_soft_hyphen=false
+directives.register("otf.checksofthyphen",function(v)
+ check_soft_hyphen=v
+end)
+local function replaced(list,index,replacement)
+ if type(list)=="number" then
+ return replacement
+ elseif type(replacement)=="table" then
+ local t={}
+ local n=index-1
+ for i=1,n do
+ t[i]=list[i]
+ end
+ for i=1,#replacement do
+ n=n+1
+ t[n]=replacement[i]
+ end
+ for i=index+1,#list do
+ n=n+1
+ t[n]=list[i]
+ end
+ else
+ list[index]=replacement
+ return list
+ end
+end
+local function unifyresources(fontdata,indices)
+ local descriptions=fontdata.descriptions
+ local resources=fontdata.resources
+ if not descriptions or not resources then
+ return
+ end
+ local variants=fontdata.resources.variants
+ if variants then
+ for selector,unicodes in next,variants do
+ for unicode,index in next,unicodes do
+ unicodes[unicode]=indices[index]
+ end
+ end
+ end
+ local function remark(marks)
+ if marks then
+ local newmarks={}
+ for k,v in next,marks do
+ local u=indices[k]
+ if u then
+ newmarks[u]=v
+ else
+ report("discarding mark %i",k)
+ end
+ end
+ return newmarks
+ end
+ end
+ local marks=resources.marks
+ if marks then
+ resources.marks=remark(marks)
+ end
+ local markclasses=resources.markclasses
+ if markclasses then
+ for class,marks in next,markclasses do
+ markclasses[class]=remark(marks)
+ end
+ end
+ local marksets=resources.marksets
+ if marksets then
+ for class,marks in next,marksets do
+ marksets[class]=remark(marks)
+ end
+ end
+ local done={}
+ local duplicates=check_duplicates and resources.duplicates
+ if duplicates and not next(duplicates) then
+ duplicates=false
+ end
+ local function recover(cover)
+ for i=1,#cover do
+ local c=cover[i]
+ if not done[c] then
+ local t={}
+ for k,v in next,c do
+ t[indices[k]]=v
+ end
+ cover[i]=t
+ done[c]=d
+ end
+ end
+ end
+ local function recursed(c)
+ local t={}
+ for g,d in next,c do
+ if type(d)=="table" then
+ t[indices[g]]=recursed(d)
+ else
+ t[g]=indices[d]
+ end
+ end
+ return t
+ end
+ local function unifythem(sequences)
+ if not sequences then
+ return
+ end
+ for i=1,#sequences do
+ local sequence=sequences[i]
+ local kind=sequence.type
+ local steps=sequence.steps
+ local features=sequence.features
+ if steps then
+ for i=1,#steps do
+ local step=steps[i]
+ if kind=="gsub_single" then
+ local c=step.coverage
+ if c then
+ local t1=done[c]
+ if not t1 then
+ t1={}
+ if duplicates then
+ for g1,d1 in next,c do
+ local ug1=indices[g1]
+ local ud1=indices[d1]
+ t1[ug1]=ud1
+ local dg1=duplicates[ug1]
+ if dg1 then
+ for u in next,dg1 do
+ t1[u]=ud1
+ end
+ end
+ end
+ else
+ for g1,d1 in next,c do
+ t1[indices[g1]]=indices[d1]
+ end
+ end
+ done[c]=t1
+ end
+ step.coverage=t1
+ end
+ elseif kind=="gpos_pair" then
+ local c=step.coverage
+ if c then
+ local t1=done[c]
+ if not t1 then
+ t1={}
+ for g1,d1 in next,c do
+ local t2=done[d1]
+ if not t2 then
+ t2={}
+ for g2,d2 in next,d1 do
+ t2[indices[g2]]=d2
+ end
+ done[d1]=t2
+ end
+ t1[indices[g1]]=t2
+ end
+ done[c]=t1
+ end
+ step.coverage=t1
+ end
+ elseif kind=="gsub_ligature" then
+ local c=step.coverage
+ if c then
+ step.coverage=recursed(c)
+ end
+ elseif kind=="gsub_alternate" or kind=="gsub_multiple" then
+ local c=step.coverage
+ if c then
+ local t1=done[c]
+ if not t1 then
+ t1={}
+ if duplicates then
+ for g1,d1 in next,c do
+ for i=1,#d1 do
+ d1[i]=indices[d1[i]]
+ end
+ local ug1=indices[g1]
+ t1[ug1]=d1
+ local dg1=duplicates[ug1]
+ if dg1 then
+ for u in next,dg1 do
+ t1[u]=copy(d1)
+ end
+ end
+ end
+ else
+ for g1,d1 in next,c do
+ for i=1,#d1 do
+ d1[i]=indices[d1[i]]
+ end
+ t1[indices[g1]]=d1
+ end
+ end
+ done[c]=t1
+ end
+ step.coverage=t1
+ end
+ elseif kind=="gpos_mark2base" or kind=="gpos_mark2mark" or kind=="gpos_mark2ligature" then
+ local c=step.coverage
+ if c then
+ local t1=done[c]
+ if not t1 then
+ t1={}
+ for g1,d1 in next,c do
+ t1[indices[g1]]=d1
+ end
+ done[c]=t1
+ end
+ step.coverage=t1
+ end
+ local c=step.baseclasses
+ if c then
+ local t1=done[c]
+ if not t1 then
+ for g1,d1 in next,c do
+ local t2=done[d1]
+ if not t2 then
+ t2={}
+ for g2,d2 in next,d1 do
+ t2[indices[g2]]=d2
+ end
+ done[d1]=t2
+ end
+ c[g1]=t2
+ end
+ done[c]=c
+ end
+ end
+ elseif kind=="gpos_single" then
+ local c=step.coverage
+ if c then
+ local t1=done[c]
+ if not t1 then
+ t1={}
+ if duplicates then
+ for g1,d1 in next,c do
+ local ug1=indices[g1]
+ t1[ug1]=d1
+ local dg1=duplicates[ug1]
+ if dg1 then
+ for u in next,dg1 do
+ t1[u]=d1
+ end
+ end
+ end
+ else
+ for g1,d1 in next,c do
+ t1[indices[g1]]=d1
+ end
+ end
+ done[c]=t1
+ end
+ step.coverage=t1
+ end
+ elseif kind=="gpos_cursive" then
+ local c=step.coverage
+ if c then
+ local t1=done[c]
+ if not t1 then
+ t1={}
+ if duplicates then
+ for g1,d1 in next,c do
+ local ug1=indices[g1]
+ t1[ug1]=d1
+ local dg1=duplicates[ug1]
+ if dg1 then
+ for u in next,dg1 do
+ t1[u]=copy(d1)
+ end
+ end
+ end
+ else
+ for g1,d1 in next,c do
+ t1[indices[g1]]=d1
+ end
+ end
+ done[c]=t1
+ end
+ step.coverage=t1
+ end
+ end
+ local rules=step.rules
+ if rules then
+ for i=1,#rules do
+ local rule=rules[i]
+ local before=rule.before if before then recover(before) end
+ local after=rule.after if after then recover(after) end
+ local current=rule.current if current then recover(current) end
+ local replacements=rule.replacements
+ if replacements then
+ if not done[replacements] then
+ local r={}
+ for k,v in next,replacements do
+ r[indices[k]]=indices[v]
+ end
+ rule.replacements=r
+ done[replacements]=r
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ unifythem(resources.sequences)
+ unifythem(resources.sublookups)
+end
+local function copyduplicates(fontdata)
+ if check_duplicates then
+ local descriptions=fontdata.descriptions
+ local resources=fontdata.resources
+ local duplicates=resources.duplicates
+ if check_soft_hyphen then
+ local ds=descriptions[0xAD]
+ if not ds or ds.width==0 then
+ if ds then
+ descriptions[0xAD]=nil
+ report("patching soft hyphen")
+ else
+ report("adding soft hyphen")
+ end
+ if not duplicates then
+ duplicates={}
+ resources.duplicates=duplicates
+ end
+ local dh=duplicates[0x2D]
+ if dh then
+ dh[#dh+1]={ [0xAD]=true }
+ else
+ duplicates[0x2D]={ [0xAD]=true }
+ end
+ end
+ end
+ if duplicates then
+ for u,d in next,duplicates do
+ local du=descriptions[u]
+ if du then
+ local t={ f_character_y(u),"@",f_index(du.index),"->" }
+ local n=0
+ local m=25
+ for u in next,d do
+ if descriptions[u] then
+ if n<m then
+ t[n+4]=f_character_n(u)
+ end
+ else
+ local c=copy(du)
+ c.unicode=u
+ descriptions[u]=c
+ if n<m then
+ t[n+4]=f_character_y(u)
+ end
+ end
+ n=n+1
+ end
+ if n<=m then
+ report("duplicates: %i : % t",n,t)
+ else
+ report("duplicates: %i : % t ...",n,t)
+ end
+ else
+ end
+ end
+ end
+ end
+end
+local ignore={
+ ["notdef"]=true,
+ [".notdef"]=true,
+ ["null"]=true,
+ [".null"]=true,
+ ["nonmarkingreturn"]=true,
+}
+local function checklookups(fontdata,missing,nofmissing)
+ local descriptions=fontdata.descriptions
+ local resources=fontdata.resources
+ if missing and nofmissing and nofmissing<=0 then
+ return
+ end
+ local singles={}
+ local alternates={}
+ local ligatures={}
+ if not missing then
+ missing={}
+ nofmissing=0
+ for u,d in next,descriptions do
+ if not d.unicode then
+ nofmissing=nofmissing+1
+ missing[u]=true
+ end
+ end
+ end
+ local function collectthem(sequences)
+ if not sequences then
+ return
+ end
+ for i=1,#sequences do
+ local sequence=sequences[i]
+ local kind=sequence.type
+ local steps=sequence.steps
+ if steps then
+ for i=1,#steps do
+ local step=steps[i]
+ if kind=="gsub_single" then
+ local c=step.coverage
+ if c then
+ singles[#singles+1]=c
+ end
+ elseif kind=="gsub_alternate" then
+ local c=step.coverage
+ if c then
+ alternates[#alternates+1]=c
+ end
+ elseif kind=="gsub_ligature" then
+ local c=step.coverage
+ if c then
+ ligatures[#ligatures+1]=c
+ end
+ end
+ end
+ end
+ end
+ end
+ collectthem(resources.sequences)
+ collectthem(resources.sublookups)
+ local loops=0
+ while true do
+ loops=loops+1
+ local old=nofmissing
+ for i=1,#singles do
+ local c=singles[i]
+ for g1,g2 in next,c do
+ if missing[g1] then
+ local u2=descriptions[g2].unicode
+ if u2 then
+ missing[g1]=false
+ descriptions[g1].unicode=u2
+ nofmissing=nofmissing-1
+ end
+ end
+ if missing[g2] then
+ local u1=descriptions[g1].unicode
+ if u1 then
+ missing[g2]=false
+ descriptions[g2].unicode=u1
+ nofmissing=nofmissing-1
+ end
+ end
+ end
+ end
+ for i=1,#alternates do
+ local c=alternates[i]
+ for g1,d1 in next,c do
+ if missing[g1] then
+ for i=1,#d1 do
+ local g2=d1[i]
+ local u2=descriptions[g2].unicode
+ if u2 then
+ missing[g1]=false
+ descriptions[g1].unicode=u2
+ nofmissing=nofmissing-1
+ end
+ end
+ end
+ if not missing[g1] then
+ for i=1,#d1 do
+ local g2=d1[i]
+ if missing[g2] then
+ local u1=descriptions[g1].unicode
+ if u1 then
+ missing[g2]=false
+ descriptions[g2].unicode=u1
+ nofmissing=nofmissing-1
+ end
+ end
+ end
+ end
+ end
+ end
+ if nofmissing<=0 then
+ report("all done in %s loops",loops)
+ return
+ elseif old==nofmissing then
+ break
+ end
+ end
+ local t,n
+ local function recursed(c)
+ for g,d in next,c do
+ if g~="ligature" then
+ local u=descriptions[g].unicode
+ if u then
+ n=n+1
+ t[n]=u
+ recursed(d)
+ n=n-1
+ end
+ elseif missing[d] then
+ local l={}
+ local m=0
+ for i=1,n do
+ local u=t[i]
+ if type(u)=="table" then
+ for i=1,#u do
+ m=m+1
+ l[m]=u[i]
+ end
+ else
+ m=m+1
+ l[m]=u
+ end
+ end
+ missing[d]=false
+ descriptions[d].unicode=l
+ nofmissing=nofmissing-1
+ end
+ end
+ end
+ if nofmissing>0 then
+ t={}
+ n=0
+ local loops=0
+ while true do
+ loops=loops+1
+ local old=nofmissing
+ for i=1,#ligatures do
+ recursed(ligatures[i])
+ end
+ if nofmissing<=0 then
+ report("all done in %s loops",loops)
+ return
+ elseif old==nofmissing then
+ break
+ end
+ end
+ t=nil
+ n=0
+ end
+ if nofmissing>0 then
+ local done={}
+ for i,r in next,missing do
+ if r then
+ local data=descriptions[i]
+ local name=data and data.name or f_index(i)
+ if not ignore[name] then
+ done[name]=true
+ end
+ end
+ end
+ if next(done) then
+ report("not unicoded: % t",table.sortedkeys(done))
+ end
+ end
+end
+local function unifymissing(fontdata)
+ if not fonts.mappings then
+ require("font-map")
+ require("font-agl")
+ end
+ local unicodes={}
+ local private=fontdata.private
+ local resources=fontdata.resources
+ resources.unicodes=unicodes
+ for unicode,d in next,fontdata.descriptions do
+ if unicode<privateoffset then
+ local name=d.name
+ if name then
+ unicodes[name]=unicode
+ end
+ end
+ end
+ fonts.mappings.addtounicode(fontdata,fontdata.filename,checklookups)
+ resources.unicodes=nil
+end
+local function unifyglyphs(fontdata,usenames)
+ local private=fontdata.private or privateoffset
+ local glyphs=fontdata.glyphs
+ local indices={}
+ local descriptions={}
+ local names=usenames and {}
+ local resources=fontdata.resources
+ local zero=glyphs[0]
+ local zerocode=zero.unicode
+ if not zerocode then
+ zerocode=private
+ zero.unicode=zerocode
+ private=private+1
+ end
+ descriptions[zerocode]=zero
+ if names then
+ local name=glyphs[0].name or f_private(zerocode)
+ indices[0]=name
+ names[name]=zerocode
+ else
+ indices[0]=zerocode
+ end
+ for index=1,#glyphs do
+ local glyph=glyphs[index]
+ local unicode=glyph.unicode
+ if not unicode then
+ unicode=private
+ if names then
+ local name=glyph.name or f_private(unicode)
+ indices[index]=name
+ names[name]=unicode
+ else
+ indices[index]=unicode
+ end
+ private=private+1
+ elseif descriptions[unicode] then
+ report("assigning private unicode %U to glyph indexed %05X (%C)",private,index,unicode)
+ unicode=private
+ if names then
+ local name=glyph.name or f_private(unicode)
+ indices[index]=name
+ names[name]=unicode
+ else
+ indices[index]=unicode
+ end
+ private=private+1
+ else
+ if names then
+ local name=glyph.name or f_unicode(unicode)
+ indices[index]=name
+ names[name]=unicode
+ else
+ indices[index]=unicode
+ end
+ end
+ descriptions[unicode]=glyph
+ end
+ for index=1,#glyphs do
+ local math=glyphs[index].math
+ if math then
+ local list=math.vparts
+ if list then
+ for i=1,#list do local l=list[i] l.glyph=indices[l.glyph] end
+ end
+ local list=math.hparts
+ if list then
+ for i=1,#list do local l=list[i] l.glyph=indices[l.glyph] end
+ end
+ local list=math.vvariants
+ if list then
+ for i=1,#list do list[i]=indices[list[i]] end
+ end
+ local list=math.hvariants
+ if list then
+ for i=1,#list do list[i]=indices[list[i]] end
+ end
+ end
+ end
+ local colorpalettes=resources.colorpalettes
+ if colorpalettes then
+ for index=1,#glyphs do
+ local colors=glyphs[index].colors
+ if colors then
+ for i=1,#colors do
+ local c=colors[i]
+ c.slot=indices[c.slot]
+ end
+ end
+ end
+ end
+ fontdata.private=private
+ fontdata.glyphs=nil
+ fontdata.names=names
+ fontdata.descriptions=descriptions
+ fontdata.hashmethod=hashmethod
+ return indices,names
+end
+local p_bogusname=(
+ (P("uni")+P("UNI")+P("Uni")+P("U")+P("u"))*S("Xx")^0*R("09","AF")^1+(P("identity")+P("Identity")+P("IDENTITY"))*R("09","AF")^1+(P("index")+P("Index")+P("INDEX"))*R("09")^1
+)*P(-1)
+local function stripredundant(fontdata)
+ local descriptions=fontdata.descriptions
+ if descriptions then
+ local n=0
+ local c=0
+ for unicode,d in next,descriptions do
+ local name=d.name
+ if name and lpegmatch(p_bogusname,name) then
+ d.name=nil
+ n=n+1
+ end
+ if d.class=="base" then
+ d.class=nil
+ c=c+1
+ end
+ end
+ if n>0 then
+ report("%s bogus names removed (verbose unicode)",n)
+ end
+ if c>0 then
+ report("%s base class tags removed (default is base)",c)
+ end
+ end
+end
+function readers.getcomponents(fontdata)
+ local resources=fontdata.resources
+ if resources then
+ local sequences=resources.sequences
+ if sequences then
+ local collected={}
+ for i=1,#sequences do
+ local sequence=sequences[i]
+ if sequence.type=="gsub_ligature" then
+ local steps=sequence.steps
+ if steps then
+ local l={}
+ local function traverse(p,k,v)
+ if k=="ligature" then
+ collected[v]={ unpack(l) }
+ else
+ insert(l,k)
+ for k,vv in next,v do
+ traverse(p,k,vv)
+ end
+ remove(l)
+ end
+ end
+ for i=1,#steps do
+ local coverage=steps[i].coverage
+ if coverage then
+ for k,v in next,coverage do
+ traverse(k,k,v)
+ end
+ end
+ end
+ end
+ end
+ end
+ if next(collected) then
+ while true do
+ local done=false
+ for k,v in next,collected do
+ for i=1,#v do
+ local vi=v[i]
+ if vi==k then
+ collected[k]=nil
+ break
+ else
+ local c=collected[vi]
+ if c then
+ done=true
+ local t={}
+ local n=i-1
+ for j=1,n do
+ t[j]=v[j]
+ end
+ for j=1,#c do
+ n=n+1
+ t[n]=c[j]
+ end
+ for j=i+1,#v do
+ n=n+1
+ t[n]=v[j]
+ end
+ collected[k]=t
+ break
+ end
+ end
+ end
+ end
+ if not done then
+ break
+ end
+ end
+ return collected
+ end
+ end
+ end
+end
+readers.unifymissing=unifymissing
+function readers.rehash(fontdata,hashmethod)
+ if not (fontdata and fontdata.glyphs) then
+ return
+ end
+ if hashmethod=="indices" then
+ fontdata.hashmethod="indices"
+ elseif hashmethod=="names" then
+ fontdata.hashmethod="names"
+ local indices=unifyglyphs(fontdata,true)
+ unifyresources(fontdata,indices)
+ copyduplicates(fontdata)
+ unifymissing(fontdata)
+ else
+ fontdata.hashmethod="unicode"
+ local indices=unifyglyphs(fontdata)
+ unifyresources(fontdata,indices)
+ copyduplicates(fontdata)
+ unifymissing(fontdata)
+ stripredundant(fontdata)
+ end
+end
+function readers.checkhash(fontdata)
+ local hashmethod=fontdata.hashmethod
+ if hashmethod=="unicodes" then
+ fontdata.names=nil
+ elseif hashmethod=="names" and fontdata.names then
+ unifyresources(fontdata,fontdata.names)
+ copyduplicates(fontdata)
+ fontdata.hashmethod="unicode"
+ fontdata.names=nil
+ else
+ readers.rehash(fontdata,"unicode")
+ end
+end
+function readers.addunicodetable(fontdata)
+ local resources=fontdata.resources
+ local unicodes=resources.unicodes
+ if not unicodes then
+ local descriptions=fontdata.descriptions
+ if descriptions then
+ unicodes={}
+ resources.unicodes=unicodes
+ for u,d in next,descriptions do
+ local n=d.name
+ if n then
+ unicodes[n]=u
+ end
+ end
+ end
+ end
+end
+local concat,sort=table.concat,table.sort
+local next,type,tostring=next,type,tostring
+local criterium=1
+local threshold=0
+local trace_packing=false trackers.register("otf.packing",function(v) trace_packing=v end)
+local trace_loading=false trackers.register("otf.loading",function(v) trace_loading=v end)
+local report_otf=logs.reporter("fonts","otf loading")
+local function tabstr_normal(t)
+ local s={}
+ local n=0
+ for k,v in next,t do
+ n=n+1
+ if type(v)=="table" then
+ s[n]=k..">"..tabstr_normal(v)
+ elseif v==true then
+ s[n]=k.."+"
+ elseif v then
+ s[n]=k.."="..v
+ else
+ s[n]=k.."-"
+ end
+ end
+ if n==0 then
+ return ""
+ elseif n==1 then
+ return s[1]
+ else
+ sort(s)
+ return concat(s,",")
+ end
+end
+local function tabstr_flat(t)
+ local s={}
+ local n=0
+ for k,v in next,t do
+ n=n+1
+ s[n]=k.."="..v
+ end
+ if n==0 then
+ return ""
+ elseif n==1 then
+ return s[1]
+ else
+ sort(s)
+ return concat(s,",")
+ end
+end
+local function tabstr_mixed(t)
+ local s={}
+ local n=#t
+ if n==0 then
+ return ""
+ elseif n==1 then
+ local k=t[1]
+ if k==true then
+ return "++"
+ elseif k==false then
+ return "--"
+ else
+ return tostring(k)
+ end
+ else
+ for i=1,n do
+ local k=t[i]
+ if k==true then
+ s[i]="++"
+ elseif k==false then
+ s[i]="--"
+ else
+ s[i]=k
+ end
+ end
+ return concat(s,",")
+ end
+end
+local function tabstr_boolean(t)
+ local s={}
+ local n=0
+ for k,v in next,t do
+ n=n+1
+ if v then
+ s[n]=k.."+"
+ else
+ s[n]=k.."-"
+ end
+ end
+ if n==0 then
+ return ""
+ elseif n==1 then
+ return s[1]
+ else
+ sort(s)
+ return concat(s,",")
+ end
+end
+function readers.pack(data)
+ if data then
+ local h,t,c={},{},{}
+ local hh,tt,cc={},{},{}
+ local nt,ntt=0,0
+ local function pack_normal(v)
+ local tag=tabstr_normal(v)
+ local ht=h[tag]
+ if ht then
+ c[ht]=c[ht]+1
+ return ht
+ else
+ nt=nt+1
+ t[nt]=v
+ h[tag]=nt
+ c[nt]=1
+ return nt
+ end
+ end
+ local function pack_flat(v)
+ local tag=tabstr_flat(v)
+ local ht=h[tag]
+ if ht then
+ c[ht]=c[ht]+1
+ return ht
+ else
+ nt=nt+1
+ t[nt]=v
+ h[tag]=nt
+ c[nt]=1
+ return nt
+ end
+ end
+ local function pack_boolean(v)
+ local tag=tabstr_boolean(v)
+ local ht=h[tag]
+ if ht then
+ c[ht]=c[ht]+1
+ return ht
+ else
+ nt=nt+1
+ t[nt]=v
+ h[tag]=nt
+ c[nt]=1
+ return nt
+ end
+ end
+ local function pack_indexed(v)
+ local tag=concat(v," ")
+ local ht=h[tag]
+ if ht then
+ c[ht]=c[ht]+1
+ return ht
+ else
+ nt=nt+1
+ t[nt]=v
+ h[tag]=nt
+ c[nt]=1
+ return nt
+ end
+ end
+ local function pack_mixed(v)
+ local tag=tabstr_mixed(v)
+ local ht=h[tag]
+ if ht then
+ c[ht]=c[ht]+1
+ return ht
+ else
+ nt=nt+1
+ t[nt]=v
+ h[tag]=nt
+ c[nt]=1
+ return nt
+ end
+ end
+ local function pack_final(v)
+ if c[v]<=criterium then
+ return t[v]
+ else
+ local hv=hh[v]
+ if hv then
+ return hv
+ else
+ ntt=ntt+1
+ tt[ntt]=t[v]
+ hh[v]=ntt
+ cc[ntt]=c[v]
+ return ntt
+ end
+ end
+ end
+ local function success(stage,pass)
+ if nt==0 then
+ if trace_loading or trace_packing then
+ report_otf("pack quality: nothing to pack")
+ end
+ return false
+ elseif nt>=threshold then
+ local one,two,rest=0,0,0
+ if pass==1 then
+ for k,v in next,c do
+ if v==1 then
+ one=one+1
+ elseif v==2 then
+ two=two+1
+ else
+ rest=rest+1
+ end
+ end
+ else
+ for k,v in next,cc do
+ if v>20 then
+ rest=rest+1
+ elseif v>10 then
+ two=two+1
+ else
+ one=one+1
+ end
+ end
+ data.tables=tt
+ end
+ if trace_loading or trace_packing then
+ report_otf("pack quality: stage %s, pass %s, %s packed, 1-10:%s, 11-20:%s, rest:%s (criterium: %s)",
+ stage,pass,one+two+rest,one,two,rest,criterium)
+ end
+ return true
+ else
+ if trace_loading or trace_packing then
+ report_otf("pack quality: stage %s, pass %s, %s packed, aborting pack (threshold: %s)",
+ stage,pass,nt,threshold)
+ end
+ return false
+ end
+ end
+ local function packers(pass)
+ if pass==1 then
+ return pack_normal,pack_indexed,pack_flat,pack_boolean,pack_mixed
+ else
+ return pack_final,pack_final,pack_final,pack_final,pack_final
+ end
+ end
+ local resources=data.resources
+ local sequences=resources.sequences
+ local sublookups=resources.sublookups
+ local features=resources.features
+ local palettes=resources.colorpalettes
+ local chardata=characters and characters.data
+ local descriptions=data.descriptions or data.glyphs
+ if not descriptions then
+ return
+ end
+ for pass=1,2 do
+ if trace_packing then
+ report_otf("start packing: stage 1, pass %s",pass)
+ end
+ local pack_normal,pack_indexed,pack_flat,pack_boolean,pack_mixed=packers(pass)
+ for unicode,description in next,descriptions do
+ local boundingbox=description.boundingbox
+ if boundingbox then
+ description.boundingbox=pack_indexed(boundingbox)
+ end
+ local math=description.math
+ if math then
+ local kerns=math.kerns
+ if kerns then
+ for tag,kern in next,kerns do
+ kerns[tag]=pack_normal(kern)
+ end
+ end
+ end
+ end
+ local function packthem(sequences)
+ for i=1,#sequences do
+ local sequence=sequences[i]
+ local kind=sequence.type
+ local steps=sequence.steps
+ local order=sequence.order
+ local features=sequence.features
+ local flags=sequence.flags
+ if steps then
+ for i=1,#steps do
+ local step=steps[i]
+ if kind=="gpos_pair" then
+ local c=step.coverage
+ if c then
+ if step.format=="kern" then
+ for g1,d1 in next,c do
+ c[g1]=pack_normal(d1)
+ end
+ else
+ for g1,d1 in next,c do
+ for g2,d2 in next,d1 do
+ local f=d2[1] if f then d2[1]=pack_indexed(f) end
+ local s=d2[2] if s then d2[2]=pack_indexed(s) end
+ end
+ end
+ end
+ end
+ elseif kind=="gpos_single" then
+ local c=step.coverage
+ if c then
+ if step.format=="kern" then
+ step.coverage=pack_normal(c)
+ else
+ for g1,d1 in next,c do
+ c[g1]=pack_indexed(d1)
+ end
+ end
+ end
+ elseif kind=="gpos_cursive" then
+ local c=step.coverage
+ if c then
+ for g1,d1 in next,c do
+ local f=d1[2] if f then d1[2]=pack_indexed(f) end
+ local s=d1[3] if s then d1[3]=pack_indexed(s) end
+ end
+ end
+ elseif kind=="gpos_mark2base" or kind=="gpos_mark2mark" then
+ local c=step.baseclasses
+ if c then
+ for g1,d1 in next,c do
+ for g2,d2 in next,d1 do
+ d1[g2]=pack_indexed(d2)
+ end
+ end
+ end
+ local c=step.coverage
+ if c then
+ for g1,d1 in next,c do
+ d1[2]=pack_indexed(d1[2])
+ end
+ end
+ elseif kind=="gpos_mark2ligature" then
+ local c=step.baseclasses
+ if c then
+ for g1,d1 in next,c do
+ for g2,d2 in next,d1 do
+ for g3,d3 in next,d2 do
+ d2[g3]=pack_indexed(d3)
+ end
+ end
+ end
+ end
+ local c=step.coverage
+ if c then
+ for g1,d1 in next,c do
+ d1[2]=pack_indexed(d1[2])
+ end
+ end
+ end
+ local rules=step.rules
+ if rules then
+ for i=1,#rules do
+ local rule=rules[i]
+ local r=rule.before if r then for i=1,#r do r[i]=pack_boolean(r[i]) end end
+ local r=rule.after if r then for i=1,#r do r[i]=pack_boolean(r[i]) end end
+ local r=rule.current if r then for i=1,#r do r[i]=pack_boolean(r[i]) end end
+ local r=rule.lookups if r then rule.lookups=pack_mixed (r) end
+ local r=rule.replacements if r then rule.replacements=pack_flat (r) end
+ end
+ end
+ end
+ end
+ if order then
+ sequence.order=pack_indexed(order)
+ end
+ if features then
+ for script,feature in next,features do
+ features[script]=pack_normal(feature)
+ end
+ end
+ if flags then
+ sequence.flags=pack_normal(flags)
+ end
+ end
+ end
+ if sequences then
+ packthem(sequences)
+ end
+ if sublookups then
+ packthem(sublookups)
+ end
+ if features then
+ for k,list in next,features do
+ for feature,spec in next,list do
+ list[feature]=pack_normal(spec)
+ end
+ end
+ end
+ if palettes then
+ for i=1,#palettes do
+ local p=palettes[i]
+ for j=1,#p do
+ p[j]=pack_indexed(p[j])
+ end
+ end
+ end
+ if not success(1,pass) then
+ return
+ end
+ end
+ if nt>0 then
+ for pass=1,2 do
+ if trace_packing then
+ report_otf("start packing: stage 2, pass %s",pass)
+ end
+ local pack_normal,pack_indexed,pack_flat,pack_boolean,pack_mixed=packers(pass)
+ for unicode,description in next,descriptions do
+ local math=description.math
+ if math then
+ local kerns=math.kerns
+ if kerns then
+ math.kerns=pack_normal(kerns)
+ end
+ end
+ end
+ local function packthem(sequences)
+ for i=1,#sequences do
+ local sequence=sequences[i]
+ local kind=sequence.type
+ local steps=sequence.steps
+ local features=sequence.features
+ if steps then
+ for i=1,#steps do
+ local step=steps[i]
+ if kind=="gpos_pair" then
+ local c=step.coverage
+ if c then
+ if step.format=="kern" then
+ else
+ for g1,d1 in next,c do
+ for g2,d2 in next,d1 do
+ d1[g2]=pack_normal(d2)
+ end
+ end
+ end
+ end
+ end
+ local rules=step.rules
+ if rules then
+ for i=1,#rules do
+ local rule=rules[i]
+ local r=rule.before if r then rule.before=pack_normal(r) end
+ local r=rule.after if r then rule.after=pack_normal(r) end
+ local r=rule.current if r then rule.current=pack_normal(r) end
+ end
+ end
+ end
+ end
+ if features then
+ sequence.features=pack_normal(features)
+ end
+ end
+ end
+ if sequences then
+ packthem(sequences)
+ end
+ if sublookups then
+ packthem(sublookups)
+ end
+ if not success(2,pass) then
+ end
+ end
+ for pass=1,2 do
+ if trace_packing then
+ report_otf("start packing: stage 3, pass %s",pass)
+ end
+ local pack_normal,pack_indexed,pack_flat,pack_boolean,pack_mixed=packers(pass)
+ local function packthem(sequences)
+ for i=1,#sequences do
+ local sequence=sequences[i]
+ local kind=sequence.type
+ local steps=sequence.steps
+ local features=sequence.features
+ if steps then
+ for i=1,#steps do
+ local step=steps[i]
+ if kind=="gpos_pair" then
+ local c=step.coverage
+ if c then
+ if step.format=="kern" then
+ else
+ for g1,d1 in next,c do
+ c[g1]=pack_normal(d1)
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ if sequences then
+ packthem(sequences)
+ end
+ if sublookups then
+ packthem(sublookups)
+ end
+ end
+ end
+ end
+end
+local unpacked_mt={
+ __index=function(t,k)
+ t[k]=false
+ return k
+ end
+}
+function readers.unpack(data)
+ if data then
+ local tables=data.tables
+ if tables then
+ local resources=data.resources
+ local descriptions=data.descriptions or data.glyphs
+ local sequences=resources.sequences
+ local sublookups=resources.sublookups
+ local features=resources.features
+ local palettes=resources.colorpalettes
+ local unpacked={}
+ setmetatable(unpacked,unpacked_mt)
+ for unicode,description in next,descriptions do
+ local tv=tables[description.boundingbox]
+ if tv then
+ description.boundingbox=tv
+ end
+ local math=description.math
+ if math then
+ local kerns=math.kerns
+ if kerns then
+ local tm=tables[kerns]
+ if tm then
+ math.kerns=tm
+ kerns=unpacked[tm]
+ end
+ if kerns then
+ for k,kern in next,kerns do
+ local tv=tables[kern]
+ if tv then
+ kerns[k]=tv
+ end
+ end
+ end
+ end
+ end
+ end
+ local function unpackthem(sequences)
+ for i=1,#sequences do
+ local sequence=sequences[i]
+ local kind=sequence.type
+ local steps=sequence.steps
+ local order=sequence.order
+ local features=sequence.features
+ local flags=sequence.flags
+ local markclass=sequence.markclass
+ if steps then
+ for i=1,#steps do
+ local step=steps[i]
+ if kind=="gpos_pair" then
+ local c=step.coverage
+ if c then
+ if step.format=="kern" then
+ for g1,d1 in next,c do
+ local tv=tables[d1]
+ if tv then
+ c[g1]=tv
+ end
+ end
+ else
+ for g1,d1 in next,c do
+ local tv=tables[d1]
+ if tv then
+ c[g1]=tv
+ d1=tv
+ end
+ for g2,d2 in next,d1 do
+ local tv=tables[d2]
+ if tv then
+ d1[g2]=tv
+ d2=tv
+ end
+ local f=tables[d2[1]] if f then d2[1]=f end
+ local s=tables[d2[2]] if s then d2[2]=s end
+ end
+ end
+ end
+ end
+ elseif kind=="gpos_single" then
+ local c=step.coverage
+ if c then
+ if step.format=="kern" then
+ local tv=tables[c]
+ if tv then
+ step.coverage=tv
+ end
+ else
+ for g1,d1 in next,c do
+ local tv=tables[d1]
+ if tv then
+ c[g1]=tv
+ end
+ end
+ end
+ end
+ elseif kind=="gpos_cursive" then
+ local c=step.coverage
+ if c then
+ for g1,d1 in next,c do
+ local f=tables[d1[2]] if f then d1[2]=f end
+ local s=tables[d1[3]] if s then d1[3]=s end
+ end
+ end
+ elseif kind=="gpos_mark2base" or kind=="gpos_mark2mark" then
+ local c=step.baseclasses
+ if c then
+ for g1,d1 in next,c do
+ for g2,d2 in next,d1 do
+ local tv=tables[d2]
+ if tv then
+ d1[g2]=tv
+ end
+ end
+ end
+ end
+ local c=step.coverage
+ if c then
+ for g1,d1 in next,c do
+ local tv=tables[d1[2]]
+ if tv then
+ d1[2]=tv
+ end
+ end
+ end
+ elseif kind=="gpos_mark2ligature" then
+ local c=step.baseclasses
+ if c then
+ for g1,d1 in next,c do
+ for g2,d2 in next,d1 do
+ for g3,d3 in next,d2 do
+ local tv=tables[d2[g3]]
+ if tv then
+ d2[g3]=tv
+ end
+ end
+ end
+ end
+ end
+ local c=step.coverage
+ if c then
+ for g1,d1 in next,c do
+ local tv=tables[d1[2]]
+ if tv then
+ d1[2]=tv
+ end
+ end
+ end
+ end
+ local rules=step.rules
+ if rules then
+ for i=1,#rules do
+ local rule=rules[i]
+ local before=rule.before
+ if before then
+ local tv=tables[before]
+ if tv then
+ rule.before=tv
+ before=tv
+ end
+ for i=1,#before do
+ local tv=tables[before[i]]
+ if tv then
+ before[i]=tv
+ end
+ end
+ end
+ local after=rule.after
+ if after then
+ local tv=tables[after]
+ if tv then
+ rule.after=tv
+ after=tv
+ end
+ for i=1,#after do
+ local tv=tables[after[i]]
+ if tv then
+ after[i]=tv
+ end
+ end
+ end
+ local current=rule.current
+ if current then
+ local tv=tables[current]
+ if tv then
+ rule.current=tv
+ current=tv
+ end
+ for i=1,#current do
+ local tv=tables[current[i]]
+ if tv then
+ current[i]=tv
+ end
+ end
+ end
+ local lookups=rule.lookups
+ if lookups then
+ local tv=tables[lookups]
+ if tv then
+ rule.lookups=tv
+ end
+ end
+ local replacements=rule.replacements
+ if replacements then
+ local tv=tables[replacements]
+ if tv then
+ rule.replacements=tv
+ end
+ end
+ end
+ end
+ end
+ end
+ if features then
+ local tv=tables[features]
+ if tv then
+ sequence.features=tv
+ features=tv
+ end
+ for script,feature in next,features do
+ local tv=tables[feature]
+ if tv then
+ features[script]=tv
+ end
+ end
+ end
+ if order then
+ local tv=tables[order]
+ if tv then
+ sequence.order=tv
+ end
+ end
+ if flags then
+ local tv=tables[flags]
+ if tv then
+ sequence.flags=tv
+ end
+ end
+ end
+ end
+ if sequences then
+ unpackthem(sequences)
+ end
+ if sublookups then
+ unpackthem(sublookups)
+ end
+ if features then
+ for k,list in next,features do
+ for feature,spec in next,list do
+ local tv=tables[spec]
+ if tv then
+ list[feature]=tv
+ end
+ end
+ end
+ end
+ if palettes then
+ for i=1,#palettes do
+ local p=palettes[i]
+ for j=1,#p do
+ local tv=tables[p[j]]
+ if tv then
+ p[j]=tv
+ end
+ end
+ end
+ end
+ data.tables=nil
+ end
+ end
+end
+local mt={
+ __index=function(t,k)
+ if k=="height" then
+ local ht=t.boundingbox[4]
+ return ht<0 and 0 or ht
+ elseif k=="depth" then
+ local dp=-t.boundingbox[2]
+ return dp<0 and 0 or dp
+ elseif k=="width" then
+ return 0
+ elseif k=="name" then
+ return forcenotdef and ".notdef"
+ end
+ end
+}
+local function sameformat(sequence,steps,first,nofsteps,kind)
+ return true
+end
+local function mergesteps_1(lookup,strict)
+ local steps=lookup.steps
+ local nofsteps=lookup.nofsteps
+ local first=steps[1]
+ if strict then
+ local f=first.format
+ for i=2,nofsteps do
+ if steps[i].format~=f then
+ report("not merging %a steps of %a lookup %a, different formats",nofsteps,lookup.type,lookup.name)
+ return 0
+ end
+ end
+ end
+ report("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ local target=first.coverage
+ for i=2,nofsteps do
+ for k,v in next,steps[i].coverage do
+ if not target[k] then
+ target[k]=v
+ end
+ end
+ end
+ lookup.nofsteps=1
+ lookup.merged=true
+ lookup.steps={ first }
+ return nofsteps-1
+end
+local function mergesteps_2(lookup,strict)
+ local steps=lookup.steps
+ local nofsteps=lookup.nofsteps
+ local first=steps[1]
+ if strict then
+ local f=first.format
+ for i=2,nofsteps do
+ if steps[i].format~=f then
+ report("not merging %a steps of %a lookup %a, different formats",nofsteps,lookup.type,lookup.name)
+ return 0
+ end
+ end
+ end
+ report("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ local target=first.coverage
+ for i=2,nofsteps do
+ for k,v in next,steps[i].coverage do
+ local tk=target[k]
+ if tk then
+ for k,v in next,v do
+ if not tk[k] then
+ tk[k]=v
+ end
+ end
+ else
+ target[k]=v
+ end
+ end
+ end
+ lookup.nofsteps=1
+ lookup.steps={ first }
+ return nofsteps-1
+end
+local function mergesteps_3(lookup,strict)
+ local steps=lookup.steps
+ local nofsteps=lookup.nofsteps
+ local first=steps[1]
+ report("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ local baseclasses={}
+ local coverage={}
+ local used={}
+ for i=1,nofsteps do
+ local offset=i*10
+ local step=steps[i]
+ for k,v in sortedhash(step.baseclasses) do
+ baseclasses[offset+k]=v
+ end
+ for k,v in next,step.coverage do
+ local tk=coverage[k]
+ if tk then
+ for k,v in next,v do
+ if not tk[k] then
+ tk[k]=v
+ local c=offset+v[1]
+ v[1]=c
+ if not used[c] then
+ used[c]=true
+ end
+ end
+ end
+ else
+ coverage[k]=v
+ local c=offset+v[1]
+ v[1]=c
+ if not used[c] then
+ used[c]=true
+ end
+ end
+ end
+ end
+ for k,v in next,baseclasses do
+ if not used[k] then
+ baseclasses[k]=nil
+ report("discarding not used baseclass %i",k)
+ end
+ end
+ first.baseclasses=baseclasses
+ first.coverage=coverage
+ lookup.nofsteps=1
+ lookup.steps={ first }
+ return nofsteps-1
+end
+local function nested(old,new)
+ for k,v in next,old do
+ if k=="ligature" then
+ if not new.ligature then
+ new.ligature=v
+ end
+ else
+ local n=new[k]
+ if n then
+ nested(v,n)
+ else
+ new[k]=v
+ end
+ end
+ end
+end
+local function mergesteps_4(lookup)
+ local steps=lookup.steps
+ local nofsteps=lookup.nofsteps
+ local first=steps[1]
+ report("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ local target=first.coverage
+ for i=2,nofsteps do
+ for k,v in next,steps[i].coverage do
+ local tk=target[k]
+ if tk then
+ nested(v,tk)
+ else
+ target[k]=v
+ end
+ end
+ end
+ lookup.nofsteps=1
+ lookup.steps={ first }
+ return nofsteps-1
+end
+local function checkkerns(lookup)
+ local steps=lookup.steps
+ local nofsteps=lookup.nofsteps
+ for i=1,nofsteps do
+ local step=steps[i]
+ if step.format=="pair" then
+ local coverage=step.coverage
+ local kerns=true
+ for g1,d1 in next,coverage do
+ if d1[1]~=0 or d1[2]~=0 or d1[4]~=0 then
+ kerns=false
+ break
+ end
+ end
+ if kerns then
+ report("turning pairs of step %a of %a lookup %a into kerns",i,lookup.type,lookup.name)
+ for g1,d1 in next,coverage do
+ coverage[g1]=d1[3]
+ end
+ step.format="kern"
+ end
+ end
+ end
+end
+local function checkpairs(lookup)
+ local steps=lookup.steps
+ local nofsteps=lookup.nofsteps
+ local kerned=0
+ for i=1,nofsteps do
+ local step=steps[i]
+ if step.format=="pair" then
+ local coverage=step.coverage
+ local kerns=true
+ for g1,d1 in next,coverage do
+ for g2,d2 in next,d1 do
+ if d2[2] then
+ kerns=false
+ break
+ else
+ local v=d2[1]
+ if v[1]~=0 or v[2]~=0 or v[4]~=0 then
+ kerns=false
+ break
+ end
+ end
+ end
+ end
+ if kerns then
+ report("turning pairs of step %a of %a lookup %a into kerns",i,lookup.type,lookup.name)
+ for g1,d1 in next,coverage do
+ for g2,d2 in next,d1 do
+ d1[g2]=d2[1][3]
+ end
+ end
+ step.format="kern"
+ kerned=kerned+1
+ end
+ end
+ end
+ return kerned
+end
+function readers.compact(data)
+ if not data or data.compacted then
+ return
+ else
+ data.compacted=true
+ end
+ local resources=data.resources
+ local merged=0
+ local kerned=0
+ local allsteps=0
+ local function compact(what)
+ local lookups=resources[what]
+ if lookups then
+ for i=1,#lookups do
+ local lookup=lookups[i]
+ local nofsteps=lookup.nofsteps
+ allsteps=allsteps+nofsteps
+ if nofsteps>1 then
+ local kind=lookup.type
+ if kind=="gsub_single" or kind=="gsub_alternate" or kind=="gsub_multiple" then
+ merged=merged+mergesteps_1(lookup)
+ elseif kind=="gsub_ligature" then
+ merged=merged+mergesteps_4(lookup)
+ elseif kind=="gpos_single" then
+ merged=merged+mergesteps_1(lookup,true)
+ checkkerns(lookup)
+ elseif kind=="gpos_pair" then
+ merged=merged+mergesteps_2(lookup,true)
+ kerned=kerned+checkpairs(lookup)
+ elseif kind=="gpos_cursive" then
+ merged=merged+mergesteps_2(lookup)
+ elseif kind=="gpos_mark2mark" or kind=="gpos_mark2base" or kind=="gpos_mark2ligature" then
+ merged=merged+mergesteps_3(lookup)
+ end
+ end
+ end
+ else
+ report("no lookups in %a",what)
+ end
+ end
+ compact("sequences")
+ compact("sublookups")
+ if merged>0 then
+ report("%i steps of %i removed due to merging",merged,allsteps)
+ end
+ if kerned>0 then
+ report("%i steps of %i steps turned from pairs into kerns",kerned,allsteps)
+ end
+end
+function readers.expand(data)
+ if not data or data.expanded then
+ return
+ else
+ data.expanded=true
+ end
+ local resources=data.resources
+ local sublookups=resources.sublookups
+ local sequences=resources.sequences
+ local markclasses=resources.markclasses
+ local descriptions=data.descriptions
+ if descriptions then
+ local defaultwidth=resources.defaultwidth or 0
+ local defaultheight=resources.defaultheight or 0
+ local defaultdepth=resources.defaultdepth or 0
+ local basename=trace_markwidth and file.basename(resources.filename)
+ for u,d in next,descriptions do
+ local bb=d.boundingbox
+ local wd=d.width
+ if not wd then
+ d.width=defaultwidth
+ elseif trace_markwidth and wd~=0 and d.class=="mark" then
+ report("mark %a with width %b found in %a",d.name or "<noname>",wd,basename)
+ end
+ if bb then
+ local ht=bb[4]
+ local dp=-bb[2]
+ if ht==0 or ht<0 then
+ else
+ d.height=ht
+ end
+ if dp==0 or dp<0 then
+ else
+ d.depth=dp
+ end
+ end
+ end
+ end
+ local function expandlookups(sequences)
+ if sequences then
+ for i=1,#sequences do
+ local sequence=sequences[i]
+ local steps=sequence.steps
+ if steps then
+ local kind=sequence.type
+ local markclass=sequence.markclass
+ if markclass then
+ if not markclasses then
+ report_warning("missing markclasses")
+ sequence.markclass=false
+ else
+ sequence.markclass=markclasses[markclass]
+ end
+ end
+ for i=1,sequence.nofsteps do
+ local step=steps[i]
+ local baseclasses=step.baseclasses
+ if baseclasses then
+ local coverage=step.coverage
+ for k,v in next,coverage do
+ v[1]=baseclasses[v[1]]
+ end
+ elseif kind=="gpos_cursive" then
+ local coverage=step.coverage
+ for k,v in next,coverage do
+ v[1]=coverage
+ end
+ end
+ local rules=step.rules
+ if rules then
+ local rulehash={}
+ local rulesize=0
+ local coverage={}
+ local lookuptype=sequence.type
+ step.coverage=coverage
+ for nofrules=1,#rules do
+ local rule=rules[nofrules]
+ local current=rule.current
+ local before=rule.before
+ local after=rule.after
+ local replacements=rule.replacements or false
+ local sequence={}
+ local nofsequences=0
+ if before then
+ for n=1,#before do
+ nofsequences=nofsequences+1
+ sequence[nofsequences]=before[n]
+ end
+ end
+ local start=nofsequences+1
+ for n=1,#current do
+ nofsequences=nofsequences+1
+ sequence[nofsequences]=current[n]
+ end
+ local stop=nofsequences
+ if after then
+ for n=1,#after do
+ nofsequences=nofsequences+1
+ sequence[nofsequences]=after[n]
+ end
+ end
+ local lookups=rule.lookups or false
+ local subtype=nil
+ if lookups then
+ for k,v in next,lookups do
+ local lookup=sublookups[v]
+ if lookup then
+ lookups[k]=lookup
+ if not subtype then
+ subtype=lookup.type
+ end
+ else
+ end
+ end
+ end
+ if sequence[1] then
+ rulesize=rulesize+1
+ rulehash[rulesize]={
+ nofrules,
+ lookuptype,
+ sequence,
+ start,
+ stop,
+ lookups,
+ replacements,
+ subtype,
+ }
+ for unic in next,sequence[start] do
+ local cu=coverage[unic]
+ if not cu then
+ coverage[unic]=rulehash
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ expandlookups(sequences)
+ expandlookups(sublookups)
+end
+
+end --- [luaotfload, fontloader-2017-02-11.lua scope for “font-oupâ€] ---
+
+
+do --- [luaotfload, fontloader-2017-02-11.lua scope for “font-otl†2e7c8d9a331c46826211bd507f8e488a] ---
+
+if not modules then modules={} end modules ['font-otl']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files",
+}
+local gmatch,find,match,lower,strip=string.gmatch,string.find,string.match,string.lower,string.strip
+local type,next,tonumber,tostring,unpack=type,next,tonumber,tostring,unpack
+local abs=math.abs
+local derivetable=table.derive
+local formatters=string.formatters
+local setmetatableindex=table.setmetatableindex
+local allocate=utilities.storage.allocate
+local registertracker=trackers.register
+local registerdirective=directives.register
+local starttiming=statistics.starttiming
+local stoptiming=statistics.stoptiming
+local elapsedtime=statistics.elapsedtime
+local findbinfile=resolvers.findbinfile
+local trace_loading=false registertracker("otf.loading",function(v) trace_loading=v end)
+local trace_features=false registertracker("otf.features",function(v) trace_features=v end)
+local trace_defining=false registertracker("fonts.defining",function(v) trace_defining=v end)
+local report_otf=logs.reporter("fonts","otf loading")
+local fonts=fonts
+local otf=fonts.handlers.otf
+otf.version=3.027
+otf.cache=containers.define("fonts","otl",otf.version,true)
+otf.svgcache=containers.define("fonts","svg",otf.version,true)
+otf.pdfcache=containers.define("fonts","pdf",otf.version,true)
+otf.svgenabled=false
+local otfreaders=otf.readers
+local hashes=fonts.hashes
+local definers=fonts.definers
+local readers=fonts.readers
+local constructors=fonts.constructors
+local otffeatures=constructors.features.otf
+local registerotffeature=otffeatures.register
+local otfenhancers=constructors.enhancers.otf
+local registerotfenhancer=otfenhancers.register
+local forceload=false
+local cleanup=0
+local syncspace=true
+local forcenotdef=false
+local applyruntimefixes=fonts.treatments and fonts.treatments.applyfixes
+local wildcard="*"
+local default="dflt"
+local formats=fonts.formats
+formats.otf="opentype"
+formats.ttf="truetype"
+formats.ttc="truetype"
+registerdirective("fonts.otf.loader.cleanup",function(v) cleanup=tonumber(v) or (v and 1) or 0 end)
+registerdirective("fonts.otf.loader.force",function(v) forceload=v end)
+registerdirective("fonts.otf.loader.syncspace",function(v) syncspace=v end)
+registerdirective("fonts.otf.loader.forcenotdef",function(v) forcenotdef=v end)
+registerotfenhancer("check extra features",function() end)
+function otf.load(filename,sub,featurefile)
+ local featurefile=nil
+ local base=file.basename(file.removesuffix(filename))
+ local name=file.removesuffix(base)
+ local attr=lfs.attributes(filename)
+ local size=attr and attr.size or 0
+ local time=attr and attr.modification or 0
+ if featurefile then
+ name=name.."@"..file.removesuffix(file.basename(featurefile))
+ end
+ if sub=="" then
+ sub=false
+ end
+ local hash=name
+ if sub then
+ hash=hash.."-"..sub
+ end
+ hash=containers.cleanname(hash)
+ local featurefiles
+ if featurefile then
+ featurefiles={}
+ for s in gmatch(featurefile,"[^,]+") do
+ local name=resolvers.findfile(file.addsuffix(s,'fea'),'fea') or ""
+ if name=="" then
+ report_otf("loading error, no featurefile %a",s)
+ else
+ local attr=lfs.attributes(name)
+ featurefiles[#featurefiles+1]={
+ name=name,
+ size=attr and attr.size or 0,
+ time=attr and attr.modification or 0,
+ }
+ end
+ end
+ if #featurefiles==0 then
+ featurefiles=nil
+ end
+ end
+ local data=containers.read(otf.cache,hash)
+ local reload=not data or data.size~=size or data.time~=time or data.tableversion~=otfreaders.tableversion
+ if forceload then
+ report_otf("forced reload of %a due to hard coded flag",filename)
+ reload=true
+ end
+ if reload then
+ report_otf("loading %a, hash %a",filename,hash)
+ starttiming(otfreaders)
+ data=otfreaders.loadfont(filename,sub or 1)
+ if data then
+ local resources=data.resources
+ local svgshapes=resources.svgshapes
+ if svgshapes then
+ resources.svgshapes=nil
+ if otf.svgenabled then
+ local timestamp=os.date()
+ containers.write(otf.svgcache,hash,{
+ svgshapes=svgshapes,
+ timestamp=timestamp,
+ })
+ data.properties.svg={
+ hash=hash,
+ timestamp=timestamp,
+ }
+ end
+ end
+ otfreaders.compact(data)
+ otfreaders.rehash(data,"unicodes")
+ otfreaders.addunicodetable(data)
+ otfreaders.extend(data)
+ otfreaders.pack(data)
+ report_otf("loading done")
+ report_otf("saving %a in cache",filename)
+ data=containers.write(otf.cache,hash,data)
+ if cleanup>1 then
+ collectgarbage("collect")
+ end
+ stoptiming(otfreaders)
+ if elapsedtime then
+ report_otf("loading, optimizing, packing and caching time %s",elapsedtime(otfreaders))
+ end
+ if cleanup>3 then
+ collectgarbage("collect")
+ end
+ data=containers.read(otf.cache,hash)
+ if cleanup>2 then
+ collectgarbage("collect")
+ end
+ else
+ data=nil
+ report_otf("loading failed due to read error")
+ end
+ end
+ if data then
+ if trace_defining then
+ report_otf("loading from cache using hash %a",hash)
+ end
+ otfreaders.unpack(data)
+ otfreaders.expand(data)
+ otfreaders.addunicodetable(data)
+ otfenhancers.apply(data,filename,data)
+ if applyruntimefixes then
+ applyruntimefixes(filename,data)
+ end
+ data.metadata.math=data.resources.mathconstants
+ end
+ return data
+end
+function otf.setfeatures(tfmdata,features)
+ local okay=constructors.initializefeatures("otf",tfmdata,features,trace_features,report_otf)
+ if okay then
+ return constructors.collectprocessors("otf",tfmdata,features,trace_features,report_otf)
+ else
+ return {}
+ end
+end
+local function copytotfm(data,cache_id)
+ if data then
+ local metadata=data.metadata
+ local properties=derivetable(data.properties)
+ local descriptions=derivetable(data.descriptions)
+ local goodies=derivetable(data.goodies)
+ local characters={}
+ local parameters={}
+ local mathparameters={}
+ local resources=data.resources
+ local unicodes=resources.unicodes
+ local spaceunits=500
+ local spacer="space"
+ local designsize=metadata.designsize or 100
+ local minsize=metadata.minsize or designsize
+ local maxsize=metadata.maxsize or designsize
+ local mathspecs=metadata.math
+ if designsize==0 then
+ designsize=100
+ minsize=100
+ maxsize=100
+ end
+ if mathspecs then
+ for name,value in next,mathspecs do
+ mathparameters[name]=value
+ end
+ end
+ for unicode in next,data.descriptions do
+ characters[unicode]={}
+ end
+ if mathspecs then
+ for unicode,character in next,characters do
+ local d=descriptions[unicode]
+ local m=d.math
+ if m then
+ local italic=m.italic
+ local vitalic=m.vitalic
+ local variants=m.hvariants
+ local parts=m.hparts
+ if variants then
+ local c=character
+ for i=1,#variants do
+ local un=variants[i]
+ c.next=un
+ c=characters[un]
+ end
+ c.horiz_variants=parts
+ elseif parts then
+ character.horiz_variants=parts
+ italic=m.hitalic
+ end
+ local variants=m.vvariants
+ local parts=m.vparts
+ if variants then
+ local c=character
+ for i=1,#variants do
+ local un=variants[i]
+ c.next=un
+ c=characters[un]
+ end
+ c.vert_variants=parts
+ elseif parts then
+ character.vert_variants=parts
+ end
+ if italic and italic~=0 then
+ character.italic=italic
+ end
+ if vitalic and vitalic~=0 then
+ character.vert_italic=vitalic
+ end
+ local accent=m.accent
+ if accent then
+ character.accent=accent
+ end
+ local kerns=m.kerns
+ if kerns then
+ character.mathkerns=kerns
+ end
+ end
+ end
+ end
+ local filename=constructors.checkedfilename(resources)
+ local fontname=metadata.fontname
+ local fullname=metadata.fullname or fontname
+ local psname=fontname or fullname
+ local units=metadata.units or 1000
+ if units==0 then
+ units=1000
+ metadata.units=1000
+ report_otf("changing %a units to %a",0,units)
+ end
+ local monospaced=metadata.monospaced
+ local charwidth=metadata.averagewidth
+ local charxheight=metadata.xheight
+ local italicangle=metadata.italicangle
+ local hasitalics=metadata.hasitalics
+ properties.monospaced=monospaced
+ properties.hasitalics=hasitalics
+ parameters.italicangle=italicangle
+ parameters.charwidth=charwidth
+ parameters.charxheight=charxheight
+ local space=0x0020
+ local emdash=0x2014
+ if monospaced then
+ if descriptions[space] then
+ spaceunits,spacer=descriptions[space].width,"space"
+ end
+ if not spaceunits and descriptions[emdash] then
+ spaceunits,spacer=descriptions[emdash].width,"emdash"
+ end
+ if not spaceunits and charwidth then
+ spaceunits,spacer=charwidth,"charwidth"
+ end
+ else
+ if descriptions[space] then
+ spaceunits,spacer=descriptions[space].width,"space"
+ end
+ if not spaceunits and descriptions[emdash] then
+ spaceunits,spacer=descriptions[emdash].width/2,"emdash/2"
+ end
+ if not spaceunits and charwidth then
+ spaceunits,spacer=charwidth,"charwidth"
+ end
+ end
+ spaceunits=tonumber(spaceunits) or units/2
+ parameters.slant=0
+ parameters.space=spaceunits
+ parameters.space_stretch=1*units/2
+ parameters.space_shrink=1*units/3
+ parameters.x_height=2*units/5
+ parameters.quad=units
+ if spaceunits<2*units/5 then
+ end
+ if italicangle and italicangle~=0 then
+ parameters.italicangle=italicangle
+ parameters.italicfactor=math.cos(math.rad(90+italicangle))
+ parameters.slant=- math.tan(italicangle*math.pi/180)
+ end
+ if monospaced then
+ parameters.space_stretch=0
+ parameters.space_shrink=0
+ elseif syncspace then
+ parameters.space_stretch=spaceunits/2
+ parameters.space_shrink=spaceunits/3
+ end
+ parameters.extra_space=parameters.space_shrink
+ if charxheight then
+ parameters.x_height=charxheight
+ else
+ local x=0x0078
+ if x then
+ local x=descriptions[x]
+ if x then
+ parameters.x_height=x.height
+ end
+ end
+ end
+ parameters.designsize=(designsize/10)*65536
+ parameters.minsize=(minsize/10)*65536
+ parameters.maxsize=(maxsize/10)*65536
+ parameters.ascender=abs(metadata.ascender or 0)
+ parameters.descender=abs(metadata.descender or 0)
+ parameters.units=units
+ properties.space=spacer
+ properties.encodingbytes=2
+ properties.format=data.format or formats.otf
+ properties.noglyphnames=true
+ properties.filename=filename
+ properties.fontname=fontname
+ properties.fullname=fullname
+ properties.psname=psname
+ properties.name=filename or fullname
+ return {
+ characters=characters,
+ descriptions=descriptions,
+ parameters=parameters,
+ mathparameters=mathparameters,
+ resources=resources,
+ properties=properties,
+ goodies=goodies,
+ }
+ end
+end
+local converters={
+ woff={
+ cachename="webfonts",
+ action=otf.readers.woff2otf,
+ }
+}
+local function checkconversion(specification)
+ local filename=specification.filename
+ local converter=converters[lower(file.suffix(filename))]
+ if converter then
+ local base=file.basename(filename)
+ local name=file.removesuffix(base)
+ local attr=lfs.attributes(filename)
+ local size=attr and attr.size or 0
+ local time=attr and attr.modification or 0
+ if size>0 then
+ local cleanname=containers.cleanname(name)
+ local cachename=caches.setfirstwritablefile(cleanname,converter.cachename)
+ if not io.exists(cachename) or (time~=lfs.attributes(cachename).modification) then
+ report_otf("caching font %a in %a",filename,cachename)
+ converter.action(filename,cachename)
+ lfs.touch(cachename,time,time)
+ end
+ specification.filename=cachename
+ end
+ end
+end
+local function otftotfm(specification)
+ local cache_id=specification.hash
+ local tfmdata=containers.read(constructors.cache,cache_id)
+ if not tfmdata then
+ checkconversion(specification)
+ local name=specification.name
+ local sub=specification.sub
+ local subindex=specification.subindex
+ local filename=specification.filename
+ local features=specification.features.normal
+ local rawdata=otf.load(filename,sub,features and features.featurefile)
+ if rawdata and next(rawdata) then
+ local descriptions=rawdata.descriptions
+ rawdata.lookuphash={}
+ tfmdata=copytotfm(rawdata,cache_id)
+ if tfmdata and next(tfmdata) then
+ local features=constructors.checkedfeatures("otf",features)
+ local shared=tfmdata.shared
+ if not shared then
+ shared={}
+ tfmdata.shared=shared
+ end
+ shared.rawdata=rawdata
+ shared.dynamics={}
+ tfmdata.changed={}
+ shared.features=features
+ shared.processes=otf.setfeatures(tfmdata,features)
+ end
+ end
+ containers.write(constructors.cache,cache_id,tfmdata)
+ end
+ return tfmdata
+end
+local function read_from_otf(specification)
+ local tfmdata=otftotfm(specification)
+ if tfmdata then
+ tfmdata.properties.name=specification.name
+ tfmdata.properties.sub=specification.sub
+ tfmdata=constructors.scale(tfmdata,specification)
+ local allfeatures=tfmdata.shared.features or specification.features.normal
+ constructors.applymanipulators("otf",tfmdata,allfeatures,trace_features,report_otf)
+ constructors.setname(tfmdata,specification)
+ fonts.loggers.register(tfmdata,file.suffix(specification.filename),specification)
+ end
+ return tfmdata
+end
+local function checkmathsize(tfmdata,mathsize)
+ local mathdata=tfmdata.shared.rawdata.metadata.math
+ local mathsize=tonumber(mathsize)
+ if mathdata then
+ local parameters=tfmdata.parameters
+ parameters.scriptpercentage=mathdata.ScriptPercentScaleDown
+ parameters.scriptscriptpercentage=mathdata.ScriptScriptPercentScaleDown
+ parameters.mathsize=mathsize
+ end
+end
+registerotffeature {
+ name="mathsize",
+ description="apply mathsize specified in the font",
+ initializers={
+ base=checkmathsize,
+ node=checkmathsize,
+ }
+}
+function otf.collectlookups(rawdata,kind,script,language)
+ if not kind then
+ return
+ end
+ if not script then
+ script=default
+ end
+ if not language then
+ language=default
+ end
+ local lookupcache=rawdata.lookupcache
+ if not lookupcache then
+ lookupcache={}
+ rawdata.lookupcache=lookupcache
+ end
+ local kindlookup=lookupcache[kind]
+ if not kindlookup then
+ kindlookup={}
+ lookupcache[kind]=kindlookup
+ end
+ local scriptlookup=kindlookup[script]
+ if not scriptlookup then
+ scriptlookup={}
+ kindlookup[script]=scriptlookup
+ end
+ local languagelookup=scriptlookup[language]
+ if not languagelookup then
+ local sequences=rawdata.resources.sequences
+ local featuremap={}
+ local featurelist={}
+ if sequences then
+ for s=1,#sequences do
+ local sequence=sequences[s]
+ local features=sequence.features
+ if features then
+ features=features[kind]
+ if features then
+ features=features[script] or features[wildcard]
+ if features then
+ features=features[language] or features[wildcard]
+ if features then
+ if not featuremap[sequence] then
+ featuremap[sequence]=true
+ featurelist[#featurelist+1]=sequence
+ end
+ end
+ end
+ end
+ end
+ end
+ if #featurelist==0 then
+ featuremap,featurelist=false,false
+ end
+ else
+ featuremap,featurelist=false,false
+ end
+ languagelookup={ featuremap,featurelist }
+ scriptlookup[language]=languagelookup
+ end
+ return unpack(languagelookup)
+end
+local function getgsub(tfmdata,k,kind,value)
+ local shared=tfmdata.shared
+ local rawdata=shared and shared.rawdata
+ if rawdata then
+ local sequences=rawdata.resources.sequences
+ if sequences then
+ local properties=tfmdata.properties
+ local validlookups,lookuplist=otf.collectlookups(rawdata,kind,properties.script,properties.language)
+ if validlookups then
+ for i=1,#lookuplist do
+ local lookup=lookuplist[i]
+ local steps=lookup.steps
+ local nofsteps=lookup.nofsteps
+ for i=1,nofsteps do
+ local coverage=steps[i].coverage
+ if coverage then
+ local found=coverage[k]
+ if found then
+ return found,lookup.type
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+end
+otf.getgsub=getgsub
+function otf.getsubstitution(tfmdata,k,kind,value)
+ local found,kind=getgsub(tfmdata,k,kind,value)
+ if not found then
+ elseif kind=="gsub_single" then
+ return found
+ elseif kind=="gsub_alternate" then
+ local choice=tonumber(value) or 1
+ return found[choice] or found[1] or k
+ end
+ return k
+end
+otf.getalternate=otf.getsubstitution
+function otf.getmultiple(tfmdata,k,kind)
+ local found,kind=getgsub(tfmdata,k,kind)
+ if found and kind=="gsub_multiple" then
+ return found
+ end
+ return { k }
+end
+function otf.getkern(tfmdata,left,right,kind)
+ local kerns=getgsub(tfmdata,left,kind or "kern",true)
+ if kerns then
+ local found=kerns[right]
+ local kind=type(found)
+ if kind=="table" then
+ found=found[1][3]
+ elseif kind~="number" then
+ found=false
+ end
+ if found then
+ return found*tfmdata.parameters.factor
+ end
+ end
+ return 0
+end
+local function check_otf(forced,specification,suffix)
+ local name=specification.name
+ if forced then
+ name=specification.forcedname
+ end
+ local fullname=findbinfile(name,suffix) or ""
+ if fullname=="" then
+ fullname=fonts.names.getfilename(name,suffix) or ""
+ end
+ if fullname~="" and not fonts.names.ignoredfile(fullname) then
+ specification.filename=fullname
+ return read_from_otf(specification)
+ end
+end
+local function opentypereader(specification,suffix)
+ local forced=specification.forced or ""
+ if formats[forced] then
+ return check_otf(true,specification,forced)
+ else
+ return check_otf(false,specification,suffix)
+ end
+end
+readers.opentype=opentypereader
+function readers.otf(specification) return opentypereader(specification,"otf") end
+function readers.ttf(specification) return opentypereader(specification,"ttf") end
+function readers.ttc(specification) return opentypereader(specification,"ttf") end
+function readers.woff(specification)
+ checkconversion(specification)
+ opentypereader(specification,"")
+end
+function otf.scriptandlanguage(tfmdata,attr)
+ local properties=tfmdata.properties
+ return properties.script or "dflt",properties.language or "dflt"
+end
+local function justset(coverage,unicode,replacement)
+ coverage[unicode]=replacement
+end
+otf.coverup={
+ stepkey="steps",
+ actions={
+ chainsubstitution=justset,
+ chainposition=justset,
+ substitution=justset,
+ alternate=justset,
+ multiple=justset,
+ kern=justset,
+ pair=justset,
+ ligature=function(coverage,unicode,ligature)
+ local first=ligature[1]
+ local tree=coverage[first]
+ if not tree then
+ tree={}
+ coverage[first]=tree
+ end
+ for i=2,#ligature do
+ local l=ligature[i]
+ local t=tree[l]
+ if not t then
+ t={}
+ tree[l]=t
+ end
+ tree=t
+ end
+ tree.ligature=unicode
+ end,
+ },
+ register=function(coverage,featuretype,format)
+ return {
+ format=format,
+ coverage=coverage,
+ }
+ end
+}
+
+end --- [luaotfload, fontloader-2017-02-11.lua scope for “font-otlâ€] ---
+
+
+do --- [luaotfload, fontloader-2017-02-11.lua scope for “font-oto†5fbdd899624d4eef639f81b580afe9aa] ---
+
+if not modules then modules = { } end modules ['font-oto'] = { -- original tex
+ version = 1.001,
+ comment = "companion to font-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local concat, unpack = table.concat, table.unpack
+local insert, remove = table.insert, table.remove
+local format, gmatch, gsub, find, match, lower, strip = string.format, string.gmatch, string.gsub, string.find, string.match, string.lower, string.strip
+local type, next, tonumber, tostring, rawget = type, next, tonumber, tostring, rawget
+
+local trace_baseinit = false trackers.register("otf.baseinit", function(v) trace_baseinit = v end)
+local trace_singles = false trackers.register("otf.singles", function(v) trace_singles = v end)
+local trace_multiples = false trackers.register("otf.multiples", function(v) trace_multiples = v end)
+local trace_alternatives = false trackers.register("otf.alternatives", function(v) trace_alternatives = v end)
+local trace_ligatures = false trackers.register("otf.ligatures", function(v) trace_ligatures = v end)
+----- trace_ligatures_detail = false trackers.register("otf.ligatures.detail", function(v) trace_ligatures_detail = v end)
+local trace_kerns = false trackers.register("otf.kerns", function(v) trace_kerns = v end)
+local trace_preparing = false trackers.register("otf.preparing", function(v) trace_preparing = v end)
+
+local report_prepare = logs.reporter("fonts","otf prepare")
+
+local fonts = fonts
+local otf = fonts.handlers.otf
+
+local otffeatures = otf.features
+local registerotffeature = otffeatures.register
+
+otf.defaultbasealternate = "none" -- first last
+
+local wildcard = "*"
+local default = "dflt"
+
+local formatters = string.formatters
+local f_unicode = formatters["%U"]
+local f_uniname = formatters["%U (%s)"]
+local f_unilist = formatters["% t (% t)"]
+
+local function gref(descriptions,n)
+ if type(n) == "number" then
+ local name = descriptions[n].name
+ if name then
+ return f_uniname(n,name)
+ else
+ return f_unicode(n)
+ end
+ elseif n then
+ local num, nam, j = { }, { }, 0
+ for i=1,#n do
+ local ni = n[i]
+ if tonumber(ni) then -- first is likely a key
+ j = j + 1
+ local di = descriptions[ni]
+ num[j] = f_unicode(ni)
+ nam[j] = di and di.name or "-"
+ end
+ end
+ return f_unilist(num,nam)
+ else
+ return "<error in base mode tracing>"
+ end
+end
+
+local function cref(feature,sequence)
+ return formatters["feature %a, type %a, chain lookup %a"](feature,sequence.type,sequence.name)
+end
+
+local function report_substitution(feature,sequence,descriptions,unicode,substitution)
+ if unicode == substitution then
+ report_prepare("%s: base substitution %s maps onto itself",
+ cref(feature,sequence),
+ gref(descriptions,unicode))
+ else
+ report_prepare("%s: base substitution %s => %S",
+ cref(feature,sequence),
+ gref(descriptions,unicode),
+ gref(descriptions,substitution))
+ end
+end
+
+local function report_alternate(feature,sequence,descriptions,unicode,replacement,value,comment)
+ if unicode == replacement then
+ report_prepare("%s: base alternate %s maps onto itself",
+ cref(feature,sequence),
+ gref(descriptions,unicode))
+ else
+ report_prepare("%s: base alternate %s => %s (%S => %S)",
+ cref(feature,sequence),
+ gref(descriptions,unicode),
+ replacement and gref(descriptions,replacement),
+ value,
+ comment)
+ end
+end
+
+local function report_ligature(feature,sequence,descriptions,unicode,ligature)
+ report_prepare("%s: base ligature %s => %S",
+ cref(feature,sequence),
+ gref(descriptions,ligature),
+ gref(descriptions,unicode))
+end
+
+local function report_kern(feature,sequence,descriptions,unicode,otherunicode,value)
+ report_prepare("%s: base kern %s + %s => %S",
+ cref(feature,sequence),
+ gref(descriptions,unicode),
+ gref(descriptions,otherunicode),
+ value)
+end
+
+-- We need to make sure that luatex sees the difference between base fonts that have
+-- different glyphs in the same slots in fonts that have the same fullname (or filename).
+-- LuaTeX will merge fonts eventually (and subset later on). If needed we can use a more
+-- verbose name as long as we don't use <()<>[]{}/%> and the length is < 128.
+
+local basehash, basehashes, applied = { }, 1, { }
+
+local function registerbasehash(tfmdata)
+ local properties = tfmdata.properties
+ local hash = concat(applied," ")
+ local base = basehash[hash]
+ if not base then
+ basehashes = basehashes + 1
+ base = basehashes
+ basehash[hash] = base
+ end
+ properties.basehash = base
+ properties.fullname = (properties.fullname or properties.name) .. "-" .. base
+ -- report_prepare("fullname base hash '%a, featureset %a",tfmdata.properties.fullname,hash)
+ applied = { }
+end
+
+local function registerbasefeature(feature,value)
+ applied[#applied+1] = feature .. "=" .. tostring(value)
+end
+
+-- The original basemode ligature builder used the names of components and did some expression
+-- juggling to get the chain right. The current variant starts with unicodes but still uses
+-- names to make the chain. This is needed because we have to create intermediates when needed
+-- but use predefined snippets when available. To some extend the current builder is more stupid
+-- but I don't worry that much about it as ligatures are rather predicatable.
+--
+-- Personally I think that an ff + i == ffi rule as used in for instance latin modern is pretty
+-- weird as no sane person will key that in and expect a glyph for that ligature plus the following
+-- character. Anyhow, as we need to deal with this, we do, but no guarantes are given.
+--
+-- latin modern dejavu
+--
+-- f+f 102 102 102 102
+-- f+i 102 105 102 105
+-- f+l 102 108 102 108
+-- f+f+i 102 102 105
+-- f+f+l 102 102 108 102 102 108
+-- ff+i 64256 105 64256 105
+-- ff+l 64256 108
+--
+-- As you can see here, latin modern is less complete than dejavu but
+-- in practice one will not notice it.
+--
+-- The while loop is needed because we need to resolve for instance pseudo names like
+-- hyphen_hyphen to endash so in practice we end up with a bit too many definitions but the
+-- overhead is neglectable. We can have changed[first] or changed[second] but it quickly becomes
+-- messy if we need to take that into account.
+
+local function makefake(tfmdata,name,present)
+ local resources = tfmdata.resources
+ local private = resources.private
+ local character = { intermediate = true, ligatures = { } }
+ resources.unicodes[name] = private
+ tfmdata.characters[private] = character
+ tfmdata.descriptions[private] = { name = name }
+ resources.private = private + 1
+ present[name] = private
+ return character
+end
+
+local function make_1(present,tree,name)
+ for k, v in next, tree do
+ if k == "ligature" then
+ present[name] = v
+ else
+ make_1(present,v,name .. "_" .. k)
+ end
+ end
+end
+
+local function make_2(present,tfmdata,characters,tree,name,preceding,unicode,done)
+ for k, v in next, tree do
+ if k == "ligature" then
+ local character = characters[preceding]
+ if not character then
+ if trace_baseinit then
+ report_prepare("weird ligature in lookup %a, current %C, preceding %C",sequence.name,v,preceding)
+ end
+ character = makefake(tfmdata,name,present)
+ end
+ local ligatures = character.ligatures
+ if ligatures then
+ ligatures[unicode] = { char = v }
+ else
+ character.ligatures = { [unicode] = { char = v } }
+ end
+ if done then
+ local d = done[name]
+ if not d then
+ done[name] = { "dummy", v }
+ else
+ d[#d+1] = v
+ end
+ end
+ else
+ local code = present[name] or unicode
+ local name = name .. "_" .. k
+ make_2(present,tfmdata,characters,v,name,code,k,done)
+ end
+ end
+end
+
+local function preparesubstitutions(tfmdata,feature,value,validlookups,lookuplist)
+ local characters = tfmdata.characters
+ local descriptions = tfmdata.descriptions
+ local resources = tfmdata.resources
+ local changed = tfmdata.changed
+
+ local ligatures = { }
+ local alternate = tonumber(value) or true and 1
+ local defaultalt = otf.defaultbasealternate
+
+ local trace_singles = trace_baseinit and trace_singles
+ local trace_alternatives = trace_baseinit and trace_alternatives
+ local trace_ligatures = trace_baseinit and trace_ligatures
+
+ -- A chain of changes is handled in font-con which is clesner because
+ -- we can have shared changes and such.
+
+ if not changed then
+ changed = { }
+ tfmdata.changed = changed
+ end
+
+ for i=1,#lookuplist do
+ local sequence = lookuplist[i]
+ local steps = sequence.steps
+ local kind = sequence.type
+ if kind == "gsub_single" then
+ for i=1,#steps do
+ for unicode, data in next, steps[i].coverage do
+ if unicode ~= data then
+ changed[unicode] = data
+ end
+ if trace_singles then
+ report_substitution(feature,sequence,descriptions,unicode,data)
+ end
+ end
+ end
+ elseif kind == "gsub_alternate" then
+ for i=1,#steps do
+ for unicode, data in next, steps[i].coverage do
+ local replacement = data[alternate]
+ if replacement then
+ if unicode ~= replacement then
+ changed[unicode] = replacement
+ end
+ if trace_alternatives then
+ report_alternate(feature,sequence,descriptions,unicode,replacement,value,"normal")
+ end
+ elseif defaultalt == "first" then
+ replacement = data[1]
+ if unicode ~= replacement then
+ changed[unicode] = replacement
+ end
+ if trace_alternatives then
+ report_alternate(feature,sequence,descriptions,unicode,replacement,value,defaultalt)
+ end
+ elseif defaultalt == "last" then
+ replacement = data[#data]
+ if unicode ~= replacement then
+ changed[unicode] = replacement
+ end
+ if trace_alternatives then
+ report_alternate(feature,sequence,descriptions,unicode,replacement,value,defaultalt)
+ end
+ else
+ if trace_alternatives then
+ report_alternate(feature,sequence,descriptions,unicode,replacement,value,"unknown")
+ end
+ end
+ end
+ end
+ elseif kind == "gsub_ligature" then
+ for i=1,#steps do
+ for unicode, data in next, steps[i].coverage do
+ ligatures[#ligatures+1] = { unicode, data, "" } -- lookupname }
+ if trace_ligatures then
+ report_ligature(feature,sequence,descriptions,unicode,data)
+ end
+ end
+ end
+ end
+ end
+
+ local nofligatures = #ligatures
+
+ if nofligatures > 0 then
+
+ local characters = tfmdata.characters
+ local present = { }
+ local done = trace_baseinit and trace_ligatures and { }
+
+ for i=1,nofligatures do
+ local ligature = ligatures[i]
+ local unicode, tree = ligature[1], ligature[2]
+ make_1(present,tree,"ctx_"..unicode)
+ end
+
+ for i=1,nofligatures do
+ local ligature = ligatures[i]
+ local unicode, tree, lookupname = ligature[1], ligature[2], ligature[3]
+ make_2(present,tfmdata,characters,tree,"ctx_"..unicode,unicode,unicode,done,sequence)
+ end
+
+ end
+
+end
+
+local function preparepositionings(tfmdata,feature,value,validlookups,lookuplist)
+ local characters = tfmdata.characters
+ local descriptions = tfmdata.descriptions
+ local resources = tfmdata.resources
+ local properties = tfmdata.properties
+ local traceindeed = trace_baseinit and trace_kerns
+ -- check out this sharedkerns trickery
+ for i=1,#lookuplist do
+ local sequence = lookuplist[i]
+ local steps = sequence.steps
+ local kind = sequence.type
+ local format = sequence.format
+ if kind == "gpos_pair" then
+ for i=1,#steps do
+ local step = steps[i]
+ if step.format == "kern" then
+ for unicode, data in next, steps[i].coverage do
+ local character = characters[unicode]
+ local kerns = character.kerns
+ if not kerns then
+ kerns = { }
+ character.kerns = kerns
+ end
+ if traceindeed then
+ for otherunicode, kern in next, data do
+ if not kerns[otherunicode] and kern ~= 0 then
+ kerns[otherunicode] = kern
+ report_kern(feature,sequence,descriptions,unicode,otherunicode,kern)
+ end
+ end
+ else
+ for otherunicode, kern in next, data do
+ if not kerns[otherunicode] and kern ~= 0 then
+ kerns[otherunicode] = kern
+ end
+ end
+ end
+ end
+ else
+ for unicode, data in next, steps[i].coverage do
+ local character = characters[unicode]
+ local kerns = character.kerns
+ for otherunicode, kern in next, data do
+ if not kern[2] and not (kerns and kerns[otherunicode]) then
+ local kern = kern[1]
+ if kern[1] ~= 0 or kern[2] ~= 0 or kern[4] ~= 0 then
+ -- a complex pair not suitable for basemode
+ else
+ kern = kern[3]
+ if kern ~= 0 then
+ if kerns then
+ kerns[otherunicode] = kern
+ else
+ kerns = { [otherunicode] = kern }
+ character.kerns = kerns
+ end
+ if traceindeed then
+ report_kern(feature,sequence,descriptions,unicode,otherunicode,kern)
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+
+end
+
+local function initializehashes(tfmdata)
+ -- already done
+end
+
+local function checkmathreplacements(tfmdata,fullname)
+ if tfmdata.mathparameters then
+ local characters = tfmdata.characters
+ local changed = tfmdata.changed
+ if next(changed) then
+ if trace_preparing or trace_baseinit then
+ report_prepare("checking math replacements for %a",fullname)
+ end
+ for unicode, replacement in next, changed do
+ local u = characters[unicode]
+ local r = characters[replacement]
+ local n = u.next
+ local v = u.vert_variants
+ local h = u.horiz_variants
+ if n and not r.next then
+ if trace_preparing then
+ report_prepare("forcing %s for %C substituted by %U","incremental step",unicode,replacement)
+ end
+ r.next = n
+ end
+ if v and not r.vert_variants then
+ if trace_preparing then
+ report_prepare("forcing %s for %C substituted by %U","vertical variants",unicode,replacement)
+ end
+ r.vert_variants = v
+ end
+ if h and not r.horiz_variants then
+ if trace_preparing then
+ report_prepare("forcing %s for %C substituted by %U","horizontal variants",unicode,replacement)
+ end
+ r.horiz_variants = h
+ end
+ end
+ end
+ end
+end
+
+local function featuresinitializer(tfmdata,value)
+ if true then -- value then
+ local starttime = trace_preparing and os.clock()
+ local features = tfmdata.shared.features
+ local fullname = tfmdata.properties.fullname or "?"
+ if features then
+ initializehashes(tfmdata)
+ local collectlookups = otf.collectlookups
+ local rawdata = tfmdata.shared.rawdata
+ local properties = tfmdata.properties
+ local script = properties.script
+ local language = properties.language
+ local rawresources = rawdata.resources
+ local rawfeatures = rawresources and rawresources.features
+ local basesubstitutions = rawfeatures and rawfeatures.gsub
+ local basepositionings = rawfeatures and rawfeatures.gpos
+ local substitutionsdone = false
+ local positioningsdone = false
+ --
+ if basesubstitutions or basepositionings then
+ local sequences = tfmdata.resources.sequences
+ for s=1,#sequences do
+ local sequence = sequences[s]
+ local sfeatures = sequence.features
+ if sfeatures then
+ local order = sequence.order
+ if order then
+ for i=1,#order do --
+ local feature = order[i]
+ local value = features[feature]
+ if value then
+ local validlookups, lookuplist = collectlookups(rawdata,feature,script,language)
+ if not validlookups then
+ -- skip
+ elseif basesubstitutions and basesubstitutions[feature] then
+ if trace_preparing then
+ report_prepare("filtering base %s feature %a for %a with value %a","sub",feature,fullname,value)
+ end
+ preparesubstitutions(tfmdata,feature,value,validlookups,lookuplist)
+ registerbasefeature(feature,value)
+ substitutionsdone = true
+ elseif basepositionings and basepositionings[feature] then
+ if trace_preparing then
+ report_prepare("filtering base %a feature %a for %a with value %a","pos",feature,fullname,value)
+ end
+ preparepositionings(tfmdata,feature,value,validlookups,lookuplist)
+ registerbasefeature(feature,value)
+ positioningsdone = true
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ --
+ if substitutionsdone then
+ checkmathreplacements(tfmdata,fullname)
+ end
+ --
+ registerbasehash(tfmdata)
+ end
+ if trace_preparing then
+ report_prepare("preparation time is %0.3f seconds for %a",os.clock()-starttime,fullname)
+ end
+ end
+end
+
+registerotffeature {
+ name = "features",
+ description = "features",
+ default = true,
+ initializers = {
+ -- position = 1, -- after setscript (temp hack ... we need to force script / language to 1
+ base = featuresinitializer,
+ }
+}
+
+otf.basemodeinitializer = featuresinitializer
+
+
+end --- [luaotfload, fontloader-2017-02-11.lua scope for “font-otoâ€] ---
+
+
+do --- [luaotfload, fontloader-2017-02-11.lua scope for “font-otj†5ea70db9f1990dc1459425853c79f663] ---
+
+if not modules then modules={} end modules ['font-otj']={
+ version=1.001,
+ comment="companion to font-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files",
+}
+if not nodes.properties then return end
+local next,rawget=next,rawget
+local fastcopy=table.fastcopy
+local registertracker=trackers.register
+local trace_injections=false registertracker("fonts.injections",function(v) trace_injections=v end)
+local trace_marks=false registertracker("fonts.injections.marks",function(v) trace_marks=v end)
+local trace_cursive=false registertracker("fonts.injections.cursive",function(v) trace_cursive=v end)
+local trace_spaces=false registertracker("fonts.injections.spaces",function(v) trace_spaces=v end)
+local use_advance=false directives.register("fonts.injections.advance",function(v) use_advance=v end)
+local report_injections=logs.reporter("fonts","injections")
+local report_spaces=logs.reporter("fonts","spaces")
+local attributes,nodes,node=attributes,nodes,node
+fonts=fonts
+local hashes=fonts.hashes
+local fontdata=hashes.identifiers
+nodes.injections=nodes.injections or {}
+local injections=nodes.injections
+local tracers=nodes.tracers
+local setcolor=tracers and tracers.colors.set
+local resetcolor=tracers and tracers.colors.reset
+local nodecodes=nodes.nodecodes
+local glyph_code=nodecodes.glyph
+local disc_code=nodecodes.disc
+local kern_code=nodecodes.kern
+local glue_code=nodecodes.glue
+local nuts=nodes.nuts
+local nodepool=nuts.pool
+local newkern=nodepool.kern
+local tonode=nuts.tonode
+local tonut=nuts.tonut
+local getfield=nuts.getfield
+local setfield=nuts.setfield
+local getnext=nuts.getnext
+local getprev=nuts.getprev
+local getid=nuts.getid
+local getfont=nuts.getfont
+local getsubtype=nuts.getsubtype
+local getchar=nuts.getchar
+local getboth=nuts.getboth
+local ischar=nuts.is_char
+local getdisc=nuts.getdisc
+local setdisc=nuts.setdisc
+local traverse_id=nuts.traverse_id
+local traverse_char=nuts.traverse_char
+local insert_node_before=nuts.insert_before
+local insert_node_after=nuts.insert_after
+local properties=nodes.properties.data
+function injections.installnewkern(nk)
+ newkern=nk or newkern
+end
+local nofregisteredkerns=0
+local nofregisteredpairs=0
+local nofregisteredmarks=0
+local nofregisteredcursives=0
+local keepregisteredcounts=false
+function injections.keepcounts()
+ keepregisteredcounts=true
+end
+function injections.resetcounts()
+ nofregisteredkerns=0
+ nofregisteredpairs=0
+ nofregisteredmarks=0
+ nofregisteredcursives=0
+ keepregisteredcounts=false
+end
+function injections.reset(n)
+ local p=rawget(properties,n)
+ if p then
+ p.injections=false
+ else
+ properties[n]=false
+ end
+end
+function injections.copy(target,source)
+ local sp=rawget(properties,source)
+ if sp then
+ local tp=rawget(properties,target)
+ local si=sp.injections
+ if si then
+ si=fastcopy(si)
+ if tp then
+ tp.injections=si
+ else
+ propertydata[target]={
+ injections=si,
+ }
+ end
+ elseif tp then
+ tp.injections=false
+ else
+ properties[target]={ injections={} }
+ end
+ else
+ local tp=rawget(properties,target)
+ if tp then
+ tp.injections=false
+ else
+ properties[target]=false
+ end
+ end
+end
+function injections.setligaindex(n,index)
+ local p=rawget(properties,n)
+ if p then
+ local i=p.injections
+ if i then
+ i.ligaindex=index
+ else
+ p.injections={
+ ligaindex=index
+ }
+ end
+ else
+ properties[n]={
+ injections={
+ ligaindex=index
+ }
+ }
+ end
+end
+function injections.getligaindex(n,default)
+ local p=rawget(properties,n)
+ if p then
+ local i=p.injections
+ if i then
+ return i.ligaindex or default
+ end
+ end
+ return default
+end
+function injections.setcursive(start,nxt,factor,rlmode,exit,entry,tfmstart,tfmnext)
+ local dx=factor*(exit[1]-entry[1])
+ local dy=-factor*(exit[2]-entry[2])
+ local ws=tfmstart.width
+ local wn=tfmnext.width
+ nofregisteredcursives=nofregisteredcursives+1
+ if rlmode<0 then
+ dx=-(dx+wn)
+ else
+ dx=dx-ws
+ end
+ if dx==0 then
+ dx=0
+ end
+ local p=rawget(properties,start)
+ if p then
+ local i=p.injections
+ if i then
+ i.cursiveanchor=true
+ else
+ p.injections={
+ cursiveanchor=true,
+ }
+ end
+ else
+ properties[start]={
+ injections={
+ cursiveanchor=true,
+ },
+ }
+ end
+ local p=rawget(properties,nxt)
+ if p then
+ local i=p.injections
+ if i then
+ i.cursivex=dx
+ i.cursivey=dy
+ else
+ p.injections={
+ cursivex=dx,
+ cursivey=dy,
+ }
+ end
+ else
+ properties[nxt]={
+ injections={
+ cursivex=dx,
+ cursivey=dy,
+ },
+ }
+ end
+ return dx,dy,nofregisteredcursives
+end
+function injections.setpair(current,factor,rlmode,r2lflag,spec,injection)
+ local x=factor*spec[1]
+ local y=factor*spec[2]
+ local w=factor*spec[3]
+ local h=factor*spec[4]
+ if x~=0 or w~=0 or y~=0 or h~=0 then
+ local yoffset=y-h
+ local leftkern=x
+ local rightkern=w-x
+ if leftkern~=0 or rightkern~=0 or yoffset~=0 then
+ nofregisteredpairs=nofregisteredpairs+1
+ if rlmode and rlmode<0 then
+ leftkern,rightkern=rightkern,leftkern
+ end
+ if not injection then
+ injection="injections"
+ end
+ local p=rawget(properties,current)
+ if p then
+ local i=rawget(p,injection)
+ if i then
+ if leftkern~=0 then
+ i.leftkern=(i.leftkern or 0)+leftkern
+ end
+ if rightkern~=0 then
+ i.rightkern=(i.rightkern or 0)+rightkern
+ end
+ if yoffset~=0 then
+ i.yoffset=(i.yoffset or 0)+yoffset
+ end
+ elseif leftkern~=0 or rightkern~=0 then
+ p[injection]={
+ leftkern=leftkern,
+ rightkern=rightkern,
+ yoffset=yoffset,
+ }
+ else
+ p[injection]={
+ yoffset=yoffset,
+ }
+ end
+ elseif leftkern~=0 or rightkern~=0 then
+ properties[current]={
+ [injection]={
+ leftkern=leftkern,
+ rightkern=rightkern,
+ yoffset=yoffset,
+ },
+ }
+ else
+ properties[current]={
+ [injection]={
+ yoffset=yoffset,
+ },
+ }
+ end
+ return x,y,w,h,nofregisteredpairs
+ end
+ end
+ return x,y,w,h
+end
+function injections.setkern(current,factor,rlmode,x,injection)
+ local dx=factor*x
+ if dx~=0 then
+ nofregisteredkerns=nofregisteredkerns+1
+ local p=rawget(properties,current)
+ if not injection then
+ injection="injections"
+ end
+ if p then
+ local i=rawget(p,injection)
+ if i then
+ i.leftkern=dx+(i.leftkern or 0)
+ else
+ p[injection]={
+ leftkern=dx,
+ }
+ end
+ else
+ properties[current]={
+ [injection]={
+ leftkern=dx,
+ },
+ }
+ end
+ return dx,nofregisteredkerns
+ else
+ return 0,0
+ end
+end
+function injections.setmark(start,base,factor,rlmode,ba,ma,tfmbase,mkmk,checkmark)
+ local dx,dy=factor*(ba[1]-ma[1]),factor*(ba[2]-ma[2])
+ nofregisteredmarks=nofregisteredmarks+1
+ if rlmode>=0 then
+ dx=tfmbase.width-dx
+ end
+ local p=rawget(properties,start)
+ if p then
+ local i=p.injections
+ if i then
+ if i.markmark then
+ else
+ i.markx=dx
+ i.marky=dy
+ i.markdir=rlmode or 0
+ i.markbase=nofregisteredmarks
+ i.markbasenode=base
+ i.markmark=mkmk
+ i.checkmark=checkmark
+ end
+ else
+ p.injections={
+ markx=dx,
+ marky=dy,
+ markdir=rlmode or 0,
+ markbase=nofregisteredmarks,
+ markbasenode=base,
+ markmark=mkmk,
+ checkmark=checkmark,
+ }
+ end
+ else
+ properties[start]={
+ injections={
+ markx=dx,
+ marky=dy,
+ markdir=rlmode or 0,
+ markbase=nofregisteredmarks,
+ markbasenode=base,
+ markmark=mkmk,
+ checkmark=checkmark,
+ },
+ }
+ end
+ return dx,dy,nofregisteredmarks
+end
+local function dir(n)
+ return (n and n<0 and "r-to-l") or (n and n>0 and "l-to-r") or "unset"
+end
+local function showchar(n,nested)
+ local char=getchar(n)
+ report_injections("%wfont %s, char %U, glyph %c",nested and 2 or 0,getfont(n),char,char)
+end
+local function show(n,what,nested,symbol)
+ if n then
+ local p=rawget(properties,n)
+ if p then
+ local i=rawget(p,what)
+ if i then
+ local leftkern=i.leftkern or 0
+ local rightkern=i.rightkern or 0
+ local yoffset=i.yoffset or 0
+ local markx=i.markx or 0
+ local marky=i.marky or 0
+ local markdir=i.markdir or 0
+ local markbase=i.markbase or 0
+ local cursivex=i.cursivex or 0
+ local cursivey=i.cursivey or 0
+ local ligaindex=i.ligaindex or 0
+ local cursbase=i.cursiveanchor
+ local margin=nested and 4 or 2
+ if rightkern~=0 or yoffset~=0 then
+ report_injections("%w%s pair: lx %p, rx %p, dy %p",margin,symbol,leftkern,rightkern,yoffset)
+ elseif leftkern~=0 then
+ report_injections("%w%s kern: dx %p",margin,symbol,leftkern)
+ end
+ if markx~=0 or marky~=0 or markbase~=0 then
+ report_injections("%w%s mark: dx %p, dy %p, dir %s, base %s",margin,symbol,markx,marky,markdir,markbase~=0 and "yes" or "no")
+ end
+ if cursivex~=0 or cursivey~=0 then
+ if cursbase then
+ report_injections("%w%s curs: base dx %p, dy %p",margin,symbol,cursivex,cursivey)
+ else
+ report_injections("%w%s curs: dx %p, dy %p",margin,symbol,cursivex,cursivey)
+ end
+ elseif cursbase then
+ report_injections("%w%s curs: base",margin,symbol)
+ end
+ if ligaindex~=0 then
+ report_injections("%w%s liga: index %i",margin,symbol,ligaindex)
+ end
+ end
+ end
+ end
+end
+local function showsub(n,what,where)
+ report_injections("begin subrun: %s",where)
+ for n in traverse_id(glyph_code,n) do
+ showchar(n,where)
+ show(n,what,where," ")
+ end
+ report_injections("end subrun")
+end
+local function trace(head,where)
+ report_injections("begin run %s: %s kerns, %s pairs, %s marks and %s cursives registered",
+ where or "",nofregisteredkerns,nofregisteredpairs,nofregisteredmarks,nofregisteredcursives)
+ local n=head
+ while n do
+ local id=getid(n)
+ if id==glyph_code then
+ showchar(n)
+ show(n,"injections",false," ")
+ show(n,"preinjections",false,"<")
+ show(n,"postinjections",false,">")
+ show(n,"replaceinjections",false,"=")
+ show(n,"emptyinjections",false,"*")
+ elseif id==disc_code then
+ local pre,post,replace=getdisc(n)
+ if pre then
+ showsub(pre,"preinjections","pre")
+ end
+ if post then
+ showsub(post,"postinjections","post")
+ end
+ if replace then
+ showsub(replace,"replaceinjections","replace")
+ end
+ show(n,"emptyinjections",false,"*")
+ end
+ n=getnext(n)
+ end
+ report_injections("end run")
+end
+local function show_result(head)
+ local current=head
+ local skipping=false
+ while current do
+ local id=getid(current)
+ if id==glyph_code then
+ report_injections("char: %C, width %p, xoffset %p, yoffset %p",
+ getchar(current),getfield(current,"width"),getfield(current,"xoffset"),getfield(current,"yoffset"))
+ skipping=false
+ elseif id==kern_code then
+ report_injections("kern: %p",getfield(current,"kern"))
+ skipping=false
+ elseif not skipping then
+ report_injections()
+ skipping=true
+ end
+ current=getnext(current)
+ end
+end
+local function inject_kerns_only(head,where)
+ head=tonut(head)
+ if trace_injections then
+ trace(head,"kerns")
+ end
+ local current=head
+ local prev=nil
+ local next=nil
+ local prevdisc=nil
+ local prevglyph=nil
+ local pre=nil
+ local post=nil
+ local replace=nil
+ local pretail=nil
+ local posttail=nil
+ local replacetail=nil
+ while current do
+ local id=getid(current)
+ local next=getnext(current)
+ if id==glyph_code then
+ if getsubtype(current)<256 then
+ local p=rawget(properties,current)
+ if p then
+ local i=p.injections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ if use_advance then
+ setfield(current,"xoffset",leftkern)
+ setfield(current,"xadvance",leftkern)
+ else
+ insert_node_before(head,current,newkern(leftkern))
+ end
+ end
+ end
+ if prevdisc then
+ local done=false
+ if post then
+ local i=p.postinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ if use_advance then
+ setfield(post,"xadvance",leftkern)
+ else
+ insert_node_after(post,posttail,newkern(leftkern))
+ done=true
+ end
+ end
+ end
+ end
+ if replace then
+ local i=p.replaceinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ if use_advance then
+ setfield(replace,"xadvance",leftkern)
+ else
+ insert_node_after(replace,replacetail,newkern(leftkern))
+ done=true
+ end
+ end
+ end
+ else
+ local i=p.emptyinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ setfield(prev,"replace",newkern(leftkern))
+ end
+ end
+ end
+ if done then
+ setdisc(prevdisc,pre,post,replace)
+ end
+ end
+ end
+ end
+ prevdisc=nil
+ prevglyph=current
+ elseif id==disc_code then
+ pre,post,replace,pretail,posttail,replacetail=getdisc(current,true)
+ local done=false
+ if pre then
+ for n in traverse_char(pre) do
+ local p=rawget(properties,n)
+ if p then
+ local i=p.injections or p.preinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ if use_advance then
+ setfield(pre,"xoffset",leftkern)
+ setfield(pre,"xadvance",leftkern)
+ else
+ pre=insert_node_before(pre,n,newkern(leftkern))
+ done=true
+ end
+ end
+ end
+ end
+ end
+ end
+ if post then
+ for n in traverse_char(post) do
+ local p=rawget(properties,n)
+ if p then
+ local i=p.injections or p.postinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ if use_advance then
+ setfield(post,"xoffset",leftkern)
+ setfield(post,"xadvance",leftkern)
+ else
+ post=insert_node_before(post,n,newkern(leftkern))
+ done=true
+ end
+ end
+ end
+ end
+ end
+ end
+ if replace then
+ for n in traverse_char(replace) do
+ local p=rawget(properties,n)
+ if p then
+ local i=p.injections or p.replaceinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ if use_advance then
+ setfield(replace,"xoffset",leftkern)
+ setfield(replace,"xadvance",leftkern)
+ else
+ replace=insert_node_before(replace,n,newkern(leftkern))
+ done=true
+ end
+ end
+ end
+ end
+ end
+ end
+ if done then
+ setdisc(current,pre,post,replace)
+ end
+ prevglyph=nil
+ prevdisc=current
+ else
+ prevglyph=nil
+ prevdisc=nil
+ end
+ prev=current
+ current=next
+ end
+ if keepregisteredcounts then
+ keepregisteredcounts=false
+ else
+ nofregisteredkerns=0
+ end
+ return tonode(head),true
+end
+local function inject_pairs_only(head,where)
+ head=tonut(head)
+ if trace_injections then
+ trace(head,"pairs")
+ end
+ local current=head
+ local prev=nil
+ local next=nil
+ local prevdisc=nil
+ local prevglyph=nil
+ local pre=nil
+ local post=nil
+ local replace=nil
+ local pretail=nil
+ local posttail=nil
+ local replacetail=nil
+ while current do
+ local id=getid(current)
+ local next=getnext(current)
+ if id==glyph_code then
+ if getsubtype(current)<256 then
+ local p=rawget(properties,current)
+ if p then
+ local i=p.injections
+ if i then
+ local yoffset=i.yoffset
+ if yoffset and yoffset~=0 then
+ setfield(current,"yoffset",yoffset)
+ end
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ head=insert_node_before(head,current,newkern(leftkern))
+ end
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ insert_node_after(head,current,newkern(rightkern))
+ end
+ else
+ local i=p.emptyinjections
+ if i then
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ if next and getid(next)==disc_code then
+ if replace then
+ else
+ setfield(next,"replace",newkern(rightkern))
+ end
+ end
+ end
+ end
+ end
+ if prevdisc then
+ local done=false
+ if post then
+ local i=p.postinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ insert_node_after(post,posttail,newkern(leftkern))
+ done=true
+ end
+ end
+ end
+ if replace then
+ local i=p.replaceinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ insert_node_after(replace,replacetail,newkern(leftkern))
+ done=true
+ end
+ end
+ else
+ local i=p.emptyinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ setfield(prev,"replace",newkern(leftkern))
+ end
+ end
+ end
+ if done then
+ setdisc(prevdisc,pre,post,replace)
+ end
+ end
+ end
+ end
+ prevdisc=nil
+ prevglyph=current
+ elseif id==disc_code then
+ pre,post,replace,pretail,posttail,replacetail=getdisc(current,true)
+ local done=false
+ if pre then
+ for n in traverse_char(pre) do
+ local p=rawget(properties,n)
+ if p then
+ local i=p.injections or p.preinjections
+ if i then
+ local yoffset=i.yoffset
+ if yoffset and yoffset~=0 then
+ setfield(n,"yoffset",yoffset)
+ end
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ pre=insert_node_before(pre,n,newkern(leftkern))
+ done=true
+ end
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ insert_node_after(pre,n,newkern(rightkern))
+ done=true
+ end
+ end
+ end
+ end
+ end
+ if post then
+ for n in traverse_char(post) do
+ local p=rawget(properties,n)
+ if p then
+ local i=p.injections or p.postinjections
+ if i then
+ local yoffset=i.yoffset
+ if yoffset and yoffset~=0 then
+ setfield(n,"yoffset",yoffset)
+ end
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ post=insert_node_before(post,n,newkern(leftkern))
+ done=true
+ end
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ insert_node_after(post,n,newkern(rightkern))
+ done=true
+ end
+ end
+ end
+ end
+ end
+ if replace then
+ for n in traverse_char(replace) do
+ local p=rawget(properties,n)
+ if p then
+ local i=p.injections or p.replaceinjections
+ if i then
+ local yoffset=i.yoffset
+ if yoffset and yoffset~=0 then
+ setfield(n,"yoffset",yoffset)
+ end
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ replace=insert_node_before(replace,n,newkern(leftkern))
+ done=true
+ end
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ insert_node_after(replace,n,newkern(rightkern))
+ done=true
+ end
+ end
+ end
+ end
+ end
+ if prevglyph then
+ if pre then
+ local p=rawget(properties,prevglyph)
+ if p then
+ local i=p.preinjections
+ if i then
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ pre=insert_node_before(pre,pre,newkern(rightkern))
+ done=true
+ end
+ end
+ end
+ end
+ if replace then
+ local p=rawget(properties,prevglyph)
+ if p then
+ local i=p.replaceinjections
+ if i then
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ replace=insert_node_before(replace,replace,newkern(rightkern))
+ done=true
+ end
+ end
+ end
+ end
+ end
+ if done then
+ setdisc(current,pre,post,replace)
+ end
+ prevglyph=nil
+ prevdisc=current
+ else
+ prevglyph=nil
+ prevdisc=nil
+ end
+ prev=current
+ current=next
+ end
+ if keepregisteredcounts then
+ keepregisteredcounts=false
+ else
+ nofregisteredkerns=0
+ end
+ return tonode(head),true
+end
+local function showoffset(n,flag)
+ local o=getfield(n,"xoffset")
+ if o==0 then
+ o=getfield(n,"yoffset")
+ end
+ if o~=0 then
+ setcolor(n,flag and "darkred" or "darkgreen")
+ else
+ resetcolor(n)
+ end
+end
+local function inject_everything(head,where)
+ head=tonut(head)
+ if trace_injections then
+ trace(head,"everything")
+ end
+ local hascursives=nofregisteredcursives>0
+ local hasmarks=nofregisteredmarks>0
+ local current=head
+ local last=nil
+ local font=font
+ local markdata=nil
+ local prev=nil
+ local next=nil
+ local prevdisc=nil
+ local prevglyph=nil
+ local pre=nil
+ local post=nil
+ local replace=nil
+ local pretail=nil
+ local posttail=nil
+ local replacetail=nil
+ local cursiveanchor=nil
+ local minc=0
+ local maxc=0
+ local glyphs={}
+ local marks={}
+ local nofmarks=0
+ local function processmark(p,n,pn)
+ local px=getfield(p,"xoffset")
+ local ox=0
+ local rightkern=nil
+ local pp=rawget(properties,p)
+ if pp then
+ pp=pp.injections
+ if pp then
+ rightkern=pp.rightkern
+ end
+ end
+ if rightkern then
+ if pn.markdir<0 then
+ ox=px-pn.markx-rightkern
+ else
+ if false then
+ local leftkern=pp.leftkern
+ if leftkern then
+ ox=px-pn.markx-leftkern
+ else
+ ox=px-pn.markx
+ end
+ else
+ ox=px-pn.markx
+ end
+ end
+ else
+ ox=px-pn.markx
+ if pn.checkmark then
+ local wn=getfield(n,"width")
+ if wn~=0 then
+ wn=wn/2
+ if trace_injections then
+ report_injections("correcting non zero width mark %C",getchar(n))
+ end
+ insert_node_before(n,n,newkern(-wn))
+ insert_node_after(n,n,newkern(-wn))
+ end
+ end
+ end
+ local oy=getfield(n,"yoffset")+getfield(p,"yoffset")+pn.marky
+ setfield(n,"xoffset",ox)
+ setfield(n,"yoffset",oy)
+ if trace_marks then
+ showoffset(n,true)
+ end
+ end
+ while current do
+ local id=getid(current)
+ local next=getnext(current)
+ if id==glyph_code then
+ if getsubtype(current)<256 then
+ local p=rawget(properties,current)
+ if p then
+ local i=p.injections
+ if i then
+ local pm=i.markbasenode
+ if pm then
+ nofmarks=nofmarks+1
+ marks[nofmarks]=current
+ else
+ local yoffset=i.yoffset
+ if yoffset and yoffset~=0 then
+ setfield(current,"yoffset",yoffset)
+ end
+ if hascursives then
+ local cursivex=i.cursivex
+ if cursivex then
+ if cursiveanchor then
+ if cursivex~=0 then
+ i.leftkern=(i.leftkern or 0)+cursivex
+ end
+ if maxc==0 then
+ minc=1
+ maxc=1
+ glyphs[1]=cursiveanchor
+ else
+ maxc=maxc+1
+ glyphs[maxc]=cursiveanchor
+ end
+ properties[cursiveanchor].cursivedy=i.cursivey
+ last=current
+ else
+ maxc=0
+ end
+ elseif maxc>0 then
+ local ny=getfield(current,"yoffset")
+ for i=maxc,minc,-1 do
+ local ti=glyphs[i]
+ ny=ny+properties[ti].cursivedy
+ setfield(ti,"yoffset",ny)
+ if trace_cursive then
+ showoffset(ti)
+ end
+ end
+ maxc=0
+ cursiveanchor=nil
+ end
+ if i.cursiveanchor then
+ cursiveanchor=current
+ else
+ if maxc>0 then
+ local ny=getfield(current,"yoffset")
+ for i=maxc,minc,-1 do
+ local ti=glyphs[i]
+ ny=ny+properties[ti].cursivedy
+ setfield(ti,"yoffset",ny)
+ if trace_cursive then
+ showoffset(ti)
+ end
+ end
+ maxc=0
+ end
+ cursiveanchor=nil
+ end
+ end
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ insert_node_before(head,current,newkern(leftkern))
+ end
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ insert_node_after(head,current,newkern(rightkern))
+ end
+ end
+ else
+ local i=p.emptyinjections
+ if i then
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ if next and getid(next)==disc_code then
+ if replace then
+ else
+ setfield(next,"replace",newkern(rightkern))
+ end
+ end
+ end
+ end
+ end
+ if prevdisc then
+ if p then
+ local done=false
+ if post then
+ local i=p.postinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ insert_node_after(post,posttail,newkern(leftkern))
+ done=true
+ end
+ end
+ end
+ if replace then
+ local i=p.replaceinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ insert_node_after(replace,replacetail,newkern(leftkern))
+ done=true
+ end
+ end
+ else
+ local i=p.emptyinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ setfield(prev,"replace",newkern(leftkern))
+ end
+ end
+ end
+ if done then
+ setdisc(prevdisc,pre,post,replace)
+ end
+ end
+ end
+ else
+ if hascursives and maxc>0 then
+ local ny=getfield(current,"yoffset")
+ for i=maxc,minc,-1 do
+ local ti=glyphs[i]
+ ny=ny+properties[ti].cursivedy
+ setfield(ti,"yoffset",getfield(ti,"yoffset")+ny)
+ end
+ maxc=0
+ cursiveanchor=nil
+ end
+ end
+ end
+ prevdisc=nil
+ prevglyph=current
+ elseif id==disc_code then
+ pre,post,replace,pretail,posttail,replacetail=getdisc(current,true)
+ local done=false
+ if pre then
+ for n in traverse_char(pre) do
+ local p=rawget(properties,n)
+ if p then
+ local i=p.injections or p.preinjections
+ if i then
+ local yoffset=i.yoffset
+ if yoffset and yoffset~=0 then
+ setfield(n,"yoffset",yoffset)
+ end
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ pre=insert_node_before(pre,n,newkern(leftkern))
+ done=true
+ end
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ insert_node_after(pre,n,newkern(rightkern))
+ done=true
+ end
+ if hasmarks then
+ local pm=i.markbasenode
+ if pm then
+ processmark(pm,current,i)
+ end
+ end
+ end
+ end
+ end
+ end
+ if post then
+ for n in traverse_char(post) do
+ local p=rawget(properties,n)
+ if p then
+ local i=p.injections or p.postinjections
+ if i then
+ local yoffset=i.yoffset
+ if yoffset and yoffset~=0 then
+ setfield(n,"yoffset",yoffset)
+ end
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ post=insert_node_before(post,n,newkern(leftkern))
+ done=true
+ end
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ insert_node_after(post,n,newkern(rightkern))
+ done=true
+ end
+ if hasmarks then
+ local pm=i.markbasenode
+ if pm then
+ processmark(pm,current,i)
+ end
+ end
+ end
+ end
+ end
+ end
+ if replace then
+ for n in traverse_char(replace) do
+ local p=rawget(properties,n)
+ if p then
+ local i=p.injections or p.replaceinjections
+ if i then
+ local yoffset=i.yoffset
+ if yoffset and yoffset~=0 then
+ setfield(n,"yoffset",yoffset)
+ end
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ replace=insert_node_before(replace,n,newkern(leftkern))
+ done=true
+ end
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ insert_node_after(replace,n,newkern(rightkern))
+ done=true
+ end
+ if hasmarks then
+ local pm=i.markbasenode
+ if pm then
+ processmark(pm,current,i)
+ end
+ end
+ end
+ end
+ end
+ end
+ if prevglyph then
+ if pre then
+ local p=rawget(properties,prevglyph)
+ if p then
+ local i=p.preinjections
+ if i then
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ pre=insert_node_before(pre,pre,newkern(rightkern))
+ done=true
+ end
+ end
+ end
+ end
+ if replace then
+ local p=rawget(properties,prevglyph)
+ if p then
+ local i=p.replaceinjections
+ if i then
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ replace=insert_node_before(replace,replace,newkern(rightkern))
+ done=true
+ end
+ end
+ end
+ end
+ end
+ if done then
+ setdisc(current,pre,post,replace)
+ end
+ prevglyph=nil
+ prevdisc=current
+ else
+ prevglyph=nil
+ prevdisc=nil
+ end
+ prev=current
+ current=next
+ end
+ if hascursives and maxc>0 then
+ local ny=getfield(last,"yoffset")
+ for i=maxc,minc,-1 do
+ local ti=glyphs[i]
+ ny=ny+properties[ti].cursivedy
+ setfield(ti,"yoffset",ny)
+ if trace_cursive then
+ showoffset(ti)
+ end
+ end
+ end
+ if nofmarks>0 then
+ for i=1,nofmarks do
+ local m=marks[i]
+ local p=rawget(properties,m)
+ local i=p.injections
+ local b=i.markbasenode
+ processmark(b,m,i)
+ end
+ elseif hasmarks then
+ end
+ if keepregisteredcounts then
+ keepregisteredcounts=false
+ else
+ nofregisteredkerns=0
+ nofregisteredpairs=0
+ nofregisteredmarks=0
+ nofregisteredcursives=0
+ end
+ return tonode(head),true
+end
+local triggers=false
+function nodes.injections.setspacekerns(font,sequence)
+ if triggers then
+ triggers[font]=sequence
+ else
+ triggers={ [font]=sequence }
+ end
+end
+local getthreshold
+if context then
+ local threshold=1
+ local parameters=fonts.hashes.parameters
+ directives.register("otf.threshold",function(v) threshold=tonumber(v) or 1 end)
+ getthreshold=function(font)
+ local p=parameters[font]
+ local f=p.factor
+ local s=p.spacing
+ local t=threshold*(s and s.width or p.space or 0)-2
+ return t>0 and t or 0,f
+ end
+else
+ injections.threshold=0
+ getthreshold=function(font)
+ local p=fontdata[font].parameters
+ local f=p.factor
+ local s=p.spacing
+ local t=injections.threshold*(s and s.width or p.space or 0)-2
+ return t>0 and t or 0,f
+ end
+end
+injections.getthreshold=getthreshold
+function injections.isspace(n,threshold)
+ if getid(n)==glue_code then
+ local w=getfield(n,"width")
+ if threshold and w>threshold then
+ return 32
+ end
+ end
+end
+local function injectspaces(head)
+ if not triggers then
+ return head,false
+ end
+ local lastfont=nil
+ local spacekerns=nil
+ local leftkerns=nil
+ local rightkerns=nil
+ local factor=0
+ local threshold=0
+ local leftkern=false
+ local rightkern=false
+ local function updatefont(font,trig)
+ leftkerns=trig.left
+ rightkerns=trig.right
+ lastfont=font
+ threshold,
+ factor=getthreshold(font)
+ end
+ for n in traverse_id(glue_code,tonut(head)) do
+ local prev,next=getboth(n)
+ local prevchar=ischar(prev)
+ local nextchar=ischar(next)
+ if nextchar then
+ local font=getfont(next)
+ local trig=triggers[font]
+ if trig then
+ if lastfont~=font then
+ updatefont(font,trig)
+ end
+ if rightkerns then
+ rightkern=rightkerns[nextchar]
+ end
+ end
+ end
+ if prevchar then
+ local font=getfont(prev)
+ local trig=triggers[font]
+ if trig then
+ if lastfont~=font then
+ updatefont(font,trig)
+ end
+ if leftkerns then
+ leftkern=leftkerns[prevchar]
+ end
+ end
+ end
+ if leftkern then
+ local old=getfield(n,"width")
+ if old>threshold then
+ if rightkern then
+ local new=old+(leftkern+rightkern)*factor
+ if trace_spaces then
+ report_spaces("%C [%p -> %p] %C",prevchar,old,new,nextchar)
+ end
+ setfield(n,"width",new)
+ leftkern=false
+ else
+ local new=old+leftkern*factor
+ if trace_spaces then
+ report_spaces("%C [%p -> %p]",prevchar,old,new)
+ end
+ setfield(n,"width",new)
+ end
+ end
+ leftkern=false
+ elseif rightkern then
+ local old=getfield(n,"width")
+ if old>threshold then
+ local new=old+rightkern*factor
+ if trace_spaces then
+ report_spaces("[%p -> %p] %C",nextchar,old,new)
+ end
+ setfield(n,"width",new)
+ end
+ rightkern=false
+ end
+ end
+ triggers=false
+ return head,true
+end
+function injections.handler(head,where)
+ if triggers then
+ head=injectspaces(head)
+ end
+ if nofregisteredmarks>0 or nofregisteredcursives>0 then
+ if trace_injections then
+ report_injections("injection variant %a","everything")
+ end
+ return inject_everything(head,where)
+ elseif nofregisteredpairs>0 then
+ if trace_injections then
+ report_injections("injection variant %a","pairs")
+ end
+ return inject_pairs_only(head,where)
+ elseif nofregisteredkerns>0 then
+ if trace_injections then
+ report_injections("injection variant %a","kerns")
+ end
+ return inject_kerns_only(head,where)
+ else
+ return head,false
+ end
+end
+
+end --- [luaotfload, fontloader-2017-02-11.lua scope for “font-otjâ€] ---
+
+
+do --- [luaotfload, fontloader-2017-02-11.lua scope for “font-ota†c281d18dfc89a8ca18af64f55e9fa92b] ---
+
+if not modules then modules={} end modules ['font-ota']={
+ version=1.001,
+ comment="companion to font-otf.lua (analysing)",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local type=type
+if not trackers then trackers={ register=function() end } end
+local fonts,nodes,node=fonts,nodes,node
+local allocate=utilities.storage.allocate
+local otf=fonts.handlers.otf
+local analyzers=fonts.analyzers
+local initializers=allocate()
+local methods=allocate()
+analyzers.initializers=initializers
+analyzers.methods=methods
+local a_state=attributes.private('state')
+local nuts=nodes.nuts
+local tonut=nuts.tonut
+local getfield=nuts.getfield
+local getnext=nuts.getnext
+local getprev=nuts.getprev
+local getprev=nuts.getprev
+local getprop=nuts.getprop
+local setprop=nuts.setprop
+local getfont=nuts.getfont
+local getsubtype=nuts.getsubtype
+local getchar=nuts.getchar
+local ischar=nuts.is_char
+local traverse_id=nuts.traverse_id
+local end_of_math=nuts.end_of_math
+local nodecodes=nodes.nodecodes
+local disc_code=nodecodes.disc
+local math_code=nodecodes.math
+local fontdata=fonts.hashes.identifiers
+local categories=characters and characters.categories or {}
+local chardata=characters and characters.data
+local otffeatures=fonts.constructors.features.otf
+local registerotffeature=otffeatures.register
+local s_init=1 local s_rphf=7
+local s_medi=2 local s_half=8
+local s_fina=3 local s_pref=9
+local s_isol=4 local s_blwf=10
+local s_mark=5 local s_pstf=11
+local s_rest=6
+local states={
+ init=s_init,
+ medi=s_medi,
+ med2=s_medi,
+ fina=s_fina,
+ fin2=s_fina,
+ fin3=s_fina,
+ isol=s_isol,
+ mark=s_mark,
+ rest=s_rest,
+ rphf=s_rphf,
+ half=s_half,
+ pref=s_pref,
+ blwf=s_blwf,
+ pstf=s_pstf,
+}
+local features={
+ init=s_init,
+ medi=s_medi,
+ med2=s_medi,
+ fina=s_fina,
+ fin2=s_fina,
+ fin3=s_fina,
+ isol=s_isol,
+ rphf=s_rphf,
+ half=s_half,
+ pref=s_pref,
+ blwf=s_blwf,
+ pstf=s_pstf,
+}
+analyzers.states=states
+analyzers.features=features
+analyzers.useunicodemarks=false
+function analyzers.setstate(head,font)
+ local useunicodemarks=analyzers.useunicodemarks
+ local tfmdata=fontdata[font]
+ local descriptions=tfmdata.descriptions
+ local first,last,current,n,done=nil,nil,head,0,false
+ current=tonut(current)
+ while current do
+ local char,id=ischar(current,font)
+ if char and not getprop(current,a_state) then
+ done=true
+ local d=descriptions[char]
+ if d then
+ if d.class=="mark" then
+ done=true
+ setprop(current,a_state,s_mark)
+ elseif useunicodemarks and categories[char]=="mn" then
+ done=true
+ setprop(current,a_state,s_mark)
+ elseif n==0 then
+ first,last,n=current,current,1
+ setprop(current,a_state,s_init)
+ else
+ last,n=current,n+1
+ setprop(current,a_state,s_medi)
+ end
+ else
+ if first and first==last then
+ setprop(last,a_state,s_isol)
+ elseif last then
+ setprop(last,a_state,s_fina)
+ end
+ first,last,n=nil,nil,0
+ end
+ elseif char==false then
+ if first and first==last then
+ setprop(last,a_state,s_isol)
+ elseif last then
+ setprop(last,a_state,s_fina)
+ end
+ first,last,n=nil,nil,0
+ if id==math_code then
+ current=end_of_math(current)
+ end
+ elseif id==disc_code then
+ setprop(current,a_state,s_medi)
+ last=current
+ else
+ if first and first==last then
+ setprop(last,a_state,s_isol)
+ elseif last then
+ setprop(last,a_state,s_fina)
+ end
+ first,last,n=nil,nil,0
+ if id==math_code then
+ current=end_of_math(current)
+ end
+ end
+ current=getnext(current)
+ end
+ if first and first==last then
+ setprop(last,a_state,s_isol)
+ elseif last then
+ setprop(last,a_state,s_fina)
+ end
+ return head,done
+end
+local function analyzeinitializer(tfmdata,value)
+ local script,language=otf.scriptandlanguage(tfmdata)
+ local action=initializers[script]
+ if not action then
+ elseif type(action)=="function" then
+ return action(tfmdata,value)
+ else
+ local action=action[language]
+ if action then
+ return action(tfmdata,value)
+ end
+ end
+end
+local function analyzeprocessor(head,font,attr)
+ local tfmdata=fontdata[font]
+ local script,language=otf.scriptandlanguage(tfmdata,attr)
+ local action=methods[script]
+ if not action then
+ elseif type(action)=="function" then
+ return action(head,font,attr)
+ else
+ action=action[language]
+ if action then
+ return action(head,font,attr)
+ end
+ end
+ return head,false
+end
+registerotffeature {
+ name="analyze",
+ description="analysis of character classes",
+ default=true,
+ initializers={
+ node=analyzeinitializer,
+ },
+ processors={
+ position=1,
+ node=analyzeprocessor,
+ }
+}
+methods.latn=analyzers.setstate
+local arab_warned={}
+local function warning(current,what)
+ local char=getchar(current)
+ if not arab_warned[char] then
+ log.report("analyze","arab: character %C has no %a class",char,what)
+ arab_warned[char]=true
+ end
+end
+local mappers={
+ l=s_init,
+ d=s_medi,
+ c=s_medi,
+ r=s_fina,
+ u=s_isol,
+}
+local classifiers=characters.classifiers
+if not classifiers then
+ local f_arabic,l_arabic=characters.blockrange("arabic")
+ local f_syriac,l_syriac=characters.blockrange("syriac")
+ local f_mandiac,l_mandiac=characters.blockrange("mandiac")
+ local f_nko,l_nko=characters.blockrange("nko")
+ local f_ext_a,l_ext_a=characters.blockrange("arabicextendeda")
+ classifiers=table.setmetatableindex(function(t,k)
+ if type(k)=="number" then
+ local c=chardata[k]
+ local v=false
+ if c then
+ local arabic=c.arabic
+ if arabic then
+ v=mappers[arabic]
+ if not v then
+ log.report("analyze","error in mapping arabic %C",k)
+ v=false
+ end
+ elseif (k>=f_arabic and k<=l_arabic) or
+ (k>=f_syriac and k<=l_syriac) or
+ (k>=f_mandiac and k<=l_mandiac) or
+ (k>=f_nko and k<=l_nko) or
+ (k>=f_ext_a and k<=l_ext_a) then
+ if categories[k]=="mn" then
+ v=s_mark
+ else
+ v=s_rest
+ end
+ end
+ end
+ t[k]=v
+ return v
+ end
+ end)
+ characters.classifiers=classifiers
+end
+function methods.arab(head,font,attr)
+ local first,last=nil,nil
+ local c_first,c_last=nil,nil
+ local current,done=head,false
+ current=tonut(current)
+ while current do
+ local char,id=ischar(current,font)
+ if char and not getprop(current,a_state) then
+ done=true
+ local classifier=classifiers[char]
+ if not classifier then
+ if last then
+ if c_last==s_medi or c_last==s_fina then
+ setprop(last,a_state,s_fina)
+ else
+ warning(last,"fina")
+ setprop(last,a_state,s_error)
+ end
+ first,last=nil,nil
+ elseif first then
+ if c_first==s_medi or c_first==s_fina then
+ setprop(first,a_state,s_isol)
+ else
+ warning(first,"isol")
+ setprop(first,a_state,s_error)
+ end
+ first=nil
+ end
+ elseif classifier==s_mark then
+ setprop(current,a_state,s_mark)
+ elseif classifier==s_isol then
+ if last then
+ if c_last==s_medi or c_last==s_fina then
+ setprop(last,a_state,s_fina)
+ else
+ warning(last,"fina")
+ setprop(last,a_state,s_error)
+ end
+ first,last=nil,nil
+ elseif first then
+ if c_first==s_medi or c_first==s_fina then
+ setprop(first,a_state,s_isol)
+ else
+ warning(first,"isol")
+ setprop(first,a_state,s_error)
+ end
+ first=nil
+ end
+ setprop(current,a_state,s_isol)
+ elseif classifier==s_medi then
+ if first then
+ last=current
+ c_last=classifier
+ setprop(current,a_state,s_medi)
+ else
+ setprop(current,a_state,s_init)
+ first=current
+ c_first=classifier
+ end
+ elseif classifier==s_fina then
+ if last then
+ if getprop(last,a_state)~=s_init then
+ setprop(last,a_state,s_medi)
+ end
+ setprop(current,a_state,s_fina)
+ first,last=nil,nil
+ elseif first then
+ setprop(current,a_state,s_fina)
+ first=nil
+ else
+ setprop(current,a_state,s_isol)
+ end
+ else
+ setprop(current,a_state,s_rest)
+ if last then
+ if c_last==s_medi or c_last==s_fina then
+ setprop(last,a_state,s_fina)
+ else
+ warning(last,"fina")
+ setprop(last,a_state,s_error)
+ end
+ first,last=nil,nil
+ elseif first then
+ if c_first==s_medi or c_first==s_fina then
+ setprop(first,a_state,s_isol)
+ else
+ warning(first,"isol")
+ setprop(first,a_state,s_error)
+ end
+ first=nil
+ end
+ end
+ else
+ if last then
+ if c_last==s_medi or c_last==s_fina then
+ setprop(last,a_state,s_fina)
+ else
+ warning(last,"fina")
+ setprop(last,a_state,s_error)
+ end
+ first,last=nil,nil
+ elseif first then
+ if c_first==s_medi or c_first==s_fina then
+ setprop(first,a_state,s_isol)
+ else
+ warning(first,"isol")
+ setprop(first,a_state,s_error)
+ end
+ first=nil
+ end
+ if id==math_code then
+ current=end_of_math(current)
+ end
+ end
+ current=getnext(current)
+ end
+ if last then
+ if c_last==s_medi or c_last==s_fina then
+ setprop(last,a_state,s_fina)
+ else
+ warning(last,"fina")
+ setprop(last,a_state,s_error)
+ end
+ elseif first then
+ if c_first==s_medi or c_first==s_fina then
+ setprop(first,a_state,s_isol)
+ else
+ warning(first,"isol")
+ setprop(first,a_state,s_error)
+ end
+ end
+ return head,done
+end
+methods.syrc=methods.arab
+methods.mand=methods.arab
+methods.nko=methods.arab
+directives.register("otf.analyze.useunicodemarks",function(v)
+ analyzers.useunicodemarks=v
+end)
+
+end --- [luaotfload, fontloader-2017-02-11.lua scope for “font-otaâ€] ---
+
+
+do --- [luaotfload, fontloader-2017-02-11.lua scope for “font-ots†7e1e55f9f728474372665e4a64a43f5a] ---
+
+if not modules then modules={} end modules ['font-ots']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files",
+}
+local type,next,tonumber=type,next,tonumber
+local random=math.random
+local formatters=string.formatters
+local insert=table.insert
+local logs,trackers,nodes,attributes=logs,trackers,nodes,attributes
+local registertracker=trackers.register
+local registerdirective=directives.register
+local fonts=fonts
+local otf=fonts.handlers.otf
+local trace_lookups=false registertracker("otf.lookups",function(v) trace_lookups=v end)
+local trace_singles=false registertracker("otf.singles",function(v) trace_singles=v end)
+local trace_multiples=false registertracker("otf.multiples",function(v) trace_multiples=v end)
+local trace_alternatives=false registertracker("otf.alternatives",function(v) trace_alternatives=v end)
+local trace_ligatures=false registertracker("otf.ligatures",function(v) trace_ligatures=v end)
+local trace_contexts=false registertracker("otf.contexts",function(v) trace_contexts=v end)
+local trace_marks=false registertracker("otf.marks",function(v) trace_marks=v end)
+local trace_kerns=false registertracker("otf.kerns",function(v) trace_kerns=v end)
+local trace_cursive=false registertracker("otf.cursive",function(v) trace_cursive=v end)
+local trace_preparing=false registertracker("otf.preparing",function(v) trace_preparing=v end)
+local trace_bugs=false registertracker("otf.bugs",function(v) trace_bugs=v end)
+local trace_details=false registertracker("otf.details",function(v) trace_details=v end)
+local trace_steps=false registertracker("otf.steps",function(v) trace_steps=v end)
+local trace_skips=false registertracker("otf.skips",function(v) trace_skips=v end)
+local trace_directions=false registertracker("otf.directions",function(v) trace_directions=v end)
+local trace_plugins=false registertracker("otf.plugins",function(v) trace_plugins=v end)
+local trace_kernruns=false registertracker("otf.kernruns",function(v) trace_kernruns=v end)
+local trace_discruns=false registertracker("otf.discruns",function(v) trace_discruns=v end)
+local trace_compruns=false registertracker("otf.compruns",function(v) trace_compruns=v end)
+local trace_testruns=false registertracker("otf.testruns",function(v) trace_testruns=v end)
+local optimizekerns=true
+local alwaysdisc=true registerdirective("otf.alwaysdisc",function(v) alwaysdisc=v end)
+local report_direct=logs.reporter("fonts","otf direct")
+local report_subchain=logs.reporter("fonts","otf subchain")
+local report_chain=logs.reporter("fonts","otf chain")
+local report_process=logs.reporter("fonts","otf process")
+local report_warning=logs.reporter("fonts","otf warning")
+local report_run=logs.reporter("fonts","otf run")
+registertracker("otf.replacements","otf.singles,otf.multiples,otf.alternatives,otf.ligatures")
+registertracker("otf.positions","otf.marks,otf.kerns,otf.cursive")
+registertracker("otf.actions","otf.replacements,otf.positions")
+registertracker("otf.injections","nodes.injections")
+registertracker("*otf.sample","otf.steps,otf.actions,otf.analyzing")
+local nuts=nodes.nuts
+local tonode=nuts.tonode
+local tonut=nuts.tonut
+local getfield=nuts.getfield
+local setfield=nuts.setfield
+local getnext=nuts.getnext
+local setnext=nuts.setnext
+local getprev=nuts.getprev
+local setprev=nuts.setprev
+local getboth=nuts.getboth
+local setboth=nuts.setboth
+local getid=nuts.getid
+local getattr=nuts.getattr
+local setattr=nuts.setattr
+local getprop=nuts.getprop
+local setprop=nuts.setprop
+local getfont=nuts.getfont
+local getsubtype=nuts.getsubtype
+local setsubtype=nuts.setsubtype
+local getchar=nuts.getchar
+local setchar=nuts.setchar
+local getdisc=nuts.getdisc
+local setdisc=nuts.setdisc
+local setlink=nuts.setlink
+local ischar=nuts.is_char
+local insert_node_after=nuts.insert_after
+local copy_node=nuts.copy
+local copy_node_list=nuts.copy_list
+local find_node_tail=nuts.tail
+local flush_node_list=nuts.flush_list
+local flush_node=nuts.flush_node
+local end_of_math=nuts.end_of_math
+local traverse_nodes=nuts.traverse
+local traverse_id=nuts.traverse_id
+local remove_node=nuts.remove
+local setmetatableindex=table.setmetatableindex
+local zwnj=0x200C
+local zwj=0x200D
+local wildcard="*"
+local default="dflt"
+local nodecodes=nodes.nodecodes
+local glyphcodes=nodes.glyphcodes
+local disccodes=nodes.disccodes
+local glyph_code=nodecodes.glyph
+local glue_code=nodecodes.glue
+local disc_code=nodecodes.disc
+local math_code=nodecodes.math
+local dir_code=nodecodes.dir
+local localpar_code=nodecodes.localpar
+local discretionary_code=disccodes.discretionary
+local ligature_code=glyphcodes.ligature
+local privateattribute=attributes.private
+local a_state=privateattribute('state')
+local injections=nodes.injections
+local setmark=injections.setmark
+local setcursive=injections.setcursive
+local setkern=injections.setkern
+local setpair=injections.setpair
+local resetinjection=injections.reset
+local copyinjection=injections.copy
+local setligaindex=injections.setligaindex
+local getligaindex=injections.getligaindex
+local cursonce=true
+local fonthashes=fonts.hashes
+local fontdata=fonthashes.identifiers
+local fontfeatures=fonthashes.features
+local otffeatures=fonts.constructors.features.otf
+local registerotffeature=otffeatures.register
+local onetimemessage=fonts.loggers.onetimemessage or function() end
+local getrandom=utilities and utilities.randomizer and utilities.randomizer.get
+otf.defaultnodealternate="none"
+local tfmdata=false
+local characters=false
+local descriptions=false
+local marks=false
+local currentfont=false
+local factor=0
+local threshold=0
+local checkmarks=false
+local sweepnode=nil
+local sweepprev=nil
+local sweepnext=nil
+local sweephead={}
+local notmatchpre={}
+local notmatchpost={}
+local notmatchreplace={}
+local handlers={}
+local isspace=injections.isspace
+local getthreshold=injections.getthreshold
+local checkstep=(nodes and nodes.tracers and nodes.tracers.steppers.check) or function() end
+local registerstep=(nodes and nodes.tracers and nodes.tracers.steppers.register) or function() end
+local registermessage=(nodes and nodes.tracers and nodes.tracers.steppers.message) or function() end
+local function checkdisccontent(d)
+ local pre,post,replace=getdisc(d)
+ if pre then for n in traverse_id(glue_code,pre) do print("pre",nodes.idstostring(pre)) break end end
+ if post then for n in traverse_id(glue_code,post) do print("pos",nodes.idstostring(post)) break end end
+ if replace then for n in traverse_id(glue_code,replace) do print("rep",nodes.idstostring(replace)) break end end
+end
+local function logprocess(...)
+ if trace_steps then
+ registermessage(...)
+ end
+ report_direct(...)
+end
+local function logwarning(...)
+ report_direct(...)
+end
+local f_unicode=formatters["%U"]
+local f_uniname=formatters["%U (%s)"]
+local f_unilist=formatters["% t (% t)"]
+local function gref(n)
+ if type(n)=="number" then
+ local description=descriptions[n]
+ local name=description and description.name
+ if name then
+ return f_uniname(n,name)
+ else
+ return f_unicode(n)
+ end
+ elseif n then
+ local num,nam={},{}
+ for i=1,#n do
+ local ni=n[i]
+ if tonumber(ni) then
+ local di=descriptions[ni]
+ num[i]=f_unicode(ni)
+ nam[i]=di and di.name or "-"
+ end
+ end
+ return f_unilist(num,nam)
+ else
+ return "<error in node mode tracing>"
+ end
+end
+local function cref(dataset,sequence,index)
+ if not dataset then
+ return "no valid dataset"
+ elseif index then
+ return formatters["feature %a, type %a, chain lookup %a, index %a"](dataset[4],sequence.type,sequence.name,index)
+ else
+ return formatters["feature %a, type %a, chain lookup %a"](dataset[4],sequence.type,sequence.name)
+ end
+end
+local function pref(dataset,sequence)
+ return formatters["feature %a, type %a, lookup %a"](dataset[4],sequence.type,sequence.name)
+end
+local function mref(rlmode)
+ if not rlmode or rlmode==0 then
+ return "---"
+ elseif rlmode==-1 or rlmode=="+TRT" then
+ return "r2l"
+ else
+ return "l2r"
+ end
+end
+local function copy_glyph(g)
+ local components=getfield(g,"components")
+ if components then
+ setfield(g,"components")
+ local n=copy_node(g)
+ copyinjection(n,g)
+ setfield(g,"components",components)
+ return n
+ else
+ local n=copy_node(g)
+ copyinjection(n,g)
+ return n
+ end
+end
+local function flattendisk(head,disc)
+ local pre,post,replace,pretail,posttail,replacetail=getdisc(disc,true)
+ local prev,next=getboth(disc)
+ local ishead=head==disc
+ setdisc(disc)
+ flush_node(disc)
+ if pre then
+ flush_node_list(pre)
+ end
+ if post then
+ flush_node_list(post)
+ end
+ if ishead then
+ if replace then
+ if next then
+ setlink(replacetail,next)
+ end
+ return replace,replace
+ elseif next then
+ return next,next
+ else
+ return
+ end
+ else
+ if replace then
+ if next then
+ setlink(replacetail,next)
+ end
+ setlink(prev,replace)
+ return head,replace
+ else
+ setlink(prev,next)
+ return head,next
+ end
+ end
+end
+local function appenddisc(disc,list)
+ local pre,post,replace,pretail,posttail,replacetail=getdisc(disc,true)
+ local posthead=list
+ local replacehead=copy_node_list(list)
+ if post then
+ setlink(posttail,posthead)
+ else
+ post=phead
+ end
+ if replace then
+ setlink(replacetail,replacehead)
+ else
+ replace=rhead
+ end
+ setdisc(disc,pre,post,replace)
+end
+local function markstoligature(head,start,stop,char)
+ if start==stop and getchar(start)==char then
+ return head,start
+ else
+ local prev=getprev(start)
+ local next=getnext(stop)
+ setprev(start)
+ setnext(stop)
+ local base=copy_glyph(start)
+ if head==start then
+ head=base
+ end
+ resetinjection(base)
+ setchar(base,char)
+ setsubtype(base,ligature_code)
+ setfield(base,"components",start)
+ setlink(prev,base)
+ setlink(base,next)
+ return head,base
+ end
+end
+local function getcomponentindex(start)
+ if getid(start)~=glyph_code then
+ return 0
+ elseif getsubtype(start)==ligature_code then
+ local i=0
+ local components=getfield(start,"components")
+ while components do
+ i=i+getcomponentindex(components)
+ components=getnext(components)
+ end
+ return i
+ elseif not marks[getchar(start)] then
+ return 1
+ else
+ return 0
+ end
+end
+local a_noligature=attributes.private("noligature")
+local function toligature(head,start,stop,char,dataset,sequence,markflag,discfound)
+ if getattr(start,a_noligature)==1 then
+ return head,start
+ end
+ if start==stop and getchar(start)==char then
+ resetinjection(start)
+ setchar(start,char)
+ return head,start
+ end
+ local components=getfield(start,"components")
+ if components then
+ end
+ local prev=getprev(start)
+ local next=getnext(stop)
+ local comp=start
+ setprev(start)
+ setnext(stop)
+ local base=copy_glyph(start)
+ if start==head then
+ head=base
+ end
+ resetinjection(base)
+ setchar(base,char)
+ setsubtype(base,ligature_code)
+ setfield(base,"components",comp)
+ if prev then
+ setnext(prev,base)
+ end
+ if next then
+ setprev(next,base)
+ end
+ setboth(base,prev,next)
+ if not discfound then
+ local deletemarks=markflag~="mark"
+ local components=start
+ local baseindex=0
+ local componentindex=0
+ local head=base
+ local current=base
+ while start do
+ local char=getchar(start)
+ if not marks[char] then
+ baseindex=baseindex+componentindex
+ componentindex=getcomponentindex(start)
+ elseif not deletemarks then
+ setligaindex(start,baseindex+getligaindex(start,componentindex))
+ if trace_marks then
+ logwarning("%s: keep mark %s, gets index %s",pref(dataset,sequence),gref(char),getligaindex(start))
+ end
+ local n=copy_node(start)
+ copyinjection(n,start)
+ head,current=insert_node_after(head,current,n)
+ elseif trace_marks then
+ logwarning("%s: delete mark %s",pref(dataset,sequence),gref(char))
+ end
+ start=getnext(start)
+ end
+ local start=getnext(current)
+ while start do
+ local char=ischar(start)
+ if char then
+ if marks[char] then
+ setligaindex(start,baseindex+getligaindex(start,componentindex))
+ if trace_marks then
+ logwarning("%s: set mark %s, gets index %s",pref(dataset,sequence),gref(char),getligaindex(start))
+ end
+ start=getnext(start)
+ else
+ break
+ end
+ else
+ break
+ end
+ end
+ else
+ local discprev,discnext=getboth(discfound)
+ if discprev and discnext then
+ local pre,post,replace,pretail,posttail,replacetail=getdisc(discfound,true)
+ if not replace then
+ local prev=getprev(base)
+ local current=comp
+ local previous=nil
+ local copied=nil
+ while current do
+ if getid(current)==glyph_code then
+ local n=copy_node(current)
+ if copied then
+ setlink(previous,n)
+ else
+ copied=n
+ end
+ previous=n
+ end
+ current=getnext(current)
+ end
+ setprev(discnext)
+ setnext(discprev)
+ if pre then
+ setlink(discprev,pre)
+ end
+ pre=comp
+ if post then
+ setlink(posttail,discnext)
+ setprev(post)
+ else
+ post=discnext
+ end
+ setlink(prev,discfound)
+ setlink(discfound,next)
+ setboth(base)
+ setfield(base,"components",copied)
+ setdisc(discfound,pre,post,base)
+ base=prev
+ end
+ end
+ end
+ return head,base
+end
+local function multiple_glyphs(head,start,multiple,ignoremarks,what)
+ local nofmultiples=#multiple
+ if nofmultiples>0 then
+ resetinjection(start)
+ setchar(start,multiple[1])
+ if nofmultiples>1 then
+ local sn=getnext(start)
+ for k=2,nofmultiples do
+ local n=copy_node(start)
+ resetinjection(n)
+ setchar(n,multiple[k])
+ insert_node_after(head,start,n)
+ start=n
+ end
+ if what==true then
+ elseif what>1 then
+ local m=multiple[nofmultiples]
+ for i=2,what do
+ local n=copy_node(start)
+ resetinjection(n)
+ setchar(n,m)
+ insert_node_after(head,start,n)
+ start=n
+ end
+ end
+ end
+ return head,start,true
+ else
+ if trace_multiples then
+ logprocess("no multiple for %s",gref(getchar(start)))
+ end
+ return head,start,false
+ end
+end
+local function get_alternative_glyph(start,alternatives,value)
+ local n=#alternatives
+ if value=="random" then
+ local r=getrandom and getrandom("glyph",1,n) or random(1,n)
+ return alternatives[r],trace_alternatives and formatters["value %a, taking %a"](value,r)
+ elseif value=="first" then
+ return alternatives[1],trace_alternatives and formatters["value %a, taking %a"](value,1)
+ elseif value=="last" then
+ return alternatives[n],trace_alternatives and formatters["value %a, taking %a"](value,n)
+ end
+ value=value==true and 1 or tonumber(value)
+ if type(value)~="number" then
+ return alternatives[1],trace_alternatives and formatters["invalid value %s, taking %a"](value,1)
+ end
+ if value>n then
+ local defaultalt=otf.defaultnodealternate
+ if defaultalt=="first" then
+ return alternatives[n],trace_alternatives and formatters["invalid value %s, taking %a"](value,1)
+ elseif defaultalt=="last" then
+ return alternatives[1],trace_alternatives and formatters["invalid value %s, taking %a"](value,n)
+ else
+ return false,trace_alternatives and formatters["invalid value %a, %s"](value,"out of range")
+ end
+ elseif value==0 then
+ return getchar(start),trace_alternatives and formatters["invalid value %a, %s"](value,"no change")
+ elseif value<1 then
+ return alternatives[1],trace_alternatives and formatters["invalid value %a, taking %a"](value,1)
+ else
+ return alternatives[value],trace_alternatives and formatters["value %a, taking %a"](value,value)
+ end
+end
+function handlers.gsub_single(head,start,dataset,sequence,replacement)
+ if trace_singles then
+ logprocess("%s: replacing %s by single %s",pref(dataset,sequence),gref(getchar(start)),gref(replacement))
+ end
+ resetinjection(start)
+ setchar(start,replacement)
+ return head,start,true
+end
+function handlers.gsub_alternate(head,start,dataset,sequence,alternative)
+ local kind=dataset[4]
+ local what=dataset[1]
+ local value=what==true and tfmdata.shared.features[kind] or what
+ local choice,comment=get_alternative_glyph(start,alternative,value)
+ if choice then
+ if trace_alternatives then
+ logprocess("%s: replacing %s by alternative %a to %s, %s",pref(dataset,sequence),gref(getchar(start)),gref(choice),comment)
+ end
+ resetinjection(start)
+ setchar(start,choice)
+ else
+ if trace_alternatives then
+ logwarning("%s: no variant %a for %s, %s",pref(dataset,sequence),value,gref(getchar(start)),comment)
+ end
+ end
+ return head,start,true
+end
+function handlers.gsub_multiple(head,start,dataset,sequence,multiple)
+ if trace_multiples then
+ logprocess("%s: replacing %s by multiple %s",pref(dataset,sequence),gref(getchar(start)),gref(multiple))
+ end
+ return multiple_glyphs(head,start,multiple,sequence.flags[1],dataset[1])
+end
+function handlers.gsub_ligature(head,start,dataset,sequence,ligature)
+ local current=getnext(start)
+ if not current then
+ return head,start,false,nil
+ end
+ local stop=nil
+ local startchar=getchar(start)
+ if marks[startchar] then
+ while current do
+ local char=ischar(current,currentfont)
+ if char then
+ local lg=ligature[char]
+ if lg then
+ stop=current
+ ligature=lg
+ current=getnext(current)
+ else
+ break
+ end
+ else
+ break
+ end
+ end
+ if stop then
+ local lig=ligature.ligature
+ if lig then
+ if trace_ligatures then
+ local stopchar=getchar(stop)
+ head,start=markstoligature(head,start,stop,lig)
+ logprocess("%s: replacing %s upto %s by ligature %s case 1",pref(dataset,sequence),gref(startchar),gref(stopchar),gref(getchar(start)))
+ else
+ head,start=markstoligature(head,start,stop,lig)
+ end
+ return head,start,true,false
+ else
+ end
+ end
+ else
+ local skipmark=sequence.flags[1]
+ local discfound=false
+ local lastdisc=nil
+ while current do
+ local char,id=ischar(current,currentfont)
+ if char then
+ if skipmark and marks[char] then
+ current=getnext(current)
+ else
+ local lg=ligature[char]
+ if lg then
+ if not discfound and lastdisc then
+ discfound=lastdisc
+ lastdisc=nil
+ end
+ stop=current
+ ligature=lg
+ current=getnext(current)
+ else
+ break
+ end
+ end
+ elseif char==false then
+ break
+ elseif id==disc_code then
+ local replace=getfield(current,"replace")
+ if replace then
+ while replace do
+ local char,id=ischar(replace,currentfont)
+ if char then
+ local lg=ligature[char]
+ if lg then
+ ligature=lg
+ replace=getnext(replace)
+ else
+ return head,start,false,false
+ end
+ else
+ return head,start,false,false
+ end
+ end
+ stop=current
+ end
+ lastdisc=current
+ current=getnext(current)
+ else
+ break
+ end
+ end
+ local lig=ligature.ligature
+ if lig then
+ if stop then
+ if trace_ligatures then
+ local stopchar=getchar(stop)
+ head,start=toligature(head,start,stop,lig,dataset,sequence,skipmark,discfound)
+ logprocess("%s: replacing %s upto %s by ligature %s case 2",pref(dataset,sequence),gref(startchar),gref(stopchar),gref(lig))
+ else
+ head,start=toligature(head,start,stop,lig,dataset,sequence,skipmark,discfound)
+ end
+ else
+ resetinjection(start)
+ setchar(start,lig)
+ if trace_ligatures then
+ logprocess("%s: replacing %s by (no real) ligature %s case 3",pref(dataset,sequence),gref(startchar),gref(lig))
+ end
+ end
+ return head,start,true,discfound
+ else
+ end
+ end
+ return head,start,false,discfound
+end
+function handlers.gpos_single(head,start,dataset,sequence,kerns,rlmode,step,i,injection)
+ local startchar=getchar(start)
+ if step.format=="pair" then
+ local dx,dy,w,h=setpair(start,factor,rlmode,sequence.flags[4],kerns,injection)
+ if trace_kerns then
+ logprocess("%s: shifting single %s by (%p,%p) and correction (%p,%p)",pref(dataset,sequence),gref(startchar),dx,dy,w,h)
+ end
+ else
+ local k=setkern(start,factor,rlmode,kerns,injection)
+ if trace_kerns then
+ logprocess("%s: shifting single %s by %p",pref(dataset,sequence),gref(startchar),k)
+ end
+ end
+ return head,start,false
+end
+function handlers.gpos_pair(head,start,dataset,sequence,kerns,rlmode,step,i,injection)
+ local snext=getnext(start)
+ if not snext then
+ return head,start,false
+ else
+ local prev=start
+ local done=false
+ while snext do
+ local nextchar=ischar(snext,currentfont)
+ if nextchar then
+ local krn=kerns[nextchar]
+ if not krn and marks[nextchar] then
+ prev=snext
+ snext=getnext(snext)
+ elseif not krn then
+ break
+ elseif step.format=="pair" then
+ local a,b=krn[1],krn[2]
+ if optimizekerns then
+ if not b and a[1]==0 and a[2]==0 and a[4]==0 then
+ local k=setkern(snext,factor,rlmode,a[3],injection)
+ if trace_kerns then
+ logprocess("%s: shifting single %s by %p",pref(dataset,sequence),gref(nextchar),k)
+ end
+ done=true
+ break
+ end
+ end
+ if a and #a>0 then
+ local x,y,w,h=setpair(start,factor,rlmode,sequence.flags[4],a,injection)
+ if trace_kerns then
+ local startchar=getchar(start)
+ logprocess("%s: shifting first of pair %s and %s by (%p,%p) and correction (%p,%p) as %s",pref(dataset,sequence),gref(startchar),gref(nextchar),x,y,w,h,injection or "injections")
+ end
+ end
+ if b and #b>0 then
+ local x,y,w,h=setpair(snext,factor,rlmode,sequence.flags[4],b,injection)
+ if trace_kerns then
+ local startchar=getchar(snext)
+ logprocess("%s: shifting second of pair %s and %s by (%p,%p) and correction (%p,%p) as %s",pref(dataset,sequence),gref(startchar),gref(nextchar),x,y,w,h,injection or "injections")
+ end
+ end
+ done=true
+ break
+ elseif krn~=0 then
+ local k=setkern(snext,factor,rlmode,krn,injection)
+ if trace_kerns then
+ logprocess("%s: inserting kern %p between %s and %s as %s",pref(dataset,sequence),k,gref(getchar(prev)),gref(nextchar),injection or "injections")
+ end
+ done=true
+ break
+ else
+ break
+ end
+ else
+ break
+ end
+ end
+ return head,start,done
+ end
+end
+function handlers.gpos_mark2base(head,start,dataset,sequence,markanchors,rlmode)
+ local markchar=getchar(start)
+ if marks[markchar] then
+ local base=getprev(start)
+ if base then
+ local basechar=ischar(base,currentfont)
+ if basechar then
+ if marks[basechar] then
+ while base do
+ base=getprev(base)
+ if base then
+ basechar=ischar(base,currentfont)
+ if basechar then
+ if not marks[basechar] then
+ break
+ end
+ else
+ if trace_bugs then
+ logwarning("%s: no base for mark %s, case %i",pref(dataset,sequence),gref(markchar),1)
+ end
+ return head,start,false
+ end
+ else
+ if trace_bugs then
+ logwarning("%s: no base for mark %s, case %i",pref(dataset,sequence),gref(markchar),2)
+ end
+ return head,start,false
+ end
+ end
+ end
+ local ba=markanchors[1][basechar]
+ if ba then
+ local ma=markanchors[2]
+ local dx,dy,bound=setmark(start,base,factor,rlmode,ba,ma,characters[basechar],false,checkmarks)
+ if trace_marks then
+ logprocess("%s, anchor %s, bound %s: anchoring mark %s to basechar %s => (%p,%p)",
+ pref(dataset,sequence),anchor,bound,gref(markchar),gref(basechar),dx,dy)
+ end
+ return head,start,true
+ end
+ elseif trace_bugs then
+ logwarning("%s: nothing preceding, case %i",pref(dataset,sequence),1)
+ end
+ elseif trace_bugs then
+ logwarning("%s: nothing preceding, case %i",pref(dataset,sequence),2)
+ end
+ elseif trace_bugs then
+ logwarning("%s: mark %s is no mark",pref(dataset,sequence),gref(markchar))
+ end
+ return head,start,false
+end
+function handlers.gpos_mark2ligature(head,start,dataset,sequence,markanchors,rlmode)
+ local markchar=getchar(start)
+ if marks[markchar] then
+ local base=getprev(start)
+ if base then
+ local basechar=ischar(base,currentfont)
+ if basechar then
+ if marks[basechar] then
+ while base do
+ base=getprev(base)
+ if base then
+ basechar=ischar(base,currentfont)
+ if basechar then
+ if not marks[basechar] then
+ break
+ end
+ else
+ if trace_bugs then
+ logwarning("%s: no base for mark %s, case %i",pref(dataset,sequence),gref(markchar),1)
+ end
+ return head,start,false
+ end
+ else
+ if trace_bugs then
+ logwarning("%s: no base for mark %s, case %i",pref(dataset,sequence),gref(markchar),2)
+ end
+ return head,start,false
+ end
+ end
+ end
+ local ba=markanchors[1][basechar]
+ if ba then
+ local ma=markanchors[2]
+ if ma then
+ local index=getligaindex(start)
+ ba=ba[index]
+ if ba then
+ local dx,dy,bound=setmark(start,base,factor,rlmode,ba,ma,characters[basechar],false,checkmarks)
+ if trace_marks then
+ logprocess("%s, anchor %s, index %s, bound %s: anchoring mark %s to baselig %s at index %s => (%p,%p)",
+ pref(dataset,sequence),anchor,index,bound,gref(markchar),gref(basechar),index,dx,dy)
+ end
+ return head,start,true
+ else
+ if trace_bugs then
+ logwarning("%s: no matching anchors for mark %s and baselig %s with index %a",pref(dataset,sequence),gref(markchar),gref(basechar),index)
+ end
+ end
+ end
+ elseif trace_bugs then
+ onetimemessage(currentfont,basechar,"no base anchors",report_fonts)
+ end
+ elseif trace_bugs then
+ logwarning("%s: prev node is no char, case %i",pref(dataset,sequence),1)
+ end
+ elseif trace_bugs then
+ logwarning("%s: prev node is no char, case %i",pref(dataset,sequence),2)
+ end
+ elseif trace_bugs then
+ logwarning("%s: mark %s is no mark",pref(dataset,sequence),gref(markchar))
+ end
+ return head,start,false
+end
+function handlers.gpos_mark2mark(head,start,dataset,sequence,markanchors,rlmode)
+ local markchar=getchar(start)
+ if marks[markchar] then
+ local base=getprev(start)
+ local slc=getligaindex(start)
+ if slc then
+ while base do
+ local blc=getligaindex(base)
+ if blc and blc~=slc then
+ base=getprev(base)
+ else
+ break
+ end
+ end
+ end
+ if base then
+ local basechar=ischar(base,currentfont)
+ if basechar then
+ local ba=markanchors[1][basechar]
+ if ba then
+ local ma=markanchors[2]
+ local dx,dy,bound=setmark(start,base,factor,rlmode,ba,ma,characters[basechar],true,checkmarks)
+ if trace_marks then
+ logprocess("%s, anchor %s, bound %s: anchoring mark %s to basemark %s => (%p,%p)",
+ pref(dataset,sequence),anchor,bound,gref(markchar),gref(basechar),dx,dy)
+ end
+ return head,start,true
+ end
+ end
+ end
+ elseif trace_bugs then
+ logwarning("%s: mark %s is no mark",pref(dataset,sequence),gref(markchar))
+ end
+ return head,start,false
+end
+function handlers.gpos_cursive(head,start,dataset,sequence,exitanchors,rlmode,step,i)
+ local done=false
+ local startchar=getchar(start)
+ if marks[startchar] then
+ if trace_cursive then
+ logprocess("%s: ignoring cursive for mark %s",pref(dataset,sequence),gref(startchar))
+ end
+ else
+ local nxt=getnext(start)
+ while not done and nxt do
+ local nextchar=ischar(nxt,currentfont)
+ if not nextchar then
+ break
+ elseif marks[nextchar] then
+ nxt=getnext(nxt)
+ else
+ local exit=exitanchors[3]
+ if exit then
+ local entry=exitanchors[1][nextchar]
+ if entry then
+ entry=entry[2]
+ if entry then
+ local dx,dy,bound=setcursive(start,nxt,factor,rlmode,exit,entry,characters[startchar],characters[nextchar])
+ if trace_cursive then
+ logprocess("%s: moving %s to %s cursive (%p,%p) using anchor %s and bound %s in %s mode",pref(dataset,sequence),gref(startchar),gref(nextchar),dx,dy,anchor,bound,mref(rlmode))
+ end
+ done=true
+ end
+ end
+ end
+ break
+ end
+ end
+ end
+ return head,start,done
+end
+local chainprocs={}
+local function logprocess(...)
+ if trace_steps then
+ registermessage(...)
+ end
+ report_subchain(...)
+end
+local logwarning=report_subchain
+local function logprocess(...)
+ if trace_steps then
+ registermessage(...)
+ end
+ report_chain(...)
+end
+local logwarning=report_chain
+local function reversesub(head,start,stop,dataset,sequence,replacements,rlmode)
+ local char=getchar(start)
+ local replacement=replacements[char]
+ if replacement then
+ if trace_singles then
+ logprocess("%s: single reverse replacement of %s by %s",cref(dataset,sequence),gref(char),gref(replacement))
+ end
+ resetinjection(start)
+ setchar(start,replacement)
+ return head,start,true
+ else
+ return head,start,false
+ end
+end
+chainprocs.reversesub=reversesub
+local function reportmoresteps(dataset,sequence)
+ logwarning("%s: more than 1 step",cref(dataset,sequence))
+end
+function chainprocs.gsub_single(head,start,stop,dataset,sequence,currentlookup,chainindex)
+ local steps=currentlookup.steps
+ local nofsteps=currentlookup.nofsteps
+ if nofsteps>1 then
+ reportmoresteps(dataset,sequence)
+ end
+ local current=start
+ while current do
+ local currentchar=ischar(current)
+ if currentchar then
+ local replacement=steps[1].coverage[currentchar]
+ if not replacement or replacement=="" then
+ if trace_bugs then
+ logwarning("%s: no single for %s",cref(dataset,sequence,chainindex),gref(currentchar))
+ end
+ else
+ if trace_singles then
+ logprocess("%s: replacing single %s by %s",cref(dataset,sequence,chainindex),gref(currentchar),gref(replacement))
+ end
+ resetinjection(current)
+ setchar(current,replacement)
+ end
+ return head,start,true
+ elseif currentchar==false then
+ break
+ elseif current==stop then
+ break
+ else
+ current=getnext(current)
+ end
+ end
+ return head,start,false
+end
+function chainprocs.gsub_multiple(head,start,stop,dataset,sequence,currentlookup)
+ local steps=currentlookup.steps
+ local nofsteps=currentlookup.nofsteps
+ if nofsteps>1 then
+ reportmoresteps(dataset,sequence)
+ end
+ local startchar=getchar(start)
+ local replacement=steps[1].coverage[startchar]
+ if not replacement or replacement=="" then
+ if trace_bugs then
+ logwarning("%s: no multiple for %s",cref(dataset,sequence),gref(startchar))
+ end
+ else
+ if trace_multiples then
+ logprocess("%s: replacing %s by multiple characters %s",cref(dataset,sequence),gref(startchar),gref(replacement))
+ end
+ return multiple_glyphs(head,start,replacement,sequence.flags[1],dataset[1])
+ end
+ return head,start,false
+end
+function chainprocs.gsub_alternate(head,start,stop,dataset,sequence,currentlookup)
+ local steps=currentlookup.steps
+ local nofsteps=currentlookup.nofsteps
+ if nofsteps>1 then
+ reportmoresteps(dataset,sequence)
+ end
+ local kind=dataset[4]
+ local what=dataset[1]
+ local value=what==true and tfmdata.shared.features[kind] or what
+ local current=start
+ while current do
+ local currentchar=ischar(current)
+ if currentchar then
+ local alternatives=steps[1].coverage[currentchar]
+ if alternatives then
+ local choice,comment=get_alternative_glyph(current,alternatives,value)
+ if choice then
+ if trace_alternatives then
+ logprocess("%s: replacing %s by alternative %a to %s, %s",cref(dataset,sequence),gref(char),choice,gref(choice),comment)
+ end
+ resetinjection(start)
+ setchar(start,choice)
+ else
+ if trace_alternatives then
+ logwarning("%s: no variant %a for %s, %s",cref(dataset,sequence),value,gref(char),comment)
+ end
+ end
+ end
+ return head,start,true
+ elseif currentchar==false then
+ break
+ elseif current==stop then
+ break
+ else
+ current=getnext(current)
+ end
+ end
+ return head,start,false
+end
+function chainprocs.gsub_ligature(head,start,stop,dataset,sequence,currentlookup,chainindex)
+ local steps=currentlookup.steps
+ local nofsteps=currentlookup.nofsteps
+ if nofsteps>1 then
+ reportmoresteps(dataset,sequence)
+ end
+ local startchar=getchar(start)
+ local ligatures=steps[1].coverage[startchar]
+ if not ligatures then
+ if trace_bugs then
+ logwarning("%s: no ligatures starting with %s",cref(dataset,sequence,chainindex),gref(startchar))
+ end
+ else
+ local current=getnext(start)
+ local discfound=false
+ local last=stop
+ local nofreplacements=1
+ local skipmark=currentlookup.flags[1]
+ while current do
+ local id=getid(current)
+ if id==disc_code then
+ if not discfound then
+ discfound=current
+ end
+ if current==stop then
+ break
+ else
+ current=getnext(current)
+ end
+ else
+ local schar=getchar(current)
+ if skipmark and marks[schar] then
+ current=getnext(current)
+ else
+ local lg=ligatures[schar]
+ if lg then
+ ligatures=lg
+ last=current
+ nofreplacements=nofreplacements+1
+ if current==stop then
+ break
+ else
+ current=getnext(current)
+ end
+ else
+ break
+ end
+ end
+ end
+ end
+ local ligature=ligatures.ligature
+ if ligature then
+ if chainindex then
+ stop=last
+ end
+ if trace_ligatures then
+ if start==stop then
+ logprocess("%s: replacing character %s by ligature %s case 3",cref(dataset,sequence,chainindex),gref(startchar),gref(ligature))
+ else
+ logprocess("%s: replacing character %s upto %s by ligature %s case 4",cref(dataset,sequence,chainindex),gref(startchar),gref(getchar(stop)),gref(ligature))
+ end
+ end
+ head,start=toligature(head,start,stop,ligature,dataset,sequence,skipmark,discfound)
+ return head,start,true,nofreplacements,discfound
+ elseif trace_bugs then
+ if start==stop then
+ logwarning("%s: replacing character %s by ligature fails",cref(dataset,sequence,chainindex),gref(startchar))
+ else
+ logwarning("%s: replacing character %s upto %s by ligature fails",cref(dataset,sequence,chainindex),gref(startchar),gref(getchar(stop)))
+ end
+ end
+ end
+ return head,start,false,0,false
+end
+function chainprocs.gpos_single(head,start,stop,dataset,sequence,currentlookup,rlmode,chainindex)
+ local steps=currentlookup.steps
+ local nofsteps=currentlookup.nofsteps
+ if nofsteps>1 then
+ reportmoresteps(dataset,sequence)
+ end
+ local startchar=getchar(start)
+ local step=steps[1]
+ local kerns=step.coverage[startchar]
+ if not kerns then
+ elseif step.format=="pair" then
+ local dx,dy,w,h=setpair(start,factor,rlmode,sequence.flags[4],kerns)
+ if trace_kerns then
+ logprocess("%s: shifting single %s by (%p,%p) and correction (%p,%p)",cref(dataset,sequence),gref(startchar),dx,dy,w,h)
+ end
+ else
+ local k=setkern(start,factor,rlmode,kerns,injection)
+ if trace_kerns then
+ logprocess("%s: shifting single %s by %p",cref(dataset,sequence),gref(startchar),k)
+ end
+ end
+ return head,start,false
+end
+function chainprocs.gpos_pair(head,start,stop,dataset,sequence,currentlookup,rlmode,chainindex)
+ local steps=currentlookup.steps
+ local nofsteps=currentlookup.nofsteps
+ if nofsteps>1 then
+ reportmoresteps(dataset,sequence)
+ end
+ local snext=getnext(start)
+ if snext then
+ local startchar=getchar(start)
+ local step=steps[1]
+ local kerns=step.coverage[startchar]
+ if kerns then
+ local prev=start
+ local done=false
+ while snext do
+ local nextchar=ischar(snext,currentfont)
+ if not nextchar then
+ break
+ end
+ local krn=kerns[nextchar]
+ if not krn and marks[nextchar] then
+ prev=snext
+ snext=getnext(snext)
+ elseif not krn then
+ break
+ elseif step.format=="pair" then
+ local a,b=krn[1],krn[2]
+ if optimizekerns then
+ if not b and a[1]==0 and a[2]==0 and a[4]==0 then
+ local k=setkern(snext,factor,rlmode,a[3],"injections")
+ if trace_kerns then
+ logprocess("%s: shifting single %s by %p",cref(dataset,sequence),gref(startchar),k)
+ end
+ done=true
+ break
+ end
+ end
+ if a and #a>0 then
+ local startchar=getchar(start)
+ local x,y,w,h=setpair(start,factor,rlmode,sequence.flags[4],a,"injections")
+ if trace_kerns then
+ logprocess("%s: shifting first of pair %s and %s by (%p,%p) and correction (%p,%p)",cref(dataset,sequence),gref(startchar),gref(nextchar),x,y,w,h)
+ end
+ end
+ if b and #b>0 then
+ local startchar=getchar(start)
+ local x,y,w,h=setpair(snext,factor,rlmode,sequence.flags[4],b,"injections")
+ if trace_kerns then
+ logprocess("%s: shifting second of pair %s and %s by (%p,%p) and correction (%p,%p)",cref(dataset,sequence),gref(startchar),gref(nextchar),x,y,w,h)
+ end
+ end
+ done=true
+ break
+ elseif krn~=0 then
+ local k=setkern(snext,factor,rlmode,krn)
+ if trace_kerns then
+ logprocess("%s: inserting kern %s between %s and %s",cref(dataset,sequence),k,gref(getchar(prev)),gref(nextchar))
+ end
+ done=true
+ break
+ else
+ break
+ end
+ end
+ return head,start,done
+ end
+ end
+ return head,start,false
+end
+function chainprocs.gpos_mark2base(head,start,stop,dataset,sequence,currentlookup,rlmode)
+ local steps=currentlookup.steps
+ local nofsteps=currentlookup.nofsteps
+ if nofsteps>1 then
+ reportmoresteps(dataset,sequence)
+ end
+ local markchar=getchar(start)
+ if marks[markchar] then
+ local markanchors=steps[1].coverage[markchar]
+ if markanchors then
+ local base=getprev(start)
+ if base then
+ local basechar=ischar(base,currentfont)
+ if basechar then
+ if marks[basechar] then
+ while base do
+ base=getprev(base)
+ if base then
+ local basechar=ischar(base,currentfont)
+ if basechar then
+ if not marks[basechar] then
+ break
+ end
+ else
+ if trace_bugs then
+ logwarning("%s: no base for mark %s, case %i",pref(dataset,sequence),gref(markchar),1)
+ end
+ return head,start,false
+ end
+ else
+ if trace_bugs then
+ logwarning("%s: no base for mark %s, case %i",pref(dataset,sequence),gref(markchar),2)
+ end
+ return head,start,false
+ end
+ end
+ end
+ local ba=markanchors[1][basechar]
+ if ba then
+ local ma=markanchors[2]
+ if ma then
+ local dx,dy,bound=setmark(start,base,factor,rlmode,ba,ma,characters[basechar],false,checkmarks)
+ if trace_marks then
+ logprocess("%s, anchor %s, bound %s: anchoring mark %s to basechar %s => (%p,%p)",
+ cref(dataset,sequence),anchor,bound,gref(markchar),gref(basechar),dx,dy)
+ end
+ return head,start,true
+ end
+ end
+ elseif trace_bugs then
+ logwarning("%s: prev node is no char, case %i",cref(dataset,sequence),1)
+ end
+ elseif trace_bugs then
+ logwarning("%s: prev node is no char, case %i",cref(dataset,sequence),2)
+ end
+ elseif trace_bugs then
+ logwarning("%s: mark %s has no anchors",cref(dataset,sequence),gref(markchar))
+ end
+ elseif trace_bugs then
+ logwarning("%s: mark %s is no mark",cref(dataset,sequence),gref(markchar))
+ end
+ return head,start,false
+end
+function chainprocs.gpos_mark2ligature(head,start,stop,dataset,sequence,currentlookup,rlmode)
+ local steps=currentlookup.steps
+ local nofsteps=currentlookup.nofsteps
+ if nofsteps>1 then
+ reportmoresteps(dataset,sequence)
+ end
+ local markchar=getchar(start)
+ if marks[markchar] then
+ local markanchors=steps[1].coverage[markchar]
+ if markanchors then
+ local base=getprev(start)
+ if base then
+ local basechar=ischar(base,currentfont)
+ if basechar then
+ if marks[basechar] then
+ while base do
+ base=getprev(base)
+ if base then
+ local basechar=ischar(base,currentfont)
+ if basechar then
+ if not marks[basechar] then
+ break
+ end
+ else
+ if trace_bugs then
+ logwarning("%s: no base for mark %s, case %i",cref(dataset,sequence),markchar,1)
+ end
+ return head,start,false
+ end
+ else
+ if trace_bugs then
+ logwarning("%s: no base for mark %s, case %i",cref(dataset,sequence),markchar,2)
+ end
+ return head,start,false
+ end
+ end
+ end
+ local ba=markanchors[1][basechar]
+ if ba then
+ local ma=markanchors[2]
+ if ma then
+ local index=getligaindex(start)
+ ba=ba[index]
+ if ba then
+ local dx,dy,bound=setmark(start,base,factor,rlmode,ba,ma,characters[basechar],false,checkmarks)
+ if trace_marks then
+ logprocess("%s, anchor %s, bound %s: anchoring mark %s to baselig %s at index %s => (%p,%p)",
+ cref(dataset,sequence),anchor,a or bound,gref(markchar),gref(basechar),index,dx,dy)
+ end
+ return head,start,true
+ end
+ end
+ end
+ elseif trace_bugs then
+ logwarning("%s, prev node is no char, case %i",cref(dataset,sequence),1)
+ end
+ elseif trace_bugs then
+ logwarning("%s, prev node is no char, case %i",cref(dataset,sequence),2)
+ end
+ elseif trace_bugs then
+ logwarning("%s, mark %s has no anchors",cref(dataset,sequence),gref(markchar))
+ end
+ elseif trace_bugs then
+ logwarning("%s, mark %s is no mark",cref(dataset,sequence),gref(markchar))
+ end
+ return head,start,false
+end
+function chainprocs.gpos_mark2mark(head,start,stop,dataset,sequence,currentlookup,rlmode)
+ local steps=currentlookup.steps
+ local nofsteps=currentlookup.nofsteps
+ if nofsteps>1 then
+ reportmoresteps(dataset,sequence)
+ end
+ local markchar=getchar(start)
+ if marks[markchar] then
+ local markanchors=steps[1].coverage[markchar]
+ if markanchors then
+ local base=getprev(start)
+ local slc=getligaindex(start)
+ if slc then
+ while base do
+ local blc=getligaindex(base)
+ if blc and blc~=slc then
+ base=getprev(base)
+ else
+ break
+ end
+ end
+ end
+ if base then
+ local basechar=ischar(base,currentfont)
+ if basechar then
+ local ba=markanchors[1][basechar]
+ if ba then
+ local ma=markanchors[2]
+ if ma then
+ local dx,dy,bound=setmark(start,base,factor,rlmode,ba,ma,characters[basechar],true,checkmarks)
+ if trace_marks then
+ logprocess("%s, anchor %s, bound %s: anchoring mark %s to basemark %s => (%p,%p)",
+ cref(dataset,sequence),anchor,bound,gref(markchar),gref(basechar),dx,dy)
+ end
+ return head,start,true
+ end
+ end
+ elseif trace_bugs then
+ logwarning("%s: prev node is no mark, case %i",cref(dataset,sequence),1)
+ end
+ elseif trace_bugs then
+ logwarning("%s: prev node is no mark, case %i",cref(dataset,sequence),2)
+ end
+ elseif trace_bugs then
+ logwarning("%s: mark %s has no anchors",cref(dataset,sequence),gref(markchar))
+ end
+ elseif trace_bugs then
+ logwarning("%s: mark %s is no mark",cref(dataset,sequence),gref(markchar))
+ end
+ return head,start,false
+end
+function chainprocs.gpos_cursive(head,start,stop,dataset,sequence,currentlookup,rlmode)
+ local steps=currentlookup.steps
+ local nofsteps=currentlookup.nofsteps
+ if nofsteps>1 then
+ reportmoresteps(dataset,sequence)
+ end
+ local startchar=getchar(start)
+ local exitanchors=steps[1].coverage[startchar]
+ if exitanchors then
+ local done=false
+ if marks[startchar] then
+ if trace_cursive then
+ logprocess("%s: ignoring cursive for mark %s",pref(dataset,sequence),gref(startchar))
+ end
+ else
+ local nxt=getnext(start)
+ while not done and nxt do
+ local nextchar=ischar(nxt,currentfont)
+ if not nextchar then
+ break
+ elseif marks[nextchar] then
+ nxt=getnext(nxt)
+ else
+ local exit=exitanchors[3]
+ if exit then
+ local entry=exitanchors[1][nextchar]
+ if entry then
+ entry=entry[2]
+ if entry then
+ local dx,dy,bound=setcursive(start,nxt,factor,rlmode,exit,entry,characters[startchar],characters[nextchar])
+ if trace_cursive then
+ logprocess("%s: moving %s to %s cursive (%p,%p) using anchor %s and bound %s in %s mode",pref(dataset,sequence),gref(startchar),gref(nextchar),dx,dy,anchor,bound,mref(rlmode))
+ end
+ done=true
+ break
+ end
+ end
+ elseif trace_bugs then
+ onetimemessage(currentfont,startchar,"no entry anchors",report_fonts)
+ end
+ break
+ end
+ end
+ end
+ return head,start,done
+ else
+ if trace_cursive and trace_details then
+ logprocess("%s, cursive %s is already done",pref(dataset,sequence),gref(getchar(start)),alreadydone)
+ end
+ return head,start,false
+ end
+end
+local function show_skip(dataset,sequence,char,ck,class)
+ logwarning("%s: skipping char %s, class %a, rule %a, lookuptype %a",cref(dataset,sequence),gref(char),class,ck[1],ck[8] or ck[2])
+end
+local new_kern=nuts.pool.kern
+local function checked(head)
+ local current=head
+ while current do
+ if getid(current)==glue_code then
+ local kern=new_kern(getfield(current,"width"))
+ if head==current then
+ local next=getnext(current)
+ if next then
+ setlink(kern,next)
+ end
+ flush_node(current)
+ head=kern
+ current=next
+ else
+ local prev,next=getboth(current)
+ setlink(prev,kern)
+ setlink(kern,next)
+ flush_node(current)
+ current=next
+ end
+ else
+ current=getnext(current)
+ end
+ end
+ return head
+end
+local function setdiscchecked(d,pre,post,replace)
+ if pre then pre=checked(pre) end
+ if post then post=checked(post) end
+ if replace then replace=checked(replace) end
+ setdisc(d,pre,post,replace)
+end
+local function chaindisk(head,start,last,dataset,sequence,chainlookup,rlmode,k,ck,chainproc)
+ if not start then
+ return head,start,false
+ end
+ local startishead=start==head
+ local seq=ck[3]
+ local f=ck[4]
+ local l=ck[5]
+ local s=#seq
+ local done=false
+ local sweepnode=sweepnode
+ local sweeptype=sweeptype
+ local sweepoverflow=false
+ local checkdisc=getprev(head)
+ local keepdisc=not sweepnode
+ local lookaheaddisc=nil
+ local backtrackdisc=nil
+ local current=start
+ local last=start
+ local prev=getprev(start)
+ local hasglue=false
+ local i=f
+ while i<=l do
+ local id=getid(current)
+ if id==glyph_code then
+ i=i+1
+ last=current
+ current=getnext(current)
+ elseif id==glue_code then
+ i=i+1
+ last=current
+ current=getnext(current)
+ hasglue=true
+ elseif id==disc_code then
+ if keepdisc then
+ keepdisc=false
+ if notmatchpre[current]~=notmatchreplace[current] then
+ lookaheaddisc=current
+ end
+ local replace=getfield(current,"replace")
+ while replace and i<=l do
+ if getid(replace)==glyph_code then
+ i=i+1
+ end
+ replace=getnext(replace)
+ end
+ last=current
+ current=getnext(c)
+ else
+ head,current=flattendisk(head,current)
+ end
+ else
+ last=current
+ current=getnext(current)
+ end
+ if current then
+ elseif sweepoverflow then
+ break
+ elseif sweeptype=="post" or sweeptype=="replace" then
+ current=getnext(sweepnode)
+ if current then
+ sweeptype=nil
+ sweepoverflow=true
+ else
+ break
+ end
+ else
+ break
+ end
+ end
+ if sweepoverflow then
+ local prev=current and getprev(current)
+ if not current or prev~=sweepnode then
+ local head=getnext(sweepnode)
+ local tail=nil
+ if prev then
+ tail=prev
+ setprev(current,sweepnode)
+ else
+ tail=find_node_tail(head)
+ end
+ setnext(sweepnode,current)
+ setprev(head)
+ setnext(tail)
+ appenddisc(sweepnode,head)
+ end
+ end
+ if l<s then
+ local i=l
+ local t=sweeptype=="post" or sweeptype=="replace"
+ while current and i<s do
+ local id=getid(current)
+ if id==glyph_code then
+ i=i+1
+ current=getnext(current)
+ elseif id==glue_code then
+ i=i+1
+ current=getnext(current)
+ hasglue=true
+ elseif id==disc_code then
+ if keepdisc then
+ keepdisc=false
+ if notmatchpre[current]~=notmatchreplace[current] then
+ lookaheaddisc=current
+ end
+ local replace=getfield(c,"replace")
+ while replace and i<s do
+ if getid(replace)==glyph_code then
+ i=i+1
+ end
+ replace=getnext(replace)
+ end
+ current=getnext(current)
+ elseif notmatchpre[current]~=notmatchreplace[current] then
+ head,current=flattendisk(head,current)
+ else
+ current=getnext(current)
+ end
+ else
+ current=getnext(current)
+ end
+ if not current and t then
+ current=getnext(sweepnode)
+ if current then
+ sweeptype=nil
+ end
+ end
+ end
+ end
+ if f>1 then
+ local current=prev
+ local i=f
+ local t=sweeptype=="pre" or sweeptype=="replace"
+ if not current and t and current==checkdisk then
+ current=getprev(sweepnode)
+ end
+ while current and i>1 do
+ local id=getid(current)
+ if id==glyph_code then
+ i=i-1
+ elseif id==glue_code then
+ i=i-1
+ hasglue=true
+ elseif id==disc_code then
+ if keepdisc then
+ keepdisc=false
+ if notmatchpost[current]~=notmatchreplace[current] then
+ backtrackdisc=current
+ end
+ local replace=getfield(current,"replace")
+ while replace and i>1 do
+ if getid(replace)==glyph_code then
+ i=i-1
+ end
+ replace=getnext(replace)
+ end
+ elseif notmatchpost[current]~=notmatchreplace[current] then
+ head,current=flattendisk(head,current)
+ end
+ end
+ current=getprev(current)
+ if t and current==checkdisk then
+ current=getprev(sweepnode)
+ end
+ end
+ end
+ local ok=false
+ if lookaheaddisc then
+ local cf=start
+ local cl=getprev(lookaheaddisc)
+ local cprev=getprev(start)
+ local insertedmarks=0
+ while cprev do
+ local char=ischar(cf,currentfont)
+ if char and marks[char] then
+ insertedmarks=insertedmarks+1
+ cf=cprev
+ startishead=cf==head
+ cprev=getprev(cprev)
+ else
+ break
+ end
+ end
+ setprev(lookaheaddisc,cprev)
+ if cprev then
+ setnext(cprev,lookaheaddisc)
+ end
+ setprev(cf)
+ setnext(cl)
+ if startishead then
+ head=lookaheaddisc
+ end
+ local pre,post,replace=getdisc(lookaheaddisc)
+ local new=copy_node_list(cf)
+ local cnew=new
+ for i=1,insertedmarks do
+ cnew=getnext(cnew)
+ end
+ local clast=cnew
+ for i=f,l do
+ clast=getnext(clast)
+ end
+ if not notmatchpre[lookaheaddisc] then
+ cf,start,ok=chainproc(cf,start,last,dataset,sequence,chainlookup,rlmode,k)
+ end
+ if not notmatchreplace[lookaheaddisc] then
+ new,cnew,ok=chainproc(new,cnew,clast,dataset,sequence,chainlookup,rlmode,k)
+ end
+ if pre then
+ setlink(cl,pre)
+ end
+ if replace then
+ local tail=find_node_tail(new)
+ setlink(tail,replace)
+ end
+ if hasglue then
+ setdiscchecked(lookaheaddisc,cf,post,new)
+ else
+ setdisc(lookaheaddisc,cf,post,new)
+ end
+ start=getprev(lookaheaddisc)
+ sweephead[cf]=getnext(clast)
+ sweephead[new]=getnext(last)
+ elseif backtrackdisc then
+ local cf=getnext(backtrackdisc)
+ local cl=start
+ local cnext=getnext(start)
+ local insertedmarks=0
+ while cnext do
+ local char=ischar(cnext,currentfont)
+ if char and marks[char] then
+ insertedmarks=insertedmarks+1
+ cl=cnext
+ cnext=getnext(cnext)
+ else
+ break
+ end
+ end
+ if cnext then
+ setprev(cnext,backtrackdisc)
+ end
+ setnext(backtrackdisc,cnext)
+ setprev(cf)
+ setnext(cl)
+ local pre,post,replace,pretail,posttail,replacetail=getdisc(backtrackdisc,true)
+ local new=copy_node_list(cf)
+ local cnew=find_node_tail(new)
+ for i=1,insertedmarks do
+ cnew=getprev(cnew)
+ end
+ local clast=cnew
+ for i=f,l do
+ clast=getnext(clast)
+ end
+ if not notmatchpost[backtrackdisc] then
+ cf,start,ok=chainproc(cf,start,last,dataset,sequence,chainlookup,rlmode,k)
+ end
+ if not notmatchreplace[backtrackdisc] then
+ new,cnew,ok=chainproc(new,cnew,clast,dataset,sequence,chainlookup,rlmode,k)
+ end
+ if post then
+ setlink(posttail,cf)
+ else
+ post=cf
+ end
+ if replace then
+ setlink(replacetail,new)
+ else
+ replace=new
+ end
+ if hasglue then
+ setdiscchecked(backtrackdisc,pre,post,replace)
+ else
+ setdisc(backtrackdisc,pre,post,replace)
+ end
+ start=getprev(backtrackdisc)
+ sweephead[post]=getnext(clast)
+ sweephead[replace]=getnext(last)
+ else
+ head,start,ok=chainproc(head,start,last,dataset,sequence,chainlookup,rlmode,k)
+ end
+ return head,start,ok
+end
+local noflags={ false,false,false,false }
+local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)
+ local sweepnode=sweepnode
+ local sweeptype=sweeptype
+ local currentfont=currentfont
+ local diskseen=false
+ local checkdisc=getprev(head)
+ local flags=sequence.flags or noflags
+ local done=false
+ local skipmark=flags[1]
+ local skipligature=flags[2]
+ local skipbase=flags[3]
+ local markclass=sequence.markclass
+ local skipped=false
+ for k=1,#contexts do
+ local match=true
+ local current=start
+ local last=start
+ local ck=contexts[k]
+ local seq=ck[3]
+ local s=#seq
+ local size=1
+ if s==1 then
+ local char=ischar(current,currentfont)
+ if char then
+ match=seq[1][char]
+ end
+ else
+ local f=ck[4]
+ local l=ck[5]
+ size=l-f+1
+ if size>1 then
+ local discfound=nil
+ local n=f+1
+ last=getnext(last)
+ while n<=l do
+ if not last and (sweeptype=="post" or sweeptype=="replace") then
+ last=getnext(sweepnode)
+ sweeptype=nil
+ end
+ if last then
+ local char,id=ischar(last,currentfont)
+ if char then
+ local ccd=descriptions[char]
+ if ccd then
+ local class=ccd.class or "base"
+ if class==skipmark or class==skipligature or class==skipbase or (markclass and class=="mark" and not markclass[char]) then
+ skipped=true
+ if trace_skips then
+ show_skip(dataset,sequence,char,ck,class)
+ end
+ last=getnext(last)
+ elseif seq[n][char] then
+ if n<l then
+ last=getnext(last)
+ end
+ n=n+1
+ else
+ if discfound then
+ notmatchreplace[discfound]=true
+ match=not notmatchpre[discfound]
+ else
+ match=false
+ end
+ break
+ end
+ else
+ if discfound then
+ notmatchreplace[discfound]=true
+ match=not notmatchpre[discfound]
+ else
+ match=false
+ end
+ break
+ end
+ elseif char==false then
+ if discfound then
+ notmatchreplace[discfound]=true
+ match=not notmatchpre[discfound]
+ else
+ match=false
+ end
+ break
+ elseif id==disc_code then
+ diskseen=true
+ discfound=last
+ notmatchpre[last]=nil
+ notmatchpost[last]=true
+ notmatchreplace[last]=nil
+ local pre,post,replace=getdisc(last)
+ if pre then
+ local n=n
+ while pre do
+ if seq[n][getchar(pre)] then
+ n=n+1
+ pre=getnext(pre)
+ if n>l then
+ break
+ end
+ else
+ notmatchpre[last]=true
+ break
+ end
+ end
+ if n<=l then
+ notmatchpre[last]=true
+ end
+ else
+ notmatchpre[last]=true
+ end
+ if replace then
+ while replace do
+ if seq[n][getchar(replace)] then
+ n=n+1
+ replace=getnext(replace)
+ if n>l then
+ break
+ end
+ else
+ notmatchreplace[last]=true
+ match=not notmatchpre[last]
+ break
+ end
+ end
+ match=not notmatchpre[last]
+ end
+ last=getnext(last)
+ else
+ match=false
+ break
+ end
+ else
+ match=false
+ break
+ end
+ end
+ end
+ if match and f>1 then
+ local prev=getprev(start)
+ if prev then
+ if prev==checkdisc and (sweeptype=="pre" or sweeptype=="replace") then
+ prev=getprev(sweepnode)
+ end
+ if prev then
+ local discfound=nil
+ local n=f-1
+ while n>=1 do
+ if prev then
+ local char,id=ischar(prev,currentfont)
+ if char then
+ local ccd=descriptions[char]
+ if ccd then
+ local class=ccd.class
+ if class==skipmark or class==skipligature or class==skipbase or (markclass and class=="mark" and not markclass[char]) then
+ skipped=true
+ if trace_skips then
+ show_skip(dataset,sequence,char,ck,class)
+ end
+ prev=getprev(prev)
+ elseif seq[n][char] then
+ if n>1 then
+ prev=getprev(prev)
+ end
+ n=n-1
+ else
+ if discfound then
+ notmatchreplace[discfound]=true
+ match=not notmatchpost[discfound]
+ else
+ match=false
+ end
+ break
+ end
+ else
+ if discfound then
+ notmatchreplace[discfound]=true
+ match=not notmatchpost[discfound]
+ else
+ match=false
+ end
+ break
+ end
+ elseif char==false then
+ if discfound then
+ notmatchreplace[discfound]=true
+ match=not notmatchpost[discfound]
+ else
+ match=false
+ end
+ break
+ elseif id==disc_code then
+ diskseen=true
+ discfound=prev
+ notmatchpre[prev]=true
+ notmatchpost[prev]=nil
+ notmatchreplace[prev]=nil
+ local pre,post,replace,pretail,posttail,replacetail=getdisc(prev,true)
+ if pre~=start and post~=start and replace~=start then
+ if post then
+ local n=n
+ while posttail do
+ if seq[n][getchar(posttail)] then
+ n=n-1
+ if posttail==post then
+ break
+ else
+ posttail=getprev(posttail)
+ if n<1 then
+ break
+ end
+ end
+ else
+ notmatchpost[prev]=true
+ break
+ end
+ end
+ if n>=1 then
+ notmatchpost[prev]=true
+ end
+ else
+ notmatchpost[prev]=true
+ end
+ if replace then
+ while replacetail do
+ if seq[n][getchar(replacetail)] then
+ n=n-1
+ if replacetail==replace then
+ break
+ else
+ replacetail=getprev(replacetail)
+ if n<1 then
+ break
+ end
+ end
+ else
+ notmatchreplace[prev]=true
+ match=not notmatchpost[prev]
+ break
+ end
+ end
+ if not match then
+ break
+ end
+ end
+ end
+ prev=getprev(prev)
+ elseif seq[n][32] and isspace(prev,threshold) then
+ n=n-1
+ prev=getprev(prev)
+ else
+ match=false
+ break
+ end
+ else
+ match=false
+ break
+ end
+ end
+ else
+ match=false
+ end
+ else
+ match=false
+ end
+ end
+ if match and s>l then
+ local current=last and getnext(last)
+ if not current then
+ if sweeptype=="post" or sweeptype=="replace" then
+ current=getnext(sweepnode)
+ end
+ end
+ if current then
+ local discfound=nil
+ local n=l+1
+ while n<=s do
+ if current then
+ local char,id=ischar(current,currentfont)
+ if char then
+ local ccd=descriptions[char]
+ if ccd then
+ local class=ccd.class
+ if class==skipmark or class==skipligature or class==skipbase or (markclass and class=="mark" and not markclass[char]) then
+ skipped=true
+ if trace_skips then
+ show_skip(dataset,sequence,char,ck,class)
+ end
+ current=getnext(current)
+ elseif seq[n][char] then
+ if n<s then
+ current=getnext(current)
+ end
+ n=n+1
+ else
+ if discfound then
+ notmatchreplace[discfound]=true
+ match=not notmatchpre[discfound]
+ else
+ match=false
+ end
+ break
+ end
+ else
+ if discfound then
+ notmatchreplace[discfound]=true
+ match=not notmatchpre[discfound]
+ else
+ match=false
+ end
+ break
+ end
+ elseif char==false then
+ if discfound then
+ notmatchreplace[discfound]=true
+ match=not notmatchpre[discfound]
+ else
+ match=false
+ end
+ break
+ elseif id==disc_code then
+ diskseen=true
+ discfound=current
+ notmatchpre[current]=nil
+ notmatchpost[current]=true
+ notmatchreplace[current]=nil
+ local pre,post,replace=getdisc(current)
+ if pre then
+ local n=n
+ while pre do
+ if seq[n][getchar(pre)] then
+ n=n+1
+ pre=getnext(pre)
+ if n>s then
+ break
+ end
+ else
+ notmatchpre[current]=true
+ break
+ end
+ end
+ if n<=s then
+ notmatchpre[current]=true
+ end
+ else
+ notmatchpre[current]=true
+ end
+ if replace then
+ while replace do
+ if seq[n][getchar(replace)] then
+ n=n+1
+ replace=getnext(replace)
+ if n>s then
+ break
+ end
+ else
+ notmatchreplace[current]=true
+ match=notmatchpre[current]
+ break
+ end
+ end
+ if not match then
+ break
+ end
+ else
+ end
+ current=getnext(current)
+ elseif seq[n][32] and isspace(current,threshold) then
+ n=n+1
+ current=getnext(current)
+ else
+ match=false
+ break
+ end
+ else
+ match=false
+ break
+ end
+ end
+ else
+ match=false
+ end
+ end
+ end
+ if match then
+ local diskchain=diskseen or sweepnode
+ if trace_contexts then
+ local rule=ck[1]
+ local lookuptype=ck[8] or ck[2]
+ local first=ck[4]
+ local last=ck[5]
+ local char=getchar(start)
+ logwarning("%s: rule %s matches at char %s for (%s,%s,%s) chars, lookuptype %a",
+ cref(dataset,sequence),rule,gref(char),first-1,last-first+1,s-last,lookuptype)
+ end
+ local chainlookups=ck[6]
+ if chainlookups then
+ local nofchainlookups=#chainlookups
+ if size==1 then
+ local chainlookup=chainlookups[1]
+ local chainkind=chainlookup.type
+ local chainproc=chainprocs[chainkind]
+ if chainproc then
+ local ok
+ if diskchain then
+ head,start,ok=chaindisk(head,start,last,dataset,sequence,chainlookup,rlmode,1,ck,chainproc)
+ else
+ head,start,ok=chainproc(head,start,last,dataset,sequence,chainlookup,rlmode,1)
+ end
+ if ok then
+ done=true
+ end
+ else
+ logprocess("%s: %s is not yet supported (1)",cref(dataset,sequence),chainkind)
+ end
+ else
+ local i=1
+ while start do
+ if skipped then
+ while start do
+ local char=getchar(start)
+ local ccd=descriptions[char]
+ if ccd then
+ local class=ccd.class or "base"
+ if class==skipmark or class==skipligature or class==skipbase or (markclass and class=="mark" and not markclass[char]) then
+ start=getnext(start)
+ else
+ break
+ end
+ else
+ break
+ end
+ end
+ end
+ local chainlookup=chainlookups[i]
+ if chainlookup then
+ local chainkind=chainlookup.type
+ local chainproc=chainprocs[chainkind]
+ if chainproc then
+ local ok,n
+ if diskchain then
+ head,start,ok=chaindisk(head,start,last,dataset,sequence,chainlookup,rlmode,i,ck,chainproc)
+ else
+ head,start,ok,n=chainproc(head,start,last,dataset,sequence,chainlookup,rlmode,i)
+ end
+ if ok then
+ done=true
+ if n and n>1 and i+n>nofchainlookups then
+ break
+ end
+ end
+ else
+ logprocess("%s: %s is not yet supported (2)",cref(dataset,sequence),chainkind)
+ end
+ end
+ i=i+1
+ if i>size or not start then
+ break
+ elseif start then
+ start=getnext(start)
+ end
+ end
+ end
+ else
+ local replacements=ck[7]
+ if replacements then
+ head,start,done=reversesub(head,start,last,dataset,sequence,replacements,rlmode)
+ else
+ done=true
+ if trace_contexts then
+ logprocess("%s: skipping match",cref(dataset,sequence))
+ end
+ end
+ end
+ if done then
+ break
+ end
+ end
+ end
+ if diskseen then
+ notmatchpre={}
+ notmatchpost={}
+ notmatchreplace={}
+ end
+ return head,start,done
+end
+handlers.gsub_context=handle_contextchain
+handlers.gsub_contextchain=handle_contextchain
+handlers.gsub_reversecontextchain=handle_contextchain
+handlers.gpos_contextchain=handle_contextchain
+handlers.gpos_context=handle_contextchain
+local function chained_contextchain(head,start,stop,dataset,sequence,currentlookup,rlmode)
+ local steps=currentlookup.steps
+ local nofsteps=currentlookup.nofsteps
+ if nofsteps>1 then
+ reportmoresteps(dataset,sequence)
+ end
+ return handle_contextchain(head,start,dataset,sequence,currentlookup,rlmode)
+end
+chainprocs.gsub_context=chained_contextchain
+chainprocs.gsub_contextchain=chained_contextchain
+chainprocs.gsub_reversecontextchain=chained_contextchain
+chainprocs.gpos_contextchain=chained_contextchain
+chainprocs.gpos_context=chained_contextchain
+local missing=setmetatableindex("table")
+local function logprocess(...)
+ if trace_steps then
+ registermessage(...)
+ end
+ report_process(...)
+end
+local logwarning=report_process
+local function report_missing_coverage(dataset,sequence)
+ local t=missing[currentfont]
+ if not t[sequence] then
+ t[sequence]=true
+ logwarning("missing coverage for feature %a, lookup %a, type %a, font %a, name %a",
+ dataset[4],sequence.name,sequence.type,currentfont,tfmdata.properties.fullname)
+ end
+end
+local resolved={}
+local sequencelists=setmetatableindex(function(t,font)
+ local sequences=fontdata[font].resources.sequences
+ if not sequences or not next(sequences) then
+ sequences=false
+ end
+ t[font]=sequences
+ return sequences
+end)
+local autofeatures=fonts.analyzers.features
+local featuretypes=otf.tables.featuretypes
+local defaultscript=otf.features.checkeddefaultscript
+local defaultlanguage=otf.features.checkeddefaultlanguage
+local function initialize(sequence,script,language,enabled,autoscript,autolanguage)
+ local features=sequence.features
+ if features then
+ local order=sequence.order
+ if order then
+ local featuretype=featuretypes[sequence.type or "unknown"]
+ for i=1,#order do
+ local kind=order[i]
+ local valid=enabled[kind]
+ if valid then
+ local scripts=features[kind]
+ local languages=scripts and (
+ scripts[script] or
+ scripts[wildcard] or
+ (autoscript and defaultscript(featuretype,autoscript,scripts))
+ )
+ local enabled=languages and (
+ languages[language] or
+ languages[wildcard] or
+ (autolanguage and defaultlanguage(featuretype,autolanguage,languages))
+ )
+ if enabled then
+ return { valid,autofeatures[kind] or false,sequence,kind }
+ end
+ end
+ end
+ else
+ end
+ end
+ return false
+end
+function otf.dataset(tfmdata,font)
+ local shared=tfmdata.shared
+ local properties=tfmdata.properties
+ local language=properties.language or "dflt"
+ local script=properties.script or "dflt"
+ local enabled=shared.features
+ local autoscript=enabled and enabled.autoscript
+ local autolanguage=enabled and enabled.autolanguage
+ local res=resolved[font]
+ if not res then
+ res={}
+ resolved[font]=res
+ end
+ local rs=res[script]
+ if not rs then
+ rs={}
+ res[script]=rs
+ end
+ local rl=rs[language]
+ if not rl then
+ rl={
+ }
+ rs[language]=rl
+ local sequences=tfmdata.resources.sequences
+ if sequences then
+ for s=1,#sequences do
+ local v=enabled and initialize(sequences[s],script,language,enabled,autoscript,autolanguage)
+ if v then
+ rl[#rl+1]=v
+ end
+ end
+ end
+ end
+ return rl
+end
+local function report_disc(what,n)
+ report_run("%s: %s > %s",what,n,languages.serializediscretionary(n))
+end
+local function kernrun(disc,k_run,font,attr,...)
+ if trace_kernruns then
+ report_disc("kern",disc)
+ end
+ local prev,next=getboth(disc)
+ local nextstart=next
+ local done=false
+ local pre,post,replace,pretail,posttail,replacetail=getdisc(disc,true)
+ local prevmarks=prev
+ while prevmarks do
+ local char=ischar(prevmarks,font)
+ if char and marks[char] then
+ prevmarks=getprev(prevmarks)
+ else
+ break
+ end
+ end
+ if prev and not ischar(prev,font) then
+ prev=false
+ end
+ if next and not ischar(next,font) then
+ next=false
+ end
+ if pre then
+ if k_run(pre,"injections",nil,font,attr,...) then
+ done=true
+ end
+ if prev then
+ local nest=getprev(pre)
+ setlink(prev,pre)
+ if k_run(prevmarks,"preinjections",pre,font,attr,...) then
+ done=true
+ end
+ setprev(pre,nest)
+ setnext(prev,disc)
+ end
+ end
+ if post then
+ if k_run(post,"injections",nil,font,attr,...) then
+ done=true
+ end
+ if next then
+ setlink(posttail,next)
+ if k_run(posttail,"postinjections",next,font,attr,...) then
+ done=true
+ end
+ setnext(posttail)
+ setprev(next,disc)
+ end
+ end
+ if replace then
+ if k_run(replace,"injections",nil,font,attr,...) then
+ done=true
+ end
+ if prev then
+ local nest=getprev(replace)
+ setlink(prev,replace)
+ if k_run(prevmarks,"replaceinjections",replace,font,attr,...) then
+ done=true
+ end
+ setprev(replace,nest)
+ setnext(prev,disc)
+ end
+ if next then
+ setlink(replacetail,next)
+ if k_run(replacetail,"replaceinjections",next,font,attr,...) then
+ done=true
+ end
+ setnext(replacetail)
+ setprev(next,disc)
+ end
+ elseif prev and next then
+ setlink(prev,next)
+ if k_run(prevmarks,"emptyinjections",next,font,attr,...) then
+ done=true
+ end
+ setlink(prev,disc)
+ setlink(disc,next)
+ end
+ return nextstart,done
+end
+local function comprun(disc,c_run,...)
+ if trace_compruns then
+ report_disc("comp",disc)
+ end
+ local pre,post,replace=getdisc(disc)
+ local renewed=false
+ if pre then
+ sweepnode=disc
+ sweeptype="pre"
+ local new,done=c_run(pre,...)
+ if done then
+ pre=new
+ renewed=true
+ end
+ end
+ if post then
+ sweepnode=disc
+ sweeptype="post"
+ local new,done=c_run(post,...)
+ if done then
+ post=new
+ renewed=true
+ end
+ end
+ if replace then
+ sweepnode=disc
+ sweeptype="replace"
+ local new,done=c_run(replace,...)
+ if done then
+ replace=new
+ renewed=true
+ end
+ end
+ sweepnode=nil
+ sweeptype=nil
+ if renewed then
+ setdisc(disc,pre,post,replace)
+ end
+ return getnext(disc),renewed
+end
+local function testrun(disc,t_run,c_run,...)
+ if trace_testruns then
+ report_disc("test",disc)
+ end
+ local prev,next=getboth(disc)
+ if not next then
+ return
+ end
+ local pre,post,replace,pretail,posttail,replacetail=getdisc(disc,true)
+ local done=false
+ if replace and prev then
+ setlink(replacetail,next)
+ local ok,overflow=t_run(replace,next,...)
+ if ok and overflow then
+ setfield(disc,"replace")
+ setlink(prev,replace)
+ setboth(disc)
+ flush_node_list(disc)
+ return replace,true
+ else
+ setnext(replacetail)
+ setprev(next,disc)
+ end
+ end
+ local renewed=false
+ if pre then
+ sweepnode=disc
+ sweeptype="pre"
+ local new,ok=c_run(pre,...)
+ if ok then
+ pre=new
+ renewed=true
+ end
+ end
+ if post then
+ sweepnode=disc
+ sweeptype="post"
+ local new,ok=c_run(post,...)
+ if ok then
+ post=new
+ renewed=true
+ end
+ end
+ if replace then
+ sweepnode=disc
+ sweeptype="replace"
+ local new,ok=c_run(replace,...)
+ if ok then
+ replace=new
+ renewed=true
+ end
+ end
+ sweepnode=nil
+ sweeptype=nil
+ if renewed then
+ setdisc(disc,pre,post,replace)
+ return next,true
+ else
+ return next,done
+ end
+end
+local nesting=0
+local function c_run_single(head,font,attr,lookupcache,step,dataset,sequence,rlmode,handler)
+ local done=false
+ local sweep=sweephead[head]
+ if sweep then
+ start=sweep
+ sweephead[head]=nil
+ else
+ start=head
+ end
+ while start do
+ local char=ischar(start,font)
+ if char then
+ local a=attr and getattr(start,0)
+ if not a or (a==attr) then
+ local lookupmatch=lookupcache[char]
+ if lookupmatch then
+ local ok
+ head,start,ok=handler(head,start,dataset,sequence,lookupmatch,rlmode,step,1)
+ if ok then
+ done=true
+ end
+ end
+ if start then
+ start=getnext(start)
+ end
+ else
+ start=getnext(start)
+ end
+ elseif char==false then
+ return head,done
+ elseif sweep then
+ return head,done
+ else
+ start=getnext(start)
+ end
+ end
+ return head,done
+end
+local function t_run_single(start,stop,font,attr,lookupcache)
+ while start~=stop do
+ local char=ischar(start,font)
+ if char then
+ local a=attr and getattr(start,0)
+ if not a or (a==attr) then
+ local lookupmatch=lookupcache[char]
+ if lookupmatch then
+ local s=getnext(start)
+ local l=nil
+ local d=0
+ while s do
+ if s==stop then
+ d=1
+ elseif d>0 then
+ d=d+1
+ end
+ local lg=lookupmatch[getchar(s)]
+ if lg then
+ l=lg
+ s=getnext(s)
+ else
+ break
+ end
+ end
+ if l and l.ligature then
+ return true,d>1
+ end
+ end
+ else
+ end
+ start=getnext(start)
+ else
+ break
+ end
+ end
+end
+local function k_run_single(sub,injection,last,font,attr,lookupcache,step,dataset,sequence,rlmode,handler)
+ local a=attr and getattr(sub,0)
+ if not a or (a==attr) then
+ for n in traverse_nodes(sub) do
+ if n==last then
+ break
+ end
+ local char=ischar(n)
+ if char then
+ local lookupmatch=lookupcache[char]
+ if lookupmatch then
+ local h,d,ok=handler(sub,n,dataset,sequence,lookupmatch,rlmode,step,1,injection)
+ if ok then
+ return true
+ end
+ end
+ end
+ end
+ end
+end
+local function c_run_multiple(head,font,attr,steps,nofsteps,dataset,sequence,rlmode,handler)
+ local done=false
+ local sweep=sweephead[head]
+ if sweep then
+ start=sweep
+ sweephead[head]=nil
+ else
+ start=head
+ end
+ while start do
+ local char=ischar(start,font)
+ if char then
+ local a=attr and getattr(start,0)
+ if not a or (a==attr) then
+ for i=1,nofsteps do
+ local step=steps[i]
+ local lookupcache=step.coverage
+ if lookupcache then
+ local lookupmatch=lookupcache[char]
+ if lookupmatch then
+ local ok
+ head,start,ok=handler(head,start,dataset,sequence,lookupmatch,rlmode,step,i)
+ if ok then
+ done=true
+ break
+ elseif not start then
+ break
+ end
+ end
+ else
+ report_missing_coverage(dataset,sequence)
+ end
+ end
+ if start then
+ start=getnext(start)
+ end
+ else
+ start=getnext(start)
+ end
+ elseif char==false then
+ return head,done
+ elseif sweep then
+ return head,done
+ else
+ start=getnext(start)
+ end
+ end
+ return head,done
+end
+local function t_run_multiple(start,stop,font,attr,steps,nofsteps)
+ while start~=stop do
+ local char=ischar(start,font)
+ if char then
+ local a=attr and getattr(start,0)
+ if not a or (a==attr) then
+ for i=1,nofsteps do
+ local step=steps[i]
+ local lookupcache=step.coverage
+ if lookupcache then
+ local lookupmatch=lookupcache[char]
+ if lookupmatch then
+ local s=getnext(start)
+ local l=nil
+ local d=0
+ while s do
+ if s==stop then
+ d=1
+ elseif d>0 then
+ d=d+1
+ end
+ local lg=lookupmatch[getchar(s)]
+ if lg then
+ l=lg
+ s=getnext(s)
+ else
+ break
+ end
+ end
+ if l and l.ligature then
+ return true,d>1
+ end
+ end
+ else
+ report_missing_coverage(dataset,sequence)
+ end
+ end
+ else
+ end
+ start=getnext(start)
+ else
+ break
+ end
+ end
+end
+local function k_run_multiple(sub,injection,last,font,attr,steps,nofsteps,dataset,sequence,rlmode,handler)
+ local a=attr and getattr(sub,0)
+ if not a or (a==attr) then
+ for n in traverse_nodes(sub) do
+ if n==last then
+ break
+ end
+ local char=ischar(n)
+ if char then
+ for i=1,nofsteps do
+ local step=steps[i]
+ local lookupcache=step.coverage
+ if lookupcache then
+ local lookupmatch=lookupcache[char]
+ if lookupmatch then
+ local h,d,ok=handler(head,n,dataset,sequence,lookupmatch,step,rlmode,i,injection)
+ if ok then
+ return true
+ end
+ end
+ else
+ report_missing_coverage(dataset,sequence)
+ end
+ end
+ end
+ end
+ end
+end
+local function txtdirstate(start,stack,top,rlparmode)
+ local dir=getfield(start,"dir")
+ local new=1
+ if dir=="+TRT" then
+ top=top+1
+ stack[top]=dir
+ new=-1
+ elseif dir=="+TLT" then
+ top=top+1
+ stack[top]=dir
+ elseif dir=="-TRT" or dir=="-TLT" then
+ top=top-1
+ if stack[top]=="+TRT" then
+ new=-1
+ end
+ else
+ new=rlparmode
+ end
+ if trace_directions then
+ report_process("directions after txtdir %a: parmode %a, txtmode %a, level %a",dir,mref(rlparmode),mref(new),top)
+ end
+ return getnext(start),top,new
+end
+local function pardirstate(start)
+ local dir=getfield(start,"dir")
+ local new=0
+ if dir=="TLT" then
+ new=1
+ elseif dir=="TRT" then
+ new=-1
+ end
+ if trace_directions then
+ report_process("directions after pardir %a: parmode %a",dir,mref(new))
+ end
+ return getnext(start),new,new
+end
+otf.helpers=otf.helpers or {}
+otf.helpers.txtdirstate=txtdirstate
+otf.helpers.pardirstate=pardirstate
+local function featuresprocessor(head,font,attr)
+ local sequences=sequencelists[font]
+ if not sequencelists then
+ return head,false
+ end
+ nesting=nesting+1
+ if nesting==1 then
+ currentfont=font
+ tfmdata=fontdata[font]
+ descriptions=tfmdata.descriptions
+ characters=tfmdata.characters
+ marks=tfmdata.resources.marks
+ threshold,
+ factor=getthreshold(font)
+ checkmarks=tfmdata.properties.checkmarks
+ elseif currentfont~=font then
+ report_warning("nested call with a different font, level %s, quitting",nesting)
+ nesting=nesting-1
+ return head,false
+ end
+ head=tonut(head)
+ if trace_steps then
+ checkstep(head)
+ end
+ local rlmode=0
+ local done=false
+ local datasets=otf.dataset(tfmdata,font,attr)
+ local forcedisc=alwaysdisc or not attr
+ local dirstack={}
+ sweephead={}
+ for s=1,#datasets do
+ local dataset=datasets[s]
+ local attribute=dataset[2]
+ local sequence=dataset[3]
+ local rlparmode=0
+ local topstack=0
+ local success=false
+ local typ=sequence.type
+ local gpossing=typ=="gpos_single" or typ=="gpos_pair"
+ local handler=handlers[typ]
+ local steps=sequence.steps
+ local nofsteps=sequence.nofsteps
+ if not steps then
+ local h,d,ok=handler(head,head,dataset,sequence,nil,nil,nil,0,font,attr)
+ if ok then
+ success=true
+ if h then
+ head=h
+ end
+ end
+ elseif typ=="gsub_reversecontextchain" then
+ local start=find_node_tail(head)
+ while start do
+ local char=ischar(start,font)
+ if char then
+ local a=attr and getattr(start,0)
+ if not a or (a==attr) then
+ for i=1,nofsteps do
+ local step=steps[i]
+ local lookupcache=step.coverage
+ if lookupcache then
+ local lookupmatch=lookupcache[char]
+ if lookupmatch then
+ local ok
+ head,start,ok=handler(head,start,dataset,sequence,lookupmatch,rlmode,step,i)
+ if ok then
+ success=true
+ break
+ end
+ end
+ else
+ report_missing_coverage(dataset,sequence)
+ end
+ end
+ if start then
+ start=getprev(start)
+ end
+ else
+ start=getprev(start)
+ end
+ else
+ start=getprev(start)
+ end
+ end
+ else
+ local start=head
+ rlmode=0
+ if nofsteps==1 then
+ local step=steps[1]
+ local lookupcache=step.coverage
+ if not lookupcache then
+ report_missing_coverage(dataset,sequence)
+ else
+ while start do
+ local char,id=ischar(start,font)
+ if char then
+ local a=attr and getattr(start,0)
+ if a then
+ a=(a==attr) and (not attribute or getprop(start,a_state)==attribute)
+ else
+ a=not attribute or getprop(start,a_state)==attribute
+ end
+ if a then
+ local lookupmatch=lookupcache[char]
+ if lookupmatch then
+ local ok
+ head,start,ok=handler(head,start,dataset,sequence,lookupmatch,rlmode,step,1)
+ if ok then
+ success=true
+ end
+ end
+ if start then
+ start=getnext(start)
+ end
+ else
+ start=getnext(start)
+ end
+ elseif char==false then
+ start=getnext(start)
+ elseif id==disc_code then
+ local a=forcedisc or getsubtype(start)==discretionary_code or getattr(start,0)==attr
+ if a then
+ local ok
+ if gpossing then
+ start,ok=kernrun(start,k_run_single,font,attr,lookupcache,step,dataset,sequence,rlmode,handler)
+ elseif typ=="gsub_ligature" then
+ start,ok=testrun(start,t_run_single,c_run_single,font,attr,lookupcache,step,dataset,sequence,rlmode,handler)
+ else
+ start,ok=comprun(start,c_run_single,font,attr,lookupcache,step,dataset,sequence,rlmode,handler)
+ end
+ if ok then
+ success=true
+ end
+ else
+ start=getnext(start)
+ end
+ elseif id==math_code then
+ start=getnext(end_of_math(start))
+ elseif id==dir_code then
+ start,topstack,rlmode=txtdirstate(start,dirstack,topstack,rlparmode)
+ elseif id==localpar_code then
+ start,rlparmode,rlmode=pardirstate(start)
+ else
+ start=getnext(start)
+ end
+ end
+ end
+ else
+ while start do
+ local char,id=ischar(start,font)
+ if char then
+ local a=attr and getattr(start,0)
+ if a then
+ a=(a==attr) and (not attribute or getprop(start,a_state)==attribute)
+ else
+ a=not attribute or getprop(start,a_state)==attribute
+ end
+ if a then
+ for i=1,nofsteps do
+ local step=steps[i]
+ local lookupcache=step.coverage
+ if lookupcache then
+ local lookupmatch=lookupcache[char]
+ if lookupmatch then
+ local ok
+ head,start,ok=handler(head,start,dataset,sequence,lookupmatch,rlmode,step,i)
+ if ok then
+ success=true
+ break
+ elseif not start then
+ break
+ end
+ end
+ else
+ report_missing_coverage(dataset,sequence)
+ end
+ end
+ if start then
+ start=getnext(start)
+ end
+ else
+ start=getnext(start)
+ end
+ elseif char==false then
+ start=getnext(start)
+ elseif id==disc_code then
+ local a=forcedisc or getsubtype(start)==discretionary_code or getattr(start,0)==attr
+ if a then
+ local ok
+ if gpossing then
+ start,ok=kernrun(start,k_run_multiple,font,attr,steps,nofsteps,dataset,sequence,rlmode,handler)
+ elseif typ=="gsub_ligature" then
+ start,ok=testrun(start,t_run_multiple,c_run_multiple,font,attr,steps,nofsteps,dataset,sequence,rlmode,handler)
+ else
+ start,ok=comprun(start,c_run_multiple,font,attr,steps,nofsteps,dataset,sequence,rlmode,handler)
+ end
+ if ok then
+ success=true
+ end
+ else
+ start=getnext(start)
+ end
+ elseif id==math_code then
+ start=getnext(end_of_math(start))
+ elseif id==dir_code then
+ start,topstack,rlmode=txtdirstate(start,dirstack,topstack,rlparmode)
+ elseif id==localpar_code then
+ start,rlparmode,rlmode=pardirstate(start)
+ else
+ start=getnext(start)
+ end
+ end
+ end
+ end
+ if success then
+ done=true
+ end
+ if trace_steps then
+ registerstep(head)
+ end
+ end
+ nesting=nesting-1
+ head=tonode(head)
+ return head,done
+end
+local plugins={}
+otf.plugins=plugins
+function otf.registerplugin(name,f)
+ if type(name)=="string" and type(f)=="function" then
+ plugins[name]={ name,f }
+ end
+end
+local function plugininitializer(tfmdata,value)
+ if type(value)=="string" then
+ tfmdata.shared.plugin=plugins[value]
+ end
+end
+local function pluginprocessor(head,font)
+ local s=fontdata[font].shared
+ local p=s and s.plugin
+ if p then
+ if trace_plugins then
+ report_process("applying plugin %a",p[1])
+ end
+ return p[2](head,font)
+ else
+ return head,false
+ end
+end
+local function featuresinitializer(tfmdata,value)
+end
+registerotffeature {
+ name="features",
+ description="features",
+ default=true,
+ initializers={
+ position=1,
+ node=featuresinitializer,
+ plug=plugininitializer,
+ },
+ processors={
+ node=featuresprocessor,
+ plug=pluginprocessor,
+ }
+}
+otf.nodemodeinitializer=featuresinitializer
+otf.featuresprocessor=featuresprocessor
+otf.handlers=handlers
+local setspacekerns=nodes.injections.setspacekerns if not setspacekerns then os.exit() end
+if fontfeatures then
+ function otf.handlers.trigger_space_kerns(head,start,dataset,sequence,_,_,_,_,font,attr)
+ local features=fontfeatures[font]
+ local enabled=features and features.spacekern and features.kern
+ if enabled then
+ setspacekerns(font,sequence)
+ end
+ return head,start,enabled
+ end
+else
+ function otf.handlers.trigger_space_kerns(head,start,dataset,sequence,_,_,_,_,font,attr)
+ local shared=fontdata[font].shared
+ local features=shared and shared.features
+ local enabled=features and features.spacekern and features.kern
+ if enabled then
+ setspacekerns(font,sequence)
+ end
+ return head,start,enabled
+ end
+end
+local function hasspacekerns(data)
+ local sequences=data.resources.sequences
+ for i=1,#sequences do
+ local sequence=sequences[i]
+ local steps=sequence.steps
+ if steps and sequence.features.kern then
+ for i=1,#steps do
+ local coverage=steps[i].coverage
+ if not coverage then
+ elseif coverage[32] then
+ return true
+ else
+ for k,v in next,coverage do
+ if v[32] then
+ return true
+ end
+ end
+ end
+ end
+ end
+ end
+ return false
+end
+otf.readers.registerextender {
+ name="spacekerns",
+ action=function(data)
+ data.properties.hasspacekerns=hasspacekerns(data)
+ end
+}
+local function spaceinitializer(tfmdata,value)
+ local resources=tfmdata.resources
+ local spacekerns=resources and resources.spacekerns
+ local properties=tfmdata.properties
+ if value and spacekerns==nil then
+ if properties and properties.hasspacekerns then
+ local sequences=resources.sequences
+ local left={}
+ local right={}
+ local last=0
+ local feat=nil
+ for i=1,#sequences do
+ local sequence=sequences[i]
+ local steps=sequence.steps
+ if steps then
+ local kern=sequence.features.kern
+ if kern then
+ if feat then
+ for script,languages in next,kern do
+ local f=feat[script]
+ if f then
+ for l in next,languages do
+ f[l]=true
+ end
+ else
+ feat[script]=languages
+ end
+ end
+ else
+ feat=kern
+ end
+ for i=1,#steps do
+ local step=steps[i]
+ local coverage=step.coverage
+ local rules=step.rules
+ local format=step.format
+ if rules then
+ elseif coverage then
+ local single=format==gpos_single
+ local kerns=coverage[32]
+ if kerns then
+ for k,v in next,kerns do
+ if type(v)~="table" then
+ right[k]=v
+ elseif single then
+ right[k]=v[3]
+ else
+ local one=v[1]
+ if one then
+ right[k]=one[3]
+ end
+ end
+ end
+ end
+ for k,v in next,coverage do
+ local kern=v[32]
+ if kern then
+ if type(kern)~="table" then
+ left[k]=kern
+ elseif single then
+ left[k]=v[3]
+ else
+ local one=v[1]
+ if one then
+ left[k]=one[3]
+ end
+ end
+ end
+ end
+ end
+ end
+ last=i
+ end
+ else
+ end
+ end
+ left=next(left) and left or false
+ right=next(right) and right or false
+ if left or right then
+ spacekerns={
+ left=left,
+ right=right,
+ }
+ if last>0 then
+ local triggersequence={
+ features={ kern=feat or { dflt={ dflt=true,} } },
+ flags=noflags,
+ name="trigger_space_kerns",
+ order={ "kern" },
+ type="trigger_space_kerns",
+ left=left,
+ right=right,
+ }
+ insert(sequences,last,triggersequence)
+ end
+ else
+ spacekerns=false
+ end
+ else
+ spacekerns=false
+ end
+ resources.spacekerns=spacekerns
+ end
+ return spacekerns
+end
+registerotffeature {
+ name="spacekern",
+ description="space kern injection",
+ default=true,
+ initializers={
+ node=spaceinitializer,
+ },
+}
+local function markinitializer(tfmdata,value)
+ local properties=tfmdata.properties
+ properties.checkmarks=value
+end
+registerotffeature {
+ name="checkmarks",
+ description="check mark widths",
+ default=true,
+ initializers={
+ node=markinitializer,
+ },
+}
+
+end --- [luaotfload, fontloader-2017-02-11.lua scope for “font-otsâ€] ---
+
+
+do --- [luaotfload, fontloader-2017-02-11.lua scope for “font-osd†10ecd4b375680b011e7c6a25e5ad74f7] ---
+
+if not modules then modules={} end modules ['font-osd']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Kai Eigner, TAT Zetwerk / Hans Hagen, PRAGMA ADE",
+ copyright="TAT Zetwerk / PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local insert,imerge,copy=table.insert,table.imerge,table.copy
+local next,type=next,type
+local report_devanagari=logs.reporter("otf","devanagari")
+fonts=fonts or {}
+fonts.analyzers=fonts.analyzers or {}
+fonts.analyzers.methods=fonts.analyzers.methods or { node={ otf={} } }
+local otf=fonts.handlers.otf
+local handlers=otf.handlers
+local methods=fonts.analyzers.methods
+local otffeatures=fonts.constructors.features.otf
+local registerotffeature=otffeatures.register
+local nuts=nodes.nuts
+local tonode=nuts.tonode
+local tonut=nuts.tonut
+local getnext=nuts.getnext
+local getprev=nuts.getprev
+local getboth=nuts.getboth
+local getid=nuts.getid
+local getchar=nuts.getchar
+local getfont=nuts.getfont
+local getsubtype=nuts.getsubtype
+local setlink=nuts.setlink
+local setnext=nuts.setnext
+local setprev=nuts.setprev
+local setchar=nuts.setchar
+local getprop=nuts.getprop
+local setprop=nuts.setprop
+local ischar=nuts.is_char
+local insert_node_after=nuts.insert_after
+local copy_node=nuts.copy
+local remove_node=nuts.remove
+local flush_list=nuts.flush_list
+local flush_node=nuts.flush_node
+local copyinjection=nodes.injections.copy
+local unsetvalue=attributes.unsetvalue
+local fontdata=fonts.hashes.identifiers
+local a_state=attributes.private('state')
+local a_syllabe=attributes.private('syllabe')
+local dotted_circle=0x25CC
+local states=fonts.analyzers.states
+local s_rphf=states.rphf
+local s_half=states.half
+local s_pref=states.pref
+local s_blwf=states.blwf
+local s_pstf=states.pstf
+local replace_all_nbsp=nil
+replace_all_nbsp=function(head)
+ replace_all_nbsp=typesetters and typesetters.characters and typesetters.characters.replacenbspaces or function(head)
+ return head
+ end
+ return replace_all_nbsp(head)
+end
+local xprocesscharacters=nil
+if context then
+ xprocesscharacters=function(head,font)
+ xprocesscharacters=nodes.handlers.characters
+ return xprocesscharacters(head,font)
+ end
+else
+ xprocesscharacters=function(head,font)
+ xprocesscharacters=nodes.handlers.nodepass
+ return xprocesscharacters(head,font)
+ end
+end
+local function processcharacters(head,font)
+ return tonut(xprocesscharacters(tonode(head)))
+end
+local consonant={
+ [0x0915]=true,[0x0916]=true,[0x0917]=true,[0x0918]=true,
+ [0x0919]=true,[0x091A]=true,[0x091B]=true,[0x091C]=true,
+ [0x091D]=true,[0x091E]=true,[0x091F]=true,[0x0920]=true,
+ [0x0921]=true,[0x0922]=true,[0x0923]=true,[0x0924]=true,
+ [0x0925]=true,[0x0926]=true,[0x0927]=true,[0x0928]=true,
+ [0x0929]=true,[0x092A]=true,[0x092B]=true,[0x092C]=true,
+ [0x092D]=true,[0x092E]=true,[0x092F]=true,[0x0930]=true,
+ [0x0931]=true,[0x0932]=true,[0x0933]=true,[0x0934]=true,
+ [0x0935]=true,[0x0936]=true,[0x0937]=true,[0x0938]=true,
+ [0x0939]=true,[0x0958]=true,[0x0959]=true,[0x095A]=true,
+ [0x095B]=true,[0x095C]=true,[0x095D]=true,[0x095E]=true,
+ [0x095F]=true,[0x0979]=true,[0x097A]=true,
+ [0x0C95]=true,[0x0C96]=true,[0x0C97]=true,[0x0C98]=true,
+ [0x0C99]=true,[0x0C9A]=true,[0x0C9B]=true,[0x0C9C]=true,
+ [0x0C9D]=true,[0x0C9E]=true,[0x0C9F]=true,[0x0CA0]=true,
+ [0x0CA1]=true,[0x0CA2]=true,[0x0CA3]=true,[0x0CA4]=true,
+ [0x0CA5]=true,[0x0CA6]=true,[0x0CA7]=true,[0x0CA8]=true,
+ [0x0CA9]=true,[0x0CAA]=true,[0x0CAB]=true,[0x0CAC]=true,
+ [0x0CAD]=true,[0x0CAE]=true,[0x0CAF]=true,[0x0CB0]=true,
+ [0x0CB1]=true,[0x0CB2]=true,[0x0CB3]=true,[0x0CB4]=true,
+ [0x0CB5]=true,[0x0CB6]=true,[0x0CB7]=true,[0x0CB8]=true,
+ [0x0CB9]=true,
+ [0x0CDE]=true,
+ [0x0D15]=true,[0x0D16]=true,[0x0D17]=true,[0x0D18]=true,
+ [0x0D19]=true,[0x0D1A]=true,[0x0D1B]=true,[0x0D1C]=true,
+ [0x0D1D]=true,[0x0D1E]=true,[0x0D1F]=true,[0x0D20]=true,
+ [0x0D21]=true,[0x0D22]=true,[0x0D23]=true,[0x0D24]=true,
+ [0x0D25]=true,[0x0D26]=true,[0x0D27]=true,[0x0D28]=true,
+ [0x0D29]=true,[0x0D2A]=true,[0x0D2B]=true,[0x0D2C]=true,
+ [0x0D2D]=true,[0x0D2E]=true,[0x0D2F]=true,[0x0D30]=true,
+ [0x0D31]=true,[0x0D32]=true,[0x0D33]=true,[0x0D34]=true,
+ [0x0D35]=true,[0x0D36]=true,[0x0D37]=true,[0x0D38]=true,
+ [0x0D39]=true,[0x0D3A]=true,
+}
+local independent_vowel={
+ [0x0904]=true,[0x0905]=true,[0x0906]=true,[0x0907]=true,
+ [0x0908]=true,[0x0909]=true,[0x090A]=true,[0x090B]=true,
+ [0x090C]=true,[0x090D]=true,[0x090E]=true,[0x090F]=true,
+ [0x0910]=true,[0x0911]=true,[0x0912]=true,[0x0913]=true,
+ [0x0914]=true,[0x0960]=true,[0x0961]=true,[0x0972]=true,
+ [0x0973]=true,[0x0974]=true,[0x0975]=true,[0x0976]=true,
+ [0x0977]=true,
+ [0x0C85]=true,[0x0C86]=true,[0x0C87]=true,[0x0C88]=true,
+ [0x0C89]=true,[0x0C8A]=true,[0x0C8B]=true,[0x0C8C]=true,
+ [0x0C8D]=true,[0x0C8E]=true,[0x0C8F]=true,[0x0C90]=true,
+ [0x0C91]=true,[0x0C92]=true,[0x0C93]=true,[0x0C94]=true,
+ [0x0D05]=true,[0x0D06]=true,[0x0D07]=true,[0x0D08]=true,
+ [0x0D09]=true,[0x0D0A]=true,[0x0D0B]=true,[0x0D0C]=true,
+ [0x0D0E]=true,[0x0D0F]=true,[0x0D10]=true,[0x0D12]=true,
+ [0x0D13]=true,[0x0D14]=true,
+}
+local dependent_vowel={
+ [0x093A]=true,[0x093B]=true,[0x093E]=true,[0x093F]=true,
+ [0x0940]=true,[0x0941]=true,[0x0942]=true,[0x0943]=true,
+ [0x0944]=true,[0x0945]=true,[0x0946]=true,[0x0947]=true,
+ [0x0948]=true,[0x0949]=true,[0x094A]=true,[0x094B]=true,
+ [0x094C]=true,[0x094E]=true,[0x094F]=true,[0x0955]=true,
+ [0x0956]=true,[0x0957]=true,[0x0962]=true,[0x0963]=true,
+ [0x0CBE]=true,[0x0CBF]=true,[0x0CC0]=true,[0x0CC1]=true,
+ [0x0CC2]=true,[0x0CC3]=true,[0x0CC4]=true,[0x0CC5]=true,
+ [0x0CC6]=true,[0x0CC7]=true,[0x0CC8]=true,[0x0CC9]=true,
+ [0x0CCA]=true,[0x0CCB]=true,[0x0CCC]=true,
+ [0x0D3E]=true,[0x0D3F]=true,[0x0D40]=true,[0x0D41]=true,
+ [0x0D42]=true,[0x0D43]=true,[0x0D44]=true,[0x0D46]=true,
+ [0x0D47]=true,[0x0D48]=true,[0x0D4A]=true,[0x0D4B]=true,
+ [0x0D4C]=true,[0x0D57]=true,
+}
+local vowel_modifier={
+ [0x0900]=true,[0x0901]=true,[0x0902]=true,[0x0903]=true,
+ [0xA8E0]=true,[0xA8E1]=true,[0xA8E2]=true,[0xA8E3]=true,
+ [0xA8E4]=true,[0xA8E5]=true,[0xA8E6]=true,[0xA8E7]=true,
+ [0xA8E8]=true,[0xA8E9]=true,[0xA8EA]=true,[0xA8EB]=true,
+ [0xA8EC]=true,[0xA8ED]=true,[0xA8EE]=true,[0xA8EF]=true,
+ [0xA8F0]=true,[0xA8F1]=true,
+ [0x0D02]=true,[0x0D03]=true,
+}
+local stress_tone_mark={
+ [0x0951]=true,[0x0952]=true,[0x0953]=true,[0x0954]=true,
+ [0x0CCD]=true,
+ [0x0D4D]=true,
+}
+local nukta={
+ [0x093C]=true,
+ [0x0CBC]=true,
+}
+local halant={
+ [0x094D]=true,
+ [0x0CCD]=true,
+ [0x0D4D]=true,
+}
+local ra={
+ [0x0930]=true,
+ [0x0CB0]=true,
+ [0x0D30]=true,
+}
+local c_anudatta=0x0952
+local c_nbsp=0x00A0
+local c_zwnj=0x200C
+local c_zwj=0x200D
+local zw_char={
+ [0x200C]=true,
+ [0x200D]=true,
+}
+local pre_mark={
+ [0x093F]=true,[0x094E]=true,
+ [0x0D46]=true,[0x0D47]=true,[0x0D48]=true,
+}
+local above_mark={
+ [0x0900]=true,[0x0901]=true,[0x0902]=true,[0x093A]=true,
+ [0x0945]=true,[0x0946]=true,[0x0947]=true,[0x0948]=true,
+ [0x0951]=true,[0x0953]=true,[0x0954]=true,[0x0955]=true,
+ [0xA8E0]=true,[0xA8E1]=true,[0xA8E2]=true,[0xA8E3]=true,
+ [0xA8E4]=true,[0xA8E5]=true,[0xA8E6]=true,[0xA8E7]=true,
+ [0xA8E8]=true,[0xA8E9]=true,[0xA8EA]=true,[0xA8EB]=true,
+ [0xA8EC]=true,[0xA8ED]=true,[0xA8EE]=true,[0xA8EF]=true,
+ [0xA8F0]=true,[0xA8F1]=true,
+ [0x0D4E]=true,
+}
+local below_mark={
+ [0x093C]=true,[0x0941]=true,[0x0942]=true,[0x0943]=true,
+ [0x0944]=true,[0x094D]=true,[0x0952]=true,[0x0956]=true,
+ [0x0957]=true,[0x0962]=true,[0x0963]=true,
+}
+local post_mark={
+ [0x0903]=true,[0x093B]=true,[0x093E]=true,[0x0940]=true,
+ [0x0949]=true,[0x094A]=true,[0x094B]=true,[0x094C]=true,
+ [0x094F]=true,
+}
+local twopart_mark={
+ [0x0D4A]={ 0x0D46,0x0D3E,},
+ [0x0D4B]={ 0x0D47,0x0D3E,},
+ [0x0D4C]={ 0x0D46,0x0D57,},
+}
+local mark_four={}
+for k,v in next,pre_mark do mark_four[k]=pre_mark end
+for k,v in next,above_mark do mark_four[k]=above_mark end
+for k,v in next,below_mark do mark_four[k]=below_mark end
+for k,v in next,post_mark do mark_four[k]=post_mark end
+local mark_above_below_post={}
+for k,v in next,above_mark do mark_above_below_post[k]=above_mark end
+for k,v in next,below_mark do mark_above_below_post[k]=below_mark end
+for k,v in next,post_mark do mark_above_below_post[k]=post_mark end
+local reorder_class={
+ [0x0930]="before postscript",
+ [0x093F]="before half",
+ [0x0940]="after subscript",
+ [0x0941]="after subscript",
+ [0x0942]="after subscript",
+ [0x0943]="after subscript",
+ [0x0944]="after subscript",
+ [0x0945]="after subscript",
+ [0x0946]="after subscript",
+ [0x0947]="after subscript",
+ [0x0948]="after subscript",
+ [0x0949]="after subscript",
+ [0x094A]="after subscript",
+ [0x094B]="after subscript",
+ [0x094C]="after subscript",
+ [0x0962]="after subscript",
+ [0x0963]="after subscript",
+ [0x093E]="after subscript",
+ [0x0CB0]="after postscript",
+ [0x0CBF]="before subscript",
+ [0x0CC6]="before subscript",
+ [0x0CCC]="before subscript",
+ [0x0CBE]="before subscript",
+ [0x0CE2]="before subscript",
+ [0x0CE3]="before subscript",
+ [0x0CC1]="before subscript",
+ [0x0CC2]="before subscript",
+ [0x0CC3]="after subscript",
+ [0x0CC4]="after subscript",
+ [0x0CD5]="after subscript",
+ [0x0CD6]="after subscript",
+}
+local dflt_true={
+ dflt=true
+}
+local dev2_defaults={
+ dev2=dflt_true,
+}
+local deva_defaults={
+ dev2=dflt_true,
+ deva=dflt_true,
+}
+local false_flags={ false,false,false,false }
+local both_joiners_true={
+ [0x200C]=true,
+ [0x200D]=true,
+}
+local sequence_reorder_matras={
+ features={ dv01=dev2_defaults },
+ flags=false_flags,
+ name="dv01_reorder_matras",
+ order={ "dv01" },
+ type="devanagari_reorder_matras",
+ nofsteps=1,
+ steps={
+ {
+ osdstep=true,
+ coverage=pre_mark,
+ }
+ }
+}
+local sequence_reorder_reph={
+ features={ dv02=dev2_defaults },
+ flags=false_flags,
+ name="dv02_reorder_reph",
+ order={ "dv02" },
+ type="devanagari_reorder_reph",
+ nofsteps=1,
+ steps={
+ {
+ osdstep=true,
+ coverage={},
+ }
+ }
+}
+local sequence_reorder_pre_base_reordering_consonants={
+ features={ dv03=dev2_defaults },
+ flags=false_flags,
+ name="dv03_reorder_pre_base_reordering_consonants",
+ order={ "dv03" },
+ type="devanagari_reorder_pre_base_reordering_consonants",
+ nofsteps=1,
+ steps={
+ {
+ osdstep=true,
+ coverage={},
+ }
+ }
+}
+local sequence_remove_joiners={
+ features={ dv04=deva_defaults },
+ flags=false_flags,
+ name="dv04_remove_joiners",
+ order={ "dv04" },
+ type="devanagari_remove_joiners",
+ nofsteps=1,
+ steps={
+ { osdstep=true,
+ coverage=both_joiners_true,
+ },
+ }
+}
+local basic_shaping_forms={
+ nukt=true,
+ akhn=true,
+ rphf=true,
+ pref=true,
+ rkrf=true,
+ blwf=true,
+ half=true,
+ pstf=true,
+ vatu=true,
+ cjct=true,
+}
+local valid={
+ akhn=true,
+ rphf=true,
+ pref=true,
+ half=true,
+ blwf=true,
+ pstf=true,
+ pres=true,
+ blws=true,
+ psts=true,
+}
+local function initializedevanagi(tfmdata)
+ local script,language=otf.scriptandlanguage(tfmdata,attr)
+ if script=="deva" or script=="dev2" or script=="mlym" or script=="mlm2" then
+ local resources=tfmdata.resources
+ local devanagari=resources.devanagari
+ if not devanagari then
+ report_devanagari("adding devanagari features to font")
+ local gsubfeatures=resources.features.gsub
+ local sequences=resources.sequences
+ local sharedfeatures=tfmdata.shared.features
+ local lastmatch=0
+ for s=1,#sequences do
+ local features=sequences[s].features
+ if features then
+ for k,v in next,features do
+ if basic_shaping_forms[k] then
+ lastmatch=s
+ end
+ end
+ end
+ end
+ local insertindex=lastmatch+1
+ gsubfeatures["dv01"]=dev2_defaults
+ gsubfeatures["dv02"]=dev2_defaults
+ gsubfeatures["dv03"]=dev2_defaults
+ gsubfeatures["dv04"]=deva_defaults
+ local reorder_pre_base_reordering_consonants=copy(sequence_reorder_pre_base_reordering_consonants)
+ local reorder_reph=copy(sequence_reorder_reph)
+ local reorder_matras=copy(sequence_reorder_matras)
+ local remove_joiners=copy(sequence_remove_joiners)
+ insert(sequences,insertindex,reorder_pre_base_reordering_consonants)
+ insert(sequences,insertindex,reorder_reph)
+ insert(sequences,insertindex,reorder_matras)
+ insert(sequences,insertindex,remove_joiners)
+ local blwfcache={}
+ local seqsubset={}
+ local rephstep={
+ coverage={}
+ }
+ local devanagari={
+ reph=false,
+ vattu=false,
+ blwfcache=blwfcache,
+ seqsubset=seqsubset,
+ reorderreph=rephstep,
+ }
+ reorder_reph.steps={ rephstep }
+ local pre_base_reordering_consonants={}
+ reorder_pre_base_reordering_consonants.steps[1].coverage=pre_base_reordering_consonants
+ resources.devanagari=devanagari
+ for s=1,#sequences do
+ local sequence=sequences[s]
+ local steps=sequence.steps
+ local nofsteps=sequence.nofsteps
+ local features=sequence.features
+ local has_rphf=features.rphf
+ local has_blwf=features.blwf
+ if has_rphf and has_rphf.deva then
+ devanagari.reph=true
+ elseif has_blwf and has_blwf.deva then
+ devanagari.vattu=true
+ for i=1,nofsteps do
+ local step=steps[i]
+ local coverage=step.coverage
+ if coverage then
+ for k,v in next,coverage do
+ if not blwfcache[k] then
+ blwfcache[k]=v
+ end
+ end
+ end
+ end
+ end
+ for kind,spec in next,features do
+ if spec.dev2 and valid[kind] then
+ for i=1,nofsteps do
+ local step=steps[i]
+ local coverage=step.coverage
+ if coverage then
+ local reph=false
+ if kind=="rphf" then
+ if true then
+ for k,v in next,ra do
+ local r=coverage[k]
+ if r then
+ local h=false
+ for k,v in next,halant do
+ local h=r[k]
+ if h then
+ reph=h.ligature or false
+ break
+ end
+ end
+ if reph then
+ break
+ end
+ end
+ end
+ else
+ end
+ end
+ seqsubset[#seqsubset+1]={ kind,coverage,reph }
+ end
+ end
+ end
+ if kind=="pref" then
+ local steps=sequence.steps
+ local nofsteps=sequence.nofsteps
+ for i=1,nofsteps do
+ local step=steps[i]
+ local coverage=step.coverage
+ if coverage then
+ for k,v in next,halant do
+ local h=coverage[k]
+ if h then
+ local found=false
+ for k,v in next,h do
+ found=v and v.ligature
+ if found then
+ pre_base_reordering_consonants[k]=found
+ break
+ end
+ end
+ if found then
+ break
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ if script=="deva" then
+ sharedfeatures["dv04"]=true
+ elseif script=="dev2" then
+ sharedfeatures["dv01"]=true
+ sharedfeatures["dv02"]=true
+ sharedfeatures["dv03"]=true
+ sharedfeatures["dv04"]=true
+ elseif script=="mlym" then
+ sharedfeatures["pstf"]=true
+ elseif script=="mlm2" then
+ sharedfeatures["pstf"]=true
+ sharedfeatures["pref"]=true
+ sharedfeatures["dv03"]=true
+ gsubfeatures ["dv03"]=dev2_defaults
+ insert(sequences,insertindex,sequence_reorder_pre_base_reordering_consonants)
+ end
+ end
+ end
+end
+registerotffeature {
+ name="devanagari",
+ description="inject additional features",
+ default=true,
+ initializers={
+ node=initializedevanagi,
+ },
+}
+local function deva_initialize(font,attr)
+ local tfmdata=fontdata[font]
+ local datasets=otf.dataset(tfmdata,font,attr)
+ local devanagaridata=datasets.devanagari
+ if not devanagaridata then
+ devanagaridata={
+ reph=false,
+ vattu=false,
+ blwfcache={},
+ }
+ datasets.devanagari=devanagaridata
+ local resources=tfmdata.resources
+ local devanagari=resources.devanagari
+ for s=1,#datasets do
+ local dataset=datasets[s]
+ if dataset and dataset[1] then
+ local kind=dataset[4]
+ if kind=="rphf" then
+ devanagaridata.reph=true
+ elseif kind=="blwf" then
+ devanagaridata.vattu=true
+ devanagaridata.blwfcache=devanagari.blwfcache
+ end
+ end
+ end
+ end
+ return devanagaridata.reph,devanagaridata.vattu,devanagaridata.blwfcache
+end
+local function deva_reorder(head,start,stop,font,attr,nbspaces)
+ local reph,vattu,blwfcache=deva_initialize(font,attr)
+ local current=start
+ local n=getnext(start)
+ local base=nil
+ local firstcons=nil
+ local lastcons=nil
+ local basefound=false
+ if reph and ra[getchar(start)] and halant[getchar(n)] then
+ if n==stop then
+ return head,stop,nbspaces
+ end
+ if getchar(getnext(n))==c_zwj then
+ current=start
+ else
+ current=getnext(n)
+ setprop(start,a_state,s_rphf)
+ end
+ end
+ if getchar(current)==c_nbsp then
+ if current==stop then
+ stop=getprev(stop)
+ head=remove_node(head,current)
+ flush_node(current)
+ return head,stop,nbspaces
+ else
+ nbspaces=nbspaces+1
+ base=current
+ firstcons=current
+ lastcons=current
+ current=getnext(current)
+ if current~=stop then
+ if nukta[getchar(current)] then
+ current=getnext(current)
+ end
+ if getchar(current)==c_zwj then
+ if current~=stop then
+ local next=getnext(current)
+ if next~=stop and halant[getchar(next)] then
+ current=next
+ next=getnext(current)
+ local tmp=next and getnext(next) or nil
+ local changestop=next==stop
+ local tempcurrent=copy_node(next)
+ copyinjection(tempcurrent,next)
+ local nextcurrent=copy_node(current)
+ copyinjection(nextcurrent,current)
+ setlink(tempcurrent,nextcurrent)
+ setprop(tempcurrent,a_state,s_blwf)
+ tempcurrent=processcharacters(tempcurrent,font)
+ setprop(tempcurrent,a_state,unsetvalue)
+ if getchar(next)==getchar(tempcurrent) then
+ flush_list(tempcurrent)
+ local n=copy_node(current)
+ copyinjection(n,current)
+ setchar(current,dotted_circle)
+ head=insert_node_after(head,current,n)
+ else
+ setchar(current,getchar(tempcurrent))
+ local freenode=getnext(current)
+ setlink(current,tmp)
+ flush_node(freenode)
+ flush_list(tempcurrent)
+ if changestop then
+ stop=current
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ while not basefound do
+ local char=getchar(current)
+ if consonant[char] then
+ setprop(current,a_state,s_half)
+ if not firstcons then
+ firstcons=current
+ end
+ lastcons=current
+ if not base then
+ base=current
+ elseif blwfcache[char] then
+ setprop(current,a_state,s_blwf)
+ else
+ base=current
+ end
+ end
+ basefound=current==stop
+ current=getnext(current)
+ end
+ if base~=lastcons then
+ local np=base
+ local n=getnext(base)
+ local ch=getchar(n)
+ if nukta[ch] then
+ np=n
+ n=getnext(n)
+ ch=getchar(n)
+ end
+ if halant[ch] then
+ if lastcons~=stop then
+ local ln=getnext(lastcons)
+ if nukta[getchar(ln)] then
+ lastcons=ln
+ end
+ end
+ local nn=getnext(n)
+ local ln=getnext(lastcons)
+ setlink(np,nn)
+ setnext(lastcons,n)
+ if ln then
+ setprev(ln,n)
+ end
+ setnext(n,ln)
+ setprev(n,lastcons)
+ if lastcons==stop then
+ stop=n
+ end
+ end
+ end
+ n=getnext(start)
+ if n~=stop and ra[getchar(start)] and halant[getchar(n)] and not zw_char[getchar(getnext(n))] then
+ local matra=base
+ if base~=stop then
+ local next=getnext(base)
+ if dependent_vowel[getchar(next)] then
+ matra=next
+ end
+ end
+ local sp=getprev(start)
+ local nn=getnext(n)
+ local mn=getnext(matra)
+ setlink(sp,nn)
+ setlink(matra,start)
+ setlink(n,mn)
+ if head==start then
+ head=nn
+ end
+ start=nn
+ if matra==stop then
+ stop=n
+ end
+ end
+ local current=start
+ while current~=stop do
+ local next=getnext(current)
+ if next~=stop and halant[getchar(next)] and getchar(getnext(next))==c_zwnj then
+ setprop(current,a_state,unsetvalue)
+ end
+ current=next
+ end
+ if base~=stop and getprop(base,a_state) then
+ local next=getnext(base)
+ if halant[getchar(next)] and not (next~=stop and getchar(getnext(next))==c_zwj) then
+ setprop(base,a_state,unsetvalue)
+ end
+ end
+ local current,allreordered,moved=start,false,{ [base]=true }
+ local a,b,p,bn=base,base,base,getnext(base)
+ if base~=stop and nukta[getchar(bn)] then
+ a,b,p=bn,bn,bn
+ end
+ while not allreordered do
+ local c=current
+ local n=getnext(current)
+ local l=nil
+ if c~=stop then
+ local ch=getchar(n)
+ if nukta[ch] then
+ c=n
+ n=getnext(n)
+ ch=getchar(n)
+ end
+ if c~=stop then
+ if halant[ch] then
+ c=n
+ n=getnext(n)
+ ch=getchar(n)
+ end
+ while c~=stop and dependent_vowel[ch] do
+ c=n
+ n=getnext(n)
+ ch=getchar(n)
+ end
+ if c~=stop then
+ if vowel_modifier[ch] then
+ c=n
+ n=getnext(n)
+ ch=getchar(n)
+ end
+ if c~=stop and stress_tone_mark[ch] then
+ c=n
+ n=getnext(n)
+ end
+ end
+ end
+ end
+ local bp=getprev(firstcons)
+ local cn=getnext(current)
+ local last=getnext(c)
+ while cn~=last do
+ if pre_mark[getchar(cn)] then
+ if bp then
+ setnext(bp,cn)
+ end
+ local prev,next=getboth(cn)
+ if next then
+ setprev(next,prev)
+ end
+ setnext(prev,next)
+ if cn==stop then
+ stop=prev
+ end
+ setprev(cn,bp)
+ setlink(cn,firstcons)
+ if firstcons==start then
+ if head==start then
+ head=cn
+ end
+ start=cn
+ end
+ break
+ end
+ cn=getnext(cn)
+ end
+ allreordered=c==stop
+ current=getnext(c)
+ end
+ if reph or vattu then
+ local current,cns=start,nil
+ while current~=stop do
+ local c=current
+ local n=getnext(current)
+ if ra[getchar(current)] and halant[getchar(n)] then
+ c=n
+ n=getnext(n)
+ local b,bn=base,base
+ while bn~=stop do
+ local next=getnext(bn)
+ if dependent_vowel[getchar(next)] then
+ b=next
+ end
+ bn=next
+ end
+ if getprop(current,a_state)==s_rphf then
+ if b~=current then
+ if current==start then
+ if head==start then
+ head=n
+ end
+ start=n
+ end
+ if b==stop then
+ stop=c
+ end
+ local prev=getprev(current)
+ setlink(prev,n)
+ local next=getnext(b)
+ setlink(c,next)
+ setlink(b,current)
+ end
+ elseif cns and getnext(cns)~=current then
+ local cp=getprev(current)
+ local cnsn=getnext(cns)
+ setlink(cp,n)
+ setlink(cns,current)
+ setlink(c,cnsn)
+ if c==stop then
+ stop=cp
+ break
+ end
+ current=getprev(n)
+ end
+ else
+ local char=getchar(current)
+ if consonant[char] then
+ cns=current
+ local next=getnext(cns)
+ if halant[getchar(next)] then
+ cns=next
+ end
+ elseif char==c_nbsp then
+ nbspaces=nbspaces+1
+ cns=current
+ local next=getnext(cns)
+ if halant[getchar(next)] then
+ cns=next
+ end
+ end
+ end
+ current=getnext(current)
+ end
+ end
+ if getchar(base)==c_nbsp then
+ nbspaces=nbspaces-1
+ head=remove_node(head,base)
+ flush_node(base)
+ end
+ return head,stop,nbspaces
+end
+function handlers.devanagari_reorder_matras(head,start)
+ local current=start
+ local startfont=getfont(start)
+ local startattr=getprop(start,a_syllabe)
+ while current do
+ local char=ischar(current,startfont)
+ local next=getnext(current)
+ if char and getprop(current,a_syllabe)==startattr then
+ if halant[char] and not getprop(current,a_state) then
+ if next then
+ local char=ischar(next,startfont)
+ if char and zw_char[char] and getprop(next,a_syllabe)==startattr then
+ current=next
+ next=getnext(current)
+ end
+ end
+ local startnext=getnext(start)
+ head=remove_node(head,start)
+ setlink(start,next)
+ setlink(current,start)
+ start=startnext
+ break
+ end
+ else
+ break
+ end
+ current=next
+ end
+ return head,start,true
+end
+function handlers.devanagari_reorder_reph(head,start)
+ local current=getnext(start)
+ local startnext=nil
+ local startprev=nil
+ local startfont=getfont(start)
+ local startattr=getprop(start,a_syllabe)
+ while current do
+ local char=ischar(current,startfont)
+ if char and getprop(current,a_syllabe)==startattr then
+ if halant[char] and not getprop(current,a_state) then
+ local next=getnext(current)
+ if next then
+ local nextchar=ischar(next,startfont)
+ if nextchar and zw_char[nextchar] and getprop(next,a_syllabe)==startattr then
+ current=next
+ next=getnext(current)
+ end
+ end
+ startnext=getnext(start)
+ head=remove_node(head,start)
+ setlink(start,next)
+ setlink(current,start)
+ start=startnext
+ startattr=getprop(start,a_syllabe)
+ break
+ end
+ current=getnext(current)
+ else
+ break
+ end
+ end
+ if not startnext then
+ current=getnext(start)
+ while current do
+ local char=ischar(current,startfont)
+ if char and getprop(current,a_syllabe)==startattr then
+ if getprop(current,a_state)==s_pstf then
+ startnext=getnext(start)
+ head=remove_node(head,start)
+ local prev=getprev(current)
+ setlink(prev,start)
+ setlink(start,current)
+ start=startnext
+ startattr=getprop(start,a_syllabe)
+ break
+ end
+ current=getnext(current)
+ else
+ break
+ end
+ end
+ end
+ if not startnext then
+ current=getnext(start)
+ local c=nil
+ while current do
+ local char=ischar(current,startfont)
+ if char and getprop(current,a_syllabe)==startattr then
+ if not c and mark_above_below_post[char] and reorder_class[char]~="after subscript" then
+ c=current
+ end
+ current=getnext(current)
+ else
+ break
+ end
+ end
+ if c then
+ startnext=getnext(start)
+ head=remove_node(head,start)
+ local prev=getprev(c)
+ setlink(prev,start)
+ setlink(start,c)
+ start=startnext
+ startattr=getprop(start,a_syllabe)
+ end
+ end
+ if not startnext then
+ current=start
+ local next=getnext(current)
+ while next do
+ local nextchar=ischar(next,startfont)
+ if nextchar and getprop(next,a_syllabe)==startattr then
+ current=next
+ next=getnext(current)
+ else
+ break
+ end
+ end
+ if start~=current then
+ startnext=getnext(start)
+ head=remove_node(head,start)
+ local next=getnext(current)
+ setlink(start,next)
+ setlink(current,start)
+ start=startnext
+ end
+ end
+ return head,start,true
+end
+function handlers.devanagari_reorder_pre_base_reordering_consonants(head,start)
+ local current=start
+ local startnext=nil
+ local startprev=nil
+ local startfont=getfont(start)
+ local startattr=getprop(start,a_syllabe)
+ while current do
+ local char=ischar(current,startfont)
+ if char and getprop(current,a_syllabe)==startattr then
+ local next=getnext(current)
+ if halant[char] and not getprop(current,a_state) then
+ if next then
+ local nextchar=ischar(next,startfont)
+ if nextchar and getprop(next,a_syllabe)==startattr then
+ if nextchar==c_zwnj or nextchar==c_zwj then
+ current=next
+ next=getnext(current)
+ end
+ end
+ end
+ startnext=getnext(start)
+ removenode(start,start)
+ setlink(start,next)
+ setlink(current,start)
+ start=startnext
+ break
+ end
+ current=next
+ else
+ break
+ end
+ end
+ if not startnext then
+ current=getnext(start)
+ startattr=getprop(start,a_syllabe)
+ while current do
+ local char=ischar(current,startfont)
+ if char and getprop(current,a_syllabe)==startattr then
+ if not consonant[char] and getprop(current,a_state) then
+ startnext=getnext(start)
+ removenode(start,start)
+ local prev=getprev(current)
+ setlink(prev,start)
+ setlink(start,current)
+ start=startnext
+ break
+ end
+ current=getnext(current)
+ else
+ break
+ end
+ end
+ end
+ return head,start,true
+end
+function handlers.devanagari_remove_joiners(head,start,kind,lookupname,replacement)
+ local stop=getnext(start)
+ local font=getfont(start)
+ local last=start
+ while stop do
+ local char=ischar(stop,font)
+ if char and (char==c_zwnj or char==c_zwj) then
+ last=stop
+ stop=getnext(stop)
+ else
+ break
+ end
+ end
+ local prev=getprev(start)
+ if stop then
+ setnext(last)
+ setlink(prev,stop)
+ elseif prev then
+ setnext(prev)
+ end
+ if head==start then
+ head=stop
+ end
+ flush_list(start)
+ return head,stop,true
+end
+local function dev2_initialize(font,attr)
+ local devanagari=fontdata[font].resources.devanagari
+ if devanagari then
+ return devanagari.seqsubset or {},devanagari.reorderreph or {}
+ else
+ return {},{}
+ end
+end
+local function dev2_reorder(head,start,stop,font,attr,nbspaces)
+ local seqsubset,reorderreph=dev2_initialize(font,attr)
+ local reph=false
+ local halfpos=nil
+ local basepos=nil
+ local subpos=nil
+ local postpos=nil
+ local locl={}
+ for i=1,#seqsubset do
+ local subset=seqsubset[i]
+ local kind=subset[1]
+ local lookupcache=subset[2]
+ if kind=="rphf" then
+ reph=subset[3]
+ local current=start
+ local last=getnext(stop)
+ while current~=last do
+ if current~=stop then
+ local c=locl[current] or getchar(current)
+ local found=lookupcache[c]
+ if found then
+ local next=getnext(current)
+ local n=locl[next] or getchar(next)
+ if found[n] then
+ local afternext=next~=stop and getnext(next)
+ if afternext and zw_char[getchar(afternext)] then
+ current=next
+ current=getnext(current)
+ elseif current==start then
+ setprop(current,a_state,s_rphf)
+ current=next
+ else
+ current=next
+ end
+ end
+ end
+ end
+ current=getnext(current)
+ end
+ elseif kind=="pref" then
+ local current=start
+ local last=getnext(stop)
+ while current~=last do
+ if current~=stop then
+ local c=locl[current] or getchar(current)
+ local found=lookupcache[c]
+ if found then
+ local next=getnext(current)
+ local n=locl[next] or getchar(next)
+ if found[n] then
+ setprop(current,a_state,s_pref)
+ setprop(next,a_state,s_pref)
+ current=next
+ end
+ end
+ end
+ current=getnext(current)
+ end
+ elseif kind=="half" then
+ local current=start
+ local last=getnext(stop)
+ while current~=last do
+ if current~=stop then
+ local c=locl[current] or getchar(current)
+ local found=lookupcache[c]
+ if found then
+ local next=getnext(current)
+ local n=locl[next] or getchar(next)
+ if found[n] then
+ if next~=stop and getchar(getnext(next))==c_zwnj then
+ current=next
+ else
+ setprop(current,a_state,s_half)
+ if not halfpos then
+ halfpos=current
+ end
+ end
+ current=getnext(current)
+ end
+ end
+ end
+ current=getnext(current)
+ end
+ elseif kind=="blwf" then
+ local current=start
+ local last=getnext(stop)
+ while current~=last do
+ if current~=stop then
+ local c=locl[current] or getchar(current)
+ local found=lookupcache[c]
+ if found then
+ local next=getnext(current)
+ local n=locl[next] or getchar(next)
+ if found[n] then
+ setprop(current,a_state,s_blwf)
+ setprop(next,a_state,s_blwf)
+ current=next
+ subpos=current
+ end
+ end
+ end
+ current=getnext(current)
+ end
+ elseif kind=="pstf" then
+ local current=start
+ local last=getnext(stop)
+ while current~=last do
+ if current~=stop then
+ local c=locl[current] or getchar(current)
+ local found=lookupcache[c]
+ if found then
+ local next=getnext(current)
+ local n=locl[next] or getchar(next)
+ if found[n] then
+ setprop(current,a_state,s_pstf)
+ setprop(next,a_state,s_pstf)
+ current=next
+ postpos=current
+ end
+ end
+ end
+ current=getnext(current)
+ end
+ end
+ end
+ reorderreph.coverage={ [reph]=true }
+ local current,base,firstcons=start,nil,nil
+ if getprop(start,a_state)==s_rphf then
+ current=getnext(getnext(start))
+ end
+ if current~=getnext(stop) and getchar(current)==c_nbsp then
+ if current==stop then
+ stop=getprev(stop)
+ head=remove_node(head,current)
+ flush_node(current)
+ return head,stop,nbspaces
+ else
+ nbspaces=nbspaces+1
+ base=current
+ current=getnext(current)
+ if current~=stop then
+ local char=getchar(current)
+ if nukta[char] then
+ current=getnext(current)
+ char=getchar(current)
+ end
+ if char==c_zwj then
+ local next=getnext(current)
+ if current~=stop and next~=stop and halant[getchar(next)] then
+ current=next
+ next=getnext(current)
+ local tmp=getnext(next)
+ local changestop=next==stop
+ setnext(next,nil)
+ setprop(current,a_state,s_pref)
+ current=processcharacters(current,font)
+ setprop(current,a_state,s_blwf)
+ current=processcharacters(current,font)
+ setprop(current,a_state,s_pstf)
+ current=processcharacters(current,font)
+ setprop(current,a_state,unsetvalue)
+ if halant[getchar(current)] then
+ setnext(getnext(current),tmp)
+ local nc=copy_node(current)
+ copyinjection(nc,current)
+ setchar(current,dotted_circle)
+ head=insert_node_after(head,current,nc)
+ else
+ setnext(current,tmp)
+ if changestop then
+ stop=current
+ end
+ end
+ end
+ end
+ end
+ end
+ else
+ local last=getnext(stop)
+ while current~=last do
+ local next=getnext(current)
+ if consonant[getchar(current)] then
+ if not (current~=stop and next~=stop and halant[getchar(next)] and getchar(getnext(next))==c_zwj) then
+ if not firstcons then
+ firstcons=current
+ end
+ local a=getprop(current,a_state)
+ if not (a==s_pref or a==s_blwf or a==s_pstf) then
+ base=current
+ end
+ end
+ end
+ current=next
+ end
+ if not base then
+ base=firstcons
+ end
+ end
+ if not base then
+ if getprop(start,a_state)==s_rphf then
+ setprop(start,a_state,unsetvalue)
+ end
+ return head,stop,nbspaces
+ else
+ if getprop(base,a_state) then
+ setprop(base,a_state,unsetvalue)
+ end
+ basepos=base
+ end
+ if not halfpos then
+ halfpos=base
+ end
+ if not subpos then
+ subpos=base
+ end
+ if not postpos then
+ postpos=subpos or base
+ end
+ local moved={}
+ local current=start
+ local last=getnext(stop)
+ while current~=last do
+ local char,target,cn=locl[current] or getchar(current),nil,getnext(current)
+ local tpm=twopart_mark[char]
+ if tpm then
+ local extra=copy_node(current)
+ copyinjection(extra,current)
+ char=tpm[1]
+ setchar(current,char)
+ setchar(extra,tpm[2])
+ head=insert_node_after(head,current,extra)
+ end
+ if not moved[current] and dependent_vowel[char] then
+ if pre_mark[char] then
+ moved[current]=true
+ local prev,next=getboth(current)
+ setlink(prev,next)
+ if current==stop then
+ stop=getprev(current)
+ end
+ if halfpos==start then
+ if head==start then
+ head=current
+ end
+ start=current
+ end
+ local prev=getprev(halfpos)
+ setlink(prev,current)
+ setlink(current,halfpos)
+ halfpos=current
+ elseif above_mark[char] then
+ target=basepos
+ if subpos==basepos then
+ subpos=current
+ end
+ if postpos==basepos then
+ postpos=current
+ end
+ basepos=current
+ elseif below_mark[char] then
+ target=subpos
+ if postpos==subpos then
+ postpos=current
+ end
+ subpos=current
+ elseif post_mark[char] then
+ target=postpos
+ postpos=current
+ end
+ if mark_above_below_post[char] then
+ local prev=getprev(current)
+ if prev~=target then
+ local next=getnext(current)
+ setlink(prev,next)
+ if current==stop then
+ stop=prev
+ end
+ local next=getnext(target)
+ setlink(current,next)
+ setlink(target,current)
+ end
+ end
+ end
+ current=cn
+ end
+ local current,c=start,nil
+ while current~=stop do
+ local char=getchar(current)
+ if halant[char] or stress_tone_mark[char] then
+ if not c then
+ c=current
+ end
+ else
+ c=nil
+ end
+ local next=getnext(current)
+ if c and nukta[getchar(next)] then
+ if head==c then
+ head=next
+ end
+ if stop==next then
+ stop=current
+ end
+ local prev=getprev(c)
+ setlink(prev,next)
+ local nextnext=getnext(next)
+ setnext(current,nextnext)
+ local nextnextnext=getnext(nextnext)
+ if nextnextnext then
+ setprev(nextnextnext,current)
+ end
+ setlink(nextnext,c)
+ end
+ if stop==current then break end
+ current=getnext(current)
+ end
+ if getchar(base)==c_nbsp then
+ if base==stop then
+ stop=getprev(stop)
+ end
+ nbspaces=nbspaces-1
+ head=remove_node(head,base)
+ flush_node(base)
+ end
+ return head,stop,nbspaces
+end
+local separator={}
+imerge(separator,consonant)
+imerge(separator,independent_vowel)
+imerge(separator,dependent_vowel)
+imerge(separator,vowel_modifier)
+imerge(separator,stress_tone_mark)
+for k,v in next,nukta do separator[k]=true end
+for k,v in next,halant do separator[k]=true end
+local function analyze_next_chars_one(c,font,variant)
+ local n=getnext(c)
+ if not n then
+ return c
+ end
+ if variant==1 then
+ local v=ischar(n,font)
+ if v and nukta[v] then
+ n=getnext(n)
+ if n then
+ v=ischar(n,font)
+ end
+ end
+ if n and v then
+ local nn=getnext(n)
+ if nn then
+ local vv=ischar(nn,font)
+ if vv then
+ local nnn=getnext(nn)
+ if nnn then
+ local vvv=ischar(nnn,font)
+ if vvv then
+ if vv==c_zwj and consonant[vvv] then
+ c=nnn
+ elseif (vv==c_zwnj or vv==c_zwj) and halant[vvv] then
+ local nnnn=getnext(nnn)
+ if nnnn then
+ local vvvv=ischar(nnnn,font)
+ if vvvv and consonant[vvvv] then
+ c=nnnn
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ elseif variant==2 then
+ local v=ischar(n,font)
+ if v and nukta[v] then
+ c=n
+ end
+ n=getnext(c)
+ if n then
+ v=ischar(n,font)
+ if v then
+ local nn=getnext(n)
+ if nn then
+ local vv=ischar(nn,font)
+ if vv and zw_char[v] then
+ n=nn
+ v=vv
+ nn=getnext(nn)
+ vv=nn and ischar(nn,font)
+ end
+ if vv and halant[v] and consonant[vv] then
+ c=nn
+ end
+ end
+ end
+ end
+ end
+ local n=getnext(c)
+ if not n then
+ return c
+ end
+ local v=ischar(n,font)
+ if not v then
+ return c
+ end
+ if dependent_vowel[v] then
+ c=getnext(c)
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if nukta[v] then
+ c=getnext(c)
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if halant[v] then
+ c=getnext(c)
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if vowel_modifier[v] then
+ c=getnext(c)
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if stress_tone_mark[v] then
+ c=getnext(c)
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if stress_tone_mark[v] then
+ return n
+ else
+ return c
+ end
+end
+local function analyze_next_chars_two(c,font)
+ local n=getnext(c)
+ if not n then
+ return c
+ end
+ local v=ischar(n,font)
+ if v and nukta[v] then
+ c=n
+ end
+ n=c
+ while true do
+ local nn=getnext(n)
+ if nn then
+ local vv=ischar(nn,font)
+ if vv then
+ if halant[vv] then
+ n=nn
+ local nnn=getnext(nn)
+ if nnn then
+ local vvv=ischar(nnn,font)
+ if vvv and zw_char[vvv] then
+ n=nnn
+ end
+ end
+ elseif vv==c_zwnj or vv==c_zwj then
+ local nnn=getnext(nn)
+ if nnn then
+ local vvv=ischar(nnn,font)
+ if vvv and halant[vvv] then
+ n=nnn
+ end
+ end
+ else
+ break
+ end
+ local nn=getnext(n)
+ if nn then
+ local vv=ischar(nn,font)
+ if vv and consonant[vv] then
+ n=nn
+ local nnn=getnext(nn)
+ if nnn then
+ local vvv=ischar(nnn,font)
+ if vvv and nukta[vvv] then
+ n=nnn
+ end
+ end
+ c=n
+ else
+ break
+ end
+ else
+ break
+ end
+ else
+ break
+ end
+ else
+ break
+ end
+ end
+ if not c then
+ return
+ end
+ local n=getnext(c)
+ if not n then
+ return c
+ end
+ local v=ischar(n,font)
+ if not v then
+ return c
+ end
+ if v==c_anudatta then
+ c=n
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if halant[v] then
+ c=n
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ if v==c_zwnj or v==c_zwj then
+ c=n
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ else
+ if dependent_vowel[v] then
+ c=n
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if nukta[v] then
+ c=n
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if halant[v] then
+ c=n
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ end
+ if vowel_modifier[v] then
+ c=n
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if stress_tone_mark[v] then
+ c=n
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if stress_tone_mark[v] then
+ return n
+ else
+ return c
+ end
+end
+local function inject_syntax_error(head,current,mark)
+ local signal=copy_node(current)
+ copyinjection(signal,current)
+ if mark==pre_mark then
+ setchar(signal,dotted_circle)
+ else
+ setchar(current,dotted_circle)
+ end
+ return insert_node_after(head,current,signal)
+end
+function methods.deva(head,font,attr)
+ head=tonut(head)
+ local current=head
+ local start=true
+ local done=false
+ local nbspaces=0
+ while current do
+ local char=ischar(current,font)
+ if char then
+ done=true
+ local syllablestart=current
+ local syllableend=nil
+ local c=current
+ local n=getnext(c)
+ local first=char
+ if n and ra[first] then
+ local second=ischar(n,font)
+ if second and halant[second] then
+ local n=getnext(n)
+ if n then
+ local third=ischar(n,font)
+ if third then
+ c=n
+ first=third
+ end
+ end
+ end
+ end
+ local standalone=first==c_nbsp
+ if standalone then
+ local prev=getprev(current)
+ if prev then
+ local prevchar=ischar(prev,font)
+ if not prevchar then
+ elseif not separator[prevchar] then
+ else
+ standalone=false
+ end
+ else
+ end
+ end
+ if standalone then
+ local syllableend=analyze_next_chars_one(c,font,2)
+ current=getnext(syllableend)
+ if syllablestart~=syllableend then
+ head,current,nbspaces=deva_reorder(head,syllablestart,syllableend,font,attr,nbspaces)
+ current=getnext(current)
+ end
+ else
+ if consonant[char] then
+ local prevc=true
+ while prevc do
+ prevc=false
+ local n=getnext(current)
+ if not n then
+ break
+ end
+ local v=ischar(n,font)
+ if not v then
+ break
+ end
+ if nukta[v] then
+ n=getnext(n)
+ if not n then
+ break
+ end
+ v=ischar(n,font)
+ if not v then
+ break
+ end
+ end
+ if halant[v] then
+ n=getnext(n)
+ if not n then
+ break
+ end
+ v=ischar(n,font)
+ if not v then
+ break
+ end
+ if v==c_zwnj or v==c_zwj then
+ n=getnext(n)
+ if not n then
+ break
+ end
+ v=ischar(n,font)
+ if not v then
+ break
+ end
+ end
+ if consonant[v] then
+ prevc=true
+ current=n
+ end
+ end
+ end
+ local n=getnext(current)
+ if n then
+ local v=ischar(n,font)
+ if v and nukta[v] then
+ current=n
+ n=getnext(current)
+ end
+ end
+ syllableend=current
+ current=n
+ if current then
+ local v=ischar(current,font)
+ if not v then
+ elseif halant[v] then
+ local n=getnext(current)
+ if n then
+ local v=ischar(n,font)
+ if v and zw_char[v] then
+ syllableend=n
+ current=getnext(n)
+ else
+ syllableend=current
+ current=n
+ end
+ else
+ syllableend=current
+ current=n
+ end
+ else
+ if dependent_vowel[v] then
+ syllableend=current
+ current=getnext(current)
+ v=ischar(current,font)
+ end
+ if v and vowel_modifier[v] then
+ syllableend=current
+ current=getnext(current)
+ v=ischar(current,font)
+ end
+ if v and stress_tone_mark[v] then
+ syllableend=current
+ current=getnext(current)
+ end
+ end
+ end
+ if syllablestart~=syllableend then
+ head,current,nbspaces=deva_reorder(head,syllablestart,syllableend,font,attr,nbspaces)
+ current=getnext(current)
+ end
+ elseif independent_vowel[char] then
+ syllableend=current
+ current=getnext(current)
+ if current then
+ local v=ischar(current,font)
+ if v then
+ if vowel_modifier[v] then
+ syllableend=current
+ current=getnext(current)
+ v=ischar(current,font)
+ end
+ if v and stress_tone_mark[v] then
+ syllableend=current
+ current=getnext(current)
+ end
+ end
+ end
+ else
+ local mark=mark_four[char]
+ if mark then
+ head,current=inject_syntax_error(head,current,mark)
+ end
+ current=getnext(current)
+ end
+ end
+ else
+ current=getnext(current)
+ end
+ start=false
+ end
+ if nbspaces>0 then
+ head=replace_all_nbsp(head)
+ end
+ head=tonode(head)
+ return head,done
+end
+function methods.dev2(head,font,attr)
+ head=tonut(head)
+ local current=head
+ local start=true
+ local done=false
+ local syllabe=0
+ local nbspaces=0
+ while current do
+ local syllablestart=nil
+ local syllableend=nil
+ local char=ischar(current,font)
+ if char then
+ done=true
+ syllablestart=current
+ local c=current
+ local n=getnext(current)
+ if n and ra[char] then
+ local nextchar=ischar(n,font)
+ if nextchar and halant[nextchar] then
+ local n=getnext(n)
+ if n then
+ local nextnextchar=ischar(n,font)
+ if nextnextchar then
+ c=n
+ char=nextnextchar
+ end
+ end
+ end
+ end
+ if independent_vowel[char] then
+ current=analyze_next_chars_one(c,font,1)
+ syllableend=current
+ else
+ local standalone=char==c_nbsp
+ if standalone then
+ nbspaces=nbspaces+1
+ local p=getprev(current)
+ if not p then
+ elseif ischar(p,font) then
+ elseif not separator[getchar(p)] then
+ else
+ standalone=false
+ end
+ end
+ if standalone then
+ current=analyze_next_chars_one(c,font,2)
+ syllableend=current
+ elseif consonant[getchar(current)] then
+ current=analyze_next_chars_two(current,font)
+ syllableend=current
+ end
+ end
+ end
+ if syllableend then
+ syllabe=syllabe+1
+ local c=syllablestart
+ local n=getnext(syllableend)
+ while c~=n do
+ setprop(c,a_syllabe,syllabe)
+ c=getnext(c)
+ end
+ end
+ if syllableend and syllablestart~=syllableend then
+ head,current,nbspaces=dev2_reorder(head,syllablestart,syllableend,font,attr,nbspaces)
+ end
+ if not syllableend then
+ local char=ischar(current,font)
+ if char and not getprop(current,a_state) then
+ local mark=mark_four[char]
+ if mark then
+ head,current=inject_syntax_error(head,current,mark)
+ end
+ end
+ end
+ start=false
+ current=getnext(current)
+ end
+ if nbspaces>0 then
+ head=replace_all_nbsp(head)
+ end
+ head=tonode(head)
+ return head,done
+end
+methods.mlym=methods.deva
+methods.mlm2=methods.dev2
+
+end --- [luaotfload, fontloader-2017-02-11.lua scope for “font-osdâ€] ---
+
+
+do --- [luaotfload, fontloader-2017-02-11.lua scope for “font-ocl†fbc00782e4efb24a7569f99cd1574ffb] ---
+
+if not modules then modules={} end modules ['font-ocl']={
+ version=1.001,
+ comment="companion to font-otf.lua (context)",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local tostring,next,format=tostring,next,string.format
+local round,max=math.round,math.round
+local formatters=string.formatters
+local tounicode=fonts.mappings.tounicode
+local otf=fonts.handlers.otf
+local f_color=formatters["pdf:direct:%f %f %f rg"]
+local f_gray=formatters["pdf:direct:%f g"]
+local s_black="pdf:direct:0 g"
+if context then
+ local startactualtext=nil
+ local stopactualtext=nil
+ function otf.getactualtext(s)
+ if not startactualtext then
+ startactualtext=backends.codeinjections.startunicodetoactualtextdirect
+ stopactualtext=backends.codeinjections.stopunicodetoactualtextdirect
+ end
+ return startactualtext(s),stopactualtext()
+ end
+else
+ local tounicode=fonts.mappings.tounicode16
+ function otf.getactualtext(s)
+ return
+ "/Span << /ActualText <feff"..n.."> >> BDC",
+ "EMC"
+ end
+end
+local sharedpalettes={}
+if context then
+ local graytorgb=attributes.colors.graytorgb
+ local cmyktorgb=attributes.colors.cmyktorgb
+ function otf.registerpalette(name,values)
+ sharedpalettes[name]=values
+ for i=1,#values do
+ local v=values[i]
+ local r,g,b
+ local s=v.s
+ if s then
+ r,g,b=graytorgb(s)
+ else
+ local c,m,y,k=v.c,v.m,v.y,v.k
+ if c or m or y or k then
+ r,g,b=cmyktorgb(c or 0,m or 0,y or 0,k or 0)
+ else
+ r,g,b=v.r,v.g,v.b
+ end
+ end
+ values[i]={
+ max(r and round(r*255) or 0,255),
+ max(g and round(g*255) or 0,255),
+ max(b and round(b*255) or 0,255)
+ }
+ end
+ end
+else
+ function otf.registerpalette(name,values)
+ sharedpalettes[name]=values
+ for i=1,#values do
+ local v=values[i]
+ values[i]={
+ max(round((v.r or 0)*255),255),
+ max(round((v.g or 0)*255),255),
+ max(round((v.b or 0)*255),255)
+ }
+ end
+ end
+end
+local function initializecolr(tfmdata,kind,value)
+ if value then
+ local palettes=tfmdata.resources.colorpalettes
+ if palettes then
+ local palette=sharedpalettes[value] or palettes[tonumber(value) or 1] or palettes[1] or {}
+ local classes=#palette
+ if classes==0 then
+ return
+ end
+ local characters=tfmdata.characters
+ local descriptions=tfmdata.descriptions
+ local properties=tfmdata.properties
+ local colorvalues={}
+ properties.virtualized=true
+ tfmdata.fonts={
+ { id=0 }
+ }
+ for i=1,classes do
+ local p=palette[i]
+ local r,g,b=p[1],p[2],p[3]
+ if r==g and g==b then
+ colorvalues[i]={ "special",f_gray(r/255) }
+ else
+ colorvalues[i]={ "special",f_color(r/255,g/255,b/255) }
+ end
+ end
+ local getactualtext=otf.getactualtext
+ for unicode,character in next,characters do
+ local description=descriptions[unicode]
+ if description then
+ local colorlist=description.colors
+ if colorlist then
+ local b,e=getactualtext(tounicode(characters[unicode].unicode or 0xFFFD))
+ local w=character.width or 0
+ local s=#colorlist
+ local t={
+ { "special","pdf:page:q" },
+ { "special","pdf:raw:"..b }
+ }
+ local n=#t
+ for i=1,s do
+ local entry=colorlist[i]
+ n=n+1 t[n]=colorvalues[entry.class] or s_black
+ n=n+1 t[n]={ "char",entry.slot }
+ if s>1 and i<s and w~=0 then
+ n=n+1 t[n]={ "right",-w }
+ end
+ end
+ n=n+1 t[n]={ "special","pdf:page:"..e }
+ n=n+1 t[n]={ "special","pdf:raw:Q" }
+ character.commands=t
+ end
+ end
+ end
+ end
+ end
+end
+fonts.handlers.otf.features.register {
+ name="colr",
+ description="color glyphs",
+ manipulators={
+ base=initializecolr,
+ node=initializecolr,
+ }
+}
+local otfsvg=otf.svg or {}
+otf.svg=otfsvg
+otf.svgenabled=true
+do
+ local nofstreams=0
+ local f_name=formatters[ [[svg-glyph-%05i]] ]
+ local f_used=context and formatters[ [[original:///%s]] ] or formatters[ [[%s]] ]
+ local cache={}
+ function otfsvg.storepdfdata(pdf)
+ nofstreams=nofstreams+1
+ local o,n=epdf.openMemStream(pdf,#pdf,f_name(nofstreams))
+ cache[n]=o
+ return nil,f_used(n),nil
+ end
+ if context then
+ local storepdfdata=otfsvg.storepdfdata
+ local initialized=false
+ function otfsvg.storepdfdata(pdf)
+ if not initialized then
+ if resolvers.setmemstream then
+ local f_setstream=formatters[ [[resolvers.setmemstream("svg-glyph-%05i",%q,true)]] ]
+ local f_getstream=formatters[ [[memstream:///svg-glyph-%05i]] ]
+ local f_nilstream=formatters[ [[resolvers.resetmemstream("svg-glyph-%05i",true)]] ]
+ storepdfdata=function(pdf)
+ nofstreams=nofstreams+1
+ return
+ f_setstream(nofstreams,pdf),
+ f_getstream(nofstreams),
+ f_nilstream(nofstreams)
+ end
+ otfsvg.storepdfdata=storepdfdata
+ end
+ initialized=true
+ end
+ return storepdfdata(pdf)
+ end
+ end
+end
+do
+ local report_svg=logs.reporter("fonts","svg conversion")
+ local loaddata=io.loaddata
+ local savedata=io.savedata
+ local remove=os.remove
+ if context and xml.convert then
+ local xmlconvert=xml.convert
+ local xmlfirst=xml.first
+ function otfsvg.filterglyph(entry,index)
+ local svg=xmlconvert(entry.data)
+ local root=svg and xmlfirst(svg,"/svg[@id='glyph"..index.."']")
+ local data=root and tostring(root)
+ return data
+ end
+ else
+ function otfsvg.filterglyph(entry,index)
+ return entry.data
+ end
+ end
+ function otfsvg.topdf(svgshapes)
+ local inkscape=io.popen("inkscape --shell > temp-otf-svg-shape.log","w")
+ local pdfshapes={}
+ local nofshapes=#svgshapes
+ local f_svgfile=formatters["temp-otf-svg-shape-%i.svg"]
+ local f_pdffile=formatters["temp-otf-svg-shape-%i.pdf"]
+ local f_convert=formatters["%s --export-pdf=%s\n"]
+ local filterglyph=otfsvg.filterglyph
+ report_svg("processing %i svg containers",nofshapes)
+ statistics.starttiming()
+ for i=1,nofshapes do
+ local entry=svgshapes[i]
+ for index=entry.first,entry.last do
+ local data=filterglyph(entry,index)
+ if data and data~="" then
+ local svgfile=f_svgfile(index)
+ local pdffile=f_pdffile(index)
+ savedata(svgfile,data)
+ inkscape:write(f_convert(svgfile,pdffile))
+ pdfshapes[index]=true
+ end
+ end
+ end
+ inkscape:write("quit\n")
+ inkscape:close()
+ report_svg("processing %i pdf results",nofshapes)
+ for index in next,pdfshapes do
+ local svgfile=f_svgfile(index)
+ local pdffile=f_pdffile(index)
+ pdfshapes[index]=loaddata(pdffile)
+ remove(svgfile)
+ remove(pdffile)
+ end
+ statistics.stoptiming()
+ if statistics.elapsedseconds then
+ report_svg("svg conversion time %s",statistics.elapsedseconds())
+ end
+ return pdfshapes
+ end
+end
+local function initializesvg(tfmdata,kind,value)
+ if value and otf.svgenabled then
+ local characters=tfmdata.characters
+ local descriptions=tfmdata.descriptions
+ local properties=tfmdata.properties
+ local svg=properties.svg
+ local hash=svg and svg.hash
+ local timestamp=svg and svg.timestamp
+ if not hash then
+ return
+ end
+ local pdffile=containers.read(otf.pdfcache,hash)
+ local pdfshapes=pdffile and pdffile.pdfshapes
+ if not pdfshapes or pdffile.timestamp~=timestamp then
+ local svgfile=containers.read(otf.svgcache,hash)
+ local svgshapes=svgfile and svgfile.svgshapes
+ pdfshapes=svgshapes and otfsvg.topdf(svgshapes) or {}
+ containers.write(otf.pdfcache,hash,{
+ pdfshapes=pdfshapes,
+ timestamp=timestamp,
+ })
+ end
+ if not pdfshapes or not next(pdfshapes) then
+ return
+ end
+ properties.virtualized=true
+ tfmdata.fonts={
+ { id=0 }
+ }
+ local getactualtext=otf.getactualtext
+ local storepdfdata=otfsvg.storepdfdata
+ local nop={ "nop" }
+ for unicode,character in next,characters do
+ local index=character.index
+ if index then
+ local pdf=pdfshapes[index]
+ if pdf then
+ local setcode,name,nilcode=storepdfdata(pdf)
+ if name then
+ local bt,et=getactualtext(unicode)
+ local wd=character.width or 0
+ local ht=character.height or 0
+ local dp=character.depth or 0
+ character.commands={
+ { "special","pdf:direct:"..bt },
+ { "down",dp },
+ setcode and { "lua",setcode } or nop,
+ { "image",{ filename=name,width=wd,height=ht,depth=dp } },
+ nilcode and { "lua",nilcode } or nop,
+ { "special","pdf:direct:"..et },
+ }
+ character.svg=true
+ end
+ end
+ end
+ end
+ end
+end
+fonts.handlers.otf.features.register {
+ name="svg",
+ description="svg glyphs",
+ manipulators={
+ base=initializesvg,
+ node=initializesvg,
+ }
+}
+
+end --- [luaotfload, fontloader-2017-02-11.lua scope for “font-oclâ€] ---
+
+
+do --- [luaotfload, fontloader-2017-02-11.lua scope for “font-otc†85d63e257c748c624768aa7c8ec7f0bc] ---
+
+if not modules then modules={} end modules ['font-otc']={
+ version=1.001,
+ comment="companion to font-otf.lua (context)",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local format,insert,sortedkeys,tohash=string.format,table.insert,table.sortedkeys,table.tohash
+local type,next=type,next
+local lpegmatch=lpeg.match
+local utfbyte,utflen=utf.byte,utf.len
+local trace_loading=false trackers.register("otf.loading",function(v) trace_loading=v end)
+local report_otf=logs.reporter("fonts","otf loading")
+local fonts=fonts
+local otf=fonts.handlers.otf
+local registerotffeature=otf.features.register
+local setmetatableindex=table.setmetatableindex
+local normalized={
+ substitution="substitution",
+ single="substitution",
+ ligature="ligature",
+ alternate="alternate",
+ multiple="multiple",
+ kern="kern",
+ pair="pair",
+ chainsubstitution="chainsubstitution",
+ chainposition="chainposition",
+}
+local types={
+ substitution="gsub_single",
+ ligature="gsub_ligature",
+ alternate="gsub_alternate",
+ multiple="gsub_multiple",
+ kern="gpos_pair",
+ pair="gpos_pair",
+ chainsubstitution="gsub_contextchain",
+ chainposition="gpos_contextchain",
+}
+local names={
+ gsub_single="gsub",
+ gsub_multiple="gsub",
+ gsub_alternate="gsub",
+ gsub_ligature="gsub",
+ gsub_context="gsub",
+ gsub_contextchain="gsub",
+ gsub_reversecontextchain="gsub",
+ gpos_single="gpos",
+ gpos_pair="gpos",
+ gpos_cursive="gpos",
+ gpos_mark2base="gpos",
+ gpos_mark2ligature="gpos",
+ gpos_mark2mark="gpos",
+ gpos_context="gpos",
+ gpos_contextchain="gpos",
+}
+setmetatableindex(types,function(t,k) t[k]=k return k end)
+local everywhere={ ["*"]={ ["*"]=true } }
+local noflags={ false,false,false,false }
+local function getrange(sequences,category)
+ local count=#sequences
+ local first=nil
+ local last=nil
+ for i=1,count do
+ local t=sequences[i].type
+ if t and names[t]==category then
+ if not first then
+ first=i
+ end
+ last=i
+ end
+ end
+ return first or 1,last or count
+end
+local function validspecification(specification,name)
+ local dataset=specification.dataset
+ if dataset then
+ elseif specification[1] then
+ dataset=specification
+ specification={ dataset=dataset }
+ else
+ dataset={ { data=specification.data } }
+ specification.data=nil
+ specification.dataset=dataset
+ end
+ local first=dataset[1]
+ if first then
+ first=first.data
+ end
+ if not first then
+ report_otf("invalid feature specification, no dataset")
+ return
+ end
+ if type(name)~="string" then
+ name=specification.name or first.name
+ end
+ if type(name)~="string" then
+ report_otf("invalid feature specification, no name")
+ return
+ end
+ local n=#dataset
+ if n>0 then
+ for i=1,n do
+ setmetatableindex(dataset[i],specification)
+ end
+ return specification,name
+ end
+end
+local function addfeature(data,feature,specifications)
+ if not specifications then
+ report_otf("missing specification")
+ return
+ end
+ local descriptions=data.descriptions
+ local resources=data.resources
+ local features=resources.features
+ local sequences=resources.sequences
+ if not features or not sequences then
+ report_otf("missing specification")
+ return
+ end
+ local alreadydone=resources.alreadydone
+ if not alreadydone then
+ alreadydone={}
+ resources.alreadydone=alreadydone
+ end
+ if alreadydone[specifications] then
+ return
+ else
+ alreadydone[specifications]=true
+ end
+ local fontfeatures=resources.features or everywhere
+ local unicodes=resources.unicodes
+ local splitter=lpeg.splitter(" ",unicodes)
+ local done=0
+ local skip=0
+ local aglunicodes=false
+ local specifications=validspecification(specifications,feature)
+ if not specifications then
+ return
+ end
+ local function tounicode(code)
+ if not code then
+ return
+ end
+ if type(code)=="number" then
+ return code
+ end
+ local u=unicodes[code]
+ if u then
+ return u
+ end
+ if utflen(code)==1 then
+ u=utfbyte(code)
+ if u then
+ return u
+ end
+ end
+ if not aglunicodes then
+ aglunicodes=fonts.encodings.agl.unicodes
+ end
+ return aglunicodes[code]
+ end
+ local coverup=otf.coverup
+ local coveractions=coverup.actions
+ local stepkey=coverup.stepkey
+ local register=coverup.register
+ local function prepare_substitution(list,featuretype)
+ local coverage={}
+ local cover=coveractions[featuretype]
+ for code,replacement in next,list do
+ local unicode=tounicode(code)
+ local description=descriptions[unicode]
+ if description then
+ if type(replacement)=="table" then
+ replacement=replacement[1]
+ end
+ replacement=tounicode(replacement)
+ if replacement and descriptions[replacement] then
+ cover(coverage,unicode,replacement)
+ done=done+1
+ else
+ skip=skip+1
+ end
+ else
+ skip=skip+1
+ end
+ end
+ return coverage
+ end
+ local function prepare_alternate(list,featuretype)
+ local coverage={}
+ local cover=coveractions[featuretype]
+ for code,replacement in next,list do
+ local unicode=tounicode(code)
+ local description=descriptions[unicode]
+ if not description then
+ skip=skip+1
+ elseif type(replacement)=="table" then
+ local r={}
+ for i=1,#replacement do
+ local u=tounicode(replacement[i])
+ r[i]=descriptions[u] and u or unicode
+ end
+ cover(coverage,unicode,r)
+ done=done+1
+ else
+ local u=tounicode(replacement)
+ if u then
+ cover(coverage,unicode,{ u })
+ done=done+1
+ else
+ skip=skip+1
+ end
+ end
+ end
+ return coverage
+ end
+ local function prepare_multiple(list,featuretype)
+ local coverage={}
+ local cover=coveractions[featuretype]
+ for code,replacement in next,list do
+ local unicode=tounicode(code)
+ local description=descriptions[unicode]
+ if not description then
+ skip=skip+1
+ elseif type(replacement)=="table" then
+ local r,n={},0
+ for i=1,#replacement do
+ local u=tounicode(replacement[i])
+ if descriptions[u] then
+ n=n+1
+ r[n]=u
+ end
+ end
+ if n>0 then
+ cover(coverage,unicode,r)
+ done=done+1
+ else
+ skip=skip+1
+ end
+ else
+ local u=tounicode(replacement)
+ if u then
+ cover(coverage,unicode,{ u })
+ done=done+1
+ else
+ skip=skip+1
+ end
+ end
+ end
+ return coverage
+ end
+ local function prepare_ligature(list,featuretype)
+ local coverage={}
+ local cover=coveractions[featuretype]
+ for code,ligature in next,list do
+ local unicode=tounicode(code)
+ local description=descriptions[unicode]
+ if description then
+ if type(ligature)=="string" then
+ ligature={ lpegmatch(splitter,ligature) }
+ end
+ local present=true
+ for i=1,#ligature do
+ local l=ligature[i]
+ local u=tounicode(l)
+ if descriptions[u] then
+ ligature[i]=u
+ else
+ present=false
+ break
+ end
+ end
+ if present then
+ cover(coverage,unicode,ligature)
+ done=done+1
+ else
+ skip=skip+1
+ end
+ else
+ skip=skip+1
+ end
+ end
+ return coverage
+ end
+ local function prepare_kern(list,featuretype)
+ local coverage={}
+ local cover=coveractions[featuretype]
+ for code,replacement in next,list do
+ local unicode=tounicode(code)
+ local description=descriptions[unicode]
+ if description and type(replacement)=="table" then
+ local r={}
+ for k,v in next,replacement do
+ local u=tounicode(k)
+ if u then
+ r[u]=v
+ end
+ end
+ if next(r) then
+ cover(coverage,unicode,r)
+ done=done+1
+ else
+ skip=skip+1
+ end
+ else
+ skip=skip+1
+ end
+ end
+ return coverage
+ end
+ local function prepare_pair(list,featuretype)
+ local coverage={}
+ local cover=coveractions[featuretype]
+ if cover then
+ for code,replacement in next,list do
+ local unicode=tounicode(code)
+ local description=descriptions[unicode]
+ if description and type(replacement)=="table" then
+ local r={}
+ for k,v in next,replacement do
+ local u=tounicode(k)
+ if u then
+ r[u]=v
+ end
+ end
+ if next(r) then
+ cover(coverage,unicode,r)
+ done=done+1
+ else
+ skip=skip+1
+ end
+ else
+ skip=skip+1
+ end
+ end
+ else
+ report_otf("unknown cover type %a",featuretype)
+ end
+ return coverage
+ end
+ local function prepare_chain(list,featuretype,sublookups)
+ local rules=list.rules
+ local coverage={}
+ if rules then
+ local rulehash={}
+ local rulesize=0
+ local sequence={}
+ local nofsequences=0
+ local lookuptype=types[featuretype]
+ for nofrules=1,#rules do
+ local rule=rules[nofrules]
+ local current=rule.current
+ local before=rule.before
+ local after=rule.after
+ local replacements=rule.replacements or false
+ local sequence={}
+ local nofsequences=0
+ if before then
+ for n=1,#before do
+ nofsequences=nofsequences+1
+ sequence[nofsequences]=before[n]
+ end
+ end
+ local start=nofsequences+1
+ for n=1,#current do
+ nofsequences=nofsequences+1
+ sequence[nofsequences]=current[n]
+ end
+ local stop=nofsequences
+ if after then
+ for n=1,#after do
+ nofsequences=nofsequences+1
+ sequence[nofsequences]=after[n]
+ end
+ end
+ local lookups=rule.lookups or false
+ local subtype=nil
+ if lookups and sublookups then
+ for k,v in next,lookups do
+ local lookup=sublookups[v]
+ if lookup then
+ lookups[k]=lookup
+ if not subtype then
+ subtype=lookup.type
+ end
+ else
+ end
+ end
+ end
+ if nofsequences>0 then
+ local hashed={}
+ for i=1,nofsequences do
+ local t={}
+ local s=sequence[i]
+ for i=1,#s do
+ local u=tounicode(s[i])
+ if u then
+ t[u]=true
+ end
+ end
+ hashed[i]=t
+ end
+ sequence=hashed
+ rulesize=rulesize+1
+ rulehash[rulesize]={
+ nofrules,
+ lookuptype,
+ sequence,
+ start,
+ stop,
+ lookups,
+ replacements,
+ subtype,
+ }
+ for unic in next,sequence[start] do
+ local cu=coverage[unic]
+ if not cu then
+ coverage[unic]=rulehash
+ end
+ end
+ end
+ end
+ end
+ return coverage
+ end
+ local dataset=specifications.dataset
+ local function report(name,category,position,first,last,sequences)
+ report_otf("injecting name %a of category %a at position %i in [%i,%i] of [%i,%i]",
+ name,category,position,first,last,1,#sequences)
+ end
+ local function inject(specification,sequences,sequence,first,last,category,name)
+ local position=specification.position or false
+ if not position then
+ position=specification.prepend
+ if position==true then
+ if trace_loading then
+ report(name,category,first,first,last,sequences)
+ end
+ insert(sequences,first,sequence)
+ return
+ end
+ end
+ if not position then
+ position=specification.append
+ if position==true then
+ if trace_loading then
+ report(name,category,last+1,first,last,sequences)
+ end
+ insert(sequences,last+1,sequence)
+ return
+ end
+ end
+ local kind=type(position)
+ if kind=="string" then
+ local index=false
+ for i=first,last do
+ local s=sequences[i]
+ local f=s.features
+ if f then
+ for k in next,f do
+ if k==position then
+ index=i
+ break
+ end
+ end
+ if index then
+ break
+ end
+ end
+ end
+ if index then
+ position=index
+ else
+ position=last+1
+ end
+ elseif kind=="number" then
+ if position<0 then
+ position=last-position+1
+ end
+ if position>last then
+ position=last+1
+ elseif position<first then
+ position=first
+ end
+ else
+ position=last+1
+ end
+ if trace_loading then
+ report(name,category,position,first,last,sequences)
+ end
+ insert(sequences,position,sequence)
+ end
+ for s=1,#dataset do
+ local specification=dataset[s]
+ local valid=specification.valid
+ local feature=specification.name or feature
+ if not feature or feature=="" then
+ report_otf("no valid name given for extra feature")
+ elseif not valid or valid(data,specification,feature) then
+ local initialize=specification.initialize
+ if initialize then
+ specification.initialize=initialize(specification,data) and initialize or nil
+ end
+ local askedfeatures=specification.features or everywhere
+ local askedsteps=specification.steps or specification.subtables or { specification.data } or {}
+ local featuretype=normalized[specification.type or "substitution"] or "substitution"
+ local featureflags=specification.flags or noflags
+ local featureorder=specification.order or { feature }
+ local featurechain=(featuretype=="chainsubstitution" or featuretype=="chainposition") and 1 or 0
+ local nofsteps=0
+ local steps={}
+ local sublookups=specification.lookups
+ local category=nil
+ if sublookups then
+ local s={}
+ for i=1,#sublookups do
+ local specification=sublookups[i]
+ local askedsteps=specification.steps or specification.subtables or { specification.data } or {}
+ local featuretype=normalized[specification.type or "substitution"] or "substitution"
+ local featureflags=specification.flags or noflags
+ local nofsteps=0
+ local steps={}
+ for i=1,#askedsteps do
+ local list=askedsteps[i]
+ local coverage=nil
+ local format=nil
+ if featuretype=="substitution" then
+ coverage=prepare_substitution(list,featuretype)
+ elseif featuretype=="ligature" then
+ coverage=prepare_ligature(list,featuretype)
+ elseif featuretype=="alternate" then
+ coverage=prepare_alternate(list,featuretype)
+ elseif featuretype=="multiple" then
+ coverage=prepare_multiple(list,featuretype)
+ elseif featuretype=="kern" then
+ format="kern"
+ coverage=prepare_kern(list,featuretype)
+ elseif featuretype=="pair" then
+ format="pair"
+ coverage=prepare_pair(list,featuretype)
+ end
+ if coverage and next(coverage) then
+ nofsteps=nofsteps+1
+ steps[nofsteps]=register(coverage,featuretype,format,feature,nofsteps,descriptions,resources)
+ end
+ end
+ s[i]={
+ [stepkey]=steps,
+ nofsteps=nofsteps,
+ type=types[featuretype],
+ }
+ end
+ sublookups=s
+ end
+ for i=1,#askedsteps do
+ local list=askedsteps[i]
+ local coverage=nil
+ local format=nil
+ if featuretype=="substitution" then
+ category="gsub"
+ coverage=prepare_substitution(list,featuretype)
+ elseif featuretype=="ligature" then
+ category="gsub"
+ coverage=prepare_ligature(list,featuretype)
+ elseif featuretype=="alternate" then
+ category="gsub"
+ coverage=prepare_alternate(list,featuretype)
+ elseif featuretype=="multiple" then
+ category="gsub"
+ coverage=prepare_multiple(list,featuretype)
+ elseif featuretype=="kern" then
+ category="gpos"
+ format="kern"
+ coverage=prepare_kern(list,featuretype)
+ elseif featuretype=="pair" then
+ category="gpos"
+ format="pair"
+ coverage=prepare_pair(list,featuretype)
+ elseif featuretype=="chainsubstitution" then
+ category="gsub"
+ coverage=prepare_chain(list,featuretype,sublookups)
+ elseif featuretype=="chainposition" then
+ category="gpos"
+ coverage=prepare_chain(list,featuretype,sublookups)
+ else
+ report_otf("not registering feature %a, unknown category",feature)
+ return
+ end
+ if coverage and next(coverage) then
+ nofsteps=nofsteps+1
+ steps[nofsteps]=register(coverage,featuretype,format,feature,nofsteps,descriptions,resources)
+ end
+ end
+ if nofsteps>0 then
+ for k,v in next,askedfeatures do
+ if v[1] then
+ askedfeatures[k]=tohash(v)
+ end
+ end
+ if featureflags[1] then featureflags[1]="mark" end
+ if featureflags[2] then featureflags[2]="ligature" end
+ if featureflags[3] then featureflags[3]="base" end
+ local steptype=types[featuretype]
+ local sequence={
+ chain=featurechain,
+ features={ [feature]=askedfeatures },
+ flags=featureflags,
+ name=feature,
+ order=featureorder,
+ [stepkey]=steps,
+ nofsteps=nofsteps,
+ type=steptype,
+ }
+ local first,last=getrange(sequences,category)
+ inject(specification,sequences,sequence,first,last,category,feature)
+ local features=fontfeatures[category]
+ if not features then
+ features={}
+ fontfeatures[category]=features
+ end
+ local k=features[feature]
+ if not k then
+ k={}
+ features[feature]=k
+ end
+ for script,languages in next,askedfeatures do
+ local kk=k[script]
+ if not kk then
+ kk={}
+ k[script]=kk
+ end
+ for language,value in next,languages do
+ kk[language]=value
+ end
+ end
+ end
+ end
+ end
+ if trace_loading then
+ report_otf("registering feature %a, affected glyphs %a, skipped glyphs %a",feature,done,skip)
+ end
+end
+otf.enhancers.addfeature=addfeature
+local extrafeatures={}
+local knownfeatures={}
+function otf.addfeature(name,specification)
+ if type(name)=="table" then
+ specification=name
+ end
+ if type(specification)~="table" then
+ report_otf("invalid feature specification, no valid table")
+ return
+ end
+ specification,name=validspecification(specification,name)
+ if name and specification then
+ local slot=knownfeatures[name]
+ if slot then
+ else
+ slot=#extrafeatures+1
+ knownfeatures[name]=slot
+ end
+ specification.name=name
+ extrafeatures[slot]=specification
+ end
+end
+local function enhance(data,filename,raw)
+ for slot=1,#extrafeatures do
+ local specification=extrafeatures[slot]
+ addfeature(data,specification.name,specification)
+ end
+end
+otf.enhancers.enhance=enhance
+otf.enhancers.register("check extra features",enhance)
+local tlig={
+ [0x2013]={ 0x002D,0x002D },
+ [0x2014]={ 0x002D,0x002D,0x002D },
+}
+local tlig_specification={
+ type="ligature",
+ features=everywhere,
+ data=tlig,
+ order={ "tlig" },
+ flags=noflags,
+ prepend=true,
+}
+otf.addfeature("tlig",tlig_specification)
+registerotffeature {
+ name='tlig',
+ description='tex ligatures',
+}
+local trep={
+ [0x0027]=0x2019,
+}
+local trep_specification={
+ type="substitution",
+ features=everywhere,
+ data=trep,
+ order={ "trep" },
+ flags=noflags,
+ prepend=true,
+}
+otf.addfeature("trep",trep_specification)
+registerotffeature {
+ name='trep',
+ description='tex replacements',
+}
+local anum_arabic={
+ [0x0030]=0x0660,
+ [0x0031]=0x0661,
+ [0x0032]=0x0662,
+ [0x0033]=0x0663,
+ [0x0034]=0x0664,
+ [0x0035]=0x0665,
+ [0x0036]=0x0666,
+ [0x0037]=0x0667,
+ [0x0038]=0x0668,
+ [0x0039]=0x0669,
+}
+local anum_persian={
+ [0x0030]=0x06F0,
+ [0x0031]=0x06F1,
+ [0x0032]=0x06F2,
+ [0x0033]=0x06F3,
+ [0x0034]=0x06F4,
+ [0x0035]=0x06F5,
+ [0x0036]=0x06F6,
+ [0x0037]=0x06F7,
+ [0x0038]=0x06F8,
+ [0x0039]=0x06F9,
+}
+local function valid(data)
+ local features=data.resources.features
+ if features then
+ for k,v in next,features do
+ for k,v in next,v do
+ if v.arab then
+ return true
+ end
+ end
+ end
+ end
+end
+local anum_specification={
+ {
+ type="substitution",
+ features={ arab={ urd=true,dflt=true } },
+ order={ "anum" },
+ data=anum_arabic,
+ flags=noflags,
+ valid=valid,
+ },
+ {
+ type="substitution",
+ features={ arab={ urd=true } },
+ order={ "anum" },
+ data=anum_persian,
+ flags=noflags,
+ valid=valid,
+ },
+}
+otf.addfeature("anum",anum_specification)
+registerotffeature {
+ name='anum',
+ description='arabic digits',
+}
+
+end --- [luaotfload, fontloader-2017-02-11.lua scope for “font-otcâ€] ---
+
+
+do --- [luaotfload, fontloader-2017-02-11.lua scope for “font-onr†205c8bc640715aecf3538a33b842f450] ---
+
+if not modules then modules={} end modules ['font-onr']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local fonts,logs,trackers,resolvers=fonts,logs,trackers,resolvers
+local next,type,tonumber,rawget,rawset=next,type,tonumber,rawget,rawset
+local match,lower,gsub,strip,find=string.match,string.lower,string.gsub,string.strip,string.find
+local char,byte,sub=string.char,string.byte,string.sub
+local abs=math.abs
+local bxor,rshift=bit32.bxor,bit32.rshift
+local P,S,R,Cmt,C,Ct,Cs,Carg,Cf,Cg=lpeg.P,lpeg.S,lpeg.R,lpeg.Cmt,lpeg.C,lpeg.Ct,lpeg.Cs,lpeg.Carg,lpeg.Cf,lpeg.Cg
+local lpegmatch,patterns=lpeg.match,lpeg.patterns
+local trace_indexing=false trackers.register("afm.indexing",function(v) trace_indexing=v end)
+local trace_loading=false trackers.register("afm.loading",function(v) trace_loading=v end)
+local report_afm=logs.reporter("fonts","afm loading")
+local report_pfb=logs.reporter("fonts","pfb loading")
+local handlers=fonts.handlers
+local afm=handlers.afm or {}
+handlers.afm=afm
+local readers=afm.readers or {}
+afm.readers=readers
+afm.version=1.512
+local get_indexes,get_shapes
+do
+ local decrypt
+ do
+ local r,c1,c2,n=0,0,0,0
+ local function step(c)
+ local cipher=byte(c)
+ local plain=bxor(cipher,rshift(r,8))
+ r=((cipher+r)*c1+c2)%65536
+ return char(plain)
+ end
+ decrypt=function(binary,initial,seed)
+ r,c1,c2,n=initial,52845,22719,seed
+ binary=gsub(binary,".",step)
+ return sub(binary,n+1)
+ end
+ end
+ local charstrings=P("/CharStrings")
+ local subroutines=P("/Subrs")
+ local encoding=P("/Encoding")
+ local dup=P("dup")
+ local put=P("put")
+ local array=P("array")
+ local name=P("/")*C((R("az")+R("AZ")+R("09")+S("-_."))^1)
+ local digits=R("09")^1
+ local cardinal=digits/tonumber
+ local spaces=P(" ")^1
+ local spacing=patterns.whitespace^0
+ local routines,vector,chars,n,m
+ local initialize=function(str,position,size)
+ n=0
+ m=size
+ return position+1
+ end
+ local setroutine=function(str,position,index,size)
+ local forward=position+tonumber(size)
+ local stream=sub(str,position+1,forward)
+ routines[index]=decrypt(stream,4330,4)
+ return forward
+ end
+ local setvector=function(str,position,name,size)
+ local forward=position+tonumber(size)
+ if n>=m then
+ return #str
+ elseif forward<#str then
+ vector[n]=name
+ n=n+1
+ return forward
+ else
+ return #str
+ end
+ end
+ local setshapes=function(str,position,name,size)
+ local forward=position+tonumber(size)
+ local stream=sub(str,position+1,forward)
+ if n>m then
+ return #str
+ elseif forward<#str then
+ vector[n]=name
+ n=n+1
+ chars [n]=decrypt(stream,4330,4)
+ return forward
+ else
+ return #str
+ end
+ end
+ local p_rd=spacing*(P("RD")+P("-|"))
+ local p_np=spacing*(P("NP")+P("|"))
+ local p_nd=spacing*(P("ND")+P("|"))
+ local p_filterroutines=
+ (1-subroutines)^0*subroutines*spaces*Cmt(cardinal,initialize)*(Cmt(cardinal*spaces*cardinal*p_rd,setroutine)*p_np+P(1))^1
+ local p_filtershapes=
+ (1-charstrings)^0*charstrings*spaces*Cmt(cardinal,initialize)*(Cmt(name*spaces*cardinal*p_rd,setshapes)*p_nd+P(1))^1
+ local p_filternames=Ct (
+ (1-charstrings)^0*charstrings*spaces*Cmt(cardinal,initialize)*(Cmt(name*spaces*cardinal,setvector)+P(1))^1
+ )
+ local p_filterencoding=(1-encoding)^0*encoding*spaces*digits*spaces*array*(1-dup)^0*Cf(
+ Ct("")*Cg(spacing*dup*spaces*cardinal*spaces*name*spaces*put)^1
+,rawset)
+ local function loadpfbvector(filename,shapestoo)
+ local data=io.loaddata(resolvers.findfile(filename))
+ if not data then
+ report_pfb("no data in %a",filename)
+ return
+ end
+ if not (find(data,"!PS%-AdobeFont%-") or find(data,"%%!FontType1")) then
+ report_pfb("no font in %a",filename)
+ return
+ end
+ local ascii,binary=match(data,"(.*)eexec%s+......(.*)")
+ if not binary then
+ report_pfb("no binary data in %a",filename)
+ return
+ end
+ binary=decrypt(binary,55665,4)
+ local names={}
+ local encoding=lpegmatch(p_filterencoding,ascii)
+ local glyphs={}
+ routines,vector,chars={},{},{}
+ if shapestoo then
+ lpegmatch(p_filterroutines,binary)
+ lpegmatch(p_filtershapes,binary)
+ local data={
+ dictionaries={
+ {
+ charstrings=chars,
+ charset=vector,
+ subroutines=routines,
+ }
+ },
+ }
+ fonts.handlers.otf.readers.parsecharstrings(data,glyphs,true,true)
+ else
+ lpegmatch(p_filternames,binary)
+ end
+ names=vector
+ routines,vector,chars=nil,nil,nil
+ return names,encoding,glyphs
+ end
+ local pfb=handlers.pfb or {}
+ handlers.pfb=pfb
+ pfb.loadvector=loadpfbvector
+ get_indexes=function(data,pfbname)
+ local vector=loadpfbvector(pfbname)
+ if vector then
+ local characters=data.characters
+ if trace_loading then
+ report_afm("getting index data from %a",pfbname)
+ end
+ for index=1,#vector do
+ local name=vector[index]
+ local char=characters[name]
+ if char then
+ if trace_indexing then
+ report_afm("glyph %a has index %a",name,index)
+ end
+ char.index=index
+ end
+ end
+ end
+ end
+ get_shapes=function(pfbname)
+ local vector,encoding,glyphs=loadpfbvector(pfbname,true)
+ return glyphs
+ end
+end
+local spacer=patterns.spacer
+local whitespace=patterns.whitespace
+local lineend=patterns.newline
+local spacing=spacer^0
+local number=spacing*S("+-")^-1*(R("09")+S("."))^1/tonumber
+local name=spacing*C((1-whitespace)^1)
+local words=spacing*((1-lineend)^1/strip)
+local rest=(1-lineend)^0
+local fontdata=Carg(1)
+local semicolon=spacing*P(";")
+local plus=spacing*P("plus")*number
+local minus=spacing*P("minus")*number
+local function addkernpair(data,one,two,value)
+ local chr=data.characters[one]
+ if chr then
+ local kerns=chr.kerns
+ if kerns then
+ kerns[two]=tonumber(value)
+ else
+ chr.kerns={ [two]=tonumber(value) }
+ end
+ end
+end
+local p_kernpair=(fontdata*P("KPX")*name*name*number)/addkernpair
+local chr=false
+local ind=0
+local function start(data,version)
+ data.metadata.afmversion=version
+ ind=0
+ chr={}
+end
+local function stop()
+ ind=0
+ chr=false
+end
+local function setindex(i)
+ if i<0 then
+ ind=ind+1
+ else
+ ind=i
+ end
+ chr={
+ index=ind
+ }
+end
+local function setwidth(width)
+ chr.width=width
+end
+local function setname(data,name)
+ data.characters[name]=chr
+end
+local function setboundingbox(boundingbox)
+ chr.boundingbox=boundingbox
+end
+local function setligature(plus,becomes)
+ local ligatures=chr.ligatures
+ if ligatures then
+ ligatures[plus]=becomes
+ else
+ chr.ligatures={ [plus]=becomes }
+ end
+end
+local p_charmetric=((
+ P("C")*number/setindex+P("WX")*number/setwidth+P("N")*fontdata*name/setname+P("B")*Ct((number)^4)/setboundingbox+P("L")*(name)^2/setligature
+ )*semicolon )^1
+local p_charmetrics=P("StartCharMetrics")*number*(p_charmetric+(1-P("EndCharMetrics")))^0*P("EndCharMetrics")
+local p_kernpairs=P("StartKernPairs")*number*(p_kernpair+(1-P("EndKernPairs" )))^0*P("EndKernPairs" )
+local function set_1(data,key,a) data.metadata[lower(key)]=a end
+local function set_2(data,key,a,b) data.metadata[lower(key)]={ a,b } end
+local function set_3(data,key,a,b,c) data.metadata[lower(key)]={ a,b,c } end
+local p_parameters=P(false)+fontdata*((P("FontName")+P("FullName")+P("FamilyName"))/lower)*words/function(data,key,value)
+ data.metadata[key]=value
+ end+fontdata*((P("Weight")+P("Version"))/lower)*name/function(data,key,value)
+ data.metadata[key]=value
+ end+fontdata*P("IsFixedPitch")*name/function(data,pitch)
+ data.metadata.monospaced=toboolean(pitch,true)
+ end+fontdata*P("FontBBox")*Ct(number^4)/function(data,boundingbox)
+ data.metadata.boundingbox=boundingbox
+ end+fontdata*((P("CharWidth")+P("CapHeight")+P("XHeight")+P("Descender")+P("Ascender")+P("ItalicAngle"))/lower)*number/function(data,key,value)
+ data.metadata[key]=value
+ end+P("Comment")*spacing*(P(false)+(fontdata*C("DESIGNSIZE")*number*rest)/set_1
++(fontdata*C("TFM designsize")*number*rest)/set_1+(fontdata*C("DesignSize")*number*rest)/set_1+(fontdata*C("CODINGSCHEME")*words*rest)/set_1
++(fontdata*C("CHECKSUM")*number*words*rest)/set_1
++(fontdata*C("SPACE")*number*plus*minus*rest)/set_3
++(fontdata*C("QUAD")*number*rest)/set_1
++(fontdata*C("EXTRASPACE")*number*rest)/set_1
++(fontdata*C("NUM")*number*number*number*rest)/set_3
++(fontdata*C("DENOM")*number*number*rest)/set_2
++(fontdata*C("SUP")*number*number*number*rest)/set_3
++(fontdata*C("SUB")*number*number*rest)/set_2
++(fontdata*C("SUPDROP")*number*rest)/set_1
++(fontdata*C("SUBDROP")*number*rest)/set_1
++(fontdata*C("DELIM")*number*number*rest)/set_2
++(fontdata*C("AXISHEIGHT")*number*rest)/set_1
+ )
+local fullparser=(P("StartFontMetrics")*fontdata*name/start )*(p_charmetrics+p_kernpairs+p_parameters+(1-P("EndFontMetrics")) )^0*(P("EndFontMetrics")/stop )
+local fullparser=(P("StartFontMetrics")*fontdata*name/start )*(p_charmetrics+p_kernpairs+p_parameters+(1-P("EndFontMetrics")) )^0*(P("EndFontMetrics")/stop )
+local infoparser=(P("StartFontMetrics")*fontdata*name/start )*(p_parameters+(1-P("EndFontMetrics")) )^0*(P("EndFontMetrics")/stop )
+local function read(filename,parser)
+ local afmblob=io.loaddata(filename)
+ if afmblob then
+ local data={
+ resources={
+ filename=resolvers.unresolve(filename),
+ version=afm.version,
+ creator="context mkiv",
+ },
+ properties={
+ hasitalics=false,
+ },
+ goodies={},
+ metadata={
+ filename=file.removesuffix(file.basename(filename))
+ },
+ characters={
+ },
+ descriptions={
+ },
+ }
+ if trace_loading then
+ report_afm("parsing afm file %a",filename)
+ end
+ lpegmatch(parser,afmblob,1,data)
+ return data
+ else
+ if trace_loading then
+ report_afm("no valid afm file %a",filename)
+ end
+ return nil
+ end
+end
+function readers.loadfont(afmname,pfbname)
+ local data=read(resolvers.findfile(afmname),fullparser)
+ if data then
+ if not pfbname or pfbname=="" then
+ pfbname=file.replacesuffix(file.nameonly(afmname),"pfb")
+ pfbname=resolvers.findfile(pfbname)
+ end
+ if pfbname and pfbname~="" then
+ data.resources.filename=resolvers.unresolve(pfbname)
+ get_indexes(data,pfbname)
+ elseif trace_loading then
+ report_afm("no pfb file for %a",afmname)
+ end
+ return data
+ end
+end
+function readers.loadshapes(filename)
+ local fullname=resolvers.findfile(filename) or ""
+ if fullname=="" then
+ return {
+ filename="not found: "..filename,
+ glyphs={}
+ }
+ else
+ return {
+ filename=fullname,
+ format="opentype",
+ glyphs=get_shapes(fullname) or {},
+ units=1000,
+ }
+ end
+end
+function readers.getinfo(filename)
+ local data=read(resolvers.findfile(filename),infoparser)
+ if data then
+ return data.metadata
+ end
+end
+
+end --- [luaotfload, fontloader-2017-02-11.lua scope for “font-onrâ€] ---
+
+
+do --- [luaotfload, fontloader-2017-02-11.lua scope for “font-one†6fbf6b9e219a944cd1ad5933d77cc488] ---
+
+if not modules then modules={} end modules ['font-one']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local fonts,logs,trackers,containers,resolvers=fonts,logs,trackers,containers,resolvers
+local next,type,tonumber,rawget=next,type,tonumber,rawget
+local match,gmatch,lower,gsub,strip,find=string.match,string.gmatch,string.lower,string.gsub,string.strip,string.find
+local char,byte,sub=string.char,string.byte,string.sub
+local abs=math.abs
+local bxor,rshift=bit32.bxor,bit32.rshift
+local P,S,R,Cmt,C,Ct,Cs,Carg=lpeg.P,lpeg.S,lpeg.R,lpeg.Cmt,lpeg.C,lpeg.Ct,lpeg.Cs,lpeg.Carg
+local lpegmatch,patterns=lpeg.match,lpeg.patterns
+local trace_features=false trackers.register("afm.features",function(v) trace_features=v end)
+local trace_indexing=false trackers.register("afm.indexing",function(v) trace_indexing=v end)
+local trace_loading=false trackers.register("afm.loading",function(v) trace_loading=v end)
+local trace_defining=false trackers.register("fonts.defining",function(v) trace_defining=v end)
+local report_afm=logs.reporter("fonts","afm loading")
+local setmetatableindex=table.setmetatableindex
+local derivetable=table.derive
+local findbinfile=resolvers.findbinfile
+local definers=fonts.definers
+local readers=fonts.readers
+local constructors=fonts.constructors
+local afm=constructors.handlers.afm
+local pfb=constructors.handlers.pfb
+local otf=fonts.handlers.otf
+local otfreaders=otf.readers
+local otfenhancers=otf.enhancers
+local afmfeatures=constructors.features.afm
+local registerafmfeature=afmfeatures.register
+local afmenhancers=constructors.enhancers.afm
+local registerafmenhancer=afmenhancers.register
+afm.version=1.512
+afm.cache=containers.define("fonts","one",afm.version,true)
+afm.autoprefixed=true
+afm.helpdata={}
+afm.syncspace=true
+local overloads=fonts.mappings.overloads
+local applyruntimefixes=fonts.treatments and fonts.treatments.applyfixes
+function afm.load(filename)
+ filename=resolvers.findfile(filename,'afm') or ""
+ if filename~="" and not fonts.names.ignoredfile(filename) then
+ local name=file.removesuffix(file.basename(filename))
+ local data=containers.read(afm.cache,name)
+ local attr=lfs.attributes(filename)
+ local size,time=attr.size or 0,attr.modification or 0
+ local pfbfile=file.replacesuffix(name,"pfb")
+ local pfbname=resolvers.findfile(pfbfile,"pfb") or ""
+ if pfbname=="" then
+ pfbname=resolvers.findfile(file.basename(pfbfile),"pfb") or ""
+ end
+ local pfbsize,pfbtime=0,0
+ if pfbname~="" then
+ local attr=lfs.attributes(pfbname)
+ pfbsize=attr.size or 0
+ pfbtime=attr.modification or 0
+ end
+ if not data or data.size~=size or data.time~=time or data.pfbsize~=pfbsize or data.pfbtime~=pfbtime then
+ report_afm("reading %a",filename)
+ data=afm.readers.loadfont(filename,pfbname)
+ if data then
+ afmenhancers.apply(data,filename)
+ fonts.mappings.addtounicode(data,filename)
+ otfreaders.pack(data)
+ data.size=size
+ data.time=time
+ data.pfbsize=pfbsize
+ data.pfbtime=pfbtime
+ report_afm("saving %a in cache",name)
+ data=containers.write(afm.cache,name,data)
+ data=containers.read(afm.cache,name)
+ end
+ end
+ if data then
+ otfreaders.unpack(data)
+ otfreaders.expand(data)
+ otfreaders.addunicodetable(data)
+ otfenhancers.apply(data,filename,data)
+ if applyruntimefixes then
+ applyruntimefixes(filename,data)
+ end
+ end
+ return data
+ end
+end
+local uparser=fonts.mappings.makenameparser()
+local function enhance_unify_names(data,filename)
+ local unicodevector=fonts.encodings.agl.unicodes
+ local unicodes={}
+ local names={}
+ local private=constructors.privateoffset
+ local descriptions=data.descriptions
+ for name,blob in next,data.characters do
+ local code=unicodevector[name]
+ if not code then
+ code=lpegmatch(uparser,name)
+ if type(code)~="number" then
+ code=private
+ private=private+1
+ report_afm("assigning private slot %U for unknown glyph name %a",code,name)
+ end
+ end
+ local index=blob.index
+ unicodes[name]=code
+ names[name]=index
+ blob.name=name
+ descriptions[code]={
+ boundingbox=blob.boundingbox,
+ width=blob.width,
+ kerns=blob.kerns,
+ index=index,
+ name=name,
+ }
+ end
+ for unicode,description in next,descriptions do
+ local kerns=description.kerns
+ if kerns then
+ local krn={}
+ for name,kern in next,kerns do
+ local unicode=unicodes[name]
+ if unicode then
+ krn[unicode]=kern
+ else
+ end
+ end
+ description.kerns=krn
+ end
+ end
+ data.characters=nil
+ local resources=data.resources
+ local filename=resources.filename or file.removesuffix(file.basename(filename))
+ resources.filename=resolvers.unresolve(filename)
+ resources.unicodes=unicodes
+ resources.marks={}
+ resources.private=private
+end
+local everywhere={ ["*"]={ ["*"]=true } }
+local noflags={ false,false,false,false }
+local function enhance_normalize_features(data)
+ local ligatures=setmetatableindex("table")
+ local kerns=setmetatableindex("table")
+ local extrakerns=setmetatableindex("table")
+ for u,c in next,data.descriptions do
+ local l=c.ligatures
+ local k=c.kerns
+ local e=c.extrakerns
+ if l then
+ ligatures[u]=l
+ for u,v in next,l do
+ l[u]={ ligature=v }
+ end
+ c.ligatures=nil
+ end
+ if k then
+ kerns[u]=k
+ for u,v in next,k do
+ k[u]=v
+ end
+ c.kerns=nil
+ end
+ if e then
+ extrakerns[u]=e
+ for u,v in next,e do
+ e[u]=v
+ end
+ c.extrakerns=nil
+ end
+ end
+ local features={
+ gpos={},
+ gsub={},
+ }
+ local sequences={
+ }
+ if next(ligatures) then
+ features.gsub.liga=everywhere
+ data.properties.hasligatures=true
+ sequences[#sequences+1]={
+ features={
+ liga=everywhere,
+ },
+ flags=noflags,
+ name="s_s_0",
+ nofsteps=1,
+ order={ "liga" },
+ type="gsub_ligature",
+ steps={
+ {
+ coverage=ligatures,
+ },
+ },
+ }
+ end
+ if next(kerns) then
+ features.gpos.kern=everywhere
+ data.properties.haskerns=true
+ sequences[#sequences+1]={
+ features={
+ kern=everywhere,
+ },
+ flags=noflags,
+ name="p_s_0",
+ nofsteps=1,
+ order={ "kern" },
+ type="gpos_pair",
+ steps={
+ {
+ format="kern",
+ coverage=kerns,
+ },
+ },
+ }
+ end
+ if next(extrakerns) then
+ features.gpos.extrakerns=everywhere
+ data.properties.haskerns=true
+ sequences[#sequences+1]={
+ features={
+ extrakerns=everywhere,
+ },
+ flags=noflags,
+ name="p_s_1",
+ nofsteps=1,
+ order={ "extrakerns" },
+ type="gpos_pair",
+ steps={
+ {
+ format="kern",
+ coverage=extrakerns,
+ },
+ },
+ }
+ end
+ data.resources.features=features
+ data.resources.sequences=sequences
+end
+local function enhance_fix_names(data)
+ for k,v in next,data.descriptions do
+ local n=v.name
+ local r=overloads[n]
+ if r then
+ local name=r.name
+ if trace_indexing then
+ report_afm("renaming characters %a to %a",n,name)
+ end
+ v.name=name
+ v.unicode=r.unicode
+ end
+ end
+end
+local addthem=function(rawdata,ligatures)
+ if ligatures then
+ local descriptions=rawdata.descriptions
+ local resources=rawdata.resources
+ local unicodes=resources.unicodes
+ for ligname,ligdata in next,ligatures do
+ local one=descriptions[unicodes[ligname]]
+ if one then
+ for _,pair in next,ligdata do
+ local two,three=unicodes[pair[1]],unicodes[pair[2]]
+ if two and three then
+ local ol=one.ligatures
+ if ol then
+ if not ol[two] then
+ ol[two]=three
+ end
+ else
+ one.ligatures={ [two]=three }
+ end
+ end
+ end
+ end
+ end
+ end
+end
+local function enhance_add_ligatures(rawdata)
+ addthem(rawdata,afm.helpdata.ligatures)
+end
+local function enhance_add_extra_kerns(rawdata)
+ local descriptions=rawdata.descriptions
+ local resources=rawdata.resources
+ local unicodes=resources.unicodes
+ local function do_it_left(what)
+ if what then
+ for unicode,description in next,descriptions do
+ local kerns=description.kerns
+ if kerns then
+ local extrakerns
+ for complex,simple in next,what do
+ complex=unicodes[complex]
+ simple=unicodes[simple]
+ if complex and simple then
+ local ks=kerns[simple]
+ if ks and not kerns[complex] then
+ if extrakerns then
+ extrakerns[complex]=ks
+ else
+ extrakerns={ [complex]=ks }
+ end
+ end
+ end
+ end
+ if extrakerns then
+ description.extrakerns=extrakerns
+ end
+ end
+ end
+ end
+ end
+ local function do_it_copy(what)
+ if what then
+ for complex,simple in next,what do
+ complex=unicodes[complex]
+ simple=unicodes[simple]
+ if complex and simple then
+ local complexdescription=descriptions[complex]
+ if complexdescription then
+ local simpledescription=descriptions[complex]
+ if simpledescription then
+ local extrakerns
+ local kerns=simpledescription.kerns
+ if kerns then
+ for unicode,kern in next,kerns do
+ if extrakerns then
+ extrakerns[unicode]=kern
+ else
+ extrakerns={ [unicode]=kern }
+ end
+ end
+ end
+ local extrakerns=simpledescription.extrakerns
+ if extrakerns then
+ for unicode,kern in next,extrakerns do
+ if extrakerns then
+ extrakerns[unicode]=kern
+ else
+ extrakerns={ [unicode]=kern }
+ end
+ end
+ end
+ if extrakerns then
+ complexdescription.extrakerns=extrakerns
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ do_it_left(afm.helpdata.leftkerned)
+ do_it_left(afm.helpdata.bothkerned)
+ do_it_copy(afm.helpdata.bothkerned)
+ do_it_copy(afm.helpdata.rightkerned)
+end
+local function adddimensions(data)
+ if data then
+ for unicode,description in next,data.descriptions do
+ local bb=description.boundingbox
+ if bb then
+ local ht,dp=bb[4],-bb[2]
+ if ht==0 or ht<0 then
+ else
+ description.height=ht
+ end
+ if dp==0 or dp<0 then
+ else
+ description.depth=dp
+ end
+ end
+ end
+ end
+end
+local function copytotfm(data)
+ if data and data.descriptions then
+ local metadata=data.metadata
+ local resources=data.resources
+ local properties=derivetable(data.properties)
+ local descriptions=derivetable(data.descriptions)
+ local goodies=derivetable(data.goodies)
+ local characters={}
+ local parameters={}
+ local unicodes=resources.unicodes
+ for unicode,description in next,data.descriptions do
+ characters[unicode]={}
+ end
+ local filename=constructors.checkedfilename(resources)
+ local fontname=metadata.fontname or metadata.fullname
+ local fullname=metadata.fullname or metadata.fontname
+ local endash=0x0020
+ local emdash=0x2014
+ local spacer="space"
+ local spaceunits=500
+ local monospaced=metadata.monospaced
+ local charwidth=metadata.charwidth
+ local italicangle=metadata.italicangle
+ local charxheight=metadata.xheight and metadata.xheight>0 and metadata.xheight
+ properties.monospaced=monospaced
+ parameters.italicangle=italicangle
+ parameters.charwidth=charwidth
+ parameters.charxheight=charxheight
+ if properties.monospaced then
+ if descriptions[endash] then
+ spaceunits,spacer=descriptions[endash].width,"space"
+ end
+ if not spaceunits and descriptions[emdash] then
+ spaceunits,spacer=descriptions[emdash].width,"emdash"
+ end
+ if not spaceunits and charwidth then
+ spaceunits,spacer=charwidth,"charwidth"
+ end
+ else
+ if descriptions[endash] then
+ spaceunits,spacer=descriptions[endash].width,"space"
+ end
+ if not spaceunits and charwidth then
+ spaceunits,spacer=charwidth,"charwidth"
+ end
+ end
+ spaceunits=tonumber(spaceunits)
+ if spaceunits<200 then
+ end
+ parameters.slant=0
+ parameters.space=spaceunits
+ parameters.space_stretch=500
+ parameters.space_shrink=333
+ parameters.x_height=400
+ parameters.quad=1000
+ if italicangle and italicangle~=0 then
+ parameters.italicangle=italicangle
+ parameters.italicfactor=math.cos(math.rad(90+italicangle))
+ parameters.slant=- math.tan(italicangle*math.pi/180)
+ end
+ if monospaced then
+ parameters.space_stretch=0
+ parameters.space_shrink=0
+ elseif afm.syncspace then
+ parameters.space_stretch=spaceunits/2
+ parameters.space_shrink=spaceunits/3
+ end
+ parameters.extra_space=parameters.space_shrink
+ if charxheight then
+ parameters.x_height=charxheight
+ else
+ local x=0x0078
+ if x then
+ local x=descriptions[x]
+ if x then
+ parameters.x_height=x.height
+ end
+ end
+ end
+ if metadata.sup then
+ local dummy={ 0,0,0 }
+ parameters[ 1]=metadata.designsize or 0
+ parameters[ 2]=metadata.checksum or 0
+ parameters[ 3],
+ parameters[ 4],
+ parameters[ 5]=unpack(metadata.space or dummy)
+ parameters[ 6]=metadata.quad or 0
+ parameters[ 7]=metadata.extraspace or 0
+ parameters[ 8],
+ parameters[ 9],
+ parameters[10]=unpack(metadata.num or dummy)
+ parameters[11],
+ parameters[12]=unpack(metadata.denom or dummy)
+ parameters[13],
+ parameters[14],
+ parameters[15]=unpack(metadata.sup or dummy)
+ parameters[16],
+ parameters[17]=unpack(metadata.sub or dummy)
+ parameters[18]=metadata.supdrop or 0
+ parameters[19]=metadata.subdrop or 0
+ parameters[20],
+ parameters[21]=unpack(metadata.delim or dummy)
+ parameters[22]=metadata.axisheight or 0
+ end
+ parameters.designsize=(metadata.designsize or 10)*65536
+ parameters.ascender=abs(metadata.ascender or 0)
+ parameters.descender=abs(metadata.descender or 0)
+ parameters.units=1000
+ properties.spacer=spacer
+ properties.encodingbytes=2
+ properties.format=fonts.formats[filename] or "type1"
+ properties.filename=filename
+ properties.fontname=fontname
+ properties.fullname=fullname
+ properties.psname=fullname
+ properties.name=filename or fullname or fontname
+ if next(characters) then
+ return {
+ characters=characters,
+ descriptions=descriptions,
+ parameters=parameters,
+ resources=resources,
+ properties=properties,
+ goodies=goodies,
+ }
+ end
+ end
+ return nil
+end
+function afm.setfeatures(tfmdata,features)
+ local okay=constructors.initializefeatures("afm",tfmdata,features,trace_features,report_afm)
+ if okay then
+ return constructors.collectprocessors("afm",tfmdata,features,trace_features,report_afm)
+ else
+ return {}
+ end
+end
+local function addtables(data)
+ local resources=data.resources
+ local lookuptags=resources.lookuptags
+ local unicodes=resources.unicodes
+ if not lookuptags then
+ lookuptags={}
+ resources.lookuptags=lookuptags
+ end
+ setmetatableindex(lookuptags,function(t,k)
+ local v=type(k)=="number" and ("lookup "..k) or k
+ t[k]=v
+ return v
+ end)
+ if not unicodes then
+ unicodes={}
+ resources.unicodes=unicodes
+ setmetatableindex(unicodes,function(t,k)
+ setmetatableindex(unicodes,nil)
+ for u,d in next,data.descriptions do
+ local n=d.name
+ if n then
+ t[n]=u
+ end
+ end
+ return rawget(t,k)
+ end)
+ end
+ constructors.addcoreunicodes(unicodes)
+end
+local function afmtotfm(specification)
+ local afmname=specification.filename or specification.name
+ if specification.forced=="afm" or specification.format=="afm" then
+ if trace_loading then
+ report_afm("forcing afm format for %a",afmname)
+ end
+ else
+ local tfmname=findbinfile(afmname,"ofm") or ""
+ if tfmname~="" then
+ if trace_loading then
+ report_afm("fallback from afm to tfm for %a",afmname)
+ end
+ return
+ end
+ end
+ if afmname~="" then
+ local features=constructors.checkedfeatures("afm",specification.features.normal)
+ specification.features.normal=features
+ constructors.hashinstance(specification,true)
+ specification=definers.resolve(specification)
+ local cache_id=specification.hash
+ local tfmdata=containers.read(constructors.cache,cache_id)
+ if not tfmdata then
+ local rawdata=afm.load(afmname)
+ if rawdata and next(rawdata) then
+ addtables(rawdata)
+ adddimensions(rawdata)
+ tfmdata=copytotfm(rawdata)
+ if tfmdata and next(tfmdata) then
+ local shared=tfmdata.shared
+ if not shared then
+ shared={}
+ tfmdata.shared=shared
+ end
+ shared.rawdata=rawdata
+ shared.dynamics={}
+ tfmdata.changed={}
+ shared.features=features
+ shared.processes=afm.setfeatures(tfmdata,features)
+ end
+ elseif trace_loading then
+ report_afm("no (valid) afm file found with name %a",afmname)
+ end
+ tfmdata=containers.write(constructors.cache,cache_id,tfmdata)
+ end
+ return tfmdata
+ end
+end
+local function read_from_afm(specification)
+ local tfmdata=afmtotfm(specification)
+ if tfmdata then
+ tfmdata.properties.name=specification.name
+ tfmdata=constructors.scale(tfmdata,specification)
+ local allfeatures=tfmdata.shared.features or specification.features.normal
+ constructors.applymanipulators("afm",tfmdata,allfeatures,trace_features,report_afm)
+ fonts.loggers.register(tfmdata,'afm',specification)
+ end
+ return tfmdata
+end
+registerafmfeature {
+ name="mode",
+ description="mode",
+ initializers={
+ base=otf.modeinitializer,
+ node=otf.modeinitializer,
+ }
+}
+registerafmfeature {
+ name="features",
+ description="features",
+ default=true,
+ initializers={
+ node=otf.nodemodeinitializer,
+ base=otf.basemodeinitializer,
+ },
+ processors={
+ node=otf.featuresprocessor,
+ }
+}
+fonts.formats.afm="type1"
+fonts.formats.pfb="type1"
+local function check_afm(specification,fullname)
+ local foundname=findbinfile(fullname,'afm') or ""
+ if foundname=="" then
+ foundname=fonts.names.getfilename(fullname,"afm") or ""
+ end
+ if foundname=="" and afm.autoprefixed then
+ local encoding,shortname=match(fullname,"^(.-)%-(.*)$")
+ if encoding and shortname and fonts.encodings.known[encoding] then
+ shortname=findbinfile(shortname,'afm') or ""
+ if shortname~="" then
+ foundname=shortname
+ if trace_defining then
+ report_afm("stripping encoding prefix from filename %a",afmname)
+ end
+ end
+ end
+ end
+ if foundname~="" then
+ specification.filename=foundname
+ specification.format="afm"
+ return read_from_afm(specification)
+ end
+end
+function readers.afm(specification,method)
+ local fullname=specification.filename or ""
+ local tfmdata=nil
+ if fullname=="" then
+ local forced=specification.forced or ""
+ if forced~="" then
+ tfmdata=check_afm(specification,specification.name.."."..forced)
+ end
+ if not tfmdata then
+ local check_tfm=readers.check_tfm
+ method=(check_tfm and (method or definers.method or "afm or tfm")) or "afm"
+ if method=="tfm" then
+ tfmdata=check_tfm(specification,specification.name)
+ elseif method=="afm" then
+ tfmdata=check_afm(specification,specification.name)
+ elseif method=="tfm or afm" then
+ tfmdata=check_tfm(specification,specification.name) or check_afm(specification,specification.name)
+ else
+ tfmdata=check_afm(specification,specification.name) or check_tfm(specification,specification.name)
+ end
+ end
+ else
+ tfmdata=check_afm(specification,fullname)
+ end
+ return tfmdata
+end
+function readers.pfb(specification,method)
+ local original=specification.specification
+ if trace_defining then
+ report_afm("using afm reader for %a",original)
+ end
+ specification.forced="afm"
+ local function swap(name)
+ local value=specification[swap]
+ if value then
+ specification[swap]=gsub("%.pfb",".afm",1)
+ end
+ end
+ swap("filename")
+ swap("fullname")
+ swap("forcedname")
+ swap("specification")
+ return readers.afm(specification,method)
+end
+registerafmenhancer("unify names",enhance_unify_names)
+registerafmenhancer("add ligatures",enhance_add_ligatures)
+registerafmenhancer("add extra kerns",enhance_add_extra_kerns)
+registerafmenhancer("normalize features",enhance_normalize_features)
+registerafmenhancer("check extra features",otfenhancers.enhance)
+registerafmenhancer("fix names",enhance_fix_names)
+
+end --- [luaotfload, fontloader-2017-02-11.lua scope for “font-oneâ€] ---
+
+
+do --- [luaotfload, fontloader-2017-02-11.lua scope for “font-afk†b36a76ceb835f41f8c05b471000ddc14] ---
+
+if not modules then modules={} end modules ['font-afk']={
+ version=1.001,
+ comment="companion to font-afm.lua",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files",
+ dataonly=true,
+}
+local allocate=utilities.storage.allocate
+fonts.handlers.afm.helpdata={
+ ligatures=allocate {
+ ['f']={
+ { 'f','ff' },
+ { 'i','fi' },
+ { 'l','fl' },
+ },
+ ['ff']={
+ { 'i','ffi' }
+ },
+ ['fi']={
+ { 'i','fii' }
+ },
+ ['fl']={
+ { 'i','fli' }
+ },
+ ['s']={
+ { 't','st' }
+ },
+ ['i']={
+ { 'j','ij' }
+ },
+ },
+ texligatures=allocate {
+ ['quoteleft']={
+ { 'quoteleft','quotedblleft' }
+ },
+ ['quoteright']={
+ { 'quoteright','quotedblright' }
+ },
+ ['hyphen']={
+ { 'hyphen','endash' }
+ },
+ ['endash']={
+ { 'hyphen','emdash' }
+ }
+ },
+ leftkerned=allocate {
+ AEligature="A",aeligature="a",
+ OEligature="O",oeligature="o",
+ IJligature="I",ijligature="i",
+ AE="A",ae="a",
+ OE="O",oe="o",
+ IJ="I",ij="i",
+ Ssharp="S",ssharp="s",
+ },
+ rightkerned=allocate {
+ AEligature="E",aeligature="e",
+ OEligature="E",oeligature="e",
+ IJligature="J",ijligature="j",
+ AE="E",ae="e",
+ OE="E",oe="e",
+ IJ="J",ij="j",
+ Ssharp="S",ssharp="s",
+ },
+ bothkerned=allocate {
+ Acircumflex="A",acircumflex="a",
+ Ccircumflex="C",ccircumflex="c",
+ Ecircumflex="E",ecircumflex="e",
+ Gcircumflex="G",gcircumflex="g",
+ Hcircumflex="H",hcircumflex="h",
+ Icircumflex="I",icircumflex="i",
+ Jcircumflex="J",jcircumflex="j",
+ Ocircumflex="O",ocircumflex="o",
+ Scircumflex="S",scircumflex="s",
+ Ucircumflex="U",ucircumflex="u",
+ Wcircumflex="W",wcircumflex="w",
+ Ycircumflex="Y",ycircumflex="y",
+ Agrave="A",agrave="a",
+ Egrave="E",egrave="e",
+ Igrave="I",igrave="i",
+ Ograve="O",ograve="o",
+ Ugrave="U",ugrave="u",
+ Ygrave="Y",ygrave="y",
+ Atilde="A",atilde="a",
+ Itilde="I",itilde="i",
+ Otilde="O",otilde="o",
+ Utilde="U",utilde="u",
+ Ntilde="N",ntilde="n",
+ Adiaeresis="A",adiaeresis="a",Adieresis="A",adieresis="a",
+ Ediaeresis="E",ediaeresis="e",Edieresis="E",edieresis="e",
+ Idiaeresis="I",idiaeresis="i",Idieresis="I",idieresis="i",
+ Odiaeresis="O",odiaeresis="o",Odieresis="O",odieresis="o",
+ Udiaeresis="U",udiaeresis="u",Udieresis="U",udieresis="u",
+ Ydiaeresis="Y",ydiaeresis="y",Ydieresis="Y",ydieresis="y",
+ Aacute="A",aacute="a",
+ Cacute="C",cacute="c",
+ Eacute="E",eacute="e",
+ Iacute="I",iacute="i",
+ Lacute="L",lacute="l",
+ Nacute="N",nacute="n",
+ Oacute="O",oacute="o",
+ Racute="R",racute="r",
+ Sacute="S",sacute="s",
+ Uacute="U",uacute="u",
+ Yacute="Y",yacute="y",
+ Zacute="Z",zacute="z",
+ Dstroke="D",dstroke="d",
+ Hstroke="H",hstroke="h",
+ Tstroke="T",tstroke="t",
+ Cdotaccent="C",cdotaccent="c",
+ Edotaccent="E",edotaccent="e",
+ Gdotaccent="G",gdotaccent="g",
+ Idotaccent="I",idotaccent="i",
+ Zdotaccent="Z",zdotaccent="z",
+ Amacron="A",amacron="a",
+ Emacron="E",emacron="e",
+ Imacron="I",imacron="i",
+ Omacron="O",omacron="o",
+ Umacron="U",umacron="u",
+ Ccedilla="C",ccedilla="c",
+ Kcedilla="K",kcedilla="k",
+ Lcedilla="L",lcedilla="l",
+ Ncedilla="N",ncedilla="n",
+ Rcedilla="R",rcedilla="r",
+ Scedilla="S",scedilla="s",
+ Tcedilla="T",tcedilla="t",
+ Ohungarumlaut="O",ohungarumlaut="o",
+ Uhungarumlaut="U",uhungarumlaut="u",
+ Aogonek="A",aogonek="a",
+ Eogonek="E",eogonek="e",
+ Iogonek="I",iogonek="i",
+ Uogonek="U",uogonek="u",
+ Aring="A",aring="a",
+ Uring="U",uring="u",
+ Abreve="A",abreve="a",
+ Ebreve="E",ebreve="e",
+ Gbreve="G",gbreve="g",
+ Ibreve="I",ibreve="i",
+ Obreve="O",obreve="o",
+ Ubreve="U",ubreve="u",
+ Ccaron="C",ccaron="c",
+ Dcaron="D",dcaron="d",
+ Ecaron="E",ecaron="e",
+ Lcaron="L",lcaron="l",
+ Ncaron="N",ncaron="n",
+ Rcaron="R",rcaron="r",
+ Scaron="S",scaron="s",
+ Tcaron="T",tcaron="t",
+ Zcaron="Z",zcaron="z",
+ dotlessI="I",dotlessi="i",
+ dotlessJ="J",dotlessj="j",
+ AEligature="AE",aeligature="ae",AE="AE",ae="ae",
+ OEligature="OE",oeligature="oe",OE="OE",oe="oe",
+ IJligature="IJ",ijligature="ij",IJ="IJ",ij="ij",
+ Lstroke="L",lstroke="l",Lslash="L",lslash="l",
+ Ostroke="O",ostroke="o",Oslash="O",oslash="o",
+ Ssharp="SS",ssharp="ss",
+ Aumlaut="A",aumlaut="a",
+ Eumlaut="E",eumlaut="e",
+ Iumlaut="I",iumlaut="i",
+ Oumlaut="O",oumlaut="o",
+ Uumlaut="U",uumlaut="u",
+ }
+}
+
+end --- [luaotfload, fontloader-2017-02-11.lua scope for “font-afkâ€] ---
+
+
+do --- [luaotfload, fontloader-2017-02-11.lua scope for “font-tfm†3d813578dbf6c447e4b859c2bf0618f7] ---
+
+if not modules then modules={} end modules ['font-tfm']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local next,type=next,type
+local match,format=string.match,string.format
+local concat,sortedhash=table.concat,table.sortedhash
+local trace_defining=false trackers.register("fonts.defining",function(v) trace_defining=v end)
+local trace_features=false trackers.register("tfm.features",function(v) trace_features=v end)
+local report_defining=logs.reporter("fonts","defining")
+local report_tfm=logs.reporter("fonts","tfm loading")
+local findbinfile=resolvers.findbinfile
+local setmetatableindex=table.setmetatableindex
+local fonts=fonts
+local handlers=fonts.handlers
+local readers=fonts.readers
+local constructors=fonts.constructors
+local encodings=fonts.encodings
+local tfm=constructors.handlers.tfm
+tfm.version=1.000
+tfm.maxnestingdepth=5
+tfm.maxnestingsize=65536*1024
+local otf=fonts.handlers.otf
+local otfenhancers=otf.enhancers
+local tfmfeatures=constructors.features.tfm
+local registertfmfeature=tfmfeatures.register
+local tfmenhancers=constructors.enhancers.tfm
+local registertfmenhancer=tfmenhancers.register
+constructors.resolvevirtualtoo=false
+fonts.formats.tfm="type1"
+fonts.formats.ofm="type1"
+function tfm.setfeatures(tfmdata,features)
+ local okay=constructors.initializefeatures("tfm",tfmdata,features,trace_features,report_tfm)
+ if okay then
+ return constructors.collectprocessors("tfm",tfmdata,features,trace_features,report_tfm)
+ else
+ return {}
+ end
+end
+local depth={}
+local function read_from_tfm(specification)
+ local filename=specification.filename
+ local size=specification.size
+ depth[filename]=(depth[filename] or 0)+1
+ if trace_defining then
+ report_defining("loading tfm file %a at size %s",filename,size)
+ end
+ local tfmdata=font.read_tfm(filename,size)
+ if tfmdata then
+ local features=specification.features and specification.features.normal or {}
+ local features=constructors.checkedfeatures("tfm",features)
+ specification.features.normal=features
+ local newtfmdata=(depth[filename]==1) and tfm.reencode(tfmdata,specification)
+ if newtfmdata then
+ tfmdata=newtfmdata
+ end
+ local resources=tfmdata.resources or {}
+ local properties=tfmdata.properties or {}
+ local parameters=tfmdata.parameters or {}
+ local shared=tfmdata.shared or {}
+ shared.features=features
+ shared.resources=resources
+ properties.name=tfmdata.name
+ properties.fontname=tfmdata.fontname
+ properties.psname=tfmdata.psname
+ properties.fullname=tfmdata.fullname
+ properties.filename=specification.filename
+ properties.format=fonts.formats.tfm
+ tfmdata.properties=properties
+ tfmdata.resources=resources
+ tfmdata.parameters=parameters
+ tfmdata.shared=shared
+ shared.rawdata={ resources=resources }
+ shared.features=features
+ if newtfmdata then
+ if not resources.marks then
+ resources.marks={}
+ end
+ if not resources.sequences then
+ resources.sequences={}
+ end
+ if not resources.features then
+ resources.features={
+ gsub={},
+ gpos={},
+ }
+ end
+ if not tfmdata.changed then
+ tfmdata.changed={}
+ end
+ if not tfmdata.descriptions then
+ tfmdata.descriptions=tfmdata.characters
+ end
+ otf.readers.addunicodetable(tfmdata)
+ tfmenhancers.apply(tfmdata,filename)
+ constructors.applymanipulators("tfm",tfmdata,features,trace_features,report_tfm)
+ otf.readers.unifymissing(tfmdata)
+ fonts.mappings.addtounicode(tfmdata,filename)
+ tfmdata.tounicode=1
+ local tounicode=fonts.mappings.tounicode
+ for unicode,v in next,tfmdata.characters do
+ local u=v.unicode
+ if u then
+ v.tounicode=tounicode(u)
+ end
+ end
+ if tfmdata.usedbitmap then
+ tfm.addtounicode(tfmdata)
+ end
+ end
+ shared.processes=next(features) and tfm.setfeatures(tfmdata,features) or nil
+ parameters.factor=1
+ parameters.size=size
+ parameters.slant=parameters.slant or parameters[1] or 0
+ parameters.space=parameters.space or parameters[2] or 0
+ parameters.space_stretch=parameters.space_stretch or parameters[3] or 0
+ parameters.space_shrink=parameters.space_shrink or parameters[4] or 0
+ parameters.x_height=parameters.x_height or parameters[5] or 0
+ parameters.quad=parameters.quad or parameters[6] or 0
+ parameters.extra_space=parameters.extra_space or parameters[7] or 0
+ constructors.enhanceparameters(parameters)
+ if newtfmdata then
+ elseif constructors.resolvevirtualtoo then
+ fonts.loggers.register(tfmdata,file.suffix(filename),specification)
+ local vfname=findbinfile(specification.name,'ovf')
+ if vfname and vfname~="" then
+ local vfdata=font.read_vf(vfname,size)
+ if vfdata then
+ local chars=tfmdata.characters
+ for k,v in next,vfdata.characters do
+ chars[k].commands=v.commands
+ end
+ properties.virtualized=true
+ tfmdata.fonts=vfdata.fonts
+ tfmdata.type="virtual"
+ local fontlist=vfdata.fonts
+ local name=file.nameonly(filename)
+ for i=1,#fontlist do
+ local n=fontlist[i].name
+ local s=fontlist[i].size
+ local d=depth[filename]
+ s=constructors.scaled(s,vfdata.designsize)
+ if d>tfm.maxnestingdepth then
+ report_defining("too deeply nested virtual font %a with size %a, max nesting depth %s",n,s,tfm.maxnestingdepth)
+ fontlist[i]={ id=0 }
+ elseif (d>1) and (s>tfm.maxnestingsize) then
+ report_defining("virtual font %a exceeds size %s",n,s)
+ fontlist[i]={ id=0 }
+ else
+ local t,id=fonts.constructors.readanddefine(n,s)
+ fontlist[i]={ id=id }
+ end
+ end
+ end
+ end
+ end
+ properties.haskerns=true
+ properties.hasligatures=true
+ resources.unicodes={}
+ resources.lookuptags={}
+ depth[filename]=depth[filename]-1
+ return tfmdata
+ else
+ depth[filename]=depth[filename]-1
+ end
+end
+local function check_tfm(specification,fullname)
+ local foundname=findbinfile(fullname,'tfm') or ""
+ if foundname=="" then
+ foundname=findbinfile(fullname,'ofm') or ""
+ end
+ if foundname=="" then
+ foundname=fonts.names.getfilename(fullname,"tfm") or ""
+ end
+ if foundname~="" then
+ specification.filename=foundname
+ specification.format="ofm"
+ return read_from_tfm(specification)
+ elseif trace_defining then
+ report_defining("loading tfm with name %a fails",specification.name)
+ end
+end
+readers.check_tfm=check_tfm
+function readers.tfm(specification)
+ local fullname=specification.filename or ""
+ if fullname=="" then
+ local forced=specification.forced or ""
+ if forced~="" then
+ fullname=specification.name.."."..forced
+ else
+ fullname=specification.name
+ end
+ end
+ return check_tfm(specification,fullname)
+end
+readers.ofm=readers.tfm
+do
+ local outfiles={}
+ local tfmcache=table.setmetatableindex(function(t,tfmdata)
+ local id=font.define(tfmdata)
+ t[tfmdata]=id
+ return id
+ end)
+ local encdone=table.setmetatableindex("table")
+ function tfm.reencode(tfmdata,specification)
+ local features=specification.features
+ if not features then
+ return
+ end
+ local features=features.normal
+ if not features then
+ return
+ end
+ local tfmfile=file.basename(tfmdata.name)
+ local encfile=features.reencode
+ local pfbfile=features.pfbfile
+ local bitmap=features.bitmap
+ if not encfile then
+ return
+ end
+ local pfbfile=outfiles[tfmfile]
+ if pfbfile==nil then
+ if bitmap then
+ pfbfile=false
+ elseif type(pfbfile)~="string" then
+ pfbfile=tfmfile
+ end
+ if type(pfbfile)=="string" then
+ pfbfile=file.addsuffix(pfbfile,"pfb")
+ report_tfm("using type1 shapes from %a for %a",pfbfile,tfmfile)
+ else
+ report_tfm("using bitmap shapes for %a",tfmfile)
+ pfbfile=false
+ end
+ outfiles[tfmfile]=pfbfile
+ end
+ local encoding=false
+ local vector=false
+ if type(pfbfile)=="string" then
+ local pfb=fonts.constructors.handlers.pfb
+ if pfb and pfb.loadvector then
+ local v,e=pfb.loadvector(pfbfile)
+ if v then
+ vector=v
+ end
+ if e then
+ encoding=e
+ end
+ end
+ end
+ if type(encfile)=="string" and encfile~="auto" then
+ encoding=fonts.encodings.load(file.addsuffix(encfile,"enc"))
+ if encoding then
+ encoding=encoding.vector
+ end
+ end
+ if not encoding then
+ report_tfm("bad encoding for %a, quitting",tfmfile)
+ return
+ end
+ local unicoding=fonts.encodings.agl and fonts.encodings.agl.unicodes
+ local virtualid=tfmcache[tfmdata]
+ local tfmdata=table.copy(tfmdata)
+ local characters={}
+ local originals=tfmdata.characters
+ local indices={}
+ local parentfont={ "font",1 }
+ local private=fonts.constructors.privateoffset
+ local reported=encdone[tfmfile][encfile]
+ local backmap=vector and table.swapped(vector)
+ local done={}
+ for index,name in sortedhash(encoding) do
+ local unicode=unicoding[name]
+ local original=originals[index]
+ if original then
+ if unicode then
+ original.unicode=unicode
+ else
+ unicode=private
+ private=private+1
+ if not reported then
+ report_tfm("glyph %a in font %a with encoding %a gets unicode %U",name,tfmfile,encfile,unicode)
+ end
+ end
+ characters[unicode]=original
+ indices[index]=unicode
+ original.name=name
+ if backmap then
+ original.index=backmap[name]
+ else
+ original.commands={ parentfont,{ "char",index } }
+ original.oindex=index
+ end
+ done[name]=true
+ elseif not done[name] then
+ report_tfm("bad index %a in font %a with name %a",index,tfmfile,name)
+ end
+ end
+ encdone[tfmfile][encfile]=true
+ for k,v in next,characters do
+ local kerns=v.kerns
+ if kerns then
+ local t={}
+ for k,v in next,kerns do
+ local i=indices[k]
+ if i then
+ t[i]=v
+ end
+ end
+ v.kerns=next(t) and t or nil
+ end
+ local ligatures=v.ligatures
+ if ligatures then
+ local t={}
+ for k,v in next,ligatures do
+ local i=indices[k]
+ if i then
+ t[i]=v
+ v.char=indices[v.char]
+ end
+ end
+ v.ligatures=next(t) and t or nil
+ end
+ end
+ tfmdata.fonts={ { id=virtualid } }
+ tfmdata.characters=characters
+ tfmdata.fullname=tfmdata.fullname or tfmdata.name
+ tfmdata.psname=file.nameonly(pfbfile or tfmdata.name)
+ tfmdata.filename=pfbfile
+ tfmdata.encodingbytes=2
+ tfmdata.format="type1"
+ tfmdata.tounicode=1
+ tfmdata.embedding="subset"
+ tfmdata.usedbitmap=bitmap and virtualid
+ return tfmdata
+ end
+end
+do
+ local template=[[
+/CIDInit /ProcSet findresource begin
+ 12 dict begin
+ begincmap
+ /CIDSystemInfo << /Registry (TeX) /Ordering (bitmap-%s) /Supplement 0 >> def
+ /CMapName /TeX-bitmap-%s def
+ /CMapType 2 def
+ 1 begincodespacerange
+ <00> <FF>
+ endcodespacerange
+ %s beginbfchar
+%s
+ endbfchar
+ endcmap
+CMapName currentdict /CMap defineresource pop end
+end
+end
+]]
+ local flushstreamobject=lpdf and lpdf.flushstreamobject
+ local setfontattributes=pdf.setfontattributes
+ if not flushstreamobject then
+ flushstreamobject=function(data)
+ return pdf.obj {
+ immediate=true,
+ type="stream",
+ string=data,
+ }
+ end
+ end
+ if not setfontattributes then
+ setfontattributes=function(id,data)
+ print(format("your luatex is too old so no tounicode bitmap font%i",id))
+ end
+ end
+ function tfm.addtounicode(tfmdata)
+ local id=tfmdata.usedbitmap
+ local map={}
+ local char={}
+ for k,v in next,tfmdata.characters do
+ local index=v.oindex
+ local tounicode=v.tounicode
+ if index and tounicode then
+ map[index]=tounicode
+ end
+ end
+ for k,v in sortedhash(map) do
+ char[#char+1]=format("<%02X> <%s>",k,v)
+ end
+ char=concat(char,"\n")
+ local stream=format(template,id,id,#char,char)
+ local reference=flushstreamobject(stream,nil,true)
+ setfontattributes(id,format("/ToUnicode %i 0 R",reference))
+ end
+end
+do
+ local everywhere={ ["*"]={ ["*"]=true } }
+ local noflags={ false,false,false,false }
+ local function enhance_normalize_features(data)
+ local ligatures=setmetatableindex("table")
+ local kerns=setmetatableindex("table")
+ local characters=data.characters
+ for u,c in next,characters do
+ local l=c.ligatures
+ local k=c.kerns
+ if l then
+ ligatures[u]=l
+ for u,v in next,l do
+ l[u]={ ligature=v.char }
+ end
+ c.ligatures=nil
+ end
+ if k then
+ kerns[u]=k
+ for u,v in next,k do
+ k[u]=v
+ end
+ c.kerns=nil
+ end
+ end
+ for u,l in next,ligatures do
+ for k,v in next,l do
+ local vl=v.ligature
+ local dl=ligatures[vl]
+ if dl then
+ for kk,vv in next,dl do
+ v[kk]=vv
+ end
+ end
+ end
+ end
+ local features={
+ gpos={},
+ gsub={},
+ }
+ local sequences={
+ }
+ if next(ligatures) then
+ features.gsub.liga=everywhere
+ data.properties.hasligatures=true
+ sequences[#sequences+1]={
+ features={
+ liga=everywhere,
+ },
+ flags=noflags,
+ name="s_s_0",
+ nofsteps=1,
+ order={ "liga" },
+ type="gsub_ligature",
+ steps={
+ {
+ coverage=ligatures,
+ },
+ },
+ }
+ end
+ if next(kerns) then
+ features.gpos.kern=everywhere
+ data.properties.haskerns=true
+ sequences[#sequences+1]={
+ features={
+ kern=everywhere,
+ },
+ flags=noflags,
+ name="p_s_0",
+ nofsteps=1,
+ order={ "kern" },
+ type="gpos_pair",
+ steps={
+ {
+ format="kern",
+ coverage=kerns,
+ },
+ },
+ }
+ end
+ data.resources.features=features
+ data.resources.sequences=sequences
+ data.shared.resources=data.shared.resources or resources
+ end
+ registertfmenhancer("normalize features",enhance_normalize_features)
+ registertfmenhancer("check extra features",otfenhancers.enhance)
+end
+registertfmfeature {
+ name="mode",
+ description="mode",
+ initializers={
+ base=otf.modeinitializer,
+ node=otf.modeinitializer,
+ }
+}
+registertfmfeature {
+ name="features",
+ description="features",
+ default=true,
+ initializers={
+ base=otf.basemodeinitializer,
+ node=otf.nodemodeinitializer,
+ },
+ processors={
+ node=otf.featuresprocessor,
+ }
+}
+
+end --- [luaotfload, fontloader-2017-02-11.lua scope for “font-tfmâ€] ---
+
+
+do --- [luaotfload, fontloader-2017-02-11.lua scope for “font-lua†1fbfdf7b689b2bdfd0e3bb9bf74ce136] ---
+
+if not modules then modules={} end modules ['font-lua']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local trace_defining=false trackers.register("fonts.defining",function(v) trace_defining=v end)
+local report_lua=logs.reporter("fonts","lua loading")
+local fonts=fonts
+local readers=fonts.readers
+fonts.formats.lua="lua"
+local function check_lua(specification,fullname)
+ local fullname=resolvers.findfile(fullname) or ""
+ if fullname~="" then
+ local loader=loadfile(fullname)
+ loader=loader and loader()
+ return loader and loader(specification)
+ end
+end
+readers.check_lua=check_lua
+function readers.lua(specification)
+ local original=specification.specification
+ if trace_defining then
+ report_lua("using lua reader for %a",original)
+ end
+ local fullname=specification.filename or ""
+ if fullname=="" then
+ local forced=specification.forced or ""
+ if forced~="" then
+ fullname=specification.name.."."..forced
+ else
+ fullname=specification.name
+ end
+ end
+ return check_lua(specification,fullname)
+end
+
+end --- [luaotfload, fontloader-2017-02-11.lua scope for “font-luaâ€] ---
+
+
+do --- [luaotfload, fontloader-2017-02-11.lua scope for “font-def†49fa2b50d8d2a1bb70b08b72f858ecd0] ---
+
+if not modules then modules={} end modules ['font-def']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local lower,gsub=string.lower,string.gsub
+local tostring,next=tostring,next
+local lpegmatch=lpeg.match
+local suffixonly,removesuffix=file.suffix,file.removesuffix
+local formatters=string.formatters
+local allocate=utilities.storage.allocate
+local trace_defining=false trackers .register("fonts.defining",function(v) trace_defining=v end)
+local directive_embedall=false directives.register("fonts.embedall",function(v) directive_embedall=v end)
+trackers.register("fonts.loading","fonts.defining","otf.loading","afm.loading","tfm.loading")
+trackers.register("fonts.all","fonts.*","otf.*","afm.*","tfm.*")
+local report_defining=logs.reporter("fonts","defining")
+local fonts=fonts
+local fontdata=fonts.hashes.identifiers
+local readers=fonts.readers
+local definers=fonts.definers
+local specifiers=fonts.specifiers
+local constructors=fonts.constructors
+local fontgoodies=fonts.goodies
+readers.sequence=allocate { 'otf','ttf','afm','tfm','lua' }
+local variants=allocate()
+specifiers.variants=variants
+definers.methods=definers.methods or {}
+local internalized=allocate()
+local lastdefined=nil
+local loadedfonts=constructors.loadedfonts
+local designsizes=constructors.designsizes
+local resolvefile=fontgoodies and fontgoodies.filenames and fontgoodies.filenames.resolve or function(s) return s end
+local splitter,splitspecifiers=nil,""
+local P,C,S,Cc=lpeg.P,lpeg.C,lpeg.S,lpeg.Cc
+local left=P("(")
+local right=P(")")
+local colon=P(":")
+local space=P(" ")
+definers.defaultlookup="file"
+local prefixpattern=P(false)
+local function addspecifier(symbol)
+ splitspecifiers=splitspecifiers..symbol
+ local method=S(splitspecifiers)
+ local lookup=C(prefixpattern)*colon
+ local sub=left*C(P(1-left-right-method)^1)*right
+ local specification=C(method)*C(P(1)^1)
+ local name=C((1-sub-specification)^1)
+ splitter=P((lookup+Cc(""))*name*(sub+Cc(""))*(specification+Cc("")))
+end
+local function addlookup(str,default)
+ prefixpattern=prefixpattern+P(str)
+end
+definers.addlookup=addlookup
+addlookup("file")
+addlookup("name")
+addlookup("spec")
+local function getspecification(str)
+ return lpegmatch(splitter,str or "")
+end
+definers.getspecification=getspecification
+function definers.registersplit(symbol,action,verbosename)
+ addspecifier(symbol)
+ variants[symbol]=action
+ if verbosename then
+ variants[verbosename]=action
+ end
+end
+local function makespecification(specification,lookup,name,sub,method,detail,size)
+ size=size or 655360
+ if not lookup or lookup=="" then
+ lookup=definers.defaultlookup
+ end
+ if trace_defining then
+ report_defining("specification %a, lookup %a, name %a, sub %a, method %a, detail %a",
+ specification,lookup,name,sub,method,detail)
+ end
+ local t={
+ lookup=lookup,
+ specification=specification,
+ size=size,
+ name=name,
+ sub=sub,
+ method=method,
+ detail=detail,
+ resolved="",
+ forced="",
+ features={},
+ }
+ return t
+end
+definers.makespecification=makespecification
+function definers.analyze(specification,size)
+ local lookup,name,sub,method,detail=getspecification(specification or "")
+ return makespecification(specification,lookup,name,sub,method,detail,size)
+end
+definers.resolvers=definers.resolvers or {}
+local resolvers=definers.resolvers
+function resolvers.file(specification)
+ local name=resolvefile(specification.name)
+ local suffix=lower(suffixonly(name))
+ if fonts.formats[suffix] then
+ specification.forced=suffix
+ specification.forcedname=name
+ specification.name=removesuffix(name)
+ else
+ specification.name=name
+ end
+end
+function resolvers.name(specification)
+ local resolve=fonts.names.resolve
+ if resolve then
+ local resolved,sub,subindex=resolve(specification.name,specification.sub,specification)
+ if resolved then
+ specification.resolved=resolved
+ specification.sub=sub
+ specification.subindex=subindex
+ local suffix=lower(suffixonly(resolved))
+ if fonts.formats[suffix] then
+ specification.forced=suffix
+ specification.forcedname=resolved
+ specification.name=removesuffix(resolved)
+ else
+ specification.name=resolved
+ end
+ end
+ else
+ resolvers.file(specification)
+ end
+end
+function resolvers.spec(specification)
+ local resolvespec=fonts.names.resolvespec
+ if resolvespec then
+ local resolved,sub,subindex=resolvespec(specification.name,specification.sub,specification)
+ if resolved then
+ specification.resolved=resolved
+ specification.sub=sub
+ specification.subindex=subindex
+ specification.forced=lower(suffixonly(resolved))
+ specification.forcedname=resolved
+ specification.name=removesuffix(resolved)
+ end
+ else
+ resolvers.name(specification)
+ end
+end
+function definers.resolve(specification)
+ if not specification.resolved or specification.resolved=="" then
+ local r=resolvers[specification.lookup]
+ if r then
+ r(specification)
+ end
+ end
+ if specification.forced=="" then
+ specification.forced=nil
+ specification.forcedname=nil
+ end
+ specification.hash=lower(specification.name..' @ '..constructors.hashfeatures(specification))
+ if specification.sub and specification.sub~="" then
+ specification.hash=specification.sub..' @ '..specification.hash
+ end
+ return specification
+end
+function definers.applypostprocessors(tfmdata)
+ local postprocessors=tfmdata.postprocessors
+ if postprocessors then
+ local properties=tfmdata.properties
+ for i=1,#postprocessors do
+ local extrahash=postprocessors[i](tfmdata)
+ if type(extrahash)=="string" and extrahash~="" then
+ extrahash=gsub(lower(extrahash),"[^a-z]","-")
+ properties.fullname=formatters["%s-%s"](properties.fullname,extrahash)
+ end
+ end
+ end
+ return tfmdata
+end
+local function checkembedding(tfmdata)
+ local properties=tfmdata.properties
+ local embedding
+ if directive_embedall then
+ embedding="full"
+ elseif properties and properties.filename and constructors.dontembed[properties.filename] then
+ embedding="no"
+ else
+ embedding="subset"
+ end
+ if properties then
+ properties.embedding=embedding
+ else
+ tfmdata.properties={ embedding=embedding }
+ end
+ tfmdata.embedding=embedding
+end
+function definers.loadfont(specification)
+ local hash=constructors.hashinstance(specification)
+ local tfmdata=loadedfonts[hash]
+ if not tfmdata then
+ local forced=specification.forced or ""
+ if forced~="" then
+ local reader=readers[lower(forced)]
+ tfmdata=reader and reader(specification)
+ if not tfmdata then
+ report_defining("forced type %a of %a not found",forced,specification.name)
+ end
+ else
+ local sequence=readers.sequence
+ for s=1,#sequence do
+ local reader=sequence[s]
+ if readers[reader] then
+ if trace_defining then
+ report_defining("trying (reader sequence driven) type %a for %a with file %a",reader,specification.name,specification.filename)
+ end
+ tfmdata=readers[reader](specification)
+ if tfmdata then
+ break
+ else
+ specification.filename=nil
+ end
+ end
+ end
+ end
+ if tfmdata then
+ tfmdata=definers.applypostprocessors(tfmdata)
+ checkembedding(tfmdata)
+ loadedfonts[hash]=tfmdata
+ designsizes[specification.hash]=tfmdata.parameters.designsize
+ end
+ end
+ if not tfmdata then
+ report_defining("font with asked name %a is not found using lookup %a",specification.name,specification.lookup)
+ end
+ return tfmdata
+end
+function constructors.checkvirtualids()
+end
+function constructors.readanddefine(name,size)
+ local specification=definers.analyze(name,size)
+ local method=specification.method
+ if method and variants[method] then
+ specification=variants[method](specification)
+ end
+ specification=definers.resolve(specification)
+ local hash=constructors.hashinstance(specification)
+ local id=definers.registered(hash)
+ if not id then
+ local tfmdata=definers.loadfont(specification)
+ if tfmdata then
+ tfmdata.properties.hash=hash
+ constructors.checkvirtualids(tfmdata)
+ id=font.define(tfmdata)
+ definers.register(tfmdata,id)
+ else
+ id=0
+ end
+ end
+ return fontdata[id],id
+end
+function definers.current()
+ return lastdefined
+end
+function definers.registered(hash)
+ local id=internalized[hash]
+ return id,id and fontdata[id]
+end
+function definers.register(tfmdata,id)
+ if tfmdata and id then
+ local hash=tfmdata.properties.hash
+ if not hash then
+ report_defining("registering font, id %a, name %a, invalid hash",id,tfmdata.properties.filename or "?")
+ elseif not internalized[hash] then
+ internalized[hash]=id
+ if trace_defining then
+ report_defining("registering font, id %s, hash %a",id,hash)
+ end
+ fontdata[id]=tfmdata
+ end
+ end
+end
+function definers.read(specification,size,id)
+ statistics.starttiming(fonts)
+ if type(specification)=="string" then
+ specification=definers.analyze(specification,size)
+ end
+ local method=specification.method
+ if method and variants[method] then
+ specification=variants[method](specification)
+ end
+ specification=definers.resolve(specification)
+ local hash=constructors.hashinstance(specification)
+ local tfmdata=definers.registered(hash)
+ if tfmdata then
+ if trace_defining then
+ report_defining("already hashed: %s",hash)
+ end
+ else
+ tfmdata=definers.loadfont(specification)
+ if tfmdata then
+ if trace_defining then
+ report_defining("loaded and hashed: %s",hash)
+ end
+ tfmdata.properties.hash=hash
+ if id then
+ definers.register(tfmdata,id)
+ end
+ else
+ if trace_defining then
+ report_defining("not loaded and hashed: %s",hash)
+ end
+ end
+ end
+ lastdefined=tfmdata or id
+ if not tfmdata then
+ report_defining("unknown font %a, loading aborted",specification.name)
+ elseif trace_defining and type(tfmdata)=="table" then
+ local properties=tfmdata.properties or {}
+ local parameters=tfmdata.parameters or {}
+ report_defining("using %a font with id %a, name %a, size %a, bytes %a, encoding %a, fullname %a, filename %a",
+ properties.format or "unknown",id,properties.name,parameters.size,properties.encodingbytes,
+ properties.encodingname,properties.fullname,file.basename(properties.filename))
+ end
+ statistics.stoptiming(fonts)
+ return tfmdata
+end
+function font.getfont(id)
+ return fontdata[id]
+end
+callbacks.register('define_font',definers.read,"definition of fonts (tfmdata preparation)")
+
+end --- [luaotfload, fontloader-2017-02-11.lua scope for “font-defâ€] ---
+
+
+do --- [luaotfload, fontloader-2017-02-11.lua scope for “fonts-ext†aff3846f4c1f15de0a9f4fd7081e0c68] ---
+
+if not modules then modules={} end modules ['luatex-fonts-ext']={
+ version=1.001,
+ comment="companion to luatex-*.tex",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+if context then
+ texio.write_nl("fatal error: this module is not for context")
+ os.exit()
+end
+local fonts=fonts
+local otffeatures=fonts.constructors.features.otf
+local function initializeitlc(tfmdata,value)
+ if value then
+ local parameters=tfmdata.parameters
+ local italicangle=parameters.italicangle
+ if italicangle and italicangle~=0 then
+ local properties=tfmdata.properties
+ local factor=tonumber(value) or 1
+ properties.hasitalics=true
+ properties.autoitalicamount=factor*(parameters.uwidth or 40)/2
+ end
+ end
+end
+otffeatures.register {
+ name="itlc",
+ description="italic correction",
+ initializers={
+ base=initializeitlc,
+ node=initializeitlc,
+ }
+}
+local function initializeslant(tfmdata,value)
+ value=tonumber(value)
+ if not value then
+ value=0
+ elseif value>1 then
+ value=1
+ elseif value<-1 then
+ value=-1
+ end
+ tfmdata.parameters.slantfactor=value
+end
+otffeatures.register {
+ name="slant",
+ description="slant glyphs",
+ initializers={
+ base=initializeslant,
+ node=initializeslant,
+ }
+}
+local function initializeextend(tfmdata,value)
+ value=tonumber(value)
+ if not value then
+ value=0
+ elseif value>10 then
+ value=10
+ elseif value<-10 then
+ value=-10
+ end
+ tfmdata.parameters.extendfactor=value
+end
+otffeatures.register {
+ name="extend",
+ description="scale glyphs horizontally",
+ initializers={
+ base=initializeextend,
+ node=initializeextend,
+ }
+}
+fonts.protrusions=fonts.protrusions or {}
+fonts.protrusions.setups=fonts.protrusions.setups or {}
+local setups=fonts.protrusions.setups
+local function initializeprotrusion(tfmdata,value)
+ if value then
+ local setup=setups[value]
+ if setup then
+ local factor,left,right=setup.factor or 1,setup.left or 1,setup.right or 1
+ local emwidth=tfmdata.parameters.quad
+ tfmdata.parameters.protrusion={
+ auto=true,
+ }
+ for i,chr in next,tfmdata.characters do
+ local v,pl,pr=setup[i],nil,nil
+ if v then
+ pl,pr=v[1],v[2]
+ end
+ if pl and pl~=0 then chr.left_protruding=left*pl*factor end
+ if pr and pr~=0 then chr.right_protruding=right*pr*factor end
+ end
+ end
+ end
+end
+otffeatures.register {
+ name="protrusion",
+ description="shift characters into the left and or right margin",
+ initializers={
+ base=initializeprotrusion,
+ node=initializeprotrusion,
+ }
+}
+fonts.expansions=fonts.expansions or {}
+fonts.expansions.setups=fonts.expansions.setups or {}
+local setups=fonts.expansions.setups
+local function initializeexpansion(tfmdata,value)
+ if value then
+ local setup=setups[value]
+ if setup then
+ local factor=setup.factor or 1
+ tfmdata.parameters.expansion={
+ stretch=10*(setup.stretch or 0),
+ shrink=10*(setup.shrink or 0),
+ step=10*(setup.step or 0),
+ auto=true,
+ }
+ for i,chr in next,tfmdata.characters do
+ local v=setup[i]
+ if v and v~=0 then
+ chr.expansion_factor=v*factor
+ else
+ chr.expansion_factor=factor
+ end
+ end
+ end
+ end
+end
+otffeatures.register {
+ name="expansion",
+ description="apply hz optimization",
+ initializers={
+ base=initializeexpansion,
+ node=initializeexpansion,
+ }
+}
+function fonts.loggers.onetimemessage() end
+local byte=string.byte
+fonts.expansions.setups['default']={
+ stretch=2,shrink=2,step=.5,factor=1,
+ [byte('A')]=0.5,[byte('B')]=0.7,[byte('C')]=0.7,[byte('D')]=0.5,[byte('E')]=0.7,
+ [byte('F')]=0.7,[byte('G')]=0.5,[byte('H')]=0.7,[byte('K')]=0.7,[byte('M')]=0.7,
+ [byte('N')]=0.7,[byte('O')]=0.5,[byte('P')]=0.7,[byte('Q')]=0.5,[byte('R')]=0.7,
+ [byte('S')]=0.7,[byte('U')]=0.7,[byte('W')]=0.7,[byte('Z')]=0.7,
+ [byte('a')]=0.7,[byte('b')]=0.7,[byte('c')]=0.7,[byte('d')]=0.7,[byte('e')]=0.7,
+ [byte('g')]=0.7,[byte('h')]=0.7,[byte('k')]=0.7,[byte('m')]=0.7,[byte('n')]=0.7,
+ [byte('o')]=0.7,[byte('p')]=0.7,[byte('q')]=0.7,[byte('s')]=0.7,[byte('u')]=0.7,
+ [byte('w')]=0.7,[byte('z')]=0.7,
+ [byte('2')]=0.7,[byte('3')]=0.7,[byte('6')]=0.7,[byte('8')]=0.7,[byte('9')]=0.7,
+}
+fonts.protrusions.setups['default']={
+ factor=1,left=1,right=1,
+ [0x002C]={ 0,1 },
+ [0x002E]={ 0,1 },
+ [0x003A]={ 0,1 },
+ [0x003B]={ 0,1 },
+ [0x002D]={ 0,1 },
+ [0x2013]={ 0,0.50 },
+ [0x2014]={ 0,0.33 },
+ [0x3001]={ 0,1 },
+ [0x3002]={ 0,1 },
+ [0x060C]={ 0,1 },
+ [0x061B]={ 0,1 },
+ [0x06D4]={ 0,1 },
+}
+fonts.handlers.otf.features.normalize=function(t)
+ if t.rand then
+ t.rand="random"
+ end
+ return t
+end
+function fonts.helpers.nametoslot(name)
+ local t=type(name)
+ if t=="string" then
+ local tfmdata=fonts.hashes.identifiers[currentfont()]
+ local shared=tfmdata and tfmdata.shared
+ local fntdata=shared and shared.rawdata
+ return fntdata and fntdata.resources.unicodes[name]
+ elseif t=="number" then
+ return n
+ end
+end
+fonts.encodings=fonts.encodings or {}
+local reencodings={}
+fonts.encodings.reencodings=reencodings
+local function specialreencode(tfmdata,value)
+ local encoding=value and reencodings[value]
+ if encoding then
+ local temp={}
+ local char=tfmdata.characters
+ for k,v in next,encoding do
+ temp[k]=char[v]
+ end
+ for k,v in next,temp do
+ char[k]=temp[k]
+ end
+ return string.format("reencoded:%s",value)
+ end
+end
+local function reencode(tfmdata,value)
+ tfmdata.postprocessors=tfmdata.postprocessors or {}
+ table.insert(tfmdata.postprocessors,
+ function(tfmdata)
+ return specialreencode(tfmdata,value)
+ end
+ )
+end
+otffeatures.register {
+ name="reencode",
+ description="reencode characters",
+ manipulators={
+ base=reencode,
+ node=reencode,
+ }
+}
+local function ignore(tfmdata,key,value)
+ if value then
+ tfmdata.mathparameters=nil
+ end
+end
+otffeatures.register {
+ name="ignoremathconstants",
+ description="ignore math constants table",
+ initializers={
+ base=ignore,
+ node=ignore,
+ }
+}
+
+end --- [luaotfload, fontloader-2017-02-11.lua scope for “fonts-extâ€] ---
+
+
+do --- [luaotfload, fontloader-2017-02-11.lua scope for “font-gbn†850f31ba73ff8de96371d0aed2b2b4cb] ---
+
+if not modules then modules={} end modules ['font-gbn']={
+ version=1.001,
+ comment="companion to luatex-*.tex",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+if context then
+ texio.write_nl("fatal error: this module is not for context")
+ os.exit()
+end
+local fonts=fonts
+local nodes=nodes
+local nuts=nodes.nuts
+local traverse_id=nuts.traverse_id
+local flush_node=nuts.flush_node
+local glyph_code=nodes.nodecodes.glyph
+local disc_code=nodes.nodecodes.disc
+local tonode=nuts.tonode
+local tonut=nuts.tonut
+local getfont=nuts.getfont
+local getchar=nuts.getchar
+local getid=nuts.getid
+local getboth=nuts.getboth
+local getprev=nuts.getprev
+local getnext=nuts.getnext
+local getdisc=nuts.getdisc
+local setchar=nuts.setchar
+local setlink=nuts.setlink
+local setprev=nuts.setprev
+local nodetail=nuts.tail
+local n_ligaturing=node.ligaturing
+local n_kerning=node.kerning
+local ligaturing=nuts.ligaturing
+local kerning=nuts.kerning
+local basemodepass=true
+local function l_warning() texio.write_nl("warning: node.ligaturing called directly") l_warning=nil end
+local function k_warning() texio.write_nl("warning: node.kerning called directly") k_warning=nil end
+function node.ligaturing(...)
+ if basemodepass and l_warning then
+ l_warning()
+ end
+ return n_ligaturing(...)
+end
+function node.kerning(...)
+ if basemodepass and k_warning then
+ k_warning()
+ end
+ return n_kerning(...)
+end
+function nodes.handlers.setbasemodepass(v)
+ basemodepass=v
+end
+function nodes.handlers.nodepass(head)
+ local fontdata=fonts.hashes.identifiers
+ if fontdata then
+ local nuthead=tonut(head)
+ local usedfonts={}
+ local basefonts={}
+ local prevfont=nil
+ local basefont=nil
+ local variants=nil
+ local redundant=nil
+ for n in traverse_id(glyph_code,nuthead) do
+ local font=getfont(n)
+ if font~=prevfont then
+ if basefont then
+ basefont[2]=getprev(n)
+ end
+ prevfont=font
+ local used=usedfonts[font]
+ if not used then
+ local tfmdata=fontdata[font]
+ if tfmdata then
+ local shared=tfmdata.shared
+ if shared then
+ local processors=shared.processes
+ if processors and #processors>0 then
+ usedfonts[font]=processors
+ elseif basemodepass then
+ basefont={ n,nil }
+ basefonts[#basefonts+1]=basefont
+ end
+ end
+ local resources=tfmdata.resources
+ variants=resources and resources.variants
+ variants=variants and next(variants) and variants or false
+ end
+ else
+ local tfmdata=fontdata[prevfont]
+ if tfmdata then
+ local resources=tfmdata.resources
+ variants=resources and resources.variants
+ variants=variants and next(variants) and variants or false
+ end
+ end
+ end
+ if variants then
+ local char=getchar(n)
+ if char>=0xFE00 and (char<=0xFE0F or (char>=0xE0100 and char<=0xE01EF)) then
+ local hash=variants[char]
+ if hash then
+ local p=getprev(n)
+ if p and getid(p)==glyph_code then
+ local variant=hash[getchar(p)]
+ if variant then
+ setchar(p,variant)
+ end
+ end
+ end
+ if not redundant then
+ redundant={ n }
+ else
+ redundant[#redundant+1]=n
+ end
+ end
+ end
+ end
+ local nofbasefonts=#basefonts
+ if redundant then
+ for i=1,#redundant do
+ local r=redundant[i]
+ local p,n=getboth(r)
+ if r==nuthead then
+ nuthead=n
+ setprev(n)
+ else
+ setlink(p,n)
+ end
+ if nofbasefonts>0 then
+ for i=1,nofbasefonts do
+ local bi=basefonts[i]
+ if r==bi[1] then
+ bi[1]=n
+ end
+ if r==bi[2] then
+ bi[2]=n
+ end
+ end
+ end
+ flush_node(r)
+ end
+ end
+ for d in traverse_id(disc_code,nuthead) do
+ local _,_,r=getdisc(d)
+ if r then
+ for n in traverse_id(glyph_code,r) do
+ local font=getfont(n)
+ if font~=prevfont then
+ prevfont=font
+ local used=usedfonts[font]
+ if not used then
+ local tfmdata=fontdata[font]
+ if tfmdata then
+ local shared=tfmdata.shared
+ if shared then
+ local processors=shared.processes
+ if processors and #processors>0 then
+ usedfonts[font]=processors
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ if next(usedfonts) then
+ for font,processors in next,usedfonts do
+ for i=1,#processors do
+ head=processors[i](head,font,0) or head
+ end
+ end
+ end
+ if basemodepass and nofbasefonts>0 then
+ for i=1,nofbasefonts do
+ local range=basefonts[i]
+ local start=range[1]
+ local stop=range[2]
+ if start then
+ local front=nuthead==start
+ if not stop then
+ stop=nodetail(start)
+ end
+ if stop then
+ start,stop=ligaturing(start,stop)
+ start,stop=kerning(start,stop)
+ elseif start then
+ start,stop=ligaturing(start,stop)
+ start,stop=kerning(start,stop)
+ end
+ if front and nuthead~=start then
+ head=tonode(start)
+ end
+ end
+ end
+ end
+ return head,true
+ else
+ return head,false
+ end
+end
+function nodes.handlers.basepass(head)
+ if not basemodepass then
+ head=n_ligaturing(head)
+ head=n_kerning(head)
+ end
+ return head,true
+end
+local nodepass=nodes.handlers.nodepass
+local basepass=nodes.handlers.basepass
+local injectpass=nodes.injections.handler
+local protectpass=nodes.handlers.protectglyphs
+function nodes.simple_font_handler(head)
+ if head then
+ head=nodepass(head)
+ head=injectpass(head)
+ if not basemodepass then
+ head=basepass(head)
+ end
+ protectpass(head)
+ return head,true
+ else
+ return head,false
+ end
+end
+
+end --- [luaotfload, fontloader-2017-02-11.lua scope for “font-gbnâ€] ---
+
+
+--- vim:ft=lua:sw=2:ts=8:et:tw=79
diff --git a/obsolete/macros/luatex/generic/fontloader-luaotfload/fontloader-luaotfload.pdf b/obsolete/macros/luatex/generic/fontloader-luaotfload/fontloader-luaotfload.pdf
new file mode 100644
index 0000000000..ee54df89a1
--- /dev/null
+++ b/obsolete/macros/luatex/generic/fontloader-luaotfload/fontloader-luaotfload.pdf
Binary files differ
diff --git a/obsolete/macros/luatex/generic/fontloader-luaotfload/fontloader-luaotfload.tex b/obsolete/macros/luatex/generic/fontloader-luaotfload/fontloader-luaotfload.tex
new file mode 100644
index 0000000000..07cc8016f7
--- /dev/null
+++ b/obsolete/macros/luatex/generic/fontloader-luaotfload/fontloader-luaotfload.tex
@@ -0,0 +1,164 @@
+% !Mode:: "TeX:DE:UTF-8:Main"
+\RequirePackage{luatex85}
+\documentclass[parskip=half-,egregdoesnotlikesansseriftitles]{scrartcl}
+\usepackage{ydoc-code,ydoc-desc}
+\usepackage{fontspec}
+\usepackage[english]{babel}
+\usepackage{csquotes}
+\usepackage{xcolor,listings,enumitem}
+
+\title{The \texttt{fontloader-luaotfload} package}
+\author{Ulrike Fischer\thanks{fischer@troubleshooting-tex.de}}
+\newcommand\package[1]{\texttt{#1}}
+
+
+\begin{document}
+\maketitle
+
+\section{Requirements}
+
+Use a current tex system! The files has been tried with texlive 2017.
+
+\section{Introduction}
+The luatex engine can use open type fonts but -- unlike xetex which has the harfbuzz library built-in -- it doesn't work with the bare binary but needs additional (lua)-code.
+
+In \LaTeX\ this lua-code is provided by the package \package{luaotfload}. In newer \LaTeX-versions the lua-code of \package{luaotfload} is loaded by the format. So you don't need to load it manually. Even a minimal hello-world-example should show in the log-file
+
+\verb+Lua module: luaotfload-main 2017/01/29 2.80001 OpenType layout system.+
+
+
+
+
+\package{luaotfload} consist of two parts:
+
+\begin{itemize}
+\item The core of the package is the \emph{fontloader} -- the current is \texttt{fontloader-2017-02-11.lua}. The fontloader has been created from a subset of the fontloader code of the Con\TeX{}t format.
+
+\item Around this fontloader \package{luaotfload} contains a number of lua-file needed for the creation of the font name database, the font cache, and some adaptions of the fontloader to the needs of \LaTeX.
+\end{itemize}
+
+\package{luaotfload} has made quite an effort to separate the two parts and since some time it is possible to replace the core fontloader with another (newer) version with the help of a configuration file. This makes it possible e.\,g. to test new features which have been added to Con\TeX{}t.
+
+This package provides a number of such alternative fontloaders.
+
+\emph{Please read the complete documentation before trying to use the fontloaders -- at least read the section \ref{sec:problem} about incompabilities.}
+
+
+\section{Installation}
+
+The package contains
+
+\begin{itemize}
+\item a number of \texttt{fontloader-XXX.lua} files. This files should be in a texmf-tree in \texttt{../tex/luatex/fontloader-luaotfload} -- probably your tex system installed them there already.
+
+\item all the other files are either examples or documentation and should go in the \texttt{doc}-folder.
+\end{itemize}
+
+\section{Using the fontloader(s)}
+
+To use one of the alternative fontloader you must create a \texttt{luaotfload.conf} file. This file should be in the normal search path, e.g. in the folder of your document or in some texmf-tree, there at best in the branch \texttt{tex/luatex}.
+
+Such a \texttt{luaotfload.conf} looks e.\,g. like this:
+
+\lstinputlisting[columns=flexible,basicstyle=\ttfamily]{luaotfload.conf}
+
+\begin{itemize}
+\item The fontloader section starts with \texttt[run].
+\item The semicolon starts a comment. So in the example \texttt{fontloader-reference-2017-07-28.lua} is the active fontloader. If you comment all fontloaders \package{luaotfload} will use its default loader.
+\item The shortcuts \texttt{default} loads the default fontloader of \package{luaotfload} and \texttt{reference} its reference version (see below for an explanation about the reference fontloader).
+\item The last active entry wins!
+\item It is possible to use absolute pathes, but how exactly is rather system dependant, so you will have to try.
+\end{itemize}
+
+\section{General description of the fontloaders}
+
+Fontloaders come in two flavors: I will call them \emph{reference type} and \emph{luaotfload type}.
+
+The \emph{reference type} is a copy from a \texttt{luatex-fonts-merged.lua} from a context installation. This file is -- as the name indicates -- a merge of the generic part of the context fontloader files. It is normally present in a context minimals installation, or can be created by running in the folder which contains \texttt{luatex-fonts.lua} the command:
+
+\begin{lstlisting}
+mtxrun --script package --merge ./luatex-fonts.lua
+\end{lstlisting}
+
+The \emph{luaotfload type} is created by a script call \texttt{mkimport} which you can find on the github site of \package{luaotfload}. It also uses the context files but ignores some that are present in the lualibs packages and it also does some other adaptions.
+
+The original \package{luaotfload} already contains both types of fontloaders, the reference type is \texttt{fontloader-reference.lua} -- it can be chosen in the configuration file with the keyword \texttt{reference} -- and the luaotfload type is \texttt{fontloader-2017-02-11-lua}.
+
+I have no idea about the pros and cons of both types. On the whole I would have preferred to build luaotfload type fontloaders as they are nearer to the current default fontloader. But sadly it didn't work: I could adapt the pathes in \texttt{mkimport} to my system and build a fontloader but it wasn't usable.
+The \emph{reference type} are perhaps slower and there is the possibility that they contain code which could clash with some lua libraries loaded by other \LaTeX packages. But until now they seemed to work.
+
+For both types there is the danger that fontloaders created with files from a newer context version clash with the older wrapper code of luaotfload -- and actually this already happened, see the following section.
+
+
+
+\section{Incompabilities with the \package{luaotfload} \enquote{wrapper} files}\label{sec:problem}
+
+As mentioned in the previous section it is always possible that newer versions of the core fontloader are no longer compatible to the wrapper files from \package{luaotfload}. If you try out \texttt{fontloader-reference-2017-07-28.lua} you will get a lua error:
+
+\begin{verbatim}
+luaotfload | load : FATAL ERROR
+luaotfload | load : Failed to load module "luaotfload-letterspace.lua".
+luaotfload | load : Error message:
+luaotfload | load : "...mf-dist/tex/luatex/luaotfload/luaotfload-letterspace.lua:73:
+ attempt to index local 'nodepool' (a nil value)".
+\end{verbatim}
+
+The reason is that \texttt{luaotfload-letterspace.lua} tries to access a table value that no longer exists. Imho it is not possible to solve this problem without changing the original file. This is absolutly not to my liking but as I don't see another way I offer a patched version. If you want to use the newer fontloader versions you will have to do this:
+
+In the documentation folder of this package there is a file \texttt{luaotfload-letterspace.luax}. Change the extension to \texttt{lua} and copy the file to your document folder or in a \emph{local} texmf tree to \texttt{tex/luatex/luaotfload} -- in the second case don't forget to update your file name database (FNDB): in miktex with \texttt{initexmf -u} and in texlive with \texttt{mktexlsr}.
+
+Try out a small lualatex document. If the log-file tells you
+
+\verb+ !!!!! UF: Using CHANGED luaotfload-letterspace 2017-07-14 !!!!!+
+
+then the new \texttt{lua}-file is used. \textbf{Don't forget that this patched file is in your system! When luaotfload is updated you should remove it.}
+
+\section{The list of new fontloaders}
+
+Currently there are only three fontloaders. But I plan to add more if some changes are made to the context files.
+
+Fontloaders with * before their name need the adapted \texttt{luaotfload-letterspace.lua} as described in the last section.
+
+\begin{description}[font=\texttt]
+ \item[fontloader-2017-02-11-stix.lua] This fontloader is the original luaotfload-type fontloader where one section -- from \texttt{font-oto.lua} -- has been replaced to get around a bug in the stix fonts with wrong parenthese sizes. See \texttt{test-fontloader-2017-02-11-stix.tex}.
+
+ \item[*fontloader-reference-2017-07-28.lua] This is a reference-type fontloader which has been created on 2017-07-28. It adds the capability to add ligatures with \enquote{word boundaries}. See \texttt{test-fontloader-2017-07-28.tex}.
+
+ \item[*fontloader-reference-2017-08-18.lua] This is a reference-type fontloader which I added when I tried out to color the cow fonts: See \url{https://tex.stackexchange.com/a/387069/2388} and
+ \texttt{test-fontloader-2017-08-18.tex}.
+
+\end{description}
+
+
+\section{Using newer luatex versions}
+
+As mentioned in the tex.stackexchange answer about the colored cow fonts, the solution needs a newer luatex. While \texttt{fontloader-reference-2017-08-18.lua} in itself seems to work fine with the luatex of TeXlive 2017, trying to use the \texttt{colr} font feature, leads to the error
+
+ \verb+! error: (vf command): unknown packet command+
+
+So here a description how I did setup my windows system to allow tests with a newer luatex without disturbing my standard system:
+
+\begin{enumerate}
+\item I created a folder \texttt{.../texlive/2017/bin-dev} beside the standard \texttt{bin}-folder.
+\item In this \texttt{bin-dev}-folder I copied the whole \texttt{win32} from the \texttt{bin}-folder.
+\item I got \texttt{luatex-dev-w32.tar.xz} from \texttt{http://w32tex.org/} and copied the included \texttt{luatex.dll} and \texttt{lua52.dll} to the \texttt{bin-dev/win32}-folder.
+
+\item In the \texttt{bin-dev/win32}-folder I created a \texttt{texmf.cnf}-file with the line
+
+ \verb+ TEXMFSYSVAR = $TEXMFROOT/texmf-var-dev+
+
+\item Then I changed the windows \texttt{PATH}-variable and added the path to \texttt{.../bin-dev/win32;} at the begin.
+
+\item As a last step I called on a command \verb+fmtutil-sys --all+. This creates the formats in a new \texttt{texmf-var-dev} tree beside the standard \texttt{texmf-var}.
+\end{enumerate}
+
+With this installation it is possible to switch between the normal texlive and the one with the development luatex simply by changing the windows PATH variable.
+
+
+
+
+
+\end{document}
+
+
+
diff --git a/obsolete/macros/luatex/generic/fontloader-luaotfload/fontloader-reference-2017-07-28.lua b/obsolete/macros/luatex/generic/fontloader-luaotfload/fontloader-reference-2017-07-28.lua
new file mode 100644
index 0000000000..0445af9cfa
--- /dev/null
+++ b/obsolete/macros/luatex/generic/fontloader-luaotfload/fontloader-reference-2017-07-28.lua
@@ -0,0 +1,34685 @@
+-- merged file : c:/data/develop/context/sources/luatex-fonts-merged.lua
+-- parent file : c:/data/develop/context/sources/luatex-fonts.lua
+-- merge date : 07/28/17 22:51:33
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['l-lua']={
+ version=1.001,
+ comment="companion to luat-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+_MAJORVERSION,_MINORVERSION=string.match(_VERSION,"^[^%d]+(%d+)%.(%d+).*$")
+_MAJORVERSION=tonumber(_MAJORVERSION) or 5
+_MINORVERSION=tonumber(_MINORVERSION) or 1
+_LUAVERSION=_MAJORVERSION+_MINORVERSION/10
+if _LUAVERSION<5.2 and jit then
+ _MINORVERSION=2
+ _LUAVERSION=5.2
+end
+if not lpeg then
+ lpeg=require("lpeg")
+end
+if loadstring then
+ local loadnormal=load
+ function load(first,...)
+ if type(first)=="string" then
+ return loadstring(first,...)
+ else
+ return loadnormal(first,...)
+ end
+ end
+else
+ loadstring=load
+end
+if not ipairs then
+ local function iterate(a,i)
+ i=i+1
+ local v=a[i]
+ if v~=nil then
+ return i,v
+ end
+ end
+ function ipairs(a)
+ return iterate,a,0
+ end
+end
+if not pairs then
+ function pairs(t)
+ return next,t
+ end
+end
+if not table.unpack then
+ table.unpack=_G.unpack
+elseif not unpack then
+ _G.unpack=table.unpack
+end
+if not package.loaders then
+ package.loaders=package.searchers
+end
+local print,select,tostring=print,select,tostring
+local inspectors={}
+function setinspector(kind,inspector)
+ inspectors[kind]=inspector
+end
+function inspect(...)
+ for s=1,select("#",...) do
+ local value=select(s,...)
+ if value==nil then
+ print("nil")
+ else
+ local done=false
+ local kind=type(value)
+ local inspector=inspectors[kind]
+ if inspector then
+ done=inspector(value)
+ if done then
+ break
+ end
+ end
+ for kind,inspector in next,inspectors do
+ done=inspector(value)
+ if done then
+ break
+ end
+ end
+ if not done then
+ print(tostring(value))
+ end
+ end
+ end
+end
+local dummy=function() end
+function optionalrequire(...)
+ local ok,result=xpcall(require,dummy,...)
+ if ok then
+ return result
+ end
+end
+if lua then
+ lua.mask=load([[τεχ = 1]]) and "utf" or "ascii"
+end
+local flush=io.flush
+if flush then
+ local execute=os.execute if execute then function os.execute(...) flush() return execute(...) end end
+ local exec=os.exec if exec then function os.exec (...) flush() return exec (...) end end
+ local spawn=os.spawn if spawn then function os.spawn (...) flush() return spawn (...) end end
+ local popen=io.popen if popen then function io.popen (...) flush() return popen (...) end end
+end
+FFISUPPORTED=type(ffi)=="table" and ffi.os~="" and ffi.arch~="" and ffi.load
+if not FFISUPPORTED then
+ local okay;okay,ffi=pcall(require,"ffi")
+ FFISUPPORTED=type(ffi)=="table" and ffi.os~="" and ffi.arch~="" and ffi.load
+end
+if not FFISUPPORTED then
+ ffi=nil
+elseif not ffi.number then
+ ffi.number=tonumber
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['l-lpeg']={
+ version=1.001,
+ comment="companion to luat-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+lpeg=require("lpeg")
+if not lpeg.print then function lpeg.print(...) print(lpeg.pcode(...)) end end
+local type,next,tostring=type,next,tostring
+local byte,char,gmatch,format=string.byte,string.char,string.gmatch,string.format
+local floor=math.floor
+local P,R,S,V,Ct,C,Cs,Cc,Cp,Cmt=lpeg.P,lpeg.R,lpeg.S,lpeg.V,lpeg.Ct,lpeg.C,lpeg.Cs,lpeg.Cc,lpeg.Cp,lpeg.Cmt
+local lpegtype,lpegmatch,lpegprint=lpeg.type,lpeg.match,lpeg.print
+if setinspector then
+ setinspector("lpeg",function(v) if lpegtype(v) then lpegprint(v) return true end end)
+end
+lpeg.patterns=lpeg.patterns or {}
+local patterns=lpeg.patterns
+local anything=P(1)
+local endofstring=P(-1)
+local alwaysmatched=P(true)
+patterns.anything=anything
+patterns.endofstring=endofstring
+patterns.beginofstring=alwaysmatched
+patterns.alwaysmatched=alwaysmatched
+local sign=S('+-')
+local zero=P('0')
+local digit=R('09')
+local octdigit=R("07")
+local lowercase=R("az")
+local uppercase=R("AZ")
+local underscore=P("_")
+local hexdigit=digit+lowercase+uppercase
+local cr,lf,crlf=P("\r"),P("\n"),P("\r\n")
+local newline=P("\r")*(P("\n")+P(true))+P("\n")
+local escaped=P("\\")*anything
+local squote=P("'")
+local dquote=P('"')
+local space=P(" ")
+local period=P(".")
+local comma=P(",")
+local utfbom_32_be=P('\000\000\254\255')
+local utfbom_32_le=P('\255\254\000\000')
+local utfbom_16_be=P('\254\255')
+local utfbom_16_le=P('\255\254')
+local utfbom_8=P('\239\187\191')
+local utfbom=utfbom_32_be+utfbom_32_le+utfbom_16_be+utfbom_16_le+utfbom_8
+local utftype=utfbom_32_be*Cc("utf-32-be")+utfbom_32_le*Cc("utf-32-le")+utfbom_16_be*Cc("utf-16-be")+utfbom_16_le*Cc("utf-16-le")+utfbom_8*Cc("utf-8")+alwaysmatched*Cc("utf-8")
+local utfstricttype=utfbom_32_be*Cc("utf-32-be")+utfbom_32_le*Cc("utf-32-le")+utfbom_16_be*Cc("utf-16-be")+utfbom_16_le*Cc("utf-16-le")+utfbom_8*Cc("utf-8")
+local utfoffset=utfbom_32_be*Cc(4)+utfbom_32_le*Cc(4)+utfbom_16_be*Cc(2)+utfbom_16_le*Cc(2)+utfbom_8*Cc(3)+Cc(0)
+local utf8next=R("\128\191")
+patterns.utfbom_32_be=utfbom_32_be
+patterns.utfbom_32_le=utfbom_32_le
+patterns.utfbom_16_be=utfbom_16_be
+patterns.utfbom_16_le=utfbom_16_le
+patterns.utfbom_8=utfbom_8
+patterns.utf_16_be_nl=P("\000\r\000\n")+P("\000\r")+P("\000\n")
+patterns.utf_16_le_nl=P("\r\000\n\000")+P("\r\000")+P("\n\000")
+patterns.utf_32_be_nl=P("\000\000\000\r\000\000\000\n")+P("\000\000\000\r")+P("\000\000\000\n")
+patterns.utf_32_le_nl=P("\r\000\000\000\n\000\000\000")+P("\r\000\000\000")+P("\n\000\000\000")
+patterns.utf8one=R("\000\127")
+patterns.utf8two=R("\194\223")*utf8next
+patterns.utf8three=R("\224\239")*utf8next*utf8next
+patterns.utf8four=R("\240\244")*utf8next*utf8next*utf8next
+patterns.utfbom=utfbom
+patterns.utftype=utftype
+patterns.utfstricttype=utfstricttype
+patterns.utfoffset=utfoffset
+local utf8char=patterns.utf8one+patterns.utf8two+patterns.utf8three+patterns.utf8four
+local validutf8char=utf8char^0*endofstring*Cc(true)+Cc(false)
+local utf8character=P(1)*R("\128\191")^0
+patterns.utf8=utf8char
+patterns.utf8char=utf8char
+patterns.utf8character=utf8character
+patterns.validutf8=validutf8char
+patterns.validutf8char=validutf8char
+local eol=S("\n\r")
+local spacer=S(" \t\f\v")
+local whitespace=eol+spacer
+local nonspacer=1-spacer
+local nonwhitespace=1-whitespace
+patterns.eol=eol
+patterns.spacer=spacer
+patterns.whitespace=whitespace
+patterns.nonspacer=nonspacer
+patterns.nonwhitespace=nonwhitespace
+local stripper=spacer^0*C((spacer^0*nonspacer^1)^0)
+local fullstripper=whitespace^0*C((whitespace^0*nonwhitespace^1)^0)
+local collapser=Cs(spacer^0/""*nonspacer^0*((spacer^0/" "*nonspacer^1)^0))
+local nospacer=Cs((whitespace^1/""+nonwhitespace^1)^0)
+local b_collapser=Cs(whitespace^0/""*(nonwhitespace^1+whitespace^1/" ")^0)
+local e_collapser=Cs((whitespace^1*P(-1)/""+nonwhitespace^1+whitespace^1/" ")^0)
+local m_collapser=Cs((nonwhitespace^1+whitespace^1/" ")^0)
+local b_stripper=Cs(spacer^0/""*(nonspacer^1+spacer^1/" ")^0)
+local e_stripper=Cs((spacer^1*P(-1)/""+nonspacer^1+spacer^1/" ")^0)
+local m_stripper=Cs((nonspacer^1+spacer^1/" ")^0)
+patterns.stripper=stripper
+patterns.fullstripper=fullstripper
+patterns.collapser=collapser
+patterns.nospacer=nospacer
+patterns.b_collapser=b_collapser
+patterns.m_collapser=m_collapser
+patterns.e_collapser=e_collapser
+patterns.b_stripper=b_stripper
+patterns.m_stripper=m_stripper
+patterns.e_stripper=e_stripper
+patterns.lowercase=lowercase
+patterns.uppercase=uppercase
+patterns.letter=patterns.lowercase+patterns.uppercase
+patterns.space=space
+patterns.tab=P("\t")
+patterns.spaceortab=patterns.space+patterns.tab
+patterns.newline=newline
+patterns.emptyline=newline^1
+patterns.equal=P("=")
+patterns.comma=comma
+patterns.commaspacer=comma*spacer^0
+patterns.period=period
+patterns.colon=P(":")
+patterns.semicolon=P(";")
+patterns.underscore=underscore
+patterns.escaped=escaped
+patterns.squote=squote
+patterns.dquote=dquote
+patterns.nosquote=(escaped+(1-squote))^0
+patterns.nodquote=(escaped+(1-dquote))^0
+patterns.unsingle=(squote/"")*patterns.nosquote*(squote/"")
+patterns.undouble=(dquote/"")*patterns.nodquote*(dquote/"")
+patterns.unquoted=patterns.undouble+patterns.unsingle
+patterns.unspacer=((patterns.spacer^1)/"")^0
+patterns.singlequoted=squote*patterns.nosquote*squote
+patterns.doublequoted=dquote*patterns.nodquote*dquote
+patterns.quoted=patterns.doublequoted+patterns.singlequoted
+patterns.digit=digit
+patterns.octdigit=octdigit
+patterns.hexdigit=hexdigit
+patterns.sign=sign
+patterns.cardinal=digit^1
+patterns.integer=sign^-1*digit^1
+patterns.unsigned=digit^0*period*digit^1
+patterns.float=sign^-1*patterns.unsigned
+patterns.cunsigned=digit^0*comma*digit^1
+patterns.cpunsigned=digit^0*(period+comma)*digit^1
+patterns.cfloat=sign^-1*patterns.cunsigned
+patterns.cpfloat=sign^-1*patterns.cpunsigned
+patterns.number=patterns.float+patterns.integer
+patterns.cnumber=patterns.cfloat+patterns.integer
+patterns.cpnumber=patterns.cpfloat+patterns.integer
+patterns.oct=zero*octdigit^1
+patterns.octal=patterns.oct
+patterns.HEX=zero*P("X")*(digit+uppercase)^1
+patterns.hex=zero*P("x")*(digit+lowercase)^1
+patterns.hexadecimal=zero*S("xX")*hexdigit^1
+patterns.hexafloat=sign^-1*zero*S("xX")*(hexdigit^0*period*hexdigit^1+hexdigit^1*period*hexdigit^0+hexdigit^1)*(S("pP")*sign^-1*hexdigit^1)^-1
+patterns.decafloat=sign^-1*(digit^0*period*digit^1+digit^1*period*digit^0+digit^1)*S("eE")*sign^-1*digit^1
+patterns.propername=(uppercase+lowercase+underscore)*(uppercase+lowercase+underscore+digit)^0*endofstring
+patterns.somecontent=(anything-newline-space)^1
+patterns.beginline=#(1-newline)
+patterns.longtostring=Cs(whitespace^0/""*((patterns.quoted+nonwhitespace^1+whitespace^1/""*(P(-1)+Cc(" ")))^0))
+local function anywhere(pattern)
+ return P { P(pattern)+1*V(1) }
+end
+lpeg.anywhere=anywhere
+function lpeg.instringchecker(p)
+ p=anywhere(p)
+ return function(str)
+ return lpegmatch(p,str) and true or false
+ end
+end
+function lpeg.splitter(pattern,action)
+ return (((1-P(pattern))^1)/action+1)^0
+end
+function lpeg.tsplitter(pattern,action)
+ return Ct((((1-P(pattern))^1)/action+1)^0)
+end
+local splitters_s,splitters_m,splitters_t={},{},{}
+local function splitat(separator,single)
+ local splitter=(single and splitters_s[separator]) or splitters_m[separator]
+ if not splitter then
+ separator=P(separator)
+ local other=C((1-separator)^0)
+ if single then
+ local any=anything
+ splitter=other*(separator*C(any^0)+"")
+ splitters_s[separator]=splitter
+ else
+ splitter=other*(separator*other)^0
+ splitters_m[separator]=splitter
+ end
+ end
+ return splitter
+end
+local function tsplitat(separator)
+ local splitter=splitters_t[separator]
+ if not splitter then
+ splitter=Ct(splitat(separator))
+ splitters_t[separator]=splitter
+ end
+ return splitter
+end
+lpeg.splitat=splitat
+lpeg.tsplitat=tsplitat
+function string.splitup(str,separator)
+ if not separator then
+ separator=","
+ end
+ return lpegmatch(splitters_m[separator] or splitat(separator),str)
+end
+local cache={}
+function lpeg.split(separator,str)
+ local c=cache[separator]
+ if not c then
+ c=tsplitat(separator)
+ cache[separator]=c
+ end
+ return lpegmatch(c,str)
+end
+function string.split(str,separator)
+ if separator then
+ local c=cache[separator]
+ if not c then
+ c=tsplitat(separator)
+ cache[separator]=c
+ end
+ return lpegmatch(c,str)
+ else
+ return { str }
+ end
+end
+local spacing=patterns.spacer^0*newline
+local empty=spacing*Cc("")
+local nonempty=Cs((1-spacing)^1)*spacing^-1
+local content=(empty+nonempty)^1
+patterns.textline=content
+local linesplitter=tsplitat(newline)
+patterns.linesplitter=linesplitter
+function string.splitlines(str)
+ return lpegmatch(linesplitter,str)
+end
+local cache={}
+function lpeg.checkedsplit(separator,str)
+ local c=cache[separator]
+ if not c then
+ separator=P(separator)
+ local other=C((1-separator)^1)
+ c=Ct(separator^0*other*(separator^1*other)^0)
+ cache[separator]=c
+ end
+ return lpegmatch(c,str)
+end
+function string.checkedsplit(str,separator)
+ local c=cache[separator]
+ if not c then
+ separator=P(separator)
+ local other=C((1-separator)^1)
+ c=Ct(separator^0*other*(separator^1*other)^0)
+ cache[separator]=c
+ end
+ return lpegmatch(c,str)
+end
+local function f2(s) local c1,c2=byte(s,1,2) return c1*64+c2-12416 end
+local function f3(s) local c1,c2,c3=byte(s,1,3) return (c1*64+c2)*64+c3-925824 end
+local function f4(s) local c1,c2,c3,c4=byte(s,1,4) return ((c1*64+c2)*64+c3)*64+c4-63447168 end
+local utf8byte=patterns.utf8one/byte+patterns.utf8two/f2+patterns.utf8three/f3+patterns.utf8four/f4
+patterns.utf8byte=utf8byte
+local cache={}
+function lpeg.stripper(str)
+ if type(str)=="string" then
+ local s=cache[str]
+ if not s then
+ s=Cs(((S(str)^1)/""+1)^0)
+ cache[str]=s
+ end
+ return s
+ else
+ return Cs(((str^1)/""+1)^0)
+ end
+end
+local cache={}
+function lpeg.keeper(str)
+ if type(str)=="string" then
+ local s=cache[str]
+ if not s then
+ s=Cs((((1-S(str))^1)/""+1)^0)
+ cache[str]=s
+ end
+ return s
+ else
+ return Cs((((1-str)^1)/""+1)^0)
+ end
+end
+function lpeg.frontstripper(str)
+ return (P(str)+P(true))*Cs(anything^0)
+end
+function lpeg.endstripper(str)
+ return Cs((1-P(str)*endofstring)^0)
+end
+function lpeg.replacer(one,two,makefunction,isutf)
+ local pattern
+ local u=isutf and utf8char or 1
+ if type(one)=="table" then
+ local no=#one
+ local p=P(false)
+ if no==0 then
+ for k,v in next,one do
+ p=p+P(k)/v
+ end
+ pattern=Cs((p+u)^0)
+ elseif no==1 then
+ local o=one[1]
+ one,two=P(o[1]),o[2]
+ pattern=Cs((one/two+u)^0)
+ else
+ for i=1,no do
+ local o=one[i]
+ p=p+P(o[1])/o[2]
+ end
+ pattern=Cs((p+u)^0)
+ end
+ else
+ pattern=Cs((P(one)/(two or "")+u)^0)
+ end
+ if makefunction then
+ return function(str)
+ return lpegmatch(pattern,str)
+ end
+ else
+ return pattern
+ end
+end
+function lpeg.finder(lst,makefunction,isutf)
+ local pattern
+ if type(lst)=="table" then
+ pattern=P(false)
+ if #lst==0 then
+ for k,v in next,lst do
+ pattern=pattern+P(k)
+ end
+ else
+ for i=1,#lst do
+ pattern=pattern+P(lst[i])
+ end
+ end
+ else
+ pattern=P(lst)
+ end
+ if isutf then
+ pattern=((utf8char or 1)-pattern)^0*pattern
+ else
+ pattern=(1-pattern)^0*pattern
+ end
+ if makefunction then
+ return function(str)
+ return lpegmatch(pattern,str)
+ end
+ else
+ return pattern
+ end
+end
+local splitters_f,splitters_s={},{}
+function lpeg.firstofsplit(separator)
+ local splitter=splitters_f[separator]
+ if not splitter then
+ local pattern=P(separator)
+ splitter=C((1-pattern)^0)
+ splitters_f[separator]=splitter
+ end
+ return splitter
+end
+function lpeg.secondofsplit(separator)
+ local splitter=splitters_s[separator]
+ if not splitter then
+ local pattern=P(separator)
+ splitter=(1-pattern)^0*pattern*C(anything^0)
+ splitters_s[separator]=splitter
+ end
+ return splitter
+end
+local splitters_s,splitters_p={},{}
+function lpeg.beforesuffix(separator)
+ local splitter=splitters_s[separator]
+ if not splitter then
+ local pattern=P(separator)
+ splitter=C((1-pattern)^0)*pattern*endofstring
+ splitters_s[separator]=splitter
+ end
+ return splitter
+end
+function lpeg.afterprefix(separator)
+ local splitter=splitters_p[separator]
+ if not splitter then
+ local pattern=P(separator)
+ splitter=pattern*C(anything^0)
+ splitters_p[separator]=splitter
+ end
+ return splitter
+end
+function lpeg.balancer(left,right)
+ left,right=P(left),P(right)
+ return P { left*((1-left-right)+V(1))^0*right }
+end
+local nany=utf8char/""
+function lpeg.counter(pattern)
+ pattern=Cs((P(pattern)/" "+nany)^0)
+ return function(str)
+ return #lpegmatch(pattern,str)
+ end
+end
+utf=utf or (unicode and unicode.utf8) or {}
+local utfcharacters=utf and utf.characters or string.utfcharacters
+local utfgmatch=utf and utf.gmatch
+local utfchar=utf and utf.char
+lpeg.UP=lpeg.P
+if utfcharacters then
+ function lpeg.US(str)
+ local p=P(false)
+ for uc in utfcharacters(str) do
+ p=p+P(uc)
+ end
+ return p
+ end
+elseif utfgmatch then
+ function lpeg.US(str)
+ local p=P(false)
+ for uc in utfgmatch(str,".") do
+ p=p+P(uc)
+ end
+ return p
+ end
+else
+ function lpeg.US(str)
+ local p=P(false)
+ local f=function(uc)
+ p=p+P(uc)
+ end
+ lpegmatch((utf8char/f)^0,str)
+ return p
+ end
+end
+local range=utf8byte*utf8byte+Cc(false)
+function lpeg.UR(str,more)
+ local first,last
+ if type(str)=="number" then
+ first=str
+ last=more or first
+ else
+ first,last=lpegmatch(range,str)
+ if not last then
+ return P(str)
+ end
+ end
+ if first==last then
+ return P(str)
+ elseif utfchar and (last-first<8) then
+ local p=P(false)
+ for i=first,last do
+ p=p+P(utfchar(i))
+ end
+ return p
+ else
+ local f=function(b)
+ return b>=first and b<=last
+ end
+ return utf8byte/f
+ end
+end
+function lpeg.is_lpeg(p)
+ return p and lpegtype(p)=="pattern"
+end
+function lpeg.oneof(list,...)
+ if type(list)~="table" then
+ list={ list,... }
+ end
+ local p=P(list[1])
+ for l=2,#list do
+ p=p+P(list[l])
+ end
+ return p
+end
+local sort=table.sort
+local function copyindexed(old)
+ local new={}
+ for i=1,#old do
+ new[i]=old
+ end
+ return new
+end
+local function sortedkeys(tab)
+ local keys,s={},0
+ for key,_ in next,tab do
+ s=s+1
+ keys[s]=key
+ end
+ sort(keys)
+ return keys
+end
+function lpeg.append(list,pp,delayed,checked)
+ local p=pp
+ if #list>0 then
+ local keys=copyindexed(list)
+ sort(keys)
+ for i=#keys,1,-1 do
+ local k=keys[i]
+ if p then
+ p=P(k)+p
+ else
+ p=P(k)
+ end
+ end
+ elseif delayed then
+ local keys=sortedkeys(list)
+ if p then
+ for i=1,#keys,1 do
+ local k=keys[i]
+ local v=list[k]
+ p=P(k)/list+p
+ end
+ else
+ for i=1,#keys do
+ local k=keys[i]
+ local v=list[k]
+ if p then
+ p=P(k)+p
+ else
+ p=P(k)
+ end
+ end
+ if p then
+ p=p/list
+ end
+ end
+ elseif checked then
+ local keys=sortedkeys(list)
+ for i=1,#keys do
+ local k=keys[i]
+ local v=list[k]
+ if p then
+ if k==v then
+ p=P(k)+p
+ else
+ p=P(k)/v+p
+ end
+ else
+ if k==v then
+ p=P(k)
+ else
+ p=P(k)/v
+ end
+ end
+ end
+ else
+ local keys=sortedkeys(list)
+ for i=1,#keys do
+ local k=keys[i]
+ local v=list[k]
+ if p then
+ p=P(k)/v+p
+ else
+ p=P(k)/v
+ end
+ end
+ end
+ return p
+end
+local p_false=P(false)
+local p_true=P(true)
+local function make(t,rest)
+ local p=p_false
+ local keys=sortedkeys(t)
+ for i=1,#keys do
+ local k=keys[i]
+ if k~="" then
+ local v=t[k]
+ if v==true then
+ p=p+P(k)*p_true
+ elseif v==false then
+ else
+ p=p+P(k)*make(v,v[""])
+ end
+ end
+ end
+ if rest then
+ p=p+p_true
+ end
+ return p
+end
+local function collapse(t,x)
+ if type(t)~="table" then
+ return t,x
+ else
+ local n=next(t)
+ if n==nil then
+ return t,x
+ elseif next(t,n)==nil then
+ local k=n
+ local v=t[k]
+ if type(v)=="table" then
+ return collapse(v,x..k)
+ else
+ return v,x..k
+ end
+ else
+ local tt={}
+ for k,v in next,t do
+ local vv,kk=collapse(v,k)
+ tt[kk]=vv
+ end
+ return tt,x
+ end
+ end
+end
+function lpeg.utfchartabletopattern(list)
+ local tree={}
+ local n=#list
+ if n==0 then
+ for s in next,list do
+ local t=tree
+ local p,pk
+ for c in gmatch(s,".") do
+ if t==true then
+ t={ [c]=true,[""]=true }
+ p[pk]=t
+ p=t
+ t=false
+ elseif t==false then
+ t={ [c]=false }
+ p[pk]=t
+ p=t
+ t=false
+ else
+ local tc=t[c]
+ if not tc then
+ tc=false
+ t[c]=false
+ end
+ p=t
+ t=tc
+ end
+ pk=c
+ end
+ if t==false then
+ p[pk]=true
+ elseif t==true then
+ else
+ t[""]=true
+ end
+ end
+ else
+ for i=1,n do
+ local s=list[i]
+ local t=tree
+ local p,pk
+ for c in gmatch(s,".") do
+ if t==true then
+ t={ [c]=true,[""]=true }
+ p[pk]=t
+ p=t
+ t=false
+ elseif t==false then
+ t={ [c]=false }
+ p[pk]=t
+ p=t
+ t=false
+ else
+ local tc=t[c]
+ if not tc then
+ tc=false
+ t[c]=false
+ end
+ p=t
+ t=tc
+ end
+ pk=c
+ end
+ if t==false then
+ p[pk]=true
+ elseif t==true then
+ else
+ t[""]=true
+ end
+ end
+ end
+ return make(tree)
+end
+patterns.containseol=lpeg.finder(eol)
+local function nextstep(n,step,result)
+ local m=n%step
+ local d=floor(n/step)
+ if d>0 then
+ local v=V(tostring(step))
+ local s=result.start
+ for i=1,d do
+ if s then
+ s=v*s
+ else
+ s=v
+ end
+ end
+ result.start=s
+ end
+ if step>1 and result.start then
+ local v=V(tostring(step/2))
+ result[tostring(step)]=v*v
+ end
+ if step>0 then
+ return nextstep(m,step/2,result)
+ else
+ return result
+ end
+end
+function lpeg.times(pattern,n)
+ return P(nextstep(n,2^16,{ "start",["1"]=pattern }))
+end
+local trailingzeros=zero^0*-digit
+local case_1=period*trailingzeros/""
+local case_2=period*(digit-trailingzeros)^1*(trailingzeros/"")
+local number=digit^1*(case_1+case_2)
+local stripper=Cs((number+1)^0)
+lpeg.patterns.stripzeros=stripper
+local byte_to_HEX={}
+local byte_to_hex={}
+local byte_to_dec={}
+local hex_to_byte={}
+for i=0,255 do
+ local H=format("%02X",i)
+ local h=format("%02x",i)
+ local d=format("%03i",i)
+ local c=char(i)
+ byte_to_HEX[c]=H
+ byte_to_hex[c]=h
+ byte_to_dec[c]=d
+ hex_to_byte[h]=c
+ hex_to_byte[H]=c
+end
+local hextobyte=P(2)/hex_to_byte
+local bytetoHEX=P(1)/byte_to_HEX
+local bytetohex=P(1)/byte_to_hex
+local bytetodec=P(1)/byte_to_dec
+local hextobytes=Cs(hextobyte^0)
+local bytestoHEX=Cs(bytetoHEX^0)
+local bytestohex=Cs(bytetohex^0)
+local bytestodec=Cs(bytetodec^0)
+patterns.hextobyte=hextobyte
+patterns.bytetoHEX=bytetoHEX
+patterns.bytetohex=bytetohex
+patterns.bytetodec=bytetodec
+patterns.hextobytes=hextobytes
+patterns.bytestoHEX=bytestoHEX
+patterns.bytestohex=bytestohex
+patterns.bytestodec=bytestodec
+function string.toHEX(s)
+ if not s or s=="" then
+ return s
+ else
+ return lpegmatch(bytestoHEX,s)
+ end
+end
+function string.tohex(s)
+ if not s or s=="" then
+ return s
+ else
+ return lpegmatch(bytestohex,s)
+ end
+end
+function string.todec(s)
+ if not s or s=="" then
+ return s
+ else
+ return lpegmatch(bytestodec,s)
+ end
+end
+function string.tobytes(s)
+ if not s or s=="" then
+ return s
+ else
+ return lpegmatch(hextobytes,s)
+ end
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['l-functions']={
+ version=1.001,
+ comment="companion to luat-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+functions=functions or {}
+function functions.dummy() end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['l-string']={
+ version=1.001,
+ comment="companion to luat-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local string=string
+local sub,gmatch,format,char,byte,rep,lower=string.sub,string.gmatch,string.format,string.char,string.byte,string.rep,string.lower
+local lpegmatch,patterns=lpeg.match,lpeg.patterns
+local P,S,C,Ct,Cc,Cs=lpeg.P,lpeg.S,lpeg.C,lpeg.Ct,lpeg.Cc,lpeg.Cs
+local unquoted=patterns.squote*C(patterns.nosquote)*patterns.squote+patterns.dquote*C(patterns.nodquote)*patterns.dquote
+function string.unquoted(str)
+ return lpegmatch(unquoted,str) or str
+end
+function string.quoted(str)
+ return format("%q",str)
+end
+function string.count(str,pattern)
+ local n=0
+ for _ in gmatch(str,pattern) do
+ n=n+1
+ end
+ return n
+end
+function string.limit(str,n,sentinel)
+ if #str>n then
+ sentinel=sentinel or "..."
+ return sub(str,1,(n-#sentinel))..sentinel
+ else
+ return str
+ end
+end
+local stripper=patterns.stripper
+local fullstripper=patterns.fullstripper
+local collapser=patterns.collapser
+local nospacer=patterns.nospacer
+local longtostring=patterns.longtostring
+function string.strip(str)
+ return str and lpegmatch(stripper,str) or ""
+end
+function string.fullstrip(str)
+ return str and lpegmatch(fullstripper,str) or ""
+end
+function string.collapsespaces(str)
+ return str and lpegmatch(collapser,str) or ""
+end
+function string.nospaces(str)
+ return str and lpegmatch(nospacer,str) or ""
+end
+function string.longtostring(str)
+ return str and lpegmatch(longtostring,str) or ""
+end
+local pattern=P(" ")^0*P(-1)
+function string.is_empty(str)
+ if not str or str=="" then
+ return true
+ else
+ return lpegmatch(pattern,str) and true or false
+ end
+end
+local anything=patterns.anything
+local allescapes=Cc("%")*S(".-+%?()[]*")
+local someescapes=Cc("%")*S(".-+%()[]")
+local matchescapes=Cc(".")*S("*?")
+local pattern_a=Cs ((allescapes+anything )^0 )
+local pattern_b=Cs ((someescapes+matchescapes+anything )^0 )
+local pattern_c=Cs (Cc("^")*(someescapes+matchescapes+anything )^0*Cc("$") )
+function string.escapedpattern(str,simple)
+ return lpegmatch(simple and pattern_b or pattern_a,str)
+end
+function string.topattern(str,lowercase,strict)
+ if str=="" or type(str)~="string" then
+ return ".*"
+ elseif strict then
+ str=lpegmatch(pattern_c,str)
+ else
+ str=lpegmatch(pattern_b,str)
+ end
+ if lowercase then
+ return lower(str)
+ else
+ return str
+ end
+end
+function string.valid(str,default)
+ return (type(str)=="string" and str~="" and str) or default or nil
+end
+string.itself=function(s) return s end
+local pattern_c=Ct(C(1)^0)
+local pattern_b=Ct((C(1)/byte)^0)
+function string.totable(str,bytes)
+ return lpegmatch(bytes and pattern_b or pattern_c,str)
+end
+local replacer=lpeg.replacer("@","%%")
+function string.tformat(fmt,...)
+ return format(lpegmatch(replacer,fmt),...)
+end
+string.quote=string.quoted
+string.unquote=string.unquoted
+if not string.bytetable then
+ local limit=5000
+ function string.bytetable(str)
+ local n=#str
+ if n>limit then
+ local t={ byte(str,1,limit) }
+ for i=limit+1,n do
+ t[i]=byte(str,i)
+ end
+ return t
+ else
+ return { byte(str,1,n) }
+ end
+ end
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['l-table']={
+ version=1.001,
+ comment="companion to luat-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local type,next,tostring,tonumber,ipairs,select=type,next,tostring,tonumber,ipairs,select
+local table,string=table,string
+local concat,sort,insert,remove=table.concat,table.sort,table.insert,table.remove
+local format,lower,dump=string.format,string.lower,string.dump
+local getmetatable,setmetatable=getmetatable,setmetatable
+local getinfo=debug.getinfo
+local lpegmatch,patterns=lpeg.match,lpeg.patterns
+local floor=math.floor
+local stripper=patterns.stripper
+function table.strip(tab)
+ local lst,l={},0
+ for i=1,#tab do
+ local s=lpegmatch(stripper,tab[i]) or ""
+ if s=="" then
+ else
+ l=l+1
+ lst[l]=s
+ end
+ end
+ return lst
+end
+function table.keys(t)
+ if t then
+ local keys,k={},0
+ for key in next,t do
+ k=k+1
+ keys[k]=key
+ end
+ return keys
+ else
+ return {}
+ end
+end
+local function compare(a,b)
+ local ta=type(a)
+ if ta=="number" then
+ local tb=type(b)
+ if ta==tb then
+ return a<b
+ elseif tb=="string" then
+ return tostring(a)<b
+ end
+ elseif ta=="string" then
+ local tb=type(b)
+ if ta==tb then
+ return a<b
+ else
+ return a<tostring(b)
+ end
+ end
+ return tostring(a)<tostring(b)
+end
+local function sortedkeys(tab)
+ if tab then
+ local srt,category,s={},0,0
+ for key in next,tab do
+ s=s+1
+ srt[s]=key
+ if category==3 then
+ elseif category==1 then
+ if type(key)~="string" then
+ category=3
+ end
+ elseif category==2 then
+ if type(key)~="number" then
+ category=3
+ end
+ else
+ local tkey=type(key)
+ if tkey=="string" then
+ category=1
+ elseif tkey=="number" then
+ category=2
+ else
+ category=3
+ end
+ end
+ end
+ if s<2 then
+ elseif category==3 then
+ sort(srt,compare)
+ else
+ sort(srt)
+ end
+ return srt
+ else
+ return {}
+ end
+end
+local function sortedhashonly(tab)
+ if tab then
+ local srt,s={},0
+ for key in next,tab do
+ if type(key)=="string" then
+ s=s+1
+ srt[s]=key
+ end
+ end
+ if s>1 then
+ sort(srt)
+ end
+ return srt
+ else
+ return {}
+ end
+end
+local function sortedindexonly(tab)
+ if tab then
+ local srt,s={},0
+ for key in next,tab do
+ if type(key)=="number" then
+ s=s+1
+ srt[s]=key
+ end
+ end
+ if s>1 then
+ sort(srt)
+ end
+ return srt
+ else
+ return {}
+ end
+end
+local function sortedhashkeys(tab,cmp)
+ if tab then
+ local srt,s={},0
+ for key in next,tab do
+ if key then
+ s=s+1
+ srt[s]=key
+ end
+ end
+ if s>1 then
+ sort(srt,cmp)
+ end
+ return srt
+ else
+ return {}
+ end
+end
+function table.allkeys(t)
+ local keys={}
+ for k,v in next,t do
+ for k in next,v do
+ keys[k]=true
+ end
+ end
+ return sortedkeys(keys)
+end
+table.sortedkeys=sortedkeys
+table.sortedhashonly=sortedhashonly
+table.sortedindexonly=sortedindexonly
+table.sortedhashkeys=sortedhashkeys
+local function nothing() end
+local function sortedhash(t,cmp)
+ if t then
+ local s
+ if cmp then
+ s=sortedhashkeys(t,function(a,b) return cmp(t,a,b) end)
+ else
+ s=sortedkeys(t)
+ end
+ local m=#s
+ if m==1 then
+ return next,t
+ elseif m>0 then
+ local n=0
+ return function()
+ if n<m then
+ n=n+1
+ local k=s[n]
+ return k,t[k]
+ end
+ end
+ end
+ end
+ return nothing
+end
+table.sortedhash=sortedhash
+table.sortedpairs=sortedhash
+function table.append(t,list)
+ local n=#t
+ for i=1,#list do
+ n=n+1
+ t[n]=list[i]
+ end
+ return t
+end
+function table.prepend(t,list)
+ local nl=#list
+ local nt=nl+#t
+ for i=#t,1,-1 do
+ t[nt]=t[i]
+ nt=nt-1
+ end
+ for i=1,#list do
+ t[i]=list[i]
+ end
+ return t
+end
+function table.merge(t,...)
+ t=t or {}
+ for i=1,select("#",...) do
+ for k,v in next,(select(i,...)) do
+ t[k]=v
+ end
+ end
+ return t
+end
+function table.merged(...)
+ local t={}
+ for i=1,select("#",...) do
+ for k,v in next,(select(i,...)) do
+ t[k]=v
+ end
+ end
+ return t
+end
+function table.imerge(t,...)
+ local nt=#t
+ for i=1,select("#",...) do
+ local nst=select(i,...)
+ for j=1,#nst do
+ nt=nt+1
+ t[nt]=nst[j]
+ end
+ end
+ return t
+end
+function table.imerged(...)
+ local tmp,ntmp={},0
+ for i=1,select("#",...) do
+ local nst=select(i,...)
+ for j=1,#nst do
+ ntmp=ntmp+1
+ tmp[ntmp]=nst[j]
+ end
+ end
+ return tmp
+end
+local function fastcopy(old,metatabletoo)
+ if old then
+ local new={}
+ for k,v in next,old do
+ if type(v)=="table" then
+ new[k]=fastcopy(v,metatabletoo)
+ else
+ new[k]=v
+ end
+ end
+ if metatabletoo then
+ local mt=getmetatable(old)
+ if mt then
+ setmetatable(new,mt)
+ end
+ end
+ return new
+ else
+ return {}
+ end
+end
+local function copy(t,tables)
+ tables=tables or {}
+ local tcopy={}
+ if not tables[t] then
+ tables[t]=tcopy
+ end
+ for i,v in next,t do
+ if type(i)=="table" then
+ if tables[i] then
+ i=tables[i]
+ else
+ i=copy(i,tables)
+ end
+ end
+ if type(v)~="table" then
+ tcopy[i]=v
+ elseif tables[v] then
+ tcopy[i]=tables[v]
+ else
+ tcopy[i]=copy(v,tables)
+ end
+ end
+ local mt=getmetatable(t)
+ if mt then
+ setmetatable(tcopy,mt)
+ end
+ return tcopy
+end
+table.fastcopy=fastcopy
+table.copy=copy
+function table.derive(parent)
+ local child={}
+ if parent then
+ setmetatable(child,{ __index=parent })
+ end
+ return child
+end
+function table.tohash(t,value)
+ local h={}
+ if t then
+ if value==nil then value=true end
+ for _,v in next,t do
+ h[v]=value
+ end
+ end
+ return h
+end
+function table.fromhash(t)
+ local hsh,h={},0
+ for k,v in next,t do
+ if v then
+ h=h+1
+ hsh[h]=k
+ end
+ end
+ return hsh
+end
+local noquotes,hexify,handle,compact,inline,functions,metacheck
+local reserved=table.tohash {
+ 'and','break','do','else','elseif','end','false','for','function','if',
+ 'in','local','nil','not','or','repeat','return','then','true','until','while',
+ 'NaN','goto',
+}
+local function is_simple_table(t,hexify)
+ local nt=#t
+ if nt>0 then
+ local n=0
+ for _,v in next,t do
+ n=n+1
+ if type(v)=="table" then
+ return nil
+ end
+ end
+ local haszero=rawget(t,0)
+ if n==nt then
+ local tt={}
+ for i=1,nt do
+ local v=t[i]
+ local tv=type(v)
+ if tv=="number" then
+ if hexify then
+ tt[i]=format("0x%X",v)
+ else
+ tt[i]=v
+ end
+ elseif tv=="string" then
+ tt[i]=format("%q",v)
+ elseif tv=="boolean" then
+ tt[i]=v and "true" or "false"
+ else
+ return nil
+ end
+ end
+ return tt
+ elseif haszero and (n==nt+1) then
+ local tt={}
+ for i=0,nt do
+ local v=t[i]
+ local tv=type(v)
+ if tv=="number" then
+ if hexify then
+ tt[i+1]=format("0x%X",v)
+ else
+ tt[i+1]=v
+ end
+ elseif tv=="string" then
+ tt[i+1]=format("%q",v)
+ elseif tv=="boolean" then
+ tt[i+1]=v and "true" or "false"
+ else
+ return nil
+ end
+ end
+ tt[1]="[0] = "..tt[1]
+ return tt
+ end
+ end
+ return nil
+end
+table.is_simple_table=is_simple_table
+local propername=patterns.propername
+local function dummy() end
+local function do_serialize(root,name,depth,level,indexed)
+ if level>0 then
+ depth=depth.." "
+ if indexed then
+ handle(format("%s{",depth))
+ else
+ local tn=type(name)
+ if tn=="number" then
+ if hexify then
+ handle(format("%s[0x%X]={",depth,name))
+ else
+ handle(format("%s[%s]={",depth,name))
+ end
+ elseif tn=="string" then
+ if noquotes and not reserved[name] and lpegmatch(propername,name) then
+ handle(format("%s%s={",depth,name))
+ else
+ handle(format("%s[%q]={",depth,name))
+ end
+ elseif tn=="boolean" then
+ handle(format("%s[%s]={",depth,name and "true" or "false"))
+ else
+ handle(format("%s{",depth))
+ end
+ end
+ end
+ if root and next(root)~=nil then
+ local first,last=nil,0
+ if compact then
+ last=#root
+ for k=1,last do
+ if rawget(root,k)==nil then
+ last=k-1
+ break
+ end
+ end
+ if last>0 then
+ first=1
+ end
+ end
+ local sk=sortedkeys(root)
+ for i=1,#sk do
+ local k=sk[i]
+ local v=root[k]
+ local tv=type(v)
+ local tk=type(k)
+ if compact and first and tk=="number" and k>=first and k<=last then
+ if tv=="number" then
+ if hexify then
+ handle(format("%s 0x%X,",depth,v))
+ else
+ handle(format("%s %s,",depth,v))
+ end
+ elseif tv=="string" then
+ handle(format("%s %q,",depth,v))
+ elseif tv=="table" then
+ if next(v)==nil then
+ handle(format("%s {},",depth))
+ elseif inline then
+ local st=is_simple_table(v,hexify)
+ if st then
+ handle(format("%s { %s },",depth,concat(st,", ")))
+ else
+ do_serialize(v,k,depth,level+1,true)
+ end
+ else
+ do_serialize(v,k,depth,level+1,true)
+ end
+ elseif tv=="boolean" then
+ handle(format("%s %s,",depth,v and "true" or "false"))
+ elseif tv=="function" then
+ if functions then
+ handle(format('%s load(%q),',depth,dump(v)))
+ else
+ handle(format('%s "function",',depth))
+ end
+ else
+ handle(format("%s %q,",depth,tostring(v)))
+ end
+ elseif k=="__p__" then
+ if false then
+ handle(format("%s __p__=nil,",depth))
+ end
+ elseif tv=="number" then
+ if tk=="number" then
+ if hexify then
+ handle(format("%s [0x%X]=0x%X,",depth,k,v))
+ else
+ handle(format("%s [%s]=%s,",depth,k,v))
+ end
+ elseif tk=="boolean" then
+ if hexify then
+ handle(format("%s [%s]=0x%X,",depth,k and "true" or "false",v))
+ else
+ handle(format("%s [%s]=%s,",depth,k and "true" or "false",v))
+ end
+ elseif tk~="string" then
+ elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
+ if hexify then
+ handle(format("%s %s=0x%X,",depth,k,v))
+ else
+ handle(format("%s %s=%s,",depth,k,v))
+ end
+ else
+ if hexify then
+ handle(format("%s [%q]=0x%X,",depth,k,v))
+ else
+ handle(format("%s [%q]=%s,",depth,k,v))
+ end
+ end
+ elseif tv=="string" then
+ if tk=="number" then
+ if hexify then
+ handle(format("%s [0x%X]=%q,",depth,k,v))
+ else
+ handle(format("%s [%s]=%q,",depth,k,v))
+ end
+ elseif tk=="boolean" then
+ handle(format("%s [%s]=%q,",depth,k and "true" or "false",v))
+ elseif tk~="string" then
+ elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
+ handle(format("%s %s=%q,",depth,k,v))
+ else
+ handle(format("%s [%q]=%q,",depth,k,v))
+ end
+ elseif tv=="table" then
+ if next(v)==nil then
+ if tk=="number" then
+ if hexify then
+ handle(format("%s [0x%X]={},",depth,k))
+ else
+ handle(format("%s [%s]={},",depth,k))
+ end
+ elseif tk=="boolean" then
+ handle(format("%s [%s]={},",depth,k and "true" or "false"))
+ elseif tk~="string" then
+ elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
+ handle(format("%s %s={},",depth,k))
+ else
+ handle(format("%s [%q]={},",depth,k))
+ end
+ elseif inline then
+ local st=is_simple_table(v,hexify)
+ if st then
+ if tk=="number" then
+ if hexify then
+ handle(format("%s [0x%X]={ %s },",depth,k,concat(st,", ")))
+ else
+ handle(format("%s [%s]={ %s },",depth,k,concat(st,", ")))
+ end
+ elseif tk=="boolean" then
+ handle(format("%s [%s]={ %s },",depth,k and "true" or "false",concat(st,", ")))
+ elseif tk~="string" then
+ elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
+ handle(format("%s %s={ %s },",depth,k,concat(st,", ")))
+ else
+ handle(format("%s [%q]={ %s },",depth,k,concat(st,", ")))
+ end
+ else
+ do_serialize(v,k,depth,level+1)
+ end
+ else
+ do_serialize(v,k,depth,level+1)
+ end
+ elseif tv=="boolean" then
+ if tk=="number" then
+ if hexify then
+ handle(format("%s [0x%X]=%s,",depth,k,v and "true" or "false"))
+ else
+ handle(format("%s [%s]=%s,",depth,k,v and "true" or "false"))
+ end
+ elseif tk=="boolean" then
+ handle(format("%s [%s]=%s,",depth,tostring(k),v and "true" or "false"))
+ elseif tk~="string" then
+ elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
+ handle(format("%s %s=%s,",depth,k,v and "true" or "false"))
+ else
+ handle(format("%s [%q]=%s,",depth,k,v and "true" or "false"))
+ end
+ elseif tv=="function" then
+ if functions then
+ local f=getinfo(v).what=="C" and dump(dummy) or dump(v)
+ if tk=="number" then
+ if hexify then
+ handle(format("%s [0x%X]=load(%q),",depth,k,f))
+ else
+ handle(format("%s [%s]=load(%q),",depth,k,f))
+ end
+ elseif tk=="boolean" then
+ handle(format("%s [%s]=load(%q),",depth,k and "true" or "false",f))
+ elseif tk~="string" then
+ elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
+ handle(format("%s %s=load(%q),",depth,k,f))
+ else
+ handle(format("%s [%q]=load(%q),",depth,k,f))
+ end
+ end
+ else
+ if tk=="number" then
+ if hexify then
+ handle(format("%s [0x%X]=%q,",depth,k,tostring(v)))
+ else
+ handle(format("%s [%s]=%q,",depth,k,tostring(v)))
+ end
+ elseif tk=="boolean" then
+ handle(format("%s [%s]=%q,",depth,k and "true" or "false",tostring(v)))
+ elseif tk~="string" then
+ elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
+ handle(format("%s %s=%q,",depth,k,tostring(v)))
+ else
+ handle(format("%s [%q]=%q,",depth,k,tostring(v)))
+ end
+ end
+ end
+ end
+ if level>0 then
+ handle(format("%s},",depth))
+ end
+end
+local function serialize(_handle,root,name,specification)
+ local tname=type(name)
+ if type(specification)=="table" then
+ noquotes=specification.noquotes
+ hexify=specification.hexify
+ handle=_handle or specification.handle or print
+ functions=specification.functions
+ compact=specification.compact
+ inline=specification.inline and compact
+ metacheck=specification.metacheck
+ if functions==nil then
+ functions=true
+ end
+ if compact==nil then
+ compact=true
+ end
+ if inline==nil then
+ inline=compact
+ end
+ if metacheck==nil then
+ metacheck=true
+ end
+ else
+ noquotes=false
+ hexify=false
+ handle=_handle or print
+ compact=true
+ inline=true
+ functions=true
+ metacheck=true
+ end
+ if tname=="string" then
+ if name=="return" then
+ handle("return {")
+ else
+ handle(name.."={")
+ end
+ elseif tname=="number" then
+ if hexify then
+ handle(format("[0x%X]={",name))
+ else
+ handle("["..name.."]={")
+ end
+ elseif tname=="boolean" then
+ if name then
+ handle("return {")
+ else
+ handle("{")
+ end
+ else
+ handle("t={")
+ end
+ if root then
+ if metacheck and getmetatable(root) then
+ local dummy=root._w_h_a_t_e_v_e_r_
+ root._w_h_a_t_e_v_e_r_=nil
+ end
+ if next(root)~=nil then
+ do_serialize(root,name,"",0)
+ end
+ end
+ handle("}")
+end
+function table.serialize(root,name,specification)
+ local t,n={},0
+ local function flush(s)
+ n=n+1
+ t[n]=s
+ end
+ serialize(flush,root,name,specification)
+ return concat(t,"\n")
+end
+table.tohandle=serialize
+local maxtab=2*1024
+function table.tofile(filename,root,name,specification)
+ local f=io.open(filename,'w')
+ if f then
+ if maxtab>1 then
+ local t,n={},0
+ local function flush(s)
+ n=n+1
+ t[n]=s
+ if n>maxtab then
+ f:write(concat(t,"\n"),"\n")
+ t,n={},0
+ end
+ end
+ serialize(flush,root,name,specification)
+ f:write(concat(t,"\n"),"\n")
+ else
+ local function flush(s)
+ f:write(s,"\n")
+ end
+ serialize(flush,root,name,specification)
+ end
+ f:close()
+ io.flush()
+ end
+end
+local function flattened(t,f,depth)
+ if f==nil then
+ f={}
+ depth=0xFFFF
+ elseif tonumber(f) then
+ depth=f
+ f={}
+ elseif not depth then
+ depth=0xFFFF
+ end
+ for k,v in next,t do
+ if type(k)~="number" then
+ if depth>0 and type(v)=="table" then
+ flattened(v,f,depth-1)
+ else
+ f[#f+1]=v
+ end
+ end
+ end
+ for k=1,#t do
+ local v=t[k]
+ if depth>0 and type(v)=="table" then
+ flattened(v,f,depth-1)
+ else
+ f[#f+1]=v
+ end
+ end
+ return f
+end
+table.flattened=flattened
+local function collapsed(t,f,h)
+ if f==nil then
+ f={}
+ h={}
+ end
+ for k=1,#t do
+ local v=t[k]
+ if type(v)=="table" then
+ collapsed(v,f,h)
+ elseif not h[v] then
+ f[#f+1]=v
+ h[v]=true
+ end
+ end
+ return f
+end
+local function collapsedhash(t,h)
+ if h==nil then
+ h={}
+ end
+ for k=1,#t do
+ local v=t[k]
+ if type(v)=="table" then
+ collapsedhash(v,h)
+ else
+ h[v]=true
+ end
+ end
+ return h
+end
+table.collapsed=collapsed
+table.collapsedhash=collapsedhash
+local function unnest(t,f)
+ if not f then
+ f={}
+ end
+ for i=1,#t do
+ local v=t[i]
+ if type(v)=="table" then
+ if type(v[1])=="table" then
+ unnest(v,f)
+ else
+ f[#f+1]=v
+ end
+ else
+ f[#f+1]=v
+ end
+ end
+ return f
+end
+function table.unnest(t)
+ return unnest(t)
+end
+local function are_equal(a,b,n,m)
+ if a==b then
+ return true
+ elseif a and b and #a==#b then
+ n=n or 1
+ m=m or #a
+ for i=n,m do
+ local ai,bi=a[i],b[i]
+ if ai==bi then
+ elseif type(ai)=="table" and type(bi)=="table" then
+ if not are_equal(ai,bi) then
+ return false
+ end
+ else
+ return false
+ end
+ end
+ return true
+ else
+ return false
+ end
+end
+local function identical(a,b)
+ if a~=b then
+ for ka,va in next,a do
+ local vb=b[ka]
+ if va==vb then
+ elseif type(va)=="table" and type(vb)=="table" then
+ if not identical(va,vb) then
+ return false
+ end
+ else
+ return false
+ end
+ end
+ end
+ return true
+end
+table.identical=identical
+table.are_equal=are_equal
+local function sparse(old,nest,keeptables)
+ local new={}
+ for k,v in next,old do
+ if not (v=="" or v==false) then
+ if nest and type(v)=="table" then
+ v=sparse(v,nest)
+ if keeptables or next(v)~=nil then
+ new[k]=v
+ end
+ else
+ new[k]=v
+ end
+ end
+ end
+ return new
+end
+table.sparse=sparse
+function table.compact(t)
+ return sparse(t,true,true)
+end
+function table.contains(t,v)
+ if t then
+ for i=1,#t do
+ if t[i]==v then
+ return i
+ end
+ end
+ end
+ return false
+end
+function table.count(t)
+ local n=0
+ for k,v in next,t do
+ n=n+1
+ end
+ return n
+end
+function table.swapped(t,s)
+ local n={}
+ if s then
+ for k,v in next,s do
+ n[k]=v
+ end
+ end
+ for k,v in next,t do
+ n[v]=k
+ end
+ return n
+end
+function table.hashed(t)
+ for i=1,#t do
+ t[t[i]]=i
+ end
+ return t
+end
+function table.mirrored(t)
+ local n={}
+ for k,v in next,t do
+ n[v]=k
+ n[k]=v
+ end
+ return n
+end
+function table.reversed(t)
+ if t then
+ local tt,tn={},#t
+ if tn>0 then
+ local ttn=0
+ for i=tn,1,-1 do
+ ttn=ttn+1
+ tt[ttn]=t[i]
+ end
+ end
+ return tt
+ end
+end
+function table.reverse(t)
+ if t then
+ local n=#t
+ for i=1,floor(n/2) do
+ local j=n-i+1
+ t[i],t[j]=t[j],t[i]
+ end
+ return t
+ end
+end
+function table.sequenced(t,sep,simple)
+ if not t then
+ return ""
+ end
+ local n=#t
+ local s={}
+ if n>0 then
+ for i=1,n do
+ s[i]=tostring(t[i])
+ end
+ else
+ n=0
+ for k,v in sortedhash(t) do
+ if simple then
+ if v==true then
+ n=n+1
+ s[n]=k
+ elseif v and v~="" then
+ n=n+1
+ s[n]=k.."="..tostring(v)
+ end
+ else
+ n=n+1
+ s[n]=k.."="..tostring(v)
+ end
+ end
+ end
+ return concat(s,sep or " | ")
+end
+function table.print(t,...)
+ if type(t)~="table" then
+ print(tostring(t))
+ else
+ serialize(print,t,...)
+ end
+end
+if setinspector then
+ setinspector("table",function(v) if type(v)=="table" then serialize(print,v,"table") return true end end)
+end
+function table.sub(t,i,j)
+ return { unpack(t,i,j) }
+end
+function table.is_empty(t)
+ return not t or next(t)==nil
+end
+function table.has_one_entry(t)
+ return t and next(t,next(t))==nil
+end
+function table.loweredkeys(t)
+ local l={}
+ for k,v in next,t do
+ l[lower(k)]=v
+ end
+ return l
+end
+function table.unique(old)
+ local hash={}
+ local new={}
+ local n=0
+ for i=1,#old do
+ local oi=old[i]
+ if not hash[oi] then
+ n=n+1
+ new[n]=oi
+ hash[oi]=true
+ end
+ end
+ return new
+end
+function table.sorted(t,...)
+ sort(t,...)
+ return t
+end
+function table.values(t,s)
+ if t then
+ local values,keys,v={},{},0
+ for key,value in next,t do
+ if not keys[value] then
+ v=v+1
+ values[v]=value
+ keys[k]=key
+ end
+ end
+ if s then
+ sort(values)
+ end
+ return values
+ else
+ return {}
+ end
+end
+function table.filtered(t,pattern,sort,cmp)
+ if t and type(pattern)=="string" then
+ if sort then
+ local s
+ if cmp then
+ s=sortedhashkeys(t,function(a,b) return cmp(t,a,b) end)
+ else
+ s=sortedkeys(t)
+ end
+ local n=0
+ local m=#s
+ local function kv(s)
+ while n<m do
+ n=n+1
+ local k=s[n]
+ if find(k,pattern) then
+ return k,t[k]
+ end
+ end
+ end
+ return kv,s
+ else
+ local n=next(t)
+ local function iterator()
+ while n~=nil do
+ local k=n
+ n=next(t,k)
+ if find(k,pattern) then
+ return k,t[k]
+ end
+ end
+ end
+ return iterator,t
+ end
+ else
+ return nothing
+ end
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['l-io']={
+ version=1.001,
+ comment="companion to luat-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local io=io
+local open,flush,write,read=io.open,io.flush,io.write,io.read
+local byte,find,gsub,format=string.byte,string.find,string.gsub,string.format
+local concat=table.concat
+local floor=math.floor
+local type=type
+if string.find(os.getenv("PATH"),";",1,true) then
+ io.fileseparator,io.pathseparator="\\",";"
+else
+ io.fileseparator,io.pathseparator="/",":"
+end
+local large=2^24
+local medium=large/16
+local small=medium/8
+local function readall(f)
+ local size=f:seek("end")
+ if size>0 then
+ f:seek("set",0)
+ return f:read(size)
+ else
+ return ""
+ end
+end
+io.readall=readall
+function io.loaddata(filename,textmode)
+ local f=open(filename,(textmode and 'r') or 'rb')
+ if f then
+ local size=f:seek("end")
+ local data=nil
+ if size>0 then
+ f:seek("set",0)
+ data=f:read(size)
+ end
+ f:close()
+ return data
+ end
+end
+function io.copydata(source,target,action)
+ local f=open(source,"rb")
+ if f then
+ local g=open(target,"wb")
+ if g then
+ local size=f:seek("end")
+ if size>0 then
+ f:seek("set",0)
+ local data=f:read(size)
+ if action then
+ data=action(data)
+ end
+ if data then
+ g:write(data)
+ end
+ end
+ g:close()
+ end
+ f:close()
+ flush()
+ end
+end
+function io.savedata(filename,data,joiner)
+ local f=open(filename,"wb")
+ if f then
+ if type(data)=="table" then
+ f:write(concat(data,joiner or ""))
+ elseif type(data)=="function" then
+ data(f)
+ else
+ f:write(data or "")
+ end
+ f:close()
+ flush()
+ return true
+ else
+ return false
+ end
+end
+if fio and fio.readline then
+ local readline=fio.readline
+ function io.loadlines(filename,n)
+ local f=open(filename,'r')
+ if not f then
+ elseif n then
+ local lines={}
+ for i=1,n do
+ local line=readline(f)
+ if line then
+ lines[i]=line
+ else
+ break
+ end
+ end
+ f:close()
+ lines=concat(lines,"\n")
+ if #lines>0 then
+ return lines
+ end
+ else
+ local line=readline(f)
+ f:close()
+ if line and #line>0 then
+ return line
+ end
+ end
+ end
+else
+ function io.loadlines(filename,n)
+ local f=open(filename,'r')
+ if not f then
+ elseif n then
+ local lines={}
+ for i=1,n do
+ local line=f:read("*lines")
+ if line then
+ lines[i]=line
+ else
+ break
+ end
+ end
+ f:close()
+ lines=concat(lines,"\n")
+ if #lines>0 then
+ return lines
+ end
+ else
+ local line=f:read("*line") or ""
+ f:close()
+ if #line>0 then
+ return line
+ end
+ end
+ end
+end
+function io.loadchunk(filename,n)
+ local f=open(filename,'rb')
+ if f then
+ local data=f:read(n or 1024)
+ f:close()
+ if #data>0 then
+ return data
+ end
+ end
+end
+function io.exists(filename)
+ local f=open(filename)
+ if f==nil then
+ return false
+ else
+ f:close()
+ return true
+ end
+end
+function io.size(filename)
+ local f=open(filename)
+ if f==nil then
+ return 0
+ else
+ local s=f:seek("end")
+ f:close()
+ return s
+ end
+end
+local function noflines(f)
+ if type(f)=="string" then
+ local f=open(filename)
+ if f then
+ local n=f and noflines(f) or 0
+ f:close()
+ return n
+ else
+ return 0
+ end
+ else
+ local n=0
+ for _ in f:lines() do
+ n=n+1
+ end
+ f:seek('set',0)
+ return n
+ end
+end
+io.noflines=noflines
+local nextchar={
+ [ 4]=function(f)
+ return f:read(1,1,1,1)
+ end,
+ [ 2]=function(f)
+ return f:read(1,1)
+ end,
+ [ 1]=function(f)
+ return f:read(1)
+ end,
+ [-2]=function(f)
+ local a,b=f:read(1,1)
+ return b,a
+ end,
+ [-4]=function(f)
+ local a,b,c,d=f:read(1,1,1,1)
+ return d,c,b,a
+ end
+}
+function io.characters(f,n)
+ if f then
+ return nextchar[n or 1],f
+ end
+end
+local nextbyte={
+ [4]=function(f)
+ local a,b,c,d=f:read(1,1,1,1)
+ if d then
+ return byte(a),byte(b),byte(c),byte(d)
+ end
+ end,
+ [3]=function(f)
+ local a,b,c=f:read(1,1,1)
+ if b then
+ return byte(a),byte(b),byte(c)
+ end
+ end,
+ [2]=function(f)
+ local a,b=f:read(1,1)
+ if b then
+ return byte(a),byte(b)
+ end
+ end,
+ [1]=function (f)
+ local a=f:read(1)
+ if a then
+ return byte(a)
+ end
+ end,
+ [-2]=function (f)
+ local a,b=f:read(1,1)
+ if b then
+ return byte(b),byte(a)
+ end
+ end,
+ [-3]=function(f)
+ local a,b,c=f:read(1,1,1)
+ if b then
+ return byte(c),byte(b),byte(a)
+ end
+ end,
+ [-4]=function(f)
+ local a,b,c,d=f:read(1,1,1,1)
+ if d then
+ return byte(d),byte(c),byte(b),byte(a)
+ end
+ end
+}
+function io.bytes(f,n)
+ if f then
+ return nextbyte[n or 1],f
+ else
+ return nil,nil
+ end
+end
+function io.ask(question,default,options)
+ while true do
+ write(question)
+ if options then
+ write(format(" [%s]",concat(options,"|")))
+ end
+ if default then
+ write(format(" [%s]",default))
+ end
+ write(format(" "))
+ flush()
+ local answer=read()
+ answer=gsub(answer,"^%s*(.*)%s*$","%1")
+ if answer=="" and default then
+ return default
+ elseif not options then
+ return answer
+ else
+ for k=1,#options do
+ if options[k]==answer then
+ return answer
+ end
+ end
+ local pattern="^"..answer
+ for k=1,#options do
+ local v=options[k]
+ if find(v,pattern) then
+ return v
+ end
+ end
+ end
+ end
+end
+local function readnumber(f,n,m)
+ if m then
+ f:seek("set",n)
+ n=m
+ end
+ if n==1 then
+ return byte(f:read(1))
+ elseif n==2 then
+ local a,b=byte(f:read(2),1,2)
+ return 0x100*a+b
+ elseif n==3 then
+ local a,b,c=byte(f:read(3),1,3)
+ return 0x10000*a+0x100*b+c
+ elseif n==4 then
+ local a,b,c,d=byte(f:read(4),1,4)
+ return 0x1000000*a+0x10000*b+0x100*c+d
+ elseif n==8 then
+ local a,b=readnumber(f,4),readnumber(f,4)
+ return 0x100*a+b
+ elseif n==12 then
+ local a,b,c=readnumber(f,4),readnumber(f,4),readnumber(f,4)
+ return 0x10000*a+0x100*b+c
+ elseif n==-2 then
+ local b,a=byte(f:read(2),1,2)
+ return 0x100*a+b
+ elseif n==-3 then
+ local c,b,a=byte(f:read(3),1,3)
+ return 0x10000*a+0x100*b+c
+ elseif n==-4 then
+ local d,c,b,a=byte(f:read(4),1,4)
+ return 0x1000000*a+0x10000*b+0x100*c+d
+ elseif n==-8 then
+ local h,g,f,e,d,c,b,a=byte(f:read(8),1,8)
+ return 0x100000000000000*a+0x1000000000000*b+0x10000000000*c+0x100000000*d+0x1000000*e+0x10000*f+0x100*g+h
+ else
+ return 0
+ end
+end
+io.readnumber=readnumber
+function io.readstring(f,n,m)
+ if m then
+ f:seek("set",n)
+ n=m
+ end
+ local str=gsub(f:read(n),"\000","")
+ return str
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['l-file']={
+ version=1.001,
+ comment="companion to luat-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+file=file or {}
+local file=file
+if not lfs then
+ lfs=optionalrequire("lfs")
+end
+local insert,concat=table.insert,table.concat
+local match,find,gmatch=string.match,string.find,string.gmatch
+local lpegmatch=lpeg.match
+local getcurrentdir,attributes=lfs.currentdir,lfs.attributes
+local checkedsplit=string.checkedsplit
+local P,R,S,C,Cs,Cp,Cc,Ct=lpeg.P,lpeg.R,lpeg.S,lpeg.C,lpeg.Cs,lpeg.Cp,lpeg.Cc,lpeg.Ct
+local tricky=S("/\\")*P(-1)
+local attributes=lfs.attributes
+if sandbox then
+ sandbox.redefine(lfs.isfile,"lfs.isfile")
+ sandbox.redefine(lfs.isdir,"lfs.isdir")
+end
+function lfs.isdir(name)
+ if lpegmatch(tricky,name) then
+ return attributes(name,"mode")=="directory"
+ else
+ return attributes(name.."/.","mode")=="directory"
+ end
+end
+function lfs.isfile(name)
+ return attributes(name,"mode")=="file"
+end
+local colon=P(":")
+local period=P(".")
+local periods=P("..")
+local fwslash=P("/")
+local bwslash=P("\\")
+local slashes=S("\\/")
+local noperiod=1-period
+local noslashes=1-slashes
+local name=noperiod^1
+local suffix=period/""*(1-period-slashes)^1*-1
+local pattern=C((1-(slashes^1*noslashes^1*-1))^1)*P(1)
+local function pathpart(name,default)
+ return name and lpegmatch(pattern,name) or default or ""
+end
+local pattern=(noslashes^0*slashes)^1*C(noslashes^1)*-1
+local function basename(name)
+ return name and lpegmatch(pattern,name) or name
+end
+local pattern=(noslashes^0*slashes^1)^0*Cs((1-suffix)^1)*suffix^0
+local function nameonly(name)
+ return name and lpegmatch(pattern,name) or name
+end
+local pattern=(noslashes^0*slashes)^0*(noperiod^1*period)^1*C(noperiod^1)*-1
+local function suffixonly(name)
+ return name and lpegmatch(pattern,name) or ""
+end
+local pattern=(noslashes^0*slashes)^0*noperiod^1*((period*C(noperiod^1))^1)*-1+Cc("")
+local function suffixesonly(name)
+ if name then
+ return lpegmatch(pattern,name)
+ else
+ return ""
+ end
+end
+file.pathpart=pathpart
+file.basename=basename
+file.nameonly=nameonly
+file.suffixonly=suffixonly
+file.suffix=suffixonly
+file.suffixesonly=suffixesonly
+file.suffixes=suffixesonly
+file.dirname=pathpart
+file.extname=suffixonly
+local drive=C(R("az","AZ"))*colon
+local path=C((noslashes^0*slashes)^0)
+local suffix=period*C(P(1-period)^0*P(-1))
+local base=C((1-suffix)^0)
+local rest=C(P(1)^0)
+drive=drive+Cc("")
+path=path+Cc("")
+base=base+Cc("")
+suffix=suffix+Cc("")
+local pattern_a=drive*path*base*suffix
+local pattern_b=path*base*suffix
+local pattern_c=C(drive*path)*C(base*suffix)
+local pattern_d=path*rest
+function file.splitname(str,splitdrive)
+ if not str then
+ elseif splitdrive then
+ return lpegmatch(pattern_a,str)
+ else
+ return lpegmatch(pattern_b,str)
+ end
+end
+function file.splitbase(str)
+ if str then
+ return lpegmatch(pattern_d,str)
+ else
+ return "",str
+ end
+end
+function file.nametotable(str,splitdrive)
+ if str then
+ local path,drive,subpath,name,base,suffix=lpegmatch(pattern_c,str)
+ if splitdrive then
+ return {
+ path=path,
+ drive=drive,
+ subpath=subpath,
+ name=name,
+ base=base,
+ suffix=suffix,
+ }
+ else
+ return {
+ path=path,
+ name=name,
+ base=base,
+ suffix=suffix,
+ }
+ end
+ end
+end
+local pattern=Cs(((period*(1-period-slashes)^1*-1)/""+1)^1)
+function file.removesuffix(name)
+ return name and lpegmatch(pattern,name)
+end
+local suffix=period/""*(1-period-slashes)^1*-1
+local pattern=Cs((noslashes^0*slashes^1)^0*((1-suffix)^1))*Cs(suffix)
+function file.addsuffix(filename,suffix,criterium)
+ if not filename or not suffix or suffix=="" then
+ return filename
+ elseif criterium==true then
+ return filename.."."..suffix
+ elseif not criterium then
+ local n,s=lpegmatch(pattern,filename)
+ if not s or s=="" then
+ return filename.."."..suffix
+ else
+ return filename
+ end
+ else
+ local n,s=lpegmatch(pattern,filename)
+ if s and s~="" then
+ local t=type(criterium)
+ if t=="table" then
+ for i=1,#criterium do
+ if s==criterium[i] then
+ return filename
+ end
+ end
+ elseif t=="string" then
+ if s==criterium then
+ return filename
+ end
+ end
+ end
+ return (n or filename).."."..suffix
+ end
+end
+local suffix=period*(1-period-slashes)^1*-1
+local pattern=Cs((1-suffix)^0)
+function file.replacesuffix(name,suffix)
+ if name and suffix and suffix~="" then
+ return lpegmatch(pattern,name).."."..suffix
+ else
+ return name
+ end
+end
+local reslasher=lpeg.replacer(P("\\"),"/")
+function file.reslash(str)
+ return str and lpegmatch(reslasher,str)
+end
+function file.is_writable(name)
+ if not name then
+ elseif lfs.isdir(name) then
+ name=name.."/m_t_x_t_e_s_t.tmp"
+ local f=io.open(name,"wb")
+ if f then
+ f:close()
+ os.remove(name)
+ return true
+ end
+ elseif lfs.isfile(name) then
+ local f=io.open(name,"ab")
+ if f then
+ f:close()
+ return true
+ end
+ else
+ local f=io.open(name,"ab")
+ if f then
+ f:close()
+ os.remove(name)
+ return true
+ end
+ end
+ return false
+end
+local readable=P("r")*Cc(true)
+function file.is_readable(name)
+ if name then
+ local a=attributes(name)
+ return a and lpegmatch(readable,a.permissions) or false
+ else
+ return false
+ end
+end
+file.isreadable=file.is_readable
+file.iswritable=file.is_writable
+function file.size(name)
+ if name then
+ local a=attributes(name)
+ return a and a.size or 0
+ else
+ return 0
+ end
+end
+function file.splitpath(str,separator)
+ return str and checkedsplit(lpegmatch(reslasher,str),separator or io.pathseparator)
+end
+function file.joinpath(tab,separator)
+ return tab and concat(tab,separator or io.pathseparator)
+end
+local someslash=S("\\/")
+local stripper=Cs(P(fwslash)^0/""*reslasher)
+local isnetwork=someslash*someslash*(1-someslash)+(1-fwslash-colon)^1*colon
+local isroot=fwslash^1*-1
+local hasroot=fwslash^1
+local reslasher=lpeg.replacer(S("\\/"),"/")
+local deslasher=lpeg.replacer(S("\\/")^1,"/")
+function file.join(one,two,three,...)
+ if not two then
+ return one=="" and one or lpegmatch(reslasher,one)
+ end
+ if one=="" then
+ return lpegmatch(stripper,three and concat({ two,three,... },"/") or two)
+ end
+ if lpegmatch(isnetwork,one) then
+ local one=lpegmatch(reslasher,one)
+ local two=lpegmatch(deslasher,three and concat({ two,three,... },"/") or two)
+ if lpegmatch(hasroot,two) then
+ return one..two
+ else
+ return one.."/"..two
+ end
+ elseif lpegmatch(isroot,one) then
+ local two=lpegmatch(deslasher,three and concat({ two,three,... },"/") or two)
+ if lpegmatch(hasroot,two) then
+ return two
+ else
+ return "/"..two
+ end
+ else
+ return lpegmatch(deslasher,concat({ one,two,three,... },"/"))
+ end
+end
+local drivespec=R("az","AZ")^1*colon
+local anchors=fwslash+drivespec
+local untouched=periods+(1-period)^1*P(-1)
+local mswindrive=Cs(drivespec*(bwslash/"/"+fwslash)^0)
+local mswinuncpath=(bwslash+fwslash)*(bwslash+fwslash)*Cc("//")
+local splitstarter=(mswindrive+mswinuncpath+Cc(false))*Ct(lpeg.splitat(S("/\\")^1))
+local absolute=fwslash
+function file.collapsepath(str,anchor)
+ if not str then
+ return
+ end
+ if anchor==true and not lpegmatch(anchors,str) then
+ str=getcurrentdir().."/"..str
+ end
+ if str=="" or str=="." then
+ return "."
+ elseif lpegmatch(untouched,str) then
+ return lpegmatch(reslasher,str)
+ end
+ local starter,oldelements=lpegmatch(splitstarter,str)
+ local newelements={}
+ local i=#oldelements
+ while i>0 do
+ local element=oldelements[i]
+ if element=='.' then
+ elseif element=='..' then
+ local n=i-1
+ while n>0 do
+ local element=oldelements[n]
+ if element~='..' and element~='.' then
+ oldelements[n]='.'
+ break
+ else
+ n=n-1
+ end
+ end
+ if n<1 then
+ insert(newelements,1,'..')
+ end
+ elseif element~="" then
+ insert(newelements,1,element)
+ end
+ i=i-1
+ end
+ if #newelements==0 then
+ return starter or "."
+ elseif starter then
+ return starter..concat(newelements,'/')
+ elseif lpegmatch(absolute,str) then
+ return "/"..concat(newelements,'/')
+ else
+ newelements=concat(newelements,'/')
+ if anchor=="." and find(str,"^%./") then
+ return "./"..newelements
+ else
+ return newelements
+ end
+ end
+end
+local validchars=R("az","09","AZ","--","..")
+local pattern_a=lpeg.replacer(1-validchars)
+local pattern_a=Cs((validchars+P(1)/"-")^1)
+local whatever=P("-")^0/""
+local pattern_b=Cs(whatever*(1-whatever*-1)^1)
+function file.robustname(str,strict)
+ if str then
+ str=lpegmatch(pattern_a,str) or str
+ if strict then
+ return lpegmatch(pattern_b,str) or str
+ else
+ return str
+ end
+ end
+end
+local loaddata=io.loaddata
+local savedata=io.savedata
+file.readdata=loaddata
+file.savedata=savedata
+function file.copy(oldname,newname)
+ if oldname and newname then
+ local data=loaddata(oldname)
+ if data and data~="" then
+ savedata(newname,data)
+ end
+ end
+end
+local letter=R("az","AZ")+S("_-+")
+local separator=P("://")
+local qualified=period^0*fwslash+letter*colon+letter^1*separator+letter^1*fwslash
+local rootbased=fwslash+letter*colon
+lpeg.patterns.qualified=qualified
+lpeg.patterns.rootbased=rootbased
+function file.is_qualified_path(filename)
+ return filename and lpegmatch(qualified,filename)~=nil
+end
+function file.is_rootbased_path(filename)
+ return filename and lpegmatch(rootbased,filename)~=nil
+end
+function file.strip(name,dir)
+ if name then
+ local b,a=match(name,"^(.-)"..dir.."(.*)$")
+ return a~="" and a or name
+ end
+end
+function lfs.mkdirs(path)
+ local full=""
+ for sub in gmatch(path,"(/*[^\\/]+)") do
+ full=full..sub
+ lfs.mkdir(full)
+ end
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['l-boolean']={
+ version=1.001,
+ comment="companion to luat-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local type,tonumber=type,tonumber
+boolean=boolean or {}
+local boolean=boolean
+function boolean.tonumber(b)
+ if b then return 1 else return 0 end
+end
+function toboolean(str,tolerant)
+ if str==nil then
+ return false
+ elseif str==false then
+ return false
+ elseif str==true then
+ return true
+ elseif str=="true" then
+ return true
+ elseif str=="false" then
+ return false
+ elseif not tolerant then
+ return false
+ elseif str==0 then
+ return false
+ elseif (tonumber(str) or 0)>0 then
+ return true
+ else
+ return str=="yes" or str=="on" or str=="t"
+ end
+end
+string.toboolean=toboolean
+function string.booleanstring(str)
+ if str=="0" then
+ return false
+ elseif str=="1" then
+ return true
+ elseif str=="" then
+ return false
+ elseif str=="false" then
+ return false
+ elseif str=="true" then
+ return true
+ elseif (tonumber(str) or 0)>0 then
+ return true
+ else
+ return str=="yes" or str=="on" or str=="t"
+ end
+end
+function string.is_boolean(str,default,strict)
+ if type(str)=="string" then
+ if str=="true" or str=="yes" or str=="on" or str=="t" or (not strict and str=="1") then
+ return true
+ elseif str=="false" or str=="no" or str=="off" or str=="f" or (not strict and str=="0") then
+ return false
+ end
+ end
+ return default
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['l-math']={
+ version=1.001,
+ comment="companion to luat-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local floor,sin,cos,tan=math.floor,math.sin,math.cos,math.tan
+if not math.ceiling then
+ math.ceiling=math.ceil
+end
+if not math.round then
+ function math.round(x) return floor(x+0.5) end
+end
+if not math.div then
+ function math.div(n,m) return floor(n/m) end
+end
+if not math.mod then
+ function math.mod(n,m) return n%m end
+end
+local pipi=2*math.pi/360
+if not math.sind then
+ function math.sind(d) return sin(d*pipi) end
+ function math.cosd(d) return cos(d*pipi) end
+ function math.tand(d) return tan(d*pipi) end
+end
+if not math.odd then
+ function math.odd (n) return n%2~=0 end
+ function math.even(n) return n%2==0 end
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['l-unicode']={
+ version=1.001,
+ comment="companion to luat-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+utf=utf or (unicode and unicode.utf8) or {}
+utf.characters=utf.characters or string.utfcharacters
+utf.values=utf.values or string.utfvalues
+local type=type
+local char,byte,format,sub,gmatch=string.char,string.byte,string.format,string.sub,string.gmatch
+local concat=table.concat
+local P,C,R,Cs,Ct,Cmt,Cc,Carg,Cp=lpeg.P,lpeg.C,lpeg.R,lpeg.Cs,lpeg.Ct,lpeg.Cmt,lpeg.Cc,lpeg.Carg,lpeg.Cp
+local lpegmatch=lpeg.match
+local patterns=lpeg.patterns
+local tabletopattern=lpeg.utfchartabletopattern
+local bytepairs=string.bytepairs
+local finder=lpeg.finder
+local replacer=lpeg.replacer
+local utfvalues=utf.values
+local utfgmatch=utf.gmatch
+local p_utftype=patterns.utftype
+local p_utfstricttype=patterns.utfstricttype
+local p_utfoffset=patterns.utfoffset
+local p_utf8char=patterns.utf8character
+local p_utf8byte=patterns.utf8byte
+local p_utfbom=patterns.utfbom
+local p_newline=patterns.newline
+local p_whitespace=patterns.whitespace
+if not unicode then
+ unicode={ utf=utf }
+end
+if not utf.char then
+ local floor,char=math.floor,string.char
+ function utf.char(n)
+ if n<0x80 then
+ return char(n)
+ elseif n<0x800 then
+ return char(
+ 0xC0+floor(n/0x40),
+ 0x80+(n%0x40)
+ )
+ elseif n<0x10000 then
+ return char(
+ 0xE0+floor(n/0x1000),
+ 0x80+(floor(n/0x40)%0x40),
+ 0x80+(n%0x40)
+ )
+ elseif n<0x200000 then
+ return char(
+ 0xF0+floor(n/0x40000),
+ 0x80+(floor(n/0x1000)%0x40),
+ 0x80+(floor(n/0x40)%0x40),
+ 0x80+(n%0x40)
+ )
+ else
+ return ""
+ end
+ end
+end
+if not utf.byte then
+ local utf8byte=patterns.utf8byte
+ function utf.byte(c)
+ return lpegmatch(utf8byte,c)
+ end
+end
+local utfchar,utfbyte=utf.char,utf.byte
+function utf.filetype(data)
+ return data and lpegmatch(p_utftype,data) or "unknown"
+end
+local toentities=Cs (
+ (
+ patterns.utf8one+(
+ patterns.utf8two+patterns.utf8three+patterns.utf8four
+ )/function(s) local b=utfbyte(s) if b<127 then return s else return format("&#%X;",b) end end
+ )^0
+)
+patterns.toentities=toentities
+function utf.toentities(str)
+ return lpegmatch(toentities,str)
+end
+local one=P(1)
+local two=C(1)*C(1)
+local four=C(R(utfchar(0xD8),utfchar(0xFF)))*C(1)*C(1)*C(1)
+local pattern=P("\254\255")*Cs((
+ four/function(a,b,c,d)
+ local ab=0xFF*byte(a)+byte(b)
+ local cd=0xFF*byte(c)+byte(d)
+ return utfchar((ab-0xD800)*0x400+(cd-0xDC00)+0x10000)
+ end+two/function(a,b)
+ return utfchar(byte(a)*256+byte(b))
+ end+one
+ )^1 )+P("\255\254")*Cs((
+ four/function(b,a,d,c)
+ local ab=0xFF*byte(a)+byte(b)
+ local cd=0xFF*byte(c)+byte(d)
+ return utfchar((ab-0xD800)*0x400+(cd-0xDC00)+0x10000)
+ end+two/function(b,a)
+ return utfchar(byte(a)*256+byte(b))
+ end+one
+ )^1 )
+function string.toutf(s)
+ return lpegmatch(pattern,s) or s
+end
+local validatedutf=Cs (
+ (
+ patterns.utf8one+patterns.utf8two+patterns.utf8three+patterns.utf8four+P(1)/"�"
+ )^0
+)
+patterns.validatedutf=validatedutf
+function utf.is_valid(str)
+ return type(str)=="string" and lpegmatch(validatedutf,str) or false
+end
+if not utf.len then
+ local n,f=0,1
+ local utfcharcounter=patterns.utfbom^-1*Cmt (
+ Cc(1)*patterns.utf8one^1+Cc(2)*patterns.utf8two^1+Cc(3)*patterns.utf8three^1+Cc(4)*patterns.utf8four^1,
+ function(_,t,d)
+ n=n+(t-f)/d
+ f=t
+ return true
+ end
+ )^0
+ function utf.len(str)
+ n,f=0,1
+ lpegmatch(utfcharcounter,str or "")
+ return n
+ end
+end
+utf.length=utf.len
+if not utf.sub then
+ local utflength=utf.length
+ local b,e,n,first,last=0,0,0,0,0
+ local function slide_zero(s,p)
+ n=n+1
+ if n>=last then
+ e=p-1
+ else
+ return p
+ end
+ end
+ local function slide_one(s,p)
+ n=n+1
+ if n==first then
+ b=p
+ end
+ if n>=last then
+ e=p-1
+ else
+ return p
+ end
+ end
+ local function slide_two(s,p)
+ n=n+1
+ if n==first then
+ b=p
+ else
+ return true
+ end
+ end
+ local pattern_zero=Cmt(p_utf8char,slide_zero)^0
+ local pattern_one=Cmt(p_utf8char,slide_one )^0
+ local pattern_two=Cmt(p_utf8char,slide_two )^0
+ local pattern_first=C(patterns.utf8character)
+ function utf.sub(str,start,stop)
+ if not start then
+ return str
+ end
+ if start==0 then
+ start=1
+ end
+ if not stop then
+ if start<0 then
+ local l=utflength(str)
+ start=l+start
+ else
+ start=start-1
+ end
+ b,n,first=0,0,start
+ lpegmatch(pattern_two,str)
+ if n>=first then
+ return sub(str,b)
+ else
+ return ""
+ end
+ end
+ if start<0 or stop<0 then
+ local l=utf.length(str)
+ if start<0 then
+ start=l+start
+ if start<=0 then
+ start=1
+ else
+ start=start+1
+ end
+ end
+ if stop<0 then
+ stop=l+stop
+ if stop==0 then
+ stop=1
+ else
+ stop=stop+1
+ end
+ end
+ end
+ if start==1 and stop==1 then
+ return lpegmatch(pattern_first,str) or ""
+ elseif start>stop then
+ return ""
+ elseif start>1 then
+ b,e,n,first,last=0,0,0,start-1,stop
+ lpegmatch(pattern_one,str)
+ if n>=first and e==0 then
+ e=#str
+ end
+ return sub(str,b,e)
+ else
+ b,e,n,last=1,0,0,stop
+ lpegmatch(pattern_zero,str)
+ if e==0 then
+ e=#str
+ end
+ return sub(str,b,e)
+ end
+ end
+end
+function utf.remapper(mapping,option,action)
+ local variant=type(mapping)
+ if variant=="table" then
+ action=action or mapping
+ if option=="dynamic" then
+ local pattern=false
+ table.setmetatablenewindex(mapping,function(t,k,v) rawset(t,k,v) pattern=false end)
+ return function(str)
+ if not str or str=="" then
+ return ""
+ else
+ if not pattern then
+ pattern=Cs((tabletopattern(mapping)/action+p_utf8char)^0)
+ end
+ return lpegmatch(pattern,str)
+ end
+ end
+ elseif option=="pattern" then
+ return Cs((tabletopattern(mapping)/action+p_utf8char)^0)
+ else
+ local pattern=Cs((tabletopattern(mapping)/action+p_utf8char)^0)
+ return function(str)
+ if not str or str=="" then
+ return ""
+ else
+ return lpegmatch(pattern,str)
+ end
+ end,pattern
+ end
+ elseif variant=="function" then
+ if option=="pattern" then
+ return Cs((p_utf8char/mapping+p_utf8char)^0)
+ else
+ local pattern=Cs((p_utf8char/mapping+p_utf8char)^0)
+ return function(str)
+ if not str or str=="" then
+ return ""
+ else
+ return lpegmatch(pattern,str)
+ end
+ end,pattern
+ end
+ else
+ return function(str)
+ return str or ""
+ end
+ end
+end
+function utf.replacer(t)
+ local r=replacer(t,false,false,true)
+ return function(str)
+ return lpegmatch(r,str)
+ end
+end
+function utf.subtituter(t)
+ local f=finder (t)
+ local r=replacer(t,false,false,true)
+ return function(str)
+ local i=lpegmatch(f,str)
+ if not i then
+ return str
+ elseif i>#str then
+ return str
+ else
+ return lpegmatch(r,str)
+ end
+ end
+end
+local utflinesplitter=p_utfbom^-1*lpeg.tsplitat(p_newline)
+local utfcharsplitter_ows=p_utfbom^-1*Ct(C(p_utf8char)^0)
+local utfcharsplitter_iws=p_utfbom^-1*Ct((p_whitespace^1+C(p_utf8char))^0)
+local utfcharsplitter_raw=Ct(C(p_utf8char)^0)
+patterns.utflinesplitter=utflinesplitter
+function utf.splitlines(str)
+ return lpegmatch(utflinesplitter,str or "")
+end
+function utf.split(str,ignorewhitespace)
+ if ignorewhitespace then
+ return lpegmatch(utfcharsplitter_iws,str or "")
+ else
+ return lpegmatch(utfcharsplitter_ows,str or "")
+ end
+end
+function utf.totable(str)
+ return lpegmatch(utfcharsplitter_raw,str)
+end
+function utf.magic(f)
+ local str=f:read(4) or ""
+ local off=lpegmatch(p_utfoffset,str)
+ if off<4 then
+ f:seek('set',off)
+ end
+ return lpegmatch(p_utftype,str)
+end
+local utf16_to_utf8_be,utf16_to_utf8_le
+local utf32_to_utf8_be,utf32_to_utf8_le
+local utf_16_be_getbom=patterns.utfbom_16_be^-1
+local utf_16_le_getbom=patterns.utfbom_16_le^-1
+local utf_32_be_getbom=patterns.utfbom_32_be^-1
+local utf_32_le_getbom=patterns.utfbom_32_le^-1
+local utf_16_be_linesplitter=utf_16_be_getbom*lpeg.tsplitat(patterns.utf_16_be_nl)
+local utf_16_le_linesplitter=utf_16_le_getbom*lpeg.tsplitat(patterns.utf_16_le_nl)
+local utf_32_be_linesplitter=utf_32_be_getbom*lpeg.tsplitat(patterns.utf_32_be_nl)
+local utf_32_le_linesplitter=utf_32_le_getbom*lpeg.tsplitat(patterns.utf_32_le_nl)
+local more=0
+local p_utf16_to_utf8_be=C(1)*C(1)/function(left,right)
+ local now=256*byte(left)+byte(right)
+ if more>0 then
+ now=(more-0xD800)*0x400+(now-0xDC00)+0x10000
+ more=0
+ return utfchar(now)
+ elseif now>=0xD800 and now<=0xDBFF then
+ more=now
+ return ""
+ else
+ return utfchar(now)
+ end
+end
+local p_utf16_to_utf8_le=C(1)*C(1)/function(right,left)
+ local now=256*byte(left)+byte(right)
+ if more>0 then
+ now=(more-0xD800)*0x400+(now-0xDC00)+0x10000
+ more=0
+ return utfchar(now)
+ elseif now>=0xD800 and now<=0xDBFF then
+ more=now
+ return ""
+ else
+ return utfchar(now)
+ end
+end
+local p_utf32_to_utf8_be=C(1)*C(1)*C(1)*C(1)/function(a,b,c,d)
+ return utfchar(256*256*256*byte(a)+256*256*byte(b)+256*byte(c)+byte(d))
+end
+local p_utf32_to_utf8_le=C(1)*C(1)*C(1)*C(1)/function(a,b,c,d)
+ return utfchar(256*256*256*byte(d)+256*256*byte(c)+256*byte(b)+byte(a))
+end
+p_utf16_to_utf8_be=P(true)/function() more=0 end*utf_16_be_getbom*Cs(p_utf16_to_utf8_be^0)
+p_utf16_to_utf8_le=P(true)/function() more=0 end*utf_16_le_getbom*Cs(p_utf16_to_utf8_le^0)
+p_utf32_to_utf8_be=P(true)/function() more=0 end*utf_32_be_getbom*Cs(p_utf32_to_utf8_be^0)
+p_utf32_to_utf8_le=P(true)/function() more=0 end*utf_32_le_getbom*Cs(p_utf32_to_utf8_le^0)
+patterns.utf16_to_utf8_be=p_utf16_to_utf8_be
+patterns.utf16_to_utf8_le=p_utf16_to_utf8_le
+patterns.utf32_to_utf8_be=p_utf32_to_utf8_be
+patterns.utf32_to_utf8_le=p_utf32_to_utf8_le
+utf16_to_utf8_be=function(s)
+ if s and s~="" then
+ return lpegmatch(p_utf16_to_utf8_be,s)
+ else
+ return s
+ end
+end
+local utf16_to_utf8_be_t=function(t)
+ if not t then
+ return nil
+ elseif type(t)=="string" then
+ t=lpegmatch(utf_16_be_linesplitter,t)
+ end
+ for i=1,#t do
+ local s=t[i]
+ if s~="" then
+ t[i]=lpegmatch(p_utf16_to_utf8_be,s)
+ end
+ end
+ return t
+end
+utf16_to_utf8_le=function(s)
+ if s and s~="" then
+ return lpegmatch(p_utf16_to_utf8_le,s)
+ else
+ return s
+ end
+end
+local utf16_to_utf8_le_t=function(t)
+ if not t then
+ return nil
+ elseif type(t)=="string" then
+ t=lpegmatch(utf_16_le_linesplitter,t)
+ end
+ for i=1,#t do
+ local s=t[i]
+ if s~="" then
+ t[i]=lpegmatch(p_utf16_to_utf8_le,s)
+ end
+ end
+ return t
+end
+utf32_to_utf8_be=function(s)
+ if s and s~="" then
+ return lpegmatch(p_utf32_to_utf8_be,s)
+ else
+ return s
+ end
+end
+local utf32_to_utf8_be_t=function(t)
+ if not t then
+ return nil
+ elseif type(t)=="string" then
+ t=lpegmatch(utf_32_be_linesplitter,t)
+ end
+ for i=1,#t do
+ local s=t[i]
+ if s~="" then
+ t[i]=lpegmatch(p_utf32_to_utf8_be,s)
+ end
+ end
+ return t
+end
+utf32_to_utf8_le=function(s)
+ if s and s~="" then
+ return lpegmatch(p_utf32_to_utf8_le,s)
+ else
+ return s
+ end
+end
+local utf32_to_utf8_le_t=function(t)
+ if not t then
+ return nil
+ elseif type(t)=="string" then
+ t=lpegmatch(utf_32_le_linesplitter,t)
+ end
+ for i=1,#t do
+ local s=t[i]
+ if s~="" then
+ t[i]=lpegmatch(p_utf32_to_utf8_le,s)
+ end
+ end
+ return t
+end
+utf.utf16_to_utf8_le_t=utf16_to_utf8_le_t
+utf.utf16_to_utf8_be_t=utf16_to_utf8_be_t
+utf.utf32_to_utf8_le_t=utf32_to_utf8_le_t
+utf.utf32_to_utf8_be_t=utf32_to_utf8_be_t
+utf.utf16_to_utf8_le=utf16_to_utf8_le
+utf.utf16_to_utf8_be=utf16_to_utf8_be
+utf.utf32_to_utf8_le=utf32_to_utf8_le
+utf.utf32_to_utf8_be=utf32_to_utf8_be
+function utf.utf8_to_utf8_t(t)
+ return type(t)=="string" and lpegmatch(utflinesplitter,t) or t
+end
+function utf.utf16_to_utf8_t(t,endian)
+ return endian and utf16_to_utf8_be_t(t) or utf16_to_utf8_le_t(t) or t
+end
+function utf.utf32_to_utf8_t(t,endian)
+ return endian and utf32_to_utf8_be_t(t) or utf32_to_utf8_le_t(t) or t
+end
+local function little(b)
+ if b<0x10000 then
+ return char(b%256,b/256)
+ else
+ b=b-0x10000
+ local b1,b2=b/1024+0xD800,b%1024+0xDC00
+ return char(b1%256,b1/256,b2%256,b2/256)
+ end
+end
+local function big(b)
+ if b<0x10000 then
+ return char(b/256,b%256)
+ else
+ b=b-0x10000
+ local b1,b2=b/1024+0xD800,b%1024+0xDC00
+ return char(b1/256,b1%256,b2/256,b2%256)
+ end
+end
+local l_remap=Cs((p_utf8byte/little+P(1)/"")^0)
+local b_remap=Cs((p_utf8byte/big+P(1)/"")^0)
+local function utf8_to_utf16_be(str,nobom)
+ if nobom then
+ return lpegmatch(b_remap,str)
+ else
+ return char(254,255)..lpegmatch(b_remap,str)
+ end
+end
+local function utf8_to_utf16_le(str,nobom)
+ if nobom then
+ return lpegmatch(l_remap,str)
+ else
+ return char(255,254)..lpegmatch(l_remap,str)
+ end
+end
+utf.utf8_to_utf16_be=utf8_to_utf16_be
+utf.utf8_to_utf16_le=utf8_to_utf16_le
+function utf.utf8_to_utf16(str,littleendian,nobom)
+ if littleendian then
+ return utf8_to_utf16_le(str,nobom)
+ else
+ return utf8_to_utf16_be(str,nobom)
+ end
+end
+local pattern=Cs (
+ (p_utf8byte/function(unicode ) return format("0x%04X",unicode) end)*(p_utf8byte*Carg(1)/function(unicode,separator) return format("%s0x%04X",separator,unicode) end)^0
+)
+function utf.tocodes(str,separator)
+ return lpegmatch(pattern,str,1,separator or " ")
+end
+function utf.ustring(s)
+ return format("U+%05X",type(s)=="number" and s or utfbyte(s))
+end
+function utf.xstring(s)
+ return format("0x%05X",type(s)=="number" and s or utfbyte(s))
+end
+function utf.toeight(str)
+ if not str or str=="" then
+ return nil
+ end
+ local utftype=lpegmatch(p_utfstricttype,str)
+ if utftype=="utf-8" then
+ return sub(str,4)
+ elseif utftype=="utf-16-be" then
+ return utf16_to_utf8_be(str)
+ elseif utftype=="utf-16-le" then
+ return utf16_to_utf8_le(str)
+ else
+ return str
+ end
+end
+local p_nany=p_utf8char/""
+if utfgmatch then
+ function utf.count(str,what)
+ if type(what)=="string" then
+ local n=0
+ for _ in utfgmatch(str,what) do
+ n=n+1
+ end
+ return n
+ else
+ return #lpegmatch(Cs((P(what)/" "+p_nany)^0),str)
+ end
+ end
+else
+ local cache={}
+ function utf.count(str,what)
+ if type(what)=="string" then
+ local p=cache[what]
+ if not p then
+ p=Cs((P(what)/" "+p_nany)^0)
+ cache[p]=p
+ end
+ return #lpegmatch(p,str)
+ else
+ return #lpegmatch(Cs((P(what)/" "+p_nany)^0),str)
+ end
+ end
+end
+if not utf.characters then
+ function utf.characters(str)
+ return gmatch(str,".[\128-\191]*")
+ end
+ string.utfcharacters=utf.characters
+end
+if not utf.values then
+ local find=string.find
+ local dummy=function()
+ end
+ function utf.values(str)
+ local n=#str
+ if n==0 then
+ return dummy
+ elseif n==1 then
+ return function() return utfbyte(str) end
+ else
+ local p=1
+ return function()
+ local b,e=find(str,".[\128-\191]*",p)
+ if b then
+ p=e+1
+ return utfbyte(sub(str,b,e))
+ end
+ end
+ end
+ end
+ string.utfvalues=utf.values
+end
+function utf.chrlen(u)
+ return
+ (u<0x80 and 1) or
+ (u<0xE0 and 2) or
+ (u<0xF0 and 3) or
+ (u<0xF8 and 4) or
+ (u<0xFC and 5) or
+ (u<0xFE and 6) or 0
+end
+local extract=bit32.extract
+local char=string.char
+function unicode.toutf32string(n)
+ if n<=0xFF then
+ return
+ char(n).."\000\000\000"
+ elseif n<=0xFFFF then
+ return
+ char(extract(n,0,8))..char(extract(n,8,8)).."\000\000"
+ elseif n<=0xFFFFFF then
+ return
+ char(extract(n,0,8))..char(extract(n,8,8))..char(extract(n,16,8)).."\000"
+ else
+ return
+ char(extract(n,0,8))..char(extract(n,8,8))..char(extract(n,16,8))..char(extract(n,24,8))
+ end
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['util-str']={
+ version=1.001,
+ comment="companion to luat-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+utilities=utilities or {}
+utilities.strings=utilities.strings or {}
+local strings=utilities.strings
+local format,gsub,rep,sub,find=string.format,string.gsub,string.rep,string.sub,string.find
+local load,dump=load,string.dump
+local tonumber,type,tostring=tonumber,type,tostring
+local unpack,concat=table.unpack,table.concat
+local P,V,C,S,R,Ct,Cs,Cp,Carg,Cc=lpeg.P,lpeg.V,lpeg.C,lpeg.S,lpeg.R,lpeg.Ct,lpeg.Cs,lpeg.Cp,lpeg.Carg,lpeg.Cc
+local patterns,lpegmatch=lpeg.patterns,lpeg.match
+local utfchar,utfbyte=utf.char,utf.byte
+local loadstripped=nil
+if _LUAVERSION<5.2 then
+ loadstripped=function(str,shortcuts)
+ return load(str)
+ end
+else
+ loadstripped=function(str,shortcuts)
+ if shortcuts then
+ return load(dump(load(str),true),nil,nil,shortcuts)
+ else
+ return load(dump(load(str),true))
+ end
+ end
+end
+if not number then number={} end
+local stripper=patterns.stripzeros
+local newline=patterns.newline
+local endofstring=patterns.endofstring
+local whitespace=patterns.whitespace
+local spacer=patterns.spacer
+local spaceortab=patterns.spaceortab
+local function points(n)
+ n=tonumber(n)
+ return (not n or n==0) and "0pt" or lpegmatch(stripper,format("%.5fpt",n/65536))
+end
+local function basepoints(n)
+ n=tonumber(n)
+ return (not n or n==0) and "0bp" or lpegmatch(stripper,format("%.5fbp",n*(7200/7227)/65536))
+end
+number.points=points
+number.basepoints=basepoints
+local rubish=spaceortab^0*newline
+local anyrubish=spaceortab+newline
+local anything=patterns.anything
+local stripped=(spaceortab^1/"")*newline
+local leading=rubish^0/""
+local trailing=(anyrubish^1*endofstring)/""
+local redundant=rubish^3/"\n"
+local pattern=Cs(leading*(trailing+redundant+stripped+anything)^0)
+function strings.collapsecrlf(str)
+ return lpegmatch(pattern,str)
+end
+local repeaters={}
+function strings.newrepeater(str,offset)
+ offset=offset or 0
+ local s=repeaters[str]
+ if not s then
+ s={}
+ repeaters[str]=s
+ end
+ local t=s[offset]
+ if t then
+ return t
+ end
+ t={}
+ setmetatable(t,{ __index=function(t,k)
+ if not k then
+ return ""
+ end
+ local n=k+offset
+ local s=n>0 and rep(str,n) or ""
+ t[k]=s
+ return s
+ end })
+ s[offset]=t
+ return t
+end
+local extra,tab,start=0,0,4,0
+local nspaces=strings.newrepeater(" ")
+string.nspaces=nspaces
+local pattern=Carg(1)/function(t)
+ extra,tab,start=0,t or 7,1
+ end*Cs((
+ Cp()*patterns.tab/function(position)
+ local current=(position-start+1)+extra
+ local spaces=tab-(current-1)%tab
+ if spaces>0 then
+ extra=extra+spaces-1
+ return nspaces[spaces]
+ else
+ return ""
+ end
+ end+newline*Cp()/function(position)
+ extra,start=0,position
+ end+patterns.anything
+ )^1)
+function strings.tabtospace(str,tab)
+ return lpegmatch(pattern,str,1,tab or 7)
+end
+local space=spacer^0
+local nospace=space/""
+local endofline=nospace*newline
+local stripend=(whitespace^1*endofstring)/""
+local normalline=(nospace*((1-space*(newline+endofstring))^1)*nospace)
+local stripempty=endofline^1/""
+local normalempty=endofline^1
+local singleempty=endofline*(endofline^0/"")
+local doubleempty=endofline*endofline^-1*(endofline^0/"")
+local stripstart=stripempty^0
+local p_prune_normal=Cs (stripstart*(stripend+normalline+normalempty )^0 )
+local p_prune_collapse=Cs (stripstart*(stripend+normalline+doubleempty )^0 )
+local p_prune_noempty=Cs (stripstart*(stripend+normalline+singleempty )^0 )
+local p_retain_normal=Cs ((normalline+normalempty )^0 )
+local p_retain_collapse=Cs ((normalline+doubleempty )^0 )
+local p_retain_noempty=Cs ((normalline+singleempty )^0 )
+local striplinepatterns={
+ ["prune"]=p_prune_normal,
+ ["prune and collapse"]=p_prune_collapse,
+ ["prune and no empty"]=p_prune_noempty,
+ ["retain"]=p_retain_normal,
+ ["retain and collapse"]=p_retain_collapse,
+ ["retain and no empty"]=p_retain_noempty,
+ ["collapse"]=patterns.collapser,
+}
+setmetatable(striplinepatterns,{ __index=function(t,k) return p_prune_collapse end })
+strings.striplinepatterns=striplinepatterns
+function strings.striplines(str,how)
+ return str and lpegmatch(striplinepatterns[how],str) or str
+end
+strings.striplong=strings.striplines
+function strings.nice(str)
+ str=gsub(str,"[:%-+_]+"," ")
+ return str
+end
+local n=0
+local sequenced=table.sequenced
+function string.autodouble(s,sep)
+ if s==nil then
+ return '""'
+ end
+ local t=type(s)
+ if t=="number" then
+ return tostring(s)
+ end
+ if t=="table" then
+ return ('"'..sequenced(s,sep or ",")..'"')
+ end
+ return ('"'..tostring(s)..'"')
+end
+function string.autosingle(s,sep)
+ if s==nil then
+ return "''"
+ end
+ local t=type(s)
+ if t=="number" then
+ return tostring(s)
+ end
+ if t=="table" then
+ return ("'"..sequenced(s,sep or ",").."'")
+ end
+ return ("'"..tostring(s).."'")
+end
+local tracedchars={ [0]=
+ "[null]","[soh]","[stx]","[etx]","[eot]","[enq]","[ack]","[bel]",
+ "[bs]","[ht]","[lf]","[vt]","[ff]","[cr]","[so]","[si]",
+ "[dle]","[dc1]","[dc2]","[dc3]","[dc4]","[nak]","[syn]","[etb]",
+ "[can]","[em]","[sub]","[esc]","[fs]","[gs]","[rs]","[us]",
+ "[space]",
+}
+string.tracedchars=tracedchars
+strings.tracers=tracedchars
+function string.tracedchar(b)
+ if type(b)=="number" then
+ return tracedchars[b] or (utfchar(b).." (U+"..format("%05X",b)..")")
+ else
+ local c=utfbyte(b)
+ return tracedchars[c] or (b.." (U+"..(c and format("%05X",c) or "?????")..")")
+ end
+end
+function number.signed(i)
+ if i>0 then
+ return "+",i
+ else
+ return "-",-i
+ end
+end
+local digit=patterns.digit
+local period=patterns.period
+local three=digit*digit*digit
+local splitter=Cs (
+ (((1-(three^1*period))^1+C(three))*(Carg(1)*three)^1+C((1-period)^1))*(P(1)/""*Carg(2))*C(2)
+)
+patterns.formattednumber=splitter
+function number.formatted(n,sep1,sep2)
+ local s=type(s)=="string" and n or format("%0.2f",n)
+ if sep1==true then
+ return lpegmatch(splitter,s,1,".",",")
+ elseif sep1=="." then
+ return lpegmatch(splitter,s,1,sep1,sep2 or ",")
+ elseif sep1=="," then
+ return lpegmatch(splitter,s,1,sep1,sep2 or ".")
+ else
+ return lpegmatch(splitter,s,1,sep1 or ",",sep2 or ".")
+ end
+end
+local p=Cs(
+ P("-")^0*(P("0")^1/"")^0*(1-P("."))^0*(P(".")*P("0")^1*P(-1)/""+P(".")^0)*P(1-P("0")^1*P(-1))^0
+ )
+function number.compactfloat(n,fmt)
+ if n==0 then
+ return "0"
+ elseif n==1 then
+ return "1"
+ end
+ n=lpegmatch(p,format(fmt or "%0.3f",n))
+ if n=="." or n=="" or n=="-" then
+ return "0"
+ end
+ return n
+end
+local zero=P("0")^1/""
+local plus=P("+")/""
+local minus=P("-")
+local separator=S(".")
+local digit=R("09")
+local trailing=zero^1*#S("eE")
+local exponent=(S("eE")*(plus+Cs((minus*zero^0*P(-1))/"")+minus)*zero^0*(P(-1)*Cc("0")+P(1)^1))
+local pattern_a=Cs(minus^0*digit^1*(separator/""*trailing+separator*(trailing+digit)^0)*exponent)
+local pattern_b=Cs((exponent+P(1))^0)
+function number.sparseexponent(f,n)
+ if not n then
+ n=f
+ f="%e"
+ end
+ local tn=type(n)
+ if tn=="string" then
+ local m=tonumber(n)
+ if m then
+ return lpegmatch((f=="%e" or f=="%E") and pattern_a or pattern_b,format(f,m))
+ end
+ elseif tn=="number" then
+ return lpegmatch((f=="%e" or f=="%E") and pattern_a or pattern_b,format(f,n))
+ end
+ return tostring(n)
+end
+local hf={}
+local hs={}
+setmetatable(hf,{ __index=function(t,k)
+ local v="%."..k.."f"
+ t[k]=v
+ return v
+end } )
+setmetatable(hs,{ __index=function(t,k)
+ local v="%"..k.."s"
+ t[k]=v
+ return v
+end } )
+function number.formattedfloat(n,b,a)
+ local s=format(hf[a],n)
+ local l=(b or 0)+(a or 0)+1
+ if #s<l then
+ return format(hs[l],s)
+ else
+ return s
+ end
+end
+local template=[[
+%s
+%s
+return function(%s) return %s end
+]]
+local preamble,environment="",{}
+if _LUAVERSION<5.2 then
+ preamble=[[
+local lpeg=lpeg
+local type=type
+local tostring=tostring
+local tonumber=tonumber
+local format=string.format
+local concat=table.concat
+local signed=number.signed
+local points=number.points
+local basepoints= number.basepoints
+local utfchar=utf.char
+local utfbyte=utf.byte
+local lpegmatch=lpeg.match
+local nspaces=string.nspaces
+local tracedchar=string.tracedchar
+local autosingle=string.autosingle
+local autodouble=string.autodouble
+local sequenced=table.sequenced
+local formattednumber=number.formatted
+local sparseexponent=number.sparseexponent
+local formattedfloat=number.formattedfloat
+ ]]
+else
+ environment={
+ global=global or _G,
+ lpeg=lpeg,
+ type=type,
+ tostring=tostring,
+ tonumber=tonumber,
+ format=string.format,
+ concat=table.concat,
+ signed=number.signed,
+ points=number.points,
+ basepoints=number.basepoints,
+ utfchar=utf.char,
+ utfbyte=utf.byte,
+ lpegmatch=lpeg.match,
+ nspaces=string.nspaces,
+ tracedchar=string.tracedchar,
+ autosingle=string.autosingle,
+ autodouble=string.autodouble,
+ sequenced=table.sequenced,
+ formattednumber=number.formatted,
+ sparseexponent=number.sparseexponent,
+ formattedfloat=number.formattedfloat
+ }
+end
+local arguments={ "a1" }
+setmetatable(arguments,{ __index=function(t,k)
+ local v=t[k-1]..",a"..k
+ t[k]=v
+ return v
+ end
+})
+local prefix_any=C((S("+- .")+R("09"))^0)
+local prefix_sub=(C((S("+-")+R("09"))^0)+Cc(0))*P(".")*(C((S("+-")+R("09"))^0)+Cc(0))
+local prefix_tab=P("{")*C((1-P("}"))^0)*P("}")+C((1-R("az","AZ","09","%%"))^0)
+local format_s=function(f)
+ n=n+1
+ if f and f~="" then
+ return format("format('%%%ss',a%s)",f,n)
+ else
+ return format("(a%s or '')",n)
+ end
+end
+local format_S=function(f)
+ n=n+1
+ if f and f~="" then
+ return format("format('%%%ss',tostring(a%s))",f,n)
+ else
+ return format("tostring(a%s)",n)
+ end
+end
+local format_q=function()
+ n=n+1
+ return format("(a%s and format('%%q',a%s) or '')",n,n)
+end
+local format_Q=function()
+ n=n+1
+ return format("format('%%q',tostring(a%s))",n)
+end
+local format_i=function(f)
+ n=n+1
+ if f and f~="" then
+ return format("format('%%%si',a%s)",f,n)
+ else
+ return format("format('%%i',a%s)",n)
+ end
+end
+local format_d=format_i
+local format_I=function(f)
+ n=n+1
+ return format("format('%%s%%%si',signed(a%s))",f,n)
+end
+local format_f=function(f)
+ n=n+1
+ return format("format('%%%sf',a%s)",f,n)
+end
+local format_F=function(f)
+ n=n+1
+ if not f or f=="" then
+ return format("(((a%s > -0.0000000005 and a%s < 0.0000000005) and '0') or format((a%s %% 1 == 0) and '%%i' or '%%.9f',a%s))",n,n,n,n)
+ else
+ return format("format((a%s %% 1 == 0) and '%%i' or '%%%sf',a%s)",n,f,n)
+ end
+end
+local format_k=function(b,a)
+ n=n+1
+ return format("formattedfloat(a%s,%i,%i)",n,b or 0,a or 0)
+end
+local format_g=function(f)
+ n=n+1
+ return format("format('%%%sg',a%s)",f,n)
+end
+local format_G=function(f)
+ n=n+1
+ return format("format('%%%sG',a%s)",f,n)
+end
+local format_e=function(f)
+ n=n+1
+ return format("format('%%%se',a%s)",f,n)
+end
+local format_E=function(f)
+ n=n+1
+ return format("format('%%%sE',a%s)",f,n)
+end
+local format_j=function(f)
+ n=n+1
+ return format("sparseexponent('%%%se',a%s)",f,n)
+end
+local format_J=function(f)
+ n=n+1
+ return format("sparseexponent('%%%sE',a%s)",f,n)
+end
+local format_x=function(f)
+ n=n+1
+ return format("format('%%%sx',a%s)",f,n)
+end
+local format_X=function(f)
+ n=n+1
+ return format("format('%%%sX',a%s)",f,n)
+end
+local format_o=function(f)
+ n=n+1
+ return format("format('%%%so',a%s)",f,n)
+end
+local format_c=function()
+ n=n+1
+ return format("utfchar(a%s)",n)
+end
+local format_C=function()
+ n=n+1
+ return format("tracedchar(a%s)",n)
+end
+local format_r=function(f)
+ n=n+1
+ return format("format('%%%s.0f',a%s)",f,n)
+end
+local format_h=function(f)
+ n=n+1
+ if f=="-" then
+ f=sub(f,2)
+ return format("format('%%%sx',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n)
+ else
+ return format("format('0x%%%sx',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n)
+ end
+end
+local format_H=function(f)
+ n=n+1
+ if f=="-" then
+ f=sub(f,2)
+ return format("format('%%%sX',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n)
+ else
+ return format("format('0x%%%sX',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n)
+ end
+end
+local format_u=function(f)
+ n=n+1
+ if f=="-" then
+ f=sub(f,2)
+ return format("format('%%%sx',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n)
+ else
+ return format("format('u+%%%sx',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n)
+ end
+end
+local format_U=function(f)
+ n=n+1
+ if f=="-" then
+ f=sub(f,2)
+ return format("format('%%%sX',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n)
+ else
+ return format("format('U+%%%sX',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n)
+ end
+end
+local format_p=function()
+ n=n+1
+ return format("points(a%s)",n)
+end
+local format_b=function()
+ n=n+1
+ return format("basepoints(a%s)",n)
+end
+local format_t=function(f)
+ n=n+1
+ if f and f~="" then
+ return format("concat(a%s,%q)",n,f)
+ else
+ return format("concat(a%s)",n)
+ end
+end
+local format_T=function(f)
+ n=n+1
+ if f and f~="" then
+ return format("sequenced(a%s,%q)",n,f)
+ else
+ return format("sequenced(a%s)",n)
+ end
+end
+local format_l=function()
+ n=n+1
+ return format("(a%s and 'true' or 'false')",n)
+end
+local format_L=function()
+ n=n+1
+ return format("(a%s and 'TRUE' or 'FALSE')",n)
+end
+local format_N=function()
+ n=n+1
+ return format("tostring(tonumber(a%s) or a%s)",n,n)
+end
+local format_a=function(f)
+ n=n+1
+ if f and f~="" then
+ return format("autosingle(a%s,%q)",n,f)
+ else
+ return format("autosingle(a%s)",n)
+ end
+end
+local format_A=function(f)
+ n=n+1
+ if f and f~="" then
+ return format("autodouble(a%s,%q)",n,f)
+ else
+ return format("autodouble(a%s)",n)
+ end
+end
+local format_w=function(f)
+ n=n+1
+ f=tonumber(f)
+ if f then
+ return format("nspaces[%s+a%s]",f,n)
+ else
+ return format("nspaces[a%s]",n)
+ end
+end
+local format_W=function(f)
+ return format("nspaces[%s]",tonumber(f) or 0)
+end
+local format_m=function(f)
+ n=n+1
+ if not f or f=="" then
+ f=","
+ end
+ return format([[formattednumber(a%s,%q,".")]],n,f)
+end
+local format_M=function(f)
+ n=n+1
+ if not f or f=="" then
+ f="."
+ end
+ return format([[formattednumber(a%s,%q,",")]],n,f)
+end
+local format_z=function(f)
+ n=n+(tonumber(f) or 1)
+ return "''"
+end
+local format_rest=function(s)
+ return format("%q",s)
+end
+local format_extension=function(extensions,f,name)
+ local extension=extensions[name] or "tostring(%s)"
+ local f=tonumber(f) or 1
+ local w=find(extension,"%.%.%.")
+ if f==0 then
+ if w then
+ extension=gsub(extension,"%.%.%.","")
+ end
+ return extension
+ elseif f==1 then
+ if w then
+ extension=gsub(extension,"%.%.%.","%%s")
+ end
+ n=n+1
+ local a="a"..n
+ return format(extension,a,a)
+ elseif f<0 then
+ local a="a"..(n+f+1)
+ return format(extension,a,a)
+ else
+ if w then
+ extension=gsub(extension,"%.%.%.",rep("%%s,",f-1).."%%s")
+ end
+ local t={}
+ for i=1,f do
+ n=n+1
+ t[i]="a"..n
+ end
+ return format(extension,unpack(t))
+ end
+end
+local builder=Cs { "start",
+ start=(
+ (
+ P("%")/""*(
+ V("!")
++V("s")+V("q")+V("i")+V("d")+V("f")+V("F")+V("g")+V("G")+V("e")+V("E")+V("x")+V("X")+V("o")
++V("c")+V("C")+V("S")
++V("Q")
++V("N")
++V("k")
++V("r")+V("h")+V("H")+V("u")+V("U")+V("p")+V("b")+V("t")+V("T")+V("l")+V("L")+V("I")+V("w")
++V("W")
++V("a")
++V("A")
++V("j")+V("J")
++V("m")+V("M")
++V("z")
+ )+V("*")
+ )*(P(-1)+Carg(1))
+ )^0,
+ ["s"]=(prefix_any*P("s"))/format_s,
+ ["q"]=(prefix_any*P("q"))/format_q,
+ ["i"]=(prefix_any*P("i"))/format_i,
+ ["d"]=(prefix_any*P("d"))/format_d,
+ ["f"]=(prefix_any*P("f"))/format_f,
+ ["F"]=(prefix_any*P("F"))/format_F,
+ ["g"]=(prefix_any*P("g"))/format_g,
+ ["G"]=(prefix_any*P("G"))/format_G,
+ ["e"]=(prefix_any*P("e"))/format_e,
+ ["E"]=(prefix_any*P("E"))/format_E,
+ ["x"]=(prefix_any*P("x"))/format_x,
+ ["X"]=(prefix_any*P("X"))/format_X,
+ ["o"]=(prefix_any*P("o"))/format_o,
+ ["S"]=(prefix_any*P("S"))/format_S,
+ ["Q"]=(prefix_any*P("Q"))/format_S,
+ ["N"]=(prefix_any*P("N"))/format_N,
+ ["k"]=(prefix_sub*P("k"))/format_k,
+ ["c"]=(prefix_any*P("c"))/format_c,
+ ["C"]=(prefix_any*P("C"))/format_C,
+ ["r"]=(prefix_any*P("r"))/format_r,
+ ["h"]=(prefix_any*P("h"))/format_h,
+ ["H"]=(prefix_any*P("H"))/format_H,
+ ["u"]=(prefix_any*P("u"))/format_u,
+ ["U"]=(prefix_any*P("U"))/format_U,
+ ["p"]=(prefix_any*P("p"))/format_p,
+ ["b"]=(prefix_any*P("b"))/format_b,
+ ["t"]=(prefix_tab*P("t"))/format_t,
+ ["T"]=(prefix_tab*P("T"))/format_T,
+ ["l"]=(prefix_any*P("l"))/format_l,
+ ["L"]=(prefix_any*P("L"))/format_L,
+ ["I"]=(prefix_any*P("I"))/format_I,
+ ["w"]=(prefix_any*P("w"))/format_w,
+ ["W"]=(prefix_any*P("W"))/format_W,
+ ["j"]=(prefix_any*P("j"))/format_j,
+ ["J"]=(prefix_any*P("J"))/format_J,
+ ["m"]=(prefix_tab*P("m"))/format_m,
+ ["M"]=(prefix_tab*P("M"))/format_M,
+ ["z"]=(prefix_any*P("z"))/format_z,
+ ["a"]=(prefix_any*P("a"))/format_a,
+ ["A"]=(prefix_any*P("A"))/format_A,
+ ["*"]=Cs(((1-P("%"))^1+P("%%")/"%%")^1)/format_rest,
+ ["?"]=Cs(((1-P("%"))^1 )^1)/format_rest,
+ ["!"]=Carg(2)*prefix_any*P("!")*C((1-P("!"))^1)*P("!")/format_extension,
+}
+local direct=Cs (
+ P("%")*(S("+- .")+R("09"))^0*S("sqidfgGeExXo")*P(-1)/[[local format = string.format return function(str) return format("%0",str) end]]
+)
+local function make(t,str)
+ local f
+ local p
+ local p=lpegmatch(direct,str)
+ if p then
+ f=loadstripped(p)()
+ else
+ n=0
+ p=lpegmatch(builder,str,1,t._connector_,t._extensions_)
+ if n>0 then
+ p=format(template,preamble,t._preamble_,arguments[n],p)
+ f=loadstripped(p,t._environment_)()
+ else
+ f=function() return str end
+ end
+ end
+ t[str]=f
+ return f
+end
+local function use(t,fmt,...)
+ return t[fmt](...)
+end
+strings.formatters={}
+if _LUAVERSION<5.2 then
+ function strings.formatters.new(noconcat)
+ local t={ _type_="formatter",_connector_=noconcat and "," or "..",_extensions_={},_preamble_=preamble,_environment_={} }
+ setmetatable(t,{ __index=make,__call=use })
+ return t
+ end
+else
+ function strings.formatters.new(noconcat)
+ local e={}
+ for k,v in next,environment do
+ e[k]=v
+ end
+ local t={ _type_="formatter",_connector_=noconcat and "," or "..",_extensions_={},_preamble_="",_environment_=e }
+ setmetatable(t,{ __index=make,__call=use })
+ return t
+ end
+end
+local formatters=strings.formatters.new()
+string.formatters=formatters
+string.formatter=function(str,...) return formatters[str](...) end
+local function add(t,name,template,preamble)
+ if type(t)=="table" and t._type_=="formatter" then
+ t._extensions_[name]=template or "%s"
+ if type(preamble)=="string" then
+ t._preamble_=preamble.."\n"..t._preamble_
+ elseif type(preamble)=="table" then
+ for k,v in next,preamble do
+ t._environment_[k]=v
+ end
+ end
+ end
+end
+strings.formatters.add=add
+patterns.xmlescape=Cs((P("<")/"&lt;"+P(">")/"&gt;"+P("&")/"&amp;"+P('"')/"&quot;"+P(1))^0)
+patterns.texescape=Cs((C(S("#$%\\{}"))/"\\%1"+P(1))^0)
+patterns.luaescape=Cs(((1-S('"\n'))^1+P('"')/'\\"'+P('\n')/'\\n"')^0)
+patterns.luaquoted=Cs(Cc('"')*((1-S('"\n'))^1+P('"')/'\\"'+P('\n')/'\\n"')^0*Cc('"'))
+if _LUAVERSION<5.2 then
+ add(formatters,"xml",[[lpegmatch(xmlescape,%s)]],"local xmlescape = lpeg.patterns.xmlescape")
+ add(formatters,"tex",[[lpegmatch(texescape,%s)]],"local texescape = lpeg.patterns.texescape")
+ add(formatters,"lua",[[lpegmatch(luaescape,%s)]],"local luaescape = lpeg.patterns.luaescape")
+else
+ add(formatters,"xml",[[lpegmatch(xmlescape,%s)]],{ xmlescape=lpeg.patterns.xmlescape })
+ add(formatters,"tex",[[lpegmatch(texescape,%s)]],{ texescape=lpeg.patterns.texescape })
+ add(formatters,"lua",[[lpegmatch(luaescape,%s)]],{ luaescape=lpeg.patterns.luaescape })
+end
+local dquote=patterns.dquote
+local equote=patterns.escaped+dquote/'\\"'+1
+local space=patterns.space
+local cquote=Cc('"')
+local pattern=Cs(dquote*(equote-P(-2))^0*dquote)
++Cs(cquote*(equote-space)^0*space*equote^0*cquote)
+function string.optionalquoted(str)
+ return lpegmatch(pattern,str) or str
+end
+local pattern=Cs((newline/(os.newline or "\r")+1)^0)
+function string.replacenewlines(str)
+ return lpegmatch(pattern,str)
+end
+function strings.newcollector()
+ local result,r={},0
+ return
+ function(fmt,str,...)
+ r=r+1
+ result[r]=str==nil and fmt or formatters[fmt](str,...)
+ end,
+ function(connector)
+ if result then
+ local str=concat(result,connector)
+ result,r={},0
+ return str
+ end
+ end
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['util-fil']={
+ version=1.001,
+ comment="companion to luat-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local byte=string.byte
+local char=string.char
+local extract=bit32 and bit32.extract
+local floor=math.floor
+utilities=utilities or {}
+local files={}
+utilities.files=files
+local zerobased={}
+function files.open(filename,zb)
+ local f=io.open(filename,"rb")
+ if f then
+ zerobased[f]=zb or false
+ end
+ return f
+end
+function files.close(f)
+ zerobased[f]=nil
+ f:close()
+end
+function files.size(f)
+ local current=f:seek()
+ local size=f:seek("end")
+ f:seek("set",current)
+ return size
+end
+files.getsize=files.size
+function files.setposition(f,n)
+ if zerobased[f] then
+ f:seek("set",n)
+ else
+ f:seek("set",n-1)
+ end
+end
+function files.getposition(f)
+ if zerobased[f] then
+ return f:seek()
+ else
+ return f:seek()+1
+ end
+end
+function files.look(f,n,chars)
+ local p=f:seek()
+ local s=f:read(n)
+ f:seek("set",p)
+ if chars then
+ return s
+ else
+ return byte(s,1,#s)
+ end
+end
+function files.skip(f,n)
+ if n==1 then
+ f:read(n)
+ else
+ f:seek("set",f:seek()+n)
+ end
+end
+function files.readbyte(f)
+ return byte(f:read(1))
+end
+function files.readbytes(f,n)
+ return byte(f:read(n),1,n)
+end
+function files.readbytetable(f,n)
+ local s=f:read(n or 1)
+ return { byte(s,1,#s) }
+end
+function files.readchar(f)
+ return f:read(1)
+end
+function files.readstring(f,n)
+ return f:read(n or 1)
+end
+function files.readinteger1(f)
+ local n=byte(f:read(1))
+ if n>=0x80 then
+ return n-0x100
+ else
+ return n
+ end
+end
+files.readcardinal1=files.readbyte
+files.readcardinal=files.readcardinal1
+files.readinteger=files.readinteger1
+files.readsignedbyte=files.readinteger1
+function files.readcardinal2(f)
+ local a,b=byte(f:read(2),1,2)
+ return 0x100*a+b
+end
+function files.readcardinal2le(f)
+ local b,a=byte(f:read(2),1,2)
+ return 0x100*a+b
+end
+function files.readinteger2(f)
+ local a,b=byte(f:read(2),1,2)
+ if a>=0x80 then
+ return 0x100*a+b-0x10000
+ else
+ return 0x100*a+b
+ end
+end
+function files.readinteger2le(f)
+ local b,a=byte(f:read(2),1,2)
+ if a>=0x80 then
+ return 0x100*a+b-0x10000
+ else
+ return 0x100*a+b
+ end
+end
+function files.readcardinal3(f)
+ local a,b,c=byte(f:read(3),1,3)
+ return 0x10000*a+0x100*b+c
+end
+function files.readcardinal3le(f)
+ local c,b,a=byte(f:read(3),1,3)
+ return 0x10000*a+0x100*b+c
+end
+function files.readinteger3(f)
+ local a,b,c=byte(f:read(3),1,3)
+ if a>=0x80 then
+ return 0x10000*a+0x100*b+c-0x1000000
+ else
+ return 0x10000*a+0x100*b+c
+ end
+end
+function files.readinteger3le(f)
+ local c,b,a=byte(f:read(3),1,3)
+ if a>=0x80 then
+ return 0x10000*a+0x100*b+c-0x1000000
+ else
+ return 0x10000*a+0x100*b+c
+ end
+end
+function files.readcardinal4(f)
+ local a,b,c,d=byte(f:read(4),1,4)
+ return 0x1000000*a+0x10000*b+0x100*c+d
+end
+function files.readcardinal4le(f)
+ local d,c,b,a=byte(f:read(4),1,4)
+ return 0x1000000*a+0x10000*b+0x100*c+d
+end
+function files.readinteger4(f)
+ local a,b,c,d=byte(f:read(4),1,4)
+ if a>=0x80 then
+ return 0x1000000*a+0x10000*b+0x100*c+d-0x100000000
+ else
+ return 0x1000000*a+0x10000*b+0x100*c+d
+ end
+end
+function files.readinteger4le(f)
+ local d,c,b,a=byte(f:read(4),1,4)
+ if a>=0x80 then
+ return 0x1000000*a+0x10000*b+0x100*c+d-0x100000000
+ else
+ return 0x1000000*a+0x10000*b+0x100*c+d
+ end
+end
+function files.readfixed2(f)
+ local a,b=byte(f:read(2),1,2)
+ if a>=0x80 then
+ return (a-0x100)+b/0x100
+ else
+ return (a )+b/0x100
+ end
+end
+function files.readfixed4(f)
+ local a,b,c,d=byte(f:read(4),1,4)
+ if a>=0x80 then
+ return (0x100*a+b-0x10000)+(0x100*c+d)/0x10000
+ else
+ return (0x100*a+b )+(0x100*c+d)/0x10000
+ end
+end
+if extract then
+ local extract=bit32.extract
+ local band=bit32.band
+ function files.read2dot14(f)
+ local a,b=byte(f:read(2),1,2)
+ if a>=0x80 then
+ local n=-(0x100*a+b)
+ return-(extract(n,14,2)+(band(n,0x3FFF)/16384.0))
+ else
+ local n=0x100*a+b
+ return (extract(n,14,2)+(band(n,0x3FFF)/16384.0))
+ end
+ end
+end
+function files.skipshort(f,n)
+ f:read(2*(n or 1))
+end
+function files.skiplong(f,n)
+ f:read(4*(n or 1))
+end
+function files.writecardinal2(f,n)
+ local a=char(n%256)
+ n=floor(n/256)
+ local b=char(n%256)
+ f:write(b,a)
+end
+function files.writecardinal4(f,n)
+ local a=char(n%256)
+ n=floor(n/256)
+ local b=char(n%256)
+ n=floor(n/256)
+ local c=char(n%256)
+ n=floor(n/256)
+ local d=char(n%256)
+ f:write(d,c,b,a)
+end
+function files.writestring(f,s)
+ f:write(char(byte(s,1,#s)))
+end
+function files.writebyte(f,b)
+ f:write(char(b))
+end
+if fio and fio.readcardinal1 then
+ files.readcardinal1=fio.readcardinal1
+ files.readcardinal2=fio.readcardinal2
+ files.readcardinal3=fio.readcardinal3
+ files.readcardinal4=fio.readcardinal4
+ files.readinteger1=fio.readinteger1
+ files.readinteger2=fio.readinteger2
+ files.readinteger3=fio.readinteger3
+ files.readinteger4=fio.readinteger4
+ files.read2dot14=fio.read2dot14
+ files.setposition=fio.setposition
+ files.getposition=fio.getposition
+ files.readbyte=files.readcardinal1
+ files.readsignedbyte=files.readinteger1
+ files.readcardinal=files.readcardinal1
+ files.readinteger=files.readinteger1
+ local skipposition=fio.skipposition
+ files.skipposition=skipposition
+ files.readbytes=fio.readbytes
+ files.readbytetable=fio.readbytetable
+ function files.skipshort(f,n)
+ skipposition(f,2*(n or 1))
+ end
+ function files.skiplong(f,n)
+ skipposition(f,4*(n or 1))
+ end
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['luat-basics-gen']={
+ version=1.100,
+ comment="companion to luatex-*.tex",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+if context then
+ texio.write_nl("fatal error: this module is not for context")
+ os.exit()
+end
+local dummyfunction=function()
+end
+local dummyreporter=function(c)
+ return function(f,...)
+ local r=texio.reporter or texio.write_nl
+ if f then
+ r(c.." : "..string.formatters(f,...))
+ else
+ r("")
+ end
+ end
+end
+statistics={
+ register=dummyfunction,
+ starttiming=dummyfunction,
+ stoptiming=dummyfunction,
+ elapsedtime=nil,
+}
+directives={
+ register=dummyfunction,
+ enable=dummyfunction,
+ disable=dummyfunction,
+}
+trackers={
+ register=dummyfunction,
+ enable=dummyfunction,
+ disable=dummyfunction,
+}
+experiments={
+ register=dummyfunction,
+ enable=dummyfunction,
+ disable=dummyfunction,
+}
+storage={
+ register=dummyfunction,
+ shared={},
+}
+logs={
+ new=dummyreporter,
+ reporter=dummyreporter,
+ messenger=dummyreporter,
+ report=dummyfunction,
+}
+callbacks={
+ register=function(n,f)
+ return callback.register(n,f)
+ end,
+}
+utilities=utilities or {} utilities.storage={
+ allocate=function(t)
+ return t or {}
+ end,
+ mark=function(t)
+ return t or {}
+ end,
+}
+characters=characters or {
+ data={}
+}
+texconfig.kpse_init=true
+resolvers=resolvers or {}
+local remapper={
+ otf="opentype fonts",
+ ttf="truetype fonts",
+ ttc="truetype fonts",
+ cid="cid maps",
+ cidmap="cid maps",
+ pfb="type1 fonts",
+ afm="afm",
+ enc="enc files",
+}
+function resolvers.findfile(name,fileformat)
+ name=string.gsub(name,"\\","/")
+ if not fileformat or fileformat=="" then
+ fileformat=file.suffix(name)
+ if fileformat=="" then
+ fileformat="tex"
+ end
+ end
+ fileformat=string.lower(fileformat)
+ fileformat=remapper[fileformat] or fileformat
+ local found=kpse.find_file(name,fileformat)
+ if not found or found=="" then
+ found=kpse.find_file(name,"other text files")
+ end
+ return found
+end
+resolvers.findbinfile=resolvers.findfile
+function resolvers.loadbinfile(filename,filetype)
+ local data=io.loaddata(filename)
+ return true,data,#data
+end
+function resolvers.resolve(s)
+ return s
+end
+function resolvers.unresolve(s)
+ return s
+end
+caches={}
+local writable=nil
+local readables={}
+local usingjit=jit
+if not caches.namespace or caches.namespace=="" or caches.namespace=="context" then
+ caches.namespace='generic'
+end
+do
+ local cachepaths=kpse.expand_var('$TEXMFCACHE') or ""
+ if cachepaths=="" or cachepaths=="$TEXMFCACHE" then
+ cachepaths=kpse.expand_var('$TEXMFVAR') or ""
+ end
+ if cachepaths=="" or cachepaths=="$TEXMFVAR" then
+ cachepaths=kpse.expand_var('$VARTEXMF') or ""
+ end
+ if cachepaths=="" then
+ local fallbacks={ "TMPDIR","TEMPDIR","TMP","TEMP","HOME","HOMEPATH" }
+ for i=1,#fallbacks do
+ cachepaths=os.getenv(fallbacks[i]) or ""
+ if cachepath~="" and lfs.isdir(cachepath) then
+ break
+ end
+ end
+ end
+ if cachepaths=="" then
+ cachepaths="."
+ end
+ cachepaths=string.split(cachepaths,os.type=="windows" and ";" or ":")
+ for i=1,#cachepaths do
+ local cachepath=cachepaths[i]
+ if not lfs.isdir(cachepath) then
+ lfs.mkdirs(cachepath)
+ if lfs.isdir(cachepath) then
+ texio.write(string.format("(created cache path: %s)",cachepath))
+ end
+ end
+ if file.is_writable(cachepath) then
+ writable=file.join(cachepath,"luatex-cache")
+ lfs.mkdir(writable)
+ writable=file.join(writable,caches.namespace)
+ lfs.mkdir(writable)
+ break
+ end
+ end
+ for i=1,#cachepaths do
+ if file.is_readable(cachepaths[i]) then
+ readables[#readables+1]=file.join(cachepaths[i],"luatex-cache",caches.namespace)
+ end
+ end
+ if not writable then
+ texio.write_nl("quiting: fix your writable cache path")
+ os.exit()
+ elseif #readables==0 then
+ texio.write_nl("quiting: fix your readable cache path")
+ os.exit()
+ elseif #readables==1 and readables[1]==writable then
+ texio.write(string.format("(using cache: %s)",writable))
+ else
+ texio.write(string.format("(using write cache: %s)",writable))
+ texio.write(string.format("(using read cache: %s)",table.concat(readables," ")))
+ end
+end
+function caches.getwritablepath(category,subcategory)
+ local path=file.join(writable,category)
+ lfs.mkdir(path)
+ path=file.join(path,subcategory)
+ lfs.mkdir(path)
+ return path
+end
+function caches.getreadablepaths(category,subcategory)
+ local t={}
+ for i=1,#readables do
+ t[i]=file.join(readables[i],category,subcategory)
+ end
+ return t
+end
+local function makefullname(path,name)
+ if path and path~="" then
+ return file.addsuffix(file.join(path,name),"lua"),file.addsuffix(file.join(path,name),usingjit and "lub" or "luc")
+ end
+end
+function caches.is_writable(path,name)
+ local fullname=makefullname(path,name)
+ return fullname and file.is_writable(fullname)
+end
+function caches.loaddata(readables,name,writable)
+ for i=1,#readables do
+ local path=readables[i]
+ local loader=false
+ local luaname,lucname=makefullname(path,name)
+ if lfs.isfile(lucname) then
+ texio.write(string.format("(load luc: %s)",lucname))
+ loader=loadfile(lucname)
+ end
+ if not loader and lfs.isfile(luaname) then
+ local luacrap,lucname=makefullname(writable,name)
+ texio.write(string.format("(compiling luc: %s)",lucname))
+ if lfs.isfile(lucname) then
+ loader=loadfile(lucname)
+ end
+ caches.compile(data,luaname,lucname)
+ if lfs.isfile(lucname) then
+ texio.write(string.format("(load luc: %s)",lucname))
+ loader=loadfile(lucname)
+ else
+ texio.write(string.format("(loading failed: %s)",lucname))
+ end
+ if not loader then
+ texio.write(string.format("(load lua: %s)",luaname))
+ loader=loadfile(luaname)
+ else
+ texio.write(string.format("(loading failed: %s)",luaname))
+ end
+ end
+ if loader then
+ loader=loader()
+ collectgarbage("step")
+ return loader
+ end
+ end
+ return false
+end
+function caches.savedata(path,name,data)
+ local luaname,lucname=makefullname(path,name)
+ if luaname then
+ texio.write(string.format("(save: %s)",luaname))
+ table.tofile(luaname,data,true)
+ if lucname and type(caches.compile)=="function" then
+ os.remove(lucname)
+ texio.write(string.format("(save: %s)",lucname))
+ caches.compile(data,luaname,lucname)
+ end
+ end
+end
+function caches.compile(data,luaname,lucname)
+ local d=io.loaddata(luaname)
+ if not d or d=="" then
+ d=table.serialize(data,true)
+ end
+ if d and d~="" then
+ local f=io.open(lucname,'wb')
+ if f then
+ local s=loadstring(d)
+ if s then
+ f:write(string.dump(s,true))
+ end
+ f:close()
+ end
+ end
+end
+function table.setmetatableindex(t,f)
+ if type(t)~="table" then
+ f,t=t,{}
+ end
+ local m=getmetatable(t)
+ if f=="table" then
+ f=function(t,k) local v={} t[k]=v return v end
+ end
+ if m then
+ m.__index=f
+ else
+ setmetatable(t,{ __index=f })
+ end
+ return t
+end
+arguments={}
+if arg then
+ for i=1,#arg do
+ local k,v=string.match(arg[i],"^%-%-([^=]+)=?(.-)$")
+ if k and v then
+ arguments[k]=v
+ end
+ end
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['data-con']={
+ version=1.100,
+ comment="companion to luat-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local format,lower,gsub=string.format,string.lower,string.gsub
+local trace_cache=false trackers.register("resolvers.cache",function(v) trace_cache=v end)
+local trace_containers=false trackers.register("resolvers.containers",function(v) trace_containers=v end)
+local trace_storage=false trackers.register("resolvers.storage",function(v) trace_storage=v end)
+containers=containers or {}
+local containers=containers
+containers.usecache=true
+local report_containers=logs.reporter("resolvers","containers")
+local allocated={}
+local mt={
+ __index=function(t,k)
+ if k=="writable" then
+ local writable=caches.getwritablepath(t.category,t.subcategory) or { "." }
+ t.writable=writable
+ return writable
+ elseif k=="readables" then
+ local readables=caches.getreadablepaths(t.category,t.subcategory) or { "." }
+ t.readables=readables
+ return readables
+ end
+ end,
+ __storage__=true
+}
+function containers.define(category,subcategory,version,enabled)
+ if category and subcategory then
+ local c=allocated[category]
+ if not c then
+ c={}
+ allocated[category]=c
+ end
+ local s=c[subcategory]
+ if not s then
+ s={
+ category=category,
+ subcategory=subcategory,
+ storage={},
+ enabled=enabled,
+ version=version or math.pi,
+ trace=false,
+ }
+ setmetatable(s,mt)
+ c[subcategory]=s
+ end
+ return s
+ end
+end
+function containers.is_usable(container,name)
+ return container.enabled and caches and caches.is_writable(container.writable,name)
+end
+function containers.is_valid(container,name)
+ if name and name~="" then
+ local storage=container.storage[name]
+ return storage and storage.cache_version==container.version
+ else
+ return false
+ end
+end
+function containers.read(container,name)
+ local storage=container.storage
+ local stored=storage[name]
+ if not stored and container.enabled and caches and containers.usecache then
+ stored=caches.loaddata(container.readables,name,container.writable)
+ if stored and stored.cache_version==container.version then
+ if trace_cache or trace_containers then
+ report_containers("action %a, category %a, name %a","load",container.subcategory,name)
+ end
+ else
+ stored=nil
+ end
+ storage[name]=stored
+ elseif stored then
+ if trace_cache or trace_containers then
+ report_containers("action %a, category %a, name %a","reuse",container.subcategory,name)
+ end
+ end
+ return stored
+end
+function containers.write(container,name,data)
+ if data then
+ data.cache_version=container.version
+ if container.enabled and caches then
+ local unique,shared=data.unique,data.shared
+ data.unique,data.shared=nil,nil
+ caches.savedata(container.writable,name,data)
+ if trace_cache or trace_containers then
+ report_containers("action %a, category %a, name %a","save",container.subcategory,name)
+ end
+ data.unique,data.shared=unique,shared
+ end
+ if trace_cache or trace_containers then
+ report_containers("action %a, category %a, name %a","store",container.subcategory,name)
+ end
+ container.storage[name]=data
+ end
+ return data
+end
+function containers.content(container,name)
+ return container.storage[name]
+end
+function containers.cleanname(name)
+ return (gsub(lower(name),"[^%w\128-\255]+","-"))
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['luatex-fonts-nod']={
+ version=1.001,
+ comment="companion to luatex-fonts.lua",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+if context then
+ texio.write_nl("fatal error: this module is not for context")
+ os.exit()
+end
+if tex.attribute[0]~=0 then
+ texio.write_nl("log","!")
+ texio.write_nl("log","! Attribute 0 is reserved for ConTeXt's font feature management and has to be")
+ texio.write_nl("log","! set to zero. Also, some attributes in the range 1-255 are used for special")
+ texio.write_nl("log","! purposes so setting them at the TeX end might break the font handler.")
+ texio.write_nl("log","!")
+ tex.attribute[0]=0
+end
+attributes=attributes or {}
+attributes.unsetvalue=-0x7FFFFFFF
+local numbers,last={},127
+attributes.private=attributes.private or function(name)
+ local number=numbers[name]
+ if not number then
+ if last<255 then
+ last=last+1
+ end
+ number=last
+ numbers[name]=number
+ end
+ return number
+end
+nodes={}
+nodes.handlers={}
+local nodecodes={}
+local glyphcodes=node.subtypes("glyph")
+local disccodes=node.subtypes("disc")
+for k,v in next,node.types() do
+ v=string.gsub(v,"_","")
+ nodecodes[k]=v
+ nodecodes[v]=k
+end
+for i=0,#glyphcodes do
+ glyphcodes[glyphcodes[i]]=i
+end
+for i=0,#disccodes do
+ disccodes[disccodes[i]]=i
+end
+nodes.nodecodes=nodecodes
+nodes.glyphcodes=glyphcodes
+nodes.disccodes=disccodes
+local flush_node=node.flush_node
+local remove_node=node.remove
+local traverse_id=node.traverse_id
+nodes.handlers.protectglyphs=node.protect_glyphs
+nodes.handlers.unprotectglyphs=node.unprotect_glyphs
+local math_code=nodecodes.math
+local end_of_math=node.end_of_math
+function node.end_of_math(n)
+ if n.id==math_code and n.subtype==1 then
+ return n
+ else
+ return end_of_math(n)
+ end
+end
+function nodes.remove(head,current,free_too)
+ local t=current
+ head,current=remove_node(head,current)
+ if t then
+ if free_too then
+ flush_node(t)
+ t=nil
+ else
+ t.next,t.prev=nil,nil
+ end
+ end
+ return head,current,t
+end
+function nodes.delete(head,current)
+ return nodes.remove(head,current,true)
+end
+local getfield=node.getfield
+local setfield=node.setfield
+nodes.getfield=getfield
+nodes.setfield=setfield
+nodes.getattr=getfield
+nodes.setattr=setfield
+nodes.tostring=node.tostring or tostring
+nodes.copy=node.copy
+nodes.copy_node=node.copy
+nodes.copy_list=node.copy_list
+nodes.delete=node.delete
+nodes.dimensions=node.dimensions
+nodes.end_of_math=node.end_of_math
+nodes.flush_list=node.flush_list
+nodes.flush_node=node.flush_node
+nodes.flush=node.flush_node
+nodes.free=node.free
+nodes.insert_after=node.insert_after
+nodes.insert_before=node.insert_before
+nodes.hpack=node.hpack
+nodes.new=node.new
+nodes.tail=node.tail
+nodes.traverse=node.traverse
+nodes.traverse_id=node.traverse_id
+nodes.slide=node.slide
+nodes.vpack=node.vpack
+nodes.first_glyph=node.first_glyph
+nodes.has_glyph=node.has_glyph or node.first_glyph
+nodes.current_attr=node.current_attr
+nodes.has_field=node.has_field
+nodes.last_node=node.last_node
+nodes.usedlist=node.usedlist
+nodes.protrusion_skippable=node.protrusion_skippable
+nodes.write=node.write
+nodes.has_attribute=node.has_attribute
+nodes.set_attribute=node.set_attribute
+nodes.unset_attribute=node.unset_attribute
+nodes.protect_glyphs=node.protect_glyphs
+nodes.unprotect_glyphs=node.unprotect_glyphs
+nodes.mlist_to_hlist=node.mlist_to_hlist
+local direct=node.direct
+local nuts={}
+nodes.nuts=nuts
+local tonode=direct.tonode
+local tonut=direct.todirect
+nodes.tonode=tonode
+nodes.tonut=tonut
+nuts.tonode=tonode
+nuts.tonut=tonut
+local getfield=direct.getfield
+local setfield=direct.setfield
+nuts.getfield=getfield
+nuts.setfield=setfield
+nuts.getnext=direct.getnext
+nuts.setnext=direct.setnext
+nuts.getprev=direct.getprev
+nuts.setprev=direct.setprev
+nuts.getboth=direct.getboth
+nuts.setboth=direct.setboth
+nuts.getid=direct.getid
+nuts.getattr=direct.get_attribute or direct.has_attribute or getfield
+nuts.setattr=setfield
+nuts.getfont=direct.getfont
+nuts.setfont=direct.setfont
+nuts.getsubtype=direct.getsubtype
+nuts.setsubtype=direct.setsubtype
+nuts.getchar=direct.getchar
+nuts.setchar=direct.setchar
+nuts.getdisc=direct.getdisc
+nuts.setdisc=direct.setdisc
+nuts.setlink=direct.setlink
+nuts.getlist=direct.getlist
+nuts.setlist=direct.setlist
+nuts.getoffsets=direct.getoffsets or
+ function(n)
+ return getfield(n,"xoffset"),getfield(n,"yoffset")
+ end
+nuts.setoffsets=direct.setoffsets or
+ function(n,x,y)
+ if x then setfield(n,"xoffset",x) end
+ if y then setfield(n,"xoffset",y) end
+ end
+nuts.getleader=direct.getleader or function(n) return getfield(n,"leader") end
+nuts.setleader=direct.setleader or function(n,l) setfield(n,"leader",l) end
+nuts.getcomponents=direct.getcomponents or function(n) return getfield(n,"components") end
+nuts.setcomponents=direct.setcomponents or function(n,c) setfield(n,"components",c) end
+nuts.getkern=direct.getkern or function(n) return getfield(n,"kern") end
+nuts.setkern=direct.setkern or function(n,k) setfield(n,"kern",k) end
+nuts.getdir=direct.getdir or function(n) return getfield(n,"dir") end
+nuts.setdir=direct.setdir or function(n,d) setfield(n,"dir",d) end
+nuts.getwidth=direct.getwidth or function(n) return getfield(n,"width") end
+nuts.setwidth=direct.setwidth or function(n,w) return setfield(n,"width",w) end
+nuts.getheight=direct.getheight or function(n) return getfield(n,"height") end
+nuts.setheight=direct.setheight or function(n,h) return setfield(n,"height",h) end
+nuts.getdepth=direct.getdepth or function(n) return getfield(n,"depth") end
+nuts.setdepth=direct.setdepth or function(n,d) return setfield(n,"depth",d) end
+if not direct.is_glyph then
+ local getchar=direct.getchar
+ local getid=direct.getid
+ local getfont=direct.getfont
+ local glyph_code=nodes.nodecodes.glyph
+ function direct.is_glyph(n,f)
+ local id=getid(n)
+ if id==glyph_code then
+ if f and getfont(n)==f then
+ return getchar(n)
+ else
+ return false
+ end
+ else
+ return nil,id
+ end
+ end
+ function direct.is_char(n,f)
+ local id=getid(n)
+ if id==glyph_code then
+ if getsubtype(n)>=256 then
+ return false
+ elseif f and getfont(n)==f then
+ return getchar(n)
+ else
+ return false
+ end
+ else
+ return nil,id
+ end
+ end
+end
+nuts.ischar=direct.is_char
+nuts.is_char=direct.is_char
+nuts.isglyph=direct.is_glyph
+nuts.is_glyph=direct.is_glyph
+nuts.insert_before=direct.insert_before
+nuts.insert_after=direct.insert_after
+nuts.delete=direct.delete
+nuts.copy=direct.copy
+nuts.copy_node=direct.copy
+nuts.copy_list=direct.copy_list
+nuts.tail=direct.tail
+nuts.flush_list=direct.flush_list
+nuts.flush_node=direct.flush_node
+nuts.flush=direct.flush
+nuts.free=direct.free
+nuts.remove=direct.remove
+nuts.is_node=direct.is_node
+nuts.end_of_math=direct.end_of_math
+nuts.traverse=direct.traverse
+nuts.traverse_id=direct.traverse_id
+nuts.traverse_char=direct.traverse_char
+nuts.ligaturing=direct.ligaturing
+nuts.kerning=direct.kerning
+nuts.new=direct.new
+nuts.getprop=nuts.getattr
+nuts.setprop=nuts.setattr
+local propertydata=direct.get_properties_table()
+nodes.properties={ data=propertydata }
+direct.set_properties_mode(true,true)
+function direct.set_properties_mode() end
+nuts.getprop=function(n,k)
+ local p=propertydata[n]
+ if p then
+ return p[k]
+ end
+end
+nuts.setprop=function(n,k,v)
+ if v then
+ local p=propertydata[n]
+ if p then
+ p[k]=v
+ else
+ propertydata[n]={ [k]=v }
+ end
+ end
+end
+nodes.setprop=nodes.setproperty
+nodes.getprop=nodes.getproperty
+local setprev=nuts.setprev
+local setnext=nuts.setnext
+local getnext=nuts.getnext
+local setlink=nuts.setlink
+local getfield=nuts.getfield
+local setfield=nuts.setfield
+local getcomponents=nuts.getcomponents
+local setcomponents=nuts.setcomponents
+local find_tail=nuts.tail
+local flush_list=nuts.flush_list
+local flush_node=nuts.flush_node
+local traverse_id=nuts.traverse_id
+local copy_node=nuts.copy_node
+local glyph_code=nodes.nodecodes.glyph
+function nuts.set_components(target,start,stop)
+ local head=getcomponents(target)
+ if head then
+ flush_list(head)
+ head=nil
+ end
+ if start then
+ setprev(start)
+ else
+ return nil
+ end
+ if stop then
+ setnext(stop)
+ end
+ local tail=nil
+ while start do
+ local c=getcomponents(start)
+ local n=getnext(start)
+ if c then
+ if head then
+ setlink(tail,c)
+ else
+ head=c
+ end
+ tail=find_tail(c)
+ setcomponents(start)
+ flush_node(start)
+ else
+ if head then
+ setlink(tail,start)
+ else
+ head=start
+ end
+ tail=start
+ end
+ start=n
+ end
+ setcomponents(target,head)
+ return head
+end
+nuts.get_components=nuts.getcomponents
+function nuts.take_components(target)
+ local c=getcomponents(target)
+ setcomponents(target)
+ return c
+end
+function nuts.count_components(n,marks)
+ local components=getcomponents(n)
+ if components then
+ if marks then
+ local i=0
+ for g in traverse_id(glyph_code,components) do
+ if not marks[getchar(g)] then
+ i=i+1
+ end
+ end
+ return i
+ else
+ return count(glyph_code,components)
+ end
+ else
+ return 0
+ end
+end
+function nuts.copy_no_components(g,copyinjection)
+ local components=getcomponents(g)
+ if components then
+ setcomponents(g)
+ local n=copy_node(g)
+ if copyinjection then
+ copyinjection(n,g)
+ end
+ setcomponents(g,components)
+ return n
+ else
+ local n=copy_node(g)
+ if copyinjection then
+ copyinjection(n,g)
+ end
+ return n
+ end
+end
+function nuts.copy_only_glyphs(current)
+ local head=nil
+ local previous=nil
+ for n in traverse_id(glyph_code,current) do
+ n=copy_node(n)
+ if head then
+ setlink(previous,n)
+ else
+ head=n
+ end
+ previous=n
+ end
+ return head
+end
+nuts.uses_font=direct.uses_font
+if not nuts.uses_font then
+ local getdisc=nuts.getdisc
+ local getfont=nuts.getfont
+ function nuts.uses_font(n,font)
+ local pre,post,replace=getdisc(n)
+ if pre then
+ for n in traverse_id(glyph_code,pre) do
+ if getfont(n)==font then
+ return true
+ end
+ end
+ end
+ if post then
+ for n in traverse_id(glyph_code,post) do
+ if getfont(n)==font then
+ return true
+ end
+ end
+ end
+ if replace then
+ for n in traverse_id(glyph_code,replace) do
+ if getfont(n)==font then
+ return true
+ end
+ end
+ end
+ return false
+ end
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+
+characters=characters or {}
+characters.blockrange={}
+characters.classifiers={
+ [768]=5,
+ [769]=5,
+ [770]=5,
+ [771]=5,
+ [772]=5,
+ [773]=5,
+ [774]=5,
+ [775]=5,
+ [776]=5,
+ [777]=5,
+ [778]=5,
+ [779]=5,
+ [780]=5,
+ [781]=5,
+ [782]=5,
+ [783]=5,
+ [784]=5,
+ [785]=5,
+ [786]=5,
+ [787]=5,
+ [788]=5,
+ [789]=5,
+ [790]=5,
+ [791]=5,
+ [792]=5,
+ [793]=5,
+ [794]=5,
+ [795]=5,
+ [796]=5,
+ [797]=5,
+ [798]=5,
+ [799]=5,
+ [800]=5,
+ [801]=5,
+ [802]=5,
+ [803]=5,
+ [804]=5,
+ [805]=5,
+ [806]=5,
+ [807]=5,
+ [808]=5,
+ [809]=5,
+ [810]=5,
+ [811]=5,
+ [812]=5,
+ [813]=5,
+ [814]=5,
+ [815]=5,
+ [816]=5,
+ [817]=5,
+ [818]=5,
+ [819]=5,
+ [820]=5,
+ [821]=5,
+ [822]=5,
+ [823]=5,
+ [824]=5,
+ [825]=5,
+ [826]=5,
+ [827]=5,
+ [828]=5,
+ [829]=5,
+ [830]=5,
+ [831]=5,
+ [832]=5,
+ [833]=5,
+ [834]=5,
+ [835]=5,
+ [836]=5,
+ [837]=5,
+ [838]=5,
+ [839]=5,
+ [840]=5,
+ [841]=5,
+ [842]=5,
+ [843]=5,
+ [844]=5,
+ [845]=5,
+ [846]=5,
+ [847]=5,
+ [848]=5,
+ [849]=5,
+ [850]=5,
+ [851]=5,
+ [852]=5,
+ [853]=5,
+ [854]=5,
+ [855]=5,
+ [856]=5,
+ [857]=5,
+ [858]=5,
+ [859]=5,
+ [860]=5,
+ [861]=5,
+ [862]=5,
+ [863]=5,
+ [864]=5,
+ [865]=5,
+ [866]=5,
+ [867]=5,
+ [868]=5,
+ [869]=5,
+ [870]=5,
+ [871]=5,
+ [872]=5,
+ [873]=5,
+ [874]=5,
+ [875]=5,
+ [876]=5,
+ [877]=5,
+ [878]=5,
+ [879]=5,
+ [1155]=5,
+ [1156]=5,
+ [1157]=5,
+ [1158]=5,
+ [1159]=5,
+ [1425]=5,
+ [1426]=5,
+ [1427]=5,
+ [1428]=5,
+ [1429]=5,
+ [1430]=5,
+ [1431]=5,
+ [1432]=5,
+ [1433]=5,
+ [1434]=5,
+ [1435]=5,
+ [1436]=5,
+ [1437]=5,
+ [1438]=5,
+ [1439]=5,
+ [1440]=5,
+ [1441]=5,
+ [1442]=5,
+ [1443]=5,
+ [1444]=5,
+ [1445]=5,
+ [1446]=5,
+ [1447]=5,
+ [1448]=5,
+ [1449]=5,
+ [1450]=5,
+ [1451]=5,
+ [1452]=5,
+ [1453]=5,
+ [1454]=5,
+ [1455]=5,
+ [1456]=5,
+ [1457]=5,
+ [1458]=5,
+ [1459]=5,
+ [1460]=5,
+ [1461]=5,
+ [1462]=5,
+ [1463]=5,
+ [1464]=5,
+ [1465]=5,
+ [1466]=5,
+ [1467]=5,
+ [1468]=5,
+ [1469]=5,
+ [1471]=5,
+ [1473]=5,
+ [1474]=5,
+ [1476]=5,
+ [1477]=5,
+ [1479]=5,
+ [1536]=4,
+ [1537]=4,
+ [1538]=4,
+ [1539]=4,
+ [1540]=4,
+ [1541]=4,
+ [1542]=6,
+ [1543]=6,
+ [1544]=4,
+ [1545]=6,
+ [1546]=6,
+ [1547]=4,
+ [1548]=6,
+ [1549]=6,
+ [1550]=6,
+ [1551]=6,
+ [1552]=5,
+ [1553]=5,
+ [1554]=5,
+ [1555]=5,
+ [1556]=5,
+ [1557]=5,
+ [1558]=5,
+ [1559]=5,
+ [1560]=5,
+ [1561]=5,
+ [1562]=5,
+ [1563]=6,
+ [1564]=6,
+ [1566]=6,
+ [1567]=6,
+ [1568]=2,
+ [1569]=4,
+ [1570]=3,
+ [1571]=3,
+ [1572]=3,
+ [1573]=3,
+ [1574]=2,
+ [1575]=3,
+ [1576]=2,
+ [1577]=3,
+ [1578]=2,
+ [1579]=2,
+ [1580]=2,
+ [1581]=2,
+ [1582]=2,
+ [1583]=3,
+ [1584]=3,
+ [1585]=3,
+ [1586]=3,
+ [1587]=2,
+ [1588]=2,
+ [1589]=2,
+ [1590]=2,
+ [1591]=2,
+ [1592]=2,
+ [1593]=2,
+ [1594]=2,
+ [1595]=2,
+ [1596]=2,
+ [1597]=2,
+ [1598]=2,
+ [1599]=2,
+ [1600]=2,
+ [1601]=2,
+ [1602]=2,
+ [1603]=2,
+ [1604]=2,
+ [1605]=2,
+ [1606]=2,
+ [1607]=2,
+ [1608]=3,
+ [1609]=2,
+ [1610]=2,
+ [1611]=5,
+ [1612]=5,
+ [1613]=5,
+ [1614]=5,
+ [1615]=5,
+ [1616]=5,
+ [1617]=5,
+ [1618]=5,
+ [1619]=5,
+ [1620]=5,
+ [1621]=5,
+ [1622]=5,
+ [1623]=5,
+ [1624]=5,
+ [1625]=5,
+ [1626]=5,
+ [1627]=5,
+ [1628]=5,
+ [1629]=5,
+ [1630]=5,
+ [1631]=5,
+ [1632]=6,
+ [1633]=6,
+ [1634]=6,
+ [1635]=6,
+ [1636]=6,
+ [1637]=6,
+ [1638]=6,
+ [1639]=6,
+ [1640]=6,
+ [1641]=6,
+ [1642]=6,
+ [1643]=6,
+ [1644]=6,
+ [1645]=6,
+ [1646]=2,
+ [1647]=2,
+ [1648]=5,
+ [1649]=3,
+ [1650]=3,
+ [1651]=3,
+ [1652]=4,
+ [1653]=3,
+ [1654]=3,
+ [1655]=3,
+ [1656]=2,
+ [1657]=2,
+ [1658]=2,
+ [1659]=2,
+ [1660]=2,
+ [1661]=2,
+ [1662]=2,
+ [1663]=2,
+ [1664]=2,
+ [1665]=2,
+ [1666]=2,
+ [1667]=2,
+ [1668]=2,
+ [1669]=2,
+ [1670]=2,
+ [1671]=2,
+ [1672]=3,
+ [1673]=3,
+ [1674]=3,
+ [1675]=3,
+ [1676]=3,
+ [1677]=3,
+ [1678]=3,
+ [1679]=3,
+ [1680]=3,
+ [1681]=3,
+ [1682]=3,
+ [1683]=3,
+ [1684]=3,
+ [1685]=3,
+ [1686]=3,
+ [1687]=3,
+ [1688]=3,
+ [1689]=3,
+ [1690]=2,
+ [1691]=2,
+ [1692]=2,
+ [1693]=2,
+ [1694]=2,
+ [1695]=2,
+ [1696]=2,
+ [1697]=2,
+ [1698]=2,
+ [1699]=2,
+ [1700]=2,
+ [1701]=2,
+ [1702]=2,
+ [1703]=2,
+ [1704]=2,
+ [1705]=2,
+ [1706]=2,
+ [1707]=2,
+ [1708]=2,
+ [1709]=2,
+ [1710]=2,
+ [1711]=2,
+ [1712]=2,
+ [1713]=2,
+ [1714]=2,
+ [1715]=2,
+ [1716]=2,
+ [1717]=2,
+ [1718]=2,
+ [1719]=2,
+ [1720]=2,
+ [1721]=2,
+ [1722]=2,
+ [1723]=2,
+ [1724]=2,
+ [1725]=2,
+ [1726]=2,
+ [1727]=2,
+ [1728]=3,
+ [1729]=2,
+ [1730]=2,
+ [1731]=3,
+ [1732]=3,
+ [1733]=3,
+ [1734]=3,
+ [1735]=3,
+ [1736]=3,
+ [1737]=3,
+ [1738]=3,
+ [1739]=3,
+ [1740]=2,
+ [1741]=3,
+ [1742]=2,
+ [1743]=3,
+ [1744]=2,
+ [1745]=2,
+ [1746]=3,
+ [1747]=3,
+ [1748]=6,
+ [1749]=3,
+ [1750]=5,
+ [1751]=5,
+ [1752]=5,
+ [1753]=5,
+ [1754]=5,
+ [1755]=5,
+ [1756]=5,
+ [1757]=4,
+ [1758]=6,
+ [1759]=5,
+ [1760]=5,
+ [1761]=5,
+ [1762]=5,
+ [1763]=5,
+ [1764]=5,
+ [1765]=6,
+ [1766]=6,
+ [1767]=5,
+ [1768]=5,
+ [1769]=6,
+ [1770]=5,
+ [1771]=5,
+ [1772]=5,
+ [1773]=5,
+ [1774]=3,
+ [1775]=3,
+ [1776]=6,
+ [1777]=6,
+ [1778]=6,
+ [1779]=6,
+ [1780]=6,
+ [1781]=6,
+ [1782]=6,
+ [1783]=6,
+ [1784]=6,
+ [1785]=6,
+ [1786]=2,
+ [1787]=2,
+ [1788]=2,
+ [1789]=6,
+ [1790]=6,
+ [1791]=2,
+ [1792]=6,
+ [1793]=6,
+ [1794]=6,
+ [1795]=6,
+ [1796]=6,
+ [1797]=6,
+ [1798]=6,
+ [1799]=6,
+ [1800]=6,
+ [1801]=6,
+ [1802]=6,
+ [1803]=6,
+ [1804]=6,
+ [1805]=6,
+ [1807]=6,
+ [1808]=3,
+ [1809]=5,
+ [1810]=2,
+ [1811]=2,
+ [1812]=2,
+ [1813]=3,
+ [1814]=3,
+ [1815]=3,
+ [1816]=3,
+ [1817]=3,
+ [1818]=2,
+ [1819]=2,
+ [1820]=2,
+ [1821]=2,
+ [1822]=3,
+ [1823]=2,
+ [1824]=2,
+ [1825]=2,
+ [1826]=2,
+ [1827]=2,
+ [1828]=2,
+ [1829]=2,
+ [1830]=2,
+ [1831]=2,
+ [1832]=3,
+ [1833]=2,
+ [1834]=3,
+ [1835]=2,
+ [1836]=3,
+ [1837]=2,
+ [1838]=2,
+ [1839]=3,
+ [1840]=5,
+ [1841]=5,
+ [1842]=5,
+ [1843]=5,
+ [1844]=5,
+ [1845]=5,
+ [1846]=5,
+ [1847]=5,
+ [1848]=5,
+ [1849]=5,
+ [1850]=5,
+ [1851]=5,
+ [1852]=5,
+ [1853]=5,
+ [1854]=5,
+ [1855]=5,
+ [1856]=5,
+ [1857]=5,
+ [1858]=5,
+ [1859]=5,
+ [1860]=5,
+ [1861]=5,
+ [1862]=5,
+ [1863]=5,
+ [1864]=5,
+ [1865]=5,
+ [1866]=5,
+ [1869]=3,
+ [1870]=2,
+ [1871]=2,
+ [1872]=2,
+ [1873]=2,
+ [1874]=2,
+ [1875]=2,
+ [1876]=2,
+ [1877]=2,
+ [1878]=2,
+ [1879]=2,
+ [1880]=2,
+ [1881]=3,
+ [1882]=3,
+ [1883]=3,
+ [1884]=2,
+ [1885]=2,
+ [1886]=2,
+ [1887]=2,
+ [1888]=2,
+ [1889]=2,
+ [1890]=2,
+ [1891]=2,
+ [1892]=2,
+ [1893]=2,
+ [1894]=2,
+ [1895]=2,
+ [1896]=2,
+ [1897]=2,
+ [1898]=2,
+ [1899]=3,
+ [1900]=3,
+ [1901]=2,
+ [1902]=2,
+ [1903]=2,
+ [1904]=2,
+ [1905]=3,
+ [1906]=2,
+ [1907]=3,
+ [1908]=3,
+ [1909]=2,
+ [1910]=2,
+ [1911]=2,
+ [1912]=3,
+ [1913]=3,
+ [1914]=2,
+ [1915]=2,
+ [1916]=2,
+ [1917]=2,
+ [1918]=2,
+ [1919]=2,
+ [1958]=5,
+ [1959]=5,
+ [1960]=5,
+ [1961]=5,
+ [1962]=5,
+ [1963]=5,
+ [1964]=5,
+ [1965]=5,
+ [1966]=5,
+ [1967]=5,
+ [1968]=5,
+ [1984]=6,
+ [1985]=6,
+ [1986]=6,
+ [1987]=6,
+ [1988]=6,
+ [1989]=6,
+ [1990]=6,
+ [1991]=6,
+ [1992]=6,
+ [1993]=6,
+ [1994]=2,
+ [1995]=2,
+ [1996]=2,
+ [1997]=2,
+ [1998]=2,
+ [1999]=2,
+ [2000]=2,
+ [2001]=2,
+ [2002]=2,
+ [2003]=2,
+ [2004]=2,
+ [2005]=2,
+ [2006]=2,
+ [2007]=2,
+ [2008]=2,
+ [2009]=2,
+ [2010]=2,
+ [2011]=2,
+ [2012]=2,
+ [2013]=2,
+ [2014]=2,
+ [2015]=2,
+ [2016]=2,
+ [2017]=2,
+ [2018]=2,
+ [2019]=2,
+ [2020]=2,
+ [2021]=2,
+ [2022]=2,
+ [2023]=2,
+ [2024]=2,
+ [2025]=2,
+ [2026]=2,
+ [2027]=5,
+ [2028]=5,
+ [2029]=5,
+ [2030]=5,
+ [2031]=5,
+ [2032]=5,
+ [2033]=5,
+ [2034]=5,
+ [2035]=5,
+ [2036]=6,
+ [2037]=6,
+ [2038]=6,
+ [2039]=6,
+ [2040]=6,
+ [2041]=6,
+ [2042]=2,
+ [2070]=5,
+ [2071]=5,
+ [2072]=5,
+ [2073]=5,
+ [2075]=5,
+ [2076]=5,
+ [2077]=5,
+ [2078]=5,
+ [2079]=5,
+ [2080]=5,
+ [2081]=5,
+ [2082]=5,
+ [2083]=5,
+ [2085]=5,
+ [2086]=5,
+ [2087]=5,
+ [2089]=5,
+ [2090]=5,
+ [2091]=5,
+ [2092]=5,
+ [2093]=5,
+ [2112]=3,
+ [2113]=2,
+ [2114]=2,
+ [2115]=2,
+ [2116]=2,
+ [2117]=2,
+ [2118]=3,
+ [2119]=3,
+ [2120]=2,
+ [2121]=3,
+ [2122]=2,
+ [2123]=2,
+ [2124]=2,
+ [2125]=2,
+ [2126]=2,
+ [2127]=2,
+ [2128]=2,
+ [2129]=2,
+ [2130]=2,
+ [2131]=2,
+ [2132]=3,
+ [2133]=2,
+ [2134]=4,
+ [2135]=4,
+ [2136]=4,
+ [2137]=5,
+ [2138]=5,
+ [2139]=5,
+ [2208]=2,
+ [2209]=2,
+ [2210]=2,
+ [2211]=2,
+ [2212]=2,
+ [2213]=2,
+ [2214]=2,
+ [2215]=2,
+ [2216]=2,
+ [2217]=2,
+ [2218]=3,
+ [2219]=3,
+ [2220]=3,
+ [2221]=4,
+ [2222]=3,
+ [2223]=2,
+ [2224]=2,
+ [2225]=3,
+ [2226]=3,
+ [2227]=2,
+ [2228]=2,
+ [2230]=2,
+ [2231]=2,
+ [2232]=2,
+ [2233]=3,
+ [2234]=2,
+ [2235]=2,
+ [2236]=2,
+ [2237]=2,
+ [2260]=5,
+ [2261]=5,
+ [2262]=5,
+ [2263]=5,
+ [2264]=5,
+ [2265]=5,
+ [2266]=5,
+ [2267]=5,
+ [2268]=5,
+ [2269]=5,
+ [2270]=5,
+ [2271]=5,
+ [2272]=5,
+ [2273]=5,
+ [2274]=4,
+ [2275]=5,
+ [2276]=5,
+ [2277]=5,
+ [2278]=5,
+ [2279]=5,
+ [2280]=5,
+ [2281]=5,
+ [2282]=5,
+ [2283]=5,
+ [2284]=5,
+ [2285]=5,
+ [2286]=5,
+ [2287]=5,
+ [2288]=5,
+ [2289]=5,
+ [2290]=5,
+ [2291]=5,
+ [2292]=5,
+ [2293]=5,
+ [2294]=5,
+ [2295]=5,
+ [2296]=5,
+ [2297]=5,
+ [2298]=5,
+ [2299]=5,
+ [2300]=5,
+ [2301]=5,
+ [2302]=5,
+ [2303]=5,
+ [2304]=5,
+ [2305]=5,
+ [2306]=5,
+ [2362]=5,
+ [2364]=5,
+ [2369]=5,
+ [2370]=5,
+ [2371]=5,
+ [2372]=5,
+ [2373]=5,
+ [2374]=5,
+ [2375]=5,
+ [2376]=5,
+ [2381]=5,
+ [2385]=5,
+ [2386]=5,
+ [2387]=5,
+ [2388]=5,
+ [2389]=5,
+ [2390]=5,
+ [2391]=5,
+ [2402]=5,
+ [2403]=5,
+ [2433]=5,
+ [2492]=5,
+ [2497]=5,
+ [2498]=5,
+ [2499]=5,
+ [2500]=5,
+ [2509]=5,
+ [2530]=5,
+ [2531]=5,
+ [2561]=5,
+ [2562]=5,
+ [2620]=5,
+ [2625]=5,
+ [2626]=5,
+ [2631]=5,
+ [2632]=5,
+ [2635]=5,
+ [2636]=5,
+ [2637]=5,
+ [2641]=5,
+ [2672]=5,
+ [2673]=5,
+ [2677]=5,
+ [2689]=5,
+ [2690]=5,
+ [2748]=5,
+ [2753]=5,
+ [2754]=5,
+ [2755]=5,
+ [2756]=5,
+ [2757]=5,
+ [2759]=5,
+ [2760]=5,
+ [2765]=5,
+ [2786]=5,
+ [2787]=5,
+ [2817]=5,
+ [2876]=5,
+ [2879]=5,
+ [2881]=5,
+ [2882]=5,
+ [2883]=5,
+ [2884]=5,
+ [2893]=5,
+ [2902]=5,
+ [2914]=5,
+ [2915]=5,
+ [2946]=5,
+ [3008]=5,
+ [3021]=5,
+ [3072]=5,
+ [3134]=5,
+ [3135]=5,
+ [3136]=5,
+ [3142]=5,
+ [3143]=5,
+ [3144]=5,
+ [3146]=5,
+ [3147]=5,
+ [3148]=5,
+ [3149]=5,
+ [3157]=5,
+ [3158]=5,
+ [3170]=5,
+ [3171]=5,
+ [3201]=5,
+ [3260]=5,
+ [3263]=5,
+ [3270]=5,
+ [3276]=5,
+ [3277]=5,
+ [3298]=5,
+ [3299]=5,
+ [3329]=5,
+ [3393]=5,
+ [3394]=5,
+ [3395]=5,
+ [3396]=5,
+ [3405]=5,
+ [3426]=5,
+ [3427]=5,
+ [3530]=5,
+ [3538]=5,
+ [3539]=5,
+ [3540]=5,
+ [3542]=5,
+ [3633]=5,
+ [3636]=5,
+ [3637]=5,
+ [3638]=5,
+ [3639]=5,
+ [3640]=5,
+ [3641]=5,
+ [3642]=5,
+ [3655]=5,
+ [3656]=5,
+ [3657]=5,
+ [3658]=5,
+ [3659]=5,
+ [3660]=5,
+ [3661]=5,
+ [3662]=5,
+ [3761]=5,
+ [3764]=5,
+ [3765]=5,
+ [3766]=5,
+ [3767]=5,
+ [3768]=5,
+ [3769]=5,
+ [3771]=5,
+ [3772]=5,
+ [3784]=5,
+ [3785]=5,
+ [3786]=5,
+ [3787]=5,
+ [3788]=5,
+ [3789]=5,
+ [3864]=5,
+ [3865]=5,
+ [3893]=5,
+ [3895]=5,
+ [3897]=5,
+ [3953]=5,
+ [3954]=5,
+ [3955]=5,
+ [3956]=5,
+ [3957]=5,
+ [3958]=5,
+ [3959]=5,
+ [3960]=5,
+ [3961]=5,
+ [3962]=5,
+ [3963]=5,
+ [3964]=5,
+ [3965]=5,
+ [3966]=5,
+ [3968]=5,
+ [3969]=5,
+ [3970]=5,
+ [3971]=5,
+ [3972]=5,
+ [3974]=5,
+ [3975]=5,
+ [3981]=5,
+ [3982]=5,
+ [3983]=5,
+ [3984]=5,
+ [3985]=5,
+ [3986]=5,
+ [3987]=5,
+ [3988]=5,
+ [3989]=5,
+ [3990]=5,
+ [3991]=5,
+ [3993]=5,
+ [3994]=5,
+ [3995]=5,
+ [3996]=5,
+ [3997]=5,
+ [3998]=5,
+ [3999]=5,
+ [4000]=5,
+ [4001]=5,
+ [4002]=5,
+ [4003]=5,
+ [4004]=5,
+ [4005]=5,
+ [4006]=5,
+ [4007]=5,
+ [4008]=5,
+ [4009]=5,
+ [4010]=5,
+ [4011]=5,
+ [4012]=5,
+ [4013]=5,
+ [4014]=5,
+ [4015]=5,
+ [4016]=5,
+ [4017]=5,
+ [4018]=5,
+ [4019]=5,
+ [4020]=5,
+ [4021]=5,
+ [4022]=5,
+ [4023]=5,
+ [4024]=5,
+ [4025]=5,
+ [4026]=5,
+ [4027]=5,
+ [4028]=5,
+ [4038]=5,
+ [4141]=5,
+ [4142]=5,
+ [4143]=5,
+ [4144]=5,
+ [4146]=5,
+ [4147]=5,
+ [4148]=5,
+ [4149]=5,
+ [4150]=5,
+ [4151]=5,
+ [4153]=5,
+ [4154]=5,
+ [4157]=5,
+ [4158]=5,
+ [4184]=5,
+ [4185]=5,
+ [4190]=5,
+ [4191]=5,
+ [4192]=5,
+ [4209]=5,
+ [4210]=5,
+ [4211]=5,
+ [4212]=5,
+ [4226]=5,
+ [4229]=5,
+ [4230]=5,
+ [4237]=5,
+ [4253]=5,
+ [4957]=5,
+ [4958]=5,
+ [4959]=5,
+ [5906]=5,
+ [5907]=5,
+ [5908]=5,
+ [5938]=5,
+ [5939]=5,
+ [5940]=5,
+ [5970]=5,
+ [5971]=5,
+ [6002]=5,
+ [6003]=5,
+ [6071]=5,
+ [6072]=5,
+ [6073]=5,
+ [6074]=5,
+ [6075]=5,
+ [6076]=5,
+ [6077]=5,
+ [6086]=5,
+ [6089]=5,
+ [6090]=5,
+ [6091]=5,
+ [6092]=5,
+ [6093]=5,
+ [6094]=5,
+ [6095]=5,
+ [6096]=5,
+ [6097]=5,
+ [6098]=5,
+ [6099]=5,
+ [6109]=5,
+ [6150]=4,
+ [6151]=2,
+ [6154]=2,
+ [6155]=5,
+ [6156]=5,
+ [6157]=5,
+ [6158]=4,
+ [6176]=2,
+ [6177]=2,
+ [6178]=2,
+ [6179]=2,
+ [6180]=2,
+ [6181]=2,
+ [6182]=2,
+ [6183]=2,
+ [6184]=2,
+ [6185]=2,
+ [6186]=2,
+ [6187]=2,
+ [6188]=2,
+ [6189]=2,
+ [6190]=2,
+ [6191]=2,
+ [6192]=2,
+ [6193]=2,
+ [6194]=2,
+ [6195]=2,
+ [6196]=2,
+ [6197]=2,
+ [6198]=2,
+ [6199]=2,
+ [6200]=2,
+ [6201]=2,
+ [6202]=2,
+ [6203]=2,
+ [6204]=2,
+ [6205]=2,
+ [6206]=2,
+ [6207]=2,
+ [6208]=2,
+ [6209]=2,
+ [6210]=2,
+ [6211]=2,
+ [6212]=2,
+ [6213]=2,
+ [6214]=2,
+ [6215]=2,
+ [6216]=2,
+ [6217]=2,
+ [6218]=2,
+ [6219]=2,
+ [6220]=2,
+ [6221]=2,
+ [6222]=2,
+ [6223]=2,
+ [6224]=2,
+ [6225]=2,
+ [6226]=2,
+ [6227]=2,
+ [6228]=2,
+ [6229]=2,
+ [6230]=2,
+ [6231]=2,
+ [6232]=2,
+ [6233]=2,
+ [6234]=2,
+ [6235]=2,
+ [6236]=2,
+ [6237]=2,
+ [6238]=2,
+ [6239]=2,
+ [6240]=2,
+ [6241]=2,
+ [6242]=2,
+ [6243]=2,
+ [6244]=2,
+ [6245]=2,
+ [6246]=2,
+ [6247]=2,
+ [6248]=2,
+ [6249]=2,
+ [6250]=2,
+ [6251]=2,
+ [6252]=2,
+ [6253]=2,
+ [6254]=2,
+ [6255]=2,
+ [6256]=2,
+ [6257]=2,
+ [6258]=2,
+ [6259]=2,
+ [6260]=2,
+ [6261]=2,
+ [6262]=2,
+ [6263]=2,
+ [6272]=4,
+ [6273]=4,
+ [6274]=4,
+ [6275]=4,
+ [6276]=4,
+ [6279]=2,
+ [6280]=2,
+ [6281]=2,
+ [6282]=2,
+ [6283]=2,
+ [6284]=2,
+ [6285]=2,
+ [6286]=2,
+ [6287]=2,
+ [6288]=2,
+ [6289]=2,
+ [6290]=2,
+ [6291]=2,
+ [6292]=2,
+ [6293]=2,
+ [6294]=2,
+ [6295]=2,
+ [6296]=2,
+ [6297]=2,
+ [6298]=2,
+ [6299]=2,
+ [6300]=2,
+ [6301]=2,
+ [6302]=2,
+ [6303]=2,
+ [6304]=2,
+ [6305]=2,
+ [6306]=2,
+ [6307]=2,
+ [6308]=2,
+ [6309]=2,
+ [6310]=2,
+ [6311]=2,
+ [6312]=2,
+ [6313]=5,
+ [6314]=2,
+ [6432]=5,
+ [6433]=5,
+ [6434]=5,
+ [6439]=5,
+ [6440]=5,
+ [6450]=5,
+ [6457]=5,
+ [6458]=5,
+ [6459]=5,
+ [6679]=5,
+ [6680]=5,
+ [6742]=5,
+ [6744]=5,
+ [6745]=5,
+ [6746]=5,
+ [6747]=5,
+ [6748]=5,
+ [6749]=5,
+ [6750]=5,
+ [6752]=5,
+ [6754]=5,
+ [6757]=5,
+ [6758]=5,
+ [6759]=5,
+ [6760]=5,
+ [6761]=5,
+ [6762]=5,
+ [6763]=5,
+ [6764]=5,
+ [6771]=5,
+ [6772]=5,
+ [6773]=5,
+ [6774]=5,
+ [6775]=5,
+ [6776]=5,
+ [6777]=5,
+ [6778]=5,
+ [6779]=5,
+ [6780]=5,
+ [6783]=5,
+ [6832]=5,
+ [6833]=5,
+ [6834]=5,
+ [6835]=5,
+ [6836]=5,
+ [6837]=5,
+ [6838]=5,
+ [6839]=5,
+ [6840]=5,
+ [6841]=5,
+ [6842]=5,
+ [6843]=5,
+ [6844]=5,
+ [6845]=5,
+ [6912]=5,
+ [6913]=5,
+ [6914]=5,
+ [6915]=5,
+ [6964]=5,
+ [6966]=5,
+ [6967]=5,
+ [6968]=5,
+ [6969]=5,
+ [6970]=5,
+ [6972]=5,
+ [6978]=5,
+ [7019]=5,
+ [7020]=5,
+ [7021]=5,
+ [7022]=5,
+ [7023]=5,
+ [7024]=5,
+ [7025]=5,
+ [7026]=5,
+ [7027]=5,
+ [7040]=5,
+ [7041]=5,
+ [7074]=5,
+ [7075]=5,
+ [7076]=5,
+ [7077]=5,
+ [7080]=5,
+ [7081]=5,
+ [7083]=5,
+ [7142]=5,
+ [7144]=5,
+ [7145]=5,
+ [7149]=5,
+ [7151]=5,
+ [7152]=5,
+ [7153]=5,
+ [7212]=5,
+ [7213]=5,
+ [7214]=5,
+ [7215]=5,
+ [7216]=5,
+ [7217]=5,
+ [7218]=5,
+ [7219]=5,
+ [7222]=5,
+ [7223]=5,
+ [7376]=5,
+ [7377]=5,
+ [7378]=5,
+ [7380]=5,
+ [7381]=5,
+ [7382]=5,
+ [7383]=5,
+ [7384]=5,
+ [7385]=5,
+ [7386]=5,
+ [7387]=5,
+ [7388]=5,
+ [7389]=5,
+ [7390]=5,
+ [7391]=5,
+ [7392]=5,
+ [7394]=5,
+ [7395]=5,
+ [7396]=5,
+ [7397]=5,
+ [7398]=5,
+ [7399]=5,
+ [7400]=5,
+ [7405]=5,
+ [7412]=5,
+ [7416]=5,
+ [7417]=5,
+ [7616]=5,
+ [7617]=5,
+ [7618]=5,
+ [7619]=5,
+ [7620]=5,
+ [7621]=5,
+ [7622]=5,
+ [7623]=5,
+ [7624]=5,
+ [7625]=5,
+ [7626]=5,
+ [7627]=5,
+ [7628]=5,
+ [7629]=5,
+ [7630]=5,
+ [7631]=5,
+ [7632]=5,
+ [7633]=5,
+ [7634]=5,
+ [7635]=5,
+ [7636]=5,
+ [7637]=5,
+ [7638]=5,
+ [7639]=5,
+ [7640]=5,
+ [7641]=5,
+ [7642]=5,
+ [7643]=5,
+ [7644]=5,
+ [7645]=5,
+ [7646]=5,
+ [7647]=5,
+ [7648]=5,
+ [7649]=5,
+ [7650]=5,
+ [7651]=5,
+ [7652]=5,
+ [7653]=5,
+ [7654]=5,
+ [7655]=5,
+ [7656]=5,
+ [7657]=5,
+ [7658]=5,
+ [7659]=5,
+ [7660]=5,
+ [7661]=5,
+ [7662]=5,
+ [7663]=5,
+ [7664]=5,
+ [7665]=5,
+ [7666]=5,
+ [7667]=5,
+ [7668]=5,
+ [7669]=5,
+ [7675]=5,
+ [7676]=5,
+ [7677]=5,
+ [7678]=5,
+ [7679]=5,
+ [8204]=4,
+ [8205]=2,
+ [8239]=4,
+ [8294]=4,
+ [8295]=4,
+ [8296]=4,
+ [8297]=4,
+ [8400]=5,
+ [8401]=5,
+ [8402]=5,
+ [8403]=5,
+ [8404]=5,
+ [8405]=5,
+ [8406]=5,
+ [8407]=5,
+ [8408]=5,
+ [8409]=5,
+ [8410]=5,
+ [8411]=5,
+ [8412]=5,
+ [8417]=5,
+ [8421]=5,
+ [8422]=5,
+ [8423]=5,
+ [8424]=5,
+ [8425]=5,
+ [8426]=5,
+ [8427]=5,
+ [8428]=5,
+ [8429]=5,
+ [8430]=5,
+ [8431]=5,
+ [8432]=5,
+ [11503]=5,
+ [11504]=5,
+ [11505]=5,
+ [11647]=5,
+ [11744]=5,
+ [11745]=5,
+ [11746]=5,
+ [11747]=5,
+ [11748]=5,
+ [11749]=5,
+ [11750]=5,
+ [11751]=5,
+ [11752]=5,
+ [11753]=5,
+ [11754]=5,
+ [11755]=5,
+ [11756]=5,
+ [11757]=5,
+ [11758]=5,
+ [11759]=5,
+ [11760]=5,
+ [11761]=5,
+ [11762]=5,
+ [11763]=5,
+ [11764]=5,
+ [11765]=5,
+ [11766]=5,
+ [11767]=5,
+ [11768]=5,
+ [11769]=5,
+ [11770]=5,
+ [11771]=5,
+ [11772]=5,
+ [11773]=5,
+ [11774]=5,
+ [11775]=5,
+ [12330]=5,
+ [12331]=5,
+ [12332]=5,
+ [12333]=5,
+ [12334]=5,
+ [12335]=5,
+ [12441]=5,
+ [12442]=5,
+ [42607]=5,
+ [42612]=5,
+ [42613]=5,
+ [42614]=5,
+ [42615]=5,
+ [42616]=5,
+ [42617]=5,
+ [42618]=5,
+ [42619]=5,
+ [42620]=5,
+ [42621]=5,
+ [42654]=5,
+ [42655]=5,
+ [42736]=5,
+ [42737]=5,
+ [43014]=5,
+ [43019]=5,
+ [43045]=5,
+ [43046]=5,
+ [43072]=2,
+ [43073]=2,
+ [43074]=2,
+ [43075]=2,
+ [43076]=2,
+ [43077]=2,
+ [43078]=2,
+ [43079]=2,
+ [43080]=2,
+ [43081]=2,
+ [43082]=2,
+ [43083]=2,
+ [43084]=2,
+ [43085]=2,
+ [43086]=2,
+ [43087]=2,
+ [43088]=2,
+ [43089]=2,
+ [43090]=2,
+ [43091]=2,
+ [43092]=2,
+ [43093]=2,
+ [43094]=2,
+ [43095]=2,
+ [43096]=2,
+ [43097]=2,
+ [43098]=2,
+ [43099]=2,
+ [43100]=2,
+ [43101]=2,
+ [43102]=2,
+ [43103]=2,
+ [43104]=2,
+ [43105]=2,
+ [43106]=2,
+ [43107]=2,
+ [43108]=2,
+ [43109]=2,
+ [43110]=2,
+ [43111]=2,
+ [43112]=2,
+ [43113]=2,
+ [43114]=2,
+ [43115]=2,
+ [43116]=2,
+ [43117]=2,
+ [43118]=2,
+ [43119]=2,
+ [43120]=2,
+ [43121]=2,
+ [43122]=1,
+ [43123]=4,
+ [43204]=5,
+ [43205]=5,
+ [43232]=5,
+ [43233]=5,
+ [43234]=5,
+ [43235]=5,
+ [43236]=5,
+ [43237]=5,
+ [43238]=5,
+ [43239]=5,
+ [43240]=5,
+ [43241]=5,
+ [43242]=5,
+ [43243]=5,
+ [43244]=5,
+ [43245]=5,
+ [43246]=5,
+ [43247]=5,
+ [43248]=5,
+ [43249]=5,
+ [43302]=5,
+ [43303]=5,
+ [43304]=5,
+ [43305]=5,
+ [43306]=5,
+ [43307]=5,
+ [43308]=5,
+ [43309]=5,
+ [43335]=5,
+ [43336]=5,
+ [43337]=5,
+ [43338]=5,
+ [43339]=5,
+ [43340]=5,
+ [43341]=5,
+ [43342]=5,
+ [43343]=5,
+ [43344]=5,
+ [43345]=5,
+ [43392]=5,
+ [43393]=5,
+ [43394]=5,
+ [43443]=5,
+ [43446]=5,
+ [43447]=5,
+ [43448]=5,
+ [43449]=5,
+ [43452]=5,
+ [43493]=5,
+ [43561]=5,
+ [43562]=5,
+ [43563]=5,
+ [43564]=5,
+ [43565]=5,
+ [43566]=5,
+ [43569]=5,
+ [43570]=5,
+ [43573]=5,
+ [43574]=5,
+ [43587]=5,
+ [43596]=5,
+ [43644]=5,
+ [43696]=5,
+ [43698]=5,
+ [43699]=5,
+ [43700]=5,
+ [43703]=5,
+ [43704]=5,
+ [43710]=5,
+ [43711]=5,
+ [43713]=5,
+ [43756]=5,
+ [43757]=5,
+ [43766]=5,
+ [44005]=5,
+ [44008]=5,
+ [44013]=5,
+ [64286]=5,
+ [65056]=5,
+ [65057]=5,
+ [65058]=5,
+ [65059]=5,
+ [65060]=5,
+ [65061]=5,
+ [65062]=5,
+ [65063]=5,
+ [65064]=5,
+ [65065]=5,
+ [65066]=5,
+ [65067]=5,
+ [65068]=5,
+ [65069]=5,
+ [65070]=5,
+ [65071]=5,
+ [66045]=5,
+ [66272]=5,
+ [66422]=5,
+ [66423]=5,
+ [66424]=5,
+ [66425]=5,
+ [66426]=5,
+ [68097]=5,
+ [68098]=5,
+ [68099]=5,
+ [68101]=5,
+ [68102]=5,
+ [68108]=5,
+ [68109]=5,
+ [68110]=5,
+ [68111]=5,
+ [68152]=5,
+ [68153]=5,
+ [68154]=5,
+ [68159]=5,
+ [68288]=2,
+ [68289]=2,
+ [68290]=2,
+ [68291]=2,
+ [68292]=2,
+ [68293]=3,
+ [68294]=4,
+ [68295]=3,
+ [68296]=4,
+ [68297]=3,
+ [68298]=3,
+ [68299]=4,
+ [68300]=4,
+ [68301]=1,
+ [68302]=3,
+ [68303]=3,
+ [68304]=3,
+ [68305]=3,
+ [68306]=3,
+ [68307]=2,
+ [68308]=2,
+ [68309]=2,
+ [68310]=2,
+ [68311]=1,
+ [68312]=2,
+ [68313]=2,
+ [68314]=2,
+ [68315]=2,
+ [68316]=2,
+ [68317]=3,
+ [68318]=2,
+ [68319]=2,
+ [68320]=2,
+ [68321]=3,
+ [68322]=4,
+ [68323]=4,
+ [68324]=3,
+ [68325]=5,
+ [68326]=5,
+ [68331]=2,
+ [68332]=2,
+ [68333]=2,
+ [68334]=2,
+ [68335]=3,
+ [68480]=2,
+ [68481]=3,
+ [68482]=2,
+ [68483]=3,
+ [68484]=3,
+ [68485]=3,
+ [68486]=2,
+ [68487]=2,
+ [68488]=2,
+ [68489]=3,
+ [68490]=2,
+ [68491]=2,
+ [68492]=3,
+ [68493]=2,
+ [68494]=3,
+ [68495]=3,
+ [68496]=2,
+ [68497]=3,
+ [68521]=3,
+ [68522]=3,
+ [68523]=3,
+ [68524]=3,
+ [68525]=2,
+ [68526]=2,
+ [68527]=4,
+ [69633]=5,
+ [69688]=5,
+ [69689]=5,
+ [69690]=5,
+ [69691]=5,
+ [69692]=5,
+ [69693]=5,
+ [69694]=5,
+ [69695]=5,
+ [69696]=5,
+ [69697]=5,
+ [69698]=5,
+ [69699]=5,
+ [69700]=5,
+ [69701]=5,
+ [69702]=5,
+ [69759]=5,
+ [69760]=5,
+ [69761]=5,
+ [69811]=5,
+ [69812]=5,
+ [69813]=5,
+ [69814]=5,
+ [69817]=5,
+ [69818]=5,
+ [69888]=5,
+ [69889]=5,
+ [69890]=5,
+ [69927]=5,
+ [69928]=5,
+ [69929]=5,
+ [69930]=5,
+ [69931]=5,
+ [69933]=5,
+ [69934]=5,
+ [69935]=5,
+ [69936]=5,
+ [69937]=5,
+ [69938]=5,
+ [69939]=5,
+ [69940]=5,
+ [70003]=5,
+ [70016]=5,
+ [70017]=5,
+ [70070]=5,
+ [70071]=5,
+ [70072]=5,
+ [70073]=5,
+ [70074]=5,
+ [70075]=5,
+ [70076]=5,
+ [70077]=5,
+ [70078]=5,
+ [70090]=5,
+ [70091]=5,
+ [70092]=5,
+ [70191]=5,
+ [70192]=5,
+ [70193]=5,
+ [70196]=5,
+ [70198]=5,
+ [70199]=5,
+ [70206]=5,
+ [70367]=5,
+ [70371]=5,
+ [70372]=5,
+ [70373]=5,
+ [70374]=5,
+ [70375]=5,
+ [70376]=5,
+ [70377]=5,
+ [70378]=5,
+ [70400]=5,
+ [70401]=5,
+ [70460]=5,
+ [70464]=5,
+ [70502]=5,
+ [70503]=5,
+ [70504]=5,
+ [70505]=5,
+ [70506]=5,
+ [70507]=5,
+ [70508]=5,
+ [70512]=5,
+ [70513]=5,
+ [70514]=5,
+ [70515]=5,
+ [70516]=5,
+ [70712]=5,
+ [70713]=5,
+ [70714]=5,
+ [70715]=5,
+ [70716]=5,
+ [70717]=5,
+ [70718]=5,
+ [70719]=5,
+ [70722]=5,
+ [70723]=5,
+ [70724]=5,
+ [70726]=5,
+ [70835]=5,
+ [70836]=5,
+ [70837]=5,
+ [70838]=5,
+ [70839]=5,
+ [70840]=5,
+ [70842]=5,
+ [70847]=5,
+ [70848]=5,
+ [70850]=5,
+ [70851]=5,
+ [71090]=5,
+ [71091]=5,
+ [71092]=5,
+ [71093]=5,
+ [71100]=5,
+ [71101]=5,
+ [71103]=5,
+ [71104]=5,
+ [71132]=5,
+ [71133]=5,
+ [71219]=5,
+ [71220]=5,
+ [71221]=5,
+ [71222]=5,
+ [71223]=5,
+ [71224]=5,
+ [71225]=5,
+ [71226]=5,
+ [71229]=5,
+ [71231]=5,
+ [71232]=5,
+ [71339]=5,
+ [71341]=5,
+ [71344]=5,
+ [71345]=5,
+ [71346]=5,
+ [71347]=5,
+ [71348]=5,
+ [71349]=5,
+ [71351]=5,
+ [71453]=5,
+ [71454]=5,
+ [71455]=5,
+ [71458]=5,
+ [71459]=5,
+ [71460]=5,
+ [71461]=5,
+ [71463]=5,
+ [71464]=5,
+ [71465]=5,
+ [71466]=5,
+ [71467]=5,
+ [72752]=5,
+ [72753]=5,
+ [72754]=5,
+ [72755]=5,
+ [72756]=5,
+ [72757]=5,
+ [72758]=5,
+ [72760]=5,
+ [72761]=5,
+ [72762]=5,
+ [72763]=5,
+ [72764]=5,
+ [72765]=5,
+ [72767]=5,
+ [72850]=5,
+ [72851]=5,
+ [72852]=5,
+ [72853]=5,
+ [72854]=5,
+ [72855]=5,
+ [72856]=5,
+ [72857]=5,
+ [72858]=5,
+ [72859]=5,
+ [72860]=5,
+ [72861]=5,
+ [72862]=5,
+ [72863]=5,
+ [72864]=5,
+ [72865]=5,
+ [72866]=5,
+ [72867]=5,
+ [72868]=5,
+ [72869]=5,
+ [72870]=5,
+ [72871]=5,
+ [72874]=5,
+ [72875]=5,
+ [72876]=5,
+ [72877]=5,
+ [72878]=5,
+ [72879]=5,
+ [72880]=5,
+ [72882]=5,
+ [72883]=5,
+ [72885]=5,
+ [72886]=5,
+ [92912]=5,
+ [92913]=5,
+ [92914]=5,
+ [92915]=5,
+ [92916]=5,
+ [92976]=5,
+ [92977]=5,
+ [92978]=5,
+ [92979]=5,
+ [92980]=5,
+ [92981]=5,
+ [92982]=5,
+ [94095]=5,
+ [94096]=5,
+ [94097]=5,
+ [94098]=5,
+ [113821]=5,
+ [113822]=5,
+ [119143]=5,
+ [119144]=5,
+ [119145]=5,
+ [119163]=5,
+ [119164]=5,
+ [119165]=5,
+ [119166]=5,
+ [119167]=5,
+ [119168]=5,
+ [119169]=5,
+ [119170]=5,
+ [119173]=5,
+ [119174]=5,
+ [119175]=5,
+ [119176]=5,
+ [119177]=5,
+ [119178]=5,
+ [119179]=5,
+ [119210]=5,
+ [119211]=5,
+ [119212]=5,
+ [119213]=5,
+ [119362]=5,
+ [119363]=5,
+ [119364]=5,
+ [121344]=5,
+ [121345]=5,
+ [121346]=5,
+ [121347]=5,
+ [121348]=5,
+ [121349]=5,
+ [121350]=5,
+ [121351]=5,
+ [121352]=5,
+ [121353]=5,
+ [121354]=5,
+ [121355]=5,
+ [121356]=5,
+ [121357]=5,
+ [121358]=5,
+ [121359]=5,
+ [121360]=5,
+ [121361]=5,
+ [121362]=5,
+ [121363]=5,
+ [121364]=5,
+ [121365]=5,
+ [121366]=5,
+ [121367]=5,
+ [121368]=5,
+ [121369]=5,
+ [121370]=5,
+ [121371]=5,
+ [121372]=5,
+ [121373]=5,
+ [121374]=5,
+ [121375]=5,
+ [121376]=5,
+ [121377]=5,
+ [121378]=5,
+ [121379]=5,
+ [121380]=5,
+ [121381]=5,
+ [121382]=5,
+ [121383]=5,
+ [121384]=5,
+ [121385]=5,
+ [121386]=5,
+ [121387]=5,
+ [121388]=5,
+ [121389]=5,
+ [121390]=5,
+ [121391]=5,
+ [121392]=5,
+ [121393]=5,
+ [121394]=5,
+ [121395]=5,
+ [121396]=5,
+ [121397]=5,
+ [121398]=5,
+ [121403]=5,
+ [121404]=5,
+ [121405]=5,
+ [121406]=5,
+ [121407]=5,
+ [121408]=5,
+ [121409]=5,
+ [121410]=5,
+ [121411]=5,
+ [121412]=5,
+ [121413]=5,
+ [121414]=5,
+ [121415]=5,
+ [121416]=5,
+ [121417]=5,
+ [121418]=5,
+ [121419]=5,
+ [121420]=5,
+ [121421]=5,
+ [121422]=5,
+ [121423]=5,
+ [121424]=5,
+ [121425]=5,
+ [121426]=5,
+ [121427]=5,
+ [121428]=5,
+ [121429]=5,
+ [121430]=5,
+ [121431]=5,
+ [121432]=5,
+ [121433]=5,
+ [121434]=5,
+ [121435]=5,
+ [121436]=5,
+ [121437]=5,
+ [121438]=5,
+ [121439]=5,
+ [121440]=5,
+ [121441]=5,
+ [121442]=5,
+ [121443]=5,
+ [121444]=5,
+ [121445]=5,
+ [121446]=5,
+ [121447]=5,
+ [121448]=5,
+ [121449]=5,
+ [121450]=5,
+ [121451]=5,
+ [121452]=5,
+ [121461]=5,
+ [121476]=5,
+ [121499]=5,
+ [121500]=5,
+ [121501]=5,
+ [121502]=5,
+ [121503]=5,
+ [121505]=5,
+ [121506]=5,
+ [121507]=5,
+ [121508]=5,
+ [121509]=5,
+ [121510]=5,
+ [121511]=5,
+ [121512]=5,
+ [121513]=5,
+ [121514]=5,
+ [121515]=5,
+ [121516]=5,
+ [121517]=5,
+ [121518]=5,
+ [121519]=5,
+ [122880]=5,
+ [122881]=5,
+ [122882]=5,
+ [122883]=5,
+ [122884]=5,
+ [122885]=5,
+ [122886]=5,
+ [122888]=5,
+ [122889]=5,
+ [122890]=5,
+ [122891]=5,
+ [122892]=5,
+ [122893]=5,
+ [122894]=5,
+ [122895]=5,
+ [122896]=5,
+ [122897]=5,
+ [122898]=5,
+ [122899]=5,
+ [122900]=5,
+ [122901]=5,
+ [122902]=5,
+ [122903]=5,
+ [122904]=5,
+ [122907]=5,
+ [122908]=5,
+ [122909]=5,
+ [122910]=5,
+ [122911]=5,
+ [122912]=5,
+ [122913]=5,
+ [122915]=5,
+ [122916]=5,
+ [122918]=5,
+ [122919]=5,
+ [122920]=5,
+ [122921]=5,
+ [122922]=5,
+ [125136]=5,
+ [125137]=5,
+ [125138]=5,
+ [125139]=5,
+ [125140]=5,
+ [125141]=5,
+ [125142]=5,
+ [125184]=2,
+ [125185]=2,
+ [125186]=2,
+ [125187]=2,
+ [125188]=2,
+ [125189]=2,
+ [125190]=2,
+ [125191]=2,
+ [125192]=2,
+ [125193]=2,
+ [125194]=2,
+ [125195]=2,
+ [125196]=2,
+ [125197]=2,
+ [125198]=2,
+ [125199]=2,
+ [125200]=2,
+ [125201]=2,
+ [125202]=2,
+ [125203]=2,
+ [125204]=2,
+ [125205]=2,
+ [125206]=2,
+ [125207]=2,
+ [125208]=2,
+ [125209]=2,
+ [125210]=2,
+ [125211]=2,
+ [125212]=2,
+ [125213]=2,
+ [125214]=2,
+ [125215]=2,
+ [125216]=2,
+ [125217]=2,
+ [125218]=2,
+ [125219]=2,
+ [125220]=2,
+ [125221]=2,
+ [125222]=2,
+ [125223]=2,
+ [125224]=2,
+ [125225]=2,
+ [125226]=2,
+ [125227]=2,
+ [125228]=2,
+ [125229]=2,
+ [125230]=2,
+ [125231]=2,
+ [125232]=2,
+ [125233]=2,
+ [125234]=2,
+ [125235]=2,
+ [125236]=2,
+ [125237]=2,
+ [125238]=2,
+ [125239]=2,
+ [125240]=2,
+ [125241]=2,
+ [125242]=2,
+ [125243]=2,
+ [125244]=2,
+ [125245]=2,
+ [125246]=2,
+ [125247]=2,
+ [125248]=2,
+ [125249]=2,
+ [125250]=2,
+ [125251]=2,
+ [125252]=5,
+ [125253]=5,
+ [125254]=5,
+ [125255]=5,
+ [125256]=5,
+ [125257]=5,
+ [125258]=5,
+ [1042752]=5,
+}
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-ini']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local allocate=utilities.storage.allocate
+fonts=fonts or {}
+local fonts=fonts
+fonts.hashes={ identifiers=allocate() }
+fonts.tables=fonts.tables or {}
+fonts.helpers=fonts.helpers or {}
+fonts.tracers=fonts.tracers or {}
+fonts.specifiers=fonts.specifiers or {}
+fonts.analyzers={}
+fonts.readers={}
+fonts.definers={ methods={} }
+fonts.loggers={ register=function() end }
+if context then
+ fontloader=nil
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-con']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local next,tostring,rawget=next,tostring,rawget
+local format,match,lower,gsub,find=string.format,string.match,string.lower,string.gsub,string.find
+local sort,insert,concat=table.sort,table.insert,table.concat
+local sortedkeys,sortedhash,serialize,fastcopy=table.sortedkeys,table.sortedhash,table.serialize,table.fastcopy
+local derivetable=table.derive
+local ioflush=io.flush
+local trace_defining=false trackers.register("fonts.defining",function(v) trace_defining=v end)
+local trace_scaling=false trackers.register("fonts.scaling",function(v) trace_scaling=v end)
+local report_defining=logs.reporter("fonts","defining")
+local fonts=fonts
+local constructors=fonts.constructors or {}
+fonts.constructors=constructors
+local handlers=fonts.handlers or {}
+fonts.handlers=handlers
+local allocate=utilities.storage.allocate
+local setmetatableindex=table.setmetatableindex
+constructors.dontembed=allocate()
+constructors.autocleanup=true
+constructors.namemode="fullpath"
+constructors.version=1.01
+constructors.cache=containers.define("fonts","constructors",constructors.version,false)
+constructors.privateoffset=0xF0000
+constructors.cacheintex=true
+local designsizes=allocate()
+constructors.designsizes=designsizes
+local loadedfonts=allocate()
+constructors.loadedfonts=loadedfonts
+local factors={
+ pt=65536.0,
+ bp=65781.8,
+}
+function constructors.setfactor(f)
+ constructors.factor=factors[f or 'pt'] or factors.pt
+end
+constructors.setfactor()
+function constructors.scaled(scaledpoints,designsize)
+ if scaledpoints<0 then
+ local factor=constructors.factor
+ if designsize then
+ if designsize>factor then
+ return (- scaledpoints/1000)*designsize
+ else
+ return (- scaledpoints/1000)*designsize*factor
+ end
+ else
+ return (- scaledpoints/1000)*10*factor
+ end
+ else
+ return scaledpoints
+ end
+end
+function constructors.getprivate(tfmdata)
+ local properties=tfmdata.properties
+ local private=properties.private
+ properties.private=private+1
+ return private
+end
+function constructors.cleanuptable(tfmdata)
+ if constructors.autocleanup and tfmdata.properties.virtualized then
+ for k,v in next,tfmdata.characters do
+ if v.commands then v.commands=nil end
+ end
+ end
+end
+function constructors.calculatescale(tfmdata,scaledpoints)
+ local parameters=tfmdata.parameters
+ if scaledpoints<0 then
+ scaledpoints=(- scaledpoints/1000)*(tfmdata.designsize or parameters.designsize)
+ end
+ return scaledpoints,scaledpoints/(parameters.units or 1000)
+end
+local unscaled={
+ ScriptPercentScaleDown=true,
+ ScriptScriptPercentScaleDown=true,
+ RadicalDegreeBottomRaisePercent=true,
+ NoLimitSupFactor=true,
+ NoLimitSubFactor=true,
+}
+function constructors.assignmathparameters(target,original)
+ local mathparameters=original.mathparameters
+ if mathparameters and next(mathparameters) then
+ local targetparameters=target.parameters
+ local targetproperties=target.properties
+ local targetmathparameters={}
+ local factor=targetproperties.math_is_scaled and 1 or targetparameters.factor
+ for name,value in next,mathparameters do
+ if unscaled[name] then
+ targetmathparameters[name]=value
+ else
+ targetmathparameters[name]=value*factor
+ end
+ end
+ if not targetmathparameters.FractionDelimiterSize then
+ targetmathparameters.FractionDelimiterSize=1.01*targetparameters.size
+ end
+ if not mathparameters.FractionDelimiterDisplayStyleSize then
+ targetmathparameters.FractionDelimiterDisplayStyleSize=2.40*targetparameters.size
+ end
+ target.mathparameters=targetmathparameters
+ end
+end
+function constructors.beforecopyingcharacters(target,original)
+end
+function constructors.aftercopyingcharacters(target,original)
+end
+constructors.sharefonts=false
+constructors.nofsharedfonts=0
+local sharednames={}
+function constructors.trytosharefont(target,tfmdata)
+ if constructors.sharefonts then
+ local characters=target.characters
+ local n=1
+ local t={ target.psname }
+ local u=sortedkeys(characters)
+ for i=1,#u do
+ local k=u[i]
+ n=n+1;t[n]=k
+ n=n+1;t[n]=characters[k].index or k
+ end
+ local h=md5.HEX(concat(t," "))
+ local s=sharednames[h]
+ if s then
+ if trace_defining then
+ report_defining("font %a uses backend resources of font %a",target.fullname,s)
+ end
+ target.fullname=s
+ constructors.nofsharedfonts=constructors.nofsharedfonts+1
+ target.properties.sharedwith=s
+ else
+ sharednames[h]=target.fullname
+ end
+ end
+end
+function constructors.enhanceparameters(parameters)
+ local xheight=parameters.x_height
+ local quad=parameters.quad
+ local space=parameters.space
+ local stretch=parameters.space_stretch
+ local shrink=parameters.space_shrink
+ local extra=parameters.extra_space
+ local slant=parameters.slant
+ parameters.xheight=xheight
+ parameters.spacestretch=stretch
+ parameters.spaceshrink=shrink
+ parameters.extraspace=extra
+ parameters.em=quad
+ parameters.ex=xheight
+ parameters.slantperpoint=slant
+ parameters.spacing={
+ width=space,
+ stretch=stretch,
+ shrink=shrink,
+ extra=extra,
+ }
+end
+local function mathkerns(v,vdelta)
+ local k={}
+ for i=1,#v do
+ local entry=v[i]
+ local height=entry.height
+ local kern=entry.kern
+ k[i]={
+ height=height and vdelta*height or 0,
+ kern=kern and vdelta*kern or 0,
+ }
+ end
+ return k
+end
+local psfake=0
+local function fixedpsname(psname,fallback)
+ local usedname=psname
+ if psname and psname~="" then
+ if find(psname," ") then
+ usedname=gsub(psname,"[%s]+","-")
+ else
+ end
+ elseif not fallback or fallback=="" then
+ psfake=psfake+1
+ psname="fakename-"..psfake
+ else
+ psname=fallback
+ usedname=gsub(psname,"[^a-zA-Z0-9]+","-")
+ end
+ return usedname,psname~=usedname
+end
+function constructors.scale(tfmdata,specification)
+ local target={}
+ if tonumber(specification) then
+ specification={ size=specification }
+ end
+ target.specification=specification
+ local scaledpoints=specification.size
+ local relativeid=specification.relativeid
+ local properties=tfmdata.properties or {}
+ local goodies=tfmdata.goodies or {}
+ local resources=tfmdata.resources or {}
+ local descriptions=tfmdata.descriptions or {}
+ local characters=tfmdata.characters or {}
+ local changed=tfmdata.changed or {}
+ local shared=tfmdata.shared or {}
+ local parameters=tfmdata.parameters or {}
+ local mathparameters=tfmdata.mathparameters or {}
+ local targetcharacters={}
+ local targetdescriptions=derivetable(descriptions)
+ local targetparameters=derivetable(parameters)
+ local targetproperties=derivetable(properties)
+ local targetgoodies=goodies
+ target.characters=targetcharacters
+ target.descriptions=targetdescriptions
+ target.parameters=targetparameters
+ target.properties=targetproperties
+ target.goodies=targetgoodies
+ target.shared=shared
+ target.resources=resources
+ target.unscaled=tfmdata
+ local mathsize=tonumber(specification.mathsize) or 0
+ local textsize=tonumber(specification.textsize) or scaledpoints
+ local forcedsize=tonumber(parameters.mathsize ) or 0
+ local extrafactor=tonumber(specification.factor ) or 1
+ if (mathsize==2 or forcedsize==2) and parameters.scriptpercentage then
+ scaledpoints=parameters.scriptpercentage*textsize/100
+ elseif (mathsize==3 or forcedsize==3) and parameters.scriptscriptpercentage then
+ scaledpoints=parameters.scriptscriptpercentage*textsize/100
+ elseif forcedsize>1000 then
+ scaledpoints=forcedsize
+ else
+ end
+ targetparameters.mathsize=mathsize
+ targetparameters.textsize=textsize
+ targetparameters.forcedsize=forcedsize
+ targetparameters.extrafactor=extrafactor
+ local tounicode=fonts.mappings.tounicode
+ local defaultwidth=resources.defaultwidth or 0
+ local defaultheight=resources.defaultheight or 0
+ local defaultdepth=resources.defaultdepth or 0
+ local units=parameters.units or 1000
+ targetproperties.language=properties.language or "dflt"
+ targetproperties.script=properties.script or "dflt"
+ targetproperties.mode=properties.mode or "base"
+ local askedscaledpoints=scaledpoints
+ local scaledpoints,delta=constructors.calculatescale(tfmdata,scaledpoints,nil,specification)
+ local hdelta=delta
+ local vdelta=delta
+ target.designsize=parameters.designsize
+ target.units=units
+ target.units_per_em=units
+ local direction=properties.direction or tfmdata.direction or 0
+ target.direction=direction
+ properties.direction=direction
+ target.size=scaledpoints
+ target.encodingbytes=properties.encodingbytes or 1
+ target.embedding=properties.embedding or "subset"
+ target.tounicode=1
+ target.cidinfo=properties.cidinfo
+ target.format=properties.format
+ target.cache=constructors.cacheintex and "yes" or "renew"
+ local fontname=properties.fontname or tfmdata.fontname
+ local fullname=properties.fullname or tfmdata.fullname
+ local filename=properties.filename or tfmdata.filename
+ local psname=properties.psname or tfmdata.psname
+ local name=properties.name or tfmdata.name
+ local psname,psfixed=fixedpsname(psname,fontname or fullname or file.nameonly(filename))
+ target.fontname=fontname
+ target.fullname=fullname
+ target.filename=filename
+ target.psname=psname
+ target.name=name
+ properties.fontname=fontname
+ properties.fullname=fullname
+ properties.filename=filename
+ properties.psname=psname
+ properties.name=name
+ local expansion=parameters.expansion
+ if expansion then
+ target.stretch=expansion.stretch
+ target.shrink=expansion.shrink
+ target.step=expansion.step
+ end
+ local extendfactor=parameters.extendfactor or 0
+ if extendfactor~=0 and extendfactor~=1 then
+ hdelta=hdelta*extendfactor
+ target.extend=extendfactor*1000
+ else
+ target.extend=1000
+ end
+ local slantfactor=parameters.slantfactor or 0
+ if slantfactor~=0 then
+ target.slant=slantfactor*1000
+ else
+ target.slant=0
+ end
+ targetparameters.factor=delta
+ targetparameters.hfactor=hdelta
+ targetparameters.vfactor=vdelta
+ targetparameters.size=scaledpoints
+ targetparameters.units=units
+ targetparameters.scaledpoints=askedscaledpoints
+ local isvirtual=properties.virtualized or tfmdata.type=="virtual"
+ local hasquality=parameters.expansion or parameters.protrusion
+ local hasitalics=properties.hasitalics
+ local autoitalicamount=properties.autoitalicamount
+ local stackmath=not properties.nostackmath
+ local nonames=properties.noglyphnames
+ local haskerns=properties.haskerns or properties.mode=="base"
+ local hasligatures=properties.hasligatures or properties.mode=="base"
+ local realdimensions=properties.realdimensions
+ local writingmode=properties.writingmode or "horizontal"
+ local identity=properties.identity or "horizontal"
+ local vfonts=target.fonts
+ if vfonts and #vfonts>0 then
+ target.fonts=fastcopy(vfonts)
+ elseif isvirtual then
+ target.fonts={ { id=0 } }
+ end
+ if changed and not next(changed) then
+ changed=false
+ end
+ target.type=isvirtual and "virtual" or "real"
+ target.writingmode=writingmode=="vertical" and "vertical" or "horizontal"
+ target.identity=identity=="vertical" and "vertical" or "horizontal"
+ target.postprocessors=tfmdata.postprocessors
+ local targetslant=(parameters.slant or parameters[1] or 0)*factors.pt
+ local targetspace=(parameters.space or parameters[2] or 0)*hdelta
+ local targetspace_stretch=(parameters.space_stretch or parameters[3] or 0)*hdelta
+ local targetspace_shrink=(parameters.space_shrink or parameters[4] or 0)*hdelta
+ local targetx_height=(parameters.x_height or parameters[5] or 0)*vdelta
+ local targetquad=(parameters.quad or parameters[6] or 0)*hdelta
+ local targetextra_space=(parameters.extra_space or parameters[7] or 0)*hdelta
+ targetparameters.slant=targetslant
+ targetparameters.space=targetspace
+ targetparameters.space_stretch=targetspace_stretch
+ targetparameters.space_shrink=targetspace_shrink
+ targetparameters.x_height=targetx_height
+ targetparameters.quad=targetquad
+ targetparameters.extra_space=targetextra_space
+ local ascender=parameters.ascender
+ if ascender then
+ targetparameters.ascender=delta*ascender
+ end
+ local descender=parameters.descender
+ if descender then
+ targetparameters.descender=delta*descender
+ end
+ constructors.enhanceparameters(targetparameters)
+ local protrusionfactor=(targetquad~=0 and 1000/targetquad) or 0
+ local scaledwidth=defaultwidth*hdelta
+ local scaledheight=defaultheight*vdelta
+ local scaleddepth=defaultdepth*vdelta
+ local hasmath=(properties.hasmath or next(mathparameters)) and true
+ if hasmath then
+ constructors.assignmathparameters(target,tfmdata)
+ properties.hasmath=true
+ target.nomath=false
+ target.MathConstants=target.mathparameters
+ else
+ properties.hasmath=false
+ target.nomath=true
+ target.mathparameters=nil
+ end
+ if hasmath then
+ local mathitalics=properties.mathitalics
+ if mathitalics==false then
+ if trace_defining then
+ report_defining("%s italics %s for font %a, fullname %a, filename %a","math",hasitalics and "ignored" or "disabled",name,fullname,filename)
+ end
+ hasitalics=false
+ autoitalicamount=false
+ end
+ else
+ local textitalics=properties.textitalics
+ if textitalics==false then
+ if trace_defining then
+ report_defining("%s italics %s for font %a, fullname %a, filename %a","text",hasitalics and "ignored" or "disabled",name,fullname,filename)
+ end
+ hasitalics=false
+ autoitalicamount=false
+ end
+ end
+ if trace_defining then
+ report_defining("defining tfm, name %a, fullname %a, filename %a, %spsname %a, hscale %a, vscale %a, math %a, italics %a",
+ name,fullname,filename,psfixed and "(fixed) " or "",psname,hdelta,vdelta,
+ hasmath and "enabled" or "disabled",hasitalics and "enabled" or "disabled")
+ end
+ constructors.beforecopyingcharacters(target,tfmdata)
+ local sharedkerns={}
+ for unicode,character in next,characters do
+ local chr,description,index
+ if changed then
+ local c=changed[unicode]
+ if c and c~=unicode then
+ if c then
+ description=descriptions[c] or descriptions[unicode] or character
+ character=characters[c] or character
+ index=description.index or c
+ else
+ description=descriptions[unicode] or character
+ index=description.index or unicode
+ end
+ else
+ description=descriptions[unicode] or character
+ index=description.index or unicode
+ end
+ else
+ description=descriptions[unicode] or character
+ index=description.index or unicode
+ end
+ local width=description.width
+ local height=description.height
+ local depth=description.depth
+ if realdimensions then
+ if not height or height==0 then
+ local bb=description.boundingbox
+ local ht=bb[4]
+ if ht~=0 then
+ height=ht
+ end
+ if not depth or depth==0 then
+ local dp=-bb[2]
+ if dp~=0 then
+ depth=dp
+ end
+ end
+ elseif not depth or depth==0 then
+ local dp=-description.boundingbox[2]
+ if dp~=0 then
+ depth=dp
+ end
+ end
+ end
+ if width then width=hdelta*width else width=scaledwidth end
+ if height then height=vdelta*height else height=scaledheight end
+ if depth and depth~=0 then
+ depth=delta*depth
+ if nonames then
+ chr={
+ index=index,
+ height=height,
+ depth=depth,
+ width=width,
+ }
+ else
+ chr={
+ name=description.name,
+ index=index,
+ height=height,
+ depth=depth,
+ width=width,
+ }
+ end
+ else
+ if nonames then
+ chr={
+ index=index,
+ height=height,
+ width=width,
+ }
+ else
+ chr={
+ name=description.name,
+ index=index,
+ height=height,
+ width=width,
+ }
+ end
+ end
+ local isunicode=description.unicode
+ if isunicode then
+ chr.unicode=isunicode
+ chr.tounicode=tounicode(isunicode)
+ end
+ if hasquality then
+ local ve=character.expansion_factor
+ if ve then
+ chr.expansion_factor=ve*1000
+ end
+ local vl=character.left_protruding
+ if vl then
+ chr.left_protruding=protrusionfactor*width*vl
+ end
+ local vr=character.right_protruding
+ if vr then
+ chr.right_protruding=protrusionfactor*width*vr
+ end
+ end
+ if hasmath then
+ local vn=character.next
+ if vn then
+ chr.next=vn
+ else
+ local vv=character.vert_variants
+ if vv then
+ local t={}
+ for i=1,#vv do
+ local vvi=vv[i]
+ t[i]={
+ ["start"]=(vvi["start"] or 0)*vdelta,
+ ["end"]=(vvi["end"] or 0)*vdelta,
+ ["advance"]=(vvi["advance"] or 0)*vdelta,
+ ["extender"]=vvi["extender"],
+ ["glyph"]=vvi["glyph"],
+ }
+ end
+ chr.vert_variants=t
+ else
+ local hv=character.horiz_variants
+ if hv then
+ local t={}
+ for i=1,#hv do
+ local hvi=hv[i]
+ t[i]={
+ ["start"]=(hvi["start"] or 0)*hdelta,
+ ["end"]=(hvi["end"] or 0)*hdelta,
+ ["advance"]=(hvi["advance"] or 0)*hdelta,
+ ["extender"]=hvi["extender"],
+ ["glyph"]=hvi["glyph"],
+ }
+ end
+ chr.horiz_variants=t
+ end
+ end
+ end
+ local vi=character.vert_italic
+ if vi and vi~=0 then
+ chr.vert_italic=vi*hdelta
+ end
+ local va=character.accent
+ if va then
+ chr.top_accent=vdelta*va
+ end
+ if stackmath then
+ local mk=character.mathkerns
+ if mk then
+ local tr,tl,br,bl=mk.topright,mk.topleft,mk.bottomright,mk.bottomleft
+ chr.mathkern={
+ top_right=tr and mathkerns(tr,vdelta) or nil,
+ top_left=tl and mathkerns(tl,vdelta) or nil,
+ bottom_right=br and mathkerns(br,vdelta) or nil,
+ bottom_left=bl and mathkerns(bl,vdelta) or nil,
+ }
+ end
+ end
+ if hasitalics then
+ local vi=character.italic
+ if vi and vi~=0 then
+ chr.italic=vi*hdelta
+ end
+ end
+ elseif autoitalicamount then
+ local vi=description.italic
+ if not vi then
+ local bb=description.boundingbox
+ if bb then
+ local vi=bb[3]-description.width+autoitalicamount
+ if vi>0 then
+ chr.italic=vi*hdelta
+ end
+ else
+ end
+ elseif vi~=0 then
+ chr.italic=vi*hdelta
+ end
+ elseif hasitalics then
+ local vi=character.italic
+ if vi and vi~=0 then
+ chr.italic=vi*hdelta
+ end
+ end
+ if haskerns then
+ local vk=character.kerns
+ if vk then
+ local s=sharedkerns[vk]
+ if not s then
+ s={}
+ for k,v in next,vk do s[k]=v*hdelta end
+ sharedkerns[vk]=s
+ end
+ chr.kerns=s
+ end
+ end
+ if hasligatures then
+ local vl=character.ligatures
+ if vl then
+ if true then
+ chr.ligatures=vl
+ else
+ local tt={}
+ for i,l in next,vl do
+ tt[i]=l
+ end
+ chr.ligatures=tt
+ end
+ end
+ end
+ if isvirtual then
+ local vc=character.commands
+ if vc then
+ local ok=false
+ for i=1,#vc do
+ local key=vc[i][1]
+ if key=="right" or key=="down" then
+ ok=true
+ break
+ end
+ end
+ if ok then
+ local tt={}
+ for i=1,#vc do
+ local ivc=vc[i]
+ local key=ivc[1]
+ if key=="right" then
+ tt[i]={ key,ivc[2]*hdelta }
+ elseif key=="down" then
+ tt[i]={ key,ivc[2]*vdelta }
+ elseif key=="rule" then
+ tt[i]={ key,ivc[2]*vdelta,ivc[3]*hdelta }
+ else
+ tt[i]=ivc
+ end
+ end
+ chr.commands=tt
+ else
+ chr.commands=vc
+ end
+ chr.index=nil
+ end
+ end
+ targetcharacters[unicode]=chr
+ end
+ properties.setitalics=hasitalics
+ constructors.aftercopyingcharacters(target,tfmdata)
+ constructors.trytosharefont(target,tfmdata)
+ local vfonts=target.fonts
+ if isvirtual then
+ if not vfonts or #vfonts==0 then
+ target.fonts={ { id=0 } }
+ end
+ elseif vfonts then
+ properties.virtualized=true
+ target.type="virtual"
+ if #vfonts==0 then
+ target.fonts={ { id=0 } }
+ end
+ end
+ return target
+end
+function constructors.finalize(tfmdata)
+ if tfmdata.properties and tfmdata.properties.finalized then
+ return
+ end
+ if not tfmdata.characters then
+ return nil
+ end
+ if not tfmdata.goodies then
+ tfmdata.goodies={}
+ end
+ local parameters=tfmdata.parameters
+ if not parameters then
+ return nil
+ end
+ if not parameters.expansion then
+ parameters.expansion={
+ stretch=tfmdata.stretch or 0,
+ shrink=tfmdata.shrink or 0,
+ step=tfmdata.step or 0,
+ }
+ end
+ if not parameters.size then
+ parameters.size=tfmdata.size
+ end
+ if not parameters.extendfactor then
+ parameters.extendfactor=tfmdata.extend or 0
+ end
+ if not parameters.slantfactor then
+ parameters.slantfactor=tfmdata.slant or 0
+ end
+ local designsize=parameters.designsize
+ if designsize then
+ parameters.minsize=tfmdata.minsize or designsize
+ parameters.maxsize=tfmdata.maxsize or designsize
+ else
+ designsize=factors.pt*10
+ parameters.designsize=designsize
+ parameters.minsize=designsize
+ parameters.maxsize=designsize
+ end
+ parameters.minsize=tfmdata.minsize or parameters.designsize
+ parameters.maxsize=tfmdata.maxsize or parameters.designsize
+ if not parameters.units then
+ parameters.units=tfmdata.units or tfmdata.units_per_em or 1000
+ end
+ if not tfmdata.descriptions then
+ local descriptions={}
+ setmetatableindex(descriptions,function(t,k) local v={} t[k]=v return v end)
+ tfmdata.descriptions=descriptions
+ end
+ local properties=tfmdata.properties
+ if not properties then
+ properties={}
+ tfmdata.properties=properties
+ end
+ if not properties.virtualized then
+ properties.virtualized=tfmdata.type=="virtual"
+ end
+ if not tfmdata.properties then
+ tfmdata.properties={
+ fontname=tfmdata.fontname,
+ filename=tfmdata.filename,
+ fullname=tfmdata.fullname,
+ name=tfmdata.name,
+ psname=tfmdata.psname,
+ encodingbytes=tfmdata.encodingbytes or 1,
+ embedding=tfmdata.embedding or "subset",
+ tounicode=tfmdata.tounicode or 1,
+ cidinfo=tfmdata.cidinfo or nil,
+ format=tfmdata.format or "type1",
+ direction=tfmdata.direction or 0,
+ writingmode=tfmdata.writingmode or "horizontal",
+ identity=tfmdata.identity or "horizontal",
+ }
+ end
+ if not tfmdata.resources then
+ tfmdata.resources={}
+ end
+ if not tfmdata.shared then
+ tfmdata.shared={}
+ end
+ if not properties.hasmath then
+ properties.hasmath=not tfmdata.nomath
+ end
+ tfmdata.MathConstants=nil
+ tfmdata.postprocessors=nil
+ tfmdata.fontname=nil
+ tfmdata.filename=nil
+ tfmdata.fullname=nil
+ tfmdata.name=nil
+ tfmdata.psname=nil
+ tfmdata.encodingbytes=nil
+ tfmdata.embedding=nil
+ tfmdata.tounicode=nil
+ tfmdata.cidinfo=nil
+ tfmdata.format=nil
+ tfmdata.direction=nil
+ tfmdata.type=nil
+ tfmdata.nomath=nil
+ tfmdata.designsize=nil
+ tfmdata.size=nil
+ tfmdata.stretch=nil
+ tfmdata.shrink=nil
+ tfmdata.step=nil
+ tfmdata.extend=nil
+ tfmdata.slant=nil
+ tfmdata.units=nil
+ tfmdata.units_per_em=nil
+ tfmdata.cache=nil
+ properties.finalized=true
+ return tfmdata
+end
+local hashmethods={}
+constructors.hashmethods=hashmethods
+function constructors.hashfeatures(specification)
+ local features=specification.features
+ if features then
+ local t,n={},0
+ for category,list in sortedhash(features) do
+ if next(list) then
+ local hasher=hashmethods[category]
+ if hasher then
+ local hash=hasher(list)
+ if hash then
+ n=n+1
+ t[n]=category..":"..hash
+ end
+ end
+ end
+ end
+ if n>0 then
+ return concat(t," & ")
+ end
+ end
+ return "unknown"
+end
+hashmethods.normal=function(list)
+ local s={}
+ local n=0
+ for k,v in next,list do
+ if not k then
+ elseif k=="number" or k=="features" then
+ else
+ n=n+1
+ s[n]=k..'='..tostring(v)
+ end
+ end
+ if n>0 then
+ sort(s)
+ return concat(s,"+")
+ end
+end
+function constructors.hashinstance(specification,force)
+ local hash,size,fallbacks=specification.hash,specification.size,specification.fallbacks
+ if force or not hash then
+ hash=constructors.hashfeatures(specification)
+ specification.hash=hash
+ end
+ if size<1000 and designsizes[hash] then
+ size=math.round(constructors.scaled(size,designsizes[hash]))
+ specification.size=size
+ end
+ if fallbacks then
+ return hash..' @ '..tostring(size)..' @ '..fallbacks
+ else
+ return hash..' @ '..tostring(size)
+ end
+end
+function constructors.setname(tfmdata,specification)
+ if constructors.namemode=="specification" then
+ local specname=specification.specification
+ if specname then
+ tfmdata.properties.name=specname
+ if trace_defining then
+ report_otf("overloaded fontname %a",specname)
+ end
+ end
+ end
+end
+function constructors.checkedfilename(data)
+ local foundfilename=data.foundfilename
+ if not foundfilename then
+ local askedfilename=data.filename or ""
+ if askedfilename~="" then
+ askedfilename=resolvers.resolve(askedfilename)
+ foundfilename=resolvers.findbinfile(askedfilename,"") or ""
+ if foundfilename=="" then
+ report_defining("source file %a is not found",askedfilename)
+ foundfilename=resolvers.findbinfile(file.basename(askedfilename),"") or ""
+ if foundfilename~="" then
+ report_defining("using source file %a due to cache mismatch",foundfilename)
+ end
+ end
+ end
+ data.foundfilename=foundfilename
+ end
+ return foundfilename
+end
+local formats=allocate()
+fonts.formats=formats
+setmetatableindex(formats,function(t,k)
+ local l=lower(k)
+ if rawget(t,k) then
+ t[k]=l
+ return l
+ end
+ return rawget(t,file.suffix(l))
+end)
+do
+ local function setindeed(mode,source,target,group,name,position)
+ local action=source[mode]
+ if not action then
+ return
+ end
+ local t=target[mode]
+ if not t then
+ report_defining("fatal error in setting feature %a, group %a, mode %a",name,group,mode)
+ os.exit()
+ elseif position then
+ insert(t,position,{ name=name,action=action })
+ else
+ for i=1,#t do
+ local ti=t[i]
+ if ti.name==name then
+ ti.action=action
+ return
+ end
+ end
+ insert(t,{ name=name,action=action })
+ end
+ end
+ local function set(group,name,target,source)
+ target=target[group]
+ if not target then
+ report_defining("fatal target error in setting feature %a, group %a",name,group)
+ os.exit()
+ end
+ local source=source[group]
+ if not source then
+ report_defining("fatal source error in setting feature %a, group %a",name,group)
+ os.exit()
+ end
+ local position=source.position
+ setindeed("node",source,target,group,name,position)
+ setindeed("base",source,target,group,name,position)
+ setindeed("plug",source,target,group,name,position)
+ end
+ local function register(where,specification)
+ local name=specification.name
+ if name and name~="" then
+ local default=specification.default
+ local description=specification.description
+ local initializers=specification.initializers
+ local processors=specification.processors
+ local manipulators=specification.manipulators
+ local modechecker=specification.modechecker
+ if default then
+ where.defaults[name]=default
+ end
+ if description and description~="" then
+ where.descriptions[name]=description
+ end
+ if initializers then
+ set('initializers',name,where,specification)
+ end
+ if processors then
+ set('processors',name,where,specification)
+ end
+ if manipulators then
+ set('manipulators',name,where,specification)
+ end
+ if modechecker then
+ where.modechecker=modechecker
+ end
+ end
+ end
+ constructors.registerfeature=register
+ function constructors.getfeatureaction(what,where,mode,name)
+ what=handlers[what].features
+ if what then
+ where=what[where]
+ if where then
+ mode=where[mode]
+ if mode then
+ for i=1,#mode do
+ local m=mode[i]
+ if m.name==name then
+ return m.action
+ end
+ end
+ end
+ end
+ end
+ end
+ local newfeatures={}
+ constructors.newfeatures=newfeatures
+ constructors.features=newfeatures
+ local function setnewfeatures(what)
+ local handler=handlers[what]
+ local features=handler.features
+ if not features then
+ local tables=handler.tables
+ local statistics=handler.statistics
+ features=allocate {
+ defaults={},
+ descriptions=tables and tables.features or {},
+ used=statistics and statistics.usedfeatures or {},
+ initializers={ base={},node={},plug={} },
+ processors={ base={},node={},plug={} },
+ manipulators={ base={},node={},plug={} },
+ }
+ features.register=function(specification) return register(features,specification) end
+ handler.features=features
+ end
+ return features
+ end
+ setmetatable(newfeatures,{
+ __call=function(t,k) local v=t[k] return v end,
+ __index=function(t,k) local v=setnewfeatures(k) t[k]=v return v end,
+ })
+end
+do
+ local newhandler={}
+ constructors.handlers=newhandler
+ constructors.newhandler=newhandler
+ local function setnewhandler(what)
+ local handler=handlers[what]
+ if not handler then
+ handler={}
+ handlers[what]=handler
+ end
+ return handler
+ end
+ setmetatable(newhandler,{
+ __call=function(t,k) local v=t[k] return v end,
+ __index=function(t,k) local v=setnewhandler(k) t[k]=v return v end,
+ })
+end
+do
+ local newenhancer={}
+ constructors.enhancers=newenhancer
+ constructors.newenhancer=newenhancer
+ local function setnewenhancer(format)
+ local handler=handlers[format]
+ local enhancers=handler.enhancers
+ if not enhancers then
+ local actions=allocate()
+ local before=allocate()
+ local after=allocate()
+ local order=allocate()
+ local known={}
+ local nofsteps=0
+ local patches={ before=before,after=after }
+ local trace=false
+ local report=logs.reporter("fonts",format.." enhancing")
+ trackers.register(format..".loading",function(v) trace=v end)
+ local function enhance(name,data,filename,raw)
+ local enhancer=actions[name]
+ if enhancer then
+ if trace then
+ report("apply enhancement %a to file %a",name,filename)
+ ioflush()
+ end
+ enhancer(data,filename,raw)
+ else
+ end
+ end
+ local function apply(data,filename,raw)
+ local basename=file.basename(lower(filename))
+ if trace then
+ report("%s enhancing file %a","start",filename)
+ end
+ ioflush()
+ for e=1,nofsteps do
+ local enhancer=order[e]
+ local b=before[enhancer]
+ if b then
+ for pattern,action in next,b do
+ if find(basename,pattern) then
+ action(data,filename,raw)
+ end
+ end
+ end
+ enhance(enhancer,data,filename,raw)
+ local a=after[enhancer]
+ if a then
+ for pattern,action in next,a do
+ if find(basename,pattern) then
+ action(data,filename,raw)
+ end
+ end
+ end
+ ioflush()
+ end
+ if trace then
+ report("%s enhancing file %a","stop",filename)
+ end
+ ioflush()
+ end
+ local function register(what,action)
+ if action then
+ if actions[what] then
+ else
+ nofsteps=nofsteps+1
+ order[nofsteps]=what
+ known[what]=nofsteps
+ end
+ actions[what]=action
+ else
+ report("bad enhancer %a",what)
+ end
+ end
+ local function patch(what,where,pattern,action)
+ local pw=patches[what]
+ if pw then
+ local ww=pw[where]
+ if ww then
+ ww[pattern]=action
+ else
+ pw[where]={ [pattern]=action }
+ if not known[where] then
+ nofsteps=nofsteps+1
+ order[nofsteps]=where
+ known[where]=nofsteps
+ end
+ end
+ end
+ end
+ enhancers={
+ register=register,
+ apply=apply,
+ patch=patch,
+ report=report,
+ patches={
+ register=patch,
+ report=report,
+ },
+ }
+ handler.enhancers=enhancers
+ end
+ return enhancers
+ end
+ setmetatable(newenhancer,{
+ __call=function(t,k) local v=t[k] return v end,
+ __index=function(t,k) local v=setnewenhancer(k) t[k]=v return v end,
+ })
+end
+function constructors.checkedfeatures(what,features)
+ local defaults=handlers[what].features.defaults
+ if features and next(features) then
+ features=fastcopy(features)
+ for key,value in next,defaults do
+ if features[key]==nil then
+ features[key]=value
+ end
+ end
+ return features
+ else
+ return fastcopy(defaults)
+ end
+end
+function constructors.initializefeatures(what,tfmdata,features,trace,report)
+ if features and next(features) then
+ local properties=tfmdata.properties or {}
+ local whathandler=handlers[what]
+ local whatfeatures=whathandler.features
+ local whatmodechecker=whatfeatures.modechecker
+ local mode=properties.mode or (whatmodechecker and whatmodechecker(tfmdata,features,features.mode)) or features.mode or "base"
+ properties.mode=mode
+ features.mode=mode
+ local done={}
+ while true do
+ local redo=false
+ local initializers=whatfeatures.initializers[mode]
+ if initializers then
+ for i=1,#initializers do
+ local step=initializers[i]
+ local feature=step.name
+ local value=features[feature]
+ if not value then
+ elseif done[feature] then
+ else
+ local action=step.action
+ if trace then
+ report("initializing feature %a to %a for mode %a for font %a",feature,
+ value,mode,tfmdata.properties.fullname)
+ end
+ action(tfmdata,value,features)
+ if mode~=properties.mode or mode~=features.mode then
+ if whatmodechecker then
+ properties.mode=whatmodechecker(tfmdata,features,properties.mode)
+ features.mode=properties.mode
+ end
+ if mode~=properties.mode then
+ mode=properties.mode
+ redo=true
+ end
+ end
+ done[feature]=true
+ end
+ if redo then
+ break
+ end
+ end
+ if not redo then
+ break
+ end
+ else
+ break
+ end
+ end
+ properties.mode=mode
+ return true
+ else
+ return false
+ end
+end
+function constructors.collectprocessors(what,tfmdata,features,trace,report)
+ local processes,nofprocesses={},0
+ if features and next(features) then
+ local properties=tfmdata.properties
+ local whathandler=handlers[what]
+ local whatfeatures=whathandler.features
+ local whatprocessors=whatfeatures.processors
+ local mode=properties.mode
+ local processors=whatprocessors[mode]
+ if processors then
+ for i=1,#processors do
+ local step=processors[i]
+ local feature=step.name
+ if features[feature] then
+ local action=step.action
+ if trace then
+ report("installing feature processor %a for mode %a for font %a",feature,mode,tfmdata.properties.fullname)
+ end
+ if action then
+ nofprocesses=nofprocesses+1
+ processes[nofprocesses]=action
+ end
+ end
+ end
+ elseif trace then
+ report("no feature processors for mode %a for font %a",mode,properties.fullname)
+ end
+ end
+ return processes
+end
+function constructors.applymanipulators(what,tfmdata,features,trace,report)
+ if features and next(features) then
+ local properties=tfmdata.properties
+ local whathandler=handlers[what]
+ local whatfeatures=whathandler.features
+ local whatmanipulators=whatfeatures.manipulators
+ local mode=properties.mode
+ local manipulators=whatmanipulators[mode]
+ if manipulators then
+ for i=1,#manipulators do
+ local step=manipulators[i]
+ local feature=step.name
+ local value=features[feature]
+ if value then
+ local action=step.action
+ if trace then
+ report("applying feature manipulator %a for mode %a for font %a",feature,mode,properties.fullname)
+ end
+ if action then
+ action(tfmdata,feature,value)
+ end
+ end
+ end
+ end
+ end
+end
+function constructors.addcoreunicodes(unicodes)
+ if not unicodes then
+ unicodes={}
+ end
+ unicodes.space=0x0020
+ unicodes.hyphen=0x002D
+ unicodes.zwj=0x200D
+ unicodes.zwnj=0x200C
+ return unicodes
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['luatex-font-enc']={
+ version=1.001,
+ comment="companion to luatex-*.tex",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+if context then
+ texio.write_nl("fatal error: this module is not for context")
+ os.exit()
+end
+local fonts=fonts
+local encodings={}
+fonts.encodings=encodings
+encodings.agl={}
+encodings.known={}
+setmetatable(encodings.agl,{ __index=function(t,k)
+ if k=="unicodes" then
+ texio.write(" <loading (extended) adobe glyph list>")
+ local unicodes=dofile(resolvers.findfile("font-age.lua"))
+ encodings.agl={ unicodes=unicodes }
+ return unicodes
+ else
+ return nil
+ end
+end })
+encodings.cache=containers.define("fonts","enc",encodings.version,true)
+function encodings.load(filename)
+ local name=file.removesuffix(filename)
+ local data=containers.read(encodings.cache,name)
+ if data then
+ return data
+ end
+ local vector,tag,hash,unicodes={},"",{},{}
+ local foundname=resolvers.findfile(filename,'enc')
+ if foundname and foundname~="" then
+ local ok,encoding,size=resolvers.loadbinfile(foundname)
+ if ok and encoding then
+ encoding=string.gsub(encoding,"%%(.-)\n","")
+ local unicoding=encodings.agl.unicodes
+ local tag,vec=string.match(encoding,"/(%w+)%s*%[(.*)%]%s*def")
+ local i=0
+ for ch in string.gmatch(vec,"/([%a%d%.]+)") do
+ if ch~=".notdef" then
+ vector[i]=ch
+ if not hash[ch] then
+ hash[ch]=i
+ else
+ end
+ local u=unicoding[ch]
+ if u then
+ unicodes[u]=i
+ end
+ end
+ i=i+1
+ end
+ end
+ end
+ local data={
+ name=name,
+ tag=tag,
+ vector=vector,
+ hash=hash,
+ unicodes=unicodes
+ }
+ return containers.write(encodings.cache,name,data)
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-cid']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local format,match,lower=string.format,string.match,string.lower
+local tonumber=tonumber
+local P,S,R,C,V,lpegmatch=lpeg.P,lpeg.S,lpeg.R,lpeg.C,lpeg.V,lpeg.match
+local fonts,logs,trackers=fonts,logs,trackers
+local trace_loading=false trackers.register("otf.loading",function(v) trace_loading=v end)
+local report_otf=logs.reporter("fonts","otf loading")
+local cid={}
+fonts.cid=cid
+local cidmap={}
+local cidmax=10
+local number=C(R("09","af","AF")^1)
+local space=S(" \n\r\t")
+local spaces=space^0
+local period=P(".")
+local periods=period*period
+local name=P("/")*C((1-space)^1)
+local unicodes,names={},{}
+local function do_one(a,b)
+ unicodes[tonumber(a)]=tonumber(b,16)
+end
+local function do_range(a,b,c)
+ c=tonumber(c,16)
+ for i=tonumber(a),tonumber(b) do
+ unicodes[i]=c
+ c=c+1
+ end
+end
+local function do_name(a,b)
+ names[tonumber(a)]=b
+end
+local grammar=P { "start",
+ start=number*spaces*number*V("series"),
+ series=(spaces*(V("one")+V("range")+V("named")))^1,
+ one=(number*spaces*number)/do_one,
+ range=(number*periods*number*spaces*number)/do_range,
+ named=(number*spaces*name)/do_name
+}
+local function loadcidfile(filename)
+ local data=io.loaddata(filename)
+ if data then
+ unicodes,names={},{}
+ lpegmatch(grammar,data)
+ local supplement,registry,ordering=match(filename,"^(.-)%-(.-)%-()%.(.-)$")
+ return {
+ supplement=supplement,
+ registry=registry,
+ ordering=ordering,
+ filename=filename,
+ unicodes=unicodes,
+ names=names,
+ }
+ end
+end
+cid.loadfile=loadcidfile
+local template="%s-%s-%s.cidmap"
+local function locate(registry,ordering,supplement)
+ local filename=format(template,registry,ordering,supplement)
+ local hashname=lower(filename)
+ local found=cidmap[hashname]
+ if not found then
+ if trace_loading then
+ report_otf("checking cidmap, registry %a, ordering %a, supplement %a, filename %a",registry,ordering,supplement,filename)
+ end
+ local fullname=resolvers.findfile(filename,'cid') or ""
+ if fullname~="" then
+ found=loadcidfile(fullname)
+ if found then
+ if trace_loading then
+ report_otf("using cidmap file %a",filename)
+ end
+ cidmap[hashname]=found
+ found.usedname=file.basename(filename)
+ end
+ end
+ end
+ return found
+end
+function cid.getmap(specification)
+ if not specification then
+ report_otf("invalid cidinfo specification, table expected")
+ return
+ end
+ local registry=specification.registry
+ local ordering=specification.ordering
+ local supplement=specification.supplement
+ local filename=format(registry,ordering,supplement)
+ local lowername=lower(filename)
+ local found=cidmap[lowername]
+ if found then
+ return found
+ end
+ if ordering=="Identity" then
+ local found={
+ supplement=supplement,
+ registry=registry,
+ ordering=ordering,
+ filename=filename,
+ unicodes={},
+ names={},
+ }
+ cidmap[lowername]=found
+ return found
+ end
+ if trace_loading then
+ report_otf("cidmap needed, registry %a, ordering %a, supplement %a",registry,ordering,supplement)
+ end
+ found=locate(registry,ordering,supplement)
+ if not found then
+ local supnum=tonumber(supplement)
+ local cidnum=nil
+ if supnum<cidmax then
+ for s=supnum+1,cidmax do
+ local c=locate(registry,ordering,s)
+ if c then
+ found,cidnum=c,s
+ break
+ end
+ end
+ end
+ if not found and supnum>0 then
+ for s=supnum-1,0,-1 do
+ local c=locate(registry,ordering,s)
+ if c then
+ found,cidnum=c,s
+ break
+ end
+ end
+ end
+ registry=lower(registry)
+ ordering=lower(ordering)
+ if found and cidnum>0 then
+ for s=0,cidnum-1 do
+ local filename=format(template,registry,ordering,s)
+ if not cidmap[filename] then
+ cidmap[filename]=found
+ end
+ end
+ end
+ end
+ return found
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-map']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local tonumber,next,type=tonumber,next,type
+local match,format,find,concat,gsub,lower=string.match,string.format,string.find,table.concat,string.gsub,string.lower
+local P,R,S,C,Ct,Cc,lpegmatch=lpeg.P,lpeg.R,lpeg.S,lpeg.C,lpeg.Ct,lpeg.Cc,lpeg.match
+local floor=math.floor
+local formatters=string.formatters
+local sortedhash,sortedkeys=table.sortedhash,table.sortedkeys
+local trace_loading=false trackers.register("fonts.loading",function(v) trace_loading=v end)
+local trace_mapping=false trackers.register("fonts.mapping",function(v) trace_mapping=v end)
+local report_fonts=logs.reporter("fonts","loading")
+local force_ligatures=false directives.register("fonts.mapping.forceligatures",function(v) force_ligatures=v end)
+local fonts=fonts or {}
+local mappings=fonts.mappings or {}
+fonts.mappings=mappings
+local allocate=utilities.storage.allocate
+local hex=R("AF","af","09")
+local hexfour=(hex*hex*hex^-2)/function(s) return tonumber(s,16) end
+local hexsix=(hex*hex*hex^-4)/function(s) return tonumber(s,16) end
+local dec=(R("09")^1)/tonumber
+local period=P(".")
+local unicode=(P("uni")+P("UNI"))*(hexfour*(period+P(-1))*Cc(false)+Ct(hexfour^1)*Cc(true))
+local ucode=(P("u")+P("U") )*(hexsix*(period+P(-1))*Cc(false)+Ct(hexsix^1)*Cc(true))
+local index=P("index")*dec*Cc(false)
+local parser=unicode+ucode+index
+local parsers={}
+local function makenameparser(str)
+ if not str or str=="" then
+ return parser
+ else
+ local p=parsers[str]
+ if not p then
+ p=P(str)*period*dec*Cc(false)
+ parsers[str]=p
+ end
+ return p
+ end
+end
+local f_single=formatters["%04X"]
+local f_double=formatters["%04X%04X"]
+local function tounicode16(unicode)
+ if unicode<0xD7FF or (unicode>0xDFFF and unicode<=0xFFFF) then
+ return f_single(unicode)
+ else
+ unicode=unicode-0x10000
+ return f_double(floor(unicode/1024)+0xD800,unicode%1024+0xDC00)
+ end
+end
+local function tounicode16sequence(unicodes)
+ local t={}
+ for l=1,#unicodes do
+ local u=unicodes[l]
+ if u<0xD7FF or (u>0xDFFF and u<=0xFFFF) then
+ t[l]=f_single(u)
+ else
+ u=u-0x10000
+ t[l]=f_double(floor(u/1024)+0xD800,u%1024+0xDC00)
+ end
+ end
+ return concat(t)
+end
+local function tounicode(unicode,name)
+ if type(unicode)=="table" then
+ local t={}
+ for l=1,#unicode do
+ local u=unicode[l]
+ if u<0xD7FF or (u>0xDFFF and u<=0xFFFF) then
+ t[l]=f_single(u)
+ else
+ u=u-0x10000
+ t[l]=f_double(floor(u/1024)+0xD800,u%1024+0xDC00)
+ end
+ end
+ return concat(t)
+ else
+ if unicode<0xD7FF or (unicode>0xDFFF and unicode<=0xFFFF) then
+ return f_single(unicode)
+ else
+ unicode=unicode-0x10000
+ return f_double(floor(unicode/1024)+0xD800,unicode%1024+0xDC00)
+ end
+ end
+end
+local function fromunicode16(str)
+ if #str==4 then
+ return tonumber(str,16)
+ else
+ local l,r=match(str,"(....)(....)")
+ return 0x10000+(tonumber(l,16)-0xD800)*0x400+tonumber(r,16)-0xDC00
+ end
+end
+mappings.makenameparser=makenameparser
+mappings.tounicode=tounicode
+mappings.tounicode16=tounicode16
+mappings.tounicode16sequence=tounicode16sequence
+mappings.fromunicode16=fromunicode16
+local ligseparator=P("_")
+local varseparator=P(".")
+local namesplitter=Ct(C((1-ligseparator-varseparator)^1)*(ligseparator*C((1-ligseparator-varseparator)^1))^0)
+do
+ local overloads=allocate {
+ IJ={ name="I_J",unicode={ 0x49,0x4A },mess=0x0132 },
+ ij={ name="i_j",unicode={ 0x69,0x6A },mess=0x0133 },
+ ff={ name="f_f",unicode={ 0x66,0x66 },mess=0xFB00 },
+ fi={ name="f_i",unicode={ 0x66,0x69 },mess=0xFB01 },
+ fl={ name="f_l",unicode={ 0x66,0x6C },mess=0xFB02 },
+ ffi={ name="f_f_i",unicode={ 0x66,0x66,0x69 },mess=0xFB03 },
+ ffl={ name="f_f_l",unicode={ 0x66,0x66,0x6C },mess=0xFB04 },
+ fj={ name="f_j",unicode={ 0x66,0x6A } },
+ fk={ name="f_k",unicode={ 0x66,0x6B } },
+ }
+ local o={}
+ for k,v in next,overloads do
+ local name=v.name
+ local mess=v.mess
+ if name then
+ o[name]=v
+ end
+ if mess then
+ o[mess]=v
+ end
+ o[k]=v
+ end
+ mappings.overloads=o
+end
+function mappings.addtounicode(data,filename,checklookups,forceligatures)
+ local resources=data.resources
+ local unicodes=resources.unicodes
+ if not unicodes then
+ if trace_mapping then
+ report_fonts("no unicode list, quitting tounicode for %a",filename)
+ end
+ return
+ end
+ local properties=data.properties
+ local descriptions=data.descriptions
+ local overloads=mappings.overloads
+ unicodes['space']=unicodes['space'] or 32
+ unicodes['hyphen']=unicodes['hyphen'] or 45
+ unicodes['zwj']=unicodes['zwj'] or 0x200D
+ unicodes['zwnj']=unicodes['zwnj'] or 0x200C
+ local private=fonts.constructors and fonts.constructors.privateoffset or 0xF0000
+ local unicodevector=fonts.encodings.agl.unicodes or {}
+ local contextvector=fonts.encodings.agl.ctxcodes or {}
+ local missing={}
+ local nofmissing=0
+ local oparser=nil
+ local cidnames=nil
+ local cidcodes=nil
+ local cidinfo=properties.cidinfo
+ local usedmap=cidinfo and fonts.cid.getmap(cidinfo)
+ local uparser=makenameparser()
+ if usedmap then
+ oparser=usedmap and makenameparser(cidinfo.ordering)
+ cidnames=usedmap.names
+ cidcodes=usedmap.unicodes
+ end
+ local ns=0
+ local nl=0
+ local dlist=sortedkeys(descriptions)
+ for i=1,#dlist do
+ local du=dlist[i]
+ local glyph=descriptions[du]
+ local name=glyph.name
+ if name then
+ local overload=overloads[name] or overloads[du]
+ if overload then
+ glyph.unicode=overload.unicode
+ else
+ local gu=glyph.unicode
+ if not gu or gu==-1 or du>=private or (du>=0xE000 and du<=0xF8FF) or du==0xFFFE or du==0xFFFF then
+ local unicode=unicodevector[name] or contextvector[name]
+ if unicode then
+ glyph.unicode=unicode
+ ns=ns+1
+ end
+ if (not unicode) and usedmap then
+ local foundindex=lpegmatch(oparser,name)
+ if foundindex then
+ unicode=cidcodes[foundindex]
+ if unicode then
+ glyph.unicode=unicode
+ ns=ns+1
+ else
+ local reference=cidnames[foundindex]
+ if reference then
+ local foundindex=lpegmatch(oparser,reference)
+ if foundindex then
+ unicode=cidcodes[foundindex]
+ if unicode then
+ glyph.unicode=unicode
+ ns=ns+1
+ end
+ end
+ if not unicode or unicode=="" then
+ local foundcodes,multiple=lpegmatch(uparser,reference)
+ if foundcodes then
+ glyph.unicode=foundcodes
+ if multiple then
+ nl=nl+1
+ unicode=true
+ else
+ ns=ns+1
+ unicode=foundcodes
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ if not unicode or unicode=="" then
+ local split=lpegmatch(namesplitter,name)
+ local nsplit=split and #split or 0
+ if nsplit==0 then
+ elseif nsplit==1 then
+ local base=split[1]
+ local u=unicodes[base] or unicodevector[base] or contextvector[name]
+ if not u then
+ elseif type(u)=="table" then
+ if u[1]<private then
+ unicode=u
+ glyph.unicode=unicode
+ end
+ elseif u<private then
+ unicode=u
+ glyph.unicode=unicode
+ end
+ else
+ local t,n={},0
+ for l=1,nsplit do
+ local base=split[l]
+ local u=unicodes[base] or unicodevector[base] or contextvector[name]
+ if not u then
+ break
+ elseif type(u)=="table" then
+ if u[1]>=private then
+ break
+ end
+ n=n+1
+ t[n]=u[1]
+ else
+ if u>=private then
+ break
+ end
+ n=n+1
+ t[n]=u
+ end
+ end
+ if n>0 then
+ if n==1 then
+ unicode=t[1]
+ else
+ unicode=t
+ end
+ glyph.unicode=unicode
+ end
+ end
+ nl=nl+1
+ end
+ if not unicode or unicode=="" then
+ local foundcodes,multiple=lpegmatch(uparser,name)
+ if foundcodes then
+ glyph.unicode=foundcodes
+ if multiple then
+ nl=nl+1
+ unicode=true
+ else
+ ns=ns+1
+ unicode=foundcodes
+ end
+ end
+ end
+ local r=overloads[unicode]
+ if r then
+ unicode=r.unicode
+ glyph.unicode=unicode
+ end
+ if not unicode then
+ missing[du]=true
+ nofmissing=nofmissing+1
+ end
+ end
+ end
+ else
+ local overload=overloads[du]
+ if overload then
+ glyph.unicode=overload.unicode
+ end
+ end
+ end
+ if type(checklookups)=="function" then
+ checklookups(data,missing,nofmissing)
+ end
+ local unicoded=0
+ local collected=fonts.handlers.otf.readers.getcomponents(data)
+ local function resolve(glyph,u)
+ local n=#u
+ for i=1,n do
+ if u[i]>private then
+ n=0
+ break
+ end
+ end
+ if n>0 then
+ if n>1 then
+ glyph.unicode=u
+ else
+ glyph.unicode=u[1]
+ end
+ unicoded=unicoded+1
+ end
+ end
+ if not collected then
+ elseif forceligatures or force_ligatures then
+ for i=1,#dlist do
+ local du=dlist[i]
+ if du>=private or (du>=0xE000 and du<=0xF8FF) then
+ local u=collected[du]
+ if u then
+ resolve(descriptions[du],u)
+ end
+ end
+ end
+ else
+ for i=1,#dlist do
+ local du=dlist[i]
+ if du>=private or (du>=0xE000 and du<=0xF8FF) then
+ local glyph=descriptions[du]
+ if glyph.class=="ligature" and not glyph.unicode then
+ local u=collected[du]
+ if u then
+ resolve(glyph,u)
+ end
+ end
+ end
+ end
+ end
+ if trace_mapping and unicoded>0 then
+ report_fonts("%n ligature tounicode mappings deduced from gsub ligature features",unicoded)
+ end
+ if trace_mapping then
+ for i=1,#dlist do
+ local du=dlist[i]
+ local glyph=descriptions[du]
+ local name=glyph.name or "-"
+ local index=glyph.index or 0
+ local unicode=glyph.unicode
+ if unicode then
+ if type(unicode)=="table" then
+ local unicodes={}
+ for i=1,#unicode do
+ unicodes[i]=formatters("%U",unicode[i])
+ end
+ report_fonts("internal slot %U, name %a, unicode %U, tounicode % t",index,name,du,unicodes)
+ else
+ report_fonts("internal slot %U, name %a, unicode %U, tounicode %U",index,name,du,unicode)
+ end
+ else
+ report_fonts("internal slot %U, name %a, unicode %U",index,name,du)
+ end
+ end
+ end
+ if trace_loading and (ns>0 or nl>0) then
+ report_fonts("%s tounicode entries added, ligatures %s",nl+ns,ns)
+ end
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['luatex-fonts-syn']={
+ version=1.001,
+ comment="companion to luatex-*.tex",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+if context then
+ texio.write_nl("fatal error: this module is not for context")
+ os.exit()
+end
+local fonts=fonts
+fonts.names=fonts.names or {}
+fonts.names.version=1.001
+fonts.names.basename="luatex-fonts-names"
+fonts.names.cache=containers.define("fonts","data",fonts.names.version,true)
+local data=nil
+local loaded=false
+local fileformats={ "lua","tex","other text files" }
+function fonts.names.reportmissingbase()
+ texio.write("<missing font database, run: mtxrun --script fonts --reload --simple>")
+ fonts.names.reportmissingbase=nil
+end
+function fonts.names.reportmissingname()
+ texio.write("<unknown font in database, run: mtxrun --script fonts --reload --simple>")
+ fonts.names.reportmissingname=nil
+end
+function fonts.names.resolve(name,sub)
+ if not loaded then
+ local basename=fonts.names.basename
+ if basename and basename~="" then
+ data=containers.read(fonts.names.cache,basename)
+ if not data then
+ basename=file.addsuffix(basename,"lua")
+ for i=1,#fileformats do
+ local format=fileformats[i]
+ local foundname=resolvers.findfile(basename,format) or ""
+ if foundname~="" then
+ data=dofile(foundname)
+ texio.write("<font database loaded: ",foundname,">")
+ break
+ end
+ end
+ end
+ end
+ loaded=true
+ end
+ if type(data)=="table" and data.version==fonts.names.version then
+ local condensed=string.gsub(string.lower(name),"[^%a%d]","")
+ local found=data.mappings and data.mappings[condensed]
+ if found then
+ local fontname,filename,subfont=found[1],found[2],found[3]
+ if subfont then
+ return filename,fontname
+ else
+ return filename,false
+ end
+ elseif fonts.names.reportmissingname then
+ fonts.names.reportmissingname()
+ return name,false
+ end
+ elseif fonts.names.reportmissingbase then
+ fonts.names.reportmissingbase()
+ end
+end
+fonts.names.resolvespec=fonts.names.resolve
+function fonts.names.getfilename(askedname,suffix)
+ return ""
+end
+function fonts.names.ignoredfile(filename)
+ return false
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-oti']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local lower=string.lower
+local fonts=fonts
+local constructors=fonts.constructors
+local otf=constructors.handlers.otf
+local otffeatures=constructors.features.otf
+local registerotffeature=otffeatures.register
+local otftables=otf.tables or {}
+otf.tables=otftables
+local allocate=utilities.storage.allocate
+registerotffeature {
+ name="features",
+ description="initialization of feature handler",
+ default=true,
+}
+local function setmode(tfmdata,value)
+ if value then
+ tfmdata.properties.mode=lower(value)
+ end
+end
+otf.modeinitializer=setmode
+local function setlanguage(tfmdata,value)
+ if value then
+ local cleanvalue=lower(value)
+ local languages=otftables and otftables.languages
+ local properties=tfmdata.properties
+ if not languages then
+ properties.language=cleanvalue
+ elseif languages[value] then
+ properties.language=cleanvalue
+ else
+ properties.language="dflt"
+ end
+ end
+end
+local function setscript(tfmdata,value)
+ if value then
+ local cleanvalue=lower(value)
+ local scripts=otftables and otftables.scripts
+ local properties=tfmdata.properties
+ if not scripts then
+ properties.script=cleanvalue
+ elseif scripts[value] then
+ properties.script=cleanvalue
+ else
+ properties.script="dflt"
+ end
+ end
+end
+registerotffeature {
+ name="mode",
+ description="mode",
+ initializers={
+ base=setmode,
+ node=setmode,
+ plug=setmode,
+ }
+}
+registerotffeature {
+ name="language",
+ description="language",
+ initializers={
+ base=setlanguage,
+ node=setlanguage,
+ plug=setlanguage,
+ }
+}
+registerotffeature {
+ name="script",
+ description="script",
+ initializers={
+ base=setscript,
+ node=setscript,
+ plug=setscript,
+ }
+}
+otftables.featuretypes=allocate {
+ gpos_single="position",
+ gpos_pair="position",
+ gpos_cursive="position",
+ gpos_mark2base="position",
+ gpos_mark2ligature="position",
+ gpos_mark2mark="position",
+ gpos_context="position",
+ gpos_contextchain="position",
+ gsub_single="substitution",
+ gsub_multiple="substitution",
+ gsub_alternate="substitution",
+ gsub_ligature="substitution",
+ gsub_context="substitution",
+ gsub_contextchain="substitution",
+ gsub_reversecontextchain="substitution",
+ gsub_reversesub="substitution",
+}
+function otffeatures.checkeddefaultscript(featuretype,autoscript,scripts)
+ if featuretype=="position" then
+ local default=scripts.dflt
+ if default then
+ if autoscript=="position" or autoscript==true then
+ return default
+ else
+ report_otf("script feature %s not applied, enable default positioning")
+ end
+ else
+ end
+ elseif featuretype=="substitution" then
+ local default=scripts.dflt
+ if default then
+ if autoscript=="substitution" or autoscript==true then
+ return default
+ end
+ end
+ end
+end
+function otffeatures.checkeddefaultlanguage(featuretype,autolanguage,languages)
+ if featuretype=="position" then
+ local default=languages.dflt
+ if default then
+ if autolanguage=="position" or autolanguage==true then
+ return default
+ else
+ report_otf("language feature %s not applied, enable default positioning")
+ end
+ else
+ end
+ elseif featuretype=="substitution" then
+ local default=languages.dflt
+ if default then
+ if autolanguage=="substitution" or autolanguage==true then
+ return default
+ end
+ end
+ end
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-otr']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local next,type=next,type
+local byte,lower,char,gsub=string.byte,string.lower,string.char,string.gsub
+local floor,round=math.floor,math.round
+local P,R,S,C,Cs,Cc,Ct,Carg,Cmt=lpeg.P,lpeg.R,lpeg.S,lpeg.C,lpeg.Cs,lpeg.Cc,lpeg.Ct,lpeg.Carg,lpeg.Cmt
+local lpegmatch=lpeg.match
+local setmetatableindex=table.setmetatableindex
+local formatters=string.formatters
+local sortedkeys=table.sortedkeys
+local sortedhash=table.sortedhash
+local stripstring=string.nospaces
+local utf16_to_utf8_be=utf.utf16_to_utf8_be
+local report=logs.reporter("otf reader")
+local trace_cmap=false
+local trace_cmap_detail=false
+fonts=fonts or {}
+local handlers=fonts.handlers or {}
+fonts.handlers=handlers
+local otf=handlers.otf or {}
+handlers.otf=otf
+local readers=otf.readers or {}
+otf.readers=readers
+local streamreader=utilities.files
+local streamwriter=utilities.files
+readers.streamreader=streamreader
+readers.streamwriter=streamwriter
+local openfile=streamreader.open
+local closefile=streamreader.close
+local setposition=streamreader.setposition
+local skipshort=streamreader.skipshort
+local readbytes=streamreader.readbytes
+local readstring=streamreader.readstring
+local readbyte=streamreader.readcardinal1
+local readushort=streamreader.readcardinal2
+local readuint=streamreader.readcardinal3
+local readulong=streamreader.readcardinal4
+local readshort=streamreader.readinteger2
+local readlong=streamreader.readinteger4
+local readfixed=streamreader.readfixed4
+local read2dot14=streamreader.read2dot14
+local readfword=readshort
+local readufword=readushort
+local readoffset=readushort
+function streamreader.readtag(f)
+ return lower(stripstring(readstring(f,4)))
+end
+local function readlongdatetime(f)
+ local a,b,c,d,e,f,g,h=readbytes(f,8)
+ return 0x100000000*d+0x1000000*e+0x10000*f+0x100*g+h
+end
+local tableversion=0.004
+readers.tableversion=tableversion
+local privateoffset=fonts.constructors and fonts.constructors.privateoffset or 0xF0000
+local reservednames={ [0]="copyright",
+ "family",
+ "subfamily",
+ "uniqueid",
+ "fullname",
+ "version",
+ "postscriptname",
+ "trademark",
+ "manufacturer",
+ "designer",
+ "description",
+ "vendorurl",
+ "designerurl",
+ "license",
+ "licenseurl",
+ "reserved",
+ "typographicfamily",
+ "typographicsubfamily",
+ "compatiblefullname",
+ "sampletext",
+ "cidfindfontname",
+ "wwsfamily",
+ "wwssubfamily",
+ "lightbackgroundpalette",
+ "darkbackgroundpalette",
+ "variationspostscriptnameprefix",
+}
+local platforms={ [0]="unicode",
+ "macintosh",
+ "iso",
+ "windows",
+ "custom",
+}
+local encodings={
+ unicode={ [0]="unicode 1.0 semantics",
+ "unicode 1.1 semantics",
+ "iso/iec 10646",
+ "unicode 2.0 bmp",
+ "unicode 2.0 full",
+ "unicode variation sequences",
+ "unicode full repertoire",
+ },
+ macintosh={ [0]="roman","japanese","chinese (traditional)","korean","arabic","hebrew","greek","russian",
+ "rsymbol","devanagari","gurmukhi","gujarati","oriya","bengali","tamil","telugu","kannada",
+ "malayalam","sinhalese","burmese","khmer","thai","laotian","georgian","armenian",
+ "chinese (simplified)","tibetan","mongolian","geez","slavic","vietnamese","sindhi",
+ "uninterpreted",
+ },
+ iso={ [0]="7-bit ascii",
+ "iso 10646",
+ "iso 8859-1",
+ },
+ windows={ [0]="symbol",
+ "unicode bmp",
+ "shiftjis",
+ "prc",
+ "big5",
+ "wansung",
+ "johab",
+ "reserved 7",
+ "reserved 8",
+ "reserved 9",
+ "unicode ucs-4",
+ },
+ custom={
+ }
+}
+local decoders={
+ unicode={},
+ macintosh={},
+ iso={},
+ windows={
+ ["unicode semantics"]=utf16_to_utf8_be,
+ ["unicode bmp"]=utf16_to_utf8_be,
+ ["unicode full"]=utf16_to_utf8_be,
+ ["unicode 1.0 semantics"]=utf16_to_utf8_be,
+ ["unicode 1.1 semantics"]=utf16_to_utf8_be,
+ ["unicode 2.0 bmp"]=utf16_to_utf8_be,
+ ["unicode 2.0 full"]=utf16_to_utf8_be,
+ ["unicode variation sequences"]=utf16_to_utf8_be,
+ ["unicode full repertoire"]=utf16_to_utf8_be,
+ },
+ custom={},
+}
+local languages={
+ unicode={
+ [ 0]="english",
+ },
+ macintosh={
+ [ 0]="english",
+ },
+ iso={},
+ windows={
+ [0x0409]="english - united states",
+ },
+ custom={},
+}
+local standardromanencoding={ [0]=
+ "notdef",".null","nonmarkingreturn","space","exclam","quotedbl",
+ "numbersign","dollar","percent","ampersand","quotesingle","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","Q","R","S","T","U","V","W","X","Y","Z","bracketleft",
+ "backslash","bracketright","asciicircum","underscore","grave","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","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","dagger","degree","cent","sterling",
+ "section","bullet","paragraph","germandbls","registered","copyright",
+ "trademark","acute","dieresis","notequal","AE","Oslash","infinity",
+ "plusminus","lessequal","greaterequal","yen","mu","partialdiff",
+ "summation","product","pi","integral","ordfeminine","ordmasculine",
+ "Omega","ae","oslash","questiondown","exclamdown","logicalnot",
+ "radical","florin","approxequal","Delta","guillemotleft",
+ "guillemotright","ellipsis","nonbreakingspace","Agrave","Atilde",
+ "Otilde","OE","oe","endash","emdash","quotedblleft","quotedblright",
+ "quoteleft","quoteright","divide","lozenge","ydieresis","Ydieresis",
+ "fraction","currency","guilsinglleft","guilsinglright","fi","fl",
+ "daggerdbl","periodcentered","quotesinglbase","quotedblbase",
+ "perthousand","Acircumflex","Ecircumflex","Aacute","Edieresis","Egrave",
+ "Iacute","Icircumflex","Idieresis","Igrave","Oacute","Ocircumflex",
+ "apple","Ograve","Uacute","Ucircumflex","Ugrave","dotlessi",
+ "circumflex","tilde","macron","breve","dotaccent","ring","cedilla",
+ "hungarumlaut","ogonek","caron","Lslash","lslash","Scaron","scaron",
+ "Zcaron","zcaron","brokenbar","Eth","eth","Yacute","yacute","Thorn",
+ "thorn","minus","multiply","onesuperior","twosuperior","threesuperior",
+ "onehalf","onequarter","threequarters","franc","Gbreve","gbreve",
+ "Idotaccent","Scedilla","scedilla","Cacute","cacute","Ccaron","ccaron",
+ "dcroat",
+}
+local weights={
+ [100]="thin",
+ [200]="extralight",
+ [300]="light",
+ [400]="normal",
+ [500]="medium",
+ [600]="semibold",
+ [700]="bold",
+ [800]="extrabold",
+ [900]="black",
+}
+local widths={
+ [1]="ultracondensed",
+ [2]="extracondensed",
+ [3]="condensed",
+ [4]="semicondensed",
+ [5]="normal",
+ [6]="semiexpanded",
+ [7]="expanded",
+ [8]="extraexpanded",
+ [9]="ultraexpanded",
+}
+setmetatableindex(weights,function(t,k)
+ local r=floor((k+50)/100)*100
+ local v=(r>900 and "black") or rawget(t,r) or "normal"
+ return v
+end)
+setmetatableindex(widths,function(t,k)
+ return "normal"
+end)
+local panoseweights={
+ [ 0]="normal",
+ [ 1]="normal",
+ [ 2]="verylight",
+ [ 3]="light",
+ [ 4]="thin",
+ [ 5]="book",
+ [ 6]="medium",
+ [ 7]="demi",
+ [ 8]="bold",
+ [ 9]="heavy",
+ [10]="black",
+}
+local panosewidths={
+ [ 0]="normal",
+ [ 1]="normal",
+ [ 2]="normal",
+ [ 3]="normal",
+ [ 4]="normal",
+ [ 5]="expanded",
+ [ 6]="condensed",
+ [ 7]="veryexpanded",
+ [ 8]="verycondensed",
+ [ 9]="monospaced",
+}
+local helpers={}
+readers.helpers=helpers
+local function gotodatatable(f,fontdata,tag,criterium)
+ if criterium and f then
+ local datatable=fontdata.tables[tag]
+ if datatable then
+ local tableoffset=datatable.offset
+ setposition(f,tableoffset)
+ return tableoffset
+ end
+ end
+end
+local function reportskippedtable(f,fontdata,tag,criterium)
+ if criterium and f then
+ local datatable=fontdata.tables[tag]
+ if datatable then
+ report("loading of table %a skipped",tag)
+ end
+ end
+end
+local function setvariabledata(fontdata,tag,data)
+ local variabledata=fontdata.variabledata
+ if variabledata then
+ variabledata[tag]=data
+ else
+ fontdata.variabledata={ [tag]=data }
+ end
+end
+helpers.gotodatatable=gotodatatable
+helpers.setvariabledata=setvariabledata
+helpers.reportskippedtable=reportskippedtable
+local platformnames={
+ postscriptname=true,
+ fullname=true,
+ family=true,
+ subfamily=true,
+ typographicfamily=true,
+ typographicsubfamily=true,
+ compatiblefullname=true,
+}
+function readers.name(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"name",true)
+ if tableoffset then
+ local format=readushort(f)
+ local nofnames=readushort(f)
+ local offset=readushort(f)
+ local start=tableoffset+offset
+ local namelists={
+ unicode={},
+ windows={},
+ macintosh={},
+ }
+ for i=1,nofnames do
+ local platform=platforms[readushort(f)]
+ if platform then
+ local namelist=namelists[platform]
+ if namelist then
+ local encoding=readushort(f)
+ local language=readushort(f)
+ local encodings=encodings[platform]
+ local languages=languages[platform]
+ if encodings and languages then
+ local encoding=encodings[encoding]
+ local language=languages[language]
+ if encoding and language then
+ local index=readushort(f)
+ local name=reservednames[index]
+ namelist[#namelist+1]={
+ platform=platform,
+ encoding=encoding,
+ language=language,
+ name=name,
+ index=index,
+ length=readushort(f),
+ offset=start+readushort(f),
+ }
+ else
+ skipshort(f,3)
+ end
+ else
+ skipshort(f,3)
+ end
+ else
+ skipshort(f,5)
+ end
+ else
+ skipshort(f,5)
+ end
+ end
+ local names={}
+ local done={}
+ local extras={}
+ local function filter(platform,e,l)
+ local namelist=namelists[platform]
+ for i=1,#namelist do
+ local name=namelist[i]
+ local nametag=name.name
+ local index=name.index
+ if not done[nametag or i] then
+ local encoding=name.encoding
+ local language=name.language
+ if (not e or encoding==e) and (not l or language==l) then
+ setposition(f,name.offset)
+ local content=readstring(f,name.length)
+ local decoder=decoders[platform]
+ if decoder then
+ decoder=decoder[encoding]
+ end
+ if decoder then
+ content=decoder(content)
+ end
+ if nametag then
+ names[nametag]={
+ content=content,
+ platform=platform,
+ encoding=encoding,
+ language=language,
+ }
+ end
+ extras[index]=content
+ done[nametag or i]=true
+ end
+ end
+ end
+ end
+ filter("windows","unicode bmp","english - united states")
+ filter("macintosh","roman","english")
+ filter("windows")
+ filter("macintosh")
+ filter("unicode")
+ fontdata.names=names
+ fontdata.extras=extras
+ if specification.platformnames then
+ local collected={}
+ for platform,namelist in next,namelists do
+ local filtered=false
+ for i=1,#namelist do
+ local entry=namelist[i]
+ local name=entry.name
+ if platformnames[name] then
+ setposition(f,entry.offset)
+ local content=readstring(f,entry.length)
+ local encoding=entry.encoding
+ local decoder=decoders[platform]
+ if decoder then
+ decoder=decoder[encoding]
+ end
+ if decoder then
+ content=decoder(content)
+ end
+ if filtered then
+ filtered[name]=content
+ else
+ filtered={ [name]=content }
+ end
+ end
+ end
+ if filtered then
+ collected[platform]=filtered
+ end
+ end
+ fontdata.platformnames=collected
+ end
+ else
+ fontdata.names={}
+ end
+end
+local validutf=lpeg.patterns.validutf8
+local function getname(fontdata,key)
+ local names=fontdata.names
+ if names then
+ local value=names[key]
+ if value then
+ local content=value.content
+ return lpegmatch(validutf,content) and content or nil
+ end
+ end
+end
+readers["os/2"]=function(f,fontdata)
+ local tableoffset=gotodatatable(f,fontdata,"os/2",true)
+ if tableoffset then
+ local version=readushort(f)
+ local windowsmetrics={
+ version=version,
+ averagewidth=readshort(f),
+ weightclass=readushort(f),
+ widthclass=readushort(f),
+ fstype=readushort(f),
+ subscriptxsize=readshort(f),
+ subscriptysize=readshort(f),
+ subscriptxoffset=readshort(f),
+ subscriptyoffset=readshort(f),
+ superscriptxsize=readshort(f),
+ superscriptysize=readshort(f),
+ superscriptxoffset=readshort(f),
+ superscriptyoffset=readshort(f),
+ strikeoutsize=readshort(f),
+ strikeoutpos=readshort(f),
+ familyclass=readshort(f),
+ panose={ readbytes(f,10) },
+ unicoderanges={ readulong(f),readulong(f),readulong(f),readulong(f) },
+ vendor=readstring(f,4),
+ fsselection=readushort(f),
+ firstcharindex=readushort(f),
+ lastcharindex=readushort(f),
+ typoascender=readshort(f),
+ typodescender=readshort(f),
+ typolinegap=readshort(f),
+ winascent=readushort(f),
+ windescent=readushort(f),
+ }
+ if version>=1 then
+ windowsmetrics.codepageranges={ readulong(f),readulong(f) }
+ end
+ if version>=3 then
+ windowsmetrics.xheight=readshort(f)
+ windowsmetrics.capheight=readshort(f)
+ windowsmetrics.defaultchar=readushort(f)
+ windowsmetrics.breakchar=readushort(f)
+ end
+ windowsmetrics.weight=windowsmetrics.weightclass and weights[windowsmetrics.weightclass]
+ windowsmetrics.width=windowsmetrics.widthclass and widths [windowsmetrics.widthclass]
+ windowsmetrics.panoseweight=panoseweights[windowsmetrics.panose[3]]
+ windowsmetrics.panosewidth=panosewidths [windowsmetrics.panose[4]]
+ fontdata.windowsmetrics=windowsmetrics
+ else
+ fontdata.windowsmetrics={}
+ end
+end
+readers.head=function(f,fontdata)
+ local tableoffset=gotodatatable(f,fontdata,"head",true)
+ if tableoffset then
+ local fontheader={
+ version=readfixed(f),
+ revision=readfixed(f),
+ checksum=readulong(f),
+ magic=readulong(f),
+ flags=readushort(f),
+ units=readushort(f),
+ created=readlongdatetime(f),
+ modified=readlongdatetime(f),
+ xmin=readshort(f),
+ ymin=readshort(f),
+ xmax=readshort(f),
+ ymax=readshort(f),
+ macstyle=readushort(f),
+ smallpixels=readushort(f),
+ directionhint=readshort(f),
+ indextolocformat=readshort(f),
+ glyphformat=readshort(f),
+ }
+ fontdata.fontheader=fontheader
+ else
+ fontdata.fontheader={}
+ end
+ fontdata.nofglyphs=0
+end
+readers.hhea=function(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"hhea",specification.details)
+ if tableoffset then
+ fontdata.horizontalheader={
+ version=readfixed(f),
+ ascender=readfword(f),
+ descender=readfword(f),
+ linegap=readfword(f),
+ maxadvancewidth=readufword(f),
+ minleftsidebearing=readfword(f),
+ minrightsidebearing=readfword(f),
+ maxextent=readfword(f),
+ caretsloperise=readshort(f),
+ caretsloperun=readshort(f),
+ caretoffset=readshort(f),
+ reserved_1=readshort(f),
+ reserved_2=readshort(f),
+ reserved_3=readshort(f),
+ reserved_4=readshort(f),
+ metricdataformat=readshort(f),
+ nofmetrics=readushort(f),
+ }
+ else
+ fontdata.horizontalheader={
+ nofmetrics=0,
+ }
+ end
+end
+readers.vhea=function(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"vhea",specification.details)
+ if tableoffset then
+ fontdata.verticalheader={
+ version=readfixed(f),
+ ascender=readfword(f),
+ descender=readfword(f),
+ linegap=readfword(f),
+ maxadvanceheight=readufword(f),
+ mintopsidebearing=readfword(f),
+ minbottomsidebearing=readfword(f),
+ maxextent=readfword(f),
+ caretsloperise=readshort(f),
+ caretsloperun=readshort(f),
+ caretoffset=readshort(f),
+ reserved_1=readshort(f),
+ reserved_2=readshort(f),
+ reserved_3=readshort(f),
+ reserved_4=readshort(f),
+ metricdataformat=readshort(f),
+ nofmetrics=readushort(f),
+ }
+ else
+ fontdata.verticalheader={
+ nofmetrics=0,
+ }
+ end
+end
+readers.maxp=function(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"maxp",specification.details)
+ if tableoffset then
+ local version=readfixed(f)
+ local nofglyphs=readushort(f)
+ fontdata.nofglyphs=nofglyphs
+ if version==0.5 then
+ fontdata.maximumprofile={
+ version=version,
+ nofglyphs=nofglyphs,
+ }
+ elseif version==1.0 then
+ fontdata.maximumprofile={
+ version=version,
+ nofglyphs=nofglyphs,
+ points=readushort(f),
+ contours=readushort(f),
+ compositepoints=readushort(f),
+ compositecontours=readushort(f),
+ zones=readushort(f),
+ twilightpoints=readushort(f),
+ storage=readushort(f),
+ functiondefs=readushort(f),
+ instructiondefs=readushort(f),
+ stackelements=readushort(f),
+ sizeofinstructions=readushort(f),
+ componentelements=readushort(f),
+ componentdepth=readushort(f),
+ }
+ else
+ fontdata.maximumprofile={
+ version=version,
+ nofglyphs=0,
+ }
+ end
+ end
+end
+readers.hmtx=function(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"hmtx",specification.glyphs)
+ if tableoffset then
+ local horizontalheader=fontdata.horizontalheader
+ local nofmetrics=horizontalheader.nofmetrics
+ local glyphs=fontdata.glyphs
+ local nofglyphs=fontdata.nofglyphs
+ local width=0
+ local leftsidebearing=0
+ for i=0,nofmetrics-1 do
+ local glyph=glyphs[i]
+ width=readshort(f)
+ leftsidebearing=readshort(f)
+ if width~=0 then
+ glyph.width=width
+ end
+ end
+ for i=nofmetrics,nofglyphs-1 do
+ local glyph=glyphs[i]
+ if width~=0 then
+ glyph.width=width
+ end
+ end
+ end
+end
+readers.vmtx=function(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"vmtx",specification.glyphs)
+ if tableoffset then
+ local verticalheader=fontdata.verticalheader
+ local nofmetrics=verticalheader.nofmetrics
+ local glyphs=fontdata.glyphs
+ local nofglyphs=fontdata.nofglyphs
+ local vheight=0
+ local vdefault=verticalheader.ascender+verticalheader.descender
+ local topsidebearing=0
+ for i=0,nofmetrics-1 do
+ local glyph=glyphs[i]
+ vheight=readshort(f)
+ topsidebearing=readshort(f)
+ if vheight~=0 and vheight~=vdefault then
+ glyph.vheight=vheight
+ end
+ end
+ for i=nofmetrics,nofglyphs-1 do
+ local glyph=glyphs[i]
+ if vheight~=0 and vheight~=vdefault then
+ glyph.vheight=vheight
+ end
+ end
+ end
+end
+readers.vorg=function(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"vorg",specification.glyphs)
+end
+readers.post=function(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"post",true)
+ if tableoffset then
+ local version=readfixed(f)
+ fontdata.postscript={
+ version=version,
+ italicangle=round(1000*readfixed(f))/1000,
+ underlineposition=readfword(f),
+ underlinethickness=readfword(f),
+ monospaced=readulong(f),
+ minmemtype42=readulong(f),
+ maxmemtype42=readulong(f),
+ minmemtype1=readulong(f),
+ maxmemtype1=readulong(f),
+ }
+ if not specification.glyphs then
+ elseif version==1.0 then
+ for index=0,#standardromanencoding do
+ glyphs[index].name=standardromanencoding[index]
+ end
+ elseif version==2.0 then
+ local glyphs=fontdata.glyphs
+ local nofglyphs=readushort(f)
+ local indices={}
+ local names={}
+ local maxnames=0
+ for i=0,nofglyphs-1 do
+ local nameindex=readushort(f)
+ if nameindex>=258 then
+ maxnames=maxnames+1
+ nameindex=nameindex-257
+ indices[nameindex]=i
+ else
+ glyphs[i].name=standardromanencoding[nameindex]
+ end
+ end
+ for i=1,maxnames do
+ local mapping=indices[i]
+ if not mapping then
+ report("quit post name fetching at %a of %a: %s",i,maxnames,"no index")
+ break
+ else
+ local length=readbyte(f)
+ if length>0 then
+ glyphs[mapping].name=readstring(f,length)
+ else
+ report("quit post name fetching at %a of %a: %s",i,maxnames,"overflow")
+ break
+ end
+ end
+ end
+ elseif version==2.5 then
+ elseif version==3.0 then
+ end
+ else
+ fontdata.postscript={}
+ end
+end
+readers.cff=function(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"cff",specification.glyphs)
+end
+local formatreaders={}
+local duplicatestoo=true
+local sequence={
+ { 3,1,4 },
+ { 3,10,12 },
+ { 0,3,4 },
+ { 0,1,4 },
+ { 0,0,6 },
+ { 3,0,6 },
+ { 0,5,14 },
+{ 0,4,12 },
+ { 3,10,13 },
+}
+local supported={}
+for i=1,#sequence do
+ local si=sequence[i]
+ local sp,se,sf=si[1],si[2],si[3]
+ local p=supported[sp]
+ if not p then
+ p={}
+ supported[sp]=p
+ end
+ local e=p[se]
+ if not e then
+ e={}
+ p[se]=e
+ end
+ e[sf]=true
+end
+formatreaders[4]=function(f,fontdata,offset)
+ setposition(f,offset+2)
+ local length=readushort(f)
+ local language=readushort(f)
+ local nofsegments=readushort(f)/2
+ skipshort(f,3)
+ local endchars={}
+ local startchars={}
+ local deltas={}
+ local offsets={}
+ local indices={}
+ local mapping=fontdata.mapping
+ local glyphs=fontdata.glyphs
+ local duplicates=fontdata.duplicates
+ local nofdone=0
+ for i=1,nofsegments do
+ endchars[i]=readushort(f)
+ end
+ local reserved=readushort(f)
+ for i=1,nofsegments do
+ startchars[i]=readushort(f)
+ end
+ for i=1,nofsegments do
+ deltas[i]=readshort(f)
+ end
+ for i=1,nofsegments do
+ offsets[i]=readushort(f)
+ end
+ local size=(length-2*2-5*2-4*nofsegments*2)/2
+ for i=1,size-1 do
+ indices[i]=readushort(f)
+ end
+ for segment=1,nofsegments do
+ local startchar=startchars[segment]
+ local endchar=endchars[segment]
+ local offset=offsets[segment]
+ local delta=deltas[segment]
+ if startchar==0xFFFF and endchar==0xFFFF then
+ elseif startchar==0xFFFF and offset==0 then
+ elseif offset==0xFFFF then
+ elseif offset==0 then
+ if trace_cmap_detail then
+ report("format 4.%i segment %2i from %C upto %C at index %H",1,segment,startchar,endchar,(startchar+delta)%65536)
+ end
+ for unicode=startchar,endchar do
+ local index=(unicode+delta)%65536
+ if index and index>0 then
+ local glyph=glyphs[index]
+ if glyph then
+ local gu=glyph.unicode
+ if not gu then
+ glyph.unicode=unicode
+ nofdone=nofdone+1
+ elseif gu~=unicode then
+ if duplicatestoo then
+ local d=duplicates[gu]
+ if d then
+ d[unicode]=true
+ else
+ duplicates[gu]={ [unicode]=true }
+ end
+ else
+ report("duplicate case 1: %C %04i %s",unicode,index,glyphs[index].name)
+ end
+ end
+ if not mapping[index] then
+ mapping[index]=unicode
+ end
+ end
+ end
+ end
+ else
+ local shift=(segment-nofsegments+offset/2)-startchar
+ if trace_cmap_detail then
+ report("format 4.%i segment %2i from %C upto %C at index %H",0,segment,startchar,endchar,(startchar+delta)%65536)
+ end
+ for unicode=startchar,endchar do
+ local slot=shift+unicode
+ local index=indices[slot]
+ if index and index>0 then
+ index=(index+delta)%65536
+ local glyph=glyphs[index]
+ if glyph then
+ local gu=glyph.unicode
+ if not gu then
+ glyph.unicode=unicode
+ nofdone=nofdone+1
+ elseif gu~=unicode then
+ if duplicatestoo then
+ local d=duplicates[gu]
+ if d then
+ d[unicode]=true
+ else
+ duplicates[gu]={ [unicode]=true }
+ end
+ else
+ report("duplicate case 2: %C %04i %s",unicode,index,glyphs[index].name)
+ end
+ end
+ if not mapping[index] then
+ mapping[index]=unicode
+ end
+ end
+ end
+ end
+ end
+ end
+ return nofdone
+end
+formatreaders[6]=function(f,fontdata,offset)
+ setposition(f,offset)
+ local format=readushort(f)
+ local length=readushort(f)
+ local language=readushort(f)
+ local mapping=fontdata.mapping
+ local glyphs=fontdata.glyphs
+ local duplicates=fontdata.duplicates
+ local start=readushort(f)
+ local count=readushort(f)
+ local stop=start+count-1
+ local nofdone=0
+ if trace_cmap_detail then
+ report("format 6 from %C to %C",2,start,stop)
+ end
+ for unicode=start,stop do
+ local index=readushort(f)
+ if index>0 then
+ local glyph=glyphs[index]
+ if glyph then
+ local gu=glyph.unicode
+ if not gu then
+ glyph.unicode=unicode
+ nofdone=nofdone+1
+ elseif gu~=unicode then
+ end
+ if not mapping[index] then
+ mapping[index]=unicode
+ end
+ end
+ end
+ end
+ return nofdone
+end
+formatreaders[12]=function(f,fontdata,offset)
+ setposition(f,offset+2+2+4+4)
+ local mapping=fontdata.mapping
+ local glyphs=fontdata.glyphs
+ local duplicates=fontdata.duplicates
+ local nofgroups=readulong(f)
+ local nofdone=0
+ for i=1,nofgroups do
+ local first=readulong(f)
+ local last=readulong(f)
+ local index=readulong(f)
+ if trace_cmap_detail then
+ report("format 12 from %C to %C starts at index %i",first,last,index)
+ end
+ for unicode=first,last do
+ local glyph=glyphs[index]
+ if glyph then
+ local gu=glyph.unicode
+ if not gu then
+ glyph.unicode=unicode
+ nofdone=nofdone+1
+ elseif gu~=unicode then
+ local d=duplicates[gu]
+ if d then
+ d[unicode]=true
+ else
+ duplicates[gu]={ [unicode]=true }
+ end
+ end
+ if not mapping[index] then
+ mapping[index]=unicode
+ end
+ end
+ index=index+1
+ end
+ end
+ return nofdone
+end
+formatreaders[13]=function(f,fontdata,offset)
+ setposition(f,offset+2+2+4+4)
+ local mapping=fontdata.mapping
+ local glyphs=fontdata.glyphs
+ local duplicates=fontdata.duplicates
+ local nofgroups=readulong(f)
+ local nofdone=0
+ for i=1,nofgroups do
+ local first=readulong(f)
+ local last=readulong(f)
+ local index=readulong(f)
+ if first<privateoffset then
+ if trace_cmap_detail then
+ report("format 13 from %C to %C get index %i",first,last,index)
+ end
+ local glyph=glyphs[index]
+ local unicode=glyph.unicode
+ if not unicode then
+ unicode=first
+ glyph.unicode=unicode
+ first=first+1
+ end
+ local list=duplicates[unicode]
+ mapping[index]=unicode
+ if not list then
+ list={}
+ duplicates[unicode]=list
+ end
+ if last>=privateoffset then
+ local limit=privateoffset-1
+ report("format 13 from %C to %C pruned to %C",first,last,limit)
+ last=limit
+ end
+ for unicode=first,last do
+ list[unicode]=true
+ end
+ nofdone=nofdone+last-first+1
+ else
+ report("format 13 from %C to %C ignored",first,last)
+ end
+ end
+ return nofdone
+end
+formatreaders[14]=function(f,fontdata,offset)
+ if offset and offset~=0 then
+ setposition(f,offset)
+ local format=readushort(f)
+ local length=readulong(f)
+ local nofrecords=readulong(f)
+ local records={}
+ local variants={}
+ local nofdone=0
+ fontdata.variants=variants
+ for i=1,nofrecords do
+ records[i]={
+ selector=readuint(f),
+ default=readulong(f),
+ other=readulong(f),
+ }
+ end
+ for i=1,nofrecords do
+ local record=records[i]
+ local selector=record.selector
+ local default=record.default
+ local other=record.other
+ local other=record.other
+ if other~=0 then
+ setposition(f,offset+other)
+ local mapping={}
+ local count=readulong(f)
+ for i=1,count do
+ mapping[readuint(f)]=readushort(f)
+ end
+ nofdone=nofdone+count
+ variants[selector]=mapping
+ end
+ end
+ return nofdone
+ else
+ return 0
+ end
+end
+local function checkcmap(f,fontdata,records,platform,encoding,format)
+ local data=records[platform]
+ if not data then
+ return 0
+ end
+ data=data[encoding]
+ if not data then
+ return 0
+ end
+ data=data[format]
+ if not data then
+ return 0
+ end
+ local reader=formatreaders[format]
+ if not reader then
+ return 0
+ end
+ local p=platforms[platform]
+ local e=encodings[p]
+ local n=reader(f,fontdata,data) or 0
+ if trace_cmap then
+ report("cmap checked: platform %i (%s), encoding %i (%s), format %i, new unicodes %i",platform,p,encoding,e and e[encoding] or "?",format,n)
+ end
+ return n
+end
+function readers.cmap(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"cmap",specification.glyphs)
+ if tableoffset then
+ local version=readushort(f)
+ local noftables=readushort(f)
+ local records={}
+ local unicodecid=false
+ local variantcid=false
+ local variants={}
+ local duplicates=fontdata.duplicates or {}
+ fontdata.duplicates=duplicates
+ for i=1,noftables do
+ local platform=readushort(f)
+ local encoding=readushort(f)
+ local offset=readulong(f)
+ local record=records[platform]
+ if not record then
+ records[platform]={
+ [encoding]={
+ offsets={ offset },
+ formats={},
+ }
+ }
+ else
+ local subtables=record[encoding]
+ if not subtables then
+ record[encoding]={
+ offsets={ offset },
+ formats={},
+ }
+ else
+ local offsets=subtables.offsets
+ offsets[#offsets+1]=offset
+ end
+ end
+ end
+ if trace_cmap then
+ report("found cmaps:")
+ end
+ for platform,record in sortedhash(records) do
+ local p=platforms[platform]
+ local e=encodings[p]
+ local sp=supported[platform]
+ local ps=p or "?"
+ if trace_cmap then
+ if sp then
+ report(" platform %i: %s",platform,ps)
+ else
+ report(" platform %i: %s (unsupported)",platform,ps)
+ end
+ end
+ for encoding,subtables in sortedhash(record) do
+ local se=sp and sp[encoding]
+ local es=e and e[encoding] or "?"
+ if trace_cmap then
+ if se then
+ report(" encoding %i: %s",encoding,es)
+ else
+ report(" encoding %i: %s (unsupported)",encoding,es)
+ end
+ end
+ local offsets=subtables.offsets
+ local formats=subtables.formats
+ for i=1,#offsets do
+ local offset=tableoffset+offsets[i]
+ setposition(f,offset)
+ formats[readushort(f)]=offset
+ end
+ record[encoding]=formats
+ if trace_cmap then
+ local list=sortedkeys(formats)
+ for i=1,#list do
+ if not (se and se[list[i]]) then
+ list[i]=list[i].." (unsupported)"
+ end
+ end
+ report(" formats: % t",list)
+ end
+ end
+ end
+ local ok=false
+ for i=1,#sequence do
+ local si=sequence[i]
+ local sp,se,sf=si[1],si[2],si[3]
+ if checkcmap(f,fontdata,records,sp,se,sf)>0 then
+ ok=true
+ end
+ end
+ if not ok then
+ report("no useable unicode cmap found")
+ end
+ fontdata.cidmaps={
+ version=version,
+ noftables=noftables,
+ records=records,
+ }
+ else
+ fontdata.cidmaps={}
+ end
+end
+function readers.loca(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"loca",specification.glyphs)
+end
+function readers.glyf(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"glyf",specification.glyphs)
+end
+function readers.colr(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"colr",specification.glyphs)
+end
+function readers.cpal(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"cpal",specification.glyphs)
+end
+function readers.svg(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"svg",specification.glyphs)
+end
+function readers.sbix(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"sbix",specification.glyphs)
+end
+function readers.cbdt(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"cbdt",specification.glyphs)
+end
+function readers.cblc(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"cblc",specification.glyphs)
+end
+function readers.ebdt(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"ebdt",specification.glyphs)
+end
+function readers.ebsc(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"ebsc",specification.glyphs)
+end
+function readers.eblc(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"eblc",specification.glyphs)
+end
+function readers.kern(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"kern",specification.kerns)
+ if tableoffset then
+ local version=readushort(f)
+ local noftables=readushort(f)
+ for i=1,noftables do
+ local version=readushort(f)
+ local length=readushort(f)
+ local coverage=readushort(f)
+ local format=bit32.rshift(coverage,8)
+ if format==0 then
+ local nofpairs=readushort(f)
+ local searchrange=readushort(f)
+ local entryselector=readushort(f)
+ local rangeshift=readushort(f)
+ local kerns={}
+ local glyphs=fontdata.glyphs
+ for i=1,nofpairs do
+ local left=readushort(f)
+ local right=readushort(f)
+ local kern=readfword(f)
+ local glyph=glyphs[left]
+ local kerns=glyph.kerns
+ if kerns then
+ kerns[right]=kern
+ else
+ glyph.kerns={ [right]=kern }
+ end
+ end
+ elseif format==2 then
+ report("todo: kern classes")
+ else
+ report("todo: kerns")
+ end
+ end
+ end
+end
+function readers.gdef(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"gdef",specification.details)
+end
+function readers.gsub(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"gsub",specification.details)
+end
+function readers.gpos(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"gpos",specification.details)
+end
+function readers.math(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"math",specification.details)
+end
+local function getinfo(maindata,sub,platformnames,rawfamilynames,metricstoo,instancenames)
+ local fontdata=sub and maindata.subfonts and maindata.subfonts[sub] or maindata
+ local names=fontdata.names
+ local info=nil
+ if names then
+ local metrics=fontdata.windowsmetrics or {}
+ local postscript=fontdata.postscript or {}
+ local fontheader=fontdata.fontheader or {}
+ local cffinfo=fontdata.cffinfo or {}
+ local filename=fontdata.filename
+ local weight=getname(fontdata,"weight") or (cffinfo and cffinfo.weight) or (metrics and metrics.weight)
+ local width=getname(fontdata,"width") or (cffinfo and cffinfo.width ) or (metrics and metrics.width )
+ local fontname=getname(fontdata,"postscriptname")
+ local fullname=getname(fontdata,"fullname")
+ local family=getname(fontdata,"family")
+ local subfamily=getname(fontdata,"subfamily")
+ local familyname=getname(fontdata,"typographicfamily")
+ local subfamilyname=getname(fontdata,"typographicsubfamily")
+ local compatiblename=getname(fontdata,"compatiblefullname")
+ if rawfamilynames then
+ else
+ if not familyname then familyname=family end
+ if not subfamilyname then subfamilyname=subfamily end
+ end
+ if platformnames then
+ platformnames=fontdata.platformnames
+ end
+ if instancenames then
+ local variabledata=fontdata.variabledata
+ if variabledata then
+ local instances=variabledata and variabledata.instances
+ if instances then
+ instancenames={}
+ for i=1,#instances do
+ instancenames[i]=lower(stripstring(instances[i].subfamily))
+ end
+ else
+ instancenames=nil
+ end
+ else
+ instancenames=nil
+ end
+ end
+ info={
+ subfontindex=fontdata.subfontindex or sub or 0,
+ version=getname(fontdata,"version"),
+ fontname=fontname,
+ fullname=fullname,
+ family=family,
+ subfamily=subfamily,
+ familyname=familyname,
+ subfamilyname=subfamilyname,
+ compatiblename=compatiblename,
+ weight=weight and lower(weight),
+ width=width and lower(width),
+ pfmweight=metrics.weightclass or 400,
+ pfmwidth=metrics.widthclass or 5,
+ panosewidth=metrics.panosewidth,
+ panoseweight=metrics.panoseweight,
+ italicangle=postscript.italicangle or 0,
+ units=fontheader.units or 0,
+ designsize=fontdata.designsize,
+ minsize=fontdata.minsize,
+ maxsize=fontdata.maxsize,
+ monospaced=(tonumber(postscript.monospaced or 0)>0) or metrics.panosewidth=="monospaced",
+ averagewidth=metrics.averagewidth,
+ xheight=metrics.xheight,
+ capheight=metrics.capheight,
+ ascender=metrics.typoascender,
+ descender=metrics.typodescender,
+ platformnames=platformnames or nil,
+ instancenames=instancenames or nil,
+ }
+ if metricstoo then
+ local keys={
+ "version",
+ "ascender","descender","linegap",
+ "maxadvancewidth","maxadvanceheight","maxextent",
+ "minbottomsidebearing","mintopsidebearing",
+ }
+ local h=fontdata.horizontalheader or {}
+ local v=fontdata.verticalheader or {}
+ if h then
+ local th={}
+ local tv={}
+ for i=1,#keys do
+ local key=keys[i]
+ th[key]=h[key] or 0
+ tv[key]=v[key] or 0
+ end
+ info.horizontalmetrics=th
+ info.verticalmetrics=tv
+ end
+ end
+ elseif n then
+ info={
+ filename=fontdata.filename,
+ comment="there is no info for subfont "..n,
+ }
+ else
+ info={
+ filename=fontdata.filename,
+ comment="there is no info",
+ }
+ end
+ return info
+end
+local function loadtables(f,specification,offset)
+ if offset then
+ setposition(f,offset)
+ end
+ local tables={}
+ local basename=file.basename(specification.filename)
+ local filesize=specification.filesize
+ local filetime=specification.filetime
+ local fontdata={
+ filename=basename,
+ filesize=filesize,
+ filetime=filetime,
+ version=readstring(f,4),
+ noftables=readushort(f),
+ searchrange=readushort(f),
+ entryselector=readushort(f),
+ rangeshift=readushort(f),
+ tables=tables,
+ foundtables=false,
+ }
+ for i=1,fontdata.noftables do
+ local tag=lower(stripstring(readstring(f,4)))
+ local checksum=readulong(f)
+ local offset=readulong(f)
+ local length=readulong(f)
+ if offset+length>filesize then
+ report("bad %a table in file %a",tag,basename)
+ end
+ tables[tag]={
+ checksum=checksum,
+ offset=offset,
+ length=length,
+ }
+ end
+ fontdata.foundtables=sortedkeys(tables)
+ if tables.cff or tables.cff2 then
+ fontdata.format="opentype"
+ else
+ fontdata.format="truetype"
+ end
+ return fontdata
+end
+local function prepareglyps(fontdata)
+ local glyphs=setmetatableindex(function(t,k)
+ local v={
+ index=k,
+ }
+ t[k]=v
+ return v
+ end)
+ fontdata.glyphs=glyphs
+ fontdata.mapping={}
+end
+local function readtable(tag,f,fontdata,specification,...)
+ local reader=readers[tag]
+ if reader then
+ reader(f,fontdata,specification,...)
+ end
+end
+local variablefonts_supported=(context and true) or (logs and logs.application and true) or false
+local function readdata(f,offset,specification)
+ local fontdata=loadtables(f,specification,offset)
+ if specification.glyphs then
+ prepareglyps(fontdata)
+ end
+ if not variablefonts_supported then
+ specification.instance=nil
+ specification.variable=nil
+ specification.factors=nil
+ end
+ fontdata.temporary={}
+ readtable("name",f,fontdata,specification)
+ local askedname=specification.askedname
+ if askedname then
+ local fullname=getname(fontdata,"fullname") or ""
+ local cleanname=gsub(askedname,"[^a-zA-Z0-9]","")
+ local foundname=gsub(fullname,"[^a-zA-Z0-9]","")
+ if lower(cleanname)~=lower(foundname) then
+ return
+ end
+ end
+ readtable("stat",f,fontdata,specification)
+ readtable("avar",f,fontdata,specification)
+ readtable("fvar",f,fontdata,specification)
+ if variablefonts_supported then
+ local variabledata=fontdata.variabledata
+ if variabledata then
+ local instances=variabledata.instances
+ local axis=variabledata.axis
+ if axis and (not instances or #instances==0) then
+ instances={}
+ variabledata.instances=instances
+ local function add(n,subfamily,value)
+ local values={}
+ for i=1,#axis do
+ local a=axis[i]
+ values[i]={
+ axis=a.tag,
+ value=i==n and value or a.default,
+ }
+ end
+ instances[#instances+1]={
+ subfamily=subfamily,
+ values=values,
+ }
+ end
+ for i=1,#axis do
+ local a=axis[i]
+ local tag=a.tag
+ add(i,"default"..tag,a.default)
+ add(i,"minimum"..tag,a.minimum)
+ add(i,"maximum"..tag,a.maximum)
+ end
+ end
+ end
+ if not specification.factors then
+ local instance=specification.instance
+ if type(instance)=="string" then
+ local factors=helpers.getfactors(fontdata,instance)
+ if factors then
+ specification.factors=factors
+ fontdata.factors=factors
+ fontdata.instance=instance
+ report("user instance: %s, factors: % t",instance,factors)
+ else
+ report("user instance: %s, bad factors",instance)
+ end
+ end
+ end
+ if not fontdata.factors then
+ if fontdata.variabledata then
+ local factors=helpers.getfactors(fontdata,true)
+ if factors then
+ specification.factors=factors
+ fontdata.factors=factors
+ report("factors: % t",factors)
+ else
+ report("bad factors")
+ end
+ else
+ end
+ end
+ end
+ readtable("os/2",f,fontdata,specification)
+ readtable("head",f,fontdata,specification)
+ readtable("maxp",f,fontdata,specification)
+ readtable("hhea",f,fontdata,specification)
+ readtable("vhea",f,fontdata,specification)
+ readtable("hmtx",f,fontdata,specification)
+ readtable("vmtx",f,fontdata,specification)
+ readtable("vorg",f,fontdata,specification)
+ readtable("post",f,fontdata,specification)
+ readtable("mvar",f,fontdata,specification)
+ readtable("hvar",f,fontdata,specification)
+ readtable("vvar",f,fontdata,specification)
+ readtable("gdef",f,fontdata,specification)
+ readtable("cff",f,fontdata,specification)
+ readtable("cff2",f,fontdata,specification)
+ readtable("cmap",f,fontdata,specification)
+ readtable("loca",f,fontdata,specification)
+ readtable("glyf",f,fontdata,specification)
+ readtable("colr",f,fontdata,specification)
+ readtable("cpal",f,fontdata,specification)
+ readtable("svg",f,fontdata,specification)
+ readtable("sbix",f,fontdata,specification)
+ readtable("cbdt",f,fontdata,specification)
+ readtable("cblc",f,fontdata,specification)
+ readtable("ebdt",f,fontdata,specification)
+ readtable("eblc",f,fontdata,specification)
+ readtable("kern",f,fontdata,specification)
+ readtable("gsub",f,fontdata,specification)
+ readtable("gpos",f,fontdata,specification)
+ readtable("math",f,fontdata,specification)
+ fontdata.locations=nil
+ fontdata.tables=nil
+ fontdata.cidmaps=nil
+ fontdata.dictionaries=nil
+ return fontdata
+end
+local function loadfontdata(specification)
+ local filename=specification.filename
+ local fileattr=lfs.attributes(filename)
+ local filesize=fileattr and fileattr.size or 0
+ local filetime=fileattr and fileattr.modification or 0
+ local f=openfile(filename,true)
+ if not f then
+ report("unable to open %a",filename)
+ elseif filesize==0 then
+ report("empty file %a",filename)
+ closefile(f)
+ else
+ specification.filesize=filesize
+ specification.filetime=filetime
+ local version=readstring(f,4)
+ local fontdata=nil
+ if version=="OTTO" or version=="true" or version=="\0\1\0\0" then
+ fontdata=readdata(f,0,specification)
+ elseif version=="ttcf" then
+ local subfont=tonumber(specification.subfont)
+ local offsets={}
+ local ttcversion=readulong(f)
+ local nofsubfonts=readulong(f)
+ for i=1,nofsubfonts do
+ offsets[i]=readulong(f)
+ end
+ if subfont then
+ if subfont>=1 and subfont<=nofsubfonts then
+ fontdata=readdata(f,offsets[subfont],specification)
+ else
+ report("no subfont %a in file %a",subfont,filename)
+ end
+ else
+ subfont=specification.subfont
+ if type(subfont)=="string" and subfont~="" then
+ specification.askedname=subfont
+ for i=1,nofsubfonts do
+ fontdata=readdata(f,offsets[i],specification)
+ if fontdata then
+ fontdata.subfontindex=i
+ report("subfont named %a has index %a",subfont,i)
+ break
+ end
+ end
+ if not fontdata then
+ report("no subfont named %a",subfont)
+ end
+ else
+ local subfonts={}
+ fontdata={
+ filename=filename,
+ filesize=filesize,
+ filetime=filetime,
+ version=version,
+ subfonts=subfonts,
+ ttcversion=ttcversion,
+ nofsubfonts=nofsubfonts,
+ }
+ for i=1,nofsubfonts do
+ subfonts[i]=readdata(f,offsets[i],specification)
+ end
+ end
+ end
+ else
+ report("unknown version %a in file %a",version,filename)
+ end
+ closefile(f)
+ return fontdata or {}
+ end
+end
+local function loadfont(specification,n,instance)
+ if type(specification)=="string" then
+ specification={
+ filename=specification,
+ info=true,
+ details=true,
+ glyphs=true,
+ shapes=true,
+ kerns=true,
+ variable=true,
+ globalkerns=true,
+ lookups=true,
+ subfont=n or true,
+ tounicode=false,
+ instance=instance
+ }
+ end
+ if specification.shapes or specification.lookups or specification.kerns then
+ specification.glyphs=true
+ end
+ if specification.glyphs then
+ specification.details=true
+ end
+ if specification.details then
+ specification.info=true
+ end
+ if specification.platformnames then
+ specification.platformnames=true
+ end
+ if specification.instance or instance then
+ specification.variable=true
+ specification.instance=specification.instance or instance
+ end
+ local function message(str)
+ report("fatal error in file %a: %s\n%s",specification.filename,str,debug.traceback())
+ end
+ local ok,result=xpcall(loadfontdata,message,specification)
+ if ok then
+ return result
+ end
+end
+function readers.loadshapes(filename,n,instance,streams)
+ local fontdata=loadfont {
+ filename=filename,
+ shapes=true,
+ streams=streams,
+ variable=true,
+ subfont=n,
+ instance=instance,
+ }
+ if fontdata then
+ for k,v in next,fontdata.glyphs do
+ v.class=nil
+ v.index=nil
+ v.math=nil
+ end
+ end
+ return fontdata and {
+ filename=filename,
+ format=fontdata.format,
+ glyphs=fontdata.glyphs,
+ units=fontdata.fontheader.units,
+ } or {
+ filename=filename,
+ format="unknown",
+ glyphs={},
+ units=0,
+ }
+end
+function readers.loadfont(filename,n,instance)
+ local fontdata=loadfont {
+ filename=filename,
+ glyphs=true,
+ shapes=false,
+ lookups=true,
+ variable=true,
+ subfont=n,
+ instance=instance,
+ }
+ if fontdata then
+ return {
+ tableversion=tableversion,
+ creator="context mkiv",
+ size=fontdata.filesize,
+ time=fontdata.filetime,
+ glyphs=fontdata.glyphs,
+ descriptions=fontdata.descriptions,
+ format=fontdata.format,
+ goodies={},
+ metadata=getinfo(fontdata,n,false,false,true,true),
+ properties={
+ hasitalics=fontdata.hasitalics or false,
+ maxcolorclass=fontdata.maxcolorclass,
+ hascolor=fontdata.hascolor or false,
+ instance=fontdata.instance,
+ factors=fontdata.factors,
+ },
+ resources={
+ filename=filename,
+ private=privateoffset,
+ duplicates=fontdata.duplicates or {},
+ features=fontdata.features or {},
+ sublookups=fontdata.sublookups or {},
+ marks=fontdata.marks or {},
+ markclasses=fontdata.markclasses or {},
+ marksets=fontdata.marksets or {},
+ sequences=fontdata.sequences or {},
+ variants=fontdata.variants,
+ version=getname(fontdata,"version"),
+ cidinfo=fontdata.cidinfo,
+ mathconstants=fontdata.mathconstants,
+ colorpalettes=fontdata.colorpalettes,
+ svgshapes=fontdata.svgshapes,
+ sbixshapes=fontdata.sbixshapes,
+ variabledata=fontdata.variabledata,
+ foundtables=fontdata.foundtables,
+ },
+ }
+ end
+end
+function readers.getinfo(filename,specification)
+ local subfont=nil
+ local platformnames=false
+ local rawfamilynames=false
+ local instancenames=true
+ if type(specification)=="table" then
+ subfont=tonumber(specification.subfont)
+ platformnames=specification.platformnames
+ rawfamilynames=specification.rawfamilynames
+ else
+ subfont=tonumber(specification)
+ end
+ local fontdata=loadfont {
+ filename=filename,
+ details=true,
+ platformnames=platformnames,
+ instancenames=true,
+ }
+ if fontdata then
+ local subfonts=fontdata.subfonts
+ if not subfonts then
+ return getinfo(fontdata,nil,platformnames,rawfamilynames,false,instancenames)
+ elseif not subfont then
+ local info={}
+ for i=1,#subfonts do
+ info[i]=getinfo(fontdata,i,platformnames,rawfamilynames,false,instancenames)
+ end
+ return info
+ elseif subfont>=1 and subfont<=#subfonts then
+ return getinfo(fontdata,subfont,platformnames,rawfamilynames,false,instancenames)
+ else
+ return {
+ filename=filename,
+ comment="there is no subfont "..subfont.." in this file"
+ }
+ end
+ else
+ return {
+ filename=filename,
+ comment="the file cannot be opened for reading",
+ }
+ end
+end
+function readers.rehash(fontdata,hashmethod)
+ report("the %a helper is not yet implemented","rehash")
+end
+function readers.checkhash(fontdata)
+ report("the %a helper is not yet implemented","checkhash")
+end
+function readers.pack(fontdata,hashmethod)
+ report("the %a helper is not yet implemented","pack")
+end
+function readers.unpack(fontdata)
+ report("the %a helper is not yet implemented","unpack")
+end
+function readers.expand(fontdata)
+ report("the %a helper is not yet implemented","unpack")
+end
+function readers.compact(fontdata)
+ report("the %a helper is not yet implemented","compact")
+end
+local extenders={}
+function readers.registerextender(extender)
+ extenders[#extenders+1]=extender
+end
+function readers.extend(fontdata)
+ for i=1,#extenders do
+ local extender=extenders[i]
+ local name=extender.name or "unknown"
+ local action=extender.action
+ if action then
+ action(fontdata)
+ end
+ end
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-cff']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local next,type,tonumber=next,type,tonumber
+local byte,char,gmatch=string.byte,string.char,string.gmatch
+local concat,remove=table.concat,table.remove
+local floor,abs,round,ceil,min,max=math.floor,math.abs,math.round,math.ceil,math.min,math.max
+local P,C,R,S,C,Cs,Ct=lpeg.P,lpeg.C,lpeg.R,lpeg.S,lpeg.C,lpeg.Cs,lpeg.Ct
+local lpegmatch=lpeg.match
+local formatters=string.formatters
+local bytetable=string.bytetable
+local readers=fonts.handlers.otf.readers
+local streamreader=readers.streamreader
+local readstring=streamreader.readstring
+local readbyte=streamreader.readcardinal1
+local readushort=streamreader.readcardinal2
+local readuint=streamreader.readcardinal3
+local readulong=streamreader.readcardinal4
+local setposition=streamreader.setposition
+local getposition=streamreader.getposition
+local readbytetable=streamreader.readbytetable
+local setmetatableindex=table.setmetatableindex
+local trace_charstrings=false trackers.register("fonts.cff.charstrings",function(v) trace_charstrings=v end)
+local report=logs.reporter("otf reader","cff")
+local parsedictionaries
+local parsecharstring
+local parsecharstrings
+local resetcharstrings
+local parseprivates
+local startparsing
+local stopparsing
+local defaultstrings={ [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","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","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","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",
+ "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",
+ "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","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",
+ "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","001.000","001.001","001.002","001.003",
+ "Black","Bold","Book","Light","Medium","Regular","Roman","Semibold",
+}
+local cffreaders={
+ readbyte,
+ readushort,
+ readuint,
+ readulong,
+}
+local function readheader(f)
+ local offset=getposition(f)
+ local major=readbyte(f)
+ local header={
+ offset=offset,
+ major=major,
+ minor=readbyte(f),
+ size=readbyte(f),
+ }
+ if major==1 then
+ header.dsize=readbyte(f)
+ elseif major==2 then
+ header.dsize=readushort(f)
+ else
+ end
+ setposition(f,offset+header.size)
+ return header
+end
+local function readlengths(f,longcount)
+ local count=longcount and readulong(f) or readushort(f)
+ if count==0 then
+ return {}
+ end
+ local osize=readbyte(f)
+ local read=cffreaders[osize]
+ if not read then
+ report("bad offset size: %i",osize)
+ return {}
+ end
+ local lengths={}
+ local previous=read(f)
+ for i=1,count do
+ local offset=read(f)
+ local length=offset-previous
+ if length<0 then
+ report("bad offset: %i",length)
+ length=0
+ end
+ lengths[i]=length
+ previous=offset
+ end
+ return lengths
+end
+local function readfontnames(f)
+ local names=readlengths(f)
+ for i=1,#names do
+ names[i]=readstring(f,names[i])
+ end
+ return names
+end
+local function readtopdictionaries(f)
+ local dictionaries=readlengths(f)
+ for i=1,#dictionaries do
+ dictionaries[i]=readstring(f,dictionaries[i])
+ end
+ return dictionaries
+end
+local function readstrings(f)
+ local lengths=readlengths(f)
+ local strings=setmetatableindex({},defaultstrings)
+ local index=#defaultstrings
+ for i=1,#lengths do
+ index=index+1
+ strings[index]=readstring(f,lengths[i])
+ end
+ return strings
+end
+do
+ local stack={}
+ local top=0
+ local result={}
+ local strings={}
+ local p_single=P("\00")/function()
+ result.version=strings[stack[top]] or "unset"
+ top=0
+ end+P("\01")/function()
+ result.notice=strings[stack[top]] or "unset"
+ top=0
+ end+P("\02")/function()
+ result.fullname=strings[stack[top]] or "unset"
+ top=0
+ end+P("\03")/function()
+ result.familyname=strings[stack[top]] or "unset"
+ top=0
+ end+P("\04")/function()
+ result.weight=strings[stack[top]] or "unset"
+ top=0
+ end+P("\05")/function()
+ result.fontbbox={ unpack(stack,1,4) }
+ top=0
+ end
++P("\13")/function()
+ result.uniqueid=stack[top]
+ top=0
+ end+P("\14")/function()
+ result.xuid=concat(stack,"",1,top)
+ top=0
+ end+P("\15")/function()
+ result.charset=stack[top]
+ top=0
+ end+P("\16")/function()
+ result.encoding=stack[top]
+ top=0
+ end+P("\17")/function()
+ result.charstrings=stack[top]
+ top=0
+ end+P("\18")/function()
+ result.private={
+ size=stack[top-1],
+ offset=stack[top],
+ }
+ top=0
+ end+P("\19")/function()
+ result.subroutines=stack[top]
+ top=0
+ end+P("\20")/function()
+ result.defaultwidthx=stack[top]
+ top=0
+ end+P("\21")/function()
+ result.nominalwidthx=stack[top]
+ top=0
+ end
++P("\24")/function()
+ result.vstore=stack[top]
+ top=0
+ end+P("\25")/function()
+ result.maxstack=stack[top]
+ top=0
+ end
+ local p_double=P("\12")*(
+ P("\00")/function()
+ result.copyright=stack[top]
+ top=0
+ end+P("\01")/function()
+ result.monospaced=stack[top]==1 and true or false
+ top=0
+ end+P("\02")/function()
+ result.italicangle=stack[top]
+ top=0
+ end+P("\03")/function()
+ result.underlineposition=stack[top]
+ top=0
+ end+P("\04")/function()
+ result.underlinethickness=stack[top]
+ top=0
+ end+P("\05")/function()
+ result.painttype=stack[top]
+ top=0
+ end+P("\06")/function()
+ result.charstringtype=stack[top]
+ top=0
+ end+P("\07")/function()
+ result.fontmatrix={ unpack(stack,1,6) }
+ top=0
+ end+P("\08")/function()
+ result.strokewidth=stack[top]
+ top=0
+ end+P("\20")/function()
+ result.syntheticbase=stack[top]
+ top=0
+ end+P("\21")/function()
+ result.postscript=strings[stack[top]] or "unset"
+ top=0
+ end+P("\22")/function()
+ result.basefontname=strings[stack[top]] or "unset"
+ top=0
+ end+P("\21")/function()
+ result.basefontblend=stack[top]
+ top=0
+ end+P("\30")/function()
+ result.cid.registry=strings[stack[top-2]] or "unset"
+ result.cid.ordering=strings[stack[top-1]] or "unset"
+ result.cid.supplement=stack[top]
+ top=0
+ end+P("\31")/function()
+ result.cid.fontversion=stack[top]
+ top=0
+ end+P("\32")/function()
+ result.cid.fontrevision=stack[top]
+ top=0
+ end+P("\33")/function()
+ result.cid.fonttype=stack[top]
+ top=0
+ end+P("\34")/function()
+ result.cid.count=stack[top]
+ top=0
+ end+P("\35")/function()
+ result.cid.uidbase=stack[top]
+ top=0
+ end+P("\36")/function()
+ result.cid.fdarray=stack[top]
+ top=0
+ end+P("\37")/function()
+ result.cid.fdselect=stack[top]
+ top=0
+ end+P("\38")/function()
+ result.cid.fontname=strings[stack[top]] or "unset"
+ top=0
+ end
+ )
+ local p_last=P("\x0F")/"0"+P("\x1F")/"1"+P("\x2F")/"2"+P("\x3F")/"3"+P("\x4F")/"4"+P("\x5F")/"5"+P("\x6F")/"6"+P("\x7F")/"7"+P("\x8F")/"8"+P("\x9F")/"9"+P("\xAF")/""+P("\xBF")/""+P("\xCF")/""+P("\xDF")/""+P("\xEF")/""+R("\xF0\xFF")/""
+ local remap={
+ ["\x00"]="00",["\x01"]="01",["\x02"]="02",["\x03"]="03",["\x04"]="04",["\x05"]="05",["\x06"]="06",["\x07"]="07",["\x08"]="08",["\x09"]="09",["\x0A"]="0.",["\x0B"]="0E",["\x0C"]="0E-",["\x0D"]="0",["\x0E"]="0-",["\x0F"]="0",
+ ["\x10"]="10",["\x11"]="11",["\x12"]="12",["\x13"]="13",["\x14"]="14",["\x15"]="15",["\x16"]="16",["\x17"]="17",["\x18"]="18",["\x19"]="19",["\x1A"]="0.",["\x1B"]="0E",["\x1C"]="0E-",["\x1D"]="0",["\x1E"]="0-",["\x1F"]="0",
+ ["\x20"]="20",["\x21"]="21",["\x22"]="22",["\x23"]="23",["\x24"]="24",["\x25"]="25",["\x26"]="26",["\x27"]="27",["\x28"]="28",["\x29"]="29",["\x2A"]="0.",["\x2B"]="0E",["\x2C"]="0E-",["\x2D"]="0",["\x2E"]="0-",["\x2F"]="0",
+ ["\x30"]="30",["\x31"]="31",["\x32"]="32",["\x33"]="33",["\x34"]="34",["\x35"]="35",["\x36"]="36",["\x37"]="37",["\x38"]="38",["\x39"]="39",["\x3A"]="0.",["\x3B"]="0E",["\x3C"]="0E-",["\x3D"]="0",["\x3E"]="0-",["\x3F"]="0",
+ ["\x40"]="40",["\x41"]="41",["\x42"]="42",["\x43"]="43",["\x44"]="44",["\x45"]="45",["\x46"]="46",["\x47"]="47",["\x48"]="48",["\x49"]="49",["\x4A"]="0.",["\x4B"]="0E",["\x4C"]="0E-",["\x4D"]="0",["\x4E"]="0-",["\x4F"]="0",
+ ["\x50"]="50",["\x51"]="51",["\x52"]="52",["\x53"]="53",["\x54"]="54",["\x55"]="55",["\x56"]="56",["\x57"]="57",["\x58"]="58",["\x59"]="59",["\x5A"]="0.",["\x5B"]="0E",["\x5C"]="0E-",["\x5D"]="0",["\x5E"]="0-",["\x5F"]="0",
+ ["\x60"]="60",["\x61"]="61",["\x62"]="62",["\x63"]="63",["\x64"]="64",["\x65"]="65",["\x66"]="66",["\x67"]="67",["\x68"]="68",["\x69"]="69",["\x6A"]="0.",["\x6B"]="0E",["\x6C"]="0E-",["\x6D"]="0",["\x6E"]="0-",["\x6F"]="0",
+ ["\x70"]="70",["\x71"]="71",["\x72"]="72",["\x73"]="73",["\x74"]="74",["\x75"]="75",["\x76"]="76",["\x77"]="77",["\x78"]="78",["\x79"]="79",["\x7A"]="0.",["\x7B"]="0E",["\x7C"]="0E-",["\x7D"]="0",["\x7E"]="0-",["\x7F"]="0",
+ ["\x80"]="80",["\x81"]="81",["\x82"]="82",["\x83"]="83",["\x84"]="84",["\x85"]="85",["\x86"]="86",["\x87"]="87",["\x88"]="88",["\x89"]="89",["\x8A"]="0.",["\x8B"]="0E",["\x8C"]="0E-",["\x8D"]="0",["\x8E"]="0-",["\x8F"]="0",
+ ["\x90"]="90",["\x91"]="91",["\x92"]="92",["\x93"]="93",["\x94"]="94",["\x95"]="95",["\x96"]="96",["\x97"]="97",["\x98"]="98",["\x99"]="99",["\x9A"]="0.",["\x9B"]="0E",["\x9C"]="0E-",["\x9D"]="0",["\x9E"]="0-",["\x9F"]="0",
+ ["\xA0"]=".0",["\xA1"]=".1",["\xA2"]=".2",["\xA3"]=".3",["\xA4"]=".4",["\xA5"]=".5",["\xA6"]=".6",["\xA7"]=".7",["\xA8"]=".8",["\xA9"]=".9",["\xAA"]="..",["\xAB"]=".E",["\xAC"]=".E-",["\xAD"]=".",["\xAE"]=".-",["\xAF"]=".",
+ ["\xB0"]="E0",["\xB1"]="E1",["\xB2"]="E2",["\xB3"]="E3",["\xB4"]="E4",["\xB5"]="E5",["\xB6"]="E6",["\xB7"]="E7",["\xB8"]="E8",["\xB9"]="E9",["\xBA"]="E.",["\xBB"]="EE",["\xBC"]="EE-",["\xBD"]="E",["\xBE"]="E-",["\xBF"]="E",
+ ["\xC0"]="E-0",["\xC1"]="E-1",["\xC2"]="E-2",["\xC3"]="E-3",["\xC4"]="E-4",["\xC5"]="E-5",["\xC6"]="E-6",["\xC7"]="E-7",["\xC8"]="E-8",["\xC9"]="E-9",["\xCA"]="E-.",["\xCB"]="E-E",["\xCC"]="E-E-",["\xCD"]="E-",["\xCE"]="E--",["\xCF"]="E-",
+ ["\xD0"]="-0",["\xD1"]="-1",["\xD2"]="-2",["\xD3"]="-3",["\xD4"]="-4",["\xD5"]="-5",["\xD6"]="-6",["\xD7"]="-7",["\xD8"]="-8",["\xD9"]="-9",["\xDA"]="-.",["\xDB"]="-E",["\xDC"]="-E-",["\xDD"]="-",["\xDE"]="--",["\xDF"]="-",
+ }
+ local p_nibbles=P("\30")*Cs(((1-p_last)/remap)^0+p_last)/function(n)
+ top=top+1
+ stack[top]=tonumber(n) or 0
+ end
+ local p_byte=C(R("\32\246"))/function(b0)
+ top=top+1
+ stack[top]=byte(b0)-139
+ end
+ local p_positive=C(R("\247\250"))*C(1)/function(b0,b1)
+ top=top+1
+ stack[top]=(byte(b0)-247)*256+byte(b1)+108
+ end
+ local p_negative=C(R("\251\254"))*C(1)/function(b0,b1)
+ top=top+1
+ stack[top]=-(byte(b0)-251)*256-byte(b1)-108
+ end
+ local p_short=P("\28")*C(1)*C(1)/function(b1,b2)
+ top=top+1
+ local n=0x100*byte(b1)+byte(b2)
+ if n>=0x8000 then
+ stack[top]=n-0xFFFF-1
+ else
+ stack[top]=n
+ end
+ end
+ local p_long=P("\29")*C(1)*C(1)*C(1)*C(1)/function(b1,b2,b3,b4)
+ top=top+1
+ local n=0x1000000*byte(b1)+0x10000*byte(b2)+0x100*byte(b3)+byte(b4)
+ if n>=0x8000000 then
+ stack[top]=n-0xFFFFFFFF-1
+ else
+ stack[top]=n
+ end
+ end
+ local p_unsupported=P(1)/function(detail)
+ top=0
+ end
+ local p_dictionary=(
+ p_byte+p_positive+p_negative+p_short+p_long+p_nibbles+p_single+p_double+p_unsupported
+ )^1
+ parsedictionaries=function(data,dictionaries,what)
+ stack={}
+ strings=data.strings
+ for i=1,#dictionaries do
+ top=0
+ result=what=="cff" and {
+ monospaced=false,
+ italicangle=0,
+ underlineposition=-100,
+ underlinethickness=50,
+ painttype=0,
+ charstringtype=2,
+ fontmatrix={ 0.001,0,0,0.001,0,0 },
+ fontbbox={ 0,0,0,0 },
+ strokewidth=0,
+ charset=0,
+ encoding=0,
+ cid={
+ fontversion=0,
+ fontrevision=0,
+ fonttype=0,
+ count=8720,
+ }
+ } or {
+ charstringtype=2,
+ charset=0,
+ vstore=0,
+ cid={
+ },
+ }
+ lpegmatch(p_dictionary,dictionaries[i])
+ dictionaries[i]=result
+ end
+ result={}
+ top=0
+ stack={}
+ end
+ parseprivates=function(data,dictionaries)
+ stack={}
+ strings=data.strings
+ for i=1,#dictionaries do
+ local private=dictionaries[i].private
+ if private and private.data then
+ top=0
+ result={
+ forcebold=false,
+ languagegroup=0,
+ expansionfactor=0.06,
+ initialrandomseed=0,
+ subroutines=0,
+ defaultwidthx=0,
+ nominalwidthx=0,
+ cid={
+ },
+ }
+ lpegmatch(p_dictionary,private.data)
+ private.data=result
+ end
+ end
+ result={}
+ top=0
+ stack={}
+ end
+ local x=0
+ local y=0
+ local width=false
+ local r=0
+ local stems=0
+ local globalbias=0
+ local localbias=0
+ local nominalwidth=0
+ local defaultwidth=0
+ local charset=false
+ local globals=false
+ local locals=false
+ local depth=1
+ local xmin=0
+ local xmax=0
+ local ymin=0
+ local ymax=0
+ local checked=false
+ local keepcurve=false
+ local version=2
+ local regions=false
+ local nofregions=0
+ local region=false
+ local factors=false
+ local axis=false
+ local vsindex=0
+ local function showstate(where)
+ report("%w%-10s : [%s] n=%i",depth*2,where,concat(stack," ",1,top),top)
+ end
+ local function showvalue(where,value,showstack)
+ if showstack then
+ report("%w%-10s : %s : [%s] n=%i",depth*2,where,tostring(value),concat(stack," ",1,top),top)
+ else
+ report("%w%-10s : %s",depth*2,where,tostring(value))
+ end
+ end
+ local function xymoveto()
+ if keepcurve then
+ r=r+1
+ result[r]={ x,y,"m" }
+ end
+ if checked then
+ if x>xmax then xmax=x elseif x<xmin then xmin=x end
+ if y>ymax then ymax=y elseif y<ymin then ymin=y end
+ else
+ xmin=x
+ ymin=y
+ xmax=x
+ ymax=y
+ checked=true
+ end
+ end
+ local function xmoveto()
+ if keepcurve then
+ r=r+1
+ result[r]={ x,y,"m" }
+ end
+ if not checked then
+ xmin=x
+ ymin=y
+ xmax=x
+ ymax=y
+ checked=true
+ elseif x>xmax then
+ xmax=x
+ elseif x<xmin then
+ xmin=x
+ end
+ end
+ local function ymoveto()
+ if keepcurve then
+ r=r+1
+ result[r]={ x,y,"m" }
+ end
+ if not checked then
+ xmin=x
+ ymin=y
+ xmax=x
+ ymax=y
+ checked=true
+ elseif y>ymax then
+ ymax=y
+ elseif y<ymin then
+ ymin=y
+ end
+ end
+ local function moveto()
+ if trace_charstrings then
+ showstate("moveto")
+ end
+ top=0
+ xymoveto()
+ end
+ local function xylineto()
+ if keepcurve then
+ r=r+1
+ result[r]={ x,y,"l" }
+ end
+ if checked then
+ if x>xmax then xmax=x elseif x<xmin then xmin=x end
+ if y>ymax then ymax=y elseif y<ymin then ymin=y end
+ else
+ xmin=x
+ ymin=y
+ xmax=x
+ ymax=y
+ checked=true
+ end
+ end
+ local function xlineto()
+ if keepcurve then
+ r=r+1
+ result[r]={ x,y,"l" }
+ end
+ if not checked then
+ xmin=x
+ ymin=y
+ xmax=x
+ ymax=y
+ checked=true
+ elseif x>xmax then
+ xmax=x
+ elseif x<xmin then
+ xmin=x
+ end
+ end
+ local function ylineto()
+ if keepcurve then
+ r=r+1
+ result[r]={ x,y,"l" }
+ end
+ if not checked then
+ xmin=x
+ ymin=y
+ xmax=x
+ ymax=y
+ checked=true
+ elseif y>ymax then
+ ymax=y
+ elseif y<ymin then
+ ymin=y
+ end
+ end
+ local function xycurveto(x1,y1,x2,y2,x3,y3)
+ if trace_charstrings then
+ showstate("curveto")
+ end
+ if keepcurve then
+ r=r+1
+ result[r]={ x1,y1,x2,y2,x3,y3,"c" }
+ end
+ if checked then
+ if x1>xmax then xmax=x1 elseif x1<xmin then xmin=x1 end
+ if y1>ymax then ymax=y1 elseif y1<ymin then ymin=y1 end
+ else
+ xmin=x1
+ ymin=y1
+ xmax=x1
+ ymax=y1
+ checked=true
+ end
+ if x2>xmax then xmax=x2 elseif x2<xmin then xmin=x2 end
+ if y2>ymax then ymax=y2 elseif y2<ymin then ymin=y2 end
+ if x3>xmax then xmax=x3 elseif x3<xmin then xmin=x3 end
+ if y3>ymax then ymax=y3 elseif y3<ymin then ymin=y3 end
+ end
+ local function rmoveto()
+ if not width then
+ if top>2 then
+ width=stack[1]
+ if trace_charstrings then
+ showvalue("backtrack width",width)
+ end
+ else
+ width=true
+ end
+ end
+ if trace_charstrings then
+ showstate("rmoveto")
+ end
+ x=x+stack[top-1]
+ y=y+stack[top]
+ top=0
+ xymoveto()
+ end
+ local function hmoveto()
+ if not width then
+ if top>1 then
+ width=stack[1]
+ if trace_charstrings then
+ showvalue("backtrack width",width)
+ end
+ else
+ width=true
+ end
+ end
+ if trace_charstrings then
+ showstate("hmoveto")
+ end
+ x=x+stack[top]
+ top=0
+ xmoveto()
+ end
+ local function vmoveto()
+ if not width then
+ if top>1 then
+ width=stack[1]
+ if trace_charstrings then
+ showvalue("backtrack width",width)
+ end
+ else
+ width=true
+ end
+ end
+ if trace_charstrings then
+ showstate("vmoveto")
+ end
+ y=y+stack[top]
+ top=0
+ ymoveto()
+ end
+ local function rlineto()
+ if trace_charstrings then
+ showstate("rlineto")
+ end
+ for i=1,top,2 do
+ x=x+stack[i]
+ y=y+stack[i+1]
+ xylineto()
+ end
+ top=0
+ end
+ local function hlineto()
+ if trace_charstrings then
+ showstate("hlineto")
+ end
+ if top==1 then
+ x=x+stack[1]
+ xlineto()
+ else
+ local swap=true
+ for i=1,top do
+ if swap then
+ x=x+stack[i]
+ xlineto()
+ swap=false
+ else
+ y=y+stack[i]
+ ylineto()
+ swap=true
+ end
+ end
+ end
+ top=0
+ end
+ local function vlineto()
+ if trace_charstrings then
+ showstate("vlineto")
+ end
+ if top==1 then
+ y=y+stack[1]
+ ylineto()
+ else
+ local swap=false
+ for i=1,top do
+ if swap then
+ x=x+stack[i]
+ xlineto()
+ swap=false
+ else
+ y=y+stack[i]
+ ylineto()
+ swap=true
+ end
+ end
+ end
+ top=0
+ end
+ local function rrcurveto()
+ if trace_charstrings then
+ showstate("rrcurveto")
+ end
+ for i=1,top,6 do
+ local ax=x+stack[i]
+ local ay=y+stack[i+1]
+ local bx=ax+stack[i+2]
+ local by=ay+stack[i+3]
+ x=bx+stack[i+4]
+ y=by+stack[i+5]
+ xycurveto(ax,ay,bx,by,x,y)
+ end
+ top=0
+ end
+ local function hhcurveto()
+ if trace_charstrings then
+ showstate("hhcurveto")
+ end
+ local s=1
+ if top%2~=0 then
+ y=y+stack[1]
+ s=2
+ end
+ for i=s,top,4 do
+ local ax=x+stack[i]
+ local ay=y
+ local bx=ax+stack[i+1]
+ local by=ay+stack[i+2]
+ x=bx+stack[i+3]
+ y=by
+ xycurveto(ax,ay,bx,by,x,y)
+ end
+ top=0
+ end
+ local function vvcurveto()
+ if trace_charstrings then
+ showstate("vvcurveto")
+ end
+ local s=1
+ local d=0
+ if top%2~=0 then
+ d=stack[1]
+ s=2
+ end
+ for i=s,top,4 do
+ local ax=x+d
+ local ay=y+stack[i]
+ local bx=ax+stack[i+1]
+ local by=ay+stack[i+2]
+ x=bx
+ y=by+stack[i+3]
+ xycurveto(ax,ay,bx,by,x,y)
+ d=0
+ end
+ top=0
+ end
+ local function xxcurveto(swap)
+ local last=top%4~=0 and stack[top]
+ if last then
+ top=top-1
+ end
+ for i=1,top,4 do
+ local ax,ay,bx,by
+ if swap then
+ ax=x+stack[i]
+ ay=y
+ bx=ax+stack[i+1]
+ by=ay+stack[i+2]
+ y=by+stack[i+3]
+ if last and i+3==top then
+ x=bx+last
+ else
+ x=bx
+ end
+ swap=false
+ else
+ ax=x
+ ay=y+stack[i]
+ bx=ax+stack[i+1]
+ by=ay+stack[i+2]
+ x=bx+stack[i+3]
+ if last and i+3==top then
+ y=by+last
+ else
+ y=by
+ end
+ swap=true
+ end
+ xycurveto(ax,ay,bx,by,x,y)
+ end
+ top=0
+ end
+ local function hvcurveto()
+ if trace_charstrings then
+ showstate("hvcurveto")
+ end
+ xxcurveto(true)
+ end
+ local function vhcurveto()
+ if trace_charstrings then
+ showstate("vhcurveto")
+ end
+ xxcurveto(false)
+ end
+ local function rcurveline()
+ if trace_charstrings then
+ showstate("rcurveline")
+ end
+ for i=1,top-2,6 do
+ local ax=x+stack[i]
+ local ay=y+stack[i+1]
+ local bx=ax+stack[i+2]
+ local by=ay+stack[i+3]
+ x=bx+stack[i+4]
+ y=by+stack[i+5]
+ xycurveto(ax,ay,bx,by,x,y)
+ end
+ x=x+stack[top-1]
+ y=y+stack[top]
+ xylineto()
+ top=0
+ end
+ local function rlinecurve()
+ if trace_charstrings then
+ showstate("rlinecurve")
+ end
+ if top>6 then
+ for i=1,top-6,2 do
+ x=x+stack[i]
+ y=y+stack[i+1]
+ xylineto()
+ end
+ end
+ local ax=x+stack[top-5]
+ local ay=y+stack[top-4]
+ local bx=ax+stack[top-3]
+ local by=ay+stack[top-2]
+ x=bx+stack[top-1]
+ y=by+stack[top]
+ xycurveto(ax,ay,bx,by,x,y)
+ top=0
+ end
+ local function flex()
+ if trace_charstrings then
+ showstate("flex")
+ end
+ local ax=x+stack[1]
+ local ay=y+stack[2]
+ local bx=ax+stack[3]
+ local by=ay+stack[4]
+ local cx=bx+stack[5]
+ local cy=by+stack[6]
+ xycurveto(ax,ay,bx,by,cx,cy)
+ local dx=cx+stack[7]
+ local dy=cy+stack[8]
+ local ex=dx+stack[9]
+ local ey=dy+stack[10]
+ x=ex+stack[11]
+ y=ey+stack[12]
+ xycurveto(dx,dy,ex,ey,x,y)
+ top=0
+ end
+ local function hflex()
+ if trace_charstrings then
+ showstate("hflex")
+ end
+ local ax=x+stack[1]
+ local ay=y
+ local bx=ax+stack[2]
+ local by=ay+stack[3]
+ local cx=bx+stack[4]
+ local cy=by
+ xycurveto(ax,ay,bx,by,cx,cy)
+ local dx=cx+stack[5]
+ local dy=by
+ local ex=dx+stack[6]
+ local ey=y
+ x=ex+stack[7]
+ xycurveto(dx,dy,ex,ey,x,y)
+ top=0
+ end
+ local function hflex1()
+ if trace_charstrings then
+ showstate("hflex1")
+ end
+ local ax=x+stack[1]
+ local ay=y+stack[2]
+ local bx=ax+stack[3]
+ local by=ay+stack[4]
+ local cx=bx+stack[5]
+ local cy=by
+ xycurveto(ax,ay,bx,by,cx,cy)
+ local dx=cx+stack[6]
+ local dy=by
+ local ex=dx+stack[7]
+ local ey=dy+stack[8]
+ x=ex+stack[9]
+ xycurveto(dx,dy,ex,ey,x,y)
+ top=0
+ end
+ local function flex1()
+ if trace_charstrings then
+ showstate("flex1")
+ end
+ local ax=x+stack[1]
+ local ay=y+stack[2]
+ local bx=ax+stack[3]
+ local by=ay+stack[4]
+ local cx=bx+stack[5]
+ local cy=by+stack[6]
+ xycurveto(ax,ay,bx,by,cx,cy)
+ local dx=cx+stack[7]
+ local dy=cy+stack[8]
+ local ex=dx+stack[9]
+ local ey=dy+stack[10]
+ if abs(ex-x)>abs(ey-y) then
+ x=ex+stack[11]
+ else
+ y=ey+stack[11]
+ end
+ xycurveto(dx,dy,ex,ey,x,y)
+ top=0
+ end
+ local function getstem()
+ if top==0 then
+ elseif top%2~=0 then
+ if width then
+ remove(stack,1)
+ else
+ width=remove(stack,1)
+ if trace_charstrings then
+ showvalue("width",width)
+ end
+ end
+ top=top-1
+ end
+ if trace_charstrings then
+ showstate("stem")
+ end
+ stems=stems+top/2
+ top=0
+ end
+ local function getmask()
+ if top==0 then
+ elseif top%2~=0 then
+ if width then
+ remove(stack,1)
+ else
+ width=remove(stack,1)
+ if trace_charstrings then
+ showvalue("width",width)
+ end
+ end
+ top=top-1
+ end
+ if trace_charstrings then
+ showstate(operator==19 and "hintmark" or "cntrmask")
+ end
+ stems=stems+top/2
+ top=0
+ if stems==0 then
+ elseif stems<=8 then
+ return 1
+ else
+ return floor((stems+7)/8)
+ end
+ end
+ local function unsupported(t)
+ if trace_charstrings then
+ showstate("unsupported "..t)
+ end
+ top=0
+ end
+ local function unsupportedsub(t)
+ if trace_charstrings then
+ showstate("unsupported sub "..t)
+ end
+ top=0
+ end
+ local function getstem3()
+ if trace_charstrings then
+ showstate("stem3")
+ end
+ top=0
+ end
+ local function divide()
+ if version==1 then
+ local d=stack[top]
+ top=top-1
+ stack[top]=stack[top]/d
+ end
+ end
+ local function closepath()
+ if version==1 then
+ if trace_charstrings then
+ showstate("closepath")
+ end
+ end
+ top=0
+ end
+ local function hsbw()
+ if version==1 then
+ if trace_charstrings then
+ showstate("dotsection")
+ end
+ width=stack[top]
+ end
+ top=0
+ end
+ local function seac()
+ if version==1 then
+ if trace_charstrings then
+ showstate("seac")
+ end
+ end
+ top=0
+ end
+ local function sbw()
+ if version==1 then
+ if trace_charstrings then
+ showstate("sbw")
+ end
+ width=stack[top-1]
+ end
+ top=0
+ end
+ local function callothersubr()
+ if version==1 then
+ if trace_charstrings then
+ showstate("callothersubr (unsupported)")
+ end
+ end
+ top=0
+ end
+ local function pop()
+ if version==1 then
+ if trace_charstrings then
+ showstate("pop (unsupported)")
+ end
+ top=top+1
+ stack[top]=0
+ else
+ top=0
+ end
+ end
+ local function setcurrentpoint()
+ if version==1 then
+ if trace_charstrings then
+ showstate("pop (unsupported)")
+ end
+ x=x+stack[top-1]
+ y=y+stack[top]
+ end
+ top=0
+ end
+ local reginit=false
+ local function updateregions(n)
+ if regions then
+ local current=regions[n] or regions[1]
+ nofregions=#current
+ if axis and n~=reginit then
+ factors={}
+ for i=1,nofregions do
+ local region=current[i]
+ local s=1
+ for j=1,#axis do
+ local f=axis[j]
+ local r=region[j]
+ local start=r.start
+ local peak=r.peak
+ local stop=r.stop
+ if start>peak or peak>stop then
+ elseif start<0 and stop>0 and peak~=0 then
+ elseif peak==0 then
+ elseif f<start or f>stop then
+ s=0
+ break
+ elseif f<peak then
+ s=s*(f-start)/(peak-start)
+ elseif f>peak then
+ s=s*(stop-f)/(stop-peak)
+ else
+ end
+ end
+ factors[i]=s
+ end
+ end
+ end
+ reginit=n
+ end
+ local function setvsindex()
+ local vsindex=stack[top]
+ if trace_charstrings then
+ showstate(formatters["vsindex %i"](vsindex))
+ end
+ updateregions(vsindex)
+ top=top-1
+ end
+ local function blend()
+ local n=stack[top]
+ top=top-1
+ if axis then
+ if trace_charstrings then
+ local t=top-nofregions*n
+ local m=t-n
+ for i=1,n do
+ local k=m+i
+ local d=m+n+(i-1)*nofregions
+ local old=stack[k]
+ local new=old
+ for r=1,nofregions do
+ new=new+stack[d+r]*factors[r]
+ end
+ stack[k]=new
+ showstate(formatters["blend %i of %i: %s -> %s"](i,n,old,new))
+ end
+ top=t
+ elseif n==1 then
+ top=top-nofregions
+ local v=stack[top]
+ for r=1,nofregions do
+ v=v+stack[top+r]*factors[r]
+ end
+ stack[top]=v
+ else
+ top=top-nofregions*n
+ local d=top
+ local k=top-n
+ for i=1,n do
+ k=k+1
+ local v=stack[k]
+ for r=1,nofregions do
+ v=v+stack[d+r]*factors[r]
+ end
+ stack[k]=v
+ d=d+nofregions
+ end
+ end
+ else
+ end
+ end
+ local actions={ [0]=unsupported,
+ getstem,
+ unsupported,
+ getstem,
+ vmoveto,
+ rlineto,
+ hlineto,
+ vlineto,
+ rrcurveto,
+ unsupported,
+ unsupported,
+ unsupported,
+ unsupported,
+ hsbw,
+ unsupported,
+ setvsindex,
+ blend,
+ unsupported,
+ getstem,
+ getmask,
+ getmask,
+ rmoveto,
+ hmoveto,
+ getstem,
+ rcurveline,
+ rlinecurve,
+ vvcurveto,
+ hhcurveto,
+ unsupported,
+ unsupported,
+ vhcurveto,
+ hvcurveto,
+ }
+ local subactions={
+ [000]=dotsection,
+ [001]=getstem3,
+ [002]=getstem3,
+ [006]=seac,
+ [007]=sbw,
+ [012]=divide,
+ [016]=callothersubr,
+ [017]=pop,
+ [033]=setcurrentpoint,
+ [034]=hflex,
+ [035]=flex,
+ [036]=hflex1,
+ [037]=flex1,
+ }
+ local c_endchar=char(14)
+ local passon do
+ local rshift=bit32.rshift
+ local band=bit32.band
+ local round=math.round
+ local encode=table.setmetatableindex(function(t,i)
+ for i=-2048,-1130 do
+ t[i]=char(28,band(rshift(i,8),0xFF),band(i,0xFF))
+ end
+ for i=-1131,-108 do
+ local v=0xFB00-i-108
+ t[i]=char(band(rshift(v,8),0xFF),band(v,0xFF))
+ end
+ for i=-107,107 do
+ t[i]=char(i+139)
+ end
+ for i=108,1131 do
+ local v=0xF700+i-108
+ t[i]=char(band(rshift(v,8),0xFF),band(v,0xFF))
+ end
+ for i=1132,2048 do
+ t[i]=char(28,band(rshift(i,8),0xFF),band(i,0xFF))
+ end
+ return t[i]
+ end)
+ local function setvsindex()
+ local vsindex=stack[top]
+ updateregions(vsindex)
+ top=top-1
+ end
+ local function blend()
+ local n=stack[top]
+ top=top-1
+ if not axis then
+ elseif n==1 then
+ top=top-nofregions
+ local v=stack[top]
+ for r=1,nofregions do
+ v=v+stack[top+r]*factors[r]
+ end
+ stack[top]=round(v)
+ else
+ top=top-nofregions*n
+ local d=top
+ local k=top-n
+ for i=1,n do
+ k=k+1
+ local v=stack[k]
+ for r=1,nofregions do
+ v=v+stack[d+r]*factors[r]
+ end
+ stack[k]=round(v)
+ d=d+nofregions
+ end
+ end
+ end
+ passon=function(operation)
+ if operation==15 then
+ setvsindex()
+ elseif operation==16 then
+ blend()
+ else
+ for i=1,top do
+ r=r+1
+ result[r]=encode[stack[i]]
+ end
+ r=r+1
+ result[r]=char(operation)
+ top=0
+ end
+ end
+ end
+ local process
+ local function call(scope,list,bias)
+ depth=depth+1
+ if top==0 then
+ showstate(formatters["unknown %s call"](scope))
+ top=0
+ else
+ local index=stack[top]+bias
+ top=top-1
+ if trace_charstrings then
+ showvalue(scope,index,true)
+ end
+ local tab=list[index]
+ if tab then
+ process(tab)
+ else
+ showstate(formatters["unknown %s call %i"](scope,index))
+ top=0
+ end
+ end
+ depth=depth-1
+ end
+ local justpass=false
+ process=function(tab)
+ local i=1
+ local n=#tab
+ while i<=n do
+ local t=tab[i]
+ if t>=32 then
+ top=top+1
+ if t<=246 then
+ stack[top]=t-139
+ i=i+1
+ elseif t<=250 then
+ stack[top]=t*256-63124+tab[i+1]
+ i=i+2
+ elseif t<=254 then
+ stack[top]=-t*256+64148-tab[i+1]
+ i=i+2
+ else
+ local n=0x100*tab[i+1]+tab[i+2]
+ if n>=0x8000 then
+ stack[top]=n-0x10000+(0x100*tab[i+3]+tab[i+4])/0xFFFF
+ else
+ stack[top]=n+(0x100*tab[i+3]+tab[i+4])/0xFFFF
+ end
+ i=i+5
+ end
+ elseif t==28 then
+ top=top+1
+ local n=0x100*tab[i+1]+tab[i+2]
+ if n>=0x8000 then
+ stack[top]=n-0x10000
+ else
+ stack[top]=n
+ end
+ i=i+3
+ elseif t==11 then
+ if trace_charstrings then
+ showstate("return")
+ end
+ return
+ elseif t==10 then
+ call("local",locals,localbias)
+ i=i+1
+ elseif t==14 then
+ if width then
+ elseif top>0 then
+ width=stack[1]
+ if trace_charstrings then
+ showvalue("width",width)
+ end
+ else
+ width=true
+ end
+ if trace_charstrings then
+ showstate("endchar")
+ end
+ return
+ elseif t==29 then
+ call("global",globals,globalbias)
+ i=i+1
+ elseif t==12 then
+ i=i+1
+ local t=tab[i]
+ local a=subactions[t]
+ if a then
+ a(t)
+ else
+ if trace_charstrings then
+ showvalue("<subaction>",t)
+ end
+ top=0
+ end
+ i=i+1
+ elseif justpass then
+ passon(t)
+ i=i+1
+ else
+ local a=actions[t]
+ if a then
+ local s=a(t)
+ if s then
+ i=i+s+1
+ else
+ i=i+1
+ end
+ else
+ if trace_charstrings then
+ showvalue("<action>",t)
+ end
+ top=0
+ i=i+1
+ end
+ end
+ end
+ end
+ local function setbias(globals,locals)
+ if version==1 then
+ return
+ false,
+ false
+ else
+ local g,l=#globals,#locals
+ return
+ ((g<1240 and 107) or (g<33900 and 1131) or 32768)+1,
+ ((l<1240 and 107) or (l<33900 and 1131) or 32768)+1
+ end
+ end
+ local function processshape(tab,index)
+ tab=bytetable(tab)
+ x=0
+ y=0
+ width=false
+ r=0
+ top=0
+ stems=0
+ result={}
+ xmin=0
+ xmax=0
+ ymin=0
+ ymax=0
+ checked=false
+ if trace_charstrings then
+ report("glyph: %i",index)
+ report("data : % t",tab)
+ end
+ if regions then
+ updateregions(vsindex)
+ end
+ process(tab)
+ local boundingbox={
+ round(xmin),
+ round(ymin),
+ round(xmax),
+ round(ymax),
+ }
+ if width==true or width==false then
+ width=defaultwidth
+ else
+ width=nominalwidth+width
+ end
+ local glyph=glyphs[index]
+ if justpass then
+ r=r+1
+ result[r]=c_endchar
+ local stream=concat(result)
+ if glyph then
+ glyph.stream=stream
+ else
+ glyphs[index]={ stream=stream }
+ end
+ elseif glyph then
+ glyph.segments=keepcurve~=false and result or nil
+ glyph.boundingbox=boundingbox
+ if not glyph.width then
+ glyph.width=width
+ end
+ if charset and not glyph.name then
+ glyph.name=charset[index]
+ end
+ elseif keepcurve then
+ glyphs[index]={
+ segments=result,
+ boundingbox=boundingbox,
+ width=width,
+ name=charset and charset[index] or nil,
+ }
+ else
+ glyphs[index]={
+ boundingbox=boundingbox,
+ width=width,
+ name=charset and charset[index] or nil,
+ }
+ end
+ if trace_charstrings then
+ report("width : %s",tostring(width))
+ report("boundingbox: % t",boundingbox)
+ end
+ end
+ startparsing=function(fontdata,data,streams)
+ reginit=false
+ axis=false
+ regions=data.regions
+ justpass=streams==true
+ if regions then
+ regions={ regions }
+ axis=data.factors or false
+ end
+ end
+ stopparsing=function(fontdata,data)
+ stack={}
+ glyphs=false
+ result={}
+ top=0
+ locals=false
+ globals=false
+ strings=false
+ end
+ local function setwidths(private)
+ if not private then
+ return 0,0
+ end
+ local privatedata=private.data
+ if not privatedata then
+ return 0,0
+ end
+ return privatedata.nominalwidthx or 0,privatedata.defaultwidthx or 0
+ end
+ parsecharstrings=function(fontdata,data,glphs,doshapes,tversion,streams)
+ local dictionary=data.dictionaries[1]
+ local charstrings=dictionary.charstrings
+ keepcurve=doshapes
+ version=tversion
+ strings=data.strings
+ globals=data.routines or {}
+ locals=dictionary.subroutines or {}
+ charset=dictionary.charset
+ vsindex=dictionary.vsindex or 0
+ glyphs=glphs or {}
+ globalbias,localbias=setbias(globals,locals)
+ nominalwidth,defaultwidth=setwidths(dictionary.private)
+ startparsing(fontdata,data,streams)
+ for index=1,#charstrings do
+ processshape(charstrings[index],index-1)
+ charstrings[index]=nil
+ end
+ stopparsing(fontdata,data)
+ return glyphs
+ end
+ parsecharstring=function(fontdata,data,dictionary,tab,glphs,index,doshapes,tversion)
+ keepcurve=doshapes
+ version=tversion
+ strings=data.strings
+ globals=data.routines or {}
+ locals=dictionary.subroutines or {}
+ charset=false
+ vsindex=dictionary.vsindex or 0
+ glyphs=glphs or {}
+ globalbias,localbias=setbias(globals,locals)
+ nominalwidth,defaultwidth=setwidths(dictionary.private)
+ processshape(tab,index-1)
+ end
+end
+local function readglobals(f,data)
+ local routines=readlengths(f)
+ for i=1,#routines do
+ routines[i]=readbytetable(f,routines[i])
+ end
+ data.routines=routines
+end
+local function readencodings(f,data)
+ data.encodings={}
+end
+local function readcharsets(f,data,dictionary)
+ local header=data.header
+ local strings=data.strings
+ local nofglyphs=data.nofglyphs
+ local charsetoffset=dictionary.charset
+ if charsetoffset and charsetoffset~=0 then
+ setposition(f,header.offset+charsetoffset)
+ local format=readbyte(f)
+ local charset={ [0]=".notdef" }
+ dictionary.charset=charset
+ if format==0 then
+ for i=1,nofglyphs do
+ charset[i]=strings[readushort(f)]
+ end
+ elseif format==1 or format==2 then
+ local readcount=format==1 and readbyte or readushort
+ local i=1
+ while i<=nofglyphs do
+ local sid=readushort(f)
+ local n=readcount(f)
+ for s=sid,sid+n do
+ charset[i]=strings[s]
+ i=i+1
+ if i>nofglyphs then
+ break
+ end
+ end
+ end
+ else
+ report("cff parser: unsupported charset format %a",format)
+ end
+ else
+ dictionary.nocharset=true
+ dictionary.charset=nil
+ end
+end
+local function readprivates(f,data)
+ local header=data.header
+ local dictionaries=data.dictionaries
+ local private=dictionaries[1].private
+ if private then
+ setposition(f,header.offset+private.offset)
+ private.data=readstring(f,private.size)
+ end
+end
+local function readlocals(f,data,dictionary)
+ local header=data.header
+ local private=dictionary.private
+ if private then
+ local subroutineoffset=private.data.subroutines
+ if subroutineoffset~=0 then
+ setposition(f,header.offset+private.offset+subroutineoffset)
+ local subroutines=readlengths(f)
+ for i=1,#subroutines do
+ subroutines[i]=readbytetable(f,subroutines[i])
+ end
+ dictionary.subroutines=subroutines
+ private.data.subroutines=nil
+ else
+ dictionary.subroutines={}
+ end
+ else
+ dictionary.subroutines={}
+ end
+end
+local function readcharstrings(f,data,what)
+ local header=data.header
+ local dictionaries=data.dictionaries
+ local dictionary=dictionaries[1]
+ local stringtype=dictionary.charstringtype
+ local offset=dictionary.charstrings
+ if type(offset)~="number" then
+ elseif stringtype==2 then
+ setposition(f,header.offset+offset)
+ local charstrings=readlengths(f,what=="cff2")
+ local nofglyphs=#charstrings
+ for i=1,nofglyphs do
+ charstrings[i]=readstring(f,charstrings[i])
+ end
+ data.nofglyphs=nofglyphs
+ dictionary.charstrings=charstrings
+ else
+ report("unsupported charstr type %i",stringtype)
+ data.nofglyphs=0
+ dictionary.charstrings={}
+ end
+end
+local function readcidprivates(f,data)
+ local header=data.header
+ local dictionaries=data.dictionaries[1].cid.dictionaries
+ for i=1,#dictionaries do
+ local dictionary=dictionaries[i]
+ local private=dictionary.private
+ if private then
+ setposition(f,header.offset+private.offset)
+ private.data=readstring(f,private.size)
+ end
+ end
+ parseprivates(data,dictionaries)
+end
+readers.parsecharstrings=parsecharstrings
+local function readnoselect(f,fontdata,data,glyphs,doshapes,version,streams)
+ local dictionaries=data.dictionaries
+ local dictionary=dictionaries[1]
+ readglobals(f,data)
+ readcharstrings(f,data,version)
+ if version=="cff2" then
+ dictionary.charset=nil
+ else
+ readencodings(f,data)
+ readcharsets(f,data,dictionary)
+ end
+ readprivates(f,data)
+ parseprivates(data,data.dictionaries)
+ readlocals(f,data,dictionary)
+ startparsing(fontdata,data,streams)
+ parsecharstrings(fontdata,data,glyphs,doshapes,version,streams)
+ stopparsing(fontdata,data)
+end
+local function readfdselect(f,fontdata,data,glyphs,doshapes,version,streams)
+ local header=data.header
+ local dictionaries=data.dictionaries
+ local dictionary=dictionaries[1]
+ local cid=dictionary.cid
+ local cidselect=cid and cid.fdselect
+ readglobals(f,data)
+ readcharstrings(f,data,version)
+ if version~="cff2" then
+ readencodings(f,data)
+ end
+ local charstrings=dictionary.charstrings
+ local fdindex={}
+ local nofglyphs=data.nofglyphs
+ local maxindex=-1
+ setposition(f,header.offset+cidselect)
+ local format=readbyte(f)
+ if format==1 then
+ for i=0,nofglyphs do
+ local index=readbyte(i)
+ fdindex[i]=index
+ if index>maxindex then
+ maxindex=index
+ end
+ end
+ elseif format==3 then
+ local nofranges=readushort(f)
+ local first=readushort(f)
+ local index=readbyte(f)
+ while true do
+ local last=readushort(f)
+ if index>maxindex then
+ maxindex=index
+ end
+ for i=first,last do
+ fdindex[i]=index
+ end
+ if last>=nofglyphs then
+ break
+ else
+ first=last+1
+ index=readbyte(f)
+ end
+ end
+ else
+ end
+ if maxindex>=0 then
+ local cidarray=cid.fdarray
+ setposition(f,header.offset+cidarray)
+ local dictionaries=readlengths(f)
+ for i=1,#dictionaries do
+ dictionaries[i]=readstring(f,dictionaries[i])
+ end
+ parsedictionaries(data,dictionaries)
+ cid.dictionaries=dictionaries
+ readcidprivates(f,data)
+ for i=1,#dictionaries do
+ readlocals(f,data,dictionaries[i])
+ end
+ startparsing(fontdata,data,streams)
+ for i=1,#charstrings do
+ parsecharstring(fontdata,data,dictionaries[fdindex[i]+1],charstrings[i],glyphs,i,doshapes,version)
+ charstrings[i]=nil
+ end
+ stopparsing(fontdata,data)
+ end
+end
+local gotodatatable=readers.helpers.gotodatatable
+local function cleanup(data,dictionaries)
+end
+function readers.cff(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"cff",specification.details)
+ if tableoffset then
+ local header=readheader(f)
+ if header.major~=1 then
+ report("only version %s is supported for table %a",1,"cff")
+ return
+ end
+ local glyphs=fontdata.glyphs
+ local names=readfontnames(f)
+ local dictionaries=readtopdictionaries(f)
+ local strings=readstrings(f)
+ local data={
+ header=header,
+ names=names,
+ dictionaries=dictionaries,
+ strings=strings,
+ nofglyphs=fontdata.nofglyphs,
+ }
+ parsedictionaries(data,dictionaries,"cff")
+ local dic=dictionaries[1]
+ local cid=dic.cid
+ fontdata.cffinfo={
+ familynamename=dic.familyname,
+ fullname=dic.fullname,
+ boundingbox=dic.boundingbox,
+ weight=dic.weight,
+ italicangle=dic.italicangle,
+ underlineposition=dic.underlineposition,
+ underlinethickness=dic.underlinethickness,
+ monospaced=dic.monospaced,
+ }
+ fontdata.cidinfo=cid and {
+ registry=cid.registry,
+ ordering=cid.ordering,
+ supplement=cid.supplement,
+ }
+ if specification.glyphs then
+ local all=specification.shapes or false
+ if cid and cid.fdselect then
+ readfdselect(f,fontdata,data,glyphs,all,"cff")
+ else
+ readnoselect(f,fontdata,data,glyphs,all,"cff")
+ end
+ end
+ cleanup(data,dictionaries)
+ end
+end
+function readers.cff2(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"cff2",specification.glyphs)
+ if tableoffset then
+ local header=readheader(f)
+ if header.major~=2 then
+ report("only version %s is supported for table %a",2,"cff2")
+ return
+ end
+ local glyphs=fontdata.glyphs
+ local dictionaries={ readstring(f,header.dsize) }
+ local data={
+ header=header,
+ dictionaries=dictionaries,
+ nofglyphs=fontdata.nofglyphs,
+ }
+ parsedictionaries(data,dictionaries,"cff2")
+ local offset=dictionaries[1].vstore
+ if offset>0 then
+ local storeoffset=dictionaries[1].vstore+data.header.offset+2
+ local regions,deltas=readers.helpers.readvariationdata(f,storeoffset,factors)
+ data.regions=regions
+ data.deltas=deltas
+ else
+ data.regions={}
+ data.deltas={}
+ end
+ data.factors=specification.factors
+ local cid=data.dictionaries[1].cid
+ local all=specification.shapes or false
+ if cid and cid.fdselect then
+ readfdselect(f,fontdata,data,glyphs,all,"cff2",specification.streams)
+ else
+ readnoselect(f,fontdata,data,glyphs,all,"cff2",specification.streams)
+ end
+ cleanup(data,dictionaries)
+ end
+end
+function readers.cffcheck(filename)
+ local f=io.open(filename,"rb")
+ if f then
+ local fontdata={
+ glyphs={},
+ }
+ local header=readheader(f)
+ if header.major~=1 then
+ report("only version %s is supported for table %a",1,"cff")
+ return
+ end
+ local names=readfontnames(f)
+ local dictionaries=readtopdictionaries(f)
+ local strings=readstrings(f)
+ local glyphs={}
+ local data={
+ header=header,
+ names=names,
+ dictionaries=dictionaries,
+ strings=strings,
+ glyphs=glyphs,
+ nofglyphs=4,
+ }
+ parsedictionaries(data,dictionaries,"cff")
+ local cid=data.dictionaries[1].cid
+ if cid and cid.fdselect then
+ readfdselect(f,fontdata,data,glyphs,false)
+ else
+ readnoselect(f,fontdata,data,glyphs,false)
+ end
+ return data
+ end
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-ttf']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local next,type,unpack=next,type,unpack
+local bittest,band,rshift=bit32.btest,bit32.band,bit32.rshift
+local sqrt,round=math.sqrt,math.round
+local char=string.char
+local concat=table.concat
+local report=logs.reporter("otf reader","ttf")
+local trace_deltas=false
+local readers=fonts.handlers.otf.readers
+local streamreader=readers.streamreader
+local setposition=streamreader.setposition
+local getposition=streamreader.getposition
+local skipbytes=streamreader.skip
+local readbyte=streamreader.readcardinal1
+local readushort=streamreader.readcardinal2
+local readulong=streamreader.readcardinal4
+local readchar=streamreader.readinteger1
+local readshort=streamreader.readinteger2
+local read2dot14=streamreader.read2dot14
+local readinteger=streamreader.readinteger1
+local helpers=readers.helpers
+local gotodatatable=helpers.gotodatatable
+local function mergecomposites(glyphs,shapes)
+ local function merge(index,shape,components)
+ local contours={}
+ local points={}
+ local nofcontours=0
+ local nofpoints=0
+ local offset=0
+ local deltas=shape.deltas
+ for i=1,#components do
+ local component=components[i]
+ local subindex=component.index
+ local subshape=shapes[subindex]
+ local subcontours=subshape.contours
+ local subpoints=subshape.points
+ if not subcontours then
+ local subcomponents=subshape.components
+ if subcomponents then
+ subcontours,subpoints=merge(subindex,subshape,subcomponents)
+ end
+ end
+ if subpoints then
+ local matrix=component.matrix
+ local xscale=matrix[1]
+ local xrotate=matrix[2]
+ local yrotate=matrix[3]
+ local yscale=matrix[4]
+ local xoffset=matrix[5]
+ local yoffset=matrix[6]
+ for i=1,#subpoints do
+ local p=subpoints[i]
+ local x=p[1]
+ local y=p[2]
+ nofpoints=nofpoints+1
+ points[nofpoints]={
+ xscale*x+xrotate*y+xoffset,
+ yscale*y+yrotate*x+yoffset,
+ p[3]
+ }
+ end
+ for i=1,#subcontours do
+ nofcontours=nofcontours+1
+ contours[nofcontours]=offset+subcontours[i]
+ end
+ offset=offset+#subpoints
+ else
+ report("missing contours composite %s, component %s of %s, glyph %s",index,i,#components,subindex)
+ end
+ end
+ shape.points=points
+ shape.contours=contours
+ shape.components=nil
+ return contours,points
+ end
+ for index=1,#glyphs do
+ local shape=shapes[index]
+ if shape then
+ local components=shape.components
+ if components then
+ merge(index,shape,components)
+ end
+ end
+ end
+end
+local function readnothing(f,nofcontours)
+ return {
+ type="nothing",
+ }
+end
+local function curveto(m_x,m_y,l_x,l_y,r_x,r_y)
+ return
+ l_x+2/3*(m_x-l_x),l_y+2/3*(m_y-l_y),
+ r_x+2/3*(m_x-r_x),r_y+2/3*(m_y-r_y),
+ r_x,r_y,"c"
+end
+local function applyaxis(glyph,shape,deltas,dowidth)
+ local points=shape.points
+ if points then
+ local nofpoints=#points
+ local h=nofpoints+2
+ local l=nofpoints+1
+ local dw=0
+ local dl=0
+ for i=1,#deltas do
+ local deltaset=deltas[i]
+ local xvalues=deltaset.xvalues
+ local yvalues=deltaset.yvalues
+ local dpoints=deltaset.points
+ local factor=deltaset.factor
+ if dpoints then
+ local nofdpoints=#dpoints
+ for i=1,nofdpoints do
+ local d=dpoints[i]
+ local p=points[d]
+ if p then
+ if xvalues then
+ local x=xvalues[i]
+ if x and x~=0 then
+ p[1]=p[1]+factor*x
+ end
+ end
+ if yvalues then
+ local y=yvalues[i]
+ if y and y~=0 then
+ p[2]=p[2]+factor*y
+ end
+ end
+ elseif dowidth then
+ if d==h then
+ local x=xvalues[i]
+ if x then
+ dw=dw+factor*x
+ end
+ elseif d==l then
+ local x=xvalues[i]
+ if x then
+ dl=dl+factor*x
+ end
+ end
+ end
+ end
+ else
+ for i=1,nofpoints do
+ local p=points[i]
+ if xvalues then
+ local x=xvalues[i]
+ if x and x~=0 then
+ p[1]=p[1]+factor*x
+ end
+ end
+ if yvalues then
+ local y=yvalues[i]
+ if y and y~=0 then
+ p[2]=p[2]+factor*y
+ end
+ end
+ end
+ if dowidth then
+ local x=xvalues[h]
+ if x then
+ dw=dw+factor*x
+ end
+ local x=xvalues[l]
+ if x then
+ dl=dl+factor*x
+ end
+ end
+ end
+ end
+ if dowidth then
+ local width=glyph.width or 0
+ glyph.width=width+dw-dl
+ end
+ else
+ report("no points for glyph %a",glyph.name)
+ end
+end
+local quadratic=false
+local function contours2outlines_normal(glyphs,shapes)
+ for index=1,#glyphs do
+ local shape=shapes[index]
+ if shape then
+ local glyph=glyphs[index]
+ local contours=shape.contours
+ local points=shape.points
+ if contours then
+ local nofcontours=#contours
+ local segments={}
+ local nofsegments=0
+ glyph.segments=segments
+ if nofcontours>0 then
+ local px,py=0,0
+ local first=1
+ for i=1,nofcontours do
+ local last=contours[i]
+ if last>=first then
+ local first_pt=points[first]
+ local first_on=first_pt[3]
+ if first==last then
+ first_pt[3]="m"
+ nofsegments=nofsegments+1
+ segments[nofsegments]=first_pt
+ else
+ local first_on=first_pt[3]
+ local last_pt=points[last]
+ local last_on=last_pt[3]
+ local start=1
+ local control_pt=false
+ if first_on then
+ start=2
+ else
+ if last_on then
+ first_pt=last_pt
+ else
+ first_pt={ (first_pt[1]+last_pt[1])/2,(first_pt[2]+last_pt[2])/2,false }
+ end
+ control_pt=first_pt
+ end
+ local x,y=first_pt[1],first_pt[2]
+ if not done then
+ xmin,ymin,xmax,ymax=x,y,x,y
+ done=true
+ end
+ nofsegments=nofsegments+1
+ segments[nofsegments]={ x,y,"m" }
+ if not quadratic then
+ px,py=x,y
+ end
+ local previous_pt=first_pt
+ for i=first,last do
+ local current_pt=points[i]
+ local current_on=current_pt[3]
+ local previous_on=previous_pt[3]
+ if previous_on then
+ if current_on then
+ local x,y=current_pt[1],current_pt[2]
+ nofsegments=nofsegments+1
+ segments[nofsegments]={ x,y,"l" }
+ if not quadratic then
+ px,py=x,y
+ end
+ else
+ control_pt=current_pt
+ end
+ elseif current_on then
+ local x1,y1=control_pt[1],control_pt[2]
+ local x2,y2=current_pt[1],current_pt[2]
+ nofsegments=nofsegments+1
+ if quadratic then
+ segments[nofsegments]={ x1,y1,x2,y2,"q" }
+ else
+ x1,y1,x2,y2,px,py=curveto(x1,y1,px,py,x2,y2)
+ segments[nofsegments]={ x1,y1,x2,y2,px,py,"c" }
+ end
+ control_pt=false
+ else
+ local x2,y2=(previous_pt[1]+current_pt[1])/2,(previous_pt[2]+current_pt[2])/2
+ local x1,y1=control_pt[1],control_pt[2]
+ nofsegments=nofsegments+1
+ if quadratic then
+ segments[nofsegments]={ x1,y1,x2,y2,"q" }
+ else
+ x1,y1,x2,y2,px,py=curveto(x1,y1,px,py,x2,y2)
+ segments[nofsegments]={ x1,y1,x2,y2,px,py,"c" }
+ end
+ control_pt=current_pt
+ end
+ previous_pt=current_pt
+ end
+ if first_pt==last_pt then
+ else
+ nofsegments=nofsegments+1
+ local x2,y2=first_pt[1],first_pt[2]
+ if not control_pt then
+ segments[nofsegments]={ x2,y2,"l" }
+ elseif quadratic then
+ local x1,y1=control_pt[1],control_pt[2]
+ segments[nofsegments]={ x1,y1,x2,y2,"q" }
+ else
+ local x1,y1=control_pt[1],control_pt[2]
+ x1,y1,x2,y2,px,py=curveto(x1,y1,px,py,x2,y2)
+ segments[nofsegments]={ x1,y1,x2,y2,px,py,"c" }
+ end
+ end
+ end
+ end
+ first=last+1
+ end
+ end
+ end
+ end
+ end
+end
+local function contours2outlines_shaped(glyphs,shapes,keepcurve)
+ for index=1,#glyphs do
+ local shape=shapes[index]
+ if shape then
+ local glyph=glyphs[index]
+ local contours=shape.contours
+ local points=shape.points
+ if contours then
+ local nofcontours=#contours
+ local segments=keepcurve and {} or nil
+ local nofsegments=0
+ if keepcurve then
+ glyph.segments=segments
+ end
+ if nofcontours>0 then
+ local xmin,ymin,xmax,ymax,done=0,0,0,0,false
+ local px,py=0,0
+ local first=1
+ for i=1,nofcontours do
+ local last=contours[i]
+ if last>=first then
+ local first_pt=points[first]
+ local first_on=first_pt[3]
+ if first==last then
+ if keepcurve then
+ first_pt[3]="m"
+ nofsegments=nofsegments+1
+ segments[nofsegments]=first_pt
+ end
+ else
+ local first_on=first_pt[3]
+ local last_pt=points[last]
+ local last_on=last_pt[3]
+ local start=1
+ local control_pt=false
+ if first_on then
+ start=2
+ else
+ if last_on then
+ first_pt=last_pt
+ else
+ first_pt={ (first_pt[1]+last_pt[1])/2,(first_pt[2]+last_pt[2])/2,false }
+ end
+ control_pt=first_pt
+ end
+ local x,y=first_pt[1],first_pt[2]
+ if not done then
+ xmin,ymin,xmax,ymax=x,y,x,y
+ done=true
+ else
+ if x<xmin then xmin=x elseif x>xmax then xmax=x end
+ if y<ymin then ymin=y elseif y>ymax then ymax=y end
+ end
+ if keepcurve then
+ nofsegments=nofsegments+1
+ segments[nofsegments]={ x,y,"m" }
+ end
+ if not quadratic then
+ px,py=x,y
+ end
+ local previous_pt=first_pt
+ for i=first,last do
+ local current_pt=points[i]
+ local current_on=current_pt[3]
+ local previous_on=previous_pt[3]
+ if previous_on then
+ if current_on then
+ local x,y=current_pt[1],current_pt[2]
+ if x<xmin then xmin=x elseif x>xmax then xmax=x end
+ if y<ymin then ymin=y elseif y>ymax then ymax=y end
+ if keepcurve then
+ nofsegments=nofsegments+1
+ segments[nofsegments]={ x,y,"l" }
+ end
+ if not quadratic then
+ px,py=x,y
+ end
+ else
+ control_pt=current_pt
+ end
+ elseif current_on then
+ local x1,y1=control_pt[1],control_pt[2]
+ local x2,y2=current_pt[1],current_pt[2]
+ if quadratic then
+ if x1<xmin then xmin=x1 elseif x1>xmax then xmax=x1 end
+ if y1<ymin then ymin=y1 elseif y1>ymax then ymax=y1 end
+ if keepcurve then
+ nofsegments=nofsegments+1
+ segments[nofsegments]={ x1,y1,x2,y2,"q" }
+ end
+ else
+ x1,y1,x2,y2,px,py=curveto(x1,y1,px,py,x2,y2)
+ if x1<xmin then xmin=x1 elseif x1>xmax then xmax=x1 end
+ if y1<ymin then ymin=y1 elseif y1>ymax then ymax=y1 end
+ if x2<xmin then xmin=x2 elseif x2>xmax then xmax=x2 end
+ if y2<ymin then ymin=y2 elseif y2>ymax then ymax=y2 end
+ if px<xmin then xmin=px elseif px>xmax then xmax=px end
+ if py<ymin then ymin=py elseif py>ymax then ymax=py end
+ if keepcurve then
+ nofsegments=nofsegments+1
+ segments[nofsegments]={ x1,y1,x2,y2,px,py,"c" }
+ end
+ end
+ control_pt=false
+ else
+ local x2,y2=(previous_pt[1]+current_pt[1])/2,(previous_pt[2]+current_pt[2])/2
+ local x1,y1=control_pt[1],control_pt[2]
+ if quadratic then
+ if x1<xmin then xmin=x1 elseif x1>xmax then xmax=x1 end
+ if y1<ymin then ymin=y1 elseif y1>ymax then ymax=y1 end
+ if keepcurve then
+ nofsegments=nofsegments+1
+ segments[nofsegments]={ x1,y1,x2,y2,"q" }
+ end
+ else
+ x1,y1,x2,y2,px,py=curveto(x1,y1,px,py,x2,y2)
+ if x1<xmin then xmin=x1 elseif x1>xmax then xmax=x1 end
+ if y1<ymin then ymin=y1 elseif y1>ymax then ymax=y1 end
+ if x2<xmin then xmin=x2 elseif x2>xmax then xmax=x2 end
+ if y2<ymin then ymin=y2 elseif y2>ymax then ymax=y2 end
+ if px<xmin then xmin=px elseif px>xmax then xmax=px end
+ if py<ymin then ymin=py elseif py>ymax then ymax=py end
+ if keepcurve then
+ nofsegments=nofsegments+1
+ segments[nofsegments]={ x1,y1,x2,y2,px,py,"c" }
+ end
+ end
+ control_pt=current_pt
+ end
+ previous_pt=current_pt
+ end
+ if first_pt==last_pt then
+ elseif not control_pt then
+ if keepcurve then
+ nofsegments=nofsegments+1
+ segments[nofsegments]={ first_pt[1],first_pt[2],"l" }
+ end
+ else
+ local x1,y1=control_pt[1],control_pt[2]
+ local x2,y2=first_pt[1],first_pt[2]
+ if x1<xmin then xmin=x1 elseif x1>xmax then xmax=x1 end
+ if y1<ymin then ymin=y1 elseif y1>ymax then ymax=y1 end
+ if quadratic then
+ if keepcurve then
+ nofsegments=nofsegments+1
+ segments[nofsegments]={ x1,y1,x2,y2,"q" }
+ end
+ else
+ x1,y1,x2,y2,px,py=curveto(x1,y1,px,py,x2,y2)
+ if x2<xmin then xmin=x2 elseif x2>xmax then xmax=x2 end
+ if y2<ymin then ymin=y2 elseif y2>ymax then ymax=y2 end
+ if px<xmin then xmin=px elseif px>xmax then xmax=px end
+ if py<ymin then ymin=py elseif py>ymax then ymax=py end
+ if keepcurve then
+ nofsegments=nofsegments+1
+ segments[nofsegments]={ x1,y1,x2,y2,px,py,"c" }
+ end
+ end
+ end
+ end
+ end
+ first=last+1
+ end
+ glyph.boundingbox={ round(xmin),round(ymin),round(xmax),round(ymax) }
+ end
+ end
+ end
+ end
+end
+local c_zero=char(0)
+local s_zero=char(0,0)
+local function toushort(n)
+ return char(band(rshift(n,8),0xFF),band(n,0xFF))
+end
+local function toshort(n)
+ if n<0 then
+ n=n+0x10000
+ end
+ return char(band(rshift(n,8),0xFF),band(n,0xFF))
+end
+local function repackpoints(glyphs,shapes)
+ local noboundingbox={ 0,0,0,0 }
+ local result={}
+ for index=1,#glyphs do
+ local shape=shapes[index]
+ if shape then
+ local r=0
+ local glyph=glyphs[index]
+ if false then
+ else
+ local contours=shape.contours
+ local nofcontours=contours and #contours or 0
+ local boundingbox=glyph.boundingbox or noboundingbox
+ r=r+1 result[r]=toshort(nofcontours)
+ r=r+1 result[r]=toshort(boundingbox[1])
+ r=r+1 result[r]=toshort(boundingbox[2])
+ r=r+1 result[r]=toshort(boundingbox[3])
+ r=r+1 result[r]=toshort(boundingbox[4])
+ if nofcontours>0 then
+ for i=1,nofcontours do
+ r=r+1 result[r]=toshort(contours[i]-1)
+ end
+ r=r+1 result[r]=s_zero
+ local points=shape.points
+ local currentx=0
+ local currenty=0
+ local xpoints={}
+ local ypoints={}
+ local x=0
+ local y=0
+ local lastflag=nil
+ local nofflags=0
+ for i=1,#points do
+ local pt=points[i]
+ local px=pt[1]
+ local py=pt[2]
+ local fl=pt[3] and 0x01 or 0x00
+ if px==currentx then
+ fl=fl+0x10
+ else
+ local dx=round(px-currentx)
+ if dx<-255 or dx>255 then
+ x=x+1 xpoints[x]=toshort(dx)
+ elseif dx<0 then
+ fl=fl+0x02
+ x=x+1 xpoints[x]=char(-dx)
+ elseif dx>0 then
+ fl=fl+0x12
+ x=x+1 xpoints[x]=char(dx)
+ else
+ fl=fl+0x02
+ x=x+1 xpoints[x]=c_zero
+ end
+ end
+ if py==currenty then
+ fl=fl+0x20
+ else
+ local dy=round(py-currenty)
+ if dy<-255 or dy>255 then
+ y=y+1 ypoints[y]=toshort(dy)
+ elseif dy<0 then
+ fl=fl+0x04
+ y=y+1 ypoints[y]=char(-dy)
+ elseif dy>0 then
+ fl=fl+0x24
+ y=y+1 ypoints[y]=char(dy)
+ else
+ fl=fl+0x04
+ y=y+1 ypoints[y]=c_zero
+ end
+ end
+ currentx=px
+ currenty=py
+ if lastflag==fl then
+ nofflags=nofflags+1
+ else
+ if nofflags==1 then
+ r=r+1 result[r]=char(lastflag)
+ elseif nofflags==2 then
+ r=r+1 result[r]=char(lastflag,lastflag)
+ elseif nofflags>2 then
+ lastflag=lastflag+0x08
+ r=r+1 result[r]=char(lastflag,nofflags-1)
+ end
+ nofflags=1
+ lastflag=fl
+ end
+ end
+ if nofflags==1 then
+ r=r+1 result[r]=char(lastflag)
+ elseif nofflags==2 then
+ r=r+1 result[r]=char(lastflag,lastflag)
+ elseif nofflags>2 then
+ lastflag=lastflag+0x08
+ r=r+1 result[r]=char(lastflag,nofflags-1)
+ end
+ r=r+1 result[r]=concat(xpoints)
+ r=r+1 result[r]=concat(ypoints)
+ end
+ end
+ glyph.stream=concat(result,"",1,r)
+ else
+ end
+ end
+end
+local function readglyph(f,nofcontours)
+ local points={}
+ local contours={}
+ local instructions={}
+ local flags={}
+ for i=1,nofcontours do
+ contours[i]=readshort(f)+1
+ end
+ local nofpoints=contours[nofcontours]
+ local nofinstructions=readushort(f)
+ skipbytes(f,nofinstructions)
+ local i=1
+ while i<=nofpoints do
+ local flag=readbyte(f)
+ flags[i]=flag
+ if bittest(flag,0x08) then
+ for j=1,readbyte(f) do
+ i=i+1
+ flags[i]=flag
+ end
+ end
+ i=i+1
+ end
+ local x=0
+ for i=1,nofpoints do
+ local flag=flags[i]
+ local short=bittest(flag,0x02)
+ local same=bittest(flag,0x10)
+ if short then
+ if same then
+ x=x+readbyte(f)
+ else
+ x=x-readbyte(f)
+ end
+ elseif same then
+ else
+ x=x+readshort(f)
+ end
+ points[i]={ x,0,bittest(flag,0x01) }
+ end
+ local y=0
+ for i=1,nofpoints do
+ local flag=flags[i]
+ local short=bittest(flag,0x04)
+ local same=bittest(flag,0x20)
+ if short then
+ if same then
+ y=y+readbyte(f)
+ else
+ y=y-readbyte(f)
+ end
+ elseif same then
+ else
+ y=y+readshort(f)
+ end
+ points[i][2]=y
+ end
+ return {
+ type="glyph",
+ points=points,
+ contours=contours,
+ nofpoints=nofpoints,
+ }
+end
+local function readcomposite(f)
+ local components={}
+ local nofcomponents=0
+ local instructions=false
+ while true do
+ local flags=readushort(f)
+ local index=readushort(f)
+ local f_xyarg=bittest(flags,0x0002)
+ local f_offset=bittest(flags,0x0800)
+ local xscale=1
+ local xrotate=0
+ local yrotate=0
+ local yscale=1
+ local xoffset=0
+ local yoffset=0
+ local base=false
+ local reference=false
+ if f_xyarg then
+ if bittest(flags,0x0001) then
+ xoffset=readshort(f)
+ yoffset=readshort(f)
+ else
+ xoffset=readchar(f)
+ yoffset=readchar(f)
+ end
+ else
+ if bittest(flags,0x0001) then
+ base=readshort(f)
+ reference=readshort(f)
+ else
+ base=readchar(f)
+ reference=readchar(f)
+ end
+ end
+ if bittest(flags,0x0008) then
+ xscale=read2dot14(f)
+ yscale=xscale
+ if f_xyarg and f_offset then
+ xoffset=xoffset*xscale
+ yoffset=yoffset*yscale
+ end
+ elseif bittest(flags,0x0040) then
+ xscale=read2dot14(f)
+ yscale=read2dot14(f)
+ if f_xyarg and f_offset then
+ xoffset=xoffset*xscale
+ yoffset=yoffset*yscale
+ end
+ elseif bittest(flags,0x0080) then
+ xscale=read2dot14(f)
+ xrotate=read2dot14(f)
+ yrotate=read2dot14(f)
+ yscale=read2dot14(f)
+ if f_xyarg and f_offset then
+ xoffset=xoffset*sqrt(xscale^2+xrotate^2)
+ yoffset=yoffset*sqrt(yrotate^2+yscale^2)
+ end
+ end
+ nofcomponents=nofcomponents+1
+ components[nofcomponents]={
+ index=index,
+ usemine=bittest(flags,0x0200),
+ round=bittest(flags,0x0006),
+ base=base,
+ reference=reference,
+ matrix={ xscale,xrotate,yrotate,yscale,xoffset,yoffset },
+ }
+ if bittest(flags,0x0100) then
+ instructions=true
+ end
+ if not bittest(flags,0x0020) then
+ break
+ end
+ end
+ return {
+ type="composite",
+ components=components,
+ }
+end
+function readers.loca(f,fontdata,specification)
+ if specification.glyphs then
+ local datatable=fontdata.tables.loca
+ if datatable then
+ local offset=fontdata.tables.glyf.offset
+ local format=fontdata.fontheader.indextolocformat
+ local locations={}
+ setposition(f,datatable.offset)
+ if format==1 then
+ local nofglyphs=datatable.length/4-2
+ for i=0,nofglyphs do
+ locations[i]=offset+readulong(f)
+ end
+ fontdata.nofglyphs=nofglyphs
+ else
+ local nofglyphs=datatable.length/2-2
+ for i=0,nofglyphs do
+ locations[i]=offset+readushort(f)*2
+ end
+ fontdata.nofglyphs=nofglyphs
+ end
+ fontdata.locations=locations
+ end
+ end
+end
+function readers.glyf(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"glyf",specification.glyphs)
+ if tableoffset then
+ local locations=fontdata.locations
+ if locations then
+ local glyphs=fontdata.glyphs
+ local nofglyphs=fontdata.nofglyphs
+ local filesize=fontdata.filesize
+ local nothing={ 0,0,0,0 }
+ local shapes={}
+ local loadshapes=specification.shapes or specification.instance
+ for index=0,nofglyphs do
+ local location=locations[index]
+ if location>=filesize then
+ report("discarding %s glyphs due to glyph location bug",nofglyphs-index+1)
+ fontdata.nofglyphs=index-1
+ fontdata.badfont=true
+ break
+ elseif location>0 then
+ setposition(f,location)
+ local nofcontours=readshort(f)
+ glyphs[index].boundingbox={
+ readshort(f),
+ readshort(f),
+ readshort(f),
+ readshort(f),
+ }
+ if not loadshapes then
+ elseif nofcontours==0 then
+ shapes[index]=readnothing(f,nofcontours)
+ elseif nofcontours>0 then
+ shapes[index]=readglyph(f,nofcontours)
+ else
+ shapes[index]=readcomposite(f,nofcontours)
+ end
+ else
+ if loadshapes then
+ shapes[index]={}
+ end
+ glyphs[index].boundingbox=nothing
+ end
+ end
+ if loadshapes then
+ if readers.gvar then
+ readers.gvar(f,fontdata,specification,glyphs,shapes)
+ end
+ mergecomposites(glyphs,shapes)
+ if specification.instance then
+ if specification.streams then
+ repackpoints(glyphs,shapes)
+ else
+ contours2outlines_shaped(glyphs,shapes,specification.shapes)
+ end
+ elseif specification.shapes then
+ contours2outlines_normal(glyphs,shapes)
+ end
+ end
+ end
+ end
+end
+local function readtuplerecord(f,nofaxis)
+ local record={}
+ for i=1,nofaxis do
+ record[i]=read2dot14(f)
+ end
+ return record
+end
+local function readpoints(f)
+ local count=readbyte(f)
+ if count==0 then
+ return nil,0
+ else
+ if count<128 then
+ elseif bittest(count,0x80) then
+ count=band(count,0x7F)*256+readbyte(f)
+ else
+ end
+ local points={}
+ local p=0
+ local n=1
+ while p<count do
+ local control=readbyte(f)
+ local runreader=bittest(control,0x80) and readushort or readbyte
+ local runlength=band(control,0x7F)
+ for i=1,runlength+1 do
+ n=n+runreader(f)
+ p=p+1
+ points[p]=n
+ end
+ end
+ return points,p
+ end
+end
+local function readdeltas(f,nofpoints)
+ local deltas={}
+ local p=0
+ local z=0
+ while nofpoints>0 do
+ local control=readbyte(f)
+if not control then
+ break
+end
+ local allzero=bittest(control,0x80)
+ local runlength=band(control,0x3F)+1
+ if allzero then
+ z=z+runlength
+ else
+ local runreader=bittest(control,0x40) and readshort or readinteger
+ if z>0 then
+ for i=1,z do
+ p=p+1
+ deltas[p]=0
+ end
+ z=0
+ end
+ for i=1,runlength do
+ p=p+1
+ deltas[p]=runreader(f)
+ end
+ end
+ nofpoints=nofpoints-runlength
+ end
+ if p>0 then
+ return deltas
+ else
+ end
+end
+local function readdeltas(f,nofpoints)
+ local deltas={}
+ local p=0
+ while nofpoints>0 do
+ local control=readbyte(f)
+ if control then
+ local allzero=bittest(control,0x80)
+ local runlength=band(control,0x3F)+1
+ if allzero then
+ for i=1,runlength do
+ p=p+1
+ deltas[p]=0
+ end
+ else
+ local runreader=bittest(control,0x40) and readshort or readinteger
+ for i=1,runlength do
+ p=p+1
+ deltas[p]=runreader(f)
+ end
+ end
+ nofpoints=nofpoints-runlength
+ else
+ break
+ end
+ end
+ if p>0 then
+ return deltas
+ else
+ end
+end
+function readers.gvar(f,fontdata,specification,glyphdata,shapedata)
+ local instance=specification.instance
+ if not instance then
+ return
+ end
+ local factors=specification.factors
+ if not factors then
+ return
+ end
+ local tableoffset=gotodatatable(f,fontdata,"gvar",specification.variable or specification.shapes)
+ if tableoffset then
+ local version=readulong(f)
+ local nofaxis=readushort(f)
+ local noftuples=readushort(f)
+ local tupleoffset=tableoffset+readulong(f)
+ local nofglyphs=readushort(f)
+ local flags=readushort(f)
+ local dataoffset=tableoffset+readulong(f)
+ local data={}
+ local tuples={}
+ local glyphdata=fontdata.glyphs
+ local dowidth=not fontdata.variabledata.hvarwidths
+ if bittest(flags,0x0001) then
+ for i=1,nofglyphs+1 do
+ data[i]=dataoffset+readulong(f)
+ end
+ else
+ for i=1,nofglyphs+1 do
+ data[i]=dataoffset+2*readushort(f)
+ end
+ end
+ if noftuples>0 then
+ setposition(f,tupleoffset)
+ for i=1,noftuples do
+ tuples[i]=readtuplerecord(f,nofaxis)
+ end
+ end
+ local nextoffset=false
+ local startoffset=data[1]
+ for i=1,nofglyphs do
+ nextoffset=data[i+1]
+ local glyph=glyphdata[i-1]
+ local name=trace_deltas and glyph.name
+ if startoffset==nextoffset then
+ if name then
+ report("no deltas for glyph %a",name)
+ end
+ else
+ local shape=shapedata[i-1]
+ if not shape then
+ if name then
+ report("no shape for glyph %a",name)
+ end
+ else
+ lastoffset=startoffset
+ setposition(f,startoffset)
+ local flags=readushort(f)
+ local count=band(flags,0x0FFF)
+ local offset=startoffset+readushort(f)
+ local deltas={}
+ local allpoints=(shape.nofpoints or 0)
+ local shared=false
+ local nofshared=0
+ if bittest(flags,0x8000) then
+ local current=getposition(f)
+ setposition(f,offset)
+ shared,nofshared=readpoints(f)
+ offset=getposition(f)
+ setposition(f,current)
+ end
+ for j=1,count do
+ local size=readushort(f)
+ local flags=readushort(f)
+ local index=band(flags,0x0FFF)
+ local haspeak=bittest(flags,0x8000)
+ local intermediate=bittest(flags,0x4000)
+ local private=bittest(flags,0x2000)
+ local peak=nil
+ local start=nil
+ local stop=nil
+ local xvalues=nil
+ local yvalues=nil
+ local points=shared
+ local nofpoints=nofshared
+ if haspeak then
+ peak=readtuplerecord(f,nofaxis)
+ else
+ if index+1>#tuples then
+ report("error, bad tuple index",index)
+ end
+ peak=tuples[index+1]
+ end
+ if intermediate then
+ start=readtuplerecord(f,nofaxis)
+ stop=readtuplerecord(f,nofaxis)
+ end
+ if size>0 then
+ local current=getposition(f)
+ setposition(f,offset)
+ if private then
+ points,nofpoints=readpoints(f)
+ end
+ if nofpoints==0 then
+ nofpoints=allpoints+4
+ end
+ if nofpoints>0 then
+ xvalues=readdeltas(f,nofpoints)
+ yvalues=readdeltas(f,nofpoints)
+ end
+ offset=offset+size
+ setposition(f,current)
+ end
+ if not xvalues and not yvalues then
+ points=nil
+ end
+ local s=1
+ for i=1,nofaxis do
+ local f=factors[i]
+ local peak=peak and peak [i] or 0
+ local start=start and start[i] or (peak<0 and peak or 0)
+ local stop=stop and stop [i] or (peak>0 and peak or 0)
+ if start>peak or peak>stop then
+ elseif start<0 and stop>0 and peak~=0 then
+ elseif peak==0 then
+ elseif f<start or f>stop then
+ s=0
+ break
+ elseif f<peak then
+ s=s*(f-start)/(peak-start)
+ elseif f>peak then
+ s=s*(stop-f)/(stop-peak)
+ else
+ end
+ end
+ if s==0 then
+ if name then
+ report("no deltas applied for glyph %a",name)
+ end
+ else
+ deltas[#deltas+1]={
+ factor=s,
+ points=points,
+ xvalues=xvalues,
+ yvalues=yvalues,
+ }
+ end
+ end
+ if shape.type=="glyph" then
+ applyaxis(glyph,shape,deltas,dowidth)
+ else
+ shape.deltas=deltas
+ end
+ end
+ end
+ startoffset=nextoffset
+ end
+ end
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-dsp']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local next,type=next,type
+local bittest=bit32.btest
+local band=bit32.band
+local extract=bit32.extract
+local bor=bit32.bor
+local lshift=bit32.lshift
+local rshift=bit32.rshift
+local gsub=string.gsub
+local lower=string.lower
+local sub=string.sub
+local strip=string.strip
+local tohash=table.tohash
+local concat=table.concat
+local copy=table.copy
+local reversed=table.reversed
+local sort=table.sort
+local insert=table.insert
+local round=math.round
+local lpegmatch=lpeg.match
+local setmetatableindex=table.setmetatableindex
+local formatters=string.formatters
+local sortedkeys=table.sortedkeys
+local sortedhash=table.sortedhash
+local report=logs.reporter("otf reader")
+local readers=fonts.handlers.otf.readers
+local streamreader=readers.streamreader
+local setposition=streamreader.setposition
+local getposition=streamreader.getposition
+local readushort=streamreader.readcardinal2
+local readulong=streamreader.readcardinal4
+local readinteger=streamreader.readinteger1
+local readshort=streamreader.readinteger2
+local readstring=streamreader.readstring
+local readtag=streamreader.readtag
+local readbytes=streamreader.readbytes
+local readfixed=streamreader.readfixed4
+local read2dot14=streamreader.read2dot14
+local skipshort=streamreader.skipshort
+local skipbytes=streamreader.skip
+local readfword=readshort
+local readbytetable=streamreader.readbytetable
+local readbyte=streamreader.readbyte
+local gsubhandlers={}
+local gposhandlers={}
+readers.gsubhandlers=gsubhandlers
+readers.gposhandlers=gposhandlers
+local helpers=readers.helpers
+local gotodatatable=helpers.gotodatatable
+local setvariabledata=helpers.setvariabledata
+local lookupidoffset=-1
+local classes={
+ "base",
+ "ligature",
+ "mark",
+ "component",
+}
+local gsubtypes={
+ "single",
+ "multiple",
+ "alternate",
+ "ligature",
+ "context",
+ "chainedcontext",
+ "extension",
+ "reversechainedcontextsingle",
+}
+local gpostypes={
+ "single",
+ "pair",
+ "cursive",
+ "marktobase",
+ "marktoligature",
+ "marktomark",
+ "context",
+ "chainedcontext",
+ "extension",
+}
+local chaindirections={
+ context=0,
+ chainedcontext=1,
+ reversechainedcontextsingle=-1,
+}
+local function setmetrics(data,where,tag,d)
+ local w=data[where]
+ if w then
+ local v=w[tag]
+ if v then
+ w[tag]=v+d
+ end
+ end
+end
+local variabletags={
+ hasc=function(data,d) setmetrics(data,"windowsmetrics","typoascender",d) end,
+ hdsc=function(data,d) setmetrics(data,"windowsmetrics","typodescender",d) end,
+ hlgp=function(data,d) setmetrics(data,"windowsmetrics","typolinegap",d) end,
+ hcla=function(data,d) setmetrics(data,"windowsmetrics","winascent",d) end,
+ hcld=function(data,d) setmetrics(data,"windowsmetrics","windescent",d) end,
+ vasc=function(data,d) setmetrics(data,"vhea not done","ascent",d) end,
+ vdsc=function(data,d) setmetrics(data,"vhea not done","descent",d) end,
+ vlgp=function(data,d) setmetrics(data,"vhea not done","linegap",d) end,
+ xhgt=function(data,d) setmetrics(data,"windowsmetrics","xheight",d) end,
+ cpht=function(data,d) setmetrics(data,"windowsmetrics","capheight",d) end,
+ sbxs=function(data,d) setmetrics(data,"windowsmetrics","subscriptxsize",d) end,
+ sbys=function(data,d) setmetrics(data,"windowsmetrics","subscriptysize",d) end,
+ sbxo=function(data,d) setmetrics(data,"windowsmetrics","subscriptxoffset",d) end,
+ sbyo=function(data,d) setmetrics(data,"windowsmetrics","subscriptyoffset",d) end,
+ spxs=function(data,d) setmetrics(data,"windowsmetrics","superscriptxsize",d) end,
+ spys=function(data,d) setmetrics(data,"windowsmetrics","superscriptysize",d) end,
+ spxo=function(data,d) setmetrics(data,"windowsmetrics","superscriptxoffset",d) end,
+ spyo=function(data,d) setmetrics(data,"windowsmetrics","superscriptyoffset",d) end,
+ strs=function(data,d) setmetrics(data,"windowsmetrics","strikeoutsize",d) end,
+ stro=function(data,d) setmetrics(data,"windowsmetrics","strikeoutpos",d) end,
+ unds=function(data,d) setmetrics(data,"postscript","underlineposition",d) end,
+ undo=function(data,d) setmetrics(data,"postscript","underlinethickness",d) end,
+}
+local read_cardinal={
+ streamreader.readcardinal1,
+ streamreader.readcardinal2,
+ streamreader.readcardinal3,
+ streamreader.readcardinal4,
+}
+local read_integer={
+ streamreader.readinteger1,
+ streamreader.readinteger2,
+ streamreader.readinteger3,
+ streamreader.readinteger4,
+}
+local lookupnames={
+ gsub={
+ single="gsub_single",
+ multiple="gsub_multiple",
+ alternate="gsub_alternate",
+ ligature="gsub_ligature",
+ context="gsub_context",
+ chainedcontext="gsub_contextchain",
+ reversechainedcontextsingle="gsub_reversecontextchain",
+ },
+ gpos={
+ single="gpos_single",
+ pair="gpos_pair",
+ cursive="gpos_cursive",
+ marktobase="gpos_mark2base",
+ marktoligature="gpos_mark2ligature",
+ marktomark="gpos_mark2mark",
+ context="gpos_context",
+ chainedcontext="gpos_contextchain",
+ }
+}
+local lookupflags=setmetatableindex(function(t,k)
+ local v={
+ bittest(k,0x0008) and true or false,
+ bittest(k,0x0004) and true or false,
+ bittest(k,0x0002) and true or false,
+ bittest(k,0x0001) and true or false,
+ }
+ t[k]=v
+ return v
+end)
+local pattern=lpeg.Cf (
+ lpeg.Ct("")*lpeg.Cg (
+ lpeg.C((lpeg.R("az","09")+lpeg.P(" "))^1)*lpeg.S(" :=")*(lpeg.patterns.number/tonumber)*lpeg.S(" ,")^0
+ )^1,rawset
+)
+local hash=table.setmetatableindex(function(t,k)
+ local v=lpegmatch(pattern,k)
+ local t={}
+ for k,v in sortedhash(v) do
+ t[#t+1]=k.."="..v
+ end
+ v=concat(t,",")
+ t[k]=v
+ return v
+end)
+helpers.normalizedaxishash=hash
+local cleanname=fonts.names and fonts.names.cleanname or function(name)
+ return name and (gsub(lower(name),"[^%a%d]","")) or nil
+end
+helpers.cleanname=cleanname
+function helpers.normalizedaxis(str)
+ return hash[str] or str
+end
+local function axistofactors(str)
+ return lpegmatch(pattern,str)
+end
+local function getaxisscale(segments,minimum,default,maximum,user)
+ if not minimum or not default or not maximum then
+ return false
+ end
+ if user<minimum then
+ user=minimum
+ elseif user>maximum then
+ user=maximum
+ end
+ if user<default then
+ default=- (default-user)/(default-minimum)
+ elseif user>default then
+ default=(user-default)/(maximum-default)
+ else
+ default=0
+ end
+ if not segments then
+ return default
+ end
+ local e
+ for i=1,#segments do
+ local s=segments[i]
+ if type(s)~="number" then
+ report("using default axis scale")
+ return default
+ elseif s[1]>=default then
+ if s[2]==default then
+ return default
+ else
+ e=i
+ break
+ end
+ end
+ end
+ if e then
+ local b=segments[e-1]
+ local e=segments[e]
+ return b[2]+(e[2]-b[2])*(default-b[1])/(e[1]-b[1])
+ else
+ return false
+ end
+end
+local function getfactors(data,instancespec)
+ if instancespec==true then
+ elseif type(instancespec)~="string" or instancespec=="" then
+ return
+ end
+ local variabledata=data.variabledata
+ if not variabledata then
+ return
+ end
+ local instances=variabledata.instances
+ local axis=variabledata.axis
+ local segments=variabledata.segments
+ if instances and axis then
+ local values
+ if instancespec==true then
+ values={}
+ for i=1,#axis do
+ values[i]={
+ value=axis[i].default,
+ }
+ end
+ else
+ for i=1,#instances do
+ local instance=instances[i]
+ if cleanname(instance.subfamily)==instancespec then
+ values=instance.values
+ break
+ end
+ end
+ end
+ if values then
+ local factors={}
+ for i=1,#axis do
+ local a=axis[i]
+ factors[i]=getaxisscale(segments,a.minimum,a.default,a.maximum,values[i].value)
+ end
+ return factors
+ end
+ local values=axistofactors(hash[instancespec] or instancespec)
+ if values then
+ local factors={}
+ for i=1,#axis do
+ local a=axis[i]
+ local d=a.default
+ factors[i]=getaxisscale(segments,a.minimum,d,a.maximum,values[a.name or a.tag] or d)
+ end
+ return factors
+ end
+ end
+end
+local function getscales(regions,factors)
+ local scales={}
+ for i=1,#regions do
+ local region=regions[i]
+ local s=1
+ for j=1,#region do
+ local axis=region[j]
+ local f=factors[j]
+ local start=axis.start
+ local peak=axis.peak
+ local stop=axis.stop
+ if start>peak or peak>stop then
+ elseif start<0 and stop>0 and peak~=0 then
+ elseif peak==0 then
+ elseif f<start or f>stop then
+ s=0
+ break
+ elseif f<peak then
+ s=s*(f-start)/(peak-start)
+ elseif f>peak then
+ s=s*(stop-f)/(stop-peak)
+ else
+ end
+ end
+ scales[i]=s
+ end
+ return scales
+end
+helpers.getaxisscale=getaxisscale
+helpers.getfactors=getfactors
+helpers.getscales=getscales
+helpers.axistofactors=axistofactors
+local function readvariationdata(f,storeoffset,factors)
+ local position=getposition(f)
+ setposition(f,storeoffset)
+ local format=readushort(f)
+ local regionoffset=storeoffset+readulong(f)
+ local nofdeltadata=readushort(f)
+ local deltadata={}
+ for i=1,nofdeltadata do
+ deltadata[i]=readulong(f)
+ end
+ setposition(f,regionoffset)
+ local nofaxis=readushort(f)
+ local nofregions=readushort(f)
+ local regions={}
+ for i=1,nofregions do
+ local t={}
+ for i=1,nofaxis do
+ t[i]={
+ start=read2dot14(f),
+ peak=read2dot14(f),
+ stop=read2dot14(f),
+ }
+ end
+ regions[i]=t
+ end
+ if factors then
+ for i=1,nofdeltadata do
+ setposition(f,storeoffset+deltadata[i])
+ local nofdeltasets=readushort(f)
+ local nofshorts=readushort(f)
+ local nofregions=readushort(f)
+ local usedregions={}
+ local deltas={}
+ for i=1,nofregions do
+ usedregions[i]=regions[readushort(f)+1]
+ end
+ for i=1,nofdeltasets do
+ local t={}
+ for i=1,nofshorts do
+ t[i]=readshort(f)
+ end
+ for i=nofshorts+1,nofregions do
+ t[i]=readinteger(f)
+ end
+ deltas[i]=t
+ end
+ deltadata[i]={
+ regions=usedregions,
+ deltas=deltas,
+ scales=factors and getscales(usedregions,factors) or nil,
+ }
+ end
+ end
+ setposition(f,position)
+ return regions,deltadata
+end
+helpers.readvariationdata=readvariationdata
+local function readcoverage(f,offset,simple)
+ setposition(f,offset)
+ local coverageformat=readushort(f)
+ local coverage={}
+ if coverageformat==1 then
+ local nofcoverage=readushort(f)
+ if simple then
+ for i=1,nofcoverage do
+ coverage[i]=readushort(f)
+ end
+ else
+ for i=0,nofcoverage-1 do
+ coverage[readushort(f)]=i
+ end
+ end
+ elseif coverageformat==2 then
+ local nofranges=readushort(f)
+ local n=simple and 1 or 0
+ for i=1,nofranges do
+ local firstindex=readushort(f)
+ local lastindex=readushort(f)
+ local coverindex=readushort(f)
+ if simple then
+ for i=firstindex,lastindex do
+ coverage[n]=i
+ n=n+1
+ end
+ else
+ for i=firstindex,lastindex do
+ coverage[i]=n
+ n=n+1
+ end
+ end
+ end
+ else
+ report("unknown coverage format %a ",coverageformat)
+ end
+ return coverage
+end
+local function readclassdef(f,offset,preset)
+ setposition(f,offset)
+ local classdefformat=readushort(f)
+ local classdef={}
+ if type(preset)=="number" then
+ for k=0,preset-1 do
+ classdef[k]=1
+ end
+ end
+ if classdefformat==1 then
+ local index=readushort(f)
+ local nofclassdef=readushort(f)
+ for i=1,nofclassdef do
+ classdef[index]=readushort(f)+1
+ index=index+1
+ end
+ elseif classdefformat==2 then
+ local nofranges=readushort(f)
+ local n=0
+ for i=1,nofranges do
+ local firstindex=readushort(f)
+ local lastindex=readushort(f)
+ local class=readushort(f)+1
+ for i=firstindex,lastindex do
+ classdef[i]=class
+ end
+ end
+ else
+ report("unknown classdef format %a ",classdefformat)
+ end
+ if type(preset)=="table" then
+ for k in next,preset do
+ if not classdef[k] then
+ classdef[k]=1
+ end
+ end
+ end
+ return classdef
+end
+local function classtocoverage(defs)
+ if defs then
+ local list={}
+ for index,class in next,defs do
+ local c=list[class]
+ if c then
+ c[#c+1]=index
+ else
+ list[class]={ index }
+ end
+ end
+ return list
+ end
+end
+local skips={ [0]=0,
+ 1,
+ 1,
+ 2,
+ 1,
+ 2,
+ 2,
+ 3,
+ 2,
+ 2,
+ 3,
+ 2,
+ 3,
+ 3,
+ 4,
+}
+local function readvariation(f,offset)
+ local p=getposition(f)
+ setposition(f,offset)
+ local outer=readushort(f)
+ local inner=readushort(f)
+ local format=readushort(f)
+ setposition(f,p)
+ if format==0x8000 then
+ return outer,inner
+ end
+end
+local function readposition(f,format,mainoffset,getdelta)
+ if format==0 then
+ return false
+ end
+ if format==0x04 then
+ local h=readshort(f)
+ if h==0 then
+ return true
+ else
+ return { 0,0,h,0 }
+ end
+ end
+ if format==0x05 then
+ local x=readshort(f)
+ local h=readshort(f)
+ if x==0 and h==0 then
+ return true
+ else
+ return { x,0,h,0 }
+ end
+ end
+ if format==0x44 then
+ local h=readshort(f)
+ if getdelta then
+ local d=readshort(f)
+ if d>0 then
+ local outer,inner=readvariation(f,mainoffset+d)
+ if outer then
+ h=h+getdelta(outer,inner)
+ end
+ end
+ else
+ skipshort(f,1)
+ end
+ if h==0 then
+ return true
+ else
+ return { 0,0,h,0 }
+ end
+ end
+ local x=bittest(format,0x01) and readshort(f) or 0
+ local y=bittest(format,0x02) and readshort(f) or 0
+ local h=bittest(format,0x04) and readshort(f) or 0
+ local v=bittest(format,0x08) and readshort(f) or 0
+ if format>=0x10 then
+ local X=bittest(format,0x10) and skipshort(f) or 0
+ local Y=bittest(format,0x20) and skipshort(f) or 0
+ local H=bittest(format,0x40) and skipshort(f) or 0
+ local V=bittest(format,0x80) and skipshort(f) or 0
+ local s=skips[extract(format,4,4)]
+ if s>0 then
+ skipshort(f,s)
+ end
+ if getdelta then
+ if X>0 then
+ local outer,inner=readvariation(f,mainoffset+X)
+ if outer then
+ x=x+getdelta(outer,inner)
+ end
+ end
+ if Y>0 then
+ local outer,inner=readvariation(f,mainoffset+Y)
+ if outer then
+ y=y+getdelta(outer,inner)
+ end
+ end
+ if H>0 then
+ local outer,inner=readvariation(f,mainoffset+H)
+ if outer then
+ h=h+getdelta(outer,inner)
+ end
+ end
+ if V>0 then
+ local outer,inner=readvariation(f,mainoffset+V)
+ if outer then
+ v=v+getdelta(outer,inner)
+ end
+ end
+ end
+ return { x,y,h,v }
+ elseif x==0 and y==0 and h==0 and v==0 then
+ return true
+ else
+ return { x,y,h,v }
+ end
+end
+local function readanchor(f,offset,getdelta)
+ if not offset or offset==0 then
+ return nil
+ end
+ setposition(f,offset)
+ local format=readshort(f)
+ local x=readshort(f)
+ local y=readshort(f)
+ if format==3 then
+ if getdelta then
+ local X=readshort(f)
+ local Y=readshort(f)
+ if X>0 then
+ local outer,inner=readvariation(f,offset+X)
+ if outer then
+ x=x+getdelta(outer,inner)
+ end
+ end
+ if Y>0 then
+ local outer,inner=readvariation(f,offset+Y)
+ if outer then
+ y=y+getdelta(outer,inner)
+ end
+ end
+ else
+ skipshort(f,2)
+ end
+ return { x,y }
+ else
+ return { x,y }
+ end
+end
+local function readfirst(f,offset)
+ if offset then
+ setposition(f,offset)
+ end
+ return { readushort(f) }
+end
+local function readarray(f,offset,first)
+ if offset then
+ setposition(f,offset)
+ end
+ local n=readushort(f)
+ if first then
+ local t={ first }
+ for i=2,n do
+ t[i]=readushort(f)
+ end
+ return t,n
+ elseif n>0 then
+ local t={}
+ for i=1,n do
+ t[i]=readushort(f)
+ end
+ return t,n
+ end
+end
+local function readcoveragearray(f,offset,t,simple)
+ if not t then
+ return nil
+ end
+ local n=#t
+ if n==0 then
+ return nil
+ end
+ for i=1,n do
+ t[i]=readcoverage(f,offset+t[i],simple)
+ end
+ return t
+end
+local function covered(subset,all)
+ local used,u
+ for i=1,#subset do
+ local s=subset[i]
+ if all[s] then
+ if used then
+ u=u+1
+ used[u]=s
+ else
+ u=1
+ used={ s }
+ end
+ end
+ end
+ return used
+end
+local function readlookuparray(f,noflookups,nofcurrent)
+ local lookups={}
+ if noflookups>0 then
+ local length=0
+ for i=1,noflookups do
+ local index=readushort(f)+1
+ if index>length then
+ length=index
+ end
+ local lookup=readushort(f)+1
+ local list=lookups[index]
+ if list then
+ list[#list+1]=lookup
+ else
+ lookups[index]={ lookup }
+ end
+ end
+ for index=1,length do
+ if not lookups[index] then
+ lookups[index]=false
+ end
+ end
+ end
+ return lookups
+end
+local function unchainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,what)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ if subtype==1 then
+ local coverage=readushort(f)
+ local subclasssets=readarray(f)
+ local rules={}
+ if subclasssets then
+ coverage=readcoverage(f,tableoffset+coverage,true)
+ for i=1,#subclasssets do
+ local offset=subclasssets[i]
+ if offset>0 then
+ local firstcoverage=coverage[i]
+ local rulesoffset=tableoffset+offset
+ local subclassrules=readarray(f,rulesoffset)
+ for rule=1,#subclassrules do
+ setposition(f,rulesoffset+subclassrules[rule])
+ local nofcurrent=readushort(f)
+ local noflookups=readushort(f)
+ local current={ { firstcoverage } }
+ for i=2,nofcurrent do
+ current[i]={ readushort(f) }
+ end
+ local lookups=readlookuparray(f,noflookups,nofcurrent)
+ rules[#rules+1]={
+ current=current,
+ lookups=lookups
+ }
+ end
+ end
+ end
+ else
+ report("empty subclassset in %a subtype %i","unchainedcontext",subtype)
+ end
+ return {
+ format="glyphs",
+ rules=rules,
+ }
+ elseif subtype==2 then
+ local coverage=readushort(f)
+ local currentclassdef=readushort(f)
+ local subclasssets=readarray(f)
+ local rules={}
+ if subclasssets then
+ coverage=readcoverage(f,tableoffset+coverage)
+ currentclassdef=readclassdef(f,tableoffset+currentclassdef,coverage)
+ local currentclasses=classtocoverage(currentclassdef,fontdata.glyphs)
+ for class=1,#subclasssets do
+ local offset=subclasssets[class]
+ if offset>0 then
+ local firstcoverage=currentclasses[class]
+ if firstcoverage then
+ firstcoverage=covered(firstcoverage,coverage)
+ if firstcoverage then
+ local rulesoffset=tableoffset+offset
+ local subclassrules=readarray(f,rulesoffset)
+ for rule=1,#subclassrules do
+ setposition(f,rulesoffset+subclassrules[rule])
+ local nofcurrent=readushort(f)
+ local noflookups=readushort(f)
+ local current={ firstcoverage }
+ for i=2,nofcurrent do
+ current[i]=currentclasses[readushort(f)+1]
+ end
+ local lookups=readlookuparray(f,noflookups,nofcurrent)
+ rules[#rules+1]={
+ current=current,
+ lookups=lookups
+ }
+ end
+ else
+ report("no coverage")
+ end
+ else
+ report("no coverage class")
+ end
+ end
+ end
+ else
+ report("empty subclassset in %a subtype %i","unchainedcontext",subtype)
+ end
+ return {
+ format="class",
+ rules=rules,
+ }
+ elseif subtype==3 then
+ local current=readarray(f)
+ local noflookups=readushort(f)
+ local lookups=readlookuparray(f,noflookups,#current)
+ current=readcoveragearray(f,tableoffset,current,true)
+ return {
+ format="coverage",
+ rules={
+ {
+ current=current,
+ lookups=lookups,
+ }
+ }
+ }
+ else
+ report("unsupported subtype %a in %a %s",subtype,"unchainedcontext",what)
+ end
+end
+local function chainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,what)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ if subtype==1 then
+ local coverage=readushort(f)
+ local subclasssets=readarray(f)
+ local rules={}
+ if subclasssets then
+ coverage=readcoverage(f,tableoffset+coverage,true)
+ for i=1,#subclasssets do
+ local offset=subclasssets[i]
+ if offset>0 then
+ local firstcoverage=coverage[i]
+ local rulesoffset=tableoffset+offset
+ local subclassrules=readarray(f,rulesoffset)
+ for rule=1,#subclassrules do
+ setposition(f,rulesoffset+subclassrules[rule])
+ local nofbefore=readushort(f)
+ local before
+ if nofbefore>0 then
+ before={}
+ for i=1,nofbefore do
+ before[i]={ readushort(f) }
+ end
+ end
+ local nofcurrent=readushort(f)
+ local current={ { firstcoverage } }
+ for i=2,nofcurrent do
+ current[i]={ readushort(f) }
+ end
+ local nofafter=readushort(f)
+ local after
+ if nofafter>0 then
+ after={}
+ for i=1,nofafter do
+ after[i]={ readushort(f) }
+ end
+ end
+ local noflookups=readushort(f)
+ local lookups=readlookuparray(f,noflookups,nofcurrent)
+ rules[#rules+1]={
+ before=before,
+ current=current,
+ after=after,
+ lookups=lookups,
+ }
+ end
+ end
+ end
+ else
+ report("empty subclassset in %a subtype %i","chainedcontext",subtype)
+ end
+ return {
+ format="glyphs",
+ rules=rules,
+ }
+ elseif subtype==2 then
+ local coverage=readushort(f)
+ local beforeclassdef=readushort(f)
+ local currentclassdef=readushort(f)
+ local afterclassdef=readushort(f)
+ local subclasssets=readarray(f)
+ local rules={}
+ if subclasssets then
+ local coverage=readcoverage(f,tableoffset+coverage)
+ local beforeclassdef=readclassdef(f,tableoffset+beforeclassdef,nofglyphs)
+ local currentclassdef=readclassdef(f,tableoffset+currentclassdef,coverage)
+ local afterclassdef=readclassdef(f,tableoffset+afterclassdef,nofglyphs)
+ local beforeclasses=classtocoverage(beforeclassdef,fontdata.glyphs)
+ local currentclasses=classtocoverage(currentclassdef,fontdata.glyphs)
+ local afterclasses=classtocoverage(afterclassdef,fontdata.glyphs)
+ for class=1,#subclasssets do
+ local offset=subclasssets[class]
+ if offset>0 then
+ local firstcoverage=currentclasses[class]
+ if firstcoverage then
+ firstcoverage=covered(firstcoverage,coverage)
+ if firstcoverage then
+ local rulesoffset=tableoffset+offset
+ local subclassrules=readarray(f,rulesoffset)
+ for rule=1,#subclassrules do
+ setposition(f,rulesoffset+subclassrules[rule])
+ local nofbefore=readushort(f)
+ local before
+ if nofbefore>0 then
+ before={}
+ for i=1,nofbefore do
+ before[i]=beforeclasses[readushort(f)+1]
+ end
+ end
+ local nofcurrent=readushort(f)
+ local current={ firstcoverage }
+ for i=2,nofcurrent do
+ current[i]=currentclasses[readushort(f)+1]
+ end
+ local nofafter=readushort(f)
+ local after
+ if nofafter>0 then
+ after={}
+ for i=1,nofafter do
+ after[i]=afterclasses[readushort(f)+1]
+ end
+ end
+ local noflookups=readushort(f)
+ local lookups=readlookuparray(f,noflookups,nofcurrent)
+ rules[#rules+1]={
+ before=before,
+ current=current,
+ after=after,
+ lookups=lookups,
+ }
+ end
+ else
+ report("no coverage")
+ end
+ else
+ report("class is not covered")
+ end
+ end
+ end
+ else
+ report("empty subclassset in %a subtype %i","chainedcontext",subtype)
+ end
+ return {
+ format="class",
+ rules=rules,
+ }
+ elseif subtype==3 then
+ local before=readarray(f)
+ local current=readarray(f)
+ local after=readarray(f)
+ local noflookups=readushort(f)
+ local lookups=readlookuparray(f,noflookups,#current)
+ before=readcoveragearray(f,tableoffset,before,true)
+ current=readcoveragearray(f,tableoffset,current,true)
+ after=readcoveragearray(f,tableoffset,after,true)
+ return {
+ format="coverage",
+ rules={
+ {
+ before=before,
+ current=current,
+ after=after,
+ lookups=lookups,
+ }
+ }
+ }
+ else
+ report("unsupported subtype %a in %a %s",subtype,"chainedcontext",what)
+ end
+end
+local function extension(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,types,handlers,what)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ if subtype==1 then
+ local lookuptype=types[readushort(f)]
+ local faroffset=readulong(f)
+ local handler=handlers[lookuptype]
+ if handler then
+ return handler(f,fontdata,lookupid,tableoffset+faroffset,0,glyphs,nofglyphs),lookuptype
+ else
+ report("no handler for lookuptype %a subtype %a in %s %s",lookuptype,subtype,what,"extension")
+ end
+ else
+ report("unsupported subtype %a in %s %s",subtype,what,"extension")
+ end
+end
+function gsubhandlers.single(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ if subtype==1 then
+ local coverage=readushort(f)
+ local delta=readshort(f)
+ local coverage=readcoverage(f,tableoffset+coverage)
+ for index in next,coverage do
+ local newindex=index+delta
+ if index>nofglyphs or newindex>nofglyphs then
+ report("invalid index in %s format %i: %i -> %i (max %i)","single",subtype,index,newindex,nofglyphs)
+ coverage[index]=nil
+ else
+ coverage[index]=newindex
+ end
+ end
+ return {
+ coverage=coverage
+ }
+ elseif subtype==2 then
+ local coverage=readushort(f)
+ local nofreplacements=readushort(f)
+ local replacements={}
+ for i=1,nofreplacements do
+ replacements[i]=readushort(f)
+ end
+ local coverage=readcoverage(f,tableoffset+coverage)
+ for index,newindex in next,coverage do
+ newindex=newindex+1
+ if index>nofglyphs or newindex>nofglyphs then
+ report("invalid index in %s format %i: %i -> %i (max %i)","single",subtype,index,newindex,nofglyphs)
+ coverage[index]=nil
+ else
+ coverage[index]=replacements[newindex]
+ end
+ end
+ return {
+ coverage=coverage
+ }
+ else
+ report("unsupported subtype %a in %a substitution",subtype,"single")
+ end
+end
+local function sethandler(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,what)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ if subtype==1 then
+ local coverage=readushort(f)
+ local nofsequence=readushort(f)
+ local sequences={}
+ for i=1,nofsequence do
+ sequences[i]=readushort(f)
+ end
+ for i=1,nofsequence do
+ setposition(f,tableoffset+sequences[i])
+ local n=readushort(f)
+ local s={}
+ for i=1,n do
+ s[i]=readushort(f)
+ end
+ sequences[i]=s
+ end
+ local coverage=readcoverage(f,tableoffset+coverage)
+ for index,newindex in next,coverage do
+ newindex=newindex+1
+ if index>nofglyphs or newindex>nofglyphs then
+ report("invalid index in %s format %i: %i -> %i (max %i)",what,subtype,index,newindex,nofglyphs)
+ coverage[index]=nil
+ else
+ coverage[index]=sequences[newindex]
+ end
+ end
+ return {
+ coverage=coverage
+ }
+ else
+ report("unsupported subtype %a in %a substitution",subtype,what)
+ end
+end
+function gsubhandlers.multiple(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return sethandler(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,"multiple")
+end
+function gsubhandlers.alternate(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return sethandler(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,"alternate")
+end
+function gsubhandlers.ligature(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ if subtype==1 then
+ local coverage=readushort(f)
+ local nofsets=readushort(f)
+ local ligatures={}
+ for i=1,nofsets do
+ ligatures[i]=readushort(f)
+ end
+ for i=1,nofsets do
+ local offset=lookupoffset+offset+ligatures[i]
+ setposition(f,offset)
+ local n=readushort(f)
+ local l={}
+ for i=1,n do
+ l[i]=offset+readushort(f)
+ end
+ ligatures[i]=l
+ end
+ local coverage=readcoverage(f,tableoffset+coverage)
+ for index,newindex in next,coverage do
+ local hash={}
+ local ligatures=ligatures[newindex+1]
+ for i=1,#ligatures do
+ local offset=ligatures[i]
+ setposition(f,offset)
+ local lig=readushort(f)
+ local cnt=readushort(f)
+ local hsh=hash
+ for i=2,cnt do
+ local c=readushort(f)
+ local h=hsh[c]
+ if not h then
+ h={}
+ hsh[c]=h
+ end
+ hsh=h
+ end
+ hsh.ligature=lig
+ end
+ coverage[index]=hash
+ end
+ return {
+ coverage=coverage
+ }
+ else
+ report("unsupported subtype %a in %a substitution",subtype,"ligature")
+ end
+end
+function gsubhandlers.context(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return unchainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,"substitution"),"context"
+end
+function gsubhandlers.chainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return chainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,"substitution"),"chainedcontext"
+end
+function gsubhandlers.extension(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return extension(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,gsubtypes,gsubhandlers,"substitution")
+end
+function gsubhandlers.reversechainedcontextsingle(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ if subtype==1 then
+ local current=readfirst(f)
+ local before=readarray(f)
+ local after=readarray(f)
+ local replacements=readarray(f)
+ current=readcoveragearray(f,tableoffset,current,true)
+ before=readcoveragearray(f,tableoffset,before,true)
+ after=readcoveragearray(f,tableoffset,after,true)
+ return {
+ format="reversecoverage",
+ rules={
+ {
+ before=before,
+ current=current,
+ after=after,
+ replacements=replacements,
+ }
+ }
+ },"reversechainedcontextsingle"
+ else
+ report("unsupported subtype %a in %a substitution",subtype,"reversechainedcontextsingle")
+ end
+end
+local function readpairsets(f,tableoffset,sets,format1,format2,mainoffset,getdelta)
+ local done={}
+ for i=1,#sets do
+ local offset=sets[i]
+ local reused=done[offset]
+ if not reused then
+ offset=tableoffset+offset
+ setposition(f,offset)
+ local n=readushort(f)
+ reused={}
+ for i=1,n do
+ reused[i]={
+ readushort(f),
+ readposition(f,format1,offset,getdelta),
+ readposition(f,format2,offset,getdelta),
+ }
+ end
+ done[offset]=reused
+ end
+ sets[i]=reused
+ end
+ return sets
+end
+local function readpairclasssets(f,nofclasses1,nofclasses2,format1,format2,mainoffset,getdelta)
+ local classlist1={}
+ for i=1,nofclasses1 do
+ local classlist2={}
+ classlist1[i]=classlist2
+ for j=1,nofclasses2 do
+ local one=readposition(f,format1,mainoffset,getdelta)
+ local two=readposition(f,format2,mainoffset,getdelta)
+ if one or two then
+ classlist2[j]={ one,two }
+ else
+ classlist2[j]=false
+ end
+ end
+ end
+ return classlist1
+end
+function gposhandlers.single(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ local getdelta=fontdata.temporary.getdelta
+ if subtype==1 then
+ local coverage=readushort(f)
+ local format=readushort(f)
+ local value=readposition(f,format,tableoffset,getdelta)
+ local coverage=readcoverage(f,tableoffset+coverage)
+ for index,newindex in next,coverage do
+ coverage[index]=value
+ end
+ return {
+ format="single",
+ coverage=coverage,
+ }
+ elseif subtype==2 then
+ local coverage=readushort(f)
+ local format=readushort(f)
+ local nofvalues=readushort(f)
+ local values={}
+ for i=1,nofvalues do
+ values[i]=readposition(f,format,tableoffset,getdelta)
+ end
+ local coverage=readcoverage(f,tableoffset+coverage)
+ for index,newindex in next,coverage do
+ coverage[index]=values[newindex+1]
+ end
+ return {
+ format="single",
+ coverage=coverage,
+ }
+ else
+ report("unsupported subtype %a in %a positioning",subtype,"single")
+ end
+end
+function gposhandlers.pair(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ local getdelta=fontdata.temporary.getdelta
+ if subtype==1 then
+ local coverage=readushort(f)
+ local format1=readushort(f)
+ local format2=readushort(f)
+ local sets=readarray(f)
+ sets=readpairsets(f,tableoffset,sets,format1,format2,mainoffset,getdelta)
+ coverage=readcoverage(f,tableoffset+coverage)
+ for index,newindex in next,coverage do
+ local set=sets[newindex+1]
+ local hash={}
+ for i=1,#set do
+ local value=set[i]
+ if value then
+ local other=value[1]
+ local first=value[2]
+ local second=value[3]
+ if first or second then
+ hash[other]={ first,second or nil }
+ else
+ hash[other]=nil
+ end
+ end
+ end
+ coverage[index]=hash
+ end
+ return {
+ format="pair",
+ coverage=coverage,
+ }
+ elseif subtype==2 then
+ local coverage=readushort(f)
+ local format1=readushort(f)
+ local format2=readushort(f)
+ local classdef1=readushort(f)
+ local classdef2=readushort(f)
+ local nofclasses1=readushort(f)
+ local nofclasses2=readushort(f)
+ local classlist=readpairclasssets(f,nofclasses1,nofclasses2,format1,format2,tableoffset,getdelta)
+ coverage=readcoverage(f,tableoffset+coverage)
+ classdef1=readclassdef(f,tableoffset+classdef1,coverage)
+ classdef2=readclassdef(f,tableoffset+classdef2,nofglyphs)
+ local usedcoverage={}
+ for g1,c1 in next,classdef1 do
+ if coverage[g1] then
+ local l1=classlist[c1]
+ if l1 then
+ local hash={}
+ for paired,class in next,classdef2 do
+ local offsets=l1[class]
+ if offsets then
+ local first=offsets[1]
+ local second=offsets[2]
+ if first or second then
+ hash[paired]={ first,second or nil }
+ else
+ end
+ end
+ end
+ usedcoverage[g1]=hash
+ end
+ end
+ end
+ return {
+ format="pair",
+ coverage=usedcoverage,
+ }
+ elseif subtype==3 then
+ report("yet unsupported subtype %a in %a positioning",subtype,"pair")
+ else
+ report("unsupported subtype %a in %a positioning",subtype,"pair")
+ end
+end
+function gposhandlers.cursive(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ local getdelta=fontdata.temporary.getdelta
+ if subtype==1 then
+ local coverage=tableoffset+readushort(f)
+ local nofrecords=readushort(f)
+ local records={}
+ for i=1,nofrecords do
+ local entry=readushort(f)
+ local exit=readushort(f)
+ records[i]={
+ entry~=0 and (tableoffset+entry) or false,
+ exit~=0 and (tableoffset+exit ) or nil,
+ }
+ end
+ local cc=(fontdata.temporary.cursivecount or 0)+1
+ fontdata.temporary.cursivecount=cc
+ cc="cc-"..cc
+ coverage=readcoverage(f,coverage)
+ for i=1,nofrecords do
+ local r=records[i]
+ records[i]={
+ cc,
+ readanchor(f,r[1],getdelta) or false,
+ readanchor(f,r[2],getdelta) or nil,
+ }
+ end
+ for index,newindex in next,coverage do
+ coverage[index]=records[newindex+1]
+ end
+ return {
+ coverage=coverage,
+ }
+ else
+ report("unsupported subtype %a in %a positioning",subtype,"cursive")
+ end
+end
+local function handlemark(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,ligature)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ local getdelta=fontdata.temporary.getdelta
+ if subtype==1 then
+ local markcoverage=tableoffset+readushort(f)
+ local basecoverage=tableoffset+readushort(f)
+ local nofclasses=readushort(f)
+ local markoffset=tableoffset+readushort(f)
+ local baseoffset=tableoffset+readushort(f)
+ local markcoverage=readcoverage(f,markcoverage)
+ local basecoverage=readcoverage(f,basecoverage,true)
+ setposition(f,markoffset)
+ local markclasses={}
+ local nofmarkclasses=readushort(f)
+ local lastanchor=fontdata.lastanchor or 0
+ local usedanchors={}
+ for i=1,nofmarkclasses do
+ local class=readushort(f)+1
+ local offset=readushort(f)
+ if offset==0 then
+ markclasses[i]=false
+ else
+ markclasses[i]={ class,markoffset+offset }
+ end
+ usedanchors[class]=true
+ end
+ for i=1,nofmarkclasses do
+ local mc=markclasses[i]
+ if mc then
+ mc[2]=readanchor(f,mc[2],getdelta)
+ end
+ end
+ setposition(f,baseoffset)
+ local nofbaserecords=readushort(f)
+ local baserecords={}
+ if ligature then
+ for i=1,nofbaserecords do
+ local offset=readushort(f)
+ if offset==0 then
+ baserecords[i]=false
+ else
+ baserecords[i]=baseoffset+offset
+ end
+ end
+ for i=1,nofbaserecords do
+ local recordoffset=baserecords[i]
+ if recordoffset then
+ setposition(f,recordoffset)
+ local nofcomponents=readushort(f)
+ local components={}
+ for i=1,nofcomponents do
+ local classes={}
+ for i=1,nofclasses do
+ local offset=readushort(f)
+ if offset~=0 then
+ classes[i]=recordoffset+offset
+ else
+ classes[i]=false
+ end
+ end
+ components[i]=classes
+ end
+ baserecords[i]=components
+ end
+ end
+ local baseclasses={}
+ for i=1,nofclasses do
+ baseclasses[i]={}
+ end
+ for i=1,nofbaserecords do
+ local components=baserecords[i]
+ if components then
+ local b=basecoverage[i]
+ for c=1,#components do
+ local classes=components[c]
+ if classes then
+ for i=1,nofclasses do
+ local anchor=readanchor(f,classes[i],getdelta)
+ local bclass=baseclasses[i]
+ local bentry=bclass[b]
+ if bentry then
+ bentry[c]=anchor
+ else
+ bclass[b]={ [c]=anchor }
+ end
+ end
+ end
+ end
+ end
+ end
+ for index,newindex in next,markcoverage do
+ markcoverage[index]=markclasses[newindex+1] or nil
+ end
+ return {
+ format="ligature",
+ baseclasses=baseclasses,
+ coverage=markcoverage,
+ }
+ else
+ for i=1,nofbaserecords do
+ local r={}
+ for j=1,nofclasses do
+ local offset=readushort(f)
+ if offset==0 then
+ r[j]=false
+ else
+ r[j]=baseoffset+offset
+ end
+ end
+ baserecords[i]=r
+ end
+ local baseclasses={}
+ for i=1,nofclasses do
+ baseclasses[i]={}
+ end
+ for i=1,nofbaserecords do
+ local r=baserecords[i]
+ local b=basecoverage[i]
+ for j=1,nofclasses do
+ baseclasses[j][b]=readanchor(f,r[j],getdelta)
+ end
+ end
+ for index,newindex in next,markcoverage do
+ markcoverage[index]=markclasses[newindex+1] or nil
+ end
+ return {
+ format="base",
+ baseclasses=baseclasses,
+ coverage=markcoverage,
+ }
+ end
+ else
+ report("unsupported subtype %a in",subtype)
+ end
+end
+function gposhandlers.marktobase(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return handlemark(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+end
+function gposhandlers.marktoligature(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return handlemark(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,true)
+end
+function gposhandlers.marktomark(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return handlemark(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+end
+function gposhandlers.context(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return unchainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,"positioning"),"context"
+end
+function gposhandlers.chainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return chainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,"positioning"),"chainedcontext"
+end
+function gposhandlers.extension(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return extension(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,gpostypes,gposhandlers,"positioning")
+end
+do
+ local plugins={}
+ function plugins.size(f,fontdata,tableoffset,feature)
+ if fontdata.designsize then
+ else
+ local function check(offset)
+ setposition(f,offset)
+ local designsize=readushort(f)
+ if designsize>0 then
+ local fontstyleid=readushort(f)
+ local guimenuid=readushort(f)
+ local minsize=readushort(f)
+ local maxsize=readushort(f)
+ if minsize==0 and maxsize==0 and fontstyleid==0 and guimenuid==0 then
+ minsize=designsize
+ maxsize=designsize
+ end
+ if designsize>=minsize and designsize<=maxsize then
+ return minsize,maxsize,designsize
+ end
+ end
+ end
+ local minsize,maxsize,designsize=check(tableoffset+feature.offset+feature.parameters)
+ if not designsize then
+ minsize,maxsize,designsize=check(tableoffset+feature.parameters)
+ if designsize then
+ report("bad size feature in %a, falling back to wrong offset",fontdata.filename or "?")
+ else
+ report("bad size feature in %a,",fontdata.filename or "?")
+ end
+ end
+ if designsize then
+ fontdata.minsize=minsize
+ fontdata.maxsize=maxsize
+ fontdata.designsize=designsize
+ end
+ end
+ end
+ local function reorderfeatures(fontdata,scripts,features)
+ local scriptlangs={}
+ local featurehash={}
+ local featureorder={}
+ for script,languages in next,scripts do
+ for language,record in next,languages do
+ local hash={}
+ local list=record.featureindices
+ for k=1,#list do
+ local index=list[k]
+ local feature=features[index]
+ local lookups=feature.lookups
+ local tag=feature.tag
+ if tag then
+ hash[tag]=true
+ end
+ if lookups then
+ for i=1,#lookups do
+ local lookup=lookups[i]
+ local o=featureorder[lookup]
+ if o then
+ local okay=true
+ for i=1,#o do
+ if o[i]==tag then
+ okay=false
+ break
+ end
+ end
+ if okay then
+ o[#o+1]=tag
+ end
+ else
+ featureorder[lookup]={ tag }
+ end
+ local f=featurehash[lookup]
+ if f then
+ local h=f[tag]
+ if h then
+ local s=h[script]
+ if s then
+ s[language]=true
+ else
+ h[script]={ [language]=true }
+ end
+ else
+ f[tag]={ [script]={ [language]=true } }
+ end
+ else
+ featurehash[lookup]={ [tag]={ [script]={ [language]=true } } }
+ end
+ local h=scriptlangs[tag]
+ if h then
+ local s=h[script]
+ if s then
+ s[language]=true
+ else
+ h[script]={ [language]=true }
+ end
+ else
+ scriptlangs[tag]={ [script]={ [language]=true } }
+ end
+ end
+ end
+ end
+ end
+ end
+ return scriptlangs,featurehash,featureorder
+ end
+ local function readscriplan(f,fontdata,scriptoffset)
+ setposition(f,scriptoffset)
+ local nofscripts=readushort(f)
+ local scripts={}
+ for i=1,nofscripts do
+ scripts[readtag(f)]=scriptoffset+readushort(f)
+ end
+ local languagesystems=setmetatableindex("table")
+ for script,offset in next,scripts do
+ setposition(f,offset)
+ local defaultoffset=readushort(f)
+ local noflanguages=readushort(f)
+ local languages={}
+ if defaultoffset>0 then
+ languages.dflt=languagesystems[offset+defaultoffset]
+ end
+ for i=1,noflanguages do
+ local language=readtag(f)
+ local offset=offset+readushort(f)
+ languages[language]=languagesystems[offset]
+ end
+ scripts[script]=languages
+ end
+ for offset,usedfeatures in next,languagesystems do
+ if offset>0 then
+ setposition(f,offset)
+ local featureindices={}
+ usedfeatures.featureindices=featureindices
+ usedfeatures.lookuporder=readushort(f)
+ usedfeatures.requiredindex=readushort(f)
+ local noffeatures=readushort(f)
+ for i=1,noffeatures do
+ featureindices[i]=readushort(f)+1
+ end
+ end
+ end
+ return scripts
+ end
+ local function readfeatures(f,fontdata,featureoffset)
+ setposition(f,featureoffset)
+ local features={}
+ local noffeatures=readushort(f)
+ for i=1,noffeatures do
+ features[i]={
+ tag=readtag(f),
+ offset=readushort(f)
+ }
+ end
+ for i=1,noffeatures do
+ local feature=features[i]
+ local offset=featureoffset+feature.offset
+ setposition(f,offset)
+ local parameters=readushort(f)
+ local noflookups=readushort(f)
+ if noflookups>0 then
+ local lookups={}
+ feature.lookups=lookups
+ for j=1,noflookups do
+ lookups[j]=readushort(f)+1
+ end
+ end
+ if parameters>0 then
+ feature.parameters=parameters
+ local plugin=plugins[feature.tag]
+ if plugin then
+ plugin(f,fontdata,featureoffset,feature)
+ end
+ end
+ end
+ return features
+ end
+ local function readlookups(f,lookupoffset,lookuptypes,featurehash,featureorder)
+ setposition(f,lookupoffset)
+ local lookups={}
+ local noflookups=readushort(f)
+ for i=1,noflookups do
+ lookups[i]=readushort(f)
+ end
+ for lookupid=1,noflookups do
+ local offset=lookups[lookupid]
+ setposition(f,lookupoffset+offset)
+ local subtables={}
+ local typebits=readushort(f)
+ local flagbits=readushort(f)
+ local lookuptype=lookuptypes[typebits]
+ local lookupflags=lookupflags[flagbits]
+ local nofsubtables=readushort(f)
+ for j=1,nofsubtables do
+ subtables[j]=offset+readushort(f)
+ end
+ local markclass=bittest(flagbits,0x0010)
+ if markclass then
+ markclass=readushort(f)
+ end
+ local markset=rshift(flagbits,8)
+ if markset>0 then
+ markclass=markset
+ end
+ lookups[lookupid]={
+ type=lookuptype,
+ flags=lookupflags,
+ name=lookupid,
+ subtables=subtables,
+ markclass=markclass,
+ features=featurehash[lookupid],
+ order=featureorder[lookupid],
+ }
+ end
+ return lookups
+ end
+ local f_lookupname=formatters["%s_%s_%s"]
+ local function resolvelookups(f,lookupoffset,fontdata,lookups,lookuptypes,lookuphandlers,what,tableoffset)
+ local sequences=fontdata.sequences or {}
+ local sublookuplist=fontdata.sublookups or {}
+ fontdata.sequences=sequences
+ fontdata.sublookups=sublookuplist
+ local nofsublookups=#sublookuplist
+ local nofsequences=#sequences
+ local lastsublookup=nofsublookups
+ local lastsequence=nofsequences
+ local lookupnames=lookupnames[what]
+ local sublookuphash={}
+ local sublookupcheck={}
+ local glyphs=fontdata.glyphs
+ local nofglyphs=fontdata.nofglyphs or #glyphs
+ local noflookups=#lookups
+ local lookupprefix=sub(what,2,2)
+ for lookupid=1,noflookups do
+ local lookup=lookups[lookupid]
+ local lookuptype=lookup.type
+ local subtables=lookup.subtables
+ local features=lookup.features
+ local handler=lookuphandlers[lookuptype]
+ if handler then
+ local nofsubtables=#subtables
+ local order=lookup.order
+ local flags=lookup.flags
+ if flags[1] then flags[1]="mark" end
+ if flags[2] then flags[2]="ligature" end
+ if flags[3] then flags[3]="base" end
+ local markclass=lookup.markclass
+ if nofsubtables>0 then
+ local steps={}
+ local nofsteps=0
+ local oldtype=nil
+ for s=1,nofsubtables do
+ local step,lt=handler(f,fontdata,lookupid,lookupoffset,subtables[s],glyphs,nofglyphs)
+ if lt then
+ lookuptype=lt
+ if oldtype and lt~=oldtype then
+ report("messy %s lookup type %a and %a",what,lookuptype,oldtype)
+ end
+ oldtype=lookuptype
+ end
+ if not step then
+ report("unsupported %s lookup type %a",what,lookuptype)
+ else
+ nofsteps=nofsteps+1
+ steps[nofsteps]=step
+ local rules=step.rules
+ if rules then
+ for i=1,#rules do
+ local rule=rules[i]
+ local before=rule.before
+ local current=rule.current
+ local after=rule.after
+ local replacements=rule.replacements
+ if before then
+ for i=1,#before do
+ before[i]=tohash(before[i])
+ end
+ rule.before=reversed(before)
+ end
+ if current then
+ if replacements then
+ local first=current[1]
+ local hash={}
+ local repl={}
+ for i=1,#first do
+ local c=first[i]
+ hash[c]=true
+ repl[c]=replacements[i]
+ end
+ rule.current={ hash }
+ rule.replacements=repl
+ else
+ for i=1,#current do
+ current[i]=tohash(current[i])
+ end
+ end
+ end
+ if after then
+ for i=1,#after do
+ after[i]=tohash(after[i])
+ end
+ end
+ end
+ end
+ end
+ end
+ if nofsteps~=nofsubtables then
+ report("bogus subtables removed in %s lookup type %a",what,lookuptype)
+ end
+ lookuptype=lookupnames[lookuptype] or lookuptype
+ if features then
+ nofsequences=nofsequences+1
+ local l={
+ index=nofsequences,
+ name=f_lookupname(lookupprefix,"s",lookupid+lookupidoffset),
+ steps=steps,
+ nofsteps=nofsteps,
+ type=lookuptype,
+ markclass=markclass or nil,
+ flags=flags,
+ order=order,
+ features=features,
+ }
+ sequences[nofsequences]=l
+ lookup.done=l
+ else
+ nofsublookups=nofsublookups+1
+ local l={
+ index=nofsublookups,
+ name=f_lookupname(lookupprefix,"l",lookupid+lookupidoffset),
+ steps=steps,
+ nofsteps=nofsteps,
+ type=lookuptype,
+ markclass=markclass or nil,
+ flags=flags,
+ }
+ sublookuplist[nofsublookups]=l
+ sublookuphash[lookupid]=nofsublookups
+ sublookupcheck[lookupid]=0
+ lookup.done=l
+ end
+ else
+ report("no subtables for lookup %a",lookupid)
+ end
+ else
+ report("no handler for lookup %a with type %a",lookupid,lookuptype)
+ end
+ end
+ local reported={}
+ local function report_issue(i,what,sequence,kind)
+ local name=sequence.name
+ if not reported[name] then
+ report("rule %i in %s lookup %a has %s lookups",i,what,name,kind)
+ reported[name]=true
+ end
+ end
+ for i=lastsequence+1,nofsequences do
+ local sequence=sequences[i]
+ local steps=sequence.steps
+ for i=1,#steps do
+ local step=steps[i]
+ local rules=step.rules
+ if rules then
+ for i=1,#rules do
+ local rule=rules[i]
+ local rlookups=rule.lookups
+ if not rlookups then
+ report_issue(i,what,sequence,"no")
+ elseif not next(rlookups) then
+ report_issue(i,what,sequence,"empty")
+ rule.lookups=nil
+ else
+ local length=#rlookups
+ for index=1,length do
+ local lookuplist=rlookups[index]
+ if lookuplist then
+ local length=#lookuplist
+ local found={}
+ local noffound=0
+ for index=1,length do
+ local lookupid=lookuplist[index]
+ if lookupid then
+ local h=sublookuphash[lookupid]
+ if not h then
+ local lookup=lookups[lookupid]
+ if lookup then
+ local d=lookup.done
+ if d then
+ nofsublookups=nofsublookups+1
+ h={
+ index=nofsublookups,
+ name=f_lookupname(lookupprefix,"d",lookupid+lookupidoffset),
+ derived=true,
+ steps=d.steps,
+ nofsteps=d.nofsteps,
+ type=d.lookuptype or "gsub_single",
+ markclass=d.markclass or nil,
+ flags=d.flags,
+ }
+ sublookuplist[nofsublookups]=copy(h)
+ sublookuphash[lookupid]=nofsublookups
+ sublookupcheck[lookupid]=1
+ h=nofsublookups
+ else
+ report_issue(i,what,sequence,"missing")
+ rule.lookups=nil
+ break
+ end
+ else
+ report_issue(i,what,sequence,"bad")
+ rule.lookups=nil
+ break
+ end
+ else
+ sublookupcheck[lookupid]=sublookupcheck[lookupid]+1
+ end
+ if h then
+ noffound=noffound+1
+ found[noffound]=h
+ end
+ end
+ end
+ rlookups[index]=noffound>0 and found or false
+ else
+ rlookups[index]=false
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ for i,n in sortedhash(sublookupcheck) do
+ local l=lookups[i]
+ local t=l.type
+ if n==0 and t~="extension" then
+ local d=l.done
+ report("%s lookup %s of type %a is not used",what,d and d.name or l.name,t)
+ end
+ end
+ end
+ local function loadvariations(f,fontdata,variationsoffset,lookuptypes,featurehash,featureorder)
+ setposition(f,variationsoffset)
+ local version=readulong(f)
+ local nofrecords=readulong(f)
+ local records={}
+ for i=1,nofrecords do
+ records[i]={
+ conditions=readulong(f),
+ substitutions=readulong(f),
+ }
+ end
+ for i=1,nofrecords do
+ local record=records[i]
+ local offset=record.conditions
+ if offset==0 then
+ record.condition=nil
+ record.matchtype="always"
+ else
+ setposition(f,variationsoffset+offset)
+ local nofconditions=readushort(f)
+ local conditions={}
+ for i=1,nofconditions do
+ conditions[i]=variationsoffset+offset+readulong(f)
+ end
+ record.conditions=conditions
+ record.matchtype="condition"
+ end
+ end
+ for i=1,nofrecords do
+ local record=records[i]
+ if record.matchtype=="condition" then
+ local conditions=record.conditions
+ for i=1,#conditions do
+ setposition(f,conditions[i])
+ conditions[i]={
+ format=readushort(f),
+ axis=readushort(f),
+ minvalue=read2dot14(f),
+ maxvalue=read2dot14(f),
+ }
+ end
+ end
+ end
+ for i=1,nofrecords do
+ local record=records[i]
+ local offset=record.substitutions
+ if offset==0 then
+ record.substitutions={}
+ else
+ setposition(f,variationsoffset+offset)
+ local version=readulong(f)
+ local nofsubstitutions=readushort(f)
+ local substitutions={}
+ for i=1,nofsubstitutions do
+ substitutions[readushort(f)]=readulong(f)
+ end
+ for index,alternates in sortedhash(substitutions) do
+ if index==0 then
+ record.substitutions=false
+ else
+ local tableoffset=variationsoffset+offset+alternates
+ setposition(f,tableoffset)
+ local parameters=readulong(f)
+ local noflookups=readushort(f)
+ local lookups={}
+ for i=1,noflookups do
+ lookups[i]=readushort(f)
+ end
+ record.substitutions=lookups
+ end
+ end
+ end
+ end
+ setvariabledata(fontdata,"features",records)
+ end
+ local function readscripts(f,fontdata,what,lookuptypes,lookuphandlers,lookupstoo)
+ local tableoffset=gotodatatable(f,fontdata,what,true)
+ if tableoffset then
+ local version=readulong(f)
+ local scriptoffset=tableoffset+readushort(f)
+ local featureoffset=tableoffset+readushort(f)
+ local lookupoffset=tableoffset+readushort(f)
+ local variationsoffset=version>0x00010000 and (tableoffset+readulong(f)) or 0
+ if not scriptoffset then
+ return
+ end
+ local scripts=readscriplan(f,fontdata,scriptoffset)
+ local features=readfeatures(f,fontdata,featureoffset)
+ local scriptlangs,featurehash,featureorder=reorderfeatures(fontdata,scripts,features)
+ if fontdata.features then
+ fontdata.features[what]=scriptlangs
+ else
+ fontdata.features={ [what]=scriptlangs }
+ end
+ if not lookupstoo then
+ return
+ end
+ local lookups=readlookups(f,lookupoffset,lookuptypes,featurehash,featureorder)
+ if lookups then
+ resolvelookups(f,lookupoffset,fontdata,lookups,lookuptypes,lookuphandlers,what,tableoffset)
+ end
+ if variationsoffset>0 then
+ loadvariations(f,fontdata,variationsoffset,lookuptypes,featurehash,featureorder)
+ end
+ end
+ end
+ local function checkkerns(f,fontdata,specification)
+ local datatable=fontdata.tables.kern
+ if not datatable then
+ return
+ end
+ local features=fontdata.features
+ local gposfeatures=features and features.gpos
+ local name
+ if not gposfeatures or not gposfeatures.kern then
+ name="kern"
+ elseif specification.globalkerns then
+ name="globalkern"
+ else
+ report("ignoring global kern table using gpos kern feature")
+ return
+ end
+ setposition(f,datatable.offset)
+ local version=readushort(f)
+ local noftables=readushort(f)
+ if noftables>1 then
+ report("adding global kern table as gpos feature %a",name)
+ local kerns=setmetatableindex("table")
+ for i=1,noftables do
+ local version=readushort(f)
+ local length=readushort(f)
+ local coverage=readushort(f)
+ local format=bit32.rshift(coverage,8)
+ if format==0 then
+ local nofpairs=readushort(f)
+ local searchrange=readushort(f)
+ local entryselector=readushort(f)
+ local rangeshift=readushort(f)
+ for i=1,nofpairs do
+ kerns[readushort(f)][readushort(f)]=readfword(f)
+ end
+ elseif format==2 then
+ else
+ end
+ end
+ local feature={ dflt={ dflt=true } }
+ if not features then
+ fontdata.features={ gpos={ [name]=feature } }
+ elseif not gposfeatures then
+ fontdata.features.gpos={ [name]=feature }
+ else
+ gposfeatures[name]=feature
+ end
+ local sequences=fontdata.sequences
+ if not sequences then
+ sequences={}
+ fontdata.sequences=sequences
+ end
+ local nofsequences=#sequences+1
+ sequences[nofsequences]={
+ index=nofsequences,
+ name=name,
+ steps={
+ {
+ coverage=kerns,
+ format="kern",
+ },
+ },
+ nofsteps=1,
+ type="gpos_pair",
+ flags={ false,false,false,false },
+ order={ name },
+ features={ [name]=feature },
+ }
+ else
+ report("ignoring empty kern table of feature %a",name)
+ end
+ end
+ function readers.gsub(f,fontdata,specification)
+ if specification.details then
+ readscripts(f,fontdata,"gsub",gsubtypes,gsubhandlers,specification.lookups)
+ end
+ end
+ function readers.gpos(f,fontdata,specification)
+ if specification.details then
+ readscripts(f,fontdata,"gpos",gpostypes,gposhandlers,specification.lookups)
+ if specification.lookups then
+ checkkerns(f,fontdata,specification)
+ end
+ end
+ end
+end
+function readers.gdef(f,fontdata,specification)
+ if not specification.glyphs then
+ return
+ end
+ local datatable=fontdata.tables.gdef
+ if datatable then
+ local tableoffset=datatable.offset
+ setposition(f,tableoffset)
+ local version=readulong(f)
+ local classoffset=readushort(f)
+ local attachmentoffset=readushort(f)
+ local ligaturecarets=readushort(f)
+ local markclassoffset=readushort(f)
+ local marksetsoffset=version>=0x00010002 and readushort(f) or 0
+ local varsetsoffset=version>=0x00010003 and readulong(f) or 0
+ local glyphs=fontdata.glyphs
+ local marks={}
+ local markclasses=setmetatableindex("table")
+ local marksets=setmetatableindex("table")
+ fontdata.marks=marks
+ fontdata.markclasses=markclasses
+ fontdata.marksets=marksets
+ if classoffset~=0 then
+ setposition(f,tableoffset+classoffset)
+ local classformat=readushort(f)
+ if classformat==1 then
+ local firstindex=readushort(f)
+ local lastindex=firstindex+readushort(f)-1
+ for index=firstindex,lastindex do
+ local class=classes[readushort(f)]
+ if class=="mark" then
+ marks[index]=true
+ end
+ glyphs[index].class=class
+ end
+ elseif classformat==2 then
+ local nofranges=readushort(f)
+ for i=1,nofranges do
+ local firstindex=readushort(f)
+ local lastindex=readushort(f)
+ local class=classes[readushort(f)]
+ if class then
+ for index=firstindex,lastindex do
+ glyphs[index].class=class
+ if class=="mark" then
+ marks[index]=true
+ end
+ end
+ end
+ end
+ end
+ end
+ if markclassoffset~=0 then
+ setposition(f,tableoffset+markclassoffset)
+ local classformat=readushort(f)
+ if classformat==1 then
+ local firstindex=readushort(f)
+ local lastindex=firstindex+readushort(f)-1
+ for index=firstindex,lastindex do
+ markclasses[readushort(f)][index]=true
+ end
+ elseif classformat==2 then
+ local nofranges=readushort(f)
+ for i=1,nofranges do
+ local firstindex=readushort(f)
+ local lastindex=readushort(f)
+ local class=markclasses[readushort(f)]
+ for index=firstindex,lastindex do
+ class[index]=true
+ end
+ end
+ end
+ end
+ if marksetsoffset~=0 then
+ marksetsoffset=tableoffset+marksetsoffset
+ setposition(f,marksetsoffset)
+ local format=readushort(f)
+ if format==1 then
+ local nofsets=readushort(f)
+ local sets={}
+ for i=1,nofsets do
+ sets[i]=readulong(f)
+ end
+ for i=1,nofsets do
+ local offset=sets[i]
+ if offset~=0 then
+ marksets[i]=readcoverage(f,marksetsoffset+offset)
+ end
+ end
+ end
+ end
+ local factors=specification.factors
+ if (specification.variable or factors) and varsetsoffset~=0 then
+ local regions,deltas=readvariationdata(f,tableoffset+varsetsoffset,factors)
+ if factors then
+ fontdata.temporary.getdelta=function(outer,inner)
+ local delta=deltas[outer+1]
+ if delta then
+ local d=delta.deltas[inner+1]
+ if d then
+ local scales=delta.scales
+ local dd=0
+ for i=1,#scales do
+ local di=d[i]
+ if di then
+ dd=dd+scales[i]*di
+ else
+ break
+ end
+ end
+ return round(dd)
+ end
+ end
+ return 0
+ end
+ end
+ end
+ end
+end
+local function readmathvalue(f)
+ local v=readshort(f)
+ skipshort(f,1)
+ return v
+end
+local function readmathconstants(f,fontdata,offset)
+ setposition(f,offset)
+ fontdata.mathconstants={
+ ScriptPercentScaleDown=readshort(f),
+ ScriptScriptPercentScaleDown=readshort(f),
+ DelimitedSubFormulaMinHeight=readushort(f),
+ DisplayOperatorMinHeight=readushort(f),
+ MathLeading=readmathvalue(f),
+ AxisHeight=readmathvalue(f),
+ AccentBaseHeight=readmathvalue(f),
+ FlattenedAccentBaseHeight=readmathvalue(f),
+ SubscriptShiftDown=readmathvalue(f),
+ SubscriptTopMax=readmathvalue(f),
+ SubscriptBaselineDropMin=readmathvalue(f),
+ SuperscriptShiftUp=readmathvalue(f),
+ SuperscriptShiftUpCramped=readmathvalue(f),
+ SuperscriptBottomMin=readmathvalue(f),
+ SuperscriptBaselineDropMax=readmathvalue(f),
+ SubSuperscriptGapMin=readmathvalue(f),
+ SuperscriptBottomMaxWithSubscript=readmathvalue(f),
+ SpaceAfterScript=readmathvalue(f),
+ UpperLimitGapMin=readmathvalue(f),
+ UpperLimitBaselineRiseMin=readmathvalue(f),
+ LowerLimitGapMin=readmathvalue(f),
+ LowerLimitBaselineDropMin=readmathvalue(f),
+ StackTopShiftUp=readmathvalue(f),
+ StackTopDisplayStyleShiftUp=readmathvalue(f),
+ StackBottomShiftDown=readmathvalue(f),
+ StackBottomDisplayStyleShiftDown=readmathvalue(f),
+ StackGapMin=readmathvalue(f),
+ StackDisplayStyleGapMin=readmathvalue(f),
+ StretchStackTopShiftUp=readmathvalue(f),
+ StretchStackBottomShiftDown=readmathvalue(f),
+ StretchStackGapAboveMin=readmathvalue(f),
+ StretchStackGapBelowMin=readmathvalue(f),
+ FractionNumeratorShiftUp=readmathvalue(f),
+ FractionNumeratorDisplayStyleShiftUp=readmathvalue(f),
+ FractionDenominatorShiftDown=readmathvalue(f),
+ FractionDenominatorDisplayStyleShiftDown=readmathvalue(f),
+ FractionNumeratorGapMin=readmathvalue(f),
+ FractionNumeratorDisplayStyleGapMin=readmathvalue(f),
+ FractionRuleThickness=readmathvalue(f),
+ FractionDenominatorGapMin=readmathvalue(f),
+ FractionDenominatorDisplayStyleGapMin=readmathvalue(f),
+ SkewedFractionHorizontalGap=readmathvalue(f),
+ SkewedFractionVerticalGap=readmathvalue(f),
+ OverbarVerticalGap=readmathvalue(f),
+ OverbarRuleThickness=readmathvalue(f),
+ OverbarExtraAscender=readmathvalue(f),
+ UnderbarVerticalGap=readmathvalue(f),
+ UnderbarRuleThickness=readmathvalue(f),
+ UnderbarExtraDescender=readmathvalue(f),
+ RadicalVerticalGap=readmathvalue(f),
+ RadicalDisplayStyleVerticalGap=readmathvalue(f),
+ RadicalRuleThickness=readmathvalue(f),
+ RadicalExtraAscender=readmathvalue(f),
+ RadicalKernBeforeDegree=readmathvalue(f),
+ RadicalKernAfterDegree=readmathvalue(f),
+ RadicalDegreeBottomRaisePercent=readshort(f),
+ }
+end
+local function readmathglyphinfo(f,fontdata,offset)
+ setposition(f,offset)
+ local italics=readushort(f)
+ local accents=readushort(f)
+ local extensions=readushort(f)
+ local kerns=readushort(f)
+ local glyphs=fontdata.glyphs
+ if italics~=0 then
+ setposition(f,offset+italics)
+ local coverage=readushort(f)
+ local nofglyphs=readushort(f)
+ coverage=readcoverage(f,offset+italics+coverage,true)
+ setposition(f,offset+italics+4)
+ for i=1,nofglyphs do
+ local italic=readmathvalue(f)
+ if italic~=0 then
+ local glyph=glyphs[coverage[i]]
+ local math=glyph.math
+ if not math then
+ glyph.math={ italic=italic }
+ else
+ math.italic=italic
+ end
+ end
+ end
+ fontdata.hasitalics=true
+ end
+ if accents~=0 then
+ setposition(f,offset+accents)
+ local coverage=readushort(f)
+ local nofglyphs=readushort(f)
+ coverage=readcoverage(f,offset+accents+coverage,true)
+ setposition(f,offset+accents+4)
+ for i=1,nofglyphs do
+ local accent=readmathvalue(f)
+ if accent~=0 then
+ local glyph=glyphs[coverage[i]]
+ local math=glyph.math
+ if not math then
+ glyph.math={ accent=accent }
+ else
+ math.accent=accent
+ end
+ end
+ end
+ end
+ if extensions~=0 then
+ setposition(f,offset+extensions)
+ end
+ if kerns~=0 then
+ local kernoffset=offset+kerns
+ setposition(f,kernoffset)
+ local coverage=readushort(f)
+ local nofglyphs=readushort(f)
+ if nofglyphs>0 then
+ local function get(offset)
+ setposition(f,kernoffset+offset)
+ local n=readushort(f)
+ if n==0 then
+ local k=readmathvalue(f)
+ if k==0 then
+ else
+ return { { kern=k } }
+ end
+ else
+ local l={}
+ for i=1,n do
+ l[i]={ height=readmathvalue(f) }
+ end
+ for i=1,n do
+ l[i].kern=readmathvalue(f)
+ end
+ l[n+1]={ kern=readmathvalue(f) }
+ return l
+ end
+ end
+ local kernsets={}
+ for i=1,nofglyphs do
+ local topright=readushort(f)
+ local topleft=readushort(f)
+ local bottomright=readushort(f)
+ local bottomleft=readushort(f)
+ kernsets[i]={
+ topright=topright~=0 and topright or nil,
+ topleft=topleft~=0 and topleft or nil,
+ bottomright=bottomright~=0 and bottomright or nil,
+ bottomleft=bottomleft~=0 and bottomleft or nil,
+ }
+ end
+ coverage=readcoverage(f,kernoffset+coverage,true)
+ for i=1,nofglyphs do
+ local kernset=kernsets[i]
+ if next(kernset) then
+ local k=kernset.topright if k then kernset.topright=get(k) end
+ local k=kernset.topleft if k then kernset.topleft=get(k) end
+ local k=kernset.bottomright if k then kernset.bottomright=get(k) end
+ local k=kernset.bottomleft if k then kernset.bottomleft=get(k) end
+ if next(kernset) then
+ local glyph=glyphs[coverage[i]]
+ local math=glyph.math
+ if math then
+ math.kerns=kernset
+ else
+ glyph.math={ kerns=kernset }
+ end
+ end
+ end
+ end
+ end
+ end
+end
+local function readmathvariants(f,fontdata,offset)
+ setposition(f,offset)
+ local glyphs=fontdata.glyphs
+ local minoverlap=readushort(f)
+ local vcoverage=readushort(f)
+ local hcoverage=readushort(f)
+ local vnofglyphs=readushort(f)
+ local hnofglyphs=readushort(f)
+ local vconstruction={}
+ local hconstruction={}
+ for i=1,vnofglyphs do
+ vconstruction[i]=readushort(f)
+ end
+ for i=1,hnofglyphs do
+ hconstruction[i]=readushort(f)
+ end
+ fontdata.mathconstants.MinConnectorOverlap=minoverlap
+ local function get(offset,coverage,nofglyphs,construction,kvariants,kparts,kitalic)
+ if coverage~=0 and nofglyphs>0 then
+ local coverage=readcoverage(f,offset+coverage,true)
+ for i=1,nofglyphs do
+ local c=construction[i]
+ if c~=0 then
+ local index=coverage[i]
+ local glyph=glyphs[index]
+ local math=glyph.math
+ setposition(f,offset+c)
+ local assembly=readushort(f)
+ local nofvariants=readushort(f)
+ if nofvariants>0 then
+ local variants,v=nil,0
+ for i=1,nofvariants do
+ local variant=readushort(f)
+ if variant==index then
+ elseif variants then
+ v=v+1
+ variants[v]=variant
+ else
+ v=1
+ variants={ variant }
+ end
+ skipshort(f)
+ end
+ if not variants then
+ elseif not math then
+ math={ [kvariants]=variants }
+ glyph.math=math
+ else
+ math[kvariants]=variants
+ end
+ end
+ if assembly~=0 then
+ setposition(f,offset+c+assembly)
+ local italic=readmathvalue(f)
+ local nofparts=readushort(f)
+ local parts={}
+ for i=1,nofparts do
+ local p={
+ glyph=readushort(f),
+ start=readushort(f),
+ ["end"]=readushort(f),
+ advance=readushort(f),
+ }
+ local flags=readushort(f)
+ if bittest(flags,0x0001) then
+ p.extender=1
+ end
+ parts[i]=p
+ end
+ if not math then
+ math={
+ [kparts]=parts
+ }
+ glyph.math=math
+ else
+ math[kparts]=parts
+ end
+ if italic and italic~=0 then
+ math[kitalic]=italic
+ end
+ end
+ end
+ end
+ end
+ end
+ get(offset,vcoverage,vnofglyphs,vconstruction,"vvariants","vparts","vitalic")
+ get(offset,hcoverage,hnofglyphs,hconstruction,"hvariants","hparts","hitalic")
+end
+function readers.math(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"math",specification.glyphs)
+ if tableoffset then
+ local version=readulong(f)
+ local constants=readushort(f)
+ local glyphinfo=readushort(f)
+ local variants=readushort(f)
+ if constants==0 then
+ report("the math table of %a has no constants",fontdata.filename)
+ else
+ readmathconstants(f,fontdata,tableoffset+constants)
+ end
+ if glyphinfo~=0 then
+ readmathglyphinfo(f,fontdata,tableoffset+glyphinfo)
+ end
+ if variants~=0 then
+ readmathvariants(f,fontdata,tableoffset+variants)
+ end
+ end
+end
+function readers.colr(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"colr",specification.glyphs)
+ if tableoffset then
+ local version=readushort(f)
+ if version~=0 then
+ report("table version %a of %a is not supported (yet), maybe font %s is bad",version,"colr",fontdata.filename)
+ return
+ end
+ if not fontdata.tables.cpal then
+ report("color table %a in font %a has no mandate %a table","colr",fontdata.filename,"cpal")
+ fontdata.colorpalettes={}
+ end
+ local glyphs=fontdata.glyphs
+ local nofglyphs=readushort(f)
+ local baseoffset=readulong(f)
+ local layeroffset=readulong(f)
+ local noflayers=readushort(f)
+ local layerrecords={}
+ local maxclass=0
+ setposition(f,tableoffset+layeroffset)
+ for i=1,noflayers do
+ local slot=readushort(f)
+ local class=readushort(f)
+ if class<0xFFFF then
+ class=class+1
+ if class>maxclass then
+ maxclass=class
+ end
+ end
+ layerrecords[i]={
+ slot=slot,
+ class=class,
+ }
+ end
+ fontdata.maxcolorclass=maxclass
+ setposition(f,tableoffset+baseoffset)
+ for i=0,nofglyphs-1 do
+ local glyphindex=readushort(f)
+ local firstlayer=readushort(f)
+ local noflayers=readushort(f)
+ local t={}
+ for i=1,noflayers do
+ t[i]=layerrecords[firstlayer+i]
+ end
+ glyphs[glyphindex].colors=t
+ end
+ end
+ fontdata.hascolor=true
+end
+function readers.cpal(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"cpal",specification.glyphs)
+ if tableoffset then
+ local version=readushort(f)
+ local nofpaletteentries=readushort(f)
+ local nofpalettes=readushort(f)
+ local nofcolorrecords=readushort(f)
+ local firstcoloroffset=readulong(f)
+ local colorrecords={}
+ local palettes={}
+ for i=1,nofpalettes do
+ palettes[i]=readushort(f)
+ end
+ if version==1 then
+ local palettettypesoffset=readulong(f)
+ local palettelabelsoffset=readulong(f)
+ local paletteentryoffset=readulong(f)
+ end
+ setposition(f,tableoffset+firstcoloroffset)
+ for i=1,nofcolorrecords do
+ local b,g,r,a=readbytes(f,4)
+ colorrecords[i]={
+ r,g,b,a~=255 and a or nil,
+ }
+ end
+ for i=1,nofpalettes do
+ local p={}
+ local o=palettes[i]
+ for j=1,nofpaletteentries do
+ p[j]=colorrecords[o+j]
+ end
+ palettes[i]=p
+ end
+ fontdata.colorpalettes=palettes
+ end
+end
+function readers.svg(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"svg",specification.glyphs)
+ if tableoffset then
+ local version=readushort(f)
+ local glyphs=fontdata.glyphs
+ local indexoffset=tableoffset+readulong(f)
+ local reserved=readulong(f)
+ setposition(f,indexoffset)
+ local nofentries=readushort(f)
+ local entries={}
+ for i=1,nofentries do
+ entries[i]={
+ first=readushort(f),
+ last=readushort(f),
+ offset=indexoffset+readulong(f),
+ length=readulong(f),
+ }
+ end
+ for i=1,nofentries do
+ local entry=entries[i]
+ setposition(f,entry.offset)
+ entries[i]={
+ first=entry.first,
+ last=entry.last,
+ data=readstring(f,entry.length)
+ }
+ end
+ fontdata.svgshapes=entries
+ end
+ fontdata.hascolor=true
+end
+function readers.sbix(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"sbix",specification.glyphs)
+ if tableoffset then
+ local version=readushort(f)
+ local flags=readushort(f)
+ local nofstrikes=readulong(f)
+ local strikes={}
+ local nofglyphs=fontdata.nofglyphs
+ for i=1,nofstrikes do
+ strikes[i]=readulong(f)
+ end
+ local shapes={}
+ local done=0
+ for i=1,nofstrikes do
+ local strikeoffset=strikes[i]+tableoffset
+ setposition(f,strikeoffset)
+ strikes[i]={
+ ppem=readushort(f),
+ ppi=readushort(f),
+ offset=strikeoffset
+ }
+ end
+ sort(strikes,function(a,b)
+ if b.ppem==a.ppem then
+ return b.ppi<a.ppi
+ else
+ return b.ppem<a.ppem
+ end
+ end)
+ local glyphs={}
+ for i=1,nofstrikes do
+ local strike=strikes[i]
+ local strikeppem=strike.ppem
+ local strikeppi=strike.ppi
+ local strikeoffset=strike.offset
+ setposition(f,strikeoffset)
+ for i=0,nofglyphs do
+ glyphs[i]=readulong(f)
+ end
+ local glyphoffset=glyphs[0]
+ for i=0,nofglyphs-1 do
+ local nextoffset=glyphs[i+1]
+ if not shapes[i] then
+ local datasize=nextoffset-glyphoffset
+ if datasize>0 then
+ setposition(f,strikeoffset+glyphoffset)
+ shapes[i]={
+ x=readshort(f),
+ y=readshort(f),
+ tag=readtag(f),
+ data=readstring(f,datasize-8),
+ ppem=strikeppem,
+ ppi=strikeppi,
+ }
+ done=done+1
+ if done==nofglyphs then
+ break
+ end
+ end
+ end
+ glyphoffset=nextoffset
+ end
+ end
+ fontdata.sbixshapes=shapes
+ end
+end
+function readers.stat(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"stat",true)
+ if tableoffset then
+ local extras=fontdata.extras
+ local version=readulong(f)
+ local axissize=readushort(f)
+ local nofaxis=readushort(f)
+ local axisoffset=readulong(f)
+ local nofvalues=readushort(f)
+ local valuesoffset=readulong(f)
+ local fallbackname=extras[readushort(f)]
+ local axis={}
+ local values={}
+ setposition(f,tableoffset+axisoffset)
+ for i=1,nofaxis do
+ axis[i]={
+ tag=readtag(f),
+ name=lower(extras[readushort(f)]),
+ ordering=readushort(f),
+ variants={}
+ }
+ end
+ setposition(f,tableoffset+valuesoffset)
+ for i=1,nofvalues do
+ values[i]=readushort(f)
+ end
+ for i=1,nofvalues do
+ setposition(f,tableoffset+valuesoffset+values[i])
+ local format=readushort(f)
+ local index=readushort(f)+1
+ local flags=readushort(f)
+ local name=lower(extras[readushort(f)])
+ local value=readfixed(f)
+ local variant
+ if format==1 then
+ variant={
+ flags=flags,
+ name=name,
+ value=value,
+ }
+ elseif format==2 then
+ variant={
+ flags=flags,
+ name=name,
+ value=value,
+ minimum=readfixed(f),
+ maximum=readfixed(f),
+ }
+ elseif format==3 then
+ variant={
+ flags=flags,
+ name=name,
+ value=value,
+ link=readfixed(f),
+ }
+ end
+ insert(axis[index].variants,variant)
+ end
+ sort(axis,function(a,b)
+ return a.ordering<b.ordering
+ end)
+ for i=1,#axis do
+ local a=axis[i]
+ sort(a.variants,function(a,b)
+ return a.name<b.name
+ end)
+ a.ordering=nil
+ end
+ setvariabledata(fontdata,"designaxis",axis)
+ setvariabledata(fontdata,"fallbackname",fallbackname)
+ end
+end
+function readers.avar(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"avar",true)
+ if tableoffset then
+ local function collect()
+ local nofvalues=readushort(f)
+ local values={}
+ local lastfrom=false
+ local lastto=false
+ for i=1,nofvalues do
+ local f,t=read2dot14(f),read2dot14(f)
+ if lastfrom and f<=lastfrom then
+ elseif lastto and t>=lastto then
+ else
+ values[#values+1]={ f,t }
+ lastfrom,lastto=f,t
+ end
+ end
+ nofvalues=#values
+ if nofvalues>2 then
+ local some=values[1]
+ if some[1]==-1 and some[2]==-1 then
+ some=values[nofvalues]
+ if some[1]==1 and some[2]==1 then
+ for i=2,nofvalues-1 do
+ some=values[i]
+ if some[1]==0 and some[2]==0 then
+ return values
+ end
+ end
+ end
+ end
+ end
+ return false
+ end
+ local majorversion=readushort(f)
+ local minorversion=readushort(f)
+ local reserved=readushort(f)
+ local nofaxis=readushort(f)
+ local segments={}
+ for i=1,nofaxis do
+ segments[i]=collect()
+ end
+ setvariabledata(fontdata,"segments",segments)
+ end
+end
+function readers.fvar(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"fvar",true)
+ if tableoffset then
+ local version=readulong(f)
+ local offsettoaxis=tableoffset+readushort(f)
+ local reserved=skipshort(f)
+ local nofaxis=readushort(f)
+ local sizeofaxis=readushort(f)
+ local nofinstances=readushort(f)
+ local sizeofinstances=readushort(f)
+ local extras=fontdata.extras
+ local axis={}
+ local instances={}
+ setposition(f,offsettoaxis)
+ for i=1,nofaxis do
+ axis[i]={
+ tag=readtag(f),
+ minimum=readfixed(f),
+ default=readfixed(f),
+ maximum=readfixed(f),
+ flags=readushort(f),
+ name=lower(extras[readushort(f)] or "bad name"),
+ }
+ local n=sizeofaxis-20
+ if n>0 then
+ skipbytes(f,n)
+ elseif n<0 then
+ end
+ end
+ local nofbytes=2+2+2+nofaxis*4
+ local readpsname=nofbytes<=sizeofinstances
+ local skippable=sizeofinstances-nofbytes
+ for i=1,nofinstances do
+ local subfamid=readushort(f)
+ local flags=readushort(f)
+ local values={}
+ for i=1,nofaxis do
+ values[i]={
+ axis=axis[i].tag,
+ value=readfixed(f),
+ }
+ end
+ local psnameid=readpsname and readushort(f) or 0xFFFF
+ if subfamid==2 or subfamid==17 then
+ elseif subfamid==0xFFFF then
+ subfamid=nil
+ elseif subfamid<=256 or subfamid>=32768 then
+ subfamid=nil
+ end
+ if psnameid==6 then
+ elseif psnameid==0xFFFF then
+ psnameid=nil
+ elseif psnameid<=256 or psnameid>=32768 then
+ psnameid=nil
+ end
+ instances[i]={
+ subfamily=extras[subfamid],
+ psname=psnameid and extras[psnameid] or nil,
+ values=values,
+ }
+ if skippable>0 then
+ skipbytes(f,skippable)
+ end
+ end
+ setvariabledata(fontdata,"axis",axis)
+ setvariabledata(fontdata,"instances",instances)
+ end
+end
+function readers.hvar(f,fontdata,specification)
+ local factors=specification.factors
+ if not factors then
+ return
+ end
+ local tableoffset=gotodatatable(f,fontdata,"hvar",specification.variable)
+ if not tableoffset then
+ return
+ end
+ local version=readulong(f)
+ local variationoffset=tableoffset+readulong(f)
+ local advanceoffset=tableoffset+readulong(f)
+ local lsboffset=tableoffset+readulong(f)
+ local rsboffset=tableoffset+readulong(f)
+ local regions={}
+ local variations={}
+ local innerindex={}
+ local outerindex={}
+ if variationoffset>0 then
+ regions,deltas=readvariationdata(f,variationoffset,factors)
+ end
+ if not regions then
+ return
+ end
+ if advanceoffset>0 then
+ setposition(f,advanceoffset)
+ local format=readushort(f)
+ local mapcount=readushort(f)
+ local entrysize=rshift(band(format,0x0030),4)+1
+ local nofinnerbits=band(format,0x000F)+1
+ local innermask=lshift(1,nofinnerbits)-1
+ local readcardinal=read_cardinal[entrysize]
+ for i=0,mapcount-1 do
+ local mapdata=readcardinal(f)
+ outerindex[i]=rshift(mapdata,nofinnerbits)
+ innerindex[i]=band(mapdata,innermask)
+ end
+ setvariabledata(fontdata,"hvarwidths",true)
+ local glyphs=fontdata.glyphs
+ for i=0,fontdata.nofglyphs-1 do
+ local glyph=glyphs[i]
+ local width=glyph.width
+ if width then
+ local outer=outerindex[i] or 0
+ local inner=innerindex[i] or i
+ if outer and inner then
+ local delta=deltas[outer+1]
+ if delta then
+ local d=delta.deltas[inner+1]
+ if d then
+ local scales=delta.scales
+ local deltaw=0
+ for i=1,#scales do
+ local di=d[i]
+ if di then
+ deltaw=deltaw+scales[i]*di
+ else
+ break
+ end
+ end
+ glyph.width=width+round(deltaw)
+ end
+ end
+ end
+ end
+ end
+ end
+end
+function readers.vvar(f,fontdata,specification)
+ if not specification.variable then
+ return
+ end
+end
+function readers.mvar(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"mvar",specification.variable)
+ if tableoffset then
+ local version=readulong(f)
+ local reserved=skipshort(f,1)
+ local recordsize=readushort(f)
+ local nofrecords=readushort(f)
+ local offsettostore=tableoffset+readushort(f)
+ local dimensions={}
+ local factors=specification.factors
+ if factors then
+ local regions,deltas=readvariationdata(f,offsettostore,factors)
+ for i=1,nofrecords do
+ local tag=readtag(f)
+ local var=variabletags[tag]
+ if var then
+ local outer=readushort(f)
+ local inner=readushort(f)
+ local delta=deltas[outer+1]
+ if delta then
+ local d=delta.deltas[inner+1]
+ if d then
+ local scales=delta.scales
+ local dd=0
+ for i=1,#scales do
+ dd=dd+scales[i]*d[i]
+ end
+ var(fontdata,round(dd))
+ end
+ end
+ else
+ skipshort(f,2)
+ end
+ if recordsize>8 then
+ skipbytes(recordsize-8)
+ end
+ end
+ end
+ end
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-oup']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local next,type=next,type
+local P,R,S=lpeg.P,lpeg.R,lpeg.S
+local lpegmatch=lpeg.match
+local insert,remove,copy,unpack=table.insert,table.remove,table.copy,table.unpack
+local formatters=string.formatters
+local sortedkeys=table.sortedkeys
+local sortedhash=table.sortedhash
+local tohash=table.tohash
+local setmetatableindex=table.setmetatableindex
+local report=logs.reporter("otf reader")
+local trace_markwidth=false trackers.register("otf.markwidth",function(v) trace_markwidth=v end)
+local readers=fonts.handlers.otf.readers
+local privateoffset=fonts.constructors and fonts.constructors.privateoffset or 0xF0000
+local f_private=formatters["P%05X"]
+local f_unicode=formatters["U%05X"]
+local f_index=formatters["I%05X"]
+local f_character_y=formatters["%C"]
+local f_character_n=formatters["[ %C ]"]
+local check_duplicates=true
+local check_soft_hyphen=true
+directives.register("otf.checksofthyphen",function(v)
+ check_soft_hyphen=v
+end)
+local function replaced(list,index,replacement)
+ if type(list)=="number" then
+ return replacement
+ elseif type(replacement)=="table" then
+ local t={}
+ local n=index-1
+ for i=1,n do
+ t[i]=list[i]
+ end
+ for i=1,#replacement do
+ n=n+1
+ t[n]=replacement[i]
+ end
+ for i=index+1,#list do
+ n=n+1
+ t[n]=list[i]
+ end
+ else
+ list[index]=replacement
+ return list
+ end
+end
+local function unifyresources(fontdata,indices)
+ local descriptions=fontdata.descriptions
+ local resources=fontdata.resources
+ if not descriptions or not resources then
+ return
+ end
+ local variants=fontdata.resources.variants
+ if variants then
+ for selector,unicodes in next,variants do
+ for unicode,index in next,unicodes do
+ unicodes[unicode]=indices[index]
+ end
+ end
+ end
+ local function remark(marks)
+ if marks then
+ local newmarks={}
+ for k,v in next,marks do
+ local u=indices[k]
+ if u then
+ newmarks[u]=v
+ else
+ report("discarding mark %i",k)
+ end
+ end
+ return newmarks
+ end
+ end
+ local marks=resources.marks
+ if marks then
+ resources.marks=remark(marks)
+ end
+ local markclasses=resources.markclasses
+ if markclasses then
+ for class,marks in next,markclasses do
+ markclasses[class]=remark(marks)
+ end
+ end
+ local marksets=resources.marksets
+ if marksets then
+ for class,marks in next,marksets do
+ marksets[class]=remark(marks)
+ end
+ end
+ local done={}
+ local duplicates=check_duplicates and resources.duplicates
+ if duplicates and not next(duplicates) then
+ duplicates=false
+ end
+ local function recover(cover)
+ for i=1,#cover do
+ local c=cover[i]
+ if not done[c] then
+ local t={}
+ for k,v in next,c do
+ t[indices[k]]=v
+ end
+ cover[i]=t
+ done[c]=d
+ end
+ end
+ end
+ local function recursed(c)
+ local t={}
+ for g,d in next,c do
+ if type(d)=="table" then
+ t[indices[g]]=recursed(d)
+ else
+ t[g]=indices[d]
+ end
+ end
+ return t
+ end
+ local function unifythem(sequences)
+ if not sequences then
+ return
+ end
+ for i=1,#sequences do
+ local sequence=sequences[i]
+ local kind=sequence.type
+ local steps=sequence.steps
+ local features=sequence.features
+ if steps then
+ for i=1,#steps do
+ local step=steps[i]
+ if kind=="gsub_single" then
+ local c=step.coverage
+ if c then
+ local t1=done[c]
+ if not t1 then
+ t1={}
+ if duplicates then
+ for g1,d1 in next,c do
+ local ug1=indices[g1]
+ local ud1=indices[d1]
+ t1[ug1]=ud1
+ local dg1=duplicates[ug1]
+ if dg1 then
+ for u in next,dg1 do
+ t1[u]=ud1
+ end
+ end
+ end
+ else
+ for g1,d1 in next,c do
+ t1[indices[g1]]=indices[d1]
+ end
+ end
+ done[c]=t1
+ end
+ step.coverage=t1
+ end
+ elseif kind=="gpos_pair" then
+ local c=step.coverage
+ if c then
+ local t1=done[c]
+ if not t1 then
+ t1={}
+ for g1,d1 in next,c do
+ local t2=done[d1]
+ if not t2 then
+ t2={}
+ for g2,d2 in next,d1 do
+ t2[indices[g2]]=d2
+ end
+ done[d1]=t2
+ end
+ t1[indices[g1]]=t2
+ end
+ done[c]=t1
+ end
+ step.coverage=t1
+ end
+ elseif kind=="gsub_ligature" then
+ local c=step.coverage
+ if c then
+ step.coverage=recursed(c)
+ end
+ elseif kind=="gsub_alternate" or kind=="gsub_multiple" then
+ local c=step.coverage
+ if c then
+ local t1=done[c]
+ if not t1 then
+ t1={}
+ if duplicates then
+ for g1,d1 in next,c do
+ for i=1,#d1 do
+ d1[i]=indices[d1[i]]
+ end
+ local ug1=indices[g1]
+ t1[ug1]=d1
+ local dg1=duplicates[ug1]
+ if dg1 then
+ for u in next,dg1 do
+ t1[u]=copy(d1)
+ end
+ end
+ end
+ else
+ for g1,d1 in next,c do
+ for i=1,#d1 do
+ d1[i]=indices[d1[i]]
+ end
+ t1[indices[g1]]=d1
+ end
+ end
+ done[c]=t1
+ end
+ step.coverage=t1
+ end
+ elseif kind=="gpos_mark2base" or kind=="gpos_mark2mark" or kind=="gpos_mark2ligature" then
+ local c=step.coverage
+ if c then
+ local t1=done[c]
+ if not t1 then
+ t1={}
+ for g1,d1 in next,c do
+ t1[indices[g1]]=d1
+ end
+ done[c]=t1
+ end
+ step.coverage=t1
+ end
+ local c=step.baseclasses
+ if c then
+ local t1=done[c]
+ if not t1 then
+ for g1,d1 in next,c do
+ local t2=done[d1]
+ if not t2 then
+ t2={}
+ for g2,d2 in next,d1 do
+ t2[indices[g2]]=d2
+ end
+ done[d1]=t2
+ end
+ c[g1]=t2
+ end
+ done[c]=c
+ end
+ end
+ elseif kind=="gpos_single" then
+ local c=step.coverage
+ if c then
+ local t1=done[c]
+ if not t1 then
+ t1={}
+ if duplicates then
+ for g1,d1 in next,c do
+ local ug1=indices[g1]
+ t1[ug1]=d1
+ local dg1=duplicates[ug1]
+ if dg1 then
+ for u in next,dg1 do
+ t1[u]=d1
+ end
+ end
+ end
+ else
+ for g1,d1 in next,c do
+ t1[indices[g1]]=d1
+ end
+ end
+ done[c]=t1
+ end
+ step.coverage=t1
+ end
+ elseif kind=="gpos_cursive" then
+ local c=step.coverage
+ if c then
+ local t1=done[c]
+ if not t1 then
+ t1={}
+ if duplicates then
+ for g1,d1 in next,c do
+ local ug1=indices[g1]
+ t1[ug1]=d1
+ local dg1=duplicates[ug1]
+ if dg1 then
+ for u in next,dg1 do
+ t1[u]=copy(d1)
+ end
+ end
+ end
+ else
+ for g1,d1 in next,c do
+ t1[indices[g1]]=d1
+ end
+ end
+ done[c]=t1
+ end
+ step.coverage=t1
+ end
+ end
+ local rules=step.rules
+ if rules then
+ for i=1,#rules do
+ local rule=rules[i]
+ local before=rule.before if before then recover(before) end
+ local after=rule.after if after then recover(after) end
+ local current=rule.current if current then recover(current) end
+ local replacements=rule.replacements
+ if replacements then
+ if not done[replacements] then
+ local r={}
+ for k,v in next,replacements do
+ r[indices[k]]=indices[v]
+ end
+ rule.replacements=r
+ done[replacements]=r
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ unifythem(resources.sequences)
+ unifythem(resources.sublookups)
+end
+local function copyduplicates(fontdata)
+ if check_duplicates then
+ local descriptions=fontdata.descriptions
+ local resources=fontdata.resources
+ local duplicates=resources.duplicates
+ if check_soft_hyphen then
+ local ds=descriptions[0xAD]
+ if not ds or ds.width==0 then
+ if ds then
+ descriptions[0xAD]=nil
+ report("patching soft hyphen")
+ else
+ report("adding soft hyphen")
+ end
+ if not duplicates then
+ duplicates={}
+ resources.duplicates=duplicates
+ end
+ local dh=duplicates[0x2D]
+ if dh then
+ dh[#dh+1]={ [0xAD]=true }
+ else
+ duplicates[0x2D]={ [0xAD]=true }
+ end
+ end
+ end
+ if duplicates then
+ for u,d in next,duplicates do
+ local du=descriptions[u]
+ if du then
+ local t={ f_character_y(u),"@",f_index(du.index),"->" }
+ local n=0
+ local m=25
+ for u in next,d do
+ if descriptions[u] then
+ if n<m then
+ t[n+4]=f_character_n(u)
+ end
+ else
+ local c=copy(du)
+ c.unicode=u
+ descriptions[u]=c
+ if n<m then
+ t[n+4]=f_character_y(u)
+ end
+ end
+ n=n+1
+ end
+ if n<=m then
+ report("duplicates: %i : % t",n,t)
+ else
+ report("duplicates: %i : % t ...",n,t)
+ end
+ else
+ end
+ end
+ end
+ end
+end
+local ignore={
+ ["notdef"]=true,
+ [".notdef"]=true,
+ ["null"]=true,
+ [".null"]=true,
+ ["nonmarkingreturn"]=true,
+}
+local function checklookups(fontdata,missing,nofmissing)
+ local descriptions=fontdata.descriptions
+ local resources=fontdata.resources
+ if missing and nofmissing and nofmissing<=0 then
+ return
+ end
+ local singles={}
+ local alternates={}
+ local ligatures={}
+ if not missing then
+ missing={}
+ nofmissing=0
+ for u,d in next,descriptions do
+ if not d.unicode then
+ nofmissing=nofmissing+1
+ missing[u]=true
+ end
+ end
+ end
+ local function collectthem(sequences)
+ if not sequences then
+ return
+ end
+ for i=1,#sequences do
+ local sequence=sequences[i]
+ local kind=sequence.type
+ local steps=sequence.steps
+ if steps then
+ for i=1,#steps do
+ local step=steps[i]
+ if kind=="gsub_single" then
+ local c=step.coverage
+ if c then
+ singles[#singles+1]=c
+ end
+ elseif kind=="gsub_alternate" then
+ local c=step.coverage
+ if c then
+ alternates[#alternates+1]=c
+ end
+ elseif kind=="gsub_ligature" then
+ local c=step.coverage
+ if c then
+ ligatures[#ligatures+1]=c
+ end
+ end
+ end
+ end
+ end
+ end
+ collectthem(resources.sequences)
+ collectthem(resources.sublookups)
+ local loops=0
+ while true do
+ loops=loops+1
+ local old=nofmissing
+ for i=1,#singles do
+ local c=singles[i]
+ for g1,g2 in next,c do
+ if missing[g1] then
+ local u2=descriptions[g2].unicode
+ if u2 then
+ missing[g1]=false
+ descriptions[g1].unicode=u2
+ nofmissing=nofmissing-1
+ end
+ end
+ if missing[g2] then
+ local u1=descriptions[g1].unicode
+ if u1 then
+ missing[g2]=false
+ descriptions[g2].unicode=u1
+ nofmissing=nofmissing-1
+ end
+ end
+ end
+ end
+ for i=1,#alternates do
+ local c=alternates[i]
+ for g1,d1 in next,c do
+ if missing[g1] then
+ for i=1,#d1 do
+ local g2=d1[i]
+ local u2=descriptions[g2].unicode
+ if u2 then
+ missing[g1]=false
+ descriptions[g1].unicode=u2
+ nofmissing=nofmissing-1
+ end
+ end
+ end
+ if not missing[g1] then
+ for i=1,#d1 do
+ local g2=d1[i]
+ if missing[g2] then
+ local u1=descriptions[g1].unicode
+ if u1 then
+ missing[g2]=false
+ descriptions[g2].unicode=u1
+ nofmissing=nofmissing-1
+ end
+ end
+ end
+ end
+ end
+ end
+ if nofmissing<=0 then
+ report("all done in %s loops",loops)
+ return
+ elseif old==nofmissing then
+ break
+ end
+ end
+ local t,n
+ local function recursed(c)
+ for g,d in next,c do
+ if g~="ligature" then
+ local u=descriptions[g].unicode
+ if u then
+ n=n+1
+ t[n]=u
+ recursed(d)
+ n=n-1
+ end
+ elseif missing[d] then
+ local l={}
+ local m=0
+ for i=1,n do
+ local u=t[i]
+ if type(u)=="table" then
+ for i=1,#u do
+ m=m+1
+ l[m]=u[i]
+ end
+ else
+ m=m+1
+ l[m]=u
+ end
+ end
+ missing[d]=false
+ descriptions[d].unicode=l
+ nofmissing=nofmissing-1
+ end
+ end
+ end
+ if nofmissing>0 then
+ t={}
+ n=0
+ local loops=0
+ while true do
+ loops=loops+1
+ local old=nofmissing
+ for i=1,#ligatures do
+ recursed(ligatures[i])
+ end
+ if nofmissing<=0 then
+ report("all done in %s loops",loops)
+ return
+ elseif old==nofmissing then
+ break
+ end
+ end
+ t=nil
+ n=0
+ end
+ if nofmissing>0 then
+ local done={}
+ for i,r in next,missing do
+ if r then
+ local data=descriptions[i]
+ local name=data and data.name or f_index(i)
+ if not ignore[name] then
+ done[name]=true
+ end
+ end
+ end
+ if next(done) then
+ report("not unicoded: % t",sortedkeys(done))
+ end
+ end
+end
+local function unifymissing(fontdata)
+ if not fonts.mappings then
+ require("font-map")
+ require("font-agl")
+ end
+ local unicodes={}
+ local resources=fontdata.resources
+ resources.unicodes=unicodes
+ for unicode,d in next,fontdata.descriptions do
+ if unicode<privateoffset then
+ local name=d.name
+ if name then
+ unicodes[name]=unicode
+ end
+ end
+ end
+ fonts.mappings.addtounicode(fontdata,fontdata.filename,checklookups)
+ resources.unicodes=nil
+end
+local function unifyglyphs(fontdata,usenames)
+ local private=fontdata.private or privateoffset
+ local glyphs=fontdata.glyphs
+ local indices={}
+ local descriptions={}
+ local names=usenames and {}
+ local resources=fontdata.resources
+ local zero=glyphs[0]
+ local zerocode=zero.unicode
+ if not zerocode then
+ zerocode=private
+ zero.unicode=zerocode
+ private=private+1
+ end
+ descriptions[zerocode]=zero
+ if names then
+ local name=glyphs[0].name or f_private(zerocode)
+ indices[0]=name
+ names[name]=zerocode
+ else
+ indices[0]=zerocode
+ end
+ for index=1,#glyphs do
+ local glyph=glyphs[index]
+ local unicode=glyph.unicode
+ if not unicode then
+ unicode=private
+ if names then
+ local name=glyph.name or f_private(unicode)
+ indices[index]=name
+ names[name]=unicode
+ else
+ indices[index]=unicode
+ end
+ private=private+1
+ elseif descriptions[unicode] then
+ report("assigning private unicode %U to glyph indexed %05X (%C)",private,index,unicode)
+ unicode=private
+ if names then
+ local name=glyph.name or f_private(unicode)
+ indices[index]=name
+ names[name]=unicode
+ else
+ indices[index]=unicode
+ end
+ private=private+1
+ else
+ if names then
+ local name=glyph.name or f_unicode(unicode)
+ indices[index]=name
+ names[name]=unicode
+ else
+ indices[index]=unicode
+ end
+ end
+ descriptions[unicode]=glyph
+ end
+ for index=1,#glyphs do
+ local math=glyphs[index].math
+ if math then
+ local list=math.vparts
+ if list then
+ for i=1,#list do local l=list[i] l.glyph=indices[l.glyph] end
+ end
+ local list=math.hparts
+ if list then
+ for i=1,#list do local l=list[i] l.glyph=indices[l.glyph] end
+ end
+ local list=math.vvariants
+ if list then
+ for i=1,#list do list[i]=indices[list[i]] end
+ end
+ local list=math.hvariants
+ if list then
+ for i=1,#list do list[i]=indices[list[i]] end
+ end
+ end
+ end
+ local colorpalettes=resources.colorpalettes
+ if colorpalettes then
+ for index=1,#glyphs do
+ local colors=glyphs[index].colors
+ if colors then
+ for i=1,#colors do
+ local c=colors[i]
+ c.slot=indices[c.slot]
+ end
+ end
+ end
+ end
+ fontdata.private=private
+ fontdata.glyphs=nil
+ fontdata.names=names
+ fontdata.descriptions=descriptions
+ fontdata.hashmethod=hashmethod
+ return indices,names
+end
+local p_bogusname=(
+ (P("uni")+P("UNI")+P("Uni")+P("U")+P("u"))*S("Xx")^0*R("09","AF")^1+(P("identity")+P("Identity")+P("IDENTITY"))*R("09","AF")^1+(P("index")+P("Index")+P("INDEX"))*R("09")^1
+)*P(-1)
+local function stripredundant(fontdata)
+ local descriptions=fontdata.descriptions
+ if descriptions then
+ local n=0
+ local c=0
+ for unicode,d in next,descriptions do
+ local name=d.name
+ if name and lpegmatch(p_bogusname,name) then
+ d.name=nil
+ n=n+1
+ end
+ if d.class=="base" then
+ d.class=nil
+ c=c+1
+ end
+ end
+ if n>0 then
+ report("%s bogus names removed (verbose unicode)",n)
+ end
+ if c>0 then
+ report("%s base class tags removed (default is base)",c)
+ end
+ end
+end
+function readers.getcomponents(fontdata)
+ local resources=fontdata.resources
+ if resources then
+ local sequences=resources.sequences
+ if sequences then
+ local collected={}
+ for i=1,#sequences do
+ local sequence=sequences[i]
+ if sequence.type=="gsub_ligature" then
+ local steps=sequence.steps
+ if steps then
+ local l={}
+ local function traverse(p,k,v)
+ if k=="ligature" then
+ collected[v]={ unpack(l) }
+ else
+ insert(l,k)
+ for k,vv in next,v do
+ traverse(p,k,vv)
+ end
+ remove(l)
+ end
+ end
+ for i=1,#steps do
+ local coverage=steps[i].coverage
+ if coverage then
+ for k,v in next,coverage do
+ traverse(k,k,v)
+ end
+ end
+ end
+ end
+ end
+ end
+ if next(collected) then
+ while true do
+ local done=false
+ for k,v in next,collected do
+ for i=1,#v do
+ local vi=v[i]
+ if vi==k then
+ collected[k]=nil
+ break
+ else
+ local c=collected[vi]
+ if c then
+ done=true
+ local t={}
+ local n=i-1
+ for j=1,n do
+ t[j]=v[j]
+ end
+ for j=1,#c do
+ n=n+1
+ t[n]=c[j]
+ end
+ for j=i+1,#v do
+ n=n+1
+ t[n]=v[j]
+ end
+ collected[k]=t
+ break
+ end
+ end
+ end
+ end
+ if not done then
+ break
+ end
+ end
+ return collected
+ end
+ end
+ end
+end
+readers.unifymissing=unifymissing
+function readers.rehash(fontdata,hashmethod)
+ if not (fontdata and fontdata.glyphs) then
+ return
+ end
+ if hashmethod=="indices" then
+ fontdata.hashmethod="indices"
+ elseif hashmethod=="names" then
+ fontdata.hashmethod="names"
+ local indices=unifyglyphs(fontdata,true)
+ unifyresources(fontdata,indices)
+ copyduplicates(fontdata)
+ unifymissing(fontdata)
+ else
+ fontdata.hashmethod="unicodes"
+ local indices=unifyglyphs(fontdata)
+ unifyresources(fontdata,indices)
+ copyduplicates(fontdata)
+ unifymissing(fontdata)
+ stripredundant(fontdata)
+ end
+end
+function readers.checkhash(fontdata)
+ local hashmethod=fontdata.hashmethod
+ if hashmethod=="unicodes" then
+ fontdata.names=nil
+ elseif hashmethod=="names" and fontdata.names then
+ unifyresources(fontdata,fontdata.names)
+ copyduplicates(fontdata)
+ fontdata.hashmethod="unicodes"
+ fontdata.names=nil
+ else
+ readers.rehash(fontdata,"unicodes")
+ end
+end
+function readers.addunicodetable(fontdata)
+ local resources=fontdata.resources
+ local unicodes=resources.unicodes
+ if not unicodes then
+ local descriptions=fontdata.descriptions
+ if descriptions then
+ unicodes={}
+ resources.unicodes=unicodes
+ for u,d in next,descriptions do
+ local n=d.name
+ if n then
+ unicodes[n]=u
+ end
+ end
+ end
+ end
+end
+local concat,sort=table.concat,table.sort
+local next,type,tostring=next,type,tostring
+local criterium=1
+local threshold=0
+local trace_packing=false trackers.register("otf.packing",function(v) trace_packing=v end)
+local trace_loading=false trackers.register("otf.loading",function(v) trace_loading=v end)
+local report_otf=logs.reporter("fonts","otf loading")
+local function tabstr_normal(t)
+ local s={}
+ local n=0
+ for k,v in next,t do
+ n=n+1
+ if type(v)=="table" then
+ s[n]=k..">"..tabstr_normal(v)
+ elseif v==true then
+ s[n]=k.."+"
+ elseif v then
+ s[n]=k.."="..v
+ else
+ s[n]=k.."-"
+ end
+ end
+ if n==0 then
+ return ""
+ elseif n==1 then
+ return s[1]
+ else
+ sort(s)
+ return concat(s,",")
+ end
+end
+local function tabstr_flat(t)
+ local s={}
+ local n=0
+ for k,v in next,t do
+ n=n+1
+ s[n]=k.."="..v
+ end
+ if n==0 then
+ return ""
+ elseif n==1 then
+ return s[1]
+ else
+ sort(s)
+ return concat(s,",")
+ end
+end
+local function tabstr_mixed(t)
+ local s={}
+ local n=#t
+ if n==0 then
+ return ""
+ elseif n==1 then
+ local k=t[1]
+ if k==true then
+ return "++"
+ elseif k==false then
+ return "--"
+ else
+ return tostring(k)
+ end
+ else
+ for i=1,n do
+ local k=t[i]
+ if k==true then
+ s[i]="++"
+ elseif k==false then
+ s[i]="--"
+ else
+ s[i]=k
+ end
+ end
+ return concat(s,",")
+ end
+end
+local function tabstr_boolean(t)
+ local s={}
+ local n=0
+ for k,v in next,t do
+ n=n+1
+ if v then
+ s[n]=k.."+"
+ else
+ s[n]=k.."-"
+ end
+ end
+ if n==0 then
+ return ""
+ elseif n==1 then
+ return s[1]
+ else
+ sort(s)
+ return concat(s,",")
+ end
+end
+function readers.pack(data)
+ if data then
+ local h,t,c={},{},{}
+ local hh,tt,cc={},{},{}
+ local nt,ntt=0,0
+ local function pack_normal(v)
+ local tag=tabstr_normal(v)
+ local ht=h[tag]
+ if ht then
+ c[ht]=c[ht]+1
+ return ht
+ else
+ nt=nt+1
+ t[nt]=v
+ h[tag]=nt
+ c[nt]=1
+ return nt
+ end
+ end
+ local function pack_normal_cc(v)
+ local tag=tabstr_normal(v)
+ local ht=h[tag]
+ if ht then
+ c[ht]=c[ht]+1
+ return ht
+ else
+ v[1]=0
+ nt=nt+1
+ t[nt]=v
+ h[tag]=nt
+ c[nt]=1
+ return nt
+ end
+ end
+ local function pack_flat(v)
+ local tag=tabstr_flat(v)
+ local ht=h[tag]
+ if ht then
+ c[ht]=c[ht]+1
+ return ht
+ else
+ nt=nt+1
+ t[nt]=v
+ h[tag]=nt
+ c[nt]=1
+ return nt
+ end
+ end
+ local function pack_indexed(v)
+ local tag=concat(v," ")
+ local ht=h[tag]
+ if ht then
+ c[ht]=c[ht]+1
+ return ht
+ else
+ nt=nt+1
+ t[nt]=v
+ h[tag]=nt
+ c[nt]=1
+ return nt
+ end
+ end
+ local function pack_mixed(v)
+ local tag=tabstr_mixed(v)
+ local ht=h[tag]
+ if ht then
+ c[ht]=c[ht]+1
+ return ht
+ else
+ nt=nt+1
+ t[nt]=v
+ h[tag]=nt
+ c[nt]=1
+ return nt
+ end
+ end
+ local function pack_boolean(v)
+ local tag=tabstr_boolean(v)
+ local ht=h[tag]
+ if ht then
+ c[ht]=c[ht]+1
+ return ht
+ else
+ nt=nt+1
+ t[nt]=v
+ h[tag]=nt
+ c[nt]=1
+ return nt
+ end
+ end
+ local function pack_final(v)
+ if c[v]<=criterium then
+ return t[v]
+ else
+ local hv=hh[v]
+ if hv then
+ return hv
+ else
+ ntt=ntt+1
+ tt[ntt]=t[v]
+ hh[v]=ntt
+ cc[ntt]=c[v]
+ return ntt
+ end
+ end
+ end
+ local function pack_final_cc(v)
+ if c[v]<=criterium then
+ return t[v]
+ else
+ local hv=hh[v]
+ if hv then
+ return hv
+ else
+ ntt=ntt+1
+ tt[ntt]=t[v]
+ hh[v]=ntt
+ cc[ntt]=c[v]
+ return ntt
+ end
+ end
+ end
+ local function success(stage,pass)
+ if nt==0 then
+ if trace_loading or trace_packing then
+ report_otf("pack quality: nothing to pack")
+ end
+ return false
+ elseif nt>=threshold then
+ local one,two,rest=0,0,0
+ if pass==1 then
+ for k,v in next,c do
+ if v==1 then
+ one=one+1
+ elseif v==2 then
+ two=two+1
+ else
+ rest=rest+1
+ end
+ end
+ else
+ for k,v in next,cc do
+ if v>20 then
+ rest=rest+1
+ elseif v>10 then
+ two=two+1
+ else
+ one=one+1
+ end
+ end
+ data.tables=tt
+ end
+ if trace_loading or trace_packing then
+ report_otf("pack quality: stage %s, pass %s, %s packed, 1-10:%s, 11-20:%s, rest:%s (criterium: %s)",
+ stage,pass,one+two+rest,one,two,rest,criterium)
+ end
+ return true
+ else
+ if trace_loading or trace_packing then
+ report_otf("pack quality: stage %s, pass %s, %s packed, aborting pack (threshold: %s)",
+ stage,pass,nt,threshold)
+ end
+ return false
+ end
+ end
+ local function packers(pass)
+ if pass==1 then
+ return pack_normal,pack_indexed,pack_flat,pack_boolean,pack_mixed,pack_normal_cc
+ else
+ return pack_final,pack_final,pack_final,pack_final,pack_final,pack_final_cc
+ end
+ end
+ local resources=data.resources
+ local sequences=resources.sequences
+ local sublookups=resources.sublookups
+ local features=resources.features
+ local palettes=resources.colorpalettes
+ local variable=resources.variabledata
+ local chardata=characters and characters.data
+ local descriptions=data.descriptions or data.glyphs
+ if not descriptions then
+ return
+ end
+ for pass=1,2 do
+ if trace_packing then
+ report_otf("start packing: stage 1, pass %s",pass)
+ end
+ local pack_normal,pack_indexed,pack_flat,pack_boolean,pack_mixed,pack_normal_cc=packers(pass)
+ for unicode,description in next,descriptions do
+ local boundingbox=description.boundingbox
+ if boundingbox then
+ description.boundingbox=pack_indexed(boundingbox)
+ end
+ local math=description.math
+ if math then
+ local kerns=math.kerns
+ if kerns then
+ for tag,kern in next,kerns do
+ kerns[tag]=pack_normal(kern)
+ end
+ end
+ end
+ end
+ local function packthem(sequences)
+ for i=1,#sequences do
+ local sequence=sequences[i]
+ local kind=sequence.type
+ local steps=sequence.steps
+ local order=sequence.order
+ local features=sequence.features
+ local flags=sequence.flags
+ if steps then
+ for i=1,#steps do
+ local step=steps[i]
+ if kind=="gpos_pair" then
+ local c=step.coverage
+ if c then
+ if step.format=="pair" then
+ for g1,d1 in next,c do
+ for g2,d2 in next,d1 do
+ local f=d2[1] if f and f~=true then d2[1]=pack_indexed(f) end
+ local s=d2[2] if s and s~=true then d2[2]=pack_indexed(s) end
+ end
+ end
+ else
+ for g1,d1 in next,c do
+ c[g1]=pack_normal(d1)
+ end
+ end
+ end
+ elseif kind=="gpos_single" then
+ local c=step.coverage
+ if c then
+ if step.format=="single" then
+ for g1,d1 in next,c do
+ if d1 and d1~=true then
+ c[g1]=pack_indexed(d1)
+ end
+ end
+ else
+ step.coverage=pack_normal(c)
+ end
+ end
+ elseif kind=="gpos_cursive" then
+ local c=step.coverage
+ if c then
+ for g1,d1 in next,c do
+ local f=d1[2] if f then d1[2]=pack_indexed(f) end
+ local s=d1[3] if s then d1[3]=pack_indexed(s) end
+ end
+ end
+ elseif kind=="gpos_mark2base" or kind=="gpos_mark2mark" then
+ local c=step.baseclasses
+ if c then
+ for g1,d1 in next,c do
+ for g2,d2 in next,d1 do
+ d1[g2]=pack_indexed(d2)
+ end
+ end
+ end
+ local c=step.coverage
+ if c then
+ for g1,d1 in next,c do
+ d1[2]=pack_indexed(d1[2])
+ end
+ end
+ elseif kind=="gpos_mark2ligature" then
+ local c=step.baseclasses
+ if c then
+ for g1,d1 in next,c do
+ for g2,d2 in next,d1 do
+ for g3,d3 in next,d2 do
+ d2[g3]=pack_indexed(d3)
+ end
+ end
+ end
+ end
+ local c=step.coverage
+ if c then
+ for g1,d1 in next,c do
+ d1[2]=pack_indexed(d1[2])
+ end
+ end
+ end
+ local rules=step.rules
+ if rules then
+ for i=1,#rules do
+ local rule=rules[i]
+ local r=rule.before if r then for i=1,#r do r[i]=pack_boolean(r[i]) end end
+ local r=rule.after if r then for i=1,#r do r[i]=pack_boolean(r[i]) end end
+ local r=rule.current if r then for i=1,#r do r[i]=pack_boolean(r[i]) end end
+ local r=rule.replacements if r then rule.replacements=pack_flat (r) end
+ end
+ end
+ end
+ end
+ if order then
+ sequence.order=pack_indexed(order)
+ end
+ if features then
+ for script,feature in next,features do
+ features[script]=pack_normal(feature)
+ end
+ end
+ if flags then
+ sequence.flags=pack_normal(flags)
+ end
+ end
+ end
+ if sequences then
+ packthem(sequences)
+ end
+ if sublookups then
+ packthem(sublookups)
+ end
+ if features then
+ for k,list in next,features do
+ for feature,spec in next,list do
+ list[feature]=pack_normal(spec)
+ end
+ end
+ end
+ if palettes then
+ for i=1,#palettes do
+ local p=palettes[i]
+ for j=1,#p do
+ p[j]=pack_indexed(p[j])
+ end
+ end
+ end
+ if variable then
+ local instances=variable.instances
+ if instances then
+ for i=1,#instances do
+ local v=instances[i].values
+ for j=1,#v do
+ v[j]=pack_normal(v[j])
+ end
+ end
+ end
+ local function packdeltas(main)
+ if main then
+ local deltas=main.deltas
+ if deltas then
+ for i=1,#deltas do
+ local di=deltas[i]
+ local d=di.deltas
+ for j=1,#d do
+ d[j]=pack_indexed(d[j])
+ end
+ di.regions=pack_indexed(di.regions)
+ end
+ end
+ local regions=main.regions
+ if regions then
+ for i=1,#regions do
+ local r=regions[i]
+ for j=1,#r do
+ r[j]=pack_normal(r[j])
+ end
+ end
+ end
+ end
+ end
+ packdeltas(variable.global)
+ packdeltas(variable.horizontal)
+ packdeltas(variable.vertical)
+ packdeltas(variable.metrics)
+ end
+ if not success(1,pass) then
+ return
+ end
+ end
+ if nt>0 then
+ for pass=1,2 do
+ if trace_packing then
+ report_otf("start packing: stage 2, pass %s",pass)
+ end
+ local pack_normal,pack_indexed,pack_flat,pack_boolean,pack_mixed,pack_normal_cc=packers(pass)
+ for unicode,description in next,descriptions do
+ local math=description.math
+ if math then
+ local kerns=math.kerns
+ if kerns then
+ math.kerns=pack_normal(kerns)
+ end
+ end
+ end
+ local function packthem(sequences)
+ for i=1,#sequences do
+ local sequence=sequences[i]
+ local kind=sequence.type
+ local steps=sequence.steps
+ local features=sequence.features
+ if steps then
+ for i=1,#steps do
+ local step=steps[i]
+ if kind=="gpos_pair" then
+ local c=step.coverage
+ if c then
+ if step.format=="pair" then
+ for g1,d1 in next,c do
+ for g2,d2 in next,d1 do
+ d1[g2]=pack_normal(d2)
+ end
+ end
+ end
+ end
+ elseif kind=="gpos_mark2ligature" then
+ local c=step.baseclasses
+ if c then
+ for g1,d1 in next,c do
+ for g2,d2 in next,d1 do
+ d1[g2]=pack_normal(d2)
+ end
+ end
+ end
+ end
+ local rules=step.rules
+ if rules then
+ for i=1,#rules do
+ local rule=rules[i]
+ local r=rule.before if r then rule.before=pack_normal(r) end
+ local r=rule.after if r then rule.after=pack_normal(r) end
+ local r=rule.current if r then rule.current=pack_normal(r) end
+ end
+ end
+ end
+ end
+ if features then
+ sequence.features=pack_normal(features)
+ end
+ end
+ end
+ if sequences then
+ packthem(sequences)
+ end
+ if sublookups then
+ packthem(sublookups)
+ end
+ if variable then
+ local function unpackdeltas(main)
+ if main then
+ local regions=main.regions
+ if regions then
+ main.regions=pack_normal(regions)
+ end
+ end
+ end
+ unpackdeltas(variable.global)
+ unpackdeltas(variable.horizontal)
+ unpackdeltas(variable.vertical)
+ unpackdeltas(variable.metrics)
+ end
+ end
+ for pass=1,2 do
+ if trace_packing then
+ report_otf("start packing: stage 3, pass %s",pass)
+ end
+ local pack_normal,pack_indexed,pack_flat,pack_boolean,pack_mixed,pack_normal_cc=packers(pass)
+ local function packthem(sequences)
+ for i=1,#sequences do
+ local sequence=sequences[i]
+ local kind=sequence.type
+ local steps=sequence.steps
+ local features=sequence.features
+ if steps then
+ for i=1,#steps do
+ local step=steps[i]
+ if kind=="gpos_pair" then
+ local c=step.coverage
+ if c then
+ if step.format=="pair" then
+ for g1,d1 in next,c do
+ c[g1]=pack_normal(d1)
+ end
+ end
+ end
+ elseif kind=="gpos_cursive" then
+ local c=step.coverage
+ if c then
+ for g1,d1 in next,c do
+ c[g1]=pack_normal_cc(d1)
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ if sequences then
+ packthem(sequences)
+ end
+ if sublookups then
+ packthem(sublookups)
+ end
+ end
+ end
+ end
+end
+local unpacked_mt={
+ __index=function(t,k)
+ t[k]=false
+ return k
+ end
+}
+function readers.unpack(data)
+ if data then
+ local tables=data.tables
+ if tables then
+ local resources=data.resources
+ local descriptions=data.descriptions or data.glyphs
+ local sequences=resources.sequences
+ local sublookups=resources.sublookups
+ local features=resources.features
+ local palettes=resources.colorpalettes
+ local variable=resources.variabledata
+ local unpacked={}
+ setmetatable(unpacked,unpacked_mt)
+ for unicode,description in next,descriptions do
+ local tv=tables[description.boundingbox]
+ if tv then
+ description.boundingbox=tv
+ end
+ local math=description.math
+ if math then
+ local kerns=math.kerns
+ if kerns then
+ local tm=tables[kerns]
+ if tm then
+ math.kerns=tm
+ kerns=unpacked[tm]
+ end
+ if kerns then
+ for k,kern in next,kerns do
+ local tv=tables[kern]
+ if tv then
+ kerns[k]=tv
+ end
+ end
+ end
+ end
+ end
+ end
+ local function unpackthem(sequences)
+ for i=1,#sequences do
+ local sequence=sequences[i]
+ local kind=sequence.type
+ local steps=sequence.steps
+ local order=sequence.order
+ local features=sequence.features
+ local flags=sequence.flags
+ local markclass=sequence.markclass
+ if features then
+ local tv=tables[features]
+ if tv then
+ sequence.features=tv
+ features=tv
+ end
+ for script,feature in next,features do
+ local tv=tables[feature]
+ if tv then
+ features[script]=tv
+ end
+ end
+ end
+ if steps then
+ for i=1,#steps do
+ local step=steps[i]
+ if kind=="gpos_pair" then
+ local c=step.coverage
+ if c then
+ if step.format=="pair" then
+ for g1,d1 in next,c do
+ local tv=tables[d1]
+ if tv then
+ c[g1]=tv
+ d1=tv
+ end
+ for g2,d2 in next,d1 do
+ local tv=tables[d2]
+ if tv then
+ d1[g2]=tv
+ d2=tv
+ end
+ local f=tables[d2[1]] if f then d2[1]=f end
+ local s=tables[d2[2]] if s then d2[2]=s end
+ end
+ end
+ else
+ for g1,d1 in next,c do
+ local tv=tables[d1]
+ if tv then
+ c[g1]=tv
+ end
+ end
+ end
+ end
+ elseif kind=="gpos_single" then
+ local c=step.coverage
+ if c then
+ if step.format=="single" then
+ for g1,d1 in next,c do
+ local tv=tables[d1]
+ if tv then
+ c[g1]=tv
+ end
+ end
+ else
+ local tv=tables[c]
+ if tv then
+ step.coverage=tv
+ end
+ end
+ end
+ elseif kind=="gpos_cursive" then
+ local c=step.coverage
+ if c then
+ for g1,d1 in next,c do
+ local tv=tables[d1]
+ if tv then
+ d1=tv
+ c[g1]=d1
+ end
+ local f=tables[d1[2]] if f then d1[2]=f end
+ local s=tables[d1[3]] if s then d1[3]=s end
+ end
+ end
+ elseif kind=="gpos_mark2base" or kind=="gpos_mark2mark" then
+ local c=step.baseclasses
+ if c then
+ for g1,d1 in next,c do
+ for g2,d2 in next,d1 do
+ local tv=tables[d2]
+ if tv then
+ d1[g2]=tv
+ end
+ end
+ end
+ end
+ local c=step.coverage
+ if c then
+ for g1,d1 in next,c do
+ local tv=tables[d1[2]]
+ if tv then
+ d1[2]=tv
+ end
+ end
+ end
+ elseif kind=="gpos_mark2ligature" then
+ local c=step.baseclasses
+ if c then
+ for g1,d1 in next,c do
+ for g2,d2 in next,d1 do
+ local tv=tables[d2]
+ if tv then
+ d2=tv
+ d1[g2]=d2
+ end
+ for g3,d3 in next,d2 do
+ local tv=tables[d2[g3]]
+ if tv then
+ d2[g3]=tv
+ end
+ end
+ end
+ end
+ end
+ local c=step.coverage
+ if c then
+ for g1,d1 in next,c do
+ local tv=tables[d1[2]]
+ if tv then
+ d1[2]=tv
+ end
+ end
+ end
+ end
+ local rules=step.rules
+ if rules then
+ for i=1,#rules do
+ local rule=rules[i]
+ local before=rule.before
+ if before then
+ local tv=tables[before]
+ if tv then
+ rule.before=tv
+ before=tv
+ end
+ for i=1,#before do
+ local tv=tables[before[i]]
+ if tv then
+ before[i]=tv
+ end
+ end
+ end
+ local after=rule.after
+ if after then
+ local tv=tables[after]
+ if tv then
+ rule.after=tv
+ after=tv
+ end
+ for i=1,#after do
+ local tv=tables[after[i]]
+ if tv then
+ after[i]=tv
+ end
+ end
+ end
+ local current=rule.current
+ if current then
+ local tv=tables[current]
+ if tv then
+ rule.current=tv
+ current=tv
+ end
+ for i=1,#current do
+ local tv=tables[current[i]]
+ if tv then
+ current[i]=tv
+ end
+ end
+ end
+ local replacements=rule.replacements
+ if replacements then
+ local tv=tables[replacements]
+ if tv then
+ rule.replacements=tv
+ end
+ end
+ end
+ end
+ end
+ end
+ if order then
+ local tv=tables[order]
+ if tv then
+ sequence.order=tv
+ end
+ end
+ if flags then
+ local tv=tables[flags]
+ if tv then
+ sequence.flags=tv
+ end
+ end
+ end
+ end
+ if sequences then
+ unpackthem(sequences)
+ end
+ if sublookups then
+ unpackthem(sublookups)
+ end
+ if features then
+ for k,list in next,features do
+ for feature,spec in next,list do
+ local tv=tables[spec]
+ if tv then
+ list[feature]=tv
+ end
+ end
+ end
+ end
+ if palettes then
+ for i=1,#palettes do
+ local p=palettes[i]
+ for j=1,#p do
+ local tv=tables[p[j]]
+ if tv then
+ p[j]=tv
+ end
+ end
+ end
+ end
+ if variable then
+ local instances=variable.instances
+ if instances then
+ for i=1,#instances do
+ local v=instances[i].values
+ for j=1,#v do
+ local tv=tables[v[j]]
+ if tv then
+ v[j]=tv
+ end
+ end
+ end
+ end
+ local function unpackdeltas(main)
+ if main then
+ local deltas=main.deltas
+ if deltas then
+ for i=1,#deltas do
+ local di=deltas[i]
+ local d=di.deltas
+ local r=di.regions
+ for j=1,#d do
+ local tv=tables[d[j]]
+ if tv then
+ d[j]=tv
+ end
+ end
+ local tv=di.regions
+ if tv then
+ di.regions=tv
+ end
+ end
+ end
+ local regions=main.regions
+ if regions then
+ local tv=tables[regions]
+ if tv then
+ main.regions=tv
+ regions=tv
+ end
+ for i=1,#regions do
+ local r=regions[i]
+ for j=1,#r do
+ local tv=tables[r[j]]
+ if tv then
+ r[j]=tv
+ end
+ end
+ end
+ end
+ end
+ end
+ unpackdeltas(variable.global)
+ unpackdeltas(variable.horizontal)
+ unpackdeltas(variable.vertical)
+ unpackdeltas(variable.metrics)
+ end
+ data.tables=nil
+ end
+ end
+end
+local mt={
+ __index=function(t,k)
+ if k=="height" then
+ local ht=t.boundingbox[4]
+ return ht<0 and 0 or ht
+ elseif k=="depth" then
+ local dp=-t.boundingbox[2]
+ return dp<0 and 0 or dp
+ elseif k=="width" then
+ return 0
+ elseif k=="name" then
+ return forcenotdef and ".notdef"
+ end
+ end
+}
+local function sameformat(sequence,steps,first,nofsteps,kind)
+ return true
+end
+local function mergesteps_1(lookup,strict)
+ local steps=lookup.steps
+ local nofsteps=lookup.nofsteps
+ local first=steps[1]
+ if strict then
+ local f=first.format
+ for i=2,nofsteps do
+ if steps[i].format~=f then
+ report("not merging %a steps of %a lookup %a, different formats",nofsteps,lookup.type,lookup.name)
+ return 0
+ end
+ end
+ end
+ report("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ local target=first.coverage
+ for i=2,nofsteps do
+ for k,v in next,steps[i].coverage do
+ if not target[k] then
+ target[k]=v
+ end
+ end
+ end
+ lookup.nofsteps=1
+ lookup.merged=true
+ lookup.steps={ first }
+ return nofsteps-1
+end
+local function mergesteps_2(lookup,strict)
+ local steps=lookup.steps
+ local nofsteps=lookup.nofsteps
+ local first=steps[1]
+ if strict then
+ local f=first.format
+ for i=2,nofsteps do
+ if steps[i].format~=f then
+ report("not merging %a steps of %a lookup %a, different formats",nofsteps,lookup.type,lookup.name)
+ return 0
+ end
+ end
+ end
+ report("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ local target=first.coverage
+ for i=2,nofsteps do
+ for k,v in next,steps[i].coverage do
+ local tk=target[k]
+ if tk then
+ for k,v in next,v do
+ if not tk[k] then
+ tk[k]=v
+ end
+ end
+ else
+ target[k]=v
+ end
+ end
+ end
+ lookup.nofsteps=1
+ lookup.steps={ first }
+ return nofsteps-1
+end
+local function mergesteps_3(lookup,strict)
+ local steps=lookup.steps
+ local nofsteps=lookup.nofsteps
+ report("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ local coverage={}
+ for i=1,nofsteps do
+ for k,v in next,steps[i].coverage do
+ local tk=coverage[k]
+ if tk then
+ report("quitting merge due to multiple checks")
+ return nofsteps
+ else
+ coverage[k]=v
+ end
+ end
+ end
+ local first=steps[1]
+ local baseclasses={}
+ for i=1,nofsteps do
+ local offset=i*10
+ local step=steps[i]
+ for k,v in sortedhash(step.baseclasses) do
+ baseclasses[offset+k]=v
+ end
+ for k,v in next,step.coverage do
+ v[1]=offset+v[1]
+ end
+ end
+ first.baseclasses=baseclasses
+ first.coverage=coverage
+ lookup.nofsteps=1
+ lookup.steps={ first }
+ return nofsteps-1
+end
+local function nested(old,new)
+ for k,v in next,old do
+ if k=="ligature" then
+ if not new.ligature then
+ new.ligature=v
+ end
+ else
+ local n=new[k]
+ if n then
+ nested(v,n)
+ else
+ new[k]=v
+ end
+ end
+ end
+end
+local function mergesteps_4(lookup)
+ local steps=lookup.steps
+ local nofsteps=lookup.nofsteps
+ local first=steps[1]
+ report("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ local target=first.coverage
+ for i=2,nofsteps do
+ for k,v in next,steps[i].coverage do
+ local tk=target[k]
+ if tk then
+ nested(v,tk)
+ else
+ target[k]=v
+ end
+ end
+ end
+ lookup.nofsteps=1
+ lookup.steps={ first }
+ return nofsteps-1
+end
+local function checkkerns(lookup)
+ local steps=lookup.steps
+ local nofsteps=lookup.nofsteps
+ local kerned=0
+ for i=1,nofsteps do
+ local step=steps[i]
+ if step.format=="pair" then
+ local coverage=step.coverage
+ local kerns=true
+ for g1,d1 in next,coverage do
+ if d1==true then
+ elseif not d1 then
+ elseif d1[1]~=0 or d1[2]~=0 or d1[4]~=0 then
+ kerns=false
+ break
+ end
+ end
+ if kerns then
+ report("turning pairs of step %a of %a lookup %a into kerns",i,lookup.type,lookup.name)
+ local c={}
+ for g1,d1 in next,coverage do
+ if d1 and d1~=true then
+ c[g1]=d1[3]
+ end
+ end
+ step.coverage=c
+ step.format="move"
+ kerned=kerned+1
+ end
+ end
+ end
+ return kerned
+end
+local function checkpairs(lookup)
+ local steps=lookup.steps
+ local nofsteps=lookup.nofsteps
+ local kerned=0
+ local function onlykerns(step)
+ local coverage=step.coverage
+ for g1,d1 in next,coverage do
+ for g2,d2 in next,d1 do
+ if d2[2] then
+ return false
+ else
+ local v=d2[1]
+ if v==true then
+ elseif v and (v[1]~=0 or v[2]~=0 or v[4]~=0) then
+ return false
+ end
+ end
+ end
+ end
+ return coverage
+ end
+ for i=1,nofsteps do
+ local step=steps[i]
+ if step.format=="pair" then
+ local coverage=onlykerns(step)
+ if coverage then
+ report("turning pairs of step %a of %a lookup %a into kerns",i,lookup.type,lookup.name)
+ for g1,d1 in next,coverage do
+ local d={}
+ for g2,d2 in next,d1 do
+ local v=d2[1]
+ if v==true then
+ elseif v then
+ d[g2]=v[3]
+ end
+ end
+ coverage[g1]=d
+ end
+ step.format="move"
+ kerned=kerned+1
+ end
+ end
+ end
+ return kerned
+end
+local compact_pairs=true
+local compact_singles=true
+directives.register("otf.compact.pairs",function(v) compact_pairs=v end)
+directives.register("otf.compact.singles",function(v) compact_singles=v end)
+function readers.compact(data)
+ if not data or data.compacted then
+ return
+ else
+ data.compacted=true
+ end
+ local resources=data.resources
+ local merged=0
+ local kerned=0
+ local allsteps=0
+ local function compact(what)
+ local lookups=resources[what]
+ if lookups then
+ for i=1,#lookups do
+ local lookup=lookups[i]
+ local nofsteps=lookup.nofsteps
+ local kind=lookup.type
+ allsteps=allsteps+nofsteps
+ if nofsteps>1 then
+ local merg=merged
+ if kind=="gsub_single" or kind=="gsub_alternate" or kind=="gsub_multiple" then
+ merged=merged+mergesteps_1(lookup)
+ elseif kind=="gsub_ligature" then
+ merged=merged+mergesteps_4(lookup)
+ elseif kind=="gpos_single" then
+ merged=merged+mergesteps_1(lookup,true)
+ if compact_singles then
+ kerned=kerned+checkkerns(lookup)
+ end
+ elseif kind=="gpos_pair" then
+ merged=merged+mergesteps_2(lookup,true)
+ if compact_pairs then
+ kerned=kerned+checkpairs(lookup)
+ end
+ elseif kind=="gpos_cursive" then
+ merged=merged+mergesteps_2(lookup)
+ elseif kind=="gpos_mark2mark" or kind=="gpos_mark2base" or kind=="gpos_mark2ligature" then
+ merged=merged+mergesteps_3(lookup)
+ end
+ if merg~=merged then
+ lookup.merged=true
+ end
+ elseif nofsteps==1 then
+ if kind=="gpos_single" then
+ if compact_singles then
+ kerned=kerned+checkkerns(lookup)
+ end
+ elseif kind=="gpos_pair" then
+ if compact_pairs then
+ kerned=kerned+checkpairs(lookup)
+ end
+ end
+ end
+ end
+ else
+ report("no lookups in %a",what)
+ end
+ end
+ compact("sequences")
+ compact("sublookups")
+ if merged>0 then
+ report("%i steps of %i removed due to merging",merged,allsteps)
+ end
+ if kerned>0 then
+ report("%i steps of %i steps turned from pairs into kerns",kerned,allsteps)
+ end
+end
+local function mergesteps(t,k)
+ if k=="merged" then
+ local merged={}
+ for i=1,#t do
+ local step=t[i]
+ local coverage=step.coverage
+ for k in next,coverage do
+ local m=merged[k]
+ if m then
+ m[2]=i
+ else
+ merged[k]={ i,i }
+ end
+ end
+ end
+ t.merged=merged
+ return merged
+ end
+end
+if fonts.helpers then
+ fonts.helpers.mergesteps=mergesteps
+end
+function readers.expand(data)
+ if not data or data.expanded then
+ return
+ else
+ data.expanded=true
+ end
+ local resources=data.resources
+ local sublookups=resources.sublookups
+ local sequences=resources.sequences
+ local markclasses=resources.markclasses
+ local descriptions=data.descriptions
+ if descriptions then
+ local defaultwidth=resources.defaultwidth or 0
+ local defaultheight=resources.defaultheight or 0
+ local defaultdepth=resources.defaultdepth or 0
+ local basename=trace_markwidth and file.basename(resources.filename)
+ for u,d in next,descriptions do
+ local bb=d.boundingbox
+ local wd=d.width
+ if not wd then
+ d.width=defaultwidth
+ elseif trace_markwidth and wd~=0 and d.class=="mark" then
+ report("mark %a with width %b found in %a",d.name or "<noname>",wd,basename)
+ end
+ if bb then
+ local ht=bb[4]
+ local dp=-bb[2]
+ if ht==0 or ht<0 then
+ else
+ d.height=ht
+ end
+ if dp==0 or dp<0 then
+ else
+ d.depth=dp
+ end
+ end
+ end
+ end
+ local function expandlookups(sequences)
+ if sequences then
+ for i=1,#sequences do
+ local sequence=sequences[i]
+ local steps=sequence.steps
+ if steps then
+ local nofsteps=sequence.nofsteps
+ setmetatableindex(steps,mergesteps)
+ local kind=sequence.type
+ local markclass=sequence.markclass
+ if markclass then
+ if not markclasses then
+ report_warning("missing markclasses")
+ sequence.markclass=false
+ else
+ sequence.markclass=markclasses[markclass]
+ end
+ end
+ local flags=sequence.flags
+ if flags then
+ flags[5]=flags[1]~=false
+ or flags[2]~=false
+ or flags[3]~=false
+ or sequence.markclass
+ or false
+ end
+ for i=1,nofsteps do
+ local step=steps[i]
+ local baseclasses=step.baseclasses
+ if baseclasses then
+ local coverage=step.coverage
+ for k,v in next,coverage do
+ v[1]=baseclasses[v[1]]
+ end
+ elseif kind=="gpos_cursive" then
+ local coverage=step.coverage
+ for k,v in next,coverage do
+ v[1]=coverage
+ end
+ end
+ local rules=step.rules
+ if rules then
+ local rulehash={}
+ local rulesize=0
+ local coverage={}
+ local lookuptype=sequence.type
+ step.coverage=coverage
+ for nofrules=1,#rules do
+ local rule=rules[nofrules]
+ local current=rule.current
+ local before=rule.before
+ local after=rule.after
+ local replacements=rule.replacements or false
+ local sequence={}
+ local nofsequences=0
+ if before then
+ for n=1,#before do
+ nofsequences=nofsequences+1
+ sequence[nofsequences]=before[n]
+ end
+ end
+ local start=nofsequences+1
+ for n=1,#current do
+ nofsequences=nofsequences+1
+ sequence[nofsequences]=current[n]
+ end
+ local stop=nofsequences
+ if after then
+ for n=1,#after do
+ nofsequences=nofsequences+1
+ sequence[nofsequences]=after[n]
+ end
+ end
+ local lookups=rule.lookups or false
+ local subtype=nil
+ if lookups then
+ for i=1,#lookups do
+ local lookups=lookups[i]
+ if lookups then
+ for k,v in next,lookups do
+ local lookup=sublookups[v]
+ if lookup then
+ lookups[k]=lookup
+ if not subtype then
+ subtype=lookup.type
+ end
+ else
+ end
+ end
+ end
+ end
+ end
+ if sequence[1] then
+ sequence.n=#sequence
+ rulesize=rulesize+1
+ rulehash[rulesize]={
+ nofrules,
+ lookuptype,
+ sequence,
+ start,
+ stop,
+ lookups,
+ replacements,
+ subtype,
+ }
+ for unic in next,sequence[start] do
+ local cu=coverage[unic]
+ if not cu then
+ coverage[unic]=rulehash
+ else
+ end
+ end
+ end
+ rulehash.n=#rulehash
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ expandlookups(sequences)
+ expandlookups(sublookups)
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-otl']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files",
+}
+local lower=string.lower
+local type,next,tonumber,tostring,unpack=type,next,tonumber,tostring,unpack
+local abs=math.abs
+local derivetable=table.derive
+local formatters=string.formatters
+local setmetatableindex=table.setmetatableindex
+local allocate=utilities.storage.allocate
+local registertracker=trackers.register
+local registerdirective=directives.register
+local starttiming=statistics.starttiming
+local stoptiming=statistics.stoptiming
+local elapsedtime=statistics.elapsedtime
+local findbinfile=resolvers.findbinfile
+local trace_loading=false registertracker("otf.loading",function(v) trace_loading=v end)
+local trace_features=false registertracker("otf.features",function(v) trace_features=v end)
+local trace_defining=false registertracker("fonts.defining",function(v) trace_defining=v end)
+local report_otf=logs.reporter("fonts","otf loading")
+local fonts=fonts
+local otf=fonts.handlers.otf
+otf.version=3.100
+otf.cache=containers.define("fonts","otl",otf.version,true)
+otf.svgcache=containers.define("fonts","svg",otf.version,true)
+otf.sbixcache=containers.define("fonts","sbix",otf.version,true)
+otf.pdfcache=containers.define("fonts","pdf",otf.version,true)
+otf.svgenabled=false
+otf.sbixenabled=false
+local otfreaders=otf.readers
+local hashes=fonts.hashes
+local definers=fonts.definers
+local readers=fonts.readers
+local constructors=fonts.constructors
+local otffeatures=constructors.features.otf
+local registerotffeature=otffeatures.register
+local otfenhancers=constructors.enhancers.otf
+local registerotfenhancer=otfenhancers.register
+local forceload=false
+local cleanup=0
+local syncspace=true
+local forcenotdef=false
+local privateoffset=fonts.constructors and fonts.constructors.privateoffset or 0xF0000
+local applyruntimefixes=fonts.treatments and fonts.treatments.applyfixes
+local wildcard="*"
+local default="dflt"
+local formats=fonts.formats
+formats.otf="opentype"
+formats.ttf="truetype"
+formats.ttc="truetype"
+registerdirective("fonts.otf.loader.cleanup",function(v) cleanup=tonumber(v) or (v and 1) or 0 end)
+registerdirective("fonts.otf.loader.force",function(v) forceload=v end)
+registerdirective("fonts.otf.loader.syncspace",function(v) syncspace=v end)
+registerdirective("fonts.otf.loader.forcenotdef",function(v) forcenotdef=v end)
+registerotfenhancer("check extra features",function() end)
+function otf.load(filename,sub,instance)
+ local base=file.basename(file.removesuffix(filename))
+ local name=file.removesuffix(base)
+ local attr=lfs.attributes(filename)
+ local size=attr and attr.size or 0
+ local time=attr and attr.modification or 0
+ if sub=="" then
+ sub=false
+ end
+ local hash=name
+ if sub then
+ hash=hash.."-"..sub
+ end
+ if instance then
+ hash=hash.."-"..instance
+ end
+ hash=containers.cleanname(hash)
+ local data=containers.read(otf.cache,hash)
+ local reload=not data or data.size~=size or data.time~=time or data.tableversion~=otfreaders.tableversion
+ if forceload then
+ report_otf("forced reload of %a due to hard coded flag",filename)
+ reload=true
+ end
+ if reload then
+ report_otf("loading %a, hash %a",filename,hash)
+ starttiming(otfreaders)
+ data=otfreaders.loadfont(filename,sub or 1,instance)
+ if data then
+ local resources=data.resources
+ local svgshapes=resources.svgshapes
+ local sbixshapes=resources.sbixshapes
+ if svgshapes then
+ resources.svgshapes=nil
+ if otf.svgenabled then
+ local timestamp=os.date()
+ containers.write(otf.svgcache,hash,{
+ svgshapes=svgshapes,
+ timestamp=timestamp,
+ })
+ data.properties.svg={
+ hash=hash,
+ timestamp=timestamp,
+ }
+ end
+ end
+ if sbixshapes then
+ resources.sbixshapes=nil
+ if otf.sbixenabled then
+ local timestamp=os.date()
+ containers.write(otf.sbixcache,hash,{
+ sbixshapes=sbixshapes,
+ timestamp=timestamp,
+ })
+ data.properties.sbix={
+ hash=hash,
+ timestamp=timestamp,
+ }
+ end
+ end
+ otfreaders.compact(data)
+ otfreaders.rehash(data,"unicodes")
+ otfreaders.addunicodetable(data)
+ otfreaders.extend(data)
+ otfreaders.pack(data)
+ report_otf("loading done")
+ report_otf("saving %a in cache",filename)
+ data=containers.write(otf.cache,hash,data)
+ if cleanup>1 then
+ collectgarbage("collect")
+ end
+ stoptiming(otfreaders)
+ if elapsedtime then
+ report_otf("loading, optimizing, packing and caching time %s",elapsedtime(otfreaders))
+ end
+ if cleanup>3 then
+ collectgarbage("collect")
+ end
+ data=containers.read(otf.cache,hash)
+ if cleanup>2 then
+ collectgarbage("collect")
+ end
+ else
+ data=nil
+ report_otf("loading failed due to read error")
+ end
+ end
+ if data then
+ if trace_defining then
+ report_otf("loading from cache using hash %a",hash)
+ end
+ otfreaders.unpack(data)
+ otfreaders.expand(data)
+ otfreaders.addunicodetable(data)
+ otfenhancers.apply(data,filename,data)
+ if applyruntimefixes then
+ applyruntimefixes(filename,data)
+ end
+ data.metadata.math=data.resources.mathconstants
+ local classes=data.resources.classes
+ if not classes then
+ local descriptions=data.descriptions
+ classes=setmetatableindex(function(t,k)
+ local d=descriptions[k]
+ local v=(d and d.class or "base") or false
+ t[k]=v
+ return v
+ end)
+ data.resources.classes=classes
+ end
+ end
+ return data
+end
+function otf.setfeatures(tfmdata,features)
+ local okay=constructors.initializefeatures("otf",tfmdata,features,trace_features,report_otf)
+ if okay then
+ return constructors.collectprocessors("otf",tfmdata,features,trace_features,report_otf)
+ else
+ return {}
+ end
+end
+local function copytotfm(data,cache_id)
+ if data then
+ local metadata=data.metadata
+ local properties=derivetable(data.properties)
+ local descriptions=derivetable(data.descriptions)
+ local goodies=derivetable(data.goodies)
+ local characters={}
+ local parameters={}
+ local mathparameters={}
+ local resources=data.resources
+ local unicodes=resources.unicodes
+ local spaceunits=500
+ local spacer="space"
+ local designsize=metadata.designsize or 100
+ local minsize=metadata.minsize or designsize
+ local maxsize=metadata.maxsize or designsize
+ local mathspecs=metadata.math
+ if designsize==0 then
+ designsize=100
+ minsize=100
+ maxsize=100
+ end
+ if mathspecs then
+ for name,value in next,mathspecs do
+ mathparameters[name]=value
+ end
+ end
+ for unicode in next,data.descriptions do
+ characters[unicode]={}
+ end
+ if mathspecs then
+ for unicode,character in next,characters do
+ local d=descriptions[unicode]
+ local m=d.math
+ if m then
+ local italic=m.italic
+ local vitalic=m.vitalic
+ local variants=m.hvariants
+ local parts=m.hparts
+ if variants then
+ local c=character
+ for i=1,#variants do
+ local un=variants[i]
+ c.next=un
+ c=characters[un]
+ end
+ c.horiz_variants=parts
+ elseif parts then
+ character.horiz_variants=parts
+ italic=m.hitalic
+ end
+ local variants=m.vvariants
+ local parts=m.vparts
+ if variants then
+ local c=character
+ for i=1,#variants do
+ local un=variants[i]
+ c.next=un
+ c=characters[un]
+ end
+ c.vert_variants=parts
+ elseif parts then
+ character.vert_variants=parts
+ end
+ if italic and italic~=0 then
+ character.italic=italic
+ end
+ if vitalic and vitalic~=0 then
+ character.vert_italic=vitalic
+ end
+ local accent=m.accent
+ if accent then
+ character.accent=accent
+ end
+ local kerns=m.kerns
+ if kerns then
+ character.mathkerns=kerns
+ end
+ end
+ end
+ end
+ local filename=constructors.checkedfilename(resources)
+ local fontname=metadata.fontname
+ local fullname=metadata.fullname or fontname
+ local psname=fontname or fullname
+ local units=metadata.units or 1000
+ if units==0 then
+ units=1000
+ metadata.units=1000
+ report_otf("changing %a units to %a",0,units)
+ end
+ local monospaced=metadata.monospaced
+ local charwidth=metadata.averagewidth
+ local charxheight=metadata.xheight
+ local italicangle=metadata.italicangle
+ local hasitalics=metadata.hasitalics
+ properties.monospaced=monospaced
+ properties.hasitalics=hasitalics
+ parameters.italicangle=italicangle
+ parameters.charwidth=charwidth
+ parameters.charxheight=charxheight
+ local space=0x0020
+ local emdash=0x2014
+ if monospaced then
+ if descriptions[space] then
+ spaceunits,spacer=descriptions[space].width,"space"
+ end
+ if not spaceunits and descriptions[emdash] then
+ spaceunits,spacer=descriptions[emdash].width,"emdash"
+ end
+ if not spaceunits and charwidth then
+ spaceunits,spacer=charwidth,"charwidth"
+ end
+ else
+ if descriptions[space] then
+ spaceunits,spacer=descriptions[space].width,"space"
+ end
+ if not spaceunits and descriptions[emdash] then
+ spaceunits,spacer=descriptions[emdash].width/2,"emdash/2"
+ end
+ if not spaceunits and charwidth then
+ spaceunits,spacer=charwidth,"charwidth"
+ end
+ end
+ spaceunits=tonumber(spaceunits) or units/2
+ parameters.slant=0
+ parameters.space=spaceunits
+ parameters.space_stretch=1*units/2
+ parameters.space_shrink=1*units/3
+ parameters.x_height=2*units/5
+ parameters.quad=units
+ if spaceunits<2*units/5 then
+ end
+ if italicangle and italicangle~=0 then
+ parameters.italicangle=italicangle
+ parameters.italicfactor=math.cos(math.rad(90+italicangle))
+ parameters.slant=- math.tan(italicangle*math.pi/180)
+ end
+ if monospaced then
+ parameters.space_stretch=0
+ parameters.space_shrink=0
+ elseif syncspace then
+ parameters.space_stretch=spaceunits/2
+ parameters.space_shrink=spaceunits/3
+ end
+ parameters.extra_space=parameters.space_shrink
+ if charxheight then
+ parameters.x_height=charxheight
+ else
+ local x=0x0078
+ if x then
+ local x=descriptions[x]
+ if x then
+ parameters.x_height=x.height
+ end
+ end
+ end
+ parameters.designsize=(designsize/10)*65536
+ parameters.minsize=(minsize/10)*65536
+ parameters.maxsize=(maxsize/10)*65536
+ parameters.ascender=abs(metadata.ascender or 0)
+ parameters.descender=abs(metadata.descender or 0)
+ parameters.units=units
+ properties.space=spacer
+ properties.encodingbytes=2
+ properties.format=data.format or formats.otf
+ properties.noglyphnames=true
+ properties.filename=filename
+ properties.fontname=fontname
+ properties.fullname=fullname
+ properties.psname=psname
+ properties.name=filename or fullname
+ properties.private=properties.private or data.private or privateoffset
+ return {
+ characters=characters,
+ descriptions=descriptions,
+ parameters=parameters,
+ mathparameters=mathparameters,
+ resources=resources,
+ properties=properties,
+ goodies=goodies,
+ }
+ end
+end
+local converters={
+ woff={
+ cachename="webfonts",
+ action=otf.readers.woff2otf,
+ }
+}
+local function checkconversion(specification)
+ local filename=specification.filename
+ local converter=converters[lower(file.suffix(filename))]
+ if converter then
+ local base=file.basename(filename)
+ local name=file.removesuffix(base)
+ local attr=lfs.attributes(filename)
+ local size=attr and attr.size or 0
+ local time=attr and attr.modification or 0
+ if size>0 then
+ local cleanname=containers.cleanname(name)
+ local cachename=caches.setfirstwritablefile(cleanname,converter.cachename)
+ if not io.exists(cachename) or (time~=lfs.attributes(cachename).modification) then
+ report_otf("caching font %a in %a",filename,cachename)
+ converter.action(filename,cachename)
+ lfs.touch(cachename,time,time)
+ end
+ specification.filename=cachename
+ end
+ end
+end
+local function otftotfm(specification)
+ local cache_id=specification.hash
+ local tfmdata=containers.read(constructors.cache,cache_id)
+ if not tfmdata then
+ checkconversion(specification)
+ local name=specification.name
+ local sub=specification.sub
+ local subindex=specification.subindex
+ local filename=specification.filename
+ local features=specification.features.normal
+ local instance=specification.instance or (features and features.axis)
+ local rawdata=otf.load(filename,sub,instance)
+ if rawdata and next(rawdata) then
+ local descriptions=rawdata.descriptions
+ rawdata.lookuphash={}
+ tfmdata=copytotfm(rawdata,cache_id)
+ if tfmdata and next(tfmdata) then
+ local features=constructors.checkedfeatures("otf",features)
+ local shared=tfmdata.shared
+ if not shared then
+ shared={}
+ tfmdata.shared=shared
+ end
+ shared.rawdata=rawdata
+ shared.dynamics={}
+ tfmdata.changed={}
+ shared.features=features
+ shared.processes=otf.setfeatures(tfmdata,features)
+ end
+ end
+ containers.write(constructors.cache,cache_id,tfmdata)
+ end
+ return tfmdata
+end
+local function read_from_otf(specification)
+ local tfmdata=otftotfm(specification)
+ if tfmdata then
+ tfmdata.properties.name=specification.name
+ tfmdata.properties.sub=specification.sub
+ tfmdata=constructors.scale(tfmdata,specification)
+ local allfeatures=tfmdata.shared.features or specification.features.normal
+ constructors.applymanipulators("otf",tfmdata,allfeatures,trace_features,report_otf)
+ constructors.setname(tfmdata,specification)
+ fonts.loggers.register(tfmdata,file.suffix(specification.filename),specification)
+ end
+ return tfmdata
+end
+local function checkmathsize(tfmdata,mathsize)
+ local mathdata=tfmdata.shared.rawdata.metadata.math
+ local mathsize=tonumber(mathsize)
+ if mathdata then
+ local parameters=tfmdata.parameters
+ parameters.scriptpercentage=mathdata.ScriptPercentScaleDown
+ parameters.scriptscriptpercentage=mathdata.ScriptScriptPercentScaleDown
+ parameters.mathsize=mathsize
+ end
+end
+registerotffeature {
+ name="mathsize",
+ description="apply mathsize specified in the font",
+ initializers={
+ base=checkmathsize,
+ node=checkmathsize,
+ }
+}
+function otf.collectlookups(rawdata,kind,script,language)
+ if not kind then
+ return
+ end
+ if not script then
+ script=default
+ end
+ if not language then
+ language=default
+ end
+ local lookupcache=rawdata.lookupcache
+ if not lookupcache then
+ lookupcache={}
+ rawdata.lookupcache=lookupcache
+ end
+ local kindlookup=lookupcache[kind]
+ if not kindlookup then
+ kindlookup={}
+ lookupcache[kind]=kindlookup
+ end
+ local scriptlookup=kindlookup[script]
+ if not scriptlookup then
+ scriptlookup={}
+ kindlookup[script]=scriptlookup
+ end
+ local languagelookup=scriptlookup[language]
+ if not languagelookup then
+ local sequences=rawdata.resources.sequences
+ local featuremap={}
+ local featurelist={}
+ if sequences then
+ for s=1,#sequences do
+ local sequence=sequences[s]
+ local features=sequence.features
+ if features then
+ features=features[kind]
+ if features then
+ features=features[script] or features[wildcard]
+ if features then
+ features=features[language] or features[wildcard]
+ if features then
+ if not featuremap[sequence] then
+ featuremap[sequence]=true
+ featurelist[#featurelist+1]=sequence
+ end
+ end
+ end
+ end
+ end
+ end
+ if #featurelist==0 then
+ featuremap,featurelist=false,false
+ end
+ else
+ featuremap,featurelist=false,false
+ end
+ languagelookup={ featuremap,featurelist }
+ scriptlookup[language]=languagelookup
+ end
+ return unpack(languagelookup)
+end
+local function getgsub(tfmdata,k,kind,value)
+ local shared=tfmdata.shared
+ local rawdata=shared and shared.rawdata
+ if rawdata then
+ local sequences=rawdata.resources.sequences
+ if sequences then
+ local properties=tfmdata.properties
+ local validlookups,lookuplist=otf.collectlookups(rawdata,kind,properties.script,properties.language)
+ if validlookups then
+ for i=1,#lookuplist do
+ local lookup=lookuplist[i]
+ local steps=lookup.steps
+ local nofsteps=lookup.nofsteps
+ for i=1,nofsteps do
+ local coverage=steps[i].coverage
+ if coverage then
+ local found=coverage[k]
+ if found then
+ return found,lookup.type
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+end
+otf.getgsub=getgsub
+function otf.getsubstitution(tfmdata,k,kind,value)
+ local found,kind=getgsub(tfmdata,k,kind,value)
+ if not found then
+ elseif kind=="gsub_single" then
+ return found
+ elseif kind=="gsub_alternate" then
+ local choice=tonumber(value) or 1
+ return found[choice] or found[1] or k
+ end
+ return k
+end
+otf.getalternate=otf.getsubstitution
+function otf.getmultiple(tfmdata,k,kind)
+ local found,kind=getgsub(tfmdata,k,kind)
+ if found and kind=="gsub_multiple" then
+ return found
+ end
+ return { k }
+end
+function otf.getkern(tfmdata,left,right,kind)
+ local kerns=getgsub(tfmdata,left,kind or "kern",true)
+ if kerns then
+ local found=kerns[right]
+ local kind=type(found)
+ if kind=="table" then
+ found=found[1][3]
+ elseif kind~="number" then
+ found=false
+ end
+ if found then
+ return found*tfmdata.parameters.factor
+ end
+ end
+ return 0
+end
+local function check_otf(forced,specification,suffix)
+ local name=specification.name
+ if forced then
+ name=specification.forcedname
+ end
+ local fullname=findbinfile(name,suffix) or ""
+ if fullname=="" then
+ fullname=fonts.names.getfilename(name,suffix) or ""
+ end
+ if fullname~="" and not fonts.names.ignoredfile(fullname) then
+ specification.filename=fullname
+ return read_from_otf(specification)
+ end
+end
+local function opentypereader(specification,suffix)
+ local forced=specification.forced or ""
+ if formats[forced] then
+ return check_otf(true,specification,forced)
+ else
+ return check_otf(false,specification,suffix)
+ end
+end
+readers.opentype=opentypereader
+function readers.otf(specification) return opentypereader(specification,"otf") end
+function readers.ttf(specification) return opentypereader(specification,"ttf") end
+function readers.ttc(specification) return opentypereader(specification,"ttf") end
+function readers.woff(specification)
+ checkconversion(specification)
+ opentypereader(specification,"")
+end
+function otf.scriptandlanguage(tfmdata,attr)
+ local properties=tfmdata.properties
+ return properties.script or "dflt",properties.language or "dflt"
+end
+local function justset(coverage,unicode,replacement)
+ coverage[unicode]=replacement
+end
+otf.coverup={
+ stepkey="steps",
+ actions={
+ chainsubstitution=justset,
+ chainposition=justset,
+ substitution=justset,
+ alternate=justset,
+ multiple=justset,
+ kern=justset,
+ pair=justset,
+ single=justset,
+ ligature=function(coverage,unicode,ligature)
+ local first=ligature[1]
+ local tree=coverage[first]
+ if not tree then
+ tree={}
+ coverage[first]=tree
+ end
+ for i=2,#ligature do
+ local l=ligature[i]
+ local t=tree[l]
+ if not t then
+ t={}
+ tree[l]=t
+ end
+ tree=t
+ end
+ tree.ligature=unicode
+ end,
+ },
+ register=function(coverage,featuretype,format)
+ return {
+ format=format,
+ coverage=coverage,
+ }
+ end
+}
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-oto']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local concat,unpack=table.concat,table.unpack
+local insert,remove=table.insert,table.remove
+local format,gmatch,gsub,find,match,lower,strip=string.format,string.gmatch,string.gsub,string.find,string.match,string.lower,string.strip
+local type,next,tonumber,tostring,rawget=type,next,tonumber,tostring,rawget
+local trace_baseinit=false trackers.register("otf.baseinit",function(v) trace_baseinit=v end)
+local trace_singles=false trackers.register("otf.singles",function(v) trace_singles=v end)
+local trace_multiples=false trackers.register("otf.multiples",function(v) trace_multiples=v end)
+local trace_alternatives=false trackers.register("otf.alternatives",function(v) trace_alternatives=v end)
+local trace_ligatures=false trackers.register("otf.ligatures",function(v) trace_ligatures=v end)
+local trace_kerns=false trackers.register("otf.kerns",function(v) trace_kerns=v end)
+local trace_preparing=false trackers.register("otf.preparing",function(v) trace_preparing=v end)
+local report_prepare=logs.reporter("fonts","otf prepare")
+local fonts=fonts
+local otf=fonts.handlers.otf
+local otffeatures=otf.features
+local registerotffeature=otffeatures.register
+otf.defaultbasealternate="none"
+local getprivate=fonts.constructors.getprivate
+local wildcard="*"
+local default="dflt"
+local formatters=string.formatters
+local f_unicode=formatters["%U"]
+local f_uniname=formatters["%U (%s)"]
+local f_unilist=formatters["% t (% t)"]
+local function gref(descriptions,n)
+ if type(n)=="number" then
+ local name=descriptions[n].name
+ if name then
+ return f_uniname(n,name)
+ else
+ return f_unicode(n)
+ end
+ elseif n then
+ local num,nam,j={},{},0
+ for i=1,#n do
+ local ni=n[i]
+ if tonumber(ni) then
+ j=j+1
+ local di=descriptions[ni]
+ num[j]=f_unicode(ni)
+ nam[j]=di and di.name or "-"
+ end
+ end
+ return f_unilist(num,nam)
+ else
+ return "<error in base mode tracing>"
+ end
+end
+local function cref(feature,sequence)
+ return formatters["feature %a, type %a, chain lookup %a"](feature,sequence.type,sequence.name)
+end
+local function report_substitution(feature,sequence,descriptions,unicode,substitution)
+ if unicode==substitution then
+ report_prepare("%s: base substitution %s maps onto itself",
+ cref(feature,sequence),
+ gref(descriptions,unicode))
+ else
+ report_prepare("%s: base substitution %s => %S",
+ cref(feature,sequence),
+ gref(descriptions,unicode),
+ gref(descriptions,substitution))
+ end
+end
+local function report_alternate(feature,sequence,descriptions,unicode,replacement,value,comment)
+ if unicode==replacement then
+ report_prepare("%s: base alternate %s maps onto itself",
+ cref(feature,sequence),
+ gref(descriptions,unicode))
+ else
+ report_prepare("%s: base alternate %s => %s (%S => %S)",
+ cref(feature,sequence),
+ gref(descriptions,unicode),
+ replacement and gref(descriptions,replacement),
+ value,
+ comment)
+ end
+end
+local function report_ligature(feature,sequence,descriptions,unicode,ligature)
+ report_prepare("%s: base ligature %s => %S",
+ cref(feature,sequence),
+ gref(descriptions,ligature),
+ gref(descriptions,unicode))
+end
+local function report_kern(feature,sequence,descriptions,unicode,otherunicode,value)
+ report_prepare("%s: base kern %s + %s => %S",
+ cref(feature,sequence),
+ gref(descriptions,unicode),
+ gref(descriptions,otherunicode),
+ value)
+end
+local basehash,basehashes,applied={},1,{}
+local function registerbasehash(tfmdata)
+ local properties=tfmdata.properties
+ local hash=concat(applied," ")
+ local base=basehash[hash]
+ if not base then
+ basehashes=basehashes+1
+ base=basehashes
+ basehash[hash]=base
+ end
+ properties.basehash=base
+ properties.fullname=(properties.fullname or properties.name).."-"..base
+ applied={}
+end
+local function registerbasefeature(feature,value)
+ applied[#applied+1]=feature.."="..tostring(value)
+end
+local function makefake(tfmdata,name,present)
+ local private=getprivate(tfmdata)
+ local character={ intermediate=true,ligatures={} }
+ resources.unicodes[name]=private
+ tfmdata.characters[private]=character
+ tfmdata.descriptions[private]={ name=name }
+ present[name]=private
+ return character
+end
+local function make_1(present,tree,name)
+ for k,v in next,tree do
+ if k=="ligature" then
+ present[name]=v
+ else
+ make_1(present,v,name.."_"..k)
+ end
+ end
+end
+local function make_2(present,tfmdata,characters,tree,name,preceding,unicode,done)
+ for k,v in next,tree do
+ if k=="ligature" then
+ local character=characters[preceding]
+ if not character then
+ if trace_baseinit then
+ report_prepare("weird ligature in lookup %a, current %C, preceding %C",sequence.name,v,preceding)
+ end
+ character=makefake(tfmdata,name,present)
+ end
+ local ligatures=character.ligatures
+ if ligatures then
+ ligatures[unicode]={ char=v }
+ else
+ character.ligatures={ [unicode]={ char=v } }
+ end
+ if done then
+ local d=done[name]
+ if not d then
+ done[name]={ "dummy",v }
+ else
+ d[#d+1]=v
+ end
+ end
+ else
+ local code=present[name] or unicode
+ local name=name.."_"..k
+ make_2(present,tfmdata,characters,v,name,code,k,done)
+ end
+ end
+end
+local function preparesubstitutions(tfmdata,feature,value,validlookups,lookuplist)
+ local characters=tfmdata.characters
+ local descriptions=tfmdata.descriptions
+ local resources=tfmdata.resources
+ local changed=tfmdata.changed
+ local ligatures={}
+ local alternate=tonumber(value) or true and 1
+ local defaultalt=otf.defaultbasealternate
+ local trace_singles=trace_baseinit and trace_singles
+ local trace_alternatives=trace_baseinit and trace_alternatives
+ local trace_ligatures=trace_baseinit and trace_ligatures
+ if not changed then
+ changed={}
+ tfmdata.changed=changed
+ end
+ for i=1,#lookuplist do
+ local sequence=lookuplist[i]
+ local steps=sequence.steps
+ local kind=sequence.type
+ if kind=="gsub_single" then
+ for i=1,#steps do
+ for unicode,data in next,steps[i].coverage do
+ if unicode~=data then
+ changed[unicode]=data
+ end
+ if trace_singles then
+ report_substitution(feature,sequence,descriptions,unicode,data)
+ end
+ end
+ end
+ elseif kind=="gsub_alternate" then
+ for i=1,#steps do
+ for unicode,data in next,steps[i].coverage do
+ local replacement=data[alternate]
+ if replacement then
+ if unicode~=replacement then
+ changed[unicode]=replacement
+ end
+ if trace_alternatives then
+ report_alternate(feature,sequence,descriptions,unicode,replacement,value,"normal")
+ end
+ elseif defaultalt=="first" then
+ replacement=data[1]
+ if unicode~=replacement then
+ changed[unicode]=replacement
+ end
+ if trace_alternatives then
+ report_alternate(feature,sequence,descriptions,unicode,replacement,value,defaultalt)
+ end
+ elseif defaultalt=="last" then
+ replacement=data[#data]
+ if unicode~=replacement then
+ changed[unicode]=replacement
+ end
+ if trace_alternatives then
+ report_alternate(feature,sequence,descriptions,unicode,replacement,value,defaultalt)
+ end
+ else
+ if trace_alternatives then
+ report_alternate(feature,sequence,descriptions,unicode,replacement,value,"unknown")
+ end
+ end
+ end
+ end
+ elseif kind=="gsub_ligature" then
+ for i=1,#steps do
+ for unicode,data in next,steps[i].coverage do
+ ligatures[#ligatures+1]={ unicode,data,"" }
+ if trace_ligatures then
+ report_ligature(feature,sequence,descriptions,unicode,data)
+ end
+ end
+ end
+ end
+ end
+ local nofligatures=#ligatures
+ if nofligatures>0 then
+ local characters=tfmdata.characters
+ local present={}
+ local done=trace_baseinit and trace_ligatures and {}
+ for i=1,nofligatures do
+ local ligature=ligatures[i]
+ local unicode,tree=ligature[1],ligature[2]
+ make_1(present,tree,"ctx_"..unicode)
+ end
+ for i=1,nofligatures do
+ local ligature=ligatures[i]
+ local unicode,tree,lookupname=ligature[1],ligature[2],ligature[3]
+ make_2(present,tfmdata,characters,tree,"ctx_"..unicode,unicode,unicode,done,sequence)
+ end
+ end
+end
+local function preparepositionings(tfmdata,feature,value,validlookups,lookuplist)
+ local characters=tfmdata.characters
+ local descriptions=tfmdata.descriptions
+ local resources=tfmdata.resources
+ local properties=tfmdata.properties
+ local traceindeed=trace_baseinit and trace_kerns
+ for i=1,#lookuplist do
+ local sequence=lookuplist[i]
+ local steps=sequence.steps
+ local kind=sequence.type
+ local format=sequence.format
+ if kind=="gpos_pair" then
+ for i=1,#steps do
+ local step=steps[i]
+ local format=step.format
+ if format=="kern" or format=="move" then
+ for unicode,data in next,steps[i].coverage do
+ local character=characters[unicode]
+ local kerns=character.kerns
+ if not kerns then
+ kerns={}
+ character.kerns=kerns
+ end
+ if traceindeed then
+ for otherunicode,kern in next,data do
+ if not kerns[otherunicode] and kern~=0 then
+ kerns[otherunicode]=kern
+ report_kern(feature,sequence,descriptions,unicode,otherunicode,kern)
+ end
+ end
+ else
+ for otherunicode,kern in next,data do
+ if not kerns[otherunicode] and kern~=0 then
+ kerns[otherunicode]=kern
+ end
+ end
+ end
+ end
+ else
+ for unicode,data in next,steps[i].coverage do
+ local character=characters[unicode]
+ local kerns=character.kerns
+ for otherunicode,kern in next,data do
+ local other=kern[2]
+ if other==true or (not other and not (kerns and kerns[otherunicode])) then
+ local kern=kern[1]
+ if kern==true then
+ elseif kern[1]~=0 or kern[2]~=0 or kern[4]~=0 then
+ else
+ kern=kern[3]
+ if kern~=0 then
+ if kerns then
+ kerns[otherunicode]=kern
+ else
+ kerns={ [otherunicode]=kern }
+ character.kerns=kerns
+ end
+ if traceindeed then
+ report_kern(feature,sequence,descriptions,unicode,otherunicode,kern)
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+end
+local function initializehashes(tfmdata)
+end
+local function checkmathreplacements(tfmdata,fullname)
+ if tfmdata.mathparameters then
+ local characters=tfmdata.characters
+ local changed=tfmdata.changed
+ if next(changed) then
+ if trace_preparing or trace_baseinit then
+ report_prepare("checking math replacements for %a",fullname)
+ end
+ for unicode,replacement in next,changed do
+ local u=characters[unicode]
+ local r=characters[replacement]
+ local n=u.next
+ local v=u.vert_variants
+ local h=u.horiz_variants
+ if n and not r.next then
+ if trace_preparing then
+ report_prepare("forcing %s for %C substituted by %U","incremental step",unicode,replacement)
+ end
+ r.next=n
+ end
+ if v and not r.vert_variants then
+ if trace_preparing then
+ report_prepare("forcing %s for %C substituted by %U","vertical variants",unicode,replacement)
+ end
+ r.vert_variants=v
+ end
+ if h and not r.horiz_variants then
+ if trace_preparing then
+ report_prepare("forcing %s for %C substituted by %U","horizontal variants",unicode,replacement)
+ end
+ r.horiz_variants=h
+ end
+ end
+ end
+ end
+end
+local function featuresinitializer(tfmdata,value)
+ if true then
+ local starttime=trace_preparing and os.clock()
+ local features=tfmdata.shared.features
+ local fullname=tfmdata.properties.fullname or "?"
+ if features then
+ initializehashes(tfmdata)
+ local collectlookups=otf.collectlookups
+ local rawdata=tfmdata.shared.rawdata
+ local properties=tfmdata.properties
+ local script=properties.script
+ local language=properties.language
+ local rawresources=rawdata.resources
+ local rawfeatures=rawresources and rawresources.features
+ local basesubstitutions=rawfeatures and rawfeatures.gsub
+ local basepositionings=rawfeatures and rawfeatures.gpos
+ local substitutionsdone=false
+ local positioningsdone=false
+ if basesubstitutions or basepositionings then
+ local sequences=tfmdata.resources.sequences
+ for s=1,#sequences do
+ local sequence=sequences[s]
+ local sfeatures=sequence.features
+ if sfeatures then
+ local order=sequence.order
+ if order then
+ for i=1,#order do
+ local feature=order[i]
+ local value=features[feature]
+ if value then
+ local validlookups,lookuplist=collectlookups(rawdata,feature,script,language)
+ if not validlookups then
+ elseif basesubstitutions and basesubstitutions[feature] then
+ if trace_preparing then
+ report_prepare("filtering base %s feature %a for %a with value %a","sub",feature,fullname,value)
+ end
+ preparesubstitutions(tfmdata,feature,value,validlookups,lookuplist)
+ registerbasefeature(feature,value)
+ substitutionsdone=true
+ elseif basepositionings and basepositionings[feature] then
+ if trace_preparing then
+ report_prepare("filtering base %a feature %a for %a with value %a","pos",feature,fullname,value)
+ end
+ preparepositionings(tfmdata,feature,value,validlookups,lookuplist)
+ registerbasefeature(feature,value)
+ positioningsdone=true
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ if substitutionsdone then
+ checkmathreplacements(tfmdata,fullname)
+ end
+ registerbasehash(tfmdata)
+ end
+ if trace_preparing then
+ report_prepare("preparation time is %0.3f seconds for %a",os.clock()-starttime,fullname)
+ end
+ end
+end
+registerotffeature {
+ name="features",
+ description="features",
+ default=true,
+ initializers={
+ base=featuresinitializer,
+ }
+}
+otf.basemodeinitializer=featuresinitializer
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-otj']={
+ version=1.001,
+ comment="companion to font-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files",
+}
+if not nodes.properties then return end
+local next,rawget,tonumber=next,rawget,tonumber
+local fastcopy=table.fastcopy
+local registertracker=trackers.register
+local trace_injections=false registertracker("fonts.injections",function(v) trace_injections=v end)
+local trace_marks=false registertracker("fonts.injections.marks",function(v) trace_marks=v end)
+local trace_cursive=false registertracker("fonts.injections.cursive",function(v) trace_cursive=v end)
+local trace_spaces=false registertracker("fonts.injections.spaces",function(v) trace_spaces=v end)
+local report_injections=logs.reporter("fonts","injections")
+local report_spaces=logs.reporter("fonts","spaces")
+local attributes,nodes,node=attributes,nodes,node
+fonts=fonts
+local hashes=fonts.hashes
+local fontdata=hashes.identifiers
+nodes.injections=nodes.injections or {}
+local injections=nodes.injections
+local tracers=nodes.tracers
+local setcolor=tracers and tracers.colors.set
+local resetcolor=tracers and tracers.colors.reset
+local nodecodes=nodes.nodecodes
+local glyph_code=nodecodes.glyph
+local disc_code=nodecodes.disc
+local kern_code=nodecodes.kern
+local glue_code=nodecodes.glue
+local nuts=nodes.nuts
+local nodepool=nuts.pool
+local tonode=nuts.tonode
+local tonut=nuts.tonut
+local getfield=nuts.getfield
+local setfield=nuts.setfield
+local getnext=nuts.getnext
+local getprev=nuts.getprev
+local getid=nuts.getid
+local getfont=nuts.getfont
+local getchar=nuts.getchar
+local getoffsets=nuts.getoffsets
+local getboth=nuts.getboth
+local getdisc=nuts.getdisc
+local setdisc=nuts.setdisc
+local setoffsets=nuts.setoffsets
+local ischar=nuts.is_char
+local getkern=nuts.getkern
+local setkern=nuts.setkern
+local setlink=nuts.setlink
+local setwidth=nuts.setwidth
+local getwidth=nuts.getwidth
+local traverse_id=nuts.traverse_id
+local traverse_char=nuts.traverse_char
+local insert_node_before=nuts.insert_before
+local insert_node_after=nuts.insert_after
+local properties=nodes.properties.data
+local fontkern=nuts.pool and nuts.pool.fontkern
+do if not fontkern then
+ local thekern=nuts.new("kern",0)
+ local setkern=nuts.setkern
+ local copy_node=nuts.copy_node
+ fontkern=function(k)
+ local n=copy_node(thekern)
+ setkern(n,k)
+ return n
+ end
+end end
+function injections.installnewkern() end
+local nofregisteredkerns=0
+local nofregisteredpositions=0
+local nofregisteredmarks=0
+local nofregisteredcursives=0
+local keepregisteredcounts=false
+function injections.keepcounts()
+ keepregisteredcounts=true
+end
+function injections.resetcounts()
+ nofregisteredkerns=0
+ nofregisteredpositions=0
+ nofregisteredmarks=0
+ nofregisteredcursives=0
+ keepregisteredcounts=false
+end
+function injections.reset(n)
+ local p=rawget(properties,n)
+ if p then
+ p.injections=false
+ else
+ properties[n]=false
+ end
+end
+function injections.copy(target,source)
+ local sp=rawget(properties,source)
+ if sp then
+ local tp=rawget(properties,target)
+ local si=sp.injections
+ if si then
+ si=fastcopy(si)
+ if tp then
+ tp.injections=si
+ else
+ properties[target]={
+ injections=si,
+ }
+ end
+ elseif tp then
+ tp.injections=false
+ else
+ properties[target]={ injections={} }
+ end
+ else
+ local tp=rawget(properties,target)
+ if tp then
+ tp.injections=false
+ else
+ properties[target]=false
+ end
+ end
+end
+function injections.setligaindex(n,index)
+ local p=rawget(properties,n)
+ if p then
+ local i=p.injections
+ if i then
+ i.ligaindex=index
+ else
+ p.injections={
+ ligaindex=index
+ }
+ end
+ else
+ properties[n]={
+ injections={
+ ligaindex=index
+ }
+ }
+ end
+end
+function injections.getligaindex(n,default)
+ local p=rawget(properties,n)
+ if p then
+ local i=p.injections
+ if i then
+ return i.ligaindex or default
+ end
+ end
+ return default
+end
+function injections.setcursive(start,nxt,factor,rlmode,exit,entry,tfmstart,tfmnext)
+ local dx=factor*(exit[1]-entry[1])
+ local dy=-factor*(exit[2]-entry[2])
+ local ws=tfmstart.width
+ local wn=tfmnext.width
+ nofregisteredcursives=nofregisteredcursives+1
+ if rlmode<0 then
+ dx=-(dx+wn)
+ else
+ dx=dx-ws
+ end
+ if dx==0 then
+ dx=0
+ end
+ local p=rawget(properties,start)
+ if p then
+ local i=p.injections
+ if i then
+ i.cursiveanchor=true
+ else
+ p.injections={
+ cursiveanchor=true,
+ }
+ end
+ else
+ properties[start]={
+ injections={
+ cursiveanchor=true,
+ },
+ }
+ end
+ local p=rawget(properties,nxt)
+ if p then
+ local i=p.injections
+ if i then
+ i.cursivex=dx
+ i.cursivey=dy
+ else
+ p.injections={
+ cursivex=dx,
+ cursivey=dy,
+ }
+ end
+ else
+ properties[nxt]={
+ injections={
+ cursivex=dx,
+ cursivey=dy,
+ },
+ }
+ end
+ return dx,dy,nofregisteredcursives
+end
+function injections.setposition(current,factor,rlmode,r2lflag,spec,injection)
+ local x=factor*spec[1]
+ local y=factor*spec[2]
+ local w=factor*spec[3]
+ local h=factor*spec[4]
+ if x~=0 or w~=0 or y~=0 or h~=0 then
+ local yoffset=y-h
+ local leftkern=x
+ local rightkern=w-x
+ if leftkern~=0 or rightkern~=0 or yoffset~=0 then
+ nofregisteredpositions=nofregisteredpositions+1
+ if rlmode and rlmode<0 then
+ leftkern,rightkern=rightkern,leftkern
+ end
+ if not injection then
+ injection="injections"
+ end
+ local p=rawget(properties,current)
+ if p then
+ local i=rawget(p,injection)
+ if i then
+ if leftkern~=0 then
+ i.leftkern=(i.leftkern or 0)+leftkern
+ end
+ if rightkern~=0 then
+ i.rightkern=(i.rightkern or 0)+rightkern
+ end
+ if yoffset~=0 then
+ i.yoffset=(i.yoffset or 0)+yoffset
+ end
+ elseif leftkern~=0 or rightkern~=0 then
+ p[injection]={
+ leftkern=leftkern,
+ rightkern=rightkern,
+ yoffset=yoffset,
+ }
+ else
+ p[injection]={
+ yoffset=yoffset,
+ }
+ end
+ elseif leftkern~=0 or rightkern~=0 then
+ properties[current]={
+ [injection]={
+ leftkern=leftkern,
+ rightkern=rightkern,
+ yoffset=yoffset,
+ },
+ }
+ else
+ properties[current]={
+ [injection]={
+ yoffset=yoffset,
+ },
+ }
+ end
+ return x,y,w,h,nofregisteredpositions
+ end
+ end
+ return x,y,w,h
+end
+function injections.setkern(current,factor,rlmode,x,injection)
+ local dx=factor*x
+ if dx~=0 then
+ nofregisteredkerns=nofregisteredkerns+1
+ local p=rawget(properties,current)
+ if not injection then
+ injection="injections"
+ end
+ if rlmode and rlmode<0 then
+ if p then
+ local i=rawget(p,injection)
+ if i then
+ i.leftkern=dx+(i.leftkern or 0)
+ else
+ p[injection]={
+ leftkern=dx,
+ }
+ end
+ else
+ properties[current]={
+ [injection]={
+ leftkern=dx,
+ },
+ }
+ end
+ else
+ if p then
+ local i=rawget(p,injection)
+ if i then
+ i.leftkern=dx+(i.leftkern or 0)
+ else
+ p[injection]={
+ leftkern=dx,
+ }
+ end
+ else
+ properties[current]={
+ [injection]={
+ leftkern=dx,
+ },
+ }
+ end
+ end
+ return dx,nofregisteredkerns
+ else
+ return 0,0
+ end
+end
+function injections.setmove(current,factor,rlmode,x,injection)
+ local dx=factor*x
+ if dx~=0 then
+ nofregisteredkerns=nofregisteredkerns+1
+ local p=rawget(properties,current)
+ if not injection then
+ injection="injections"
+ end
+ if rlmode and rlmode<0 then
+ if p then
+ local i=rawget(p,injection)
+ if i then
+ i.leftkern=dx+(i.leftkern or 0)
+ else
+ p[injection]={
+ leftkern=dx,
+ }
+ end
+ else
+ properties[current]={
+ [injection]={
+ leftkern=dx,
+ },
+ }
+ end
+ else
+ if p then
+ local i=rawget(p,injection)
+ if i then
+ i.leftkern=dx+(i.leftkern or 0)
+ else
+ p[injection]={
+ leftkern=dx,
+ }
+ end
+ else
+ properties[current]={
+ [injection]={
+ leftkern=dx,
+ },
+ }
+ end
+ end
+ return dx,nofregisteredkerns
+ else
+ return 0,0
+ end
+end
+function injections.setmark(start,base,factor,rlmode,ba,ma,tfmbase,mkmk,checkmark)
+ local dx,dy=factor*(ba[1]-ma[1]),factor*(ba[2]-ma[2])
+ nofregisteredmarks=nofregisteredmarks+1
+ if rlmode>=0 then
+ dx=tfmbase.width-dx
+ end
+ local p=rawget(properties,start)
+ if p then
+ local i=p.injections
+ if i then
+ if i.markmark then
+ else
+ i.markx=dx
+ i.marky=dy
+ i.markdir=rlmode or 0
+ i.markbase=nofregisteredmarks
+ i.markbasenode=base
+ i.markmark=mkmk
+ i.checkmark=checkmark
+ end
+ else
+ p.injections={
+ markx=dx,
+ marky=dy,
+ markdir=rlmode or 0,
+ markbase=nofregisteredmarks,
+ markbasenode=base,
+ markmark=mkmk,
+ checkmark=checkmark,
+ }
+ end
+ else
+ properties[start]={
+ injections={
+ markx=dx,
+ marky=dy,
+ markdir=rlmode or 0,
+ markbase=nofregisteredmarks,
+ markbasenode=base,
+ markmark=mkmk,
+ checkmark=checkmark,
+ },
+ }
+ end
+ return dx,dy,nofregisteredmarks
+end
+local function dir(n)
+ return (n and n<0 and "r-to-l") or (n and n>0 and "l-to-r") or "unset"
+end
+local function showchar(n,nested)
+ local char=getchar(n)
+ report_injections("%wfont %s, char %U, glyph %c",nested and 2 or 0,getfont(n),char,char)
+end
+local function show(n,what,nested,symbol)
+ if n then
+ local p=rawget(properties,n)
+ if p then
+ local i=rawget(p,what)
+ if i then
+ local leftkern=i.leftkern or 0
+ local rightkern=i.rightkern or 0
+ local yoffset=i.yoffset or 0
+ local markx=i.markx or 0
+ local marky=i.marky or 0
+ local markdir=i.markdir or 0
+ local markbase=i.markbase or 0
+ local cursivex=i.cursivex or 0
+ local cursivey=i.cursivey or 0
+ local ligaindex=i.ligaindex or 0
+ local cursbase=i.cursiveanchor
+ local margin=nested and 4 or 2
+ if rightkern~=0 or yoffset~=0 then
+ report_injections("%w%s pair: lx %p, rx %p, dy %p",margin,symbol,leftkern,rightkern,yoffset)
+ elseif leftkern~=0 then
+ report_injections("%w%s kern: dx %p",margin,symbol,leftkern)
+ end
+ if markx~=0 or marky~=0 or markbase~=0 then
+ report_injections("%w%s mark: dx %p, dy %p, dir %s, base %s",margin,symbol,markx,marky,markdir,markbase~=0 and "yes" or "no")
+ end
+ if cursivex~=0 or cursivey~=0 then
+ if cursbase then
+ report_injections("%w%s curs: base dx %p, dy %p",margin,symbol,cursivex,cursivey)
+ else
+ report_injections("%w%s curs: dx %p, dy %p",margin,symbol,cursivex,cursivey)
+ end
+ elseif cursbase then
+ report_injections("%w%s curs: base",margin,symbol)
+ end
+ if ligaindex~=0 then
+ report_injections("%w%s liga: index %i",margin,symbol,ligaindex)
+ end
+ end
+ end
+ end
+end
+local function showsub(n,what,where)
+ report_injections("begin subrun: %s",where)
+ for n in traverse_char(n) do
+ showchar(n,where)
+ show(n,what,where," ")
+ end
+ report_injections("end subrun")
+end
+local function trace(head,where)
+ report_injections()
+ report_injections("begin run %s: %s kerns, %s positions, %s marks and %s cursives registered",
+ where or "",nofregisteredkerns,nofregisteredpositions,nofregisteredmarks,nofregisteredcursives)
+ local n=head
+ while n do
+ local id=getid(n)
+ if id==glyph_code then
+ showchar(n)
+ show(n,"injections",false," ")
+ show(n,"preinjections",false,"<")
+ show(n,"postinjections",false,">")
+ show(n,"replaceinjections",false,"=")
+ show(n,"emptyinjections",false,"*")
+ elseif id==disc_code then
+ local pre,post,replace=getdisc(n)
+ if pre then
+ showsub(pre,"preinjections","pre")
+ end
+ if post then
+ showsub(post,"postinjections","post")
+ end
+ if replace then
+ showsub(replace,"replaceinjections","replace")
+ end
+ show(n,"emptyinjections",false,"*")
+ end
+ n=getnext(n)
+ end
+ report_injections("end run")
+end
+local function show_result(head)
+ local current=head
+ local skipping=false
+ while current do
+ local id=getid(current)
+ if id==glyph_code then
+ local w=getwidth(current)
+ local x,y=getoffsets(current)
+ report_injections("char: %C, width %p, xoffset %p, yoffset %p",getchar(current),w,x,y)
+ skipping=false
+ elseif id==kern_code then
+ report_injections("kern: %p",getkern(current))
+ skipping=false
+ elseif not skipping then
+ report_injections()
+ skipping=true
+ end
+ current=getnext(current)
+ end
+ report_injections()
+end
+local function inject_kerns_only(head,where)
+ head=tonut(head)
+ if trace_injections then
+ trace(head,"kerns")
+ end
+ local current=head
+ local prev=nil
+ local next=nil
+ local prevdisc=nil
+ local pre=nil
+ local post=nil
+ local replace=nil
+ local pretail=nil
+ local posttail=nil
+ local replacetail=nil
+ while current do
+ local next=getnext(current)
+ local char,id=ischar(current)
+ if char then
+ local p=rawget(properties,current)
+ if p then
+ local i=p.injections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ head=insert_node_before(head,current,fontkern(leftkern))
+ end
+ end
+ if prevdisc then
+ local done=false
+ if post then
+ local i=p.postinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ setlink(posttail,fontkern(leftkern))
+ done=true
+ end
+ end
+ end
+ if replace then
+ local i=p.replaceinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ setlink(replacetail,fontkern(leftkern))
+ done=true
+ end
+ end
+ else
+ local i=p.emptyinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ setfield(prev,"replace",fontkern(leftkern))
+ end
+ end
+ end
+ if done then
+ setdisc(prevdisc,pre,post,replace)
+ end
+ end
+ end
+ prevdisc=nil
+ elseif char==false then
+ prevdisc=nil
+ elseif id==disc_code then
+ pre,post,replace,pretail,posttail,replacetail=getdisc(current,true)
+ local done=false
+ if pre then
+ for n in traverse_char(pre) do
+ local p=rawget(properties,n)
+ if p then
+ local i=p.injections or p.preinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ pre=insert_node_before(pre,n,fontkern(leftkern))
+ done=true
+ end
+ end
+ end
+ end
+ end
+ if post then
+ for n in traverse_char(post) do
+ local p=rawget(properties,n)
+ if p then
+ local i=p.injections or p.postinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ post=insert_node_before(post,n,fontkern(leftkern))
+ done=true
+ end
+ end
+ end
+ end
+ end
+ if replace then
+ for n in traverse_char(replace) do
+ local p=rawget(properties,n)
+ if p then
+ local i=p.injections or p.replaceinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ replace=insert_node_before(replace,n,fontkern(leftkern))
+ done=true
+ end
+ end
+ end
+ end
+ end
+ if done then
+ setdisc(current,pre,post,replace)
+ end
+ prevdisc=current
+ else
+ prevdisc=nil
+ end
+ prev=current
+ current=next
+ end
+ if keepregisteredcounts then
+ keepregisteredcounts=false
+ else
+ nofregisteredkerns=0
+ end
+ if trace_injections then
+ show_result(head)
+ end
+ return tonode(head),true
+end
+local function inject_positions_only(head,where)
+ head=tonut(head)
+ if trace_injections then
+ trace(head,"positions")
+ end
+ local current=head
+ local prev=nil
+ local next=nil
+ local prevdisc=nil
+ local prevglyph=nil
+ local pre=nil
+ local post=nil
+ local replace=nil
+ local pretail=nil
+ local posttail=nil
+ local replacetail=nil
+ while current do
+ local next=getnext(current)
+ local char,id=ischar(current)
+ if char then
+ local p=rawget(properties,current)
+ if p then
+ local i=p.injections
+ if i then
+ local yoffset=i.yoffset
+ if yoffset and yoffset~=0 then
+ setoffsets(current,false,yoffset)
+ end
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ head=insert_node_before(head,current,fontkern(leftkern))
+ end
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ insert_node_after(head,current,fontkern(rightkern))
+ end
+ else
+ local i=p.emptyinjections
+ if i then
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ if next and getid(next)==disc_code then
+ if replace then
+ else
+ setfield(next,"replace",fontkern(rightkern))
+ end
+ end
+ end
+ end
+ end
+ if prevdisc then
+ local done=false
+ if post then
+ local i=p.postinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ setlink(posttail,fontkern(leftkern))
+ done=true
+ end
+ end
+ end
+ if replace then
+ local i=p.replaceinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ setlink(replacetail,fontkern(leftkern))
+ done=true
+ end
+ end
+ else
+ local i=p.emptyinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ setfield(prev,"replace",fontkern(leftkern))
+ end
+ end
+ end
+ if done then
+ setdisc(prevdisc,pre,post,replace)
+ end
+ end
+ end
+ prevdisc=nil
+ prevglyph=current
+ elseif char==false then
+ prevdisc=nil
+ prevglyph=current
+ elseif id==disc_code then
+ pre,post,replace,pretail,posttail,replacetail=getdisc(current,true)
+ local done=false
+ if pre then
+ for n in traverse_char(pre) do
+ local p=rawget(properties,n)
+ if p then
+ local i=p.injections or p.preinjections
+ if i then
+ local yoffset=i.yoffset
+ if yoffset and yoffset~=0 then
+ setoffsets(n,false,yoffset)
+ end
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ pre=insert_node_before(pre,n,fontkern(leftkern))
+ done=true
+ end
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ insert_node_after(pre,n,fontkern(rightkern))
+ done=true
+ end
+ end
+ end
+ end
+ end
+ if post then
+ for n in traverse_char(post) do
+ local p=rawget(properties,n)
+ if p then
+ local i=p.injections or p.postinjections
+ if i then
+ local yoffset=i.yoffset
+ if yoffset and yoffset~=0 then
+ setoffsets(n,false,yoffset)
+ end
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ post=insert_node_before(post,n,fontkern(leftkern))
+ done=true
+ end
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ insert_node_after(post,n,fontkern(rightkern))
+ done=true
+ end
+ end
+ end
+ end
+ end
+ if replace then
+ for n in traverse_char(replace) do
+ local p=rawget(properties,n)
+ if p then
+ local i=p.injections or p.replaceinjections
+ if i then
+ local yoffset=i.yoffset
+ if yoffset and yoffset~=0 then
+ setoffsets(n,false,yoffset)
+ end
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ replace=insert_node_before(replace,n,fontkern(leftkern))
+ done=true
+ end
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ insert_node_after(replace,n,fontkern(rightkern))
+ done=true
+ end
+ end
+ end
+ end
+ end
+ if prevglyph then
+ if pre then
+ local p=rawget(properties,prevglyph)
+ if p then
+ local i=p.preinjections
+ if i then
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ pre=insert_node_before(pre,pre,fontkern(rightkern))
+ done=true
+ end
+ end
+ end
+ end
+ if replace then
+ local p=rawget(properties,prevglyph)
+ if p then
+ local i=p.replaceinjections
+ if i then
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ replace=insert_node_before(replace,replace,fontkern(rightkern))
+ done=true
+ end
+ end
+ end
+ end
+ end
+ if done then
+ setdisc(current,pre,post,replace)
+ end
+ prevglyph=nil
+ prevdisc=current
+ else
+ prevglyph=nil
+ prevdisc=nil
+ end
+ prev=current
+ current=next
+ end
+ if keepregisteredcounts then
+ keepregisteredcounts=false
+ else
+ nofregisteredpositions=0
+ end
+ if trace_injections then
+ show_result(head)
+ end
+ return tonode(head),true
+end
+local function showoffset(n,flag)
+ local x,y=getoffsets(n)
+ if x~=0 or y~=0 then
+ setcolor(n,"darkgray")
+ end
+end
+local function inject_everything(head,where)
+ head=tonut(head)
+ if trace_injections then
+ trace(head,"everything")
+ end
+ local hascursives=nofregisteredcursives>0
+ local hasmarks=nofregisteredmarks>0
+ local current=head
+ local last=nil
+ local font=font
+ local markdata=nil
+ local prev=nil
+ local next=nil
+ local prevdisc=nil
+ local prevglyph=nil
+ local pre=nil
+ local post=nil
+ local replace=nil
+ local pretail=nil
+ local posttail=nil
+ local replacetail=nil
+ local cursiveanchor=nil
+ local minc=0
+ local maxc=0
+ local glyphs={}
+ local marks={}
+ local nofmarks=0
+ local function processmark(p,n,pn)
+ local px,py=getoffsets(p)
+ local nx,ny=getoffsets(n)
+ local ox=0
+ local rightkern=nil
+ local pp=rawget(properties,p)
+ if pp then
+ pp=pp.injections
+ if pp then
+ rightkern=pp.rightkern
+ end
+ end
+ if rightkern then
+ if pn.markdir<0 then
+ ox=px-pn.markx-rightkern
+ else
+ if false then
+ local leftkern=pp.leftkern
+ if leftkern then
+ ox=px-pn.markx-leftkern
+ else
+ ox=px-pn.markx
+ end
+ else
+ ox=px-pn.markx-rightkern
+ end
+ end
+ else
+ if pn.markdir<0 then
+ ox=px-pn.markx
+if not pn.markmark then
+ ox=ox+(pn.leftkern or 0)
+end
+ else
+ ox=px-pn.markx
+ end
+ if pn.checkmark then
+ local wn=getwidth(n)
+ if wn and wn~=0 then
+ wn=wn/2
+ if trace_injections then
+ report_injections("correcting non zero width mark %C",getchar(n))
+ end
+ insert_node_before(n,n,fontkern(-wn))
+ insert_node_after(n,n,fontkern(-wn))
+ end
+ end
+ end
+ local oy=ny+py+pn.marky
+if not pn.markmark then
+ oy=oy+(pn.yoffset or 0)
+end
+ setoffsets(n,ox,oy)
+ if trace_marks then
+ showoffset(n,true)
+ end
+ end
+ while current do
+ local next=getnext(current)
+ local char,id=ischar(current)
+ if char then
+ local p=rawget(properties,current)
+ if p then
+ local i=p.injections
+ if i then
+ local pm=i.markbasenode
+ if pm then
+ nofmarks=nofmarks+1
+ marks[nofmarks]=current
+ else
+ local yoffset=i.yoffset
+ if yoffset and yoffset~=0 then
+ setoffsets(current,false,yoffset)
+ end
+ if hascursives then
+ local cursivex=i.cursivex
+ if cursivex then
+ if cursiveanchor then
+ if cursivex~=0 then
+ i.leftkern=(i.leftkern or 0)+cursivex
+ end
+ if maxc==0 then
+ minc=1
+ maxc=1
+ glyphs[1]=cursiveanchor
+ else
+ maxc=maxc+1
+ glyphs[maxc]=cursiveanchor
+ end
+ properties[cursiveanchor].cursivedy=i.cursivey
+ last=current
+ else
+ maxc=0
+ end
+ elseif maxc>0 then
+ local nx,ny=getoffsets(current)
+ for i=maxc,minc,-1 do
+ local ti=glyphs[i]
+ ny=ny+properties[ti].cursivedy
+ setoffsets(ti,false,ny)
+ if trace_cursive then
+ showoffset(ti)
+ end
+ end
+ maxc=0
+ cursiveanchor=nil
+ end
+ if i.cursiveanchor then
+ cursiveanchor=current
+ else
+ if maxc>0 then
+ local nx,ny=getoffsets(current)
+ for i=maxc,minc,-1 do
+ local ti=glyphs[i]
+ ny=ny+properties[ti].cursivedy
+ setoffsets(ti,false,ny)
+ if trace_cursive then
+ showoffset(ti)
+ end
+ end
+ maxc=0
+ end
+ cursiveanchor=nil
+ end
+ end
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ head=insert_node_before(head,current,fontkern(leftkern))
+ end
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ insert_node_after(head,current,fontkern(rightkern))
+ end
+ end
+ else
+ local i=p.emptyinjections
+ if i then
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ if next and getid(next)==disc_code then
+ if replace then
+ else
+ setfield(next,"replace",fontkern(rightkern))
+ end
+ end
+ end
+ end
+ end
+ if prevdisc then
+ if p then
+ local done=false
+ if post then
+ local i=p.postinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ setlink(posttail,fontkern(leftkern))
+ done=true
+ end
+ end
+ end
+ if replace then
+ local i=p.replaceinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ setlink(replacetail,fontkern(leftkern))
+ done=true
+ end
+ end
+ else
+ local i=p.emptyinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ setfield(prev,"replace",fontkern(leftkern))
+ end
+ end
+ end
+ if done then
+ setdisc(prevdisc,pre,post,replace)
+ end
+ end
+ end
+ else
+ if hascursives and maxc>0 then
+ local nx,ny=getoffsets(current)
+ for i=maxc,minc,-1 do
+ local ti=glyphs[i]
+ ny=ny+properties[ti].cursivedy
+ local xi,yi=getoffsets(ti)
+ setoffsets(ti,xi,yi+ny)
+ end
+ maxc=0
+ cursiveanchor=nil
+ end
+ end
+ prevdisc=nil
+ prevglyph=current
+ elseif char==false then
+ prevdisc=nil
+ prevglyph=current
+ elseif id==disc_code then
+ pre,post,replace,pretail,posttail,replacetail=getdisc(current,true)
+ local done=false
+ if pre then
+ for n in traverse_char(pre) do
+ local p=rawget(properties,n)
+ if p then
+ local i=p.injections or p.preinjections
+ if i then
+ local yoffset=i.yoffset
+ if yoffset and yoffset~=0 then
+ setoffsets(n,false,yoffset)
+ end
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ pre=insert_node_before(pre,n,fontkern(leftkern))
+ done=true
+ end
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ insert_node_after(pre,n,fontkern(rightkern))
+ done=true
+ end
+ if hasmarks then
+ local pm=i.markbasenode
+ if pm then
+ processmark(pm,n,i)
+ end
+ end
+ end
+ end
+ end
+ end
+ if post then
+ for n in traverse_char(post) do
+ local p=rawget(properties,n)
+ if p then
+ local i=p.injections or p.postinjections
+ if i then
+ local yoffset=i.yoffset
+ if yoffset and yoffset~=0 then
+ setoffsets(n,false,yoffset)
+ end
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ post=insert_node_before(post,n,fontkern(leftkern))
+ done=true
+ end
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ insert_node_after(post,n,fontkern(rightkern))
+ done=true
+ end
+ if hasmarks then
+ local pm=i.markbasenode
+ if pm then
+ processmark(pm,n,i)
+ end
+ end
+ end
+ end
+ end
+ end
+ if replace then
+ for n in traverse_char(replace) do
+ local p=rawget(properties,n)
+ if p then
+ local i=p.injections or p.replaceinjections
+ if i then
+ local yoffset=i.yoffset
+ if yoffset and yoffset~=0 then
+ setoffsets(n,false,yoffset)
+ end
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ replace=insert_node_before(replace,n,fontkern(leftkern))
+ done=true
+ end
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ insert_node_after(replace,n,fontkern(rightkern))
+ done=true
+ end
+ if hasmarks then
+ local pm=i.markbasenode
+ if pm then
+ processmark(pm,n,i)
+ end
+ end
+ end
+ end
+ end
+ end
+ if prevglyph then
+ if pre then
+ local p=rawget(properties,prevglyph)
+ if p then
+ local i=p.preinjections
+ if i then
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ pre=insert_node_before(pre,pre,fontkern(rightkern))
+ done=true
+ end
+ end
+ end
+ end
+ if replace then
+ local p=rawget(properties,prevglyph)
+ if p then
+ local i=p.replaceinjections
+ if i then
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ replace=insert_node_before(replace,replace,fontkern(rightkern))
+ done=true
+ end
+ end
+ end
+ end
+ end
+ if done then
+ setdisc(current,pre,post,replace)
+ end
+ prevglyph=nil
+ prevdisc=current
+ else
+ prevglyph=nil
+ prevdisc=nil
+ end
+ prev=current
+ current=next
+ end
+ if hascursives and maxc>0 then
+ local nx,ny=getoffsets(last)
+ for i=maxc,minc,-1 do
+ local ti=glyphs[i]
+ ny=ny+properties[ti].cursivedy
+ setoffsets(ti,false,ny)
+ if trace_cursive then
+ showoffset(ti)
+ end
+ end
+ end
+ if nofmarks>0 then
+ for i=1,nofmarks do
+ local m=marks[i]
+ local p=rawget(properties,m)
+ local i=p.injections
+ local b=i.markbasenode
+ processmark(b,m,i)
+ end
+ elseif hasmarks then
+ end
+ if keepregisteredcounts then
+ keepregisteredcounts=false
+ else
+ nofregisteredkerns=0
+ nofregisteredpositions=0
+ nofregisteredmarks=0
+ nofregisteredcursives=0
+ end
+ if trace_injections then
+ show_result(head)
+ end
+ return tonode(head),true
+end
+local triggers=false
+function nodes.injections.setspacekerns(font,sequence)
+ if triggers then
+ triggers[font]=sequence
+ else
+ triggers={ [font]=sequence }
+ end
+end
+local getthreshold
+if context then
+ local threshold=1
+ local parameters=fonts.hashes.parameters
+ directives.register("otf.threshold",function(v) threshold=tonumber(v) or 1 end)
+ getthreshold=function(font)
+ local p=parameters[font]
+ local f=p.factor
+ local s=p.spacing
+ local t=threshold*(s and s.width or p.space or 0)-2
+ return t>0 and t or 0,f
+ end
+else
+ injections.threshold=0
+ getthreshold=function(font)
+ local p=fontdata[font].parameters
+ local f=p.factor
+ local s=p.spacing
+ local t=injections.threshold*(s and s.width or p.space or 0)-2
+ return t>0 and t or 0,f
+ end
+end
+injections.getthreshold=getthreshold
+function injections.isspace(n,threshold,id)
+ if (id or getid(n))==glue_code then
+ local w=getwidth(n)
+ if threshold and w>threshold then
+ return 32
+ end
+ end
+end
+local getspaceboth=getboth
+function injections.installgetspaceboth(gb)
+ getspaceboth=gb or getboth
+end
+local function injectspaces(head)
+ if not triggers then
+ return head,false
+ end
+ local lastfont=nil
+ local spacekerns=nil
+ local leftkerns=nil
+ local rightkerns=nil
+ local factor=0
+ local threshold=0
+ local leftkern=false
+ local rightkern=false
+ local function updatefont(font,trig)
+ leftkerns=trig.left
+ rightkerns=trig.right
+ lastfont=font
+ threshold,
+ factor=getthreshold(font)
+ end
+ for n in traverse_char(tonut(head)) do
+ local prev,next=getspaceboth(n)
+ local prevchar=prev and ischar(prev)
+ local nextchar=next and ischar(next)
+ if nextchar then
+ local font=getfont(next)
+ local trig=triggers[font]
+ if trig then
+ if lastfont~=font then
+ updatefont(font,trig)
+ end
+ if rightkerns then
+ rightkern=rightkerns[nextchar]
+ end
+ end
+ end
+ if prevchar then
+ local font=getfont(prev)
+ local trig=triggers[font]
+ if trig then
+ if lastfont~=font then
+ updatefont(font,trig)
+ end
+ if leftkerns then
+ leftkern=leftkerns[prevchar]
+ end
+ end
+ end
+ if leftkern then
+ local old=getwidth(n)
+ if old>threshold then
+ if rightkern then
+ local new=old+(leftkern+rightkern)*factor
+ if trace_spaces then
+ report_spaces("%C [%p -> %p] %C",prevchar,old,new,nextchar)
+ end
+ setwidth(n,new)
+ leftkern=false
+ else
+ local new=old+leftkern*factor
+ if trace_spaces then
+ report_spaces("%C [%p -> %p]",prevchar,old,new)
+ end
+ setwidth(n,new)
+ end
+ end
+ leftkern=false
+ elseif rightkern then
+ local old=getwidth(n)
+ if old>threshold then
+ local new=old+rightkern*factor
+ if trace_spaces then
+ report_spaces("[%p -> %p] %C",nextchar,old,new)
+ end
+ setwidth(n,new)
+ end
+ rightkern=false
+ end
+ end
+ triggers=false
+ return head,true
+end
+function injections.handler(head,where)
+ if triggers then
+ head=injectspaces(head)
+ end
+ if nofregisteredmarks>0 or nofregisteredcursives>0 then
+ if trace_injections then
+ report_injections("injection variant %a","everything")
+ end
+ return inject_everything(head,where)
+ elseif nofregisteredpositions>0 then
+ if trace_injections then
+ report_injections("injection variant %a","positions")
+ end
+ return inject_positions_only(head,where)
+ elseif nofregisteredkerns>0 then
+ if trace_injections then
+ report_injections("injection variant %a","kerns")
+ end
+ return inject_kerns_only(head,where)
+ else
+ return head,false
+ end
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-ota']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local type=type
+if not trackers then trackers={ register=function() end } end
+local fonts,nodes,node=fonts,nodes,node
+local allocate=utilities.storage.allocate
+local otf=fonts.handlers.otf
+local analyzers=fonts.analyzers
+local initializers=allocate()
+local methods=allocate()
+analyzers.initializers=initializers
+analyzers.methods=methods
+local a_state=attributes.private('state')
+local nuts=nodes.nuts
+local tonut=nuts.tonut
+local getnext=nuts.getnext
+local getprev=nuts.getprev
+local getprev=nuts.getprev
+local getprop=nuts.getprop
+local setprop=nuts.setprop
+local getfont=nuts.getfont
+local getsubtype=nuts.getsubtype
+local getchar=nuts.getchar
+local ischar=nuts.is_char
+local traverse_id=nuts.traverse_id
+local end_of_math=nuts.end_of_math
+local nodecodes=nodes.nodecodes
+local disc_code=nodecodes.disc
+local math_code=nodecodes.math
+local fontdata=fonts.hashes.identifiers
+local categories=characters and characters.categories or {}
+local chardata=characters and characters.data
+local otffeatures=fonts.constructors.features.otf
+local registerotffeature=otffeatures.register
+local s_init=1 local s_rphf=7
+local s_medi=2 local s_half=8
+local s_fina=3 local s_pref=9
+local s_isol=4 local s_blwf=10
+local s_mark=5 local s_pstf=11
+local s_rest=6
+local states={
+ init=s_init,
+ medi=s_medi,
+ med2=s_medi,
+ fina=s_fina,
+ fin2=s_fina,
+ fin3=s_fina,
+ isol=s_isol,
+ mark=s_mark,
+ rest=s_rest,
+ rphf=s_rphf,
+ half=s_half,
+ pref=s_pref,
+ blwf=s_blwf,
+ pstf=s_pstf,
+}
+local features={
+ init=s_init,
+ medi=s_medi,
+ med2=s_medi,
+ fina=s_fina,
+ fin2=s_fina,
+ fin3=s_fina,
+ isol=s_isol,
+ rphf=s_rphf,
+ half=s_half,
+ pref=s_pref,
+ blwf=s_blwf,
+ pstf=s_pstf,
+}
+analyzers.states=states
+analyzers.features=features
+analyzers.useunicodemarks=false
+function analyzers.setstate(head,font)
+ local useunicodemarks=analyzers.useunicodemarks
+ local tfmdata=fontdata[font]
+ local descriptions=tfmdata.descriptions
+ local first,last,current,n,done=nil,nil,head,0,false
+ current=tonut(current)
+ while current do
+ local char,id=ischar(current,font)
+ if char and not getprop(current,a_state) then
+ done=true
+ local d=descriptions[char]
+ if d then
+ if d.class=="mark" then
+ done=true
+ setprop(current,a_state,s_mark)
+ elseif useunicodemarks and categories[char]=="mn" then
+ done=true
+ setprop(current,a_state,s_mark)
+ elseif n==0 then
+ first,last,n=current,current,1
+ setprop(current,a_state,s_init)
+ else
+ last,n=current,n+1
+ setprop(current,a_state,s_medi)
+ end
+ else
+ if first and first==last then
+ setprop(last,a_state,s_isol)
+ elseif last then
+ setprop(last,a_state,s_fina)
+ end
+ first,last,n=nil,nil,0
+ end
+ elseif char==false then
+ if first and first==last then
+ setprop(last,a_state,s_isol)
+ elseif last then
+ setprop(last,a_state,s_fina)
+ end
+ first,last,n=nil,nil,0
+ if id==math_code then
+ current=end_of_math(current)
+ end
+ elseif id==disc_code then
+ setprop(current,a_state,s_medi)
+ last=current
+ else
+ if first and first==last then
+ setprop(last,a_state,s_isol)
+ elseif last then
+ setprop(last,a_state,s_fina)
+ end
+ first,last,n=nil,nil,0
+ if id==math_code then
+ current=end_of_math(current)
+ end
+ end
+ current=getnext(current)
+ end
+ if first and first==last then
+ setprop(last,a_state,s_isol)
+ elseif last then
+ setprop(last,a_state,s_fina)
+ end
+ return head,done
+end
+local function analyzeinitializer(tfmdata,value)
+ local script,language=otf.scriptandlanguage(tfmdata)
+ local action=initializers[script]
+ if not action then
+ elseif type(action)=="function" then
+ return action(tfmdata,value)
+ else
+ local action=action[language]
+ if action then
+ return action(tfmdata,value)
+ end
+ end
+end
+local function analyzeprocessor(head,font,attr)
+ local tfmdata=fontdata[font]
+ local script,language=otf.scriptandlanguage(tfmdata,attr)
+ local action=methods[script]
+ if not action then
+ elseif type(action)=="function" then
+ return action(head,font,attr)
+ else
+ action=action[language]
+ if action then
+ return action(head,font,attr)
+ end
+ end
+ return head,false
+end
+registerotffeature {
+ name="analyze",
+ description="analysis of character classes",
+ default=true,
+ initializers={
+ node=analyzeinitializer,
+ },
+ processors={
+ position=1,
+ node=analyzeprocessor,
+ }
+}
+methods.latn=analyzers.setstate
+local arab_warned={}
+local function warning(current,what)
+ local char=getchar(current)
+ if not arab_warned[char] then
+ log.report("analyze","arab: character %C has no %a class",char,what)
+ arab_warned[char]=true
+ end
+end
+local mappers={
+ l=s_init,
+ d=s_medi,
+ c=s_medi,
+ r=s_fina,
+ u=s_isol,
+}
+local classifiers=characters.classifiers
+if not classifiers then
+ local f_arabic,l_arabic=characters.blockrange("arabic")
+ local f_syriac,l_syriac=characters.blockrange("syriac")
+ local f_mandiac,l_mandiac=characters.blockrange("mandiac")
+ local f_nko,l_nko=characters.blockrange("nko")
+ local f_ext_a,l_ext_a=characters.blockrange("arabicextendeda")
+ classifiers=table.setmetatableindex(function(t,k)
+ if type(k)=="number" then
+ local c=chardata[k]
+ local v=false
+ if c then
+ local arabic=c.arabic
+ if arabic then
+ v=mappers[arabic]
+ if not v then
+ log.report("analyze","error in mapping arabic %C",k)
+ v=false
+ end
+ elseif (k>=f_arabic and k<=l_arabic) or
+ (k>=f_syriac and k<=l_syriac) or
+ (k>=f_mandiac and k<=l_mandiac) or
+ (k>=f_nko and k<=l_nko) or
+ (k>=f_ext_a and k<=l_ext_a) then
+ if categories[k]=="mn" then
+ v=s_mark
+ else
+ v=s_rest
+ end
+ end
+ end
+ t[k]=v
+ return v
+ end
+ end)
+ characters.classifiers=classifiers
+end
+function methods.arab(head,font,attr)
+ local first,last=nil,nil
+ local c_first,c_last=nil,nil
+ local current,done=head,false
+ current=tonut(current)
+ while current do
+ local char,id=ischar(current,font)
+ if char and not getprop(current,a_state) then
+ done=true
+ local classifier=classifiers[char]
+ if not classifier then
+ if last then
+ if c_last==s_medi or c_last==s_fina then
+ setprop(last,a_state,s_fina)
+ else
+ warning(last,"fina")
+ setprop(last,a_state,s_error)
+ end
+ first,last=nil,nil
+ elseif first then
+ if c_first==s_medi or c_first==s_fina then
+ setprop(first,a_state,s_isol)
+ else
+ warning(first,"isol")
+ setprop(first,a_state,s_error)
+ end
+ first=nil
+ end
+ elseif classifier==s_mark then
+ setprop(current,a_state,s_mark)
+ elseif classifier==s_isol then
+ if last then
+ if c_last==s_medi or c_last==s_fina then
+ setprop(last,a_state,s_fina)
+ else
+ warning(last,"fina")
+ setprop(last,a_state,s_error)
+ end
+ first,last=nil,nil
+ elseif first then
+ if c_first==s_medi or c_first==s_fina then
+ setprop(first,a_state,s_isol)
+ else
+ warning(first,"isol")
+ setprop(first,a_state,s_error)
+ end
+ first=nil
+ end
+ setprop(current,a_state,s_isol)
+ elseif classifier==s_medi then
+ if first then
+ last=current
+ c_last=classifier
+ setprop(current,a_state,s_medi)
+ else
+ setprop(current,a_state,s_init)
+ first=current
+ c_first=classifier
+ end
+ elseif classifier==s_fina then
+ if last then
+ if getprop(last,a_state)~=s_init then
+ setprop(last,a_state,s_medi)
+ end
+ setprop(current,a_state,s_fina)
+ first,last=nil,nil
+ elseif first then
+ setprop(current,a_state,s_fina)
+ first=nil
+ else
+ setprop(current,a_state,s_isol)
+ end
+ else
+ setprop(current,a_state,s_rest)
+ if last then
+ if c_last==s_medi or c_last==s_fina then
+ setprop(last,a_state,s_fina)
+ else
+ warning(last,"fina")
+ setprop(last,a_state,s_error)
+ end
+ first,last=nil,nil
+ elseif first then
+ if c_first==s_medi or c_first==s_fina then
+ setprop(first,a_state,s_isol)
+ else
+ warning(first,"isol")
+ setprop(first,a_state,s_error)
+ end
+ first=nil
+ end
+ end
+ else
+ if last then
+ if c_last==s_medi or c_last==s_fina then
+ setprop(last,a_state,s_fina)
+ else
+ warning(last,"fina")
+ setprop(last,a_state,s_error)
+ end
+ first,last=nil,nil
+ elseif first then
+ if c_first==s_medi or c_first==s_fina then
+ setprop(first,a_state,s_isol)
+ else
+ warning(first,"isol")
+ setprop(first,a_state,s_error)
+ end
+ first=nil
+ end
+ if id==math_code then
+ current=end_of_math(current)
+ end
+ end
+ current=getnext(current)
+ end
+ if last then
+ if c_last==s_medi or c_last==s_fina then
+ setprop(last,a_state,s_fina)
+ else
+ warning(last,"fina")
+ setprop(last,a_state,s_error)
+ end
+ elseif first then
+ if c_first==s_medi or c_first==s_fina then
+ setprop(first,a_state,s_isol)
+ else
+ warning(first,"isol")
+ setprop(first,a_state,s_error)
+ end
+ end
+ return head,done
+end
+methods.syrc=methods.arab
+methods.mand=methods.arab
+methods.nko=methods.arab
+directives.register("otf.analyze.useunicodemarks",function(v)
+ analyzers.useunicodemarks=v
+end)
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-ots']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files",
+}
+local type,next,tonumber=type,next,tonumber
+local random=math.random
+local formatters=string.formatters
+local insert=table.insert
+local registertracker=trackers.register
+local logs=logs
+local trackers=trackers
+local nodes=nodes
+local attributes=attributes
+local fonts=fonts
+local otf=fonts.handlers.otf
+local tracers=nodes.tracers
+local trace_singles=false registertracker("otf.singles",function(v) trace_singles=v end)
+local trace_multiples=false registertracker("otf.multiples",function(v) trace_multiples=v end)
+local trace_alternatives=false registertracker("otf.alternatives",function(v) trace_alternatives=v end)
+local trace_ligatures=false registertracker("otf.ligatures",function(v) trace_ligatures=v end)
+local trace_contexts=false registertracker("otf.contexts",function(v) trace_contexts=v end)
+local trace_marks=false registertracker("otf.marks",function(v) trace_marks=v end)
+local trace_kerns=false registertracker("otf.kerns",function(v) trace_kerns=v end)
+local trace_cursive=false registertracker("otf.cursive",function(v) trace_cursive=v end)
+local trace_preparing=false registertracker("otf.preparing",function(v) trace_preparing=v end)
+local trace_bugs=false registertracker("otf.bugs",function(v) trace_bugs=v end)
+local trace_details=false registertracker("otf.details",function(v) trace_details=v end)
+local trace_steps=false registertracker("otf.steps",function(v) trace_steps=v end)
+local trace_skips=false registertracker("otf.skips",function(v) trace_skips=v end)
+local trace_directions=false registertracker("otf.directions",function(v) trace_directions=v end)
+local trace_plugins=false registertracker("otf.plugins",function(v) trace_plugins=v end)
+local trace_chains=false registertracker("otf.chains",function(v) trace_chains=v end)
+local trace_kernruns=false registertracker("otf.kernruns",function(v) trace_kernruns=v end)
+local trace_discruns=false registertracker("otf.discruns",function(v) trace_discruns=v end)
+local trace_compruns=false registertracker("otf.compruns",function(v) trace_compruns=v end)
+local trace_testruns=false registertracker("otf.testruns",function(v) trace_testruns=v end)
+local forcediscretionaries=false
+local forcepairadvance=false
+directives.register("otf.forcediscretionaries",function(v)
+ forcediscretionaries=v
+end)
+directives.register("otf.forcepairadvance",function(v)
+ forcepairadvance=v
+end)
+local report_direct=logs.reporter("fonts","otf direct")
+local report_subchain=logs.reporter("fonts","otf subchain")
+local report_chain=logs.reporter("fonts","otf chain")
+local report_process=logs.reporter("fonts","otf process")
+local report_warning=logs.reporter("fonts","otf warning")
+local report_run=logs.reporter("fonts","otf run")
+registertracker("otf.substitutions","otf.singles","otf.multiples","otf.alternatives","otf.ligatures")
+registertracker("otf.positions","otf.marks","otf.kerns","otf.cursive")
+registertracker("otf.actions","otf.substitutions","otf.positions")
+registertracker("otf.sample","otf.steps","otf.substitutions","otf.positions","otf.analyzing")
+local nuts=nodes.nuts
+local tonode=nuts.tonode
+local tonut=nuts.tonut
+local getfield=nuts.getfield
+local setfield=nuts.setfield
+local getnext=nuts.getnext
+local setnext=nuts.setnext
+local getprev=nuts.getprev
+local setprev=nuts.setprev
+local getboth=nuts.getboth
+local setboth=nuts.setboth
+local getid=nuts.getid
+local getattr=nuts.getattr
+local setattr=nuts.setattr
+local getprop=nuts.getprop
+local setprop=nuts.setprop
+local getfont=nuts.getfont
+local getsubtype=nuts.getsubtype
+local setsubtype=nuts.setsubtype
+local getchar=nuts.getchar
+local setchar=nuts.setchar
+local getdisc=nuts.getdisc
+local setdisc=nuts.setdisc
+local setlink=nuts.setlink
+local getcomponents=nuts.getcomponents
+local setcomponents=nuts.setcomponents
+local getdir=nuts.getdir
+local getwidth=nuts.getwidth
+local ischar=nuts.is_char
+local usesfont=nuts.uses_font
+local insert_node_after=nuts.insert_after
+local copy_node=nuts.copy
+local copy_node_list=nuts.copy_list
+local find_node_tail=nuts.tail
+local flush_node_list=nuts.flush_list
+local flush_node=nuts.flush_node
+local end_of_math=nuts.end_of_math
+local traverse_nodes=nuts.traverse
+local set_components=nuts.set_components
+local take_components=nuts.take_components
+local count_components=nuts.count_components
+local copy_no_components=nuts.copy_no_components
+local copy_only_glyphs=nuts.copy_only_glyphs
+local setmetatable=setmetatable
+local setmetatableindex=table.setmetatableindex
+local nodecodes=nodes.nodecodes
+local glyphcodes=nodes.glyphcodes
+local disccodes=nodes.disccodes
+local glyph_code=nodecodes.glyph
+local glue_code=nodecodes.glue
+local disc_code=nodecodes.disc
+local math_code=nodecodes.math
+local dir_code=nodecodes.dir
+local localpar_code=nodecodes.localpar
+local discretionary_code=disccodes.discretionary
+local ligature_code=glyphcodes.ligature
+local a_state=attributes.private('state')
+local a_noligature=attributes.private("noligature")
+local injections=nodes.injections
+local setmark=injections.setmark
+local setcursive=injections.setcursive
+local setkern=injections.setkern
+local setmove=injections.setmove
+local setposition=injections.setposition
+local resetinjection=injections.reset
+local copyinjection=injections.copy
+local setligaindex=injections.setligaindex
+local getligaindex=injections.getligaindex
+local fontdata=fonts.hashes.identifiers
+local fontfeatures=fonts.hashes.features
+local otffeatures=fonts.constructors.features.otf
+local registerotffeature=otffeatures.register
+local onetimemessage=fonts.loggers.onetimemessage or function() end
+local getrandom=utilities and utilities.randomizer and utilities.randomizer.get
+otf.defaultnodealternate="none"
+local tfmdata=false
+local characters=false
+local descriptions=false
+local marks=false
+local classes=false
+local currentfont=false
+local factor=0
+local threshold=0
+local checkmarks=false
+local discs=false
+local spaces=false
+local sweepnode=nil
+local sweephead={}
+local notmatchpre={}
+local notmatchpost={}
+local notmatchreplace={}
+local handlers={}
+local isspace=injections.isspace
+local getthreshold=injections.getthreshold
+local checkstep=(tracers and tracers.steppers.check) or function() end
+local registerstep=(tracers and tracers.steppers.register) or function() end
+local registermessage=(tracers and tracers.steppers.message) or function() end
+local function logprocess(...)
+ if trace_steps then
+ registermessage(...)
+ end
+ report_direct(...)
+end
+local function logwarning(...)
+ report_direct(...)
+end
+local gref do
+ local f_unicode=formatters["U+%X"]
+ local f_uniname=formatters["U+%X (%s)"]
+ local f_unilist=formatters["% t (% t)"]
+ gref=function(n)
+ if type(n)=="number" then
+ local description=descriptions[n]
+ local name=description and description.name
+ if name then
+ return f_uniname(n,name)
+ else
+ return f_unicode(n)
+ end
+ elseif n then
+ local num,nam={},{}
+ for i=1,#n do
+ local ni=n[i]
+ if tonumber(ni) then
+ local di=descriptions[ni]
+ num[i]=f_unicode(ni)
+ nam[i]=di and di.name or "-"
+ end
+ end
+ return f_unilist(num,nam)
+ else
+ return "<error in node mode tracing>"
+ end
+ end
+end
+local function cref(dataset,sequence,index)
+ if not dataset then
+ return "no valid dataset"
+ end
+ local merged=sequence.merged and "merged " or ""
+ if index then
+ return formatters["feature %a, type %a, %schain lookup %a, index %a"](
+ dataset[4],sequence.type,merged,sequence.name,index)
+ else
+ return formatters["feature %a, type %a, %schain lookup %a"](
+ dataset[4],sequence.type,merged,sequence.name)
+ end
+end
+local function pref(dataset,sequence)
+ return formatters["feature %a, type %a, %slookup %a"](
+ dataset[4],sequence.type,sequence.merged and "merged " or "",sequence.name)
+end
+local function mref(rlmode)
+ if not rlmode or rlmode==0 then
+ return "---"
+ elseif rlmode==-1 or rlmode=="+TRT" then
+ return "r2l"
+ else
+ return "l2r"
+ end
+end
+local function flattendisk(head,disc)
+ local pre,post,replace,pretail,posttail,replacetail=getdisc(disc,true)
+ local prev,next=getboth(disc)
+ local ishead=head==disc
+ setdisc(disc)
+ flush_node(disc)
+ if pre then
+ flush_node_list(pre)
+ end
+ if post then
+ flush_node_list(post)
+ end
+ if ishead then
+ if replace then
+ if next then
+ setlink(replacetail,next)
+ end
+ return replace,replace
+ elseif next then
+ return next,next
+ else
+ end
+ else
+ if replace then
+ if next then
+ setlink(replacetail,next)
+ end
+ setlink(prev,replace)
+ return head,replace
+ else
+ setlink(prev,next)
+ return head,next
+ end
+ end
+end
+local function appenddisc(disc,list)
+ local pre,post,replace,pretail,posttail,replacetail=getdisc(disc,true)
+ local posthead=list
+ local replacehead=copy_node_list(list)
+ if post then
+ setlink(posttail,posthead)
+ else
+ post=posthead
+ end
+ if replace then
+ setlink(replacetail,replacehead)
+ else
+ replace=replacehead
+ end
+ setdisc(disc,pre,post,replace)
+end
+local take_components=getcomponents
+local set_components=setcomponents
+local function count_components(start,marks)
+ if getid(start)~=glyph_code then
+ return 0
+ elseif getsubtype(start)==ligature_code then
+ local i=0
+ local components=getcomponents(start)
+ while components do
+ i=i+count_components(components,marks)
+ components=getnext(components)
+ end
+ return i
+ elseif not marks[getchar(start)] then
+ return 1
+ else
+ return 0
+ end
+end
+local function markstoligature(head,start,stop,char)
+ if start==stop and getchar(start)==char then
+ return head,start
+ else
+ local prev=getprev(start)
+ local next=getnext(stop)
+ setprev(start)
+ setnext(stop)
+ local base=copy_no_components(start,copyinjection)
+ if head==start then
+ head=base
+ end
+ resetinjection(base)
+ setchar(base,char)
+ setsubtype(base,ligature_code)
+ set_components(base,start)
+ setlink(prev,base,next)
+ return head,base
+ end
+end
+local function toligature(head,start,stop,char,dataset,sequence,markflag,discfound)
+ if getattr(start,a_noligature)==1 then
+ return head,start
+ end
+ if start==stop and getchar(start)==char then
+ resetinjection(start)
+ setchar(start,char)
+ return head,start
+ end
+ local prev=getprev(start)
+ local next=getnext(stop)
+ local comp=start
+ setprev(start)
+ setnext(stop)
+ local base=copy_no_components(start,copyinjection)
+ if start==head then
+ head=base
+ end
+ resetinjection(base)
+ setchar(base,char)
+ setsubtype(base,ligature_code)
+ set_components(base,comp)
+ setlink(prev,base,next)
+ if not discfound then
+ local deletemarks=markflag~="mark"
+ local components=start
+ local baseindex=0
+ local componentindex=0
+ local head=base
+ local current=base
+ while start do
+ local char=getchar(start)
+ if not marks[char] then
+ baseindex=baseindex+componentindex
+ componentindex=count_components(start,marks)
+ elseif not deletemarks then
+ setligaindex(start,baseindex+getligaindex(start,componentindex))
+ if trace_marks then
+ logwarning("%s: keep mark %s, gets index %s",pref(dataset,sequence),gref(char),getligaindex(start))
+ end
+ local n=copy_node(start)
+ copyinjection(n,start)
+ head,current=insert_node_after(head,current,n)
+ elseif trace_marks then
+ logwarning("%s: delete mark %s",pref(dataset,sequence),gref(char))
+ end
+ start=getnext(start)
+ end
+ local start=getnext(current)
+ while start do
+ local char=ischar(start)
+ if char then
+ if marks[char] then
+ setligaindex(start,baseindex+getligaindex(start,componentindex))
+ if trace_marks then
+ logwarning("%s: set mark %s, gets index %s",pref(dataset,sequence),gref(char),getligaindex(start))
+ end
+ start=getnext(start)
+ else
+ break
+ end
+ else
+ break
+ end
+ end
+ else
+ local discprev,discnext=getboth(discfound)
+ if discprev and discnext then
+ local pre,post,replace,pretail,posttail,replacetail=getdisc(discfound,true)
+ if not replace then
+ local prev=getprev(base)
+ local comp=take_components(base)
+ local copied=copy_only_glyphs(comp)
+ if pre then
+ setlink(discprev,pre)
+ else
+ setnext(discprev)
+ end
+ pre=comp
+ if post then
+ setlink(posttail,discnext)
+ setprev(post)
+ else
+ post=discnext
+ setprev(discnext)
+ end
+ setlink(prev,discfound,next)
+ setboth(base)
+ set_components(base,copied)
+ replace=base
+ if forcediscretionaries then
+ setdisc(discfound,pre,post,replace,discretionary_code)
+ else
+ setdisc(discfound,pre,post,replace)
+ end
+ base=prev
+ end
+ end
+ end
+ return head,base
+end
+local function multiple_glyphs(head,start,multiple,ignoremarks,what)
+ local nofmultiples=#multiple
+ if nofmultiples>0 then
+ resetinjection(start)
+ setchar(start,multiple[1])
+ if nofmultiples>1 then
+ local sn=getnext(start)
+ for k=2,nofmultiples do
+ local n=copy_node(start)
+ resetinjection(n)
+ setchar(n,multiple[k])
+ insert_node_after(head,start,n)
+ start=n
+ end
+ if what==true then
+ elseif what>1 then
+ local m=multiple[nofmultiples]
+ for i=2,what do
+ local n=copy_node(start)
+ resetinjection(n)
+ setchar(n,m)
+ insert_node_after(head,start,n)
+ start=n
+ end
+ end
+ end
+ return head,start,true
+ else
+ if trace_multiples then
+ logprocess("no multiple for %s",gref(getchar(start)))
+ end
+ return head,start,false
+ end
+end
+local function get_alternative_glyph(start,alternatives,value)
+ local n=#alternatives
+ if n==1 then
+ return alternatives[1],trace_alternatives and "1 (only one present)"
+ elseif value=="random" then
+ local r=getrandom and getrandom("glyph",1,n) or random(1,n)
+ return alternatives[r],trace_alternatives and formatters["value %a, taking %a"](value,r)
+ elseif value=="first" then
+ return alternatives[1],trace_alternatives and formatters["value %a, taking %a"](value,1)
+ elseif value=="last" then
+ return alternatives[n],trace_alternatives and formatters["value %a, taking %a"](value,n)
+ end
+ value=value==true and 1 or tonumber(value)
+ if type(value)~="number" then
+ return alternatives[1],trace_alternatives and formatters["invalid value %s, taking %a"](value,1)
+ end
+ if value>n then
+ local defaultalt=otf.defaultnodealternate
+ if defaultalt=="first" then
+ return alternatives[n],trace_alternatives and formatters["invalid value %s, taking %a"](value,1)
+ elseif defaultalt=="last" then
+ return alternatives[1],trace_alternatives and formatters["invalid value %s, taking %a"](value,n)
+ else
+ return false,trace_alternatives and formatters["invalid value %a, %s"](value,"out of range")
+ end
+ elseif value==0 then
+ return getchar(start),trace_alternatives and formatters["invalid value %a, %s"](value,"no change")
+ elseif value<1 then
+ return alternatives[1],trace_alternatives and formatters["invalid value %a, taking %a"](value,1)
+ else
+ return alternatives[value],trace_alternatives and formatters["value %a, taking %a"](value,value)
+ end
+end
+function handlers.gsub_single(head,start,dataset,sequence,replacement)
+ if trace_singles then
+ logprocess("%s: replacing %s by single %s",pref(dataset,sequence),gref(getchar(start)),gref(replacement))
+ end
+ resetinjection(start)
+ setchar(start,replacement)
+ return head,start,true
+end
+function handlers.gsub_alternate(head,start,dataset,sequence,alternative)
+ local kind=dataset[4]
+ local what=dataset[1]
+ local value=what==true and tfmdata.shared.features[kind] or what
+ local choice,comment=get_alternative_glyph(start,alternative,value)
+ if choice then
+ if trace_alternatives then
+ logprocess("%s: replacing %s by alternative %a to %s, %s",pref(dataset,sequence),gref(getchar(start)),gref(choice),comment)
+ end
+ resetinjection(start)
+ setchar(start,choice)
+ else
+ if trace_alternatives then
+ logwarning("%s: no variant %a for %s, %s",pref(dataset,sequence),value,gref(getchar(start)),comment)
+ end
+ end
+ return head,start,true
+end
+function handlers.gsub_multiple(head,start,dataset,sequence,multiple)
+ if trace_multiples then
+ logprocess("%s: replacing %s by multiple %s",pref(dataset,sequence),gref(getchar(start)),gref(multiple))
+ end
+ return multiple_glyphs(head,start,multiple,sequence.flags[1],dataset[1])
+end
+function handlers.gsub_ligature(head,start,dataset,sequence,ligature)
+ local current=getnext(start)
+ if not current then
+ return head,start,false,nil
+ end
+ local stop=nil
+ local startchar=getchar(start)
+ if marks[startchar] then
+ while current do
+ local char=ischar(current,currentfont)
+ if char then
+ local lg=ligature[char]
+ if lg then
+ stop=current
+ ligature=lg
+ current=getnext(current)
+ else
+ break
+ end
+ else
+ break
+ end
+ end
+ if stop then
+ local lig=ligature.ligature
+ if lig then
+ if trace_ligatures then
+ local stopchar=getchar(stop)
+ head,start=markstoligature(head,start,stop,lig)
+ logprocess("%s: replacing %s upto %s by ligature %s case 1",pref(dataset,sequence),gref(startchar),gref(stopchar),gref(getchar(start)))
+ else
+ head,start=markstoligature(head,start,stop,lig)
+ end
+ return head,start,true,false
+ else
+ end
+ end
+ else
+ local skipmark=sequence.flags[1]
+ local discfound=false
+ local lastdisc=nil
+ while current do
+ local char,id=ischar(current,currentfont)
+ if char then
+ if skipmark and marks[char] then
+ current=getnext(current)
+ else
+ local lg=ligature[char]
+ if lg then
+ if not discfound and lastdisc then
+ discfound=lastdisc
+ lastdisc=nil
+ end
+ stop=current
+ ligature=lg
+ current=getnext(current)
+ else
+ break
+ end
+ end
+ elseif char==false then
+ break
+ elseif id==disc_code then
+ local replace=getfield(current,"replace")
+ if replace then
+ while replace do
+ local char,id=ischar(replace,currentfont)
+ if char then
+ local lg=ligature[char]
+ if lg then
+ ligature=lg
+ replace=getnext(replace)
+ else
+ return head,start,false,false
+ end
+ else
+ return head,start,false,false
+ end
+ end
+ stop=current
+ end
+ lastdisc=current
+ current=getnext(current)
+ else
+ break
+ end
+ end
+ local lig=ligature.ligature
+ if lig then
+ if stop then
+ if trace_ligatures then
+ local stopchar=getchar(stop)
+ head,start=toligature(head,start,stop,lig,dataset,sequence,skipmark,discfound)
+ logprocess("%s: replacing %s upto %s by ligature %s case 2",pref(dataset,sequence),gref(startchar),gref(stopchar),gref(lig))
+ else
+ head,start=toligature(head,start,stop,lig,dataset,sequence,skipmark,discfound)
+ end
+ else
+ resetinjection(start)
+ setchar(start,lig)
+ if trace_ligatures then
+ logprocess("%s: replacing %s by (no real) ligature %s case 3",pref(dataset,sequence),gref(startchar),gref(lig))
+ end
+ end
+ return head,start,true,discfound
+ else
+ end
+ end
+ return head,start,false,discfound
+end
+function handlers.gpos_single(head,start,dataset,sequence,kerns,rlmode,step,i,injection)
+ local startchar=getchar(start)
+ local format=step.format
+ if format=="single" or type(kerns)=="table" then
+ local dx,dy,w,h=setposition(start,factor,rlmode,sequence.flags[4],kerns,injection)
+ if trace_kerns then
+ logprocess("%s: shifting single %s by %s xy (%p,%p) and wh (%p,%p)",pref(dataset,sequence),gref(startchar),format,dx,dy,w,h)
+ end
+ else
+ local k=(format=="move" and setmove or setkern)(start,factor,rlmode,kerns,injection)
+ if trace_kerns then
+ logprocess("%s: shifting single %s by %s %p",pref(dataset,sequence),gref(startchar),format,k)
+ end
+ end
+ return head,start,false
+end
+function handlers.gpos_pair(head,start,dataset,sequence,kerns,rlmode,step,i,injection)
+ local snext=getnext(start)
+ if not snext then
+ return head,start,false
+ else
+ local prev=start
+ while snext do
+ local nextchar=ischar(snext,currentfont)
+ if nextchar then
+ local krn=kerns[nextchar]
+ if not krn and marks[nextchar] then
+ prev=snext
+ snext=getnext(snext)
+ elseif not krn then
+ break
+ else
+ local format=step.format
+ if format=="pair" then
+ local a,b=krn[1],krn[2]
+ if a==true then
+ elseif a then
+ local x,y,w,h=setposition(start,factor,rlmode,sequence.flags[4],a,injection)
+ if trace_kerns then
+ local startchar=getchar(start)
+ logprocess("%s: shifting first of pair %s and %s by xy (%p,%p) and wh (%p,%p) as %s",pref(dataset,sequence),gref(startchar),gref(nextchar),x,y,w,h,injection or "injections")
+ end
+ end
+ if b==true then
+ start=snext
+ elseif b then
+ local x,y,w,h=setposition(snext,factor,rlmode,sequence.flags[4],b,injection)
+ if trace_kerns then
+ local startchar=getchar(snext)
+ logprocess("%s: shifting second of pair %s and %s by xy (%p,%p) and wh (%p,%p) as %s",pref(dataset,sequence),gref(startchar),gref(nextchar),x,y,w,h,injection or "injections")
+ end
+ start=snext
+ elseif forcepairadvance then
+ start=snext
+ end
+ return head,start,true
+ elseif krn~=0 then
+ local k=(format=="move" and setmove or setkern)(snext,factor,rlmode,krn,injection)
+ if trace_kerns then
+ logprocess("%s: inserting %s %p between %s and %s as %s",pref(dataset,sequence),format,k,gref(getchar(prev)),gref(nextchar),injection or "injections")
+ end
+ return head,start,true
+ else
+ break
+ end
+ end
+ else
+ break
+ end
+ end
+ return head,start,false
+ end
+end
+function handlers.gpos_mark2base(head,start,dataset,sequence,markanchors,rlmode)
+ local markchar=getchar(start)
+ if marks[markchar] then
+ local base=getprev(start)
+ if base then
+ local basechar=ischar(base,currentfont)
+ if basechar then
+ if marks[basechar] then
+ while base do
+ base=getprev(base)
+ if base then
+ basechar=ischar(base,currentfont)
+ if basechar then
+ if not marks[basechar] then
+ break
+ end
+ else
+ if trace_bugs then
+ logwarning("%s: no base for mark %s, case %i",pref(dataset,sequence),gref(markchar),1)
+ end
+ return head,start,false
+ end
+ else
+ if trace_bugs then
+ logwarning("%s: no base for mark %s, case %i",pref(dataset,sequence),gref(markchar),2)
+ end
+ return head,start,false
+ end
+ end
+ end
+ local ba=markanchors[1][basechar]
+ if ba then
+ local ma=markanchors[2]
+ local dx,dy,bound=setmark(start,base,factor,rlmode,ba,ma,characters[basechar],false,checkmarks)
+ if trace_marks then
+ logprocess("%s, bound %s, anchoring mark %s to basechar %s => (%p,%p)",
+ pref(dataset,sequence),bound,gref(markchar),gref(basechar),dx,dy)
+ end
+ return head,start,true
+ elseif trace_bugs then
+ logwarning("%s: mark %s is not anchored to %s",pref(dataset,sequence),gref(markchar),gref(basechar))
+ end
+ elseif trace_bugs then
+ logwarning("%s: nothing preceding, case %i",pref(dataset,sequence),1)
+ end
+ elseif trace_bugs then
+ logwarning("%s: nothing preceding, case %i",pref(dataset,sequence),2)
+ end
+ elseif trace_bugs then
+ logwarning("%s: mark %s is no mark",pref(dataset,sequence),gref(markchar))
+ end
+ return head,start,false
+end
+function handlers.gpos_mark2ligature(head,start,dataset,sequence,markanchors,rlmode)
+ local markchar=getchar(start)
+ if marks[markchar] then
+ local base=getprev(start)
+ if base then
+ local basechar=ischar(base,currentfont)
+ if basechar then
+ if marks[basechar] then
+ while base do
+ base=getprev(base)
+ if base then
+ basechar=ischar(base,currentfont)
+ if basechar then
+ if not marks[basechar] then
+ break
+ end
+ else
+ if trace_bugs then
+ logwarning("%s: no base for mark %s, case %i",pref(dataset,sequence),gref(markchar),1)
+ end
+ return head,start,false
+ end
+ else
+ if trace_bugs then
+ logwarning("%s: no base for mark %s, case %i",pref(dataset,sequence),gref(markchar),2)
+ end
+ return head,start,false
+ end
+ end
+ end
+ local ba=markanchors[1][basechar]
+ if ba then
+ local ma=markanchors[2]
+ if ma then
+ local index=getligaindex(start)
+ ba=ba[index]
+ if ba then
+ local dx,dy,bound=setmark(start,base,factor,rlmode,ba,ma,characters[basechar],false,checkmarks)
+ if trace_marks then
+ logprocess("%s, index %s, bound %s, anchoring mark %s to baselig %s at index %s => (%p,%p)",
+ pref(dataset,sequence),index,bound,gref(markchar),gref(basechar),index,dx,dy)
+ end
+ return head,start,true
+ else
+ if trace_bugs then
+ logwarning("%s: no matching anchors for mark %s and baselig %s with index %a",pref(dataset,sequence),gref(markchar),gref(basechar),index)
+ end
+ end
+ end
+ elseif trace_bugs then
+ onetimemessage(currentfont,basechar,"no base anchors",report_fonts)
+ end
+ elseif trace_bugs then
+ logwarning("%s: prev node is no char, case %i",pref(dataset,sequence),1)
+ end
+ elseif trace_bugs then
+ logwarning("%s: prev node is no char, case %i",pref(dataset,sequence),2)
+ end
+ elseif trace_bugs then
+ logwarning("%s: mark %s is no mark",pref(dataset,sequence),gref(markchar))
+ end
+ return head,start,false
+end
+function handlers.gpos_mark2mark(head,start,dataset,sequence,markanchors,rlmode)
+ local markchar=getchar(start)
+ if marks[markchar] then
+ local base=getprev(start)
+ local slc=getligaindex(start)
+ if slc then
+ while base do
+ local blc=getligaindex(base)
+ if blc and blc~=slc then
+ base=getprev(base)
+ else
+ break
+ end
+ end
+ end
+ if base then
+ local basechar=ischar(base,currentfont)
+ if basechar then
+ local ba=markanchors[1][basechar]
+ if ba then
+ local ma=markanchors[2]
+ local dx,dy,bound=setmark(start,base,factor,rlmode,ba,ma,characters[basechar],true,checkmarks)
+ if trace_marks then
+ logprocess("%s, bound %s, anchoring mark %s to basemark %s => (%p,%p)",
+ pref(dataset,sequence),bound,gref(markchar),gref(basechar),dx,dy)
+ end
+ return head,start,true
+ end
+ end
+ end
+ elseif trace_bugs then
+ logwarning("%s: mark %s is no mark",pref(dataset,sequence),gref(markchar))
+ end
+ return head,start,false
+end
+function handlers.gpos_cursive(head,start,dataset,sequence,exitanchors,rlmode,step,i)
+ local startchar=getchar(start)
+ if marks[startchar] then
+ if trace_cursive then
+ logprocess("%s: ignoring cursive for mark %s",pref(dataset,sequence),gref(startchar))
+ end
+ else
+ local nxt=getnext(start)
+ while nxt do
+ local nextchar=ischar(nxt,currentfont)
+ if not nextchar then
+ break
+ elseif marks[nextchar] then
+ nxt=getnext(nxt)
+ else
+ local exit=exitanchors[3]
+ if exit then
+ local entry=exitanchors[1][nextchar]
+ if entry then
+ entry=entry[2]
+ if entry then
+ local dx,dy,bound=setcursive(start,nxt,factor,rlmode,exit,entry,characters[startchar],characters[nextchar])
+ if trace_cursive then
+ logprocess("%s: moving %s to %s cursive (%p,%p) using bound %s in %s mode",pref(dataset,sequence),gref(startchar),gref(nextchar),dx,dy,bound,mref(rlmode))
+ end
+ return head,start,true
+ end
+ end
+ end
+ break
+ end
+ end
+ end
+ return head,start,false
+end
+local chainprocs={}
+local function logprocess(...)
+ if trace_steps then
+ registermessage(...)
+ end
+ report_subchain(...)
+end
+local logwarning=report_subchain
+local function logprocess(...)
+ if trace_steps then
+ registermessage(...)
+ end
+ report_chain(...)
+end
+local logwarning=report_chain
+local function reversesub(head,start,stop,dataset,sequence,replacements,rlmode)
+ local char=getchar(start)
+ local replacement=replacements[char]
+ if replacement then
+ if trace_singles then
+ logprocess("%s: single reverse replacement of %s by %s",cref(dataset,sequence),gref(char),gref(replacement))
+ end
+ resetinjection(start)
+ setchar(start,replacement)
+ return head,start,true
+ else
+ return head,start,false
+ end
+end
+chainprocs.reversesub=reversesub
+local function reportzerosteps(dataset,sequence)
+ logwarning("%s: no steps",cref(dataset,sequence))
+end
+local function reportmoresteps(dataset,sequence)
+ logwarning("%s: more than 1 step",cref(dataset,sequence))
+end
+function chainprocs.gsub_single(head,start,stop,dataset,sequence,currentlookup,chainindex)
+ local steps=currentlookup.steps
+ local nofsteps=currentlookup.nofsteps
+ if nofsteps>1 then
+ reportmoresteps(dataset,sequence)
+ end
+ if nofsteps==0 then
+ reportzerosteps(dataset,sequence)
+ else
+ local current=start
+ local mapping=steps[1].coverage
+ while current do
+ local currentchar=ischar(current)
+ if currentchar then
+ local replacement=mapping[currentchar]
+ if not replacement or replacement=="" then
+ if trace_bugs then
+ logwarning("%s: no single for %s",cref(dataset,sequence,chainindex),gref(currentchar))
+ end
+ else
+ if trace_singles then
+ logprocess("%s: replacing single %s by %s",cref(dataset,sequence,chainindex),gref(currentchar),gref(replacement))
+ end
+ resetinjection(current)
+ setchar(current,replacement)
+ end
+ return head,start,true
+ elseif currentchar==false then
+ break
+ elseif current==stop then
+ break
+ else
+ current=getnext(current)
+ end
+ end
+ end
+ return head,start,false
+end
+function chainprocs.gsub_multiple(head,start,stop,dataset,sequence,currentlookup)
+ local steps=currentlookup.steps
+ local nofsteps=currentlookup.nofsteps
+ if nofsteps>1 then
+ reportmoresteps(dataset,sequence)
+ end
+ if nofsteps==0 then
+ reportzerosteps(dataset,sequence)
+ else
+ local startchar=getchar(start)
+ local replacement=steps[1].coverage[startchar]
+ if not replacement or replacement=="" then
+ if trace_bugs then
+ logwarning("%s: no multiple for %s",cref(dataset,sequence),gref(startchar))
+ end
+ else
+ if trace_multiples then
+ logprocess("%s: replacing %s by multiple characters %s",cref(dataset,sequence),gref(startchar),gref(replacement))
+ end
+ return multiple_glyphs(head,start,replacement,sequence.flags[1],dataset[1])
+ end
+ end
+ return head,start,false
+end
+function chainprocs.gsub_alternate(head,start,stop,dataset,sequence,currentlookup)
+ local steps=currentlookup.steps
+ local nofsteps=currentlookup.nofsteps
+ if nofsteps>1 then
+ reportmoresteps(dataset,sequence)
+ end
+ if nofsteps==0 then
+ reportzerosteps(dataset,sequence)
+ else
+ local kind=dataset[4]
+ local what=dataset[1]
+ local value=what==true and tfmdata.shared.features[kind] or what
+ local current=start
+ local mapping=steps[1].coverage
+ while current do
+ local currentchar=ischar(current)
+ if currentchar then
+ local alternatives=mapping[currentchar]
+ if alternatives then
+ local choice,comment=get_alternative_glyph(current,alternatives,value)
+ if choice then
+ if trace_alternatives then
+ logprocess("%s: replacing %s by alternative %a to %s, %s",cref(dataset,sequence),gref(currentchar),choice,gref(choice),comment)
+ end
+ resetinjection(start)
+ setchar(start,choice)
+ else
+ if trace_alternatives then
+ logwarning("%s: no variant %a for %s, %s",cref(dataset,sequence),value,gref(currentchar),comment)
+ end
+ end
+ end
+ return head,start,true
+ elseif currentchar==false then
+ break
+ elseif current==stop then
+ break
+ else
+ current=getnext(current)
+ end
+ end
+ end
+ return head,start,false
+end
+function chainprocs.gsub_ligature(head,start,stop,dataset,sequence,currentlookup,chainindex)
+ local steps=currentlookup.steps
+ local nofsteps=currentlookup.nofsteps
+ if nofsteps>1 then
+ reportmoresteps(dataset,sequence)
+ end
+ if nofsteps==0 then
+ reportzerosteps(dataset,sequence)
+ else
+ local startchar=getchar(start)
+ local ligatures=steps[1].coverage[startchar]
+ if not ligatures then
+ if trace_bugs then
+ logwarning("%s: no ligatures starting with %s",cref(dataset,sequence,chainindex),gref(startchar))
+ end
+ else
+ local current=getnext(start)
+ local discfound=false
+ local last=stop
+ local nofreplacements=1
+ local skipmark=currentlookup.flags[1]
+ while current do
+ local id=getid(current)
+ if id==disc_code then
+ if not discfound then
+ discfound=current
+ end
+ if current==stop then
+ break
+ else
+ current=getnext(current)
+ end
+ else
+ local schar=getchar(current)
+ if skipmark and marks[schar] then
+ current=getnext(current)
+ else
+ local lg=ligatures[schar]
+ if lg then
+ ligatures=lg
+ last=current
+ nofreplacements=nofreplacements+1
+ if current==stop then
+ break
+ else
+ current=getnext(current)
+ end
+ else
+ break
+ end
+ end
+ end
+ end
+ local ligature=ligatures.ligature
+ if ligature then
+ if chainindex then
+ stop=last
+ end
+ if trace_ligatures then
+ if start==stop then
+ logprocess("%s: replacing character %s by ligature %s case 3",cref(dataset,sequence,chainindex),gref(startchar),gref(ligature))
+ else
+ logprocess("%s: replacing character %s upto %s by ligature %s case 4",cref(dataset,sequence,chainindex),gref(startchar),gref(getchar(stop)),gref(ligature))
+ end
+ end
+ head,start=toligature(head,start,stop,ligature,dataset,sequence,skipmark,discfound)
+ return head,start,true,nofreplacements,discfound
+ elseif trace_bugs then
+ if start==stop then
+ logwarning("%s: replacing character %s by ligature fails",cref(dataset,sequence,chainindex),gref(startchar))
+ else
+ logwarning("%s: replacing character %s upto %s by ligature fails",cref(dataset,sequence,chainindex),gref(startchar),gref(getchar(stop)))
+ end
+ end
+ end
+ end
+ return head,start,false,0,false
+end
+function chainprocs.gpos_single(head,start,stop,dataset,sequence,currentlookup,rlmode,chainindex)
+ local steps=currentlookup.steps
+ local nofsteps=currentlookup.nofsteps
+ if nofsteps>1 then
+ reportmoresteps(dataset,sequence)
+ end
+ if nofsteps==0 then
+ reportzerosteps(dataset,sequence)
+ else
+ local startchar=getchar(start)
+ local step=steps[1]
+ local kerns=step.coverage[startchar]
+ if not kerns then
+ else
+ local format=step.format
+ if format=="single" then
+ local dx,dy,w,h=setposition(start,factor,rlmode,sequence.flags[4],kerns)
+ if trace_kerns then
+ logprocess("%s: shifting single %s by %s (%p,%p) and correction (%p,%p)",cref(dataset,sequence),gref(startchar),format,dx,dy,w,h)
+ end
+ else
+ local k=(format=="move" and setmove or setkern)(start,factor,rlmode,kerns,injection)
+ if trace_kerns then
+ logprocess("%s: shifting single %s by %s %p",cref(dataset,sequence),gref(startchar),format,k)
+ end
+ end
+ end
+ end
+ return head,start,false
+end
+function chainprocs.gpos_pair(head,start,stop,dataset,sequence,currentlookup,rlmode,chainindex)
+ local steps=currentlookup.steps
+ local nofsteps=currentlookup.nofsteps
+ if nofsteps>1 then
+ reportmoresteps(dataset,sequence)
+ end
+ if nofsteps==0 then
+ reportzerosteps(dataset,sequence)
+ else
+ local snext=getnext(start)
+ if snext then
+ local startchar=getchar(start)
+ local step=steps[1]
+ local kerns=step.coverage[startchar]
+ if kerns then
+ local prev=start
+ while snext do
+ local nextchar=ischar(snext,currentfont)
+ if not nextchar then
+ break
+ end
+ local krn=kerns[nextchar]
+ if not krn and marks[nextchar] then
+ prev=snext
+ snext=getnext(snext)
+ elseif not krn then
+ break
+ else
+ local format=step.format
+ if format=="pair" then
+ local a,b=krn[1],krn[2]
+ if a==true then
+ elseif a then
+ local x,y,w,h=setposition(start,factor,rlmode,sequence.flags[4],a,"injections")
+ if trace_kerns then
+ local startchar=getchar(start)
+ logprocess("%s: shifting first of pair %s and %s by (%p,%p) and correction (%p,%p)",cref(dataset,sequence),gref(startchar),gref(nextchar),x,y,w,h)
+ end
+ end
+ if b==true then
+ start=snext
+ elseif b then
+ local x,y,w,h=setposition(snext,factor,rlmode,sequence.flags[4],b,"injections")
+ if trace_kerns then
+ local startchar=getchar(start)
+ logprocess("%s: shifting second of pair %s and %s by (%p,%p) and correction (%p,%p)",cref(dataset,sequence),gref(startchar),gref(nextchar),x,y,w,h)
+ end
+ start=snext
+ elseif forcepairadvance then
+ start=snext
+ end
+ return head,start,true
+ elseif krn~=0 then
+ local k=(format=="move" and setmove or setkern)(snext,factor,rlmode,krn)
+ if trace_kerns then
+ logprocess("%s: inserting %s %p between %s and %s",cref(dataset,sequence),format,k,gref(getchar(prev)),gref(nextchar))
+ end
+ return head,start,true
+ else
+ break
+ end
+ end
+ end
+ end
+ end
+ end
+ return head,start,false
+end
+function chainprocs.gpos_mark2base(head,start,stop,dataset,sequence,currentlookup,rlmode)
+ local steps=currentlookup.steps
+ local nofsteps=currentlookup.nofsteps
+ if nofsteps>1 then
+ reportmoresteps(dataset,sequence)
+ end
+ if nofsteps==0 then
+ reportzerosteps(dataset,sequence)
+ else
+ local markchar=getchar(start)
+ if marks[markchar] then
+ local markanchors=steps[1].coverage[markchar]
+ if markanchors then
+ local base=getprev(start)
+ if base then
+ local basechar=ischar(base,currentfont)
+ if basechar then
+ if marks[basechar] then
+ while base do
+ base=getprev(base)
+ if base then
+ local basechar=ischar(base,currentfont)
+ if basechar then
+ if not marks[basechar] then
+ break
+ end
+ else
+ if trace_bugs then
+ logwarning("%s: no base for mark %s, case %i",pref(dataset,sequence),gref(markchar),1)
+ end
+ return head,start,false
+ end
+ else
+ if trace_bugs then
+ logwarning("%s: no base for mark %s, case %i",pref(dataset,sequence),gref(markchar),2)
+ end
+ return head,start,false
+ end
+ end
+ end
+ local ba=markanchors[1][basechar]
+ if ba then
+ local ma=markanchors[2]
+ if ma then
+ local dx,dy,bound=setmark(start,base,factor,rlmode,ba,ma,characters[basechar],false,checkmarks)
+ if trace_marks then
+ logprocess("%s, bound %s, anchoring mark %s to basechar %s => (%p,%p)",
+ cref(dataset,sequence),bound,gref(markchar),gref(basechar),dx,dy)
+ end
+ return head,start,true
+ end
+ end
+ elseif trace_bugs then
+ logwarning("%s: prev node is no char, case %i",cref(dataset,sequence),1)
+ end
+ elseif trace_bugs then
+ logwarning("%s: prev node is no char, case %i",cref(dataset,sequence),2)
+ end
+ elseif trace_bugs then
+ logwarning("%s: mark %s has no anchors",cref(dataset,sequence),gref(markchar))
+ end
+ elseif trace_bugs then
+ logwarning("%s: mark %s is no mark",cref(dataset,sequence),gref(markchar))
+ end
+ end
+ return head,start,false
+end
+function chainprocs.gpos_mark2ligature(head,start,stop,dataset,sequence,currentlookup,rlmode)
+ local steps=currentlookup.steps
+ local nofsteps=currentlookup.nofsteps
+ if nofsteps>1 then
+ reportmoresteps(dataset,sequence)
+ end
+ if nofsteps==0 then
+ reportzerosteps(dataset,sequence)
+ else
+ local markchar=getchar(start)
+ if marks[markchar] then
+ local markanchors=steps[1].coverage[markchar]
+ if markanchors then
+ local base=getprev(start)
+ if base then
+ local basechar=ischar(base,currentfont)
+ if basechar then
+ if marks[basechar] then
+ while base do
+ base=getprev(base)
+ if base then
+ local basechar=ischar(base,currentfont)
+ if basechar then
+ if not marks[basechar] then
+ break
+ end
+ else
+ if trace_bugs then
+ logwarning("%s: no base for mark %s, case %i",cref(dataset,sequence),markchar,1)
+ end
+ return head,start,false
+ end
+ else
+ if trace_bugs then
+ logwarning("%s: no base for mark %s, case %i",cref(dataset,sequence),markchar,2)
+ end
+ return head,start,false
+ end
+ end
+ end
+ local ba=markanchors[1][basechar]
+ if ba then
+ local ma=markanchors[2]
+ if ma then
+ local index=getligaindex(start)
+ ba=ba[index]
+ if ba then
+ local dx,dy,bound=setmark(start,base,factor,rlmode,ba,ma,characters[basechar],false,checkmarks)
+ if trace_marks then
+ logprocess("%s, bound %s, anchoring mark %s to baselig %s at index %s => (%p,%p)",
+ cref(dataset,sequence),a or bound,gref(markchar),gref(basechar),index,dx,dy)
+ end
+ return head,start,true
+ end
+ end
+ end
+ elseif trace_bugs then
+ logwarning("%s, prev node is no char, case %i",cref(dataset,sequence),1)
+ end
+ elseif trace_bugs then
+ logwarning("%s, prev node is no char, case %i",cref(dataset,sequence),2)
+ end
+ elseif trace_bugs then
+ logwarning("%s, mark %s has no anchors",cref(dataset,sequence),gref(markchar))
+ end
+ elseif trace_bugs then
+ logwarning("%s, mark %s is no mark",cref(dataset,sequence),gref(markchar))
+ end
+ end
+ return head,start,false
+end
+function chainprocs.gpos_mark2mark(head,start,stop,dataset,sequence,currentlookup,rlmode)
+ local steps=currentlookup.steps
+ local nofsteps=currentlookup.nofsteps
+ if nofsteps>1 then
+ reportmoresteps(dataset,sequence)
+ end
+ if nofsteps==0 then
+ reportzerosteps(dataset,sequence)
+ else
+ local markchar=getchar(start)
+ if marks[markchar] then
+ local markanchors=steps[1].coverage[markchar]
+ if markanchors then
+ local base=getprev(start)
+ local slc=getligaindex(start)
+ if slc then
+ while base do
+ local blc=getligaindex(base)
+ if blc and blc~=slc then
+ base=getprev(base)
+ else
+ break
+ end
+ end
+ end
+ if base then
+ local basechar=ischar(base,currentfont)
+ if basechar then
+ local ba=markanchors[1][basechar]
+ if ba then
+ local ma=markanchors[2]
+ if ma then
+ local dx,dy,bound=setmark(start,base,factor,rlmode,ba,ma,characters[basechar],true,checkmarks)
+ if trace_marks then
+ logprocess("%s, bound %s, anchoring mark %s to basemark %s => (%p,%p)",
+ cref(dataset,sequence),bound,gref(markchar),gref(basechar),dx,dy)
+ end
+ return head,start,true
+ end
+ end
+ elseif trace_bugs then
+ logwarning("%s: prev node is no mark, case %i",cref(dataset,sequence),1)
+ end
+ elseif trace_bugs then
+ logwarning("%s: prev node is no mark, case %i",cref(dataset,sequence),2)
+ end
+ elseif trace_bugs then
+ logwarning("%s: mark %s has no anchors",cref(dataset,sequence),gref(markchar))
+ end
+ elseif trace_bugs then
+ logwarning("%s: mark %s is no mark",cref(dataset,sequence),gref(markchar))
+ end
+ end
+ return head,start,false
+end
+function chainprocs.gpos_cursive(head,start,stop,dataset,sequence,currentlookup,rlmode)
+ local steps=currentlookup.steps
+ local nofsteps=currentlookup.nofsteps
+ if nofsteps>1 then
+ reportmoresteps(dataset,sequence)
+ end
+ if nofsteps==0 then
+ reportzerosteps(dataset,sequence)
+ else
+ local startchar=getchar(start)
+ local exitanchors=steps[1].coverage[startchar]
+ if exitanchors then
+ if marks[startchar] then
+ if trace_cursive then
+ logprocess("%s: ignoring cursive for mark %s",pref(dataset,sequence),gref(startchar))
+ end
+ else
+ local nxt=getnext(start)
+ while nxt do
+ local nextchar=ischar(nxt,currentfont)
+ if not nextchar then
+ break
+ elseif marks[nextchar] then
+ nxt=getnext(nxt)
+ else
+ local exit=exitanchors[3]
+ if exit then
+ local entry=exitanchors[1][nextchar]
+ if entry then
+ entry=entry[2]
+ if entry then
+ local dx,dy,bound=setcursive(start,nxt,factor,rlmode,exit,entry,characters[startchar],characters[nextchar])
+ if trace_cursive then
+ logprocess("%s: moving %s to %s cursive (%p,%p) using bound %s in %s mode",pref(dataset,sequence),gref(startchar),gref(nextchar),dx,dy,bound,mref(rlmode))
+ end
+ return head,start,true
+ end
+ end
+ elseif trace_bugs then
+ onetimemessage(currentfont,startchar,"no entry anchors",report_fonts)
+ end
+ break
+ end
+ end
+ end
+ elseif trace_cursive and trace_details then
+ logprocess("%s, cursive %s is already done",pref(dataset,sequence),gref(getchar(start)),alreadydone)
+ end
+ end
+ return head,start,false
+end
+local function show_skip(dataset,sequence,char,ck,class)
+ logwarning("%s: skipping char %s, class %a, rule %a, lookuptype %a",cref(dataset,sequence),gref(char),class,ck[1],ck[8] or ck[2])
+end
+local userkern=nuts.pool and nuts.pool.newkern
+do if not userkern then
+ local thekern=nuts.new("kern",1)
+ local setkern=nuts.setkern
+ userkern=function(k)
+ local n=copy_node(thekern)
+ setkern(n,k)
+ return n
+ end
+end end
+local function checked(head)
+ local current=head
+ while current do
+ if getid(current)==glue_code then
+ local kern=userkern(getwidth(current))
+ if head==current then
+ local next=getnext(current)
+ if next then
+ setlink(kern,next)
+ end
+ flush_node(current)
+ head=kern
+ current=next
+ else
+ local prev,next=getboth(current)
+ setlink(prev,kern,next)
+ flush_node(current)
+ current=next
+ end
+ else
+ current=getnext(current)
+ end
+ end
+ return head
+end
+local function setdiscchecked(d,pre,post,replace)
+ if pre then pre=checked(pre) end
+ if post then post=checked(post) end
+ if replace then replace=checked(replace) end
+ setdisc(d,pre,post,replace)
+end
+local noflags={ false,false,false,false }
+local function chainrun(head,start,last,dataset,sequence,rlmode,ck,skipped)
+ local size=ck[5]-ck[4]+1
+ local chainlookups=ck[6]
+ local done=false
+ if chainlookups then
+ if size==1 then
+ local chainlookup=chainlookups[1]
+ for j=1,#chainlookup do
+ local chainstep=chainlookup[j]
+ local chainkind=chainstep.type
+ local chainproc=chainprocs[chainkind]
+ if chainproc then
+ local ok
+ head,start,ok=chainproc(head,start,last,dataset,sequence,chainstep,rlmode,1)
+ if ok then
+ done=true
+ end
+ else
+ logprocess("%s: %s is not yet supported (1)",cref(dataset,sequence),chainkind)
+ end
+ end
+ else
+ local skipmark
+ local skipligature
+ local skipbase
+ local markclass
+ if skipped then
+ local flags=sequence.flags or noflags
+ skipmark=flags[1]
+ skipligature=flags[2]
+ skipbase=flags[3]
+ markclass=sequence.markclass
+ end
+ local i=1
+ local laststart=start
+ local nofchainlookups=#chainlookups
+ while start do
+ if skipped then
+ while start do
+ local char,id=ischar(start,currentfont)
+ if char then
+ local class=classes[char]
+ if class then
+ if class==skipmark or class==skipligature or class==skipbase or (markclass and class=="mark" and not markclass[char]) then
+ start=getnext(start)
+ else
+ break
+ end
+ else
+ break
+ end
+ else
+ break
+ end
+ end
+ end
+ local chainlookup=chainlookups[i]
+ if chainlookup then
+ for j=1,#chainlookup do
+ local chainstep=chainlookup[j]
+ local chainkind=chainstep.type
+ local chainproc=chainprocs[chainkind]
+ if chainproc then
+ local ok,n
+ head,start,ok,n=chainproc(head,start,last,dataset,sequence,chainstep,rlmode,i)
+ if ok then
+ done=true
+ if n and n>1 and i+n>nofchainlookups then
+ break
+ end
+ end
+ else
+ logprocess("%s: %s is not yet supported (2)",cref(dataset,sequence),chainkind)
+ end
+ end
+ end
+ i=i+1
+ if i>size or not start then
+ break
+ elseif start then
+ laststart=start
+ start=getnext(start)
+ end
+ end
+ if not start then
+ start=laststart
+ end
+ end
+ else
+ local replacements=ck[7]
+ if replacements then
+ head,start,done=reversesub(head,start,last,dataset,sequence,replacements,rlmode)
+ else
+ done=true
+ if trace_contexts then
+ logprocess("%s: skipping match",cref(dataset,sequence))
+ end
+ end
+ end
+ return head,start,done
+end
+local function chaindisk(head,start,dataset,sequence,rlmode,ck,skipped)
+ if not start then
+ return head,start,false
+ end
+ local startishead=start==head
+ local seq=ck[3]
+ local f=ck[4]
+ local l=ck[5]
+ local s=#seq
+ local done=false
+ local sweepnode=sweepnode
+ local sweeptype=sweeptype
+ local sweepoverflow=false
+ local keepdisc=not sweepnode
+ local lookaheaddisc=nil
+ local backtrackdisc=nil
+ local current=start
+ local last=start
+ local prev=getprev(start)
+ local hasglue=false
+ local i=f
+ while i<=l do
+ local id=getid(current)
+ if id==glyph_code then
+ i=i+1
+ last=current
+ current=getnext(current)
+ elseif id==glue_code then
+ i=i+1
+ last=current
+ current=getnext(current)
+ hasglue=true
+ elseif id==disc_code then
+ if keepdisc then
+ keepdisc=false
+ lookaheaddisc=current
+ local replace=getfield(current,"replace")
+ if not replace then
+ sweepoverflow=true
+ sweepnode=current
+ current=getnext(current)
+ else
+ while replace and i<=l do
+ if getid(replace)==glyph_code then
+ i=i+1
+ end
+ replace=getnext(replace)
+ end
+ current=getnext(replace)
+ end
+ last=current
+ else
+ head,current=flattendisk(head,current)
+ end
+ else
+ last=current
+ current=getnext(current)
+ end
+ if current then
+ elseif sweepoverflow then
+ break
+ elseif sweeptype=="post" or sweeptype=="replace" then
+ current=getnext(sweepnode)
+ if current then
+ sweeptype=nil
+ sweepoverflow=true
+ else
+ break
+ end
+ else
+ break
+ end
+ end
+ if sweepoverflow then
+ local prev=current and getprev(current)
+ if not current or prev~=sweepnode then
+ local head=getnext(sweepnode)
+ local tail=nil
+ if prev then
+ tail=prev
+ setprev(current,sweepnode)
+ else
+ tail=find_node_tail(head)
+ end
+ setnext(sweepnode,current)
+ setprev(head)
+ setnext(tail)
+ appenddisc(sweepnode,head)
+ end
+ end
+ if l<s then
+ local i=l
+ local t=sweeptype=="post" or sweeptype=="replace"
+ while current and i<s do
+ local id=getid(current)
+ if id==glyph_code then
+ i=i+1
+ current=getnext(current)
+ elseif id==glue_code then
+ i=i+1
+ current=getnext(current)
+ hasglue=true
+ elseif id==disc_code then
+ if keepdisc then
+ keepdisc=false
+ if notmatchpre[current]~=notmatchreplace[current] then
+ lookaheaddisc=current
+ end
+ local replace=getfield(current,"replace")
+ while replace and i<s do
+ if getid(replace)==glyph_code then
+ i=i+1
+ end
+ replace=getnext(replace)
+ end
+ current=getnext(current)
+ elseif notmatchpre[current]~=notmatchreplace[current] then
+ head,current=flattendisk(head,current)
+ else
+ current=getnext(current)
+ end
+ else
+ current=getnext(current)
+ end
+ if not current and t then
+ current=getnext(sweepnode)
+ if current then
+ sweeptype=nil
+ end
+ end
+ end
+ end
+ if f>1 then
+ local current=prev
+ local i=f
+ local t=sweeptype=="pre" or sweeptype=="replace"
+ if not current and t and current==checkdisk then
+ current=getprev(sweepnode)
+ end
+ while current and i>1 do
+ local id=getid(current)
+ if id==glyph_code then
+ i=i-1
+ elseif id==glue_code then
+ i=i-1
+ hasglue=true
+ elseif id==disc_code then
+ if keepdisc then
+ keepdisc=false
+ if notmatchpost[current]~=notmatchreplace[current] then
+ backtrackdisc=current
+ end
+ local replace=getfield(current,"replace")
+ while replace and i>1 do
+ if getid(replace)==glyph_code then
+ i=i-1
+ end
+ replace=getnext(replace)
+ end
+ elseif notmatchpost[current]~=notmatchreplace[current] then
+ head,current=flattendisk(head,current)
+ end
+ end
+ current=getprev(current)
+ if t and current==checkdisk then
+ current=getprev(sweepnode)
+ end
+ end
+ end
+ local done=false
+ if lookaheaddisc then
+ local cf=start
+ local cl=getprev(lookaheaddisc)
+ local cprev=getprev(start)
+ local insertedmarks=0
+ while cprev do
+ local char=ischar(cf,currentfont)
+ if char and marks[char] then
+ insertedmarks=insertedmarks+1
+ cf=cprev
+ startishead=cf==head
+ cprev=getprev(cprev)
+ else
+ break
+ end
+ end
+ setlink(cprev,lookaheaddisc)
+ setprev(cf)
+ setnext(cl)
+ if startishead then
+ head=lookaheaddisc
+ end
+ local pre,post,replace=getdisc(lookaheaddisc)
+ local new=copy_node_list(cf)
+ local cnew=new
+ if pre then
+ setlink(find_node_tail(cf),pre)
+ end
+ if replace then
+ local tail=find_node_tail(new)
+ setlink(tail,replace)
+ end
+ for i=1,insertedmarks do
+ cnew=getnext(cnew)
+ end
+ cl=start
+ local clast=cnew
+ for i=f,l do
+ cl=getnext(cl)
+ clast=getnext(clast)
+ end
+ if not notmatchpre[lookaheaddisc] then
+ local ok=false
+ cf,start,ok=chainrun(cf,start,cl,dataset,sequence,rlmode,ck,skipped)
+ if ok then
+ done=true
+ end
+ end
+ if not notmatchreplace[lookaheaddisc] then
+ local ok=false
+ new,cnew,ok=chainrun(new,cnew,clast,dataset,sequence,rlmode,ck,skipped)
+ if ok then
+ done=true
+ end
+ end
+ if hasglue then
+ setdiscchecked(lookaheaddisc,cf,post,new)
+ else
+ setdisc(lookaheaddisc,cf,post,new)
+ end
+ start=getprev(lookaheaddisc)
+ sweephead[cf]=getnext(clast) or false
+ sweephead[new]=getnext(cl) or false
+ elseif backtrackdisc then
+ local cf=getnext(backtrackdisc)
+ local cl=start
+ local cnext=getnext(start)
+ local insertedmarks=0
+ while cnext do
+ local char=ischar(cnext,currentfont)
+ if char and marks[char] then
+ insertedmarks=insertedmarks+1
+ cl=cnext
+ cnext=getnext(cnext)
+ else
+ break
+ end
+ end
+ if cnext then
+ setprev(cnext,backtrackdisc)
+ end
+ setnext(backtrackdisc,cnext)
+ setprev(cf)
+ setnext(cl)
+ local pre,post,replace,pretail,posttail,replacetail=getdisc(backtrackdisc,true)
+ local new=copy_node_list(cf)
+ local cnew=find_node_tail(new)
+ for i=1,insertedmarks do
+ cnew=getprev(cnew)
+ end
+ local clast=cnew
+ for i=f,l do
+ clast=getnext(clast)
+ end
+ if not notmatchpost[backtrackdisc] then
+ local ok=false
+ cf,start,ok=chainrun(cf,start,last,dataset,sequence,rlmode,ck,skipped)
+ if ok then
+ done=true
+ end
+ end
+ if not notmatchreplace[backtrackdisc] then
+ local ok=false
+ new,cnew,ok=chainrun(new,cnew,clast,dataset,sequence,rlmode,ck,skipped)
+ if ok then
+ done=true
+ end
+ end
+ if post then
+ setlink(posttail,cf)
+ else
+ post=cf
+ end
+ if replace then
+ setlink(replacetail,new)
+ else
+ replace=new
+ end
+ if hasglue then
+ setdiscchecked(backtrackdisc,pre,post,replace)
+ else
+ setdisc(backtrackdisc,pre,post,replace)
+ end
+ start=getprev(backtrackdisc)
+ sweephead[post]=getnext(clast) or false
+ sweephead[replace]=getnext(last) or false
+ else
+ local ok=false
+ head,start,ok=chainrun(head,start,last,dataset,sequence,rlmode,ck,skipped)
+ if ok then
+ done=true
+ end
+ end
+ return head,start,done
+end
+local function chaintrac(head,start,dataset,sequence,rlmode,ck,skipped,match)
+ local rule=ck[1]
+ local lookuptype=ck[8] or ck[2]
+ local nofseq=#ck[3]
+ local first=ck[4]
+ local last=ck[5]
+ local char=getchar(start)
+ logwarning("%s: rule %s %s at char %s for (%s,%s,%s) chars, lookuptype %a",
+ cref(dataset,sequence),rule,match and "matches" or "nomatch",gref(char),first-1,last-first+1,nofseq-last,lookuptype)
+end
+local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)
+ local sweepnode=sweepnode
+ local sweeptype=sweeptype
+ local currentfont=currentfont
+ local diskseen=false
+ local checkdisc=sweeptype and getprev(head)
+ local flags=sequence.flags or noflags
+ local done=false
+ local markclass=sequence.markclass
+ local skipmark=flags[1]
+ local skipligature=flags[2]
+ local skipbase=flags[3]
+ local skipsome=flags[5]
+ local skipped=false
+ local startprev,
+ startnext=getboth(start)
+ for k=1,#contexts do
+ local match=true
+ local current=start
+ local last=start
+ local ck=contexts[k]
+ local seq=ck[3]
+ local s=#seq
+ if s==1 then
+ local char=ischar(current,currentfont)
+ if char and not seq[1][char] then
+ match=false
+ end
+ else
+ local f=ck[4]
+ local l=ck[5]
+ if l>f then
+ local discfound
+ local n=f+1
+ last=startnext
+ while n<=l do
+ if not last and (sweeptype=="post" or sweeptype=="replace") then
+ last=getnext(sweepnode)
+ sweeptype=nil
+ end
+ if last then
+ local char,id=ischar(last,currentfont)
+ if char then
+ if skipsome then
+ local class=classes[char]
+ if class==skipmark or class==skipligature or class==skipbase or (markclass and class=="mark" and not markclass[char]) then
+ skipped=true
+ if trace_skips then
+ show_skip(dataset,sequence,char,ck,class)
+ end
+ last=getnext(last)
+ elseif seq[n][char] then
+ if n<l then
+ last=getnext(last)
+ end
+ n=n+1
+ else
+ if discfound then
+ notmatchreplace[discfound]=true
+ if notmatchpre[discfound] then
+ match=false
+ end
+ else
+ match=false
+ end
+ break
+ end
+ else
+ if seq[n][char] then
+ if n<l then
+ last=getnext(last)
+ end
+ n=n+1
+ else
+ if discfound then
+ notmatchreplace[discfound]=true
+ if notmatchpre[discfound] then
+ match=false
+ end
+ else
+ match=false
+ end
+ break
+ end
+ end
+ elseif char==false then
+ if discfound then
+ notmatchreplace[discfound]=true
+ if notmatchpre[discfound] then
+ match=false
+ end
+ else
+ match=false
+ end
+ break
+ elseif id==disc_code then
+ diskseen=true
+ discfound=last
+ notmatchpre[last]=nil
+ notmatchpost[last]=true
+ notmatchreplace[last]=nil
+ local pre,post,replace=getdisc(last)
+ if pre then
+ local n=n
+ while pre do
+ if seq[n][getchar(pre)] then
+ n=n+1
+ if n>l then
+ break
+ end
+ pre=getnext(pre)
+ else
+ notmatchpre[last]=true
+ break
+ end
+ end
+ if n<=l then
+ notmatchpre[last]=true
+ end
+ else
+ notmatchpre[last]=true
+ end
+ if replace then
+ while replace do
+ if seq[n][getchar(replace)] then
+ n=n+1
+ if n>l then
+ break
+ end
+ replace=getnext(replace)
+ else
+ notmatchreplace[last]=true
+ if notmatchpre[last] then
+ match=false
+ end
+ break
+ end
+ end
+ if notmatchpre[last] then
+ match=false
+ end
+ end
+ last=getnext(last)
+ else
+ match=false
+ break
+ end
+ else
+ match=false
+ break
+ end
+ end
+ end
+ if match and f>1 then
+ if startprev then
+ local prev=startprev
+ if prev==checkdisc and (sweeptype=="pre" or sweeptype=="replace") then
+ prev=getprev(sweepnode)
+ end
+ if prev then
+ local discfound
+ local n=f-1
+ while n>=1 do
+ if prev then
+ local char,id=ischar(prev,currentfont)
+ if char then
+ if skipsome then
+ local class=classes[char]
+ if class==skipmark or class==skipligature or class==skipbase or (markclass and class=="mark" and not markclass[char]) then
+ skipped=true
+ if trace_skips then
+ show_skip(dataset,sequence,char,ck,class)
+ end
+ prev=getprev(prev)
+ elseif seq[n][char] then
+ if n>1 then
+ prev=getprev(prev)
+ end
+ n=n-1
+ else
+ if discfound then
+ notmatchreplace[discfound]=true
+ if notmatchpost[discfound] then
+ match=false
+ end
+ else
+ match=false
+ end
+ break
+ end
+ else
+ if seq[n][char] then
+ if n>1 then
+ prev=getprev(prev)
+ end
+ n=n-1
+ else
+ if discfound then
+ notmatchreplace[discfound]=true
+ if notmatchpost[discfound] then
+ match=false
+ end
+ else
+ match=false
+ end
+ break
+ end
+ end
+ elseif char==false then
+ if discfound then
+ notmatchreplace[discfound]=true
+ if notmatchpost[discfound] then
+ match=false
+ end
+ else
+ match=false
+ end
+ break
+ elseif id==disc_code then
+ diskseen=true
+ discfound=prev
+ notmatchpre[prev]=true
+ notmatchpost[prev]=nil
+ notmatchreplace[prev]=nil
+ local pre,post,replace,pretail,posttail,replacetail=getdisc(prev,true)
+ if pre~=start and post~=start and replace~=start then
+ if post then
+ local n=n
+ while posttail do
+ if seq[n][getchar(posttail)] then
+ n=n-1
+ if posttail==post then
+ break
+ else
+ if n<1 then
+ break
+ end
+ posttail=getprev(posttail)
+ end
+ else
+ notmatchpost[prev]=true
+ break
+ end
+ end
+ if n>=1 then
+ notmatchpost[prev]=true
+ end
+ else
+ notmatchpost[prev]=true
+ end
+ if replace then
+ while replacetail do
+ if seq[n][getchar(replacetail)] then
+ n=n-1
+ if replacetail==replace then
+ break
+ else
+ if n<1 then
+ break
+ end
+ replacetail=getprev(replacetail)
+ end
+ else
+ notmatchreplace[prev]=true
+ if notmatchpost[prev] then
+ match=false
+ end
+ break
+ end
+ end
+ if not match then
+ break
+ end
+ end
+ end
+ prev=getprev(prev)
+ elseif id==glue_code then
+ local sn=seq[n]
+ if (sn[32] and spaces[prev]) or sn[0xFFFC] then
+ n=n-1
+ prev=getprev(prev)
+ else
+ match=false
+ break
+ end
+ elseif seq[n][0xFFFC] then
+ n=n-1
+ prev=getprev(prev)
+ else
+ match=false
+ break
+ end
+ else
+ match=false
+ break
+ end
+ end
+ else
+ match=false
+ end
+ else
+ match=false
+ end
+ end
+ if match and s>l then
+ local current=last and getnext(last)
+ if not current and (sweeptype=="post" or sweeptype=="replace") then
+ current=getnext(sweepnode)
+ end
+ if current then
+ local discfound
+ local n=l+1
+ while n<=s do
+ if current then
+ local char,id=ischar(current,currentfont)
+ if char then
+ if skipsome then
+ local class=classes[char]
+ if class==skipmark or class==skipligature or class==skipbase or (markclass and class=="mark" and not markclass[char]) then
+ skipped=true
+ if trace_skips then
+ show_skip(dataset,sequence,char,ck,class)
+ end
+ current=getnext(current)
+ elseif seq[n][char] then
+ if n<s then
+ current=getnext(current)
+ end
+ n=n+1
+ else
+ if discfound then
+ notmatchreplace[discfound]=true
+ if notmatchpre[discfound] then
+ match=false
+ end
+ else
+ match=false
+ end
+ break
+ end
+ else
+ if seq[n][char] then
+ if n<s then
+ current=getnext(current)
+ end
+ n=n+1
+ else
+ if discfound then
+ notmatchreplace[discfound]=true
+ if notmatchpre[discfound] then
+ match=false
+ end
+ else
+ match=false
+ end
+ break
+ end
+ end
+ elseif char==false then
+ if discfound then
+ notmatchreplace[discfound]=true
+ if notmatchpre[discfound] then
+ match=false
+ end
+ else
+ match=false
+ end
+ break
+ elseif id==disc_code then
+ diskseen=true
+ discfound=current
+ notmatchpre[current]=nil
+ notmatchpost[current]=true
+ notmatchreplace[current]=nil
+ local pre,post,replace=getdisc(current)
+ if pre then
+ local n=n
+ while pre do
+ if seq[n][getchar(pre)] then
+ n=n+1
+ if n>s then
+ break
+ end
+ pre=getnext(pre)
+ else
+ notmatchpre[current]=true
+ break
+ end
+ end
+ if n<=s then
+ notmatchpre[current]=true
+ end
+ else
+ notmatchpre[current]=true
+ end
+ if replace then
+ while replace do
+ if seq[n][getchar(replace)] then
+ n=n+1
+ if n>s then
+ break
+ end
+ replace=getnext(replace)
+ else
+ notmatchreplace[current]=true
+ if not notmatchpre[current] then
+ match=false
+ end
+ break
+ end
+ end
+ if not match then
+ break
+ end
+ else
+ end
+ current=getnext(current)
+ elseif id==glue_code then
+ local sn=seq[n]
+ if (sn[32] and spaces[current]) or sn[0xFFFC] then
+ n=n+1
+ current=getnext(current)
+ else
+ match=false
+ break
+ end
+ elseif seq[n][0xFFFC] then
+ n=n+1
+ current=getnext(current)
+ else
+ match=false
+ break
+ end
+ else
+ match=false
+ break
+ end
+ end
+ else
+ match=false
+ end
+ end
+ end
+ if match then
+ if trace_contexts then
+ chaintrac(head,start,dataset,sequence,rlmode,ck,skipped,true)
+ end
+ if diskseen or sweepnode then
+ head,start,done=chaindisk(head,start,dataset,sequence,rlmode,ck,skipped)
+ else
+ head,start,done=chainrun(head,start,last,dataset,sequence,rlmode,ck,skipped)
+ end
+ if done then
+ break
+ else
+ end
+ end
+ end
+ if diskseen then
+ notmatchpre={}
+ notmatchpost={}
+ notmatchreplace={}
+ end
+ return head,start,done
+end
+local function optimized_handle_contextchain(head,start,dataset,sequence,contexts,rlmode)
+ local sweepnode=sweepnode
+ local sweeptype=sweeptype
+ local postreplace
+ local prereplace
+ local checkdisc
+ local diskseen
+ if sweeptype then
+ if sweeptype=="replace" then
+ postreplace=true
+ prereplace=true
+ else
+ postreplace=sweeptype=="post"
+ prereplace=sweeptype=="pre"
+ end
+ checkdisc=getprev(head)
+ end
+ local currentfont=currentfont
+ local flags=sequence.flags or noflags
+ local skipsome=flags[5]
+ local skipmark
+ local skipligature
+ local skipbase
+ local markclass
+ if skipsome then
+ skipmark=flags[1]
+ skipligature=flags[2]
+ skipbase=flags[3]
+ markclass=sequence.markclass
+ end
+ local skipped
+ local startprev,
+ startnext=getboth(start)
+ local done
+ for k=1,contexts.n do
+ local current=start
+ local last=start
+ local ck=contexts[k]
+ local seq=ck[3]
+ local s=seq.n
+ if s==1 then
+ local char=ischar(current,currentfont)
+ if char and not seq[1][char] then
+ goto next
+ end
+ else
+ local f=ck[4]
+ local l=ck[5]
+ if l>f then
+ local discfound
+ local n=f+1
+ last=startnext
+ while n<=l do
+ if not last and postreplace then
+ last=getnext(sweepnode)
+ sweeptype=nil
+ end
+ if last then
+ local char,id=ischar(last,currentfont)
+ if char then
+ if skipsome then
+ local class=classes[char]
+ if class==skipmark or (markclass and class=="mark" and not markclass[char]) or class==skipligature or class==skipbase then
+ skipped=true
+ if trace_skips then
+ show_skip(dataset,sequence,char,ck,class)
+ end
+ last=getnext(last)
+ elseif seq[n][char] then
+ if n<l then
+ last=getnext(last)
+ end
+ n=n+1
+ else
+ if discfound then
+ notmatchreplace[discfound]=true
+ if notmatchpre[discfound] then
+ goto next
+ end
+ else
+ goto next
+ end
+ break
+ end
+ else
+ if seq[n][char] then
+ if n<l then
+ last=getnext(last)
+ end
+ n=n+1
+ else
+ if discfound then
+ notmatchreplace[discfound]=true
+ if notmatchpre[discfound] then
+ goto next
+ end
+ else
+ goto next
+ end
+ break
+ end
+ end
+ elseif char==false then
+ if discfound then
+ notmatchreplace[discfound]=true
+ if notmatchpre[discfound] then
+ goto next
+ end
+ else
+ goto next
+ end
+ break
+ elseif id==disc_code then
+ diskseen=true
+ discfound=last
+ notmatchpre[last]=nil
+ notmatchpost[last]=true
+ notmatchreplace[last]=nil
+ local pre,post,replace=getdisc(last)
+ if pre then
+ local n=n
+ while pre do
+ if seq[n][getchar(pre)] then
+ n=n+1
+ if n>l then
+ break
+ end
+ pre=getnext(pre)
+ else
+ notmatchpre[last]=true
+ break
+ end
+ end
+ if n<=l then
+ notmatchpre[last]=true
+ end
+ else
+ notmatchpre[last]=true
+ end
+ if replace then
+ while replace do
+ if seq[n][getchar(replace)] then
+ n=n+1
+ if n>l then
+ break
+ end
+ replace=getnext(replace)
+ else
+ notmatchreplace[last]=true
+ if notmatchpre[last] then
+ goto next
+ end
+ break
+ end
+ end
+ if notmatchpre[last] then
+ goto next
+ end
+ end
+ last=getnext(last)
+ else
+ goto next
+ end
+ else
+ goto next
+ end
+ end
+ end
+ if f>1 then
+ if startprev then
+ local prev=startprev
+ if prereplace and prev==checkdisc then
+ prev=getprev(sweepnode)
+ end
+ if prev then
+ local discfound
+ local n=f-1
+ while n>=1 do
+ if prev then
+ local char,id=ischar(prev,currentfont)
+ if char then
+ if skipsome then
+ local class=classes[char]
+ if class==skipmark or (markclass and class=="mark" and not markclass[char]) or class==skipligature or class==skipbase then
+ skipped=true
+ if trace_skips then
+ show_skip(dataset,sequence,char,ck,class)
+ end
+ prev=getprev(prev)
+ elseif seq[n][char] then
+ if n>1 then
+ prev=getprev(prev)
+ end
+ n=n-1
+ else
+ if discfound then
+ notmatchreplace[discfound]=true
+ if notmatchpost[discfound] then
+ goto next
+ end
+ else
+ goto next
+ end
+ break
+ end
+ else
+ if seq[n][char] then
+ if n>1 then
+ prev=getprev(prev)
+ end
+ n=n-1
+ else
+ if discfound then
+ notmatchreplace[discfound]=true
+ if notmatchpost[discfound] then
+ goto next
+ end
+ else
+ goto next
+ end
+ break
+ end
+ end
+ elseif char==false then
+ if discfound then
+ notmatchreplace[discfound]=true
+ if notmatchpost[discfound] then
+ goto next
+ end
+ else
+ goto next
+ end
+ break
+ elseif id==disc_code then
+ diskseen=true
+ discfound=prev
+ notmatchpre[prev]=true
+ notmatchpost[prev]=nil
+ notmatchreplace[prev]=nil
+ local pre,post,replace,pretail,posttail,replacetail=getdisc(prev,true)
+ if pre~=start and post~=start and replace~=start then
+ if post then
+ local n=n
+ while posttail do
+ if seq[n][getchar(posttail)] then
+ n=n-1
+ if posttail==post then
+ break
+ else
+ if n<1 then
+ break
+ end
+ posttail=getprev(posttail)
+ end
+ else
+ notmatchpost[prev]=true
+ break
+ end
+ end
+ if n>=1 then
+ notmatchpost[prev]=true
+ end
+ else
+ notmatchpost[prev]=true
+ end
+ if replace then
+ while replacetail do
+ if seq[n][getchar(replacetail)] then
+ n=n-1
+ if replacetail==replace then
+ break
+ else
+ if n<1 then
+ break
+ end
+ replacetail=getprev(replacetail)
+ end
+ else
+ notmatchreplace[prev]=true
+ if notmatchpost[prev] then
+ goto next
+ end
+ break
+ end
+ end
+ end
+ end
+ prev=getprev(prev)
+ elseif id==glue_code then
+ local sn=seq[n]
+ if (sn[32] and spaces[prev]) or sn[0xFFFC] then
+ n=n-1
+ prev=getprev(prev)
+ else
+ goto next
+ end
+ elseif seq[n][0xFFFC] then
+ n=n-1
+ prev=getprev(prev)
+ else
+ goto next
+ end
+ else
+ goto next
+ end
+ end
+ else
+ goto next
+ end
+ else
+ goto next
+ end
+ end
+ if s>l then
+ local current=last and getnext(last)
+ if not current and postreplace then
+ current=getnext(sweepnode)
+ end
+ if current then
+ local discfound
+ local n=l+1
+ while n<=s do
+ if current then
+ local char,id=ischar(current,currentfont)
+ if char then
+ if skipsome then
+ local class=classes[char]
+ if class==skipmark or (markclass and class=="mark" and not markclass[char]) or class==skipligature or class==skipbase then
+ skipped=true
+ if trace_skips then
+ show_skip(dataset,sequence,char,ck,class)
+ end
+ current=getnext(current)
+ elseif seq[n][char] then
+ if n<s then
+ current=getnext(current)
+ end
+ n=n+1
+ else
+ if discfound then
+ notmatchreplace[discfound]=true
+ if notmatchpre[discfound] then
+ goto next
+ end
+ else
+ goto next
+ end
+ break
+ end
+ else
+ if seq[n][char] then
+ if n<s then
+ current=getnext(current)
+ end
+ n=n+1
+ else
+ if discfound then
+ notmatchreplace[discfound]=true
+ if notmatchpre[discfound] then
+ goto next
+ end
+ else
+ goto next
+ end
+ break
+ end
+ end
+ elseif char==false then
+ if discfound then
+ notmatchreplace[discfound]=true
+ if notmatchpre[discfound] then
+ goto next
+ end
+ else
+ goto next
+ end
+ break
+ elseif id==disc_code then
+ diskseen=true
+ discfound=current
+ notmatchpre[current]=nil
+ notmatchpost[current]=true
+ notmatchreplace[current]=nil
+ local pre,post,replace=getdisc(current)
+ if pre then
+ local n=n
+ while pre do
+ if seq[n][getchar(pre)] then
+ n=n+1
+ if n>s then
+ break
+ end
+ pre=getnext(pre)
+ else
+ notmatchpre[current]=true
+ break
+ end
+ end
+ if n<=s then
+ notmatchpre[current]=true
+ end
+ else
+ notmatchpre[current]=true
+ end
+ if replace then
+ while replace do
+ if seq[n][getchar(replace)] then
+ n=n+1
+ if n>s then
+ break
+ end
+ replace=getnext(replace)
+ else
+ notmatchreplace[current]=true
+ if not notmatchpre[current] then
+ goto next
+ end
+ break
+ end
+ end
+ else
+ end
+ current=getnext(current)
+ elseif id==glue_code then
+ local sn=seq[n]
+ if (sn[32] and spaces[current]) or sn[0xFFFC] then
+ n=n+1
+ current=getnext(current)
+ else
+ goto next
+ end
+ elseif seq[n][0xFFFC] then
+ n=n+1
+ current=getnext(current)
+ else
+ goto next
+ end
+ else
+ goto next
+ end
+ end
+ else
+ goto next
+ end
+ end
+ end
+ if trace_contexts then
+ chaintrac(head,start,dataset,sequence,rlmode,ck,skipped,true)
+ end
+ if diskseen or sweepnode then
+ head,start,done=chaindisk(head,start,dataset,sequence,rlmode,ck,skipped)
+ else
+ head,start,done=chainrun(head,start,last,dataset,sequence,rlmode,ck,skipped)
+ end
+ if done then
+ break
+ end
+ ::next::
+ end
+ if diskseen then
+ notmatchpre={}
+ notmatchpost={}
+ notmatchreplace={}
+ end
+ return head,start,done
+end
+directives.register("otf.optimizechains",function(v)
+ if v then
+ report_chain()
+ report_chain("using experimental optimized code")
+ report_chain()
+ end
+ local handle=v and optimized_handle_contextchain or handle_contextchain
+ handlers.gsub_context=handle
+ handlers.gsub_contextchain=handle
+ handlers.gsub_reversecontextchain=handle
+ handlers.gpos_contextchain=handle
+ handlers.gpos_context=handle
+end)
+handlers.gsub_context=handle_contextchain
+handlers.gsub_contextchain=handle_contextchain
+handlers.gsub_reversecontextchain=handle_contextchain
+handlers.gpos_contextchain=handle_contextchain
+handlers.gpos_context=handle_contextchain
+local function chained_contextchain(head,start,stop,dataset,sequence,currentlookup,rlmode)
+ local steps=currentlookup.steps
+ local nofsteps=currentlookup.nofsteps
+ if nofsteps>1 then
+ reportmoresteps(dataset,sequence)
+ end
+ return handle_contextchain(head,start,dataset,sequence,currentlookup,rlmode)
+end
+chainprocs.gsub_context=chained_contextchain
+chainprocs.gsub_contextchain=chained_contextchain
+chainprocs.gsub_reversecontextchain=chained_contextchain
+chainprocs.gpos_contextchain=chained_contextchain
+chainprocs.gpos_context=chained_contextchain
+local missing=setmetatableindex("table")
+local logwarning=report_process
+local resolved={}
+local function logprocess(...)
+ if trace_steps then
+ registermessage(...)
+ end
+ report_process(...)
+end
+local sequencelists=setmetatableindex(function(t,font)
+ local sequences=fontdata[font].resources.sequences
+ if not sequences or not next(sequences) then
+ sequences=false
+ end
+ t[font]=sequences
+ return sequences
+end)
+do
+ local autofeatures=fonts.analyzers.features
+ local featuretypes=otf.tables.featuretypes
+ local defaultscript=otf.features.checkeddefaultscript
+ local defaultlanguage=otf.features.checkeddefaultlanguage
+ local wildcard="*"
+ local default="dflt"
+ local function initialize(sequence,script,language,enabled,autoscript,autolanguage)
+ local features=sequence.features
+ if features then
+ local order=sequence.order
+ if order then
+ local featuretype=featuretypes[sequence.type or "unknown"]
+ for i=1,#order do
+ local kind=order[i]
+ local valid=enabled[kind]
+ if valid then
+ local scripts=features[kind]
+ local languages=scripts and (
+ scripts[script] or
+ scripts[wildcard] or
+ (autoscript and defaultscript(featuretype,autoscript,scripts))
+ )
+ local enabled=languages and (
+ languages[language] or
+ languages[wildcard] or
+ (autolanguage and defaultlanguage(featuretype,autolanguage,languages))
+ )
+ if enabled then
+ return { valid,autofeatures[kind] or false,sequence,kind }
+ end
+ end
+ end
+ else
+ end
+ end
+ return false
+ end
+ function otf.dataset(tfmdata,font)
+ local shared=tfmdata.shared
+ local properties=tfmdata.properties
+ local language=properties.language or "dflt"
+ local script=properties.script or "dflt"
+ local enabled=shared.features
+ local autoscript=enabled and enabled.autoscript
+ local autolanguage=enabled and enabled.autolanguage
+ local res=resolved[font]
+ if not res then
+ res={}
+ resolved[font]=res
+ end
+ local rs=res[script]
+ if not rs then
+ rs={}
+ res[script]=rs
+ end
+ local rl=rs[language]
+ if not rl then
+ rl={
+ }
+ rs[language]=rl
+ local sequences=tfmdata.resources.sequences
+ if sequences then
+ for s=1,#sequences do
+ local v=enabled and initialize(sequences[s],script,language,enabled,autoscript,autolanguage)
+ if v then
+ rl[#rl+1]=v
+ end
+ end
+ end
+ end
+ return rl
+ end
+end
+local function report_disc(what,n)
+ report_run("%s: %s > %s",what,n,languages.serializediscretionary(n))
+end
+local function kernrun(disc,k_run,font,attr,...)
+ if trace_kernruns then
+ report_disc("kern",disc)
+ end
+ local prev,next=getboth(disc)
+ local nextstart=next
+ local done=false
+ local pre,post,replace,pretail,posttail,replacetail=getdisc(disc,true)
+ local prevmarks=prev
+ while prevmarks do
+ local char=ischar(prevmarks,font)
+ if char and marks[char] then
+ prevmarks=getprev(prevmarks)
+ else
+ break
+ end
+ end
+ if prev and not ischar(prev,font) then
+ prev=false
+ end
+ if next and not ischar(next,font) then
+ next=false
+ end
+ if pre then
+ if k_run(pre,"injections",nil,font,attr,...) then
+ done=true
+ end
+ if prev then
+ setlink(prev,pre)
+ if k_run(prevmarks,"preinjections",pre,font,attr,...) then
+ done=true
+ end
+ setprev(pre)
+ setlink(prev,disc)
+ end
+ end
+ if post then
+ if k_run(post,"injections",nil,font,attr,...) then
+ done=true
+ end
+ if next then
+ setlink(posttail,next)
+ if k_run(posttail,"postinjections",next,font,attr,...) then
+ done=true
+ end
+ setnext(posttail)
+ setlink(disc,next)
+ end
+ end
+ if replace then
+ if k_run(replace,"injections",nil,font,attr,...) then
+ done=true
+ end
+ if prev then
+ setlink(prev,replace)
+ if k_run(prevmarks,"replaceinjections",replace,font,attr,...) then
+ done=true
+ end
+ setprev(replace)
+ setlink(prev,disc)
+ end
+ if next then
+ setlink(replacetail,next)
+ if k_run(replacetail,"replaceinjections",next,font,attr,...) then
+ done=true
+ end
+ setnext(replacetail)
+ setlink(disc,next)
+ end
+ elseif prev and next then
+ setlink(prev,next)
+ if k_run(prevmarks,"emptyinjections",next,font,attr,...) then
+ done=true
+ end
+ setlink(prev,disc,next)
+ end
+ return nextstart,done
+end
+local function comprun(disc,c_run,...)
+ if trace_compruns then
+ report_disc("comp",disc)
+ end
+ local pre,post,replace=getdisc(disc)
+ local renewed=false
+ if pre then
+ sweepnode=disc
+ sweeptype="pre"
+ local new,done=c_run(pre,...)
+ if done then
+ pre=new
+ renewed=true
+ end
+ end
+ if post then
+ sweepnode=disc
+ sweeptype="post"
+ local new,done=c_run(post,...)
+ if done then
+ post=new
+ renewed=true
+ end
+ end
+ if replace then
+ sweepnode=disc
+ sweeptype="replace"
+ local new,done=c_run(replace,...)
+ if done then
+ replace=new
+ renewed=true
+ end
+ end
+ sweepnode=nil
+ sweeptype=nil
+ if renewed then
+ setdisc(disc,pre,post,replace)
+ end
+ return getnext(disc),renewed
+end
+local function testrun(disc,t_run,c_run,...)
+ if trace_testruns then
+ report_disc("test",disc)
+ end
+ local prev,next=getboth(disc)
+ if not next then
+ return
+ end
+ local pre,post,replace,pretail,posttail,replacetail=getdisc(disc,true)
+ local done=false
+ if (post or replace) and prev then
+ if post then
+ setlink(posttail,next)
+ else
+ post=next
+ end
+ if replace then
+ setlink(replacetail,next)
+ else
+ replace=next
+ end
+ local d_post=t_run(post,next,...)
+ local d_replace=t_run(replace,next,...)
+ if d_post>0 or d_replace>0 then
+ local d=d_replace>d_post and d_replace or d_post
+ local head=getnext(disc)
+ local tail=head
+ for i=1,d do
+ tail=getnext(tail)
+ if getid(tail)==disc_code then
+ head,tail=flattendisk(head,tail)
+ end
+ end
+ local next=getnext(tail)
+ setnext(tail)
+ setprev(head)
+ local new=copy_node_list(head)
+ if posttail then
+ setlink(posttail,head)
+ else
+ post=head
+ end
+ if replacetail then
+ setlink(replacetail,new)
+ else
+ replace=new
+ end
+ setlink(disc,next)
+ else
+ if posttail then
+ setnext(posttail)
+ else
+ post=nil
+ end
+ setnext(replacetail)
+ if replacetail then
+ setnext(replacetail)
+ else
+ replace=nil
+ end
+ setprev(next,disc)
+ end
+ end
+ local renewed=false
+ if pre then
+ sweepnode=disc
+ sweeptype="pre"
+ local new,ok=c_run(pre,...)
+ if ok then
+ pre=new
+ renewed=true
+ end
+ end
+ if post then
+ sweepnode=disc
+ sweeptype="post"
+ local new,ok=c_run(post,...)
+ if ok then
+ post=new
+ renewed=true
+ end
+ end
+ if replace then
+ sweepnode=disc
+ sweeptype="replace"
+ local new,ok=c_run(replace,...)
+ if ok then
+ replace=new
+ renewed=true
+ end
+ end
+ sweepnode=nil
+ sweeptype=nil
+ if renewed then
+ setdisc(disc,pre,post,replace)
+ return next,true
+ else
+ return next,done
+ end
+end
+local nesting=0
+local function c_run_single(head,font,attr,lookupcache,step,dataset,sequence,rlmode,handler)
+ local done=false
+ local sweep=sweephead[head]
+ if sweep then
+ start=sweep
+ sweephead[head]=false
+ else
+ start=head
+ end
+ while start do
+ local char=ischar(start,font)
+ if char then
+ local a
+ if attr then
+ a=getattr(start,0)
+ end
+ if not a or (a==attr) then
+ local lookupmatch=lookupcache[char]
+ if lookupmatch then
+ local ok
+ head,start,ok=handler(head,start,dataset,sequence,lookupmatch,rlmode,step,1)
+ if ok then
+ done=true
+ end
+ end
+ if start then
+ start=getnext(start)
+ end
+ else
+ start=getnext(start)
+ end
+ elseif char==false then
+ return head,done
+ elseif sweep then
+ return head,done
+ else
+ start=getnext(start)
+ end
+ end
+ return head,done
+end
+local function t_run_single(start,stop,font,attr,lookupcache)
+ local lastd=nil
+ while start~=stop do
+ local char=ischar(start,font)
+ if char then
+ local a
+ if attr then
+ a=getattr(start,0)
+ end
+ local startnext=getnext(start)
+ if not a or (a==attr) then
+ local lookupmatch=lookupcache[char]
+ if lookupmatch then
+ local s=startnext
+ local ss=nil
+ local sstop=s==stop
+ if not s then
+ s=ss
+ ss=nil
+ end
+ while getid(s)==disc_code do
+ ss=getnext(s)
+ s=getfield(s,"replace")
+ if not s then
+ s=ss
+ ss=nil
+ end
+ end
+ local l=nil
+ local d=0
+ while s do
+ local lg=lookupmatch[getchar(s)]
+ if lg then
+ if sstop then
+ d=1
+ elseif d>0 then
+ d=d+1
+ end
+ l=lg
+ s=getnext(s)
+ sstop=s==stop
+ if not s then
+ s=ss
+ ss=nil
+ end
+ while getid(s)==disc_code do
+ ss=getnext(s)
+ s=getfield(s,"replace")
+ if not s then
+ s=ss
+ ss=nil
+ end
+ end
+ else
+ break
+ end
+ end
+ if l and l.ligature then
+ lastd=d
+ end
+ end
+ else
+ end
+ if lastd then
+ return lastd
+ end
+ start=startnext
+ else
+ break
+ end
+ end
+ return 0
+end
+local function k_run_single(sub,injection,last,font,attr,lookupcache,step,dataset,sequence,rlmode,handler)
+ local a
+ if attr then
+ a=getattr(sub,0)
+ end
+ if not a or (a==attr) then
+ for n in traverse_nodes(sub) do
+ if n==last then
+ break
+ end
+ local char=ischar(n)
+ if char then
+ local lookupmatch=lookupcache[char]
+ if lookupmatch then
+ local h,d,ok=handler(sub,n,dataset,sequence,lookupmatch,rlmode,step,1,injection)
+ if ok then
+ return true
+ end
+ end
+ end
+ end
+ end
+end
+local function c_run_multiple(head,font,attr,steps,nofsteps,dataset,sequence,rlmode,handler)
+ local done=false
+ local sweep=sweephead[head]
+ if sweep then
+ start=sweep
+ sweephead[head]=false
+ else
+ start=head
+ end
+ while start do
+ local char=ischar(start,font)
+ if char then
+ local a
+ if attr then
+ a=getattr(start,0)
+ end
+ if not a or (a==attr) then
+ for i=1,nofsteps do
+ local step=steps[i]
+ local lookupcache=step.coverage
+ local lookupmatch=lookupcache[char]
+ if lookupmatch then
+ local ok
+ head,start,ok=handler(head,start,dataset,sequence,lookupmatch,rlmode,step,i)
+ if ok then
+ done=true
+ break
+ elseif not start then
+ break
+ end
+ end
+ end
+ if start then
+ start=getnext(start)
+ end
+ else
+ start=getnext(start)
+ end
+ elseif char==false then
+ return head,done
+ elseif sweep then
+ return head,done
+ else
+ start=getnext(start)
+ end
+ end
+ return head,done
+end
+local function t_run_multiple(start,stop,font,attr,steps,nofsteps)
+ local lastd=nil
+ while start~=stop do
+ local char=ischar(start,font)
+ if char then
+ local a
+ if attr then
+ a=getattr(start,0)
+ end
+ local startnext=getnext(start)
+ if not a or (a==attr) then
+ for i=1,nofsteps do
+ local step=steps[i]
+ local lookupcache=step.coverage
+ local lookupmatch=lookupcache[char]
+ if lookupmatch then
+ local s=startnext
+ local ss=nil
+ local sstop=s==stop
+ if not s then
+ s=ss
+ ss=nil
+ end
+ while getid(s)==disc_code do
+ ss=getnext(s)
+ s=getfield(s,"replace")
+ if not s then
+ s=ss
+ ss=nil
+ end
+ end
+ local l=nil
+ local d=0
+ while s do
+ local lg=lookupmatch[getchar(s)]
+ if lg then
+ if sstop then
+ d=1
+ elseif d>0 then
+ d=d+1
+ end
+ l=lg
+ s=getnext(s)
+ sstop=s==stop
+ if not s then
+ s=ss
+ ss=nil
+ end
+ while getid(s)==disc_code do
+ ss=getnext(s)
+ s=getfield(s,"replace")
+ if not s then
+ s=ss
+ ss=nil
+ end
+ end
+ else
+ break
+ end
+ end
+ if l and l.ligature then
+ lastd=d
+ end
+ end
+ end
+ else
+ end
+ if lastd then
+ return lastd
+ end
+ start=startnext
+ else
+ break
+ end
+ end
+ return 0
+end
+local function k_run_multiple(sub,injection,last,font,attr,steps,nofsteps,dataset,sequence,rlmode,handler)
+ local a
+ if attr then
+ a=getattr(sub,0)
+ end
+ if not a or (a==attr) then
+ for n in traverse_nodes(sub) do
+ if n==last then
+ break
+ end
+ local char=ischar(n)
+ if char then
+ for i=1,nofsteps do
+ local step=steps[i]
+ local lookupcache=step.coverage
+ local lookupmatch=lookupcache[char]
+ if lookupmatch then
+ local h,d,ok=handler(head,n,dataset,sequence,lookupmatch,rlmode,step,i,injection)
+ if ok then
+ return true
+ end
+ end
+ end
+ end
+ end
+ end
+end
+local function txtdirstate(start,stack,top,rlparmode)
+ local dir=getdir(start)
+ local new=1
+ if dir=="+TRT" then
+ top=top+1
+ stack[top]=dir
+ new=-1
+ elseif dir=="+TLT" then
+ top=top+1
+ stack[top]=dir
+ elseif dir=="-TRT" or dir=="-TLT" then
+ top=top-1
+ if stack[top]=="+TRT" then
+ new=-1
+ end
+ else
+ new=rlparmode
+ end
+ if trace_directions then
+ report_process("directions after txtdir %a: parmode %a, txtmode %a, level %a",dir,mref(rlparmode),mref(new),top)
+ end
+ return getnext(start),top,new
+end
+local function pardirstate(start)
+ local dir=getdir(start)
+ local new=0
+ if dir=="TLT" then
+ new=1
+ elseif dir=="TRT" then
+ new=-1
+ end
+ if trace_directions then
+ report_process("directions after pardir %a: parmode %a",dir,mref(new))
+ end
+ return getnext(start),new,new
+end
+otf.helpers=otf.helpers or {}
+otf.helpers.txtdirstate=txtdirstate
+otf.helpers.pardirstate=pardirstate
+do
+ local fastdisc=true
+ directives.register("otf.fastdisc",function(v) fastdisc=v end)
+ local otfdataset=nil
+ local getfastdisc={ __index=function(t,k)
+ local v=usesfont(k,currentfont)
+ t[k]=v
+ return v
+ end }
+ local getfastspace={ __index=function(t,k)
+ local v=isspace(k,threshold) or false
+ t[k]=v
+ return v
+ end }
+ function otf.featuresprocessor(head,font,attr,direction,n)
+ local sequences=sequencelists[font]
+ nesting=nesting+1
+ if nesting==1 then
+ currentfont=font
+ tfmdata=fontdata[font]
+ descriptions=tfmdata.descriptions
+ characters=tfmdata.characters
+ local resources=tfmdata.resources
+ marks=resources.marks
+ classes=resources.classes
+ threshold,
+ factor=getthreshold(font)
+ checkmarks=tfmdata.properties.checkmarks
+ if not otfdataset then
+ otfdataset=otf.dataset
+ end
+ discs=fastdisc and n and n>1 and setmetatable({},getfastdisc)
+ spaces=setmetatable({},getfastspace)
+ elseif currentfont~=font then
+ report_warning("nested call with a different font, level %s, quitting",nesting)
+ nesting=nesting-1
+ return head,false
+ end
+ local head=tonut(head)
+ if trace_steps then
+ checkstep(head)
+ end
+ local initialrl=direction=="TRT" and -1 or 0
+ local done=false
+ local datasets=otfdataset(tfmdata,font,attr)
+ local dirstack={}
+ sweephead={}
+ for s=1,#datasets do
+ local dataset=datasets[s]
+ local attribute=dataset[2]
+ local sequence=dataset[3]
+ local rlparmode=initialrl
+ local topstack=0
+ local typ=sequence.type
+ local gpossing=typ=="gpos_single" or typ=="gpos_pair"
+ local handler=handlers[typ]
+ local steps=sequence.steps
+ local nofsteps=sequence.nofsteps
+ if not steps then
+ local h,d,ok=handler(head,head,dataset,sequence,nil,nil,nil,0,font,attr)
+ if ok then
+ done=true
+ if h then
+ head=h
+ end
+ end
+ elseif typ=="gsub_reversecontextchain" then
+ local start=find_node_tail(head)
+ local rlmode=0
+ local merged=steps.merged
+ while start do
+ local char=ischar(start,font)
+ if char then
+ local m=merged[char]
+ if m then
+ local a
+ if attr then
+ a=getattr(start,0)
+ end
+ if not a or (a==attr) then
+ for i=m[1],m[2] do
+ local step=steps[i]
+ local lookupcache=step.coverage
+ local lookupmatch=lookupcache[char]
+ if lookupmatch then
+ local ok
+ head,start,ok=handler(head,start,dataset,sequence,lookupmatch,rlmode,step,i)
+ if ok then
+ done=true
+ break
+ end
+ end
+ end
+ if start then
+ start=getprev(start)
+ end
+ else
+ start=getprev(start)
+ end
+ else
+ start=getprev(start)
+ end
+ else
+ start=getprev(start)
+ end
+ end
+ else
+ local start=head
+ local rlmode=initialrl
+ if nofsteps==1 then
+ local step=steps[1]
+ local lookupcache=step.coverage
+ while start do
+ local char,id=ischar(start,font)
+ if char then
+ local lookupmatch=lookupcache[char]
+ if lookupmatch then
+ local a
+ if attr then
+ if getattr(start,0)==attr and (not attribute or getprop(start,a_state)==attribute) then
+ a=true
+ end
+ elseif not attribute or getprop(start,a_state)==attribute then
+ a=true
+ end
+ if a then
+ local ok
+ head,start,ok=handler(head,start,dataset,sequence,lookupmatch,rlmode,step,1)
+ if ok then
+ done=true
+ end
+ if start then
+ start=getnext(start)
+ end
+ else
+ start=getnext(start)
+ end
+ else
+ start=getnext(start)
+ end
+ elseif char==false then
+ start=getnext(start)
+ elseif id==glue_code then
+ start=getnext(start)
+ elseif id==disc_code then
+ if not discs or discs[start]==true then
+ local ok
+ if gpossing then
+ start,ok=kernrun(start,k_run_single,font,attr,lookupcache,step,dataset,sequence,rlmode,handler)
+ elseif typ=="gsub_ligature" then
+ start,ok=testrun(start,t_run_single,c_run_single,font,attr,lookupcache,step,dataset,sequence,rlmode,handler)
+ else
+ start,ok=comprun(start,c_run_single,font,attr,lookupcache,step,dataset,sequence,rlmode,handler)
+ end
+ if ok then
+ done=true
+ end
+ else
+ start=getnext(start)
+ end
+ elseif id==math_code then
+ start=getnext(end_of_math(start))
+ elseif id==dir_code then
+ start,topstack,rlmode=txtdirstate(start,dirstack,topstack,rlparmode)
+ elseif id==localpar_code then
+ start,rlparmode,rlmode=pardirstate(start)
+ else
+ start=getnext(start)
+ end
+ end
+ else
+ local merged=steps.merged
+ while start do
+ local char,id=ischar(start,font)
+ if char then
+ local m=merged[char]
+ if m then
+ local a
+ if attr then
+ if getattr(start,0)==attr and (not attribute or getprop(start,a_state)==attribute) then
+ a=true
+ end
+ elseif not attribute or getprop(start,a_state)==attribute then
+ a=true
+ end
+ if a then
+ for i=m[1],m[2] do
+ local step=steps[i]
+ local lookupcache=step.coverage
+ local lookupmatch=lookupcache[char]
+ if lookupmatch then
+ local ok
+ head,start,ok=handler(head,start,dataset,sequence,lookupmatch,rlmode,step,i)
+ if ok then
+ done=true
+ break
+ elseif not start then
+ break
+ end
+ end
+ end
+ if start then
+ start=getnext(start)
+ end
+ else
+ start=getnext(start)
+ end
+ else
+ start=getnext(start)
+ end
+ elseif char==false then
+ start=getnext(start)
+ elseif id==glue_code then
+ start=getnext(start)
+ elseif id==disc_code then
+ if not discs or discs[start]==true then
+ local ok
+ if gpossing then
+ start,ok=kernrun(start,k_run_multiple,font,attr,steps,nofsteps,dataset,sequence,rlmode,handler)
+ elseif typ=="gsub_ligature" then
+ start,ok=testrun(start,t_run_multiple,c_run_multiple,font,attr,steps,nofsteps,dataset,sequence,rlmode,handler)
+ else
+ start,ok=comprun(start,c_run_multiple,font,attr,steps,nofsteps,dataset,sequence,rlmode,handler)
+ end
+ if ok then
+ done=true
+ end
+ else
+ start=getnext(start)
+ end
+ elseif id==math_code then
+ start=getnext(end_of_math(start))
+ elseif id==dir_code then
+ start,topstack,rlmode=txtdirstate(start,dirstack,topstack,rlparmode)
+ elseif id==localpar_code then
+ start,rlparmode,rlmode=pardirstate(start)
+ else
+ start=getnext(start)
+ end
+ end
+ end
+ end
+ if trace_steps then
+ registerstep(head)
+ end
+ end
+ nesting=nesting-1
+ head=tonode(head)
+ return head,done
+ end
+ function otf.datasetpositionprocessor(head,font,direction,dataset)
+ currentfont=font
+ tfmdata=fontdata[font]
+ descriptions=tfmdata.descriptions
+ characters=tfmdata.characters
+ local resources=tfmdata.resources
+ marks=resources.marks
+ classes=resources.classes
+ threshold,
+ factor=getthreshold(font)
+ checkmarks=tfmdata.properties.checkmarks
+ if type(dataset)=="number" then
+ dataset=otfdataset(tfmdata,font,0)[dataset]
+ end
+ local sequence=dataset[3]
+ local typ=sequence.type
+ local handler=handlers[typ]
+ local steps=sequence.steps
+ local nofsteps=sequence.nofsteps
+ local head=tonut(head)
+ local done=false
+ local dirstack={}
+ local start=head
+ local initialrl=direction=="TRT" and -1 or 0
+ local rlmode=initialrl
+ local rlparmode=initialrl
+ local topstack=0
+ local merged=steps.merged
+ local position=0
+ while start do
+ local char,id=ischar(start,font)
+ if char then
+ position=position+1
+ local m=merged[char]
+ if m then
+ for i=m[1],m[2] do
+ local step=steps[i]
+ local lookupcache=step.coverage
+ local lookupmatch=lookupcache[char]
+ if lookupmatch then
+ local ok
+ head,start,ok=handler(head,start,dataset,sequence,lookupmatch,rlmode,step,i)
+ if ok then
+ break
+ elseif not start then
+ break
+ end
+ end
+ end
+ if start then
+ start=getnext(start)
+ end
+ else
+ start=getnext(start)
+ end
+ elseif char==false then
+ start=getnext(start)
+ elseif id==glue_code then
+ start=getnext(start)
+ elseif id==math_code then
+ start=getnext(end_of_math(start))
+ elseif id==dir_code then
+ start,topstack,rlmode=txtdirstate(start,dirstack,topstack,rlparmode)
+ elseif id==localpar_code then
+ start,rlparmode,rlmode=pardirstate(start)
+ else
+ start=getnext(start)
+ end
+ end
+ return tonode(head)
+ end
+end
+local plugins={}
+otf.plugins=plugins
+function otf.registerplugin(name,f)
+ if type(name)=="string" and type(f)=="function" then
+ plugins[name]={ name,f }
+ end
+end
+function otf.plugininitializer(tfmdata,value)
+ if type(value)=="string" then
+ tfmdata.shared.plugin=plugins[value]
+ end
+end
+function otf.pluginprocessor(head,font,attr,direction)
+ local s=fontdata[font].shared
+ local p=s and s.plugin
+ if p then
+ if trace_plugins then
+ report_process("applying plugin %a",p[1])
+ end
+ return p[2](head,font,attr,direction)
+ else
+ return head,false
+ end
+end
+function otf.featuresinitializer(tfmdata,value)
+end
+registerotffeature {
+ name="features",
+ description="features",
+ default=true,
+ initializers={
+ position=1,
+ node=otf.featuresinitializer,
+ plug=otf.plugininitializer,
+ },
+ processors={
+ node=otf.featuresprocessor,
+ plug=otf.pluginprocessor,
+ }
+}
+otf.handlers=handlers
+local setspacekerns=nodes.injections.setspacekerns if not setspacekerns then os.exit() end
+if fontfeatures then
+ function otf.handlers.trigger_space_kerns(head,start,dataset,sequence,_,_,_,_,font,attr)
+ local features=fontfeatures[font]
+ local enabled=features and features.spacekern and features.kern
+ if enabled then
+ setspacekerns(font,sequence)
+ end
+ return head,start,enabled
+ end
+else
+ function otf.handlers.trigger_space_kerns(head,start,dataset,sequence,_,_,_,_,font,attr)
+ local shared=fontdata[font].shared
+ local features=shared and shared.features
+ local enabled=features and features.spacekern and features.kern
+ if enabled then
+ setspacekerns(font,sequence)
+ end
+ return head,start,enabled
+ end
+end
+local function hasspacekerns(data)
+ local sequences=data.resources.sequences
+ for i=1,#sequences do
+ local sequence=sequences[i]
+ local steps=sequence.steps
+ if steps and sequence.features.kern then
+ for i=1,#steps do
+ local coverage=steps[i].coverage
+ if not coverage then
+ elseif coverage[32] then
+ return true
+ else
+ for k,v in next,coverage do
+ if v[32] then
+ return true
+ end
+ end
+ end
+ end
+ end
+ end
+ return false
+end
+otf.readers.registerextender {
+ name="spacekerns",
+ action=function(data)
+ data.properties.hasspacekerns=hasspacekerns(data)
+ end
+}
+local function spaceinitializer(tfmdata,value)
+ local resources=tfmdata.resources
+ local spacekerns=resources and resources.spacekerns
+ local properties=tfmdata.properties
+ if value and spacekerns==nil then
+ if properties and properties.hasspacekerns then
+ local sequences=resources.sequences
+ local left={}
+ local right={}
+ local last=0
+ local feat=nil
+ for i=1,#sequences do
+ local sequence=sequences[i]
+ local steps=sequence.steps
+ if steps then
+ local kern=sequence.features.kern
+ if kern then
+ if feat then
+ for script,languages in next,kern do
+ local f=feat[script]
+ if f then
+ for l in next,languages do
+ f[l]=true
+ end
+ else
+ feat[script]=languages
+ end
+ end
+ else
+ feat=kern
+ end
+ for i=1,#steps do
+ local step=steps[i]
+ local coverage=step.coverage
+ local rules=step.rules
+ local format=step.format
+ if rules then
+ elseif coverage then
+ local single=format=="gpos_single"
+ local kerns=coverage[32]
+ if kerns then
+ for k,v in next,kerns do
+ if type(v)~="table" then
+ right[k]=v
+ elseif single then
+ right[k]=v[3]
+ else
+ local one=v[1]
+ if one and one~=true then
+ right[k]=one[3]
+ end
+ end
+ end
+ end
+ for k,v in next,coverage do
+ local kern=v[32]
+ if kern then
+ if type(kern)~="table" then
+ left[k]=kern
+ elseif single then
+ left[k]=kern[3]
+ else
+ local one=kern[1]
+ if one and one~=true then
+ left[k]=one[3]
+ end
+ end
+ end
+ end
+ else
+ end
+ end
+ last=i
+ end
+ else
+ end
+ end
+ left=next(left) and left or false
+ right=next(right) and right or false
+ if left or right then
+ spacekerns={
+ left=left,
+ right=right,
+ }
+ if last>0 then
+ local triggersequence={
+ features={ kern=feat or { dflt={ dflt=true,} } },
+ flags=noflags,
+ name="trigger_space_kerns",
+ order={ "kern" },
+ type="trigger_space_kerns",
+ left=left,
+ right=right,
+ }
+ insert(sequences,last,triggersequence)
+ end
+ else
+ spacekerns=false
+ end
+ else
+ spacekerns=false
+ end
+ resources.spacekerns=spacekerns
+ end
+ return spacekerns
+end
+registerotffeature {
+ name="spacekern",
+ description="space kern injection",
+ default=true,
+ initializers={
+ node=spaceinitializer,
+ },
+}
+local function markinitializer(tfmdata,value)
+ local properties=tfmdata.properties
+ properties.checkmarks=value
+end
+registerotffeature {
+ name="checkmarks",
+ description="check mark widths",
+ default=true,
+ initializers={
+ node=markinitializer,
+ },
+}
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-osd']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Kai Eigner, TAT Zetwerk / Hans Hagen, PRAGMA ADE",
+ copyright="TAT Zetwerk / PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local insert,imerge,copy=table.insert,table.imerge,table.copy
+local next,type=next,type
+local report_devanagari=logs.reporter("otf","devanagari")
+fonts=fonts or {}
+fonts.analyzers=fonts.analyzers or {}
+fonts.analyzers.methods=fonts.analyzers.methods or { node={ otf={} } }
+local otf=fonts.handlers.otf
+local handlers=otf.handlers
+local methods=fonts.analyzers.methods
+local otffeatures=fonts.constructors.features.otf
+local registerotffeature=otffeatures.register
+local nuts=nodes.nuts
+local tonode=nuts.tonode
+local tonut=nuts.tonut
+local getnext=nuts.getnext
+local getprev=nuts.getprev
+local getboth=nuts.getboth
+local getid=nuts.getid
+local getchar=nuts.getchar
+local getfont=nuts.getfont
+local getsubtype=nuts.getsubtype
+local setlink=nuts.setlink
+local setnext=nuts.setnext
+local setprev=nuts.setprev
+local setchar=nuts.setchar
+local getprop=nuts.getprop
+local setprop=nuts.setprop
+local ischar=nuts.is_char
+local insert_node_after=nuts.insert_after
+local copy_node=nuts.copy
+local remove_node=nuts.remove
+local flush_list=nuts.flush_list
+local flush_node=nuts.flush_node
+local copyinjection=nodes.injections.copy
+local unsetvalue=attributes.unsetvalue
+local fontdata=fonts.hashes.identifiers
+local a_state=attributes.private('state')
+local a_syllabe=attributes.private('syllabe')
+local dotted_circle=0x25CC
+local states=fonts.analyzers.states
+local s_rphf=states.rphf
+local s_half=states.half
+local s_pref=states.pref
+local s_blwf=states.blwf
+local s_pstf=states.pstf
+local replace_all_nbsp=nil
+replace_all_nbsp=function(head)
+ replace_all_nbsp=typesetters and typesetters.characters and typesetters.characters.replacenbspaces or function(head)
+ return head
+ end
+ return replace_all_nbsp(head)
+end
+local xprocesscharacters=nil
+if context then
+ xprocesscharacters=function(head,font)
+ xprocesscharacters=nodes.handlers.characters
+ return xprocesscharacters(head,font)
+ end
+else
+ xprocesscharacters=function(head,font)
+ xprocesscharacters=nodes.handlers.nodepass
+ return xprocesscharacters(head,font)
+ end
+end
+local function processcharacters(head,font)
+ return tonut(xprocesscharacters(tonode(head)))
+end
+local consonant={
+ [0x0915]=true,[0x0916]=true,[0x0917]=true,[0x0918]=true,
+ [0x0919]=true,[0x091A]=true,[0x091B]=true,[0x091C]=true,
+ [0x091D]=true,[0x091E]=true,[0x091F]=true,[0x0920]=true,
+ [0x0921]=true,[0x0922]=true,[0x0923]=true,[0x0924]=true,
+ [0x0925]=true,[0x0926]=true,[0x0927]=true,[0x0928]=true,
+ [0x0929]=true,[0x092A]=true,[0x092B]=true,[0x092C]=true,
+ [0x092D]=true,[0x092E]=true,[0x092F]=true,[0x0930]=true,
+ [0x0931]=true,[0x0932]=true,[0x0933]=true,[0x0934]=true,
+ [0x0935]=true,[0x0936]=true,[0x0937]=true,[0x0938]=true,
+ [0x0939]=true,[0x0958]=true,[0x0959]=true,[0x095A]=true,
+ [0x095B]=true,[0x095C]=true,[0x095D]=true,[0x095E]=true,
+ [0x095F]=true,[0x0979]=true,[0x097A]=true,
+ [0x0C95]=true,[0x0C96]=true,[0x0C97]=true,[0x0C98]=true,
+ [0x0C99]=true,[0x0C9A]=true,[0x0C9B]=true,[0x0C9C]=true,
+ [0x0C9D]=true,[0x0C9E]=true,[0x0C9F]=true,[0x0CA0]=true,
+ [0x0CA1]=true,[0x0CA2]=true,[0x0CA3]=true,[0x0CA4]=true,
+ [0x0CA5]=true,[0x0CA6]=true,[0x0CA7]=true,[0x0CA8]=true,
+ [0x0CA9]=true,[0x0CAA]=true,[0x0CAB]=true,[0x0CAC]=true,
+ [0x0CAD]=true,[0x0CAE]=true,[0x0CAF]=true,[0x0CB0]=true,
+ [0x0CB1]=true,[0x0CB2]=true,[0x0CB3]=true,[0x0CB4]=true,
+ [0x0CB5]=true,[0x0CB6]=true,[0x0CB7]=true,[0x0CB8]=true,
+ [0x0CB9]=true,
+ [0x0CDE]=true,
+ [0x0D15]=true,[0x0D16]=true,[0x0D17]=true,[0x0D18]=true,
+ [0x0D19]=true,[0x0D1A]=true,[0x0D1B]=true,[0x0D1C]=true,
+ [0x0D1D]=true,[0x0D1E]=true,[0x0D1F]=true,[0x0D20]=true,
+ [0x0D21]=true,[0x0D22]=true,[0x0D23]=true,[0x0D24]=true,
+ [0x0D25]=true,[0x0D26]=true,[0x0D27]=true,[0x0D28]=true,
+ [0x0D29]=true,[0x0D2A]=true,[0x0D2B]=true,[0x0D2C]=true,
+ [0x0D2D]=true,[0x0D2E]=true,[0x0D2F]=true,[0x0D30]=true,
+ [0x0D31]=true,[0x0D32]=true,[0x0D33]=true,[0x0D34]=true,
+ [0x0D35]=true,[0x0D36]=true,[0x0D37]=true,[0x0D38]=true,
+ [0x0D39]=true,[0x0D3A]=true,
+}
+local independent_vowel={
+ [0x0904]=true,[0x0905]=true,[0x0906]=true,[0x0907]=true,
+ [0x0908]=true,[0x0909]=true,[0x090A]=true,[0x090B]=true,
+ [0x090C]=true,[0x090D]=true,[0x090E]=true,[0x090F]=true,
+ [0x0910]=true,[0x0911]=true,[0x0912]=true,[0x0913]=true,
+ [0x0914]=true,[0x0960]=true,[0x0961]=true,[0x0972]=true,
+ [0x0973]=true,[0x0974]=true,[0x0975]=true,[0x0976]=true,
+ [0x0977]=true,
+ [0x0C85]=true,[0x0C86]=true,[0x0C87]=true,[0x0C88]=true,
+ [0x0C89]=true,[0x0C8A]=true,[0x0C8B]=true,[0x0C8C]=true,
+ [0x0C8D]=true,[0x0C8E]=true,[0x0C8F]=true,[0x0C90]=true,
+ [0x0C91]=true,[0x0C92]=true,[0x0C93]=true,[0x0C94]=true,
+ [0x0D05]=true,[0x0D06]=true,[0x0D07]=true,[0x0D08]=true,
+ [0x0D09]=true,[0x0D0A]=true,[0x0D0B]=true,[0x0D0C]=true,
+ [0x0D0E]=true,[0x0D0F]=true,[0x0D10]=true,[0x0D12]=true,
+ [0x0D13]=true,[0x0D14]=true,
+}
+local dependent_vowel={
+ [0x093A]=true,[0x093B]=true,[0x093E]=true,[0x093F]=true,
+ [0x0940]=true,[0x0941]=true,[0x0942]=true,[0x0943]=true,
+ [0x0944]=true,[0x0945]=true,[0x0946]=true,[0x0947]=true,
+ [0x0948]=true,[0x0949]=true,[0x094A]=true,[0x094B]=true,
+ [0x094C]=true,[0x094E]=true,[0x094F]=true,[0x0955]=true,
+ [0x0956]=true,[0x0957]=true,[0x0962]=true,[0x0963]=true,
+ [0x0CBE]=true,[0x0CBF]=true,[0x0CC0]=true,[0x0CC1]=true,
+ [0x0CC2]=true,[0x0CC3]=true,[0x0CC4]=true,[0x0CC5]=true,
+ [0x0CC6]=true,[0x0CC7]=true,[0x0CC8]=true,[0x0CC9]=true,
+ [0x0CCA]=true,[0x0CCB]=true,[0x0CCC]=true,
+ [0x0D3E]=true,[0x0D3F]=true,[0x0D40]=true,[0x0D41]=true,
+ [0x0D42]=true,[0x0D43]=true,[0x0D44]=true,[0x0D46]=true,
+ [0x0D47]=true,[0x0D48]=true,[0x0D4A]=true,[0x0D4B]=true,
+ [0x0D4C]=true,[0x0D57]=true,
+}
+local vowel_modifier={
+ [0x0900]=true,[0x0901]=true,[0x0902]=true,[0x0903]=true,
+ [0xA8E0]=true,[0xA8E1]=true,[0xA8E2]=true,[0xA8E3]=true,
+ [0xA8E4]=true,[0xA8E5]=true,[0xA8E6]=true,[0xA8E7]=true,
+ [0xA8E8]=true,[0xA8E9]=true,[0xA8EA]=true,[0xA8EB]=true,
+ [0xA8EC]=true,[0xA8ED]=true,[0xA8EE]=true,[0xA8EF]=true,
+ [0xA8F0]=true,[0xA8F1]=true,
+ [0x0D02]=true,[0x0D03]=true,
+}
+local stress_tone_mark={
+ [0x0951]=true,[0x0952]=true,[0x0953]=true,[0x0954]=true,
+ [0x0CCD]=true,
+ [0x0D4D]=true,
+}
+local nukta={
+ [0x093C]=true,
+ [0x0CBC]=true,
+}
+local halant={
+ [0x094D]=true,
+ [0x0CCD]=true,
+ [0x0D4D]=true,
+}
+local ra={
+ [0x0930]=true,
+ [0x0CB0]=true,
+ [0x0D30]=true,
+}
+local c_anudatta=0x0952
+local c_nbsp=0x00A0
+local c_zwnj=0x200C
+local c_zwj=0x200D
+local zw_char={
+ [0x200C]=true,
+ [0x200D]=true,
+}
+local pre_mark={
+ [0x093F]=true,[0x094E]=true,
+ [0x0D46]=true,[0x0D47]=true,[0x0D48]=true,
+}
+local above_mark={
+ [0x0900]=true,[0x0901]=true,[0x0902]=true,[0x093A]=true,
+ [0x0945]=true,[0x0946]=true,[0x0947]=true,[0x0948]=true,
+ [0x0951]=true,[0x0953]=true,[0x0954]=true,[0x0955]=true,
+ [0xA8E0]=true,[0xA8E1]=true,[0xA8E2]=true,[0xA8E3]=true,
+ [0xA8E4]=true,[0xA8E5]=true,[0xA8E6]=true,[0xA8E7]=true,
+ [0xA8E8]=true,[0xA8E9]=true,[0xA8EA]=true,[0xA8EB]=true,
+ [0xA8EC]=true,[0xA8ED]=true,[0xA8EE]=true,[0xA8EF]=true,
+ [0xA8F0]=true,[0xA8F1]=true,
+ [0x0D4E]=true,
+}
+local below_mark={
+ [0x093C]=true,[0x0941]=true,[0x0942]=true,[0x0943]=true,
+ [0x0944]=true,[0x094D]=true,[0x0952]=true,[0x0956]=true,
+ [0x0957]=true,[0x0962]=true,[0x0963]=true,
+}
+local post_mark={
+ [0x0903]=true,[0x093B]=true,[0x093E]=true,[0x0940]=true,
+ [0x0949]=true,[0x094A]=true,[0x094B]=true,[0x094C]=true,
+ [0x094F]=true,
+}
+local twopart_mark={
+ [0x0D4A]={ 0x0D46,0x0D3E,},
+ [0x0D4B]={ 0x0D47,0x0D3E,},
+ [0x0D4C]={ 0x0D46,0x0D57,},
+}
+local mark_four={}
+for k,v in next,pre_mark do mark_four[k]=pre_mark end
+for k,v in next,above_mark do mark_four[k]=above_mark end
+for k,v in next,below_mark do mark_four[k]=below_mark end
+for k,v in next,post_mark do mark_four[k]=post_mark end
+local mark_above_below_post={}
+for k,v in next,above_mark do mark_above_below_post[k]=above_mark end
+for k,v in next,below_mark do mark_above_below_post[k]=below_mark end
+for k,v in next,post_mark do mark_above_below_post[k]=post_mark end
+local reorder_class={
+ [0x0930]="before postscript",
+ [0x093F]="before half",
+ [0x0940]="after subscript",
+ [0x0941]="after subscript",
+ [0x0942]="after subscript",
+ [0x0943]="after subscript",
+ [0x0944]="after subscript",
+ [0x0945]="after subscript",
+ [0x0946]="after subscript",
+ [0x0947]="after subscript",
+ [0x0948]="after subscript",
+ [0x0949]="after subscript",
+ [0x094A]="after subscript",
+ [0x094B]="after subscript",
+ [0x094C]="after subscript",
+ [0x0962]="after subscript",
+ [0x0963]="after subscript",
+ [0x093E]="after subscript",
+ [0x0CB0]="after postscript",
+ [0x0CBF]="before subscript",
+ [0x0CC6]="before subscript",
+ [0x0CCC]="before subscript",
+ [0x0CBE]="before subscript",
+ [0x0CE2]="before subscript",
+ [0x0CE3]="before subscript",
+ [0x0CC1]="before subscript",
+ [0x0CC2]="before subscript",
+ [0x0CC3]="after subscript",
+ [0x0CC4]="after subscript",
+ [0x0CD5]="after subscript",
+ [0x0CD6]="after subscript",
+}
+local dflt_true={
+ dflt=true
+}
+local dev2_defaults={
+ dev2=dflt_true,
+}
+local deva_defaults={
+ dev2=dflt_true,
+ deva=dflt_true,
+}
+local false_flags={ false,false,false,false }
+local both_joiners_true={
+ [0x200C]=true,
+ [0x200D]=true,
+}
+local sequence_reorder_matras={
+ features={ dv01=dev2_defaults },
+ flags=false_flags,
+ name="dv01_reorder_matras",
+ order={ "dv01" },
+ type="devanagari_reorder_matras",
+ nofsteps=1,
+ steps={
+ {
+ osdstep=true,
+ coverage=pre_mark,
+ }
+ }
+}
+local sequence_reorder_reph={
+ features={ dv02=dev2_defaults },
+ flags=false_flags,
+ name="dv02_reorder_reph",
+ order={ "dv02" },
+ type="devanagari_reorder_reph",
+ nofsteps=1,
+ steps={
+ {
+ osdstep=true,
+ coverage={},
+ }
+ }
+}
+local sequence_reorder_pre_base_reordering_consonants={
+ features={ dv03=dev2_defaults },
+ flags=false_flags,
+ name="dv03_reorder_pre_base_reordering_consonants",
+ order={ "dv03" },
+ type="devanagari_reorder_pre_base_reordering_consonants",
+ nofsteps=1,
+ steps={
+ {
+ osdstep=true,
+ coverage={},
+ }
+ }
+}
+local sequence_remove_joiners={
+ features={ dv04=deva_defaults },
+ flags=false_flags,
+ name="dv04_remove_joiners",
+ order={ "dv04" },
+ type="devanagari_remove_joiners",
+ nofsteps=1,
+ steps={
+ { osdstep=true,
+ coverage=both_joiners_true,
+ },
+ }
+}
+local basic_shaping_forms={
+ nukt=true,
+ akhn=true,
+ rphf=true,
+ pref=true,
+ rkrf=true,
+ blwf=true,
+ half=true,
+ pstf=true,
+ vatu=true,
+ cjct=true,
+}
+local valid={
+ akhn=true,
+ rphf=true,
+ pref=true,
+ half=true,
+ blwf=true,
+ pstf=true,
+ pres=true,
+ blws=true,
+ psts=true,
+}
+local function initializedevanagi(tfmdata)
+ local script,language=otf.scriptandlanguage(tfmdata,attr)
+ if script=="deva" or script=="dev2" or script=="mlym" or script=="mlm2" then
+ local resources=tfmdata.resources
+ local devanagari=resources.devanagari
+ if not devanagari then
+ report_devanagari("adding devanagari features to font")
+ local gsubfeatures=resources.features.gsub
+ local sequences=resources.sequences
+ local sharedfeatures=tfmdata.shared.features
+ local lastmatch=0
+ for s=1,#sequences do
+ local features=sequences[s].features
+ if features then
+ for k,v in next,features do
+ if basic_shaping_forms[k] then
+ lastmatch=s
+ end
+ end
+ end
+ end
+ local insertindex=lastmatch+1
+ gsubfeatures["dv01"]=dev2_defaults
+ gsubfeatures["dv02"]=dev2_defaults
+ gsubfeatures["dv03"]=dev2_defaults
+ gsubfeatures["dv04"]=deva_defaults
+ local reorder_pre_base_reordering_consonants=copy(sequence_reorder_pre_base_reordering_consonants)
+ local reorder_reph=copy(sequence_reorder_reph)
+ local reorder_matras=copy(sequence_reorder_matras)
+ local remove_joiners=copy(sequence_remove_joiners)
+ insert(sequences,insertindex,reorder_pre_base_reordering_consonants)
+ insert(sequences,insertindex,reorder_reph)
+ insert(sequences,insertindex,reorder_matras)
+ insert(sequences,insertindex,remove_joiners)
+ local blwfcache={}
+ local seqsubset={}
+ local rephstep={
+ coverage={}
+ }
+ local devanagari={
+ reph=false,
+ vattu=false,
+ blwfcache=blwfcache,
+ seqsubset=seqsubset,
+ reorderreph=rephstep,
+ }
+ reorder_reph.steps={ rephstep }
+ local pre_base_reordering_consonants={}
+ reorder_pre_base_reordering_consonants.steps[1].coverage=pre_base_reordering_consonants
+ resources.devanagari=devanagari
+ for s=1,#sequences do
+ local sequence=sequences[s]
+ local steps=sequence.steps
+ local nofsteps=sequence.nofsteps
+ local features=sequence.features
+ local has_rphf=features.rphf
+ local has_blwf=features.blwf
+ if has_rphf and has_rphf.deva then
+ devanagari.reph=true
+ elseif has_blwf and has_blwf.deva then
+ devanagari.vattu=true
+ for i=1,nofsteps do
+ local step=steps[i]
+ local coverage=step.coverage
+ if coverage then
+ for k,v in next,coverage do
+ if not blwfcache[k] then
+ blwfcache[k]=v
+ end
+ end
+ end
+ end
+ end
+ for kind,spec in next,features do
+ if spec.dev2 and valid[kind] then
+ for i=1,nofsteps do
+ local step=steps[i]
+ local coverage=step.coverage
+ if coverage then
+ local reph=false
+ if kind=="rphf" then
+ if true then
+ for k,v in next,ra do
+ local r=coverage[k]
+ if r then
+ local h=false
+ for k,v in next,halant do
+ local h=r[k]
+ if h then
+ reph=h.ligature or false
+ break
+ end
+ end
+ if reph then
+ break
+ end
+ end
+ end
+ else
+ end
+ end
+ seqsubset[#seqsubset+1]={ kind,coverage,reph }
+ end
+ end
+ end
+ if kind=="pref" then
+ local steps=sequence.steps
+ local nofsteps=sequence.nofsteps
+ for i=1,nofsteps do
+ local step=steps[i]
+ local coverage=step.coverage
+ if coverage then
+ for k,v in next,halant do
+ local h=coverage[k]
+ if h then
+ local found=false
+ for k,v in next,h do
+ found=v and v.ligature
+ if found then
+ pre_base_reordering_consonants[k]=found
+ break
+ end
+ end
+ if found then
+ break
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ if script=="deva" then
+ sharedfeatures["dv04"]=true
+ elseif script=="dev2" then
+ sharedfeatures["dv01"]=true
+ sharedfeatures["dv02"]=true
+ sharedfeatures["dv03"]=true
+ sharedfeatures["dv04"]=true
+ elseif script=="mlym" then
+ sharedfeatures["pstf"]=true
+ elseif script=="mlm2" then
+ sharedfeatures["pstf"]=true
+ sharedfeatures["pref"]=true
+ sharedfeatures["dv03"]=true
+ gsubfeatures ["dv03"]=dev2_defaults
+ insert(sequences,insertindex,sequence_reorder_pre_base_reordering_consonants)
+ end
+ end
+ end
+end
+registerotffeature {
+ name="devanagari",
+ description="inject additional features",
+ default=true,
+ initializers={
+ node=initializedevanagi,
+ },
+}
+local function deva_initialize(font,attr)
+ local tfmdata=fontdata[font]
+ local datasets=otf.dataset(tfmdata,font,attr)
+ local devanagaridata=datasets.devanagari
+ if not devanagaridata then
+ devanagaridata={
+ reph=false,
+ vattu=false,
+ blwfcache={},
+ }
+ datasets.devanagari=devanagaridata
+ local resources=tfmdata.resources
+ local devanagari=resources.devanagari
+ for s=1,#datasets do
+ local dataset=datasets[s]
+ if dataset and dataset[1] then
+ local kind=dataset[4]
+ if kind=="rphf" then
+ devanagaridata.reph=true
+ elseif kind=="blwf" then
+ devanagaridata.vattu=true
+ devanagaridata.blwfcache=devanagari.blwfcache
+ end
+ end
+ end
+ end
+ return devanagaridata.reph,devanagaridata.vattu,devanagaridata.blwfcache
+end
+local function deva_reorder(head,start,stop,font,attr,nbspaces)
+ local reph,vattu,blwfcache=deva_initialize(font,attr)
+ local current=start
+ local n=getnext(start)
+ local base=nil
+ local firstcons=nil
+ local lastcons=nil
+ local basefound=false
+ if reph and ra[getchar(start)] and halant[getchar(n)] then
+ if n==stop then
+ return head,stop,nbspaces
+ end
+ if getchar(getnext(n))==c_zwj then
+ current=start
+ else
+ current=getnext(n)
+ setprop(start,a_state,s_rphf)
+ end
+ end
+ if getchar(current)==c_nbsp then
+ if current==stop then
+ stop=getprev(stop)
+ head=remove_node(head,current)
+ flush_node(current)
+ return head,stop,nbspaces
+ else
+ nbspaces=nbspaces+1
+ base=current
+ firstcons=current
+ lastcons=current
+ current=getnext(current)
+ if current~=stop then
+ if nukta[getchar(current)] then
+ current=getnext(current)
+ end
+ if getchar(current)==c_zwj then
+ if current~=stop then
+ local next=getnext(current)
+ if next~=stop and halant[getchar(next)] then
+ current=next
+ next=getnext(current)
+ local tmp=next and getnext(next) or nil
+ local changestop=next==stop
+ local tempcurrent=copy_node(next)
+ copyinjection(tempcurrent,next)
+ local nextcurrent=copy_node(current)
+ copyinjection(nextcurrent,current)
+ setlink(tempcurrent,nextcurrent)
+ setprop(tempcurrent,a_state,s_blwf)
+ tempcurrent=processcharacters(tempcurrent,font)
+ setprop(tempcurrent,a_state,unsetvalue)
+ if getchar(next)==getchar(tempcurrent) then
+ flush_list(tempcurrent)
+ local n=copy_node(current)
+ copyinjection(n,current)
+ setchar(current,dotted_circle)
+ head=insert_node_after(head,current,n)
+ else
+ setchar(current,getchar(tempcurrent))
+ local freenode=getnext(current)
+ setlink(current,tmp)
+ flush_node(freenode)
+ flush_list(tempcurrent)
+ if changestop then
+ stop=current
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ while not basefound do
+ local char=getchar(current)
+ if consonant[char] then
+ setprop(current,a_state,s_half)
+ if not firstcons then
+ firstcons=current
+ end
+ lastcons=current
+ if not base then
+ base=current
+ elseif blwfcache[char] then
+ setprop(current,a_state,s_blwf)
+ else
+ base=current
+ end
+ end
+ basefound=current==stop
+ current=getnext(current)
+ end
+ if base~=lastcons then
+ local np=base
+ local n=getnext(base)
+ local ch=getchar(n)
+ if nukta[ch] then
+ np=n
+ n=getnext(n)
+ ch=getchar(n)
+ end
+ if halant[ch] then
+ if lastcons~=stop then
+ local ln=getnext(lastcons)
+ if nukta[getchar(ln)] then
+ lastcons=ln
+ end
+ end
+ local nn=getnext(n)
+ local ln=getnext(lastcons)
+ setlink(np,nn)
+ setnext(lastcons,n)
+ if ln then
+ setprev(ln,n)
+ end
+ setnext(n,ln)
+ setprev(n,lastcons)
+ if lastcons==stop then
+ stop=n
+ end
+ end
+ end
+ n=getnext(start)
+ if n~=stop and ra[getchar(start)] and halant[getchar(n)] and not zw_char[getchar(getnext(n))] then
+ local matra=base
+ if base~=stop then
+ local next=getnext(base)
+ if dependent_vowel[getchar(next)] then
+ matra=next
+ end
+ end
+ local sp=getprev(start)
+ local nn=getnext(n)
+ local mn=getnext(matra)
+ setlink(sp,nn)
+ setlink(matra,start)
+ setlink(n,mn)
+ if head==start then
+ head=nn
+ end
+ start=nn
+ if matra==stop then
+ stop=n
+ end
+ end
+ local current=start
+ while current~=stop do
+ local next=getnext(current)
+ if next~=stop and halant[getchar(next)] and getchar(getnext(next))==c_zwnj then
+ setprop(current,a_state,unsetvalue)
+ end
+ current=next
+ end
+ if base~=stop and getprop(base,a_state) then
+ local next=getnext(base)
+ if halant[getchar(next)] and not (next~=stop and getchar(getnext(next))==c_zwj) then
+ setprop(base,a_state,unsetvalue)
+ end
+ end
+ local current,allreordered,moved=start,false,{ [base]=true }
+ local a,b,p,bn=base,base,base,getnext(base)
+ if base~=stop and nukta[getchar(bn)] then
+ a,b,p=bn,bn,bn
+ end
+ while not allreordered do
+ local c=current
+ local n=getnext(current)
+ local l=nil
+ if c~=stop then
+ local ch=getchar(n)
+ if nukta[ch] then
+ c=n
+ n=getnext(n)
+ ch=getchar(n)
+ end
+ if c~=stop then
+ if halant[ch] then
+ c=n
+ n=getnext(n)
+ ch=getchar(n)
+ end
+ while c~=stop and dependent_vowel[ch] do
+ c=n
+ n=getnext(n)
+ ch=getchar(n)
+ end
+ if c~=stop then
+ if vowel_modifier[ch] then
+ c=n
+ n=getnext(n)
+ ch=getchar(n)
+ end
+ if c~=stop and stress_tone_mark[ch] then
+ c=n
+ n=getnext(n)
+ end
+ end
+ end
+ end
+ local bp=getprev(firstcons)
+ local cn=getnext(current)
+ local last=getnext(c)
+ while cn~=last do
+ if pre_mark[getchar(cn)] then
+ if bp then
+ setnext(bp,cn)
+ end
+ local prev,next=getboth(cn)
+ if next then
+ setprev(next,prev)
+ end
+ setnext(prev,next)
+ if cn==stop then
+ stop=prev
+ end
+ setprev(cn,bp)
+ setlink(cn,firstcons)
+ if firstcons==start then
+ if head==start then
+ head=cn
+ end
+ start=cn
+ end
+ break
+ end
+ cn=getnext(cn)
+ end
+ allreordered=c==stop
+ current=getnext(c)
+ end
+ if reph or vattu then
+ local current,cns=start,nil
+ while current~=stop do
+ local c=current
+ local n=getnext(current)
+ if ra[getchar(current)] and halant[getchar(n)] then
+ c=n
+ n=getnext(n)
+ local b,bn=base,base
+ while bn~=stop do
+ local next=getnext(bn)
+ if dependent_vowel[getchar(next)] then
+ b=next
+ end
+ bn=next
+ end
+ if getprop(current,a_state)==s_rphf then
+ if b~=current then
+ if current==start then
+ if head==start then
+ head=n
+ end
+ start=n
+ end
+ if b==stop then
+ stop=c
+ end
+ local prev=getprev(current)
+ setlink(prev,n)
+ local next=getnext(b)
+ setlink(c,next)
+ setlink(b,current)
+ end
+ elseif cns and getnext(cns)~=current then
+ local cp=getprev(current)
+ local cnsn=getnext(cns)
+ setlink(cp,n)
+ setlink(cns,current)
+ setlink(c,cnsn)
+ if c==stop then
+ stop=cp
+ break
+ end
+ current=getprev(n)
+ end
+ else
+ local char=getchar(current)
+ if consonant[char] then
+ cns=current
+ local next=getnext(cns)
+ if halant[getchar(next)] then
+ cns=next
+ end
+ elseif char==c_nbsp then
+ nbspaces=nbspaces+1
+ cns=current
+ local next=getnext(cns)
+ if halant[getchar(next)] then
+ cns=next
+ end
+ end
+ end
+ current=getnext(current)
+ end
+ end
+ if getchar(base)==c_nbsp then
+ nbspaces=nbspaces-1
+ head=remove_node(head,base)
+ flush_node(base)
+ end
+ return head,stop,nbspaces
+end
+function handlers.devanagari_reorder_matras(head,start)
+ local current=start
+ local startfont=getfont(start)
+ local startattr=getprop(start,a_syllabe)
+ while current do
+ local char=ischar(current,startfont)
+ local next=getnext(current)
+ if char and getprop(current,a_syllabe)==startattr then
+ if halant[char] and not getprop(current,a_state) then
+ if next then
+ local char=ischar(next,startfont)
+ if char and zw_char[char] and getprop(next,a_syllabe)==startattr then
+ current=next
+ next=getnext(current)
+ end
+ end
+ local startnext=getnext(start)
+ head=remove_node(head,start)
+ setlink(start,next)
+ setlink(current,start)
+ start=startnext
+ break
+ end
+ else
+ break
+ end
+ current=next
+ end
+ return head,start,true
+end
+function handlers.devanagari_reorder_reph(head,start)
+ local current=getnext(start)
+ local startnext=nil
+ local startprev=nil
+ local startfont=getfont(start)
+ local startattr=getprop(start,a_syllabe)
+ while current do
+ local char=ischar(current,startfont)
+ if char and getprop(current,a_syllabe)==startattr then
+ if halant[char] and not getprop(current,a_state) then
+ local next=getnext(current)
+ if next then
+ local nextchar=ischar(next,startfont)
+ if nextchar and zw_char[nextchar] and getprop(next,a_syllabe)==startattr then
+ current=next
+ next=getnext(current)
+ end
+ end
+ startnext=getnext(start)
+ head=remove_node(head,start)
+ setlink(start,next)
+ setlink(current,start)
+ start=startnext
+ startattr=getprop(start,a_syllabe)
+ break
+ end
+ current=getnext(current)
+ else
+ break
+ end
+ end
+ if not startnext then
+ current=getnext(start)
+ while current do
+ local char=ischar(current,startfont)
+ if char and getprop(current,a_syllabe)==startattr then
+ if getprop(current,a_state)==s_pstf then
+ startnext=getnext(start)
+ head=remove_node(head,start)
+ setlink(getprev(current),start)
+ setlink(start,current)
+ start=startnext
+ startattr=getprop(start,a_syllabe)
+ break
+ end
+ current=getnext(current)
+ else
+ break
+ end
+ end
+ end
+ if not startnext then
+ current=getnext(start)
+ local c=nil
+ while current do
+ local char=ischar(current,startfont)
+ if char and getprop(current,a_syllabe)==startattr then
+ if not c and mark_above_below_post[char] and reorder_class[char]~="after subscript" then
+ c=current
+ end
+ current=getnext(current)
+ else
+ break
+ end
+ end
+ if c then
+ startnext=getnext(start)
+ head=remove_node(head,start)
+ setlink(getprev(c),start)
+ setlink(start,c)
+ start=startnext
+ startattr=getprop(start,a_syllabe)
+ end
+ end
+ if not startnext then
+ current=start
+ local next=getnext(current)
+ while next do
+ local nextchar=ischar(next,startfont)
+ if nextchar and getprop(next,a_syllabe)==startattr then
+ current=next
+ next=getnext(current)
+ else
+ break
+ end
+ end
+ if start~=current then
+ startnext=getnext(start)
+ head=remove_node(head,start)
+ setlink(start,getnext(current))
+ setlink(current,start)
+ start=startnext
+ end
+ end
+ return head,start,true
+end
+function handlers.devanagari_reorder_pre_base_reordering_consonants(head,start)
+ local current=start
+ local startnext=nil
+ local startprev=nil
+ local startfont=getfont(start)
+ local startattr=getprop(start,a_syllabe)
+ while current do
+ local char=ischar(current,startfont)
+ if char and getprop(current,a_syllabe)==startattr then
+ local next=getnext(current)
+ if halant[char] and not getprop(current,a_state) then
+ if next then
+ local nextchar=ischar(next,startfont)
+ if nextchar and getprop(next,a_syllabe)==startattr then
+ if nextchar==c_zwnj or nextchar==c_zwj then
+ current=next
+ next=getnext(current)
+ end
+ end
+ end
+ startnext=getnext(start)
+ removenode(start,start)
+ setlink(start,next)
+ setlink(current,start)
+ start=startnext
+ break
+ end
+ current=next
+ else
+ break
+ end
+ end
+ if not startnext then
+ current=getnext(start)
+ startattr=getprop(start,a_syllabe)
+ while current do
+ local char=ischar(current,startfont)
+ if char and getprop(current,a_syllabe)==startattr then
+ if not consonant[char] and getprop(current,a_state) then
+ startnext=getnext(start)
+ removenode(start,start)
+ setlink(getprev(current),start)
+ setlink(start,current)
+ start=startnext
+ break
+ end
+ current=getnext(current)
+ else
+ break
+ end
+ end
+ end
+ return head,start,true
+end
+function handlers.devanagari_remove_joiners(head,start,kind,lookupname,replacement)
+ local stop=getnext(start)
+ local font=getfont(start)
+ local last=start
+ while stop do
+ local char=ischar(stop,font)
+ if char and (char==c_zwnj or char==c_zwj) then
+ last=stop
+ stop=getnext(stop)
+ else
+ break
+ end
+ end
+ local prev=getprev(start)
+ if stop then
+ setnext(last)
+ setlink(prev,stop)
+ elseif prev then
+ setnext(prev)
+ end
+ if head==start then
+ head=stop
+ end
+ flush_list(start)
+ return head,stop,true
+end
+local function dev2_initialize(font,attr)
+ local devanagari=fontdata[font].resources.devanagari
+ if devanagari then
+ return devanagari.seqsubset or {},devanagari.reorderreph or {}
+ else
+ return {},{}
+ end
+end
+local function dev2_reorder(head,start,stop,font,attr,nbspaces)
+ local seqsubset,reorderreph=dev2_initialize(font,attr)
+ local reph=false
+ local halfpos=nil
+ local basepos=nil
+ local subpos=nil
+ local postpos=nil
+ local locl={}
+ for i=1,#seqsubset do
+ local subset=seqsubset[i]
+ local kind=subset[1]
+ local lookupcache=subset[2]
+ if kind=="rphf" then
+ reph=subset[3]
+ local current=start
+ local last=getnext(stop)
+ while current~=last do
+ if current~=stop then
+ local c=locl[current] or getchar(current)
+ local found=lookupcache[c]
+ if found then
+ local next=getnext(current)
+ local n=locl[next] or getchar(next)
+ if found[n] then
+ local afternext=next~=stop and getnext(next)
+ if afternext and zw_char[getchar(afternext)] then
+ current=next
+ current=getnext(current)
+ elseif current==start then
+ setprop(current,a_state,s_rphf)
+ current=next
+ else
+ current=next
+ end
+ end
+ end
+ end
+ current=getnext(current)
+ end
+ elseif kind=="pref" then
+ local current=start
+ local last=getnext(stop)
+ while current~=last do
+ if current~=stop then
+ local c=locl[current] or getchar(current)
+ local found=lookupcache[c]
+ if found then
+ local next=getnext(current)
+ local n=locl[next] or getchar(next)
+ if found[n] then
+ setprop(current,a_state,s_pref)
+ setprop(next,a_state,s_pref)
+ current=next
+ end
+ end
+ end
+ current=getnext(current)
+ end
+ elseif kind=="half" then
+ local current=start
+ local last=getnext(stop)
+ while current~=last do
+ if current~=stop then
+ local c=locl[current] or getchar(current)
+ local found=lookupcache[c]
+ if found then
+ local next=getnext(current)
+ local n=locl[next] or getchar(next)
+ if found[n] then
+ if next~=stop and getchar(getnext(next))==c_zwnj then
+ current=next
+ else
+ setprop(current,a_state,s_half)
+ if not halfpos then
+ halfpos=current
+ end
+ end
+ current=getnext(current)
+ end
+ end
+ end
+ current=getnext(current)
+ end
+ elseif kind=="blwf" then
+ local current=start
+ local last=getnext(stop)
+ while current~=last do
+ if current~=stop then
+ local c=locl[current] or getchar(current)
+ local found=lookupcache[c]
+ if found then
+ local next=getnext(current)
+ local n=locl[next] or getchar(next)
+ if found[n] then
+ setprop(current,a_state,s_blwf)
+ setprop(next,a_state,s_blwf)
+ current=next
+ subpos=current
+ end
+ end
+ end
+ current=getnext(current)
+ end
+ elseif kind=="pstf" then
+ local current=start
+ local last=getnext(stop)
+ while current~=last do
+ if current~=stop then
+ local c=locl[current] or getchar(current)
+ local found=lookupcache[c]
+ if found then
+ local next=getnext(current)
+ local n=locl[next] or getchar(next)
+ if found[n] then
+ setprop(current,a_state,s_pstf)
+ setprop(next,a_state,s_pstf)
+ current=next
+ postpos=current
+ end
+ end
+ end
+ current=getnext(current)
+ end
+ end
+ end
+ reorderreph.coverage={ [reph]=true }
+ local current,base,firstcons=start,nil,nil
+ if getprop(start,a_state)==s_rphf then
+ current=getnext(getnext(start))
+ end
+ if current~=getnext(stop) and getchar(current)==c_nbsp then
+ if current==stop then
+ stop=getprev(stop)
+ head=remove_node(head,current)
+ flush_node(current)
+ return head,stop,nbspaces
+ else
+ nbspaces=nbspaces+1
+ base=current
+ current=getnext(current)
+ if current~=stop then
+ local char=getchar(current)
+ if nukta[char] then
+ current=getnext(current)
+ char=getchar(current)
+ end
+ if char==c_zwj then
+ local next=getnext(current)
+ if current~=stop and next~=stop and halant[getchar(next)] then
+ current=next
+ next=getnext(current)
+ local tmp=getnext(next)
+ local changestop=next==stop
+ setnext(next,nil)
+ setprop(current,a_state,s_pref)
+ current=processcharacters(current,font)
+ setprop(current,a_state,s_blwf)
+ current=processcharacters(current,font)
+ setprop(current,a_state,s_pstf)
+ current=processcharacters(current,font)
+ setprop(current,a_state,unsetvalue)
+ if halant[getchar(current)] then
+ setnext(getnext(current),tmp)
+ local nc=copy_node(current)
+ copyinjection(nc,current)
+ setchar(current,dotted_circle)
+ head=insert_node_after(head,current,nc)
+ else
+ setnext(current,tmp)
+ if changestop then
+ stop=current
+ end
+ end
+ end
+ end
+ end
+ end
+ else
+ local last=getnext(stop)
+ while current~=last do
+ local next=getnext(current)
+ if consonant[getchar(current)] then
+ if not (current~=stop and next~=stop and halant[getchar(next)] and getchar(getnext(next))==c_zwj) then
+ if not firstcons then
+ firstcons=current
+ end
+ local a=getprop(current,a_state)
+ if not (a==s_pref or a==s_blwf or a==s_pstf) then
+ base=current
+ end
+ end
+ end
+ current=next
+ end
+ if not base then
+ base=firstcons
+ end
+ end
+ if not base then
+ if getprop(start,a_state)==s_rphf then
+ setprop(start,a_state,unsetvalue)
+ end
+ return head,stop,nbspaces
+ else
+ if getprop(base,a_state) then
+ setprop(base,a_state,unsetvalue)
+ end
+ basepos=base
+ end
+ if not halfpos then
+ halfpos=base
+ end
+ if not subpos then
+ subpos=base
+ end
+ if not postpos then
+ postpos=subpos or base
+ end
+ local moved={}
+ local current=start
+ local last=getnext(stop)
+ while current~=last do
+ local char,target,cn=locl[current] or getchar(current),nil,getnext(current)
+ local tpm=twopart_mark[char]
+ if tpm then
+ local extra=copy_node(current)
+ copyinjection(extra,current)
+ char=tpm[1]
+ setchar(current,char)
+ setchar(extra,tpm[2])
+ head=insert_node_after(head,current,extra)
+ end
+ if not moved[current] and dependent_vowel[char] then
+ if pre_mark[char] then
+ moved[current]=true
+ local prev,next=getboth(current)
+ setlink(prev,next)
+ if current==stop then
+ stop=getprev(current)
+ end
+ if halfpos==start then
+ if head==start then
+ head=current
+ end
+ start=current
+ end
+ setlink(getprev(halfpos),current)
+ setlink(current,halfpos)
+ halfpos=current
+ elseif above_mark[char] then
+ target=basepos
+ if subpos==basepos then
+ subpos=current
+ end
+ if postpos==basepos then
+ postpos=current
+ end
+ basepos=current
+ elseif below_mark[char] then
+ target=subpos
+ if postpos==subpos then
+ postpos=current
+ end
+ subpos=current
+ elseif post_mark[char] then
+ target=postpos
+ postpos=current
+ end
+ if mark_above_below_post[char] then
+ local prev=getprev(current)
+ if prev~=target then
+ local next=getnext(current)
+ setlink(prev,next)
+ if current==stop then
+ stop=prev
+ end
+ setlink(current,getnext(target))
+ setlink(target,current)
+ end
+ end
+ end
+ current=cn
+ end
+ local current,c=start,nil
+ while current~=stop do
+ local char=getchar(current)
+ if halant[char] or stress_tone_mark[char] then
+ if not c then
+ c=current
+ end
+ else
+ c=nil
+ end
+ local next=getnext(current)
+ if c and nukta[getchar(next)] then
+ if head==c then
+ head=next
+ end
+ if stop==next then
+ stop=current
+ end
+ setlink(getprev(c),next)
+ local nextnext=getnext(next)
+ setnext(current,nextnext)
+ local nextnextnext=getnext(nextnext)
+ if nextnextnext then
+ setprev(nextnextnext,current)
+ end
+ setlink(nextnext,c)
+ end
+ if stop==current then break end
+ current=getnext(current)
+ end
+ if getchar(base)==c_nbsp then
+ if base==stop then
+ stop=getprev(stop)
+ end
+ nbspaces=nbspaces-1
+ head=remove_node(head,base)
+ flush_node(base)
+ end
+ return head,stop,nbspaces
+end
+local separator={}
+imerge(separator,consonant)
+imerge(separator,independent_vowel)
+imerge(separator,dependent_vowel)
+imerge(separator,vowel_modifier)
+imerge(separator,stress_tone_mark)
+for k,v in next,nukta do separator[k]=true end
+for k,v in next,halant do separator[k]=true end
+local function analyze_next_chars_one(c,font,variant)
+ local n=getnext(c)
+ if not n then
+ return c
+ end
+ if variant==1 then
+ local v=ischar(n,font)
+ if v and nukta[v] then
+ n=getnext(n)
+ if n then
+ v=ischar(n,font)
+ end
+ end
+ if n and v then
+ local nn=getnext(n)
+ if nn then
+ local vv=ischar(nn,font)
+ if vv then
+ local nnn=getnext(nn)
+ if nnn then
+ local vvv=ischar(nnn,font)
+ if vvv then
+ if vv==c_zwj and consonant[vvv] then
+ c=nnn
+ elseif (vv==c_zwnj or vv==c_zwj) and halant[vvv] then
+ local nnnn=getnext(nnn)
+ if nnnn then
+ local vvvv=ischar(nnnn,font)
+ if vvvv and consonant[vvvv] then
+ c=nnnn
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ elseif variant==2 then
+ local v=ischar(n,font)
+ if v and nukta[v] then
+ c=n
+ end
+ n=getnext(c)
+ if n then
+ v=ischar(n,font)
+ if v then
+ local nn=getnext(n)
+ if nn then
+ local vv=ischar(nn,font)
+ if vv and zw_char[v] then
+ n=nn
+ v=vv
+ nn=getnext(nn)
+ vv=nn and ischar(nn,font)
+ end
+ if vv and halant[v] and consonant[vv] then
+ c=nn
+ end
+ end
+ end
+ end
+ end
+ local n=getnext(c)
+ if not n then
+ return c
+ end
+ local v=ischar(n,font)
+ if not v then
+ return c
+ end
+ if dependent_vowel[v] then
+ c=getnext(c)
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if nukta[v] then
+ c=getnext(c)
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if halant[v] then
+ c=getnext(c)
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if vowel_modifier[v] then
+ c=getnext(c)
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if stress_tone_mark[v] then
+ c=getnext(c)
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if stress_tone_mark[v] then
+ return n
+ else
+ return c
+ end
+end
+local function analyze_next_chars_two(c,font)
+ local n=getnext(c)
+ if not n then
+ return c
+ end
+ local v=ischar(n,font)
+ if v and nukta[v] then
+ c=n
+ end
+ n=c
+ while true do
+ local nn=getnext(n)
+ if nn then
+ local vv=ischar(nn,font)
+ if vv then
+ if halant[vv] then
+ n=nn
+ local nnn=getnext(nn)
+ if nnn then
+ local vvv=ischar(nnn,font)
+ if vvv and zw_char[vvv] then
+ n=nnn
+ end
+ end
+ elseif vv==c_zwnj or vv==c_zwj then
+ local nnn=getnext(nn)
+ if nnn then
+ local vvv=ischar(nnn,font)
+ if vvv and halant[vvv] then
+ n=nnn
+ end
+ end
+ else
+ break
+ end
+ local nn=getnext(n)
+ if nn then
+ local vv=ischar(nn,font)
+ if vv and consonant[vv] then
+ n=nn
+ local nnn=getnext(nn)
+ if nnn then
+ local vvv=ischar(nnn,font)
+ if vvv and nukta[vvv] then
+ n=nnn
+ end
+ end
+ c=n
+ else
+ break
+ end
+ else
+ break
+ end
+ else
+ break
+ end
+ else
+ break
+ end
+ end
+ if not c then
+ return
+ end
+ local n=getnext(c)
+ if not n then
+ return c
+ end
+ local v=ischar(n,font)
+ if not v then
+ return c
+ end
+ if v==c_anudatta then
+ c=n
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if halant[v] then
+ c=n
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ if v==c_zwnj or v==c_zwj then
+ c=n
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ else
+ if dependent_vowel[v] then
+ c=n
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if nukta[v] then
+ c=n
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if halant[v] then
+ c=n
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ end
+ if vowel_modifier[v] then
+ c=n
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if stress_tone_mark[v] then
+ c=n
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if stress_tone_mark[v] then
+ return n
+ else
+ return c
+ end
+end
+local function inject_syntax_error(head,current,mark)
+ local signal=copy_node(current)
+ copyinjection(signal,current)
+ if mark==pre_mark then
+ setchar(signal,dotted_circle)
+ else
+ setchar(current,dotted_circle)
+ end
+ return insert_node_after(head,current,signal)
+end
+function methods.deva(head,font,attr)
+ head=tonut(head)
+ local current=head
+ local start=true
+ local done=false
+ local nbspaces=0
+ while current do
+ local char=ischar(current,font)
+ if char then
+ done=true
+ local syllablestart=current
+ local syllableend=nil
+ local c=current
+ local n=getnext(c)
+ local first=char
+ if n and ra[first] then
+ local second=ischar(n,font)
+ if second and halant[second] then
+ local n=getnext(n)
+ if n then
+ local third=ischar(n,font)
+ if third then
+ c=n
+ first=third
+ end
+ end
+ end
+ end
+ local standalone=first==c_nbsp
+ if standalone then
+ local prev=getprev(current)
+ if prev then
+ local prevchar=ischar(prev,font)
+ if not prevchar then
+ elseif not separator[prevchar] then
+ else
+ standalone=false
+ end
+ else
+ end
+ end
+ if standalone then
+ local syllableend=analyze_next_chars_one(c,font,2)
+ current=getnext(syllableend)
+ if syllablestart~=syllableend then
+ head,current,nbspaces=deva_reorder(head,syllablestart,syllableend,font,attr,nbspaces)
+ current=getnext(current)
+ end
+ else
+ if consonant[char] then
+ local prevc=true
+ while prevc do
+ prevc=false
+ local n=getnext(current)
+ if not n then
+ break
+ end
+ local v=ischar(n,font)
+ if not v then
+ break
+ end
+ if nukta[v] then
+ n=getnext(n)
+ if not n then
+ break
+ end
+ v=ischar(n,font)
+ if not v then
+ break
+ end
+ end
+ if halant[v] then
+ n=getnext(n)
+ if not n then
+ break
+ end
+ v=ischar(n,font)
+ if not v then
+ break
+ end
+ if v==c_zwnj or v==c_zwj then
+ n=getnext(n)
+ if not n then
+ break
+ end
+ v=ischar(n,font)
+ if not v then
+ break
+ end
+ end
+ if consonant[v] then
+ prevc=true
+ current=n
+ end
+ end
+ end
+ local n=getnext(current)
+ if n then
+ local v=ischar(n,font)
+ if v and nukta[v] then
+ current=n
+ n=getnext(current)
+ end
+ end
+ syllableend=current
+ current=n
+ if current then
+ local v=ischar(current,font)
+ if not v then
+ elseif halant[v] then
+ local n=getnext(current)
+ if n then
+ local v=ischar(n,font)
+ if v and zw_char[v] then
+ syllableend=n
+ current=getnext(n)
+ else
+ syllableend=current
+ current=n
+ end
+ else
+ syllableend=current
+ current=n
+ end
+ else
+ if dependent_vowel[v] then
+ syllableend=current
+ current=getnext(current)
+ v=ischar(current,font)
+ end
+ if v and vowel_modifier[v] then
+ syllableend=current
+ current=getnext(current)
+ v=ischar(current,font)
+ end
+ if v and stress_tone_mark[v] then
+ syllableend=current
+ current=getnext(current)
+ end
+ end
+ end
+ if syllablestart~=syllableend then
+ head,current,nbspaces=deva_reorder(head,syllablestart,syllableend,font,attr,nbspaces)
+ current=getnext(current)
+ end
+ elseif independent_vowel[char] then
+ syllableend=current
+ current=getnext(current)
+ if current then
+ local v=ischar(current,font)
+ if v then
+ if vowel_modifier[v] then
+ syllableend=current
+ current=getnext(current)
+ v=ischar(current,font)
+ end
+ if v and stress_tone_mark[v] then
+ syllableend=current
+ current=getnext(current)
+ end
+ end
+ end
+ else
+ local mark=mark_four[char]
+ if mark then
+ head,current=inject_syntax_error(head,current,mark)
+ end
+ current=getnext(current)
+ end
+ end
+ else
+ current=getnext(current)
+ end
+ start=false
+ end
+ if nbspaces>0 then
+ head=replace_all_nbsp(head)
+ end
+ head=tonode(head)
+ return head,done
+end
+function methods.dev2(head,font,attr)
+ head=tonut(head)
+ local current=head
+ local start=true
+ local done=false
+ local syllabe=0
+ local nbspaces=0
+ while current do
+ local syllablestart=nil
+ local syllableend=nil
+ local char=ischar(current,font)
+ if char then
+ done=true
+ syllablestart=current
+ local c=current
+ local n=getnext(current)
+ if n and ra[char] then
+ local nextchar=ischar(n,font)
+ if nextchar and halant[nextchar] then
+ local n=getnext(n)
+ if n then
+ local nextnextchar=ischar(n,font)
+ if nextnextchar then
+ c=n
+ char=nextnextchar
+ end
+ end
+ end
+ end
+ if independent_vowel[char] then
+ current=analyze_next_chars_one(c,font,1)
+ syllableend=current
+ else
+ local standalone=char==c_nbsp
+ if standalone then
+ nbspaces=nbspaces+1
+ local p=getprev(current)
+ if not p then
+ elseif ischar(p,font) then
+ elseif not separator[getchar(p)] then
+ else
+ standalone=false
+ end
+ end
+ if standalone then
+ current=analyze_next_chars_one(c,font,2)
+ syllableend=current
+ elseif consonant[getchar(current)] then
+ current=analyze_next_chars_two(current,font)
+ syllableend=current
+ end
+ end
+ end
+ if syllableend then
+ syllabe=syllabe+1
+ local c=syllablestart
+ local n=getnext(syllableend)
+ while c~=n do
+ setprop(c,a_syllabe,syllabe)
+ c=getnext(c)
+ end
+ end
+ if syllableend and syllablestart~=syllableend then
+ head,current,nbspaces=dev2_reorder(head,syllablestart,syllableend,font,attr,nbspaces)
+ end
+ if not syllableend then
+ local char=ischar(current,font)
+ if char and not getprop(current,a_state) then
+ local mark=mark_four[char]
+ if mark then
+ head,current=inject_syntax_error(head,current,mark)
+ end
+ end
+ end
+ start=false
+ current=getnext(current)
+ end
+ if nbspaces>0 then
+ head=replace_all_nbsp(head)
+ end
+ head=tonode(head)
+ return head,done
+end
+methods.mlym=methods.deva
+methods.mlm2=methods.dev2
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-ocl']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local tostring,next,format=tostring,next,string.format
+local round,max=math.round,math.round
+local sortedkeys,sortedhash=table.sortedkeys,table.sortedhash
+local setmetatableindex=table.setmetatableindex
+local formatters=string.formatters
+local tounicode=fonts.mappings.tounicode
+local otf=fonts.handlers.otf
+local f_color=formatters["%f %f %f rg"]
+local f_gray=formatters["%f g"]
+if context then
+ local startactualtext=nil
+ local stopactualtext=nil
+ function otf.getactualtext(s)
+ if not startactualtext then
+ startactualtext=backends.codeinjections.startunicodetoactualtextdirect
+ stopactualtext=backends.codeinjections.stopunicodetoactualtextdirect
+ end
+ return startactualtext(s),stopactualtext()
+ end
+else
+ local tounicode=fonts.mappings.tounicode16
+ function otf.getactualtext(s)
+ return
+ "/Span << /ActualText <feff"..s.."> >> BDC",
+ "EMC"
+ end
+end
+local sharedpalettes={}
+local hash=setmetatableindex(function(t,k)
+ local v={ "pdf","direct",k }
+ t[k]=v
+ return v
+end)
+if context then
+ local colors=attributes.list[attributes.private('color')] or {}
+ local transparencies=attributes.list[attributes.private('transparency')] or {}
+ function otf.registerpalette(name,values)
+ sharedpalettes[name]=values
+ for i=1,#values do
+ local v=values[i]
+ local c=nil
+ local t=nil
+ if type(v)=="table" then
+ c=colors.register(name,"rgb",
+ max(round((v.r or 0)*255),255)/255,
+ max(round((v.g or 0)*255),255)/255,
+ max(round((v.b or 0)*255),255)/255
+ )
+ else
+ c=colors[v]
+ t=transparencies[v]
+ end
+ if c and t then
+ values[i]=hash[lpdf.color(1,c).." "..lpdf.transparency(t)]
+ elseif c then
+ values[i]=hash[lpdf.color(1,c)]
+ elseif t then
+ values[i]=hash[lpdf.color(1,t)]
+ end
+ end
+ end
+else
+ function otf.registerpalette(name,values)
+ sharedpalettes[name]=values
+ for i=1,#values do
+ local v=values[i]
+ values[i]=hash[f_color(
+ max(round((v.r or 0)*255),255)/255,
+ max(round((v.g or 0)*255),255)/255,
+ max(round((v.b or 0)*255),255)/255
+ )]
+ end
+ end
+end
+local function convert(t,k)
+ local v={}
+ for i=1,#k do
+ local p=k[i]
+ local r,g,b=p[1],p[2],p[3]
+ if r==g and g==b then
+ v[i]=hash[f_gray(r/255)]
+ else
+ v[i]=hash[f_color(r/255,g/255,b/255)]
+ end
+ end
+ t[k]=v
+ return v
+end
+local start={ "pdf","page","q" }
+local stop={ "pdf","raw","Q" }
+local function initializecolr(tfmdata,kind,value)
+ if value then
+ local resources=tfmdata.resources
+ local palettes=resources.colorpalettes
+ if palettes then
+ local converted=resources.converted
+ if not converted then
+ converted=setmetatableindex(convert)
+ resources.converted=converted
+ end
+ local colorvalues=sharedpalettes[value] or converted[palettes[tonumber(value) or 1] or palettes[1]] or {}
+ local classes=#colorvalues
+ if classes==0 then
+ return
+ end
+ local characters=tfmdata.characters
+ local descriptions=tfmdata.descriptions
+ local properties=tfmdata.properties
+ properties.virtualized=true
+ tfmdata.fonts={
+ { id=0 }
+ }
+ local widths=setmetatableindex(function(t,k)
+ local v={ "right",-k }
+ t[k]=v
+ return v
+ end)
+ local getactualtext=otf.getactualtext
+ local default=colorvalues[#colorvalues]
+ local b,e=getactualtext(tounicode(0xFFFD))
+ local actualb={ "pdf","page",b }
+ local actuale={ "pdf","page",e }
+ local cache=setmetatableindex(function(t,k)
+ local v={ "char",k }
+ t[k]=v
+ return v
+ end)
+ for unicode,character in next,characters do
+ local description=descriptions[unicode]
+ if description then
+ local colorlist=description.colors
+ if colorlist then
+ local u=description.unicode or characters[unicode].unicode
+ local w=character.width or 0
+ local s=#colorlist
+ local goback=w~=0 and widths[w] or nil
+ local t={
+ start,
+ not u and actualb or { "pdf","raw",getactualtext(tounicode(u)) }
+ }
+ local n=2
+ local l=nil
+ for i=1,s do
+ local entry=colorlist[i]
+ local v=colorvalues[entry.class] or default
+ if v and l~=v then
+ n=n+1 t[n]=v
+ l=v
+ end
+ n=n+1 t[n]=cache[entry.slot]
+ if s>1 and i<s and goback then
+ n=n+1 t[n]=goback
+ end
+ end
+ n=n+1 t[n]=actuale
+ n=n+1 t[n]=stop
+ character.commands=t
+ end
+ end
+ end
+ end
+ end
+end
+fonts.handlers.otf.features.register {
+ name="colr",
+ description="color glyphs",
+ manipulators={
+ base=initializecolr,
+ node=initializecolr,
+ }
+}
+do
+ local nofstreams=0
+ local f_name=formatters[ [[pdf-glyph-%05i]] ]
+ local f_used=context and formatters[ [[original:///%s]] ] or formatters[ [[%s]] ]
+ local hashed={}
+ local cache={}
+ function otf.storepdfdata(pdf)
+ local done=hashed[pdf]
+ if not done then
+ nofstreams=nofstreams+1
+ local o,n=epdf.openMemStream(pdf,#pdf,f_name(nofstreams))
+ cache[n]=o
+ done=f_used(n)
+ hashed[pdf]=done
+ end
+ return nil,done,nil
+ end
+end
+local function pdftovirtual(tfmdata,pdfshapes,kind)
+ if not tfmdata or not pdfshapes or not kind then
+ return
+ end
+ local characters=tfmdata.characters
+ local properties=tfmdata.properties
+ local parameters=tfmdata.parameters
+ local hfactor=parameters.hfactor
+ properties.virtualized=true
+ tfmdata.fonts={
+ { id=0 }
+ }
+ local getactualtext=otf.getactualtext
+ local storepdfdata=otf.storepdfdata
+ for unicode,character in sortedhash(characters) do
+ local index=character.index
+ if index then
+ local pdf=pdfshapes[index]
+ local typ=type(pdf)
+ local data=nil
+ local dx=nil
+ local dy=nil
+ if typ=="table" then
+ data=pdf.data
+ dx=pdf.dx or 0
+ dy=pdf.dy or 0
+ elseif typ=="string" then
+ data=pdf
+ dx=0
+ dy=0
+ end
+ if data then
+ local setcode,name,nilcode=storepdfdata(data)
+ if name then
+ local bt,et=getactualtext(unicode)
+ local wd=character.width or 0
+ local ht=character.height or 0
+ local dp=character.depth or 0
+ character.commands={
+ { "pdf","direct",bt },
+ { "down",dp+dy*hfactor },
+ { "right",dx*hfactor },
+ { "image",{ filename=name,width=wd,height=ht,depth=dp } },
+ { "pdf","direct",et },
+ }
+ character[kind]=true
+ end
+ end
+ end
+ end
+end
+local otfsvg=otf.svg or {}
+otf.svg=otfsvg
+otf.svgenabled=true
+do
+ local report_svg=logs.reporter("fonts","svg conversion")
+ local loaddata=io.loaddata
+ local savedata=io.savedata
+ local remove=os.remove
+ if context and xml.convert then
+ local xmlconvert=xml.convert
+ local xmlfirst=xml.first
+ function otfsvg.filterglyph(entry,index)
+ local svg=xmlconvert(entry.data)
+ local root=svg and xmlfirst(svg,"/svg[@id='glyph"..index.."']")
+ local data=root and tostring(root)
+ return data
+ end
+ else
+ function otfsvg.filterglyph(entry,index)
+ return entry.data
+ end
+ end
+ local runner=sandbox and sandbox.registerrunner {
+ name="otfsvg",
+ program="inkscape",
+ method="pipeto",
+ template="--shell > temp-otf-svg-shape.log",
+ reporter=report_svg,
+ }
+ if not runner then
+ runner=function()
+ return io.open("inkscape --shell > temp-otf-svg-shape.log","w")
+ end
+ end
+ function otfsvg.topdf(svgshapes)
+ local pdfshapes={}
+ local inkscape=runner()
+ if inkscape then
+ local nofshapes=#svgshapes
+ local f_svgfile=formatters["temp-otf-svg-shape-%i.svg"]
+ local f_pdffile=formatters["temp-otf-svg-shape-%i.pdf"]
+ local f_convert=formatters["%s --export-pdf=%s\n"]
+ local filterglyph=otfsvg.filterglyph
+ local nofdone=0
+ report_svg("processing %i svg containers",nofshapes)
+ statistics.starttiming()
+ for i=1,nofshapes do
+ local entry=svgshapes[i]
+ for index=entry.first,entry.last do
+ local data=filterglyph(entry,index)
+ if data and data~="" then
+ local svgfile=f_svgfile(index)
+ local pdffile=f_pdffile(index)
+ savedata(svgfile,data)
+ inkscape:write(f_convert(svgfile,pdffile))
+ pdfshapes[index]=true
+ nofdone=nofdone+1
+ if nofdone%100==0 then
+ report_svg("%i shapes processed",nofdone)
+ end
+ end
+ end
+ end
+ inkscape:write("quit\n")
+ inkscape:close()
+ report_svg("processing %i pdf results",nofshapes)
+ for index in next,pdfshapes do
+ local svgfile=f_svgfile(index)
+ local pdffile=f_pdffile(index)
+ pdfshapes[index]=loaddata(pdffile)
+ remove(svgfile)
+ remove(pdffile)
+ end
+ statistics.stoptiming()
+ if statistics.elapsedseconds then
+ report_svg("svg conversion time %s",statistics.elapsedseconds() or "-")
+ end
+ end
+ return pdfshapes
+ end
+end
+local function initializesvg(tfmdata,kind,value)
+ if value and otf.svgenabled then
+ local svg=tfmdata.properties.svg
+ local hash=svg and svg.hash
+ local timestamp=svg and svg.timestamp
+ if not hash then
+ return
+ end
+ local pdffile=containers.read(otf.pdfcache,hash)
+ local pdfshapes=pdffile and pdffile.pdfshapes
+ if not pdfshapes or pdffile.timestamp~=timestamp then
+ local svgfile=containers.read(otf.svgcache,hash)
+ local svgshapes=svgfile and svgfile.svgshapes
+ pdfshapes=svgshapes and otfsvg.topdf(svgshapes) or {}
+ containers.write(otf.pdfcache,hash,{
+ pdfshapes=pdfshapes,
+ timestamp=timestamp,
+ })
+ end
+ pdftovirtual(tfmdata,pdfshapes,"svg")
+ end
+end
+fonts.handlers.otf.features.register {
+ name="svg",
+ description="svg glyphs",
+ manipulators={
+ base=initializesvg,
+ node=initializesvg,
+ }
+}
+local otfsbix=otf.sbix or {}
+otf.sbix=otfsbix
+otf.sbixenabled=true
+do
+ local report_sbix=logs.reporter("fonts","sbix conversion")
+ local loaddata=io.loaddata
+ local savedata=io.savedata
+ local remove=os.remove
+ local runner=sandbox and sandbox.registerrunner {
+ name="otfsbix",
+ program="gm",
+ template="convert -quality 100 temp-otf-sbix-shape.sbix temp-otf-sbix-shape.pdf > temp-otf-svg-shape.log",
+ }
+ if not runner then
+ runner=function()
+ return os.execute("gm convert -quality 100 temp-otf-sbix-shape.sbix temp-otf-sbix-shape.pdf > temp-otf-svg-shape.log")
+ end
+ end
+ function otfsbix.topdf(sbixshapes)
+ local pdfshapes={}
+ local sbixfile="temp-otf-sbix-shape.sbix"
+ local pdffile="temp-otf-sbix-shape.pdf"
+ local nofdone=0
+ local indices=sortedkeys(sbixshapes)
+ local nofindices=#indices
+ report_sbix("processing %i sbix containers",nofindices)
+ statistics.starttiming()
+ for i=1,nofindices do
+ local index=indices[i]
+ local entry=sbixshapes[index]
+ local data=entry.data
+ local x=entry.x
+ local y=entry.y
+ savedata(sbixfile,data)
+ runner()
+ pdfshapes[index]={
+ x=x~=0 and x or nil,
+ y=y~=0 and y or nil,
+ data=loaddata(pdffile),
+ }
+ nofdone=nofdone+1
+ if nofdone%100==0 then
+ report_sbix("%i shapes processed",nofdone)
+ end
+ end
+ report_sbix("processing %i pdf results",nofindices)
+ remove(sbixfile)
+ remove(pdffile)
+ statistics.stoptiming()
+ if statistics.elapsedseconds then
+ report_sbix("sbix conversion time %s",statistics.elapsedseconds() or "-")
+ end
+ return pdfshapes
+ end
+end
+local function initializesbix(tfmdata,kind,value)
+ if value and otf.sbixenabled then
+ local sbix=tfmdata.properties.sbix
+ local hash=sbix and sbix.hash
+ local timestamp=sbix and sbix.timestamp
+ if not hash then
+ return
+ end
+ local pdffile=containers.read(otf.pdfcache,hash)
+ local pdfshapes=pdffile and pdffile.pdfshapes
+ if not pdfshapes or pdffile.timestamp~=timestamp then
+ local sbixfile=containers.read(otf.sbixcache,hash)
+ local sbixshapes=sbixfile and sbixfile.sbixshapes
+ pdfshapes=sbixshapes and otfsbix.topdf(sbixshapes) or {}
+ containers.write(otf.pdfcache,hash,{
+ pdfshapes=pdfshapes,
+ timestamp=timestamp,
+ })
+ end
+ pdftovirtual(tfmdata,pdfshapes,"sbix")
+ end
+end
+fonts.handlers.otf.features.register {
+ name="sbix",
+ description="sbix glyphs",
+ manipulators={
+ base=initializesbix,
+ node=initializesbix,
+ }
+}
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-otc']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local format,insert,sortedkeys,tohash=string.format,table.insert,table.sortedkeys,table.tohash
+local type,next=type,next
+local lpegmatch=lpeg.match
+local utfbyte,utflen,utfsplit=utf.byte,utf.len,utf.split
+local trace_loading=false trackers.register("otf.loading",function(v) trace_loading=v end)
+local report_otf=logs.reporter("fonts","otf loading")
+local fonts=fonts
+local otf=fonts.handlers.otf
+local registerotffeature=otf.features.register
+local setmetatableindex=table.setmetatableindex
+local normalized={
+ substitution="substitution",
+ single="substitution",
+ ligature="ligature",
+ alternate="alternate",
+ multiple="multiple",
+ kern="kern",
+ pair="pair",
+ single="single",
+ chainsubstitution="chainsubstitution",
+ chainposition="chainposition",
+}
+local types={
+ substitution="gsub_single",
+ ligature="gsub_ligature",
+ alternate="gsub_alternate",
+ multiple="gsub_multiple",
+ kern="gpos_pair",
+ pair="gpos_pair",
+ single="gpos_single",
+ chainsubstitution="gsub_contextchain",
+ chainposition="gpos_contextchain",
+}
+local names={
+ gsub_single="gsub",
+ gsub_multiple="gsub",
+ gsub_alternate="gsub",
+ gsub_ligature="gsub",
+ gsub_context="gsub",
+ gsub_contextchain="gsub",
+ gsub_reversecontextchain="gsub",
+ gpos_single="gpos",
+ gpos_pair="gpos",
+ gpos_cursive="gpos",
+ gpos_mark2base="gpos",
+ gpos_mark2ligature="gpos",
+ gpos_mark2mark="gpos",
+ gpos_context="gpos",
+ gpos_contextchain="gpos",
+}
+setmetatableindex(types,function(t,k) t[k]=k return k end)
+local everywhere={ ["*"]={ ["*"]=true } }
+local noflags={ false,false,false,false }
+local function getrange(sequences,category)
+ local count=#sequences
+ local first=nil
+ local last=nil
+ for i=1,count do
+ local t=sequences[i].type
+ if t and names[t]==category then
+ if not first then
+ first=i
+ end
+ last=i
+ end
+ end
+ return first or 1,last or count
+end
+local function validspecification(specification,name)
+ local dataset=specification.dataset
+ if dataset then
+ elseif specification[1] then
+ dataset=specification
+ specification={ dataset=dataset }
+ else
+ dataset={ { data=specification.data } }
+ specification.data=nil
+ specification.dataset=dataset
+ end
+ local first=dataset[1]
+ if first then
+ first=first.data
+ end
+ if not first then
+ report_otf("invalid feature specification, no dataset")
+ return
+ end
+ if type(name)~="string" then
+ name=specification.name or first.name
+ end
+ if type(name)~="string" then
+ report_otf("invalid feature specification, no name")
+ return
+ end
+ local n=#dataset
+ if n>0 then
+ for i=1,n do
+ setmetatableindex(dataset[i],specification)
+ end
+ return specification,name
+ end
+end
+local function addfeature(data,feature,specifications)
+ if not specifications then
+ report_otf("missing specification")
+ return
+ end
+ local descriptions=data.descriptions
+ local resources=data.resources
+ local features=resources.features
+ local sequences=resources.sequences
+ if not features or not sequences then
+ report_otf("missing specification")
+ return
+ end
+ local alreadydone=resources.alreadydone
+ if not alreadydone then
+ alreadydone={}
+ resources.alreadydone=alreadydone
+ end
+ if alreadydone[specifications] then
+ return
+ else
+ alreadydone[specifications]=true
+ end
+ local fontfeatures=resources.features or everywhere
+ local unicodes=resources.unicodes
+ local splitter=lpeg.splitter(" ",unicodes)
+ local done=0
+ local skip=0
+ local aglunicodes=false
+ local specifications=validspecification(specifications,feature)
+ if not specifications then
+ return
+ end
+ local function tounicode(code)
+ if not code then
+ return
+ end
+ if type(code)=="number" then
+ return code
+ end
+ local u=unicodes[code]
+ if u then
+ return u
+ end
+ if utflen(code)==1 then
+ u=utfbyte(code)
+ if u then
+ return u
+ end
+ end
+ if not aglunicodes then
+ aglunicodes=fonts.encodings.agl.unicodes
+ end
+ return aglunicodes[code]
+ end
+ local coverup=otf.coverup
+ local coveractions=coverup.actions
+ local stepkey=coverup.stepkey
+ local register=coverup.register
+ local function prepare_substitution(list,featuretype,nocheck)
+ local coverage={}
+ local cover=coveractions[featuretype]
+ for code,replacement in next,list do
+ local unicode=tounicode(code)
+ local description=descriptions[unicode]
+ if not nocheck and not description then
+ skip=skip+1
+ else
+ if type(replacement)=="table" then
+ replacement=replacement[1]
+ end
+ replacement=tounicode(replacement)
+ if replacement and descriptions[replacement] then
+ cover(coverage,unicode,replacement)
+ done=done+1
+ else
+ skip=skip+1
+ end
+ end
+ end
+ return coverage
+ end
+ local function prepare_alternate(list,featuretype,nocheck)
+ local coverage={}
+ local cover=coveractions[featuretype]
+ for code,replacement in next,list do
+ local unicode=tounicode(code)
+ local description=descriptions[unicode]
+ if not nocheck and not description then
+ skip=skip+1
+ elseif type(replacement)=="table" then
+ local r={}
+ for i=1,#replacement do
+ local u=tounicode(replacement[i])
+ r[i]=(nocheck or descriptions[u]) and u or unicode
+ end
+ cover(coverage,unicode,r)
+ done=done+1
+ else
+ local u=tounicode(replacement)
+ if u then
+ cover(coverage,unicode,{ u })
+ done=done+1
+ else
+ skip=skip+1
+ end
+ end
+ end
+ return coverage
+ end
+ local function prepare_multiple(list,featuretype,nocheck)
+ local coverage={}
+ local cover=coveractions[featuretype]
+ for code,replacement in next,list do
+ local unicode=tounicode(code)
+ local description=descriptions[unicode]
+ if not nocheck and not description then
+ skip=skip+1
+ elseif type(replacement)=="table" then
+ local r,n={},0
+ for i=1,#replacement do
+ local u=tounicode(replacement[i])
+ if nocheck or descriptions[u] then
+ n=n+1
+ r[n]=u
+ end
+ end
+ if n>0 then
+ cover(coverage,unicode,r)
+ done=done+1
+ else
+ skip=skip+1
+ end
+ else
+ local u=tounicode(replacement)
+ if u then
+ cover(coverage,unicode,{ u })
+ done=done+1
+ else
+ skip=skip+1
+ end
+ end
+ end
+ return coverage
+ end
+ local function prepare_ligature(list,featuretype,nocheck)
+ local coverage={}
+ local cover=coveractions[featuretype]
+ for code,ligature in next,list do
+ local unicode=tounicode(code)
+ local description=descriptions[unicode]
+ if not nocheck and not description then
+ skip=skip+1
+ else
+ if type(ligature)=="string" then
+ ligature={ lpegmatch(splitter,ligature) }
+ end
+ local present=true
+ for i=1,#ligature do
+ local l=ligature[i]
+ local u=tounicode(l)
+ if nocheck or descriptions[u] then
+ ligature[i]=u
+ else
+ present=false
+ break
+ end
+ end
+ if present then
+ cover(coverage,unicode,ligature)
+ done=done+1
+ else
+ skip=skip+1
+ end
+ end
+ end
+ return coverage
+ end
+ local function resetspacekerns()
+ data.properties.hasspacekerns=true
+ data.resources .spacekerns=nil
+ end
+ local function prepare_kern(list,featuretype)
+ local coverage={}
+ local cover=coveractions[featuretype]
+ local isspace=false
+ for code,replacement in next,list do
+ local unicode=tounicode(code)
+ local description=descriptions[unicode]
+ if description and type(replacement)=="table" then
+ local r={}
+ for k,v in next,replacement do
+ local u=tounicode(k)
+ if u then
+ r[u]=v
+ if u==32 then
+ isspace=true
+ end
+ end
+ end
+ if next(r) then
+ cover(coverage,unicode,r)
+ done=done+1
+ if unicode==32 then
+ isspace=true
+ end
+ else
+ skip=skip+1
+ end
+ else
+ skip=skip+1
+ end
+ end
+ if isspace then
+ resetspacekerns()
+ end
+ return coverage
+ end
+ local function prepare_pair(list,featuretype)
+ local coverage={}
+ local cover=coveractions[featuretype]
+ if cover then
+ for code,replacement in next,list do
+ local unicode=tounicode(code)
+ local description=descriptions[unicode]
+ if description and type(replacement)=="table" then
+ local r={}
+ for k,v in next,replacement do
+ local u=tounicode(k)
+ if u then
+ r[u]=v
+ if u==32 then
+ isspace=true
+ end
+ end
+ end
+ if next(r) then
+ cover(coverage,unicode,r)
+ done=done+1
+ if unicode==32 then
+ isspace=true
+ end
+ else
+ skip=skip+1
+ end
+ else
+ skip=skip+1
+ end
+ end
+ if isspace then
+ resetspacekerns()
+ end
+ else
+ report_otf("unknown cover type %a",featuretype)
+ end
+ return coverage
+ end
+ local prepare_single=prepare_pair
+ local function prepare_chain(list,featuretype,sublookups)
+ local rules=list.rules
+ local coverage={}
+ if rules then
+ local rulehash={}
+ local rulesize=0
+ local lookuptype=types[featuretype]
+ for nofrules=1,#rules do
+ local rule=rules[nofrules]
+ local current=rule.current
+ local before=rule.before
+ local after=rule.after
+ local replacements=rule.replacements or false
+ local sequence={}
+ local nofsequences=0
+ if before then
+ for n=1,#before do
+ nofsequences=nofsequences+1
+ sequence[nofsequences]=before[n]
+ end
+ end
+ local start=nofsequences+1
+ for n=1,#current do
+ nofsequences=nofsequences+1
+ sequence[nofsequences]=current[n]
+ end
+ local stop=nofsequences
+ if after then
+ for n=1,#after do
+ nofsequences=nofsequences+1
+ sequence[nofsequences]=after[n]
+ end
+ end
+ local lookups=rule.lookups or false
+ local subtype=nil
+ if lookups and sublookups then
+ for k,v in next,lookups do
+ local t=type(v)
+ if t=="table" then
+ for i=1,#v do
+ local vi=v[i]
+ if type(vi)~="table" then
+ v[i]={ vi }
+ end
+ end
+ elseif t=="number" then
+ local lookup=sublookups[v]
+ if lookup then
+ lookups[k]={ lookup }
+ if not subtype then
+ subtype=lookup.type
+ end
+ else
+ lookups[k]={ false }
+ end
+ else
+ lookups[k]={ false }
+ end
+ end
+ end
+ if nofsequences>0 then
+ local hashed={}
+ for i=1,nofsequences do
+ local t={}
+ local s=sequence[i]
+ for i=1,#s do
+ local u=tounicode(s[i])
+ if u then
+ t[u]=true
+ end
+ end
+ hashed[i]=t
+ end
+ sequence=hashed
+ rulesize=rulesize+1
+ rulehash[rulesize]={
+ nofrules,
+ lookuptype,
+ sequence,
+ start,
+ stop,
+ lookups,
+ replacements,
+ subtype,
+ }
+ for unic in next,sequence[start] do
+ local cu=coverage[unic]
+ if not cu then
+ coverage[unic]=rulehash
+ end
+ end
+ sequence.n=nofsequences
+ end
+ end
+ rulehash.n=rulesize
+ end
+ return coverage
+ end
+ local dataset=specifications.dataset
+ local function report(name,category,position,first,last,sequences)
+ report_otf("injecting name %a of category %a at position %i in [%i,%i] of [%i,%i]",
+ name,category,position,first,last,1,#sequences)
+ end
+ local function inject(specification,sequences,sequence,first,last,category,name)
+ local position=specification.position or false
+ if not position then
+ position=specification.prepend
+ if position==true then
+ if trace_loading then
+ report(name,category,first,first,last,sequences)
+ end
+ insert(sequences,first,sequence)
+ return
+ end
+ end
+ if not position then
+ position=specification.append
+ if position==true then
+ if trace_loading then
+ report(name,category,last+1,first,last,sequences)
+ end
+ insert(sequences,last+1,sequence)
+ return
+ end
+ end
+ local kind=type(position)
+ if kind=="string" then
+ local index=false
+ for i=first,last do
+ local s=sequences[i]
+ local f=s.features
+ if f then
+ for k in next,f do
+ if k==position then
+ index=i
+ break
+ end
+ end
+ if index then
+ break
+ end
+ end
+ end
+ if index then
+ position=index
+ else
+ position=last+1
+ end
+ elseif kind=="number" then
+ if position<0 then
+ position=last-position+1
+ end
+ if position>last then
+ position=last+1
+ elseif position<first then
+ position=first
+ end
+ else
+ position=last+1
+ end
+ if trace_loading then
+ report(name,category,position,first,last,sequences)
+ end
+ insert(sequences,position,sequence)
+ end
+ for s=1,#dataset do
+ local specification=dataset[s]
+ local valid=specification.valid
+ local feature=specification.name or feature
+ if not feature or feature=="" then
+ report_otf("no valid name given for extra feature")
+ elseif not valid or valid(data,specification,feature) then
+ local initialize=specification.initialize
+ if initialize then
+ specification.initialize=initialize(specification,data) and initialize or nil
+ end
+ local askedfeatures=specification.features or everywhere
+ local askedsteps=specification.steps or specification.subtables or { specification.data } or {}
+ local featuretype=normalized[specification.type or "substitution"] or "substitution"
+ local featureflags=specification.flags or noflags
+ local nocheck=specification.nocheck
+ local futuresteps=specification.futuresteps
+ local featureorder=specification.order or { feature }
+ local featurechain=(featuretype=="chainsubstitution" or featuretype=="chainposition") and 1 or 0
+ local nofsteps=0
+ local steps={}
+ local sublookups=specification.lookups
+ local category=nil
+ if sublookups then
+ local s={}
+ for i=1,#sublookups do
+ local specification=sublookups[i]
+ local askedsteps=specification.steps or specification.subtables or { specification.data } or {}
+ local featuretype=normalized[specification.type or "substitution"] or "substitution"
+ local featureflags=specification.flags or noflags
+ local nofsteps=0
+ local steps={}
+ for i=1,#askedsteps do
+ local list=askedsteps[i]
+ local coverage=nil
+ local format=nil
+ if featuretype=="substitution" then
+ coverage=prepare_substitution(list,featuretype,nocheck)
+ elseif featuretype=="ligature" then
+ coverage=prepare_ligature(list,featuretype,nocheck)
+ elseif featuretype=="alternate" then
+ coverage=prepare_alternate(list,featuretype,nocheck)
+ elseif featuretype=="multiple" then
+ coverage=prepare_multiple(list,featuretype,nocheck)
+ elseif featuretype=="kern" or featuretype=="move" then
+ format=featuretype
+ coverage=prepare_kern(list,featuretype)
+ elseif featuretype=="pair" then
+ format="pair"
+ coverage=prepare_pair(list,featuretype)
+ elseif featuretype=="single" then
+ format="single"
+ coverage=prepare_single(list,featuretype)
+ end
+ if coverage and next(coverage) then
+ nofsteps=nofsteps+1
+ steps[nofsteps]=register(coverage,featuretype,format,feature,nofsteps,descriptions,resources)
+ end
+ end
+ setmetatableindex(steps,fonts.helpers.mergesteps)
+ s[i]={
+ [stepkey]=steps,
+ nofsteps=nofsteps,
+ flags=featureflags,
+ type=types[featuretype],
+ }
+ end
+ sublookups=s
+ end
+ for i=1,#askedsteps do
+ local list=askedsteps[i]
+ local coverage=nil
+ local format=nil
+ if featuretype=="substitution" then
+ category="gsub"
+ coverage=prepare_substitution(list,featuretype,nocheck)
+ elseif featuretype=="ligature" then
+ category="gsub"
+ coverage=prepare_ligature(list,featuretype,nocheck)
+ elseif featuretype=="alternate" then
+ category="gsub"
+ coverage=prepare_alternate(list,featuretype,nocheck)
+ elseif featuretype=="multiple" then
+ category="gsub"
+ coverage=prepare_multiple(list,featuretype,nocheck)
+ elseif featuretype=="kern" or featuretype=="move" then
+ category="gpos"
+ format=featuretype
+ coverage=prepare_kern(list,featuretype)
+ elseif featuretype=="pair" then
+ category="gpos"
+ format="pair"
+ coverage=prepare_pair(list,featuretype)
+ elseif featuretype=="single" then
+ category="gpos"
+ format="single"
+ coverage=prepare_single(list,featuretype)
+ elseif featuretype=="chainsubstitution" then
+ category="gsub"
+ coverage=prepare_chain(list,featuretype,sublookups)
+ elseif featuretype=="chainposition" then
+ category="gpos"
+ coverage=prepare_chain(list,featuretype,sublookups)
+ else
+ report_otf("not registering feature %a, unknown category",feature)
+ return
+ end
+ if coverage and next(coverage) then
+ nofsteps=nofsteps+1
+ steps[nofsteps]=register(coverage,featuretype,format,feature,nofsteps,descriptions,resources)
+ end
+ end
+ if nofsteps>0 then
+ for k,v in next,askedfeatures do
+ if v[1] then
+ askedfeatures[k]=tohash(v)
+ end
+ end
+ setmetatableindex(steps,fonts.helpers.mergesteps)
+ if featureflags[1] then featureflags[1]="mark" end
+ if featureflags[2] then featureflags[2]="ligature" end
+ if featureflags[3] then featureflags[3]="base" end
+ local steptype=types[featuretype]
+ local sequence={
+ chain=featurechain,
+ features={ [feature]=askedfeatures },
+ flags=featureflags,
+ name=feature,
+ order=featureorder,
+ [stepkey]=steps,
+ nofsteps=nofsteps,
+ type=steptype,
+ }
+ local first,last=getrange(sequences,category)
+ inject(specification,sequences,sequence,first,last,category,feature)
+ local features=fontfeatures[category]
+ if not features then
+ features={}
+ fontfeatures[category]=features
+ end
+ local k=features[feature]
+ if not k then
+ k={}
+ features[feature]=k
+ end
+ for script,languages in next,askedfeatures do
+ local kk=k[script]
+ if not kk then
+ kk={}
+ k[script]=kk
+ end
+ for language,value in next,languages do
+ kk[language]=value
+ end
+ end
+ end
+ end
+ end
+ if trace_loading then
+ report_otf("registering feature %a, affected glyphs %a, skipped glyphs %a",feature,done,skip)
+ end
+end
+otf.enhancers.addfeature=addfeature
+local extrafeatures={}
+local knownfeatures={}
+function otf.addfeature(name,specification)
+ if type(name)=="table" then
+ specification=name
+ end
+ if type(specification)~="table" then
+ report_otf("invalid feature specification, no valid table")
+ return
+ end
+ specification,name=validspecification(specification,name)
+ if name and specification then
+ local slot=knownfeatures[name]
+ if not slot then
+ slot=#extrafeatures+1
+ knownfeatures[name]=slot
+ elseif specification.overload==false then
+ slot=#extrafeatures+1
+ knownfeatures[name]=slot
+ else
+ end
+ specification.name=name
+ extrafeatures[slot]=specification
+ end
+end
+local function enhance(data,filename,raw)
+ for slot=1,#extrafeatures do
+ local specification=extrafeatures[slot]
+ addfeature(data,specification.name,specification)
+ end
+end
+otf.enhancers.enhance=enhance
+otf.enhancers.register("check extra features",enhance)
+local tlig={
+ [0x2013]={ 0x002D,0x002D },
+ [0x2014]={ 0x002D,0x002D,0x002D },
+}
+local tlig_specification={
+ type="ligature",
+ features=everywhere,
+ data=tlig,
+ order={ "tlig" },
+ flags=noflags,
+ prepend=true,
+}
+otf.addfeature("tlig",tlig_specification)
+registerotffeature {
+ name='tlig',
+ description='tex ligatures',
+}
+local trep={
+ [0x0027]=0x2019,
+}
+local trep_specification={
+ type="substitution",
+ features=everywhere,
+ data=trep,
+ order={ "trep" },
+ flags=noflags,
+ prepend=true,
+}
+otf.addfeature("trep",trep_specification)
+registerotffeature {
+ name='trep',
+ description='tex replacements',
+}
+local anum_arabic={
+ [0x0030]=0x0660,
+ [0x0031]=0x0661,
+ [0x0032]=0x0662,
+ [0x0033]=0x0663,
+ [0x0034]=0x0664,
+ [0x0035]=0x0665,
+ [0x0036]=0x0666,
+ [0x0037]=0x0667,
+ [0x0038]=0x0668,
+ [0x0039]=0x0669,
+}
+local anum_persian={
+ [0x0030]=0x06F0,
+ [0x0031]=0x06F1,
+ [0x0032]=0x06F2,
+ [0x0033]=0x06F3,
+ [0x0034]=0x06F4,
+ [0x0035]=0x06F5,
+ [0x0036]=0x06F6,
+ [0x0037]=0x06F7,
+ [0x0038]=0x06F8,
+ [0x0039]=0x06F9,
+}
+local function valid(data)
+ local features=data.resources.features
+ if features then
+ for k,v in next,features do
+ for k,v in next,v do
+ if v.arab then
+ return true
+ end
+ end
+ end
+ end
+end
+local anum_specification={
+ {
+ type="substitution",
+ features={ arab={ urd=true,dflt=true } },
+ order={ "anum" },
+ data=anum_arabic,
+ flags=noflags,
+ valid=valid,
+ },
+ {
+ type="substitution",
+ features={ arab={ urd=true } },
+ order={ "anum" },
+ data=anum_persian,
+ flags=noflags,
+ valid=valid,
+ },
+}
+otf.addfeature("anum",anum_specification)
+registerotffeature {
+ name='anum',
+ description='arabic digits',
+}
+local lookups={}
+local protect={}
+local revert={}
+local zwj={ 0x200C }
+otf.addfeature {
+ name="blockligatures",
+ type="chainsubstitution",
+ nocheck=true,
+ prepend=true,
+ future=true,
+ lookups={
+ {
+ type="multiple",
+ data=lookups,
+ },
+ },
+ data={
+ rules=protect,
+ }
+}
+otf.addfeature {
+ name="blockligatures",
+ type="chainsubstitution",
+ nocheck=true,
+ append=true,
+ overload=false,
+ lookups={
+ {
+ type="ligature",
+ data=lookups,
+ },
+ },
+ data={
+ rules=revert,
+ }
+}
+registerotffeature {
+ name='blockligatures',
+ description='block certain ligatures',
+}
+local settings_to_array=utilities.parsers and utilities.parsers.settings_to_array
+ or function(s) return string.split(s,",") end
+local function blockligatures(str)
+ local t=settings_to_array(str)
+ for i=1,#t do
+ local ti=utfsplit(t[i])
+ if #ti>1 then
+ local one=ti[1]
+ local two=ti[2]
+ lookups[one]={ one,0x200C }
+ local one={ one }
+ local two={ two }
+ local new=#protect+1
+ protect[new]={
+ current={ one,two },
+ lookups={ 1 },
+ }
+ revert[new]={
+ current={ one,zwj },
+ after={ two },
+ lookups={ 1 },
+ }
+ end
+ end
+end
+otf.helpers.blockligatures=blockligatures
+if context then
+ interfaces.implement {
+ name="blockligatures",
+ arguments="string",
+ actions=blockligatures,
+ }
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-onr']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local fonts,logs,trackers,resolvers=fonts,logs,trackers,resolvers
+local next,type,tonumber,rawget,rawset=next,type,tonumber,rawget,rawset
+local match,lower,gsub,strip,find=string.match,string.lower,string.gsub,string.strip,string.find
+local char,byte,sub=string.char,string.byte,string.sub
+local abs=math.abs
+local bxor,rshift=bit32.bxor,bit32.rshift
+local P,S,R,Cmt,C,Ct,Cs,Carg,Cf,Cg=lpeg.P,lpeg.S,lpeg.R,lpeg.Cmt,lpeg.C,lpeg.Ct,lpeg.Cs,lpeg.Carg,lpeg.Cf,lpeg.Cg
+local lpegmatch,patterns=lpeg.match,lpeg.patterns
+local trace_indexing=false trackers.register("afm.indexing",function(v) trace_indexing=v end)
+local trace_loading=false trackers.register("afm.loading",function(v) trace_loading=v end)
+local report_afm=logs.reporter("fonts","afm loading")
+local report_pfb=logs.reporter("fonts","pfb loading")
+local handlers=fonts.handlers
+local afm=handlers.afm or {}
+handlers.afm=afm
+local readers=afm.readers or {}
+afm.readers=readers
+afm.version=1.513
+local get_indexes,get_shapes
+do
+ local decrypt
+ do
+ local r,c1,c2,n=0,0,0,0
+ local function step(c)
+ local cipher=byte(c)
+ local plain=bxor(cipher,rshift(r,8))
+ r=((cipher+r)*c1+c2)%65536
+ return char(plain)
+ end
+ decrypt=function(binary,initial,seed)
+ r,c1,c2,n=initial,52845,22719,seed
+ binary=gsub(binary,".",step)
+ return sub(binary,n+1)
+ end
+ end
+ local charstrings=P("/CharStrings")
+ local subroutines=P("/Subrs")
+ local encoding=P("/Encoding")
+ local dup=P("dup")
+ local put=P("put")
+ local array=P("array")
+ local name=P("/")*C((R("az","AZ","09")+S("-_."))^1)
+ local digits=R("09")^1
+ local cardinal=digits/tonumber
+ local spaces=P(" ")^1
+ local spacing=patterns.whitespace^0
+ local routines,vector,chars,n,m
+ local initialize=function(str,position,size)
+ n=0
+ m=size
+ return position+1
+ end
+ local setroutine=function(str,position,index,size,filename)
+ local forward=position+tonumber(size)
+ local stream=decrypt(sub(str,position+1,forward),4330,4)
+ routines[index]={ byte(stream,1,#stream) }
+ return forward
+ end
+ local setvector=function(str,position,name,size,filename)
+ local forward=position+tonumber(size)
+ if n>=m then
+ return #str
+ elseif forward<#str then
+ if n==0 and name~=".notdef" then
+ report_pfb("reserving .notdef at index 0 in %a",filename)
+ n=n+1
+ end
+ vector[n]=name
+ n=n+1
+ return forward
+ else
+ return #str
+ end
+ end
+ local setshapes=function(str,position,name,size,filename)
+ local forward=position+tonumber(size)
+ local stream=sub(str,position+1,forward)
+ if n>m then
+ return #str
+ elseif forward<#str then
+ if n==0 and name~=".notdef" then
+ report_pfb("reserving .notdef at index 0 in %a",filename)
+ n=n+1
+ end
+ vector[n]=name
+ n=n+1
+ chars [n]=decrypt(stream,4330,4)
+ return forward
+ else
+ return #str
+ end
+ end
+ local p_rd=spacing*(P("RD")+P("-|"))
+ local p_np=spacing*(P("NP")+P("|"))
+ local p_nd=spacing*(P("ND")+P("|"))
+ local p_filterroutines=
+ (1-subroutines)^0*subroutines*spaces*Cmt(cardinal,initialize)*(Cmt(cardinal*spaces*cardinal*p_rd*Carg(1),setroutine)*p_np+P(1))^1
+ local p_filtershapes=
+ (1-charstrings)^0*charstrings*spaces*Cmt(cardinal,initialize)*(Cmt(name*spaces*cardinal*p_rd*Carg(1),setshapes)*p_nd+P(1))^1
+ local p_filternames=Ct (
+ (1-charstrings)^0*charstrings*spaces*Cmt(cardinal,initialize)*(Cmt(name*spaces*cardinal*Carg(1),setvector)+P(1))^1
+ )
+ local p_filterencoding=(1-encoding)^0*encoding*spaces*digits*spaces*array*(1-dup)^0*Cf(
+ Ct("")*Cg(spacing*dup*spaces*cardinal*spaces*name*spaces*put)^1
+,rawset)
+ local function loadpfbvector(filename,shapestoo)
+ local data=io.loaddata(resolvers.findfile(filename))
+ if not data then
+ report_pfb("no data in %a",filename)
+ return
+ end
+ if not (find(data,"!PS%-AdobeFont%-") or find(data,"%%!FontType1")) then
+ report_pfb("no font in %a",filename)
+ return
+ end
+ local ascii,binary=match(data,"(.*)eexec%s+......(.*)")
+ if not binary then
+ report_pfb("no binary data in %a",filename)
+ return
+ end
+ binary=decrypt(binary,55665,4)
+ local names={}
+ local encoding=lpegmatch(p_filterencoding,ascii)
+ local glyphs={}
+ routines,vector,chars={},{},{}
+ if shapestoo then
+ lpegmatch(p_filterroutines,binary,1,filename)
+ lpegmatch(p_filtershapes,binary,1,filename)
+ local data={
+ dictionaries={
+ {
+ charstrings=chars,
+ charset=vector,
+ subroutines=routines,
+ }
+ },
+ }
+ fonts.handlers.otf.readers.parsecharstrings(false,data,glyphs,true,true)
+ else
+ lpegmatch(p_filternames,binary,1,filename)
+ end
+ names=vector
+ routines,vector,chars=nil,nil,nil
+ return names,encoding,glyphs
+ end
+ local pfb=handlers.pfb or {}
+ handlers.pfb=pfb
+ pfb.loadvector=loadpfbvector
+ get_indexes=function(data,pfbname)
+ local vector=loadpfbvector(pfbname)
+ if vector then
+ local characters=data.characters
+ if trace_loading then
+ report_afm("getting index data from %a",pfbname)
+ end
+ for index=0,#vector do
+ local name=vector[index]
+ local char=characters[name]
+ if char then
+ if trace_indexing then
+ report_afm("glyph %a has index %a",name,index)
+ end
+ char.index=index
+ else
+ if trace_indexing then
+ report_afm("glyph %a has index %a but no data",name,index)
+ end
+ end
+ end
+ end
+ end
+ get_shapes=function(pfbname)
+ local vector,encoding,glyphs=loadpfbvector(pfbname,true)
+ return glyphs
+ end
+end
+local spacer=patterns.spacer
+local whitespace=patterns.whitespace
+local lineend=patterns.newline
+local spacing=spacer^0
+local number=spacing*S("+-")^-1*(R("09")+S("."))^1/tonumber
+local name=spacing*C((1-whitespace)^1)
+local words=spacing*((1-lineend)^1/strip)
+local rest=(1-lineend)^0
+local fontdata=Carg(1)
+local semicolon=spacing*P(";")
+local plus=spacing*P("plus")*number
+local minus=spacing*P("minus")*number
+local function addkernpair(data,one,two,value)
+ local chr=data.characters[one]
+ if chr then
+ local kerns=chr.kerns
+ if kerns then
+ kerns[two]=tonumber(value)
+ else
+ chr.kerns={ [two]=tonumber(value) }
+ end
+ end
+end
+local p_kernpair=(fontdata*P("KPX")*name*name*number)/addkernpair
+local chr=false
+local ind=0
+local function start(data,version)
+ data.metadata.afmversion=version
+ ind=0
+ chr={}
+end
+local function stop()
+ ind=0
+ chr=false
+end
+local function setindex(i)
+ if i<0 then
+ ind=ind+1
+ else
+ ind=i
+ end
+ chr={
+ index=ind
+ }
+end
+local function setwidth(width)
+ chr.width=width
+end
+local function setname(data,name)
+ data.characters[name]=chr
+end
+local function setboundingbox(boundingbox)
+ chr.boundingbox=boundingbox
+end
+local function setligature(plus,becomes)
+ local ligatures=chr.ligatures
+ if ligatures then
+ ligatures[plus]=becomes
+ else
+ chr.ligatures={ [plus]=becomes }
+ end
+end
+local p_charmetric=((
+ P("C")*number/setindex+P("WX")*number/setwidth+P("N")*fontdata*name/setname+P("B")*Ct((number)^4)/setboundingbox+P("L")*(name)^2/setligature
+ )*semicolon )^1
+local p_charmetrics=P("StartCharMetrics")*number*(p_charmetric+(1-P("EndCharMetrics")))^0*P("EndCharMetrics")
+local p_kernpairs=P("StartKernPairs")*number*(p_kernpair+(1-P("EndKernPairs" )))^0*P("EndKernPairs" )
+local function set_1(data,key,a) data.metadata[lower(key)]=a end
+local function set_2(data,key,a,b) data.metadata[lower(key)]={ a,b } end
+local function set_3(data,key,a,b,c) data.metadata[lower(key)]={ a,b,c } end
+local p_parameters=P(false)+fontdata*((P("FontName")+P("FullName")+P("FamilyName"))/lower)*words/function(data,key,value)
+ data.metadata[key]=value
+ end+fontdata*((P("Weight")+P("Version"))/lower)*name/function(data,key,value)
+ data.metadata[key]=value
+ end+fontdata*P("IsFixedPitch")*name/function(data,pitch)
+ data.metadata.monospaced=toboolean(pitch,true)
+ end+fontdata*P("FontBBox")*Ct(number^4)/function(data,boundingbox)
+ data.metadata.boundingbox=boundingbox
+ end+fontdata*((P("CharWidth")+P("CapHeight")+P("XHeight")+P("Descender")+P("Ascender")+P("ItalicAngle"))/lower)*number/function(data,key,value)
+ data.metadata[key]=value
+ end+P("Comment")*spacing*(P(false)+(fontdata*C("DESIGNSIZE")*number*rest)/set_1
++(fontdata*C("TFM designsize")*number*rest)/set_1+(fontdata*C("DesignSize")*number*rest)/set_1+(fontdata*C("CODINGSCHEME")*words*rest)/set_1
++(fontdata*C("CHECKSUM")*number*words*rest)/set_1
++(fontdata*C("SPACE")*number*plus*minus*rest)/set_3
++(fontdata*C("QUAD")*number*rest)/set_1
++(fontdata*C("EXTRASPACE")*number*rest)/set_1
++(fontdata*C("NUM")*number*number*number*rest)/set_3
++(fontdata*C("DENOM")*number*number*rest)/set_2
++(fontdata*C("SUP")*number*number*number*rest)/set_3
++(fontdata*C("SUB")*number*number*rest)/set_2
++(fontdata*C("SUPDROP")*number*rest)/set_1
++(fontdata*C("SUBDROP")*number*rest)/set_1
++(fontdata*C("DELIM")*number*number*rest)/set_2
++(fontdata*C("AXISHEIGHT")*number*rest)/set_1
+ )
+local fullparser=(P("StartFontMetrics")*fontdata*name/start )*(p_charmetrics+p_kernpairs+p_parameters+(1-P("EndFontMetrics")) )^0*(P("EndFontMetrics")/stop )
+local infoparser=(P("StartFontMetrics")*fontdata*name/start )*(p_parameters+(1-P("EndFontMetrics")) )^0*(P("EndFontMetrics")/stop )
+local function read(filename,parser)
+ local afmblob=io.loaddata(filename)
+ if afmblob then
+ local data={
+ resources={
+ filename=resolvers.unresolve(filename),
+ version=afm.version,
+ creator="context mkiv",
+ },
+ properties={
+ hasitalics=false,
+ },
+ goodies={},
+ metadata={
+ filename=file.removesuffix(file.basename(filename))
+ },
+ characters={
+ },
+ descriptions={
+ },
+ }
+ if trace_loading then
+ report_afm("parsing afm file %a",filename)
+ end
+ lpegmatch(parser,afmblob,1,data)
+ return data
+ else
+ if trace_loading then
+ report_afm("no valid afm file %a",filename)
+ end
+ return nil
+ end
+end
+function readers.loadfont(afmname,pfbname)
+ local data=read(resolvers.findfile(afmname),fullparser)
+ if data then
+ if not pfbname or pfbname=="" then
+ pfbname=resolvers.findfile(file.replacesuffix(file.nameonly(afmname),"pfb"))
+ end
+ if pfbname and pfbname~="" then
+ data.resources.filename=resolvers.unresolve(pfbname)
+ get_indexes(data,pfbname)
+ return data
+ else
+ report_afm("no pfb file for %a",afmname)
+ end
+ end
+end
+function readers.loadshapes(filename)
+ local fullname=resolvers.findfile(filename) or ""
+ if fullname=="" then
+ return {
+ filename="not found: "..filename,
+ glyphs={}
+ }
+ else
+ return {
+ filename=fullname,
+ format="opentype",
+ glyphs=get_shapes(fullname) or {},
+ units=1000,
+ }
+ end
+end
+function readers.getinfo(filename)
+ local data=read(resolvers.findfile(filename),infoparser)
+ if data then
+ return data.metadata
+ end
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-one']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local fonts,logs,trackers,containers,resolvers=fonts,logs,trackers,containers,resolvers
+local next,type,tonumber,rawget=next,type,tonumber,rawget
+local match,gmatch,lower,gsub,strip,find=string.match,string.gmatch,string.lower,string.gsub,string.strip,string.find
+local char,byte,sub=string.char,string.byte,string.sub
+local abs=math.abs
+local bxor,rshift=bit32.bxor,bit32.rshift
+local P,S,R,Cmt,C,Ct,Cs,Carg=lpeg.P,lpeg.S,lpeg.R,lpeg.Cmt,lpeg.C,lpeg.Ct,lpeg.Cs,lpeg.Carg
+local lpegmatch,patterns=lpeg.match,lpeg.patterns
+local trace_features=false trackers.register("afm.features",function(v) trace_features=v end)
+local trace_indexing=false trackers.register("afm.indexing",function(v) trace_indexing=v end)
+local trace_loading=false trackers.register("afm.loading",function(v) trace_loading=v end)
+local trace_defining=false trackers.register("fonts.defining",function(v) trace_defining=v end)
+local report_afm=logs.reporter("fonts","afm loading")
+local setmetatableindex=table.setmetatableindex
+local derivetable=table.derive
+local findbinfile=resolvers.findbinfile
+local privateoffset=fonts.constructors and fonts.constructors.privateoffset or 0xF0000
+local definers=fonts.definers
+local readers=fonts.readers
+local constructors=fonts.constructors
+local afm=constructors.handlers.afm
+local pfb=constructors.handlers.pfb
+local otf=fonts.handlers.otf
+local otfreaders=otf.readers
+local otfenhancers=otf.enhancers
+local afmfeatures=constructors.features.afm
+local registerafmfeature=afmfeatures.register
+local afmenhancers=constructors.enhancers.afm
+local registerafmenhancer=afmenhancers.register
+afm.version=1.512
+afm.cache=containers.define("fonts","one",afm.version,true)
+afm.autoprefixed=true
+afm.helpdata={}
+afm.syncspace=true
+local overloads=fonts.mappings.overloads
+local applyruntimefixes=fonts.treatments and fonts.treatments.applyfixes
+function afm.load(filename)
+ filename=resolvers.findfile(filename,'afm') or ""
+ if filename~="" and not fonts.names.ignoredfile(filename) then
+ local name=file.removesuffix(file.basename(filename))
+ local data=containers.read(afm.cache,name)
+ local attr=lfs.attributes(filename)
+ local size,time=attr.size or 0,attr.modification or 0
+ local pfbfile=file.replacesuffix(name,"pfb")
+ local pfbname=resolvers.findfile(pfbfile,"pfb") or ""
+ if pfbname=="" then
+ pfbname=resolvers.findfile(file.basename(pfbfile),"pfb") or ""
+ end
+ local pfbsize,pfbtime=0,0
+ if pfbname~="" then
+ local attr=lfs.attributes(pfbname)
+ pfbsize=attr.size or 0
+ pfbtime=attr.modification or 0
+ end
+ if not data or data.size~=size or data.time~=time or data.pfbsize~=pfbsize or data.pfbtime~=pfbtime then
+ report_afm("reading %a",filename)
+ data=afm.readers.loadfont(filename,pfbname)
+ if data then
+ afmenhancers.apply(data,filename)
+ fonts.mappings.addtounicode(data,filename)
+ otfreaders.pack(data)
+ data.size=size
+ data.time=time
+ data.pfbsize=pfbsize
+ data.pfbtime=pfbtime
+ report_afm("saving %a in cache",name)
+ data=containers.write(afm.cache,name,data)
+ data=containers.read(afm.cache,name)
+ end
+ end
+ if data then
+ otfreaders.unpack(data)
+ otfreaders.expand(data)
+ otfreaders.addunicodetable(data)
+ otfenhancers.apply(data,filename,data)
+ if applyruntimefixes then
+ applyruntimefixes(filename,data)
+ end
+ end
+ return data
+ end
+end
+local uparser=fonts.mappings.makenameparser()
+local function enhance_unify_names(data,filename)
+ local unicodevector=fonts.encodings.agl.unicodes
+ local unicodes={}
+ local names={}
+ local private=data.private or privateoffset
+ local descriptions=data.descriptions
+ for name,blob in next,data.characters do
+ local code=unicodevector[name]
+ if not code then
+ code=lpegmatch(uparser,name)
+ if type(code)~="number" then
+ code=private
+ private=private+1
+ report_afm("assigning private slot %U for unknown glyph name %a",code,name)
+ end
+ end
+ local index=blob.index
+ unicodes[name]=code
+ names[name]=index
+ blob.name=name
+ descriptions[code]={
+ boundingbox=blob.boundingbox,
+ width=blob.width,
+ kerns=blob.kerns,
+ index=index,
+ name=name,
+ }
+ end
+ for unicode,description in next,descriptions do
+ local kerns=description.kerns
+ if kerns then
+ local krn={}
+ for name,kern in next,kerns do
+ local unicode=unicodes[name]
+ if unicode then
+ krn[unicode]=kern
+ else
+ end
+ end
+ description.kerns=krn
+ end
+ end
+ data.characters=nil
+ data.private=private
+ local resources=data.resources
+ local filename=resources.filename or file.removesuffix(file.basename(filename))
+ resources.filename=resolvers.unresolve(filename)
+ resources.unicodes=unicodes
+ resources.marks={}
+end
+local everywhere={ ["*"]={ ["*"]=true } }
+local noflags={ false,false,false,false }
+local function enhance_normalize_features(data)
+ local ligatures=setmetatableindex("table")
+ local kerns=setmetatableindex("table")
+ local extrakerns=setmetatableindex("table")
+ for u,c in next,data.descriptions do
+ local l=c.ligatures
+ local k=c.kerns
+ local e=c.extrakerns
+ if l then
+ ligatures[u]=l
+ for u,v in next,l do
+ l[u]={ ligature=v }
+ end
+ c.ligatures=nil
+ end
+ if k then
+ kerns[u]=k
+ for u,v in next,k do
+ k[u]=v
+ end
+ c.kerns=nil
+ end
+ if e then
+ extrakerns[u]=e
+ for u,v in next,e do
+ e[u]=v
+ end
+ c.extrakerns=nil
+ end
+ end
+ local features={
+ gpos={},
+ gsub={},
+ }
+ local sequences={
+ }
+ if next(ligatures) then
+ features.gsub.liga=everywhere
+ data.properties.hasligatures=true
+ sequences[#sequences+1]={
+ features={
+ liga=everywhere,
+ },
+ flags=noflags,
+ name="s_s_0",
+ nofsteps=1,
+ order={ "liga" },
+ type="gsub_ligature",
+ steps={
+ {
+ coverage=ligatures,
+ },
+ },
+ }
+ end
+ if next(kerns) then
+ features.gpos.kern=everywhere
+ data.properties.haskerns=true
+ sequences[#sequences+1]={
+ features={
+ kern=everywhere,
+ },
+ flags=noflags,
+ name="p_s_0",
+ nofsteps=1,
+ order={ "kern" },
+ type="gpos_pair",
+ steps={
+ {
+ format="kern",
+ coverage=kerns,
+ },
+ },
+ }
+ end
+ if next(extrakerns) then
+ features.gpos.extrakerns=everywhere
+ data.properties.haskerns=true
+ sequences[#sequences+1]={
+ features={
+ extrakerns=everywhere,
+ },
+ flags=noflags,
+ name="p_s_1",
+ nofsteps=1,
+ order={ "extrakerns" },
+ type="gpos_pair",
+ steps={
+ {
+ format="kern",
+ coverage=extrakerns,
+ },
+ },
+ }
+ end
+ data.resources.features=features
+ data.resources.sequences=sequences
+end
+local function enhance_fix_names(data)
+ for k,v in next,data.descriptions do
+ local n=v.name
+ local r=overloads[n]
+ if r then
+ local name=r.name
+ if trace_indexing then
+ report_afm("renaming characters %a to %a",n,name)
+ end
+ v.name=name
+ v.unicode=r.unicode
+ end
+ end
+end
+local addthem=function(rawdata,ligatures)
+ if ligatures then
+ local descriptions=rawdata.descriptions
+ local resources=rawdata.resources
+ local unicodes=resources.unicodes
+ for ligname,ligdata in next,ligatures do
+ local one=descriptions[unicodes[ligname]]
+ if one then
+ for _,pair in next,ligdata do
+ local two,three=unicodes[pair[1]],unicodes[pair[2]]
+ if two and three then
+ local ol=one.ligatures
+ if ol then
+ if not ol[two] then
+ ol[two]=three
+ end
+ else
+ one.ligatures={ [two]=three }
+ end
+ end
+ end
+ end
+ end
+ end
+end
+local function enhance_add_ligatures(rawdata)
+ addthem(rawdata,afm.helpdata.ligatures)
+end
+local function enhance_add_extra_kerns(rawdata)
+ local descriptions=rawdata.descriptions
+ local resources=rawdata.resources
+ local unicodes=resources.unicodes
+ local function do_it_left(what)
+ if what then
+ for unicode,description in next,descriptions do
+ local kerns=description.kerns
+ if kerns then
+ local extrakerns
+ for complex,simple in next,what do
+ complex=unicodes[complex]
+ simple=unicodes[simple]
+ if complex and simple then
+ local ks=kerns[simple]
+ if ks and not kerns[complex] then
+ if extrakerns then
+ extrakerns[complex]=ks
+ else
+ extrakerns={ [complex]=ks }
+ end
+ end
+ end
+ end
+ if extrakerns then
+ description.extrakerns=extrakerns
+ end
+ end
+ end
+ end
+ end
+ local function do_it_copy(what)
+ if what then
+ for complex,simple in next,what do
+ complex=unicodes[complex]
+ simple=unicodes[simple]
+ if complex and simple then
+ local complexdescription=descriptions[complex]
+ if complexdescription then
+ local simpledescription=descriptions[complex]
+ if simpledescription then
+ local extrakerns
+ local kerns=simpledescription.kerns
+ if kerns then
+ for unicode,kern in next,kerns do
+ if extrakerns then
+ extrakerns[unicode]=kern
+ else
+ extrakerns={ [unicode]=kern }
+ end
+ end
+ end
+ local extrakerns=simpledescription.extrakerns
+ if extrakerns then
+ for unicode,kern in next,extrakerns do
+ if extrakerns then
+ extrakerns[unicode]=kern
+ else
+ extrakerns={ [unicode]=kern }
+ end
+ end
+ end
+ if extrakerns then
+ complexdescription.extrakerns=extrakerns
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ do_it_left(afm.helpdata.leftkerned)
+ do_it_left(afm.helpdata.bothkerned)
+ do_it_copy(afm.helpdata.bothkerned)
+ do_it_copy(afm.helpdata.rightkerned)
+end
+local function adddimensions(data)
+ if data then
+ for unicode,description in next,data.descriptions do
+ local bb=description.boundingbox
+ if bb then
+ local ht,dp=bb[4],-bb[2]
+ if ht==0 or ht<0 then
+ else
+ description.height=ht
+ end
+ if dp==0 or dp<0 then
+ else
+ description.depth=dp
+ end
+ end
+ end
+ end
+end
+local function copytotfm(data)
+ if data and data.descriptions then
+ local metadata=data.metadata
+ local resources=data.resources
+ local properties=derivetable(data.properties)
+ local descriptions=derivetable(data.descriptions)
+ local goodies=derivetable(data.goodies)
+ local characters={}
+ local parameters={}
+ local unicodes=resources.unicodes
+ for unicode,description in next,data.descriptions do
+ characters[unicode]={}
+ end
+ local filename=constructors.checkedfilename(resources)
+ local fontname=metadata.fontname or metadata.fullname
+ local fullname=metadata.fullname or metadata.fontname
+ local endash=0x0020
+ local emdash=0x2014
+ local spacer="space"
+ local spaceunits=500
+ local monospaced=metadata.monospaced
+ local charwidth=metadata.charwidth
+ local italicangle=metadata.italicangle
+ local charxheight=metadata.xheight and metadata.xheight>0 and metadata.xheight
+ properties.monospaced=monospaced
+ parameters.italicangle=italicangle
+ parameters.charwidth=charwidth
+ parameters.charxheight=charxheight
+ if properties.monospaced then
+ if descriptions[endash] then
+ spaceunits,spacer=descriptions[endash].width,"space"
+ end
+ if not spaceunits and descriptions[emdash] then
+ spaceunits,spacer=descriptions[emdash].width,"emdash"
+ end
+ if not spaceunits and charwidth then
+ spaceunits,spacer=charwidth,"charwidth"
+ end
+ else
+ if descriptions[endash] then
+ spaceunits,spacer=descriptions[endash].width,"space"
+ end
+ if not spaceunits and charwidth then
+ spaceunits,spacer=charwidth,"charwidth"
+ end
+ end
+ spaceunits=tonumber(spaceunits)
+ if spaceunits<200 then
+ end
+ parameters.slant=0
+ parameters.space=spaceunits
+ parameters.space_stretch=500
+ parameters.space_shrink=333
+ parameters.x_height=400
+ parameters.quad=1000
+ if italicangle and italicangle~=0 then
+ parameters.italicangle=italicangle
+ parameters.italicfactor=math.cos(math.rad(90+italicangle))
+ parameters.slant=- math.tan(italicangle*math.pi/180)
+ end
+ if monospaced then
+ parameters.space_stretch=0
+ parameters.space_shrink=0
+ elseif afm.syncspace then
+ parameters.space_stretch=spaceunits/2
+ parameters.space_shrink=spaceunits/3
+ end
+ parameters.extra_space=parameters.space_shrink
+ if charxheight then
+ parameters.x_height=charxheight
+ else
+ local x=0x0078
+ if x then
+ local x=descriptions[x]
+ if x then
+ parameters.x_height=x.height
+ end
+ end
+ end
+ if metadata.sup then
+ local dummy={ 0,0,0 }
+ parameters[ 1]=metadata.designsize or 0
+ parameters[ 2]=metadata.checksum or 0
+ parameters[ 3],
+ parameters[ 4],
+ parameters[ 5]=unpack(metadata.space or dummy)
+ parameters[ 6]=metadata.quad or 0
+ parameters[ 7]=metadata.extraspace or 0
+ parameters[ 8],
+ parameters[ 9],
+ parameters[10]=unpack(metadata.num or dummy)
+ parameters[11],
+ parameters[12]=unpack(metadata.denom or dummy)
+ parameters[13],
+ parameters[14],
+ parameters[15]=unpack(metadata.sup or dummy)
+ parameters[16],
+ parameters[17]=unpack(metadata.sub or dummy)
+ parameters[18]=metadata.supdrop or 0
+ parameters[19]=metadata.subdrop or 0
+ parameters[20],
+ parameters[21]=unpack(metadata.delim or dummy)
+ parameters[22]=metadata.axisheight or 0
+ end
+ parameters.designsize=(metadata.designsize or 10)*65536
+ parameters.ascender=abs(metadata.ascender or 0)
+ parameters.descender=abs(metadata.descender or 0)
+ parameters.units=1000
+ properties.spacer=spacer
+ properties.encodingbytes=2
+ properties.format=fonts.formats[filename] or "type1"
+ properties.filename=filename
+ properties.fontname=fontname
+ properties.fullname=fullname
+ properties.psname=fullname
+ properties.name=filename or fullname or fontname
+ properties.private=properties.private or data.private or privateoffset
+ if next(characters) then
+ return {
+ characters=characters,
+ descriptions=descriptions,
+ parameters=parameters,
+ resources=resources,
+ properties=properties,
+ goodies=goodies,
+ }
+ end
+ end
+ return nil
+end
+function afm.setfeatures(tfmdata,features)
+ local okay=constructors.initializefeatures("afm",tfmdata,features,trace_features,report_afm)
+ if okay then
+ return constructors.collectprocessors("afm",tfmdata,features,trace_features,report_afm)
+ else
+ return {}
+ end
+end
+local function addtables(data)
+ local resources=data.resources
+ local lookuptags=resources.lookuptags
+ local unicodes=resources.unicodes
+ if not lookuptags then
+ lookuptags={}
+ resources.lookuptags=lookuptags
+ end
+ setmetatableindex(lookuptags,function(t,k)
+ local v=type(k)=="number" and ("lookup "..k) or k
+ t[k]=v
+ return v
+ end)
+ if not unicodes then
+ unicodes={}
+ resources.unicodes=unicodes
+ setmetatableindex(unicodes,function(t,k)
+ setmetatableindex(unicodes,nil)
+ for u,d in next,data.descriptions do
+ local n=d.name
+ if n then
+ t[n]=u
+ end
+ end
+ return rawget(t,k)
+ end)
+ end
+ constructors.addcoreunicodes(unicodes)
+end
+local function afmtotfm(specification)
+ local afmname=specification.filename or specification.name
+ if specification.forced=="afm" or specification.format=="afm" then
+ if trace_loading then
+ report_afm("forcing afm format for %a",afmname)
+ end
+ else
+ local tfmname=findbinfile(afmname,"ofm") or ""
+ if tfmname~="" then
+ if trace_loading then
+ report_afm("fallback from afm to tfm for %a",afmname)
+ end
+ return
+ end
+ end
+ if afmname~="" then
+ local features=constructors.checkedfeatures("afm",specification.features.normal)
+ specification.features.normal=features
+ constructors.hashinstance(specification,true)
+ specification=definers.resolve(specification)
+ local cache_id=specification.hash
+ local tfmdata=containers.read(constructors.cache,cache_id)
+ if not tfmdata then
+ local rawdata=afm.load(afmname)
+ if rawdata and next(rawdata) then
+ addtables(rawdata)
+ adddimensions(rawdata)
+ tfmdata=copytotfm(rawdata)
+ if tfmdata and next(tfmdata) then
+ local shared=tfmdata.shared
+ if not shared then
+ shared={}
+ tfmdata.shared=shared
+ end
+ shared.rawdata=rawdata
+ shared.dynamics={}
+ tfmdata.changed={}
+ shared.features=features
+ shared.processes=afm.setfeatures(tfmdata,features)
+ end
+ elseif trace_loading then
+ report_afm("no (valid) afm file found with name %a",afmname)
+ end
+ tfmdata=containers.write(constructors.cache,cache_id,tfmdata)
+ end
+ return tfmdata
+ end
+end
+local function read_from_afm(specification)
+ local tfmdata=afmtotfm(specification)
+ if tfmdata then
+ tfmdata.properties.name=specification.name
+ tfmdata=constructors.scale(tfmdata,specification)
+ local allfeatures=tfmdata.shared.features or specification.features.normal
+ constructors.applymanipulators("afm",tfmdata,allfeatures,trace_features,report_afm)
+ fonts.loggers.register(tfmdata,'afm',specification)
+ end
+ return tfmdata
+end
+registerafmfeature {
+ name="mode",
+ description="mode",
+ initializers={
+ base=otf.modeinitializer,
+ node=otf.modeinitializer,
+ }
+}
+registerafmfeature {
+ name="features",
+ description="features",
+ default=true,
+ initializers={
+ node=otf.nodemodeinitializer,
+ base=otf.basemodeinitializer,
+ },
+ processors={
+ node=otf.featuresprocessor,
+ }
+}
+fonts.formats.afm="type1"
+fonts.formats.pfb="type1"
+local function check_afm(specification,fullname)
+ local foundname=findbinfile(fullname,'afm') or ""
+ if foundname=="" then
+ foundname=fonts.names.getfilename(fullname,"afm") or ""
+ end
+ if foundname=="" and afm.autoprefixed then
+ local encoding,shortname=match(fullname,"^(.-)%-(.*)$")
+ if encoding and shortname and fonts.encodings.known[encoding] then
+ shortname=findbinfile(shortname,'afm') or ""
+ if shortname~="" then
+ foundname=shortname
+ if trace_defining then
+ report_afm("stripping encoding prefix from filename %a",afmname)
+ end
+ end
+ end
+ end
+ if foundname~="" then
+ specification.filename=foundname
+ specification.format="afm"
+ return read_from_afm(specification)
+ end
+end
+function readers.afm(specification,method)
+ local fullname=specification.filename or ""
+ local tfmdata=nil
+ if fullname=="" then
+ local forced=specification.forced or ""
+ if forced~="" then
+ tfmdata=check_afm(specification,specification.name.."."..forced)
+ end
+ if not tfmdata then
+ local check_tfm=readers.check_tfm
+ method=(check_tfm and (method or definers.method or "afm or tfm")) or "afm"
+ if method=="tfm" then
+ tfmdata=check_tfm(specification,specification.name)
+ elseif method=="afm" then
+ tfmdata=check_afm(specification,specification.name)
+ elseif method=="tfm or afm" then
+ tfmdata=check_tfm(specification,specification.name) or check_afm(specification,specification.name)
+ else
+ tfmdata=check_afm(specification,specification.name) or check_tfm(specification,specification.name)
+ end
+ end
+ else
+ tfmdata=check_afm(specification,fullname)
+ end
+ return tfmdata
+end
+function readers.pfb(specification,method)
+ local original=specification.specification
+ if trace_defining then
+ report_afm("using afm reader for %a",original)
+ end
+ specification.forced="afm"
+ local function swap(name)
+ local value=specification[swap]
+ if value then
+ specification[swap]=gsub("%.pfb",".afm",1)
+ end
+ end
+ swap("filename")
+ swap("fullname")
+ swap("forcedname")
+ swap("specification")
+ return readers.afm(specification,method)
+end
+registerafmenhancer("unify names",enhance_unify_names)
+registerafmenhancer("add ligatures",enhance_add_ligatures)
+registerafmenhancer("add extra kerns",enhance_add_extra_kerns)
+registerafmenhancer("normalize features",enhance_normalize_features)
+registerafmenhancer("check extra features",otfenhancers.enhance)
+registerafmenhancer("fix names",enhance_fix_names)
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-afk']={
+ version=1.001,
+ comment="companion to font-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files",
+ dataonly=true,
+}
+local allocate=utilities.storage.allocate
+fonts.handlers.afm.helpdata={
+ ligatures=allocate {
+ ['f']={
+ { 'f','ff' },
+ { 'i','fi' },
+ { 'l','fl' },
+ },
+ ['ff']={
+ { 'i','ffi' }
+ },
+ ['fi']={
+ { 'i','fii' }
+ },
+ ['fl']={
+ { 'i','fli' }
+ },
+ ['s']={
+ { 't','st' }
+ },
+ ['i']={
+ { 'j','ij' }
+ },
+ },
+ texligatures=allocate {
+ ['quoteleft']={
+ { 'quoteleft','quotedblleft' }
+ },
+ ['quoteright']={
+ { 'quoteright','quotedblright' }
+ },
+ ['hyphen']={
+ { 'hyphen','endash' }
+ },
+ ['endash']={
+ { 'hyphen','emdash' }
+ }
+ },
+ leftkerned=allocate {
+ AEligature="A",aeligature="a",
+ OEligature="O",oeligature="o",
+ IJligature="I",ijligature="i",
+ AE="A",ae="a",
+ OE="O",oe="o",
+ IJ="I",ij="i",
+ Ssharp="S",ssharp="s",
+ },
+ rightkerned=allocate {
+ AEligature="E",aeligature="e",
+ OEligature="E",oeligature="e",
+ IJligature="J",ijligature="j",
+ AE="E",ae="e",
+ OE="E",oe="e",
+ IJ="J",ij="j",
+ Ssharp="S",ssharp="s",
+ },
+ bothkerned=allocate {
+ Acircumflex="A",acircumflex="a",
+ Ccircumflex="C",ccircumflex="c",
+ Ecircumflex="E",ecircumflex="e",
+ Gcircumflex="G",gcircumflex="g",
+ Hcircumflex="H",hcircumflex="h",
+ Icircumflex="I",icircumflex="i",
+ Jcircumflex="J",jcircumflex="j",
+ Ocircumflex="O",ocircumflex="o",
+ Scircumflex="S",scircumflex="s",
+ Ucircumflex="U",ucircumflex="u",
+ Wcircumflex="W",wcircumflex="w",
+ Ycircumflex="Y",ycircumflex="y",
+ Agrave="A",agrave="a",
+ Egrave="E",egrave="e",
+ Igrave="I",igrave="i",
+ Ograve="O",ograve="o",
+ Ugrave="U",ugrave="u",
+ Ygrave="Y",ygrave="y",
+ Atilde="A",atilde="a",
+ Itilde="I",itilde="i",
+ Otilde="O",otilde="o",
+ Utilde="U",utilde="u",
+ Ntilde="N",ntilde="n",
+ Adiaeresis="A",adiaeresis="a",Adieresis="A",adieresis="a",
+ Ediaeresis="E",ediaeresis="e",Edieresis="E",edieresis="e",
+ Idiaeresis="I",idiaeresis="i",Idieresis="I",idieresis="i",
+ Odiaeresis="O",odiaeresis="o",Odieresis="O",odieresis="o",
+ Udiaeresis="U",udiaeresis="u",Udieresis="U",udieresis="u",
+ Ydiaeresis="Y",ydiaeresis="y",Ydieresis="Y",ydieresis="y",
+ Aacute="A",aacute="a",
+ Cacute="C",cacute="c",
+ Eacute="E",eacute="e",
+ Iacute="I",iacute="i",
+ Lacute="L",lacute="l",
+ Nacute="N",nacute="n",
+ Oacute="O",oacute="o",
+ Racute="R",racute="r",
+ Sacute="S",sacute="s",
+ Uacute="U",uacute="u",
+ Yacute="Y",yacute="y",
+ Zacute="Z",zacute="z",
+ Dstroke="D",dstroke="d",
+ Hstroke="H",hstroke="h",
+ Tstroke="T",tstroke="t",
+ Cdotaccent="C",cdotaccent="c",
+ Edotaccent="E",edotaccent="e",
+ Gdotaccent="G",gdotaccent="g",
+ Idotaccent="I",idotaccent="i",
+ Zdotaccent="Z",zdotaccent="z",
+ Amacron="A",amacron="a",
+ Emacron="E",emacron="e",
+ Imacron="I",imacron="i",
+ Omacron="O",omacron="o",
+ Umacron="U",umacron="u",
+ Ccedilla="C",ccedilla="c",
+ Kcedilla="K",kcedilla="k",
+ Lcedilla="L",lcedilla="l",
+ Ncedilla="N",ncedilla="n",
+ Rcedilla="R",rcedilla="r",
+ Scedilla="S",scedilla="s",
+ Tcedilla="T",tcedilla="t",
+ Ohungarumlaut="O",ohungarumlaut="o",
+ Uhungarumlaut="U",uhungarumlaut="u",
+ Aogonek="A",aogonek="a",
+ Eogonek="E",eogonek="e",
+ Iogonek="I",iogonek="i",
+ Uogonek="U",uogonek="u",
+ Aring="A",aring="a",
+ Uring="U",uring="u",
+ Abreve="A",abreve="a",
+ Ebreve="E",ebreve="e",
+ Gbreve="G",gbreve="g",
+ Ibreve="I",ibreve="i",
+ Obreve="O",obreve="o",
+ Ubreve="U",ubreve="u",
+ Ccaron="C",ccaron="c",
+ Dcaron="D",dcaron="d",
+ Ecaron="E",ecaron="e",
+ Lcaron="L",lcaron="l",
+ Ncaron="N",ncaron="n",
+ Rcaron="R",rcaron="r",
+ Scaron="S",scaron="s",
+ Tcaron="T",tcaron="t",
+ Zcaron="Z",zcaron="z",
+ dotlessI="I",dotlessi="i",
+ dotlessJ="J",dotlessj="j",
+ AEligature="AE",aeligature="ae",AE="AE",ae="ae",
+ OEligature="OE",oeligature="oe",OE="OE",oe="oe",
+ IJligature="IJ",ijligature="ij",IJ="IJ",ij="ij",
+ Lstroke="L",lstroke="l",Lslash="L",lslash="l",
+ Ostroke="O",ostroke="o",Oslash="O",oslash="o",
+ Ssharp="SS",ssharp="ss",
+ Aumlaut="A",aumlaut="a",
+ Eumlaut="E",eumlaut="e",
+ Iumlaut="I",iumlaut="i",
+ Oumlaut="O",oumlaut="o",
+ Uumlaut="U",uumlaut="u",
+ }
+}
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-tfm']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local next,type=next,type
+local match,format=string.match,string.format
+local concat,sortedhash=table.concat,table.sortedhash
+local trace_defining=false trackers.register("fonts.defining",function(v) trace_defining=v end)
+local trace_features=false trackers.register("tfm.features",function(v) trace_features=v end)
+local report_defining=logs.reporter("fonts","defining")
+local report_tfm=logs.reporter("fonts","tfm loading")
+local findbinfile=resolvers.findbinfile
+local setmetatableindex=table.setmetatableindex
+local fonts=fonts
+local handlers=fonts.handlers
+local readers=fonts.readers
+local constructors=fonts.constructors
+local encodings=fonts.encodings
+local tfm=constructors.handlers.tfm
+tfm.version=1.000
+tfm.maxnestingdepth=5
+tfm.maxnestingsize=65536*1024
+local otf=fonts.handlers.otf
+local otfenhancers=otf.enhancers
+local tfmfeatures=constructors.features.tfm
+local registertfmfeature=tfmfeatures.register
+local tfmenhancers=constructors.enhancers.tfm
+local registertfmenhancer=tfmenhancers.register
+constructors.resolvevirtualtoo=false
+fonts.formats.tfm="type1"
+fonts.formats.ofm="type1"
+function tfm.setfeatures(tfmdata,features)
+ local okay=constructors.initializefeatures("tfm",tfmdata,features,trace_features,report_tfm)
+ if okay then
+ return constructors.collectprocessors("tfm",tfmdata,features,trace_features,report_tfm)
+ else
+ return {}
+ end
+end
+local depth={}
+local function read_from_tfm(specification)
+ local filename=specification.filename
+ local size=specification.size
+ depth[filename]=(depth[filename] or 0)+1
+ if trace_defining then
+ report_defining("loading tfm file %a at size %s",filename,size)
+ end
+ local tfmdata=font.read_tfm(filename,size)
+ if tfmdata then
+ local features=specification.features and specification.features.normal or {}
+ local features=constructors.checkedfeatures("tfm",features)
+ specification.features.normal=features
+ local newtfmdata=(depth[filename]==1) and tfm.reencode(tfmdata,specification)
+ if newtfmdata then
+ tfmdata=newtfmdata
+ end
+ local resources=tfmdata.resources or {}
+ local properties=tfmdata.properties or {}
+ local parameters=tfmdata.parameters or {}
+ local shared=tfmdata.shared or {}
+ shared.features=features
+ shared.resources=resources
+ properties.name=tfmdata.name
+ properties.fontname=tfmdata.fontname
+ properties.psname=tfmdata.psname
+ properties.fullname=tfmdata.fullname
+ properties.filename=specification.filename
+ properties.format=fonts.formats.tfm
+ tfmdata.properties=properties
+ tfmdata.resources=resources
+ tfmdata.parameters=parameters
+ tfmdata.shared=shared
+ shared.rawdata={ resources=resources }
+ shared.features=features
+ if newtfmdata then
+ if not resources.marks then
+ resources.marks={}
+ end
+ if not resources.sequences then
+ resources.sequences={}
+ end
+ if not resources.features then
+ resources.features={
+ gsub={},
+ gpos={},
+ }
+ end
+ if not tfmdata.changed then
+ tfmdata.changed={}
+ end
+ if not tfmdata.descriptions then
+ tfmdata.descriptions=tfmdata.characters
+ end
+ otf.readers.addunicodetable(tfmdata)
+ tfmenhancers.apply(tfmdata,filename)
+ constructors.applymanipulators("tfm",tfmdata,features,trace_features,report_tfm)
+ otf.readers.unifymissing(tfmdata)
+ fonts.mappings.addtounicode(tfmdata,filename)
+ tfmdata.tounicode=1
+ local tounicode=fonts.mappings.tounicode
+ for unicode,v in next,tfmdata.characters do
+ local u=v.unicode
+ if u then
+ v.tounicode=tounicode(u)
+ end
+ end
+ if tfmdata.usedbitmap then
+ tfm.addtounicode(tfmdata)
+ end
+ end
+ shared.processes=next(features) and tfm.setfeatures(tfmdata,features) or nil
+ parameters.factor=1
+ parameters.size=size
+ parameters.slant=parameters.slant or parameters[1] or 0
+ parameters.space=parameters.space or parameters[2] or 0
+ parameters.space_stretch=parameters.space_stretch or parameters[3] or 0
+ parameters.space_shrink=parameters.space_shrink or parameters[4] or 0
+ parameters.x_height=parameters.x_height or parameters[5] or 0
+ parameters.quad=parameters.quad or parameters[6] or 0
+ parameters.extra_space=parameters.extra_space or parameters[7] or 0
+ constructors.enhanceparameters(parameters)
+ properties.private=properties.private or tfmdata.private or privateoffset
+ if newtfmdata then
+ elseif constructors.resolvevirtualtoo then
+ fonts.loggers.register(tfmdata,file.suffix(filename),specification)
+ local vfname=findbinfile(specification.name,'ovf')
+ if vfname and vfname~="" then
+ local vfdata=font.read_vf(vfname,size)
+ if vfdata then
+ local chars=tfmdata.characters
+ for k,v in next,vfdata.characters do
+ chars[k].commands=v.commands
+ end
+ properties.virtualized=true
+ tfmdata.fonts=vfdata.fonts
+ tfmdata.type="virtual"
+ local fontlist=vfdata.fonts
+ local name=file.nameonly(filename)
+ for i=1,#fontlist do
+ local n=fontlist[i].name
+ local s=fontlist[i].size
+ local d=depth[filename]
+ s=constructors.scaled(s,vfdata.designsize)
+ if d>tfm.maxnestingdepth then
+ report_defining("too deeply nested virtual font %a with size %a, max nesting depth %s",n,s,tfm.maxnestingdepth)
+ fontlist[i]={ id=0 }
+ elseif (d>1) and (s>tfm.maxnestingsize) then
+ report_defining("virtual font %a exceeds size %s",n,s)
+ fontlist[i]={ id=0 }
+ else
+ local t,id=fonts.constructors.readanddefine(n,s)
+ fontlist[i]={ id=id }
+ end
+ end
+ end
+ end
+ end
+ properties.haskerns=true
+ properties.hasligatures=true
+ resources.unicodes={}
+ resources.lookuptags={}
+ depth[filename]=depth[filename]-1
+ return tfmdata
+ else
+ depth[filename]=depth[filename]-1
+ end
+end
+local function check_tfm(specification,fullname)
+ local foundname=findbinfile(fullname,'tfm') or ""
+ if foundname=="" then
+ foundname=findbinfile(fullname,'ofm') or ""
+ end
+ if foundname=="" then
+ foundname=fonts.names.getfilename(fullname,"tfm") or ""
+ end
+ if foundname~="" then
+ specification.filename=foundname
+ specification.format="ofm"
+ return read_from_tfm(specification)
+ elseif trace_defining then
+ report_defining("loading tfm with name %a fails",specification.name)
+ end
+end
+readers.check_tfm=check_tfm
+function readers.tfm(specification)
+ local fullname=specification.filename or ""
+ if fullname=="" then
+ local forced=specification.forced or ""
+ if forced~="" then
+ fullname=specification.name.."."..forced
+ else
+ fullname=specification.name
+ end
+ end
+ return check_tfm(specification,fullname)
+end
+readers.ofm=readers.tfm
+do
+ local outfiles={}
+ local tfmcache=table.setmetatableindex(function(t,tfmdata)
+ local id=font.define(tfmdata)
+ t[tfmdata]=id
+ return id
+ end)
+ local encdone=table.setmetatableindex("table")
+ function tfm.reencode(tfmdata,specification)
+ local features=specification.features
+ if not features then
+ return
+ end
+ local features=features.normal
+ if not features then
+ return
+ end
+ local tfmfile=file.basename(tfmdata.name)
+ local encfile=features.reencode
+ local pfbfile=features.pfbfile
+ local bitmap=features.bitmap
+ if not encfile then
+ return
+ end
+ local pfbfile=outfiles[tfmfile]
+ if pfbfile==nil then
+ if bitmap then
+ pfbfile=false
+ elseif type(pfbfile)~="string" then
+ pfbfile=tfmfile
+ end
+ if type(pfbfile)=="string" then
+ pfbfile=file.addsuffix(pfbfile,"pfb")
+ report_tfm("using type1 shapes from %a for %a",pfbfile,tfmfile)
+ else
+ report_tfm("using bitmap shapes for %a",tfmfile)
+ pfbfile=false
+ end
+ outfiles[tfmfile]=pfbfile
+ end
+ local encoding=false
+ local vector=false
+ if type(pfbfile)=="string" then
+ local pfb=fonts.constructors.handlers.pfb
+ if pfb and pfb.loadvector then
+ local v,e=pfb.loadvector(pfbfile)
+ if v then
+ vector=v
+ end
+ if e then
+ encoding=e
+ end
+ end
+ end
+ if type(encfile)=="string" and encfile~="auto" then
+ encoding=fonts.encodings.load(file.addsuffix(encfile,"enc"))
+ if encoding then
+ encoding=encoding.vector
+ end
+ end
+ if not encoding then
+ report_tfm("bad encoding for %a, quitting",tfmfile)
+ return
+ end
+ local unicoding=fonts.encodings.agl and fonts.encodings.agl.unicodes
+ local virtualid=tfmcache[tfmdata]
+ local tfmdata=table.copy(tfmdata)
+ local characters={}
+ local originals=tfmdata.characters
+ local indices={}
+ local parentfont={ "font",1 }
+ local private=tfmdata or fonts.constructors.privateoffset
+ local reported=encdone[tfmfile][encfile]
+ local backmap=vector and table.swapped(vector)
+ local done={}
+ for index,name in sortedhash(encoding) do
+ local unicode=unicoding[name]
+ local original=originals[index]
+ if original then
+ if unicode then
+ original.unicode=unicode
+ else
+ unicode=private
+ private=private+1
+ if not reported then
+ report_tfm("glyph %a in font %a with encoding %a gets unicode %U",name,tfmfile,encfile,unicode)
+ end
+ end
+ characters[unicode]=original
+ indices[index]=unicode
+ original.name=name
+ if backmap then
+ original.index=backmap[name]
+ else
+ original.commands={ parentfont,{ "char",index } }
+ original.oindex=index
+ end
+ done[name]=true
+ elseif not done[name] then
+ report_tfm("bad index %a in font %a with name %a",index,tfmfile,name)
+ end
+ end
+ encdone[tfmfile][encfile]=true
+ for k,v in next,characters do
+ local kerns=v.kerns
+ if kerns then
+ local t={}
+ for k,v in next,kerns do
+ local i=indices[k]
+ if i then
+ t[i]=v
+ end
+ end
+ v.kerns=next(t) and t or nil
+ end
+ local ligatures=v.ligatures
+ if ligatures then
+ local t={}
+ for k,v in next,ligatures do
+ local i=indices[k]
+ if i then
+ t[i]=v
+ v.char=indices[v.char]
+ end
+ end
+ v.ligatures=next(t) and t or nil
+ end
+ end
+ tfmdata.fonts={ { id=virtualid } }
+ tfmdata.characters=characters
+ tfmdata.fullname=tfmdata.fullname or tfmdata.name
+ tfmdata.psname=file.nameonly(pfbfile or tfmdata.name)
+ tfmdata.filename=pfbfile
+ tfmdata.encodingbytes=2
+ tfmdata.format="type1"
+ tfmdata.tounicode=1
+ tfmdata.embedding="subset"
+ tfmdata.usedbitmap=bitmap and virtualid
+ tfmdata.private=private
+ return tfmdata
+ end
+end
+do
+ local template=[[
+/CIDInit /ProcSet findresource begin
+ 12 dict begin
+ begincmap
+ /CIDSystemInfo << /Registry (TeX) /Ordering (bitmap-%s) /Supplement 0 >> def
+ /CMapName /TeX-bitmap-%s def
+ /CMapType 2 def
+ 1 begincodespacerange
+ <00> <FF>
+ endcodespacerange
+ %s beginbfchar
+%s
+ endbfchar
+ endcmap
+CMapName currentdict /CMap defineresource pop end
+end
+end
+]]
+ local flushstreamobject=lpdf and lpdf.flushstreamobject
+ local setfontattributes=pdf.setfontattributes
+ if not flushstreamobject then
+ flushstreamobject=function(data)
+ return pdf.obj {
+ immediate=true,
+ type="stream",
+ string=data,
+ }
+ end
+ end
+ if not setfontattributes then
+ setfontattributes=function(id,data)
+ print(format("your luatex is too old so no tounicode bitmap font%i",id))
+ end
+ end
+ function tfm.addtounicode(tfmdata)
+ local id=tfmdata.usedbitmap
+ local map={}
+ local char={}
+ for k,v in next,tfmdata.characters do
+ local index=v.oindex
+ local tounicode=v.tounicode
+ if index and tounicode then
+ map[index]=tounicode
+ end
+ end
+ for k,v in sortedhash(map) do
+ char[#char+1]=format("<%02X> <%s>",k,v)
+ end
+ char=concat(char,"\n")
+ local stream=format(template,id,id,#char,char)
+ local reference=flushstreamobject(stream,nil,true)
+ setfontattributes(id,format("/ToUnicode %i 0 R",reference))
+ end
+end
+do
+ local everywhere={ ["*"]={ ["*"]=true } }
+ local noflags={ false,false,false,false }
+ local function enhance_normalize_features(data)
+ local ligatures=setmetatableindex("table")
+ local kerns=setmetatableindex("table")
+ local characters=data.characters
+ for u,c in next,characters do
+ local l=c.ligatures
+ local k=c.kerns
+ if l then
+ ligatures[u]=l
+ for u,v in next,l do
+ l[u]={ ligature=v.char }
+ end
+ c.ligatures=nil
+ end
+ if k then
+ kerns[u]=k
+ for u,v in next,k do
+ k[u]=v
+ end
+ c.kerns=nil
+ end
+ end
+ for u,l in next,ligatures do
+ for k,v in next,l do
+ local vl=v.ligature
+ local dl=ligatures[vl]
+ if dl then
+ for kk,vv in next,dl do
+ v[kk]=vv
+ end
+ end
+ end
+ end
+ local features={
+ gpos={},
+ gsub={},
+ }
+ local sequences={
+ }
+ if next(ligatures) then
+ features.gsub.liga=everywhere
+ data.properties.hasligatures=true
+ sequences[#sequences+1]={
+ features={
+ liga=everywhere,
+ },
+ flags=noflags,
+ name="s_s_0",
+ nofsteps=1,
+ order={ "liga" },
+ type="gsub_ligature",
+ steps={
+ {
+ coverage=ligatures,
+ },
+ },
+ }
+ end
+ if next(kerns) then
+ features.gpos.kern=everywhere
+ data.properties.haskerns=true
+ sequences[#sequences+1]={
+ features={
+ kern=everywhere,
+ },
+ flags=noflags,
+ name="p_s_0",
+ nofsteps=1,
+ order={ "kern" },
+ type="gpos_pair",
+ steps={
+ {
+ format="kern",
+ coverage=kerns,
+ },
+ },
+ }
+ end
+ data.resources.features=features
+ data.resources.sequences=sequences
+ data.shared.resources=data.shared.resources or resources
+ end
+ registertfmenhancer("normalize features",enhance_normalize_features)
+ registertfmenhancer("check extra features",otfenhancers.enhance)
+end
+registertfmfeature {
+ name="mode",
+ description="mode",
+ initializers={
+ base=otf.modeinitializer,
+ node=otf.modeinitializer,
+ }
+}
+registertfmfeature {
+ name="features",
+ description="features",
+ default=true,
+ initializers={
+ base=otf.basemodeinitializer,
+ node=otf.nodemodeinitializer,
+ },
+ processors={
+ node=otf.featuresprocessor,
+ }
+}
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-lua']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local trace_defining=false trackers.register("fonts.defining",function(v) trace_defining=v end)
+local report_lua=logs.reporter("fonts","lua loading")
+local fonts=fonts
+local readers=fonts.readers
+fonts.formats.lua="lua"
+local function check_lua(specification,fullname)
+ local fullname=resolvers.findfile(fullname) or ""
+ if fullname~="" then
+ local loader=loadfile(fullname)
+ loader=loader and loader()
+ return loader and loader(specification)
+ end
+end
+readers.check_lua=check_lua
+function readers.lua(specification)
+ local original=specification.specification
+ if trace_defining then
+ report_lua("using lua reader for %a",original)
+ end
+ local fullname=specification.filename or ""
+ if fullname=="" then
+ local forced=specification.forced or ""
+ if forced~="" then
+ fullname=specification.name.."."..forced
+ else
+ fullname=specification.name
+ end
+ end
+ return check_lua(specification,fullname)
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-def']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local lower,gsub=string.lower,string.gsub
+local tostring,next=tostring,next
+local lpegmatch=lpeg.match
+local suffixonly,removesuffix,basename=file.suffix,file.removesuffix,file.basename
+local formatters=string.formatters
+local sortedhash,sortedkeys=table.sortedhash,table.sortedkeys
+local allocate=utilities.storage.allocate
+local trace_defining=false trackers .register("fonts.defining",function(v) trace_defining=v end)
+local directive_embedall=false directives.register("fonts.embedall",function(v) directive_embedall=v end)
+trackers.register("fonts.loading","fonts.defining","otf.loading","afm.loading","tfm.loading")
+local report_defining=logs.reporter("fonts","defining")
+local fonts=fonts
+local fontdata=fonts.hashes.identifiers
+local readers=fonts.readers
+local definers=fonts.definers
+local specifiers=fonts.specifiers
+local constructors=fonts.constructors
+local fontgoodies=fonts.goodies
+readers.sequence=allocate { 'otf','ttf','afm','tfm','lua' }
+local variants=allocate()
+specifiers.variants=variants
+definers.methods=definers.methods or {}
+local internalized=allocate()
+local lastdefined=nil
+local loadedfonts=constructors.loadedfonts
+local designsizes=constructors.designsizes
+local resolvefile=fontgoodies and fontgoodies.filenames and fontgoodies.filenames.resolve or function(s) return s end
+local splitter,splitspecifiers=nil,""
+local P,C,S,Cc=lpeg.P,lpeg.C,lpeg.S,lpeg.Cc
+local left=P("(")
+local right=P(")")
+local colon=P(":")
+local space=P(" ")
+definers.defaultlookup="file"
+local prefixpattern=P(false)
+local function addspecifier(symbol)
+ splitspecifiers=splitspecifiers..symbol
+ local method=S(splitspecifiers)
+ local lookup=C(prefixpattern)*colon
+ local sub=left*C(P(1-left-right-method)^1)*right
+ local specification=C(method)*C(P(1)^1)
+ local name=C((1-sub-specification)^1)
+ splitter=P((lookup+Cc(""))*name*(sub+Cc(""))*(specification+Cc("")))
+end
+local function addlookup(str,default)
+ prefixpattern=prefixpattern+P(str)
+end
+definers.addlookup=addlookup
+addlookup("file")
+addlookup("name")
+addlookup("spec")
+local function getspecification(str)
+ return lpegmatch(splitter,str or "")
+end
+definers.getspecification=getspecification
+function definers.registersplit(symbol,action,verbosename)
+ addspecifier(symbol)
+ variants[symbol]=action
+ if verbosename then
+ variants[verbosename]=action
+ end
+end
+local function makespecification(specification,lookup,name,sub,method,detail,size)
+ size=size or 655360
+ if not lookup or lookup=="" then
+ lookup=definers.defaultlookup
+ end
+ if trace_defining then
+ report_defining("specification %a, lookup %a, name %a, sub %a, method %a, detail %a",
+ specification,lookup,name,sub,method,detail)
+ end
+ local t={
+ lookup=lookup,
+ specification=specification,
+ size=size,
+ name=name,
+ sub=sub,
+ method=method,
+ detail=detail,
+ resolved="",
+ forced="",
+ features={},
+ }
+ return t
+end
+definers.makespecification=makespecification
+function definers.analyze(specification,size)
+ local lookup,name,sub,method,detail=getspecification(specification or "")
+ return makespecification(specification,lookup,name,sub,method,detail,size)
+end
+definers.resolvers=definers.resolvers or {}
+local resolvers=definers.resolvers
+function resolvers.file(specification)
+ local name=resolvefile(specification.name)
+ local suffix=lower(suffixonly(name))
+ if fonts.formats[suffix] then
+ specification.forced=suffix
+ specification.forcedname=name
+ specification.name=removesuffix(name)
+ else
+ specification.name=name
+ end
+end
+function resolvers.name(specification)
+ local resolve=fonts.names.resolve
+ if resolve then
+ local resolved,sub,subindex,instance=resolve(specification.name,specification.sub,specification)
+ if resolved then
+ specification.resolved=resolved
+ specification.sub=sub
+ specification.subindex=subindex
+ if instance then
+ specification.instance=instance
+ local features=specification.features
+ if not features then
+ features={}
+ specification.features=features
+ end
+ local normal=features.normal
+ if not normal then
+ normal={}
+ features.normal=normal
+ end
+ normal.instance=instance
+ if not callbacks.supported.glyph_stream_provider then
+ normal.variableshapes=true
+ end
+ end
+ local suffix=lower(suffixonly(resolved))
+ if fonts.formats[suffix] then
+ specification.forced=suffix
+ specification.forcedname=resolved
+ specification.name=removesuffix(resolved)
+ else
+ specification.name=resolved
+ end
+ end
+ else
+ resolvers.file(specification)
+ end
+end
+function resolvers.spec(specification)
+ local resolvespec=fonts.names.resolvespec
+ if resolvespec then
+ local resolved,sub,subindex=resolvespec(specification.name,specification.sub,specification)
+ if resolved then
+ specification.resolved=resolved
+ specification.sub=sub
+ specification.subindex=subindex
+ specification.forced=lower(suffixonly(resolved))
+ specification.forcedname=resolved
+ specification.name=removesuffix(resolved)
+ end
+ else
+ resolvers.name(specification)
+ end
+end
+function definers.resolve(specification)
+ if not specification.resolved or specification.resolved=="" then
+ local r=resolvers[specification.lookup]
+ if r then
+ r(specification)
+ end
+ end
+ if specification.forced=="" then
+ specification.forced=nil
+ specification.forcedname=nil
+ end
+ specification.hash=lower(specification.name..' @ '..constructors.hashfeatures(specification))
+ if specification.sub and specification.sub~="" then
+ specification.hash=specification.sub..' @ '..specification.hash
+ end
+ return specification
+end
+function definers.applypostprocessors(tfmdata)
+ local postprocessors=tfmdata.postprocessors
+ if postprocessors then
+ local properties=tfmdata.properties
+ for i=1,#postprocessors do
+ local extrahash=postprocessors[i](tfmdata)
+ if type(extrahash)=="string" and extrahash~="" then
+ extrahash=gsub(lower(extrahash),"[^a-z]","-")
+ properties.fullname=formatters["%s-%s"](properties.fullname,extrahash)
+ end
+ end
+ end
+ return tfmdata
+end
+local function checkembedding(tfmdata)
+ local properties=tfmdata.properties
+ local embedding
+ if directive_embedall then
+ embedding="full"
+ elseif properties and properties.filename and constructors.dontembed[properties.filename] then
+ embedding="no"
+ else
+ embedding="subset"
+ end
+ if properties then
+ properties.embedding=embedding
+ else
+ tfmdata.properties={ embedding=embedding }
+ end
+ tfmdata.embedding=embedding
+end
+local function checkfeatures(tfmdata)
+ local resources=tfmdata.resources
+ local shared=tfmdata.shared
+ if resources and shared then
+ local features=resources.features
+ local usedfeatures=shared.features
+ if features and usedfeatures then
+ local usedlanguage=usedfeatures.language or "dflt"
+ local usedscript=usedfeatures.script or "dflt"
+ local function check(what)
+ if what then
+ local foundlanguages={}
+ for feature,scripts in next,what do
+ if usedscript=="auto" or scripts["*"] then
+ elseif not scripts[usedscript] then
+ else
+ for script,languages in next,scripts do
+ if languages["*"] then
+ elseif not languages[usedlanguage] then
+ report_defining("font %!font:name!, feature %a, script %a, no language %a",
+ tfmdata,feature,script,usedlanguage)
+ end
+ end
+ end
+ for script,languages in next,scripts do
+ for language in next,languages do
+ foundlanguages[language]=true
+ end
+ end
+ end
+ if false then
+ foundlanguages["*"]=nil
+ foundlanguages=sortedkeys(foundlanguages)
+ for feature,scripts in sortedhash(what) do
+ for script,languages in next,scripts do
+ if not languages["*"] then
+ for i=1,#foundlanguages do
+ local language=foundlanguages[i]
+ if not languages[language] then
+ report_defining("font %!font:name!, feature %a, script %a, no language %a",
+ tfmdata,feature,script,language)
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ check(features.gsub)
+ check(features.gpos)
+ end
+ end
+end
+function definers.loadfont(specification)
+ local hash=constructors.hashinstance(specification)
+ local tfmdata=loadedfonts[hash]
+ if not tfmdata then
+ local forced=specification.forced or ""
+ if forced~="" then
+ local reader=readers[lower(forced)]
+ tfmdata=reader and reader(specification)
+ if not tfmdata then
+ report_defining("forced type %a of %a not found",forced,specification.name)
+ end
+ else
+ local sequence=readers.sequence
+ for s=1,#sequence do
+ local reader=sequence[s]
+ if readers[reader] then
+ if trace_defining then
+ report_defining("trying (reader sequence driven) type %a for %a with file %a",reader,specification.name,specification.filename)
+ end
+ tfmdata=readers[reader](specification)
+ if tfmdata then
+ break
+ else
+ specification.filename=nil
+ end
+ end
+ end
+ end
+ if tfmdata then
+ tfmdata=definers.applypostprocessors(tfmdata)
+ checkembedding(tfmdata)
+ loadedfonts[hash]=tfmdata
+ designsizes[specification.hash]=tfmdata.parameters.designsize
+ checkfeatures(tfmdata)
+ end
+ end
+ if not tfmdata then
+ report_defining("font with asked name %a is not found using lookup %a",specification.name,specification.lookup)
+ end
+ return tfmdata
+end
+function constructors.readanddefine(name,size)
+ local specification=definers.analyze(name,size)
+ local method=specification.method
+ if method and variants[method] then
+ specification=variants[method](specification)
+ end
+ specification=definers.resolve(specification)
+ local hash=constructors.hashinstance(specification)
+ local id=definers.registered(hash)
+ if not id then
+ local tfmdata=definers.loadfont(specification)
+ if tfmdata then
+ tfmdata.properties.hash=hash
+ id=font.define(tfmdata)
+ definers.register(tfmdata,id)
+ else
+ id=0
+ end
+ end
+ return fontdata[id],id
+end
+function definers.current()
+ return lastdefined
+end
+function definers.registered(hash)
+ local id=internalized[hash]
+ return id,id and fontdata[id]
+end
+function definers.register(tfmdata,id)
+ if tfmdata and id then
+ local hash=tfmdata.properties.hash
+ if not hash then
+ report_defining("registering font, id %a, name %a, invalid hash",id,tfmdata.properties.filename or "?")
+ elseif not internalized[hash] then
+ internalized[hash]=id
+ if trace_defining then
+ report_defining("registering font, id %s, hash %a",id,hash)
+ end
+ fontdata[id]=tfmdata
+ end
+ end
+end
+function definers.read(specification,size,id)
+ statistics.starttiming(fonts)
+ if type(specification)=="string" then
+ specification=definers.analyze(specification,size)
+ end
+ local method=specification.method
+ if method and variants[method] then
+ specification=variants[method](specification)
+ end
+ specification=definers.resolve(specification)
+ local hash=constructors.hashinstance(specification)
+ local tfmdata=definers.registered(hash)
+ if tfmdata then
+ if trace_defining then
+ report_defining("already hashed: %s",hash)
+ end
+ else
+ tfmdata=definers.loadfont(specification)
+ if tfmdata then
+ if trace_defining then
+ report_defining("loaded and hashed: %s",hash)
+ end
+ tfmdata.properties.hash=hash
+ if id then
+ definers.register(tfmdata,id)
+ end
+ else
+ if trace_defining then
+ report_defining("not loaded and hashed: %s",hash)
+ end
+ end
+ end
+ lastdefined=tfmdata or id
+ if not tfmdata then
+ report_defining("unknown font %a, loading aborted",specification.name)
+ elseif trace_defining and type(tfmdata)=="table" then
+ local properties=tfmdata.properties or {}
+ local parameters=tfmdata.parameters or {}
+ report_defining("using %a font with id %a, name %a, size %a, bytes %a, encoding %a, fullname %a, filename %a",
+ properties.format or "unknown",id,properties.name,parameters.size,properties.encodingbytes,
+ properties.encodingname,properties.fullname,basename(properties.filename))
+ end
+ statistics.stoptiming(fonts)
+ return tfmdata
+end
+function font.getfont(id)
+ return fontdata[id]
+end
+callbacks.register('define_font',definers.read,"definition of fonts (tfmdata preparation)")
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['luatex-fonts-def']={
+ version=1.001,
+ comment="companion to luatex-*.tex",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+if context then
+ texio.write_nl("fatal error: this module is not for context")
+ os.exit()
+end
+local fonts=fonts
+fonts.constructors.namemode="specification"
+function fonts.definers.getspecification(str)
+ return "",str,"",":",str
+end
+local list={}
+local function issome () list.lookup='name' end
+local function isfile () list.lookup='file' end
+local function isname () list.lookup='name' end
+local function thename(s) list.name=s end
+local function issub (v) list.sub=v end
+local function iscrap (s) list.crap=string.lower(s) end
+local function iskey (k,v) list[k]=v end
+local function istrue (s) list[s]=true end
+local function isfalse(s) list[s]=false end
+local P,S,R,C=lpeg.P,lpeg.S,lpeg.R,lpeg.C
+local spaces=P(" ")^0
+local namespec=(1-S("/:("))^0
+local crapspec=spaces*P("/")*(((1-P(":"))^0)/iscrap)*spaces
+local filename_1=P("file:")/isfile*(namespec/thename)
+local filename_2=P("[")*P(true)/isname*(((1-P("]"))^0)/thename)*P("]")
+local fontname_1=P("name:")/isname*(namespec/thename)
+local fontname_2=P(true)/issome*(namespec/thename)
+local sometext=(R("az","AZ","09")+S("+-.{}"))^1
+local truevalue=P("+")*spaces*(sometext/istrue)
+local falsevalue=P("-")*spaces*(sometext/isfalse)
+local keyvalue=(C(sometext)*spaces*P("=")*spaces*C(sometext))/iskey
+local somevalue=sometext/istrue
+local subvalue=P("(")*(C(P(1-S("()"))^1)/issub)*P(")")
+local option=spaces*(keyvalue+falsevalue+truevalue+somevalue)*spaces
+local options=P(":")*spaces*(P(";")^0*option)^0
+local pattern=(filename_1+filename_2+fontname_1+fontname_2)*subvalue^0*crapspec^0*options^0
+local function colonized(specification)
+ list={}
+ lpeg.match(pattern,specification.specification)
+ list.crap=nil
+ if list.name then
+ specification.name=list.name
+ list.name=nil
+ end
+ if list.lookup then
+ specification.lookup=list.lookup
+ list.lookup=nil
+ end
+ if list.sub then
+ specification.sub=list.sub
+ list.sub=nil
+ end
+ specification.features.normal=fonts.handlers.otf.features.normalize(list)
+ return specification
+end
+fonts.definers.registersplit(":",colonized,"cryptic")
+fonts.definers.registersplit("",colonized,"more cryptic")
+function fonts.definers.applypostprocessors(tfmdata)
+ local postprocessors=tfmdata.postprocessors
+ if postprocessors then
+ for i=1,#postprocessors do
+ local extrahash=postprocessors[i](tfmdata)
+ if type(extrahash)=="string" and extrahash~="" then
+ extrahash=string.gsub(lower(extrahash),"[^a-z]","-")
+ tfmdata.properties.fullname=format("%s-%s",tfmdata.properties.fullname,extrahash)
+ end
+ end
+ end
+ return tfmdata
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['luatex-fonts-ext']={
+ version=1.001,
+ comment="companion to luatex-*.tex",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+if context then
+ texio.write_nl("fatal error: this module is not for context")
+ os.exit()
+end
+local fonts=fonts
+local otffeatures=fonts.constructors.features.otf
+local getprivate=fonts.constructors.getprivate
+local function initializeitlc(tfmdata,value)
+ if value then
+ local parameters=tfmdata.parameters
+ local italicangle=parameters.italicangle
+ if italicangle and italicangle~=0 then
+ local properties=tfmdata.properties
+ local factor=tonumber(value) or 1
+ properties.hasitalics=true
+ properties.autoitalicamount=factor*(parameters.uwidth or 40)/2
+ end
+ end
+end
+otffeatures.register {
+ name="itlc",
+ description="italic correction",
+ initializers={
+ base=initializeitlc,
+ node=initializeitlc,
+ }
+}
+local function initializeslant(tfmdata,value)
+ value=tonumber(value)
+ if not value then
+ value=0
+ elseif value>1 then
+ value=1
+ elseif value<-1 then
+ value=-1
+ end
+ tfmdata.parameters.slantfactor=value
+end
+otffeatures.register {
+ name="slant",
+ description="slant glyphs",
+ initializers={
+ base=initializeslant,
+ node=initializeslant,
+ }
+}
+local function initializeextend(tfmdata,value)
+ value=tonumber(value)
+ if not value then
+ value=0
+ elseif value>10 then
+ value=10
+ elseif value<-10 then
+ value=-10
+ end
+ tfmdata.parameters.extendfactor=value
+end
+otffeatures.register {
+ name="extend",
+ description="scale glyphs horizontally",
+ initializers={
+ base=initializeextend,
+ node=initializeextend,
+ }
+}
+fonts.protrusions=fonts.protrusions or {}
+fonts.protrusions.setups=fonts.protrusions.setups or {}
+local setups=fonts.protrusions.setups
+local function initializeprotrusion(tfmdata,value)
+ if value then
+ local setup=setups[value]
+ if setup then
+ local factor,left,right=setup.factor or 1,setup.left or 1,setup.right or 1
+ local emwidth=tfmdata.parameters.quad
+ tfmdata.parameters.protrusion={
+ auto=true,
+ }
+ for i,chr in next,tfmdata.characters do
+ local v,pl,pr=setup[i],nil,nil
+ if v then
+ pl,pr=v[1],v[2]
+ end
+ if pl and pl~=0 then chr.left_protruding=left*pl*factor end
+ if pr and pr~=0 then chr.right_protruding=right*pr*factor end
+ end
+ end
+ end
+end
+otffeatures.register {
+ name="protrusion",
+ description="shift characters into the left and or right margin",
+ initializers={
+ base=initializeprotrusion,
+ node=initializeprotrusion,
+ }
+}
+fonts.expansions=fonts.expansions or {}
+fonts.expansions.setups=fonts.expansions.setups or {}
+local setups=fonts.expansions.setups
+local function initializeexpansion(tfmdata,value)
+ if value then
+ local setup=setups[value]
+ if setup then
+ local factor=setup.factor or 1
+ tfmdata.parameters.expansion={
+ stretch=10*(setup.stretch or 0),
+ shrink=10*(setup.shrink or 0),
+ step=10*(setup.step or 0),
+ auto=true,
+ }
+ for i,chr in next,tfmdata.characters do
+ local v=setup[i]
+ if v and v~=0 then
+ chr.expansion_factor=v*factor
+ else
+ chr.expansion_factor=factor
+ end
+ end
+ end
+ end
+end
+otffeatures.register {
+ name="expansion",
+ description="apply hz optimization",
+ initializers={
+ base=initializeexpansion,
+ node=initializeexpansion,
+ }
+}
+function fonts.loggers.onetimemessage() end
+local byte=string.byte
+fonts.expansions.setups['default']={
+ stretch=2,shrink=2,step=.5,factor=1,
+ [byte('A')]=0.5,[byte('B')]=0.7,[byte('C')]=0.7,[byte('D')]=0.5,[byte('E')]=0.7,
+ [byte('F')]=0.7,[byte('G')]=0.5,[byte('H')]=0.7,[byte('K')]=0.7,[byte('M')]=0.7,
+ [byte('N')]=0.7,[byte('O')]=0.5,[byte('P')]=0.7,[byte('Q')]=0.5,[byte('R')]=0.7,
+ [byte('S')]=0.7,[byte('U')]=0.7,[byte('W')]=0.7,[byte('Z')]=0.7,
+ [byte('a')]=0.7,[byte('b')]=0.7,[byte('c')]=0.7,[byte('d')]=0.7,[byte('e')]=0.7,
+ [byte('g')]=0.7,[byte('h')]=0.7,[byte('k')]=0.7,[byte('m')]=0.7,[byte('n')]=0.7,
+ [byte('o')]=0.7,[byte('p')]=0.7,[byte('q')]=0.7,[byte('s')]=0.7,[byte('u')]=0.7,
+ [byte('w')]=0.7,[byte('z')]=0.7,
+ [byte('2')]=0.7,[byte('3')]=0.7,[byte('6')]=0.7,[byte('8')]=0.7,[byte('9')]=0.7,
+}
+fonts.protrusions.setups['default']={
+ factor=1,left=1,right=1,
+ [0x002C]={ 0,1 },
+ [0x002E]={ 0,1 },
+ [0x003A]={ 0,1 },
+ [0x003B]={ 0,1 },
+ [0x002D]={ 0,1 },
+ [0x2013]={ 0,0.50 },
+ [0x2014]={ 0,0.33 },
+ [0x3001]={ 0,1 },
+ [0x3002]={ 0,1 },
+ [0x060C]={ 0,1 },
+ [0x061B]={ 0,1 },
+ [0x06D4]={ 0,1 },
+}
+fonts.handlers.otf.features.normalize=function(t)
+ if t.rand then
+ t.rand="random"
+ end
+ return t
+end
+function fonts.helpers.nametoslot(name)
+ local t=type(name)
+ if t=="string" then
+ local tfmdata=fonts.hashes.identifiers[currentfont()]
+ local shared=tfmdata and tfmdata.shared
+ local fntdata=shared and shared.rawdata
+ return fntdata and fntdata.resources.unicodes[name]
+ elseif t=="number" then
+ return n
+ end
+end
+fonts.encodings=fonts.encodings or {}
+local reencodings={}
+fonts.encodings.reencodings=reencodings
+local function specialreencode(tfmdata,value)
+ local encoding=value and reencodings[value]
+ if encoding then
+ local temp={}
+ local char=tfmdata.characters
+ for k,v in next,encoding do
+ temp[k]=char[v]
+ end
+ for k,v in next,temp do
+ char[k]=temp[k]
+ end
+ return string.format("reencoded:%s",value)
+ end
+end
+local function reencode(tfmdata,value)
+ tfmdata.postprocessors=tfmdata.postprocessors or {}
+ table.insert(tfmdata.postprocessors,
+ function(tfmdata)
+ return specialreencode(tfmdata,value)
+ end
+ )
+end
+otffeatures.register {
+ name="reencode",
+ description="reencode characters",
+ manipulators={
+ base=reencode,
+ node=reencode,
+ }
+}
+local function ignore(tfmdata,key,value)
+ if value then
+ tfmdata.mathparameters=nil
+ end
+end
+otffeatures.register {
+ name="ignoremathconstants",
+ description="ignore math constants table",
+ initializers={
+ base=ignore,
+ node=ignore,
+ }
+}
+local setmetatableindex=table.setmetatableindex
+local function additalictowidth(tfmdata,key,value)
+ local characters=tfmdata.characters
+ local additions={}
+ for unicode,old_c in next,characters do
+ local oldwidth=old_c.width
+ local olditalic=old_c.italic
+ if olditalic and olditalic~=0 then
+ local private=getprivate(tfmdata)
+ local new_c={
+ width=oldwidth+olditalic,
+ height=old_c.height,
+ depth=old_c.depth,
+ commands={
+ { "slot",1,private },
+ { "right",olditalic },
+ },
+ }
+ setmetatableindex(new_c,old_c)
+ characters[unicode]=new_c
+ additions[private]=old_c
+ end
+ end
+ for k,v in next,additions do
+ characters[k]=v
+ end
+end
+otffeatures.register {
+ name="italicwidths",
+ description="add italic to width",
+ manipulators={
+ base=additalictowidth,
+ }
+}
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+
+fonts.handlers.otf.addfeature {
+ ["dataset"]={
+ {
+ ["data"]={
+ ["À"]={ "A","̀" },
+ ["Ã"]={ "A","Ì" },
+ ["Â"]={ "A","̂" },
+ ["Ã"]={ "A","̃" },
+ ["Ä"]={ "A","̈" },
+ ["Ã…"]={ "A","ÌŠ" },
+ ["Ç"]={ "C","̧" },
+ ["È"]={ "E","̀" },
+ ["É"]={ "E","Ì" },
+ ["Ê"]={ "E","̂" },
+ ["Ë"]={ "E","̈" },
+ ["Ì"]={ "I","̀" },
+ ["Ã"]={ "I","Ì" },
+ ["ÃŽ"]={ "I","Ì‚" },
+ ["Ã"]={ "I","̈" },
+ ["Ñ"]={ "N","̃" },
+ ["Ã’"]={ "O","Ì€" },
+ ["Ó"]={ "O","Ì" },
+ ["Ô"]={ "O","̂" },
+ ["Õ"]={ "O","̃" },
+ ["Ö"]={ "O","̈" },
+ ["Ù"]={ "U","̀" },
+ ["Ú"]={ "U","Ì" },
+ ["Û"]={ "U","̂" },
+ ["Ü"]={ "U","̈" },
+ ["Ã"]={ "Y","Ì" },
+ ["à"]={ "a","̀" },
+ ["á"]={ "a","Ì" },
+ ["â"]={ "a","̂" },
+ ["ã"]={ "a","̃" },
+ ["ä"]={ "a","̈" },
+ ["Ã¥"]={ "a","ÌŠ" },
+ ["ç"]={ "c","̧" },
+ ["è"]={ "e","̀" },
+ ["é"]={ "e","Ì" },
+ ["ê"]={ "e","̂" },
+ ["ë"]={ "e","̈" },
+ ["ì"]={ "i","̀" },
+ ["í"]={ "i","Ì" },
+ ["î"]={ "i","̂" },
+ ["ï"]={ "i","̈" },
+ ["ñ"]={ "n","̃" },
+ ["ò"]={ "o","̀" },
+ ["ó"]={ "o","Ì" },
+ ["ô"]={ "o","̂" },
+ ["õ"]={ "o","̃" },
+ ["ö"]={ "o","̈" },
+ ["ù"]={ "u","̀" },
+ ["ú"]={ "u","Ì" },
+ ["û"]={ "u","̂" },
+ ["ü"]={ "u","̈" },
+ ["ý"]={ "y","Ì" },
+ ["ÿ"]={ "y","̈" },
+ ["Ä€"]={ "A","Ì„" },
+ ["Ä"]={ "a","Ì„" },
+ ["Ă"]={ "A","̆" },
+ ["ă"]={ "a","̆" },
+ ["Ą"]={ "A","̨" },
+ ["ą"]={ "a","̨" },
+ ["Ć"]={ "C","Ì" },
+ ["ć"]={ "c","Ì" },
+ ["Ĉ"]={ "C","̂" },
+ ["ĉ"]={ "c","̂" },
+ ["Ċ"]={ "C","̇" },
+ ["ċ"]={ "c","̇" },
+ ["Č"]={ "C","̌" },
+ ["Ä"]={ "c","ÌŒ" },
+ ["Ď"]={ "D","̌" },
+ ["Ä"]={ "d","ÌŒ" },
+ ["Ä’"]={ "E","Ì„" },
+ ["Ä“"]={ "e","Ì„" },
+ ["Ĕ"]={ "E","̆" },
+ ["ĕ"]={ "e","̆" },
+ ["Ė"]={ "E","̇" },
+ ["ė"]={ "e","̇" },
+ ["Ę"]={ "E","̨" },
+ ["ę"]={ "e","̨" },
+ ["Ě"]={ "E","̌" },
+ ["ě"]={ "e","̌" },
+ ["Ĝ"]={ "G","̂" },
+ ["Ä"]={ "g","Ì‚" },
+ ["Ğ"]={ "G","̆" },
+ ["ğ"]={ "g","̆" },
+ ["Ġ"]={ "G","̇" },
+ ["ġ"]={ "g","̇" },
+ ["Ģ"]={ "G","̧" },
+ ["ģ"]={ "g","̧" },
+ ["Ĥ"]={ "H","̂" },
+ ["Ä¥"]={ "h","Ì‚" },
+ ["Ĩ"]={ "I","̃" },
+ ["ĩ"]={ "i","̃" },
+ ["Ī"]={ "I","̄" },
+ ["Ä«"]={ "i","Ì„" },
+ ["Ĭ"]={ "I","̆" },
+ ["ĭ"]={ "i","̆" },
+ ["Į"]={ "I","̨" },
+ ["į"]={ "i","̨" },
+ ["İ"]={ "I","̇" },
+ ["Ä´"]={ "J","Ì‚" },
+ ["ĵ"]={ "j","̂" },
+ ["Ķ"]={ "K","̧" },
+ ["ķ"]={ "k","̧" },
+ ["Ĺ"]={ "L","Ì" },
+ ["ĺ"]={ "l","Ì" },
+ ["Ļ"]={ "L","̧" },
+ ["ļ"]={ "l","̧" },
+ ["Ľ"]={ "L","̌" },
+ ["ľ"]={ "l","̌" },
+ ["Ń"]={ "N","Ì" },
+ ["Å„"]={ "n","Ì" },
+ ["Ņ"]={ "N","̧" },
+ ["ņ"]={ "n","̧" },
+ ["Ň"]={ "N","̌" },
+ ["ň"]={ "n","̌" },
+ ["Ō"]={ "O","̄" },
+ ["Å"]={ "o","Ì„" },
+ ["Ŏ"]={ "O","̆" },
+ ["Å"]={ "o","̆" },
+ ["Å"]={ "O","Ì‹" },
+ ["Å‘"]={ "o","Ì‹" },
+ ["Å”"]={ "R","Ì" },
+ ["Å•"]={ "r","Ì" },
+ ["Ŗ"]={ "R","̧" },
+ ["ŗ"]={ "r","̧" },
+ ["Ř"]={ "R","̌" },
+ ["ř"]={ "r","̌" },
+ ["Åš"]={ "S","Ì" },
+ ["Å›"]={ "s","Ì" },
+ ["Ŝ"]={ "S","̂" },
+ ["Å"]={ "s","Ì‚" },
+ ["Ş"]={ "S","̧" },
+ ["ş"]={ "s","̧" },
+ ["Š"]={ "S","̌" },
+ ["š"]={ "s","̌" },
+ ["Ţ"]={ "T","̧" },
+ ["ţ"]={ "t","̧" },
+ ["Ť"]={ "T","̌" },
+ ["ť"]={ "t","̌" },
+ ["Ũ"]={ "U","̃" },
+ ["ũ"]={ "u","̃" },
+ ["Ū"]={ "U","̄" },
+ ["Å«"]={ "u","Ì„" },
+ ["Ŭ"]={ "U","̆" },
+ ["ŭ"]={ "u","̆" },
+ ["Å®"]={ "U","ÌŠ" },
+ ["ů"]={ "u","̊" },
+ ["Å°"]={ "U","Ì‹" },
+ ["ű"]={ "u","̋" },
+ ["Ų"]={ "U","̨" },
+ ["ų"]={ "u","̨" },
+ ["Å´"]={ "W","Ì‚" },
+ ["ŵ"]={ "w","̂" },
+ ["Ŷ"]={ "Y","̂" },
+ ["Å·"]={ "y","Ì‚" },
+ ["Ÿ"]={ "Y","̈" },
+ ["Ź"]={ "Z","Ì" },
+ ["ź"]={ "z","Ì" },
+ ["Ż"]={ "Z","̇" },
+ ["ż"]={ "z","̇" },
+ ["Ž"]={ "Z","̌" },
+ ["ž"]={ "z","̌" },
+ ["Æ "]={ "O","Ì›" },
+ ["Æ¡"]={ "o","Ì›" },
+ ["Ư"]={ "U","̛" },
+ ["Æ°"]={ "u","Ì›" },
+ ["Ç"]={ "A","ÌŒ" },
+ ["ǎ"]={ "a","̌" },
+ ["Ç"]={ "I","ÌŒ" },
+ ["Ç"]={ "i","ÌŒ" },
+ ["Ǒ"]={ "O","̌" },
+ ["ǒ"]={ "o","̌" },
+ ["Ǔ"]={ "U","̌" },
+ ["ǔ"]={ "u","̌" },
+ ["Ǖ"]={ "Ü","̄" },
+ ["ǖ"]={ "ü","̄" },
+ ["Ç—"]={ "Ãœ","Ì" },
+ ["ǘ"]={ "ü","Ì" },
+ ["Ǚ"]={ "Ü","̌" },
+ ["ǚ"]={ "ü","̌" },
+ ["Ǜ"]={ "Ü","̀" },
+ ["ǜ"]={ "ü","̀" },
+ ["Ǟ"]={ "Ä","̄" },
+ ["ǟ"]={ "ä","̄" },
+ ["Ǡ"]={ "Ȧ","̄" },
+ ["ǡ"]={ "ȧ","̄" },
+ ["Ǣ"]={ "Æ","̄" },
+ ["ǣ"]={ "æ","̄" },
+ ["Ǧ"]={ "G","̌" },
+ ["ǧ"]={ "g","̌" },
+ ["Ǩ"]={ "K","̌" },
+ ["ǩ"]={ "k","̌" },
+ ["Ǫ"]={ "O","̨" },
+ ["ǫ"]={ "o","̨" },
+ ["Ǭ"]={ "Ǫ","̄" },
+ ["Ç­"]={ "Ç«","Ì„" },
+ ["Ǯ"]={ "Ʒ","̌" },
+ ["ǯ"]={ "ʒ","̌" },
+ ["ǰ"]={ "j","̌" },
+ ["Ç´"]={ "G","Ì" },
+ ["ǵ"]={ "g","Ì" },
+ ["Ǹ"]={ "N","̀" },
+ ["ǹ"]={ "n","̀" },
+ ["Ǻ"]={ "Ã…","Ì" },
+ ["Ç»"]={ "Ã¥","Ì" },
+ ["Ǽ"]={ "Æ","Ì" },
+ ["ǽ"]={ "æ","Ì" },
+ ["Ǿ"]={ "Ø","Ì" },
+ ["Ç¿"]={ "ø","Ì" },
+ ["È€"]={ "A","Ì" },
+ ["È"]={ "a","Ì" },
+ ["È‚"]={ "A","Ì‘" },
+ ["ȃ"]={ "a","̑" },
+ ["È„"]={ "E","Ì" },
+ ["È…"]={ "e","Ì" },
+ ["Ȇ"]={ "E","̑" },
+ ["ȇ"]={ "e","̑" },
+ ["Ȉ"]={ "I","Ì" },
+ ["ȉ"]={ "i","Ì" },
+ ["ÈŠ"]={ "I","Ì‘" },
+ ["È‹"]={ "i","Ì‘" },
+ ["ÈŒ"]={ "O","Ì" },
+ ["È"]={ "o","Ì" },
+ ["ÈŽ"]={ "O","Ì‘" },
+ ["È"]={ "o","Ì‘" },
+ ["È"]={ "R","Ì" },
+ ["È‘"]={ "r","Ì" },
+ ["È’"]={ "R","Ì‘" },
+ ["È“"]={ "r","Ì‘" },
+ ["È”"]={ "U","Ì" },
+ ["È•"]={ "u","Ì" },
+ ["È–"]={ "U","Ì‘" },
+ ["È—"]={ "u","Ì‘" },
+ ["Ș"]={ "S","̦" },
+ ["ș"]={ "s","̦" },
+ ["Ț"]={ "T","̦" },
+ ["ț"]={ "t","̦" },
+ ["Ȟ"]={ "H","̌" },
+ ["ȟ"]={ "h","̌" },
+ ["Ȧ"]={ "A","̇" },
+ ["ȧ"]={ "a","̇" },
+ ["Ȩ"]={ "E","̧" },
+ ["ȩ"]={ "e","̧" },
+ ["Ȫ"]={ "Ö","̄" },
+ ["ȫ"]={ "ö","̄" },
+ ["Ȭ"]={ "Õ","̄" },
+ ["ȭ"]={ "õ","̄" },
+ ["Ȯ"]={ "O","̇" },
+ ["ȯ"]={ "o","̇" },
+ ["È°"]={ "È®","Ì„" },
+ ["ȱ"]={ "ȯ","̄" },
+ ["Ȳ"]={ "Y","̄" },
+ ["ȳ"]={ "y","̄" },
+ ["Í„"]={ "̈","Ì" },
+ ["Î…"]={ "¨","Ì" },
+ ["Ά"]={ "Α","Ì" },
+ ["Έ"]={ "Ε","Ì" },
+ ["Ή"]={ "Η","Ì" },
+ ["Ί"]={ "Ι","Ì" },
+ ["ÎŒ"]={ "Ο","Ì" },
+ ["ÎŽ"]={ "Î¥","Ì" },
+ ["Î"]={ "Ω","Ì" },
+ ["Î"]={ "ÏŠ","Ì" },
+ ["Ϊ"]={ "Ι","̈" },
+ ["Ϋ"]={ "Υ","̈" },
+ ["ά"]={ "α","Ì" },
+ ["έ"]={ "ε","Ì" },
+ ["ή"]={ "η","Ì" },
+ ["ί"]={ "ι","Ì" },
+ ["ΰ"]={ "Ï‹","Ì" },
+ ["ϊ"]={ "ι","̈" },
+ ["ϋ"]={ "υ","̈" },
+ ["ÏŒ"]={ "ο","Ì" },
+ ["Ï"]={ "Ï…","Ì" },
+ ["ÏŽ"]={ "ω","Ì" },
+ ["Ï“"]={ "Ï’","Ì" },
+ ["ϔ"]={ "ϒ","̈" },
+ ["Ѐ"]={ "Е","̀" },
+ ["Ð"]={ "Е","̈" },
+ ["Ѓ"]={ "Г","Ì" },
+ ["Ї"]={ "І","̈" },
+ ["ÐŒ"]={ "К","Ì" },
+ ["Ð"]={ "И","Ì€" },
+ ["Ў"]={ "У","̆" },
+ ["Й"]={ "И","̆" },
+ ["й"]={ "и","̆" },
+ ["Ñ"]={ "е","Ì€" },
+ ["ё"]={ "е","̈" },
+ ["Ñ“"]={ "г","Ì" },
+ ["ї"]={ "і","̈" },
+ ["Ñœ"]={ "к","Ì" },
+ ["Ñ"]={ "и","Ì€" },
+ ["ў"]={ "у","̆" },
+ ["Ѷ"]={ "Ñ´","Ì" },
+ ["Ñ·"]={ "ѵ","Ì" },
+ ["Ó"]={ "Ж","̆" },
+ ["ӂ"]={ "ж","̆" },
+ ["Ó"]={ "Ð","̆" },
+ ["ӑ"]={ "а","̆" },
+ ["Ó’"]={ "Ð","̈" },
+ ["ӓ"]={ "а","̈" },
+ ["Ӗ"]={ "Е","̆" },
+ ["ӗ"]={ "е","̆" },
+ ["Ӛ"]={ "Ә","̈" },
+ ["ӛ"]={ "ә","̈" },
+ ["Ӝ"]={ "Ж","̈" },
+ ["Ó"]={ "ж","̈" },
+ ["Ӟ"]={ "З","̈" },
+ ["ӟ"]={ "з","̈" },
+ ["Ӣ"]={ "И","̄" },
+ ["ӣ"]={ "и","̄" },
+ ["Ӥ"]={ "И","̈" },
+ ["ӥ"]={ "и","̈" },
+ ["Ӧ"]={ "О","̈" },
+ ["ӧ"]={ "о","̈" },
+ ["Ӫ"]={ "Ө","̈" },
+ ["ӫ"]={ "ө","̈" },
+ ["Ӭ"]={ "Э","̈" },
+ ["Ó­"]={ "Ñ","̈" },
+ ["Ӯ"]={ "У","̄" },
+ ["ӯ"]={ "у","̄" },
+ ["Ӱ"]={ "У","̈" },
+ ["ӱ"]={ "у","̈" },
+ ["Ӳ"]={ "У","̋" },
+ ["ӳ"]={ "у","̋" },
+ ["Ӵ"]={ "Ч","̈" },
+ ["ӵ"]={ "ч","̈" },
+ ["Ӹ"]={ "Ы","̈" },
+ ["ӹ"]={ "ы","̈" },
+ ["آ"]={ "ا","ٓ" },
+ ["أ"]={ "ا","ٔ" },
+ ["ؤ"]={ "و","ٔ" },
+ ["إ"]={ "ا","ٕ" },
+ ["ئ"]={ "ي","ٔ" },
+ ["Û€"]={ "Û•","Ù”" },
+ ["Û‚"]={ "Û","Ù”" },
+ ["Û“"]={ "Û’","Ù”" },
+ ["ऩ"]={ "न","़" },
+ ["ऱ"]={ "र","़" },
+ ["ऴ"]={ "ळ","़" },
+ ["क़"]={ "क","़" },
+ ["ख़"]={ "ख","़" },
+ ["ग़"]={ "ग","़" },
+ ["ज़"]={ "ज","़" },
+ ["ड़"]={ "ड","़" },
+ ["à¥"]={ "ढ","़" },
+ ["फ़"]={ "फ","़" },
+ ["य़"]={ "य","़" },
+ ["ো"]={ "ে","া" },
+ ["ৌ"]={ "ে","ৗ" },
+ ["ড়"]={ "ড","়" },
+ ["à§"]={ "ঢ","়" },
+ ["য়"]={ "য","়" },
+ ["ਲ਼"]={ "ਲ","਼" },
+ ["ਸ਼"]={ "ਸ","਼" },
+ ["ਖ਼"]={ "ਖ","਼" },
+ ["ਗ਼"]={ "ਗ","਼" },
+ ["ਜ਼"]={ "ਜ","਼" },
+ ["ਫ਼"]={ "ਫ","਼" },
+ ["à­ˆ"]={ "à­‡","à­–" },
+ ["ୋ"]={ "େ","ା" },
+ ["ୌ"]={ "େ","ୗ" },
+ ["ଡ଼"]={ "ଡ","଼" },
+ ["à­"]={ "ଢ","଼" },
+ ["ஔ"]={ "ஒ","ௗ" },
+ ["ொ"]={ "ெ","ா" },
+ ["ோ"]={ "ே","ா" },
+ ["ௌ"]={ "ெ","ௗ" },
+ ["ై"]={ "ె","ౖ" },
+ ["ೀ"]={ "ಿ","ೕ" },
+ ["ೇ"]={ "ೆ","ೕ" },
+ ["ೈ"]={ "ೆ","ೖ" },
+ ["ೊ"]={ "ೆ","ೂ" },
+ ["ೋ"]={ "ೊ","ೕ" },
+ ["ൊ"]={ "െ","ാ" },
+ ["ോ"]={ "േ","ാ" },
+ ["ൌ"]={ "െ","ൗ" },
+ ["à·š"]={ "à·™","à·Š" },
+ ["à·œ"]={ "à·™","à·" },
+ ["à·"]={ "à·œ","à·Š" },
+ ["à·ž"]={ "à·™","à·Ÿ" },
+ ["གྷ"]={ "ག","ྷ" },
+ ["à½"]={ "ཌ","ྷ" },
+ ["དྷ"]={ "ད","ྷ" },
+ ["བྷ"]={ "བ","ྷ" },
+ ["ཛྷ"]={ "ཛ","ྷ" },
+ ["ཀྵ"]={ "ཀ","ྵ" },
+ ["ཱི"]={ "ཱ","ི" },
+ ["ཱུ"]={ "ཱ","ུ" },
+ ["ྲྀ"]={ "ྲ","ྀ" },
+ ["ླྀ"]={ "ླ","ྀ" },
+ ["à¾"]={ "ཱ","ྀ" },
+ ["ྒྷ"]={ "ྒ","ྷ" },
+ ["à¾"]={ "ྜ","ྷ" },
+ ["ྡྷ"]={ "ྡ","ྷ" },
+ ["ྦྷ"]={ "ྦ","ྷ" },
+ ["ྫྷ"]={ "ྫ","ྷ" },
+ ["ྐྵ"]={ "à¾","ྵ" },
+ ["ဦ"]={ "ဥ","ီ" },
+ ["ᬆ"]={ "ᬅ","ᬵ" },
+ ["ᬈ"]={ "ᬇ","ᬵ" },
+ ["ᬊ"]={ "ᬉ","ᬵ" },
+ ["ᬌ"]={ "ᬋ","ᬵ" },
+ ["ᬎ"]={ "á¬","ᬵ" },
+ ["ᬒ"]={ "ᬑ","ᬵ" },
+ ["ᬻ"]={ "ᬺ","ᬵ" },
+ ["ᬽ"]={ "ᬼ","ᬵ" },
+ ["ᭀ"]={ "ᬾ","ᬵ" },
+ ["á­"]={ "ᬿ","ᬵ" },
+ ["ᭃ"]={ "ᭂ","ᬵ" },
+ ["Ḁ"]={ "A","̥" },
+ ["á¸"]={ "a","Ì¥" },
+ ["Ḃ"]={ "B","̇" },
+ ["ḃ"]={ "b","̇" },
+ ["Ḅ"]={ "B","̣" },
+ ["ḅ"]={ "b","̣" },
+ ["Ḇ"]={ "B","̱" },
+ ["ḇ"]={ "b","̱" },
+ ["Ḉ"]={ "Ç","Ì" },
+ ["ḉ"]={ "ç","Ì" },
+ ["Ḋ"]={ "D","̇" },
+ ["ḋ"]={ "d","̇" },
+ ["Ḍ"]={ "D","̣" },
+ ["á¸"]={ "d","Ì£" },
+ ["Ḏ"]={ "D","̱" },
+ ["á¸"]={ "d","̱" },
+ ["á¸"]={ "D","̧" },
+ ["ḑ"]={ "d","̧" },
+ ["Ḓ"]={ "D","̭" },
+ ["ḓ"]={ "d","̭" },
+ ["Ḕ"]={ "Ē","̀" },
+ ["ḕ"]={ "ē","̀" },
+ ["Ḗ"]={ "Ä’","Ì" },
+ ["ḗ"]={ "Ä“","Ì" },
+ ["Ḙ"]={ "E","̭" },
+ ["ḙ"]={ "e","̭" },
+ ["Ḛ"]={ "E","̰" },
+ ["ḛ"]={ "e","̰" },
+ ["Ḝ"]={ "Ȩ","̆" },
+ ["á¸"]={ "È©","̆" },
+ ["Ḟ"]={ "F","̇" },
+ ["ḟ"]={ "f","̇" },
+ ["Ḡ"]={ "G","̄" },
+ ["ḡ"]={ "g","̄" },
+ ["Ḣ"]={ "H","̇" },
+ ["ḣ"]={ "h","̇" },
+ ["Ḥ"]={ "H","̣" },
+ ["ḥ"]={ "h","̣" },
+ ["Ḧ"]={ "H","̈" },
+ ["ḧ"]={ "h","̈" },
+ ["Ḩ"]={ "H","̧" },
+ ["ḩ"]={ "h","̧" },
+ ["Ḫ"]={ "H","̮" },
+ ["ḫ"]={ "h","̮" },
+ ["Ḭ"]={ "I","̰" },
+ ["ḭ"]={ "i","̰" },
+ ["Ḯ"]={ "Ã","Ì" },
+ ["ḯ"]={ "ï","Ì" },
+ ["Ḱ"]={ "K","Ì" },
+ ["ḱ"]={ "k","Ì" },
+ ["Ḳ"]={ "K","̣" },
+ ["ḳ"]={ "k","̣" },
+ ["Ḵ"]={ "K","̱" },
+ ["ḵ"]={ "k","̱" },
+ ["Ḷ"]={ "L","̣" },
+ ["ḷ"]={ "l","̣" },
+ ["Ḹ"]={ "Ḷ","̄" },
+ ["ḹ"]={ "ḷ","̄" },
+ ["Ḻ"]={ "L","̱" },
+ ["ḻ"]={ "l","̱" },
+ ["Ḽ"]={ "L","̭" },
+ ["ḽ"]={ "l","̭" },
+ ["Ḿ"]={ "M","Ì" },
+ ["ḿ"]={ "m","Ì" },
+ ["Ṁ"]={ "M","̇" },
+ ["á¹"]={ "m","̇" },
+ ["Ṃ"]={ "M","̣" },
+ ["ṃ"]={ "m","̣" },
+ ["Ṅ"]={ "N","̇" },
+ ["ṅ"]={ "n","̇" },
+ ["Ṇ"]={ "N","̣" },
+ ["ṇ"]={ "n","̣" },
+ ["Ṉ"]={ "N","̱" },
+ ["ṉ"]={ "n","̱" },
+ ["Ṋ"]={ "N","̭" },
+ ["ṋ"]={ "n","̭" },
+ ["Ṍ"]={ "Õ","Ì" },
+ ["á¹"]={ "õ","Ì" },
+ ["Ṏ"]={ "Õ","̈" },
+ ["á¹"]={ "õ","̈" },
+ ["á¹"]={ "ÅŒ","Ì€" },
+ ["ṑ"]={ "Å","Ì€" },
+ ["á¹’"]={ "ÅŒ","Ì" },
+ ["ṓ"]={ "Å","Ì" },
+ ["á¹”"]={ "P","Ì" },
+ ["ṕ"]={ "p","Ì" },
+ ["Ṗ"]={ "P","̇" },
+ ["ṗ"]={ "p","̇" },
+ ["Ṙ"]={ "R","̇" },
+ ["ṙ"]={ "r","̇" },
+ ["Ṛ"]={ "R","̣" },
+ ["á¹›"]={ "r","Ì£" },
+ ["Ṝ"]={ "Ṛ","̄" },
+ ["á¹"]={ "á¹›","Ì„" },
+ ["Ṟ"]={ "R","̱" },
+ ["ṟ"]={ "r","̱" },
+ ["Ṡ"]={ "S","̇" },
+ ["ṡ"]={ "s","̇" },
+ ["á¹¢"]={ "S","Ì£" },
+ ["á¹£"]={ "s","Ì£" },
+ ["Ṥ"]={ "Ś","̇" },
+ ["ṥ"]={ "ś","̇" },
+ ["Ṧ"]={ "Š","̇" },
+ ["ṧ"]={ "š","̇" },
+ ["Ṩ"]={ "Ṣ","̇" },
+ ["ṩ"]={ "ṣ","̇" },
+ ["Ṫ"]={ "T","̇" },
+ ["ṫ"]={ "t","̇" },
+ ["Ṭ"]={ "T","̣" },
+ ["á¹­"]={ "t","Ì£" },
+ ["Ṯ"]={ "T","̱" },
+ ["ṯ"]={ "t","̱" },
+ ["á¹°"]={ "T","Ì­" },
+ ["á¹±"]={ "t","Ì­" },
+ ["Ṳ"]={ "U","̤" },
+ ["ṳ"]={ "u","̤" },
+ ["á¹´"]={ "U","Ì°" },
+ ["á¹µ"]={ "u","Ì°" },
+ ["Ṷ"]={ "U","̭" },
+ ["á¹·"]={ "u","Ì­" },
+ ["Ṹ"]={ "Ũ","Ì" },
+ ["á¹¹"]={ "Å©","Ì" },
+ ["Ṻ"]={ "Ū","̈" },
+ ["ṻ"]={ "ū","̈" },
+ ["Ṽ"]={ "V","̃" },
+ ["ṽ"]={ "v","̃" },
+ ["á¹¾"]={ "V","Ì£" },
+ ["ṿ"]={ "v","̣" },
+ ["Ẁ"]={ "W","̀" },
+ ["áº"]={ "w","Ì€" },
+ ["Ẃ"]={ "W","Ì" },
+ ["ẃ"]={ "w","Ì" },
+ ["Ẅ"]={ "W","̈" },
+ ["ẅ"]={ "w","̈" },
+ ["Ẇ"]={ "W","̇" },
+ ["ẇ"]={ "w","̇" },
+ ["Ẉ"]={ "W","̣" },
+ ["ẉ"]={ "w","̣" },
+ ["Ẋ"]={ "X","̇" },
+ ["ẋ"]={ "x","̇" },
+ ["Ẍ"]={ "X","̈" },
+ ["áº"]={ "x","̈" },
+ ["Ẏ"]={ "Y","̇" },
+ ["áº"]={ "y","̇" },
+ ["áº"]={ "Z","Ì‚" },
+ ["ẑ"]={ "z","̂" },
+ ["Ẓ"]={ "Z","̣" },
+ ["ẓ"]={ "z","̣" },
+ ["Ẕ"]={ "Z","̱" },
+ ["ẕ"]={ "z","̱" },
+ ["ẖ"]={ "h","̱" },
+ ["ẗ"]={ "t","̈" },
+ ["ẘ"]={ "w","̊" },
+ ["ẙ"]={ "y","̊" },
+ ["ẛ"]={ "ſ","̇" },
+ ["Ạ"]={ "A","̣" },
+ ["ạ"]={ "a","̣" },
+ ["Ả"]={ "A","̉" },
+ ["ả"]={ "a","̉" },
+ ["Ấ"]={ "Â","Ì" },
+ ["ấ"]={ "â","Ì" },
+ ["Ầ"]={ "Â","̀" },
+ ["ầ"]={ "â","̀" },
+ ["Ẩ"]={ "Â","̉" },
+ ["ẩ"]={ "â","̉" },
+ ["Ẫ"]={ "Â","̃" },
+ ["ẫ"]={ "â","̃" },
+ ["Ậ"]={ "Ạ","̂" },
+ ["ậ"]={ "ạ","̂" },
+ ["Ắ"]={ "Ä‚","Ì" },
+ ["ắ"]={ "ă","Ì" },
+ ["Ằ"]={ "Ă","̀" },
+ ["ằ"]={ "ă","̀" },
+ ["Ẳ"]={ "Ă","̉" },
+ ["ẳ"]={ "ă","̉" },
+ ["Ẵ"]={ "Ă","̃" },
+ ["ẵ"]={ "ă","̃" },
+ ["Ặ"]={ "Ạ","̆" },
+ ["ặ"]={ "ạ","̆" },
+ ["Ẹ"]={ "E","̣" },
+ ["ẹ"]={ "e","̣" },
+ ["Ẻ"]={ "E","̉" },
+ ["ẻ"]={ "e","̉" },
+ ["Ẽ"]={ "E","̃" },
+ ["ẽ"]={ "e","̃" },
+ ["Ế"]={ "Ê","Ì" },
+ ["ế"]={ "ê","Ì" },
+ ["Ề"]={ "Ê","̀" },
+ ["á»"]={ "ê","Ì€" },
+ ["Ể"]={ "Ê","̉" },
+ ["ể"]={ "ê","̉" },
+ ["Ễ"]={ "Ê","̃" },
+ ["ễ"]={ "ê","̃" },
+ ["Ệ"]={ "Ẹ","̂" },
+ ["ệ"]={ "ẹ","̂" },
+ ["Ỉ"]={ "I","̉" },
+ ["ỉ"]={ "i","̉" },
+ ["Ị"]={ "I","̣" },
+ ["ị"]={ "i","̣" },
+ ["Ọ"]={ "O","̣" },
+ ["á»"]={ "o","Ì£" },
+ ["Ỏ"]={ "O","̉" },
+ ["á»"]={ "o","̉" },
+ ["á»"]={ "Ô","Ì" },
+ ["ố"]={ "ô","Ì" },
+ ["Ồ"]={ "Ô","̀" },
+ ["ồ"]={ "ô","̀" },
+ ["Ổ"]={ "Ô","̉" },
+ ["ổ"]={ "ô","̉" },
+ ["Ỗ"]={ "Ô","̃" },
+ ["ỗ"]={ "ô","̃" },
+ ["Ộ"]={ "Ọ","̂" },
+ ["á»™"]={ "á»","Ì‚" },
+ ["Ớ"]={ "Æ ","Ì" },
+ ["á»›"]={ "Æ¡","Ì" },
+ ["Ờ"]={ "Ơ","̀" },
+ ["á»"]={ "Æ¡","Ì€" },
+ ["Ở"]={ "Ơ","̉" },
+ ["ở"]={ "ơ","̉" },
+ ["Ỡ"]={ "Ơ","̃" },
+ ["ỡ"]={ "ơ","̃" },
+ ["Ợ"]={ "Ơ","̣" },
+ ["ợ"]={ "ơ","̣" },
+ ["Ụ"]={ "U","̣" },
+ ["ụ"]={ "u","̣" },
+ ["Ủ"]={ "U","̉" },
+ ["ủ"]={ "u","̉" },
+ ["Ứ"]={ "Ư","Ì" },
+ ["ứ"]={ "Æ°","Ì" },
+ ["Ừ"]={ "Ư","̀" },
+ ["ừ"]={ "ư","̀" },
+ ["Ử"]={ "Ư","̉" },
+ ["ử"]={ "ư","̉" },
+ ["Ữ"]={ "Ư","̃" },
+ ["ữ"]={ "ư","̃" },
+ ["Ự"]={ "Ư","̣" },
+ ["á»±"]={ "Æ°","Ì£" },
+ ["Ỳ"]={ "Y","̀" },
+ ["ỳ"]={ "y","̀" },
+ ["á»´"]={ "Y","Ì£" },
+ ["ỵ"]={ "y","̣" },
+ ["Ỷ"]={ "Y","̉" },
+ ["ỷ"]={ "y","̉" },
+ ["Ỹ"]={ "Y","̃" },
+ ["ỹ"]={ "y","̃" },
+ ["ἀ"]={ "α","̓" },
+ ["á¼"]={ "α","Ì”" },
+ ["ἂ"]={ "ἀ","̀" },
+ ["ἃ"]={ "á¼","Ì€" },
+ ["ἄ"]={ "á¼€","Ì" },
+ ["á¼…"]={ "á¼","Ì" },
+ ["ἆ"]={ "ἀ","͂" },
+ ["ἇ"]={ "á¼","Í‚" },
+ ["Ἀ"]={ "Α","̓" },
+ ["Ἁ"]={ "Α","̔" },
+ ["Ἂ"]={ "Ἀ","̀" },
+ ["Ἃ"]={ "Ἁ","̀" },
+ ["Ἄ"]={ "Ἀ","Ì" },
+ ["á¼"]={ "Ἁ","Ì" },
+ ["Ἆ"]={ "Ἀ","͂" },
+ ["á¼"]={ "Ἁ","Í‚" },
+ ["á¼"]={ "ε","Ì“" },
+ ["ἑ"]={ "ε","̔" },
+ ["á¼’"]={ "á¼","Ì€" },
+ ["ἓ"]={ "ἑ","̀" },
+ ["á¼”"]={ "á¼","Ì" },
+ ["ἕ"]={ "ἑ","Ì" },
+ ["Ἐ"]={ "Ε","̓" },
+ ["Ἑ"]={ "Ε","̔" },
+ ["Ἒ"]={ "Ἐ","̀" },
+ ["á¼›"]={ "á¼™","Ì€" },
+ ["Ἔ"]={ "Ἐ","Ì" },
+ ["á¼"]={ "á¼™","Ì" },
+ ["ἠ"]={ "η","̓" },
+ ["ἡ"]={ "η","̔" },
+ ["á¼¢"]={ "á¼ ","Ì€" },
+ ["ἣ"]={ "ἡ","̀" },
+ ["ἤ"]={ "á¼ ","Ì" },
+ ["á¼¥"]={ "ἡ","Ì" },
+ ["ἦ"]={ "ἠ","͂" },
+ ["ἧ"]={ "ἡ","͂" },
+ ["Ἠ"]={ "Η","̓" },
+ ["Ἡ"]={ "Η","̔" },
+ ["Ἢ"]={ "Ἠ","̀" },
+ ["Ἣ"]={ "Ἡ","̀" },
+ ["Ἤ"]={ "Ἠ","Ì" },
+ ["á¼­"]={ "Ἡ","Ì" },
+ ["Ἦ"]={ "Ἠ","͂" },
+ ["Ἧ"]={ "Ἡ","͂" },
+ ["ἰ"]={ "ι","̓" },
+ ["ἱ"]={ "ι","̔" },
+ ["á¼²"]={ "á¼°","Ì€" },
+ ["á¼³"]={ "á¼±","Ì€" },
+ ["á¼´"]={ "á¼°","Ì" },
+ ["á¼µ"]={ "á¼±","Ì" },
+ ["ἶ"]={ "ἰ","͂" },
+ ["á¼·"]={ "á¼±","Í‚" },
+ ["Ἰ"]={ "Ι","̓" },
+ ["Ἱ"]={ "Ι","̔" },
+ ["Ἲ"]={ "Ἰ","̀" },
+ ["á¼»"]={ "á¼¹","Ì€" },
+ ["á¼¼"]={ "Ἰ","Ì" },
+ ["á¼½"]={ "á¼¹","Ì" },
+ ["Ἶ"]={ "Ἰ","͂" },
+ ["Ἷ"]={ "Ἱ","͂" },
+ ["ὀ"]={ "ο","̓" },
+ ["á½"]={ "ο","Ì”" },
+ ["ὂ"]={ "ὀ","̀" },
+ ["ὃ"]={ "á½","Ì€" },
+ ["ὄ"]={ "á½€","Ì" },
+ ["á½…"]={ "á½","Ì" },
+ ["Ὀ"]={ "Ο","̓" },
+ ["Ὁ"]={ "Ο","̔" },
+ ["Ὂ"]={ "Ὀ","̀" },
+ ["Ὃ"]={ "Ὁ","̀" },
+ ["Ὄ"]={ "Ὀ","Ì" },
+ ["á½"]={ "Ὁ","Ì" },
+ ["á½"]={ "Ï…","Ì“" },
+ ["ὑ"]={ "υ","̔" },
+ ["á½’"]={ "á½","Ì€" },
+ ["ὓ"]={ "ὑ","̀" },
+ ["á½”"]={ "á½","Ì" },
+ ["ὕ"]={ "ὑ","Ì" },
+ ["á½–"]={ "á½","Í‚" },
+ ["ὗ"]={ "ὑ","͂" },
+ ["á½™"]={ "Î¥","Ì”" },
+ ["á½›"]={ "á½™","Ì€" },
+ ["á½"]={ "á½™","Ì" },
+ ["Ὗ"]={ "Ὑ","͂" },
+ ["ὠ"]={ "ω","̓" },
+ ["ὡ"]={ "ω","̔" },
+ ["á½¢"]={ "á½ ","Ì€" },
+ ["ὣ"]={ "ὡ","̀" },
+ ["ὤ"]={ "á½ ","Ì" },
+ ["á½¥"]={ "ὡ","Ì" },
+ ["ὦ"]={ "ὠ","͂" },
+ ["ὧ"]={ "ὡ","͂" },
+ ["Ὠ"]={ "Ω","̓" },
+ ["Ὡ"]={ "Ω","̔" },
+ ["Ὢ"]={ "Ὠ","̀" },
+ ["Ὣ"]={ "Ὡ","̀" },
+ ["Ὤ"]={ "Ὠ","Ì" },
+ ["á½­"]={ "Ὡ","Ì" },
+ ["Ὦ"]={ "Ὠ","͂" },
+ ["Ὧ"]={ "Ὡ","͂" },
+ ["ὰ"]={ "α","̀" },
+ ["ὲ"]={ "ε","̀" },
+ ["ὴ"]={ "η","̀" },
+ ["ὶ"]={ "ι","̀" },
+ ["ὸ"]={ "ο","̀" },
+ ["ὺ"]={ "υ","̀" },
+ ["ὼ"]={ "ω","̀" },
+ ["á¾€"]={ "á¼€","Í…" },
+ ["á¾"]={ "á¼","Í…" },
+ ["ᾂ"]={ "ἂ","ͅ" },
+ ["ᾃ"]={ "ἃ","ͅ" },
+ ["ᾄ"]={ "ἄ","ͅ" },
+ ["á¾…"]={ "á¼…","Í…" },
+ ["ᾆ"]={ "ἆ","ͅ" },
+ ["ᾇ"]={ "ἇ","ͅ" },
+ ["ᾈ"]={ "Ἀ","ͅ" },
+ ["ᾉ"]={ "Ἁ","ͅ" },
+ ["ᾊ"]={ "Ἂ","ͅ" },
+ ["ᾋ"]={ "Ἃ","ͅ" },
+ ["ᾌ"]={ "Ἄ","ͅ" },
+ ["á¾"]={ "á¼","Í…" },
+ ["ᾎ"]={ "Ἆ","ͅ" },
+ ["á¾"]={ "á¼","Í…" },
+ ["á¾"]={ "á¼ ","Í…" },
+ ["ᾑ"]={ "ἡ","ͅ" },
+ ["á¾’"]={ "á¼¢","Í…" },
+ ["ᾓ"]={ "ἣ","ͅ" },
+ ["ᾔ"]={ "ἤ","ͅ" },
+ ["ᾕ"]={ "ἥ","ͅ" },
+ ["ᾖ"]={ "ἦ","ͅ" },
+ ["ᾗ"]={ "ἧ","ͅ" },
+ ["ᾘ"]={ "Ἠ","ͅ" },
+ ["ᾙ"]={ "Ἡ","ͅ" },
+ ["ᾚ"]={ "Ἢ","ͅ" },
+ ["ᾛ"]={ "Ἣ","ͅ" },
+ ["ᾜ"]={ "Ἤ","ͅ" },
+ ["á¾"]={ "á¼­","Í…" },
+ ["ᾞ"]={ "Ἦ","ͅ" },
+ ["ᾟ"]={ "Ἧ","ͅ" },
+ ["á¾ "]={ "á½ ","Í…" },
+ ["ᾡ"]={ "ὡ","ͅ" },
+ ["á¾¢"]={ "á½¢","Í…" },
+ ["á¾£"]={ "á½£","Í…" },
+ ["ᾤ"]={ "ὤ","ͅ" },
+ ["á¾¥"]={ "á½¥","Í…" },
+ ["ᾦ"]={ "ὦ","ͅ" },
+ ["ᾧ"]={ "ὧ","ͅ" },
+ ["ᾨ"]={ "Ὠ","ͅ" },
+ ["ᾩ"]={ "Ὡ","ͅ" },
+ ["ᾪ"]={ "Ὢ","ͅ" },
+ ["ᾫ"]={ "Ὣ","ͅ" },
+ ["ᾬ"]={ "Ὤ","ͅ" },
+ ["á¾­"]={ "á½­","Í…" },
+ ["á¾®"]={ "á½®","Í…" },
+ ["ᾯ"]={ "Ὧ","ͅ" },
+ ["ᾰ"]={ "α","̆" },
+ ["ᾱ"]={ "α","̄" },
+ ["á¾²"]={ "á½°","Í…" },
+ ["ᾳ"]={ "α","ͅ" },
+ ["ᾴ"]={ "ά","ͅ" },
+ ["ᾶ"]={ "α","͂" },
+ ["ᾷ"]={ "ᾶ","ͅ" },
+ ["Ᾰ"]={ "Α","̆" },
+ ["Ᾱ"]={ "Α","̄" },
+ ["Ὰ"]={ "Α","̀" },
+ ["ᾼ"]={ "Α","ͅ" },
+ ["á¿"]={ "¨","Í‚" },
+ ["á¿‚"]={ "á½´","Í…" },
+ ["ῃ"]={ "η","ͅ" },
+ ["ῄ"]={ "ή","ͅ" },
+ ["ῆ"]={ "η","͂" },
+ ["ῇ"]={ "ῆ","ͅ" },
+ ["Ὲ"]={ "Ε","̀" },
+ ["Ὴ"]={ "Η","̀" },
+ ["ῌ"]={ "Η","ͅ" },
+ ["á¿"]={ "᾿","Ì€" },
+ ["á¿Ž"]={ "᾿","Ì" },
+ ["á¿"]={ "᾿","Í‚" },
+ ["á¿"]={ "ι","̆" },
+ ["ῑ"]={ "ι","̄" },
+ ["á¿’"]={ "ÏŠ","Ì€" },
+ ["ῖ"]={ "ι","͂" },
+ ["á¿—"]={ "ÏŠ","Í‚" },
+ ["Ῐ"]={ "Ι","̆" },
+ ["Ῑ"]={ "Ι","̄" },
+ ["Ὶ"]={ "Ι","̀" },
+ ["á¿"]={ "῾","Ì€" },
+ ["á¿ž"]={ "῾","Ì" },
+ ["῟"]={ "῾","͂" },
+ ["ῠ"]={ "υ","̆" },
+ ["á¿¡"]={ "Ï…","Ì„" },
+ ["á¿¢"]={ "Ï‹","Ì€" },
+ ["ῤ"]={ "Ï","Ì“" },
+ ["á¿¥"]={ "Ï","Ì”" },
+ ["ῦ"]={ "υ","͂" },
+ ["ῧ"]={ "ϋ","͂" },
+ ["Ῠ"]={ "Υ","̆" },
+ ["á¿©"]={ "Î¥","Ì„" },
+ ["Ὺ"]={ "Υ","̀" },
+ ["Ῥ"]={ "Ρ","̔" },
+ ["῭"]={ "¨","̀" },
+ ["ῲ"]={ "ὼ","ͅ" },
+ ["ῳ"]={ "ω","ͅ" },
+ ["á¿´"]={ "ÏŽ","Í…" },
+ ["ῶ"]={ "ω","͂" },
+ ["ῷ"]={ "ῶ","ͅ" },
+ ["Ὸ"]={ "Ο","̀" },
+ ["Ὼ"]={ "Ω","̀" },
+ ["ῼ"]={ "Ω","ͅ" },
+ ["↚"]={ "â†","̸" },
+ ["↛"]={ "→","̸" },
+ ["↮"]={ "↔","̸" },
+ ["â‡"]={ "â‡","̸" },
+ ["⇎"]={ "⇔","̸" },
+ ["â‡"]={ "⇒","̸" },
+ ["∄"]={ "∃","̸" },
+ ["∉"]={ "∈","̸" },
+ ["∌"]={ "∋","̸" },
+ ["∤"]={ "∣","̸" },
+ ["∦"]={ "∥","̸" },
+ ["â‰"]={ "∼","̸" },
+ ["≄"]={ "≃","̸" },
+ ["≇"]={ "≅","̸" },
+ ["≉"]={ "≈","̸" },
+ ["≠"]={ "=","̸" },
+ ["≢"]={ "≡","̸" },
+ ["≭"]={ "â‰","̸" },
+ ["≮"]={ "<","̸" },
+ ["≯"]={ ">","̸" },
+ ["≰"]={ "≤","̸" },
+ ["≱"]={ "≥","̸" },
+ ["≴"]={ "≲","̸" },
+ ["≵"]={ "≳","̸" },
+ ["≸"]={ "≶","̸" },
+ ["≹"]={ "≷","̸" },
+ ["⊀"]={ "≺","̸" },
+ ["âŠ"]={ "≻","̸" },
+ ["⊄"]={ "⊂","̸" },
+ ["⊅"]={ "⊃","̸" },
+ ["⊈"]={ "⊆","̸" },
+ ["⊉"]={ "⊇","̸" },
+ ["⊬"]={ "⊢","̸" },
+ ["⊭"]={ "⊨","̸" },
+ ["⊮"]={ "⊩","̸" },
+ ["⊯"]={ "⊫","̸" },
+ ["⋠"]={ "≼","̸" },
+ ["⋡"]={ "≽","̸" },
+ ["⋢"]={ "⊑","̸" },
+ ["⋣"]={ "⊒","̸" },
+ ["⋪"]={ "⊲","̸" },
+ ["⋫"]={ "⊳","̸" },
+ ["⋬"]={ "⊴","̸" },
+ ["⋭"]={ "⊵","̸" },
+ ["â«œ"]={ "â«","̸" },
+ ["ãŒ"]={ "ã‹","ã‚™" },
+ ["ãŽ"]={ "ã","ã‚™" },
+ ["ã"]={ "ã","ã‚™" },
+ ["ã’"]={ "ã‘","ã‚™" },
+ ["ã”"]={ "ã“","ã‚™" },
+ ["ã–"]={ "ã•","ã‚™" },
+ ["ã˜"]={ "ã—","ã‚™" },
+ ["ãš"]={ "ã™","ã‚™" },
+ ["ãœ"]={ "ã›","ã‚™" },
+ ["ãž"]={ "ã","ã‚™" },
+ ["ã "]={ "ãŸ","ã‚™" },
+ ["ã¢"]={ "ã¡","ã‚™" },
+ ["ã¥"]={ "ã¤","ã‚™" },
+ ["ã§"]={ "ã¦","ã‚™" },
+ ["ã©"]={ "ã¨","ã‚™" },
+ ["ã°"]={ "ã¯","ã‚™" },
+ ["ã±"]={ "ã¯","ã‚š" },
+ ["ã³"]={ "ã²","ã‚™" },
+ ["ã´"]={ "ã²","ã‚š" },
+ ["ã¶"]={ "ãµ","ã‚™" },
+ ["ã·"]={ "ãµ","ã‚š" },
+ ["ã¹"]={ "ã¸","ã‚™" },
+ ["ãº"]={ "ã¸","ã‚š" },
+ ["ã¼"]={ "ã»","ã‚™" },
+ ["ã½"]={ "ã»","ã‚š" },
+ ["ã‚”"]={ "ã†","ã‚™" },
+ ["ã‚ž"]={ "ã‚","ã‚™" },
+ ["ガ"]={ "カ","゙" },
+ ["ã‚®"]={ "ã‚­","ã‚™" },
+ ["グ"]={ "ク","゙" },
+ ["ゲ"]={ "ケ","゙" },
+ ["ゴ"]={ "コ","゙" },
+ ["ザ"]={ "サ","゙" },
+ ["ジ"]={ "シ","゙" },
+ ["ズ"]={ "ス","゙" },
+ ["ゼ"]={ "セ","゙" },
+ ["ゾ"]={ "ソ","゙" },
+ ["ダ"]={ "タ","゙" },
+ ["ヂ"]={ "ãƒ","ã‚™" },
+ ["ヅ"]={ "ツ","゙" },
+ ["デ"]={ "テ","゙" },
+ ["ド"]={ "ト","゙" },
+ ["ãƒ"]={ "ãƒ","ã‚™" },
+ ["パ"]={ "ãƒ","ã‚š" },
+ ["ビ"]={ "ヒ","゙" },
+ ["ピ"]={ "ヒ","゚" },
+ ["ブ"]={ "フ","゙" },
+ ["プ"]={ "フ","゚" },
+ ["ベ"]={ "ヘ","゙" },
+ ["ペ"]={ "ヘ","゚" },
+ ["ボ"]={ "ホ","゙" },
+ ["ãƒ"]={ "ホ","ã‚š" },
+ ["ヴ"]={ "ウ","゙" },
+ ["ヷ"]={ "ワ","゙" },
+ ["ヸ"]={ "ヰ","゙" },
+ ["ヹ"]={ "ヱ","゙" },
+ ["ヺ"]={ "ヲ","゙" },
+ ["ヾ"]={ "ヽ","゙" },
+ ["ï¬"]={ "×™","Ö´" },
+ ["ײַ"]={ "ײ","ַ" },
+ ["שׁ"]={ "ש","×" },
+ ["שׂ"]={ "ש","ׂ" },
+ ["שּׁ"]={ "ï­‰","×" },
+ ["שּׂ"]={ "שּ","ׂ" },
+ ["אַ"]={ "×","Ö·" },
+ ["אָ"]={ "×","Ö¸" },
+ ["אּ"]={ "×","Ö¼" },
+ ["בּ"]={ "ב","ּ" },
+ ["גּ"]={ "ג","ּ" },
+ ["דּ"]={ "ד","ּ" },
+ ["הּ"]={ "ה","ּ" },
+ ["וּ"]={ "ו","ּ" },
+ ["זּ"]={ "ז","ּ" },
+ ["טּ"]={ "ט","ּ" },
+ ["יּ"]={ "י","ּ" },
+ ["ךּ"]={ "ך","ּ" },
+ ["כּ"]={ "כ","ּ" },
+ ["לּ"]={ "ל","ּ" },
+ ["מּ"]={ "מ","ּ" },
+ ["ï­€"]={ "× ","Ö¼" },
+ ["ï­"]={ "ס","Ö¼" },
+ ["ï­ƒ"]={ "×£","Ö¼" },
+ ["פּ"]={ "פ","ּ" },
+ ["צּ"]={ "צ","ּ" },
+ ["קּ"]={ "ק","ּ" },
+ ["רּ"]={ "ר","ּ" },
+ ["שּ"]={ "ש","ּ" },
+ ["תּ"]={ "ת","ּ" },
+ ["וֹ"]={ "ו","ֹ" },
+ ["בֿ"]={ "ב","ֿ" },
+ ["ï­"]={ "×›","Ö¿" },
+ ["פֿ"]={ "פ","ֿ" },
+ ["𑂚"]={ "𑂙","𑂺" },
+ ["𑂜"]={ "𑂛","𑂺" },
+ ["𑂫"]={ "𑂥","𑂺" },
+ ["𑄮"]={ "𑄱","𑄧" },
+ ["𑄯"]={ "𑄲","𑄧" },
+ ["ð‘‹"]={ "ð‘‡","𑌾" },
+ ["ð‘Œ"]={ "ð‘‡","ð‘—" },
+ ["ð‘’»"]={ "ð‘’¹","ð‘’º" },
+ ["ð‘’¼"]={ "ð‘’¹","ð‘’°" },
+ ["ð‘’¾"]={ "ð‘’¹","ð‘’½" },
+ ["ð‘–º"]={ "ð‘–¸","ð‘–¯" },
+ ["ð‘–»"]={ "ð‘–¹","ð‘–¯" },
+ ["ð…ž"]={ "ð…—","ð…¥" },
+ ["ð…Ÿ"]={ "ð…˜","ð…¥" },
+ ["ð… "]={ "ð…Ÿ","ð…®" },
+ ["ð…¡"]={ "ð…Ÿ","ð…¯" },
+ ["ð…¢"]={ "ð…Ÿ","ð…°" },
+ ["ð…£"]={ "ð…Ÿ","ð…±" },
+ ["ð…¤"]={ "ð…Ÿ","ð…²" },
+ ["ð†»"]={ "ð†¹","ð…¥" },
+ ["ð†¼"]={ "ð†º","ð…¥" },
+ ["ð†½"]={ "ð†»","ð…®" },
+ ["ð†¾"]={ "ð†¼","ð…®" },
+ ["ð†¿"]={ "ð†»","ð…¯" },
+ ["ð‡€"]={ "ð†¼","ð…¯" },
+ },
+ },
+ {
+ ["data"]={
+ ["À"]={ "A","̀" },
+ ["Ã"]={ "A","Ì" },
+ ["Â"]={ "A","̂" },
+ ["Ã"]={ "A","̃" },
+ ["Ä"]={ "A","̈" },
+ ["Ã…"]={ "A","ÌŠ" },
+ ["Ç"]={ "C","̧" },
+ ["È"]={ "E","̀" },
+ ["É"]={ "E","Ì" },
+ ["Ê"]={ "E","̂" },
+ ["Ë"]={ "E","̈" },
+ ["Ì"]={ "I","̀" },
+ ["Ã"]={ "I","Ì" },
+ ["ÃŽ"]={ "I","Ì‚" },
+ ["Ã"]={ "I","̈" },
+ ["Ñ"]={ "N","̃" },
+ ["Ã’"]={ "O","Ì€" },
+ ["Ó"]={ "O","Ì" },
+ ["Ô"]={ "O","̂" },
+ ["Õ"]={ "O","̃" },
+ ["Ö"]={ "O","̈" },
+ ["Ù"]={ "U","̀" },
+ ["Ú"]={ "U","Ì" },
+ ["Û"]={ "U","̂" },
+ ["Ü"]={ "U","̈" },
+ ["Ã"]={ "Y","Ì" },
+ ["à"]={ "a","̀" },
+ ["á"]={ "a","Ì" },
+ ["â"]={ "a","̂" },
+ ["ã"]={ "a","̃" },
+ ["ä"]={ "a","̈" },
+ ["Ã¥"]={ "a","ÌŠ" },
+ ["ç"]={ "c","̧" },
+ ["è"]={ "e","̀" },
+ ["é"]={ "e","Ì" },
+ ["ê"]={ "e","̂" },
+ ["ë"]={ "e","̈" },
+ ["ì"]={ "i","̀" },
+ ["í"]={ "i","Ì" },
+ ["î"]={ "i","̂" },
+ ["ï"]={ "i","̈" },
+ ["ñ"]={ "n","̃" },
+ ["ò"]={ "o","̀" },
+ ["ó"]={ "o","Ì" },
+ ["ô"]={ "o","̂" },
+ ["õ"]={ "o","̃" },
+ ["ö"]={ "o","̈" },
+ ["ù"]={ "u","̀" },
+ ["ú"]={ "u","Ì" },
+ ["û"]={ "u","̂" },
+ ["ü"]={ "u","̈" },
+ ["ý"]={ "y","Ì" },
+ ["ÿ"]={ "y","̈" },
+ ["Ä€"]={ "A","Ì„" },
+ ["Ä"]={ "a","Ì„" },
+ ["Ă"]={ "A","̆" },
+ ["ă"]={ "a","̆" },
+ ["Ą"]={ "A","̨" },
+ ["ą"]={ "a","̨" },
+ ["Ć"]={ "C","Ì" },
+ ["ć"]={ "c","Ì" },
+ ["Ĉ"]={ "C","̂" },
+ ["ĉ"]={ "c","̂" },
+ ["Ċ"]={ "C","̇" },
+ ["ċ"]={ "c","̇" },
+ ["Č"]={ "C","̌" },
+ ["Ä"]={ "c","ÌŒ" },
+ ["Ď"]={ "D","̌" },
+ ["Ä"]={ "d","ÌŒ" },
+ ["Ä’"]={ "E","Ì„" },
+ ["Ä“"]={ "e","Ì„" },
+ ["Ĕ"]={ "E","̆" },
+ ["ĕ"]={ "e","̆" },
+ ["Ė"]={ "E","̇" },
+ ["ė"]={ "e","̇" },
+ ["Ę"]={ "E","̨" },
+ ["ę"]={ "e","̨" },
+ ["Ě"]={ "E","̌" },
+ ["ě"]={ "e","̌" },
+ ["Ĝ"]={ "G","̂" },
+ ["Ä"]={ "g","Ì‚" },
+ ["Ğ"]={ "G","̆" },
+ ["ğ"]={ "g","̆" },
+ ["Ġ"]={ "G","̇" },
+ ["ġ"]={ "g","̇" },
+ ["Ģ"]={ "G","̧" },
+ ["ģ"]={ "g","̧" },
+ ["Ĥ"]={ "H","̂" },
+ ["Ä¥"]={ "h","Ì‚" },
+ ["Ĩ"]={ "I","̃" },
+ ["ĩ"]={ "i","̃" },
+ ["Ī"]={ "I","̄" },
+ ["Ä«"]={ "i","Ì„" },
+ ["Ĭ"]={ "I","̆" },
+ ["ĭ"]={ "i","̆" },
+ ["Į"]={ "I","̨" },
+ ["į"]={ "i","̨" },
+ ["İ"]={ "I","̇" },
+ ["Ä´"]={ "J","Ì‚" },
+ ["ĵ"]={ "j","̂" },
+ ["Ķ"]={ "K","̧" },
+ ["ķ"]={ "k","̧" },
+ ["Ĺ"]={ "L","Ì" },
+ ["ĺ"]={ "l","Ì" },
+ ["Ļ"]={ "L","̧" },
+ ["ļ"]={ "l","̧" },
+ ["Ľ"]={ "L","̌" },
+ ["ľ"]={ "l","̌" },
+ ["Ń"]={ "N","Ì" },
+ ["Å„"]={ "n","Ì" },
+ ["Ņ"]={ "N","̧" },
+ ["ņ"]={ "n","̧" },
+ ["Ň"]={ "N","̌" },
+ ["ň"]={ "n","̌" },
+ ["Ō"]={ "O","̄" },
+ ["Å"]={ "o","Ì„" },
+ ["Ŏ"]={ "O","̆" },
+ ["Å"]={ "o","̆" },
+ ["Å"]={ "O","Ì‹" },
+ ["Å‘"]={ "o","Ì‹" },
+ ["Å”"]={ "R","Ì" },
+ ["Å•"]={ "r","Ì" },
+ ["Ŗ"]={ "R","̧" },
+ ["ŗ"]={ "r","̧" },
+ ["Ř"]={ "R","̌" },
+ ["ř"]={ "r","̌" },
+ ["Åš"]={ "S","Ì" },
+ ["Å›"]={ "s","Ì" },
+ ["Ŝ"]={ "S","̂" },
+ ["Å"]={ "s","Ì‚" },
+ ["Ş"]={ "S","̧" },
+ ["ş"]={ "s","̧" },
+ ["Š"]={ "S","̌" },
+ ["š"]={ "s","̌" },
+ ["Ţ"]={ "T","̧" },
+ ["ţ"]={ "t","̧" },
+ ["Ť"]={ "T","̌" },
+ ["ť"]={ "t","̌" },
+ ["Ũ"]={ "U","̃" },
+ ["ũ"]={ "u","̃" },
+ ["Ū"]={ "U","̄" },
+ ["Å«"]={ "u","Ì„" },
+ ["Ŭ"]={ "U","̆" },
+ ["ŭ"]={ "u","̆" },
+ ["Å®"]={ "U","ÌŠ" },
+ ["ů"]={ "u","̊" },
+ ["Å°"]={ "U","Ì‹" },
+ ["ű"]={ "u","̋" },
+ ["Ų"]={ "U","̨" },
+ ["ų"]={ "u","̨" },
+ ["Å´"]={ "W","Ì‚" },
+ ["ŵ"]={ "w","̂" },
+ ["Ŷ"]={ "Y","̂" },
+ ["Å·"]={ "y","Ì‚" },
+ ["Ÿ"]={ "Y","̈" },
+ ["Ź"]={ "Z","Ì" },
+ ["ź"]={ "z","Ì" },
+ ["Ż"]={ "Z","̇" },
+ ["ż"]={ "z","̇" },
+ ["Ž"]={ "Z","̌" },
+ ["ž"]={ "z","̌" },
+ ["Æ "]={ "O","Ì›" },
+ ["Æ¡"]={ "o","Ì›" },
+ ["Ư"]={ "U","̛" },
+ ["Æ°"]={ "u","Ì›" },
+ ["Ç"]={ "A","ÌŒ" },
+ ["ǎ"]={ "a","̌" },
+ ["Ç"]={ "I","ÌŒ" },
+ ["Ç"]={ "i","ÌŒ" },
+ ["Ǒ"]={ "O","̌" },
+ ["ǒ"]={ "o","̌" },
+ ["Ǔ"]={ "U","̌" },
+ ["ǔ"]={ "u","̌" },
+ ["Ǖ"]={ "Ü","̄" },
+ ["ǖ"]={ "ü","̄" },
+ ["Ç—"]={ "Ãœ","Ì" },
+ ["ǘ"]={ "ü","Ì" },
+ ["Ǚ"]={ "Ü","̌" },
+ ["ǚ"]={ "ü","̌" },
+ ["Ǜ"]={ "Ü","̀" },
+ ["ǜ"]={ "ü","̀" },
+ ["Ǟ"]={ "Ä","̄" },
+ ["ǟ"]={ "ä","̄" },
+ ["Ǡ"]={ "Ȧ","̄" },
+ ["ǡ"]={ "ȧ","̄" },
+ ["Ǣ"]={ "Æ","̄" },
+ ["ǣ"]={ "æ","̄" },
+ ["Ǧ"]={ "G","̌" },
+ ["ǧ"]={ "g","̌" },
+ ["Ǩ"]={ "K","̌" },
+ ["ǩ"]={ "k","̌" },
+ ["Ǫ"]={ "O","̨" },
+ ["ǫ"]={ "o","̨" },
+ ["Ǭ"]={ "Ǫ","̄" },
+ ["Ç­"]={ "Ç«","Ì„" },
+ ["Ǯ"]={ "Ʒ","̌" },
+ ["ǯ"]={ "ʒ","̌" },
+ ["ǰ"]={ "j","̌" },
+ ["Ç´"]={ "G","Ì" },
+ ["ǵ"]={ "g","Ì" },
+ ["Ǹ"]={ "N","̀" },
+ ["ǹ"]={ "n","̀" },
+ ["Ǻ"]={ "Ã…","Ì" },
+ ["Ç»"]={ "Ã¥","Ì" },
+ ["Ǽ"]={ "Æ","Ì" },
+ ["ǽ"]={ "æ","Ì" },
+ ["Ǿ"]={ "Ø","Ì" },
+ ["Ç¿"]={ "ø","Ì" },
+ ["È€"]={ "A","Ì" },
+ ["È"]={ "a","Ì" },
+ ["È‚"]={ "A","Ì‘" },
+ ["ȃ"]={ "a","̑" },
+ ["È„"]={ "E","Ì" },
+ ["È…"]={ "e","Ì" },
+ ["Ȇ"]={ "E","̑" },
+ ["ȇ"]={ "e","̑" },
+ ["Ȉ"]={ "I","Ì" },
+ ["ȉ"]={ "i","Ì" },
+ ["ÈŠ"]={ "I","Ì‘" },
+ ["È‹"]={ "i","Ì‘" },
+ ["ÈŒ"]={ "O","Ì" },
+ ["È"]={ "o","Ì" },
+ ["ÈŽ"]={ "O","Ì‘" },
+ ["È"]={ "o","Ì‘" },
+ ["È"]={ "R","Ì" },
+ ["È‘"]={ "r","Ì" },
+ ["È’"]={ "R","Ì‘" },
+ ["È“"]={ "r","Ì‘" },
+ ["È”"]={ "U","Ì" },
+ ["È•"]={ "u","Ì" },
+ ["È–"]={ "U","Ì‘" },
+ ["È—"]={ "u","Ì‘" },
+ ["Ș"]={ "S","̦" },
+ ["ș"]={ "s","̦" },
+ ["Ț"]={ "T","̦" },
+ ["ț"]={ "t","̦" },
+ ["Ȟ"]={ "H","̌" },
+ ["ȟ"]={ "h","̌" },
+ ["Ȧ"]={ "A","̇" },
+ ["ȧ"]={ "a","̇" },
+ ["Ȩ"]={ "E","̧" },
+ ["ȩ"]={ "e","̧" },
+ ["Ȫ"]={ "Ö","̄" },
+ ["ȫ"]={ "ö","̄" },
+ ["Ȭ"]={ "Õ","̄" },
+ ["ȭ"]={ "õ","̄" },
+ ["Ȯ"]={ "O","̇" },
+ ["ȯ"]={ "o","̇" },
+ ["È°"]={ "È®","Ì„" },
+ ["ȱ"]={ "ȯ","̄" },
+ ["Ȳ"]={ "Y","̄" },
+ ["ȳ"]={ "y","̄" },
+ ["Í„"]={ "̈","Ì" },
+ ["Î…"]={ "¨","Ì" },
+ ["Ά"]={ "Α","Ì" },
+ ["Έ"]={ "Ε","Ì" },
+ ["Ή"]={ "Η","Ì" },
+ ["Ί"]={ "Ι","Ì" },
+ ["ÎŒ"]={ "Ο","Ì" },
+ ["ÎŽ"]={ "Î¥","Ì" },
+ ["Î"]={ "Ω","Ì" },
+ ["Î"]={ "ÏŠ","Ì" },
+ ["Ϊ"]={ "Ι","̈" },
+ ["Ϋ"]={ "Υ","̈" },
+ ["ά"]={ "α","Ì" },
+ ["έ"]={ "ε","Ì" },
+ ["ή"]={ "η","Ì" },
+ ["ί"]={ "ι","Ì" },
+ ["ΰ"]={ "Ï‹","Ì" },
+ ["ϊ"]={ "ι","̈" },
+ ["ϋ"]={ "υ","̈" },
+ ["ÏŒ"]={ "ο","Ì" },
+ ["Ï"]={ "Ï…","Ì" },
+ ["ÏŽ"]={ "ω","Ì" },
+ ["Ï“"]={ "Ï’","Ì" },
+ ["ϔ"]={ "ϒ","̈" },
+ ["Ѐ"]={ "Е","̀" },
+ ["Ð"]={ "Е","̈" },
+ ["Ѓ"]={ "Г","Ì" },
+ ["Ї"]={ "І","̈" },
+ ["ÐŒ"]={ "К","Ì" },
+ ["Ð"]={ "И","Ì€" },
+ ["Ў"]={ "У","̆" },
+ ["Й"]={ "И","̆" },
+ ["й"]={ "и","̆" },
+ ["Ñ"]={ "е","Ì€" },
+ ["ё"]={ "е","̈" },
+ ["Ñ“"]={ "г","Ì" },
+ ["ї"]={ "і","̈" },
+ ["Ñœ"]={ "к","Ì" },
+ ["Ñ"]={ "и","Ì€" },
+ ["ў"]={ "у","̆" },
+ ["Ѷ"]={ "Ñ´","Ì" },
+ ["Ñ·"]={ "ѵ","Ì" },
+ ["Ó"]={ "Ж","̆" },
+ ["ӂ"]={ "ж","̆" },
+ ["Ó"]={ "Ð","̆" },
+ ["ӑ"]={ "а","̆" },
+ ["Ó’"]={ "Ð","̈" },
+ ["ӓ"]={ "а","̈" },
+ ["Ӗ"]={ "Е","̆" },
+ ["ӗ"]={ "е","̆" },
+ ["Ӛ"]={ "Ә","̈" },
+ ["ӛ"]={ "ә","̈" },
+ ["Ӝ"]={ "Ж","̈" },
+ ["Ó"]={ "ж","̈" },
+ ["Ӟ"]={ "З","̈" },
+ ["ӟ"]={ "з","̈" },
+ ["Ӣ"]={ "И","̄" },
+ ["ӣ"]={ "и","̄" },
+ ["Ӥ"]={ "И","̈" },
+ ["ӥ"]={ "и","̈" },
+ ["Ӧ"]={ "О","̈" },
+ ["ӧ"]={ "о","̈" },
+ ["Ӫ"]={ "Ө","̈" },
+ ["ӫ"]={ "ө","̈" },
+ ["Ӭ"]={ "Э","̈" },
+ ["Ó­"]={ "Ñ","̈" },
+ ["Ӯ"]={ "У","̄" },
+ ["ӯ"]={ "у","̄" },
+ ["Ӱ"]={ "У","̈" },
+ ["ӱ"]={ "у","̈" },
+ ["Ӳ"]={ "У","̋" },
+ ["ӳ"]={ "у","̋" },
+ ["Ӵ"]={ "Ч","̈" },
+ ["ӵ"]={ "ч","̈" },
+ ["Ӹ"]={ "Ы","̈" },
+ ["ӹ"]={ "ы","̈" },
+ ["آ"]={ "ا","ٓ" },
+ ["أ"]={ "ا","ٔ" },
+ ["ؤ"]={ "و","ٔ" },
+ ["إ"]={ "ا","ٕ" },
+ ["ئ"]={ "ي","ٔ" },
+ ["Û€"]={ "Û•","Ù”" },
+ ["Û‚"]={ "Û","Ù”" },
+ ["Û“"]={ "Û’","Ù”" },
+ ["ऩ"]={ "न","़" },
+ ["ऱ"]={ "र","़" },
+ ["ऴ"]={ "ळ","़" },
+ ["क़"]={ "क","़" },
+ ["ख़"]={ "ख","़" },
+ ["ग़"]={ "ग","़" },
+ ["ज़"]={ "ज","़" },
+ ["ड़"]={ "ड","़" },
+ ["à¥"]={ "ढ","़" },
+ ["फ़"]={ "फ","़" },
+ ["य़"]={ "य","़" },
+ ["ো"]={ "ে","া" },
+ ["ৌ"]={ "ে","ৗ" },
+ ["ড়"]={ "ড","়" },
+ ["à§"]={ "ঢ","়" },
+ ["য়"]={ "য","়" },
+ ["ਲ਼"]={ "ਲ","਼" },
+ ["ਸ਼"]={ "ਸ","਼" },
+ ["ਖ਼"]={ "ਖ","਼" },
+ ["ਗ਼"]={ "ਗ","਼" },
+ ["ਜ਼"]={ "ਜ","਼" },
+ ["ਫ਼"]={ "ਫ","਼" },
+ ["à­ˆ"]={ "à­‡","à­–" },
+ ["ୋ"]={ "େ","ା" },
+ ["ୌ"]={ "େ","ୗ" },
+ ["ଡ଼"]={ "ଡ","଼" },
+ ["à­"]={ "ଢ","଼" },
+ ["ஔ"]={ "ஒ","ௗ" },
+ ["ொ"]={ "ெ","ா" },
+ ["ோ"]={ "ே","ா" },
+ ["ௌ"]={ "ெ","ௗ" },
+ ["ై"]={ "ె","ౖ" },
+ ["ೀ"]={ "ಿ","ೕ" },
+ ["ೇ"]={ "ೆ","ೕ" },
+ ["ೈ"]={ "ೆ","ೖ" },
+ ["ೊ"]={ "ೆ","ೂ" },
+ ["ೋ"]={ "ೊ","ೕ" },
+ ["ൊ"]={ "െ","ാ" },
+ ["ോ"]={ "േ","ാ" },
+ ["ൌ"]={ "െ","ൗ" },
+ ["à·š"]={ "à·™","à·Š" },
+ ["à·œ"]={ "à·™","à·" },
+ ["à·"]={ "à·œ","à·Š" },
+ ["à·ž"]={ "à·™","à·Ÿ" },
+ ["གྷ"]={ "ག","ྷ" },
+ ["à½"]={ "ཌ","ྷ" },
+ ["དྷ"]={ "ད","ྷ" },
+ ["བྷ"]={ "བ","ྷ" },
+ ["ཛྷ"]={ "ཛ","ྷ" },
+ ["ཀྵ"]={ "ཀ","ྵ" },
+ ["ཱི"]={ "ཱ","ི" },
+ ["ཱུ"]={ "ཱ","ུ" },
+ ["ྲྀ"]={ "ྲ","ྀ" },
+ ["ླྀ"]={ "ླ","ྀ" },
+ ["à¾"]={ "ཱ","ྀ" },
+ ["ྒྷ"]={ "ྒ","ྷ" },
+ ["à¾"]={ "ྜ","ྷ" },
+ ["ྡྷ"]={ "ྡ","ྷ" },
+ ["ྦྷ"]={ "ྦ","ྷ" },
+ ["ྫྷ"]={ "ྫ","ྷ" },
+ ["ྐྵ"]={ "à¾","ྵ" },
+ ["ဦ"]={ "ဥ","ီ" },
+ ["ᬆ"]={ "ᬅ","ᬵ" },
+ ["ᬈ"]={ "ᬇ","ᬵ" },
+ ["ᬊ"]={ "ᬉ","ᬵ" },
+ ["ᬌ"]={ "ᬋ","ᬵ" },
+ ["ᬎ"]={ "á¬","ᬵ" },
+ ["ᬒ"]={ "ᬑ","ᬵ" },
+ ["ᬻ"]={ "ᬺ","ᬵ" },
+ ["ᬽ"]={ "ᬼ","ᬵ" },
+ ["ᭀ"]={ "ᬾ","ᬵ" },
+ ["á­"]={ "ᬿ","ᬵ" },
+ ["ᭃ"]={ "ᭂ","ᬵ" },
+ ["Ḁ"]={ "A","̥" },
+ ["á¸"]={ "a","Ì¥" },
+ ["Ḃ"]={ "B","̇" },
+ ["ḃ"]={ "b","̇" },
+ ["Ḅ"]={ "B","̣" },
+ ["ḅ"]={ "b","̣" },
+ ["Ḇ"]={ "B","̱" },
+ ["ḇ"]={ "b","̱" },
+ ["Ḉ"]={ "Ç","Ì" },
+ ["ḉ"]={ "ç","Ì" },
+ ["Ḋ"]={ "D","̇" },
+ ["ḋ"]={ "d","̇" },
+ ["Ḍ"]={ "D","̣" },
+ ["á¸"]={ "d","Ì£" },
+ ["Ḏ"]={ "D","̱" },
+ ["á¸"]={ "d","̱" },
+ ["á¸"]={ "D","̧" },
+ ["ḑ"]={ "d","̧" },
+ ["Ḓ"]={ "D","̭" },
+ ["ḓ"]={ "d","̭" },
+ ["Ḕ"]={ "Ē","̀" },
+ ["ḕ"]={ "ē","̀" },
+ ["Ḗ"]={ "Ä’","Ì" },
+ ["ḗ"]={ "Ä“","Ì" },
+ ["Ḙ"]={ "E","̭" },
+ ["ḙ"]={ "e","̭" },
+ ["Ḛ"]={ "E","̰" },
+ ["ḛ"]={ "e","̰" },
+ ["Ḝ"]={ "Ȩ","̆" },
+ ["á¸"]={ "È©","̆" },
+ ["Ḟ"]={ "F","̇" },
+ ["ḟ"]={ "f","̇" },
+ ["Ḡ"]={ "G","̄" },
+ ["ḡ"]={ "g","̄" },
+ ["Ḣ"]={ "H","̇" },
+ ["ḣ"]={ "h","̇" },
+ ["Ḥ"]={ "H","̣" },
+ ["ḥ"]={ "h","̣" },
+ ["Ḧ"]={ "H","̈" },
+ ["ḧ"]={ "h","̈" },
+ ["Ḩ"]={ "H","̧" },
+ ["ḩ"]={ "h","̧" },
+ ["Ḫ"]={ "H","̮" },
+ ["ḫ"]={ "h","̮" },
+ ["Ḭ"]={ "I","̰" },
+ ["ḭ"]={ "i","̰" },
+ ["Ḯ"]={ "Ã","Ì" },
+ ["ḯ"]={ "ï","Ì" },
+ ["Ḱ"]={ "K","Ì" },
+ ["ḱ"]={ "k","Ì" },
+ ["Ḳ"]={ "K","̣" },
+ ["ḳ"]={ "k","̣" },
+ ["Ḵ"]={ "K","̱" },
+ ["ḵ"]={ "k","̱" },
+ ["Ḷ"]={ "L","̣" },
+ ["ḷ"]={ "l","̣" },
+ ["Ḹ"]={ "Ḷ","̄" },
+ ["ḹ"]={ "ḷ","̄" },
+ ["Ḻ"]={ "L","̱" },
+ ["ḻ"]={ "l","̱" },
+ ["Ḽ"]={ "L","̭" },
+ ["ḽ"]={ "l","̭" },
+ ["Ḿ"]={ "M","Ì" },
+ ["ḿ"]={ "m","Ì" },
+ ["Ṁ"]={ "M","̇" },
+ ["á¹"]={ "m","̇" },
+ ["Ṃ"]={ "M","̣" },
+ ["ṃ"]={ "m","̣" },
+ ["Ṅ"]={ "N","̇" },
+ ["ṅ"]={ "n","̇" },
+ ["Ṇ"]={ "N","̣" },
+ ["ṇ"]={ "n","̣" },
+ ["Ṉ"]={ "N","̱" },
+ ["ṉ"]={ "n","̱" },
+ ["Ṋ"]={ "N","̭" },
+ ["ṋ"]={ "n","̭" },
+ ["Ṍ"]={ "Õ","Ì" },
+ ["á¹"]={ "õ","Ì" },
+ ["Ṏ"]={ "Õ","̈" },
+ ["á¹"]={ "õ","̈" },
+ ["á¹"]={ "ÅŒ","Ì€" },
+ ["ṑ"]={ "Å","Ì€" },
+ ["á¹’"]={ "ÅŒ","Ì" },
+ ["ṓ"]={ "Å","Ì" },
+ ["á¹”"]={ "P","Ì" },
+ ["ṕ"]={ "p","Ì" },
+ ["Ṗ"]={ "P","̇" },
+ ["ṗ"]={ "p","̇" },
+ ["Ṙ"]={ "R","̇" },
+ ["ṙ"]={ "r","̇" },
+ ["Ṛ"]={ "R","̣" },
+ ["á¹›"]={ "r","Ì£" },
+ ["Ṝ"]={ "Ṛ","̄" },
+ ["á¹"]={ "á¹›","Ì„" },
+ ["Ṟ"]={ "R","̱" },
+ ["ṟ"]={ "r","̱" },
+ ["Ṡ"]={ "S","̇" },
+ ["ṡ"]={ "s","̇" },
+ ["á¹¢"]={ "S","Ì£" },
+ ["á¹£"]={ "s","Ì£" },
+ ["Ṥ"]={ "Ś","̇" },
+ ["ṥ"]={ "ś","̇" },
+ ["Ṧ"]={ "Š","̇" },
+ ["ṧ"]={ "š","̇" },
+ ["Ṩ"]={ "Ṣ","̇" },
+ ["ṩ"]={ "ṣ","̇" },
+ ["Ṫ"]={ "T","̇" },
+ ["ṫ"]={ "t","̇" },
+ ["Ṭ"]={ "T","̣" },
+ ["á¹­"]={ "t","Ì£" },
+ ["Ṯ"]={ "T","̱" },
+ ["ṯ"]={ "t","̱" },
+ ["á¹°"]={ "T","Ì­" },
+ ["á¹±"]={ "t","Ì­" },
+ ["Ṳ"]={ "U","̤" },
+ ["ṳ"]={ "u","̤" },
+ ["á¹´"]={ "U","Ì°" },
+ ["á¹µ"]={ "u","Ì°" },
+ ["Ṷ"]={ "U","̭" },
+ ["á¹·"]={ "u","Ì­" },
+ ["Ṹ"]={ "Ũ","Ì" },
+ ["á¹¹"]={ "Å©","Ì" },
+ ["Ṻ"]={ "Ū","̈" },
+ ["ṻ"]={ "ū","̈" },
+ ["Ṽ"]={ "V","̃" },
+ ["ṽ"]={ "v","̃" },
+ ["á¹¾"]={ "V","Ì£" },
+ ["ṿ"]={ "v","̣" },
+ ["Ẁ"]={ "W","̀" },
+ ["áº"]={ "w","Ì€" },
+ ["Ẃ"]={ "W","Ì" },
+ ["ẃ"]={ "w","Ì" },
+ ["Ẅ"]={ "W","̈" },
+ ["ẅ"]={ "w","̈" },
+ ["Ẇ"]={ "W","̇" },
+ ["ẇ"]={ "w","̇" },
+ ["Ẉ"]={ "W","̣" },
+ ["ẉ"]={ "w","̣" },
+ ["Ẋ"]={ "X","̇" },
+ ["ẋ"]={ "x","̇" },
+ ["Ẍ"]={ "X","̈" },
+ ["áº"]={ "x","̈" },
+ ["Ẏ"]={ "Y","̇" },
+ ["áº"]={ "y","̇" },
+ ["áº"]={ "Z","Ì‚" },
+ ["ẑ"]={ "z","̂" },
+ ["Ẓ"]={ "Z","̣" },
+ ["ẓ"]={ "z","̣" },
+ ["Ẕ"]={ "Z","̱" },
+ ["ẕ"]={ "z","̱" },
+ ["ẖ"]={ "h","̱" },
+ ["ẗ"]={ "t","̈" },
+ ["ẘ"]={ "w","̊" },
+ ["ẙ"]={ "y","̊" },
+ ["ẛ"]={ "ſ","̇" },
+ ["Ạ"]={ "A","̣" },
+ ["ạ"]={ "a","̣" },
+ ["Ả"]={ "A","̉" },
+ ["ả"]={ "a","̉" },
+ ["Ấ"]={ "Â","Ì" },
+ ["ấ"]={ "â","Ì" },
+ ["Ầ"]={ "Â","̀" },
+ ["ầ"]={ "â","̀" },
+ ["Ẩ"]={ "Â","̉" },
+ ["ẩ"]={ "â","̉" },
+ ["Ẫ"]={ "Â","̃" },
+ ["ẫ"]={ "â","̃" },
+ ["Ậ"]={ "Ạ","̂" },
+ ["ậ"]={ "ạ","̂" },
+ ["Ắ"]={ "Ä‚","Ì" },
+ ["ắ"]={ "ă","Ì" },
+ ["Ằ"]={ "Ă","̀" },
+ ["ằ"]={ "ă","̀" },
+ ["Ẳ"]={ "Ă","̉" },
+ ["ẳ"]={ "ă","̉" },
+ ["Ẵ"]={ "Ă","̃" },
+ ["ẵ"]={ "ă","̃" },
+ ["Ặ"]={ "Ạ","̆" },
+ ["ặ"]={ "ạ","̆" },
+ ["Ẹ"]={ "E","̣" },
+ ["ẹ"]={ "e","̣" },
+ ["Ẻ"]={ "E","̉" },
+ ["ẻ"]={ "e","̉" },
+ ["Ẽ"]={ "E","̃" },
+ ["ẽ"]={ "e","̃" },
+ ["Ế"]={ "Ê","Ì" },
+ ["ế"]={ "ê","Ì" },
+ ["Ề"]={ "Ê","̀" },
+ ["á»"]={ "ê","Ì€" },
+ ["Ể"]={ "Ê","̉" },
+ ["ể"]={ "ê","̉" },
+ ["Ễ"]={ "Ê","̃" },
+ ["ễ"]={ "ê","̃" },
+ ["Ệ"]={ "Ẹ","̂" },
+ ["ệ"]={ "ẹ","̂" },
+ ["Ỉ"]={ "I","̉" },
+ ["ỉ"]={ "i","̉" },
+ ["Ị"]={ "I","̣" },
+ ["ị"]={ "i","̣" },
+ ["Ọ"]={ "O","̣" },
+ ["á»"]={ "o","Ì£" },
+ ["Ỏ"]={ "O","̉" },
+ ["á»"]={ "o","̉" },
+ ["á»"]={ "Ô","Ì" },
+ ["ố"]={ "ô","Ì" },
+ ["Ồ"]={ "Ô","̀" },
+ ["ồ"]={ "ô","̀" },
+ ["Ổ"]={ "Ô","̉" },
+ ["ổ"]={ "ô","̉" },
+ ["Ỗ"]={ "Ô","̃" },
+ ["ỗ"]={ "ô","̃" },
+ ["Ộ"]={ "Ọ","̂" },
+ ["á»™"]={ "á»","Ì‚" },
+ ["Ớ"]={ "Æ ","Ì" },
+ ["á»›"]={ "Æ¡","Ì" },
+ ["Ờ"]={ "Ơ","̀" },
+ ["á»"]={ "Æ¡","Ì€" },
+ ["Ở"]={ "Ơ","̉" },
+ ["ở"]={ "ơ","̉" },
+ ["Ỡ"]={ "Ơ","̃" },
+ ["ỡ"]={ "ơ","̃" },
+ ["Ợ"]={ "Ơ","̣" },
+ ["ợ"]={ "ơ","̣" },
+ ["Ụ"]={ "U","̣" },
+ ["ụ"]={ "u","̣" },
+ ["Ủ"]={ "U","̉" },
+ ["ủ"]={ "u","̉" },
+ ["Ứ"]={ "Ư","Ì" },
+ ["ứ"]={ "Æ°","Ì" },
+ ["Ừ"]={ "Ư","̀" },
+ ["ừ"]={ "ư","̀" },
+ ["Ử"]={ "Ư","̉" },
+ ["ử"]={ "ư","̉" },
+ ["Ữ"]={ "Ư","̃" },
+ ["ữ"]={ "ư","̃" },
+ ["Ự"]={ "Ư","̣" },
+ ["á»±"]={ "Æ°","Ì£" },
+ ["Ỳ"]={ "Y","̀" },
+ ["ỳ"]={ "y","̀" },
+ ["á»´"]={ "Y","Ì£" },
+ ["ỵ"]={ "y","̣" },
+ ["Ỷ"]={ "Y","̉" },
+ ["ỷ"]={ "y","̉" },
+ ["Ỹ"]={ "Y","̃" },
+ ["ỹ"]={ "y","̃" },
+ ["ἀ"]={ "α","̓" },
+ ["á¼"]={ "α","Ì”" },
+ ["ἂ"]={ "ἀ","̀" },
+ ["ἃ"]={ "á¼","Ì€" },
+ ["ἄ"]={ "á¼€","Ì" },
+ ["á¼…"]={ "á¼","Ì" },
+ ["ἆ"]={ "ἀ","͂" },
+ ["ἇ"]={ "á¼","Í‚" },
+ ["Ἀ"]={ "Α","̓" },
+ ["Ἁ"]={ "Α","̔" },
+ ["Ἂ"]={ "Ἀ","̀" },
+ ["Ἃ"]={ "Ἁ","̀" },
+ ["Ἄ"]={ "Ἀ","Ì" },
+ ["á¼"]={ "Ἁ","Ì" },
+ ["Ἆ"]={ "Ἀ","͂" },
+ ["á¼"]={ "Ἁ","Í‚" },
+ ["á¼"]={ "ε","Ì“" },
+ ["ἑ"]={ "ε","̔" },
+ ["á¼’"]={ "á¼","Ì€" },
+ ["ἓ"]={ "ἑ","̀" },
+ ["á¼”"]={ "á¼","Ì" },
+ ["ἕ"]={ "ἑ","Ì" },
+ ["Ἐ"]={ "Ε","̓" },
+ ["Ἑ"]={ "Ε","̔" },
+ ["Ἒ"]={ "Ἐ","̀" },
+ ["á¼›"]={ "á¼™","Ì€" },
+ ["Ἔ"]={ "Ἐ","Ì" },
+ ["á¼"]={ "á¼™","Ì" },
+ ["ἠ"]={ "η","̓" },
+ ["ἡ"]={ "η","̔" },
+ ["á¼¢"]={ "á¼ ","Ì€" },
+ ["ἣ"]={ "ἡ","̀" },
+ ["ἤ"]={ "á¼ ","Ì" },
+ ["á¼¥"]={ "ἡ","Ì" },
+ ["ἦ"]={ "ἠ","͂" },
+ ["ἧ"]={ "ἡ","͂" },
+ ["Ἠ"]={ "Η","̓" },
+ ["Ἡ"]={ "Η","̔" },
+ ["Ἢ"]={ "Ἠ","̀" },
+ ["Ἣ"]={ "Ἡ","̀" },
+ ["Ἤ"]={ "Ἠ","Ì" },
+ ["á¼­"]={ "Ἡ","Ì" },
+ ["Ἦ"]={ "Ἠ","͂" },
+ ["Ἧ"]={ "Ἡ","͂" },
+ ["ἰ"]={ "ι","̓" },
+ ["ἱ"]={ "ι","̔" },
+ ["á¼²"]={ "á¼°","Ì€" },
+ ["á¼³"]={ "á¼±","Ì€" },
+ ["á¼´"]={ "á¼°","Ì" },
+ ["á¼µ"]={ "á¼±","Ì" },
+ ["ἶ"]={ "ἰ","͂" },
+ ["á¼·"]={ "á¼±","Í‚" },
+ ["Ἰ"]={ "Ι","̓" },
+ ["Ἱ"]={ "Ι","̔" },
+ ["Ἲ"]={ "Ἰ","̀" },
+ ["á¼»"]={ "á¼¹","Ì€" },
+ ["á¼¼"]={ "Ἰ","Ì" },
+ ["á¼½"]={ "á¼¹","Ì" },
+ ["Ἶ"]={ "Ἰ","͂" },
+ ["Ἷ"]={ "Ἱ","͂" },
+ ["ὀ"]={ "ο","̓" },
+ ["á½"]={ "ο","Ì”" },
+ ["ὂ"]={ "ὀ","̀" },
+ ["ὃ"]={ "á½","Ì€" },
+ ["ὄ"]={ "á½€","Ì" },
+ ["á½…"]={ "á½","Ì" },
+ ["Ὀ"]={ "Ο","̓" },
+ ["Ὁ"]={ "Ο","̔" },
+ ["Ὂ"]={ "Ὀ","̀" },
+ ["Ὃ"]={ "Ὁ","̀" },
+ ["Ὄ"]={ "Ὀ","Ì" },
+ ["á½"]={ "Ὁ","Ì" },
+ ["á½"]={ "Ï…","Ì“" },
+ ["ὑ"]={ "υ","̔" },
+ ["á½’"]={ "á½","Ì€" },
+ ["ὓ"]={ "ὑ","̀" },
+ ["á½”"]={ "á½","Ì" },
+ ["ὕ"]={ "ὑ","Ì" },
+ ["á½–"]={ "á½","Í‚" },
+ ["ὗ"]={ "ὑ","͂" },
+ ["á½™"]={ "Î¥","Ì”" },
+ ["á½›"]={ "á½™","Ì€" },
+ ["á½"]={ "á½™","Ì" },
+ ["Ὗ"]={ "Ὑ","͂" },
+ ["ὠ"]={ "ω","̓" },
+ ["ὡ"]={ "ω","̔" },
+ ["á½¢"]={ "á½ ","Ì€" },
+ ["ὣ"]={ "ὡ","̀" },
+ ["ὤ"]={ "á½ ","Ì" },
+ ["á½¥"]={ "ὡ","Ì" },
+ ["ὦ"]={ "ὠ","͂" },
+ ["ὧ"]={ "ὡ","͂" },
+ ["Ὠ"]={ "Ω","̓" },
+ ["Ὡ"]={ "Ω","̔" },
+ ["Ὢ"]={ "Ὠ","̀" },
+ ["Ὣ"]={ "Ὡ","̀" },
+ ["Ὤ"]={ "Ὠ","Ì" },
+ ["á½­"]={ "Ὡ","Ì" },
+ ["Ὦ"]={ "Ὠ","͂" },
+ ["Ὧ"]={ "Ὡ","͂" },
+ ["ὰ"]={ "α","̀" },
+ ["ὲ"]={ "ε","̀" },
+ ["ὴ"]={ "η","̀" },
+ ["ὶ"]={ "ι","̀" },
+ ["ὸ"]={ "ο","̀" },
+ ["ὺ"]={ "υ","̀" },
+ ["ὼ"]={ "ω","̀" },
+ ["á¾€"]={ "á¼€","Í…" },
+ ["á¾"]={ "á¼","Í…" },
+ ["ᾂ"]={ "ἂ","ͅ" },
+ ["ᾃ"]={ "ἃ","ͅ" },
+ ["ᾄ"]={ "ἄ","ͅ" },
+ ["á¾…"]={ "á¼…","Í…" },
+ ["ᾆ"]={ "ἆ","ͅ" },
+ ["ᾇ"]={ "ἇ","ͅ" },
+ ["ᾈ"]={ "Ἀ","ͅ" },
+ ["ᾉ"]={ "Ἁ","ͅ" },
+ ["ᾊ"]={ "Ἂ","ͅ" },
+ ["ᾋ"]={ "Ἃ","ͅ" },
+ ["ᾌ"]={ "Ἄ","ͅ" },
+ ["á¾"]={ "á¼","Í…" },
+ ["ᾎ"]={ "Ἆ","ͅ" },
+ ["á¾"]={ "á¼","Í…" },
+ ["á¾"]={ "á¼ ","Í…" },
+ ["ᾑ"]={ "ἡ","ͅ" },
+ ["á¾’"]={ "á¼¢","Í…" },
+ ["ᾓ"]={ "ἣ","ͅ" },
+ ["ᾔ"]={ "ἤ","ͅ" },
+ ["ᾕ"]={ "ἥ","ͅ" },
+ ["ᾖ"]={ "ἦ","ͅ" },
+ ["ᾗ"]={ "ἧ","ͅ" },
+ ["ᾘ"]={ "Ἠ","ͅ" },
+ ["ᾙ"]={ "Ἡ","ͅ" },
+ ["ᾚ"]={ "Ἢ","ͅ" },
+ ["ᾛ"]={ "Ἣ","ͅ" },
+ ["ᾜ"]={ "Ἤ","ͅ" },
+ ["á¾"]={ "á¼­","Í…" },
+ ["ᾞ"]={ "Ἦ","ͅ" },
+ ["ᾟ"]={ "Ἧ","ͅ" },
+ ["á¾ "]={ "á½ ","Í…" },
+ ["ᾡ"]={ "ὡ","ͅ" },
+ ["á¾¢"]={ "á½¢","Í…" },
+ ["á¾£"]={ "á½£","Í…" },
+ ["ᾤ"]={ "ὤ","ͅ" },
+ ["á¾¥"]={ "á½¥","Í…" },
+ ["ᾦ"]={ "ὦ","ͅ" },
+ ["ᾧ"]={ "ὧ","ͅ" },
+ ["ᾨ"]={ "Ὠ","ͅ" },
+ ["ᾩ"]={ "Ὡ","ͅ" },
+ ["ᾪ"]={ "Ὢ","ͅ" },
+ ["ᾫ"]={ "Ὣ","ͅ" },
+ ["ᾬ"]={ "Ὤ","ͅ" },
+ ["á¾­"]={ "á½­","Í…" },
+ ["á¾®"]={ "á½®","Í…" },
+ ["ᾯ"]={ "Ὧ","ͅ" },
+ ["ᾰ"]={ "α","̆" },
+ ["ᾱ"]={ "α","̄" },
+ ["á¾²"]={ "á½°","Í…" },
+ ["ᾳ"]={ "α","ͅ" },
+ ["ᾴ"]={ "ά","ͅ" },
+ ["ᾶ"]={ "α","͂" },
+ ["ᾷ"]={ "ᾶ","ͅ" },
+ ["Ᾰ"]={ "Α","̆" },
+ ["Ᾱ"]={ "Α","̄" },
+ ["Ὰ"]={ "Α","̀" },
+ ["ᾼ"]={ "Α","ͅ" },
+ ["á¿"]={ "¨","Í‚" },
+ ["á¿‚"]={ "á½´","Í…" },
+ ["ῃ"]={ "η","ͅ" },
+ ["ῄ"]={ "ή","ͅ" },
+ ["ῆ"]={ "η","͂" },
+ ["ῇ"]={ "ῆ","ͅ" },
+ ["Ὲ"]={ "Ε","̀" },
+ ["Ὴ"]={ "Η","̀" },
+ ["ῌ"]={ "Η","ͅ" },
+ ["á¿"]={ "᾿","Ì€" },
+ ["á¿Ž"]={ "᾿","Ì" },
+ ["á¿"]={ "᾿","Í‚" },
+ ["á¿"]={ "ι","̆" },
+ ["ῑ"]={ "ι","̄" },
+ ["á¿’"]={ "ÏŠ","Ì€" },
+ ["ῖ"]={ "ι","͂" },
+ ["á¿—"]={ "ÏŠ","Í‚" },
+ ["Ῐ"]={ "Ι","̆" },
+ ["Ῑ"]={ "Ι","̄" },
+ ["Ὶ"]={ "Ι","̀" },
+ ["á¿"]={ "῾","Ì€" },
+ ["á¿ž"]={ "῾","Ì" },
+ ["῟"]={ "῾","͂" },
+ ["ῠ"]={ "υ","̆" },
+ ["á¿¡"]={ "Ï…","Ì„" },
+ ["á¿¢"]={ "Ï‹","Ì€" },
+ ["ῤ"]={ "Ï","Ì“" },
+ ["á¿¥"]={ "Ï","Ì”" },
+ ["ῦ"]={ "υ","͂" },
+ ["ῧ"]={ "ϋ","͂" },
+ ["Ῠ"]={ "Υ","̆" },
+ ["á¿©"]={ "Î¥","Ì„" },
+ ["Ὺ"]={ "Υ","̀" },
+ ["Ῥ"]={ "Ρ","̔" },
+ ["῭"]={ "¨","̀" },
+ ["ῲ"]={ "ὼ","ͅ" },
+ ["ῳ"]={ "ω","ͅ" },
+ ["á¿´"]={ "ÏŽ","Í…" },
+ ["ῶ"]={ "ω","͂" },
+ ["ῷ"]={ "ῶ","ͅ" },
+ ["Ὸ"]={ "Ο","̀" },
+ ["Ὼ"]={ "Ω","̀" },
+ ["ῼ"]={ "Ω","ͅ" },
+ ["↚"]={ "â†","̸" },
+ ["↛"]={ "→","̸" },
+ ["↮"]={ "↔","̸" },
+ ["â‡"]={ "â‡","̸" },
+ ["⇎"]={ "⇔","̸" },
+ ["â‡"]={ "⇒","̸" },
+ ["∄"]={ "∃","̸" },
+ ["∉"]={ "∈","̸" },
+ ["∌"]={ "∋","̸" },
+ ["∤"]={ "∣","̸" },
+ ["∦"]={ "∥","̸" },
+ ["â‰"]={ "∼","̸" },
+ ["≄"]={ "≃","̸" },
+ ["≇"]={ "≅","̸" },
+ ["≉"]={ "≈","̸" },
+ ["≠"]={ "=","̸" },
+ ["≢"]={ "≡","̸" },
+ ["≭"]={ "â‰","̸" },
+ ["≮"]={ "<","̸" },
+ ["≯"]={ ">","̸" },
+ ["≰"]={ "≤","̸" },
+ ["≱"]={ "≥","̸" },
+ ["≴"]={ "≲","̸" },
+ ["≵"]={ "≳","̸" },
+ ["≸"]={ "≶","̸" },
+ ["≹"]={ "≷","̸" },
+ ["⊀"]={ "≺","̸" },
+ ["âŠ"]={ "≻","̸" },
+ ["⊄"]={ "⊂","̸" },
+ ["⊅"]={ "⊃","̸" },
+ ["⊈"]={ "⊆","̸" },
+ ["⊉"]={ "⊇","̸" },
+ ["⊬"]={ "⊢","̸" },
+ ["⊭"]={ "⊨","̸" },
+ ["⊮"]={ "⊩","̸" },
+ ["⊯"]={ "⊫","̸" },
+ ["⋠"]={ "≼","̸" },
+ ["⋡"]={ "≽","̸" },
+ ["⋢"]={ "⊑","̸" },
+ ["⋣"]={ "⊒","̸" },
+ ["⋪"]={ "⊲","̸" },
+ ["⋫"]={ "⊳","̸" },
+ ["⋬"]={ "⊴","̸" },
+ ["⋭"]={ "⊵","̸" },
+ ["â«œ"]={ "â«","̸" },
+ ["ãŒ"]={ "ã‹","ã‚™" },
+ ["ãŽ"]={ "ã","ã‚™" },
+ ["ã"]={ "ã","ã‚™" },
+ ["ã’"]={ "ã‘","ã‚™" },
+ ["ã”"]={ "ã“","ã‚™" },
+ ["ã–"]={ "ã•","ã‚™" },
+ ["ã˜"]={ "ã—","ã‚™" },
+ ["ãš"]={ "ã™","ã‚™" },
+ ["ãœ"]={ "ã›","ã‚™" },
+ ["ãž"]={ "ã","ã‚™" },
+ ["ã "]={ "ãŸ","ã‚™" },
+ ["ã¢"]={ "ã¡","ã‚™" },
+ ["ã¥"]={ "ã¤","ã‚™" },
+ ["ã§"]={ "ã¦","ã‚™" },
+ ["ã©"]={ "ã¨","ã‚™" },
+ ["ã°"]={ "ã¯","ã‚™" },
+ ["ã±"]={ "ã¯","ã‚š" },
+ ["ã³"]={ "ã²","ã‚™" },
+ ["ã´"]={ "ã²","ã‚š" },
+ ["ã¶"]={ "ãµ","ã‚™" },
+ ["ã·"]={ "ãµ","ã‚š" },
+ ["ã¹"]={ "ã¸","ã‚™" },
+ ["ãº"]={ "ã¸","ã‚š" },
+ ["ã¼"]={ "ã»","ã‚™" },
+ ["ã½"]={ "ã»","ã‚š" },
+ ["ã‚”"]={ "ã†","ã‚™" },
+ ["ã‚ž"]={ "ã‚","ã‚™" },
+ ["ガ"]={ "カ","゙" },
+ ["ã‚®"]={ "ã‚­","ã‚™" },
+ ["グ"]={ "ク","゙" },
+ ["ゲ"]={ "ケ","゙" },
+ ["ゴ"]={ "コ","゙" },
+ ["ザ"]={ "サ","゙" },
+ ["ジ"]={ "シ","゙" },
+ ["ズ"]={ "ス","゙" },
+ ["ゼ"]={ "セ","゙" },
+ ["ゾ"]={ "ソ","゙" },
+ ["ダ"]={ "タ","゙" },
+ ["ヂ"]={ "ãƒ","ã‚™" },
+ ["ヅ"]={ "ツ","゙" },
+ ["デ"]={ "テ","゙" },
+ ["ド"]={ "ト","゙" },
+ ["ãƒ"]={ "ãƒ","ã‚™" },
+ ["パ"]={ "ãƒ","ã‚š" },
+ ["ビ"]={ "ヒ","゙" },
+ ["ピ"]={ "ヒ","゚" },
+ ["ブ"]={ "フ","゙" },
+ ["プ"]={ "フ","゚" },
+ ["ベ"]={ "ヘ","゙" },
+ ["ペ"]={ "ヘ","゚" },
+ ["ボ"]={ "ホ","゙" },
+ ["ãƒ"]={ "ホ","ã‚š" },
+ ["ヴ"]={ "ウ","゙" },
+ ["ヷ"]={ "ワ","゙" },
+ ["ヸ"]={ "ヰ","゙" },
+ ["ヹ"]={ "ヱ","゙" },
+ ["ヺ"]={ "ヲ","゙" },
+ ["ヾ"]={ "ヽ","゙" },
+ ["ï¬"]={ "×™","Ö´" },
+ ["ײַ"]={ "ײ","ַ" },
+ ["שׁ"]={ "ש","×" },
+ ["שׂ"]={ "ש","ׂ" },
+ ["שּׁ"]={ "ï­‰","×" },
+ ["שּׂ"]={ "שּ","ׂ" },
+ ["אַ"]={ "×","Ö·" },
+ ["אָ"]={ "×","Ö¸" },
+ ["אּ"]={ "×","Ö¼" },
+ ["בּ"]={ "ב","ּ" },
+ ["גּ"]={ "ג","ּ" },
+ ["דּ"]={ "ד","ּ" },
+ ["הּ"]={ "ה","ּ" },
+ ["וּ"]={ "ו","ּ" },
+ ["זּ"]={ "ז","ּ" },
+ ["טּ"]={ "ט","ּ" },
+ ["יּ"]={ "י","ּ" },
+ ["ךּ"]={ "ך","ּ" },
+ ["כּ"]={ "כ","ּ" },
+ ["לּ"]={ "ל","ּ" },
+ ["מּ"]={ "מ","ּ" },
+ ["ï­€"]={ "× ","Ö¼" },
+ ["ï­"]={ "ס","Ö¼" },
+ ["ï­ƒ"]={ "×£","Ö¼" },
+ ["פּ"]={ "פ","ּ" },
+ ["צּ"]={ "צ","ּ" },
+ ["קּ"]={ "ק","ּ" },
+ ["רּ"]={ "ר","ּ" },
+ ["שּ"]={ "ש","ּ" },
+ ["תּ"]={ "ת","ּ" },
+ ["וֹ"]={ "ו","ֹ" },
+ ["בֿ"]={ "ב","ֿ" },
+ ["ï­"]={ "×›","Ö¿" },
+ ["פֿ"]={ "פ","ֿ" },
+ ["𑂚"]={ "𑂙","𑂺" },
+ ["𑂜"]={ "𑂛","𑂺" },
+ ["𑂫"]={ "𑂥","𑂺" },
+ ["𑄮"]={ "𑄱","𑄧" },
+ ["𑄯"]={ "𑄲","𑄧" },
+ ["ð‘‹"]={ "ð‘‡","𑌾" },
+ ["ð‘Œ"]={ "ð‘‡","ð‘—" },
+ ["ð‘’»"]={ "ð‘’¹","ð‘’º" },
+ ["ð‘’¼"]={ "ð‘’¹","ð‘’°" },
+ ["ð‘’¾"]={ "ð‘’¹","ð‘’½" },
+ ["ð‘–º"]={ "ð‘–¸","ð‘–¯" },
+ ["ð‘–»"]={ "ð‘–¹","ð‘–¯" },
+ ["ð…ž"]={ "ð…—","ð…¥" },
+ ["ð…Ÿ"]={ "ð…˜","ð…¥" },
+ ["ð… "]={ "ð…Ÿ","ð…®" },
+ ["ð…¡"]={ "ð…Ÿ","ð…¯" },
+ ["ð…¢"]={ "ð…Ÿ","ð…°" },
+ ["ð…£"]={ "ð…Ÿ","ð…±" },
+ ["ð…¤"]={ "ð…Ÿ","ð…²" },
+ ["ð†»"]={ "ð†¹","ð…¥" },
+ ["ð†¼"]={ "ð†º","ð…¥" },
+ ["ð†½"]={ "ð†»","ð…®" },
+ ["ð†¾"]={ "ð†¼","ð…®" },
+ ["ð†¿"]={ "ð†»","ð…¯" },
+ ["ð‡€"]={ "ð†¼","ð…¯" },
+ },
+ },
+ },
+ ["name"]="collapse",
+ ["prepend"]=true,
+ ["type"]="ligature",
+}
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-gbn']={
+ version=1.001,
+ comment="companion to luatex-*.tex",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+if context then
+ texio.write_nl("fatal error: this module is not for context")
+ os.exit()
+end
+local fonts=fonts
+local nodes=nodes
+local nuts=nodes.nuts
+local traverse_id=nuts.traverse_id
+local flush_node=nuts.flush_node
+local glyph_code=nodes.nodecodes.glyph
+local disc_code=nodes.nodecodes.disc
+local tonode=nuts.tonode
+local tonut=nuts.tonut
+local getfont=nuts.getfont
+local getchar=nuts.getchar
+local getid=nuts.getid
+local getboth=nuts.getboth
+local getprev=nuts.getprev
+local getnext=nuts.getnext
+local getdisc=nuts.getdisc
+local setchar=nuts.setchar
+local setlink=nuts.setlink
+local setprev=nuts.setprev
+local n_ligaturing=node.ligaturing
+local n_kerning=node.kerning
+local ligaturing=nuts.ligaturing
+local kerning=nuts.kerning
+local basemodepass=true
+local function l_warning() texio.write_nl("warning: node.ligaturing called directly") l_warning=nil end
+local function k_warning() texio.write_nl("warning: node.kerning called directly") k_warning=nil end
+function node.ligaturing(...)
+ if basemodepass and l_warning then
+ l_warning()
+ end
+ return n_ligaturing(...)
+end
+function node.kerning(...)
+ if basemodepass and k_warning then
+ k_warning()
+ end
+ return n_kerning(...)
+end
+function nodes.handlers.setbasemodepass(v)
+ basemodepass=v
+end
+function nodes.handlers.nodepass(head,groupcode,size,packtype,direction)
+ local fontdata=fonts.hashes.identifiers
+ if fontdata then
+ local nuthead=tonut(head)
+ local usedfonts={}
+ local basefonts={}
+ local prevfont=nil
+ local basefont=nil
+ local variants=nil
+ local redundant=nil
+ local nofused=0
+ for n in traverse_id(glyph_code,nuthead) do
+ local font=getfont(n)
+ if font~=prevfont then
+ if basefont then
+ basefont[2]=getprev(n)
+ end
+ prevfont=font
+ local used=usedfonts[font]
+ if not used then
+ local tfmdata=fontdata[font]
+ if tfmdata then
+ local shared=tfmdata.shared
+ if shared then
+ local processors=shared.processes
+ if processors and #processors>0 then
+ usedfonts[font]=processors
+ nofused=nofused+1
+ elseif basemodepass then
+ basefont={ n,nil }
+ basefonts[#basefonts+1]=basefont
+ end
+ end
+ local resources=tfmdata.resources
+ variants=resources and resources.variants
+ variants=variants and next(variants) and variants or false
+ end
+ else
+ local tfmdata=fontdata[prevfont]
+ if tfmdata then
+ local resources=tfmdata.resources
+ variants=resources and resources.variants
+ variants=variants and next(variants) and variants or false
+ end
+ end
+ end
+ if variants then
+ local char=getchar(n)
+ if char>=0xFE00 and (char<=0xFE0F or (char>=0xE0100 and char<=0xE01EF)) then
+ local hash=variants[char]
+ if hash then
+ local p=getprev(n)
+ if p and getid(p)==glyph_code then
+ local variant=hash[getchar(p)]
+ if variant then
+ setchar(p,variant)
+ end
+ end
+ end
+ if not redundant then
+ redundant={ n }
+ else
+ redundant[#redundant+1]=n
+ end
+ end
+ end
+ end
+ local nofbasefonts=#basefonts
+ if redundant then
+ for i=1,#redundant do
+ local r=redundant[i]
+ local p,n=getboth(r)
+ if r==nuthead then
+ nuthead=n
+ setprev(n)
+ else
+ setlink(p,n)
+ end
+ if nofbasefonts>0 then
+ for i=1,nofbasefonts do
+ local bi=basefonts[i]
+ if r==bi[1] then
+ bi[1]=n
+ end
+ if r==bi[2] then
+ bi[2]=n
+ end
+ end
+ end
+ flush_node(r)
+ end
+ end
+ for d in traverse_id(disc_code,nuthead) do
+ local _,_,r=getdisc(d)
+ if r then
+ for n in traverse_id(glyph_code,r) do
+ local font=getfont(n)
+ if font~=prevfont then
+ prevfont=font
+ local used=usedfonts[font]
+ if not used then
+ local tfmdata=fontdata[font]
+ if tfmdata then
+ local shared=tfmdata.shared
+ if shared then
+ local processors=shared.processes
+ if processors and #processors>0 then
+ usedfonts[font]=processors
+ nofused=nofused+1
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ if next(usedfonts) then
+ for font,processors in next,usedfonts do
+ for i=1,#processors do
+ head=processors[i](head,font,0,direction,nofused) or head
+ end
+ end
+ end
+ if basemodepass and nofbasefonts>0 then
+ for i=1,nofbasefonts do
+ local range=basefonts[i]
+ local start=range[1]
+ local stop=range[2]
+ if start then
+ local front=nuthead==start
+ local prev,next
+ if stop then
+ next=getnext(stop)
+ start,stop=ligaturing(start,stop)
+ start,stop=kerning(start,stop)
+ else
+ prev=getprev(start)
+ start=ligaturing(start)
+ start=kerning(start)
+ end
+ if prev then
+ setlink(prev,start)
+ end
+ if next then
+ setlink(stop,next)
+ end
+ if front and nuthead~=start then
+ head=tonode(start)
+ end
+ end
+ end
+ end
+ return head,true
+ else
+ return head,false
+ end
+end
+function nodes.handlers.basepass(head)
+ if not basemodepass then
+ head=n_ligaturing(head)
+ head=n_kerning(head)
+ end
+ return head,true
+end
+local nodepass=nodes.handlers.nodepass
+local basepass=nodes.handlers.basepass
+local injectpass=nodes.injections.handler
+local protectpass=nodes.handlers.protectglyphs
+function nodes.simple_font_handler(head,groupcode,size,packtype,direction)
+ if head then
+ head=nodepass(head,groupcode,size,packtype,direction)
+ head=injectpass(head)
+ if not basemodepass then
+ head=basepass(head)
+ end
+ protectpass(head)
+ return head,true
+ else
+ return head,false
+ end
+end
+
+end -- closure
diff --git a/obsolete/macros/luatex/generic/fontloader-luaotfload/fontloader-reference-2017-08-18.lua b/obsolete/macros/luatex/generic/fontloader-luaotfload/fontloader-reference-2017-08-18.lua
new file mode 100644
index 0000000000..ad93718296
--- /dev/null
+++ b/obsolete/macros/luatex/generic/fontloader-luaotfload/fontloader-reference-2017-08-18.lua
@@ -0,0 +1,34366 @@
+-- merged file : c:/data/develop/context/sources/luatex-fonts-merged.lua
+-- parent file : c:/data/develop/context/sources/luatex-fonts.lua
+-- merge date : 08/15/17 12:35:38
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['l-lua']={
+ version=1.001,
+ comment="companion to luat-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+_MAJORVERSION,_MINORVERSION=string.match(_VERSION,"^[^%d]+(%d+)%.(%d+).*$")
+_MAJORVERSION=tonumber(_MAJORVERSION) or 5
+_MINORVERSION=tonumber(_MINORVERSION) or 1
+_LUAVERSION=_MAJORVERSION+_MINORVERSION/10
+if _LUAVERSION<5.2 and jit then
+ _MINORVERSION=2
+ _LUAVERSION=5.2
+end
+if not lpeg then
+ lpeg=require("lpeg")
+end
+if loadstring then
+ local loadnormal=load
+ function load(first,...)
+ if type(first)=="string" then
+ return loadstring(first,...)
+ else
+ return loadnormal(first,...)
+ end
+ end
+else
+ loadstring=load
+end
+if not ipairs then
+ local function iterate(a,i)
+ i=i+1
+ local v=a[i]
+ if v~=nil then
+ return i,v
+ end
+ end
+ function ipairs(a)
+ return iterate,a,0
+ end
+end
+if not pairs then
+ function pairs(t)
+ return next,t
+ end
+end
+if not table.unpack then
+ table.unpack=_G.unpack
+elseif not unpack then
+ _G.unpack=table.unpack
+end
+if not package.loaders then
+ package.loaders=package.searchers
+end
+local print,select,tostring=print,select,tostring
+local inspectors={}
+function setinspector(kind,inspector)
+ inspectors[kind]=inspector
+end
+function inspect(...)
+ for s=1,select("#",...) do
+ local value=select(s,...)
+ if value==nil then
+ print("nil")
+ else
+ local done=false
+ local kind=type(value)
+ local inspector=inspectors[kind]
+ if inspector then
+ done=inspector(value)
+ if done then
+ break
+ end
+ end
+ for kind,inspector in next,inspectors do
+ done=inspector(value)
+ if done then
+ break
+ end
+ end
+ if not done then
+ print(tostring(value))
+ end
+ end
+ end
+end
+local dummy=function() end
+function optionalrequire(...)
+ local ok,result=xpcall(require,dummy,...)
+ if ok then
+ return result
+ end
+end
+if lua then
+ lua.mask=load([[τεχ = 1]]) and "utf" or "ascii"
+end
+local flush=io.flush
+if flush then
+ local execute=os.execute if execute then function os.execute(...) flush() return execute(...) end end
+ local exec=os.exec if exec then function os.exec (...) flush() return exec (...) end end
+ local spawn=os.spawn if spawn then function os.spawn (...) flush() return spawn (...) end end
+ local popen=io.popen if popen then function io.popen (...) flush() return popen (...) end end
+end
+FFISUPPORTED=type(ffi)=="table" and ffi.os~="" and ffi.arch~="" and ffi.load
+if not FFISUPPORTED then
+ local okay;okay,ffi=pcall(require,"ffi")
+ FFISUPPORTED=type(ffi)=="table" and ffi.os~="" and ffi.arch~="" and ffi.load
+end
+if not FFISUPPORTED then
+ ffi=nil
+elseif not ffi.number then
+ ffi.number=tonumber
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['l-lpeg']={
+ version=1.001,
+ comment="companion to luat-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+lpeg=require("lpeg")
+local lpeg=lpeg
+if not lpeg.print then function lpeg.print(...) print(lpeg.pcode(...)) end end
+local type,next,tostring=type,next,tostring
+local byte,char,gmatch,format=string.byte,string.char,string.gmatch,string.format
+local floor=math.floor
+local P,R,S,V,Ct,C,Cs,Cc,Cp,Cmt=lpeg.P,lpeg.R,lpeg.S,lpeg.V,lpeg.Ct,lpeg.C,lpeg.Cs,lpeg.Cc,lpeg.Cp,lpeg.Cmt
+local lpegtype,lpegmatch,lpegprint=lpeg.type,lpeg.match,lpeg.print
+if setinspector then
+ setinspector("lpeg",function(v) if lpegtype(v) then lpegprint(v) return true end end)
+end
+lpeg.patterns=lpeg.patterns or {}
+local patterns=lpeg.patterns
+local anything=P(1)
+local endofstring=P(-1)
+local alwaysmatched=P(true)
+patterns.anything=anything
+patterns.endofstring=endofstring
+patterns.beginofstring=alwaysmatched
+patterns.alwaysmatched=alwaysmatched
+local sign=S('+-')
+local zero=P('0')
+local digit=R('09')
+local octdigit=R("07")
+local lowercase=R("az")
+local uppercase=R("AZ")
+local underscore=P("_")
+local hexdigit=digit+lowercase+uppercase
+local cr,lf,crlf=P("\r"),P("\n"),P("\r\n")
+local newline=P("\r")*(P("\n")+P(true))+P("\n")
+local escaped=P("\\")*anything
+local squote=P("'")
+local dquote=P('"')
+local space=P(" ")
+local period=P(".")
+local comma=P(",")
+local utfbom_32_be=P('\000\000\254\255')
+local utfbom_32_le=P('\255\254\000\000')
+local utfbom_16_be=P('\254\255')
+local utfbom_16_le=P('\255\254')
+local utfbom_8=P('\239\187\191')
+local utfbom=utfbom_32_be+utfbom_32_le+utfbom_16_be+utfbom_16_le+utfbom_8
+local utftype=utfbom_32_be*Cc("utf-32-be")+utfbom_32_le*Cc("utf-32-le")+utfbom_16_be*Cc("utf-16-be")+utfbom_16_le*Cc("utf-16-le")+utfbom_8*Cc("utf-8")+alwaysmatched*Cc("utf-8")
+local utfstricttype=utfbom_32_be*Cc("utf-32-be")+utfbom_32_le*Cc("utf-32-le")+utfbom_16_be*Cc("utf-16-be")+utfbom_16_le*Cc("utf-16-le")+utfbom_8*Cc("utf-8")
+local utfoffset=utfbom_32_be*Cc(4)+utfbom_32_le*Cc(4)+utfbom_16_be*Cc(2)+utfbom_16_le*Cc(2)+utfbom_8*Cc(3)+Cc(0)
+local utf8next=R("\128\191")
+patterns.utfbom_32_be=utfbom_32_be
+patterns.utfbom_32_le=utfbom_32_le
+patterns.utfbom_16_be=utfbom_16_be
+patterns.utfbom_16_le=utfbom_16_le
+patterns.utfbom_8=utfbom_8
+patterns.utf_16_be_nl=P("\000\r\000\n")+P("\000\r")+P("\000\n")
+patterns.utf_16_le_nl=P("\r\000\n\000")+P("\r\000")+P("\n\000")
+patterns.utf_32_be_nl=P("\000\000\000\r\000\000\000\n")+P("\000\000\000\r")+P("\000\000\000\n")
+patterns.utf_32_le_nl=P("\r\000\000\000\n\000\000\000")+P("\r\000\000\000")+P("\n\000\000\000")
+patterns.utf8one=R("\000\127")
+patterns.utf8two=R("\194\223")*utf8next
+patterns.utf8three=R("\224\239")*utf8next*utf8next
+patterns.utf8four=R("\240\244")*utf8next*utf8next*utf8next
+patterns.utfbom=utfbom
+patterns.utftype=utftype
+patterns.utfstricttype=utfstricttype
+patterns.utfoffset=utfoffset
+local utf8char=patterns.utf8one+patterns.utf8two+patterns.utf8three+patterns.utf8four
+local validutf8char=utf8char^0*endofstring*Cc(true)+Cc(false)
+local utf8character=P(1)*R("\128\191")^0
+patterns.utf8=utf8char
+patterns.utf8char=utf8char
+patterns.utf8character=utf8character
+patterns.validutf8=validutf8char
+patterns.validutf8char=validutf8char
+local eol=S("\n\r")
+local spacer=S(" \t\f\v")
+local whitespace=eol+spacer
+local nonspacer=1-spacer
+local nonwhitespace=1-whitespace
+patterns.eol=eol
+patterns.spacer=spacer
+patterns.whitespace=whitespace
+patterns.nonspacer=nonspacer
+patterns.nonwhitespace=nonwhitespace
+local stripper=spacer^0*C((spacer^0*nonspacer^1)^0)
+local fullstripper=whitespace^0*C((whitespace^0*nonwhitespace^1)^0)
+local collapser=Cs(spacer^0/""*nonspacer^0*((spacer^0/" "*nonspacer^1)^0))
+local nospacer=Cs((whitespace^1/""+nonwhitespace^1)^0)
+local b_collapser=Cs(whitespace^0/""*(nonwhitespace^1+whitespace^1/" ")^0)
+local e_collapser=Cs((whitespace^1*P(-1)/""+nonwhitespace^1+whitespace^1/" ")^0)
+local m_collapser=Cs((nonwhitespace^1+whitespace^1/" ")^0)
+local b_stripper=Cs(spacer^0/""*(nonspacer^1+spacer^1/" ")^0)
+local e_stripper=Cs((spacer^1*P(-1)/""+nonspacer^1+spacer^1/" ")^0)
+local m_stripper=Cs((nonspacer^1+spacer^1/" ")^0)
+patterns.stripper=stripper
+patterns.fullstripper=fullstripper
+patterns.collapser=collapser
+patterns.nospacer=nospacer
+patterns.b_collapser=b_collapser
+patterns.m_collapser=m_collapser
+patterns.e_collapser=e_collapser
+patterns.b_stripper=b_stripper
+patterns.m_stripper=m_stripper
+patterns.e_stripper=e_stripper
+patterns.lowercase=lowercase
+patterns.uppercase=uppercase
+patterns.letter=patterns.lowercase+patterns.uppercase
+patterns.space=space
+patterns.tab=P("\t")
+patterns.spaceortab=patterns.space+patterns.tab
+patterns.newline=newline
+patterns.emptyline=newline^1
+patterns.equal=P("=")
+patterns.comma=comma
+patterns.commaspacer=comma*spacer^0
+patterns.period=period
+patterns.colon=P(":")
+patterns.semicolon=P(";")
+patterns.underscore=underscore
+patterns.escaped=escaped
+patterns.squote=squote
+patterns.dquote=dquote
+patterns.nosquote=(escaped+(1-squote))^0
+patterns.nodquote=(escaped+(1-dquote))^0
+patterns.unsingle=(squote/"")*patterns.nosquote*(squote/"")
+patterns.undouble=(dquote/"")*patterns.nodquote*(dquote/"")
+patterns.unquoted=patterns.undouble+patterns.unsingle
+patterns.unspacer=((patterns.spacer^1)/"")^0
+patterns.singlequoted=squote*patterns.nosquote*squote
+patterns.doublequoted=dquote*patterns.nodquote*dquote
+patterns.quoted=patterns.doublequoted+patterns.singlequoted
+patterns.digit=digit
+patterns.octdigit=octdigit
+patterns.hexdigit=hexdigit
+patterns.sign=sign
+patterns.cardinal=digit^1
+patterns.integer=sign^-1*digit^1
+patterns.unsigned=digit^0*period*digit^1
+patterns.float=sign^-1*patterns.unsigned
+patterns.cunsigned=digit^0*comma*digit^1
+patterns.cpunsigned=digit^0*(period+comma)*digit^1
+patterns.cfloat=sign^-1*patterns.cunsigned
+patterns.cpfloat=sign^-1*patterns.cpunsigned
+patterns.number=patterns.float+patterns.integer
+patterns.cnumber=patterns.cfloat+patterns.integer
+patterns.cpnumber=patterns.cpfloat+patterns.integer
+patterns.oct=zero*octdigit^1
+patterns.octal=patterns.oct
+patterns.HEX=zero*P("X")*(digit+uppercase)^1
+patterns.hex=zero*P("x")*(digit+lowercase)^1
+patterns.hexadecimal=zero*S("xX")*hexdigit^1
+patterns.hexafloat=sign^-1*zero*S("xX")*(hexdigit^0*period*hexdigit^1+hexdigit^1*period*hexdigit^0+hexdigit^1)*(S("pP")*sign^-1*hexdigit^1)^-1
+patterns.decafloat=sign^-1*(digit^0*period*digit^1+digit^1*period*digit^0+digit^1)*S("eE")*sign^-1*digit^1
+patterns.propername=(uppercase+lowercase+underscore)*(uppercase+lowercase+underscore+digit)^0*endofstring
+patterns.somecontent=(anything-newline-space)^1
+patterns.beginline=#(1-newline)
+patterns.longtostring=Cs(whitespace^0/""*((patterns.quoted+nonwhitespace^1+whitespace^1/""*(P(-1)+Cc(" ")))^0))
+local function anywhere(pattern)
+ return P { P(pattern)+1*V(1) }
+end
+lpeg.anywhere=anywhere
+function lpeg.instringchecker(p)
+ p=anywhere(p)
+ return function(str)
+ return lpegmatch(p,str) and true or false
+ end
+end
+function lpeg.splitter(pattern,action)
+ return (((1-P(pattern))^1)/action+1)^0
+end
+function lpeg.tsplitter(pattern,action)
+ return Ct((((1-P(pattern))^1)/action+1)^0)
+end
+local splitters_s,splitters_m,splitters_t={},{},{}
+local function splitat(separator,single)
+ local splitter=(single and splitters_s[separator]) or splitters_m[separator]
+ if not splitter then
+ separator=P(separator)
+ local other=C((1-separator)^0)
+ if single then
+ local any=anything
+ splitter=other*(separator*C(any^0)+"")
+ splitters_s[separator]=splitter
+ else
+ splitter=other*(separator*other)^0
+ splitters_m[separator]=splitter
+ end
+ end
+ return splitter
+end
+local function tsplitat(separator)
+ local splitter=splitters_t[separator]
+ if not splitter then
+ splitter=Ct(splitat(separator))
+ splitters_t[separator]=splitter
+ end
+ return splitter
+end
+lpeg.splitat=splitat
+lpeg.tsplitat=tsplitat
+function string.splitup(str,separator)
+ if not separator then
+ separator=","
+ end
+ return lpegmatch(splitters_m[separator] or splitat(separator),str)
+end
+local cache={}
+function lpeg.split(separator,str)
+ local c=cache[separator]
+ if not c then
+ c=tsplitat(separator)
+ cache[separator]=c
+ end
+ return lpegmatch(c,str)
+end
+function string.split(str,separator)
+ if separator then
+ local c=cache[separator]
+ if not c then
+ c=tsplitat(separator)
+ cache[separator]=c
+ end
+ return lpegmatch(c,str)
+ else
+ return { str }
+ end
+end
+local spacing=patterns.spacer^0*newline
+local empty=spacing*Cc("")
+local nonempty=Cs((1-spacing)^1)*spacing^-1
+local content=(empty+nonempty)^1
+patterns.textline=content
+local linesplitter=tsplitat(newline)
+patterns.linesplitter=linesplitter
+function string.splitlines(str)
+ return lpegmatch(linesplitter,str)
+end
+local cache={}
+function lpeg.checkedsplit(separator,str)
+ local c=cache[separator]
+ if not c then
+ separator=P(separator)
+ local other=C((1-separator)^1)
+ c=Ct(separator^0*other*(separator^1*other)^0)
+ cache[separator]=c
+ end
+ return lpegmatch(c,str)
+end
+function string.checkedsplit(str,separator)
+ local c=cache[separator]
+ if not c then
+ separator=P(separator)
+ local other=C((1-separator)^1)
+ c=Ct(separator^0*other*(separator^1*other)^0)
+ cache[separator]=c
+ end
+ return lpegmatch(c,str)
+end
+local function f2(s) local c1,c2=byte(s,1,2) return c1*64+c2-12416 end
+local function f3(s) local c1,c2,c3=byte(s,1,3) return (c1*64+c2)*64+c3-925824 end
+local function f4(s) local c1,c2,c3,c4=byte(s,1,4) return ((c1*64+c2)*64+c3)*64+c4-63447168 end
+local utf8byte=patterns.utf8one/byte+patterns.utf8two/f2+patterns.utf8three/f3+patterns.utf8four/f4
+patterns.utf8byte=utf8byte
+local cache={}
+function lpeg.stripper(str)
+ if type(str)=="string" then
+ local s=cache[str]
+ if not s then
+ s=Cs(((S(str)^1)/""+1)^0)
+ cache[str]=s
+ end
+ return s
+ else
+ return Cs(((str^1)/""+1)^0)
+ end
+end
+local cache={}
+function lpeg.keeper(str)
+ if type(str)=="string" then
+ local s=cache[str]
+ if not s then
+ s=Cs((((1-S(str))^1)/""+1)^0)
+ cache[str]=s
+ end
+ return s
+ else
+ return Cs((((1-str)^1)/""+1)^0)
+ end
+end
+function lpeg.frontstripper(str)
+ return (P(str)+P(true))*Cs(anything^0)
+end
+function lpeg.endstripper(str)
+ return Cs((1-P(str)*endofstring)^0)
+end
+function lpeg.replacer(one,two,makefunction,isutf)
+ local pattern
+ local u=isutf and utf8char or 1
+ if type(one)=="table" then
+ local no=#one
+ local p=P(false)
+ if no==0 then
+ for k,v in next,one do
+ p=p+P(k)/v
+ end
+ pattern=Cs((p+u)^0)
+ elseif no==1 then
+ local o=one[1]
+ one,two=P(o[1]),o[2]
+ pattern=Cs((one/two+u)^0)
+ else
+ for i=1,no do
+ local o=one[i]
+ p=p+P(o[1])/o[2]
+ end
+ pattern=Cs((p+u)^0)
+ end
+ else
+ pattern=Cs((P(one)/(two or "")+u)^0)
+ end
+ if makefunction then
+ return function(str)
+ return lpegmatch(pattern,str)
+ end
+ else
+ return pattern
+ end
+end
+function lpeg.finder(lst,makefunction,isutf)
+ local pattern
+ if type(lst)=="table" then
+ pattern=P(false)
+ if #lst==0 then
+ for k,v in next,lst do
+ pattern=pattern+P(k)
+ end
+ else
+ for i=1,#lst do
+ pattern=pattern+P(lst[i])
+ end
+ end
+ else
+ pattern=P(lst)
+ end
+ if isutf then
+ pattern=((utf8char or 1)-pattern)^0*pattern
+ else
+ pattern=(1-pattern)^0*pattern
+ end
+ if makefunction then
+ return function(str)
+ return lpegmatch(pattern,str)
+ end
+ else
+ return pattern
+ end
+end
+local splitters_f,splitters_s={},{}
+function lpeg.firstofsplit(separator)
+ local splitter=splitters_f[separator]
+ if not splitter then
+ local pattern=P(separator)
+ splitter=C((1-pattern)^0)
+ splitters_f[separator]=splitter
+ end
+ return splitter
+end
+function lpeg.secondofsplit(separator)
+ local splitter=splitters_s[separator]
+ if not splitter then
+ local pattern=P(separator)
+ splitter=(1-pattern)^0*pattern*C(anything^0)
+ splitters_s[separator]=splitter
+ end
+ return splitter
+end
+local splitters_s,splitters_p={},{}
+function lpeg.beforesuffix(separator)
+ local splitter=splitters_s[separator]
+ if not splitter then
+ local pattern=P(separator)
+ splitter=C((1-pattern)^0)*pattern*endofstring
+ splitters_s[separator]=splitter
+ end
+ return splitter
+end
+function lpeg.afterprefix(separator)
+ local splitter=splitters_p[separator]
+ if not splitter then
+ local pattern=P(separator)
+ splitter=pattern*C(anything^0)
+ splitters_p[separator]=splitter
+ end
+ return splitter
+end
+function lpeg.balancer(left,right)
+ left,right=P(left),P(right)
+ return P { left*((1-left-right)+V(1))^0*right }
+end
+local nany=utf8char/""
+function lpeg.counter(pattern)
+ pattern=Cs((P(pattern)/" "+nany)^0)
+ return function(str)
+ return #lpegmatch(pattern,str)
+ end
+end
+utf=utf or (unicode and unicode.utf8) or {}
+local utfcharacters=utf and utf.characters or string.utfcharacters
+local utfgmatch=utf and utf.gmatch
+local utfchar=utf and utf.char
+lpeg.UP=lpeg.P
+if utfcharacters then
+ function lpeg.US(str)
+ local p=P(false)
+ for uc in utfcharacters(str) do
+ p=p+P(uc)
+ end
+ return p
+ end
+elseif utfgmatch then
+ function lpeg.US(str)
+ local p=P(false)
+ for uc in utfgmatch(str,".") do
+ p=p+P(uc)
+ end
+ return p
+ end
+else
+ function lpeg.US(str)
+ local p=P(false)
+ local f=function(uc)
+ p=p+P(uc)
+ end
+ lpegmatch((utf8char/f)^0,str)
+ return p
+ end
+end
+local range=utf8byte*utf8byte+Cc(false)
+function lpeg.UR(str,more)
+ local first,last
+ if type(str)=="number" then
+ first=str
+ last=more or first
+ else
+ first,last=lpegmatch(range,str)
+ if not last then
+ return P(str)
+ end
+ end
+ if first==last then
+ return P(str)
+ elseif utfchar and (last-first<8) then
+ local p=P(false)
+ for i=first,last do
+ p=p+P(utfchar(i))
+ end
+ return p
+ else
+ local f=function(b)
+ return b>=first and b<=last
+ end
+ return utf8byte/f
+ end
+end
+function lpeg.is_lpeg(p)
+ return p and lpegtype(p)=="pattern"
+end
+function lpeg.oneof(list,...)
+ if type(list)~="table" then
+ list={ list,... }
+ end
+ local p=P(list[1])
+ for l=2,#list do
+ p=p+P(list[l])
+ end
+ return p
+end
+local sort=table.sort
+local function copyindexed(old)
+ local new={}
+ for i=1,#old do
+ new[i]=old
+ end
+ return new
+end
+local function sortedkeys(tab)
+ local keys,s={},0
+ for key,_ in next,tab do
+ s=s+1
+ keys[s]=key
+ end
+ sort(keys)
+ return keys
+end
+function lpeg.append(list,pp,delayed,checked)
+ local p=pp
+ if #list>0 then
+ local keys=copyindexed(list)
+ sort(keys)
+ for i=#keys,1,-1 do
+ local k=keys[i]
+ if p then
+ p=P(k)+p
+ else
+ p=P(k)
+ end
+ end
+ elseif delayed then
+ local keys=sortedkeys(list)
+ if p then
+ for i=1,#keys,1 do
+ local k=keys[i]
+ local v=list[k]
+ p=P(k)/list+p
+ end
+ else
+ for i=1,#keys do
+ local k=keys[i]
+ local v=list[k]
+ if p then
+ p=P(k)+p
+ else
+ p=P(k)
+ end
+ end
+ if p then
+ p=p/list
+ end
+ end
+ elseif checked then
+ local keys=sortedkeys(list)
+ for i=1,#keys do
+ local k=keys[i]
+ local v=list[k]
+ if p then
+ if k==v then
+ p=P(k)+p
+ else
+ p=P(k)/v+p
+ end
+ else
+ if k==v then
+ p=P(k)
+ else
+ p=P(k)/v
+ end
+ end
+ end
+ else
+ local keys=sortedkeys(list)
+ for i=1,#keys do
+ local k=keys[i]
+ local v=list[k]
+ if p then
+ p=P(k)/v+p
+ else
+ p=P(k)/v
+ end
+ end
+ end
+ return p
+end
+local p_false=P(false)
+local p_true=P(true)
+local function make(t,rest)
+ local p=p_false
+ local keys=sortedkeys(t)
+ for i=1,#keys do
+ local k=keys[i]
+ if k~="" then
+ local v=t[k]
+ if v==true then
+ p=p+P(k)*p_true
+ elseif v==false then
+ else
+ p=p+P(k)*make(v,v[""])
+ end
+ end
+ end
+ if rest then
+ p=p+p_true
+ end
+ return p
+end
+local function collapse(t,x)
+ if type(t)~="table" then
+ return t,x
+ else
+ local n=next(t)
+ if n==nil then
+ return t,x
+ elseif next(t,n)==nil then
+ local k=n
+ local v=t[k]
+ if type(v)=="table" then
+ return collapse(v,x..k)
+ else
+ return v,x..k
+ end
+ else
+ local tt={}
+ for k,v in next,t do
+ local vv,kk=collapse(v,k)
+ tt[kk]=vv
+ end
+ return tt,x
+ end
+ end
+end
+function lpeg.utfchartabletopattern(list)
+ local tree={}
+ local n=#list
+ if n==0 then
+ for s in next,list do
+ local t=tree
+ local p,pk
+ for c in gmatch(s,".") do
+ if t==true then
+ t={ [c]=true,[""]=true }
+ p[pk]=t
+ p=t
+ t=false
+ elseif t==false then
+ t={ [c]=false }
+ p[pk]=t
+ p=t
+ t=false
+ else
+ local tc=t[c]
+ if not tc then
+ tc=false
+ t[c]=false
+ end
+ p=t
+ t=tc
+ end
+ pk=c
+ end
+ if t==false then
+ p[pk]=true
+ elseif t==true then
+ else
+ t[""]=true
+ end
+ end
+ else
+ for i=1,n do
+ local s=list[i]
+ local t=tree
+ local p,pk
+ for c in gmatch(s,".") do
+ if t==true then
+ t={ [c]=true,[""]=true }
+ p[pk]=t
+ p=t
+ t=false
+ elseif t==false then
+ t={ [c]=false }
+ p[pk]=t
+ p=t
+ t=false
+ else
+ local tc=t[c]
+ if not tc then
+ tc=false
+ t[c]=false
+ end
+ p=t
+ t=tc
+ end
+ pk=c
+ end
+ if t==false then
+ p[pk]=true
+ elseif t==true then
+ else
+ t[""]=true
+ end
+ end
+ end
+ return make(tree)
+end
+patterns.containseol=lpeg.finder(eol)
+local function nextstep(n,step,result)
+ local m=n%step
+ local d=floor(n/step)
+ if d>0 then
+ local v=V(tostring(step))
+ local s=result.start
+ for i=1,d do
+ if s then
+ s=v*s
+ else
+ s=v
+ end
+ end
+ result.start=s
+ end
+ if step>1 and result.start then
+ local v=V(tostring(step/2))
+ result[tostring(step)]=v*v
+ end
+ if step>0 then
+ return nextstep(m,step/2,result)
+ else
+ return result
+ end
+end
+function lpeg.times(pattern,n)
+ return P(nextstep(n,2^16,{ "start",["1"]=pattern }))
+end
+local trailingzeros=zero^0*-digit
+local case_1=period*trailingzeros/""
+local case_2=period*(digit-trailingzeros)^1*(trailingzeros/"")
+local number=digit^1*(case_1+case_2)
+local stripper=Cs((number+1)^0)
+lpeg.patterns.stripzeros=stripper
+local byte_to_HEX={}
+local byte_to_hex={}
+local byte_to_dec={}
+local hex_to_byte={}
+for i=0,255 do
+ local H=format("%02X",i)
+ local h=format("%02x",i)
+ local d=format("%03i",i)
+ local c=char(i)
+ byte_to_HEX[c]=H
+ byte_to_hex[c]=h
+ byte_to_dec[c]=d
+ hex_to_byte[h]=c
+ hex_to_byte[H]=c
+end
+local hextobyte=P(2)/hex_to_byte
+local bytetoHEX=P(1)/byte_to_HEX
+local bytetohex=P(1)/byte_to_hex
+local bytetodec=P(1)/byte_to_dec
+local hextobytes=Cs(hextobyte^0)
+local bytestoHEX=Cs(bytetoHEX^0)
+local bytestohex=Cs(bytetohex^0)
+local bytestodec=Cs(bytetodec^0)
+patterns.hextobyte=hextobyte
+patterns.bytetoHEX=bytetoHEX
+patterns.bytetohex=bytetohex
+patterns.bytetodec=bytetodec
+patterns.hextobytes=hextobytes
+patterns.bytestoHEX=bytestoHEX
+patterns.bytestohex=bytestohex
+patterns.bytestodec=bytestodec
+function string.toHEX(s)
+ if not s or s=="" then
+ return s
+ else
+ return lpegmatch(bytestoHEX,s)
+ end
+end
+function string.tohex(s)
+ if not s or s=="" then
+ return s
+ else
+ return lpegmatch(bytestohex,s)
+ end
+end
+function string.todec(s)
+ if not s or s=="" then
+ return s
+ else
+ return lpegmatch(bytestodec,s)
+ end
+end
+function string.tobytes(s)
+ if not s or s=="" then
+ return s
+ else
+ return lpegmatch(hextobytes,s)
+ end
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['l-functions']={
+ version=1.001,
+ comment="companion to luat-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+functions=functions or {}
+function functions.dummy() end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['l-string']={
+ version=1.001,
+ comment="companion to luat-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local string=string
+local sub,gmatch,format,char,byte,rep,lower=string.sub,string.gmatch,string.format,string.char,string.byte,string.rep,string.lower
+local lpegmatch,patterns=lpeg.match,lpeg.patterns
+local P,S,C,Ct,Cc,Cs=lpeg.P,lpeg.S,lpeg.C,lpeg.Ct,lpeg.Cc,lpeg.Cs
+local unquoted=patterns.squote*C(patterns.nosquote)*patterns.squote+patterns.dquote*C(patterns.nodquote)*patterns.dquote
+function string.unquoted(str)
+ return lpegmatch(unquoted,str) or str
+end
+function string.quoted(str)
+ return format("%q",str)
+end
+function string.count(str,pattern)
+ local n=0
+ for _ in gmatch(str,pattern) do
+ n=n+1
+ end
+ return n
+end
+function string.limit(str,n,sentinel)
+ if #str>n then
+ sentinel=sentinel or "..."
+ return sub(str,1,(n-#sentinel))..sentinel
+ else
+ return str
+ end
+end
+local stripper=patterns.stripper
+local fullstripper=patterns.fullstripper
+local collapser=patterns.collapser
+local nospacer=patterns.nospacer
+local longtostring=patterns.longtostring
+function string.strip(str)
+ return str and lpegmatch(stripper,str) or ""
+end
+function string.fullstrip(str)
+ return str and lpegmatch(fullstripper,str) or ""
+end
+function string.collapsespaces(str)
+ return str and lpegmatch(collapser,str) or ""
+end
+function string.nospaces(str)
+ return str and lpegmatch(nospacer,str) or ""
+end
+function string.longtostring(str)
+ return str and lpegmatch(longtostring,str) or ""
+end
+local pattern=P(" ")^0*P(-1)
+function string.is_empty(str)
+ if not str or str=="" then
+ return true
+ else
+ return lpegmatch(pattern,str) and true or false
+ end
+end
+local anything=patterns.anything
+local allescapes=Cc("%")*S(".-+%?()[]*")
+local someescapes=Cc("%")*S(".-+%()[]")
+local matchescapes=Cc(".")*S("*?")
+local pattern_a=Cs ((allescapes+anything )^0 )
+local pattern_b=Cs ((someescapes+matchescapes+anything )^0 )
+local pattern_c=Cs (Cc("^")*(someescapes+matchescapes+anything )^0*Cc("$") )
+function string.escapedpattern(str,simple)
+ return lpegmatch(simple and pattern_b or pattern_a,str)
+end
+function string.topattern(str,lowercase,strict)
+ if str=="" or type(str)~="string" then
+ return ".*"
+ elseif strict then
+ str=lpegmatch(pattern_c,str)
+ else
+ str=lpegmatch(pattern_b,str)
+ end
+ if lowercase then
+ return lower(str)
+ else
+ return str
+ end
+end
+function string.valid(str,default)
+ return (type(str)=="string" and str~="" and str) or default or nil
+end
+string.itself=function(s) return s end
+local pattern_c=Ct(C(1)^0)
+local pattern_b=Ct((C(1)/byte)^0)
+function string.totable(str,bytes)
+ return lpegmatch(bytes and pattern_b or pattern_c,str)
+end
+local replacer=lpeg.replacer("@","%%")
+function string.tformat(fmt,...)
+ return format(lpegmatch(replacer,fmt),...)
+end
+string.quote=string.quoted
+string.unquote=string.unquoted
+if not string.bytetable then
+ local limit=5000
+ function string.bytetable(str)
+ local n=#str
+ if n>limit then
+ local t={ byte(str,1,limit) }
+ for i=limit+1,n do
+ t[i]=byte(str,i)
+ end
+ return t
+ else
+ return { byte(str,1,n) }
+ end
+ end
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['l-table']={
+ version=1.001,
+ comment="companion to luat-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local type,next,tostring,tonumber,select=type,next,tostring,tonumber,select
+local table,string=table,string
+local concat,sort,insert,remove=table.concat,table.sort,table.insert,table.remove
+local format,lower,dump=string.format,string.lower,string.dump
+local getmetatable,setmetatable=getmetatable,setmetatable
+local getinfo=debug.getinfo
+local lpegmatch,patterns=lpeg.match,lpeg.patterns
+local floor=math.floor
+local stripper=patterns.stripper
+function table.strip(tab)
+ local lst,l={},0
+ for i=1,#tab do
+ local s=lpegmatch(stripper,tab[i]) or ""
+ if s=="" then
+ else
+ l=l+1
+ lst[l]=s
+ end
+ end
+ return lst
+end
+function table.keys(t)
+ if t then
+ local keys,k={},0
+ for key in next,t do
+ k=k+1
+ keys[k]=key
+ end
+ return keys
+ else
+ return {}
+ end
+end
+local function compare(a,b)
+ local ta=type(a)
+ if ta=="number" then
+ local tb=type(b)
+ if ta==tb then
+ return a<b
+ elseif tb=="string" then
+ return tostring(a)<b
+ end
+ elseif ta=="string" then
+ local tb=type(b)
+ if ta==tb then
+ return a<b
+ else
+ return a<tostring(b)
+ end
+ end
+ return tostring(a)<tostring(b)
+end
+local function sortedkeys(tab)
+ if tab then
+ local srt,category,s={},0,0
+ for key in next,tab do
+ s=s+1
+ srt[s]=key
+ if category==3 then
+ elseif category==1 then
+ if type(key)~="string" then
+ category=3
+ end
+ elseif category==2 then
+ if type(key)~="number" then
+ category=3
+ end
+ else
+ local tkey=type(key)
+ if tkey=="string" then
+ category=1
+ elseif tkey=="number" then
+ category=2
+ else
+ category=3
+ end
+ end
+ end
+ if s<2 then
+ elseif category==3 then
+ sort(srt,compare)
+ else
+ sort(srt)
+ end
+ return srt
+ else
+ return {}
+ end
+end
+local function sortedhashonly(tab)
+ if tab then
+ local srt,s={},0
+ for key in next,tab do
+ if type(key)=="string" then
+ s=s+1
+ srt[s]=key
+ end
+ end
+ if s>1 then
+ sort(srt)
+ end
+ return srt
+ else
+ return {}
+ end
+end
+local function sortedindexonly(tab)
+ if tab then
+ local srt,s={},0
+ for key in next,tab do
+ if type(key)=="number" then
+ s=s+1
+ srt[s]=key
+ end
+ end
+ if s>1 then
+ sort(srt)
+ end
+ return srt
+ else
+ return {}
+ end
+end
+local function sortedhashkeys(tab,cmp)
+ if tab then
+ local srt,s={},0
+ for key in next,tab do
+ if key then
+ s=s+1
+ srt[s]=key
+ end
+ end
+ if s>1 then
+ sort(srt,cmp)
+ end
+ return srt
+ else
+ return {}
+ end
+end
+function table.allkeys(t)
+ local keys={}
+ for k,v in next,t do
+ for k in next,v do
+ keys[k]=true
+ end
+ end
+ return sortedkeys(keys)
+end
+table.sortedkeys=sortedkeys
+table.sortedhashonly=sortedhashonly
+table.sortedindexonly=sortedindexonly
+table.sortedhashkeys=sortedhashkeys
+local function nothing() end
+local function sortedhash(t,cmp)
+ if t then
+ local s
+ if cmp then
+ s=sortedhashkeys(t,function(a,b) return cmp(t,a,b) end)
+ else
+ s=sortedkeys(t)
+ end
+ local m=#s
+ if m==1 then
+ return next,t
+ elseif m>0 then
+ local n=0
+ return function()
+ if n<m then
+ n=n+1
+ local k=s[n]
+ return k,t[k]
+ end
+ end
+ end
+ end
+ return nothing
+end
+table.sortedhash=sortedhash
+table.sortedpairs=sortedhash
+function table.append(t,list)
+ local n=#t
+ for i=1,#list do
+ n=n+1
+ t[n]=list[i]
+ end
+ return t
+end
+function table.prepend(t,list)
+ local nl=#list
+ local nt=nl+#t
+ for i=#t,1,-1 do
+ t[nt]=t[i]
+ nt=nt-1
+ end
+ for i=1,#list do
+ t[i]=list[i]
+ end
+ return t
+end
+function table.merge(t,...)
+ t=t or {}
+ for i=1,select("#",...) do
+ for k,v in next,(select(i,...)) do
+ t[k]=v
+ end
+ end
+ return t
+end
+function table.merged(...)
+ local t={}
+ for i=1,select("#",...) do
+ for k,v in next,(select(i,...)) do
+ t[k]=v
+ end
+ end
+ return t
+end
+function table.imerge(t,...)
+ local nt=#t
+ for i=1,select("#",...) do
+ local nst=select(i,...)
+ for j=1,#nst do
+ nt=nt+1
+ t[nt]=nst[j]
+ end
+ end
+ return t
+end
+function table.imerged(...)
+ local tmp,ntmp={},0
+ for i=1,select("#",...) do
+ local nst=select(i,...)
+ for j=1,#nst do
+ ntmp=ntmp+1
+ tmp[ntmp]=nst[j]
+ end
+ end
+ return tmp
+end
+local function fastcopy(old,metatabletoo)
+ if old then
+ local new={}
+ for k,v in next,old do
+ if type(v)=="table" then
+ new[k]=fastcopy(v,metatabletoo)
+ else
+ new[k]=v
+ end
+ end
+ if metatabletoo then
+ local mt=getmetatable(old)
+ if mt then
+ setmetatable(new,mt)
+ end
+ end
+ return new
+ else
+ return {}
+ end
+end
+local function copy(t,tables)
+ tables=tables or {}
+ local tcopy={}
+ if not tables[t] then
+ tables[t]=tcopy
+ end
+ for i,v in next,t do
+ if type(i)=="table" then
+ if tables[i] then
+ i=tables[i]
+ else
+ i=copy(i,tables)
+ end
+ end
+ if type(v)~="table" then
+ tcopy[i]=v
+ elseif tables[v] then
+ tcopy[i]=tables[v]
+ else
+ tcopy[i]=copy(v,tables)
+ end
+ end
+ local mt=getmetatable(t)
+ if mt then
+ setmetatable(tcopy,mt)
+ end
+ return tcopy
+end
+table.fastcopy=fastcopy
+table.copy=copy
+function table.derive(parent)
+ local child={}
+ if parent then
+ setmetatable(child,{ __index=parent })
+ end
+ return child
+end
+function table.tohash(t,value)
+ local h={}
+ if t then
+ if value==nil then value=true end
+ for _,v in next,t do
+ h[v]=value
+ end
+ end
+ return h
+end
+function table.fromhash(t)
+ local hsh,h={},0
+ for k,v in next,t do
+ if v then
+ h=h+1
+ hsh[h]=k
+ end
+ end
+ return hsh
+end
+local noquotes,hexify,handle,compact,inline,functions,metacheck
+local reserved=table.tohash {
+ 'and','break','do','else','elseif','end','false','for','function','if',
+ 'in','local','nil','not','or','repeat','return','then','true','until','while',
+ 'NaN','goto',
+}
+local function is_simple_table(t,hexify)
+ local nt=#t
+ if nt>0 then
+ local n=0
+ for _,v in next,t do
+ n=n+1
+ if type(v)=="table" then
+ return nil
+ end
+ end
+ local haszero=rawget(t,0)
+ if n==nt then
+ local tt={}
+ for i=1,nt do
+ local v=t[i]
+ local tv=type(v)
+ if tv=="number" then
+ if hexify then
+ tt[i]=format("0x%X",v)
+ else
+ tt[i]=v
+ end
+ elseif tv=="string" then
+ tt[i]=format("%q",v)
+ elseif tv=="boolean" then
+ tt[i]=v and "true" or "false"
+ else
+ return nil
+ end
+ end
+ return tt
+ elseif haszero and (n==nt+1) then
+ local tt={}
+ for i=0,nt do
+ local v=t[i]
+ local tv=type(v)
+ if tv=="number" then
+ if hexify then
+ tt[i+1]=format("0x%X",v)
+ else
+ tt[i+1]=v
+ end
+ elseif tv=="string" then
+ tt[i+1]=format("%q",v)
+ elseif tv=="boolean" then
+ tt[i+1]=v and "true" or "false"
+ else
+ return nil
+ end
+ end
+ tt[1]="[0] = "..tt[1]
+ return tt
+ end
+ end
+ return nil
+end
+table.is_simple_table=is_simple_table
+local propername=patterns.propername
+local function dummy() end
+local function do_serialize(root,name,depth,level,indexed)
+ if level>0 then
+ depth=depth.." "
+ if indexed then
+ handle(format("%s{",depth))
+ else
+ local tn=type(name)
+ if tn=="number" then
+ if hexify then
+ handle(format("%s[0x%X]={",depth,name))
+ else
+ handle(format("%s[%s]={",depth,name))
+ end
+ elseif tn=="string" then
+ if noquotes and not reserved[name] and lpegmatch(propername,name) then
+ handle(format("%s%s={",depth,name))
+ else
+ handle(format("%s[%q]={",depth,name))
+ end
+ elseif tn=="boolean" then
+ handle(format("%s[%s]={",depth,name and "true" or "false"))
+ else
+ handle(format("%s{",depth))
+ end
+ end
+ end
+ if root and next(root)~=nil then
+ local first,last=nil,0
+ if compact then
+ last=#root
+ for k=1,last do
+ if rawget(root,k)==nil then
+ last=k-1
+ break
+ end
+ end
+ if last>0 then
+ first=1
+ end
+ end
+ local sk=sortedkeys(root)
+ for i=1,#sk do
+ local k=sk[i]
+ local v=root[k]
+ local tv=type(v)
+ local tk=type(k)
+ if compact and first and tk=="number" and k>=first and k<=last then
+ if tv=="number" then
+ if hexify then
+ handle(format("%s 0x%X,",depth,v))
+ else
+ handle(format("%s %s,",depth,v))
+ end
+ elseif tv=="string" then
+ handle(format("%s %q,",depth,v))
+ elseif tv=="table" then
+ if next(v)==nil then
+ handle(format("%s {},",depth))
+ elseif inline then
+ local st=is_simple_table(v,hexify)
+ if st then
+ handle(format("%s { %s },",depth,concat(st,", ")))
+ else
+ do_serialize(v,k,depth,level+1,true)
+ end
+ else
+ do_serialize(v,k,depth,level+1,true)
+ end
+ elseif tv=="boolean" then
+ handle(format("%s %s,",depth,v and "true" or "false"))
+ elseif tv=="function" then
+ if functions then
+ handle(format('%s load(%q),',depth,dump(v)))
+ else
+ handle(format('%s "function",',depth))
+ end
+ else
+ handle(format("%s %q,",depth,tostring(v)))
+ end
+ elseif k=="__p__" then
+ if false then
+ handle(format("%s __p__=nil,",depth))
+ end
+ elseif tv=="number" then
+ if tk=="number" then
+ if hexify then
+ handle(format("%s [0x%X]=0x%X,",depth,k,v))
+ else
+ handle(format("%s [%s]=%s,",depth,k,v))
+ end
+ elseif tk=="boolean" then
+ if hexify then
+ handle(format("%s [%s]=0x%X,",depth,k and "true" or "false",v))
+ else
+ handle(format("%s [%s]=%s,",depth,k and "true" or "false",v))
+ end
+ elseif tk~="string" then
+ elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
+ if hexify then
+ handle(format("%s %s=0x%X,",depth,k,v))
+ else
+ handle(format("%s %s=%s,",depth,k,v))
+ end
+ else
+ if hexify then
+ handle(format("%s [%q]=0x%X,",depth,k,v))
+ else
+ handle(format("%s [%q]=%s,",depth,k,v))
+ end
+ end
+ elseif tv=="string" then
+ if tk=="number" then
+ if hexify then
+ handle(format("%s [0x%X]=%q,",depth,k,v))
+ else
+ handle(format("%s [%s]=%q,",depth,k,v))
+ end
+ elseif tk=="boolean" then
+ handle(format("%s [%s]=%q,",depth,k and "true" or "false",v))
+ elseif tk~="string" then
+ elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
+ handle(format("%s %s=%q,",depth,k,v))
+ else
+ handle(format("%s [%q]=%q,",depth,k,v))
+ end
+ elseif tv=="table" then
+ if next(v)==nil then
+ if tk=="number" then
+ if hexify then
+ handle(format("%s [0x%X]={},",depth,k))
+ else
+ handle(format("%s [%s]={},",depth,k))
+ end
+ elseif tk=="boolean" then
+ handle(format("%s [%s]={},",depth,k and "true" or "false"))
+ elseif tk~="string" then
+ elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
+ handle(format("%s %s={},",depth,k))
+ else
+ handle(format("%s [%q]={},",depth,k))
+ end
+ elseif inline then
+ local st=is_simple_table(v,hexify)
+ if st then
+ if tk=="number" then
+ if hexify then
+ handle(format("%s [0x%X]={ %s },",depth,k,concat(st,", ")))
+ else
+ handle(format("%s [%s]={ %s },",depth,k,concat(st,", ")))
+ end
+ elseif tk=="boolean" then
+ handle(format("%s [%s]={ %s },",depth,k and "true" or "false",concat(st,", ")))
+ elseif tk~="string" then
+ elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
+ handle(format("%s %s={ %s },",depth,k,concat(st,", ")))
+ else
+ handle(format("%s [%q]={ %s },",depth,k,concat(st,", ")))
+ end
+ else
+ do_serialize(v,k,depth,level+1)
+ end
+ else
+ do_serialize(v,k,depth,level+1)
+ end
+ elseif tv=="boolean" then
+ if tk=="number" then
+ if hexify then
+ handle(format("%s [0x%X]=%s,",depth,k,v and "true" or "false"))
+ else
+ handle(format("%s [%s]=%s,",depth,k,v and "true" or "false"))
+ end
+ elseif tk=="boolean" then
+ handle(format("%s [%s]=%s,",depth,tostring(k),v and "true" or "false"))
+ elseif tk~="string" then
+ elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
+ handle(format("%s %s=%s,",depth,k,v and "true" or "false"))
+ else
+ handle(format("%s [%q]=%s,",depth,k,v and "true" or "false"))
+ end
+ elseif tv=="function" then
+ if functions then
+ local f=getinfo(v).what=="C" and dump(dummy) or dump(v)
+ if tk=="number" then
+ if hexify then
+ handle(format("%s [0x%X]=load(%q),",depth,k,f))
+ else
+ handle(format("%s [%s]=load(%q),",depth,k,f))
+ end
+ elseif tk=="boolean" then
+ handle(format("%s [%s]=load(%q),",depth,k and "true" or "false",f))
+ elseif tk~="string" then
+ elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
+ handle(format("%s %s=load(%q),",depth,k,f))
+ else
+ handle(format("%s [%q]=load(%q),",depth,k,f))
+ end
+ end
+ else
+ if tk=="number" then
+ if hexify then
+ handle(format("%s [0x%X]=%q,",depth,k,tostring(v)))
+ else
+ handle(format("%s [%s]=%q,",depth,k,tostring(v)))
+ end
+ elseif tk=="boolean" then
+ handle(format("%s [%s]=%q,",depth,k and "true" or "false",tostring(v)))
+ elseif tk~="string" then
+ elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
+ handle(format("%s %s=%q,",depth,k,tostring(v)))
+ else
+ handle(format("%s [%q]=%q,",depth,k,tostring(v)))
+ end
+ end
+ end
+ end
+ if level>0 then
+ handle(format("%s},",depth))
+ end
+end
+local function serialize(_handle,root,name,specification)
+ local tname=type(name)
+ if type(specification)=="table" then
+ noquotes=specification.noquotes
+ hexify=specification.hexify
+ handle=_handle or specification.handle or print
+ functions=specification.functions
+ compact=specification.compact
+ inline=specification.inline and compact
+ metacheck=specification.metacheck
+ if functions==nil then
+ functions=true
+ end
+ if compact==nil then
+ compact=true
+ end
+ if inline==nil then
+ inline=compact
+ end
+ if metacheck==nil then
+ metacheck=true
+ end
+ else
+ noquotes=false
+ hexify=false
+ handle=_handle or print
+ compact=true
+ inline=true
+ functions=true
+ metacheck=true
+ end
+ if tname=="string" then
+ if name=="return" then
+ handle("return {")
+ else
+ handle(name.."={")
+ end
+ elseif tname=="number" then
+ if hexify then
+ handle(format("[0x%X]={",name))
+ else
+ handle("["..name.."]={")
+ end
+ elseif tname=="boolean" then
+ if name then
+ handle("return {")
+ else
+ handle("{")
+ end
+ else
+ handle("t={")
+ end
+ if root then
+ if metacheck and getmetatable(root) then
+ local dummy=root._w_h_a_t_e_v_e_r_
+ root._w_h_a_t_e_v_e_r_=nil
+ end
+ if next(root)~=nil then
+ do_serialize(root,name,"",0)
+ end
+ end
+ handle("}")
+end
+function table.serialize(root,name,specification)
+ local t,n={},0
+ local function flush(s)
+ n=n+1
+ t[n]=s
+ end
+ serialize(flush,root,name,specification)
+ return concat(t,"\n")
+end
+table.tohandle=serialize
+local maxtab=2*1024
+function table.tofile(filename,root,name,specification)
+ local f=io.open(filename,'w')
+ if f then
+ if maxtab>1 then
+ local t,n={},0
+ local function flush(s)
+ n=n+1
+ t[n]=s
+ if n>maxtab then
+ f:write(concat(t,"\n"),"\n")
+ t,n={},0
+ end
+ end
+ serialize(flush,root,name,specification)
+ f:write(concat(t,"\n"),"\n")
+ else
+ local function flush(s)
+ f:write(s,"\n")
+ end
+ serialize(flush,root,name,specification)
+ end
+ f:close()
+ io.flush()
+ end
+end
+local function flattened(t,f,depth)
+ if f==nil then
+ f={}
+ depth=0xFFFF
+ elseif tonumber(f) then
+ depth=f
+ f={}
+ elseif not depth then
+ depth=0xFFFF
+ end
+ for k,v in next,t do
+ if type(k)~="number" then
+ if depth>0 and type(v)=="table" then
+ flattened(v,f,depth-1)
+ else
+ f[#f+1]=v
+ end
+ end
+ end
+ for k=1,#t do
+ local v=t[k]
+ if depth>0 and type(v)=="table" then
+ flattened(v,f,depth-1)
+ else
+ f[#f+1]=v
+ end
+ end
+ return f
+end
+table.flattened=flattened
+local function collapsed(t,f,h)
+ if f==nil then
+ f={}
+ h={}
+ end
+ for k=1,#t do
+ local v=t[k]
+ if type(v)=="table" then
+ collapsed(v,f,h)
+ elseif not h[v] then
+ f[#f+1]=v
+ h[v]=true
+ end
+ end
+ return f
+end
+local function collapsedhash(t,h)
+ if h==nil then
+ h={}
+ end
+ for k=1,#t do
+ local v=t[k]
+ if type(v)=="table" then
+ collapsedhash(v,h)
+ else
+ h[v]=true
+ end
+ end
+ return h
+end
+table.collapsed=collapsed
+table.collapsedhash=collapsedhash
+local function unnest(t,f)
+ if not f then
+ f={}
+ end
+ for i=1,#t do
+ local v=t[i]
+ if type(v)=="table" then
+ if type(v[1])=="table" then
+ unnest(v,f)
+ else
+ f[#f+1]=v
+ end
+ else
+ f[#f+1]=v
+ end
+ end
+ return f
+end
+function table.unnest(t)
+ return unnest(t)
+end
+local function are_equal(a,b,n,m)
+ if a==b then
+ return true
+ elseif a and b and #a==#b then
+ n=n or 1
+ m=m or #a
+ for i=n,m do
+ local ai,bi=a[i],b[i]
+ if ai==bi then
+ elseif type(ai)=="table" and type(bi)=="table" then
+ if not are_equal(ai,bi) then
+ return false
+ end
+ else
+ return false
+ end
+ end
+ return true
+ else
+ return false
+ end
+end
+local function identical(a,b)
+ if a~=b then
+ for ka,va in next,a do
+ local vb=b[ka]
+ if va==vb then
+ elseif type(va)=="table" and type(vb)=="table" then
+ if not identical(va,vb) then
+ return false
+ end
+ else
+ return false
+ end
+ end
+ end
+ return true
+end
+table.identical=identical
+table.are_equal=are_equal
+local function sparse(old,nest,keeptables)
+ local new={}
+ for k,v in next,old do
+ if not (v=="" or v==false) then
+ if nest and type(v)=="table" then
+ v=sparse(v,nest)
+ if keeptables or next(v)~=nil then
+ new[k]=v
+ end
+ else
+ new[k]=v
+ end
+ end
+ end
+ return new
+end
+table.sparse=sparse
+function table.compact(t)
+ return sparse(t,true,true)
+end
+function table.contains(t,v)
+ if t then
+ for i=1,#t do
+ if t[i]==v then
+ return i
+ end
+ end
+ end
+ return false
+end
+function table.count(t)
+ local n=0
+ for k,v in next,t do
+ n=n+1
+ end
+ return n
+end
+function table.swapped(t,s)
+ local n={}
+ if s then
+ for k,v in next,s do
+ n[k]=v
+ end
+ end
+ for k,v in next,t do
+ n[v]=k
+ end
+ return n
+end
+function table.hashed(t)
+ for i=1,#t do
+ t[t[i]]=i
+ end
+ return t
+end
+function table.mirrored(t)
+ local n={}
+ for k,v in next,t do
+ n[v]=k
+ n[k]=v
+ end
+ return n
+end
+function table.reversed(t)
+ if t then
+ local tt,tn={},#t
+ if tn>0 then
+ local ttn=0
+ for i=tn,1,-1 do
+ ttn=ttn+1
+ tt[ttn]=t[i]
+ end
+ end
+ return tt
+ end
+end
+function table.reverse(t)
+ if t then
+ local n=#t
+ for i=1,floor(n/2) do
+ local j=n-i+1
+ t[i],t[j]=t[j],t[i]
+ end
+ return t
+ end
+end
+function table.sequenced(t,sep,simple)
+ if not t then
+ return ""
+ end
+ local n=#t
+ local s={}
+ if n>0 then
+ for i=1,n do
+ s[i]=tostring(t[i])
+ end
+ else
+ n=0
+ for k,v in sortedhash(t) do
+ if simple then
+ if v==true then
+ n=n+1
+ s[n]=k
+ elseif v and v~="" then
+ n=n+1
+ s[n]=k.."="..tostring(v)
+ end
+ else
+ n=n+1
+ s[n]=k.."="..tostring(v)
+ end
+ end
+ end
+ return concat(s,sep or " | ")
+end
+function table.print(t,...)
+ if type(t)~="table" then
+ print(tostring(t))
+ else
+ serialize(print,t,...)
+ end
+end
+if setinspector then
+ setinspector("table",function(v) if type(v)=="table" then serialize(print,v,"table") return true end end)
+end
+function table.sub(t,i,j)
+ return { unpack(t,i,j) }
+end
+function table.is_empty(t)
+ return not t or next(t)==nil
+end
+function table.has_one_entry(t)
+ return t and next(t,next(t))==nil
+end
+function table.loweredkeys(t)
+ local l={}
+ for k,v in next,t do
+ l[lower(k)]=v
+ end
+ return l
+end
+function table.unique(old)
+ local hash={}
+ local new={}
+ local n=0
+ for i=1,#old do
+ local oi=old[i]
+ if not hash[oi] then
+ n=n+1
+ new[n]=oi
+ hash[oi]=true
+ end
+ end
+ return new
+end
+function table.sorted(t,...)
+ sort(t,...)
+ return t
+end
+function table.values(t,s)
+ if t then
+ local values,keys,v={},{},0
+ for key,value in next,t do
+ if not keys[value] then
+ v=v+1
+ values[v]=value
+ keys[k]=key
+ end
+ end
+ if s then
+ sort(values)
+ end
+ return values
+ else
+ return {}
+ end
+end
+function table.filtered(t,pattern,sort,cmp)
+ if t and type(pattern)=="string" then
+ if sort then
+ local s
+ if cmp then
+ s=sortedhashkeys(t,function(a,b) return cmp(t,a,b) end)
+ else
+ s=sortedkeys(t)
+ end
+ local n=0
+ local m=#s
+ local function kv(s)
+ while n<m do
+ n=n+1
+ local k=s[n]
+ if find(k,pattern) then
+ return k,t[k]
+ end
+ end
+ end
+ return kv,s
+ else
+ local n=next(t)
+ local function iterator()
+ while n~=nil do
+ local k=n
+ n=next(t,k)
+ if find(k,pattern) then
+ return k,t[k]
+ end
+ end
+ end
+ return iterator,t
+ end
+ else
+ return nothing
+ end
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['l-io']={
+ version=1.001,
+ comment="companion to luat-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local io=io
+local open,flush,write,read=io.open,io.flush,io.write,io.read
+local byte,find,gsub,format=string.byte,string.find,string.gsub,string.format
+local concat=table.concat
+local floor=math.floor
+local type=type
+if string.find(os.getenv("PATH"),";",1,true) then
+ io.fileseparator,io.pathseparator="\\",";"
+else
+ io.fileseparator,io.pathseparator="/",":"
+end
+local large=2^24
+local medium=large/16
+local small=medium/8
+local function readall(f)
+ local size=f:seek("end")
+ if size>0 then
+ f:seek("set",0)
+ return f:read(size)
+ else
+ return ""
+ end
+end
+io.readall=readall
+function io.loaddata(filename,textmode)
+ local f=open(filename,(textmode and 'r') or 'rb')
+ if f then
+ local size=f:seek("end")
+ local data=nil
+ if size>0 then
+ f:seek("set",0)
+ data=f:read(size)
+ end
+ f:close()
+ return data
+ end
+end
+function io.copydata(source,target,action)
+ local f=open(source,"rb")
+ if f then
+ local g=open(target,"wb")
+ if g then
+ local size=f:seek("end")
+ if size>0 then
+ f:seek("set",0)
+ local data=f:read(size)
+ if action then
+ data=action(data)
+ end
+ if data then
+ g:write(data)
+ end
+ end
+ g:close()
+ end
+ f:close()
+ flush()
+ end
+end
+function io.savedata(filename,data,joiner)
+ local f=open(filename,"wb")
+ if f then
+ if type(data)=="table" then
+ f:write(concat(data,joiner or ""))
+ elseif type(data)=="function" then
+ data(f)
+ else
+ f:write(data or "")
+ end
+ f:close()
+ flush()
+ return true
+ else
+ return false
+ end
+end
+if fio and fio.readline then
+ local readline=fio.readline
+ function io.loadlines(filename,n)
+ local f=open(filename,'r')
+ if not f then
+ elseif n then
+ local lines={}
+ for i=1,n do
+ local line=readline(f)
+ if line then
+ lines[i]=line
+ else
+ break
+ end
+ end
+ f:close()
+ lines=concat(lines,"\n")
+ if #lines>0 then
+ return lines
+ end
+ else
+ local line=readline(f)
+ f:close()
+ if line and #line>0 then
+ return line
+ end
+ end
+ end
+else
+ function io.loadlines(filename,n)
+ local f=open(filename,'r')
+ if not f then
+ elseif n then
+ local lines={}
+ for i=1,n do
+ local line=f:read("*lines")
+ if line then
+ lines[i]=line
+ else
+ break
+ end
+ end
+ f:close()
+ lines=concat(lines,"\n")
+ if #lines>0 then
+ return lines
+ end
+ else
+ local line=f:read("*line") or ""
+ f:close()
+ if #line>0 then
+ return line
+ end
+ end
+ end
+end
+function io.loadchunk(filename,n)
+ local f=open(filename,'rb')
+ if f then
+ local data=f:read(n or 1024)
+ f:close()
+ if #data>0 then
+ return data
+ end
+ end
+end
+function io.exists(filename)
+ local f=open(filename)
+ if f==nil then
+ return false
+ else
+ f:close()
+ return true
+ end
+end
+function io.size(filename)
+ local f=open(filename)
+ if f==nil then
+ return 0
+ else
+ local s=f:seek("end")
+ f:close()
+ return s
+ end
+end
+local function noflines(f)
+ if type(f)=="string" then
+ local f=open(filename)
+ if f then
+ local n=f and noflines(f) or 0
+ f:close()
+ return n
+ else
+ return 0
+ end
+ else
+ local n=0
+ for _ in f:lines() do
+ n=n+1
+ end
+ f:seek('set',0)
+ return n
+ end
+end
+io.noflines=noflines
+local nextchar={
+ [ 4]=function(f)
+ return f:read(1,1,1,1)
+ end,
+ [ 2]=function(f)
+ return f:read(1,1)
+ end,
+ [ 1]=function(f)
+ return f:read(1)
+ end,
+ [-2]=function(f)
+ local a,b=f:read(1,1)
+ return b,a
+ end,
+ [-4]=function(f)
+ local a,b,c,d=f:read(1,1,1,1)
+ return d,c,b,a
+ end
+}
+function io.characters(f,n)
+ if f then
+ return nextchar[n or 1],f
+ end
+end
+local nextbyte={
+ [4]=function(f)
+ local a,b,c,d=f:read(1,1,1,1)
+ if d then
+ return byte(a),byte(b),byte(c),byte(d)
+ end
+ end,
+ [3]=function(f)
+ local a,b,c=f:read(1,1,1)
+ if b then
+ return byte(a),byte(b),byte(c)
+ end
+ end,
+ [2]=function(f)
+ local a,b=f:read(1,1)
+ if b then
+ return byte(a),byte(b)
+ end
+ end,
+ [1]=function (f)
+ local a=f:read(1)
+ if a then
+ return byte(a)
+ end
+ end,
+ [-2]=function (f)
+ local a,b=f:read(1,1)
+ if b then
+ return byte(b),byte(a)
+ end
+ end,
+ [-3]=function(f)
+ local a,b,c=f:read(1,1,1)
+ if b then
+ return byte(c),byte(b),byte(a)
+ end
+ end,
+ [-4]=function(f)
+ local a,b,c,d=f:read(1,1,1,1)
+ if d then
+ return byte(d),byte(c),byte(b),byte(a)
+ end
+ end
+}
+function io.bytes(f,n)
+ if f then
+ return nextbyte[n or 1],f
+ else
+ return nil,nil
+ end
+end
+function io.ask(question,default,options)
+ while true do
+ write(question)
+ if options then
+ write(format(" [%s]",concat(options,"|")))
+ end
+ if default then
+ write(format(" [%s]",default))
+ end
+ write(format(" "))
+ flush()
+ local answer=read()
+ answer=gsub(answer,"^%s*(.*)%s*$","%1")
+ if answer=="" and default then
+ return default
+ elseif not options then
+ return answer
+ else
+ for k=1,#options do
+ if options[k]==answer then
+ return answer
+ end
+ end
+ local pattern="^"..answer
+ for k=1,#options do
+ local v=options[k]
+ if find(v,pattern) then
+ return v
+ end
+ end
+ end
+ end
+end
+local function readnumber(f,n,m)
+ if m then
+ f:seek("set",n)
+ n=m
+ end
+ if n==1 then
+ return byte(f:read(1))
+ elseif n==2 then
+ local a,b=byte(f:read(2),1,2)
+ return 0x100*a+b
+ elseif n==3 then
+ local a,b,c=byte(f:read(3),1,3)
+ return 0x10000*a+0x100*b+c
+ elseif n==4 then
+ local a,b,c,d=byte(f:read(4),1,4)
+ return 0x1000000*a+0x10000*b+0x100*c+d
+ elseif n==8 then
+ local a,b=readnumber(f,4),readnumber(f,4)
+ return 0x100*a+b
+ elseif n==12 then
+ local a,b,c=readnumber(f,4),readnumber(f,4),readnumber(f,4)
+ return 0x10000*a+0x100*b+c
+ elseif n==-2 then
+ local b,a=byte(f:read(2),1,2)
+ return 0x100*a+b
+ elseif n==-3 then
+ local c,b,a=byte(f:read(3),1,3)
+ return 0x10000*a+0x100*b+c
+ elseif n==-4 then
+ local d,c,b,a=byte(f:read(4),1,4)
+ return 0x1000000*a+0x10000*b+0x100*c+d
+ elseif n==-8 then
+ local h,g,f,e,d,c,b,a=byte(f:read(8),1,8)
+ return 0x100000000000000*a+0x1000000000000*b+0x10000000000*c+0x100000000*d+0x1000000*e+0x10000*f+0x100*g+h
+ else
+ return 0
+ end
+end
+io.readnumber=readnumber
+function io.readstring(f,n,m)
+ if m then
+ f:seek("set",n)
+ n=m
+ end
+ local str=gsub(f:read(n),"\000","")
+ return str
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['l-file']={
+ version=1.001,
+ comment="companion to luat-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+file=file or {}
+local file=file
+if not lfs then
+ lfs=optionalrequire("lfs")
+end
+local insert,concat=table.insert,table.concat
+local match,find,gmatch=string.match,string.find,string.gmatch
+local lpegmatch=lpeg.match
+local getcurrentdir,attributes=lfs.currentdir,lfs.attributes
+local checkedsplit=string.checkedsplit
+local P,R,S,C,Cs,Cp,Cc,Ct=lpeg.P,lpeg.R,lpeg.S,lpeg.C,lpeg.Cs,lpeg.Cp,lpeg.Cc,lpeg.Ct
+local tricky=S("/\\")*P(-1)
+local attributes=lfs.attributes
+if sandbox then
+ sandbox.redefine(lfs.isfile,"lfs.isfile")
+ sandbox.redefine(lfs.isdir,"lfs.isdir")
+end
+function lfs.isdir(name)
+ if lpegmatch(tricky,name) then
+ return attributes(name,"mode")=="directory"
+ else
+ return attributes(name.."/.","mode")=="directory"
+ end
+end
+function lfs.isfile(name)
+ return attributes(name,"mode")=="file"
+end
+local colon=P(":")
+local period=P(".")
+local periods=P("..")
+local fwslash=P("/")
+local bwslash=P("\\")
+local slashes=S("\\/")
+local noperiod=1-period
+local noslashes=1-slashes
+local name=noperiod^1
+local suffix=period/""*(1-period-slashes)^1*-1
+local pattern=C((1-(slashes^1*noslashes^1*-1))^1)*P(1)
+local function pathpart(name,default)
+ return name and lpegmatch(pattern,name) or default or ""
+end
+local pattern=(noslashes^0*slashes)^1*C(noslashes^1)*-1
+local function basename(name)
+ return name and lpegmatch(pattern,name) or name
+end
+local pattern=(noslashes^0*slashes^1)^0*Cs((1-suffix)^1)*suffix^0
+local function nameonly(name)
+ return name and lpegmatch(pattern,name) or name
+end
+local pattern=(noslashes^0*slashes)^0*(noperiod^1*period)^1*C(noperiod^1)*-1
+local function suffixonly(name)
+ return name and lpegmatch(pattern,name) or ""
+end
+local pattern=(noslashes^0*slashes)^0*noperiod^1*((period*C(noperiod^1))^1)*-1+Cc("")
+local function suffixesonly(name)
+ if name then
+ return lpegmatch(pattern,name)
+ else
+ return ""
+ end
+end
+file.pathpart=pathpart
+file.basename=basename
+file.nameonly=nameonly
+file.suffixonly=suffixonly
+file.suffix=suffixonly
+file.suffixesonly=suffixesonly
+file.suffixes=suffixesonly
+file.dirname=pathpart
+file.extname=suffixonly
+local drive=C(R("az","AZ"))*colon
+local path=C((noslashes^0*slashes)^0)
+local suffix=period*C(P(1-period)^0*P(-1))
+local base=C((1-suffix)^0)
+local rest=C(P(1)^0)
+drive=drive+Cc("")
+path=path+Cc("")
+base=base+Cc("")
+suffix=suffix+Cc("")
+local pattern_a=drive*path*base*suffix
+local pattern_b=path*base*suffix
+local pattern_c=C(drive*path)*C(base*suffix)
+local pattern_d=path*rest
+function file.splitname(str,splitdrive)
+ if not str then
+ elseif splitdrive then
+ return lpegmatch(pattern_a,str)
+ else
+ return lpegmatch(pattern_b,str)
+ end
+end
+function file.splitbase(str)
+ if str then
+ return lpegmatch(pattern_d,str)
+ else
+ return "",str
+ end
+end
+function file.nametotable(str,splitdrive)
+ if str then
+ local path,drive,subpath,name,base,suffix=lpegmatch(pattern_c,str)
+ if splitdrive then
+ return {
+ path=path,
+ drive=drive,
+ subpath=subpath,
+ name=name,
+ base=base,
+ suffix=suffix,
+ }
+ else
+ return {
+ path=path,
+ name=name,
+ base=base,
+ suffix=suffix,
+ }
+ end
+ end
+end
+local pattern=Cs(((period*(1-period-slashes)^1*-1)/""+1)^1)
+function file.removesuffix(name)
+ return name and lpegmatch(pattern,name)
+end
+local suffix=period/""*(1-period-slashes)^1*-1
+local pattern=Cs((noslashes^0*slashes^1)^0*((1-suffix)^1))*Cs(suffix)
+function file.addsuffix(filename,suffix,criterium)
+ if not filename or not suffix or suffix=="" then
+ return filename
+ elseif criterium==true then
+ return filename.."."..suffix
+ elseif not criterium then
+ local n,s=lpegmatch(pattern,filename)
+ if not s or s=="" then
+ return filename.."."..suffix
+ else
+ return filename
+ end
+ else
+ local n,s=lpegmatch(pattern,filename)
+ if s and s~="" then
+ local t=type(criterium)
+ if t=="table" then
+ for i=1,#criterium do
+ if s==criterium[i] then
+ return filename
+ end
+ end
+ elseif t=="string" then
+ if s==criterium then
+ return filename
+ end
+ end
+ end
+ return (n or filename).."."..suffix
+ end
+end
+local suffix=period*(1-period-slashes)^1*-1
+local pattern=Cs((1-suffix)^0)
+function file.replacesuffix(name,suffix)
+ if name and suffix and suffix~="" then
+ return lpegmatch(pattern,name).."."..suffix
+ else
+ return name
+ end
+end
+local reslasher=lpeg.replacer(P("\\"),"/")
+function file.reslash(str)
+ return str and lpegmatch(reslasher,str)
+end
+function file.is_writable(name)
+ if not name then
+ elseif lfs.isdir(name) then
+ name=name.."/m_t_x_t_e_s_t.tmp"
+ local f=io.open(name,"wb")
+ if f then
+ f:close()
+ os.remove(name)
+ return true
+ end
+ elseif lfs.isfile(name) then
+ local f=io.open(name,"ab")
+ if f then
+ f:close()
+ return true
+ end
+ else
+ local f=io.open(name,"ab")
+ if f then
+ f:close()
+ os.remove(name)
+ return true
+ end
+ end
+ return false
+end
+local readable=P("r")*Cc(true)
+function file.is_readable(name)
+ if name then
+ local a=attributes(name)
+ return a and lpegmatch(readable,a.permissions) or false
+ else
+ return false
+ end
+end
+file.isreadable=file.is_readable
+file.iswritable=file.is_writable
+function file.size(name)
+ if name then
+ local a=attributes(name)
+ return a and a.size or 0
+ else
+ return 0
+ end
+end
+function file.splitpath(str,separator)
+ return str and checkedsplit(lpegmatch(reslasher,str),separator or io.pathseparator)
+end
+function file.joinpath(tab,separator)
+ return tab and concat(tab,separator or io.pathseparator)
+end
+local someslash=S("\\/")
+local stripper=Cs(P(fwslash)^0/""*reslasher)
+local isnetwork=someslash*someslash*(1-someslash)+(1-fwslash-colon)^1*colon
+local isroot=fwslash^1*-1
+local hasroot=fwslash^1
+local reslasher=lpeg.replacer(S("\\/"),"/")
+local deslasher=lpeg.replacer(S("\\/")^1,"/")
+function file.join(one,two,three,...)
+ if not two then
+ return one=="" and one or lpegmatch(reslasher,one)
+ end
+ if one=="" then
+ return lpegmatch(stripper,three and concat({ two,three,... },"/") or two)
+ end
+ if lpegmatch(isnetwork,one) then
+ local one=lpegmatch(reslasher,one)
+ local two=lpegmatch(deslasher,three and concat({ two,three,... },"/") or two)
+ if lpegmatch(hasroot,two) then
+ return one..two
+ else
+ return one.."/"..two
+ end
+ elseif lpegmatch(isroot,one) then
+ local two=lpegmatch(deslasher,three and concat({ two,three,... },"/") or two)
+ if lpegmatch(hasroot,two) then
+ return two
+ else
+ return "/"..two
+ end
+ else
+ return lpegmatch(deslasher,concat({ one,two,three,... },"/"))
+ end
+end
+local drivespec=R("az","AZ")^1*colon
+local anchors=fwslash+drivespec
+local untouched=periods+(1-period)^1*P(-1)
+local mswindrive=Cs(drivespec*(bwslash/"/"+fwslash)^0)
+local mswinuncpath=(bwslash+fwslash)*(bwslash+fwslash)*Cc("//")
+local splitstarter=(mswindrive+mswinuncpath+Cc(false))*Ct(lpeg.splitat(S("/\\")^1))
+local absolute=fwslash
+function file.collapsepath(str,anchor)
+ if not str then
+ return
+ end
+ if anchor==true and not lpegmatch(anchors,str) then
+ str=getcurrentdir().."/"..str
+ end
+ if str=="" or str=="." then
+ return "."
+ elseif lpegmatch(untouched,str) then
+ return lpegmatch(reslasher,str)
+ end
+ local starter,oldelements=lpegmatch(splitstarter,str)
+ local newelements={}
+ local i=#oldelements
+ while i>0 do
+ local element=oldelements[i]
+ if element=='.' then
+ elseif element=='..' then
+ local n=i-1
+ while n>0 do
+ local element=oldelements[n]
+ if element~='..' and element~='.' then
+ oldelements[n]='.'
+ break
+ else
+ n=n-1
+ end
+ end
+ if n<1 then
+ insert(newelements,1,'..')
+ end
+ elseif element~="" then
+ insert(newelements,1,element)
+ end
+ i=i-1
+ end
+ if #newelements==0 then
+ return starter or "."
+ elseif starter then
+ return starter..concat(newelements,'/')
+ elseif lpegmatch(absolute,str) then
+ return "/"..concat(newelements,'/')
+ else
+ newelements=concat(newelements,'/')
+ if anchor=="." and find(str,"^%./") then
+ return "./"..newelements
+ else
+ return newelements
+ end
+ end
+end
+local validchars=R("az","09","AZ","--","..")
+local pattern_a=lpeg.replacer(1-validchars)
+local pattern_a=Cs((validchars+P(1)/"-")^1)
+local whatever=P("-")^0/""
+local pattern_b=Cs(whatever*(1-whatever*-1)^1)
+function file.robustname(str,strict)
+ if str then
+ str=lpegmatch(pattern_a,str) or str
+ if strict then
+ return lpegmatch(pattern_b,str) or str
+ else
+ return str
+ end
+ end
+end
+local loaddata=io.loaddata
+local savedata=io.savedata
+file.readdata=loaddata
+file.savedata=savedata
+function file.copy(oldname,newname)
+ if oldname and newname then
+ local data=loaddata(oldname)
+ if data and data~="" then
+ savedata(newname,data)
+ end
+ end
+end
+local letter=R("az","AZ")+S("_-+")
+local separator=P("://")
+local qualified=period^0*fwslash+letter*colon+letter^1*separator+letter^1*fwslash
+local rootbased=fwslash+letter*colon
+lpeg.patterns.qualified=qualified
+lpeg.patterns.rootbased=rootbased
+function file.is_qualified_path(filename)
+ return filename and lpegmatch(qualified,filename)~=nil
+end
+function file.is_rootbased_path(filename)
+ return filename and lpegmatch(rootbased,filename)~=nil
+end
+function file.strip(name,dir)
+ if name then
+ local b,a=match(name,"^(.-)"..dir.."(.*)$")
+ return a~="" and a or name
+ end
+end
+function lfs.mkdirs(path)
+ local full=""
+ for sub in gmatch(path,"(/*[^\\/]+)") do
+ full=full..sub
+ lfs.mkdir(full)
+ end
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['l-boolean']={
+ version=1.001,
+ comment="companion to luat-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local type,tonumber=type,tonumber
+boolean=boolean or {}
+local boolean=boolean
+function boolean.tonumber(b)
+ if b then return 1 else return 0 end
+end
+function toboolean(str,tolerant)
+ if str==nil then
+ return false
+ elseif str==false then
+ return false
+ elseif str==true then
+ return true
+ elseif str=="true" then
+ return true
+ elseif str=="false" then
+ return false
+ elseif not tolerant then
+ return false
+ elseif str==0 then
+ return false
+ elseif (tonumber(str) or 0)>0 then
+ return true
+ else
+ return str=="yes" or str=="on" or str=="t"
+ end
+end
+string.toboolean=toboolean
+function string.booleanstring(str)
+ if str=="0" then
+ return false
+ elseif str=="1" then
+ return true
+ elseif str=="" then
+ return false
+ elseif str=="false" then
+ return false
+ elseif str=="true" then
+ return true
+ elseif (tonumber(str) or 0)>0 then
+ return true
+ else
+ return str=="yes" or str=="on" or str=="t"
+ end
+end
+function string.is_boolean(str,default,strict)
+ if type(str)=="string" then
+ if str=="true" or str=="yes" or str=="on" or str=="t" or (not strict and str=="1") then
+ return true
+ elseif str=="false" or str=="no" or str=="off" or str=="f" or (not strict and str=="0") then
+ return false
+ end
+ end
+ return default
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['l-math']={
+ version=1.001,
+ comment="companion to luat-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local floor,sin,cos,tan=math.floor,math.sin,math.cos,math.tan
+if not math.ceiling then
+ math.ceiling=math.ceil
+end
+if not math.round then
+ function math.round(x) return floor(x+0.5) end
+end
+if not math.div then
+ function math.div(n,m) return floor(n/m) end
+end
+if not math.mod then
+ function math.mod(n,m) return n%m end
+end
+local pipi=2*math.pi/360
+if not math.sind then
+ function math.sind(d) return sin(d*pipi) end
+ function math.cosd(d) return cos(d*pipi) end
+ function math.tand(d) return tan(d*pipi) end
+end
+if not math.odd then
+ function math.odd (n) return n%2~=0 end
+ function math.even(n) return n%2==0 end
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['l-unicode']={
+ version=1.001,
+ comment="companion to luat-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+utf=utf or (unicode and unicode.utf8) or {}
+utf.characters=utf.characters or string.utfcharacters
+utf.values=utf.values or string.utfvalues
+local type=type
+local char,byte,format,sub,gmatch=string.char,string.byte,string.format,string.sub,string.gmatch
+local concat=table.concat
+local P,C,R,Cs,Ct,Cmt,Cc,Carg,Cp=lpeg.P,lpeg.C,lpeg.R,lpeg.Cs,lpeg.Ct,lpeg.Cmt,lpeg.Cc,lpeg.Carg,lpeg.Cp
+local lpegmatch=lpeg.match
+local patterns=lpeg.patterns
+local tabletopattern=lpeg.utfchartabletopattern
+local bytepairs=string.bytepairs
+local finder=lpeg.finder
+local replacer=lpeg.replacer
+local utfvalues=utf.values
+local utfgmatch=utf.gmatch
+local p_utftype=patterns.utftype
+local p_utfstricttype=patterns.utfstricttype
+local p_utfoffset=patterns.utfoffset
+local p_utf8char=patterns.utf8character
+local p_utf8byte=patterns.utf8byte
+local p_utfbom=patterns.utfbom
+local p_newline=patterns.newline
+local p_whitespace=patterns.whitespace
+if not unicode then
+ unicode={ utf=utf }
+end
+if not utf.char then
+ local floor,char=math.floor,string.char
+ function utf.char(n)
+ if n<0x80 then
+ return char(n)
+ elseif n<0x800 then
+ return char(
+ 0xC0+floor(n/0x40),
+ 0x80+(n%0x40)
+ )
+ elseif n<0x10000 then
+ return char(
+ 0xE0+floor(n/0x1000),
+ 0x80+(floor(n/0x40)%0x40),
+ 0x80+(n%0x40)
+ )
+ elseif n<0x200000 then
+ return char(
+ 0xF0+floor(n/0x40000),
+ 0x80+(floor(n/0x1000)%0x40),
+ 0x80+(floor(n/0x40)%0x40),
+ 0x80+(n%0x40)
+ )
+ else
+ return ""
+ end
+ end
+end
+if not utf.byte then
+ local utf8byte=patterns.utf8byte
+ function utf.byte(c)
+ return lpegmatch(utf8byte,c)
+ end
+end
+local utfchar,utfbyte=utf.char,utf.byte
+function utf.filetype(data)
+ return data and lpegmatch(p_utftype,data) or "unknown"
+end
+local toentities=Cs (
+ (
+ patterns.utf8one+(
+ patterns.utf8two+patterns.utf8three+patterns.utf8four
+ )/function(s) local b=utfbyte(s) if b<127 then return s else return format("&#%X;",b) end end
+ )^0
+)
+patterns.toentities=toentities
+function utf.toentities(str)
+ return lpegmatch(toentities,str)
+end
+local one=P(1)
+local two=C(1)*C(1)
+local four=C(R(utfchar(0xD8),utfchar(0xFF)))*C(1)*C(1)*C(1)
+local pattern=P("\254\255")*Cs((
+ four/function(a,b,c,d)
+ local ab=0xFF*byte(a)+byte(b)
+ local cd=0xFF*byte(c)+byte(d)
+ return utfchar((ab-0xD800)*0x400+(cd-0xDC00)+0x10000)
+ end+two/function(a,b)
+ return utfchar(byte(a)*256+byte(b))
+ end+one
+ )^1 )+P("\255\254")*Cs((
+ four/function(b,a,d,c)
+ local ab=0xFF*byte(a)+byte(b)
+ local cd=0xFF*byte(c)+byte(d)
+ return utfchar((ab-0xD800)*0x400+(cd-0xDC00)+0x10000)
+ end+two/function(b,a)
+ return utfchar(byte(a)*256+byte(b))
+ end+one
+ )^1 )
+function string.toutf(s)
+ return lpegmatch(pattern,s) or s
+end
+local validatedutf=Cs (
+ (
+ patterns.utf8one+patterns.utf8two+patterns.utf8three+patterns.utf8four+P(1)/"�"
+ )^0
+)
+patterns.validatedutf=validatedutf
+function utf.is_valid(str)
+ return type(str)=="string" and lpegmatch(validatedutf,str) or false
+end
+if not utf.len then
+ local n,f=0,1
+ local utfcharcounter=patterns.utfbom^-1*Cmt (
+ Cc(1)*patterns.utf8one^1+Cc(2)*patterns.utf8two^1+Cc(3)*patterns.utf8three^1+Cc(4)*patterns.utf8four^1,
+ function(_,t,d)
+ n=n+(t-f)/d
+ f=t
+ return true
+ end
+ )^0
+ function utf.len(str)
+ n,f=0,1
+ lpegmatch(utfcharcounter,str or "")
+ return n
+ end
+end
+utf.length=utf.len
+if not utf.sub then
+ local utflength=utf.length
+ local b,e,n,first,last=0,0,0,0,0
+ local function slide_zero(s,p)
+ n=n+1
+ if n>=last then
+ e=p-1
+ else
+ return p
+ end
+ end
+ local function slide_one(s,p)
+ n=n+1
+ if n==first then
+ b=p
+ end
+ if n>=last then
+ e=p-1
+ else
+ return p
+ end
+ end
+ local function slide_two(s,p)
+ n=n+1
+ if n==first then
+ b=p
+ else
+ return true
+ end
+ end
+ local pattern_zero=Cmt(p_utf8char,slide_zero)^0
+ local pattern_one=Cmt(p_utf8char,slide_one )^0
+ local pattern_two=Cmt(p_utf8char,slide_two )^0
+ local pattern_first=C(patterns.utf8character)
+ function utf.sub(str,start,stop)
+ if not start then
+ return str
+ end
+ if start==0 then
+ start=1
+ end
+ if not stop then
+ if start<0 then
+ local l=utflength(str)
+ start=l+start
+ else
+ start=start-1
+ end
+ b,n,first=0,0,start
+ lpegmatch(pattern_two,str)
+ if n>=first then
+ return sub(str,b)
+ else
+ return ""
+ end
+ end
+ if start<0 or stop<0 then
+ local l=utf.length(str)
+ if start<0 then
+ start=l+start
+ if start<=0 then
+ start=1
+ else
+ start=start+1
+ end
+ end
+ if stop<0 then
+ stop=l+stop
+ if stop==0 then
+ stop=1
+ else
+ stop=stop+1
+ end
+ end
+ end
+ if start==1 and stop==1 then
+ return lpegmatch(pattern_first,str) or ""
+ elseif start>stop then
+ return ""
+ elseif start>1 then
+ b,e,n,first,last=0,0,0,start-1,stop
+ lpegmatch(pattern_one,str)
+ if n>=first and e==0 then
+ e=#str
+ end
+ return sub(str,b,e)
+ else
+ b,e,n,last=1,0,0,stop
+ lpegmatch(pattern_zero,str)
+ if e==0 then
+ e=#str
+ end
+ return sub(str,b,e)
+ end
+ end
+end
+function utf.remapper(mapping,option,action)
+ local variant=type(mapping)
+ if variant=="table" then
+ action=action or mapping
+ if option=="dynamic" then
+ local pattern=false
+ table.setmetatablenewindex(mapping,function(t,k,v) rawset(t,k,v) pattern=false end)
+ return function(str)
+ if not str or str=="" then
+ return ""
+ else
+ if not pattern then
+ pattern=Cs((tabletopattern(mapping)/action+p_utf8char)^0)
+ end
+ return lpegmatch(pattern,str)
+ end
+ end
+ elseif option=="pattern" then
+ return Cs((tabletopattern(mapping)/action+p_utf8char)^0)
+ else
+ local pattern=Cs((tabletopattern(mapping)/action+p_utf8char)^0)
+ return function(str)
+ if not str or str=="" then
+ return ""
+ else
+ return lpegmatch(pattern,str)
+ end
+ end,pattern
+ end
+ elseif variant=="function" then
+ if option=="pattern" then
+ return Cs((p_utf8char/mapping+p_utf8char)^0)
+ else
+ local pattern=Cs((p_utf8char/mapping+p_utf8char)^0)
+ return function(str)
+ if not str or str=="" then
+ return ""
+ else
+ return lpegmatch(pattern,str)
+ end
+ end,pattern
+ end
+ else
+ return function(str)
+ return str or ""
+ end
+ end
+end
+function utf.replacer(t)
+ local r=replacer(t,false,false,true)
+ return function(str)
+ return lpegmatch(r,str)
+ end
+end
+function utf.subtituter(t)
+ local f=finder (t)
+ local r=replacer(t,false,false,true)
+ return function(str)
+ local i=lpegmatch(f,str)
+ if not i then
+ return str
+ elseif i>#str then
+ return str
+ else
+ return lpegmatch(r,str)
+ end
+ end
+end
+local utflinesplitter=p_utfbom^-1*lpeg.tsplitat(p_newline)
+local utfcharsplitter_ows=p_utfbom^-1*Ct(C(p_utf8char)^0)
+local utfcharsplitter_iws=p_utfbom^-1*Ct((p_whitespace^1+C(p_utf8char))^0)
+local utfcharsplitter_raw=Ct(C(p_utf8char)^0)
+patterns.utflinesplitter=utflinesplitter
+function utf.splitlines(str)
+ return lpegmatch(utflinesplitter,str or "")
+end
+function utf.split(str,ignorewhitespace)
+ if ignorewhitespace then
+ return lpegmatch(utfcharsplitter_iws,str or "")
+ else
+ return lpegmatch(utfcharsplitter_ows,str or "")
+ end
+end
+function utf.totable(str)
+ return lpegmatch(utfcharsplitter_raw,str)
+end
+function utf.magic(f)
+ local str=f:read(4) or ""
+ local off=lpegmatch(p_utfoffset,str)
+ if off<4 then
+ f:seek('set',off)
+ end
+ return lpegmatch(p_utftype,str)
+end
+local utf16_to_utf8_be,utf16_to_utf8_le
+local utf32_to_utf8_be,utf32_to_utf8_le
+local utf_16_be_getbom=patterns.utfbom_16_be^-1
+local utf_16_le_getbom=patterns.utfbom_16_le^-1
+local utf_32_be_getbom=patterns.utfbom_32_be^-1
+local utf_32_le_getbom=patterns.utfbom_32_le^-1
+local utf_16_be_linesplitter=utf_16_be_getbom*lpeg.tsplitat(patterns.utf_16_be_nl)
+local utf_16_le_linesplitter=utf_16_le_getbom*lpeg.tsplitat(patterns.utf_16_le_nl)
+local utf_32_be_linesplitter=utf_32_be_getbom*lpeg.tsplitat(patterns.utf_32_be_nl)
+local utf_32_le_linesplitter=utf_32_le_getbom*lpeg.tsplitat(patterns.utf_32_le_nl)
+local more=0
+local p_utf16_to_utf8_be=C(1)*C(1)/function(left,right)
+ local now=256*byte(left)+byte(right)
+ if more>0 then
+ now=(more-0xD800)*0x400+(now-0xDC00)+0x10000
+ more=0
+ return utfchar(now)
+ elseif now>=0xD800 and now<=0xDBFF then
+ more=now
+ return ""
+ else
+ return utfchar(now)
+ end
+end
+local p_utf16_to_utf8_le=C(1)*C(1)/function(right,left)
+ local now=256*byte(left)+byte(right)
+ if more>0 then
+ now=(more-0xD800)*0x400+(now-0xDC00)+0x10000
+ more=0
+ return utfchar(now)
+ elseif now>=0xD800 and now<=0xDBFF then
+ more=now
+ return ""
+ else
+ return utfchar(now)
+ end
+end
+local p_utf32_to_utf8_be=C(1)*C(1)*C(1)*C(1)/function(a,b,c,d)
+ return utfchar(256*256*256*byte(a)+256*256*byte(b)+256*byte(c)+byte(d))
+end
+local p_utf32_to_utf8_le=C(1)*C(1)*C(1)*C(1)/function(a,b,c,d)
+ return utfchar(256*256*256*byte(d)+256*256*byte(c)+256*byte(b)+byte(a))
+end
+p_utf16_to_utf8_be=P(true)/function() more=0 end*utf_16_be_getbom*Cs(p_utf16_to_utf8_be^0)
+p_utf16_to_utf8_le=P(true)/function() more=0 end*utf_16_le_getbom*Cs(p_utf16_to_utf8_le^0)
+p_utf32_to_utf8_be=P(true)/function() more=0 end*utf_32_be_getbom*Cs(p_utf32_to_utf8_be^0)
+p_utf32_to_utf8_le=P(true)/function() more=0 end*utf_32_le_getbom*Cs(p_utf32_to_utf8_le^0)
+patterns.utf16_to_utf8_be=p_utf16_to_utf8_be
+patterns.utf16_to_utf8_le=p_utf16_to_utf8_le
+patterns.utf32_to_utf8_be=p_utf32_to_utf8_be
+patterns.utf32_to_utf8_le=p_utf32_to_utf8_le
+utf16_to_utf8_be=function(s)
+ if s and s~="" then
+ return lpegmatch(p_utf16_to_utf8_be,s)
+ else
+ return s
+ end
+end
+local utf16_to_utf8_be_t=function(t)
+ if not t then
+ return nil
+ elseif type(t)=="string" then
+ t=lpegmatch(utf_16_be_linesplitter,t)
+ end
+ for i=1,#t do
+ local s=t[i]
+ if s~="" then
+ t[i]=lpegmatch(p_utf16_to_utf8_be,s)
+ end
+ end
+ return t
+end
+utf16_to_utf8_le=function(s)
+ if s and s~="" then
+ return lpegmatch(p_utf16_to_utf8_le,s)
+ else
+ return s
+ end
+end
+local utf16_to_utf8_le_t=function(t)
+ if not t then
+ return nil
+ elseif type(t)=="string" then
+ t=lpegmatch(utf_16_le_linesplitter,t)
+ end
+ for i=1,#t do
+ local s=t[i]
+ if s~="" then
+ t[i]=lpegmatch(p_utf16_to_utf8_le,s)
+ end
+ end
+ return t
+end
+utf32_to_utf8_be=function(s)
+ if s and s~="" then
+ return lpegmatch(p_utf32_to_utf8_be,s)
+ else
+ return s
+ end
+end
+local utf32_to_utf8_be_t=function(t)
+ if not t then
+ return nil
+ elseif type(t)=="string" then
+ t=lpegmatch(utf_32_be_linesplitter,t)
+ end
+ for i=1,#t do
+ local s=t[i]
+ if s~="" then
+ t[i]=lpegmatch(p_utf32_to_utf8_be,s)
+ end
+ end
+ return t
+end
+utf32_to_utf8_le=function(s)
+ if s and s~="" then
+ return lpegmatch(p_utf32_to_utf8_le,s)
+ else
+ return s
+ end
+end
+local utf32_to_utf8_le_t=function(t)
+ if not t then
+ return nil
+ elseif type(t)=="string" then
+ t=lpegmatch(utf_32_le_linesplitter,t)
+ end
+ for i=1,#t do
+ local s=t[i]
+ if s~="" then
+ t[i]=lpegmatch(p_utf32_to_utf8_le,s)
+ end
+ end
+ return t
+end
+utf.utf16_to_utf8_le_t=utf16_to_utf8_le_t
+utf.utf16_to_utf8_be_t=utf16_to_utf8_be_t
+utf.utf32_to_utf8_le_t=utf32_to_utf8_le_t
+utf.utf32_to_utf8_be_t=utf32_to_utf8_be_t
+utf.utf16_to_utf8_le=utf16_to_utf8_le
+utf.utf16_to_utf8_be=utf16_to_utf8_be
+utf.utf32_to_utf8_le=utf32_to_utf8_le
+utf.utf32_to_utf8_be=utf32_to_utf8_be
+function utf.utf8_to_utf8_t(t)
+ return type(t)=="string" and lpegmatch(utflinesplitter,t) or t
+end
+function utf.utf16_to_utf8_t(t,endian)
+ return endian and utf16_to_utf8_be_t(t) or utf16_to_utf8_le_t(t) or t
+end
+function utf.utf32_to_utf8_t(t,endian)
+ return endian and utf32_to_utf8_be_t(t) or utf32_to_utf8_le_t(t) or t
+end
+local function little(b)
+ if b<0x10000 then
+ return char(b%256,b/256)
+ else
+ b=b-0x10000
+ local b1,b2=b/1024+0xD800,b%1024+0xDC00
+ return char(b1%256,b1/256,b2%256,b2/256)
+ end
+end
+local function big(b)
+ if b<0x10000 then
+ return char(b/256,b%256)
+ else
+ b=b-0x10000
+ local b1,b2=b/1024+0xD800,b%1024+0xDC00
+ return char(b1/256,b1%256,b2/256,b2%256)
+ end
+end
+local l_remap=Cs((p_utf8byte/little+P(1)/"")^0)
+local b_remap=Cs((p_utf8byte/big+P(1)/"")^0)
+local function utf8_to_utf16_be(str,nobom)
+ if nobom then
+ return lpegmatch(b_remap,str)
+ else
+ return char(254,255)..lpegmatch(b_remap,str)
+ end
+end
+local function utf8_to_utf16_le(str,nobom)
+ if nobom then
+ return lpegmatch(l_remap,str)
+ else
+ return char(255,254)..lpegmatch(l_remap,str)
+ end
+end
+utf.utf8_to_utf16_be=utf8_to_utf16_be
+utf.utf8_to_utf16_le=utf8_to_utf16_le
+function utf.utf8_to_utf16(str,littleendian,nobom)
+ if littleendian then
+ return utf8_to_utf16_le(str,nobom)
+ else
+ return utf8_to_utf16_be(str,nobom)
+ end
+end
+local pattern=Cs (
+ (p_utf8byte/function(unicode ) return format("0x%04X",unicode) end)*(p_utf8byte*Carg(1)/function(unicode,separator) return format("%s0x%04X",separator,unicode) end)^0
+)
+function utf.tocodes(str,separator)
+ return lpegmatch(pattern,str,1,separator or " ")
+end
+function utf.ustring(s)
+ return format("U+%05X",type(s)=="number" and s or utfbyte(s))
+end
+function utf.xstring(s)
+ return format("0x%05X",type(s)=="number" and s or utfbyte(s))
+end
+function utf.toeight(str)
+ if not str or str=="" then
+ return nil
+ end
+ local utftype=lpegmatch(p_utfstricttype,str)
+ if utftype=="utf-8" then
+ return sub(str,4)
+ elseif utftype=="utf-16-be" then
+ return utf16_to_utf8_be(str)
+ elseif utftype=="utf-16-le" then
+ return utf16_to_utf8_le(str)
+ else
+ return str
+ end
+end
+local p_nany=p_utf8char/""
+if utfgmatch then
+ function utf.count(str,what)
+ if type(what)=="string" then
+ local n=0
+ for _ in utfgmatch(str,what) do
+ n=n+1
+ end
+ return n
+ else
+ return #lpegmatch(Cs((P(what)/" "+p_nany)^0),str)
+ end
+ end
+else
+ local cache={}
+ function utf.count(str,what)
+ if type(what)=="string" then
+ local p=cache[what]
+ if not p then
+ p=Cs((P(what)/" "+p_nany)^0)
+ cache[p]=p
+ end
+ return #lpegmatch(p,str)
+ else
+ return #lpegmatch(Cs((P(what)/" "+p_nany)^0),str)
+ end
+ end
+end
+if not utf.characters then
+ function utf.characters(str)
+ return gmatch(str,".[\128-\191]*")
+ end
+ string.utfcharacters=utf.characters
+end
+if not utf.values then
+ local find=string.find
+ local dummy=function()
+ end
+ function utf.values(str)
+ local n=#str
+ if n==0 then
+ return dummy
+ elseif n==1 then
+ return function() return utfbyte(str) end
+ else
+ local p=1
+ return function()
+ local b,e=find(str,".[\128-\191]*",p)
+ if b then
+ p=e+1
+ return utfbyte(sub(str,b,e))
+ end
+ end
+ end
+ end
+ string.utfvalues=utf.values
+end
+function utf.chrlen(u)
+ return
+ (u<0x80 and 1) or
+ (u<0xE0 and 2) or
+ (u<0xF0 and 3) or
+ (u<0xF8 and 4) or
+ (u<0xFC and 5) or
+ (u<0xFE and 6) or 0
+end
+local extract=bit32.extract
+local char=string.char
+function unicode.toutf32string(n)
+ if n<=0xFF then
+ return
+ char(n).."\000\000\000"
+ elseif n<=0xFFFF then
+ return
+ char(extract(n,0,8))..char(extract(n,8,8)).."\000\000"
+ elseif n<=0xFFFFFF then
+ return
+ char(extract(n,0,8))..char(extract(n,8,8))..char(extract(n,16,8)).."\000"
+ else
+ return
+ char(extract(n,0,8))..char(extract(n,8,8))..char(extract(n,16,8))..char(extract(n,24,8))
+ end
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['util-str']={
+ version=1.001,
+ comment="companion to luat-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+utilities=utilities or {}
+utilities.strings=utilities.strings or {}
+local strings=utilities.strings
+local format,gsub,rep,sub,find=string.format,string.gsub,string.rep,string.sub,string.find
+local load,dump=load,string.dump
+local tonumber,type,tostring=tonumber,type,tostring
+local unpack,concat=table.unpack,table.concat
+local P,V,C,S,R,Ct,Cs,Cp,Carg,Cc=lpeg.P,lpeg.V,lpeg.C,lpeg.S,lpeg.R,lpeg.Ct,lpeg.Cs,lpeg.Cp,lpeg.Carg,lpeg.Cc
+local patterns,lpegmatch=lpeg.patterns,lpeg.match
+local utfchar,utfbyte=utf.char,utf.byte
+local loadstripped=nil
+if _LUAVERSION<5.2 then
+ loadstripped=function(str,shortcuts)
+ return load(str)
+ end
+else
+ loadstripped=function(str,shortcuts)
+ if shortcuts then
+ return load(dump(load(str),true),nil,nil,shortcuts)
+ else
+ return load(dump(load(str),true))
+ end
+ end
+end
+if not number then number={} end
+local stripper=patterns.stripzeros
+local newline=patterns.newline
+local endofstring=patterns.endofstring
+local whitespace=patterns.whitespace
+local spacer=patterns.spacer
+local spaceortab=patterns.spaceortab
+local function points(n)
+ n=tonumber(n)
+ return (not n or n==0) and "0pt" or lpegmatch(stripper,format("%.5fpt",n/65536))
+end
+local function basepoints(n)
+ n=tonumber(n)
+ return (not n or n==0) and "0bp" or lpegmatch(stripper,format("%.5fbp",n*(7200/7227)/65536))
+end
+number.points=points
+number.basepoints=basepoints
+local rubish=spaceortab^0*newline
+local anyrubish=spaceortab+newline
+local anything=patterns.anything
+local stripped=(spaceortab^1/"")*newline
+local leading=rubish^0/""
+local trailing=(anyrubish^1*endofstring)/""
+local redundant=rubish^3/"\n"
+local pattern=Cs(leading*(trailing+redundant+stripped+anything)^0)
+function strings.collapsecrlf(str)
+ return lpegmatch(pattern,str)
+end
+local repeaters={}
+function strings.newrepeater(str,offset)
+ offset=offset or 0
+ local s=repeaters[str]
+ if not s then
+ s={}
+ repeaters[str]=s
+ end
+ local t=s[offset]
+ if t then
+ return t
+ end
+ t={}
+ setmetatable(t,{ __index=function(t,k)
+ if not k then
+ return ""
+ end
+ local n=k+offset
+ local s=n>0 and rep(str,n) or ""
+ t[k]=s
+ return s
+ end })
+ s[offset]=t
+ return t
+end
+local extra,tab,start=0,0,4,0
+local nspaces=strings.newrepeater(" ")
+string.nspaces=nspaces
+local pattern=Carg(1)/function(t)
+ extra,tab,start=0,t or 7,1
+ end*Cs((
+ Cp()*patterns.tab/function(position)
+ local current=(position-start+1)+extra
+ local spaces=tab-(current-1)%tab
+ if spaces>0 then
+ extra=extra+spaces-1
+ return nspaces[spaces]
+ else
+ return ""
+ end
+ end+newline*Cp()/function(position)
+ extra,start=0,position
+ end+patterns.anything
+ )^1)
+function strings.tabtospace(str,tab)
+ return lpegmatch(pattern,str,1,tab or 7)
+end
+local space=spacer^0
+local nospace=space/""
+local endofline=nospace*newline
+local stripend=(whitespace^1*endofstring)/""
+local normalline=(nospace*((1-space*(newline+endofstring))^1)*nospace)
+local stripempty=endofline^1/""
+local normalempty=endofline^1
+local singleempty=endofline*(endofline^0/"")
+local doubleempty=endofline*endofline^-1*(endofline^0/"")
+local stripstart=stripempty^0
+local p_prune_normal=Cs (stripstart*(stripend+normalline+normalempty )^0 )
+local p_prune_collapse=Cs (stripstart*(stripend+normalline+doubleempty )^0 )
+local p_prune_noempty=Cs (stripstart*(stripend+normalline+singleempty )^0 )
+local p_retain_normal=Cs ((normalline+normalempty )^0 )
+local p_retain_collapse=Cs ((normalline+doubleempty )^0 )
+local p_retain_noempty=Cs ((normalline+singleempty )^0 )
+local striplinepatterns={
+ ["prune"]=p_prune_normal,
+ ["prune and collapse"]=p_prune_collapse,
+ ["prune and no empty"]=p_prune_noempty,
+ ["retain"]=p_retain_normal,
+ ["retain and collapse"]=p_retain_collapse,
+ ["retain and no empty"]=p_retain_noempty,
+ ["collapse"]=patterns.collapser,
+}
+setmetatable(striplinepatterns,{ __index=function(t,k) return p_prune_collapse end })
+strings.striplinepatterns=striplinepatterns
+function strings.striplines(str,how)
+ return str and lpegmatch(striplinepatterns[how],str) or str
+end
+strings.striplong=strings.striplines
+function strings.nice(str)
+ str=gsub(str,"[:%-+_]+"," ")
+ return str
+end
+local n=0
+local sequenced=table.sequenced
+function string.autodouble(s,sep)
+ if s==nil then
+ return '""'
+ end
+ local t=type(s)
+ if t=="number" then
+ return tostring(s)
+ end
+ if t=="table" then
+ return ('"'..sequenced(s,sep or ",")..'"')
+ end
+ return ('"'..tostring(s)..'"')
+end
+function string.autosingle(s,sep)
+ if s==nil then
+ return "''"
+ end
+ local t=type(s)
+ if t=="number" then
+ return tostring(s)
+ end
+ if t=="table" then
+ return ("'"..sequenced(s,sep or ",").."'")
+ end
+ return ("'"..tostring(s).."'")
+end
+local tracedchars={ [0]=
+ "[null]","[soh]","[stx]","[etx]","[eot]","[enq]","[ack]","[bel]",
+ "[bs]","[ht]","[lf]","[vt]","[ff]","[cr]","[so]","[si]",
+ "[dle]","[dc1]","[dc2]","[dc3]","[dc4]","[nak]","[syn]","[etb]",
+ "[can]","[em]","[sub]","[esc]","[fs]","[gs]","[rs]","[us]",
+ "[space]",
+}
+string.tracedchars=tracedchars
+strings.tracers=tracedchars
+function string.tracedchar(b)
+ if type(b)=="number" then
+ return tracedchars[b] or (utfchar(b).." (U+"..format("%05X",b)..")")
+ else
+ local c=utfbyte(b)
+ return tracedchars[c] or (b.." (U+"..(c and format("%05X",c) or "?????")..")")
+ end
+end
+function number.signed(i)
+ if i>0 then
+ return "+",i
+ else
+ return "-",-i
+ end
+end
+local digit=patterns.digit
+local period=patterns.period
+local three=digit*digit*digit
+local splitter=Cs (
+ (((1-(three^1*period))^1+C(three))*(Carg(1)*three)^1+C((1-period)^1))*(P(1)/""*Carg(2))*C(2)
+)
+patterns.formattednumber=splitter
+function number.formatted(n,sep1,sep2)
+ local s=type(s)=="string" and n or format("%0.2f",n)
+ if sep1==true then
+ return lpegmatch(splitter,s,1,".",",")
+ elseif sep1=="." then
+ return lpegmatch(splitter,s,1,sep1,sep2 or ",")
+ elseif sep1=="," then
+ return lpegmatch(splitter,s,1,sep1,sep2 or ".")
+ else
+ return lpegmatch(splitter,s,1,sep1 or ",",sep2 or ".")
+ end
+end
+local p=Cs(
+ P("-")^0*(P("0")^1/"")^0*(1-P("."))^0*(P(".")*P("0")^1*P(-1)/""+P(".")^0)*P(1-P("0")^1*P(-1))^0
+ )
+function number.compactfloat(n,fmt)
+ if n==0 then
+ return "0"
+ elseif n==1 then
+ return "1"
+ end
+ n=lpegmatch(p,format(fmt or "%0.3f",n))
+ if n=="." or n=="" or n=="-" then
+ return "0"
+ end
+ return n
+end
+local zero=P("0")^1/""
+local plus=P("+")/""
+local minus=P("-")
+local separator=S(".")
+local digit=R("09")
+local trailing=zero^1*#S("eE")
+local exponent=(S("eE")*(plus+Cs((minus*zero^0*P(-1))/"")+minus)*zero^0*(P(-1)*Cc("0")+P(1)^1))
+local pattern_a=Cs(minus^0*digit^1*(separator/""*trailing+separator*(trailing+digit)^0)*exponent)
+local pattern_b=Cs((exponent+P(1))^0)
+function number.sparseexponent(f,n)
+ if not n then
+ n=f
+ f="%e"
+ end
+ local tn=type(n)
+ if tn=="string" then
+ local m=tonumber(n)
+ if m then
+ return lpegmatch((f=="%e" or f=="%E") and pattern_a or pattern_b,format(f,m))
+ end
+ elseif tn=="number" then
+ return lpegmatch((f=="%e" or f=="%E") and pattern_a or pattern_b,format(f,n))
+ end
+ return tostring(n)
+end
+local hf={}
+local hs={}
+setmetatable(hf,{ __index=function(t,k)
+ local v="%."..k.."f"
+ t[k]=v
+ return v
+end } )
+setmetatable(hs,{ __index=function(t,k)
+ local v="%"..k.."s"
+ t[k]=v
+ return v
+end } )
+function number.formattedfloat(n,b,a)
+ local s=format(hf[a],n)
+ local l=(b or 0)+(a or 0)+1
+ if #s<l then
+ return format(hs[l],s)
+ else
+ return s
+ end
+end
+local template=[[
+%s
+%s
+return function(%s) return %s end
+]]
+local preamble,environment="",{}
+if _LUAVERSION<5.2 then
+ preamble=[[
+local lpeg=lpeg
+local type=type
+local tostring=tostring
+local tonumber=tonumber
+local format=string.format
+local concat=table.concat
+local signed=number.signed
+local points=number.points
+local basepoints= number.basepoints
+local utfchar=utf.char
+local utfbyte=utf.byte
+local lpegmatch=lpeg.match
+local nspaces=string.nspaces
+local tracedchar=string.tracedchar
+local autosingle=string.autosingle
+local autodouble=string.autodouble
+local sequenced=table.sequenced
+local formattednumber=number.formatted
+local sparseexponent=number.sparseexponent
+local formattedfloat=number.formattedfloat
+ ]]
+else
+ environment={
+ global=global or _G,
+ lpeg=lpeg,
+ type=type,
+ tostring=tostring,
+ tonumber=tonumber,
+ format=string.format,
+ concat=table.concat,
+ signed=number.signed,
+ points=number.points,
+ basepoints=number.basepoints,
+ utfchar=utf.char,
+ utfbyte=utf.byte,
+ lpegmatch=lpeg.match,
+ nspaces=string.nspaces,
+ tracedchar=string.tracedchar,
+ autosingle=string.autosingle,
+ autodouble=string.autodouble,
+ sequenced=table.sequenced,
+ formattednumber=number.formatted,
+ sparseexponent=number.sparseexponent,
+ formattedfloat=number.formattedfloat
+ }
+end
+local arguments={ "a1" }
+setmetatable(arguments,{ __index=function(t,k)
+ local v=t[k-1]..",a"..k
+ t[k]=v
+ return v
+ end
+})
+local prefix_any=C((S("+- .")+R("09"))^0)
+local prefix_sub=(C((S("+-")+R("09"))^0)+Cc(0))*P(".")*(C((S("+-")+R("09"))^0)+Cc(0))
+local prefix_tab=P("{")*C((1-P("}"))^0)*P("}")+C((1-R("az","AZ","09","%%"))^0)
+local format_s=function(f)
+ n=n+1
+ if f and f~="" then
+ return format("format('%%%ss',a%s)",f,n)
+ else
+ return format("(a%s or '')",n)
+ end
+end
+local format_S=function(f)
+ n=n+1
+ if f and f~="" then
+ return format("format('%%%ss',tostring(a%s))",f,n)
+ else
+ return format("tostring(a%s)",n)
+ end
+end
+local format_q=function()
+ n=n+1
+ return format("(a%s and format('%%q',a%s) or '')",n,n)
+end
+local format_Q=function()
+ n=n+1
+ return format("format('%%q',tostring(a%s))",n)
+end
+local format_i=function(f)
+ n=n+1
+ if f and f~="" then
+ return format("format('%%%si',a%s)",f,n)
+ else
+ return format("format('%%i',a%s)",n)
+ end
+end
+local format_d=format_i
+local format_I=function(f)
+ n=n+1
+ return format("format('%%s%%%si',signed(a%s))",f,n)
+end
+local format_f=function(f)
+ n=n+1
+ return format("format('%%%sf',a%s)",f,n)
+end
+local format_F=function(f)
+ n=n+1
+ if not f or f=="" then
+ return format("(((a%s > -0.0000000005 and a%s < 0.0000000005) and '0') or format((a%s %% 1 == 0) and '%%i' or '%%.9f',a%s))",n,n,n,n)
+ else
+ return format("format((a%s %% 1 == 0) and '%%i' or '%%%sf',a%s)",n,f,n)
+ end
+end
+local format_k=function(b,a)
+ n=n+1
+ return format("formattedfloat(a%s,%i,%i)",n,b or 0,a or 0)
+end
+local format_g=function(f)
+ n=n+1
+ return format("format('%%%sg',a%s)",f,n)
+end
+local format_G=function(f)
+ n=n+1
+ return format("format('%%%sG',a%s)",f,n)
+end
+local format_e=function(f)
+ n=n+1
+ return format("format('%%%se',a%s)",f,n)
+end
+local format_E=function(f)
+ n=n+1
+ return format("format('%%%sE',a%s)",f,n)
+end
+local format_j=function(f)
+ n=n+1
+ return format("sparseexponent('%%%se',a%s)",f,n)
+end
+local format_J=function(f)
+ n=n+1
+ return format("sparseexponent('%%%sE',a%s)",f,n)
+end
+local format_x=function(f)
+ n=n+1
+ return format("format('%%%sx',a%s)",f,n)
+end
+local format_X=function(f)
+ n=n+1
+ return format("format('%%%sX',a%s)",f,n)
+end
+local format_o=function(f)
+ n=n+1
+ return format("format('%%%so',a%s)",f,n)
+end
+local format_c=function()
+ n=n+1
+ return format("utfchar(a%s)",n)
+end
+local format_C=function()
+ n=n+1
+ return format("tracedchar(a%s)",n)
+end
+local format_r=function(f)
+ n=n+1
+ return format("format('%%%s.0f',a%s)",f,n)
+end
+local format_h=function(f)
+ n=n+1
+ if f=="-" then
+ f=sub(f,2)
+ return format("format('%%%sx',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n)
+ else
+ return format("format('0x%%%sx',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n)
+ end
+end
+local format_H=function(f)
+ n=n+1
+ if f=="-" then
+ f=sub(f,2)
+ return format("format('%%%sX',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n)
+ else
+ return format("format('0x%%%sX',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n)
+ end
+end
+local format_u=function(f)
+ n=n+1
+ if f=="-" then
+ f=sub(f,2)
+ return format("format('%%%sx',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n)
+ else
+ return format("format('u+%%%sx',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n)
+ end
+end
+local format_U=function(f)
+ n=n+1
+ if f=="-" then
+ f=sub(f,2)
+ return format("format('%%%sX',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n)
+ else
+ return format("format('U+%%%sX',type(a%s) == 'number' and a%s or utfbyte(a%s))",f=="" and "05" or f,n,n,n)
+ end
+end
+local format_p=function()
+ n=n+1
+ return format("points(a%s)",n)
+end
+local format_b=function()
+ n=n+1
+ return format("basepoints(a%s)",n)
+end
+local format_t=function(f)
+ n=n+1
+ if f and f~="" then
+ return format("concat(a%s,%q)",n,f)
+ else
+ return format("concat(a%s)",n)
+ end
+end
+local format_T=function(f)
+ n=n+1
+ if f and f~="" then
+ return format("sequenced(a%s,%q)",n,f)
+ else
+ return format("sequenced(a%s)",n)
+ end
+end
+local format_l=function()
+ n=n+1
+ return format("(a%s and 'true' or 'false')",n)
+end
+local format_L=function()
+ n=n+1
+ return format("(a%s and 'TRUE' or 'FALSE')",n)
+end
+local format_N=function()
+ n=n+1
+ return format("tostring(tonumber(a%s) or a%s)",n,n)
+end
+local format_a=function(f)
+ n=n+1
+ if f and f~="" then
+ return format("autosingle(a%s,%q)",n,f)
+ else
+ return format("autosingle(a%s)",n)
+ end
+end
+local format_A=function(f)
+ n=n+1
+ if f and f~="" then
+ return format("autodouble(a%s,%q)",n,f)
+ else
+ return format("autodouble(a%s)",n)
+ end
+end
+local format_w=function(f)
+ n=n+1
+ f=tonumber(f)
+ if f then
+ return format("nspaces[%s+a%s]",f,n)
+ else
+ return format("nspaces[a%s]",n)
+ end
+end
+local format_W=function(f)
+ return format("nspaces[%s]",tonumber(f) or 0)
+end
+local format_m=function(f)
+ n=n+1
+ if not f or f=="" then
+ f=","
+ end
+ return format([[formattednumber(a%s,%q,".")]],n,f)
+end
+local format_M=function(f)
+ n=n+1
+ if not f or f=="" then
+ f="."
+ end
+ return format([[formattednumber(a%s,%q,",")]],n,f)
+end
+local format_z=function(f)
+ n=n+(tonumber(f) or 1)
+ return "''"
+end
+local format_rest=function(s)
+ return format("%q",s)
+end
+local format_extension=function(extensions,f,name)
+ local extension=extensions[name] or "tostring(%s)"
+ local f=tonumber(f) or 1
+ local w=find(extension,"%.%.%.")
+ if f==0 then
+ if w then
+ extension=gsub(extension,"%.%.%.","")
+ end
+ return extension
+ elseif f==1 then
+ if w then
+ extension=gsub(extension,"%.%.%.","%%s")
+ end
+ n=n+1
+ local a="a"..n
+ return format(extension,a,a)
+ elseif f<0 then
+ local a="a"..(n+f+1)
+ return format(extension,a,a)
+ else
+ if w then
+ extension=gsub(extension,"%.%.%.",rep("%%s,",f-1).."%%s")
+ end
+ local t={}
+ for i=1,f do
+ n=n+1
+ t[i]="a"..n
+ end
+ return format(extension,unpack(t))
+ end
+end
+local builder=Cs { "start",
+ start=(
+ (
+ P("%")/""*(
+ V("!")
++V("s")+V("q")+V("i")+V("d")+V("f")+V("F")+V("g")+V("G")+V("e")+V("E")+V("x")+V("X")+V("o")
++V("c")+V("C")+V("S")
++V("Q")
++V("N")
++V("k")
++V("r")+V("h")+V("H")+V("u")+V("U")+V("p")+V("b")+V("t")+V("T")+V("l")+V("L")+V("I")+V("w")
++V("W")
++V("a")
++V("A")
++V("j")+V("J")
++V("m")+V("M")
++V("z")
+ )+V("*")
+ )*(P(-1)+Carg(1))
+ )^0,
+ ["s"]=(prefix_any*P("s"))/format_s,
+ ["q"]=(prefix_any*P("q"))/format_q,
+ ["i"]=(prefix_any*P("i"))/format_i,
+ ["d"]=(prefix_any*P("d"))/format_d,
+ ["f"]=(prefix_any*P("f"))/format_f,
+ ["F"]=(prefix_any*P("F"))/format_F,
+ ["g"]=(prefix_any*P("g"))/format_g,
+ ["G"]=(prefix_any*P("G"))/format_G,
+ ["e"]=(prefix_any*P("e"))/format_e,
+ ["E"]=(prefix_any*P("E"))/format_E,
+ ["x"]=(prefix_any*P("x"))/format_x,
+ ["X"]=(prefix_any*P("X"))/format_X,
+ ["o"]=(prefix_any*P("o"))/format_o,
+ ["S"]=(prefix_any*P("S"))/format_S,
+ ["Q"]=(prefix_any*P("Q"))/format_S,
+ ["N"]=(prefix_any*P("N"))/format_N,
+ ["k"]=(prefix_sub*P("k"))/format_k,
+ ["c"]=(prefix_any*P("c"))/format_c,
+ ["C"]=(prefix_any*P("C"))/format_C,
+ ["r"]=(prefix_any*P("r"))/format_r,
+ ["h"]=(prefix_any*P("h"))/format_h,
+ ["H"]=(prefix_any*P("H"))/format_H,
+ ["u"]=(prefix_any*P("u"))/format_u,
+ ["U"]=(prefix_any*P("U"))/format_U,
+ ["p"]=(prefix_any*P("p"))/format_p,
+ ["b"]=(prefix_any*P("b"))/format_b,
+ ["t"]=(prefix_tab*P("t"))/format_t,
+ ["T"]=(prefix_tab*P("T"))/format_T,
+ ["l"]=(prefix_any*P("l"))/format_l,
+ ["L"]=(prefix_any*P("L"))/format_L,
+ ["I"]=(prefix_any*P("I"))/format_I,
+ ["w"]=(prefix_any*P("w"))/format_w,
+ ["W"]=(prefix_any*P("W"))/format_W,
+ ["j"]=(prefix_any*P("j"))/format_j,
+ ["J"]=(prefix_any*P("J"))/format_J,
+ ["m"]=(prefix_tab*P("m"))/format_m,
+ ["M"]=(prefix_tab*P("M"))/format_M,
+ ["z"]=(prefix_any*P("z"))/format_z,
+ ["a"]=(prefix_any*P("a"))/format_a,
+ ["A"]=(prefix_any*P("A"))/format_A,
+ ["*"]=Cs(((1-P("%"))^1+P("%%")/"%%")^1)/format_rest,
+ ["?"]=Cs(((1-P("%"))^1 )^1)/format_rest,
+ ["!"]=Carg(2)*prefix_any*P("!")*C((1-P("!"))^1)*P("!")/format_extension,
+}
+local direct=Cs (
+ P("%")*(S("+- .")+R("09"))^0*S("sqidfgGeExXo")*P(-1)/[[local format = string.format return function(str) return format("%0",str) end]]
+)
+local function make(t,str)
+ local f
+ local p
+ local p=lpegmatch(direct,str)
+ if p then
+ f=loadstripped(p)()
+ else
+ n=0
+ p=lpegmatch(builder,str,1,t._connector_,t._extensions_)
+ if n>0 then
+ p=format(template,preamble,t._preamble_,arguments[n],p)
+ f=loadstripped(p,t._environment_)()
+ else
+ f=function() return str end
+ end
+ end
+ t[str]=f
+ return f
+end
+local function use(t,fmt,...)
+ return t[fmt](...)
+end
+strings.formatters={}
+if _LUAVERSION<5.2 then
+ function strings.formatters.new(noconcat)
+ local t={ _type_="formatter",_connector_=noconcat and "," or "..",_extensions_={},_preamble_=preamble,_environment_={} }
+ setmetatable(t,{ __index=make,__call=use })
+ return t
+ end
+else
+ function strings.formatters.new(noconcat)
+ local e={}
+ for k,v in next,environment do
+ e[k]=v
+ end
+ local t={ _type_="formatter",_connector_=noconcat and "," or "..",_extensions_={},_preamble_="",_environment_=e }
+ setmetatable(t,{ __index=make,__call=use })
+ return t
+ end
+end
+local formatters=strings.formatters.new()
+string.formatters=formatters
+string.formatter=function(str,...) return formatters[str](...) end
+local function add(t,name,template,preamble)
+ if type(t)=="table" and t._type_=="formatter" then
+ t._extensions_[name]=template or "%s"
+ if type(preamble)=="string" then
+ t._preamble_=preamble.."\n"..t._preamble_
+ elseif type(preamble)=="table" then
+ for k,v in next,preamble do
+ t._environment_[k]=v
+ end
+ end
+ end
+end
+strings.formatters.add=add
+patterns.xmlescape=Cs((P("<")/"&lt;"+P(">")/"&gt;"+P("&")/"&amp;"+P('"')/"&quot;"+P(1))^0)
+patterns.texescape=Cs((C(S("#$%\\{}"))/"\\%1"+P(1))^0)
+patterns.luaescape=Cs(((1-S('"\n'))^1+P('"')/'\\"'+P('\n')/'\\n"')^0)
+patterns.luaquoted=Cs(Cc('"')*((1-S('"\n'))^1+P('"')/'\\"'+P('\n')/'\\n"')^0*Cc('"'))
+if _LUAVERSION<5.2 then
+ add(formatters,"xml",[[lpegmatch(xmlescape,%s)]],"local xmlescape = lpeg.patterns.xmlescape")
+ add(formatters,"tex",[[lpegmatch(texescape,%s)]],"local texescape = lpeg.patterns.texescape")
+ add(formatters,"lua",[[lpegmatch(luaescape,%s)]],"local luaescape = lpeg.patterns.luaescape")
+else
+ add(formatters,"xml",[[lpegmatch(xmlescape,%s)]],{ xmlescape=lpeg.patterns.xmlescape })
+ add(formatters,"tex",[[lpegmatch(texescape,%s)]],{ texescape=lpeg.patterns.texescape })
+ add(formatters,"lua",[[lpegmatch(luaescape,%s)]],{ luaescape=lpeg.patterns.luaescape })
+end
+local dquote=patterns.dquote
+local equote=patterns.escaped+dquote/'\\"'+1
+local space=patterns.space
+local cquote=Cc('"')
+local pattern=Cs(dquote*(equote-P(-2))^0*dquote)
++Cs(cquote*(equote-space)^0*space*equote^0*cquote)
+function string.optionalquoted(str)
+ return lpegmatch(pattern,str) or str
+end
+local pattern=Cs((newline/(os.newline or "\r")+1)^0)
+function string.replacenewlines(str)
+ return lpegmatch(pattern,str)
+end
+function strings.newcollector()
+ local result,r={},0
+ return
+ function(fmt,str,...)
+ r=r+1
+ result[r]=str==nil and fmt or formatters[fmt](str,...)
+ end,
+ function(connector)
+ if result then
+ local str=concat(result,connector)
+ result,r={},0
+ return str
+ end
+ end
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['util-fil']={
+ version=1.001,
+ comment="companion to luat-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local byte=string.byte
+local char=string.char
+local extract=bit32 and bit32.extract
+local floor=math.floor
+utilities=utilities or {}
+local files={}
+utilities.files=files
+local zerobased={}
+function files.open(filename,zb)
+ local f=io.open(filename,"rb")
+ if f then
+ zerobased[f]=zb or false
+ end
+ return f
+end
+function files.close(f)
+ zerobased[f]=nil
+ f:close()
+end
+function files.size(f)
+ local current=f:seek()
+ local size=f:seek("end")
+ f:seek("set",current)
+ return size
+end
+files.getsize=files.size
+function files.setposition(f,n)
+ if zerobased[f] then
+ f:seek("set",n)
+ else
+ f:seek("set",n-1)
+ end
+end
+function files.getposition(f)
+ if zerobased[f] then
+ return f:seek()
+ else
+ return f:seek()+1
+ end
+end
+function files.look(f,n,chars)
+ local p=f:seek()
+ local s=f:read(n)
+ f:seek("set",p)
+ if chars then
+ return s
+ else
+ return byte(s,1,#s)
+ end
+end
+function files.skip(f,n)
+ if n==1 then
+ f:read(n)
+ else
+ f:seek("set",f:seek()+n)
+ end
+end
+function files.readbyte(f)
+ return byte(f:read(1))
+end
+function files.readbytes(f,n)
+ return byte(f:read(n),1,n)
+end
+function files.readbytetable(f,n)
+ local s=f:read(n or 1)
+ return { byte(s,1,#s) }
+end
+function files.readchar(f)
+ return f:read(1)
+end
+function files.readstring(f,n)
+ return f:read(n or 1)
+end
+function files.readinteger1(f)
+ local n=byte(f:read(1))
+ if n>=0x80 then
+ return n-0x100
+ else
+ return n
+ end
+end
+files.readcardinal1=files.readbyte
+files.readcardinal=files.readcardinal1
+files.readinteger=files.readinteger1
+files.readsignedbyte=files.readinteger1
+function files.readcardinal2(f)
+ local a,b=byte(f:read(2),1,2)
+ return 0x100*a+b
+end
+function files.readcardinal2le(f)
+ local b,a=byte(f:read(2),1,2)
+ return 0x100*a+b
+end
+function files.readinteger2(f)
+ local a,b=byte(f:read(2),1,2)
+ if a>=0x80 then
+ return 0x100*a+b-0x10000
+ else
+ return 0x100*a+b
+ end
+end
+function files.readinteger2le(f)
+ local b,a=byte(f:read(2),1,2)
+ if a>=0x80 then
+ return 0x100*a+b-0x10000
+ else
+ return 0x100*a+b
+ end
+end
+function files.readcardinal3(f)
+ local a,b,c=byte(f:read(3),1,3)
+ return 0x10000*a+0x100*b+c
+end
+function files.readcardinal3le(f)
+ local c,b,a=byte(f:read(3),1,3)
+ return 0x10000*a+0x100*b+c
+end
+function files.readinteger3(f)
+ local a,b,c=byte(f:read(3),1,3)
+ if a>=0x80 then
+ return 0x10000*a+0x100*b+c-0x1000000
+ else
+ return 0x10000*a+0x100*b+c
+ end
+end
+function files.readinteger3le(f)
+ local c,b,a=byte(f:read(3),1,3)
+ if a>=0x80 then
+ return 0x10000*a+0x100*b+c-0x1000000
+ else
+ return 0x10000*a+0x100*b+c
+ end
+end
+function files.readcardinal4(f)
+ local a,b,c,d=byte(f:read(4),1,4)
+ return 0x1000000*a+0x10000*b+0x100*c+d
+end
+function files.readcardinal4le(f)
+ local d,c,b,a=byte(f:read(4),1,4)
+ return 0x1000000*a+0x10000*b+0x100*c+d
+end
+function files.readinteger4(f)
+ local a,b,c,d=byte(f:read(4),1,4)
+ if a>=0x80 then
+ return 0x1000000*a+0x10000*b+0x100*c+d-0x100000000
+ else
+ return 0x1000000*a+0x10000*b+0x100*c+d
+ end
+end
+function files.readinteger4le(f)
+ local d,c,b,a=byte(f:read(4),1,4)
+ if a>=0x80 then
+ return 0x1000000*a+0x10000*b+0x100*c+d-0x100000000
+ else
+ return 0x1000000*a+0x10000*b+0x100*c+d
+ end
+end
+function files.readfixed2(f)
+ local a,b=byte(f:read(2),1,2)
+ if a>=0x80 then
+ return (a-0x100)+b/0x100
+ else
+ return (a )+b/0x100
+ end
+end
+function files.readfixed4(f)
+ local a,b,c,d=byte(f:read(4),1,4)
+ if a>=0x80 then
+ return (0x100*a+b-0x10000)+(0x100*c+d)/0x10000
+ else
+ return (0x100*a+b )+(0x100*c+d)/0x10000
+ end
+end
+if extract then
+ local extract=bit32.extract
+ local band=bit32.band
+ function files.read2dot14(f)
+ local a,b=byte(f:read(2),1,2)
+ if a>=0x80 then
+ local n=-(0x100*a+b)
+ return-(extract(n,14,2)+(band(n,0x3FFF)/16384.0))
+ else
+ local n=0x100*a+b
+ return (extract(n,14,2)+(band(n,0x3FFF)/16384.0))
+ end
+ end
+end
+function files.skipshort(f,n)
+ f:read(2*(n or 1))
+end
+function files.skiplong(f,n)
+ f:read(4*(n or 1))
+end
+function files.writecardinal2(f,n)
+ local a=char(n%256)
+ n=floor(n/256)
+ local b=char(n%256)
+ f:write(b,a)
+end
+function files.writecardinal4(f,n)
+ local a=char(n%256)
+ n=floor(n/256)
+ local b=char(n%256)
+ n=floor(n/256)
+ local c=char(n%256)
+ n=floor(n/256)
+ local d=char(n%256)
+ f:write(d,c,b,a)
+end
+function files.writestring(f,s)
+ f:write(char(byte(s,1,#s)))
+end
+function files.writebyte(f,b)
+ f:write(char(b))
+end
+if fio and fio.readcardinal1 then
+ files.readcardinal1=fio.readcardinal1
+ files.readcardinal2=fio.readcardinal2
+ files.readcardinal3=fio.readcardinal3
+ files.readcardinal4=fio.readcardinal4
+ files.readinteger1=fio.readinteger1
+ files.readinteger2=fio.readinteger2
+ files.readinteger3=fio.readinteger3
+ files.readinteger4=fio.readinteger4
+ files.read2dot14=fio.read2dot14
+ files.setposition=fio.setposition
+ files.getposition=fio.getposition
+ files.readbyte=files.readcardinal1
+ files.readsignedbyte=files.readinteger1
+ files.readcardinal=files.readcardinal1
+ files.readinteger=files.readinteger1
+ local skipposition=fio.skipposition
+ files.skipposition=skipposition
+ files.readbytes=fio.readbytes
+ files.readbytetable=fio.readbytetable
+ function files.skipshort(f,n)
+ skipposition(f,2*(n or 1))
+ end
+ function files.skiplong(f,n)
+ skipposition(f,4*(n or 1))
+ end
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['luat-basics-gen']={
+ version=1.100,
+ comment="companion to luatex-*.tex",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+if context then
+ texio.write_nl("fatal error: this module is not for context")
+ os.exit()
+end
+local dummyfunction=function()
+end
+local dummyreporter=function(c)
+ return function(f,...)
+ local r=texio.reporter or texio.write_nl
+ if f then
+ r(c.." : "..string.formatters(f,...))
+ else
+ r("")
+ end
+ end
+end
+statistics={
+ register=dummyfunction,
+ starttiming=dummyfunction,
+ stoptiming=dummyfunction,
+ elapsedtime=nil,
+}
+directives={
+ register=dummyfunction,
+ enable=dummyfunction,
+ disable=dummyfunction,
+}
+trackers={
+ register=dummyfunction,
+ enable=dummyfunction,
+ disable=dummyfunction,
+}
+experiments={
+ register=dummyfunction,
+ enable=dummyfunction,
+ disable=dummyfunction,
+}
+storage={
+ register=dummyfunction,
+ shared={},
+}
+logs={
+ new=dummyreporter,
+ reporter=dummyreporter,
+ messenger=dummyreporter,
+ report=dummyfunction,
+}
+callbacks={
+ register=function(n,f)
+ return callback.register(n,f)
+ end,
+}
+utilities=utilities or {} utilities.storage={
+ allocate=function(t)
+ return t or {}
+ end,
+ mark=function(t)
+ return t or {}
+ end,
+}
+characters=characters or {
+ data={}
+}
+texconfig.kpse_init=true
+resolvers=resolvers or {}
+local remapper={
+ otf="opentype fonts",
+ ttf="truetype fonts",
+ ttc="truetype fonts",
+ cid="cid maps",
+ cidmap="cid maps",
+ pfb="type1 fonts",
+ afm="afm",
+ enc="enc files",
+}
+function resolvers.findfile(name,fileformat)
+ name=string.gsub(name,"\\","/")
+ if not fileformat or fileformat=="" then
+ fileformat=file.suffix(name)
+ if fileformat=="" then
+ fileformat="tex"
+ end
+ end
+ fileformat=string.lower(fileformat)
+ fileformat=remapper[fileformat] or fileformat
+ local found=kpse.find_file(name,fileformat)
+ if not found or found=="" then
+ found=kpse.find_file(name,"other text files")
+ end
+ return found
+end
+resolvers.findbinfile=resolvers.findfile
+function resolvers.loadbinfile(filename,filetype)
+ local data=io.loaddata(filename)
+ return true,data,#data
+end
+function resolvers.resolve(s)
+ return s
+end
+function resolvers.unresolve(s)
+ return s
+end
+caches={}
+local writable=nil
+local readables={}
+local usingjit=jit
+if not caches.namespace or caches.namespace=="" or caches.namespace=="context" then
+ caches.namespace='generic'
+end
+do
+ local cachepaths=kpse.expand_var('$TEXMFCACHE') or ""
+ if cachepaths=="" or cachepaths=="$TEXMFCACHE" then
+ cachepaths=kpse.expand_var('$TEXMFVAR') or ""
+ end
+ if cachepaths=="" or cachepaths=="$TEXMFVAR" then
+ cachepaths=kpse.expand_var('$VARTEXMF') or ""
+ end
+ if cachepaths=="" then
+ local fallbacks={ "TMPDIR","TEMPDIR","TMP","TEMP","HOME","HOMEPATH" }
+ for i=1,#fallbacks do
+ cachepaths=os.getenv(fallbacks[i]) or ""
+ if cachepath~="" and lfs.isdir(cachepath) then
+ break
+ end
+ end
+ end
+ if cachepaths=="" then
+ cachepaths="."
+ end
+ cachepaths=string.split(cachepaths,os.type=="windows" and ";" or ":")
+ for i=1,#cachepaths do
+ local cachepath=cachepaths[i]
+ if not lfs.isdir(cachepath) then
+ lfs.mkdirs(cachepath)
+ if lfs.isdir(cachepath) then
+ texio.write(string.format("(created cache path: %s)",cachepath))
+ end
+ end
+ if file.is_writable(cachepath) then
+ writable=file.join(cachepath,"luatex-cache")
+ lfs.mkdir(writable)
+ writable=file.join(writable,caches.namespace)
+ lfs.mkdir(writable)
+ break
+ end
+ end
+ for i=1,#cachepaths do
+ if file.is_readable(cachepaths[i]) then
+ readables[#readables+1]=file.join(cachepaths[i],"luatex-cache",caches.namespace)
+ end
+ end
+ if not writable then
+ texio.write_nl("quiting: fix your writable cache path")
+ os.exit()
+ elseif #readables==0 then
+ texio.write_nl("quiting: fix your readable cache path")
+ os.exit()
+ elseif #readables==1 and readables[1]==writable then
+ texio.write(string.format("(using cache: %s)",writable))
+ else
+ texio.write(string.format("(using write cache: %s)",writable))
+ texio.write(string.format("(using read cache: %s)",table.concat(readables," ")))
+ end
+end
+function caches.getwritablepath(category,subcategory)
+ local path=file.join(writable,category)
+ lfs.mkdir(path)
+ path=file.join(path,subcategory)
+ lfs.mkdir(path)
+ return path
+end
+function caches.getreadablepaths(category,subcategory)
+ local t={}
+ for i=1,#readables do
+ t[i]=file.join(readables[i],category,subcategory)
+ end
+ return t
+end
+local function makefullname(path,name)
+ if path and path~="" then
+ return file.addsuffix(file.join(path,name),"lua"),file.addsuffix(file.join(path,name),usingjit and "lub" or "luc")
+ end
+end
+function caches.is_writable(path,name)
+ local fullname=makefullname(path,name)
+ return fullname and file.is_writable(fullname)
+end
+function caches.loaddata(readables,name,writable)
+ for i=1,#readables do
+ local path=readables[i]
+ local loader=false
+ local luaname,lucname=makefullname(path,name)
+ if lfs.isfile(lucname) then
+ texio.write(string.format("(load luc: %s)",lucname))
+ loader=loadfile(lucname)
+ end
+ if not loader and lfs.isfile(luaname) then
+ local luacrap,lucname=makefullname(writable,name)
+ texio.write(string.format("(compiling luc: %s)",lucname))
+ if lfs.isfile(lucname) then
+ loader=loadfile(lucname)
+ end
+ caches.compile(data,luaname,lucname)
+ if lfs.isfile(lucname) then
+ texio.write(string.format("(load luc: %s)",lucname))
+ loader=loadfile(lucname)
+ else
+ texio.write(string.format("(loading failed: %s)",lucname))
+ end
+ if not loader then
+ texio.write(string.format("(load lua: %s)",luaname))
+ loader=loadfile(luaname)
+ else
+ texio.write(string.format("(loading failed: %s)",luaname))
+ end
+ end
+ if loader then
+ loader=loader()
+ collectgarbage("step")
+ return loader
+ end
+ end
+ return false
+end
+function caches.savedata(path,name,data)
+ local luaname,lucname=makefullname(path,name)
+ if luaname then
+ texio.write(string.format("(save: %s)",luaname))
+ table.tofile(luaname,data,true)
+ if lucname and type(caches.compile)=="function" then
+ os.remove(lucname)
+ texio.write(string.format("(save: %s)",lucname))
+ caches.compile(data,luaname,lucname)
+ end
+ end
+end
+function caches.compile(data,luaname,lucname)
+ local d=io.loaddata(luaname)
+ if not d or d=="" then
+ d=table.serialize(data,true)
+ end
+ if d and d~="" then
+ local f=io.open(lucname,'wb')
+ if f then
+ local s=loadstring(d)
+ if s then
+ f:write(string.dump(s,true))
+ end
+ f:close()
+ end
+ end
+end
+function table.setmetatableindex(t,f)
+ if type(t)~="table" then
+ f,t=t,{}
+ end
+ local m=getmetatable(t)
+ if f=="table" then
+ f=function(t,k) local v={} t[k]=v return v end
+ end
+ if m then
+ m.__index=f
+ else
+ setmetatable(t,{ __index=f })
+ end
+ return t
+end
+arguments={}
+if arg then
+ for i=1,#arg do
+ local k,v=string.match(arg[i],"^%-%-([^=]+)=?(.-)$")
+ if k and v then
+ arguments[k]=v
+ end
+ end
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['data-con']={
+ version=1.100,
+ comment="companion to luat-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local format,lower,gsub=string.format,string.lower,string.gsub
+local trace_cache=false trackers.register("resolvers.cache",function(v) trace_cache=v end)
+local trace_containers=false trackers.register("resolvers.containers",function(v) trace_containers=v end)
+local trace_storage=false trackers.register("resolvers.storage",function(v) trace_storage=v end)
+containers=containers or {}
+local containers=containers
+containers.usecache=true
+local report_containers=logs.reporter("resolvers","containers")
+local allocated={}
+local mt={
+ __index=function(t,k)
+ if k=="writable" then
+ local writable=caches.getwritablepath(t.category,t.subcategory) or { "." }
+ t.writable=writable
+ return writable
+ elseif k=="readables" then
+ local readables=caches.getreadablepaths(t.category,t.subcategory) or { "." }
+ t.readables=readables
+ return readables
+ end
+ end,
+ __storage__=true
+}
+function containers.define(category,subcategory,version,enabled)
+ if category and subcategory then
+ local c=allocated[category]
+ if not c then
+ c={}
+ allocated[category]=c
+ end
+ local s=c[subcategory]
+ if not s then
+ s={
+ category=category,
+ subcategory=subcategory,
+ storage={},
+ enabled=enabled,
+ version=version or math.pi,
+ trace=false,
+ }
+ setmetatable(s,mt)
+ c[subcategory]=s
+ end
+ return s
+ end
+end
+function containers.is_usable(container,name)
+ return container.enabled and caches and caches.is_writable(container.writable,name)
+end
+function containers.is_valid(container,name)
+ if name and name~="" then
+ local storage=container.storage[name]
+ return storage and storage.cache_version==container.version
+ else
+ return false
+ end
+end
+function containers.read(container,name)
+ local storage=container.storage
+ local stored=storage[name]
+ if not stored and container.enabled and caches and containers.usecache then
+ stored=caches.loaddata(container.readables,name,container.writable)
+ if stored and stored.cache_version==container.version then
+ if trace_cache or trace_containers then
+ report_containers("action %a, category %a, name %a","load",container.subcategory,name)
+ end
+ else
+ stored=nil
+ end
+ storage[name]=stored
+ elseif stored then
+ if trace_cache or trace_containers then
+ report_containers("action %a, category %a, name %a","reuse",container.subcategory,name)
+ end
+ end
+ return stored
+end
+function containers.write(container,name,data)
+ if data then
+ data.cache_version=container.version
+ if container.enabled and caches then
+ local unique,shared=data.unique,data.shared
+ data.unique,data.shared=nil,nil
+ caches.savedata(container.writable,name,data)
+ if trace_cache or trace_containers then
+ report_containers("action %a, category %a, name %a","save",container.subcategory,name)
+ end
+ data.unique,data.shared=unique,shared
+ end
+ if trace_cache or trace_containers then
+ report_containers("action %a, category %a, name %a","store",container.subcategory,name)
+ end
+ container.storage[name]=data
+ end
+ return data
+end
+function containers.content(container,name)
+ return container.storage[name]
+end
+function containers.cleanname(name)
+ return (gsub(lower(name),"[^%w\128-\255]+","-"))
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['luatex-fonts-nod']={
+ version=1.001,
+ comment="companion to luatex-fonts.lua",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+if context then
+ texio.write_nl("fatal error: this module is not for context")
+ os.exit()
+end
+if tex.attribute[0]~=0 then
+ texio.write_nl("log","!")
+ texio.write_nl("log","! Attribute 0 is reserved for ConTeXt's font feature management and has to be")
+ texio.write_nl("log","! set to zero. Also, some attributes in the range 1-255 are used for special")
+ texio.write_nl("log","! purposes so setting them at the TeX end might break the font handler.")
+ texio.write_nl("log","!")
+ tex.attribute[0]=0
+end
+attributes=attributes or {}
+attributes.unsetvalue=-0x7FFFFFFF
+local numbers,last={},127
+attributes.private=attributes.private or function(name)
+ local number=numbers[name]
+ if not number then
+ if last<255 then
+ last=last+1
+ end
+ number=last
+ numbers[name]=number
+ end
+ return number
+end
+nodes={}
+nodes.handlers={}
+local nodecodes={}
+local glyphcodes=node.subtypes("glyph")
+local disccodes=node.subtypes("disc")
+for k,v in next,node.types() do
+ v=string.gsub(v,"_","")
+ nodecodes[k]=v
+ nodecodes[v]=k
+end
+for i=0,#glyphcodes do
+ glyphcodes[glyphcodes[i]]=i
+end
+for i=0,#disccodes do
+ disccodes[disccodes[i]]=i
+end
+nodes.nodecodes=nodecodes
+nodes.glyphcodes=glyphcodes
+nodes.disccodes=disccodes
+local flush_node=node.flush_node
+local remove_node=node.remove
+local traverse_id=node.traverse_id
+nodes.handlers.protectglyphs=node.protect_glyphs
+nodes.handlers.unprotectglyphs=node.unprotect_glyphs
+local math_code=nodecodes.math
+local end_of_math=node.end_of_math
+function node.end_of_math(n)
+ if n.id==math_code and n.subtype==1 then
+ return n
+ else
+ return end_of_math(n)
+ end
+end
+function nodes.remove(head,current,free_too)
+ local t=current
+ head,current=remove_node(head,current)
+ if t then
+ if free_too then
+ flush_node(t)
+ t=nil
+ else
+ t.next,t.prev=nil,nil
+ end
+ end
+ return head,current,t
+end
+function nodes.delete(head,current)
+ return nodes.remove(head,current,true)
+end
+local getfield=node.getfield
+local setfield=node.setfield
+nodes.getfield=getfield
+nodes.setfield=setfield
+nodes.getattr=getfield
+nodes.setattr=setfield
+nodes.tostring=node.tostring or tostring
+nodes.copy=node.copy
+nodes.copy_node=node.copy
+nodes.copy_list=node.copy_list
+nodes.delete=node.delete
+nodes.dimensions=node.dimensions
+nodes.end_of_math=node.end_of_math
+nodes.flush_list=node.flush_list
+nodes.flush_node=node.flush_node
+nodes.flush=node.flush_node
+nodes.free=node.free
+nodes.insert_after=node.insert_after
+nodes.insert_before=node.insert_before
+nodes.hpack=node.hpack
+nodes.new=node.new
+nodes.tail=node.tail
+nodes.traverse=node.traverse
+nodes.traverse_id=node.traverse_id
+nodes.slide=node.slide
+nodes.vpack=node.vpack
+nodes.first_glyph=node.first_glyph
+nodes.has_glyph=node.has_glyph or node.first_glyph
+nodes.current_attr=node.current_attr
+nodes.has_field=node.has_field
+nodes.last_node=node.last_node
+nodes.usedlist=node.usedlist
+nodes.protrusion_skippable=node.protrusion_skippable
+nodes.write=node.write
+nodes.has_attribute=node.has_attribute
+nodes.set_attribute=node.set_attribute
+nodes.unset_attribute=node.unset_attribute
+nodes.protect_glyphs=node.protect_glyphs
+nodes.unprotect_glyphs=node.unprotect_glyphs
+nodes.mlist_to_hlist=node.mlist_to_hlist
+local direct=node.direct
+local nuts={}
+nodes.nuts=nuts
+local tonode=direct.tonode
+local tonut=direct.todirect
+nodes.tonode=tonode
+nodes.tonut=tonut
+nuts.tonode=tonode
+nuts.tonut=tonut
+local getfield=direct.getfield
+local setfield=direct.setfield
+nuts.getfield=getfield
+nuts.setfield=setfield
+nuts.getnext=direct.getnext
+nuts.setnext=direct.setnext
+nuts.getprev=direct.getprev
+nuts.setprev=direct.setprev
+nuts.getboth=direct.getboth
+nuts.setboth=direct.setboth
+nuts.getid=direct.getid
+nuts.getattr=direct.get_attribute or direct.has_attribute or getfield
+nuts.setattr=setfield
+nuts.getfont=direct.getfont
+nuts.setfont=direct.setfont
+nuts.getsubtype=direct.getsubtype
+nuts.setsubtype=direct.setsubtype
+nuts.getchar=direct.getchar
+nuts.setchar=direct.setchar
+nuts.getdisc=direct.getdisc
+nuts.setdisc=direct.setdisc
+nuts.setlink=direct.setlink
+nuts.setsplit=direct.setsplit
+nuts.getlist=direct.getlist
+nuts.setlist=direct.setlist
+nuts.getoffsets=direct.getoffsets or
+ function(n)
+ return getfield(n,"xoffset"),getfield(n,"yoffset")
+ end
+nuts.setoffsets=direct.setoffsets or
+ function(n,x,y)
+ if x then setfield(n,"xoffset",x) end
+ if y then setfield(n,"xoffset",y) end
+ end
+nuts.getleader=direct.getleader or function(n) return getfield(n,"leader") end
+nuts.setleader=direct.setleader or function(n,l) setfield(n,"leader",l) end
+nuts.getcomponents=direct.getcomponents or function(n) return getfield(n,"components") end
+nuts.setcomponents=direct.setcomponents or function(n,c) setfield(n,"components",c) end
+nuts.getkern=direct.getkern or function(n) return getfield(n,"kern") end
+nuts.setkern=direct.setkern or function(n,k) setfield(n,"kern",k) end
+nuts.getdir=direct.getdir or function(n) return getfield(n,"dir") end
+nuts.setdir=direct.setdir or function(n,d) setfield(n,"dir",d) end
+nuts.getwidth=direct.getwidth or function(n) return getfield(n,"width") end
+nuts.setwidth=direct.setwidth or function(n,w) return setfield(n,"width",w) end
+nuts.getheight=direct.getheight or function(n) return getfield(n,"height") end
+nuts.setheight=direct.setheight or function(n,h) return setfield(n,"height",h) end
+nuts.getdepth=direct.getdepth or function(n) return getfield(n,"depth") end
+nuts.setdepth=direct.setdepth or function(n,d) return setfield(n,"depth",d) end
+if not direct.is_glyph then
+ local getchar=direct.getchar
+ local getid=direct.getid
+ local getfont=direct.getfont
+ local glyph_code=nodes.nodecodes.glyph
+ function direct.is_glyph(n,f)
+ local id=getid(n)
+ if id==glyph_code then
+ if f and getfont(n)==f then
+ return getchar(n)
+ else
+ return false
+ end
+ else
+ return nil,id
+ end
+ end
+ function direct.is_char(n,f)
+ local id=getid(n)
+ if id==glyph_code then
+ if getsubtype(n)>=256 then
+ return false
+ elseif f and getfont(n)==f then
+ return getchar(n)
+ else
+ return false
+ end
+ else
+ return nil,id
+ end
+ end
+end
+nuts.ischar=direct.is_char
+nuts.is_char=direct.is_char
+nuts.isglyph=direct.is_glyph
+nuts.is_glyph=direct.is_glyph
+nuts.insert_before=direct.insert_before
+nuts.insert_after=direct.insert_after
+nuts.delete=direct.delete
+nuts.copy=direct.copy
+nuts.copy_node=direct.copy
+nuts.copy_list=direct.copy_list
+nuts.tail=direct.tail
+nuts.flush_list=direct.flush_list
+nuts.flush_node=direct.flush_node
+nuts.flush=direct.flush
+nuts.free=direct.free
+nuts.remove=direct.remove
+nuts.is_node=direct.is_node
+nuts.end_of_math=direct.end_of_math
+nuts.traverse=direct.traverse
+nuts.traverse_id=direct.traverse_id
+nuts.traverse_char=direct.traverse_char
+nuts.ligaturing=direct.ligaturing
+nuts.kerning=direct.kerning
+nuts.new=direct.new
+nuts.getprop=nuts.getattr
+nuts.setprop=nuts.setattr
+local propertydata=direct.get_properties_table()
+nodes.properties={ data=propertydata }
+direct.set_properties_mode(true,true)
+function direct.set_properties_mode() end
+nuts.getprop=function(n,k)
+ local p=propertydata[n]
+ if p then
+ return p[k]
+ end
+end
+nuts.setprop=function(n,k,v)
+ if v then
+ local p=propertydata[n]
+ if p then
+ p[k]=v
+ else
+ propertydata[n]={ [k]=v }
+ end
+ end
+end
+nodes.setprop=nodes.setproperty
+nodes.getprop=nodes.getproperty
+local setprev=nuts.setprev
+local setnext=nuts.setnext
+local getnext=nuts.getnext
+local setlink=nuts.setlink
+local getfield=nuts.getfield
+local setfield=nuts.setfield
+local getcomponents=nuts.getcomponents
+local setcomponents=nuts.setcomponents
+local find_tail=nuts.tail
+local flush_list=nuts.flush_list
+local flush_node=nuts.flush_node
+local traverse_id=nuts.traverse_id
+local copy_node=nuts.copy_node
+local glyph_code=nodes.nodecodes.glyph
+function nuts.set_components(target,start,stop)
+ local head=getcomponents(target)
+ if head then
+ flush_list(head)
+ head=nil
+ end
+ if start then
+ setprev(start)
+ else
+ return nil
+ end
+ if stop then
+ setnext(stop)
+ end
+ local tail=nil
+ while start do
+ local c=getcomponents(start)
+ local n=getnext(start)
+ if c then
+ if head then
+ setlink(tail,c)
+ else
+ head=c
+ end
+ tail=find_tail(c)
+ setcomponents(start)
+ flush_node(start)
+ else
+ if head then
+ setlink(tail,start)
+ else
+ head=start
+ end
+ tail=start
+ end
+ start=n
+ end
+ setcomponents(target,head)
+ return head
+end
+nuts.get_components=nuts.getcomponents
+function nuts.take_components(target)
+ local c=getcomponents(target)
+ setcomponents(target)
+ return c
+end
+function nuts.count_components(n,marks)
+ local components=getcomponents(n)
+ if components then
+ if marks then
+ local i=0
+ for g in traverse_id(glyph_code,components) do
+ if not marks[getchar(g)] then
+ i=i+1
+ end
+ end
+ return i
+ else
+ return count(glyph_code,components)
+ end
+ else
+ return 0
+ end
+end
+function nuts.copy_no_components(g,copyinjection)
+ local components=getcomponents(g)
+ if components then
+ setcomponents(g)
+ local n=copy_node(g)
+ if copyinjection then
+ copyinjection(n,g)
+ end
+ setcomponents(g,components)
+ return n
+ else
+ local n=copy_node(g)
+ if copyinjection then
+ copyinjection(n,g)
+ end
+ return n
+ end
+end
+function nuts.copy_only_glyphs(current)
+ local head=nil
+ local previous=nil
+ for n in traverse_id(glyph_code,current) do
+ n=copy_node(n)
+ if head then
+ setlink(previous,n)
+ else
+ head=n
+ end
+ previous=n
+ end
+ return head
+end
+nuts.uses_font=direct.uses_font
+if not nuts.uses_font then
+ local getdisc=nuts.getdisc
+ local getfont=nuts.getfont
+ function nuts.uses_font(n,font)
+ local pre,post,replace=getdisc(n)
+ if pre then
+ for n in traverse_id(glyph_code,pre) do
+ if getfont(n)==font then
+ return true
+ end
+ end
+ end
+ if post then
+ for n in traverse_id(glyph_code,post) do
+ if getfont(n)==font then
+ return true
+ end
+ end
+ end
+ if replace then
+ for n in traverse_id(glyph_code,replace) do
+ if getfont(n)==font then
+ return true
+ end
+ end
+ end
+ return false
+ end
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+
+characters=characters or {}
+characters.blockrange={}
+characters.classifiers={
+ [768]=5,
+ [769]=5,
+ [770]=5,
+ [771]=5,
+ [772]=5,
+ [773]=5,
+ [774]=5,
+ [775]=5,
+ [776]=5,
+ [777]=5,
+ [778]=5,
+ [779]=5,
+ [780]=5,
+ [781]=5,
+ [782]=5,
+ [783]=5,
+ [784]=5,
+ [785]=5,
+ [786]=5,
+ [787]=5,
+ [788]=5,
+ [789]=5,
+ [790]=5,
+ [791]=5,
+ [792]=5,
+ [793]=5,
+ [794]=5,
+ [795]=5,
+ [796]=5,
+ [797]=5,
+ [798]=5,
+ [799]=5,
+ [800]=5,
+ [801]=5,
+ [802]=5,
+ [803]=5,
+ [804]=5,
+ [805]=5,
+ [806]=5,
+ [807]=5,
+ [808]=5,
+ [809]=5,
+ [810]=5,
+ [811]=5,
+ [812]=5,
+ [813]=5,
+ [814]=5,
+ [815]=5,
+ [816]=5,
+ [817]=5,
+ [818]=5,
+ [819]=5,
+ [820]=5,
+ [821]=5,
+ [822]=5,
+ [823]=5,
+ [824]=5,
+ [825]=5,
+ [826]=5,
+ [827]=5,
+ [828]=5,
+ [829]=5,
+ [830]=5,
+ [831]=5,
+ [832]=5,
+ [833]=5,
+ [834]=5,
+ [835]=5,
+ [836]=5,
+ [837]=5,
+ [838]=5,
+ [839]=5,
+ [840]=5,
+ [841]=5,
+ [842]=5,
+ [843]=5,
+ [844]=5,
+ [845]=5,
+ [846]=5,
+ [847]=5,
+ [848]=5,
+ [849]=5,
+ [850]=5,
+ [851]=5,
+ [852]=5,
+ [853]=5,
+ [854]=5,
+ [855]=5,
+ [856]=5,
+ [857]=5,
+ [858]=5,
+ [859]=5,
+ [860]=5,
+ [861]=5,
+ [862]=5,
+ [863]=5,
+ [864]=5,
+ [865]=5,
+ [866]=5,
+ [867]=5,
+ [868]=5,
+ [869]=5,
+ [870]=5,
+ [871]=5,
+ [872]=5,
+ [873]=5,
+ [874]=5,
+ [875]=5,
+ [876]=5,
+ [877]=5,
+ [878]=5,
+ [879]=5,
+ [1155]=5,
+ [1156]=5,
+ [1157]=5,
+ [1158]=5,
+ [1159]=5,
+ [1425]=5,
+ [1426]=5,
+ [1427]=5,
+ [1428]=5,
+ [1429]=5,
+ [1430]=5,
+ [1431]=5,
+ [1432]=5,
+ [1433]=5,
+ [1434]=5,
+ [1435]=5,
+ [1436]=5,
+ [1437]=5,
+ [1438]=5,
+ [1439]=5,
+ [1440]=5,
+ [1441]=5,
+ [1442]=5,
+ [1443]=5,
+ [1444]=5,
+ [1445]=5,
+ [1446]=5,
+ [1447]=5,
+ [1448]=5,
+ [1449]=5,
+ [1450]=5,
+ [1451]=5,
+ [1452]=5,
+ [1453]=5,
+ [1454]=5,
+ [1455]=5,
+ [1456]=5,
+ [1457]=5,
+ [1458]=5,
+ [1459]=5,
+ [1460]=5,
+ [1461]=5,
+ [1462]=5,
+ [1463]=5,
+ [1464]=5,
+ [1465]=5,
+ [1466]=5,
+ [1467]=5,
+ [1468]=5,
+ [1469]=5,
+ [1471]=5,
+ [1473]=5,
+ [1474]=5,
+ [1476]=5,
+ [1477]=5,
+ [1479]=5,
+ [1536]=4,
+ [1537]=4,
+ [1538]=4,
+ [1539]=4,
+ [1540]=4,
+ [1541]=4,
+ [1542]=6,
+ [1543]=6,
+ [1544]=4,
+ [1545]=6,
+ [1546]=6,
+ [1547]=4,
+ [1548]=6,
+ [1549]=6,
+ [1550]=6,
+ [1551]=6,
+ [1552]=5,
+ [1553]=5,
+ [1554]=5,
+ [1555]=5,
+ [1556]=5,
+ [1557]=5,
+ [1558]=5,
+ [1559]=5,
+ [1560]=5,
+ [1561]=5,
+ [1562]=5,
+ [1563]=6,
+ [1564]=6,
+ [1566]=6,
+ [1567]=6,
+ [1568]=2,
+ [1569]=4,
+ [1570]=3,
+ [1571]=3,
+ [1572]=3,
+ [1573]=3,
+ [1574]=2,
+ [1575]=3,
+ [1576]=2,
+ [1577]=3,
+ [1578]=2,
+ [1579]=2,
+ [1580]=2,
+ [1581]=2,
+ [1582]=2,
+ [1583]=3,
+ [1584]=3,
+ [1585]=3,
+ [1586]=3,
+ [1587]=2,
+ [1588]=2,
+ [1589]=2,
+ [1590]=2,
+ [1591]=2,
+ [1592]=2,
+ [1593]=2,
+ [1594]=2,
+ [1595]=2,
+ [1596]=2,
+ [1597]=2,
+ [1598]=2,
+ [1599]=2,
+ [1600]=2,
+ [1601]=2,
+ [1602]=2,
+ [1603]=2,
+ [1604]=2,
+ [1605]=2,
+ [1606]=2,
+ [1607]=2,
+ [1608]=3,
+ [1609]=2,
+ [1610]=2,
+ [1611]=5,
+ [1612]=5,
+ [1613]=5,
+ [1614]=5,
+ [1615]=5,
+ [1616]=5,
+ [1617]=5,
+ [1618]=5,
+ [1619]=5,
+ [1620]=5,
+ [1621]=5,
+ [1622]=5,
+ [1623]=5,
+ [1624]=5,
+ [1625]=5,
+ [1626]=5,
+ [1627]=5,
+ [1628]=5,
+ [1629]=5,
+ [1630]=5,
+ [1631]=5,
+ [1632]=6,
+ [1633]=6,
+ [1634]=6,
+ [1635]=6,
+ [1636]=6,
+ [1637]=6,
+ [1638]=6,
+ [1639]=6,
+ [1640]=6,
+ [1641]=6,
+ [1642]=6,
+ [1643]=6,
+ [1644]=6,
+ [1645]=6,
+ [1646]=2,
+ [1647]=2,
+ [1648]=5,
+ [1649]=3,
+ [1650]=3,
+ [1651]=3,
+ [1652]=4,
+ [1653]=3,
+ [1654]=3,
+ [1655]=3,
+ [1656]=2,
+ [1657]=2,
+ [1658]=2,
+ [1659]=2,
+ [1660]=2,
+ [1661]=2,
+ [1662]=2,
+ [1663]=2,
+ [1664]=2,
+ [1665]=2,
+ [1666]=2,
+ [1667]=2,
+ [1668]=2,
+ [1669]=2,
+ [1670]=2,
+ [1671]=2,
+ [1672]=3,
+ [1673]=3,
+ [1674]=3,
+ [1675]=3,
+ [1676]=3,
+ [1677]=3,
+ [1678]=3,
+ [1679]=3,
+ [1680]=3,
+ [1681]=3,
+ [1682]=3,
+ [1683]=3,
+ [1684]=3,
+ [1685]=3,
+ [1686]=3,
+ [1687]=3,
+ [1688]=3,
+ [1689]=3,
+ [1690]=2,
+ [1691]=2,
+ [1692]=2,
+ [1693]=2,
+ [1694]=2,
+ [1695]=2,
+ [1696]=2,
+ [1697]=2,
+ [1698]=2,
+ [1699]=2,
+ [1700]=2,
+ [1701]=2,
+ [1702]=2,
+ [1703]=2,
+ [1704]=2,
+ [1705]=2,
+ [1706]=2,
+ [1707]=2,
+ [1708]=2,
+ [1709]=2,
+ [1710]=2,
+ [1711]=2,
+ [1712]=2,
+ [1713]=2,
+ [1714]=2,
+ [1715]=2,
+ [1716]=2,
+ [1717]=2,
+ [1718]=2,
+ [1719]=2,
+ [1720]=2,
+ [1721]=2,
+ [1722]=2,
+ [1723]=2,
+ [1724]=2,
+ [1725]=2,
+ [1726]=2,
+ [1727]=2,
+ [1728]=3,
+ [1729]=2,
+ [1730]=2,
+ [1731]=3,
+ [1732]=3,
+ [1733]=3,
+ [1734]=3,
+ [1735]=3,
+ [1736]=3,
+ [1737]=3,
+ [1738]=3,
+ [1739]=3,
+ [1740]=2,
+ [1741]=3,
+ [1742]=2,
+ [1743]=3,
+ [1744]=2,
+ [1745]=2,
+ [1746]=3,
+ [1747]=3,
+ [1748]=6,
+ [1749]=3,
+ [1750]=5,
+ [1751]=5,
+ [1752]=5,
+ [1753]=5,
+ [1754]=5,
+ [1755]=5,
+ [1756]=5,
+ [1757]=4,
+ [1758]=6,
+ [1759]=5,
+ [1760]=5,
+ [1761]=5,
+ [1762]=5,
+ [1763]=5,
+ [1764]=5,
+ [1765]=6,
+ [1766]=6,
+ [1767]=5,
+ [1768]=5,
+ [1769]=6,
+ [1770]=5,
+ [1771]=5,
+ [1772]=5,
+ [1773]=5,
+ [1774]=3,
+ [1775]=3,
+ [1776]=6,
+ [1777]=6,
+ [1778]=6,
+ [1779]=6,
+ [1780]=6,
+ [1781]=6,
+ [1782]=6,
+ [1783]=6,
+ [1784]=6,
+ [1785]=6,
+ [1786]=2,
+ [1787]=2,
+ [1788]=2,
+ [1789]=6,
+ [1790]=6,
+ [1791]=2,
+ [1792]=6,
+ [1793]=6,
+ [1794]=6,
+ [1795]=6,
+ [1796]=6,
+ [1797]=6,
+ [1798]=6,
+ [1799]=6,
+ [1800]=6,
+ [1801]=6,
+ [1802]=6,
+ [1803]=6,
+ [1804]=6,
+ [1805]=6,
+ [1807]=6,
+ [1808]=3,
+ [1809]=5,
+ [1810]=2,
+ [1811]=2,
+ [1812]=2,
+ [1813]=3,
+ [1814]=3,
+ [1815]=3,
+ [1816]=3,
+ [1817]=3,
+ [1818]=2,
+ [1819]=2,
+ [1820]=2,
+ [1821]=2,
+ [1822]=3,
+ [1823]=2,
+ [1824]=2,
+ [1825]=2,
+ [1826]=2,
+ [1827]=2,
+ [1828]=2,
+ [1829]=2,
+ [1830]=2,
+ [1831]=2,
+ [1832]=3,
+ [1833]=2,
+ [1834]=3,
+ [1835]=2,
+ [1836]=3,
+ [1837]=2,
+ [1838]=2,
+ [1839]=3,
+ [1840]=5,
+ [1841]=5,
+ [1842]=5,
+ [1843]=5,
+ [1844]=5,
+ [1845]=5,
+ [1846]=5,
+ [1847]=5,
+ [1848]=5,
+ [1849]=5,
+ [1850]=5,
+ [1851]=5,
+ [1852]=5,
+ [1853]=5,
+ [1854]=5,
+ [1855]=5,
+ [1856]=5,
+ [1857]=5,
+ [1858]=5,
+ [1859]=5,
+ [1860]=5,
+ [1861]=5,
+ [1862]=5,
+ [1863]=5,
+ [1864]=5,
+ [1865]=5,
+ [1866]=5,
+ [1869]=3,
+ [1870]=2,
+ [1871]=2,
+ [1872]=2,
+ [1873]=2,
+ [1874]=2,
+ [1875]=2,
+ [1876]=2,
+ [1877]=2,
+ [1878]=2,
+ [1879]=2,
+ [1880]=2,
+ [1881]=3,
+ [1882]=3,
+ [1883]=3,
+ [1884]=2,
+ [1885]=2,
+ [1886]=2,
+ [1887]=2,
+ [1888]=2,
+ [1889]=2,
+ [1890]=2,
+ [1891]=2,
+ [1892]=2,
+ [1893]=2,
+ [1894]=2,
+ [1895]=2,
+ [1896]=2,
+ [1897]=2,
+ [1898]=2,
+ [1899]=3,
+ [1900]=3,
+ [1901]=2,
+ [1902]=2,
+ [1903]=2,
+ [1904]=2,
+ [1905]=3,
+ [1906]=2,
+ [1907]=3,
+ [1908]=3,
+ [1909]=2,
+ [1910]=2,
+ [1911]=2,
+ [1912]=3,
+ [1913]=3,
+ [1914]=2,
+ [1915]=2,
+ [1916]=2,
+ [1917]=2,
+ [1918]=2,
+ [1919]=2,
+ [1958]=5,
+ [1959]=5,
+ [1960]=5,
+ [1961]=5,
+ [1962]=5,
+ [1963]=5,
+ [1964]=5,
+ [1965]=5,
+ [1966]=5,
+ [1967]=5,
+ [1968]=5,
+ [1984]=6,
+ [1985]=6,
+ [1986]=6,
+ [1987]=6,
+ [1988]=6,
+ [1989]=6,
+ [1990]=6,
+ [1991]=6,
+ [1992]=6,
+ [1993]=6,
+ [1994]=2,
+ [1995]=2,
+ [1996]=2,
+ [1997]=2,
+ [1998]=2,
+ [1999]=2,
+ [2000]=2,
+ [2001]=2,
+ [2002]=2,
+ [2003]=2,
+ [2004]=2,
+ [2005]=2,
+ [2006]=2,
+ [2007]=2,
+ [2008]=2,
+ [2009]=2,
+ [2010]=2,
+ [2011]=2,
+ [2012]=2,
+ [2013]=2,
+ [2014]=2,
+ [2015]=2,
+ [2016]=2,
+ [2017]=2,
+ [2018]=2,
+ [2019]=2,
+ [2020]=2,
+ [2021]=2,
+ [2022]=2,
+ [2023]=2,
+ [2024]=2,
+ [2025]=2,
+ [2026]=2,
+ [2027]=5,
+ [2028]=5,
+ [2029]=5,
+ [2030]=5,
+ [2031]=5,
+ [2032]=5,
+ [2033]=5,
+ [2034]=5,
+ [2035]=5,
+ [2036]=6,
+ [2037]=6,
+ [2038]=6,
+ [2039]=6,
+ [2040]=6,
+ [2041]=6,
+ [2042]=2,
+ [2070]=5,
+ [2071]=5,
+ [2072]=5,
+ [2073]=5,
+ [2075]=5,
+ [2076]=5,
+ [2077]=5,
+ [2078]=5,
+ [2079]=5,
+ [2080]=5,
+ [2081]=5,
+ [2082]=5,
+ [2083]=5,
+ [2085]=5,
+ [2086]=5,
+ [2087]=5,
+ [2089]=5,
+ [2090]=5,
+ [2091]=5,
+ [2092]=5,
+ [2093]=5,
+ [2112]=3,
+ [2113]=2,
+ [2114]=2,
+ [2115]=2,
+ [2116]=2,
+ [2117]=2,
+ [2118]=3,
+ [2119]=3,
+ [2120]=2,
+ [2121]=3,
+ [2122]=2,
+ [2123]=2,
+ [2124]=2,
+ [2125]=2,
+ [2126]=2,
+ [2127]=2,
+ [2128]=2,
+ [2129]=2,
+ [2130]=2,
+ [2131]=2,
+ [2132]=3,
+ [2133]=2,
+ [2134]=4,
+ [2135]=4,
+ [2136]=4,
+ [2137]=5,
+ [2138]=5,
+ [2139]=5,
+ [2208]=2,
+ [2209]=2,
+ [2210]=2,
+ [2211]=2,
+ [2212]=2,
+ [2213]=2,
+ [2214]=2,
+ [2215]=2,
+ [2216]=2,
+ [2217]=2,
+ [2218]=3,
+ [2219]=3,
+ [2220]=3,
+ [2221]=4,
+ [2222]=3,
+ [2223]=2,
+ [2224]=2,
+ [2225]=3,
+ [2226]=3,
+ [2227]=2,
+ [2228]=2,
+ [2230]=2,
+ [2231]=2,
+ [2232]=2,
+ [2233]=3,
+ [2234]=2,
+ [2235]=2,
+ [2236]=2,
+ [2237]=2,
+ [2260]=5,
+ [2261]=5,
+ [2262]=5,
+ [2263]=5,
+ [2264]=5,
+ [2265]=5,
+ [2266]=5,
+ [2267]=5,
+ [2268]=5,
+ [2269]=5,
+ [2270]=5,
+ [2271]=5,
+ [2272]=5,
+ [2273]=5,
+ [2274]=4,
+ [2275]=5,
+ [2276]=5,
+ [2277]=5,
+ [2278]=5,
+ [2279]=5,
+ [2280]=5,
+ [2281]=5,
+ [2282]=5,
+ [2283]=5,
+ [2284]=5,
+ [2285]=5,
+ [2286]=5,
+ [2287]=5,
+ [2288]=5,
+ [2289]=5,
+ [2290]=5,
+ [2291]=5,
+ [2292]=5,
+ [2293]=5,
+ [2294]=5,
+ [2295]=5,
+ [2296]=5,
+ [2297]=5,
+ [2298]=5,
+ [2299]=5,
+ [2300]=5,
+ [2301]=5,
+ [2302]=5,
+ [2303]=5,
+ [2304]=5,
+ [2305]=5,
+ [2306]=5,
+ [2362]=5,
+ [2364]=5,
+ [2369]=5,
+ [2370]=5,
+ [2371]=5,
+ [2372]=5,
+ [2373]=5,
+ [2374]=5,
+ [2375]=5,
+ [2376]=5,
+ [2381]=5,
+ [2385]=5,
+ [2386]=5,
+ [2387]=5,
+ [2388]=5,
+ [2389]=5,
+ [2390]=5,
+ [2391]=5,
+ [2402]=5,
+ [2403]=5,
+ [2433]=5,
+ [2492]=5,
+ [2497]=5,
+ [2498]=5,
+ [2499]=5,
+ [2500]=5,
+ [2509]=5,
+ [2530]=5,
+ [2531]=5,
+ [2561]=5,
+ [2562]=5,
+ [2620]=5,
+ [2625]=5,
+ [2626]=5,
+ [2631]=5,
+ [2632]=5,
+ [2635]=5,
+ [2636]=5,
+ [2637]=5,
+ [2641]=5,
+ [2672]=5,
+ [2673]=5,
+ [2677]=5,
+ [2689]=5,
+ [2690]=5,
+ [2748]=5,
+ [2753]=5,
+ [2754]=5,
+ [2755]=5,
+ [2756]=5,
+ [2757]=5,
+ [2759]=5,
+ [2760]=5,
+ [2765]=5,
+ [2786]=5,
+ [2787]=5,
+ [2817]=5,
+ [2876]=5,
+ [2879]=5,
+ [2881]=5,
+ [2882]=5,
+ [2883]=5,
+ [2884]=5,
+ [2893]=5,
+ [2902]=5,
+ [2914]=5,
+ [2915]=5,
+ [2946]=5,
+ [3008]=5,
+ [3021]=5,
+ [3072]=5,
+ [3134]=5,
+ [3135]=5,
+ [3136]=5,
+ [3142]=5,
+ [3143]=5,
+ [3144]=5,
+ [3146]=5,
+ [3147]=5,
+ [3148]=5,
+ [3149]=5,
+ [3157]=5,
+ [3158]=5,
+ [3170]=5,
+ [3171]=5,
+ [3201]=5,
+ [3260]=5,
+ [3263]=5,
+ [3270]=5,
+ [3276]=5,
+ [3277]=5,
+ [3298]=5,
+ [3299]=5,
+ [3329]=5,
+ [3393]=5,
+ [3394]=5,
+ [3395]=5,
+ [3396]=5,
+ [3405]=5,
+ [3426]=5,
+ [3427]=5,
+ [3530]=5,
+ [3538]=5,
+ [3539]=5,
+ [3540]=5,
+ [3542]=5,
+ [3633]=5,
+ [3636]=5,
+ [3637]=5,
+ [3638]=5,
+ [3639]=5,
+ [3640]=5,
+ [3641]=5,
+ [3642]=5,
+ [3655]=5,
+ [3656]=5,
+ [3657]=5,
+ [3658]=5,
+ [3659]=5,
+ [3660]=5,
+ [3661]=5,
+ [3662]=5,
+ [3761]=5,
+ [3764]=5,
+ [3765]=5,
+ [3766]=5,
+ [3767]=5,
+ [3768]=5,
+ [3769]=5,
+ [3771]=5,
+ [3772]=5,
+ [3784]=5,
+ [3785]=5,
+ [3786]=5,
+ [3787]=5,
+ [3788]=5,
+ [3789]=5,
+ [3864]=5,
+ [3865]=5,
+ [3893]=5,
+ [3895]=5,
+ [3897]=5,
+ [3953]=5,
+ [3954]=5,
+ [3955]=5,
+ [3956]=5,
+ [3957]=5,
+ [3958]=5,
+ [3959]=5,
+ [3960]=5,
+ [3961]=5,
+ [3962]=5,
+ [3963]=5,
+ [3964]=5,
+ [3965]=5,
+ [3966]=5,
+ [3968]=5,
+ [3969]=5,
+ [3970]=5,
+ [3971]=5,
+ [3972]=5,
+ [3974]=5,
+ [3975]=5,
+ [3981]=5,
+ [3982]=5,
+ [3983]=5,
+ [3984]=5,
+ [3985]=5,
+ [3986]=5,
+ [3987]=5,
+ [3988]=5,
+ [3989]=5,
+ [3990]=5,
+ [3991]=5,
+ [3993]=5,
+ [3994]=5,
+ [3995]=5,
+ [3996]=5,
+ [3997]=5,
+ [3998]=5,
+ [3999]=5,
+ [4000]=5,
+ [4001]=5,
+ [4002]=5,
+ [4003]=5,
+ [4004]=5,
+ [4005]=5,
+ [4006]=5,
+ [4007]=5,
+ [4008]=5,
+ [4009]=5,
+ [4010]=5,
+ [4011]=5,
+ [4012]=5,
+ [4013]=5,
+ [4014]=5,
+ [4015]=5,
+ [4016]=5,
+ [4017]=5,
+ [4018]=5,
+ [4019]=5,
+ [4020]=5,
+ [4021]=5,
+ [4022]=5,
+ [4023]=5,
+ [4024]=5,
+ [4025]=5,
+ [4026]=5,
+ [4027]=5,
+ [4028]=5,
+ [4038]=5,
+ [4141]=5,
+ [4142]=5,
+ [4143]=5,
+ [4144]=5,
+ [4146]=5,
+ [4147]=5,
+ [4148]=5,
+ [4149]=5,
+ [4150]=5,
+ [4151]=5,
+ [4153]=5,
+ [4154]=5,
+ [4157]=5,
+ [4158]=5,
+ [4184]=5,
+ [4185]=5,
+ [4190]=5,
+ [4191]=5,
+ [4192]=5,
+ [4209]=5,
+ [4210]=5,
+ [4211]=5,
+ [4212]=5,
+ [4226]=5,
+ [4229]=5,
+ [4230]=5,
+ [4237]=5,
+ [4253]=5,
+ [4957]=5,
+ [4958]=5,
+ [4959]=5,
+ [5906]=5,
+ [5907]=5,
+ [5908]=5,
+ [5938]=5,
+ [5939]=5,
+ [5940]=5,
+ [5970]=5,
+ [5971]=5,
+ [6002]=5,
+ [6003]=5,
+ [6071]=5,
+ [6072]=5,
+ [6073]=5,
+ [6074]=5,
+ [6075]=5,
+ [6076]=5,
+ [6077]=5,
+ [6086]=5,
+ [6089]=5,
+ [6090]=5,
+ [6091]=5,
+ [6092]=5,
+ [6093]=5,
+ [6094]=5,
+ [6095]=5,
+ [6096]=5,
+ [6097]=5,
+ [6098]=5,
+ [6099]=5,
+ [6109]=5,
+ [6150]=4,
+ [6151]=2,
+ [6154]=2,
+ [6155]=5,
+ [6156]=5,
+ [6157]=5,
+ [6158]=4,
+ [6176]=2,
+ [6177]=2,
+ [6178]=2,
+ [6179]=2,
+ [6180]=2,
+ [6181]=2,
+ [6182]=2,
+ [6183]=2,
+ [6184]=2,
+ [6185]=2,
+ [6186]=2,
+ [6187]=2,
+ [6188]=2,
+ [6189]=2,
+ [6190]=2,
+ [6191]=2,
+ [6192]=2,
+ [6193]=2,
+ [6194]=2,
+ [6195]=2,
+ [6196]=2,
+ [6197]=2,
+ [6198]=2,
+ [6199]=2,
+ [6200]=2,
+ [6201]=2,
+ [6202]=2,
+ [6203]=2,
+ [6204]=2,
+ [6205]=2,
+ [6206]=2,
+ [6207]=2,
+ [6208]=2,
+ [6209]=2,
+ [6210]=2,
+ [6211]=2,
+ [6212]=2,
+ [6213]=2,
+ [6214]=2,
+ [6215]=2,
+ [6216]=2,
+ [6217]=2,
+ [6218]=2,
+ [6219]=2,
+ [6220]=2,
+ [6221]=2,
+ [6222]=2,
+ [6223]=2,
+ [6224]=2,
+ [6225]=2,
+ [6226]=2,
+ [6227]=2,
+ [6228]=2,
+ [6229]=2,
+ [6230]=2,
+ [6231]=2,
+ [6232]=2,
+ [6233]=2,
+ [6234]=2,
+ [6235]=2,
+ [6236]=2,
+ [6237]=2,
+ [6238]=2,
+ [6239]=2,
+ [6240]=2,
+ [6241]=2,
+ [6242]=2,
+ [6243]=2,
+ [6244]=2,
+ [6245]=2,
+ [6246]=2,
+ [6247]=2,
+ [6248]=2,
+ [6249]=2,
+ [6250]=2,
+ [6251]=2,
+ [6252]=2,
+ [6253]=2,
+ [6254]=2,
+ [6255]=2,
+ [6256]=2,
+ [6257]=2,
+ [6258]=2,
+ [6259]=2,
+ [6260]=2,
+ [6261]=2,
+ [6262]=2,
+ [6263]=2,
+ [6272]=4,
+ [6273]=4,
+ [6274]=4,
+ [6275]=4,
+ [6276]=4,
+ [6279]=2,
+ [6280]=2,
+ [6281]=2,
+ [6282]=2,
+ [6283]=2,
+ [6284]=2,
+ [6285]=2,
+ [6286]=2,
+ [6287]=2,
+ [6288]=2,
+ [6289]=2,
+ [6290]=2,
+ [6291]=2,
+ [6292]=2,
+ [6293]=2,
+ [6294]=2,
+ [6295]=2,
+ [6296]=2,
+ [6297]=2,
+ [6298]=2,
+ [6299]=2,
+ [6300]=2,
+ [6301]=2,
+ [6302]=2,
+ [6303]=2,
+ [6304]=2,
+ [6305]=2,
+ [6306]=2,
+ [6307]=2,
+ [6308]=2,
+ [6309]=2,
+ [6310]=2,
+ [6311]=2,
+ [6312]=2,
+ [6313]=5,
+ [6314]=2,
+ [6432]=5,
+ [6433]=5,
+ [6434]=5,
+ [6439]=5,
+ [6440]=5,
+ [6450]=5,
+ [6457]=5,
+ [6458]=5,
+ [6459]=5,
+ [6679]=5,
+ [6680]=5,
+ [6742]=5,
+ [6744]=5,
+ [6745]=5,
+ [6746]=5,
+ [6747]=5,
+ [6748]=5,
+ [6749]=5,
+ [6750]=5,
+ [6752]=5,
+ [6754]=5,
+ [6757]=5,
+ [6758]=5,
+ [6759]=5,
+ [6760]=5,
+ [6761]=5,
+ [6762]=5,
+ [6763]=5,
+ [6764]=5,
+ [6771]=5,
+ [6772]=5,
+ [6773]=5,
+ [6774]=5,
+ [6775]=5,
+ [6776]=5,
+ [6777]=5,
+ [6778]=5,
+ [6779]=5,
+ [6780]=5,
+ [6783]=5,
+ [6832]=5,
+ [6833]=5,
+ [6834]=5,
+ [6835]=5,
+ [6836]=5,
+ [6837]=5,
+ [6838]=5,
+ [6839]=5,
+ [6840]=5,
+ [6841]=5,
+ [6842]=5,
+ [6843]=5,
+ [6844]=5,
+ [6845]=5,
+ [6912]=5,
+ [6913]=5,
+ [6914]=5,
+ [6915]=5,
+ [6964]=5,
+ [6966]=5,
+ [6967]=5,
+ [6968]=5,
+ [6969]=5,
+ [6970]=5,
+ [6972]=5,
+ [6978]=5,
+ [7019]=5,
+ [7020]=5,
+ [7021]=5,
+ [7022]=5,
+ [7023]=5,
+ [7024]=5,
+ [7025]=5,
+ [7026]=5,
+ [7027]=5,
+ [7040]=5,
+ [7041]=5,
+ [7074]=5,
+ [7075]=5,
+ [7076]=5,
+ [7077]=5,
+ [7080]=5,
+ [7081]=5,
+ [7083]=5,
+ [7142]=5,
+ [7144]=5,
+ [7145]=5,
+ [7149]=5,
+ [7151]=5,
+ [7152]=5,
+ [7153]=5,
+ [7212]=5,
+ [7213]=5,
+ [7214]=5,
+ [7215]=5,
+ [7216]=5,
+ [7217]=5,
+ [7218]=5,
+ [7219]=5,
+ [7222]=5,
+ [7223]=5,
+ [7376]=5,
+ [7377]=5,
+ [7378]=5,
+ [7380]=5,
+ [7381]=5,
+ [7382]=5,
+ [7383]=5,
+ [7384]=5,
+ [7385]=5,
+ [7386]=5,
+ [7387]=5,
+ [7388]=5,
+ [7389]=5,
+ [7390]=5,
+ [7391]=5,
+ [7392]=5,
+ [7394]=5,
+ [7395]=5,
+ [7396]=5,
+ [7397]=5,
+ [7398]=5,
+ [7399]=5,
+ [7400]=5,
+ [7405]=5,
+ [7412]=5,
+ [7416]=5,
+ [7417]=5,
+ [7616]=5,
+ [7617]=5,
+ [7618]=5,
+ [7619]=5,
+ [7620]=5,
+ [7621]=5,
+ [7622]=5,
+ [7623]=5,
+ [7624]=5,
+ [7625]=5,
+ [7626]=5,
+ [7627]=5,
+ [7628]=5,
+ [7629]=5,
+ [7630]=5,
+ [7631]=5,
+ [7632]=5,
+ [7633]=5,
+ [7634]=5,
+ [7635]=5,
+ [7636]=5,
+ [7637]=5,
+ [7638]=5,
+ [7639]=5,
+ [7640]=5,
+ [7641]=5,
+ [7642]=5,
+ [7643]=5,
+ [7644]=5,
+ [7645]=5,
+ [7646]=5,
+ [7647]=5,
+ [7648]=5,
+ [7649]=5,
+ [7650]=5,
+ [7651]=5,
+ [7652]=5,
+ [7653]=5,
+ [7654]=5,
+ [7655]=5,
+ [7656]=5,
+ [7657]=5,
+ [7658]=5,
+ [7659]=5,
+ [7660]=5,
+ [7661]=5,
+ [7662]=5,
+ [7663]=5,
+ [7664]=5,
+ [7665]=5,
+ [7666]=5,
+ [7667]=5,
+ [7668]=5,
+ [7669]=5,
+ [7675]=5,
+ [7676]=5,
+ [7677]=5,
+ [7678]=5,
+ [7679]=5,
+ [8204]=4,
+ [8205]=2,
+ [8239]=4,
+ [8294]=4,
+ [8295]=4,
+ [8296]=4,
+ [8297]=4,
+ [8400]=5,
+ [8401]=5,
+ [8402]=5,
+ [8403]=5,
+ [8404]=5,
+ [8405]=5,
+ [8406]=5,
+ [8407]=5,
+ [8408]=5,
+ [8409]=5,
+ [8410]=5,
+ [8411]=5,
+ [8412]=5,
+ [8417]=5,
+ [8421]=5,
+ [8422]=5,
+ [8423]=5,
+ [8424]=5,
+ [8425]=5,
+ [8426]=5,
+ [8427]=5,
+ [8428]=5,
+ [8429]=5,
+ [8430]=5,
+ [8431]=5,
+ [8432]=5,
+ [11503]=5,
+ [11504]=5,
+ [11505]=5,
+ [11647]=5,
+ [11744]=5,
+ [11745]=5,
+ [11746]=5,
+ [11747]=5,
+ [11748]=5,
+ [11749]=5,
+ [11750]=5,
+ [11751]=5,
+ [11752]=5,
+ [11753]=5,
+ [11754]=5,
+ [11755]=5,
+ [11756]=5,
+ [11757]=5,
+ [11758]=5,
+ [11759]=5,
+ [11760]=5,
+ [11761]=5,
+ [11762]=5,
+ [11763]=5,
+ [11764]=5,
+ [11765]=5,
+ [11766]=5,
+ [11767]=5,
+ [11768]=5,
+ [11769]=5,
+ [11770]=5,
+ [11771]=5,
+ [11772]=5,
+ [11773]=5,
+ [11774]=5,
+ [11775]=5,
+ [12330]=5,
+ [12331]=5,
+ [12332]=5,
+ [12333]=5,
+ [12334]=5,
+ [12335]=5,
+ [12441]=5,
+ [12442]=5,
+ [42607]=5,
+ [42612]=5,
+ [42613]=5,
+ [42614]=5,
+ [42615]=5,
+ [42616]=5,
+ [42617]=5,
+ [42618]=5,
+ [42619]=5,
+ [42620]=5,
+ [42621]=5,
+ [42654]=5,
+ [42655]=5,
+ [42736]=5,
+ [42737]=5,
+ [43014]=5,
+ [43019]=5,
+ [43045]=5,
+ [43046]=5,
+ [43072]=2,
+ [43073]=2,
+ [43074]=2,
+ [43075]=2,
+ [43076]=2,
+ [43077]=2,
+ [43078]=2,
+ [43079]=2,
+ [43080]=2,
+ [43081]=2,
+ [43082]=2,
+ [43083]=2,
+ [43084]=2,
+ [43085]=2,
+ [43086]=2,
+ [43087]=2,
+ [43088]=2,
+ [43089]=2,
+ [43090]=2,
+ [43091]=2,
+ [43092]=2,
+ [43093]=2,
+ [43094]=2,
+ [43095]=2,
+ [43096]=2,
+ [43097]=2,
+ [43098]=2,
+ [43099]=2,
+ [43100]=2,
+ [43101]=2,
+ [43102]=2,
+ [43103]=2,
+ [43104]=2,
+ [43105]=2,
+ [43106]=2,
+ [43107]=2,
+ [43108]=2,
+ [43109]=2,
+ [43110]=2,
+ [43111]=2,
+ [43112]=2,
+ [43113]=2,
+ [43114]=2,
+ [43115]=2,
+ [43116]=2,
+ [43117]=2,
+ [43118]=2,
+ [43119]=2,
+ [43120]=2,
+ [43121]=2,
+ [43122]=1,
+ [43123]=4,
+ [43204]=5,
+ [43205]=5,
+ [43232]=5,
+ [43233]=5,
+ [43234]=5,
+ [43235]=5,
+ [43236]=5,
+ [43237]=5,
+ [43238]=5,
+ [43239]=5,
+ [43240]=5,
+ [43241]=5,
+ [43242]=5,
+ [43243]=5,
+ [43244]=5,
+ [43245]=5,
+ [43246]=5,
+ [43247]=5,
+ [43248]=5,
+ [43249]=5,
+ [43302]=5,
+ [43303]=5,
+ [43304]=5,
+ [43305]=5,
+ [43306]=5,
+ [43307]=5,
+ [43308]=5,
+ [43309]=5,
+ [43335]=5,
+ [43336]=5,
+ [43337]=5,
+ [43338]=5,
+ [43339]=5,
+ [43340]=5,
+ [43341]=5,
+ [43342]=5,
+ [43343]=5,
+ [43344]=5,
+ [43345]=5,
+ [43392]=5,
+ [43393]=5,
+ [43394]=5,
+ [43443]=5,
+ [43446]=5,
+ [43447]=5,
+ [43448]=5,
+ [43449]=5,
+ [43452]=5,
+ [43493]=5,
+ [43561]=5,
+ [43562]=5,
+ [43563]=5,
+ [43564]=5,
+ [43565]=5,
+ [43566]=5,
+ [43569]=5,
+ [43570]=5,
+ [43573]=5,
+ [43574]=5,
+ [43587]=5,
+ [43596]=5,
+ [43644]=5,
+ [43696]=5,
+ [43698]=5,
+ [43699]=5,
+ [43700]=5,
+ [43703]=5,
+ [43704]=5,
+ [43710]=5,
+ [43711]=5,
+ [43713]=5,
+ [43756]=5,
+ [43757]=5,
+ [43766]=5,
+ [44005]=5,
+ [44008]=5,
+ [44013]=5,
+ [64286]=5,
+ [65056]=5,
+ [65057]=5,
+ [65058]=5,
+ [65059]=5,
+ [65060]=5,
+ [65061]=5,
+ [65062]=5,
+ [65063]=5,
+ [65064]=5,
+ [65065]=5,
+ [65066]=5,
+ [65067]=5,
+ [65068]=5,
+ [65069]=5,
+ [65070]=5,
+ [65071]=5,
+ [66045]=5,
+ [66272]=5,
+ [66422]=5,
+ [66423]=5,
+ [66424]=5,
+ [66425]=5,
+ [66426]=5,
+ [68097]=5,
+ [68098]=5,
+ [68099]=5,
+ [68101]=5,
+ [68102]=5,
+ [68108]=5,
+ [68109]=5,
+ [68110]=5,
+ [68111]=5,
+ [68152]=5,
+ [68153]=5,
+ [68154]=5,
+ [68159]=5,
+ [68288]=2,
+ [68289]=2,
+ [68290]=2,
+ [68291]=2,
+ [68292]=2,
+ [68293]=3,
+ [68294]=4,
+ [68295]=3,
+ [68296]=4,
+ [68297]=3,
+ [68298]=3,
+ [68299]=4,
+ [68300]=4,
+ [68301]=1,
+ [68302]=3,
+ [68303]=3,
+ [68304]=3,
+ [68305]=3,
+ [68306]=3,
+ [68307]=2,
+ [68308]=2,
+ [68309]=2,
+ [68310]=2,
+ [68311]=1,
+ [68312]=2,
+ [68313]=2,
+ [68314]=2,
+ [68315]=2,
+ [68316]=2,
+ [68317]=3,
+ [68318]=2,
+ [68319]=2,
+ [68320]=2,
+ [68321]=3,
+ [68322]=4,
+ [68323]=4,
+ [68324]=3,
+ [68325]=5,
+ [68326]=5,
+ [68331]=2,
+ [68332]=2,
+ [68333]=2,
+ [68334]=2,
+ [68335]=3,
+ [68480]=2,
+ [68481]=3,
+ [68482]=2,
+ [68483]=3,
+ [68484]=3,
+ [68485]=3,
+ [68486]=2,
+ [68487]=2,
+ [68488]=2,
+ [68489]=3,
+ [68490]=2,
+ [68491]=2,
+ [68492]=3,
+ [68493]=2,
+ [68494]=3,
+ [68495]=3,
+ [68496]=2,
+ [68497]=3,
+ [68521]=3,
+ [68522]=3,
+ [68523]=3,
+ [68524]=3,
+ [68525]=2,
+ [68526]=2,
+ [68527]=4,
+ [69633]=5,
+ [69688]=5,
+ [69689]=5,
+ [69690]=5,
+ [69691]=5,
+ [69692]=5,
+ [69693]=5,
+ [69694]=5,
+ [69695]=5,
+ [69696]=5,
+ [69697]=5,
+ [69698]=5,
+ [69699]=5,
+ [69700]=5,
+ [69701]=5,
+ [69702]=5,
+ [69759]=5,
+ [69760]=5,
+ [69761]=5,
+ [69811]=5,
+ [69812]=5,
+ [69813]=5,
+ [69814]=5,
+ [69817]=5,
+ [69818]=5,
+ [69888]=5,
+ [69889]=5,
+ [69890]=5,
+ [69927]=5,
+ [69928]=5,
+ [69929]=5,
+ [69930]=5,
+ [69931]=5,
+ [69933]=5,
+ [69934]=5,
+ [69935]=5,
+ [69936]=5,
+ [69937]=5,
+ [69938]=5,
+ [69939]=5,
+ [69940]=5,
+ [70003]=5,
+ [70016]=5,
+ [70017]=5,
+ [70070]=5,
+ [70071]=5,
+ [70072]=5,
+ [70073]=5,
+ [70074]=5,
+ [70075]=5,
+ [70076]=5,
+ [70077]=5,
+ [70078]=5,
+ [70090]=5,
+ [70091]=5,
+ [70092]=5,
+ [70191]=5,
+ [70192]=5,
+ [70193]=5,
+ [70196]=5,
+ [70198]=5,
+ [70199]=5,
+ [70206]=5,
+ [70367]=5,
+ [70371]=5,
+ [70372]=5,
+ [70373]=5,
+ [70374]=5,
+ [70375]=5,
+ [70376]=5,
+ [70377]=5,
+ [70378]=5,
+ [70400]=5,
+ [70401]=5,
+ [70460]=5,
+ [70464]=5,
+ [70502]=5,
+ [70503]=5,
+ [70504]=5,
+ [70505]=5,
+ [70506]=5,
+ [70507]=5,
+ [70508]=5,
+ [70512]=5,
+ [70513]=5,
+ [70514]=5,
+ [70515]=5,
+ [70516]=5,
+ [70712]=5,
+ [70713]=5,
+ [70714]=5,
+ [70715]=5,
+ [70716]=5,
+ [70717]=5,
+ [70718]=5,
+ [70719]=5,
+ [70722]=5,
+ [70723]=5,
+ [70724]=5,
+ [70726]=5,
+ [70835]=5,
+ [70836]=5,
+ [70837]=5,
+ [70838]=5,
+ [70839]=5,
+ [70840]=5,
+ [70842]=5,
+ [70847]=5,
+ [70848]=5,
+ [70850]=5,
+ [70851]=5,
+ [71090]=5,
+ [71091]=5,
+ [71092]=5,
+ [71093]=5,
+ [71100]=5,
+ [71101]=5,
+ [71103]=5,
+ [71104]=5,
+ [71132]=5,
+ [71133]=5,
+ [71219]=5,
+ [71220]=5,
+ [71221]=5,
+ [71222]=5,
+ [71223]=5,
+ [71224]=5,
+ [71225]=5,
+ [71226]=5,
+ [71229]=5,
+ [71231]=5,
+ [71232]=5,
+ [71339]=5,
+ [71341]=5,
+ [71344]=5,
+ [71345]=5,
+ [71346]=5,
+ [71347]=5,
+ [71348]=5,
+ [71349]=5,
+ [71351]=5,
+ [71453]=5,
+ [71454]=5,
+ [71455]=5,
+ [71458]=5,
+ [71459]=5,
+ [71460]=5,
+ [71461]=5,
+ [71463]=5,
+ [71464]=5,
+ [71465]=5,
+ [71466]=5,
+ [71467]=5,
+ [72752]=5,
+ [72753]=5,
+ [72754]=5,
+ [72755]=5,
+ [72756]=5,
+ [72757]=5,
+ [72758]=5,
+ [72760]=5,
+ [72761]=5,
+ [72762]=5,
+ [72763]=5,
+ [72764]=5,
+ [72765]=5,
+ [72767]=5,
+ [72850]=5,
+ [72851]=5,
+ [72852]=5,
+ [72853]=5,
+ [72854]=5,
+ [72855]=5,
+ [72856]=5,
+ [72857]=5,
+ [72858]=5,
+ [72859]=5,
+ [72860]=5,
+ [72861]=5,
+ [72862]=5,
+ [72863]=5,
+ [72864]=5,
+ [72865]=5,
+ [72866]=5,
+ [72867]=5,
+ [72868]=5,
+ [72869]=5,
+ [72870]=5,
+ [72871]=5,
+ [72874]=5,
+ [72875]=5,
+ [72876]=5,
+ [72877]=5,
+ [72878]=5,
+ [72879]=5,
+ [72880]=5,
+ [72882]=5,
+ [72883]=5,
+ [72885]=5,
+ [72886]=5,
+ [92912]=5,
+ [92913]=5,
+ [92914]=5,
+ [92915]=5,
+ [92916]=5,
+ [92976]=5,
+ [92977]=5,
+ [92978]=5,
+ [92979]=5,
+ [92980]=5,
+ [92981]=5,
+ [92982]=5,
+ [94095]=5,
+ [94096]=5,
+ [94097]=5,
+ [94098]=5,
+ [113821]=5,
+ [113822]=5,
+ [119143]=5,
+ [119144]=5,
+ [119145]=5,
+ [119163]=5,
+ [119164]=5,
+ [119165]=5,
+ [119166]=5,
+ [119167]=5,
+ [119168]=5,
+ [119169]=5,
+ [119170]=5,
+ [119173]=5,
+ [119174]=5,
+ [119175]=5,
+ [119176]=5,
+ [119177]=5,
+ [119178]=5,
+ [119179]=5,
+ [119210]=5,
+ [119211]=5,
+ [119212]=5,
+ [119213]=5,
+ [119362]=5,
+ [119363]=5,
+ [119364]=5,
+ [121344]=5,
+ [121345]=5,
+ [121346]=5,
+ [121347]=5,
+ [121348]=5,
+ [121349]=5,
+ [121350]=5,
+ [121351]=5,
+ [121352]=5,
+ [121353]=5,
+ [121354]=5,
+ [121355]=5,
+ [121356]=5,
+ [121357]=5,
+ [121358]=5,
+ [121359]=5,
+ [121360]=5,
+ [121361]=5,
+ [121362]=5,
+ [121363]=5,
+ [121364]=5,
+ [121365]=5,
+ [121366]=5,
+ [121367]=5,
+ [121368]=5,
+ [121369]=5,
+ [121370]=5,
+ [121371]=5,
+ [121372]=5,
+ [121373]=5,
+ [121374]=5,
+ [121375]=5,
+ [121376]=5,
+ [121377]=5,
+ [121378]=5,
+ [121379]=5,
+ [121380]=5,
+ [121381]=5,
+ [121382]=5,
+ [121383]=5,
+ [121384]=5,
+ [121385]=5,
+ [121386]=5,
+ [121387]=5,
+ [121388]=5,
+ [121389]=5,
+ [121390]=5,
+ [121391]=5,
+ [121392]=5,
+ [121393]=5,
+ [121394]=5,
+ [121395]=5,
+ [121396]=5,
+ [121397]=5,
+ [121398]=5,
+ [121403]=5,
+ [121404]=5,
+ [121405]=5,
+ [121406]=5,
+ [121407]=5,
+ [121408]=5,
+ [121409]=5,
+ [121410]=5,
+ [121411]=5,
+ [121412]=5,
+ [121413]=5,
+ [121414]=5,
+ [121415]=5,
+ [121416]=5,
+ [121417]=5,
+ [121418]=5,
+ [121419]=5,
+ [121420]=5,
+ [121421]=5,
+ [121422]=5,
+ [121423]=5,
+ [121424]=5,
+ [121425]=5,
+ [121426]=5,
+ [121427]=5,
+ [121428]=5,
+ [121429]=5,
+ [121430]=5,
+ [121431]=5,
+ [121432]=5,
+ [121433]=5,
+ [121434]=5,
+ [121435]=5,
+ [121436]=5,
+ [121437]=5,
+ [121438]=5,
+ [121439]=5,
+ [121440]=5,
+ [121441]=5,
+ [121442]=5,
+ [121443]=5,
+ [121444]=5,
+ [121445]=5,
+ [121446]=5,
+ [121447]=5,
+ [121448]=5,
+ [121449]=5,
+ [121450]=5,
+ [121451]=5,
+ [121452]=5,
+ [121461]=5,
+ [121476]=5,
+ [121499]=5,
+ [121500]=5,
+ [121501]=5,
+ [121502]=5,
+ [121503]=5,
+ [121505]=5,
+ [121506]=5,
+ [121507]=5,
+ [121508]=5,
+ [121509]=5,
+ [121510]=5,
+ [121511]=5,
+ [121512]=5,
+ [121513]=5,
+ [121514]=5,
+ [121515]=5,
+ [121516]=5,
+ [121517]=5,
+ [121518]=5,
+ [121519]=5,
+ [122880]=5,
+ [122881]=5,
+ [122882]=5,
+ [122883]=5,
+ [122884]=5,
+ [122885]=5,
+ [122886]=5,
+ [122888]=5,
+ [122889]=5,
+ [122890]=5,
+ [122891]=5,
+ [122892]=5,
+ [122893]=5,
+ [122894]=5,
+ [122895]=5,
+ [122896]=5,
+ [122897]=5,
+ [122898]=5,
+ [122899]=5,
+ [122900]=5,
+ [122901]=5,
+ [122902]=5,
+ [122903]=5,
+ [122904]=5,
+ [122907]=5,
+ [122908]=5,
+ [122909]=5,
+ [122910]=5,
+ [122911]=5,
+ [122912]=5,
+ [122913]=5,
+ [122915]=5,
+ [122916]=5,
+ [122918]=5,
+ [122919]=5,
+ [122920]=5,
+ [122921]=5,
+ [122922]=5,
+ [125136]=5,
+ [125137]=5,
+ [125138]=5,
+ [125139]=5,
+ [125140]=5,
+ [125141]=5,
+ [125142]=5,
+ [125184]=2,
+ [125185]=2,
+ [125186]=2,
+ [125187]=2,
+ [125188]=2,
+ [125189]=2,
+ [125190]=2,
+ [125191]=2,
+ [125192]=2,
+ [125193]=2,
+ [125194]=2,
+ [125195]=2,
+ [125196]=2,
+ [125197]=2,
+ [125198]=2,
+ [125199]=2,
+ [125200]=2,
+ [125201]=2,
+ [125202]=2,
+ [125203]=2,
+ [125204]=2,
+ [125205]=2,
+ [125206]=2,
+ [125207]=2,
+ [125208]=2,
+ [125209]=2,
+ [125210]=2,
+ [125211]=2,
+ [125212]=2,
+ [125213]=2,
+ [125214]=2,
+ [125215]=2,
+ [125216]=2,
+ [125217]=2,
+ [125218]=2,
+ [125219]=2,
+ [125220]=2,
+ [125221]=2,
+ [125222]=2,
+ [125223]=2,
+ [125224]=2,
+ [125225]=2,
+ [125226]=2,
+ [125227]=2,
+ [125228]=2,
+ [125229]=2,
+ [125230]=2,
+ [125231]=2,
+ [125232]=2,
+ [125233]=2,
+ [125234]=2,
+ [125235]=2,
+ [125236]=2,
+ [125237]=2,
+ [125238]=2,
+ [125239]=2,
+ [125240]=2,
+ [125241]=2,
+ [125242]=2,
+ [125243]=2,
+ [125244]=2,
+ [125245]=2,
+ [125246]=2,
+ [125247]=2,
+ [125248]=2,
+ [125249]=2,
+ [125250]=2,
+ [125251]=2,
+ [125252]=5,
+ [125253]=5,
+ [125254]=5,
+ [125255]=5,
+ [125256]=5,
+ [125257]=5,
+ [125258]=5,
+ [1042752]=5,
+}
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-ini']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local allocate=utilities.storage.allocate
+fonts=fonts or {}
+local fonts=fonts
+fonts.hashes={ identifiers=allocate() }
+fonts.tables=fonts.tables or {}
+fonts.helpers=fonts.helpers or {}
+fonts.tracers=fonts.tracers or {}
+fonts.specifiers=fonts.specifiers or {}
+fonts.analyzers={}
+fonts.readers={}
+fonts.definers={ methods={} }
+fonts.loggers={ register=function() end }
+if context then
+ fontloader=nil
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-con']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local next,tostring,tonumber,rawget=next,tostring,tonumber,rawget
+local format,match,lower,gsub,find=string.format,string.match,string.lower,string.gsub,string.find
+local sort,insert,concat=table.sort,table.insert,table.concat
+local sortedkeys,sortedhash,serialize,fastcopy=table.sortedkeys,table.sortedhash,table.serialize,table.fastcopy
+local derivetable=table.derive
+local ioflush=io.flush
+local trace_defining=false trackers.register("fonts.defining",function(v) trace_defining=v end)
+local trace_scaling=false trackers.register("fonts.scaling",function(v) trace_scaling=v end)
+local report_defining=logs.reporter("fonts","defining")
+local fonts=fonts
+local constructors=fonts.constructors or {}
+fonts.constructors=constructors
+local handlers=fonts.handlers or {}
+fonts.handlers=handlers
+local allocate=utilities.storage.allocate
+local setmetatableindex=table.setmetatableindex
+constructors.dontembed=allocate()
+constructors.autocleanup=true
+constructors.namemode="fullpath"
+constructors.version=1.01
+constructors.cache=containers.define("fonts","constructors",constructors.version,false)
+constructors.privateoffset=0xF0000
+constructors.cacheintex=true
+local designsizes=allocate()
+constructors.designsizes=designsizes
+local loadedfonts=allocate()
+constructors.loadedfonts=loadedfonts
+local factors={
+ pt=65536.0,
+ bp=65781.8,
+}
+function constructors.setfactor(f)
+ constructors.factor=factors[f or 'pt'] or factors.pt
+end
+constructors.setfactor()
+function constructors.scaled(scaledpoints,designsize)
+ if scaledpoints<0 then
+ local factor=constructors.factor
+ if designsize then
+ if designsize>factor then
+ return (- scaledpoints/1000)*designsize
+ else
+ return (- scaledpoints/1000)*designsize*factor
+ end
+ else
+ return (- scaledpoints/1000)*10*factor
+ end
+ else
+ return scaledpoints
+ end
+end
+function constructors.getprivate(tfmdata)
+ local properties=tfmdata.properties
+ local private=properties.private
+ properties.private=private+1
+ return private
+end
+function constructors.cleanuptable(tfmdata)
+ if constructors.autocleanup and tfmdata.properties.virtualized then
+ for k,v in next,tfmdata.characters do
+ if v.commands then v.commands=nil end
+ end
+ end
+end
+function constructors.calculatescale(tfmdata,scaledpoints)
+ local parameters=tfmdata.parameters
+ if scaledpoints<0 then
+ scaledpoints=(- scaledpoints/1000)*(tfmdata.designsize or parameters.designsize)
+ end
+ return scaledpoints,scaledpoints/(parameters.units or 1000)
+end
+local unscaled={
+ ScriptPercentScaleDown=true,
+ ScriptScriptPercentScaleDown=true,
+ RadicalDegreeBottomRaisePercent=true,
+ NoLimitSupFactor=true,
+ NoLimitSubFactor=true,
+}
+function constructors.assignmathparameters(target,original)
+ local mathparameters=original.mathparameters
+ if mathparameters and next(mathparameters) then
+ local targetparameters=target.parameters
+ local targetproperties=target.properties
+ local targetmathparameters={}
+ local factor=targetproperties.math_is_scaled and 1 or targetparameters.factor
+ for name,value in next,mathparameters do
+ if unscaled[name] then
+ targetmathparameters[name]=value
+ else
+ targetmathparameters[name]=value*factor
+ end
+ end
+ if not targetmathparameters.FractionDelimiterSize then
+ targetmathparameters.FractionDelimiterSize=1.01*targetparameters.size
+ end
+ if not mathparameters.FractionDelimiterDisplayStyleSize then
+ targetmathparameters.FractionDelimiterDisplayStyleSize=2.40*targetparameters.size
+ end
+ target.mathparameters=targetmathparameters
+ end
+end
+function constructors.beforecopyingcharacters(target,original)
+end
+function constructors.aftercopyingcharacters(target,original)
+end
+constructors.sharefonts=false
+constructors.nofsharedfonts=0
+local sharednames={}
+function constructors.trytosharefont(target,tfmdata)
+ if constructors.sharefonts then
+ local characters=target.characters
+ local n=1
+ local t={ target.psname }
+ local u=sortedkeys(characters)
+ for i=1,#u do
+ local k=u[i]
+ n=n+1;t[n]=k
+ n=n+1;t[n]=characters[k].index or k
+ end
+ local h=md5.HEX(concat(t," "))
+ local s=sharednames[h]
+ if s then
+ if trace_defining then
+ report_defining("font %a uses backend resources of font %a",target.fullname,s)
+ end
+ target.fullname=s
+ constructors.nofsharedfonts=constructors.nofsharedfonts+1
+ target.properties.sharedwith=s
+ else
+ sharednames[h]=target.fullname
+ end
+ end
+end
+function constructors.enhanceparameters(parameters)
+ local xheight=parameters.x_height
+ local quad=parameters.quad
+ local space=parameters.space
+ local stretch=parameters.space_stretch
+ local shrink=parameters.space_shrink
+ local extra=parameters.extra_space
+ local slant=parameters.slant
+ parameters.xheight=xheight
+ parameters.spacestretch=stretch
+ parameters.spaceshrink=shrink
+ parameters.extraspace=extra
+ parameters.em=quad
+ parameters.ex=xheight
+ parameters.slantperpoint=slant
+ parameters.spacing={
+ width=space,
+ stretch=stretch,
+ shrink=shrink,
+ extra=extra,
+ }
+end
+local function mathkerns(v,vdelta)
+ local k={}
+ for i=1,#v do
+ local entry=v[i]
+ local height=entry.height
+ local kern=entry.kern
+ k[i]={
+ height=height and vdelta*height or 0,
+ kern=kern and vdelta*kern or 0,
+ }
+ end
+ return k
+end
+local psfake=0
+local function fixedpsname(psname,fallback)
+ local usedname=psname
+ if psname and psname~="" then
+ if find(psname," ") then
+ usedname=gsub(psname,"[%s]+","-")
+ else
+ end
+ elseif not fallback or fallback=="" then
+ psfake=psfake+1
+ psname="fakename-"..psfake
+ else
+ psname=fallback
+ usedname=gsub(psname,"[^a-zA-Z0-9]+","-")
+ end
+ return usedname,psname~=usedname
+end
+function constructors.scale(tfmdata,specification)
+ local target={}
+ if tonumber(specification) then
+ specification={ size=specification }
+ end
+ target.specification=specification
+ local scaledpoints=specification.size
+ local relativeid=specification.relativeid
+ local properties=tfmdata.properties or {}
+ local goodies=tfmdata.goodies or {}
+ local resources=tfmdata.resources or {}
+ local descriptions=tfmdata.descriptions or {}
+ local characters=tfmdata.characters or {}
+ local changed=tfmdata.changed or {}
+ local shared=tfmdata.shared or {}
+ local parameters=tfmdata.parameters or {}
+ local mathparameters=tfmdata.mathparameters or {}
+ local targetcharacters={}
+ local targetdescriptions=derivetable(descriptions)
+ local targetparameters=derivetable(parameters)
+ local targetproperties=derivetable(properties)
+ local targetgoodies=goodies
+ target.characters=targetcharacters
+ target.descriptions=targetdescriptions
+ target.parameters=targetparameters
+ target.properties=targetproperties
+ target.goodies=targetgoodies
+ target.shared=shared
+ target.resources=resources
+ target.unscaled=tfmdata
+ local mathsize=tonumber(specification.mathsize) or 0
+ local textsize=tonumber(specification.textsize) or scaledpoints
+ local forcedsize=tonumber(parameters.mathsize ) or 0
+ local extrafactor=tonumber(specification.factor ) or 1
+ if (mathsize==2 or forcedsize==2) and parameters.scriptpercentage then
+ scaledpoints=parameters.scriptpercentage*textsize/100
+ elseif (mathsize==3 or forcedsize==3) and parameters.scriptscriptpercentage then
+ scaledpoints=parameters.scriptscriptpercentage*textsize/100
+ elseif forcedsize>1000 then
+ scaledpoints=forcedsize
+ else
+ end
+ targetparameters.mathsize=mathsize
+ targetparameters.textsize=textsize
+ targetparameters.forcedsize=forcedsize
+ targetparameters.extrafactor=extrafactor
+ local tounicode=fonts.mappings.tounicode
+ local defaultwidth=resources.defaultwidth or 0
+ local defaultheight=resources.defaultheight or 0
+ local defaultdepth=resources.defaultdepth or 0
+ local units=parameters.units or 1000
+ targetproperties.language=properties.language or "dflt"
+ targetproperties.script=properties.script or "dflt"
+ targetproperties.mode=properties.mode or "base"
+ local askedscaledpoints=scaledpoints
+ local scaledpoints,delta=constructors.calculatescale(tfmdata,scaledpoints,nil,specification)
+ local hdelta=delta
+ local vdelta=delta
+ target.designsize=parameters.designsize
+ target.units=units
+ target.units_per_em=units
+ local direction=properties.direction or tfmdata.direction or 0
+ target.direction=direction
+ properties.direction=direction
+ target.size=scaledpoints
+ target.encodingbytes=properties.encodingbytes or 1
+ target.embedding=properties.embedding or "subset"
+ target.tounicode=1
+ target.cidinfo=properties.cidinfo
+ target.format=properties.format
+ target.cache=constructors.cacheintex and "yes" or "renew"
+ local fontname=properties.fontname or tfmdata.fontname
+ local fullname=properties.fullname or tfmdata.fullname
+ local filename=properties.filename or tfmdata.filename
+ local psname=properties.psname or tfmdata.psname
+ local name=properties.name or tfmdata.name
+ local psname,psfixed=fixedpsname(psname,fontname or fullname or file.nameonly(filename))
+ target.fontname=fontname
+ target.fullname=fullname
+ target.filename=filename
+ target.psname=psname
+ target.name=name
+ properties.fontname=fontname
+ properties.fullname=fullname
+ properties.filename=filename
+ properties.psname=psname
+ properties.name=name
+ local expansion=parameters.expansion
+ if expansion then
+ target.stretch=expansion.stretch
+ target.shrink=expansion.shrink
+ target.step=expansion.step
+ end
+ local extendfactor=parameters.extendfactor or 0
+ if extendfactor~=0 and extendfactor~=1 then
+ hdelta=hdelta*extendfactor
+ target.extend=extendfactor*1000
+ else
+ target.extend=1000
+ end
+ local slantfactor=parameters.slantfactor or 0
+ if slantfactor~=0 then
+ target.slant=slantfactor*1000
+ else
+ target.slant=0
+ end
+ targetparameters.factor=delta
+ targetparameters.hfactor=hdelta
+ targetparameters.vfactor=vdelta
+ targetparameters.size=scaledpoints
+ targetparameters.units=units
+ targetparameters.scaledpoints=askedscaledpoints
+ local isvirtual=properties.virtualized or tfmdata.type=="virtual"
+ local hasquality=parameters.expansion or parameters.protrusion
+ local hasitalics=properties.hasitalics
+ local autoitalicamount=properties.autoitalicamount
+ local stackmath=not properties.nostackmath
+ local nonames=properties.noglyphnames
+ local haskerns=properties.haskerns or properties.mode=="base"
+ local hasligatures=properties.hasligatures or properties.mode=="base"
+ local realdimensions=properties.realdimensions
+ local writingmode=properties.writingmode or "horizontal"
+ local identity=properties.identity or "horizontal"
+ local vfonts=target.fonts
+ if vfonts and #vfonts>0 then
+ target.fonts=fastcopy(vfonts)
+ elseif isvirtual then
+ target.fonts={ { id=0 } }
+ end
+ if changed and not next(changed) then
+ changed=false
+ end
+ target.type=isvirtual and "virtual" or "real"
+ target.writingmode=writingmode=="vertical" and "vertical" or "horizontal"
+ target.identity=identity=="vertical" and "vertical" or "horizontal"
+ target.postprocessors=tfmdata.postprocessors
+ local targetslant=(parameters.slant or parameters[1] or 0)*factors.pt
+ local targetspace=(parameters.space or parameters[2] or 0)*hdelta
+ local targetspace_stretch=(parameters.space_stretch or parameters[3] or 0)*hdelta
+ local targetspace_shrink=(parameters.space_shrink or parameters[4] or 0)*hdelta
+ local targetx_height=(parameters.x_height or parameters[5] or 0)*vdelta
+ local targetquad=(parameters.quad or parameters[6] or 0)*hdelta
+ local targetextra_space=(parameters.extra_space or parameters[7] or 0)*hdelta
+ targetparameters.slant=targetslant
+ targetparameters.space=targetspace
+ targetparameters.space_stretch=targetspace_stretch
+ targetparameters.space_shrink=targetspace_shrink
+ targetparameters.x_height=targetx_height
+ targetparameters.quad=targetquad
+ targetparameters.extra_space=targetextra_space
+ local ascender=parameters.ascender
+ if ascender then
+ targetparameters.ascender=delta*ascender
+ end
+ local descender=parameters.descender
+ if descender then
+ targetparameters.descender=delta*descender
+ end
+ constructors.enhanceparameters(targetparameters)
+ local protrusionfactor=(targetquad~=0 and 1000/targetquad) or 0
+ local scaledwidth=defaultwidth*hdelta
+ local scaledheight=defaultheight*vdelta
+ local scaleddepth=defaultdepth*vdelta
+ local hasmath=(properties.hasmath or next(mathparameters)) and true
+ if hasmath then
+ constructors.assignmathparameters(target,tfmdata)
+ properties.hasmath=true
+ target.nomath=false
+ target.MathConstants=target.mathparameters
+ else
+ properties.hasmath=false
+ target.nomath=true
+ target.mathparameters=nil
+ end
+ if hasmath then
+ local mathitalics=properties.mathitalics
+ if mathitalics==false then
+ if trace_defining then
+ report_defining("%s italics %s for font %a, fullname %a, filename %a","math",hasitalics and "ignored" or "disabled",name,fullname,filename)
+ end
+ hasitalics=false
+ autoitalicamount=false
+ end
+ else
+ local textitalics=properties.textitalics
+ if textitalics==false then
+ if trace_defining then
+ report_defining("%s italics %s for font %a, fullname %a, filename %a","text",hasitalics and "ignored" or "disabled",name,fullname,filename)
+ end
+ hasitalics=false
+ autoitalicamount=false
+ end
+ end
+ if trace_defining then
+ report_defining("defining tfm, name %a, fullname %a, filename %a, %spsname %a, hscale %a, vscale %a, math %a, italics %a",
+ name,fullname,filename,psfixed and "(fixed) " or "",psname,hdelta,vdelta,
+ hasmath and "enabled" or "disabled",hasitalics and "enabled" or "disabled")
+ end
+ constructors.beforecopyingcharacters(target,tfmdata)
+ local sharedkerns={}
+ for unicode,character in next,characters do
+ local chr,description,index
+ if changed then
+ local c=changed[unicode]
+ if c and c~=unicode then
+ if c then
+ description=descriptions[c] or descriptions[unicode] or character
+ character=characters[c] or character
+ index=description.index or c
+ else
+ description=descriptions[unicode] or character
+ index=description.index or unicode
+ end
+ else
+ description=descriptions[unicode] or character
+ index=description.index or unicode
+ end
+ else
+ description=descriptions[unicode] or character
+ index=description.index or unicode
+ end
+ local width=description.width
+ local height=description.height
+ local depth=description.depth
+ if realdimensions then
+ if not height or height==0 then
+ local bb=description.boundingbox
+ local ht=bb[4]
+ if ht~=0 then
+ height=ht
+ end
+ if not depth or depth==0 then
+ local dp=-bb[2]
+ if dp~=0 then
+ depth=dp
+ end
+ end
+ elseif not depth or depth==0 then
+ local dp=-description.boundingbox[2]
+ if dp~=0 then
+ depth=dp
+ end
+ end
+ end
+ if width then width=hdelta*width else width=scaledwidth end
+ if height then height=vdelta*height else height=scaledheight end
+ if depth and depth~=0 then
+ depth=delta*depth
+ if nonames then
+ chr={
+ index=index,
+ height=height,
+ depth=depth,
+ width=width,
+ }
+ else
+ chr={
+ name=description.name,
+ index=index,
+ height=height,
+ depth=depth,
+ width=width,
+ }
+ end
+ else
+ if nonames then
+ chr={
+ index=index,
+ height=height,
+ width=width,
+ }
+ else
+ chr={
+ name=description.name,
+ index=index,
+ height=height,
+ width=width,
+ }
+ end
+ end
+ local isunicode=description.unicode
+ if isunicode then
+ chr.unicode=isunicode
+ chr.tounicode=tounicode(isunicode)
+ end
+ if hasquality then
+ local ve=character.expansion_factor
+ if ve then
+ chr.expansion_factor=ve*1000
+ end
+ local vl=character.left_protruding
+ if vl then
+ chr.left_protruding=protrusionfactor*width*vl
+ end
+ local vr=character.right_protruding
+ if vr then
+ chr.right_protruding=protrusionfactor*width*vr
+ end
+ end
+ if hasmath then
+ local vn=character.next
+ if vn then
+ chr.next=vn
+ else
+ local vv=character.vert_variants
+ if vv then
+ local t={}
+ for i=1,#vv do
+ local vvi=vv[i]
+ t[i]={
+ ["start"]=(vvi["start"] or 0)*vdelta,
+ ["end"]=(vvi["end"] or 0)*vdelta,
+ ["advance"]=(vvi["advance"] or 0)*vdelta,
+ ["extender"]=vvi["extender"],
+ ["glyph"]=vvi["glyph"],
+ }
+ end
+ chr.vert_variants=t
+ else
+ local hv=character.horiz_variants
+ if hv then
+ local t={}
+ for i=1,#hv do
+ local hvi=hv[i]
+ t[i]={
+ ["start"]=(hvi["start"] or 0)*hdelta,
+ ["end"]=(hvi["end"] or 0)*hdelta,
+ ["advance"]=(hvi["advance"] or 0)*hdelta,
+ ["extender"]=hvi["extender"],
+ ["glyph"]=hvi["glyph"],
+ }
+ end
+ chr.horiz_variants=t
+ end
+ end
+ end
+ local vi=character.vert_italic
+ if vi and vi~=0 then
+ chr.vert_italic=vi*hdelta
+ end
+ local va=character.accent
+ if va then
+ chr.top_accent=vdelta*va
+ end
+ if stackmath then
+ local mk=character.mathkerns
+ if mk then
+ local tr,tl,br,bl=mk.topright,mk.topleft,mk.bottomright,mk.bottomleft
+ chr.mathkern={
+ top_right=tr and mathkerns(tr,vdelta) or nil,
+ top_left=tl and mathkerns(tl,vdelta) or nil,
+ bottom_right=br and mathkerns(br,vdelta) or nil,
+ bottom_left=bl and mathkerns(bl,vdelta) or nil,
+ }
+ end
+ end
+ if hasitalics then
+ local vi=character.italic
+ if vi and vi~=0 then
+ chr.italic=vi*hdelta
+ end
+ end
+ elseif autoitalicamount then
+ local vi=description.italic
+ if not vi then
+ local bb=description.boundingbox
+ if bb then
+ local vi=bb[3]-description.width+autoitalicamount
+ if vi>0 then
+ chr.italic=vi*hdelta
+ end
+ else
+ end
+ elseif vi~=0 then
+ chr.italic=vi*hdelta
+ end
+ elseif hasitalics then
+ local vi=character.italic
+ if vi and vi~=0 then
+ chr.italic=vi*hdelta
+ end
+ end
+ if haskerns then
+ local vk=character.kerns
+ if vk then
+ local s=sharedkerns[vk]
+ if not s then
+ s={}
+ for k,v in next,vk do s[k]=v*hdelta end
+ sharedkerns[vk]=s
+ end
+ chr.kerns=s
+ end
+ end
+ if hasligatures then
+ local vl=character.ligatures
+ if vl then
+ if true then
+ chr.ligatures=vl
+ else
+ local tt={}
+ for i,l in next,vl do
+ tt[i]=l
+ end
+ chr.ligatures=tt
+ end
+ end
+ end
+ if isvirtual then
+ local vc=character.commands
+ if vc then
+ local ok=false
+ for i=1,#vc do
+ local key=vc[i][1]
+ if key=="right" or key=="down" then
+ ok=true
+ break
+ end
+ end
+ if ok then
+ local tt={}
+ for i=1,#vc do
+ local ivc=vc[i]
+ local key=ivc[1]
+ if key=="right" then
+ tt[i]={ key,ivc[2]*hdelta }
+ elseif key=="down" then
+ tt[i]={ key,ivc[2]*vdelta }
+ elseif key=="rule" then
+ tt[i]={ key,ivc[2]*vdelta,ivc[3]*hdelta }
+ else
+ tt[i]=ivc
+ end
+ end
+ chr.commands=tt
+ else
+ chr.commands=vc
+ end
+ chr.index=nil
+ end
+ end
+ targetcharacters[unicode]=chr
+ end
+ properties.setitalics=hasitalics
+ constructors.aftercopyingcharacters(target,tfmdata)
+ constructors.trytosharefont(target,tfmdata)
+ local vfonts=target.fonts
+ if isvirtual then
+ if not vfonts or #vfonts==0 then
+ target.fonts={ { id=0 } }
+ end
+ elseif vfonts then
+ properties.virtualized=true
+ target.type="virtual"
+ if #vfonts==0 then
+ target.fonts={ { id=0 } }
+ end
+ end
+ return target
+end
+function constructors.finalize(tfmdata)
+ if tfmdata.properties and tfmdata.properties.finalized then
+ return
+ end
+ if not tfmdata.characters then
+ return nil
+ end
+ if not tfmdata.goodies then
+ tfmdata.goodies={}
+ end
+ local parameters=tfmdata.parameters
+ if not parameters then
+ return nil
+ end
+ if not parameters.expansion then
+ parameters.expansion={
+ stretch=tfmdata.stretch or 0,
+ shrink=tfmdata.shrink or 0,
+ step=tfmdata.step or 0,
+ }
+ end
+ if not parameters.size then
+ parameters.size=tfmdata.size
+ end
+ if not parameters.extendfactor then
+ parameters.extendfactor=tfmdata.extend or 0
+ end
+ if not parameters.slantfactor then
+ parameters.slantfactor=tfmdata.slant or 0
+ end
+ local designsize=parameters.designsize
+ if designsize then
+ parameters.minsize=tfmdata.minsize or designsize
+ parameters.maxsize=tfmdata.maxsize or designsize
+ else
+ designsize=factors.pt*10
+ parameters.designsize=designsize
+ parameters.minsize=designsize
+ parameters.maxsize=designsize
+ end
+ parameters.minsize=tfmdata.minsize or parameters.designsize
+ parameters.maxsize=tfmdata.maxsize or parameters.designsize
+ if not parameters.units then
+ parameters.units=tfmdata.units or tfmdata.units_per_em or 1000
+ end
+ if not tfmdata.descriptions then
+ local descriptions={}
+ setmetatableindex(descriptions,function(t,k) local v={} t[k]=v return v end)
+ tfmdata.descriptions=descriptions
+ end
+ local properties=tfmdata.properties
+ if not properties then
+ properties={}
+ tfmdata.properties=properties
+ end
+ if not properties.virtualized then
+ properties.virtualized=tfmdata.type=="virtual"
+ end
+ if not tfmdata.properties then
+ tfmdata.properties={
+ fontname=tfmdata.fontname,
+ filename=tfmdata.filename,
+ fullname=tfmdata.fullname,
+ name=tfmdata.name,
+ psname=tfmdata.psname,
+ encodingbytes=tfmdata.encodingbytes or 1,
+ embedding=tfmdata.embedding or "subset",
+ tounicode=tfmdata.tounicode or 1,
+ cidinfo=tfmdata.cidinfo or nil,
+ format=tfmdata.format or "type1",
+ direction=tfmdata.direction or 0,
+ writingmode=tfmdata.writingmode or "horizontal",
+ identity=tfmdata.identity or "horizontal",
+ }
+ end
+ if not tfmdata.resources then
+ tfmdata.resources={}
+ end
+ if not tfmdata.shared then
+ tfmdata.shared={}
+ end
+ if not properties.hasmath then
+ properties.hasmath=not tfmdata.nomath
+ end
+ tfmdata.MathConstants=nil
+ tfmdata.postprocessors=nil
+ tfmdata.fontname=nil
+ tfmdata.filename=nil
+ tfmdata.fullname=nil
+ tfmdata.name=nil
+ tfmdata.psname=nil
+ tfmdata.encodingbytes=nil
+ tfmdata.embedding=nil
+ tfmdata.tounicode=nil
+ tfmdata.cidinfo=nil
+ tfmdata.format=nil
+ tfmdata.direction=nil
+ tfmdata.type=nil
+ tfmdata.nomath=nil
+ tfmdata.designsize=nil
+ tfmdata.size=nil
+ tfmdata.stretch=nil
+ tfmdata.shrink=nil
+ tfmdata.step=nil
+ tfmdata.extend=nil
+ tfmdata.slant=nil
+ tfmdata.units=nil
+ tfmdata.units_per_em=nil
+ tfmdata.cache=nil
+ properties.finalized=true
+ return tfmdata
+end
+local hashmethods={}
+constructors.hashmethods=hashmethods
+function constructors.hashfeatures(specification)
+ local features=specification.features
+ if features then
+ local t,n={},0
+ for category,list in sortedhash(features) do
+ if next(list) then
+ local hasher=hashmethods[category]
+ if hasher then
+ local hash=hasher(list)
+ if hash then
+ n=n+1
+ t[n]=category..":"..hash
+ end
+ end
+ end
+ end
+ if n>0 then
+ return concat(t," & ")
+ end
+ end
+ return "unknown"
+end
+hashmethods.normal=function(list)
+ local s={}
+ local n=0
+ for k,v in next,list do
+ if not k then
+ elseif k=="number" or k=="features" then
+ else
+ n=n+1
+ s[n]=k..'='..tostring(v)
+ end
+ end
+ if n>0 then
+ sort(s)
+ return concat(s,"+")
+ end
+end
+function constructors.hashinstance(specification,force)
+ local hash,size,fallbacks=specification.hash,specification.size,specification.fallbacks
+ if force or not hash then
+ hash=constructors.hashfeatures(specification)
+ specification.hash=hash
+ end
+ if size<1000 and designsizes[hash] then
+ size=math.round(constructors.scaled(size,designsizes[hash]))
+ specification.size=size
+ end
+ if fallbacks then
+ return hash..' @ '..tostring(size)..' @ '..fallbacks
+ else
+ return hash..' @ '..tostring(size)
+ end
+end
+function constructors.setname(tfmdata,specification)
+ if constructors.namemode=="specification" then
+ local specname=specification.specification
+ if specname then
+ tfmdata.properties.name=specname
+ if trace_defining then
+ report_otf("overloaded fontname %a",specname)
+ end
+ end
+ end
+end
+function constructors.checkedfilename(data)
+ local foundfilename=data.foundfilename
+ if not foundfilename then
+ local askedfilename=data.filename or ""
+ if askedfilename~="" then
+ askedfilename=resolvers.resolve(askedfilename)
+ foundfilename=resolvers.findbinfile(askedfilename,"") or ""
+ if foundfilename=="" then
+ report_defining("source file %a is not found",askedfilename)
+ foundfilename=resolvers.findbinfile(file.basename(askedfilename),"") or ""
+ if foundfilename~="" then
+ report_defining("using source file %a due to cache mismatch",foundfilename)
+ end
+ end
+ end
+ data.foundfilename=foundfilename
+ end
+ return foundfilename
+end
+local formats=allocate()
+fonts.formats=formats
+setmetatableindex(formats,function(t,k)
+ local l=lower(k)
+ if rawget(t,k) then
+ t[k]=l
+ return l
+ end
+ return rawget(t,file.suffix(l))
+end)
+do
+ local function setindeed(mode,source,target,group,name,position)
+ local action=source[mode]
+ if not action then
+ return
+ end
+ local t=target[mode]
+ if not t then
+ report_defining("fatal error in setting feature %a, group %a, mode %a",name,group,mode)
+ os.exit()
+ elseif position then
+ insert(t,position,{ name=name,action=action })
+ else
+ for i=1,#t do
+ local ti=t[i]
+ if ti.name==name then
+ ti.action=action
+ return
+ end
+ end
+ insert(t,{ name=name,action=action })
+ end
+ end
+ local function set(group,name,target,source)
+ target=target[group]
+ if not target then
+ report_defining("fatal target error in setting feature %a, group %a",name,group)
+ os.exit()
+ end
+ local source=source[group]
+ if not source then
+ report_defining("fatal source error in setting feature %a, group %a",name,group)
+ os.exit()
+ end
+ local position=source.position
+ setindeed("node",source,target,group,name,position)
+ setindeed("base",source,target,group,name,position)
+ setindeed("plug",source,target,group,name,position)
+ end
+ local function register(where,specification)
+ local name=specification.name
+ if name and name~="" then
+ local default=specification.default
+ local description=specification.description
+ local initializers=specification.initializers
+ local processors=specification.processors
+ local manipulators=specification.manipulators
+ local modechecker=specification.modechecker
+ if default then
+ where.defaults[name]=default
+ end
+ if description and description~="" then
+ where.descriptions[name]=description
+ end
+ if initializers then
+ set('initializers',name,where,specification)
+ end
+ if processors then
+ set('processors',name,where,specification)
+ end
+ if manipulators then
+ set('manipulators',name,where,specification)
+ end
+ if modechecker then
+ where.modechecker=modechecker
+ end
+ end
+ end
+ constructors.registerfeature=register
+ function constructors.getfeatureaction(what,where,mode,name)
+ what=handlers[what].features
+ if what then
+ where=what[where]
+ if where then
+ mode=where[mode]
+ if mode then
+ for i=1,#mode do
+ local m=mode[i]
+ if m.name==name then
+ return m.action
+ end
+ end
+ end
+ end
+ end
+ end
+ local newfeatures={}
+ constructors.newfeatures=newfeatures
+ constructors.features=newfeatures
+ local function setnewfeatures(what)
+ local handler=handlers[what]
+ local features=handler.features
+ if not features then
+ local tables=handler.tables
+ local statistics=handler.statistics
+ features=allocate {
+ defaults={},
+ descriptions=tables and tables.features or {},
+ used=statistics and statistics.usedfeatures or {},
+ initializers={ base={},node={},plug={} },
+ processors={ base={},node={},plug={} },
+ manipulators={ base={},node={},plug={} },
+ }
+ features.register=function(specification) return register(features,specification) end
+ handler.features=features
+ end
+ return features
+ end
+ setmetatable(newfeatures,{
+ __call=function(t,k) local v=t[k] return v end,
+ __index=function(t,k) local v=setnewfeatures(k) t[k]=v return v end,
+ })
+end
+do
+ local newhandler={}
+ constructors.handlers=newhandler
+ constructors.newhandler=newhandler
+ local function setnewhandler(what)
+ local handler=handlers[what]
+ if not handler then
+ handler={}
+ handlers[what]=handler
+ end
+ return handler
+ end
+ setmetatable(newhandler,{
+ __call=function(t,k) local v=t[k] return v end,
+ __index=function(t,k) local v=setnewhandler(k) t[k]=v return v end,
+ })
+end
+do
+ local newenhancer={}
+ constructors.enhancers=newenhancer
+ constructors.newenhancer=newenhancer
+ local function setnewenhancer(format)
+ local handler=handlers[format]
+ local enhancers=handler.enhancers
+ if not enhancers then
+ local actions=allocate()
+ local before=allocate()
+ local after=allocate()
+ local order=allocate()
+ local known={}
+ local nofsteps=0
+ local patches={ before=before,after=after }
+ local trace=false
+ local report=logs.reporter("fonts",format.." enhancing")
+ trackers.register(format..".loading",function(v) trace=v end)
+ local function enhance(name,data,filename,raw)
+ local enhancer=actions[name]
+ if enhancer then
+ if trace then
+ report("apply enhancement %a to file %a",name,filename)
+ ioflush()
+ end
+ enhancer(data,filename,raw)
+ else
+ end
+ end
+ local function apply(data,filename,raw)
+ local basename=file.basename(lower(filename))
+ if trace then
+ report("%s enhancing file %a","start",filename)
+ end
+ ioflush()
+ for e=1,nofsteps do
+ local enhancer=order[e]
+ local b=before[enhancer]
+ if b then
+ for pattern,action in next,b do
+ if find(basename,pattern) then
+ action(data,filename,raw)
+ end
+ end
+ end
+ enhance(enhancer,data,filename,raw)
+ local a=after[enhancer]
+ if a then
+ for pattern,action in next,a do
+ if find(basename,pattern) then
+ action(data,filename,raw)
+ end
+ end
+ end
+ ioflush()
+ end
+ if trace then
+ report("%s enhancing file %a","stop",filename)
+ end
+ ioflush()
+ end
+ local function register(what,action)
+ if action then
+ if actions[what] then
+ else
+ nofsteps=nofsteps+1
+ order[nofsteps]=what
+ known[what]=nofsteps
+ end
+ actions[what]=action
+ else
+ report("bad enhancer %a",what)
+ end
+ end
+ local function patch(what,where,pattern,action)
+ local pw=patches[what]
+ if pw then
+ local ww=pw[where]
+ if ww then
+ ww[pattern]=action
+ else
+ pw[where]={ [pattern]=action }
+ if not known[where] then
+ nofsteps=nofsteps+1
+ order[nofsteps]=where
+ known[where]=nofsteps
+ end
+ end
+ end
+ end
+ enhancers={
+ register=register,
+ apply=apply,
+ patch=patch,
+ report=report,
+ patches={
+ register=patch,
+ report=report,
+ },
+ }
+ handler.enhancers=enhancers
+ end
+ return enhancers
+ end
+ setmetatable(newenhancer,{
+ __call=function(t,k) local v=t[k] return v end,
+ __index=function(t,k) local v=setnewenhancer(k) t[k]=v return v end,
+ })
+end
+function constructors.checkedfeatures(what,features)
+ local defaults=handlers[what].features.defaults
+ if features and next(features) then
+ features=fastcopy(features)
+ for key,value in next,defaults do
+ if features[key]==nil then
+ features[key]=value
+ end
+ end
+ return features
+ else
+ return fastcopy(defaults)
+ end
+end
+function constructors.initializefeatures(what,tfmdata,features,trace,report)
+ if features and next(features) then
+ local properties=tfmdata.properties or {}
+ local whathandler=handlers[what]
+ local whatfeatures=whathandler.features
+ local whatmodechecker=whatfeatures.modechecker
+ local mode=properties.mode or (whatmodechecker and whatmodechecker(tfmdata,features,features.mode)) or features.mode or "base"
+ properties.mode=mode
+ features.mode=mode
+ local done={}
+ while true do
+ local redo=false
+ local initializers=whatfeatures.initializers[mode]
+ if initializers then
+ for i=1,#initializers do
+ local step=initializers[i]
+ local feature=step.name
+ local value=features[feature]
+ if not value then
+ elseif done[feature] then
+ else
+ local action=step.action
+ if trace then
+ report("initializing feature %a to %a for mode %a for font %a",feature,
+ value,mode,tfmdata.properties.fullname)
+ end
+ action(tfmdata,value,features)
+ if mode~=properties.mode or mode~=features.mode then
+ if whatmodechecker then
+ properties.mode=whatmodechecker(tfmdata,features,properties.mode)
+ features.mode=properties.mode
+ end
+ if mode~=properties.mode then
+ mode=properties.mode
+ redo=true
+ end
+ end
+ done[feature]=true
+ end
+ if redo then
+ break
+ end
+ end
+ if not redo then
+ break
+ end
+ else
+ break
+ end
+ end
+ properties.mode=mode
+ return true
+ else
+ return false
+ end
+end
+function constructors.collectprocessors(what,tfmdata,features,trace,report)
+ local processes,nofprocesses={},0
+ if features and next(features) then
+ local properties=tfmdata.properties
+ local whathandler=handlers[what]
+ local whatfeatures=whathandler.features
+ local whatprocessors=whatfeatures.processors
+ local mode=properties.mode
+ local processors=whatprocessors[mode]
+ if processors then
+ for i=1,#processors do
+ local step=processors[i]
+ local feature=step.name
+ if features[feature] then
+ local action=step.action
+ if trace then
+ report("installing feature processor %a for mode %a for font %a",feature,mode,tfmdata.properties.fullname)
+ end
+ if action then
+ nofprocesses=nofprocesses+1
+ processes[nofprocesses]=action
+ end
+ end
+ end
+ elseif trace then
+ report("no feature processors for mode %a for font %a",mode,properties.fullname)
+ end
+ end
+ return processes
+end
+function constructors.applymanipulators(what,tfmdata,features,trace,report)
+ if features and next(features) then
+ local properties=tfmdata.properties
+ local whathandler=handlers[what]
+ local whatfeatures=whathandler.features
+ local whatmanipulators=whatfeatures.manipulators
+ local mode=properties.mode
+ local manipulators=whatmanipulators[mode]
+ if manipulators then
+ for i=1,#manipulators do
+ local step=manipulators[i]
+ local feature=step.name
+ local value=features[feature]
+ if value then
+ local action=step.action
+ if trace then
+ report("applying feature manipulator %a for mode %a for font %a",feature,mode,properties.fullname)
+ end
+ if action then
+ action(tfmdata,feature,value)
+ end
+ end
+ end
+ end
+ end
+end
+function constructors.addcoreunicodes(unicodes)
+ if not unicodes then
+ unicodes={}
+ end
+ unicodes.space=0x0020
+ unicodes.hyphen=0x002D
+ unicodes.zwj=0x200D
+ unicodes.zwnj=0x200C
+ return unicodes
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['luatex-font-enc']={
+ version=1.001,
+ comment="companion to luatex-*.tex",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+if context then
+ texio.write_nl("fatal error: this module is not for context")
+ os.exit()
+end
+local fonts=fonts
+local encodings={}
+fonts.encodings=encodings
+encodings.agl={}
+encodings.known={}
+setmetatable(encodings.agl,{ __index=function(t,k)
+ if k=="unicodes" then
+ texio.write(" <loading (extended) adobe glyph list>")
+ local unicodes=dofile(resolvers.findfile("font-age.lua"))
+ encodings.agl={ unicodes=unicodes }
+ return unicodes
+ else
+ return nil
+ end
+end })
+encodings.cache=containers.define("fonts","enc",encodings.version,true)
+function encodings.load(filename)
+ local name=file.removesuffix(filename)
+ local data=containers.read(encodings.cache,name)
+ if data then
+ return data
+ end
+ local vector,tag,hash,unicodes={},"",{},{}
+ local foundname=resolvers.findfile(filename,'enc')
+ if foundname and foundname~="" then
+ local ok,encoding,size=resolvers.loadbinfile(foundname)
+ if ok and encoding then
+ encoding=string.gsub(encoding,"%%(.-)\n","")
+ local unicoding=encodings.agl.unicodes
+ local tag,vec=string.match(encoding,"/(%w+)%s*%[(.*)%]%s*def")
+ local i=0
+ for ch in string.gmatch(vec,"/([%a%d%.]+)") do
+ if ch~=".notdef" then
+ vector[i]=ch
+ if not hash[ch] then
+ hash[ch]=i
+ else
+ end
+ local u=unicoding[ch]
+ if u then
+ unicodes[u]=i
+ end
+ end
+ i=i+1
+ end
+ end
+ end
+ local data={
+ name=name,
+ tag=tag,
+ vector=vector,
+ hash=hash,
+ unicodes=unicodes
+ }
+ return containers.write(encodings.cache,name,data)
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-cid']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local format,match,lower=string.format,string.match,string.lower
+local tonumber=tonumber
+local P,S,R,C,V,lpegmatch=lpeg.P,lpeg.S,lpeg.R,lpeg.C,lpeg.V,lpeg.match
+local fonts,logs,trackers=fonts,logs,trackers
+local trace_loading=false trackers.register("otf.loading",function(v) trace_loading=v end)
+local report_otf=logs.reporter("fonts","otf loading")
+local cid={}
+fonts.cid=cid
+local cidmap={}
+local cidmax=10
+local number=C(R("09","af","AF")^1)
+local space=S(" \n\r\t")
+local spaces=space^0
+local period=P(".")
+local periods=period*period
+local name=P("/")*C((1-space)^1)
+local unicodes,names={},{}
+local function do_one(a,b)
+ unicodes[tonumber(a)]=tonumber(b,16)
+end
+local function do_range(a,b,c)
+ c=tonumber(c,16)
+ for i=tonumber(a),tonumber(b) do
+ unicodes[i]=c
+ c=c+1
+ end
+end
+local function do_name(a,b)
+ names[tonumber(a)]=b
+end
+local grammar=P { "start",
+ start=number*spaces*number*V("series"),
+ series=(spaces*(V("one")+V("range")+V("named")))^1,
+ one=(number*spaces*number)/do_one,
+ range=(number*periods*number*spaces*number)/do_range,
+ named=(number*spaces*name)/do_name
+}
+local function loadcidfile(filename)
+ local data=io.loaddata(filename)
+ if data then
+ unicodes,names={},{}
+ lpegmatch(grammar,data)
+ local supplement,registry,ordering=match(filename,"^(.-)%-(.-)%-()%.(.-)$")
+ return {
+ supplement=supplement,
+ registry=registry,
+ ordering=ordering,
+ filename=filename,
+ unicodes=unicodes,
+ names=names,
+ }
+ end
+end
+cid.loadfile=loadcidfile
+local template="%s-%s-%s.cidmap"
+local function locate(registry,ordering,supplement)
+ local filename=format(template,registry,ordering,supplement)
+ local hashname=lower(filename)
+ local found=cidmap[hashname]
+ if not found then
+ if trace_loading then
+ report_otf("checking cidmap, registry %a, ordering %a, supplement %a, filename %a",registry,ordering,supplement,filename)
+ end
+ local fullname=resolvers.findfile(filename,'cid') or ""
+ if fullname~="" then
+ found=loadcidfile(fullname)
+ if found then
+ if trace_loading then
+ report_otf("using cidmap file %a",filename)
+ end
+ cidmap[hashname]=found
+ found.usedname=file.basename(filename)
+ end
+ end
+ end
+ return found
+end
+function cid.getmap(specification)
+ if not specification then
+ report_otf("invalid cidinfo specification, table expected")
+ return
+ end
+ local registry=specification.registry
+ local ordering=specification.ordering
+ local supplement=specification.supplement
+ local filename=format(registry,ordering,supplement)
+ local lowername=lower(filename)
+ local found=cidmap[lowername]
+ if found then
+ return found
+ end
+ if ordering=="Identity" then
+ local found={
+ supplement=supplement,
+ registry=registry,
+ ordering=ordering,
+ filename=filename,
+ unicodes={},
+ names={},
+ }
+ cidmap[lowername]=found
+ return found
+ end
+ if trace_loading then
+ report_otf("cidmap needed, registry %a, ordering %a, supplement %a",registry,ordering,supplement)
+ end
+ found=locate(registry,ordering,supplement)
+ if not found then
+ local supnum=tonumber(supplement)
+ local cidnum=nil
+ if supnum<cidmax then
+ for s=supnum+1,cidmax do
+ local c=locate(registry,ordering,s)
+ if c then
+ found,cidnum=c,s
+ break
+ end
+ end
+ end
+ if not found and supnum>0 then
+ for s=supnum-1,0,-1 do
+ local c=locate(registry,ordering,s)
+ if c then
+ found,cidnum=c,s
+ break
+ end
+ end
+ end
+ registry=lower(registry)
+ ordering=lower(ordering)
+ if found and cidnum>0 then
+ for s=0,cidnum-1 do
+ local filename=format(template,registry,ordering,s)
+ if not cidmap[filename] then
+ cidmap[filename]=found
+ end
+ end
+ end
+ end
+ return found
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-map']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local tonumber,next,type=tonumber,next,type
+local match,format,find,concat,gsub,lower=string.match,string.format,string.find,table.concat,string.gsub,string.lower
+local P,R,S,C,Ct,Cc,lpegmatch=lpeg.P,lpeg.R,lpeg.S,lpeg.C,lpeg.Ct,lpeg.Cc,lpeg.match
+local floor=math.floor
+local formatters=string.formatters
+local sortedhash,sortedkeys=table.sortedhash,table.sortedkeys
+local trace_loading=false trackers.register("fonts.loading",function(v) trace_loading=v end)
+local trace_mapping=false trackers.register("fonts.mapping",function(v) trace_mapping=v end)
+local report_fonts=logs.reporter("fonts","loading")
+local force_ligatures=false directives.register("fonts.mapping.forceligatures",function(v) force_ligatures=v end)
+local fonts=fonts or {}
+local mappings=fonts.mappings or {}
+fonts.mappings=mappings
+local allocate=utilities.storage.allocate
+local hex=R("AF","af","09")
+local hexfour=(hex*hex*hex^-2)/function(s) return tonumber(s,16) end
+local hexsix=(hex*hex*hex^-4)/function(s) return tonumber(s,16) end
+local dec=(R("09")^1)/tonumber
+local period=P(".")
+local unicode=(P("uni")+P("UNI"))*(hexfour*(period+P(-1))*Cc(false)+Ct(hexfour^1)*Cc(true))
+local ucode=(P("u")+P("U") )*(hexsix*(period+P(-1))*Cc(false)+Ct(hexsix^1)*Cc(true))
+local index=P("index")*dec*Cc(false)
+local parser=unicode+ucode+index
+local parsers={}
+local function makenameparser(str)
+ if not str or str=="" then
+ return parser
+ else
+ local p=parsers[str]
+ if not p then
+ p=P(str)*period*dec*Cc(false)
+ parsers[str]=p
+ end
+ return p
+ end
+end
+local f_single=formatters["%04X"]
+local f_double=formatters["%04X%04X"]
+local function tounicode16(unicode)
+ if unicode<0xD7FF or (unicode>0xDFFF and unicode<=0xFFFF) then
+ return f_single(unicode)
+ else
+ unicode=unicode-0x10000
+ return f_double(floor(unicode/1024)+0xD800,unicode%1024+0xDC00)
+ end
+end
+local function tounicode16sequence(unicodes)
+ local t={}
+ for l=1,#unicodes do
+ local u=unicodes[l]
+ if u<0xD7FF or (u>0xDFFF and u<=0xFFFF) then
+ t[l]=f_single(u)
+ else
+ u=u-0x10000
+ t[l]=f_double(floor(u/1024)+0xD800,u%1024+0xDC00)
+ end
+ end
+ return concat(t)
+end
+local function tounicode(unicode,name)
+ if type(unicode)=="table" then
+ local t={}
+ for l=1,#unicode do
+ local u=unicode[l]
+ if u<0xD7FF or (u>0xDFFF and u<=0xFFFF) then
+ t[l]=f_single(u)
+ else
+ u=u-0x10000
+ t[l]=f_double(floor(u/1024)+0xD800,u%1024+0xDC00)
+ end
+ end
+ return concat(t)
+ else
+ if unicode<0xD7FF or (unicode>0xDFFF and unicode<=0xFFFF) then
+ return f_single(unicode)
+ else
+ unicode=unicode-0x10000
+ return f_double(floor(unicode/1024)+0xD800,unicode%1024+0xDC00)
+ end
+ end
+end
+local function fromunicode16(str)
+ if #str==4 then
+ return tonumber(str,16)
+ else
+ local l,r=match(str,"(....)(....)")
+ return 0x10000+(tonumber(l,16)-0xD800)*0x400+tonumber(r,16)-0xDC00
+ end
+end
+mappings.makenameparser=makenameparser
+mappings.tounicode=tounicode
+mappings.tounicode16=tounicode16
+mappings.tounicode16sequence=tounicode16sequence
+mappings.fromunicode16=fromunicode16
+local ligseparator=P("_")
+local varseparator=P(".")
+local namesplitter=Ct(C((1-ligseparator-varseparator)^1)*(ligseparator*C((1-ligseparator-varseparator)^1))^0)
+do
+ local overloads=allocate {
+ IJ={ name="I_J",unicode={ 0x49,0x4A },mess=0x0132 },
+ ij={ name="i_j",unicode={ 0x69,0x6A },mess=0x0133 },
+ ff={ name="f_f",unicode={ 0x66,0x66 },mess=0xFB00 },
+ fi={ name="f_i",unicode={ 0x66,0x69 },mess=0xFB01 },
+ fl={ name="f_l",unicode={ 0x66,0x6C },mess=0xFB02 },
+ ffi={ name="f_f_i",unicode={ 0x66,0x66,0x69 },mess=0xFB03 },
+ ffl={ name="f_f_l",unicode={ 0x66,0x66,0x6C },mess=0xFB04 },
+ fj={ name="f_j",unicode={ 0x66,0x6A } },
+ fk={ name="f_k",unicode={ 0x66,0x6B } },
+ }
+ local o={}
+ for k,v in next,overloads do
+ local name=v.name
+ local mess=v.mess
+ if name then
+ o[name]=v
+ end
+ if mess then
+ o[mess]=v
+ end
+ o[k]=v
+ end
+ mappings.overloads=o
+end
+function mappings.addtounicode(data,filename,checklookups,forceligatures)
+ local resources=data.resources
+ local unicodes=resources.unicodes
+ if not unicodes then
+ if trace_mapping then
+ report_fonts("no unicode list, quitting tounicode for %a",filename)
+ end
+ return
+ end
+ local properties=data.properties
+ local descriptions=data.descriptions
+ local overloads=mappings.overloads
+ unicodes['space']=unicodes['space'] or 32
+ unicodes['hyphen']=unicodes['hyphen'] or 45
+ unicodes['zwj']=unicodes['zwj'] or 0x200D
+ unicodes['zwnj']=unicodes['zwnj'] or 0x200C
+ local private=fonts.constructors and fonts.constructors.privateoffset or 0xF0000
+ local unicodevector=fonts.encodings.agl.unicodes or {}
+ local contextvector=fonts.encodings.agl.ctxcodes or {}
+ local missing={}
+ local nofmissing=0
+ local oparser=nil
+ local cidnames=nil
+ local cidcodes=nil
+ local cidinfo=properties.cidinfo
+ local usedmap=cidinfo and fonts.cid.getmap(cidinfo)
+ local uparser=makenameparser()
+ if usedmap then
+ oparser=usedmap and makenameparser(cidinfo.ordering)
+ cidnames=usedmap.names
+ cidcodes=usedmap.unicodes
+ end
+ local ns=0
+ local nl=0
+ local dlist=sortedkeys(descriptions)
+ for i=1,#dlist do
+ local du=dlist[i]
+ local glyph=descriptions[du]
+ local name=glyph.name
+ if name then
+ local overload=overloads[name] or overloads[du]
+ if overload then
+ glyph.unicode=overload.unicode
+ else
+ local gu=glyph.unicode
+ if not gu or gu==-1 or du>=private or (du>=0xE000 and du<=0xF8FF) or du==0xFFFE or du==0xFFFF then
+ local unicode=unicodevector[name] or contextvector[name]
+ if unicode then
+ glyph.unicode=unicode
+ ns=ns+1
+ end
+ if (not unicode) and usedmap then
+ local foundindex=lpegmatch(oparser,name)
+ if foundindex then
+ unicode=cidcodes[foundindex]
+ if unicode then
+ glyph.unicode=unicode
+ ns=ns+1
+ else
+ local reference=cidnames[foundindex]
+ if reference then
+ local foundindex=lpegmatch(oparser,reference)
+ if foundindex then
+ unicode=cidcodes[foundindex]
+ if unicode then
+ glyph.unicode=unicode
+ ns=ns+1
+ end
+ end
+ if not unicode or unicode=="" then
+ local foundcodes,multiple=lpegmatch(uparser,reference)
+ if foundcodes then
+ glyph.unicode=foundcodes
+ if multiple then
+ nl=nl+1
+ unicode=true
+ else
+ ns=ns+1
+ unicode=foundcodes
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ if not unicode or unicode=="" then
+ local split=lpegmatch(namesplitter,name)
+ local nsplit=split and #split or 0
+ if nsplit==0 then
+ elseif nsplit==1 then
+ local base=split[1]
+ local u=unicodes[base] or unicodevector[base] or contextvector[name]
+ if not u then
+ elseif type(u)=="table" then
+ if u[1]<private then
+ unicode=u
+ glyph.unicode=unicode
+ end
+ elseif u<private then
+ unicode=u
+ glyph.unicode=unicode
+ end
+ else
+ local t,n={},0
+ for l=1,nsplit do
+ local base=split[l]
+ local u=unicodes[base] or unicodevector[base] or contextvector[name]
+ if not u then
+ break
+ elseif type(u)=="table" then
+ if u[1]>=private then
+ break
+ end
+ n=n+1
+ t[n]=u[1]
+ else
+ if u>=private then
+ break
+ end
+ n=n+1
+ t[n]=u
+ end
+ end
+ if n>0 then
+ if n==1 then
+ unicode=t[1]
+ else
+ unicode=t
+ end
+ glyph.unicode=unicode
+ end
+ end
+ nl=nl+1
+ end
+ if not unicode or unicode=="" then
+ local foundcodes,multiple=lpegmatch(uparser,name)
+ if foundcodes then
+ glyph.unicode=foundcodes
+ if multiple then
+ nl=nl+1
+ unicode=true
+ else
+ ns=ns+1
+ unicode=foundcodes
+ end
+ end
+ end
+ local r=overloads[unicode]
+ if r then
+ unicode=r.unicode
+ glyph.unicode=unicode
+ end
+ if not unicode then
+ missing[du]=true
+ nofmissing=nofmissing+1
+ end
+ end
+ end
+ else
+ local overload=overloads[du]
+ if overload then
+ glyph.unicode=overload.unicode
+ end
+ end
+ end
+ if type(checklookups)=="function" then
+ checklookups(data,missing,nofmissing)
+ end
+ local unicoded=0
+ local collected=fonts.handlers.otf.readers.getcomponents(data)
+ local function resolve(glyph,u)
+ local n=#u
+ for i=1,n do
+ if u[i]>private then
+ n=0
+ break
+ end
+ end
+ if n>0 then
+ if n>1 then
+ glyph.unicode=u
+ else
+ glyph.unicode=u[1]
+ end
+ unicoded=unicoded+1
+ end
+ end
+ if not collected then
+ elseif forceligatures or force_ligatures then
+ for i=1,#dlist do
+ local du=dlist[i]
+ if du>=private or (du>=0xE000 and du<=0xF8FF) then
+ local u=collected[du]
+ if u then
+ resolve(descriptions[du],u)
+ end
+ end
+ end
+ else
+ for i=1,#dlist do
+ local du=dlist[i]
+ if du>=private or (du>=0xE000 and du<=0xF8FF) then
+ local glyph=descriptions[du]
+ if glyph.class=="ligature" and not glyph.unicode then
+ local u=collected[du]
+ if u then
+ resolve(glyph,u)
+ end
+ end
+ end
+ end
+ end
+ if trace_mapping and unicoded>0 then
+ report_fonts("%n ligature tounicode mappings deduced from gsub ligature features",unicoded)
+ end
+ if trace_mapping then
+ for i=1,#dlist do
+ local du=dlist[i]
+ local glyph=descriptions[du]
+ local name=glyph.name or "-"
+ local index=glyph.index or 0
+ local unicode=glyph.unicode
+ if unicode then
+ if type(unicode)=="table" then
+ local unicodes={}
+ for i=1,#unicode do
+ unicodes[i]=formatters("%U",unicode[i])
+ end
+ report_fonts("internal slot %U, name %a, unicode %U, tounicode % t",index,name,du,unicodes)
+ else
+ report_fonts("internal slot %U, name %a, unicode %U, tounicode %U",index,name,du,unicode)
+ end
+ else
+ report_fonts("internal slot %U, name %a, unicode %U",index,name,du)
+ end
+ end
+ end
+ if trace_loading and (ns>0 or nl>0) then
+ report_fonts("%s tounicode entries added, ligatures %s",nl+ns,ns)
+ end
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['luatex-fonts-syn']={
+ version=1.001,
+ comment="companion to luatex-*.tex",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+if context then
+ texio.write_nl("fatal error: this module is not for context")
+ os.exit()
+end
+local fonts=fonts
+fonts.names=fonts.names or {}
+fonts.names.version=1.001
+fonts.names.basename="luatex-fonts-names"
+fonts.names.cache=containers.define("fonts","data",fonts.names.version,true)
+local data=nil
+local loaded=false
+local fileformats={ "lua","tex","other text files" }
+function fonts.names.reportmissingbase()
+ texio.write("<missing font database, run: mtxrun --script fonts --reload --simple>")
+ fonts.names.reportmissingbase=nil
+end
+function fonts.names.reportmissingname()
+ texio.write("<unknown font in database, run: mtxrun --script fonts --reload --simple>")
+ fonts.names.reportmissingname=nil
+end
+function fonts.names.resolve(name,sub)
+ if not loaded then
+ local basename=fonts.names.basename
+ if basename and basename~="" then
+ data=containers.read(fonts.names.cache,basename)
+ if not data then
+ basename=file.addsuffix(basename,"lua")
+ for i=1,#fileformats do
+ local format=fileformats[i]
+ local foundname=resolvers.findfile(basename,format) or ""
+ if foundname~="" then
+ data=dofile(foundname)
+ texio.write("<font database loaded: ",foundname,">")
+ break
+ end
+ end
+ end
+ end
+ loaded=true
+ end
+ if type(data)=="table" and data.version==fonts.names.version then
+ local condensed=string.gsub(string.lower(name),"[^%a%d]","")
+ local found=data.mappings and data.mappings[condensed]
+ if found then
+ local fontname,filename,subfont=found[1],found[2],found[3]
+ if subfont then
+ return filename,fontname
+ else
+ return filename,false
+ end
+ elseif fonts.names.reportmissingname then
+ fonts.names.reportmissingname()
+ return name,false
+ end
+ elseif fonts.names.reportmissingbase then
+ fonts.names.reportmissingbase()
+ end
+end
+fonts.names.resolvespec=fonts.names.resolve
+function fonts.names.getfilename(askedname,suffix)
+ return ""
+end
+function fonts.names.ignoredfile(filename)
+ return false
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-oti']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local lower=string.lower
+local fonts=fonts
+local constructors=fonts.constructors
+local otf=constructors.handlers.otf
+local otffeatures=constructors.features.otf
+local registerotffeature=otffeatures.register
+local otftables=otf.tables or {}
+otf.tables=otftables
+local allocate=utilities.storage.allocate
+registerotffeature {
+ name="features",
+ description="initialization of feature handler",
+ default=true,
+}
+local function setmode(tfmdata,value)
+ if value then
+ tfmdata.properties.mode=lower(value)
+ end
+end
+otf.modeinitializer=setmode
+local function setlanguage(tfmdata,value)
+ if value then
+ local cleanvalue=lower(value)
+ local languages=otftables and otftables.languages
+ local properties=tfmdata.properties
+ if not languages then
+ properties.language=cleanvalue
+ elseif languages[value] then
+ properties.language=cleanvalue
+ else
+ properties.language="dflt"
+ end
+ end
+end
+local function setscript(tfmdata,value)
+ if value then
+ local cleanvalue=lower(value)
+ local scripts=otftables and otftables.scripts
+ local properties=tfmdata.properties
+ if not scripts then
+ properties.script=cleanvalue
+ elseif scripts[value] then
+ properties.script=cleanvalue
+ else
+ properties.script="dflt"
+ end
+ end
+end
+registerotffeature {
+ name="mode",
+ description="mode",
+ initializers={
+ base=setmode,
+ node=setmode,
+ plug=setmode,
+ }
+}
+registerotffeature {
+ name="language",
+ description="language",
+ initializers={
+ base=setlanguage,
+ node=setlanguage,
+ plug=setlanguage,
+ }
+}
+registerotffeature {
+ name="script",
+ description="script",
+ initializers={
+ base=setscript,
+ node=setscript,
+ plug=setscript,
+ }
+}
+otftables.featuretypes=allocate {
+ gpos_single="position",
+ gpos_pair="position",
+ gpos_cursive="position",
+ gpos_mark2base="position",
+ gpos_mark2ligature="position",
+ gpos_mark2mark="position",
+ gpos_context="position",
+ gpos_contextchain="position",
+ gsub_single="substitution",
+ gsub_multiple="substitution",
+ gsub_alternate="substitution",
+ gsub_ligature="substitution",
+ gsub_context="substitution",
+ gsub_contextchain="substitution",
+ gsub_reversecontextchain="substitution",
+ gsub_reversesub="substitution",
+}
+function otffeatures.checkeddefaultscript(featuretype,autoscript,scripts)
+ if featuretype=="position" then
+ local default=scripts.dflt
+ if default then
+ if autoscript=="position" or autoscript==true then
+ return default
+ else
+ report_otf("script feature %s not applied, enable default positioning")
+ end
+ else
+ end
+ elseif featuretype=="substitution" then
+ local default=scripts.dflt
+ if default then
+ if autoscript=="substitution" or autoscript==true then
+ return default
+ end
+ end
+ end
+end
+function otffeatures.checkeddefaultlanguage(featuretype,autolanguage,languages)
+ if featuretype=="position" then
+ local default=languages.dflt
+ if default then
+ if autolanguage=="position" or autolanguage==true then
+ return default
+ else
+ report_otf("language feature %s not applied, enable default positioning")
+ end
+ else
+ end
+ elseif featuretype=="substitution" then
+ local default=languages.dflt
+ if default then
+ if autolanguage=="substitution" or autolanguage==true then
+ return default
+ end
+ end
+ end
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-otr']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local next,type,tonumber=next,type,tonumber
+local byte,lower,char,gsub=string.byte,string.lower,string.char,string.gsub
+local floor,round=math.floor,math.round
+local P,R,S,C,Cs,Cc,Ct,Carg,Cmt=lpeg.P,lpeg.R,lpeg.S,lpeg.C,lpeg.Cs,lpeg.Cc,lpeg.Ct,lpeg.Carg,lpeg.Cmt
+local lpegmatch=lpeg.match
+local setmetatableindex=table.setmetatableindex
+local formatters=string.formatters
+local sortedkeys=table.sortedkeys
+local sortedhash=table.sortedhash
+local stripstring=string.nospaces
+local utf16_to_utf8_be=utf.utf16_to_utf8_be
+local report=logs.reporter("otf reader")
+local trace_cmap=false
+local trace_cmap_detail=false
+fonts=fonts or {}
+local handlers=fonts.handlers or {}
+fonts.handlers=handlers
+local otf=handlers.otf or {}
+handlers.otf=otf
+local readers=otf.readers or {}
+otf.readers=readers
+local streamreader=utilities.files
+local streamwriter=utilities.files
+readers.streamreader=streamreader
+readers.streamwriter=streamwriter
+local openfile=streamreader.open
+local closefile=streamreader.close
+local setposition=streamreader.setposition
+local skipshort=streamreader.skipshort
+local readbytes=streamreader.readbytes
+local readstring=streamreader.readstring
+local readbyte=streamreader.readcardinal1
+local readushort=streamreader.readcardinal2
+local readuint=streamreader.readcardinal3
+local readulong=streamreader.readcardinal4
+local readshort=streamreader.readinteger2
+local readlong=streamreader.readinteger4
+local readfixed=streamreader.readfixed4
+local read2dot14=streamreader.read2dot14
+local readfword=readshort
+local readufword=readushort
+local readoffset=readushort
+function streamreader.readtag(f)
+ return lower(stripstring(readstring(f,4)))
+end
+local function readlongdatetime(f)
+ local a,b,c,d,e,f,g,h=readbytes(f,8)
+ return 0x100000000*d+0x1000000*e+0x10000*f+0x100*g+h
+end
+local tableversion=0.004
+readers.tableversion=tableversion
+local privateoffset=fonts.constructors and fonts.constructors.privateoffset or 0xF0000
+local reservednames={ [0]="copyright",
+ "family",
+ "subfamily",
+ "uniqueid",
+ "fullname",
+ "version",
+ "postscriptname",
+ "trademark",
+ "manufacturer",
+ "designer",
+ "description",
+ "vendorurl",
+ "designerurl",
+ "license",
+ "licenseurl",
+ "reserved",
+ "typographicfamily",
+ "typographicsubfamily",
+ "compatiblefullname",
+ "sampletext",
+ "cidfindfontname",
+ "wwsfamily",
+ "wwssubfamily",
+ "lightbackgroundpalette",
+ "darkbackgroundpalette",
+ "variationspostscriptnameprefix",
+}
+local platforms={ [0]="unicode",
+ "macintosh",
+ "iso",
+ "windows",
+ "custom",
+}
+local encodings={
+ unicode={ [0]="unicode 1.0 semantics",
+ "unicode 1.1 semantics",
+ "iso/iec 10646",
+ "unicode 2.0 bmp",
+ "unicode 2.0 full",
+ "unicode variation sequences",
+ "unicode full repertoire",
+ },
+ macintosh={ [0]="roman","japanese","chinese (traditional)","korean","arabic","hebrew","greek","russian",
+ "rsymbol","devanagari","gurmukhi","gujarati","oriya","bengali","tamil","telugu","kannada",
+ "malayalam","sinhalese","burmese","khmer","thai","laotian","georgian","armenian",
+ "chinese (simplified)","tibetan","mongolian","geez","slavic","vietnamese","sindhi",
+ "uninterpreted",
+ },
+ iso={ [0]="7-bit ascii",
+ "iso 10646",
+ "iso 8859-1",
+ },
+ windows={ [0]="symbol",
+ "unicode bmp",
+ "shiftjis",
+ "prc",
+ "big5",
+ "wansung",
+ "johab",
+ "reserved 7",
+ "reserved 8",
+ "reserved 9",
+ "unicode ucs-4",
+ },
+ custom={
+ }
+}
+local decoders={
+ unicode={},
+ macintosh={},
+ iso={},
+ windows={
+ ["unicode semantics"]=utf16_to_utf8_be,
+ ["unicode bmp"]=utf16_to_utf8_be,
+ ["unicode full"]=utf16_to_utf8_be,
+ ["unicode 1.0 semantics"]=utf16_to_utf8_be,
+ ["unicode 1.1 semantics"]=utf16_to_utf8_be,
+ ["unicode 2.0 bmp"]=utf16_to_utf8_be,
+ ["unicode 2.0 full"]=utf16_to_utf8_be,
+ ["unicode variation sequences"]=utf16_to_utf8_be,
+ ["unicode full repertoire"]=utf16_to_utf8_be,
+ },
+ custom={},
+}
+local languages={
+ unicode={
+ [ 0]="english",
+ },
+ macintosh={
+ [ 0]="english",
+ },
+ iso={},
+ windows={
+ [0x0409]="english - united states",
+ },
+ custom={},
+}
+local standardromanencoding={ [0]=
+ "notdef",".null","nonmarkingreturn","space","exclam","quotedbl",
+ "numbersign","dollar","percent","ampersand","quotesingle","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","Q","R","S","T","U","V","W","X","Y","Z","bracketleft",
+ "backslash","bracketright","asciicircum","underscore","grave","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","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","dagger","degree","cent","sterling",
+ "section","bullet","paragraph","germandbls","registered","copyright",
+ "trademark","acute","dieresis","notequal","AE","Oslash","infinity",
+ "plusminus","lessequal","greaterequal","yen","mu","partialdiff",
+ "summation","product","pi","integral","ordfeminine","ordmasculine",
+ "Omega","ae","oslash","questiondown","exclamdown","logicalnot",
+ "radical","florin","approxequal","Delta","guillemotleft",
+ "guillemotright","ellipsis","nonbreakingspace","Agrave","Atilde",
+ "Otilde","OE","oe","endash","emdash","quotedblleft","quotedblright",
+ "quoteleft","quoteright","divide","lozenge","ydieresis","Ydieresis",
+ "fraction","currency","guilsinglleft","guilsinglright","fi","fl",
+ "daggerdbl","periodcentered","quotesinglbase","quotedblbase",
+ "perthousand","Acircumflex","Ecircumflex","Aacute","Edieresis","Egrave",
+ "Iacute","Icircumflex","Idieresis","Igrave","Oacute","Ocircumflex",
+ "apple","Ograve","Uacute","Ucircumflex","Ugrave","dotlessi",
+ "circumflex","tilde","macron","breve","dotaccent","ring","cedilla",
+ "hungarumlaut","ogonek","caron","Lslash","lslash","Scaron","scaron",
+ "Zcaron","zcaron","brokenbar","Eth","eth","Yacute","yacute","Thorn",
+ "thorn","minus","multiply","onesuperior","twosuperior","threesuperior",
+ "onehalf","onequarter","threequarters","franc","Gbreve","gbreve",
+ "Idotaccent","Scedilla","scedilla","Cacute","cacute","Ccaron","ccaron",
+ "dcroat",
+}
+local weights={
+ [100]="thin",
+ [200]="extralight",
+ [300]="light",
+ [400]="normal",
+ [500]="medium",
+ [600]="semibold",
+ [700]="bold",
+ [800]="extrabold",
+ [900]="black",
+}
+local widths={
+ [1]="ultracondensed",
+ [2]="extracondensed",
+ [3]="condensed",
+ [4]="semicondensed",
+ [5]="normal",
+ [6]="semiexpanded",
+ [7]="expanded",
+ [8]="extraexpanded",
+ [9]="ultraexpanded",
+}
+setmetatableindex(weights,function(t,k)
+ local r=floor((k+50)/100)*100
+ local v=(r>900 and "black") or rawget(t,r) or "normal"
+ return v
+end)
+setmetatableindex(widths,function(t,k)
+ return "normal"
+end)
+local panoseweights={
+ [ 0]="normal",
+ [ 1]="normal",
+ [ 2]="verylight",
+ [ 3]="light",
+ [ 4]="thin",
+ [ 5]="book",
+ [ 6]="medium",
+ [ 7]="demi",
+ [ 8]="bold",
+ [ 9]="heavy",
+ [10]="black",
+}
+local panosewidths={
+ [ 0]="normal",
+ [ 1]="normal",
+ [ 2]="normal",
+ [ 3]="normal",
+ [ 4]="normal",
+ [ 5]="expanded",
+ [ 6]="condensed",
+ [ 7]="veryexpanded",
+ [ 8]="verycondensed",
+ [ 9]="monospaced",
+}
+local helpers={}
+readers.helpers=helpers
+local function gotodatatable(f,fontdata,tag,criterium)
+ if criterium and f then
+ local datatable=fontdata.tables[tag]
+ if datatable then
+ local tableoffset=datatable.offset
+ setposition(f,tableoffset)
+ return tableoffset
+ end
+ end
+end
+local function reportskippedtable(f,fontdata,tag,criterium)
+ if criterium and f then
+ local datatable=fontdata.tables[tag]
+ if datatable then
+ report("loading of table %a skipped",tag)
+ end
+ end
+end
+local function setvariabledata(fontdata,tag,data)
+ local variabledata=fontdata.variabledata
+ if variabledata then
+ variabledata[tag]=data
+ else
+ fontdata.variabledata={ [tag]=data }
+ end
+end
+helpers.gotodatatable=gotodatatable
+helpers.setvariabledata=setvariabledata
+helpers.reportskippedtable=reportskippedtable
+local platformnames={
+ postscriptname=true,
+ fullname=true,
+ family=true,
+ subfamily=true,
+ typographicfamily=true,
+ typographicsubfamily=true,
+ compatiblefullname=true,
+}
+function readers.name(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"name",true)
+ if tableoffset then
+ local format=readushort(f)
+ local nofnames=readushort(f)
+ local offset=readushort(f)
+ local start=tableoffset+offset
+ local namelists={
+ unicode={},
+ windows={},
+ macintosh={},
+ }
+ for i=1,nofnames do
+ local platform=platforms[readushort(f)]
+ if platform then
+ local namelist=namelists[platform]
+ if namelist then
+ local encoding=readushort(f)
+ local language=readushort(f)
+ local encodings=encodings[platform]
+ local languages=languages[platform]
+ if encodings and languages then
+ local encoding=encodings[encoding]
+ local language=languages[language]
+ if encoding and language then
+ local index=readushort(f)
+ local name=reservednames[index]
+ namelist[#namelist+1]={
+ platform=platform,
+ encoding=encoding,
+ language=language,
+ name=name,
+ index=index,
+ length=readushort(f),
+ offset=start+readushort(f),
+ }
+ else
+ skipshort(f,3)
+ end
+ else
+ skipshort(f,3)
+ end
+ else
+ skipshort(f,5)
+ end
+ else
+ skipshort(f,5)
+ end
+ end
+ local names={}
+ local done={}
+ local extras={}
+ local function filter(platform,e,l)
+ local namelist=namelists[platform]
+ for i=1,#namelist do
+ local name=namelist[i]
+ local nametag=name.name
+ local index=name.index
+ if not done[nametag or i] then
+ local encoding=name.encoding
+ local language=name.language
+ if (not e or encoding==e) and (not l or language==l) then
+ setposition(f,name.offset)
+ local content=readstring(f,name.length)
+ local decoder=decoders[platform]
+ if decoder then
+ decoder=decoder[encoding]
+ end
+ if decoder then
+ content=decoder(content)
+ end
+ if nametag then
+ names[nametag]={
+ content=content,
+ platform=platform,
+ encoding=encoding,
+ language=language,
+ }
+ end
+ extras[index]=content
+ done[nametag or i]=true
+ end
+ end
+ end
+ end
+ filter("windows","unicode bmp","english - united states")
+ filter("macintosh","roman","english")
+ filter("windows")
+ filter("macintosh")
+ filter("unicode")
+ fontdata.names=names
+ fontdata.extras=extras
+ if specification.platformnames then
+ local collected={}
+ for platform,namelist in next,namelists do
+ local filtered=false
+ for i=1,#namelist do
+ local entry=namelist[i]
+ local name=entry.name
+ if platformnames[name] then
+ setposition(f,entry.offset)
+ local content=readstring(f,entry.length)
+ local encoding=entry.encoding
+ local decoder=decoders[platform]
+ if decoder then
+ decoder=decoder[encoding]
+ end
+ if decoder then
+ content=decoder(content)
+ end
+ if filtered then
+ filtered[name]=content
+ else
+ filtered={ [name]=content }
+ end
+ end
+ end
+ if filtered then
+ collected[platform]=filtered
+ end
+ end
+ fontdata.platformnames=collected
+ end
+ else
+ fontdata.names={}
+ end
+end
+local validutf=lpeg.patterns.validutf8
+local function getname(fontdata,key)
+ local names=fontdata.names
+ if names then
+ local value=names[key]
+ if value then
+ local content=value.content
+ return lpegmatch(validutf,content) and content or nil
+ end
+ end
+end
+readers["os/2"]=function(f,fontdata)
+ local tableoffset=gotodatatable(f,fontdata,"os/2",true)
+ if tableoffset then
+ local version=readushort(f)
+ local windowsmetrics={
+ version=version,
+ averagewidth=readshort(f),
+ weightclass=readushort(f),
+ widthclass=readushort(f),
+ fstype=readushort(f),
+ subscriptxsize=readshort(f),
+ subscriptysize=readshort(f),
+ subscriptxoffset=readshort(f),
+ subscriptyoffset=readshort(f),
+ superscriptxsize=readshort(f),
+ superscriptysize=readshort(f),
+ superscriptxoffset=readshort(f),
+ superscriptyoffset=readshort(f),
+ strikeoutsize=readshort(f),
+ strikeoutpos=readshort(f),
+ familyclass=readshort(f),
+ panose={ readbytes(f,10) },
+ unicoderanges={ readulong(f),readulong(f),readulong(f),readulong(f) },
+ vendor=readstring(f,4),
+ fsselection=readushort(f),
+ firstcharindex=readushort(f),
+ lastcharindex=readushort(f),
+ typoascender=readshort(f),
+ typodescender=readshort(f),
+ typolinegap=readshort(f),
+ winascent=readushort(f),
+ windescent=readushort(f),
+ }
+ if version>=1 then
+ windowsmetrics.codepageranges={ readulong(f),readulong(f) }
+ end
+ if version>=3 then
+ windowsmetrics.xheight=readshort(f)
+ windowsmetrics.capheight=readshort(f)
+ windowsmetrics.defaultchar=readushort(f)
+ windowsmetrics.breakchar=readushort(f)
+ end
+ windowsmetrics.weight=windowsmetrics.weightclass and weights[windowsmetrics.weightclass]
+ windowsmetrics.width=windowsmetrics.widthclass and widths [windowsmetrics.widthclass]
+ windowsmetrics.panoseweight=panoseweights[windowsmetrics.panose[3]]
+ windowsmetrics.panosewidth=panosewidths [windowsmetrics.panose[4]]
+ fontdata.windowsmetrics=windowsmetrics
+ else
+ fontdata.windowsmetrics={}
+ end
+end
+readers.head=function(f,fontdata)
+ local tableoffset=gotodatatable(f,fontdata,"head",true)
+ if tableoffset then
+ local fontheader={
+ version=readfixed(f),
+ revision=readfixed(f),
+ checksum=readulong(f),
+ magic=readulong(f),
+ flags=readushort(f),
+ units=readushort(f),
+ created=readlongdatetime(f),
+ modified=readlongdatetime(f),
+ xmin=readshort(f),
+ ymin=readshort(f),
+ xmax=readshort(f),
+ ymax=readshort(f),
+ macstyle=readushort(f),
+ smallpixels=readushort(f),
+ directionhint=readshort(f),
+ indextolocformat=readshort(f),
+ glyphformat=readshort(f),
+ }
+ fontdata.fontheader=fontheader
+ else
+ fontdata.fontheader={}
+ end
+ fontdata.nofglyphs=0
+end
+readers.hhea=function(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"hhea",specification.details)
+ if tableoffset then
+ fontdata.horizontalheader={
+ version=readfixed(f),
+ ascender=readfword(f),
+ descender=readfword(f),
+ linegap=readfword(f),
+ maxadvancewidth=readufword(f),
+ minleftsidebearing=readfword(f),
+ minrightsidebearing=readfword(f),
+ maxextent=readfword(f),
+ caretsloperise=readshort(f),
+ caretsloperun=readshort(f),
+ caretoffset=readshort(f),
+ reserved_1=readshort(f),
+ reserved_2=readshort(f),
+ reserved_3=readshort(f),
+ reserved_4=readshort(f),
+ metricdataformat=readshort(f),
+ nofmetrics=readushort(f),
+ }
+ else
+ fontdata.horizontalheader={
+ nofmetrics=0,
+ }
+ end
+end
+readers.vhea=function(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"vhea",specification.details)
+ if tableoffset then
+ fontdata.verticalheader={
+ version=readfixed(f),
+ ascender=readfword(f),
+ descender=readfword(f),
+ linegap=readfword(f),
+ maxadvanceheight=readufword(f),
+ mintopsidebearing=readfword(f),
+ minbottomsidebearing=readfword(f),
+ maxextent=readfword(f),
+ caretsloperise=readshort(f),
+ caretsloperun=readshort(f),
+ caretoffset=readshort(f),
+ reserved_1=readshort(f),
+ reserved_2=readshort(f),
+ reserved_3=readshort(f),
+ reserved_4=readshort(f),
+ metricdataformat=readshort(f),
+ nofmetrics=readushort(f),
+ }
+ else
+ fontdata.verticalheader={
+ nofmetrics=0,
+ }
+ end
+end
+readers.maxp=function(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"maxp",specification.details)
+ if tableoffset then
+ local version=readfixed(f)
+ local nofglyphs=readushort(f)
+ fontdata.nofglyphs=nofglyphs
+ if version==0.5 then
+ fontdata.maximumprofile={
+ version=version,
+ nofglyphs=nofglyphs,
+ }
+ elseif version==1.0 then
+ fontdata.maximumprofile={
+ version=version,
+ nofglyphs=nofglyphs,
+ points=readushort(f),
+ contours=readushort(f),
+ compositepoints=readushort(f),
+ compositecontours=readushort(f),
+ zones=readushort(f),
+ twilightpoints=readushort(f),
+ storage=readushort(f),
+ functiondefs=readushort(f),
+ instructiondefs=readushort(f),
+ stackelements=readushort(f),
+ sizeofinstructions=readushort(f),
+ componentelements=readushort(f),
+ componentdepth=readushort(f),
+ }
+ else
+ fontdata.maximumprofile={
+ version=version,
+ nofglyphs=0,
+ }
+ end
+ end
+end
+readers.hmtx=function(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"hmtx",specification.glyphs)
+ if tableoffset then
+ local horizontalheader=fontdata.horizontalheader
+ local nofmetrics=horizontalheader.nofmetrics
+ local glyphs=fontdata.glyphs
+ local nofglyphs=fontdata.nofglyphs
+ local width=0
+ local leftsidebearing=0
+ for i=0,nofmetrics-1 do
+ local glyph=glyphs[i]
+ width=readshort(f)
+ leftsidebearing=readshort(f)
+ if width~=0 then
+ glyph.width=width
+ end
+ end
+ for i=nofmetrics,nofglyphs-1 do
+ local glyph=glyphs[i]
+ if width~=0 then
+ glyph.width=width
+ end
+ end
+ end
+end
+readers.vmtx=function(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"vmtx",specification.glyphs)
+ if tableoffset then
+ local verticalheader=fontdata.verticalheader
+ local nofmetrics=verticalheader.nofmetrics
+ local glyphs=fontdata.glyphs
+ local nofglyphs=fontdata.nofglyphs
+ local vheight=0
+ local vdefault=verticalheader.ascender+verticalheader.descender
+ local topsidebearing=0
+ for i=0,nofmetrics-1 do
+ local glyph=glyphs[i]
+ vheight=readshort(f)
+ topsidebearing=readshort(f)
+ if vheight~=0 and vheight~=vdefault then
+ glyph.vheight=vheight
+ end
+ end
+ for i=nofmetrics,nofglyphs-1 do
+ local glyph=glyphs[i]
+ if vheight~=0 and vheight~=vdefault then
+ glyph.vheight=vheight
+ end
+ end
+ end
+end
+readers.vorg=function(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"vorg",specification.glyphs)
+end
+readers.post=function(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"post",true)
+ if tableoffset then
+ local version=readfixed(f)
+ fontdata.postscript={
+ version=version,
+ italicangle=round(1000*readfixed(f))/1000,
+ underlineposition=readfword(f),
+ underlinethickness=readfword(f),
+ monospaced=readulong(f),
+ minmemtype42=readulong(f),
+ maxmemtype42=readulong(f),
+ minmemtype1=readulong(f),
+ maxmemtype1=readulong(f),
+ }
+ if not specification.glyphs then
+ elseif version==1.0 then
+ for index=0,#standardromanencoding do
+ glyphs[index].name=standardromanencoding[index]
+ end
+ elseif version==2.0 then
+ local glyphs=fontdata.glyphs
+ local nofglyphs=readushort(f)
+ local indices={}
+ local names={}
+ local maxnames=0
+ for i=0,nofglyphs-1 do
+ local nameindex=readushort(f)
+ if nameindex>=258 then
+ maxnames=maxnames+1
+ nameindex=nameindex-257
+ indices[nameindex]=i
+ else
+ glyphs[i].name=standardromanencoding[nameindex]
+ end
+ end
+ for i=1,maxnames do
+ local mapping=indices[i]
+ if not mapping then
+ report("quit post name fetching at %a of %a: %s",i,maxnames,"no index")
+ break
+ else
+ local length=readbyte(f)
+ if length>0 then
+ glyphs[mapping].name=readstring(f,length)
+ else
+ report("quit post name fetching at %a of %a: %s",i,maxnames,"overflow")
+ break
+ end
+ end
+ end
+ elseif version==2.5 then
+ elseif version==3.0 then
+ end
+ else
+ fontdata.postscript={}
+ end
+end
+readers.cff=function(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"cff",specification.glyphs)
+end
+local formatreaders={}
+local duplicatestoo=true
+local sequence={
+ { 3,1,4 },
+ { 3,10,12 },
+ { 0,3,4 },
+ { 0,1,4 },
+ { 0,0,6 },
+ { 3,0,6 },
+ { 0,5,14 },
+{ 0,4,12 },
+ { 3,10,13 },
+}
+local supported={}
+for i=1,#sequence do
+ local si=sequence[i]
+ local sp,se,sf=si[1],si[2],si[3]
+ local p=supported[sp]
+ if not p then
+ p={}
+ supported[sp]=p
+ end
+ local e=p[se]
+ if not e then
+ e={}
+ p[se]=e
+ end
+ e[sf]=true
+end
+formatreaders[4]=function(f,fontdata,offset)
+ setposition(f,offset+2)
+ local length=readushort(f)
+ local language=readushort(f)
+ local nofsegments=readushort(f)/2
+ skipshort(f,3)
+ local endchars={}
+ local startchars={}
+ local deltas={}
+ local offsets={}
+ local indices={}
+ local mapping=fontdata.mapping
+ local glyphs=fontdata.glyphs
+ local duplicates=fontdata.duplicates
+ local nofdone=0
+ for i=1,nofsegments do
+ endchars[i]=readushort(f)
+ end
+ local reserved=readushort(f)
+ for i=1,nofsegments do
+ startchars[i]=readushort(f)
+ end
+ for i=1,nofsegments do
+ deltas[i]=readshort(f)
+ end
+ for i=1,nofsegments do
+ offsets[i]=readushort(f)
+ end
+ local size=(length-2*2-5*2-4*nofsegments*2)/2
+ for i=1,size-1 do
+ indices[i]=readushort(f)
+ end
+ for segment=1,nofsegments do
+ local startchar=startchars[segment]
+ local endchar=endchars[segment]
+ local offset=offsets[segment]
+ local delta=deltas[segment]
+ if startchar==0xFFFF and endchar==0xFFFF then
+ elseif startchar==0xFFFF and offset==0 then
+ elseif offset==0xFFFF then
+ elseif offset==0 then
+ if trace_cmap_detail then
+ report("format 4.%i segment %2i from %C upto %C at index %H",1,segment,startchar,endchar,(startchar+delta)%65536)
+ end
+ for unicode=startchar,endchar do
+ local index=(unicode+delta)%65536
+ if index and index>0 then
+ local glyph=glyphs[index]
+ if glyph then
+ local gu=glyph.unicode
+ if not gu then
+ glyph.unicode=unicode
+ nofdone=nofdone+1
+ elseif gu~=unicode then
+ if duplicatestoo then
+ local d=duplicates[gu]
+ if d then
+ d[unicode]=true
+ else
+ duplicates[gu]={ [unicode]=true }
+ end
+ else
+ report("duplicate case 1: %C %04i %s",unicode,index,glyphs[index].name)
+ end
+ end
+ if not mapping[index] then
+ mapping[index]=unicode
+ end
+ end
+ end
+ end
+ else
+ local shift=(segment-nofsegments+offset/2)-startchar
+ if trace_cmap_detail then
+ report("format 4.%i segment %2i from %C upto %C at index %H",0,segment,startchar,endchar,(startchar+delta)%65536)
+ end
+ for unicode=startchar,endchar do
+ local slot=shift+unicode
+ local index=indices[slot]
+ if index and index>0 then
+ index=(index+delta)%65536
+ local glyph=glyphs[index]
+ if glyph then
+ local gu=glyph.unicode
+ if not gu then
+ glyph.unicode=unicode
+ nofdone=nofdone+1
+ elseif gu~=unicode then
+ if duplicatestoo then
+ local d=duplicates[gu]
+ if d then
+ d[unicode]=true
+ else
+ duplicates[gu]={ [unicode]=true }
+ end
+ else
+ report("duplicate case 2: %C %04i %s",unicode,index,glyphs[index].name)
+ end
+ end
+ if not mapping[index] then
+ mapping[index]=unicode
+ end
+ end
+ end
+ end
+ end
+ end
+ return nofdone
+end
+formatreaders[6]=function(f,fontdata,offset)
+ setposition(f,offset)
+ local format=readushort(f)
+ local length=readushort(f)
+ local language=readushort(f)
+ local mapping=fontdata.mapping
+ local glyphs=fontdata.glyphs
+ local duplicates=fontdata.duplicates
+ local start=readushort(f)
+ local count=readushort(f)
+ local stop=start+count-1
+ local nofdone=0
+ if trace_cmap_detail then
+ report("format 6 from %C to %C",2,start,stop)
+ end
+ for unicode=start,stop do
+ local index=readushort(f)
+ if index>0 then
+ local glyph=glyphs[index]
+ if glyph then
+ local gu=glyph.unicode
+ if not gu then
+ glyph.unicode=unicode
+ nofdone=nofdone+1
+ elseif gu~=unicode then
+ end
+ if not mapping[index] then
+ mapping[index]=unicode
+ end
+ end
+ end
+ end
+ return nofdone
+end
+formatreaders[12]=function(f,fontdata,offset)
+ setposition(f,offset+2+2+4+4)
+ local mapping=fontdata.mapping
+ local glyphs=fontdata.glyphs
+ local duplicates=fontdata.duplicates
+ local nofgroups=readulong(f)
+ local nofdone=0
+ for i=1,nofgroups do
+ local first=readulong(f)
+ local last=readulong(f)
+ local index=readulong(f)
+ if trace_cmap_detail then
+ report("format 12 from %C to %C starts at index %i",first,last,index)
+ end
+ for unicode=first,last do
+ local glyph=glyphs[index]
+ if glyph then
+ local gu=glyph.unicode
+ if not gu then
+ glyph.unicode=unicode
+ nofdone=nofdone+1
+ elseif gu~=unicode then
+ local d=duplicates[gu]
+ if d then
+ d[unicode]=true
+ else
+ duplicates[gu]={ [unicode]=true }
+ end
+ end
+ if not mapping[index] then
+ mapping[index]=unicode
+ end
+ end
+ index=index+1
+ end
+ end
+ return nofdone
+end
+formatreaders[13]=function(f,fontdata,offset)
+ setposition(f,offset+2+2+4+4)
+ local mapping=fontdata.mapping
+ local glyphs=fontdata.glyphs
+ local duplicates=fontdata.duplicates
+ local nofgroups=readulong(f)
+ local nofdone=0
+ for i=1,nofgroups do
+ local first=readulong(f)
+ local last=readulong(f)
+ local index=readulong(f)
+ if first<privateoffset then
+ if trace_cmap_detail then
+ report("format 13 from %C to %C get index %i",first,last,index)
+ end
+ local glyph=glyphs[index]
+ local unicode=glyph.unicode
+ if not unicode then
+ unicode=first
+ glyph.unicode=unicode
+ first=first+1
+ end
+ local list=duplicates[unicode]
+ mapping[index]=unicode
+ if not list then
+ list={}
+ duplicates[unicode]=list
+ end
+ if last>=privateoffset then
+ local limit=privateoffset-1
+ report("format 13 from %C to %C pruned to %C",first,last,limit)
+ last=limit
+ end
+ for unicode=first,last do
+ list[unicode]=true
+ end
+ nofdone=nofdone+last-first+1
+ else
+ report("format 13 from %C to %C ignored",first,last)
+ end
+ end
+ return nofdone
+end
+formatreaders[14]=function(f,fontdata,offset)
+ if offset and offset~=0 then
+ setposition(f,offset)
+ local format=readushort(f)
+ local length=readulong(f)
+ local nofrecords=readulong(f)
+ local records={}
+ local variants={}
+ local nofdone=0
+ fontdata.variants=variants
+ for i=1,nofrecords do
+ records[i]={
+ selector=readuint(f),
+ default=readulong(f),
+ other=readulong(f),
+ }
+ end
+ for i=1,nofrecords do
+ local record=records[i]
+ local selector=record.selector
+ local default=record.default
+ local other=record.other
+ local other=record.other
+ if other~=0 then
+ setposition(f,offset+other)
+ local mapping={}
+ local count=readulong(f)
+ for i=1,count do
+ mapping[readuint(f)]=readushort(f)
+ end
+ nofdone=nofdone+count
+ variants[selector]=mapping
+ end
+ end
+ return nofdone
+ else
+ return 0
+ end
+end
+local function checkcmap(f,fontdata,records,platform,encoding,format)
+ local data=records[platform]
+ if not data then
+ return 0
+ end
+ data=data[encoding]
+ if not data then
+ return 0
+ end
+ data=data[format]
+ if not data then
+ return 0
+ end
+ local reader=formatreaders[format]
+ if not reader then
+ return 0
+ end
+ local p=platforms[platform]
+ local e=encodings[p]
+ local n=reader(f,fontdata,data) or 0
+ if trace_cmap then
+ report("cmap checked: platform %i (%s), encoding %i (%s), format %i, new unicodes %i",platform,p,encoding,e and e[encoding] or "?",format,n)
+ end
+ return n
+end
+function readers.cmap(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"cmap",specification.glyphs)
+ if tableoffset then
+ local version=readushort(f)
+ local noftables=readushort(f)
+ local records={}
+ local unicodecid=false
+ local variantcid=false
+ local variants={}
+ local duplicates=fontdata.duplicates or {}
+ fontdata.duplicates=duplicates
+ for i=1,noftables do
+ local platform=readushort(f)
+ local encoding=readushort(f)
+ local offset=readulong(f)
+ local record=records[platform]
+ if not record then
+ records[platform]={
+ [encoding]={
+ offsets={ offset },
+ formats={},
+ }
+ }
+ else
+ local subtables=record[encoding]
+ if not subtables then
+ record[encoding]={
+ offsets={ offset },
+ formats={},
+ }
+ else
+ local offsets=subtables.offsets
+ offsets[#offsets+1]=offset
+ end
+ end
+ end
+ if trace_cmap then
+ report("found cmaps:")
+ end
+ for platform,record in sortedhash(records) do
+ local p=platforms[platform]
+ local e=encodings[p]
+ local sp=supported[platform]
+ local ps=p or "?"
+ if trace_cmap then
+ if sp then
+ report(" platform %i: %s",platform,ps)
+ else
+ report(" platform %i: %s (unsupported)",platform,ps)
+ end
+ end
+ for encoding,subtables in sortedhash(record) do
+ local se=sp and sp[encoding]
+ local es=e and e[encoding] or "?"
+ if trace_cmap then
+ if se then
+ report(" encoding %i: %s",encoding,es)
+ else
+ report(" encoding %i: %s (unsupported)",encoding,es)
+ end
+ end
+ local offsets=subtables.offsets
+ local formats=subtables.formats
+ for i=1,#offsets do
+ local offset=tableoffset+offsets[i]
+ setposition(f,offset)
+ formats[readushort(f)]=offset
+ end
+ record[encoding]=formats
+ if trace_cmap then
+ local list=sortedkeys(formats)
+ for i=1,#list do
+ if not (se and se[list[i]]) then
+ list[i]=list[i].." (unsupported)"
+ end
+ end
+ report(" formats: % t",list)
+ end
+ end
+ end
+ local ok=false
+ for i=1,#sequence do
+ local si=sequence[i]
+ local sp,se,sf=si[1],si[2],si[3]
+ if checkcmap(f,fontdata,records,sp,se,sf)>0 then
+ ok=true
+ end
+ end
+ if not ok then
+ report("no useable unicode cmap found")
+ end
+ fontdata.cidmaps={
+ version=version,
+ noftables=noftables,
+ records=records,
+ }
+ else
+ fontdata.cidmaps={}
+ end
+end
+function readers.loca(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"loca",specification.glyphs)
+end
+function readers.glyf(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"glyf",specification.glyphs)
+end
+function readers.colr(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"colr",specification.glyphs)
+end
+function readers.cpal(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"cpal",specification.glyphs)
+end
+function readers.svg(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"svg",specification.glyphs)
+end
+function readers.sbix(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"sbix",specification.glyphs)
+end
+function readers.cbdt(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"cbdt",specification.glyphs)
+end
+function readers.cblc(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"cblc",specification.glyphs)
+end
+function readers.ebdt(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"ebdt",specification.glyphs)
+end
+function readers.ebsc(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"ebsc",specification.glyphs)
+end
+function readers.eblc(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"eblc",specification.glyphs)
+end
+function readers.kern(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"kern",specification.kerns)
+ if tableoffset then
+ local version=readushort(f)
+ local noftables=readushort(f)
+ for i=1,noftables do
+ local version=readushort(f)
+ local length=readushort(f)
+ local coverage=readushort(f)
+ local format=bit32.rshift(coverage,8)
+ if format==0 then
+ local nofpairs=readushort(f)
+ local searchrange=readushort(f)
+ local entryselector=readushort(f)
+ local rangeshift=readushort(f)
+ local kerns={}
+ local glyphs=fontdata.glyphs
+ for i=1,nofpairs do
+ local left=readushort(f)
+ local right=readushort(f)
+ local kern=readfword(f)
+ local glyph=glyphs[left]
+ local kerns=glyph.kerns
+ if kerns then
+ kerns[right]=kern
+ else
+ glyph.kerns={ [right]=kern }
+ end
+ end
+ elseif format==2 then
+ report("todo: kern classes")
+ else
+ report("todo: kerns")
+ end
+ end
+ end
+end
+function readers.gdef(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"gdef",specification.details)
+end
+function readers.gsub(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"gsub",specification.details)
+end
+function readers.gpos(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"gpos",specification.details)
+end
+function readers.math(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"math",specification.details)
+end
+local function getinfo(maindata,sub,platformnames,rawfamilynames,metricstoo,instancenames)
+ local fontdata=sub and maindata.subfonts and maindata.subfonts[sub] or maindata
+ local names=fontdata.names
+ local info=nil
+ if names then
+ local metrics=fontdata.windowsmetrics or {}
+ local postscript=fontdata.postscript or {}
+ local fontheader=fontdata.fontheader or {}
+ local cffinfo=fontdata.cffinfo or {}
+ local filename=fontdata.filename
+ local weight=getname(fontdata,"weight") or (cffinfo and cffinfo.weight) or (metrics and metrics.weight)
+ local width=getname(fontdata,"width") or (cffinfo and cffinfo.width ) or (metrics and metrics.width )
+ local fontname=getname(fontdata,"postscriptname")
+ local fullname=getname(fontdata,"fullname")
+ local family=getname(fontdata,"family")
+ local subfamily=getname(fontdata,"subfamily")
+ local familyname=getname(fontdata,"typographicfamily")
+ local subfamilyname=getname(fontdata,"typographicsubfamily")
+ local compatiblename=getname(fontdata,"compatiblefullname")
+ if rawfamilynames then
+ else
+ if not familyname then familyname=family end
+ if not subfamilyname then subfamilyname=subfamily end
+ end
+ if platformnames then
+ platformnames=fontdata.platformnames
+ end
+ if instancenames then
+ local variabledata=fontdata.variabledata
+ if variabledata then
+ local instances=variabledata and variabledata.instances
+ if instances then
+ instancenames={}
+ for i=1,#instances do
+ instancenames[i]=lower(stripstring(instances[i].subfamily))
+ end
+ else
+ instancenames=nil
+ end
+ else
+ instancenames=nil
+ end
+ end
+ info={
+ subfontindex=fontdata.subfontindex or sub or 0,
+ version=getname(fontdata,"version"),
+ fontname=fontname,
+ fullname=fullname,
+ family=family,
+ subfamily=subfamily,
+ familyname=familyname,
+ subfamilyname=subfamilyname,
+ compatiblename=compatiblename,
+ weight=weight and lower(weight),
+ width=width and lower(width),
+ pfmweight=metrics.weightclass or 400,
+ pfmwidth=metrics.widthclass or 5,
+ panosewidth=metrics.panosewidth,
+ panoseweight=metrics.panoseweight,
+ italicangle=postscript.italicangle or 0,
+ units=fontheader.units or 0,
+ designsize=fontdata.designsize,
+ minsize=fontdata.minsize,
+ maxsize=fontdata.maxsize,
+ monospaced=(tonumber(postscript.monospaced or 0)>0) or metrics.panosewidth=="monospaced",
+ averagewidth=metrics.averagewidth,
+ xheight=metrics.xheight,
+ capheight=metrics.capheight,
+ ascender=metrics.typoascender,
+ descender=metrics.typodescender,
+ platformnames=platformnames or nil,
+ instancenames=instancenames or nil,
+ }
+ if metricstoo then
+ local keys={
+ "version",
+ "ascender","descender","linegap",
+ "maxadvancewidth","maxadvanceheight","maxextent",
+ "minbottomsidebearing","mintopsidebearing",
+ }
+ local h=fontdata.horizontalheader or {}
+ local v=fontdata.verticalheader or {}
+ if h then
+ local th={}
+ local tv={}
+ for i=1,#keys do
+ local key=keys[i]
+ th[key]=h[key] or 0
+ tv[key]=v[key] or 0
+ end
+ info.horizontalmetrics=th
+ info.verticalmetrics=tv
+ end
+ end
+ elseif n then
+ info={
+ filename=fontdata.filename,
+ comment="there is no info for subfont "..n,
+ }
+ else
+ info={
+ filename=fontdata.filename,
+ comment="there is no info",
+ }
+ end
+ return info
+end
+local function loadtables(f,specification,offset)
+ if offset then
+ setposition(f,offset)
+ end
+ local tables={}
+ local basename=file.basename(specification.filename)
+ local filesize=specification.filesize
+ local filetime=specification.filetime
+ local fontdata={
+ filename=basename,
+ filesize=filesize,
+ filetime=filetime,
+ version=readstring(f,4),
+ noftables=readushort(f),
+ searchrange=readushort(f),
+ entryselector=readushort(f),
+ rangeshift=readushort(f),
+ tables=tables,
+ foundtables=false,
+ }
+ for i=1,fontdata.noftables do
+ local tag=lower(stripstring(readstring(f,4)))
+ local checksum=readulong(f)
+ local offset=readulong(f)
+ local length=readulong(f)
+ if offset+length>filesize then
+ report("bad %a table in file %a",tag,basename)
+ end
+ tables[tag]={
+ checksum=checksum,
+ offset=offset,
+ length=length,
+ }
+ end
+ fontdata.foundtables=sortedkeys(tables)
+ if tables.cff or tables.cff2 then
+ fontdata.format="opentype"
+ else
+ fontdata.format="truetype"
+ end
+ return fontdata
+end
+local function prepareglyps(fontdata)
+ local glyphs=setmetatableindex(function(t,k)
+ local v={
+ index=k,
+ }
+ t[k]=v
+ return v
+ end)
+ fontdata.glyphs=glyphs
+ fontdata.mapping={}
+end
+local function readtable(tag,f,fontdata,specification,...)
+ local reader=readers[tag]
+ if reader then
+ reader(f,fontdata,specification,...)
+ end
+end
+local variablefonts_supported=(context and true) or (logs and logs.application and true) or false
+local function readdata(f,offset,specification)
+ local fontdata=loadtables(f,specification,offset)
+ if specification.glyphs then
+ prepareglyps(fontdata)
+ end
+ if not variablefonts_supported then
+ specification.instance=nil
+ specification.variable=nil
+ specification.factors=nil
+ end
+ fontdata.temporary={}
+ readtable("name",f,fontdata,specification)
+ local askedname=specification.askedname
+ if askedname then
+ local fullname=getname(fontdata,"fullname") or ""
+ local cleanname=gsub(askedname,"[^a-zA-Z0-9]","")
+ local foundname=gsub(fullname,"[^a-zA-Z0-9]","")
+ if lower(cleanname)~=lower(foundname) then
+ return
+ end
+ end
+ readtable("stat",f,fontdata,specification)
+ readtable("avar",f,fontdata,specification)
+ readtable("fvar",f,fontdata,specification)
+ if variablefonts_supported then
+ local variabledata=fontdata.variabledata
+ if variabledata then
+ local instances=variabledata.instances
+ local axis=variabledata.axis
+ if axis and (not instances or #instances==0) then
+ instances={}
+ variabledata.instances=instances
+ local function add(n,subfamily,value)
+ local values={}
+ for i=1,#axis do
+ local a=axis[i]
+ values[i]={
+ axis=a.tag,
+ value=i==n and value or a.default,
+ }
+ end
+ instances[#instances+1]={
+ subfamily=subfamily,
+ values=values,
+ }
+ end
+ for i=1,#axis do
+ local a=axis[i]
+ local tag=a.tag
+ add(i,"default"..tag,a.default)
+ add(i,"minimum"..tag,a.minimum)
+ add(i,"maximum"..tag,a.maximum)
+ end
+ end
+ end
+ if not specification.factors then
+ local instance=specification.instance
+ if type(instance)=="string" then
+ local factors=helpers.getfactors(fontdata,instance)
+ if factors then
+ specification.factors=factors
+ fontdata.factors=factors
+ fontdata.instance=instance
+ report("user instance: %s, factors: % t",instance,factors)
+ else
+ report("user instance: %s, bad factors",instance)
+ end
+ end
+ end
+ if not fontdata.factors then
+ if fontdata.variabledata then
+ local factors=helpers.getfactors(fontdata,true)
+ if factors then
+ specification.factors=factors
+ fontdata.factors=factors
+ report("factors: % t",factors)
+ else
+ report("bad factors")
+ end
+ else
+ end
+ end
+ end
+ readtable("os/2",f,fontdata,specification)
+ readtable("head",f,fontdata,specification)
+ readtable("maxp",f,fontdata,specification)
+ readtable("hhea",f,fontdata,specification)
+ readtable("vhea",f,fontdata,specification)
+ readtable("hmtx",f,fontdata,specification)
+ readtable("vmtx",f,fontdata,specification)
+ readtable("vorg",f,fontdata,specification)
+ readtable("post",f,fontdata,specification)
+ readtable("mvar",f,fontdata,specification)
+ readtable("hvar",f,fontdata,specification)
+ readtable("vvar",f,fontdata,specification)
+ readtable("gdef",f,fontdata,specification)
+ readtable("cff",f,fontdata,specification)
+ readtable("cff2",f,fontdata,specification)
+ readtable("cmap",f,fontdata,specification)
+ readtable("loca",f,fontdata,specification)
+ readtable("glyf",f,fontdata,specification)
+ readtable("colr",f,fontdata,specification)
+ readtable("cpal",f,fontdata,specification)
+ readtable("svg",f,fontdata,specification)
+ readtable("sbix",f,fontdata,specification)
+ readtable("cbdt",f,fontdata,specification)
+ readtable("cblc",f,fontdata,specification)
+ readtable("ebdt",f,fontdata,specification)
+ readtable("eblc",f,fontdata,specification)
+ readtable("kern",f,fontdata,specification)
+ readtable("gsub",f,fontdata,specification)
+ readtable("gpos",f,fontdata,specification)
+ readtable("math",f,fontdata,specification)
+ fontdata.locations=nil
+ fontdata.tables=nil
+ fontdata.cidmaps=nil
+ fontdata.dictionaries=nil
+ return fontdata
+end
+local function loadfontdata(specification)
+ local filename=specification.filename
+ local fileattr=lfs.attributes(filename)
+ local filesize=fileattr and fileattr.size or 0
+ local filetime=fileattr and fileattr.modification or 0
+ local f=openfile(filename,true)
+ if not f then
+ report("unable to open %a",filename)
+ elseif filesize==0 then
+ report("empty file %a",filename)
+ closefile(f)
+ else
+ specification.filesize=filesize
+ specification.filetime=filetime
+ local version=readstring(f,4)
+ local fontdata=nil
+ if version=="OTTO" or version=="true" or version=="\0\1\0\0" then
+ fontdata=readdata(f,0,specification)
+ elseif version=="ttcf" then
+ local subfont=tonumber(specification.subfont)
+ local offsets={}
+ local ttcversion=readulong(f)
+ local nofsubfonts=readulong(f)
+ for i=1,nofsubfonts do
+ offsets[i]=readulong(f)
+ end
+ if subfont then
+ if subfont>=1 and subfont<=nofsubfonts then
+ fontdata=readdata(f,offsets[subfont],specification)
+ else
+ report("no subfont %a in file %a",subfont,filename)
+ end
+ else
+ subfont=specification.subfont
+ if type(subfont)=="string" and subfont~="" then
+ specification.askedname=subfont
+ for i=1,nofsubfonts do
+ fontdata=readdata(f,offsets[i],specification)
+ if fontdata then
+ fontdata.subfontindex=i
+ report("subfont named %a has index %a",subfont,i)
+ break
+ end
+ end
+ if not fontdata then
+ report("no subfont named %a",subfont)
+ end
+ else
+ local subfonts={}
+ fontdata={
+ filename=filename,
+ filesize=filesize,
+ filetime=filetime,
+ version=version,
+ subfonts=subfonts,
+ ttcversion=ttcversion,
+ nofsubfonts=nofsubfonts,
+ }
+ for i=1,nofsubfonts do
+ subfonts[i]=readdata(f,offsets[i],specification)
+ end
+ end
+ end
+ else
+ report("unknown version %a in file %a",version,filename)
+ end
+ closefile(f)
+ return fontdata or {}
+ end
+end
+local function loadfont(specification,n,instance)
+ if type(specification)=="string" then
+ specification={
+ filename=specification,
+ info=true,
+ details=true,
+ glyphs=true,
+ shapes=true,
+ kerns=true,
+ variable=true,
+ globalkerns=true,
+ lookups=true,
+ subfont=n or true,
+ tounicode=false,
+ instance=instance
+ }
+ end
+ if specification.shapes or specification.lookups or specification.kerns then
+ specification.glyphs=true
+ end
+ if specification.glyphs then
+ specification.details=true
+ end
+ if specification.details then
+ specification.info=true
+ end
+ if specification.platformnames then
+ specification.platformnames=true
+ end
+ if specification.instance or instance then
+ specification.variable=true
+ specification.instance=specification.instance or instance
+ end
+ local function message(str)
+ report("fatal error in file %a: %s\n%s",specification.filename,str,debug.traceback())
+ end
+ local ok,result=xpcall(loadfontdata,message,specification)
+ if ok then
+ return result
+ end
+end
+function readers.loadshapes(filename,n,instance,streams)
+ local fontdata=loadfont {
+ filename=filename,
+ shapes=true,
+ streams=streams,
+ variable=true,
+ subfont=n,
+ instance=instance,
+ }
+ if fontdata then
+ for k,v in next,fontdata.glyphs do
+ v.class=nil
+ v.index=nil
+ v.math=nil
+ end
+ end
+ return fontdata and {
+ filename=filename,
+ format=fontdata.format,
+ glyphs=fontdata.glyphs,
+ units=fontdata.fontheader.units,
+ } or {
+ filename=filename,
+ format="unknown",
+ glyphs={},
+ units=0,
+ }
+end
+function readers.loadfont(filename,n,instance)
+ local fontdata=loadfont {
+ filename=filename,
+ glyphs=true,
+ shapes=false,
+ lookups=true,
+ variable=true,
+ subfont=n,
+ instance=instance,
+ }
+ if fontdata then
+ return {
+ tableversion=tableversion,
+ creator="context mkiv",
+ size=fontdata.filesize,
+ time=fontdata.filetime,
+ glyphs=fontdata.glyphs,
+ descriptions=fontdata.descriptions,
+ format=fontdata.format,
+ goodies={},
+ metadata=getinfo(fontdata,n,false,false,true,true),
+ properties={
+ hasitalics=fontdata.hasitalics or false,
+ maxcolorclass=fontdata.maxcolorclass,
+ hascolor=fontdata.hascolor or false,
+ instance=fontdata.instance,
+ factors=fontdata.factors,
+ },
+ resources={
+ filename=filename,
+ private=privateoffset,
+ duplicates=fontdata.duplicates or {},
+ features=fontdata.features or {},
+ sublookups=fontdata.sublookups or {},
+ marks=fontdata.marks or {},
+ markclasses=fontdata.markclasses or {},
+ marksets=fontdata.marksets or {},
+ sequences=fontdata.sequences or {},
+ variants=fontdata.variants,
+ version=getname(fontdata,"version"),
+ cidinfo=fontdata.cidinfo,
+ mathconstants=fontdata.mathconstants,
+ colorpalettes=fontdata.colorpalettes,
+ svgshapes=fontdata.svgshapes,
+ sbixshapes=fontdata.sbixshapes,
+ variabledata=fontdata.variabledata,
+ foundtables=fontdata.foundtables,
+ },
+ }
+ end
+end
+function readers.getinfo(filename,specification)
+ local subfont=nil
+ local platformnames=false
+ local rawfamilynames=false
+ local instancenames=true
+ if type(specification)=="table" then
+ subfont=tonumber(specification.subfont)
+ platformnames=specification.platformnames
+ rawfamilynames=specification.rawfamilynames
+ else
+ subfont=tonumber(specification)
+ end
+ local fontdata=loadfont {
+ filename=filename,
+ details=true,
+ platformnames=platformnames,
+ instancenames=true,
+ }
+ if fontdata then
+ local subfonts=fontdata.subfonts
+ if not subfonts then
+ return getinfo(fontdata,nil,platformnames,rawfamilynames,false,instancenames)
+ elseif not subfont then
+ local info={}
+ for i=1,#subfonts do
+ info[i]=getinfo(fontdata,i,platformnames,rawfamilynames,false,instancenames)
+ end
+ return info
+ elseif subfont>=1 and subfont<=#subfonts then
+ return getinfo(fontdata,subfont,platformnames,rawfamilynames,false,instancenames)
+ else
+ return {
+ filename=filename,
+ comment="there is no subfont "..subfont.." in this file"
+ }
+ end
+ else
+ return {
+ filename=filename,
+ comment="the file cannot be opened for reading",
+ }
+ end
+end
+function readers.rehash(fontdata,hashmethod)
+ report("the %a helper is not yet implemented","rehash")
+end
+function readers.checkhash(fontdata)
+ report("the %a helper is not yet implemented","checkhash")
+end
+function readers.pack(fontdata,hashmethod)
+ report("the %a helper is not yet implemented","pack")
+end
+function readers.unpack(fontdata)
+ report("the %a helper is not yet implemented","unpack")
+end
+function readers.expand(fontdata)
+ report("the %a helper is not yet implemented","unpack")
+end
+function readers.compact(fontdata)
+ report("the %a helper is not yet implemented","compact")
+end
+local extenders={}
+function readers.registerextender(extender)
+ extenders[#extenders+1]=extender
+end
+function readers.extend(fontdata)
+ for i=1,#extenders do
+ local extender=extenders[i]
+ local name=extender.name or "unknown"
+ local action=extender.action
+ if action then
+ action(fontdata)
+ end
+ end
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-cff']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local next,type,tonumber=next,type,tonumber
+local byte,char,gmatch=string.byte,string.char,string.gmatch
+local concat,remove=table.concat,table.remove
+local floor,abs,round,ceil,min,max=math.floor,math.abs,math.round,math.ceil,math.min,math.max
+local P,C,R,S,C,Cs,Ct=lpeg.P,lpeg.C,lpeg.R,lpeg.S,lpeg.C,lpeg.Cs,lpeg.Ct
+local lpegmatch=lpeg.match
+local formatters=string.formatters
+local bytetable=string.bytetable
+local readers=fonts.handlers.otf.readers
+local streamreader=readers.streamreader
+local readstring=streamreader.readstring
+local readbyte=streamreader.readcardinal1
+local readushort=streamreader.readcardinal2
+local readuint=streamreader.readcardinal3
+local readulong=streamreader.readcardinal4
+local setposition=streamreader.setposition
+local getposition=streamreader.getposition
+local readbytetable=streamreader.readbytetable
+local setmetatableindex=table.setmetatableindex
+local trace_charstrings=false trackers.register("fonts.cff.charstrings",function(v) trace_charstrings=v end)
+local report=logs.reporter("otf reader","cff")
+local parsedictionaries
+local parsecharstring
+local parsecharstrings
+local resetcharstrings
+local parseprivates
+local startparsing
+local stopparsing
+local defaultstrings={ [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","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","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","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",
+ "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",
+ "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","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",
+ "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","001.000","001.001","001.002","001.003",
+ "Black","Bold","Book","Light","Medium","Regular","Roman","Semibold",
+}
+local cffreaders={
+ readbyte,
+ readushort,
+ readuint,
+ readulong,
+}
+local function readheader(f)
+ local offset=getposition(f)
+ local major=readbyte(f)
+ local header={
+ offset=offset,
+ major=major,
+ minor=readbyte(f),
+ size=readbyte(f),
+ }
+ if major==1 then
+ header.dsize=readbyte(f)
+ elseif major==2 then
+ header.dsize=readushort(f)
+ else
+ end
+ setposition(f,offset+header.size)
+ return header
+end
+local function readlengths(f,longcount)
+ local count=longcount and readulong(f) or readushort(f)
+ if count==0 then
+ return {}
+ end
+ local osize=readbyte(f)
+ local read=cffreaders[osize]
+ if not read then
+ report("bad offset size: %i",osize)
+ return {}
+ end
+ local lengths={}
+ local previous=read(f)
+ for i=1,count do
+ local offset=read(f)
+ local length=offset-previous
+ if length<0 then
+ report("bad offset: %i",length)
+ length=0
+ end
+ lengths[i]=length
+ previous=offset
+ end
+ return lengths
+end
+local function readfontnames(f)
+ local names=readlengths(f)
+ for i=1,#names do
+ names[i]=readstring(f,names[i])
+ end
+ return names
+end
+local function readtopdictionaries(f)
+ local dictionaries=readlengths(f)
+ for i=1,#dictionaries do
+ dictionaries[i]=readstring(f,dictionaries[i])
+ end
+ return dictionaries
+end
+local function readstrings(f)
+ local lengths=readlengths(f)
+ local strings=setmetatableindex({},defaultstrings)
+ local index=#defaultstrings
+ for i=1,#lengths do
+ index=index+1
+ strings[index]=readstring(f,lengths[i])
+ end
+ return strings
+end
+do
+ local stack={}
+ local top=0
+ local result={}
+ local strings={}
+ local p_single=P("\00")/function()
+ result.version=strings[stack[top]] or "unset"
+ top=0
+ end+P("\01")/function()
+ result.notice=strings[stack[top]] or "unset"
+ top=0
+ end+P("\02")/function()
+ result.fullname=strings[stack[top]] or "unset"
+ top=0
+ end+P("\03")/function()
+ result.familyname=strings[stack[top]] or "unset"
+ top=0
+ end+P("\04")/function()
+ result.weight=strings[stack[top]] or "unset"
+ top=0
+ end+P("\05")/function()
+ result.fontbbox={ unpack(stack,1,4) }
+ top=0
+ end
++P("\13")/function()
+ result.uniqueid=stack[top]
+ top=0
+ end+P("\14")/function()
+ result.xuid=concat(stack,"",1,top)
+ top=0
+ end+P("\15")/function()
+ result.charset=stack[top]
+ top=0
+ end+P("\16")/function()
+ result.encoding=stack[top]
+ top=0
+ end+P("\17")/function()
+ result.charstrings=stack[top]
+ top=0
+ end+P("\18")/function()
+ result.private={
+ size=stack[top-1],
+ offset=stack[top],
+ }
+ top=0
+ end+P("\19")/function()
+ result.subroutines=stack[top]
+ top=0
+ end+P("\20")/function()
+ result.defaultwidthx=stack[top]
+ top=0
+ end+P("\21")/function()
+ result.nominalwidthx=stack[top]
+ top=0
+ end
++P("\24")/function()
+ result.vstore=stack[top]
+ top=0
+ end+P("\25")/function()
+ result.maxstack=stack[top]
+ top=0
+ end
+ local p_double=P("\12")*(
+ P("\00")/function()
+ result.copyright=stack[top]
+ top=0
+ end+P("\01")/function()
+ result.monospaced=stack[top]==1 and true or false
+ top=0
+ end+P("\02")/function()
+ result.italicangle=stack[top]
+ top=0
+ end+P("\03")/function()
+ result.underlineposition=stack[top]
+ top=0
+ end+P("\04")/function()
+ result.underlinethickness=stack[top]
+ top=0
+ end+P("\05")/function()
+ result.painttype=stack[top]
+ top=0
+ end+P("\06")/function()
+ result.charstringtype=stack[top]
+ top=0
+ end+P("\07")/function()
+ result.fontmatrix={ unpack(stack,1,6) }
+ top=0
+ end+P("\08")/function()
+ result.strokewidth=stack[top]
+ top=0
+ end+P("\20")/function()
+ result.syntheticbase=stack[top]
+ top=0
+ end+P("\21")/function()
+ result.postscript=strings[stack[top]] or "unset"
+ top=0
+ end+P("\22")/function()
+ result.basefontname=strings[stack[top]] or "unset"
+ top=0
+ end+P("\21")/function()
+ result.basefontblend=stack[top]
+ top=0
+ end+P("\30")/function()
+ result.cid.registry=strings[stack[top-2]] or "unset"
+ result.cid.ordering=strings[stack[top-1]] or "unset"
+ result.cid.supplement=stack[top]
+ top=0
+ end+P("\31")/function()
+ result.cid.fontversion=stack[top]
+ top=0
+ end+P("\32")/function()
+ result.cid.fontrevision=stack[top]
+ top=0
+ end+P("\33")/function()
+ result.cid.fonttype=stack[top]
+ top=0
+ end+P("\34")/function()
+ result.cid.count=stack[top]
+ top=0
+ end+P("\35")/function()
+ result.cid.uidbase=stack[top]
+ top=0
+ end+P("\36")/function()
+ result.cid.fdarray=stack[top]
+ top=0
+ end+P("\37")/function()
+ result.cid.fdselect=stack[top]
+ top=0
+ end+P("\38")/function()
+ result.cid.fontname=strings[stack[top]] or "unset"
+ top=0
+ end
+ )
+ local p_last=P("\x0F")/"0"+P("\x1F")/"1"+P("\x2F")/"2"+P("\x3F")/"3"+P("\x4F")/"4"+P("\x5F")/"5"+P("\x6F")/"6"+P("\x7F")/"7"+P("\x8F")/"8"+P("\x9F")/"9"+P("\xAF")/""+P("\xBF")/""+P("\xCF")/""+P("\xDF")/""+P("\xEF")/""+R("\xF0\xFF")/""
+ local remap={
+ ["\x00"]="00",["\x01"]="01",["\x02"]="02",["\x03"]="03",["\x04"]="04",["\x05"]="05",["\x06"]="06",["\x07"]="07",["\x08"]="08",["\x09"]="09",["\x0A"]="0.",["\x0B"]="0E",["\x0C"]="0E-",["\x0D"]="0",["\x0E"]="0-",["\x0F"]="0",
+ ["\x10"]="10",["\x11"]="11",["\x12"]="12",["\x13"]="13",["\x14"]="14",["\x15"]="15",["\x16"]="16",["\x17"]="17",["\x18"]="18",["\x19"]="19",["\x1A"]="0.",["\x1B"]="0E",["\x1C"]="0E-",["\x1D"]="0",["\x1E"]="0-",["\x1F"]="0",
+ ["\x20"]="20",["\x21"]="21",["\x22"]="22",["\x23"]="23",["\x24"]="24",["\x25"]="25",["\x26"]="26",["\x27"]="27",["\x28"]="28",["\x29"]="29",["\x2A"]="0.",["\x2B"]="0E",["\x2C"]="0E-",["\x2D"]="0",["\x2E"]="0-",["\x2F"]="0",
+ ["\x30"]="30",["\x31"]="31",["\x32"]="32",["\x33"]="33",["\x34"]="34",["\x35"]="35",["\x36"]="36",["\x37"]="37",["\x38"]="38",["\x39"]="39",["\x3A"]="0.",["\x3B"]="0E",["\x3C"]="0E-",["\x3D"]="0",["\x3E"]="0-",["\x3F"]="0",
+ ["\x40"]="40",["\x41"]="41",["\x42"]="42",["\x43"]="43",["\x44"]="44",["\x45"]="45",["\x46"]="46",["\x47"]="47",["\x48"]="48",["\x49"]="49",["\x4A"]="0.",["\x4B"]="0E",["\x4C"]="0E-",["\x4D"]="0",["\x4E"]="0-",["\x4F"]="0",
+ ["\x50"]="50",["\x51"]="51",["\x52"]="52",["\x53"]="53",["\x54"]="54",["\x55"]="55",["\x56"]="56",["\x57"]="57",["\x58"]="58",["\x59"]="59",["\x5A"]="0.",["\x5B"]="0E",["\x5C"]="0E-",["\x5D"]="0",["\x5E"]="0-",["\x5F"]="0",
+ ["\x60"]="60",["\x61"]="61",["\x62"]="62",["\x63"]="63",["\x64"]="64",["\x65"]="65",["\x66"]="66",["\x67"]="67",["\x68"]="68",["\x69"]="69",["\x6A"]="0.",["\x6B"]="0E",["\x6C"]="0E-",["\x6D"]="0",["\x6E"]="0-",["\x6F"]="0",
+ ["\x70"]="70",["\x71"]="71",["\x72"]="72",["\x73"]="73",["\x74"]="74",["\x75"]="75",["\x76"]="76",["\x77"]="77",["\x78"]="78",["\x79"]="79",["\x7A"]="0.",["\x7B"]="0E",["\x7C"]="0E-",["\x7D"]="0",["\x7E"]="0-",["\x7F"]="0",
+ ["\x80"]="80",["\x81"]="81",["\x82"]="82",["\x83"]="83",["\x84"]="84",["\x85"]="85",["\x86"]="86",["\x87"]="87",["\x88"]="88",["\x89"]="89",["\x8A"]="0.",["\x8B"]="0E",["\x8C"]="0E-",["\x8D"]="0",["\x8E"]="0-",["\x8F"]="0",
+ ["\x90"]="90",["\x91"]="91",["\x92"]="92",["\x93"]="93",["\x94"]="94",["\x95"]="95",["\x96"]="96",["\x97"]="97",["\x98"]="98",["\x99"]="99",["\x9A"]="0.",["\x9B"]="0E",["\x9C"]="0E-",["\x9D"]="0",["\x9E"]="0-",["\x9F"]="0",
+ ["\xA0"]=".0",["\xA1"]=".1",["\xA2"]=".2",["\xA3"]=".3",["\xA4"]=".4",["\xA5"]=".5",["\xA6"]=".6",["\xA7"]=".7",["\xA8"]=".8",["\xA9"]=".9",["\xAA"]="..",["\xAB"]=".E",["\xAC"]=".E-",["\xAD"]=".",["\xAE"]=".-",["\xAF"]=".",
+ ["\xB0"]="E0",["\xB1"]="E1",["\xB2"]="E2",["\xB3"]="E3",["\xB4"]="E4",["\xB5"]="E5",["\xB6"]="E6",["\xB7"]="E7",["\xB8"]="E8",["\xB9"]="E9",["\xBA"]="E.",["\xBB"]="EE",["\xBC"]="EE-",["\xBD"]="E",["\xBE"]="E-",["\xBF"]="E",
+ ["\xC0"]="E-0",["\xC1"]="E-1",["\xC2"]="E-2",["\xC3"]="E-3",["\xC4"]="E-4",["\xC5"]="E-5",["\xC6"]="E-6",["\xC7"]="E-7",["\xC8"]="E-8",["\xC9"]="E-9",["\xCA"]="E-.",["\xCB"]="E-E",["\xCC"]="E-E-",["\xCD"]="E-",["\xCE"]="E--",["\xCF"]="E-",
+ ["\xD0"]="-0",["\xD1"]="-1",["\xD2"]="-2",["\xD3"]="-3",["\xD4"]="-4",["\xD5"]="-5",["\xD6"]="-6",["\xD7"]="-7",["\xD8"]="-8",["\xD9"]="-9",["\xDA"]="-.",["\xDB"]="-E",["\xDC"]="-E-",["\xDD"]="-",["\xDE"]="--",["\xDF"]="-",
+ }
+ local p_nibbles=P("\30")*Cs(((1-p_last)/remap)^0+p_last)/function(n)
+ top=top+1
+ stack[top]=tonumber(n) or 0
+ end
+ local p_byte=C(R("\32\246"))/function(b0)
+ top=top+1
+ stack[top]=byte(b0)-139
+ end
+ local p_positive=C(R("\247\250"))*C(1)/function(b0,b1)
+ top=top+1
+ stack[top]=(byte(b0)-247)*256+byte(b1)+108
+ end
+ local p_negative=C(R("\251\254"))*C(1)/function(b0,b1)
+ top=top+1
+ stack[top]=-(byte(b0)-251)*256-byte(b1)-108
+ end
+ local p_short=P("\28")*C(1)*C(1)/function(b1,b2)
+ top=top+1
+ local n=0x100*byte(b1)+byte(b2)
+ if n>=0x8000 then
+ stack[top]=n-0xFFFF-1
+ else
+ stack[top]=n
+ end
+ end
+ local p_long=P("\29")*C(1)*C(1)*C(1)*C(1)/function(b1,b2,b3,b4)
+ top=top+1
+ local n=0x1000000*byte(b1)+0x10000*byte(b2)+0x100*byte(b3)+byte(b4)
+ if n>=0x8000000 then
+ stack[top]=n-0xFFFFFFFF-1
+ else
+ stack[top]=n
+ end
+ end
+ local p_unsupported=P(1)/function(detail)
+ top=0
+ end
+ local p_dictionary=(
+ p_byte+p_positive+p_negative+p_short+p_long+p_nibbles+p_single+p_double+p_unsupported
+ )^1
+ parsedictionaries=function(data,dictionaries,what)
+ stack={}
+ strings=data.strings
+ for i=1,#dictionaries do
+ top=0
+ result=what=="cff" and {
+ monospaced=false,
+ italicangle=0,
+ underlineposition=-100,
+ underlinethickness=50,
+ painttype=0,
+ charstringtype=2,
+ fontmatrix={ 0.001,0,0,0.001,0,0 },
+ fontbbox={ 0,0,0,0 },
+ strokewidth=0,
+ charset=0,
+ encoding=0,
+ cid={
+ fontversion=0,
+ fontrevision=0,
+ fonttype=0,
+ count=8720,
+ }
+ } or {
+ charstringtype=2,
+ charset=0,
+ vstore=0,
+ cid={
+ },
+ }
+ lpegmatch(p_dictionary,dictionaries[i])
+ dictionaries[i]=result
+ end
+ result={}
+ top=0
+ stack={}
+ end
+ parseprivates=function(data,dictionaries)
+ stack={}
+ strings=data.strings
+ for i=1,#dictionaries do
+ local private=dictionaries[i].private
+ if private and private.data then
+ top=0
+ result={
+ forcebold=false,
+ languagegroup=0,
+ expansionfactor=0.06,
+ initialrandomseed=0,
+ subroutines=0,
+ defaultwidthx=0,
+ nominalwidthx=0,
+ cid={
+ },
+ }
+ lpegmatch(p_dictionary,private.data)
+ private.data=result
+ end
+ end
+ result={}
+ top=0
+ stack={}
+ end
+ local x=0
+ local y=0
+ local width=false
+ local r=0
+ local stems=0
+ local globalbias=0
+ local localbias=0
+ local nominalwidth=0
+ local defaultwidth=0
+ local charset=false
+ local globals=false
+ local locals=false
+ local depth=1
+ local xmin=0
+ local xmax=0
+ local ymin=0
+ local ymax=0
+ local checked=false
+ local keepcurve=false
+ local version=2
+ local regions=false
+ local nofregions=0
+ local region=false
+ local factors=false
+ local axis=false
+ local vsindex=0
+ local function showstate(where)
+ report("%w%-10s : [%s] n=%i",depth*2,where,concat(stack," ",1,top),top)
+ end
+ local function showvalue(where,value,showstack)
+ if showstack then
+ report("%w%-10s : %s : [%s] n=%i",depth*2,where,tostring(value),concat(stack," ",1,top),top)
+ else
+ report("%w%-10s : %s",depth*2,where,tostring(value))
+ end
+ end
+ local function xymoveto()
+ if keepcurve then
+ r=r+1
+ result[r]={ x,y,"m" }
+ end
+ if checked then
+ if x>xmax then xmax=x elseif x<xmin then xmin=x end
+ if y>ymax then ymax=y elseif y<ymin then ymin=y end
+ else
+ xmin=x
+ ymin=y
+ xmax=x
+ ymax=y
+ checked=true
+ end
+ end
+ local function xmoveto()
+ if keepcurve then
+ r=r+1
+ result[r]={ x,y,"m" }
+ end
+ if not checked then
+ xmin=x
+ ymin=y
+ xmax=x
+ ymax=y
+ checked=true
+ elseif x>xmax then
+ xmax=x
+ elseif x<xmin then
+ xmin=x
+ end
+ end
+ local function ymoveto()
+ if keepcurve then
+ r=r+1
+ result[r]={ x,y,"m" }
+ end
+ if not checked then
+ xmin=x
+ ymin=y
+ xmax=x
+ ymax=y
+ checked=true
+ elseif y>ymax then
+ ymax=y
+ elseif y<ymin then
+ ymin=y
+ end
+ end
+ local function moveto()
+ if trace_charstrings then
+ showstate("moveto")
+ end
+ top=0
+ xymoveto()
+ end
+ local function xylineto()
+ if keepcurve then
+ r=r+1
+ result[r]={ x,y,"l" }
+ end
+ if checked then
+ if x>xmax then xmax=x elseif x<xmin then xmin=x end
+ if y>ymax then ymax=y elseif y<ymin then ymin=y end
+ else
+ xmin=x
+ ymin=y
+ xmax=x
+ ymax=y
+ checked=true
+ end
+ end
+ local function xlineto()
+ if keepcurve then
+ r=r+1
+ result[r]={ x,y,"l" }
+ end
+ if not checked then
+ xmin=x
+ ymin=y
+ xmax=x
+ ymax=y
+ checked=true
+ elseif x>xmax then
+ xmax=x
+ elseif x<xmin then
+ xmin=x
+ end
+ end
+ local function ylineto()
+ if keepcurve then
+ r=r+1
+ result[r]={ x,y,"l" }
+ end
+ if not checked then
+ xmin=x
+ ymin=y
+ xmax=x
+ ymax=y
+ checked=true
+ elseif y>ymax then
+ ymax=y
+ elseif y<ymin then
+ ymin=y
+ end
+ end
+ local function xycurveto(x1,y1,x2,y2,x3,y3)
+ if trace_charstrings then
+ showstate("curveto")
+ end
+ if keepcurve then
+ r=r+1
+ result[r]={ x1,y1,x2,y2,x3,y3,"c" }
+ end
+ if checked then
+ if x1>xmax then xmax=x1 elseif x1<xmin then xmin=x1 end
+ if y1>ymax then ymax=y1 elseif y1<ymin then ymin=y1 end
+ else
+ xmin=x1
+ ymin=y1
+ xmax=x1
+ ymax=y1
+ checked=true
+ end
+ if x2>xmax then xmax=x2 elseif x2<xmin then xmin=x2 end
+ if y2>ymax then ymax=y2 elseif y2<ymin then ymin=y2 end
+ if x3>xmax then xmax=x3 elseif x3<xmin then xmin=x3 end
+ if y3>ymax then ymax=y3 elseif y3<ymin then ymin=y3 end
+ end
+ local function rmoveto()
+ if not width then
+ if top>2 then
+ width=stack[1]
+ if trace_charstrings then
+ showvalue("backtrack width",width)
+ end
+ else
+ width=true
+ end
+ end
+ if trace_charstrings then
+ showstate("rmoveto")
+ end
+ x=x+stack[top-1]
+ y=y+stack[top]
+ top=0
+ xymoveto()
+ end
+ local function hmoveto()
+ if not width then
+ if top>1 then
+ width=stack[1]
+ if trace_charstrings then
+ showvalue("backtrack width",width)
+ end
+ else
+ width=true
+ end
+ end
+ if trace_charstrings then
+ showstate("hmoveto")
+ end
+ x=x+stack[top]
+ top=0
+ xmoveto()
+ end
+ local function vmoveto()
+ if not width then
+ if top>1 then
+ width=stack[1]
+ if trace_charstrings then
+ showvalue("backtrack width",width)
+ end
+ else
+ width=true
+ end
+ end
+ if trace_charstrings then
+ showstate("vmoveto")
+ end
+ y=y+stack[top]
+ top=0
+ ymoveto()
+ end
+ local function rlineto()
+ if trace_charstrings then
+ showstate("rlineto")
+ end
+ for i=1,top,2 do
+ x=x+stack[i]
+ y=y+stack[i+1]
+ xylineto()
+ end
+ top=0
+ end
+ local function hlineto()
+ if trace_charstrings then
+ showstate("hlineto")
+ end
+ if top==1 then
+ x=x+stack[1]
+ xlineto()
+ else
+ local swap=true
+ for i=1,top do
+ if swap then
+ x=x+stack[i]
+ xlineto()
+ swap=false
+ else
+ y=y+stack[i]
+ ylineto()
+ swap=true
+ end
+ end
+ end
+ top=0
+ end
+ local function vlineto()
+ if trace_charstrings then
+ showstate("vlineto")
+ end
+ if top==1 then
+ y=y+stack[1]
+ ylineto()
+ else
+ local swap=false
+ for i=1,top do
+ if swap then
+ x=x+stack[i]
+ xlineto()
+ swap=false
+ else
+ y=y+stack[i]
+ ylineto()
+ swap=true
+ end
+ end
+ end
+ top=0
+ end
+ local function rrcurveto()
+ if trace_charstrings then
+ showstate("rrcurveto")
+ end
+ for i=1,top,6 do
+ local ax=x+stack[i]
+ local ay=y+stack[i+1]
+ local bx=ax+stack[i+2]
+ local by=ay+stack[i+3]
+ x=bx+stack[i+4]
+ y=by+stack[i+5]
+ xycurveto(ax,ay,bx,by,x,y)
+ end
+ top=0
+ end
+ local function hhcurveto()
+ if trace_charstrings then
+ showstate("hhcurveto")
+ end
+ local s=1
+ if top%2~=0 then
+ y=y+stack[1]
+ s=2
+ end
+ for i=s,top,4 do
+ local ax=x+stack[i]
+ local ay=y
+ local bx=ax+stack[i+1]
+ local by=ay+stack[i+2]
+ x=bx+stack[i+3]
+ y=by
+ xycurveto(ax,ay,bx,by,x,y)
+ end
+ top=0
+ end
+ local function vvcurveto()
+ if trace_charstrings then
+ showstate("vvcurveto")
+ end
+ local s=1
+ local d=0
+ if top%2~=0 then
+ d=stack[1]
+ s=2
+ end
+ for i=s,top,4 do
+ local ax=x+d
+ local ay=y+stack[i]
+ local bx=ax+stack[i+1]
+ local by=ay+stack[i+2]
+ x=bx
+ y=by+stack[i+3]
+ xycurveto(ax,ay,bx,by,x,y)
+ d=0
+ end
+ top=0
+ end
+ local function xxcurveto(swap)
+ local last=top%4~=0 and stack[top]
+ if last then
+ top=top-1
+ end
+ for i=1,top,4 do
+ local ax,ay,bx,by
+ if swap then
+ ax=x+stack[i]
+ ay=y
+ bx=ax+stack[i+1]
+ by=ay+stack[i+2]
+ y=by+stack[i+3]
+ if last and i+3==top then
+ x=bx+last
+ else
+ x=bx
+ end
+ swap=false
+ else
+ ax=x
+ ay=y+stack[i]
+ bx=ax+stack[i+1]
+ by=ay+stack[i+2]
+ x=bx+stack[i+3]
+ if last and i+3==top then
+ y=by+last
+ else
+ y=by
+ end
+ swap=true
+ end
+ xycurveto(ax,ay,bx,by,x,y)
+ end
+ top=0
+ end
+ local function hvcurveto()
+ if trace_charstrings then
+ showstate("hvcurveto")
+ end
+ xxcurveto(true)
+ end
+ local function vhcurveto()
+ if trace_charstrings then
+ showstate("vhcurveto")
+ end
+ xxcurveto(false)
+ end
+ local function rcurveline()
+ if trace_charstrings then
+ showstate("rcurveline")
+ end
+ for i=1,top-2,6 do
+ local ax=x+stack[i]
+ local ay=y+stack[i+1]
+ local bx=ax+stack[i+2]
+ local by=ay+stack[i+3]
+ x=bx+stack[i+4]
+ y=by+stack[i+5]
+ xycurveto(ax,ay,bx,by,x,y)
+ end
+ x=x+stack[top-1]
+ y=y+stack[top]
+ xylineto()
+ top=0
+ end
+ local function rlinecurve()
+ if trace_charstrings then
+ showstate("rlinecurve")
+ end
+ if top>6 then
+ for i=1,top-6,2 do
+ x=x+stack[i]
+ y=y+stack[i+1]
+ xylineto()
+ end
+ end
+ local ax=x+stack[top-5]
+ local ay=y+stack[top-4]
+ local bx=ax+stack[top-3]
+ local by=ay+stack[top-2]
+ x=bx+stack[top-1]
+ y=by+stack[top]
+ xycurveto(ax,ay,bx,by,x,y)
+ top=0
+ end
+ local function flex()
+ if trace_charstrings then
+ showstate("flex")
+ end
+ local ax=x+stack[1]
+ local ay=y+stack[2]
+ local bx=ax+stack[3]
+ local by=ay+stack[4]
+ local cx=bx+stack[5]
+ local cy=by+stack[6]
+ xycurveto(ax,ay,bx,by,cx,cy)
+ local dx=cx+stack[7]
+ local dy=cy+stack[8]
+ local ex=dx+stack[9]
+ local ey=dy+stack[10]
+ x=ex+stack[11]
+ y=ey+stack[12]
+ xycurveto(dx,dy,ex,ey,x,y)
+ top=0
+ end
+ local function hflex()
+ if trace_charstrings then
+ showstate("hflex")
+ end
+ local ax=x+stack[1]
+ local ay=y
+ local bx=ax+stack[2]
+ local by=ay+stack[3]
+ local cx=bx+stack[4]
+ local cy=by
+ xycurveto(ax,ay,bx,by,cx,cy)
+ local dx=cx+stack[5]
+ local dy=by
+ local ex=dx+stack[6]
+ local ey=y
+ x=ex+stack[7]
+ xycurveto(dx,dy,ex,ey,x,y)
+ top=0
+ end
+ local function hflex1()
+ if trace_charstrings then
+ showstate("hflex1")
+ end
+ local ax=x+stack[1]
+ local ay=y+stack[2]
+ local bx=ax+stack[3]
+ local by=ay+stack[4]
+ local cx=bx+stack[5]
+ local cy=by
+ xycurveto(ax,ay,bx,by,cx,cy)
+ local dx=cx+stack[6]
+ local dy=by
+ local ex=dx+stack[7]
+ local ey=dy+stack[8]
+ x=ex+stack[9]
+ xycurveto(dx,dy,ex,ey,x,y)
+ top=0
+ end
+ local function flex1()
+ if trace_charstrings then
+ showstate("flex1")
+ end
+ local ax=x+stack[1]
+ local ay=y+stack[2]
+ local bx=ax+stack[3]
+ local by=ay+stack[4]
+ local cx=bx+stack[5]
+ local cy=by+stack[6]
+ xycurveto(ax,ay,bx,by,cx,cy)
+ local dx=cx+stack[7]
+ local dy=cy+stack[8]
+ local ex=dx+stack[9]
+ local ey=dy+stack[10]
+ if abs(ex-x)>abs(ey-y) then
+ x=ex+stack[11]
+ else
+ y=ey+stack[11]
+ end
+ xycurveto(dx,dy,ex,ey,x,y)
+ top=0
+ end
+ local function getstem()
+ if top==0 then
+ elseif top%2~=0 then
+ if width then
+ remove(stack,1)
+ else
+ width=remove(stack,1)
+ if trace_charstrings then
+ showvalue("width",width)
+ end
+ end
+ top=top-1
+ end
+ if trace_charstrings then
+ showstate("stem")
+ end
+ stems=stems+top/2
+ top=0
+ end
+ local function getmask()
+ if top==0 then
+ elseif top%2~=0 then
+ if width then
+ remove(stack,1)
+ else
+ width=remove(stack,1)
+ if trace_charstrings then
+ showvalue("width",width)
+ end
+ end
+ top=top-1
+ end
+ if trace_charstrings then
+ showstate(operator==19 and "hintmark" or "cntrmask")
+ end
+ stems=stems+top/2
+ top=0
+ if stems==0 then
+ elseif stems<=8 then
+ return 1
+ else
+ return floor((stems+7)/8)
+ end
+ end
+ local function unsupported(t)
+ if trace_charstrings then
+ showstate("unsupported "..t)
+ end
+ top=0
+ end
+ local function unsupportedsub(t)
+ if trace_charstrings then
+ showstate("unsupported sub "..t)
+ end
+ top=0
+ end
+ local function getstem3()
+ if trace_charstrings then
+ showstate("stem3")
+ end
+ top=0
+ end
+ local function divide()
+ if version==1 then
+ local d=stack[top]
+ top=top-1
+ stack[top]=stack[top]/d
+ end
+ end
+ local function closepath()
+ if version==1 then
+ if trace_charstrings then
+ showstate("closepath")
+ end
+ end
+ top=0
+ end
+ local function hsbw()
+ if version==1 then
+ if trace_charstrings then
+ showstate("dotsection")
+ end
+ width=stack[top]
+ end
+ top=0
+ end
+ local function seac()
+ if version==1 then
+ if trace_charstrings then
+ showstate("seac")
+ end
+ end
+ top=0
+ end
+ local function sbw()
+ if version==1 then
+ if trace_charstrings then
+ showstate("sbw")
+ end
+ width=stack[top-1]
+ end
+ top=0
+ end
+ local function callothersubr()
+ if version==1 then
+ if trace_charstrings then
+ showstate("callothersubr (unsupported)")
+ end
+ end
+ top=0
+ end
+ local function pop()
+ if version==1 then
+ if trace_charstrings then
+ showstate("pop (unsupported)")
+ end
+ top=top+1
+ stack[top]=0
+ else
+ top=0
+ end
+ end
+ local function setcurrentpoint()
+ if version==1 then
+ if trace_charstrings then
+ showstate("pop (unsupported)")
+ end
+ x=x+stack[top-1]
+ y=y+stack[top]
+ end
+ top=0
+ end
+ local reginit=false
+ local function updateregions(n)
+ if regions then
+ local current=regions[n] or regions[1]
+ nofregions=#current
+ if axis and n~=reginit then
+ factors={}
+ for i=1,nofregions do
+ local region=current[i]
+ local s=1
+ for j=1,#axis do
+ local f=axis[j]
+ local r=region[j]
+ local start=r.start
+ local peak=r.peak
+ local stop=r.stop
+ if start>peak or peak>stop then
+ elseif start<0 and stop>0 and peak~=0 then
+ elseif peak==0 then
+ elseif f<start or f>stop then
+ s=0
+ break
+ elseif f<peak then
+ s=s*(f-start)/(peak-start)
+ elseif f>peak then
+ s=s*(stop-f)/(stop-peak)
+ else
+ end
+ end
+ factors[i]=s
+ end
+ end
+ end
+ reginit=n
+ end
+ local function setvsindex()
+ local vsindex=stack[top]
+ if trace_charstrings then
+ showstate(formatters["vsindex %i"](vsindex))
+ end
+ updateregions(vsindex)
+ top=top-1
+ end
+ local function blend()
+ local n=stack[top]
+ top=top-1
+ if axis then
+ if trace_charstrings then
+ local t=top-nofregions*n
+ local m=t-n
+ for i=1,n do
+ local k=m+i
+ local d=m+n+(i-1)*nofregions
+ local old=stack[k]
+ local new=old
+ for r=1,nofregions do
+ new=new+stack[d+r]*factors[r]
+ end
+ stack[k]=new
+ showstate(formatters["blend %i of %i: %s -> %s"](i,n,old,new))
+ end
+ top=t
+ elseif n==1 then
+ top=top-nofregions
+ local v=stack[top]
+ for r=1,nofregions do
+ v=v+stack[top+r]*factors[r]
+ end
+ stack[top]=v
+ else
+ top=top-nofregions*n
+ local d=top
+ local k=top-n
+ for i=1,n do
+ k=k+1
+ local v=stack[k]
+ for r=1,nofregions do
+ v=v+stack[d+r]*factors[r]
+ end
+ stack[k]=v
+ d=d+nofregions
+ end
+ end
+ else
+ end
+ end
+ local actions={ [0]=unsupported,
+ getstem,
+ unsupported,
+ getstem,
+ vmoveto,
+ rlineto,
+ hlineto,
+ vlineto,
+ rrcurveto,
+ unsupported,
+ unsupported,
+ unsupported,
+ unsupported,
+ hsbw,
+ unsupported,
+ setvsindex,
+ blend,
+ unsupported,
+ getstem,
+ getmask,
+ getmask,
+ rmoveto,
+ hmoveto,
+ getstem,
+ rcurveline,
+ rlinecurve,
+ vvcurveto,
+ hhcurveto,
+ unsupported,
+ unsupported,
+ vhcurveto,
+ hvcurveto,
+ }
+ local subactions={
+ [000]=dotsection,
+ [001]=getstem3,
+ [002]=getstem3,
+ [006]=seac,
+ [007]=sbw,
+ [012]=divide,
+ [016]=callothersubr,
+ [017]=pop,
+ [033]=setcurrentpoint,
+ [034]=hflex,
+ [035]=flex,
+ [036]=hflex1,
+ [037]=flex1,
+ }
+ local c_endchar=char(14)
+ local passon do
+ local rshift=bit32.rshift
+ local band=bit32.band
+ local round=math.round
+ local encode=table.setmetatableindex(function(t,i)
+ for i=-2048,-1130 do
+ t[i]=char(28,band(rshift(i,8),0xFF),band(i,0xFF))
+ end
+ for i=-1131,-108 do
+ local v=0xFB00-i-108
+ t[i]=char(band(rshift(v,8),0xFF),band(v,0xFF))
+ end
+ for i=-107,107 do
+ t[i]=char(i+139)
+ end
+ for i=108,1131 do
+ local v=0xF700+i-108
+ t[i]=char(band(rshift(v,8),0xFF),band(v,0xFF))
+ end
+ for i=1132,2048 do
+ t[i]=char(28,band(rshift(i,8),0xFF),band(i,0xFF))
+ end
+ return t[i]
+ end)
+ local function setvsindex()
+ local vsindex=stack[top]
+ updateregions(vsindex)
+ top=top-1
+ end
+ local function blend()
+ local n=stack[top]
+ top=top-1
+ if not axis then
+ elseif n==1 then
+ top=top-nofregions
+ local v=stack[top]
+ for r=1,nofregions do
+ v=v+stack[top+r]*factors[r]
+ end
+ stack[top]=round(v)
+ else
+ top=top-nofregions*n
+ local d=top
+ local k=top-n
+ for i=1,n do
+ k=k+1
+ local v=stack[k]
+ for r=1,nofregions do
+ v=v+stack[d+r]*factors[r]
+ end
+ stack[k]=round(v)
+ d=d+nofregions
+ end
+ end
+ end
+ passon=function(operation)
+ if operation==15 then
+ setvsindex()
+ elseif operation==16 then
+ blend()
+ else
+ for i=1,top do
+ r=r+1
+ result[r]=encode[stack[i]]
+ end
+ r=r+1
+ result[r]=char(operation)
+ top=0
+ end
+ end
+ end
+ local process
+ local function call(scope,list,bias)
+ depth=depth+1
+ if top==0 then
+ showstate(formatters["unknown %s call"](scope))
+ top=0
+ else
+ local index=stack[top]+bias
+ top=top-1
+ if trace_charstrings then
+ showvalue(scope,index,true)
+ end
+ local tab=list[index]
+ if tab then
+ process(tab)
+ else
+ showstate(formatters["unknown %s call %i"](scope,index))
+ top=0
+ end
+ end
+ depth=depth-1
+ end
+ local justpass=false
+ process=function(tab)
+ local i=1
+ local n=#tab
+ while i<=n do
+ local t=tab[i]
+ if t>=32 then
+ top=top+1
+ if t<=246 then
+ stack[top]=t-139
+ i=i+1
+ elseif t<=250 then
+ stack[top]=t*256-63124+tab[i+1]
+ i=i+2
+ elseif t<=254 then
+ stack[top]=-t*256+64148-tab[i+1]
+ i=i+2
+ else
+ local n=0x100*tab[i+1]+tab[i+2]
+ if n>=0x8000 then
+ stack[top]=n-0x10000+(0x100*tab[i+3]+tab[i+4])/0xFFFF
+ else
+ stack[top]=n+(0x100*tab[i+3]+tab[i+4])/0xFFFF
+ end
+ i=i+5
+ end
+ elseif t==28 then
+ top=top+1
+ local n=0x100*tab[i+1]+tab[i+2]
+ if n>=0x8000 then
+ stack[top]=n-0x10000
+ else
+ stack[top]=n
+ end
+ i=i+3
+ elseif t==11 then
+ if trace_charstrings then
+ showstate("return")
+ end
+ return
+ elseif t==10 then
+ call("local",locals,localbias)
+ i=i+1
+ elseif t==14 then
+ if width then
+ elseif top>0 then
+ width=stack[1]
+ if trace_charstrings then
+ showvalue("width",width)
+ end
+ else
+ width=true
+ end
+ if trace_charstrings then
+ showstate("endchar")
+ end
+ return
+ elseif t==29 then
+ call("global",globals,globalbias)
+ i=i+1
+ elseif t==12 then
+ i=i+1
+ local t=tab[i]
+ local a=subactions[t]
+ if a then
+ a(t)
+ else
+ if trace_charstrings then
+ showvalue("<subaction>",t)
+ end
+ top=0
+ end
+ i=i+1
+ elseif justpass then
+ passon(t)
+ i=i+1
+ else
+ local a=actions[t]
+ if a then
+ local s=a(t)
+ if s then
+ i=i+s+1
+ else
+ i=i+1
+ end
+ else
+ if trace_charstrings then
+ showvalue("<action>",t)
+ end
+ top=0
+ i=i+1
+ end
+ end
+ end
+ end
+ local function setbias(globals,locals)
+ if version==1 then
+ return
+ false,
+ false
+ else
+ local g,l=#globals,#locals
+ return
+ ((g<1240 and 107) or (g<33900 and 1131) or 32768)+1,
+ ((l<1240 and 107) or (l<33900 and 1131) or 32768)+1
+ end
+ end
+ local function processshape(tab,index)
+ tab=bytetable(tab)
+ x=0
+ y=0
+ width=false
+ r=0
+ top=0
+ stems=0
+ result={}
+ xmin=0
+ xmax=0
+ ymin=0
+ ymax=0
+ checked=false
+ if trace_charstrings then
+ report("glyph: %i",index)
+ report("data : % t",tab)
+ end
+ if regions then
+ updateregions(vsindex)
+ end
+ process(tab)
+ local boundingbox={
+ round(xmin),
+ round(ymin),
+ round(xmax),
+ round(ymax),
+ }
+ if width==true or width==false then
+ width=defaultwidth
+ else
+ width=nominalwidth+width
+ end
+ local glyph=glyphs[index]
+ if justpass then
+ r=r+1
+ result[r]=c_endchar
+ local stream=concat(result)
+ if glyph then
+ glyph.stream=stream
+ else
+ glyphs[index]={ stream=stream }
+ end
+ elseif glyph then
+ glyph.segments=keepcurve~=false and result or nil
+ glyph.boundingbox=boundingbox
+ if not glyph.width then
+ glyph.width=width
+ end
+ if charset and not glyph.name then
+ glyph.name=charset[index]
+ end
+ elseif keepcurve then
+ glyphs[index]={
+ segments=result,
+ boundingbox=boundingbox,
+ width=width,
+ name=charset and charset[index] or nil,
+ }
+ else
+ glyphs[index]={
+ boundingbox=boundingbox,
+ width=width,
+ name=charset and charset[index] or nil,
+ }
+ end
+ if trace_charstrings then
+ report("width : %s",tostring(width))
+ report("boundingbox: % t",boundingbox)
+ end
+ end
+ startparsing=function(fontdata,data,streams)
+ reginit=false
+ axis=false
+ regions=data.regions
+ justpass=streams==true
+ if regions then
+ regions={ regions }
+ axis=data.factors or false
+ end
+ end
+ stopparsing=function(fontdata,data)
+ stack={}
+ glyphs=false
+ result={}
+ top=0
+ locals=false
+ globals=false
+ strings=false
+ end
+ local function setwidths(private)
+ if not private then
+ return 0,0
+ end
+ local privatedata=private.data
+ if not privatedata then
+ return 0,0
+ end
+ return privatedata.nominalwidthx or 0,privatedata.defaultwidthx or 0
+ end
+ parsecharstrings=function(fontdata,data,glphs,doshapes,tversion,streams)
+ local dictionary=data.dictionaries[1]
+ local charstrings=dictionary.charstrings
+ keepcurve=doshapes
+ version=tversion
+ strings=data.strings
+ globals=data.routines or {}
+ locals=dictionary.subroutines or {}
+ charset=dictionary.charset
+ vsindex=dictionary.vsindex or 0
+ glyphs=glphs or {}
+ globalbias,localbias=setbias(globals,locals)
+ nominalwidth,defaultwidth=setwidths(dictionary.private)
+ startparsing(fontdata,data,streams)
+ for index=1,#charstrings do
+ processshape(charstrings[index],index-1)
+ charstrings[index]=nil
+ end
+ stopparsing(fontdata,data)
+ return glyphs
+ end
+ parsecharstring=function(fontdata,data,dictionary,tab,glphs,index,doshapes,tversion)
+ keepcurve=doshapes
+ version=tversion
+ strings=data.strings
+ globals=data.routines or {}
+ locals=dictionary.subroutines or {}
+ charset=false
+ vsindex=dictionary.vsindex or 0
+ glyphs=glphs or {}
+ globalbias,localbias=setbias(globals,locals)
+ nominalwidth,defaultwidth=setwidths(dictionary.private)
+ processshape(tab,index-1)
+ end
+end
+local function readglobals(f,data)
+ local routines=readlengths(f)
+ for i=1,#routines do
+ routines[i]=readbytetable(f,routines[i])
+ end
+ data.routines=routines
+end
+local function readencodings(f,data)
+ data.encodings={}
+end
+local function readcharsets(f,data,dictionary)
+ local header=data.header
+ local strings=data.strings
+ local nofglyphs=data.nofglyphs
+ local charsetoffset=dictionary.charset
+ if charsetoffset and charsetoffset~=0 then
+ setposition(f,header.offset+charsetoffset)
+ local format=readbyte(f)
+ local charset={ [0]=".notdef" }
+ dictionary.charset=charset
+ if format==0 then
+ for i=1,nofglyphs do
+ charset[i]=strings[readushort(f)]
+ end
+ elseif format==1 or format==2 then
+ local readcount=format==1 and readbyte or readushort
+ local i=1
+ while i<=nofglyphs do
+ local sid=readushort(f)
+ local n=readcount(f)
+ for s=sid,sid+n do
+ charset[i]=strings[s]
+ i=i+1
+ if i>nofglyphs then
+ break
+ end
+ end
+ end
+ else
+ report("cff parser: unsupported charset format %a",format)
+ end
+ else
+ dictionary.nocharset=true
+ dictionary.charset=nil
+ end
+end
+local function readprivates(f,data)
+ local header=data.header
+ local dictionaries=data.dictionaries
+ local private=dictionaries[1].private
+ if private then
+ setposition(f,header.offset+private.offset)
+ private.data=readstring(f,private.size)
+ end
+end
+local function readlocals(f,data,dictionary)
+ local header=data.header
+ local private=dictionary.private
+ if private then
+ local subroutineoffset=private.data.subroutines
+ if subroutineoffset~=0 then
+ setposition(f,header.offset+private.offset+subroutineoffset)
+ local subroutines=readlengths(f)
+ for i=1,#subroutines do
+ subroutines[i]=readbytetable(f,subroutines[i])
+ end
+ dictionary.subroutines=subroutines
+ private.data.subroutines=nil
+ else
+ dictionary.subroutines={}
+ end
+ else
+ dictionary.subroutines={}
+ end
+end
+local function readcharstrings(f,data,what)
+ local header=data.header
+ local dictionaries=data.dictionaries
+ local dictionary=dictionaries[1]
+ local stringtype=dictionary.charstringtype
+ local offset=dictionary.charstrings
+ if type(offset)~="number" then
+ elseif stringtype==2 then
+ setposition(f,header.offset+offset)
+ local charstrings=readlengths(f,what=="cff2")
+ local nofglyphs=#charstrings
+ for i=1,nofglyphs do
+ charstrings[i]=readstring(f,charstrings[i])
+ end
+ data.nofglyphs=nofglyphs
+ dictionary.charstrings=charstrings
+ else
+ report("unsupported charstr type %i",stringtype)
+ data.nofglyphs=0
+ dictionary.charstrings={}
+ end
+end
+local function readcidprivates(f,data)
+ local header=data.header
+ local dictionaries=data.dictionaries[1].cid.dictionaries
+ for i=1,#dictionaries do
+ local dictionary=dictionaries[i]
+ local private=dictionary.private
+ if private then
+ setposition(f,header.offset+private.offset)
+ private.data=readstring(f,private.size)
+ end
+ end
+ parseprivates(data,dictionaries)
+end
+readers.parsecharstrings=parsecharstrings
+local function readnoselect(f,fontdata,data,glyphs,doshapes,version,streams)
+ local dictionaries=data.dictionaries
+ local dictionary=dictionaries[1]
+ readglobals(f,data)
+ readcharstrings(f,data,version)
+ if version=="cff2" then
+ dictionary.charset=nil
+ else
+ readencodings(f,data)
+ readcharsets(f,data,dictionary)
+ end
+ readprivates(f,data)
+ parseprivates(data,data.dictionaries)
+ readlocals(f,data,dictionary)
+ startparsing(fontdata,data,streams)
+ parsecharstrings(fontdata,data,glyphs,doshapes,version,streams)
+ stopparsing(fontdata,data)
+end
+local function readfdselect(f,fontdata,data,glyphs,doshapes,version,streams)
+ local header=data.header
+ local dictionaries=data.dictionaries
+ local dictionary=dictionaries[1]
+ local cid=dictionary.cid
+ local cidselect=cid and cid.fdselect
+ readglobals(f,data)
+ readcharstrings(f,data,version)
+ if version~="cff2" then
+ readencodings(f,data)
+ end
+ local charstrings=dictionary.charstrings
+ local fdindex={}
+ local nofglyphs=data.nofglyphs
+ local maxindex=-1
+ setposition(f,header.offset+cidselect)
+ local format=readbyte(f)
+ if format==1 then
+ for i=0,nofglyphs do
+ local index=readbyte(i)
+ fdindex[i]=index
+ if index>maxindex then
+ maxindex=index
+ end
+ end
+ elseif format==3 then
+ local nofranges=readushort(f)
+ local first=readushort(f)
+ local index=readbyte(f)
+ while true do
+ local last=readushort(f)
+ if index>maxindex then
+ maxindex=index
+ end
+ for i=first,last do
+ fdindex[i]=index
+ end
+ if last>=nofglyphs then
+ break
+ else
+ first=last+1
+ index=readbyte(f)
+ end
+ end
+ else
+ end
+ if maxindex>=0 then
+ local cidarray=cid.fdarray
+ setposition(f,header.offset+cidarray)
+ local dictionaries=readlengths(f)
+ for i=1,#dictionaries do
+ dictionaries[i]=readstring(f,dictionaries[i])
+ end
+ parsedictionaries(data,dictionaries)
+ cid.dictionaries=dictionaries
+ readcidprivates(f,data)
+ for i=1,#dictionaries do
+ readlocals(f,data,dictionaries[i])
+ end
+ startparsing(fontdata,data,streams)
+ for i=1,#charstrings do
+ parsecharstring(fontdata,data,dictionaries[fdindex[i]+1],charstrings[i],glyphs,i,doshapes,version)
+ charstrings[i]=nil
+ end
+ stopparsing(fontdata,data)
+ end
+end
+local gotodatatable=readers.helpers.gotodatatable
+local function cleanup(data,dictionaries)
+end
+function readers.cff(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"cff",specification.details)
+ if tableoffset then
+ local header=readheader(f)
+ if header.major~=1 then
+ report("only version %s is supported for table %a",1,"cff")
+ return
+ end
+ local glyphs=fontdata.glyphs
+ local names=readfontnames(f)
+ local dictionaries=readtopdictionaries(f)
+ local strings=readstrings(f)
+ local data={
+ header=header,
+ names=names,
+ dictionaries=dictionaries,
+ strings=strings,
+ nofglyphs=fontdata.nofglyphs,
+ }
+ parsedictionaries(data,dictionaries,"cff")
+ local dic=dictionaries[1]
+ local cid=dic.cid
+ fontdata.cffinfo={
+ familynamename=dic.familyname,
+ fullname=dic.fullname,
+ boundingbox=dic.boundingbox,
+ weight=dic.weight,
+ italicangle=dic.italicangle,
+ underlineposition=dic.underlineposition,
+ underlinethickness=dic.underlinethickness,
+ monospaced=dic.monospaced,
+ }
+ fontdata.cidinfo=cid and {
+ registry=cid.registry,
+ ordering=cid.ordering,
+ supplement=cid.supplement,
+ }
+ if specification.glyphs then
+ local all=specification.shapes or false
+ if cid and cid.fdselect then
+ readfdselect(f,fontdata,data,glyphs,all,"cff")
+ else
+ readnoselect(f,fontdata,data,glyphs,all,"cff")
+ end
+ end
+ cleanup(data,dictionaries)
+ end
+end
+function readers.cff2(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"cff2",specification.glyphs)
+ if tableoffset then
+ local header=readheader(f)
+ if header.major~=2 then
+ report("only version %s is supported for table %a",2,"cff2")
+ return
+ end
+ local glyphs=fontdata.glyphs
+ local dictionaries={ readstring(f,header.dsize) }
+ local data={
+ header=header,
+ dictionaries=dictionaries,
+ nofglyphs=fontdata.nofglyphs,
+ }
+ parsedictionaries(data,dictionaries,"cff2")
+ local offset=dictionaries[1].vstore
+ if offset>0 then
+ local storeoffset=dictionaries[1].vstore+data.header.offset+2
+ local regions,deltas=readers.helpers.readvariationdata(f,storeoffset,factors)
+ data.regions=regions
+ data.deltas=deltas
+ else
+ data.regions={}
+ data.deltas={}
+ end
+ data.factors=specification.factors
+ local cid=data.dictionaries[1].cid
+ local all=specification.shapes or false
+ if cid and cid.fdselect then
+ readfdselect(f,fontdata,data,glyphs,all,"cff2",specification.streams)
+ else
+ readnoselect(f,fontdata,data,glyphs,all,"cff2",specification.streams)
+ end
+ cleanup(data,dictionaries)
+ end
+end
+function readers.cffcheck(filename)
+ local f=io.open(filename,"rb")
+ if f then
+ local fontdata={
+ glyphs={},
+ }
+ local header=readheader(f)
+ if header.major~=1 then
+ report("only version %s is supported for table %a",1,"cff")
+ return
+ end
+ local names=readfontnames(f)
+ local dictionaries=readtopdictionaries(f)
+ local strings=readstrings(f)
+ local glyphs={}
+ local data={
+ header=header,
+ names=names,
+ dictionaries=dictionaries,
+ strings=strings,
+ glyphs=glyphs,
+ nofglyphs=4,
+ }
+ parsedictionaries(data,dictionaries,"cff")
+ local cid=data.dictionaries[1].cid
+ if cid and cid.fdselect then
+ readfdselect(f,fontdata,data,glyphs,false)
+ else
+ readnoselect(f,fontdata,data,glyphs,false)
+ end
+ return data
+ end
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-ttf']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local next,type,unpack=next,type,unpack
+local bittest,band,rshift=bit32.btest,bit32.band,bit32.rshift
+local sqrt,round=math.sqrt,math.round
+local char=string.char
+local concat=table.concat
+local report=logs.reporter("otf reader","ttf")
+local trace_deltas=false
+local readers=fonts.handlers.otf.readers
+local streamreader=readers.streamreader
+local setposition=streamreader.setposition
+local getposition=streamreader.getposition
+local skipbytes=streamreader.skip
+local readbyte=streamreader.readcardinal1
+local readushort=streamreader.readcardinal2
+local readulong=streamreader.readcardinal4
+local readchar=streamreader.readinteger1
+local readshort=streamreader.readinteger2
+local read2dot14=streamreader.read2dot14
+local readinteger=streamreader.readinteger1
+local helpers=readers.helpers
+local gotodatatable=helpers.gotodatatable
+local function mergecomposites(glyphs,shapes)
+ local function merge(index,shape,components)
+ local contours={}
+ local points={}
+ local nofcontours=0
+ local nofpoints=0
+ local offset=0
+ local deltas=shape.deltas
+ for i=1,#components do
+ local component=components[i]
+ local subindex=component.index
+ local subshape=shapes[subindex]
+ local subcontours=subshape.contours
+ local subpoints=subshape.points
+ if not subcontours then
+ local subcomponents=subshape.components
+ if subcomponents then
+ subcontours,subpoints=merge(subindex,subshape,subcomponents)
+ end
+ end
+ if subpoints then
+ local matrix=component.matrix
+ local xscale=matrix[1]
+ local xrotate=matrix[2]
+ local yrotate=matrix[3]
+ local yscale=matrix[4]
+ local xoffset=matrix[5]
+ local yoffset=matrix[6]
+ for i=1,#subpoints do
+ local p=subpoints[i]
+ local x=p[1]
+ local y=p[2]
+ nofpoints=nofpoints+1
+ points[nofpoints]={
+ xscale*x+xrotate*y+xoffset,
+ yscale*y+yrotate*x+yoffset,
+ p[3]
+ }
+ end
+ for i=1,#subcontours do
+ nofcontours=nofcontours+1
+ contours[nofcontours]=offset+subcontours[i]
+ end
+ offset=offset+#subpoints
+ else
+ report("missing contours composite %s, component %s of %s, glyph %s",index,i,#components,subindex)
+ end
+ end
+ shape.points=points
+ shape.contours=contours
+ shape.components=nil
+ return contours,points
+ end
+ for index=1,#glyphs do
+ local shape=shapes[index]
+ if shape then
+ local components=shape.components
+ if components then
+ merge(index,shape,components)
+ end
+ end
+ end
+end
+local function readnothing(f,nofcontours)
+ return {
+ type="nothing",
+ }
+end
+local function curveto(m_x,m_y,l_x,l_y,r_x,r_y)
+ return
+ l_x+2/3*(m_x-l_x),l_y+2/3*(m_y-l_y),
+ r_x+2/3*(m_x-r_x),r_y+2/3*(m_y-r_y),
+ r_x,r_y,"c"
+end
+local function applyaxis(glyph,shape,deltas,dowidth)
+ local points=shape.points
+ if points then
+ local nofpoints=#points
+ local h=nofpoints+2
+ local l=nofpoints+1
+ local dw=0
+ local dl=0
+ for i=1,#deltas do
+ local deltaset=deltas[i]
+ local xvalues=deltaset.xvalues
+ local yvalues=deltaset.yvalues
+ local dpoints=deltaset.points
+ local factor=deltaset.factor
+ if dpoints then
+ local nofdpoints=#dpoints
+ for i=1,nofdpoints do
+ local d=dpoints[i]
+ local p=points[d]
+ if p then
+ if xvalues then
+ local x=xvalues[i]
+ if x and x~=0 then
+ p[1]=p[1]+factor*x
+ end
+ end
+ if yvalues then
+ local y=yvalues[i]
+ if y and y~=0 then
+ p[2]=p[2]+factor*y
+ end
+ end
+ elseif dowidth then
+ if d==h then
+ local x=xvalues[i]
+ if x then
+ dw=dw+factor*x
+ end
+ elseif d==l then
+ local x=xvalues[i]
+ if x then
+ dl=dl+factor*x
+ end
+ end
+ end
+ end
+ else
+ for i=1,nofpoints do
+ local p=points[i]
+ if xvalues then
+ local x=xvalues[i]
+ if x and x~=0 then
+ p[1]=p[1]+factor*x
+ end
+ end
+ if yvalues then
+ local y=yvalues[i]
+ if y and y~=0 then
+ p[2]=p[2]+factor*y
+ end
+ end
+ end
+ if dowidth then
+ local x=xvalues[h]
+ if x then
+ dw=dw+factor*x
+ end
+ local x=xvalues[l]
+ if x then
+ dl=dl+factor*x
+ end
+ end
+ end
+ end
+ if dowidth then
+ local width=glyph.width or 0
+ glyph.width=width+dw-dl
+ end
+ else
+ report("no points for glyph %a",glyph.name)
+ end
+end
+local quadratic=false
+local function contours2outlines_normal(glyphs,shapes)
+ for index=1,#glyphs do
+ local shape=shapes[index]
+ if shape then
+ local glyph=glyphs[index]
+ local contours=shape.contours
+ local points=shape.points
+ if contours then
+ local nofcontours=#contours
+ local segments={}
+ local nofsegments=0
+ glyph.segments=segments
+ if nofcontours>0 then
+ local px,py=0,0
+ local first=1
+ for i=1,nofcontours do
+ local last=contours[i]
+ if last>=first then
+ local first_pt=points[first]
+ local first_on=first_pt[3]
+ if first==last then
+ first_pt[3]="m"
+ nofsegments=nofsegments+1
+ segments[nofsegments]=first_pt
+ else
+ local first_on=first_pt[3]
+ local last_pt=points[last]
+ local last_on=last_pt[3]
+ local start=1
+ local control_pt=false
+ if first_on then
+ start=2
+ else
+ if last_on then
+ first_pt=last_pt
+ else
+ first_pt={ (first_pt[1]+last_pt[1])/2,(first_pt[2]+last_pt[2])/2,false }
+ end
+ control_pt=first_pt
+ end
+ local x,y=first_pt[1],first_pt[2]
+ if not done then
+ xmin,ymin,xmax,ymax=x,y,x,y
+ done=true
+ end
+ nofsegments=nofsegments+1
+ segments[nofsegments]={ x,y,"m" }
+ if not quadratic then
+ px,py=x,y
+ end
+ local previous_pt=first_pt
+ for i=first,last do
+ local current_pt=points[i]
+ local current_on=current_pt[3]
+ local previous_on=previous_pt[3]
+ if previous_on then
+ if current_on then
+ local x,y=current_pt[1],current_pt[2]
+ nofsegments=nofsegments+1
+ segments[nofsegments]={ x,y,"l" }
+ if not quadratic then
+ px,py=x,y
+ end
+ else
+ control_pt=current_pt
+ end
+ elseif current_on then
+ local x1,y1=control_pt[1],control_pt[2]
+ local x2,y2=current_pt[1],current_pt[2]
+ nofsegments=nofsegments+1
+ if quadratic then
+ segments[nofsegments]={ x1,y1,x2,y2,"q" }
+ else
+ x1,y1,x2,y2,px,py=curveto(x1,y1,px,py,x2,y2)
+ segments[nofsegments]={ x1,y1,x2,y2,px,py,"c" }
+ end
+ control_pt=false
+ else
+ local x2,y2=(previous_pt[1]+current_pt[1])/2,(previous_pt[2]+current_pt[2])/2
+ local x1,y1=control_pt[1],control_pt[2]
+ nofsegments=nofsegments+1
+ if quadratic then
+ segments[nofsegments]={ x1,y1,x2,y2,"q" }
+ else
+ x1,y1,x2,y2,px,py=curveto(x1,y1,px,py,x2,y2)
+ segments[nofsegments]={ x1,y1,x2,y2,px,py,"c" }
+ end
+ control_pt=current_pt
+ end
+ previous_pt=current_pt
+ end
+ if first_pt==last_pt then
+ else
+ nofsegments=nofsegments+1
+ local x2,y2=first_pt[1],first_pt[2]
+ if not control_pt then
+ segments[nofsegments]={ x2,y2,"l" }
+ elseif quadratic then
+ local x1,y1=control_pt[1],control_pt[2]
+ segments[nofsegments]={ x1,y1,x2,y2,"q" }
+ else
+ local x1,y1=control_pt[1],control_pt[2]
+ x1,y1,x2,y2,px,py=curveto(x1,y1,px,py,x2,y2)
+ segments[nofsegments]={ x1,y1,x2,y2,px,py,"c" }
+ end
+ end
+ end
+ end
+ first=last+1
+ end
+ end
+ end
+ end
+ end
+end
+local function contours2outlines_shaped(glyphs,shapes,keepcurve)
+ for index=1,#glyphs do
+ local shape=shapes[index]
+ if shape then
+ local glyph=glyphs[index]
+ local contours=shape.contours
+ local points=shape.points
+ if contours then
+ local nofcontours=#contours
+ local segments=keepcurve and {} or nil
+ local nofsegments=0
+ if keepcurve then
+ glyph.segments=segments
+ end
+ if nofcontours>0 then
+ local xmin,ymin,xmax,ymax,done=0,0,0,0,false
+ local px,py=0,0
+ local first=1
+ for i=1,nofcontours do
+ local last=contours[i]
+ if last>=first then
+ local first_pt=points[first]
+ local first_on=first_pt[3]
+ if first==last then
+ if keepcurve then
+ first_pt[3]="m"
+ nofsegments=nofsegments+1
+ segments[nofsegments]=first_pt
+ end
+ else
+ local first_on=first_pt[3]
+ local last_pt=points[last]
+ local last_on=last_pt[3]
+ local start=1
+ local control_pt=false
+ if first_on then
+ start=2
+ else
+ if last_on then
+ first_pt=last_pt
+ else
+ first_pt={ (first_pt[1]+last_pt[1])/2,(first_pt[2]+last_pt[2])/2,false }
+ end
+ control_pt=first_pt
+ end
+ local x,y=first_pt[1],first_pt[2]
+ if not done then
+ xmin,ymin,xmax,ymax=x,y,x,y
+ done=true
+ else
+ if x<xmin then xmin=x elseif x>xmax then xmax=x end
+ if y<ymin then ymin=y elseif y>ymax then ymax=y end
+ end
+ if keepcurve then
+ nofsegments=nofsegments+1
+ segments[nofsegments]={ x,y,"m" }
+ end
+ if not quadratic then
+ px,py=x,y
+ end
+ local previous_pt=first_pt
+ for i=first,last do
+ local current_pt=points[i]
+ local current_on=current_pt[3]
+ local previous_on=previous_pt[3]
+ if previous_on then
+ if current_on then
+ local x,y=current_pt[1],current_pt[2]
+ if x<xmin then xmin=x elseif x>xmax then xmax=x end
+ if y<ymin then ymin=y elseif y>ymax then ymax=y end
+ if keepcurve then
+ nofsegments=nofsegments+1
+ segments[nofsegments]={ x,y,"l" }
+ end
+ if not quadratic then
+ px,py=x,y
+ end
+ else
+ control_pt=current_pt
+ end
+ elseif current_on then
+ local x1,y1=control_pt[1],control_pt[2]
+ local x2,y2=current_pt[1],current_pt[2]
+ if quadratic then
+ if x1<xmin then xmin=x1 elseif x1>xmax then xmax=x1 end
+ if y1<ymin then ymin=y1 elseif y1>ymax then ymax=y1 end
+ if keepcurve then
+ nofsegments=nofsegments+1
+ segments[nofsegments]={ x1,y1,x2,y2,"q" }
+ end
+ else
+ x1,y1,x2,y2,px,py=curveto(x1,y1,px,py,x2,y2)
+ if x1<xmin then xmin=x1 elseif x1>xmax then xmax=x1 end
+ if y1<ymin then ymin=y1 elseif y1>ymax then ymax=y1 end
+ if x2<xmin then xmin=x2 elseif x2>xmax then xmax=x2 end
+ if y2<ymin then ymin=y2 elseif y2>ymax then ymax=y2 end
+ if px<xmin then xmin=px elseif px>xmax then xmax=px end
+ if py<ymin then ymin=py elseif py>ymax then ymax=py end
+ if keepcurve then
+ nofsegments=nofsegments+1
+ segments[nofsegments]={ x1,y1,x2,y2,px,py,"c" }
+ end
+ end
+ control_pt=false
+ else
+ local x2,y2=(previous_pt[1]+current_pt[1])/2,(previous_pt[2]+current_pt[2])/2
+ local x1,y1=control_pt[1],control_pt[2]
+ if quadratic then
+ if x1<xmin then xmin=x1 elseif x1>xmax then xmax=x1 end
+ if y1<ymin then ymin=y1 elseif y1>ymax then ymax=y1 end
+ if keepcurve then
+ nofsegments=nofsegments+1
+ segments[nofsegments]={ x1,y1,x2,y2,"q" }
+ end
+ else
+ x1,y1,x2,y2,px,py=curveto(x1,y1,px,py,x2,y2)
+ if x1<xmin then xmin=x1 elseif x1>xmax then xmax=x1 end
+ if y1<ymin then ymin=y1 elseif y1>ymax then ymax=y1 end
+ if x2<xmin then xmin=x2 elseif x2>xmax then xmax=x2 end
+ if y2<ymin then ymin=y2 elseif y2>ymax then ymax=y2 end
+ if px<xmin then xmin=px elseif px>xmax then xmax=px end
+ if py<ymin then ymin=py elseif py>ymax then ymax=py end
+ if keepcurve then
+ nofsegments=nofsegments+1
+ segments[nofsegments]={ x1,y1,x2,y2,px,py,"c" }
+ end
+ end
+ control_pt=current_pt
+ end
+ previous_pt=current_pt
+ end
+ if first_pt==last_pt then
+ elseif not control_pt then
+ if keepcurve then
+ nofsegments=nofsegments+1
+ segments[nofsegments]={ first_pt[1],first_pt[2],"l" }
+ end
+ else
+ local x1,y1=control_pt[1],control_pt[2]
+ local x2,y2=first_pt[1],first_pt[2]
+ if x1<xmin then xmin=x1 elseif x1>xmax then xmax=x1 end
+ if y1<ymin then ymin=y1 elseif y1>ymax then ymax=y1 end
+ if quadratic then
+ if keepcurve then
+ nofsegments=nofsegments+1
+ segments[nofsegments]={ x1,y1,x2,y2,"q" }
+ end
+ else
+ x1,y1,x2,y2,px,py=curveto(x1,y1,px,py,x2,y2)
+ if x2<xmin then xmin=x2 elseif x2>xmax then xmax=x2 end
+ if y2<ymin then ymin=y2 elseif y2>ymax then ymax=y2 end
+ if px<xmin then xmin=px elseif px>xmax then xmax=px end
+ if py<ymin then ymin=py elseif py>ymax then ymax=py end
+ if keepcurve then
+ nofsegments=nofsegments+1
+ segments[nofsegments]={ x1,y1,x2,y2,px,py,"c" }
+ end
+ end
+ end
+ end
+ end
+ first=last+1
+ end
+ glyph.boundingbox={ round(xmin),round(ymin),round(xmax),round(ymax) }
+ end
+ end
+ end
+ end
+end
+local c_zero=char(0)
+local s_zero=char(0,0)
+local function toushort(n)
+ return char(band(rshift(n,8),0xFF),band(n,0xFF))
+end
+local function toshort(n)
+ if n<0 then
+ n=n+0x10000
+ end
+ return char(band(rshift(n,8),0xFF),band(n,0xFF))
+end
+local function repackpoints(glyphs,shapes)
+ local noboundingbox={ 0,0,0,0 }
+ local result={}
+ for index=1,#glyphs do
+ local shape=shapes[index]
+ if shape then
+ local r=0
+ local glyph=glyphs[index]
+ if false then
+ else
+ local contours=shape.contours
+ local nofcontours=contours and #contours or 0
+ local boundingbox=glyph.boundingbox or noboundingbox
+ r=r+1 result[r]=toshort(nofcontours)
+ r=r+1 result[r]=toshort(boundingbox[1])
+ r=r+1 result[r]=toshort(boundingbox[2])
+ r=r+1 result[r]=toshort(boundingbox[3])
+ r=r+1 result[r]=toshort(boundingbox[4])
+ if nofcontours>0 then
+ for i=1,nofcontours do
+ r=r+1 result[r]=toshort(contours[i]-1)
+ end
+ r=r+1 result[r]=s_zero
+ local points=shape.points
+ local currentx=0
+ local currenty=0
+ local xpoints={}
+ local ypoints={}
+ local x=0
+ local y=0
+ local lastflag=nil
+ local nofflags=0
+ for i=1,#points do
+ local pt=points[i]
+ local px=pt[1]
+ local py=pt[2]
+ local fl=pt[3] and 0x01 or 0x00
+ if px==currentx then
+ fl=fl+0x10
+ else
+ local dx=round(px-currentx)
+ if dx<-255 or dx>255 then
+ x=x+1 xpoints[x]=toshort(dx)
+ elseif dx<0 then
+ fl=fl+0x02
+ x=x+1 xpoints[x]=char(-dx)
+ elseif dx>0 then
+ fl=fl+0x12
+ x=x+1 xpoints[x]=char(dx)
+ else
+ fl=fl+0x02
+ x=x+1 xpoints[x]=c_zero
+ end
+ end
+ if py==currenty then
+ fl=fl+0x20
+ else
+ local dy=round(py-currenty)
+ if dy<-255 or dy>255 then
+ y=y+1 ypoints[y]=toshort(dy)
+ elseif dy<0 then
+ fl=fl+0x04
+ y=y+1 ypoints[y]=char(-dy)
+ elseif dy>0 then
+ fl=fl+0x24
+ y=y+1 ypoints[y]=char(dy)
+ else
+ fl=fl+0x04
+ y=y+1 ypoints[y]=c_zero
+ end
+ end
+ currentx=px
+ currenty=py
+ if lastflag==fl then
+ nofflags=nofflags+1
+ else
+ if nofflags==1 then
+ r=r+1 result[r]=char(lastflag)
+ elseif nofflags==2 then
+ r=r+1 result[r]=char(lastflag,lastflag)
+ elseif nofflags>2 then
+ lastflag=lastflag+0x08
+ r=r+1 result[r]=char(lastflag,nofflags-1)
+ end
+ nofflags=1
+ lastflag=fl
+ end
+ end
+ if nofflags==1 then
+ r=r+1 result[r]=char(lastflag)
+ elseif nofflags==2 then
+ r=r+1 result[r]=char(lastflag,lastflag)
+ elseif nofflags>2 then
+ lastflag=lastflag+0x08
+ r=r+1 result[r]=char(lastflag,nofflags-1)
+ end
+ r=r+1 result[r]=concat(xpoints)
+ r=r+1 result[r]=concat(ypoints)
+ end
+ end
+ glyph.stream=concat(result,"",1,r)
+ else
+ end
+ end
+end
+local function readglyph(f,nofcontours)
+ local points={}
+ local contours={}
+ local instructions={}
+ local flags={}
+ for i=1,nofcontours do
+ contours[i]=readshort(f)+1
+ end
+ local nofpoints=contours[nofcontours]
+ local nofinstructions=readushort(f)
+ skipbytes(f,nofinstructions)
+ local i=1
+ while i<=nofpoints do
+ local flag=readbyte(f)
+ flags[i]=flag
+ if bittest(flag,0x08) then
+ for j=1,readbyte(f) do
+ i=i+1
+ flags[i]=flag
+ end
+ end
+ i=i+1
+ end
+ local x=0
+ for i=1,nofpoints do
+ local flag=flags[i]
+ local short=bittest(flag,0x02)
+ local same=bittest(flag,0x10)
+ if short then
+ if same then
+ x=x+readbyte(f)
+ else
+ x=x-readbyte(f)
+ end
+ elseif same then
+ else
+ x=x+readshort(f)
+ end
+ points[i]={ x,0,bittest(flag,0x01) }
+ end
+ local y=0
+ for i=1,nofpoints do
+ local flag=flags[i]
+ local short=bittest(flag,0x04)
+ local same=bittest(flag,0x20)
+ if short then
+ if same then
+ y=y+readbyte(f)
+ else
+ y=y-readbyte(f)
+ end
+ elseif same then
+ else
+ y=y+readshort(f)
+ end
+ points[i][2]=y
+ end
+ return {
+ type="glyph",
+ points=points,
+ contours=contours,
+ nofpoints=nofpoints,
+ }
+end
+local function readcomposite(f)
+ local components={}
+ local nofcomponents=0
+ local instructions=false
+ while true do
+ local flags=readushort(f)
+ local index=readushort(f)
+ local f_xyarg=bittest(flags,0x0002)
+ local f_offset=bittest(flags,0x0800)
+ local xscale=1
+ local xrotate=0
+ local yrotate=0
+ local yscale=1
+ local xoffset=0
+ local yoffset=0
+ local base=false
+ local reference=false
+ if f_xyarg then
+ if bittest(flags,0x0001) then
+ xoffset=readshort(f)
+ yoffset=readshort(f)
+ else
+ xoffset=readchar(f)
+ yoffset=readchar(f)
+ end
+ else
+ if bittest(flags,0x0001) then
+ base=readshort(f)
+ reference=readshort(f)
+ else
+ base=readchar(f)
+ reference=readchar(f)
+ end
+ end
+ if bittest(flags,0x0008) then
+ xscale=read2dot14(f)
+ yscale=xscale
+ if f_xyarg and f_offset then
+ xoffset=xoffset*xscale
+ yoffset=yoffset*yscale
+ end
+ elseif bittest(flags,0x0040) then
+ xscale=read2dot14(f)
+ yscale=read2dot14(f)
+ if f_xyarg and f_offset then
+ xoffset=xoffset*xscale
+ yoffset=yoffset*yscale
+ end
+ elseif bittest(flags,0x0080) then
+ xscale=read2dot14(f)
+ xrotate=read2dot14(f)
+ yrotate=read2dot14(f)
+ yscale=read2dot14(f)
+ if f_xyarg and f_offset then
+ xoffset=xoffset*sqrt(xscale^2+xrotate^2)
+ yoffset=yoffset*sqrt(yrotate^2+yscale^2)
+ end
+ end
+ nofcomponents=nofcomponents+1
+ components[nofcomponents]={
+ index=index,
+ usemine=bittest(flags,0x0200),
+ round=bittest(flags,0x0006),
+ base=base,
+ reference=reference,
+ matrix={ xscale,xrotate,yrotate,yscale,xoffset,yoffset },
+ }
+ if bittest(flags,0x0100) then
+ instructions=true
+ end
+ if not bittest(flags,0x0020) then
+ break
+ end
+ end
+ return {
+ type="composite",
+ components=components,
+ }
+end
+function readers.loca(f,fontdata,specification)
+ if specification.glyphs then
+ local datatable=fontdata.tables.loca
+ if datatable then
+ local offset=fontdata.tables.glyf.offset
+ local format=fontdata.fontheader.indextolocformat
+ local locations={}
+ setposition(f,datatable.offset)
+ if format==1 then
+ local nofglyphs=datatable.length/4-2
+ for i=0,nofglyphs do
+ locations[i]=offset+readulong(f)
+ end
+ fontdata.nofglyphs=nofglyphs
+ else
+ local nofglyphs=datatable.length/2-2
+ for i=0,nofglyphs do
+ locations[i]=offset+readushort(f)*2
+ end
+ fontdata.nofglyphs=nofglyphs
+ end
+ fontdata.locations=locations
+ end
+ end
+end
+function readers.glyf(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"glyf",specification.glyphs)
+ if tableoffset then
+ local locations=fontdata.locations
+ if locations then
+ local glyphs=fontdata.glyphs
+ local nofglyphs=fontdata.nofglyphs
+ local filesize=fontdata.filesize
+ local nothing={ 0,0,0,0 }
+ local shapes={}
+ local loadshapes=specification.shapes or specification.instance
+ for index=0,nofglyphs do
+ local location=locations[index]
+ if location>=filesize then
+ report("discarding %s glyphs due to glyph location bug",nofglyphs-index+1)
+ fontdata.nofglyphs=index-1
+ fontdata.badfont=true
+ break
+ elseif location>0 then
+ setposition(f,location)
+ local nofcontours=readshort(f)
+ glyphs[index].boundingbox={
+ readshort(f),
+ readshort(f),
+ readshort(f),
+ readshort(f),
+ }
+ if not loadshapes then
+ elseif nofcontours==0 then
+ shapes[index]=readnothing(f,nofcontours)
+ elseif nofcontours>0 then
+ shapes[index]=readglyph(f,nofcontours)
+ else
+ shapes[index]=readcomposite(f,nofcontours)
+ end
+ else
+ if loadshapes then
+ shapes[index]={}
+ end
+ glyphs[index].boundingbox=nothing
+ end
+ end
+ if loadshapes then
+ if readers.gvar then
+ readers.gvar(f,fontdata,specification,glyphs,shapes)
+ end
+ mergecomposites(glyphs,shapes)
+ if specification.instance then
+ if specification.streams then
+ repackpoints(glyphs,shapes)
+ else
+ contours2outlines_shaped(glyphs,shapes,specification.shapes)
+ end
+ elseif specification.shapes then
+ contours2outlines_normal(glyphs,shapes)
+ end
+ end
+ end
+ end
+end
+local function readtuplerecord(f,nofaxis)
+ local record={}
+ for i=1,nofaxis do
+ record[i]=read2dot14(f)
+ end
+ return record
+end
+local function readpoints(f)
+ local count=readbyte(f)
+ if count==0 then
+ return nil,0
+ else
+ if count<128 then
+ elseif bittest(count,0x80) then
+ count=band(count,0x7F)*256+readbyte(f)
+ else
+ end
+ local points={}
+ local p=0
+ local n=1
+ while p<count do
+ local control=readbyte(f)
+ local runreader=bittest(control,0x80) and readushort or readbyte
+ local runlength=band(control,0x7F)
+ for i=1,runlength+1 do
+ n=n+runreader(f)
+ p=p+1
+ points[p]=n
+ end
+ end
+ return points,p
+ end
+end
+local function readdeltas(f,nofpoints)
+ local deltas={}
+ local p=0
+ local z=0
+ while nofpoints>0 do
+ local control=readbyte(f)
+if not control then
+ break
+end
+ local allzero=bittest(control,0x80)
+ local runlength=band(control,0x3F)+1
+ if allzero then
+ z=z+runlength
+ else
+ local runreader=bittest(control,0x40) and readshort or readinteger
+ if z>0 then
+ for i=1,z do
+ p=p+1
+ deltas[p]=0
+ end
+ z=0
+ end
+ for i=1,runlength do
+ p=p+1
+ deltas[p]=runreader(f)
+ end
+ end
+ nofpoints=nofpoints-runlength
+ end
+ if p>0 then
+ return deltas
+ else
+ end
+end
+local function readdeltas(f,nofpoints)
+ local deltas={}
+ local p=0
+ while nofpoints>0 do
+ local control=readbyte(f)
+ if control then
+ local allzero=bittest(control,0x80)
+ local runlength=band(control,0x3F)+1
+ if allzero then
+ for i=1,runlength do
+ p=p+1
+ deltas[p]=0
+ end
+ else
+ local runreader=bittest(control,0x40) and readshort or readinteger
+ for i=1,runlength do
+ p=p+1
+ deltas[p]=runreader(f)
+ end
+ end
+ nofpoints=nofpoints-runlength
+ else
+ break
+ end
+ end
+ if p>0 then
+ return deltas
+ else
+ end
+end
+function readers.gvar(f,fontdata,specification,glyphdata,shapedata)
+ local instance=specification.instance
+ if not instance then
+ return
+ end
+ local factors=specification.factors
+ if not factors then
+ return
+ end
+ local tableoffset=gotodatatable(f,fontdata,"gvar",specification.variable or specification.shapes)
+ if tableoffset then
+ local version=readulong(f)
+ local nofaxis=readushort(f)
+ local noftuples=readushort(f)
+ local tupleoffset=tableoffset+readulong(f)
+ local nofglyphs=readushort(f)
+ local flags=readushort(f)
+ local dataoffset=tableoffset+readulong(f)
+ local data={}
+ local tuples={}
+ local glyphdata=fontdata.glyphs
+ local dowidth=not fontdata.variabledata.hvarwidths
+ if bittest(flags,0x0001) then
+ for i=1,nofglyphs+1 do
+ data[i]=dataoffset+readulong(f)
+ end
+ else
+ for i=1,nofglyphs+1 do
+ data[i]=dataoffset+2*readushort(f)
+ end
+ end
+ if noftuples>0 then
+ setposition(f,tupleoffset)
+ for i=1,noftuples do
+ tuples[i]=readtuplerecord(f,nofaxis)
+ end
+ end
+ local nextoffset=false
+ local startoffset=data[1]
+ for i=1,nofglyphs do
+ nextoffset=data[i+1]
+ local glyph=glyphdata[i-1]
+ local name=trace_deltas and glyph.name
+ if startoffset==nextoffset then
+ if name then
+ report("no deltas for glyph %a",name)
+ end
+ else
+ local shape=shapedata[i-1]
+ if not shape then
+ if name then
+ report("no shape for glyph %a",name)
+ end
+ else
+ lastoffset=startoffset
+ setposition(f,startoffset)
+ local flags=readushort(f)
+ local count=band(flags,0x0FFF)
+ local offset=startoffset+readushort(f)
+ local deltas={}
+ local allpoints=(shape.nofpoints or 0)
+ local shared=false
+ local nofshared=0
+ if bittest(flags,0x8000) then
+ local current=getposition(f)
+ setposition(f,offset)
+ shared,nofshared=readpoints(f)
+ offset=getposition(f)
+ setposition(f,current)
+ end
+ for j=1,count do
+ local size=readushort(f)
+ local flags=readushort(f)
+ local index=band(flags,0x0FFF)
+ local haspeak=bittest(flags,0x8000)
+ local intermediate=bittest(flags,0x4000)
+ local private=bittest(flags,0x2000)
+ local peak=nil
+ local start=nil
+ local stop=nil
+ local xvalues=nil
+ local yvalues=nil
+ local points=shared
+ local nofpoints=nofshared
+ if haspeak then
+ peak=readtuplerecord(f,nofaxis)
+ else
+ if index+1>#tuples then
+ report("error, bad tuple index",index)
+ end
+ peak=tuples[index+1]
+ end
+ if intermediate then
+ start=readtuplerecord(f,nofaxis)
+ stop=readtuplerecord(f,nofaxis)
+ end
+ if size>0 then
+ local current=getposition(f)
+ setposition(f,offset)
+ if private then
+ points,nofpoints=readpoints(f)
+ end
+ if nofpoints==0 then
+ nofpoints=allpoints+4
+ end
+ if nofpoints>0 then
+ xvalues=readdeltas(f,nofpoints)
+ yvalues=readdeltas(f,nofpoints)
+ end
+ offset=offset+size
+ setposition(f,current)
+ end
+ if not xvalues and not yvalues then
+ points=nil
+ end
+ local s=1
+ for i=1,nofaxis do
+ local f=factors[i]
+ local peak=peak and peak [i] or 0
+ local start=start and start[i] or (peak<0 and peak or 0)
+ local stop=stop and stop [i] or (peak>0 and peak or 0)
+ if start>peak or peak>stop then
+ elseif start<0 and stop>0 and peak~=0 then
+ elseif peak==0 then
+ elseif f<start or f>stop then
+ s=0
+ break
+ elseif f<peak then
+ s=s*(f-start)/(peak-start)
+ elseif f>peak then
+ s=s*(stop-f)/(stop-peak)
+ else
+ end
+ end
+ if s==0 then
+ if name then
+ report("no deltas applied for glyph %a",name)
+ end
+ else
+ deltas[#deltas+1]={
+ factor=s,
+ points=points,
+ xvalues=xvalues,
+ yvalues=yvalues,
+ }
+ end
+ end
+ if shape.type=="glyph" then
+ applyaxis(glyph,shape,deltas,dowidth)
+ else
+ shape.deltas=deltas
+ end
+ end
+ end
+ startoffset=nextoffset
+ end
+ end
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-dsp']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local next,type=next,type
+local bittest=bit32.btest
+local band=bit32.band
+local extract=bit32.extract
+local bor=bit32.bor
+local lshift=bit32.lshift
+local rshift=bit32.rshift
+local gsub=string.gsub
+local lower=string.lower
+local sub=string.sub
+local strip=string.strip
+local tohash=table.tohash
+local concat=table.concat
+local copy=table.copy
+local reversed=table.reversed
+local sort=table.sort
+local insert=table.insert
+local round=math.round
+local lpegmatch=lpeg.match
+local setmetatableindex=table.setmetatableindex
+local formatters=string.formatters
+local sortedkeys=table.sortedkeys
+local sortedhash=table.sortedhash
+local report=logs.reporter("otf reader")
+local readers=fonts.handlers.otf.readers
+local streamreader=readers.streamreader
+local setposition=streamreader.setposition
+local getposition=streamreader.getposition
+local readushort=streamreader.readcardinal2
+local readulong=streamreader.readcardinal4
+local readinteger=streamreader.readinteger1
+local readshort=streamreader.readinteger2
+local readstring=streamreader.readstring
+local readtag=streamreader.readtag
+local readbytes=streamreader.readbytes
+local readfixed=streamreader.readfixed4
+local read2dot14=streamreader.read2dot14
+local skipshort=streamreader.skipshort
+local skipbytes=streamreader.skip
+local readfword=readshort
+local readbytetable=streamreader.readbytetable
+local readbyte=streamreader.readbyte
+local gsubhandlers={}
+local gposhandlers={}
+readers.gsubhandlers=gsubhandlers
+readers.gposhandlers=gposhandlers
+local helpers=readers.helpers
+local gotodatatable=helpers.gotodatatable
+local setvariabledata=helpers.setvariabledata
+local lookupidoffset=-1
+local classes={
+ "base",
+ "ligature",
+ "mark",
+ "component",
+}
+local gsubtypes={
+ "single",
+ "multiple",
+ "alternate",
+ "ligature",
+ "context",
+ "chainedcontext",
+ "extension",
+ "reversechainedcontextsingle",
+}
+local gpostypes={
+ "single",
+ "pair",
+ "cursive",
+ "marktobase",
+ "marktoligature",
+ "marktomark",
+ "context",
+ "chainedcontext",
+ "extension",
+}
+local chaindirections={
+ context=0,
+ chainedcontext=1,
+ reversechainedcontextsingle=-1,
+}
+local function setmetrics(data,where,tag,d)
+ local w=data[where]
+ if w then
+ local v=w[tag]
+ if v then
+ w[tag]=v+d
+ end
+ end
+end
+local variabletags={
+ hasc=function(data,d) setmetrics(data,"windowsmetrics","typoascender",d) end,
+ hdsc=function(data,d) setmetrics(data,"windowsmetrics","typodescender",d) end,
+ hlgp=function(data,d) setmetrics(data,"windowsmetrics","typolinegap",d) end,
+ hcla=function(data,d) setmetrics(data,"windowsmetrics","winascent",d) end,
+ hcld=function(data,d) setmetrics(data,"windowsmetrics","windescent",d) end,
+ vasc=function(data,d) setmetrics(data,"vhea not done","ascent",d) end,
+ vdsc=function(data,d) setmetrics(data,"vhea not done","descent",d) end,
+ vlgp=function(data,d) setmetrics(data,"vhea not done","linegap",d) end,
+ xhgt=function(data,d) setmetrics(data,"windowsmetrics","xheight",d) end,
+ cpht=function(data,d) setmetrics(data,"windowsmetrics","capheight",d) end,
+ sbxs=function(data,d) setmetrics(data,"windowsmetrics","subscriptxsize",d) end,
+ sbys=function(data,d) setmetrics(data,"windowsmetrics","subscriptysize",d) end,
+ sbxo=function(data,d) setmetrics(data,"windowsmetrics","subscriptxoffset",d) end,
+ sbyo=function(data,d) setmetrics(data,"windowsmetrics","subscriptyoffset",d) end,
+ spxs=function(data,d) setmetrics(data,"windowsmetrics","superscriptxsize",d) end,
+ spys=function(data,d) setmetrics(data,"windowsmetrics","superscriptysize",d) end,
+ spxo=function(data,d) setmetrics(data,"windowsmetrics","superscriptxoffset",d) end,
+ spyo=function(data,d) setmetrics(data,"windowsmetrics","superscriptyoffset",d) end,
+ strs=function(data,d) setmetrics(data,"windowsmetrics","strikeoutsize",d) end,
+ stro=function(data,d) setmetrics(data,"windowsmetrics","strikeoutpos",d) end,
+ unds=function(data,d) setmetrics(data,"postscript","underlineposition",d) end,
+ undo=function(data,d) setmetrics(data,"postscript","underlinethickness",d) end,
+}
+local read_cardinal={
+ streamreader.readcardinal1,
+ streamreader.readcardinal2,
+ streamreader.readcardinal3,
+ streamreader.readcardinal4,
+}
+local read_integer={
+ streamreader.readinteger1,
+ streamreader.readinteger2,
+ streamreader.readinteger3,
+ streamreader.readinteger4,
+}
+local lookupnames={
+ gsub={
+ single="gsub_single",
+ multiple="gsub_multiple",
+ alternate="gsub_alternate",
+ ligature="gsub_ligature",
+ context="gsub_context",
+ chainedcontext="gsub_contextchain",
+ reversechainedcontextsingle="gsub_reversecontextchain",
+ },
+ gpos={
+ single="gpos_single",
+ pair="gpos_pair",
+ cursive="gpos_cursive",
+ marktobase="gpos_mark2base",
+ marktoligature="gpos_mark2ligature",
+ marktomark="gpos_mark2mark",
+ context="gpos_context",
+ chainedcontext="gpos_contextchain",
+ }
+}
+local lookupflags=setmetatableindex(function(t,k)
+ local v={
+ bittest(k,0x0008) and true or false,
+ bittest(k,0x0004) and true or false,
+ bittest(k,0x0002) and true or false,
+ bittest(k,0x0001) and true or false,
+ }
+ t[k]=v
+ return v
+end)
+local pattern=lpeg.Cf (
+ lpeg.Ct("")*lpeg.Cg (
+ lpeg.C((lpeg.R("az","09")+lpeg.P(" "))^1)*lpeg.S(" :=")*(lpeg.patterns.number/tonumber)*lpeg.S(" ,")^0
+ )^1,rawset
+)
+local hash=table.setmetatableindex(function(t,k)
+ local v=lpegmatch(pattern,k)
+ local t={}
+ for k,v in sortedhash(v) do
+ t[#t+1]=k.."="..v
+ end
+ v=concat(t,",")
+ t[k]=v
+ return v
+end)
+helpers.normalizedaxishash=hash
+local cleanname=fonts.names and fonts.names.cleanname or function(name)
+ return name and (gsub(lower(name),"[^%a%d]","")) or nil
+end
+helpers.cleanname=cleanname
+function helpers.normalizedaxis(str)
+ return hash[str] or str
+end
+local function axistofactors(str)
+ return lpegmatch(pattern,str)
+end
+local function getaxisscale(segments,minimum,default,maximum,user)
+ if not minimum or not default or not maximum then
+ return false
+ end
+ if user<minimum then
+ user=minimum
+ elseif user>maximum then
+ user=maximum
+ end
+ if user<default then
+ default=- (default-user)/(default-minimum)
+ elseif user>default then
+ default=(user-default)/(maximum-default)
+ else
+ default=0
+ end
+ if not segments then
+ return default
+ end
+ local e
+ for i=1,#segments do
+ local s=segments[i]
+ if type(s)~="number" then
+ report("using default axis scale")
+ return default
+ elseif s[1]>=default then
+ if s[2]==default then
+ return default
+ else
+ e=i
+ break
+ end
+ end
+ end
+ if e then
+ local b=segments[e-1]
+ local e=segments[e]
+ return b[2]+(e[2]-b[2])*(default-b[1])/(e[1]-b[1])
+ else
+ return false
+ end
+end
+local function getfactors(data,instancespec)
+ if instancespec==true then
+ elseif type(instancespec)~="string" or instancespec=="" then
+ return
+ end
+ local variabledata=data.variabledata
+ if not variabledata then
+ return
+ end
+ local instances=variabledata.instances
+ local axis=variabledata.axis
+ local segments=variabledata.segments
+ if instances and axis then
+ local values
+ if instancespec==true then
+ values={}
+ for i=1,#axis do
+ values[i]={
+ value=axis[i].default,
+ }
+ end
+ else
+ for i=1,#instances do
+ local instance=instances[i]
+ if cleanname(instance.subfamily)==instancespec then
+ values=instance.values
+ break
+ end
+ end
+ end
+ if values then
+ local factors={}
+ for i=1,#axis do
+ local a=axis[i]
+ factors[i]=getaxisscale(segments,a.minimum,a.default,a.maximum,values[i].value)
+ end
+ return factors
+ end
+ local values=axistofactors(hash[instancespec] or instancespec)
+ if values then
+ local factors={}
+ for i=1,#axis do
+ local a=axis[i]
+ local d=a.default
+ factors[i]=getaxisscale(segments,a.minimum,d,a.maximum,values[a.name or a.tag] or d)
+ end
+ return factors
+ end
+ end
+end
+local function getscales(regions,factors)
+ local scales={}
+ for i=1,#regions do
+ local region=regions[i]
+ local s=1
+ for j=1,#region do
+ local axis=region[j]
+ local f=factors[j]
+ local start=axis.start
+ local peak=axis.peak
+ local stop=axis.stop
+ if start>peak or peak>stop then
+ elseif start<0 and stop>0 and peak~=0 then
+ elseif peak==0 then
+ elseif f<start or f>stop then
+ s=0
+ break
+ elseif f<peak then
+ s=s*(f-start)/(peak-start)
+ elseif f>peak then
+ s=s*(stop-f)/(stop-peak)
+ else
+ end
+ end
+ scales[i]=s
+ end
+ return scales
+end
+helpers.getaxisscale=getaxisscale
+helpers.getfactors=getfactors
+helpers.getscales=getscales
+helpers.axistofactors=axistofactors
+local function readvariationdata(f,storeoffset,factors)
+ local position=getposition(f)
+ setposition(f,storeoffset)
+ local format=readushort(f)
+ local regionoffset=storeoffset+readulong(f)
+ local nofdeltadata=readushort(f)
+ local deltadata={}
+ for i=1,nofdeltadata do
+ deltadata[i]=readulong(f)
+ end
+ setposition(f,regionoffset)
+ local nofaxis=readushort(f)
+ local nofregions=readushort(f)
+ local regions={}
+ for i=1,nofregions do
+ local t={}
+ for i=1,nofaxis do
+ t[i]={
+ start=read2dot14(f),
+ peak=read2dot14(f),
+ stop=read2dot14(f),
+ }
+ end
+ regions[i]=t
+ end
+ if factors then
+ for i=1,nofdeltadata do
+ setposition(f,storeoffset+deltadata[i])
+ local nofdeltasets=readushort(f)
+ local nofshorts=readushort(f)
+ local nofregions=readushort(f)
+ local usedregions={}
+ local deltas={}
+ for i=1,nofregions do
+ usedregions[i]=regions[readushort(f)+1]
+ end
+ for i=1,nofdeltasets do
+ local t={}
+ for i=1,nofshorts do
+ t[i]=readshort(f)
+ end
+ for i=nofshorts+1,nofregions do
+ t[i]=readinteger(f)
+ end
+ deltas[i]=t
+ end
+ deltadata[i]={
+ regions=usedregions,
+ deltas=deltas,
+ scales=factors and getscales(usedregions,factors) or nil,
+ }
+ end
+ end
+ setposition(f,position)
+ return regions,deltadata
+end
+helpers.readvariationdata=readvariationdata
+local function readcoverage(f,offset,simple)
+ setposition(f,offset)
+ local coverageformat=readushort(f)
+ local coverage={}
+ if coverageformat==1 then
+ local nofcoverage=readushort(f)
+ if simple then
+ for i=1,nofcoverage do
+ coverage[i]=readushort(f)
+ end
+ else
+ for i=0,nofcoverage-1 do
+ coverage[readushort(f)]=i
+ end
+ end
+ elseif coverageformat==2 then
+ local nofranges=readushort(f)
+ local n=simple and 1 or 0
+ for i=1,nofranges do
+ local firstindex=readushort(f)
+ local lastindex=readushort(f)
+ local coverindex=readushort(f)
+ if simple then
+ for i=firstindex,lastindex do
+ coverage[n]=i
+ n=n+1
+ end
+ else
+ for i=firstindex,lastindex do
+ coverage[i]=n
+ n=n+1
+ end
+ end
+ end
+ else
+ report("unknown coverage format %a ",coverageformat)
+ end
+ return coverage
+end
+local function readclassdef(f,offset,preset)
+ setposition(f,offset)
+ local classdefformat=readushort(f)
+ local classdef={}
+ if type(preset)=="number" then
+ for k=0,preset-1 do
+ classdef[k]=1
+ end
+ end
+ if classdefformat==1 then
+ local index=readushort(f)
+ local nofclassdef=readushort(f)
+ for i=1,nofclassdef do
+ classdef[index]=readushort(f)+1
+ index=index+1
+ end
+ elseif classdefformat==2 then
+ local nofranges=readushort(f)
+ local n=0
+ for i=1,nofranges do
+ local firstindex=readushort(f)
+ local lastindex=readushort(f)
+ local class=readushort(f)+1
+ for i=firstindex,lastindex do
+ classdef[i]=class
+ end
+ end
+ else
+ report("unknown classdef format %a ",classdefformat)
+ end
+ if type(preset)=="table" then
+ for k in next,preset do
+ if not classdef[k] then
+ classdef[k]=1
+ end
+ end
+ end
+ return classdef
+end
+local function classtocoverage(defs)
+ if defs then
+ local list={}
+ for index,class in next,defs do
+ local c=list[class]
+ if c then
+ c[#c+1]=index
+ else
+ list[class]={ index }
+ end
+ end
+ return list
+ end
+end
+local skips={ [0]=0,
+ 1,
+ 1,
+ 2,
+ 1,
+ 2,
+ 2,
+ 3,
+ 2,
+ 2,
+ 3,
+ 2,
+ 3,
+ 3,
+ 4,
+}
+local function readvariation(f,offset)
+ local p=getposition(f)
+ setposition(f,offset)
+ local outer=readushort(f)
+ local inner=readushort(f)
+ local format=readushort(f)
+ setposition(f,p)
+ if format==0x8000 then
+ return outer,inner
+ end
+end
+local function readposition(f,format,mainoffset,getdelta)
+ if format==0 then
+ return false
+ end
+ if format==0x04 then
+ local h=readshort(f)
+ if h==0 then
+ return true
+ else
+ return { 0,0,h,0 }
+ end
+ end
+ if format==0x05 then
+ local x=readshort(f)
+ local h=readshort(f)
+ if x==0 and h==0 then
+ return true
+ else
+ return { x,0,h,0 }
+ end
+ end
+ if format==0x44 then
+ local h=readshort(f)
+ if getdelta then
+ local d=readshort(f)
+ if d>0 then
+ local outer,inner=readvariation(f,mainoffset+d)
+ if outer then
+ h=h+getdelta(outer,inner)
+ end
+ end
+ else
+ skipshort(f,1)
+ end
+ if h==0 then
+ return true
+ else
+ return { 0,0,h,0 }
+ end
+ end
+ local x=bittest(format,0x01) and readshort(f) or 0
+ local y=bittest(format,0x02) and readshort(f) or 0
+ local h=bittest(format,0x04) and readshort(f) or 0
+ local v=bittest(format,0x08) and readshort(f) or 0
+ if format>=0x10 then
+ local X=bittest(format,0x10) and skipshort(f) or 0
+ local Y=bittest(format,0x20) and skipshort(f) or 0
+ local H=bittest(format,0x40) and skipshort(f) or 0
+ local V=bittest(format,0x80) and skipshort(f) or 0
+ local s=skips[extract(format,4,4)]
+ if s>0 then
+ skipshort(f,s)
+ end
+ if getdelta then
+ if X>0 then
+ local outer,inner=readvariation(f,mainoffset+X)
+ if outer then
+ x=x+getdelta(outer,inner)
+ end
+ end
+ if Y>0 then
+ local outer,inner=readvariation(f,mainoffset+Y)
+ if outer then
+ y=y+getdelta(outer,inner)
+ end
+ end
+ if H>0 then
+ local outer,inner=readvariation(f,mainoffset+H)
+ if outer then
+ h=h+getdelta(outer,inner)
+ end
+ end
+ if V>0 then
+ local outer,inner=readvariation(f,mainoffset+V)
+ if outer then
+ v=v+getdelta(outer,inner)
+ end
+ end
+ end
+ return { x,y,h,v }
+ elseif x==0 and y==0 and h==0 and v==0 then
+ return true
+ else
+ return { x,y,h,v }
+ end
+end
+local function readanchor(f,offset,getdelta)
+ if not offset or offset==0 then
+ return nil
+ end
+ setposition(f,offset)
+ local format=readshort(f)
+ local x=readshort(f)
+ local y=readshort(f)
+ if format==3 then
+ if getdelta then
+ local X=readshort(f)
+ local Y=readshort(f)
+ if X>0 then
+ local outer,inner=readvariation(f,offset+X)
+ if outer then
+ x=x+getdelta(outer,inner)
+ end
+ end
+ if Y>0 then
+ local outer,inner=readvariation(f,offset+Y)
+ if outer then
+ y=y+getdelta(outer,inner)
+ end
+ end
+ else
+ skipshort(f,2)
+ end
+ return { x,y }
+ else
+ return { x,y }
+ end
+end
+local function readfirst(f,offset)
+ if offset then
+ setposition(f,offset)
+ end
+ return { readushort(f) }
+end
+local function readarray(f,offset,first)
+ if offset then
+ setposition(f,offset)
+ end
+ local n=readushort(f)
+ if first then
+ local t={ first }
+ for i=2,n do
+ t[i]=readushort(f)
+ end
+ return t,n
+ elseif n>0 then
+ local t={}
+ for i=1,n do
+ t[i]=readushort(f)
+ end
+ return t,n
+ end
+end
+local function readcoveragearray(f,offset,t,simple)
+ if not t then
+ return nil
+ end
+ local n=#t
+ if n==0 then
+ return nil
+ end
+ for i=1,n do
+ t[i]=readcoverage(f,offset+t[i],simple)
+ end
+ return t
+end
+local function covered(subset,all)
+ local used,u
+ for i=1,#subset do
+ local s=subset[i]
+ if all[s] then
+ if used then
+ u=u+1
+ used[u]=s
+ else
+ u=1
+ used={ s }
+ end
+ end
+ end
+ return used
+end
+local function readlookuparray(f,noflookups,nofcurrent)
+ local lookups={}
+ if noflookups>0 then
+ local length=0
+ for i=1,noflookups do
+ local index=readushort(f)+1
+ if index>length then
+ length=index
+ end
+ local lookup=readushort(f)+1
+ local list=lookups[index]
+ if list then
+ list[#list+1]=lookup
+ else
+ lookups[index]={ lookup }
+ end
+ end
+ for index=1,length do
+ if not lookups[index] then
+ lookups[index]=false
+ end
+ end
+ end
+ return lookups
+end
+local function unchainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,what)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ if subtype==1 then
+ local coverage=readushort(f)
+ local subclasssets=readarray(f)
+ local rules={}
+ if subclasssets then
+ coverage=readcoverage(f,tableoffset+coverage,true)
+ for i=1,#subclasssets do
+ local offset=subclasssets[i]
+ if offset>0 then
+ local firstcoverage=coverage[i]
+ local rulesoffset=tableoffset+offset
+ local subclassrules=readarray(f,rulesoffset)
+ for rule=1,#subclassrules do
+ setposition(f,rulesoffset+subclassrules[rule])
+ local nofcurrent=readushort(f)
+ local noflookups=readushort(f)
+ local current={ { firstcoverage } }
+ for i=2,nofcurrent do
+ current[i]={ readushort(f) }
+ end
+ local lookups=readlookuparray(f,noflookups,nofcurrent)
+ rules[#rules+1]={
+ current=current,
+ lookups=lookups
+ }
+ end
+ end
+ end
+ else
+ report("empty subclassset in %a subtype %i","unchainedcontext",subtype)
+ end
+ return {
+ format="glyphs",
+ rules=rules,
+ }
+ elseif subtype==2 then
+ local coverage=readushort(f)
+ local currentclassdef=readushort(f)
+ local subclasssets=readarray(f)
+ local rules={}
+ if subclasssets then
+ coverage=readcoverage(f,tableoffset+coverage)
+ currentclassdef=readclassdef(f,tableoffset+currentclassdef,coverage)
+ local currentclasses=classtocoverage(currentclassdef,fontdata.glyphs)
+ for class=1,#subclasssets do
+ local offset=subclasssets[class]
+ if offset>0 then
+ local firstcoverage=currentclasses[class]
+ if firstcoverage then
+ firstcoverage=covered(firstcoverage,coverage)
+ if firstcoverage then
+ local rulesoffset=tableoffset+offset
+ local subclassrules=readarray(f,rulesoffset)
+ for rule=1,#subclassrules do
+ setposition(f,rulesoffset+subclassrules[rule])
+ local nofcurrent=readushort(f)
+ local noflookups=readushort(f)
+ local current={ firstcoverage }
+ for i=2,nofcurrent do
+ current[i]=currentclasses[readushort(f)+1]
+ end
+ local lookups=readlookuparray(f,noflookups,nofcurrent)
+ rules[#rules+1]={
+ current=current,
+ lookups=lookups
+ }
+ end
+ else
+ report("no coverage")
+ end
+ else
+ report("no coverage class")
+ end
+ end
+ end
+ else
+ report("empty subclassset in %a subtype %i","unchainedcontext",subtype)
+ end
+ return {
+ format="class",
+ rules=rules,
+ }
+ elseif subtype==3 then
+ local current=readarray(f)
+ local noflookups=readushort(f)
+ local lookups=readlookuparray(f,noflookups,#current)
+ current=readcoveragearray(f,tableoffset,current,true)
+ return {
+ format="coverage",
+ rules={
+ {
+ current=current,
+ lookups=lookups,
+ }
+ }
+ }
+ else
+ report("unsupported subtype %a in %a %s",subtype,"unchainedcontext",what)
+ end
+end
+local function chainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,what)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ if subtype==1 then
+ local coverage=readushort(f)
+ local subclasssets=readarray(f)
+ local rules={}
+ if subclasssets then
+ coverage=readcoverage(f,tableoffset+coverage,true)
+ for i=1,#subclasssets do
+ local offset=subclasssets[i]
+ if offset>0 then
+ local firstcoverage=coverage[i]
+ local rulesoffset=tableoffset+offset
+ local subclassrules=readarray(f,rulesoffset)
+ for rule=1,#subclassrules do
+ setposition(f,rulesoffset+subclassrules[rule])
+ local nofbefore=readushort(f)
+ local before
+ if nofbefore>0 then
+ before={}
+ for i=1,nofbefore do
+ before[i]={ readushort(f) }
+ end
+ end
+ local nofcurrent=readushort(f)
+ local current={ { firstcoverage } }
+ for i=2,nofcurrent do
+ current[i]={ readushort(f) }
+ end
+ local nofafter=readushort(f)
+ local after
+ if nofafter>0 then
+ after={}
+ for i=1,nofafter do
+ after[i]={ readushort(f) }
+ end
+ end
+ local noflookups=readushort(f)
+ local lookups=readlookuparray(f,noflookups,nofcurrent)
+ rules[#rules+1]={
+ before=before,
+ current=current,
+ after=after,
+ lookups=lookups,
+ }
+ end
+ end
+ end
+ else
+ report("empty subclassset in %a subtype %i","chainedcontext",subtype)
+ end
+ return {
+ format="glyphs",
+ rules=rules,
+ }
+ elseif subtype==2 then
+ local coverage=readushort(f)
+ local beforeclassdef=readushort(f)
+ local currentclassdef=readushort(f)
+ local afterclassdef=readushort(f)
+ local subclasssets=readarray(f)
+ local rules={}
+ if subclasssets then
+ local coverage=readcoverage(f,tableoffset+coverage)
+ local beforeclassdef=readclassdef(f,tableoffset+beforeclassdef,nofglyphs)
+ local currentclassdef=readclassdef(f,tableoffset+currentclassdef,coverage)
+ local afterclassdef=readclassdef(f,tableoffset+afterclassdef,nofglyphs)
+ local beforeclasses=classtocoverage(beforeclassdef,fontdata.glyphs)
+ local currentclasses=classtocoverage(currentclassdef,fontdata.glyphs)
+ local afterclasses=classtocoverage(afterclassdef,fontdata.glyphs)
+ for class=1,#subclasssets do
+ local offset=subclasssets[class]
+ if offset>0 then
+ local firstcoverage=currentclasses[class]
+ if firstcoverage then
+ firstcoverage=covered(firstcoverage,coverage)
+ if firstcoverage then
+ local rulesoffset=tableoffset+offset
+ local subclassrules=readarray(f,rulesoffset)
+ for rule=1,#subclassrules do
+ setposition(f,rulesoffset+subclassrules[rule])
+ local nofbefore=readushort(f)
+ local before
+ if nofbefore>0 then
+ before={}
+ for i=1,nofbefore do
+ before[i]=beforeclasses[readushort(f)+1]
+ end
+ end
+ local nofcurrent=readushort(f)
+ local current={ firstcoverage }
+ for i=2,nofcurrent do
+ current[i]=currentclasses[readushort(f)+1]
+ end
+ local nofafter=readushort(f)
+ local after
+ if nofafter>0 then
+ after={}
+ for i=1,nofafter do
+ after[i]=afterclasses[readushort(f)+1]
+ end
+ end
+ local noflookups=readushort(f)
+ local lookups=readlookuparray(f,noflookups,nofcurrent)
+ rules[#rules+1]={
+ before=before,
+ current=current,
+ after=after,
+ lookups=lookups,
+ }
+ end
+ else
+ report("no coverage")
+ end
+ else
+ report("class is not covered")
+ end
+ end
+ end
+ else
+ report("empty subclassset in %a subtype %i","chainedcontext",subtype)
+ end
+ return {
+ format="class",
+ rules=rules,
+ }
+ elseif subtype==3 then
+ local before=readarray(f)
+ local current=readarray(f)
+ local after=readarray(f)
+ local noflookups=readushort(f)
+ local lookups=readlookuparray(f,noflookups,#current)
+ before=readcoveragearray(f,tableoffset,before,true)
+ current=readcoveragearray(f,tableoffset,current,true)
+ after=readcoveragearray(f,tableoffset,after,true)
+ return {
+ format="coverage",
+ rules={
+ {
+ before=before,
+ current=current,
+ after=after,
+ lookups=lookups,
+ }
+ }
+ }
+ else
+ report("unsupported subtype %a in %a %s",subtype,"chainedcontext",what)
+ end
+end
+local function extension(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,types,handlers,what)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ if subtype==1 then
+ local lookuptype=types[readushort(f)]
+ local faroffset=readulong(f)
+ local handler=handlers[lookuptype]
+ if handler then
+ return handler(f,fontdata,lookupid,tableoffset+faroffset,0,glyphs,nofglyphs),lookuptype
+ else
+ report("no handler for lookuptype %a subtype %a in %s %s",lookuptype,subtype,what,"extension")
+ end
+ else
+ report("unsupported subtype %a in %s %s",subtype,what,"extension")
+ end
+end
+function gsubhandlers.single(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ if subtype==1 then
+ local coverage=readushort(f)
+ local delta=readshort(f)
+ local coverage=readcoverage(f,tableoffset+coverage)
+ for index in next,coverage do
+ local newindex=index+delta
+ if index>nofglyphs or newindex>nofglyphs then
+ report("invalid index in %s format %i: %i -> %i (max %i)","single",subtype,index,newindex,nofglyphs)
+ coverage[index]=nil
+ else
+ coverage[index]=newindex
+ end
+ end
+ return {
+ coverage=coverage
+ }
+ elseif subtype==2 then
+ local coverage=readushort(f)
+ local nofreplacements=readushort(f)
+ local replacements={}
+ for i=1,nofreplacements do
+ replacements[i]=readushort(f)
+ end
+ local coverage=readcoverage(f,tableoffset+coverage)
+ for index,newindex in next,coverage do
+ newindex=newindex+1
+ if index>nofglyphs or newindex>nofglyphs then
+ report("invalid index in %s format %i: %i -> %i (max %i)","single",subtype,index,newindex,nofglyphs)
+ coverage[index]=nil
+ else
+ coverage[index]=replacements[newindex]
+ end
+ end
+ return {
+ coverage=coverage
+ }
+ else
+ report("unsupported subtype %a in %a substitution",subtype,"single")
+ end
+end
+local function sethandler(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,what)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ if subtype==1 then
+ local coverage=readushort(f)
+ local nofsequence=readushort(f)
+ local sequences={}
+ for i=1,nofsequence do
+ sequences[i]=readushort(f)
+ end
+ for i=1,nofsequence do
+ setposition(f,tableoffset+sequences[i])
+ local n=readushort(f)
+ local s={}
+ for i=1,n do
+ s[i]=readushort(f)
+ end
+ sequences[i]=s
+ end
+ local coverage=readcoverage(f,tableoffset+coverage)
+ for index,newindex in next,coverage do
+ newindex=newindex+1
+ if index>nofglyphs or newindex>nofglyphs then
+ report("invalid index in %s format %i: %i -> %i (max %i)",what,subtype,index,newindex,nofglyphs)
+ coverage[index]=nil
+ else
+ coverage[index]=sequences[newindex]
+ end
+ end
+ return {
+ coverage=coverage
+ }
+ else
+ report("unsupported subtype %a in %a substitution",subtype,what)
+ end
+end
+function gsubhandlers.multiple(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return sethandler(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,"multiple")
+end
+function gsubhandlers.alternate(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return sethandler(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,"alternate")
+end
+function gsubhandlers.ligature(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ if subtype==1 then
+ local coverage=readushort(f)
+ local nofsets=readushort(f)
+ local ligatures={}
+ for i=1,nofsets do
+ ligatures[i]=readushort(f)
+ end
+ for i=1,nofsets do
+ local offset=lookupoffset+offset+ligatures[i]
+ setposition(f,offset)
+ local n=readushort(f)
+ local l={}
+ for i=1,n do
+ l[i]=offset+readushort(f)
+ end
+ ligatures[i]=l
+ end
+ local coverage=readcoverage(f,tableoffset+coverage)
+ for index,newindex in next,coverage do
+ local hash={}
+ local ligatures=ligatures[newindex+1]
+ for i=1,#ligatures do
+ local offset=ligatures[i]
+ setposition(f,offset)
+ local lig=readushort(f)
+ local cnt=readushort(f)
+ local hsh=hash
+ for i=2,cnt do
+ local c=readushort(f)
+ local h=hsh[c]
+ if not h then
+ h={}
+ hsh[c]=h
+ end
+ hsh=h
+ end
+ hsh.ligature=lig
+ end
+ coverage[index]=hash
+ end
+ return {
+ coverage=coverage
+ }
+ else
+ report("unsupported subtype %a in %a substitution",subtype,"ligature")
+ end
+end
+function gsubhandlers.context(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return unchainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,"substitution"),"context"
+end
+function gsubhandlers.chainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return chainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,"substitution"),"chainedcontext"
+end
+function gsubhandlers.extension(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return extension(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,gsubtypes,gsubhandlers,"substitution")
+end
+function gsubhandlers.reversechainedcontextsingle(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ if subtype==1 then
+ local current=readfirst(f)
+ local before=readarray(f)
+ local after=readarray(f)
+ local replacements=readarray(f)
+ current=readcoveragearray(f,tableoffset,current,true)
+ before=readcoveragearray(f,tableoffset,before,true)
+ after=readcoveragearray(f,tableoffset,after,true)
+ return {
+ format="reversecoverage",
+ rules={
+ {
+ before=before,
+ current=current,
+ after=after,
+ replacements=replacements,
+ }
+ }
+ },"reversechainedcontextsingle"
+ else
+ report("unsupported subtype %a in %a substitution",subtype,"reversechainedcontextsingle")
+ end
+end
+local function readpairsets(f,tableoffset,sets,format1,format2,mainoffset,getdelta)
+ local done={}
+ for i=1,#sets do
+ local offset=sets[i]
+ local reused=done[offset]
+ if not reused then
+ offset=tableoffset+offset
+ setposition(f,offset)
+ local n=readushort(f)
+ reused={}
+ for i=1,n do
+ reused[i]={
+ readushort(f),
+ readposition(f,format1,offset,getdelta),
+ readposition(f,format2,offset,getdelta),
+ }
+ end
+ done[offset]=reused
+ end
+ sets[i]=reused
+ end
+ return sets
+end
+local function readpairclasssets(f,nofclasses1,nofclasses2,format1,format2,mainoffset,getdelta)
+ local classlist1={}
+ for i=1,nofclasses1 do
+ local classlist2={}
+ classlist1[i]=classlist2
+ for j=1,nofclasses2 do
+ local one=readposition(f,format1,mainoffset,getdelta)
+ local two=readposition(f,format2,mainoffset,getdelta)
+ if one or two then
+ classlist2[j]={ one,two }
+ else
+ classlist2[j]=false
+ end
+ end
+ end
+ return classlist1
+end
+function gposhandlers.single(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ local getdelta=fontdata.temporary.getdelta
+ if subtype==1 then
+ local coverage=readushort(f)
+ local format=readushort(f)
+ local value=readposition(f,format,tableoffset,getdelta)
+ local coverage=readcoverage(f,tableoffset+coverage)
+ for index,newindex in next,coverage do
+ coverage[index]=value
+ end
+ return {
+ format="single",
+ coverage=coverage,
+ }
+ elseif subtype==2 then
+ local coverage=readushort(f)
+ local format=readushort(f)
+ local nofvalues=readushort(f)
+ local values={}
+ for i=1,nofvalues do
+ values[i]=readposition(f,format,tableoffset,getdelta)
+ end
+ local coverage=readcoverage(f,tableoffset+coverage)
+ for index,newindex in next,coverage do
+ coverage[index]=values[newindex+1]
+ end
+ return {
+ format="single",
+ coverage=coverage,
+ }
+ else
+ report("unsupported subtype %a in %a positioning",subtype,"single")
+ end
+end
+function gposhandlers.pair(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ local getdelta=fontdata.temporary.getdelta
+ if subtype==1 then
+ local coverage=readushort(f)
+ local format1=readushort(f)
+ local format2=readushort(f)
+ local sets=readarray(f)
+ sets=readpairsets(f,tableoffset,sets,format1,format2,mainoffset,getdelta)
+ coverage=readcoverage(f,tableoffset+coverage)
+ for index,newindex in next,coverage do
+ local set=sets[newindex+1]
+ local hash={}
+ for i=1,#set do
+ local value=set[i]
+ if value then
+ local other=value[1]
+ local first=value[2]
+ local second=value[3]
+ if first or second then
+ hash[other]={ first,second or nil }
+ else
+ hash[other]=nil
+ end
+ end
+ end
+ coverage[index]=hash
+ end
+ return {
+ format="pair",
+ coverage=coverage,
+ }
+ elseif subtype==2 then
+ local coverage=readushort(f)
+ local format1=readushort(f)
+ local format2=readushort(f)
+ local classdef1=readushort(f)
+ local classdef2=readushort(f)
+ local nofclasses1=readushort(f)
+ local nofclasses2=readushort(f)
+ local classlist=readpairclasssets(f,nofclasses1,nofclasses2,format1,format2,tableoffset,getdelta)
+ coverage=readcoverage(f,tableoffset+coverage)
+ classdef1=readclassdef(f,tableoffset+classdef1,coverage)
+ classdef2=readclassdef(f,tableoffset+classdef2,nofglyphs)
+ local usedcoverage={}
+ for g1,c1 in next,classdef1 do
+ if coverage[g1] then
+ local l1=classlist[c1]
+ if l1 then
+ local hash={}
+ for paired,class in next,classdef2 do
+ local offsets=l1[class]
+ if offsets then
+ local first=offsets[1]
+ local second=offsets[2]
+ if first or second then
+ hash[paired]={ first,second or nil }
+ else
+ end
+ end
+ end
+ usedcoverage[g1]=hash
+ end
+ end
+ end
+ return {
+ format="pair",
+ coverage=usedcoverage,
+ }
+ elseif subtype==3 then
+ report("yet unsupported subtype %a in %a positioning",subtype,"pair")
+ else
+ report("unsupported subtype %a in %a positioning",subtype,"pair")
+ end
+end
+function gposhandlers.cursive(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ local getdelta=fontdata.temporary.getdelta
+ if subtype==1 then
+ local coverage=tableoffset+readushort(f)
+ local nofrecords=readushort(f)
+ local records={}
+ for i=1,nofrecords do
+ local entry=readushort(f)
+ local exit=readushort(f)
+ records[i]={
+ entry~=0 and (tableoffset+entry) or false,
+ exit~=0 and (tableoffset+exit ) or nil,
+ }
+ end
+ local cc=(fontdata.temporary.cursivecount or 0)+1
+ fontdata.temporary.cursivecount=cc
+ cc="cc-"..cc
+ coverage=readcoverage(f,coverage)
+ for i=1,nofrecords do
+ local r=records[i]
+ records[i]={
+ cc,
+ readanchor(f,r[1],getdelta) or false,
+ readanchor(f,r[2],getdelta) or nil,
+ }
+ end
+ for index,newindex in next,coverage do
+ coverage[index]=records[newindex+1]
+ end
+ return {
+ coverage=coverage,
+ }
+ else
+ report("unsupported subtype %a in %a positioning",subtype,"cursive")
+ end
+end
+local function handlemark(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,ligature)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ local getdelta=fontdata.temporary.getdelta
+ if subtype==1 then
+ local markcoverage=tableoffset+readushort(f)
+ local basecoverage=tableoffset+readushort(f)
+ local nofclasses=readushort(f)
+ local markoffset=tableoffset+readushort(f)
+ local baseoffset=tableoffset+readushort(f)
+ local markcoverage=readcoverage(f,markcoverage)
+ local basecoverage=readcoverage(f,basecoverage,true)
+ setposition(f,markoffset)
+ local markclasses={}
+ local nofmarkclasses=readushort(f)
+ local lastanchor=fontdata.lastanchor or 0
+ local usedanchors={}
+ for i=1,nofmarkclasses do
+ local class=readushort(f)+1
+ local offset=readushort(f)
+ if offset==0 then
+ markclasses[i]=false
+ else
+ markclasses[i]={ class,markoffset+offset }
+ end
+ usedanchors[class]=true
+ end
+ for i=1,nofmarkclasses do
+ local mc=markclasses[i]
+ if mc then
+ mc[2]=readanchor(f,mc[2],getdelta)
+ end
+ end
+ setposition(f,baseoffset)
+ local nofbaserecords=readushort(f)
+ local baserecords={}
+ if ligature then
+ for i=1,nofbaserecords do
+ local offset=readushort(f)
+ if offset==0 then
+ baserecords[i]=false
+ else
+ baserecords[i]=baseoffset+offset
+ end
+ end
+ for i=1,nofbaserecords do
+ local recordoffset=baserecords[i]
+ if recordoffset then
+ setposition(f,recordoffset)
+ local nofcomponents=readushort(f)
+ local components={}
+ for i=1,nofcomponents do
+ local classes={}
+ for i=1,nofclasses do
+ local offset=readushort(f)
+ if offset~=0 then
+ classes[i]=recordoffset+offset
+ else
+ classes[i]=false
+ end
+ end
+ components[i]=classes
+ end
+ baserecords[i]=components
+ end
+ end
+ local baseclasses={}
+ for i=1,nofclasses do
+ baseclasses[i]={}
+ end
+ for i=1,nofbaserecords do
+ local components=baserecords[i]
+ if components then
+ local b=basecoverage[i]
+ for c=1,#components do
+ local classes=components[c]
+ if classes then
+ for i=1,nofclasses do
+ local anchor=readanchor(f,classes[i],getdelta)
+ local bclass=baseclasses[i]
+ local bentry=bclass[b]
+ if bentry then
+ bentry[c]=anchor
+ else
+ bclass[b]={ [c]=anchor }
+ end
+ end
+ end
+ end
+ end
+ end
+ for index,newindex in next,markcoverage do
+ markcoverage[index]=markclasses[newindex+1] or nil
+ end
+ return {
+ format="ligature",
+ baseclasses=baseclasses,
+ coverage=markcoverage,
+ }
+ else
+ for i=1,nofbaserecords do
+ local r={}
+ for j=1,nofclasses do
+ local offset=readushort(f)
+ if offset==0 then
+ r[j]=false
+ else
+ r[j]=baseoffset+offset
+ end
+ end
+ baserecords[i]=r
+ end
+ local baseclasses={}
+ for i=1,nofclasses do
+ baseclasses[i]={}
+ end
+ for i=1,nofbaserecords do
+ local r=baserecords[i]
+ local b=basecoverage[i]
+ for j=1,nofclasses do
+ baseclasses[j][b]=readanchor(f,r[j],getdelta)
+ end
+ end
+ for index,newindex in next,markcoverage do
+ markcoverage[index]=markclasses[newindex+1] or nil
+ end
+ return {
+ format="base",
+ baseclasses=baseclasses,
+ coverage=markcoverage,
+ }
+ end
+ else
+ report("unsupported subtype %a in",subtype)
+ end
+end
+function gposhandlers.marktobase(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return handlemark(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+end
+function gposhandlers.marktoligature(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return handlemark(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,true)
+end
+function gposhandlers.marktomark(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return handlemark(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+end
+function gposhandlers.context(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return unchainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,"positioning"),"context"
+end
+function gposhandlers.chainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return chainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,"positioning"),"chainedcontext"
+end
+function gposhandlers.extension(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return extension(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,gpostypes,gposhandlers,"positioning")
+end
+do
+ local plugins={}
+ function plugins.size(f,fontdata,tableoffset,feature)
+ if fontdata.designsize then
+ else
+ local function check(offset)
+ setposition(f,offset)
+ local designsize=readushort(f)
+ if designsize>0 then
+ local fontstyleid=readushort(f)
+ local guimenuid=readushort(f)
+ local minsize=readushort(f)
+ local maxsize=readushort(f)
+ if minsize==0 and maxsize==0 and fontstyleid==0 and guimenuid==0 then
+ minsize=designsize
+ maxsize=designsize
+ end
+ if designsize>=minsize and designsize<=maxsize then
+ return minsize,maxsize,designsize
+ end
+ end
+ end
+ local minsize,maxsize,designsize=check(tableoffset+feature.offset+feature.parameters)
+ if not designsize then
+ minsize,maxsize,designsize=check(tableoffset+feature.parameters)
+ if designsize then
+ report("bad size feature in %a, falling back to wrong offset",fontdata.filename or "?")
+ else
+ report("bad size feature in %a,",fontdata.filename or "?")
+ end
+ end
+ if designsize then
+ fontdata.minsize=minsize
+ fontdata.maxsize=maxsize
+ fontdata.designsize=designsize
+ end
+ end
+ end
+ local function reorderfeatures(fontdata,scripts,features)
+ local scriptlangs={}
+ local featurehash={}
+ local featureorder={}
+ for script,languages in next,scripts do
+ for language,record in next,languages do
+ local hash={}
+ local list=record.featureindices
+ for k=1,#list do
+ local index=list[k]
+ local feature=features[index]
+ local lookups=feature.lookups
+ local tag=feature.tag
+ if tag then
+ hash[tag]=true
+ end
+ if lookups then
+ for i=1,#lookups do
+ local lookup=lookups[i]
+ local o=featureorder[lookup]
+ if o then
+ local okay=true
+ for i=1,#o do
+ if o[i]==tag then
+ okay=false
+ break
+ end
+ end
+ if okay then
+ o[#o+1]=tag
+ end
+ else
+ featureorder[lookup]={ tag }
+ end
+ local f=featurehash[lookup]
+ if f then
+ local h=f[tag]
+ if h then
+ local s=h[script]
+ if s then
+ s[language]=true
+ else
+ h[script]={ [language]=true }
+ end
+ else
+ f[tag]={ [script]={ [language]=true } }
+ end
+ else
+ featurehash[lookup]={ [tag]={ [script]={ [language]=true } } }
+ end
+ local h=scriptlangs[tag]
+ if h then
+ local s=h[script]
+ if s then
+ s[language]=true
+ else
+ h[script]={ [language]=true }
+ end
+ else
+ scriptlangs[tag]={ [script]={ [language]=true } }
+ end
+ end
+ end
+ end
+ end
+ end
+ return scriptlangs,featurehash,featureorder
+ end
+ local function readscriplan(f,fontdata,scriptoffset)
+ setposition(f,scriptoffset)
+ local nofscripts=readushort(f)
+ local scripts={}
+ for i=1,nofscripts do
+ scripts[readtag(f)]=scriptoffset+readushort(f)
+ end
+ local languagesystems=setmetatableindex("table")
+ for script,offset in next,scripts do
+ setposition(f,offset)
+ local defaultoffset=readushort(f)
+ local noflanguages=readushort(f)
+ local languages={}
+ if defaultoffset>0 then
+ languages.dflt=languagesystems[offset+defaultoffset]
+ end
+ for i=1,noflanguages do
+ local language=readtag(f)
+ local offset=offset+readushort(f)
+ languages[language]=languagesystems[offset]
+ end
+ scripts[script]=languages
+ end
+ for offset,usedfeatures in next,languagesystems do
+ if offset>0 then
+ setposition(f,offset)
+ local featureindices={}
+ usedfeatures.featureindices=featureindices
+ usedfeatures.lookuporder=readushort(f)
+ usedfeatures.requiredindex=readushort(f)
+ local noffeatures=readushort(f)
+ for i=1,noffeatures do
+ featureindices[i]=readushort(f)+1
+ end
+ end
+ end
+ return scripts
+ end
+ local function readfeatures(f,fontdata,featureoffset)
+ setposition(f,featureoffset)
+ local features={}
+ local noffeatures=readushort(f)
+ for i=1,noffeatures do
+ features[i]={
+ tag=readtag(f),
+ offset=readushort(f)
+ }
+ end
+ for i=1,noffeatures do
+ local feature=features[i]
+ local offset=featureoffset+feature.offset
+ setposition(f,offset)
+ local parameters=readushort(f)
+ local noflookups=readushort(f)
+ if noflookups>0 then
+ local lookups={}
+ feature.lookups=lookups
+ for j=1,noflookups do
+ lookups[j]=readushort(f)+1
+ end
+ end
+ if parameters>0 then
+ feature.parameters=parameters
+ local plugin=plugins[feature.tag]
+ if plugin then
+ plugin(f,fontdata,featureoffset,feature)
+ end
+ end
+ end
+ return features
+ end
+ local function readlookups(f,lookupoffset,lookuptypes,featurehash,featureorder)
+ setposition(f,lookupoffset)
+ local lookups={}
+ local noflookups=readushort(f)
+ for i=1,noflookups do
+ lookups[i]=readushort(f)
+ end
+ for lookupid=1,noflookups do
+ local offset=lookups[lookupid]
+ setposition(f,lookupoffset+offset)
+ local subtables={}
+ local typebits=readushort(f)
+ local flagbits=readushort(f)
+ local lookuptype=lookuptypes[typebits]
+ local lookupflags=lookupflags[flagbits]
+ local nofsubtables=readushort(f)
+ for j=1,nofsubtables do
+ subtables[j]=offset+readushort(f)
+ end
+ local markclass=bittest(flagbits,0x0010)
+ if markclass then
+ markclass=readushort(f)
+ end
+ local markset=rshift(flagbits,8)
+ if markset>0 then
+ markclass=markset
+ end
+ lookups[lookupid]={
+ type=lookuptype,
+ flags=lookupflags,
+ name=lookupid,
+ subtables=subtables,
+ markclass=markclass,
+ features=featurehash[lookupid],
+ order=featureorder[lookupid],
+ }
+ end
+ return lookups
+ end
+ local f_lookupname=formatters["%s_%s_%s"]
+ local function resolvelookups(f,lookupoffset,fontdata,lookups,lookuptypes,lookuphandlers,what,tableoffset)
+ local sequences=fontdata.sequences or {}
+ local sublookuplist=fontdata.sublookups or {}
+ fontdata.sequences=sequences
+ fontdata.sublookups=sublookuplist
+ local nofsublookups=#sublookuplist
+ local nofsequences=#sequences
+ local lastsublookup=nofsublookups
+ local lastsequence=nofsequences
+ local lookupnames=lookupnames[what]
+ local sublookuphash={}
+ local sublookupcheck={}
+ local glyphs=fontdata.glyphs
+ local nofglyphs=fontdata.nofglyphs or #glyphs
+ local noflookups=#lookups
+ local lookupprefix=sub(what,2,2)
+ for lookupid=1,noflookups do
+ local lookup=lookups[lookupid]
+ local lookuptype=lookup.type
+ local subtables=lookup.subtables
+ local features=lookup.features
+ local handler=lookuphandlers[lookuptype]
+ if handler then
+ local nofsubtables=#subtables
+ local order=lookup.order
+ local flags=lookup.flags
+ if flags[1] then flags[1]="mark" end
+ if flags[2] then flags[2]="ligature" end
+ if flags[3] then flags[3]="base" end
+ local markclass=lookup.markclass
+ if nofsubtables>0 then
+ local steps={}
+ local nofsteps=0
+ local oldtype=nil
+ for s=1,nofsubtables do
+ local step,lt=handler(f,fontdata,lookupid,lookupoffset,subtables[s],glyphs,nofglyphs)
+ if lt then
+ lookuptype=lt
+ if oldtype and lt~=oldtype then
+ report("messy %s lookup type %a and %a",what,lookuptype,oldtype)
+ end
+ oldtype=lookuptype
+ end
+ if not step then
+ report("unsupported %s lookup type %a",what,lookuptype)
+ else
+ nofsteps=nofsteps+1
+ steps[nofsteps]=step
+ local rules=step.rules
+ if rules then
+ for i=1,#rules do
+ local rule=rules[i]
+ local before=rule.before
+ local current=rule.current
+ local after=rule.after
+ local replacements=rule.replacements
+ if before then
+ for i=1,#before do
+ before[i]=tohash(before[i])
+ end
+ rule.before=reversed(before)
+ end
+ if current then
+ if replacements then
+ local first=current[1]
+ local hash={}
+ local repl={}
+ for i=1,#first do
+ local c=first[i]
+ hash[c]=true
+ repl[c]=replacements[i]
+ end
+ rule.current={ hash }
+ rule.replacements=repl
+ else
+ for i=1,#current do
+ current[i]=tohash(current[i])
+ end
+ end
+ end
+ if after then
+ for i=1,#after do
+ after[i]=tohash(after[i])
+ end
+ end
+ end
+ end
+ end
+ end
+ if nofsteps~=nofsubtables then
+ report("bogus subtables removed in %s lookup type %a",what,lookuptype)
+ end
+ lookuptype=lookupnames[lookuptype] or lookuptype
+ if features then
+ nofsequences=nofsequences+1
+ local l={
+ index=nofsequences,
+ name=f_lookupname(lookupprefix,"s",lookupid+lookupidoffset),
+ steps=steps,
+ nofsteps=nofsteps,
+ type=lookuptype,
+ markclass=markclass or nil,
+ flags=flags,
+ order=order,
+ features=features,
+ }
+ sequences[nofsequences]=l
+ lookup.done=l
+ else
+ nofsublookups=nofsublookups+1
+ local l={
+ index=nofsublookups,
+ name=f_lookupname(lookupprefix,"l",lookupid+lookupidoffset),
+ steps=steps,
+ nofsteps=nofsteps,
+ type=lookuptype,
+ markclass=markclass or nil,
+ flags=flags,
+ }
+ sublookuplist[nofsublookups]=l
+ sublookuphash[lookupid]=nofsublookups
+ sublookupcheck[lookupid]=0
+ lookup.done=l
+ end
+ else
+ report("no subtables for lookup %a",lookupid)
+ end
+ else
+ report("no handler for lookup %a with type %a",lookupid,lookuptype)
+ end
+ end
+ local reported={}
+ local function report_issue(i,what,sequence,kind)
+ local name=sequence.name
+ if not reported[name] then
+ report("rule %i in %s lookup %a has %s lookups",i,what,name,kind)
+ reported[name]=true
+ end
+ end
+ for i=lastsequence+1,nofsequences do
+ local sequence=sequences[i]
+ local steps=sequence.steps
+ for i=1,#steps do
+ local step=steps[i]
+ local rules=step.rules
+ if rules then
+ for i=1,#rules do
+ local rule=rules[i]
+ local rlookups=rule.lookups
+ if not rlookups then
+ report_issue(i,what,sequence,"no")
+ elseif not next(rlookups) then
+ report_issue(i,what,sequence,"empty")
+ rule.lookups=nil
+ else
+ local length=#rlookups
+ for index=1,length do
+ local lookuplist=rlookups[index]
+ if lookuplist then
+ local length=#lookuplist
+ local found={}
+ local noffound=0
+ for index=1,length do
+ local lookupid=lookuplist[index]
+ if lookupid then
+ local h=sublookuphash[lookupid]
+ if not h then
+ local lookup=lookups[lookupid]
+ if lookup then
+ local d=lookup.done
+ if d then
+ nofsublookups=nofsublookups+1
+ h={
+ index=nofsublookups,
+ name=f_lookupname(lookupprefix,"d",lookupid+lookupidoffset),
+ derived=true,
+ steps=d.steps,
+ nofsteps=d.nofsteps,
+ type=d.lookuptype or "gsub_single",
+ markclass=d.markclass or nil,
+ flags=d.flags,
+ }
+ sublookuplist[nofsublookups]=copy(h)
+ sublookuphash[lookupid]=nofsublookups
+ sublookupcheck[lookupid]=1
+ h=nofsublookups
+ else
+ report_issue(i,what,sequence,"missing")
+ rule.lookups=nil
+ break
+ end
+ else
+ report_issue(i,what,sequence,"bad")
+ rule.lookups=nil
+ break
+ end
+ else
+ sublookupcheck[lookupid]=sublookupcheck[lookupid]+1
+ end
+ if h then
+ noffound=noffound+1
+ found[noffound]=h
+ end
+ end
+ end
+ rlookups[index]=noffound>0 and found or false
+ else
+ rlookups[index]=false
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ for i,n in sortedhash(sublookupcheck) do
+ local l=lookups[i]
+ local t=l.type
+ if n==0 and t~="extension" then
+ local d=l.done
+ report("%s lookup %s of type %a is not used",what,d and d.name or l.name,t)
+ end
+ end
+ end
+ local function loadvariations(f,fontdata,variationsoffset,lookuptypes,featurehash,featureorder)
+ setposition(f,variationsoffset)
+ local version=readulong(f)
+ local nofrecords=readulong(f)
+ local records={}
+ for i=1,nofrecords do
+ records[i]={
+ conditions=readulong(f),
+ substitutions=readulong(f),
+ }
+ end
+ for i=1,nofrecords do
+ local record=records[i]
+ local offset=record.conditions
+ if offset==0 then
+ record.condition=nil
+ record.matchtype="always"
+ else
+ setposition(f,variationsoffset+offset)
+ local nofconditions=readushort(f)
+ local conditions={}
+ for i=1,nofconditions do
+ conditions[i]=variationsoffset+offset+readulong(f)
+ end
+ record.conditions=conditions
+ record.matchtype="condition"
+ end
+ end
+ for i=1,nofrecords do
+ local record=records[i]
+ if record.matchtype=="condition" then
+ local conditions=record.conditions
+ for i=1,#conditions do
+ setposition(f,conditions[i])
+ conditions[i]={
+ format=readushort(f),
+ axis=readushort(f),
+ minvalue=read2dot14(f),
+ maxvalue=read2dot14(f),
+ }
+ end
+ end
+ end
+ for i=1,nofrecords do
+ local record=records[i]
+ local offset=record.substitutions
+ if offset==0 then
+ record.substitutions={}
+ else
+ setposition(f,variationsoffset+offset)
+ local version=readulong(f)
+ local nofsubstitutions=readushort(f)
+ local substitutions={}
+ for i=1,nofsubstitutions do
+ substitutions[readushort(f)]=readulong(f)
+ end
+ for index,alternates in sortedhash(substitutions) do
+ if index==0 then
+ record.substitutions=false
+ else
+ local tableoffset=variationsoffset+offset+alternates
+ setposition(f,tableoffset)
+ local parameters=readulong(f)
+ local noflookups=readushort(f)
+ local lookups={}
+ for i=1,noflookups do
+ lookups[i]=readushort(f)
+ end
+ record.substitutions=lookups
+ end
+ end
+ end
+ end
+ setvariabledata(fontdata,"features",records)
+ end
+ local function readscripts(f,fontdata,what,lookuptypes,lookuphandlers,lookupstoo)
+ local tableoffset=gotodatatable(f,fontdata,what,true)
+ if tableoffset then
+ local version=readulong(f)
+ local scriptoffset=tableoffset+readushort(f)
+ local featureoffset=tableoffset+readushort(f)
+ local lookupoffset=tableoffset+readushort(f)
+ local variationsoffset=version>0x00010000 and (tableoffset+readulong(f)) or 0
+ if not scriptoffset then
+ return
+ end
+ local scripts=readscriplan(f,fontdata,scriptoffset)
+ local features=readfeatures(f,fontdata,featureoffset)
+ local scriptlangs,featurehash,featureorder=reorderfeatures(fontdata,scripts,features)
+ if fontdata.features then
+ fontdata.features[what]=scriptlangs
+ else
+ fontdata.features={ [what]=scriptlangs }
+ end
+ if not lookupstoo then
+ return
+ end
+ local lookups=readlookups(f,lookupoffset,lookuptypes,featurehash,featureorder)
+ if lookups then
+ resolvelookups(f,lookupoffset,fontdata,lookups,lookuptypes,lookuphandlers,what,tableoffset)
+ end
+ if variationsoffset>0 then
+ loadvariations(f,fontdata,variationsoffset,lookuptypes,featurehash,featureorder)
+ end
+ end
+ end
+ local function checkkerns(f,fontdata,specification)
+ local datatable=fontdata.tables.kern
+ if not datatable then
+ return
+ end
+ local features=fontdata.features
+ local gposfeatures=features and features.gpos
+ local name
+ if not gposfeatures or not gposfeatures.kern then
+ name="kern"
+ elseif specification.globalkerns then
+ name="globalkern"
+ else
+ report("ignoring global kern table using gpos kern feature")
+ return
+ end
+ setposition(f,datatable.offset)
+ local version=readushort(f)
+ local noftables=readushort(f)
+ if noftables>1 then
+ report("adding global kern table as gpos feature %a",name)
+ local kerns=setmetatableindex("table")
+ for i=1,noftables do
+ local version=readushort(f)
+ local length=readushort(f)
+ local coverage=readushort(f)
+ local format=bit32.rshift(coverage,8)
+ if format==0 then
+ local nofpairs=readushort(f)
+ local searchrange=readushort(f)
+ local entryselector=readushort(f)
+ local rangeshift=readushort(f)
+ for i=1,nofpairs do
+ kerns[readushort(f)][readushort(f)]=readfword(f)
+ end
+ elseif format==2 then
+ else
+ end
+ end
+ local feature={ dflt={ dflt=true } }
+ if not features then
+ fontdata.features={ gpos={ [name]=feature } }
+ elseif not gposfeatures then
+ fontdata.features.gpos={ [name]=feature }
+ else
+ gposfeatures[name]=feature
+ end
+ local sequences=fontdata.sequences
+ if not sequences then
+ sequences={}
+ fontdata.sequences=sequences
+ end
+ local nofsequences=#sequences+1
+ sequences[nofsequences]={
+ index=nofsequences,
+ name=name,
+ steps={
+ {
+ coverage=kerns,
+ format="kern",
+ },
+ },
+ nofsteps=1,
+ type="gpos_pair",
+ flags={ false,false,false,false },
+ order={ name },
+ features={ [name]=feature },
+ }
+ else
+ report("ignoring empty kern table of feature %a",name)
+ end
+ end
+ function readers.gsub(f,fontdata,specification)
+ if specification.details then
+ readscripts(f,fontdata,"gsub",gsubtypes,gsubhandlers,specification.lookups)
+ end
+ end
+ function readers.gpos(f,fontdata,specification)
+ if specification.details then
+ readscripts(f,fontdata,"gpos",gpostypes,gposhandlers,specification.lookups)
+ if specification.lookups then
+ checkkerns(f,fontdata,specification)
+ end
+ end
+ end
+end
+function readers.gdef(f,fontdata,specification)
+ if not specification.glyphs then
+ return
+ end
+ local datatable=fontdata.tables.gdef
+ if datatable then
+ local tableoffset=datatable.offset
+ setposition(f,tableoffset)
+ local version=readulong(f)
+ local classoffset=readushort(f)
+ local attachmentoffset=readushort(f)
+ local ligaturecarets=readushort(f)
+ local markclassoffset=readushort(f)
+ local marksetsoffset=version>=0x00010002 and readushort(f) or 0
+ local varsetsoffset=version>=0x00010003 and readulong(f) or 0
+ local glyphs=fontdata.glyphs
+ local marks={}
+ local markclasses=setmetatableindex("table")
+ local marksets=setmetatableindex("table")
+ fontdata.marks=marks
+ fontdata.markclasses=markclasses
+ fontdata.marksets=marksets
+ if classoffset~=0 then
+ setposition(f,tableoffset+classoffset)
+ local classformat=readushort(f)
+ if classformat==1 then
+ local firstindex=readushort(f)
+ local lastindex=firstindex+readushort(f)-1
+ for index=firstindex,lastindex do
+ local class=classes[readushort(f)]
+ if class=="mark" then
+ marks[index]=true
+ end
+ glyphs[index].class=class
+ end
+ elseif classformat==2 then
+ local nofranges=readushort(f)
+ for i=1,nofranges do
+ local firstindex=readushort(f)
+ local lastindex=readushort(f)
+ local class=classes[readushort(f)]
+ if class then
+ for index=firstindex,lastindex do
+ glyphs[index].class=class
+ if class=="mark" then
+ marks[index]=true
+ end
+ end
+ end
+ end
+ end
+ end
+ if markclassoffset~=0 then
+ setposition(f,tableoffset+markclassoffset)
+ local classformat=readushort(f)
+ if classformat==1 then
+ local firstindex=readushort(f)
+ local lastindex=firstindex+readushort(f)-1
+ for index=firstindex,lastindex do
+ markclasses[readushort(f)][index]=true
+ end
+ elseif classformat==2 then
+ local nofranges=readushort(f)
+ for i=1,nofranges do
+ local firstindex=readushort(f)
+ local lastindex=readushort(f)
+ local class=markclasses[readushort(f)]
+ for index=firstindex,lastindex do
+ class[index]=true
+ end
+ end
+ end
+ end
+ if marksetsoffset~=0 then
+ marksetsoffset=tableoffset+marksetsoffset
+ setposition(f,marksetsoffset)
+ local format=readushort(f)
+ if format==1 then
+ local nofsets=readushort(f)
+ local sets={}
+ for i=1,nofsets do
+ sets[i]=readulong(f)
+ end
+ for i=1,nofsets do
+ local offset=sets[i]
+ if offset~=0 then
+ marksets[i]=readcoverage(f,marksetsoffset+offset)
+ end
+ end
+ end
+ end
+ local factors=specification.factors
+ if (specification.variable or factors) and varsetsoffset~=0 then
+ local regions,deltas=readvariationdata(f,tableoffset+varsetsoffset,factors)
+ if factors then
+ fontdata.temporary.getdelta=function(outer,inner)
+ local delta=deltas[outer+1]
+ if delta then
+ local d=delta.deltas[inner+1]
+ if d then
+ local scales=delta.scales
+ local dd=0
+ for i=1,#scales do
+ local di=d[i]
+ if di then
+ dd=dd+scales[i]*di
+ else
+ break
+ end
+ end
+ return round(dd)
+ end
+ end
+ return 0
+ end
+ end
+ end
+ end
+end
+local function readmathvalue(f)
+ local v=readshort(f)
+ skipshort(f,1)
+ return v
+end
+local function readmathconstants(f,fontdata,offset)
+ setposition(f,offset)
+ fontdata.mathconstants={
+ ScriptPercentScaleDown=readshort(f),
+ ScriptScriptPercentScaleDown=readshort(f),
+ DelimitedSubFormulaMinHeight=readushort(f),
+ DisplayOperatorMinHeight=readushort(f),
+ MathLeading=readmathvalue(f),
+ AxisHeight=readmathvalue(f),
+ AccentBaseHeight=readmathvalue(f),
+ FlattenedAccentBaseHeight=readmathvalue(f),
+ SubscriptShiftDown=readmathvalue(f),
+ SubscriptTopMax=readmathvalue(f),
+ SubscriptBaselineDropMin=readmathvalue(f),
+ SuperscriptShiftUp=readmathvalue(f),
+ SuperscriptShiftUpCramped=readmathvalue(f),
+ SuperscriptBottomMin=readmathvalue(f),
+ SuperscriptBaselineDropMax=readmathvalue(f),
+ SubSuperscriptGapMin=readmathvalue(f),
+ SuperscriptBottomMaxWithSubscript=readmathvalue(f),
+ SpaceAfterScript=readmathvalue(f),
+ UpperLimitGapMin=readmathvalue(f),
+ UpperLimitBaselineRiseMin=readmathvalue(f),
+ LowerLimitGapMin=readmathvalue(f),
+ LowerLimitBaselineDropMin=readmathvalue(f),
+ StackTopShiftUp=readmathvalue(f),
+ StackTopDisplayStyleShiftUp=readmathvalue(f),
+ StackBottomShiftDown=readmathvalue(f),
+ StackBottomDisplayStyleShiftDown=readmathvalue(f),
+ StackGapMin=readmathvalue(f),
+ StackDisplayStyleGapMin=readmathvalue(f),
+ StretchStackTopShiftUp=readmathvalue(f),
+ StretchStackBottomShiftDown=readmathvalue(f),
+ StretchStackGapAboveMin=readmathvalue(f),
+ StretchStackGapBelowMin=readmathvalue(f),
+ FractionNumeratorShiftUp=readmathvalue(f),
+ FractionNumeratorDisplayStyleShiftUp=readmathvalue(f),
+ FractionDenominatorShiftDown=readmathvalue(f),
+ FractionDenominatorDisplayStyleShiftDown=readmathvalue(f),
+ FractionNumeratorGapMin=readmathvalue(f),
+ FractionNumeratorDisplayStyleGapMin=readmathvalue(f),
+ FractionRuleThickness=readmathvalue(f),
+ FractionDenominatorGapMin=readmathvalue(f),
+ FractionDenominatorDisplayStyleGapMin=readmathvalue(f),
+ SkewedFractionHorizontalGap=readmathvalue(f),
+ SkewedFractionVerticalGap=readmathvalue(f),
+ OverbarVerticalGap=readmathvalue(f),
+ OverbarRuleThickness=readmathvalue(f),
+ OverbarExtraAscender=readmathvalue(f),
+ UnderbarVerticalGap=readmathvalue(f),
+ UnderbarRuleThickness=readmathvalue(f),
+ UnderbarExtraDescender=readmathvalue(f),
+ RadicalVerticalGap=readmathvalue(f),
+ RadicalDisplayStyleVerticalGap=readmathvalue(f),
+ RadicalRuleThickness=readmathvalue(f),
+ RadicalExtraAscender=readmathvalue(f),
+ RadicalKernBeforeDegree=readmathvalue(f),
+ RadicalKernAfterDegree=readmathvalue(f),
+ RadicalDegreeBottomRaisePercent=readshort(f),
+ }
+end
+local function readmathglyphinfo(f,fontdata,offset)
+ setposition(f,offset)
+ local italics=readushort(f)
+ local accents=readushort(f)
+ local extensions=readushort(f)
+ local kerns=readushort(f)
+ local glyphs=fontdata.glyphs
+ if italics~=0 then
+ setposition(f,offset+italics)
+ local coverage=readushort(f)
+ local nofglyphs=readushort(f)
+ coverage=readcoverage(f,offset+italics+coverage,true)
+ setposition(f,offset+italics+4)
+ for i=1,nofglyphs do
+ local italic=readmathvalue(f)
+ if italic~=0 then
+ local glyph=glyphs[coverage[i]]
+ local math=glyph.math
+ if not math then
+ glyph.math={ italic=italic }
+ else
+ math.italic=italic
+ end
+ end
+ end
+ fontdata.hasitalics=true
+ end
+ if accents~=0 then
+ setposition(f,offset+accents)
+ local coverage=readushort(f)
+ local nofglyphs=readushort(f)
+ coverage=readcoverage(f,offset+accents+coverage,true)
+ setposition(f,offset+accents+4)
+ for i=1,nofglyphs do
+ local accent=readmathvalue(f)
+ if accent~=0 then
+ local glyph=glyphs[coverage[i]]
+ local math=glyph.math
+ if not math then
+ glyph.math={ accent=accent }
+ else
+ math.accent=accent
+ end
+ end
+ end
+ end
+ if extensions~=0 then
+ setposition(f,offset+extensions)
+ end
+ if kerns~=0 then
+ local kernoffset=offset+kerns
+ setposition(f,kernoffset)
+ local coverage=readushort(f)
+ local nofglyphs=readushort(f)
+ if nofglyphs>0 then
+ local function get(offset)
+ setposition(f,kernoffset+offset)
+ local n=readushort(f)
+ if n==0 then
+ local k=readmathvalue(f)
+ if k==0 then
+ else
+ return { { kern=k } }
+ end
+ else
+ local l={}
+ for i=1,n do
+ l[i]={ height=readmathvalue(f) }
+ end
+ for i=1,n do
+ l[i].kern=readmathvalue(f)
+ end
+ l[n+1]={ kern=readmathvalue(f) }
+ return l
+ end
+ end
+ local kernsets={}
+ for i=1,nofglyphs do
+ local topright=readushort(f)
+ local topleft=readushort(f)
+ local bottomright=readushort(f)
+ local bottomleft=readushort(f)
+ kernsets[i]={
+ topright=topright~=0 and topright or nil,
+ topleft=topleft~=0 and topleft or nil,
+ bottomright=bottomright~=0 and bottomright or nil,
+ bottomleft=bottomleft~=0 and bottomleft or nil,
+ }
+ end
+ coverage=readcoverage(f,kernoffset+coverage,true)
+ for i=1,nofglyphs do
+ local kernset=kernsets[i]
+ if next(kernset) then
+ local k=kernset.topright if k then kernset.topright=get(k) end
+ local k=kernset.topleft if k then kernset.topleft=get(k) end
+ local k=kernset.bottomright if k then kernset.bottomright=get(k) end
+ local k=kernset.bottomleft if k then kernset.bottomleft=get(k) end
+ if next(kernset) then
+ local glyph=glyphs[coverage[i]]
+ local math=glyph.math
+ if math then
+ math.kerns=kernset
+ else
+ glyph.math={ kerns=kernset }
+ end
+ end
+ end
+ end
+ end
+ end
+end
+local function readmathvariants(f,fontdata,offset)
+ setposition(f,offset)
+ local glyphs=fontdata.glyphs
+ local minoverlap=readushort(f)
+ local vcoverage=readushort(f)
+ local hcoverage=readushort(f)
+ local vnofglyphs=readushort(f)
+ local hnofglyphs=readushort(f)
+ local vconstruction={}
+ local hconstruction={}
+ for i=1,vnofglyphs do
+ vconstruction[i]=readushort(f)
+ end
+ for i=1,hnofglyphs do
+ hconstruction[i]=readushort(f)
+ end
+ fontdata.mathconstants.MinConnectorOverlap=minoverlap
+ local function get(offset,coverage,nofglyphs,construction,kvariants,kparts,kitalic)
+ if coverage~=0 and nofglyphs>0 then
+ local coverage=readcoverage(f,offset+coverage,true)
+ for i=1,nofglyphs do
+ local c=construction[i]
+ if c~=0 then
+ local index=coverage[i]
+ local glyph=glyphs[index]
+ local math=glyph.math
+ setposition(f,offset+c)
+ local assembly=readushort(f)
+ local nofvariants=readushort(f)
+ if nofvariants>0 then
+ local variants,v=nil,0
+ for i=1,nofvariants do
+ local variant=readushort(f)
+ if variant==index then
+ elseif variants then
+ v=v+1
+ variants[v]=variant
+ else
+ v=1
+ variants={ variant }
+ end
+ skipshort(f)
+ end
+ if not variants then
+ elseif not math then
+ math={ [kvariants]=variants }
+ glyph.math=math
+ else
+ math[kvariants]=variants
+ end
+ end
+ if assembly~=0 then
+ setposition(f,offset+c+assembly)
+ local italic=readmathvalue(f)
+ local nofparts=readushort(f)
+ local parts={}
+ for i=1,nofparts do
+ local p={
+ glyph=readushort(f),
+ start=readushort(f),
+ ["end"]=readushort(f),
+ advance=readushort(f),
+ }
+ local flags=readushort(f)
+ if bittest(flags,0x0001) then
+ p.extender=1
+ end
+ parts[i]=p
+ end
+ if not math then
+ math={
+ [kparts]=parts
+ }
+ glyph.math=math
+ else
+ math[kparts]=parts
+ end
+ if italic and italic~=0 then
+ math[kitalic]=italic
+ end
+ end
+ end
+ end
+ end
+ end
+ get(offset,vcoverage,vnofglyphs,vconstruction,"vvariants","vparts","vitalic")
+ get(offset,hcoverage,hnofglyphs,hconstruction,"hvariants","hparts","hitalic")
+end
+function readers.math(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"math",specification.glyphs)
+ if tableoffset then
+ local version=readulong(f)
+ local constants=readushort(f)
+ local glyphinfo=readushort(f)
+ local variants=readushort(f)
+ if constants==0 then
+ report("the math table of %a has no constants",fontdata.filename)
+ else
+ readmathconstants(f,fontdata,tableoffset+constants)
+ end
+ if glyphinfo~=0 then
+ readmathglyphinfo(f,fontdata,tableoffset+glyphinfo)
+ end
+ if variants~=0 then
+ readmathvariants(f,fontdata,tableoffset+variants)
+ end
+ end
+end
+function readers.colr(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"colr",specification.glyphs)
+ if tableoffset then
+ local version=readushort(f)
+ if version~=0 then
+ report("table version %a of %a is not supported (yet), maybe font %s is bad",version,"colr",fontdata.filename)
+ return
+ end
+ if not fontdata.tables.cpal then
+ report("color table %a in font %a has no mandate %a table","colr",fontdata.filename,"cpal")
+ fontdata.colorpalettes={}
+ end
+ local glyphs=fontdata.glyphs
+ local nofglyphs=readushort(f)
+ local baseoffset=readulong(f)
+ local layeroffset=readulong(f)
+ local noflayers=readushort(f)
+ local layerrecords={}
+ local maxclass=0
+ setposition(f,tableoffset+layeroffset)
+ for i=1,noflayers do
+ local slot=readushort(f)
+ local class=readushort(f)
+ if class<0xFFFF then
+ class=class+1
+ if class>maxclass then
+ maxclass=class
+ end
+ end
+ layerrecords[i]={
+ slot=slot,
+ class=class,
+ }
+ end
+ fontdata.maxcolorclass=maxclass
+ setposition(f,tableoffset+baseoffset)
+ for i=0,nofglyphs-1 do
+ local glyphindex=readushort(f)
+ local firstlayer=readushort(f)
+ local noflayers=readushort(f)
+ local t={}
+ for i=1,noflayers do
+ t[i]=layerrecords[firstlayer+i]
+ end
+ glyphs[glyphindex].colors=t
+ end
+ end
+ fontdata.hascolor=true
+end
+function readers.cpal(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"cpal",specification.glyphs)
+ if tableoffset then
+ local version=readushort(f)
+ local nofpaletteentries=readushort(f)
+ local nofpalettes=readushort(f)
+ local nofcolorrecords=readushort(f)
+ local firstcoloroffset=readulong(f)
+ local colorrecords={}
+ local palettes={}
+ for i=1,nofpalettes do
+ palettes[i]=readushort(f)
+ end
+ if version==1 then
+ local palettettypesoffset=readulong(f)
+ local palettelabelsoffset=readulong(f)
+ local paletteentryoffset=readulong(f)
+ end
+ setposition(f,tableoffset+firstcoloroffset)
+ for i=1,nofcolorrecords do
+ local b,g,r,a=readbytes(f,4)
+ colorrecords[i]={
+ r,g,b,a~=255 and a or nil,
+ }
+ end
+ for i=1,nofpalettes do
+ local p={}
+ local o=palettes[i]
+ for j=1,nofpaletteentries do
+ p[j]=colorrecords[o+j]
+ end
+ palettes[i]=p
+ end
+ fontdata.colorpalettes=palettes
+ end
+end
+function readers.svg(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"svg",specification.glyphs)
+ if tableoffset then
+ local version=readushort(f)
+ local glyphs=fontdata.glyphs
+ local indexoffset=tableoffset+readulong(f)
+ local reserved=readulong(f)
+ setposition(f,indexoffset)
+ local nofentries=readushort(f)
+ local entries={}
+ for i=1,nofentries do
+ entries[i]={
+ first=readushort(f),
+ last=readushort(f),
+ offset=indexoffset+readulong(f),
+ length=readulong(f),
+ }
+ end
+ for i=1,nofentries do
+ local entry=entries[i]
+ setposition(f,entry.offset)
+ entries[i]={
+ first=entry.first,
+ last=entry.last,
+ data=readstring(f,entry.length)
+ }
+ end
+ fontdata.svgshapes=entries
+ end
+ fontdata.hascolor=true
+end
+function readers.sbix(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"sbix",specification.glyphs)
+ if tableoffset then
+ local version=readushort(f)
+ local flags=readushort(f)
+ local nofstrikes=readulong(f)
+ local strikes={}
+ local nofglyphs=fontdata.nofglyphs
+ for i=1,nofstrikes do
+ strikes[i]=readulong(f)
+ end
+ local shapes={}
+ local done=0
+ for i=1,nofstrikes do
+ local strikeoffset=strikes[i]+tableoffset
+ setposition(f,strikeoffset)
+ strikes[i]={
+ ppem=readushort(f),
+ ppi=readushort(f),
+ offset=strikeoffset
+ }
+ end
+ sort(strikes,function(a,b)
+ if b.ppem==a.ppem then
+ return b.ppi<a.ppi
+ else
+ return b.ppem<a.ppem
+ end
+ end)
+ local glyphs={}
+ for i=1,nofstrikes do
+ local strike=strikes[i]
+ local strikeppem=strike.ppem
+ local strikeppi=strike.ppi
+ local strikeoffset=strike.offset
+ setposition(f,strikeoffset)
+ for i=0,nofglyphs do
+ glyphs[i]=readulong(f)
+ end
+ local glyphoffset=glyphs[0]
+ for i=0,nofglyphs-1 do
+ local nextoffset=glyphs[i+1]
+ if not shapes[i] then
+ local datasize=nextoffset-glyphoffset
+ if datasize>0 then
+ setposition(f,strikeoffset+glyphoffset)
+ shapes[i]={
+ x=readshort(f),
+ y=readshort(f),
+ tag=readtag(f),
+ data=readstring(f,datasize-8),
+ ppem=strikeppem,
+ ppi=strikeppi,
+ }
+ done=done+1
+ if done==nofglyphs then
+ break
+ end
+ end
+ end
+ glyphoffset=nextoffset
+ end
+ end
+ fontdata.sbixshapes=shapes
+ end
+end
+function readers.stat(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"stat",true)
+ if tableoffset then
+ local extras=fontdata.extras
+ local version=readulong(f)
+ local axissize=readushort(f)
+ local nofaxis=readushort(f)
+ local axisoffset=readulong(f)
+ local nofvalues=readushort(f)
+ local valuesoffset=readulong(f)
+ local fallbackname=extras[readushort(f)]
+ local axis={}
+ local values={}
+ setposition(f,tableoffset+axisoffset)
+ for i=1,nofaxis do
+ axis[i]={
+ tag=readtag(f),
+ name=lower(extras[readushort(f)]),
+ ordering=readushort(f),
+ variants={}
+ }
+ end
+ setposition(f,tableoffset+valuesoffset)
+ for i=1,nofvalues do
+ values[i]=readushort(f)
+ end
+ for i=1,nofvalues do
+ setposition(f,tableoffset+valuesoffset+values[i])
+ local format=readushort(f)
+ local index=readushort(f)+1
+ local flags=readushort(f)
+ local name=lower(extras[readushort(f)])
+ local value=readfixed(f)
+ local variant
+ if format==1 then
+ variant={
+ flags=flags,
+ name=name,
+ value=value,
+ }
+ elseif format==2 then
+ variant={
+ flags=flags,
+ name=name,
+ value=value,
+ minimum=readfixed(f),
+ maximum=readfixed(f),
+ }
+ elseif format==3 then
+ variant={
+ flags=flags,
+ name=name,
+ value=value,
+ link=readfixed(f),
+ }
+ end
+ insert(axis[index].variants,variant)
+ end
+ sort(axis,function(a,b)
+ return a.ordering<b.ordering
+ end)
+ for i=1,#axis do
+ local a=axis[i]
+ sort(a.variants,function(a,b)
+ return a.name<b.name
+ end)
+ a.ordering=nil
+ end
+ setvariabledata(fontdata,"designaxis",axis)
+ setvariabledata(fontdata,"fallbackname",fallbackname)
+ end
+end
+function readers.avar(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"avar",true)
+ if tableoffset then
+ local function collect()
+ local nofvalues=readushort(f)
+ local values={}
+ local lastfrom=false
+ local lastto=false
+ for i=1,nofvalues do
+ local f,t=read2dot14(f),read2dot14(f)
+ if lastfrom and f<=lastfrom then
+ elseif lastto and t>=lastto then
+ else
+ values[#values+1]={ f,t }
+ lastfrom,lastto=f,t
+ end
+ end
+ nofvalues=#values
+ if nofvalues>2 then
+ local some=values[1]
+ if some[1]==-1 and some[2]==-1 then
+ some=values[nofvalues]
+ if some[1]==1 and some[2]==1 then
+ for i=2,nofvalues-1 do
+ some=values[i]
+ if some[1]==0 and some[2]==0 then
+ return values
+ end
+ end
+ end
+ end
+ end
+ return false
+ end
+ local majorversion=readushort(f)
+ local minorversion=readushort(f)
+ local reserved=readushort(f)
+ local nofaxis=readushort(f)
+ local segments={}
+ for i=1,nofaxis do
+ segments[i]=collect()
+ end
+ setvariabledata(fontdata,"segments",segments)
+ end
+end
+function readers.fvar(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"fvar",true)
+ if tableoffset then
+ local version=readulong(f)
+ local offsettoaxis=tableoffset+readushort(f)
+ local reserved=skipshort(f)
+ local nofaxis=readushort(f)
+ local sizeofaxis=readushort(f)
+ local nofinstances=readushort(f)
+ local sizeofinstances=readushort(f)
+ local extras=fontdata.extras
+ local axis={}
+ local instances={}
+ setposition(f,offsettoaxis)
+ for i=1,nofaxis do
+ axis[i]={
+ tag=readtag(f),
+ minimum=readfixed(f),
+ default=readfixed(f),
+ maximum=readfixed(f),
+ flags=readushort(f),
+ name=lower(extras[readushort(f)] or "bad name"),
+ }
+ local n=sizeofaxis-20
+ if n>0 then
+ skipbytes(f,n)
+ elseif n<0 then
+ end
+ end
+ local nofbytes=2+2+2+nofaxis*4
+ local readpsname=nofbytes<=sizeofinstances
+ local skippable=sizeofinstances-nofbytes
+ for i=1,nofinstances do
+ local subfamid=readushort(f)
+ local flags=readushort(f)
+ local values={}
+ for i=1,nofaxis do
+ values[i]={
+ axis=axis[i].tag,
+ value=readfixed(f),
+ }
+ end
+ local psnameid=readpsname and readushort(f) or 0xFFFF
+ if subfamid==2 or subfamid==17 then
+ elseif subfamid==0xFFFF then
+ subfamid=nil
+ elseif subfamid<=256 or subfamid>=32768 then
+ subfamid=nil
+ end
+ if psnameid==6 then
+ elseif psnameid==0xFFFF then
+ psnameid=nil
+ elseif psnameid<=256 or psnameid>=32768 then
+ psnameid=nil
+ end
+ instances[i]={
+ subfamily=extras[subfamid],
+ psname=psnameid and extras[psnameid] or nil,
+ values=values,
+ }
+ if skippable>0 then
+ skipbytes(f,skippable)
+ end
+ end
+ setvariabledata(fontdata,"axis",axis)
+ setvariabledata(fontdata,"instances",instances)
+ end
+end
+function readers.hvar(f,fontdata,specification)
+ local factors=specification.factors
+ if not factors then
+ return
+ end
+ local tableoffset=gotodatatable(f,fontdata,"hvar",specification.variable)
+ if not tableoffset then
+ return
+ end
+ local version=readulong(f)
+ local variationoffset=tableoffset+readulong(f)
+ local advanceoffset=tableoffset+readulong(f)
+ local lsboffset=tableoffset+readulong(f)
+ local rsboffset=tableoffset+readulong(f)
+ local regions={}
+ local variations={}
+ local innerindex={}
+ local outerindex={}
+ if variationoffset>0 then
+ regions,deltas=readvariationdata(f,variationoffset,factors)
+ end
+ if not regions then
+ return
+ end
+ if advanceoffset>0 then
+ setposition(f,advanceoffset)
+ local format=readushort(f)
+ local mapcount=readushort(f)
+ local entrysize=rshift(band(format,0x0030),4)+1
+ local nofinnerbits=band(format,0x000F)+1
+ local innermask=lshift(1,nofinnerbits)-1
+ local readcardinal=read_cardinal[entrysize]
+ for i=0,mapcount-1 do
+ local mapdata=readcardinal(f)
+ outerindex[i]=rshift(mapdata,nofinnerbits)
+ innerindex[i]=band(mapdata,innermask)
+ end
+ setvariabledata(fontdata,"hvarwidths",true)
+ local glyphs=fontdata.glyphs
+ for i=0,fontdata.nofglyphs-1 do
+ local glyph=glyphs[i]
+ local width=glyph.width
+ if width then
+ local outer=outerindex[i] or 0
+ local inner=innerindex[i] or i
+ if outer and inner then
+ local delta=deltas[outer+1]
+ if delta then
+ local d=delta.deltas[inner+1]
+ if d then
+ local scales=delta.scales
+ local deltaw=0
+ for i=1,#scales do
+ local di=d[i]
+ if di then
+ deltaw=deltaw+scales[i]*di
+ else
+ break
+ end
+ end
+ glyph.width=width+round(deltaw)
+ end
+ end
+ end
+ end
+ end
+ end
+end
+function readers.vvar(f,fontdata,specification)
+ if not specification.variable then
+ return
+ end
+end
+function readers.mvar(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"mvar",specification.variable)
+ if tableoffset then
+ local version=readulong(f)
+ local reserved=skipshort(f,1)
+ local recordsize=readushort(f)
+ local nofrecords=readushort(f)
+ local offsettostore=tableoffset+readushort(f)
+ local dimensions={}
+ local factors=specification.factors
+ if factors then
+ local regions,deltas=readvariationdata(f,offsettostore,factors)
+ for i=1,nofrecords do
+ local tag=readtag(f)
+ local var=variabletags[tag]
+ if var then
+ local outer=readushort(f)
+ local inner=readushort(f)
+ local delta=deltas[outer+1]
+ if delta then
+ local d=delta.deltas[inner+1]
+ if d then
+ local scales=delta.scales
+ local dd=0
+ for i=1,#scales do
+ dd=dd+scales[i]*d[i]
+ end
+ var(fontdata,round(dd))
+ end
+ end
+ else
+ skipshort(f,2)
+ end
+ if recordsize>8 then
+ skipbytes(recordsize-8)
+ end
+ end
+ end
+ end
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-oup']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local next,type=next,type
+local P,R,S=lpeg.P,lpeg.R,lpeg.S
+local lpegmatch=lpeg.match
+local insert,remove,copy,unpack=table.insert,table.remove,table.copy,table.unpack
+local formatters=string.formatters
+local sortedkeys=table.sortedkeys
+local sortedhash=table.sortedhash
+local tohash=table.tohash
+local setmetatableindex=table.setmetatableindex
+local report=logs.reporter("otf reader")
+local trace_markwidth=false trackers.register("otf.markwidth",function(v) trace_markwidth=v end)
+local readers=fonts.handlers.otf.readers
+local privateoffset=fonts.constructors and fonts.constructors.privateoffset or 0xF0000
+local f_private=formatters["P%05X"]
+local f_unicode=formatters["U%05X"]
+local f_index=formatters["I%05X"]
+local f_character_y=formatters["%C"]
+local f_character_n=formatters["[ %C ]"]
+local check_duplicates=true
+local check_soft_hyphen=true
+directives.register("otf.checksofthyphen",function(v)
+ check_soft_hyphen=v
+end)
+local function replaced(list,index,replacement)
+ if type(list)=="number" then
+ return replacement
+ elseif type(replacement)=="table" then
+ local t={}
+ local n=index-1
+ for i=1,n do
+ t[i]=list[i]
+ end
+ for i=1,#replacement do
+ n=n+1
+ t[n]=replacement[i]
+ end
+ for i=index+1,#list do
+ n=n+1
+ t[n]=list[i]
+ end
+ else
+ list[index]=replacement
+ return list
+ end
+end
+local function unifyresources(fontdata,indices)
+ local descriptions=fontdata.descriptions
+ local resources=fontdata.resources
+ if not descriptions or not resources then
+ return
+ end
+ local variants=fontdata.resources.variants
+ if variants then
+ for selector,unicodes in next,variants do
+ for unicode,index in next,unicodes do
+ unicodes[unicode]=indices[index]
+ end
+ end
+ end
+ local function remark(marks)
+ if marks then
+ local newmarks={}
+ for k,v in next,marks do
+ local u=indices[k]
+ if u then
+ newmarks[u]=v
+ else
+ report("discarding mark %i",k)
+ end
+ end
+ return newmarks
+ end
+ end
+ local marks=resources.marks
+ if marks then
+ resources.marks=remark(marks)
+ end
+ local markclasses=resources.markclasses
+ if markclasses then
+ for class,marks in next,markclasses do
+ markclasses[class]=remark(marks)
+ end
+ end
+ local marksets=resources.marksets
+ if marksets then
+ for class,marks in next,marksets do
+ marksets[class]=remark(marks)
+ end
+ end
+ local done={}
+ local duplicates=check_duplicates and resources.duplicates
+ if duplicates and not next(duplicates) then
+ duplicates=false
+ end
+ local function recover(cover)
+ for i=1,#cover do
+ local c=cover[i]
+ if not done[c] then
+ local t={}
+ for k,v in next,c do
+ t[indices[k]]=v
+ end
+ cover[i]=t
+ done[c]=d
+ end
+ end
+ end
+ local function recursed(c)
+ local t={}
+ for g,d in next,c do
+ if type(d)=="table" then
+ t[indices[g]]=recursed(d)
+ else
+ t[g]=indices[d]
+ end
+ end
+ return t
+ end
+ local function unifythem(sequences)
+ if not sequences then
+ return
+ end
+ for i=1,#sequences do
+ local sequence=sequences[i]
+ local kind=sequence.type
+ local steps=sequence.steps
+ local features=sequence.features
+ if steps then
+ for i=1,#steps do
+ local step=steps[i]
+ if kind=="gsub_single" then
+ local c=step.coverage
+ if c then
+ local t1=done[c]
+ if not t1 then
+ t1={}
+ if duplicates then
+ for g1,d1 in next,c do
+ local ug1=indices[g1]
+ local ud1=indices[d1]
+ t1[ug1]=ud1
+ local dg1=duplicates[ug1]
+ if dg1 then
+ for u in next,dg1 do
+ t1[u]=ud1
+ end
+ end
+ end
+ else
+ for g1,d1 in next,c do
+ t1[indices[g1]]=indices[d1]
+ end
+ end
+ done[c]=t1
+ end
+ step.coverage=t1
+ end
+ elseif kind=="gpos_pair" then
+ local c=step.coverage
+ if c then
+ local t1=done[c]
+ if not t1 then
+ t1={}
+ for g1,d1 in next,c do
+ local t2=done[d1]
+ if not t2 then
+ t2={}
+ for g2,d2 in next,d1 do
+ t2[indices[g2]]=d2
+ end
+ done[d1]=t2
+ end
+ t1[indices[g1]]=t2
+ end
+ done[c]=t1
+ end
+ step.coverage=t1
+ end
+ elseif kind=="gsub_ligature" then
+ local c=step.coverage
+ if c then
+ step.coverage=recursed(c)
+ end
+ elseif kind=="gsub_alternate" or kind=="gsub_multiple" then
+ local c=step.coverage
+ if c then
+ local t1=done[c]
+ if not t1 then
+ t1={}
+ if duplicates then
+ for g1,d1 in next,c do
+ for i=1,#d1 do
+ d1[i]=indices[d1[i]]
+ end
+ local ug1=indices[g1]
+ t1[ug1]=d1
+ local dg1=duplicates[ug1]
+ if dg1 then
+ for u in next,dg1 do
+ t1[u]=copy(d1)
+ end
+ end
+ end
+ else
+ for g1,d1 in next,c do
+ for i=1,#d1 do
+ d1[i]=indices[d1[i]]
+ end
+ t1[indices[g1]]=d1
+ end
+ end
+ done[c]=t1
+ end
+ step.coverage=t1
+ end
+ elseif kind=="gpos_mark2base" or kind=="gpos_mark2mark" or kind=="gpos_mark2ligature" then
+ local c=step.coverage
+ if c then
+ local t1=done[c]
+ if not t1 then
+ t1={}
+ for g1,d1 in next,c do
+ t1[indices[g1]]=d1
+ end
+ done[c]=t1
+ end
+ step.coverage=t1
+ end
+ local c=step.baseclasses
+ if c then
+ local t1=done[c]
+ if not t1 then
+ for g1,d1 in next,c do
+ local t2=done[d1]
+ if not t2 then
+ t2={}
+ for g2,d2 in next,d1 do
+ t2[indices[g2]]=d2
+ end
+ done[d1]=t2
+ end
+ c[g1]=t2
+ end
+ done[c]=c
+ end
+ end
+ elseif kind=="gpos_single" then
+ local c=step.coverage
+ if c then
+ local t1=done[c]
+ if not t1 then
+ t1={}
+ if duplicates then
+ for g1,d1 in next,c do
+ local ug1=indices[g1]
+ t1[ug1]=d1
+ local dg1=duplicates[ug1]
+ if dg1 then
+ for u in next,dg1 do
+ t1[u]=d1
+ end
+ end
+ end
+ else
+ for g1,d1 in next,c do
+ t1[indices[g1]]=d1
+ end
+ end
+ done[c]=t1
+ end
+ step.coverage=t1
+ end
+ elseif kind=="gpos_cursive" then
+ local c=step.coverage
+ if c then
+ local t1=done[c]
+ if not t1 then
+ t1={}
+ if duplicates then
+ for g1,d1 in next,c do
+ local ug1=indices[g1]
+ t1[ug1]=d1
+ local dg1=duplicates[ug1]
+ if dg1 then
+ for u in next,dg1 do
+ t1[u]=copy(d1)
+ end
+ end
+ end
+ else
+ for g1,d1 in next,c do
+ t1[indices[g1]]=d1
+ end
+ end
+ done[c]=t1
+ end
+ step.coverage=t1
+ end
+ end
+ local rules=step.rules
+ if rules then
+ for i=1,#rules do
+ local rule=rules[i]
+ local before=rule.before if before then recover(before) end
+ local after=rule.after if after then recover(after) end
+ local current=rule.current if current then recover(current) end
+ local replacements=rule.replacements
+ if replacements then
+ if not done[replacements] then
+ local r={}
+ for k,v in next,replacements do
+ r[indices[k]]=indices[v]
+ end
+ rule.replacements=r
+ done[replacements]=r
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ unifythem(resources.sequences)
+ unifythem(resources.sublookups)
+end
+local function copyduplicates(fontdata)
+ if check_duplicates then
+ local descriptions=fontdata.descriptions
+ local resources=fontdata.resources
+ local duplicates=resources.duplicates
+ if check_soft_hyphen then
+ local ds=descriptions[0xAD]
+ if not ds or ds.width==0 then
+ if ds then
+ descriptions[0xAD]=nil
+ report("patching soft hyphen")
+ else
+ report("adding soft hyphen")
+ end
+ if not duplicates then
+ duplicates={}
+ resources.duplicates=duplicates
+ end
+ local dh=duplicates[0x2D]
+ if dh then
+ dh[#dh+1]={ [0xAD]=true }
+ else
+ duplicates[0x2D]={ [0xAD]=true }
+ end
+ end
+ end
+ if duplicates then
+ for u,d in next,duplicates do
+ local du=descriptions[u]
+ if du then
+ local t={ f_character_y(u),"@",f_index(du.index),"->" }
+ local n=0
+ local m=25
+ for u in next,d do
+ if descriptions[u] then
+ if n<m then
+ t[n+4]=f_character_n(u)
+ end
+ else
+ local c=copy(du)
+ c.unicode=u
+ descriptions[u]=c
+ if n<m then
+ t[n+4]=f_character_y(u)
+ end
+ end
+ n=n+1
+ end
+ if n<=m then
+ report("duplicates: %i : % t",n,t)
+ else
+ report("duplicates: %i : % t ...",n,t)
+ end
+ else
+ end
+ end
+ end
+ end
+end
+local ignore={
+ ["notdef"]=true,
+ [".notdef"]=true,
+ ["null"]=true,
+ [".null"]=true,
+ ["nonmarkingreturn"]=true,
+}
+local function checklookups(fontdata,missing,nofmissing)
+ local descriptions=fontdata.descriptions
+ local resources=fontdata.resources
+ if missing and nofmissing and nofmissing<=0 then
+ return
+ end
+ local singles={}
+ local alternates={}
+ local ligatures={}
+ if not missing then
+ missing={}
+ nofmissing=0
+ for u,d in next,descriptions do
+ if not d.unicode then
+ nofmissing=nofmissing+1
+ missing[u]=true
+ end
+ end
+ end
+ local function collectthem(sequences)
+ if not sequences then
+ return
+ end
+ for i=1,#sequences do
+ local sequence=sequences[i]
+ local kind=sequence.type
+ local steps=sequence.steps
+ if steps then
+ for i=1,#steps do
+ local step=steps[i]
+ if kind=="gsub_single" then
+ local c=step.coverage
+ if c then
+ singles[#singles+1]=c
+ end
+ elseif kind=="gsub_alternate" then
+ local c=step.coverage
+ if c then
+ alternates[#alternates+1]=c
+ end
+ elseif kind=="gsub_ligature" then
+ local c=step.coverage
+ if c then
+ ligatures[#ligatures+1]=c
+ end
+ end
+ end
+ end
+ end
+ end
+ collectthem(resources.sequences)
+ collectthem(resources.sublookups)
+ local loops=0
+ while true do
+ loops=loops+1
+ local old=nofmissing
+ for i=1,#singles do
+ local c=singles[i]
+ for g1,g2 in next,c do
+ if missing[g1] then
+ local u2=descriptions[g2].unicode
+ if u2 then
+ missing[g1]=false
+ descriptions[g1].unicode=u2
+ nofmissing=nofmissing-1
+ end
+ end
+ if missing[g2] then
+ local u1=descriptions[g1].unicode
+ if u1 then
+ missing[g2]=false
+ descriptions[g2].unicode=u1
+ nofmissing=nofmissing-1
+ end
+ end
+ end
+ end
+ for i=1,#alternates do
+ local c=alternates[i]
+ for g1,d1 in next,c do
+ if missing[g1] then
+ for i=1,#d1 do
+ local g2=d1[i]
+ local u2=descriptions[g2].unicode
+ if u2 then
+ missing[g1]=false
+ descriptions[g1].unicode=u2
+ nofmissing=nofmissing-1
+ end
+ end
+ end
+ if not missing[g1] then
+ for i=1,#d1 do
+ local g2=d1[i]
+ if missing[g2] then
+ local u1=descriptions[g1].unicode
+ if u1 then
+ missing[g2]=false
+ descriptions[g2].unicode=u1
+ nofmissing=nofmissing-1
+ end
+ end
+ end
+ end
+ end
+ end
+ if nofmissing<=0 then
+ report("all done in %s loops",loops)
+ return
+ elseif old==nofmissing then
+ break
+ end
+ end
+ local t,n
+ local function recursed(c)
+ for g,d in next,c do
+ if g~="ligature" then
+ local u=descriptions[g].unicode
+ if u then
+ n=n+1
+ t[n]=u
+ recursed(d)
+ n=n-1
+ end
+ elseif missing[d] then
+ local l={}
+ local m=0
+ for i=1,n do
+ local u=t[i]
+ if type(u)=="table" then
+ for i=1,#u do
+ m=m+1
+ l[m]=u[i]
+ end
+ else
+ m=m+1
+ l[m]=u
+ end
+ end
+ missing[d]=false
+ descriptions[d].unicode=l
+ nofmissing=nofmissing-1
+ end
+ end
+ end
+ if nofmissing>0 then
+ t={}
+ n=0
+ local loops=0
+ while true do
+ loops=loops+1
+ local old=nofmissing
+ for i=1,#ligatures do
+ recursed(ligatures[i])
+ end
+ if nofmissing<=0 then
+ report("all done in %s loops",loops)
+ return
+ elseif old==nofmissing then
+ break
+ end
+ end
+ t=nil
+ n=0
+ end
+ if nofmissing>0 then
+ local done={}
+ for i,r in next,missing do
+ if r then
+ local data=descriptions[i]
+ local name=data and data.name or f_index(i)
+ if not ignore[name] then
+ done[name]=true
+ end
+ end
+ end
+ if next(done) then
+ report("not unicoded: % t",sortedkeys(done))
+ end
+ end
+end
+local function unifymissing(fontdata)
+ if not fonts.mappings then
+ require("font-map")
+ require("font-agl")
+ end
+ local unicodes={}
+ local resources=fontdata.resources
+ resources.unicodes=unicodes
+ for unicode,d in next,fontdata.descriptions do
+ if unicode<privateoffset then
+ local name=d.name
+ if name then
+ unicodes[name]=unicode
+ end
+ end
+ end
+ fonts.mappings.addtounicode(fontdata,fontdata.filename,checklookups)
+ resources.unicodes=nil
+end
+local function unifyglyphs(fontdata,usenames)
+ local private=fontdata.private or privateoffset
+ local glyphs=fontdata.glyphs
+ local indices={}
+ local descriptions={}
+ local names=usenames and {}
+ local resources=fontdata.resources
+ local zero=glyphs[0]
+ local zerocode=zero.unicode
+ if not zerocode then
+ zerocode=private
+ zero.unicode=zerocode
+ private=private+1
+ end
+ descriptions[zerocode]=zero
+ if names then
+ local name=glyphs[0].name or f_private(zerocode)
+ indices[0]=name
+ names[name]=zerocode
+ else
+ indices[0]=zerocode
+ end
+ for index=1,#glyphs do
+ local glyph=glyphs[index]
+ local unicode=glyph.unicode
+ if not unicode then
+ unicode=private
+ if names then
+ local name=glyph.name or f_private(unicode)
+ indices[index]=name
+ names[name]=unicode
+ else
+ indices[index]=unicode
+ end
+ private=private+1
+ elseif descriptions[unicode] then
+ report("assigning private unicode %U to glyph indexed %05X (%C)",private,index,unicode)
+ unicode=private
+ if names then
+ local name=glyph.name or f_private(unicode)
+ indices[index]=name
+ names[name]=unicode
+ else
+ indices[index]=unicode
+ end
+ private=private+1
+ else
+ if names then
+ local name=glyph.name or f_unicode(unicode)
+ indices[index]=name
+ names[name]=unicode
+ else
+ indices[index]=unicode
+ end
+ end
+ descriptions[unicode]=glyph
+ end
+ for index=1,#glyphs do
+ local math=glyphs[index].math
+ if math then
+ local list=math.vparts
+ if list then
+ for i=1,#list do local l=list[i] l.glyph=indices[l.glyph] end
+ end
+ local list=math.hparts
+ if list then
+ for i=1,#list do local l=list[i] l.glyph=indices[l.glyph] end
+ end
+ local list=math.vvariants
+ if list then
+ for i=1,#list do list[i]=indices[list[i]] end
+ end
+ local list=math.hvariants
+ if list then
+ for i=1,#list do list[i]=indices[list[i]] end
+ end
+ end
+ end
+ local colorpalettes=resources.colorpalettes
+ if colorpalettes then
+ for index=1,#glyphs do
+ local colors=glyphs[index].colors
+ if colors then
+ for i=1,#colors do
+ local c=colors[i]
+ c.slot=indices[c.slot]
+ end
+ end
+ end
+ end
+ fontdata.private=private
+ fontdata.glyphs=nil
+ fontdata.names=names
+ fontdata.descriptions=descriptions
+ fontdata.hashmethod=hashmethod
+ return indices,names
+end
+local p_bogusname=(
+ (P("uni")+P("UNI")+P("Uni")+P("U")+P("u"))*S("Xx")^0*R("09","AF")^1+(P("identity")+P("Identity")+P("IDENTITY"))*R("09","AF")^1+(P("index")+P("Index")+P("INDEX"))*R("09")^1
+)*P(-1)
+local function stripredundant(fontdata)
+ local descriptions=fontdata.descriptions
+ if descriptions then
+ local n=0
+ local c=0
+ for unicode,d in next,descriptions do
+ local name=d.name
+ if name and lpegmatch(p_bogusname,name) then
+ d.name=nil
+ n=n+1
+ end
+ if d.class=="base" then
+ d.class=nil
+ c=c+1
+ end
+ end
+ if n>0 then
+ report("%s bogus names removed (verbose unicode)",n)
+ end
+ if c>0 then
+ report("%s base class tags removed (default is base)",c)
+ end
+ end
+end
+function readers.getcomponents(fontdata)
+ local resources=fontdata.resources
+ if resources then
+ local sequences=resources.sequences
+ if sequences then
+ local collected={}
+ for i=1,#sequences do
+ local sequence=sequences[i]
+ if sequence.type=="gsub_ligature" then
+ local steps=sequence.steps
+ if steps then
+ local l={}
+ local function traverse(p,k,v)
+ if k=="ligature" then
+ collected[v]={ unpack(l) }
+ else
+ insert(l,k)
+ for k,vv in next,v do
+ traverse(p,k,vv)
+ end
+ remove(l)
+ end
+ end
+ for i=1,#steps do
+ local coverage=steps[i].coverage
+ if coverage then
+ for k,v in next,coverage do
+ traverse(k,k,v)
+ end
+ end
+ end
+ end
+ end
+ end
+ if next(collected) then
+ while true do
+ local done=false
+ for k,v in next,collected do
+ for i=1,#v do
+ local vi=v[i]
+ if vi==k then
+ collected[k]=nil
+ break
+ else
+ local c=collected[vi]
+ if c then
+ done=true
+ local t={}
+ local n=i-1
+ for j=1,n do
+ t[j]=v[j]
+ end
+ for j=1,#c do
+ n=n+1
+ t[n]=c[j]
+ end
+ for j=i+1,#v do
+ n=n+1
+ t[n]=v[j]
+ end
+ collected[k]=t
+ break
+ end
+ end
+ end
+ end
+ if not done then
+ break
+ end
+ end
+ return collected
+ end
+ end
+ end
+end
+readers.unifymissing=unifymissing
+function readers.rehash(fontdata,hashmethod)
+ if not (fontdata and fontdata.glyphs) then
+ return
+ end
+ if hashmethod=="indices" then
+ fontdata.hashmethod="indices"
+ elseif hashmethod=="names" then
+ fontdata.hashmethod="names"
+ local indices=unifyglyphs(fontdata,true)
+ unifyresources(fontdata,indices)
+ copyduplicates(fontdata)
+ unifymissing(fontdata)
+ else
+ fontdata.hashmethod="unicodes"
+ local indices=unifyglyphs(fontdata)
+ unifyresources(fontdata,indices)
+ copyduplicates(fontdata)
+ unifymissing(fontdata)
+ stripredundant(fontdata)
+ end
+end
+function readers.checkhash(fontdata)
+ local hashmethod=fontdata.hashmethod
+ if hashmethod=="unicodes" then
+ fontdata.names=nil
+ elseif hashmethod=="names" and fontdata.names then
+ unifyresources(fontdata,fontdata.names)
+ copyduplicates(fontdata)
+ fontdata.hashmethod="unicodes"
+ fontdata.names=nil
+ else
+ readers.rehash(fontdata,"unicodes")
+ end
+end
+function readers.addunicodetable(fontdata)
+ local resources=fontdata.resources
+ local unicodes=resources.unicodes
+ if not unicodes then
+ local descriptions=fontdata.descriptions
+ if descriptions then
+ unicodes={}
+ resources.unicodes=unicodes
+ for u,d in next,descriptions do
+ local n=d.name
+ if n then
+ unicodes[n]=u
+ end
+ end
+ end
+ end
+end
+local concat,sort=table.concat,table.sort
+local next,type,tostring=next,type,tostring
+local criterium=1
+local threshold=0
+local trace_packing=false trackers.register("otf.packing",function(v) trace_packing=v end)
+local trace_loading=false trackers.register("otf.loading",function(v) trace_loading=v end)
+local report_otf=logs.reporter("fonts","otf loading")
+local function tabstr_normal(t)
+ local s={}
+ local n=0
+ for k,v in next,t do
+ n=n+1
+ if type(v)=="table" then
+ s[n]=k..">"..tabstr_normal(v)
+ elseif v==true then
+ s[n]=k.."+"
+ elseif v then
+ s[n]=k.."="..v
+ else
+ s[n]=k.."-"
+ end
+ end
+ if n==0 then
+ return ""
+ elseif n==1 then
+ return s[1]
+ else
+ sort(s)
+ return concat(s,",")
+ end
+end
+local function tabstr_flat(t)
+ local s={}
+ local n=0
+ for k,v in next,t do
+ n=n+1
+ s[n]=k.."="..v
+ end
+ if n==0 then
+ return ""
+ elseif n==1 then
+ return s[1]
+ else
+ sort(s)
+ return concat(s,",")
+ end
+end
+local function tabstr_mixed(t)
+ local s={}
+ local n=#t
+ if n==0 then
+ return ""
+ elseif n==1 then
+ local k=t[1]
+ if k==true then
+ return "++"
+ elseif k==false then
+ return "--"
+ else
+ return tostring(k)
+ end
+ else
+ for i=1,n do
+ local k=t[i]
+ if k==true then
+ s[i]="++"
+ elseif k==false then
+ s[i]="--"
+ else
+ s[i]=k
+ end
+ end
+ return concat(s,",")
+ end
+end
+local function tabstr_boolean(t)
+ local s={}
+ local n=0
+ for k,v in next,t do
+ n=n+1
+ if v then
+ s[n]=k.."+"
+ else
+ s[n]=k.."-"
+ end
+ end
+ if n==0 then
+ return ""
+ elseif n==1 then
+ return s[1]
+ else
+ sort(s)
+ return concat(s,",")
+ end
+end
+function readers.pack(data)
+ if data then
+ local h,t,c={},{},{}
+ local hh,tt,cc={},{},{}
+ local nt,ntt=0,0
+ local function pack_normal(v)
+ local tag=tabstr_normal(v)
+ local ht=h[tag]
+ if ht then
+ c[ht]=c[ht]+1
+ return ht
+ else
+ nt=nt+1
+ t[nt]=v
+ h[tag]=nt
+ c[nt]=1
+ return nt
+ end
+ end
+ local function pack_normal_cc(v)
+ local tag=tabstr_normal(v)
+ local ht=h[tag]
+ if ht then
+ c[ht]=c[ht]+1
+ return ht
+ else
+ v[1]=0
+ nt=nt+1
+ t[nt]=v
+ h[tag]=nt
+ c[nt]=1
+ return nt
+ end
+ end
+ local function pack_flat(v)
+ local tag=tabstr_flat(v)
+ local ht=h[tag]
+ if ht then
+ c[ht]=c[ht]+1
+ return ht
+ else
+ nt=nt+1
+ t[nt]=v
+ h[tag]=nt
+ c[nt]=1
+ return nt
+ end
+ end
+ local function pack_indexed(v)
+ local tag=concat(v," ")
+ local ht=h[tag]
+ if ht then
+ c[ht]=c[ht]+1
+ return ht
+ else
+ nt=nt+1
+ t[nt]=v
+ h[tag]=nt
+ c[nt]=1
+ return nt
+ end
+ end
+ local function pack_mixed(v)
+ local tag=tabstr_mixed(v)
+ local ht=h[tag]
+ if ht then
+ c[ht]=c[ht]+1
+ return ht
+ else
+ nt=nt+1
+ t[nt]=v
+ h[tag]=nt
+ c[nt]=1
+ return nt
+ end
+ end
+ local function pack_boolean(v)
+ local tag=tabstr_boolean(v)
+ local ht=h[tag]
+ if ht then
+ c[ht]=c[ht]+1
+ return ht
+ else
+ nt=nt+1
+ t[nt]=v
+ h[tag]=nt
+ c[nt]=1
+ return nt
+ end
+ end
+ local function pack_final(v)
+ if c[v]<=criterium then
+ return t[v]
+ else
+ local hv=hh[v]
+ if hv then
+ return hv
+ else
+ ntt=ntt+1
+ tt[ntt]=t[v]
+ hh[v]=ntt
+ cc[ntt]=c[v]
+ return ntt
+ end
+ end
+ end
+ local function pack_final_cc(v)
+ if c[v]<=criterium then
+ return t[v]
+ else
+ local hv=hh[v]
+ if hv then
+ return hv
+ else
+ ntt=ntt+1
+ tt[ntt]=t[v]
+ hh[v]=ntt
+ cc[ntt]=c[v]
+ return ntt
+ end
+ end
+ end
+ local function success(stage,pass)
+ if nt==0 then
+ if trace_loading or trace_packing then
+ report_otf("pack quality: nothing to pack")
+ end
+ return false
+ elseif nt>=threshold then
+ local one,two,rest=0,0,0
+ if pass==1 then
+ for k,v in next,c do
+ if v==1 then
+ one=one+1
+ elseif v==2 then
+ two=two+1
+ else
+ rest=rest+1
+ end
+ end
+ else
+ for k,v in next,cc do
+ if v>20 then
+ rest=rest+1
+ elseif v>10 then
+ two=two+1
+ else
+ one=one+1
+ end
+ end
+ data.tables=tt
+ end
+ if trace_loading or trace_packing then
+ report_otf("pack quality: stage %s, pass %s, %s packed, 1-10:%s, 11-20:%s, rest:%s (criterium: %s)",
+ stage,pass,one+two+rest,one,two,rest,criterium)
+ end
+ return true
+ else
+ if trace_loading or trace_packing then
+ report_otf("pack quality: stage %s, pass %s, %s packed, aborting pack (threshold: %s)",
+ stage,pass,nt,threshold)
+ end
+ return false
+ end
+ end
+ local function packers(pass)
+ if pass==1 then
+ return pack_normal,pack_indexed,pack_flat,pack_boolean,pack_mixed,pack_normal_cc
+ else
+ return pack_final,pack_final,pack_final,pack_final,pack_final,pack_final_cc
+ end
+ end
+ local resources=data.resources
+ local sequences=resources.sequences
+ local sublookups=resources.sublookups
+ local features=resources.features
+ local palettes=resources.colorpalettes
+ local variable=resources.variabledata
+ local chardata=characters and characters.data
+ local descriptions=data.descriptions or data.glyphs
+ if not descriptions then
+ return
+ end
+ for pass=1,2 do
+ if trace_packing then
+ report_otf("start packing: stage 1, pass %s",pass)
+ end
+ local pack_normal,pack_indexed,pack_flat,pack_boolean,pack_mixed,pack_normal_cc=packers(pass)
+ for unicode,description in next,descriptions do
+ local boundingbox=description.boundingbox
+ if boundingbox then
+ description.boundingbox=pack_indexed(boundingbox)
+ end
+ local math=description.math
+ if math then
+ local kerns=math.kerns
+ if kerns then
+ for tag,kern in next,kerns do
+ kerns[tag]=pack_normal(kern)
+ end
+ end
+ end
+ end
+ local function packthem(sequences)
+ for i=1,#sequences do
+ local sequence=sequences[i]
+ local kind=sequence.type
+ local steps=sequence.steps
+ local order=sequence.order
+ local features=sequence.features
+ local flags=sequence.flags
+ if steps then
+ for i=1,#steps do
+ local step=steps[i]
+ if kind=="gpos_pair" then
+ local c=step.coverage
+ if c then
+ if step.format=="pair" then
+ for g1,d1 in next,c do
+ for g2,d2 in next,d1 do
+ local f=d2[1] if f and f~=true then d2[1]=pack_indexed(f) end
+ local s=d2[2] if s and s~=true then d2[2]=pack_indexed(s) end
+ end
+ end
+ else
+ for g1,d1 in next,c do
+ c[g1]=pack_normal(d1)
+ end
+ end
+ end
+ elseif kind=="gpos_single" then
+ local c=step.coverage
+ if c then
+ if step.format=="single" then
+ for g1,d1 in next,c do
+ if d1 and d1~=true then
+ c[g1]=pack_indexed(d1)
+ end
+ end
+ else
+ step.coverage=pack_normal(c)
+ end
+ end
+ elseif kind=="gpos_cursive" then
+ local c=step.coverage
+ if c then
+ for g1,d1 in next,c do
+ local f=d1[2] if f then d1[2]=pack_indexed(f) end
+ local s=d1[3] if s then d1[3]=pack_indexed(s) end
+ end
+ end
+ elseif kind=="gpos_mark2base" or kind=="gpos_mark2mark" then
+ local c=step.baseclasses
+ if c then
+ for g1,d1 in next,c do
+ for g2,d2 in next,d1 do
+ d1[g2]=pack_indexed(d2)
+ end
+ end
+ end
+ local c=step.coverage
+ if c then
+ for g1,d1 in next,c do
+ d1[2]=pack_indexed(d1[2])
+ end
+ end
+ elseif kind=="gpos_mark2ligature" then
+ local c=step.baseclasses
+ if c then
+ for g1,d1 in next,c do
+ for g2,d2 in next,d1 do
+ for g3,d3 in next,d2 do
+ d2[g3]=pack_indexed(d3)
+ end
+ end
+ end
+ end
+ local c=step.coverage
+ if c then
+ for g1,d1 in next,c do
+ d1[2]=pack_indexed(d1[2])
+ end
+ end
+ end
+ local rules=step.rules
+ if rules then
+ for i=1,#rules do
+ local rule=rules[i]
+ local r=rule.before if r then for i=1,#r do r[i]=pack_boolean(r[i]) end end
+ local r=rule.after if r then for i=1,#r do r[i]=pack_boolean(r[i]) end end
+ local r=rule.current if r then for i=1,#r do r[i]=pack_boolean(r[i]) end end
+ local r=rule.replacements if r then rule.replacements=pack_flat (r) end
+ end
+ end
+ end
+ end
+ if order then
+ sequence.order=pack_indexed(order)
+ end
+ if features then
+ for script,feature in next,features do
+ features[script]=pack_normal(feature)
+ end
+ end
+ if flags then
+ sequence.flags=pack_normal(flags)
+ end
+ end
+ end
+ if sequences then
+ packthem(sequences)
+ end
+ if sublookups then
+ packthem(sublookups)
+ end
+ if features then
+ for k,list in next,features do
+ for feature,spec in next,list do
+ list[feature]=pack_normal(spec)
+ end
+ end
+ end
+ if palettes then
+ for i=1,#palettes do
+ local p=palettes[i]
+ for j=1,#p do
+ p[j]=pack_indexed(p[j])
+ end
+ end
+ end
+ if variable then
+ local instances=variable.instances
+ if instances then
+ for i=1,#instances do
+ local v=instances[i].values
+ for j=1,#v do
+ v[j]=pack_normal(v[j])
+ end
+ end
+ end
+ local function packdeltas(main)
+ if main then
+ local deltas=main.deltas
+ if deltas then
+ for i=1,#deltas do
+ local di=deltas[i]
+ local d=di.deltas
+ for j=1,#d do
+ d[j]=pack_indexed(d[j])
+ end
+ di.regions=pack_indexed(di.regions)
+ end
+ end
+ local regions=main.regions
+ if regions then
+ for i=1,#regions do
+ local r=regions[i]
+ for j=1,#r do
+ r[j]=pack_normal(r[j])
+ end
+ end
+ end
+ end
+ end
+ packdeltas(variable.global)
+ packdeltas(variable.horizontal)
+ packdeltas(variable.vertical)
+ packdeltas(variable.metrics)
+ end
+ if not success(1,pass) then
+ return
+ end
+ end
+ if nt>0 then
+ for pass=1,2 do
+ if trace_packing then
+ report_otf("start packing: stage 2, pass %s",pass)
+ end
+ local pack_normal,pack_indexed,pack_flat,pack_boolean,pack_mixed,pack_normal_cc=packers(pass)
+ for unicode,description in next,descriptions do
+ local math=description.math
+ if math then
+ local kerns=math.kerns
+ if kerns then
+ math.kerns=pack_normal(kerns)
+ end
+ end
+ end
+ local function packthem(sequences)
+ for i=1,#sequences do
+ local sequence=sequences[i]
+ local kind=sequence.type
+ local steps=sequence.steps
+ local features=sequence.features
+ if steps then
+ for i=1,#steps do
+ local step=steps[i]
+ if kind=="gpos_pair" then
+ local c=step.coverage
+ if c then
+ if step.format=="pair" then
+ for g1,d1 in next,c do
+ for g2,d2 in next,d1 do
+ d1[g2]=pack_normal(d2)
+ end
+ end
+ end
+ end
+ elseif kind=="gpos_mark2ligature" then
+ local c=step.baseclasses
+ if c then
+ for g1,d1 in next,c do
+ for g2,d2 in next,d1 do
+ d1[g2]=pack_normal(d2)
+ end
+ end
+ end
+ end
+ local rules=step.rules
+ if rules then
+ for i=1,#rules do
+ local rule=rules[i]
+ local r=rule.before if r then rule.before=pack_normal(r) end
+ local r=rule.after if r then rule.after=pack_normal(r) end
+ local r=rule.current if r then rule.current=pack_normal(r) end
+ end
+ end
+ end
+ end
+ if features then
+ sequence.features=pack_normal(features)
+ end
+ end
+ end
+ if sequences then
+ packthem(sequences)
+ end
+ if sublookups then
+ packthem(sublookups)
+ end
+ if variable then
+ local function unpackdeltas(main)
+ if main then
+ local regions=main.regions
+ if regions then
+ main.regions=pack_normal(regions)
+ end
+ end
+ end
+ unpackdeltas(variable.global)
+ unpackdeltas(variable.horizontal)
+ unpackdeltas(variable.vertical)
+ unpackdeltas(variable.metrics)
+ end
+ end
+ for pass=1,2 do
+ if trace_packing then
+ report_otf("start packing: stage 3, pass %s",pass)
+ end
+ local pack_normal,pack_indexed,pack_flat,pack_boolean,pack_mixed,pack_normal_cc=packers(pass)
+ local function packthem(sequences)
+ for i=1,#sequences do
+ local sequence=sequences[i]
+ local kind=sequence.type
+ local steps=sequence.steps
+ local features=sequence.features
+ if steps then
+ for i=1,#steps do
+ local step=steps[i]
+ if kind=="gpos_pair" then
+ local c=step.coverage
+ if c then
+ if step.format=="pair" then
+ for g1,d1 in next,c do
+ c[g1]=pack_normal(d1)
+ end
+ end
+ end
+ elseif kind=="gpos_cursive" then
+ local c=step.coverage
+ if c then
+ for g1,d1 in next,c do
+ c[g1]=pack_normal_cc(d1)
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ if sequences then
+ packthem(sequences)
+ end
+ if sublookups then
+ packthem(sublookups)
+ end
+ end
+ end
+ end
+end
+local unpacked_mt={
+ __index=function(t,k)
+ t[k]=false
+ return k
+ end
+}
+function readers.unpack(data)
+ if data then
+ local tables=data.tables
+ if tables then
+ local resources=data.resources
+ local descriptions=data.descriptions or data.glyphs
+ local sequences=resources.sequences
+ local sublookups=resources.sublookups
+ local features=resources.features
+ local palettes=resources.colorpalettes
+ local variable=resources.variabledata
+ local unpacked={}
+ setmetatable(unpacked,unpacked_mt)
+ for unicode,description in next,descriptions do
+ local tv=tables[description.boundingbox]
+ if tv then
+ description.boundingbox=tv
+ end
+ local math=description.math
+ if math then
+ local kerns=math.kerns
+ if kerns then
+ local tm=tables[kerns]
+ if tm then
+ math.kerns=tm
+ kerns=unpacked[tm]
+ end
+ if kerns then
+ for k,kern in next,kerns do
+ local tv=tables[kern]
+ if tv then
+ kerns[k]=tv
+ end
+ end
+ end
+ end
+ end
+ end
+ local function unpackthem(sequences)
+ for i=1,#sequences do
+ local sequence=sequences[i]
+ local kind=sequence.type
+ local steps=sequence.steps
+ local order=sequence.order
+ local features=sequence.features
+ local flags=sequence.flags
+ local markclass=sequence.markclass
+ if features then
+ local tv=tables[features]
+ if tv then
+ sequence.features=tv
+ features=tv
+ end
+ for script,feature in next,features do
+ local tv=tables[feature]
+ if tv then
+ features[script]=tv
+ end
+ end
+ end
+ if steps then
+ for i=1,#steps do
+ local step=steps[i]
+ if kind=="gpos_pair" then
+ local c=step.coverage
+ if c then
+ if step.format=="pair" then
+ for g1,d1 in next,c do
+ local tv=tables[d1]
+ if tv then
+ c[g1]=tv
+ d1=tv
+ end
+ for g2,d2 in next,d1 do
+ local tv=tables[d2]
+ if tv then
+ d1[g2]=tv
+ d2=tv
+ end
+ local f=tables[d2[1]] if f then d2[1]=f end
+ local s=tables[d2[2]] if s then d2[2]=s end
+ end
+ end
+ else
+ for g1,d1 in next,c do
+ local tv=tables[d1]
+ if tv then
+ c[g1]=tv
+ end
+ end
+ end
+ end
+ elseif kind=="gpos_single" then
+ local c=step.coverage
+ if c then
+ if step.format=="single" then
+ for g1,d1 in next,c do
+ local tv=tables[d1]
+ if tv then
+ c[g1]=tv
+ end
+ end
+ else
+ local tv=tables[c]
+ if tv then
+ step.coverage=tv
+ end
+ end
+ end
+ elseif kind=="gpos_cursive" then
+ local c=step.coverage
+ if c then
+ for g1,d1 in next,c do
+ local tv=tables[d1]
+ if tv then
+ d1=tv
+ c[g1]=d1
+ end
+ local f=tables[d1[2]] if f then d1[2]=f end
+ local s=tables[d1[3]] if s then d1[3]=s end
+ end
+ end
+ elseif kind=="gpos_mark2base" or kind=="gpos_mark2mark" then
+ local c=step.baseclasses
+ if c then
+ for g1,d1 in next,c do
+ for g2,d2 in next,d1 do
+ local tv=tables[d2]
+ if tv then
+ d1[g2]=tv
+ end
+ end
+ end
+ end
+ local c=step.coverage
+ if c then
+ for g1,d1 in next,c do
+ local tv=tables[d1[2]]
+ if tv then
+ d1[2]=tv
+ end
+ end
+ end
+ elseif kind=="gpos_mark2ligature" then
+ local c=step.baseclasses
+ if c then
+ for g1,d1 in next,c do
+ for g2,d2 in next,d1 do
+ local tv=tables[d2]
+ if tv then
+ d2=tv
+ d1[g2]=d2
+ end
+ for g3,d3 in next,d2 do
+ local tv=tables[d2[g3]]
+ if tv then
+ d2[g3]=tv
+ end
+ end
+ end
+ end
+ end
+ local c=step.coverage
+ if c then
+ for g1,d1 in next,c do
+ local tv=tables[d1[2]]
+ if tv then
+ d1[2]=tv
+ end
+ end
+ end
+ end
+ local rules=step.rules
+ if rules then
+ for i=1,#rules do
+ local rule=rules[i]
+ local before=rule.before
+ if before then
+ local tv=tables[before]
+ if tv then
+ rule.before=tv
+ before=tv
+ end
+ for i=1,#before do
+ local tv=tables[before[i]]
+ if tv then
+ before[i]=tv
+ end
+ end
+ end
+ local after=rule.after
+ if after then
+ local tv=tables[after]
+ if tv then
+ rule.after=tv
+ after=tv
+ end
+ for i=1,#after do
+ local tv=tables[after[i]]
+ if tv then
+ after[i]=tv
+ end
+ end
+ end
+ local current=rule.current
+ if current then
+ local tv=tables[current]
+ if tv then
+ rule.current=tv
+ current=tv
+ end
+ for i=1,#current do
+ local tv=tables[current[i]]
+ if tv then
+ current[i]=tv
+ end
+ end
+ end
+ local replacements=rule.replacements
+ if replacements then
+ local tv=tables[replacements]
+ if tv then
+ rule.replacements=tv
+ end
+ end
+ end
+ end
+ end
+ end
+ if order then
+ local tv=tables[order]
+ if tv then
+ sequence.order=tv
+ end
+ end
+ if flags then
+ local tv=tables[flags]
+ if tv then
+ sequence.flags=tv
+ end
+ end
+ end
+ end
+ if sequences then
+ unpackthem(sequences)
+ end
+ if sublookups then
+ unpackthem(sublookups)
+ end
+ if features then
+ for k,list in next,features do
+ for feature,spec in next,list do
+ local tv=tables[spec]
+ if tv then
+ list[feature]=tv
+ end
+ end
+ end
+ end
+ if palettes then
+ for i=1,#palettes do
+ local p=palettes[i]
+ for j=1,#p do
+ local tv=tables[p[j]]
+ if tv then
+ p[j]=tv
+ end
+ end
+ end
+ end
+ if variable then
+ local instances=variable.instances
+ if instances then
+ for i=1,#instances do
+ local v=instances[i].values
+ for j=1,#v do
+ local tv=tables[v[j]]
+ if tv then
+ v[j]=tv
+ end
+ end
+ end
+ end
+ local function unpackdeltas(main)
+ if main then
+ local deltas=main.deltas
+ if deltas then
+ for i=1,#deltas do
+ local di=deltas[i]
+ local d=di.deltas
+ local r=di.regions
+ for j=1,#d do
+ local tv=tables[d[j]]
+ if tv then
+ d[j]=tv
+ end
+ end
+ local tv=di.regions
+ if tv then
+ di.regions=tv
+ end
+ end
+ end
+ local regions=main.regions
+ if regions then
+ local tv=tables[regions]
+ if tv then
+ main.regions=tv
+ regions=tv
+ end
+ for i=1,#regions do
+ local r=regions[i]
+ for j=1,#r do
+ local tv=tables[r[j]]
+ if tv then
+ r[j]=tv
+ end
+ end
+ end
+ end
+ end
+ end
+ unpackdeltas(variable.global)
+ unpackdeltas(variable.horizontal)
+ unpackdeltas(variable.vertical)
+ unpackdeltas(variable.metrics)
+ end
+ data.tables=nil
+ end
+ end
+end
+local mt={
+ __index=function(t,k)
+ if k=="height" then
+ local ht=t.boundingbox[4]
+ return ht<0 and 0 or ht
+ elseif k=="depth" then
+ local dp=-t.boundingbox[2]
+ return dp<0 and 0 or dp
+ elseif k=="width" then
+ return 0
+ elseif k=="name" then
+ return forcenotdef and ".notdef"
+ end
+ end
+}
+local function sameformat(sequence,steps,first,nofsteps,kind)
+ return true
+end
+local function mergesteps_1(lookup,strict)
+ local steps=lookup.steps
+ local nofsteps=lookup.nofsteps
+ local first=steps[1]
+ if strict then
+ local f=first.format
+ for i=2,nofsteps do
+ if steps[i].format~=f then
+ report("not merging %a steps of %a lookup %a, different formats",nofsteps,lookup.type,lookup.name)
+ return 0
+ end
+ end
+ end
+ report("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ local target=first.coverage
+ for i=2,nofsteps do
+ for k,v in next,steps[i].coverage do
+ if not target[k] then
+ target[k]=v
+ end
+ end
+ end
+ lookup.nofsteps=1
+ lookup.merged=true
+ lookup.steps={ first }
+ return nofsteps-1
+end
+local function mergesteps_2(lookup)
+ local steps=lookup.steps
+ local nofsteps=lookup.nofsteps
+ local first=steps[1]
+ if strict then
+ local f=first.format
+ for i=2,nofsteps do
+ if steps[i].format~=f then
+ report("not merging %a steps of %a lookup %a, different formats",nofsteps,lookup.type,lookup.name)
+ return 0
+ end
+ end
+ end
+ report("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ local target=first.coverage
+ for i=2,nofsteps do
+ for k,v in next,steps[i].coverage do
+ local tk=target[k]
+ if tk then
+ for kk,vv in next,v do
+ if tk[kk]==nil then
+ tk[kk]=vv
+ end
+ end
+ else
+ target[k]=v
+ end
+ end
+ end
+ lookup.nofsteps=1
+ lookup.merged=true
+ lookup.steps={ first }
+ return nofsteps-1
+end
+local function mergesteps_3(lookup,strict)
+ local steps=lookup.steps
+ local nofsteps=lookup.nofsteps
+ report("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ local coverage={}
+ for i=1,nofsteps do
+ for k,v in next,steps[i].coverage do
+ local tk=coverage[k]
+ if tk then
+ report("quitting merge due to multiple checks")
+ return nofsteps
+ else
+ coverage[k]=v
+ end
+ end
+ end
+ local first=steps[1]
+ local baseclasses={}
+ for i=1,nofsteps do
+ local offset=i*10
+ local step=steps[i]
+ for k,v in sortedhash(step.baseclasses) do
+ baseclasses[offset+k]=v
+ end
+ for k,v in next,step.coverage do
+ v[1]=offset+v[1]
+ end
+ end
+ first.baseclasses=baseclasses
+ first.coverage=coverage
+ lookup.nofsteps=1
+ lookup.merged=true
+ lookup.steps={ first }
+ return nofsteps-1
+end
+local function nested(old,new)
+ for k,v in next,old do
+ if k=="ligature" then
+ if not new.ligature then
+ new.ligature=v
+ end
+ else
+ local n=new[k]
+ if n then
+ nested(v,n)
+ else
+ new[k]=v
+ end
+ end
+ end
+end
+local function mergesteps_4(lookup)
+ local steps=lookup.steps
+ local nofsteps=lookup.nofsteps
+ local first=steps[1]
+ report("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ local target=first.coverage
+ for i=2,nofsteps do
+ for k,v in next,steps[i].coverage do
+ local tk=target[k]
+ if tk then
+ nested(v,tk)
+ else
+ target[k]=v
+ end
+ end
+ end
+ lookup.nofsteps=1
+ lookup.steps={ first }
+ return nofsteps-1
+end
+local function mergesteps_5(lookup)
+ local steps=lookup.steps
+ local nofsteps=lookup.nofsteps
+ local first=steps[1]
+ report("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ local target=first.coverage
+ local hash=nil
+ for k,v in next,target do
+ hash=v[1]
+ break
+ end
+ for i=2,nofsteps do
+ for k,v in next,steps[i].coverage do
+ local tk=target[k]
+ if tk then
+ if not tk[2] then
+ tk[2]=v[2]
+ end
+ if not tk[3] then
+ tk[3]=v[3]
+ end
+ else
+ target[k]=v
+ v[1]=hash
+ end
+ end
+ end
+ lookup.nofsteps=1
+ lookup.merged=true
+ lookup.steps={ first }
+ return nofsteps-1
+end
+local function checkkerns(lookup)
+ local steps=lookup.steps
+ local nofsteps=lookup.nofsteps
+ local kerned=0
+ for i=1,nofsteps do
+ local step=steps[i]
+ if step.format=="pair" then
+ local coverage=step.coverage
+ local kerns=true
+ for g1,d1 in next,coverage do
+ if d1==true then
+ elseif not d1 then
+ elseif d1[1]~=0 or d1[2]~=0 or d1[4]~=0 then
+ kerns=false
+ break
+ end
+ end
+ if kerns then
+ report("turning pairs of step %a of %a lookup %a into kerns",i,lookup.type,lookup.name)
+ local c={}
+ for g1,d1 in next,coverage do
+ if d1 and d1~=true then
+ c[g1]=d1[3]
+ end
+ end
+ step.coverage=c
+ step.format="move"
+ kerned=kerned+1
+ end
+ end
+ end
+ return kerned
+end
+local function checkpairs(lookup)
+ local steps=lookup.steps
+ local nofsteps=lookup.nofsteps
+ local kerned=0
+ local function onlykerns(step)
+ local coverage=step.coverage
+ for g1,d1 in next,coverage do
+ for g2,d2 in next,d1 do
+ if d2[2] then
+ return false
+ else
+ local v=d2[1]
+ if v==true then
+ elseif v and (v[1]~=0 or v[2]~=0 or v[4]~=0) then
+ return false
+ end
+ end
+ end
+ end
+ return coverage
+ end
+ for i=1,nofsteps do
+ local step=steps[i]
+ if step.format=="pair" then
+ local coverage=onlykerns(step)
+ if coverage then
+ report("turning pairs of step %a of %a lookup %a into kerns",i,lookup.type,lookup.name)
+ for g1,d1 in next,coverage do
+ local d={}
+ for g2,d2 in next,d1 do
+ local v=d2[1]
+ if v==true then
+ elseif v then
+ d[g2]=v[3]
+ end
+ end
+ coverage[g1]=d
+ end
+ step.format="move"
+ kerned=kerned+1
+ end
+ end
+ end
+ return kerned
+end
+local compact_pairs=true
+local compact_singles=true
+local merge_pairs=true
+local merge_singles=true
+local merge_substitutions=true
+local merge_alternates=true
+local merge_multiples=true
+local merge_ligatures=true
+local merge_cursives=true
+local merge_marks=true
+directives.register("otf.compact.pairs",function(v) compact_pairs=v end)
+directives.register("otf.compact.singles",function(v) compact_singles=v end)
+directives.register("otf.merge.pairs",function(v) merge_pairs=v end)
+directives.register("otf.merge.singles",function(v) merge_singles=v end)
+directives.register("otf.merge.substitutions",function(v) merge_substitutions=v end)
+directives.register("otf.merge.alternates",function(v) merge_alternates=v end)
+directives.register("otf.merge.multiples",function(v) merge_multiples=v end)
+directives.register("otf.merge.ligatures",function(v) merge_ligatures=v end)
+directives.register("otf.merge.cursives",function(v) merge_cursives=v end)
+directives.register("otf.merge.marks",function(v) merge_marks=v end)
+function readers.compact(data)
+ if not data or data.compacted then
+ return
+ else
+ data.compacted=true
+ end
+ local resources=data.resources
+ local merged=0
+ local kerned=0
+ local allsteps=0
+ local function compact(what)
+ local lookups=resources[what]
+ if lookups then
+ for i=1,#lookups do
+ local lookup=lookups[i]
+ local nofsteps=lookup.nofsteps
+ local kind=lookup.type
+ allsteps=allsteps+nofsteps
+ if nofsteps>1 then
+ local merg=merged
+ if kind=="gsub_single" then
+ if merge_substitutions then
+ merged=merged+mergesteps_1(lookup)
+ end
+ elseif kind=="gsub_alternate" then
+ if merge_alternates then
+ merged=merged+mergesteps_1(lookup)
+ end
+ elseif kind=="gsub_multiple" then
+ if merge_multiples then
+ merged=merged+mergesteps_1(lookup)
+ end
+ elseif kind=="gsub_ligature" then
+ if merge_ligatures then
+ merged=merged+mergesteps_4(lookup)
+ end
+ elseif kind=="gpos_single" then
+ if merge_singles then
+ merged=merged+mergesteps_1(lookup,true)
+ end
+ if compact_singles then
+ kerned=kerned+checkkerns(lookup)
+ end
+ elseif kind=="gpos_pair" then
+ if merge_pairs then
+ merged=merged+mergesteps_2(lookup)
+ end
+ if compact_pairs then
+ kerned=kerned+checkpairs(lookup)
+ end
+ elseif kind=="gpos_cursive" then
+ if merge_cursives then
+ merged=merged+mergesteps_5(lookup)
+ end
+ elseif kind=="gpos_mark2mark" or kind=="gpos_mark2base" or kind=="gpos_mark2ligature" then
+ if merge_marks then
+ merged=merged+mergesteps_3(lookup)
+ end
+ end
+ if merg~=merged then
+ lookup.merged=true
+ end
+ elseif nofsteps==1 then
+ local kern=kerned
+ if kind=="gpos_single" then
+ if compact_singles then
+ kerned=kerned+checkkerns(lookup)
+ end
+ elseif kind=="gpos_pair" then
+ if compact_pairs then
+ kerned=kerned+checkpairs(lookup)
+ end
+ end
+ if kern~=kerned then
+ end
+ end
+ end
+ else
+ report("no lookups in %a",what)
+ end
+ end
+ compact("sequences")
+ compact("sublookups")
+ if merged>0 then
+ report("%i steps of %i removed due to merging",merged,allsteps)
+ end
+ if kerned>0 then
+ report("%i steps of %i steps turned from pairs into kerns",kerned,allsteps)
+ end
+end
+local function mergesteps(t,k)
+ if k=="merged" then
+ local merged={}
+ for i=1,#t do
+ local step=t[i]
+ local coverage=step.coverage
+ for k in next,coverage do
+ local m=merged[k]
+ if m then
+ m[2]=i
+ else
+ merged[k]={ i,i }
+ end
+ end
+ end
+ t.merged=merged
+ return merged
+ end
+end
+local function checkmerge(sequence)
+ local steps=sequence.steps
+ if steps then
+ setmetatableindex(steps,mergesteps)
+ end
+end
+local function checkflags(sequence,resources)
+ if not sequence.skiphash then
+ local flags=sequence.flags
+ if flags then
+ local skipmark=flags[1]
+ local skipligature=flags[2]
+ local skipbase=flags[3]
+ local markclass=sequence.markclass
+ local skipsome=skipmark or skipligature or skipbase or markclass or false
+ if skipsome then
+ sequence.skiphash=setmetatableindex(function(t,k)
+ local c=resources.classes[k]
+ local v=c==skipmark
+ or (markclass and c=="mark" and not markclass[k])
+ or c==skipligature
+ or c==skipbase
+ or false
+ t[k]=v
+ return v
+ end)
+ else
+ sequence.skiphash=false
+ end
+ else
+ sequence.skiphash=false
+ end
+ end
+end
+local function checksteps(sequence)
+ local steps=sequence.steps
+ if steps then
+ for i=1,#steps do
+ steps[i].index=i
+ end
+ end
+end
+if fonts.helpers then
+ fonts.helpers.checkmerge=checkmerge
+ fonts.helpers.checkflags=checkflags
+ fonts.helpers.checksteps=checksteps
+end
+function readers.expand(data)
+ if not data or data.expanded then
+ return
+ else
+ data.expanded=true
+ end
+ local resources=data.resources
+ local sublookups=resources.sublookups
+ local sequences=resources.sequences
+ local markclasses=resources.markclasses
+ local descriptions=data.descriptions
+ if descriptions then
+ local defaultwidth=resources.defaultwidth or 0
+ local defaultheight=resources.defaultheight or 0
+ local defaultdepth=resources.defaultdepth or 0
+ local basename=trace_markwidth and file.basename(resources.filename)
+ for u,d in next,descriptions do
+ local bb=d.boundingbox
+ local wd=d.width
+ if not wd then
+ d.width=defaultwidth
+ elseif trace_markwidth and wd~=0 and d.class=="mark" then
+ report("mark %a with width %b found in %a",d.name or "<noname>",wd,basename)
+ end
+ if bb then
+ local ht=bb[4]
+ local dp=-bb[2]
+ if ht==0 or ht<0 then
+ else
+ d.height=ht
+ end
+ if dp==0 or dp<0 then
+ else
+ d.depth=dp
+ end
+ end
+ end
+ end
+ local function expandlookups(sequences)
+ if sequences then
+ for i=1,#sequences do
+ local sequence=sequences[i]
+ local steps=sequence.steps
+ if steps then
+ local nofsteps=sequence.nofsteps
+ local kind=sequence.type
+ local markclass=sequence.markclass
+ if markclass then
+ if not markclasses then
+ report_warning("missing markclasses")
+ sequence.markclass=false
+ else
+ sequence.markclass=markclasses[markclass]
+ end
+ end
+ checkmerge(sequence)
+ checkflags(sequence,resources)
+ checksteps(sequence)
+ for i=1,nofsteps do
+ local step=steps[i]
+ local baseclasses=step.baseclasses
+ if baseclasses then
+ local coverage=step.coverage
+ for k,v in next,coverage do
+ v[1]=baseclasses[v[1]]
+ end
+ elseif kind=="gpos_cursive" then
+ local coverage=step.coverage
+ for k,v in next,coverage do
+ v[1]=coverage
+ end
+ end
+ local rules=step.rules
+ if rules then
+ local rulehash={}
+ local rulesize=0
+ local coverage={}
+ local lookuptype=sequence.type
+ step.coverage=coverage
+ for nofrules=1,#rules do
+ local rule=rules[nofrules]
+ local current=rule.current
+ local before=rule.before
+ local after=rule.after
+ local replacements=rule.replacements or false
+ local sequence={}
+ local nofsequences=0
+ if before then
+ for n=1,#before do
+ nofsequences=nofsequences+1
+ sequence[nofsequences]=before[n]
+ end
+ end
+ local start=nofsequences+1
+ for n=1,#current do
+ nofsequences=nofsequences+1
+ sequence[nofsequences]=current[n]
+ end
+ local stop=nofsequences
+ if after then
+ for n=1,#after do
+ nofsequences=nofsequences+1
+ sequence[nofsequences]=after[n]
+ end
+ end
+ local lookups=rule.lookups or false
+ local subtype=nil
+ if lookups then
+ for i=1,#lookups do
+ local lookups=lookups[i]
+ if lookups then
+ for k,v in next,lookups do
+ local lookup=sublookups[v]
+ if lookup then
+ lookups[k]=lookup
+ if not subtype then
+ subtype=lookup.type
+ end
+ else
+ end
+ end
+ end
+ end
+ end
+ if sequence[1] then
+ sequence.n=#sequence
+ rulesize=rulesize+1
+ rulehash[rulesize]={
+ nofrules,
+ lookuptype,
+ sequence,
+ start,
+ stop,
+ lookups,
+ replacements,
+ subtype,
+ }
+ for unic in next,sequence[start] do
+ local cu=coverage[unic]
+ if not cu then
+ coverage[unic]=rulehash
+ else
+ end
+ end
+ end
+ rulehash.n=#rulehash
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ expandlookups(sequences)
+ expandlookups(sublookups)
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-otl']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files",
+}
+local lower=string.lower
+local type,next,tonumber,tostring,unpack=type,next,tonumber,tostring,unpack
+local abs=math.abs
+local derivetable=table.derive
+local formatters=string.formatters
+local setmetatableindex=table.setmetatableindex
+local allocate=utilities.storage.allocate
+local registertracker=trackers.register
+local registerdirective=directives.register
+local starttiming=statistics.starttiming
+local stoptiming=statistics.stoptiming
+local elapsedtime=statistics.elapsedtime
+local findbinfile=resolvers.findbinfile
+local trace_loading=false registertracker("otf.loading",function(v) trace_loading=v end)
+local trace_features=false registertracker("otf.features",function(v) trace_features=v end)
+local trace_defining=false registertracker("fonts.defining",function(v) trace_defining=v end)
+local report_otf=logs.reporter("fonts","otf loading")
+local fonts=fonts
+local otf=fonts.handlers.otf
+otf.version=3.102
+otf.cache=containers.define("fonts","otl",otf.version,true)
+otf.svgcache=containers.define("fonts","svg",otf.version,true)
+otf.sbixcache=containers.define("fonts","sbix",otf.version,true)
+otf.pdfcache=containers.define("fonts","pdf",otf.version,true)
+otf.svgenabled=false
+otf.sbixenabled=false
+local otfreaders=otf.readers
+local hashes=fonts.hashes
+local definers=fonts.definers
+local readers=fonts.readers
+local constructors=fonts.constructors
+local otffeatures=constructors.features.otf
+local registerotffeature=otffeatures.register
+local otfenhancers=constructors.enhancers.otf
+local registerotfenhancer=otfenhancers.register
+local forceload=false
+local cleanup=0
+local syncspace=true
+local forcenotdef=false
+local privateoffset=fonts.constructors and fonts.constructors.privateoffset or 0xF0000
+local applyruntimefixes=fonts.treatments and fonts.treatments.applyfixes
+local wildcard="*"
+local default="dflt"
+local formats=fonts.formats
+formats.otf="opentype"
+formats.ttf="truetype"
+formats.ttc="truetype"
+registerdirective("fonts.otf.loader.cleanup",function(v) cleanup=tonumber(v) or (v and 1) or 0 end)
+registerdirective("fonts.otf.loader.force",function(v) forceload=v end)
+registerdirective("fonts.otf.loader.syncspace",function(v) syncspace=v end)
+registerdirective("fonts.otf.loader.forcenotdef",function(v) forcenotdef=v end)
+registerotfenhancer("check extra features",function() end)
+local checkmemory=utilities.lua and utilities.lua.checkmemory
+local threshold=100
+local tracememory=false
+registertracker("fonts.otf.loader.memory",function(v) tracememory=v end)
+if not checkmemory then
+ local collectgarbage=collectgarbage
+ checkmemory=function(previous,threshold)
+ local current=collectgarbage("count")
+ if previous then
+ local checked=(threshold or 64)*1024
+ if current-previous>checked then
+ collectgarbage("collect")
+ current=collectgarbage("count")
+ end
+ end
+ return current
+ end
+end
+function otf.load(filename,sub,instance)
+ local base=file.basename(file.removesuffix(filename))
+ local name=file.removesuffix(base)
+ local attr=lfs.attributes(filename)
+ local size=attr and attr.size or 0
+ local time=attr and attr.modification or 0
+ if sub=="" then
+ sub=false
+ end
+ local hash=name
+ if sub then
+ hash=hash.."-"..sub
+ end
+ if instance then
+ hash=hash.."-"..instance
+ end
+ hash=containers.cleanname(hash)
+ local data=containers.read(otf.cache,hash)
+ local reload=not data or data.size~=size or data.time~=time or data.tableversion~=otfreaders.tableversion
+ if forceload then
+ report_otf("forced reload of %a due to hard coded flag",filename)
+ reload=true
+ end
+ if reload then
+ report_otf("loading %a, hash %a",filename,hash)
+ starttiming(otfreaders)
+ data=otfreaders.loadfont(filename,sub or 1,instance)
+ if data then
+ local used=checkmemory()
+ local resources=data.resources
+ local svgshapes=resources.svgshapes
+ local sbixshapes=resources.sbixshapes
+ if cleanup==0 then
+ checkmemory(used,threshold,tracememory)
+ end
+ if svgshapes then
+ resources.svgshapes=nil
+ if otf.svgenabled then
+ local timestamp=os.date()
+ containers.write(otf.svgcache,hash,{
+ svgshapes=svgshapes,
+ timestamp=timestamp,
+ })
+ data.properties.svg={
+ hash=hash,
+ timestamp=timestamp,
+ }
+ end
+ if cleanup>1 then
+ collectgarbage("collect")
+ else
+ checkmemory(used,threshold,tracememory)
+ end
+ end
+ if sbixshapes then
+ resources.sbixshapes=nil
+ if otf.sbixenabled then
+ local timestamp=os.date()
+ containers.write(otf.sbixcache,hash,{
+ sbixshapes=sbixshapes,
+ timestamp=timestamp,
+ })
+ data.properties.sbix={
+ hash=hash,
+ timestamp=timestamp,
+ }
+ end
+ if cleanup>1 then
+ collectgarbage("collect")
+ else
+ checkmemory(used,threshold,tracememory)
+ end
+ end
+ otfreaders.compact(data)
+ if cleanup==0 then
+ checkmemory(used,threshold,tracememory)
+ end
+ otfreaders.rehash(data,"unicodes")
+ otfreaders.addunicodetable(data)
+ otfreaders.extend(data)
+ if cleanup==0 then
+ checkmemory(used,threshold,tracememory)
+ end
+ otfreaders.pack(data)
+ report_otf("loading done")
+ report_otf("saving %a in cache",filename)
+ data=containers.write(otf.cache,hash,data)
+ if cleanup>1 then
+ collectgarbage("collect")
+ else
+ checkmemory(used,threshold,tracememory)
+ end
+ stoptiming(otfreaders)
+ if elapsedtime then
+ report_otf("loading, optimizing, packing and caching time %s",elapsedtime(otfreaders))
+ end
+ if cleanup>3 then
+ collectgarbage("collect")
+ else
+ checkmemory(used,threshold,tracememory)
+ end
+ data=containers.read(otf.cache,hash)
+ if cleanup>2 then
+ collectgarbage("collect")
+ else
+ checkmemory(used,threshold,tracememory)
+ end
+ else
+ data=nil
+ report_otf("loading failed due to read error")
+ end
+ end
+ if data then
+ if trace_defining then
+ report_otf("loading from cache using hash %a",hash)
+ end
+ otfreaders.unpack(data)
+ otfreaders.expand(data)
+ otfreaders.addunicodetable(data)
+ otfenhancers.apply(data,filename,data)
+ if applyruntimefixes then
+ applyruntimefixes(filename,data)
+ end
+ data.metadata.math=data.resources.mathconstants
+ local classes=data.resources.classes
+ if not classes then
+ local descriptions=data.descriptions
+ classes=setmetatableindex(function(t,k)
+ local d=descriptions[k]
+ local v=(d and d.class or "base") or false
+ t[k]=v
+ return v
+ end)
+ data.resources.classes=classes
+ end
+ end
+ return data
+end
+function otf.setfeatures(tfmdata,features)
+ local okay=constructors.initializefeatures("otf",tfmdata,features,trace_features,report_otf)
+ if okay then
+ return constructors.collectprocessors("otf",tfmdata,features,trace_features,report_otf)
+ else
+ return {}
+ end
+end
+local function copytotfm(data,cache_id)
+ if data then
+ local metadata=data.metadata
+ local properties=derivetable(data.properties)
+ local descriptions=derivetable(data.descriptions)
+ local goodies=derivetable(data.goodies)
+ local characters={}
+ local parameters={}
+ local mathparameters={}
+ local resources=data.resources
+ local unicodes=resources.unicodes
+ local spaceunits=500
+ local spacer="space"
+ local designsize=metadata.designsize or 100
+ local minsize=metadata.minsize or designsize
+ local maxsize=metadata.maxsize or designsize
+ local mathspecs=metadata.math
+ if designsize==0 then
+ designsize=100
+ minsize=100
+ maxsize=100
+ end
+ if mathspecs then
+ for name,value in next,mathspecs do
+ mathparameters[name]=value
+ end
+ end
+ for unicode in next,data.descriptions do
+ characters[unicode]={}
+ end
+ if mathspecs then
+ for unicode,character in next,characters do
+ local d=descriptions[unicode]
+ local m=d.math
+ if m then
+ local italic=m.italic
+ local vitalic=m.vitalic
+ local variants=m.hvariants
+ local parts=m.hparts
+ if variants then
+ local c=character
+ for i=1,#variants do
+ local un=variants[i]
+ c.next=un
+ c=characters[un]
+ end
+ c.horiz_variants=parts
+ elseif parts then
+ character.horiz_variants=parts
+ italic=m.hitalic
+ end
+ local variants=m.vvariants
+ local parts=m.vparts
+ if variants then
+ local c=character
+ for i=1,#variants do
+ local un=variants[i]
+ c.next=un
+ c=characters[un]
+ end
+ c.vert_variants=parts
+ elseif parts then
+ character.vert_variants=parts
+ end
+ if italic and italic~=0 then
+ character.italic=italic
+ end
+ if vitalic and vitalic~=0 then
+ character.vert_italic=vitalic
+ end
+ local accent=m.accent
+ if accent then
+ character.accent=accent
+ end
+ local kerns=m.kerns
+ if kerns then
+ character.mathkerns=kerns
+ end
+ end
+ end
+ end
+ local filename=constructors.checkedfilename(resources)
+ local fontname=metadata.fontname
+ local fullname=metadata.fullname or fontname
+ local psname=fontname or fullname
+ local units=metadata.units or 1000
+ if units==0 then
+ units=1000
+ metadata.units=1000
+ report_otf("changing %a units to %a",0,units)
+ end
+ local monospaced=metadata.monospaced
+ local charwidth=metadata.averagewidth
+ local charxheight=metadata.xheight
+ local italicangle=metadata.italicangle
+ local hasitalics=metadata.hasitalics
+ properties.monospaced=monospaced
+ properties.hasitalics=hasitalics
+ parameters.italicangle=italicangle
+ parameters.charwidth=charwidth
+ parameters.charxheight=charxheight
+ local space=0x0020
+ local emdash=0x2014
+ if monospaced then
+ if descriptions[space] then
+ spaceunits,spacer=descriptions[space].width,"space"
+ end
+ if not spaceunits and descriptions[emdash] then
+ spaceunits,spacer=descriptions[emdash].width,"emdash"
+ end
+ if not spaceunits and charwidth then
+ spaceunits,spacer=charwidth,"charwidth"
+ end
+ else
+ if descriptions[space] then
+ spaceunits,spacer=descriptions[space].width,"space"
+ end
+ if not spaceunits and descriptions[emdash] then
+ spaceunits,spacer=descriptions[emdash].width/2,"emdash/2"
+ end
+ if not spaceunits and charwidth then
+ spaceunits,spacer=charwidth,"charwidth"
+ end
+ end
+ spaceunits=tonumber(spaceunits) or units/2
+ parameters.slant=0
+ parameters.space=spaceunits
+ parameters.space_stretch=1*units/2
+ parameters.space_shrink=1*units/3
+ parameters.x_height=2*units/5
+ parameters.quad=units
+ if spaceunits<2*units/5 then
+ end
+ if italicangle and italicangle~=0 then
+ parameters.italicangle=italicangle
+ parameters.italicfactor=math.cos(math.rad(90+italicangle))
+ parameters.slant=- math.tan(italicangle*math.pi/180)
+ end
+ if monospaced then
+ parameters.space_stretch=0
+ parameters.space_shrink=0
+ elseif syncspace then
+ parameters.space_stretch=spaceunits/2
+ parameters.space_shrink=spaceunits/3
+ end
+ parameters.extra_space=parameters.space_shrink
+ if charxheight then
+ parameters.x_height=charxheight
+ else
+ local x=0x0078
+ if x then
+ local x=descriptions[x]
+ if x then
+ parameters.x_height=x.height
+ end
+ end
+ end
+ parameters.designsize=(designsize/10)*65536
+ parameters.minsize=(minsize/10)*65536
+ parameters.maxsize=(maxsize/10)*65536
+ parameters.ascender=abs(metadata.ascender or 0)
+ parameters.descender=abs(metadata.descender or 0)
+ parameters.units=units
+ properties.space=spacer
+ properties.encodingbytes=2
+ properties.format=data.format or formats.otf
+ properties.noglyphnames=true
+ properties.filename=filename
+ properties.fontname=fontname
+ properties.fullname=fullname
+ properties.psname=psname
+ properties.name=filename or fullname
+ properties.private=properties.private or data.private or privateoffset
+ return {
+ characters=characters,
+ descriptions=descriptions,
+ parameters=parameters,
+ mathparameters=mathparameters,
+ resources=resources,
+ properties=properties,
+ goodies=goodies,
+ }
+ end
+end
+local converters={
+ woff={
+ cachename="webfonts",
+ action=otf.readers.woff2otf,
+ }
+}
+local function checkconversion(specification)
+ local filename=specification.filename
+ local converter=converters[lower(file.suffix(filename))]
+ if converter then
+ local base=file.basename(filename)
+ local name=file.removesuffix(base)
+ local attr=lfs.attributes(filename)
+ local size=attr and attr.size or 0
+ local time=attr and attr.modification or 0
+ if size>0 then
+ local cleanname=containers.cleanname(name)
+ local cachename=caches.setfirstwritablefile(cleanname,converter.cachename)
+ if not io.exists(cachename) or (time~=lfs.attributes(cachename).modification) then
+ report_otf("caching font %a in %a",filename,cachename)
+ converter.action(filename,cachename)
+ lfs.touch(cachename,time,time)
+ end
+ specification.filename=cachename
+ end
+ end
+end
+local function otftotfm(specification)
+ local cache_id=specification.hash
+ local tfmdata=containers.read(constructors.cache,cache_id)
+ if not tfmdata then
+ checkconversion(specification)
+ local name=specification.name
+ local sub=specification.sub
+ local subindex=specification.subindex
+ local filename=specification.filename
+ local features=specification.features.normal
+ local instance=specification.instance or (features and features.axis)
+ local rawdata=otf.load(filename,sub,instance)
+ if rawdata and next(rawdata) then
+ local descriptions=rawdata.descriptions
+ rawdata.lookuphash={}
+ tfmdata=copytotfm(rawdata,cache_id)
+ if tfmdata and next(tfmdata) then
+ local features=constructors.checkedfeatures("otf",features)
+ local shared=tfmdata.shared
+ if not shared then
+ shared={}
+ tfmdata.shared=shared
+ end
+ shared.rawdata=rawdata
+ shared.dynamics={}
+ tfmdata.changed={}
+ shared.features=features
+ shared.processes=otf.setfeatures(tfmdata,features)
+ end
+ end
+ containers.write(constructors.cache,cache_id,tfmdata)
+ end
+ return tfmdata
+end
+local function read_from_otf(specification)
+ local tfmdata=otftotfm(specification)
+ if tfmdata then
+ tfmdata.properties.name=specification.name
+ tfmdata.properties.sub=specification.sub
+ tfmdata=constructors.scale(tfmdata,specification)
+ local allfeatures=tfmdata.shared.features or specification.features.normal
+ constructors.applymanipulators("otf",tfmdata,allfeatures,trace_features,report_otf)
+ constructors.setname(tfmdata,specification)
+ fonts.loggers.register(tfmdata,file.suffix(specification.filename),specification)
+ end
+ return tfmdata
+end
+local function checkmathsize(tfmdata,mathsize)
+ local mathdata=tfmdata.shared.rawdata.metadata.math
+ local mathsize=tonumber(mathsize)
+ if mathdata then
+ local parameters=tfmdata.parameters
+ parameters.scriptpercentage=mathdata.ScriptPercentScaleDown
+ parameters.scriptscriptpercentage=mathdata.ScriptScriptPercentScaleDown
+ parameters.mathsize=mathsize
+ end
+end
+registerotffeature {
+ name="mathsize",
+ description="apply mathsize specified in the font",
+ initializers={
+ base=checkmathsize,
+ node=checkmathsize,
+ }
+}
+function otf.collectlookups(rawdata,kind,script,language)
+ if not kind then
+ return
+ end
+ if not script then
+ script=default
+ end
+ if not language then
+ language=default
+ end
+ local lookupcache=rawdata.lookupcache
+ if not lookupcache then
+ lookupcache={}
+ rawdata.lookupcache=lookupcache
+ end
+ local kindlookup=lookupcache[kind]
+ if not kindlookup then
+ kindlookup={}
+ lookupcache[kind]=kindlookup
+ end
+ local scriptlookup=kindlookup[script]
+ if not scriptlookup then
+ scriptlookup={}
+ kindlookup[script]=scriptlookup
+ end
+ local languagelookup=scriptlookup[language]
+ if not languagelookup then
+ local sequences=rawdata.resources.sequences
+ local featuremap={}
+ local featurelist={}
+ if sequences then
+ for s=1,#sequences do
+ local sequence=sequences[s]
+ local features=sequence.features
+ if features then
+ features=features[kind]
+ if features then
+ features=features[script] or features[wildcard]
+ if features then
+ features=features[language] or features[wildcard]
+ if features then
+ if not featuremap[sequence] then
+ featuremap[sequence]=true
+ featurelist[#featurelist+1]=sequence
+ end
+ end
+ end
+ end
+ end
+ end
+ if #featurelist==0 then
+ featuremap,featurelist=false,false
+ end
+ else
+ featuremap,featurelist=false,false
+ end
+ languagelookup={ featuremap,featurelist }
+ scriptlookup[language]=languagelookup
+ end
+ return unpack(languagelookup)
+end
+local function getgsub(tfmdata,k,kind,value)
+ local shared=tfmdata.shared
+ local rawdata=shared and shared.rawdata
+ if rawdata then
+ local sequences=rawdata.resources.sequences
+ if sequences then
+ local properties=tfmdata.properties
+ local validlookups,lookuplist=otf.collectlookups(rawdata,kind,properties.script,properties.language)
+ if validlookups then
+ for i=1,#lookuplist do
+ local lookup=lookuplist[i]
+ local steps=lookup.steps
+ local nofsteps=lookup.nofsteps
+ for i=1,nofsteps do
+ local coverage=steps[i].coverage
+ if coverage then
+ local found=coverage[k]
+ if found then
+ return found,lookup.type
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+end
+otf.getgsub=getgsub
+function otf.getsubstitution(tfmdata,k,kind,value)
+ local found,kind=getgsub(tfmdata,k,kind,value)
+ if not found then
+ elseif kind=="gsub_single" then
+ return found
+ elseif kind=="gsub_alternate" then
+ local choice=tonumber(value) or 1
+ return found[choice] or found[1] or k
+ end
+ return k
+end
+otf.getalternate=otf.getsubstitution
+function otf.getmultiple(tfmdata,k,kind)
+ local found,kind=getgsub(tfmdata,k,kind)
+ if found and kind=="gsub_multiple" then
+ return found
+ end
+ return { k }
+end
+function otf.getkern(tfmdata,left,right,kind)
+ local kerns=getgsub(tfmdata,left,kind or "kern",true)
+ if kerns then
+ local found=kerns[right]
+ local kind=type(found)
+ if kind=="table" then
+ found=found[1][3]
+ elseif kind~="number" then
+ found=false
+ end
+ if found then
+ return found*tfmdata.parameters.factor
+ end
+ end
+ return 0
+end
+local function check_otf(forced,specification,suffix)
+ local name=specification.name
+ if forced then
+ name=specification.forcedname
+ end
+ local fullname=findbinfile(name,suffix) or ""
+ if fullname=="" then
+ fullname=fonts.names.getfilename(name,suffix) or ""
+ end
+ if fullname~="" and not fonts.names.ignoredfile(fullname) then
+ specification.filename=fullname
+ return read_from_otf(specification)
+ end
+end
+local function opentypereader(specification,suffix)
+ local forced=specification.forced or ""
+ if formats[forced] then
+ return check_otf(true,specification,forced)
+ else
+ return check_otf(false,specification,suffix)
+ end
+end
+readers.opentype=opentypereader
+function readers.otf(specification) return opentypereader(specification,"otf") end
+function readers.ttf(specification) return opentypereader(specification,"ttf") end
+function readers.ttc(specification) return opentypereader(specification,"ttf") end
+function readers.woff(specification)
+ checkconversion(specification)
+ opentypereader(specification,"")
+end
+function otf.scriptandlanguage(tfmdata,attr)
+ local properties=tfmdata.properties
+ return properties.script or "dflt",properties.language or "dflt"
+end
+local function justset(coverage,unicode,replacement)
+ coverage[unicode]=replacement
+end
+otf.coverup={
+ stepkey="steps",
+ actions={
+ chainsubstitution=justset,
+ chainposition=justset,
+ substitution=justset,
+ alternate=justset,
+ multiple=justset,
+ kern=justset,
+ pair=justset,
+ single=justset,
+ ligature=function(coverage,unicode,ligature)
+ local first=ligature[1]
+ local tree=coverage[first]
+ if not tree then
+ tree={}
+ coverage[first]=tree
+ end
+ for i=2,#ligature do
+ local l=ligature[i]
+ local t=tree[l]
+ if not t then
+ t={}
+ tree[l]=t
+ end
+ tree=t
+ end
+ tree.ligature=unicode
+ end,
+ },
+ register=function(coverage,featuretype,format)
+ return {
+ format=format,
+ coverage=coverage,
+ }
+ end
+}
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-oto']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local concat,unpack=table.concat,table.unpack
+local insert,remove=table.insert,table.remove
+local format,gmatch,gsub,find,match,lower,strip=string.format,string.gmatch,string.gsub,string.find,string.match,string.lower,string.strip
+local type,next,tonumber,tostring,rawget=type,next,tonumber,tostring,rawget
+local trace_baseinit=false trackers.register("otf.baseinit",function(v) trace_baseinit=v end)
+local trace_singles=false trackers.register("otf.singles",function(v) trace_singles=v end)
+local trace_multiples=false trackers.register("otf.multiples",function(v) trace_multiples=v end)
+local trace_alternatives=false trackers.register("otf.alternatives",function(v) trace_alternatives=v end)
+local trace_ligatures=false trackers.register("otf.ligatures",function(v) trace_ligatures=v end)
+local trace_kerns=false trackers.register("otf.kerns",function(v) trace_kerns=v end)
+local trace_preparing=false trackers.register("otf.preparing",function(v) trace_preparing=v end)
+local report_prepare=logs.reporter("fonts","otf prepare")
+local fonts=fonts
+local otf=fonts.handlers.otf
+local otffeatures=otf.features
+local registerotffeature=otffeatures.register
+otf.defaultbasealternate="none"
+local getprivate=fonts.constructors.getprivate
+local wildcard="*"
+local default="dflt"
+local formatters=string.formatters
+local f_unicode=formatters["%U"]
+local f_uniname=formatters["%U (%s)"]
+local f_unilist=formatters["% t (% t)"]
+local function gref(descriptions,n)
+ if type(n)=="number" then
+ local name=descriptions[n].name
+ if name then
+ return f_uniname(n,name)
+ else
+ return f_unicode(n)
+ end
+ elseif n then
+ local num,nam,j={},{},0
+ for i=1,#n do
+ local ni=n[i]
+ if tonumber(ni) then
+ j=j+1
+ local di=descriptions[ni]
+ num[j]=f_unicode(ni)
+ nam[j]=di and di.name or "-"
+ end
+ end
+ return f_unilist(num,nam)
+ else
+ return "<error in base mode tracing>"
+ end
+end
+local function cref(feature,sequence)
+ return formatters["feature %a, type %a, chain lookup %a"](feature,sequence.type,sequence.name)
+end
+local function report_substitution(feature,sequence,descriptions,unicode,substitution)
+ if unicode==substitution then
+ report_prepare("%s: base substitution %s maps onto itself",
+ cref(feature,sequence),
+ gref(descriptions,unicode))
+ else
+ report_prepare("%s: base substitution %s => %S",
+ cref(feature,sequence),
+ gref(descriptions,unicode),
+ gref(descriptions,substitution))
+ end
+end
+local function report_alternate(feature,sequence,descriptions,unicode,replacement,value,comment)
+ if unicode==replacement then
+ report_prepare("%s: base alternate %s maps onto itself",
+ cref(feature,sequence),
+ gref(descriptions,unicode))
+ else
+ report_prepare("%s: base alternate %s => %s (%S => %S)",
+ cref(feature,sequence),
+ gref(descriptions,unicode),
+ replacement and gref(descriptions,replacement),
+ value,
+ comment)
+ end
+end
+local function report_ligature(feature,sequence,descriptions,unicode,ligature)
+ report_prepare("%s: base ligature %s => %S",
+ cref(feature,sequence),
+ gref(descriptions,ligature),
+ gref(descriptions,unicode))
+end
+local function report_kern(feature,sequence,descriptions,unicode,otherunicode,value)
+ report_prepare("%s: base kern %s + %s => %S",
+ cref(feature,sequence),
+ gref(descriptions,unicode),
+ gref(descriptions,otherunicode),
+ value)
+end
+local basehash,basehashes,applied={},1,{}
+local function registerbasehash(tfmdata)
+ local properties=tfmdata.properties
+ local hash=concat(applied," ")
+ local base=basehash[hash]
+ if not base then
+ basehashes=basehashes+1
+ base=basehashes
+ basehash[hash]=base
+ end
+ properties.basehash=base
+ properties.fullname=(properties.fullname or properties.name).."-"..base
+ applied={}
+end
+local function registerbasefeature(feature,value)
+ applied[#applied+1]=feature.."="..tostring(value)
+end
+local function makefake(tfmdata,name,present)
+ local private=getprivate(tfmdata)
+ local character={ intermediate=true,ligatures={} }
+ resources.unicodes[name]=private
+ tfmdata.characters[private]=character
+ tfmdata.descriptions[private]={ name=name }
+ present[name]=private
+ return character
+end
+local function make_1(present,tree,name)
+ for k,v in next,tree do
+ if k=="ligature" then
+ present[name]=v
+ else
+ make_1(present,v,name.."_"..k)
+ end
+ end
+end
+local function make_2(present,tfmdata,characters,tree,name,preceding,unicode,done)
+ for k,v in next,tree do
+ if k=="ligature" then
+ local character=characters[preceding]
+ if not character then
+ if trace_baseinit then
+ report_prepare("weird ligature in lookup %a, current %C, preceding %C",sequence.name,v,preceding)
+ end
+ character=makefake(tfmdata,name,present)
+ end
+ local ligatures=character.ligatures
+ if ligatures then
+ ligatures[unicode]={ char=v }
+ else
+ character.ligatures={ [unicode]={ char=v } }
+ end
+ if done then
+ local d=done[name]
+ if not d then
+ done[name]={ "dummy",v }
+ else
+ d[#d+1]=v
+ end
+ end
+ else
+ local code=present[name] or unicode
+ local name=name.."_"..k
+ make_2(present,tfmdata,characters,v,name,code,k,done)
+ end
+ end
+end
+local function preparesubstitutions(tfmdata,feature,value,validlookups,lookuplist)
+ local characters=tfmdata.characters
+ local descriptions=tfmdata.descriptions
+ local resources=tfmdata.resources
+ local changed=tfmdata.changed
+ local ligatures={}
+ local alternate=tonumber(value) or true and 1
+ local defaultalt=otf.defaultbasealternate
+ local trace_singles=trace_baseinit and trace_singles
+ local trace_alternatives=trace_baseinit and trace_alternatives
+ local trace_ligatures=trace_baseinit and trace_ligatures
+ if not changed then
+ changed={}
+ tfmdata.changed=changed
+ end
+ for i=1,#lookuplist do
+ local sequence=lookuplist[i]
+ local steps=sequence.steps
+ local kind=sequence.type
+ if kind=="gsub_single" then
+ for i=1,#steps do
+ for unicode,data in next,steps[i].coverage do
+ if unicode~=data then
+ changed[unicode]=data
+ end
+ if trace_singles then
+ report_substitution(feature,sequence,descriptions,unicode,data)
+ end
+ end
+ end
+ elseif kind=="gsub_alternate" then
+ for i=1,#steps do
+ for unicode,data in next,steps[i].coverage do
+ local replacement=data[alternate]
+ if replacement then
+ if unicode~=replacement then
+ changed[unicode]=replacement
+ end
+ if trace_alternatives then
+ report_alternate(feature,sequence,descriptions,unicode,replacement,value,"normal")
+ end
+ elseif defaultalt=="first" then
+ replacement=data[1]
+ if unicode~=replacement then
+ changed[unicode]=replacement
+ end
+ if trace_alternatives then
+ report_alternate(feature,sequence,descriptions,unicode,replacement,value,defaultalt)
+ end
+ elseif defaultalt=="last" then
+ replacement=data[#data]
+ if unicode~=replacement then
+ changed[unicode]=replacement
+ end
+ if trace_alternatives then
+ report_alternate(feature,sequence,descriptions,unicode,replacement,value,defaultalt)
+ end
+ else
+ if trace_alternatives then
+ report_alternate(feature,sequence,descriptions,unicode,replacement,value,"unknown")
+ end
+ end
+ end
+ end
+ elseif kind=="gsub_ligature" then
+ for i=1,#steps do
+ for unicode,data in next,steps[i].coverage do
+ ligatures[#ligatures+1]={ unicode,data,"" }
+ if trace_ligatures then
+ report_ligature(feature,sequence,descriptions,unicode,data)
+ end
+ end
+ end
+ end
+ end
+ local nofligatures=#ligatures
+ if nofligatures>0 then
+ local characters=tfmdata.characters
+ local present={}
+ local done=trace_baseinit and trace_ligatures and {}
+ for i=1,nofligatures do
+ local ligature=ligatures[i]
+ local unicode,tree=ligature[1],ligature[2]
+ make_1(present,tree,"ctx_"..unicode)
+ end
+ for i=1,nofligatures do
+ local ligature=ligatures[i]
+ local unicode,tree,lookupname=ligature[1],ligature[2],ligature[3]
+ make_2(present,tfmdata,characters,tree,"ctx_"..unicode,unicode,unicode,done,sequence)
+ end
+ end
+end
+local function preparepositionings(tfmdata,feature,value,validlookups,lookuplist)
+ local characters=tfmdata.characters
+ local descriptions=tfmdata.descriptions
+ local resources=tfmdata.resources
+ local properties=tfmdata.properties
+ local traceindeed=trace_baseinit and trace_kerns
+ for i=1,#lookuplist do
+ local sequence=lookuplist[i]
+ local steps=sequence.steps
+ local kind=sequence.type
+ local format=sequence.format
+ if kind=="gpos_pair" then
+ for i=1,#steps do
+ local step=steps[i]
+ local format=step.format
+ if format=="kern" or format=="move" then
+ for unicode,data in next,steps[i].coverage do
+ local character=characters[unicode]
+ local kerns=character.kerns
+ if not kerns then
+ kerns={}
+ character.kerns=kerns
+ end
+ if traceindeed then
+ for otherunicode,kern in next,data do
+ if not kerns[otherunicode] and kern~=0 then
+ kerns[otherunicode]=kern
+ report_kern(feature,sequence,descriptions,unicode,otherunicode,kern)
+ end
+ end
+ else
+ for otherunicode,kern in next,data do
+ if not kerns[otherunicode] and kern~=0 then
+ kerns[otherunicode]=kern
+ end
+ end
+ end
+ end
+ else
+ for unicode,data in next,steps[i].coverage do
+ local character=characters[unicode]
+ local kerns=character.kerns
+ for otherunicode,kern in next,data do
+ local other=kern[2]
+ if other==true or (not other and not (kerns and kerns[otherunicode])) then
+ local kern=kern[1]
+ if kern==true then
+ elseif kern[1]~=0 or kern[2]~=0 or kern[4]~=0 then
+ else
+ kern=kern[3]
+ if kern~=0 then
+ if kerns then
+ kerns[otherunicode]=kern
+ else
+ kerns={ [otherunicode]=kern }
+ character.kerns=kerns
+ end
+ if traceindeed then
+ report_kern(feature,sequence,descriptions,unicode,otherunicode,kern)
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+end
+local function initializehashes(tfmdata)
+end
+local function checkmathreplacements(tfmdata,fullname)
+ if tfmdata.mathparameters then
+ local characters=tfmdata.characters
+ local changed=tfmdata.changed
+ if next(changed) then
+ if trace_preparing or trace_baseinit then
+ report_prepare("checking math replacements for %a",fullname)
+ end
+ for unicode,replacement in next,changed do
+ local u=characters[unicode]
+ local r=characters[replacement]
+ local n=u.next
+ local v=u.vert_variants
+ local h=u.horiz_variants
+ if n and not r.next then
+ if trace_preparing then
+ report_prepare("forcing %s for %C substituted by %U","incremental step",unicode,replacement)
+ end
+ r.next=n
+ end
+ if v and not r.vert_variants then
+ if trace_preparing then
+ report_prepare("forcing %s for %C substituted by %U","vertical variants",unicode,replacement)
+ end
+ r.vert_variants=v
+ end
+ if h and not r.horiz_variants then
+ if trace_preparing then
+ report_prepare("forcing %s for %C substituted by %U","horizontal variants",unicode,replacement)
+ end
+ r.horiz_variants=h
+ end
+ end
+ end
+ end
+end
+local function featuresinitializer(tfmdata,value)
+ if true then
+ local starttime=trace_preparing and os.clock()
+ local features=tfmdata.shared.features
+ local fullname=tfmdata.properties.fullname or "?"
+ if features then
+ initializehashes(tfmdata)
+ local collectlookups=otf.collectlookups
+ local rawdata=tfmdata.shared.rawdata
+ local properties=tfmdata.properties
+ local script=properties.script
+ local language=properties.language
+ local rawresources=rawdata.resources
+ local rawfeatures=rawresources and rawresources.features
+ local basesubstitutions=rawfeatures and rawfeatures.gsub
+ local basepositionings=rawfeatures and rawfeatures.gpos
+ local substitutionsdone=false
+ local positioningsdone=false
+ if basesubstitutions or basepositionings then
+ local sequences=tfmdata.resources.sequences
+ for s=1,#sequences do
+ local sequence=sequences[s]
+ local sfeatures=sequence.features
+ if sfeatures then
+ local order=sequence.order
+ if order then
+ for i=1,#order do
+ local feature=order[i]
+ local value=features[feature]
+ if value then
+ local validlookups,lookuplist=collectlookups(rawdata,feature,script,language)
+ if not validlookups then
+ elseif basesubstitutions and basesubstitutions[feature] then
+ if trace_preparing then
+ report_prepare("filtering base %s feature %a for %a with value %a","sub",feature,fullname,value)
+ end
+ preparesubstitutions(tfmdata,feature,value,validlookups,lookuplist)
+ registerbasefeature(feature,value)
+ substitutionsdone=true
+ elseif basepositionings and basepositionings[feature] then
+ if trace_preparing then
+ report_prepare("filtering base %a feature %a for %a with value %a","pos",feature,fullname,value)
+ end
+ preparepositionings(tfmdata,feature,value,validlookups,lookuplist)
+ registerbasefeature(feature,value)
+ positioningsdone=true
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ if substitutionsdone then
+ checkmathreplacements(tfmdata,fullname)
+ end
+ registerbasehash(tfmdata)
+ end
+ if trace_preparing then
+ report_prepare("preparation time is %0.3f seconds for %a",os.clock()-starttime,fullname)
+ end
+ end
+end
+registerotffeature {
+ name="features",
+ description="features",
+ default=true,
+ initializers={
+ base=featuresinitializer,
+ }
+}
+otf.basemodeinitializer=featuresinitializer
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-otj']={
+ version=1.001,
+ comment="companion to font-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files",
+}
+if not nodes.properties then return end
+local next,rawget,tonumber=next,rawget,tonumber
+local fastcopy=table.fastcopy
+local registertracker=trackers.register
+local trace_injections=false registertracker("fonts.injections",function(v) trace_injections=v end)
+local trace_marks=false registertracker("fonts.injections.marks",function(v) trace_marks=v end)
+local trace_cursive=false registertracker("fonts.injections.cursive",function(v) trace_cursive=v end)
+local trace_spaces=false registertracker("fonts.injections.spaces",function(v) trace_spaces=v end)
+local report_injections=logs.reporter("fonts","injections")
+local report_spaces=logs.reporter("fonts","spaces")
+local attributes,nodes,node=attributes,nodes,node
+fonts=fonts
+local hashes=fonts.hashes
+local fontdata=hashes.identifiers
+nodes.injections=nodes.injections or {}
+local injections=nodes.injections
+local tracers=nodes.tracers
+local setcolor=tracers and tracers.colors.set
+local resetcolor=tracers and tracers.colors.reset
+local nodecodes=nodes.nodecodes
+local glyph_code=nodecodes.glyph
+local disc_code=nodecodes.disc
+local kern_code=nodecodes.kern
+local glue_code=nodecodes.glue
+local nuts=nodes.nuts
+local nodepool=nuts.pool
+local tonode=nuts.tonode
+local tonut=nuts.tonut
+local setfield=nuts.setfield
+local getnext=nuts.getnext
+local getprev=nuts.getprev
+local getid=nuts.getid
+local getfont=nuts.getfont
+local getchar=nuts.getchar
+local getoffsets=nuts.getoffsets
+local getboth=nuts.getboth
+local getdisc=nuts.getdisc
+local setdisc=nuts.setdisc
+local setoffsets=nuts.setoffsets
+local ischar=nuts.is_char
+local getkern=nuts.getkern
+local setkern=nuts.setkern
+local setlink=nuts.setlink
+local setwidth=nuts.setwidth
+local getwidth=nuts.getwidth
+local traverse_id=nuts.traverse_id
+local traverse_char=nuts.traverse_char
+local insert_node_before=nuts.insert_before
+local insert_node_after=nuts.insert_after
+local properties=nodes.properties.data
+local fontkern=nuts.pool and nuts.pool.fontkern
+local italickern=nuts.pool and nuts.pool.italickern
+local useitalickerns=false
+directives.register("fonts.injections.useitalics",function(v)
+ if v then
+ report_injections("using italics for space kerns (tracing only)")
+ end
+ useitalickerns=v
+end)
+do if not fontkern then
+ local thekern=nuts.new("kern",0)
+ local setkern=nuts.setkern
+ local copy_node=nuts.copy_node
+ fontkern=function(k)
+ local n=copy_node(thekern)
+ setkern(n,k)
+ return n
+ end
+ local thekern=nuts.new("kern",3)
+ local setkern=nuts.setkern
+ local copy_node=nuts.copy_node
+ italickern=function(k)
+ local n=copy_node(thekern)
+ setkern(n,k)
+ return n
+ end
+end end
+function injections.installnewkern() end
+local nofregisteredkerns=0
+local nofregisteredpositions=0
+local nofregisteredmarks=0
+local nofregisteredcursives=0
+local keepregisteredcounts=false
+function injections.keepcounts()
+ keepregisteredcounts=true
+end
+function injections.resetcounts()
+ nofregisteredkerns=0
+ nofregisteredpositions=0
+ nofregisteredmarks=0
+ nofregisteredcursives=0
+ keepregisteredcounts=false
+end
+function injections.reset(n)
+ local p=rawget(properties,n)
+ if p then
+ p.injections=false
+ else
+ properties[n]=false
+ end
+end
+function injections.copy(target,source)
+ local sp=rawget(properties,source)
+ if sp then
+ local tp=rawget(properties,target)
+ local si=sp.injections
+ if si then
+ si=fastcopy(si)
+ if tp then
+ tp.injections=si
+ else
+ properties[target]={
+ injections=si,
+ }
+ end
+ elseif tp then
+ tp.injections=false
+ else
+ properties[target]={ injections={} }
+ end
+ else
+ local tp=rawget(properties,target)
+ if tp then
+ tp.injections=false
+ else
+ properties[target]=false
+ end
+ end
+end
+function injections.setligaindex(n,index)
+ local p=rawget(properties,n)
+ if p then
+ local i=p.injections
+ if i then
+ i.ligaindex=index
+ else
+ p.injections={
+ ligaindex=index
+ }
+ end
+ else
+ properties[n]={
+ injections={
+ ligaindex=index
+ }
+ }
+ end
+end
+function injections.getligaindex(n,default)
+ local p=rawget(properties,n)
+ if p then
+ local i=p.injections
+ if i then
+ return i.ligaindex or default
+ end
+ end
+ return default
+end
+function injections.setcursive(start,nxt,factor,rlmode,exit,entry,tfmstart,tfmnext,r2lflag)
+ local dx=factor*(exit[1]-entry[1])
+ local dy=-factor*(exit[2]-entry[2])
+ local ws=tfmstart.width
+ local wn=tfmnext.width
+ nofregisteredcursives=nofregisteredcursives+1
+ if rlmode<0 then
+ dx=-(dx+wn)
+ else
+ dx=dx-ws
+ end
+ if dx==0 then
+ dx=0
+ end
+ local p=rawget(properties,start)
+ if p then
+ local i=p.injections
+ if i then
+ i.cursiveanchor=true
+ else
+ p.injections={
+ cursiveanchor=true,
+ }
+ end
+ else
+ properties[start]={
+ injections={
+ cursiveanchor=true,
+ },
+ }
+ end
+ local p=rawget(properties,nxt)
+ if p then
+ local i=p.injections
+ if i then
+ i.cursivex=dx
+ i.cursivey=dy
+ else
+ p.injections={
+ cursivex=dx,
+ cursivey=dy,
+ }
+ end
+ else
+ properties[nxt]={
+ injections={
+ cursivex=dx,
+ cursivey=dy,
+ },
+ }
+ end
+ return dx,dy,nofregisteredcursives
+end
+function injections.setposition(kind,current,factor,rlmode,spec,injection)
+ local x=factor*spec[1]
+ local y=factor*spec[2]
+ local w=factor*spec[3]
+ local h=factor*spec[4]
+ if x~=0 or w~=0 or y~=0 or h~=0 then
+ local yoffset=y-h
+ local leftkern=x
+ local rightkern=w-x
+ if leftkern~=0 or rightkern~=0 or yoffset~=0 then
+ nofregisteredpositions=nofregisteredpositions+1
+ if rlmode and rlmode<0 then
+ leftkern,rightkern=rightkern,leftkern
+ end
+ if not injection then
+ injection="injections"
+ end
+ local p=rawget(properties,current)
+ if p then
+ local i=p[injection]
+ if i then
+ if leftkern~=0 then
+ i.leftkern=(i.leftkern or 0)+leftkern
+ end
+ if rightkern~=0 then
+ i.rightkern=(i.rightkern or 0)+rightkern
+ end
+ if yoffset~=0 then
+ i.yoffset=(i.yoffset or 0)+yoffset
+ end
+ elseif leftkern~=0 or rightkern~=0 then
+ p[injection]={
+ leftkern=leftkern,
+ rightkern=rightkern,
+ yoffset=yoffset,
+ }
+ else
+ p[injection]={
+ yoffset=yoffset,
+ }
+ end
+ elseif leftkern~=0 or rightkern~=0 then
+ properties[current]={
+ [injection]={
+ leftkern=leftkern,
+ rightkern=rightkern,
+ yoffset=yoffset,
+ },
+ }
+ else
+ properties[current]={
+ [injection]={
+ yoffset=yoffset,
+ },
+ }
+ end
+ return x,y,w,h,nofregisteredpositions
+ end
+ end
+ return x,y,w,h
+end
+function injections.setkern(current,factor,rlmode,x,injection)
+ local dx=factor*x
+ if dx~=0 then
+ nofregisteredkerns=nofregisteredkerns+1
+ local p=rawget(properties,current)
+ if not injection then
+ injection="injections"
+ end
+ if p then
+ local i=p[injection]
+ if i then
+ i.leftkern=dx+(i.leftkern or 0)
+ else
+ p[injection]={
+ leftkern=dx,
+ }
+ end
+ else
+ properties[current]={
+ [injection]={
+ leftkern=dx,
+ },
+ }
+ end
+ return dx,nofregisteredkerns
+ else
+ return 0,0
+ end
+end
+function injections.setmove(current,factor,rlmode,x,injection)
+ local dx=factor*x
+ if dx~=0 then
+ nofregisteredkerns=nofregisteredkerns+1
+ local p=rawget(properties,current)
+ if not injection then
+ injection="injections"
+ end
+if rlmode and rlmode<0 then
+ if p then
+ local i=p[injection]
+ if i then
+ i.rightkern=dx+(i.rightkern or 0)
+ else
+ p[injection]={
+ rightkern=dx,
+ }
+ end
+ else
+ properties[current]={
+ [injection]={
+ rightkern=dx,
+ },
+ }
+ end
+else
+ if p then
+ local i=p[injection]
+ if i then
+ i.leftkern=dx+(i.leftkern or 0)
+ else
+ p[injection]={
+ leftkern=dx,
+ }
+ end
+ else
+ properties[current]={
+ [injection]={
+ leftkern=dx,
+ },
+ }
+ end
+end
+ return dx,nofregisteredkerns
+ else
+ return 0,0
+ end
+end
+function injections.setmark(start,base,factor,rlmode,ba,ma,tfmbase,mkmk,checkmark)
+ local dx,dy=factor*(ba[1]-ma[1]),factor*(ba[2]-ma[2])
+ nofregisteredmarks=nofregisteredmarks+1
+ if rlmode>=0 then
+ dx=tfmbase.width-dx
+ end
+ local p=rawget(properties,start)
+ if p then
+ local i=p.injections
+ if i then
+ if i.markmark then
+ else
+ i.markx=dx
+ i.marky=dy
+ i.markdir=rlmode or 0
+ i.markbase=nofregisteredmarks
+ i.markbasenode=base
+ i.markmark=mkmk
+ i.checkmark=checkmark
+ end
+ else
+ p.injections={
+ markx=dx,
+ marky=dy,
+ markdir=rlmode or 0,
+ markbase=nofregisteredmarks,
+ markbasenode=base,
+ markmark=mkmk,
+ checkmark=checkmark,
+ }
+ end
+ else
+ properties[start]={
+ injections={
+ markx=dx,
+ marky=dy,
+ markdir=rlmode or 0,
+ markbase=nofregisteredmarks,
+ markbasenode=base,
+ markmark=mkmk,
+ checkmark=checkmark,
+ },
+ }
+ end
+ return dx,dy,nofregisteredmarks
+end
+local function dir(n)
+ return (n and n<0 and "r-to-l") or (n and n>0 and "l-to-r") or "unset"
+end
+local function showchar(n,nested)
+ local char=getchar(n)
+ report_injections("%wfont %s, char %U, glyph %c",nested and 2 or 0,getfont(n),char,char)
+end
+local function show(n,what,nested,symbol)
+ if n then
+ local p=rawget(properties,n)
+ if p then
+ local i=p[what]
+ if i then
+ local leftkern=i.leftkern or 0
+ local rightkern=i.rightkern or 0
+ local yoffset=i.yoffset or 0
+ local markx=i.markx or 0
+ local marky=i.marky or 0
+ local markdir=i.markdir or 0
+ local markbase=i.markbase or 0
+ local cursivex=i.cursivex or 0
+ local cursivey=i.cursivey or 0
+ local ligaindex=i.ligaindex or 0
+ local cursbase=i.cursiveanchor
+ local margin=nested and 4 or 2
+ if rightkern~=0 or yoffset~=0 then
+ report_injections("%w%s pair: lx %p, rx %p, dy %p",margin,symbol,leftkern,rightkern,yoffset)
+ elseif leftkern~=0 then
+ report_injections("%w%s kern: dx %p",margin,symbol,leftkern)
+ end
+ if markx~=0 or marky~=0 or markbase~=0 then
+ report_injections("%w%s mark: dx %p, dy %p, dir %s, base %s",margin,symbol,markx,marky,markdir,markbase~=0 and "yes" or "no")
+ end
+ if cursivex~=0 or cursivey~=0 then
+ if cursbase then
+ report_injections("%w%s curs: base dx %p, dy %p",margin,symbol,cursivex,cursivey)
+ else
+ report_injections("%w%s curs: dx %p, dy %p",margin,symbol,cursivex,cursivey)
+ end
+ elseif cursbase then
+ report_injections("%w%s curs: base",margin,symbol)
+ end
+ if ligaindex~=0 then
+ report_injections("%w%s liga: index %i",margin,symbol,ligaindex)
+ end
+ end
+ end
+ end
+end
+local function showsub(n,what,where)
+ report_injections("begin subrun: %s",where)
+ for n in traverse_char(n) do
+ showchar(n,where)
+ show(n,what,where," ")
+ end
+ report_injections("end subrun")
+end
+local function trace(head,where)
+ report_injections()
+ report_injections("begin run %s: %s kerns, %s positions, %s marks and %s cursives registered",
+ where or "",nofregisteredkerns,nofregisteredpositions,nofregisteredmarks,nofregisteredcursives)
+ local n=head
+ while n do
+ local id=getid(n)
+ if id==glyph_code then
+ showchar(n)
+ show(n,"injections",false," ")
+ show(n,"preinjections",false,"<")
+ show(n,"postinjections",false,">")
+ show(n,"replaceinjections",false,"=")
+ show(n,"emptyinjections",false,"*")
+ elseif id==disc_code then
+ local pre,post,replace=getdisc(n)
+ if pre then
+ showsub(pre,"preinjections","pre")
+ end
+ if post then
+ showsub(post,"postinjections","post")
+ end
+ if replace then
+ showsub(replace,"replaceinjections","replace")
+ end
+ show(n,"emptyinjections",false,"*")
+ end
+ n=getnext(n)
+ end
+ report_injections("end run")
+end
+local function show_result(head)
+ local current=head
+ local skipping=false
+ while current do
+ local id=getid(current)
+ if id==glyph_code then
+ local w=getwidth(current)
+ local x,y=getoffsets(current)
+ report_injections("char: %C, width %p, xoffset %p, yoffset %p",getchar(current),w,x,y)
+ skipping=false
+ elseif id==kern_code then
+ report_injections("kern: %p",getkern(current))
+ skipping=false
+ elseif not skipping then
+ report_injections()
+ skipping=true
+ end
+ current=getnext(current)
+ end
+ report_injections()
+end
+local function inject_kerns_only(head,where)
+ head=tonut(head)
+ if trace_injections then
+ trace(head,"kerns")
+ end
+ local current=head
+ local prev=nil
+ local next=nil
+ local prevdisc=nil
+ local pre=nil
+ local post=nil
+ local replace=nil
+ local pretail=nil
+ local posttail=nil
+ local replacetail=nil
+ while current do
+ local next=getnext(current)
+ local char,id=ischar(current)
+ if char then
+ local p=rawget(properties,current)
+ if p then
+ local i=p.injections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ head=insert_node_before(head,current,fontkern(leftkern))
+ end
+ end
+ if prevdisc then
+ local done=false
+ if post then
+ local i=p.postinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ setlink(posttail,fontkern(leftkern))
+ done=true
+ end
+ end
+ end
+ if replace then
+ local i=p.replaceinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ setlink(replacetail,fontkern(leftkern))
+ done=true
+ end
+ end
+ else
+ local i=p.emptyinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ setfield(prev,"replace",fontkern(leftkern))
+ end
+ end
+ end
+ if done then
+ setdisc(prevdisc,pre,post,replace)
+ end
+ end
+ end
+ prevdisc=nil
+ elseif char==false then
+ prevdisc=nil
+ elseif id==disc_code then
+ pre,post,replace,pretail,posttail,replacetail=getdisc(current,true)
+ local done=false
+ if pre then
+ for n in traverse_char(pre) do
+ local p=rawget(properties,n)
+ if p then
+ local i=p.injections or p.preinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ pre=insert_node_before(pre,n,fontkern(leftkern))
+ done=true
+ end
+ end
+ end
+ end
+ end
+ if post then
+ for n in traverse_char(post) do
+ local p=rawget(properties,n)
+ if p then
+ local i=p.injections or p.postinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ post=insert_node_before(post,n,fontkern(leftkern))
+ done=true
+ end
+ end
+ end
+ end
+ end
+ if replace then
+ for n in traverse_char(replace) do
+ local p=rawget(properties,n)
+ if p then
+ local i=p.injections or p.replaceinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ replace=insert_node_before(replace,n,fontkern(leftkern))
+ done=true
+ end
+ end
+ end
+ end
+ end
+ if done then
+ setdisc(current,pre,post,replace)
+ end
+ prevdisc=current
+ else
+ prevdisc=nil
+ end
+ prev=current
+ current=next
+ end
+ if keepregisteredcounts then
+ keepregisteredcounts=false
+ else
+ nofregisteredkerns=0
+ end
+ if trace_injections then
+ show_result(head)
+ end
+ return tonode(head),true
+end
+local function inject_positions_only(head,where)
+ head=tonut(head)
+ if trace_injections then
+ trace(head,"positions")
+ end
+ local current=head
+ local prev=nil
+ local next=nil
+ local prevdisc=nil
+ local prevglyph=nil
+ local pre=nil
+ local post=nil
+ local replace=nil
+ local pretail=nil
+ local posttail=nil
+ local replacetail=nil
+ while current do
+ local next=getnext(current)
+ local char,id=ischar(current)
+ if char then
+ local p=rawget(properties,current)
+ if p then
+ local i=p.injections
+ if i then
+ local yoffset=i.yoffset
+ if yoffset and yoffset~=0 then
+ setoffsets(current,false,yoffset)
+ end
+ local leftkern=i.leftkern
+ local rightkern=i.rightkern
+ if leftkern and leftkern~=0 then
+if rightkern and leftkern==-rightkern then
+ setoffsets(current,leftkern,false)
+ rightkern=0
+else
+ head=insert_node_before(head,current,fontkern(leftkern))
+end
+ end
+ if rightkern and rightkern~=0 then
+ insert_node_after(head,current,fontkern(rightkern))
+ end
+ else
+ local i=p.emptyinjections
+ if i then
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ if next and getid(next)==disc_code then
+ if replace then
+ else
+ setfield(next,"replace",fontkern(rightkern))
+ end
+ end
+ end
+ end
+ end
+ if prevdisc then
+ local done=false
+ if post then
+ local i=p.postinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ setlink(posttail,fontkern(leftkern))
+ done=true
+ end
+ end
+ end
+ if replace then
+ local i=p.replaceinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ setlink(replacetail,fontkern(leftkern))
+ done=true
+ end
+ end
+ else
+ local i=p.emptyinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ setfield(prev,"replace",fontkern(leftkern))
+ end
+ end
+ end
+ if done then
+ setdisc(prevdisc,pre,post,replace)
+ end
+ end
+ end
+ prevdisc=nil
+ prevglyph=current
+ elseif char==false then
+ prevdisc=nil
+ prevglyph=current
+ elseif id==disc_code then
+ pre,post,replace,pretail,posttail,replacetail=getdisc(current,true)
+ local done=false
+ if pre then
+ for n in traverse_char(pre) do
+ local p=rawget(properties,n)
+ if p then
+ local i=p.injections or p.preinjections
+ if i then
+ local yoffset=i.yoffset
+ if yoffset and yoffset~=0 then
+ setoffsets(n,false,yoffset)
+ end
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ pre=insert_node_before(pre,n,fontkern(leftkern))
+ done=true
+ end
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ insert_node_after(pre,n,fontkern(rightkern))
+ done=true
+ end
+ end
+ end
+ end
+ end
+ if post then
+ for n in traverse_char(post) do
+ local p=rawget(properties,n)
+ if p then
+ local i=p.injections or p.postinjections
+ if i then
+ local yoffset=i.yoffset
+ if yoffset and yoffset~=0 then
+ setoffsets(n,false,yoffset)
+ end
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ post=insert_node_before(post,n,fontkern(leftkern))
+ done=true
+ end
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ insert_node_after(post,n,fontkern(rightkern))
+ done=true
+ end
+ end
+ end
+ end
+ end
+ if replace then
+ for n in traverse_char(replace) do
+ local p=rawget(properties,n)
+ if p then
+ local i=p.injections or p.replaceinjections
+ if i then
+ local yoffset=i.yoffset
+ if yoffset and yoffset~=0 then
+ setoffsets(n,false,yoffset)
+ end
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ replace=insert_node_before(replace,n,fontkern(leftkern))
+ done=true
+ end
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ insert_node_after(replace,n,fontkern(rightkern))
+ done=true
+ end
+ end
+ end
+ end
+ end
+ if prevglyph then
+ if pre then
+ local p=rawget(properties,prevglyph)
+ if p then
+ local i=p.preinjections
+ if i then
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ pre=insert_node_before(pre,pre,fontkern(rightkern))
+ done=true
+ end
+ end
+ end
+ end
+ if replace then
+ local p=rawget(properties,prevglyph)
+ if p then
+ local i=p.replaceinjections
+ if i then
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ replace=insert_node_before(replace,replace,fontkern(rightkern))
+ done=true
+ end
+ end
+ end
+ end
+ end
+ if done then
+ setdisc(current,pre,post,replace)
+ end
+ prevglyph=nil
+ prevdisc=current
+ else
+ prevglyph=nil
+ prevdisc=nil
+ end
+ prev=current
+ current=next
+ end
+ if keepregisteredcounts then
+ keepregisteredcounts=false
+ else
+ nofregisteredpositions=0
+ end
+ if trace_injections then
+ show_result(head)
+ end
+ return tonode(head),true
+end
+local function showoffset(n,flag)
+ local x,y=getoffsets(n)
+ if x~=0 or y~=0 then
+ setcolor(n,"darkgray")
+ end
+end
+local function inject_everything(head,where)
+ head=tonut(head)
+ if trace_injections then
+ trace(head,"everything")
+ end
+ local hascursives=nofregisteredcursives>0
+ local hasmarks=nofregisteredmarks>0
+ local current=head
+ local last=nil
+ local prev=nil
+ local next=nil
+ local prevdisc=nil
+ local prevglyph=nil
+ local pre=nil
+ local post=nil
+ local replace=nil
+ local pretail=nil
+ local posttail=nil
+ local replacetail=nil
+ local cursiveanchor=nil
+ local minc=0
+ local maxc=0
+ local glyphs={}
+ local marks={}
+ local nofmarks=0
+ local function processmark(p,n,pn)
+ local px,py=getoffsets(p)
+ local nx,ny=getoffsets(n)
+ local ox=0
+ local rightkern=nil
+ local pp=rawget(properties,p)
+ if pp then
+ pp=pp.injections
+ if pp then
+ rightkern=pp.rightkern
+ end
+ end
+ if rightkern then
+ if pn.markdir<0 then
+ ox=px-pn.markx-rightkern
+ if not pn.markmark then
+ ox=ox+(pn.leftkern or 0)
+ end
+ else
+ ox=px-pn.markx-rightkern
+ if false then
+ local leftkern=pp.leftkern
+ if leftkern then
+ ox=ox-leftkern
+ end
+ end
+ end
+ else
+ if pn.markdir<0 then
+ ox=px-pn.markx
+ if not pn.markmark then
+ local leftkern=pn.leftkern
+ if leftkern then
+ ox=ox+leftkern
+ end
+ end
+ else
+ ox=px-pn.markx
+ end
+ if pn.checkmark then
+ local wn=getwidth(n)
+ if wn and wn~=0 then
+ wn=wn/2
+ if trace_injections then
+ report_injections("correcting non zero width mark %C",getchar(n))
+ end
+ insert_node_before(n,n,fontkern(-wn))
+ insert_node_after(n,n,fontkern(-wn))
+ end
+ end
+ end
+ local oy=ny+py+pn.marky
+ if not pn.markmark then
+ local yoffset=pn.yoffset
+ if yoffset then
+ oy=oy+yoffset
+ end
+ end
+ setoffsets(n,ox,oy)
+ if trace_marks then
+ showoffset(n,true)
+ end
+ end
+ while current do
+ local next=getnext(current)
+ local char,id=ischar(current)
+ if char then
+ local p=rawget(properties,current)
+ if p then
+ local i=p.injections
+ if i then
+ local pm=i.markbasenode
+ if pm then
+ nofmarks=nofmarks+1
+ marks[nofmarks]=current
+ else
+ local yoffset=i.yoffset
+ if yoffset and yoffset~=0 then
+ setoffsets(current,false,yoffset)
+ end
+ if hascursives then
+ local cursivex=i.cursivex
+ if cursivex then
+ if cursiveanchor then
+ if cursivex~=0 then
+ i.leftkern=(i.leftkern or 0)+cursivex
+ end
+ if maxc==0 then
+ minc=1
+ maxc=1
+ glyphs[1]=cursiveanchor
+ else
+ maxc=maxc+1
+ glyphs[maxc]=cursiveanchor
+ end
+ properties[cursiveanchor].cursivedy=i.cursivey
+ last=current
+ else
+ maxc=0
+ end
+ elseif maxc>0 then
+ local nx,ny=getoffsets(current)
+ for i=maxc,minc,-1 do
+ local ti=glyphs[i]
+ ny=ny+properties[ti].cursivedy
+ setoffsets(ti,false,ny)
+ if trace_cursive then
+ showoffset(ti)
+ end
+ end
+ maxc=0
+ cursiveanchor=nil
+ end
+ if i.cursiveanchor then
+ cursiveanchor=current
+ else
+ if maxc>0 then
+ local nx,ny=getoffsets(current)
+ for i=maxc,minc,-1 do
+ local ti=glyphs[i]
+ ny=ny+properties[ti].cursivedy
+ setoffsets(ti,false,ny)
+ if trace_cursive then
+ showoffset(ti)
+ end
+ end
+ maxc=0
+ end
+ cursiveanchor=nil
+ end
+ end
+ local leftkern=i.leftkern
+ local rightkern=i.rightkern
+ if leftkern and leftkern~=0 then
+if rightkern and leftkern==-rightkern then
+ setoffsets(current,leftkern,false)
+ rightkern=0
+else
+ head=insert_node_before(head,current,fontkern(leftkern))
+end
+ end
+ if rightkern and rightkern~=0 then
+ insert_node_after(head,current,fontkern(rightkern))
+ end
+ end
+ else
+ local i=p.emptyinjections
+ if i then
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ if next and getid(next)==disc_code then
+ if replace then
+ else
+ setfield(next,"replace",fontkern(rightkern))
+ end
+ end
+ end
+ end
+ end
+ if prevdisc then
+ if p then
+ local done=false
+ if post then
+ local i=p.postinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ setlink(posttail,fontkern(leftkern))
+ done=true
+ end
+ end
+ end
+ if replace then
+ local i=p.replaceinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ setlink(replacetail,fontkern(leftkern))
+ done=true
+ end
+ end
+ else
+ local i=p.emptyinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ setfield(prev,"replace",fontkern(leftkern))
+ end
+ end
+ end
+ if done then
+ setdisc(prevdisc,pre,post,replace)
+ end
+ end
+ end
+ else
+ if hascursives and maxc>0 then
+ local nx,ny=getoffsets(current)
+ for i=maxc,minc,-1 do
+ local ti=glyphs[i]
+ ny=ny+properties[ti].cursivedy
+ local xi,yi=getoffsets(ti)
+ setoffsets(ti,xi,yi+ny)
+ end
+ maxc=0
+ cursiveanchor=nil
+ end
+ end
+ prevdisc=nil
+ prevglyph=current
+ elseif char==false then
+ prevdisc=nil
+ prevglyph=current
+ elseif id==disc_code then
+ pre,post,replace,pretail,posttail,replacetail=getdisc(current,true)
+ local done=false
+ if pre then
+ for n in traverse_char(pre) do
+ local p=rawget(properties,n)
+ if p then
+ local i=p.injections or p.preinjections
+ if i then
+ local yoffset=i.yoffset
+ if yoffset and yoffset~=0 then
+ setoffsets(n,false,yoffset)
+ end
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ pre=insert_node_before(pre,n,fontkern(leftkern))
+ done=true
+ end
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ insert_node_after(pre,n,fontkern(rightkern))
+ done=true
+ end
+ if hasmarks then
+ local pm=i.markbasenode
+ if pm then
+ processmark(pm,n,i)
+ end
+ end
+ end
+ end
+ end
+ end
+ if post then
+ for n in traverse_char(post) do
+ local p=rawget(properties,n)
+ if p then
+ local i=p.injections or p.postinjections
+ if i then
+ local yoffset=i.yoffset
+ if yoffset and yoffset~=0 then
+ setoffsets(n,false,yoffset)
+ end
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ post=insert_node_before(post,n,fontkern(leftkern))
+ done=true
+ end
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ insert_node_after(post,n,fontkern(rightkern))
+ done=true
+ end
+ if hasmarks then
+ local pm=i.markbasenode
+ if pm then
+ processmark(pm,n,i)
+ end
+ end
+ end
+ end
+ end
+ end
+ if replace then
+ for n in traverse_char(replace) do
+ local p=rawget(properties,n)
+ if p then
+ local i=p.injections or p.replaceinjections
+ if i then
+ local yoffset=i.yoffset
+ if yoffset and yoffset~=0 then
+ setoffsets(n,false,yoffset)
+ end
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ replace=insert_node_before(replace,n,fontkern(leftkern))
+ done=true
+ end
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ insert_node_after(replace,n,fontkern(rightkern))
+ done=true
+ end
+ if hasmarks then
+ local pm=i.markbasenode
+ if pm then
+ processmark(pm,n,i)
+ end
+ end
+ end
+ end
+ end
+ end
+ if prevglyph then
+ if pre then
+ local p=rawget(properties,prevglyph)
+ if p then
+ local i=p.preinjections
+ if i then
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ pre=insert_node_before(pre,pre,fontkern(rightkern))
+ done=true
+ end
+ end
+ end
+ end
+ if replace then
+ local p=rawget(properties,prevglyph)
+ if p then
+ local i=p.replaceinjections
+ if i then
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ replace=insert_node_before(replace,replace,fontkern(rightkern))
+ done=true
+ end
+ end
+ end
+ end
+ end
+ if done then
+ setdisc(current,pre,post,replace)
+ end
+ prevglyph=nil
+ prevdisc=current
+ else
+ prevglyph=nil
+ prevdisc=nil
+ end
+ prev=current
+ current=next
+ end
+ if hascursives and maxc>0 then
+ local nx,ny=getoffsets(last)
+ for i=maxc,minc,-1 do
+ local ti=glyphs[i]
+ ny=ny+properties[ti].cursivedy
+ setoffsets(ti,false,ny)
+ if trace_cursive then
+ showoffset(ti)
+ end
+ end
+ end
+ if nofmarks>0 then
+ for i=1,nofmarks do
+ local m=marks[i]
+ local p=rawget(properties,m)
+ local i=p.injections
+ local b=i.markbasenode
+ processmark(b,m,i)
+ end
+ elseif hasmarks then
+ end
+ if keepregisteredcounts then
+ keepregisteredcounts=false
+ else
+ nofregisteredkerns=0
+ nofregisteredpositions=0
+ nofregisteredmarks=0
+ nofregisteredcursives=0
+ end
+ if trace_injections then
+ show_result(head)
+ end
+ return tonode(head),true
+end
+local triggers=false
+function nodes.injections.setspacekerns(font,sequence)
+ if triggers then
+ triggers[font]=sequence
+ else
+ triggers={ [font]=sequence }
+ end
+end
+local getthreshold
+if context then
+ local threshold=1
+ local parameters=fonts.hashes.parameters
+ directives.register("otf.threshold",function(v) threshold=tonumber(v) or 1 end)
+ getthreshold=function(font)
+ local p=parameters[font]
+ local f=p.factor
+ local s=p.spacing
+ local t=threshold*(s and s.width or p.space or 0)-2
+ return t>0 and t or 0,f
+ end
+else
+ injections.threshold=0
+ getthreshold=function(font)
+ local p=fontdata[font].parameters
+ local f=p.factor
+ local s=p.spacing
+ local t=injections.threshold*(s and s.width or p.space or 0)-2
+ return t>0 and t or 0,f
+ end
+end
+injections.getthreshold=getthreshold
+function injections.isspace(n,threshold,id)
+ if (id or getid(n))==glue_code then
+ local w=getwidth(n)
+ if threshold and w>threshold then
+ return 32
+ end
+ end
+end
+local getspaceboth=getboth
+function injections.installgetspaceboth(gb)
+ getspaceboth=gb or getboth
+end
+local function injectspaces(head)
+ if not triggers then
+ return head,false
+ end
+ local lastfont=nil
+ local spacekerns=nil
+ local leftkerns=nil
+ local rightkerns=nil
+ local factor=0
+ local threshold=0
+ local leftkern=false
+ local rightkern=false
+ local nuthead=tonut(head)
+ local function updatefont(font,trig)
+ leftkerns=trig.left
+ rightkerns=trig.right
+ lastfont=font
+ threshold,
+ factor=getthreshold(font)
+ end
+ for n in traverse_id(glue_code,nuthead) do
+ local prev,next=getspaceboth(n)
+ local prevchar=prev and ischar(prev)
+ local nextchar=next and ischar(next)
+ if nextchar then
+ local font=getfont(next)
+ local trig=triggers[font]
+ if trig then
+ if lastfont~=font then
+ updatefont(font,trig)
+ end
+ if rightkerns then
+ rightkern=rightkerns[nextchar]
+ end
+ end
+ end
+ if prevchar then
+ local font=getfont(prev)
+ local trig=triggers[font]
+ if trig then
+ if lastfont~=font then
+ updatefont(font,trig)
+ end
+ if leftkerns then
+ leftkern=leftkerns[prevchar]
+ end
+ end
+ end
+ if leftkern then
+ local old=getwidth(n)
+ if old>threshold then
+ if rightkern then
+ if useitalickerns then
+ local new=old+(leftkern+rightkern)*factor
+ if trace_spaces then
+ report_spaces("%C [%p -> %p] %C",prevchar,old,new,nextchar)
+ end
+ setwidth(n,new)
+ else
+ local new=(leftkern+rightkern)*factor
+ if trace_spaces then
+ report_spaces("%C [%p + %p] %C",prevchar,old,new,nextchar)
+ end
+ local h=insert_node_before(nuthead,n,italickern(new))
+ if h==nuthead then
+ head=tonode(h)
+ nuthead=h
+ end
+ end
+ leftkern=false
+ else
+ if useitalickerns then
+ local new=leftkern*factor
+ if trace_spaces then
+ report_spaces("%C [%p + %p]",prevchar,old,new)
+ end
+ insert_node_after(nuthead,n,italickern(new))
+ else
+ local new=old+leftkern*factor
+ if trace_spaces then
+ report_spaces("%C [%p -> %p]",prevchar,old,new)
+ end
+ setwidth(n,new)
+ end
+ end
+ end
+ leftkern=false
+ elseif rightkern then
+ local old=getwidth(n)
+ if old>threshold then
+ local new=old+rightkern*factor
+ if trace_spaces then
+ report_spaces("[%p -> %p] %C",nextchar,old,new)
+ end
+ setwidth(n,new)
+ end
+ rightkern=false
+ end
+ end
+ triggers=false
+ return head,true
+end
+function injections.handler(head,where)
+ if triggers then
+ head=injectspaces(head)
+ end
+ if nofregisteredmarks>0 or nofregisteredcursives>0 then
+ if trace_injections then
+ report_injections("injection variant %a","everything")
+ end
+ return inject_everything(head,where)
+ elseif nofregisteredpositions>0 then
+ if trace_injections then
+ report_injections("injection variant %a","positions")
+ end
+ return inject_positions_only(head,where)
+ elseif nofregisteredkerns>0 then
+ if trace_injections then
+ report_injections("injection variant %a","kerns")
+ end
+ return inject_kerns_only(head,where)
+ else
+ return head,false
+ end
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-ota']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local type=type
+if not trackers then trackers={ register=function() end } end
+local fonts,nodes,node=fonts,nodes,node
+local allocate=utilities.storage.allocate
+local otf=fonts.handlers.otf
+local analyzers=fonts.analyzers
+local initializers=allocate()
+local methods=allocate()
+analyzers.initializers=initializers
+analyzers.methods=methods
+local a_state=attributes.private('state')
+local nuts=nodes.nuts
+local tonut=nuts.tonut
+local getnext=nuts.getnext
+local getprev=nuts.getprev
+local getprev=nuts.getprev
+local getprop=nuts.getprop
+local setprop=nuts.setprop
+local getfont=nuts.getfont
+local getsubtype=nuts.getsubtype
+local getchar=nuts.getchar
+local ischar=nuts.is_char
+local traverse_id=nuts.traverse_id
+local end_of_math=nuts.end_of_math
+local nodecodes=nodes.nodecodes
+local disc_code=nodecodes.disc
+local math_code=nodecodes.math
+local fontdata=fonts.hashes.identifiers
+local categories=characters and characters.categories or {}
+local chardata=characters and characters.data
+local otffeatures=fonts.constructors.features.otf
+local registerotffeature=otffeatures.register
+local s_init=1 local s_rphf=7
+local s_medi=2 local s_half=8
+local s_fina=3 local s_pref=9
+local s_isol=4 local s_blwf=10
+local s_mark=5 local s_pstf=11
+local s_rest=6
+local states={
+ init=s_init,
+ medi=s_medi,
+ med2=s_medi,
+ fina=s_fina,
+ fin2=s_fina,
+ fin3=s_fina,
+ isol=s_isol,
+ mark=s_mark,
+ rest=s_rest,
+ rphf=s_rphf,
+ half=s_half,
+ pref=s_pref,
+ blwf=s_blwf,
+ pstf=s_pstf,
+}
+local features={
+ init=s_init,
+ medi=s_medi,
+ med2=s_medi,
+ fina=s_fina,
+ fin2=s_fina,
+ fin3=s_fina,
+ isol=s_isol,
+ rphf=s_rphf,
+ half=s_half,
+ pref=s_pref,
+ blwf=s_blwf,
+ pstf=s_pstf,
+}
+analyzers.states=states
+analyzers.features=features
+analyzers.useunicodemarks=false
+function analyzers.setstate(head,font)
+ local useunicodemarks=analyzers.useunicodemarks
+ local tfmdata=fontdata[font]
+ local descriptions=tfmdata.descriptions
+ local first,last,current,n,done=nil,nil,head,0,false
+ current=tonut(current)
+ while current do
+ local char,id=ischar(current,font)
+ if char and not getprop(current,a_state) then
+ done=true
+ local d=descriptions[char]
+ if d then
+ if d.class=="mark" then
+ done=true
+ setprop(current,a_state,s_mark)
+ elseif useunicodemarks and categories[char]=="mn" then
+ done=true
+ setprop(current,a_state,s_mark)
+ elseif n==0 then
+ first,last,n=current,current,1
+ setprop(current,a_state,s_init)
+ else
+ last,n=current,n+1
+ setprop(current,a_state,s_medi)
+ end
+ else
+ if first and first==last then
+ setprop(last,a_state,s_isol)
+ elseif last then
+ setprop(last,a_state,s_fina)
+ end
+ first,last,n=nil,nil,0
+ end
+ elseif char==false then
+ if first and first==last then
+ setprop(last,a_state,s_isol)
+ elseif last then
+ setprop(last,a_state,s_fina)
+ end
+ first,last,n=nil,nil,0
+ if id==math_code then
+ current=end_of_math(current)
+ end
+ elseif id==disc_code then
+ setprop(current,a_state,s_medi)
+ last=current
+ else
+ if first and first==last then
+ setprop(last,a_state,s_isol)
+ elseif last then
+ setprop(last,a_state,s_fina)
+ end
+ first,last,n=nil,nil,0
+ if id==math_code then
+ current=end_of_math(current)
+ end
+ end
+ current=getnext(current)
+ end
+ if first and first==last then
+ setprop(last,a_state,s_isol)
+ elseif last then
+ setprop(last,a_state,s_fina)
+ end
+ return head,done
+end
+local function analyzeinitializer(tfmdata,value)
+ local script,language=otf.scriptandlanguage(tfmdata)
+ local action=initializers[script]
+ if not action then
+ elseif type(action)=="function" then
+ return action(tfmdata,value)
+ else
+ local action=action[language]
+ if action then
+ return action(tfmdata,value)
+ end
+ end
+end
+local function analyzeprocessor(head,font,attr)
+ local tfmdata=fontdata[font]
+ local script,language=otf.scriptandlanguage(tfmdata,attr)
+ local action=methods[script]
+ if not action then
+ elseif type(action)=="function" then
+ return action(head,font,attr)
+ else
+ action=action[language]
+ if action then
+ return action(head,font,attr)
+ end
+ end
+ return head,false
+end
+registerotffeature {
+ name="analyze",
+ description="analysis of character classes",
+ default=true,
+ initializers={
+ node=analyzeinitializer,
+ },
+ processors={
+ position=1,
+ node=analyzeprocessor,
+ }
+}
+methods.latn=analyzers.setstate
+local arab_warned={}
+local function warning(current,what)
+ local char=getchar(current)
+ if not arab_warned[char] then
+ log.report("analyze","arab: character %C has no %a class",char,what)
+ arab_warned[char]=true
+ end
+end
+local mappers={
+ l=s_init,
+ d=s_medi,
+ c=s_medi,
+ r=s_fina,
+ u=s_isol,
+}
+local classifiers=characters.classifiers
+if not classifiers then
+ local f_arabic,l_arabic=characters.blockrange("arabic")
+ local f_syriac,l_syriac=characters.blockrange("syriac")
+ local f_mandiac,l_mandiac=characters.blockrange("mandiac")
+ local f_nko,l_nko=characters.blockrange("nko")
+ local f_ext_a,l_ext_a=characters.blockrange("arabicextendeda")
+ classifiers=table.setmetatableindex(function(t,k)
+ if type(k)=="number" then
+ local c=chardata[k]
+ local v=false
+ if c then
+ local arabic=c.arabic
+ if arabic then
+ v=mappers[arabic]
+ if not v then
+ log.report("analyze","error in mapping arabic %C",k)
+ v=false
+ end
+ elseif (k>=f_arabic and k<=l_arabic) or
+ (k>=f_syriac and k<=l_syriac) or
+ (k>=f_mandiac and k<=l_mandiac) or
+ (k>=f_nko and k<=l_nko) or
+ (k>=f_ext_a and k<=l_ext_a) then
+ if categories[k]=="mn" then
+ v=s_mark
+ else
+ v=s_rest
+ end
+ end
+ end
+ t[k]=v
+ return v
+ end
+ end)
+ characters.classifiers=classifiers
+end
+function methods.arab(head,font,attr)
+ local first,last=nil,nil
+ local c_first,c_last=nil,nil
+ local current,done=head,false
+ current=tonut(current)
+ while current do
+ local char,id=ischar(current,font)
+ if char and not getprop(current,a_state) then
+ done=true
+ local classifier=classifiers[char]
+ if not classifier then
+ if last then
+ if c_last==s_medi or c_last==s_fina then
+ setprop(last,a_state,s_fina)
+ else
+ warning(last,"fina")
+ setprop(last,a_state,s_error)
+ end
+ first,last=nil,nil
+ elseif first then
+ if c_first==s_medi or c_first==s_fina then
+ setprop(first,a_state,s_isol)
+ else
+ warning(first,"isol")
+ setprop(first,a_state,s_error)
+ end
+ first=nil
+ end
+ elseif classifier==s_mark then
+ setprop(current,a_state,s_mark)
+ elseif classifier==s_isol then
+ if last then
+ if c_last==s_medi or c_last==s_fina then
+ setprop(last,a_state,s_fina)
+ else
+ warning(last,"fina")
+ setprop(last,a_state,s_error)
+ end
+ first,last=nil,nil
+ elseif first then
+ if c_first==s_medi or c_first==s_fina then
+ setprop(first,a_state,s_isol)
+ else
+ warning(first,"isol")
+ setprop(first,a_state,s_error)
+ end
+ first=nil
+ end
+ setprop(current,a_state,s_isol)
+ elseif classifier==s_medi then
+ if first then
+ last=current
+ c_last=classifier
+ setprop(current,a_state,s_medi)
+ else
+ setprop(current,a_state,s_init)
+ first=current
+ c_first=classifier
+ end
+ elseif classifier==s_fina then
+ if last then
+ if getprop(last,a_state)~=s_init then
+ setprop(last,a_state,s_medi)
+ end
+ setprop(current,a_state,s_fina)
+ first,last=nil,nil
+ elseif first then
+ setprop(current,a_state,s_fina)
+ first=nil
+ else
+ setprop(current,a_state,s_isol)
+ end
+ else
+ setprop(current,a_state,s_rest)
+ if last then
+ if c_last==s_medi or c_last==s_fina then
+ setprop(last,a_state,s_fina)
+ else
+ warning(last,"fina")
+ setprop(last,a_state,s_error)
+ end
+ first,last=nil,nil
+ elseif first then
+ if c_first==s_medi or c_first==s_fina then
+ setprop(first,a_state,s_isol)
+ else
+ warning(first,"isol")
+ setprop(first,a_state,s_error)
+ end
+ first=nil
+ end
+ end
+ else
+ if last then
+ if c_last==s_medi or c_last==s_fina then
+ setprop(last,a_state,s_fina)
+ else
+ warning(last,"fina")
+ setprop(last,a_state,s_error)
+ end
+ first,last=nil,nil
+ elseif first then
+ if c_first==s_medi or c_first==s_fina then
+ setprop(first,a_state,s_isol)
+ else
+ warning(first,"isol")
+ setprop(first,a_state,s_error)
+ end
+ first=nil
+ end
+ if id==math_code then
+ current=end_of_math(current)
+ end
+ end
+ current=getnext(current)
+ end
+ if last then
+ if c_last==s_medi or c_last==s_fina then
+ setprop(last,a_state,s_fina)
+ else
+ warning(last,"fina")
+ setprop(last,a_state,s_error)
+ end
+ elseif first then
+ if c_first==s_medi or c_first==s_fina then
+ setprop(first,a_state,s_isol)
+ else
+ warning(first,"isol")
+ setprop(first,a_state,s_error)
+ end
+ end
+ return head,done
+end
+methods.syrc=methods.arab
+methods.mand=methods.arab
+methods.nko=methods.arab
+directives.register("otf.analyze.useunicodemarks",function(v)
+ analyzers.useunicodemarks=v
+end)
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-ots']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files",
+}
+local type,next,tonumber=type,next,tonumber
+local random=math.random
+local formatters=string.formatters
+local insert=table.insert
+local registertracker=trackers.register
+local logs=logs
+local trackers=trackers
+local nodes=nodes
+local attributes=attributes
+local fonts=fonts
+local otf=fonts.handlers.otf
+local tracers=nodes.tracers
+local trace_singles=false registertracker("otf.singles",function(v) trace_singles=v end)
+local trace_multiples=false registertracker("otf.multiples",function(v) trace_multiples=v end)
+local trace_alternatives=false registertracker("otf.alternatives",function(v) trace_alternatives=v end)
+local trace_ligatures=false registertracker("otf.ligatures",function(v) trace_ligatures=v end)
+local trace_contexts=false registertracker("otf.contexts",function(v) trace_contexts=v end)
+local trace_marks=false registertracker("otf.marks",function(v) trace_marks=v end)
+local trace_kerns=false registertracker("otf.kerns",function(v) trace_kerns=v end)
+local trace_cursive=false registertracker("otf.cursive",function(v) trace_cursive=v end)
+local trace_preparing=false registertracker("otf.preparing",function(v) trace_preparing=v end)
+local trace_bugs=false registertracker("otf.bugs",function(v) trace_bugs=v end)
+local trace_details=false registertracker("otf.details",function(v) trace_details=v end)
+local trace_steps=false registertracker("otf.steps",function(v) trace_steps=v end)
+local trace_skips=false registertracker("otf.skips",function(v) trace_skips=v end)
+local trace_directions=false registertracker("otf.directions",function(v) trace_directions=v end)
+local trace_plugins=false registertracker("otf.plugins",function(v) trace_plugins=v end)
+local trace_chains=false registertracker("otf.chains",function(v) trace_chains=v end)
+local trace_kernruns=false registertracker("otf.kernruns",function(v) trace_kernruns=v end)
+local trace_discruns=false registertracker("otf.discruns",function(v) trace_discruns=v end)
+local trace_compruns=false registertracker("otf.compruns",function(v) trace_compruns=v end)
+local trace_testruns=false registertracker("otf.testruns",function(v) trace_testruns=v end)
+local forcediscretionaries=false
+local forcepairadvance=false
+directives.register("otf.forcediscretionaries",function(v)
+ forcediscretionaries=v
+end)
+directives.register("otf.forcepairadvance",function(v)
+ forcepairadvance=v
+end)
+local report_direct=logs.reporter("fonts","otf direct")
+local report_subchain=logs.reporter("fonts","otf subchain")
+local report_chain=logs.reporter("fonts","otf chain")
+local report_process=logs.reporter("fonts","otf process")
+local report_warning=logs.reporter("fonts","otf warning")
+local report_run=logs.reporter("fonts","otf run")
+registertracker("otf.substitutions","otf.singles","otf.multiples","otf.alternatives","otf.ligatures")
+registertracker("otf.positions","otf.marks","otf.kerns","otf.cursive")
+registertracker("otf.actions","otf.substitutions","otf.positions")
+registertracker("otf.sample","otf.steps","otf.substitutions","otf.positions","otf.analyzing")
+registertracker("otf.sample.silent","otf.steps=silent","otf.substitutions","otf.positions","otf.analyzing")
+local nuts=nodes.nuts
+local tonode=nuts.tonode
+local tonut=nuts.tonut
+local getfield=nuts.getfield
+local getnext=nuts.getnext
+local setnext=nuts.setnext
+local getprev=nuts.getprev
+local setprev=nuts.setprev
+local getboth=nuts.getboth
+local setboth=nuts.setboth
+local getid=nuts.getid
+local getattr=nuts.getattr
+local setattr=nuts.setattr
+local getprop=nuts.getprop
+local setprop=nuts.setprop
+local getfont=nuts.getfont
+local getsubtype=nuts.getsubtype
+local setsubtype=nuts.setsubtype
+local getchar=nuts.getchar
+local setchar=nuts.setchar
+local getdisc=nuts.getdisc
+local setdisc=nuts.setdisc
+local setlink=nuts.setlink
+local getcomponents=nuts.getcomponents
+local setcomponents=nuts.setcomponents
+local getdir=nuts.getdir
+local getwidth=nuts.getwidth
+local ischar=nuts.is_char
+local usesfont=nuts.uses_font
+local insert_node_after=nuts.insert_after
+local copy_node=nuts.copy
+local copy_node_list=nuts.copy_list
+local remove_node=nuts.remove
+local find_node_tail=nuts.tail
+local flush_node_list=nuts.flush_list
+local flush_node=nuts.flush_node
+local end_of_math=nuts.end_of_math
+local traverse_nodes=nuts.traverse
+local set_components=nuts.set_components
+local take_components=nuts.take_components
+local count_components=nuts.count_components
+local copy_no_components=nuts.copy_no_components
+local copy_only_glyphs=nuts.copy_only_glyphs
+local setmetatable=setmetatable
+local setmetatableindex=table.setmetatableindex
+local nodecodes=nodes.nodecodes
+local glyphcodes=nodes.glyphcodes
+local disccodes=nodes.disccodes
+local glyph_code=nodecodes.glyph
+local glue_code=nodecodes.glue
+local disc_code=nodecodes.disc
+local math_code=nodecodes.math
+local dir_code=nodecodes.dir
+local localpar_code=nodecodes.localpar
+local discretionary_code=disccodes.discretionary
+local ligature_code=glyphcodes.ligature
+local a_state=attributes.private('state')
+local a_noligature=attributes.private("noligature")
+local injections=nodes.injections
+local setmark=injections.setmark
+local setcursive=injections.setcursive
+local setkern=injections.setkern
+local setmove=injections.setmove
+local setposition=injections.setposition
+local resetinjection=injections.reset
+local copyinjection=injections.copy
+local setligaindex=injections.setligaindex
+local getligaindex=injections.getligaindex
+local fontdata=fonts.hashes.identifiers
+local fontfeatures=fonts.hashes.features
+local otffeatures=fonts.constructors.features.otf
+local registerotffeature=otffeatures.register
+local onetimemessage=fonts.loggers.onetimemessage or function() end
+local getrandom=utilities and utilities.randomizer and utilities.randomizer.get
+otf.defaultnodealternate="none"
+local tfmdata=false
+local characters=false
+local descriptions=false
+local marks=false
+local classes=false
+local currentfont=false
+local factor=0
+local threshold=0
+local checkmarks=false
+local discs=false
+local spaces=false
+local sweepnode=nil
+local sweephead={}
+local notmatchpre={}
+local notmatchpost={}
+local notmatchreplace={}
+local handlers={}
+local isspace=injections.isspace
+local getthreshold=injections.getthreshold
+local checkstep=(tracers and tracers.steppers.check) or function() end
+local registerstep=(tracers and tracers.steppers.register) or function() end
+local registermessage=(tracers and tracers.steppers.message) or function() end
+local function logprocess(...)
+ if trace_steps then
+ registermessage(...)
+ if trace_steps=="silent" then
+ return
+ end
+ end
+ report_direct(...)
+end
+local function logwarning(...)
+ report_direct(...)
+end
+local gref do
+ local f_unicode=formatters["U+%X"]
+ local f_uniname=formatters["U+%X (%s)"]
+ local f_unilist=formatters["% t (% t)"]
+ gref=function(n)
+ if type(n)=="number" then
+ local description=descriptions[n]
+ local name=description and description.name
+ if name then
+ return f_uniname(n,name)
+ else
+ return f_unicode(n)
+ end
+ elseif n then
+ local num,nam={},{}
+ for i=1,#n do
+ local ni=n[i]
+ if tonumber(ni) then
+ local di=descriptions[ni]
+ num[i]=f_unicode(ni)
+ nam[i]=di and di.name or "-"
+ end
+ end
+ return f_unilist(num,nam)
+ else
+ return "<error in node mode tracing>"
+ end
+ end
+end
+local function cref(dataset,sequence,index)
+ if not dataset then
+ return "no valid dataset"
+ end
+ local merged=sequence.merged and "merged " or ""
+ if index then
+ return formatters["feature %a, type %a, %schain lookup %a, index %a"](
+ dataset[4],sequence.type,merged,sequence.name,index)
+ else
+ return formatters["feature %a, type %a, %schain lookup %a"](
+ dataset[4],sequence.type,merged,sequence.name)
+ end
+end
+local function pref(dataset,sequence)
+ return formatters["feature %a, type %a, %slookup %a"](
+ dataset[4],sequence.type,sequence.merged and "merged " or "",sequence.name)
+end
+local function mref(rlmode)
+ if not rlmode or rlmode==0 then
+ return "---"
+ elseif rlmode==-1 or rlmode=="+TRT" then
+ return "r2l"
+ else
+ return "l2r"
+ end
+end
+local function flattendisk(head,disc)
+ local pre,post,replace,pretail,posttail,replacetail=getdisc(disc,true)
+ local prev,next=getboth(disc)
+ local ishead=head==disc
+ setdisc(disc)
+ flush_node(disc)
+ if pre then
+ flush_node_list(pre)
+ end
+ if post then
+ flush_node_list(post)
+ end
+ if ishead then
+ if replace then
+ if next then
+ setlink(replacetail,next)
+ end
+ return replace,replace
+ elseif next then
+ return next,next
+ else
+ end
+ else
+ if replace then
+ if next then
+ setlink(replacetail,next)
+ end
+ setlink(prev,replace)
+ return head,replace
+ else
+ setlink(prev,next)
+ return head,next
+ end
+ end
+end
+local function appenddisc(disc,list)
+ local pre,post,replace,pretail,posttail,replacetail=getdisc(disc,true)
+ local posthead=list
+ local replacehead=copy_node_list(list)
+ if post then
+ setlink(posttail,posthead)
+ else
+ post=posthead
+ end
+ if replace then
+ setlink(replacetail,replacehead)
+ else
+ replace=replacehead
+ end
+ setdisc(disc,pre,post,replace)
+end
+local take_components=getcomponents
+local set_components=setcomponents
+local function count_components(start,marks)
+ if getid(start)~=glyph_code then
+ return 0
+ elseif getsubtype(start)==ligature_code then
+ local i=0
+ local components=getcomponents(start)
+ while components do
+ i=i+count_components(components,marks)
+ components=getnext(components)
+ end
+ return i
+ elseif not marks[getchar(start)] then
+ return 1
+ else
+ return 0
+ end
+end
+local function markstoligature(head,start,stop,char)
+ if start==stop and getchar(start)==char then
+ return head,start
+ else
+ local prev=getprev(start)
+ local next=getnext(stop)
+ setprev(start)
+ setnext(stop)
+ local base=copy_no_components(start,copyinjection)
+ if head==start then
+ head=base
+ end
+ resetinjection(base)
+ setchar(base,char)
+ setsubtype(base,ligature_code)
+ set_components(base,start)
+ setlink(prev,base,next)
+ return head,base
+ end
+end
+local function toligature(head,start,stop,char,dataset,sequence,skiphash,discfound,hasmarks)
+ if getattr(start,a_noligature)==1 then
+ return head,start
+ end
+ if start==stop and getchar(start)==char then
+ resetinjection(start)
+ setchar(start,char)
+ return head,start
+ end
+ local prev=getprev(start)
+ local next=getnext(stop)
+ local comp=start
+ setprev(start)
+ setnext(stop)
+ local base=copy_no_components(start,copyinjection)
+ if start==head then
+ head=base
+ end
+ resetinjection(base)
+ setchar(base,char)
+ setsubtype(base,ligature_code)
+ set_components(base,comp)
+ setlink(prev,base,next)
+ if not discfound then
+ local deletemarks=not skiphash or hasmarks
+ local components=start
+ local baseindex=0
+ local componentindex=0
+ local head=base
+ local current=base
+ while start do
+ local char=getchar(start)
+ if not marks[char] then
+ baseindex=baseindex+componentindex
+ componentindex=count_components(start,marks)
+ elseif not deletemarks then
+ setligaindex(start,baseindex+getligaindex(start,componentindex))
+ if trace_marks then
+ logwarning("%s: keep mark %s, gets index %s",pref(dataset,sequence),gref(char),getligaindex(start))
+ end
+ local n=copy_node(start)
+ copyinjection(n,start)
+ head,current=insert_node_after(head,current,n)
+ elseif trace_marks then
+ logwarning("%s: delete mark %s",pref(dataset,sequence),gref(char))
+ end
+ start=getnext(start)
+ end
+ local start=getnext(current)
+ while start do
+ local char=ischar(start)
+ if char then
+ if marks[char] then
+ setligaindex(start,baseindex+getligaindex(start,componentindex))
+ if trace_marks then
+ logwarning("%s: set mark %s, gets index %s",pref(dataset,sequence),gref(char),getligaindex(start))
+ end
+ start=getnext(start)
+ else
+ break
+ end
+ else
+ break
+ end
+ end
+ else
+ local discprev,discnext=getboth(discfound)
+ if discprev and discnext then
+ local pre,post,replace,pretail,posttail,replacetail=getdisc(discfound,true)
+ if not replace then
+ local prev=getprev(base)
+ local comp=take_components(base)
+ local copied=copy_only_glyphs(comp)
+ if pre then
+ setlink(discprev,pre)
+ else
+ setnext(discprev)
+ end
+ pre=comp
+ if post then
+ setlink(posttail,discnext)
+ setprev(post)
+ else
+ post=discnext
+ setprev(discnext)
+ end
+ setlink(prev,discfound,next)
+ setboth(base)
+ set_components(base,copied)
+ replace=base
+ if forcediscretionaries then
+ setdisc(discfound,pre,post,replace,discretionary_code)
+ else
+ setdisc(discfound,pre,post,replace)
+ end
+ base=prev
+ end
+ end
+ end
+ return head,base
+end
+local function multiple_glyphs(head,start,multiple,skiphash,what)
+ local nofmultiples=#multiple
+ if nofmultiples>0 then
+ resetinjection(start)
+ setchar(start,multiple[1])
+ if nofmultiples>1 then
+ local sn=getnext(start)
+ for k=2,nofmultiples do
+ local n=copy_node(start)
+ resetinjection(n)
+ setchar(n,multiple[k])
+ insert_node_after(head,start,n)
+ start=n
+ end
+ if what==true then
+ elseif what>1 then
+ local m=multiple[nofmultiples]
+ for i=2,what do
+ local n=copy_node(start)
+ resetinjection(n)
+ setchar(n,m)
+ insert_node_after(head,start,n)
+ start=n
+ end
+ end
+ end
+ return head,start,true
+ else
+ if trace_multiples then
+ logprocess("no multiple for %s",gref(getchar(start)))
+ end
+ return head,start,false
+ end
+end
+local function get_alternative_glyph(start,alternatives,value)
+ local n=#alternatives
+ if n==1 then
+ return alternatives[1],trace_alternatives and "1 (only one present)"
+ elseif value=="random" then
+ local r=getrandom and getrandom("glyph",1,n) or random(1,n)
+ return alternatives[r],trace_alternatives and formatters["value %a, taking %a"](value,r)
+ elseif value=="first" then
+ return alternatives[1],trace_alternatives and formatters["value %a, taking %a"](value,1)
+ elseif value=="last" then
+ return alternatives[n],trace_alternatives and formatters["value %a, taking %a"](value,n)
+ end
+ value=value==true and 1 or tonumber(value)
+ if type(value)~="number" then
+ return alternatives[1],trace_alternatives and formatters["invalid value %s, taking %a"](value,1)
+ end
+ if value>n then
+ local defaultalt=otf.defaultnodealternate
+ if defaultalt=="first" then
+ return alternatives[n],trace_alternatives and formatters["invalid value %s, taking %a"](value,1)
+ elseif defaultalt=="last" then
+ return alternatives[1],trace_alternatives and formatters["invalid value %s, taking %a"](value,n)
+ else
+ return false,trace_alternatives and formatters["invalid value %a, %s"](value,"out of range")
+ end
+ elseif value==0 then
+ return getchar(start),trace_alternatives and formatters["invalid value %a, %s"](value,"no change")
+ elseif value<1 then
+ return alternatives[1],trace_alternatives and formatters["invalid value %a, taking %a"](value,1)
+ else
+ return alternatives[value],trace_alternatives and formatters["value %a, taking %a"](value,value)
+ end
+end
+function handlers.gsub_single(head,start,dataset,sequence,replacement)
+ if trace_singles then
+ logprocess("%s: replacing %s by single %s",pref(dataset,sequence),gref(getchar(start)),gref(replacement))
+ end
+ resetinjection(start)
+ setchar(start,replacement)
+ return head,start,true
+end
+function handlers.gsub_alternate(head,start,dataset,sequence,alternative)
+ local kind=dataset[4]
+ local what=dataset[1]
+ local value=what==true and tfmdata.shared.features[kind] or what
+ local choice,comment=get_alternative_glyph(start,alternative,value)
+ if choice then
+ if trace_alternatives then
+ logprocess("%s: replacing %s by alternative %a to %s, %s",pref(dataset,sequence),gref(getchar(start)),gref(choice),comment)
+ end
+ resetinjection(start)
+ setchar(start,choice)
+ else
+ if trace_alternatives then
+ logwarning("%s: no variant %a for %s, %s",pref(dataset,sequence),value,gref(getchar(start)),comment)
+ end
+ end
+ return head,start,true
+end
+function handlers.gsub_multiple(head,start,dataset,sequence,multiple,rlmode,skiphash)
+ if trace_multiples then
+ logprocess("%s: replacing %s by multiple %s",pref(dataset,sequence),gref(getchar(start)),gref(multiple))
+ end
+ return multiple_glyphs(head,start,multiple,skiphash,dataset[1])
+end
+function handlers.gsub_ligature(head,start,dataset,sequence,ligature,rlmode,skiphash)
+ local current=getnext(start)
+ if not current then
+ return head,start,false,nil
+ end
+ local stop=nil
+ local startchar=getchar(start)
+ if skiphash and skiphash[startchar] then
+ while current do
+ local char=ischar(current,currentfont)
+ if char then
+ local lg=ligature[char]
+ if lg then
+ stop=current
+ ligature=lg
+ current=getnext(current)
+ else
+ break
+ end
+ else
+ break
+ end
+ end
+ if stop then
+ local lig=ligature.ligature
+ if lig then
+ if trace_ligatures then
+ local stopchar=getchar(stop)
+ head,start=markstoligature(head,start,stop,lig)
+ logprocess("%s: replacing %s upto %s by ligature %s case 1",pref(dataset,sequence),gref(startchar),gref(stopchar),gref(getchar(start)))
+ else
+ head,start=markstoligature(head,start,stop,lig)
+ end
+ return head,start,true,false
+ else
+ end
+ end
+ else
+ local discfound=false
+ local lastdisc=nil
+ local hasmarks=marks[startchar]
+ while current do
+ local char,id=ischar(current,currentfont)
+ if char then
+ if skiphash and skiphash[char] then
+ current=getnext(current)
+ else
+ local lg=ligature[char]
+ if lg then
+ if not discfound and lastdisc then
+ discfound=lastdisc
+ lastdisc=nil
+ end
+ if marks[char] then
+ hasmarks=true
+ end
+ stop=current
+ ligature=lg
+ current=getnext(current)
+ else
+ break
+ end
+ end
+ elseif char==false then
+ break
+ elseif id==disc_code then
+ local replace=getfield(current,"replace")
+ if replace then
+ while replace do
+ local char,id=ischar(replace,currentfont)
+ if char then
+ local lg=ligature[char]
+ if lg then
+ if marks[char] then
+ hasmarks=true
+ end
+ ligature=lg
+ replace=getnext(replace)
+ else
+ return head,start,false,false
+ end
+ else
+ return head,start,false,false
+ end
+ end
+ stop=current
+ end
+ lastdisc=current
+ current=getnext(current)
+ else
+ break
+ end
+ end
+ local lig=ligature.ligature
+ if lig then
+ if stop then
+ if trace_ligatures then
+ local stopchar=getchar(stop)
+ head,start=toligature(head,start,stop,lig,dataset,sequence,skiphash,discfound,hasmarks)
+ logprocess("%s: replacing %s upto %s by ligature %s case 2",pref(dataset,sequence),gref(startchar),gref(stopchar),gref(lig))
+ else
+ head,start=toligature(head,start,stop,lig,dataset,sequence,skiphash,discfound,hasmarks)
+ end
+ else
+ resetinjection(start)
+ setchar(start,lig)
+ if trace_ligatures then
+ logprocess("%s: replacing %s by (no real) ligature %s case 3",pref(dataset,sequence),gref(startchar),gref(lig))
+ end
+ end
+ return head,start,true,discfound
+ else
+ end
+ end
+ return head,start,false,discfound
+end
+function handlers.gpos_single(head,start,dataset,sequence,kerns,rlmode,skiphash,step,injection)
+ local startchar=getchar(start)
+ local format=step.format
+ if format=="single" or type(kerns)=="table" then
+ local dx,dy,w,h=setposition(0,start,factor,rlmode,kerns,injection)
+ if trace_kerns then
+ logprocess("%s: shifting single %s by %s xy (%p,%p) and wh (%p,%p)",pref(dataset,sequence),gref(startchar),format,dx,dy,w,h)
+ end
+ else
+ local k=(format=="move" and setmove or setkern)(start,factor,rlmode,kerns,injection)
+ if trace_kerns then
+ logprocess("%s: shifting single %s by %s %p",pref(dataset,sequence),gref(startchar),format,k)
+ end
+ end
+ return head,start,true
+end
+function handlers.gpos_pair(head,start,dataset,sequence,kerns,rlmode,skiphash,step,injection)
+ local snext=getnext(start)
+ if not snext then
+ return head,start,false
+ else
+ local prev=start
+ while snext do
+ local nextchar=ischar(snext,currentfont)
+ if nextchar then
+ if skiphash and skiphash[nextchar] then
+ prev=snext
+ snext=getnext(snext)
+ else
+ local krn=kerns[nextchar]
+ if not krn then
+ break
+ end
+ local format=step.format
+ if format=="pair" then
+ local a,b=krn[1],krn[2]
+ if a==true then
+ elseif a then
+ local x,y,w,h=setposition(1,start,factor,rlmode,a,injection)
+ if trace_kerns then
+ local startchar=getchar(start)
+ logprocess("%s: shifting first of pair %s and %s by xy (%p,%p) and wh (%p,%p) as %s",pref(dataset,sequence),gref(startchar),gref(nextchar),x,y,w,h,injection or "injections")
+ end
+ end
+ if b==true then
+ start=snext
+ elseif b then
+ local x,y,w,h=setposition(2,snext,factor,rlmode,b,injection)
+ if trace_kerns then
+ local startchar=getchar(snext)
+ logprocess("%s: shifting second of pair %s and %s by xy (%p,%p) and wh (%p,%p) as %s",pref(dataset,sequence),gref(startchar),gref(nextchar),x,y,w,h,injection or "injections")
+ end
+ start=snext
+ elseif forcepairadvance then
+ start=snext
+ end
+ return head,start,true
+ elseif krn~=0 then
+ local k=(format=="move" and setmove or setkern)(snext,factor,rlmode,krn,injection)
+ if trace_kerns then
+ logprocess("%s: inserting %s %p between %s and %s as %s",pref(dataset,sequence),format,k,gref(getchar(prev)),gref(nextchar),injection or "injections")
+ end
+ return head,start,true
+ else
+ break
+ end
+ end
+ else
+ break
+ end
+ end
+ return head,start,false
+ end
+end
+function handlers.gpos_mark2base(head,start,dataset,sequence,markanchors,rlmode,skiphash)
+ local markchar=getchar(start)
+ if marks[markchar] then
+ local base=getprev(start)
+ if base then
+ local basechar=ischar(base,currentfont)
+ if basechar then
+ if marks[basechar] then
+ while base do
+ base=getprev(base)
+ if base then
+ basechar=ischar(base,currentfont)
+ if basechar then
+ if not marks[basechar] then
+ break
+ end
+ else
+ if trace_bugs then
+ logwarning("%s: no base for mark %s, case %i",pref(dataset,sequence),gref(markchar),1)
+ end
+ return head,start,false
+ end
+ else
+ if trace_bugs then
+ logwarning("%s: no base for mark %s, case %i",pref(dataset,sequence),gref(markchar),2)
+ end
+ return head,start,false
+ end
+ end
+ end
+ local ba=markanchors[1][basechar]
+ if ba then
+ local ma=markanchors[2]
+ local dx,dy,bound=setmark(start,base,factor,rlmode,ba,ma,characters[basechar],false,checkmarks)
+ if trace_marks then
+ logprocess("%s, bound %s, anchoring mark %s to basechar %s => (%p,%p)",
+ pref(dataset,sequence),bound,gref(markchar),gref(basechar),dx,dy)
+ end
+ return head,start,true
+ elseif trace_bugs then
+ logwarning("%s: mark %s is not anchored to %s",pref(dataset,sequence),gref(markchar),gref(basechar))
+ end
+ elseif trace_bugs then
+ logwarning("%s: nothing preceding, case %i",pref(dataset,sequence),1)
+ end
+ elseif trace_bugs then
+ logwarning("%s: nothing preceding, case %i",pref(dataset,sequence),2)
+ end
+ elseif trace_bugs then
+ logwarning("%s: mark %s is no mark",pref(dataset,sequence),gref(markchar))
+ end
+ return head,start,false
+end
+function handlers.gpos_mark2ligature(head,start,dataset,sequence,markanchors,rlmode,skiphash)
+ local markchar=getchar(start)
+ if marks[markchar] then
+ local base=getprev(start)
+ if base then
+ local basechar=ischar(base,currentfont)
+ if basechar then
+ if marks[basechar] then
+ while base do
+ base=getprev(base)
+ if base then
+ basechar=ischar(base,currentfont)
+ if basechar then
+ if not marks[basechar] then
+ break
+ end
+ else
+ if trace_bugs then
+ logwarning("%s: no base for mark %s, case %i",pref(dataset,sequence),gref(markchar),1)
+ end
+ return head,start,false
+ end
+ else
+ if trace_bugs then
+ logwarning("%s: no base for mark %s, case %i",pref(dataset,sequence),gref(markchar),2)
+ end
+ return head,start,false
+ end
+ end
+ end
+ local ba=markanchors[1][basechar]
+ if ba then
+ local ma=markanchors[2]
+ if ma then
+ local index=getligaindex(start)
+ ba=ba[index]
+ if ba then
+ local dx,dy,bound=setmark(start,base,factor,rlmode,ba,ma,characters[basechar],false,checkmarks)
+ if trace_marks then
+ logprocess("%s, index %s, bound %s, anchoring mark %s to baselig %s at index %s => (%p,%p)",
+ pref(dataset,sequence),index,bound,gref(markchar),gref(basechar),index,dx,dy)
+ end
+ return head,start,true
+ else
+ if trace_bugs then
+ logwarning("%s: no matching anchors for mark %s and baselig %s with index %a",pref(dataset,sequence),gref(markchar),gref(basechar),index)
+ end
+ end
+ end
+ elseif trace_bugs then
+ onetimemessage(currentfont,basechar,"no base anchors",report_fonts)
+ end
+ elseif trace_bugs then
+ logwarning("%s: prev node is no char, case %i",pref(dataset,sequence),1)
+ end
+ elseif trace_bugs then
+ logwarning("%s: prev node is no char, case %i",pref(dataset,sequence),2)
+ end
+ elseif trace_bugs then
+ logwarning("%s: mark %s is no mark",pref(dataset,sequence),gref(markchar))
+ end
+ return head,start,false
+end
+function handlers.gpos_mark2mark(head,start,dataset,sequence,markanchors,rlmode,skiphash)
+ local markchar=getchar(start)
+ if marks[markchar] then
+ local base=getprev(start)
+ local slc=getligaindex(start)
+ if slc then
+ while base do
+ local blc=getligaindex(base)
+ if blc and blc~=slc then
+ base=getprev(base)
+ else
+ break
+ end
+ end
+ end
+ if base then
+ local basechar=ischar(base,currentfont)
+ if basechar then
+ local ba=markanchors[1][basechar]
+ if ba then
+ local ma=markanchors[2]
+ local dx,dy,bound=setmark(start,base,factor,rlmode,ba,ma,characters[basechar],true,checkmarks)
+ if trace_marks then
+ logprocess("%s, bound %s, anchoring mark %s to basemark %s => (%p,%p)",
+ pref(dataset,sequence),bound,gref(markchar),gref(basechar),dx,dy)
+ end
+ return head,start,true
+ end
+ end
+ end
+ elseif trace_bugs then
+ logwarning("%s: mark %s is no mark",pref(dataset,sequence),gref(markchar))
+ end
+ return head,start,false
+end
+function handlers.gpos_cursive(head,start,dataset,sequence,exitanchors,rlmode,skiphash,step)
+ local startchar=getchar(start)
+ if marks[startchar] then
+ if trace_cursive then
+ logprocess("%s: ignoring cursive for mark %s",pref(dataset,sequence),gref(startchar))
+ end
+ else
+ local nxt=getnext(start)
+ while nxt do
+ local nextchar=ischar(nxt,currentfont)
+ if not nextchar then
+ break
+ elseif marks[nextchar] then
+ nxt=getnext(nxt)
+ else
+ local exit=exitanchors[3]
+ if exit then
+ local entry=exitanchors[1][nextchar]
+ if entry then
+ entry=entry[2]
+ if entry then
+ local r2lflag=sequence.flags[4]
+ local dx,dy,bound=setcursive(start,nxt,factor,rlmode,exit,entry,characters[startchar],characters[nextchar],r2lflag)
+ if trace_cursive then
+ logprocess("%s: moving %s to %s cursive (%p,%p) using bound %s in %s mode",pref(dataset,sequence),gref(startchar),gref(nextchar),dx,dy,bound,mref(rlmode))
+ end
+ return head,start,true
+ end
+ end
+ end
+ break
+ end
+ end
+ end
+ return head,start,false
+end
+local chainprocs={}
+local function logprocess(...)
+ if trace_steps then
+ registermessage(...)
+ if trace_steps=="silent" then
+ return
+ end
+ end
+ report_subchain(...)
+end
+local logwarning=report_subchain
+local function logprocess(...)
+ if trace_steps then
+ registermessage(...)
+ if trace_steps=="silent" then
+ return
+ end
+ end
+ report_chain(...)
+end
+local logwarning=report_chain
+local function reversesub(head,start,stop,dataset,sequence,replacements,rlmode,skiphash)
+ local char=getchar(start)
+ local replacement=replacements[char]
+ if replacement then
+ if trace_singles then
+ logprocess("%s: single reverse replacement of %s by %s",cref(dataset,sequence),gref(char),gref(replacement))
+ end
+ resetinjection(start)
+ setchar(start,replacement)
+ return head,start,true
+ else
+ return head,start,false
+ end
+end
+chainprocs.reversesub=reversesub
+local function reportzerosteps(dataset,sequence)
+ logwarning("%s: no steps",cref(dataset,sequence))
+end
+local function reportmoresteps(dataset,sequence)
+ logwarning("%s: more than 1 step",cref(dataset,sequence))
+end
+local function getmapping(dataset,sequence,currentlookup)
+ local steps=currentlookup.steps
+ local nofsteps=currentlookup.nofsteps
+ if nofsteps==0 then
+ reportzerosteps(dataset,sequence)
+ currentlookup.mapping=false
+ return false
+ else
+ if nofsteps>1 then
+ reportmoresteps(dataset,sequence)
+ end
+ local mapping=steps[1].coverage
+ currentlookup.mapping=mapping
+ currentlookup.format=steps[1].format
+ return mapping
+ end
+end
+function chainprocs.gsub_single(head,start,stop,dataset,sequence,currentlookup,rlmode,skiphash,chainindex)
+ local mapping=currentlookup.mapping
+ if mapping==nil then
+ mapping=getmapping(dataset,sequence,currentlookup)
+ end
+ if mapping then
+ local current=start
+ while current do
+ local currentchar=ischar(current)
+ if currentchar then
+ local replacement=mapping[currentchar]
+ if not replacement or replacement=="" then
+ if trace_bugs then
+ logwarning("%s: no single for %s",cref(dataset,sequence,chainindex),gref(currentchar))
+ end
+ else
+ if trace_singles then
+ logprocess("%s: replacing single %s by %s",cref(dataset,sequence,chainindex),gref(currentchar),gref(replacement))
+ end
+ resetinjection(current)
+ setchar(current,replacement)
+ end
+ return head,start,true
+ elseif currentchar==false then
+ break
+ elseif current==stop then
+ break
+ else
+ current=getnext(current)
+ end
+ end
+ end
+ return head,start,false
+end
+function chainprocs.gsub_alternate(head,start,stop,dataset,sequence,currentlookup,rlmode,skiphash,chainindex)
+ local mapping=currentlookup.mapping
+ if mapping==nil then
+ mapping=getmapping(dataset,sequence,currentlookup)
+ end
+ if mapping then
+ local kind=dataset[4]
+ local what=dataset[1]
+ local value=what==true and tfmdata.shared.features[kind] or what
+ local current=start
+ while current do
+ local currentchar=ischar(current)
+ if currentchar then
+ local alternatives=mapping[currentchar]
+ if alternatives then
+ local choice,comment=get_alternative_glyph(current,alternatives,value)
+ if choice then
+ if trace_alternatives then
+ logprocess("%s: replacing %s by alternative %a to %s, %s",cref(dataset,sequence),gref(currentchar),choice,gref(choice),comment)
+ end
+ resetinjection(start)
+ setchar(start,choice)
+ else
+ if trace_alternatives then
+ logwarning("%s: no variant %a for %s, %s",cref(dataset,sequence),value,gref(currentchar),comment)
+ end
+ end
+ end
+ return head,start,true
+ elseif currentchar==false then
+ break
+ elseif current==stop then
+ break
+ else
+ current=getnext(current)
+ end
+ end
+ end
+ return head,start,false
+end
+function chainprocs.gsub_multiple(head,start,stop,dataset,sequence,currentlookup,rlmode,skiphash,chainindex)
+ local mapping=currentlookup.mapping
+ if mapping==nil then
+ mapping=getmapping(dataset,sequence,currentlookup)
+ end
+ if mapping then
+ local startchar=getchar(start)
+ local replacement=mapping[startchar]
+ if not replacement or replacement=="" then
+ if trace_bugs then
+ logwarning("%s: no multiple for %s",cref(dataset,sequence),gref(startchar))
+ end
+ else
+ if trace_multiples then
+ logprocess("%s: replacing %s by multiple characters %s",cref(dataset,sequence),gref(startchar),gref(replacement))
+ end
+ return multiple_glyphs(head,start,replacement,skiphash,dataset[1])
+ end
+ end
+ return head,start,false
+end
+function chainprocs.gsub_ligature(head,start,stop,dataset,sequence,currentlookup,rlmode,skiphash,chainindex)
+ local mapping=currentlookup.mapping
+ if mapping==nil then
+ mapping=getmapping(dataset,sequence,currentlookup)
+ end
+ if mapping then
+ local startchar=getchar(start)
+ local ligatures=mapping[startchar]
+ if not ligatures then
+ if trace_bugs then
+ logwarning("%s: no ligatures starting with %s",cref(dataset,sequence,chainindex),gref(startchar))
+ end
+ else
+ local hasmarks=marks[startchar]
+ local current=getnext(start)
+ local discfound=false
+ local last=stop
+ local nofreplacements=1
+ while current do
+ local id=getid(current)
+ if id==disc_code then
+ if not discfound then
+ discfound=current
+ end
+ if current==stop then
+ break
+ else
+ current=getnext(current)
+ end
+ else
+ local schar=getchar(current)
+ if skiphash and skiphash[schar] then
+ current=getnext(current)
+ else
+ local lg=ligatures[schar]
+ if lg then
+ ligatures=lg
+ last=current
+ nofreplacements=nofreplacements+1
+ if marks[char] then
+ hasmarks=true
+ end
+ if current==stop then
+ break
+ else
+ current=getnext(current)
+ end
+ else
+ break
+ end
+ end
+ end
+ end
+ local ligature=ligatures.ligature
+ if ligature then
+ if chainindex then
+ stop=last
+ end
+ if trace_ligatures then
+ if start==stop then
+ logprocess("%s: replacing character %s by ligature %s case 3",cref(dataset,sequence,chainindex),gref(startchar),gref(ligature))
+ else
+ logprocess("%s: replacing character %s upto %s by ligature %s case 4",cref(dataset,sequence,chainindex),gref(startchar),gref(getchar(stop)),gref(ligature))
+ end
+ end
+ head,start=toligature(head,start,stop,ligature,dataset,sequence,skiphash,discfound,hasmarks)
+ return head,start,true,nofreplacements,discfound
+ elseif trace_bugs then
+ if start==stop then
+ logwarning("%s: replacing character %s by ligature fails",cref(dataset,sequence,chainindex),gref(startchar))
+ else
+ logwarning("%s: replacing character %s upto %s by ligature fails",cref(dataset,sequence,chainindex),gref(startchar),gref(getchar(stop)))
+ end
+ end
+ end
+ end
+ return head,start,false,0,false
+end
+function chainprocs.gpos_single(head,start,stop,dataset,sequence,currentlookup,rlmode,skiphash,chainindex)
+ local mapping=currentlookup.mapping
+ if mapping==nil then
+ mapping=getmapping(dataset,sequence,currentlookup)
+ end
+ if mapping then
+ local startchar=getchar(start)
+ local kerns=mapping[startchar]
+ if kerns then
+ local format=currentlookup.format
+ if format=="single" then
+ local dx,dy,w,h=setposition(0,start,factor,rlmode,kerns)
+ if trace_kerns then
+ logprocess("%s: shifting single %s by %s (%p,%p) and correction (%p,%p)",cref(dataset,sequence),gref(startchar),format,dx,dy,w,h)
+ end
+ else
+ local k=(format=="move" and setmove or setkern)(start,factor,rlmode,kerns,injection)
+ if trace_kerns then
+ logprocess("%s: shifting single %s by %s %p",cref(dataset,sequence),gref(startchar),format,k)
+ end
+ end
+ return head,start,true
+ end
+ end
+ return head,start,false
+end
+function chainprocs.gpos_pair(head,start,stop,dataset,sequence,currentlookup,rlmode,skiphash,chainindex)
+ local mapping=currentlookup.mapping
+ if mapping==nil then
+ mapping=getmapping(dataset,sequence,currentlookup)
+ end
+ if mapping then
+ local snext=getnext(start)
+ if snext then
+ local startchar=getchar(start)
+ local kerns=mapping[startchar]
+ if kerns then
+ local prev=start
+ while snext do
+ local nextchar=ischar(snext,currentfont)
+ if not nextchar then
+ break
+ end
+ if skiphash and skiphash[nextchar] then
+ prev=snext
+ snext=getnext(snext)
+ else
+ local krn=kerns[nextchar]
+ if not krn then
+ break
+ end
+ local format=currentlookup.format
+ if format=="pair" then
+ local a,b=krn[1],krn[2]
+ if a==true then
+ elseif a then
+ local x,y,w,h=setposition(1,start,factor,rlmode,a,"injections")
+ if trace_kerns then
+ local startchar=getchar(start)
+ logprocess("%s: shifting first of pair %s and %s by (%p,%p) and correction (%p,%p)",cref(dataset,sequence),gref(startchar),gref(nextchar),x,y,w,h)
+ end
+ end
+ if b==true then
+ start=snext
+ elseif b then
+ local x,y,w,h=setposition(2,snext,factor,rlmode,b,"injections")
+ if trace_kerns then
+ local startchar=getchar(start)
+ logprocess("%s: shifting second of pair %s and %s by (%p,%p) and correction (%p,%p)",cref(dataset,sequence),gref(startchar),gref(nextchar),x,y,w,h)
+ end
+ start=snext
+ elseif forcepairadvance then
+ start=snext
+ end
+ return head,start,true
+ elseif krn~=0 then
+ local k=(format=="move" and setmove or setkern)(snext,factor,rlmode,krn)
+ if trace_kerns then
+ logprocess("%s: inserting %s %p between %s and %s",cref(dataset,sequence),format,k,gref(getchar(prev)),gref(nextchar))
+ end
+ return head,start,true
+ else
+ break
+ end
+ end
+ end
+ end
+ end
+ end
+ return head,start,false
+end
+function chainprocs.gpos_mark2base(head,start,stop,dataset,sequence,currentlookup,rlmode,skiphash,chainindex)
+ local mapping=currentlookup.mapping
+ if mapping==nil then
+ mapping=getmapping(dataset,sequence,currentlookup)
+ end
+ if mapping then
+ local markchar=getchar(start)
+ if marks[markchar] then
+ local markanchors=mapping[markchar]
+ if markanchors then
+ local base=getprev(start)
+ if base then
+ local basechar=ischar(base,currentfont)
+ if basechar then
+ if marks[basechar] then
+ while base do
+ base=getprev(base)
+ if base then
+ local basechar=ischar(base,currentfont)
+ if basechar then
+ if not marks[basechar] then
+ break
+ end
+ else
+ if trace_bugs then
+ logwarning("%s: no base for mark %s, case %i",pref(dataset,sequence),gref(markchar),1)
+ end
+ return head,start,false
+ end
+ else
+ if trace_bugs then
+ logwarning("%s: no base for mark %s, case %i",pref(dataset,sequence),gref(markchar),2)
+ end
+ return head,start,false
+ end
+ end
+ end
+ local ba=markanchors[1][basechar]
+ if ba then
+ local ma=markanchors[2]
+ if ma then
+ local dx,dy,bound=setmark(start,base,factor,rlmode,ba,ma,characters[basechar],false,checkmarks)
+ if trace_marks then
+ logprocess("%s, bound %s, anchoring mark %s to basechar %s => (%p,%p)",
+ cref(dataset,sequence),bound,gref(markchar),gref(basechar),dx,dy)
+ end
+ return head,start,true
+ end
+ end
+ elseif trace_bugs then
+ logwarning("%s: prev node is no char, case %i",cref(dataset,sequence),1)
+ end
+ elseif trace_bugs then
+ logwarning("%s: prev node is no char, case %i",cref(dataset,sequence),2)
+ end
+ elseif trace_bugs then
+ logwarning("%s: mark %s has no anchors",cref(dataset,sequence),gref(markchar))
+ end
+ elseif trace_bugs then
+ logwarning("%s: mark %s is no mark",cref(dataset,sequence),gref(markchar))
+ end
+ end
+ return head,start,false
+end
+function chainprocs.gpos_mark2ligature(head,start,stop,dataset,sequence,currentlookup,rlmode,skiphash,chainindex)
+ local mapping=currentlookup.mapping
+ if mapping==nil then
+ mapping=getmapping(dataset,sequence,currentlookup)
+ end
+ if mapping then
+ local markchar=getchar(start)
+ if marks[markchar] then
+ local markanchors=mapping[markchar]
+ if markanchors then
+ local base=getprev(start)
+ if base then
+ local basechar=ischar(base,currentfont)
+ if basechar then
+ if marks[basechar] then
+ while base do
+ base=getprev(base)
+ if base then
+ local basechar=ischar(base,currentfont)
+ if basechar then
+ if not marks[basechar] then
+ break
+ end
+ else
+ if trace_bugs then
+ logwarning("%s: no base for mark %s, case %i",cref(dataset,sequence),markchar,1)
+ end
+ return head,start,false
+ end
+ else
+ if trace_bugs then
+ logwarning("%s: no base for mark %s, case %i",cref(dataset,sequence),markchar,2)
+ end
+ return head,start,false
+ end
+ end
+ end
+ local ba=markanchors[1][basechar]
+ if ba then
+ local ma=markanchors[2]
+ if ma then
+ local index=getligaindex(start)
+ ba=ba[index]
+ if ba then
+ local dx,dy,bound=setmark(start,base,factor,rlmode,ba,ma,characters[basechar],false,checkmarks)
+ if trace_marks then
+ logprocess("%s, bound %s, anchoring mark %s to baselig %s at index %s => (%p,%p)",
+ cref(dataset,sequence),a or bound,gref(markchar),gref(basechar),index,dx,dy)
+ end
+ return head,start,true
+ end
+ end
+ end
+ elseif trace_bugs then
+ logwarning("%s, prev node is no char, case %i",cref(dataset,sequence),1)
+ end
+ elseif trace_bugs then
+ logwarning("%s, prev node is no char, case %i",cref(dataset,sequence),2)
+ end
+ elseif trace_bugs then
+ logwarning("%s, mark %s has no anchors",cref(dataset,sequence),gref(markchar))
+ end
+ elseif trace_bugs then
+ logwarning("%s, mark %s is no mark",cref(dataset,sequence),gref(markchar))
+ end
+ end
+ return head,start,false
+end
+function chainprocs.gpos_mark2mark(head,start,stop,dataset,sequence,currentlookup,rlmode,skiphash,chainindex)
+ local mapping=currentlookup.mapping
+ if mapping==nil then
+ mapping=getmapping(dataset,sequence,currentlookup)
+ end
+ if mapping then
+ local markchar=getchar(start)
+ if marks[markchar] then
+ local markanchors=mapping[markchar]
+ if markanchors then
+ local base=getprev(start)
+ local slc=getligaindex(start)
+ if slc then
+ while base do
+ local blc=getligaindex(base)
+ if blc and blc~=slc then
+ base=getprev(base)
+ else
+ break
+ end
+ end
+ end
+ if base then
+ local basechar=ischar(base,currentfont)
+ if basechar then
+ local ba=markanchors[1][basechar]
+ if ba then
+ local ma=markanchors[2]
+ if ma then
+ local dx,dy,bound=setmark(start,base,factor,rlmode,ba,ma,characters[basechar],true,checkmarks)
+ if trace_marks then
+ logprocess("%s, bound %s, anchoring mark %s to basemark %s => (%p,%p)",
+ cref(dataset,sequence),bound,gref(markchar),gref(basechar),dx,dy)
+ end
+ return head,start,true
+ end
+ end
+ elseif trace_bugs then
+ logwarning("%s: prev node is no mark, case %i",cref(dataset,sequence),1)
+ end
+ elseif trace_bugs then
+ logwarning("%s: prev node is no mark, case %i",cref(dataset,sequence),2)
+ end
+ elseif trace_bugs then
+ logwarning("%s: mark %s has no anchors",cref(dataset,sequence),gref(markchar))
+ end
+ elseif trace_bugs then
+ logwarning("%s: mark %s is no mark",cref(dataset,sequence),gref(markchar))
+ end
+ end
+ return head,start,false
+end
+function chainprocs.gpos_cursive(head,start,stop,dataset,sequence,currentlookup,rlmode,skiphash,chainindex)
+ local mapping=currentlookup.mapping
+ if mapping==nil then
+ mapping=getmapping(dataset,sequence,currentlookup)
+ end
+ if mapping then
+ local startchar=getchar(start)
+ local exitanchors=mapping[startchar]
+ if exitanchors then
+ if marks[startchar] then
+ if trace_cursive then
+ logprocess("%s: ignoring cursive for mark %s",pref(dataset,sequence),gref(startchar))
+ end
+ else
+ local nxt=getnext(start)
+ while nxt do
+ local nextchar=ischar(nxt,currentfont)
+ if not nextchar then
+ break
+ elseif marks[nextchar] then
+ nxt=getnext(nxt)
+ else
+ local exit=exitanchors[3]
+ if exit then
+ local entry=exitanchors[1][nextchar]
+ if entry then
+ entry=entry[2]
+ if entry then
+ local r2lflag=sequence.flags[4]
+ local dx,dy,bound=setcursive(start,nxt,factor,rlmode,exit,entry,characters[startchar],characters[nextchar],r2lflag)
+ if trace_cursive then
+ logprocess("%s: moving %s to %s cursive (%p,%p) using bound %s in %s mode",pref(dataset,sequence),gref(startchar),gref(nextchar),dx,dy,bound,mref(rlmode))
+ end
+ return head,start,true
+ end
+ end
+ elseif trace_bugs then
+ onetimemessage(currentfont,startchar,"no entry anchors",report_fonts)
+ end
+ break
+ end
+ end
+ end
+ elseif trace_cursive and trace_details then
+ logprocess("%s, cursive %s is already done",pref(dataset,sequence),gref(getchar(start)),alreadydone)
+ end
+ end
+ return head,start,false
+end
+local function show_skip(dataset,sequence,char,ck,class)
+ logwarning("%s: skipping char %s, class %a, rule %a, lookuptype %a",cref(dataset,sequence),gref(char),class,ck[1],ck[8] or ck[2])
+end
+local userkern=nuts.pool and nuts.pool.newkern
+do if not userkern then
+ local thekern=nuts.new("kern",1)
+ local setkern=nuts.setkern
+ userkern=function(k)
+ local n=copy_node(thekern)
+ setkern(n,k)
+ return n
+ end
+end end
+local function checked(head)
+ local current=head
+ while current do
+ if getid(current)==glue_code then
+ local kern=userkern(getwidth(current))
+ if head==current then
+ local next=getnext(current)
+ if next then
+ setlink(kern,next)
+ end
+ flush_node(current)
+ head=kern
+ current=next
+ else
+ local prev,next=getboth(current)
+ setlink(prev,kern,next)
+ flush_node(current)
+ current=next
+ end
+ else
+ current=getnext(current)
+ end
+ end
+ return head
+end
+local function setdiscchecked(d,pre,post,replace)
+ if pre then pre=checked(pre) end
+ if post then post=checked(post) end
+ if replace then replace=checked(replace) end
+ setdisc(d,pre,post,replace)
+end
+local noflags={ false,false,false,false }
+local function chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck)
+ local size=ck[5]-ck[4]+1
+ local chainlookups=ck[6]
+ local done=false
+ if chainlookups then
+ if size==1 then
+ local chainlookup=chainlookups[1]
+ for j=1,#chainlookup do
+ local chainstep=chainlookup[j]
+ local chainkind=chainstep.type
+ local chainproc=chainprocs[chainkind]
+ if chainproc then
+ local ok
+ head,start,ok=chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash)
+ if ok then
+ done=true
+ end
+ else
+ logprocess("%s: %s is not yet supported (1)",cref(dataset,sequence),chainkind)
+ end
+ end
+ else
+ local i=1
+ local laststart=start
+ local nofchainlookups=#chainlookups
+ while start do
+ if skiphash then
+ while start do
+ local char=ischar(start,currentfont)
+ if char then
+ if skiphash and skiphash[char] then
+ start=getnext(start)
+ else
+ break
+ end
+ else
+ break
+ end
+ end
+ end
+ local chainlookup=chainlookups[i]
+ if chainlookup then
+ for j=1,#chainlookup do
+ local chainstep=chainlookup[j]
+ local chainkind=chainstep.type
+ local chainproc=chainprocs[chainkind]
+ if chainproc then
+ local ok,n
+ head,start,ok,n=chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash,i)
+ if ok then
+ done=true
+ if n and n>1 and i+n>nofchainlookups then
+ i=size
+ break
+ end
+ end
+ else
+ logprocess("%s: %s is not yet supported (2)",cref(dataset,sequence),chainkind)
+ end
+ end
+ end
+ i=i+1
+ if i>size or not start then
+ break
+ elseif start then
+ laststart=start
+ start=getnext(start)
+ end
+ end
+ if not start then
+ start=laststart
+ end
+ end
+ else
+ local replacements=ck[7]
+ if replacements then
+ head,start,done=reversesub(head,start,last,dataset,sequence,replacements,rlmode,skiphash)
+ else
+ done=true
+ if trace_contexts then
+ logprocess("%s: skipping match",cref(dataset,sequence))
+ end
+ end
+ end
+ return head,start,done
+end
+local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck)
+ if not start then
+ return head,start,false
+ end
+ local startishead=start==head
+ local seq=ck[3]
+ local f=ck[4]
+ local l=ck[5]
+ local s=#seq
+ local done=false
+ local sweepnode=sweepnode
+ local sweeptype=sweeptype
+ local sweepoverflow=false
+ local keepdisc=not sweepnode
+ local lookaheaddisc=nil
+ local backtrackdisc=nil
+ local current=start
+ local last=start
+ local prev=getprev(start)
+ local hasglue=false
+ local i=f
+ while i<=l do
+ local id=getid(current)
+ if id==glyph_code then
+ i=i+1
+ last=current
+ current=getnext(current)
+ elseif id==glue_code then
+ i=i+1
+ last=current
+ current=getnext(current)
+ hasglue=true
+ elseif id==disc_code then
+ if keepdisc then
+ keepdisc=false
+ lookaheaddisc=current
+ local replace=getfield(current,"replace")
+ if not replace then
+ sweepoverflow=true
+ sweepnode=current
+ current=getnext(current)
+ else
+ while replace and i<=l do
+ if getid(replace)==glyph_code then
+ i=i+1
+ end
+ replace=getnext(replace)
+ end
+ current=getnext(replace)
+ end
+ last=current
+ else
+ head,current=flattendisk(head,current)
+ end
+ else
+ last=current
+ current=getnext(current)
+ end
+ if current then
+ elseif sweepoverflow then
+ break
+ elseif sweeptype=="post" or sweeptype=="replace" then
+ current=getnext(sweepnode)
+ if current then
+ sweeptype=nil
+ sweepoverflow=true
+ else
+ break
+ end
+ else
+ break
+ end
+ end
+ if sweepoverflow then
+ local prev=current and getprev(current)
+ if not current or prev~=sweepnode then
+ local head=getnext(sweepnode)
+ local tail=nil
+ if prev then
+ tail=prev
+ setprev(current,sweepnode)
+ else
+ tail=find_node_tail(head)
+ end
+ setnext(sweepnode,current)
+ setprev(head)
+ setnext(tail)
+ appenddisc(sweepnode,head)
+ end
+ end
+ if l<s then
+ local i=l
+ local t=sweeptype=="post" or sweeptype=="replace"
+ while current and i<s do
+ local id=getid(current)
+ if id==glyph_code then
+ i=i+1
+ current=getnext(current)
+ elseif id==glue_code then
+ i=i+1
+ current=getnext(current)
+ hasglue=true
+ elseif id==disc_code then
+ if keepdisc then
+ keepdisc=false
+ if notmatchpre[current]~=notmatchreplace[current] then
+ lookaheaddisc=current
+ end
+ local replace=getfield(current,"replace")
+ while replace and i<s do
+ if getid(replace)==glyph_code then
+ i=i+1
+ end
+ replace=getnext(replace)
+ end
+ current=getnext(current)
+ elseif notmatchpre[current]~=notmatchreplace[current] then
+ head,current=flattendisk(head,current)
+ else
+ current=getnext(current)
+ end
+ else
+ current=getnext(current)
+ end
+ if not current and t then
+ current=getnext(sweepnode)
+ if current then
+ sweeptype=nil
+ end
+ end
+ end
+ end
+ if f>1 then
+ local current=prev
+ local i=f
+ local t=sweeptype=="pre" or sweeptype=="replace"
+ if not current and t and current==checkdisk then
+ current=getprev(sweepnode)
+ end
+ while current and i>1 do
+ local id=getid(current)
+ if id==glyph_code then
+ i=i-1
+ elseif id==glue_code then
+ i=i-1
+ hasglue=true
+ elseif id==disc_code then
+ if keepdisc then
+ keepdisc=false
+ if notmatchpost[current]~=notmatchreplace[current] then
+ backtrackdisc=current
+ end
+ local replace=getfield(current,"replace")
+ while replace and i>1 do
+ if getid(replace)==glyph_code then
+ i=i-1
+ end
+ replace=getnext(replace)
+ end
+ elseif notmatchpost[current]~=notmatchreplace[current] then
+ head,current=flattendisk(head,current)
+ end
+ end
+ current=getprev(current)
+ if t and current==checkdisk then
+ current=getprev(sweepnode)
+ end
+ end
+ end
+ local done=false
+ if lookaheaddisc then
+ local cf=start
+ local cl=getprev(lookaheaddisc)
+ local cprev=getprev(start)
+ local insertedmarks=0
+ while cprev do
+ local char=ischar(cf,currentfont)
+ if char and marks[char] then
+ insertedmarks=insertedmarks+1
+ cf=cprev
+ startishead=cf==head
+ cprev=getprev(cprev)
+ else
+ break
+ end
+ end
+ setlink(cprev,lookaheaddisc)
+ setprev(cf)
+ setnext(cl)
+ if startishead then
+ head=lookaheaddisc
+ end
+ local pre,post,replace=getdisc(lookaheaddisc)
+ local new=copy_node_list(cf)
+ local cnew=new
+ if pre then
+ setlink(find_node_tail(cf),pre)
+ end
+ if replace then
+ local tail=find_node_tail(new)
+ setlink(tail,replace)
+ end
+ for i=1,insertedmarks do
+ cnew=getnext(cnew)
+ end
+ cl=start
+ local clast=cnew
+ for i=f,l do
+ cl=getnext(cl)
+ clast=getnext(clast)
+ end
+ if not notmatchpre[lookaheaddisc] then
+ local ok=false
+ cf,start,ok=chainrun(cf,start,cl,dataset,sequence,rlmode,skiphash,ck)
+ if ok then
+ done=true
+ end
+ end
+ if not notmatchreplace[lookaheaddisc] then
+ local ok=false
+ new,cnew,ok=chainrun(new,cnew,clast,dataset,sequence,rlmode,skiphash,ck)
+ if ok then
+ done=true
+ end
+ end
+ if hasglue then
+ setdiscchecked(lookaheaddisc,cf,post,new)
+ else
+ setdisc(lookaheaddisc,cf,post,new)
+ end
+ start=getprev(lookaheaddisc)
+ sweephead[cf]=getnext(clast) or false
+ sweephead[new]=getnext(cl) or false
+ elseif backtrackdisc then
+ local cf=getnext(backtrackdisc)
+ local cl=start
+ local cnext=getnext(start)
+ local insertedmarks=0
+ while cnext do
+ local char=ischar(cnext,currentfont)
+ if char and marks[char] then
+ insertedmarks=insertedmarks+1
+ cl=cnext
+ cnext=getnext(cnext)
+ else
+ break
+ end
+ end
+ if cnext then
+ setprev(cnext,backtrackdisc)
+ end
+ setnext(backtrackdisc,cnext)
+ setprev(cf)
+ setnext(cl)
+ local pre,post,replace,pretail,posttail,replacetail=getdisc(backtrackdisc,true)
+ local new=copy_node_list(cf)
+ local cnew=find_node_tail(new)
+ for i=1,insertedmarks do
+ cnew=getprev(cnew)
+ end
+ local clast=cnew
+ for i=f,l do
+ clast=getnext(clast)
+ end
+ if not notmatchpost[backtrackdisc] then
+ local ok=false
+ cf,start,ok=chainrun(cf,start,last,dataset,sequence,rlmode,skiphash,ck)
+ if ok then
+ done=true
+ end
+ end
+ if not notmatchreplace[backtrackdisc] then
+ local ok=false
+ new,cnew,ok=chainrun(new,cnew,clast,dataset,sequence,rlmode,skiphash,ck)
+ if ok then
+ done=true
+ end
+ end
+ if post then
+ setlink(posttail,cf)
+ else
+ post=cf
+ end
+ if replace then
+ setlink(replacetail,new)
+ else
+ replace=new
+ end
+ if hasglue then
+ setdiscchecked(backtrackdisc,pre,post,replace)
+ else
+ setdisc(backtrackdisc,pre,post,replace)
+ end
+ start=getprev(backtrackdisc)
+ sweephead[post]=getnext(clast) or false
+ sweephead[replace]=getnext(last) or false
+ else
+ local ok=false
+ head,start,ok=chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck)
+ if ok then
+ done=true
+ end
+ end
+ return head,start,done
+end
+local function chaintrac(head,start,dataset,sequence,rlmode,skiphash,ck,match)
+ local rule=ck[1]
+ local lookuptype=ck[8] or ck[2]
+ local nofseq=#ck[3]
+ local first=ck[4]
+ local last=ck[5]
+ local char=getchar(start)
+ logwarning("%s: rule %s %s at char %s for (%s,%s,%s) chars, lookuptype %a",
+ cref(dataset,sequence),rule,match and "matches" or "nomatch",
+ gref(char),first-1,last-first+1,nofseq-last,lookuptype)
+end
+local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode,skiphash)
+ local sweepnode=sweepnode
+ local sweeptype=sweeptype
+ local postreplace
+ local prereplace
+ local checkdisc
+ local diskseen
+ if sweeptype then
+ if sweeptype=="replace" then
+ postreplace=true
+ prereplace=true
+ else
+ postreplace=sweeptype=="post"
+ prereplace=sweeptype=="pre"
+ end
+ checkdisc=getprev(head)
+ end
+ local currentfont=currentfont
+ local skipped
+ local startprev,
+ startnext=getboth(start)
+ local done
+ for k=1,contexts.n do
+ local current=start
+ local last=start
+ local ck=contexts[k]
+ local seq=ck[3]
+ local s=seq.n
+ if s==1 then
+ local char=ischar(current,currentfont)
+ if char and not seq[1][char] then
+ goto next
+ end
+ else
+ local f=ck[4]
+ local l=ck[5]
+ if l>f then
+ local discfound
+ local n=f+1
+ last=startnext
+ while n<=l do
+ if postreplace and not last then
+ last=getnext(sweepnode)
+ sweeptype=nil
+ end
+ if last then
+ local char,id=ischar(last,currentfont)
+ if char then
+ if skiphash and skiphash[char] then
+ skipped=true
+ if trace_skips then
+ show_skip(dataset,sequence,char,ck,classes[char])
+ end
+ last=getnext(last)
+ elseif seq[n][char] then
+ if n<l then
+ last=getnext(last)
+ end
+ n=n+1
+ elseif discfound then
+ notmatchreplace[discfound]=true
+ if notmatchpre[discfound] then
+ goto next
+ else
+ break
+ end
+ else
+ goto next
+ end
+ elseif char==false then
+ if discfound then
+ notmatchreplace[discfound]=true
+ if notmatchpre[discfound] then
+ goto next
+ else
+ break
+ end
+ else
+ goto next
+ end
+ elseif id==disc_code then
+ diskseen=true
+ discfound=last
+ notmatchpre[last]=nil
+ notmatchpost[last]=true
+ notmatchreplace[last]=nil
+ local pre,post,replace=getdisc(last)
+ if pre then
+ local n=n
+ while pre do
+ if seq[n][getchar(pre)] then
+ n=n+1
+ if n>l then
+ break
+ end
+ pre=getnext(pre)
+ else
+ notmatchpre[last]=true
+ break
+ end
+ end
+ if n<=l then
+ notmatchpre[last]=true
+ end
+ else
+ notmatchpre[last]=true
+ end
+ if replace then
+ while replace do
+ if seq[n][getchar(replace)] then
+ n=n+1
+ if n>l then
+ break
+ end
+ replace=getnext(replace)
+ else
+ notmatchreplace[last]=true
+ if notmatchpre[last] then
+ goto next
+ else
+ break
+ end
+ end
+ end
+ if notmatchpre[last] then
+ goto next
+ end
+ end
+ last=getnext(last)
+ else
+ goto next
+ end
+ else
+ goto next
+ end
+ end
+ end
+ if f>1 then
+ if startprev then
+ local prev=startprev
+ if prereplace and prev==checkdisc then
+ prev=getprev(sweepnode)
+ end
+ if prev then
+ local discfound
+ local n=f-1
+ while n>=1 do
+ if prev then
+ local char,id=ischar(prev,currentfont)
+ if char then
+ if skiphash and skiphash[char] then
+ skipped=true
+ if trace_skips then
+ show_skip(dataset,sequence,char,ck,classes[char])
+ end
+ prev=getprev(prev)
+ elseif seq[n][char] then
+ if n>1 then
+ prev=getprev(prev)
+ end
+ n=n-1
+ elseif discfound then
+ notmatchreplace[discfound]=true
+ if notmatchpost[discfound] then
+ goto next
+ else
+ break
+ end
+ else
+ goto next
+ end
+ elseif char==false then
+ if discfound then
+ notmatchreplace[discfound]=true
+ if notmatchpost[discfound] then
+ goto next
+ end
+ else
+ goto next
+ end
+ break
+ elseif id==disc_code then
+ diskseen=true
+ discfound=prev
+ notmatchpre[prev]=true
+ notmatchpost[prev]=nil
+ notmatchreplace[prev]=nil
+ local pre,post,replace,pretail,posttail,replacetail=getdisc(prev,true)
+ if pre~=start and post~=start and replace~=start then
+ if post then
+ local n=n
+ while posttail do
+ if seq[n][getchar(posttail)] then
+ n=n-1
+ if posttail==post or n<1 then
+ break
+ else
+ posttail=getprev(posttail)
+ end
+ else
+ notmatchpost[prev]=true
+ break
+ end
+ end
+ if n>=1 then
+ notmatchpost[prev]=true
+ end
+ else
+ notmatchpost[prev]=true
+ end
+ if replace then
+ while replacetail do
+ if seq[n][getchar(replacetail)] then
+ n=n-1
+ if replacetail==replace or n<1 then
+ break
+ else
+ replacetail=getprev(replacetail)
+ end
+ else
+ notmatchreplace[prev]=true
+ if notmatchpost[prev] then
+ goto next
+ else
+ break
+ end
+ end
+ end
+ end
+ end
+ prev=getprev(prev)
+ elseif id==glue_code then
+ local sn=seq[n]
+ if (sn[32] and spaces[prev]) or sn[0xFFFC] then
+ n=n-1
+ prev=getprev(prev)
+ else
+ goto next
+ end
+ elseif seq[n][0xFFFC] then
+ n=n-1
+ prev=getprev(prev)
+ else
+ goto next
+ end
+ else
+ goto next
+ end
+ end
+ else
+ goto next
+ end
+ else
+ goto next
+ end
+ end
+ if s>l then
+ local current=last and getnext(last)
+ if not current and postreplace then
+ current=getnext(sweepnode)
+ end
+ if current then
+ local discfound
+ local n=l+1
+ while n<=s do
+ if current then
+ local char,id=ischar(current,currentfont)
+ if char then
+ if skiphash and skiphash[char] then
+ skipped=true
+ if trace_skips then
+ show_skip(dataset,sequence,char,ck,classes[char])
+ end
+ current=getnext(current)
+ elseif seq[n][char] then
+ if n<s then
+ current=getnext(current)
+ end
+ n=n+1
+ elseif discfound then
+ notmatchreplace[discfound]=true
+ if notmatchpre[discfound] then
+ goto next
+ else
+ break
+ end
+ else
+ goto next
+ end
+ elseif char==false then
+ if discfound then
+ notmatchreplace[discfound]=true
+ if notmatchpre[discfound] then
+ goto next
+ else
+ break
+ end
+ else
+ goto next
+ end
+ elseif id==disc_code then
+ diskseen=true
+ discfound=current
+ notmatchpre[current]=nil
+ notmatchpost[current]=true
+ notmatchreplace[current]=nil
+ local pre,post,replace=getdisc(current)
+ if pre then
+ local n=n
+ while pre do
+ if seq[n][getchar(pre)] then
+ n=n+1
+ if n>s then
+ break
+ else
+ pre=getnext(pre)
+ end
+ else
+ notmatchpre[current]=true
+ break
+ end
+ end
+ if n<=s then
+ notmatchpre[current]=true
+ end
+ else
+ notmatchpre[current]=true
+ end
+ if replace then
+ while replace do
+ if seq[n][getchar(replace)] then
+ n=n+1
+ if n>s then
+ break
+ else
+ replace=getnext(replace)
+ end
+ else
+ notmatchreplace[current]=true
+ if not notmatchpre[current] then
+ goto next
+ else
+ break
+ end
+ end
+ end
+ else
+ end
+ current=getnext(current)
+ elseif id==glue_code then
+ local sn=seq[n]
+ if (sn[32] and spaces[current]) or sn[0xFFFC] then
+ n=n+1
+ current=getnext(current)
+ else
+ goto next
+ end
+ elseif seq[n][0xFFFC] then
+ n=n+1
+ current=getnext(current)
+ else
+ goto next
+ end
+ else
+ goto next
+ end
+ end
+ else
+ goto next
+ end
+ end
+ end
+ if trace_contexts then
+ chaintrac(head,start,dataset,sequence,rlmode,skipped and skiphash,ck,true)
+ end
+ if diskseen or sweepnode then
+ head,start,done=chaindisk(head,start,dataset,sequence,rlmode,skipped and skiphash,ck)
+ else
+ head,start,done=chainrun(head,start,last,dataset,sequence,rlmode,skipped and skiphash,ck)
+ end
+ if done then
+ break
+ end
+ ::next::
+ end
+ if diskseen then
+ notmatchpre={}
+ notmatchpost={}
+ notmatchreplace={}
+ end
+ return head,start,done
+end
+handlers.gsub_context=handle_contextchain
+handlers.gsub_contextchain=handle_contextchain
+handlers.gsub_reversecontextchain=handle_contextchain
+handlers.gpos_contextchain=handle_contextchain
+handlers.gpos_context=handle_contextchain
+local function chained_contextchain(head,start,stop,dataset,sequence,currentlookup,rlmode,skiphash)
+ local steps=currentlookup.steps
+ local nofsteps=currentlookup.nofsteps
+ if nofsteps>1 then
+ reportmoresteps(dataset,sequence)
+ end
+ return handle_contextchain(head,start,dataset,sequence,currentlookup,rlmode,skiphash)
+end
+chainprocs.gsub_context=chained_contextchain
+chainprocs.gsub_contextchain=chained_contextchain
+chainprocs.gsub_reversecontextchain=chained_contextchain
+chainprocs.gpos_contextchain=chained_contextchain
+chainprocs.gpos_context=chained_contextchain
+local missing=setmetatableindex("table")
+local logwarning=report_process
+local resolved={}
+local function logprocess(...)
+ if trace_steps then
+ registermessage(...)
+ if trace_steps=="silent" then
+ return
+ end
+ end
+ report_process(...)
+end
+local sequencelists=setmetatableindex(function(t,font)
+ local sequences=fontdata[font].resources.sequences
+ if not sequences or not next(sequences) then
+ sequences=false
+ end
+ t[font]=sequences
+ return sequences
+end)
+do
+ local autofeatures=fonts.analyzers.features
+ local featuretypes=otf.tables.featuretypes
+ local defaultscript=otf.features.checkeddefaultscript
+ local defaultlanguage=otf.features.checkeddefaultlanguage
+ local wildcard="*"
+ local default="dflt"
+ local function initialize(sequence,script,language,enabled,autoscript,autolanguage)
+ local features=sequence.features
+ if features then
+ local order=sequence.order
+ if order then
+ local featuretype=featuretypes[sequence.type or "unknown"]
+ for i=1,#order do
+ local kind=order[i]
+ local valid=enabled[kind]
+ if valid then
+ local scripts=features[kind]
+ local languages=scripts and (
+ scripts[script] or
+ scripts[wildcard] or
+ (autoscript and defaultscript(featuretype,autoscript,scripts))
+ )
+ local enabled=languages and (
+ languages[language] or
+ languages[wildcard] or
+ (autolanguage and defaultlanguage(featuretype,autolanguage,languages))
+ )
+ if enabled then
+ return { valid,autofeatures[kind] or false,sequence,kind }
+ end
+ end
+ end
+ else
+ end
+ end
+ return false
+ end
+ function otf.dataset(tfmdata,font)
+ local shared=tfmdata.shared
+ local properties=tfmdata.properties
+ local language=properties.language or "dflt"
+ local script=properties.script or "dflt"
+ local enabled=shared.features
+ local autoscript=enabled and enabled.autoscript
+ local autolanguage=enabled and enabled.autolanguage
+ local res=resolved[font]
+ if not res then
+ res={}
+ resolved[font]=res
+ end
+ local rs=res[script]
+ if not rs then
+ rs={}
+ res[script]=rs
+ end
+ local rl=rs[language]
+ if not rl then
+ rl={
+ }
+ rs[language]=rl
+ local sequences=tfmdata.resources.sequences
+ if sequences then
+ for s=1,#sequences do
+ local v=enabled and initialize(sequences[s],script,language,enabled,autoscript,autolanguage)
+ if v then
+ rl[#rl+1]=v
+ end
+ end
+ end
+ end
+ return rl
+ end
+end
+local function report_disc(what,n)
+ report_run("%s: %s > %s",what,n,languages.serializediscretionary(n))
+end
+local function kernrun(disc,k_run,font,attr,...)
+ if trace_kernruns then
+ report_disc("kern",disc)
+ end
+ local prev,next=getboth(disc)
+ local nextstart=next
+ local done=false
+ local pre,post,replace,pretail,posttail,replacetail=getdisc(disc,true)
+ local prevmarks=prev
+ while prevmarks do
+ local char=ischar(prevmarks,font)
+ if char and marks[char] then
+ prevmarks=getprev(prevmarks)
+ else
+ break
+ end
+ end
+ if prev and not ischar(prev,font) then
+ prev=false
+ end
+ if next and not ischar(next,font) then
+ next=false
+ end
+ if pre then
+ if k_run(pre,"injections",nil,font,attr,...) then
+ done=true
+ end
+ if prev then
+ setlink(prev,pre)
+ if k_run(prevmarks,"preinjections",pre,font,attr,...) then
+ done=true
+ end
+ setprev(pre)
+ setlink(prev,disc)
+ end
+ end
+ if post then
+ if k_run(post,"injections",nil,font,attr,...) then
+ done=true
+ end
+ if next then
+ setlink(posttail,next)
+ if k_run(posttail,"postinjections",next,font,attr,...) then
+ done=true
+ end
+ setnext(posttail)
+ setlink(disc,next)
+ end
+ end
+ if replace then
+ if k_run(replace,"injections",nil,font,attr,...) then
+ done=true
+ end
+ if prev then
+ setlink(prev,replace)
+ if k_run(prevmarks,"replaceinjections",replace,font,attr,...) then
+ done=true
+ end
+ setprev(replace)
+ setlink(prev,disc)
+ end
+ if next then
+ setlink(replacetail,next)
+ if k_run(replacetail,"replaceinjections",next,font,attr,...) then
+ done=true
+ end
+ setnext(replacetail)
+ setlink(disc,next)
+ end
+ elseif prev and next then
+ setlink(prev,next)
+ if k_run(prevmarks,"emptyinjections",next,font,attr,...) then
+ done=true
+ end
+ setlink(prev,disc,next)
+ end
+ return nextstart,done
+end
+local function comprun(disc,c_run,...)
+ if trace_compruns then
+ report_disc("comp",disc)
+ end
+ local pre,post,replace=getdisc(disc)
+ local renewed=false
+ if pre then
+ sweepnode=disc
+ sweeptype="pre"
+ local new,done=c_run(pre,...)
+ if done then
+ pre=new
+ renewed=true
+ end
+ end
+ if post then
+ sweepnode=disc
+ sweeptype="post"
+ local new,done=c_run(post,...)
+ if done then
+ post=new
+ renewed=true
+ end
+ end
+ if replace then
+ sweepnode=disc
+ sweeptype="replace"
+ local new,done=c_run(replace,...)
+ if done then
+ replace=new
+ renewed=true
+ end
+ end
+ sweepnode=nil
+ sweeptype=nil
+ if renewed then
+ setdisc(disc,pre,post,replace)
+ end
+ return getnext(disc),renewed
+end
+local function testrun(disc,t_run,c_run,...)
+ if trace_testruns then
+ report_disc("test",disc)
+ end
+ local prev,next=getboth(disc)
+ if not next then
+ return
+ end
+ local pre,post,replace,pretail,posttail,replacetail=getdisc(disc,true)
+ local done=false
+ if (post or replace) and prev then
+ if post then
+ setlink(posttail,next)
+ else
+ post=next
+ end
+ if replace then
+ setlink(replacetail,next)
+ else
+ replace=next
+ end
+ local d_post=t_run(post,next,...)
+ local d_replace=t_run(replace,next,...)
+ if d_post>0 or d_replace>0 then
+ local d=d_replace>d_post and d_replace or d_post
+ local head=getnext(disc)
+ local tail=head
+ for i=1,d do
+ tail=getnext(tail)
+ if getid(tail)==disc_code then
+ head,tail=flattendisk(head,tail)
+ end
+ end
+ local next=getnext(tail)
+ setnext(tail)
+ setprev(head)
+ local new=copy_node_list(head)
+ if posttail then
+ setlink(posttail,head)
+ else
+ post=head
+ end
+ if replacetail then
+ setlink(replacetail,new)
+ else
+ replace=new
+ end
+ setlink(disc,next)
+ else
+ if posttail then
+ setnext(posttail)
+ else
+ post=nil
+ end
+ setnext(replacetail)
+ if replacetail then
+ setnext(replacetail)
+ else
+ replace=nil
+ end
+ setprev(next,disc)
+ end
+ end
+ local renewed=false
+ if pre then
+ sweepnode=disc
+ sweeptype="pre"
+ local new,ok=c_run(pre,...)
+ if ok then
+ pre=new
+ renewed=true
+ end
+ end
+ if post then
+ sweepnode=disc
+ sweeptype="post"
+ local new,ok=c_run(post,...)
+ if ok then
+ post=new
+ renewed=true
+ end
+ end
+ if replace then
+ sweepnode=disc
+ sweeptype="replace"
+ local new,ok=c_run(replace,...)
+ if ok then
+ replace=new
+ renewed=true
+ end
+ end
+ sweepnode=nil
+ sweeptype=nil
+ if renewed then
+ setdisc(disc,pre,post,replace)
+ return next,true
+ else
+ return next,done
+ end
+end
+local nesting=0
+local function c_run_single(head,font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler)
+ local done=false
+ local sweep=sweephead[head]
+ if sweep then
+ start=sweep
+ sweephead[head]=false
+ else
+ start=head
+ end
+ while start do
+ local char=ischar(start,font)
+ if char then
+ local a
+ if attr then
+ a=getattr(start,0)
+ end
+ if not a or (a==attr) then
+ local lookupmatch=lookupcache[char]
+ if lookupmatch then
+ local ok
+ head,start,ok=handler(head,start,dataset,sequence,lookupmatch,rlmode,skiphash,step)
+ if ok then
+ done=true
+ end
+ end
+ if start then
+ start=getnext(start)
+ end
+ else
+ start=getnext(start)
+ end
+ elseif char==false then
+ return head,done
+ elseif sweep then
+ return head,done
+ else
+ start=getnext(start)
+ end
+ end
+ return head,done
+end
+local function t_run_single(start,stop,font,attr,lookupcache)
+ local lastd=nil
+ while start~=stop do
+ local char=ischar(start,font)
+ if char then
+ local a
+ if attr then
+ a=getattr(start,0)
+ end
+ local startnext=getnext(start)
+ if not a or (a==attr) then
+ local lookupmatch=lookupcache[char]
+ if lookupmatch then
+ local s=startnext
+ local ss=nil
+ local sstop=s==stop
+ if not s then
+ s=ss
+ ss=nil
+ end
+ while getid(s)==disc_code do
+ ss=getnext(s)
+ s=getfield(s,"replace")
+ if not s then
+ s=ss
+ ss=nil
+ end
+ end
+ local l=nil
+ local d=0
+ while s do
+ local lg=lookupmatch[getchar(s)]
+ if lg then
+ if sstop then
+ d=1
+ elseif d>0 then
+ d=d+1
+ end
+ l=lg
+ s=getnext(s)
+ sstop=s==stop
+ if not s then
+ s=ss
+ ss=nil
+ end
+ while getid(s)==disc_code do
+ ss=getnext(s)
+ s=getfield(s,"replace")
+ if not s then
+ s=ss
+ ss=nil
+ end
+ end
+ else
+ break
+ end
+ end
+ if l and l.ligature then
+ lastd=d
+ end
+ end
+ else
+ end
+ if lastd then
+ return lastd
+ end
+ start=startnext
+ else
+ break
+ end
+ end
+ return 0
+end
+local function k_run_single(sub,injection,last,font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler)
+ local a
+ if attr then
+ a=getattr(sub,0)
+ end
+ if not a or (a==attr) then
+ for n in traverse_nodes(sub) do
+ if n==last then
+ break
+ end
+ local char=ischar(n)
+ if char then
+ local lookupmatch=lookupcache[char]
+ if lookupmatch then
+ local h,d,ok=handler(sub,n,dataset,sequence,lookupmatch,rlmode,skiphash,step,injection)
+ if ok then
+ return true
+ end
+ end
+ end
+ end
+ end
+end
+local function c_run_multiple(head,font,attr,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler)
+ local done=false
+ local sweep=sweephead[head]
+ if sweep then
+ start=sweep
+ sweephead[head]=false
+ else
+ start=head
+ end
+ while start do
+ local char=ischar(start,font)
+ if char then
+ local a
+ if attr then
+ a=getattr(start,0)
+ end
+ if not a or (a==attr) then
+ for i=1,nofsteps do
+ local step=steps[i]
+ local lookupcache=step.coverage
+ local lookupmatch=lookupcache[char]
+ if lookupmatch then
+ local ok
+ head,start,ok=handler(head,start,dataset,sequence,lookupmatch,rlmode,skiphash,step)
+ if ok then
+ done=true
+ break
+ elseif not start then
+ break
+ end
+ end
+ end
+ if start then
+ start=getnext(start)
+ end
+ else
+ start=getnext(start)
+ end
+ elseif char==false then
+ return head,done
+ elseif sweep then
+ return head,done
+ else
+ start=getnext(start)
+ end
+ end
+ return head,done
+end
+local function t_run_multiple(start,stop,font,attr,steps,nofsteps)
+ local lastd=nil
+ while start~=stop do
+ local char=ischar(start,font)
+ if char then
+ local a
+ if attr then
+ a=getattr(start,0)
+ end
+ local startnext=getnext(start)
+ if not a or (a==attr) then
+ for i=1,nofsteps do
+ local step=steps[i]
+ local lookupcache=step.coverage
+ local lookupmatch=lookupcache[char]
+ if lookupmatch then
+ local s=startnext
+ local ss=nil
+ local sstop=s==stop
+ if not s then
+ s=ss
+ ss=nil
+ end
+ while getid(s)==disc_code do
+ ss=getnext(s)
+ s=getfield(s,"replace")
+ if not s then
+ s=ss
+ ss=nil
+ end
+ end
+ local l=nil
+ local d=0
+ while s do
+ local lg=lookupmatch[getchar(s)]
+ if lg then
+ if sstop then
+ d=1
+ elseif d>0 then
+ d=d+1
+ end
+ l=lg
+ s=getnext(s)
+ sstop=s==stop
+ if not s then
+ s=ss
+ ss=nil
+ end
+ while getid(s)==disc_code do
+ ss=getnext(s)
+ s=getfield(s,"replace")
+ if not s then
+ s=ss
+ ss=nil
+ end
+ end
+ else
+ break
+ end
+ end
+ if l and l.ligature then
+ lastd=d
+ end
+ end
+ end
+ else
+ end
+ if lastd then
+ return lastd
+ end
+ start=startnext
+ else
+ break
+ end
+ end
+ return 0
+end
+local function k_run_multiple(sub,injection,last,font,attr,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler)
+ local a
+ if attr then
+ a=getattr(sub,0)
+ end
+ if not a or (a==attr) then
+ for n in traverse_nodes(sub) do
+ if n==last then
+ break
+ end
+ local char=ischar(n)
+ if char then
+ for i=1,nofsteps do
+ local step=steps[i]
+ local lookupcache=step.coverage
+ local lookupmatch=lookupcache[char]
+ if lookupmatch then
+ local h,d,ok=handler(sub,n,dataset,sequence,lookupmatch,rlmode,skiphash,step,injection)
+ if ok then
+ return true
+ end
+ end
+ end
+ end
+ end
+ end
+end
+local function txtdirstate(start,stack,top,rlparmode)
+ local dir=getdir(start)
+ local new=1
+ if dir=="+TRT" then
+ top=top+1
+ stack[top]=dir
+ new=-1
+ elseif dir=="+TLT" then
+ top=top+1
+ stack[top]=dir
+ elseif dir=="-TRT" or dir=="-TLT" then
+ top=top-1
+ if stack[top]=="+TRT" then
+ new=-1
+ end
+ else
+ new=rlparmode
+ end
+ if trace_directions then
+ report_process("directions after txtdir %a: parmode %a, txtmode %a, level %a",dir,mref(rlparmode),mref(new),top)
+ end
+ return getnext(start),top,new
+end
+local function pardirstate(start)
+ local dir=getdir(start)
+ local new=0
+ if dir=="TLT" then
+ new=1
+ elseif dir=="TRT" then
+ new=-1
+ end
+ if trace_directions then
+ report_process("directions after pardir %a: parmode %a",dir,mref(new))
+ end
+ return getnext(start),new,new
+end
+otf.helpers=otf.helpers or {}
+otf.helpers.txtdirstate=txtdirstate
+otf.helpers.pardirstate=pardirstate
+do
+ local fastdisc=true
+ directives.register("otf.fastdisc",function(v) fastdisc=v end)
+ local otfdataset=nil
+ local getfastdisc={ __index=function(t,k)
+ local v=usesfont(k,currentfont)
+ t[k]=v
+ return v
+ end }
+ local getfastspace={ __index=function(t,k)
+ local v=isspace(k,threshold) or false
+ t[k]=v
+ return v
+ end }
+ function otf.featuresprocessor(head,font,attr,direction,n)
+ local sequences=sequencelists[font]
+ nesting=nesting+1
+ if nesting==1 then
+ currentfont=font
+ tfmdata=fontdata[font]
+ descriptions=tfmdata.descriptions
+ characters=tfmdata.characters
+ local resources=tfmdata.resources
+ marks=resources.marks
+ classes=resources.classes
+ threshold,
+ factor=getthreshold(font)
+ checkmarks=tfmdata.properties.checkmarks
+ if not otfdataset then
+ otfdataset=otf.dataset
+ end
+ discs=fastdisc and n and n>1 and setmetatable({},getfastdisc)
+ spaces=setmetatable({},getfastspace)
+ elseif currentfont~=font then
+ report_warning("nested call with a different font, level %s, quitting",nesting)
+ nesting=nesting-1
+ return head,false
+ end
+ local head=tonut(head)
+ if trace_steps then
+ checkstep(head)
+ end
+ local initialrl=direction=="TRT" and -1 or 0
+ local done=false
+ local datasets=otfdataset(tfmdata,font,attr)
+ local dirstack={}
+ sweephead={}
+ for s=1,#datasets do
+ local dataset=datasets[s]
+ local attribute=dataset[2]
+ local sequence=dataset[3]
+ local rlparmode=initialrl
+ local topstack=0
+ local typ=sequence.type
+ local gpossing=typ=="gpos_single" or typ=="gpos_pair"
+ local handler=handlers[typ]
+ local steps=sequence.steps
+ local nofsteps=sequence.nofsteps
+ local skiphash=sequence.skiphash
+ if not steps then
+ local h,ok=handler(head,dataset,sequence,initialrl,font,attr)
+ if ok then
+ done=true
+ end
+ if h and h~=head then
+ head=h
+ end
+ elseif typ=="gsub_reversecontextchain" then
+ local start=find_node_tail(head)
+ local rlmode=0
+ local merged=steps.merged
+ while start do
+ local char=ischar(start,font)
+ if char then
+ local m=merged[char]
+ if m then
+ local a
+ if attr then
+ a=getattr(start,0)
+ end
+ if not a or (a==attr) then
+ for i=m[1],m[2] do
+ local step=steps[i]
+ local lookupcache=step.coverage
+ local lookupmatch=lookupcache[char]
+ if lookupmatch then
+ local ok
+ head,start,ok=handler(head,start,dataset,sequence,lookupmatch,rlmode,skiphash,step)
+ if ok then
+ done=true
+ break
+ end
+ end
+ end
+ if start then
+ start=getprev(start)
+ end
+ else
+ start=getprev(start)
+ end
+ else
+ start=getprev(start)
+ end
+ else
+ start=getprev(start)
+ end
+ end
+ else
+ local start=head
+ local rlmode=initialrl
+ if nofsteps==1 then
+ local step=steps[1]
+ local lookupcache=step.coverage
+ while start do
+ local char,id=ischar(start,font)
+ if char then
+ if skiphash and skiphash[char] then
+ start=getnext(start)
+ else
+ local lookupmatch=lookupcache[char]
+ if lookupmatch then
+ local a
+ if attr then
+ if getattr(start,0)==attr and (not attribute or getprop(start,a_state)==attribute) then
+ a=true
+ end
+ elseif not attribute or getprop(start,a_state)==attribute then
+ a=true
+ end
+ if a then
+ local ok
+ head,start,ok=handler(head,start,dataset,sequence,lookupmatch,rlmode,skiphash,step)
+ if ok then
+ done=true
+ end
+ if start then
+ start=getnext(start)
+ end
+ else
+ start=getnext(start)
+ end
+ else
+ start=getnext(start)
+ end
+ end
+ elseif char==false or id==glue_code then
+ start=getnext(start)
+ elseif id==disc_code then
+ if not discs or discs[start]==true then
+ local ok
+ if gpossing then
+ start,ok=kernrun(start,k_run_single,font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler)
+ elseif typ=="gsub_ligature" then
+ start,ok=testrun(start,t_run_single,c_run_single,font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler)
+ else
+ start,ok=comprun(start,c_run_single,font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler)
+ end
+ if ok then
+ done=true
+ end
+ else
+ start=getnext(start)
+ end
+ elseif id==math_code then
+ start=getnext(end_of_math(start))
+ elseif id==dir_code then
+ start,topstack,rlmode=txtdirstate(start,dirstack,topstack,rlparmode)
+ elseif id==localpar_code then
+ start,rlparmode,rlmode=pardirstate(start)
+ else
+ start=getnext(start)
+ end
+ end
+ else
+ local merged=steps.merged
+ while start do
+ local char,id=ischar(start,font)
+ if char then
+ if skiphash and skiphash[char] then
+ start=getnext(start)
+ else
+ local m=merged[char]
+ if m then
+ local a
+ if attr then
+ if getattr(start,0)==attr and (not attribute or getprop(start,a_state)==attribute) then
+ a=true
+ end
+ elseif not attribute or getprop(start,a_state)==attribute then
+ a=true
+ end
+ if a then
+ for i=m[1],m[2] do
+ local step=steps[i]
+ local lookupcache=step.coverage
+ local lookupmatch=lookupcache[char]
+ if lookupmatch then
+ local ok
+ head,start,ok=handler(head,start,dataset,sequence,lookupmatch,rlmode,skiphash,step)
+ if ok then
+ done=true
+ break
+ elseif not start then
+ break
+ end
+ end
+ end
+ if start then
+ start=getnext(start)
+ end
+ else
+ start=getnext(start)
+ end
+ else
+ start=getnext(start)
+ end
+ end
+ elseif char==false or id==glue_code then
+ start=getnext(start)
+ elseif id==disc_code then
+ if not discs or discs[start]==true then
+ local ok
+ if gpossing then
+ start,ok=kernrun(start,k_run_multiple,font,attr,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler)
+ elseif typ=="gsub_ligature" then
+ start,ok=testrun(start,t_run_multiple,c_run_multiple,font,attr,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler)
+ else
+ start,ok=comprun(start,c_run_multiple,font,attr,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler)
+ end
+ if ok then
+ done=true
+ end
+ else
+ start=getnext(start)
+ end
+ elseif id==math_code then
+ start=getnext(end_of_math(start))
+ elseif id==dir_code then
+ start,topstack,rlmode=txtdirstate(start,dirstack,topstack,rlparmode)
+ elseif id==localpar_code then
+ start,rlparmode,rlmode=pardirstate(start)
+ else
+ start=getnext(start)
+ end
+ end
+ end
+ end
+ if trace_steps then
+ registerstep(head)
+ end
+ end
+ nesting=nesting-1
+ head=tonode(head)
+ return head,done
+ end
+ function otf.datasetpositionprocessor(head,font,direction,dataset)
+ currentfont=font
+ tfmdata=fontdata[font]
+ descriptions=tfmdata.descriptions
+ characters=tfmdata.characters
+ local resources=tfmdata.resources
+ marks=resources.marks
+ classes=resources.classes
+ threshold,
+ factor=getthreshold(font)
+ checkmarks=tfmdata.properties.checkmarks
+ if type(dataset)=="number" then
+ dataset=otfdataset(tfmdata,font,0)[dataset]
+ end
+ local sequence=dataset[3]
+ local typ=sequence.type
+ local handler=handlers[typ]
+ local steps=sequence.steps
+ local nofsteps=sequence.nofsteps
+ local head=tonut(head)
+ local done=false
+ local dirstack={}
+ local start=head
+ local initialrl=direction=="TRT" and -1 or 0
+ local rlmode=initialrl
+ local rlparmode=initialrl
+ local topstack=0
+ local merged=steps.merged
+ local position=0
+ while start do
+ local char,id=ischar(start,font)
+ if char then
+ position=position+1
+ local m=merged[char]
+ if m then
+ if skiphash and skiphash[char] then
+ start=getnext(start)
+ else
+ for i=m[1],m[2] do
+ local step=steps[i]
+ local lookupcache=step.coverage
+ local lookupmatch=lookupcache[char]
+ if lookupmatch then
+ local ok
+ head,start,ok=handler(head,start,dataset,sequence,lookupmatch,rlmode,skiphash,step)
+ if ok then
+ break
+ elseif not start then
+ break
+ end
+ end
+ end
+ if start then
+ start=getnext(start)
+ end
+ end
+ else
+ start=getnext(start)
+ end
+ elseif char==false or id==glue_code then
+ start=getnext(start)
+ elseif id==math_code then
+ start=getnext(end_of_math(start))
+ elseif id==dir_code then
+ start,topstack,rlmode=txtdirstate(start,dirstack,topstack,rlparmode)
+ elseif id==localpar_code then
+ start,rlparmode,rlmode=pardirstate(start)
+ else
+ start=getnext(start)
+ end
+ end
+ return tonode(head)
+ end
+end
+local plugins={}
+otf.plugins=plugins
+function otf.registerplugin(name,f)
+ if type(name)=="string" and type(f)=="function" then
+ plugins[name]={ name,f }
+ end
+end
+function otf.plugininitializer(tfmdata,value)
+ if type(value)=="string" then
+ tfmdata.shared.plugin=plugins[value]
+ end
+end
+function otf.pluginprocessor(head,font,attr,direction)
+ local s=fontdata[font].shared
+ local p=s and s.plugin
+ if p then
+ if trace_plugins then
+ report_process("applying plugin %a",p[1])
+ end
+ return p[2](head,font,attr,direction)
+ else
+ return head,false
+ end
+end
+function otf.featuresinitializer(tfmdata,value)
+end
+registerotffeature {
+ name="features",
+ description="features",
+ default=true,
+ initializers={
+ position=1,
+ node=otf.featuresinitializer,
+ plug=otf.plugininitializer,
+ },
+ processors={
+ node=otf.featuresprocessor,
+ plug=otf.pluginprocessor,
+ }
+}
+otf.handlers=handlers
+local setspacekerns=nodes.injections.setspacekerns if not setspacekerns then os.exit() end
+local tag="kern"
+if fontfeatures then
+ function handlers.trigger_space_kerns(head,dataset,sequence,initialrl,font,attr)
+ local features=fontfeatures[font]
+ local enabled=features and features.spacekern and features[tag]
+ if enabled then
+ setspacekerns(font,sequence)
+ end
+ return head,enabled
+ end
+else
+ function handlers.trigger_space_kerns(head,dataset,sequence,initialrl,font,attr)
+ local shared=fontdata[font].shared
+ local features=shared and shared.features
+ local enabled=features and features.spacekern and features[tag]
+ if enabled then
+ setspacekerns(font,sequence)
+ end
+ return head,enabled
+ end
+end
+local function hasspacekerns(data)
+ local resources=data.resources
+ local sequences=resources.sequences
+ local validgpos=resources.features.gpos
+ if validgpos and sequences then
+ for i=1,#sequences do
+ local sequence=sequences[i]
+ local steps=sequence.steps
+ if steps and sequence.features[tag] then
+ local kind=sequence.type
+ if kind=="gpos_pair" or kind=="gpos_single" then
+ for i=1,#steps do
+ local step=steps[i]
+ local coverage=step.coverage
+ local rules=step.rules
+ if rules then
+ elseif not coverage then
+ elseif kind=="gpos_single" then
+ elseif kind=="gpos_pair" then
+ local format=step.format
+ if format=="move" or format=="kern" then
+ local kerns=coverage[32]
+ if kerns then
+ return true
+ end
+ for k,v in next,coverage do
+ if v[32] then
+ return true
+ end
+ end
+ elseif format=="pair" then
+ local kerns=coverage[32]
+ if kerns then
+ for k,v in next,kerns do
+ local one=v[1]
+ if one and one~=true then
+ return true
+ end
+ end
+ end
+ for k,v in next,coverage do
+ local kern=v[32]
+ if kern then
+ local one=kern[1]
+ if one and one~=true then
+ return true
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ return false
+end
+otf.readers.registerextender {
+ name="spacekerns",
+ action=function(data)
+ data.properties.hasspacekerns=hasspacekerns(data)
+ end
+}
+local function spaceinitializer(tfmdata,value)
+ local resources=tfmdata.resources
+ local spacekerns=resources and resources.spacekerns
+ if value and spacekerns==nil then
+ local rawdata=tfmdata.shared and tfmdata.shared.rawdata
+ local properties=rawdata.properties
+ if properties and properties.hasspacekerns then
+ local sequences=resources.sequences
+ local validgpos=resources.features.gpos
+ if validgpos and sequences then
+ local left={}
+ local right={}
+ local last=0
+ local feat=nil
+ for i=1,#sequences do
+ local sequence=sequences[i]
+ local steps=sequence.steps
+ if steps then
+ local kern=sequence.features[tag]
+ if kern then
+ local kind=sequence.type
+ if kind=="gpos_pair" or kind=="gpos_single" then
+ if feat then
+ for script,languages in next,kern do
+ local f=feat[script]
+ if f then
+ for l in next,languages do
+ f[l]=true
+ end
+ else
+ feat[script]=languages
+ end
+ end
+ else
+ feat=kern
+ end
+ for i=1,#steps do
+ local step=steps[i]
+ local coverage=step.coverage
+ local rules=step.rules
+ if rules then
+ elseif not coverage then
+ elseif kind=="gpos_single" then
+ elseif kind=="gpos_pair" then
+ local format=step.format
+ if format=="move" or format=="kern" then
+ local kerns=coverage[32]
+ if kerns then
+ for k,v in next,kerns do
+ right[k]=v
+ end
+ end
+ for k,v in next,coverage do
+ local kern=v[32]
+ if kern then
+ left[k]=kern
+ end
+ end
+ elseif format=="pair" then
+ local kerns=coverage[32]
+ if kerns then
+ for k,v in next,kerns do
+ local one=v[1]
+ if one and one~=true then
+ right[k]=one[3]
+ end
+ end
+ end
+ for k,v in next,coverage do
+ local kern=v[32]
+ if kern then
+ local one=kern[1]
+ if one and one~=true then
+ left[k]=one[3]
+ end
+ end
+ end
+ end
+ end
+ end
+ last=i
+ end
+ else
+ end
+ end
+ end
+ left=next(left) and left or false
+ right=next(right) and right or false
+ if left or right then
+ spacekerns={
+ left=left,
+ right=right,
+ }
+ if last>0 then
+ local triggersequence={
+ features={ [tag]=feat or { dflt={ dflt=true,} } },
+ flags=noflags,
+ name="trigger_space_kerns",
+ order={ tag },
+ type="trigger_space_kerns",
+ left=left,
+ right=right,
+ }
+ insert(sequences,last,triggersequence)
+ end
+ end
+ end
+ end
+ resources.spacekerns=spacekerns
+ end
+ return spacekerns
+end
+registerotffeature {
+ name="spacekern",
+ description="space kern injection",
+ default=true,
+ initializers={
+ node=spaceinitializer,
+ },
+}
+local function markinitializer(tfmdata,value)
+ local properties=tfmdata.properties
+ properties.checkmarks=value
+end
+registerotffeature {
+ name="checkmarks",
+ description="check mark widths",
+ default=true,
+ initializers={
+ node=markinitializer,
+ },
+}
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-osd']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Kai Eigner, TAT Zetwerk / Hans Hagen, PRAGMA ADE",
+ copyright="TAT Zetwerk / PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local insert,imerge,copy=table.insert,table.imerge,table.copy
+local next,type=next,type
+local report_devanagari=logs.reporter("otf","devanagari")
+fonts=fonts or {}
+fonts.analyzers=fonts.analyzers or {}
+fonts.analyzers.methods=fonts.analyzers.methods or { node={ otf={} } }
+local otf=fonts.handlers.otf
+local handlers=otf.handlers
+local methods=fonts.analyzers.methods
+local otffeatures=fonts.constructors.features.otf
+local registerotffeature=otffeatures.register
+local nuts=nodes.nuts
+local tonode=nuts.tonode
+local tonut=nuts.tonut
+local getnext=nuts.getnext
+local getprev=nuts.getprev
+local getboth=nuts.getboth
+local getid=nuts.getid
+local getchar=nuts.getchar
+local getfont=nuts.getfont
+local getsubtype=nuts.getsubtype
+local setlink=nuts.setlink
+local setnext=nuts.setnext
+local setprev=nuts.setprev
+local setchar=nuts.setchar
+local getprop=nuts.getprop
+local setprop=nuts.setprop
+local ischar=nuts.is_char
+local insert_node_after=nuts.insert_after
+local copy_node=nuts.copy
+local remove_node=nuts.remove
+local flush_list=nuts.flush_list
+local flush_node=nuts.flush_node
+local copyinjection=nodes.injections.copy
+local unsetvalue=attributes.unsetvalue
+local fontdata=fonts.hashes.identifiers
+local a_state=attributes.private('state')
+local a_syllabe=attributes.private('syllabe')
+local dotted_circle=0x25CC
+local states=fonts.analyzers.states
+local s_rphf=states.rphf
+local s_half=states.half
+local s_pref=states.pref
+local s_blwf=states.blwf
+local s_pstf=states.pstf
+local replace_all_nbsp=nil
+replace_all_nbsp=function(head)
+ replace_all_nbsp=typesetters and typesetters.characters and typesetters.characters.replacenbspaces or function(head)
+ return head
+ end
+ return replace_all_nbsp(head)
+end
+local xprocesscharacters=nil
+if context then
+ xprocesscharacters=function(head,font)
+ xprocesscharacters=nodes.handlers.characters
+ return xprocesscharacters(head,font)
+ end
+else
+ xprocesscharacters=function(head,font)
+ xprocesscharacters=nodes.handlers.nodepass
+ return xprocesscharacters(head,font)
+ end
+end
+local function processcharacters(head,font)
+ return tonut(xprocesscharacters(tonode(head)))
+end
+local consonant={
+ [0x0915]=true,[0x0916]=true,[0x0917]=true,[0x0918]=true,
+ [0x0919]=true,[0x091A]=true,[0x091B]=true,[0x091C]=true,
+ [0x091D]=true,[0x091E]=true,[0x091F]=true,[0x0920]=true,
+ [0x0921]=true,[0x0922]=true,[0x0923]=true,[0x0924]=true,
+ [0x0925]=true,[0x0926]=true,[0x0927]=true,[0x0928]=true,
+ [0x0929]=true,[0x092A]=true,[0x092B]=true,[0x092C]=true,
+ [0x092D]=true,[0x092E]=true,[0x092F]=true,[0x0930]=true,
+ [0x0931]=true,[0x0932]=true,[0x0933]=true,[0x0934]=true,
+ [0x0935]=true,[0x0936]=true,[0x0937]=true,[0x0938]=true,
+ [0x0939]=true,[0x0958]=true,[0x0959]=true,[0x095A]=true,
+ [0x095B]=true,[0x095C]=true,[0x095D]=true,[0x095E]=true,
+ [0x095F]=true,[0x0979]=true,[0x097A]=true,
+ [0x0C95]=true,[0x0C96]=true,[0x0C97]=true,[0x0C98]=true,
+ [0x0C99]=true,[0x0C9A]=true,[0x0C9B]=true,[0x0C9C]=true,
+ [0x0C9D]=true,[0x0C9E]=true,[0x0C9F]=true,[0x0CA0]=true,
+ [0x0CA1]=true,[0x0CA2]=true,[0x0CA3]=true,[0x0CA4]=true,
+ [0x0CA5]=true,[0x0CA6]=true,[0x0CA7]=true,[0x0CA8]=true,
+ [0x0CA9]=true,[0x0CAA]=true,[0x0CAB]=true,[0x0CAC]=true,
+ [0x0CAD]=true,[0x0CAE]=true,[0x0CAF]=true,[0x0CB0]=true,
+ [0x0CB1]=true,[0x0CB2]=true,[0x0CB3]=true,[0x0CB4]=true,
+ [0x0CB5]=true,[0x0CB6]=true,[0x0CB7]=true,[0x0CB8]=true,
+ [0x0CB9]=true,
+ [0x0CDE]=true,
+ [0x0D15]=true,[0x0D16]=true,[0x0D17]=true,[0x0D18]=true,
+ [0x0D19]=true,[0x0D1A]=true,[0x0D1B]=true,[0x0D1C]=true,
+ [0x0D1D]=true,[0x0D1E]=true,[0x0D1F]=true,[0x0D20]=true,
+ [0x0D21]=true,[0x0D22]=true,[0x0D23]=true,[0x0D24]=true,
+ [0x0D25]=true,[0x0D26]=true,[0x0D27]=true,[0x0D28]=true,
+ [0x0D29]=true,[0x0D2A]=true,[0x0D2B]=true,[0x0D2C]=true,
+ [0x0D2D]=true,[0x0D2E]=true,[0x0D2F]=true,[0x0D30]=true,
+ [0x0D31]=true,[0x0D32]=true,[0x0D33]=true,[0x0D34]=true,
+ [0x0D35]=true,[0x0D36]=true,[0x0D37]=true,[0x0D38]=true,
+ [0x0D39]=true,[0x0D3A]=true,
+}
+local independent_vowel={
+ [0x0904]=true,[0x0905]=true,[0x0906]=true,[0x0907]=true,
+ [0x0908]=true,[0x0909]=true,[0x090A]=true,[0x090B]=true,
+ [0x090C]=true,[0x090D]=true,[0x090E]=true,[0x090F]=true,
+ [0x0910]=true,[0x0911]=true,[0x0912]=true,[0x0913]=true,
+ [0x0914]=true,[0x0960]=true,[0x0961]=true,[0x0972]=true,
+ [0x0973]=true,[0x0974]=true,[0x0975]=true,[0x0976]=true,
+ [0x0977]=true,
+ [0x0C85]=true,[0x0C86]=true,[0x0C87]=true,[0x0C88]=true,
+ [0x0C89]=true,[0x0C8A]=true,[0x0C8B]=true,[0x0C8C]=true,
+ [0x0C8D]=true,[0x0C8E]=true,[0x0C8F]=true,[0x0C90]=true,
+ [0x0C91]=true,[0x0C92]=true,[0x0C93]=true,[0x0C94]=true,
+ [0x0D05]=true,[0x0D06]=true,[0x0D07]=true,[0x0D08]=true,
+ [0x0D09]=true,[0x0D0A]=true,[0x0D0B]=true,[0x0D0C]=true,
+ [0x0D0E]=true,[0x0D0F]=true,[0x0D10]=true,[0x0D12]=true,
+ [0x0D13]=true,[0x0D14]=true,
+}
+local dependent_vowel={
+ [0x093A]=true,[0x093B]=true,[0x093E]=true,[0x093F]=true,
+ [0x0940]=true,[0x0941]=true,[0x0942]=true,[0x0943]=true,
+ [0x0944]=true,[0x0945]=true,[0x0946]=true,[0x0947]=true,
+ [0x0948]=true,[0x0949]=true,[0x094A]=true,[0x094B]=true,
+ [0x094C]=true,[0x094E]=true,[0x094F]=true,[0x0955]=true,
+ [0x0956]=true,[0x0957]=true,[0x0962]=true,[0x0963]=true,
+ [0x0CBE]=true,[0x0CBF]=true,[0x0CC0]=true,[0x0CC1]=true,
+ [0x0CC2]=true,[0x0CC3]=true,[0x0CC4]=true,[0x0CC5]=true,
+ [0x0CC6]=true,[0x0CC7]=true,[0x0CC8]=true,[0x0CC9]=true,
+ [0x0CCA]=true,[0x0CCB]=true,[0x0CCC]=true,
+ [0x0D3E]=true,[0x0D3F]=true,[0x0D40]=true,[0x0D41]=true,
+ [0x0D42]=true,[0x0D43]=true,[0x0D44]=true,[0x0D46]=true,
+ [0x0D47]=true,[0x0D48]=true,[0x0D4A]=true,[0x0D4B]=true,
+ [0x0D4C]=true,[0x0D57]=true,
+}
+local vowel_modifier={
+ [0x0900]=true,[0x0901]=true,[0x0902]=true,[0x0903]=true,
+ [0xA8E0]=true,[0xA8E1]=true,[0xA8E2]=true,[0xA8E3]=true,
+ [0xA8E4]=true,[0xA8E5]=true,[0xA8E6]=true,[0xA8E7]=true,
+ [0xA8E8]=true,[0xA8E9]=true,[0xA8EA]=true,[0xA8EB]=true,
+ [0xA8EC]=true,[0xA8ED]=true,[0xA8EE]=true,[0xA8EF]=true,
+ [0xA8F0]=true,[0xA8F1]=true,
+ [0x0D02]=true,[0x0D03]=true,
+}
+local stress_tone_mark={
+ [0x0951]=true,[0x0952]=true,[0x0953]=true,[0x0954]=true,
+ [0x0CCD]=true,
+ [0x0D4D]=true,
+}
+local nukta={
+ [0x093C]=true,
+ [0x0CBC]=true,
+}
+local halant={
+ [0x094D]=true,
+ [0x0CCD]=true,
+ [0x0D4D]=true,
+}
+local ra={
+ [0x0930]=true,
+ [0x0CB0]=true,
+ [0x0D30]=true,
+}
+local c_anudatta=0x0952
+local c_nbsp=0x00A0
+local c_zwnj=0x200C
+local c_zwj=0x200D
+local zw_char={
+ [0x200C]=true,
+ [0x200D]=true,
+}
+local pre_mark={
+ [0x093F]=true,[0x094E]=true,
+ [0x0D46]=true,[0x0D47]=true,[0x0D48]=true,
+}
+local above_mark={
+ [0x0900]=true,[0x0901]=true,[0x0902]=true,[0x093A]=true,
+ [0x0945]=true,[0x0946]=true,[0x0947]=true,[0x0948]=true,
+ [0x0951]=true,[0x0953]=true,[0x0954]=true,[0x0955]=true,
+ [0xA8E0]=true,[0xA8E1]=true,[0xA8E2]=true,[0xA8E3]=true,
+ [0xA8E4]=true,[0xA8E5]=true,[0xA8E6]=true,[0xA8E7]=true,
+ [0xA8E8]=true,[0xA8E9]=true,[0xA8EA]=true,[0xA8EB]=true,
+ [0xA8EC]=true,[0xA8ED]=true,[0xA8EE]=true,[0xA8EF]=true,
+ [0xA8F0]=true,[0xA8F1]=true,
+ [0x0D4E]=true,
+}
+local below_mark={
+ [0x093C]=true,[0x0941]=true,[0x0942]=true,[0x0943]=true,
+ [0x0944]=true,[0x094D]=true,[0x0952]=true,[0x0956]=true,
+ [0x0957]=true,[0x0962]=true,[0x0963]=true,
+}
+local post_mark={
+ [0x0903]=true,[0x093B]=true,[0x093E]=true,[0x0940]=true,
+ [0x0949]=true,[0x094A]=true,[0x094B]=true,[0x094C]=true,
+ [0x094F]=true,
+}
+local twopart_mark={
+ [0x0D4A]={ 0x0D46,0x0D3E,},
+ [0x0D4B]={ 0x0D47,0x0D3E,},
+ [0x0D4C]={ 0x0D46,0x0D57,},
+}
+local mark_four={}
+for k,v in next,pre_mark do mark_four[k]=pre_mark end
+for k,v in next,above_mark do mark_four[k]=above_mark end
+for k,v in next,below_mark do mark_four[k]=below_mark end
+for k,v in next,post_mark do mark_four[k]=post_mark end
+local mark_above_below_post={}
+for k,v in next,above_mark do mark_above_below_post[k]=above_mark end
+for k,v in next,below_mark do mark_above_below_post[k]=below_mark end
+for k,v in next,post_mark do mark_above_below_post[k]=post_mark end
+local reorder_class={
+ [0x0930]="before postscript",
+ [0x093F]="before half",
+ [0x0940]="after subscript",
+ [0x0941]="after subscript",
+ [0x0942]="after subscript",
+ [0x0943]="after subscript",
+ [0x0944]="after subscript",
+ [0x0945]="after subscript",
+ [0x0946]="after subscript",
+ [0x0947]="after subscript",
+ [0x0948]="after subscript",
+ [0x0949]="after subscript",
+ [0x094A]="after subscript",
+ [0x094B]="after subscript",
+ [0x094C]="after subscript",
+ [0x0962]="after subscript",
+ [0x0963]="after subscript",
+ [0x093E]="after subscript",
+ [0x0CB0]="after postscript",
+ [0x0CBF]="before subscript",
+ [0x0CC6]="before subscript",
+ [0x0CCC]="before subscript",
+ [0x0CBE]="before subscript",
+ [0x0CE2]="before subscript",
+ [0x0CE3]="before subscript",
+ [0x0CC1]="before subscript",
+ [0x0CC2]="before subscript",
+ [0x0CC3]="after subscript",
+ [0x0CC4]="after subscript",
+ [0x0CD5]="after subscript",
+ [0x0CD6]="after subscript",
+}
+local dflt_true={
+ dflt=true
+}
+local dev2_defaults={
+ dev2=dflt_true,
+}
+local deva_defaults={
+ dev2=dflt_true,
+ deva=dflt_true,
+}
+local false_flags={ false,false,false,false }
+local both_joiners_true={
+ [0x200C]=true,
+ [0x200D]=true,
+}
+local sequence_reorder_matras={
+ features={ dv01=dev2_defaults },
+ flags=false_flags,
+ name="dv01_reorder_matras",
+ order={ "dv01" },
+ type="devanagari_reorder_matras",
+ nofsteps=1,
+ steps={
+ {
+ coverage=pre_mark,
+ }
+ }
+}
+local sequence_reorder_reph={
+ features={ dv02=dev2_defaults },
+ flags=false_flags,
+ name="dv02_reorder_reph",
+ order={ "dv02" },
+ type="devanagari_reorder_reph",
+ nofsteps=1,
+ steps={
+ {
+ coverage={},
+ }
+ }
+}
+local sequence_reorder_pre_base_reordering_consonants={
+ features={ dv03=dev2_defaults },
+ flags=false_flags,
+ name="dv03_reorder_pre_base_reordering_consonants",
+ order={ "dv03" },
+ type="devanagari_reorder_pre_base_reordering_consonants",
+ nofsteps=1,
+ steps={
+ {
+ coverage={},
+ }
+ }
+}
+local sequence_remove_joiners={
+ features={ dv04=deva_defaults },
+ flags=false_flags,
+ name="dv04_remove_joiners",
+ order={ "dv04" },
+ type="devanagari_remove_joiners",
+ nofsteps=1,
+ steps={
+ {
+ coverage=both_joiners_true,
+ },
+ }
+}
+local basic_shaping_forms={
+ nukt=true,
+ akhn=true,
+ rphf=true,
+ pref=true,
+ rkrf=true,
+ blwf=true,
+ half=true,
+ pstf=true,
+ vatu=true,
+ cjct=true,
+}
+local valid={
+ akhn=true,
+ rphf=true,
+ pref=true,
+ half=true,
+ blwf=true,
+ pstf=true,
+ pres=true,
+ blws=true,
+ psts=true,
+}
+local function initializedevanagi(tfmdata)
+ local script,language=otf.scriptandlanguage(tfmdata,attr)
+ if script=="deva" or script=="dev2" or script=="mlym" or script=="mlm2" then
+ local resources=tfmdata.resources
+ local devanagari=resources.devanagari
+ if not devanagari then
+ report_devanagari("adding devanagari features to font")
+ local gsubfeatures=resources.features.gsub
+ local sequences=resources.sequences
+ local sharedfeatures=tfmdata.shared.features
+ local lastmatch=0
+ for s=1,#sequences do
+ local features=sequences[s].features
+ if features then
+ for k,v in next,features do
+ if basic_shaping_forms[k] then
+ lastmatch=s
+ end
+ end
+ end
+ end
+ local insertindex=lastmatch+1
+ gsubfeatures["dv01"]=dev2_defaults
+ gsubfeatures["dv02"]=dev2_defaults
+ gsubfeatures["dv03"]=dev2_defaults
+ gsubfeatures["dv04"]=deva_defaults
+ local reorder_pre_base_reordering_consonants=copy(sequence_reorder_pre_base_reordering_consonants)
+ local reorder_reph=copy(sequence_reorder_reph)
+ local reorder_matras=copy(sequence_reorder_matras)
+ local remove_joiners=copy(sequence_remove_joiners)
+ insert(sequences,insertindex,reorder_pre_base_reordering_consonants)
+ insert(sequences,insertindex,reorder_reph)
+ insert(sequences,insertindex,reorder_matras)
+ insert(sequences,insertindex,remove_joiners)
+ local blwfcache={}
+ local seqsubset={}
+ local rephstep={
+ coverage={}
+ }
+ local devanagari={
+ reph=false,
+ vattu=false,
+ blwfcache=blwfcache,
+ seqsubset=seqsubset,
+ reorderreph=rephstep,
+ }
+ reorder_reph.steps={ rephstep }
+ local pre_base_reordering_consonants={}
+ reorder_pre_base_reordering_consonants.steps[1].coverage=pre_base_reordering_consonants
+ resources.devanagari=devanagari
+ for s=1,#sequences do
+ local sequence=sequences[s]
+ local steps=sequence.steps
+ local nofsteps=sequence.nofsteps
+ local features=sequence.features
+ local has_rphf=features.rphf
+ local has_blwf=features.blwf
+ if has_rphf and has_rphf.deva then
+ devanagari.reph=true
+ elseif has_blwf and has_blwf.deva then
+ devanagari.vattu=true
+ for i=1,nofsteps do
+ local step=steps[i]
+ local coverage=step.coverage
+ if coverage then
+ for k,v in next,coverage do
+ if not blwfcache[k] then
+ blwfcache[k]=v
+ end
+ end
+ end
+ end
+ end
+ for kind,spec in next,features do
+ if spec.dev2 and valid[kind] then
+ for i=1,nofsteps do
+ local step=steps[i]
+ local coverage=step.coverage
+ if coverage then
+ local reph=false
+ if kind=="rphf" then
+ for k,v in next,ra do
+ local r=coverage[k]
+ if r then
+ local h=false
+ for k,v in next,halant do
+ local h=r[k]
+ if h then
+ reph=h.ligature or false
+ break
+ end
+ end
+ if reph then
+ break
+ end
+ end
+ end
+ end
+ seqsubset[#seqsubset+1]={ kind,coverage,reph }
+ end
+ end
+ end
+ if kind=="pref" then
+ local steps=sequence.steps
+ local nofsteps=sequence.nofsteps
+ for i=1,nofsteps do
+ local step=steps[i]
+ local coverage=step.coverage
+ if coverage then
+ for k,v in next,halant do
+ local h=coverage[k]
+ if h then
+ local found=false
+ for k,v in next,h do
+ found=v and v.ligature
+ if found then
+ pre_base_reordering_consonants[k]=found
+ break
+ end
+ end
+ if found then
+ break
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ if script=="deva" then
+ sharedfeatures["dv04"]=true
+ elseif script=="dev2" then
+ sharedfeatures["dv01"]=true
+ sharedfeatures["dv02"]=true
+ sharedfeatures["dv03"]=true
+ sharedfeatures["dv04"]=true
+ elseif script=="mlym" then
+ sharedfeatures["pstf"]=true
+ elseif script=="mlm2" then
+ sharedfeatures["pstf"]=true
+ sharedfeatures["pref"]=true
+ sharedfeatures["dv03"]=true
+ gsubfeatures ["dv03"]=dev2_defaults
+ insert(sequences,insertindex,sequence_reorder_pre_base_reordering_consonants)
+ end
+ end
+ end
+end
+registerotffeature {
+ name="devanagari",
+ description="inject additional features",
+ default=true,
+ initializers={
+ node=initializedevanagi,
+ },
+}
+local function deva_initialize(font,attr)
+ local tfmdata=fontdata[font]
+ local datasets=otf.dataset(tfmdata,font,attr)
+ local devanagaridata=datasets.devanagari
+ if not devanagaridata then
+ devanagaridata={
+ reph=false,
+ vattu=false,
+ blwfcache={},
+ }
+ datasets.devanagari=devanagaridata
+ local resources=tfmdata.resources
+ local devanagari=resources.devanagari
+ for s=1,#datasets do
+ local dataset=datasets[s]
+ if dataset and dataset[1] then
+ local kind=dataset[4]
+ if kind=="rphf" then
+ devanagaridata.reph=true
+ elseif kind=="blwf" then
+ devanagaridata.vattu=true
+ devanagaridata.blwfcache=devanagari.blwfcache
+ end
+ end
+ end
+ end
+ return devanagaridata.reph,devanagaridata.vattu,devanagaridata.blwfcache
+end
+local function deva_reorder(head,start,stop,font,attr,nbspaces)
+ local reph,vattu,blwfcache=deva_initialize(font,attr)
+ local current=start
+ local n=getnext(start)
+ local base=nil
+ local firstcons=nil
+ local lastcons=nil
+ local basefound=false
+ if reph and ra[getchar(start)] and halant[getchar(n)] then
+ if n==stop then
+ return head,stop,nbspaces
+ end
+ if getchar(getnext(n))==c_zwj then
+ current=start
+ else
+ current=getnext(n)
+ setprop(start,a_state,s_rphf)
+ end
+ end
+ if getchar(current)==c_nbsp then
+ if current==stop then
+ stop=getprev(stop)
+ head=remove_node(head,current)
+ flush_node(current)
+ return head,stop,nbspaces
+ else
+ nbspaces=nbspaces+1
+ base=current
+ firstcons=current
+ lastcons=current
+ current=getnext(current)
+ if current~=stop then
+ if nukta[getchar(current)] then
+ current=getnext(current)
+ end
+ if getchar(current)==c_zwj then
+ if current~=stop then
+ local next=getnext(current)
+ if next~=stop and halant[getchar(next)] then
+ current=next
+ next=getnext(current)
+ local tmp=next and getnext(next) or nil
+ local changestop=next==stop
+ local tempcurrent=copy_node(next)
+ copyinjection(tempcurrent,next)
+ local nextcurrent=copy_node(current)
+ copyinjection(nextcurrent,current)
+ setlink(tempcurrent,nextcurrent)
+ setprop(tempcurrent,a_state,s_blwf)
+ tempcurrent=processcharacters(tempcurrent,font)
+ setprop(tempcurrent,a_state,unsetvalue)
+ if getchar(next)==getchar(tempcurrent) then
+ flush_list(tempcurrent)
+ local n=copy_node(current)
+ copyinjection(n,current)
+ setchar(current,dotted_circle)
+ head=insert_node_after(head,current,n)
+ else
+ setchar(current,getchar(tempcurrent))
+ local freenode=getnext(current)
+ setlink(current,tmp)
+ flush_node(freenode)
+ flush_list(tempcurrent)
+ if changestop then
+ stop=current
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ while not basefound do
+ local char=getchar(current)
+ if consonant[char] then
+ setprop(current,a_state,s_half)
+ if not firstcons then
+ firstcons=current
+ end
+ lastcons=current
+ if not base then
+ base=current
+ elseif blwfcache[char] then
+ setprop(current,a_state,s_blwf)
+ else
+ base=current
+ end
+ end
+ basefound=current==stop
+ current=getnext(current)
+ end
+ if base~=lastcons then
+ local np=base
+ local n=getnext(base)
+ local ch=getchar(n)
+ if nukta[ch] then
+ np=n
+ n=getnext(n)
+ ch=getchar(n)
+ end
+ if halant[ch] then
+ if lastcons~=stop then
+ local ln=getnext(lastcons)
+ if nukta[getchar(ln)] then
+ lastcons=ln
+ end
+ end
+ local nn=getnext(n)
+ local ln=getnext(lastcons)
+ setlink(np,nn)
+ setnext(lastcons,n)
+ if ln then
+ setprev(ln,n)
+ end
+ setnext(n,ln)
+ setprev(n,lastcons)
+ if lastcons==stop then
+ stop=n
+ end
+ end
+ end
+ n=getnext(start)
+ if n~=stop and ra[getchar(start)] and halant[getchar(n)] and not zw_char[getchar(getnext(n))] then
+ local matra=base
+ if base~=stop then
+ local next=getnext(base)
+ if dependent_vowel[getchar(next)] then
+ matra=next
+ end
+ end
+ local sp=getprev(start)
+ local nn=getnext(n)
+ local mn=getnext(matra)
+ setlink(sp,nn)
+ setlink(matra,start)
+ setlink(n,mn)
+ if head==start then
+ head=nn
+ end
+ start=nn
+ if matra==stop then
+ stop=n
+ end
+ end
+ local current=start
+ while current~=stop do
+ local next=getnext(current)
+ if next~=stop and halant[getchar(next)] and getchar(getnext(next))==c_zwnj then
+ setprop(current,a_state,unsetvalue)
+ end
+ current=next
+ end
+ if base~=stop and getprop(base,a_state) then
+ local next=getnext(base)
+ if halant[getchar(next)] and not (next~=stop and getchar(getnext(next))==c_zwj) then
+ setprop(base,a_state,unsetvalue)
+ end
+ end
+ local current,allreordered,moved=start,false,{ [base]=true }
+ local a,b,p,bn=base,base,base,getnext(base)
+ if base~=stop and nukta[getchar(bn)] then
+ a,b,p=bn,bn,bn
+ end
+ while not allreordered do
+ local c=current
+ local n=getnext(current)
+ local l=nil
+ if c~=stop then
+ local ch=getchar(n)
+ if nukta[ch] then
+ c=n
+ n=getnext(n)
+ ch=getchar(n)
+ end
+ if c~=stop then
+ if halant[ch] then
+ c=n
+ n=getnext(n)
+ ch=getchar(n)
+ end
+ while c~=stop and dependent_vowel[ch] do
+ c=n
+ n=getnext(n)
+ ch=getchar(n)
+ end
+ if c~=stop then
+ if vowel_modifier[ch] then
+ c=n
+ n=getnext(n)
+ ch=getchar(n)
+ end
+ if c~=stop and stress_tone_mark[ch] then
+ c=n
+ n=getnext(n)
+ end
+ end
+ end
+ end
+ local bp=getprev(firstcons)
+ local cn=getnext(current)
+ local last=getnext(c)
+ while cn~=last do
+ if pre_mark[getchar(cn)] then
+ if bp then
+ setnext(bp,cn)
+ end
+ local prev,next=getboth(cn)
+ if next then
+ setprev(next,prev)
+ end
+ setnext(prev,next)
+ if cn==stop then
+ stop=prev
+ end
+ setprev(cn,bp)
+ setlink(cn,firstcons)
+ if firstcons==start then
+ if head==start then
+ head=cn
+ end
+ start=cn
+ end
+ break
+ end
+ cn=getnext(cn)
+ end
+ allreordered=c==stop
+ current=getnext(c)
+ end
+ if reph or vattu then
+ local current,cns=start,nil
+ while current~=stop do
+ local c=current
+ local n=getnext(current)
+ if ra[getchar(current)] and halant[getchar(n)] then
+ c=n
+ n=getnext(n)
+ local b,bn=base,base
+ while bn~=stop do
+ local next=getnext(bn)
+ if dependent_vowel[getchar(next)] then
+ b=next
+ end
+ bn=next
+ end
+ if getprop(current,a_state)==s_rphf then
+ if b~=current then
+ if current==start then
+ if head==start then
+ head=n
+ end
+ start=n
+ end
+ if b==stop then
+ stop=c
+ end
+ local prev=getprev(current)
+ setlink(prev,n)
+ local next=getnext(b)
+ setlink(c,next)
+ setlink(b,current)
+ end
+ elseif cns and getnext(cns)~=current then
+ local cp=getprev(current)
+ local cnsn=getnext(cns)
+ setlink(cp,n)
+ setlink(cns,current)
+ setlink(c,cnsn)
+ if c==stop then
+ stop=cp
+ break
+ end
+ current=getprev(n)
+ end
+ else
+ local char=getchar(current)
+ if consonant[char] then
+ cns=current
+ local next=getnext(cns)
+ if halant[getchar(next)] then
+ cns=next
+ end
+ elseif char==c_nbsp then
+ nbspaces=nbspaces+1
+ cns=current
+ local next=getnext(cns)
+ if halant[getchar(next)] then
+ cns=next
+ end
+ end
+ end
+ current=getnext(current)
+ end
+ end
+ if getchar(base)==c_nbsp then
+ nbspaces=nbspaces-1
+ head=remove_node(head,base)
+ flush_node(base)
+ end
+ return head,stop,nbspaces
+end
+function handlers.devanagari_reorder_matras(head,start)
+ local current=start
+ local startfont=getfont(start)
+ local startattr=getprop(start,a_syllabe)
+ while current do
+ local char=ischar(current,startfont)
+ local next=getnext(current)
+ if char and getprop(current,a_syllabe)==startattr then
+ if halant[char] and not getprop(current,a_state) then
+ if next then
+ local char=ischar(next,startfont)
+ if char and zw_char[char] and getprop(next,a_syllabe)==startattr then
+ current=next
+ next=getnext(current)
+ end
+ end
+ local startnext=getnext(start)
+ head=remove_node(head,start)
+ setlink(start,next)
+ setlink(current,start)
+ start=startnext
+ break
+ end
+ else
+ break
+ end
+ current=next
+ end
+ return head,start,true
+end
+function handlers.devanagari_reorder_reph(head,start)
+ local current=getnext(start)
+ local startnext=nil
+ local startprev=nil
+ local startfont=getfont(start)
+ local startattr=getprop(start,a_syllabe)
+ while current do
+ local char=ischar(current,startfont)
+ if char and getprop(current,a_syllabe)==startattr then
+ if halant[char] and not getprop(current,a_state) then
+ local next=getnext(current)
+ if next then
+ local nextchar=ischar(next,startfont)
+ if nextchar and zw_char[nextchar] and getprop(next,a_syllabe)==startattr then
+ current=next
+ next=getnext(current)
+ end
+ end
+ startnext=getnext(start)
+ head=remove_node(head,start)
+ setlink(start,next)
+ setlink(current,start)
+ start=startnext
+ startattr=getprop(start,a_syllabe)
+ break
+ end
+ current=getnext(current)
+ else
+ break
+ end
+ end
+ if not startnext then
+ current=getnext(start)
+ while current do
+ local char=ischar(current,startfont)
+ if char and getprop(current,a_syllabe)==startattr then
+ if getprop(current,a_state)==s_pstf then
+ startnext=getnext(start)
+ head=remove_node(head,start)
+ setlink(getprev(current),start)
+ setlink(start,current)
+ start=startnext
+ startattr=getprop(start,a_syllabe)
+ break
+ end
+ current=getnext(current)
+ else
+ break
+ end
+ end
+ end
+ if not startnext then
+ current=getnext(start)
+ local c=nil
+ while current do
+ local char=ischar(current,startfont)
+ if char and getprop(current,a_syllabe)==startattr then
+ if not c and mark_above_below_post[char] and reorder_class[char]~="after subscript" then
+ c=current
+ end
+ current=getnext(current)
+ else
+ break
+ end
+ end
+ if c then
+ startnext=getnext(start)
+ head=remove_node(head,start)
+ setlink(getprev(c),start)
+ setlink(start,c)
+ start=startnext
+ startattr=getprop(start,a_syllabe)
+ end
+ end
+ if not startnext then
+ current=start
+ local next=getnext(current)
+ while next do
+ local nextchar=ischar(next,startfont)
+ if nextchar and getprop(next,a_syllabe)==startattr then
+ current=next
+ next=getnext(current)
+ else
+ break
+ end
+ end
+ if start~=current then
+ startnext=getnext(start)
+ head=remove_node(head,start)
+ setlink(start,getnext(current))
+ setlink(current,start)
+ start=startnext
+ end
+ end
+ return head,start,true
+end
+function handlers.devanagari_reorder_pre_base_reordering_consonants(head,start)
+ local current=start
+ local startnext=nil
+ local startprev=nil
+ local startfont=getfont(start)
+ local startattr=getprop(start,a_syllabe)
+ while current do
+ local char=ischar(current,startfont)
+ if char and getprop(current,a_syllabe)==startattr then
+ local next=getnext(current)
+ if halant[char] and not getprop(current,a_state) then
+ if next then
+ local nextchar=ischar(next,startfont)
+ if nextchar and getprop(next,a_syllabe)==startattr then
+ if nextchar==c_zwnj or nextchar==c_zwj then
+ current=next
+ next=getnext(current)
+ end
+ end
+ end
+ startnext=getnext(start)
+ removenode(start,start)
+ setlink(start,next)
+ setlink(current,start)
+ start=startnext
+ break
+ end
+ current=next
+ else
+ break
+ end
+ end
+ if not startnext then
+ current=getnext(start)
+ startattr=getprop(start,a_syllabe)
+ while current do
+ local char=ischar(current,startfont)
+ if char and getprop(current,a_syllabe)==startattr then
+ if not consonant[char] and getprop(current,a_state) then
+ startnext=getnext(start)
+ removenode(start,start)
+ setlink(getprev(current),start)
+ setlink(start,current)
+ start=startnext
+ break
+ end
+ current=getnext(current)
+ else
+ break
+ end
+ end
+ end
+ return head,start,true
+end
+function handlers.devanagari_remove_joiners(head,start,kind,lookupname,replacement)
+ local stop=getnext(start)
+ local font=getfont(start)
+ local last=start
+ while stop do
+ local char=ischar(stop,font)
+ if char and (char==c_zwnj or char==c_zwj) then
+ last=stop
+ stop=getnext(stop)
+ else
+ break
+ end
+ end
+ local prev=getprev(start)
+ if stop then
+ setnext(last)
+ setlink(prev,stop)
+ elseif prev then
+ setnext(prev)
+ end
+ if head==start then
+ head=stop
+ end
+ flush_list(start)
+ return head,stop,true
+end
+local function dev2_initialize(font,attr)
+ local devanagari=fontdata[font].resources.devanagari
+ if devanagari then
+ return devanagari.seqsubset or {},devanagari.reorderreph or {}
+ else
+ return {},{}
+ end
+end
+local function dev2_reorder(head,start,stop,font,attr,nbspaces)
+ local seqsubset,reorderreph=dev2_initialize(font,attr)
+ local reph=false
+ local halfpos=nil
+ local basepos=nil
+ local subpos=nil
+ local postpos=nil
+ local locl={}
+ for i=1,#seqsubset do
+ local subset=seqsubset[i]
+ local kind=subset[1]
+ local lookupcache=subset[2]
+ if kind=="rphf" then
+ reph=subset[3]
+ local current=start
+ local last=getnext(stop)
+ while current~=last do
+ if current~=stop then
+ local c=locl[current] or getchar(current)
+ local found=lookupcache[c]
+ if found then
+ local next=getnext(current)
+ local n=locl[next] or getchar(next)
+ if found[n] then
+ local afternext=next~=stop and getnext(next)
+ if afternext and zw_char[getchar(afternext)] then
+ current=next
+ current=getnext(current)
+ elseif current==start then
+ setprop(current,a_state,s_rphf)
+ current=next
+ else
+ current=next
+ end
+ end
+ end
+ end
+ current=getnext(current)
+ end
+ elseif kind=="pref" then
+ local current=start
+ local last=getnext(stop)
+ while current~=last do
+ if current~=stop then
+ local c=locl[current] or getchar(current)
+ local found=lookupcache[c]
+ if found then
+ local next=getnext(current)
+ local n=locl[next] or getchar(next)
+ if found[n] then
+ setprop(current,a_state,s_pref)
+ setprop(next,a_state,s_pref)
+ current=next
+ end
+ end
+ end
+ current=getnext(current)
+ end
+ elseif kind=="half" then
+ local current=start
+ local last=getnext(stop)
+ while current~=last do
+ if current~=stop then
+ local c=locl[current] or getchar(current)
+ local found=lookupcache[c]
+ if found then
+ local next=getnext(current)
+ local n=locl[next] or getchar(next)
+ if found[n] then
+ if next~=stop and getchar(getnext(next))==c_zwnj then
+ current=next
+ else
+ setprop(current,a_state,s_half)
+ if not halfpos then
+ halfpos=current
+ end
+ end
+ current=getnext(current)
+ end
+ end
+ end
+ current=getnext(current)
+ end
+ elseif kind=="blwf" then
+ local current=start
+ local last=getnext(stop)
+ while current~=last do
+ if current~=stop then
+ local c=locl[current] or getchar(current)
+ local found=lookupcache[c]
+ if found then
+ local next=getnext(current)
+ local n=locl[next] or getchar(next)
+ if found[n] then
+ setprop(current,a_state,s_blwf)
+ setprop(next,a_state,s_blwf)
+ current=next
+ subpos=current
+ end
+ end
+ end
+ current=getnext(current)
+ end
+ elseif kind=="pstf" then
+ local current=start
+ local last=getnext(stop)
+ while current~=last do
+ if current~=stop then
+ local c=locl[current] or getchar(current)
+ local found=lookupcache[c]
+ if found then
+ local next=getnext(current)
+ local n=locl[next] or getchar(next)
+ if found[n] then
+ setprop(current,a_state,s_pstf)
+ setprop(next,a_state,s_pstf)
+ current=next
+ postpos=current
+ end
+ end
+ end
+ current=getnext(current)
+ end
+ end
+ end
+ reorderreph.coverage={ [reph]=true }
+ local current,base,firstcons=start,nil,nil
+ if getprop(start,a_state)==s_rphf then
+ current=getnext(getnext(start))
+ end
+ if current~=getnext(stop) and getchar(current)==c_nbsp then
+ if current==stop then
+ stop=getprev(stop)
+ head=remove_node(head,current)
+ flush_node(current)
+ return head,stop,nbspaces
+ else
+ nbspaces=nbspaces+1
+ base=current
+ current=getnext(current)
+ if current~=stop then
+ local char=getchar(current)
+ if nukta[char] then
+ current=getnext(current)
+ char=getchar(current)
+ end
+ if char==c_zwj then
+ local next=getnext(current)
+ if current~=stop and next~=stop and halant[getchar(next)] then
+ current=next
+ next=getnext(current)
+ local tmp=getnext(next)
+ local changestop=next==stop
+ setnext(next)
+ setprop(current,a_state,s_pref)
+ current=processcharacters(current,font)
+ setprop(current,a_state,s_blwf)
+ current=processcharacters(current,font)
+ setprop(current,a_state,s_pstf)
+ current=processcharacters(current,font)
+ setprop(current,a_state,unsetvalue)
+ if halant[getchar(current)] then
+ setnext(getnext(current),tmp)
+ local nc=copy_node(current)
+ copyinjection(nc,current)
+ setchar(current,dotted_circle)
+ head=insert_node_after(head,current,nc)
+ else
+ setnext(current,tmp)
+ if changestop then
+ stop=current
+ end
+ end
+ end
+ end
+ end
+ end
+ else
+ local last=getnext(stop)
+ while current~=last do
+ local next=getnext(current)
+ if consonant[getchar(current)] then
+ if not (current~=stop and next~=stop and halant[getchar(next)] and getchar(getnext(next))==c_zwj) then
+ if not firstcons then
+ firstcons=current
+ end
+ local a=getprop(current,a_state)
+ if not (a==s_pref or a==s_blwf or a==s_pstf) then
+ base=current
+ end
+ end
+ end
+ current=next
+ end
+ if not base then
+ base=firstcons
+ end
+ end
+ if not base then
+ if getprop(start,a_state)==s_rphf then
+ setprop(start,a_state,unsetvalue)
+ end
+ return head,stop,nbspaces
+ else
+ if getprop(base,a_state) then
+ setprop(base,a_state,unsetvalue)
+ end
+ basepos=base
+ end
+ if not halfpos then
+ halfpos=base
+ end
+ if not subpos then
+ subpos=base
+ end
+ if not postpos then
+ postpos=subpos or base
+ end
+ local moved={}
+ local current=start
+ local last=getnext(stop)
+ while current~=last do
+ local char,target,cn=locl[current] or getchar(current),nil,getnext(current)
+ local tpm=twopart_mark[char]
+ if tpm then
+ local extra=copy_node(current)
+ copyinjection(extra,current)
+ char=tpm[1]
+ setchar(current,char)
+ setchar(extra,tpm[2])
+ head=insert_node_after(head,current,extra)
+ end
+ if not moved[current] and dependent_vowel[char] then
+ if pre_mark[char] then
+ moved[current]=true
+ local prev,next=getboth(current)
+ setlink(prev,next)
+ if current==stop then
+ stop=getprev(current)
+ end
+ if halfpos==start then
+ if head==start then
+ head=current
+ end
+ start=current
+ end
+ setlink(getprev(halfpos),current)
+ setlink(current,halfpos)
+ halfpos=current
+ elseif above_mark[char] then
+ target=basepos
+ if subpos==basepos then
+ subpos=current
+ end
+ if postpos==basepos then
+ postpos=current
+ end
+ basepos=current
+ elseif below_mark[char] then
+ target=subpos
+ if postpos==subpos then
+ postpos=current
+ end
+ subpos=current
+ elseif post_mark[char] then
+ target=postpos
+ postpos=current
+ end
+ if mark_above_below_post[char] then
+ local prev=getprev(current)
+ if prev~=target then
+ local next=getnext(current)
+ setlink(prev,next)
+ if current==stop then
+ stop=prev
+ end
+ setlink(current,getnext(target))
+ setlink(target,current)
+ end
+ end
+ end
+ current=cn
+ end
+ local current,c=start,nil
+ while current~=stop do
+ local char=getchar(current)
+ if halant[char] or stress_tone_mark[char] then
+ if not c then
+ c=current
+ end
+ else
+ c=nil
+ end
+ local next=getnext(current)
+ if c and nukta[getchar(next)] then
+ if head==c then
+ head=next
+ end
+ if stop==next then
+ stop=current
+ end
+ setlink(getprev(c),next)
+ local nextnext=getnext(next)
+ setnext(current,nextnext)
+ local nextnextnext=getnext(nextnext)
+ if nextnextnext then
+ setprev(nextnextnext,current)
+ end
+ setlink(nextnext,c)
+ end
+ if stop==current then break end
+ current=getnext(current)
+ end
+ if getchar(base)==c_nbsp then
+ if base==stop then
+ stop=getprev(stop)
+ end
+ nbspaces=nbspaces-1
+ head=remove_node(head,base)
+ flush_node(base)
+ end
+ return head,stop,nbspaces
+end
+local separator={}
+imerge(separator,consonant)
+imerge(separator,independent_vowel)
+imerge(separator,dependent_vowel)
+imerge(separator,vowel_modifier)
+imerge(separator,stress_tone_mark)
+for k,v in next,nukta do separator[k]=true end
+for k,v in next,halant do separator[k]=true end
+local function analyze_next_chars_one(c,font,variant)
+ local n=getnext(c)
+ if not n then
+ return c
+ end
+ if variant==1 then
+ local v=ischar(n,font)
+ if v and nukta[v] then
+ n=getnext(n)
+ if n then
+ v=ischar(n,font)
+ end
+ end
+ if n and v then
+ local nn=getnext(n)
+ if nn then
+ local vv=ischar(nn,font)
+ if vv then
+ local nnn=getnext(nn)
+ if nnn then
+ local vvv=ischar(nnn,font)
+ if vvv then
+ if vv==c_zwj and consonant[vvv] then
+ c=nnn
+ elseif (vv==c_zwnj or vv==c_zwj) and halant[vvv] then
+ local nnnn=getnext(nnn)
+ if nnnn then
+ local vvvv=ischar(nnnn,font)
+ if vvvv and consonant[vvvv] then
+ c=nnnn
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ elseif variant==2 then
+ local v=ischar(n,font)
+ if v and nukta[v] then
+ c=n
+ end
+ n=getnext(c)
+ if n then
+ v=ischar(n,font)
+ if v then
+ local nn=getnext(n)
+ if nn then
+ local vv=ischar(nn,font)
+ if vv and zw_char[v] then
+ n=nn
+ v=vv
+ nn=getnext(nn)
+ vv=nn and ischar(nn,font)
+ end
+ if vv and halant[v] and consonant[vv] then
+ c=nn
+ end
+ end
+ end
+ end
+ end
+ local n=getnext(c)
+ if not n then
+ return c
+ end
+ local v=ischar(n,font)
+ if not v then
+ return c
+ end
+ if dependent_vowel[v] then
+ c=getnext(c)
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if nukta[v] then
+ c=getnext(c)
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if halant[v] then
+ c=getnext(c)
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if vowel_modifier[v] then
+ c=getnext(c)
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if stress_tone_mark[v] then
+ c=getnext(c)
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if stress_tone_mark[v] then
+ return n
+ else
+ return c
+ end
+end
+local function analyze_next_chars_two(c,font)
+ local n=getnext(c)
+ if not n then
+ return c
+ end
+ local v=ischar(n,font)
+ if v and nukta[v] then
+ c=n
+ end
+ n=c
+ while true do
+ local nn=getnext(n)
+ if nn then
+ local vv=ischar(nn,font)
+ if vv then
+ if halant[vv] then
+ n=nn
+ local nnn=getnext(nn)
+ if nnn then
+ local vvv=ischar(nnn,font)
+ if vvv and zw_char[vvv] then
+ n=nnn
+ end
+ end
+ elseif vv==c_zwnj or vv==c_zwj then
+ local nnn=getnext(nn)
+ if nnn then
+ local vvv=ischar(nnn,font)
+ if vvv and halant[vvv] then
+ n=nnn
+ end
+ end
+ else
+ break
+ end
+ local nn=getnext(n)
+ if nn then
+ local vv=ischar(nn,font)
+ if vv and consonant[vv] then
+ n=nn
+ local nnn=getnext(nn)
+ if nnn then
+ local vvv=ischar(nnn,font)
+ if vvv and nukta[vvv] then
+ n=nnn
+ end
+ end
+ c=n
+ else
+ break
+ end
+ else
+ break
+ end
+ else
+ break
+ end
+ else
+ break
+ end
+ end
+ if not c then
+ return
+ end
+ local n=getnext(c)
+ if not n then
+ return c
+ end
+ local v=ischar(n,font)
+ if not v then
+ return c
+ end
+ if v==c_anudatta then
+ c=n
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if halant[v] then
+ c=n
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ if v==c_zwnj or v==c_zwj then
+ c=n
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ else
+ if dependent_vowel[v] then
+ c=n
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if nukta[v] then
+ c=n
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if halant[v] then
+ c=n
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ end
+ if vowel_modifier[v] then
+ c=n
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if stress_tone_mark[v] then
+ c=n
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if stress_tone_mark[v] then
+ return n
+ else
+ return c
+ end
+end
+local function inject_syntax_error(head,current,mark)
+ local signal=copy_node(current)
+ copyinjection(signal,current)
+ if mark==pre_mark then
+ setchar(signal,dotted_circle)
+ else
+ setchar(current,dotted_circle)
+ end
+ return insert_node_after(head,current,signal)
+end
+function methods.deva(head,font,attr)
+ head=tonut(head)
+ local current=head
+ local start=true
+ local done=false
+ local nbspaces=0
+ while current do
+ local char=ischar(current,font)
+ if char then
+ done=true
+ local syllablestart=current
+ local syllableend=nil
+ local c=current
+ local n=getnext(c)
+ local first=char
+ if n and ra[first] then
+ local second=ischar(n,font)
+ if second and halant[second] then
+ local n=getnext(n)
+ if n then
+ local third=ischar(n,font)
+ if third then
+ c=n
+ first=third
+ end
+ end
+ end
+ end
+ local standalone=first==c_nbsp
+ if standalone then
+ local prev=getprev(current)
+ if prev then
+ local prevchar=ischar(prev,font)
+ if not prevchar then
+ elseif not separator[prevchar] then
+ else
+ standalone=false
+ end
+ else
+ end
+ end
+ if standalone then
+ local syllableend=analyze_next_chars_one(c,font,2)
+ current=getnext(syllableend)
+ if syllablestart~=syllableend then
+ head,current,nbspaces=deva_reorder(head,syllablestart,syllableend,font,attr,nbspaces)
+ current=getnext(current)
+ end
+ else
+ if consonant[char] then
+ local prevc=true
+ while prevc do
+ prevc=false
+ local n=getnext(current)
+ if not n then
+ break
+ end
+ local v=ischar(n,font)
+ if not v then
+ break
+ end
+ if nukta[v] then
+ n=getnext(n)
+ if not n then
+ break
+ end
+ v=ischar(n,font)
+ if not v then
+ break
+ end
+ end
+ if halant[v] then
+ n=getnext(n)
+ if not n then
+ break
+ end
+ v=ischar(n,font)
+ if not v then
+ break
+ end
+ if v==c_zwnj or v==c_zwj then
+ n=getnext(n)
+ if not n then
+ break
+ end
+ v=ischar(n,font)
+ if not v then
+ break
+ end
+ end
+ if consonant[v] then
+ prevc=true
+ current=n
+ end
+ end
+ end
+ local n=getnext(current)
+ if n then
+ local v=ischar(n,font)
+ if v and nukta[v] then
+ current=n
+ n=getnext(current)
+ end
+ end
+ syllableend=current
+ current=n
+ if current then
+ local v=ischar(current,font)
+ if not v then
+ elseif halant[v] then
+ local n=getnext(current)
+ if n then
+ local v=ischar(n,font)
+ if v and zw_char[v] then
+ syllableend=n
+ current=getnext(n)
+ else
+ syllableend=current
+ current=n
+ end
+ else
+ syllableend=current
+ current=n
+ end
+ else
+ if dependent_vowel[v] then
+ syllableend=current
+ current=getnext(current)
+ v=ischar(current,font)
+ end
+ if v and vowel_modifier[v] then
+ syllableend=current
+ current=getnext(current)
+ v=ischar(current,font)
+ end
+ if v and stress_tone_mark[v] then
+ syllableend=current
+ current=getnext(current)
+ end
+ end
+ end
+ if syllablestart~=syllableend then
+ head,current,nbspaces=deva_reorder(head,syllablestart,syllableend,font,attr,nbspaces)
+ current=getnext(current)
+ end
+ elseif independent_vowel[char] then
+ syllableend=current
+ current=getnext(current)
+ if current then
+ local v=ischar(current,font)
+ if v then
+ if vowel_modifier[v] then
+ syllableend=current
+ current=getnext(current)
+ v=ischar(current,font)
+ end
+ if v and stress_tone_mark[v] then
+ syllableend=current
+ current=getnext(current)
+ end
+ end
+ end
+ else
+ local mark=mark_four[char]
+ if mark then
+ head,current=inject_syntax_error(head,current,mark)
+ end
+ current=getnext(current)
+ end
+ end
+ else
+ current=getnext(current)
+ end
+ start=false
+ end
+ if nbspaces>0 then
+ head=replace_all_nbsp(head)
+ end
+ head=tonode(head)
+ return head,done
+end
+function methods.dev2(head,font,attr)
+ head=tonut(head)
+ local current=head
+ local start=true
+ local done=false
+ local syllabe=0
+ local nbspaces=0
+ while current do
+ local syllablestart=nil
+ local syllableend=nil
+ local char=ischar(current,font)
+ if char then
+ done=true
+ syllablestart=current
+ local c=current
+ local n=getnext(current)
+ if n and ra[char] then
+ local nextchar=ischar(n,font)
+ if nextchar and halant[nextchar] then
+ local n=getnext(n)
+ if n then
+ local nextnextchar=ischar(n,font)
+ if nextnextchar then
+ c=n
+ char=nextnextchar
+ end
+ end
+ end
+ end
+ if independent_vowel[char] then
+ current=analyze_next_chars_one(c,font,1)
+ syllableend=current
+ else
+ local standalone=char==c_nbsp
+ if standalone then
+ nbspaces=nbspaces+1
+ local p=getprev(current)
+ if not p then
+ elseif ischar(p,font) then
+ elseif not separator[getchar(p)] then
+ else
+ standalone=false
+ end
+ end
+ if standalone then
+ current=analyze_next_chars_one(c,font,2)
+ syllableend=current
+ elseif consonant[getchar(current)] then
+ current=analyze_next_chars_two(current,font)
+ syllableend=current
+ end
+ end
+ end
+ if syllableend then
+ syllabe=syllabe+1
+ local c=syllablestart
+ local n=getnext(syllableend)
+ while c~=n do
+ setprop(c,a_syllabe,syllabe)
+ c=getnext(c)
+ end
+ end
+ if syllableend and syllablestart~=syllableend then
+ head,current,nbspaces=dev2_reorder(head,syllablestart,syllableend,font,attr,nbspaces)
+ end
+ if not syllableend then
+ local char=ischar(current,font)
+ if char and not getprop(current,a_state) then
+ local mark=mark_four[char]
+ if mark then
+ head,current=inject_syntax_error(head,current,mark)
+ end
+ end
+ end
+ start=false
+ current=getnext(current)
+ end
+ if nbspaces>0 then
+ head=replace_all_nbsp(head)
+ end
+ head=tonode(head)
+ return head,done
+end
+methods.mlym=methods.deva
+methods.mlm2=methods.dev2
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-ocl']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local tostring,tonumber,next=tostring,tonumber,next
+local round,max=math.round,math.round
+local sortedkeys,sortedhash=table.sortedkeys,table.sortedhash
+local setmetatableindex=table.setmetatableindex
+local formatters=string.formatters
+local tounicode=fonts.mappings.tounicode
+local otf=fonts.handlers.otf
+local f_color=formatters["%f %f %f rg"]
+local f_gray=formatters["%f g"]
+if context then
+ local startactualtext=nil
+ local stopactualtext=nil
+ function otf.getactualtext(s)
+ if not startactualtext then
+ startactualtext=backends.codeinjections.startunicodetoactualtextdirect
+ stopactualtext=backends.codeinjections.stopunicodetoactualtextdirect
+ end
+ return startactualtext(s),stopactualtext()
+ end
+else
+ local tounicode=fonts.mappings.tounicode16
+ function otf.getactualtext(s)
+ return
+ "/Span << /ActualText <feff"..s.."> >> BDC",
+ "EMC"
+ end
+end
+local sharedpalettes={}
+local hash=setmetatableindex(function(t,k)
+ local v={ "pdf","direct",k }
+ t[k]=v
+ return v
+end)
+if context then
+ local colors=attributes.list[attributes.private('color')] or {}
+ local transparencies=attributes.list[attributes.private('transparency')] or {}
+ function otf.registerpalette(name,values)
+ sharedpalettes[name]=values
+ for i=1,#values do
+ local v=values[i]
+ local c=nil
+ local t=nil
+ if type(v)=="table" then
+ c=colors.register(name,"rgb",
+ max(round((v.r or 0)*255),255)/255,
+ max(round((v.g or 0)*255),255)/255,
+ max(round((v.b or 0)*255),255)/255
+ )
+ else
+ c=colors[v]
+ t=transparencies[v]
+ end
+ if c and t then
+ values[i]=hash[lpdf.color(1,c).." "..lpdf.transparency(t)]
+ elseif c then
+ values[i]=hash[lpdf.color(1,c)]
+ elseif t then
+ values[i]=hash[lpdf.color(1,t)]
+ end
+ end
+ end
+else
+ function otf.registerpalette(name,values)
+ sharedpalettes[name]=values
+ for i=1,#values do
+ local v=values[i]
+ values[i]=hash[f_color(
+ max(round((v.r or 0)*255),255)/255,
+ max(round((v.g or 0)*255),255)/255,
+ max(round((v.b or 0)*255),255)/255
+ )]
+ end
+ end
+end
+local function convert(t,k)
+ local v={}
+ for i=1,#k do
+ local p=k[i]
+ local r,g,b=p[1],p[2],p[3]
+ if r==g and g==b then
+ v[i]=hash[f_gray(r/255)]
+ else
+ v[i]=hash[f_color(r/255,g/255,b/255)]
+ end
+ end
+ t[k]=v
+ return v
+end
+local start={ "pdf","page","q" }
+local stop={ "pdf","raw","Q" }
+local function initializecolr(tfmdata,kind,value)
+ if value then
+ local resources=tfmdata.resources
+ local palettes=resources.colorpalettes
+ if palettes then
+ local converted=resources.converted
+ if not converted then
+ converted=setmetatableindex(convert)
+ resources.converted=converted
+ end
+ local colorvalues=sharedpalettes[value] or converted[palettes[tonumber(value) or 1] or palettes[1]] or {}
+ local classes=#colorvalues
+ if classes==0 then
+ return
+ end
+ local characters=tfmdata.characters
+ local descriptions=tfmdata.descriptions
+ local properties=tfmdata.properties
+ properties.virtualized=true
+ tfmdata.fonts={
+ { id=0 }
+ }
+ local widths=setmetatableindex(function(t,k)
+ local v={ "right",-k }
+ t[k]=v
+ return v
+ end)
+ local getactualtext=otf.getactualtext
+ local default=colorvalues[#colorvalues]
+ local b,e=getactualtext(tounicode(0xFFFD))
+ local actualb={ "pdf","page",b }
+ local actuale={ "pdf","page",e }
+ local cache=setmetatableindex(function(t,k)
+ local v={ "char",k }
+ t[k]=v
+ return v
+ end)
+ for unicode,character in next,characters do
+ local description=descriptions[unicode]
+ if description then
+ local colorlist=description.colors
+ if colorlist then
+ local u=description.unicode or characters[unicode].unicode
+ local w=character.width or 0
+ local s=#colorlist
+ local goback=w~=0 and widths[w] or nil
+ local t={
+ start,
+ not u and actualb or { "pdf","raw",getactualtext(tounicode(u)) }
+ }
+ local n=2
+ local l=nil
+ for i=1,s do
+ local entry=colorlist[i]
+ local v=colorvalues[entry.class] or default
+ if v and l~=v then
+ n=n+1 t[n]=v
+ l=v
+ end
+ n=n+1 t[n]=cache[entry.slot]
+ if s>1 and i<s and goback then
+ n=n+1 t[n]=goback
+ end
+ end
+ n=n+1 t[n]=actuale
+ n=n+1 t[n]=stop
+ character.commands=t
+ end
+ end
+ end
+ end
+ end
+end
+fonts.handlers.otf.features.register {
+ name="colr",
+ description="color glyphs",
+ manipulators={
+ base=initializecolr,
+ node=initializecolr,
+ }
+}
+do
+ local nofstreams=0
+ local f_name=formatters[ [[pdf-glyph-%05i]] ]
+ local f_used=context and formatters[ [[original:///%s]] ] or formatters[ [[%s]] ]
+ local hashed={}
+ local cache={}
+ function otf.storepdfdata(pdf)
+ local done=hashed[pdf]
+ if not done then
+ nofstreams=nofstreams+1
+ local o,n=epdf.openMemStream(pdf,#pdf,f_name(nofstreams))
+ cache[n]=o
+ done=f_used(n)
+ hashed[pdf]=done
+ end
+ return nil,done,nil
+ end
+end
+local function pdftovirtual(tfmdata,pdfshapes,kind)
+ if not tfmdata or not pdfshapes or not kind then
+ return
+ end
+ local characters=tfmdata.characters
+ local properties=tfmdata.properties
+ local parameters=tfmdata.parameters
+ local hfactor=parameters.hfactor
+ properties.virtualized=true
+ tfmdata.fonts={
+ { id=0 }
+ }
+ local getactualtext=otf.getactualtext
+ local storepdfdata=otf.storepdfdata
+ for unicode,character in sortedhash(characters) do
+ local index=character.index
+ if index then
+ local pdf=pdfshapes[index]
+ local typ=type(pdf)
+ local data=nil
+ local dx=nil
+ local dy=nil
+ if typ=="table" then
+ data=pdf.data
+ dx=pdf.dx or 0
+ dy=pdf.dy or 0
+ elseif typ=="string" then
+ data=pdf
+ dx=0
+ dy=0
+ end
+ if data then
+ local setcode,name,nilcode=storepdfdata(data)
+ if name then
+ local bt,et=getactualtext(unicode)
+ local wd=character.width or 0
+ local ht=character.height or 0
+ local dp=character.depth or 0
+ character.commands={
+ { "pdf","direct",bt },
+ { "down",dp+dy*hfactor },
+ { "right",dx*hfactor },
+ { "image",{ filename=name,width=wd,height=ht,depth=dp } },
+ { "pdf","direct",et },
+ }
+ character[kind]=true
+ end
+ end
+ end
+ end
+end
+local otfsvg=otf.svg or {}
+otf.svg=otfsvg
+otf.svgenabled=true
+do
+ local report_svg=logs.reporter("fonts","svg conversion")
+ local loaddata=io.loaddata
+ local savedata=io.savedata
+ local remove=os.remove
+ if context and xml.convert then
+ local xmlconvert=xml.convert
+ local xmlfirst=xml.first
+ function otfsvg.filterglyph(entry,index)
+ local svg=xmlconvert(entry.data)
+ local root=svg and xmlfirst(svg,"/svg[@id='glyph"..index.."']")
+ local data=root and tostring(root)
+ return data
+ end
+ else
+ function otfsvg.filterglyph(entry,index)
+ return entry.data
+ end
+ end
+ local runner=sandbox and sandbox.registerrunner {
+ name="otfsvg",
+ program="inkscape",
+ method="pipeto",
+ template="--shell > temp-otf-svg-shape.log",
+ reporter=report_svg,
+ }
+ if not runner then
+ runner=function()
+ return io.open("inkscape --shell > temp-otf-svg-shape.log","w")
+ end
+ end
+ function otfsvg.topdf(svgshapes)
+ local pdfshapes={}
+ local inkscape=runner()
+ if inkscape then
+ local nofshapes=#svgshapes
+ local f_svgfile=formatters["temp-otf-svg-shape-%i.svg"]
+ local f_pdffile=formatters["temp-otf-svg-shape-%i.pdf"]
+ local f_convert=formatters["%s --export-pdf=%s\n"]
+ local filterglyph=otfsvg.filterglyph
+ local nofdone=0
+ report_svg("processing %i svg containers",nofshapes)
+ statistics.starttiming()
+ for i=1,nofshapes do
+ local entry=svgshapes[i]
+ for index=entry.first,entry.last do
+ local data=filterglyph(entry,index)
+ if data and data~="" then
+ local svgfile=f_svgfile(index)
+ local pdffile=f_pdffile(index)
+ savedata(svgfile,data)
+ inkscape:write(f_convert(svgfile,pdffile))
+ pdfshapes[index]=true
+ nofdone=nofdone+1
+ if nofdone%100==0 then
+ report_svg("%i shapes processed",nofdone)
+ end
+ end
+ end
+ end
+ inkscape:write("quit\n")
+ inkscape:close()
+ report_svg("processing %i pdf results",nofshapes)
+ for index in next,pdfshapes do
+ local svgfile=f_svgfile(index)
+ local pdffile=f_pdffile(index)
+ pdfshapes[index]=loaddata(pdffile)
+ remove(svgfile)
+ remove(pdffile)
+ end
+ statistics.stoptiming()
+ if statistics.elapsedseconds then
+ report_svg("svg conversion time %s",statistics.elapsedseconds() or "-")
+ end
+ end
+ return pdfshapes
+ end
+end
+local function initializesvg(tfmdata,kind,value)
+ if value and otf.svgenabled then
+ local svg=tfmdata.properties.svg
+ local hash=svg and svg.hash
+ local timestamp=svg and svg.timestamp
+ if not hash then
+ return
+ end
+ local pdffile=containers.read(otf.pdfcache,hash)
+ local pdfshapes=pdffile and pdffile.pdfshapes
+ if not pdfshapes or pdffile.timestamp~=timestamp then
+ local svgfile=containers.read(otf.svgcache,hash)
+ local svgshapes=svgfile and svgfile.svgshapes
+ pdfshapes=svgshapes and otfsvg.topdf(svgshapes) or {}
+ containers.write(otf.pdfcache,hash,{
+ pdfshapes=pdfshapes,
+ timestamp=timestamp,
+ })
+ end
+ pdftovirtual(tfmdata,pdfshapes,"svg")
+ end
+end
+fonts.handlers.otf.features.register {
+ name="svg",
+ description="svg glyphs",
+ manipulators={
+ base=initializesvg,
+ node=initializesvg,
+ }
+}
+local otfsbix=otf.sbix or {}
+otf.sbix=otfsbix
+otf.sbixenabled=true
+do
+ local report_sbix=logs.reporter("fonts","sbix conversion")
+ local loaddata=io.loaddata
+ local savedata=io.savedata
+ local remove=os.remove
+ local runner=sandbox and sandbox.registerrunner {
+ name="otfsbix",
+ program="gm",
+ template="convert -quality 100 temp-otf-sbix-shape.sbix temp-otf-sbix-shape.pdf > temp-otf-svg-shape.log",
+ }
+ if not runner then
+ runner=function()
+ return os.execute("gm convert -quality 100 temp-otf-sbix-shape.sbix temp-otf-sbix-shape.pdf > temp-otf-svg-shape.log")
+ end
+ end
+ function otfsbix.topdf(sbixshapes)
+ local pdfshapes={}
+ local sbixfile="temp-otf-sbix-shape.sbix"
+ local pdffile="temp-otf-sbix-shape.pdf"
+ local nofdone=0
+ local indices=sortedkeys(sbixshapes)
+ local nofindices=#indices
+ report_sbix("processing %i sbix containers",nofindices)
+ statistics.starttiming()
+ for i=1,nofindices do
+ local index=indices[i]
+ local entry=sbixshapes[index]
+ local data=entry.data
+ local x=entry.x
+ local y=entry.y
+ savedata(sbixfile,data)
+ runner()
+ pdfshapes[index]={
+ x=x~=0 and x or nil,
+ y=y~=0 and y or nil,
+ data=loaddata(pdffile),
+ }
+ nofdone=nofdone+1
+ if nofdone%100==0 then
+ report_sbix("%i shapes processed",nofdone)
+ end
+ end
+ report_sbix("processing %i pdf results",nofindices)
+ remove(sbixfile)
+ remove(pdffile)
+ statistics.stoptiming()
+ if statistics.elapsedseconds then
+ report_sbix("sbix conversion time %s",statistics.elapsedseconds() or "-")
+ end
+ return pdfshapes
+ end
+end
+local function initializesbix(tfmdata,kind,value)
+ if value and otf.sbixenabled then
+ local sbix=tfmdata.properties.sbix
+ local hash=sbix and sbix.hash
+ local timestamp=sbix and sbix.timestamp
+ if not hash then
+ return
+ end
+ local pdffile=containers.read(otf.pdfcache,hash)
+ local pdfshapes=pdffile and pdffile.pdfshapes
+ if not pdfshapes or pdffile.timestamp~=timestamp then
+ local sbixfile=containers.read(otf.sbixcache,hash)
+ local sbixshapes=sbixfile and sbixfile.sbixshapes
+ pdfshapes=sbixshapes and otfsbix.topdf(sbixshapes) or {}
+ containers.write(otf.pdfcache,hash,{
+ pdfshapes=pdfshapes,
+ timestamp=timestamp,
+ })
+ end
+ pdftovirtual(tfmdata,pdfshapes,"sbix")
+ end
+end
+fonts.handlers.otf.features.register {
+ name="sbix",
+ description="sbix glyphs",
+ manipulators={
+ base=initializesbix,
+ node=initializesbix,
+ }
+}
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-otc']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local format,insert,sortedkeys,tohash=string.format,table.insert,table.sortedkeys,table.tohash
+local type,next=type,next
+local lpegmatch=lpeg.match
+local utfbyte,utflen,utfsplit=utf.byte,utf.len,utf.split
+local trace_loading=false trackers.register("otf.loading",function(v) trace_loading=v end)
+local report_otf=logs.reporter("fonts","otf loading")
+local fonts=fonts
+local otf=fonts.handlers.otf
+local registerotffeature=otf.features.register
+local setmetatableindex=table.setmetatableindex
+local checkmerge=fonts.helpers.checkmerge
+local checkflags=fonts.helpers.checkflags
+local checksteps=fonts.helpers.checksteps
+local normalized={
+ substitution="substitution",
+ single="substitution",
+ ligature="ligature",
+ alternate="alternate",
+ multiple="multiple",
+ kern="kern",
+ pair="pair",
+ single="single",
+ chainsubstitution="chainsubstitution",
+ chainposition="chainposition",
+}
+local types={
+ substitution="gsub_single",
+ ligature="gsub_ligature",
+ alternate="gsub_alternate",
+ multiple="gsub_multiple",
+ kern="gpos_pair",
+ pair="gpos_pair",
+ single="gpos_single",
+ chainsubstitution="gsub_contextchain",
+ chainposition="gpos_contextchain",
+}
+local names={
+ gsub_single="gsub",
+ gsub_multiple="gsub",
+ gsub_alternate="gsub",
+ gsub_ligature="gsub",
+ gsub_context="gsub",
+ gsub_contextchain="gsub",
+ gsub_reversecontextchain="gsub",
+ gpos_single="gpos",
+ gpos_pair="gpos",
+ gpos_cursive="gpos",
+ gpos_mark2base="gpos",
+ gpos_mark2ligature="gpos",
+ gpos_mark2mark="gpos",
+ gpos_context="gpos",
+ gpos_contextchain="gpos",
+}
+setmetatableindex(types,function(t,k) t[k]=k return k end)
+local everywhere={ ["*"]={ ["*"]=true } }
+local noflags={ false,false,false,false }
+local function getrange(sequences,category)
+ local count=#sequences
+ local first=nil
+ local last=nil
+ for i=1,count do
+ local t=sequences[i].type
+ if t and names[t]==category then
+ if not first then
+ first=i
+ end
+ last=i
+ end
+ end
+ return first or 1,last or count
+end
+local function validspecification(specification,name)
+ local dataset=specification.dataset
+ if dataset then
+ elseif specification[1] then
+ dataset=specification
+ specification={ dataset=dataset }
+ else
+ dataset={ { data=specification.data } }
+ specification.data=nil
+ specification.dataset=dataset
+ end
+ local first=dataset[1]
+ if first then
+ first=first.data
+ end
+ if not first then
+ report_otf("invalid feature specification, no dataset")
+ return
+ end
+ if type(name)~="string" then
+ name=specification.name or first.name
+ end
+ if type(name)~="string" then
+ report_otf("invalid feature specification, no name")
+ return
+ end
+ local n=#dataset
+ if n>0 then
+ for i=1,n do
+ setmetatableindex(dataset[i],specification)
+ end
+ return specification,name
+ end
+end
+local function addfeature(data,feature,specifications)
+ if not specifications then
+ report_otf("missing specification")
+ return
+ end
+ local descriptions=data.descriptions
+ local resources=data.resources
+ local features=resources.features
+ local sequences=resources.sequences
+ if not features or not sequences then
+ report_otf("missing specification")
+ return
+ end
+ local alreadydone=resources.alreadydone
+ if not alreadydone then
+ alreadydone={}
+ resources.alreadydone=alreadydone
+ end
+ if alreadydone[specifications] then
+ return
+ else
+ alreadydone[specifications]=true
+ end
+ local fontfeatures=resources.features or everywhere
+ local unicodes=resources.unicodes
+ local splitter=lpeg.splitter(" ",unicodes)
+ local done=0
+ local skip=0
+ local aglunicodes=false
+ local specifications=validspecification(specifications,feature)
+ if not specifications then
+ return
+ end
+ local function tounicode(code)
+ if not code then
+ return
+ end
+ if type(code)=="number" then
+ return code
+ end
+ local u=unicodes[code]
+ if u then
+ return u
+ end
+ if utflen(code)==1 then
+ u=utfbyte(code)
+ if u then
+ return u
+ end
+ end
+ if not aglunicodes then
+ aglunicodes=fonts.encodings.agl.unicodes
+ end
+ return aglunicodes[code]
+ end
+ local coverup=otf.coverup
+ local coveractions=coverup.actions
+ local stepkey=coverup.stepkey
+ local register=coverup.register
+ local function prepare_substitution(list,featuretype,nocheck)
+ local coverage={}
+ local cover=coveractions[featuretype]
+ for code,replacement in next,list do
+ local unicode=tounicode(code)
+ local description=descriptions[unicode]
+ if not nocheck and not description then
+ skip=skip+1
+ else
+ if type(replacement)=="table" then
+ replacement=replacement[1]
+ end
+ replacement=tounicode(replacement)
+ if replacement and descriptions[replacement] then
+ cover(coverage,unicode,replacement)
+ done=done+1
+ else
+ skip=skip+1
+ end
+ end
+ end
+ return coverage
+ end
+ local function prepare_alternate(list,featuretype,nocheck)
+ local coverage={}
+ local cover=coveractions[featuretype]
+ for code,replacement in next,list do
+ local unicode=tounicode(code)
+ local description=descriptions[unicode]
+ if not nocheck and not description then
+ skip=skip+1
+ elseif type(replacement)=="table" then
+ local r={}
+ for i=1,#replacement do
+ local u=tounicode(replacement[i])
+ r[i]=(nocheck or descriptions[u]) and u or unicode
+ end
+ cover(coverage,unicode,r)
+ done=done+1
+ else
+ local u=tounicode(replacement)
+ if u then
+ cover(coverage,unicode,{ u })
+ done=done+1
+ else
+ skip=skip+1
+ end
+ end
+ end
+ return coverage
+ end
+ local function prepare_multiple(list,featuretype,nocheck)
+ local coverage={}
+ local cover=coveractions[featuretype]
+ for code,replacement in next,list do
+ local unicode=tounicode(code)
+ local description=descriptions[unicode]
+ if not nocheck and not description then
+ skip=skip+1
+ elseif type(replacement)=="table" then
+ local r,n={},0
+ for i=1,#replacement do
+ local u=tounicode(replacement[i])
+ if nocheck or descriptions[u] then
+ n=n+1
+ r[n]=u
+ end
+ end
+ if n>0 then
+ cover(coverage,unicode,r)
+ done=done+1
+ else
+ skip=skip+1
+ end
+ else
+ local u=tounicode(replacement)
+ if u then
+ cover(coverage,unicode,{ u })
+ done=done+1
+ else
+ skip=skip+1
+ end
+ end
+ end
+ return coverage
+ end
+ local function prepare_ligature(list,featuretype,nocheck)
+ local coverage={}
+ local cover=coveractions[featuretype]
+ for code,ligature in next,list do
+ local unicode=tounicode(code)
+ local description=descriptions[unicode]
+ if not nocheck and not description then
+ skip=skip+1
+ else
+ if type(ligature)=="string" then
+ ligature={ lpegmatch(splitter,ligature) }
+ end
+ local present=true
+ for i=1,#ligature do
+ local l=ligature[i]
+ local u=tounicode(l)
+ if nocheck or descriptions[u] then
+ ligature[i]=u
+ else
+ present=false
+ break
+ end
+ end
+ if present then
+ cover(coverage,unicode,ligature)
+ done=done+1
+ else
+ skip=skip+1
+ end
+ end
+ end
+ return coverage
+ end
+ local function resetspacekerns()
+ data.properties.hasspacekerns=true
+ data.resources .spacekerns=nil
+ end
+ local function prepare_kern(list,featuretype)
+ local coverage={}
+ local cover=coveractions[featuretype]
+ local isspace=false
+ for code,replacement in next,list do
+ local unicode=tounicode(code)
+ local description=descriptions[unicode]
+ if description and type(replacement)=="table" then
+ local r={}
+ for k,v in next,replacement do
+ local u=tounicode(k)
+ if u then
+ r[u]=v
+ if u==32 then
+ isspace=true
+ end
+ end
+ end
+ if next(r) then
+ cover(coverage,unicode,r)
+ done=done+1
+ if unicode==32 then
+ isspace=true
+ end
+ else
+ skip=skip+1
+ end
+ else
+ skip=skip+1
+ end
+ end
+ if isspace then
+ resetspacekerns()
+ end
+ return coverage
+ end
+ local function prepare_pair(list,featuretype)
+ local coverage={}
+ local cover=coveractions[featuretype]
+ if cover then
+ for code,replacement in next,list do
+ local unicode=tounicode(code)
+ local description=descriptions[unicode]
+ if description and type(replacement)=="table" then
+ local r={}
+ for k,v in next,replacement do
+ local u=tounicode(k)
+ if u then
+ r[u]=v
+ if u==32 then
+ isspace=true
+ end
+ end
+ end
+ if next(r) then
+ cover(coverage,unicode,r)
+ done=done+1
+ if unicode==32 then
+ isspace=true
+ end
+ else
+ skip=skip+1
+ end
+ else
+ skip=skip+1
+ end
+ end
+ if isspace then
+ resetspacekerns()
+ end
+ else
+ report_otf("unknown cover type %a",featuretype)
+ end
+ return coverage
+ end
+ local prepare_single=prepare_pair
+ local function prepare_chain(list,featuretype,sublookups)
+ local rules=list.rules
+ local coverage={}
+ if rules then
+ local rulehash={}
+ local rulesize=0
+ local lookuptype=types[featuretype]
+ for nofrules=1,#rules do
+ local rule=rules[nofrules]
+ local current=rule.current
+ local before=rule.before
+ local after=rule.after
+ local replacements=rule.replacements or false
+ local sequence={}
+ local nofsequences=0
+ if before then
+ for n=1,#before do
+ nofsequences=nofsequences+1
+ sequence[nofsequences]=before[n]
+ end
+ end
+ local start=nofsequences+1
+ for n=1,#current do
+ nofsequences=nofsequences+1
+ sequence[nofsequences]=current[n]
+ end
+ local stop=nofsequences
+ if after then
+ for n=1,#after do
+ nofsequences=nofsequences+1
+ sequence[nofsequences]=after[n]
+ end
+ end
+ local lookups=rule.lookups or false
+ local subtype=nil
+ if lookups and sublookups then
+ for k,v in next,lookups do
+ local t=type(v)
+ if t=="table" then
+ for i=1,#v do
+ local vi=v[i]
+ if type(vi)~="table" then
+ v[i]={ vi }
+ end
+ end
+ elseif t=="number" then
+ local lookup=sublookups[v]
+ if lookup then
+ lookups[k]={ lookup }
+ if not subtype then
+ subtype=lookup.type
+ end
+ else
+ lookups[k]={ false }
+ end
+ else
+ lookups[k]={ false }
+ end
+ end
+ end
+ if nofsequences>0 then
+ local hashed={}
+ for i=1,nofsequences do
+ local t={}
+ local s=sequence[i]
+ for i=1,#s do
+ local u=tounicode(s[i])
+ if u then
+ t[u]=true
+ end
+ end
+ hashed[i]=t
+ end
+ sequence=hashed
+ rulesize=rulesize+1
+ rulehash[rulesize]={
+ nofrules,
+ lookuptype,
+ sequence,
+ start,
+ stop,
+ lookups,
+ replacements,
+ subtype,
+ }
+ for unic in next,sequence[start] do
+ local cu=coverage[unic]
+ if not cu then
+ coverage[unic]=rulehash
+ end
+ end
+ sequence.n=nofsequences
+ end
+ end
+ rulehash.n=rulesize
+ end
+ return coverage
+ end
+ local dataset=specifications.dataset
+ local function report(name,category,position,first,last,sequences)
+ report_otf("injecting name %a of category %a at position %i in [%i,%i] of [%i,%i]",
+ name,category,position,first,last,1,#sequences)
+ end
+ local function inject(specification,sequences,sequence,first,last,category,name)
+ local position=specification.position or false
+ if not position then
+ position=specification.prepend
+ if position==true then
+ if trace_loading then
+ report(name,category,first,first,last,sequences)
+ end
+ insert(sequences,first,sequence)
+ return
+ end
+ end
+ if not position then
+ position=specification.append
+ if position==true then
+ if trace_loading then
+ report(name,category,last+1,first,last,sequences)
+ end
+ insert(sequences,last+1,sequence)
+ return
+ end
+ end
+ local kind=type(position)
+ if kind=="string" then
+ local index=false
+ for i=first,last do
+ local s=sequences[i]
+ local f=s.features
+ if f then
+ for k in next,f do
+ if k==position then
+ index=i
+ break
+ end
+ end
+ if index then
+ break
+ end
+ end
+ end
+ if index then
+ position=index
+ else
+ position=last+1
+ end
+ elseif kind=="number" then
+ if position<0 then
+ position=last-position+1
+ end
+ if position>last then
+ position=last+1
+ elseif position<first then
+ position=first
+ end
+ else
+ position=last+1
+ end
+ if trace_loading then
+ report(name,category,position,first,last,sequences)
+ end
+ insert(sequences,position,sequence)
+ end
+ for s=1,#dataset do
+ local specification=dataset[s]
+ local valid=specification.valid
+ local feature=specification.name or feature
+ if not feature or feature=="" then
+ report_otf("no valid name given for extra feature")
+ elseif not valid or valid(data,specification,feature) then
+ local initialize=specification.initialize
+ if initialize then
+ specification.initialize=initialize(specification,data) and initialize or nil
+ end
+ local askedfeatures=specification.features or everywhere
+ local askedsteps=specification.steps or specification.subtables or { specification.data } or {}
+ local featuretype=normalized[specification.type or "substitution"] or "substitution"
+ local featureflags=specification.flags or noflags
+ local nocheck=specification.nocheck
+ local futuresteps=specification.futuresteps
+ local featureorder=specification.order or { feature }
+ local featurechain=(featuretype=="chainsubstitution" or featuretype=="chainposition") and 1 or 0
+ local nofsteps=0
+ local steps={}
+ local sublookups=specification.lookups
+ local category=nil
+ checkflags(specification,resources)
+ if sublookups then
+ local s={}
+ for i=1,#sublookups do
+ local specification=sublookups[i]
+ local askedsteps=specification.steps or specification.subtables or { specification.data } or {}
+ local featuretype=normalized[specification.type or "substitution"] or "substitution"
+ local featureflags=specification.flags or noflags
+ local nofsteps=0
+ local steps={}
+ for i=1,#askedsteps do
+ local list=askedsteps[i]
+ local coverage=nil
+ local format=nil
+ if featuretype=="substitution" then
+ coverage=prepare_substitution(list,featuretype,nocheck)
+ elseif featuretype=="ligature" then
+ coverage=prepare_ligature(list,featuretype,nocheck)
+ elseif featuretype=="alternate" then
+ coverage=prepare_alternate(list,featuretype,nocheck)
+ elseif featuretype=="multiple" then
+ coverage=prepare_multiple(list,featuretype,nocheck)
+ elseif featuretype=="kern" or featuretype=="move" then
+ format=featuretype
+ coverage=prepare_kern(list,featuretype)
+ elseif featuretype=="pair" then
+ format="pair"
+ coverage=prepare_pair(list,featuretype)
+ elseif featuretype=="single" then
+ format="single"
+ coverage=prepare_single(list,featuretype)
+ end
+ if coverage and next(coverage) then
+ nofsteps=nofsteps+1
+ steps[nofsteps]=register(coverage,featuretype,format,feature,nofsteps,descriptions,resources)
+ end
+ end
+ checkmerge(specification)
+ checksteps(specification)
+ s[i]={
+ [stepkey]=steps,
+ nofsteps=nofsteps,
+ flags=featureflags,
+ type=types[featuretype],
+ }
+ end
+ sublookups=s
+ end
+ for i=1,#askedsteps do
+ local list=askedsteps[i]
+ local coverage=nil
+ local format=nil
+ if featuretype=="substitution" then
+ category="gsub"
+ coverage=prepare_substitution(list,featuretype,nocheck)
+ elseif featuretype=="ligature" then
+ category="gsub"
+ coverage=prepare_ligature(list,featuretype,nocheck)
+ elseif featuretype=="alternate" then
+ category="gsub"
+ coverage=prepare_alternate(list,featuretype,nocheck)
+ elseif featuretype=="multiple" then
+ category="gsub"
+ coverage=prepare_multiple(list,featuretype,nocheck)
+ elseif featuretype=="kern" or featuretype=="move" then
+ category="gpos"
+ format=featuretype
+ coverage=prepare_kern(list,featuretype)
+ elseif featuretype=="pair" then
+ category="gpos"
+ format="pair"
+ coverage=prepare_pair(list,featuretype)
+ elseif featuretype=="single" then
+ category="gpos"
+ format="single"
+ coverage=prepare_single(list,featuretype)
+ elseif featuretype=="chainsubstitution" then
+ category="gsub"
+ coverage=prepare_chain(list,featuretype,sublookups)
+ elseif featuretype=="chainposition" then
+ category="gpos"
+ coverage=prepare_chain(list,featuretype,sublookups)
+ else
+ report_otf("not registering feature %a, unknown category",feature)
+ return
+ end
+ if coverage and next(coverage) then
+ nofsteps=nofsteps+1
+ steps[nofsteps]=register(coverage,featuretype,format,feature,nofsteps,descriptions,resources)
+ end
+ end
+ if nofsteps>0 then
+ for k,v in next,askedfeatures do
+ if v[1] then
+ askedfeatures[k]=tohash(v)
+ end
+ end
+ if featureflags[1] then featureflags[1]="mark" end
+ if featureflags[2] then featureflags[2]="ligature" end
+ if featureflags[3] then featureflags[3]="base" end
+ local steptype=types[featuretype]
+ local sequence={
+ chain=featurechain,
+ features={ [feature]=askedfeatures },
+ flags=featureflags,
+ name=feature,
+ order=featureorder,
+ [stepkey]=steps,
+ nofsteps=nofsteps,
+ type=steptype,
+ }
+ checkflags(sequence,resources)
+ checkmerge(sequence)
+ checksteps(sequence)
+ local first,last=getrange(sequences,category)
+ inject(specification,sequences,sequence,first,last,category,feature)
+ local features=fontfeatures[category]
+ if not features then
+ features={}
+ fontfeatures[category]=features
+ end
+ local k=features[feature]
+ if not k then
+ k={}
+ features[feature]=k
+ end
+ for script,languages in next,askedfeatures do
+ local kk=k[script]
+ if not kk then
+ kk={}
+ k[script]=kk
+ end
+ for language,value in next,languages do
+ kk[language]=value
+ end
+ end
+ end
+ end
+ end
+ if trace_loading then
+ report_otf("registering feature %a, affected glyphs %a, skipped glyphs %a",feature,done,skip)
+ end
+end
+otf.enhancers.addfeature=addfeature
+local extrafeatures={}
+local knownfeatures={}
+function otf.addfeature(name,specification)
+ if type(name)=="table" then
+ specification=name
+ end
+ if type(specification)~="table" then
+ report_otf("invalid feature specification, no valid table")
+ return
+ end
+ specification,name=validspecification(specification,name)
+ if name and specification then
+ local slot=knownfeatures[name]
+ if not slot then
+ slot=#extrafeatures+1
+ knownfeatures[name]=slot
+ elseif specification.overload==false then
+ slot=#extrafeatures+1
+ knownfeatures[name]=slot
+ else
+ end
+ specification.name=name
+ extrafeatures[slot]=specification
+ end
+end
+local function enhance(data,filename,raw)
+ for slot=1,#extrafeatures do
+ local specification=extrafeatures[slot]
+ addfeature(data,specification.name,specification)
+ end
+end
+otf.enhancers.enhance=enhance
+otf.enhancers.register("check extra features",enhance)
+local tlig={
+ [0x2013]={ 0x002D,0x002D },
+ [0x2014]={ 0x002D,0x002D,0x002D },
+}
+local tlig_specification={
+ type="ligature",
+ features=everywhere,
+ data=tlig,
+ order={ "tlig" },
+ flags=noflags,
+ prepend=true,
+}
+otf.addfeature("tlig",tlig_specification)
+registerotffeature {
+ name='tlig',
+ description='tex ligatures',
+}
+local trep={
+ [0x0027]=0x2019,
+}
+local trep_specification={
+ type="substitution",
+ features=everywhere,
+ data=trep,
+ order={ "trep" },
+ flags=noflags,
+ prepend=true,
+}
+otf.addfeature("trep",trep_specification)
+registerotffeature {
+ name='trep',
+ description='tex replacements',
+}
+local anum_arabic={
+ [0x0030]=0x0660,
+ [0x0031]=0x0661,
+ [0x0032]=0x0662,
+ [0x0033]=0x0663,
+ [0x0034]=0x0664,
+ [0x0035]=0x0665,
+ [0x0036]=0x0666,
+ [0x0037]=0x0667,
+ [0x0038]=0x0668,
+ [0x0039]=0x0669,
+}
+local anum_persian={
+ [0x0030]=0x06F0,
+ [0x0031]=0x06F1,
+ [0x0032]=0x06F2,
+ [0x0033]=0x06F3,
+ [0x0034]=0x06F4,
+ [0x0035]=0x06F5,
+ [0x0036]=0x06F6,
+ [0x0037]=0x06F7,
+ [0x0038]=0x06F8,
+ [0x0039]=0x06F9,
+}
+local function valid(data)
+ local features=data.resources.features
+ if features then
+ for k,v in next,features do
+ for k,v in next,v do
+ if v.arab then
+ return true
+ end
+ end
+ end
+ end
+end
+local anum_specification={
+ {
+ type="substitution",
+ features={ arab={ urd=true,dflt=true } },
+ order={ "anum" },
+ data=anum_arabic,
+ flags=noflags,
+ valid=valid,
+ },
+ {
+ type="substitution",
+ features={ arab={ urd=true } },
+ order={ "anum" },
+ data=anum_persian,
+ flags=noflags,
+ valid=valid,
+ },
+}
+otf.addfeature("anum",anum_specification)
+registerotffeature {
+ name='anum',
+ description='arabic digits',
+}
+local lookups={}
+local protect={}
+local revert={}
+local zwj={ 0x200C }
+otf.addfeature {
+ name="blockligatures",
+ type="chainsubstitution",
+ nocheck=true,
+ prepend=true,
+ future=true,
+ lookups={
+ {
+ type="multiple",
+ data=lookups,
+ },
+ },
+ data={
+ rules=protect,
+ }
+}
+otf.addfeature {
+ name="blockligatures",
+ type="chainsubstitution",
+ nocheck=true,
+ append=true,
+ overload=false,
+ lookups={
+ {
+ type="ligature",
+ data=lookups,
+ },
+ },
+ data={
+ rules=revert,
+ }
+}
+registerotffeature {
+ name='blockligatures',
+ description='block certain ligatures',
+}
+local settings_to_array=utilities.parsers and utilities.parsers.settings_to_array
+ or function(s) return string.split(s,",") end
+local function blockligatures(str)
+ local t=settings_to_array(str)
+ for i=1,#t do
+ local ti=utfsplit(t[i])
+ if #ti>1 then
+ local one=ti[1]
+ local two=ti[2]
+ lookups[one]={ one,0x200C }
+ local one={ one }
+ local two={ two }
+ local new=#protect+1
+ protect[new]={
+ current={ one,two },
+ lookups={ 1 },
+ }
+ revert[new]={
+ current={ one,zwj },
+ after={ two },
+ lookups={ 1 },
+ }
+ end
+ end
+end
+otf.helpers.blockligatures=blockligatures
+if context then
+ interfaces.implement {
+ name="blockligatures",
+ arguments="string",
+ actions=blockligatures,
+ }
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-onr']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local fonts,logs,trackers,resolvers=fonts,logs,trackers,resolvers
+local next,type,tonumber,rawget,rawset=next,type,tonumber,rawget,rawset
+local match,lower,gsub,strip,find=string.match,string.lower,string.gsub,string.strip,string.find
+local char,byte,sub=string.char,string.byte,string.sub
+local abs=math.abs
+local bxor,rshift=bit32.bxor,bit32.rshift
+local P,S,R,Cmt,C,Ct,Cs,Carg,Cf,Cg=lpeg.P,lpeg.S,lpeg.R,lpeg.Cmt,lpeg.C,lpeg.Ct,lpeg.Cs,lpeg.Carg,lpeg.Cf,lpeg.Cg
+local lpegmatch,patterns=lpeg.match,lpeg.patterns
+local trace_indexing=false trackers.register("afm.indexing",function(v) trace_indexing=v end)
+local trace_loading=false trackers.register("afm.loading",function(v) trace_loading=v end)
+local report_afm=logs.reporter("fonts","afm loading")
+local report_pfb=logs.reporter("fonts","pfb loading")
+local handlers=fonts.handlers
+local afm=handlers.afm or {}
+handlers.afm=afm
+local readers=afm.readers or {}
+afm.readers=readers
+afm.version=1.513
+local get_indexes,get_shapes
+do
+ local decrypt
+ do
+ local r,c1,c2,n=0,0,0,0
+ local function step(c)
+ local cipher=byte(c)
+ local plain=bxor(cipher,rshift(r,8))
+ r=((cipher+r)*c1+c2)%65536
+ return char(plain)
+ end
+ decrypt=function(binary,initial,seed)
+ r,c1,c2,n=initial,52845,22719,seed
+ binary=gsub(binary,".",step)
+ return sub(binary,n+1)
+ end
+ end
+ local charstrings=P("/CharStrings")
+ local subroutines=P("/Subrs")
+ local encoding=P("/Encoding")
+ local dup=P("dup")
+ local put=P("put")
+ local array=P("array")
+ local name=P("/")*C((R("az","AZ","09")+S("-_."))^1)
+ local digits=R("09")^1
+ local cardinal=digits/tonumber
+ local spaces=P(" ")^1
+ local spacing=patterns.whitespace^0
+ local routines,vector,chars,n,m
+ local initialize=function(str,position,size)
+ n=0
+ m=size
+ return position+1
+ end
+ local setroutine=function(str,position,index,size,filename)
+ local forward=position+tonumber(size)
+ local stream=decrypt(sub(str,position+1,forward),4330,4)
+ routines[index]={ byte(stream,1,#stream) }
+ return forward
+ end
+ local setvector=function(str,position,name,size,filename)
+ local forward=position+tonumber(size)
+ if n>=m then
+ return #str
+ elseif forward<#str then
+ if n==0 and name~=".notdef" then
+ report_pfb("reserving .notdef at index 0 in %a",filename)
+ n=n+1
+ end
+ vector[n]=name
+ n=n+1
+ return forward
+ else
+ return #str
+ end
+ end
+ local setshapes=function(str,position,name,size,filename)
+ local forward=position+tonumber(size)
+ local stream=sub(str,position+1,forward)
+ if n>m then
+ return #str
+ elseif forward<#str then
+ if n==0 and name~=".notdef" then
+ report_pfb("reserving .notdef at index 0 in %a",filename)
+ n=n+1
+ end
+ vector[n]=name
+ n=n+1
+ chars [n]=decrypt(stream,4330,4)
+ return forward
+ else
+ return #str
+ end
+ end
+ local p_rd=spacing*(P("RD")+P("-|"))
+ local p_np=spacing*(P("NP")+P("|"))
+ local p_nd=spacing*(P("ND")+P("|"))
+ local p_filterroutines=
+ (1-subroutines)^0*subroutines*spaces*Cmt(cardinal,initialize)*(Cmt(cardinal*spaces*cardinal*p_rd*Carg(1),setroutine)*p_np+P(1))^1
+ local p_filtershapes=
+ (1-charstrings)^0*charstrings*spaces*Cmt(cardinal,initialize)*(Cmt(name*spaces*cardinal*p_rd*Carg(1),setshapes)*p_nd+P(1))^1
+ local p_filternames=Ct (
+ (1-charstrings)^0*charstrings*spaces*Cmt(cardinal,initialize)*(Cmt(name*spaces*cardinal*Carg(1),setvector)+P(1))^1
+ )
+ local p_filterencoding=(1-encoding)^0*encoding*spaces*digits*spaces*array*(1-dup)^0*Cf(
+ Ct("")*Cg(spacing*dup*spaces*cardinal*spaces*name*spaces*put)^1
+,rawset)
+ local function loadpfbvector(filename,shapestoo)
+ local data=io.loaddata(resolvers.findfile(filename))
+ if not data then
+ report_pfb("no data in %a",filename)
+ return
+ end
+ if not (find(data,"!PS%-AdobeFont%-") or find(data,"%%!FontType1")) then
+ report_pfb("no font in %a",filename)
+ return
+ end
+ local ascii,binary=match(data,"(.*)eexec%s+......(.*)")
+ if not binary then
+ report_pfb("no binary data in %a",filename)
+ return
+ end
+ binary=decrypt(binary,55665,4)
+ local names={}
+ local encoding=lpegmatch(p_filterencoding,ascii)
+ local glyphs={}
+ routines,vector,chars={},{},{}
+ if shapestoo then
+ lpegmatch(p_filterroutines,binary,1,filename)
+ lpegmatch(p_filtershapes,binary,1,filename)
+ local data={
+ dictionaries={
+ {
+ charstrings=chars,
+ charset=vector,
+ subroutines=routines,
+ }
+ },
+ }
+ fonts.handlers.otf.readers.parsecharstrings(false,data,glyphs,true,true)
+ else
+ lpegmatch(p_filternames,binary,1,filename)
+ end
+ names=vector
+ routines,vector,chars=nil,nil,nil
+ return names,encoding,glyphs
+ end
+ local pfb=handlers.pfb or {}
+ handlers.pfb=pfb
+ pfb.loadvector=loadpfbvector
+ get_indexes=function(data,pfbname)
+ local vector=loadpfbvector(pfbname)
+ if vector then
+ local characters=data.characters
+ if trace_loading then
+ report_afm("getting index data from %a",pfbname)
+ end
+ for index=0,#vector do
+ local name=vector[index]
+ local char=characters[name]
+ if char then
+ if trace_indexing then
+ report_afm("glyph %a has index %a",name,index)
+ end
+ char.index=index
+ else
+ if trace_indexing then
+ report_afm("glyph %a has index %a but no data",name,index)
+ end
+ end
+ end
+ end
+ end
+ get_shapes=function(pfbname)
+ local vector,encoding,glyphs=loadpfbvector(pfbname,true)
+ return glyphs
+ end
+end
+local spacer=patterns.spacer
+local whitespace=patterns.whitespace
+local lineend=patterns.newline
+local spacing=spacer^0
+local number=spacing*S("+-")^-1*(R("09")+S("."))^1/tonumber
+local name=spacing*C((1-whitespace)^1)
+local words=spacing*((1-lineend)^1/strip)
+local rest=(1-lineend)^0
+local fontdata=Carg(1)
+local semicolon=spacing*P(";")
+local plus=spacing*P("plus")*number
+local minus=spacing*P("minus")*number
+local function addkernpair(data,one,two,value)
+ local chr=data.characters[one]
+ if chr then
+ local kerns=chr.kerns
+ if kerns then
+ kerns[two]=tonumber(value)
+ else
+ chr.kerns={ [two]=tonumber(value) }
+ end
+ end
+end
+local p_kernpair=(fontdata*P("KPX")*name*name*number)/addkernpair
+local chr=false
+local ind=0
+local function start(data,version)
+ data.metadata.afmversion=version
+ ind=0
+ chr={}
+end
+local function stop()
+ ind=0
+ chr=false
+end
+local function setindex(i)
+ if i<0 then
+ ind=ind+1
+ else
+ ind=i
+ end
+ chr={
+ index=ind
+ }
+end
+local function setwidth(width)
+ chr.width=width
+end
+local function setname(data,name)
+ data.characters[name]=chr
+end
+local function setboundingbox(boundingbox)
+ chr.boundingbox=boundingbox
+end
+local function setligature(plus,becomes)
+ local ligatures=chr.ligatures
+ if ligatures then
+ ligatures[plus]=becomes
+ else
+ chr.ligatures={ [plus]=becomes }
+ end
+end
+local p_charmetric=((
+ P("C")*number/setindex+P("WX")*number/setwidth+P("N")*fontdata*name/setname+P("B")*Ct((number)^4)/setboundingbox+P("L")*(name)^2/setligature
+ )*semicolon )^1
+local p_charmetrics=P("StartCharMetrics")*number*(p_charmetric+(1-P("EndCharMetrics")))^0*P("EndCharMetrics")
+local p_kernpairs=P("StartKernPairs")*number*(p_kernpair+(1-P("EndKernPairs" )))^0*P("EndKernPairs" )
+local function set_1(data,key,a) data.metadata[lower(key)]=a end
+local function set_2(data,key,a,b) data.metadata[lower(key)]={ a,b } end
+local function set_3(data,key,a,b,c) data.metadata[lower(key)]={ a,b,c } end
+local p_parameters=P(false)+fontdata*((P("FontName")+P("FullName")+P("FamilyName"))/lower)*words/function(data,key,value)
+ data.metadata[key]=value
+ end+fontdata*((P("Weight")+P("Version"))/lower)*name/function(data,key,value)
+ data.metadata[key]=value
+ end+fontdata*P("IsFixedPitch")*name/function(data,pitch)
+ data.metadata.monospaced=toboolean(pitch,true)
+ end+fontdata*P("FontBBox")*Ct(number^4)/function(data,boundingbox)
+ data.metadata.boundingbox=boundingbox
+ end+fontdata*((P("CharWidth")+P("CapHeight")+P("XHeight")+P("Descender")+P("Ascender")+P("ItalicAngle"))/lower)*number/function(data,key,value)
+ data.metadata[key]=value
+ end+P("Comment")*spacing*(P(false)+(fontdata*C("DESIGNSIZE")*number*rest)/set_1
++(fontdata*C("TFM designsize")*number*rest)/set_1+(fontdata*C("DesignSize")*number*rest)/set_1+(fontdata*C("CODINGSCHEME")*words*rest)/set_1
++(fontdata*C("CHECKSUM")*number*words*rest)/set_1
++(fontdata*C("SPACE")*number*plus*minus*rest)/set_3
++(fontdata*C("QUAD")*number*rest)/set_1
++(fontdata*C("EXTRASPACE")*number*rest)/set_1
++(fontdata*C("NUM")*number*number*number*rest)/set_3
++(fontdata*C("DENOM")*number*number*rest)/set_2
++(fontdata*C("SUP")*number*number*number*rest)/set_3
++(fontdata*C("SUB")*number*number*rest)/set_2
++(fontdata*C("SUPDROP")*number*rest)/set_1
++(fontdata*C("SUBDROP")*number*rest)/set_1
++(fontdata*C("DELIM")*number*number*rest)/set_2
++(fontdata*C("AXISHEIGHT")*number*rest)/set_1
+ )
+local fullparser=(P("StartFontMetrics")*fontdata*name/start )*(p_charmetrics+p_kernpairs+p_parameters+(1-P("EndFontMetrics")) )^0*(P("EndFontMetrics")/stop )
+local infoparser=(P("StartFontMetrics")*fontdata*name/start )*(p_parameters+(1-P("EndFontMetrics")) )^0*(P("EndFontMetrics")/stop )
+local function read(filename,parser)
+ local afmblob=io.loaddata(filename)
+ if afmblob then
+ local data={
+ resources={
+ filename=resolvers.unresolve(filename),
+ version=afm.version,
+ creator="context mkiv",
+ },
+ properties={
+ hasitalics=false,
+ },
+ goodies={},
+ metadata={
+ filename=file.removesuffix(file.basename(filename))
+ },
+ characters={
+ },
+ descriptions={
+ },
+ }
+ if trace_loading then
+ report_afm("parsing afm file %a",filename)
+ end
+ lpegmatch(parser,afmblob,1,data)
+ return data
+ else
+ if trace_loading then
+ report_afm("no valid afm file %a",filename)
+ end
+ return nil
+ end
+end
+function readers.loadfont(afmname,pfbname)
+ local data=read(resolvers.findfile(afmname),fullparser)
+ if data then
+ if not pfbname or pfbname=="" then
+ pfbname=resolvers.findfile(file.replacesuffix(file.nameonly(afmname),"pfb"))
+ end
+ if pfbname and pfbname~="" then
+ data.resources.filename=resolvers.unresolve(pfbname)
+ get_indexes(data,pfbname)
+ return data
+ else
+ report_afm("no pfb file for %a",afmname)
+ end
+ end
+end
+function readers.loadshapes(filename)
+ local fullname=resolvers.findfile(filename) or ""
+ if fullname=="" then
+ return {
+ filename="not found: "..filename,
+ glyphs={}
+ }
+ else
+ return {
+ filename=fullname,
+ format="opentype",
+ glyphs=get_shapes(fullname) or {},
+ units=1000,
+ }
+ end
+end
+function readers.getinfo(filename)
+ local data=read(resolvers.findfile(filename),infoparser)
+ if data then
+ return data.metadata
+ end
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-one']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local fonts,logs,trackers,containers,resolvers=fonts,logs,trackers,containers,resolvers
+local next,type,tonumber,rawget=next,type,tonumber,rawget
+local match,gmatch,lower,gsub,strip,find=string.match,string.gmatch,string.lower,string.gsub,string.strip,string.find
+local char,byte,sub=string.char,string.byte,string.sub
+local abs=math.abs
+local bxor,rshift=bit32.bxor,bit32.rshift
+local P,S,R,Cmt,C,Ct,Cs,Carg=lpeg.P,lpeg.S,lpeg.R,lpeg.Cmt,lpeg.C,lpeg.Ct,lpeg.Cs,lpeg.Carg
+local lpegmatch,patterns=lpeg.match,lpeg.patterns
+local trace_features=false trackers.register("afm.features",function(v) trace_features=v end)
+local trace_indexing=false trackers.register("afm.indexing",function(v) trace_indexing=v end)
+local trace_loading=false trackers.register("afm.loading",function(v) trace_loading=v end)
+local trace_defining=false trackers.register("fonts.defining",function(v) trace_defining=v end)
+local report_afm=logs.reporter("fonts","afm loading")
+local setmetatableindex=table.setmetatableindex
+local derivetable=table.derive
+local findbinfile=resolvers.findbinfile
+local privateoffset=fonts.constructors and fonts.constructors.privateoffset or 0xF0000
+local definers=fonts.definers
+local readers=fonts.readers
+local constructors=fonts.constructors
+local afm=constructors.handlers.afm
+local pfb=constructors.handlers.pfb
+local otf=fonts.handlers.otf
+local otfreaders=otf.readers
+local otfenhancers=otf.enhancers
+local afmfeatures=constructors.features.afm
+local registerafmfeature=afmfeatures.register
+local afmenhancers=constructors.enhancers.afm
+local registerafmenhancer=afmenhancers.register
+afm.version=1.512
+afm.cache=containers.define("fonts","one",afm.version,true)
+afm.autoprefixed=true
+afm.helpdata={}
+afm.syncspace=true
+local overloads=fonts.mappings.overloads
+local applyruntimefixes=fonts.treatments and fonts.treatments.applyfixes
+function afm.load(filename)
+ filename=resolvers.findfile(filename,'afm') or ""
+ if filename~="" and not fonts.names.ignoredfile(filename) then
+ local name=file.removesuffix(file.basename(filename))
+ local data=containers.read(afm.cache,name)
+ local attr=lfs.attributes(filename)
+ local size,time=attr.size or 0,attr.modification or 0
+ local pfbfile=file.replacesuffix(name,"pfb")
+ local pfbname=resolvers.findfile(pfbfile,"pfb") or ""
+ if pfbname=="" then
+ pfbname=resolvers.findfile(file.basename(pfbfile),"pfb") or ""
+ end
+ local pfbsize,pfbtime=0,0
+ if pfbname~="" then
+ local attr=lfs.attributes(pfbname)
+ pfbsize=attr.size or 0
+ pfbtime=attr.modification or 0
+ end
+ if not data or data.size~=size or data.time~=time or data.pfbsize~=pfbsize or data.pfbtime~=pfbtime then
+ report_afm("reading %a",filename)
+ data=afm.readers.loadfont(filename,pfbname)
+ if data then
+ afmenhancers.apply(data,filename)
+ fonts.mappings.addtounicode(data,filename)
+ otfreaders.pack(data)
+ data.size=size
+ data.time=time
+ data.pfbsize=pfbsize
+ data.pfbtime=pfbtime
+ report_afm("saving %a in cache",name)
+ data=containers.write(afm.cache,name,data)
+ data=containers.read(afm.cache,name)
+ end
+ end
+ if data then
+ otfreaders.unpack(data)
+ otfreaders.expand(data)
+ otfreaders.addunicodetable(data)
+ otfenhancers.apply(data,filename,data)
+ if applyruntimefixes then
+ applyruntimefixes(filename,data)
+ end
+ end
+ return data
+ end
+end
+local uparser=fonts.mappings.makenameparser()
+local function enhance_unify_names(data,filename)
+ local unicodevector=fonts.encodings.agl.unicodes
+ local unicodes={}
+ local names={}
+ local private=data.private or privateoffset
+ local descriptions=data.descriptions
+ for name,blob in next,data.characters do
+ local code=unicodevector[name]
+ if not code then
+ code=lpegmatch(uparser,name)
+ if type(code)~="number" then
+ code=private
+ private=private+1
+ report_afm("assigning private slot %U for unknown glyph name %a",code,name)
+ end
+ end
+ local index=blob.index
+ unicodes[name]=code
+ names[name]=index
+ blob.name=name
+ descriptions[code]={
+ boundingbox=blob.boundingbox,
+ width=blob.width,
+ kerns=blob.kerns,
+ index=index,
+ name=name,
+ }
+ end
+ for unicode,description in next,descriptions do
+ local kerns=description.kerns
+ if kerns then
+ local krn={}
+ for name,kern in next,kerns do
+ local unicode=unicodes[name]
+ if unicode then
+ krn[unicode]=kern
+ else
+ end
+ end
+ description.kerns=krn
+ end
+ end
+ data.characters=nil
+ data.private=private
+ local resources=data.resources
+ local filename=resources.filename or file.removesuffix(file.basename(filename))
+ resources.filename=resolvers.unresolve(filename)
+ resources.unicodes=unicodes
+ resources.marks={}
+end
+local everywhere={ ["*"]={ ["*"]=true } }
+local noflags={ false,false,false,false }
+local function enhance_normalize_features(data)
+ local ligatures=setmetatableindex("table")
+ local kerns=setmetatableindex("table")
+ local extrakerns=setmetatableindex("table")
+ for u,c in next,data.descriptions do
+ local l=c.ligatures
+ local k=c.kerns
+ local e=c.extrakerns
+ if l then
+ ligatures[u]=l
+ for u,v in next,l do
+ l[u]={ ligature=v }
+ end
+ c.ligatures=nil
+ end
+ if k then
+ kerns[u]=k
+ for u,v in next,k do
+ k[u]=v
+ end
+ c.kerns=nil
+ end
+ if e then
+ extrakerns[u]=e
+ for u,v in next,e do
+ e[u]=v
+ end
+ c.extrakerns=nil
+ end
+ end
+ local features={
+ gpos={},
+ gsub={},
+ }
+ local sequences={
+ }
+ if next(ligatures) then
+ features.gsub.liga=everywhere
+ data.properties.hasligatures=true
+ sequences[#sequences+1]={
+ features={
+ liga=everywhere,
+ },
+ flags=noflags,
+ name="s_s_0",
+ nofsteps=1,
+ order={ "liga" },
+ type="gsub_ligature",
+ steps={
+ {
+ coverage=ligatures,
+ },
+ },
+ }
+ end
+ if next(kerns) then
+ features.gpos.kern=everywhere
+ data.properties.haskerns=true
+ sequences[#sequences+1]={
+ features={
+ kern=everywhere,
+ },
+ flags=noflags,
+ name="p_s_0",
+ nofsteps=1,
+ order={ "kern" },
+ type="gpos_pair",
+ steps={
+ {
+ format="kern",
+ coverage=kerns,
+ },
+ },
+ }
+ end
+ if next(extrakerns) then
+ features.gpos.extrakerns=everywhere
+ data.properties.haskerns=true
+ sequences[#sequences+1]={
+ features={
+ extrakerns=everywhere,
+ },
+ flags=noflags,
+ name="p_s_1",
+ nofsteps=1,
+ order={ "extrakerns" },
+ type="gpos_pair",
+ steps={
+ {
+ format="kern",
+ coverage=extrakerns,
+ },
+ },
+ }
+ end
+ data.resources.features=features
+ data.resources.sequences=sequences
+end
+local function enhance_fix_names(data)
+ for k,v in next,data.descriptions do
+ local n=v.name
+ local r=overloads[n]
+ if r then
+ local name=r.name
+ if trace_indexing then
+ report_afm("renaming characters %a to %a",n,name)
+ end
+ v.name=name
+ v.unicode=r.unicode
+ end
+ end
+end
+local addthem=function(rawdata,ligatures)
+ if ligatures then
+ local descriptions=rawdata.descriptions
+ local resources=rawdata.resources
+ local unicodes=resources.unicodes
+ for ligname,ligdata in next,ligatures do
+ local one=descriptions[unicodes[ligname]]
+ if one then
+ for _,pair in next,ligdata do
+ local two,three=unicodes[pair[1]],unicodes[pair[2]]
+ if two and three then
+ local ol=one.ligatures
+ if ol then
+ if not ol[two] then
+ ol[two]=three
+ end
+ else
+ one.ligatures={ [two]=three }
+ end
+ end
+ end
+ end
+ end
+ end
+end
+local function enhance_add_ligatures(rawdata)
+ addthem(rawdata,afm.helpdata.ligatures)
+end
+local function enhance_add_extra_kerns(rawdata)
+ local descriptions=rawdata.descriptions
+ local resources=rawdata.resources
+ local unicodes=resources.unicodes
+ local function do_it_left(what)
+ if what then
+ for unicode,description in next,descriptions do
+ local kerns=description.kerns
+ if kerns then
+ local extrakerns
+ for complex,simple in next,what do
+ complex=unicodes[complex]
+ simple=unicodes[simple]
+ if complex and simple then
+ local ks=kerns[simple]
+ if ks and not kerns[complex] then
+ if extrakerns then
+ extrakerns[complex]=ks
+ else
+ extrakerns={ [complex]=ks }
+ end
+ end
+ end
+ end
+ if extrakerns then
+ description.extrakerns=extrakerns
+ end
+ end
+ end
+ end
+ end
+ local function do_it_copy(what)
+ if what then
+ for complex,simple in next,what do
+ complex=unicodes[complex]
+ simple=unicodes[simple]
+ if complex and simple then
+ local complexdescription=descriptions[complex]
+ if complexdescription then
+ local simpledescription=descriptions[complex]
+ if simpledescription then
+ local extrakerns
+ local kerns=simpledescription.kerns
+ if kerns then
+ for unicode,kern in next,kerns do
+ if extrakerns then
+ extrakerns[unicode]=kern
+ else
+ extrakerns={ [unicode]=kern }
+ end
+ end
+ end
+ local extrakerns=simpledescription.extrakerns
+ if extrakerns then
+ for unicode,kern in next,extrakerns do
+ if extrakerns then
+ extrakerns[unicode]=kern
+ else
+ extrakerns={ [unicode]=kern }
+ end
+ end
+ end
+ if extrakerns then
+ complexdescription.extrakerns=extrakerns
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ do_it_left(afm.helpdata.leftkerned)
+ do_it_left(afm.helpdata.bothkerned)
+ do_it_copy(afm.helpdata.bothkerned)
+ do_it_copy(afm.helpdata.rightkerned)
+end
+local function adddimensions(data)
+ if data then
+ for unicode,description in next,data.descriptions do
+ local bb=description.boundingbox
+ if bb then
+ local ht,dp=bb[4],-bb[2]
+ if ht==0 or ht<0 then
+ else
+ description.height=ht
+ end
+ if dp==0 or dp<0 then
+ else
+ description.depth=dp
+ end
+ end
+ end
+ end
+end
+local function copytotfm(data)
+ if data and data.descriptions then
+ local metadata=data.metadata
+ local resources=data.resources
+ local properties=derivetable(data.properties)
+ local descriptions=derivetable(data.descriptions)
+ local goodies=derivetable(data.goodies)
+ local characters={}
+ local parameters={}
+ local unicodes=resources.unicodes
+ for unicode,description in next,data.descriptions do
+ characters[unicode]={}
+ end
+ local filename=constructors.checkedfilename(resources)
+ local fontname=metadata.fontname or metadata.fullname
+ local fullname=metadata.fullname or metadata.fontname
+ local endash=0x0020
+ local emdash=0x2014
+ local spacer="space"
+ local spaceunits=500
+ local monospaced=metadata.monospaced
+ local charwidth=metadata.charwidth
+ local italicangle=metadata.italicangle
+ local charxheight=metadata.xheight and metadata.xheight>0 and metadata.xheight
+ properties.monospaced=monospaced
+ parameters.italicangle=italicangle
+ parameters.charwidth=charwidth
+ parameters.charxheight=charxheight
+ if properties.monospaced then
+ if descriptions[endash] then
+ spaceunits,spacer=descriptions[endash].width,"space"
+ end
+ if not spaceunits and descriptions[emdash] then
+ spaceunits,spacer=descriptions[emdash].width,"emdash"
+ end
+ if not spaceunits and charwidth then
+ spaceunits,spacer=charwidth,"charwidth"
+ end
+ else
+ if descriptions[endash] then
+ spaceunits,spacer=descriptions[endash].width,"space"
+ end
+ if not spaceunits and charwidth then
+ spaceunits,spacer=charwidth,"charwidth"
+ end
+ end
+ spaceunits=tonumber(spaceunits)
+ if spaceunits<200 then
+ end
+ parameters.slant=0
+ parameters.space=spaceunits
+ parameters.space_stretch=500
+ parameters.space_shrink=333
+ parameters.x_height=400
+ parameters.quad=1000
+ if italicangle and italicangle~=0 then
+ parameters.italicangle=italicangle
+ parameters.italicfactor=math.cos(math.rad(90+italicangle))
+ parameters.slant=- math.tan(italicangle*math.pi/180)
+ end
+ if monospaced then
+ parameters.space_stretch=0
+ parameters.space_shrink=0
+ elseif afm.syncspace then
+ parameters.space_stretch=spaceunits/2
+ parameters.space_shrink=spaceunits/3
+ end
+ parameters.extra_space=parameters.space_shrink
+ if charxheight then
+ parameters.x_height=charxheight
+ else
+ local x=0x0078
+ if x then
+ local x=descriptions[x]
+ if x then
+ parameters.x_height=x.height
+ end
+ end
+ end
+ if metadata.sup then
+ local dummy={ 0,0,0 }
+ parameters[ 1]=metadata.designsize or 0
+ parameters[ 2]=metadata.checksum or 0
+ parameters[ 3],
+ parameters[ 4],
+ parameters[ 5]=unpack(metadata.space or dummy)
+ parameters[ 6]=metadata.quad or 0
+ parameters[ 7]=metadata.extraspace or 0
+ parameters[ 8],
+ parameters[ 9],
+ parameters[10]=unpack(metadata.num or dummy)
+ parameters[11],
+ parameters[12]=unpack(metadata.denom or dummy)
+ parameters[13],
+ parameters[14],
+ parameters[15]=unpack(metadata.sup or dummy)
+ parameters[16],
+ parameters[17]=unpack(metadata.sub or dummy)
+ parameters[18]=metadata.supdrop or 0
+ parameters[19]=metadata.subdrop or 0
+ parameters[20],
+ parameters[21]=unpack(metadata.delim or dummy)
+ parameters[22]=metadata.axisheight or 0
+ end
+ parameters.designsize=(metadata.designsize or 10)*65536
+ parameters.ascender=abs(metadata.ascender or 0)
+ parameters.descender=abs(metadata.descender or 0)
+ parameters.units=1000
+ properties.spacer=spacer
+ properties.encodingbytes=2
+ properties.format=fonts.formats[filename] or "type1"
+ properties.filename=filename
+ properties.fontname=fontname
+ properties.fullname=fullname
+ properties.psname=fullname
+ properties.name=filename or fullname or fontname
+ properties.private=properties.private or data.private or privateoffset
+ if next(characters) then
+ return {
+ characters=characters,
+ descriptions=descriptions,
+ parameters=parameters,
+ resources=resources,
+ properties=properties,
+ goodies=goodies,
+ }
+ end
+ end
+ return nil
+end
+function afm.setfeatures(tfmdata,features)
+ local okay=constructors.initializefeatures("afm",tfmdata,features,trace_features,report_afm)
+ if okay then
+ return constructors.collectprocessors("afm",tfmdata,features,trace_features,report_afm)
+ else
+ return {}
+ end
+end
+local function addtables(data)
+ local resources=data.resources
+ local lookuptags=resources.lookuptags
+ local unicodes=resources.unicodes
+ if not lookuptags then
+ lookuptags={}
+ resources.lookuptags=lookuptags
+ end
+ setmetatableindex(lookuptags,function(t,k)
+ local v=type(k)=="number" and ("lookup "..k) or k
+ t[k]=v
+ return v
+ end)
+ if not unicodes then
+ unicodes={}
+ resources.unicodes=unicodes
+ setmetatableindex(unicodes,function(t,k)
+ setmetatableindex(unicodes,nil)
+ for u,d in next,data.descriptions do
+ local n=d.name
+ if n then
+ t[n]=u
+ end
+ end
+ return rawget(t,k)
+ end)
+ end
+ constructors.addcoreunicodes(unicodes)
+end
+local function afmtotfm(specification)
+ local afmname=specification.filename or specification.name
+ if specification.forced=="afm" or specification.format=="afm" then
+ if trace_loading then
+ report_afm("forcing afm format for %a",afmname)
+ end
+ else
+ local tfmname=findbinfile(afmname,"ofm") or ""
+ if tfmname~="" then
+ if trace_loading then
+ report_afm("fallback from afm to tfm for %a",afmname)
+ end
+ return
+ end
+ end
+ if afmname~="" then
+ local features=constructors.checkedfeatures("afm",specification.features.normal)
+ specification.features.normal=features
+ constructors.hashinstance(specification,true)
+ specification=definers.resolve(specification)
+ local cache_id=specification.hash
+ local tfmdata=containers.read(constructors.cache,cache_id)
+ if not tfmdata then
+ local rawdata=afm.load(afmname)
+ if rawdata and next(rawdata) then
+ addtables(rawdata)
+ adddimensions(rawdata)
+ tfmdata=copytotfm(rawdata)
+ if tfmdata and next(tfmdata) then
+ local shared=tfmdata.shared
+ if not shared then
+ shared={}
+ tfmdata.shared=shared
+ end
+ shared.rawdata=rawdata
+ shared.dynamics={}
+ tfmdata.changed={}
+ shared.features=features
+ shared.processes=afm.setfeatures(tfmdata,features)
+ end
+ elseif trace_loading then
+ report_afm("no (valid) afm file found with name %a",afmname)
+ end
+ tfmdata=containers.write(constructors.cache,cache_id,tfmdata)
+ end
+ return tfmdata
+ end
+end
+local function read_from_afm(specification)
+ local tfmdata=afmtotfm(specification)
+ if tfmdata then
+ tfmdata.properties.name=specification.name
+ tfmdata=constructors.scale(tfmdata,specification)
+ local allfeatures=tfmdata.shared.features or specification.features.normal
+ constructors.applymanipulators("afm",tfmdata,allfeatures,trace_features,report_afm)
+ fonts.loggers.register(tfmdata,'afm',specification)
+ end
+ return tfmdata
+end
+registerafmfeature {
+ name="mode",
+ description="mode",
+ initializers={
+ base=otf.modeinitializer,
+ node=otf.modeinitializer,
+ }
+}
+registerafmfeature {
+ name="features",
+ description="features",
+ default=true,
+ initializers={
+ node=otf.nodemodeinitializer,
+ base=otf.basemodeinitializer,
+ },
+ processors={
+ node=otf.featuresprocessor,
+ }
+}
+fonts.formats.afm="type1"
+fonts.formats.pfb="type1"
+local function check_afm(specification,fullname)
+ local foundname=findbinfile(fullname,'afm') or ""
+ if foundname=="" then
+ foundname=fonts.names.getfilename(fullname,"afm") or ""
+ end
+ if foundname=="" and afm.autoprefixed then
+ local encoding,shortname=match(fullname,"^(.-)%-(.*)$")
+ if encoding and shortname and fonts.encodings.known[encoding] then
+ shortname=findbinfile(shortname,'afm') or ""
+ if shortname~="" then
+ foundname=shortname
+ if trace_defining then
+ report_afm("stripping encoding prefix from filename %a",afmname)
+ end
+ end
+ end
+ end
+ if foundname~="" then
+ specification.filename=foundname
+ specification.format="afm"
+ return read_from_afm(specification)
+ end
+end
+function readers.afm(specification,method)
+ local fullname=specification.filename or ""
+ local tfmdata=nil
+ if fullname=="" then
+ local forced=specification.forced or ""
+ if forced~="" then
+ tfmdata=check_afm(specification,specification.name.."."..forced)
+ end
+ if not tfmdata then
+ local check_tfm=readers.check_tfm
+ method=(check_tfm and (method or definers.method or "afm or tfm")) or "afm"
+ if method=="tfm" then
+ tfmdata=check_tfm(specification,specification.name)
+ elseif method=="afm" then
+ tfmdata=check_afm(specification,specification.name)
+ elseif method=="tfm or afm" then
+ tfmdata=check_tfm(specification,specification.name) or check_afm(specification,specification.name)
+ else
+ tfmdata=check_afm(specification,specification.name) or check_tfm(specification,specification.name)
+ end
+ end
+ else
+ tfmdata=check_afm(specification,fullname)
+ end
+ return tfmdata
+end
+function readers.pfb(specification,method)
+ local original=specification.specification
+ if trace_defining then
+ report_afm("using afm reader for %a",original)
+ end
+ specification.forced="afm"
+ local function swap(name)
+ local value=specification[swap]
+ if value then
+ specification[swap]=gsub("%.pfb",".afm",1)
+ end
+ end
+ swap("filename")
+ swap("fullname")
+ swap("forcedname")
+ swap("specification")
+ return readers.afm(specification,method)
+end
+registerafmenhancer("unify names",enhance_unify_names)
+registerafmenhancer("add ligatures",enhance_add_ligatures)
+registerafmenhancer("add extra kerns",enhance_add_extra_kerns)
+registerafmenhancer("normalize features",enhance_normalize_features)
+registerafmenhancer("check extra features",otfenhancers.enhance)
+registerafmenhancer("fix names",enhance_fix_names)
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-afk']={
+ version=1.001,
+ comment="companion to font-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files",
+ dataonly=true,
+}
+local allocate=utilities.storage.allocate
+fonts.handlers.afm.helpdata={
+ ligatures=allocate {
+ ['f']={
+ { 'f','ff' },
+ { 'i','fi' },
+ { 'l','fl' },
+ },
+ ['ff']={
+ { 'i','ffi' }
+ },
+ ['fi']={
+ { 'i','fii' }
+ },
+ ['fl']={
+ { 'i','fli' }
+ },
+ ['s']={
+ { 't','st' }
+ },
+ ['i']={
+ { 'j','ij' }
+ },
+ },
+ texligatures=allocate {
+ ['quoteleft']={
+ { 'quoteleft','quotedblleft' }
+ },
+ ['quoteright']={
+ { 'quoteright','quotedblright' }
+ },
+ ['hyphen']={
+ { 'hyphen','endash' }
+ },
+ ['endash']={
+ { 'hyphen','emdash' }
+ }
+ },
+ leftkerned=allocate {
+ AEligature="A",aeligature="a",
+ OEligature="O",oeligature="o",
+ IJligature="I",ijligature="i",
+ AE="A",ae="a",
+ OE="O",oe="o",
+ IJ="I",ij="i",
+ Ssharp="S",ssharp="s",
+ },
+ rightkerned=allocate {
+ AEligature="E",aeligature="e",
+ OEligature="E",oeligature="e",
+ IJligature="J",ijligature="j",
+ AE="E",ae="e",
+ OE="E",oe="e",
+ IJ="J",ij="j",
+ Ssharp="S",ssharp="s",
+ },
+ bothkerned=allocate {
+ Acircumflex="A",acircumflex="a",
+ Ccircumflex="C",ccircumflex="c",
+ Ecircumflex="E",ecircumflex="e",
+ Gcircumflex="G",gcircumflex="g",
+ Hcircumflex="H",hcircumflex="h",
+ Icircumflex="I",icircumflex="i",
+ Jcircumflex="J",jcircumflex="j",
+ Ocircumflex="O",ocircumflex="o",
+ Scircumflex="S",scircumflex="s",
+ Ucircumflex="U",ucircumflex="u",
+ Wcircumflex="W",wcircumflex="w",
+ Ycircumflex="Y",ycircumflex="y",
+ Agrave="A",agrave="a",
+ Egrave="E",egrave="e",
+ Igrave="I",igrave="i",
+ Ograve="O",ograve="o",
+ Ugrave="U",ugrave="u",
+ Ygrave="Y",ygrave="y",
+ Atilde="A",atilde="a",
+ Itilde="I",itilde="i",
+ Otilde="O",otilde="o",
+ Utilde="U",utilde="u",
+ Ntilde="N",ntilde="n",
+ Adiaeresis="A",adiaeresis="a",Adieresis="A",adieresis="a",
+ Ediaeresis="E",ediaeresis="e",Edieresis="E",edieresis="e",
+ Idiaeresis="I",idiaeresis="i",Idieresis="I",idieresis="i",
+ Odiaeresis="O",odiaeresis="o",Odieresis="O",odieresis="o",
+ Udiaeresis="U",udiaeresis="u",Udieresis="U",udieresis="u",
+ Ydiaeresis="Y",ydiaeresis="y",Ydieresis="Y",ydieresis="y",
+ Aacute="A",aacute="a",
+ Cacute="C",cacute="c",
+ Eacute="E",eacute="e",
+ Iacute="I",iacute="i",
+ Lacute="L",lacute="l",
+ Nacute="N",nacute="n",
+ Oacute="O",oacute="o",
+ Racute="R",racute="r",
+ Sacute="S",sacute="s",
+ Uacute="U",uacute="u",
+ Yacute="Y",yacute="y",
+ Zacute="Z",zacute="z",
+ Dstroke="D",dstroke="d",
+ Hstroke="H",hstroke="h",
+ Tstroke="T",tstroke="t",
+ Cdotaccent="C",cdotaccent="c",
+ Edotaccent="E",edotaccent="e",
+ Gdotaccent="G",gdotaccent="g",
+ Idotaccent="I",idotaccent="i",
+ Zdotaccent="Z",zdotaccent="z",
+ Amacron="A",amacron="a",
+ Emacron="E",emacron="e",
+ Imacron="I",imacron="i",
+ Omacron="O",omacron="o",
+ Umacron="U",umacron="u",
+ Ccedilla="C",ccedilla="c",
+ Kcedilla="K",kcedilla="k",
+ Lcedilla="L",lcedilla="l",
+ Ncedilla="N",ncedilla="n",
+ Rcedilla="R",rcedilla="r",
+ Scedilla="S",scedilla="s",
+ Tcedilla="T",tcedilla="t",
+ Ohungarumlaut="O",ohungarumlaut="o",
+ Uhungarumlaut="U",uhungarumlaut="u",
+ Aogonek="A",aogonek="a",
+ Eogonek="E",eogonek="e",
+ Iogonek="I",iogonek="i",
+ Uogonek="U",uogonek="u",
+ Aring="A",aring="a",
+ Uring="U",uring="u",
+ Abreve="A",abreve="a",
+ Ebreve="E",ebreve="e",
+ Gbreve="G",gbreve="g",
+ Ibreve="I",ibreve="i",
+ Obreve="O",obreve="o",
+ Ubreve="U",ubreve="u",
+ Ccaron="C",ccaron="c",
+ Dcaron="D",dcaron="d",
+ Ecaron="E",ecaron="e",
+ Lcaron="L",lcaron="l",
+ Ncaron="N",ncaron="n",
+ Rcaron="R",rcaron="r",
+ Scaron="S",scaron="s",
+ Tcaron="T",tcaron="t",
+ Zcaron="Z",zcaron="z",
+ dotlessI="I",dotlessi="i",
+ dotlessJ="J",dotlessj="j",
+ AEligature="AE",aeligature="ae",AE="AE",ae="ae",
+ OEligature="OE",oeligature="oe",OE="OE",oe="oe",
+ IJligature="IJ",ijligature="ij",IJ="IJ",ij="ij",
+ Lstroke="L",lstroke="l",Lslash="L",lslash="l",
+ Ostroke="O",ostroke="o",Oslash="O",oslash="o",
+ Ssharp="SS",ssharp="ss",
+ Aumlaut="A",aumlaut="a",
+ Eumlaut="E",eumlaut="e",
+ Iumlaut="I",iumlaut="i",
+ Oumlaut="O",oumlaut="o",
+ Uumlaut="U",uumlaut="u",
+ }
+}
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-tfm']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local next,type=next,type
+local match,format=string.match,string.format
+local concat,sortedhash=table.concat,table.sortedhash
+local trace_defining=false trackers.register("fonts.defining",function(v) trace_defining=v end)
+local trace_features=false trackers.register("tfm.features",function(v) trace_features=v end)
+local report_defining=logs.reporter("fonts","defining")
+local report_tfm=logs.reporter("fonts","tfm loading")
+local findbinfile=resolvers.findbinfile
+local setmetatableindex=table.setmetatableindex
+local fonts=fonts
+local handlers=fonts.handlers
+local readers=fonts.readers
+local constructors=fonts.constructors
+local encodings=fonts.encodings
+local tfm=constructors.handlers.tfm
+tfm.version=1.000
+tfm.maxnestingdepth=5
+tfm.maxnestingsize=65536*1024
+local otf=fonts.handlers.otf
+local otfenhancers=otf.enhancers
+local tfmfeatures=constructors.features.tfm
+local registertfmfeature=tfmfeatures.register
+local tfmenhancers=constructors.enhancers.tfm
+local registertfmenhancer=tfmenhancers.register
+constructors.resolvevirtualtoo=false
+fonts.formats.tfm="type1"
+fonts.formats.ofm="type1"
+function tfm.setfeatures(tfmdata,features)
+ local okay=constructors.initializefeatures("tfm",tfmdata,features,trace_features,report_tfm)
+ if okay then
+ return constructors.collectprocessors("tfm",tfmdata,features,trace_features,report_tfm)
+ else
+ return {}
+ end
+end
+local depth={}
+local function read_from_tfm(specification)
+ local filename=specification.filename
+ local size=specification.size
+ depth[filename]=(depth[filename] or 0)+1
+ if trace_defining then
+ report_defining("loading tfm file %a at size %s",filename,size)
+ end
+ local tfmdata=font.read_tfm(filename,size)
+ if tfmdata then
+ local features=specification.features and specification.features.normal or {}
+ local features=constructors.checkedfeatures("tfm",features)
+ specification.features.normal=features
+ local newtfmdata=(depth[filename]==1) and tfm.reencode(tfmdata,specification)
+ if newtfmdata then
+ tfmdata=newtfmdata
+ end
+ local resources=tfmdata.resources or {}
+ local properties=tfmdata.properties or {}
+ local parameters=tfmdata.parameters or {}
+ local shared=tfmdata.shared or {}
+ shared.features=features
+ shared.resources=resources
+ properties.name=tfmdata.name
+ properties.fontname=tfmdata.fontname
+ properties.psname=tfmdata.psname
+ properties.fullname=tfmdata.fullname
+ properties.filename=specification.filename
+ properties.format=fonts.formats.tfm
+ tfmdata.properties=properties
+ tfmdata.resources=resources
+ tfmdata.parameters=parameters
+ tfmdata.shared=shared
+ shared.rawdata={ resources=resources }
+ shared.features=features
+ if newtfmdata then
+ if not resources.marks then
+ resources.marks={}
+ end
+ if not resources.sequences then
+ resources.sequences={}
+ end
+ if not resources.features then
+ resources.features={
+ gsub={},
+ gpos={},
+ }
+ end
+ if not tfmdata.changed then
+ tfmdata.changed={}
+ end
+ if not tfmdata.descriptions then
+ tfmdata.descriptions=tfmdata.characters
+ end
+ otf.readers.addunicodetable(tfmdata)
+ tfmenhancers.apply(tfmdata,filename)
+ constructors.applymanipulators("tfm",tfmdata,features,trace_features,report_tfm)
+ otf.readers.unifymissing(tfmdata)
+ fonts.mappings.addtounicode(tfmdata,filename)
+ tfmdata.tounicode=1
+ local tounicode=fonts.mappings.tounicode
+ for unicode,v in next,tfmdata.characters do
+ local u=v.unicode
+ if u then
+ v.tounicode=tounicode(u)
+ end
+ end
+ if tfmdata.usedbitmap then
+ tfm.addtounicode(tfmdata)
+ end
+ end
+ shared.processes=next(features) and tfm.setfeatures(tfmdata,features) or nil
+ parameters.factor=1
+ parameters.size=size
+ parameters.slant=parameters.slant or parameters[1] or 0
+ parameters.space=parameters.space or parameters[2] or 0
+ parameters.space_stretch=parameters.space_stretch or parameters[3] or 0
+ parameters.space_shrink=parameters.space_shrink or parameters[4] or 0
+ parameters.x_height=parameters.x_height or parameters[5] or 0
+ parameters.quad=parameters.quad or parameters[6] or 0
+ parameters.extra_space=parameters.extra_space or parameters[7] or 0
+ constructors.enhanceparameters(parameters)
+ properties.private=properties.private or tfmdata.private or privateoffset
+ if newtfmdata then
+ elseif constructors.resolvevirtualtoo then
+ fonts.loggers.register(tfmdata,file.suffix(filename),specification)
+ local vfname=findbinfile(specification.name,'ovf')
+ if vfname and vfname~="" then
+ local vfdata=font.read_vf(vfname,size)
+ if vfdata then
+ local chars=tfmdata.characters
+ for k,v in next,vfdata.characters do
+ chars[k].commands=v.commands
+ end
+ properties.virtualized=true
+ tfmdata.fonts=vfdata.fonts
+ tfmdata.type="virtual"
+ local fontlist=vfdata.fonts
+ local name=file.nameonly(filename)
+ for i=1,#fontlist do
+ local n=fontlist[i].name
+ local s=fontlist[i].size
+ local d=depth[filename]
+ s=constructors.scaled(s,vfdata.designsize)
+ if d>tfm.maxnestingdepth then
+ report_defining("too deeply nested virtual font %a with size %a, max nesting depth %s",n,s,tfm.maxnestingdepth)
+ fontlist[i]={ id=0 }
+ elseif (d>1) and (s>tfm.maxnestingsize) then
+ report_defining("virtual font %a exceeds size %s",n,s)
+ fontlist[i]={ id=0 }
+ else
+ local t,id=fonts.constructors.readanddefine(n,s)
+ fontlist[i]={ id=id }
+ end
+ end
+ end
+ end
+ end
+ properties.haskerns=true
+ properties.hasligatures=true
+ resources.unicodes={}
+ resources.lookuptags={}
+ depth[filename]=depth[filename]-1
+ return tfmdata
+ else
+ depth[filename]=depth[filename]-1
+ end
+end
+local function check_tfm(specification,fullname)
+ local foundname=findbinfile(fullname,'tfm') or ""
+ if foundname=="" then
+ foundname=findbinfile(fullname,'ofm') or ""
+ end
+ if foundname=="" then
+ foundname=fonts.names.getfilename(fullname,"tfm") or ""
+ end
+ if foundname~="" then
+ specification.filename=foundname
+ specification.format="ofm"
+ return read_from_tfm(specification)
+ elseif trace_defining then
+ report_defining("loading tfm with name %a fails",specification.name)
+ end
+end
+readers.check_tfm=check_tfm
+function readers.tfm(specification)
+ local fullname=specification.filename or ""
+ if fullname=="" then
+ local forced=specification.forced or ""
+ if forced~="" then
+ fullname=specification.name.."."..forced
+ else
+ fullname=specification.name
+ end
+ end
+ return check_tfm(specification,fullname)
+end
+readers.ofm=readers.tfm
+do
+ local outfiles={}
+ local tfmcache=table.setmetatableindex(function(t,tfmdata)
+ local id=font.define(tfmdata)
+ t[tfmdata]=id
+ return id
+ end)
+ local encdone=table.setmetatableindex("table")
+ function tfm.reencode(tfmdata,specification)
+ local features=specification.features
+ if not features then
+ return
+ end
+ local features=features.normal
+ if not features then
+ return
+ end
+ local tfmfile=file.basename(tfmdata.name)
+ local encfile=features.reencode
+ local pfbfile=features.pfbfile
+ local bitmap=features.bitmap
+ if not encfile then
+ return
+ end
+ local pfbfile=outfiles[tfmfile]
+ if pfbfile==nil then
+ if bitmap then
+ pfbfile=false
+ elseif type(pfbfile)~="string" then
+ pfbfile=tfmfile
+ end
+ if type(pfbfile)=="string" then
+ pfbfile=file.addsuffix(pfbfile,"pfb")
+ report_tfm("using type1 shapes from %a for %a",pfbfile,tfmfile)
+ else
+ report_tfm("using bitmap shapes for %a",tfmfile)
+ pfbfile=false
+ end
+ outfiles[tfmfile]=pfbfile
+ end
+ local encoding=false
+ local vector=false
+ if type(pfbfile)=="string" then
+ local pfb=fonts.constructors.handlers.pfb
+ if pfb and pfb.loadvector then
+ local v,e=pfb.loadvector(pfbfile)
+ if v then
+ vector=v
+ end
+ if e then
+ encoding=e
+ end
+ end
+ end
+ if type(encfile)=="string" and encfile~="auto" then
+ encoding=fonts.encodings.load(file.addsuffix(encfile,"enc"))
+ if encoding then
+ encoding=encoding.vector
+ end
+ end
+ if not encoding then
+ report_tfm("bad encoding for %a, quitting",tfmfile)
+ return
+ end
+ local unicoding=fonts.encodings.agl and fonts.encodings.agl.unicodes
+ local virtualid=tfmcache[tfmdata]
+ local tfmdata=table.copy(tfmdata)
+ local characters={}
+ local originals=tfmdata.characters
+ local indices={}
+ local parentfont={ "font",1 }
+ local private=tfmdata or fonts.constructors.privateoffset
+ local reported=encdone[tfmfile][encfile]
+ local backmap=vector and table.swapped(vector)
+ local done={}
+ for index,name in sortedhash(encoding) do
+ local unicode=unicoding[name]
+ local original=originals[index]
+ if original then
+ if unicode then
+ original.unicode=unicode
+ else
+ unicode=private
+ private=private+1
+ if not reported then
+ report_tfm("glyph %a in font %a with encoding %a gets unicode %U",name,tfmfile,encfile,unicode)
+ end
+ end
+ characters[unicode]=original
+ indices[index]=unicode
+ original.name=name
+ if backmap then
+ original.index=backmap[name]
+ else
+ original.commands={ parentfont,{ "char",index } }
+ original.oindex=index
+ end
+ done[name]=true
+ elseif not done[name] then
+ report_tfm("bad index %a in font %a with name %a",index,tfmfile,name)
+ end
+ end
+ encdone[tfmfile][encfile]=true
+ for k,v in next,characters do
+ local kerns=v.kerns
+ if kerns then
+ local t={}
+ for k,v in next,kerns do
+ local i=indices[k]
+ if i then
+ t[i]=v
+ end
+ end
+ v.kerns=next(t) and t or nil
+ end
+ local ligatures=v.ligatures
+ if ligatures then
+ local t={}
+ for k,v in next,ligatures do
+ local i=indices[k]
+ if i then
+ t[i]=v
+ v.char=indices[v.char]
+ end
+ end
+ v.ligatures=next(t) and t or nil
+ end
+ end
+ tfmdata.fonts={ { id=virtualid } }
+ tfmdata.characters=characters
+ tfmdata.fullname=tfmdata.fullname or tfmdata.name
+ tfmdata.psname=file.nameonly(pfbfile or tfmdata.name)
+ tfmdata.filename=pfbfile
+ tfmdata.encodingbytes=2
+ tfmdata.format="type1"
+ tfmdata.tounicode=1
+ tfmdata.embedding="subset"
+ tfmdata.usedbitmap=bitmap and virtualid
+ tfmdata.private=private
+ return tfmdata
+ end
+end
+do
+ local template=[[
+/CIDInit /ProcSet findresource begin
+ 12 dict begin
+ begincmap
+ /CIDSystemInfo << /Registry (TeX) /Ordering (bitmap-%s) /Supplement 0 >> def
+ /CMapName /TeX-bitmap-%s def
+ /CMapType 2 def
+ 1 begincodespacerange
+ <00> <FF>
+ endcodespacerange
+ %s beginbfchar
+%s
+ endbfchar
+ endcmap
+CMapName currentdict /CMap defineresource pop end
+end
+end
+]]
+ local flushstreamobject=lpdf and lpdf.flushstreamobject
+ local setfontattributes=pdf.setfontattributes
+ if not flushstreamobject then
+ flushstreamobject=function(data)
+ return pdf.obj {
+ immediate=true,
+ type="stream",
+ string=data,
+ }
+ end
+ end
+ if not setfontattributes then
+ setfontattributes=function(id,data)
+ print(format("your luatex is too old so no tounicode bitmap font%i",id))
+ end
+ end
+ function tfm.addtounicode(tfmdata)
+ local id=tfmdata.usedbitmap
+ local map={}
+ local char={}
+ for k,v in next,tfmdata.characters do
+ local index=v.oindex
+ local tounicode=v.tounicode
+ if index and tounicode then
+ map[index]=tounicode
+ end
+ end
+ for k,v in sortedhash(map) do
+ char[#char+1]=format("<%02X> <%s>",k,v)
+ end
+ char=concat(char,"\n")
+ local stream=format(template,id,id,#char,char)
+ local reference=flushstreamobject(stream,nil,true)
+ setfontattributes(id,format("/ToUnicode %i 0 R",reference))
+ end
+end
+do
+ local everywhere={ ["*"]={ ["*"]=true } }
+ local noflags={ false,false,false,false }
+ local function enhance_normalize_features(data)
+ local ligatures=setmetatableindex("table")
+ local kerns=setmetatableindex("table")
+ local characters=data.characters
+ for u,c in next,characters do
+ local l=c.ligatures
+ local k=c.kerns
+ if l then
+ ligatures[u]=l
+ for u,v in next,l do
+ l[u]={ ligature=v.char }
+ end
+ c.ligatures=nil
+ end
+ if k then
+ kerns[u]=k
+ for u,v in next,k do
+ k[u]=v
+ end
+ c.kerns=nil
+ end
+ end
+ for u,l in next,ligatures do
+ for k,v in next,l do
+ local vl=v.ligature
+ local dl=ligatures[vl]
+ if dl then
+ for kk,vv in next,dl do
+ v[kk]=vv
+ end
+ end
+ end
+ end
+ local features={
+ gpos={},
+ gsub={},
+ }
+ local sequences={
+ }
+ if next(ligatures) then
+ features.gsub.liga=everywhere
+ data.properties.hasligatures=true
+ sequences[#sequences+1]={
+ features={
+ liga=everywhere,
+ },
+ flags=noflags,
+ name="s_s_0",
+ nofsteps=1,
+ order={ "liga" },
+ type="gsub_ligature",
+ steps={
+ {
+ coverage=ligatures,
+ },
+ },
+ }
+ end
+ if next(kerns) then
+ features.gpos.kern=everywhere
+ data.properties.haskerns=true
+ sequences[#sequences+1]={
+ features={
+ kern=everywhere,
+ },
+ flags=noflags,
+ name="p_s_0",
+ nofsteps=1,
+ order={ "kern" },
+ type="gpos_pair",
+ steps={
+ {
+ format="kern",
+ coverage=kerns,
+ },
+ },
+ }
+ end
+ data.resources.features=features
+ data.resources.sequences=sequences
+ data.shared.resources=data.shared.resources or resources
+ end
+ registertfmenhancer("normalize features",enhance_normalize_features)
+ registertfmenhancer("check extra features",otfenhancers.enhance)
+end
+registertfmfeature {
+ name="mode",
+ description="mode",
+ initializers={
+ base=otf.modeinitializer,
+ node=otf.modeinitializer,
+ }
+}
+registertfmfeature {
+ name="features",
+ description="features",
+ default=true,
+ initializers={
+ base=otf.basemodeinitializer,
+ node=otf.nodemodeinitializer,
+ },
+ processors={
+ node=otf.featuresprocessor,
+ }
+}
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-lua']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local trace_defining=false trackers.register("fonts.defining",function(v) trace_defining=v end)
+local report_lua=logs.reporter("fonts","lua loading")
+local fonts=fonts
+local readers=fonts.readers
+fonts.formats.lua="lua"
+local function check_lua(specification,fullname)
+ local fullname=resolvers.findfile(fullname) or ""
+ if fullname~="" then
+ local loader=loadfile(fullname)
+ loader=loader and loader()
+ return loader and loader(specification)
+ end
+end
+readers.check_lua=check_lua
+function readers.lua(specification)
+ local original=specification.specification
+ if trace_defining then
+ report_lua("using lua reader for %a",original)
+ end
+ local fullname=specification.filename or ""
+ if fullname=="" then
+ local forced=specification.forced or ""
+ if forced~="" then
+ fullname=specification.name.."."..forced
+ else
+ fullname=specification.name
+ end
+ end
+ return check_lua(specification,fullname)
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-def']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local lower,gsub=string.lower,string.gsub
+local tostring,next=tostring,next
+local lpegmatch=lpeg.match
+local suffixonly,removesuffix,basename=file.suffix,file.removesuffix,file.basename
+local formatters=string.formatters
+local sortedhash,sortedkeys=table.sortedhash,table.sortedkeys
+local allocate=utilities.storage.allocate
+local trace_defining=false trackers .register("fonts.defining",function(v) trace_defining=v end)
+local directive_embedall=false directives.register("fonts.embedall",function(v) directive_embedall=v end)
+trackers.register("fonts.loading","fonts.defining","otf.loading","afm.loading","tfm.loading")
+local report_defining=logs.reporter("fonts","defining")
+local fonts=fonts
+local fontdata=fonts.hashes.identifiers
+local readers=fonts.readers
+local definers=fonts.definers
+local specifiers=fonts.specifiers
+local constructors=fonts.constructors
+local fontgoodies=fonts.goodies
+readers.sequence=allocate { 'otf','ttf','afm','tfm','lua' }
+local variants=allocate()
+specifiers.variants=variants
+definers.methods=definers.methods or {}
+local internalized=allocate()
+local lastdefined=nil
+local loadedfonts=constructors.loadedfonts
+local designsizes=constructors.designsizes
+local resolvefile=fontgoodies and fontgoodies.filenames and fontgoodies.filenames.resolve or function(s) return s end
+local splitter,splitspecifiers=nil,""
+local P,C,S,Cc=lpeg.P,lpeg.C,lpeg.S,lpeg.Cc
+local left=P("(")
+local right=P(")")
+local colon=P(":")
+local space=P(" ")
+definers.defaultlookup="file"
+local prefixpattern=P(false)
+local function addspecifier(symbol)
+ splitspecifiers=splitspecifiers..symbol
+ local method=S(splitspecifiers)
+ local lookup=C(prefixpattern)*colon
+ local sub=left*C(P(1-left-right-method)^1)*right
+ local specification=C(method)*C(P(1)^1)
+ local name=C((1-sub-specification)^1)
+ splitter=P((lookup+Cc(""))*name*(sub+Cc(""))*(specification+Cc("")))
+end
+local function addlookup(str,default)
+ prefixpattern=prefixpattern+P(str)
+end
+definers.addlookup=addlookup
+addlookup("file")
+addlookup("name")
+addlookup("spec")
+local function getspecification(str)
+ return lpegmatch(splitter,str or "")
+end
+definers.getspecification=getspecification
+function definers.registersplit(symbol,action,verbosename)
+ addspecifier(symbol)
+ variants[symbol]=action
+ if verbosename then
+ variants[verbosename]=action
+ end
+end
+local function makespecification(specification,lookup,name,sub,method,detail,size)
+ size=size or 655360
+ if not lookup or lookup=="" then
+ lookup=definers.defaultlookup
+ end
+ if trace_defining then
+ report_defining("specification %a, lookup %a, name %a, sub %a, method %a, detail %a",
+ specification,lookup,name,sub,method,detail)
+ end
+ local t={
+ lookup=lookup,
+ specification=specification,
+ size=size,
+ name=name,
+ sub=sub,
+ method=method,
+ detail=detail,
+ resolved="",
+ forced="",
+ features={},
+ }
+ return t
+end
+definers.makespecification=makespecification
+function definers.analyze(specification,size)
+ local lookup,name,sub,method,detail=getspecification(specification or "")
+ return makespecification(specification,lookup,name,sub,method,detail,size)
+end
+definers.resolvers=definers.resolvers or {}
+local resolvers=definers.resolvers
+function resolvers.file(specification)
+ local name=resolvefile(specification.name)
+ local suffix=lower(suffixonly(name))
+ if fonts.formats[suffix] then
+ specification.forced=suffix
+ specification.forcedname=name
+ specification.name=removesuffix(name)
+ else
+ specification.name=name
+ end
+end
+function resolvers.name(specification)
+ local resolve=fonts.names.resolve
+ if resolve then
+ local resolved,sub,subindex,instance=resolve(specification.name,specification.sub,specification)
+ if resolved then
+ specification.resolved=resolved
+ specification.sub=sub
+ specification.subindex=subindex
+ if instance then
+ specification.instance=instance
+ local features=specification.features
+ if not features then
+ features={}
+ specification.features=features
+ end
+ local normal=features.normal
+ if not normal then
+ normal={}
+ features.normal=normal
+ end
+ normal.instance=instance
+ if not callbacks.supported.glyph_stream_provider then
+ normal.variableshapes=true
+ end
+ end
+ local suffix=lower(suffixonly(resolved))
+ if fonts.formats[suffix] then
+ specification.forced=suffix
+ specification.forcedname=resolved
+ specification.name=removesuffix(resolved)
+ else
+ specification.name=resolved
+ end
+ end
+ else
+ resolvers.file(specification)
+ end
+end
+function resolvers.spec(specification)
+ local resolvespec=fonts.names.resolvespec
+ if resolvespec then
+ local resolved,sub,subindex=resolvespec(specification.name,specification.sub,specification)
+ if resolved then
+ specification.resolved=resolved
+ specification.sub=sub
+ specification.subindex=subindex
+ specification.forced=lower(suffixonly(resolved))
+ specification.forcedname=resolved
+ specification.name=removesuffix(resolved)
+ end
+ else
+ resolvers.name(specification)
+ end
+end
+function definers.resolve(specification)
+ if not specification.resolved or specification.resolved=="" then
+ local r=resolvers[specification.lookup]
+ if r then
+ r(specification)
+ end
+ end
+ if specification.forced=="" then
+ specification.forced=nil
+ specification.forcedname=nil
+ end
+ specification.hash=lower(specification.name..' @ '..constructors.hashfeatures(specification))
+ if specification.sub and specification.sub~="" then
+ specification.hash=specification.sub..' @ '..specification.hash
+ end
+ return specification
+end
+function definers.applypostprocessors(tfmdata)
+ local postprocessors=tfmdata.postprocessors
+ if postprocessors then
+ local properties=tfmdata.properties
+ for i=1,#postprocessors do
+ local extrahash=postprocessors[i](tfmdata)
+ if type(extrahash)=="string" and extrahash~="" then
+ extrahash=gsub(lower(extrahash),"[^a-z]","-")
+ properties.fullname=formatters["%s-%s"](properties.fullname,extrahash)
+ end
+ end
+ end
+ return tfmdata
+end
+local function checkembedding(tfmdata)
+ local properties=tfmdata.properties
+ local embedding
+ if directive_embedall then
+ embedding="full"
+ elseif properties and properties.filename and constructors.dontembed[properties.filename] then
+ embedding="no"
+ else
+ embedding="subset"
+ end
+ if properties then
+ properties.embedding=embedding
+ else
+ tfmdata.properties={ embedding=embedding }
+ end
+ tfmdata.embedding=embedding
+end
+local function checkfeatures(tfmdata)
+ local resources=tfmdata.resources
+ local shared=tfmdata.shared
+ if resources and shared then
+ local features=resources.features
+ local usedfeatures=shared.features
+ if features and usedfeatures then
+ local usedlanguage=usedfeatures.language or "dflt"
+ local usedscript=usedfeatures.script or "dflt"
+ local function check(what)
+ if what then
+ local foundlanguages={}
+ for feature,scripts in next,what do
+ if usedscript=="auto" or scripts["*"] then
+ elseif not scripts[usedscript] then
+ else
+ for script,languages in next,scripts do
+ if languages["*"] then
+ elseif not languages[usedlanguage] then
+ report_defining("font %!font:name!, feature %a, script %a, no language %a",
+ tfmdata,feature,script,usedlanguage)
+ end
+ end
+ end
+ for script,languages in next,scripts do
+ for language in next,languages do
+ foundlanguages[language]=true
+ end
+ end
+ end
+ if false then
+ foundlanguages["*"]=nil
+ foundlanguages=sortedkeys(foundlanguages)
+ for feature,scripts in sortedhash(what) do
+ for script,languages in next,scripts do
+ if not languages["*"] then
+ for i=1,#foundlanguages do
+ local language=foundlanguages[i]
+ if not languages[language] then
+ report_defining("font %!font:name!, feature %a, script %a, no language %a",
+ tfmdata,feature,script,language)
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ check(features.gsub)
+ check(features.gpos)
+ end
+ end
+end
+function definers.loadfont(specification)
+ local hash=constructors.hashinstance(specification)
+ local tfmdata=loadedfonts[hash]
+ if not tfmdata then
+ local forced=specification.forced or ""
+ if forced~="" then
+ local reader=readers[lower(forced)]
+ tfmdata=reader and reader(specification)
+ if not tfmdata then
+ report_defining("forced type %a of %a not found",forced,specification.name)
+ end
+ else
+ local sequence=readers.sequence
+ for s=1,#sequence do
+ local reader=sequence[s]
+ if readers[reader] then
+ if trace_defining then
+ report_defining("trying (reader sequence driven) type %a for %a with file %a",reader,specification.name,specification.filename)
+ end
+ tfmdata=readers[reader](specification)
+ if tfmdata then
+ break
+ else
+ specification.filename=nil
+ end
+ end
+ end
+ end
+ if tfmdata then
+ tfmdata=definers.applypostprocessors(tfmdata)
+ checkembedding(tfmdata)
+ loadedfonts[hash]=tfmdata
+ designsizes[specification.hash]=tfmdata.parameters.designsize
+ checkfeatures(tfmdata)
+ end
+ end
+ if not tfmdata then
+ report_defining("font with asked name %a is not found using lookup %a",specification.name,specification.lookup)
+ end
+ return tfmdata
+end
+function constructors.readanddefine(name,size)
+ local specification=definers.analyze(name,size)
+ local method=specification.method
+ if method and variants[method] then
+ specification=variants[method](specification)
+ end
+ specification=definers.resolve(specification)
+ local hash=constructors.hashinstance(specification)
+ local id=definers.registered(hash)
+ if not id then
+ local tfmdata=definers.loadfont(specification)
+ if tfmdata then
+ tfmdata.properties.hash=hash
+ id=font.define(tfmdata)
+ definers.register(tfmdata,id)
+ else
+ id=0
+ end
+ end
+ return fontdata[id],id
+end
+function definers.current()
+ return lastdefined
+end
+function definers.registered(hash)
+ local id=internalized[hash]
+ return id,id and fontdata[id]
+end
+function definers.register(tfmdata,id)
+ if tfmdata and id then
+ local hash=tfmdata.properties.hash
+ if not hash then
+ report_defining("registering font, id %a, name %a, invalid hash",id,tfmdata.properties.filename or "?")
+ elseif not internalized[hash] then
+ internalized[hash]=id
+ if trace_defining then
+ report_defining("registering font, id %s, hash %a",id,hash)
+ end
+ fontdata[id]=tfmdata
+ end
+ end
+end
+function definers.read(specification,size,id)
+ statistics.starttiming(fonts)
+ if type(specification)=="string" then
+ specification=definers.analyze(specification,size)
+ end
+ local method=specification.method
+ if method and variants[method] then
+ specification=variants[method](specification)
+ end
+ specification=definers.resolve(specification)
+ local hash=constructors.hashinstance(specification)
+ local tfmdata=definers.registered(hash)
+ if tfmdata then
+ if trace_defining then
+ report_defining("already hashed: %s",hash)
+ end
+ else
+ tfmdata=definers.loadfont(specification)
+ if tfmdata then
+ if trace_defining then
+ report_defining("loaded and hashed: %s",hash)
+ end
+ tfmdata.properties.hash=hash
+ if id then
+ definers.register(tfmdata,id)
+ end
+ else
+ if trace_defining then
+ report_defining("not loaded and hashed: %s",hash)
+ end
+ end
+ end
+ lastdefined=tfmdata or id
+ if not tfmdata then
+ report_defining("unknown font %a, loading aborted",specification.name)
+ elseif trace_defining and type(tfmdata)=="table" then
+ local properties=tfmdata.properties or {}
+ local parameters=tfmdata.parameters or {}
+ report_defining("using %a font with id %a, name %a, size %a, bytes %a, encoding %a, fullname %a, filename %a",
+ properties.format or "unknown",id,properties.name,parameters.size,properties.encodingbytes,
+ properties.encodingname,properties.fullname,basename(properties.filename))
+ end
+ statistics.stoptiming(fonts)
+ return tfmdata
+end
+function font.getfont(id)
+ return fontdata[id]
+end
+callbacks.register('define_font',definers.read,"definition of fonts (tfmdata preparation)")
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['luatex-fonts-def']={
+ version=1.001,
+ comment="companion to luatex-*.tex",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+if context then
+ texio.write_nl("fatal error: this module is not for context")
+ os.exit()
+end
+local fonts=fonts
+fonts.constructors.namemode="specification"
+function fonts.definers.getspecification(str)
+ return "",str,"",":",str
+end
+local list={}
+local function issome () list.lookup='name' end
+local function isfile () list.lookup='file' end
+local function isname () list.lookup='name' end
+local function thename(s) list.name=s end
+local function issub (v) list.sub=v end
+local function iscrap (s) list.crap=string.lower(s) end
+local function iskey (k,v) list[k]=v end
+local function istrue (s) list[s]=true end
+local function isfalse(s) list[s]=false end
+local P,S,R,C=lpeg.P,lpeg.S,lpeg.R,lpeg.C
+local spaces=P(" ")^0
+local namespec=(1-S("/:("))^0
+local crapspec=spaces*P("/")*(((1-P(":"))^0)/iscrap)*spaces
+local filename_1=P("file:")/isfile*(namespec/thename)
+local filename_2=P("[")*P(true)/isname*(((1-P("]"))^0)/thename)*P("]")
+local fontname_1=P("name:")/isname*(namespec/thename)
+local fontname_2=P(true)/issome*(namespec/thename)
+local sometext=(R("az","AZ","09")+S("+-.{}"))^1
+local truevalue=P("+")*spaces*(sometext/istrue)
+local falsevalue=P("-")*spaces*(sometext/isfalse)
+local keyvalue=(C(sometext)*spaces*P("=")*spaces*C(sometext))/iskey
+local somevalue=sometext/istrue
+local subvalue=P("(")*(C(P(1-S("()"))^1)/issub)*P(")")
+local option=spaces*(keyvalue+falsevalue+truevalue+somevalue)*spaces
+local options=P(":")*spaces*(P(";")^0*option)^0
+local pattern=(filename_1+filename_2+fontname_1+fontname_2)*subvalue^0*crapspec^0*options^0
+local function colonized(specification)
+ list={}
+ lpeg.match(pattern,specification.specification)
+ list.crap=nil
+ if list.name then
+ specification.name=list.name
+ list.name=nil
+ end
+ if list.lookup then
+ specification.lookup=list.lookup
+ list.lookup=nil
+ end
+ if list.sub then
+ specification.sub=list.sub
+ list.sub=nil
+ end
+ specification.features.normal=fonts.handlers.otf.features.normalize(list)
+ return specification
+end
+fonts.definers.registersplit(":",colonized,"cryptic")
+fonts.definers.registersplit("",colonized,"more cryptic")
+function fonts.definers.applypostprocessors(tfmdata)
+ local postprocessors=tfmdata.postprocessors
+ if postprocessors then
+ for i=1,#postprocessors do
+ local extrahash=postprocessors[i](tfmdata)
+ if type(extrahash)=="string" and extrahash~="" then
+ extrahash=string.gsub(lower(extrahash),"[^a-z]","-")
+ tfmdata.properties.fullname=format("%s-%s",tfmdata.properties.fullname,extrahash)
+ end
+ end
+ end
+ return tfmdata
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['luatex-fonts-ext']={
+ version=1.001,
+ comment="companion to luatex-*.tex",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+if context then
+ texio.write_nl("fatal error: this module is not for context")
+ os.exit()
+end
+local fonts=fonts
+local otffeatures=fonts.constructors.features.otf
+local getprivate=fonts.constructors.getprivate
+local function initializeitlc(tfmdata,value)
+ if value then
+ local parameters=tfmdata.parameters
+ local italicangle=parameters.italicangle
+ if italicangle and italicangle~=0 then
+ local properties=tfmdata.properties
+ local factor=tonumber(value) or 1
+ properties.hasitalics=true
+ properties.autoitalicamount=factor*(parameters.uwidth or 40)/2
+ end
+ end
+end
+otffeatures.register {
+ name="itlc",
+ description="italic correction",
+ initializers={
+ base=initializeitlc,
+ node=initializeitlc,
+ }
+}
+local function initializeslant(tfmdata,value)
+ value=tonumber(value)
+ if not value then
+ value=0
+ elseif value>1 then
+ value=1
+ elseif value<-1 then
+ value=-1
+ end
+ tfmdata.parameters.slantfactor=value
+end
+otffeatures.register {
+ name="slant",
+ description="slant glyphs",
+ initializers={
+ base=initializeslant,
+ node=initializeslant,
+ }
+}
+local function initializeextend(tfmdata,value)
+ value=tonumber(value)
+ if not value then
+ value=0
+ elseif value>10 then
+ value=10
+ elseif value<-10 then
+ value=-10
+ end
+ tfmdata.parameters.extendfactor=value
+end
+otffeatures.register {
+ name="extend",
+ description="scale glyphs horizontally",
+ initializers={
+ base=initializeextend,
+ node=initializeextend,
+ }
+}
+fonts.protrusions=fonts.protrusions or {}
+fonts.protrusions.setups=fonts.protrusions.setups or {}
+local setups=fonts.protrusions.setups
+local function initializeprotrusion(tfmdata,value)
+ if value then
+ local setup=setups[value]
+ if setup then
+ local factor,left,right=setup.factor or 1,setup.left or 1,setup.right or 1
+ local emwidth=tfmdata.parameters.quad
+ tfmdata.parameters.protrusion={
+ auto=true,
+ }
+ for i,chr in next,tfmdata.characters do
+ local v,pl,pr=setup[i],nil,nil
+ if v then
+ pl,pr=v[1],v[2]
+ end
+ if pl and pl~=0 then chr.left_protruding=left*pl*factor end
+ if pr and pr~=0 then chr.right_protruding=right*pr*factor end
+ end
+ end
+ end
+end
+otffeatures.register {
+ name="protrusion",
+ description="shift characters into the left and or right margin",
+ initializers={
+ base=initializeprotrusion,
+ node=initializeprotrusion,
+ }
+}
+fonts.expansions=fonts.expansions or {}
+fonts.expansions.setups=fonts.expansions.setups or {}
+local setups=fonts.expansions.setups
+local function initializeexpansion(tfmdata,value)
+ if value then
+ local setup=setups[value]
+ if setup then
+ local factor=setup.factor or 1
+ tfmdata.parameters.expansion={
+ stretch=10*(setup.stretch or 0),
+ shrink=10*(setup.shrink or 0),
+ step=10*(setup.step or 0),
+ auto=true,
+ }
+ for i,chr in next,tfmdata.characters do
+ local v=setup[i]
+ if v and v~=0 then
+ chr.expansion_factor=v*factor
+ else
+ chr.expansion_factor=factor
+ end
+ end
+ end
+ end
+end
+otffeatures.register {
+ name="expansion",
+ description="apply hz optimization",
+ initializers={
+ base=initializeexpansion,
+ node=initializeexpansion,
+ }
+}
+function fonts.loggers.onetimemessage() end
+local byte=string.byte
+fonts.expansions.setups['default']={
+ stretch=2,shrink=2,step=.5,factor=1,
+ [byte('A')]=0.5,[byte('B')]=0.7,[byte('C')]=0.7,[byte('D')]=0.5,[byte('E')]=0.7,
+ [byte('F')]=0.7,[byte('G')]=0.5,[byte('H')]=0.7,[byte('K')]=0.7,[byte('M')]=0.7,
+ [byte('N')]=0.7,[byte('O')]=0.5,[byte('P')]=0.7,[byte('Q')]=0.5,[byte('R')]=0.7,
+ [byte('S')]=0.7,[byte('U')]=0.7,[byte('W')]=0.7,[byte('Z')]=0.7,
+ [byte('a')]=0.7,[byte('b')]=0.7,[byte('c')]=0.7,[byte('d')]=0.7,[byte('e')]=0.7,
+ [byte('g')]=0.7,[byte('h')]=0.7,[byte('k')]=0.7,[byte('m')]=0.7,[byte('n')]=0.7,
+ [byte('o')]=0.7,[byte('p')]=0.7,[byte('q')]=0.7,[byte('s')]=0.7,[byte('u')]=0.7,
+ [byte('w')]=0.7,[byte('z')]=0.7,
+ [byte('2')]=0.7,[byte('3')]=0.7,[byte('6')]=0.7,[byte('8')]=0.7,[byte('9')]=0.7,
+}
+fonts.protrusions.setups['default']={
+ factor=1,left=1,right=1,
+ [0x002C]={ 0,1 },
+ [0x002E]={ 0,1 },
+ [0x003A]={ 0,1 },
+ [0x003B]={ 0,1 },
+ [0x002D]={ 0,1 },
+ [0x2013]={ 0,0.50 },
+ [0x2014]={ 0,0.33 },
+ [0x3001]={ 0,1 },
+ [0x3002]={ 0,1 },
+ [0x060C]={ 0,1 },
+ [0x061B]={ 0,1 },
+ [0x06D4]={ 0,1 },
+}
+fonts.handlers.otf.features.normalize=function(t)
+ if t.rand then
+ t.rand="random"
+ end
+ return t
+end
+function fonts.helpers.nametoslot(name)
+ local t=type(name)
+ if t=="string" then
+ local tfmdata=fonts.hashes.identifiers[currentfont()]
+ local shared=tfmdata and tfmdata.shared
+ local fntdata=shared and shared.rawdata
+ return fntdata and fntdata.resources.unicodes[name]
+ elseif t=="number" then
+ return n
+ end
+end
+fonts.encodings=fonts.encodings or {}
+local reencodings={}
+fonts.encodings.reencodings=reencodings
+local function specialreencode(tfmdata,value)
+ local encoding=value and reencodings[value]
+ if encoding then
+ local temp={}
+ local char=tfmdata.characters
+ for k,v in next,encoding do
+ temp[k]=char[v]
+ end
+ for k,v in next,temp do
+ char[k]=temp[k]
+ end
+ return string.format("reencoded:%s",value)
+ end
+end
+local function reencode(tfmdata,value)
+ tfmdata.postprocessors=tfmdata.postprocessors or {}
+ table.insert(tfmdata.postprocessors,
+ function(tfmdata)
+ return specialreencode(tfmdata,value)
+ end
+ )
+end
+otffeatures.register {
+ name="reencode",
+ description="reencode characters",
+ manipulators={
+ base=reencode,
+ node=reencode,
+ }
+}
+local function ignore(tfmdata,key,value)
+ if value then
+ tfmdata.mathparameters=nil
+ end
+end
+otffeatures.register {
+ name="ignoremathconstants",
+ description="ignore math constants table",
+ initializers={
+ base=ignore,
+ node=ignore,
+ }
+}
+local setmetatableindex=table.setmetatableindex
+local function additalictowidth(tfmdata,key,value)
+ local characters=tfmdata.characters
+ local additions={}
+ for unicode,old_c in next,characters do
+ local oldwidth=old_c.width
+ local olditalic=old_c.italic
+ if olditalic and olditalic~=0 then
+ local private=getprivate(tfmdata)
+ local new_c={
+ width=oldwidth+olditalic,
+ height=old_c.height,
+ depth=old_c.depth,
+ commands={
+ { "slot",1,private },
+ { "right",olditalic },
+ },
+ }
+ setmetatableindex(new_c,old_c)
+ characters[unicode]=new_c
+ additions[private]=old_c
+ end
+ end
+ for k,v in next,additions do
+ characters[k]=v
+ end
+end
+otffeatures.register {
+ name="italicwidths",
+ description="add italic to width",
+ manipulators={
+ base=additalictowidth,
+ }
+}
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+
+fonts.handlers.otf.addfeature {
+ ["dataset"]={
+ {
+ ["data"]={
+ ["À"]={ "A","̀" },
+ ["Ã"]={ "A","Ì" },
+ ["Â"]={ "A","̂" },
+ ["Ã"]={ "A","̃" },
+ ["Ä"]={ "A","̈" },
+ ["Ã…"]={ "A","ÌŠ" },
+ ["Ç"]={ "C","̧" },
+ ["È"]={ "E","̀" },
+ ["É"]={ "E","Ì" },
+ ["Ê"]={ "E","̂" },
+ ["Ë"]={ "E","̈" },
+ ["Ì"]={ "I","̀" },
+ ["Ã"]={ "I","Ì" },
+ ["ÃŽ"]={ "I","Ì‚" },
+ ["Ã"]={ "I","̈" },
+ ["Ñ"]={ "N","̃" },
+ ["Ã’"]={ "O","Ì€" },
+ ["Ó"]={ "O","Ì" },
+ ["Ô"]={ "O","̂" },
+ ["Õ"]={ "O","̃" },
+ ["Ö"]={ "O","̈" },
+ ["Ù"]={ "U","̀" },
+ ["Ú"]={ "U","Ì" },
+ ["Û"]={ "U","̂" },
+ ["Ü"]={ "U","̈" },
+ ["Ã"]={ "Y","Ì" },
+ ["à"]={ "a","̀" },
+ ["á"]={ "a","Ì" },
+ ["â"]={ "a","̂" },
+ ["ã"]={ "a","̃" },
+ ["ä"]={ "a","̈" },
+ ["Ã¥"]={ "a","ÌŠ" },
+ ["ç"]={ "c","̧" },
+ ["è"]={ "e","̀" },
+ ["é"]={ "e","Ì" },
+ ["ê"]={ "e","̂" },
+ ["ë"]={ "e","̈" },
+ ["ì"]={ "i","̀" },
+ ["í"]={ "i","Ì" },
+ ["î"]={ "i","̂" },
+ ["ï"]={ "i","̈" },
+ ["ñ"]={ "n","̃" },
+ ["ò"]={ "o","̀" },
+ ["ó"]={ "o","Ì" },
+ ["ô"]={ "o","̂" },
+ ["õ"]={ "o","̃" },
+ ["ö"]={ "o","̈" },
+ ["ù"]={ "u","̀" },
+ ["ú"]={ "u","Ì" },
+ ["û"]={ "u","̂" },
+ ["ü"]={ "u","̈" },
+ ["ý"]={ "y","Ì" },
+ ["ÿ"]={ "y","̈" },
+ ["Ä€"]={ "A","Ì„" },
+ ["Ä"]={ "a","Ì„" },
+ ["Ă"]={ "A","̆" },
+ ["ă"]={ "a","̆" },
+ ["Ą"]={ "A","̨" },
+ ["ą"]={ "a","̨" },
+ ["Ć"]={ "C","Ì" },
+ ["ć"]={ "c","Ì" },
+ ["Ĉ"]={ "C","̂" },
+ ["ĉ"]={ "c","̂" },
+ ["Ċ"]={ "C","̇" },
+ ["ċ"]={ "c","̇" },
+ ["Č"]={ "C","̌" },
+ ["Ä"]={ "c","ÌŒ" },
+ ["Ď"]={ "D","̌" },
+ ["Ä"]={ "d","ÌŒ" },
+ ["Ä’"]={ "E","Ì„" },
+ ["Ä“"]={ "e","Ì„" },
+ ["Ĕ"]={ "E","̆" },
+ ["ĕ"]={ "e","̆" },
+ ["Ė"]={ "E","̇" },
+ ["ė"]={ "e","̇" },
+ ["Ę"]={ "E","̨" },
+ ["ę"]={ "e","̨" },
+ ["Ě"]={ "E","̌" },
+ ["ě"]={ "e","̌" },
+ ["Ĝ"]={ "G","̂" },
+ ["Ä"]={ "g","Ì‚" },
+ ["Ğ"]={ "G","̆" },
+ ["ğ"]={ "g","̆" },
+ ["Ġ"]={ "G","̇" },
+ ["ġ"]={ "g","̇" },
+ ["Ģ"]={ "G","̧" },
+ ["ģ"]={ "g","̧" },
+ ["Ĥ"]={ "H","̂" },
+ ["Ä¥"]={ "h","Ì‚" },
+ ["Ĩ"]={ "I","̃" },
+ ["ĩ"]={ "i","̃" },
+ ["Ī"]={ "I","̄" },
+ ["Ä«"]={ "i","Ì„" },
+ ["Ĭ"]={ "I","̆" },
+ ["ĭ"]={ "i","̆" },
+ ["Į"]={ "I","̨" },
+ ["į"]={ "i","̨" },
+ ["İ"]={ "I","̇" },
+ ["Ä´"]={ "J","Ì‚" },
+ ["ĵ"]={ "j","̂" },
+ ["Ķ"]={ "K","̧" },
+ ["ķ"]={ "k","̧" },
+ ["Ĺ"]={ "L","Ì" },
+ ["ĺ"]={ "l","Ì" },
+ ["Ļ"]={ "L","̧" },
+ ["ļ"]={ "l","̧" },
+ ["Ľ"]={ "L","̌" },
+ ["ľ"]={ "l","̌" },
+ ["Ń"]={ "N","Ì" },
+ ["Å„"]={ "n","Ì" },
+ ["Ņ"]={ "N","̧" },
+ ["ņ"]={ "n","̧" },
+ ["Ň"]={ "N","̌" },
+ ["ň"]={ "n","̌" },
+ ["Ō"]={ "O","̄" },
+ ["Å"]={ "o","Ì„" },
+ ["Ŏ"]={ "O","̆" },
+ ["Å"]={ "o","̆" },
+ ["Å"]={ "O","Ì‹" },
+ ["Å‘"]={ "o","Ì‹" },
+ ["Å”"]={ "R","Ì" },
+ ["Å•"]={ "r","Ì" },
+ ["Ŗ"]={ "R","̧" },
+ ["ŗ"]={ "r","̧" },
+ ["Ř"]={ "R","̌" },
+ ["ř"]={ "r","̌" },
+ ["Åš"]={ "S","Ì" },
+ ["Å›"]={ "s","Ì" },
+ ["Ŝ"]={ "S","̂" },
+ ["Å"]={ "s","Ì‚" },
+ ["Ş"]={ "S","̧" },
+ ["ş"]={ "s","̧" },
+ ["Š"]={ "S","̌" },
+ ["š"]={ "s","̌" },
+ ["Ţ"]={ "T","̧" },
+ ["ţ"]={ "t","̧" },
+ ["Ť"]={ "T","̌" },
+ ["ť"]={ "t","̌" },
+ ["Ũ"]={ "U","̃" },
+ ["ũ"]={ "u","̃" },
+ ["Ū"]={ "U","̄" },
+ ["Å«"]={ "u","Ì„" },
+ ["Ŭ"]={ "U","̆" },
+ ["ŭ"]={ "u","̆" },
+ ["Å®"]={ "U","ÌŠ" },
+ ["ů"]={ "u","̊" },
+ ["Å°"]={ "U","Ì‹" },
+ ["ű"]={ "u","̋" },
+ ["Ų"]={ "U","̨" },
+ ["ų"]={ "u","̨" },
+ ["Å´"]={ "W","Ì‚" },
+ ["ŵ"]={ "w","̂" },
+ ["Ŷ"]={ "Y","̂" },
+ ["Å·"]={ "y","Ì‚" },
+ ["Ÿ"]={ "Y","̈" },
+ ["Ź"]={ "Z","Ì" },
+ ["ź"]={ "z","Ì" },
+ ["Ż"]={ "Z","̇" },
+ ["ż"]={ "z","̇" },
+ ["Ž"]={ "Z","̌" },
+ ["ž"]={ "z","̌" },
+ ["Æ "]={ "O","Ì›" },
+ ["Æ¡"]={ "o","Ì›" },
+ ["Ư"]={ "U","̛" },
+ ["Æ°"]={ "u","Ì›" },
+ ["Ç"]={ "A","ÌŒ" },
+ ["ǎ"]={ "a","̌" },
+ ["Ç"]={ "I","ÌŒ" },
+ ["Ç"]={ "i","ÌŒ" },
+ ["Ǒ"]={ "O","̌" },
+ ["ǒ"]={ "o","̌" },
+ ["Ǔ"]={ "U","̌" },
+ ["ǔ"]={ "u","̌" },
+ ["Ǖ"]={ "Ü","̄" },
+ ["ǖ"]={ "ü","̄" },
+ ["Ç—"]={ "Ãœ","Ì" },
+ ["ǘ"]={ "ü","Ì" },
+ ["Ǚ"]={ "Ü","̌" },
+ ["ǚ"]={ "ü","̌" },
+ ["Ǜ"]={ "Ü","̀" },
+ ["ǜ"]={ "ü","̀" },
+ ["Ǟ"]={ "Ä","̄" },
+ ["ǟ"]={ "ä","̄" },
+ ["Ǡ"]={ "Ȧ","̄" },
+ ["ǡ"]={ "ȧ","̄" },
+ ["Ǣ"]={ "Æ","̄" },
+ ["ǣ"]={ "æ","̄" },
+ ["Ǧ"]={ "G","̌" },
+ ["ǧ"]={ "g","̌" },
+ ["Ǩ"]={ "K","̌" },
+ ["ǩ"]={ "k","̌" },
+ ["Ǫ"]={ "O","̨" },
+ ["ǫ"]={ "o","̨" },
+ ["Ǭ"]={ "Ǫ","̄" },
+ ["Ç­"]={ "Ç«","Ì„" },
+ ["Ǯ"]={ "Ʒ","̌" },
+ ["ǯ"]={ "ʒ","̌" },
+ ["ǰ"]={ "j","̌" },
+ ["Ç´"]={ "G","Ì" },
+ ["ǵ"]={ "g","Ì" },
+ ["Ǹ"]={ "N","̀" },
+ ["ǹ"]={ "n","̀" },
+ ["Ǻ"]={ "Ã…","Ì" },
+ ["Ç»"]={ "Ã¥","Ì" },
+ ["Ǽ"]={ "Æ","Ì" },
+ ["ǽ"]={ "æ","Ì" },
+ ["Ǿ"]={ "Ø","Ì" },
+ ["Ç¿"]={ "ø","Ì" },
+ ["È€"]={ "A","Ì" },
+ ["È"]={ "a","Ì" },
+ ["È‚"]={ "A","Ì‘" },
+ ["ȃ"]={ "a","̑" },
+ ["È„"]={ "E","Ì" },
+ ["È…"]={ "e","Ì" },
+ ["Ȇ"]={ "E","̑" },
+ ["ȇ"]={ "e","̑" },
+ ["Ȉ"]={ "I","Ì" },
+ ["ȉ"]={ "i","Ì" },
+ ["ÈŠ"]={ "I","Ì‘" },
+ ["È‹"]={ "i","Ì‘" },
+ ["ÈŒ"]={ "O","Ì" },
+ ["È"]={ "o","Ì" },
+ ["ÈŽ"]={ "O","Ì‘" },
+ ["È"]={ "o","Ì‘" },
+ ["È"]={ "R","Ì" },
+ ["È‘"]={ "r","Ì" },
+ ["È’"]={ "R","Ì‘" },
+ ["È“"]={ "r","Ì‘" },
+ ["È”"]={ "U","Ì" },
+ ["È•"]={ "u","Ì" },
+ ["È–"]={ "U","Ì‘" },
+ ["È—"]={ "u","Ì‘" },
+ ["Ș"]={ "S","̦" },
+ ["ș"]={ "s","̦" },
+ ["Ț"]={ "T","̦" },
+ ["ț"]={ "t","̦" },
+ ["Ȟ"]={ "H","̌" },
+ ["ȟ"]={ "h","̌" },
+ ["Ȧ"]={ "A","̇" },
+ ["ȧ"]={ "a","̇" },
+ ["Ȩ"]={ "E","̧" },
+ ["ȩ"]={ "e","̧" },
+ ["Ȫ"]={ "Ö","̄" },
+ ["ȫ"]={ "ö","̄" },
+ ["Ȭ"]={ "Õ","̄" },
+ ["ȭ"]={ "õ","̄" },
+ ["Ȯ"]={ "O","̇" },
+ ["ȯ"]={ "o","̇" },
+ ["È°"]={ "È®","Ì„" },
+ ["ȱ"]={ "ȯ","̄" },
+ ["Ȳ"]={ "Y","̄" },
+ ["ȳ"]={ "y","̄" },
+ ["Í„"]={ "̈","Ì" },
+ ["Î…"]={ "¨","Ì" },
+ ["Ά"]={ "Α","Ì" },
+ ["Έ"]={ "Ε","Ì" },
+ ["Ή"]={ "Η","Ì" },
+ ["Ί"]={ "Ι","Ì" },
+ ["ÎŒ"]={ "Ο","Ì" },
+ ["ÎŽ"]={ "Î¥","Ì" },
+ ["Î"]={ "Ω","Ì" },
+ ["Î"]={ "ÏŠ","Ì" },
+ ["Ϊ"]={ "Ι","̈" },
+ ["Ϋ"]={ "Υ","̈" },
+ ["ά"]={ "α","Ì" },
+ ["έ"]={ "ε","Ì" },
+ ["ή"]={ "η","Ì" },
+ ["ί"]={ "ι","Ì" },
+ ["ΰ"]={ "Ï‹","Ì" },
+ ["ϊ"]={ "ι","̈" },
+ ["ϋ"]={ "υ","̈" },
+ ["ÏŒ"]={ "ο","Ì" },
+ ["Ï"]={ "Ï…","Ì" },
+ ["ÏŽ"]={ "ω","Ì" },
+ ["Ï“"]={ "Ï’","Ì" },
+ ["ϔ"]={ "ϒ","̈" },
+ ["Ѐ"]={ "Е","̀" },
+ ["Ð"]={ "Е","̈" },
+ ["Ѓ"]={ "Г","Ì" },
+ ["Ї"]={ "І","̈" },
+ ["ÐŒ"]={ "К","Ì" },
+ ["Ð"]={ "И","Ì€" },
+ ["Ў"]={ "У","̆" },
+ ["Й"]={ "И","̆" },
+ ["й"]={ "и","̆" },
+ ["Ñ"]={ "е","Ì€" },
+ ["ё"]={ "е","̈" },
+ ["Ñ“"]={ "г","Ì" },
+ ["ї"]={ "і","̈" },
+ ["Ñœ"]={ "к","Ì" },
+ ["Ñ"]={ "и","Ì€" },
+ ["ў"]={ "у","̆" },
+ ["Ѷ"]={ "Ñ´","Ì" },
+ ["Ñ·"]={ "ѵ","Ì" },
+ ["Ó"]={ "Ж","̆" },
+ ["ӂ"]={ "ж","̆" },
+ ["Ó"]={ "Ð","̆" },
+ ["ӑ"]={ "а","̆" },
+ ["Ó’"]={ "Ð","̈" },
+ ["ӓ"]={ "а","̈" },
+ ["Ӗ"]={ "Е","̆" },
+ ["ӗ"]={ "е","̆" },
+ ["Ӛ"]={ "Ә","̈" },
+ ["ӛ"]={ "ә","̈" },
+ ["Ӝ"]={ "Ж","̈" },
+ ["Ó"]={ "ж","̈" },
+ ["Ӟ"]={ "З","̈" },
+ ["ӟ"]={ "з","̈" },
+ ["Ӣ"]={ "И","̄" },
+ ["ӣ"]={ "и","̄" },
+ ["Ӥ"]={ "И","̈" },
+ ["ӥ"]={ "и","̈" },
+ ["Ӧ"]={ "О","̈" },
+ ["ӧ"]={ "о","̈" },
+ ["Ӫ"]={ "Ө","̈" },
+ ["ӫ"]={ "ө","̈" },
+ ["Ӭ"]={ "Э","̈" },
+ ["Ó­"]={ "Ñ","̈" },
+ ["Ӯ"]={ "У","̄" },
+ ["ӯ"]={ "у","̄" },
+ ["Ӱ"]={ "У","̈" },
+ ["ӱ"]={ "у","̈" },
+ ["Ӳ"]={ "У","̋" },
+ ["ӳ"]={ "у","̋" },
+ ["Ӵ"]={ "Ч","̈" },
+ ["ӵ"]={ "ч","̈" },
+ ["Ӹ"]={ "Ы","̈" },
+ ["ӹ"]={ "ы","̈" },
+ ["آ"]={ "ا","ٓ" },
+ ["أ"]={ "ا","ٔ" },
+ ["ؤ"]={ "و","ٔ" },
+ ["إ"]={ "ا","ٕ" },
+ ["ئ"]={ "ي","ٔ" },
+ ["Û€"]={ "Û•","Ù”" },
+ ["Û‚"]={ "Û","Ù”" },
+ ["Û“"]={ "Û’","Ù”" },
+ ["ऩ"]={ "न","़" },
+ ["ऱ"]={ "र","़" },
+ ["ऴ"]={ "ळ","़" },
+ ["क़"]={ "क","़" },
+ ["ख़"]={ "ख","़" },
+ ["ग़"]={ "ग","़" },
+ ["ज़"]={ "ज","़" },
+ ["ड़"]={ "ड","़" },
+ ["à¥"]={ "ढ","़" },
+ ["फ़"]={ "फ","़" },
+ ["य़"]={ "य","़" },
+ ["ো"]={ "ে","া" },
+ ["ৌ"]={ "ে","ৗ" },
+ ["ড়"]={ "ড","়" },
+ ["à§"]={ "ঢ","়" },
+ ["য়"]={ "য","়" },
+ ["ਲ਼"]={ "ਲ","਼" },
+ ["ਸ਼"]={ "ਸ","਼" },
+ ["ਖ਼"]={ "ਖ","਼" },
+ ["ਗ਼"]={ "ਗ","਼" },
+ ["ਜ਼"]={ "ਜ","਼" },
+ ["ਫ਼"]={ "ਫ","਼" },
+ ["à­ˆ"]={ "à­‡","à­–" },
+ ["ୋ"]={ "େ","ା" },
+ ["ୌ"]={ "େ","ୗ" },
+ ["ଡ଼"]={ "ଡ","଼" },
+ ["à­"]={ "ଢ","଼" },
+ ["ஔ"]={ "ஒ","ௗ" },
+ ["ொ"]={ "ெ","ா" },
+ ["ோ"]={ "ே","ா" },
+ ["ௌ"]={ "ெ","ௗ" },
+ ["ై"]={ "ె","ౖ" },
+ ["ೀ"]={ "ಿ","ೕ" },
+ ["ೇ"]={ "ೆ","ೕ" },
+ ["ೈ"]={ "ೆ","ೖ" },
+ ["ೊ"]={ "ೆ","ೂ" },
+ ["ೋ"]={ "ೊ","ೕ" },
+ ["ൊ"]={ "െ","ാ" },
+ ["ോ"]={ "േ","ാ" },
+ ["ൌ"]={ "െ","ൗ" },
+ ["à·š"]={ "à·™","à·Š" },
+ ["à·œ"]={ "à·™","à·" },
+ ["à·"]={ "à·œ","à·Š" },
+ ["à·ž"]={ "à·™","à·Ÿ" },
+ ["གྷ"]={ "ག","ྷ" },
+ ["à½"]={ "ཌ","ྷ" },
+ ["དྷ"]={ "ད","ྷ" },
+ ["བྷ"]={ "བ","ྷ" },
+ ["ཛྷ"]={ "ཛ","ྷ" },
+ ["ཀྵ"]={ "ཀ","ྵ" },
+ ["ཱི"]={ "ཱ","ི" },
+ ["ཱུ"]={ "ཱ","ུ" },
+ ["ྲྀ"]={ "ྲ","ྀ" },
+ ["ླྀ"]={ "ླ","ྀ" },
+ ["à¾"]={ "ཱ","ྀ" },
+ ["ྒྷ"]={ "ྒ","ྷ" },
+ ["à¾"]={ "ྜ","ྷ" },
+ ["ྡྷ"]={ "ྡ","ྷ" },
+ ["ྦྷ"]={ "ྦ","ྷ" },
+ ["ྫྷ"]={ "ྫ","ྷ" },
+ ["ྐྵ"]={ "à¾","ྵ" },
+ ["ဦ"]={ "ဥ","ီ" },
+ ["ᬆ"]={ "ᬅ","ᬵ" },
+ ["ᬈ"]={ "ᬇ","ᬵ" },
+ ["ᬊ"]={ "ᬉ","ᬵ" },
+ ["ᬌ"]={ "ᬋ","ᬵ" },
+ ["ᬎ"]={ "á¬","ᬵ" },
+ ["ᬒ"]={ "ᬑ","ᬵ" },
+ ["ᬻ"]={ "ᬺ","ᬵ" },
+ ["ᬽ"]={ "ᬼ","ᬵ" },
+ ["ᭀ"]={ "ᬾ","ᬵ" },
+ ["á­"]={ "ᬿ","ᬵ" },
+ ["ᭃ"]={ "ᭂ","ᬵ" },
+ ["Ḁ"]={ "A","̥" },
+ ["á¸"]={ "a","Ì¥" },
+ ["Ḃ"]={ "B","̇" },
+ ["ḃ"]={ "b","̇" },
+ ["Ḅ"]={ "B","̣" },
+ ["ḅ"]={ "b","̣" },
+ ["Ḇ"]={ "B","̱" },
+ ["ḇ"]={ "b","̱" },
+ ["Ḉ"]={ "Ç","Ì" },
+ ["ḉ"]={ "ç","Ì" },
+ ["Ḋ"]={ "D","̇" },
+ ["ḋ"]={ "d","̇" },
+ ["Ḍ"]={ "D","̣" },
+ ["á¸"]={ "d","Ì£" },
+ ["Ḏ"]={ "D","̱" },
+ ["á¸"]={ "d","̱" },
+ ["á¸"]={ "D","̧" },
+ ["ḑ"]={ "d","̧" },
+ ["Ḓ"]={ "D","̭" },
+ ["ḓ"]={ "d","̭" },
+ ["Ḕ"]={ "Ē","̀" },
+ ["ḕ"]={ "ē","̀" },
+ ["Ḗ"]={ "Ä’","Ì" },
+ ["ḗ"]={ "Ä“","Ì" },
+ ["Ḙ"]={ "E","̭" },
+ ["ḙ"]={ "e","̭" },
+ ["Ḛ"]={ "E","̰" },
+ ["ḛ"]={ "e","̰" },
+ ["Ḝ"]={ "Ȩ","̆" },
+ ["á¸"]={ "È©","̆" },
+ ["Ḟ"]={ "F","̇" },
+ ["ḟ"]={ "f","̇" },
+ ["Ḡ"]={ "G","̄" },
+ ["ḡ"]={ "g","̄" },
+ ["Ḣ"]={ "H","̇" },
+ ["ḣ"]={ "h","̇" },
+ ["Ḥ"]={ "H","̣" },
+ ["ḥ"]={ "h","̣" },
+ ["Ḧ"]={ "H","̈" },
+ ["ḧ"]={ "h","̈" },
+ ["Ḩ"]={ "H","̧" },
+ ["ḩ"]={ "h","̧" },
+ ["Ḫ"]={ "H","̮" },
+ ["ḫ"]={ "h","̮" },
+ ["Ḭ"]={ "I","̰" },
+ ["ḭ"]={ "i","̰" },
+ ["Ḯ"]={ "Ã","Ì" },
+ ["ḯ"]={ "ï","Ì" },
+ ["Ḱ"]={ "K","Ì" },
+ ["ḱ"]={ "k","Ì" },
+ ["Ḳ"]={ "K","̣" },
+ ["ḳ"]={ "k","̣" },
+ ["Ḵ"]={ "K","̱" },
+ ["ḵ"]={ "k","̱" },
+ ["Ḷ"]={ "L","̣" },
+ ["ḷ"]={ "l","̣" },
+ ["Ḹ"]={ "Ḷ","̄" },
+ ["ḹ"]={ "ḷ","̄" },
+ ["Ḻ"]={ "L","̱" },
+ ["ḻ"]={ "l","̱" },
+ ["Ḽ"]={ "L","̭" },
+ ["ḽ"]={ "l","̭" },
+ ["Ḿ"]={ "M","Ì" },
+ ["ḿ"]={ "m","Ì" },
+ ["Ṁ"]={ "M","̇" },
+ ["á¹"]={ "m","̇" },
+ ["Ṃ"]={ "M","̣" },
+ ["ṃ"]={ "m","̣" },
+ ["Ṅ"]={ "N","̇" },
+ ["ṅ"]={ "n","̇" },
+ ["Ṇ"]={ "N","̣" },
+ ["ṇ"]={ "n","̣" },
+ ["Ṉ"]={ "N","̱" },
+ ["ṉ"]={ "n","̱" },
+ ["Ṋ"]={ "N","̭" },
+ ["ṋ"]={ "n","̭" },
+ ["Ṍ"]={ "Õ","Ì" },
+ ["á¹"]={ "õ","Ì" },
+ ["Ṏ"]={ "Õ","̈" },
+ ["á¹"]={ "õ","̈" },
+ ["á¹"]={ "ÅŒ","Ì€" },
+ ["ṑ"]={ "Å","Ì€" },
+ ["á¹’"]={ "ÅŒ","Ì" },
+ ["ṓ"]={ "Å","Ì" },
+ ["á¹”"]={ "P","Ì" },
+ ["ṕ"]={ "p","Ì" },
+ ["Ṗ"]={ "P","̇" },
+ ["ṗ"]={ "p","̇" },
+ ["Ṙ"]={ "R","̇" },
+ ["ṙ"]={ "r","̇" },
+ ["Ṛ"]={ "R","̣" },
+ ["á¹›"]={ "r","Ì£" },
+ ["Ṝ"]={ "Ṛ","̄" },
+ ["á¹"]={ "á¹›","Ì„" },
+ ["Ṟ"]={ "R","̱" },
+ ["ṟ"]={ "r","̱" },
+ ["Ṡ"]={ "S","̇" },
+ ["ṡ"]={ "s","̇" },
+ ["á¹¢"]={ "S","Ì£" },
+ ["á¹£"]={ "s","Ì£" },
+ ["Ṥ"]={ "Ś","̇" },
+ ["ṥ"]={ "ś","̇" },
+ ["Ṧ"]={ "Š","̇" },
+ ["ṧ"]={ "š","̇" },
+ ["Ṩ"]={ "Ṣ","̇" },
+ ["ṩ"]={ "ṣ","̇" },
+ ["Ṫ"]={ "T","̇" },
+ ["ṫ"]={ "t","̇" },
+ ["Ṭ"]={ "T","̣" },
+ ["á¹­"]={ "t","Ì£" },
+ ["Ṯ"]={ "T","̱" },
+ ["ṯ"]={ "t","̱" },
+ ["á¹°"]={ "T","Ì­" },
+ ["á¹±"]={ "t","Ì­" },
+ ["Ṳ"]={ "U","̤" },
+ ["ṳ"]={ "u","̤" },
+ ["á¹´"]={ "U","Ì°" },
+ ["á¹µ"]={ "u","Ì°" },
+ ["Ṷ"]={ "U","̭" },
+ ["á¹·"]={ "u","Ì­" },
+ ["Ṹ"]={ "Ũ","Ì" },
+ ["á¹¹"]={ "Å©","Ì" },
+ ["Ṻ"]={ "Ū","̈" },
+ ["ṻ"]={ "ū","̈" },
+ ["Ṽ"]={ "V","̃" },
+ ["ṽ"]={ "v","̃" },
+ ["á¹¾"]={ "V","Ì£" },
+ ["ṿ"]={ "v","̣" },
+ ["Ẁ"]={ "W","̀" },
+ ["áº"]={ "w","Ì€" },
+ ["Ẃ"]={ "W","Ì" },
+ ["ẃ"]={ "w","Ì" },
+ ["Ẅ"]={ "W","̈" },
+ ["ẅ"]={ "w","̈" },
+ ["Ẇ"]={ "W","̇" },
+ ["ẇ"]={ "w","̇" },
+ ["Ẉ"]={ "W","̣" },
+ ["ẉ"]={ "w","̣" },
+ ["Ẋ"]={ "X","̇" },
+ ["ẋ"]={ "x","̇" },
+ ["Ẍ"]={ "X","̈" },
+ ["áº"]={ "x","̈" },
+ ["Ẏ"]={ "Y","̇" },
+ ["áº"]={ "y","̇" },
+ ["áº"]={ "Z","Ì‚" },
+ ["ẑ"]={ "z","̂" },
+ ["Ẓ"]={ "Z","̣" },
+ ["ẓ"]={ "z","̣" },
+ ["Ẕ"]={ "Z","̱" },
+ ["ẕ"]={ "z","̱" },
+ ["ẖ"]={ "h","̱" },
+ ["ẗ"]={ "t","̈" },
+ ["ẘ"]={ "w","̊" },
+ ["ẙ"]={ "y","̊" },
+ ["ẛ"]={ "ſ","̇" },
+ ["Ạ"]={ "A","̣" },
+ ["ạ"]={ "a","̣" },
+ ["Ả"]={ "A","̉" },
+ ["ả"]={ "a","̉" },
+ ["Ấ"]={ "Â","Ì" },
+ ["ấ"]={ "â","Ì" },
+ ["Ầ"]={ "Â","̀" },
+ ["ầ"]={ "â","̀" },
+ ["Ẩ"]={ "Â","̉" },
+ ["ẩ"]={ "â","̉" },
+ ["Ẫ"]={ "Â","̃" },
+ ["ẫ"]={ "â","̃" },
+ ["Ậ"]={ "Ạ","̂" },
+ ["ậ"]={ "ạ","̂" },
+ ["Ắ"]={ "Ä‚","Ì" },
+ ["ắ"]={ "ă","Ì" },
+ ["Ằ"]={ "Ă","̀" },
+ ["ằ"]={ "ă","̀" },
+ ["Ẳ"]={ "Ă","̉" },
+ ["ẳ"]={ "ă","̉" },
+ ["Ẵ"]={ "Ă","̃" },
+ ["ẵ"]={ "ă","̃" },
+ ["Ặ"]={ "Ạ","̆" },
+ ["ặ"]={ "ạ","̆" },
+ ["Ẹ"]={ "E","̣" },
+ ["ẹ"]={ "e","̣" },
+ ["Ẻ"]={ "E","̉" },
+ ["ẻ"]={ "e","̉" },
+ ["Ẽ"]={ "E","̃" },
+ ["ẽ"]={ "e","̃" },
+ ["Ế"]={ "Ê","Ì" },
+ ["ế"]={ "ê","Ì" },
+ ["Ề"]={ "Ê","̀" },
+ ["á»"]={ "ê","Ì€" },
+ ["Ể"]={ "Ê","̉" },
+ ["ể"]={ "ê","̉" },
+ ["Ễ"]={ "Ê","̃" },
+ ["ễ"]={ "ê","̃" },
+ ["Ệ"]={ "Ẹ","̂" },
+ ["ệ"]={ "ẹ","̂" },
+ ["Ỉ"]={ "I","̉" },
+ ["ỉ"]={ "i","̉" },
+ ["Ị"]={ "I","̣" },
+ ["ị"]={ "i","̣" },
+ ["Ọ"]={ "O","̣" },
+ ["á»"]={ "o","Ì£" },
+ ["Ỏ"]={ "O","̉" },
+ ["á»"]={ "o","̉" },
+ ["á»"]={ "Ô","Ì" },
+ ["ố"]={ "ô","Ì" },
+ ["Ồ"]={ "Ô","̀" },
+ ["ồ"]={ "ô","̀" },
+ ["Ổ"]={ "Ô","̉" },
+ ["ổ"]={ "ô","̉" },
+ ["Ỗ"]={ "Ô","̃" },
+ ["ỗ"]={ "ô","̃" },
+ ["Ộ"]={ "Ọ","̂" },
+ ["á»™"]={ "á»","Ì‚" },
+ ["Ớ"]={ "Æ ","Ì" },
+ ["á»›"]={ "Æ¡","Ì" },
+ ["Ờ"]={ "Ơ","̀" },
+ ["á»"]={ "Æ¡","Ì€" },
+ ["Ở"]={ "Ơ","̉" },
+ ["ở"]={ "ơ","̉" },
+ ["Ỡ"]={ "Ơ","̃" },
+ ["ỡ"]={ "ơ","̃" },
+ ["Ợ"]={ "Ơ","̣" },
+ ["ợ"]={ "ơ","̣" },
+ ["Ụ"]={ "U","̣" },
+ ["ụ"]={ "u","̣" },
+ ["Ủ"]={ "U","̉" },
+ ["ủ"]={ "u","̉" },
+ ["Ứ"]={ "Ư","Ì" },
+ ["ứ"]={ "Æ°","Ì" },
+ ["Ừ"]={ "Ư","̀" },
+ ["ừ"]={ "ư","̀" },
+ ["Ử"]={ "Ư","̉" },
+ ["ử"]={ "ư","̉" },
+ ["Ữ"]={ "Ư","̃" },
+ ["ữ"]={ "ư","̃" },
+ ["Ự"]={ "Ư","̣" },
+ ["á»±"]={ "Æ°","Ì£" },
+ ["Ỳ"]={ "Y","̀" },
+ ["ỳ"]={ "y","̀" },
+ ["á»´"]={ "Y","Ì£" },
+ ["ỵ"]={ "y","̣" },
+ ["Ỷ"]={ "Y","̉" },
+ ["ỷ"]={ "y","̉" },
+ ["Ỹ"]={ "Y","̃" },
+ ["ỹ"]={ "y","̃" },
+ ["ἀ"]={ "α","̓" },
+ ["á¼"]={ "α","Ì”" },
+ ["ἂ"]={ "ἀ","̀" },
+ ["ἃ"]={ "á¼","Ì€" },
+ ["ἄ"]={ "á¼€","Ì" },
+ ["á¼…"]={ "á¼","Ì" },
+ ["ἆ"]={ "ἀ","͂" },
+ ["ἇ"]={ "á¼","Í‚" },
+ ["Ἀ"]={ "Α","̓" },
+ ["Ἁ"]={ "Α","̔" },
+ ["Ἂ"]={ "Ἀ","̀" },
+ ["Ἃ"]={ "Ἁ","̀" },
+ ["Ἄ"]={ "Ἀ","Ì" },
+ ["á¼"]={ "Ἁ","Ì" },
+ ["Ἆ"]={ "Ἀ","͂" },
+ ["á¼"]={ "Ἁ","Í‚" },
+ ["á¼"]={ "ε","Ì“" },
+ ["ἑ"]={ "ε","̔" },
+ ["á¼’"]={ "á¼","Ì€" },
+ ["ἓ"]={ "ἑ","̀" },
+ ["á¼”"]={ "á¼","Ì" },
+ ["ἕ"]={ "ἑ","Ì" },
+ ["Ἐ"]={ "Ε","̓" },
+ ["Ἑ"]={ "Ε","̔" },
+ ["Ἒ"]={ "Ἐ","̀" },
+ ["á¼›"]={ "á¼™","Ì€" },
+ ["Ἔ"]={ "Ἐ","Ì" },
+ ["á¼"]={ "á¼™","Ì" },
+ ["ἠ"]={ "η","̓" },
+ ["ἡ"]={ "η","̔" },
+ ["á¼¢"]={ "á¼ ","Ì€" },
+ ["ἣ"]={ "ἡ","̀" },
+ ["ἤ"]={ "á¼ ","Ì" },
+ ["á¼¥"]={ "ἡ","Ì" },
+ ["ἦ"]={ "ἠ","͂" },
+ ["ἧ"]={ "ἡ","͂" },
+ ["Ἠ"]={ "Η","̓" },
+ ["Ἡ"]={ "Η","̔" },
+ ["Ἢ"]={ "Ἠ","̀" },
+ ["Ἣ"]={ "Ἡ","̀" },
+ ["Ἤ"]={ "Ἠ","Ì" },
+ ["á¼­"]={ "Ἡ","Ì" },
+ ["Ἦ"]={ "Ἠ","͂" },
+ ["Ἧ"]={ "Ἡ","͂" },
+ ["ἰ"]={ "ι","̓" },
+ ["ἱ"]={ "ι","̔" },
+ ["á¼²"]={ "á¼°","Ì€" },
+ ["á¼³"]={ "á¼±","Ì€" },
+ ["á¼´"]={ "á¼°","Ì" },
+ ["á¼µ"]={ "á¼±","Ì" },
+ ["ἶ"]={ "ἰ","͂" },
+ ["á¼·"]={ "á¼±","Í‚" },
+ ["Ἰ"]={ "Ι","̓" },
+ ["Ἱ"]={ "Ι","̔" },
+ ["Ἲ"]={ "Ἰ","̀" },
+ ["á¼»"]={ "á¼¹","Ì€" },
+ ["á¼¼"]={ "Ἰ","Ì" },
+ ["á¼½"]={ "á¼¹","Ì" },
+ ["Ἶ"]={ "Ἰ","͂" },
+ ["Ἷ"]={ "Ἱ","͂" },
+ ["ὀ"]={ "ο","̓" },
+ ["á½"]={ "ο","Ì”" },
+ ["ὂ"]={ "ὀ","̀" },
+ ["ὃ"]={ "á½","Ì€" },
+ ["ὄ"]={ "á½€","Ì" },
+ ["á½…"]={ "á½","Ì" },
+ ["Ὀ"]={ "Ο","̓" },
+ ["Ὁ"]={ "Ο","̔" },
+ ["Ὂ"]={ "Ὀ","̀" },
+ ["Ὃ"]={ "Ὁ","̀" },
+ ["Ὄ"]={ "Ὀ","Ì" },
+ ["á½"]={ "Ὁ","Ì" },
+ ["á½"]={ "Ï…","Ì“" },
+ ["ὑ"]={ "υ","̔" },
+ ["á½’"]={ "á½","Ì€" },
+ ["ὓ"]={ "ὑ","̀" },
+ ["á½”"]={ "á½","Ì" },
+ ["ὕ"]={ "ὑ","Ì" },
+ ["á½–"]={ "á½","Í‚" },
+ ["ὗ"]={ "ὑ","͂" },
+ ["á½™"]={ "Î¥","Ì”" },
+ ["á½›"]={ "á½™","Ì€" },
+ ["á½"]={ "á½™","Ì" },
+ ["Ὗ"]={ "Ὑ","͂" },
+ ["ὠ"]={ "ω","̓" },
+ ["ὡ"]={ "ω","̔" },
+ ["á½¢"]={ "á½ ","Ì€" },
+ ["ὣ"]={ "ὡ","̀" },
+ ["ὤ"]={ "á½ ","Ì" },
+ ["á½¥"]={ "ὡ","Ì" },
+ ["ὦ"]={ "ὠ","͂" },
+ ["ὧ"]={ "ὡ","͂" },
+ ["Ὠ"]={ "Ω","̓" },
+ ["Ὡ"]={ "Ω","̔" },
+ ["Ὢ"]={ "Ὠ","̀" },
+ ["Ὣ"]={ "Ὡ","̀" },
+ ["Ὤ"]={ "Ὠ","Ì" },
+ ["á½­"]={ "Ὡ","Ì" },
+ ["Ὦ"]={ "Ὠ","͂" },
+ ["Ὧ"]={ "Ὡ","͂" },
+ ["ὰ"]={ "α","̀" },
+ ["ὲ"]={ "ε","̀" },
+ ["ὴ"]={ "η","̀" },
+ ["ὶ"]={ "ι","̀" },
+ ["ὸ"]={ "ο","̀" },
+ ["ὺ"]={ "υ","̀" },
+ ["ὼ"]={ "ω","̀" },
+ ["á¾€"]={ "á¼€","Í…" },
+ ["á¾"]={ "á¼","Í…" },
+ ["ᾂ"]={ "ἂ","ͅ" },
+ ["ᾃ"]={ "ἃ","ͅ" },
+ ["ᾄ"]={ "ἄ","ͅ" },
+ ["á¾…"]={ "á¼…","Í…" },
+ ["ᾆ"]={ "ἆ","ͅ" },
+ ["ᾇ"]={ "ἇ","ͅ" },
+ ["ᾈ"]={ "Ἀ","ͅ" },
+ ["ᾉ"]={ "Ἁ","ͅ" },
+ ["ᾊ"]={ "Ἂ","ͅ" },
+ ["ᾋ"]={ "Ἃ","ͅ" },
+ ["ᾌ"]={ "Ἄ","ͅ" },
+ ["á¾"]={ "á¼","Í…" },
+ ["ᾎ"]={ "Ἆ","ͅ" },
+ ["á¾"]={ "á¼","Í…" },
+ ["á¾"]={ "á¼ ","Í…" },
+ ["ᾑ"]={ "ἡ","ͅ" },
+ ["á¾’"]={ "á¼¢","Í…" },
+ ["ᾓ"]={ "ἣ","ͅ" },
+ ["ᾔ"]={ "ἤ","ͅ" },
+ ["ᾕ"]={ "ἥ","ͅ" },
+ ["ᾖ"]={ "ἦ","ͅ" },
+ ["ᾗ"]={ "ἧ","ͅ" },
+ ["ᾘ"]={ "Ἠ","ͅ" },
+ ["ᾙ"]={ "Ἡ","ͅ" },
+ ["ᾚ"]={ "Ἢ","ͅ" },
+ ["ᾛ"]={ "Ἣ","ͅ" },
+ ["ᾜ"]={ "Ἤ","ͅ" },
+ ["á¾"]={ "á¼­","Í…" },
+ ["ᾞ"]={ "Ἦ","ͅ" },
+ ["ᾟ"]={ "Ἧ","ͅ" },
+ ["á¾ "]={ "á½ ","Í…" },
+ ["ᾡ"]={ "ὡ","ͅ" },
+ ["á¾¢"]={ "á½¢","Í…" },
+ ["á¾£"]={ "á½£","Í…" },
+ ["ᾤ"]={ "ὤ","ͅ" },
+ ["á¾¥"]={ "á½¥","Í…" },
+ ["ᾦ"]={ "ὦ","ͅ" },
+ ["ᾧ"]={ "ὧ","ͅ" },
+ ["ᾨ"]={ "Ὠ","ͅ" },
+ ["ᾩ"]={ "Ὡ","ͅ" },
+ ["ᾪ"]={ "Ὢ","ͅ" },
+ ["ᾫ"]={ "Ὣ","ͅ" },
+ ["ᾬ"]={ "Ὤ","ͅ" },
+ ["á¾­"]={ "á½­","Í…" },
+ ["á¾®"]={ "á½®","Í…" },
+ ["ᾯ"]={ "Ὧ","ͅ" },
+ ["ᾰ"]={ "α","̆" },
+ ["ᾱ"]={ "α","̄" },
+ ["á¾²"]={ "á½°","Í…" },
+ ["ᾳ"]={ "α","ͅ" },
+ ["ᾴ"]={ "ά","ͅ" },
+ ["ᾶ"]={ "α","͂" },
+ ["ᾷ"]={ "ᾶ","ͅ" },
+ ["Ᾰ"]={ "Α","̆" },
+ ["Ᾱ"]={ "Α","̄" },
+ ["Ὰ"]={ "Α","̀" },
+ ["ᾼ"]={ "Α","ͅ" },
+ ["á¿"]={ "¨","Í‚" },
+ ["á¿‚"]={ "á½´","Í…" },
+ ["ῃ"]={ "η","ͅ" },
+ ["ῄ"]={ "ή","ͅ" },
+ ["ῆ"]={ "η","͂" },
+ ["ῇ"]={ "ῆ","ͅ" },
+ ["Ὲ"]={ "Ε","̀" },
+ ["Ὴ"]={ "Η","̀" },
+ ["ῌ"]={ "Η","ͅ" },
+ ["á¿"]={ "᾿","Ì€" },
+ ["á¿Ž"]={ "᾿","Ì" },
+ ["á¿"]={ "᾿","Í‚" },
+ ["á¿"]={ "ι","̆" },
+ ["ῑ"]={ "ι","̄" },
+ ["á¿’"]={ "ÏŠ","Ì€" },
+ ["ῖ"]={ "ι","͂" },
+ ["á¿—"]={ "ÏŠ","Í‚" },
+ ["Ῐ"]={ "Ι","̆" },
+ ["Ῑ"]={ "Ι","̄" },
+ ["Ὶ"]={ "Ι","̀" },
+ ["á¿"]={ "῾","Ì€" },
+ ["á¿ž"]={ "῾","Ì" },
+ ["῟"]={ "῾","͂" },
+ ["ῠ"]={ "υ","̆" },
+ ["á¿¡"]={ "Ï…","Ì„" },
+ ["á¿¢"]={ "Ï‹","Ì€" },
+ ["ῤ"]={ "Ï","Ì“" },
+ ["á¿¥"]={ "Ï","Ì”" },
+ ["ῦ"]={ "υ","͂" },
+ ["ῧ"]={ "ϋ","͂" },
+ ["Ῠ"]={ "Υ","̆" },
+ ["á¿©"]={ "Î¥","Ì„" },
+ ["Ὺ"]={ "Υ","̀" },
+ ["Ῥ"]={ "Ρ","̔" },
+ ["῭"]={ "¨","̀" },
+ ["ῲ"]={ "ὼ","ͅ" },
+ ["ῳ"]={ "ω","ͅ" },
+ ["á¿´"]={ "ÏŽ","Í…" },
+ ["ῶ"]={ "ω","͂" },
+ ["ῷ"]={ "ῶ","ͅ" },
+ ["Ὸ"]={ "Ο","̀" },
+ ["Ὼ"]={ "Ω","̀" },
+ ["ῼ"]={ "Ω","ͅ" },
+ ["↚"]={ "â†","̸" },
+ ["↛"]={ "→","̸" },
+ ["↮"]={ "↔","̸" },
+ ["â‡"]={ "â‡","̸" },
+ ["⇎"]={ "⇔","̸" },
+ ["â‡"]={ "⇒","̸" },
+ ["∄"]={ "∃","̸" },
+ ["∉"]={ "∈","̸" },
+ ["∌"]={ "∋","̸" },
+ ["∤"]={ "∣","̸" },
+ ["∦"]={ "∥","̸" },
+ ["â‰"]={ "∼","̸" },
+ ["≄"]={ "≃","̸" },
+ ["≇"]={ "≅","̸" },
+ ["≉"]={ "≈","̸" },
+ ["≠"]={ "=","̸" },
+ ["≢"]={ "≡","̸" },
+ ["≭"]={ "â‰","̸" },
+ ["≮"]={ "<","̸" },
+ ["≯"]={ ">","̸" },
+ ["≰"]={ "≤","̸" },
+ ["≱"]={ "≥","̸" },
+ ["≴"]={ "≲","̸" },
+ ["≵"]={ "≳","̸" },
+ ["≸"]={ "≶","̸" },
+ ["≹"]={ "≷","̸" },
+ ["⊀"]={ "≺","̸" },
+ ["âŠ"]={ "≻","̸" },
+ ["⊄"]={ "⊂","̸" },
+ ["⊅"]={ "⊃","̸" },
+ ["⊈"]={ "⊆","̸" },
+ ["⊉"]={ "⊇","̸" },
+ ["⊬"]={ "⊢","̸" },
+ ["⊭"]={ "⊨","̸" },
+ ["⊮"]={ "⊩","̸" },
+ ["⊯"]={ "⊫","̸" },
+ ["⋠"]={ "≼","̸" },
+ ["⋡"]={ "≽","̸" },
+ ["⋢"]={ "⊑","̸" },
+ ["⋣"]={ "⊒","̸" },
+ ["⋪"]={ "⊲","̸" },
+ ["⋫"]={ "⊳","̸" },
+ ["⋬"]={ "⊴","̸" },
+ ["⋭"]={ "⊵","̸" },
+ ["â«œ"]={ "â«","̸" },
+ ["ãŒ"]={ "ã‹","ã‚™" },
+ ["ãŽ"]={ "ã","ã‚™" },
+ ["ã"]={ "ã","ã‚™" },
+ ["ã’"]={ "ã‘","ã‚™" },
+ ["ã”"]={ "ã“","ã‚™" },
+ ["ã–"]={ "ã•","ã‚™" },
+ ["ã˜"]={ "ã—","ã‚™" },
+ ["ãš"]={ "ã™","ã‚™" },
+ ["ãœ"]={ "ã›","ã‚™" },
+ ["ãž"]={ "ã","ã‚™" },
+ ["ã "]={ "ãŸ","ã‚™" },
+ ["ã¢"]={ "ã¡","ã‚™" },
+ ["ã¥"]={ "ã¤","ã‚™" },
+ ["ã§"]={ "ã¦","ã‚™" },
+ ["ã©"]={ "ã¨","ã‚™" },
+ ["ã°"]={ "ã¯","ã‚™" },
+ ["ã±"]={ "ã¯","ã‚š" },
+ ["ã³"]={ "ã²","ã‚™" },
+ ["ã´"]={ "ã²","ã‚š" },
+ ["ã¶"]={ "ãµ","ã‚™" },
+ ["ã·"]={ "ãµ","ã‚š" },
+ ["ã¹"]={ "ã¸","ã‚™" },
+ ["ãº"]={ "ã¸","ã‚š" },
+ ["ã¼"]={ "ã»","ã‚™" },
+ ["ã½"]={ "ã»","ã‚š" },
+ ["ã‚”"]={ "ã†","ã‚™" },
+ ["ã‚ž"]={ "ã‚","ã‚™" },
+ ["ガ"]={ "カ","゙" },
+ ["ã‚®"]={ "ã‚­","ã‚™" },
+ ["グ"]={ "ク","゙" },
+ ["ゲ"]={ "ケ","゙" },
+ ["ゴ"]={ "コ","゙" },
+ ["ザ"]={ "サ","゙" },
+ ["ジ"]={ "シ","゙" },
+ ["ズ"]={ "ス","゙" },
+ ["ゼ"]={ "セ","゙" },
+ ["ゾ"]={ "ソ","゙" },
+ ["ダ"]={ "タ","゙" },
+ ["ヂ"]={ "ãƒ","ã‚™" },
+ ["ヅ"]={ "ツ","゙" },
+ ["デ"]={ "テ","゙" },
+ ["ド"]={ "ト","゙" },
+ ["ãƒ"]={ "ãƒ","ã‚™" },
+ ["パ"]={ "ãƒ","ã‚š" },
+ ["ビ"]={ "ヒ","゙" },
+ ["ピ"]={ "ヒ","゚" },
+ ["ブ"]={ "フ","゙" },
+ ["プ"]={ "フ","゚" },
+ ["ベ"]={ "ヘ","゙" },
+ ["ペ"]={ "ヘ","゚" },
+ ["ボ"]={ "ホ","゙" },
+ ["ãƒ"]={ "ホ","ã‚š" },
+ ["ヴ"]={ "ウ","゙" },
+ ["ヷ"]={ "ワ","゙" },
+ ["ヸ"]={ "ヰ","゙" },
+ ["ヹ"]={ "ヱ","゙" },
+ ["ヺ"]={ "ヲ","゙" },
+ ["ヾ"]={ "ヽ","゙" },
+ ["ï¬"]={ "×™","Ö´" },
+ ["ײַ"]={ "ײ","ַ" },
+ ["שׁ"]={ "ש","×" },
+ ["שׂ"]={ "ש","ׂ" },
+ ["שּׁ"]={ "ï­‰","×" },
+ ["שּׂ"]={ "שּ","ׂ" },
+ ["אַ"]={ "×","Ö·" },
+ ["אָ"]={ "×","Ö¸" },
+ ["אּ"]={ "×","Ö¼" },
+ ["בּ"]={ "ב","ּ" },
+ ["גּ"]={ "ג","ּ" },
+ ["דּ"]={ "ד","ּ" },
+ ["הּ"]={ "ה","ּ" },
+ ["וּ"]={ "ו","ּ" },
+ ["זּ"]={ "ז","ּ" },
+ ["טּ"]={ "ט","ּ" },
+ ["יּ"]={ "י","ּ" },
+ ["ךּ"]={ "ך","ּ" },
+ ["כּ"]={ "כ","ּ" },
+ ["לּ"]={ "ל","ּ" },
+ ["מּ"]={ "מ","ּ" },
+ ["ï­€"]={ "× ","Ö¼" },
+ ["ï­"]={ "ס","Ö¼" },
+ ["ï­ƒ"]={ "×£","Ö¼" },
+ ["פּ"]={ "פ","ּ" },
+ ["צּ"]={ "צ","ּ" },
+ ["קּ"]={ "ק","ּ" },
+ ["רּ"]={ "ר","ּ" },
+ ["שּ"]={ "ש","ּ" },
+ ["תּ"]={ "ת","ּ" },
+ ["וֹ"]={ "ו","ֹ" },
+ ["בֿ"]={ "ב","ֿ" },
+ ["ï­"]={ "×›","Ö¿" },
+ ["פֿ"]={ "פ","ֿ" },
+ ["𑂚"]={ "𑂙","𑂺" },
+ ["𑂜"]={ "𑂛","𑂺" },
+ ["𑂫"]={ "𑂥","𑂺" },
+ ["𑄮"]={ "𑄱","𑄧" },
+ ["𑄯"]={ "𑄲","𑄧" },
+ ["ð‘‹"]={ "ð‘‡","𑌾" },
+ ["ð‘Œ"]={ "ð‘‡","ð‘—" },
+ ["ð‘’»"]={ "ð‘’¹","ð‘’º" },
+ ["ð‘’¼"]={ "ð‘’¹","ð‘’°" },
+ ["ð‘’¾"]={ "ð‘’¹","ð‘’½" },
+ ["ð‘–º"]={ "ð‘–¸","ð‘–¯" },
+ ["ð‘–»"]={ "ð‘–¹","ð‘–¯" },
+ ["ð…ž"]={ "ð…—","ð…¥" },
+ ["ð…Ÿ"]={ "ð…˜","ð…¥" },
+ ["ð… "]={ "ð…Ÿ","ð…®" },
+ ["ð…¡"]={ "ð…Ÿ","ð…¯" },
+ ["ð…¢"]={ "ð…Ÿ","ð…°" },
+ ["ð…£"]={ "ð…Ÿ","ð…±" },
+ ["ð…¤"]={ "ð…Ÿ","ð…²" },
+ ["ð†»"]={ "ð†¹","ð…¥" },
+ ["ð†¼"]={ "ð†º","ð…¥" },
+ ["ð†½"]={ "ð†»","ð…®" },
+ ["ð†¾"]={ "ð†¼","ð…®" },
+ ["ð†¿"]={ "ð†»","ð…¯" },
+ ["ð‡€"]={ "ð†¼","ð…¯" },
+ },
+ },
+ {
+ ["data"]={
+ ["À"]={ "A","̀" },
+ ["Ã"]={ "A","Ì" },
+ ["Â"]={ "A","̂" },
+ ["Ã"]={ "A","̃" },
+ ["Ä"]={ "A","̈" },
+ ["Ã…"]={ "A","ÌŠ" },
+ ["Ç"]={ "C","̧" },
+ ["È"]={ "E","̀" },
+ ["É"]={ "E","Ì" },
+ ["Ê"]={ "E","̂" },
+ ["Ë"]={ "E","̈" },
+ ["Ì"]={ "I","̀" },
+ ["Ã"]={ "I","Ì" },
+ ["ÃŽ"]={ "I","Ì‚" },
+ ["Ã"]={ "I","̈" },
+ ["Ñ"]={ "N","̃" },
+ ["Ã’"]={ "O","Ì€" },
+ ["Ó"]={ "O","Ì" },
+ ["Ô"]={ "O","̂" },
+ ["Õ"]={ "O","̃" },
+ ["Ö"]={ "O","̈" },
+ ["Ù"]={ "U","̀" },
+ ["Ú"]={ "U","Ì" },
+ ["Û"]={ "U","̂" },
+ ["Ü"]={ "U","̈" },
+ ["Ã"]={ "Y","Ì" },
+ ["à"]={ "a","̀" },
+ ["á"]={ "a","Ì" },
+ ["â"]={ "a","̂" },
+ ["ã"]={ "a","̃" },
+ ["ä"]={ "a","̈" },
+ ["Ã¥"]={ "a","ÌŠ" },
+ ["ç"]={ "c","̧" },
+ ["è"]={ "e","̀" },
+ ["é"]={ "e","Ì" },
+ ["ê"]={ "e","̂" },
+ ["ë"]={ "e","̈" },
+ ["ì"]={ "i","̀" },
+ ["í"]={ "i","Ì" },
+ ["î"]={ "i","̂" },
+ ["ï"]={ "i","̈" },
+ ["ñ"]={ "n","̃" },
+ ["ò"]={ "o","̀" },
+ ["ó"]={ "o","Ì" },
+ ["ô"]={ "o","̂" },
+ ["õ"]={ "o","̃" },
+ ["ö"]={ "o","̈" },
+ ["ù"]={ "u","̀" },
+ ["ú"]={ "u","Ì" },
+ ["û"]={ "u","̂" },
+ ["ü"]={ "u","̈" },
+ ["ý"]={ "y","Ì" },
+ ["ÿ"]={ "y","̈" },
+ ["Ä€"]={ "A","Ì„" },
+ ["Ä"]={ "a","Ì„" },
+ ["Ă"]={ "A","̆" },
+ ["ă"]={ "a","̆" },
+ ["Ą"]={ "A","̨" },
+ ["ą"]={ "a","̨" },
+ ["Ć"]={ "C","Ì" },
+ ["ć"]={ "c","Ì" },
+ ["Ĉ"]={ "C","̂" },
+ ["ĉ"]={ "c","̂" },
+ ["Ċ"]={ "C","̇" },
+ ["ċ"]={ "c","̇" },
+ ["Č"]={ "C","̌" },
+ ["Ä"]={ "c","ÌŒ" },
+ ["Ď"]={ "D","̌" },
+ ["Ä"]={ "d","ÌŒ" },
+ ["Ä’"]={ "E","Ì„" },
+ ["Ä“"]={ "e","Ì„" },
+ ["Ĕ"]={ "E","̆" },
+ ["ĕ"]={ "e","̆" },
+ ["Ė"]={ "E","̇" },
+ ["ė"]={ "e","̇" },
+ ["Ę"]={ "E","̨" },
+ ["ę"]={ "e","̨" },
+ ["Ě"]={ "E","̌" },
+ ["ě"]={ "e","̌" },
+ ["Ĝ"]={ "G","̂" },
+ ["Ä"]={ "g","Ì‚" },
+ ["Ğ"]={ "G","̆" },
+ ["ğ"]={ "g","̆" },
+ ["Ġ"]={ "G","̇" },
+ ["ġ"]={ "g","̇" },
+ ["Ģ"]={ "G","̧" },
+ ["ģ"]={ "g","̧" },
+ ["Ĥ"]={ "H","̂" },
+ ["Ä¥"]={ "h","Ì‚" },
+ ["Ĩ"]={ "I","̃" },
+ ["ĩ"]={ "i","̃" },
+ ["Ī"]={ "I","̄" },
+ ["Ä«"]={ "i","Ì„" },
+ ["Ĭ"]={ "I","̆" },
+ ["ĭ"]={ "i","̆" },
+ ["Į"]={ "I","̨" },
+ ["į"]={ "i","̨" },
+ ["İ"]={ "I","̇" },
+ ["Ä´"]={ "J","Ì‚" },
+ ["ĵ"]={ "j","̂" },
+ ["Ķ"]={ "K","̧" },
+ ["ķ"]={ "k","̧" },
+ ["Ĺ"]={ "L","Ì" },
+ ["ĺ"]={ "l","Ì" },
+ ["Ļ"]={ "L","̧" },
+ ["ļ"]={ "l","̧" },
+ ["Ľ"]={ "L","̌" },
+ ["ľ"]={ "l","̌" },
+ ["Ń"]={ "N","Ì" },
+ ["Å„"]={ "n","Ì" },
+ ["Ņ"]={ "N","̧" },
+ ["ņ"]={ "n","̧" },
+ ["Ň"]={ "N","̌" },
+ ["ň"]={ "n","̌" },
+ ["Ō"]={ "O","̄" },
+ ["Å"]={ "o","Ì„" },
+ ["Ŏ"]={ "O","̆" },
+ ["Å"]={ "o","̆" },
+ ["Å"]={ "O","Ì‹" },
+ ["Å‘"]={ "o","Ì‹" },
+ ["Å”"]={ "R","Ì" },
+ ["Å•"]={ "r","Ì" },
+ ["Ŗ"]={ "R","̧" },
+ ["ŗ"]={ "r","̧" },
+ ["Ř"]={ "R","̌" },
+ ["ř"]={ "r","̌" },
+ ["Åš"]={ "S","Ì" },
+ ["Å›"]={ "s","Ì" },
+ ["Ŝ"]={ "S","̂" },
+ ["Å"]={ "s","Ì‚" },
+ ["Ş"]={ "S","̧" },
+ ["ş"]={ "s","̧" },
+ ["Š"]={ "S","̌" },
+ ["š"]={ "s","̌" },
+ ["Ţ"]={ "T","̧" },
+ ["ţ"]={ "t","̧" },
+ ["Ť"]={ "T","̌" },
+ ["ť"]={ "t","̌" },
+ ["Ũ"]={ "U","̃" },
+ ["ũ"]={ "u","̃" },
+ ["Ū"]={ "U","̄" },
+ ["Å«"]={ "u","Ì„" },
+ ["Ŭ"]={ "U","̆" },
+ ["ŭ"]={ "u","̆" },
+ ["Å®"]={ "U","ÌŠ" },
+ ["ů"]={ "u","̊" },
+ ["Å°"]={ "U","Ì‹" },
+ ["ű"]={ "u","̋" },
+ ["Ų"]={ "U","̨" },
+ ["ų"]={ "u","̨" },
+ ["Å´"]={ "W","Ì‚" },
+ ["ŵ"]={ "w","̂" },
+ ["Ŷ"]={ "Y","̂" },
+ ["Å·"]={ "y","Ì‚" },
+ ["Ÿ"]={ "Y","̈" },
+ ["Ź"]={ "Z","Ì" },
+ ["ź"]={ "z","Ì" },
+ ["Ż"]={ "Z","̇" },
+ ["ż"]={ "z","̇" },
+ ["Ž"]={ "Z","̌" },
+ ["ž"]={ "z","̌" },
+ ["Æ "]={ "O","Ì›" },
+ ["Æ¡"]={ "o","Ì›" },
+ ["Ư"]={ "U","̛" },
+ ["Æ°"]={ "u","Ì›" },
+ ["Ç"]={ "A","ÌŒ" },
+ ["ǎ"]={ "a","̌" },
+ ["Ç"]={ "I","ÌŒ" },
+ ["Ç"]={ "i","ÌŒ" },
+ ["Ǒ"]={ "O","̌" },
+ ["ǒ"]={ "o","̌" },
+ ["Ǔ"]={ "U","̌" },
+ ["ǔ"]={ "u","̌" },
+ ["Ǖ"]={ "Ü","̄" },
+ ["ǖ"]={ "ü","̄" },
+ ["Ç—"]={ "Ãœ","Ì" },
+ ["ǘ"]={ "ü","Ì" },
+ ["Ǚ"]={ "Ü","̌" },
+ ["ǚ"]={ "ü","̌" },
+ ["Ǜ"]={ "Ü","̀" },
+ ["ǜ"]={ "ü","̀" },
+ ["Ǟ"]={ "Ä","̄" },
+ ["ǟ"]={ "ä","̄" },
+ ["Ǡ"]={ "Ȧ","̄" },
+ ["ǡ"]={ "ȧ","̄" },
+ ["Ǣ"]={ "Æ","̄" },
+ ["ǣ"]={ "æ","̄" },
+ ["Ǧ"]={ "G","̌" },
+ ["ǧ"]={ "g","̌" },
+ ["Ǩ"]={ "K","̌" },
+ ["ǩ"]={ "k","̌" },
+ ["Ǫ"]={ "O","̨" },
+ ["ǫ"]={ "o","̨" },
+ ["Ǭ"]={ "Ǫ","̄" },
+ ["Ç­"]={ "Ç«","Ì„" },
+ ["Ǯ"]={ "Ʒ","̌" },
+ ["ǯ"]={ "ʒ","̌" },
+ ["ǰ"]={ "j","̌" },
+ ["Ç´"]={ "G","Ì" },
+ ["ǵ"]={ "g","Ì" },
+ ["Ǹ"]={ "N","̀" },
+ ["ǹ"]={ "n","̀" },
+ ["Ǻ"]={ "Ã…","Ì" },
+ ["Ç»"]={ "Ã¥","Ì" },
+ ["Ǽ"]={ "Æ","Ì" },
+ ["ǽ"]={ "æ","Ì" },
+ ["Ǿ"]={ "Ø","Ì" },
+ ["Ç¿"]={ "ø","Ì" },
+ ["È€"]={ "A","Ì" },
+ ["È"]={ "a","Ì" },
+ ["È‚"]={ "A","Ì‘" },
+ ["ȃ"]={ "a","̑" },
+ ["È„"]={ "E","Ì" },
+ ["È…"]={ "e","Ì" },
+ ["Ȇ"]={ "E","̑" },
+ ["ȇ"]={ "e","̑" },
+ ["Ȉ"]={ "I","Ì" },
+ ["ȉ"]={ "i","Ì" },
+ ["ÈŠ"]={ "I","Ì‘" },
+ ["È‹"]={ "i","Ì‘" },
+ ["ÈŒ"]={ "O","Ì" },
+ ["È"]={ "o","Ì" },
+ ["ÈŽ"]={ "O","Ì‘" },
+ ["È"]={ "o","Ì‘" },
+ ["È"]={ "R","Ì" },
+ ["È‘"]={ "r","Ì" },
+ ["È’"]={ "R","Ì‘" },
+ ["È“"]={ "r","Ì‘" },
+ ["È”"]={ "U","Ì" },
+ ["È•"]={ "u","Ì" },
+ ["È–"]={ "U","Ì‘" },
+ ["È—"]={ "u","Ì‘" },
+ ["Ș"]={ "S","̦" },
+ ["ș"]={ "s","̦" },
+ ["Ț"]={ "T","̦" },
+ ["ț"]={ "t","̦" },
+ ["Ȟ"]={ "H","̌" },
+ ["ȟ"]={ "h","̌" },
+ ["Ȧ"]={ "A","̇" },
+ ["ȧ"]={ "a","̇" },
+ ["Ȩ"]={ "E","̧" },
+ ["ȩ"]={ "e","̧" },
+ ["Ȫ"]={ "Ö","̄" },
+ ["ȫ"]={ "ö","̄" },
+ ["Ȭ"]={ "Õ","̄" },
+ ["ȭ"]={ "õ","̄" },
+ ["Ȯ"]={ "O","̇" },
+ ["ȯ"]={ "o","̇" },
+ ["È°"]={ "È®","Ì„" },
+ ["ȱ"]={ "ȯ","̄" },
+ ["Ȳ"]={ "Y","̄" },
+ ["ȳ"]={ "y","̄" },
+ ["Í„"]={ "̈","Ì" },
+ ["Î…"]={ "¨","Ì" },
+ ["Ά"]={ "Α","Ì" },
+ ["Έ"]={ "Ε","Ì" },
+ ["Ή"]={ "Η","Ì" },
+ ["Ί"]={ "Ι","Ì" },
+ ["ÎŒ"]={ "Ο","Ì" },
+ ["ÎŽ"]={ "Î¥","Ì" },
+ ["Î"]={ "Ω","Ì" },
+ ["Î"]={ "ÏŠ","Ì" },
+ ["Ϊ"]={ "Ι","̈" },
+ ["Ϋ"]={ "Υ","̈" },
+ ["ά"]={ "α","Ì" },
+ ["έ"]={ "ε","Ì" },
+ ["ή"]={ "η","Ì" },
+ ["ί"]={ "ι","Ì" },
+ ["ΰ"]={ "Ï‹","Ì" },
+ ["ϊ"]={ "ι","̈" },
+ ["ϋ"]={ "υ","̈" },
+ ["ÏŒ"]={ "ο","Ì" },
+ ["Ï"]={ "Ï…","Ì" },
+ ["ÏŽ"]={ "ω","Ì" },
+ ["Ï“"]={ "Ï’","Ì" },
+ ["ϔ"]={ "ϒ","̈" },
+ ["Ѐ"]={ "Е","̀" },
+ ["Ð"]={ "Е","̈" },
+ ["Ѓ"]={ "Г","Ì" },
+ ["Ї"]={ "І","̈" },
+ ["ÐŒ"]={ "К","Ì" },
+ ["Ð"]={ "И","Ì€" },
+ ["Ў"]={ "У","̆" },
+ ["Й"]={ "И","̆" },
+ ["й"]={ "и","̆" },
+ ["Ñ"]={ "е","Ì€" },
+ ["ё"]={ "е","̈" },
+ ["Ñ“"]={ "г","Ì" },
+ ["ї"]={ "і","̈" },
+ ["Ñœ"]={ "к","Ì" },
+ ["Ñ"]={ "и","Ì€" },
+ ["ў"]={ "у","̆" },
+ ["Ѷ"]={ "Ñ´","Ì" },
+ ["Ñ·"]={ "ѵ","Ì" },
+ ["Ó"]={ "Ж","̆" },
+ ["ӂ"]={ "ж","̆" },
+ ["Ó"]={ "Ð","̆" },
+ ["ӑ"]={ "а","̆" },
+ ["Ó’"]={ "Ð","̈" },
+ ["ӓ"]={ "а","̈" },
+ ["Ӗ"]={ "Е","̆" },
+ ["ӗ"]={ "е","̆" },
+ ["Ӛ"]={ "Ә","̈" },
+ ["ӛ"]={ "ә","̈" },
+ ["Ӝ"]={ "Ж","̈" },
+ ["Ó"]={ "ж","̈" },
+ ["Ӟ"]={ "З","̈" },
+ ["ӟ"]={ "з","̈" },
+ ["Ӣ"]={ "И","̄" },
+ ["ӣ"]={ "и","̄" },
+ ["Ӥ"]={ "И","̈" },
+ ["ӥ"]={ "и","̈" },
+ ["Ӧ"]={ "О","̈" },
+ ["ӧ"]={ "о","̈" },
+ ["Ӫ"]={ "Ө","̈" },
+ ["ӫ"]={ "ө","̈" },
+ ["Ӭ"]={ "Э","̈" },
+ ["Ó­"]={ "Ñ","̈" },
+ ["Ӯ"]={ "У","̄" },
+ ["ӯ"]={ "у","̄" },
+ ["Ӱ"]={ "У","̈" },
+ ["ӱ"]={ "у","̈" },
+ ["Ӳ"]={ "У","̋" },
+ ["ӳ"]={ "у","̋" },
+ ["Ӵ"]={ "Ч","̈" },
+ ["ӵ"]={ "ч","̈" },
+ ["Ӹ"]={ "Ы","̈" },
+ ["ӹ"]={ "ы","̈" },
+ ["آ"]={ "ا","ٓ" },
+ ["أ"]={ "ا","ٔ" },
+ ["ؤ"]={ "و","ٔ" },
+ ["إ"]={ "ا","ٕ" },
+ ["ئ"]={ "ي","ٔ" },
+ ["Û€"]={ "Û•","Ù”" },
+ ["Û‚"]={ "Û","Ù”" },
+ ["Û“"]={ "Û’","Ù”" },
+ ["ऩ"]={ "न","़" },
+ ["ऱ"]={ "र","़" },
+ ["ऴ"]={ "ळ","़" },
+ ["क़"]={ "क","़" },
+ ["ख़"]={ "ख","़" },
+ ["ग़"]={ "ग","़" },
+ ["ज़"]={ "ज","़" },
+ ["ड़"]={ "ड","़" },
+ ["à¥"]={ "ढ","़" },
+ ["फ़"]={ "फ","़" },
+ ["य़"]={ "य","़" },
+ ["ো"]={ "ে","া" },
+ ["ৌ"]={ "ে","ৗ" },
+ ["ড়"]={ "ড","়" },
+ ["à§"]={ "ঢ","়" },
+ ["য়"]={ "য","়" },
+ ["ਲ਼"]={ "ਲ","਼" },
+ ["ਸ਼"]={ "ਸ","਼" },
+ ["ਖ਼"]={ "ਖ","਼" },
+ ["ਗ਼"]={ "ਗ","਼" },
+ ["ਜ਼"]={ "ਜ","਼" },
+ ["ਫ਼"]={ "ਫ","਼" },
+ ["à­ˆ"]={ "à­‡","à­–" },
+ ["ୋ"]={ "େ","ା" },
+ ["ୌ"]={ "େ","ୗ" },
+ ["ଡ଼"]={ "ଡ","଼" },
+ ["à­"]={ "ଢ","଼" },
+ ["ஔ"]={ "ஒ","ௗ" },
+ ["ொ"]={ "ெ","ா" },
+ ["ோ"]={ "ே","ா" },
+ ["ௌ"]={ "ெ","ௗ" },
+ ["ై"]={ "ె","ౖ" },
+ ["ೀ"]={ "ಿ","ೕ" },
+ ["ೇ"]={ "ೆ","ೕ" },
+ ["ೈ"]={ "ೆ","ೖ" },
+ ["ೊ"]={ "ೆ","ೂ" },
+ ["ೋ"]={ "ೊ","ೕ" },
+ ["ൊ"]={ "െ","ാ" },
+ ["ോ"]={ "േ","ാ" },
+ ["ൌ"]={ "െ","ൗ" },
+ ["à·š"]={ "à·™","à·Š" },
+ ["à·œ"]={ "à·™","à·" },
+ ["à·"]={ "à·œ","à·Š" },
+ ["à·ž"]={ "à·™","à·Ÿ" },
+ ["གྷ"]={ "ག","ྷ" },
+ ["à½"]={ "ཌ","ྷ" },
+ ["དྷ"]={ "ད","ྷ" },
+ ["བྷ"]={ "བ","ྷ" },
+ ["ཛྷ"]={ "ཛ","ྷ" },
+ ["ཀྵ"]={ "ཀ","ྵ" },
+ ["ཱི"]={ "ཱ","ི" },
+ ["ཱུ"]={ "ཱ","ུ" },
+ ["ྲྀ"]={ "ྲ","ྀ" },
+ ["ླྀ"]={ "ླ","ྀ" },
+ ["à¾"]={ "ཱ","ྀ" },
+ ["ྒྷ"]={ "ྒ","ྷ" },
+ ["à¾"]={ "ྜ","ྷ" },
+ ["ྡྷ"]={ "ྡ","ྷ" },
+ ["ྦྷ"]={ "ྦ","ྷ" },
+ ["ྫྷ"]={ "ྫ","ྷ" },
+ ["ྐྵ"]={ "à¾","ྵ" },
+ ["ဦ"]={ "ဥ","ီ" },
+ ["ᬆ"]={ "ᬅ","ᬵ" },
+ ["ᬈ"]={ "ᬇ","ᬵ" },
+ ["ᬊ"]={ "ᬉ","ᬵ" },
+ ["ᬌ"]={ "ᬋ","ᬵ" },
+ ["ᬎ"]={ "á¬","ᬵ" },
+ ["ᬒ"]={ "ᬑ","ᬵ" },
+ ["ᬻ"]={ "ᬺ","ᬵ" },
+ ["ᬽ"]={ "ᬼ","ᬵ" },
+ ["ᭀ"]={ "ᬾ","ᬵ" },
+ ["á­"]={ "ᬿ","ᬵ" },
+ ["ᭃ"]={ "ᭂ","ᬵ" },
+ ["Ḁ"]={ "A","̥" },
+ ["á¸"]={ "a","Ì¥" },
+ ["Ḃ"]={ "B","̇" },
+ ["ḃ"]={ "b","̇" },
+ ["Ḅ"]={ "B","̣" },
+ ["ḅ"]={ "b","̣" },
+ ["Ḇ"]={ "B","̱" },
+ ["ḇ"]={ "b","̱" },
+ ["Ḉ"]={ "Ç","Ì" },
+ ["ḉ"]={ "ç","Ì" },
+ ["Ḋ"]={ "D","̇" },
+ ["ḋ"]={ "d","̇" },
+ ["Ḍ"]={ "D","̣" },
+ ["á¸"]={ "d","Ì£" },
+ ["Ḏ"]={ "D","̱" },
+ ["á¸"]={ "d","̱" },
+ ["á¸"]={ "D","̧" },
+ ["ḑ"]={ "d","̧" },
+ ["Ḓ"]={ "D","̭" },
+ ["ḓ"]={ "d","̭" },
+ ["Ḕ"]={ "Ē","̀" },
+ ["ḕ"]={ "ē","̀" },
+ ["Ḗ"]={ "Ä’","Ì" },
+ ["ḗ"]={ "Ä“","Ì" },
+ ["Ḙ"]={ "E","̭" },
+ ["ḙ"]={ "e","̭" },
+ ["Ḛ"]={ "E","̰" },
+ ["ḛ"]={ "e","̰" },
+ ["Ḝ"]={ "Ȩ","̆" },
+ ["á¸"]={ "È©","̆" },
+ ["Ḟ"]={ "F","̇" },
+ ["ḟ"]={ "f","̇" },
+ ["Ḡ"]={ "G","̄" },
+ ["ḡ"]={ "g","̄" },
+ ["Ḣ"]={ "H","̇" },
+ ["ḣ"]={ "h","̇" },
+ ["Ḥ"]={ "H","̣" },
+ ["ḥ"]={ "h","̣" },
+ ["Ḧ"]={ "H","̈" },
+ ["ḧ"]={ "h","̈" },
+ ["Ḩ"]={ "H","̧" },
+ ["ḩ"]={ "h","̧" },
+ ["Ḫ"]={ "H","̮" },
+ ["ḫ"]={ "h","̮" },
+ ["Ḭ"]={ "I","̰" },
+ ["ḭ"]={ "i","̰" },
+ ["Ḯ"]={ "Ã","Ì" },
+ ["ḯ"]={ "ï","Ì" },
+ ["Ḱ"]={ "K","Ì" },
+ ["ḱ"]={ "k","Ì" },
+ ["Ḳ"]={ "K","̣" },
+ ["ḳ"]={ "k","̣" },
+ ["Ḵ"]={ "K","̱" },
+ ["ḵ"]={ "k","̱" },
+ ["Ḷ"]={ "L","̣" },
+ ["ḷ"]={ "l","̣" },
+ ["Ḹ"]={ "Ḷ","̄" },
+ ["ḹ"]={ "ḷ","̄" },
+ ["Ḻ"]={ "L","̱" },
+ ["ḻ"]={ "l","̱" },
+ ["Ḽ"]={ "L","̭" },
+ ["ḽ"]={ "l","̭" },
+ ["Ḿ"]={ "M","Ì" },
+ ["ḿ"]={ "m","Ì" },
+ ["Ṁ"]={ "M","̇" },
+ ["á¹"]={ "m","̇" },
+ ["Ṃ"]={ "M","̣" },
+ ["ṃ"]={ "m","̣" },
+ ["Ṅ"]={ "N","̇" },
+ ["ṅ"]={ "n","̇" },
+ ["Ṇ"]={ "N","̣" },
+ ["ṇ"]={ "n","̣" },
+ ["Ṉ"]={ "N","̱" },
+ ["ṉ"]={ "n","̱" },
+ ["Ṋ"]={ "N","̭" },
+ ["ṋ"]={ "n","̭" },
+ ["Ṍ"]={ "Õ","Ì" },
+ ["á¹"]={ "õ","Ì" },
+ ["Ṏ"]={ "Õ","̈" },
+ ["á¹"]={ "õ","̈" },
+ ["á¹"]={ "ÅŒ","Ì€" },
+ ["ṑ"]={ "Å","Ì€" },
+ ["á¹’"]={ "ÅŒ","Ì" },
+ ["ṓ"]={ "Å","Ì" },
+ ["á¹”"]={ "P","Ì" },
+ ["ṕ"]={ "p","Ì" },
+ ["Ṗ"]={ "P","̇" },
+ ["ṗ"]={ "p","̇" },
+ ["Ṙ"]={ "R","̇" },
+ ["ṙ"]={ "r","̇" },
+ ["Ṛ"]={ "R","̣" },
+ ["á¹›"]={ "r","Ì£" },
+ ["Ṝ"]={ "Ṛ","̄" },
+ ["á¹"]={ "á¹›","Ì„" },
+ ["Ṟ"]={ "R","̱" },
+ ["ṟ"]={ "r","̱" },
+ ["Ṡ"]={ "S","̇" },
+ ["ṡ"]={ "s","̇" },
+ ["á¹¢"]={ "S","Ì£" },
+ ["á¹£"]={ "s","Ì£" },
+ ["Ṥ"]={ "Ś","̇" },
+ ["ṥ"]={ "ś","̇" },
+ ["Ṧ"]={ "Š","̇" },
+ ["ṧ"]={ "š","̇" },
+ ["Ṩ"]={ "Ṣ","̇" },
+ ["ṩ"]={ "ṣ","̇" },
+ ["Ṫ"]={ "T","̇" },
+ ["ṫ"]={ "t","̇" },
+ ["Ṭ"]={ "T","̣" },
+ ["á¹­"]={ "t","Ì£" },
+ ["Ṯ"]={ "T","̱" },
+ ["ṯ"]={ "t","̱" },
+ ["á¹°"]={ "T","Ì­" },
+ ["á¹±"]={ "t","Ì­" },
+ ["Ṳ"]={ "U","̤" },
+ ["ṳ"]={ "u","̤" },
+ ["á¹´"]={ "U","Ì°" },
+ ["á¹µ"]={ "u","Ì°" },
+ ["Ṷ"]={ "U","̭" },
+ ["á¹·"]={ "u","Ì­" },
+ ["Ṹ"]={ "Ũ","Ì" },
+ ["á¹¹"]={ "Å©","Ì" },
+ ["Ṻ"]={ "Ū","̈" },
+ ["ṻ"]={ "ū","̈" },
+ ["Ṽ"]={ "V","̃" },
+ ["ṽ"]={ "v","̃" },
+ ["á¹¾"]={ "V","Ì£" },
+ ["ṿ"]={ "v","̣" },
+ ["Ẁ"]={ "W","̀" },
+ ["áº"]={ "w","Ì€" },
+ ["Ẃ"]={ "W","Ì" },
+ ["ẃ"]={ "w","Ì" },
+ ["Ẅ"]={ "W","̈" },
+ ["ẅ"]={ "w","̈" },
+ ["Ẇ"]={ "W","̇" },
+ ["ẇ"]={ "w","̇" },
+ ["Ẉ"]={ "W","̣" },
+ ["ẉ"]={ "w","̣" },
+ ["Ẋ"]={ "X","̇" },
+ ["ẋ"]={ "x","̇" },
+ ["Ẍ"]={ "X","̈" },
+ ["áº"]={ "x","̈" },
+ ["Ẏ"]={ "Y","̇" },
+ ["áº"]={ "y","̇" },
+ ["áº"]={ "Z","Ì‚" },
+ ["ẑ"]={ "z","̂" },
+ ["Ẓ"]={ "Z","̣" },
+ ["ẓ"]={ "z","̣" },
+ ["Ẕ"]={ "Z","̱" },
+ ["ẕ"]={ "z","̱" },
+ ["ẖ"]={ "h","̱" },
+ ["ẗ"]={ "t","̈" },
+ ["ẘ"]={ "w","̊" },
+ ["ẙ"]={ "y","̊" },
+ ["ẛ"]={ "ſ","̇" },
+ ["Ạ"]={ "A","̣" },
+ ["ạ"]={ "a","̣" },
+ ["Ả"]={ "A","̉" },
+ ["ả"]={ "a","̉" },
+ ["Ấ"]={ "Â","Ì" },
+ ["ấ"]={ "â","Ì" },
+ ["Ầ"]={ "Â","̀" },
+ ["ầ"]={ "â","̀" },
+ ["Ẩ"]={ "Â","̉" },
+ ["ẩ"]={ "â","̉" },
+ ["Ẫ"]={ "Â","̃" },
+ ["ẫ"]={ "â","̃" },
+ ["Ậ"]={ "Ạ","̂" },
+ ["ậ"]={ "ạ","̂" },
+ ["Ắ"]={ "Ä‚","Ì" },
+ ["ắ"]={ "ă","Ì" },
+ ["Ằ"]={ "Ă","̀" },
+ ["ằ"]={ "ă","̀" },
+ ["Ẳ"]={ "Ă","̉" },
+ ["ẳ"]={ "ă","̉" },
+ ["Ẵ"]={ "Ă","̃" },
+ ["ẵ"]={ "ă","̃" },
+ ["Ặ"]={ "Ạ","̆" },
+ ["ặ"]={ "ạ","̆" },
+ ["Ẹ"]={ "E","̣" },
+ ["ẹ"]={ "e","̣" },
+ ["Ẻ"]={ "E","̉" },
+ ["ẻ"]={ "e","̉" },
+ ["Ẽ"]={ "E","̃" },
+ ["ẽ"]={ "e","̃" },
+ ["Ế"]={ "Ê","Ì" },
+ ["ế"]={ "ê","Ì" },
+ ["Ề"]={ "Ê","̀" },
+ ["á»"]={ "ê","Ì€" },
+ ["Ể"]={ "Ê","̉" },
+ ["ể"]={ "ê","̉" },
+ ["Ễ"]={ "Ê","̃" },
+ ["ễ"]={ "ê","̃" },
+ ["Ệ"]={ "Ẹ","̂" },
+ ["ệ"]={ "ẹ","̂" },
+ ["Ỉ"]={ "I","̉" },
+ ["ỉ"]={ "i","̉" },
+ ["Ị"]={ "I","̣" },
+ ["ị"]={ "i","̣" },
+ ["Ọ"]={ "O","̣" },
+ ["á»"]={ "o","Ì£" },
+ ["Ỏ"]={ "O","̉" },
+ ["á»"]={ "o","̉" },
+ ["á»"]={ "Ô","Ì" },
+ ["ố"]={ "ô","Ì" },
+ ["Ồ"]={ "Ô","̀" },
+ ["ồ"]={ "ô","̀" },
+ ["Ổ"]={ "Ô","̉" },
+ ["ổ"]={ "ô","̉" },
+ ["Ỗ"]={ "Ô","̃" },
+ ["ỗ"]={ "ô","̃" },
+ ["Ộ"]={ "Ọ","̂" },
+ ["á»™"]={ "á»","Ì‚" },
+ ["Ớ"]={ "Æ ","Ì" },
+ ["á»›"]={ "Æ¡","Ì" },
+ ["Ờ"]={ "Ơ","̀" },
+ ["á»"]={ "Æ¡","Ì€" },
+ ["Ở"]={ "Ơ","̉" },
+ ["ở"]={ "ơ","̉" },
+ ["Ỡ"]={ "Ơ","̃" },
+ ["ỡ"]={ "ơ","̃" },
+ ["Ợ"]={ "Ơ","̣" },
+ ["ợ"]={ "ơ","̣" },
+ ["Ụ"]={ "U","̣" },
+ ["ụ"]={ "u","̣" },
+ ["Ủ"]={ "U","̉" },
+ ["ủ"]={ "u","̉" },
+ ["Ứ"]={ "Ư","Ì" },
+ ["ứ"]={ "Æ°","Ì" },
+ ["Ừ"]={ "Ư","̀" },
+ ["ừ"]={ "ư","̀" },
+ ["Ử"]={ "Ư","̉" },
+ ["ử"]={ "ư","̉" },
+ ["Ữ"]={ "Ư","̃" },
+ ["ữ"]={ "ư","̃" },
+ ["Ự"]={ "Ư","̣" },
+ ["á»±"]={ "Æ°","Ì£" },
+ ["Ỳ"]={ "Y","̀" },
+ ["ỳ"]={ "y","̀" },
+ ["á»´"]={ "Y","Ì£" },
+ ["ỵ"]={ "y","̣" },
+ ["Ỷ"]={ "Y","̉" },
+ ["ỷ"]={ "y","̉" },
+ ["Ỹ"]={ "Y","̃" },
+ ["ỹ"]={ "y","̃" },
+ ["ἀ"]={ "α","̓" },
+ ["á¼"]={ "α","Ì”" },
+ ["ἂ"]={ "ἀ","̀" },
+ ["ἃ"]={ "á¼","Ì€" },
+ ["ἄ"]={ "á¼€","Ì" },
+ ["á¼…"]={ "á¼","Ì" },
+ ["ἆ"]={ "ἀ","͂" },
+ ["ἇ"]={ "á¼","Í‚" },
+ ["Ἀ"]={ "Α","̓" },
+ ["Ἁ"]={ "Α","̔" },
+ ["Ἂ"]={ "Ἀ","̀" },
+ ["Ἃ"]={ "Ἁ","̀" },
+ ["Ἄ"]={ "Ἀ","Ì" },
+ ["á¼"]={ "Ἁ","Ì" },
+ ["Ἆ"]={ "Ἀ","͂" },
+ ["á¼"]={ "Ἁ","Í‚" },
+ ["á¼"]={ "ε","Ì“" },
+ ["ἑ"]={ "ε","̔" },
+ ["á¼’"]={ "á¼","Ì€" },
+ ["ἓ"]={ "ἑ","̀" },
+ ["á¼”"]={ "á¼","Ì" },
+ ["ἕ"]={ "ἑ","Ì" },
+ ["Ἐ"]={ "Ε","̓" },
+ ["Ἑ"]={ "Ε","̔" },
+ ["Ἒ"]={ "Ἐ","̀" },
+ ["á¼›"]={ "á¼™","Ì€" },
+ ["Ἔ"]={ "Ἐ","Ì" },
+ ["á¼"]={ "á¼™","Ì" },
+ ["ἠ"]={ "η","̓" },
+ ["ἡ"]={ "η","̔" },
+ ["á¼¢"]={ "á¼ ","Ì€" },
+ ["ἣ"]={ "ἡ","̀" },
+ ["ἤ"]={ "á¼ ","Ì" },
+ ["á¼¥"]={ "ἡ","Ì" },
+ ["ἦ"]={ "ἠ","͂" },
+ ["ἧ"]={ "ἡ","͂" },
+ ["Ἠ"]={ "Η","̓" },
+ ["Ἡ"]={ "Η","̔" },
+ ["Ἢ"]={ "Ἠ","̀" },
+ ["Ἣ"]={ "Ἡ","̀" },
+ ["Ἤ"]={ "Ἠ","Ì" },
+ ["á¼­"]={ "Ἡ","Ì" },
+ ["Ἦ"]={ "Ἠ","͂" },
+ ["Ἧ"]={ "Ἡ","͂" },
+ ["ἰ"]={ "ι","̓" },
+ ["ἱ"]={ "ι","̔" },
+ ["á¼²"]={ "á¼°","Ì€" },
+ ["á¼³"]={ "á¼±","Ì€" },
+ ["á¼´"]={ "á¼°","Ì" },
+ ["á¼µ"]={ "á¼±","Ì" },
+ ["ἶ"]={ "ἰ","͂" },
+ ["á¼·"]={ "á¼±","Í‚" },
+ ["Ἰ"]={ "Ι","̓" },
+ ["Ἱ"]={ "Ι","̔" },
+ ["Ἲ"]={ "Ἰ","̀" },
+ ["á¼»"]={ "á¼¹","Ì€" },
+ ["á¼¼"]={ "Ἰ","Ì" },
+ ["á¼½"]={ "á¼¹","Ì" },
+ ["Ἶ"]={ "Ἰ","͂" },
+ ["Ἷ"]={ "Ἱ","͂" },
+ ["ὀ"]={ "ο","̓" },
+ ["á½"]={ "ο","Ì”" },
+ ["ὂ"]={ "ὀ","̀" },
+ ["ὃ"]={ "á½","Ì€" },
+ ["ὄ"]={ "á½€","Ì" },
+ ["á½…"]={ "á½","Ì" },
+ ["Ὀ"]={ "Ο","̓" },
+ ["Ὁ"]={ "Ο","̔" },
+ ["Ὂ"]={ "Ὀ","̀" },
+ ["Ὃ"]={ "Ὁ","̀" },
+ ["Ὄ"]={ "Ὀ","Ì" },
+ ["á½"]={ "Ὁ","Ì" },
+ ["á½"]={ "Ï…","Ì“" },
+ ["ὑ"]={ "υ","̔" },
+ ["á½’"]={ "á½","Ì€" },
+ ["ὓ"]={ "ὑ","̀" },
+ ["á½”"]={ "á½","Ì" },
+ ["ὕ"]={ "ὑ","Ì" },
+ ["á½–"]={ "á½","Í‚" },
+ ["ὗ"]={ "ὑ","͂" },
+ ["á½™"]={ "Î¥","Ì”" },
+ ["á½›"]={ "á½™","Ì€" },
+ ["á½"]={ "á½™","Ì" },
+ ["Ὗ"]={ "Ὑ","͂" },
+ ["ὠ"]={ "ω","̓" },
+ ["ὡ"]={ "ω","̔" },
+ ["á½¢"]={ "á½ ","Ì€" },
+ ["ὣ"]={ "ὡ","̀" },
+ ["ὤ"]={ "á½ ","Ì" },
+ ["á½¥"]={ "ὡ","Ì" },
+ ["ὦ"]={ "ὠ","͂" },
+ ["ὧ"]={ "ὡ","͂" },
+ ["Ὠ"]={ "Ω","̓" },
+ ["Ὡ"]={ "Ω","̔" },
+ ["Ὢ"]={ "Ὠ","̀" },
+ ["Ὣ"]={ "Ὡ","̀" },
+ ["Ὤ"]={ "Ὠ","Ì" },
+ ["á½­"]={ "Ὡ","Ì" },
+ ["Ὦ"]={ "Ὠ","͂" },
+ ["Ὧ"]={ "Ὡ","͂" },
+ ["ὰ"]={ "α","̀" },
+ ["ὲ"]={ "ε","̀" },
+ ["ὴ"]={ "η","̀" },
+ ["ὶ"]={ "ι","̀" },
+ ["ὸ"]={ "ο","̀" },
+ ["ὺ"]={ "υ","̀" },
+ ["ὼ"]={ "ω","̀" },
+ ["á¾€"]={ "á¼€","Í…" },
+ ["á¾"]={ "á¼","Í…" },
+ ["ᾂ"]={ "ἂ","ͅ" },
+ ["ᾃ"]={ "ἃ","ͅ" },
+ ["ᾄ"]={ "ἄ","ͅ" },
+ ["á¾…"]={ "á¼…","Í…" },
+ ["ᾆ"]={ "ἆ","ͅ" },
+ ["ᾇ"]={ "ἇ","ͅ" },
+ ["ᾈ"]={ "Ἀ","ͅ" },
+ ["ᾉ"]={ "Ἁ","ͅ" },
+ ["ᾊ"]={ "Ἂ","ͅ" },
+ ["ᾋ"]={ "Ἃ","ͅ" },
+ ["ᾌ"]={ "Ἄ","ͅ" },
+ ["á¾"]={ "á¼","Í…" },
+ ["ᾎ"]={ "Ἆ","ͅ" },
+ ["á¾"]={ "á¼","Í…" },
+ ["á¾"]={ "á¼ ","Í…" },
+ ["ᾑ"]={ "ἡ","ͅ" },
+ ["á¾’"]={ "á¼¢","Í…" },
+ ["ᾓ"]={ "ἣ","ͅ" },
+ ["ᾔ"]={ "ἤ","ͅ" },
+ ["ᾕ"]={ "ἥ","ͅ" },
+ ["ᾖ"]={ "ἦ","ͅ" },
+ ["ᾗ"]={ "ἧ","ͅ" },
+ ["ᾘ"]={ "Ἠ","ͅ" },
+ ["ᾙ"]={ "Ἡ","ͅ" },
+ ["ᾚ"]={ "Ἢ","ͅ" },
+ ["ᾛ"]={ "Ἣ","ͅ" },
+ ["ᾜ"]={ "Ἤ","ͅ" },
+ ["á¾"]={ "á¼­","Í…" },
+ ["ᾞ"]={ "Ἦ","ͅ" },
+ ["ᾟ"]={ "Ἧ","ͅ" },
+ ["á¾ "]={ "á½ ","Í…" },
+ ["ᾡ"]={ "ὡ","ͅ" },
+ ["á¾¢"]={ "á½¢","Í…" },
+ ["á¾£"]={ "á½£","Í…" },
+ ["ᾤ"]={ "ὤ","ͅ" },
+ ["á¾¥"]={ "á½¥","Í…" },
+ ["ᾦ"]={ "ὦ","ͅ" },
+ ["ᾧ"]={ "ὧ","ͅ" },
+ ["ᾨ"]={ "Ὠ","ͅ" },
+ ["ᾩ"]={ "Ὡ","ͅ" },
+ ["ᾪ"]={ "Ὢ","ͅ" },
+ ["ᾫ"]={ "Ὣ","ͅ" },
+ ["ᾬ"]={ "Ὤ","ͅ" },
+ ["á¾­"]={ "á½­","Í…" },
+ ["á¾®"]={ "á½®","Í…" },
+ ["ᾯ"]={ "Ὧ","ͅ" },
+ ["ᾰ"]={ "α","̆" },
+ ["ᾱ"]={ "α","̄" },
+ ["á¾²"]={ "á½°","Í…" },
+ ["ᾳ"]={ "α","ͅ" },
+ ["ᾴ"]={ "ά","ͅ" },
+ ["ᾶ"]={ "α","͂" },
+ ["ᾷ"]={ "ᾶ","ͅ" },
+ ["Ᾰ"]={ "Α","̆" },
+ ["Ᾱ"]={ "Α","̄" },
+ ["Ὰ"]={ "Α","̀" },
+ ["ᾼ"]={ "Α","ͅ" },
+ ["á¿"]={ "¨","Í‚" },
+ ["á¿‚"]={ "á½´","Í…" },
+ ["ῃ"]={ "η","ͅ" },
+ ["ῄ"]={ "ή","ͅ" },
+ ["ῆ"]={ "η","͂" },
+ ["ῇ"]={ "ῆ","ͅ" },
+ ["Ὲ"]={ "Ε","̀" },
+ ["Ὴ"]={ "Η","̀" },
+ ["ῌ"]={ "Η","ͅ" },
+ ["á¿"]={ "᾿","Ì€" },
+ ["á¿Ž"]={ "᾿","Ì" },
+ ["á¿"]={ "᾿","Í‚" },
+ ["á¿"]={ "ι","̆" },
+ ["ῑ"]={ "ι","̄" },
+ ["á¿’"]={ "ÏŠ","Ì€" },
+ ["ῖ"]={ "ι","͂" },
+ ["á¿—"]={ "ÏŠ","Í‚" },
+ ["Ῐ"]={ "Ι","̆" },
+ ["Ῑ"]={ "Ι","̄" },
+ ["Ὶ"]={ "Ι","̀" },
+ ["á¿"]={ "῾","Ì€" },
+ ["á¿ž"]={ "῾","Ì" },
+ ["῟"]={ "῾","͂" },
+ ["ῠ"]={ "υ","̆" },
+ ["á¿¡"]={ "Ï…","Ì„" },
+ ["á¿¢"]={ "Ï‹","Ì€" },
+ ["ῤ"]={ "Ï","Ì“" },
+ ["á¿¥"]={ "Ï","Ì”" },
+ ["ῦ"]={ "υ","͂" },
+ ["ῧ"]={ "ϋ","͂" },
+ ["Ῠ"]={ "Υ","̆" },
+ ["á¿©"]={ "Î¥","Ì„" },
+ ["Ὺ"]={ "Υ","̀" },
+ ["Ῥ"]={ "Ρ","̔" },
+ ["῭"]={ "¨","̀" },
+ ["ῲ"]={ "ὼ","ͅ" },
+ ["ῳ"]={ "ω","ͅ" },
+ ["á¿´"]={ "ÏŽ","Í…" },
+ ["ῶ"]={ "ω","͂" },
+ ["ῷ"]={ "ῶ","ͅ" },
+ ["Ὸ"]={ "Ο","̀" },
+ ["Ὼ"]={ "Ω","̀" },
+ ["ῼ"]={ "Ω","ͅ" },
+ ["↚"]={ "â†","̸" },
+ ["↛"]={ "→","̸" },
+ ["↮"]={ "↔","̸" },
+ ["â‡"]={ "â‡","̸" },
+ ["⇎"]={ "⇔","̸" },
+ ["â‡"]={ "⇒","̸" },
+ ["∄"]={ "∃","̸" },
+ ["∉"]={ "∈","̸" },
+ ["∌"]={ "∋","̸" },
+ ["∤"]={ "∣","̸" },
+ ["∦"]={ "∥","̸" },
+ ["â‰"]={ "∼","̸" },
+ ["≄"]={ "≃","̸" },
+ ["≇"]={ "≅","̸" },
+ ["≉"]={ "≈","̸" },
+ ["≠"]={ "=","̸" },
+ ["≢"]={ "≡","̸" },
+ ["≭"]={ "â‰","̸" },
+ ["≮"]={ "<","̸" },
+ ["≯"]={ ">","̸" },
+ ["≰"]={ "≤","̸" },
+ ["≱"]={ "≥","̸" },
+ ["≴"]={ "≲","̸" },
+ ["≵"]={ "≳","̸" },
+ ["≸"]={ "≶","̸" },
+ ["≹"]={ "≷","̸" },
+ ["⊀"]={ "≺","̸" },
+ ["âŠ"]={ "≻","̸" },
+ ["⊄"]={ "⊂","̸" },
+ ["⊅"]={ "⊃","̸" },
+ ["⊈"]={ "⊆","̸" },
+ ["⊉"]={ "⊇","̸" },
+ ["⊬"]={ "⊢","̸" },
+ ["⊭"]={ "⊨","̸" },
+ ["⊮"]={ "⊩","̸" },
+ ["⊯"]={ "⊫","̸" },
+ ["⋠"]={ "≼","̸" },
+ ["⋡"]={ "≽","̸" },
+ ["⋢"]={ "⊑","̸" },
+ ["⋣"]={ "⊒","̸" },
+ ["⋪"]={ "⊲","̸" },
+ ["⋫"]={ "⊳","̸" },
+ ["⋬"]={ "⊴","̸" },
+ ["⋭"]={ "⊵","̸" },
+ ["â«œ"]={ "â«","̸" },
+ ["ãŒ"]={ "ã‹","ã‚™" },
+ ["ãŽ"]={ "ã","ã‚™" },
+ ["ã"]={ "ã","ã‚™" },
+ ["ã’"]={ "ã‘","ã‚™" },
+ ["ã”"]={ "ã“","ã‚™" },
+ ["ã–"]={ "ã•","ã‚™" },
+ ["ã˜"]={ "ã—","ã‚™" },
+ ["ãš"]={ "ã™","ã‚™" },
+ ["ãœ"]={ "ã›","ã‚™" },
+ ["ãž"]={ "ã","ã‚™" },
+ ["ã "]={ "ãŸ","ã‚™" },
+ ["ã¢"]={ "ã¡","ã‚™" },
+ ["ã¥"]={ "ã¤","ã‚™" },
+ ["ã§"]={ "ã¦","ã‚™" },
+ ["ã©"]={ "ã¨","ã‚™" },
+ ["ã°"]={ "ã¯","ã‚™" },
+ ["ã±"]={ "ã¯","ã‚š" },
+ ["ã³"]={ "ã²","ã‚™" },
+ ["ã´"]={ "ã²","ã‚š" },
+ ["ã¶"]={ "ãµ","ã‚™" },
+ ["ã·"]={ "ãµ","ã‚š" },
+ ["ã¹"]={ "ã¸","ã‚™" },
+ ["ãº"]={ "ã¸","ã‚š" },
+ ["ã¼"]={ "ã»","ã‚™" },
+ ["ã½"]={ "ã»","ã‚š" },
+ ["ã‚”"]={ "ã†","ã‚™" },
+ ["ã‚ž"]={ "ã‚","ã‚™" },
+ ["ガ"]={ "カ","゙" },
+ ["ã‚®"]={ "ã‚­","ã‚™" },
+ ["グ"]={ "ク","゙" },
+ ["ゲ"]={ "ケ","゙" },
+ ["ゴ"]={ "コ","゙" },
+ ["ザ"]={ "サ","゙" },
+ ["ジ"]={ "シ","゙" },
+ ["ズ"]={ "ス","゙" },
+ ["ゼ"]={ "セ","゙" },
+ ["ゾ"]={ "ソ","゙" },
+ ["ダ"]={ "タ","゙" },
+ ["ヂ"]={ "ãƒ","ã‚™" },
+ ["ヅ"]={ "ツ","゙" },
+ ["デ"]={ "テ","゙" },
+ ["ド"]={ "ト","゙" },
+ ["ãƒ"]={ "ãƒ","ã‚™" },
+ ["パ"]={ "ãƒ","ã‚š" },
+ ["ビ"]={ "ヒ","゙" },
+ ["ピ"]={ "ヒ","゚" },
+ ["ブ"]={ "フ","゙" },
+ ["プ"]={ "フ","゚" },
+ ["ベ"]={ "ヘ","゙" },
+ ["ペ"]={ "ヘ","゚" },
+ ["ボ"]={ "ホ","゙" },
+ ["ãƒ"]={ "ホ","ã‚š" },
+ ["ヴ"]={ "ウ","゙" },
+ ["ヷ"]={ "ワ","゙" },
+ ["ヸ"]={ "ヰ","゙" },
+ ["ヹ"]={ "ヱ","゙" },
+ ["ヺ"]={ "ヲ","゙" },
+ ["ヾ"]={ "ヽ","゙" },
+ ["ï¬"]={ "×™","Ö´" },
+ ["ײַ"]={ "ײ","ַ" },
+ ["שׁ"]={ "ש","×" },
+ ["שׂ"]={ "ש","ׂ" },
+ ["שּׁ"]={ "ï­‰","×" },
+ ["שּׂ"]={ "שּ","ׂ" },
+ ["אַ"]={ "×","Ö·" },
+ ["אָ"]={ "×","Ö¸" },
+ ["אּ"]={ "×","Ö¼" },
+ ["בּ"]={ "ב","ּ" },
+ ["גּ"]={ "ג","ּ" },
+ ["דּ"]={ "ד","ּ" },
+ ["הּ"]={ "ה","ּ" },
+ ["וּ"]={ "ו","ּ" },
+ ["זּ"]={ "ז","ּ" },
+ ["טּ"]={ "ט","ּ" },
+ ["יּ"]={ "י","ּ" },
+ ["ךּ"]={ "ך","ּ" },
+ ["כּ"]={ "כ","ּ" },
+ ["לּ"]={ "ל","ּ" },
+ ["מּ"]={ "מ","ּ" },
+ ["ï­€"]={ "× ","Ö¼" },
+ ["ï­"]={ "ס","Ö¼" },
+ ["ï­ƒ"]={ "×£","Ö¼" },
+ ["פּ"]={ "פ","ּ" },
+ ["צּ"]={ "צ","ּ" },
+ ["קּ"]={ "ק","ּ" },
+ ["רּ"]={ "ר","ּ" },
+ ["שּ"]={ "ש","ּ" },
+ ["תּ"]={ "ת","ּ" },
+ ["וֹ"]={ "ו","ֹ" },
+ ["בֿ"]={ "ב","ֿ" },
+ ["ï­"]={ "×›","Ö¿" },
+ ["פֿ"]={ "פ","ֿ" },
+ ["𑂚"]={ "𑂙","𑂺" },
+ ["𑂜"]={ "𑂛","𑂺" },
+ ["𑂫"]={ "𑂥","𑂺" },
+ ["𑄮"]={ "𑄱","𑄧" },
+ ["𑄯"]={ "𑄲","𑄧" },
+ ["ð‘‹"]={ "ð‘‡","𑌾" },
+ ["ð‘Œ"]={ "ð‘‡","ð‘—" },
+ ["ð‘’»"]={ "ð‘’¹","ð‘’º" },
+ ["ð‘’¼"]={ "ð‘’¹","ð‘’°" },
+ ["ð‘’¾"]={ "ð‘’¹","ð‘’½" },
+ ["ð‘–º"]={ "ð‘–¸","ð‘–¯" },
+ ["ð‘–»"]={ "ð‘–¹","ð‘–¯" },
+ ["ð…ž"]={ "ð…—","ð…¥" },
+ ["ð…Ÿ"]={ "ð…˜","ð…¥" },
+ ["ð… "]={ "ð…Ÿ","ð…®" },
+ ["ð…¡"]={ "ð…Ÿ","ð…¯" },
+ ["ð…¢"]={ "ð…Ÿ","ð…°" },
+ ["ð…£"]={ "ð…Ÿ","ð…±" },
+ ["ð…¤"]={ "ð…Ÿ","ð…²" },
+ ["ð†»"]={ "ð†¹","ð…¥" },
+ ["ð†¼"]={ "ð†º","ð…¥" },
+ ["ð†½"]={ "ð†»","ð…®" },
+ ["ð†¾"]={ "ð†¼","ð…®" },
+ ["ð†¿"]={ "ð†»","ð…¯" },
+ ["ð‡€"]={ "ð†¼","ð…¯" },
+ },
+ },
+ },
+ ["name"]="collapse",
+ ["prepend"]=true,
+ ["type"]="ligature",
+}
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-gbn']={
+ version=1.001,
+ comment="companion to luatex-*.tex",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+if context then
+ texio.write_nl("fatal error: this module is not for context")
+ os.exit()
+end
+local fonts=fonts
+local nodes=nodes
+local nuts=nodes.nuts
+local traverse_id=nuts.traverse_id
+local flush_node=nuts.flush_node
+local glyph_code=nodes.nodecodes.glyph
+local disc_code=nodes.nodecodes.disc
+local tonode=nuts.tonode
+local tonut=nuts.tonut
+local getfont=nuts.getfont
+local getchar=nuts.getchar
+local getid=nuts.getid
+local getboth=nuts.getboth
+local getprev=nuts.getprev
+local getnext=nuts.getnext
+local getdisc=nuts.getdisc
+local setchar=nuts.setchar
+local setlink=nuts.setlink
+local setprev=nuts.setprev
+local n_ligaturing=node.ligaturing
+local n_kerning=node.kerning
+local ligaturing=nuts.ligaturing
+local kerning=nuts.kerning
+local basemodepass=true
+local function l_warning() texio.write_nl("warning: node.ligaturing called directly") l_warning=nil end
+local function k_warning() texio.write_nl("warning: node.kerning called directly") k_warning=nil end
+function node.ligaturing(...)
+ if basemodepass and l_warning then
+ l_warning()
+ end
+ return n_ligaturing(...)
+end
+function node.kerning(...)
+ if basemodepass and k_warning then
+ k_warning()
+ end
+ return n_kerning(...)
+end
+function nodes.handlers.setbasemodepass(v)
+ basemodepass=v
+end
+function nodes.handlers.nodepass(head,groupcode,size,packtype,direction)
+ local fontdata=fonts.hashes.identifiers
+ if fontdata then
+ local nuthead=tonut(head)
+ local usedfonts={}
+ local basefonts={}
+ local prevfont=nil
+ local basefont=nil
+ local variants=nil
+ local redundant=nil
+ local nofused=0
+ for n in traverse_id(glyph_code,nuthead) do
+ local font=getfont(n)
+ if font~=prevfont then
+ if basefont then
+ basefont[2]=getprev(n)
+ end
+ prevfont=font
+ local used=usedfonts[font]
+ if not used then
+ local tfmdata=fontdata[font]
+ if tfmdata then
+ local shared=tfmdata.shared
+ if shared then
+ local processors=shared.processes
+ if processors and #processors>0 then
+ usedfonts[font]=processors
+ nofused=nofused+1
+ elseif basemodepass then
+ basefont={ n,nil }
+ basefonts[#basefonts+1]=basefont
+ end
+ end
+ local resources=tfmdata.resources
+ variants=resources and resources.variants
+ variants=variants and next(variants) and variants or false
+ end
+ else
+ local tfmdata=fontdata[prevfont]
+ if tfmdata then
+ local resources=tfmdata.resources
+ variants=resources and resources.variants
+ variants=variants and next(variants) and variants or false
+ end
+ end
+ end
+ if variants then
+ local char=getchar(n)
+ if char>=0xFE00 and (char<=0xFE0F or (char>=0xE0100 and char<=0xE01EF)) then
+ local hash=variants[char]
+ if hash then
+ local p=getprev(n)
+ if p and getid(p)==glyph_code then
+ local variant=hash[getchar(p)]
+ if variant then
+ setchar(p,variant)
+ end
+ end
+ end
+ if not redundant then
+ redundant={ n }
+ else
+ redundant[#redundant+1]=n
+ end
+ end
+ end
+ end
+ local nofbasefonts=#basefonts
+ if redundant then
+ for i=1,#redundant do
+ local r=redundant[i]
+ local p,n=getboth(r)
+ if r==nuthead then
+ nuthead=n
+ setprev(n)
+ else
+ setlink(p,n)
+ end
+ if nofbasefonts>0 then
+ for i=1,nofbasefonts do
+ local bi=basefonts[i]
+ if r==bi[1] then
+ bi[1]=n
+ end
+ if r==bi[2] then
+ bi[2]=n
+ end
+ end
+ end
+ flush_node(r)
+ end
+ end
+ for d in traverse_id(disc_code,nuthead) do
+ local _,_,r=getdisc(d)
+ if r then
+ for n in traverse_id(glyph_code,r) do
+ local font=getfont(n)
+ if font~=prevfont then
+ prevfont=font
+ local used=usedfonts[font]
+ if not used then
+ local tfmdata=fontdata[font]
+ if tfmdata then
+ local shared=tfmdata.shared
+ if shared then
+ local processors=shared.processes
+ if processors and #processors>0 then
+ usedfonts[font]=processors
+ nofused=nofused+1
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ if next(usedfonts) then
+ for font,processors in next,usedfonts do
+ for i=1,#processors do
+ head=processors[i](head,font,0,direction,nofused) or head
+ end
+ end
+ end
+ if basemodepass and nofbasefonts>0 then
+ for i=1,nofbasefonts do
+ local range=basefonts[i]
+ local start=range[1]
+ local stop=range[2]
+ if start then
+ local front=nuthead==start
+ local prev,next
+ if stop then
+ next=getnext(stop)
+ start,stop=ligaturing(start,stop)
+ start,stop=kerning(start,stop)
+ else
+ prev=getprev(start)
+ start=ligaturing(start)
+ start=kerning(start)
+ end
+ if prev then
+ setlink(prev,start)
+ end
+ if next then
+ setlink(stop,next)
+ end
+ if front and nuthead~=start then
+ head=tonode(start)
+ end
+ end
+ end
+ end
+ return head,true
+ else
+ return head,false
+ end
+end
+function nodes.handlers.basepass(head)
+ if not basemodepass then
+ head=n_ligaturing(head)
+ head=n_kerning(head)
+ end
+ return head,true
+end
+local nodepass=nodes.handlers.nodepass
+local basepass=nodes.handlers.basepass
+local injectpass=nodes.injections.handler
+local protectpass=nodes.handlers.protectglyphs
+function nodes.simple_font_handler(head,groupcode,size,packtype,direction)
+ if head then
+ head=nodepass(head,groupcode,size,packtype,direction)
+ head=injectpass(head)
+ if not basemodepass then
+ head=basepass(head)
+ end
+ protectpass(head)
+ return head,true
+ else
+ return head,false
+ end
+end
+
+end -- closure
diff --git a/obsolete/macros/luatex/generic/fontloader-luaotfload/luaotfload-letterspace.luax b/obsolete/macros/luatex/generic/fontloader-luaotfload/luaotfload-letterspace.luax
new file mode 100644
index 0000000000..df93dbe1b7
--- /dev/null
+++ b/obsolete/macros/luatex/generic/fontloader-luaotfload/luaotfload-letterspace.luax
@@ -0,0 +1,683 @@
+if not modules then modules = { } end modules ['letterspace'] = {
+ version = "2.8",
+ comment = "companion to luaotfload-main.lua",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL; adapted by Philipp Gesang",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+--- This code diverged quite a bit from its origin in Context. Please
+--- do *not* report bugs on the Context list.
+
+local log = luaotfload.log
+local logreport = log.report
+
+-- UF
+texio.write_nl ("------------------")
+texio.write_nl ("!!!!! UF: Using CHANGED luaotfload-letterspace 2017-07-14 !!!!!")
+texio.write_nl ("------------------")
+-- /UF
+
+local getmetatable = getmetatable
+local require = require
+local setmetatable = setmetatable
+local tonumber = tonumber
+
+local next = next
+local nodes, node, fonts = nodes, node, fonts
+
+local nodedirect = nodes.nuts
+
+local getfield = nodedirect.getfield
+local setfield = nodedirect.setfield
+
+local field_setter = function (name) return function (n, ...) setfield (n, name, ...) end end
+local field_getter = function (name) return function (n, ...) getfield (n, name, ...) end end
+
+local getfont = nodedirect.getfont
+local getid = nodedirect.getid
+
+local getnext = nodedirect.getnext or field_getter "next"
+local setnext = nodedirect.setnext or field_setter "next"
+
+local getprev = nodedirect.getprev or field_getter "prev"
+local setprev = nodedirect.setprev or field_setter "prev"
+
+--- since r5336
+local getboth = nodedirect.getboth or function (n)
+ return getprev (n), getnext (n)
+end
+
+local setlink = nodedirect.setlink or function (a, b)
+ setnext (a, b)
+ setprev (b, a)
+end
+
+local getdisc = nodedirect.getdisc or field_getter "disc"
+local setdisc = nodedirect.setdisc or field_setter "disc"
+
+local getsubtype = nodedirect.getsubtype or field_getter "subtype"
+local setsubtype = nodedirect.setsubtype or field_setter "subtype"
+
+local getchar = nodedirect.getchar or field_getter "subtype"
+local setchar = nodedirect.setchar or field_setter "subtype"
+
+local find_node_tail = nodedirect.tail
+local todirect = nodedirect.tonut
+local tonode = nodedirect.tonode
+
+local insert_node_before = nodedirect.insert_before
+local free_node = nodedirect.free -- may cause double free
+local free_node = function (n)
+ logreport ("term", 5, "letterspace", "not calling free_node(%d)", n)
+ -- free_node (n)
+end
+local copy_node = nodedirect.copy
+local new_node = nodedirect.new
+
+local nodepool = nodedirect.pool
+-- local new_kern = nodepool.kern -- UF removed 2017-07-14
+
+local nodecodes = nodes.nodecodes
+
+local glyph_code = nodecodes.glyph
+local kern_code = nodecodes.kern
+local disc_code = nodecodes.disc
+local math_code = nodecodes.math
+local glue_code = nodecodes.glue
+
+local fonthashes = fonts.hashes
+local chardata = fonthashes.characters
+local quaddata = fonthashes.quads
+local otffeatures = fonts.constructors.newfeatures "otf"
+
+--[[doc--
+
+ Since the letterspacing method was derived initially from Context’s
+ typo-krn.lua we keep the sub-namespace “letterspace†inside the
+ “luaotfload†table.
+
+--doc]]--
+
+luaotfload.letterspace = luaotfload.letterspace or { }
+local letterspace = luaotfload.letterspace
+
+letterspace.keepligature = false
+letterspace.keeptogether = false
+
+---=================================================================---
+--- preliminary definitions
+---=================================================================---
+-- We set up a layer emulating some Context internals that are needed
+-- for the letterspacing callback.
+-----------------------------------------------------------------------
+--- node-ini
+-----------------------------------------------------------------------
+
+local bothways = function (t) return table.swapped (t, t) end
+local kerncodes = bothways { [0] = "fontkern"
+ , [1] = "userkern"
+ , [2] = "accentkern"
+ }
+local skipcodes = bothways { [0] = "userskip"
+ , [13] = "spaceskip"
+ , [14] = "xspaceskip"
+ }
+
+kerncodes.kerning = kerncodes.fontkern --- idiosyncrasy
+local kerning_code = kerncodes.kerning
+local userkern_code = kerncodes.userkern
+local userskip_code = skipcodes.userskip
+local spaceskip_code = skipcodes.spaceskip
+local xspaceskip_code = skipcodes.xspaceskip
+
+-----------------------------------------------------------------------
+--- node-res
+-----------------------------------------------------------------------
+
+local glue_spec = new_node "glue_spec"
+
+local new_gluespec = function (width,
+ stretch, shrink,
+ stretch_order, shrink_order)
+ local spec = copy_node(glue_spec)
+ if width then setfield(spec, "width" , width ) end
+ if stretch then setfield(spec, "stretch" , stretch ) end
+ if shrink then setfield(spec, "shrink" , shrink ) end
+ if stretch_order then setfield(spec, "stretch_order", stretch_order) end
+ if shrink_order then setfield(spec, "shrink_order" , shrink_order ) end
+ return spec
+end
+
+local new_glue = function (width, stretch, shrink,
+ stretch_order, shrink_order)
+ local n = new_node "glue"
+ if not width then return n end
+ -- no spec
+ if width == false then
+ local width = tonumber(width)
+ if width then
+ setfield(n, "spec",
+ new_gluespec(width, stretch, shrink,
+ stretch_order, shrink_order))
+ end
+ else
+ -- shared
+ setfield(n, "spec", copy_node(width))
+ end
+ return n
+end
+
+-----------------------------------------------------------------------
+--- font-hsh
+-----------------------------------------------------------------------
+--- some initialization resembling font-hsh
+local fonthashes = fonts.hashes
+local identifiers = fonthashes.identifiers --- was: fontdata
+local chardata = fonthashes.characters
+local quaddata = fonthashes.quads
+local parameters = fonthashes.parameters
+
+--- ('a, 'a) hash -> (('a, 'a) hash -> 'a -> 'a) -> ('a, 'a) hash
+local setmetatableindex = function (t, f)
+ local mt = getmetatable(t)
+ if mt then
+ mt.__index = f
+ else
+ setmetatable(t, { __index = f })
+ end
+ return t
+end
+
+if not parameters then
+ parameters = { }
+ setmetatableindex(parameters, function(t, k)
+ if k == true then
+ return parameters[currentfont()]
+ else
+ local parameters = identifiers[k].parameters
+ t[k] = parameters
+ return parameters
+ end
+ end)
+ --fonthashes.parameters = parameters
+end
+
+if not chardata then
+ chardata = { }
+ setmetatableindex(chardata, function(t, k)
+ if k == true then
+ return chardata[currentfont()]
+ else
+ local tfmdata = identifiers[k]
+ if not tfmdata then --- unsafe
+ tfmdata = font.fonts[k]
+ end
+ if tfmdata then
+ local characters = tfmdata.characters
+ t[k] = characters
+ return characters
+ end
+ end
+ end)
+ fonthashes.characters = chardata
+end
+
+if not quaddata then
+ quaddata = { }
+ setmetatableindex(quaddata, function(t, k)
+ if k == true then
+ return quads[currentfont()]
+ else
+ local parameters = parameters[k]
+ local quad = parameters and parameters.quad or 0
+ t[k] = quad
+ return quad
+ end
+ end)
+ --fonthashes.quads = quaddata
+end
+
+---=================================================================---
+--- character kerning functionality
+---=================================================================---
+
+-- UF changed 2017-07-14
+local newUF = node.direct.new
+
+local kern_injector = function (fillup, kern)
+ if fillup then
+ local g = newUF("glue")
+ setfield(g, "stretch", kern)
+ setfield(g, "stretch_order", 1)
+ return g
+ end
+ local g = newUF("kern")
+ setfield(g,"kern",kern)
+ return g
+end
+-- /UF
+
+local kernable_skip = function (n)
+ local st = getsubtype (n)
+ return st == userskip_code
+ or st == spaceskip_code
+ or st == xspaceskip_code
+end
+
+local function spec_injector (fillup, width, stretch, shrink)
+ if fillup then
+ local spec = new_gluespec(width, 2 * stretch, 2 * shrink)
+ setfield(spec, "stretch_order", 1)
+ return spec
+ end
+ return new_gluespec(width,stretch,shrink)
+end
+
+--[[doc--
+
+ Caveat lector.
+ This is an adaptation of the Context character kerning mechanism
+ that emulates XeTeX-style fontwise letterspacing. Note that in its
+ present state it is far inferior to the original, which is
+ attribute-based and ignores font-boundaries. Nevertheless, due to
+ popular demand the following callback has been added.
+
+--doc]]--
+
+local kernfactors = { } --- fontid -> factor
+
+local kerncharacters
+kerncharacters = function (head)
+ local start = head
+ local lastfont = nil
+ local keepligature = letterspace.keepligature --- function
+ local keeptogether = letterspace.keeptogether --- function
+ local fillup = false
+
+ local identifiers = fonthashes.identifiers
+ local kernfactors = kernfactors
+ local firstkern = true
+
+ while start do
+ local id = getid(start)
+ if id == glyph_code then
+ --- 1) look up kern factor (slow, but cached rudimentarily)
+ local krn
+ local fontid = getfont(start)
+ do
+ krn = kernfactors[fontid]
+ if not krn then
+ local tfmdata = identifiers[fontid]
+ if not tfmdata then -- unsafe
+ tfmdata = font.fonts[fontid]
+ end
+ if tfmdata then
+ fontproperties = tfmdata.properties
+ if fontproperties then
+ krn = fontproperties.kerncharacters
+ end
+ end
+ kernfactors[fontid] = krn
+ end
+ if not krn or krn == 0 then
+ firstkern = true
+ goto nextnode
+ elseif firstkern then
+ firstkern = false
+ if (id ~= disc_code) and (not getfield(start, "components")) then
+ --- not a ligature, skip node
+ goto nextnode
+ end
+ end
+ end
+
+ if krn == "max" then
+ krn = .25
+ fillup = true
+ else
+ fillup = false
+ end
+
+ lastfont = fontid
+
+ --- 2) resolve ligatures
+ local c = getfield(start, "components")
+
+ if c then
+ if keepligature and keepligature(start) then
+ -- keep 'm
+ c = nil
+ else
+ while c do
+ local s = start
+ local p, n = getboth (s)
+ if p then
+ setlink (p, c)
+ else
+ head = c
+ end
+ if n then
+ local tail = find_node_tail(c)
+ setlink (tail, n)
+ end
+ start = c
+ setfield(s, "components", nil)
+ free_node(s) --> double free with multipart components
+ c = getfield (start, "components")
+ end
+ end
+ end -- kern ligature
+
+ --- 3) apply the extra kerning
+ local prev = getprev(start)
+ if prev then
+ local pid = getid(prev)
+
+ if not pid then
+ -- nothing
+
+ elseif pid == glue_code and kernable_skip(prev) then
+ local spec = getfield(prev, "spec")
+ local wd = getfield(spec, "width")
+ if wd > 0 then
+ --- formula taken from Context
+ --- existing_width extended by four times the
+ --- width times the font’s kernfactor
+ local newwd = wd + --[[two en to a quad]] 4 * wd * krn
+ local stretched = (getfield(spec,"stretch") * newwd) / wd
+ local shrunk = (getfield(spec,"shrink") * newwd) / wd
+ setfield(prev, "spec",
+ spec_injector(fillup, newwd, stretched, shrunk))
+ end
+
+ elseif pid == kern_code then
+ local prev_subtype = getsubtype(prev)
+ if prev_subtype == kerning_code --- context does this by means of an
+ or prev_subtype == userkern_code --- attribute; we may need a test
+ then
+
+ local pprev = getprev(prev)
+ local pprev_id = getid(pprev)
+
+ if keeptogether
+ and pprev_id == glyph_code
+ and keeptogether(pprev, start)
+ then
+ -- keep
+ else
+ setsubtype (prev, userkern_code)
+ local prev_kern = getfield(prev, "kern")
+ prev_kern = prev_kern + quaddata[lastfont] * krn
+ setfield (prev, "kern", prev_kern)
+ end
+ end
+
+ elseif pid == glyph_code then
+ if getfont(prev) == lastfont then
+ local prevchar = getchar(prev)
+ local lastchar = getchar(start)
+ if keeptogether and keeptogether(prev, start) then
+ -- keep 'm
+ elseif identifiers[lastfont] then
+ local lastfontchars = chardata[lastfont]
+ if lastfontchars then
+ local prevchardata = lastfontchars[prevchar]
+ if not prevchardata then
+ --- font doesn’t contain the glyph
+ else
+ local kern = 0
+ local kerns = prevchardata.kerns
+ if kerns then kern = kerns[lastchar] or kern end
+ krn = kern + quaddata[lastfont]*krn -- here
+ insert_node_before(head,start,kern_injector(fillup,krn))
+ end
+ end
+ end
+ else
+ krn = quaddata[lastfont]*krn -- here
+ insert_node_before(head,start,kern_injector(fillup,krn))
+ end
+
+ elseif pid == disc_code then
+ local disc = prev -- disc
+ local pre, post, replace = getdisc (disc)
+ local prv = getprev(disc)
+ local nxt = getnext(disc)
+
+ if pre and prv then -- must pair with start.prev
+ -- this one happens in most cases
+ local before = copy_node(prv)
+ setprev(pre, before)
+ setnext(before, pre)
+ setprev(before, nil)
+ pre = kerncharacters (before)
+ pre = getnext(pre)
+ setprev(pre, nil)
+ setfield(disc, "pre", pre)
+ free_node(before)
+ end
+
+ if post and nxt then -- must pair with start
+ local after = copy_node(nxt)
+ local tail = find_node_tail(post)
+ setnext(tail, after)
+ setprev(after, tail)
+ setnext(after, nil)
+ post = kerncharacters (post)
+ setnext(tail, nil)
+ setfield(disc, "post", post)
+ free_node(after)
+ end
+
+ if replace and prv and nxt then -- must pair with start and start.prev
+ local before = copy_node(prv)
+ local after = copy_node(nxt)
+ local tail = find_node_tail(replace)
+ setprev(replace, before)
+ setnext(before, replace)
+ setprev(before, nil)
+ setnext(tail, after)
+ setprev(after, tail)
+ setnext(after, nil)
+ replace = kerncharacters (before)
+ replace = getnext(replace)
+ setprev(replace, nil)
+ setnext(getprev(after), nil)
+ setfield(disc, "replace", replace)
+ free_node(after)
+ free_node(before)
+
+ elseif identifiers[lastfont] then
+ if prv
+ and getid(prv) == glyph_code
+ and getfont(prv) == lastfont
+ then
+ local kern = 0
+ local prevchar = getchar(prv)
+ local lastchar = getchar(start)
+ local lastfontchars = chardata[lastfont]
+ if lastfontchars then
+ local prevchardata = lastfontchars[prevchar]
+ if not prevchardata then
+ --- font doesn’t contain the glyph
+ else
+ local kerns = prevchardata.kerns
+ if kerns then kern = kerns[lastchar] or kern end
+ end
+ end
+ krn = kern + quaddata[lastfont]*krn -- here
+ else
+ krn = quaddata[lastfont]*krn -- here
+ end
+ setfield(disc, "replace", kern_injector(false, krn))
+ end --[[if replace and prv and nxt]]
+ end --[[if not pid]]
+ end --[[if prev]]
+ end --[[if id == glyph_code]]
+
+ ::nextnode::
+ if start then
+ start = getnext(start)
+ end
+ end
+ return head
+end
+
+---=================================================================---
+--- integration
+---=================================================================---
+
+--- · callback: kerncharacters
+--- · enabler: enablefontkerning
+--- · disabler: disablefontkerning
+
+--- callback wrappers
+
+--- (node_t -> node_t) -> string -> string list -> bool
+local registered_as = { } --- procname -> callbacks
+local add_processor = function (processor, name, ...)
+ local callbacks = { ... }
+ for i=1, #callbacks do
+ luatexbase.add_to_callback(callbacks[i], processor, name)
+ end
+ registered_as[name] = callbacks --- for removal
+ return true
+end
+
+--- string -> bool
+local remove_processor = function (name)
+ local callbacks = registered_as[name]
+ if callbacks then
+ for i=1, #callbacks do
+ luatexbase.remove_from_callback(callbacks[i], name)
+ end
+ return true
+ end
+ return false --> unregistered
+end
+
+--- When font kerning is requested, usually by defining a font with the
+--- ``letterspace`` parameter, we inject a wrapper for the
+--- ``kerncharacters()`` node processor in the relevant callbacks. This
+--- wrapper initially converts the received head node into its “directâ€
+--- counterpart. Likewise, the callback result is converted back to an
+--- ordinary node prior to returning. Internally, ``kerncharacters()``
+--- performs all node operations on direct nodes.
+
+--- unit -> bool
+local enablefontkerning = function ( )
+
+ local handler = function (hd)
+ local direct_hd = todirect (hd)
+ logreport ("term", 5, "letterspace",
+ "kerncharacters() invoked with node.direct interface \z
+ (``%s`` -> ``%s``)", tostring (hd), tostring (direct_hd))
+ local direct_hd = kerncharacters (direct_hd)
+ if not direct_hd then --- bad
+ logreport ("both", 0, "letterspace",
+ "kerncharacters() failed to return a valid new head")
+ end
+ return tonode (direct_hd)
+ end
+
+ return add_processor( handler
+ , "luaotfload.letterspace"
+ , "pre_linebreak_filter"
+ , "hpack_filter")
+end
+
+--- unit -> bool
+---al disablefontkerning = function ( )
+---eturn remove_processor "luaotfload.letterspace"
+---
+
+--[[doc--
+
+ Fontwise kerning is enabled via the “kernfactor†option at font
+ definition time. Unlike the Context implementation which relies on
+ Luatex attributes, it uses a font property for passing along the
+ letterspacing factor of a node.
+
+ The callback is activated the first time a letterspaced font is
+ requested and stays active until the end of the run. Since the font
+ is a property of individual glyphs, every glyph in the entire
+ document must be checked for the kern property. This is quite
+ inefficient compared to Context’s attribute based approach, but Xetex
+ compatibility reduces our options significantly.
+
+--doc]]--
+
+
+local fontkerning_enabled = false --- callback state
+
+--- fontobj -> float -> unit
+local initializefontkerning = function (tfmdata, factor)
+ if factor ~= "max" then
+ factor = tonumber (factor) or 0
+ end
+ if factor == "max" or factor ~= 0 then
+ local fontproperties = tfmdata.properties
+ if fontproperties then
+ --- hopefully this field stays unused otherwise
+ fontproperties.kerncharacters = factor
+ end
+ if not fontkerning_enabled then
+ fontkerning_enabled = enablefontkerning ()
+ end
+ end
+end
+
+--- like the font colorization, fontwise kerning is hooked into the
+--- feature mechanism
+
+otffeatures.register {
+ name = "kernfactor",
+ description = "kernfactor",
+ initializers = {
+ base = initializefontkerning,
+ node = initializefontkerning,
+ }
+}
+
+--[[doc--
+
+ The “letterspace†feature is essentially identical with the above
+ “kernfactor†method, but scales the factor to percentages to match
+ Xetex’s behavior. (See the Xetex reference, page 5, section 1.2.2.)
+
+ Since Xetex doesn’t appear to have a (documented) “max†keyword, we
+ assume all input values are numeric.
+
+--doc]]--
+
+local initializecompatfontkerning = function (tfmdata, percentage)
+ local factor = tonumber (percentage)
+ if not factor then
+ logreport ("both", 0, "letterspace",
+ "Invalid argument to letterspace: %s (type %q), " ..
+ "was expecting percentage as Lua number instead.",
+ percentage, type (percentage))
+ return
+ end
+ return initializefontkerning (tfmdata, factor * 0.01)
+end
+
+otffeatures.register {
+ name = "letterspace",
+ description = "letterspace",
+ initializers = {
+ base = initializecompatfontkerning,
+ node = initializecompatfontkerning,
+ }
+}
+
+--[[example--
+
+See https://bitbucket.org/phg/lua-la-tex-tests/src/tip/pln-letterspace-8-compare.tex
+for an example.
+
+--example]]--
+
+--- vim:sw=2:ts=2:expandtab:tw=71
+
diff --git a/obsolete/macros/luatex/generic/fontloader-luaotfload/luaotfload.confx b/obsolete/macros/luatex/generic/fontloader-luaotfload/luaotfload.confx
new file mode 100644
index 0000000000..4cf5302ce6
--- /dev/null
+++ b/obsolete/macros/luatex/generic/fontloader-luaotfload/luaotfload.confx
@@ -0,0 +1,8 @@
+[run]
+;fontloader = reference;
+;fontloader = default;
+;fontloader = context;
+;fontloader = fontloader-reference-2017-07-28.lua;
+fontloader = fontloader-reference-2017-08-18.lua;
+;fontloader = fontloader-2017-02-11-stix.lua;
+
diff --git a/obsolete/macros/luatex/generic/fontloader-luaotfload/test-fontloader-2017-02-11-stix.pdf b/obsolete/macros/luatex/generic/fontloader-luaotfload/test-fontloader-2017-02-11-stix.pdf
new file mode 100644
index 0000000000..6df2feb985
--- /dev/null
+++ b/obsolete/macros/luatex/generic/fontloader-luaotfload/test-fontloader-2017-02-11-stix.pdf
Binary files differ
diff --git a/obsolete/macros/luatex/generic/fontloader-luaotfload/test-fontloader-2017-02-11-stix.tex b/obsolete/macros/luatex/generic/fontloader-luaotfload/test-fontloader-2017-02-11-stix.tex
new file mode 100644
index 0000000000..6b41d21fab
--- /dev/null
+++ b/obsolete/macros/luatex/generic/fontloader-luaotfload/test-fontloader-2017-02-11-stix.tex
@@ -0,0 +1,15 @@
+% !Mode:: "TeX:UTF-8:Main"
+% to avoid the bug: use fontloader 2017-02-11-stix or later
+
+\documentclass{article}
+
+\usepackage{unicode-math}
+\setmathfont{STIX2Math.otf}
+
+\begin{document}
+$\left(\frac{\frac{a}{b}}{\frac{a}{b}}\right)$
+\qquad
+$a^{\left(\frac{\frac{a}{b}}{\frac{a}{b}}\right)}$ %wrong size of parentheses
+
+
+\end{document}
diff --git a/obsolete/macros/luatex/generic/fontloader-luaotfload/test-fontloader-2017-07-28.pdf b/obsolete/macros/luatex/generic/fontloader-luaotfload/test-fontloader-2017-07-28.pdf
new file mode 100644
index 0000000000..2129efe108
--- /dev/null
+++ b/obsolete/macros/luatex/generic/fontloader-luaotfload/test-fontloader-2017-07-28.pdf
Binary files differ
diff --git a/obsolete/macros/luatex/generic/fontloader-luaotfload/test-fontloader-2017-07-28.tex b/obsolete/macros/luatex/generic/fontloader-luaotfload/test-fontloader-2017-07-28.tex
new file mode 100644
index 0000000000..5750fa345c
--- /dev/null
+++ b/obsolete/macros/luatex/generic/fontloader-luaotfload/test-fontloader-2017-07-28.tex
@@ -0,0 +1,127 @@
+% !Mode:: "TeX:UTF-8:Main"
+%needs a fontloader 2017-07-28 or later
+%substitutions at word boundaries
+
+\documentclass{article}
+
+\usepackage{luacode,fontspec}
+\begin{luacode*}
+ fonts.handlers.otf.addfeature {
+ name = "test-a",
+ type = "chainsubstitution",
+ lookups = {
+ {
+ type = "substitution",
+ data = {
+ ["a"] = "A",
+ ["b"] = "B",
+ ["c"] = "C",
+ ["d"] = "D",
+ },
+ },
+ {
+ type = "ligature",
+ data = {
+ ['1'] = { "a", "b" },
+ ['2'] = { "c", "d" },
+ },
+ },
+ },
+ data = {
+ rules = {
+ {
+ before = { { " ", 0xFFFC } },
+ current = { { "a" }, { "b" } },
+ lookups = { 2 },
+ },
+ {
+ current = { { "c" }, { "d" } },
+ after = { { 0xFFFC, " " } },
+ lookups = { 2 },
+ },
+ {
+ current = { { "a" } },
+ after = { { "b" } },
+ lookups = { 1 },
+ },
+ {
+ current = { { "c" } },
+ after = { { "d" } },
+ lookups = { 1 },
+ },
+ },
+ },
+ }
+
+ fonts.handlers.otf.addfeature {
+ name = "test-b",
+ type = "chainsubstitution",
+ lookups = {
+ {
+ type = "ligature",
+ data = {
+ ['1'] = { "a", "b" },
+ ['2'] = { "c", "d" },
+ },
+ },
+ },
+ data = {
+ rules = {
+ {
+ -- the space is redundant as 0xFFFC contains it
+ before = { { " ", 0xFFFC } },
+ current = { { "a" }, { "b" } },
+ lookups = { 1 },
+ },
+ {
+ current = { { "c" }, { "d" } },
+ -- the space is redundant as 0xFFFC contains it
+ after = { { 0xFFFC, " " } },
+ lookups = { 1 },
+ },
+ },
+ },
+ }
+
+ fonts.handlers.otf.addfeature {
+ name = "test-c",
+ type = "chainsubstitution",
+ lookups = {
+ {
+ type = "ligature",
+ data = {
+ ['1'] = { "a", "b" },
+ ['2'] = { "c", "d" },
+ },
+ },
+ },
+ data = {
+ rules = {
+ {
+ before = { { " " } },
+ current = { { "a" }, { "b" } },
+ lookups = { 1 },
+ },
+ {
+ current = { { "c" }, { "d" } },
+ after = { { " " } },
+ lookups = { 1 },
+ },
+ },
+ },
+ }
+\end{luacode*}
+
+
+\setmainfont{Arial}[RawFeature=+test-a;]
+
+\begin{document}
+Substitutions at word boundaries (spaces):
+
+ab ab abxcd abxcdcdcd
+
+expected output:
+
+1 1 1x2 1xCdCd2
+
+\end{document} \ No newline at end of file
diff --git a/obsolete/macros/luatex/generic/fontloader-luaotfload/test-fontloader-2017-08-18.pdf b/obsolete/macros/luatex/generic/fontloader-luaotfload/test-fontloader-2017-08-18.pdf
new file mode 100644
index 0000000000..3492594cab
--- /dev/null
+++ b/obsolete/macros/luatex/generic/fontloader-luaotfload/test-fontloader-2017-08-18.pdf
Binary files differ
diff --git a/obsolete/macros/luatex/generic/fontloader-luaotfload/test-fontloader-2017-08-18.tex b/obsolete/macros/luatex/generic/fontloader-luaotfload/test-fontloader-2017-08-18.tex
new file mode 100644
index 0000000000..1cdb8eeb5e
--- /dev/null
+++ b/obsolete/macros/luatex/generic/fontloader-luaotfload/test-fontloader-2017-08-18.tex
@@ -0,0 +1,26 @@
+% !Mode:: "TeX:UTF-8:Main"
+%needs a fontloader 2017-08-18 or later **and** a luatex 1.06!!!
+
+\documentclass{article}
+
+
+\directlua{fonts.handlers.otf.registerpalette("demo", {
+ { g = 0 },
+ { g = 0.5, b=0, r=1 },
+ { r = 1 },
+ { r = 0, b= 1, g= 0},
+ }
+ )}
+
+
+\begin{document}
+\font\Emoj={file:seguiemj.ttf:mode=node;colr=yes;}
+ \Emoj \char"2661 \char"1F34D \char"1F986
+
+\font\Emoj={file:seguiemj.ttf:mode=node;colr=demo;}
+ \Emoj \char"2661 \char"1F34D \char"1F986
+
+\font\cow={file:koeielettersot.ttf:mode=node;colr=demo;} at 30pt
+ \cow ABC
+
+\end{document} \ No newline at end of file
diff --git a/obsolete/macros/musixtex/egler/systems/README.emx b/obsolete/macros/musixtex/egler/systems/README.emx
new file mode 100644
index 0000000000..5566cf06c7
--- /dev/null
+++ b/obsolete/macros/musixtex/egler/systems/README.emx
@@ -0,0 +1,20 @@
+Note: This README.emx replaces the one inside emx_051.zip.
+
+This executable has been compiled using emx 0.9a fix 06 and gcc 2.7.0
+with the command line 'gcc -s -Wall musixflx.c'
+
+It should run under OS/2 2.x or OS/2 Warp using emx.dll,
+or DOS (>= 386) using emx.exe, or Windows using rsx.exe
+
+If you have emTeX, it is very likely that you already have this.
+If not, ftp to CTAN and get (tex-archive/)systems/msdos/emtex/emxrsx.zip
+(even better: get emTeX!)
+
+Caution!: Under DOS, if you have a 486SX or a 386 without math coprocessor,
+you will also need emxfpemu. If this is the case, get the complete
+emxrt.zip package, which is currently in:
+
+ftp://ftp.uni-stuttgart.de/pub/systems/os2/emx-0.9b/emxrt.zip
+
+
+Complains to: -> Santiago Vila <sanvila@unex.es>
diff --git a/obsolete/macros/plain/contrib/fontch20/DSmac.tex b/obsolete/macros/plain/contrib/fontch20/DSmac.tex
new file mode 100644
index 0000000000..89231af349
--- /dev/null
+++ b/obsolete/macros/plain/contrib/fontch20/DSmac.tex
@@ -0,0 +1,5 @@
+%% DSmac.tex This file is part of fontch package V2.0 2007/09/04
+%% This stupid file is for avoiding to define a new family when it is not
+%% necessary, because a \newfam macro cannot be inside an if structure.
+\newfam\dsfam
+
diff --git a/obsolete/macros/plain/contrib/fontch20/README b/obsolete/macros/plain/contrib/fontch20/README
new file mode 100644
index 0000000000..5d8f5703b7
--- /dev/null
+++ b/obsolete/macros/plain/contrib/fontch20/README
@@ -0,0 +1,338 @@
+README File of the package fontch.tex V2.0 2007/09/04
+ fontch.tex: Macros for changing fonts and sizes in plain TeX
+
+ Rodrigo Medina (IVIC) rmedina@ivic.ve
+
+Suggested locations: .../texmf/tex/plain/fontch/
+ .../texmf/doc/tex/fontch/README.txt
+Licence: LPPL
+
+Components
+----------
+The fontch V2.0 package is composed of the following files:
+ README.txt -- This file
+ fontch.tex -- main macros
+ bsymbols.tex -- macros for boldface symbols
+ TS1mac.tex -- macros for the TS1 companion symbols
+ DSmac.tex -- auxiliary file for the DStroke option
+
+Description
+-----------
+ This package allows, in plain TeX, to change with a single
+command the size of all fonts that are used for text input and math input.
+Main text fonts of sizes 8, 10, 12, 14, 20 and 24 points are available.
+Fonts of sizes 5, 6, 7 and 9 points are used in subscripts and subscripts of
+subscripts of other main sizes.
+In addition fontch gives support to:
+ - boldface math-italic and boldface math symbols,
+ - T1 Latin Modern fonts,
+ - TS1 companion symbol fonts.
+ - AMS fonts for boldface math,
+ - Double Stroke fonts for blackboard bold symbols
+
+Requierements
+-------------
+- In order to use the T1 options LMTone and LMTSone, you need to have installed
+ the Latin Modern fonts.
+- In order to use the AMSfont option you need to have installed the AMS fonts.
+- In order to use the DStroke option ou need to have installed the Double
+ Stroke fonts.
+
+Installation
+------------
+ You have only to put the macro files fontch.tex, bsymbols.tex,
+ TS1mac.tex and DSmac.tex in any sensible place in the texmf tree, like
+ .../texmf/tex/plain/fontch/
+
+It is also commendable to put this README file in a proper place such as
+
+ .../texmf/doc/tex/fontch/README.txt
+
+Usage
+-----
+ For using fontch.tex with the original TeX OT1 fonts (Computer Modern)
+just put at the beginning of the document:
+ \input fontch.tex
+
+The file bsymbols.tex provides macro definitions for boldface versions
+of math symbols. For using it just input the file where you need it.
+
+The fontch package has four options for handling different kinds of fonts:
+
+ - LMTone for Latin Modern T1 fonts.
+ - LMTSone for the TS1 companion symbol font.
+ - AMSfont for AMS fonts used for boldface math.
+ - DStroke for Doublestroke fonts providing blackboard-boldface symbols.
+
+The four options are independent. They are activated by setting the
+corresponding variable before calling fontch.tex. For example for
+activating all the four options and using the macros for bold math
+put at the beginning of the document:
+
+ \let\AMSfont\relax
+ \let\DStroke\relax
+ \let\LMTone\relax
+ \let\LMTSone\relax
+ \input fontch.tex
+ \input bsymbols.tex
+
+NOTES:
+-----
+ (1) There is one modification of the standard behavior of plain TeX. Plain
+ TeX defines for the font #3 the same font (tenex) for text, script and
+ scriptscript. That is awfull. The fontch package uses sevenex for
+ script and fiveex for scriptscript, as for the other fonts.
+
+ (2) The use of files il1-t1.tcx or il2-t1.tcx is recommended together
+ with the LMT1 fonts.
+
+ (3) Only the cmcs, cmmib, cmbsy and cmex AMS fonts are supported. These
+ are used for small caps and for boldface math-italic and boldface
+ greek symbols. The other AMS fonts like the Euler, Cyrillic and extra
+ symbols are not supported.
+
+ (4) Only the roman Doublestroke font is supported. The sans serif version
+ is not supported.
+
+ (5) There are two main uses of boldface math. One case is the use of
+ isolated bold characters or symbols inside a formula. For this case
+ fontch provides bold versions of math synbols and the macro \mb for bold
+ math-italic characters. The plain TeX macro "\bf" yields roman-bold
+ characters in math mode. The name of the bold version of a math symbol
+ is obtained adding the prefix "bf" to the name of the normal symbol. For
+ example a boldface italic "a" is {\mb a}, a boldface roman "P" is
+ {\bf P}, a boldface \Sigma is \bfSigma, a boldface \iff is \bfiff.
+
+ The other case is when one wants to write a complete formula in
+ boldface, for example inside a title. For this case fontch has the
+ macro \setmathbold that changes the font families 1 (cmmi) and 2 (cmsy)
+ to the bold versions cmmib and cmmbsy. The macro \unsetmathbold resets
+ the families 1 and 2 to their original values. These macros should be
+ put before and after the formula.
+
+ (6) Usually the macro \setmathbold does not change the whole formula to
+ boldface. This is due to the fact that in math mode some symbols
+ come from family #0 (cmr) or #3 (cmex) such as "+" or \int. Fontch
+ provides macros for the symbols that come from family #0, For
+ example the bold version of "(" is \bflparen.
+
+ (7) Math symbols of family #3 (cmex) do not have bold versions. In particular
+ \int, \sum and \prod. Never the less \smallint is of cmsy and does
+ a bold version.
+
+Modifications from version 1.3
+------------------------------
+
+Version 2.0 is a mayor revision.
+
+There are many improvements such as
+ -- Proper handling of smallcaps
+ -- Support for bold-math
+ -- Support for AMS fonts
+ -- Support for blackboard boldface
+ -- Correction of bugs and scaling.
+
+The behavior of V2.0 should be compatible with V1.3 except for case explained
+in Note (1).
+-----------------------------------------------------
+%%%%%%%%% Commands of fontch %%%%%%
+
+General Commands
+----------------
+The package fontch defines the following commands valid for any option.
+
+Commands for changing font size:
+ \eightpoint -- Change to small type
+ \tenpoint -- Change to normal type
+ \twelvepoint -- Change to large type
+ \fourteenpoint -- Change to very large type
+ \twentypoint -- Change to huge type
+ \twentyfourpoint -- Change to immense type
+
+Commands for changing family, most already in plain TeX.
+
+ \rm -- Roman
+ \it -- Italic
+ \bf -- Boldface
+ \tt -- Teletype
+ \sf -- Sans Serif (new)
+ \sc -- Small Caps
+ \cal -- Calligraphic
+ \mit -- Math Italic
+ \mb -- Math Boldface (new)
+ \bcal -- Boldface calligraphica (new)
+ \oldstyle -- Old style digits
+ \boldstyle -- Boldface old style digitsa (new)
+ \setmathbold -- set families 1 and 2 to cmmib and cmmbsy (new)
+ \unsetmathbold -- reset families 1 and 2 to cmmi and cmmsy (new)
+
+Command for changing line spacing
+ \doublespace -- Double Space for ten & twelve points
+
+
+
+Macros of bold symbols (Require input of bsymbols.tex)
+----------------------
+Symbols that have a keyword
+ bold_keyword = bf + normal_keyword
+
+Symbols that do not have a keyword
+ \bfexcl -- !
+ \bflparen -- (
+ \bfrparen -- )
+ \bfplus -- +
+ \bfcomma -- ,
+ \bfcolon -- :
+ \bfsemicolon -- ;
+ \bfequal -- =
+ \bflbraket -- [
+ \bflt -- <
+ \bfslash -- /
+ \bfgt -- >
+ \bfminus -- -
+ \bfvert -- |
+ \bfVert -- \|
+
+Command of the DStroke option
+-----------------------------
+ \ds -- Double Stroke
+
+Commands of the LMT1 option
+---------------------------
+
+Redefined Plain TeX Commands:
+ \i , \j , \ae , \AE, \oe , \OE , \o , \O ,
+ \ss , \SS , \aa , \AA , \l , \L ,
+ \Gamma , \Delta , \Theta , \Lambda , \Xi , \Pi ,
+ \Sigma , \Upsilon , \Phi , \Psi , \Omega , \hbar
+
+New T1 Commands for non-latin1 characters
+
+ \lh -- l'
+ \Lh -- L'
+ \dh -- d'
+ \th -- t'
+ \dbar -- d slash
+ \Edh
+ \edh
+ \ij
+ \IJ
+ \nj
+ \NJ
+ \thorn
+ \Thorn
+ \smallzero
+ \lguille -- left guillemot (does not appear in il1-t1.tcx)
+ \rguille -- right guillemot (does not appear in il1-t1.tcx)
+ \vispace -- visible space
+
+Redefined plain TeX accents
+ \` , \' , \^ , \~ , \" , \H , \v , \u , \= , \. , \b , \c
+
+Redefined plain TeX math-accents
+ \acute,\grave,\ddot,\tilde,\bar,\breve,\check,\hat,\dot
+
+New T1 accents
+ \r -- ring accent
+ \k -- ogonek
+
+New T1 math-accent
+ \ring
+
+Commands of the LMTS1 option
+----------------------------
+
+TS1 symbols
+ \tcchar{#1} -- Character of TS1 table
+
+Redefined plain TeX commands
+ \t{#1} -- tie-after-accent
+ \P -- pilcrow
+ \S -- section
+ \dag -- dagger
+ \ddag -- double dagger
+ \copyright
+
+Most TS1 symbols (in increasing charcode order)
+Some are text versions of symbols of the math mode.
+
+ \arrowl -- left arrow
+ \arrowr -- right arrow
+ \blank
+ \dollar
+ \caster -- centered asterisk
+ \sequals -- short equals
+ \anglel
+ \angler
+ \mho
+ \bigcircle
+ \Ohm
+ \bbracketl -- left double square bracket
+ \bbracketr -- right double square bracket
+ \arrowu -- up arrow
+ \arrowd -- down arrow
+ \textstar -- star
+ \born
+ \died
+ \leaf
+ \married
+ \music
+ \doublevert -- Double vertical bar
+ \perthousand
+ \bull -- bullet (is in manmac)
+ \centigrade
+ \olddollar
+ \oldcent
+ \florin
+ \Colon
+ \won
+ \naira
+ \guarani
+ \peso
+ \lira
+ \recipe
+ \interrobang -- Question+Exclamation
+ \gnaborretni -- Question+Exclamation upside-down
+ \dong
+ \TM
+ \pertenth -- per ten thousand
+ \npilcrow -- narrow pilcrow
+ \baht
+ \numero
+ \abzueglich
+ \aestimated -- Big e
+ \openbull
+ \SM
+ \qbrackl -- left quill bracket
+ \qbrackr -- right quill bracket
+ \cent
+ \sterling
+ \currency
+ \yen
+ \brokenvert -- broken vertical bar
+ \feminine
+ \copyleft
+ \lognot -- logical not
+ \circledP
+ \registered
+ \degree
+ \plusminus
+ \twoup
+ \threeup
+ \micro
+ \centereddot
+ \reference
+ \oneup
+ \masculine
+ \root
+ \onequarter
+ \onehalf
+ \threequarters
+ \euro
+ \texttimes
+ \textdiv
+
+Bugs
+----
+ Comments and bug reports are welcome at rmedina@ivic.ve
+-.-
diff --git a/obsolete/macros/plain/contrib/fontch20/TS1mac.tex b/obsolete/macros/plain/contrib/fontch20/TS1mac.tex
new file mode 100644
index 0000000000..00cf719ed7
--- /dev/null
+++ b/obsolete/macros/plain/contrib/fontch20/TS1mac.tex
@@ -0,0 +1,130 @@
+%% TS1mac.tex this file is part of fontch package V2.0 2007/09/04
+%% Support of TS1 fonts
+%% eight points fonts %%
+\font\eightcrm=ts1-lmr8
+\font\eightcbf=ts1-lmbx8
+\font\eightcsl=ts1-lmro8
+\font\eightctt=ts1-lmtt8
+\font\eightcit=ts1-lmri8
+\font\eightcss=ts1-lmss8
+%% ten points fonts %%
+\font\tencrm=ts1-lmr10
+\font\tencbf=ts1-lmbx10
+\font\tencsl=ts1-lmro10
+\font\tenctt=ts1-lmtt10
+\font\tencit=ts1-lmri10
+\font\tencss=ts1-lmss10
+%% twelve points fonts %%
+\font\twelvecrm=ts1-lmr12
+\font\twelvecbf=ts1-lmbx12
+\font\twelvecsl=ts1-lmro12
+\font\twelvectt=ts1-lmtt12
+\font\twelvecit=ts1-lmri12
+\font\twelvecss=ts1-lmss12
+%% fourteen points fonts %%
+\font\fourteencrm=ts1-lmr12 scaled 1167
+\font\fourteencbf=ts1-lmbx12 scaled 1167
+\font\fourteencsl=ts1-lmro12 scaled 1167
+\font\fourteenctt=ts1-lmtt12 scaled 1167
+\font\fourteencit=ts1-lmri12 scaled 1167
+\font\fourteencss=ts1-lmss12 scaled 1167
+%% twenty points fonts %%
+\font\twentycrm=ts1-lmr12 scaled 1667
+\font\twentycbf=ts1-lmbx12 scaled 1667
+\font\twentycsl=ts1-lmro12 scaled 1667
+\font\twentyctt=ts1-lmtt12 scaled 1667
+\font\twentycit=ts1-lmri12 scaled 1667
+\font\twentycss=ts1-lmss12 scaled 1667
+%% twentyfour points fonts %%
+\font\twentyfourcrm=ts1-lmr12 scaled 2000
+\font\twentyfourcbf=ts1-lmbx12 scaled 2000
+\font\twentyfourcsl=ts1-lmro12 scaled 2000
+\font\twentyfourctt=ts1-lmtt12 scaled 2000
+\font\twentyfourcit=ts1-lmri12 scaled 2000
+\font\twentyfourcss=ts1-lmss12 scaled 2000
+%% Text companion symbols TS1 %%
+%% Redefinition of tie-accent
+\def\t#1{{\edef\next{\the\font}\tcfont\accent"1B\next#1}}
+%% TC character
+\def\tcchar#1{{\edef\next{\the\font}\tcfont\char#1\next}}
+%% TC symbols
+\def\arrowl{{\tcchar{"18}}}
+\def\arrowr{{\tcchar{"19}}}
+\def\blank{{\tcchar{"20}}}
+\def\dollar{{\tcchar{"24}}}
+\def\caster{{\tcchar{"2A}}}
+\def\sequals{{\tcchar{"2D}}}
+\def\anglel{{\tcchar{"3C}}}
+\def\angler{{\tcchar{"3E}}}
+\def\mho{{\tcchar{"4D}}}
+\def\bigcircle{{\tcchar{"4F}}}
+\def\Ohm{{\tcchar{"57}}}
+\def\bbracketl{{\tcchar{"5B}}}
+\def\bbracketr{{\tcchar{"5D}}}
+\def\arrowu{{\tcchar{"5E}}}
+\def\arrowd{{\tcchar{"5F}}}
+\def\textstar{{\tcchar{"62}}}
+\def\born{{\tcchar{"63}}}
+\def\died{{\tcchar{"64}}}
+\def\leaf{{\tcchar{"6C}}}
+\def\married{{\tcchar{"6D}}}
+\def\music{{\tcchar{"6E}}}
+\def\dag{{\tcchar{"84}}}%% Redefined
+\def\ddag{{\tcchar{"85}}}%% Redefined
+\def\doublevert{{\tcchar{"86}}}
+\def\perthousand{{\tcchar{"87}}}
+\def\bull{{\tcchar{"88}}}
+\def\centigrade{{\tcchar{"89}}}
+\def\olddollar{{\tcchar{"8A}}}
+\def\oldcent{{\tcchar{"8B}}}
+\def\florin{{\tcchar{"8C}}}
+\def\Colon{{\tcchar{"8D}}}
+\def\won{{\tcchar{"8E}}}
+\def\naira{{\tcchar{"8F}}}
+\def\guarani{{\tcchar{"90}}}
+\def\peso{{\tcchar{"91}}}
+\def\lira{{\tcchar{"92}}}
+\def\recipe{{\tcchar{"93}}}
+\def\interrobang{{\tcchar{"94}}}
+\def\gnaborretni{{\tcchar{"95}}}
+\def\dong{{\tcchar{"96}}}
+\def\TM{{\tcchar{"97}}}
+\def\pertenth{{\tcchar{"98}}}
+\def\npilcrow{{\tcchar{"99}}}
+\def\baht{{\tcchar{"9A}}}
+\def\numero{{\tcchar{"9B}}}
+\def\abzueglich{{\tcchar{"9C}}}
+\def\aestimated{{\tcchar{"9D}}}
+\def\openbull{{\tcchar{"9E}}}
+\def\SM{{\tcchar{"9F}}}
+\def\qbrackl{{\tcchar{"A0}}}
+\def\qbrackr{{\tcchar{"A1}}}
+\def\cent{{\tcchar{"A2}}}
+\def\sterling{{\tcchar{"A3}}}
+\def\currency{{\tcchar{"A4}}}
+\def\yen{{\tcchar{"A5}}}
+\def\brokenvert{{\tcchar{"A6}}}
+\def\S{{\tcchar{"A7}}}%% Redefined
+\def\copyright{{\tcchar{"A9}}}
+\def\feminine{{\tcchar{"AA}}}
+\def\copyleft{{\tcchar{"AB}}}
+\def\lognot{{\tcchar{"AC}}}
+\def\circledP{{\tcchar{"AD}}}
+\def\registered{{\tcchar{"AE}}}
+\def\degree{{\tcchar{"B0}}}
+\def\plusminus{{\tcchar{"B1}}}
+\def\twoup{{\tcchar{"B2}}}
+\def\threeup{{\tcchar{"B3}}}
+\def\micro{{\tcchar{"B5}}}
+\def\P{{\tcchar{"B6}}}%% Redefined
+\def\centereddot{{\tcchar{"B7}}}
+\def\reference{{\tcchar{"B8}}}
+\def\oneup{{\tcchar{"B9}}}
+\def\masculine{{\tcchar{"BA}}}
+\def\root{{\tcchar{"BB}}}
+\def\onequarter{{\tcchar{"BC}}}
+\def\onehalf{{\tcchar{"BD}}}
+\def\threequarters{{\tcchar{"BE}}}
+\def\euro{{\tcchar{"BF}}}
+\def\texttimes{{\tcchar{"D6}}}
+%% End of LMTSone option %%
diff --git a/obsolete/macros/plain/contrib/fontch20/bsymbols.tex b/obsolete/macros/plain/contrib/fontch20/bsymbols.tex
new file mode 100644
index 0000000000..b44d0818bc
--- /dev/null
+++ b/obsolete/macros/plain/contrib/fontch20/bsymbols.tex
@@ -0,0 +1,228 @@
+%% bsymbols.tex Macros for bold symbols defined in cmmib and cmbsy
+%% Part of package fontch V2.0 2007/09/4
+%% Rodrigo Medina (IVIC) rmedina@ivic.ve
+%% Licence: LPPL
+%%
+%%%% Description
+%% Defines a macro for the bold version of each symbol that appears in
+%% cmmi and cmsy. The name of the bold symbol is the name of the normal symbol
+%% with the prefix "bf". For example the bold version of \Sigma is \bfSigma.
+%%
+%% There are also macros for the bold versions of symbols that have their
+%% own key. For example the bold version of "+" is \bfplus.
+%%%% Requirement
+%% As it is defined in fontch.tex cmmib must be family #8 and cmbsy family #9
+%%
+%%%% Usage
+%% You can use bsymbols.tex in two ways:
+%% 1- put \input bsymbols.tex in your document.
+%% 2- If need only a few bold symbols you may copy in your document
+%% the lines of this file in which the symbols that you need appear.
+%%
+%%%%
+%%
+%% These have their own key, most are defined in cmr
+\mathchardef\bfexcl="0621
+\mathchardef\bflparen="4628
+\mathchardef\bfrparen="5629
+\mathchardef\bfplus="262B
+\mathchardef\bfcomma="662C
+\mathchardef\bfcolon="063A
+\mathchardef\bfsemicolon="663B
+\mathchardef\bfequal="363D
+\mathchardef\bflbraket="465B
+\mathchardef\bfrbraket="565D
+\mathchardef\bflt="383C
+\mathchardef\bfslash="283D
+\mathchardef\bfgt="383E
+\mathchardef\bfminus="2900
+\mathchardef\bfvert="296A
+%% cmmi symbols
+\mathchardef\bfGamma="7800
+\mathchardef\bfDelta="7801
+\mathchardef\bfTheta="7802
+\mathchardef\bfLambda="7803
+\mathchardef\bfXi="7804
+\mathchardef\bfPi="7805
+\mathchardef\bfSigma="7806
+\mathchardef\bfUpsilon="7807
+\mathchardef\bfPhi="7808
+\mathchardef\bfPsi="7809
+\mathchardef\bfOmega="780A
+\mathchardef\bfalpha="080B
+\mathchardef\bfbeta="080C
+\mathchardef\bfgamma="080D
+\mathchardef\bfdelta="080E
+\mathchardef\bfepsilon="080F
+\mathchardef\bfzeta="0810
+\mathchardef\bfeta="0811
+\mathchardef\bftheta="0812
+\mathchardef\bfiota="0813
+\mathchardef\bfkappa="0814
+\mathchardef\bflambda="0815
+\mathchardef\bfmu="0816
+\mathchardef\bfnu="0817
+\mathchardef\bfxi="0818
+\mathchardef\bfpi="0819
+\mathchardef\bfrho="081A
+\mathchardef\bfsigma="081B
+\mathchardef\bftau="081C
+\mathchardef\bfupsilon="081D
+\mathchardef\bfphi="081E
+\mathchardef\bfchi="081F
+\mathchardef\bfpsi="0820
+\mathchardef\bfomega="0821
+\mathchardef\bfvarepsilon="0822
+\mathchardef\bfvartheta="0823
+\mathchardef\bfvarpi="0824
+\mathchardef\bfvarrho="0825
+\mathchardef\bfvarsigma="0826
+\mathchardef\bfvarphi="0827
+\mathchardef\bfleftharpoonup="3828
+\mathchardef\bfleftharpoondown="3829
+\mathchardef\bfrightharpoonup="382A
+\mathchardef\bfrightharpoondown="382B
+\mathchardef\bflhook="382C
+\mathchardef\bfrhook="382D
+\def\bfhookrightarrow{\bflhook\joinrel\bfrightarrow}
+\def\bfhookleftarrow{\bfleftarrow\joinrel\bfrhook}
+\def\bfrelbar{\mathrel{\smash\bfminus}}
+\def\bfRelbar{\mathrel\bfequal}
+\mathchardef\bftriangleright="282E
+\mathchardef\bftriangleleft="282F
+\def\bfjoinrel{\mathrel{\mkern-4mu}}
+\def\bfbowtie{\mathrel\bftriangleright\bfjoinrel\mathrel\bftriangleleft}
+\def\bfmodels{\mathrel\bfvert\bfjoinrel\bfequal}
+\def\bfLongrightarrow{\bfRelbar\bfjoinrel\bfRightarrow}
+\def\bflongrightarrow{\bfrelbar\bfjoinrel\bfrightarrow}
+\def\bflongmapsto{\bfmapstochar\bflongrightarrow}
+\def\bflongleftarrow{\bfleftarrow\bfjoinrel\bfrelbar}
+\def\bfLongleftarrow{\bfLeftarrow\bfjoinrel\bfRelbar}
+\def\bflongleftrightarrow{\bfleftarrow\bfjoinrel\bfrightarrow}
+\def\bfLongleftrightarrow{\bfLeftarrow\bfjoinrel\bfRightarrow}
+\def\bfiff{\;\bfLongleftrightarrow\;}
+
+
+\mathchardef\bfldotp="683A
+\def\bfldots{\mathinner{\bfldotp\bfldotp\bfldotp}}
+\let\bfdots=\bfldots
+\mathchardef\bfstar="283F
+\mathchardef\bfpartial="0840
+\mathchardef\bfflat="085B
+\mathchardef\bfnatural="085C
+\mathchardef\bfsharp="085D
+\mathchardef\bfsmile="385E
+\mathchardef\bffrown="385F
+\mathchardef\bfell="0860
+\mathchardef\bfimath="087B
+\mathchardef\bfjmath="087C
+\mathchardef\bfwp="087D
+%%
+%% cmsy symbols
+\mathchardef\bfcdot="2901
+\mathchardef\bfcdotp="6201
+\def\bfcdots{\mathinner{\bfcdotp\bfcdotp\bfcdotp}}
+\mathchardef\bftimes="2902
+\mathchardef\bfast="2903
+\mathchardef\bfdiv="2904
+\mathchardef\bfdiamond="2905
+\mathchardef\bfpm="2906
+\mathchardef\bfmp="2907
+\mathchardef\bfoplus="2908
+\mathchardef\bfominus="2909
+\mathchardef\bfotimes="290A
+\mathchardef\bfoslash="290B
+\mathchardef\bfodot="290C
+\mathchardef\bfbigcirc="290D
+\mathchardef\bfcirc="290E
+\mathchardef\bfbullet="290F
+\mathchardef\bfasymp="3910
+\mathchardef\bfequiv="3911
+\mathchardef\bfsubseteq="3912
+\mathchardef\bfsupseteq="3913
+\mathchardef\bfleq="3914 \let\bfle=\bfleq
+\mathchardef\bfgeq="3915 \let\bfge=\bfgeq
+\mathchardef\bfpreceq="3916
+\mathchardef\bfsucceq="3917
+\mathchardef\bfsim="3918
+\mathchardef\bfapprox="3919
+\mathchardef\bfsubset="391A
+\mathchardef\bfsupset="391B
+\mathchardef\bfll="391C
+\mathchardef\bfgg="391D
+\mathchardef\bfprec="391E
+\mathchardef\bfsucc="391F
+\mathchardef\bfleftarrow="3920 \let\bfgets=\bfleftarrow
+\mathchardef\bfrightarrow="3921 \let\bfto=\bfrightarrow
+\mathchardef\bfuparrow="3922
+\mathchardef\bfdownarrow="3923
+\mathchardef\bfleftrightarrow="3924
+\mathchardef\bfnearrow="3925
+\mathchardef\bfsearrow="3926
+\mathchardef\bfsimeq="3927
+\mathchardef\bfLeftarrow="3928
+\mathchardef\bfRightarrow="3929
+\mathchardef\bfUparrow="392A
+\mathchardef\bfDownarrow="392B
+\mathchardef\bfLeftrightarrow="392C
+\mathchardef\bfnwarrow="392D
+\mathchardef\bfswarrow="392E
+\mathchardef\bfpropto="392F
+\mathchardef\bfprime="0930
+\mathchardef\bfinfty="0931
+\mathchardef\bfin="3932
+\mathchardef\bfni="3933
+\mathchardef\bfbigtriangle="2934
+\mathchardef\bfbigtriangledown="2935
+\mathchardef\bfnot="3936
+\mathchardef\bfmapstochar="3937
+\def\bfmapsto{\bfmapstochar\bfrightarrow}
+\mathchardef\bfforall="0938
+\mathchardef\bfexists="0939
+\mathchardef\bfneg="093A \let\bflnot=\bfneg
+\mathchardef\bfemptyset="093B
+\mathchardef\bfRe="093C
+\mathchardef\bfIm="093D
+\mathchardef\bftop="093E
+\mathchardef\bfbot="093F \let\bfperp=\bfbot
+\mathchardef\bfaleph="0940
+\mathchardef\bfcup="295B
+\mathchardef\bfcap="295C
+\mathchardef\bfuplus="295D
+\mathchardef\bfwedge="295E \let\bfland=\bfwedge
+\mathchardef\bfvee="295F \let\bflor=\bfvee
+\mathchardef\bfvdash="3960
+\mathchardef\bfdashv="2961
+\mathchardef\bflfloor="4962
+\mathchardef\bfrfloor="5963
+\mathchardef\bflceil="4964
+\mathchardef\bfrceil="5965
+\mathchardef\bflbrace="4966
+\mathchardef\bfrbrace="5967
+\mathchardef\bflangle="4968
+\mathchardef\bfrangle="5969
+\mathchardef\bfmid="396A
+\mathchardef\bfparallel="396B
+\mathchardef\bfVert="296B
+\mathchardef\bfupdownarrow="396C
+\mathchardef\bfUpdownarrow="396D
+\mathchardef\bfbackslash="096E
+\mathchardef\bfwr="296F
+\def\bfsurd{{\mathchar"1970}}
+\mathchardef\bfamalg="2971
+\mathchardef\bfnabla="0972
+\mathchardef\bfsmallint="1973
+\mathchardef\bfsqcup="2974
+\mathchardef\bfsqcap="2975
+\mathchardef\bfsqsubseteq="3976
+\mathchardef\bfsqsupseteq="3977
+\mathchardef\bfS="0978
+\mathchardef\bfdagger="2979
+\mathchardef\bfddagger="297A
+\mathchardef\bfP="097B
+\mathchardef\bfclubsuit="097C
+\mathchardef\bfdiamondsuit="097D
+\mathchardef\bfheartsuit="097E
+\mathchardef\bfspadesuit="097F
+%%
+~
diff --git a/obsolete/macros/plain/contrib/fontch20/fontch.tex b/obsolete/macros/plain/contrib/fontch20/fontch.tex
new file mode 100644
index 0000000000..976d301684
--- /dev/null
+++ b/obsolete/macros/plain/contrib/fontch20/fontch.tex
@@ -0,0 +1,1201 @@
+%% fontch.tex Macros for easily changing fonts and sizes in plain TeX %%
+%% V2.0 2007/09/04
+%% Rodrigo Medina (IVIC) rmedina@ivic.ve
+%% Suggested location: .../texmf/tex/plain/fontch/
+%% Licence: LPPL
+%%
+%%%%%% Components
+%% The fontch V2.0 package is composed of the following files
+%% README.txt -- Explanation file (has essentially this information)
+%% fontch.tex -- main macros
+%% bsymbols.tex -- macros for boldface symbols
+%% TS1mac.tex -- macros for the TS1 companion symbols
+%% DSmac.tex -- auxiliary file for the DStroke option
+%%%%%% Description
+%%
+%% Fontch implements a mechanism for changing type and size of fonts. One
+%% can write text and math at main sizes of 8, 10, 12, 14, 20 and 24 points.
+%% Fonts of sizes 5, 6, 7 and 9 points are used in subscripts and subscripts of %% subscripts of other main sizes.
+%% A single command makes all the changes needed for changing font smoothly.
+%% In addition fontch gives support to:
+%% - boldface math-italic and boldface math symbols,
+%% - T1 Latin Modern fonts,
+%% - TS1 companion symbol fonts.
+%% - AMS fonts for boldface math,
+%% - Double Stroke fonts for blackboard bold symbols
+%%
+%%%%%% Usage
+%%
+%% For using fontch.tex with the original TeX OT1 fonts (Computer Modern)
+%% just put at the beginning of the document:
+%% \input fontch.tex
+%%
+%% The file bsymbols.tex provides macro definitions for boldface versions
+%% of math symbols. For using it just input the file where you need it.
+%%
+%% The fontch package has four options for handling different kinds of fonts:
+%%
+%% - LMTone for Latin Modern T1 fonts.
+%% - LMTSone for the TS1 companion symbol font.
+%% - AMSfont for AMS fonts used for boldface math.
+%% - DStroke for Doublestroke fonts providing blackboard-boldface symbols.
+%%
+%% The four options are independent. They are activated by setting the
+%% corresponding variable before calling fontch.tex. For example for
+%% activating all the four options and using the macros for bold math
+%% put at the beginning of the document:
+%%
+%% \let\AMSfont\relax
+%% \let\DStroke\relax
+%% \let\LMTone\relax
+%% \let\LMTSone\relax
+%% \input fontch.tex
+%% \input bsymbols.tex
+%%
+%%
+%%%%%% NOTES:
+%% (1) There is one modification of the standard behavior of plain TeX. Plain
+%% TeX defines for the font #3 the same font (tenex) for text, script and
+%% scriptscript. That is awfull. The fontch package uses sevenex for
+%% script and fiveex for scriptscript, as for the other fonts.
+%%
+%% (2) The use of files il1-t1.tcx or il2-t1.tcx is recommended together
+%% with the LMT1 fonts.
+%%
+%% (3) Only the cmcs, cmmib, cmbsy and cmex AMS fonts are supported. These
+%% are used for small caps and for boldface math-italic and boldface
+%% greek symbols. The other AMS fonts like the Euler, Cyrillic and extra
+%% symbols are not supported.
+%%
+%% (4) Only the roman Doublestroke font is supported. The sans serif version
+%% is not supported.
+%%
+%% (5) There are two main uses of boldface math. One case is the use of
+%% isolated bold characters or symbols inside a formula. For this case
+%% fontch provides bold versions of math synbols and the macro \mb for bold
+%% math-italic characters. The plain TeX macro "\bf" yields roman-bold
+%% characters in math mode. The name of the bold version of a math symbol
+%% is obtained adding the prefix "bf" to the name of the normal symbol. For
+%% example a boldface italic "a" is {\mb a}, a boldface roman "P" is
+%% {\bf P}, a boldface \Sigma is \bfSigma, a boldface \iff is \bfiff.
+%%
+%% The other case is when one wants to write a complete formula in
+%% boldface, for example inside a title. For this case fontch has the
+%% macro \setmathbold that changes the font families 1 (cmmi) and 2 (cmsy)
+%% to the bold versions cmmib and cmmbsy. The macro \unsetmathbold resets
+%% the families 1 and 2 to their original values. These macros should be
+%% put before and after the formula.
+%%
+%% (6) Usually the macro \setmathbold does not change the whole formula to
+%% boldface. This is due to the fact that in math mode some symbols
+%% come from family #0 (cmr) or #3 (cmex) such as "+" or \int. Fontch
+%% provides macros for the symbols that come from family #0, For
+%% example the bold version of "(" is \bflparen.
+%%
+%% (7) Math symbols of family #3 (cmex) do not have bold versions. In particular
+%% \int, \sum and \prod. Never the less \smallint is of cmsy and does
+%% a bold version.
+%%
+%%%%%%%%% Commands of fontch %%%%%%
+%%
+%%%%%% General Commands
+% \rm -- Roman
+% \it -- Italic
+% \bf -- Boldface
+% \tt -- Teletype
+% \sf -- Sans Serif
+% \sc -- Small Caps
+% \cal -- Calligraphic
+% \mit -- Math Italic
+% \mb -- Math Boldface
+% \bcal -- Boldface calligraphic
+% \oldstyle -- Old style digits
+% \boldstyle -- Boldface old style digits
+% \setmathbold -- set families 1 and 2 to cmmib and cmmbsy
+% \unsetmathbold -- reset families 1 and 2 to cmmi and cmmsy
+% \eightpoint -- Change to small type
+% \tenpoint -- Change to normal type
+% \twelvepoint -- Change to large type
+% \fourteenpoint -- Change to very large type
+% \twentypoint -- Change to huge type
+% \twentyfourpoint -- Change to immense type
+% \doublespace -- Double Space for ten & twelve points
+%
+%%%%%% Macros of bold symbols
+% Symbols that have a keyword
+% bold_keyword = bf + normal_keyword
+%
+% Symbols that do not have a keyword
+% \bfexcl -- !
+% \bflparen -- (
+% \bfrparen -- )
+% \bfplus -- +
+% \bfcomma -- ,
+% \bfcolon -- :
+% \bfsemicolon -- ;
+% \bfequal -- =
+% \bflbraket -- [
+% \bflt -- <
+% \bfslash -- /
+% \bfgt -- >
+% \bfminus -- -
+% \bfvert -- |
+% \bfVert -- \|
+%
+%%%%%% Command of the DStroke option
+% \ds -- Double Stroke
+%
+%%%%%% Commands of the LMT1 option
+%% Redefined Plain TeX Commands
+% \i , \j , \ae , \AE, \oe , \OE , \o , \O ,
+% \ss , \SS , \aa , \AA , \l , \L ,
+% \Gamma , \Delta , \Theta , \Lambda , \Xi , \Pi ,
+% \Sigma , \Upsilon , \Phi , \Psi , \Omega, \hbar
+%%
+%% New T1 Commands for non-latin1 characters
+% \lh -- l'
+% \Lh -- L'
+% \dh -- d'
+% \th -- t'
+% \dbar -- d slash
+% \Edh
+% \edh
+% \ij
+% \IJ
+% \nj
+% \NJ
+% \thorn
+% \Thorn
+% \smallzero
+% \lguille -- left guillemot (does not appear in il1-t1.tcx)
+% \rguille -- right guillemot (does not appear in il1-t1.tcx)
+% \vispace -- visible space
+%%
+%% Redefined plain TeX accents
+% \` , \' , \^ , \~ , \" , \H , \v , \u , \= , \. , \b , \c
+%% New T1 accents
+% \r -- ring accent
+% \k -- ogonek
+%%
+%% Redefined plain TeX math-accents
+% \acute,\grave,\ddot,\tilde,\bar,\breve,\check,\hat,\dot
+%% New T1 math-accent
+% \ring
+%%
+%%%%% Commands of the LMTS1 option %%
+%% Text companion symbols TS1 %%
+% \tcchar{#1} -- Character of TS1 table
+%% Redefined plain TeX commands
+% \t{#1} -- tie-after-accent
+% \P -- pilcrow
+% \S -- section
+% \dag -- dagger
+% \ddag -- double dagger
+% \copyright
+%% Most TS1 symbols (in increasing charcode order)
+% \arrowl -- left arrow
+% \arrowr -- right arrow
+% \blank
+% \dollar
+% \caster -- centered asterisk
+% \sequals -- short equals
+% \anglel
+% \angler
+% \mho
+% \bigcircle
+% \Ohm
+% \bbracketl -- left double square bracket
+% \bbracketr -- right double square bracket
+% \arrowu -- up arrow
+% \arrowd -- down arrow
+% \textstar -- star
+% \born
+% \died
+% \leaf
+% \married
+% \music
+% \doublevert -- Double vertical bar
+% \perthousand
+% \bull -- bullet (is in manmac)
+% \centigrade
+% \olddollar
+% \oldcent
+% \florin
+% \Colon
+% \won
+% \naira
+% \guarani
+% \peso
+% \lira
+% \recipe
+% \interrobang -- Question+Exclamation
+% \gnaborretni -- Question+Exclamation upsidedown
+% \dong
+% \TM
+% \pertenth -- per ten thousand
+% \npilcrow -- narrow pilcrow
+% \baht
+% \numero
+% \abzueglich
+% \aestimated -- Big e
+% \openbull
+% \SM
+% \qbrackl -- left quill bracket
+% \qbrackr -- right quill bracket
+% \cent
+% \sterling
+% \currency
+% \yen
+% \brokenvert -- broken vertical bar
+% \feminine
+% \copyleft
+% \lognot -- logical not
+% \circledP
+% \registered
+% \degree
+% \plusminus
+% \twoup
+% \threeup
+% \micro
+% \centereddot
+% \reference
+% \oneup
+% \masculine
+% \root
+% \onequarter
+% \onehalf
+% \threequarters
+% \euro
+% \texttimes
+% \textdiv
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Modifications from version 1.3
+%%
+%% Version 2.0 is a mayor revision.
+%%
+%% There are many improvements such as
+%% -- Proper handling of smallcaps
+%% -- Support for bold-math
+%% -- Support for AMS fonts
+%% -- Support for blackboard boldface
+%% -- Correction of bugs and scaling.
+%%
+%% The behavior should be compatible with V1.3 except for
+%% case explained in Note (1).
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\wlog{File: fontch.tex
+ [v2.0 (2007/09/04) font change package for plain TeX]}
+%
+%% Math fonts, valid for any option
+%% five points fonts (defined in plain.tex) %%
+%% six points fonts %%
+\font\sixi=cmmi6
+\font\sixsy=cmsy6
+\skewchar\sixi='177
+\skewchar\sixsy='60
+%% seven points fonts (defined in plain.tex) %%
+%% eight points fonts %%
+\font\eighti=cmmi8
+\font\eightsy=cmsy8
+\skewchar\eighti='177
+\skewchar\eightsy='60
+%% nine points fonts %%
+\font\ninei=cmmi9
+\font\ninesy=cmsy9
+\skewchar\ninei='177
+\skewchar\ninesy='60
+%% ten points fonts %%
+\font\tenmib=cmmib10
+\font\tenbsy=cmbsy10
+\skewchar\tenmib='177
+\skewchar\tenbsy='60
+%% twelve points fonts %%
+\font\twelvei=cmmi12
+\font\twelvesy=cmsy10 scaled 1200
+\font\twelveex=cmex10 scaled 1200
+\font\twelvemib=cmmib10 scaled 1200
+\font\twelvebsy=cmbsy10 scaled 1200
+\skewchar\twelvei='177
+\skewchar\twelvemib='177
+\skewchar\twelvesy='60
+\skewchar\twelvebsy='60
+%% fourteen points fonts %%
+\font\fourteeni=cmmi12 scaled 1167
+\font\fourteensy=cmsy10 scaled 1400
+\font\fourteenex=cmex10 scaled 1400
+\font\fourteenmib=cmmib10 scaled 1400
+\font\fourteenbsy=cmbsy10 scaled 1400
+\skewchar\fourteeni='177
+\skewchar\fourteenmib='177
+\skewchar\fourteensy='60
+\skewchar\fourteenbsy='60
+%% twenty points fonts %%
+\font\twentyi=cmmi12 scaled 1667
+\font\twentysy=cmsy10 scaled 2000
+\font\twentyex=cmex10 scaled 2000
+\font\twentymib=cmmib10 scaled 2000
+\font\twentybsy=cmbsy10 scaled 2000
+\skewchar\twentyi='177
+\skewchar\twentymib='177
+\skewchar\twentysy='60
+\skewchar\twentybsy='60
+%% twentyfour points fonts %%
+\font\twentyfouri=cmmi12 scaled 2000
+\font\twentyfoursy=cmsy10 scaled 2400
+\font\twentyfourex=cmex10 scaled 2400
+\font\twentyfourmib=cmmib10 scaled 2400
+\font\twentyfourbsy=cmsy10 scaled 2400
+\skewchar\twentyfouri='177
+\skewchar\twentyfourmib='177
+\skewchar\twentyfoursy='60
+\skewchar\twentyfourbsy='60
+%%
+%% big... operators
+\newdimen\bigsize
+\newdimen\Bigsize
+\newdimen\biggsize
+\newdimen\Biggsize
+%% Make @ visible
+\catcode`\@=11
+\def\big#1{{\hbox{$\left#1\vbox to \bigsize{}\right.\n@space$}}}
+\def\Big#1{{\hbox{$\left#1\vbox to \Bigsize{}\right.\n@space$}}}
+\def\bigg#1{{\hbox{$\left#1\vbox to \biggsize{}\right.\n@space$}}}
+\def\Bigg#1{{\hbox{$\left#1\vbox to \Biggsize{}\right.\n@space$}}}
+%%
+\ifx\AMSfont\@undefined%
+{}
+\else
+\let\ifAMS=\relax
+\fi
+%%
+\ifx\DStroke\@undefined%
+{}
+\else
+\let\ifDS=\relax
+\fi
+%%
+\ifx\LMTone\@undefined%
+{}
+\else
+\let\ifLMT=\relax
+\fi
+\ifx\LMTSone\@undefined%
+{}
+\else
+\let\ifLMTS=\relax
+\fi
+%%
+%% Make @ invisible
+\catcode`\@=12
+%%
+\ifx\ifAMS\relax%
+%% AMS option activated %%
+\immediate\write16{*** AMS option activated. AMS fonts are used ***}
+%% extension font
+\font\sevenex=cmex7
+\font\eightex=cmex8
+\font\nineex=cmex9
+\font\fiveex=cmex7 scaled 714
+\font\sixex=cmex7 scaled 857
+%% math-italic boldface font
+\font\fivemib=cmmib5
+\font\sixmib=cmmib6
+\font\sevenmib=cmmib7
+\font\eightmib=cmmib8
+\font\ninemib=cmmib9
+%% boldface symbols fonts
+\font\fivebsy=cmbsy5
+\font\sixbsy=cmbsy6
+\font\sevenbsy=cmbsy7
+\font\eightbsy=cmbsy8
+\font\ninebsy=cmbsy9
+\else
+%% extension font
+\font\fiveex=cmex10 scaled 500
+\font\sixex=cmex10 scaled 600
+\font\sevenex=cmex10 scaled 700
+\font\eightex=cmex10 scaled 800
+\font\nineex=cmex10 scaled 900
+%% math-italic boldface font
+\font\fivemib=cmmib10 scaled 500
+\font\sixmib=cmmib10 scaled 600
+\font\sevenmib=cmmib10 scaled 700
+\font\eightmib=cmmib10 scaled 800
+\font\ninemib=cmmib10 scaled 900
+%% boldface symbols fonts
+\font\fivebsy=cmbsy10 scaled 500
+\font\sixbsy=cmbsy10 scaled 600
+\font\sevenbsy=cmbsy10 scaled 700
+\font\eightbsy=cmbsy10 scaled 800
+\font\ninebsy=cmbsy10 scaled 900
+\fi
+%% End of AMS option
+\skewchar\fivemib='177
+\skewchar\sixmib='177
+\skewchar\sevenmib='177
+\skewchar\eightmib='177
+\skewchar\ninemib='177
+\skewchar\fivebsy='60
+\skewchar\sixbsy='60
+\skewchar\sevenbsy='60
+\skewchar\eightbsy='60
+\skewchar\ninebsy='60
+%%
+\ifx\ifLMT\relax%
+%% T1 option activated %
+\immediate\write16{*** T1 option activated. cork-LM fonts are used ***}
+%% Replace CM text fonts %%
+%% ten points fonts %%
+\font\tenrm=cork-lmr10
+\font\tenbf=cork-lmbx10
+\font\tensl=cork-lmro10
+\font\tentt=cork-lmtt10
+\font\tenit=cork-lmri10
+\font\tenss=cork-lmss10
+\font\tencsc=cork-lmcsc10
+%% eight points fonts %%
+\font\eightrm=cork-lmr8
+\font\eightbf=cork-lmbx8
+\font\eightsl=cork-lmro8
+\font\eighttt=cork-lmtt8
+\font\eightit=cork-lmri8
+\font\eightss=cork-lmss8
+\font\eightcsc=cork-lmcsc10 at 8pt
+%% five points fonts %%
+\font\fiverm=cork-lmr5
+\font\fivebf=cork-lmbx5
+\font\fivess=cork-lmss8 scaled 625
+%% six points fonts %%
+\font\sixrm=cork-lmr6
+\font\sixbf=cork-lmbx6
+\font\sixss=cork-lmss8 scaled 750
+%% seven points fonts %%
+\font\sevenrm=cork-lmr7
+\font\sevenbf=cork-lmbx7
+\font\sevenss=cork-lmss8 scaled 875
+%% nine points fonts %%
+\font\ninerm=cork-lmr9
+\font\ninebf=cork-lmbx9
+\font\niness=cork-lmss9
+%% twelve points fonts %%
+\font\twelverm=cork-lmr12
+\font\twelvebf=cork-lmbx12
+\font\twelvesl=cork-lmro12
+\font\twelvett=cork-lmtt12
+\font\twelveit=cork-lmri12
+\font\twelvess=cork-lmss12
+\font\twelvecsc=cork-lmcsc10 scaled 1200
+%% fourteen points fonts %%
+\font\fourteenrm=cork-lmr12 scaled 1167
+\font\fourteenbf=cork-lmbx12 scaled 1167
+\font\fourteensl=cork-lmro12 scaled 1167
+\font\fourteentt=cork-lmtt12 scaled 1167
+\font\fourteenit=cork-lmri12 scaled 1167
+\font\fourteenss=cork-lmss12 scaled 1167
+\font\fourteencsc=cork-lmcsc10 scaled 1400
+%% twenty points fonts %%
+\font\twentyrm=cork-lmr12 scaled 1667
+\font\twentybf=cork-lmbx12 scaled 1667
+\font\twentysl=cork-lmro12 scaled 1667
+\font\twentytt=cork-lmtt12 scaled 1667
+\font\twentyit=cork-lmri12 scaled 1667
+\font\twentyss=cork-lmss12 scaled 1667
+\font\twentycsc=cork-lmcsc10 scaled 2000
+%% twentyfour points fonts %%
+\font\twentyfourrm=cork-lmr12 scaled 2000
+\font\twentyfourbf=cork-lmbx12 scaled 2000
+\font\twentyfoursl=cork-lmro12 scaled 2000
+\font\twentyfourtt=cork-lmtt12 scaled 2000
+\font\twentyfourit=cork-lmri12 scaled 2000
+\font\twentyfourss=cork-lmss12 scaled 2000
+\font\twentyfourcsc=cork-lmcsc10 scaled 2400
+%%
+%% Redefinition of character commands %%
+\chardef\i="19 \chardef\j="1A
+\chardef\ae="E6 \chardef\AE="C6
+\chardef\oe="F7 \chardef\OE="D7
+\chardef\o="F8 \chardef\O="D8
+\chardef\ss="FF \chardef\SS="DF
+\chardef\aa="E5 \chardef\AA="C5
+\chardef\l="AA \chardef\L="8A
+\mathchardef\Gamma="0100
+\mathchardef\Delta="0101
+\mathchardef\Theta="0102
+\mathchardef\Lambda="0103
+\mathchardef\Xi="0104
+\mathchardef\Pi="0105
+\mathchardef\Sigma="0106
+\mathchardef\Upsilon="0107
+\mathchardef\Phi="0108
+\mathchardef\Psi="0109
+\mathchardef\Omega="010A
+\def\hbar{{\mathchar"7009\mkern-9muh}}
+
+%% New character commands %%
+\chardef\lh="A9 \chardef\Lh="89
+\chardef\dh="A4 \chardef\th="B4
+\chardef\dbar="9E
+\chardef\Edh="D0 \chardef\edh="F0
+\chardef\ij="BC \chardef\IJ="9C
+\chardef\nj="AD \chardef\NJ="8D
+\chardef\thorn="FE \chardef\Thorn="DE
+\chardef\smallzero="18
+\chardef\lguille="E \chardef\rguille="F
+\chardef\vispace="20
+
+%% Redefinition of accents and new accents%%
+\def\`#1{{\accent0 #1}}
+\def\'#1{{\accent1 #1}}
+\def\^#1{{\accent2 #1}}
+\def\~#1{{\accent3 #1}}
+\def\"#1{{\accent4 #1}}
+\def\H#1{{\accent5 #1}}
+%New ring accent
+\def\r#1{{\accent6 #1}}
+\def\v#1{{\accent7 #1}}
+\def\u#1{{\accent8 #1}}
+\def\=#1{{\accent9 #1}}
+\def\.#1{{\accent10 #1}}
+\def\b#1{\oalign{#1\crcr\hidewidth
+ \vbox to.2ex{\hbox{\char9}\vss}\hidewidth}}
+\def\c#1{\setbox0=\hbox{#1}\ifdim\ht0=1ex \accent"B #1%
+ \else{\ooalign{\unhbox0\crcr\hidewidth\char"B\hidewidth}}\fi}
+%New ogonek accent
+\def\k#1{\setbox0=\hbox{#1}\ifdim\ht0=1ex \accent"C #1%
+ \else{\ooalign{\unhbox0\crcr\hidewidth\char"C\hidewidth}}\fi}
+\def\textdiv{{\tcchar{"F6}}}
+%
+%% Redefinition of math-accents %%
+\def\acute{\mathaccent"7001 }
+\def\grave{\mathaccent"7000 }
+\def\ddot{\mathaccent"7004 }
+\def\tilde{\mathaccent"7003 }
+\def\bar{\mathaccent"7009 }
+\def\breve{\mathaccent"7008 }
+\def\check{\mathaccent"7007 }
+\def\hat{\mathaccent"7002 }
+\def\dot{\mathaccent"700A }
+%New ring math-accent
+\def\ring{\mathaccent"7006 }
+%
+%% Activate non-ascii letters %%
+% upper case
+\catcode`\^^80=11 \uccode`\^^80=`\^^80 \lccode`\^^80=`\^^a0
+\catcode`\^^81=11 \uccode`\^^81=`\^^81 \lccode`\^^81=`\^^a1
+\catcode`\^^82=11 \uccode`\^^82=`\^^82 \lccode`\^^82=`\^^a2
+\catcode`\^^83=11 \uccode`\^^83=`\^^83 \lccode`\^^83=`\^^a3
+\catcode`\^^84=11 \uccode`\^^84=`\^^84 \lccode`\^^84=`\^^a4
+\catcode`\^^85=11 \uccode`\^^85=`\^^85 \lccode`\^^85=`\^^a5
+\catcode`\^^86=11 \uccode`\^^86=`\^^86 \lccode`\^^86=`\^^a6
+\catcode`\^^87=11 \uccode`\^^87=`\^^87 \lccode`\^^87=`\^^a7
+\catcode`\^^88=11 \uccode`\^^88=`\^^88 \lccode`\^^88=`\^^a8
+\catcode`\^^89=11 \uccode`\^^89=`\^^89 \lccode`\^^89=`\^^a9
+\catcode`\^^8a=11 \uccode`\^^8a=`\^^8a \lccode`\^^8a=`\^^aa
+\catcode`\^^8b=11 \uccode`\^^8b=`\^^8b \lccode`\^^8b=`\^^ab
+\catcode`\^^8c=11 \uccode`\^^8c=`\^^8c \lccode`\^^8c=`\^^ac
+\catcode`\^^8d=11 \uccode`\^^8d=`\^^8d \lccode`\^^8d=`\^^ad
+\catcode`\^^8e=11 \uccode`\^^8e=`\^^8e \lccode`\^^8e=`\^^ae
+\catcode`\^^8f=11 \uccode`\^^8f=`\^^8f \lccode`\^^8f=`\^^af
+\catcode`\^^90=11 \uccode`\^^90=`\^^90 \lccode`\^^90=`\^^b0
+\catcode`\^^91=11 \uccode`\^^91=`\^^91 \lccode`\^^91=`\^^b1
+\catcode`\^^92=11 \uccode`\^^92=`\^^92 \lccode`\^^92=`\^^b2
+\catcode`\^^93=11 \uccode`\^^93=`\^^93 \lccode`\^^93=`\^^b3
+\catcode`\^^94=11 \uccode`\^^94=`\^^94 \lccode`\^^94=`\^^b4
+\catcode`\^^95=11 \uccode`\^^95=`\^^95 \lccode`\^^95=`\^^b5
+\catcode`\^^96=11 \uccode`\^^96=`\^^96 \lccode`\^^96=`\^^b6
+\catcode`\^^97=11 \uccode`\^^97=`\^^97 \lccode`\^^97=`\^^b7
+\catcode`\^^98=11 \uccode`\^^98=`\^^98 \lccode`\^^98=`\^^b8
+\catcode`\^^99=11 \uccode`\^^99=`\^^99 \lccode`\^^99=`\^^b9
+\catcode`\^^9a=11 \uccode`\^^9a=`\^^9a \lccode`\^^9a=`\^^ba
+\catcode`\^^9b=11 \uccode`\^^9b=`\^^9b \lccode`\^^9b=`\^^bb
+\catcode`\^^9c=11 \uccode`\^^9c=`\^^9c \lccode`\^^9c=`\^^bc
+\catcode`\^^c0=11 \uccode`\^^c0=`\^^c0 \lccode`\^^c0=`\^^e0
+\catcode`\^^c1=11 \uccode`\^^c1=`\^^c1 \lccode`\^^c1=`\^^e1
+\catcode`\^^c2=11 \uccode`\^^c2=`\^^c2 \lccode`\^^c2=`\^^e2
+\catcode`\^^c3=11 \uccode`\^^c3=`\^^c3 \lccode`\^^c3=`\^^e3
+\catcode`\^^c4=11 \uccode`\^^c4=`\^^c4 \lccode`\^^c4=`\^^e4
+\catcode`\^^c5=11 \uccode`\^^c5=`\^^c5 \lccode`\^^c5=`\^^e5
+\catcode`\^^c6=11 \uccode`\^^c6=`\^^c6 \lccode`\^^c6=`\^^e6
+\catcode`\^^c7=11 \uccode`\^^c7=`\^^c7 \lccode`\^^c7=`\^^e7
+\catcode`\^^c8=11 \uccode`\^^c8=`\^^c8 \lccode`\^^c8=`\^^e8
+\catcode`\^^c9=11 \uccode`\^^c9=`\^^c9 \lccode`\^^c9=`\^^e9
+\catcode`\^^ca=11 \uccode`\^^ca=`\^^ca \lccode`\^^ca=`\^^ea
+\catcode`\^^cb=11 \uccode`\^^cb=`\^^cb \lccode`\^^cb=`\^^eb
+\catcode`\^^cc=11 \uccode`\^^cc=`\^^cc \lccode`\^^cc=`\^^ec
+\catcode`\^^cd=11 \uccode`\^^cd=`\^^cd \lccode`\^^cd=`\^^ed
+\catcode`\^^ce=11 \uccode`\^^ce=`\^^ce \lccode`\^^ce=`\^^ee
+\catcode`\^^cf=11 \uccode`\^^cf=`\^^cf \lccode`\^^cf=`\^^ef
+\catcode`\^^d0=11 \uccode`\^^d0=`\^^d0 \lccode`\^^d0=`\^^f0
+\catcode`\^^d1=11 \uccode`\^^d1=`\^^d1 \lccode`\^^d1=`\^^f1
+\catcode`\^^d2=11 \uccode`\^^d2=`\^^d2 \lccode`\^^d2=`\^^f2
+\catcode`\^^d3=11 \uccode`\^^d3=`\^^d3 \lccode`\^^d3=`\^^f3
+\catcode`\^^d4=11 \uccode`\^^d4=`\^^d4 \lccode`\^^d4=`\^^f4
+\catcode`\^^d5=11 \uccode`\^^d5=`\^^d5 \lccode`\^^d5=`\^^f5
+\catcode`\^^d6=11 \uccode`\^^d6=`\^^d6 \lccode`\^^d6=`\^^f6
+\catcode`\^^d7=11 \uccode`\^^d7=`\^^d7 \lccode`\^^d7=`\^^f7
+\catcode`\^^d8=11 \uccode`\^^d8=`\^^d8 \lccode`\^^d8=`\^^f8
+\catcode`\^^d9=11 \uccode`\^^d9=`\^^d9 \lccode`\^^d9=`\^^f9
+\catcode`\^^da=11 \uccode`\^^da=`\^^da \lccode`\^^da=`\^^fa
+\catcode`\^^db=11 \uccode`\^^db=`\^^db \lccode`\^^db=`\^^fb
+\catcode`\^^dc=11 \uccode`\^^dc=`\^^dc \lccode`\^^dc=`\^^fc
+\catcode`\^^dd=11 \uccode`\^^dd=`\^^dd \lccode`\^^dd=`\^^fd
+\catcode`\^^de=11 \uccode`\^^de=`\^^de \lccode`\^^de=`\^^fe
+\catcode`\^^df=11 \uccode`\^^df=`\^^df \lccode`\^^df=`\^^ff
+% Lower case
+\catcode`\^^a0=11 \uccode`\^^a0=`\^^80 \lccode`\^^a0=`\^^a0
+\catcode`\^^a1=11 \uccode`\^^a1=`\^^81 \lccode`\^^a1=`\^^a1
+\catcode`\^^a2=11 \uccode`\^^a2=`\^^82 \lccode`\^^a2=`\^^a2
+\catcode`\^^a3=11 \uccode`\^^a3=`\^^83 \lccode`\^^a3=`\^^a3
+\catcode`\^^a4=11 \uccode`\^^a4=`\^^84 \lccode`\^^a4=`\^^a4
+\catcode`\^^a5=11 \uccode`\^^a5=`\^^85 \lccode`\^^a5=`\^^a5
+\catcode`\^^a6=11 \uccode`\^^a6=`\^^86 \lccode`\^^a6=`\^^a6
+\catcode`\^^a7=11 \uccode`\^^a7=`\^^87 \lccode`\^^a7=`\^^a7
+\catcode`\^^a8=11 \uccode`\^^a8=`\^^88 \lccode`\^^a8=`\^^a8
+\catcode`\^^a9=11 \uccode`\^^a9=`\^^89 \lccode`\^^a9=`\^^a9
+\catcode`\^^aa=11 \uccode`\^^aa=`\^^8a \lccode`\^^aa=`\^^aa
+\catcode`\^^ab=11 \uccode`\^^ab=`\^^8b \lccode`\^^ab=`\^^ab
+\catcode`\^^ac=11 \uccode`\^^ac=`\^^8c \lccode`\^^ac=`\^^ac
+\catcode`\^^ad=11 \uccode`\^^ad=`\^^8d \lccode`\^^ad=`\^^ad
+\catcode`\^^ae=11 \uccode`\^^ae=`\^^8e \lccode`\^^ae=`\^^ae
+\catcode`\^^af=11 \uccode`\^^af=`\^^8f \lccode`\^^af=`\^^af
+\catcode`\^^b0=11 \uccode`\^^b0=`\^^90 \lccode`\^^b0=`\^^b0
+\catcode`\^^b1=11 \uccode`\^^b1=`\^^91 \lccode`\^^b1=`\^^b1
+\catcode`\^^b2=11 \uccode`\^^b2=`\^^92 \lccode`\^^b2=`\^^b2
+\catcode`\^^b3=11 \uccode`\^^b3=`\^^93 \lccode`\^^b3=`\^^b3
+\catcode`\^^b4=11 \uccode`\^^b4=`\^^94 \lccode`\^^b4=`\^^b4
+\catcode`\^^b5=11 \uccode`\^^b5=`\^^95 \lccode`\^^b5=`\^^b5
+\catcode`\^^b6=11 \uccode`\^^b6=`\^^96 \lccode`\^^b6=`\^^b6
+\catcode`\^^b7=11 \uccode`\^^b7=`\^^97 \lccode`\^^b7=`\^^b7
+\catcode`\^^b8=11 \uccode`\^^b8=`\^^98 \lccode`\^^b8=`\^^b8
+\catcode`\^^b9=11 \uccode`\^^b9=`\^^99 \lccode`\^^b9=`\^^b9
+\catcode`\^^ba=11 \uccode`\^^ba=`\^^9a \lccode`\^^ba=`\^^ba
+\catcode`\^^bb=11 \uccode`\^^bb=`\^^9b \lccode`\^^bb=`\^^bb
+\catcode`\^^e0=11 \uccode`\^^e0=`\^^c0 \lccode`\^^e0=`\^^e0
+\catcode`\^^e1=11 \uccode`\^^e1=`\^^c1 \lccode`\^^e1=`\^^e1
+\catcode`\^^e2=11 \uccode`\^^e2=`\^^c2 \lccode`\^^e2=`\^^e2
+\catcode`\^^e3=11 \uccode`\^^e3=`\^^c3 \lccode`\^^e3=`\^^e3
+\catcode`\^^e4=11 \uccode`\^^e4=`\^^c4 \lccode`\^^e4=`\^^e4
+\catcode`\^^e5=11 \uccode`\^^e5=`\^^c5 \lccode`\^^e5=`\^^e5
+\catcode`\^^e6=11 \uccode`\^^e6=`\^^c6 \lccode`\^^e6=`\^^e6
+\catcode`\^^e7=11 \uccode`\^^e7=`\^^c7 \lccode`\^^e7=`\^^e7
+\catcode`\^^e8=11 \uccode`\^^e8=`\^^c8 \lccode`\^^e8=`\^^e8
+\catcode`\^^e9=11 \uccode`\^^e9=`\^^c9 \lccode`\^^e9=`\^^e9
+\catcode`\^^ea=11 \uccode`\^^ea=`\^^ca \lccode`\^^ea=`\^^ea
+\catcode`\^^eb=11 \uccode`\^^eb=`\^^cb \lccode`\^^eb=`\^^eb
+\catcode`\^^ec=11 \uccode`\^^ec=`\^^cc \lccode`\^^ec=`\^^ec
+\catcode`\^^ed=11 \uccode`\^^ed=`\^^cd \lccode`\^^ed=`\^^ed
+\catcode`\^^ee=11 \uccode`\^^ee=`\^^ce \lccode`\^^ee=`\^^ee
+\catcode`\^^ef=11 \uccode`\^^ef=`\^^cf \lccode`\^^ef=`\^^ef
+\catcode`\^^f0=11 \uccode`\^^f0=`\^^d0 \lccode`\^^f0=`\^^f0
+\catcode`\^^f1=11 \uccode`\^^f1=`\^^d1 \lccode`\^^f1=`\^^f1
+\catcode`\^^f2=11 \uccode`\^^f2=`\^^d2 \lccode`\^^f2=`\^^f2
+\catcode`\^^f3=11 \uccode`\^^f3=`\^^d3 \lccode`\^^f3=`\^^f3
+\catcode`\^^f4=11 \uccode`\^^f4=`\^^d4 \lccode`\^^f4=`\^^f4
+\catcode`\^^f5=11 \uccode`\^^f5=`\^^d5 \lccode`\^^f5=`\^^f5
+\catcode`\^^f6=11 \uccode`\^^f6=`\^^d6 \lccode`\^^f6=`\^^f6
+\catcode`\^^f7=11 \uccode`\^^f7=`\^^d7 \lccode`\^^f7=`\^^f7
+\catcode`\^^f8=11 \uccode`\^^f8=`\^^d8 \lccode`\^^f8=`\^^f8
+\catcode`\^^f9=11 \uccode`\^^f9=`\^^d9 \lccode`\^^f9=`\^^f9
+\catcode`\^^fa=11 \uccode`\^^fa=`\^^da \lccode`\^^fa=`\^^fa
+\catcode`\^^fb=11 \uccode`\^^fb=`\^^db \lccode`\^^fb=`\^^fb
+\catcode`\^^fc=11 \uccode`\^^fc=`\^^dc \lccode`\^^fc=`\^^fc
+\catcode`\^^fd=11 \uccode`\^^fd=`\^^dd \lccode`\^^fd=`\^^fd
+\catcode`\^^fe=11 \uccode`\^^fe=`\^^de \lccode`\^^fe=`\^^fe
+\catcode`\^^ff=11 \uccode`\^^ff=`\^^df \lccode`\^^ff=`\^^ff
+%%End of LMTone option %%
+\else
+%%
+%% Other CM fonts
+%% eight points fonts %%
+\font\eightrm=cmr8
+\font\eightbf=cmbx8
+\font\eightsl=cmsl8
+\font\eighttt=cmtt8
+\font\eightit=cmti8
+\font\eightss=cmss8
+%% five points fonts %%
+\font\fivess=cmss8 scaled 625
+%% six points fonts %%
+\font\sixrm=cmr6
+\font\sixbf=cmbx6
+\font\sixss=cmss8 scaled 750
+%% seven points fonts %%
+\font\sevenss=cmss8 scaled 875
+%% nine points fonts %%
+\font\ninerm=cmr9
+\font\ninebf=cmbx9
+\font\niness=cmss9
+%% ten points fonts (not defined in plain.tex)%%
+\font\tenss=cmss10
+\font\tencsc=cmcsc10
+%% twelve points fonts %%
+\font\twelverm=cmr12
+\font\twelvebf=cmbx12
+\font\twelvesl=cmsl12
+\font\twelvett=cmtt12
+\font\twelveit=cmti12
+\font\twelvess=cmss12
+\font\twelvecsc=cmcsc10 scaled 1200
+%% fourteen points fonts %%
+\font\fourteenrm=cmr12 scaled 1167
+\font\fourteenbf=cmbx12 scaled 1167
+\font\fourteensl=cmsl12 scaled 1167
+\font\fourteentt=cmtt12 scaled 1167
+\font\fourteenit=cmti12 scaled 1167
+\font\fourteenss=cmss12 scaled 1167
+\font\fourteencsc=cmcsc10 scaled 1400
+%% twenty points fonts %%
+\font\twentyrm=cmr12 scaled 1667
+\font\twentybf=cmbx12 scaled 1667
+\font\twentysl=cmsl12 scaled 1667
+\font\twentytt=cmtt12 scaled 1667
+\font\twentyit=cmti12 scaled 1667
+\font\twentyss=cmss12 scaled 1667
+\font\twentycsc=cmcsc10 scaled 2000
+%% twentyfour points fonts %%
+\font\twentyfourrm=cmr12 scaled 2000
+\font\twentyfourbf=cmbx12 scaled 2000
+\font\twentyfoursl=cmsl12 scaled 2000
+\font\twentyfourtt=cmtt12 scaled 2000
+\font\twentyfourit=cmti12 scaled 2000
+\font\twentyfourss=cmss12 scaled 2000
+\font\twentyfourcsc=cmcsc10 scaled 2400
+%% AMS activated
+\ifx\ifAMS\relax%
+%% small caps font
+\font\eightcsc=cmcsc8
+\else
+%% small caps font
+\font\eightcsc=cmcsc10 scaled 800
+\fi
+%% end of AMS option
+\fi
+%% end of LMT1 option
+%% Support of TS1 fonts
+\ifx\ifLMTS\relax%
+\immediate\write16{*** TS1 option activated. ts1-LM fonts are used ***}
+\input TS1mac.tex
+\fi
+%% End of LMTSone option %%
+%% DStroke option %%
+\ifx\ifDS\relax%
+\immediate\write16{*** Doublestroke option activated. DS fonts used ***}
+\font\fiveds=dsrom8 scaled 625
+\font\sixds=dsrom8 scaled 750
+\font\sevends=dsrom8 scaled 875
+\font\eightds=dsrom8
+\font\nineds=dsrom10 scaled 900
+\font\tends=dsrom10
+\font\twelveds=dsrom12
+\font\fourteends=dsrom12 scaled 1167
+\font\twentyds=dsrom12 scaled 1667
+\font\twentyfourds=dsrom12 scaled 2000
+\fi
+%% End of DStroke option %%
+%%
+%% Families defined in plain.tex %%
+%% fam0 rm roman
+%% fam1 i math-italic
+%% fam2 sy symbols
+%% fam3 ex extension fonts
+%% fam4 itfam text-italic
+%% fam5 slfam slanted
+%% fam6 bffam roman boldface
+%% fam7 ttfam teletype
+%%
+%% New family math-italic bold. Must be fam8 %%
+\newfam\mibfam
+%%
+%% New family symbols boldface. Must be fam9 %%
+\newfam\bsyfam
+%%
+%% New family sans serif %%
+\newfam\ssfam
+%%
+%% New family small caps %%
+\newfam\cscfam
+%%
+%% New family doublestroke %%
+\ifx\ifDS\relax%
+\input DSmac.tex
+\fi
+\def\ds{}
+%%
+%% Change to tenpoint fonts %%
+\def\tenpoint{
+\textfont0=\tenrm \scriptfont0=\sevenrm \scriptscriptfont0=\fiverm
+\textfont1=\teni \scriptfont1=\seveni \scriptscriptfont1=\fivei
+\def\mit{\fam1 } \def\oldstyle{\fam1 \teni}
+\textfont2=\tensy \scriptfont2=\sevensy \scriptscriptfont2=\fivesy
+\def\cal{\fam2 }
+\textfont3=\tenex \scriptfont3=\sevenex \scriptscriptfont3=\fiveex
+\textfont\itfam=\tenit
+\textfont\slfam=\tensl
+\textfont\ttfam=\tentt
+\textfont\ssfam=\tenss
+\scriptfont\ssfam=\sevenss \scriptscriptfont\ssfam=\fivess
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf \scriptscriptfont\bffam=\fivebf
+\textfont\cscfam=\tencsc
+\textfont\mibfam=\tenmib
+\scriptfont\mibfam=\sevenmib \scriptscriptfont\bffam=\fivemib
+\textfont\bsyfam=\tenbsy
+\scriptfont\bsyfam=\sevenbsy \scriptscriptfont\bffam=\fivebsy
+\ifx\ifDS\relax%
+\textfont\dsfam=\tends
+\scriptfont\dsfam=\sevends \scriptscriptfont\dsfam=\fiveds
+\def\ds{\fam\dsfam\tends}
+\else
+{}
+\fi
+\ifx\ifLMTS\relax%
+\def\rm{\fam0 \tenrm \let\tcfont=\tencrm}
+\def\it{\fam\itfam\tenit \let\tcfont=\tencit}
+\def\sl{\fam\slfam\tensl \let\tcfont=\tencsl}
+\def\tt{\fam\ttfam\tentt \let\tcfont=\tenctt}
+\def\sf{\fam\ssfam\tenss \let\tcfont=\tencss}
+\def\bf{\fam\bffam\tenbf \let\tcfont=\tencbf}
+\else
+\def\rm{\fam0 \tenrm}
+\def\it{\fam\itfam\tenit}
+\def\sl{\fam\slfam\tensl}
+\def\tt{\fam\ttfam\tentt}
+\def\sf{\fam\ssfam\tenss}
+\def\bf{\fam\bffam\tenbf}
+\fi
+\def\sc{\fam\cscfam\tencsc}
+\def\mb{\fam\mibfam} \def\boldstyle{\fam\mibfam\tenmib}
+\def\bcal{\fam\bsyfam\tenbsy}
+\def\unsetmathbold{
+\textfont1=\teni \scriptfont1=\seveni \scriptscriptfont1=\fivei
+\textfont2=\tensy \scriptfont2=\sevensy \scriptscriptfont2=\fivesy
+\def\oldstyle{\fam1 \teni} }
+\def\setmathbold{
+\textfont1=\tenmib \scriptfont1=\sevenmib \scriptscriptfont1=\fivemib
+\textfont2=\tenbsy \scriptfont2=\sevenbsy \scriptscriptfont2=\fivebsy
+\def\oldstyle{\fam1 \tenmib} }
+\normalbaselineskip=12pt minus 1pt
+\setbox\strutbox=\hbox{\vrule height8.5pt depth3.5pt width0pt}
+\bigsize=8.5pt
+\Bigsize=11.5pt
+\biggsize=14.5pt
+\Biggsize=17.5pt
+\normalbaselines\rm}
+%%
+%% Change to twelve points fonts %%
+\def\twelvepoint{
+\textfont0=\twelverm \scriptfont0=\eightrm \scriptscriptfont0=\sixrm
+\textfont1=\twelvei \scriptfont1=\eighti \scriptscriptfont1=\sixi
+\def\mit{\fam1 } \def\oldstyle{\fam1 \twelvei}
+\textfont2=\twelvesy \scriptfont2=\eightsy \scriptscriptfont2=\sixsy
+\def\cal{\fam2 }
+\textfont3=\twelveex \scriptfont3=\eightex \scriptscriptfont3=\sixex
+\textfont\itfam=\twelveit
+\textfont\slfam=\twelvesl
+\textfont\ttfam=\twelvett
+\textfont\ssfam=\twelvess
+\scriptfont\ssfam=\eightss \scriptscriptfont\ssfam=\sixss
+\textfont\bffam=\twelvebf
+\scriptfont\bffam=\eightbf \scriptscriptfont\bffam=\sixbf
+\textfont\cscfam=\twelvecsc
+\textfont\mibfam=\twelvemib
+\scriptfont\mibfam=\eightmib \scriptscriptfont\mibfam=\sixmib
+\textfont\bsyfam=\twelvebsy
+\scriptfont\bsyfam=\eightbsy \scriptscriptfont\bsyfam=\sixbsy
+\ifx\ifDS\relax%
+\textfont\dsfam=\twelveds
+\scriptfont\dsfam=\eightds \scriptscriptfont\dsfam=\sixds
+\def\ds{\fam\dsfam\twelveds}
+\else
+{}
+\fi
+\ifx\ifLMTS\relax%
+\def\rm{\fam0 \twelverm \let\tcfont=\twelvecrm}
+\def\it{\fam\itfam\twelveit \let\tcfont=\twelvecit}
+\def\sl{\fam\slfam\twelvesl \let\tcfont=\twelvecsl}
+\def\tt{\fam\ttfam\twelvett \let\tcfont=\twelvectt}
+\def\sf{\fam\ssfam\twelvess \let\tcfont=\twelvecss}
+\def\bf{\fam\bffam\twelvebf \let\tcfont=\twelvecss}
+\else
+\def\rm{\fam0 \twelverm}
+\def\it{\fam\itfam\twelveit}
+\def\sl{\fam\slfam\twelvesl}
+\def\tt{\fam\ttfam\twelvett}
+\def\sf{\fam\ssfam\twelvess}
+\def\bf{\fam\bffam\twelvebf}
+\fi
+\def\sc{\fam\cscfam\twelvecsc}
+\def\mb{\fam\mibfam} \def\boldstyle{\fam\mibfam\twelvemib}
+\def\bcal{\fam\bsyfam}
+\def\unsetmathbold{
+\textfont1=\twelvei \scriptfont1=\eighti \scriptscriptfont1=\sixi
+\textfont2=\twelvesy \scriptfont2=\eightsy \scriptscriptfont2=\sixsy
+\def\oldstyle{\fam1 \twelvei} }
+\def\setmathbold{
+\textfont1=\twelvemib \scriptfont1=\eightmib \scriptscriptfont1=\sixmib
+\textfont2=\twelvebsy \scriptfont2=\eightbsy \scriptscriptfont2=\sixbsy
+\def\oldstyle{\fam1 \twelvemib} }
+\normalbaselineskip=14pt minus 1pt
+\setbox\strutbox=\hbox{\vrule height10pt depth4pt width0pt}
+\bigsize=10.2pt
+\Bigsize=13.8pt
+\biggsize=17.4pt
+\Biggsize=21pt
+\normalbaselines\rm}
+%%
+%% Change to eight points fonts %%
+\def\eightpoint{
+\textfont0=\eightrm \scriptfont0=\sixrm \scriptscriptfont0=\fiverm
+\textfont1=\eighti \scriptfont1=\sixi \scriptscriptfont1=\fivei
+\def\mit{\fam1 } \def\oldstyle{\fam1 \eighti}
+\textfont2=\eightsy \scriptfont2=\sixsy \scriptscriptfont2=\fivesy
+\def\cal{\fam2 }
+\textfont3=\eightex \scriptfont3=\sixex \scriptscriptfont3=\fiveex
+\textfont\itfam=\eightit
+\textfont\slfam=\eightsl
+\textfont\ttfam=\eighttt
+\textfont\ssfam=\eightss
+\scriptfont\ssfam=\sixss \scriptscriptfont\ssfam=\fivess
+\textfont\bffam=\eightbf
+\scriptfont\bffam=\sixbf \scriptscriptfont\bffam=\fivebf
+\textfont\cscfam=\eightcsc
+\textfont\mibfam=\eightmib
+\scriptfont\mibfam=\sixmib \scriptscriptfont\mibfam=\fivemib
+\textfont\bsyfam=\eightbsy
+\scriptfont\bsyfam=\sixbsy \scriptscriptfont\bsyfam=\fivebsy
+\ifx\ifDS\relax%
+\textfont\dsfam=\eightds
+\scriptfont\dsfam=\sixds \scriptscriptfont\dsfam=\fiveds
+\def\ds{\fam\dsfam\eightds}
+\else
+{}
+\fi
+\ifx\ifLMTS\relax%
+\def\rm{\fam0 \eightrm \let\tcfont=\eightcrm}
+\def\it{\fam\itfam\eightit \let\tcfont=\eightcit}
+\def\sl{\fam\slfam\eightsl \let\tcfont=\eightcsl}
+\def\tt{\fam\ttfam\eighttt \let\tcfont=\eightctt}
+\def\sf{\fam\ssfam\eightss \let\tcfont=\eightcss}
+\def\bf{\fam\bffam\eightbf \let\tcfont=\eightcbf}
+\else
+\def\rm{\fam0 \eightrm}
+\def\it{\fam\itfam\eightit}
+\def\sl{\fam\slfam\eightsl}
+\def\tt{\fam\ttfam\eighttt}
+\def\sf{\fam\ssfam\eightss}
+\def\bf{\fam\bffam\eightbf}
+\fi
+\def\sc{\fam\cscfam\eightcsc}
+\def\mb{\fam\mibfam} \def\boldstyle{\fam\mibfam\eightmib}
+\def\bcal{\fam\bsyfam}
+\def\unsetmathbold{
+\textfont1=\eighti \scriptfont1=\sixi \scriptscriptfont1=\fivei
+\textfont2=\eightsy \scriptfont2=\sixsy \scriptscriptfont2=\fivesy
+\def\oldstyle{\fam1 \eighti} }
+\def\setmathbold{
+\textfont1=\eightmib \scriptfont1=\sixmib \scriptscriptfont1=\fivemib
+\textfont2=\eightbsy \scriptfont2=\sixbsy \scriptscriptfont2=\fivebsy
+\def\oldstyle{\fam1 \eightmib} }
+\normalbaselineskip=9pt
+\setbox\strutbox=\hbox{\vrule height7pt depth2pt width0pt}
+\bigsize=6.8pt
+\Bigsize=9.2pt
+\biggsize=11.6pt
+\Biggsize=14pt
+\normalbaselines\rm}
+%%
+%% Change to fourteen points fonts %%
+\def\fourteenpoint{
+\textfont0=\fourteenrm \scriptfont0=\ninerm \scriptscriptfont0=\sevenrm
+\textfont1=\fourteeni \scriptfont1=\ninei \scriptscriptfont1=\seveni
+\def\mit{\fam1 } \def\oldstyle{\fam1 \fourteeni}
+\textfont2=\fourteensy \scriptfont2=\ninesy \scriptscriptfont2=\sevensy
+\def\cal{\fam2 }
+\textfont3=\fourteenex \scriptfont3=\nineex \scriptscriptfont3=\sevenex
+\textfont\itfam=\fourteenit
+\textfont\slfam=\fourteensl
+\textfont\ttfam=\fourteentt
+\textfont\ssfam=\fourteenss
+\scriptfont\ssfam=\niness \scriptscriptfont\ssfam=\sevenss
+\textfont\bffam=\fourteenbf
+\scriptfont\bffam=\ninebf \scriptscriptfont\bffam=\sevenbf
+\textfont\cscfam=\fourteencsc
+\textfont\mibfam=\fourteenmib
+\scriptfont\mibfam=\ninemib \scriptscriptfont\mibfam=\sevenmib
+\textfont\bsyfam=\fourteenbsy
+\scriptfont\bsyfam=\ninebsy \scriptscriptfont\bsyfam=\sevenbsy
+\ifx\ifDS\relax%
+\textfont\dsfam=\fourteends
+\scriptfont\dsfam=\nineds \scriptscriptfont\dsfam=\sevends
+\def\ds{\fam\dsfam\fourteends}
+\else
+{}
+\fi
+\ifx\ifLMTS\relax%
+\def\rm{\fam0 \fourteenrm \let\tcfont=\fourteencrm}
+\def\it{\fam\itfam\fourteenit \let\tcfont=\fourteencit}
+\def\sl{\fam\slfam\fourteensl \let\tcfont=\fourteencsl}
+\def\tt{\fam\ttfam\fourteentt \let\tcfont=\fourteenctt}
+\def\bf{\fam\bffam\fourteenbf \let\tcfont=\fourteencbf}
+\def\sf{\fam\ssfam\fourteenss \let\tcfont=\fourteencss}
+\else
+\def\rm{\fam0 \fourteenrm}
+\def\it{\fam\itfam\fourteenit}
+\def\sl{\fam\slfam\fourteensl}
+\def\tt{\fam\ttfam\fourteentt}
+\def\bf{\fam\bffam\fourteenbf}
+\def\sf{\fam\ssfam\fourteenss}
+\fi
+\def\sc{\fam\cscfam\fourteencsc}
+\def\mb{\fam\mibfam} \def\boldstyle{\fam\mibfam\fourteenmib}
+\def\bcal{\fam\bsyfam}
+\def\unsetmathbold{
+\textfont1=\fourteeni \scriptfont1=\ninei \scriptscriptfont1=\seveni
+\textfont2=\fourteensy \scriptfont2=\ninesy \scriptscriptfont2=\sevensy
+\def\oldstyle{\fam1 \fourteeni} }
+\def\setmathbold{
+\textfont1=\fourteenmib \scriptfont1=\ninemib \scriptscriptfont1=\sevenmib
+\textfont2=\fourteenbsy \scriptfont2=\ninebsy \scriptscriptfont2=\sevenbsy
+\def\oldstyle{\fam1 \fourteenmib} }
+\normalbaselineskip=17pt minus 1pt
+\setbox\strutbox=\hbox{\vrule height12pt depth5pt width0pt}
+\bigsize=11.9pt
+\Bigsize=16.1pt
+\biggsize=20.3pt
+\Biggsize=24.5pt
+\normalbaselines\rm}
+%%
+%% Change to twentypoint fonts %%
+\def\twentypoint{
+\textfont0=\twentyrm \scriptfont0=\fourteenrm \scriptscriptfont0=\tenrm
+\textfont1=\twentyi \scriptfont1=\fourteeni \scriptscriptfont1=\teni
+\def\mit{\fam1 } \def\oldstyle{\fam1 \twentyi}
+\textfont2=\twentysy \scriptfont2=\fourteensy \scriptscriptfont2=\tensy
+\def\cal{\fam2 }
+\textfont3=\twentyex \scriptfont3=\fourteenex \scriptscriptfont3=\tenex
+\textfont\itfam=\twentyit
+\textfont\slfam=\twentysl
+\textfont\ttfam=\twentytt
+\textfont\ssfam=\twentyss
+\scriptfont\ssfam=\fourteenss \scriptscriptfont\ssfam=\tenss
+\textfont\bffam=\twentybf
+\scriptfont\bffam=\fourteenbf \scriptscriptfont\bffam=\tenbf
+\textfont\cscfam=\twentycsc
+\textfont\mibfam=\twentymib
+\scriptfont\mibfam=\fourteenmib \scriptscriptfont\mibfam=\tenmib
+\textfont\bsyfam=\twentybsy
+\scriptfont\bsyfam=\fourteenbsy \scriptscriptfont\bsyfam=\tenbsy
+\ifx\ifDS\relax%
+\textfont\dsfam=\twentyds
+\scriptfont\dsfam=\fourteends \scriptscriptfont\dsfam=\tends
+\def\ds{\fam\dsfam\twentyds}
+\else
+{}
+\fi
+\ifx\ifLMTS\relax%
+\def\rm{\fam0 \twentyrm \let\tcfont=\twentycrm}
+\def\it{\fam\itfam\twentyit \let\tcfont=\twentycit}
+\def\sl{\fam\slfam\twentysl \let\tcfont=\twentycsl}
+\def\tt{\fam\ttfam\twentytt \let\tcfont=\twentyctt}
+\def\sf{\fam\ssfam\twentyss \let\tcfont=\twentycss}
+\def\bf{\fam\bffam\twentybf \let\tcfont=\twentycbf}
+\else
+\def\rm{\fam0 \twentyrm}
+\def\it{\fam\itfam\twentyit}
+\def\sl{\fam\slfam\twentysl}
+\def\tt{\fam\ttfam\twentytt}
+\def\sf{\fam\ssfam\twentyss}
+\def\bf{\fam\bffam\twentybf}
+\fi
+\def\sc{\fam\cscfam\twentycsc}
+\def\mb{\fam\mibfam} \def\boldstyle{\fam\mibfam\twentymib}
+\def\unsetmathbold{
+\textfont1=\twentyi \scriptfont1=\fourteeni \scriptscriptfont1=\teni
+\textfont2=\twentysy \scriptfont2=\fourteensy \scriptscriptfont2=\tensy
+\def\oldstyle{\fam1 \twentyi} }
+\def\setmathbold{
+\textfont1=\twentymib \scriptfont1=\fourteenmib \scriptscriptfont1=\tenmib
+\textfont2=\twentybsy \scriptfont2=\fourteenbsy \scriptscriptfont2=\tenbsy
+\def\oldstyle{\fam1 \twentymib} }
+\normalbaselineskip=24pt minus 2pt
+\setbox\strutbox=\hbox{\vrule height17pt depth7pt width0pt}
+\bigsize=17pt
+\Bigsize=23pt
+\biggsize=29pt
+\Biggsize=35pt
+\normalbaselines\rm}
+%%
+%% Change to twentyfour points fonts %%
+\def\twentyfourpoint{
+\textfont0=\twentyfourrm \scriptfont0=\fourteenrm \scriptscriptfont0=\twelverm
+\textfont1=\twentyfouri \scriptfont1=\fourteeni \scriptscriptfont1=\twelvei
+\def\mit{\fam1 } \def\oldstyle{\fam1 \twentyfouri}
+\textfont2=\twentyfoursy \scriptfont2=\fourteensy \scriptscriptfont2=\twelvesy
+\def\cal{\fam2 }
+\textfont3=\twentyfourex \scriptfont3=\fourteenex \scriptscriptfont3=\twelveex
+\textfont\itfam=\twentyfourit
+\textfont\slfam=\twentyfoursl
+\textfont\ttfam=\twentyfourtt
+\textfont\ssfam=\twentyfourss
+\scriptfont\ssfam=\fourteenss \scriptscriptfont\ssfam=\twelvess
+\textfont\bffam=\twentyfourbf
+\scriptfont\bffam=\fourteenbf \scriptscriptfont\bffam=\twelvebf
+\textfont\cscfam=\twentyfourcsc
+\textfont\mibfam=\twentyfourmib
+\scriptfont\mibfam=\fourteenmib \scriptscriptfont\mibfam=\twelvemib
+\textfont\bsyfam=\twentyfourbsy
+\scriptfont\bsyfam=\fourteenbsy \scriptscriptfont\bsyfam=\twelvebsy
+\ifx\ifDS\relax%
+\textfont\dsfam=\twentyfourds
+\scriptfont\dsfam=\fourteends \scriptscriptfont\dsfam=\twelveds
+\def\ds{\fam\dsfam\twentyfourds}
+\else
+{}
+\fi
+\ifx\ifLMTS\relax%
+\def\rm{\fam0 \twentyfourrm \let\tcfont=\twentyfourcrm}
+\def\it{\fam\itfam\twentyfourit \let\tcfont=\twentyfourcit}
+\def\sl{\fam\itfam\twentyfoursl \let\tcfont=\twentyfourcsl}
+\def\tt{\fam\ttfam\twentyfourtt \let\tcfont=\twentyfourctt}
+\def\sf{\fam\ssfam\twentyfourss \let\tcfont=\twentyfourcss}
+\def\bf{\fam\bffam\twentyfourbf \let\tcfont=\twentyfourcbf}
+\else
+\def\rm{\fam0 \twentyfourrm}
+\def\it{\fam\itfam\twentyfourit}
+\def\sl{\fam\itfam\twentyfoursl}
+\def\tt{\fam\ttfam\twentyfourtt}
+\def\sf{\fam\ssfam\twentyfourss}
+\def\bf{\fam\bffam\twentyfourbf}
+\fi
+\def\sc{\fam\cscfam\twentyfourcsc}
+\def\mb{\fam\mibfam} \def\boldstyle{\fam\mibfam\twentyfourmib}
+\def\bcal{\fam\bsyfam}
+\def\unsetmathbold{
+\textfont1=\twentyfouri \scriptfont1=\fourteeni \scriptscriptfont1=\twelvei
+\textfont2=\twentyfoursy \scriptfont2=\fourteensy \scriptscriptfont2=\twelvesy
+\def\oldstyle{\fam1 \twentyfouri} }
+\def\setmathbold{
+\textfont1=\twentyfourmib \scriptfont1=\fourteenmib
+\scriptscriptfont1=\twelvemib
+\textfont2=\twentyfourbsy \scriptfont2=\fourteenbsy
+\scriptscriptfont2=\twelvebsy
+\def\oldstyle{\fam1 \twentyfourmib} }
+\normalbaselineskip=28pt minus 2pt
+\setbox\strutbox=\hbox{\vrule height20pt depth8pt width0pt}
+\bigsize=20.4pt
+\Bigsize=27.6pt
+\biggsize=34.8pt
+\Biggsize=42pt
+\normalbaselines\rm}
+%%
+%% double space
+\def\doublespace{
+\normalbaselineskip=24pt minus 1pt
+\setbox\strutbox=\hbox{\vrule height17pt depth 7pt width0pt}
+\normalbaselines}
+%%
+%% Initial set at ten points
+\tenpoint
+
diff --git a/obsolete/macros/plain/contrib/siam/READ.ME b/obsolete/macros/plain/contrib/siam/READ.ME
new file mode 100644
index 0000000000..341a72aaff
--- /dev/null
+++ b/obsolete/macros/plain/contrib/siam/READ.ME
@@ -0,0 +1,30 @@
+READ.ME 12/11/92
+
+The following files constitute the full distribution
+of SIAM's TeX macro package. The files are:
+
+siamptex.sty
+docuptex.tex
+pexample.tex
+
+docuptex.tex is the documentation file and should be refered to
+for information about using the macros.
+
+The SIAM macro's home is NETLIB@research.att.com, accessible through email.
+
+Both the LaTeX and plain TeX macros can be accessed through NETLIB:
+Send an e-mail message to netlib@research.att.com, the body of the
+message should be:
+
+ send siamltex.all from typesetting
+
+for the LaTeX version, and
+
+ send siamptex.all from typesetting
+
+for the plain TeX version.
+
+Questions, problems, bugs, and bug fixes should be
+forwarded to SIAM TeX Support, 3600 University City Science Center,
+Philadelphia PA, 19104. E-mail to duggan@siam.org.
+
diff --git a/obsolete/macros/plain/contrib/siam/docuptex.tex b/obsolete/macros/plain/contrib/siam/docuptex.tex
new file mode 100644
index 0000000000..5cf8f39ddf
--- /dev/null
+++ b/obsolete/macros/plain/contrib/siam/docuptex.tex
@@ -0,0 +1,361 @@
+\input siamptex.sty
+
+% The definitions are to provide a verbatim text environment
+
+\def\uncatcodespecials{\def\do##1{\catcode`##1=12 }\dospecials}
+\def\setupverbatim{\tt%
+ \def\par{\leavevmode\endgraf}%
+ \obeylines\uncatcodespecials\obeyspaces}
+{\obeyspaces\global\let =\ }
+\def\doverbatim#1{\def\next##1#1{##1\endgroup}\next}
+\def\verbatim{\begingroup\setupverbatim\doverbatim}
+
+
+\overfullrule=0pt
+
+\topmatter
+\vol{1}
+\no{1, pp.~000--000}
+\journal{SIAM J. E{\smc XAMPLE} F{\smc ILES}}
+\date{October 1992}
+\copyyear{1992}
+\code{000}
+
+\title Using SIAM's \TeX\ Macros\endtitle
+
+\shorttitle{USING SIAM'S \TeX\ MACROS}
+
+\recdate{*}{October 8, 1992.
+This work was supported by the Society for Industrial
+and Applied Mathematics}
+
+\author Paul Duggan\fnmark{$^{\dag}$}\endauthor
+
+\address{$^{\dag}$}{Society for Industrial and Applied Mathematics,
+Philadelphia, Pennsylvania ({\tt duggan@siam.org}). Questions, comments,
+or corrections to this document may be directed to that email address}
+
+\abstract{}
+\subjclass\endsubjclass
+\keywords\endkeywords
+
+
+\endtopmatter
+
+
+\heading{1}{Introduction}
+This file is documentation for the SIAM \TeX\ macros, and provides
+instruction for submission of files formatted in \TeX.
+
+To accommodate authors who electronically typeset their manuscripts,
+SIAM supports the use of \TeX. To ensure quality typesetting according
+to SIAM style standards, SIAM provides a \TeX\ macro style file.
+Using \TeX\ to format a manuscript should simplify the editorial process
+and lessen the author's proofreading burden. It is still necessary to
+proofread with care.
+
+Electronic files should not be submitted until the paper has been
+accepted, and then not until requested to do so by someone in the SIAM
+office. Once an article is slated for an issue,
+someone from the SIAM office will contact the author about any or all
+of the following: editorial and stylistic queries;
+supplying the source files (and any supplementary macros)
+for the properly formatted article; and handling figures.
+
+Electronic submissions (to {\tt tex@siam.org}) should be clearly
+designated as to the journal and author. Authors are responsible for ensuring
+that the paper generated from the source files exactly matches the paper that
+was accepted for publication by the review editor. If it does not,
+that should be indicated in the transmission of the file.
+When submitting a file, please be sure to include any additional
+macros (other than those provided by SIAM) that will be needed to run
+the paper.
+
+Once the files are corrected here at SIAM, we will send back the revised
+proofs to be read against the original edited manuscript. We are not
+set up to shuttle back and forth varying electronic versions of each
+paper, so we must rely on hard copy. The author's proofreading
+is an important but easily overlooked step. Even if SIAM were not
+to introduce a single editorial change into your manuscript, there
+would still be a need to check line and page breaks as the encoding
+of Times Roman fonts would change the page makeup of a Computer
+Modern file.
+
+A sample file is included with this distribution to demonstrate the
+standard use of SIAM's macro package. To provide an incentive for
+the use of \TeX\ in paper preparation, SIAM provides 100 free reprints
+of the author's journal article but only to those who have made use of
+the SIAM macro in proper fashion. To qualify for free reprints the
+following criteria must be met:
+\meti{1.} The appropriate document style line must appear at
+the beginning of the source file.
+\meti{2.} All top matter information (key words, affiliation, etc.) must
+be present and correctly tagged. The only exception to the rule will be
+the AMS subject classification.
+\meti{3.} All tagging conventions, as described in this documentation
+and used in the example file, must be followed.
+\meti{4.} The format of the bibliography must strictly adhere to SIAM
+guidelines. The appropriate tags must be used for all entries. All names
+are to be keyed initial upper case cap and small caps. Only the first
+and middle initials, followed by the last name, are to be used.
+Last names should never be listed first. There will be no exceptions
+to this requirement. An improperly prepared bibliography will,
+in all cases, prevent an author from receiving free reprints
+
+
+The distribution contains the following items: {\tt siamptex.sty}, the
+main macro package; this documentation file; and a sample file, {\tt
+pexample.tex}. The sample file is representative of the standard way
+to apply the macros. The rest of this paper emphasizes some aspects
+of applying the macros, points out options and special cases, and
+describes the SIAM style standards.
+The SIAM macros make use of the small caps font, {\tt cmcsc}, which
+is not installed in some systems. Contact the American Mathematical
+Society for information about the availability of this font.
+
+\heading{2}{Headings}
+The top matter of a journal is in a standard format. The macro
+and initial definitions should be included as follows
+
+\verbatim:
+\def\smc{\tensmc}
+\input siamptex.sty
+\overfullrule=0pt
+
+:
+
+The \verbatim:\overfullrule: should be set wider while still
+being edited by the author, to assist in locating lines that extend
+beyond the margins.
+
+
+The ``slugline,'' containing the journal and copyright information, is
+created by special commands following the\verbatim:\topmatter:
+
+\verbatim:
+\vol{0}
+\no{0, pp.~000--000}
+\journal{SIAM J. A{\smc PPL}. M{\smc ATH}.}
+\date{May 1992}
+\copyyear{1992}
+\code{000}
+
+:
+The information for volume, number, date, and code will likely be unknown,
+or zeros should be
+put in where required. SIAM will place the appropriate information in
+the commands in production, however, the commands must be used.
+
+The title and author(s) of the paper are indicated by the
+\verbatim:\title\endtitle: and \verbatim:\author\endauthor: commands.
+Author support and address information is indicated as follows:
+
+\verbatim:
+\author A.~U. Thorone\fnmark{$^{\dag}$}
+ \and A.~U. Thortwo\fnmark{$^{\ddag}$}\endauthor
+
+\address{$^{\dag}$}{Address of the first author and support}
+\address{$^{\ddag}$}{Address of the second author and support}
+
+:
+
+The commands \verbatim:\shorttitle{}: and \verbatim:\shortauthor{}:
+are used to designate the running heads for the paper.
+
+The \verbatim:\abstract{}:, \verbatim:\keywords\endkeywords:, and
+\verbatim:\subjclass\endsubjclass: commands are used to include the
+abstract, keywords, and AMS subject class numbers, respectively.
+If there is to be only one subject classification number, the
+\verbatim:\subjclass: command should be preceded by
+\verbatim:\oneclass:. If the AMS numbers are unknown, leave that
+information blank. Authors are responsible for providing AMS numbers.
+They can be found in the Annual Index of Math Reviews, or
+through {\tt e-Math} ({\tt telnet@e-math.ams.com}; login
+and password are both {\tt e-math}).
+This section initial information is ended by \verbatim:\endtopmatter:.
+
+
+
+\heading{3}{Equations}
+Equations and are handled by standard \TeX\ commands. SIAM style is
+for numbered equations to appear flush with the left margin. The
+\verbatim:\leqno: and \verbatim:\leqalignno{}: commands are used for
+this purpose. If any letters indicating subequations are to be used
+with the numbers, they should be set in roman type.
+
+More information on the formatting of equations and aligned
+equations are found in Knuth [1]. Authors bear primary responsibility
+for formatting their equations within margins and in an aestheticly
+pleasing and informative manner.
+
+Groups of equations that are not directly related to each other
+should normally be centered independently. This may be done through
+the \TeX\ math command \verbatim:\displaylines{}:. Numbering
+independently centered equations can be difficult, so Seroul and Levy's [2]
+macro \verbatim:\ldisplaylinesno{}: has been included in {\tt siamptex.sty}.
+\verbatim:\ldisplaylinesno{}: works just like \verbatim:\leqalignno:, except
+no ampersand is used to align the equations, since they are to be centered.
+
+\heading{4}{Text formatting}
+Section and subsection headings are both included using the
+\verbatim:\heading{}{}: command, which requires two arguments. The first is
+for the number, and the second is the title of the section or
+subsection.
+
+No extra spacing should be placed between paragraphs. The
+\verbatim:\heading: command inserts the required spacing between sections.
+
+SIAM style does not normally make use of the plain \TeX's \verbatim:\item:
+command. The \verbatim:\meti: command is preferred for
+lists of items beginning with, for instance, bullets ($\bullet$) or
+roman numerals (iv). The\verbatim:\meti: command retains normal
+paragraph shape, but places all labels aligned flush right. For
+example:
+
+\verbatim:
+\meti{(i)} This is the first item.
+\meti{(ii)} This is the second item of the series.
+
+:
+
+produces
+
+\meti{(i)} This is the first item.
+\meti{(ii)} This is the second item of the series.
+\medskip
+
+The \verbatim:\meti: macro was adapted from Seroul and Levy [2].
+
+\heading{4.1}{Punctuation}
+All standard punctuation and all numerals should be set in Roman type
+(upright). The only exceptions are periods and commas. They may
+be set to match the surrounding text.
+
+\heading{4.2}{Theorems, lemmas, and proofs}
+Theorems, lemmas, propositions, and so forth, have macros included
+for correct formatting. Below is an example.
+
+\verbatim:
+\thm{Theorem 3.1}
+Sample theorem included for illustration. Words in all caps, like
+{\rm SIAM} should be set in roman type, as should all numbers and
+parentheses. Note that words in displayed equations, such as
+$$ x^2 = Y^2 \sin z^2 \hbox{ for all } x $$
+will appear in italic type in a theorem, though normally
+they should appear in roman.\endthm
+
+:
+
+This produces:
+
+\thm{Theorem 3.1}
+Sample theorem included for illustration. Words in all caps, like {\rm
+SIAM} should be set in roman type, as should all numbers and
+parentheses. Note that words in displayed equations, such as
+$$ x^2 = Y^2 \sin z^2 \hbox{ for all } x $$
+will appear in italic type in a theorem, though normally
+text they should appear in roman.\endthm
+
+The \verbatim:\lem:, \verbatim:\prop:, and \verbatim:\cor: commands
+all work similarly. Named theorems should be designated with the
+title in roman type, enclosed in parentheses.
+
+\verbatim:
+\thm{Theorem 3.2 {\rm (sample theorem with title)}}
+
+:
+
+Proofs are illustrated in the following example:
+
+\verbatim:
+\prf{Proof}
+The body of the proof.
+\qquad\endproof
+
+:
+
+If the proof ends with a displayed equation, the \verbatim:\endproof:
+box \endproof\ should appear flush right with the margin, on line with the
+equation. The \verbatim:\eqno:
+command will place this in the correct position. If the equation is
+already numbered, this method will not work, so just include the
+\verbatim:\endproof: box and SIAM will handle making the box flush
+right in production.
+
+\heading{5}{Figures and tables}
+Figures and tables are best handled in \TeX\ by putting them within a
+\verbatim:\topinsert \endinsert: environment. The appropriate amount
+of space should be left for the figure, and the caption should be
+formatted to be centered or as a paragraph if more than one line. Text
+should be italic, eight-point type, with the words ``Fig.~\#'' in small
+caps.
+
+SIAM tables should be formatted in eight-point type, with enough
+space left between entries and surrounding lines so that they do not
+touch. See Knuth [1] or Seroul and Levy [2] for more information on
+the formatting of tables in \TeX. Table captions are similar to
+figure captions, but the words ``Table'' and the number appear on one
+line.
+
+SIAM supports the use of {\tt psfig} for including {\smc PostScript}
+figures. All {\smc Post\-Script} figures should be sent in separate
+files. See the {\tt psfig} documentation for more details on the use
+of this style option. It is a good idea to submit hardcopy of all
+{\smc Post\-Script} figures just in case there is difficulty in the
+reproduction of the figure. Figures produced by other non-\TeX\
+methods should be included as hardcopy when the manuscript is submitted.
+
+\heading{6}{Bibliographies}
+References are handled using the \verbatim:\Refs: command. Some
+representative sample entries are illustrated below:
+
+\verbatim|
+\Refs
+
+\ref 1\\ {\smc A.~U Thorone}, {\it Title of paper with lower case
+letters}, SIAM J. Abbrev. Correctly, 2 (1992), pp.~000--000.\endref
+
+\ref 2\\ \sameauthor, % generates a 3-em rule
+{\it Title of paper appearing in book}, in Book Title:
+With All Initial Caps, Publisher, Location, 1992.\endref
+
+\ref 3\\ {\smc A.~U. Thorone, A.~U. Thortwo, and A.~U. Thorthree},
+{\it Title of Book{\rm :} Note Initial Caps and {\rm ROMAN TYPE}
+for Punctuation and Acronyms}, Publisher, Location, pp.~000--000.
+1992.\endref
+
+\ref 4\\ {\smc A. Notherauth}, {\it Title of paper that's not yet
+published}, SIAM J. Abbrev. Correctly, to appear.\endref
+
+|
+
+Other types of references fall into the same general pattern. See the
+sample file or any SIAM journal for other examples. Authors must
+correctly format their bibliography to be considered as having used
+the macros correctly. An incorrectly formatted bibliography is not
+only time-consuming but very likely to have errors introduced into it by
+keyboarders/copy editors.
+
+As an alternative to the above style of reference, an alphanumeric
+code may be used in place of the number (e.g., [AUTh90]). The same
+\verbatim:\Refs: and \verbatim:\ref: commands are used, but the
+command \verbatim:\resetrefindent{}: must be used before the
+\verbatim:\Refs: command, with the widest expected alphanumeric code
+as an argument.
+
+Another alternative is no number, simply the authors' names and
+the year of publication following in parentheses. The rest of the
+format is identical. To get an entry with no number in brackets
+before it, use the \verbatim:\xref: command.
+
+
+\Refs
+
+\ref 1\\ {\smc D.~E. Knuth}, {\it The {\rm \TeX} book}, Addison Wesley,
+Reading, MA, 1986.\endref
+
+\ref 2\\ {\smc R. Seroul and S. Levy}, {\it A Beginner's Book of
+{\rm \TeX}}, Springer-Verlag, Berlin, New York, 1991.\endref
+
+
+\bye
diff --git a/obsolete/macros/plain/contrib/siam/pexample.tex b/obsolete/macros/plain/contrib/siam/pexample.tex
new file mode 100644
index 0000000000..90ba472adf
--- /dev/null
+++ b/obsolete/macros/plain/contrib/siam/pexample.tex
@@ -0,0 +1,523 @@
+% Sample file for SIAM's plain TeX macro package.
+%
+\input siamptex.sty
+
+% author defined macros included for illustrative purposes only.
+% symbols for real numbers, complex, ... (\Bbb font from AMS-TeX
+% fonts v2.x also useable)
+
+\def\fR{{\bf R}}
+\def\fC{{\bf C}}
+\def\fK{{\bf K}}
+
+% misc. operators
+\def\Span {\mathop{\hbox{\rm span}}\nolimits}
+\def\Range{\mathop{\hbox{\rm Range}}\nolimits}
+\def\Det {\mathop{\hbox{\rm det}}}
+\def\Re {\mathop{\hbox{\rm Re}}}
+\def\Im {\mathop{\hbox{\rm Im}}}
+\def\Deg {\mathop{\hbox{\rm deg}}}
+
+% misc.
+
+\def\Kr{\hbox{\bf K}}
+\def\K { { K}}
+\def\sT{\hbox{$\cal T$}}
+\def\sB{\hbox{$\cal B$}}
+
+\def\bmatrix#1{\left[ \matrix{#1} \right]}
+
+% Each of the following commands have to be filled in with
+% something. If the data is unknown, the arguments can be
+% left blank.
+
+\topmatter
+\journal{SIAM J. E{\smc XAMPLE} F{\smc ILES}}
+\vol{1}
+\no{1, pp.~000--000}
+\date{October 1993}
+\copyyear{1993}
+\code{000}
+
+
+\title SAMPLE FILE FOR SIAM PLAIN \TeX\ MACRO
+PACKAGE\endtitle
+
+\shorttitle{SIAM MACRO EXAMPLE}
+
+\recdate{*}{May 1, 1992; accepted by the editors Month, x,
+xxxx. This work was supported by the Society for Industrial
+and Applied Mathemtics, Philadelphia, Pennsylvania}
+
+\author Paul Duggan\fnmark{$^{\dag}$} \and Various A.~U.
+Thors\fnmark{$^{\ddag}$}\endauthor
+
+\address{$^{\dag}$}{Composition Department, Society for
+Industrial and Applied Mathematics, 3600 University City
+Science Center, Philadelphia, Pennsylvania, 19104-2688
+({\tt duggan@siam.org})}
+
+\address{$^{\ddag}$}{Various affiliations, supported by
+various foundation grants}
+
+\abstract{An example of SIAM \TeX\ macros is presented.
+Various aspects of composing manuscripts for SIAM's journals
+are illustrated with actual examples from accepted
+manuscripts. SIAM's stylistic standards are adhered to
+throughout, and illustrated.}
+
+\keywords polynomials, SI model\endkeywords
+
+\subjclass 33H40, 35C01\endsubjclass
+
+% if there is only one AMS subject number, the
+% command \oneclass should precede the \subjclass command.
+
+\endtopmatter
+
+\heading{1}{Introduction and examples}
+This paper presents a sample file for the use of SIAM's
+\TeX\ macro package. It illustrates the features of the
+macro package, using actual examples culled from various
+papers published in SIAM's journals. This sample will provide
+examples of how to use the
+macros to generate standard elements of journal papers,
+e.g., equations, theorems, or figures. This paper also
+serves as an exmple of SIAM's stylistic preferences for the
+formatting of such elements as bibliographic references,
+displayed equations, and aligned equations, among others.
+Some special circumstances are not dealt with this the
+sample file; for that information, please see the
+associated documentation file.
+
+{\it Note}. This paper is not to be read in any form for
+content. The conglomeration of equations, lemmas, and other
+text elements were put together solely for typographic
+illustrative purposes.
+
+For theoretical reasons, it is desirable to find characterizations of the
+conditions of breakdown of the algorithms that are based on the key {\it
+spaces} $\Kr_n(r^{(0)},A)$ and $\Kr_n(\tilde r^{(0)},A^*)$ rather than
+the {\it formulas} for the algorithms. In particular, we will
+characterize breakdown of the three Lanczos algorithms in terms of the
+{\it moment matrices} $\K_n(\tilde r^{(0)},A^*)^*\K_n(r^{(0)},A)$ and
+$\K_n(\tilde r^{(0)},A^*)^*A\K_n(r^{(0)},A)$. Here we define the matrix
+$\K_n(v,A)=\bmatrix{v&Av&\cdots&A^{n-1}v\cr}$, a matrix whose columns span
+the Krylov space $\Kr_n(v,A)$.
+
+The following three theorems give exact conditions for breakdown of the
+above algorithms. Detailed proofs may be found in [3]. A
+result similar to Theorem 2 is found in [1]; see also [5].
+
+
+\thm{Theorem 1 {\rm (Lanczos--Orthodir breakdown)}}
+Suppose Lanczos/Orthodir has successfully generated
+$u^{(n-1)}\not=u$. Then the following are equivalent:
+
+\meti{$\bullet$} The algorithm does not break down at step $n$.
+
+\meti{$\bullet$} The matrix $\K_n(\tilde r^{(0)},A^*)^*A\K_n(r^{(0)},A)$
+is nonsingular.
+
+\meti{$\bullet$} There exists a unique iterate $u^{(n)}$ satisfying $(2)$.
+\endthm
+
+
+\thm{Theorem 2 {\rm (Lanczos--Orthomin breakdown)}}
+Suppose Lanczos/Orthomin has successfully generated $u^{(n-1)}\not=u$.
+Then the following are equivalent:
+
+\meti{$\bullet$} The algorithm breaks down at step $n$.
+
+\meti{$\bullet$} Either
+$\K_{n-1}(\tilde r^{(0)},A^*)^*\K_{n-1}(r^{(0)},A)$ or
+$\K_n(\tilde r^{(0)},A^*)^*A\K_n(r^{(0)},A)$ is singular.
+\endthm
+
+
+\prop{Proposition 3 {\rm (zero sets of polynomials)}}
+Let $\fK=\fR$ or $\fC$. If $P$ is a complex nonzero polynomial in the
+variables $x_1,x_2,\ldots ,x_N\in\fK$, then $P(x)\not=0$ for almost every
+$x=(x_1,x_2,\ldots,x_N)\in \fK^N$.
+\endprop
+
+\prf{Proof}
+If $\fK=\fR$ and $P$ is nonzero, then either $\Re P(z)$ or $\Im P(z)$
+is a nonzero (real) polynomial; if $\fK=\fC$, we may decompose each $x_i$
+into real and imaginary parts, giving $2N$ variables, and consider the
+real polynomial $P(x)^*P(x)$. In any case, we may assume without loss of
+generality that $P$ is a nonzero real polynomial of real variables.
+
+We know that for any point $x$, the polynomial $P$ is the zero polynomial
+if and only if the polynomial and all its derivatives are zero at $x$.
+Let $V_0$ denote the set of zeros of $P$ in $\fR^N$. Suppose the set
+$V_0$ has nonzero measure. We know from integration theory (see, for
+example, [6, pp.\ 128f]) that almost every point of $V_0$ is
+a point of density in each of the $N$ coordinate directions. We recall
+that $x\in\fR$ is a point of density of a measurable subset
+$S\subseteq\fR$ if for any sequence of intervals $I_n$ such that
+$x\in I_n$ with measure $m(I_n)\rightarrow 0$ we have
+$m(S\cap I_n)/m(I_n)\rightarrow 1$.
+
+It is easily seen that at such points in $V_0$, the first
+partial derivatives of $P$ must necessarily be zero. Let $V_1$ be the
+points of $V_0$ where all first derivatives are also zero. We have just
+shown that $V_0$ and $V_1$ both have the same nonzero measure. The
+argument
+may be repeated for $V_1$ to show all second partial derivatives of $f$
+are zero at almost every point of $V_0$, and so forth, resulting in the
+fact that $P$ and all its derivatives are zero on a set which has nonzero
+measure. The proof is completed by selecting any one of these points.
+\qquad\endproof
+
+\thm{Theorem 4 {\rm (Lanczos breakdown, iterate $n$)}}
+Let $\fK=\fR$ or $\fC$, $A, \tilde Z\in\fK^{N\times N}$, and $n\leq d(A)$.
+Then exactly one of the following three conditions holds for the Lanczos
+method with $\tilde r^{(0)}=\tilde Z^* r^{(0)}$.
+
+\meti{\rm (i)} Hard breakdown at step $n$ occurs for every vector
+$r^{(0)}\in\sT_n(A)\cap\fK^N$ $($and thus at least for almost every
+$r^{(0)}\in\fK^N)$.
+
+\meti{\rm (ii)} Hard breakdown at step $n$ occurs for a nonempty measure-zero
+set of vectors $r^{(0)}\in\sT_n(A)\cap\fK^N$
+$($and thus a nonempty measure-zero set of vectors in $\fK^N)$.
+
+\meti{\rm (iii)} Hard breakdown at step $n$ occurs for no vectors
+$r^{(0)}\in\sT_n(A)\cap\fK^N$ $($and thus for at most a measure-zero set of
+vectors in $\fK^N)$.
+
+Furthermore, the same result holds if ``hard breakdown'' is replaced by
+``soft breakdown'' in the statement of this theorem.
+\endthm
+
+
+\prf{Proof}
+For vectors $r^{(0)}\in\sT_n(A)\cap\fK^N$, breakdown is equivalent to
+singularity of an appropriate moment matrix. The set $\sT_n(A)\cap\fK^N$
+amounts to almost
+every vector in $\fK^N$. Now, by Corollary 5, the set $S_n$ of vectors in
+$\fK^N$ for which the moment matrix of dimension $n$ is singular is either
+the set of all vectors or a subset of measure zero. If the moment matrix
+is singular for every vector (i.e., $S_n=\fK^N$), then it is singular for
+every vector in $\sT_n(A)\cap\fK^N$, giving case (i) above. Otherwise the
+set $S_n$ is measure zero in $\fK^N$. Thus
+$\sB_n\equiv S_n\cap(\sT_n(A)\cap\fK^N)$ is of measure zero
+and is either empty or nonempty.
+\qquad\endproof
+
+\heading{2}{Tables and figures}
+In Tables 1 and 2 we consider the unpreconditioned problem and also the (left)
+ILU- and MILU-preconditioned problem (see [2] and [4]). Runs for which
+convergence was not possible in ITMAX iterations are labeled by (--).
+
+
+\topinsert
+\hbox{\vbox{ \eightpoint
+{\parindent 0pt
+\centerline{\smc Table 1}
+\centerline{\it Model problem, $h^{-1}=128$, {\rm ITMAX=3000}.
+ Number of iterations.}\vskip 6pt
+\hfil\vbox{\offinterlineskip
+\hrule
+\halign{&\vrule#&\strut\ \hfil#\ \cr
+height2pt&\omit&&\omit&&\omit&&\omit&&\omit
+ &&\omit&&\omit&&\omit&&\omit&&\omit&&\omit&\cr
+&{\rm method $\backslash$ Dh: } &
+ &0&&2${}^{-3}$&&2${}^{-2}$&&2${}^{-1}$&&2${}^{0}$&
+ &2${}^{1}$&&2${}^{ 2}$&&2${}^{ 3}$&&2${}^{ 4}$&&2${}^{5}$&\cr
+height2pt&\omit&&\omit&&\omit&&\omit&&\omit
+ &&\omit&&\omit&&\omit&&\omit&&\omit&&\omit&\cr
+\noalign{\hrule}
+height2pt&\omit&&\omit&&\omit&&\omit&&\omit
+ &&\omit&&\omit&&\omit&&\omit&&\omit&&\omit&\cr
+&{GMRES}($\infty$) \hfill &
+& 290&& 269&& 245&& 220&& 200&& 189&& 186&& 189&& 207&& 249&\cr
+&{BCG} \hfill &
+& 308&& 341&& 299&&1518&& -- && -- && -- && -- && 533&& -- &\cr
+&{BCG}{\rm, random $u^{(0)}$} \hfill &
+& 309&& 354&& 300&& 310&& 313&& 301&& 299&& 302&& 290&& 293&\cr
+&{BCGNB} \hfill &
+& 308&& 353&& 284&& 338&& 253&& 240&& 243&& 240&& 302&& 962&\cr
+&{CGS} \hfill &
+& 272&& 254&& 222&& -- && -- && -- && -- && -- && -- && -- &\cr
+&{CGS}{\rm, random $u^{(0)}$} \hfill &
+& 193&& 189&& 200&& 192&& 193&& 175&& 225&& 212&& 216&& 197&\cr
+&{CGSNB} \hfill &
+& 272&& 284&& 212&& 196&& 151&& 162&& 158&& 173&& 156&& 256&\cr
+height1pt&\omit&&\omit&&\omit&&\omit&&\omit
+ &&\omit&&\omit&&\omit&&\omit&&\omit&&\omit&\cr
+} \hrule}\hfil}}}
+\endinsert
+
+
+\topinsert
+
+\hbox{\vbox{ \eightpoint
+{\parindent 0pt
+\centerline{\smc Table 2}
+
+\centerline{\it Model Problem, $h^{-1}=128$,}
+\centerline{\it {\rm MILU}-preconditioning, {\rm ITMAX=500.}
+Number of iterations.}
+
+\medskip
+
+\hfil\vbox{\offinterlineskip
+\hrule
+\halign{&\vrule#&\strut\ \hfil#\ \cr
+height2pt&\omit&&\omit&&\omit&&\omit&&\omit
+ &&\omit&&\omit&&\omit&&\omit&&\omit&&\omit&\cr
+&{\rm Method $\backslash$ Dh: } &
+ &0&&2${}^{-3}$&&2${}^{-2}$&&2${}^{-1}$&&2${}^{0}$&
+ &2${}^{1}$&&2${}^{ 2}$&&2${}^{ 3}$&&2${}^{ 4}$&&2${}^{5}$&\cr
+height2pt&\omit&&\omit&&\omit&&\omit&&\omit
+ &&\omit&&\omit&&\omit&&\omit&&\omit&&\omit&\cr
+\noalign{\hrule}
+height2pt&\omit&&\omit&&\omit&&\omit&&\omit
+ &&\omit&&\omit&&\omit&&\omit&&\omit&&\omit&\cr
+&{\rm {GMRES}($\infty$)} \hfill &
+& 27&& 25&& 24&& 26&& 28&& 28&& 25&& 19&& 14&& 10&\cr
+&{\rm {GMRES}($\infty$), random $u^{(0)}$} \hfill &
+& 33&& 29&& 28&& 29&& 31&& 31&& 29&& 24&& 19&& 14&\cr
+&{\rm {BCG}} \hfill &
+& 31&& 27&& 29&& 33&& 30&& 37&& 30&& 23&& 15&& 10&\cr
+% &{BCG}, random $u^{(0)}$, $\gamma=.1$ \hfill &
+% & 35&& 30&& 31&& 35&& 40&& 37&& 34&& 27&& 20&& 15&\cr
+&{\rm {BCG}, random $u^{(0)}$} \hfill &
+& 38&& 34&& 33&& 37&& 44&& 40&& 38&& 29&& 23&& 18&\cr
+&{\rm {BCGNB}} \hfill &
+& 28&& 27&& 29&& 30&& 34&& 35&& 30&& 23&& 15&& 10&\cr
+&{\rm {CGS}} \hfill &
+& 21&& 18&& 17&& 20&& 22&& 22&& 19&& 15&& 9&& 6&\cr
+&{\rm {CGS}, random $u^{(0)}$} \hfill &
+& 24&& 18&& 20&& 22&& 22&& 23&& 21&& 16&& 12&& 9&\cr
+&{\rm {CGSNB}} \hfill &
+& 21&& 18&& 17&& 20&& 22&& 27&& 20&& 15&& 9&& 6&\cr
+height1pt&\omit&&\omit&&\omit&&\omit&&\omit
+ &&\omit&&\omit&&\omit&&\omit&&\omit&&\omit&\cr
+} \hrule}\hfil}}}
+\endinsert
+
+We make the following observations about these runs.
+
+\meti{$\bullet$} For the unpreconditioned problem, the standard
+{BCG} and {CGS} algorithms break down in a number of cases, but the use
+of random $u^{(0)}$ or the use of {BCGNB} or {CGSNB}
+resulted in convergence. Furthermore, the iteration counts for the
+algorithms {BCG} and {BCGNB} are in
+general comparatively close to those of the ``best'' method,
+{GMRES}($\infty$), while these algorithms have short economical
+recurrences, unlike {GMRES}($\infty$). This underscores the
+importance of the Lanczos algorithms as economical solution techniques.
+
+\meti{$\bullet$} For the ILU-preconditioned problems, in most cases
+all methods worked well. For the case of $Dh=1$, {BCG} gave
+an excessive number of iterations, but this was remedied significantly
+by {BCGNB} and much more so
+by the use of random $u^{(0)}$. Similarly, {CGS} could
+not converge, but {CGSNB} and {CGS} with random
+$u^{(0)}$ both converged.
+
+\meti{$\bullet$} For all of the MILU-preconditioned problems, all of
+the Lanczos-type algorithms performed quite well. In particular, the
+{BCG} algorithm gave approximately the same number of
+iterations as {GMRES}($\infty$).
+
+Figures 1 and 2 give representative plots of the convergence behavior of the
+algorithms for the case of $h^{-1}=128$, $Dh=4$, and no preconditioning.
+These results show that the new algorithms keep the residual size
+better behaved than the standard {BCG} and {CGS}
+algorithms over the course of the run.
+
+\topinsert
+\vskip 3.2in
+\centerline{\eightpoint\smc Fig.~1. \it Residual
+behavior: $h^{-1}=128$, $Dh=4$.}
+\endinsert
+
+
+\topinsert
+ \vskip 3.2in
+\centerline{\eightpoint\smc Fig.~2. \it Residual
+behavior: $h^{-1}=128$, $Dh=4$.}
+\endinsert
+
+We now consider a more difficult class of finite difference problems,
+namely, central finite differencing applied to the Dirichlet problem
+$$ -u_{xx}(x,y) - u_{yy}(x,y) +
+ D[(y-\textstyle{1\over 2}\displaystyle) u_x(x,y) +
+ (x-\textstyle{1\over 3}\displaystyle)
+ (x-\textstyle{2\over 3}\displaystyle) u_y(x,y)], $$
+$$ - 43\pi^2u(x,y) = G(x,y) \quad {\rm on}\ \Omega=[0,1]^2,$$
+$$u(x,y) = 1 + xy \quad \hbox{\rm on}\ \partial\Omega,$$
+with $G(x,y)$ chosen as before so that the true solution is $u(x,y)=1+xy$.
+Again, we let $h$ denote the mesh size in each direction. For $D=0$
+and $h$ small, the matrix generated by this problem is a symmetric
+indefinite matrix with 16 distinct negative eigenvalues and the rest
+of the spectrum positive.
+
+The standard conjugate residual algorithm applied to this problem with
+$h^{-1}=128$ and $D=0$ requires 766 iterations to converge to
+$||r^{(n)}||/||b||<\zeta=10^{-6}$. In any case, this is a difficult
+problem to solve.
+
+ \def\qed{\vrule height8pt width4pt depth0pt\par\medskip}
+ \def\Zero{{\bf 0}}
+ \def\dis{\displaystyle}
+ \def\b{\beta}
+ \def\r{\rho}
+ \def\X{{\bf X}}
+ \def\Y{{\bf Y}}
+ \def\bb{{\bar \beta}}
+ \def\tbcr{\theta\bb c_h \rho_h}
+ \def\ep{\varepsilon}
+
+
+
+Figures 3(a) and 3(b) show the compartmental diagrams for SI models without
+and with deaths due to the disease, for the situation in which the infectious
+period has only one stage. Figures 4(a) and 4(b) give the corresponding models
+with $m$ stages of infection. Venereal
+warts, caused by the human papilloma virus, and ordinary herpes are examples
+of sexually transmitted diseases without deaths
+due to the disease, although both are not quite SI diseases because of
+partial immunity. AIDS is the example of an SI disease with death due to
+the disease. Although our main focus is on the latter, we present results
+on SI models without deaths due to the
+disease because the simplification in the dynamics of such models
+ throws light on the case with disease-related deaths.
+
+\topinsert
+\vskip 2in
+\centerline{\eightpoint {\smc Fig.} 3(a). SI {\it model for subgroup $i$, without death
+due to the disease.}}
+\vskip 2in
+\centerline{\eightpoint {\smc Fig.} 3(b). SI {\it model with death due to the disease.}}
+\endinsert
+
+\topinsert
+\vskip 2in
+\centerline{\eightpoint {\smc Fig.} 4(a). SI {\it model without deaths due to the
+disease with $m$ stages of infection.}}
+\vskip 2in
+\centerline{\eightpoint {\smc Fig.} 4(b). SI {\it model with deaths due to the disease,
+with $m$ stages of infection.}}
+\endinsert
+
+\heading{3}{Equations and alignments}
+The equations for the system follow directly from the definitions and the
+compartmental diagrams. For one infected stage with no disease-related
+deaths, the equations are
+$$ \dot X_i=-X_ig_i-\mu X_i+U_i, \leqno(1)$$
+$$ \dot Y_i=X_ig_i-\mu Y_i. \leqno(2)$$
+If there are multiple stages to the infection, (2) is replaced by
+(3)--(5) as follows:
+$$\leqalignno{\dot Y_{i1}&=X_ig_i-(k+\mu)Y_{i1}, &(3)\cr
+\dot Y_{ir}&=kY_{i,r-1}-(k+\mu)Y_{ir},\qquad r=2,\ldots,m-1 &(4)\cr
+\dot Y_{im}&=kY_{i,m-1}-\mu Y_{im}. &(5)\cr }$$
+
+
+
+\heading{3.1}{The SI model with structured mixing}
+In this subsection we write the equations for the SI model with
+structured mixing, with one infected stage and with deaths due to the
+disease. The equations for multiple infected stages follow easily, as do
+those for SI models without death due to the disease. Recall that $f_{is}$
+gives the fraction of population subgroup $i$'s
+contacts that are made in activity group $s$. The total contact rate of
+susceptibles from population subgroup $i$ in activity group $s$ must be
+$c_iX_if_{is}$. Let $\rho_{ij}(s)$ be the fraction of the contacts of group
+$i$ that are with members of group $j$, within activity group $s$.
+Assuming random allocation of the susceptibles and infecteds from each
+population subgroup to the activity groups, the fraction infected in group
+$j$ in activity group $s$ must be $Y_j/N_j$, giving
+$$ c_iX_if_{is}\rho_{ij}(s)\beta_j{Y_j \over N_j}\leqno(6) $$
+for the rate at which susceptibles in $i$ are infected by contacts
+with infecteds from $j$ in activity group $s$. Thus, in this case, $g_i$ is
+given by
+$$
+ g_i=c_i\sum_sf_{is}\sum_j\rho_{ij}(s)\beta_j{Y_j \over N_j},
+\leqno(7)
+ $$
+and (1a) and (1b) become
+$$ \dot X_i=-c_iX_i\sum_sf_{is}\sum_j\rho_{ij}(s)\beta_j{Y_j \over
+N_j}-\mu X_i+U_i, \leqno(8) $$
+$$ \dot Y_i=c_iX_i\sum_sf_{is}\sum_j\rho_{ij}(s)\beta_j{Y_j \over
+N_j}-(\mu+k)Y_i. \leqno(9) $$
+
+\heading{3.2}{Structured mixing within activity groups}
+If the mixing within activity groups is proportional mixing, then
+$\rho_{ij}(s)$ is given by (10):
+$$\rho_{ij}(s)={f_{js}c_jN_j\over \sum_pf_{ps}c_pN_p}, \leqno(10)$$
+and (8) and (9) become (11) and (12):
+$$\dot X_i=-c_iX_i\sum_sf_{is}{\sum_jf_{js}c_j\beta_jY_j \over
+\sum_jf_{js}c_jN_j}-\mu X_i+U_i \leqno(11)$$
+$$\dot Y_i=c_iX_i\sum_sf_{is}{\sum_jf_{js}c_j\beta_jY_j \over
+\sum_jf_{js}c_jN_j}-(k+\mu)Y_i. \leqno(12)$$
+
+Expressions (11) and (12) show an important consequence of death due
+to the disease. If there are no deaths due to the disease, $N_j$ is
+constant on the asymptotically stable invariant subspace $U_j=\mu
+N_j$ for all $j$, and the first term, the nonlinear term, in
+(11) and (12) is a sum of {\it quadratic} terms. If there are deaths
+due to the disease, $N_j$ is no longer constant and the first term is
+a sum of rational expressions, each homogeneous of degree one. This
+observation extends to SIS, SIR, and SIRS models.
+
+
+
+\Refs
+
+
+\ref 1\\
+{\smc R. Fletcher}, {\it Conjugate gradient methods for indefinite
+systems}, in Numerical Analysis Dundee 1975, G.~A. Watson, ed.,
+Springer-Verlag, New York, Lecture Notes in Math. 506,
+1976, pp. 73--89.
+\endref
+
+
+\ref 2\\
+{\smc I. Gustafsson}, {\it Stability and rate of convergence of
+modified incomplete Cholesky factorization methods}, Ph.D. thesis,
+Chalmers University of Technology and the University of Goteborg,
+Goteborg, Sweden, 1979.
+\endref
+
+
+\ref 3\\
+{\smc W.~D. Joubert}, {\it Generalized conjugate gradient and
+Lanczos methods for the solution of nonsymmetric systems of linear
+equations}, Ph.D. thesis and Report
+CNA-238, Center for Numerical Analysis, University of Texas,
+Austin, TX, January 1990.
+\endref
+
+
+\ref 4\\
+{\smc J.~A. Meijerink and H.~A. van der Vorst}, {\it An iterative
+solution method for linear systems of which the coefficient matrix is
+a symmetric $M$-matrix}, Math. Comp., 31 (1977), pp.~148--162.
+\endref
+
+
+
+\ref 5\\
+{\smc Y.~Saad}, {\it The Lanczos biorthogonalization algorithm and
+other oblique projection methods for solving large unsymmetric systems},
+SIAM J. Numer. Anal., 19 (1982), pp. 485--506.
+\endref
+
+
+\ref 6\\
+{\smc S. Saks}, {\it The Theory of the Integral}, G.~E. Stechert,
+New York, 1937.
+\endref
+
+\ref 7\\
+{\smc M. Tinkham}, {\it Introduction to
+Superconductivity}, McGraw-Hill, New York, 1975.
+\endref
+
+\bye
diff --git a/obsolete/macros/plain/contrib/siam/siamptex.sty b/obsolete/macros/plain/contrib/siam/siamptex.sty
new file mode 100644
index 0000000000..8d5f040584
--- /dev/null
+++ b/obsolete/macros/plain/contrib/siam/siamptex.sty
@@ -0,0 +1,324 @@
+% SIAMPTEX.STY; 12-11-92; Paul Duggan, Society for Industrial
+% and Applied Mathematics. From
+% Ralph Youngen's siamtex.sty
+%
+% This file may be freely distributed but may not be altered in
+% any way.
+%
+% This is a file of macros and definitions for creating an article
+% for publication in a SIAM journal.
+%
+% Make the @ sign a letter for internal control sequences.
+\catcode`\@=11
+%
+% Report the version number of this package.
+\message{ *** SIAM Plain TeX macro package, version 2.1, 1-JAN-1993 ***}
+%
+%
+% FONTS
+\font\tenrm=cmr10
+\font\tenbf=cmbx10
+\font\tenit=cmti10
+\font\tensmc=cmcsc10
+\def\tenpoint{%
+ \def\rm{\fam0\tenrm}\def\bf{\fam\bffam\tenbf}%
+ \def\it{\fam\itfam\tenit}\def\smc{\tensmc}
+ \textfont0=\tenrm \scriptfont0=\sevenrm
+ \textfont1=\teni \scriptfont1=\seveni
+ \textfont2=\tensy \scriptfont2=\sevensy
+ \textfont3=\tenex \scriptfont3=\tenex
+\baselineskip=12pt\rm}%
+
+\font\ninerm=cmr9
+\font\ninebf=cmbx9
+\font\nineit=cmti9
+\def\ninepoint{%
+ \def\rm{\ninerm}\def\bf{\ninebf}%
+ \def\it{\nineit}\baselineskip=11pt\rm}%
+
+\font\eightrm=cmr8
+\font\eightbf=cmbx8
+\font\eightit=cmti8
+\font\eighti=cmmi8
+\font\eightsy=cmsy8
+\font\eightsmc=cmcsc8
+\font\eighttt=cmtt8
+ \def\eightpoint{%
+ \def\rm{\fam0\eightrm}\def\bf{\fam\bffam\eightbf}%
+ \def\it{\fam\itfam\eightit}\def\smc{\eightsmc}\def\tt{\eighttt}\baselineskip=10pt\rm%
+ \textfont0=\eightrm \scriptfont0=\sixrm
+ \textfont1=\eighti \scriptfont1=\sixi
+ \textfont2=\eightsy \scriptfont2=\sixsy
+\textfont3=\tenex \scriptfont3=\tenex
+}
+
+\font\sixrm=cmr6
+\font\sixbf=cmbx6
+\font\sixi=cmmi6
+\font\sixsmc=cmr5
+\font\sixsy=cmsy6
+\def\sixpoint{%
+ \def\rm{\sixrm}\def\bf{\sixbf}%
+ \def\smc{\sixsmc}\baselineskip=8pt\rm}%
+
+\fontdimen13\tensy=2.6pt
+\fontdimen14\tensy=2.6pt
+\fontdimen15\tensy=2.6pt
+\fontdimen16\tensy=1.2pt
+\fontdimen17\tensy=1.2pt
+\fontdimen18\tensy=1.2pt
+
+\def\rheadfont{\tenpoint\smc}
+\def\titlefont{\tenpoint\bf}
+\def\authorfont{\eightpoint\smc}
+\def\dedicatefont{\ninepoint\it}
+
+
+% DIMENSIONS
+\hsize=31pc
+\vsize=50pc
+\parindent=2em
+
+
+% MACROS
+\newif\ifkeywords@
+\newif\ifsubjclass@
+\newif\ifdedicate@
+\newif\ifrecdate@
+\newif\ifoneclass@
+
+\keywords@false
+\subjclass@false
+\dedicate@false
+\recdate@false
+\oneclass@false
+
+\def\title#1\endtitle{\def\thetitle{\uppercase{#1}}%
+ \def\\{\relax\ }\xdef\rightrh{\lowercase{#1}}}
+
+\def\shorttitle#1{\xdef\rightrh{\lowercase{#1}}}
+
+\def\author#1\endauthor{%
+ \def\and{\hbox{\sixrm AND }}\def\\{\break}% prevent \uppercase when typesetting
+ \def\theauthor{\uppercase{#1}}%
+ {%
+ \def\\{\relax\ }% change \\ to be a space in the running head
+ \def\fnmark##1{}% turn address off in the running head
+ \def\and{and }% "and" is the same size as names in the running head
+ \xdef\leftrh{\lowercase{#1}}%
+ }}
+
+\def\shortauthor#1{\def\and{and }\xdef\leftrh{\lowercase{#1}}}
+
+\gdef\fnmark#1{#1}
+\gdef\address#1#2{\makefootnote@{\textfont2=\eightsy #1}{#2\unskip.}}
+\def\journal#1{\def\thejournal{#1}}
+\journal{SIAM J. S{\smc CI. }S{\smc TAT. }C{\smc OMP.}}
+\def\copyyear#1{\def\thecopyyear{#1}}
+\copyyear{1989}
+\def\vol#1{\def\thevol{#1}}
+\def\no#1{\def\theno{#1}}
+\def\date#1{\def\thedate{#1}}
+\def\code#1{\def\thecode{#1}}
+\def\dedicate#1{\dedicate@true\def\thededicate{#1}}
+\def\keywords#1\endkeywords{\keywords@true\def\thekeywords{#1}}
+\def\subjclass#1\endsubjclass{\subjclass@true\def\thesubjclass{#1}}
+\def\oneclass{\oneclass@true}
+\long\def\abstract#1{\def\theabstract{#1}}
+
+\def\raggedcenter{\leftskip=0pt plus 1fill \rightskip=0pt plus 1fill}
+
+\def\copyright#1{{\ooalign{\hfil\raise.07ex\hbox{c}\hfil\crcr#1\char"0D}}}
+
+\def\recdate#1#2{\global\recdate@true
+ \gdef\recdate@{#1Received by the editors \ignorespaces#2\unskip.}%
+ \makefootnote@{}{\recdate@}}
+
+
+
+\def\heading#1#2{%
+ \vskip6pt{\bf #1.\enspace\ignorespaces#2.\enspace}\ignorespaces}
+
+\def\thm#1{{\smc #1.}\begingroup\it\enspace\ignorespaces}
+\let\lem=\thm
+\let\cor=\thm
+\let\prop=\thm
+
+\def\endthm{\endgroup}
+\let\endlem=\endthm
+\let\endcor=\endthm
+\let\endprop=\endthm
+
+\def\prf#1{{\it #1}.\rm\enspace\ignorespaces}
+\let\rem=\prf
+\let\case=\prf
+
+\def\endproof{\vbox{\hrule\hbox{%
+ \vrule height1.3ex\hskip0.8ex\vrule}\hrule
+ }}
+
+\def\dfn#1{{\smc #1.}\rm\enspace\ignorespaces}
+
+\let\topmatter=\relax
+\def\endtopmatter{%
+ \global\headline={\hss\vtop to \z@ {%
+ \sixpoint\rm\noindent\thejournal \hfill%
+ \rm\copyright{\sevensy}\rm%
+ \thecopyyear\ Society for Industrial and Applied Mathematics\par
+ \noindent Vol. \thevol , No. \theno , \thedate\hfill\thecode\par
+ \vss}\hss}%
+ \leavevmode\vskip8pt
+ \vbox{\noindent\raggedcenter\let\\=\break\titlefont\thetitle
+ \ifrecdate@*\fi}
+ \vskip6pt
+ \vbox{\noindent\raggedcenter\let\\=\break\authorfont\theauthor}
+ \ifdedicate@
+ \vskip6pt
+ \vbox{\noindent\raggedcenter\let\\=\break\dedicatefont
+ \thededicate}
+ \fi
+ \vskip14pt
+ {\eightpoint{\bf Abstract.\ }\theabstract\par
+ \ifkeywords@
+ \vskip10pt
+ {\bf Key words.} \thekeywords\par
+ \fi
+ \ifsubjclass@
+ \vskip10pt
+ {\bf AMS subject classification\ifoneclass@\else s\fi. }%
+ \thesubjclass\par
+ \fi}
+ \vskip8pt
+ \tenpoint}
+%%grouping of \eightpoint is new: added 2/22/91 to allow roman & bold
+%%in math mode
+
+
+%%% REFERENCES
+
+\newdimen\refindent@
+\newdimen\refhangindent@
+\newbox\refbox@
+\setbox\refbox@=\hbox{\eightpoint\rm [00]}% Default 2 digits
+\refindent@=\wd\refbox@
+
+\def\resetrefindent#1{%
+ \setbox\refbox@=\hbox{\eightpoint\rm [#1]}%
+ \refindent@=\wd\refbox@}
+
+\def\Refs{%
+ \unskip\vskip2pc
+ \centerline{\eightpoint\rm REFERENCES}%
+ \penalty10000
+ \vskip4pt
+ \penalty10000
+ \refhangindent@=\refindent@
+ \global\advance\refhangindent@ by 2em
+ \global\everypar{\hangindent\refhangindent@}%
+ \parindent=0pt\eightpoint\rm}
+
+\def\XRefs{%
+ \unskip\vskip2pc
+ \centerline{\eightpoint\rm REFERENCES}%
+ \penalty10000
+ \vskip4pt
+ \penalty10000
+ \refhangindent@=\refindent@
+ \global\everypar{\hangindent\refhangindent@}%
+ \parindent=0pt\eightpoint\rm}
+
+\def\sameauthor{\leavevmode\vbox to 1ex{\vskip 0pt plus 100pt
+ \hbox to 3em{\leaders\hrule\hfil}\vskip 0pt plus 300pt}}
+
+\def\ref#1\\#2\endref{\leavevmode\hbox to \refindent@{\hfil[#1]}\enspace #2\par}
+
+\def\xref\\#1\endref{\leavevmode #1\par}
+%%% OUTPUT
+
+\global\footline={\hss\eightpoint\rm\folio\hss}% first page
+\output{\plainoutput}
+\def\plainoutput{\shipout\vbox{\makeheadline\pagebody\makefootline}%
+ \advancepageno
+ \ifnum\pageno>1
+ \global\footline={\hfill}%
+ \fi
+ \ifodd\pageno
+ \global\headline={\hss\rightrh\hss{\tenpoint\rm\folio}}%
+ \else
+ \global\headline={\hskip-8pt{\tenpoint\rm\folio}\hss\leftrh\hss}%
+ \fi
+ \ifnum\outputpenalty>-\@MM \else\dosupereject\fi}
+\def\pagebody{\vbox to\vsize{\boxmaxdepth\maxdepth \pagecontents}}
+\def\makeheadline{\vbox to\z@{\vskip-22.5\p@
+ \line{\vbox to8.5\p@{}\rheadfont\the\headline}\vss}%
+ \nointerlineskip}
+\def\makefootline{\baselineskip24\p@\vskip-8\p@\line{\the\footline}}
+\def\dosupereject{\ifnum\insertpenalties>\z@ % something is being held over
+ \line{}\kern-\topskip\nobreak\vfill\supereject\fi}
+
+\def\relaxnext@{\let\next\relax}
+\def\footmarkform@#1{\ifmmode {}^{#1}\else$^{#1}$\fi }
+\let\thefootnotemark\footmarkform@
+\def\makefootnote@#1#2{\insert\footins
+ {\interlinepenalty\interfootnotelinepenalty
+ \eightpoint \splittopskip=\ht\strutbox
+ \splitmaxdepth=\dp\strutbox
+ \floatingpenalty=\@MM
+ \leftskip=\z@ \rightskip=\z@
+ \spaceskip=\z@ \xspaceskip=\z@
+ \leavevmode{#1}\footstrut\ignorespaces#2\unskip
+ \lower\dp\strutbox\vbox to\dp\strutbox{}}}
+\newcount\footmarkcount@
+ \footmarkcount@=\z@ % Initialization
+\def\footnotemark{\let\@sf=\empty \relaxnext@
+ \ifhmode \edef\@sf{\spacefactor=\the\spacefactor}\/\fi
+ \def\next@{\ifx[\next \let\next=\nextii@ \else
+ \ifx"\next \let\next=\nextiii@ \else
+ \let\next=\nextiv@ \fi\fi\next}%
+ \def\nextii@[##1]{\footmarkform@{##1}\@sf}%
+ \def\nextiii@"##1"{{##1}\@sf}%
+ \def\nextiv@{\global\advance\footmarkcount@\@ne
+ \footmarkform@{\number\footmarkcount@}\@sf}%
+ \futurelet\next\next@}
+\def\footnotetext{\relaxnext@
+ \def\next@{\ifx[\next \let\next=\nextii@ \else
+ \ifx"\next \let\next=\nextiii@ \else
+ \let\next=\nextiv@ \fi\fi\next}%
+ \def\nextii@[##1]##2{\makefootnote@{\footmarkform@{##1}}{##2}}%
+ \def\nextiii@"##1"##2{\makefootnote@{##1}{##2}}%
+
+\def\nextiv@##1{\makefootnote@{\footmarkform@{\number\footmarkcount@}}{##1}}%
+ \futurelet\next\next@}
+\def\footnote{\let\@sf=\empty \relaxnext@
+ \ifhmode \edef\@sf{\spacefactor\the\spacefactor}\/\fi
+ \def\next@{\ifx[\next \let\next=\nextii@ \else
+ \ifx"\next \let\next=\nextiii@ \else
+ \let\next=\nextiv@ \fi\fi\next}%
+ \def\nextii@[##1]##2{\footnotemark[##1]\footnotetext[##1]{##2}}%
+ \def\nextiii@"##1"##2{\footnotemark"##1"\footnotetext"##1"{##2}}%
+ \def\nextiv@##1{\footnotemark\footnotetext{##1}}%
+ \futurelet\next\next@}
+\def\adjustfootnotemark#1{\advance\footmarkcount@#1\relax}
+
+\skip\footins=18\p@ plus6\p@ minus6\p@
+
+\def\footnoterule{\kern -4\p@\hrule width 3pc \kern 3.6\p@ } % rule = .4 pt high
+
+\def\meti#1{\parindent=2\parindent \par\indent\llap{#1\enspace}\ignorespaces\parindent=.5\parindent}
+\def\metimeti#1{\parindent=2\parindent \par\indent\llap{#1\enspace}\ignorespaces\parindent=.5\parindent}
+
+\font\tencmmib=cmmib10 \skewchar\tencmmib='177
+\newfam\cmmibfam
+\textfont\cmmibfam=\tencmmib
+
+\def\ldisplaylinesno#1{\displ@y\halign{
+ \hbox to\displaywidth{$\@lign\hfil\displaystyle##\hfil$}&
+ \kern-\displaywidth\rlap{$##$}\kern\displaywidth\crcr
+ #1\crcr}}
+
+\def\bphi{\mathchar"0\hexnumber@\cmmibfam"1E}
+
+
+% Turn off @ as being a letter.
+%
+\catcode`\@=12
diff --git a/obsolete/macros/xetex/latex/xecolour/README b/obsolete/macros/xetex/latex/xecolour/README
new file mode 100644
index 0000000000..6999cef229
--- /dev/null
+++ b/obsolete/macros/xetex/latex/xecolour/README
@@ -0,0 +1,16 @@
+-------------------------------
+The xecolour Package v0.1
+
+xecolour package is a simple package which defines about 140 different colours by XeTeX's
+colour feature that can be used in bidirectional texts without any problem. All the command
+names are the names of the colours (i.e. \blue for blue colour) except ``\tancolour''
+for ``tan colour'' and the general syntax of the command is
+
+ \colourname{<text>}
+
+
+Please report any bugs to the author (vafa.khalighi@students.mq.edu.au).
+
+-------------------------------
+Vafa Khalighi
+2009/01/05
diff --git a/obsolete/macros/xetex/latex/xecolour/doc/xecolour-user.pdf b/obsolete/macros/xetex/latex/xecolour/doc/xecolour-user.pdf
new file mode 100644
index 0000000000..92610d4ae4
--- /dev/null
+++ b/obsolete/macros/xetex/latex/xecolour/doc/xecolour-user.pdf
Binary files differ
diff --git a/obsolete/macros/xetex/latex/xecolour/doc/xecolour-user.tex b/obsolete/macros/xetex/latex/xecolour/doc/xecolour-user.tex
new file mode 100644
index 0000000000..7d743e23c5
--- /dev/null
+++ b/obsolete/macros/xetex/latex/xecolour/doc/xecolour-user.tex
@@ -0,0 +1,229 @@
+\documentclass[12pt]{xepersian-user}
+\usepackage{xecolour}
+\usepackage{supertabular}
+\setmainfont[Scale=1,Mapping=tex-text]{Linux Libertine}
+\def\Date{09/01/05}
+\def\Version{0.1}
+\makeindex
+\begin{document}
+\begingroup
+\evensidemargin \paperwidth\relax
+\advance\evensidemargin -2in
+\advance\evensidemargin -\textwidth
+\divide\evensidemargin 2
+\oddsidemargin\evensidemargin
+\begin{titlepage}
+
+\let\footnotesize\small
+\let\footnoterule\relax
+\setcounter{page}{0}
+
+\null
+\vfil
+\vskip 25pt
+\begin{center}
+ {\LARGE\textbf{\textsf{xecolour} Package}}\\[5pt]
+ {\large\textbf{Colour in \XeLaTeX}.}\\
+\end{center}
+
+\bigskip\bigskip
+\hbox to \hsize{%
+ \hss
+%\includegraphics[width=9cm,height=9cm]{iran.jpg}
+ \hss}
+\bigskip
+\bigskip
+
+\begin{center}
+{\LARGE\textbf{User's Guide}}\par
+\vskip 3em
+{\large \lineskip .75em Vafa Khalighi}\par
+\vskip 1.5em
+{\large \thefiledate\\[2pt]
+ Version \Version%
+ \footnote{Documentation edited and repacked at \thefiledate\ by
+ Vafa Khalighi \url{vafa.khalighi@students.mq.edu.au}.}}\par
+
+\end{center}
+\vfil
+\small
+Author's address:\\
+ 4/34 Sorrell Street\\
+ Parramatta\\
+ NSW 2150\\
+ Australia\\[3mm]
+ Internet: \Verb[codes={\catcode`\<=12}]+<vafa.khalighi@students.mq.edu.au>+
+\end{titlepage}
+
+\endgroup
+
+\setcounter{footnote}{0}
+\tableofcontents
+\pagenumbering{arabic}
+\part*{Introduction}
+As the author of \XePersian\ package (a package for Persian typesetting in \LaTeX\ over \XeTeX), I always wanted to write a package that make writing in colours easy in bidirectional texts. However there are packages \textsf{color} and \textsf{xcolor}, but writing bidirectional texts in different colours using these packages is a nightmare and the colours of the text will get mixed. In fact, the \textsf{bidi} package has a patch where one could use the packages mentioned above to write text in colour but unfortunately that text has got to be not more than a line, otherwise the colour of the text gets mixed.
+
+Thus, I wrote \textsf{xecolour} package which allows the user to write texts in 140 different colours without any problem. I have used \XeTeX's feature to define 140 colours and I believe these 140 colours are all one needs. The command names are just the names of colours (i.e. "\blue" for blue colour) and the general syntax is:
+\begingroup
+\catcode`\<=12
+\Mac \colourname{<text>}
+\endgroup
+In the next section, you will see a sample of each colour, and at the end of this manual, in the index part, all commands are written in alphabetical order. So if you wish to use a specific colour, please look at the index and find the command you should use.
+\part{Sample Colours}
+\begin{tabular}{rl}
+\aliceblue{xecolour}&\n\aliceblue\\
+\aquamarine{xecolour}&\n\aquamarine\\
+\bisque{xecolour}&\n\bisque\\
+\blue{xecolour} &\n\blue\\
+\burlywood{xecolour}&\n\burlywood\\
+\chocolate{xecolour}&\n\chocolate\\
+\cornsilk{xecolour}&\n\cornsilk\\
+\darkblue{xecolour}&\n\darkblue\\
+\darkgray{xecolour}&\n\darkgray\\
+\darkmagenta{xecolour}&\n\darkmagenta\\
+\darkorchid{xecolour}&\n\darkorchid\\
+\darkseagreen{xecolour}&\n\darkseagreen\\
+\darkturquoise{xecolour}&\n\darkturquoise\\
+\deepskyblue{xecolour}&\n\deepskyblue\\
+\firebrick{xecolour}&\n\firebrick\\
+\fuchsia{xecolour}&\n\fuchsia\\
+\gold{xecolour}&\n\gold\\
+\green{xecolour}&\n\green\\
+\hotpink{xecolour}&\n\hotpink\\
+\ivory{xecolour}&\n\ivory\\
+\lavenderblush{xecolour}&\n\lavenderblush\\
+\lightblue{xecolour}&\n\lightblue\\
+\lightgoldenrodyellow{xecolour}&\n\lightgoldenrodyellow\\
+\lightpink{xecolour}&\n\lightpink\\
+\lightskyblue{xecolour}&\n\lightskyblue\\
+\lightyellow{xecolour}&\n\lightyellow\\
+\linen{xecolour}&\n\linen\\
+\mediumaquamarine{xecolour}&\n\mediumaquamarine\\
+\mediumpurple{xecolour}&\n\mediumpurple\\
+\end{tabular}
+\newpage
+\begin{tabular}{rl}
+\mediumspringgreen{xecolour}&\n\mediumspringgreen\\
+\midnightblue{xecolour}&\n\midnightblue\\
+\moccasin{xecolour}&\n\moccasin\\
+\oldlace{xecolour}&\n\oldlace\\
+\orangered{xecolour}&\n\orangered\\
+\palegreen{xecolour}&\n\palegreen\\
+\papayawhip{xecolour}&\n\papayawhip\\
+\pink{xecolour}&\n\pink\\
+\purple{xecolour}&\n\purple\\
+\royalblue{xecolour}&\n\royalblue\\
+\sandybrown{xecolour}&\n\sandybrown\\
+\sienna{xecolour}&\n\sienna\\
+\slateblue{xecolour}&\n\slateblue\\
+\steelblue{xecolour}&\n\steelblue\\
+\thistle{xecolor}&\n\thistle\\
+\violet{xecolour}&\n\violet\\
+\whitesmoke{xecolour}&\n\whitesmoke\\
+\antiquewhite{xecolour}&\n\antiquewhite\\
+\azure{xecolour}&\n\azure\\
+\black{xecolour}&\n\black\\
+\blueviolet{xecolour}&\n\blueviolet\\
+\cadetblue{xecolour}&\n\cadetblue\\
+\coral{xecolour}&\n\coral\\
+\crimson{xecolour}&\n\crimson\\
+\darkcyan{xecolour}&\n\darkcyan\\
+\darkgreen{xecolour}&\n\darkgreen\\
+\darkolivegreen{xecolour}&\n\darkolivegreen\\
+\darkred{xecolour}&\n\darkred\\
+\darkslateblue{xecolour}&\n\darkslateblue\\
+\darkviolet{xecolour}&\n\darkviolet\\
+\dimgray{xecolour}&\n\dimgray\\
+\floralwhite{xecolour}&\n\floralwhite\\
+\gainsboro{xecolour}&\n\gainsboro\\
+\goldenrod{xecolour}&\n\goldenrod\\
+\greenyellow{xecolour}&\n\greenyellow\\
+\indianred{xecolour}&\n\indianred\\
+\khaki{xecolour}&\n\khaki\\
+\lawngreen{xecolour}&\n\lawngreen\\
+\end{tabular}
+\newpage
+\begin{tabular}{rl}
+\lightcoral{xecolour}&\n\lightcoral\\
+\lightgreen{xecolour}&\n\lightgreen\\
+\lightsalmon{xecolour}&\n\lightsalmon\\
+\lightslategray{xecolour}&\n\lightslategray\\
+\lime{xecolour}&\n\lime\\
+\magenta{xecolour}&\n\magenta\\
+\mediumblue{xecolour}&\n\mediumblue\\
+\mediumseagreen{xecolour}&\n\mediumseagreen\\
+\mediumturquoise{xecolour}&\n\mediumturquoise\\
+\mintcream{xecolour}&\n\mintcream\\
+\navajowhite{xecolour}&\n\navajowhite\\
+\olivedrab{xecolour}&\n\olivedrab\\
+\orchid{xecolour}&\n\orchid\\
+\paleturquoise{xecolour}&\n\paleturquoise\\
+\peachpuff{xecolour}&\n\peachpuff\\
+\plum{xecolour}&\n\plum\\
+\red{xecolour}&\n\red\\
+\saddlebrown{xecolour}&\n\saddlebrown\\
+\seagreen{xecolour}&\n\seagreen\\
+\silver{xecolour}&\n\silver\\
+\snow{xecolour}&\n\snow\\
+\tancolour{xecolour}&\n\tancolour\\
+\tomato{xecolour}&\n\tomato\\
+\wheat{xecolour}&\n\wheat\\
+\yellow{xecolour}&\n\yellow\\
+\aqua{xecolour}&\n\aqua\\
+\beige{xecolour}&\n\beige\\
+\blanchedalmond{xecolour}&\n\blanchedalmond\\
+\brown{xecolour}&\n\brown\\
+\chartreuse{xecolour}&\n\chartreuse\\
+\cornflowerblue{xecolour}&\n\cornflowerblue\\
+\cyan{xecolour}&\n\cyan\\
+\darkgoldenrod{xecolour}&\n\darkgoldenrod\\
+\darkkhaki{xecolour}&\n\darkkhaki\\
+\darkorange{xecolour}&\n\darkorange\\
+\darksalmon{xecolour}&\n\darksalmon\\
+\darkslategray{xecolour}&\n\darkslategray\\
+\end{tabular}
+\newpage
+\begin{tabular}{rl}
+\deeppink{xecolour}&\n\deeppink\\
+\dodgerblue{xecolour}&\n\dodgerblue\\
+\forestgreen{xecolour}&\n\forestgreen\\
+\ghostwhite{xecolour}&\n\ghostwhite\\
+\gray{xecolour}&\n\gray\\
+\honeydew{xecolour}&\n\honeydew\\
+\indigo{xecolour}&\n\indigo\\
+\lavender{xecolour}&\n\lavender\\
+\lemonchiffon{xecolour}&\n\lemonchiffon\\
+\lightcyan{xecolour}&\n\lightcyan\\
+\lightgrey{xecolour}&\n\lightgrey\\
+\lightseagreen{xecolour}&\n\lightseagreen\\
+\lightsteelblue{xecolour}&\n\lightsteelblue\\
+\limegreen{xecolour}&\n\limegreen\\
+\maroon{xecolour}&\n\maroon\\
+\mediumorchid{xecolour}&\n\mediumorchid\\
+\mediumslateblue{xecolour}&\n\mediumslateblue\\
+\mediumvioletred{xecolour}&\n\mediumvioletred\\
+\mistyrose{xecolour}&\n\mistyrose\\
+\navy{xecolour}&\n\mistyrose\\
+\orange{xecolour}&\n\orange\\
+\palegoldenrod{xecolour}&\n\palegoldenrod\\
+\palevioletred{xecolour}&\n\palevioletred\\
+\peru{xecolour}&\n\peru\\
+\powderblue{xecolour}&\n\powderblue\\
+\rosybrown{xecolour}&\n\rosybrown\\
+\salmon{xecolour}&\n\salmon\\
+\seashell{xecolour}&\n\seashell\\
+\skyblue{xecolour}&\n\skyblue\\
+\springgreen{xecolour}&\n\springgreen\\
+\teal{xecolour}&\n\teal\\
+\turquoise{xecolour}&\n\turquoise\\
+\white{xecolour}&\n\white\\
+\yellowgreen{xecolour}&\n\yellowgreen\\
+\lightyellow{xecolour}&\n\lightyellow\\
+\crimson{xecolour}&\n\crimson\\
+\bluishgreenishgrey{xecolour}&\n\bluishgreenishgrey\\
+\end{tabular}
+
+
+
+\PrintUserIndex
+\end{document}
diff --git a/obsolete/macros/xetex/latex/xecolour/tex/xecolour.sty b/obsolete/macros/xetex/latex/xecolour/tex/xecolour.sty
new file mode 100644
index 0000000000..6a52670ebf
--- /dev/null
+++ b/obsolete/macros/xetex/latex/xecolour/tex/xecolour.sty
@@ -0,0 +1,161 @@
+%% This file is xecolour.sty
+%%
+%% Copyright 2009 by Vafa Khalighi
+%%
+%%%% It may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3c
+%% of this license or (at your option) any later version.
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{xecolour}[2009/01/05 v0.1
+ Colour in XeLaTeX (Author: Vafa Khalighi)]
+\begingroup
+ \def\notXeLaTeXformat{%
+ \@latex@error{*** this package currently works only with XeLaTeX ***^^J
+ You are not using XeLaTeX, so we are exiting cleanly!^^J
+ Continuing may lead to 'unavailable font metrics' errors!^^J}\@ehc
+ \endgroup\endinput}
+\expandafter\ifx\csname XeTeXpicfile\endcsname\relax\expandafter\notXeLaTeXformat\fi
+\endgroup
+\RequirePackage{fontspec}
+\def\aliceblue#1{\begingroup\addfontfeature{Color=F0F8FF}#1\endgroup}
+\def\aquamarine#1{\begingroup\addfontfeature{Color=7FFFD4}#1\endgroup}
+\def\bisque#1{\begingroup\addfontfeature{Color=FFE4C4}#1\endgroup}
+\def\blue#1{\begingroup\addfontfeature{Color=0000FF}#1\endgroup}
+\def\burlywood#1{\begingroup\addfontfeature{Color=DEB887}#1\endgroup}
+\def\chocolate#1{\begingroup\addfontfeature{Color=D2691E}#1\endgroup}
+\def\cornsilk#1{\begingroup\addfontfeature{Color=FFF8DC}#1\endgroup}
+\def\darkblue#1{\begingroup\addfontfeature{Color=00008B}#1\endgroup}
+\def\darkgray#1{\begingroup\addfontfeature{Color=A9A9A9}#1\endgroup}
+\def\darkmagenta#1{\begingroup\addfontfeature{Color=8B008B}#1\endgroup}
+\def\darkorchid#1{\begingroup\addfontfeature{Color=9932CC}#1\endgroup}
+\def\darkseagreen#1{\begingroup\addfontfeature{Color=8DBC8F}#1\endgroup}
+\def\darkturquoise#1{\begingroup\addfontfeature{Color=00DED1}#1\endgroup}
+\def\deepskyblue#1{\begingroup\addfontfeature{Color=00BFFF}#1\endgroup}
+\def\firebrick#1{\begingroup\addfontfeature{Color=B22222}#1\endgroup}
+\def\fuchsia#1{\begingroup\addfontfeature{Color=FF00FF}#1\endgroup}
+\def\gold#1{\begingroup\addfontfeature{Color=FFD700}#1\endgroup}
+\def\green#1{\begingroup\addfontfeature{Color=008000}#1\endgroup}
+\def\hotpink#1{\begingroup\addfontfeature{Color=FF69B4}#1\endgroup}
+\def\ivory#1{\begingroup\addfontfeature{Color=FFFFF0}#1\endgroup}
+\def\lavenderblush#1{\begingroup\addfontfeature{Color=FFF0F5}#1\endgroup}
+\def\lightblue#1{\begingroup\addfontfeature{Color=ADD8E6}#1\endgroup}
+\def\lightgoldenrodyellow#1{\begingroup\addfontfeature{Color=FAFAD2}#1\endgroup}
+\def\lightpink#1{\begingroup\addfontfeature{Color=FFB6C1}#1\endgroup}
+\def\lightskyblue#1{\begingroup\addfontfeature{Color=87CEFA}#1\endgroup}
+\def\lightyellow#1{\begingroup\addfontfeature{Color=FFFFE0}#1\endgroup}
+\def\linen#1{\begingroup\addfontfeature{Color=FAF0E6}#1\endgroup}
+\def\mediumaquamarine#1{\begingroup\addfontfeature{Color=66CDAA}#1\endgroup}
+\def\mediumpurple#1{\begingroup\addfontfeature{Color=9370DB}#1\endgroup}
+\def\mediumspringgreen#1{\begingroup\addfontfeature{Color=00FA9A}#1\endgroup}
+\def\midnightblue#1{\begingroup\addfontfeature{Color=191970}#1\endgroup}
+\def\moccasin#1{\begingroup\addfontfeature{Color=FFE4B5}#1\endgroup}
+\def\oldlace#1{\begingroup\addfontfeature{Color=FDF5E6}#1\endgroup}
+\def\orangered#1{\begingroup\addfontfeature{Color=FF4500}#1\endgroup}
+\def\palegreen#1{\begingroup\addfontfeature{Color=98FB98}#1\endgroup}
+\def\papayawhip#1{\begingroup\addfontfeature{Color=FFEFD5}#1\endgroup}
+\def\pink#1{\begingroup\addfontfeature{Color=FFC8CB}#1\endgroup}
+\def\purple#1{\begingroup\addfontfeature{Color=800080}#1\endgroup}
+\def\royalblue#1{\begingroup\addfontfeature{Color=4169E1}#1\endgroup}
+\def\sandybrown#1{\begingroup\addfontfeature{Color=F4A460}#1\endgroup}
+\def\sienna#1{\begingroup\addfontfeature{Color=A0522D}#1\endgroup}
+\def\slateblue#1{\begingroup\addfontfeature{Color=6A5ACD}#1\endgroup}
+\def\steelblue#1{\begingroup\addfontfeature{Color=4682B4}#1\endgroup}
+\def\thistle#1{\begingroup\addfontfeature{Color=D8BFD8}#1\endgroup}
+\def\violet#1{\begingroup\addfontfeature{Color=EE82EE}#1\endgroup}
+\def\whitesmoke#1{\begingroup\addfontfeature{Color=F5F5F5}#1\endgroup}
+\def\antiquewhite#1{\begingroup\addfontfeature{Color=FAEBD7}#1\endgroup}
+\def\azure#1{\begingroup\addfontfeature{Color=F0FFFF}#1\endgroup}
+\def\black#1{\begingroup\addfontfeature{Color=000000}#1\endgroup}
+\def\blueviolet#1{\begingroup\addfontfeature{Color=8A2BE2}#1\endgroup}
+\def\cadetblue#1{\begingroup\addfontfeature{Color=5F9EA0}#1\endgroup}
+\def\coral#1{\begingroup\addfontfeature{Color=FF7F50}#1\endgroup}
+\def\crimson#1{\begingroup\addfontfeature{Color=DC143C}#1\endgroup}
+\def\darkcyan#1{\begingroup\addfontfeature{Color=008B8B}#1\endgroup}
+\def\darkgreen#1{\begingroup\addfontfeature{Color=006400}#1\endgroup}
+\def\darkolivegreen#1{\begingroup\addfontfeature{Color=556B2F}#1\endgroup}
+\def\darkred#1{\begingroup\addfontfeature{Color=8B0000}#1\endgroup}
+\def\darkslateblue#1{\begingroup\addfontfeature{Color=483D8B}#1\endgroup}
+\def\darkviolet#1{\begingroup\addfontfeature{Color=9400D3}#1\endgroup}
+\def\dimgray#1{\begingroup\addfontfeature{Color=696969}#1\endgroup}
+\def\floralwhite#1{\begingroup\addfontfeature{Color=FFFAF0}#1\endgroup}
+\def\gainsboro#1{\begingroup\addfontfeature{Color=DCDCDC}#1\endgroup}
+\def\goldenrod#1{\begingroup\addfontfeature{Color=DAA520}#1\endgroup}
+\def\greenyellow#1{\begingroup\addfontfeature{Color=ADFF2F}#1\endgroup}
+\def\indianred#1{\begingroup\addfontfeature{Color=CD5C5C}#1\endgroup}
+\def\khaki#1{\begingroup\addfontfeature{Color=F0E68C}#1\endgroup}
+\def\lawngreen#1{\begingroup\addfontfeature{Color=7CFC00}#1\endgroup}
+\def\lightcoral#1{\begingroup\addfontfeature{Color=F08080}#1\endgroup}
+\def\lightgreen#1{\begingroup\addfontfeature{Color=90EE90}#1\endgroup}
+\def\lightsalmon#1{\begingroup\addfontfeature{Color=FFA07A}#1\endgroup}
+\def\lightslategray#1{\begingroup\addfontfeature{Color=778899}#1\endgroup}
+\def\lime#1{\begingroup\addfontfeature{Color=00FF00}#1\endgroup}
+\def\magenta#1{\begingroup\addfontfeature{Color=FF00FF}#1\endgroup}
+\def\mediumblue#1{\begingroup\addfontfeature{Color=0000CD}#1\endgroup}
+\def\mediumseagreen#1{\begingroup\addfontfeature{Color=3CB371}#1\endgroup}
+\def\mediumturquoise#1{\begingroup\addfontfeature{Color=48D1CC}#1\endgroup}
+\def\mintcream#1{\begingroup\addfontfeature{Color=F5FFFA}#1\endgroup}
+\def\navajowhite#1{\begingroup\addfontfeature{Color=FFDEAD}#1\endgroup}
+\def\olivedrab#1{\begingroup\addfontfeature{Color=6B8E23}#1\endgroup}
+\def\orchid#1{\begingroup\addfontfeature{Color=DA70D6}#1\endgroup}
+\def\paleturquoise#1{\begingroup\addfontfeature{Color=AFEEEE}#1\endgroup}
+\def\peachpuff#1{\begingroup\addfontfeature{Color=FFDAB9}#1\endgroup}
+\def\plum#1{\begingroup\addfontfeature{Color=DDA0DD}#1\endgroup}
+\def\red#1{\begingroup\addfontfeature{Color=FF0000}#1\endgroup}
+\def\saddlebrown#1{\begingroup\addfontfeature{Color=8B4513}#1\endgroup}
+\def\seagreen#1{\begingroup\addfontfeature{Color=2E8B57}#1\endgroup}
+\def\silver#1{\begingroup\addfontfeature{Color=C0C0C0}#1\endgroup}
+\def\snow#1{\begingroup\addfontfeature{Color=FFFAFA}#1\endgroup}
+\def\tancolour#1{\begingroup\addfontfeature{Color=D2B48C}#1\endgroup}
+\def\tomato#1{\begingroup\addfontfeature{Color=FF6347}#1\endgroup}
+\def\wheat#1{\begingroup\addfontfeature{Color=F5DEB3}#1\endgroup}
+\def\yellow#1{\begingroup\addfontfeature{Color=FFFF00}#1\endgroup}
+\def\aqua#1{\begingroup\addfontfeature{Color=00FFFF}#1\endgroup}
+\def\beige#1{\begingroup\addfontfeature{Color=F5F5DC}#1\endgroup}
+\def\blanchedalmond#1{\begingroup\addfontfeature{Color=FFEBCD}#1\endgroup}
+\def\brown#1{\begingroup\addfontfeature{Color=A52A2A}#1\endgroup}
+\def\chartreuse#1{\begingroup\addfontfeature{Color=7FFF00}#1\endgroup}
+\def\cornflowerblue#1{\begingroup\addfontfeature{Color=6495ED}#1\endgroup}
+\def\cyan#1{\begingroup\addfontfeature{Color=00FFFF}#1\endgroup}
+\def\darkgoldenrod#1{\begingroup\addfontfeature{Color=B8860B}#1\endgroup}
+\def\darkkhaki#1{\begingroup\addfontfeature{Color=BDB76B}#1\endgroup}
+\def\darkorange#1{\begingroup\addfontfeature{Color=FF8C00}#1\endgroup}
+\def\darksalmon#1{\begingroup\addfontfeature{Color=E9967A}#1\endgroup}
+\def\darkslategray#1{\begingroup\addfontfeature{Color=2F4F4F}#1\endgroup}
+\def\deeppink#1{\begingroup\addfontfeature{Color=FF1493}#1\endgroup}
+\def\dodgerblue#1{\begingroup\addfontfeature{Color=1E90FF}#1\endgroup}
+\def\forestgreen#1{\begingroup\addfontfeature{Color=228B22}#1\endgroup}
+\def\ghostwhite#1{\begingroup\addfontfeature{Color=F8F8FF}#1\endgroup}
+\def\gray#1{\begingroup\addfontfeature{Color=808080}#1\endgroup}
+\def\honeydew#1{\begingroup\addfontfeature{Color=F0FFF0}#1\endgroup}
+\def\indigo#1{\begingroup\addfontfeature{Color=4B0082}#1\endgroup}
+\def\lavender#1{\begingroup\addfontfeature{Color=E6E6FA}#1\endgroup}
+\def\lemonchiffon#1{\begingroup\addfontfeature{Color=FFFACD}#1\endgroup}
+\def\lightcyan#1{\begingroup\addfontfeature{Color=E0FFFF}#1\endgroup}
+\def\lightgrey#1{\begingroup\addfontfeature{Color=D3D3D3}#1\endgroup}
+\def\lightseagreen#1{\begingroup\addfontfeature{Color=20B2AA}#1\endgroup}
+\def\lightsteelblue#1{\begingroup\addfontfeature{Color=B0C4DE}#1\endgroup}
+\def\limegreen#1{\begingroup\addfontfeature{Color=32CD32}#1\endgroup}
+\def\maroon#1{\begingroup\addfontfeature{Color=800000}#1\endgroup}
+\def\mediumorchid#1{\begingroup\addfontfeature{Color=BA55D3}#1\endgroup}
+\def\mediumslateblue#1{\begingroup\addfontfeature{Color=7B68EE}#1\endgroup}
+\def\mediumvioletred#1{\begingroup\addfontfeature{Color=C71585}#1\endgroup}
+\def\mistyrose#1{\begingroup\addfontfeature{Color=FFE4E1}#1\endgroup}
+\def\navy#1{\begingroup\addfontfeature{Color=000080}#1\endgroup}
+\def\orange#1{\begingroup\addfontfeature{Color=FFA500}#1\endgroup}
+\def\palegoldenrod#1{\begingroup\addfontfeature{Color=EEE8AA}#1\endgroup}
+\def\palevioletred#1{\begingroup\addfontfeature{Color=DB7093}#1\endgroup}
+\def\peru#1{\begingroup\addfontfeature{Color=CD853F}#1\endgroup}
+\def\powderblue#1{\begingroup\addfontfeature{Color=B0E0E6}#1\endgroup}
+\def\rosybrown#1{\begingroup\addfontfeature{Color=BC8F8F}#1\endgroup}
+\def\salmon#1{\begingroup\addfontfeature{Color=FA8072}#1\endgroup}
+\def\seashell#1{\begingroup\addfontfeature{Color=FFF5EE}#1\endgroup}
+\def\skyblue#1{\begingroup\addfontfeature{Color=87CEEB}#1\endgroup}
+\def\springgreen#1{\begingroup\addfontfeature{Color=00FF7F}#1\endgroup}
+\def\teal#1{\begingroup\addfontfeature{Color=008080}#1\endgroup}
+\def\turquoise#1{\begingroup\addfontfeature{Color=40E0D0}#1\endgroup}
+\def\white#1{\begingroup\addfontfeature{Color=FFFFFF}#1\endgroup}
+\def\yellowgreen#1{\begingroup\addfontfeature{Color=9ACD32}#1\endgroup}
+\def\lightyellow#1{\begingroup\addfontfeature{Color=FFFFCC}#1\endgroup}
+\def\crimson#1{\begingroup\addfontfeature{Color=DC143C}#1\endgroup}
+\def\bluishgreenishgrey#1{\begingroup\addfontfeature{Color=568392}#1\endgroup}
+\endinput